On Mon, 2021-07-05 at 11:17 -0700, Stefan van der Walt wrote: > On Mon, Jul 5, 2021, at 00:42, Ralf Gommers wrote: > > I share your dislike, but I don't really see a better place where > > it doesn't make it even harder to spell, but I did just think of an > > alternative that may actually be quite reasonable: keep it private. > > That would be fine. We haven't had this feature requested for many > years, so as long as it is available in some shape or form it should > satisfy the advanced users who need it. It also doesn't force us > into a decision we cannot reverse (adding to the top-level API). >
I am happy with (semi?)-private. Although, I would prefer a long-term goal we can work towards. > > The reason why Gagandeep started working on this is so we can have > > the never-copy behavior in the `numpy.array_api` namespace. For the > > `asarray` function there, the `copy` keyword is still boolean, with > > description: > > > > Whether or not to make a copy of the input. If ` True`, always > > copies. > > If ` False`, never copies for input which supports DLPack or > > the buffer protocol, > > and raises ` ValueError`` `in case that would be necessary. > > If ` None ` , reuses existing memory buffer if possible, copies > > otherwise. > > Default: ` None`. > > > > In the end I think that's better than strings, and way better than > > enums - we just can't have that in the main namespace, because we > > can't change what `False` does. > If we can converge on this as an ideal API, should we really keep `copy=False` around without a warning? And if tag on a warning, maybe we may as well migrate NumPy itself (excruciatingly slow if necessary)? We seem to find some principle to dislike every single idea (I am probably forgetting a few): * Enums: * Namespace bloat * (Maybe clunky spelling) * Strings: * not strictly backward compatible (if accidentally used on old versions or potentially `__array_function__`.) * Slow to transition necessary * (Possibly not a good mix with `True/False` in general) * Transition `copy={True, False, None}`: * "Terrible API for a 3-way option" * some users have to update their code (libraries more than end-users, and libraries are easier to update). and I am honestly not sure that any of those is worrying. My preference would be to decide on the ideal API, and then move towards it. And if we don't think `CopyMode` is the right solution then it should be added only "semi-public": Probably with an underscore and documented to go away again, but allowing a pattern of: if np.__version__ > 1.22.0: if hasattr(np, "_CopyMode"): never_copy = np._CopyMode.NEVER else: never_copy = "never" else: # oops For libraries that need to work around transition difficulties. About a NEP: I am not sure we need one, although I am not opposed. It may make sense... Especially if whatever we converge on violates some written or unwritten "policy". However, I am wary to bring up a possible NEP if there is no clarity of where things are going. IMO, a NEP should be a concrete proposal, and that means that whoever writes it must have confidence in a proposal. If we transitioned from the brain-storming stage to a "formal decision making" one, then maybe a NEP is what we need. But, I currently don't know what the concrete proposal would be. Cheers, Sebastian > I agree < > https://github.com/numpy/numpy/pull/19173#issuecomment-858226896> > that this is a good API (although not everybody else does). < > https://github.com/numpy/numpy/pull/19173#issuecomment-860314626> > > W.r.t. NumPy's API: it could be okay to change the behavior of > copy=False to make it more strict (no copies ever), because then at > least errors will be raised and we can provide a message with > instructions on how to fix it. > > Stéfan > _______________________________________________ > NumPy-Discussion mailing list > 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