> 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)
For the type annotations we can simply use something akin to Stéfans proposed `NpCopy` class; probably in combination with `Protocol`. It's a bit more work compared to annotating a normal python function, but it's quite easy nevertheless. Regards, Bas ________________________________ From: NumPy-Discussion <numpy-discussion-bounces+bas.vanbeek=hotmail....@python.org> on behalf of Eric Wieser <wieser.eric+nu...@gmail.com> Sent: 21 June 2021 18:56 To: Discussion of Numerical Python <numpy-discussion@python.org> Subject: Re: [Numpy-discussion] copy="never" discussion and no deprecation cycle? 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 <stef...@berkeley.edu<mailto:stef...@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@python.org<mailto:NumPy-Discussion@python.org> https://mail.python.org/mailman/listinfo/numpy-discussion
_______________________________________________ NumPy-Discussion mailing list NumPy-Discussion@python.org https://mail.python.org/mailman/listinfo/numpy-discussion