Source code for syncopy.datatype.methods.copy
# -*- coding: utf-8 -*-
#
# Syncopy's (deep) copy function
#
# Builtin/3rd party package imports
from copy import copy as py_copy
import shutil
import h5py
import numpy as np
# Syncopy imports
from syncopy.shared.parsers import data_parser
from syncopy.shared.errors import SPYInfo
__all__ = ["copy"]
# Return a deep copy of the current class instance
[docs]def copy(spydata):
"""
Create a copy of the entire Syncopy object `data` on disk
Parameters
----------
spydata : Syncopy data object
Object to be copied on disk
Returns
-------
cpy : Syncopy data object
Reference to the copied data object
on disk
Notes
-----
For copying only a subset of the `data` use :func:`syncopy.selectdata` directly
with the default `inplace=False` parameter.
Syncopy objects may also be copied using the class method ``.copy`` that
acts as a wrapper for :func:`syncopy.copy`
See also
--------
:func:`syncopy.save` : save to specific file path
:func:`syncopy.selectdata` : creates copy of a selection with `inplace=False`
"""
# Make sure `data` is a valid Syncopy data object
data_parser(spydata, varname="data", writable=None, empty=False)
dsize = np.prod(spydata.data.shape) * spydata.data.dtype.itemsize / 1024**2
msg = f"Copying {dsize:.2f} MB of data " f"to create new {spydata.__class__.__name__} object on disk"
SPYInfo(msg)
# Shallow copy, captures also non-default/temporary attributes.
copy_spydata = py_copy(spydata)
copy_filename = spydata._gen_filename()
copy_spydata.filename = copy_filename
spydata.clear()
spydata._close()
# Copy data on disk.
shutil.copyfile(spydata.filename, copy_filename, follow_symlinks=False)
spydata._reopen()
# Reattach properties
for propertyName in spydata._hdfFileDatasetProperties:
prop = getattr(spydata, "_" + propertyName)
if isinstance(prop, h5py.Dataset):
sourceName = prop.name
setattr(
copy_spydata,
"_" + propertyName,
h5py.File(copy_filename, mode=copy_spydata.mode)[sourceName],
)
else: # np.ndarray
setattr(copy_spydata, "_" + propertyName, prop)
return copy_spydata