o
    N i\[  ã                   @  s0  d dl m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	 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mZ d d
lmZ erfd dlmZmZ d dlmZmZ d dl m!Z! d2d3dd„Z"ddœd4dd„Z#d5d d!„Z$G d"d#„ d#eƒZ%	d2d6d'd(„Z&	d2d7d+d,„Z'	d2d8d0d1„Z(dS )9é    )ÚannotationsN)Údeque)Ú	Parameter)ÚTYPE_CHECKINGÚAny)Únodes)Úaddnodes)Údesc_signatureÚpending_xrefÚpending_xref_condition)ÚTokenÚTokenProcessor)Úsignature_from_str)ÚIterableÚIterator)ÚElementÚNode)ÚBuildEnvironmentFÚ	reftargetÚstrÚsuppress_prefixÚboolÚreturnútuple[str, str, str, bool]c                 C  s¢   d}|   d¡r| dd… } | }d}n+|   d¡r%| dd… } |  d¡d }n|r/|  d¡d }n|   d¡r;| d	d… }n| }| d
ksF|   d¡rId}nd}|| ||fS )zLParse a type string and return (reftype, reftarget, title, refspecific flag)FÚ.é   NTú~éÿÿÿÿztyping.é   ÚNoneÚobjÚclass)Ú
startswithÚsplit)r   r   ÚrefspecificÚtitleÚreftype© r'   úV/home/ubuntu/.local/lib/python3.10/site-packages/sphinx/domains/python/_annotations.pyÚparse_reftarget   s"   


r)   ©r   ÚtargetÚenvr   úaddnodes.pending_xrefc          	      C  s–   |r|j  d¡|j  d¡dœ}ni }t| |ƒ\}} }}|jjr5| d¡d }td|ddtd|d	dg}nt |¡g}t	dg|¢R d
|| |dœ|¤ŽS )z0Convert a type string to a cross reference node.ú	py:moduleúpy:class)r.   r/   r   r   Ú Úresolved)Ú	conditionÚ*Úpy)Ú	refdomainr&   r   r$   )
Úref_contextÚgetr)   ÚconfigÚ!python_use_unqualified_type_namesr#   r   r   ÚTextr
   )	r+   r,   r   Úkwargsr&   r%   r$   Ú	shortnameÚ	contnodesr'   r'   r(   Útype_to_xref5   s$   

ÿÿþþr>   Ú
annotationú
list[Node]c                   s  |j j‰d‡ ‡‡fdd„‰d‡fdd	„‰ z^tj| d
d}g }ˆ|ƒD ]M}t|tjƒr2| |d ¡ q"t|tjƒrj| 	¡ rj|r_t|d t
jƒr_|d  ¡ dkr_| ¡  | tt|ƒ|d
d¡ q"| tt|ƒ|ƒ¡ q"| |¡ q"|W S  ty   t| |ƒg Y S w )zParse type annotation.Únodeúast.ASTr   r@   c           	        s´  t | tjƒrt ˆ| jƒd › d| j› ¡gS t | tjƒr4ˆ| jƒ}| 	ˆ| j
ƒ¡ | 	ˆ| jƒ¡ |S t | tjƒrGt ¡ t dd¡t ¡ gS t | tjƒr’| jtu rYt dd¡gS t | jtƒrit dt| jƒ¡gS t | jtƒryt dt| jƒ¡gS t | jtƒr‰t dt| jƒ¡gS t t| jƒ¡gS t | tjƒrˆ| jƒS t | tjƒrªt dd¡gS t | tjƒr·t dd¡gS t | tjƒr÷t dd¡g}| jrì| jD ]}| 	ˆ|ƒ¡ | t dd	¡¡ | t ¡ ¡ qÊ| ¡  | ¡  | t dd
¡¡ |S t | tj ƒrt! "t#j$‡fdd„| j%D ƒg ¡S t | tj&ƒrt | j'¡gS t | tj(ƒrŠt)| jddƒdv r1ˆ | ƒS ˆrBt)| jddƒdkrBˆ | ƒS ˆ| jƒ}| t dd¡¡ | 	ˆ| j*ƒ¡ | t dd
¡¡ |d dv rˆt+|dd … ddD ]\}}t |tjƒr†t ,dd|¡||< qr|S t | tj-ƒr›ˆ| j
ƒˆ| j.ƒ S t | tj/ƒrÞ| jrÐg }| jD ]}| 	ˆ|ƒ¡ | t dd	¡¡ | t ¡ ¡ q«| ¡  | ¡  |S t dd¡t dd¡g}|S t | tj0ƒrQg }| j1D ]}|ˆ|ƒ7 }| t dd	¡¡ | t ¡ ¡ qê| j2D ].}| t 3|j4|j4¡¡ | t 5dd¡¡ |ˆ|jƒ7 }| t dd	¡¡ | t ¡ ¡ qg ˆ| j6ƒ¢t dd¡‘|d d… ¢t dd¡‘}|S d| › }t7|ƒ‚)Nr   r   r0   ú|z...r   ú-ú[ú,ú]c                 3  s    | ]}ˆ |ƒV  qd S )Nr'   )Ú.0Úe©Úunparser'   r(   Ú	<genexpr>   s   € z5_parse_annotation.<locals>.unparse.<locals>.<genexpr>Úid>   ÚUnionÚOptionalÚLiteral)rP   ztyping.Literalr   )Ústartú(ú)ú=éþÿÿÿzunsupported syntax: )8Ú
isinstanceÚastÚ	Attributer   r:   ÚvalueÚattrÚBinOpÚleftÚextendÚopÚrightÚBitOrr   Údesc_sig_spaceÚdesc_sig_punctuationÚConstantÚEllipsisr   Údesc_sig_keywordÚreprÚintÚdesc_sig_literal_numberr   Údesc_sig_literal_stringÚExprÚInvertÚUSubÚListÚeltsÚappendÚpopÚModuleÚ	functoolsÚreduceÚoperatorÚiaddÚbodyÚNamerM   Ú	SubscriptÚgetattrÚsliceÚ	enumerateÚliteralÚUnaryOpÚoperandÚTupleÚCallÚargsÚkeywordsÚdesc_sig_nameÚargÚdesc_sig_operatorÚfuncÚSyntaxError)	rA   ÚresultÚelemÚiÚsubnoder   r„   ÚkwdÚmsg©Ú_unparse_pep_604_annotationÚshort_literalsrK   r'   r(   rK   S   sÄ   "

þ


 
€

ý
ÿ

ÿ
þ
ý
ü
z"_parse_annotation.<locals>.unparseúast.Subscriptc                   s¦   | j }g }t|tjƒr0| ˆ |jd ƒ¡ |jdd … D ]}| ˆ t ¡ ƒ¡ | ˆ |ƒ¡ qn| ˆ |ƒ¡ t| jddƒdkrQ| ˆ t ¡ ƒ¡ | 	t
 d¡¡ |S )Nr   r   rM   r0   rO   r   )rz   rV   rW   r   r]   rn   r`   ry   rY   ro   r   r:   )rA   Ú	subscriptÚ	flattenedÚeltrJ   r'   r(   r   ¼   s   þz6_parse_annotation.<locals>._unparse_pep_604_annotationT)Útype_commentsr   r   r   r*   N)rA   rB   r   r@   )rA   r‘   r   r@   )r8   Ú"python_display_short_literal_typesrW   ÚparserV   r   r|   ro   r:   Ústripr   rb   Úastextrp   r>   r   r‡   )r?   r,   Útreerˆ   rA   r'   rŽ   r(   Ú_parse_annotationO   s(   iÿr›   c                      sH   e Zd Zd‡ fdd„Zddd	„Zdd
d„Zddd„Zdddd„Z‡  ZS )Ú_TypeParameterListParserÚsigr   r   r   c                   s(   |  dd¡ ¡ }tƒ  |g¡ g | _d S )NÚ
r0   )Úreplacer˜   ÚsuperÚ__init__Útype_params)Úselfr   Ú	signature©Ú	__class__r'   r(   r¡   ä   s   
z!_TypeParameterListParser.__init__úlist[Token]c                 C  s¨   g }|   ¡  }rR| |¡ dD ]\}}|tj|gkr&||  tj|g¡7 } n&q|tjkr5||  tj¡7 }n| tjdgtjdgtjdg¡rL| ¡  	 |S |   ¡  }s|S )N))rR   rS   )Ú{Ú})rE   rG   ú:rT   rF   )	Úfetch_tokenro   ÚtokenÚOPÚfetch_untilÚINDENTÚDEDENTÚmatchrp   )r£   ÚtokensÚcurrentÚldelimÚrdelimr'   r'   r(   Úfetch_type_param_specì   s$   
þ
ÿóz._TypeParameterListParser.fetch_type_param_specc           	      C  s4  |   ¡  }r˜|tjkr|j ¡ }| jr0| j tjdgtjdg¡r0| jtjdgkr,tj	}ntj
}ntj}tj}tj}|   ¡ }|ro| tjdgtjdg¡ro|tjdgkr[|  ¡ }|  |¡}| jro| jtjdgkro|  ¡ }|  |¡}|tjkr„|tjkr„d|j› d}t|ƒ‚||||f}| j |¡ |   ¡  }sd S d S )Nr3   ú**rª   rT   z6type parameter bound or constraint is not allowed for z parameters)r«   r¬   ÚNAMErY   r˜   Úpreviousr±   r­   r   ÚVAR_POSITIONALÚVAR_KEYWORDÚPOSITIONAL_OR_KEYWORDÚemptyr¶   Ú_build_identifierr³   Údescriptionr‡   r¢   ro   )	r£   r³   Útp_nameÚtp_kindÚtp_annÚ
tp_defaultr²   r   Ú
type_paramr'   r'   r(   r—   ý   s4   

 

ÿâz_TypeParameterListParser.parser²   c              
     s^  ddl m}m‰  d‡ fdd„}g }t|ƒ}|D ]1}| tjd	gtjd
gtjdg¡sB| tjdgtjdgg¡}| | j||d¡  n| |j	¡ qt
tjddddƒ}d}|||||gƒƒD ]J\}}}	| j||d}
| |
¡ | tjdgtjdg¡o¦| tjtjtjtjdgtjdgtjdg¡o¥|	 tjtjtjtjd	gtjd
gtjdg¡ }q]d |¡ ¡ S )Nr   )ÚchainÚisliceÚiterableúIterable[Token]r   úIterator[tuple[Token, ...]]c                 3  sT    t | ƒ}tˆ |dƒdd}t|ƒdkrt|ƒV  |D ]}| |¡ t|ƒV  qd S )Né   )Úmaxlen)Úiterr   ÚlenÚtuplero   )rÇ   ÚitÚwindowÚx©rÆ   r'   r(   Ú
triplewise!  s   €

þz>_TypeParameterListParser._build_identifier.<locals>.triplewiserR   rE   r¨   r3   r·   )Únativer0   )r   r   z
<sentinel>FrS   rG   r©   )rÇ   rÈ   r   rÉ   )Ú	itertoolsrÅ   rÆ   rÌ   r±   r¬   r­   ro   Ú_pformat_tokenrY   r   Ú	ENDMARKERr¸   ÚNUMBERÚSTRINGÚjoinr˜   )r£   r²   rÅ   rÓ   ÚidentsÚtokÚis_unpack_operatorÚstopr^   ÚafterÚidentr'   rÒ   r(   r¾     s2   
 
ÿÿýÿ	z*_TypeParameterListParser._build_identifierFrÜ   r   rÔ   r   c                 C  s  |r|j S | tjtj¡rdS | tjdgtjdgtjdg¡r%|j › dS | 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 )Nr0   rª   rF   ú#ú rT   rC   ú&ú^ú<ú>ú+rD   r3   r·   ú@ú/z//ú%z<<z>>z>>>z<=z>=z==z!=)rY   r±   r¬   ÚNEWLINEr×   r­   )r£   rÜ   rÔ   r'   r'   r(   rÖ   I  s         öz'_TypeParameterListParser._pformat_token)r   r   r   r   )r   r§   )r   r   )r²   r§   r   r   ©F)rÜ   r   rÔ   r   r   r   )	Ú__name__Ú
__module__Ú__qualname__r¡   r¶   r—   r¾   rÖ   Ú__classcell__r'   r'   r¥   r(   rœ   ã   s    


!+rœ   Útp_listÚmulti_line_parameter_listú!addnodes.desc_type_parameter_listc                 C  s¬  t  | ¡}||d< t| ƒ}| ¡  |jD ]¿\}}}}|tjtjhv r(d}	t|	ƒ‚t  	¡ }
|tj
kr:|
t  dd¡7 }
n|tjkrG|
t  dd¡7 }
|
t  d|¡7 }
|tjurªt||ƒ}|s\q|
t  dd¡7 }
|
t  ¡ 7 }
t jddg|¢R Ž }| d¡r¦| d¡r¦| ¡ }| d¡r‘| d¡r‘|
|7 }
n|
t  dd¡7 }
|
|7 }
|
t  dd¡7 }
n|
|7 }
|tjurÏ|
t  ¡ 7 }
|
t  dd	¡7 }
|
t  ¡ 7 }
|
tjd|d
gdd7 }
||
7 }q|S )z5Parse a list of type parameters according to PEP 695.rò   zQpositional-only or keyword-only parameters are prohibited in type parameter listsr0   r3   r·   rª   rR   rS   rT   Údefault_valueF©ÚclassesÚsupport_smartquotes)r   Údesc_type_parameter_listrœ   r—   r¢   r   ÚPOSITIONAL_ONLYÚKEYWORD_ONLYr‡   Údesc_type_parameterrº   r…   r»   rƒ   r½   r›   rb   ra   r"   Úendswithr™   r   Úinline)rñ   r,   rò   r¢   ÚparserrÀ   rÁ   rÃ   rÂ   r   rA   r?   Útype_ann_exprÚtype_ann_textr'   r'   r(   Ú_parse_type_listm  sR   





ÿ


þ
r  Úarglistúaddnodes.desc_parameterlistc           	   
   C  s  t  | ¡}||d< td|  ƒ}d}|j ¡ D ]Ö}|j|jkr0||jkr0|t  ddt  dd¡¡7 }|j|j	krL||j
|jdfv rL|t  ddt  dd¡¡7 }t  ¡ }|j|jkrh|t  dd¡7 }|t  d|j¡7 }n!|j|jkr€|t  dd¡7 }|t  d|j¡7 }n	|t  d|j¡7 }|j|jur¯t|j|ƒ}|t  dd¡7 }|t  ¡ 7 }|t jddg|¢R Ž 7 }|j|jurå|j|jurÐ|t  ¡ 7 }|t  dd	¡7 }|t  ¡ 7 }n|t  dd	¡7 }|tjd|jd
gdd7 }||7 }|j}q|tjkrÿ|t  ddt  dd¡¡7 }|S )z*Parse a list of arguments using AST parserrò   z(%s)Nr0   ré   r3   r·   rª   rT   rô   Frõ   )r   Údesc_parameterlistr   Ú
parametersÚvaluesÚkindrù   Údesc_parameterr…   rú   r¼   rº   rƒ   Únamer»   r?   r½   r›   rb   ra   Údefaultr   rý   r   )	r  r,   rò   Úparamsr   Ú	last_kindÚparamrA   Úchildrenr'   r'   r(   Ú_parse_arglist«  sN   
þÿ
r  Úsignoder	   r   c                 C  sÚ  t  ¡ }||d< |g}zÁ| d¡D ]±}| ¡ }d }}| d¡r>| t  ¡ ¡ |d  |d 7  < |dd…  ¡ }| d¡s | d	¡rT| ¡  |dd…  ¡ }| d	¡sC| d	¡rt| d
¡st|d7 }|dd…  ¡ }| d	¡rt| d
¡r^| d¡rŠ|d7 }|dd…  ¡ }| d¡sy|r|d  t  	ddt  
||¡¡7  < |r¶| t  ¡ ¡ |d  |d 7  < |d8 }|sŸ|rÂ| ¡  |d8 }|s¸qt|ƒdkrËt‚W n tyæ   t  ¡ }|t  	||¡7 }| |7 } Y dS w | |7 } dS )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ò   rF   r   rE   rU   r   r   NrG   z[]r0   )r   r  r#   r˜   r"   ro   Údesc_optionalrp   rü   r  rƒ   rÍ   Ú
IndexError)r  r  rò   Ú	paramlistÚstackÚargumentÚ	ends_openÚ
ends_closer'   r'   r(   Ú_pseudo_parse_arglistà  s^   	

ý

þþ

þÿýþ€ÿúr  rì   )r   r   r   r   r   r   )r+   r   r,   r   r   r   r   r-   )r?   r   r,   r   r   r@   )rñ   r   r,   r   rò   r   r   ró   )r  r   r,   r   rò   r   r   r  )r  r	   r  r   rò   r   r   r   ))Ú
__future__r   rW   rr   rt   r¬   Úcollectionsr   Úinspectr   Útypingr   r   Údocutilsr   Úsphinxr   Úsphinx.addnodesr	   r
   r   Úsphinx.pycode.parserr   r   Úsphinx.util.inspectr   Úcollections.abcr   r   Údocutils.nodesr   r   Úsphinx.environmentr   r)   r>   r›   rœ   r  r  r  r'   r'   r'   r(   Ú<module>   s<    ÿ
  þ?ÿ6ÿ