o
    hs                     @   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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   Z/var/www/html/ai/venv/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_str/   r-   z'_ExtractModuleReferences._grab_node_strc           
   
   C   s  t |jdr|jjdkrz| |jd }g }d}t|jdkr2|jd jD ]
}|| | q&nt |drQ|jD ]}|j	dkrP|j
jD ]
}|| | qEq:t|jdkra| |jd }nt |drw|jD ]}|j	dkrv| |j
}qi|g krd	| j|d f< |jd
ddd }||kr| ||}d	| j|d f< W d S W d S | ||}|D ]}|dkrd	| j||f< qd	| j|d f< qW d S  ty }	 zW Y d }	~	d S d }	~	ww d S d S )Nid
__import__r      keywordsfromlist   r   T.r   )maxsplitr%   )hasattrfuncr/   r.   argsleneltsappendr2   argr*   r,   r   rsplitr   	Exception)
r   r"   r!   r3   r   vkeywordtop_namer#   er   r   r   
visit_Call2   sP   





z#_ExtractModuleReferences.visit_Call)__name__
__module____qualname____doc__classmethodstrr   r   r   r   r   intr   r$   r'   r,   r.   rD   __classcell__r   r   r   r   r      s    (r   )r   typingr   r   r   
_importlibr   NodeVisitorr   r   find_files_source_depends_onr   r   r   r   <module>   s
    
X