NEP 36 — 公平竞争#
- 作者:
斯特凡·范德沃尔特< stefanv @伯克利。教育>
- 地位:
积极的
- 类型:
信息性
- 创建:
2019-10-24
- 解决:
https://mail.python.org/pipermail/numpy-discussion/2021-June/081890.html
抽象的#
本文档为参与 NumPy 项目的公司和外部开发人员制定了游戏规则。它涵盖:
NumPy 名称的使用限制
如何以及是否发布修改后的发行版
如何让我们了解已修补的版本
公司和开发者读完这个NEP后就会知道社区希望看到什么样的行为,以及我们认为哪些行为是麻烦的、烦人的、不可接受的。
动机#
时不时地,我们就会了解到外界修改和传播的 NumPy 版本。这些修补版本可能会给 NumPy 社区带来问题(例如,参见[ 1 ]和[ 2 ])。当出现此类问题时,我们的开发人员会浪费时间来识别有问题的版本、定位更改并确定适当的行动方案。
此外,Python 打包索引上的包有时会被命名为用户认为它们是由 NumPy 批准或维护的。我们希望减少此类事件的发生。
在2019 年 10 月 16 日的社区电话会议上, 社区决定起草指导方针来解决这些问题。
范围#
本文档旨在定义一组最小规则,如果遵循这些规则,将被视为符合 NumPy 开发人员期望的善意努力。
我们希望那些认为需要修改 NumPy 的开发人员首先考虑为该项目做出贡献,或者使用几种现有机制之一来扩展我们的 API 并操作外部定义的数组对象。
如有疑问,请先与我们联系。我们可能会建议一个替代方案;至少,我们会做好准备。
公平竞赛规则#
不要将 NumPy 名称重复用于非 NumPy 社区开发的项目。
numpy
在撰写本文时,社区仅开发了少数以- 命名的软件包,包括numpy
、numpy-financial
和unumpy
。我们要求外部包不要包含短语numpy
,即避免使用诸如 之类的名称mycompany_numpy
。需要明确的是,该规则仅适用于模块(包名称);将您自己的库的子模块命名为 是完全可以接受的
mylibrary.numpy
。NumPy 是 NumFOCUS 拥有的商标。
不要重新发布 NumPy 的修改版本。
NumPy 的修改版本使开发人员很难解决错误报告,因为我们通常不知道 NumPy 的哪些部分已被修改。
如果您必须违反此规则(我们恳求您不要这样做!),请在标签中明确
__version__
您已修改 NumPy,例如:>>> print(np.__version__) '1.17.2+mycompany.15`
我们知道,要使库在发行版中工作,通常需要小补丁。例如,Debian 可能会修补 NumPy,以便它在正确的位置搜索优化的 BLAS 库。这是可以接受的,但我们要求不要做出实质性的改变。
不要扩展或修改 NumPy 的 API。
如果您绝对必须违反第二条规则,请不要向命名空间添加其他函数,或修改现有函数的 API。 NumPy 的 API 已经相当庞大,我们正在努力在可行的情况下减少它。在分布式版本中公开附加功能会让用户和开发人员感到困惑。
请使用官方机制来使用 API。
__array_ufunc__和 __array_function__等协议 旨在帮助外部包更轻松地与 NumPy 交互。例如,后者允许来自外部库的对象通过 NumPy。我们积极鼓励使用任何这些“官方批准”的机制来覆盖 NumPy 或与 NumPy 交互。
如果这些机制被认为不够,请在对 NumPy 进行猴子修补之前在邮件列表上开始讨论。
问题与解答#
问:我们希望分发 NumPy 的优化版本,该版本利用我们公司 CPU 的特殊指令。你建议反对,那么我们该怎么办?
答:请考虑在官方 NumPy 存储库中包含所需的补丁。我们不仅鼓励此类贡献,而且我们已经针对某些可用平台优化了循环。
问:我们希望提供比 NumPy 提供的更快的 FFT 版本,但 NumPy 没有覆盖其 FFT 例程的机制。我们该如何进行?
A:我们认可的解决方案有两种:让用户用一段代码来安装你的优化,比如:
from my_company_accel import patch_numpy_fft
patch_numpy_fft()
或者让您的发行版自动执行上述操作,但在终端上打印一条消息,清楚地说明正在发生的情况:
We are now patching NumPy for optimal performance under MyComp
Special Platform. Please direct all bug reports to
https://mycomp.com/numpy-bugs
如果您需要额外的机制来覆盖代码,请与邮件列表上的开发团队讨论。
问:我们希望分发具有更快线性代数例程的 NumPy。我们可以这样做吗?
答:是的,这是通过链接到不同版本的 BLAS 明确支持的。
讨论#
参考文献和脚注#
版权所有#
本文档已置于公共领域。