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

Matthew Brett matthew.brett at gmail.com
Wed Sep 4 14:17:01 EDT 2019


Hi,

Maybe worth asking over at the Pandas list?  I bet there are more
Python / finance people over there.

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


More information about the NumPy-Discussion mailing list