Skip to content

Commit 95372cc

Browse files
committed
preserve filters, order, fill_value on copy zarr-to-zarr
1 parent 7d3b38c commit 95372cc

File tree

2 files changed

+16
-2
lines changed

2 files changed

+16
-2
lines changed

zarr/convenience.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -793,19 +793,25 @@ def _copy(log, source, dest, name, root, shallow, without_attrs, if_exists,
793793
kws.setdefault('compression', source.compression)
794794
kws.setdefault('compression_opts', source.compression_opts)
795795
kws.setdefault('shuffle', source.shuffle)
796+
kws.setdefault('fletcher32', source.fletcher32)
797+
kws.setdefault('fillvalue', source.fillvalue)
796798
else:
797799
# h5py -> zarr; use zarr default compression options
798-
pass
800+
kws.setdefault('fill_value', source.fillvalue)
799801
else:
800802
if dest_h5py:
801803
# zarr -> h5py; use some vaguely sensible defaults
802804
kws.setdefault('chunks', True)
803805
kws.setdefault('compression', 'gzip')
804806
kws.setdefault('compression_opts', 1)
805807
kws.setdefault('shuffle', False)
808+
kws.setdefault('fillvalue', source.fill_value)
806809
else:
807810
# zarr -> zarr; preserve compression options by default
808811
kws.setdefault('compressor', source.compressor)
812+
kws.setdefault('filters', source.filters)
813+
kws.setdefault('order', source.order)
814+
kws.setdefault('fill_value', source.fill_value)
809815

810816
# create new dataset in destination
811817
ds = dest.create_dataset(name, shape=source.shape,

zarr/tests/test_convenience.py

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -315,8 +315,14 @@ def setUp(self):
315315
foo.attrs['experiment'] = 'weird science'
316316
baz = foo.create_dataset('bar/baz', data=np.arange(100), chunks=(50,))
317317
baz.attrs['units'] = 'metres'
318+
if self.source_h5py:
319+
extra_kws = dict(compression='gzip', compression_opts=3, fillvalue=84,
320+
shuffle=True, fletcher32=True)
321+
else:
322+
extra_kws = dict(compressor=Zlib(3), order='F', fill_value=42,
323+
filters=[Adler32()])
318324
source.create_dataset('spam', data=np.arange(100, 200).reshape(20, 5),
319-
chunks=(10, 2))
325+
chunks=(10, 2), dtype='i2', **extra_kws)
320326
self.source = source
321327

322328
def test_copy_array(self):
@@ -326,6 +332,8 @@ def test_copy_array(self):
326332
# copy array with default options
327333
copy(source['foo/bar/baz'], dest)
328334
check_copied_array(source['foo/bar/baz'], dest['baz'])
335+
copy(source['spam'], dest)
336+
check_copied_array(source['spam'], dest['spam'])
329337

330338
def test_copy_array_name(self):
331339
source = self.source

0 commit comments

Comments
 (0)