U
    d*                     @   sL   d dl Z 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	   Zvisitortree r   H/tmp/pip-unpacked-wheel-ua33x9lu/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"   t jd d dk r|jS |jS d S N   )      )sysversion_infonvaluer   r!   r   r   r   _grab_node_int-   s    z'_ExtractModuleReferences._grab_node_intc                 C   s"   t jd d dk r|jS |jS d S r'   )r+   r,   sr.   r/   r   r   r   _grab_node_str3   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 ]}|| | qqzt|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   r)   keywordsfromlist   r   T.r   )maxsplitr$   )hasattrfuncr3   r2   argslenZeltsappendr5   argr.   r0   r   rsplitr   	Exception)
r   r!   r    r6   r   vkeywordZtop_namer"   er   r   r   
visit_Call9   s@    








z#_ExtractModuleReferences.visit_Call)__name__
__module____qualname____doc__classmethodstrr   r   r   r   r   intr   r#   r&   r0   r2   rE   __classcell__r   r   r   r   r      s   $r   )r   r+   typingr   r   r   Z
_importlibr   ZNodeVisitorr   r   Zfind_files_source_depends_onr   r   r   r   <module>   s
   ^