[Numpy-discussion] copy="never" discussion and no deprecation cycle?

Eric Wieser wieser.eric+numpy at gmail.com
Mon Jun 21 12:56:25 EDT 2021


Stefan, that sketch is more complicated than it needs to be - `np.copy` is
a python function, so you can just attach the attributes directly!
(although maybe there are implications for static typing)
```
class CopyFlag(enum.Enum):
    IF_NEEDED = 0
    ALWAYS = 1
    NEVER = 2

np.copy.IF_NEEDED = CopyFlag.IF_NEEDED
np.copy.ALWAYS = CopyFlag.ALWAYS
np.copy.NEVER = CopyFlag.NEVER
```
It would also work nicely for the `True/False/other` version that was
proposed in the much older PR as `np.never_copy`:
```
class _CopyNever:
    def __bool__(self): raise ValueError

np.copy.NEVER = _CopyNever()
```

All of these versions (and using the enum directly) seem fine to me.
If we go down the enum route route, we probably want to add "new-style"
versions of `np.CLIP` and friends that are true enums / live within a more
obvious namespace.

Eric

On Mon, 21 Jun 2021 at 17:24, Stefan van der Walt <stefanv at berkeley.edu>
wrote:

> On Sun, Jun 20, 2021, at 20:46, Gagandeep Singh wrote:
> > I have recently joined the mailing list and have gone through the
> previous discussions on this thread. I would like to share my analysis
> (advantages and disadvantages) of three possible alternatives (Enum,
> String, boolean) to support the proposed feature.
>
> Thanks for this thorough analysis, Gagandeep!
>
> I'll throw one more heretical idea out there:
>
> `np.copy.IF_NEEDED`, `np.copy.ALWAYS`, `np.copy.NEVER`.
>
> This has the advantages of the enum, doesn't pollute the global namespace,
> and has an intuitive name.
>
> `np.array(x, copy=np.copy.ALWAYS)`
>
> It would be slightly more awkward to type, but is doable.  A rough Python
> version sketch would be:
>
> class CopyFlag(enum.Enum):
>     IF_NEEDED = 0
>     ALWAYS = 1
>     NEVER = 2
>
> class NpCopy:
>     IF_NEEDED : CopyFlag = CopyFlag.IF_NEEDED
>     ALWAYS : CopyFlag = CopyFlag.ALWAYS
>     NEVER : CopyFlag = CopyFlag.NEVER
>
>     def __call__(self, x):
>         return ...whatever copy returns...
>
> np.copy = NpCopy()
>
>
> Stéfan
> _______________________________________________
> NumPy-Discussion mailing list
> NumPy-Discussion at python.org
> https://mail.python.org/mailman/listinfo/numpy-discussion
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.python.org/pipermail/numpy-discussion/attachments/20210621/5f73b2b6/attachment.html>


More information about the NumPy-Discussion mailing list