
    _OgԀ                    4   S r SSKJr  SSKrSSKrSSKrSSKrSSKrSSKrSSK	r	SSK
rSSKJr  SSKrSSKJr  SSKJr  SSKJr  SSKJrJrJrJrJr  SS	KJrJrJ r J!r!J"r"J#r#J$r$J%r%J&r&J'r'  SS
K(J)r)  \RT                  " \+5      r, " S S\RZ                  R\                  R^                  5      r/S S jr0\Rb                  " S5      r2\Rb                  " S5      r3\Rh                  S!S"S jj5       r5\Rh                  S#S j5       r5\Rh                  S$S j5       r5 S!       S%S jjr5\Rh                  S!S&S jj5       r6\Rh                  S'S j5       r6S!S(S jjr6S)S jr7\Rp                  SS4S*S jjr9S)S jr:S+S jr;\Rx                   " S S5      5       r= " S S5      r>g),z=
Note: The `docspec_python.parser` module is not public API.
    )annotationsN)StringIO)lib2to3_parse)token)python_symbols)NLContextLeafNode	type_repr)
ArgumentClass
Decoration	DocstringFunctionIndirectionLocationModuleVariable_ModuleMembers)SequenceWalkerc                  n    \ rS rSr% SrS\S'   S\S'   S\S'   S	\S
'   S\S'               SS jrSrg)
ParseErrorL   zHExtends `blib2to3.pgen2.parse.ParseError` to add a `filename` attribute.t.Textmsgt.Optional[int]typet.Optional[t.Text]valuer	   contextfilenamec                    [         R                  X< SU< SU< SU< SU< 3	5        Xl        X l        X0l        X@l        XPl        g )Nz: type=z, value=z
, context=z, filename=)	Exception__init__r   r   r    r!   r"   )selfr   r   r    r!   r"   s         Z/Users/admin/workspace/ai/Jarvis/env/lib/python3.13/site-packages/docspec_python/parser.pyr%   ParseError.__init__U   s@     	c4QVX_aij	
 	
     )r!   r"   r   r   r    N)r   r   r   r   r    r   r!   r	   r"   r   returnNone)__name__
__module____qualname____firstlineno____doc____annotations__r%   __static_attributes__ r)   r'   r   r   L   sW    R	K

!
!!0
!9K
!V]
!io
!	
!r)   r   c                   U R                  S5      nUS   R                  5       US'   [        R                  " SR	                  USS  5      5      R                  S5      USS & SR	                  U5      R                  5       $ )N
r      )splitstriptextwrapdedentjoin)sliness     r'   dedent_docstringr>   b   si    GGDMEQx~~E!H		%) 45;;DAE!"I99U!!##r)   TVc                    g Nr3   	predicateiterableas_types      r'   findrG   m       r)   c                    g rB   r3   rC   s      r'   rG   rG   r   rH   r)   c                    g rB   r3   rC   s      r'   rG   rG   w   rH   r)   c                   ^ U c  Ub  UmU4S jn U c   eU HB  nU " U5      (       d  M  Ub+  [        X25      (       d  [        SR                  UU5      5      eUs  $    g)zBasic find function, plus the ability to add an `as_type` argument and
receive a typed result (or raise `TypeError`).

As you might expect, this is really only to make typing easier.
Nc                   > [        U T5      $ rB   )
isinstance)xexpects    r'   <lambda>find.<locals>.<lambda>   s    jF3r)   z6expected predicate to only match type {}, matched {!r})rM   	TypeErrorformat)rD   rE   rF   itemrO   s       @r'   rG   rG   |   sv     W03	   T??#j.G.GLSS  K  r)   c                    g rB   r3   rC   s      r'   getrV      rH   r)   c                    g rB   r3   rC   s      r'   rV   rV      rH   r)   c                X    [        XU5      nUc  [        SR                  X5      5      eU$ )zLike `find`, but raises `ValueError` if `predicate` does not match. Assumes
that `None` means "no match", so don't try to use it to get `None` values in
`iterable`.
z2item not found for predicate {!r} in iterable {!r})rG   
ValueErrorrS   )rD   rE   rF   founds       r'   rV   rV      s2     g.E}MTTU^ijjLr)   c                    [        U [        5      (       a  [        [        U R                  5      5      $ [        [
        R                  R                  U R                  U R                  5      5      $ )zoGet the "type name" for a `blib2to3.pytree.NL`, which is a `Node` or
`Leaf`. For display / debugging purposes.
)rM   r   strr   r   r   tok_namerV   )nls    r'   get_type_namer_      sI     "d9RWW%&&u~~!!"''277344r)      c           	        U R                   c   eSU-  U-  nU R                  (       an  [        SR                  UU R                  R
                  [        U 5      S9US9  U R                   H  n[        XQUS-   S9  M     [        SR                  US	9US9  g[        S
R                  UU R                  R
                  [        U 5      S9US9  g)z}Pretty-print a `blib2to3.pytree.NL` over a bunch of lines, with indents,
to make it easier to read. Display / debugging use.
N z%{indent_s}{class_name}({type_name}, [)indent_s
class_name	type_namefiler6   )rg   _depthz{indent_s}]))rc   z'{indent_s}{class_name}({type_name}, []))r   childrenprintrS   	__class__r,   r_   	pprint_nl)r^   rg   indentrh   rc   childs         r'   rl   rl      s     77V|f$H	{{3::!<<00'+ ; 
 	
 [[Eevz: !n##X#6TB5<<!<<00'+ = 
 	
r)   c                H    [        5       n[        XS9  UR                  5       $ )z+Same as `pprint_nl`, but writes to a `str`.rf   )r   rl   getvalue)r^   sios     r'   
pformat_nlrr      s    
*Cb<<>r)   c                    [        U [        5      (       a%  [        R                  " [        U R
                  5      $ [        SR                  U 5      5      e)NzAexpected node to have a `value` attribute (be a Leaf), given {!r})rM   r
   tcastr\   r    rR   rS   )nodes    r'   	get_valuerw      s<    $vvc4::&&
W^^_cd
eer)   c                  2    \ rS rSr% SrS\S'   SrS\S'   Srg)	ParserOptions   Tboolprint_functionF-treat_singleline_comment_blocks_as_docstringsr3   N)r,   r-   r.   r/   r|   r1   r}   r2   r3   r)   r'   ry   ry      s      ND:?14?r)   ry   c                  F   \ rS rSrSSS jjrSS jrSSS jjr S       SS jjrS S jrS!S jr	S"S	 jr
S#S
 jr          S$S jr        S%S jrS&S jrS'S jrS(S jrS)S jrS*S jrS+S jrS,S jrS-S.S jjrS/S jr    S0S jrS1S jrS2S jrS,S jrSrg)3Parser   Nc                4    U=(       d
    [        5       U l        g rB   )ry   options)r&   r   s     r'   r%   Parser.__init__   s    1-/r)   c                     [        US-   5      $ ! [         a<  n[        UR                  UR                  UR                  UR
                  U5      eSnAff = f)z3
Parses the string *code* to an AST with #lib2to3.
r5   N)r   r   r   r   r    r!   )r&   coder"   excs       r'   parse_to_astParser.parse_to_ast   sN    
	R !-- 	RSWWchh		3;;QQ	Rs    
A7AAc                |   X l         Uc  [        R                  R                  U5      n[        R                  R	                  U5      S   nUS:X  a<  [        R                  R                  [        R                  R                  U5      5      nU R                  USS9n[        UU R                  U5      U/ S9nUR                   Hd  nU R                  XV5      n[        U[        5      (       a  U=R                  U-  sl        M@  U(       d  MI  UR                  R                  U5        Mf     UR                  5         U$ )Nr   r%   T)module_level)namelocation	docstringmembers)r"   ospathbasenamesplitextdirnameget_docstring_from_first_noder   location_fromri   parse_declarationrM   listr   appendsync_hierarchy)r&   astr"   module_namer   modulerv   members           r'   parseParser.parse  s     ''**84K''**;7:Kj( gg..rwwx/HI66s6N	'',	
 LLD++F9F&$''&(%%f- ! 	r)   c                   UR                   [        R                  :X  a  U(       a   eUR                  S   nUR                   [        R                  [        R
                  [        R                  [        R                  [        R                  4;   a  [        U R                  X$5      5      $ UR                   [        R                  :X  a  U R                  X$5      $  g UR                   [        R                  :X  a  U R                  XSU5      $ UR                   [        R                  :X  a  U R!                  XU5      $ UR                   [        R"                  [        R$                  4;   aB  UR                  S   nUR                   [        R                  :X  a  U R                  XSU5      $  g UR                   [        R&                  :X  Ga3  [)        UR                  5      S:X  d   e/ nUR                  S   R                   [        R*                  :X  a  UR                  S   /nOcUR                  S   R                   [        R,                  :X  a  UR                  S   R                  nO UR                  S   R                   5       eU HR  nUR                   [        R*                  :X  d   UR                   5       eUR/                  U R1                  U5      5        MT     U R3                  XR                  S   U5      $ g )Nr   Fr6   T   )r   symssimple_stmtri   import_stmtimport_nameimport_fromimport_as_namesimport_as_namer   parse_import	expr_stmtparse_statementfuncdefparse_funcdefclassdefparse_classdef
async_stmtasync_funcdef	decoratedlen	decorator
decoratorsr   parse_decoratorr   )r&   parentrv   decorationsstmtrn   decorator_nodess          r'   r   Parser.parse_declaration  sT    99(((""?==#Dyy      $$##  D--d9::dnn,++D77 -. + YY$,,&%%fE;GGYY$--'&&v[AAYY4??D,>,>??MM!$EzzT\\)))&{KK *  YY$..(t}}%***K}}Q$$6#'==#3"4q!&&$//9"&--"2";";3dmmA.333u(zzT^^3?UZZ?3""4#7#7#>? ) ))&--2BKPPr)   c                   ^         SU4S jjm[        T" / S/ 4U5      5      nUR                  S/ 5      UR                  S/ 5      UR                  S/ 5      4$ )z
Parses a statement node into three lists, consisting of the leaf nodes
that are the name(s), annotation and value of the expression. The value
list will be empty if this is not an assignment statement (but for example
a plain expression).
c                  > UR                    H  n[        U[        5      (       d'  UR                  S:X  a  U R	                  U5        S/ 4nM?  [        U[        5      (       d'  UR                  S:X  a  U R	                  U5        S/ 4nM{  [        U[        5      (       a*  UR
                  [        [        SS 5      :X  a  T" XU5        M  US   R	                  U5        M     U R	                  U5        U $ )N=r    :
annotation	annassignr6   )ri   rM   r   r    r   r   getattrr   )stackcurrentr   rn   _parses       r'   r   'Parser._split_statement.<locals>._parseK  s     !%..5;;#3ELL)&mG#E400U[[C5GLL)+R0Gt,,wt[Z^?_1_551AJ%%e, ' LL!Lr)   namesr   r    )r   list[tuple[str, list[NL]]]r   ztuple[str, list[NL]]r   r   r*   r   )dictrV   )r&   r   resultr   s      @r'   _split_statementParser._split_statementC  sq    	-	8L	TX	'	" '+6"wmT+J&Kzz'2&

<(DfjjQXZ\F]]]r)   c              #  2  ^ ^^^#    SU 4S jjmSU 4S jjmUR                   [        R                  :X  aW  UR                  S   nUR                   [        R                  :X  a  U4S jUR                   5        S h  vN   g T" U5      v   g UR                   [        R
                  :X  a  [        S [        UR                  5       5       5      nSR                  U 4S jUR                  SU  5       5      mUR                  US-      nUR                   [        R                  :X  a  UR                  US-      nUR                   [        R                  :X  a   UU4S	 jUR                   5        S h  vN   g T" TU5      v   g [        S
U< 35      e GN N#7f)Nc                X  > U R                   [        R                  :X  aY  TR                  U R                  S   5      nTR                  U R                  S   5      n[        TR                  U 5      US U5      $ U R                   [        R                  :X  a@  TR                  U 5      n[        TR                  U 5      UR                  S5      S   S U5      $ [        U [        5      (       a1  [        TR                  U 5      U R                  S U R                  5      $ [        SU < 35      e)Nr   r   .cannot handle )r   r   dotted_as_namename_to_stringri   r   r   dotted_namer7   rM   r
   r    RuntimeError)rv   targetr   r&   s      r'   _single_import_to_indirection:Parser.parse_import.<locals>._single_import_to_indirection`  s    yyD///,,T]]1-=>**4==+;<"4#5#5d#;T4PPd...**40"4#5#5d#;TZZ_R=PRVX\]]D$''"4#5#5d#;TZZtzzZZ"^D8#<==r)   c                  > UR                   [        R                  :X  a_  TR                  UR                  S   5      nTR                  UR                  S   5      n[        TR                  U5      US U S-   U-   5      $ [        U[        5      (       aK  TR                  U5      nU R                  S5      (       d  U S-  n [        TR                  U5      US X-   5      $ [        SU< 35      e)Nr   r   r   r   )r   r   r   r   ri   r   r   rM   r
   endswithr   )prefixrv   r   r   r&   s       r'   _from_import_to_indirection8Parser.parse_import.<locals>._from_import_to_indirectionm  s    yyD///,,T]]1-=>**4==+;<"4#5#5d#;T4RUX^I^__D$''**40s++cMF"4#5#5d#;T4WW"^D8#<==r)   r6   c              3  r   >#    U  H,  oR                   [        R                  :w  d  M"  T" U5      v   M.     g 7frB   )r   r   COMMA).0nr   s     r'   	<genexpr>&Parser.parse_import.<locals>.<genexpr>}  s1     uF[_e_einitit_t<9!<<F[s   !77c              3     #    U  HR  u  p[        U[        5      (       d  M  UR                  [        R                  :X  d  M<  UR
                  S :X  d  MN  Uv   MT     g7f)importN)rM   r
   r   r   NAMEr    )r   ir   s      r'   r   r     sK      4DAa& +,66UZZ+? DEGGxDW 4s   AAA	A c              3  F   >#    U  H  nTR                  U5      v   M     g 7frB   )r   )r   rN   r&   s     r'   r   r     s!     R;Qa4..q11;Qs   !r   c              3     >#    U  HM  nUR                   [        R                  [        R                  [        R                  4;  d  MB  T" TU5      v   MO     g 7frB   )r   r   LPARRPARr   )r   r   r   r   s     r'   r   r     sD      2vvejj%**ekk%JJ 9/a882s   AAAzdont know how to deal with )rv   t.Union[Node, Leaf]r*   r   )r   r\   rv   r   r*   r   )r   r   r   ri   dotted_as_namesr   next	enumerater;   r   r   r   r   )r&   r   rv   subject_nodeindexr   r   r   s   `    @@@r'   r   Parser.parse_import_  sN    	>	> 99(((==+L  D$8$88ulF[F[uuu3LAAYY$*** %dmm4 E
 77R4==5;QRRD==3L  EJJ.#}}UQY7  D$8$88)22   2$EE !<THEFF1 vs%   A5F;F<C5F1F2!FFc                ,   U R                  U5      u  p4nS nU(       d  U(       a  U R                  U5      nU(       a  U R                  U5      OS nU(       a  U R                  U5      OS n	U(       a  [        U5      S:X  d   X#45       eUS   R                  [
        R                  :w  a  g U(       d6  U R                  UR                  S   R                  UR                  S   5      nU R                  U5      n
[        U
U R                  U5      UU	US9nU$ )Nr6   r   r   )r   r   r   datatyper    )r   get_statement_docstringnodes_to_stringr   r   r   r   prepare_docstringri   r   r   r   )r&   r   r   r   r   r    datar   exprannotation_as_stringr   s              r'   r   Parser.parse_statement  s    #'#8#8#> 5%)J44T:I274''.TDGQ4#7#7
#CW[ SZ1_;tm;, Qx}}

*
  226??23F3M3Mv_aObc	''.D++D1#-D r)   c                6   [        UR                  S   5      S:X  d   eUR                  S   R                  [        R                  :X  ae  U R                  UR                  S   R                  S   5      nU R                  UR                  S   R                  SS  5      R                  5       nOJU R                  UR                  S   5      nU R                  UR                  SS  5      R                  5       n[        U R                  U5      X#=(       d    S S9$ )Nr   @r6   r   )r   r   args)
rw   ri   r   r   powerr   r   r8   r   r   )r&   rv   r   	call_exprs       r'   r   Parser.parse_decorator  s    q)*c111 ==  DJJ.&&t}}Q'7'@'@'CDD,,T]]1-=-F-Fqr-JKQQSI &&t}}Q'78D,,T]]12->?EEGI4#5#5d#;$M^Z^__r)   c           
        [        S UR                  [        S9n[        S UR                  [        S9=(       d    [        S UR                  [        S9n[	        UR                  S   5      nU R                  U5      nU R                  U5      n	U R                  U5      n
U=(       d    / n[        UU R                  U5      UU(       a  S/OS U	U
US9$ )Nc                <    U R                   [        R                  :H  $ rB   )r   r   
parametersrN   s    r'   rP   &Parser.parse_funcdef.<locals>.<lambda>  s    166T__#<r)   rF   c                <    U R                   [        R                  :H  $ rB   r   r   suiter  s    r'   rP   r    s    aff

2r)   c                <    U R                   [        R                  :H  $ rB   )r   r   r   r  s    r'   rP   r    s    aff 0 00r)   r6   async)r   r   r   	modifiersr   return_typer   )
rV   ri   r   rG   rw   r   parse_parametersget_return_annotationr   r   )r&   r   rv   is_asyncr   r  bodyr   r   r   return_s              r'   r   Parser.parse_funcdef  s     <dmmUYZ
2DMM4P 
TW0$--U
 q)*66t<	$$Z0,,T2!'R''-#+wi#
 	
r)   c                v  ^  SU 4S jjnUc   eT R                  U5      nU" U5      u  pgUS;  d   [        U5      5       eUR                  5       nSnU(       aU  UR                  [        R
                  :X  a7  UR                  5       nUc   eT R                  U/5      nUR                  5         [        UUUUUS9$ )z
Parses an argument from the AST. *node* must be the current node at
the current position of the *scanner*. The scanner is used to extract
the optional default argument value that follows the *node*.
c                  > U R                   [        R                  [        R                  4;   a  [	        U R
                  5      n[        UR                  5      nUR                  5       n U R                   [        R                  :X  d   U R                  5       eUR                  5       n TR                  U /5      nX#4$ U (       a  [        U 5      nS nX#4$ [        SR                  U 5      5      e)Nzunexpected node: {!r})r   r   tname
tname_starr   ri   rw   r   r   r   COLONr   r   r   rS   )rv   scannerr   r   r&   s       r'   parse_annotated_name3Parser.parse_argument.<locals>.parse_annotated_name  s    yyTZZ99(7 1||~yyEKK/<</||~!114&9
 %%  !
 %% ##:#A#A$#GHHr)   Nz/*)r   r   r   r   default_value)rv   r   r*   ztuple[str, t.Optional[str]])r   repradvancer   r   EQUALr   r   )	r&   rv   argtyper  r  r   r   r   defaults	   `        r'   parse_argumentParser.parse_argument  s    	& %%d+/54+d+ DII,??$D###**D62GOO!
 	
r)   c                ~   UR                   [        R                  :X  d   UR                   5       e/ n[        S UR                  5      nU(       Gd5  [        S UR                  5      nU(       ak  [        UR                  UR                  R                  U5      5      nUR                  U R                  U[        R                  R                  U5      5        U$ [        UR                  5      S;   d   UR                  5       e[        UR                  5      S:X  ag  UR                  [        U R                  UR                  S   5      [        UR                  S   5      [        R                  R                  S S S S95        U$ [        R                  R                  n[        UR                  5      nUR                  5        GHs  nUR                   nUR                   ["        R$                  :X  a  U[        R                  R                  :X  d   eU HQ  n	U	R                   [        R                  R                  :X  d   U	5       e[        R                  R&                  U	l         MS     UR)                  5       nUb2  UR                   ["        R*                  :X  a  UR)                  5         M  M  M  UR                   ["        R,                  :X  a  UR/                  5       nU(       aX  UR                   ["        R*                  :w  a:  UR                  U R                  U[        R                  R0                  U5      5        UR)                  5         [        R                  R2                  nGM  U(       a  UR                   ["        R4                  :X  aw  UR/                  5       nUR                  U R                  U[        R                  R6                  U5      5        [        R                  R2                  nUR)                  5         GMB  UR                  U R                  XU5      5        UR)                  5         GMv     U$ )Nc                <    U R                   [        R                  :H  $ rB   )r   r   typedargslistr  s    r'   rP   )Parser.parse_parameters.<locals>.<lambda>  s    4+=+=!=r)   c                <    U R                   [        R                  :H  $ rB   )r   r   r  r  s    r'   rP   r)  !  s    166TZZ#7r)   )r      r+  r6   )r   r   r   r   r   r  )r   r   r  rG   ri   r   r   r   r$  r   Type
POSITIONALr   r   rw   	safe_iterr   r   SLASHPOSITIONAL_ONLYr   r   STARr   POSITIONAL_REMAINDERKEYWORD_ONLY
DOUBLESTARKEYWORD_REMAINDER)
r&   r  r   arglistr  r  r"  r   rv   args
             r'   r  Parser.parse_parameters  s   $//1B:??B1#%=z?R?RS 79L9LME()<)<j>Q>Q>W>WX]>^_d11%9Q9QSZ[\ M :../69N:;N;NN9z**+q0MM %)%7%7
8K8KA8N%O!*:+>+>q+A!B!)!9!9(,%)*.	 M--**w//0OO%D==DyyEKK'(--":"::::!C88x}}'?'??DD?'}}<<CH " }}#		U[[(@MMO )A# ejj(zz|DII4MM$"5"5dHMM<^<^`e"fg"--44$))u'7'77zz|d11$8W8WY^_`"--44 d11$GHE &H r)   c                6   S n/ nUR                   S S S2    H}  nUR                  [        R                  :X  aB  UR                   S   R                  U R                  UR                   SS  5      peUS:X  a  UnMa  Mc  UR                  [        U5      5        M     X#4$ Nr   r   	metaclass)ri   r   r   argumentr    r   r   r\   )r&   	classargsr;  basesrn   keyr    s          r'   parse_classdef_arglistParser.parse_classdef_arglist^  s    	''!,EzzT]]*"^^A.44d6J6J5>>Z[Z\K]6^U+% %I SZ( - r)   c                   S n/ n[        UR                  S5      nUR                  R                  [        R
                  :X  Ga  UR                  5         UR                  R                  [        R                  :w  a  UR                  R                  [        R                  :X  aO  UR                  R                  S   R                  n[        UR                  R                  S   5      nUS:X  a  UnO%O$UR                  [        UR                  5      5        UR                  5         UR                  R                  [        R                  :w  a  M  X#4$ r:  )r   ri   r   r   r   r   r   r   r   r<  r    r\   r   )r&   r   r;  r>  r   r?  r    s          r'   parse_classdef_rawargsParser.parse_classdef_rawargsm  s    	x00!4==+JJL--$$

2==%%6--00399C 6 6q 9:Ek)$)	 LLU]]!34

 --$$

2 r)   c                v   [        UR                  S   5      n/ nS n[        S UR                  5      nU(       a  U R                  U5      u  peOU R	                  U5      u  pe[        S UR                  5      nU(       a  U R                  U5      OS n	[        UU R                  U5      U	UU V
s/ s H  oR                  5       PM     sn
U/ S9nU(       a  UR                  O/  H  n[        U[        5      (       d  M  U R                  X5      =(       d    / n[        U[        5      (       d  U/nU Ht  n[        U[        5      (       a   eUc3  [        U[        5      (       a  UR                  S:X  a  UR                   nMP  U(       d  MY  UR"                  R%                  U5        Mv     M     Xkl        U$ s  sn
f )Nr6   c                <    U R                   [        R                  :H  $ rB   )r   r   r6  r  s    r'   rP   'Parser.parse_classdef.<locals>.<lambda>  s    166T\\#9r)   c                <    U R                   [        R                  :H  $ rB   r
  r  s    r'   rP   rG    s    qvv3r)   )r   r   r   r;  r>  r   r   __metaclass__)rw   ri   rG   r@  rC  r   r   r   r8   rM   r   r   r   r   r   r   r    r   r   r;  )r&   r   rv   r   r   r>  r;  r=  r  r   bclass_rn   r   r   s                  r'   r   Parser.parse_classdef  sy   q)*	 94==I	#::9EIu#::4@I3T]]CAFD66u=D	''-&+,e779e,#
 (-U^^"4E%&&00?E2!'400&iG%F)&&9999 (Z-I-Ifkk]lNl$*LL	--f5 & 5 %% -s   /F6c                X    UR                  5       nUc  Sn[        U R                  U5      $ )Nr   )
get_linenor   r"   )r&   rv   linenos      r'   r   Parser.location_from  s+     ">Fv..r)   c                    [        S UR                  5      nU(       a/  UR                  (       d   eU R                  UR                  /5      $ g )Nc                <    U R                   [        R                  :H  $ rB   )r   r   RARROWr  s    r'   rP   .Parser.get_return_annotation.<locals>.<lambda>  s    %,, 6r)   )rG   ri   next_siblingr   )r&   rv   rarrows      r'   r  Parser.get_return_annotation  sB    6F&&&&'')<)<(=>>r)   c                
   UR                   (       a%  [        R                  " [        UR                   5      $ UR                  (       dS  UR                   (       dB  UR
                  (       d  gUR
                  nUR                  (       d  UR                   (       d  MB  UR                   (       a%  [        R                  " [        UR                   5      $ [        UR                  [        5      (       ap  UR                  R                  (       aU  UR                  R                  S   n[        UR                  [        5      (       a  UR                  R                  (       a  MU  [        R                  " [        UR                   5      $ )Nr   r   )	r   rt   ru   r\   prev_siblingr   rM   r   ri   r&   rv   s     r'   get_most_recent_prefixParser.get_most_recent_prefix  s    ;;66#t{{++##DKK;;;;D ##DKKK ;;66#t{{++**D11d6G6G6P6P$$--b1D **D11d6G6G6P6P6Pvvc4;;''r)   c                   Uc   e[        SUR                  [        S9nU(       aq  UR                  [        R
                  :X  aS  UR                  S   R                  [        R                  :X  a(  U R                  [        UR                  S   5      U5      $ U(       d  U(       d  gU R                  R                  (       a$  U R                  U=(       d    U5      u  pEUS:X  a  U$ g)zp
This method retrieves the docstring for the block node *parent*. The
node either declares a class or function.
Nr  r   block)rG   ri   r   r   r   r   r   STRINGr   rw   r   r}   !get_hashtag_docstring_from_prefix)r&   r   r   rv   r   doc_types         r'   r   $Parser.get_docstring_from_first_node  s     !!!D&//48DII!1!11dmmA6F6K6Ku||6[)))DMM!4D*EvNNL<<EE"&"H"HQW"XI7"  r)   c                   U R                  U5      n[        R                  " SUS S S2   5      nUc   eUR                  S5      nUR	                  S5      S:X  a  U R                  U5      u  pVUS:X  a  U$ UnU(       aQ  UR                  [        R                  :w  a3  UR                  nU(       a   UR                  [        R                  :w  a  M3  U(       a  UR                  (       a  UR                  R                  [        R                  :X  aj  UR                  R                  S   nUR                  [        R                  :X  a3  [        U[        5      (       d   eU R!                  UR"                  U5      $ g )Nz\s*r   r   r5   r6   	statement)r[  rematchgroupcountr`  r   r   r   r   rU  ri   r   r_  rM   r
   r   r    )	r&   rv   r   rf  wsr   ra  currstring_literals	            r'   r   Parser.get_statement_docstring  s'   ,,T2".   [[^88D>Q"&"H"H"NI;&  #tyyD$4$44;;D tyyD$4$44D%%$*;*;*@*@DDTDT*T!..77:N""ell2!.$7777--n.B.BNSSr)   c                   U R                  U5      n/ nSn[        UR                  S5      5       H  nUR                  5       nU(       a  UR	                  S5      (       d    OxUc'  UR                  5       R	                  S5      (       a  SnO)Uc&  UR                  5       R	                  S5      (       a  SnU(       d	  U(       d  M  UR                  U5        M     U R                  SR                  [        U5      5      U5      U4$ )a{  
Given a node in the AST, this method retrieves the docstring from the
closest prefix of this node (ie. any block of single-line comments that
precede this node).

The function will also return the type of docstring: A docstring that
begins with `#:` is a statement docstring, otherwise it is a block
docstring (and only used for classes/methods).

return: (docstring, doc_type)
Nr5   ##:rd  r^  )r[  reversedr7   r8   
startswithr   r   r;   )r&   rv   r   r=   ra  lines         r'   r`  (Parser.get_hashtag_docstring_from_prefix  s      ,,T2V\\$/0D::<DT__S11DJJL$;$;D$A$A&!djjl&=&=c&B&B"T" 1 %%dii&@$GQQr)   c           	     ^   U R                  U5      nUR                  5       nUR                  S5      (       Ga5  U=R                  UR	                  S5      S-   -  sl        / nS nUR                  S5       H  nUR                  S5      (       a  USS  nO,UR                  S5      (       a  USS  nO [        U5      5       eUc%  [        U5      [        UR                  5       5      -
  nUR                  5       nS[        S[        U5      [        U5      -
  U-
  5      -  U-   nUR                  UR                  5       5        M     [        USR                  U5      R                  5       5      $ U(       a9  [        R                  " U5      n[        U[!        U5      R                  5       5      $ g )Nrn  r5   r   ro  r6   rb   r   )r   r8   rq  rO  rh  r7   r  r   lstripmaxr   rstripr   r;   r   literal_evalr>   )r&   r<   node_for_locationr   r=   initial_indentrr  new_lines           r'   r   Parser.prepare_docstring  s_   %%&78GGI<<OOqwwt}q00OE.2N??4((8D__S))8D,$t*,5!)%(YT[[]1C%CN;;=QD	CM(AN(R!SSV^^X__./ & Xtyy'7'='='?@@  #AX'7':'@'@'BCCr)   c                F   ^ SSU4S jjjmSR                  T" U5      5      $ )z+
Converts a list of AST nodes to a string.
c              3     >#    [        U 5       H`  u  p#U(       a  US:w  a  UR                  v   [        U[        5      (       a  T" UR                  S5       S h  vN   MR  UR
                  v   Mb     g  N7f)Nr   T)r   r   rM   r   ri   r    )nodesskip_prefixr   rv   	generators       r'   r  )Parser.nodes_to_string.<locals>.generator/  sZ     $U+"a1f++%dD))(===**$ , >s   AA6A4A6r   )T)r  z
t.List[NL]r  r{   r*   zt.Iterable[str])r;   )r&   r  r  s     @r'   r   Parser.nodes_to_string*  s#    
	% 	% wwy'((r)   c                    UR                   [        R                  :X  a"  SR                  S UR                   5       5      $ [        U5      $ )Nr   c              3  8   #    U  H  n[        U5      v   M     g 7frB   )rw   )r   rN   s     r'   r   (Parser.name_to_string.<locals>.<genexpr><  s     ?A9Q<<s   )r   r   r   r;   ri   rw   rZ  s     r'   r   Parser.name_to_string:  s7    99(((77????T?"r)   )r"   r   rB   )r   zt.Optional[ParserOptions]r*   r+   )r   r\   r"   r\   r*   r   )r   r   r"   r\   r   z
str | Noner*   r   )r   r   rv   r   r   t.Optional[list[Decoration]]r*   z5t.Union[None, _ModuleMembers, t.List[_ModuleMembers]])r   r   r*   z#tuple[list[NL], list[NL], list[NL]])r   r   rv   r   r*   zt.Iterable[Indirection])r   r   r   r   r*   zt.Optional[Variable])rv   r   r*   r   )
r   r   rv   r   r  r{   r   r  r*   r   )rv   zt.Optional[NL]r"  zArgument.Typer  zSequenceWalker[NL]r*   r   )r  r   r*   zlist[Argument])r=  r   r*   tuple[str | None, list[str]])r   r   r*   r  )r   r   rv   r   r   r  r*   r   )rv   r   r*   r   )rv   r   r*   zt.Optional[str]rv   r   r*   r\   )F)r   r   r   r{   r*   t.Optional[Docstring])rv   r   r*   r  )rv   r   r*   z/t.Tuple[t.Optional[Docstring], t.Optional[str]])r<   r\   ry  r   r*   r  )r  zlist[NL]r*   r\   )r,   r-   r.   r/   r%   r   r   r   r   r   r   r   r   r$  r  r@  rC  r   r   r  r[  r   r   r`  r   r   r   r2   r3   r)   r'   r   r      s   2R8 QU%% "%1M%	>%N^86Gp"H`,

"&
26
Ea
	
0.
.
 .
 $	.

 
.
`CJ  (&P/(,(RR 
9R@4) #r)   r   )r<   r\   r*   r\   rB   )rD   t.Callable[[T], t.Any]rE   t.Iterable[T]rF   r+   r*   zT | None)rD   r  rE   r  rF   type[V]r*   V | None)rD   r+   rE   r  rF   r  r*   r  )rD   zt.Callable[[T], t.Any] | NonerE   r  rF   type[V] | Noner*   zT | V | None)rD   t.Callable[[T], object]rE   r  rF   r+   r*   r?   )rD   r  rE   r  rF   r  r*   r@   )rD   r  rE   r  rF   r  r*   zT | V)r^   r   r*   r\   )
r^   r   rg   z	t.IO[str]rm   intrh   r  r*   r+   r  )?r0   
__future__r   r   dataclassesloggingr   re  sysr9   typingrt   ior   blib2to3.pgen2.parseblib2to3black.parsingr   blib2to3.pgen2r   blib2to3.pygramr   r   blib2to3.pytreer   r	   r
   r   r   docspecr   r   r   r   r   r   r   r   r   r   nr.util.iterr   	getLoggerr,   _LOGpgen2r   r   r>   TypeVarr?   r@   overloadrG   rV   r_   stdoutrl   rr   rw   	dataclassry   r   r3   r)   r'   <module>r     s  , # 
   	 	 
     '   2 > >   ($ "!%%00 !,$ IIcNIIcN      
 bf,8EP^6    
5 ),

!ST 
>f 	@ 	@ 	@N	# N	#r)   