o
    he                     @   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dee d	ee d
ee fddZe jeddZe jeddZdd Zddee fddZe ddd Ze ddefddZdS )    N)CallableDictListOptionalProtocolSequenceTuple)fxc                   @   s*   e Zd Zdejdeejdf fddZdS )
CompiledFnargsreturn.c                 G   s   d S )N )selfr   r   r   U/var/www/html/ai/venv/lib/python3.10/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s"J 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_tags)r   r   r   r   r   r   r      s   

r   )debug)r   )experimentalc                 C   sR   t | tr'| tvrt  | tvrt|  | tvr#ddlm} || dt|  } | S )z#Expand backend strings to functions   )InvalidBackendr   )
isinstancestrr   _lazy_import_lazy_import_entry_pointexcr#   )r   r#   r   r   r   lookup_backend4   s   

r*   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>L   s    
z!list_backends.<locals>.<listcomp>)r'   setsortedr   itemsr/   r   r/   r   list_backendsC   s   
r5   c                  C   s<   ddl m}  ddlm} ||  ddlm} |d usJ d S )Nr"   )backends)import_submodule)dynamo_minifier_backend) r6   utilsr7   repro.after_dynamor8   )r6   r7   r8   r   r   r   r'   T   s
   r'   backend_namec                    s   ddl m} d }d}tjdk r,| } fdd||dD }t|dkr+|d  }n||d} |jv r<|   }|d urO tt	 vrQt
| d	 d S d S d S )
Nr   )entry_pointstorch_dynamo_backends)   
   c                    s   g | ]	}|j  kr|qS r   r$   )r-   epr<   r   r   r1   h   s    z,_lazy_import_entry_point.<locals>.<listcomp>r   )group)r   r   )importlib.metadatar=   sysversion_infogetlenloadnamesr5   r   r   )r<   r=   r   
group_namebackend_epsepsr   rB   r   r(   `   s   


r(   )NNr   )r+   )r   rE   typingr   r   r   r   r   r   r   r   r	   r
   GraphModuler   
CompilerFndictr   r&   __annotations__r   r   register_debug_backendregister_experimental_backendr*   r5   	lru_cacher'   r(   r   r   r   r   <module>   s8   
 $

