
    ^hR                        S SK r S SKrS SKJ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JrJrJr  S SKJrJr  S SKJr  S SKJr  S SKJrJr  S S	KJr  S S
KJr  S SK J!r!J"r"  S SK#J$r$  \(       a  S SK%J&r&  \RN                  " \(5      r)\)RU                  \RV                  5        \" S5      r,\\\\\-\ R\                  4   /\/4   4   r0 " S S\ Rb                  5      r2g)    N)defaultdict)contextmanager)TYPE_CHECKINGCallableDefaultDictDict	GeneratorListOptionalSetTupleTypeVarUnion)AstBookkeeperBookkeepingVisitor)ExprRewriter)HandlerSpec)CompositePredicate	Predicate)StatementInserter)StatementMapper)AugmentationSpecfix_positions)
TraceEvent)
BaseTracer_Tc            	           \ rS rSrSr SSSS\S\\   SS4S	 jjr\	S\
S
   S\S\S   4S j5       rS\\S4   4S jrS\S\S\SS4S jrS\S\4   S\S\4   4S jrSS
S\4S jrS\R.                  4S jrSrg)AstRewriter)   TNtracerszList[BaseTracer]path	module_idreturnc                 ^    Xl         X l        X0l        [        [        5      U l        S U l        g N)_tracers_path
_module_idr   set_augmented_positions_by_specorig_to_copy_mapping)selfr    r!   r"   s       N/home/james-whalen/.local/lib/python3.13/site-packages/pyccolo/ast_rewriter.py__init__AstRewriter.__init__,   s1      
#  	) CG!    r   )NNNc              #      #    U R                   nU R                  nXl         X l         S v   X0l         X@l        g ! X0l         X@l        f = f7fr%   )r&   r'   )r,   r    r!   orig_tracers	orig_paths        r-   tracer_override_context#AstRewriter.tracer_override_context:   sB      }}JJ	
	#(M"J )M"Js   %A
9 A
AA
.c                     / nU R                    H.  nUR                   H  nX1;  d  M
  UR                  U5        M     M0     [        U5      $ r%   )r&   syntax_augmentation_specsappendtuple)r,   specstracerspecs       r-   _get_order_of_specs_applied'AstRewriter._get_order_of_specs_appliedH   sC    mmF88$LL& 9 $ U|r0   aug_speclineno
col_offsetc                 B    U R                   U   R                  X#45        g r%   )r*   add)r,   r?   r@   rA   s       r-   register_augmented_position'AstRewriter.register_augmented_positionP   s      	))(3778LMr0   	predicatec                    ^ ^ UU 4S j$ )Nc                    > T" TR                   =(       d    0 R                  [        U [        5      (       a  U U 5      5      $ [	        U 5      U 5      5      $ r%   )r+   get
isinstanceintid)
node_or_idrF   r,   s    r-   <lambda>7AstRewriter._make_node_copy_flyweight.<locals>.<lambda>X   sI    )&&,"11(S99
#
?A*~#
r0    )r,   rF   s   ``r-   _make_node_copy_flyweight%AstRewriter._make_node_copy_flyweightU   s    
 	
r0   r;   c                 b    U R                   S L =(       d    UR                  U R                   5      $ r%   )r'   _should_instrument_file_impl)r,   r;   s     r-   should_instrument_with_tracer)AstRewriter.should_instrument_with_tracer_   s%    zzT!TV%H%H%TTr0   nodec           	      	  ^  [        U[        R                  [        R                  [        R                  [        R
                  45      (       d   eT R                  c   e[        T R                  [        T R                  T R                  5       S95      nU" U5      nT R                  S   nUR                  R                  T R                  5      nT R                  c  [        U5      OT R                  n[         R"                  " T R                  U5      =otR                  T R                  '   Ub"  T R$                  (       a  UR'                  XV5        [)        UR*                  UR,                  UR.                  UR0                  UR2                  5      R5                  U[        U5         5        UR7                  Xv5        UT l        [;        [<        5      n[;        [<        5      n	T R                   H  n
T R?                  U
5      (       d  M  U
R@                   H  nU
RB                  R                  U[D        RF                  " 5       /5      nU HP  nX   RI                  URJ                  5        URL                  (       d  M3  X   RI                  URJ                  5        MR     M     M     [;        S 5      n[;        S 5      nURO                  5        H-  u  nnT RQ                  [R        RT                  " U5      5      X'   M/     U	RO                  5        H-  u  nnT RQ                  [R        RT                  " U5      5      X'   M/     [;        [<        5      nT R                   HE  n
U
RB                  RO                  5        H$  u  nnUU   RW                  U 4S jU 5       5        M&     MG     [        U[        R                  5      (       a=  T R                   H-  n
U
RY                  UR                  [        U5      U5      5        M/     [[        T R                  UUUUU5      n[        U[        R                  5      (       a  UR5                  U5      nOz[]        [_        UR`                  5      5       H.  nUR5                  UR`                  U   5      UR`                  U'   M0     [c        T R                  UUUUUU5      R5                  U5      n[U        S T R                   5       5      (       d  UR'                  Xv5        U$ )N)
spec_orderc                      S $ )Nc                      gNFrP   _s    r-   rN   5AstRewriter.visit.<locals>.<lambda>.<locals>.<lambda>       r0   rP   rP   r0   r-   rN   #AstRewriter.visit.<locals>.<lambda>       %r0   c                      S $ )Nc                      gr]   rP   r^   s    r-   rN   r`      ra   r0   rP   rP   r0   r-   rN   rb      rc   r0   c              3   |   >#    U  H1  nUR                   c  M  UTR                  UR                   5      4v   M3     g 7fr%   )guardrQ   ).0r<   r,   s     r-   	<genexpr>$AstRewriter.visit.<locals>.<genexpr>   s6      4 -zz GT499$**EF -s   <$<c              3   8   #    U  H  oR                   v   M     g 7fr%   )requires_ast_bookkeeping)rh   r;   s     r-   ri   rj      s     Ov22s   )2rJ   ast
ExpressionModuleFunctionDefAsyncFunctionDefr'   r   r&   r   r*   r=   ast_bookkeeper_by_fnamerI   r(   rL   r   creategc_bookkeepingremove_bookkeepingr   ast_node_by_idcontaining_ast_by_idcontaining_stmt_by_idparent_stmt_by_idstmt_by_linenovisitadd_bookkeepingr+   r   listrU   events_with_registered_handlers_event_handlersr   emptyr8   rF   exempt_from_guardsitemsrQ   r   anyextend_static_init_module_implr   rangelenbodyr   )r,   rW   mapperr+   last_tracerold_bookkeeperr"   new_bookkeeperraw_handler_predicates_by_event,raw_guard_exempt_handler_predicates_by_eventr;   evthandler_datahandler_spechandler_predicate_by_event&guard_exempt_handler_prediate_by_eventraw_predicateshandler_guards_by_eventhandler_specsexpr_rewriteris   `                    r-   r{   AstRewriter.visitb   sI   3>>3::s@T@TU
 
 	
 
 zz%%% MM11;;=
  &d|mmB'$<<@@L $ 7BtHT__	  Y7	
<<TZZH %$*=*=**>E))//00,,))	
 %$RX.
/##N>$8! 	(
  	5 mmF55f====  &5599+++-.  %1L38??@V@VW#666DIPP(22 %1 > $" &
 	# &
 	/
 $C#H#H#JC.2.L.L"&&~6/&+ $K $P#U#U#WC../A/E/En/UV 37 $X
  	  mmF&,&<&<&B&B&D"]',33 4 -4  'E $ dCJJ''--//(,,RXt< ( %MM &2#
 dCNN++ &&t,D3tyy>*,22499Q<@		! +$$*6' eDk  OOOO**>Er0   )r*   r(   r'   r&   r+   r%   )__name__
__module____qualname____firstlineno__rt   strr   rK   r.   r   r
   r	   r4   r   r   r=   rD   r   r   rQ   boolrU   rm   ASTr{   __static_attributes__rP   r0   r-   r   r   )   s   N $(	G#G G C=	G
 
G #L)#14#	#	$# #U3CS3H-I N(N25NCFN	N

!#r'*
	#r'	
UL UT Uo#'' or0   r   )3rm   loggingcollectionsr   
contextlibr   typingr   r   r   r   r	   r
   r   r   r   r   r   pyccolo.ast_bookkeepingr   r   pyccolo.expr_rewriterr   pyccolo.handlerr   pyccolo.predicater   r   pyccolo.stmt_inserterr   pyccolo.stmt_mapperr   pyccolo.syntax_augmentationr   r   pyccolo.trace_eventsr   pyccolo.tracerr   	getLoggerr   loggersetLevelWARNINGr   rK   r   r   GUARD_DATA_TNodeTransformerr   rP   r0   r-   <module>r      s    
  # %    F . ' ; 3 / G +) 
		8	$    T][(E#sww,,?+@#+E"FFGh#%% hr0   