
    ^hġ                     H   S SK r S SKrS SKrS SKJr  S SKJrJrJrJ	r	J
r
JrJrJr  S SKJ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 SKJr  \(       a  S S	KJr  S S
KJr  \R@                  " \!5      r"\"RG                  \RH                  5         " S S\ RJ                  \5      r&g)    N)contextmanager)TYPE_CHECKINGCallableDefaultDictDictListOptionalUnioncast)fast)TRACING_ENABLEDmake_guard_name)EmitterMixinmake_composite_condition	make_testsubscript_to_slice)StatementMapper)
TraceEvent)GUARD_DATA_T)
BaseTracerc                   .
  ^  \ rS rSrSSS\S\\\R                  4   S\	\
\S\4   4   S\	\
\S\4   4   S	\	\
\S
   4   4S jrS\R                  4U 4S jjrS\R                   4S jr\S\\R                     4S j5       r\S 5       r\S\\R2                  \R4                  4   S\
4S j5       rS@S\R2                  4S jjrS\R                  S\R:                  4S jrS@S\R4                  4S jjr  SAS jr  S@S\\R2                  \R4                  4   S\R:                  S\
S\4S jjr!S\S\4S jr"S\RF                  4S  jr$\%RL                  S\RN                  S\RN                  4S! j5       r(S\RR                  S\RR                  4S" jr*S\\RV                  \RX                  \RZ                  4   4S# jr.\.=r/=r0r1S\Rd                  4S$ jr3S\Rh                  4S% jr5S\Rl                  4S& jr7S\\Rp                  \Rr                  4   4S' jr:\:=r;r<\S\\R
                  \R                  \Rz                  \R|                  4   S(\S\
4S) j5       r?S*\
4S+ jr@S\\R                  \R                  \R                  \R                  4   4S, jrE\E=rF=rG=rHrI\S\\R                  \Rz                  \R|                  4   S\
4S- j5       rJ SBS\\R
                  \R                  \Rz                  \R|                  4   4S. jjrKS\\R                  \Rz                  \R|                  4   4S/ jrL\L=rM=rNrOS\R
                  4S0 jrPS\\R                  \R                  4   4S1 jrS\S=rTrU\%RL                  S\R                  4S2 j5       rWS\R                  4S3 jrYS\R                  S\\R                  \RF                  \R                  4   4S4 jr\S\R                  S\\R                  \RF                  \R                  4   4S5 jr^S\R                  S\R                  4S6 jr`S\R                  4S7 jrb\cR                  S8:  a  \%RL                  S\R                  4S9 j5       rf\%RL                  S\R                  4S: j5       rh\%RL                  S\R                  4S; j5       rj\%RL                  S\R                  4S< j5       rl\%RL                  S\R                  4S= j5       rnS?rqU =rr$ \%RL                  S\R                  4S> j5       rpS?rqU =rr$ )CExprRewriter%   tracerszList[BaseTracer]mapperorig_to_copy_mappinghandler_predicate_by_event.'guard_exempt_handler_predicate_by_eventhandler_guards_by_eventr   c           	      J    [         R                  " U UUUUUU5        S U l        g N)r   __init___top_level_node_for_symbol)selfr   r   r   r   r   r   s          O/home/james-whalen/.local/lib/python3.13/site-packages/pyccolo/expr_rewriter.pyr"   ExprRewriter.__init__&   s2     	 &3#	
 >B'    nodec                 p   > [         TU ]  U5      n[        U[        R                  5      (       a  X!L d   eU$ r!   )supervisit
isinstanceaststmt)r$   r(   ret	__class__s      r%   r+   ExprRewriter.visit<   s3    gmD!dCHH%% ;;
r'   c                 R   [        UR                  [        R                  5      (       d  U$ UnU R                  [
        R                     " U5      (       a?  [        R                  " U5         U R                  [
        R                  X!S9nS S S 5        U$ U$ ! , (       d  f       U$ = fNr/   )
r,   ctxr-   Loadr   r   	load_namer   location_ofemit)r$   r(   	orig_nodes      r%   
visit_NameExprRewriter.visit_NameD   s    $((CHH--K	**:+?+?@KK!!),yy!5!5yyK -t -,s   ,B
B&top_level_nodec              #   h   #    U R                   nUb  Uc  Xl          S v   X l         g ! X l         f = f7fr!   r#   )r$   r=   olds      r%   attrsub_contextExprRewriter.attrsub_contextM   s6     --;.0 /=+	2.1+c+s   2' 2/2c                     U R                   S L$ r!   r?   )r$   s    r%   _inside_attrsub_load_chain'ExprRewriter._inside_attrsub_load_chainZ   s    ..d::r'   returnc                 B   [        U [        R                  5      n[        U R                  [        R                  5      (       a'  U(       a  [
        R                  $ [
        R                  $ [        U R                  [        R                  5      (       a'  U(       a  [
        R                  $ [
        R                  $ [        U R                  [        R                  5      (       a'  U(       a  [
        R                  $ [
        R                  $ [        SU R                  5      e)Nzunknown context: %s)r,   r-   	Subscriptr5   r6   r   before_subscript_loadbefore_attribute_loadStorebefore_subscript_storebefore_attribute_storeDelbefore_subscript_delbefore_attribute_del
ValueError)r(   is_subscripts     r%   _get_attrsub_eventExprRewriter._get_attrsub_event^   s    !$6dhh))   00  55
 #)),,   11  66
 #''**   //  44 2DHH==r'   c                 ,   [         R                  " UR                  5         [        [        R
                  U5      n[         R                  " UR                  5      nS S S 5        U R                  UWU R                  U5      US9$ ! , (       d  f       N/= f)Ncall_context)
r   r8   valuer   r-   	AttributeStrattrvisit_Attribute_or_SubscriptrS   )r$   r(   rW   	attr_nodeattr_or_subs        r%   visit_AttributeExprRewriter.visit_Attributev   sr    djj)S]]D1I((9>>2K * 00+t66t<< 1 
 	
 *)s   ;B
B	subscriptc                 D   [        U[        R                  5      (       a  U R                  UR                  5      $ [        U[        R
                  5      (       a  UR                  c  [        R                  " S 5      OU R                  UR                  5      nUR                  c  [        R                  " S 5      OU R                  UR                  5      n[        R                  " [        R                  " S[        R                  " 5       5      X#/UR                  c  / OU R                  UR                  5      /-   / S9$ [        U[        R                  [        R                  45      (       a  [        U[        R                  5      (       a  UR                   nOUR"                  nU Vs/ s H  oPR%                  U5      PM     nn[        R                  " U[        R                  " 5       5      n['        [        R(                  U5      $ U R                  U5      $ s  snf )Nslice)funcargskeywords)r,   r-   Indexr+   rX   Slicelowerr   NameConstantupperCallNamer6   stepExtSliceTupleeltsdims_maybe_convert_ast_subscriptr   expr)r$   ra   ri   rk   rq   elts         r%   rs   )ExprRewriter._maybe_convert_ast_subscript~   s   i++::ioo..	399-- ??* !!$'ZZ	0  ??* !!$'ZZ	0 
 99YYw
3^"/2djj6P5QS	  	CLL#))#<==)SYY// ~~ ~~FJKds55c:dDK

44I),,::i((	 Ls   ,Hc                    U R                  U5      nU R                  S 5         [        R                  " [	        UR
                  S5      (       a  UR
                  OUR                  5         U R                  UR
                  5      nU R                  [        R                     " U5      (       a  U R                  [        R                  XS9nU R                  [        R                     " U5      (       a  U R                  [        R                  XS9nU R                  U   " UR
                  5      (       a+  U R                  [        R                  UR
                  5      nOUn[        R                  S:  a  XQl        O[        R                   " U5      Ul        S S S 5        S S S 5        U R#                  UWX2S9$ ! , (       d  f       N'= f! , (       d  f       N0= f)Nlinenor4   )   	   rV   )rS   rA   r   r8   hasattrrc   rX   rs   r   r   before_subscript_slicer9   after_subscript_slice_load_saved_slicesysversion_inforg   r\   )r$   r(   rW   
evt_to_useslcreplacement_slices         r%   visit_SubscriptExprRewriter.visit_Subscript   sz   ,,T2
!!$'!!%djj(;;

 77

C22:3T3TU  ))J$E$Et)UC22:3S3ST  ))J$D$Dd)TC22:>tzzJJ26))"44djj3% ),%##v-!2J!%,=!>DJ+ (. 00#z 1 
 	
-  ('s%   AG+D/F;G;
G		G
Gc                    U R                   (       a  U$ UnU=(       d    [        U5      n[        US[        R                  " 5       5      n[        U[        R                  5      nU(       d  U$ [        R                  " U5         [        [        R                  " U5      S9nU R                  [        R                     " U5      (       a$  U R                  " [        R                  U4SU0UD6nU R                  [        R                     " U5      (       a$  U R                  " [        R                  U4SU0UD6nS S S 5        U$ ! , (       d  f       U$ = f)Nr5   rV   r/   )rD   idgetattrr-   r6   r,   r   r8   dictrj   r   r   before_load_complex_symbolr9   after_load_complex_symbol)r$   r(   rW   orig_node_idr:   r5   is_loadextra_kwargss           r%   *_maybe_wrap_symbol_in_before_after_tracing7ExprRewriter._maybe_wrap_symbol_in_before_after_tracing   s4    **K	#4r)}i
3S#((+Kd#T->->|-LML..z/T/TU  yy99   #	 ..z/S/ST  yy88   #	 $* + $#* s   B6E
Er^   r   rW   c                    Un[        U5      n[        R                  " UR                  5         [	        U[
        R                  5      nU R                  U   " U5      nU R                  U5         U R                  c   e0 n	[	        UR                  [
        R                  5      (       a-  [        R                  " UR                  R                   5      U	S'   U R                  UR                  5      Ul        U(       a  U(       a  S n
[	        U[
        R                  5      (       a6  [        U5      n[	        U[
        R                  5      (       a  UR                   n
U
c  [        R                  " S 5      O[        R                  " U
5      U	S'   U R                  " UU4UR                  U[        R                  " U5      U R!                  U R                  5      S.U	D6Ul        S S S 5        S S S 5        [	        UR"                  [
        R$                  5      (       a  W(       a  [&        R(                  O[&        R*                  nU R                  U   " U5      (       aE  [        R                  " U5         U R                  UUU[        R                  " U5      S9nS S S 5        U R-                  XS9$ ! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N?= f)Nobj_namesubscript_name)r/   attr_or_subscriptrW   top_level_node_id)r/   rW   )r   )r   r   r8   rX   r,   r-   rH   r   rA   r#   rm   rZ   r+   r   rj   r9   get_copy_id_astr5   r6   r   after_subscript_loadafter_attribute_loadr   )r$   r(   r^   r   rW   r:   r   rR   should_emit_evtextra_keywordsr   	slice_val	after_evts                r%   r\   )ExprRewriter.visit_Attribute_or_Subscript   sJ    	)}djj)%dCMM:L"==jI)TO%%d+66BBB57djj#((3315$**--1HN:.!ZZ

3
"#)-%dCMM::(:4(@I))SXX>> 2;  .5 !--d3!%.!9 ''78
 "&"$
" !JJ*5%)%6%6|%D*.*>*> ;;+
" )
"DJ) , *F dhh))   //44 
 ..y9)DD%%d+99!$ %)%6%6|%D	 % D , >> ? 
 	
_ ,+ *)T ,+s1   AK/E4J1#K3'K1
J?	;K
K
K!rf   compute_is_lastc                    / n[        U5       GH  u  pV[        U[        R                  5      nU=(       a    UR                  S L nU(       d  U(       a  [        US5      n	OUn	U(       a  U(       d  [        US5      n
OS n
[        R                  " U	5         U R                  S 5         U R                  U	5      nS S S 5        [        R                  [        R                  4 H  nU R                  U   " U	5      (       d  M  U R                  S 5         [        [        R                  U R!                  UU	W[        R"                  " U5      [        R"                  " U5      U
c  [        R"                  " U
5      O[        R$                  " U
5      [        R"                  " U=(       a    U['        U5      S-
  :H  5      S95      nS S S 5        M     U(       d  U(       a  [)        USW5        OWnS S S 5        UR+                  U5        GM     U$ ! , (       d  f       GNX= f! , (       d  f       GMK  = f! , (       d  f       NK= f)NrX   arg   )r/   
is_starredis_kwstarredkeyis_last)	enumerater,   r-   Starredr   r   r   r8   rA   r+   r   before_argumentafter_argumentr   r   rt   r9   rj   rZ   lensetattrappend)r$   re   rf   r   replacement_argsarg_idxr   r   r   maybe_kwargr   new_arg_valuearg_evts                r%   _get_replacement_args"ExprRewriter._get_replacement_args   s   %dOLG#C5J#74L:%c73!c5)!!+.))$/$(JJ{$;M 0 * : :J<U<UVG66w?LL!11$7,0 # $		$+$/(5/3/@/@/L151B1B<1P ,/; )-(9(9#(>-1XXc],0,=,=(7(TGs4yST}<T-& !* !"-M 87  W* zC-8'C7 /8 ##C(O ,P  9 0/ 87 /.sD   H/'H
9AH/ H/B/H	 *H/

HH/
H,&	H//
H=	c           	         UnUn[        U5      nU R                  U5         [        UR                  [        R
                  5      (       a   U R                  UR                  SS9Ul        Oi[        UR                  [        R                  5      (       a   U R                  UR                  SS9Ul        O U R                  UR                  5      Ul        S S S 5        U R                  UR                  S[        UR                  5      S:H  S9Ul        U R                  UR                  SSS9Ul        U R                  [        R                      " U5      (       ag  ["        R$                  " UR                  5         U R'                  [        R                   UUR                  U R)                  U5      S9Ul        S S S 5        U R                  [        R*                     " U5      (       aO  ["        R$                  " U5         U R'                  [        R*                  UUU R)                  U5      S9nAS S S 5        U R-                  USUS9$ ! , (       d  f       GN|= f! , (       d  f       N= f! , (       d  f       NB= f)NTrV   Fr   )r   )r/   call_node_id)rW   r   )r   rA   r,   rd   r-   rY   r_   rH   r   r+   r   re   r   rf   r   r   before_callr   r8   r9   r   
after_callr   )r$   r(   ret_as_callr/   r   s        r%   
visit_CallExprRewriter.visit_CallL  s*    $*.$x!!+.+**CMM::#'#7#7$$4 $8 $  K,,cmm<<#'#7#7$$4 $8 $  $(::k.>.>#?  /  55eS9M9M5NRS5S 6 
  $99  $  :  
 **:+A+AB4HH!!+"2"23#'99** #((!%!5!5l!C	 $- $  4 **:+@+@A$GG!!#&ii)) !%!5!5l!C	      ' >>d ? 
 	
i /.B 43 '&s$   B3I	:?I?1I,	
I
I),
I:c                     U R                  UR                  5      Ul        U R                  [        R                     " U5      (       a-  U R                  [        R                  XR                  S9Ul        U$ r3   )r+   rX   r   r   after_expr_stmtr9   r$   r(   s     r%   
visit_ExprExprRewriter.visit_Expr  sU    ZZ

+
**:+E+EFtLL:#=#=tTDJr'   c                     U R                  U5      (       a  U$ [        [        R                  U R	                  U5      5      $ r!   )is_tracing_disabled_contextr   r-   Withgeneric_visitr   s     r%   
visit_WithExprRewriter.visit_With  s4    ++D11K$"4"4T":;;r'   c                    [        U[        R                  5      (       a  UR                  c  U$ UR                  c   e[        U[        R                  5      (       a<  / nUR
                   H#  nUR                  U R                  U5      5        M%     X!l        O U R                  UR                  5      Ul        UR                  n[        U5      n[        U[        R                  [        R                  45      (       a!  [        R                  n[        R                  nO [        R                  n[        R                  n[        R                   " UR                  5         U R                  UR                  5      Ul        U R"                  U   " U5      (       a  U R%                  XeUR                  S9Ul        U R"                  U   " U5      (       a  U R%                  XuUR                  S9Ul        S S S 5        U$ ! , (       d  f       U$ = fr3   )r,   r-   	AnnAssignrX   Assigntargetsr   r+   targetr   r   before_assign_rhsafter_assign_rhsbefore_augassign_rhsafter_augassign_rhsr   r8   r   r9   )r$   r(   new_targetsr   
orig_valueorig_value_id
before_evtr   s           r%   visit_assignmentExprRewriter.visit_assignment  s{   dCMM**tzz/AKzz%%%dCJJ''K,,""4::f#56 '&L**T[[1DKZZ
:dS]]CJJ788#55J"33I#88J"66Idjj)DJJ/DJ..z::FF!YYzdjjYQ
..y9*EE!YYyTZZYP
 *  *) s    BG==
Hc                 &   [         R                  " U5         U R                  UR                  5      Ul        UR                   Vs/ s H  o R                  U5      PM     snUl        UR
                   Vs/ s H  o R                  U5      PM     snUl        U R                  [        R                     " U5      (       a-  U R                  [        R                  XR                  S9Ul        UsS S S 5        $ s  snf s  snf ! , (       d  f       g = fr3   )
r   r8   r+   testbodyorelser   r   after_if_testr9   )r$   r(   r.   s      r%   visit_IfExprRewriter.visit_If  s    d#

499-DI6:ii@idD)i@DI8<D::d+DDK..z/G/GHNN IIj&>&>))IT	 $#@D $#s*   /DC8 D6C=AD8
D
Dc                    [        [        US[        R                  " 5       5      [        R                  5      (       d   e[	        [        R
                  U R                  [        U5         5      n[	        [        R
                  U R                  U5      5      n[        R                  " U5         [        R                  " [        [        [        5      U R                  [         R"                     " U5      (       a3  U R%                  [         R"                  U[        R&                  " S5      S9OS /5      UR(                  UR(                  S9Ul        U R                  [         R*                     " U5      (       a-  U R%                  [         R*                  XR(                  S9Ul        U R                  [         R,                     " U5      (       a  U R%                  [         R,                  XS9nU R                  [         R.                     " U5      (       a  U R%                  [         R.                  XS9nS S S 5        U$ ! , (       d  f       U$ = f)Nr5   Tr4   r   r   r   )r,   r   r-   r6   r   Lambdar   r   r   r   r8   IfExpr   r   r   r   r   before_lambda_bodyr9   rj   r   after_lambda_bodybefore_lambdaafter_lambda)r$   r(   untraced_lamret_nodes       r%   visit_LambdaExprRewriter.visit_Lambda  s   '$sxxz:CHHEEEECJJ(A(A"T((KL#CJJ0B0B40HId# JJ-!/2  $>> * = = * ,  , !II * = = $$($5$5d$; &  "&  ]]#((%HM( ..z/K/KL  !%		00$MM !* ! ..z/G/GHVV99Z%=%=t9R..z/F/FGUU99Z%<%<d9Q= $> ? $#> s   /FH==
Ic                    [         R                  " U5       GH  u  p#US:X  Ga#  [        [         R                  U R                  [        U5         5      n[        R                  " U5         U R                  U5      nU R                  [        R                     " U5      (       a  U R                  [        R                  XS9nU R                  (       ac  [        U5      nU R                  U5        [        R                   " [#        [%        [&        5      [%        U5      /5      UUR(                  S9Ul        OXQl        S S S 5        GM0  [+        U[,        5      (       a.  [/        XU Vs/ s H  opR                  U5      PM     sn5        GMs  [/        XU R                  U5      5        GM     U$ ! , (       d  f       GM  = fs  snf )Nr   r4   r   )r-   iter_fieldsr   Whiler   r   r   r8   r+   r   r   after_while_testr9   global_guards_enabledr   register_guardr   r   r   r   r   r,   listr   )r$   r(   namefieldloop_node_copyvisited_test
loop_guardru   s           r%   visit_WhileExprRewriter.visit_While  s]   ??40KDv~!%cii1J1J2d81T!U%%d+#'::e#4L66z7R7RS  (,yy&77 (1 ( 11%4^%D
++J7$(JJ!9$-o$>$-j$9!"" ".#1#6#6	%	 %1	- ,+. E4(($FZZ_$FGDJJu$56; 1< 7 ,+0 %Gs   *CF,&F?,
F<	c                 &   UR                   n[        R                  " U5         U R                  UR                   5      Ul         U R                  [
        R                     " U5      (       a-  U R                  [
        R                  X!R                   S9Ul         U R                  [
        R                     " U5      (       a-  U R                  [
        R                  X!R                   S9Ul         S S S 5        U R                  UR                  5      Ul	        UR                   Vs/ s H  o0R                  U5      PM     snUl
        UR                   Vs/ s H  o0R                  U5      PM     snUl        U$ ! , (       d  f       N= fs  snf s  snf r3   )iterr   r8   r+   r   r   before_for_iterr9   after_for_iterr   r   r   )r$   r(   orig_node_iterr.   s       r%   visit_For_or_Async_For#ExprRewriter.visit_For_or_Async_For  s/   d#

499-DI..z/I/IJ  !II..II & 	 ..z/H/HI  !II--~99 & 	 $ jj-26))<)$ZZ%)<	48KK@KDzz$'K@# $# =@s   CE8$F	F8
Fbeforec                 r   [        U [        R                  5      (       a'  U(       a  [        R                  $ [        R
                  $ [        U [        R                  5      (       a'  U(       a  [        R                  $ [        R                  $ [        U [        R                  5      (       a'  U(       a  [        R                  $ [        R                  $ [        U [        R                  5      (       a'  U(       a  [        R                  $ [        R                  $ [        S[        R                   " U 5      5      eNzinvalid ast node: %s)r,   r-   r   r   before_dict_literalafter_dict_literalr   before_list_literalafter_list_literalSetbefore_set_literalafter_set_literalrp   before_tuple_literalafter_tuple_literal	TypeErrordump)r(   r   s     r%   #_ast_container_to_literal_trace_evt0ExprRewriter._ast_container_to_literal_trace_evt  s     dCHH%%  ..  22
 chh''  ..  22
 cgg&&  --  11
 cii((  //  33 2CHHTNCCr'   evtc           	      "   U R                   [        U5         n[        R                  " U5         U R	                  U5      n0 nU R
                  (       a6  [        U5      nU R                  U5        [        R                  " U5      US'   OS nU R                  U   " U5      (       a  U R                  " X!4SU0UD6nUb7  [        R                  " [        [        [        5      [        U5      /5      UUS9nS S S 5        U$ ! , (       d  f       W$ = f)Nguardr/   r   )r   r   r   r8   r+   r   r   r   rZ   r   r9   r   r   r   r   )r$   r   r  untraced_fieldvisited_fieldr   r   s          r%   _transform_comprehension_field+ExprRewriter._transform_comprehension_field8  s    222e9=e$ JJu-ML)),^<
##J/(,(<W%!
..s3NCC $		# X- X< X% $

1%o6%j1 ')	! %, - %$, s   CC??
Dc           	      d   [         R                  [         R                  [         R                  S.R	                  5        H1  u  p#[        XS 5      nUc  M  [        XU R                  XC5      5        M3     UR                   H  n[        R                  " U5       H  u  pdUS:X  aV  [        [        UR                  5      5       H2  u  pxU R                  U[         R                  5      UR                  U'   M4     Ma  [        US5      (       a  [        XVU R!                  U5      5        M  M     M     U$ )N)ru   r   rX   ifs_fields)r   after_comprehension_eltafter_dict_comprehension_keyafter_dict_comprehension_valueitemsr   r   r  
generatorsr-   r   r   r   r  after_comprehension_ifr{   r+   )	r$   r(   	fieldnamer  r   compr   idxif_fields	            r%   visit_generic_comprehension(ExprRewriter.visit_generic_comprehensionR  s     55::>>
 %'	NI
 DT2E T%H%H%T OOD"t45=)24>)B(,(K(K$j&G&G) *C UI..D

5(9:  5 $ r'   c                 \   [        U [        R                  5      (       a  [        R                  $ [        U [        R
                  5      (       a  [        R                  $ [        U [        R                  5      (       a  [        R                  $ [        S[        R                  " U 5      5      er   )r,   r-   r   r   list_eltr  set_eltrp   	tuple_eltr	  r
  )r(   s    r%   _ast_container_to_elt_trace_evt,ExprRewriter._ast_container_to_elt_trace_evtp  sq     dCHH%%&&&cgg&&%%%cii(('''2CHHTNCCr'   c                 b   U R                   [        U5         nUnU(       a)  [        [        R                  U R                  U5      5      n[        [        US[        R                  " 5       5      [        R                  5      (       d  U$ [        R                  " U5         U R                  USS9nU R                  U   " U5      (       a  U R                  XQUS9nU R                  USS9nU R                  U   " U5      (       a  U R                  XaUS9nS S S 5        U$ ! , (       d  f       U$ = f)Nr5   T)r   r4   F)r   r   r   r-   rt   r   r,   r   r6   r   r8   r  r   r9   )r$   r(   should_inner_visituntraced_litr   lit_before_evtlit_after_evts          r%   visit_literalExprRewriter.visit_literal}  s   
 00D:!CHHd&8&8&>?H'$sxxz:CHHEEOd#!EEdSWEXN..~>|LL99^x9H DDTRWDXM..}=lKK99]h9G $  $# s    A5D
D.c                 Z   / n[        [        US[        R                  " 5       5      [        R                  5      nSnU R	                  U5      n[        UR                  5       GH  u  pg[        U[        R                  5      (       a$  SnUR                  U R                  U5      5        MI  U(       a  U R                  U   " U5      (       d"  UR                  U R                  U5      5        M  [        R                  " U5         UR                  U R                  UUU R                  U5      U(       a  [        R                  " S 5      O[        R                  " U5      U R!                  U5      S95        S S S 5        GM     X!l        U R#                  USS9$ ! , (       d  f       GMG  = f)Nr5   FT)r/   indexcontainer_node_idr*  )r,   r   r-   r6   r'  r   rq   r   r   r+   r   r   r8   r9   rj   Numr   r.  )r$   r(   traced_eltsr   saw_starredelt_trace_evtiru   s           r%   visit_collectionExprRewriter.visit_collection  sL   &(WT5#((*=sxxH<<TB		*FA#s{{++"""4::c?3D$C$CM$R% % ""4::c?3!!#&""II% JJsO9Dd//5$((ST+*.*>*>t*D   '& +(  	!!$5!AA '&s   A2F
F*	c                    / n/ n[        UR                  UR                  5       GH  u  pEUc  UR                  S 5        O[        R
                  " U5         U R                  U5      nU R                  [        R                     " U5      (       a?  U R                  [        R                  UUU R                  U5      U R                  U5      S9nUR                  U5        S S S 5        [        R
                  " U5         Uc  [        R                  " S 5      nOU R                  U5      nU R                  U5      nU R                  [        R                     " U5      (       a0  U R                  [        R                  UUUU R                  U5      S9nUR                  U5        S S S 5        GM     X!l        X1l        U R                  USS9$ ! , (       d  f       N= f! , (       d  f       GM  = f)N)r/   value_node_iddict_node_id)r/   key_node_idr=  Fr3  )zipkeysvaluesr   r   r8   r+   r   r   dict_keyr9   r   rj   
dict_valuer.  )	r$   r(   traced_keystraced_valueskv
traced_keykey_node_id_asttraced_values	            r%   
visit_DictExprRewriter.visit_Dict  s   02(*		4;;/DAy""4(%%a(!%AJ66z7J7JKANN%)YY&// **.*>*>q*A)-)=)=d)C &/ &
  &&z2 ) !!!$9/3/@/@/FO&*&:&:1&=O#zz!}22:3H3HI!LL#'99"--($3%)%9%9$%? $- $L $$\2 %$! 0@  	#!!$5!AA; )( %$s   B
G>B&G
G	
G.	c                    U R                  UR                  5        UR                   H  nU R                  U5        M     / n[	        UR
                  5       H  u  pEU R                  [        R                     " U5      (       d"  UR                  U R                  U5      5        MO  [        R                  " U5         UR                  U R                  [        R                  UU R                  U5      U R                  U5      [        R                  " U5      S95        S S S 5        M     X1l        U$ ! , (       d  f       M  = f)N)r/   func_node_iddecorator_idx)r   re   r   r+   r   decorator_listr   r   	decoratorr   r   r8   r9   r   r4  )r$   r(   ru   new_decorator_listr  rQ  s         r%   %visit_FunctionDef_or_AsyncFunctionDef2ExprRewriter.visit_FunctionDef_or_AsyncFunctionDef  s     	499%99CJJsO '(;(;<NC22:3G3GHSS"))$**Y*?@!!),"))II",,! JJy1%)%9%9$%?&*hhsm   -,	 = 1 -,s   <A#D33
E	c                    UR                   c  U$ UR                   nU R                  UR                   5      Ul         U R                  [        R                     " U5      (       a-  U R                  [        R                  X!R                   S9Ul         U R                  [        R                     " U5      (       a-  U R                  [        R                  X!R                   S9Ul         U$ r3   )rX   r+   r   r   before_returnr9   after_return)r$   r(   orig_node_values      r%   visit_ReturnExprRewriter.visit_Return  s    ::K**ZZ

+
**:+C+CD_UU((/zz # DJ **:+B+BCOTT''jj # DJ r'   c                     [        [        R                  U R                  U5      5      nUR                   H  n[        R
                  " 5       Ul        M     U$ r!   )r   r-   Deleter   r   rN   r5   )r$   r(   r/   r   s       r%   visit_DeleteExprRewriter.visit_Delete   s=    3::t11$78kkFFJ "
r'   c                 2   U R                   [        U5         nUR                  nS[        R                  4S[        R
                  44 H  u  pE[        X5      nU R                  U   " U5      (       aK  [        R                  " U5         [        UUU R                  XVU R                  U5      S95        S S S 5        Mu  [        XU R                  U5      5        M     UnU R                  [        R                     " U5      (       a  [        R                  " U5         U R                  [        R                  UU R                  [        R                  " U[        R                   " S["        R$                  " 5       5      [        R                   " S["        R$                  " 5       5      S9[        R&                  " SS 5      [        R&                  " SS 5      /S9UR(                  UR*                  /S9nS S S 5        U R                  [        R,                     " U5      (       a?  [        R                  " U5         U R                  [        R,                  XS9nS S S 5        U$ U$ ! , (       d  f       GM*  = f! , (       d  f       N= f! , (       d  f       U$ = f)	Nleftrightr4   xy)opr`  ra  r   re   r/   before_expr_args)r   r   rd  r   left_binop_argright_binop_argr   r   r   r8   r   r9   r+   before_binopmake_lambdaBinOprm   r-   r6   r   r`  ra  after_binop)r$   r(   untraced_noderd  r[   operand_evtoperand_noder/   s           r%   visit_BinOpExprRewriter.visit_BinOp  s	   11"T(;WW Z../j001"
D #4.L..{;LII%%l3		'4::l;S "  43 DJJ|$<="
" 6:**:+B+BCMRR!!$'ii++((!ZZ!!%3
!;"&))C"<
 #hhsD1488C3FG )  '+ii%<    ( **:+A+AB=QQ!!$'ii
 6 6iF (
s
= 43 (' ('
s%   	+I#CI68J#
I3	6
J
Jc                    U R                   [        U5         nU R                  [        R                     " UR
                  5      (       aq  [        R                  " UR
                  5         U R                  [        R                  UR
                  U R                  UR
                  5      S9Ul        S S S 5        O U R                  UR
                  5      Ul        [        UR                  5       H  u  p4U R                  [        R                     " U5      (       a[  [        R                  " U5         U R                  [        R                  X@R                  U5      S9UR                  U'   S S S 5        M  U R                  U5      UR                  U'   M     UnU R                  [        R                     " U5      (       Gaa  [        R                  " U5         U R                  [        R                  UU R                  [        R                  " UR                   [        R"                  " S[$        R&                  " 5       5      [)        [+        UR                  5      5       Vs/ s H0  n[        R"                  " SU 3[$        R&                  " 5       5      PM2     snS9[        R,                  " SS 5      /[)        [+        UR                  5      5       Vs/ s H  n[        R,                  " SU 3S 5      PM     sn-   S9UR
                  /UR                  -   S9nS S S 5        U R                  [        R.                     " U5      (       a?  [        R                  " U5         U R                  [        R.                  XS9nS S S 5        U$ U$ ! , (       d  f       GN= f! , (       d  f       GM  = fs  snf s  snf ! , (       d  f       N= f! , (       d  f       U$ = f)Nr4   rb  y_)opsr`  comparatorsre  rf  )r   r   r   r   left_compare_argr`  r   r8   r9   r+   r   rv  compare_argbefore_comparerk  Compareru  rm   r-   r6   ranger   r   after_compare)r$   r(   rn  r  
comparatorr/   r8  s          r%   visit_CompareExprRewriter.visit_Compare0  s    11"T(;**:+F+FG		RR!!$)), II//

499@U & 	 -,
 

499-DI()9)9:OC..z/E/EFzRR%%j1,0II"..


:@V -6 -D$$S) 21
 )-

:(>  %  ; 8<**:+D+DEmTT!!$'ii--((!\\ $!%3
!; */s43C3C/D)E))EA !%		Bqc(CHHJ ?)E) #hhsD12 &+3t/?/?+@%A%A !HHr!Xt4%A )  '+ii[43C3C%C%    (* **:+C+CD]SS!!$'ii
 8 8$iH (
s
U -, 21") (', ('
sP   +AN4;N"BN?'7N5;N?$N:="N?%O
N"
N2	5
N??
O
Oc                    UR                   c  [        R                  " U5         [        R                  " [        R
                  [        R                  " 5       5      Ul         UR                   U R                  [        UR                   5      '   S S S 5        [        UR                   5      nO5[        UR                   5      nU R                  UR                   5      Ul         UR                   c   eU R                  [        R                     " U R                  U   5      (       aV  [        R                  " UR                   5         U R                  [        R                  X!R                   S9Ul         S S S 5        UR                   Vs/ s H  o0R                  U5      PM     snUl        U$ ! , (       d  f       GN&= f! , (       d  f       NR= fs  snf r3   )typer   r8   rm   BaseException__name__r-   r6   r   r   r+   r   r   exception_handler_typer9   r   )r$   r(   node_type_idr.   s       r%   visit_ExceptHandler ExprRewriter.visit_ExceptHandlerc  s@   99!!$' IIm&<&<chhjI	;?99))"TYY-8 ( dii=Ldii=L

499-DIyy$$$**:+L+LM%%l3
 
 !!$)), II55| & 	 - 37))<)$ZZ%)<	! (' -, =s   A*F-.F?	G-
F<?
Gc                 &   UnUnU R                   [        R                     " U5      (       a  U R                  [        R                  X#S9nU R                   [        R                     " U5      (       a  U R                  [        R                  X#S9nU$ r3   )r   r   before_fstringr9   after_fstring)r$   r(   r:   transformeds       r%   visit_JoinedStrExprRewriter.visit_JoinedStrw  s    	#**:+D+DEiPP))))9 $ K **:+C+CDYOO))(() $ K r'   )ry      c                     [        UR                  [        5      (       aG  U R                  [        R
                     " U5      (       a  U R                  [        R
                  XS9$ g g r3   )r,   sbytesr   r   after_bytesr9   r   s     r%   visit_BytesExprRewriter.visit_Bytes  sY    $&&%((T-L-L&&.. . yy!7!7yHH.(r'   c                     U R                   [        R                     " U5      (       a  U R                  [        R                  XS9$ U$ r3   )r   r   ellipsisr9   r   s     r%   visit_EllipsisExprRewriter.visit_Ellipsis  s<    ..z/B/BCDIIyy!4!4dyEEr'   c                 p   UR                   cF  U R                  [        R                     " U5      (       a  U R	                  [        R                  XS9$ [        UR                   5      [        L aF  U R                  [        R                     " U5      (       a  U R	                  [        R                  XS9$ U$ r3   )rX   r   r   
after_noner9   r  bool
after_boolr   s     r%   visit_NameConstantExprRewriter.visit_NameConstant  s    zz!d&E&E%%'' ' yy!6!6yGGDJJ4'22:3H3HI$OO99Z%:%:D9KKKr'   c                 R   [        UR                  5      [        L aF  U R                  [        R
                     " U5      (       a  U R                  [        R
                  XS9$ [        UR                  5      [        L aF  U R                  [        R                     " U5      (       a  U R                  [        R                  XS9$ [        UR                  5      [        L aF  U R                  [        R                     " U5      (       a  U R                  [        R                  XS9$ U$ r3   )r  nintr   r   	after_intr9   floatafter_floatcomplexafter_complexr   s     r%   	visit_NumExprRewriter.visit_Num  s    DFF|s"22:3G3GHNN99Z%9%949JJDFF|u$22:3I3IJ4PP99Z%;%;T9LLDFF|w&22:3K3KLTRR99Z%=%=t9NNKr'   c                     [        UR                  5      [        L aF  U R                  [        R
                     " U5      (       a  U R                  [        R
                  XS9$ U$ r3   )r  r  strr   r   after_stringr9   r   s     r%   	visit_StrExprRewriter.visit_Str  sL    DFF|s"22:3J3JKDQQ99Z%<%<d9MMKr'   c                    UR                   SL aF  U R                  [        R                     " U5      (       a  U R	                  [        R                  XS9$ UR                   cF  U R                  [        R
                     " U5      (       a  U R	                  [        R
                  XS9$ [        UR                   5      [        L aF  U R                  [        R                     " U5      (       a  U R	                  [        R                  XS9$ [        UR                   5      [        L aF  U R                  [        R                     " U5      (       a  U R	                  [        R                  XS9$ [        UR                   5      [        L aF  U R                  [        R                     " U5      (       a  U R	                  [        R                  XS9$ [        UR                   5      [        L aF  U R                  [        R                     " U5      (       a  U R	                  [        R                  XS9$ [        UR                   5      [        L aF  U R                  [        R                      " U5      (       a  U R	                  [        R                   XS9$ [        UR                   5      ["        L aF  U R                  [        R$                     " U5      (       a  U R	                  [        R$                  XS9$ U$ )N.r4   )rX   r   r   r  r9   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   s     r%   visit_ConstantExprRewriter.visit_Constant  s?   zzS T%D%D##&& & yy!4!4dyEEzz!d&E&E%%'' ' yy!6!6yGG DJJ5(22:3I3IJ4PP99Z%;%;T9LLDJJ4'22:3H3HI$OO99Z%:%:D9KKDJJ3&22:3G3GHNN99Z%9%949JJDJJ5(22:3I3IJ4PP99Z%;%;T9LLDJJ7*22:3K3KLTRR99Z%=%=t9NNDJJ3&22:3J3JKDQQ99Z%<%<d9MMKr'   r?   )F)FN)T)sr  
__module____qualname____firstlineno__r   r   r  r-   ASTr   r   r   r  r   r"   r+   rm   r;   r   r	   rA   propertyrD   staticmethodr
   rY   rH   rS   r_   rt   rs   r   r   r\   r   rl   r   r   location_of_argExprr   r   r   r   r   	AugAssignr   visit_AnnAssignvisit_Assignvisit_AugAssignIfr   r   r   r   r   ForAsyncForr   	visit_Forvisit_AsyncForr  rp   r  r  DictCompGeneratorExpListCompSetCompr!  visit_DictCompvisit_GeneratorExpvisit_ListCompvisit_SetCompr'  r.  r9  
visit_List	visit_Setvisit_TuplerK  FunctionDefAsyncFunctionDefrS  visit_FunctionDefvisit_AsyncFunctionDefReturnrY  r\  r]  rl  r   rq  rz  r~  ExceptHandlerr  	JoinedStrr  r   r   Bytesr  Ellipsisr  rj   r  r4  r  rZ   r  Constantr  __static_attributes____classcell__)r0   s   @r%   r   r   %   s   B#B  B #3<0	B
 %0
HS$Y<O0O$PB 2=d++2
B "-Zn9M-M!NB,#'' sxx  
2hsww.? 
2 
2 ; ; >s}}cmm'C!D > > >.
CMM 
)cgg )#(( )>
CMM 
@ 	%X #=
CMM3==01=
 XX=
 	=

 =
~* D * 4 * X;
sxx ;
z 
sxx CHH  <sxx <CHH <U3==#**cmm+S%T 6 8HGOGl_SVV # #J		 B5#,,1F+G * "87IDCHHchh:;DEID	D D< 4#,,(8(8#,,ST6 	$N ' .= 
DCHHcggsyy01
D	
D 
D  CHHchh:;(BU388SWWcii+G%H B8 ,<;J;[%Bsxx %BN#//3+?+??@0 2WV.	   (		 (eCIIsxx4R.S (T1KK1	s{{CHHcii/	01f(9(9 c>O>O (CMM  & 				ICII 	I 
	I 
			s|| 	 
	 
			3+;+; 	 
	 
		
	#'' 
	 

	 
			#'' 	 
	 
			s|| 	 
	r'   r   )'r-   loggingr   
contextlibr   typingr   r   r   r   r   r	   r
   r   pyccolor   pyccolo.extra_builtinsr   r   pyccolo.fastr   r   r   r   pyccolo.stmt_mapperr   pyccolo.trace_eventsr   pyccolo.ast_rewriterr   pyccolo.tracerr   	getLoggerr  loggersetLevelWARNINGNodeTransformerr    r'   r%   <module>r     s{    
  
 %	 	 	  C  0 +1) 
		8	$   n3&& nr'   