
    ^hb                     `   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  S SK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Jr  S SKJr  S SK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$  S SK%J&r&  \RN                  " \(5      r)\)RU                  \RV                  5        Sr,S\ RZ                  4S jr. " S S\\\\ R^                  5      r0S\
\   SSS\\S   \S   4   4S jr1 S#S\\   SSS\2S\3S\\\   \\2   \\   4   4
S jjr4S\\\\24      S\2S\3S\\\   \\2   \\   4   4S jr5   S$S\\ RZ                  \\ Rl                     \74   S\S   S\\\7      S\3S\\\   \\   \\   4   4
S jjr8  S%S\\ RZ                  \74   S\2S\S   S\\   4S  jjr9S!\ Rl                  S\34S" jr:g)&    N)contextmanager)	TYPE_CHECKINGDictIterableListOptionalSetTupleUnioncast)SaveOffAttributesMixinSkipUnboundArgsMixinVisitListsMixin)ResolvedSymbol)AtomLiveSymbolRef	SymbolRefvisit_stack)FlowDirection)	Timestamp)flowtracer)Scope)Symbol)get_ipythonrun_line_magicrun_cell_magicnodec                      [        U [        R                  [        R                  45      (       a  U R                  n O/[        U [        R
                  5      (       a  U R                  n O U $ Mm  N)
isinstanceast	Attribute	SubscriptvalueCallfunc)r   s    T/home/james-whalen/.local/lib/python3.13/site-packages/ipyflow/analysis/live_refs.py_chain_rootr)   *   sO    
dS]]CMM:;;::Dchh''99DK     c            	         ^  \ rS rSr   S,S\S   S\\\      S\SS4S jjrS	\	R                  S\\\   \\   \\   4   4S
 jrS r\S 5       rS rS-S jrS\SS4S jrS.S/S jjr\R.                  S:  a  S	\	R0                  SS4S jrS	\	R4                  SS4S jrS	\	R8                  SS4S jrS	\	R<                  SS4S jrS	\ \	RB                  \	RD                  4   SS4S jr#\#=r$r%S\ \	RL                  \	RN                  \	RP                  \	R                  \	RR                  \	RT                  4   SS4S jr+S	\ \	RX                  \	RZ                  4   SS4S jr.\.=r/r0S	\	Rb                  SS4S jr2S	\	RN                  SS4S jr3S	\ \	RR                  \	R
                  \	R                  4   SS4S jr4\4=r5=r6r7S	\	Rp                  SS4S jr9S	\ \	Rt                  \	Rv                  \	Rx                  \	Rz                  4   SS4S jr>\>=r?=r@=rArBS	\	R                  SS4S  jrDS	\	R                  SS4S! jrFS	\	RL                  SS4S" jrGS	\	R                  SS4S# jrIS	\	RP                  SS4S$ jrJS	\	R                  SS4S% jrLS/S& jrM\M=rN=rO=rPrQS	\	R                  SS4S' jrSS/S( jrTS	\	R                  SS4S) jrVU 4S* jrWS+rXU =rY$ )0ComputeLiveSymbolRefs6   Nscoper   init_killedinclude_killed_livereturnc                 J   Xl         SU l        [        5       U l        U=(       d
    [        5        Vs1 s H  n[        R
                  " XAS9iM     snU l        [        5       U l        SU l        SU l	        SU l
        SU l        X0l        0 U l        [        5       U l        g s  snf )Nr   r.   F)_scope_module_stmt_countersetliver   from_stringdeadmodified_in_kill_context_inside_attrsub_skip_simple_names_is_lhs_include_killed_live_func_ast_by_name_visiting_func_calls)selfr.   r/   r0   killeds        r(   __init__ComputeLiveSymbolRefs.__init__9   s     $%!(+	 &..
. !!&6.
	 ), %$"'$7!  	 /2e!
s   B r   c                     U R                  U5        U =R                  U R                  -  sl        U R                  U R                  U R                  4$ )zj
This function should be called when we want to do a liveness check on a
cell's corresponding ast.Module.
)visitr:   r9   r7   rB   r   s     r(   __call__ComputeLiveSymbolRefs.__call__S   s;     	

4"yy$))T]]22r*   c                      U R                  SS9$ )NTr;   push_attributesrB   s    r(   kill_context"ComputeLiveSymbolRefs.kill_contexta   s    ##T#::r*   c              #     #    U R                   nU R                  S[        5       S9   U R                  U5        U R                   nU Vs1 s H  oDU;  d  M
  UiM     nnS S S 5        U =R                   W-  sl          S v   U =R                   W-  sl         g s  snf ! , (       d  f       NC= f! U =R                   W-  sl         f = f7f)NT)r;   r9   )r9   rN   r6   rG   )rB   r   r9   new_deadrefnot_present_befores         r(   killed_context$ComputeLiveSymbolRefs.killed_contextd   s     yy!!4ce!DJJtyyH19!M#_#!M E 			X		,II++I "N ED II++IsL   %C"B		BBBC<B,  CB
B)%C,CCc                      U R                  SS9$ )NFrL   rM   rO   s    r(   live_context"ComputeLiveSymbolRefs.live_contextq   s    ##U#;;r*   c                      U R                  XS9$ )N)r<   r=   rM   )rB   insides     r(   attrsub_context%ComputeLiveSymbolRefs.attrsub_contextt   s    ##F#VVr*   rT   c           	         UR                  5       U R                  ;   nU(       a  U R                  (       d  g [        UR                  5      S:X  a  g UR                  S   n[        UR                  [        5      (       a  U=(       di    [        UR                  5       U R                  S9U R                  ;   =(       d3    [        [        UR                  SS9U R                  S9U R                  ;   nU(       a  U R                  (       d  g U R                  R                  [        UU R                  U R                   US95        g g )Nr   r3   F)is_callpoint
is_lhs_ref	is_killed)	canonicalr9   r?   lenchainr!   r%   strr   nonreactiver4   r   r7   addr   r5   r>   )rB   rT   rc   leading_atoms       r(    _add_attrsub_to_live_if_eligible6ComputeLiveSymbolRefs._add_attrsub_to_live_if_eligiblew   s    MMOtyy0	T66syy>Qyy|l((#..! ,224DKKHDIIU ++%@ 99  !:!:IIMM--#||'	 /r*   c           
      p   [        5       nU R                  US9   Ub@  U R                  U5        U =R                  U Vs1 s H  oUR                  iM     sn-  sl        Ub  U R                  U5        U R                  SS9   U HO  n[        U[        R                  [        R                  45      (       d  M4  U R                  UR                  5        MQ     S S S 5        S S S 5        [        U R                  5      nU R                  US9   U R                  5          U H  nU R                  U5        M     S S S 5        [        U5      S:X  a  [        US   [        R                  5      (       a  [        U[        R                  [        R                   45      (       af  [#        [        UR$                  5      5       HD  nUR'                  [(        R*                  " US   R,                   SU S3U R.                  S	95        MF     S S S 5        XpR                  -  n[1        5       R2                  R4                  [6        R8                  :X  GaG  U R.                  Gb9  [        U5      S:X  Ga)  [        U5      S:X  Ga  XpR                  ::  Gd	  UGc  UGb  [        U[        R                  [        R                  [        R                  45      (       a  US
 U 5       4 V	s/ s H  n	[;        XR.                  5      S   PM     sn	u  p[        U
5      S:X  a  [        U5      S:X  aq  X4 V	s/ s H  n	[=        [?        U	5      5      PM     nn	US   US   pUR@                  UR@                  L d  URB                  URD                  :  a  URG                  5         Xt Vs1 s H  oR                  iM     sn-  nU =RH                  U-  sl$        U =R                  U-  sl
        g s  snf ! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN= fs  sn	f s  sn	f s  snf )N)r7   T)r>   r9      r   []r3   c              3   8   #    U  H  oR                   v   M     g 7fr    )rT   ).0r7   s     r(   	<genexpr>:ComputeLiveSymbolRefs.visit_Assign_impl.<locals>.<genexpr>   s     ,SBR$XXBRs   )%r6   rN   rG   r:   rT   r!   r"   r#   r$   r%   r9   rP   visit_Assign_targetre   Namer   r
   rangeeltsri   r   r8   idr4   r   mut_settings
flow_orderr   	ANY_ORDERget_symbols_for_referencesnextiterobjshallow_timestamp	timestampclearr7   )rB   targetsr%   aug_assign_targetthis_assign_liverT   targetthis_assign_deadidxxlhsrhssymslhs_symrhs_symr7   s                   r(   visit_Assign_impl'ComputeLiveSymbolRefs.visit_Assign_impl   sF   /2u!!'7!8 ,

,-5E!F5Ec''5E!FF 

5!%%d%3%F!&3==#--*HII

6<<0 & 4 9 tyy>!!'7!8""$%F,,V4 & % G!wqz38844usxx&;<< UZZ1C$((!--&qz}}oQse15T[[ 2 9  	II% F**m.E.EE'$%*$%*%2!)!53==#--"JKK +,SBR,STTA +1kk:1=THC 3x1}SQ>AZ%HZd47mZ%H#'7DG KK7;;.0073D3DD %**,2BC2B$XX2BCC 			%%			%%	C "G 43 98 %$ 98:
 &I Dsq   %O3O
-O33O!8O!O3PP7CP"P)'P.P3O3!
O0	+O33
P
P	P
P&      c                 R    U R                  UR                  /UR                  5        g r    r   r   r%   rH   s     r(   visit_NamedExpr%ComputeLiveSymbolRefs.visit_NamedExpr   s    ""DKK=$**=r*   c                 P    U R                  UR                  UR                  5        g r    )r   r   r%   rH   s     r(   visit_Assign"ComputeLiveSymbolRefs.visit_Assign   s    t||TZZ8r*   c                 R    U R                  UR                  /UR                  5        g r    r   rH   s     r(   visit_AnnAssign%ComputeLiveSymbolRefs.visit_AnnAssign   s    }djj9r*   c                 N    U R                  / UR                  UR                  S9  g )N)r   )r   r%   r   rH   s     r(   visit_AugAssign%ComputeLiveSymbolRefs.visit_AugAssign   s    r4::Mr*   c                    / nUR                    Hi  nUR                  S:X  a  M  UR                  [        R                  " UR
                  =(       d    UR                  [        R                  " 5       S95        Mk     U R                  US S9  g )N*)rz   ctx)r%   )namesnameappendr"   rw   asnameStorer   )rB   r   r   r   s       r(   visit_import"ComputeLiveSymbolRefs.visit_import   sc    JJDyyCNN388t{{'?diiSYY[QR	 
 	wd3r*   target_nodec                    [        U[        R                  [        R                  [        R                  45      (       a  U R
                  R                  [        XR                  S9R                  5       5        [        U[        R                  5      (       a5  U R                  5          U R                  UR                  5        S S S 5        g g [        U[        R                  [        R                  45      (       a%  UR                   H  nU R!                  U5        M     g [        U[        R"                  5      (       a  U R!                  UR$                  5        g [&        R)                  SU-  5        g ! , (       d  f       g = f)Nr3   zunsupported type for node %s)r!   r"   rw   r#   r$   r9   ri   r   r4   rd   rY   rG   slicer
   r   ry   rv   Starredr%   loggerwarning)rB   r   elts      r(   rv   )ComputeLiveSymbolRefs.visit_Assign_target   s     kCHHcmmS]]#KLLIIMM)K{{CMMOP+s}}55&&(JJ{001 )( 6 cii%:;;"''((- (S[[11$$[%6%67NN9KGH )(s   (E66
Fc                    U R                  UR                  R                  5        U R                  UR                  5        U R                  R                  [        U5      R                  5       5        XR                  UR                  '   g r    )
generic_visitargsdefaultsdecorator_listr9   ri   r   rd   r@   r   rH   s     r(   generic_visit_function_def0ComputeLiveSymbolRefs.generic_visit_function_def	  s_     	499--.4../		io//12,0tyy)r*   c                     U R                  UR                  5        UR                  b5  U R                  5          U R                  UR                  5        S S S 5        g g ! , (       d  f       g = fr    )rG   context_exproptional_varsrP   rH   s     r(   visit_withitem$ComputeLiveSymbolRefs.visit_withitem  sR    

4$$%)""$

4--. %$ *$$s   A
A-c           	         [        XR                  S9nU R                  (       a*  U R                  R	                  UR                  5       5        g U R                  (       d  X R                  ;   nU(       a  U R                  (       d  g [        U5      [        5       R                  ;   a  SUR                  S   l        U R                  R	                  [        UU R                  U R                   US95        g g )Nr3   Tr   ra   )r   r4   r;   r9   ri   rd   r=   r?   rz   r   reactive_node_idsrf   is_reactiver7   r   r5   r>   rB   r   rT   rc   s       r(   
visit_Name ComputeLiveSymbolRefs.visit_Name  s    KK0  IIMM#--/*((yy(I!:!:$x68555+/		!(IIMM--#||'	 )r*   c                     U R                  S5         U R                  UR                  5        S S S 5        g ! , (       d  f       g = fNF)r]   r   ry   rH   s     r(   visit_container_literal-ComputeLiveSymbolRefs.visit_container_literal,  s0     !!%(tyy) )((s	   7
Ac                    U R                  S5         U R                  UR                   Vs/ s H  o"(       d  M  UPM     sn5        U R                  UR                  5        S S S 5        g s  snf ! , (       d  f       g = fr   )r]   r   keysvalues)rB   r   ks      r(   
visit_Dict ComputeLiveSymbolRefs.visit_Dict4  sY    !!%(499:9a9:;t{{+ )(: )(s!   A0
A+
A+
 "A0+A00
A>c                 $   [        US5      (       a  U R                  UR                  5        [        US5      (       a  U R                  UR                  5        [	        5       n[	        5       n[        US5      (       aL  U R                  US9   U R                  5          U R                  UR                  5        S S S 5        S S S 5        U R                  X#S9   U R                  UR                  5        S S S 5        [	        5       n[	        5       nU R                  XES9   U R                  UR                  5        S S S 5        X$-  n[        U5       H0  nUR                  U R                  ;   d  M  UR                  U5        M2     U =R                  U-  sl        U =R                  X5-  -  sl        U =R                   X5-  -  sl        g ! , (       d  f       GN= f! , (       d  f       GN"= f! , (       d  f       GN= f! , (       d  f       N= f)Ntestr   r   rn   )r7   r9   )hasattrrG   r   r   r6   rN   rP   r   r   bodyorelselistrT   r9   discardr7   r:   )rB   r   	body_live	body_deadorelse_liveorelse_deadnew_liverT   s           r(   generic_visit_branch_or_loop2ComputeLiveSymbolRefs.generic_visit_branch_or_loop9  s~    4  JJtyy!4  JJtyy!(+	$'E	4""%%9%5&&(JJt{{+ ) 6 !!y!Atyy) B*-%&)e!!{!Et{{+ F*>Cww$))#  % " 			X			Y,,	00 )( 65 BA FEs<   GG:GG/ H
G	G
G,/
G>
Hc                     U R                  UR                  5        U R                  UR                  5        U R                  R	                  [        U5      R                  5       5        g r    )r   basesr   r9   ri   r   rd   rH   s     r(   visit_ClassDef$ComputeLiveSymbolRefs.visit_ClassDefV  sE    4::&4../		io//12r*   c                    U R                  S5         U R                  UR                  5        UR                   H  nU R	                  UR
                  5        M      S S S 5        U R                  (       dB  [        [        U5      [        R                  5      (       d  U R                  [        U5      5        U R                  5          U R	                  UR                  5        S S S 5        [        UR                  [        R                  5      (       Ga  UR                  R                  U R                   ;   Ga  UR                  R                  U R"                  ;  Ga  U R                   UR                  R                     nS n[$        R&                  " UR                  R                  =(       d    / UR                  R(                  =(       d    / UR                  R*                  UR                  R,                  4 Vs/ s H  oU(       d  M  UPM     sn[/        UR                  SS 5      =(       d    / [/        UR                  SS 5      =(       d    / 5       Vs1 s H,  n[        R0                  " UR2                  U R4                  S9iM.     nn[7        5       n[9        U R                   5      n	U R;                  UUU[7        5       U	S9   U R                  UR<                  5        S S S 5        U =R>                  U-  sl        U R"                  RA                  UR                  R                  5        g g g g ! , (       d  f       GN= f! , (       d  f       GNj= fs  snf s  snf ! , (       d  f       N= f)NFposonlyargs
kwonlyargsr3   )r4   r9   r7   r:   r@   )!r]   r   r   keywordsrG   r%   r<   r!   r)   r"   BinOprk   r   r'   rw   rz   r@   rA   	itertoolsrf   kw_defaultsvarargkwarggetattrr8   argr4   r6   dictrN   r   r7   r   )
rB   r   r   func_ast
call_scopear   	call_dead	call_livefunc_ast_by_names
             r(   
visit_Call ComputeLiveSymbolRefs.visit_Call[  sr   !!%(tyy)

5;;' ' ) ##J{47H#)),T,T11)D/B!!#JJtyy! $ tyy#((++		 6 66		D$=$==--diill;HJ %??MM&&,"MM--3!)!5!5x}}7J7J KQ K1qQ KQHMM=$?E2HMM<>D"	C %%cggT[[A  	 -0EI#D$:$:;%%!"2 &  ""8==1 II"I%%--diill;3 > 7 , )( $# R	 s6   A
L4M>
MM3MM"4
M
M"
M0c                 4   U R                   (       dB  [        [        U5      [        R                  5      (       d  U R                  [        U5      5        U R                  5          U R                  UR                  5        S S S 5        g ! , (       d  f       g = fr    )
r<   r!   r)   r"   r   rk   r   r]   rG   r%   rH   s     r(   visit_Attribute%ComputeLiveSymbolRefs.visit_Attribute  sZ    ##J{47H#)),T,T11)D/B!!#JJtzz" $##s   $B		
Bc                     U R                  S5         U R                  UR                  5        U R                  UR                  5        S S S 5        g ! , (       d  f       g = fr   )r]   rG   leftrightrH   s     r(   visit_BinOp!ComputeLiveSymbolRefs.visit_BinOp  s<    !!%(JJtyy!JJtzz" )((s   7A
A c                    U R                   (       dB  [        [        U5      [        R                  5      (       d  U R                  [        U5      5        U R                  5          U R                  UR                  5        S S S 5        U R                  SS9   U R                  UR                  5        S S S 5        g ! , (       d  f       NB= f! , (       d  f       g = f)NF)r\   )r<   r!   r)   r"   r   rk   r   r]   rG   r%   r   rH   s     r(   visit_Subscript%ComputeLiveSymbolRefs.visit_Subscript  s    ##J{47H#)),T,T11)D/B!!#JJtzz" $!!!/JJtzz" 0/ $#//s   $B<C<
C

Cc                     g r     rH   s     r(   visit_Delete"ComputeLiveSymbolRefs.visit_Delete  s    r*   c                     U R                  UR                   Vs/ s H  o"R                  PM     sn5         [        U[        R
                  5      (       a7  U R                  UR                  5        U R                  UR                  5        OU R                  UR                  5        UR                   H9  nU R                  UR                  5        U R                  UR                  5        M;     S S S 5        g s  snf ! , (       d  f       g = fr    )rV   
generatorsr   r!   r"   DictComprG   keyr%   r   r   ifs)rB   r   gens      r(   generic_visit_comprehension1ComputeLiveSymbolRefs.generic_visit_comprehension  s      !H**!HI$--

488$

4::&

488$

388$

377# ' JI!HIIs   C:B;C??
Dc                     U R                  5          U R                  UR                  5        S S S 5        g ! , (       d  f       g = fr    )rP   rG   r   rH   s     r(   visit_Lambda"ComputeLiveSymbolRefs.visit_Lambda  s*     JJtyy! !  s	   6
Ac           	         [        UR                  U R                  S9nU R                  (       a*  U R                  R                  UR                  5       5        g U R                  (       da  X R                  ;   nU(       a  U R                  (       d  g U R                  R                  [        UU R                  U R                  US95        g g )Nr3   ra   )r   r   r4   r;   r9   ri   rd   r=   r?   r7   r   r5   r>   r   s       r(   	visit_argComputeLiveSymbolRefs.visit_arg  s    4  IIMM#--/*((yy(I!:!:IIMM--#||'		 )r*   c                     UR                    HJ  n[        U[        R                  5      (       d   eU R	                  U5        U =R
                  S-  sl        ML     g )Nro   )r   r!   r"   stmtrG   r5   )rB   r   childs      r(   visit_Module"ComputeLiveSymbolRefs.visit_Module  sD    YYEeSXX....JJu%%*% r*   c                    > [         R                  " U5         [        TU ]  U5      [         R                  " 5         $ ! [         R                  " 5         f = fr    )r   r   superrG   pop)rB   r   	__class__s     r(   rG   ComputeLiveSymbolRefs.visit  s7    4 	7=&OOKOOs	   = A)r@   r;   r?   r<   r>   r5   r4   r=   rA   r9   r7   r:   NNF)Tr    )r1   N)Z__name__
__module____qualname____firstlineno__r   r	   rg   boolrD   r"   ASTr
   r   r   rI   rP   r   rV   rY   r]   rk   r   sysversion_info	NamedExprr   Assignr   	AnnAssignr   	AugAssignr   r   Import
ImportFromr   visit_Importvisit_ImportFromr#   rw   r$   r   exprrv   FunctionDefAsyncFunctionDefr   visit_FunctionDefvisit_AsyncFunctionDefwithitemr   r   r   
visit_List	visit_Setvisit_Tupler   r   ForAsyncForIfWhiler   	visit_Forvisit_AsyncForvisit_Ifvisit_WhileClassDefr   r&   r   r   r   r   r   Deleter  r  visit_DictCompvisit_ListCompvisit_SetCompvisit_GeneratorExpLambdar  r  Moduler  rG   __static_attributes____classcell__)r  s   @r(   r,   r,   6   s   
 $(*.$)	4 4 c#h'4 "	4
 
443GG3	s=!3y>3y>A	B3; 
, 
,<WI $ :G&R 6!	> 	>$ 	>9 9 9:CMM :d :NCMM Nd N4szz3>>'A!B 4t 4 '32L#IMM388S]]CIIsxxQ
I
 
I&1#//3+?+??@1	1 2LK./3<< /D /sxx D &*#((CGGSYY67*	* ,CBJB[,sxx ,D ,
1#''3<<BC1	16 ;WVIVVK33<< 3D 3
%<sxx %<D %<N#CMM #d ##		 #d #
#CMM #d #  	$ 	$N ^ m6H" " ""+ + + r*   r,   symbol_refsr.   r   r1   r   c                    [        5       n[        5       nU  Hc  nUR                  USS9 HL  nUR                  (       a  UR                  UR                  5        M1  UR                  UR                  5        MN     Me     X#4$ )NT)only_yield_final_symbol)r6   gen_resolved_symbols	is_calledri   sym)rJ  r.   r   called_syms
symbol_refresolveds         r(   r~   r~     sq     D!$K!
"774 8 
H !!-&
 " r*   cell_ctrupdate_liveness_time_versionsc                    [        5       n[        5       n[        5       nU  GH  nUR                  R                  n[        U5      S:  aG  US   R                  n	[        U	[        5      =(       a     [        [        U	5      =(       d	    U	[        ;   n
OSn
S nUR                  USSUS9 H  nUR                  (       a&  UR                  R                  R                  U:w  a  M:  Sn
UR                  (       a  UR!                  XR"                  45        UR$                  (       d  M|  UR&                  (       a  M  UR!                  U5        M     UbD  U(       a=  UR                  (       d,  UR(                  nUR+                  UUR,                  (       + SS9  U
(       a  GM{  UR                  (       a  GM  UR!                  U5        GM     [/        UUUS9u  nnnXM-  nX_-  nXNU4$ )Nro   r   FT)rL  yield_all_intermediate_symbolsrS  	used_time
exclude_ns	is_static)live_with_stmt_ctrrS  rT  )r6   rT   rf   re   r%   r!   rg   r   builtins_RESOLVER_EXCEPTIONSrM  rc   rO  r   cell_numrN  ri   r   is_live	is_unsafeliveness_timestampupdate_usage_infois_last*_compute_call_chain_live_symbols_and_cells)rJ  r.   rS  rT  live_symbolsunresolved_live_refsrP  live_symbol_refrf   atomdid_resolverR  liveness_timelive_from_calls
live_cellsunresolved_from_callss                   r(   )get_live_symbols_and_cells_for_referencesrn    s    ),L/2u365K&##))u:?8>>D$T3/ $'G43G+G   K'<<$)+/	 = 
H  ))LL22;;xGK!!+D+D EF(:(:(:  *
"  -#--$77M&&''/// ' 
 {?#<#<#< $$_5M 'V 	3&&C		 #L1%999r*   r[  c                 h   [        5       n[        U 5      n[        5       n[        5       n[        U5      S:  Ga-  UR                  5       nXs;   a  M'  Uu  pUR                  R
                  c  MD  UR                  U5        UR                  R                  5        V
s1 s H  oR                  iM     nn
[        [        [        R                  UR                  R
                  5      R                  UUS:  S9tp[        X5      nU GHL  nUR                  R                   n[        U5      S:  ad  UR"                  (       dS  US   R$                  n['        U[(        5      =(       a,    UU;   =(       d     [+        [,        U5      =(       d	    U[.        ;   nOSnS nUR1                  UR                  R2                  SSS9 GH'  nUR"                  (       a&  UR                  R4                  R6                  U:w  a  M;  UR8                  R:                  =(       d    UR:                  UR8                  l        UR8                  R<                  =(       d    UR<                  UR8                  l        SnUR>                  (       a  URA                  UU	45        UR                  RB                  (       a  M  URD                  (       d  GM  URF                  (       a  GM  UR                  U5        GM*     Ub8  U(       a1  UR"                  (       d   URI                  UURJ                  (       + SS9  U(       a  GM'  UR"                  (       a  GM;  UR                  U5        GMO     [        U5      S:  a  GM-  UU VVs1 s H/  u  nnURD                  (       d  M  URL                  R6                  iM1     snnU4$ s  sn
f s  snnf )Nr   )r/   r0   ro   FT)rL  rV  rW  )'r6   r   re   r  rO  func_def_stmtri   get_definition_argsr   compute_live_dead_symbol_refsr   r"   r0  r   r   rT   rf   rc   r%   r!   rg   r   r\  r]  rM  r   r   r^  rh  is_cascading_reactiver   rN  r   is_anonymousr_  r`  rb  rc  r   )r[  rS  rT  seenworklistr7   
unresolvedworkitem
called_symstmt_ctrr   r/   	live_refs_rX  rQ  rf   rh  ri  rR  calleds                        r(   rd  rd    s   
 -0ED156H1IH #D%(UJ
h-!
/7||~'
>>''/*4..*L*L*NO*N3ww*NO5*..">">?DD# (1
	
 h1	#JNN((E5zQz';';Qx~~(s3 K' 4x.433  $H&;;))(-/3 <  (( 66??8K MM77 8!77 3
 MM--G1G1G ) #%%OOXx$89<<,,###H,>,>,>HHX&14 $1",,**'#+#3#33" + 
 ;z';';';z*a $! h-!
D 	48KDyvqFNN	"			"	"DK q Pt 	Ls   N)-N.	N.coder/   r0   c                 B   Uc
  [        5       n[        U [        5      (       a  [        R                  " U 5      n OW[        U [
        5      (       aB  [        R                  S:  a  [        R                  " U 5      n O[        R                  " U / 5      n [        XUS9" U 5      $ )Nr   )r.   r/   r0   )
r6   r!   rg   r"   parser   r%  r&  rG  r,   )r~  r.   r/   r0   s       r(   rr  rr  j  s     e$yy	D$		f$::d#D::dB'D BU
 r*   c                 l    [        XS:  S9tp4[        X2=(       d    [        5       R                  US9tpTU$ )Nr   )r0   )rS  )rr  rn  r   global_scope)r~  rS  r.   r{  r|  resolved_live_symss         r(   static_resolve_rvalsr  ~  sB    
 2Q,MI G/DF//( r*   r  c                     [        U 5      tpU H4  nUR                  R                   H  nUR                  (       d  M      g   M6     g)NTF)rr  rT   rf   rs  )r  r{  r|  rT   rh  s        r(   %stmt_contains_cascading_reactive_rvalr    s>    1$7MIGGMMD))) "  r*   )Fr  )N);r"   r\  r   loggingr%  
contextlibr   typingr   r   r   r   r   r	   r
   r   r   ipyflow.analysis.mixinsr   r   r   !ipyflow.analysis.resolved_symbolsr   ipyflow.analysis.symbol_refr   r   r   r   ipyflow.configr   ipyflow.data_model.timestampr   ipyflow.singletonsr   r   ipyflow.data_model.scoper   ipyflow.data_model.symbolr   	getLoggerr  r   setLevelERRORr]  r$  r)   NodeVisitorr,   r~   intr#  rn  rd  r  rg   rr  r  r  r  r*   r(   <module>r     sc   
    
 %
 
 
 
 = S S ( 2 +.0			8	$   K cgg Q0/3??Qh)$ 3x=#h-'(* +0	;:]#;:;: ;: $(	;:
 3~C#m*<<=;:|NE.#"567NN $(N 3~C#m*<<=	Nf  $&* %	
chh,
-G #c(# 	
 3}s9~s9~=>, #

 G 		 T r*   