ó
    áÅŸgp  ã            	       óþ  • % S r SSKJrJr  SSKJrJrJrJr  SSK	J
r
  SrSSKrSSKJr  Sr\\S	'   0 q\\\\\4   4   \S
'   S\S\\\4   4S jr\" SSS9r\S   r\\\\\4   4   r\\\\   \\   \\\      4   r " S S5      r " S S\5      r " S S\5      rS\
S\S\4S jr\\\4   r  " S S5      r! " S S\!5      r" " S S\!5      r# " S  S!\!5      r$ " S" S#\!5      r%S$\\!   S%\\   S\\\\ 4      4S& jr&g)'zÌ
Python parse tree definitions.

This is a very concrete parse tree; we need to keep every token and
even the comments and whitespace between tokens.

There's also a pattern matching implementation here.
é    )ÚIterableÚIterator)ÚAnyÚOptionalÚTypeVarÚUnion)ÚGrammarz#Guido van Rossum <guido@python.org>N)ÚStringIOiÿÿÿÚHUGEÚ_type_reprsÚtype_numÚreturnc                 ó.  • [         (       dv  SSKJn  [        US5      (       d  UR	                  S S9  [        UR                  5       H7  n[        UR                  U5      n[        U5      [        :X  d  M.  U[         U'   M9     [         R                  X 5      $ )Né   )ÚpygramÚpython_symbols)Ú	cache_dir)r   Ú r   ÚhasattrÚ
initializeÚdirr   ÚgetattrÚtypeÚintÚ
setdefault)r   r   ÚnameÚvals       ÚP/var/www/blue/EV-Temp_rev04/venv/lib/python3.13/site-packages/blib2to3/pytree.pyÚ	type_reprr      s{   € çŠ;Ýä�vÐ/×0Ñ0Ø×Ñ¨ÐÑ-ô ˜×-Ñ-Ö.ˆDÜ˜&×/Ñ/°Ó6ˆCÜ�C‹yœCÕØ#'”˜CÓ ñ /ô ×!Ñ! (Ó5Ð5ó    Ú_PÚBase)Úbound)ÚNodeÚLeafc                   óº  • \ rS rSr% Sr\\S'   Sr\S   \S'   \	\
   \S'   Sr\\S	'   Sr\\S
'   S rS\S\4S jr\S\4S j5       rS\S\S\4S jrS\S\S\4S jrS\S\4S jrS\\
   4S jrS\\
   4S jrS\\
\	\
   4   SS4S jrS\\   4S jrS#S jrS\\   4S jr\S\\
   4S j5       r \S\\
   4S j5       r!S\S   4S jr"S\4S  jr#S\4S! jr$S"r%g)$r"   é6   z®
Abstract base class for Node and Leaf.

This provides some default functionality and boilerplate using the
template pattern.

A node may be a subnode of at most one parent.
r   Nr$   ÚparentÚchildrenFÚwas_changedÚwas_checkedc                 óL   • U [         Ld   S5       e[        R                  U 5      $ )z7Constructor that prevents Base from being instantiated.zCannot instantiate Base)r"   ÚobjectÚ__new__©ÚclsÚargsÚkwdss      r   r.   ÚBase.__new__G   s#   € àœ$ŠÐ9Ð 9Ó9ˆÜ�~‰~˜cÓ"Ð"r    Úotherr   c                 ób   • U R                   UR                   La  [        $ U R                  U5      $ )z?
Compare two nodes for equality.

This calls the method _eq().
)Ú	__class__ÚNotImplementedÚ_eq©Úselfr4   s     r   Ú__eq__ÚBase.__eq__L   s(   € ð �>‰> §¡Ò0Ü!Ð!Ø�x‰x˜‹Ðr    c                 ó   • [         e©N©ÚNotImplementedError©r:   s    r   ÚprefixÚBase.prefixV   s   € ä!Ð!r    r:   c                 ó   • [         e)a/  
Compare two nodes for equality.

This is called by __eq__ and __ne__.  It is only called if the two nodes
have the same type.  This must be implemented by the concrete subclass.
Nodes should be considered equal if they have the same structure,
ignoring the prefix string and other context information.
r?   r9   s     r   r8   ÚBase._eqZ   s
   € ô "Ð!r    Úmemoc                 ó"   • U R                  5       $ r>   )Úclone)r:   rF   s     r   Ú__deepcopy__ÚBase.__deepcopy__e   s   € Ø�z‰z‹|Ðr    c                 ó   • [         e)zZ
Return a cloned (deep) copy of self.

This must be implemented by the concrete subclass.
r?   rA   s    r   rH   Ú
Base.cloneh   ó
   € ô "Ð!r    c                 ó   • [         e)z`
Return a post-order iterator for the tree.

This must be implemented by the concrete subclass.
r?   rA   s    r   Ú
post_orderÚBase.post_orderp   rM   r    c                 ó   • [         e)z_
Return a pre-order iterator for the tree.

This must be implemented by the concrete subclass.
r?   rA   s    r   Ú	pre_orderÚBase.pre_orderx   rM   r    Únewc                 óZ  • U R                   c   [        U 5      5       eUc   e[        U[        5      (       d  U/n/ nSnU R                   R                   HT  nX@L a<  U(       a   U R                   R                  X45       eUb  UR                  U5        SnMC  UR                  U5        MV     U(       d   U R                  X45       eX R                   l        U R                   R                  5         U R                   R                  5         U H  nU R                   Ul         M     SU l         g)z/Replace this node with a new one in the parent.NFT)	r(   ÚstrÚ
isinstanceÚlistr)   ÚextendÚappendÚchangedÚinvalidate_sibling_maps)r:   rT   Ú
l_childrenÚfoundÚchÚxs         r   ÚreplaceÚBase.replace€   sü   € à�{‰{Ñ&Ð1¬¨D«	Ó1Ð&Ø‰ÐˆÜ˜#œt×$Ñ$Ø�%ˆCØˆ
ØˆØ—+‘+×&Ô&ˆBØŠzÞ ÐC 4§;¡;×#7Ñ#7¸Ð"CÓC�yØ‘?Ø×%Ñ% cÔ*Ø’à×!Ñ! "Ö%ñ 'ö Ð0�t—}‘} dÐ0Ó0ˆuØ)�‰ÔØ�‰×ÑÔØ�‰×+Ñ+Ô-ÛˆAØ—{‘{ˆAŽHñ àˆ�r    c                 ó¸   • U n[        U[        5      (       d8  UR                  (       d  gUR                  S   n[        U[        5      (       d  M8  UR                  $ )z9Return the line number which generated the invocant node.Nr   )rW   r%   r)   Úlineno)r:   Únodes     r   Ú
get_linenoÚBase.get_lineno˜   sG   € àˆÜ˜T¤4×(Ñ(Ø—=—=ØØ—=‘= Ñ#ˆDô ˜T¤4×(Ó(ð �{‰{Ðr    c                 óŒ   • U R                   (       a  g U R                  (       a  U R                  R                  5         SU l         g )NT)r*   r(   r[   rA   s    r   r[   ÚBase.changed¡   s-   € Ø××ØØ�;�;Ø�K‰K×ÑÔ!ØˆÕr    c                 ó*  • U R                   (       a‚  [        U R                   R                  5       H_  u  pX L d  M  U R                   R                  U	 U R                   R                  5         U R                   R	                  5         SU l         Us  $    g)zq
Remove the node from the tree. Returns the position of the node in its
parent's children before it was removed.
N)r(   Ú	enumerater)   r[   r\   )r:   Úire   s      r   ÚremoveÚBase.remove¨   sn   € ð
 �;�;Ü$ T§[¡[×%9Ñ%9Ö:‘�Ø”<ØŸ™×,Ñ,¨QÐ/Ø—K‘K×'Ñ'Ô)Ø—K‘K×7Ñ7Ô9Ø"&�D”KØ’Hñ ;ð r    c                 óö   • U R                   c  gU R                   R                  c  U R                   R                  5         U R                   R                  c   eU R                   R                  [        U 5         $ )z‡
The node immediately following the invocant in their parent's children
list. If the invocant does not have a next sibling, it is None
N)r(   Únext_sibling_mapÚupdate_sibling_mapsÚidrA   s    r   Únext_siblingÚBase.next_sibling·   ó`   € ð �;‰;ÑØà�;‰;×'Ñ'Ñ/Ø�K‰K×+Ñ+Ô-Ø�{‰{×+Ñ+Ñ7Ð7Ð7Ø�{‰{×+Ñ+¬B¨t«HÑ5Ð5r    c                 óö   • U R                   c  gU R                   R                  c  U R                   R                  5         U R                   R                  c   eU R                   R                  [        U 5         $ )zŒ
The node immediately preceding the invocant in their parent's children
list. If the invocant does not have a previous sibling, it is None.
N)r(   Úprev_sibling_maprq   rr   rA   s    r   Úprev_siblingÚBase.prev_siblingÅ   ru   r    r%   c              #   óf   #   • U R                    H  nUR                  5        S h  v•N   M     g  N	7fr>   )r)   Úleaves©r:   Úchilds     r   r{   ÚBase.leavesÓ   s%   é € Ø—]”]ˆEØ—|‘|“~×%Ò%ò #Ù%ùs   ‚#1¥/¦
1c                 óX   • U R                   c  gSU R                   R                  5       -   $ )Nr   r   )r(   ÚdepthrA   s    r   r€   Ú
Base.depth×   s'   € Ø�;‰;ÑØØ�4—;‘;×$Ñ$Ó&Ñ&Ð&r    c                 ó>   • U R                   nUc  gUR                  nU$ )zw
Return the string immediately following the invocant node. This is
effectively equivalent to node.next_sibling.prefix
r   )rs   rB   )r:   Únext_sibrB   s      r   Ú
get_suffixÚBase.get_suffixÜ   s&   € ð
 ×$Ñ$ˆØÑØØ—‘ˆØˆr    )r(   r*   ©r   N)&Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   Ú__annotations__r(   r   rX   ÚNLr*   Úboolr+   r.   r   r;   ÚpropertyrV   rB   r!   r8   rI   rH   r   rO   rR   r   ra   rf   r[   rm   rs   rx   r{   r€   r„   Ú__static_attributes__© r    r   r"   r"   6   s�  ‡ ñð ƒIØ#€FˆH�VÑÓ#Ø�2‰hÓØ€K�ÓØ€K�Óò#ð
˜Cð  Dô ð ð"˜ó "ó ð"ð	"�"ð 	"˜Rð 	" Dô 	"ð˜2ð  Sð ¨Rô ð"�Bð "˜2ô "ð"˜H R™Lô "ð"˜8 B™<ô "ð˜5  T¨"¡X Ñ.ð °4ô ð0˜H S™Mô ô ð˜ ™ô ð ð6˜h r™ló 6ó ð6ð ð6˜h r™ló 6ó ð6ð&˜ Ñ(ô &ð'�sô 'ð
	˜C÷ 	r    c                   óŠ  • \ rS rSr% Sr\\\      \S'   \\	\
      \S'      SS\S\\   S\\   S	\\
   S\\\      S
S4S jjrS
\
4S jrS
\
4S jrS\S
\4S jrSS jrS
\\   4S jrS
\\   4S jr\S
\
4S j5       r\R2                  S	\
S
S4S j5       rS\S\S
S4S jrS\S\S
S4S jrS\S
S4S jrSS jrSS jrSrg) r$   éè   z+Concrete implementation for interior nodes.Úfixers_appliedÚ
used_namesNr   r)   ÚcontextrB   r   c                 ó  • US:¼  d   U5       eXl         [        U5      U l        U R                   H&  nUR                  b   [	        U5      5       eXl        M(     U R                  5         Ub  X@l        U(       a  USS U l        gSU l        g)zÈ
Initializer.

Takes a type constant (a symbol number >= 256), a sequence of
child nodes, and an optional context keyword argument.

As a side effect, the parent pointers of the children are updated.
é   N)r   rX   r)   r(   Úreprr\   rB   r”   )r:   r   r)   r–   rB   r”   r_   s          r   Ú__init__ÚNode.__init__î   s‚   € ð  �s‹{Ð ˜DÓ ˆ{ØŒ	Ü˜X›ˆŒØ—-”-ˆBØ—9‘9Ñ$Ð.¤d¨2£hÓ.Ð$ØŽIñ  ð 	×$Ñ$Ô&ØÑØ ŒKÞØ"0±Ð"3ˆDÕà"&ˆDÕr    c                 ó¨   • U R                   c   eSR                  U R                  R                  [	        U R                   5      U R
                  5      $ )ú)Return a canonical string representation.ú{}({}, {!r}))r   Úformatr6   r‡   r   r)   rA   s    r   Ú__repr__ÚNode.__repr__  sE   € à�y‰yÑ$Ð$Ð$Ø×$Ñ$Ø�N‰N×#Ñ#Ü�d—i‘iÓ Ø�M‰Mó
ð 	
r    c                 óT   • SR                  [        [        U R                  5      5      $ )úS
Return a pretty string representation.

This reproduces the input source exactly.
r   )ÚjoinÚmaprV   r)   rA   s    r   Ú__str__ÚNode.__str__  s   € ð �w‰w”sœ3 §¡Ó.Ó/Ð/r    r4   c                 ód   • U R                   U R                  4UR                   UR                  4:H  $ ©zCompare two nodes for equality.)r   r)   r9   s     r   r8   ÚNode._eq  s'   € à—	‘	˜4Ÿ=™=Ð)¨e¯j©j¸%¿.¹.Ð-IÑIÐIr    c                 ó¸   • U R                   c   e [        U R                   U R                   Vs/ sH  oR                  5       PM     snU R                  S9$ s  snf ©N)r”   )r   r$   r)   rH   r”   )r:   r_   s     r   rH   Ú
Node.clone!  sO   € Ø�y‰yÑ$Ð$Ð$Ø2ÜØ�I‰IØ"&§-¢-Ó0¡-˜B�X‰XŽZ¡-Ñ0Ø×.Ñ.ñ
ð 	
ùâ0s   ¯A
c              #   ón   #   • U R                    H  nUR                  5        Sh  v•N   M     U v •  g N7f©z*Return a post-order iterator for the tree.N)r)   rO   r|   s     r   rO   ÚNode.post_order*  s/   é € à—]”]ˆEØ×'Ñ'Ó)×)Ò)ñ #à‹
ñ *ùs   ‚#5¥3¦5c              #   ón   #   • U v •  U R                    H  nUR                  5        Sh  v•N   M     g N	7f©z)Return a pre-order iterator for the tree.N)r)   rR   r|   s     r   rR   ÚNode.pre_order0  s+   é € àŠ
Ø—]”]ˆEØ—‘Ó(×(Ò(ò #Ù(ùs   ‚'5©3ª
5c                 óX   • U R                   (       d  gU R                   S   R                  $ )z?
The whitespace and comments preceding this node in the input.
r   r   ©r)   rB   rA   s    r   rB   ÚNode.prefix6  s#   € ð
 �}�}ØØ�}‰}˜QÑ×&Ñ&Ð&r    c                 óN   • U R                   (       a  XR                   S   l        g g ©Nr   rµ   ©r:   rB   s     r   rB   r¶   ?  s   € à�=�=Ø&,�M‰M˜!ÑÕ#ð r    rl   r}   c                 ó”   • Xl         SU R                  U   l         X R                  U'   U R                  5         U R                  5         g)zm
Equivalent to 'node.children[i] = child'. This method also sets the
child's parent attribute appropriately.
N)r(   r)   r[   r\   ©r:   rl   r}   s      r   Ú	set_childÚNode.set_childD  s;   € ð
 ŒØ"&ˆ�‰�aÑÔØ �‰�aÑØ�‰ŒØ×$Ñ$Õ&r    c                 ó†   • Xl         U R                  R                  X5        U R                  5         U R	                  5         g)zs
Equivalent to 'node.children.insert(i, child)'. This method also sets
the child's parent attribute appropriately.
N)r(   r)   Úinsertr[   r\   r»   s      r   Úinsert_childÚNode.insert_childO  s0   € ð
 ŒØ�‰×Ñ˜QÔ&Ø�‰ŒØ×$Ñ$Õ&r    c                 ó†   • Xl         U R                  R                  U5        U R                  5         U R	                  5         g)zp
Equivalent to 'node.children.append(child)'. This method also sets the
child's parent attribute appropriately.
N)r(   r)   rZ   r[   r\   r|   s     r   Úappend_childÚNode.append_childY  s0   € ð
 ŒØ�‰×Ñ˜UÔ#Ø�‰ŒØ×$Ñ$Õ&r    c                 ó    • S U l         S U l        g r>   )rw   rp   rA   s    r   r\   ÚNode.invalidate_sibling_mapsc  s   € ØCGˆÔØCGˆÕr    c                 ó¢   • 0 n0 nXl         X l        S nU R                   H  nX1[        U5      '   XB[        U5      '   UnM!     S U[        W5      '   g r>   )rw   rp   r)   rr   )r:   Ú_prevÚ_nextÚpreviousÚcurrents        r   rq   ÚNode.update_sibling_mapsg  sX   € Ø)+ˆØ)+ˆØ %ÔØ %ÔØ!%ˆØ—}”}ˆGØ!)”"�W“+ÑØ")”"�X“,ÑØŠHñ %ð "ˆŒb�‹kÒr    )r)   r”   rp   rB   rw   r   ©NNN)r   r$   r†   ) r‡   rˆ   r‰   rŠ   r‹   r   rX   r   rŒ   ÚsetrV   r   r�   rš   r    r¦   r"   rŽ   r8   rH   r   rO   rR   r�   rB   Úsetterr¼   rÀ   rÃ   r\   rq   r�   r‘   r    r   r$   r$   è   sh  ‡ Ù5à˜T #™YÑ'Ó'Ø˜˜S™Ñ"Ó"ð "&Ø $Ø.2ñ'àð'ð �r‘(ð'ð ˜#‘ð	'ð
 ˜‘ð'ð !  c¡Ñ+ð'ð 
õ'ð<
˜#ô 
ð0˜ô 0ðJ˜ð J $ô Jô
ð˜H R™Lô ð)˜8 B™<ô )ð ð'˜ó 'ó ð'ð ‡]�]ð-˜Sð - Tó -ó ð-ð	'˜3ð 	' rð 	'¨dô 	'ð'˜cð '¨"ð '°ô 'ð' "ð '¨ô 'ôH÷
"r    r$   c                   ó®  • \ rS rSr% Sr\\S'   \\   \S'   \	\S'   Sr
\S    \S'   \\\      \S'   S	rS
r\	\S'   S
r\	\S'   Sr\S    \S'   SS/ SS4S\	S\S\\   S\\   S\\   S\S    S\S    SS4S jjrS\4S jrS\4S jrSS S\4S jrSS jrS\S    4S jrS\S    4S jrS\S    4S jr\S\4S j5       r\R<                  S\SS4S j5       rSrg)r%   it  z'Concrete implementation for leaf nodes.Úvaluer”   Úbracket_depthNÚopening_bracketr•   r   r   rd   ÚcolumnÚfmt_pass_converted_first_leafr   r–   rB   r   c                 óÔ   • SUs=::  a  S:  d   U5       e   U5       eUb  Uu  U l         u  U l        U l        Xl        X l        Ub  X@l         USS U l        / U l        X`l        Xpl        g)zw
Initializer.

Takes a type constant (a token number < 256), a string value, and an
optional context keyword argument.
r   r˜   N)	Ú_prefixrd   rÔ   r   rÑ   r”   r)   rÓ   rÕ   )r:   r   rÑ   r–   rB   r”   rÓ   rÕ   s           r   rš   ÚLeaf.__init__†  ss   € ð" �D�˜3‹Ð$ Ó$‰Ð$ Ó$ˆØÑØ7>Ñ4ˆDŒLÑ4˜4œ;¨¬ØŒ	ØŒ
ØÑØ!ŒLØ3AÁ!Ð3DˆÔØˆŒØ.ÔØ-JÕ*r    c                 óÖ   • SSK Jn  U R                  c   eSR                  U R                  R
                  UR                  U R                  U R                  5      U R                  5      $ )r�   r   )Útok_namerž   )Úpgen2.tokenrÚ   r   rŸ   r6   r‡   ÚgetrÑ   )r:   rÚ   s     r   r    ÚLeaf.__repr__£  sR   € å)à�y‰yÑ$Ð$Ð$Ø×$Ñ$Ø�N‰N×#Ñ#Ø�L‰L˜Ÿ™ D§I¡IÓ.Ø�J‰Jó
ð 	
r    c                 óF   • U R                   [        U R                  5      -   $ )r£   )r×   rV   rÑ   rA   s    r   r¦   ÚLeaf.__str__®  s   € ð �|‰|œc $§*¡*›oÑ-Ð-r    r4   c                 ód   • U R                   U R                  4UR                   UR                  4:H  $ r©   )r   rÑ   r9   s     r   r8   ÚLeaf._eq¶  s'   € à—	‘	˜4Ÿ:™:Ð&¨5¯:©:°u·{±{Ð*CÑCÐCr    c                 óº   • U R                   c   e [        U R                   U R                  U R                  U R                  U R
                  44U R                  S9$ r¬   )r   r%   rÑ   rB   rd   rÔ   r”   rA   s    r   rH   Ú
Leaf.cloneº  sR   € Ø�y‰yÑ$Ð$Ð$Ø2ÜØ�I‰IØ�J‰JØ�[‰[˜4Ÿ;™;¨¯©Ð4Ð5Ø×.Ñ.ñ	
ð 	
r    c              #   ó   #   • U v •  g 7fr>   r‘   rA   s    r   r{   ÚLeaf.leavesÄ  s
   é € Ø‹
ùó   ‚c              #   ó   #   • U v •  g7fr¯   r‘   rA   s    r   rO   ÚLeaf.post_orderÇ  ó
   é € à‹
ùræ   c              #   ó   #   • U v •  g7fr²   r‘   rA   s    r   rR   ÚLeaf.pre_orderË  ré   ræ   c                 ó   • U R                   $ )z@
The whitespace and comments preceding this token in the input.
)r×   rA   s    r   rB   ÚLeaf.prefixÏ  s   € ð
 �|‰|Ðr    c                 ó0   • U R                  5         Xl        g r>   )r[   r×   r¹   s     r   rB   rí   Ö  s   € à�‰ŒØ�r    )	r×   r)   rÔ   r”   rÕ   rd   rÓ   r   rÑ   )r   r%   ) r‡   rˆ   r‰   rŠ   r‹   rV   rŒ   rX   r   r   rÓ   r   rÎ   r×   rd   rÔ   rÕ   ÚContextrš   r    r¦   rŽ   r8   rH   r   r{   rO   rR   r�   rB   rÏ   r�   r‘   r    r   r%   r%   t  sŽ  ‡ Ù1ð ƒJØ˜‘IÓØÓà(,€O�X˜fÑ%Ó,Ø˜˜S™Ñ"Ó"Ø€GØ€FˆCƒOØ€FˆCƒOð 7;Ð! 8¨FÑ#3Ó:ð &*Ø $Ø$&Ø,0Ø:>ñKàðKð ðKð ˜'Ñ"ð	Kð
 ˜‘ðKð ˜S™	ðKð " &Ñ)ðKð (0°Ñ'7ðKð 
õKð:	
˜#ô 	
ð.˜ô .ðD˜ð D Dô Dô
ð˜ Ñ(ô ð˜H VÑ,ô ð˜8 FÑ+ô ð ð˜ó ó ðð ‡]�]ð˜Sð  Tó ó ór    r%   ÚgrÚraw_nodec                 ó¤   • Uu  p#pEU(       d  X R                   ;   a#  Uc   e[        U5      S:X  a  US   $ [        X%US9$ [        X#=(       d    SUS9$ )zá
Convert raw node information to a Node or Leaf instance.

This is passed to the parser driver which calls it whenever a reduction of a
grammar rule produces a new complete node, so that the tree is build
strictly bottom-up.
r   r   )r–   r   )Únumber2symbolÚlenr$   r%   )rð   rñ   r   rÑ   r–   r)   s         r   Úconvertrõ   Ü  s^   € ð &.Ñ"€D�Þ�4×+Ñ+Ó+ð Ñ#Ð#Ð#Üˆx‹=˜AÓØ˜A‘;ÐÜ�D¨GÑ4Ð4ä�DŸ+ 2¨wÑ7Ð7r    c                   óî   • \ rS rSr% Sr\\   \S'   SrSr	\
\S'   Sr\\   \S'   S rS\4S	 jrSS\4S
 jjrSS jrSS\S\\   S\4S jjrSS\\   S\\   S\4S jjrS\\   S\\\\4      4S jrSrg)ÚBasePatternió  ap  
A pattern is a tree matching pattern.

It looks for a specific node type (token or symbol), and
optionally for a specific content.

This is an abstract base class.  There are three concrete
subclasses:

- LeafPattern matches a single leaf node;
- NodePattern matches a single node (usually non-leaf);
- WildcardPattern matches a sequence of nodes of variable length.
r   NÚcontentr   c                 óL   • U [         Ld   S5       e[        R                  U 5      $ )z>Constructor that prevents BasePattern from being instantiated.zCannot instantiate BasePattern)r÷   r-   r.   r/   s      r   r.   ÚBasePattern.__new__  s%   € àœ+Ò%ÐGÐ'GÓGÐ%Ü�~‰~˜cÓ"Ð"r    r   c           	      ó<  • U R                   c   e[        U R                   5      U R                  U R                  /nU(       a  US   c  US	 U(       a  US   c  M  SR	                  U R
                  R                  SR                  [        [        U5      5      5      $ )Néÿÿÿÿz{}({})z, )
r   r   rø   r   rŸ   r6   r‡   r¤   r¥   r™   )r:   r1   s     r   r    ÚBasePattern.__repr__  sz   € Ø�y‰yÑ$Ð$Ð$Ü˜$Ÿ)™)Ó$ d§l¡l°D·I±IÐ>ˆÞ�t˜B‘xÑ'Ø�R�ö �t˜B‘xÓ'à�‰˜tŸ~™~×6Ñ6¸¿	¹	Ä#ÄdÈDÃ/Ó8RÓSÐSr    c                 ó   • [         er>   r?   ©r:   re   Úresultss      r   Ú	_submatchÚBasePattern._submatch  s   € Ü!Ð!r    c                 ó   • U $ )zt
A subclass can define this as a hook for optimizations.

Returns either self or another node with the same effect.
r‘   rA   s    r   ÚoptimizeÚBasePattern.optimize  s	   € ð ˆr    re   r   c                 ó(  • U R                   b  UR                   U R                   :w  a  gU R                  b;  SnUb  0 nU R                  X5      (       d  gU(       a  Uc   eUR                  U5        Ub  U R                  (       a  XU R                  '   g)zó
Does this pattern exactly match a node?

Returns True if it matches, False if not.

If results is not None, it must be a dict which will be
updated with the nodes matching named subpatterns.

Default implementation for non-wildcard patterns.
NFT)r   rø   r  Úupdater   )r:   re   r   Úrs       r   ÚmatchÚBasePattern.match  s‚   € ð �9‰9Ñ  T§Y¡Y°$·)±)Ó%;ØØ�<‰<Ñ#Ø$(ˆAØÑ"Ø�Ø—>‘> $×*Ñ*ØÞØÑ*Ð*Ð*Ø—‘˜qÔ!ØÑ 4§9§9Ø!%�D—I‘IÑØr    Únodesc                 óL   • [        U5      S:w  a  gU R                  US   U5      $ )zi
Does this pattern exactly match a sequence of nodes?

Default implementation for non-wildcard patterns.
r   Fr   )rô   r	  ©r:   r  r   s      r   Ú	match_seqÚBasePattern.match_seq9  s'   € ô ˆu‹:˜‹?ØØ�z‰z˜% ™( GÓ,Ð,r    c              #   ób   #   • 0 nU(       a"  U R                  US   U5      (       a  SU4v •  ggg7f)ze
Generator yielding all matches for this pattern.

Default implementation for non-wildcard patterns.
r   r   N)r	  )r:   r  r  s      r   Úgenerate_matchesÚBasePattern.generate_matchesC  s3   é € ð ˆÞ�T—Z‘Z  a¡¨!×,Ñ,Ø�Q�$‹Jð -ˆ5ùs   ‚-/r‘   r>   )r   r÷   )r‡   rˆ   r‰   rŠ   r‹   r   r   rŒ   r   rø   r   r   rV   r.   r    rŽ   r  r  r�   Ú_Resultsr	  rX   r  r   Útupler  r�   r‘   r    r   r÷   r÷   ó  s¼   ‡ ñð �3‰-ÓØ€DØ€GˆSÓØ€Dˆ(�3‰-Óò#ð
T˜#ô Tñ"¨tõ "ôñ˜"ð  x°Ñ'9ð ÀTõ ñ4-˜t B™xð -°(¸8Ñ2Dð -ÐPTõ -ð d¨2¡hð °8¸EÀ#ÀxÀ-Ñ<PÑ3Q÷ r    r÷   c            	       ój   • \ rS rSr   SS\\   S\\   S\\   SS4S jjrSS\S\	4S	 jjr
SS
 jrSrg)ÚLeafPatterniN  Nr   rø   r   r   c                 ó¶   • Ub  SUs=::  a  S:  d   U5       e   U5       eUb%  [        U[        5      (       d   [        U5      5       eXl        X l        X0l        g)a8  
Initializer.  Takes optional type, content, and name.

The type, if given must be a token type (< 256).  If not given,
this matches any *leaf* node; the content may still be required.

The content, if given, must be a string.

If a name is given, the matching node is stored in the results
dict under that key.
Nr   r˜   )rW   rV   r™   r   rø   r   )r:   r   rø   r   s       r   rš   ÚLeafPattern.__init__O  sZ   € ð" ÑØ˜•?˜s“?Ð( DÓ(‘?Ð( DÓ(�?ØÑÜ˜g¤s×+Ñ+Ð:¬T°'«]Ó:Ð+ØŒ	ØŒØ�	r    re   c                 óZ   • [        U[        5      (       d  g[        R                  XU5      $ )z*Override match() to insist on a leaf node.F)rW   r%   r÷   r	  rÿ   s      r   r	  ÚLeafPattern.matchh  s%   € ä˜$¤×%Ñ%ØÜ× Ñ  ¨WÓ5Ð5r    c                 ó4   • U R                   UR                  :H  $ )áL  
Match the pattern's content to the node's children.

This assumes the node type matches and self.content is not None.

Returns True if it matches, False if not.

If results is not None, it must be a dict which will be
updated with the nodes matching named subpatterns.

When returning False, the results dict may still be updated.
)rø   rÑ   rÿ   s      r   r  ÚLeafPattern._submatchn  s   € ð �|‰|˜tŸz™zÑ)Ð)r    )rø   r   r   rÍ   r>   )r‡   rˆ   r‰   rŠ   r   r   rV   rš   r�   rŽ   r	  r  r�   r‘   r    r   r  r  N  s\   † ð #Ø!%Ø"ñ	à�s‰mðð ˜#‘ðð �s‰mð	ð
 
õñ26˜"ð 6¨tõ 6÷*r    r  c            	       ór   • \ rS rSr% Sr\\S'      SS\\   S\\	\
      S\\
   SS4S	 jjrSS\4S
 jjrSrg)ÚNodePatterni~  FÚ	wildcardsNr   rø   r   r   c                 óN  • Ub  US:¼  d   U5       eUb  [        U[        5      (       a   [        U5      5       e[        U5      n[	        U5       H@  u  pV[        U[
        5      (       d   XV45       e[        U[        5      (       d  M9  SU l        MB     Xl        WU l	        X0l
        g)a  
Initializer.  Takes optional type, content, and name.

The type, if given, must be a symbol type (>= 256).  If the
type is None this matches *any* single node (leaf or not),
except if content is not None, in which it only matches
non-leaf nodes that also match the content pattern.

The content, if not None, must be a sequence of Patterns that
must match the node's children exactly.  If the content is
given, the type must not be None.

If a name is given, the matching node is stored in the results
dict under that key.
Nr˜   T)rW   rV   r™   rX   rk   r÷   ÚWildcardPatternr   r   rø   r   )r:   r   rø   r   Ú
newcontentrl   Úitems          r   rš   ÚNodePattern.__init__�  sš   € ð* ÑØ˜3“;Ð$ Ó$�;ØÑÜ! '¬3×/Ñ/Ð>´°g³Ó>Ð/Ü˜g›ˆJÜ$ ZÖ0‘�Ü! $¬×4Ñ4Ð?°q°iÓ?Ð4ô ˜d¤O×4Ó4Ø%)�D–Nñ 1ð Œ	Ø!ˆŒØ�	r    c                 ó´  • U R                   (       aY  [        U R                  UR                  5       H4  u  p4U[	        UR                  5      :X  d  M   Ub  UR                  U5          g   g[	        U R                  5      [	        UR                  5      :w  a  g[        U R                  UR                  5       H  u  pVUR                  Xb5      (       a  M    g   g)r  TF)r   r  rø   r)   rô   r  Úzipr	  )r:   re   r   Úcr  Ú
subpatternr}   s          r   r  ÚNodePattern._submatch¦  s¥   € ð �>�>Ü(¨¯©°t·}±}ÖE‘�Øœ˜DŸM™MÓ*Õ*ØÑ*ØŸ™ qÔ)Ùñ	 Fð
 Üˆt�|‰|Ó¤ D§M¡MÓ 2Ó2ØÜ!$ T§\¡\°4·=±=Ö!AÑˆJØ×#Ñ# E×3Ó3Ùñ "Bð r    )rø   r   r   r   rÍ   r>   )r‡   rˆ   r‰   rŠ   r   rŽ   rŒ   r   r   r   rV   rš   r  r�   r‘   r    r   r  r  ~  se   ‡ Ø€IˆtÓð #Ø+/Ø"ñ	#à�s‰mð#ð ˜( 3™-Ñ(ð#ð �s‰mð	#ð
 
õ#ñJ¨t÷ ð r    r  c                   ó  • \ rS rSr% Sr\\S'   \\S'   SS\S4S\\	   S\S\S\\	   S	S4
S
 jjr
S	\4S jrSS	\4S jjrSS	\4S jjrS	\\\\4      4S jrS	\\\\4      4S jrS	\\\4   4S jrS	\\\\4      4S jrSrg)r"  iÂ  zô
A wildcard pattern can match zero or more nodes.

This has all the flexibility needed to implement patterns like:

.*      .+      .?      .{m,n}
(a b c | d e | f)
(...)*  (...)+  (...)?  (...){m,n}

except it always uses non-greedy matching.
ÚminÚmaxNr   rø   r   r   c                 ó@  • SUs=::  a  Us=::  a
  [         ::  d
  O   X#45       eUb`  S n[        [        XQ5      5      n[        U5      (       d   [	        U5      5       eU H#  n[        U5      (       a  M   [	        U5      5       e   WU l        X l        X0l        X@l        g)a7  
Initializer.

Args:
    content: optional sequence of subsequences of patterns;
             if absent, matches one node;
             if present, each subsequence is an alternative [*]
    min: optional minimum number of times to match, default 0
    max: optional maximum number of times to match, default HUGE
    name: optional name assigned to this match

[*] Thus, if content is [[a, b, c], [d, e], [f, g, h]] this is
    equivalent to (a b c | d e | f g h); if content is None,
    this is equivalent to '.' in regular expression terms.
    The min and max parameters work as follows:
        min=0, max=maxint: .*
        min=1, max=maxint: .+
        min=0, max=1: .?
        min=1, max=1: .
    If content is not None, replace the dot with the parenthesized
    list of alternatives, e.g. (a b c | d e | f g h)*
r   Nc                 ó   • [        U 5      $ r>   )r  )Úss    r   Ú<lambda>Ú*WildcardPattern.__init__.<locals>.<lambda>ñ  s   € œ% œ(r    )	r   r  r¥   rô   r™   rø   r,  r-  r   )r:   rø   r,  r-  r   ÚfÚwrapped_contentÚalts           r   rš   ÚWildcardPattern.__init__Ò  s—   € ð: �CÕ&˜3Õ&¤$Õ&Ð2¨¨
Ó2Ð&ØÑÙ"ˆAÜ#¤C¨£OÓ4ˆOä�×'Ñ'ð ¬Øó*ó Ð'ó '�Ü˜3—x“xÐ*¤ c£Ó*�xñ 'à&ˆŒØŒØŒØ�	r    c                 óÊ  • SnU R                   bG  [        U R                   5      S:X  a.  [        U R                   S   5      S:X  a  U R                   S   S   nU R                  S:X  a]  U R                  S:X  aM  U R                   c  [	        U R
                  S9$ Ub*  U R
                  UR
                  :X  a  UR                  5       $ U R                  S::  a�  [        U[        5      (       az  UR                  S::  aj  U R
                  UR
                  :X  aP  [        UR                   U R                  UR                  -  U R                  UR                  -  UR
                  5      $ U $ )z+Optimize certain stacked wildcard patterns.Nr   r   )r   )	rø   rô   r,  r-  r  r   r  rW   r"  )r:   r)  s     r   r  ÚWildcardPattern.optimizeþ  s  € àˆ
à�L‰LÑ$Ü�D—L‘LÓ! QÓ&Ü�D—L‘L ‘OÓ$¨Ó)àŸ™ a™¨Ñ+ˆJØ�8‰8�q‹=˜TŸX™X¨›]Ø�|‰|Ñ#Ü"¨¯	©	Ñ2Ð2ØÑ%¨$¯)©)°z·±Ó*FØ!×*Ñ*Ó,Ð,à�H‰H˜‹MÜ˜:¤×7Ñ7Ø—‘ !Ó#Ø—	‘	˜ZŸ_™_Ó,ä"Ø×"Ñ"Ø—‘˜:Ÿ>™>Ñ)Ø—‘˜:Ÿ>™>Ñ)Ø—‘ó	ð ð ˆr    c                 ó(   • U R                  U/U5      $ )z'Does this pattern exactly match a node?)r  rÿ   s      r   r	  ÚWildcardPattern.match  s   € à�~‰~˜t˜f gÓ.Ð.r    c                 óÒ   • U R                  U5       HR  u  p4U[        U5      :X  d  M  Ub9  UR                  U5        U R                  (       a  [	        U5      X R                  '     g   g)z4Does this pattern exactly match a sequence of nodes?TF)r  rô   r  r   rX   )r:   r  r   r(  r  s        r   r  ÚWildcardPattern.match_seq  sU   € à×)Ñ)¨%Ö0‰DˆAØ”C˜“J�ØÑ&Ø—N‘N 1Ô%Ø—y—yÜ-1°%«[˜§	¡	Ñ*Ùñ 1ð r    c           	   #   ób  #   • U R                   cg  [        U R                  S[        [        U5      U R                  5      -   5       H,  n0 nU R
                  (       a  USU X0R
                  '   X#4v •  M.     gU R
                  S:X  a  U R                  U5      v •  g[        [        S5      (       a#  [        R                  n[        5       [        l	         U R                  US5       H,  u  p#U R
                  (       a  USU X0R
                  '   X#4v •  M.     [        [        S5      (       a  W[        l	        gg! [         aD    U R                  U5       H,  u  p#U R
                  (       a  USU X0R
                  '   X#4v •  M.      Nof = f! [        [        S5      (       a  W[        l	        f f = f7f)zâ
Generator yielding matches for a sequence of nodes.

Args:
    nodes: sequence of nodes

Yields:
    (count, results) tuples where:
    count: the match comprises nodes[:count];
    results: dict containing named submatches.
Nr   Ú	bare_nameÚgetrefcountr   )rø   Úranger,  rô   r-  r   Ú_bare_name_matchesr   ÚsysÚstderrr
   Ú_recursive_matchesÚRuntimeErrorÚ_iterative_matches)r:   r  Úcountr  Úsave_stderrs        r   r  Ú WildcardPattern.generate_matches)  s\  é € ð �<‰<Ñä˜tŸx™x¨¬S´°U³¸T¿X¹XÓ-FÑ)FÖG�Ø�Ø—9—9Ø#(¨¨% =�A—i‘i‘LØ�h”ò	 Hð
 �Y‰Y˜+Ó%Ø×)Ñ)¨%Ó0Ó0ô ”s˜M×*Ñ*Ü!Ÿj™j�Ü%›Z””
ð-Ø $× 7Ñ 7¸¸qÖ A‘H�EØ—y—yØ',¨V¨e }˜Ÿ)™)™Ø˜(”Nñ !Bô œ3 ×.Ñ.Ø!,”C•Jð /øô  ó #ð !%× 7Ñ 7¸Ö >‘H�EØ—y—yØ',¨V¨e }˜Ÿ)™)™Ø˜(”Nó !?ð#ûô œ3 ×.Ñ.Ø!,”C•Jð /üs8   ‚CF/ÃAD8 Ä"F/Ä8AFÆF	 ÆFÆF	 Æ	#F,Æ,F/c              #   ó$  #   • [        U5      nSU R                  :¼  a  S0 4v •  / nU R                   H.  n[        XA5       H  u  pVXV4v •  UR	                  XV45        M     M0     U(       a¤  / nU H�  u  p‰X‚:  d  M  X€R
                  ::  d  M  U R                   Hc  n[        XAUS 5       HN  u  p«U
S:”  d  M  0 nUR                  U	5        UR                  U5        XŠ-   U4v •  UR	                  XŠ-   U45        MP     Me     M’     UnU(       a  M£  gg7f)z(Helper to iteratively yield the matches.r   N)rô   r,  rø   r  rZ   r-  r  )r:   r  Únodelenr   r5  r(  r  Únew_resultsÚc0Úr0Úc1Úr1s               r   rF  Ú"WildcardPattern._iterative_matchesV  sô   é € ä�e“*ˆØ�—‘‹=Ø�R�%ŠKàˆà—<”<ˆCÜ(¨Ö4‘�Ø�d’
Ø—‘ ˜vÖ&ó 5ñ  ö ØˆKÛ!‘�à•< B¯(©(¥NØ#Ÿ|œ|˜Ü&6°sÀ"À#¸JÖ&G™F˜BØ! A�vØ$& Ø !§¡¨¤Ø !§¡¨¤Ø&(¡g¨q jÒ 0Ø +× 2Ñ 2°B±G¸Q°<Ö @ó 'Hó  ,ñ "ð "ˆG÷ Šgùs   ‚A5DÁ;DÂ&DÂ6ADÄDc                 ó  • Sn0 nSn[        U5      nU(       dM  X%:  aH  SnU R                   H(  nUS   R                  X   U5      (       d  M!  US-  nSn  O   U(       d  X%:  a  MH  U R                  c   eUSU X0R                  '   X#4$ )z(Special optimized matcher for bare_name.r   FTr   N)rô   rø   r	  r   )r:   r  rG  r  Údoner-  Úleafs          r   rA  Ú"WildcardPattern._bare_name_matchess  s�   € àˆØˆØˆÜ�%‹jˆÞ˜5›;ØˆDØŸœ�Ø˜‘7—=‘= ¡¨q×1Ó1Ø˜Q‘J�EØ �DÙñ	 %ö ˜5�;ð �y‰yÑ$Ð$Ð$Ø˜V˜e�}ˆ�)‰)‰Øˆxˆr    c              #   óZ  #   • U R                   c   eX R                  :¼  a  S0 4v •  X R                  :  at  U R                    Hc  n[        X15       HQ  u  pEU R	                  XS US-   5       H1  u  pg0 nUR                  U5        UR                  U5        XF-   U4v •  M3     MS     Me     gg7f)z(Helper to recursively yield the matches.Nr   r   )rø   r,  r-  r  rD  r  )	r:   r  rG  r5  rM  rN  rO  rP  r  s	            r   rD  Ú"WildcardPattern._recursive_matches„  sŸ   é € à�|‰|Ñ'Ð'Ð'Ø—H‘HÓØ�R�%ŠKØ—8‘8ÓØ—|”|�Ü.¨sÖ:‘F�BØ"&×"9Ñ"9¸%À¸*ÀeÈaÁiÖ"P™˜Ø˜ØŸ™ œØŸ™ œØ ™g q˜jÔ(ó	 #Qó ;ò $ð ùs   ‚B)B+)rø   r-  r,  r   r>   )r‡   rˆ   r‰   rŠ   r‹   r   rŒ   r   r   rV   rš   r   r  rŽ   r	  r  r   r  r  r  rF  rA  rD  r�   r‘   r    r   r"  r"  Â  sç   ‡ ñ
ð 
ƒHØ	ƒHð "&ØØØ"ñ*à˜#‘ð*ð ð*ð ð	*ð
 �s‰mð*ð 
õ*ðX˜#ô ñ8/¨4õ /ñ	°õ 	ð+-¨°%¸¸X¸Ñ2FÑ)Gô +-ðZ"¨8°E¸#¸x¸-Ñ4HÑ+Iô "ð:¨5°°h°Ñ+?ô ð")°(¸5ÀÀhÀÑ;OÑ2P÷ )r    r"  c                   ó|   • \ rS rSrSS\\   SS4S jjrSS\4S jjrSS\4S jjr	S\
\   S\\\\4      4S	 jrS
rg)ÚNegatedPatterni“  Nrø   r   c                 ó`   • Ub%  [        U[        5      (       d   [        U5      5       eXl        g)zè
Initializer.

The argument is either a pattern or None.  If it is None, this
only matches an empty sequence (effectively '$' in regex
lingo).  If it is not None, this matches whenever the argument
pattern doesn't have any matches.
N)rW   r÷   r™   rø   )r:   rø   s     r   rš   ÚNegatedPattern.__init__”  s+   € ð ÑÜ˜g¤{×3Ñ3ÐB´T¸'³]ÓBÐ3Ø�r    c                 ó   • g)NFr‘   rÿ   s      r   r	  ÚNegatedPattern.match¡  s   € àr    c                 ó   • [        U5      S:H  $ r¸   )rô   r  s      r   r  ÚNegatedPattern.match_seq¥  s   € ä�5‹z˜Q‰Ðr    r  c              #   ó¨   #   • U R                   c  [        U5      S:X  a  S0 4v •  g g U R                   R                  U5       H  u  p#  g    S0 4v •  g 7fr¸   )rø   rô   r  )r:   r  r(  r  s       r   r  ÚNegatedPattern.generate_matches©  sQ   é € Ø�<‰<Ñä�5‹z˜Q‹Ø˜�e“ð ð Ÿ™×5Ñ5°eÖ<‘�Ùñ =à�R�%‹Kùs   ‚AA)rø   r>   )r‡   rˆ   r‰   rŠ   r   r÷   rš   rŽ   r	  r  rX   r�   r   r  r   r  r  r�   r‘   r    r   rY  rY  “  sW   † ñ ¨Ñ 5ð Àõ ñ¨4õ ñ°õ ð	 d¨2¡hð 	°8¸EÀ#ÀxÀ-Ñ<PÑ3Q÷ 	r    rY  Úpatternsr  c              #   ó  #   • U (       d  S0 4v •  gU S   U SS p2UR                  U5       HV  u  pEU(       d  XE4v •  M  [        X1US 5       H1  u  pg0 nUR                  U5        UR                  U5        XF-   U4v •  M3     MX     g7f)a*  
Generator yielding matches for a sequence of patterns and nodes.

Args:
    patterns: a sequence of patterns
    nodes: a sequence of nodes

Yields:
    (count, results) tuples where:
    count: the entire sequence of patterns matches nodes[:count];
    results: dict containing named submatches.
r   r   N)r  r  )	rb  r  ÚpÚrestrM  rN  rO  rP  r  s	            r   r  r  µ  s„   é € ö Ø�ˆe‹à˜1‘+˜x¨¨˜|ˆ4Ø×(Ñ(¨Ö/‰FˆBÞØ�f”ä.¨t¸2¸3°ZÖ@‘F�BØ�AØ—H‘H˜R”LØ—H‘H˜R”LØ™' 1˜*Ô$ó	 Aò	 0ùs   ‚BB)'r‹   Úcollections.abcr   r   Útypingr   r   r   r   Úblib2to3.pgen2.grammarr	   Ú
__author__rB  Úior
   r   r   rŒ   r   ÚdictrV   r   r!   r�   r  rï   rX   ÚRawNoder"   r$   r%   rõ   r  r÷   r  r  r"  rY  r  r‘   r    r   Ú<module>rm     s…  ðò÷ /ß 0Ó 0å *à2€
ã 
Ý à€€cÓ à*,€ˆT�#�u˜S #˜X‘Ð&Ñ'Ó ,ð6˜ð 6  c¨3 h¡ô 6ñ" ˆT˜Ñ €à
ˆ>Ñ€Ø
��U˜3 ˜8‘_Ð$Ñ
%€Ø
��X˜c‘] H¨WÑ$5°xÀÀRÁÑ7IÐIÑ
J€÷oñ oôdI"ˆ4ô I"ôXeˆ4ô eðP8�ð 8 7ð 8¨rô 8ð( ��R�‰=€÷Xñ Xôv-*�+ô -*ô`A�+ô AôHN)�kô N)ôb�[ô ðD%Ø�;Ñð%Ø(,¨R©ð%àˆe�C˜�MÑ"Ñ#õ%r    