新贡献者常见问题解答#
这是一个由新手开源开发者和首次向NetworkX贡献者提出的常见问题集。
问:我是新手开源开发者,想要为NetworkX做贡献。我应该如何开始?#
要为NetworkX做贡献,您需要三样东西:
源代码
开发环境
想要贡献的具体内容
步骤1和2在 开发工作流程 中有详细介绍。 对于第3步,没有通用的答案。有许多方法可以改进NetworkX,比如添加新算法、改进现有算法、改进测试套件(例如增加测试覆盖率)和改进文档。 找到开始的“最佳”方法是跟随您自己的兴趣! 话虽如此,以下是一些可以查看以获取开始方向的地方:
问题跟踪器 列出了已知的错误和功能请求。对于首次贡献者来说,特别感兴趣的是已标记为 Good First Issue 或 Sprint 标签的问题。
`算法讨论`_ 包括用户希望拥有但尚未包含在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
像 grep
或 git grep
这样的命令行实用工具也非常有用。例如,在NetworkX源代码目录中:
$ grep -r "def kamada_kawai_layout" .
./networkx/drawing/layout.py:def kamada_kawai_layout(
问:决定是否包含新算法的政策是什么?#
NetworkX 没有明确规定新算法的显式包含标准的官方政策。如果新算法已经发表并被他人引用,那么它们更有可能被包含。比引用次数更重要的是新添加内容如何符合项目的 任务和价值观 。 测试也是确定算法是否应该被包含的一个重要因素。包含详尽测试的提案更容易被审查,因此可能会更快地取得进展。
Note
详尽*并不意味着*详尽无遗。单元测试的质量比数量更重要。详尽的测试应该解决以下问题:
算法是否支持不同的图类型(无向图、有向图、多重图)?
算法在断开的输入和包含自环的图中的行为如何?
文献中是否有明确的测试用例可以并入测试套件中?