sagemath / sage

Main repository of SageMath
https://www.sagemath.org
Other
1.4k stars 473 forks source link

sage.tensor, sage.manifolds: __copy__, __deepcopy__ methods for all classes that define "copy" methods #32476

Open mkoeppe opened 3 years ago

mkoeppe commented 3 years ago

git grep 'def copy' reveals a number of classes that define ad-hoc copy methods but not __copy__ methods. Hence, they do not implement the copy protocol https://docs.python.org/3/library/copy.html, so copy.copy will resort to pickling/unpickling for making a copy.

Components.copy, for example, implements an ad-hoc version of a deepcopy of sorts:

        for ind, val in self._comp.items():
            if isinstance(val, SageObject) and hasattr(val, 'copy'):
                result._comp[ind] = val.copy()
            else:
                result._comp[ind] = val

For classes whose instances are immutable, see #13811 instead.

CC: @tscrim @mjungmath @nbruin @kwankyu @kcrisman @egourgoulhon

Component: manifolds

Issue created by migration from https://trac.sagemath.org/ticket/32476

egourgoulhon commented 3 years ago
comment:1

Thanks for pointing this out!