如何为 NumPy 文档做出贡献#
本指南将帮助您决定贡献什么以及如何将其提交到官方 NumPy 文档。
文档团队会议#
NumPy 社区制定了改进其文档的坚定目标。我们在 Zoom 上定期举行文档会议(日期在numpy-discussion 邮件列表上公布 ),欢迎大家。如果您有疑问或需要有人指导您完成第一步,请联系我们 - 我们很乐意为您提供帮助。会议记录在 hackmd.io 上记录 并存储在NumPy Archive 存储库中。
需要什么#
NumPy 文档涵盖了详细信息。 API 参考文档是 在构建文档时直接从代码中的文档字符串生成的。尽管我们对向用户公开的每个函数和类都有大部分完整的参考文档,但其中一些函数和类缺乏使用示例。
我们缺少的是范围更广的文档——教程、操作方法和解释。报告缺陷是另一种贡献方式。我们两者都讨论。
贡献修复#
我们渴望了解并修复文档缺陷。但为了解决最大的问题,我们最终不得不推迟或忽略一些错误报告。以下是要消除的最佳缺陷。
最重要的是技术错误——文档字符串缺少参数,函数/参数/方法的错误描述等等。其他“结构性”缺陷(例如断开的链接)也得到优先考虑。所有这些修复都很容易确认并实施。 如果您知道如何执行此操作,则可以提交包含修复程序的拉取请求 (PR) ;否则请提出问题。
拼写错误和拼写错误属于较低级别;我们欢迎听到这些问题,但可能无法立即修复它们。这些也可以作为拉取请求或问题来处理。
明显的措辞错误(例如遗漏“不”)属于拼写错误类别,但其他改写(即使是语法)也需要进行判断,这提高了标准。首先将修复作为问题提出来进行测试。
C 扩展模块中定义的一些函数/对象(如 numpy.ndarray.transpose、numpy.array 等)的文档字符串在_add_newdocs.py中单独定义
贡献新页面#
您在使用我们的文档时遇到的挫折是我们解决问题的最佳指南。
如果您编写了一个缺失的文档,那么您就加入了开源的前线,但只是让我们知道缺失了什么,这就是一个有意义的贡献。如果您想撰写文档,请通过邮件列表表达您的想法以获得进一步的想法和反馈。如果您想提醒我们存在差距, 请提出问题。请参阅 此问题的示例。
如果您正在寻找主题,我们的正式文档路线图是 NumPy 增强提案 (NEP)、 NEP 44 - 重构 NumPy 文档。它确定了我们的文档需要帮助的领域,并列出了我们希望看到的一些补充内容,包括Jupyter 笔记本。
文档框架#
编写有用的文档有一些公式,四个公式几乎涵盖了所有内容。有四个公式,因为文档有四种类别 - tutorial
、、和。文档以这种方式划分的见解属于 Daniele Procida 和他的Diátaxis Framework。当您开始撰写一份文件或提出一份文件时,请记住该文件属于以下哪种类型。how-to guide
explanation
reference
NumPy 教程#
除了属于 NumPy 源代码树一部分的文档之外,您还可以将 Jupyter Notebook 格式的内容提交到 NumPy 教程页面。这套教程和教育材料旨在由 NumPy 项目提供高质量的资源,既可用于自学,也可用于课堂教学。这些资源是在单独的 GitHub 存储库 numpy-tutorials中开发的,您可以在其中查看现有笔记本、打开问题以建议新主题或将您自己的教程作为拉取请求提交。
更多关于贡献#
如果英语不是您的母语,或者您只能拿出一个草稿,请不要担心。开源是社区的努力。尽力而为——我们将帮助解决问题。
图像和现实生活中的数据使文本更具吸引力和力量,但请确保您使用的内容已获得适当的许可并可用。在这里,即使是一个粗略的艺术想法也可以被其他人打磨。
目前,NumPy 唯一接受的数据格式是其他 Python 科学库(如 pandas、SciPy 或 Matplotlib)也使用的数据格式。我们正在开发一个包来接受更多格式;联系我们了解详情。
NumPy 文档保存在源代码树中。要将文档放入文档库,您必须下载树、构建它并提交拉取请求。如果 GitHub 和拉取请求对您来说是新的,请查看我们的贡献者指南。
我们的标记语言是 reStructuredText (rST),它比 Markdown 更复杂。 Sphinx 是许多 Python 项目用来构建和链接项目文档的工具,它将 rST 转换为 HTML 和其他格式。有关 rST 的更多信息,请参阅快速重构文本指南或 重构文本入门
间接贡献#
如果您遇到对 NumPy 文档有用的外部材料,请通过提出问题让我们知道。
您不必在这里为 NumPy 做出贡献。如果您在博客上撰写教程、创建 YouTube 视频或在 Stack Overflow 和其他网站上回答问题,那么您就做出了贡献。
文档风格#
用户文档#
一般来说,我们 的用户指南遵循Google 开发者文档风格指南。
NumPy 风格控制以下情况:
Google 没有任何指导,或者
我们不喜欢使用 Google 风格
我们目前的规则:
遵循 的先例,我们将索引复数为索引而不是 索引
numpy.indices
。为了保持一致性,我们还将矩阵复数为矩阵。
NumPy 或 Google 规则未充分解决的语法问题由最新版《芝加哥风格手册》中的“语法和用法”部分决定。
我们欢迎收到 关于我们应该添加到 NumPy 样式规则中的案例的提醒。
文档字符串#
当将Sphinx与 NumPy 约定结合使用时,您应该使用numpydoc
扩展,以便正确处理您的文档字符串。例如,Sphinx 将从
Parameters
文档字符串中提取该部分并将其转换为字段列表。使用还可以避免普通 Sphinx 在遇到 NumPy 文档字符串约定(例如sphinx 不希望在文档字符串中找到的节标题numpydoc
(例如 ))时产生的 reStructuredText 错误。-------------
它可以从:
请注意,对于 NumPy 中的文档,无需
在示例开头执行此操作。import numpy as np
记录 C/C++ 代码#
NumPy 使用Doxygen解析特殊格式的 C/C++ 注释块。这会生成 XML 文件,由Breathe将其转换为 RST,供 Sphinx 使用。
完成文档过程需要三个步骤:
1. 编写注释块#
尽管仍然没有可遵循的注释样式,但由于与当前现有的非索引注释块相似,Javadoc 比其他注释更可取。
笔记
请参阅“记录代码”。
Javadoc 风格如下:
/**
* This a simple brief.
*
* And the details goes here.
* Multi lines are welcome.
*
* @param num leave a comment for parameter num.
* @param str leave a comment for the second parameter.
* @return leave a comment for the returned value.
*/
int doxy_javadoc_example(int num, const char *str);
这是它的渲染方式:
-
int doxy_javadoc_example ( int num , const char * str ) #
这是一个简单的简介。
详细信息请参见此处。欢迎多线。
- 参数:
num – 为参数 num 留下评论。
str – 为第二个参数留下注释。
- 返回:
为返回值留下评论。
对于行注释,您可以使用三个正斜杠。例如:
/**
* Template to represent limbo numbers.
*
* Specializations for integer types that are part of nowhere.
* It doesn't support with any real types.
*
* @param Tp Type of the integer. Required to be an integer type.
* @param N Number of elements.
*/
template<typename Tp, std::size_t N>
class DoxyLimbo {
public:
/// Default constructor. Initialize nothing.
DoxyLimbo();
/// Set Default behavior for copy the limbo.
DoxyLimbo(const DoxyLimbo<Tp, N> &l);
/// Returns the raw data for the limbo.
const Tp *data();
protected:
Tp p_data[N]; ///< Example for inline comment.
};
这是它的渲染方式:
-
模板<类型名Tp , std :: size_t N >
类DoxyLimbo # 表示临时数字的模板。
不属于任何地方的整数类型的特化。它不支持任何实际类型。
- 参数 Tp :
整数的类型。要求是整数类型。
- 参数N :
元素数量。
公共职能
-
多西林博()#
默认构造函数。不初始化任何内容。
例子#
看一下下面的例子:
/**
* A comment block contains reST markup.
* @rst
* .. note::
*
* Thanks to Breathe_, we were able to bring it to Doxygen_
*
* Some code example::
*
* int example(int x) {
* return x * 2;
* }
* @endrst
*/
void doxy_reST_example(void);
这是它的渲染方式:
-
无效doxy_reST_example (无效) #
注释块包含剩余标记。
一些代码示例:
int example(int x) { return x * 2; }
2. 喂食 Doxygen #
并非所有头文件都会自动收集。您必须在 Doxygen 的子配置文件中添加所需的 C/C++ 头路径。
子配置文件具有唯一的名称.doxyfile
,您通常可以在包含记录的标头的目录附近找到该名称。如果您想要添加的标头附近(2 深度)的路径中没有配置文件,您需要创建一个新的配置文件。
子配置文件可以接受任何Doxygen 配置选项,但不覆盖或重新初始化任何配置选项,而是仅使用串联运算符“+=”。例如:
# to specify certain headers
INPUT += @CUR_DIR/header1.h \
@CUR_DIR/header2.h
# to add all headers in certain path
INPUT += @CUR_DIR/to/headers
# to define certain macros
PREDEFINED += C_MACRO(X)=X
# to enable certain branches
PREDEFINED += NPY_HAVE_FEATURE \
NPY_HAVE_FEATURE2
笔记
@CUR_DIR 是一个模板常量,返回子配置文件的当前目录路径。
3. 包含指令#
Breathe提供了广泛的自定义指令,允许将Doxygen生成的文档转换为 reST 文件。
笔记
欲了解更多信息,请查看“指令和配置变量”
常用指令:#
doxygenfunction
该指令为单个函数生成适当的输出。函数名要求在项目中是唯一的。
.. doxygenfunction:: <function name>
:outline:
:no-link:
查看示例 以查看其实际效果。
doxygenclass
该指令为单个类生成适当的输出。它采用标准项目、路径、大纲和无链接选项,以及成员、受保护成员、私有成员、undoc-成员、成员组和仅限成员选项:
.. doxygenclass:: <class name>
:members: [...]
:protected-members:
:private-members:
:undoc-members:
:membergroups: ...
:members-only:
:outline:
:no-link:
查看doxygenclass 文档 <https://breathe.readthedocs.io/en/latest/class.html#class-example>_ 了解更多详细信息并查看其实际情况。
doxygennamespace
该指令为命名空间的内容生成适当的输出。它采用标准项目、路径、大纲和无链接选项,以及仅内容、成员、受保护成员、私有成员和 undoc-members 选项。要引用嵌套命名空间,必须提供完整的命名空间路径,例如 foo::bar 表示 foo 命名空间内的 bar 命名空间。
.. doxygennamespace:: <namespace>
:content-only:
:outline:
:members:
:protected-members:
:private-members:
:undoc-members:
:no-link:
查看doxygennamespace 文档 以获取更多详细信息并查看其实际情况。
doxygengroup
该指令为 doxygen 组的内容生成适当的输出。 doxygen 组可以在源注释中使用特定的 doxygen 标记来声明,如 doxygen分组文档中所述。
它采用标准项目、路径、大纲和无链接选项,以及仅内容、成员、受保护成员、私有成员和 undoc-members 选项。
.. doxygengroup:: <group name>
:content-only:
:outline:
:members:
:protected-members:
:private-members:
:undoc-members:
:no-link:
:inner:
查看doxygengroup 文档 以获取更多详细信息并查看其实际情况。
文档阅读#
领先的技术作家组织 Write the Docs举办会议、托管学习资源并运行 Slack 频道。
“每个工程师也是一名作家,”谷歌的 技术写作资源集合说道,其中包括为开发人员提供规划和编写文档的免费在线课程。
Software Carpentry 的使命是向研究人员教授软件。除了主持课程之外,该网站还解释了如何有效地表达想法。