o
    ߗid                     @   sF  U d dl Z d dlZd dlZd dlm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 eeZG dd de
Zeejeej gef Zi Zeee	e f ed< i 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d Z"dS )    N)
EntryPoint)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   ]/home/ubuntu/transcripts/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   	_BACKENDS_COMPILER_FNSr   compiler_fnnametagsc                 C   sj   | du rt jt||dS t| sJ |p| j}|tvs"J d| | tvr*dt|< | 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   r   tuple_tags)r   r   r   r   r   r   r      s   

r   )debug)r   )experimentalc                 C   sb   t | tr/| tvrt  | tvrddlm} || d| tvr+t|  }t| | d t|  } | S )z#Expand backend strings to functions   )InvalidBackendr   )r   r   )	
isinstancestrr   _lazy_importexcr%   r   r   load)r   r%   entry_pointr   r   r   lookup_backend>   s   

r-   r"   r#   r   c                    s0   t   t pd  fddt D }t|S )za
    Return valid strings that can be passed to:

        torch.compile(..., backend="name")
    r   c                    s(   g | ]}|t vs t | js|qS r   )r   intersectionr!   .0r   exclude_tagsr   r   
<listcomp>X   s    z!list_backends.<locals>.<listcomp>)r)   setr   keyssorted)r3   backendsr   r2   r   list_backendsO   s   
r9   c                  C   sB   ddl m}  ddlm} ||  ddlm} |d usJ t  d S )Nr$   )r8   )import_submodule)dynamo_minifier_backend) r8   utilsr:   repro.after_dynamor;   _discover_entrypoint_backends)r8   r:   r;   r   r   r   r)   a   s   
r)   c                     s|   ddl m}  d}tjdk r"|   | v r | ng  dd  D  n| |d  fdd jD   D ]} | t|< q3d S )	Nr   )entry_pointstorch_dynamo_backends)   
   c                 S   s   i | ]}|j |qS r   r&   )r1   epr   r   r   
<dictcomp>x   s    z1_discover_entrypoint_backends.<locals>.<dictcomp>)groupc                    s   i | ]}| | qS r   r   r0   epsr   r   rE   {   s    )importlib.metadatar@   sysversion_infonamesr   )r@   
group_namebackend_namer   rG   r   r?   o   s   

r?   )NNr   )r.   )#r   loggingrJ   rI   r   typingr   r   r   r   r   r   r	   r   r
   	getLoggerr   logr   GraphModuler   
CompilerFnr   r(   __annotations__r   r   r   register_debug_backendregister_experimental_backendr-   r9   	lru_cacher)   r?   r   r   r   r   <module>   s@   
$


