Skip to content
Merged
Show file tree
Hide file tree
Changes from 5 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion ci/requirements/environment.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,11 @@ name: xarray-array-testing-tests
channels:
- conda-forge
dependencies:
- python=3.12
- ipython
- pre-commit
- pytest
- pytest-reportlog
- pytest-cov
- hypothesis
- xarray
- numpy
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[project]
name = "xarray-array-testing"
requires-python = ">= 3.12"
requires-python = ">= 3.11"
license = {text = "Apache-2.0"}
dependencies = [
"hypothesis",
Expand Down
17 changes: 17 additions & 0 deletions xarray_array_testing/creation.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
import hypothesis.strategies as st
import xarray.testing.strategies as xrst
from hypothesis import given


class CreationTests:
array_type: type

@staticmethod
def array_strategy_fn(*, shape, dtype):
raise NotImplementedError

@given(st.data())
def test_create_variable(self, data):
variable = data.draw(xrst.variables(array_strategy_fn=self.array_strategy_fn))

assert isinstance(variable.data, self.array_type)
43 changes: 43 additions & 0 deletions xarray_array_testing/reduction.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
from contextlib import nullcontext
from types import ModuleType

import hypothesis.strategies as st
import numpy as np
import xarray.testing.strategies as xrst
from hypothesis import given


class ReductionTests:
xp: ModuleType

@staticmethod
def array_strategy_fn(*, shape, dtype):
raise NotImplementedError

@staticmethod
def assert_equal(a, b):
np.testing.assert_allclose(a, b)

@staticmethod
def expected_errors(op, **parameters):
return nullcontext()

@given(st.data())
def test_variable_mean(self, data):
variable = data.draw(xrst.variables(array_strategy_fn=self.array_strategy_fn))

with self.expected_errors("mean", variable=variable):
actual = variable.mean().data
expected = self.xp.mean(variable.data)

self.assert_equal(actual, expected)

@given(st.data())
def test_variable_prod(self, data):
variable = data.draw(xrst.variables(array_strategy_fn=self.array_strategy_fn))

with self.expected_errors("prod", variable=variable):
actual = variable.prod().data
expected = self.xp.prod(variable.data)

self.assert_equal(actual, expected)
26 changes: 26 additions & 0 deletions xarray_array_testing/tests/test_numpy.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
import hypothesis.strategies as st
import numpy as np

from xarray_array_testing.creation import CreationTests
from xarray_array_testing.reduction import ReductionTests


def create_numpy_array(*, shape, dtype):
return st.builds(np.ones, shape=st.just(shape), dtype=st.just(dtype))


class TestCreationNumpy(CreationTests):
array_type = np.ndarray
array_module = np

@staticmethod
def array_strategy_fn(*, shape, dtype):
return create_numpy_array(shape=shape, dtype=dtype)


class TestReductionNumpy(ReductionTests):
xp = np

@staticmethod
def array_strategy_fn(*, shape, dtype):
return create_numpy_array(shape=shape, dtype=dtype)