NEP 36 — 公平竞赛#
- 作者:
Stéfan van der Walt <stefanv@berkeley.edu>
- 状态:
活跃
- 类型:
信息性
- 创建:
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 日的社区电话会议上,社区决定起草指南以解决这些问题。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 版本,该版本利用我们公司 CPU 的特殊指令。您建议不要这样做,那么我们该怎么办?
答:请考虑将所需的补丁包含在官方 NumPy 存储库中。我们不仅鼓励此类贡献,而且我们已经为某些平台提供了优化的循环。
问:我们想提供比 NumPy 提供的 FFT 更快的版本,但 NumPy 没有覆盖其 FFT 例程的机制。我们如何继续?
答:我们批准了两种解决方案:让用户使用一段代码安装您的优化,例如
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 明确支持这一点。
讨论#
参考文献和脚注#
版权#
本文档已进入公有领域。