Re: Deprecating positional arguments for functions whose signatures are being already
Matt Haberland <[email protected]> Thu, 2 Nov 2023 08:32:01 -0700
| Newsgroups | gmane.comp.python.scientific.devel |
|---|---|
| Message-ID | <CADuxUix6rX22bUtHfzkhg8G+twAbafaAgga6=+v5qWzGz1w2fw@mail.gmail.com> |
I favor doing a wholesale change (option 1). I wouldn't put a ban on incremental changes (option 2) that would take effect sooner, if motivated by some other need. I agree that the wholesale change sounds like a 2.0 thing. I'm happy with the decorator being applied as soon as 2.0 discussion starts in earnest, even without a firm date settled. On Mon, Oct 23, 2023 at 5:05 AM Evgeni Burovski <[email protected]> wrote: > FWIW, I'd think > - this is a good idea overall, and it's great to have momentum > - this sounds to me like a SciPy 2.0 event. I know we don't have any > specific plans for scipy 2.0; maybe this codebase-wide change could seed > working out in more details of what is scipy 2.0 and when. > > My two cents, > > Evgeni > > > > > On Mon, Oct 23, 2023 at 1:59 PM h.vetinari--- via SciPy-Dev < > [email protected]> wrote: > >> Dear all, >> >> In the context of maintaining our APIs, previous discussions recognized >> the advantages of using keyword-only arguments where appropriate, but it >> was decided that a "big bang" change of all our APIs is not desired, and so >> the current policy [1] states that this should only be done where APIs are >> already being changed _anyway_, for example because a certain argument in >> the signature is being removed (which would make positional-only use of all >> following arguments invalid). >> >> In the context of the ongoing deprecation work, we (meaning mainly myself >> and @j-bowhay) have taken this to mean "introduce the keyword-only cut-off >> at the _natural_ point in the signature". Obviously there is some degree of >> subjectivity in that, but I consider it strictly worse than doing nothing >> to introduce the cut-off between positional-or-keyword and keyword-only at >> exactly the point where a given deprecated argument gets removed. To me it >> is a binary choice "whether to make a function keyword-only at its natural >> point or not". >> >> To illustrate this distinction, let's imagine a function >> >> def func(x, y, z, option_A=..., option_B=..., option_C=...): ... >> >> Let's assume that option_B has become obsolete, or gets renamed, then - >> strictly speaking - only option_C would need to become keyword-only, and >> not option_A. However, I would argue that the only reasonable point to make >> this function keyword only is as follows: >> >> def func(x, y, z, *, option_A=..., option_C=...): ... >> >> This results in a "net additional deprecation" of positional usage of >> option_A vis-à-vis the most minimal deprecation to keep things working as >> before that would look as follows: >> >> def func(x, y, z, option_A=..., *, option_C=...): ... >> >> This is worse IMO because it creates an inconsistency in how conceptually >> equivalent arguments are treated in the API (one can be used positionally, >> one cannot), and risks having to _again_ deprecate something in the >> function if anything about option_A changes in the future. >> >> Obviously, not all examples are as clear-cut, and more than that, >> sometimes a given deprecation only affects a subset of functions that >> belong to an interrelated family, where the API should be consistent >> overall. More context and discussion about this can be found in [2]. >> >> For 1.12, we have taken all the functions being touched by deprecations >> and handled them accordingly (in accordance with their respective owners, >> in case the question about where to place the cut-off wasn't self-evident), >> which happened early in 1.12 development. Currently, the affected functions >> are (see also release notes): >> * linalg.{eigh, eigvalsh, pinv} >> * integrate.simpson >> * signal.{firls, firwin, firwin2, remez} >> * sparse.linalg.{bicg, bicgstab, cg, cgs, gcrotmk, gmres, lgmres, minres, >> qmr, tfqmr} >> * special.comb >> * stats.kendalltau >> >> It's worth noting that in some cases we delayed signature changes already >> announced for 1.12 or 1.13 to 1.14, in order to give people time to _also_ >> react to the fact that they now need to change away from positional usage >> of some keyword arguments in those functions. >> >> There was some discussion in [2] about these additional deprecations >> (e.g. the option_A case in the example above), resp. whether we should >> revisit the choice about doing a wholesale change of our APIs like e.g. >> scikit-learn did with SLEP009 [3]. >> >> I agreed to bring up this topic on the mailing list - please let us know >> your thoughts. The three broad choices (as far as I can tell) are: >> 1. wholesale change à la SLEP009 (this will need more discussion and a >> concrete plan of action IMO) >> 2. keep doing incremental changes as currently present in main (but >> changing over individual functions wholesale and not piecemeal w.r.t. their >> signature) >> 3. revert the change to keyword-only arguments for the above-mentioned >> functions >> >> Option 2. represents the status quo of both the current documented policy >> and the state of the repo on main. >> >> Best regards >> H. >> >> [1] >> https://docs.scipy.org/doc/scipy/dev/missing-bits.html#required-keyword-names >> [2] https://github.com/scipy/scipy/issues/18703 >> [3] https://github.com/scikit-learn/scikit-learn/issues/15005 >> _______________________________________________ >> SciPy-Dev mailing list -- [email protected] >> To unsubscribe send an email to [email protected] >> https://mail.python.org/mailman3/lists/scipy-dev.python.org/ >> Member address: [email protected] >> > _______________________________________________ > SciPy-Dev mailing list -- [email protected] > To unsubscribe send an email to [email protected] > https://mail.python.org/mailman3/lists/scipy-dev.python.org/ > Member address: [email protected] > _______________________________________________ SciPy-Dev mailing list -- [email protected] To unsubscribe send an email to [email protected] https://mail.python.org/mailman3/lists/scipy-dev.python.org/ Member address: [email protected]