新贡献者常见问题解答#
面向开源开发新手和 NetworkX 初次贡献者的常见问题集合。
问:我是开源新手,想为 NetworkX 做贡献。如何入门?#
要为 NetworkX 做贡献,你需要具备三点
源代码
开发环境
一个你想贡献的想法
步骤 1 和 2 在 开发流程 中有详细介绍。对于步骤 3 没有通用答案。NetworkX 有很多可以改进的地方,例如添加新算法、改进现有算法、改进测试套件(例如,提高测试覆盖率)以及改进文档。找到入门点的“最佳”方法是追随你个人的兴趣!尽管如此,有一些地方可以查看以获取入门想法
问题跟踪器 列出了已知的错误和功能请求。对于初次贡献者特别感兴趣的是带有 Good First Issue 或 Sprint 标签的问题。
算法讨论 包括用户希望拥有但尚未包含在 NetworkX 中的算法列表。
问:我找到了一个感兴趣的问题,可以分配给我吗?#
NetworkX 通常不会将问题分配给贡献者。如果你在问题跟踪器上发现一个你想处理的问题或功能请求,你应该首先检查问题线程,看看是否有链接的拉取请求。如果没有,那么请随意开启一个新的 PR 来解决该问题——无需请求许可——并且不要忘记在 PR 评论中引用问题编号,以便其他人知道你正在处理它!
问:如何为图库贡献示例?#
示例图库是一个非常适合贡献的地方,特别是如果你有一个使用 NetworkX 的有趣应用或可视化。图库是使用 sphinx-gallery 从存储在 examples/
目录中的 Python 脚本生成的。
例如,假设我想贡献一个使用 循环布局
可视化 完整图
的示例。假设你已经遵循了 设置开发环境 的步骤,首先创建一个新分支
git checkout -b complete-graph-circular-layout-example
注意
通常最好给你的分支一个描述性的名称,这样容易记住你在做什么。
现在你可以开始处理你的示例了。坚持圆形布局的想法,你可以在 examples/drawing
中创建一个名为 plot_circular_layout.py
的文件,内容如下
import networkx as nx
import matplotlib.pyplot as plt
G = nx.complete_graph(10) # A complete graph with 10 nodes
nx.draw_networkx(G, pos=nx.circular_layout(G))
注意
示例具体放在哪里可能不清楚。我们的圆形布局示例非常简单,所以也许它属于 examples/basic
。把它放在 examples/drawing
也合理,因为它涉及可视化。如果你不确定,不必担心:这类问题将在评审过程中解决。
此时,你的贡献已准备好进行评审。你可以通过 创建拉取请求 使你在 complete-graph-circular-layout-example
分支上的更改对其他 NetworkX 开发者可见。
另见
在 开发者指南 中有关于创建拉取请求的更多详细信息。
问:我想处理一个特定的函数。如何在源代码中找到它?#
假设你已经遵循了 设置开发流程 的说明,有几种方法可以确定特定函数或类在 源代码 中的定义位置。
例如,假设你有兴趣修改 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
像 grep
或 git grep
这样的命令行工具也非常有用。例如,在 NetworkX 源代码目录下
$ grep -r "def kamada_kawai_layout" .
./networkx/drawing/layout.py:def kamada_kawai_layout(
问:决定是否包含新算法的政策是什么?#
NetworkX 没有官方政策明确规定新算法的包含标准。如果新算法已经发表并被他人引用,则更有可能被包含。比引用次数更重要的是拟议的添加内容与项目的 使命和价值观 的契合程度。
测试也是决定是否应包含算法的重要因素。包含充分测试以说明预期行为的提案更容易评审,因此更有可能进展更快。
注意
充分 并不意味着穷尽。单元测试的质量远比数量重要。充分的测试应解决以下问题
算法是否支持不同的图类型(无向图、有向图、多重图)?
对于断开连接的输入和包含自环的图,算法如何表现?
文献中是否有明确的测试用例可以纳入测试套件?