@@ -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
254261def test_default_compressor_deprecation_warning ():
0 commit comments