a
    d                     @   s  d dl Z d dlmZ d dl mZ d dlmZ d dlZd dlmZ d dl	m
Z
mZ ddlmZmZ e ZG d	d
 d
ZG dd dZdd ZG dd dZG dd dZG dd dZe  edeZedeZedeZedeZedeZedeZG dd dZe ZdS )    N)contextmanager)chain)local)IndentedBuffer)inplace_methodsmagic_methods   )	sympy_strsympy_symbolc                   @   s0   e Zd ZdZdd Zdd Zdd Zdd	 Zd
S )Virtualizedz
    A global variable that redirects via thread local variable

    This allows us to swap in different op implementations in codegen.
    c                 C   s   d| | _ || _d S )NZ__torchinductor_)_key_default)selfZvnamedefault r   d/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/torch/_inductor/virtualized.py__init__   s    zVirtualized.__init__c                    s.      ttj| t fdd}| S )Nc                	   3   s&   zd V  W    n   0 d S N)_set_handlerr   Zpriorr   r   r   ctx    s    z%Virtualized._set_handler.<locals>.ctx)_get_handlersetattrthreadlocalr   r   )r   valuer   r   r   r   r      s
    zVirtualized._set_handlerc                 C   s.   zt t| jW S  ty(   |   Y S 0 d S r   )getattrr   r   AttributeErrorr   r   r   r   r   r   )   s    zVirtualized._get_handlerc                 C   s   t |  |S r   )r   r   )r   namer   r   r   __getattr__/   s    zVirtualized.__getattr__N)__name__
__module____qualname____doc__r   r   r   r   r   r   r   r   r      s
   r   c                   @   s   e Zd ZdS )NullHandlerN)r    r!   r"   r   r   r   r   r$   3   s   r$   c                 C   s   t | tjrt| S t| S r   )
isinstancesympyExprr	   str)ar   r   r   _arg_str7   s    r*   c                   @   s8   e Zd Zdd Zedd Zedd Zedd Zd	S )
MockHandlerc                    s    dkrdS  fdd}|S )Nr   r+   c                     s<   dd | D }| dd | D    dd| dS )Nc                 S   s   g | ]}t |qS r   )r*   ).0r)   r   r   r   
<listcomp>C       z:MockHandler.__getattr__.<locals>.inner.<locals>.<listcomp>c                 s   s    | ]\}}| d | V  qdS )=Nr   )r,   kvr   r   r   	<genexpr>D   r.   z9MockHandler.__getattr__.<locals>.inner.<locals>.<genexpr>(, ))extenditemsjoin)argskwargsZfargsr   r   r   innerB   s    z&MockHandler.__getattr__.<locals>.innerr   r   r   r<   r   r;   r   r   >   s    zMockHandler.__getattr__c                 C   s   d|  d|  d| dS )Nzmasked(r4   r5   r   )maskbodyotherr   r   r   maskedI   s    zMockHandler.maskedc                 C   s   t dt|  dS )Nr3   r5   )r
   r(   )Z	index_varr   r   r   indirect_indexingM   s    zMockHandler.indirect_indexingc                 C   s8   dd }t t t D ]\}}t| ||| qd S )Nc                    s   t  fdd}|S )Nc                     s
    j |  S r   )format)r9   format_stringr   r   r<   T   s    z:MockHandler._init_cls.<locals>.make_handler.<locals>.inner)staticmethod)rE   r<   r   rD   r   make_handlerS   s    z+MockHandler._init_cls.<locals>.make_handler)r   r   r7   r   r   )clsrG   r   rE   r   r   r   	_init_clsQ   s
    zMockHandler._init_clsN)	r    r!   r"   r   rF   rA   rB   classmethodrI   r   r   r   r   r+   =   s   

r+   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )KernelFormatterHandlerc                 C   s   || _ t | _t | _d S r   )parent_handlerr   output	itertoolscountvar_counter)r   rL   r   r   r   r   a   s    zKernelFormatterHandler.__init__c                    s    fdd}|S )Nc                     sL   t j | i |} dkr"|S dtj }j| d|  |S )NrB   tmpz = )r   rL   nextrP   rM   	writeline)r9   r:   linevarnamer   r   r   r   r<   g   s    z1KernelFormatterHandler.__getattr__.<locals>.innerr   r=   r   rV   r   r   f   s    	z"KernelFormatterHandler.__getattr__c                 C   s   | j d|  | j  S )Nzreturn )rM   rS   getvalue)r   resultr   r   r   rW   r   s    zKernelFormatterHandler.getvalueN)r    r!   r"   r   r   rW   r   r   r   r   rK   `   s   rK   c                   @   s   e Zd Zdd Zdd ZdS )WrapperHandlerc                 C   s
   || _ d S r   )_inner)r   r<   r   r   r   r   x   s    zWrapperHandler.__init__c                 C   s   t | j|S r   )r   rZ   )r   itemr   r   r   r   {   s    zWrapperHandler.__getattr__N)r    r!   r"   r   r   r   r   r   r   rY   w   s   rY   opsgraph	fake_modekerneldebuginterpreterc                   @   s   e Zd ZeZeZeZejZej	Z
ejZejZejZejZejZeedddZedd Zedd Zedd	 Zed
d Zedd ZdS )_V)returnc                 C   s   t  S )z9The operator handler specific to the current codegen task)r\   r   r   r   r   r   r\      s    z_V.opsc                 C   s   t  S z#The graph currently being generated)_graphr   r   r   r   r   r]      s    z_V.graphc                 C   s   t  S rd   )
_fake_moder   r   r   r   r   r^      s    z_V.fake_modec                 C   s   t  S )z$The kernel currently being generated)_kernelr   r   r   r   r   r_      s    z	_V.kernelc                 C   s   t  S r   )_debugr   r   r   r   r   r`      s    z_V.debugc                 C   s   t  S r   )_interpreterr   r   r   r   r   ra      s    z_V.interpreterN)r    r!   r"   r+   rK   rY   r\   r   Zset_ops_handlerr   Zget_ops_handlerre   Zset_graph_handlerrf   Zset_fake_moderg   Zset_kernel_handlerrh   Zset_debug_handlerri   Zset_interpreter_handlerpropertyr]   r^   r_   r`   ra   r   r   r   r   rb      s,   



rb   )rN   
contextlibr   r   	threadingr   r&   Ztorch._inductor.utilsr   Ztorch.fx.graphr   r   utilsr	   r
   r   r   r$   r*   r+   rK   rY   rI   r\   re   rf   rg   rh   ri   rb   Vr   r   r   r   <module>   s.   "#





*