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 金融函数的所有用法只发现了 8 个存储库。(有关实际 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 问题和拉取请求已给出。此 NEP 的公告于 2019 年 9 月 3 日在 NumPy-Discussion 邮件列表中发布[10],并于 2019 年 9 月 8 日在 PyData 邮件列表中发布[11]。正式接受 NEP 的提案于 2019 年 9 月 19 日提出[12];还向 PyData 发送了一则通知(与[11]相同主题)。没有实质性的反对意见。
参考文献和脚注#
版权#
本文档已进入公有领域。