Skip to main content

pytest-regressions plugin for xarray

Project description

PyPI version Build status

A pytest-regressions plugin for identifying regressions in Xarray objects.

[!WARNING] xarray-regressions is in early development and might have breaking changes.

Install

pip install xarray-regressions

Usage

[!TIP] If you're unfamiliar with pytest-regressions, check out their documentation first.

Once installed, this package registers a test fixture xarray_regression for detecting regressions in the data or metadata of xr.DataArray and xr.Dataset objects.

Say you have a function make_dataarray that should always return the same output:

import xarray as xr

def make_dataarray(name: str) -> xr.DataArray:
    """A dummy method that needs to be tested."""
    return xr.DataArray(
        np.full((2, 4, 3), 1),
        dims=["variable", "y", "x"],
        coords={
            "variable": ["var1", "var2"],
            "y": [1, 2, 3, 4],
            "x": [1, 2, 3],
        },
        name=name,
        attrs={"foo": "bar"},
    )

Add the xarray_regression fixture to a new test and call the check method on the returned data array:

from xarray_regressions import XarrayRegressionFixture # Only used for type annotation

def test_make_dataarray(xarray_regression: XarrayRegressionFixture):
    """Test that the function always returns an identical xr.DataArray."""
    da = make_dataarray(name="test_array")
    xarray_regression.check(
        da,
        check_name=True,
        check_attrs=True,
    )

Running the test once will write da to a local NetCDF[^netcdf], and future test runs will compare da with the stored result. Values, dimensions, and coordinates are checked using xr.testing.assert_allclose to allow for minor floating point differences between systems, but can be tested for exact equality by specifying rtol=0 and atol=0. Names and attributes are checked separately. Encodings are not currently checked.

If make_dataarray(name="test_array") returns a different result in the future, the test will fail:

AssertionError: DataArray names are different. L: foo, R: test_array

Testing multiple objects

To test multiple objects in the same test, you can pass an obj_id argument to the check method. This will be appended to the basename (by default, the name of the test) so that each object is saved to a separate file.

def test_make_dataarray(xarray_regression: XarrayRegressionFixture):
    """Test that the function always returns an identical xr.DataArray."""
    da1 = make_dataarray(name="test_array_1")
    da2 = make_dataarray(name="test_array_2")
    
    xarray_regression.check(da1, obj_id="da1", check_name=True)
    xarray_regression.check(da2, obj_id="da2", check_name=True)

When adding new tests with multiple objects, the --regen-all flag can be helpful to avoid pytest-regressions aborting on the first missing file.

[^netcdf]: Because results are stored in NetCDF, all tested objects must be serializable.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

xarray_regressions-0.0.3.tar.gz (48.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

xarray_regressions-0.0.3-py3-none-any.whl (6.1 kB view details)

Uploaded Python 3

File details

Details for the file xarray_regressions-0.0.3.tar.gz.

File metadata

  • Download URL: xarray_regressions-0.0.3.tar.gz
  • Upload date:
  • Size: 48.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for xarray_regressions-0.0.3.tar.gz
Algorithm Hash digest
SHA256 b989b81f80f6e05aa2952d27cda44fb21970acda8dae4159b9c706a68135d42a
MD5 7d8f7c62deb8e3070d33c465446cc665
BLAKE2b-256 825b8f51036464398f5f55f8e20dee6a4b57791fb3080650cac5aca105c9a9da

See more details on using hashes here.

Provenance

The following attestation bundles were made for xarray_regressions-0.0.3.tar.gz:

Publisher: publish.yaml on aazuspan/xarray-regressions

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file xarray_regressions-0.0.3-py3-none-any.whl.

File metadata

File hashes

Hashes for xarray_regressions-0.0.3-py3-none-any.whl
Algorithm Hash digest
SHA256 752e00b340680c26428a625df2daa66a676b5d2386358a724026912eaaafda03
MD5 5401c0153a24d97e751e631a9a4e2608
BLAKE2b-256 93f03b681f530bd9f38cd32ed7a9233f7ac9a2278672ea4cd0582d90b8fa2a44

See more details on using hashes here.

Provenance

The following attestation bundles were made for xarray_regressions-0.0.3-py3-none-any.whl:

Publisher: publish.yaml on aazuspan/xarray-regressions

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page