NEP 32 — 从 NumPy 中移除金融函数#
- 作者:
Warren Weckesser <warren.weckesser@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
、ppmt
、pv
和 rate
。这些函数提供基本的财务计算,例如未来值、净现值等。这些函数于 2008 年添加到 NumPy[2]。
2009 年 5 月,Joe Harrington 要求添加一个名为 xirr
的函数到金融函数中,这引发了一场关于这些函数的长讨论[3]。在那次讨论中出现的一个重要观点是,“真正的”金融库必须能够处理真实的日期。NumPy 金融函数不使用实际日期或日历。在该讨论中多次表达了对独立于 NumPy 的功能更强大的库的偏好。
2009 年 6 月,D. L. Goldsmith 对一些金融函数实现的正确性表示担忧[4]。当时建议将金融函数从 NumPy 移至独立的包。
在 2013 年的一个 GitHub 问题中[5],Nathaniel Smith 建议将金融函数从顶级命名空间移动到 numpy.financial
。他还建议为这些函数提供更好的名称。当时的回复包括建议弃用它们并将它们从 NumPy 移动到单独的包。此问题仍处于打开状态。
2013 年晚些时候[6],在邮件列表中有人建议将这些函数从 NumPy 中移除。
从 NumPy 中移除这些函数的理由
它们对于 NumPy 来说过于专业化。
它们实际上对于“现实世界”的财务计算并不有用,因为它们不处理实际日期和日历。
一些函数的“正确性”定义似乎是一个约定俗成的问题,而当前的 NumPy 开发人员没有背景来判断它们的正确性。
过去和现在的 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
要了解金融函数的维护负担,可以查找所有带有标签 component: numpy.lib.financial
的 GitHub 问题[7] 和拉取请求[8]。
衡量移除这些函数的影响的一种方法是查找使用它们的 GitHub 上的所有包。可以使用 python-api-inspect
服务[9] 执行此类搜索。搜索 NumPy 金融函数的所有用途只找到了八个存储库。(有关实际 SQL 查询,请参阅[5] 中的注释。)
实现#
创建一个新的 Python 包
numpy_financial
,在顶级 NumPy github 组织中维护。此存储库将包含金融函数的定义和单元测试。该包将添加到 PyPI,以便可以使用pip
安装。从 NumPy 1.18 版本开始,弃用
numpy
命名空间中的金融函数。从 NumPy 1.20 版本中移除金融函数。
向后兼容性#
如前所述,移除这些函数会破坏向后兼容性。通过提供 numpy_financial
库可以减轻其影响。
替代方案#
以下替代方案在[5]中提到
保持函数功能不变(即不做任何改动)。回顾历史可以清楚地看出,这并非许多NumPy开发者所偏好。反复出现的评论是这些函数根本就不属于NumPy。当这种观点与错误报告的历史以及关于函数正确性的持续疑问相结合时,结论是,最简洁的解决方案是弃用并移除这些函数。
将函数从``numpy``命名空间移动到``numpy.financial``。这是[5]中最初的建议。这种更改并没有解决维护问题,也没有改变许多开发者认为这些函数与NumPy不匹配的情况。它会导致当前使用这些函数的用户受到干扰,而没有解决许多开发者认为的根本问题。
讨论#
以前邮件列表讨论的链接,以及相关的GitHub问题和Pull Request链接,已经给出。本NEP的公告于2019年9月3日在NumPy-Discussion邮件列表上发布[10],并于2019年9月8日在PyData邮件列表上发布[11]。正式接受NEP的提案于2019年9月19日提出[12];还向PyData发送了通知(与[11]相同的线程)。没有实质性的异议。
参考文献和脚注#
版权#
本文件已进入公有领域。