ML i\IUdZddlmZddlZddlZddlZddlZddlZddlm Z m Z m Z ddl m Z mZmZddlmZddlZeeefZded<ej2d Zd ed <ej2d Zd ed <d,dZGddZGddeZdZd ed<dZ d ed<dZ!d ed<dZ"d ed<dZ#d ed<dZ$d ed<dZ%d ed <Gd!d"Z&d-d#Z'd.d$Z(d/d%Z)d0d&Z*d1d'Z+d2d(Z,d3d)Z-d4d*Z.d5d+Z/y)6zParsing/inferring signatures from documentation. This module provides several functions to generate better stubs using docstrings and Sphinx docs (.rst files). ) annotationsN)MutableMappingMutableSequenceSequence)AnyFinal NamedTuple) TypeAlias _TypeAliasSigz5^[a-zA-Z_][\w\[\], .\"\'|]*(\.[a-zA-Z_][\w\[\], ]*)*$r_TYPE_REz\**[A-Za-z_][A-Za-z0-9_]*$ _ARG_NAME_REcL|dvryd|vrd|vrytj|duS)zCTry to determine whether a string might be a valid type annotation.)TrueFalseretvalF,[N)r match)ss R/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/mypy/stubdoc.py is_valid_typers2 '' axCqL >>! D ((cVeZdZdZ d ddd d dZd dZd dZdd Zdd Zy)ArgSigz%Signature info for a single argument.NFz...)default default_valuec<||_||_||_||_yN)nametyperr)selfr r!rrs r__init__zArgSig.__init__(s!   *rct|jjdxr|jjd S)N***r startswithr"s r is_star_argzArgSig.is_star_arg6s.yy##C(K1E1Ed1K-KKrc8|jjdS)Nr&r'r)s r is_star_kwargzArgSig.is_star_kwarg9syy##D))rcdjt|jt|jt|jS)Nz$ArgSig(name={}, type={}, default={}))formatreprr r!rr)s r__repr__zArgSig.__repr__<s55<< OT$))_d4<<.@  rct|trj|j|jk(xrO|j|jk(xr4|j|jk(xr|j |j k(Sy)NF) isinstancerr r!rr)r"others r__eq__z ArgSig.__eq__Ask eV $ UZZ'>II+>LLEMM1>&&%*=*==   rr) r strr! str | Nonerboolrr5returnNoner8r7)r8r5)r3rr8r7) __name__ __module__ __qualname____doc__r#r*r,r0r4rrrr%sa/   + " + + +  +  +  +L* rrceZdZUded<ded<ded<dZded<d Zded <dd Zdd Zdd Z d ddZ y ) FunctionSigr5r list[ArgSig]argsr6ret_type type_argsN docstringct|jjdxrF|jjdxr)|jxr|jdjdvS)N__rr"cls)r7r r(endswithrCr)s ris_special_methodzFunctionSig.is_special_methodSsa II  & 5 ""4( 5  5 ! !!_4   rc |jr+|jdjdvr|jdd}n |j}t|dk(xr<td|Dxr(|dj xr|dj S)z=Return if this signature has catchall args: (*args, **kwargs)rrJNc38K|]}|jdvyw))Nobjectr typing.AnyN)r!).0as r z0FunctionSig.has_catchall_args..csRAFFCCRs)rCr lenallr*r,)r"rCs rhas_catchall_argszFunctionSig.has_catchall_args[s 991**o=99QR=D99D IN (RTRR (Q##% (Q%%'  rcB|jxr|jdvS)zKReturn if this signature is the catchall identity: (*args, **kwargs) -> Any)NrrS)rYrDr)s ris_catchall_signaturez!FunctionSig.is_catchall_signaturehs %%'XDMM=X,XXrc g}|jD]}|j}|tjvrd|z}|j.|,|jdvr|jj ds|} n |j} | r'|d| zz }|j r1|d|jz }n|j r|d|jz }|j|d} |jr |jn|} | d| z} |rd nd} || d |j|jd d j|d | d } |r|jxs|nd}|r&d|dtjj|}nd}| |S)N_rJr%z: z = =rEz -> zasync zdef (, ): z z ...)rCr keywordkwlistr!r(rrappendrDrFjoinrGmypyutilquote_docstring)r"indentis_asyncany_valrGinclude_docstringsrCargarg_defarg_typeretfieldrDprefixsigdocsuffixs r format_sigzFunctionSig.format_sigls99 !ChhG'..(- 'HHO3++C0'.884(?*;;S%6%6$788GQs00122 KK / !2$(MM4==w  (H%2TYYK/?q4@QQRS[R\\]^0Bt~~*t &dii&?&?&D%EFFFvhrr:)rEFNNF) rkr5rlr7rmr6rGr6rnr7r8r5) r;r<r=__annotations__rFrGrMrYr[rwr?rrrArALs I Is Iz    Y " $#( 0 0 0  0  0 ! 0  0 rrArO STATE_INITrPSTATE_FUNCTION_NAMESTATE_ARGUMENT_LISTSTATE_ARGUMENT_TYPESTATE_ARGUMENT_DEFAULTSTATE_RETURN_VALUESTATE_OPEN_BRACKETc0eZdZdZddZddZd dZd dZy) DocStringParserz+Parse function signatures in documentation.c||_tg|_d|_d|_d|_d|_d|_d|_g|_ d|_ d|_ g|_ y)NrErF) function_namerystate accumulatorrqarg_name arg_defaultrDfoundrCpos_only keyword_only signatures)r"rs rr#zDocStringParser.__init__s\* \ $(  '+  "$ $( (,-/rc |jtjk(rO|j|jk(r6|j dt k(r |j jty |jtjk(rm|jdk(r^|j dtk(rH|j jd|_ d|_ |j jty |j dtk(r|j jy |jtjk(rc|jdvrU|j dt k7r?|xj|jz c_ |j jty |jtjk(r^|jdvrP|j dtk(r:|xj|jz c_ |j jy |jtjk(r]|jdk(rN|j dtk(r8|j|_d|_ |j jt y |jtjk(r|jdk(r|j dtt fvrz|j dt k(r,|j|_|j jn|j|_d|_ |j jt$y |jtjk(r&|jd vr|j dtt$t fvr|j dt$k(r-|j|_|j jnL|j dt k(r-|j|_|j jn |j dtk(r|jd k(r?|j(|j+y t-|j.|_d|_ n|jj1d rt-|j.d z|_|j|_|jd k(r|jj3dk(s0t4j7|js|j+y |jd k(r{|j dtk(rK|j(?|j(t-|j.k(r|js|j+y |j j|jr|j"rZt9|j"sE|j.jt;|jd t=|j&nN|j.jt;|j|j"t=|j&d|_d |_d |_d|_ y |jtjk(r|jdk(r|j dtk(r|jdk(rv|j>|j( |j.s|j+y t-|j.|_|j jt d|_ y y |jtjk(rL|jdk(r=|j dt k(r'd|_ |j jt@y |jtjBtjDfvr|j dt t@fvr|j dt@k(rXt9|js|j+y |j|_#d|_ |j j|jrL|jHjtK|j|j.|jFd|_ g|_d|_#y |xj|jz c_ y )z)Process next token from the token stream.r_rET)rr_{)]ra}rbr^)rrar%NrOra)r r!r/z->)r rCrDFr)&r!tokenizeNAMEstringrrryrfrzOPpoprrr|rrr~rqrrrresetrWrCr(striprrrrr7rrNEWLINE ENDMARKERrDrrA)r"tokens r add_tokenzDocStringParser.add_tokensw JJ(-- '  2 22 2*, JJ  1 2 JJ(++ % # 2"55 JJNN !D DJ JJ  1 2 ZZ^2 2 JJNN  JJ(++ % / 2*,    ,  JJ  0 1 JJ(++ % / 2"44    ,  JJNN  JJ(++ % # 2"55 ,,DM!D  JJ  1 2 JJ(++ % # 2#68K"LLzz"~!44 $ 0 0   $ 0 0 !D  JJ  4 5 JJ(++ % * 2#%;=PQRzz"~!77#'#3#3   B#66 $ 0 0   B#66##s*((4 (+DIID%')D$''2237,/ NQ,>)$($4$4DM +0@0@0F0F0HB0N*00? ||s"JJrN&99))5))S^; MMJJL  }}==t}})EII$$DMMd4K[K[F\]II$$!%T]]DQUQaQaLb DM DM#D !D  JJ(++ % # 2"55||s"==,0A0A0MUYU^U^ JJL #DII  !!"56#% #ZZ8;; &5<<4+?DJJrNV`D`!D  JJ  0 1ZZH,,h.@.@A AdjjQSn  Y G zz"~!33$T%5%56JJL $ 0 0 #%   zz&&T%7%7diiRVR_R_`# DI!DM    , rcFtg|_g|_d|_d|_y)NFrE)ryrrCrrr)s rrzDocStringParser.resetbs! \   rcNdddfd t|jfdS)z:Return sorted copy of the list of signatures found so far.c@tfd|jDS)Nc3<K|]}|jk(ywr)r )rTxr s rrVzBDocStringParser.get_signatures..has_arg..ls>!qvv~>s)anyrC)r signatures` rhas_argz/DocStringParser.get_signatures..has_argks>y~~>> >rc,d|xr d|S)Nz*argsz**kwargsr?)rrs r args_kwargsz3DocStringParser.get_signatures..args_kwargsns7I.Q7:y3Q Qrc|rdSdS)NrOrr?)rrs rz0DocStringParser.get_signatures..rs+a.Qar)key)r r5rrAr8r7)rrAr8r7)sortedr)r"rrs @@rget_signatureszDocStringParser.get_signatureshs" ? Rdoo+OPPrN)rr5r8r9)rztokenize.TokenInfor8r9)r8r9)r8zlist[FunctionSig])r;r<r=r>r#rrrr?rrrrs50 d-L Qrrct|tr|syt|}tjt j 5 t j tj|jdj}|D]}|j| ddd|j}dd}|Dcgc] }||s |c}S#t$r YdddywxYw#1swYMxYwcc}w)a=Convert function signature to list of FunctionSig Look for function signatures of function in docstring. Signature is a string of the format () -> 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 Nzutf-8ct|jt|jDchc]}|jc}k(Scc}w)z1return true if function argument names are unique)rWrCr )rtros ris_unique_argsz0infer_sig_from_docstring..is_unique_argss0388}$B#SXX$B CCC$BsA )rtrAr8r7)r2r5r contextlibsuppressr TokenErrorioBytesIOencodereadlinerIndentationErrorr)docstrr rtokensrsigsrrts rinfer_sig_from_docstringrus vs # D !E   X00 1 &&rzz&--2H'I'R'RSF '& '    !DD  7C>##6C 77       8s7C*AC> C6 C6 C'C*&C''C**C3cFtd|zd}|r|djSgS)zXConvert signature in form of "(self: TestClass, arg0: str='ada')" to List[TypedArgList].stubr)rrC)rrets r!infer_arg_sig_from_anon_docstringrs( "6F?F ;C 1v{{ Irc>t||}|r|djSy)zWConvert signature in form of "func(self: TestClass, arg0) -> int" to their return type.rN)rrD)rr rs r!infer_ret_type_sig_from_docstringrs" "64 0C 1v rc|jDcgc]5}|jjds#d|jz7}}tdj |dScc}w)zSConvert signature in form of "(self: TestClass, arg0) -> int" to their return type.r_rrE) splitlinesrr(rrg)rlineliness r&infer_ret_type_sig_from_anon_docstringrsX/5/@/@/B ctdjjlF]F]^aFbVdjjl " cE c ,RWWU^V DD ds $A*A*ctjd|}|sy|jd}|jdd}|jd}|j s|ggfS|jdDcgc]}|j }}g}g}d}|t |krk||j d sd ||vrnO|j||jd |dz }||dz jd rn|t |krk|t |krO||}|j d }|jd d}|j||dz }|t |krO|||fScc}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.rrPrrrr^z[]) rergroupsplitrrWr(rfrstriprL) rtmr arg_stringrorC positionaloptionalis rparse_signaturersq /5A  771:D ::c?2 DJ    R|#-#3#3C#8 9CCIIK 9D 9JH A c$i- 7  c "cT!Wn $q'..-. Q A;   $  c$i- c$i-1giioiinQ Q c$i- X %%% :s8E2cg}|j||D]9}|jdr|j|&|j|d;ddj|d}|j dd}|S)zNBuild function signature from lists of positional and optional argument names.r%z=...r_r`raz(self)rE)extendr(rfrgreplace)rrrCrorts rbuild_signaturersz!#DKK & >>#  KK  KK3%t % & diio a C ++h #C Jrcg}g}|D]}|j}tjd|}|s,|jddj}t |}|s\|\}}} |j ddk7r|j |t|| f|j |t|| ft|t|fS)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::rOclass) rrrrrrrfrr) rr class_sigsrrrtparsedr fixedrs rparse_all_signaturesrs DJ Pzz| HHDd K **T"1%++-C$S)F(.%eX771:(KKuh'G HI%%t_UH-M&NO P $< + ++rci}|D]&\}}|j|gj|(g}|jD]3\}}tt |dk(s|j||df5t |S)z-Remove names with duplicate found signatures.rOr) setdefaultrfitemsrWsetr)rsig_mapr rtresult name_sigss rfind_unique_signaturesrs.0G1 c4$++C01F"==?0i s9~ ! # MM41. /0 &>rcb|syd}tj||}|r|jdSdS)agCheck for Google/Numpy style docstring type annotation for a property. The docstring has the format ": ". 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)rrr)rtest_strrs rinfer_prop_type_from_docstringrs4 ,H 6"A1771:$$r)rr5r8r7)rr6r r5r8zlist[FunctionSig] | None)rr5r8rB)rr5r r5r8r6)rr5r8r6)rtr5r8z'tuple[str, list[str], list[str]] | None)r Sequence[str]rrr8r5)rrr8ztuple[list[Sig], list[Sig]])rz Sequence[Sig]r8z list[Sig])rr6r8r6)0r> __future__rrrrdrrcollections.abcrrrtypingrrr typing_extensionsr r mypy.utilrhtupler5r rxcompiler rrrrAryrzr|r~rrrrrrrrrrrrrr?rrrs #  EE))5S/Z!"**UV%V bjj!>? e?)$$NP *P h EUUU !!EEIQIQX"8JE "&J ,.  %r