U
    •Ê¹js  ã                   @   sD   d dl Z d dlmZmZmZ ddlmZ G dd„ de jƒZej	Z
dS )é    N)ÚListÚOptionalÚTupleé   )Ú_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   úc/var/www/html/bwave/python/venv/lib/python3.8/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 k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_str/   s    z'_ExtractModuleReferences._grab_node_strc           
   
   C   s¶  t |jdƒ�r²|jjdk�r²�zh|  |jd ¡}g }d}t|jƒdkrj|jd jD ]}| |  |¡¡ qRn>t |dƒr¨|jD ],}|j	dkrz|j
jD ]}| |  |¡¡ q�qzt|jƒdkrÈ|  |jd ¡}n,t |dƒrô|jD ]}|j	dkrØ|  |j
¡}qØ|g k�rDd	| j|d f< |jd
dd�d }||k�r„|  ||¡}d	| j|d f< n@|  ||¡}|D ].}|dk�rrd	| j||f< nd	| j|d f< �qTW n* tk
�r° }	 z
W Y ¢d S d }	~	X Y nX d S )NÚidÚ
__import__r   é   ÚkeywordsÚfromlisté   r   TÚ.r   )Úmaxsplitr%   )ÚhasattrÚfuncr-   r,   ÚargsÚlenÚeltsÚappendr0   Úargr)   r+   r   Úrsplitr   Ú	Exception)
r   r"   r!   r1   r   ÚvÚkeywordZtop_namer#   Úer   r   r   Ú
visit_Call2   s@    








z#_ExtractModuleReferences.visit_Call)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚclassmethodÚstrr   r   r   r   r   Úintr   r$   r'   r+   r,   rA   Ú__classcell__r   r   r   r   r      s   $r   )r   Útypingr   r   r   Z
_importlibr   ÚNodeVisitorr   r   Zfind_files_source_depends_onr   r   r   r   Ú<module>   s   X