[Numpy-discussion] NEP 32: Remove the financial functions from NumPy

Warren Weckesser warren.weckesser at gmail.com
Sun Sep 8 11:54:43 EDT 2019


On 9/4/19, Matthew Brett <matthew.brett at gmail.com> wrote:
> Hi,
>
> Maybe worth asking over at the Pandas list?  I bet there are more
> Python / finance people over there.


OK, I sent a message to the PyData mailing list.

Warren


>
> Cheers,
>
> Matthew
>
> On Wed, Sep 4, 2019 at 7:11 PM Ilhan Polat <ilhanpolat at gmail.com> wrote:
>>
>> +1 on removing them from NumPy. I think there are plenty of alternatives
>> already so many that we might even consider deprecating them just like
>> SciPy misc module by pointing to alternatives.
>>
>> On Tue, Sep 3, 2019 at 6:38 PM Sebastian Berg <sebastian at sipsolutions.net>
>> wrote:
>>>
>>> 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.weckesser at 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 at python.org
>>> > https://mail.python.org/mailman/listinfo/numpy-discussion
>>> _______________________________________________
>>> NumPy-Discussion mailing list
>>> NumPy-Discussion at python.org
>>> https://mail.python.org/mailman/listinfo/numpy-discussion
>>
>> _______________________________________________
>> NumPy-Discussion mailing list
>> NumPy-Discussion at python.org
>> https://mail.python.org/mailman/listinfo/numpy-discussion
> _______________________________________________
> NumPy-Discussion mailing list
> NumPy-Discussion at python.org
> https://mail.python.org/mailman/listinfo/numpy-discussion
>


More information about the NumPy-Discussion mailing list