
    z%i*                     l   	 d dl Z d dl mZmZmZmZmZmZmZmZm	Z	m
Z
mZmZmZmZmZ d dlZg dZd Z G d d      Z e       Z G d d      Z G d	 d
e      Z G d de      Z G d d      Zedk(  rd dlZd dlZ eej:                  d          5 Zej?                         Z ddd        ee ejB                  jE                  ej:                  d          d   d      Z#e#jI                         D ]9  Z%e#jM                  e%      Z' e(e'e'jS                         e'jU                                ; yy# 1 sw Y   xY w)    N)USE
DEF_GLOBALDEF_NONLOCAL	DEF_LOCAL	DEF_PARAM
DEF_IMPORT	DEF_BOUND	DEF_ANNOT	SCOPE_OFF
SCOPE_MASKFREELOCALGLOBAL_IMPLICITGLOBAL_EXPLICITCELL)symtableSymbolTableClassFunctionSymbolc                 J    	 t        j                  | ||      }t        ||      S N)	_symtabler   _newSymbolTable)codefilenamecompile_typetops       </home/uftp/.pyenv/versions/3.12.0/lib/python3.12/symtable.pyr   r      s*    
 

T8\
:C3))    c                       e Zd Zd Zd Zd Zy)SymbolTableFactoryc                 6    t        j                         | _        y r   )weakrefWeakValueDictionary_SymbolTableFactory__memoselfs    r   __init__zSymbolTableFactory.__init__   s    113r    c                     |j                   t        j                  k(  rt        ||      S |j                   t        j                  k(  rt        ||      S t        ||      S r   )typer   TYPE_FUNCTIONr   
TYPE_CLASSr   r   )r(   tabler   s      r   newzSymbolTableFactory.new   sM    ::000E8,,::---))5(++r    c                     ||f}| j                   j                  |d       }|!| j                  ||      x}| j                   |<   |S r   )r&   getr/   )r(   r.   r   keyobjs        r   __call__zSymbolTableFactory.__call__    sG    Xokkooc4(;%)XXeX%>>C$++c"
r    N)__name__
__module____qualname__r)   r/   r4    r    r   r"   r"      s    4,r    r"   c                   `    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zy)r   c                 .    || _         || _        i | _        y r   )_table	_filename_symbols)r(   	raw_tabler   s      r   r)   zSymbolTable.__init__,   s    !r    c                 ,   | j                   t        k(  rd}nd| j                   j                  z  }| j                  j                  dk(  rdj                  || j                        S dj                  || j                  j                  | j                        S )N z%s r   z<{0}SymbolTable for module {1}>z<{0}SymbolTable for {1} in {2}>)	__class__r   r5   r;   nameformatr<   )r(   kinds     r   __repr__zSymbolTable.__repr__1   s{    >>[(D4>>222D;;u$4;;D$..QQ4;;D<@KK<L<L<@NNL Lr    c                 6   	 | j                   j                  t        j                  k(  ry| j                   j                  t        j                  k(  ry| j                   j                  t        j
                  k(  ry| j                   j                  t        j                  k(  ry| j                   j                  t        j                  k(  ry| j                   j                  t        j                  k(  ry| j                   j                  t        j                  k(  ryy )Nmodulefunctionclass
annotationzTypeVar boundz
type aliasztype parameter)
r;   r+   r   TYPE_MODULEr,   r-   TYPE_ANNOTATIONTYPE_TYPE_VAR_BOUNDTYPE_TYPE_ALIASTYPE_TYPE_PARAMr'   s    r   get_typezSymbolTable.get_type>   s    	
 ;;y444;;y666;;y333;;y888;;y<<<";;y888;;y888# 9r    c                 0    	 | j                   j                  S r   )r;   idr'   s    r   get_idzSymbolTable.get_idT   s    	{{~~r    c                 0    	 | j                   j                  S r   )r;   rB   r'   s    r   get_namezSymbolTable.get_nameY   s    	 {{r    c                 0    	 | j                   j                  S r   )r;   linenor'   s    r   
get_linenozSymbolTable.get_linenob   s    	 {{!!!r    c                 d    	 t        | j                  j                  t        j                  k(        S r   )boolr;   r+   r   r,   r'   s    r   is_optimizedzSymbolTable.is_optimizedh   s)    	 DKK$$	(?(??@@r    c                 B    	 t        | j                  j                        S r   )rZ   r;   nestedr'   s    r   	is_nestedzSymbolTable.is_nestedn   s    	DKK&&''r    c                 B    	 t        | j                  j                        S r   )rZ   r;   childrenr'   s    r   has_childrenzSymbolTable.has_childrens   s    	DKK(())r    c                 L    	 | j                   j                  j                         S r   )r;   symbolskeysr'   s    r   get_identifierszSymbolTable.get_identifiersx   s     	{{""''))r    c                    	 | j                   j                  |      }|a| j                  j                  |   }| j	                  |      }| j                  j
                  dk(  }t        ||||      x}| j                   |<   |S )Nr   module_scope)r=   r1   r;   rc   _SymbolTable__check_childrenrB   r   )r(   rB   symflags
namespacesrh   s         r   lookupzSymbolTable.lookup}   s    	 mm%;KK''-E..t4J KK,,5L(.tUJ<H)J JC$--%
r    c                 h    	 | j                         D cg c]  }| j                  |       c}S c c}w r   )re   rm   )r(   idents     r   get_symbolszSymbolTable.get_symbols   s/    	 150D0D0FGuE"GGGs   /c                     | j                   j                  D cg c]'  }|j                  |k(  rt        || j                        ) c}S c c}w r   )r;   r`   rB   r   r<   )r(   rB   sts      r   __check_childrenzSymbolTable.__check_children   sB    ++..$77d?  DNN3 $ 	$ $s   ,Ac                 ~    	 | j                   j                  D cg c]  }t        || j                         c}S c c}w r   )r;   r`   r   r<   )r(   rr   s     r   get_childrenzSymbolTable.get_children   s>    	 ++..0  DNN3 0 	0 0s   :N)r5   r6   r7   r)   rE   rP   rS   rU   rX   r[   r^   ra   re   rm   rp   ri   ru   r8   r    r   r   r   *   sK    
L=,
 "A(
*
*
H$
0r    r   c                   D    e Zd ZdZdZdZdZdZd Zd Z	d Z
d Zd Zd Zy)r   Nc                 L     t         fd j                         D              S )Nc              3   `   K   | ]%  } j                   j                  |         r| ' y wr   )r;   rc   ).0ro   r(   	test_funcs     r   	<genexpr>z-Function.__idents_matching.<locals>.<genexpr>   s/      ?u!$++"5"5e"<=  ?s   +.)tuplere   )r(   rz   s   ``r   __idents_matchingzFunction.__idents_matching   s%     ?(<(<(> ? ? 	?r    c                 b    	 | j                   | j                  d       | _         | j                   S )Nc                     | t         z  S r   )r   xs    r   <lambda>z)Function.get_parameters.<locals>.<lambda>   s
    A	M r    )_Function__params_Function__idents_matchingr'   s    r   get_parameterszFunction.get_parameters   s.    	==  223IJDM}}r    c                     	 | j                   't        t        ffd}| j                  |      | _         | j                   S )Nc                 (    | t         z	  t        z  v S r   r   r   )r   locss    r   r   z%Function.get_locals.<locals>.<lambda>   s    qI~;D r    )_Function__localsr   r   r   )r(   testr   s     @r   
get_localszFunction.get_locals   s<    	== 4=DDD 2248DM}}r    c                     	 | j                   't        t        ffd}| j                  |      | _         | j                   S )Nc                 (    | t         z	  t        z  v S r   r   )r   globs    r   r   z&Function.get_globals.<locals>.<lambda>   s    a9n
:tC r    )_Function__globalsr   r   r   )r(   r   r   s     @r   get_globalszFunction.get_globals   s=    	>>!#_5DCD!33D9DN~~r    c                 b    	 | j                   | j                  d       | _         | j                   S )Nc                     | t         z  S r   )r   r   s    r   r   z(Function.get_nonlocals.<locals>.<lambda>   s    q<?O r    )_Function__nonlocalsr   r'   s    r   get_nonlocalszFunction.get_nonlocals   s3    	##556OPDr    c                 f    	 | j                   d }| j                  |      | _         | j                   S )Nc                 0    | t         z	  t        z  t        k(  S r   )r   r   r   r   s    r   r   z$Function.get_frees.<locals>.<lambda>   s    i: =$F r    )_Function__freesr   )r(   is_frees     r   	get_freeszFunction.get_frees   s2    	<<FG11':DL||r    )r5   r6   r7   r   r   r   r   r   r   r   r   r   r   r   r8   r    r   r   r      s;     HHGIK? r    r   c                       e Zd ZdZd Zy)r   Nc                     	 | j                   <i }| j                  j                  D ]  }d||j                  <    t	        |      | _         | j                   S )N   )_Class__methodsr;   r`   rB   r|   )r(   drr   s      r   get_methodszClass.get_methods   sQ    	>>!Akk** "''
"1XDN~~r    )r5   r6   r7   r   r   r8   r    r   r   r      s    Ir    r   c                   t    e Zd ZddddZd Zd Zd Zd Zd	 Zd
 Z	d Z
d Zd Zd Zd Zd Zd Zd Zd Zy)r   NFrg   c                n    || _         || _        |t        z	  t        z  | _        |xs d| _        || _        y )Nr8   )_Symbol__name_Symbol__flagsr   r   _Symbol__scope_Symbol__namespaces_Symbol__module_scope)r(   rB   rk   rl   rh   s        r   r)   zSymbol.__init__   s6    *j8&,"*r    c                 8    dj                  | j                        S )Nz<symbol {0!r}>)rC   r   r'   s    r   rE   zSymbol.__repr__   s    &&t{{33r    c                     	 | j                   S r   )r   r'   s    r   rU   zSymbol.get_name   s    	{{r    c                 P    	 t        | j                  t        j                  z        S r   )rZ   r   r   r   r'   s    r   is_referencedzSymbol.is_referenced   s!    	 DLL9==011r    c                 <    	 t        | j                  t        z        S r   )rZ   r   r   r'   s    r   is_parameterzSymbol.is_parameter       	DLL9,--r    c                     	 t        | j                  t        t        fv xs! | j                  xr | j
                  t        z        S r   )rZ   r   r   r   r   r   r	   r'   s    r   	is_globalzSymbol.is_global   sC    	DLL_o$FF J++Hy0HK 	Kr    c                 <    	 t        | j                  t        z        S r   )rZ   r   r   r'   s    r   is_nonlocalzSymbol.is_nonlocal  s    6DLL</00r    c                 <    	 t        | j                  t        k(        S r   )rZ   r   r   r'   s    r   is_declared_globalzSymbol.is_declared_global  s    	$DLLO344r    c                     	 t        | j                  t        t        fv xs! | j                  xr | j
                  t        z        S r   )rZ   r   r   r   r   r   r	   r'   s    r   is_localzSymbol.is_local  sB    	DLLUDM1 J++Hy0HK 	Kr    c                 <    	 t        | j                  t        z        S r   )rZ   r   r
   r'   s    r   is_annotatedzSymbol.is_annotated  r   r    c                 <    	 t        | j                  t        k(        S r   )rZ   r   r   r'   s    r   r   zSymbol.is_free  s    	 DLLD())r    c                 <    	 t        | j                  t        z        S r   )rZ   r   r   r'   s    r   is_importedzSymbol.is_imported  s    	 DLL:-..r    c                 <    	 t        | j                  t        z        S r   )rZ   r   r   r'   s    r   is_assignedzSymbol.is_assigned$  s    7DLL9,--r    c                 .    	 t        | j                        S r   )rZ   r   r'   s    r   is_namespacezSymbol.is_namespace(  s    		 D%%&&r    c                     	 | j                   S r   )r   r'   s    r   get_namespaceszSymbol.get_namespaces5  s    <   r    c                     	 t        | j                        dk(  rt        d      t        | j                        dkD  rt        d      | j                  d   S )Nr   z#name is not bound to any namespacesr   z$name is bound to multiple namespaces)lenr   
ValueErrorr'   s    r   get_namespacezSymbol.get_namespace9  sX    	
 t  !Q&BCC""#a'CDD$$Q''r    r   )r5   r6   r7   r)   rE   rU   r   r   r   r   r   r   r   r   r   r   r   r   r   r8   r    r   r   r      s[    +U +4
2.
K15
K.
*/.'!(r    r   __main__r   exec)+r   r   r   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r$   __all__r   r"   r   r   r   r   r   r5   ossysopenargvfreadsrcpathsplitmodre   ro   rm   infoprintr   r   r8   r    r   <module>r      s'   8 4 4 4 4 4 
D* $ %&p0 p0f3{ 3lK b( b(H z	chhqk	 affh
3chhqk215v
>C$$& :zz% dDMMOT%6%6%89:  s   D**D3