a
    d                     @   s  U d dl Z d dlZd dlmZmZmZmZmZmZm	Z	 d dl
Z
d dl
mZ G dd deZeejee
j gef Ze Zeeef ed< dee ee ee dd	d
Ze jeddZe jeddZdd ZdddZe ddd Ze dedddZdS )    N)CallableDictListOptionalProtocolSequenceTuple)fxc                   @   s(   e Zd Zejeejdf dddZdS )
CompiledFn.)argsreturnc                 G   s   d S )N )selfr   r   r   h/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/torch/_dynamo/backends/registry.py__call__
   s    zCompiledFn.__call__N)__name__
__module____qualname__torchTensorr   r   r   r   r   r   r
   	   s   r
   	_BACKENDSr   compiler_fnnametagsc                 C   sZ   | du rt jt||dS t| s$J |p,| j}|tvsDJ d| | t|< t|| _| S )a  
    Decorator to add a given compiler to the registry to allow calling
    `torch.compile` with string shorthand.  Note: for projects not
    imported by default, it might be easier to pass a function directly
    as a backend and not use a string.

    Args:
        compiler_fn: Callable taking a FX graph and fake tensor inputs
        name: Optional name, defaults to `compiler_fn.__name__`
        tags: Optional set of string tags to categorize backend with
    N)r   r   zduplicate name: )	functoolspartialregister_backendcallabler   r   tuple_tagsr   r   r   r   r      s    

r   )debug)r   )experimentalc                 C   s4   t | tr0| tvrt  | tvr(t|  t|  } | S )z#Expand backend strings to functions)
isinstancestrr   _lazy_import_lazy_import_entry_point)r   r   r   r   lookup_backend4   s    
r'   r!   r"   c                    s,   t   t pd t fddt D S )za
    Return valid strings that can be passed to:

        torch.compile(..., backend="name")
    r   c                    s    g | ]\}}  |js|qS r   )intersectionr    ).0r   backendexclude_tagsr   r   
<listcomp>H   s   z!list_backends.<locals>.<listcomp>)r%   setsortedr   itemsr,   r   r,   r   list_backends?   s    
r2   c                  C   s<   ddl m}  ddlm} ||  ddlm} |d us8J d S )N   )backends)import_submodule)dynamo_minifier_backend) r4   utilsr5   Zdebug_utilsr6   )r4   r5   r6   r   r   r   r%   P   s
    r%   backend_namec                    s   ddl m} d }d}tjdk rT| } fdd|| D }t|dkrt|d  }n ||d} |jv rt|   }|d ur tt vrt	| d d S )	Nr   )entry_pointsZtorch_dynamo_backends)   
   c                    s   g | ]}|j  kr|qS r   )r   )r*   epr9   r   r   r.   d       z,_lazy_import_entry_point.<locals>.<listcomp>)group)r   r   )
importlib.metadatar;   sysversion_infolenloadnamesr2   r   r   )r:   r;   r   Z
group_nameZbackend_epsZepsr   r9   r   r&   \   s    


r&   )NNr   )r(   )r   rB   typingr   r   r   r   r   r   r   r   r	   r
   ZGraphModuler   Z
CompilerFndictr   r$   __annotations__r   r   Zregister_debug_backendZregister_experimental_backendr'   r2   	lru_cacher%   r&   r   r   r   r   <module>   s2   
$   

