§
    ž²Åjá  ã                   ó,  — 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     úPC:\Projects\Historical\venv\Lib\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   € € € € € ð˜eœlð ¨u°U´\À3Ð5FÔ/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Ð'Ð'Ý‰NŒNˆNØ�iÐ'Ð'Ø,Ð,Ð,Ð,Ð,Ð,à �. kÐ2Ñ2Ô2Ð2à�mÐ+Ð+Ý# KÔ0ˆKÝ¨×)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   ø€ õ �N„N€NÝ�|Ð) rÑ*Ô*€Lðð ð ð å—N’NÑ$Ô$ðñ ô €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   € Ð)Ð)Ð)˜rˆrŒw˜Ð)Ð)Ð)r   )Úgroupc                 ó"   •— i | ]}|‰|         “ŒS r   r   )r8   r   Úepss     €r   rN   z1_discover_entrypoint_backends.<locals>.<dictcomp>{   s   ø€ Ð5Ð5Ð5 4ˆt�S˜”YÐ5Ð5Ð5r   )Úimportlib.metadatarH   ÚsysÚversion_infoÚnamesr   )rH   Ú
group_nameÚbackend_namerQ   s      @r   rF   rF   o   s¹   ø€ ð 0Ð/Ð/Ð/Ð/Ð/à(€JÝ
Ô˜'Ò!Ð!Øˆl‰nŒnˆØ!+¨sÐ!2Ð!2ˆc�*Œoˆo¸ˆØ)Ð) SÐ)Ñ)Ô)ˆˆàˆl Ð,Ñ,Ô,ˆØ5Ð5Ð5Ð5¨3¬9Ð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”~ t¨E¬LÔ'9Ð:¸JÐFÔG€
à-/€	ˆ4��X˜jÔ)Ð)Ô*Ð /Ð /Ñ /Ø')€ˆt�C˜�OÔ$Ð )Ð )Ñ )ð )-ØØðð Ø˜*Ô%ðà
�3Œ-ðð �3Œ-ðð ð ð ð: +˜Ô*Ð+;À*ÐMÑMÔMÐ Ø 1 	Ô 1ØÐ,ð!ñ !ô !Ð ð
ð ð ð"ð ¸TÀ#¼Yð ð ð ð ð$ €Ô�TÑÔð
$ð 
$ñ Ôð
$ð €Ô�TÑÔð4ð 4ñ Ôð4ð 4ð 4r   