
    Fe                      d Z ddlmZ ddlZddlZddlZddlZddlZddlZddl	Z	ddlm
Z
 ddl	mZmZmZmZ ddlmZ ddlmZ ddlmZ dd	lmZmZmZ dd
lmZ ddlmZmZmZmZ ddl m!Z!m"Z" ddl#m$Z$m%Z% ddl&m'Z' ddl(m)Z) ddl*m+Z+m,Z,m-Z- ddl.m/Z/ ddl0m1Z1 ddl2m3Z3m4Z4m5Z5m6Z6 er0ddl7m8Z8m9Z9 ddl:m;Z;m<Z< ddl=m>Z> ddl?m@Z@ ddlAmBZB ddlCmDZD ddlEmFZFmGZG  e)j                  eI      ZJ ej                  dej                        ZMddddd d!d"d#ZN G d$ d%e      ZO G d& d'e      ZPd]	 d^d)ZQd(d*	 	 	 d_d+ZRd`d,ZS G d- d.e%      ZT	 d]	 	 	 	 	 	 	 dad/ZU	 d]	 	 	 	 	 	 	 dbd0ZV	 d]	 	 	 	 	 	 	 dcd1ZW G d2 d3      ZX G d4 d5eXe+      ZY G d6 d7eXe,      ZZ G d8 d9eXe-      Z[ G d: d;ee\e]e]f            Z^ G d< d=e^      Z_ G d> d?e_      Z` G d@ dAe^      Za G dB dCe^      Zb G dD dEe^      Zc G dF dGec      Zd G dH dIec      Ze G dJ dKec      Zf G dL dMe^      Zg G dN dOe^      Zh G dP dQe/      Zi G dR dSe/      Zj G dT dUe'      ZkdddVZl G dW dXe      Zm G dY dZe      Zn	 	 	 	 	 	 ded[Zodfd\Zpy)gzThe Python domain.    )annotationsN)	Parameter)TYPE_CHECKINGAny
NamedTuplecast)nodes)
directives)addnodes)desc_signaturepending_xrefpending_xref_condition)ObjectDescription)DomainIndex
IndexEntryObjType)___)TokenTokenProcessor)XRefRole)logging)FieldGroupedField
TypedField)SphinxDirective)signature_from_str)find_pending_xref_conditionmake_idmake_refnodenested_parse_with_titles)IterableIterator)ElementNode)Inliner)Sphinx)Builder)BuildEnvironment)
OptionSpecTextlikeNodeaM  ^ ([\w.]*\.)?            # class name(s)
          (\w+)  \s*             # thing name
          (?: \[\s*(.*)\s*])?    # optional: type parameters list
          (?: \(\s*(.*)\s*\)     # optional: arguments
           (?:\s* -> \s* (.*))?  #           return annotation
          )? $                   # and nothing more
          modulekeywordoperatorobject	exception	statementzbuilt-in function)r-   r.   r/   r0   r1   r2   builtinc                  6    e Zd ZU ded<   ded<   ded<   ded<   y)ObjectEntrystrdocnamenode_idobjtypeboolaliasedN__name__
__module____qualname____annotations__     7/usr/lib/python3/dist-packages/sphinx/domains/python.pyr5   r5   H   s    LLLMrB   r5   c                  @    e Zd ZU ded<   ded<   ded<   ded<   ded<   y)	ModuleEntryr6   r7   r8   synopsisplatformr:   
deprecatedNr<   rA   rB   rC   rE   rE   O   s    LLMMrB   rE   Fc                4   d}| j                  d      r
| dd } | }d}n[| j                  d      r| dd } | j                  d      d   }n0|r| j                  d      d   }n| j                  d      r| d	d }n| }| d
k(  s| j                  d      rd}nd}|| ||fS )zLParse a type string and return (reftype, reftarget, title, refspecific flag)F.   NT~typing.   Noneobjclass)
startswithsplit)	reftargetsuppress_prefixrefspecifictitlereftypes        rC   parse_reftargetrZ   W   s     KC abM				c	"abM	$R(	$R(			i	(!"Fi229=Iuk11rB   rV   c               ~   |r8|j                   j                  d      |j                   j                  d      d}ni }t        | |      \  }} }}|j                  j                  r1|j                  d      d   }t        d|d      t        d|d	      g}nt        j                  |      g}t        dg|d
|| |d|S )z0Convert a type string to a cross reference node.	py:modulepy:class)r]   r^   rJ   rM    resolved	condition*py)	refdomainrY   rU   rW   )
ref_contextgetrZ   config!python_use_unqualified_type_namesrT   r   r	   Textr   )	targetenvrV   kwargsrY   rX   rW   	shortname	contnodess	            rC   type_to_xrefrp   r   s     "22;?!oo11*=? *9&/*R'GVUK
zz33 KK$R(	!7IQ[!\!7ES!Q!S	 ZZ&'	 ;Y ;"&6$/;39; ;rB   c                   |j                   j                  d	fdd
fd	 t        j                  | d      }g } |      D ]  }t	        |t
        j                        r|j                  |d          2t	        |t
        j                        r|j                         r|rjt	        |d   t        j                        rM|d   j                         dk(  r7|j                          |j                  t        t        |      |d             |j                  t        t        |      |             |j                  |        |S # t         $ r t        | |      gcY S w xY w)zParse type annotation.c                   t        | t        j                        r8t        j                   | j
                        d    d| j                         gS t        | t        j                        rV | j                        }|j                   | j                               |j                   | j                               |S t        | t        j                        r=t        j                         t        j                  dd      t        j                         gS t        | t        j                         r| j
                  t"        u rt        j                  dd      gS t        | j
                  t$              r*t        j&                  dt)        | j
                              gS t        | j
                  t*              r*t        j,                  dt)        | j
                              gS t        | j
                  t.              r*t        j0                  dt)        | j
                              gS t        j                  t)        | j
                              gS t        | t        j2                        r | j
                        S t        | t        j4                        rt        j                  dd      gS t        | t        j6                        rt        j                  dd      g}| j8                  r| j8                  D ]a  }|j                   |             |j;                  t        j                  dd             |j;                  t        j                                c |j=                          |j=                          |j;                  t        j                  dd	             |S t        | t        j>                        rtA        fd
| jB                  D        g       S t        | t        jD                        r t        j                  | jF                        gS t        | t        jH                        rtK        | j
                  dd      dv r |       S r"tK        | j
                  dd      dk(  r |       S  | j
                        }|j;                  t        j                  dd             |j                   | jL                               |j;                  t        j                  dd	             |d   dv rMtO        |dd  d      D ]:  \  }}t        |t        j                        s!t        jP                  dd|      ||<   < |S t        | t        jR                        r% | j                         | jT                        z   S t        | t        jV                        r| j8                  rg }| j8                  D ]a  }|j                   |             |j;                  t        j                  dd             |j;                  t        j                                c |j=                          |j=                          |S t        j                  dd      t        j                  dd      g}|S tX        )Nr   rJ   r_   |z...rL   [,]c              3  .   K   | ]  } |        y wNrA   ).0eunparses     rC   	<genexpr>z5_parse_annotation.<locals>.unparse.<locals>.<genexpr>   s     6q
6s   id>   UnionOptionalLiteral)r   typing.LiteralrK   )start())-
isinstanceast	Attributer	   rj   valueattrBinOpleftextendoprightBitOrr   desc_sig_spacedesc_sig_punctuationConstantEllipsisr:   desc_sig_keywordreprintdesc_sig_literal_numberr6   desc_sig_literal_stringExprInvertListeltsappendpopModulesumbodyNamer}   	Subscriptgetattrslice	enumerateliteralUnaryOpoperandTupleSyntaxError)noderesultelemisubnode_unparse_pep_604_annotationshort_literalsr{   s        rC   r{   z"_parse_annotation.<locals>.unparse   s   dCMM*JJ'$**"5a"8!9499+FGHHdCII&!(!3FMM'$''*+MM'$**-.MdCII&++-11"c:++-/ / dCLL)zzX% 55b%@AA$**d+ 11"d4::6FGHH$**c* 88T$**=MNOO$**c* 88T$**=MNOO 

4

#3455dCHH%4::&&dCJJ'11"c:;;dCHH%33B<=Fyy !II =DMM'$-0MM("?"?C"HIMM("9"9";<= 



MM(77C@AMdCJJ'6DII6;;dCHH%JJtww'((dCMM*tzz4,0EE2488'$**dB"?9"L2488TZZ(FMM(77C@AMM'$**-.MM(77C@A ay99"+F12Ja"@ CJAw!'5::6$)MM"b'$Bq	C MdCKK(477#gdll&;;;dCII&yy II =DMM'$-0MM("?"?C"HIMM("9"9";<= 




 M #77C@"77C@B MrB   c                F   | j                   }g }t        |t        j                        ry|j	                   |j
                  d                |j
                  dd  D ]B  }|j	                   t        j                                      |j	                   |             D n|j	                   |             t        | j                  dd      dk(  rM|j	                   t        j                                      |j                  t        j                  d             |S )Nr   rK   r}   r_   r   rP   )r   r   r   r   r   r   r   r   r   r   r	   rj   )r   	subscript	flattenedeltr{   s       rC   r   z6_parse_annotation.<locals>._unparse_pep_604_annotation   s    JJ	 "	i+WY^^A%678 ~~ab) /  !56  ./
 WY/04::tR(J6WSYY[12UZZ/0rB   T)type_commentsr   rM   rL   r[   )r   zast.ASTreturn
list[Node])r   zast.Subscriptr   r   )rh   "python_display_short_literal_typesr   parser   r	   r   r   rj   stripr   r   astextr   rp   r6   r   )
annotationrl   treer   r   r   r   r{   s        @@@rC   _parse_annotationr      s   ZZBBNOb&/yy48DM 	$D$.d1g&D%**-$**,z&*h6S6STr
))+s2JJLMM,s4y#t"TUMM,s4y#">?d#	$  /Z-../s   D"E E%$E%c                  B     e Zd Zd fdZddZddZd	dZd
ddZ xZS )_TypeParameterListParserc                t    |j                  dd      j                         }t        |   |g       g | _        y )N
r_   )replacer   super__init__type_params)selfsig	signature	__class__s      rC   r   z!_TypeParameterListParser.__init__	  s5    KKb)//1	)% =?rB   c                   g }| j                         x}r|j                  |       dD ]@  \  }}|t        j                  |gk(  s|| j	                  t        j                  |g      z  } n |t        j
                  k(  r#|| j	                  t        j                        z  }nV|j                  t        j                  dgt        j                  dgt        j                  dg      r|j                          	 |S | j                         x}r|S )N))r   r   ){})rt   rv   :=ru   )	fetch_tokenr   tokenOPfetch_untilINDENTDEDENTmatchr   )r   tokenscurrentldelimrdelims        rC   fetch_type_param_specz._TypeParameterListParser.fetch_type_param_spec  s    ))++g+MM'""D 
uxx00d..&/ABBF

 ell*d..u||<<F]]3%((C588S/KJJL ))++g+ rB   c                r   | j                         x}r$|t        j                  k(  r|j                  j	                         }| j
                  r}| j
                  j                  t        j                  dgt        j                  dg      rA| j
                  t        j                  dgk(  rt        j                  }n!t        j                  }nt        j                  }t        j                  }t        j                  }| j                         }|r|j                  t        j                  dgt        j                  dg      r|t        j                  dgk(  r!| j                         }| j                  |      }| j                  r@| j                  t        j                  dgk(  r!| j                         }| j                  |      }|t        j                  k7  r.|t        j                  k7  rd|j                    d}t#        |      ||||f}| j$                  j'                  |       | j                         x}r#y y )Nrc   **r   r   z6type parameter bound or constraint is not allowed for z parameters)r   r   NAMEr   r   previousr   r   r   VAR_POSITIONALVAR_KEYWORDPOSITIONAL_OR_KEYWORDemptyr   _build_identifierr   descriptionr   r   r   )	r   r   tp_nametp_kindtp_ann
tp_defaultr   msg
type_params	            rC   r   z_TypeParameterListParser.parse"  s   ))++g+%**$!----/==T]]%8%8%((C588UYJZ%[}}37"+":":"+"7"7'==G'oo"+//
**,w}}ehh_uxxoN588S/1!%!;!;!=!%!7!7!?||3(G!%!;!;!=%)%;%;F%C
i===&IOOB["")"5"5!6kCC%c**%w
FC
  ''
3= ))++g+rB   c           
        ddl m}m fdfd}g }t        |      }|D ]  }|j	                  t
        j                  dgt
        j                  dgt
        j                  dg      sW|j	                  t
        j                  dgt
        j                  d	gg      }|j                  | j                  ||
              n|j                  |j                          t        t
        j                  dddd      }d} | ||||g            D ]B  \  }}}	| j                  ||
      }
|j                  |
       |j	                  t
        j                  dgt
        j                  d	g      xr |j	                  t
        j                  t
        j                  t
        j                  t
        j                  dgt
        j                  dgt
        j                  dg      xrp |	j	                  t
        j                  t
        j                  t
        j                  t
        j                  dgt
        j                  dgt
        j                  dg       }E dj                  |      j!                         S )Nr   )chainteec                J     |       \  }}t        |d        t        ||      S rx   )nextzip)iterableabr   s      rC   pairwisez<_TypeParameterListParser._build_identifier.<locals>.pairwiseF  s%    x=DAqDMq!9rB   c              3  T   K     |             D ]  \  \  }}\  }}|||f  y wrx   rA   )r   r   _zr   cr   s        rC   
triplewisez>_TypeParameterListParser._build_identifier.<locals>.triplewiseK  s7     #+HX,>#? B!QAgs   %(r   rt   r   rc   r   )nativer_   )rM   rM   z
<sentinel>Fr   rv   r   )	itertoolsr   r   iterr   r   r   r   _pformat_tokenr   r   	ENDMARKERr   NUMBERSTRINGjoinr   )r   r   r   r   identstokis_unpack_operatorstopr   afteridentr   r   s              @@rC   r   z*_TypeParameterListParser._build_identifierC  s   (	
	 "&v, 	%C99ehh_uxxo#O%(YY#D6@R%S"d11#>P1QRMM#))$	% U__b(HlK"(vd|)DE 	NCU''4F'GEMM%  %((C588T*:; IIejj%,,$xxo#3Q WEJJell%*XXsOehh_uxxQToWA 	 wwv$$&&rB   c                B   |r|j                   S |j                  t        j                  t        j                        ry|j                  t        j
                  dgt        j
                  dgt        j
                  dg      r|j                    dS |j                  t        j
                  dgt        j
                  dgt        j
                  dgt        j
                  d	gt        j
                  d
gt        j
                  dgt        j
                  dgt        j
                  dgt        j
                  dgt        j
                  dgt        j
                  dgt        j
                  dgt        j
                  dgt        j
                  dgt        j
                  dgt        j
                  dgt        j
                  dgt        j
                  dgt        j
                  dgt        j
                  dgt        j
                  dg      rd|j                    dS |j                   S )Nr_   r   ru   # r   rs   &^<>+-rc   r   @/z//%z<<z>>z>>>z<=z>=z==z!=)r   r   r   NEWLINEr   r   )r   r  r   s      rC   r   z'_TypeParameterListParser._pformat_tokenm  sn   9999U]]EOO499ehh_uxxo#Gii[?" 99XXsOehh_XXsOehh_uxxo#XXsOehh_uxxo$?OXXsOehh_uxx.>3XXtuxx.50AXXtuxx.40@588TBR
 syyk##yyrB   )r   r6   r   rP   )r   list[Token]r   rP   )r   r  r   r6   F)r  r   r   r:   r   r6   )	r=   r>   r?   r   r   r   r   r   __classcell__r   s   @rC   r   r     s#    ?"4B('T! !rB   r   c                   t        j                  |       }||d<   t        |       }|j                          |j                  D ]7  \  }}}}|t
        j                  t
        j                  hv rd}	t        |	      t        j                         }
|t
        j                  k(  r|
t        j                  dd      z  }
n,|t
        j                  k(  r|
t        j                  dd      z  }
|
t        j                  d|      z  }
|t
        j                  urt        ||      }|s|
t        j                   dd      z  }
|
t        j"                         z  }
t        j                  ddg| }|j%                  d      r|j'                  d      rp|j)                         }|j%                  d      r|j'                  d      r|
|z  }
n=|
t        j                   dd      z  }
|
|z  }
|
t        j                   dd      z  }
n|
|z  }
|t
        j                  urd|
t        j"                         z  }
|
t        j                  dd	      z  }
|
t        j"                         z  }
|
t+        j,                  d|d
gd      z  }
||
z  }: |S )z5Parse a list of type parameters according to PEP 695.multi_line_parameter_listzQpositional-only or keyword-only parameters are prohibited in type parameter listsr_   rc   r   r   r   r   r   default_valueFclassessupport_smartquotes)r   desc_type_parameter_listr   r   r   r   POSITIONAL_ONLYKEYWORD_ONLYr   desc_type_parameterr   desc_sig_operatorr   desc_sig_namer   r   r   r   rS   endswithr   r	   inline)tp_listrl   r  r   parserr   r   r   r   r   r   r   type_ann_exprtype_ann_texts                 rC   _parse_type_listr.    se   
 33G<K/HK+, &g.F
LLN282D2D /.':vy00)2H2HII<Cc""++-i...H..r377D	---H..r488D&&r733(*637JH11"c::DH++--D$222r @4>@M   %&//#*> - 4 4 6 ++C0]5K5KC5PM)D H99"cBBDM)DH99"cBBD%Y__,H++--DH..r377DH++--DELLZ*9):5:< <D 	t_/` rB   c           
        t        j                  |       }||d<   t        d| z        }d}|j                  j	                         D ]  }|j
                  |j                  k7  r=||j                  k(  r.|t        j                  ddt        j                  dd            z  }|j
                  |j                  k(  rI||j                  |j                  dfv r.|t        j                  ddt        j                  dd            z  }t        j                         }|j
                  |j                  k(  r=|t        j                  dd      z  }|t        j                  d|j                        z  }ny|j
                  |j                  k(  r=|t        j                  dd      z  }|t        j                  d|j                        z  }n#|t        j                  d|j                        z  }|j                  |j                   ur`t#        |j                  |      }|t        j$                  dd      z  }|t        j&                         z  }|t        j                  ddg| z  }|j(                  |j                   ur|j                  |j                   urH|t        j&                         z  }|t        j                  dd	      z  }|t        j&                         z  }n|t        j                  dd	      z  }|t+        j,                  d|j(                  d
gd      z  }||z  }|j
                  } |t.        j                  k(  r.|t        j                  ddt        j                  dd            z  }|S )z*Parse a list of arguments using AST parserr  z(%s)Nr_   r  rc   r   r   r   r  Fr  )r   desc_parameterlistr   
parametersvalueskindr#  desc_parameterr&  r$  r   r   r'  namer   r   r   r   r   r   defaultr	   r)  r   )	arglistrl   r  paramsr   	last_kindparamr   childrens	            rC   _parse_arglistr<    s    ((1F*CF&'
Vg-
.CI&&( $::...9@U@U3Uh--b"h6P6PQSUX6YZZF::+++	e>Y>Y>C>S>S>B>D 1D h--b"h6P6PQSUX6YZZF&&(::---H..r377DH**2uzz::DZZ5,,,H..r488DH**2uzz::DH**2uzz::D5;;.()9)93?HH11"c::DH++--DH**2r=H==D==+u{{2//11222s;;//11222s;;ELLU]]_<M5:< <D 	$JJ	I$L I---())"b(2L2LRQT2UVVMrB   c                   t        j                         }||d<   |g}	 |j                  d      D ]  }|j                         }dx}}|j	                  d      rX|j                  t        j                                |dxx   |d   z  cc<   |dd j                         }|j	                  d      rX|j	                  d	      r5|j                          |dd j                         }|j	                  d	      r5|j                  d	      rL|j                  d
      s;|dz  }|dd j                         }|j                  d	      r|j                  d
      s;|j                  d      r*|dz  }|dd j                         }|j                  d      r*|r6|dxx   t        j                  ddt        j                  ||            z  cc<   |r;|j                  t        j                                |dxx   |d   z  cc<   |dz  }|r;|s|j                          |dz  }|r t        |      dk7  rt        	 | |z  } y# t        $ r5 t        j                         }|t        j                  ||      z  }| |z  } Y yw xY w)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).
    r  ru   r   rt   rM   rK   Nrv   z[]r_   )r   r0  rT   r   rS   r   desc_optionalr   r(  r4  r'  len
IndexError)signoder7  r  	paramliststackargument	ends_open
ends_closes           rC   _pseudo_parse_arglistrH    sq    ++-I-FI)*%;E%c* 	 H~~'H%&&I
%%c*X3356b	U2Y&	#AB<--/ %%c* %%c*		#AB<--/ %%c* ##C(1B1B41Ha
#CR=..0 ##C(1B1B41H ##C(Q	#CR=..0 ##C( b	X44H228XFH H	X3356b	U2Y&	Q	  		a
 /	 4 u:?  	9   //1	X,,Wg>>	9s?   BH= 0AH= 6AH= :H= A4H= H= H= H= =;I;:I;c                       e Zd Zej                  ddddf	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d fdZej                  ddddf	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddZ xZS )PyXrefMixinNc	           
     Z   t         |   ||||||d d       }	t        |	t              r|J d|	d<   |j                  j                  d      |	d<   |j                  j                  d      |	d<   t        |      \  }
}}}||k7  r(|
|	d<   ||	d<   |	j                          |	 |||      z  }	|	S |j                  j                  ri|	j                  }|	j                          |j                  d      d	   } |d
|      }t        d
d
|d      t        d
d
g|ddig}|	j                  |       |	S )N)inlinerlocationTrW   r]   r^   rY   rU   rJ   rM   r_   r`   ra   rb   rc   )r   	make_xrefr   r   rf   rg   rZ   clearrh   ri   r;  rT   r   r   )r   rolenamedomainrk   	innernodecontnoderl   rL  rM  r   rY   rU   reftitler   r;  rn   textnodero   r   s                     rC   rN  zPyXrefMixin.make_xref;  sK    "8VV#,h#&t # E fl+?"?$(F=!"%//"5"5k"BF;!$!4!4Z!@F:.=f.E+GY!H$$+y!&/{#)Hh77  ==!??"LL-b1	$R33BHPZ[3BUXUQTUW	i(rB   c	                   d}	t        j                  |	      }
t        j                  |	|      }t        |xr |j	                         |k(        }d}g }t        d |      D ]w  }|rt        j                  |      }|s|
j                  |      r|j                  |xs	  |||             n'|j                  | j                  ||||||||             |dv svd}y |S )Nz>(\s*[\[\]\(\),](?:\s*o[rf]\s)?\s*|\s+o[rf]\s+|\s*\|\s*|\.\.\.)F)r   r   z~typing.LiteralT)recompilerT   r:   r   filterr	   rj   r   r   rN  )r   rP  rQ  rk   rR  rS  rl   rL  rM  delims	delims_resub_targetssplit_contnode
in_literalresults
sub_targets                   rC   
make_xrefszPyXrefMixin.make_xrefsd  s     SJJv&	hhvv.hF8??+<+FG
 {3 	"J ::j1Y__Z8xL9Z+LMt~~h
.73QY [ \ MM!
	" rB   )rP  r6   rQ  r6   rk   r6   rR  type[TextlikeNode]rS  Node | Nonerl   BuildEnvironment | NonerL  Inliner | NonerM  rc  r   r&   )rP  r6   rQ  r6   rk   r6   rR  rb  rS  rc  rl   rd  rL  re  rM  rc  r   r   )r=   r>   r?   r	   emphasisrN  ra  r  r  s   @rC   rJ  rJ  :  s     ). $'+"& $'' ' 	'
 &' ' %'  ' ' 
'\ ). $'+"& $     	 
 &    %       
 rB   rJ  c                      e Zd Zy)PyFieldNr=   r>   r?   rA   rB   rC   rh  rh        rB   rh  c                      e Zd Zy)PyGroupedFieldNri  rA   rB   rC   rl  rl    rj  rB   rl  c                      e Zd Zy)PyTypedFieldNri  rA   rB   rC   rn  rn    rj  rB   rn  c                  8   e Zd ZU dZej
                  ej
                  ej
                  ej
                  ej
                  ej
                  ej
                  ej
                  ej
                  ej                  ej                  ej                  dZded<    e	d e
d      ddd	d
       e	d e
d      dddd
       ed e
d      ddd
       ed e
d      dd       ed e
d      ddd      gZdZd(dZd)dZd*d Zd+d!Zd,d"Z	 	 	 	 d-d#Zd.d$Zd.d%Zd/d&Zy')0PyObjectz
    Description of a general Python object.

    :cvar allow_nesting: Class is an object that allows for nested namespaces
    :vartype allow_nesting: bool
    )no-indexno-index-entryno-contents-entryno-typesettingnoindexnoindexentrynocontentsentrysingle-line-parameter-listsingle-line-type-parameter-listr-   	canonicalr   r+   option_spec	parameter
Parameters)r:  r|  argrE  r.   kwargkwparamrR   )	paramtypetypeT)labelnamestyperolename	typenamescan_collapsevariable	Variables)varivarcvar)vartype
exceptionsRaisesexc)raisesraiser1   except)r  rP  r  r  returnvalueReturnsF)returnsr   )r  has_argr  
returntypezReturn type)rtype)r  r  r  bodyrolenamec                    g S )zTMay return a prefix to put before the object name in the
        signature.
        rA   r   r   s     rC   get_signature_prefixzPyObject.get_signature_prefix  s	     	rB   c                     y)zqMay return true if an empty argument list is to be generated even if
        the document contains none.
        FrA   r   s    rC   needs_arglistzPyObject.needs_arglist  s     rB   c           	     v   t         j                  |      }|t        |j                         \  }}}}}| j                  j                  d| j                  j                  j                  d            }	| j                  j                  j                  d      }
|
rWd}|r<||
k(  s|j                  |
dz         r#||z   }|t        |
      d j                  d      }n6|r|
dz   |z   |z   }n(|
dz   |z   }nd}|r|j                  d      }
||z   }nd}
|}|	|d<   |
|d	<   ||d
<   | j                  j                  j                  xs$ | j                  j                  j                  xs d}t        |      }|j                  d      }d| j                  vxr ||d   |d   z
  z
  |cxkD  xr dkD  nc }|j                  d      }d| j                  vxr ||d   |d   z
  z
  |cxkD  xr dkD  nc }| j!                  |      }|rEt#        |      t$        u rd| d}t'        |      |t)        j*                  t%        |      dg| z  }|r|t)        j,                  ||      z  }nB|	r@|r>| j                  j                  j.                  r|	dz   }|t)        j,                  ||      z  }|t)        j0                  ||      z  }|r	 |t3        || j                  |      z  }|r	 |t;        || j                  |      z  }n'| jC                         r|t)        jD                         z  }|r0tG        || j                        }|t)        jH                  |dg| z  }| j                  j                  d      }|rC|t)        j*                  d|z   dt)        jJ                         tM        jN                  |            z  }||fS # t4        $ r$}t6        j9                  d|||       Y d}~d}~ww xY w# t<        $ r t?        |||       Y t@        t        f$ r1}t6        j9                  d|||       t?        |||       Y d}~d}~ww xY w)aJ  Transform 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
        Nr-   r]   r^   FrJ   Tr_   rR   fullnamer      rx  rK      ry  z^Python directive method get_signature_prefix() must return a list of nodes. Return value was 'z'.z could not parse tp_list (%r): %srM  z could not parse arglist (%r): %sr   r  )(	py_sig_rer   
ValueErrorgroupsoptionsrg   rl   rf   rS   r@  lstriprstriprh   $python_maximum_signature_line_lengthmaximum_signature_line_lengthspanr  r  r6   	TypeErrorr   desc_annotationdesc_addnameadd_module_names	desc_namer.  	Exceptionloggerwarningr<  r   rH  NotImplementedErrorr  r0  r   desc_returnsr   r	   rj   )r   r   rB  mprefixr5  r*  r7  retannmodname	classname
add_moduler  max_lensig_lentp_list_spanr  arglist_spanmulti_line_type_parameter_list
sig_prefixr   nodetextr  r;  annos                            rC   handle_signaturezPyObject.handle_signature  s>    OOC 912.gw ,,""8TXX-A-A-E-Ek-RSHH((,,Z8	J6Y.!,,Y_=!D=I077< %s?V3d: %s?T1J"MM#.	!D=	#$&
88??GG hhooCC 	 c(vvay(< NLOl1o=>'MAM 	" vvay-T\\A NLOl1o=>'MAM 	'
 ..s3
J3&--7L<  n$x//JQjQQGx,,VV<<G(H(H}Hx,,Xx@@G8%%dD111+GTXX?]^^
 S>'488=VWW !!#86688(:Hx,,VRC(CCG||-x//d
B080G0G0I05

40@B BG C  1A7C(/  1 11  S
 &gw8QR'4 SA7C(/  1%gw8QRR	Ss6   <N1 O! 1	O:OO!P89P8&P33P8c                    d|vry|j                  d      }|d   }|r|g|j                  d      S t        |j                  d            S )Nr  rA   r-   rJ   )rg   rT   tuple)r   sig_noder  r  s       rC   _object_hierarchy_partsz PyObject._object_hierarchy_partsB  sS    X%,,x(J'2hnnS122,--rB   c                    d}t        |      )z2Return the text for the index entry of the object.z!must be implemented in subclasses)r  )r   r  r5  r   s       rC   get_index_textzPyObject.get_index_textM  s    1!#&&rB   c                   | j                   j                  d| j                  j                  j                  d            }|r|dz   nd|d   z   }t	        | j                  | j
                  j                  d|      }|d   j                  |       | j
                  j                  j                  |       t        t        | j                  j                  d            }|j                  || j                  ||       | j                   j                  d	      }|r |j                  || j                  |d
|       d| j                   vr9| j                  ||      }	|	r$| j                  d   j                  d|	|dd f       y y y )Nr-   r]   rJ   r_   r   idsrd   r  rz  T)r;   rM  rr  entriessingle)r  rg   rl   rf   r    statedocumentr   note_explicit_targetr   PythonDomain
get_domainnote_objectr9   r  	indexnode)
r   name_clsr   rB  r  r  r8   rQ  canonical_name	indextexts
             rC   add_target_and_indexzPyObject.add_target_and_indexR  sK   ,,""8TXX-A-A-E-Ek-RS%,GcM"C$((DJJ$7$7XFg&

009lDHH$7$7$=>8T\\7WM))+6~t||Wd(/  1 4<</++GX>Iy)00(IwPRTX1YZ  0rB   c                b   d}| j                   r4| j                   d   \  }}| j                  r|}n|r|j                  d      }|r\|| j                  j                  d<   | j                  r7| j                  j                  j                  dg       }|j                  |       d| j                  v r| j                  j                  j                  dg       }|j                  | j                  j                  j                  d             | j                  d   | j                  j                  d<   yy)	a  Handle 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`.
        NrM   rJ   r^   
py:classesr-   
py:modulesr]   )	r  allow_nestingr   rl   rf   
setdefaultr   r  rg   )r   r  r  name_prefixr   moduless         rC   before_contentzPyObject.before_contentg  s     ::
 '+jjn#X{!!!$**3//5DHH  ,!!((..99,Kv&t||#hh**55lBGGNN488//33K@A04X0FDHH  - $rB   c                D   | j                   j                  j                  dg       }| j                  r2t	        j
                  t              5  |j                          ddd       t        |      dkD  r|d   nd| j                   j                  d<   d| j                  v rv| j                   j                  j                  dg       }|r(|j                         | j                   j                  d<   y| j                   j                  j                  d       yy# 1 sw Y   xY w)	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  Nr   rM   r^   r-   r  r]   )
rl   rf   r  r  
contextlibsuppressrA  r   r@  r  )r   r   r  s      rC   after_contentzPyObject.after_content  s     ((&&11,C$$Z0  <?w<!;KGBK15 	Z(t||#hh**55lBGG4;KKM$$[1$$((5 $ s   DDc                   |j                  d      sy| j                  j                  j                  }|j                  j                  d      }|j
                  r|dv rd}nd}|d   ^ }}|j                  dk(  r|j                  d|      |z   S |j                  dk(  r||z   S |j                  d	k(  rd
j                  |||z   gz         S y)N
_toc_partsr_   r9   >   methodfunction()rQ  r  hideallrJ   )rg   rl   apprh   parentadd_function_parenthesestoc_object_entries_show_parentsr  )r   r  rh   r9   parensparentsr5  s          rC   _toc_entry_namezPyObject._toc_entry_name  s    ||L)$$//%%i0**w:P/PFF!,/$11X=<<
D1F::11V;&= 11U:88Gtf}o566rB   Nr   r6   r   zlist[nodes.Node]r   r:   r   r6   rB  r   r   tuple[str, str])r  r   r   ztuple[str, ...])r  r6   r5  r  r   r6   r  r  r   r6   rB  r   r   rP   r  )r  r   r   r6   )r=   r>   r?   __doc__r
   flag	unchangedr{  r@   rn  r   rl  r   rh  doc_field_typesr  r  r  r  r  r  r  r  r  r  rA   rB   rC   rp  rp    sI    OO$//'__$//??"%??&0oo+5??&&)) **K   	[,;")5J"&		(
 	Zq~2")\"&	( 	|1X;G$(	* 	m1Y<)	+Am$4e w	8O& Mv p	.'
[&4[9=[*GB60rB   rp  c                       e Zd ZU dZej
                  j                         Zded<   ej                  de	j                  i       d	dZd
dZ	 	 	 	 d fdZddZ xZS )
PyFunctionzDescription of a function.r+   r{  asyncc                v    d| j                   v r*t        j                  dd      t        j                         gS g S )Nr  r_   )r  r   r   r   r  s     rC   r  zPyFunction.get_signature_prefix  s;    dll"--b':++-/ / IrB   c                     yNTrA   r  s    rC   r  zPyFunction.needs_arglist      rB   c                   t         	|   |||       d| j                  vr| j                  j                  d| j                  j
                  j                  d            }|d   d   }|\  }}|r4t        d      ||fz  }| j                  d   j                  d||d	d f       y d
| d}| j                  d   j                  d||d	d f       y y )Nrr  r-   r]   r  r   %s() (in module %s)r  r  r_   zbuilt-in function; r  pair)	r   r  r  rg   rl   rf   r   r  r   )
r   r  r   rB  r  r8   r5  clstextr   s
            rC   r  zPyFunction.add_target_and_index  s    $XsG<4<</ll&&x1E1E1I1I+1VWGenQ'G ID#./4/Ay)00(D'2t1TU,TF"5y)00&$T1RS 0rB   c                     y)Nr_   rA   r   r  r  s      rC   r  zPyFunction.get_index_text  s    rB   r  r  r  r  r6   r  r  r   r6   )r=   r>   r?   r  rp  r{  copyr@   updater
   r  r  r  r  r  r  r  s   @rC   r  r    sb    $&22779K9 T&4T9=TrB   r  c                  8     e Zd ZdZd fdZd fdZddZ xZS )PyDecoratorFunctionzDescription of a decorator.c                .    d| _         t        | 	         S )Nzpy:functionr5  r   runr   r   s    rC   r  zPyDecoratorFunction.run  s    !	w{}rB   c                t    t         |   ||      }|j                  dt        j                  dd             |S Nr   r  r   r  insertr   r  r   r   rB  retr   s       rC   r  z$PyDecoratorFunction.handle_signature  4    g&sG4q(//S9:
rB   c                     yNFrA   r  s    rC   r  z!PyDecoratorFunction.needs_arglist      rB   r   r   r  r  r=   r>   r?   r  r  r  r  r  r  s   @rC   r  r    s    %

rB   r  c                       e Zd ZU dZej
                  j                         Zded<   ej                  e	j                  e	j                  d       d fdZddZ xZS )	
PyVariablezDescription of a variable.r+   r{  r  r   c                &   t         |   ||      \  }}| j                  j                  d      }|rXt	        || j
                        }|t        j                  |dt        j                  dd      t        j                         g| z  }| j                  j                  d      }|rh|t        j                  |dt        j                         t        j                  dd      t        j                         t        j                  |            z  }||fS Nr  r_   r   r   r   r   r  r  rg   r   rl   r   r  r   r   r	   rj   	r   r   rB  r  r  typr   r   r   s	           rC   r  zPyVariable.handle_signature  s     73CA&llv&+C:Kx//R080M0MbRU0V080G0G0IYLWY YG   )x//r080G0G0I080M0MbRU0V080G0G0I05

50A	C CG rB   c                L    |\  }}|rt        d      ||fz  S t        d      |z  S )N%s (in module %s)z%s (built-in variable))r   )r   r  r  r5  r
  s        rC   r  zPyVariable.get_index_text  s4    	c()T7O;;-.55rB   r  r  r=   r>   r?   r  rp  r{  r  r@   r  r
   r  r  r  r  r  s   @rC   r$  r$    sN    $&22779K9$$%% 
 (6rB   r$  c                      e Zd ZU dZej
                  j                         Zded<   ej                  de	j                  i       dZd	dZd
dZy)PyClasslikezO
    Description of a class-like object (classes, interfaces, exceptions).
    r+   r{  finalTc                8   d| j                   v rZt        j                  d      t        j                         t        j                  | j
                        t        j                         gS t        j                  | j
                        t        j                         gS )Nr0  )r  r	   rj   r   r   r9   r  s     rC   r  z PyClasslike.get_signature_prefix  so    dll"JJw')@)@)BJJt||,h.E.E.GI I JJt||,h.E.E.GHHrB   c                    | j                   dk(  r&|st        d      |d   z  S t        d      |d   |fz  S | j                   dk(  r|d   S y)NrR   z%s (built-in class)r   z%s (class in %s)r1   r_   )r9   r   r  s      rC   r  zPyClasslike.get_index_text#  sY    <<7"./(1+=='(HQK+AAA\\[(A;rB   Nr  r  )r=   r>   r?   r  rp  r{  r  r@   r  r
   r  r  r  r  rA   rB   rC   r/  r/    sP     '22779K9  MIrB   r/  c                      e Zd ZU dZej
                  j                         Zded<   ej                  e	j                  e	j                  e	j                  e	j                  e	j                  d       d	dZd
dZddZy)PyMethodzDescription of a method.r+   r{  )abstractmethodr  classmethodr0  staticmethodc                     yr  rA   r  s    rC   r  zPyMethod.needs_arglist:  r  rB   c                \   g }d| j                   v rG|j                  t        j                  d             |j                  t	        j
                                d| j                   v rG|j                  t        j                  d             |j                  t	        j
                                d| j                   v rG|j                  t        j                  d             |j                  t	        j
                                d| j                   v rG|j                  t        j                  d             |j                  t	        j
                                d| j                   v rG|j                  t        j                  d             |j                  t	        j
                                |S )Nr0  r5  abstractr  r6  r7  staticr  r   r	   rj   r   r   r   r   r  s      rC   r  zPyMethod.get_signature_prefix=  s   #%dll"MM%**W-.MM(1134t||+MM%**Z01MM(1134dll"MM%**W-.MM(1134DLL(MM%**]34MM(1134T\\)MM%**X./MM(1134rB   c                   |\  }}	 |j                  dd      \  }}|r3| j                  j                  j                  rdj	                  ||g      }d| j                  v rt        d      ||fz  S d| j                  v rt        d      ||fz  S t        d	      ||fz  S # t
        $ r |rt        d      ||fz  cY S d|z  cY S w xY w)
NrJ   rK   r  z%s()r6  z%s() (%s class method)r7  z%s() (%s static method)z%s() (%s method))rsplitrl   rh   r  r  r  r   r  )r   r  r  r5  r
  clsnamemethnames          rC   r  zPyMethod.get_index_textP  s    	c	% $C 3GX488??;;((GW#56 DLL(-.(G1DDDt||+./8W2EEE'(Hg+>>>  	%./4/AA}$		%s   A
B C:CCNr  r  r  )r=   r>   r?   r  rp  r{  r  r@   r  r
   r  r  r  r  rA   rB   rC   r4  r4  .  sc    "&22779K9$//!" &?rB   r4  c                  d     e Zd ZU dZej
                  j                         Zded<   d fdZ xZ	S )PyClassMethodzDescription of a classmethod.r+   r{  c                L    d| _         d| j                  d<   t        |          S )N	py:methodTr6  r5  r  r   r  r  s    rC   r  zPyClassMethod.runi  s$    	&*]#w{}rB   r!  
r=   r>   r?   r  rp  r{  r  r@   r  r  r  s   @rC   rC  rC  d  s)    '&22779K9 rB   rC  c                  d     e Zd ZU dZej
                  j                         Zded<   d fdZ xZ	S )PyStaticMethodzDescription of a staticmethod.r+   r{  c                L    d| _         d| j                  d<   t        |          S )NrE  Tr7  rF  r  s    rC   r  zPyStaticMethod.runu  s$    	'+^$w{}rB   r!  rG  r  s   @rC   rI  rI  p  s)    (&22779K9 rB   rI  c                  8     e Zd ZdZd fdZd fdZddZ xZS )PyDecoratorMethodz!Description of a decoratormethod.c                .    d| _         t        | 	         S )NrE  r  r  s    rC   r  zPyDecoratorMethod.run  s    	w{}rB   c                t    t         |   ||      }|j                  dt        j                  dd             |S r  r  r  s       rC   r  z"PyDecoratorMethod.handle_signature  r  rB   c                     yr  rA   r  s    rC   r  zPyDecoratorMethod.needs_arglist  r   rB   r!  r  r  r"  r  s   @rC   rL  rL  |  s    +
rB   rL  c                       e Zd ZU dZej
                  j                         Zded<   ej                  e	j                  e	j                  d       d fdZddZ xZS )	PyAttributeDescription of an attribute.r+   r{  r%  c                &   t         |   ||      \  }}| j                  j                  d      }|rXt	        || j
                        }|t        j                  |dt        j                  dd      t        j                         g| z  }| j                  j                  d      }|rh|t        j                  |dt        j                         t        j                  dd      t        j                         t        j                  |            z  }||fS r'  r(  r)  s	           rC   r  zPyAttribute.handle_signature  s     73CA&llv&+C:Kx//R080M0MbRU0V080G0G0I> 2=> >G
   )x//r080G0G0I080M0MbRU0V080G0G0I05

50A	C CG rB   c                   |\  }}	 |j                  dd      \  }}|r3| j                  j                  j                  rdj	                  ||g      }t        d      ||fz  S # t
        $ r |rt        d      ||fz  cY S |cY S w xY w)NrJ   rK   r,  z%s (%s attribute)r?  rl   rh   r  r  r  r   r   r  r  r5  r
  r@  attrnames          rC   r  zPyAttribute.get_index_text  s    	c	 $C 3GX488??;;((GW#56 $%7(;;;  	,-w??		   A
A! !B>BBr  r  r-  r  s   @rC   rQ  rQ    sN    &&22779K9$$%% 
 *<rB   rQ  c                       e Zd ZdZej
                  j                         Zej                  ej                  ej                  ej                  d       d fdZddZddZ xZS )	
PyPropertyrR  )r5  r6  r  c           	        t         |   ||      \  }}| j                  j                  d      }|rXt	        || j
                        }|t        j                  |dt        j                  dd      t        j                         g| z  }||fS )Nr  r_   r   )
r   r  r  rg   r   rl   r   r  r   r   )r   r   rB  r  r  r*  r   r   s          rC   r  zPyProperty.handle_signature  s     73CA&llv&+C:Kx//R080M0MbRU0V080G0G0I> 2=> >G
 rB   c                   g }d| j                   v rG|j                  t        j                  d             |j                  t	        j
                                d| j                   v rG|j                  t        j                  d             |j                  t	        j
                                |j                  t        j                  d             |j                  t	        j
                                |S )Nr5  r:  r6  rR   propertyr<  r=  s      rC   r  zPyProperty.get_signature_prefix  s    #%t||+MM%**Z01MM(1134DLL(MM%**W-.MM(1134ejj,-h--/0rB   c                   |\  }}	 |j                  dd      \  }}|r3| j                  j                  j                  rdj	                  ||g      }t        d      ||fz  S # t
        $ r |rt        d      ||fz  cY S |cY S w xY w)NrJ   rK   r,  z%s (%s property)rU  rV  s          rC   r  zPyProperty.get_index_text  s    	c	 $C 3GX488??;;((GW#56 #$'':::  	,-w??		rX  r  r  r  )r=   r>   r?   r  rp  r{  r  r  r
   r  r  r  r  r  r  r  s   @rC   rZ  rZ    sS    &&&++-K$//!$$  ;rB   rZ  c            	          e Zd ZU dZdZdZdZdZd d ej                  ej                  ej                  ej                  ej                  ej                  dZ
d	ed
<   ddZy)PyModulez8
    Directive to mark description of a new module.
    TrK   r   Fc                    | S rx   rA   xs    rC   <lambda>zPyModule.<lambda>      a rB   c                    | S rx   rA   rb  s    rC   rd  zPyModule.<lambda>  re  rB   )rG   rF   rq  rs  rt  ru  rw  rH   r+   r{  c           	     H   t        t        | j                  j                  d            }| j                  d   j                         }d| j                  v xs d| j                  v }|| j                  j                  d<   t        j                         }| j                  j                  |_        t        | j                  | j                  || j                         g }|s)t        | j                  | j                  j                  d|      }t        j                   dd|gd	      }| j#                  |       | j                  j                  j%                  |       |j'                  ||| j                  j)                  d
d      | j                  j)                  dd      d| j                  v        |j+                  |d||       d| }t-        j.                  d||dd fg      }	|j1                  |	       |j1                  |       |j3                  |j4                         |S )Nrd   r   rq  ru  r]   r-   r_   T)r  ismodrF   rG   rH   r  zmodule; r	  )r  )r   r  rl   r  	argumentsr   r  rf   r	   sectionr  r  r"   contentcontent_offsetr    rk   set_source_infor  note_modulerg   r  r   indexr   r   r;  )
r   rQ  r  no_indexcontent_noder  r8   rk   r  inodes
             rC   r  zPyModule.run   s   lDHH$7$7$=>..#))+-Jdll1J,3[) % $

 3 3 T\\<I\I\]dhh

(;(;XwOG\\"bwitDF  (JJ44V<w&#||//
B?#||//
B?+t||;	=
 w'FK #7),INNVYT,R+STEJJuJJv

<(()
rB   Nr!  )r=   r>   r?   r  has_contentrequired_argumentsoptional_argumentsfinal_argument_whitespacer
   r  r{  r@   r  rA   rB   rC   r`  r`    sc     K %OO'__$//??%?? oo	K 	#rB   r`  c                  8    e Zd ZU dZdZdZdZdZi Zde	d<   d	dZ
y)
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.
    FrK   r   r+   r{  c                    | j                   d   j                         }|dk(  r(| j                  j                  j	                  dd        g S || j                  j                  d<   g S )Nr   rP   r]   )ri  r   rl   rf   r   )r   r  s     rC   r  zPyCurrentModule.run2  s]    ..#))+fHH  $$[$7 	 18DHH  -	rB   Nr!  )r=   r>   r?   r  rs  rt  ru  rv  r{  r@   r  rA   rB   rC   rx  rx  &  s/    
 K % K rB   rx  c                  $    e Zd Z	 	 	 	 	 	 	 	 ddZy)
PyXRefRolec                D   |j                   j                  d      |d<   |j                   j                  d      |d<   |sM|j                  d      }|j                  d      }|dd dk(  r#|dd  }|j                  d      }|dk7  r||dz   d  }|dd dk(  r
|dd  }d|d	<   ||fS )
Nr]   r^   rJ   rL   r   rK   rM   TrW   )rf   rg   r  rfind)r   rl   refnodehas_explicit_titlerX   rk   dots          rC   process_linkzPyXRefRole.process_link<  s    "22;?!oo11*=
!LL%E]]3'F QqzS ab	kk#&"9!#'(OE !A;#ABZF%)GM"f}rB   N)rl   r*   r~  r%   r  r:   rX   r6   rk   r6   r   r  )r=   r>   r?   r  rA   rB   rC   r{  r{  ;  s'    )-69CFKZrB   r{  c                x   |dk7  ry|D ]  }t        |t        j                        st        t        t        j
                     |      }t        |      D ]c  }t        t        j                  |d         j                         j                         }|dk(  s|j                  d      sS|j                  |       e  y)z+Filter ``:meta:`` field from its docstring.rd   Nr   metazmeta )r   r	   
field_listr   listfieldreversed
field_bodyr   r   rS   remove)r  rQ  r9   rk  r   fieldsr  
field_names           rC   filter_meta_fieldsr  R  s    ~ 'dE,,-$u{{+T2F!&) '!%"2"2E!H=DDFLLN
':+@+@+IKK&'	'rB   c                  @    e Zd ZdZdZ ed      Z ed      Zd	 ddZy)	PythonModuleIndexz<
    Index subclass to provide the Python module index.
    modindexzPython Module Indexr  Nc                   i }| j                   j                  j                  d   }t        |t        d      }t        | j                   j
                  d   j                         d       }d}d}|D ]&  \  }\  }}	}
}}|r||vr|D ]%  }|j                  |      s|t	        |      d  }|} n d}|s|d}}|j                  |d   j                         g       }|j                  d	      d   }||k7  rj||k(  r.|r`|d
   }t        |d   d|d   |d   |d   |d   |d         |d
<   n4|j                  |      s#|j                  t        ||z   dddddd             d}n|dz  }d}|rt        d      nd}|j                  t        ||z   |||	|||
             |}) t	        |      |z
  |k  }t        |j                               }||fS )Nmodindex_common_prefixT)keyreverser  c                (    | d   j                         S )Nr   )lowerrb  s    rC   rd  z,PythonModuleIndex.generate.<locals>.<lambda>r  s    qtzz| rB   )r  r_   r   rJ   rM   rK      r  r        
Deprecated)rQ  rl   rh   sortedr@  dataitemsrS   r  r  rT   r   r   r   )r   docnamesrk  ignoresr  prev_modnamenum_toplevelsr  r7   r8   rF   	platformsrH   ignorestrippedr  packagelastsubtype	qualifiercollapsesorted_contents                         rC   generatezPythonModuleIndex.generatej  s   /1![[__334LMc48)))4::<35 LS &	#HGHgw)ZG83! %%f-%c&kl3G%H	  $,b(()9)9);R@GmmC(+G'!7*&r{&0a!T!Wd1g15a$q'47'L%009NN:h.@!RRQSUW#XY"+5,2INN:h&8'7&-y)XO P"LM&	#V w<-/-?  0x''rB   rx   )r  zIterable[str] | Noner   z/tuple[list[tuple[str, list[IndexEntry]]], bool])	r=   r>   r?   r  r5  r   	localnamern   r  rA   rB   rC   r  r  a  s/     D'(I)I<(E<(rB   r  c                     e Zd ZU dZdZdZ e ed      dd       e ed      dd       e ed      dd	d       e ed
      d	dd       e ed      dd       e ed      dd       e ed      dd       e ed      dd       e ed      ddd       e ed      dd      d
Zde	d<   e
eeeeeeeeeeeedZ e        e        ed       e        e        e        ed       e        e       d	Zi i dZde	d<   egZed,d       Z	 d-	 	 	 	 	 d.d!Zed/d"       Z	 	 	 	 	 	 d0d#Z d1d$Z!d2d%Z"	 d3	 	 	 	 	 	 	 d4d&Z#	 	 	 	 	 	 	 	 	 	 d5d'Z$	 	 	 	 	 	 	 	 d6d(Z%	 	 	 	 d7d)Z&d8d*Z'd9d+Z(y ):r  zPython language domain.rd   Pythonr  funcrQ   r  rR   r  r1   r  methzclass methodzstatic method	attributer   r]  _propr-   mod)
r  r  rR   r1   r  r6  r7  r  r]  r-   zdict[str, ObjType]object_types)r  r  rR   r1   r  r6  r7  r  r]  r-   currentmodule	decoratordecoratormethodT)
fix_parens)	r  r  r  rR   constr   r  r  rQ   )objectsr  z dict[str, dict[str, tuple[Any]]]initial_datac                :    | j                   j                  di       S )Nr  r  r  r  s    rC   r  zPythonDomain.objects      yy##Ir22rB   Nc                8   || j                   v r]| j                   |   }|j                  r|du rn=|j                  du r|ryt        j                  t	        d      ||j
                  |       t        | j                  j
                  |||      | j                   |<   y)zQNote a python object for cross reference.

        .. versionadded:: 2.1
        FNzXduplicate object description of %s, other instance in %s, use :no-index: for one of themr  )r  r;   r  r  r   r7   r5   rl   )r   r5  r9   r8   r;   rM  others          rC   r  zPythonDomain.note_object  s     4<<LL&E}}E!1%'G r #Y  Z#U]]X  G ))9)97GWUTrB   c                :    | j                   j                  di       S )Nr  r  r  s    rC   r  zPythonDomain.modules  r  rB   c                d    t        | j                  j                  ||||      | j                  |<   y)zQNote a python module for cross reference.

        .. versionadded:: 2.1
        N)rE   rl   r7   r  )r   r5  r8   rF   rG   rH   s         rC   rn  zPythonDomain.note_module  s-     ))9)97)18ZITrB   c                $   t        | j                  j                               D ]"  \  }}|j                  |k(  s| j                  |= $ t        | j                  j                               D ]"  \  }}|j                  |k(  s| j                  |= $ y rx   )r  r  r  r7   r  )r   r7   r  rQ   r  r  s         rC   	clear_doczPythonDomain.clear_doc  s~    !$,,"4"4"67 	+MHc{{g%LL*	+ !!3!3!56 	*LGS{{g%LL)	*rB   c                    |d   j                         D ]#  \  }}|j                  |v s|| j                  |<   % |d   j                         D ]#  \  }}|j                  |v s|| j                  |<   % y )Nr  r  )r  r7   r  r  )r   r  	otherdatar  rQ   r  r  s          rC   merge_domaindatazPythonDomain.merge_domaindata
  sz    &y1779 	-MHc{{h&),X&	- &i0668 	,LGS{{h&(+W%	,rB   c                   |dd dk(  r|dd }|sg S g }d}|dk(  r3|t        | j                        }	n| j                  |      }	|	|r;|r9|dz   |z   dz   |z   }
|
| j                  v r| j                  |
   j                  |	v r|
}|sI|r?|dz   |z   | j                  v r+| j                  |dz   |z      j                  |	v r
|dz   |z   }n|| j                  v r| j                  |   j                  |	v r|}nd|z   }| j                  D cg c]?  }|j                  |      r,| j                  |   j                  |	v r|| j                  |   fA }}n|| j                  v r|}nq|dk(  rg S |r|dz   |z   | j                  v r	|dz   |z   }nK|r|dz   |z   | j                  v r	|dz   |z   }n,|r*|r(|dz   |z   dz   |z   | j                  v r|dz   |z   dz   |z   }| |j                  || j                  |   f       |S c c}w )zFind a Python object for "name", perhaps using the given module
        and/or classname.  Returns a list of (name, object entry) tuples.
        r>  Nr  rK   rJ   r  )r  r  objtypes_for_roler  r9   r(  r   )r   rl   r  r  r5  r  
searchmodematchesnewnameobjtypesr  
searchnameonames                rC   find_objzPythonDomain.find_obj  sE    99DI13?|-1$2C2C-D11$7#y&}y83>EH4<</DLL4J4R4RV^4^"*7S=4#74<<#G||GcMD$89AAXM")C-$"6-$,,t2D2L2LPX2X"& &)4Z
MQ\\ #LE&+nnZ&@#'<<#6#>#>(#J %*4<<+>#? #L #L
 t||#	y35E#c/D0Ws]T1T\\A!C-$.YcMI-3d:dllJ!C-)3c9D@NNGT\\'%:;<'#Ls   AG5c                   |j                  d      }|j                  d      }	|j                  d      rdnd}
| j                  |||	|||
      }|s|dk(  r| j                  |||	|d|
      }|s|dk(  r| j                  |||	|d|
      }|sy t        |      dkD  rj|D cg c]  }|d   j                  r| }}t        |      dk(  r|}n:t
        j                  t        d	      |d
j                  d |D              dd|       |d   \  }}|d   dk(  r| j                  ||||      S t        |d      }|r|j                  }n|g}t        |||d   |d   ||      S c c}w )Nr]   r^   rW   rK   r   r   r  r  z5more than one target found for cross-reference %r: %sz, c              3  &   K   | ]	  }|d      yw)r   NrA   )ry   r   s     rC   r|   z,PythonDomain.resolve_xref.<locals>.<genexpr>i  s     0Oeq0Os   refpython)r  r  rM  r  r-   r`   )rg   hasattrr  r@  r;   r  r  r   r  _make_module_refnoder   r;  r!   )r   rl   fromdocnamebuilderr  rk   r   rS  r  r@  r  r  r  
canonicalsr5  rQ   rk  r;  s                     rC   resolve_xrefzPythonDomain.resolve_xrefK  s    ((;'((:&,,}5Q1
--Wgv $j2 46> mmC'66:VG46> mmC'67JWG\A%,AAaDLL!AJA:!#$r"YZ%tyy0Ow0O'O$)8d  L AJ	cq6X,,Wk4RR 2$
CG"++ %:c!fc!fhPTUU) Bs   E2Ec                   |j                  d      }|j                  d      }g }	| j                  ||||d d      }
t        |
      dkD  }|
D ]  \  }}|r|j                  r|d   dk(  r&|	j	                  d| j                  ||||      f       Ct        |d      }|r|j                  }n|g}d| j                  |d         z   }|	j	                  |t        |||d	   |d   ||      f        |	S )
Nr]   r^   rK   r  r-   zpy:modr`   zpy:r   )
rg   r  r@  r;   r   r  r   r;  role_for_objtyper!   )r   rl   r  r  rk   r   rS  r  r@  r_  r  multiple_matchesr5  rQ   rk  r;  roles                    rC   resolve_any_xrefzPythonDomain.resolve_any_xrefz  s"    ((;'((:&-/ --WgvtQGw<!+  	EID#CKK1v! $ 9 9';:>!J K L
 6dJG&//H !)zHt44SV<<l7KQQTUVQW3;T'C  D E)	E, rB   c                   | j                   |   }|}|j                  r|d|j                  z   z  }|j                  r|t        d      z  }|j                  r|d|j                  z   dz   z  }t        |||j                  |j                  ||      S )Nz: z (deprecated)z (r   )r  rF   rH   r   rG   r!   r7   r8   )r   r  r  r5  rS  r-   rX   s          rC   r  z!PythonDomain._make_module_refnode  s     d#??TFOO++EQ''E??TFOO+c11EG[&..&..$e- 	-rB   c              #    K   | j                   j                         D ]#  \  }}||d|j                  |j                  df % | j                  j                         D ]r  \  }}|j
                  dk7  s|j                  r)|||j
                  |j                  |j                  df K|||j
                  |j                  |j                  df t y w)Nr-   r   rM   rK   )r  r  r7   r8   r  r9   r;   )r   r  r  refnamerQ   s        rC   get_objectszPythonDomain.get_objects  s      LL..0 	LLGSGXs{{CKKKK	L LL..0 	WLGS{{h&;;"GS[[#++s{{TVWW"GS[[#++s{{TUVV	Ws   A0C3A Cc                    |j                  d      }|j                  d      }|j                  d      }|y dj                  t        d |||g            S )Nr]   r^   rU   rJ   )rg   r  rY  )r   r   r  r@  rk   s        rC   get_full_qualified_namez$PythonDomain.get_full_qualified_name  sQ    ((;'((:&+&>88F4'7F)CDEErB   )r   zdict[str, ObjectEntry])FN)r5  r6   r9   r6   r8   r6   r;   r:   rM  r   r   rP   )r   zdict[str, ModuleEntry])r5  r6   r8   r6   rF   r6   rG   r6   rH   r:   r   rP   )r7   r6   r   rP   )r  z	list[str]r  dict[str, Any]r   rP   )r   )rl   r*   r  r6   r  r6   r5  r6   r  
str | Noner  r   r   zlist[tuple[str, ObjectEntry]])rl   r*   r  r6   r  r)   r  r6   rk   r6   r   r   rS  r%   r   Element | None)rl   r*   r  r6   r  r)   rk   r6   r   r   rS  r%   r   zlist[tuple[str, Element]])
r  r)   r  r6   r5  r6   rS  r&   r   r%   )r   z-Iterator[tuple[str, str, str, str, str, int]])r   r%   r   r  ))r=   r>   r?   r  r5  r  r   r   r  r@   r  r$  r/  r4  rC  rI  rQ  rZ  r`  rx  r  rL  r
   r{  rolesr  r  indicesr]  r  r  r  rn  r  r  r  r  r  r  r  r  rA   rB   rC   r  r    sw   !DE*FEB&	FEB'
GUEJ+E7EJ(FEB. 1FEB/ 2FEB+FEB*FGUK(E5A(L$  &%&&#()&%#*.,J  t,t,
E 6L2 
 	G 3 3 <@V!V58VDHV* 3 3I!I/3I8<I*, AB66",6:=636p-V-V(+-V3?-VKR-V(-V^!!$!,8!DK!7!F-'+-07-	WFrB   r  c                0   d
d}|j                  d      dk7  ry|j                  d      dv r|j                  d      dk(  r|S |j                  d      d	v rA|j                  d      }t        j                  t        t        |d            r|S  ||      r|S y)z1Do not emit nitpicky warnings for built-in types.c                r    | j                  d      r| j                  dd      d   } | t        j                  v S )NrN   rJ   rK   )rS   rT   typing__all__)ss    rC   istypingz"builtin_resolver.<locals>.istyping  s1    <<	"Q"AFNN""rB   re   rd   NrY   )rR   rQ   rU   rP   )rR   rQ   r  )r  r6   r   r:   )rg   inspectisclassr   builtins)r  rl   r   rS  r  rU   s         rC   builtin_resolverr    s    # xx$	)	 0	0TXXk5Jf5T	)	 7	7HH[)	??78Y=>OIOrB   c                :   | j                  d       | j                  t               | j                  ddd       | j                  dd dt        d h       | j                  ddd       | j                  dt               | j                  d	t        d
       dddddS )Nzsphinx.directivesri   Frl   r  )typesr   zobject-description-transformzmissing-referencei  )priorityr3   r  T)versionenv_versionparallel_read_safeparallel_write_safe)setup_extension
add_domainr  add_config_valuer   connectr  r  )r  s    rC   setupr    s    +,NN< <eUK?u #T{  ,=ueLKK.0BCKK#%5KD "#	 rB   r  )rU   r6   rV   r:   r   ztuple[str, str, str, bool])rk   r6   rl   r*   rV   r:   r   zaddnodes.pending_xref)r   r6   rl   r*   r   r   )r*  r6   rl   r*   r  r:   r   z!addnodes.desc_type_parameter_list)r7  r6   rl   r*   r  r:   r   zaddnodes.desc_parameterlist)rB  r   r7  r6   r  r:   r   rP   )
r  r(   rQ  r6   r9   r6   rk  r%   r   rP   )
r  r(   rl   r*   r   r   rS  r%   r   r  )r  r(   r   r  )qr  
__future__r   r   r  r  r  rW  r   r  r   r   r   r   r   docutilsr	   docutils.parsers.rstr
   sphinxr   sphinx.addnodesr   r   r   sphinx.directivesr   sphinx.domainsr   r   r   r   sphinx.localer   r   sphinx.pycode.parserr   r   sphinx.rolesr   sphinx.utilr   sphinx.util.docfieldsr   r   r   sphinx.util.docutilsr   sphinx.util.inspectr   sphinx.util.nodesr   r    r!   r"   collections.abcr#   r$   docutils.nodesr%   r&   docutils.parsers.rst.statesr'   sphinx.applicationr(   sphinx.buildersr)   sphinx.environmentr*   sphinx.util.typingr+   r,   	getLoggerr=   r  rX  VERBOSEr  pairindextypesr5   rE   rZ   rp   r   r   r.  r<  rH  rJ  rh  rl  rn  r  r6   rp  r  r  r$  r/  r4  rC  rI  rL  rQ  rZ  r`  rx  r{  r  r  r  r  r  rA   rB   rC   <module>r     s    " 
    	    7 7  +  P P / = =  6 !  A A 0 2  2,3)'3;			8	$ BJJ zz	 "* * 2328 */;"&;3H;4y/xF~ FV ',;;';#; ';~ LQ22'2DH2 2l NS11&)1FJ1	1lJ JZ	k5 		[, 		;
 	^ sCx1 ^B	# #L* ""6 "6J( <3?x 3?l	H 		X 	  *<( *<Z0; 0;f7 7to * .'E( E(PTF6 TFn'3:?M2rB   