
    קgd                     ,   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j        e          Z G 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Z e j        ed          Z e j        ed          Zd Zddee         fdZ e j         d          d             Z! e j         d          d             Z"dS )    N)
EntryPoint)CallableDictListOptionalProtocolSequenceTuple)fxc                   B    e Zd Zdej        deej        df         fdZdS )
CompiledFnargsreturn.c                     d S )N )selfr   s     [/var/www/html/ai-engine/env/lib/python3.11/site-packages/torch/_dynamo/backends/registry.py__call__zCompiledFn.__call__   s        N)__name__
__module____qualname__torchTensorr
   r   r   r   r   r   r      sD        el uU\35F/G      r   r   	_BACKENDS_COMPILER_FNSr   compiler_fnnametagsc                    | t          j        t          ||          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   s      r   r#   r#      s       !14HHHHK     ';'D}$$$&?&?&?$$$)##	$%M$dKr   )debug)r   )experimentalc                     t          | t                    rx| t          vrt                       | t          vrddlm}  ||           | t          vr0t          |          }t          |                                |            t          |          } | S )z#Expand backend strings to functions   )InvalidBackendr   )r   r   )	
isinstancestrr   _lazy_importexcr+   r   r#   load)r   r+   entry_points      r   lookup_backendr3   >   s    +s## 1i''NNNi'',,,,,, .k2222m++#K0K)9)9););+NNNN#K0r   r'   r(   r   c                      t                       t           pd            fdt                                          D             }t	          |          S )za
    Return valid strings that can be passed to:

        torch.compile(..., backend="name")
    r   c                 p    g | ]2}|t           vs%                    t           |         j                  0|3S r   )r   intersectionr&   ).0r   exclude_tagss     r   
<listcomp>z!list_backends.<locals>.<listcomp>X   sL       }$$((t)<)BCC % 	$$$r   )r/   setr   keyssorted)r9   backendss   ` r   list_backendsr?   O   sb     NNN|)r**L   NN$$  H (r   c                  d    ddl m}  ddlm}  ||            ddlm} |J t                       d S )Nr*   )r>   )import_submodule)dynamo_minifier_backend) r>   utilsrA   repro.after_dynamorB   _discover_entrypoint_backends)r>   rA   rB   s      r   r/   r/   a   sg    ((((((X<<<<<<"...!#####r   c                      ddl m}  d}t          j        dk     r% |             |v r|         ng d D             n | |          fdj        D             D ]}|         t
          |<   d S )Nr   )entry_pointstorch_dynamo_backends)   
   c                     i | ]
}|j         |S r   r,   )r8   eps     r   
<dictcomp>z1_discover_entrypoint_backends.<locals>.<dictcomp>x   s    )))rrw)))r   )groupc                 "    i | ]}||         S r   r   )r8   r   epss     r   rN   z1_discover_entrypoint_backends.<locals>.<dictcomp>{   s    5554tSY555r   )importlib.metadatarH   sysversion_infonamesr   )rH   
group_namebackend_namerQ   s      @r   rF   rF   o   s     0/////(J
'!!lnn!+s!2!2c*oo))S)))l,,,555539555 4 4"%l"3	,4 4r   )NNr   )r4   )#r!   loggingrS   rR   r   typingr   r   r   r   r   r	   r
   r   r   	getLoggerr   logr   GraphModuler   
CompilerFnr   r.   __annotations__r   r#   r"   register_debug_backendregister_experimental_backendr3   r?   	lru_cacher/   rF   r   r   r   <module>rb      s5         



 ) ) ) ) ) ) L L L L L L L L L L L L L L L L L L        g!!       
 r~tEL'9:JFG
-/	4Xj))* / / /')tCO$ ) ) ) )- *%
3- 3-   : +*+;*MMM  1	 1,! ! ! 
  " T#Y    $ T
$ 
$ 
$ T4 4 4 4 4r   