Note

This documents the development version of PyGraphviz. Documentation for the current release can be found here.

投稿人指南

备注

本文档假定您对使用GitHub Pull请求为开源科学Python项目做出贡献有一定的了解。

开发工作流

  1. 如果你是第一次投稿:

    • 您需要在本地计算机上安装GraphViz(如果尚未安装)。有关特定于操作系统的安装说明,请参阅 INSTALL.txt

    • https://github.com/pygraphviz/pygraphviz 并点击“fork”按钮创建您自己的项目副本。

    • 将项目克隆到您的本地计算机::

      git clone git@github.com:your-username/pygraphviz.git
      
    • 导航到文件夹pygraph viz并添加上游存储库::

      git remote add upstream git@github.com:pygraphviz/pygraphviz.git
      
    • 现在,您的远程存储库命名为:

      • upstream ,它是指 pygraphviz 存储库

      • origin ,这指的是你的个人叉子

    • 接下来,您需要设置构建环境。以下是使用以下命令的说明 venv

      • venv (基于PIP)

        # Create a virtualenv named ``pygraphviz-dev`` that lives in the directory of
        # the same name
        python -m venv pygraphviz-dev
        # Activate it
        source pygraphviz-dev/bin/activate
        # Install main development and runtime dependencies of pygraphviz
        pip install -r requirements/test.txt -r requirements/developer.txt
        #
        # Build and install pygraphviz from source
        pip install -e .
        # Test your installation
        PYTHONPATH=. pytest pygraphviz
        
    • 最后,我们建议您使用预提交钩子,它在您输入时运行为黑色 git commit **

      pre-commit install
      
  2. 发展您的贡献:

    • 从上游获取最新更改::

      git checkout main
      git pull upstream main
      
    • 为要处理的要素创建分支。由于分支机构名称将出现在合并消息中,请使用合理的名称,如‘bugfix-for-Issue-1480’::

      git checkout -b bugfix-for-issue-1480
      
    • 在您的进度中进行本地承诺 (git addgit commit )

  3. 测试您的贡献:

    • 在本地运行测试套件(请参见 Testing 有关详情):

      PYTHONPATH=. pytest pygraphviz
      
    • 在本地运行测试 before 提交Pull请求有助于及早发现问题,并减轻持续集成系统的负载。

  4. 提交您的投稿:

    • 将您的更改推送回GitHub::

      git push origin bugfix-for-issue-1480
      
    • 转到GitHub。新的分支机构将显示一个绿色的Pull Request键-点击它。

    • 如果您愿意,可以在 mailing list 解释您的更改或要求审查。

  5. 审查流程:

    • 每次拉入请求(PR)更新都会触发一组 continuous integration 检查代码是否符合标准并通过我们所有测试的服务。这些检查必须通过,然后才能合并您的公关。如果其中一个检查失败,您可以通过单击“失败”图标(红十字)并检查构建和测试日志来找出原因。

    • 审查者(其他开发人员和感兴趣的社区成员)将在您的公关上写内联和/或一般性评论,以帮助您改进其实现、文档和风格。在这个项目中工作的每个开发人员都会对他们的代码进行审查,我们已经将其视为友好的对话,我们都从中学到了东西,并从中获得了整体代码质量的好处。因此,请不要让审查打击您的贡献:它的唯一目的是提高项目质量,而不是批评(毕竟,我们非常感谢您捐赠的时间!)

    • 要更新您的PR,请在您的本地存储库上进行更改并提交。一旦这些更改被推送到(与以前相同的分支),PR将自动更新。

    备注

    如果PR关闭了问题,请确保GitHub知道在PR合并时自动关闭问题。例如,如果PR关闭问题编号1480,您可以在PR描述或提交消息中使用短语“FIX#1480”。

    审阅人:请确保合并邮件中也包含更改的简要说明(S)。

与…不同 upstream main

如果GitHub指示您的Pull请求的分支不能再自动合并,请将主分支合并到您的分支中::

git fetch upstream main
git merge upstream/main

如果发生任何冲突,则需要先修复它们,然后才能继续。使用以下命令查看哪些文件存在冲突:

git status

它会显示如下消息::

Unmerged paths:
  (use "git add <file>..." to mark resolution)

  both modified:   file_with_conflict.txt

在冲突的文件中,您会发现类似以下部分::

<<<<<<< HEAD
The way the text looks in your branch
=======
The way the text looks in the main branch
>>>>>>> main

选择应保留的案文的一个版本,并删除其余案文:

The way the text looks in your branch

现在,添加固定文件::

git add file_with_conflict.txt

修复所有合并冲突后,请执行以下操作::

git commit

备注

高级Git用户可能想要改变基数而不是合并,但我们会以任何一种方式挤压和合并PR。

指导方针

  • 所有代码都应该有测试。

  • 所有代码都应按相同的方式进行文档记录 standard 作为NumPy和SciPy。

  • 所有更改都会被审查。在网上询问 mailing list 如果您的拉取请求没有得到任何响应。

测试

要运行所有测试::

$ PYTHONPATH=. pytest pygraphviz

或来自特定文件的测试::

$ PYTHONPATH=. pytest pygraphviz/tests/test_readwrite.py

使用 --doctest-modules 来运行文档测试。例如,使用::运行所有测试和所有文档测试

$ PYTHONPATH=. pytest --doctest-modules pygraphviz

理想情况下,模块的测试应该覆盖该模块中的所有代码,即语句覆盖率应为100%。

要测量测试覆盖率,请运行:

$ PYTHONPATH=. pytest --cov=pygraphviz pygraphviz

这将打印一个报告,其中的每个文件占一行 pygraphviz ,详细说明测试覆盖范围:

Name                     Stmts   Miss  Cover
--------------------------------------------
pygraphviz/__init__.py      12      4    67%
pygraphviz/agraph.py      1022    196    81%
pygraphviz/graphviz.py     179     42    77%
pygraphviz/scraper.py       26     18    31%
pygraphviz/testing.py       16      0   100%
--------------------------------------------
TOTAL                     1255    260    79%

添加测试

如果你. new to testing 有关要执行的操作的示例,请参阅现有的测试文件。 Don't let the tests keep you from submitting your contribution! 如果你不确定该怎么做,或者遇到了麻烦,无论如何都要提交你的拉请求。我们将帮助您创建测试,并在代码审查期间找出任何类型的问题。

添加示例

图库示例由管理 sphinx-gallery 。示例库的源文件是 .py 中的脚本 examples/ 会产生一个或多个数字。它们是在构建文档时由sphinx-Gallery自动执行的。输出被收集并组装到图库中。

你可以的 add a new 通过放置新的 .py 目录中的一个目录中的 examples 存储库的目录。请参阅其他示例以了解该格式的概念。

备注

图库示例应以 plot_ ,例如 plot_new_example.py

制作一个好的画廊情节的一般指导原则:

  • 示例应突出显示单个功能/命令。

  • 试着让这个例子尽可能简单。

  • 示例所需的数据应该包含在相同的目录和示例脚本中。

  • 添加注释以解释阅读代码后不明显的情况。

  • 描述您正在展示的功能,并链接到文档的其他相关部分。

大口水包装纸

pygraphviz 使用SWIG生成GRAPHVIZ C代码的包装器。对C源代码的任何修改都应该在SWIG包装文件中进行, graphviz.i ,不是 graphviz_wrap.c 因为此文件是由SWIG自动生成的,任何手动更改都将被覆盖。包装器可以通过以下方式生成: swig -python pygraphviz/graphviz.i 。这需要安装SWIG。

备注

包装器必须从顶级目录生成,即::

swig -python pygraphviz/graphviz.i

尝试从另一个目录重新生成包装器将导致构建中断。

臭虫

report bugs on GitHub