
    cy                         d dl Z d dlZd dlZd dlZd dlmZ d dlmZmZm	Z	  ej
        d          ZddZddZd Zd	 Z G d
 de	j                  Z G d d          Z G d d          ZdS )    N)chain)astcodeanalyze
exceptionsz\(.*?\)|(,)Fc                 H    t          t          j        |           | |          S )zAdds ``region`` and ``sorted_children`` fields to nodes

    Adds ``sorted_children`` field only if `sorted_children` is True.

    )	patch_astr   parse)sourcesorted_childrens     8lib/python3.11/site-packages/rope/refactor/patchedast.pyget_patched_astr      s      SYv&&@@@    c                 b    t          | d          r| S t          ||          } ||            | S )a  Patches the given node

    After calling, each node in `node` will have a new field named
    `region` that is a tuple containing the start and end offsets
    of the code that generated it.

    If `sorted_children` is true, a `sorted_children` field will
    be created for each node, too.  It is a list containing child
    nodes as well as whitespaces and comments that occur between
    them.

    region)children)hasattr_PatchingASTWalker)noder
   r   walkers       r   r   r      s?     tX AAAF
F4LLLKr   c                     | j         S )z$Get the region of a patched ast node)r   )patched_ast_nodes    r   node_regionr   )   s    ""r   c                     g }| j         D ]T}t          |t          j                  r#|                    t          |                     ?|                    |           Ud                    |          S )zExtract source form a patched AST node with `sorted_children` field

    If the node is patched with sorted_children turned off you can use
    `node_region` function for obtaining code using module source code.
     )r   
isinstancer   ASTappend	write_astjoin)r   resultchilds      r   r   r   .   sq     F!1 ! !eSW%% 	!MM)E**++++MM%    776??r   c                       e Zd ZdS )MismatchedTokenErrorN)__name__
__module____qualname__ r   r   r#   r#   =   s        Dr   r#   c                      e Zd ZddZ e            Z e            Z e            Z e            Zd Z	ddZ
d Zd Zd Zd Zd	 Zd
 Zd Zi ddddddddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-ddd.d/d0d1d2d3d4d5d6d7d8Zd9 Zd: Zd; Zd< Zd= Zd> Zd? Zd@ ZdA ZdB ZdC ZdD ZdE ZdF Z dG Z!dH Z"dI Z#dJ Z$dK Z%dL Z&dM Z'dN Z(dO Z)dP Z*dQ Z+dR Z,dS Z-dT Z.dU Z/dV Z0dW Z1dX Z2dY Z3dZ Z4d[ Z5d\ Z6d] Z7d^ Z8d_ Z9d` Z:da Z;db Z<dc Z=dd Z>de Z?df Z@dg ZAdh ZBdi ZCdj ZDdk ZEdl ZFdm ZGdn ZHdo ZIdp ZJdq ZKdr ZLds ZMdt ZNdu ZOdv ZPdw ZQdx ZRdy ZSdz ZTd{ ZUd| ZVd} ZWd~ ZXd ZYd ZZd Z[d Z\d Z]d Z^d Z_d Z`d Zad Zbd ZcdS )r   Fc                 |    t          |          | _        || _        t          j        |          | _        g | _        d S N)_Sourcer
   r   r   SourceLinesAdapterlineschildren_stack)selfr
   r   s      r   __init__z_PatchingASTWalker.__init__B   s6    foo  3F;;
 r   c                 <   t          | d|j        j        z   d           }| ||          S t          j        d|j        j        z  t
                     | j        j        | j        j        f|_        | j	        r%d t          j        |          D             |_        d S d S )N_z&Unknown node type <%s>; please report!c                     g | ]\  }}|S r'   r'   ).0fieldr!   s      r   
<listcomp>z/_PatchingASTWalker.__call__.<locals>.<listcomp>X   s    #T#T#TleUE#T#T#Tr   )getattr	__class__r$   warningswarnRuntimeWarningr
   offsetr   r   r   iter_fieldsr   )r/   r   methods      r   __call__z_PatchingASTWalker.__call__M   s    sT^%<<dCC 	 6$<<4t~7NN	
 	
 	
 {)4;+=>= 	U#T#Tcod>S>S#T#T#TD   	U 	Ur   c                    t          |d          r)t          j        d|j        j        z  t
                     d S t          j        |          }| j        	                    |           t          j                    }g }| j
        j        }|}d}	|r|                                }
|
| j
        j        }t          |
t          j                  r | |
           |
j        d         }n"|
| j        u r.| j
                            |                                           }n|
| j        u r| j
                                        }n|
| j        k    r| j
                                        }n|
| j        k    r| j
                                        }n[t          |t          j        t          j        f          r| j
                            |
          }n| j
                            |
          }| j
        |d         |d                  }
|d         }|	sft          |t          j                  s"|	                    | j
        ||                    | j        r"|	                    | j
        ||                    nd}	|}| j        r|	                    |
           ||                     |||          }|r|                      |||          }|rz| j        r"|!                    | j
        d|                    | j
        | j
        j        d          }| j
                            |           | j        r|	                    |           d}| j        r||_"        || j
        j        f|_        | j        #                                 d S )Nr   z2Node <%s> has been already patched; please report!Tr   end   F)$r   r9   r:   r8   r$   r;   collectionsdequer.   r   r
   r<   popleftr   r   r   r   Stringconsume_string_find_next_statement_startNumberconsume_numberempty_tupleconsume_empty_tuplewith_or_comma_context_manager%consume_with_or_comma_context_manager	JoinedStrFormattedValueconsume_joined_stringconsumer   _handle_parens_eat_surrounding_parens
appendleftr   pop)r/   r   base_children
eat_parens
eat_spacesr   formatssuspected_startstartfirst_tokenr!   r<   token_startr   
end_spacess                  r   _handlez_PatchingASTWalker._handleZ   s   4"" 	MD.)*  
 F#)-88""=111$&&+, "	'!))++E ['F%)) (U#l1oDK' 8![77 ;;== 8  FF dk) 	8![7799FFd.. 8![<<>>FFd@@ 8![NNPPFFs}c6H&IJJ 8![>>uEEFF![0077FF1Iq	$9:$Qi $!$66 DNN4;vk/A#BCCC= EOODK{0B$CDDD##} '&&&E  "	'F ##HeW== 	S00?ERRE 	} :##DK%$8999T[%7%9%9:JK
+++} ,
+++E= 	,#+D dk01!!!!!r   c                    |                      |          \  }}| j        j        }d}t          |          D ]"}| j                            d          d         }#|)| j        r"|                    | j        ||                    |}	t          |          D ]}| j                            dd|	          }	|	|k    r+| j        r"|                    | j        |	|                    |	}|S )z(Changes `children` and returns new startN)rC   (r   )	_count_needed_parensr
   r<   rangerS   r   r   rfind_tokenrV   )
r/   r   r]   r[   opensclosesold_endnew_endi	new_starts
             r   rT   z!_PatchingASTWalker._handle_parens   s    11'::v+$v 	2 	2Ak))#..q1GG 	:4= 	:OODK8999	u 	C 	CA//Q	BBII 	} B##DK	%$@AAAEr   c                    | j                             d||          }||}| j         j        }|}| j        r:|                    | j         |dz   |                    |                    d           | j                             d          \  }}| j        r7|                    | j         ||                    |                    d           |S )Nrd   rC   rc   )r
   rg   r<   r   rV   rS   r   )	r/   r   r\   r]   index	old_start
old_offsetr_   	token_ends	            r   rU   z*_PatchingASTWalker._eat_surrounding_parens   s    ''_eDD 
	%I+JE} )##DK	I0E$FGGG##C(((%)[%8%8%=%="K} %J{,B CDDD$$$r   c                    d}d}|D ]}t          |t          t          f          s|dk    s
|d         dv r0d}|t          |          k     rz||         dk    r|dk    r|dz  }n|dz  }||         dk    r|dz  }||         dk    r(	 |                    d|          }n# t
          $ r Y nw xY w|dz  }|t          |          k     z||fS )	Nr   r   z'"rc   rC   rd   #
)r   strbyteslenro   
ValueError)r/   r   r]   rh   r!   ro   s         r   re   z'_PatchingASTWalker._count_needed_parens   s,    	 	Eec5\22 { eAh%/ E#e**$ <3& #qy #

<3& QJE<3&  %D% 8 8%   
 #e**$  e|s   B
B+*B+c                     t          | j                  D ]L}|D ]G}t          |t          j                  r+|j        | j                            |j                  z   c c S HMt          | j
        j
                  S r*   )reversedr.   r   r   stmt
col_offsetr-   get_line_startlinenorx   r
   )r/   r   r!   s      r   rI   z-_PatchingASTWalker._find_next_statement_start   s     !455 	V 	VH! V VeSX.. V +dj.G.G.U.UUUUUUUVV 4;%&&&r   c              #      K   t          |          }	 t          |          V  n# t          $ r Y d S w xY w|D ]
}|V  |V  d S r*   )iternextStopIteration)r/   iterable	separatorr!   s       r   _joinz_PatchingASTWalker._join   sz      >>	x..     	 	 	FF	 	 	EOOOKKKK	 	s   % 
33c                 r    d |D             }|                      |dg          }t          j        |          S )Nc              3   &   K   | ]\  }}|d |gV  dS )=Nr'   )r4   attrpatterns      r   	<genexpr>z7_PatchingASTWalker._flatten_keywords.<locals>.<genexpr>   s-      GG]T7T3(GGGGGGr   ,r   )r   r   from_iterable)r/   r   s     r   _flatten_keywordsz$_PatchingASTWalker._flatten_keywords   s=    GGhGGG::h3%:88"8,,,r   c                 J    t          |                     ||                    S )Nr   )listr   )r/   nodesr   s      r   _child_nodesz_PatchingASTWalker._child_nodes   s     DJJu	J::;;;r   AndandOrorAdd+Sub-Mult*Div/Mod%Pow**MatMult@LShiftz<<RShiftz>>BitOr|BitAnd&BitXor^FloorDivz//Invert~Notnotz==z!=<z<=>z>=iszis notinznot in)UAddUSubEqNotEqLtLtEGtGtEIsIsNotInNotInc                 V    | j         |j        j                                     d          S )N )
_operatorsr8   r$   splitr/   r   s     r   _get_opz_PatchingASTWalker._get_op  s"    t~67==cBBBr   c                 L    |                      ||j        d|j        g           d S )N.)ra   valuer   r   s     r   
_Attributez_PatchingASTWalker._Attribute  s'    TDJTY788888r   c                     d|j         g}|j        r/|                    d           |                    |j                   |                     ||           d S )Nassertr   )testmsgr   ra   r/   r   r   s      r   _Assertz_PatchingASTWalker._Assert  sX    di(8 	&OOC   OODH%%%T8$$$$$r   c                 ~    g |                      |j        d          d|j        }|                     ||           d S Nr   )r   targetsr   ra   r   s      r   _Assignz_PatchingASTWalker._Assign  sD    KT&&t|S99K3K
KT8$$$$$r   c                     |j         g|                     |j                  d|j        }|                     ||           d S r   )targetr   opr   ra   r   s      r   
_AugAssignz_PatchingASTWalker._AugAssign"  sE    KI$,,tw"7"7IIdjIT8$$$$$r   c                     |j         d|j        g}|j        /|                    d           |                    |j                   |                     ||           d S )N:r   )r   
annotationr   r   ra   r   s      r   
_AnnAssignz_PatchingASTWalker._AnnAssign&  s\    Kdo6: 	(OOC   OODJ'''T8$$$$$r   c                     |j         g|                     |j                  z   |j        gz   }|                     ||           d S r*   )leftr   r   rightra   r   s      r   _BinOpz_PatchingASTWalker._BinOp-  sA    I;dg!6!66$*ET8$$$$$r   c           	          |                      ||                     |j        |                     |j                  d                              d S Nr   )ra   r   valuesr   r   r   s     r   _BoolOpz_PatchingASTWalker._BoolOp1  sB    T4,,T[$,,tw:O:OPQ:RSSTTTTTr   c                 4    |                      |dg           d S )Nbreakra   r   s     r   _Breakz_PatchingASTWalker._Break4  s    TG9%%%%%r   c                    d }|j         dg}t          g |j        |j        |          }|                    |                     |d                     |                    d           |                     ||           d S )Nc                     t          | t          j                  r| j        j        | j        j        fS | j        | j        fS r*   )r   r   keywordr   r   r}   )r   s    r   _arg_sort_keyz/_PatchingASTWalker._Call.<locals>._arg_sort_key8  s;    $,, B
)4:+@AAK11r   rd   )keyr   rc   )funcsortedargskeywordsextendr   r   ra   )r/   r   r   r   r   s        r   _Callz_PatchingASTWalker._Call7  s    	2 	2 	2
 Is#2	2DM2FFF))$44555T8$$$$$r   c                    g }|j         D ]}|                    d|f           |                    d|j        g           |j        rX|                    d           |                    |                     |j        d                     |                    d           |                    d           |                    |j                   |                     ||           d S )Nr   classrd   r   rc   r   )decorator_listr   namebasesr   r   bodyra   )r/   r   r   	decorators       r   	_ClassDefz_PatchingASTWalker._ClassDefC  s    , 	. 	.IOOS),----$),---: 	!OOC   OOD--dj#>>???OOC   	"""T8$$$$$r   c                 $   g }|                     |j                   t          |j        |j                  D ]B\  }}|                    |                     |                     |                     |           C|                     ||           d S r*   )r   r   zipopscomparatorsr   r   ra   )r/   r   r   r   exprs        r   _Comparez_PatchingASTWalker._CompareP  s    	"""DHd&677 	" 	"HBOODLL,,---OOD!!!!T8$$$$$r   c                 l    |                      |dg|                     |j        d          z              d S )Ndelr   )ra   r   r   r   s     r   _Deletez_PatchingASTWalker._DeleteX  s5    TE7T%6%6t|S%I%IIJJJJJr   c                    t          j        t          t          f          r|                     | j        g           d S t          fddD                       r+|                     t          j                  g           d S t          j        t          j                  r|                     | j        g           d S j        t          u r|                     dg           d S J )Nc              3   *   K   | ]}j         |u V  d S r*   )r   )r4   vr   s     r   r   z/_PatchingASTWalker._Constant.<locals>.<genexpr>`  s)      <<1tzQ<<<<<<r   )TFN...)
r   r   rv   rw   ra   rG   anynumbersrJ   Ellipsisr   s    `r   	_Constantz_PatchingASTWalker._Constant[  s    dj3,// 	LL}---F<<<<(;<<<<< 	LLDJ0111Fdj'.11 	LL}---F:! 	LLw'''Fr   c                 >    |                      || j        g           d S r*   )ra   rJ   r   s     r   _Numz_PatchingASTWalker._Numn       TDK=)))))r   c                 >    |                      || j        g           d S r*   ra   rG   r   s     r   _Strz_PatchingASTWalker._Strq  r  r   c                 >    |                      || j        g           d S r*   r  r   s     r   _Bytesz_PatchingASTWalker._Bytest  r  r   c                    	  	fd} 	fd}g d j         j        } j                                                                        \  	| j         _        g }|                     |                       |j        D ]1}t          |t          j                  r|                    |           2|                     |                        	                    ||           d S )Nc                      fdD             } t          d | D                       \  }}j        |t          |          z            S )Nc                 V    g | ]%}j         j                             |          |f&S r'   )r
   findr4   qrB   r/   r]   s     r   r6   zK_PatchingASTWalker._JoinedStr.<locals>.start_quote_char.<locals>.<listcomp>y  sB       @A#((E377;  r   c              3   0   K   | ]\  }}|d k    ||fV  dS Nr'   r4   posr  s      r   r   zJ_PatchingASTWalker._JoinedStr.<locals>.start_quote_char.<locals>.<genexpr>|  sG       ( (#S!#)(a( ( ( ( ( (r   )minr
   rx   )possible_quotes	quote_pos
quote_charQUOTE_CHARSrB   r/   r]   s      r   start_quote_charz7_PatchingASTWalker._JoinedStr.<locals>.start_quote_charx  s         EP  O %( ( ('6( ( ( % %!Iz ;uy3z??'BBCCr   c                      fdt                    D             } t          d | D                       \  }}}j        t          |          z
           S )Nc                 V    g | ]%}j         j                             |          |f&S r'   )r
   rfindr  s     r   r6   zI_PatchingASTWalker._JoinedStr.<locals>.end_quote_char.<locals>.<listcomp>  sE        #))!UC88!<  r   c              3   L   K   | ]\  }}|d k    t          |          ||fV   dS r  )rx   r!  s      r   r   zH_PatchingASTWalker._JoinedStr.<locals>.end_quote_char.<locals>.<genexpr>  sP       + +%+S!#)+Qa + + + + + +r   )r{   maxr
   rx   )r$  r2   r%  r&  r'  rB   r/   r]   s       r   end_quote_charz5_PatchingASTWalker._JoinedStr.<locals>.end_quote_char  s         !+..  O (+ + +/>+ + + ( ($Ay* ;sS__4s:;;r   )z"""z'''"'rA   )
r
   r<   rH   rI   r   r   r   r   rQ   ra   )
r/   r   r(  r.  r<   r   partr'  rB   r]   s
   `      @@@r   
_JoinedStrz_PatchingASTWalker._JoinedStrw  s>   	D 	D 	D 	D 	D 	D 	D 	D	< 	< 	< 	< 	< 	< 	< 	< /..#[////11 0 
 

s $((**+++K 	& 	&D$ 233 &%%%(()))T8$$$$$r   c                    g }|                     d           |                     |j                   |j        rs|                     d           |j        j        D ]Q}t	          |t
          j                  r|                     |j                   7|                     |j                   R|                     d           |                     ||           d S N{r   })	r   r   format_specr   r   r   rQ   sra   )r/   r   r   vals       r   _FormattedValuez"_PatchingASTWalker._FormattedValue  s    
### 	+OOC   '. + +c3#566 +OOCI....OOCE****T8$$$$$r   c                 4    |                      |dg           d S )Ncontinuer   r   s     r   	_Continuez_PatchingASTWalker._Continue  s    TJ<(((((r   c                    g }|                     d           |j        rt          t          |j        |j                            D ]j\  }\  }}||                    d|g           n|                    |d|g           |t          |j                  dz
  k     r|                     d           k|                     d           |                     ||           d S )Nr5  r   r   rC   r   r6  )r   keys	enumerater   r   r   rx   ra   r/   r   r   ro   r   r   s         r   _Dictz_PatchingASTWalker._Dict  s    9 	)'0TY1L1L'M'M ) )#|U 7OOT5M2222OOS#u$56663ty>>A-- )OOC(((T8$$$$$r   c                 4    |                      |dg           d S )Nr  r   r   s     r   	_Ellipsisz_PatchingASTWalker._Ellipsis  s    TE7#####r   c                 >    |                      ||j        g           d S r*   ra   r   r   s     r   _Exprz_PatchingASTWalker._Expr       TDJ<(((((r   c                 P    |j         d|j        g}|                     ||           d S )Nz:=)r   r   ra   r   s      r   
_NamedExprz_PatchingASTWalker._NamedExpr  s,    Ktz2T8$$$$$r   c                     g }t          |j                  D ]5\  }}|dk    r|                    d           |                    |           6|                     ||           d S )Nr   r   )r@  dimsr   ra   )r/   r   r   ro   dims        r   	_ExtSlicez_PatchingASTWalker._ExtSlice  sq    #DI.. 	! 	!JE3qy %$$$OOC    T8$$$$$r   c                 .   |rddgndg}|                     |j        d|j        dg           |                     |j                   |j        r1|                     ddg           |                     |j                   |                     ||           d S )Nasyncforr   r   else)r   r   r   r   orelsera   )r/   r   is_asyncr   s       r   _handle_for_loop_nodez(_PatchingASTWalker._handle_for_loop_node  s    '/<GU##eWdDIs;<<<	"""; 	)OOVSM***OODK(((T8$$$$$r   c                 4    |                      |d           d S NFrT  rU  r   s     r   _Forz_PatchingASTWalker._For  s!    ""4%"88888r   c                 4    |                      |d           d S NTrX  rY  r   s     r   	_AsyncForz_PatchingASTWalker._AsyncFor  s!    ""4$"77777r   c                 n   dg}|j         r|                    d|j         z             |j        r-|                    |j                            d                     |                    d           |                    |                     |j        d                     |                     ||           d S )Nfromr   importr   )levelr   moduler   r   r   namesra   r   s      r   _ImportFromz_PatchingASTWalker._ImportFrom  s    8: 	.OOC$*,---; 	4OODK--c22333!!!))$*c::;;;T8$$$$$r   c                     |j                             d          }|j        r|                    d|j        g           |                     ||           d S )Nr   as)r   r   asnamer   ra   r   s      r   _aliasz_PatchingASTWalker._alias  sR    9??3''; 	1OOT4;/000T8$$$$$r   c                 |   g }|j         D ]}|                    d|f           |                    |rddgndg           |                    |j                   |                    d|j        dg           |                    d           |                    |j                   |                     ||           d S )Nr   rP  defrd   rc   r   )r   r   r   r   r   r   ra   )r/   r   rT  r   r   s        r   _handle_function_def_nodez,_PatchingASTWalker._handle_function_def_node  s    , 	. 	.IOOS),----HA%((5'BBB	"""di-...	"""T8$$$$$r   c                 4    |                      |d           d S rW  rk  r   s     r   _FunctionDefz_PatchingASTWalker._FunctionDef  s!    &&te&<<<<<r   c                 4    |                      |d           d S r\  rm  r   s     r   _AsyncFunctionDefz$_PatchingASTWalker._AsyncFunctionDef  s!    &&td&;;;;;r   c                    g }t          |j                  }d gt          |          t          |j                  z
  z  t          |j                  z   }t	          t          ||                    D ]:\  }\  }}|dk    r|                    d           |                     |||           ;|j        8|r|                    d           |	                    d|j        j
        g           |j        ?|s|j        |                    d           |	                    d|j        j
        g           |                     ||           d S )Nr   r   r   r   )r   r   rx   defaultsr@  r   r   _add_args_to_childrenvarargr   argkwargra   )r/   r   r   r   rr  ro   ru  defaults           r   
_argumentsz_PatchingASTWalker._arguments  sH   DI6SYYT]););;<tDM?R?RR%.s4/B/B%C%C 	? 	?!E>Cqy %$$$&&xg>>>>; 	4 %$$$OOS$+/2333: 	4 %t{ %$$$OOT4:>2333T8$$$$$r   c                     t          |t          t          f          r|                     ||           n|                    |           |,|                    d           |                    |           d S d S r   )r   r   tuple_add_tuple_parameterr   )r/   r   ru  rw  s       r   rs  z(_PatchingASTWalker._add_args_to_children  s    cD%=)) 	!%%h4444OOC    	%OOC   OOG$$$$$	% 	%r   c                 J   |                     d           t          |          D ]h\  }}|dk    r|                     d           t          |t          t          f          r|                     ||           S|                     |           i|                     d           d S )Nrd   r   r   rc   )r   r@  r   r   rz  r{  )r/   r   ru  ro   tokens        r   r{  z'_PatchingASTWalker._add_tuple_parameter  s    %cNN 	' 	'LE5qy %$$$%$// '))(E::::&&&&r   c                 T    |j         g|j        }|                     ||d           d S )NTrY   elt
generatorsra   r   s      r   _GeneratorExpz _PatchingASTWalker._GeneratorExp"  s1    H/t/T855555r   c                     d|j         d|j        g}|j        D ]}|                    d|g           |                     ||           d S )NrQ  r   if)r   r   ifsr   ra   )r/   r   r   if_s       r   _comprehensionz!_PatchingASTWalker._comprehension&  sX    4;di88 	) 	)COOT3K((((T8$$$$$r   c                 n    dg|                      |j        d          }|                     ||           d S )Nglobalr   r   rc  ra   r   s      r   _Globalz_PatchingASTWalker._Global,  ;    Bt00SAABT8$$$$$r   c                    |                      |          rdgndg}|                    |j        dg           |                    |j                   |j        rjt          |j                  dk    r!|                      |j        d                   rn|                    ddg           |                    |j                   |                     ||           d S )Nelifr  r   rC   r   rR  )_is_elifr   r   r   rS  rx   ra   r   s      r   _Ifz_PatchingASTWalker._If0  s    #}}T22>F88C()))	"""; 	)4;1$ /t{1~)F)F /...OODK(((T8$$$$$r   c                     t          |t          j                  sdS | j                            |j                  |j        z   }| j        ||dz            }| j        |dz
  |dz
           }d||fv S )NF      rC   r  )r   r   Ifr-   r~   r   r}   r
   )r/   r   r<   wordalt_words        r   r  z_PatchingASTWalker._is_elif<  sw    $'' 	5**4;77$/I{6FQJ./;vzFQJ67$)))r   c                 V    |                      ||j        d|j        d|j        g          S )Nr  rR  )ra   r   r   rS  r   s     r   _IfExpz_PatchingASTWalker._IfExpE  s'    ||D49dDIvt{"STTTr   c                 n    dg|                      |j        d          }|                     ||           d S )Nr`  r   r  r   s      r   _Importz_PatchingASTWalker._ImportH  r  r   c                 p    |j         	|j        g}n|j         d|j        g}|                     ||           d S r   )ru  r   ra   r   s      r   _keywordz_PatchingASTWalker._keywordL  sA    8 	3
|HH#tz2HT8$$$$$r   c                 N    |                      |d|j        d|j        g           d S )Nlambdar   )ra   r   r   r   s     r   _Lambdaz_PatchingASTWalker._LambdaS  s)    THdidi@AAAAAr   c                 n    |                      |dg|                     |j        d          d           d S )N[r   ])ra   r   eltsr   s     r   _Listz_PatchingASTWalker._ListV  s;    TCI$"3"3DIs"C"CISIJJJJJr   c                 V    d|j         g|j        d}|                     ||           d S Nr  r  r  r   s      r   	_ListCompz_PatchingASTWalker._ListCompY  4    9DO9S9T8$$$$$r   c                     |j         r6|                     |dg|                     |j         d          d           d S t          j        dt
                     |                     |ddg           d S )Nr5  r   r6  z3Tried to handle empty <Set> literal; please report!zset(rc   )r  ra   r   r9   r:   r;   r   s     r   _Setz_PatchingASTWalker._Set]  s}    9 	LLMd&7&7	3&G&GMMNNNFA>	
 	
 	
 	TFC=)))))r   c                 V    d|j         g|j        d}|                     ||           d S )Nr5  r6  r  r   s      r   _SetCompz_PatchingASTWalker._SetCompg  r  r   c                 h    dg|j         d|j        g|j        d}|                     ||           d S r4  )r   r   r  ra   r   s      r   	_DictCompz_PatchingASTWalker._DictCompk  s@    M48S$*5MMMT8$$$$$r   c                 Z    |                      |t          |j                  d           d S )NT)rZ   )ra   r   r   r   s     r   _Modulez_PatchingASTWalker._Moduleo  s(    T4	??t<<<<<r   c                 >    |                      ||j        g           d S r*   )ra   idr   s     r   _Namez_PatchingASTWalker._Namer  s     TDG9%%%%%r   c                 X    |                      |t          |j                  g           d S r*   )ra   rv   r   r   s     r   _NameConstantz _PatchingASTWalker._NameConstantu  s'    TC
OO,-----r   c                 >    |                      ||j        g           d S r*   )ra   ru  r   s     r   _argz_PatchingASTWalker._argx  s     TDH:&&&&&r   c                 4    |                      |dg           d S )Npassr   r   s     r   _Passz_PatchingASTWalker._Pass{  s    TF8$$$$$r   c                     dg}|j         r|                    |j                    |j        r/|                    d           |                    |j                   |                     ||           d S )Nraiser_  )excr   causera   r   s      r   _Raisez_PatchingASTWalker._Raise~  sq    98 	&OODH%%%: 	(OOF###OODJ'''T8$$$$$r   c                 z    dg}|j         r|                    |j                    |                     ||           d S )Nreturnr   r   ra   r   s      r   _Returnz_PatchingASTWalker._Return  sA    :: 	(OODJ'''T8$$$$$r   c                 >    |                      ||j        g           d S r*   rF  r   s     r   _Indexz_PatchingASTWalker._Index  rH  r   c                 N    |                      ||j        d|j        dg           d S r  )ra   r   slicer   s     r   
_Subscriptz_PatchingASTWalker._Subscript  s)    TDJTZ=>>>>>r   c                 P   g }|j         r|                    |j                    |                    d           |j        r|                    |j                   |j        r/|                    d           |                    |j                   |                     ||           d S )Nr   )lowerr   upperstepra   r   s      r   _Slicez_PatchingASTWalker._Slice  s    : 	(OODJ''': 	(OODJ'''9 	'OOC   OODI&&&T8$$$$$r   c                    d}d}t          |j                  dk    r9	 t          |j        d         t          j                  }d}n# t          $ r Y nw xY wg }|s|s|                    ddg           |                    |j                   |                    |j                   |                    ddg           |                    |j                   | 	                    ||           d S )NFTrC   r   tryr   finally)
rx   	finalbodyr   handlersr   ExceptHandler
IndexErrorr   r   ra   )r/   r   is_there_except_handlernot_empty_bodyr   s        r   _TryFinallyz_PatchingASTWalker._TryFinally  s	   "'t~!# 	*4M!$c&7+ +' "&    	*!8 	*OOUCL)))	"""&&&C()))'''T8$$$$$s   'A 
AAc                    ddg}|                     |j                   |                     |j                   |j        r1|                     ddg           |                     |j                   |                     ||           d S )Nr  r   rR  )r   r   r  rS  ra   r   s      r   
_TryExceptz_PatchingASTWalker._TryExcept  s    3<	"""&&&; 	)OOVSM***OODK(((T8$$$$$r   c                     t          |j                  r|                     |           d S |                     |           d S r*   )rx   r  r  r  r   s     r   _Tryz_PatchingASTWalker._Try  sF    t~ 	"T"""""OOD!!!!!r   c                 0    |                      |           d S r*   )_excepthandlerr   s     r   _ExceptHandlerz!_PatchingASTWalker._ExceptHandler  s    D!!!!!r   c                 D   dg}|j         r|                    |j                    |j        r/|                    d           |                    |j                   |                    d           |                    |j                   |                     ||           d S )Nexceptrf  r   )typer   r   r   r   ra   r   s      r   r  z!_PatchingASTWalker._excepthandler  s    :9 	'OODI&&&9 	'OOD!!!OODI&&&	"""T8$$$$$r   c                     |j         r3|                     ||                     |j         d          d           d S |                     || j        g           d S )Nr   Tr  )r  ra   r   rL   r   s     r   _Tuplez_PatchingASTWalker._Tuple  s\    9 	3LLt00C@@TLRRRRRLL 0122222r   c                     |                      |j                  }|                    |j                   |                     ||           d S r*   )r   r   r   operandra   r   s      r   _UnaryOpz_PatchingASTWalker._UnaryOp  sC    <<((%%%T8$$$$$r   c                 z    dg}|j         r|                    |j                    |                     ||           d S )Nawaitr  r   s      r   _Awaitz_PatchingASTWalker._Await  A    9: 	(OODJ'''T8$$$$$r   c                 z    dg}|j         r|                    |j                    |                     ||           d S )Nyieldr  r   s      r   _Yieldz_PatchingASTWalker._Yield  r  r   c                 F    dd|j         g}|                     ||           d S )Nr  r_  )r   ra   r   s      r   
_YieldFromz_PatchingASTWalker._YieldFrom  s*    VTZ0T8$$$$$r   c                     d|j         dg}|                    |j                   |j        r1|                    ddg           |                    |j                   |                     ||           d S )Nwhiler   rR  )r   r   r   rS  ra   r   s      r   _Whilez_PatchingASTWalker._While  sr    TY,	"""; 	)OOVSM***OODK(((T8$$$$$r   c                 `   g }|r|                     dg           |j        D ]F}|                     | j        |j        g           |j        r|                     d|j        g           G|                    d           |                     |j                   |                     ||           d S )NrP  rf  r   )r   itemsrN   context_exproptional_varsr   r   ra   )r/   r   rT  r   items        r   _handle_with_nodez$_PatchingASTWalker._handle_with_node  s     	'OOWI&&&J 	< 	<DOOT?ARSTTT! <t'9 :;;;	"""T8$$$$$r   c                 4    |                      |d           d S rW  r  r   s     r   _Withz_PatchingASTWalker._With  s!    te44444r   c                 4    |                      |d           d S r\  r  r   s     r   
_AsyncWithz_PatchingASTWalker._AsyncWith  s!    td33333r   c                 >    |                      ||j        g           d S r*   rF  r   s     r   _Starredz_PatchingASTWalker._Starred  rH  r   c                 z    d|j         dg}|                    |j                   |                     ||           d S )Nmatchr   )subjectr   casesra   r   s      r   _Matchz_PatchingASTWalker._Match  s>    T\3/
###T8$$$$$r   c                     d|j         g}|j        r|                    d|j        g           |                    d           |                    |j                   |                     ||           d S )Ncaser  r   )r   guardr   r   r   ra   r   s      r   _match_casez_PatchingASTWalker._match_case  sq    DL): 	0OOT4:.///	"""T8$$$$$r   c                     |j         r|j         d|j        g}n|j        dg}n|j        g}|                     ||           d S )Nrf  r2   )r   r   ra   r   s      r   _MatchAsz_PatchingASTWalker._MatchAs  sT    < 	#dDI6HHY 	#uHH	{HT8$$$$$r   c                     |j         dg|                     |j        d          |                     t	          |j        |j                            d}|                     ||           d S )Nrd   r   rc   )clsr   patternsr   r   	kwd_attrskwd_patternsra   r   s      r   _MatchClassz_PatchingASTWalker._MatchClass!  sz    H
 t}c22
 ##C8I$J$JKK	

 
 	T8$$$$$r   c                 >    |                      ||j        g           d S r*   rF  r   s     r   _MatchValuez_PatchingASTWalker._MatchValue+  rH  r   c                 z   g }|                     d           t          t          |j        |j                            D ]P\  }\  }}|                    |d|g           |t          |j                  dz
  k     r|                     d           Q|                     d           |                     ||           d S )Nr5  r   rC   r   r6  )r   r@  r   r?  r  r   rx   ra   rA  s         r   _MatchMappingz _PatchingASTWalker._MatchMapping.  s    #,SDM-J-J#K#K 	% 	%E<COOS#u-...s49~~)) %$$$T8$$$$$r   NF)FF)dr$   r%   r&   r0   objectrJ   rG   rN   rL   r?   ra   rT   rU   re   rI   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r  r2  r:  r=  rB  rD  rG  rJ  rN  rU  rZ  r]  rd  rh  rk  rn  rp  rx  rs  r{  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r	  r  r  r  r  r'   r   r   r   r   A   s       ! ! ! ! VXXFVXXF$*FHH!&((KU U UB" B" B" B"H  $    2' ' '  - - -
< < <ud 	s 	s	
 	 	s 	s 	t 	3 	$ 	$ 	 	# 	# 	D  	#!" 	u#$ ;  J@C C C9 9 9% % %% % %% % %% % %% % %U U U& & &
% 
% 
%% % %% % %K K K  &* * ** * ** * *!% !% !%F% % %) ) )% % %$ $ $) ) )% % %% % %% % %9 9 98 8 8% % %% % %	% 	% 	%= = =< < <% % %$% % %	 	 	6 6 6% % %% % %
% 
% 
%* * *U U U% % %% % %B B BK K K% % %* * *% % %% % %= = =& & &. . .' ' '% % %% % %% % %) ) )? ? ?
% 
% 
%% % %*% % %" " "" " "
% 
% 
%3 3 3% % %
% % %% % %% % %% % %% % %5 5 54 4 4) ) )% % %
% % %% % %% % %) ) )% % % % %r   r   c                       e Zd Zd ZddZd ZddZd Zd Zd	 Z	dd
Z
d Zd ZddZd Zd Zd Zd Zd Zd Zd ZdZdZdS )r+   c                 "    || _         d| _        d S r   )r
   r<   )r/   r
   s     r   r0   z_Source.__init__:  s    r   Tc                 ^   	 	 | j                             || j                  }|                     ||          s|sn|                                  Nn=# t
          t          f$ r) t          d| d|                                  d          w xY w|t          |          z   | _        || j        fS )NTzToken <z> at z cannot be matched)
r
   ro   r<   _good_token_skip_commentry   	TypeErrorr#   _get_locationrx   )r/   r}  skip_comment
new_offsets       r   rS   z_Source.consume>  s    
	)![..udkBB
##E:66 )l )&&((()  I& 	 	 	&N%NNd&8&8&:&:NNN  	 !3u::-DK((s   AA :Bc                     | j                             || j                  }|t          |          z   | _        || j        fS r*   )r
   ro   r<   rx   r/   r}  r   s      r   rR   z_Source.consume_joined_stringM  s:    [&&udk::
 3u::-DK((r   Nc                 >   t           j        pt          j                    }t          j                    }d                    ||          }d                    ||          }t          j        |          t           _        t           j        }|                     ||          S )Nz(?:{})|(?:{})z({})((\s|\\\n|#[^\n]*\n)*({}))*)	r+   _string_patternr   get_string_patternget_formatted_string_patternformatrecompile_consume_pattern)r/   rB   string_patternformatted_string_patternoriginalr   	repatterns          r   rH   z_Source.consume_stringR  s    " 	:(;==N'2'O'Q'Q$'..( H 9?? G ')j&9&9G#+	$$Y444r   c                     t           j        0t          j        |                                           t           _        t           j        }|                     |          S r*   )r+   _number_patternr(  r)  _get_number_patternr*  r/   r.  s     r   rK   z_Source.consume_numberb  sH    " 	M&(j1I1I1K1K&L&LG#+	$$Y///r   c                 P    |                      t          j        d                    S )Nz\(\s*\))r*  r(  r)  r/   s    r   rM   z_Source.consume_empty_tupleh  s     $$RZ
%;%;<<<r   c                 T    t          j        d          }|                     |          S )Nzwith|,)r(  r)  r*  r2  s     r   rO   z-_Source.consume_with_or_comma_context_managerk  s%    Jy))	$$Y///r   c                     || j         }	 | j                            d||          }n# t          $ r Y dS w xY w	 | j                            d||          }n# t          $ r Y dS w xY w||k     S )z,Checks whether consumed token is in commentsNrt   Tru   F)r<   r
   rindexry   )r/   r}  r<   r]   comment_indexnew_line_indexs         r   r  z_Source._good_tokeno  s     	 KE	 K..sE6BBMM 	 	 	44		![//eVDDNN 	 	 	55	~--s   ( 
66A 
A%$A%c                 V    | j                             d| j        dz             | _        d S )Nru   rC   r
   ro   r<   r4  s    r   r  z_Source._skip_comment}  s%    k''dkAo>>r   c                     | j         d | j                                     d          }t          |          t          |d                   fS )Nru   r   )r
   r<   r   rx   )r/   r-   s     r   r  z_Source._get_location  s=    MdkM*0066E

Cb	NN++r   c                    	 |t          | j                  }|                    | j        | j        |          }|                     |                                |                                          rn|                                  |                                | _        |                                |                                fS r*   )	rx   r
   searchr<   r  groupr]   r  rB   )r/   r.  rB   r  s       r   r*  z_Source._consume_pattern  s    	% '$+&&$$T[$+sCCEu{{}}== %""$$$	% iikk{{}}eiikk))r   c                 `    | j                             || j                  }| | j        |         S r*   r;  r"  s      r   
till_tokenz_Source.till_token  s-    [&&udk::
DK*,--r   c                     |}	 	 | j                             |||          }|                     |||          r|S |}n# t          $ r Y d S w xY wL)NT)r]   )r
   r7  r  ry   )r/   r}  r]   rB   ro   s        r   rg   z_Source.rfind_token  sz    	**5%==##E5#>>   LCC   tt	s   5> > 
AAc                      | || j                  S r*   )r<   )r/   r<   s     r   from_offsetz_Source.from_offset  s    FT[())r   c                 :    | j                             |d|          S r   )r
   r7  )r/   r   r<   s      r   find_backwardsz_Source.find_backwards  s    {!!'1f555r   c                     | j         |         S r*   r
   )r/   ro   s     r   __getitem__z_Source.__getitem__  s    {5!!r   c                      | j         ||         S r*   rH  )r/   rl   js      r   __getslice__z_Source.__getslice__  s    {1Q3r   c                     d}d|z  S )Nz\-?(0[xo][\da-fA-F]+|\d+)z((%s(\.\d*)?|(\.\d+))([eE][-+]?\d+)?[jJ]?r'   )r/   integers     r   r1  z_Source._get_number_pattern  s    .:WDDr   )Tr*   )r$   r%   r&   r0   rS   rR   rH   rK   rM   rO   r  r  r  r*  rA  rg   rD  rF  rI  rL  r1  r$  r0  r'   r   r   r+   r+   9  s?         ) ) ) )) ) )
5 5 5 5 0 0 0= = =0 0 0. . . .? ? ?, , ,
* 
* 
* 
*. . .
 
 
* * *6 6 6" " "     E E E
 OOOOr   r+   r  )rD   r  r(  r9   	itertoolsr   	rope.baser   r   r   r)  COMMA_IN_WITH_PATTERNr   r   r   r   	RopeErrorr#   r   r+   r'   r   r   <module>rS     sR        				        2 2 2 2 2 2 2 2 2 2"
>22 A A A A   (# # #
  	 	 	 	 	:/ 	 	 	u% u% u% u% u% u% u% u%py y y y y y y y y yr   