o
    
۾iy
                     @   s0  d dl Z d dlmZmZ d dlmZ d dlmZ d dlm	Z	m
Z
 d dlmZ dejded	efd
dZdejde	d	efddZdeej de	d	ejdB fddZdeej de	d	ejfddZdejded	ejdB fddZdejded	ejfddZde	e
B dejd	eej fddZdejd	ejfddZdS )    N)IterableIterator)fx)auto_functionalized)
OpOverloadOpOverloadPacket)Targetnodetargetreturnc                 C   s   t | jdko
| j|kS )Ncall_function)boolopr
   )r	   r
    r   T/home/ubuntu/.local/lib/python3.10/site-packages/vllm/compilation/passes/fx_utils.pyis_func      r   r   c                 C   s   t | to| jd |kS Nr   r   r   args)r	   r   r   r   r   is_auto_func   r   r   nodesc                 C   s.   | D ]}t |tr|jd |kr|  S qd S r   r   r   r   r	   r   r   r   find_auto_fn_maybe   s
   r   c                 C   *   t | |}|d usJ d| d|  |S )NzCould not find z
 in nodes )r   r   r   r   r   find_auto_fn      
r   idxc                 C   s2   | j D ]}t|tjr|jd |kr|  S qd S N   )usersr   operatorgetitemr   )r	   r   userr   r   r   find_getitem_maybe&   s
   
r$   c                 C   r   )NzCould not find getitem z	 in node )r$   )r	   r   retr   r   r   find_getitem.   r   r&   graphc                 c   s    t | tr|  D ]}t| |}t||E d H  q
d S t | ts#J |jd| dE d H  |jdtdD ]}|jd | kr@|V  q4d S )Nr   )r   r
   r   )	
isinstancer   	overloadsgetattrfind_op_nodesr   
find_nodesr   r   )r   r'   overloadoverload_opnr   r   r   r+   6   s   

r+   c                 C   s    t | jdks	J tt| jS r   )lenr    nextiter)r	   r   r   r   get_only_userK   s   r3   )r!   collections.abcr   r   torchr   *torch._higher_order_ops.auto_functionalizer   
torch._opsr   r   torch.fx.noder   Noder   r   r   r   r   intr$   r&   Graphr+   r3   r   r   r   r   <module>   s(   "
