新贡献者常见问题解答#

这是一个由新手开源开发者和首次向NetworkX贡献者提出的常见问题集。

问:我是新手开源开发者,想要为NetworkX做贡献。我应该如何开始?#

要为NetworkX做贡献,您需要三样东西:

  1. 源代码

  2. 开发环境

  3. 想要贡献的具体内容

步骤1和2在 开发工作流程 中有详细介绍。 对于第3步,没有通用的答案。有许多方法可以改进NetworkX,比如添加新算法、改进现有算法、改进测试套件(例如增加测试覆盖率)和改进文档。 找到开始的“最佳”方法是跟随您自己的兴趣! 话虽如此,以下是一些可以查看以获取开始方向的地方:

问:我发现了一个我感兴趣的问题,我可以要求分配给我吗?#

NetworkX通常不会将问题分配给贡献者。如果您在问题跟踪器上找到了一个问题或功能请求,您想要解决,您应该首先检查问题线程,看看是否有任何关联的拉取请求。 如果没有,那么请随时打开一个新的PR来解决该问题 - 无需征得许可 - 并不要忘记在PR注释中引用问题编号,以便其他人知道您正在处理它!

问:如何向示例库贡献示例?#

示例库是一个很好的贡献地方,特别是如果您有一个使用NetworkX的有趣应用程序或可视化。 示例库是使用 sphinx-gallery 从存储在 examples/ 目录中的Python脚本生成的。

例如,假设我想贡献一个使用 circular layout 来可视化 complete graph 的示例。 假设您已经按照 设置开发环境 的步骤进行了设置,开始操作。 创建一个新分支:

git checkout -b complete-graph-circular-layout-example

Note

给你的分支起一个描述性的名称通常是个好主意,这样就容易记住你正在做什么。

现在你可以开始你的示例工作了。继续使用圆形布局的想法,你可以在 examples/drawing 中创建一个名为 plot_circular_layout.py 的文件,内容如下:

import networkx as nx
import matplotlib.pyplot as plt

G = nx.complete_graph(10)  # 一个包含10个节点的完全图
nx.draw_networkx(G, pos=nx.circular_layout(G))

Note

可能不清楚一个示例应该放在哪里。我们的圆形布局示例非常简单,所以也许它应该放在 examples/basic 中。它也可以放在 examples/drawing 中,因为它涉及可视化。如果你不确定,不要担心:这类问题将在审查过程中解决。

此时,你的贡献已经准备好进行审查了。你可以通过创建一个 `拉取请求`_ _,使你在 complete-graph-circular-layout-example 分支上的更改对其他NetworkX开发者可见。

See also

开发者指南 中有关创建拉取请求的更多细节。

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

假设你已经按照:ref:设置开发工作流程 的说明进行了操作,有几种方法可以确定源代码中特定函数或类的定义位置。

例如,假设你对修改 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 没有明确规定新算法的显式包含标准的官方政策。如果新算法已经发表并被他人引用,那么它们更有可能被包含。比引用次数更重要的是新添加内容如何符合项目的 任务和价值观 。 测试也是确定算法是否应该被包含的一个重要因素。包含详尽测试的提案更容易被审查,因此可能会更快地取得进展。

Note

详尽*并不意味着*详尽无遗。单元测试的质量比数量更重要。详尽的测试应该解决以下问题:

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

  • 算法在断开的输入和包含自环的图中的行为如何?

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