
    ^h&                        S SK r S SKrS SKrS SKrS SKrS SKrS SKrS SKJrJ	r	  S SK
JrJr  S SKJrJrJrJrJrJr  S SKrS SKJr  S SKJr   S SKJr   S SKJr  \R>                  " \ 5      r!\!RE                  \RF                  5        \ S
3r$\ S3r% " S S\ RL                  5      r'S r(S\)S\)4S jr* " S S\RV                  5      r,g! \ a    S r Nf = f! \ a    S	 r Nf = f)    N)Counterdefaultdict)FutureThreadPoolExecutor)DictListOptionalSetTupleUnion)PYCCOLO_BUILTIN_PREFIX)get_ipythonc                      g N r       X/home/james-whalen/.local/lib/python3.13/site-packages/pyccolo/examples/future_tracer.pyr   r          r   )flowc                      g r   r   r   r   r   r   r      r   r   _PYCCOLO_UNWRAP_FUTURE_PYCCOLO_FUTURE_TABLEc            	           \ rS rSrS\\\4   S\\\\4   \4   SS4S jr	S\
R                  S\S\\
R                  \\   4   4S	 jrS\
R                  4S
 jrSrg)FutureUnwrapper)   
async_varsfuture_by_name_and_versionreturnNc                 8    Xl         X l        / U l        S U l        g r   )_async_vars_future_by_name_and_version_deps
_async_var)selfr   r   s      r   __init__FutureUnwrapper.__init__*   s    
 &+E(#%
)-r   node	async_varc                     X l         U R                  [        R                  " U5      5      nU R                  / so@l        [
        R                  " U5      U4$ r   )r#   visitcopydeepcopyr"   ast
Expression)r$   r'   r(   transformed_nodedepss        r   __call__FutureUnwrapper.__call__4   sF     $::dmmD&9:::rj~~./55r   c                    [        UR                  [        R                  5      (       d   eU R                  R                  UR                  5      nUc  U$ UR                  U R                  :w  a4  U R                  R                  U R                  UR                  U4   5        [        R                  " U5         [        R                  " [        R                  " UR                  5      [        R                  " U5      /[        R                  " 5       S9n[         R"                  S:  a(  [        R$                  " U[        R                  " 5       S9n[        R&                  " [        R(                  " [*        [        R                  " 5       5      [        R,                  " [        R(                  " [.        [        R                  " 5       5      U[        R                  " 5       S9/S9sS S S 5        $ ! , (       d  f       g = f)N)eltsctx)   	   )r5   )valueslicer5   )funcargs)
isinstancer5   r-   Loadr    getidr#   r"   appendr!   fastlocation_ofr   StrNumsysversion_infoIndexCallName_UNWRAP_FUTURE_EXTRA_BUILTIN	Subscript_FUT_TAB_EXTRA_BUILTIN)r$   r'   current_versionslcs       r   
visit_NameFutureUnwrapper.visit_Name<   sE   $((CHH----**..tww7"Kww$//)

!!44TWWo5MN !!$'37::((477+TXXo-FG
4 ##f,**Schhj9Cyy#?L"&)),BCHHJ"O"% #
	 (''s   :D-G11
G?)r#   r    r"   r!   )__name__
__module____qualname____firstlineno__r   strintr   r   r%   r-   ASTr.   r   r1   rI   rO   __static_attributes__r   r   r   r   r   )   s    .cN. %)sCx&)@$A. 
	.6GG6(+6	s~~tF|+	,6sxx r   r   c                     U bi  SU R                   R                  R                  ;   nSU R                   R                  R                  ;   nU(       d  U(       a  U R                  n O U $ U b  Mi  U $ )Npyccolo
concurrent)tb_framef_codeco_filenametb_next)tbpyccolo_seenconcurrent_seens      r   _jump_to_non_internal_framerc   Z   s_    
. BKK$6$6$B$BB&"++*<*<*H*HH?BI . Ir   exr   c                    [        U R                  5      nUc  U $ S nUbY  UR                  bL  UR                  ULa=  UR                  n[        U5      Ul        Ub  UR                  b  UR                  ULa  M=  U R                  U5      $ r   )rc   __traceback__r_   with_traceback)rd   r`   prev_tb_nexts      r   _unwrap_exceptionri   e   s}    	$R%5%5	6B	z	L
.RZZ3

,8Vzz0>
 .RZZ3

,8V R  r   c                      ^  \ rS rSrSrS\4S jrSU 4S jjrS rS r	\
R                  " SS	9S
 5       r\
R                  " S S9S 5       r\
R                  " S S9S 5       rSrU =r$ )FutureTracerp   
   r   c                     g)NTr   )r$   _s     r   "should_propagate_handler_exception/FutureTracer.should_propagate_handler_exceptions   r   r   c                 x  > [         TU ]  " U0 UD6  U R                  5          [        U R                  S9U l        [        5       U l        0 U l        [        [        5      U l        0 U l        [        R                  " 5       U l        [!        U R                  U R                  5      U l        SU l        0 U l        [        R(                  " 5       U l        S U R*                  l        S S S 5        [/        [0        [2        U R4                  5        [/        [0        [6        U R                  5        g ! , (       d  f       NM= f)N)max_workersr   )superr%   persistent_fieldsr   _MAX_WORKERS	_executorr   _async_variable_version_by_namer!   r   set_waiters_by_future_id_exec_counter_by_future_id	threadingLock_version_lockr   _future_unwrapper_current_job_timestamp_timestamp_by_future_idlocal_threadlocal_statecurrent_futsetattrbuiltinsrJ   _unwrap_futurerL   )r$   r;   kwargs	__class__s      r   r%   FutureTracer.__init__v   s    $)&)##%/D<M<MNDNCJ9D0NPD,ALSAQD&>@D+!*!1D%444d6V6V&D" 01D';=D(&/oo&7D#26D##/ & 	68K8KL0$2R2RS &%s   CD++
D9c                 8    U R                   R                  5         g r   )rw   shutdown)r$   s    r   __del__FutureTracer.__del__   s    !r   c                    [        U[        5      (       a  UR                  5       (       d  U R                  R	                  [        U R                  R                  5      5      nU R                  R	                  [        U5      / 5       H4  nUb  X R                  [        U5         :  a  M#  U R                  U5        M6     UR                  5       $ U$ r   )r<   r   doner   r>   r?   r   r   rz   r   result)r$   fut
current_tswaiters       r   r   FutureTracer._unwrap_future   s    c6""88::!99==t..::;
 #88<<RWbIF".&*F*Fr&z*RR ++F3 J ::<Jr   T)	reentrantc           
         UR                   U R                  ;   a   U R                  U5      $ U$ ! [         a  n[	        U5      nU R
                  R                  [        U5      5      nUb  [        R                  SU5        [        R                  SR                  [        R                  " [        U5      XUR                  5      5      5        Us S nA$ S nAff = f)NzException occurred in cell %d: )r?   rx   r   	Exceptionri   r{   r>   loggererrorjoin	tracebackformat_exceptiontyperf   )r$   retr'   ro   __rd   relevant_cells          r   handle_load_nameFutureTracer.handle_load_name   s    77d:::
**3// J  &r* $ ? ? C CBsG L ,LL!A=QGGI66tBxEUEUVW 
s   / 
CBCCCc                 J    [         R                  " U [        R                  1S9$ )N)exclude_outer_stmt_types)pycis_outer_stmtr-   Tryr'   s    r   <lambda>FutureTracer.<lambda>   s    #++DCGG9Ur   )whenc                   ^ ^^^^^^ T R                   [        U5         n[        UR                  5      S:w  d,  [	        UR                  S   [
        R                  5      (       d  U$ UR                  S   R                  mT R                  UT5      u  px[        USSS9mT R                     T R                  T==   S-  ss'   S S S 5        T R                  T   m[        R                  " 5       mS mUUUUUU U4S jn	[        5       n
U
c  S OU
R                  nA
T   T R                  R!                  U	5      mT =R"                  S-  sl        T R"                  T R$                  [        T5      '   TT R&                  TT4'   Ub  UT R(                  [        T5      '   U H*  nT R*                  [        U5         R-                  T5        M,     TR/                  5         S S S 5        U4S j$ ! , (       d  f       GN,= f! , (       d  f       N&= f)N   r   z<pyccolo_file>eval)modec                  Z  > T
   T	c  T
R                  5         T	c  M  S S S 5        TR                  R                  TTS-
  45      n TR                  R                  [	        U 5      / 5       H  n TR                  U5        M     T	TR                  l        [        TTR                  TR                  5      nS TR                  l        TR                  R                  [	        U 5      S 5        TR                  R                  [	        U 5      S 5        TR                  R                  [	        U 5      S 5        TR                  R                  TTS-
  4S 5         [        5       nTR                      TR"                  T   T:X  a  UTR                  T'   UbH  [%        UR&                  R                  [	        T	5      / 5      5      nU H  nUR)                  U5        M     S S S 5        U$ ! , (       d  f       GN= f! [         a     GM  f = f! [         a    S n Nf = f! , (       d  f       U$ = f)Nr   )waitr!   r>   rz   r?   r   r   r   r   r   	f_globalsf_localspopr   r{   r   r~   rx   listaliasesupdate_obj_ref)old_futr   retvalflow_r   aliasr(   rM   framer   fut_cvr$   unwrap_futures_codes         r   assign_rhs_job6FutureTracer.handle_assign_rhs.<locals>.assign_rhs_job   s    kKKM k 
 66::Oa/0G 4488GbI''/ J 36D##/-uOF26D##/&&**2g;=((,,R[$?++//7TB,,00)_q=P1QSWX ##77	BoU 28EOOI.$"5==#4#4RWb#ABG!(,,V4 ") $ MG  !   ## Ms<   G%.G7
H	 -A.H%
G47
HH	HH
H*c                     > T $ r   r   )r   s   r   r   0FutureTracer.handle_assign_rhs.<locals>.<lambda>   s    sr   )containing_stmt_by_idr?   lentargetsr<   r-   rI   r   compiler~   rx   r|   	Conditionr   execution_countrw   submitr   r   r!   r{   rz   addnotify)r$   r   r'   r   ro   r   stmtunwrap_futures_exprr0   r   ipycurrent_celldepr(   rM   r   r   r   s   `  `         @@@@@r   handle_assign_rhsFutureTracer.handle_assign_rhs   s    ))"T(3t||!DLLOSXX)N)NJLLO&&	$($:$:4$K!%!1
 00;q@;  >>yI$$&$	 $	L m"{t0C0C..''7C''1,'484O4OD((C1KND,,Y-GH';G//38**2c7377< MMO  u  ` Vs   +G(B?G:(
G7:
Hc                 6    [        U [        R                  5      $ r   )r<   r-   	AugAssignr   s    r   r   r      s    z$'Fr   c                 L   UR                   R                  nU R                     U R                  R	                  U5      nUc
   S S S 5        g U R
                  Xg4   n S S S 5         U R                  W5      UR                  U'   g ! , (       d  f       N.= f! [         a     g f = fr   )	targetr?   r~   rx   r>   r!   r   r   r   )	r$   _retr'   r   ro   r   r(   versionr   s	            r   handle_augassignFutureTracer.handle_augassign   s    KKNN	::>>yIG  
 66y7IJ  	)-)<)<S)AEOOI&    		s#    BB&B 
B
B#"B#)
rx   r   r{   rw   r!   r   r   r   r~   rz   )r   N)rQ   rR   rS   rT   rv   boolrp   r%   r   r   r   	load_namer   before_assign_rhsr   before_stmtr   rX   __classcell__)r   s   @r   rk   rk   p   s    L T&"$ 	]]T" #  	UCCJ 	__FG Hr   rk   )-r-   r   r+   loggingrE   r|   r   collectionsr   r   concurrent.futuresr   r   typingr   r   r	   r
   r   r   rZ   r   pyccolo.fastrA   pyccolo.extra_builtinsr   IPythonr   ImportErroripyflow.singletonsr   	getLoggerrQ   r   setLevelWARNINGrJ   rL   NodeTransformerr   rc   r   ri   
BaseTracerrk   r   r   r   <module>r      s    
    
   , 9 : :   9#' 
		8	$    #9!99OP 233HI .c)) .b!) !	 !S3>> S{    s$   C	 C 		CC	C$#C$