
    ^h'                        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  S SKrS SKJr  S SKJr  \R&                  " \5      r\" 5       r\" \ S\" S5      5      r\" \ S\" S5      5      r\" \ S\" S5      5      r " S	 S
5      r " S S\ R<                  5      rS\ R@                  S\
\!   4S jr"S\ R@                  S\
\!   4S jr#S\ RH                  S\
\!   4S jr%S\ RH                  S\
\!   4S jr& " S S\RN                  5      r(g)    N)	FrameType)AnyListOptionalSetUnion)subscript_to_slice)PYCCOLO_BUILTIN_PREFIXConstantNumStrc                   
   \ rS rSr% \" 5       r\\   \S'   \" 5       r	\\   \S'   S\
\R                  \R                  4   4S jr\S\4S j5       r\S\S\4S	 j5       r\S\S\4S
 j5       rS\4S jrS\4S jrS rS rSrg)_LazySymbol   non_modulesblocklist_packagesspecc                 &    Xl         [        U l        g N)r   _unresolvedvalue)selfr   s     W/home/james-whalen/.local/lib/python3.13/site-packages/pyccolo/examples/lazy_imports.py__init___LazySymbol.__init__   s    	 
    returnc                     U R                   nUR                  S   R                  n[        U[        R
                  5      (       a  U$ UR                   SU 3$ )Nr   .)r   namesname
isinstanceastImportmodule)r   noder!   s      r   qualified_module_LazySymbol.qualified_module!   sI    yyzz!}!!dCJJ''Kkk]!D6**r   r%   c                 ,    U R                  SS5      S   $ Nr      r   )split)r%   s    r   top_level_package_LazySymbol.top_level_package*   s    ||C#A&&r   c                    U[         R                  ;   a  [         R                  U   $ S nXR                  ;  a6   [        R                  " 5          [
        R                  " U5      sS S S 5        $ UR                  SS5      n[        U5      S:w  a  [        SU-  5      UeUu  p[        U R!                  U5      U5      n[#        U[$        5      (       a  UR'                  5       nU$ ! , (       d  f       N= f! [         a'  nU R                  R                  U5        Un S nANS nAf[         a    [        R                  SU5        e f = f)Nz&fatal error trying to import module %sr   r+      zinvalid module %s)sysmodulesr   pycallow_reentrant_event_handling	importlibimport_moduleImportErroradd	Exceptionloggererrorrsplitlen
ValueErrorgetattr_unwrap_moduler"   r   unwrap)clsr%   excemodule_symbolsymbolrets          r   r@   _LazySymbol._unwrap_module.   s	   S[[ ;;v&&(779$226: :9 c1-}"069:C*NFc((0&9c;''**,C
! :9 ##F+ EvNs5   C6 C%%	C6 %
C3/C6 3C6 6
E D""%Ec                 8    U R                  U R                  5      $ r   )r@   r'   r   s    r   _unwrap_helper_LazySymbol._unwrap_helperG   s    ""4#8#899r   c                 p    U R                   [        La  U R                   $ U R                  5       nXl         U$ r   )r   r   rK   )r   rG   s     r   rA   _LazySymbol.unwrapJ   s0    ::[(::!!#

r   c                 Z    [        S[        R                  " U R                  5      -  5      e)Nzcant call _LazyName for spec %s	TypeErrorr#   unparser   )r   argskwargss      r   __call___LazySymbol.__call__Q   s     9CKK		<RRSSr   c                 Z    [        S[        R                  " U R                  5      -  5      e)Nz)cant __getattr__ on _LazyName for spec %srP   )r   items     r   __getattr___LazySymbol.__getattr__T   s$    7#++dii:PP
 	
r   )r   r   N)__name__
__module____qualname____firstlineno__setr   r   str__annotations__r   r   r#   r$   
ImportFromr   propertyr'   staticmethodr-   classmethodr   r@   rK   rA   rU   rY   __static_attributes__ r   r   r   r      s    EKS!#&5C(!U3::s~~#=> ! +# + + '# '# ' ' C C  0: : T
r   r   c                       \ rS rSrS
S jrS\R                  SS4S jrS\R                  SS4S jr	\
S\R                  S\\   4S j5       rS	rg)_GetLazyNamesZ   r   Nc                 "    [        5       U l        g r   )r_   
lazy_namesrJ   s    r   r   _GetLazyNames.__init__[   s    .1er   r&   c                     U R                   c  g UR                   H  nUR                  b  M    g    UR                   H7  nUR                  c   eU R                   R                  UR                  5        M9     g r   )rl   r    asnamer8   r   r&   aliass      r   visit_Import_GetLazyNames.visit_Import^   s`    ??"ZZE||#   ZZE<<+++OO-  r   c                    U R                   c  g UR                   H  nUR                  S:X  d  M  S U l           g    UR                   H;  nU R                   R                  UR                  =(       d    UR                  5        M=     g )N*)rl   r    r!   r8   ro   rp   s      r   visit_ImportFrom_GetLazyNames.visit_ImportFromh   sb    ??"ZZEzzS "&   ZZEOO :

;  r   c                 l    U " 5       nUR                  U5        UR                  =(       d
    [        5       $ r   )visitrl   r_   )rB   r&   insts      r   compute_GetLazyNames.computer   s&    u

4'#%'r   )rl   r   N)r[   r\   r]   r^   r   r#   r$   rr   rb   rv   re   Moduler   r`   r{   rf   rg   r   r   ri   ri   Z   s_    4. . .<S^^ < < (3:: (#c( ( (r   ri   r&   r   c                 F   [        U R                  [        R                  5      (       a%  U R                  R                   SU R
                   3$ [        U R                  [        R                  5      (       a*  [        U R                  5      nUc  g U SU R
                   3$ g )N_O_)r"   r   r#   Nameidattr	Attribute_make_attr_guard_helper)r&   prefixs     r   r   r   y   sw    $**chh''**--DII;//	DJJ	.	.(4>XS,,r   c                 6    [        U 5      nUc  g [         SU 3$ N_)r   r
   r&   suffixs     r   _make_attr_guardr      s&    $T*F~()6(33r   c                 v   [        U 5      n[        U[        [        [        [
        R                  45      (       aq  [        U[
        R                  5      (       a  UR                  nOF[        US5      (       a  SUR                   S3nO$[        US5      (       a  SUR                   S3nOg g [        U R                  [
        R                  5      (       a  U R                  R                   SU 3$ [        U R                  [
        R                  5      (       a   [        U R                  5      nUc  g U SU 3$ g )Nsr   n_S_)r	   r"   ast_Constantast_Strast_Numr#   r   r   hasattrr   r   r   	Subscript_make_subscript_guard_helper)r&   	slice_val	subscriptr   s       r   r   r      s    "4(I)lGWchhGHHi**!IY$$IKK=*IY$$IKK=*I$**chh''**--I;//	DJJ	.	.-djj9>XS,,r   c                 6    [        U 5      nUc  g [         SU 3$ r   )r   r
   r   s     r   _make_subscript_guardr      s&    )$/F~()6(33r   c            	         ^  \ rS rSrSU 4S jjrS\\R                  \R                  4   S\	4S jr
S\R                  SS4S jr\S\S	\\   S
\S\4S j5       r\R&                  SSS\R                  S\SS4S j5       r\R*                  " \R,                  " S SS9S9SSS\\R.                  \R0                  4   S\S\4S j5       r\R4                  " \R,                  " \
SS9\S9S\S\4S j5       r\R:                  " \R,                  " \
SS9\S9S\S\R                  S\S\4S j5       r\R>                  " \R,                  " \
SS9\ S9S\S\S\4S j5       r\RB                  " \R,                  " \
SS9\ S9S\S\S\4S j5       r!\RD                  " \R,                  " \
SS9S S9S\S\R                  S\S\4S j5       r"Sr#U =r$$ )LazyImportTracer   r   Nc                 n   > [         TU ]  " U0 UD6  [        5       U l        / U l        / U l        / U l        g r   )superr   r_   cur_module_lazy_namessaved_attributessaved_subscriptssaved_slices)r   rS   rT   	__class__s      r   r   LazyImportTracer.__init__   s7    $)&)/2u"+-+-')r   r&   c                    U R                   c  g[        U[        R                  5      (       a  UR                  U R                   ;   $ [        U[        R
                  [        R                  45      (       a  U R                  UR                  5      $ [        U[        R                  5      (       a  U R                  UR                  5      $ g)NTF)r   r"   r#   r   r   r   r   _is_name_lazy_loadr   Callfuncr   r&   s     r   r   #LazyImportTracer._is_name_lazy_load   s    %%-chh''77d8888s}}cmm<==**4::66chh''**49955r   c                 8    [         R                  U5      U l        g r   )ri   r{   r   r   s     r   static_init_module#LazyImportTracer.static_init_module   s    %2%:%:4%@"r   packager%   levelc                 R    U R                  SUS-
  5      S   nU(       d  U$ U SU 3$ r*   )r<   )r   r%   r   r   s       r   _convert_relative_to_absolute.LazyImportTracer._convert_relative_to_absolute   s6     UQY/2MXQvh''r   _retframec                     Uc   eU R                   R                  [        U5      / 5       H  nSUR                  U'   M     g )NF)local_guards_by_module_idgetr   	f_globals)r   r   r&   r   r   __guards          r   init_moduleLazyImportTracer.init_module   s@     33774"EE%*EOOE" Fr   c                     [        U [        R                  [        R                  45      =(       a    [        R
                  " U 5      $ r   )r"   r#   r$   rb   r3   is_outer_stmtr&   s    r   <lambda>LazyImportTracer.<lambda>   s0    D3::s~~*FG (!!$'(r   T)static)whenc                 L   [        U[        R                  5      nUR                   H-  nUR                  S:X  a    g U(       d  M  UR
                  b  M-    g    UR                  S   n[        USS5      n	U(       a  S n
O$UR                  n
U	S:  a  U R                  XU	5      n
UR                   Hd  n[        R                  " U5      nU/Ul        U
b  Xl        SUl        [        US9UR                  UR
                  =(       d    UR                  '   Mf     [        R                  $ )Nru   __package__r   r   )r   )r"   r#   r$   r    r!   ro   r   r?   r%   r   copydeepcopyr   r   r3   Pass)r   r   r&   r   r   r   	is_importrq   r   r   r%   node_cpys               r   before_stmtLazyImportTracer.before_stmt   s     tSZZ0	ZZEzzS u||3	  
 //-0gq)F[[Fqy;;GUSZZE}}T*H#WHN!"(!":E8:TEOOELL6EJJ7   xxr   )r   r   rG   c                 <    U R                   R                  U5        U$ r   )r   append)r   rG   r   r   s       r   before_attr_load!LazyImportTracer.before_attr_load   s     	$$S)
r   c                     Ub  SUR                   U'   U R                  R                  5       n[        U[        5      (       a&  UR                  5       n[        XR                  U5        Uc  [        R                  $ U$ NT)
r   r   popr"   r   rA   setattrr   r3   Null)	r   rG   r&   r   _evtr   r   r   saved_attr_objs	            r   after_attr_load LazyImportTracer.after_attr_load  se     %)EOOE"..224c;''**,CNIIs3;sxx/C/r   attr_or_subscriptc                r    U R                   R                  U5        U R                  R                  U5        U$ r   )r   r   r   )r   rG   r   r   r   s        r   before_subscript_load&LazyImportTracer.before_subscript_load  s2     	$$S)  !23
r   c                 
   Ub  SUR                   U'   U R                  R                  5       nU R                  R                  5       n	[	        U[
        5      (       a  UR                  5       nXU	'   Uc  [        R                  $ U$ r   )	r   r   r   r   r"   r   rA   r3   r   )
r   rG   _noder   r   r   r   r   saved_subscript_objsaved_slice_objs
             r   after_subscript_load%LazyImportTracer.after_subscript_load  st     %)EOOE""33779++//1c;''**,C360;sxx/C/r   c                 .    [          SU R                   S3$ )Nr   _guard)r
   r   r   s    r   r   r   ,  s    45QtwwivFr   c                     Ub  SUR                   U'   [        U[        5      (       a(  UR                  5       nXR                   UR                  '   Uc  [
        R                  $ U$ r   )r   r"   r   rA   r   r3   r   )r   rG   r&   r   r   r   r   r   s           r   	load_nameLazyImportTracer.load_name*  sS     %)EOOE"c;''**,C'*OODGG$;sxx/C/r   )r   r   r   r   r}   )%r[   r\   r]   r^   r   r   r#   r   r   boolr   r~   r   rd   r`   r   intr   r3   r   r   r   	Predicater$   rb   r   before_attribute_loadr   r   after_attribute_loadr   r   r   r   r   rf   __classcell__)r   s   @r   r   r      s   *
uS]]CHH-D'E 
$ 
Aszz Ad A ((&sm(47(	( ( 	__++ #

+3<+	+ + 	__]](
 CJJ./ 	 
> 	]]-d;CSC c  	]]-d;CS	0	0!mm	04=	0		0	0 	]]-d;CX S SV 
 	]]-d;CX
0
0&/
0	
0
0 	]]]]-d;F00!hh0/80	0	0r   r   ))r#   r   r5   loggingr1   typesr   typingr   r   r   r   r   pyccolor3   pyccolo._fast.misc_ast_utilsr	   pyccolo.extra_builtinsr
   	getLoggerr[   r:   objectr   r?   typer   r   r   r   NodeVisitorri   r   r`   r   r   r   r   r   
BaseTracerr   rg   r   r   <module>r      s   
    
  2 2  ; 9			8	$ h sJT
3
#ud4j
)
#ud4j
)>
 >
B(COO (>
#-- 
HSM 
43== 4Xc] 4s}} # 24 4(3- 4G0s~~ G0r   