Skip to content

Commit 4347a32

Browse files
keewisjthielen
andauthored
expose testing functions as public API (#24)
* add a assert_units_equal function * expose the testing module * set a fallback version * document the testing functions * add a docstring * Update pint_xarray/testing.py Co-authored-by: Jon Thielen <[email protected]> * Update pint_xarray/testing.py Co-authored-by: keewis <[email protected]> Co-authored-by: Jon Thielen <[email protected]>
1 parent 226f747 commit 4347a32

File tree

5 files changed

+104
-16
lines changed

5 files changed

+104
-16
lines changed

docs/api.rst

Lines changed: 21 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
.. currentmodule:: xarray
2-
31
API reference
42
=============
53
This page contains a auto-generated summary of ``pint-xarray``'s API.
@@ -11,28 +9,36 @@ Dataset
119
:toctree: generated/
1210
:template: autosummary/accessor_method.rst
1311

14-
Dataset.pint.quantify
15-
Dataset.pint.dequantify
16-
Dataset.pint.to
17-
Dataset.pint.to_base_units
18-
Dataset.pint.to_system
12+
xarray.Dataset.pint.quantify
13+
xarray.Dataset.pint.dequantify
14+
xarray.Dataset.pint.to
15+
xarray.Dataset.pint.to_base_units
16+
xarray.Dataset.pint.to_system
1917

2018
DataArray
2119
---------
2220
.. autosummary::
2321
:toctree: generated/
2422
:template: autosummary/accessor_attribute.rst
2523

26-
DataArray.pint.magnitude
27-
DataArray.pint.units
28-
DataArray.pint.dimensionality
29-
DataArray.pint.registry
24+
xarray.DataArray.pint.magnitude
25+
xarray.DataArray.pint.units
26+
xarray.DataArray.pint.dimensionality
27+
xarray.DataArray.pint.registry
3028

3129
.. autosummary::
3230
:toctree: generated/
3331
:template: autosummary/accessor_method.rst
3432

35-
DataArray.pint.quantify
36-
DataArray.pint.dequantify
37-
DataArray.pint.to
38-
DataArray.pint.to_base_units
33+
xarray.DataArray.pint.quantify
34+
xarray.DataArray.pint.dequantify
35+
xarray.DataArray.pint.to
36+
xarray.DataArray.pint.to_base_units
37+
38+
Testing
39+
-------
40+
41+
.. autosummary::
42+
:toctree: generated/
43+
44+
pint_xarray.testing.assert_units_equal

pint_xarray/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
except ImportError:
44
from importlib_metadata import version
55

6+
from . import testing # noqa
67
from .accessors import PintDataArrayAccessor, PintDatasetAccessor # noqa
78

89
try:

pint_xarray/testing.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
from . import conversion
2+
3+
4+
def assert_units_equal(a, b):
5+
""" assert that the units of two xarray objects are equal
6+
7+
Raises an :py:exc:`AssertionError` if the units of both objects are not
8+
equal. ``units`` attributes and attached unit objects are compared
9+
separately.
10+
11+
Parameters
12+
----------
13+
a, b : DataArray or Dataset
14+
The objects to compare
15+
"""
16+
17+
__tracebackhide__ = True
18+
19+
assert conversion.extract_units(a) == conversion.extract_units(b)
20+
assert conversion.extract_unit_attributes(a) == conversion.extract_unit_attributes(
21+
b
22+
)

pint_xarray/tests/test_testing.py

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
import pint
2+
import pytest
3+
import xarray as xr
4+
5+
from pint_xarray import testing
6+
7+
unit_registry = pint.UnitRegistry(force_ndarray_like=True)
8+
9+
10+
@pytest.mark.parametrize(
11+
("a", "b", "error"),
12+
(
13+
pytest.param(
14+
xr.DataArray(attrs={"units": "K"}),
15+
xr.DataArray(attrs={"units": "K"}),
16+
None,
17+
id="equal attrs",
18+
),
19+
pytest.param(
20+
xr.DataArray(attrs={"units": "m"}),
21+
xr.DataArray(attrs={"units": "K"}),
22+
AssertionError,
23+
id="different attrs",
24+
),
25+
pytest.param(
26+
xr.DataArray([10, 20] * unit_registry.K),
27+
xr.DataArray([50, 80] * unit_registry.K),
28+
None,
29+
id="equal units",
30+
),
31+
pytest.param(
32+
xr.DataArray([10, 20] * unit_registry.K),
33+
xr.DataArray([50, 80] * unit_registry.dimensionless),
34+
AssertionError,
35+
id="different units",
36+
),
37+
pytest.param(
38+
xr.Dataset({"a": ("x", [0, 10], {"units": "K"})}),
39+
xr.Dataset({"a": ("x", [20, 40], {"units": "K"})}),
40+
None,
41+
id="matching variables",
42+
),
43+
pytest.param(
44+
xr.Dataset({"a": ("x", [0, 10], {"units": "K"})}),
45+
xr.Dataset({"b": ("x", [20, 40], {"units": "K"})}),
46+
AssertionError,
47+
id="mismatching variables",
48+
),
49+
),
50+
)
51+
def test_assert_units_equal(a, b, error):
52+
if error is not None:
53+
with pytest.raises(error):
54+
testing.assert_units_equal(a, b)
55+
56+
return
57+
58+
testing.assert_units_equal(a, b)

pyproject.toml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,5 @@
22
requires = ["setuptools >= 42", "wheel", "setuptools_scm[toml] >= 3.4"]
33
build-backend = "setuptools.build_meta"
44

5-
[tool.setuptools_scm]
5+
[tool.setuptools_scm]
6+
fallback_version = "999"

0 commit comments

Comments
 (0)