Python 像 numpy 这样的参数的 Sphinx 自动摘要渲染

Python Sphinx autosummary rendering of parameters like numpy

问题

我正在使用 Sphinx 和自动摘要扩展来记录我的 python 3 带有 numpy 样式文档字符串的项目。

当前渲染

这是我目前的效果图。红色框显示参数和 returns.

的当前布局

需要渲染

我想更改参数的布局,returns 像 numpy 一样,如下面所需的渲染示例所示,以便参数名称和类型在一行,描述在另一行缩进。

我该如何实现? (查看 numpy、scipy 和 pandas 文档,我找不到他们为更改渲染做了什么特别的事情。)

Numpy stype 文档字符串

代码中的文档字符串为:

def modified_main(raw_img_path, ground_truth_img_path, ground_truth_count=None, sort=True):
    """
    Computes deviation of thresholded images using different methods
    compared to user input ground truth image.

    Parameters
    ----------
    raw_img_path : str
        Path of raw image.
    ground_truth_img_path : str
        Path of ground truth image.
    ground_truth_count : int, optional
        User input ground truth cell count.
    sort : bool, optional
        Sort the deviation by majority vote.

    Returns
    -------
    optimal_method : str
        Optimal threshold method.
    optimal_threshold : float
        Threshold given by optimal threshold method.

    """
    pass

Sphinx 配置

我在 conf.py 文件中包含了自动摘要所需的扩展:

extensions = ['sphinx.ext.autodoc',
              'sphinx.ext.napoleon',
              'sphinx.ext.autosummary']
autosummary_generate = True
html_theme = 'pydata_sphinx_theme'

这里显示了自动摘要的使用:

.. currentmodule:: modified

.. autosummary::
   :toctree: api/

   modified_main

最有可能的问题是您的文档字符串中 reST 的格式与 empty 的格式不相似。

def empty(shape, dtype=None, order='C'):
    """Return a new matrix of given shape and type, without initializing entries.

    Parameters
    ----------
    shape : int or tuple of int
        Shape of the empty matrix.
    dtype : data-type, optional
        Desired output data-type.
    order : {'C', 'F'}, optional
        Whether to store multi-dimensional data in row-major
        (C-style) or column-major (Fortran-style) order in
        memory.

    See Also
    --------
    empty_like, zeros

    .. snip

    """

您没有包含文档字符串示例,所以我不能绝对确定。请编辑您的问题以包含您的文档字符串。

我通过深入研究 numpydoc 文档找到了解决方案。在 conf.py 中的 extension 变量中,将元素 sphinx.ext.napoleon 更改为 numpydoc。更改后的变量现在看起来像

extensions = ['sphinx.ext.autodoc',
              'numpydoc',
              'sphinx.ext.autosummary']

渲染变成

其中红色框给出了像 numpy 一样的所需渲染。