a
    ¢º”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eeeeeee f  dœdd„ƒZ	‡ fdd„Z
eeedœ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   úR/var/www/auris/lib/python3.9/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Úlevelr   c                 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rDd| 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   s   |j S r	   ©Úvalue©r   r    r   r   r   Ú_grab_node_int-   s    z'_ExtractModuleReferences._grab_node_intc                 C   s   |j S r	   r&   r(   r   r   r   Ú_grab_node_str0   s    z'_ExtractModuleReferences._grab_node_strc                    sž  t |jdƒrš|jjdkršzdˆ  |jd ¡}g }d}t|jƒdkrh| ‡ fdd„|jd jD ƒ¡ n<t |dƒr¤|jD ]*}|j	dkrx| ‡ fd	d„|j
jD ƒ¡ qxt|jƒd
krÄˆ  |jd
 ¡}n,t |dƒrð|jD ]}|j	dkrÔˆ  |j
¡}qÔ|g kr@dˆ j|d f< |jdddd }||kr€ˆ  ||¡}dˆ j|d f< n@ˆ  ||¡}|D ].}|dkrndˆ j||f< ndˆ j|d f< qPW n ty˜   Y d S 0 d S )NÚidÚ
__import__r   é   c                 3   s   | ]}ˆ   |¡V  qd S r	   ©r*   ©Ú.0Úv©r   r   r   Ú	<genexpr>;   ó    z6_ExtractModuleReferences.visit_Call.<locals>.<genexpr>ÚkeywordsÚfromlistc                 3   s   | ]}ˆ   |¡V  qd S r	   r.   r/   r2   r   r   r3   ?   s   é   r   TÚ.r   )Úmaxsplitr#   )ÚhasattrÚfuncr+   r*   ÚargsÚlenÚextendÚeltsr5   Úargr'   r)   r   Úrsplitr   Ú	Exception)r   r    r   r6   r   ÚkeywordZtop_namer!   r   r2   r   Ú
visit_Call3   s@    "


ÿ






z#_ExtractModuleReferences.visit_Call)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚclassmethodÚstrr   Útupler   r   r   Úintr   r"   r%   r)   r*   rD   Ú__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