HEX
Server: Apache
System: Linux pdx1-shared-a1-38 6.6.104-grsec-jammy+ #3 SMP Tue Sep 16 00:28:11 UTC 2025 x86_64
User: mmickelson (3396398)
PHP: 8.1.31
Disabled: NONE
Upload Files
File: //usr/lib/python3/dist-packages/sphinx/domains/__pycache__/python.cpython-310.pyc
o

�$�aa��
@s2dZddlZddlZddlZddlZddlZddlZddlmZddlmZm	Z	m
Z
mZmZm
Z
mZmZmZmZddlmZddlmZmZddlmZddlmZdd	lmZdd
lmZmZm Z ddl!m"Z"ddl#m$Z$dd
l%m&Z&m'Z'ddl(m)Z)ddl*m+Z+m,Z,m-Z-m.Z.ddl/m0Z0ddl1m2Z2m3Z3ddl4m5Z5ddl4m6Z7ddl8m9Z9ddl:m;Z;ddl<m=Z=m>Z>m?Z?ddl@mAZAddlBmCZCddlDmEZEmFZFmGZGddlHmIZImJZJe;�KeL�ZMe�NdejO�ZPe2d�e2d�e2d�e2d�e2d �e2d!�e2d"�d#�ZQGd$d%�d%e
�ZRGd&d'�d'e
�ZSdld(eTd)e0d*ejfd+d,�ZUdld-eTd)e0d*eefd.d/�ZVdld0eTd)e0d*ejWfd1d2�ZXd3ed0eTd*dfd4d5�ZYGd6d7�d7�ZZGd8d9�d9eZe=�Z[Gd:d;�d;eZe>�Z\Gd<d=�d=eZe?�Z]Gd>d?�d?e)eeTeTf�Z^Gd@dA�dAe^�Z_GdBdC�dCe_�Z`GdDdE�dEe^�ZaGdFdG�dGe^�ZbGdHdI�dIe^�ZcGdJdK�dKec�ZdGdLdM�dMec�ZeGdNdO�dOec�ZfGdPdQ�dQe^�ZgGdRdS�dSe^�ZhGdTdU�dU�ZiGdVdW�dWeA�ZjGdXdY�dYeA�ZkGdZd[�d[e9�Zld\e"d]eTd^eTd_ed*df
d`da�ZmGdbdc�dce,�ZnGddde�dee+�Zod\e"d)e0dfedged*ef
dhdi�Zpd\e"d*e	eTeffdjdk�ZqdS)mz�
    sphinx.domains.python
    ~~~~~~~~~~~~~~~~~~~~~

    The Python domain.

    :copyright: Copyright 2007-2021 by the Sphinx team, see AUTHORS.
    :license: BSD, see LICENSE for details.
�N)�	Parameter)
�Any�Dict�Iterable�Iterator�List�
NamedTuple�Optional�Tuple�Type�cast)�nodes)�Element�Node)�
directives)�Inliner)�addnodes)�desc_signature�pending_xref�pending_xref_condition)�Sphinx)�Builder)�RemovedInSphinx50Warning�RemovedInSphinx60Warning)�ObjectDescription)�Domain�Index�
IndexEntry�ObjType)�BuildEnvironment)�_�__)�ast)�parse)�XRefRole)�logging)�Field�GroupedField�
TypedField)�SphinxDirective)�signature_from_str)�find_pending_xref_condition�make_id�make_refnode)�
OptionSpec�TextlikeNodea^ ([\w.]*\.)?            # class name(s)
          (\w+)  \s*             # thing name
          (?: \(\s*(.*)\s*\)     # optional: arguments
           (?:\s* -> \s* (.*))?  #           return annotation
          )? $                   # and nothing more
          �module�keyword�operator�object�	exception�	statementzbuilt-in function)r0r1r2r3r4r5�builtinc@s.eZdZUeed<eed<eed<eed<dS)�ObjectEntry�docname�node_id�objtype�aliasedN��__name__�
__module__�__qualname__�str�__annotations__�bool�rCrC�7/usr/lib/python3/dist-packages/sphinx/domains/python.pyr7Ds

r7c@s6eZdZUeed<eed<eed<eed<eed<dS)�ModuleEntryr8r9�synopsis�platform�
deprecatedNr<rCrCrCrDrEKs
rE�text�env�returncCs�|dkrd}nd}|r|j�d�|j�d�d�}ni}|jjr5|�d�d}td	|d
d�td	|dd�g}nt�|�g}td	g|�Rd
||d�|��S)z0Convert a type string to a cross reference node.�None�obj�class�	py:module�py:class)rOrP�.�����resolved��	condition�*�py)�	refdomain�reftype�	reftarget)	�ref_context�get�config�!python_use_unqualified_type_names�splitrr
�Textr)rIrJrZ�kwargs�	shortname�	contnodesrCrCrD�type_to_xrefSs&

����re�
annotationcs�dtjdttf�fdd��|durtjdtdd�z4t|�}�|�}t|�D]$\}}t	|t
j�r8|d	||<q't	|t
j�rK|�
�rKtt|�|�||<q'|WSty]t||�gYSw)
zParse type annotation.�noderKcs|t|tj�rt�d�|j�d|jf�gSt|tj�r3�|j�}|�	�|j
��|�	�|j��|St|tj�rFt
��t
�dd�t
��gSt|tj�r�|jturXt
�dd�gSt|jt�rht
�dt|j��gSt|jt�rxt
�dt|j��gSt|jt�r�t
�dt|j��gSt�t|j��gSt|tj�r��|j�St|tj�r��|j�St|tj�r�t
�dd�g}|jr�|jD]}|�	�|��|�t
�dd��|�t
���q�|��|��|�t
�dd��|St|tj�r�t �fd	d
�|j!D�g�St|tj"��rt�|j#�gSt|tj$��rW�|j�}|�t
�dd��|�	�|j%��|�t
�dd��|ddv�rUt&|dd�dd
�D]\}}t|tj��rSt�'dd|�||<�q?|St|tj(��r�|j�r�g}|jD]}|�	�|��|�t
�dd��|�t
����qg|��|��|St
�dd�t
�dd�g}|St)j*dk�r�t|tj��r�t
�dd�gSt|tj+��r�t�|j�gSt,�)Nz%s.%srrS�|z...�[�,�]c3s�|]}�|�VqdS�NrC)�.0�e��unparserCrD�	<genexpr>���z5_parse_annotation.<locals>.unparse.<locals>.<genexpr>��Literalztyping.Literal�)�start�(�))��)-�
isinstancer"�	Attributer
ra�value�attr�BinOp�left�extend�op�right�BitOrr�desc_sig_space�desc_sig_punctuation�Constant�EllipsisrB�desc_sig_keyword�repr�int�desc_sig_literal_numberr@�desc_sig_literal_string�Exprrr�elts�append�pop�Module�sum�body�Name�id�	Subscript�slice�	enumerate�literalr
�sys�version_info�NameConstant�SyntaxError)rg�result�elem�i�subnoderorCrDrpps� 

�




�

�
�z"_parse_annotation.<locals>.unparseNz=The env parameter for _parse_annotation becomes required now.���
stacklevelr)r"�ASTrr�warnings�warnr�	ast_parser�r{r
r�ra�striprer@r�)rfrJ�treer�r�rgrCrorD�_parse_annotationns$R���r��arglistc
Cs�t�|�}td|�}d}|j��D]�}|j|jkr,||jkr,|t�ddt�dd��7}|j|j	krH||j
|jdfvrH|t�ddt�dd��7}t��}|j|jkrd|t�dd�7}|t�d|j
�7}n!|j|jkr||t�dd�7}|t�d|j
�7}n	|t�d|j
�7}|j|jur�t|j|�}|t�dd�7}|t��7}|tjddg|�R�7}|j|jur�|j|jur�|t��7}|t�dd�7}|t��7}n|t�dd�7}|tjd|jd	gd
d�7}||7}|j}q|tjkr�|t�ddt�dd��7}|S)z*Parse a list of arguments using AST parserz(%s)NrS�/rWz**�:�=�
default_valueF)�classes�support_smartquotes)r�desc_parameterlistr*�
parameters�values�kind�POSITIONAL_ONLY�desc_parameter�desc_sig_operator�KEYWORD_ONLY�POSITIONAL_OR_KEYWORD�VAR_POSITIONAL�
desc_sig_name�name�VAR_KEYWORDrf�emptyr�r�r��defaultr
�inliner)r�rJ�params�sig�	last_kind�paramrg�childrenrCrCrD�_parse_arglist�sL
��
r��signodecCs�t��}|g}z�|�d�D]�}|��}d}}|�d�r:|�t���|d|d7<|dd���}|�d�s|�d�rP|��|dd���}|�d�s?|�d�rp|�d	�sp|d7}|dd���}|�d�rp|�d	�rZ|�d�r�|d7}|dd���}|�d�su|r�|dt�	d
d
t�
||��7<|r�|�t���|d|d7<|d8}|s�|r�|��|d8}|s�q
t|�dkr�t�Wnty�t��}|t�	||�7}||7}YdSw||7}dS)z�"Parse" a list of arguments separated by commas.

    Arguments can have "optional" annotations given by enclosing them in
    brackets.  Currently, this will split at any comma, even if it's inside a
    string literal (e.g. default argument value).
    rjrri���rRruNrkz[]rS)
rr�r`r��
startswithr��
desc_optionalr��endswithr�r��len�
IndexError)r�r��	paramlist�stack�argument�	ends_open�
ends_closerCrCrD�_pseudo_parse_arglists\

�

��

�������r�cs�eZdZejddddfdedededeedede	de
d	ed
ef�fdd�
Zejddddfdedededeedede	de
d	ed
eefd
d�Z
�ZS)�PyXrefMixinN�rolename�domain�target�	innernode�contnoderJ�inliner�locationrKc	
s8t�j||||||ddd�}	d|	d<|j�d�|	d<|j�d�|	d<|�d�re|d|dd�}
|	d	<|
d
kr?|dd�}n|
dkrJ|�d
�d}t|	�tj	��D]}t�	|�|j
|j
�|�<|	S|	St|	t
�r�|jjr�|	j}
|	��|�d
�d}|d
|�}td
d
|dd�td
d
g|
�Rddi�g}|	�|�|	S)N)r�r�T�refspecificrOrP)rQ�~rrur[rQr�rRrSrTrUrVrW)�super�	make_xrefr\r]r�r`�list�traverser
ra�parent�indexr{rr^r_r��clearrr�)�selfr�r�r�r�r�rJr�r�r��prefixrIrgr�rc�textnoderd��	__class__rCrDr�9s6�
�
�
zPyXrefMixin.make_xrefc	
Cs�d}	t�|	�}
t�|	|�}t|o|��|k�}d}
g}td|�D]0}|r)t�|�}|
s0|
�|�r;|�	|p8|||��n|�	|�
||||||||��|dvrPd}
q |S)Nz8(\s*[\[\]\(\),](?:\s*or\s)?\s*|\s+or\s+|\s*\|\s*|\.\.\.)FrsT)�re�compiler`rB�astext�filterr
ra�matchr�r�)r�r�r�r�r�r�rJr�r��delims�	delims_re�sub_targets�split_contnode�
in_literal�results�
sub_targetrCrCrD�
make_xrefsZs$


��zPyXrefMixin.make_xrefs)r=r>r?r
�emphasisr@rr/rrrr�rr��
__classcell__rCrCr�rDr�8sB�������"�������r�c�TeZdZejddddfdedededeedede	de
d	ed
ef�fdd�
Z�ZS)
�PyFieldNr�r�r�r�r�rJr�r�rKc		
�.|dkr
|dkr
d}t��||||||||�S�NrNrLrM�r�r��	r�r�r�r�r�r�rJr�r�r�rCrDr�w�
�zPyField.make_xref�
r=r>r?r
r�r@rr/rrrr�r�rCrCr�rDr�v�"�������r�c@seZdZdS)�PyGroupedFieldN)r=r>r?rCrCrCrDr�srcr�)
�PyTypedFieldNr�r�r�r�r�rJr�r�rKc		
r�r�rrr�rCrDr��rzPyTypedField.make_xrefrrCrCr�rDr�rrc@s:eZdZUdZejejejejejd�Zee	d<e
ded�dddd	d
�e
ded�d
ddd	d
�eded�ddd	d�e
ded�ddd�eded�dddd�gZdZdedeejfdd �Zdefd!d"�Zded#edeeeffd$d%�Zd&ed'eeefdefd(d)�Zd*eeefded#edd+fd,d-�Zd2d.d/�Zd2d0d1�Zd+S)3�PyObjectz�
    Description of a general Python object.

    :cvar allow_nesting: Class is an object that allows for nested namespaces
    :vartype allow_nesting: bool
    )�noindex�noindexentryr0�	canonicalrf�option_spec�	parameter�
Parameters)r�r�argr�r1�kwarg�kwparamrN)�	paramtype�typeT)�label�names�typerolename�	typenames�can_collapse�variable�	Variables)�var�ivar�cvar)�vartype�
exceptions�Raises�exc)�raises�raiser4�except)rr�rr�returnvalue�ReturnsF)�returnsrK)r�has_argr�
returntypezReturn type)�rtype)rr'r�bodyrolenamer�rKcCsgS)zTMay return a prefix to put before the object name in the
        signature.
        rC�r�r�rCrCrD�get_signature_prefix��zPyObject.get_signature_prefixcC�dS)zqMay return true if an empty argument list is to be generated even if
        the document contains none.
        FrC�r�rCrCrD�
needs_arglist�r-zPyObject.needs_arglistr�c
Cs�t�|�}|durt�|��\}}}}|j�d|jj�d��}|jj�d�}	|	rYd}
|rG||	ks7|�|	d�rG||}|t	|	�d��
d�}n$|rR|	d||}n|	d|}nd}
|rg|�d�}	||}nd}	|}||d<|	|d	<||d
<|�|�}|r�t
|�tur�t�d�|�t�|t�|dt�|��7}n|tjt|�dg|�R�7}|r�|t�||�7}n|r�|
r�|jjjr�|d}
|t�|
|
�7}|t�||�7}|�rz
|t||j�7}Wn9ty�t||�Yn,t�y}ztj d|||d
�t||�WYd}~nd}~ww|�!��r|t�"�7}|�r,t#||j�}|tj$|dg|�R�7}|j�d�}|�rF|t�d|dt�%�t�|��7}||fS)aJTransform a Python signature into RST nodes.

        Return (fully qualified name of the thing, classname if any).

        If inside a class, the current class name is handled intelligently:
        * it is stripped from the displayed name if present
        * it is added to the full name (return value) if not present
        Nr0rOrPFrQTrSrN�fullnamez�Python directive method get_signature_prefix() returning a string is deprecated. It must now return a list of nodes. Return value was '{}'.z could not parse arglist (%r): %s�r�rf� )&�	py_sig_rer��
ValueError�groups�optionsr]rJr\r�r��lstrip�rstripr,rr@r�r��formatrr�desc_annotationr
ra�desc_addnamer^�add_module_names�	desc_namer�r�r��NotImplementedError�logger�warningr0r�r��desc_returnsr�)r�r�r��mr�r�r��retann�modname�	classname�
add_moduler1�
sig_prefix�nodetextr r��annorCrCrD�handle_signature�s�
	�


�
�
���
�zPyObject.handle_signaturerEr�cCstd��)z2Return the text for the index entry of the object.z!must be implemented in subclasses)r?)r�rEr�rCrCrD�get_index_text!szPyObject.get_index_text�name_clsNc
Cs|j�d|jj�d��}|r|dnd|d}t|j|jjd|�}|d�|�||kr;||jjjvr;|d�|�|jj�	|�t
t|j�d��}|j
||j||d�|j�d	�}|rh|j
||j|d
|d�d|jvr�|�||�}	|	r�|jd
�d|	|ddf�dSdSdS)Nr0rOrQrSr�idsrXr2r
T)r;r�r	�entries�single)r7r]rJr\r,�state�documentr�rN�note_explicit_targetr�PythonDomain�
get_domain�note_objectr:rL�	indexnode)
r�rMr�r�rEr1r9r��canonical_name�	indextextrCrCrD�add_target_and_index%s(�
�zPyObject.add_target_and_indexcCs�d}|jr|jd\}}|jr|}n|r|�d�}|r1||jjd<|jr1|jj�dg�}|�|�d|jvrS|jj�dg�}|�|jj�d��|jd|jjd<dSdS)	aHandle object nesting before content

        :py:class:`PyObject` represents Python language constructs. For
        constructs that are nestable, such as a Python classes, this method will
        build up a stack of the nesting hierarchy so that it can be later
        de-nested correctly, in :py:meth:`after_content`.

        For constructs that aren't nestable, the stack is bypassed, and instead
        only the most recent object is tracked. This object prefix name will be
        removed with :py:meth:`after_content`.
        NrRrQrP�
py:classesr0�
py:modulesrO)	r�
allow_nestingr�rJr\�
setdefaultr�r7r])r�r�r1�name_prefixr��modulesrCrCrD�before_content@s"


�zPyObject.before_contentcCs�|jj�dg�}|jrz|��Wn	tyYnwt|�dkr%|dnd|jjd<d|jvrM|jj�dg�}|rD|��|jjd<dS|jj�d�dSdS)	a^Handle object de-nesting after content

        If this class is a nestable object, removing the last nested class prefix
        ends further nesting in the object.

        If this class is not a nestable object, the list of classes should not
        be altered as we didn't affect the nesting levels in
        :py:meth:`before_content`.
        r[rrRNrPr0r\rO)rJr\r^r]r�r�r�r7)r�r�r`rCrCrD�
after_contentas 
�
�
�zPyObject.after_content)rKN)r=r>r?�__doc__r�flag�	unchangedrr.rArr rr&r��doc_field_typesr]r@rr
rr,rBr0rr
rKrLrZrarbrCrCrCrDr�sR
�
	�
�����]�
�
!rcs�eZdZUdZej��Zeed<e�	de
ji�dede
ejfdd�Zdefdd	�Zd
eeefdededdf�fd
d�Zded
eeefdefdd�Z�ZS)�
PyFunctionzDescription of a function.r�asyncr�rKcCs"d|jvrt�dd�t��gSgS)NrhrS)r7rr�r�r+rCrCrDr,�s


�zPyFunction.get_signature_prefixcCr.)NTrCr/rCrCrDr0��zPyFunction.needs_arglistrMr�Nc	s�t��|||�d|jvrS|j�d|jj�d��}|dd}|\}}|r<td�||f}|jd�d||d	df�dSd
t	d|f}|jd�d||d	df�dSdS)
Nr	r0rOrNr�%s() (in module %s)rOrPrSz%s; %s()r6�pair)
r�rZr7r]rJr\r rWr��pairindextypes)	r�rMr�r�rEr9r��clsrIr�rCrDrZ�s
�zPyFunction.add_target_and_indexrEcCsdSrlrC�r�rErMrCrCrDrL�szPyFunction.get_index_text)r=r>r?rcrr�copyr.rA�updaterrdr@rr
rr,rBr0r
rrZrLr�rCrCr�rDrg{s
���&rgc�ZeZdZdZdeef�fdd�Zdedede	eeff�fdd�Z
defd	d
�Z�Z
S)�PyDecoratorFunctionzDescription of a decorator.rKc�d|_t���S)Nzpy:function�r�r��runr/r�rCrDru�s
zPyDecoratorFunction.runr�r�c�&t��||�}|�dt�dd��|S�Nr�@�r�rK�insertrr<�r�r�r��retr�rCrDrK��z$PyDecoratorFunction.handle_signaturecCr.�NFrCr/rCrCrDr0�riz!PyDecoratorFunction.needs_arglist�r=r>r?rcrrrur@rr
rKrBr0r�rCrCr�rDrr�s
"rrc�|eZdZUdZej��Zeed<e�	e
je
jd��dede
deeeff�fdd�Zd	ed
eeefdefdd�Z�ZS)
�
PyVariablezDescription of a variable.r�rr}r�r�rKc�t��||�\}}|j�d�}|r+t||j�}|tj|dt�dd�t�	�g|�R�7}|j�d�}|rJ|t�|dt�	�t�dd�t�	�t
�|��7}||fS�NrrSr�r}r��r�rKr7r]r�rJrr;r�r�r
ra�r�r�r�r1r��typ�annotationsr}r�rCrDrK�s&

�
�

�zPyVariable.handle_signaturerErMcCs(|\}}|rtd�||fStd�|S)N�%s (in module %s)z%s (built-in variable))r )r�rErMr�rmrCrCrDrL�szPyVariable.get_index_text�r=r>r?rcrrror.rArprrer@rr
rKrLr�rCrCr�rDr��s
�"&r�c@sneZdZUdZej��Zeed<e�	de
ji�dZde
deejfdd�Zd	e
d
ee
e
fde
fdd�Zd
S)�PyClasslikezO
    Description of a class-like object (classes, interfaces, exceptions).
    r�finalTr�rKcCs@d|jvrt�d�t��t�|j�t��gSt�|j�t��gS)Nr�)r7r
rarr�r:r+rCrCrDr,�s

�z PyClasslike.get_signature_prefixrErMcCsH|jdkr|std�|dStd�|d|fS|jdkr"|dSdS)NrNz%s (built-in class)rz%s (class in %s)r4rS)r:r rnrCrCrDrL�s

zPyClasslike.get_index_textN)r=r>r?rcrrror.rArprrdr]r@rr
rr,r
rLrCrCrCrDr��s
�"r�c	@s�eZdZUdZej��Zeed<e�	e
je
je
je
je
je
jd��defdd�Z
dedeejfdd	�Zd
edeeefdefdd
�ZdS)�PyMethodzDescription of a method.r)�abstractmethodrh�classmethodr��property�staticmethodrKcCsd|jvrdSdS)Nr�FT)r7r/rCrCrDr0s
zPyMethod.needs_arglistr�cCs�g}d|jvr|�t�d��|�t���d|jvr*|�t�d��|�t���d|jvr>|�t�d��|�t���d|jvrR|�t�d��|�t���d|jvrf|�t�d��|�t���d|jvrz|�t�d��|�t���|S)	Nr�r��abstractrhr�r�r��static�r7r�r
rarr��r�r�r�rCrCrDr,s(





zPyMethod.get_signature_prefixrErMcCs�|\}}z|�dd�\}}|r|jjjrd�||g�}Wnty5|r/td�||fYSd|YSwd|jvrCtd�||fSd|jvrPtd�||fSd	|jvr]td
�||fStd�||fS)NrQrurjz%s()r�z%s() (%s class method)r��%s (%s property)r�z%s() (%s static method)z%s() (%s method))�rsplitrJr^r=�joinr5r r7)r�rErMr�rm�clsname�methnamerCrCrDrLs$��


zPyMethod.get_index_textN)r=r>r?rcrrror.rArprrdrBr0r@rr
rr,r
rLrCrCrCrDr��s
�	"r�c�>eZdZUdZej��Zeed<de	e
f�fdd�Z�ZS)�
PyClassMethodzDescription of a classmethod.rrKc�d|_d|jd<t���S)N�	py:methodTr��r�r7r�rur/r�rCrDru9�

zPyClassMethod.run�
r=r>r?rcrrror.rArrrur�rCrCr�rDr�4�
r�cr�)�PyStaticMethodzDescription of a staticmethod.rrKcr�)Nr�Tr�r�r/r�rCrDruEr�zPyStaticMethod.runr�rCrCr�rDr�@r�r�crq)�PyDecoratorMethodz!Description of a decoratormethod.rKcrs)Nr�rtr/r�rCrDruOs
zPyDecoratorMethod.runr�r�crvrwryr{r�rCrDrKSr}z"PyDecoratorMethod.handle_signaturecCr.r~rCr/rCrCrDr0XrizPyDecoratorMethod.needs_arglistrrCrCr�rDr�Ls
"r�cr�)
�PyAttribute�Description of an attribute.rr�r�r�rKcr�r�r�r�r�rCrDrKes&

�
�

�zPyAttribute.handle_signaturerErMcC�x|\}}z|�dd�\}}|r|jjjrd�||g�}Wnty3|r/td�||fYS|YSwtd�||fS)NrQrur�z%s (%s attribute)�r�rJr^r=r�r5r �r�rErMr�rmr��attrnamerCrCrDrLz���zPyAttribute.get_index_textr�rCrCr�rDr�\s
�"&r�cs�eZdZdZej��Ze�ej	ej	ej
d��dedede
eeff�fdd�Zdedeejfdd	�Zd
ede
eefdefdd
�Z�ZS)�
PyPropertyr�)r�r�rr�r�rKcs^t��||�\}}|j�d�}|r+t||j�}|tj|dt�dd�t�	�g|�R�7}||fS)NrrSr�)
r�rKr7r]r�rJrr;r�r�)r�r�r�r1r�r�r�r�rCrDrK�s

�
�zPyProperty.handle_signaturecCsvg}d|jvr|�t�d��|�t���d|jvr*|�t�d��|�t���|�t�d��|�t���|S)Nr�r�r�rNr�r�r�rCrCrDr,�s

zPyProperty.get_signature_prefixrErMcCr�)NrQrur�r�r�r�rCrCrDrL�r�zPyProperty.get_index_text)r=r>r?rcrrrorprrdrer@rr
rKrr
rr,rLr�rCrCr�rDr��s
�"
&
r�csDeZdZdZdededeeeff�fdd�Zdefdd�Z	�Z
S)	�PyDecoratorMixinz)
    Mixin for decorator directives.
    r�r�rKcsf|jjD]}|jdkrtjd|tdd�n	qtjdtdd�t��||�}|�dt	�
dd��|S)N�DirectiveAdapterzEPyDecoratorMixin is deprecated. Please check the implementation of %sr�r�zPyDecoratorMixin is deprecatedrrx)r��__mro__r=r�r�rr�rKrzrr<)r�r�r�rmr|r�rCrDrK�s
����z!PyDecoratorMixin.handle_signaturecCr.r~rCr/rCrCrDr0�rizPyDecoratorMixin.needs_arglist)r=r>r?rcr@rr
rKrBr0r�rCrCr�rDr��s"r�c@sheZdZUdZdZdZdZdZdd�dd�ej	ej	d�Z
eed	<d
e
efdd�Zd
ed
efdd�ZdS)�PyModulez8
    Directive to mark description of a new module.
    FrurcC�|SrlrC��xrCrCrD�<lambda>��zPyModule.<lambda>cCr�rlrCr�rCrCrDr��r�)rGrFrrHrrKc
	Cs*tt|j�d��}|jd��}d|jv}||jjd<g}|s�t|j|j	j
d|�}tjdd|gdd�}|�
|�|�|�}||krO||j	j
jvrO|d	�|�|j	j
�|�|�|||j�d
d�|j�dd�d|jv�|j|d||d
�|�|�dtd|f}tjd||ddfgd�}	|�|	�|S)NrXrrrOr0rST)rN�ismodrNrFrGrHr2z%s; %srk)rO)rrTrJrU�	argumentsr�r7r\r,rQrRr
r��set_source_info�make_old_idrNr�rS�note_moduler]rVrlrr�)
r�r�rErr|r9r��old_node_idrY�inoderCrCrDru�s2


�

zPyModule.runr�cCsd|S)z�Generate old styled node_id.

        Old styled node_id is incompatible with docutils' node_id.
        It can contain dots and hyphens.

        .. note:: Old styled node_id was mainly used until Sphinx-3.0.
        z	module-%srC)r�r�rCrCrDr�szPyModule.make_old_idN)r=r>r?rc�has_content�required_arguments�optional_arguments�final_argument_whitespacerrdrr.rArrrur@r�rCrCrCrDr��s
�$r�c@s@eZdZUdZdZdZdZdZiZe	e
d<deefdd�Z
d	S)
�PyCurrentModulez�
    This directive is just to tell Sphinx that we're documenting
    stuff in module foo, but links to module foo won't lead here.
    FrurrrKcCs:|jd��}|dkr|jj�dd�gS||jjd<gS)NrrLrO)r�r�rJr\r�)r�rErCrCrDrus�zPyCurrentModule.runN)r=r>r?rcr�r�r�r�rr.rArrrurCrCrCrDr�s
r�c@s6eZdZdedededededeeeffdd�Zd	S)
�
PyXRefRolerJ�refnode�has_explicit_title�titler�rKcCs�|j�d�|d<|j�d�|d<|s;|�d�}|�d�}|dd�dkr;|dd�}|�d�}|dkr;||dd�}|dd�dkrM|dd�}d|d	<||fS)
NrOrPrQr�rrurRTr�)r\r]r8�rfind)r�rJr�r�r�r��dotrCrCrD�process_link(s


zPyXRefRole.process_linkN)	r=r>r?rrrBr@r
r�rCrCrCrDr�'s
���
�r��appr�r:�contentcCsx|dkrdS|D]1}t|tj�r9tttj|�}|D]}ttj|d�����}|dks1|�	d�r8|�
|�nqqdS)z+Filter ``:meta:`` field from its docstring.rXNr�metazmeta )r{r
�
field_listrr�field�
field_bodyr�r�r��remove)r�r�r:r�rg�fieldsr��
field_namerCrCrD�filter_meta_fields>s
���r�c
@sTeZdZdZdZed�Zed�Zd
dee	de
ee
e	eefe
ffdd	�ZdS)�PythonModuleIndexz<
    Index subclass to provide the Python module index.
    �modindexzPython Module Indexr`N�docnamesrKcCs�i}|jjjd}t|tdd�}t|jjd��dd�d�}d}d	}|D]�\}\}}	}
}}|r4||vr4q$|D]}
|�|
�rI|t|
�d�}|
}nq6d}|sS|d}}|�|d	�	�g�}|�
d
�d	}||kr�||kr�|r�|d}t|d	d|d
|d|d|d|d�|d<n|�|�s�|�t||dddddd��d
}n|d7}d	}|r�t
d�nd}|�t|||||	|||
��|}q$t|�||k}t|���}||fS)N�modindex_common_prefixT)�key�reverser`cSs|d��S)Nr)�lowerr�rCrCrDr�^sz,PythonModuleIndex.generate.<locals>.<lambda>)r�rSrrQrRrur�ry����
Deprecated)r�rJr^�sortedr��data�itemsr�r^r�r`rr�r )r�r�r��ignoresr`�prev_modname�
num_toplevelsrEr8r9rF�	platformsrH�ignore�strippedrO�package�last�subtype�	qualifier�collapse�sorted_contentrCrCrD�generateVsV�
�
��
�zPythonModuleIndex.generaterl)r=r>r?rcr�r �	localnamercrr@r
rrrBr�rCrCrCrDr�Ms�r�c@s�eZdZUdZdZdZeed�dd�eed�dd�eed�dd	d�eed
�d	dd�eed�dd�eed
�dd�eed�dd�eed�dd�eed�ddd�eed�dd�d�
Ze	e
efed<ee
eeeeeeeeeeed�
Ze�e�edd�e�e�e�edd�e�e�d�	Ziid�Ze	e
e	e
eeffed<egZe de	e
e!ffdd��Z"	!dNd"e
d#e
d$e
d%e#d&edd!fd'd(�Z$e de	e
e%ffd)d*��Z&d"e
d$e
d+e
d,e
d-e#dd!fd.d/�Z'd0e
dd!fd1d2�Z(d3e)e
d4e	dd!fd5d6�Z*	7dOd8e+d9e
d:e
d"e
d;e
d<e,de)ee
e!ffd=d>�Z-d8e+d?e
d@e.d;e
dAe
dBe/dCe0de1e0fdDdE�Z2d8e+d?e
d@e.dAe
dBe/dCe0de)ee
e0ffdFdG�Z3d@e.d?e
d"e
dCe4de0f
dHdI�Z5de6ee
e
e
e
e
e,ffdJdK�Z7dBe0de1e
fdLdM�Z8d!S)PrTzPython language domain.rX�Python�function�funcrMr�rNr r4�method�methzclass methodz
static method�	attributer~r��_propr0�mod)
r�r�rNr4r�r�r�r�r�r0�object_types)
r�r�rNr4r�r�r�r�r�r0�
currentmodule�	decorator�decoratormethodT)�
fix_parens)	r�r r�rN�constr~r�r�rM)�objectsr`�initial_datarKcC�|j�di�S)Nr��r�r^r/rCrCrDr���zPythonDomain.objectsFNr�r:r9r;r�cCsj||jvr'|j|}|jr|durn|jdur|rdStjtd�||j|d�t|jj|||�|j|<dS)zQNote a python object for cross reference.

        .. versionadded:: 2.1
        FNzWduplicate object description of %s, other instance in %s, use :noindex: for one of themr2)r�r;r@rAr!r8r7rJ)r�r�r:r9r;r��otherrCrCrDrV�s


�zPythonDomain.note_objectcCr�)Nr`rr/rCrCrDr`�rzPythonDomain.modulesrFrGrHcCst|jj||||�|j|<dS)zQNote a python module for cross reference.

        .. versionadded:: 2.1
        N)rErJr8r`)r�r�r9rFrGrHrCrCrDr��s
�zPythonDomain.note_moduler8cCsXt|j���D]
\}}|j|kr|j|=qt|j���D]
\}}|j|kr)|j|=qdSrl)r�r�r�r8r`)r�r8r1rMrEr�rCrCrD�	clear_doc�s
�
��zPythonDomain.clear_docr��	otherdatacCsX|d��D]\}}|j|vr||j|<q|d��D]\}}|j|vr)||j|<qdS)Nr�r`)r�r8r�r`)r�r�rr1rMrEr�rCrCrD�merge_domaindata�s

�

��zPythonDomain.merge_domaindatarrJrErFr�
searchmodec
s�|dd�dkr|dd�}|sgSg}d}|dkr�|dur$t�j��n��|���dur�|rJ|rJ|d|d|}	|	�jvrJ�j|	j�vrJ|	}|s�|rj|d|�jvrj�j|d|j�vrj|d|}nn|�jvrz�j|j�vrz|}n^d|����fdd��jD�}nM|�jvr�|}nE|dkr�gS|r�|d|�jvr�|d|}n-|r�|d|�jvr�|d|}n|r�|r�|d|d|�jvr�|d|d|}|dur�|�|�j|f�|S)	z�Find a Python object for "name", perhaps using the given module
        and/or classname.  Returns a list of (name, object entry) tuples.
        r�Nz()rurQcs4g|]}|���r�j|j�vr|�j|f�qSrC)r�r�r:)rm�oname��objtypes�
searchnamer�rCrD�
<listcomp>"s��z)PythonDomain.find_obj.<locals>.<listcomp>r�)r�r��objtypes_for_roler�r:r�)
r�rJrErFr�rr�matches�newnamer1rCrrD�find_obj�sL
�
zPythonDomain.find_obj�fromdocname�builderr�rgr�cCs6|�d�}|�d�}	|�d�rdnd}
|�|||	|||
�}|s-|dkr-|�|||	|d|
�}|s=|dkr=|�|||	|d|
�}|sAdSt|�dkrld	d
�|D�}t|�dkrW|}ntjtd�|d�d
d�|D��dd|d�|d\}
}|ddkr�|�|||
|�St	|d�}|r�|j
}n|g}t|||d|d||
�S)NrOrPr�rurr~r�r�cSsg|]	}|djs|�qS)ru)r;)rmrCrCrCrDrPsz-PythonDomain.resolve_xref.<locals>.<listcomp>z5more than one target found for cross-reference %r: %sz, css�|]}|dVqdS)rNrC)rmr�rCrCrDrqUrrz,PythonDomain.resolve_xref.<locals>.<genexpr>�ref�python)rr�r�r�r0rT)r]�hasattrrr�r@rAr!r��_make_module_refnoder+r�r-)r�rJrrrr�rgr�rEr�rr
�
canonicalsr�rMr�r�rCrCrD�resolve_xref7s8

�
�
zPythonDomain.resolve_xrefcCs�|�d�}|�d�}g}	|�||||dd�}
|
D]?\}}|ddkr0|	�d|�||||�f�qt|d�}
|
r;|
j}n|g}|	�d|�|d�t|||d	|d||�f�q|	S)
NrOrPrur�r0zpy:modrTzpy:r)r]rr�rr+r��role_for_objtyper-)r�rJrrr�rgr�rEr�r�r
r�rMr�r�rCrCrD�resolve_any_xreffs*

��
��zPythonDomain.resolve_any_xrefcCsb|j|}|}|jr|d|j7}|jr|td�7}|jr&|d|jd7}t|||j|j||�S)Nz: z
 (deprecated)z (rx)r`rFrHr rGr-r8r9)r�rrr�r�r0r�rCrCrDr�s
�z!PythonDomain._make_module_refnodeccs��|j��D]\}}||d|j|jdfVq|j��D]%\}}|jdkr@|jr4|||j|j|jdfVq|||j|j|jdfVqdS)Nr0rrRru)r`r�r8r9r�r:r;)r�rEr��refnamerMrCrCrD�get_objects�s�
��zPythonDomain.get_objectscCs@|�d�}|�d�}|�d�}|durdSd�td|||g��S)NrOrPr[rQ)r]r�r�)r�rgrEr�r�rCrCrD�get_full_qualified_name�s


z$PythonDomain.get_full_qualified_name)FN)r)9r=r>r?rcr�rrr r�rr@rArgr�r�r�r�r�r�r�r�r�rrr�rr��rolesr�r
rr��indicesr�r7r�rBrVrEr`r�rrrrr�rrrrr	rrrrrrrrCrCrCrDrT�s�
���"�����
���
�	
����
�8����
�/���
��
�"rTrgr�cCs�dtdtfdd�}|�d�dkrdS|�d�d	vr"|�d
�dkr"|S|�d�dvr?|�d
�}t�tt|d��r9|S||�r?|SdS)
z1Do not emit nitpicky warnings for built-in types.�srKcSs$|�d�r
|�dd�d}|tjvS)Nztyping.rQru)r�r`�typing�__all__)rrCrCrD�istyping�s

z"builtin_resolver.<locals>.istypingrYrXNrZ)rNrMr[rL)rNr )r@rBr]�inspect�isclass�getattr�builtins)r�rJrgr�r"r[rCrCrD�builtin_resolver�s
r'cCsL|�d�|�t�|�ddd�|�dt�|jdtdd�d	d
ddd�S)
Nzsphinx.directivesr_FrJzobject-description-transformzmissing-referencei�)�priorityr6ryT)�version�env_version�parallel_read_safe�parallel_write_safe)�setup_extension�
add_domainrT�add_config_value�connectr�r')r�rCrCrD�setup�s

�r1rl)rrcr&r#r�r�r r�rrrrrrrr	r
rr�docutilsr
�docutils.nodesrr�docutils.parsers.rstr�docutils.parsers.rst.statesr�sphinxr�sphinx.addnodesrrr�sphinx.applicationr�sphinx.buildersr�sphinx.deprecationrr�sphinx.directivesr�sphinx.domainsrrrr�sphinx.environmentr�
sphinx.localer r!�sphinx.pycode.astr"r#r��sphinx.rolesr$�sphinx.utilr%�sphinx.util.docfieldsr&r'r(�sphinx.util.docutilsr)�sphinx.util.inspectr*�sphinx.util.nodesr+r,r-�sphinx.util.typingr.r/�	getLoggerr=r@r��VERBOSEr4rlr7rEr@rer�r�r�r�r�r�rrrrgrrr�r�r�r�r�r�r�r�r�r�r�r�r�r�rTr'r1rCrCrCrD�<module>s�
0
�
�e23>

h&%?-3?H
��
�