On Tue, 2019-09-03 at 08:56 -0400, Warren Weckesser wrote: > Github issue 2880 ("Get financial functions out of main namespace",
Very briefly, I am absolutely in favor of this. Keeping the functions in numpy seems more of a liability than help anyone. And this push is more likely to help users by spurring development on a good replacement, than a practically unmaintained corner of NumPy that may seem like it solves a problem, but probably does so very poorly. Moving them into a separate pip installable package seems like the best way forward until a better replacement, to which we can point users, comes up. - Sebastian > https://github.com/numpy/numpy/issues/2880) has been open since 2013. > In a recent community meeting, it was suggested that we create a NEP > to propose the removal of the financial functions from NumPy. I have > submitted "NEP 32: Remove the financial functions from NumPy" in a > pull request at https://github.com/numpy/numpy/pull/14399. A copy of > the latest version of the NEP is below. > > According to the NEP process document, "Once the PR is in place, the > NEP should be announced on the mailing list for discussion (comments > on the PR itself should be restricted to minor editorial and > technical fixes)." This email is the announcement for NEP 32. > > The NEP includes a brief summary of the history of the financial > functions, and has links to several relevant mailing list threads, > dating back to when the functions were added to NumPy in 2008. I > recommend reviewing those threads before commenting here. > > Warren > > ----- > > ================================================== > NEP 32 — Remove the financial functions from NumPy > ================================================== > > :Author: Warren Weckesser <warren.weckes...@gmail.com> > :Status: Draft > :Type: Standards Track > :Created: 2019-08-30 > > > Abstract > -------- > > We propose deprecating and ultimately removing the financial > functions [1]_ > from NumPy. The functions will be moved to an independent > repository, > and provided to the community as a separate package with the name > ``numpy_financial``. > > > Motivation and scope > -------------------- > > The NumPy financial functions [1]_ are the 10 functions ``fv``, > ``ipmt``, > ``irr``, ``mirr``, ``nper``, ``npv``, ``pmt``, ``ppmt``, ``pv`` and > ``rate``. > The functions provide elementary financial calculations such as > future value, > net present value, etc. These functions were added to NumPy in 2008 > [2]_. > > In May, 2009, a request by Joe Harrington to add a function called > ``xirr`` to > the financial functions triggered a long thread about these functions > [3]_. > One important point that came up in that thread is that a "real" > financial > library must be able to handle real dates. The NumPy financial > functions do > not work with actual dates or calendars. The preference for a more > capable > library independent of NumPy was expressed several times in that > thread. > > In June, 2009, D. L. Goldsmith expressed concerns about the > correctness of the > implementations of some of the financial functions [4]_. It was > suggested then > to move the financial functions out of NumPy to an independent > package. > > In a GitHub issue in 2013 [5]_, Nathaniel Smith suggested moving the > financial > functions from the top-level namespace to ``numpy.financial``. He > also > suggested giving the functions better names. Responses at that time > included > the suggestion to deprecate them and move them from NumPy to a > separate > package. This issue is still open. > > Later in 2013 [6]_, it was suggested on the mailing list that these > functions > be removed from NumPy. > > The arguments for the removal of these functions from NumPy: > > * They are too specialized for NumPy. > * They are not actually useful for "real world" financial > calculations, because > they do not handle real dates and calendars. > * The definition of "correctness" for some of these functions seems > to be a > matter of convention, and the current NumPy developers do not have > the > background to judge their correctness. > * There has been little interest among past and present NumPy > developers > in maintaining these functions. > > The main arguments for keeping the functions in NumPy are: > > * Removing these functions will be disruptive for some users. > Current users > will have to add the new ``numpy_financial`` package to their > dependencies, > and then modify their code to use the new package. > * The functions provided, while not "industrial strength", are > apparently > similar to functions provided by spreadsheets and some > calculators. Having > them available in NumPy makes it easier for some developers to > migrate their > software to Python and NumPy. > > It is clear from comments in the mailing list discussions and in the > GitHub > issues that many current NumPy developers believe the benefits of > removing > the functions outweigh the costs. For example, from [5]_:: > > The financial functions should probably be part of a separate > package > -- Charles Harris > > If there's a better package we can point people to we could just > deprecate > them and then remove them entirely... I'd be fine with that > too... > -- Nathaniel Smith > > +1 to deprecate them. If no other package exists, it can be > created if > someone feels the need for that. > -- Ralf Gommers > > I feel pretty strongly that we should deprecate these. If nobody > on numpy’s > core team is interested in maintaining them, then it is purely a > drag on > development for NumPy. > -- Stephan Hoyer > > And from the 2013 mailing list discussion, about removing the > functions from > NumPy:: > > I am +1 as well, I don't think they should have been included in > the first > place. > -- David Cournapeau > > But not everyone was in favor of removal:: > > The fin routines are tiny and don't require much maintenance once > written. If we made an effort (putting up pages with examples of > common > financial calculations and collecting those under a topical web > page, > then linking to that page from various places and talking it up), > I > would think they could attract users looking for a free way to > play with > financial scenarios. [...] > So, I would say we keep them. If ours are not the best, we > should bring > them up to snuff. > -- Joe Harrington > > For an idea of the maintenance burden of the financial functions, one > can > look for all the GitHub issues [7]_ and pull requests [8]_ that have > the tag > ``component: numpy.lib.financial``. > > One method for measuring the effect of removing these functions is to > find > all the packages on GitHub that use them. Such a search can be > performed > with the ``python-api-inspect`` service [9]_. A search for all uses > of the > NumPy financial functions finds just eight repositories. (See the > comments > in [5]_ for the actual SQL query.) > > > Implementation > -------------- > > * Create a new Python package, ``numpy_financial``, to be maintained > in the > top-level NumPy github organization. This repository will contain > the > definitions and unit tests for the financial functions. The > package will > be added to PyPI so it can be installed with ``pip``. > * Deprecate the financial functions in the ``numpy`` namespace, > beginning in > NumPy version 1.18. Remove the financial functions from NumPy > version 1.20. > > > Backward compatibility > ---------------------- > > The removal of these functions breaks backward compatibility, as > explained > earlier. The effects are mitigated by providing the > ``numpy_financial`` > library. > > > Alternatives > ------------ > > The following alternatives were mentioned in [5]_: > > * *Maintain the functions as they are (i.e. do nothing).* > A review of the history makes clear that this is not the preference > of many > NumPy developers. A recurring comment is that the functions simply > do not > belong in NumPy. When that sentiment is combined with the history > of bug > reports and the ongoing questions about the correctness of the > functions, the > conclusion is that the cleanest solution is deprecation and > removal. > * *Move the functions from the ``numpy`` namespace to > ``numpy.financial``.* > This was the initial suggestion in [5]_. Such a change does not > address the > maintenance issues, and doesn't change the misfit that many > developers see > between these functions and NumPy. It causes disruption for the > current > users of these functions without addressing what many developers > see as the > fundamental problem. > > > Discussion > ---------- > > Links to past mailing list discussions, and to relevant GitHub issues > and pull > requests, have already been given. > > > References and footnotes > ------------------------ > > .. [1] Financial functions, > https://numpy.org/doc/1.17/reference/routines.financial.html > > .. [2] Numpy-discussion mailing list, "Simple financial functions for > NumPy", > > https://mail.python.org/pipermail/numpy-discussion/2008-April/032353.html > > .. [3] Numpy-discussion mailing list, "add xirr to numpy financial > functions?", > > https://mail.python.org/pipermail/numpy-discussion/2009-May/042645.html > > .. [4] Numpy-discussion mailing list, "Definitions of pv, fv, nper, > pmt, and rate", > > https://mail.python.org/pipermail/numpy-discussion/2009-June/043188.html > > .. [5] Get financial functions out of main namespace, > https://github.com/numpy/numpy/issues/2880 > > .. [6] Numpy-discussion mailing list, "Deprecation of financial > routines", > > https://mail.python.org/pipermail/numpy-discussion/2013-August/067409.html > > .. [7] ``component: numpy.lib.financial`` issues, > > https://github.com/numpy/numpy/issues?utf8=%E2%9C%93&q=is%3Aissue+label%3A%22component%3A+numpy.lib.financial%22+ > > .. [8] ``component: numpy.lib.financial`` pull request, > > https://github.com/numpy/numpy/pulls?utf8=%E2%9C%93&q=is%3Apr+label%3A%22component%3A+numpy.lib.financial%22+ > > .. [9] Quansight-Labs/python-api-inspect, > https://github.com/Quansight-Labs/python-api-inspect/ > > > Copyright > --------- > > This document has been placed in the public domain. > > _______________________________________________ > NumPy-Discussion mailing list > NumPy-Discussion@python.org > https://mail.python.org/mailman/listinfo/numpy-discussion
signature.asc
Description: This is a digitally signed message part
_______________________________________________ NumPy-Discussion mailing list NumPy-Discussion@python.org https://mail.python.org/mailman/listinfo/numpy-discussion