
    %^gA                       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mZmZmZmZ ddlmZ ddlZeeef   Zded<    ej0                  d      Zd	ed
<    ej0                  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&d-d#Z'd.d$Z(d/d%Z)d0d&Z*d1d'Z+d2d(Z,d3d)Z-d4d*Z.y)5zParsing/inferring signatures from documentation.

This module provides several functions to generate better stubs using
docstrings and Sphinx docs (.rst files).
    )annotationsN)AnyFinalMutableMappingMutableSequence
NamedTupleSequenceTuple)	TypeAlias
_TypeAliasSigz4^[a-zA-Z_][\w\[\], .\"\']*(\.[a-zA-Z_][\w\[\], ]*)*$r   _TYPE_REz\**[A-Za-z_][A-Za-z0-9_]*$_ARG_NAME_REc                L    | dv ryd| v rd| vryt         j                  |       duS )zCTry to determine whether a string might be a valid type annotation.)TrueFalseretvalF,[N)r   match)ss    ,lib/python3.12/site-packages/mypy/stubdoc.pyis_valid_typer      s2    ''
axCqL>>!D((    c                  V    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y)ArgSigz%Signature info for a single argument.NFz...)defaultdefault_valuec               <    || _         || _        || _        || _        y N)nametyper   r   )selfr!   r"   r   r   s        r   __init__zArgSig.__init__'   s!     		*r   c                t    | j                   j                  d      xr | j                   j                  d       S )N***r!   
startswithr#   s    r   is_star_argzArgSig.is_star_arg5   s.    yy##C(K1E1Ed1K-KKr   c                8    | j                   j                  d      S )Nr'   r(   r*   s    r   is_star_kwargzArgSig.is_star_kwarg8   s    yy##D))r   c                    dj                  t        | j                        t        | j                        t        | j                              S )Nz$ArgSig(name={}, type={}, default={}))formatreprr!   r"   r   r*   s    r   __repr__zArgSig.__repr__;   s5    5<<OT$))_d4<<.@
 	
r   c                    t        |t              rj| j                  |j                  k(  xrO | j                  |j                  k(  xr4 | j                  |j                  k(  xr | j
                  |j
                  k(  S y)NF)
isinstancer   r!   r"   r   r   )r#   others     r   __eq__zArgSig.__eq__@   sk    eV$		UZZ' >II+>LLEMM1> &&%*=*==	 r   r    )
r!   strr"   
str | Noner   boolr   r6   returnNoner9   r8   )r9   r6   )r4   r   r9   r8   )	__name__
__module____qualname____doc__r$   r+   r-   r1   r5    r   r   r   r   $   sa    /
  +
 "++ +
 + + 
+L*

r   r   c                  v    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y)FunctionSigr6   r!   list[ArgSig]argsr7   ret_type 	type_argsc                    t        | j                  j                  d      xrF | j                  j                  d      xr) | j                  xr | j                  d   j                  dv       S )N__r   r#   cls)r8   r!   r)   endswithrD   r*   s    r   is_special_methodzFunctionSig.is_special_methodQ   sa    II  & 5		""4(5		5 		!!!_4	
 	
r   c                    | j                   r+| j                   d   j                  dv r| j                   dd }n| j                   }t        |      dk(  xr< t        d |D              xr( |d   j	                         xr |d   j                         S )z=Return if this signature has catchall args: (*args, **kwargs)r   rJ      N   c              3  8   K   | ]  }|j                   d v   yw))Nobjectr   
typing.AnyN)r"   ).0as     r   	<genexpr>z0FunctionSig.has_catchall_args.<locals>.<genexpr>a   s     RTAFFCCTs   )rD   r!   lenallr+   r-   )r#   rD   s     r   has_catchall_argszFunctionSig.has_catchall_argsY   s    991**o=99QR=D99DIN (RTRR(Q##%( Q%%'		
r   c                B    | j                         xr | j                  dv S )zKReturn if this signature is the catchall identity: (*args, **kwargs) -> Any)Nr   rS   )rY   rE   r*   s    r   is_catchall_signaturez!FunctionSig.is_catchall_signaturef   s     %%'XDMM=X,XXr   Nc           
        g }| j                   D ]  }|j                  }|t        j                  v rd|z   }|j                  .|,|j                  dvr|j                  j                  d      s|}n|j                  }|r'|d|z   z  }|j                  r1|d|j                   z  }n|j                  r|d|j                   z  }|j                  |        d}	| j                  r| j                  n|}
|
d|
z   }	|rd	nd}| | d
| j                   | j                   ddj                  |       d|	 d
}|r&d| dt        j                  j                  |       }nd}| | S )N_rJ   r&   z: z = =rF   z -> zasync zdef (, ):
z    z ...)rD   r!   keywordkwlistr"   r)   r   r   appendrE   rG   joinmypyutilquote_docstring)r#   indentis_asyncany_val	docstringrD   argarg_defarg_typeretfieldrE   prefixsigsuffixs                 r   
format_sigzFunctionSig.format_sigj   st    99ChhG'..(-  'HHO3++C0'.884(?*;;S%6%6$788GQs00122KK / 2 $(MM4==w(H%2TYYK/?q4@QQRS[R\\]^&dii&?&?	&J%KLFFvhr   r;   )rF   FNN)
rk   r6   rl   r8   rm   r7   rn   r7   r9   r6   )	r<   r=   r>   __annotations__rG   rM   rY   r[   rv   r@   r   r   rB   rB   K   sp    
I
Is

Y " $, ,  ,  	, 
 ,  
, r   rB   rO   
STATE_INITrP   STATE_FUNCTION_NAME   STATE_ARGUMENT_LIST   STATE_ARGUMENT_TYPE   STATE_ARGUMENT_DEFAULT   STATE_RETURN_VALUE   STATE_OPEN_BRACKETc                  0    e Zd ZdZddZddZd	dZd
dZy)DocStringParserz+Parse function signatures in documentation.c                    || _         t        g| _        d| _        d | _        d| _        d | _        d| _        d| _        g | _	        g | _
        y )NrF   r   F)function_namerx   stateaccumulatorrq   arg_namearg_defaultrE   foundrD   
signatures)r#   r   s     r   r$   zDocStringParser.__init__   sM    * \
$('+
"$	-/r   c           	        |j                   t        j                  k(  rO|j                  | j                  k(  r6| j
                  d   t        k(  r | j
                  j                  t               y|j                   t        j                  k(  rm|j                  dk(  r^| j
                  d   t        k(  rH| j
                  j                          d| _        d| _        | j
                  j                  t               y| j
                  d   t        k(  r| j
                  j                          y|j                   t        j                  k(  rc|j                  dv rU| j
                  d   t        k7  r?| xj                  |j                  z  c_        | j
                  j                  t               y|j                   t        j                  k(  r^|j                  dv rP| j
                  d   t        k(  r:| xj                  |j                  z  c_        | j
                  j                          y|j                   t        j                  k(  r]|j                  dk(  rN| j
                  d   t        k(  r8| j                  | _        d| _        | j
                  j                  t                y|j                   t        j                  k(  r|j                  dk(  r| j
                  d   t        t         fv rz| j
                  d   t         k(  r,| j                  | _        | j
                  j                          n| j                  | _        d| _        | j
                  j                  t$               y|j                   t        j                  k(  r=|j                  d	v r.| j
                  d   t        t$        t         fv r| j
                  d   t$        k(  r,| j                  | _        | j
                  j                          n| j
                  d   t         k(  r,| j                  | _        | j
                  j                          n| j
                  d   t        k(  rm| j                  | _        |j                  d
k(  r| j                  j)                         dk(  s0t*        j-                  | j                        s| j/                          y|j                  d
k(  r| j
                  j                          | j                  r| j"                  rZt1        | j"                        sE| j2                  j                  t5        | j                  dt7        | j&                                     nN| j2                  j                  t5        | j                  | j"                  t7        | j&                                     d| _        d| _        d| _        d| _        y|j                   t        j                  k(  rL|j                  dk(  r=| j
                  d   t        k(  r'd| _        | j
                  j                  t8               y|j                   t        j:                  t        j<                  fv r| j
                  d   t        t8        fv r| j
                  d   t8        k(  rXt1        | j                        s| j/                          y| j                  | _        d| _        | j
                  j                          | j                  rL| j@                  j                  tC        | j                  | j2                  | j>                               d| _        g | _        d| _        y| xj                  |j                  z  c_        y)z)Process next token from the token stream.r_   rF   T)r   r_   {)]ra   }rb   r^   )r   ra   ra   N)r!   r"   r   z->)r!   rD   rE   Fr   )"r"   tokenizeNAMEstringr   r   rx   rf   ry   OPpopr   r   r{   r   r   r}   rq   r   r   stripr   r   resetr   rD   r   r8   r   NEWLINE	ENDMARKERrE   r   rB   )r#   tokens     r   	add_tokenzDocStringParser.add_token   s2    JJ(--' 2 22

2*,JJ12 JJ(++%#

2"55JJNN!DDJJJ12ZZ^22JJNN JJ(++%/

2*,,JJ01 JJ(++%/

2"44,JJNN JJ(++%#

2"55 ,,DM!DJJ12 JJ(++%#

2#68K"LLzz"~!44 $ 0 0

  $ 0 0!DJJ45 JJ(++%
*

2#%;=PQR zz"~!77#'#3#3 

 B#66 $ 0 0

 B#66 $ 0 0LLC'D,<,<,B,B,D,J&,,T]];JJL||s"

  }}==t}})EII$$DMMd4K[K[F\] II$$!%T]]DQUQaQaLb
 DM DM#D!DZZ8;;&5<<4+?DJJrNV`D`!DJJ01 ZZH,,h.@.@AAdjjQSnY
 G
 zz"~!33$T%5%56JJL $ 0 0#% 

 zz&&T%7%7diiRVR_R_` #
DI!DM ,r   c                F    t         g| _        g | _        d| _        d| _        y )NFrF   )rx   r   rD   r   r   r*   s    r   r   zDocStringParser.reset7  s!     \
	
r   c                N    dddfdt        | j                  fd      S )z:Return sorted copy of the list of signatures found so far.c                @     t         fd|j                  D              S )Nc              3  <   K   | ]  }|j                   k(    y wr    )r!   )rT   xr!   s     r   rV   zBDocStringParser.get_signatures.<locals>.has_arg.<locals>.<genexpr>A  s     >~!qvv~~s   )anyrD   )r!   	signatures   ` r   has_argz/DocStringParser.get_signatures.<locals>.has_arg@  s    >y~~>>>r   c                ,     d|       xr	  d|       S )Nz*argsz**kwargsr@   )r   r   s    r   args_kwargsz3DocStringParser.get_signatures.<locals>.args_kwargsC  s    7I.Q7:y3QQr   c                     |       rdS dS )NrO   r   r@   )r   r   s    r   <lambda>z0DocStringParser.get_signatures.<locals>.<lambda>G  s    +a.Q5Oa5Or   )key)r!   r6   r   rB   r9   r8   )r   rB   r9   r8   )sortedr   )r#   r   r   s    @@r   get_signatureszDocStringParser.get_signatures=  s"    	?	R doo+OPPr   N)r   r6   r9   r:   )r   ztokenize.TokenInfor9   r:   )r9   r:   )r9   zlist[FunctionSig])r<   r=   r>   r?   r$   r   r   r   r@   r   r   r   r      s    50A-F
Qr   r   c                   t        | t              r| syt        |      }t        j                  t
        j                        5  	 t        j
                  t        j                  | j                  d            j                        }|D ]  }|j                  |        	 ddd       |j                         }dd}|D cg c]  } ||      s| c}S # t        $ r Y ddd       yw xY w# 1 sw Y   MxY wc c}w )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-8c                    t        | j                        t        | j                  D ch c]  }|j                   c}      k(  S c c}w )z1return true if function argument names are unique)rW   rD   r!   )rt   ro   s     r   is_unique_argsz0infer_sig_from_docstring.<locals>.is_unique_argsg  s4    388}$B#SXX$B CCC$Bs   A
)rt   rB   r9   r8   )r3   r6   r   
contextlibsuppressr   
TokenErrorioBytesIOencodereadliner   IndentationErrorr   )docstrr!   r   tokensr   sigsr   rt   s           r   infer_sig_from_docstringr   J  s     vs#D!E			X00	1	&&rzz&--2H'I'R'RSF&   
2 !DD
  74C>##6C477   	 
2	1
	 
2	1 8s7   C*AC>C6C6	C'C*&C''C**C3c                F    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   rD   )r   rets     r   !infer_arg_sig_from_anon_docstringr   o  s(    
"6F?F
;C
1v{{Ir   c                >    t        | |      }|r|d   j                  S y)zWConvert signature in form of "func(self: TestClass, arg0) -> int" to their return type.r   N)r   rE   )r   r!   r   s      r   !infer_ret_type_sig_from_docstringr   w  s"    
"64
0C
1vr   c                    | j                         D cg c]5  }|j                         j                  d      s#d|j                         z   7 }}t        dj	                  |      d      S c c}w )zSConvert signature in form of "(self: TestClass, arg0) -> int" to their return type.r_   r   rF   )
splitlinesr   r)   r   rg   )r   lineliness      r   &infer_ret_type_sig_from_anon_docstringr     s[    /5/@/@/Bc/BtdjjlF]F]^aFbVdjjl"/BEc,RWWU^VDD ds
   $A*A*c                   t        j                  d|       }|sy|j                  d      }|j                  d      d   }|j                  d      }|j	                         s|g g fS |j                  d      D cg c]  }|j	                          }}g }g }d}|t        |      k  rk||   j                  d	      sd
||   v rnO|j                  ||   j                  d	             |dz  }||dz
     j                  d	      rn|t        |      k  rk|t        |      k  rO||   }|j	                  d      }|j                  d
      d   }|j                  |       |dz  }|t        |      k  rO|||fS c c}w )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_]+)\(([^)]*)\)NrO   .r   rP   r   r   r   r^   z[])
rer   groupsplitr   rW   r)   rf   rstriprL   )	rt   mr!   
arg_stringro   rD   
positionaloptionalis	            r   parse_signaturer     st    	/5A771:D::c?2DJR|#-#3#3C#89#8CCIIK#8D9JH	A
c$i-7c"cT!Wn$q'..-.	QA;$ c$i- c$i-1giioiinQ	Q c$i- X%%% :s   8E2c                    g }|j                  |        |D ]9  }|j                  d      r|j                  |       &|j                  | d       ; ddj                  |       d}|j	                  dd      }|S )zNBuild function signature from lists of positional and optional argument names.r&   z=...r_   r`   ra   z(self)rF   )extendr)   rf   rg   replace)r   r   rD   ro   rt   s        r   build_signaturer     su    !#DKK
>>#KKKK3%t%	 
 diioa
 C
++h
#CJr   c                   g }g }| D ]  }|j                         }t        j                  d|      }|s,|j                  d      d   j                         }t	        |      }|s\|\  }}}	|j                  d      dk7  r|j                  |t        ||	      f       |j                  |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::rO   class)	r   r   r   r   r   r   rf   r   r   )
r   r   
class_sigsr   r   rt   parsedr!   fixedr   s
             r   parse_all_signaturesr     s    
 DJzz|HHDdK**T"1%++-C$S)F(.%eX771:(KKuh'G HI%%t_UH-M&NO  $<
+++r   c                   i }| D ]&  \  }}|j                  |g       j                  |       ( g }|j                         D ]3  \  }}t        t	        |            dk(  s|j                  ||d   f       5 t        |      S )z-Remove names with duplicate found signatures.rO   r   )
setdefaultrf   itemsrW   setr   )r   sig_mapr!   rt   result	name_sigss         r   find_unique_signaturesr     s}    .0G	c4$++C0  F"==?is9~!#MM41./ + &>r   c                b    | syd}t        j                  ||       }|r|j                  d      S 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_, \.\[\]]*): rO   )r   r   r   )r   test_strr   s      r   infer_prop_type_from_docstringr     s4     ,H
6"A1771:$$r   )r   r6   r9   r8   )r   r7   r!   r6   r9   zlist[FunctionSig] | None)r   r6   r9   rC   )r   r6   r!   r6   r9   r7   )r   r6   r9   r7   )rt   r6   r9   z'tuple[str, list[str], list[str]] | None)r   Sequence[str]r   r   r9   r6   )r   r   r9   ztuple[list[Sig], list[Sig]])r   zSequence[Sig]r9   z	list[Sig])r   r7   r9   r7   )/r?   
__future__r   r   r   rd   r   r   typingr   r   r   r   r   r	   r
   typing_extensionsr   r   	mypy.utilrh   r6   r   rw   compiler   r   r   r   rB   rx   ry   r{   r}   r   r   r   r   r   r   r   r   r   r   r   r   r   r@   r   r   <module>r      s   #  	  	  [ [ [ 5  S/Z ! "**TU% U bjj!>?e ?)$ $NK * K ^ 
E  U  U  U  !  ! E  E dQ dQN"8JE"&J,.
%r   