Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
sphinx可以忽略python文档字符串中的某些标记吗?_Python_Python Sphinx - Fatal编程技术网

sphinx可以忽略python文档字符串中的某些标记吗?

sphinx可以忽略python文档字符串中的某些标记吗?,python,python-sphinx,Python,Python Sphinx,我正在用sphinx记录我的项目,并使用sphinxcontrib.napoleon扩展,它允许我使用谷歌风格的docstring 这是我的项目中的一个函数 def nn_normalized_weight(normweight_fn, qaid2_nns, qreq_): """ Weights nearest neighbors using the chosen function Args: normweight_fn (func): chosen

我正在用sphinx记录我的项目,并使用sphinxcontrib.napoleon扩展,它允许我使用谷歌风格的docstring

这是我的项目中的一个函数

def nn_normalized_weight(normweight_fn, qaid2_nns, qreq_):
    """
    Weights nearest neighbors using the chosen function

    Args:
        normweight_fn (func): chosen weight function e.g. lnbnn
        qaid2_nns (dict): query descriptor nearest neighbors and distances. qaid -> (qfx2_nnx, qfx2_dist)
        qreq_ (QueryRequest): hyper-parameters

    Returns:
        tuple(dict, dict) : (qaid2_weight, qaid2_selnorms)

    Example:
        >>> from ibeis.model.hots.nn_weights import *
        >>> from ibeis.model.hots import nn_weights
        >>> ibs, daid_list, qaid_list, qaid2_nns, qreq_ = nn_weights.testdata_nn_weights()
        >>> qaid = qaid_list[0]
        >>> #----
        >>> normweight_fn = lnbnn_fn
        >>> tup1 = nn_weights.nn_normalized_weight(normweight_fn, qaid2_nns, qreq_)
        >>> (qaid2_weight1, qaid2_selnorms1) = tup1
        >>> weights1 = qaid2_weight1[qaid]
        >>> selnorms1 = qaid2_selnorms1[qaid]
        >>> #---
        >>> # test NN_WEIGHT_FUNC_DICT
        >>> #---
        >>> nn_normonly_weight = nn_weights.NN_WEIGHT_FUNC_DICT['lnbnn']
        >>> tup2 = nn_normonly_weight(qaid2_nns, qreq_)
        >>> (qaid2_weight2, qaid2_selnorms2) = tup2
        >>> selnorms2 = qaid2_selnorms2[qaid]
        >>> weights2 = qaid2_weight2[qaid]
        >>> assert np.all(weights1 == weights2)
        >>> assert np.all(selnorms1 == selnorms2)

    Ignore:
        #from ibeis.model.hots import neighbor_index as hsnbrx
        #nnindexer = hsnbrx.new_ibeis_nnindexer(ibs, daid_list)
    """
    #utool.stash_testdata('qaid2_nns')
    #
    K = qreq_.qparams.K

    Knorm = qreq_.qparams.Knorm
    rule  = qreq_.qparams.normalizer_rule
    # Prealloc output
    qaid2_weight = {qaid: None for qaid in six.iterkeys(qaid2_nns)}
    qaid2_selnorms = {qaid: None for qaid in six.iterkeys(qaid2_nns)}
    # Database feature index to chip index
    for qaid in six.iterkeys(qaid2_nns):
        (qfx2_idx, qfx2_dist) = qaid2_nns[qaid]
        # Apply normalized weights
        (qfx2_normweight, qfx2_normmeta) = apply_normweight(
            normweight_fn, qaid, qfx2_idx, qfx2_dist, rule, K, Knorm, qreq_)
        # Output
        qaid2_weight[qaid]   = qfx2_normweight
        qaid2_selnorms[qaid] = qfx2_normmeta
    return (qaid2_weight, qaid2_selnorms)
当我用sphinx apidoc解析它时,它会正确地解析args、returns和example部分,但随后它也会在ignore部分进行标记

忽略部分看起来非常难看,因为它已经将所有的格式化都剥离了。我想删除它。有没有办法将sphinx配置为忽略某些标记,如ignore:


我知道我可以将其从docstr中删除,但这非常不方便,因为我希望有一个不引入sybmols的地方,在那里我可以在ipython之间复制和粘贴测试代码。

好的,我想我为您提供了一个解决方案:

提供一个侦听器,可用于确定应保留或丢弃DocString
autodoc
收集的哪些部分:

sphinx.ext.autodoc.between(marker,what=None,keepmpty=False,exclude=False)

返回一个侦听器,该侦听器保留或如果exclude为
True
excludes,则保留 匹配标记正则表达式。如果没有行匹配,则生成的docstring将为空,因此除非keepmpty为true,否则不会进行任何更改

如果what是一个字符串序列,则只处理what中某一类型的docstring

,所以这应该也适用于拿破仑

用法示例

按如下方式更改文档字符串:

"""
Args:
    ...

Returns:
    ...

IGNORE:
    #from ibeis.model.hots import neighbor_index as hsnbrx
    #nnindexer = hsnbrx.new_ibeis_nnindexer(ibs, daid_list)
IGNORE
"""
因此,请确保用包含唯一标记的两行围绕要排除的零件(在本例中,大写单词
忽略

将以下内容添加到Sphinx项目的
conf.py
(我可能会将其作为一个块附加在底部,但这是您的要求):

(如果您的
conf.py
已经包含
setup()
函数,只需相应地扩展它即可)

这将创建并注册一个侦听器,该侦听器在每次
autodoc
处理docstring时都会被调用。然后,侦听器有机会过滤docstring。在本例中,侦听器将丢弃与正则表达式
^.*IGNORE.*$
-匹配的行之间的所有内容,因此您可以选择此表达式,使其对您的项目足够具体,但不需要添加太多干扰的标记


注意:如果您只更改了
conf.py
,Sphinx将不会接受该更改,因为doctree没有更改。因此,在再次构建文档之前,请确保运行
make clean
(或
rm-rf _build/*

好的,我想为您提供了一个解决方案:

提供一个侦听器,可用于确定应保留或丢弃DocString
autodoc
收集的哪些部分:

sphinx.ext.autodoc.between(marker,what=None,keepmpty=False,exclude=False)

返回一个侦听器,该侦听器保留或如果exclude为
True
excludes,则保留 匹配标记正则表达式。如果没有行匹配,则生成的docstring将为空,因此除非keepmpty为true,否则不会进行任何更改

如果what是一个字符串序列,则只处理what中某一类型的docstring

,所以这应该也适用于拿破仑

用法示例

按如下方式更改文档字符串:

"""
Args:
    ...

Returns:
    ...

IGNORE:
    #from ibeis.model.hots import neighbor_index as hsnbrx
    #nnindexer = hsnbrx.new_ibeis_nnindexer(ibs, daid_list)
IGNORE
"""
因此,请确保用包含唯一标记的两行围绕要排除的零件(在本例中,大写单词
忽略

将以下内容添加到Sphinx项目的
conf.py
(我可能会将其作为一个块附加在底部,但这是您的要求):

(如果您的
conf.py
已经包含
setup()
函数,只需相应地扩展它即可)

这将创建并注册一个侦听器,该侦听器在每次
autodoc
处理docstring时都会被调用。然后,侦听器有机会过滤docstring。在本例中,侦听器将丢弃与正则表达式
^.*IGNORE.*$
-匹配的行之间的所有内容,因此您可以选择此表达式,使其对您的项目足够具体,但不需要添加太多干扰的标记


注意:如果您只更改了
conf.py
,Sphinx将不会接受更改,因为doctree没有更改。因此,在再次构建文档之前,请确保运行
make clean
(或
rm-rf _build/*
)。

我不知道您问题中Sphinx部分的答案,但既然您说“因为我希望有一个不带#sybmols的地方……”也许这个变通方法对您有一些帮助:您可以在Python代码中的任何地方单独放置一个字符串(任何表达式),这是完全有效的。因此,在docstring之后,您只需插入另一个字符串(也可能是带三个引号的多行)包含忽略块。您需要检查是否需要分隔这两个字符串(因为)尽管如此。@LukasGraf这是我目前的解决方法,它似乎有效,但我对Sphinx中似乎缺少的功能感到惊讶。如果有人给我指出一个起点,我愿意自己去添加该功能。我不知道你问题中Sphinx部分的答案,但既然你说“因为我希望有一个不带#sybmols…“的地方,也许这个解决方法对您有一些帮助:您可以在Python代码中的任何地方单独放置一个字符串(任何表达式),这是完全有效的。因此,在docstring之后,您可以简单地插入另一个字符串(也可能是带三个引号的多行)包含忽略块。您需要检查是否需要分隔这两个字符串(因为)。@LukasGraf这是我当前的工作