@@ -78,24 +78,18 @@ def _determine_zarr_chunks(enc_chunks, var_chunks, ndim):
78
78
# while dask chunks can be variable sized
79
79
# http://dask.pydata.org/en/latest/array-design.html#chunks
80
80
if var_chunks and enc_chunks is None :
81
- all_var_chunks = list (product (* var_chunks ))
82
- first_var_chunk = all_var_chunks [0 ]
83
- # all but the last chunk have to match exactly
84
- for this_chunk in all_var_chunks [:- 1 ]:
85
- if this_chunk != first_var_chunk :
86
- raise ValueError (
87
- "Zarr requires uniform chunk sizes excpet for final chunk."
88
- " Variable %r has incompatible chunks. Consider "
89
- "rechunking using `chunk()`." % (var_chunks ,))
90
- # last chunk is allowed to be smaller
91
- last_var_chunk = all_var_chunks [- 1 ]
92
- for len_first , len_last in zip (first_var_chunk , last_var_chunk ):
93
- if len_last > len_first :
94
- raise ValueError (
95
- "Final chunk of Zarr array must be smaller than first. "
96
- "Variable %r has incompatible chunks. Consider rechunking "
97
- "using `chunk()`." % var_chunks )
98
- return first_var_chunk
81
+ if any (len (set (chunks [:- 1 ])) > 1 for chunks in var_chunks ):
82
+ raise ValueError (
83
+ "Zarr requires uniform chunk sizes excpet for final chunk."
84
+ " Variable %r has incompatible chunks. Consider "
85
+ "rechunking using `chunk()`." % (var_chunks ,))
86
+ if any ((chunks [0 ] < chunks [- 1 ]) for chunks in var_chunks ):
87
+ raise ValueError (
88
+ "Final chunk of Zarr array must be smaller than first. "
89
+ "Variable %r has incompatible chunks. Consider rechunking "
90
+ "using `chunk()`." % var_chunks )
91
+ # return the first chunk for each dimension
92
+ return tuple (chunk [0 ] for chunk in var_chunks )
99
93
100
94
# from here on, we are dealing with user-specified chunks in encoding
101
95
# zarr allows chunks to be an integer, in which case it uses the same chunk
0 commit comments