
    ^h!                         S SK r S SKrS SKJrJrJrJrJr  S SKJ	r	  S SK
Jr  S SKJrJr  \(       a  S SKJr  \ R"                  " \5      r\R)                  \ R*                  5         " S S5      rg)	    N)TYPE_CHECKING	GeneratorIterableSetcast)DUPED_ATTRSUB_CLASSES)	Timestamp)flowtracer)Symbolc            
           \ rS rSrSS jrS\S   S\S\S	\SS4
S
 jrS\S   4S jrS\	S   S\SS4S jr
 SSSS\SS4S jjrSSS\S   4S jr SSSS\SS4S jjr SSSS\SS4S jjrSrg)UpdateProtocol   r   returnNc                 .    Xl         [        5       U l        g N)updated_symsetseen)selfr   s     b/home/james-whalen/.local/lib/python3.13/site-packages/ipyflow/data_model/utils/update_protocol.py__init__UpdateProtocol.__init__   s    &#&5	    new_depsmutated"propagate_to_namespace_descendentsrefreshc                 <   [         R                  SU R                  U R                  R                  U R                  R                  5        U(       a+  [        5       R                  U R                  R                     OU R                  1nXPR                  5       -  nU R                  XS5        [         R                  SU R                  UU5        [        U R                  5      n[         R                  SU R                  U5        [        5       =R                  U R                  -  sl        U(       a<  U H6  nUR                  (       a  M  XpR                  Ld  M&  UR                  5         M8     U =R                  U-  sl        U H  nU R!                  USS9  M     g )Nz5updated sym %s (containing scope %s) with children %sz-for symbol %s: mutated=%s; updated_symbols=%sz%all updated symbols for symbol %s: %sTskip_seen_check)loggerwarningr   containing_scopechildrenr
   aliasesobj_id%_maybe_get_duped_attrsub_updated_syms/_collect_updated_symbols_and_refresh_namespacesr   r   r   this_stmt_updated_symbols
is_waitingr   _propagate_waiting_to_deps)	r   r   r   r   r   directly_updated_symbolsupdated_symbols_with_ancestorsr   syms	            r   __call__UpdateProtocol.__call__   sN    	C--%%		
 8?DFNN4++223TEUEUDV 	! 	!$N$N$PP <<$	
 	;$		
 *-TYY&3*	

 	**dii7*7"---+EUEU2U'')  8 			X	1C++C+F 2r   c                    [          H  u  p[        R                  R                  US 5      nUc  M*  [	        X2S 5      nUc  M;  U R
                  R                  nUb(  UR                  b  [        UR                  U5      (       d  M~  U R
                  R                  n[        [        S   S Vs1 s H  nUR                  XgS9iM     snS 1-
  5      s  $    [        5       $ s  snf )Nr   )TF)is_subscript)r   sysmodulesgetgetattrr   containing_namespaceobj
isinstancenamer   r   &lookup_symbol_by_name_this_indentationr   )r   modname	classnamemoduleclazznsr;   is_subs           r   r(   4UpdateProtocol._maybe_get_duped_attrsub_updated_symsD   s    "7G[[__Wd3FFt4E}!!66BzRVV^:bffe3L3L##((DH #0"/ ==d=X"/ &	  #8* us   ,Cupdated_symbolsrefresh_descendent_namespacesc                 v   [         R                  SU5        U GH  nUR                  (       d  X0R                  ;   a  M&  [        R
                  " 5       Ul        U R                  R                  U5        UR                   H+  nUR                  U[        5       R                  5       5        M-     UR                  (       a  S OUR                  nUb  [         R                  SUUUR                  UR                  5        UR                  R!                  U5        [        R"                  " 5       Ul        U R'                  [        5       R(                  R+                  UR                  [-        5       5      U5        U(       d  GMj  UR.                  nUc  GM|  U R'                  UR1                  5       U5        GM     g )Nz0collecting updated symbols and namespaces for %sz'containing scope for %s: %s; ids %s, %s)r"   r#   	is_importr   r	   uninitializedrequired_timestampaddcells_where_deep_liveadd_used_cell_counterr
   cell_counter	is_moduler8   r'   namespace_waiting_symbolsdiscardcurrentmax_descendent_timestampr)   r&   r6   r   	namespaceall_symbols_this_indentation)r   rD   rE   r/   cellcontaining_nssym_nss          r   r)   >UpdateProtocol._collect_updated_symbols_and_refresh_namespaces\   sJ    	>	
 #C}}yy 0 &/%<%<%>C"IIMM#11**30C0C0EF 2$'MMDs7O7OM(=!JJ!(( 77??D9B9J9J9L6DDFNN&&}';';SUC1 -,%HH;;=57 #r   r/   r!   c                    U(       d  XR                   ;   a  g U R                   R                  U5        UR                  nUb  UR                  (       a  g [        R                  SX5        UR                  R                  U5        [        5       R                  R                  UR                  / 5       H  nU R                  U5        M     [        5       R                  R                  UR                  / 5       HB  nU R                  U5       H*  n[        R                  SX5        U R                  U5        M,     MD     g )Nz)add %s to namespace waiting symbols of %sz1propagate from namespace parent of %s to child %s)r   rJ   r8   rN   r"   r#   rO   r
   r&   r6   r'   '_propagate_waiting_to_namespace_parents_non_class_to_instance_childrenr,   )r   r/   r!   rV   containing_aliaschilds         r   rZ   6UpdateProtocol._propagate_waiting_to_namespace_parents   s     3))#3		c00 M$;$;BCW//33C8 $ 2 2=3G3G L889IJ !M !% 2 2=3G3G L ==>NOG //6	 P !Mr   )r   NNc              #   
  #    U R                   UL a  UR                   S h  vN   g UR                   HI  nUR                  nUb3  UR                  b&  UR                  R                  UR                  :X  a  ME  Uv   MK     g  N_7fr   )r   r%   rS   cloned_fromr'   )r   r/   r]   child_namespaces       r   r[   .UpdateProtocol._non_class_to_instance_children   st      s"||##\\E $ooO*/J/J/V"..55CK " $s   BBA Bc                 D   U(       d  XR                   ;   a  g U R                   R                  U5        [        5       R                  R	                  UR
                  5      nUc  g UR                  SS9 H*  n[        R                  SX5        U R                  U5        M,     g )NT)exclude_classz'propagate from %s to namespace child %s)
r   rJ   r
   
namespacesr6   r'   rT   r"   r#   r,   )r   r/   r!   self_nsns_childs        r   (_propagate_waiting_to_namespace_children7UpdateProtocol._propagate_waiting_to_namespace_children   s}     3))#3		c&##''

3?<<4<PHNNDcT++H5 Qr   c                    U(       d  XR                   ;   a  g U R                   R                  U5        U[        5       R                  ;  a  U[	        5       R
                  ;  a  UR                  U R                  5      (       a  UR                  R                  U R                  5        UR                  R                  U R                  R                  5        [        R                  " 5       Ul        U R                  USS9  U R                  USS9  U R!                  U5       H5  n["        R%                  SXR&                  U5        U R)                  U5        M7     g )NTr    zpropagate %s %s to %s)r   rJ   r
   rD   r   r*   should_mark_waitingr   fresher_ancestorsfresher_ancestor_timestamps	timestampr	   rQ   rI   rZ   rh   r[   r"   r#   r'   r,   )r   r/   r!   r]   s       r   r,   )UpdateProtocol._propagate_waiting_to_deps   s    3))#3		ctv---68===&&t'7'788%%))$*:*:;//33D4D4D4N4NO)2):):)<&<<SRV<W==cSW=X99#>ENN2CUK++E2 ?r   )r   r   )r   r   r   N)F)__name__
__module____qualname____firstlineno__r   r   boolr0   r(   r   r)   rZ   r   r[   rh   r,   __static_attributes__ r   r   r   r      s   )+Gh-+G +G -1	+G
 +G 
+GZs8} 0'!(+' (,' 
	'T 6;77.27	7.	'	(  6;66.26	6 6;33.23	3 3r   r   )loggingr4   typingr   r   r   r   r   ipyflow.data_modelr   ipyflow.data_model.timestampr	   ipyflow.singletonsr
   r   ipyflow.data_model.symbolr   	getLoggerrp   r"   setLevelERRORr   rv   r   r   <module>r      sL     
 @ @ 4 2 +0			8	$  x3 x3r   