
    X-Ph"H                       U 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m	Z	m
Z
mZ ddlmZmZmZ ddlmZ ddlZeeef         Zded<    ej        d	          Zd
ed<    ej        d          Zd
ed<   d?dZ G d d          Z G d de          ZdZd
ed<   dZ d
ed<   dZ!d
ed<   dZ"d
ed<   dZ#d
ed <   d!Z$d
ed"<   d#Z%d
ed$<    G d% d&          Z&d@d+Z'dAd-Z(dBd.Z)dCd/Z*dDd2Z+dEd6Z,dFd9Z-dGd=Z.dHd>Z/dS )IzParsing/inferring signatures from documentation.

This module provides several functions to generate better stubs using
docstrings and Sphinx docs (.rst files).
    )annotationsN)MutableMappingMutableSequenceSequence)AnyFinal
NamedTuple)	TypeAlias
_TypeAliasSigz5^[a-zA-Z_][\w\[\], .\"\'|]*(\.[a-zA-Z_][\w\[\], ]*)*$r   _TYPE_REz\**[A-Za-z_][A-Za-z0-9_]*$_ARG_NAME_REsstrreturnboolc                Z    | dv rdS d| v rd| vrdS t                               |           duS )zCTry to determine whether a string might be a valid type annotation.)TrueFalseretvalF,[N)r   match)r   s    L/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/mypy/stubdoc.pyis_valid_typer      s@    '''u
axxCqLLu>>!D((    c                  F    e Zd ZdZ	 ddddddZddZddZddZddZdS )ArgSigz%Signature info for a single argument.NFz...)defaultdefault_valuenamer   type
str | Noner   r   r    r   Nonec               >    || _         || _        || _        || _        d S N)r!   r"   r   r    )selfr!   r"   r   r    s        r   __init__zArgSig.__init__(   s'     		*r   c                l    | j                             d          o| j                             d           S )N***r!   
startswithr'   s    r   is_star_argzArgSig.is_star_arg6   s0    y##C((K1E1Ed1K1K-KKr   c                6    | j                             d          S )Nr+   r,   r.   s    r   is_star_kwargzArgSig.is_star_kwarg9   s    y##D)))r   c                    d                     t          | j                  t          | j                  t          | j                            S )Nz$ArgSig(name={}, type={}, default={}))formatreprr!   r"   r   r.   s    r   __repr__zArgSig.__repr__<   s;    5<<OOT$)__d4<.@.@
 
 	
r   otherr   c                    t          |t                    r@| j        |j        k    o/| j        |j        k    o| j        |j        k    o| j        |j        k    S dS )NF)
isinstancer   r!   r"   r   r    )r'   r6   s     r   __eq__zArgSig.__eq__A   sc    eV$$ 		UZ' >I+>LEM1> &%*==	 ur   r&   )
r!   r   r"   r#   r   r   r    r   r   r$   r   r   )r   r   )r6   r   r   r   )	__name__
__module____qualname____doc__r(   r/   r1   r5   r9    r   r   r   r   %   s        //
  +
 "+ + + + + +L L L L* * * *
 
 
 

     r   r   c                  f    e Zd ZU ded<   ded<   ded<   dZded<   ddZddZddZ	 	 	 	 dddZdS )FunctionSigr   r!   list[ArgSig]argsr#   ret_type 	type_argsr   r   c                    t          | j                            d          o4| j                            d          o| j        o| j        d         j        dv           S )N__r   r'   cls)r   r!   r-   endswithrC   r.   s    r   is_special_methodzFunctionSig.is_special_methodR   sa    I  && 5	""4((5	5 	!!_4	
 
 	
r   c                &   | j         r$| j         d         j        dv r| j         dd         }n| j         }t          |          dk    oLt          d |D                       o3|d                                         o|d                                         S )z=Return if this signature has catchall args: (*args, **kwargs)r   rI      N   c              3  (   K   | ]}|j         d v V  dS ))Nobjectr   
typing.AnyN)r"   ).0as     r   	<genexpr>z0FunctionSig.has_catchall_args.<locals>.<genexpr>b   s*      RRAFCCRRRRRRr   )rC   r!   lenallr/   r1   )r'   rC   s     r   has_catchall_argszFunctionSig.has_catchall_argsZ   s    9 	1*o==9QRR=DD9DIIN (RRTRRRRR(Q##%%( Q%%''		
r   c                <    |                                  o| j        dv S )zKReturn if this signature is the catchall identity: (*args, **kwargs) -> Any)Nr   rR   )rX   rD   r.   s    r   is_catchall_signaturez!FunctionSig.is_catchall_signatureg   s!    %%''XDM=X,XXr   FNindentis_asyncany_val	docstringc           
     F   g }| j         D ]}|j        }|t          j        v rd|z   }|j        (|&|j        dvr|j                            d          s|}n|j        }|r|d|z   z  }|j        r|d|j         z  }n|j        r|d|j         z  }|                    |           d}	| j	        r| j	        n|}
|
d|
z   }	|rd	nd}| | d
| j         | j
         dd                    |           d|	 d
}|r&d| dt          j                            |           }nd}| | S )N_rI   r*   z: z = =rE   z -> zasync zdef (, ):
z    z ...)rC   r!   keywordkwlistr"   r-   r   r    appendrD   rF   joinmypyutilquote_docstring)r'   r[   r\   r]   r^   rC   argarg_defarg_typeretfieldrD   prefixsigsuffixs                 r   
format_sigzFunctionSig.format_sigk   s    9 	! 	!ChG'.((-  'HO33++C00 4 (/8 34(?*; 98S%6888G 32s0222KK    $(M>4==w(H%-2^^^TY^^^4^^S[^^^ 	L&LLdi&?&?	&J&JLLFFFvr   r:   )rE   FNN)
r[   r   r\   r   r]   r#   r^   r#   r   r   )	r;   r<   r=   __annotations__rF   rL   rX   rZ   ru   r?   r   r   rA   rA   L   s         IIII
 
 
 

 
 
 
Y Y Y Y " $,  ,  ,  ,  ,  ,  , r   rA   rN   
STATE_INITrO   STATE_FUNCTION_NAME   STATE_ARGUMENT_LIST   STATE_ARGUMENT_TYPE   STATE_ARGUMENT_DEFAULT   STATE_RETURN_VALUE   STATE_OPEN_BRACKETc                  2    e Zd ZdZddZdd	Zdd
ZddZdS )DocStringParserz+Parse function signatures in documentation.function_namer   r   r$   c                    || _         t          g| _        d| _        d | _        d| _        d | _        d| _        d| _        g | _	        d | _
        d | _        g | _        d S )NrE   r   F)r   rw   stateaccumulatorrp   arg_namearg_defaultrD   foundrC   pos_onlykeyword_only
signatures)r'   r   s     r   r(   zDocStringParser.__init__   s`    * \
$('+
"$	$((,-/r   tokentokenize.TokenInfoc           	        |j         t          j        k    rG|j        | j        k    r7| j        d         t          k    r!| j                            t                     dS |j         t          j	        k    ri|j        dk    r^| j        d         t          k    rH| j        
                                 d| _        d| _        | j                            t                     dS | j        d         t          k    r| j        
                                 dS |j         t          j	        k    rU|j        dv rL| j        d         t          k    r6| xj        |j        z  c_        | j                            t                     dS |j         t          j	        k    rO|j        dv rF| j        d         t          k    r0| xj        |j        z  c_        | j        
                                 dS |j         t          j	        k    rU|j        dk    rJ| j        d         t          k    r4| j        | _        d| _        | j                            t                      dS |j         t          j	        k    r|j        dk    r| j        d         t          t           fv rp| j        d         t           k    r&| j        | _        | j        
                                 n| j        | _        d| _        | j                            t$                     dS |j         t          j	        k    r|j        d	v r| j        d         t          t$          t           fv r| j        d         t$          k    r'| j        | _        | j        
                                 n:| j        d         t           k    r&| j        | _        | j        
                                 n| j        d         t          k    r| j        d
k    r>| j        |                                  dS t-          | j                  | _        d| _        n| j                            d
          rt-          | j                  dz   | _        | j        | _        |j        dk    r| j                                        dk    s5t4                              | j                  s|                                  dS |j        dk    rp| j        d         t          k    rA| j        :| j        t-          | j                  k    r| j        s|                                  dS | j        
                                 | j        r| j        rVt9          | j                  sB| j                            t;          | j        dt=          | j                                       nF| j                            t;          | j        | j        t=          | j                                       d| _        d| _        d| _        d| _        dS |j         t          j	        k    r|j        dk    r| j        d         t          k    ry|j        dk    rl| j        | j        | j        s|                                  dS t-          | j                  | _        | j                            t                      d| _        dS dS |j         t          j	        k    rI|j        dk    r>| j        d         t          k    r(d| _        | j                            t@                     dS |j         t          j!        t          j"        fv r| j        d         t          t@          fv r| j        d         t@          k    rVt9          | j                  s|                                  dS | j        | _#        d| _        | j        
                                 | j        r@| j$                            tK          | j        | j        | j#                             d| _        g | _        d| _#        dS | xj        |j        z  c_        dS )z)Process next token from the token stream.rb   rE   T)r   rb   {)]rd   }re   ra   )r   rd   r*   NrN   rd   )r!   r"   r   /z->)r!   rC   rD   Fr   )&r"   tokenizeNAMEstringr   r   rw   ri   rx   OPpopr   r   rz   r   r   r|   rp   r~   r   r   resetrV   rC   r-   stripr   r   r   r   r   r   r   NEWLINE	ENDMARKERrD   r   rA   )r'   r   s     r   	add_tokenzDocStringParser.add_token   sh    J(-'' 222
2*,,J122222 J(+%%##
2"555JNN!DDJJ122222Z^222JNN J(+%%//
2*,,,J011111 J(+%%//
2"444,JNN J(+%%##
2"555 ,DM!DJ122222 J(+%%##
2#68K"LLLz"~!444 $ 0
     $ 0!DJ455555 J(+%%
**
2#%;=PQR R z"~!777#'#3 
    B#666 $ 0
    B#666#s**(4

(+DID%')D$$'22377 ?,/	NNQ,>)$($4DM++0@0F0F0H0HB0N0N*00?? 1O 

|s""JrN&999)5)S^^;; M < JJLLLF
    } = 
t})E)E 
I$$DMd4K[F\F\]]]    I$$!%T]DQUQaLbLb    
 DM DM#D!DJ(+%%##
2"555|s""=,0A0MUYU^0M
 JJLLLF #DI
!!"5666#%    #" Z8;&&5<4+?+?DJrNV`D`D`!DJ011111 ZH,h.@AAAdjQSnY
 G
 G
 z"~!333$T%566 JJLLLF $ 0#% 
   z #&&T%7diRVR_```   #
DI!DMMM ,r   c                J    t           g| _        g | _        d| _        d| _        d S )NFrE   )rw   r   rC   r   r   r.   s    r   r   zDocStringParser.reset]  s'     \
	
r   list[FunctionSig]c                L    dddfdt          | j        fd	
          S )z:Return sorted copy of the list of signatures found so far.r!   r   	signaturerA   r   r   c                D     t           fd|j        D                       S )Nc              3  .   K   | ]}|j         k    V  d S r&   r!   )rS   xr!   s     r   rU   zBDocStringParser.get_signatures.<locals>.has_arg.<locals>.<genexpr>g  s)      >>!qv~>>>>>>r   )anyrC   )r!   r   s   ` r   has_argz/DocStringParser.get_signatures.<locals>.has_argf  s(    >>>>y~>>>>>>r   c                4     d|           o d|           S )Nz*argsz**kwargsr?   )r   r   s    r   args_kwargsz3DocStringParser.get_signatures.<locals>.args_kwargsi  s&    77I..Q77:y3Q3QQr   c                "     |           rdndS )NrN   r   r?   )r   r   s    r   <lambda>z0DocStringParser.get_signatures.<locals>.<lambda>m  s    ++a..5OQQa r   )key)r!   r   r   rA   r   r   )r   rA   r   r   )sortedr   )r'   r   r   s    @@r   get_signatureszDocStringParser.get_signaturesc  s]    	? 	? 	? 	?	R 	R 	R 	R 	R 	R do+O+O+O+OPPPPr   N)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      su        550 0 0 0 d- d- d- d-L   
Q 
Q 
Q 
Q 
Q 
Qr   r   docstrr#   r!   list[FunctionSig] | Nonec                   t          | t                    r| sdS t          |          }t          j        t
          j                  5  	 t          j        t          j        | 	                    d                    j
                  }|D ]}|                    |           n# t          $ r Y ddd           dS w xY w	 ddd           n# 1 swxY w Y   |                                }d	dfd|D             S )
a=  Convert function signature to list of FunctionSig

    Look for function signatures of function in docstring. Signature is a string of
    the format <function_name>(<signature>) -> <return type> or perhaps without
    the return type.

    Returns empty list, when no signature is found, one signature in typical case,
    multiple signatures, if docstring specifies multiple signatures for overload functions.
    Return None if the docstring is empty.

    Arguments:
        * docstr: docstring
        * name: name of function for which signatures are to be found
    Nzutf-8rs   rA   r   r   c                j    t          | j                  t          d | j        D                       k    S )z1return true if function argument names are uniquec                    h | ]	}|j         
S r?   r   rS   rn   s     r   	<setcomp>zCinfer_sig_from_docstring.<locals>.is_unique_args.<locals>.<setcomp>  s    $B$B$B#SX$B$B$Br   )rV   rC   )rs   s    r   is_unique_argsz0infer_sig_from_docstring.<locals>.is_unique_args  s.    38}}$B$B$B$B$B C CCCr   c                *    g | ]} |          |S r?   r?   )rS   rs   r   s     r   
<listcomp>z,infer_sig_from_docstring.<locals>.<listcomp>  s(    777C>>##6#67C777r   )rs   rA   r   r   )r8   r   r   
contextlibsuppressr   
TokenErrorioBytesIOencodereadliner   IndentationErrorr   )r   r!   r   tokensr   sigsr   s         @r   infer_sig_from_docstringr   p  s    vs##  tD!!E		X0	1	1  	&rz&--2H2H'I'I'RSSF ' '&&&&' 	 	 	       
	'               !!DD D D D
 877747777s7   C
AB#"C#
B<-C;B<<CCCrB   c                J    t          d| z   d          }|r|d         j        S g S )zXConvert signature in form of "(self: TestClass, arg0: str='ada')" to List[TypedArgList].stubr   )r   rC   )r   rets     r   !infer_arg_sig_from_anon_docstringr     s.    
"6F?F
;
;C
 1v{Ir   c                D    t          | |          }|r|d         j        S dS )zWConvert signature in form of "func(self: TestClass, arg0) -> int" to their return type.r   N)r   rD   )r   r!   r   s      r   !infer_ret_type_sig_from_docstringr     s*    
"64
0
0C
 1v4r   c                    d |                                  D             }t          d                    |          d          S )zSConvert signature in form of "(self: TestClass, arg0) -> int" to their return type.c                    g | ]@}|                                                     d           )d|                                 z   AS )rb   r   )r   r-   )rS   lines     r   r   z:infer_ret_type_sig_from_anon_docstring.<locals>.<listcomp>  sA    ccctdjjllF]F]^aFbFbcVdjjll"cccr   rE   r   )
splitlinesr   rj   )r   liness     r   &infer_ret_type_sig_from_anon_docstringr     s;    ccv/@/@/B/BcccE,RWWU^^VDDDr   rs   'tuple[str, list[str], list[str]] | Nonec                p   t          j        d|           }|sdS |                    d          }|                    d          d         }|                    d          }|                                s|g g fS d |                    d          D             }g }g }d	}|t          |          k     r||                             d
          s
d||         v rne|                    ||                             d
                     |dz  }||dz
           	                    d
          rn|t          |          k     |t          |          k     re||         }|                    d          }|                    d          d	         }|                    |           |dz  }|t          |          k     e|||fS )zSplit function signature into its name, positional an optional arguments.

    The expected format is "func_name(arg, opt_arg=False)". Return the name of function
    and lists of positional and optional argument names.
    z([.a-zA-Z0-9_]+)\(([^)]*)\)NrN   .r   rO   c                6    g | ]}|                                 S r?   )r   r   s     r   r   z#parse_signature.<locals>.<listcomp>  s     999CCIIKK999r   r   r   r   ra   z[])
rer   groupsplitr   rV   r-   ri   rstriprK   )	rs   mr!   
arg_stringrC   
positionaloptionalirn   s	            r   parse_signaturer     s    	/55A t771::D::c??2DJ R|99:#3#3C#8#8999DJH	A
c$ii--7c"" 	cT!Wnn$q'..--...	QA;$$ 	 c$ii-- c$ii--1giiooiinnQ	Q c$ii-- X%%r   r   Sequence[str]r   c                "   g }|                     |            |D ]E}|                    d          r|                    |           -|                    | d           Fdd                    |           d}|                    dd          }|S )zNBuild function signature from lists of positional and optional argument names.r*   z=...rb   rc   rd   z(self)rE   )extendr-   ri   rj   replace)r   r   rC   rn   rs   s        r   build_signaturer     s    !#DKK
 & &>># 	&KKKK3%%%%
 diioo
 
 
 C
++h
#
#CJr   r   tuple[list[Sig], list[Sig]]c                   g }g }| D ]}|                                 }t          j        d|          }|r|                    d          d                                          }t	          |          }|rj|\  }}}	|                    d          dk    r&|                    |t          ||	          f           |                    |t          ||	          f           t          |          t          |          fS )ztParse all signatures in a given reST document.

    Return lists of found signatures for functions and classes.
    z,\.\. *(function|method|class) *:: *[a-zA-Z_]z::rN   class)	r   r   r   r   r   r   ri   r   r   )
r   r   
class_sigsr   r   rs   parsedr!   fixedr   s
             r   parse_all_signaturesr     s   
 DJ P Pzz||HDdKK 	P**T""1%++--C$S))F P(.%eX771::((KKuh'G'G HIIII%%t_UH-M-M&NOOO$<<
++++r   r   Sequence[Sig]	list[Sig]c                8   i }| D ].\  }}|                     |g                               |           /g }|                                D ]B\  }}t          t	          |                    dk    r|                    ||d         f           Ct          |          S )z-Remove names with duplicate found signatures.rN   r   )
setdefaultri   itemsrV   setr   )r   sig_mapr!   rs   result	name_sigss         r   find_unique_signaturesr     s    .0G 1 1	c4$$++C0000F"==?? 0 0is9~~!##MM41.///&>>r   c                j    | sdS d}t          j        ||           }|r|                    d          ndS )ag  Check for Google/Numpy style docstring type annotation for a property.

    The docstring has the format "<type>: <descriptions>".
    In the type string, we allow the following characters:
    * dot: because sometimes classes are annotated using full path
    * brackets: to allow type hints like List[int]
    * comma/space: things like Tuple[int, int]
    Nz^([a-zA-Z0-9_, \.\[\]]*): rN   )r   r   r   )r   test_strr   s      r   infer_prop_type_from_docstringr     s@      t,H
6""A$1771:::$r   )r   r   r   r   )r   r#   r!   r   r   r   )r   r   r   rB   )r   r   r!   r   r   r#   )r   r   r   r#   )rs   r   r   r   )r   r   r   r   r   r   )r   r   r   r   )r   r   r   r   )r   r#   r   r#   )0r>   
__future__r   r   r   rg   r   r   collections.abcr   r   r   typingr   r   r	   typing_extensionsr
   r   	mypy.utilrk   tupler   r   rv   compiler   r   r   r   rA   rw   rx   rz   r|   r~   r   r   r   r   r   r   r   r   r   r   r   r   r?   r   r   <module>r     s     # " " " " "     				  				  E E E E E E E E E E ) ) ) ) ) ) ) ) ) ) 5 5 5 5 5 5     S/ ! ! ! ! "*UVV V V V V bj!>?? ? ? ? ?) ) ) )$ $ $ $ $ $ $ $NK  K  K  K  K * K  K  K ^ 
                    !  ! ! ! !          IQ IQ IQ IQ IQ IQ IQ IQX"8 "8 "8 "8J      E E E E"& "& "& "&J   , , , ,.
 
 
 
% % % % % %r   