Skip to content

Commit db69824

Browse files
committed
orthogonal indexers strategy
1 parent addf7e8 commit db69824

File tree

1 file changed

+38
-0
lines changed

1 file changed

+38
-0
lines changed

xarray_array_testing/strategies.py

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,21 @@
88
from xr.testing.strategies import unique_subset_of
99

1010

11+
def _basic_indexers(size):
12+
return st.one_of(
13+
st.integers(min_value=-size, max_value=size - 1),
14+
st.slices(size),
15+
)
16+
17+
18+
def _outer_array_indexers(size, max_size):
19+
return npst.arrays(
20+
dtype=np.int64,
21+
shape=st.integers(min_value=1, max_value=min(size, max_size)),
22+
elements=st.integers(min_value=-size, max_value=size - 1),
23+
)
24+
25+
1126
# vendored from `xarray`, should be included in `xarray>=2026.01.0`
1227
@st.composite
1328
def basic_indexers(
@@ -101,6 +116,29 @@ def outer_array_indexers(
101116
return idxr
102117

103118

119+
@st.composite
120+
def orthogonal_indexers(
121+
draw,
122+
/,
123+
*,
124+
sizes: dict[Hashable, int],
125+
min_dims: int = 2,
126+
max_dims: int | None = None,
127+
max_size: int = 10,
128+
) -> dict[Hashable, int | slice | np.ndarray]:
129+
selected_dims = draw(unique_subset_of(sizes, min_size=min_dims, max_size=max_dims))
130+
131+
return {
132+
dim: draw(
133+
st.one_of(
134+
_basic_indexers(size),
135+
_outer_array_indexers(size, max_size),
136+
)
137+
)
138+
for dim, size in selected_dims.items()
139+
}
140+
141+
104142
@st.composite
105143
def vectorized_indexers(
106144
draw,

0 commit comments

Comments
 (0)