o
    wZŽh‹  ã                   @   s<   d dl Z d dlmZ ddlmZ G dd„ de jƒZejZdS )é    N)ÚOptionalé   )Ú_resolve_namec                       sˆ   e Zd ZdZedededeeeee f  fdd„ƒZ	‡ fdd„Z
d	ed
edefdd„Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Z‡  ZS )Ú_ExtractModuleReferenceszR
    Extract the list of global variables a block of code will read and write
    ÚsrcÚpackageÚreturnc                 C   s*   | |ƒ}t  |¡}| |¡ t|j ¡ ƒS ©N)ÚastÚparseÚvisitÚlistÚ
referencesÚkeys)Úclsr   r   ÚvisitorÚtree© r   úS/var/www/auris/lib/python3.10/site-packages/torch/package/find_file_dependencies.pyÚrun   s   

z_ExtractModuleReferences.runc                    s   t ƒ  ¡  || _i | _d S r	   )ÚsuperÚ__init__r   r   )Úselfr   ©Ú	__class__r   r   r      s   

z!_ExtractModuleReferences.__init__Úmodule_nameÚlevelc                 C   s   |dkrt || j|ƒS |S )Nr   )r   r   )r   r   r   r   r   r   Ú
_absmodule   s   z#_ExtractModuleReferences._absmodulec                 C   s    |j D ]
}d| j|jd f< qd S )NT)Únamesr   Úname)r   ÚnodeÚaliasr   r   r   Úvisit_Import   s   
ÿz%_ExtractModuleReferences.visit_Importc                 C   sX   |   |j|jd u rdn|j¡}|jD ]}|jdkr"d| j||jf< qd| j|d f< qd S )Nr   Ú*T)r   Úmoduler   r   r   r   )r   r    r   r!   r   r   r   Úvisit_ImportFrom"   s   

ùz)_ExtractModuleReferences.visit_ImportFromc                 C   ó   |j S r	   ©Úvalue©r   r    r   r   r   Ú_grab_node_int-   ó   z'_ExtractModuleReferences._grab_node_intc                 C   r&   r	   r'   r)   r   r   r   Ú_grab_node_str0   r+   z'_ExtractModuleReferences._grab_node_strc                    sž  t |jdƒrË|jjdkrÍz´ˆ  |jd ¡}g }d}t|jƒdkr1| ‡ fdd„|jd jD ƒ¡ nt |dƒrO|jD ]}|j	dkrN| ‡ fd	d„|j
jD ƒ¡ q9t|jƒd
kr_ˆ  |jd
 ¡}nt |dƒru|jD ]}|j	dkrtˆ  |j
¡}qg|g kr dˆ j|d f< |jdddd }||krˆ  ||¡}dˆ j|d f< W d S W d S ˆ  ||¡}|D ]}|dkr¶dˆ j||f< q¨dˆ j|d f< q¨W d S  tyÊ   Y d S w d S d S )NÚidÚ
__import__r   é   c                 3   ó    | ]}ˆ   |¡V  qd S r	   ©r,   ©Ú.0Úv©r   r   r   Ú	<genexpr>;   s   € z6_ExtractModuleReferences.visit_Call.<locals>.<genexpr>ÚkeywordsÚfromlistc                 3   r0   r	   r1   r2   r5   r   r   r6   ?   s   € 

ÿé   r   TÚ.r   )Úmaxsplitr#   )ÚhasattrÚfuncr-   r,   ÚargsÚlenÚextendÚeltsr7   Úargr(   r*   r   Úrsplitr   Ú	Exception)r   r    r   r8   r   ÚkeywordZtop_namer!   r   r5   r   Ú
visit_Call3   sL   "


ÿ€


€þùÿÙz#_ExtractModuleReferences.visit_Call)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚclassmethodÚstrr   Útupler   r   r   Úintr   r"   r%   r*   r,   rF   Ú__classcell__r   r   r   r   r      s    (r   )	r
   Útypingr   Z
_importlibr   ÚNodeVisitorr   r   Zfind_files_source_depends_onr   r   r   r   Ú<module>   s
   
X