Skip to content

Commit 9f0a2b2

Browse files
committed
Add numpy order parametrization
1 parent 3371dc4 commit 9f0a2b2

File tree

1 file changed

+21
-14
lines changed

1 file changed

+21
-14
lines changed

tests/test_v2.py

Lines changed: 21 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -195,8 +195,13 @@ def test_create_array_defaults(store: Store):
195195
)
196196

197197

198-
@pytest.mark.parametrize("order", ["C", "F"])
199-
def test_v2_non_contiguous(order: Literal["C", "F"]) -> None:
198+
@pytest.mark.parametrize("numpy_order", ["C", "F"])
199+
@pytest.mark.parametrize("zarr_order", ["C", "F"])
200+
def test_v2_non_contiguous(numpy_order: Literal["C", "F"], zarr_order: Literal["C", "F"]) -> None:
201+
"""
202+
Make sure zarr v2 arrays save data using the memory order given to the zarr array,
203+
not the memory order of the original numpy array.
204+
"""
200205
store = MemoryStore()
201206
arr = zarr.create_array(
202207
store,
@@ -208,25 +213,27 @@ def test_v2_non_contiguous(order: Literal["C", "F"]) -> None:
208213
filters=None,
209214
compressors=None,
210215
overwrite=True,
211-
order=order,
216+
order=zarr_order,
212217
)
213218

214-
# Non-contiguous write
215-
a = np.arange(arr.shape[0] * arr.shape[1]).reshape(arr.shape, order=order)
219+
# Non-contiguous write, using numpy memory order
220+
a = np.arange(arr.shape[0] * arr.shape[1]).reshape(arr.shape, order=numpy_order)
216221
arr[6:9, 3:6] = a[6:9, 3:6] # The slice on the RHS is important
217222
np.testing.assert_array_equal(arr[6:9, 3:6], a[6:9, 3:6])
218223

219224
np.testing.assert_array_equal(
220225
a[6:9, 3:6],
221226
np.frombuffer(
222227
sync(store.get("2.1", default_buffer_prototype())).to_bytes(), dtype="float64"
223-
).reshape((3, 3), order=order),
228+
).reshape((3, 3), order=zarr_order),
224229
)
225-
if order == "F":
230+
# After writing and reading from zarr array, order should be same as zarr order
231+
if zarr_order == "F":
226232
assert (arr[6:9, 3:6]).flags.f_contiguous
227233
else:
228234
assert (arr[6:9, 3:6]).flags.c_contiguous
229235

236+
# Contiguous write
230237
store = MemoryStore()
231238
arr = zarr.create_array(
232239
store,
@@ -238,17 +245,17 @@ def test_v2_non_contiguous(order: Literal["C", "F"]) -> None:
238245
compressors=None,
239246
filters=None,
240247
overwrite=True,
241-
order=order,
248+
order=zarr_order,
242249
)
243250

244-
# Contiguous write
245-
a = np.arange(9).reshape((3, 3), order=order)
246-
if order == "F":
247-
assert a.flags.f_contiguous
248-
else:
249-
assert a.flags.c_contiguous
251+
a = np.arange(9).reshape((3, 3), order=numpy_order)
250252
arr[6:9, 3:6] = a
251253
np.testing.assert_array_equal(arr[6:9, 3:6], a)
254+
# After writing and reading from zarr array, order should be same as zarr order
255+
if zarr_order == "F":
256+
assert (arr[6:9, 3:6]).flags.f_contiguous
257+
else:
258+
assert (arr[6:9, 3:6]).flags.c_contiguous
252259

253260

254261
def test_default_compressor_deprecation_warning():

0 commit comments

Comments
 (0)