
    ^hF                        % S SK r S SKrS SK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  S SKJr  S SKJrJr  S SKJrJr  S SKJr  S SKJrJr  \(       a  S S	KJrJr  \R>                  " \ 5      r!\!RE                  \RF                  5        S
\ RH                  S\\\\ RJ                  4      4S jr& " S S\5      r' " S S\ RP                  5      r)/ r*\\ RV                     \,S'    " S S5      r- " S S\5      r.g)    N)
TYPE_CHECKINGAny	GeneratorIterableListOptionalSequenceTupleUnioncast)ResolvedSymbol)	Timestamp)flowtracer)SubscriptIndicesSupportedIndexType)CommonEqualityMixin)AstRangesubscript_to_slice)ScopeSymbolnodereturnc                    [        U 5      n[        U[        R                  5      (       a  / nUR                   H  n[        U[        R
                  5      (       a  UR                  UR                  5        M?  [        U[        R                  5      (       a  UR                  UR                  5        M{  [        U[        R                  5      (       a  UR                  UR                  5        M    g   [        U5      $ Sn[        U[        R                  5      (       a7  [        UR                  [        R                  5      (       a  SnUR                   n[        U[        R"                  5      (       a  U$ [        U[        R                  [        R                  [        R
                  45      (       d  g[        U[        R                  5      (       a  UR                  nOo[        U[        R
                  5      (       a#  UR                  n[        U[$        5      (       d  gO-[        U[        R                  5      (       a  UR                  nOg[        U[$        5      (       a
  U(       a  U* nU$ )z2
Version-independent way to get at the slice data
NFT)r   
isinstanceastr
   eltsNumappendnStrsConstantvaluetupleUnaryOpopUSuboperandNameint)r   slcr   vnegates        U/home/james-whalen/.local/lib/python3.13/site-packages/ipyflow/analysis/symbol_ref.pyresolve_slice_to_constantr0       s    T
"C#syy!!A!SWW%%ACC Asww''ACC As||,,AGG$  T{F#s{{##
366388(D(Dkk#sxx  
cCLL#''377;<<#s||$$ii	C	!	!ee#s## $	C	!	!ee#sdJ    c                       \ rS rSr     SS\S\S\S\S\S\SS	4S
 jjrSS jrSS jrSS jr	SS jr
S\4S jrS\4S jrS\4S jrSrg	)AtomP   r$   is_callpointis_subscriptis_reactiveis_cascading_reactiveis_blockingr   Nc                 L    Xl         X l        X0l        X@l        XPl        X`l        g N)r$   r5   r6   r7   r8   r9   )selfr$   r5   r6   r7   r8   r9   s          r/   __init__Atom.__init__Q   s'     
((&%:"&r1   c           	      z    U R                  U R                  U R                  U R                  SSU R                  S9$ )NFr5   r6   r7   r8   r9   )	__class__r$   r5   r6   r9   r<   s    r/   nonreactiveAtom.nonreactivea   s@    ~~JJ****"'((  
 	
r1   c           	      z    U R                  U R                  U R                  U R                  SU R                  SS9$ NTFr@   )rA   r$   r5   r6   r8   rB   s    r/   reactiveAtom.reactivek   s@    ~~JJ****"&"<"<  
 	
r1   c           	      z    U R                  U R                  U R                  U R                  U R                  SSS9$ rF   )rA   r$   r5   r6   r7   rB   s    r/   cascading_reactiveAtom.cascading_reactiveu   s@    ~~JJ****(("&  
 	
r1   c           	      f    U R                  U R                  U R                  U R                  SSSS9$ )NFTr@   )rA   r$   r5   r6   rB   s    r/   blockingAtom.blocking   s:    ~~JJ****"'  
 	
r1   c                     [        U R                  U R                  U R                  U R                  U R
                  U R                  45      $ r;   )hashr$   r5   r6   r7   r8   r9   rB   s    r/   __hash__Atom.__hash__   sH    

!!!!  **  	
 		
r1   c                 *    [        [        U 5      5      $ r;   )reprstrrB   s    r/   __repr__Atom.__repr__   s    CIr1   c                 \    [        U R                  5      U R                  (       a  S-   $ S-   $ )Nz(...) )rU   r$   r5   rB   s    r/   __str__Atom.__str__   s%    4::T->->'GGBGGr1   )r9   r5   r8   r7   r6   r$   )FFFFF)r   r3   )__name__
__module____qualname____firstlineno__r   boolr=   rC   rG   rJ   rM   r+   rQ   rU   rV   rZ   __static_attributes__ r1   r/   r3   r3   P   s     #"!&+!'!' ' 	'
 '  $' ' 
' 





# 

# H Hr1   r3   c                      \ rS rSrSS jr S S\\R                  \R                  \R                  \R                  \R                  \R                  \R                  \R                  \R                  4	   S\S   SS4S	 jjrS\\R                  \R                  \R                  \R                  \R                  \R                  \R                  4   S
\SS4S jrS\R                  SS4S jrS\R                  SS4S jrS\R                  SS4S jrS\R                  SS4S jrS\R                  SS4S jrS\R                  SS4S jrS\R                  SS4S jrS\R                  4S jrS\R                  4S jrS rS\R<                  4S jrS\R@                  4S jr!S\RD                  4S jr#S\RH                  4S jr%S\RL                  4S jr'S\RP                  4S jr)S\RT                  4S jr+SS jr,Sr-g)!SymbolRefVisitor   r   Nc                      / U l         S U l        g r;   )symbol_chainscoperB   s    r/   r=   SymbolRefVisitor.__init__   s    (*(,
r1   r   rh   r   	SymbolRefc                    X l          U R                  U5        U R                  R                  5         [        U R                  US9n/ U l        S U l         U$ ! [         a    U R                  R	                  5          Ndf = f)Nrh   )rh   visit
ValueErrorrg   clearreverserj   )r<   r   rh   rets       r/   __call__SymbolRefVisitor.__call__   sw     
	&JJt 	!!#))7

  	&##%	&s   A $A>=A>valc           
      
   U R                   R                  [        U4[        U5      [	        5       R
                  ;   [        U5      [	        5       R                  ;   [        U5      [	        5       R                  ;   S.UD65        g )N)r7   r8   r9   )rg   r   r3   idr   reactive_node_idscascading_reactive_node_idsblocking_node_ids)r<   r   rt   kwargss       r/   _append_atomSymbolRefVisitor._append_atom   sn     	  tH(B(BB&(h&(2V2V&VtH(B(BB	
 	
r1   c                    [        UR                  [        R                  5      (       aU  U R	                  UR                  UR                  R
                  SS9  U R                  UR                  R                  5        g [        UR                  [        R                  5      (       Ga  [        UR                  R                  [        R                  5      (       d  [        UR                  R                  [        R                  5      (       a  [        UR                  R                  R                  [        R                  [        R                  45      (       aB  [        UR                  5      nU R                  R!                  [#        [%        U5      SSS95        U R                  UR                  R                  5        g [        UR                  [        R&                  5      (       a0  U R                  UR                  5        SU R                  S   l        g [        UR                  [        R*                  5      (       a  g [        UR                  [        R,                  5      (       a  g g )NT)r5   )r5   r6   )r   funcr   	Attributer{   attrrm   r$   	Subscriptslicer#   Indexr!   r   r0   rg   r   r3   rU   r*   r5   CallLambda)r<   r   slicevals      r/   
visit_CallSymbolRefVisitor.visit_Call   sp   dii//diidKJJtyy'		3==11$))//3<<88499??CII66tyy44sww6HII4TYY?!!((XTM JJtyy'		388,,JJtyy!15Db!.		388,,		3::..
 r1   c                 p    U R                  XR                  5        U R                  UR                  5        g r;   )r{   r   rm   r$   r<   r   s     r/   visit_Attribute SymbolRefVisitor.visit_Attribute   s$    $		*

4::r1   c                    [        U5      nUb  [        U[        R                  5      (       a  U R                  c  OU R                  R                  UR                  5      nUbg  UR                  (       dV  [        UR                  [        R                  5      (       a-  U R                  R                  [        UR                  SS95        O#U R                  R                  [        USS95        U R                  UR                  5        g )NT)r6   )r0   r   r   r*   rh   lookup_symbol_by_namerv   is_obj_lazy_moduleobjr   typesrg   r   r3   rm   r$   )r<   r   resolvedsyms       r/   visit_Subscript SymbolRefVisitor.visit_Subscript   s    ,T2(CHH--::% **::8;;GC # 6 6&sww0@0F0FGG))00cggD1QR!!((hT)JK

4::r1   c                 :    U R                  XR                  5        g r;   )r{   rv   r   s     r/   
visit_NameSymbolRefVisitor.visit_Name	  s    $(r1   c                 :    U R                  XR                  5        g r;   r{   namer   s     r/   visit_ClassDefSymbolRefVisitor.visit_ClassDef      $		*r1   c                 :    U R                  XR                  5        g r;   r   r   s     r/   visit_FunctionDef"SymbolRefVisitor.visit_FunctionDef  r   r1   c                 :    U R                  XR                  5        g r;   r   r   s     r/   visit_AsyncFunctionDef'SymbolRefVisitor.visit_AsyncFunctionDef  r   r1   c                     UR                    H1  nU R                  XR                  =(       d    UR                  5        M3     g r;   namesr{   asnamer   r<   r   r   s      r/   visit_ImportSymbolRefVisitor.visit_Import  +    JJDdKK$<499= r1   c                     UR                    H1  nU R                  XR                  =(       d    UR                  5        M3     g r;   r   r   s      r/   visit_ImportFrom!SymbolRefVisitor.visit_ImportFrom  r   r1   c                     [        S5      eNz$ref cannot contain literals in chainrn   r   s     r/   visit_ConstantSymbolRefVisitor.visit_Constant      ?@@r1   c                     [        S5      er   r   r   s     r/   
visit_DictSymbolRefVisitor.visit_Dict   r   r1   c                     [        S5      er   r   r   s     r/   
visit_ListSymbolRefVisitor.visit_List#  r   r1   c                     [        S5      er   r   r   s     r/   visit_JoinedStr SymbolRefVisitor.visit_JoinedStr&  r   r1   c                     [        S5      er   r   r   s     r/   	visit_NumSymbolRefVisitor.visit_Num)  r   r1   c                     [        S5      er   r   r   s     r/   	visit_SetSymbolRefVisitor.visit_Set,  r   r1   c                     [        S5      er   r   r   s     r/   	visit_StrSymbolRefVisitor.visit_Str/  r   r1   c                     [        S5      er   r   r   s     r/   visit_TupleSymbolRefVisitor.visit_Tuple2  r   r1   c                     g r;   rb   r   s     r/   generic_visitSymbolRefVisitor.generic_visit5  s     	r1   )rh   rg   )r   Nr;   ).r\   r]   r^   r_   r=   r   r   r   r   r   r*   ClassDefFunctionDefAsyncFunctionDefImport
ImportFromr   rr   rU   r{   r   r   r   r   r   r   r   r   r   r   Dictr   r   r   	JoinedStrr   r   r   Setr   r!   r   r
   r   r   ra   rb   r1   r/   rd   rd      s'   -" $(MMMMHHHHLLOO  JJNN

   
4
HHMMLLOO  JJNN

 
 

0sxx D :CMM d CMM d *)sxx )D )+3<< +D ++coo +$ ++3+?+? +D +> >>S^^ >AAsxx AAsxx AACMM AAcgg AAcgg AAcgg AA		 Ar1   rd   visit_stackc                      \ rS rSr\" 5       r  SS\\R                  \	\
\	   4   S\S   S\\   SS4S jjr\ SS	\S\S   SS 4S
 jj5       rSS\S   S\S   4S jjr SS\S   S\S   4S jjr\S	\S\S   4S j5       rS\4S jrS\4S jrS\4S jrS\4S jrSS jr   SSSS\S\S\S\S\\SS4   4S jjrSrg)rj   i>  Nsymbolsrh   r   	ast_ranger   c                    [        U[        R                  [        R                  [        R                  [        R
                  [        R                  [        R                  [        R                  [        R                  [        R                  4	5      (       aS  U=(       d0    [        R                  " [        US5      (       a  UO[        S   5      nU R                  XS9R                   nOE[        U[        R"                  5      (       a  [%        SU-  5      e[        U[&        5      (       a  U/n[)        U5      U l        X l        X0l        g )Nlinenor~   rl   zunexpected type for %s)r   r   r*   r   r   r   r   r   r   r   r   r   from_ast_nodehasattrr   _cached_symbol_ref_visitorchainAST	TypeErrorr3   r%   rh   r   )r<   r   rh   r   s       r/   r=   SymbolRef.__init__A  s     $$



 
 " X%;%;"7H55;r?&I 55g5KQQG))4w>??&&iG',W~
(-
-6r1   
symbol_strc                 \    U " [         R                  " USS9R                  US9nS Ul        U$ )Neval)moderl   )r   parsebodyr   )clsr   rh   rq   s       r/   from_stringSymbolRef.from_stringc  s-     #))JV499G
r1   r   c                     U R                  U=(       d'    U R                  =(       d    [        5       R                  SSSS9 H  nUR                  s  $    g )NFT)only_yield_final_symbolyield_all_intermediate_symbolsyield_in_reverse)gen_resolved_symbolsrh   r   global_scoper   )r<   rh   r   s      r/   	to_symbolSymbolRef.to_symbolk  sO    116TZZ646#6#6$)+/!	 2 
H <<
 r1   c                 Z    U=(       d    [        5       R                  R                  U 5      $ r;   )r   r   try_fully_resolve_attrsub_chain)r<   rh   s     r/   to_fully_resolved_symbol"SymbolRef.to_fully_resolved_symbolu  s"     ,,,MMdSSr1   c                 @    U R                  U5      R                  5       $ r;   )r   r   )r   r   s     r/   resolveSymbolRef.resolvez  s    z*4466r1   c                 ,    [        U R                  5      $ r;   )rP   r   rB   s    r/   rQ   SymbolRef.__hash__~  s    DJJr1   c                 2   [        U[        5      (       d  gU R                  b(  UR                  b  U R                  UR                  :w  a  gU R                  b'  UR                  b  U R                  UR                  La  gU R                  UR                  :H  $ )NF)r   rj   r   rh   r   )r<   others     r/   __eq__SymbolRef.__eq__  sw    %++NN&+%//1
 JJ"'

%++- zzU[[((r1   c                 ,    [        U R                  5      $ r;   )rT   r   rB   s    r/   rV   SymbolRef.__repr__  s    DJJr1   c                     [        U 5      $ r;   )rT   rB   s    r/   rZ   SymbolRef.__str__  s    Dzr1   c                 ~    U R                  U R                   Vs/ s H  oR                  5       PM     snS S S9$ s  snf )N)rh   r   )rA   r   rC   )r<   atoms     r/   	canonicalSymbolRef.canonical  s>    ~~,0JJ7JDJ7  
 	
7s   :r   r   inherit_reactivityr   c              #   v  #    U(       a	  U(       a   eU(       a	  U(       d   eSu  pgnSn	Sn
SnU(       ac  U R                  UUSSSS9 Vs/ s H&  nUR                  UR                  UR                  4PM(     nn[	        [
        U5      R                  5         OUR                  U 5      nU H  u  pgnU	=(       d    UR                  n	U
=(       d    UR                  n
U=(       d    U	nU(       a  U	(       a(  U(       d!  UR                  (       d  UR                  5       nU
(       a(  U(       d!  UR                  (       d  UR                  5       nU(       a!  UR                  (       d  UR                  5       nU(       d  M  [        XgU5      v   M     U(       d  Ub  Ub  U(       d  [        XgU5      v   g g g g s  snf 7f)N)NNNFT)r   r   r
  r   )r   r   r  	next_atomr   listrp   gen_symbols_for_attrsub_chainr7   r8   rG   rJ   r9   rM   r   )r<   rh   r   r   r
  r   r   r  r  reactive_seencascading_reactive_seenblocking_seenr   gens                 r/   r   SymbolRef.gen_resolved_symbols  s     ,0NOO$-KLL/9"' !% 9 9,C37',%* !: !	D!H x}}h.@.@A!  	D sO##%55d;C$' Cy)=T-=-=M'E4+E+E $ /?- + " t?O?O==?D+) 66224D )9)9==?D-- %S	::/ %(0 .#/ (?$S	:: )@ 3B-K	Ds   AF9
-F47DF9<=F9)r   r   rh   )NNr;   )r   rj   )FTF)r\   r]   r^   r_   rd   r   r   r   r   r3   r	   r   r   r=   classmethodrU   r   r   r   r   r+   rQ   r`   r   rV   rZ   r  r   r   r   ra   rb   r1   r/   rj   rj   >  s   !1!3
 $((,	 7swwhtn45 7   7 H%	 7
 
 7D 9=%-g%6	 x0 HX<N  *.Tg&T	(	T
 7 7(); 7 7 #  )t ), #   
 05#'!&6;6; "&6; )-	6;
 !6; 6; 
>4-	.6; 6;r1   rj   c                       \ rS rSr  SS\S\S\S\SS4
S jjr\S	\	SS 4S
 j5       r
\S	\	S\S   4S j5       rS\S   4S jrS\4S jrS\	4S jrS\	4S jr  SSSS\S\S\S\\SS4   4
S jjrSrg)LiveSymbolRefi  ref	timestamp
is_lhs_ref	is_killedr   Nc                 4    Xl         X l        X0l        X@l        g r;   )r  r  r  r  )r<   r  r  r  r  s        r/   r=   LiveSymbolRef.__init__  s     "$"r1   r   c                 d    UR                  SS5      US'   U " [        R                  U5      40 UD6$ )Nr  r   )getrj   r   )r   r   rz   s      r/   r   LiveSymbolRef.from_string  s2    $jja8{9((4???r1   r   c                 ,    [         R                  U 5      $ r;   )rj   r   )r   s    r/   r   LiveSymbolRef.resolve  s      ,,r1   c                 6    U R                   R                  5       $ r;   )r  r   rB   s    r/   r   LiveSymbolRef.to_symbol  s    xx!!##r1   c                 Z    [        U R                  U R                  U R                  45      $ r;   )rP   r  r  r  rB   s    r/   rQ   LiveSymbolRef.__hash__  s     TXXt~~t?@@r1   c                 f    SU R                    SU R                   U R                  (       a  SOS S3$ )Nz<live:@z (lhs)rY   >)r  r  r  rB   s    r/   rZ   LiveSymbolRef.__str__  s1    TXXJa/DOOQS/TTUV	
r1   c                     [        U 5      $ r;   )rU   rB   s    r/   rV   LiveSymbolRef.__repr__  s    4yr1   rh   r   r   r   cell_ctrc              #   l  #    SnU R                   R                  UUUS9 H  nU R                  Ul        U R                  Ul        [	        X@R
                  5      Ul        U=(       d    UR                  nU(       a0  UR                  (       d  UR                  R                  5       Ul        Uv   M     g 7f)NF)r   )
r  r   r  r  r   r  liveness_timestampr9   r  rM   )r<   rh   r   r   r,  r  resolved_syms          r/   r   "LiveSymbolRef.gen_resolved_symbols  s       HH99#+I : 
L
 '+ooL#%)^^L".7...QL+)E\-E-EM\%=%=$0$5$5$>$>$@!
s   B2B4)r  r  r  r  )FF)Fr~   )r\   r]   r^   r_   rj   r+   r`   r=   r  rU   r   staticmethodr   r   r   rQ   rZ   rV   r   r   r   ra   rb   r1   r/   r  r    s   
 !
#
# 
# 	
#
 
# 

# @S @ @ @ -C -HX$6 - -$8H- $A# A
 

#  05 "& )-	
  
>4-	. r1   r  )/r   loggingtypingr   r   r   r   r   r   r	   r
   r   r   !ipyflow.analysis.resolved_symbolsr   ipyflow.data_model.timestampr   ipyflow.singletonsr   r   ipyflow.typesr   r   ipyflow.utilsr   ipyflow.utils.ast_utilsr   r   ipyflow.data_model.symbolr   r   	getLoggerr\   loggersetLevelWARNINGr   r*   r0   r3   NodeVisitorrd   r   r   __annotations__rj   r  rb   r1   r/   <module>rA     s    
    = 2 + > - @7 
		8	$   -
---e&012-`IH IHX\s \~  T#''] ]; ];@7' 7r1   