NEP 32 — 从 NumPy 中删除财务函数#

作者

沃伦·韦凯瑟<沃伦.韦凯瑟@gmail ​ com >

地位

最终的

类型

标准轨道

创建

2019-08-30

解决

https://mail.python.org/pipermail/numpy-discussion/2019-September/080074.html

抽象的

我们建议弃用并最终从 NumPy 中删除财务功能[ 1 ] 。这些函数将被移动到一个独立的存储库,并作为一个名为 的单独包提供给社区 numpy_financial

动机和范围#

NumPy 金融函数[ 1 ]包括 10 个函数fv, ipmt, irr, mirr, , nper, npv, pmt,ppmtpvrate这些函数提供基本的财务计算,例如未来值、净现值等。这些函数于 2008 年添加到 NumPy [ 2 ]

2009 年 5 月,Joe Harrington 请求添加一个名为xirr财务函数的函数,引发了有关这些函数的长讨论[ 3 ]。该线程中提出的一个重要观点是“真正的”金融图书馆必须能够处理真实的日期。 NumPy 财务函数不适用于实际日期或日历。在该线程中多次表达了对独立于 NumPy 的更强大库的偏好。

2009年6月,DL Goldsmith对部分财务职能实施的正确性表示担忧[ 4 ]。当时有人建议将财务功能从 NumPy 转移到一个独立的包中。

在 2013 年的 GitHub 问题中[ 5 ],Nathaniel Smith 建议将财务功能从顶级命名空间转移到numpy.financial.他还建议给这些函数起更好的名称。当时的回应包括建议弃用它们并将它们从 NumPy 移至单独的包。这个问题仍然悬而未决。

2013 年晚些时候[ 6 ],邮件列表中有人建议从 NumPy 中删除这些函数。

从 NumPy 中删除这些函数的论点:

  • 它们对于 NumPy 来说太专业了。

  • 它们实际上对于“现实世界”的财务计算没有用,因为它们不处理真实​​的日期和日历。

  • 其中一些函数的“正确性”定义似乎是一个约定俗成的问题,当前的 NumPy 开发人员没有背景来判断它们的正确性。

  • 过go和现在的 NumPy 开发人员对维护这些功能兴趣不大。

将函数保留在 NumPy 中的主要论据是:

  • 删除这些功能会对某些用户造成干扰。当前用户必须将新numpy_financial包添加到其依赖项中,然后修改其代码以使用新包。

  • 提供的功能虽然不是“工业强度”,但显然与电子表格和一些计算器提供的功能相似。在 NumPy 中使用它们可以让一些开发人员更轻松地将他们的软件迁移到 Python 和 NumPy。

从邮件列表讨论和 GitHub 问题中的评论可以清楚地看出,许多当前的 NumPy 开发人员认为删除这些功能的好处超过了成本。例如,来自[ 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

从 2013 年邮件列表讨论来看,关于从 NumPy 中删除函数:

I am +1 as well, I don't think they should have been included in the first
place.
-- David Cournapeau

但并非所有人都赞成移除:

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

要了解财务功能的维护负担,可以查找所有带有标签的 GitHub 问题[ 7 ]和拉取请求[ 8 ]component: numpy.lib.financial

衡量删除这些函数的效果的一种方法是在 GitHub 上查找使用它们的所有包。这样的搜索可以通过python-api-inspect服务[ 9 ]来执行。搜索 NumPy 财务函数的所有用途仅发现八个存储库。 (有关实际的 SQL 查询,请参阅[ 5 ]中的注释。)

执行

  • 创建一个新的 Python 包 ,numpy_financial在顶级 NumPy github 组织中维护。该存储库将包含财务功能的定义和单元测试。该软件包将被添加到 PyPI,以便可以通过pip.

  • numpy从 NumPy 版本 1.18 开始,弃用命名空间中的财务函数。从 NumPy 1.20 版中删除财务函数。

向后兼容性#

如前所述,删除这些函数会破坏向后兼容性。通过提供库可以减轻影响numpy_financial

备择方案

[ 5 ]中提到了以下替代方案:

  • 保持功能不变(即不执行任何操作)。 回顾历史可以清楚地看出,这并不是许多 NumPy 开发人员的偏好。一个反复出现的评论是这些函数根本不属于 NumPy。当这种情绪与错误报告的历史以及有关功能正确性的持续问题相结合时,结论是最干净的解决方案是弃用和删除。

  • 将函数从“numpy”命名空间移动到“numpy.financial”。这是[ 5 ] 中最初的建议。这样的更改并没有解决维护问题,也没有改变许多开发人员认为这些函数与 NumPy 之间的不匹配。它对这些功能的当前用户造成干扰,而没有解决许多开发人员认为的根本问题。

讨论

已经提供了过go邮件列表讨论以及相关 GitHub 问题和拉取请求的链接。该 NEP 的公告于 2019 年 9 月 3 日在 NumPy-Discussion 邮件列表上发布[ 10 ],并于 2019 年 9 月 8 日在 PyData 邮件列表上发布[ 11 ]。接受NEP的正式提案于2019年9月19日提出[ 12 ];通知也被发送到 PyData(与[ 11 ]相同的线程)。没有出现任何实质性的反对意见。

参考文献和脚注#