§
    ž²ÅjÑ  ã                   óø   — d dl Z d dlZd dlZd dlmZ d dlZd dlmZ d dlm	Z	 d dl
mZmZmZ d dlmZmZ d dlmZ  ej        e¦  «        Z G d„ d	¦  «        Zd
efd„Zd„ Zd„ Zd
ej        fd„Zd
ej        fd„ZdS )é    N)Úpatch©Údisable)ÚTensorifyScalarRestartAnalysis)ÚcountersÚdefakeÚflatten_graph_inputs)Úaot_module_simplifiedÚSerializableAOTDispatchCompiler)Ú_disable_current_modesc                   ó6   — e Zd Zdd„Zdej        j        fd„ZdS )ÚAotAutogradÚreturnNc                 ó"   — d| _         || _        d S )NÚcompiler_fn)Ú__name__Úkwargs)Úselfr   s     úNC:\Projects\Historical\venv\Lib\site-packages\torch/_dynamo/backends/common.pyÚ__init__zAotAutograd.__init__   s   € Ø%ˆŒØˆŒˆˆó    Úgmc                 ó  — |rt                                d|¦  «         t          d„ |D ¦   «         ¦  «        rt          ||| ¦  «        S t	          | j                             d¦  «        ¦  «        r | j        d         ¦   «         | j        d<   t          d         dxx         dz  cc<   d}|r7t                                d¦  «         t          d         d	xx         dz  cc<   |S d
„ }| j                             d¦  «        p| j        d         }t          |t          ¦  «        r ||j        ¦  «        |_        n ||¦  «        }|| j        d<   | j                             d¦  «        p| j        d         | j        d<   ddlm} ddlm} | j                             dd ¦  «        |k    rt!          dd¦  «        }	nt#          j        ¦   «         }		  |¦   «         5  |	5  t'          ||fi | j        ¤Ž}
t          d         dxx         dz  cc<   t)          |
¦  «        cd d d ¦  «         cd d d ¦  «         S # 1 swxY w Y   d d d ¦  «         d S # 1 swxY w Y   d S # t*          $ r ‚ t,          $ r t          d         d	xx         dz  cc<   ‚ w xY w)Nz3aot_autograd-based backend ignoring extra kwargs %sc              3   óZ   K  — | ]&}t          |t          t          t          f¦  «        V — Œ'd S ©N)Ú
isinstanceÚlistÚtupleÚdict)Ú.0Úxs     r   ú	<genexpr>z'AotAutograd.__call__.<locals>.<genexpr>   s3   è è € ÐJÐJ°a�z˜!�d¥E­4Ð0Ñ1Ô1ÐJÐJÐJÐJÐJÐJr   ÚdecompositionsÚaot_autogradÚtotalé   Fz5Unable to use AOT Autograd because graph has mutationÚnot_okc                 ó   ‡ — ˆ fd„}|S )Nc                  óH   •— t           t          ‰¦  «        | i |¤Ž¦  «        S r   r   )Úargsr   Úbw_compiler_fns     €r   Ú_wrapped_bw_compilerzLAotAutograd.__call__.<locals>.wrap_bw_compiler.<locals>._wrapped_bw_compiler4   s)   ø€ åÐ6�w ~Ñ6Ô6¸ÐGÀÐGÐGÑHÔHÐHr   © )r+   r,   s   ` r   Úwrap_bw_compilerz.AotAutograd.__call__.<locals>.wrap_bw_compiler3   s)   ø€ ðIð Ið Ið Ið Ið (Ð'r   Úbw_compilerÚfw_compilerÚinference_compilerr   )Únop)Úenable_aot_loggingz%functorch.compile.config.debug_assertTÚok)ÚlogÚwarningÚanyr	   Úcallabler   Úgetr   Údebugr   r   r   Úfunctorch.compiler2   Útorch._inductor.debugr3   r   Ú
contextlibÚnullcontextr
   r   r   Ú	Exception)r   r   Úexample_inputsr   Úuse_fallbackr.   r/   r2   r3   Úpatch_configÚcgs              r   Ú__call__zAotAutograd.__call__   s›  € Øð 	WÝ�KŠKÐMÈvÑVÔVÐVåÐJÐJ¸>ÐJÑJÔJÑJÔJð 	Ý'ØØØñô ð õ �D”K—O’OÐ$4Ñ5Ô5Ñ6Ô6ð 	LØ,I¨D¬KÐ8HÔ,IÑ,KÔ,KˆDŒKÐ(Ñ)õ 	�Ô  Ð)Ð)Ô)¨QÑ.Ð)Ð)Ñ)Øˆàð 	Ý�IŠIÐMÑNÔNÐNÝ�^Ô$ XÐ.Ð.Ô.°!Ñ3Ð.Ð.Ñ.ØˆIð	(ð 	(ð 	(ð ”k—o’o mÑ4Ô4ÐR¸¼ÀMÔ8Rˆå�kÕ#BÑCÔCð 	8Ø&6Ð&6°{Ô7NÑ&OÔ&OˆKÔ#Ð#à*Ð*¨;Ñ7Ô7ˆKà%0ˆŒ�MÑ"àŒK�OŠOÐ0Ñ1Ô1ÐO°T´[ÀÔ5Oð 	ŒÐ(Ñ)ð 	*Ð)Ð)Ð)Ð)Ð)Ø<Ð<Ð<Ð<Ð<Ð<ð Œ;�?Š?˜=¨$Ñ/Ô/°3Ò6Ð6Ý Ð!HÈ$ÑOÔOˆLˆLå%Ô1Ñ3Ô3ˆLð
	à#Ð#Ñ%Ô%ð #ð # |ð #ð #Ý*¨2¨~ÐMÐMÀÄÐMÐM�Ý˜Ô(¨Ð.Ð.Ô.°!Ñ3Ð.Ð.Ñ.Ý˜r‘{”{ð#ð #ð #ð #ñ #ô #ð #ð #ð #ð #ð #ñ #ô #ð #ð #ð #ð #ð #ð #øøøð #ð #ð #ð #ð #ð #ð #ñ #ô #ð #ð #ð #ð #ð #ð #ð #øøøð #ð #ð #ð #ð #ð #øõ .ð 	ð 	ð 	ØÝð 	ð 	ð 	Ý�^Ô$ XÐ.Ð.Ô.°!Ñ3Ð.Ð.Ñ.Øð	øøøsZ   Ç
I ÇIÇ=H.ÈIÈ!I È.H2	È2IÈ5H2	È6IÈ9I ÉI
É
I ÉI
ÉI É1J)r   N)r   Ú
__module__Ú__qualname__r   ÚtorchÚfxÚGraphModulerD   r-   r   r   r   r      sH   € € € € € ðð ð ð ð?˜5œ8Ô/ð ?ð ?ð ?ð ?ð ?ð ?r   r   r   c                  ó   — t          di | ¤ŽS )Nr-   )r   )r   s    r   r$   r$   ]   s   € ÝÐ Ð ˜Ð Ð Ð r   c                 ó4   — ddl m}m}m} |||dœ}| r||d<   |S )Nr   )Údefault_decompositionsÚ#min_cut_rematerialization_partitionÚ
ts_compile)r0   r/   Úpartition_fnr#   )r;   rL   rM   rN   )Úuse_decompsrL   rM   rN   r   s        r   Úmem_efficient_fusion_kwargsrQ   a   se   € ðð ð ð ð ð ð ð ð ð ð "Ø!Ø;ð	ð €Fð ð :Ø#9ˆÐÑ à€Mr   c                 óF   ‡ — t          j        ‰ ¦  «        ˆ fd„¦   «         }|S )zg
    Decorator for backends that need real inputs.  We swap out fake
    tensors for zero tensors.
    c                 ó¬   •— t          ¦   «         5  t          t          t          |¦  «        ¦  «        } ‰| |fi |¤Žcd d d ¦  «         S # 1 swxY w Y   d S r   )r   r   Úmapr   )ÚmodelÚinputsr   Úfns      €r   Úwrapperz(fake_tensor_unsupported.<locals>.wrapper{   s¡   ø€ å#Ñ%Ô%ð 	/ð 	/Ý�#�f fÑ-Ô-Ñ.Ô.ˆFØ�2�e˜VÐ.Ð. vÐ.Ð.ð	/ð 	/ð 	/ð 	/ñ 	/ô 	/ð 	/ð 	/ð 	/ð 	/ð 	/ð 	/øøøð 	/ð 	/ð 	/ð 	/ð 	/ð 	/s   �,A	Á	AÁA)Ú	functoolsÚwraps)rW   rX   s   ` r   Úfake_tensor_unsupportedr[   u   s:   ø€ õ „_�RÑÔð/ð /ð /ð /ñ Ôð/ð
 €Nr   c                 óB   — | D ]}t          |d¦  «        r	|j        c S Œd S )NÚdevice)Úhasattrr]   ©r@   r!   s     r   Údevice_from_inputsr`   „   s=   € Øð ð ˆÝ�1�hÑÔð 	Ø”8ˆOˆOˆOð	ðð r   c                 óB   — | D ]}t          |d¦  «        r	|j        c S Œd S )NÚdtype)r^   rb   r_   s     r   Údtype_from_inputsrc   Š   s=   € Øð ð ˆÝ�1�gÑÔð 	Ø”7ˆNˆNˆNð	ðð r   )r=   rY   ÚloggingÚunittest.mockr   rG   Útorch._dynamor   Útorch._dynamo.excr   Útorch._dynamo.utilsr   r   r	   Útorch._functorch.aot_autogradr
   r   Útorch.utils._python_dispatchr   Ú	getLoggerr   r5   r   r$   rQ   r[   r]   r`   rb   rc   r-   r   r   ú<module>rl      s„  ðð Ð Ð Ð Ø Ð Ð Ð Ø €€€Ø Ð Ð Ð Ð Ð à €€€Ø !Ð !Ð !Ð !Ð !Ð !Ø <Ð <Ð <Ð <Ð <Ð <Ø FÐ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FÐ Fðð ð ð ð ð ð ð ð @Ð ?Ð ?Ð ?Ð ?Ð ?ð €gÔ˜Ñ!Ô!€ðDð Dð Dð Dð Dñ Dô Dð DðN!˜kð !ð !ð !ð !ðð ð ð(ð ð ð¨%¬,ð ð ð ð ð¨¬ð ð ð ð ð ð r   