U
    ªÊ¹je  ã                   @   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ee 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   ú^/var/www/html/bwave/python/venv/lib/python3.8/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krt jt||d�S t| ƒs$t‚|p,| j}|tksDt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ÚcallableÚAssertionErrorr   r   ÚtupleÚ_tagsr   r   r   r   r      s    

r   )Údebug)r   )Úexperimentalc                 C   sR   t | tƒrN| tkrtƒ  | tkr(t| ƒ | tkrFd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©Zexclude_tagsr   r   Ú
<listcomp>L   s   þz!list_backends.<locals>.<listcomp>)r)   ÚsetÚsortedr   Úitemsr1   r   r1   r   Úlist_backendsC   s    
þÿr6   c                  C   s<   ddl m}  ddlm} || ƒ ddlm} |d k	s8t‚d S )Nr$   )Úbackends)Úimport_submodule)Údynamo_minifier_backend)Ú r7   Úutilsr8   Zrepro.after_dynamor9   r   )r7   r8   r9   r   r   r   r)   T   s
    r)   ©Úbackend_namec                    sž   ddl m} d }d}tjdk rX|ƒ }‡ fdd„| |d¡D ƒ}t|ƒdkrx|d  ¡ }n ||d�}ˆ |jkrx|ˆ   ¡ }|d k	ršˆ tt	ƒ ƒkršt
|ˆ d	� d S )
Nr   )Úentry_pointsZtorch_dynamo_backends)é   é
   c                    s   g | ]}|j ˆ kr|‘qS r   r&   )r/   Úepr<   r   r   r2   h   s     
 z,_lazy_import_entry_point.<locals>.<listcomp>r   )Úgroup)r   r   )Úimportlib.metadatar>   ÚsysÚversion_infoÚgetÚlenÚloadÚnamesr6   r    r   )r=   r>   r   Ú
group_nameZbackend_epsÚepsr   r<   r   r*   `   s    


r*   )NNr   )r-   )r   rD   Ú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,   r6   Ú	lru_cacher)   r*   r   r   r   r   Ú<module>   s6    $   ýý ÿ
