新贡献者常见问题解答#

面向开源开发新手和 NetworkX 初次贡献者的常见问题集合。

问:我是开源新手,想为 NetworkX 做贡献。如何入门?#

要为 NetworkX 做贡献,你需要具备三点

  1. 源代码

  2. 开发环境

  3. 一个你想贡献的想法

步骤 1 和 2 在 开发流程 中有详细介绍。对于步骤 3 没有通用答案。NetworkX 有很多可以改进的地方,例如添加新算法、改进现有算法、改进测试套件(例如,提高测试覆盖率)以及改进文档。找到入门点的“最佳”方法是追随你个人的兴趣!尽管如此,有一些地方可以查看以获取入门想法

问:我找到了一个感兴趣的问题,可以分配给我吗?#

NetworkX 通常不会将问题分配给贡献者。如果你在问题跟踪器上发现一个你想处理的问题或功能请求,你应该首先检查问题线程,看看是否有链接的拉取请求。如果没有,那么请随意开启一个新的 PR 来解决该问题——无需请求许可——并且不要忘记在 PR 评论中引用问题编号,以便其他人知道你正在处理它!

问:我想处理一个特定的函数。如何在源代码中找到它?#

假设你已经遵循了 设置开发流程 的说明,有几种方法可以确定特定函数或类在 源代码 中的定义位置。

例如,假设你有兴趣修改 kamada_kawai_layout 函数,因此你需要知道它在哪里定义。在 IPython 终端中,你可以使用 ? —— 源文件列在 File: 字段中

In [1]: import networkx as nx
In [2]: nx.kamada_kawai_layout?
Signature: <clipped for brevity>
Docstring: <clipped for brevity>
File: ~/networkx/networkx/drawing/layout.py
Type: function

grepgit grep 这样的命令行工具也非常有用。例如,在 NetworkX 源代码目录下

$ grep -r "def kamada_kawai_layout" .
./networkx/drawing/layout.py:def kamada_kawai_layout(

问:决定是否包含新算法的政策是什么?#

NetworkX 没有官方政策明确规定新算法的包含标准。如果新算法已经发表并被他人引用,则更有可能被包含。比引用次数更重要的是拟议的添加内容与项目的 使命和价值观 的契合程度。

测试也是决定是否应包含算法的重要因素。包含充分测试以说明预期行为的提案更容易评审,因此更有可能进展更快。

注意

充分 并不意味着穷尽。单元测试的质量远比数量重要。充分的测试应解决以下问题

  • 算法是否支持不同的图类型(无向图、有向图、多重图)?

  • 对于断开连接的输入和包含自环的图,算法如何表现?

  • 文献中是否有明确的测试用例可以纳入测试套件?