
    ^hG                        S SK r S SKrS SK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  S SKJr  S SKJr  S S	KJr  S S
KJr  S SKJr  S SKJr  \(       a  S SK J!r!  \RD                  " \#5      r$ " S S5      r%g)    N)TYPE_CHECKINGAnyCallableDictOptionalSet)Comm)IPythonKernel)ResolvedSymbol)	SymbolRef)ExecutionSchedule)cells)Symbol)	Timestamp)shell)IdType)NotebookFlowc                      \ rS rSrSr\" 5       rS%S jrS&S jrS\	SS4S jr
 S'S	\S
\\\\4   /\\\\4      4   S\SS4S jjrS(S\\\4   SS4S jjrS\S\\\4   SS4S jrS\\\4   S\\\\4      4S jr  S)S\\\4   S\S\S\\\\4      4S jjr  S)S\\\4   S\S\S\\\\4      4S jjr S'S\\\4   S\S\4S jjr S'S\\\4   S\S\\\\4      4S jjr S'S\\\4   S\S\\\\4      4S jjrS(S&S jjrS&S jrS\\\\4      4S jrS\\\4   4S  jrS\\\4   4S! jr S&S" jr!S\\\\4      4S# jr"S$r#g)*CommManager   z?Manages communication between the IPyflow backend and frontend.returnNc                 Z    Xl         0 U l        S U l        SU l        U R	                  5         g )NF)flow_comm_handlers_commdebounced_exec_schedule_pending_register_default_handlers)selfflow_instances     N/home/james-whalen/.local/lib/python3.13/site-packages/ipyflow/comm_manager.py__init__CommManager.__init__    s3    !	  	 &*
/4, 	'')    c                 4   U R                  SU R                  5        U R                  SU R                  5        U R                  SU R                  5        U R                  SU R                  5        U R                  SU R
                  5        U R                  SU R                  5        U R                  SU R                  5        U R                  SU R                  5        U R                  S	U R                  5        U R                  S
U R                  5        g)z'Register all the default comm handlers.change_active_cellcompute_exec_schedulenotify_content_changedreactivity_cleanuprefresh_symbolsupsert_symbolget_codeget_last_updated_cell_idbump_timestampregister_dynamic_comm_handlerN)register_comm_handlerhandle_change_active_cellhandle_compute_exec_schedulehandle_notify_content_changedhandle_reactivity_cleanuphandle_refresh_symbolshandle_upsert_symbolhandle_get_codehandle_get_last_updated_cell_idhandle_bump_timestamp$handle_register_dynamic_comm_handler)r   s    r    r   &CommManager._register_default_handlers,   s    ""#79W9WX""#T%F%F	
 	""$d&H&H	
 	""#79W9WX""#4d6Q6QR""?D4M4MN"":t/C/CD""&(L(L	
 	""#3T5O5OP""+T-V-V	
r#   kernelc                 X    UR                   R                  [        U R                  5        g)z)Register the comm target with the kernel.N)comm_managerregister_target__package___comm_target)r   r;   s     r    register_comm_target CommManager.register_comm_targetA   s    ++K9J9JKr#   msg_typehandler	overwritec                 h    XR                   ;   a  U(       d  [        SU-  5      eX R                   U'   g)z/Register a handler for a specific message type.z-handler already registered for msg type of %sN)r   
ValueError)r   rC   rD   rE   s       r    r/   !CommManager.register_comm_handlerE   s1     ***9LxWXX(/H%r#   requestc                 d   US   nU R                   R                  U5      nUc+  SU-  n[        R                  U5        XPR                  l        g U" U5      nX`R                  L a  gUc  U R                  nUc  gUc  0 nUR                  SU5      US'   UR                  SS5      US'    UR                  U5        g! [         aH  nS[        U5      S.nU R                  R                  (       a  [        R                  S5         SnANSnAff = f! [         a  n[        S	U-  5      UeSnAff = f)
z@Handle a comm request by dispatching to the appropriate handler.typeNz'Unsupported request type for request %sFsuccesserrorz'exception during comm handler executionrM   Tz3unable to serialize response for request of type %s)r   getloggerrN   r   _saved_debug_message	Exceptionstris_dev_mode	exceptionNO_RESPONSEr   send	TypeError)r   rI   commrequest_typerD   dbg_msgresponsees           r    handleCommManager.handleP   s3   v%%)),7??'IGLL!-4II*	Lw'H '''<::D<H#<<=&ll9d;	IIh%  	L QH yy$$  !JK	L&  	ET	s0   B< *D <
D>D		D
D/D**D/rY   open_msgc                    ^ ^ TR                   UU 4S j5       nTT l        T R                  R                  " S0 UR	                  S0 5      R	                  S0 5      D6  TR                  SSS.5        g)	z"Handle comm target initialization.c                    > U S   S   nUR                  S5      S:X  a  TR                  (       a  g TR                  UTS9  g )NcontentdatarK   r&   )rY   )rO   r   r^   )msgrI   rY   r   s     r    
_responder,CommManager._comm_target.<locals>._responderv   s?    )nV,GF#'>>88KKdK+r#   rc   rd   	establishT)rK   rM   N )on_msgr   r   
initializerO   rW   )r   rY   r`   rf   s   ``  r    r@   CommManager._comm_targets   sb     
	, 
	, 
		Kx||Ir:>>vrJK		;489r#   c                 @    U R                   R                  US   5        g)z"Handle change active cell request.active_cell_idN)r   set_active_cell)r   rI   s     r    r0   %CommManager.handle_change_active_cell   s     			!!'*:";<r#   r'   allow_new_readyc           
      \   U R                   R                  R                  (       d  SSS.$ UR                  SS5      nU R                   R                  c  UR                  S5      nUb  U R                   R                  U5        U R                   R                  bN  [        5       R                  5       nUR                  (       a%  UR                  U R                   R                  5        U(       a&  UR                  SS5      (       a  U R                  XS9   U R                   R                  5         UR                  S	U R                   R                  5      nUR                  S
U R                   R                  5      nUc-  / n	Uc  U	R                  S
5        SSSR!                  U	5       3S.$ [#        S S U 5        5       5      n
U R                   R                  R$                  nU R                   R'                  U
UUR                  SU=(       a#    U[(        R*                  [(        R,                  4;   5      S9R/                  5       nSUS'   U R                   R                  R0                  R2                  US'   UR2                  US'   U R                   R                  R4                  R2                  US'   X|S'   U R                   R                  R6                  R2                  US'   U R                   R8                  S LUS'   XLS'   [;        U R                   R                  R/                  5       R=                  5       U R                   R>                  R/                  5       R=                  5       -  5      US'   [#        [        5       RA                  5       5      US'   U$ ! [         a     GNzf = f)NFzdataflow not enabledrL   is_reactively_executingrn   r'   Trs   executed_cell_idcell_metadata_by_idznull value for z, c              3   0   #    U  H  nUc  M  Uv   M     g 7fNri   ).0cells     r    	<genexpr>ACommManager._handle_compute_exec_schedule_impl.<locals>.<genexpr>   s"      
 	 Ds   	c              3   T   #    U  H  n[        5       R                  U5      v   M      g 7frx   )r   from_id_nullable)ry   cell_ids     r    r{   r|      s$      ATg((11ATs   &(rq   )cells_to_checklast_executed_cell_idrq   r&   rK   	exec_modeexec_schedule
flow_orderr   
highlightslast_execution_was_errorsettingsexecuted_cells)!r   mut_settingsdataflow_enabledrO   rn   ro   r   current_cellis_placeholder_id	update_id#_handle_notify_content_changed_impl#_add_parents_for_override_live_refsKeyErrorr   _prev_cell_metadata_by_idappendjoinlistr   check_and_link_multiple_cellsr   LIVENESS_BASEDHYBRID_DAG_LIVENESS_BASEDto_jsonr   valuer   r   "_exception_raised_during_executiondictitemsr   all_executed_cell_ids)r   rI   r'   rq   rs   rn   	prev_celllast_cell_idrv   	null_valsr   r   r\   s                r    "_handle_compute_exec_schedule_impl.CommManager._handle_compute_exec_schedule_impl   s5    yy%%66$/EFF")++.G"O99##+$[[)9:N)		)).9yy''3!G002	..''		(@(@A!gkk2JD&Q&Q44 5 	II99; {{#5tyy7V7VW%kk!499#F#F
 &I"*  !67$9AU@V/WXX 
AT
 
 		..<<99::)".#KK! !%44%?? ; 
 ') 	 3 $		 6 6 @ @ F F$1$7$7!!%!7!7!B!B!H!H,8()!%!7!7!B!B!H!HII88D 	+, /F*+#II""**,224ii  ((*0023 
 &*%'*G*G*I%J!"a  		s   N 
N+*N+c                 t     U R                  UUUS9SU R                  l        $ ! SU R                  l        f = f)z*Handle compute execution schedule request.r'   rq   N)r   r   rn   )r   rI   r'   rq   s       r    r1   (CommManager.handle_compute_exec_schedule   s>    	,::'= / ;  (,DII$tDII$s   $ 7content_by_cell_idforcec                    UnUR                  5        Ho  u  pEU(       a    Oe[        5       R                  U5      nUc  M,  UR                  U:H  nUR                  UR
                  =(       d    S:H  nU(       a	  U(       a  Mm  SnMq     U(       d  gSnUR                  5        GH  u  pE[        5       R                  U5      nUc  M$  UR                  n	 XVl        UR                  5         UR                  SS9n
UR                  c  [        5       nOUR                  R                  nU Vs1 s H  oR                  iM     nnU
R                   Vs1 s H  oR                  iM     nnU=R                  U-  sl        U=R                  U-  sl        UR                  Ul        Xl        UR                  Ul        SnGM     U$ s  snf s  snf ! [         a    Xl         GM=  f = f)Nr   TF)update_liveness_time_versions)r   r   r~   current_contentcell_ctrlast_check_cell_ctrto_astcheck_and_resolve_symbolslast_check_resultsetlivesymstatic_removed_symbolslast_check_contentSyntaxError)r   r   r   should_recompute_exec_scheduler   rc   rz   is_same_contentis_same_counterprev_contentresultprev_resolved_live_symsresolvedprev_live_syms	live_symss                  r    _recompute_ast_for_cells$CommManager._recompute_ast_for_cells   s    */& 2 8 8 :G-7++G4D|"22g=O"mm0H0H0MANO"//15. !; .).& 2 8 8 :G7++G4D|//L4'.$7726 8  ))1CF5+.2.D.D.I.I+?V!W?V8,,?V!WGM{{)S{8,,{	)S++~=+++y8+*.*>*>')/&+/==(15.- !;2 .- "X)S  4'3$$4s2   AG	(F?=G	G"AG	?
G		GGrs   c                    UR                  SU R                  R                  5      nUc  SSS.$ U R                  R                  S L =(       d+    [        U R                  R                  5      [        U5      :g  nX0R                  l        UR	                  5        VVs0 s H>  u  pVUS   S:X  d.  UR                  S5      (       d  UR                  S5      (       d  M<  XV_M@     nnnUR	                  5        VVs0 s H
  u  pVXVS	   _M     nnnU=(       d    U R                  R
                  U:g  nU R                  R
                  nXpR                  l        UR	                  5        VVs0 s H
  u  pVXVS
   _M     n	nnUR	                  5        VVs0 s H"  u  pVUR                  S5      (       d  M  XVS   _M$     n
nnUR	                  5        VVs0 s H"  u  pVUR                  S5      (       d  M  XVS   _M$     nnn[        5       R                  U5        [        5       R                  X5        U(       + =(       a    U R                  XU:g  S9=(       d    Un[        5       R                  5       n[        U5      S:  a  [        S UR	                  5        5       5       Hp  u  p[        5       R                  U5      (       a  M%  X   n[        U5       H8  nUR                  U:X  d  M  UR                  U5        UR!                  U5          Mn     Mr     U R                  R#                  U	5        U(       a  U R%                  USSS9$ g s  snnf s  snnf s  snnf s  snnf s  snnf )Nrv   Fznull value for cell metadatarL   rK   codeoverride_live_refsoverride_dead_refsindexrc   )r   r   c              3   ,   #    U  H
  u  pX!4v   M     g 7frx   ri   )ry   r   idxs      r    r{   BCommManager._handle_notify_content_changed_impl.<locals>.<genexpr>H  s      %3L<73Ls   r   )rO   r   r   lenr   _prev_order_idx_by_idr   set_cell_positionsset_override_refsr   with_placeholder_idssortedhas_idr   r   r   remove#_create_untracked_cells_for_contentr1   )r   rI   rs   rv   is_cell_structure_changer   metadataorder_index_by_idprev_order_idx_by_idr   override_live_refs_by_cell_idoverride_dead_refs_by_cell_idr   placeholder_cells_rc   	candidates                    r    r   /CommManager._handle_notify_content_changed_impl  sm    &kk!499#F#F
 &$/MNN#'99#F#F$#N $&RUII//S
$%S&  /B		+ &9%>%>%@
%@!6)||011||01	 G%@ 	 
 &9%>%>%@
%@! g&&%@ 	 

 % Dyy..2CC 	!  $yy>>*;		' &9%>%>%@
%@! i((%@ 	 
 &9%>%>%@)
%@!||01 4G233%@ 	& )
 &9%>%>%@)
%@!||01 4G233%@ 	& )

 	""#45!!)	
 (' --"?S*S . *&
 & 	' "G88: !A%$ %3D3J3J3L% 
 7>>'**,5!%&7!8I 00G;!++G4)00;	 "9 			556HI)44u 5   y


)

)
s0   ;MM7M&MM-	MM,	Mc                      U R                  XS9$ )z&Handle notify content changed request.rt   )r   )r   rI   rs   s      r    r2   )CommManager.handle_notify_content_changed[  s     77 8 
 	
r#   c                 >   U R                   R                  5       U R                   l        U R                   R                  5       S-   U R                   l        U R                   R                  R                  5         U R                   R                  R                  5         g)z"Handle reactivity cleanup request.   N)r   cell_countermin_cascading_reactive_cell_num_min_new_ready_cell_counterupdated_reactive_symbolsclearupdated_deep_reactive_symbols)r   _requests     r    r3   %CommManager.handle_reactivity_cleanupc  se    48II4J4J4L		104		0F0F0H10L		-		**002		//557r#   c                     UR                  S/ 5       H-  n[        R                  " U5      nUc  M  UR                  SS9  M/     g)zHandle refresh symbols request.symbolsNF)take_timestamp_snapshots)rO   r   resolverefresh)r   rI   
symbol_strr   s       r    r4   "CommManager.handle_refresh_symbolsj  s?    !++i4J##J/CU; 5 r#   c           	      j   US   n[        5       R                  nX#;  a  SS0$ [        5       nUR                  S/ 5       H/  n[        R
                  " U5      nUc  M  UR                  U5        M1     UR                  U5      nU R                  R                  R                  U5      nUb  UR                  UL a  SS0$ [        R                  " SS9   U R                  R                  R                  X'U[        R                  " S5      R                  S	   5        SSS5        g! , (       d  f       g= f)
zHandle upsert symbol request.symbolrM   FdepsN)stmt_offsetpassr   )r   user_global_nsr   rO   r   r   addr   global_scopeobjr   offsetupsert_symbol_for_nameastparsebody)	r   rI   symbol_nameuser_globalsdep_symbolsdepdep_symr   prev_syms	            r    r5    CommManager.handle_upsert_symbolr  s	   h'w--*u%%e;;vr*C'',G"( + {+99))--k:HLLC$7u%%"-II""99+syy/@/E/Ea/H . 	 .- s   A	D$$
D2c                     US   nU R                   R                  R                  U5      nUc  SS0$ U[        UR	                  [        S95      S.$ )zHandle get code request.r   rM   F)format_type)r   r   )r   r   rO   rS   r   )r   rI   r   r   s       r    r6   CommManager.handle_get_code  sV    h'ii$$((5;u%%!S12
 	
r#   c                     US   nU R                   R                  R                  U5      nUc  SS0$  [        5       R	                  UR
                  5      R                  nUUS.$ ! [         a    SS0s $ f = f)z(Handle get last updated cell ID request.r   rM   F)r   r   )r   r   rO   r   at_timestamp	timestampidr   )r   rI   r   r   last_updated_cell_ids        r    r7   +CommManager.handle_get_last_updated_cell_id  s    h'ii$$((5;u%%	&#(7#7#7#F#I#I  "+
 	
  	&u%%	&s   -A% %A65A6c                 f    US   n[         R                  " 5       U R                  R                  U'   g)zHandle bump timestamp request.r
  N)r   currentr   tracked_timestamps)r   rI   timestamp_names      r    r8   !CommManager.handle_bump_timestamp  s,     -7@7H7H7J		$$^4r#   c                   ^ ^ UR                  SS5      nUR                  SS5      nUb  Uc  gUR                  5       n[        R                  " [        R                  " U5      R                  5       S5      n[
        R                   SU S3nSU SU 3n[        U[        5       5        [        5       R                  US5      mT R                  UUU 4S	 jUR                  S
S5      S9  g)z-Handle register dynamic comm handler request.rC   NrD   z    r   _handlerzdef z(self, request):
c                    > T" TU 5      $ rx   ri   )request_rD   r   s    r    <lambda>BCommManager.handle_register_dynamic_comm_handler.<locals>.<lambda>  s    WT84r#   rE   F)rE   )rO   striptextwrapindentdedentpycPYCCOLO_BUILTIN_PREFIXexecglobalspopr/   )r   rI   handler_msg_typehandler_strhandler_fun_namerD   s   `    @r    r9   0CommManager.handle_register_dynamic_comm_handler  s    ";;z48kk)T2#{':!'')oohook&B&H&H&JGT!889;K:LHU-..@N[')$)-- 0$7""4kk+u5 	# 	

 r#   )r   r   r   r   )r   r   r   N)r   N)Frx   )TT)$__name__
__module____qualname____firstlineno____doc__objectrV   r!   r   r
   rA   rS   r   r   r   r   boolr/   r^   r	   r@   r0   r   r1   r   r   r   r2   r3   r4   r5   r6   r7   r8   r9   __static_attributes__ri   r#   r    r   r      s   I(K
*
*L= LT L  		0	0 4S>*HT#s(^,DDE	0 		0
 
	0!d38n !D !F: :c3h :D :"CH~	$sCx.	! (, $	Gc3hG !%G 	G
 
$sCx.	!GX (, $	,c3h, !%, 	,
 
$sCx.	!," DI*."&vs{"3*.<@*.	*.Z HMICH~I@DI	$sCx.	!IX HM
CH~
@D
	$sCx.	!
8xS#X/G *	
$sCx. 	

$sCx. 
xSRUX?W r#   r   )&r   loggingr  typingr   r   r   r   r   r   pyccolor  ipykernel.commr	   ipykernel.ipkernelr
   !ipyflow.analysis.resolved_symbolsr   ipyflow.analysis.symbol_refr   ipyflow.configr   ipyflow.data_model.cellr   ipyflow.data_model.symbolr   ipyflow.data_model.timestampr   ipyflow.singletonsr   ipyflow.typesr   ipyflow.flowr   	getLoggerr&  rP   r   ri   r#   r    <module>r=     sY    
   D D   , < 1 , ) , 2 $  ) 
		8	$] ]r#   