
    sgp                         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	m
Z
mZ d dlmZ d dlmZ  ej                   e      Z G d d      Zd	 Zd
 Zd Zdej.                  fdZdej2                  fdZy)    N)patchdisable)countersdefakeflatten_graph_inputs)aot_module_simplified)_disable_current_modesc                   H    e Zd ZddZdej
                  j                  fdZy)AotAutogradNc                      d| _         || _        y )Ncompiler_fn)__name__kwargs)selfr   s     P/var/www/html/venv/lib/python3.12/site-packages/torch/_dynamo/backends/common.py__init__zAotAutograd.__init__   s    %    gmc                 :  
 |rt         j                  d|       t        d |D              rt        |||       S t	        | j
                  j                  d            r! | j
                  d          | j
                  d<   t        d   dxx   dz  cc<   d}|r+t         j                  d       t        d   d	xx   dz  cc<   |S 
fd
}| j
                  j                  d      xs | j
                  d   
|| j
                  d<   | j
                  j                  d      xs | j
                  d   | j
                  d<   ddl	m
} ddlm} | j
                  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 Y   nxY wd d d        y # 1 sw Y   y xY w# t$        $ r t        d   d	xx   dz  cc<    w xY w)Nz3aot_autograd-based backend ignoring extra kwargs %sc              3   R   K   | ]  }t        |t        t        t        f       ! y wN)
isinstancelisttupledict).0xs     r   	<genexpr>z'AotAutograd.__call__.<locals>.<genexpr>   s     Jaz!dE401Js   %'decompositionsaot_autogradtotal   Fz5Unable to use AOT Autograd because graph has mutationnot_okc                  8    t         t              | i |      S r   r   )argsr   bw_compilers     r   _wrapped_bw_compilerz2AotAutograd.__call__.<locals>._wrapped_bw_compiler1   s     /7;/@@AAr   r'   fw_compilerinference_compilerr   )nop)enable_aot_loggingz%functorch.compile.config.debug_assertTok)logwarninganyr   callabler   getr   debugfunctorch.compiler+   torch._inductor.debugr,   r   
contextlibnullcontextr	   r   	Exception)r   r   example_inputsr   use_fallbackr(   r+   r,   patch_configcgr'   s             @r   __call__zAotAutograd.__call__   s   KKMvVJ>JJ'  DKKOO$456,IDKK8H,I,KDKK() 	 )Q.)IIMN^$X.!3.I	B kkoom4RM8R%9M"KKOO01OT[[5O 	() 	*< ;;??=$/36 !H$OL%113L	#% #| #*2~MM(.!3.r{# # # # # # #  	^$X.!3.	sH   G; G/6G	G/	G; G#	G/&G; /G84G; 8G; ;H)returnN)r   
__module____qualname__r   torchfxGraphModuler=    r   r   r   r      s    6588// 6r   r   c                      t        di | S )NrD   )r   )r   s    r   r!   r!   P   s       r   c                 4    ddl m}m}m} |||d}| r||d<   |S )Nr   )default_decompositions#min_cut_rematerialization_partition
ts_compile)r)   r'   partition_fnr    )r4   rG   rH   rI   )use_decompsrG   rH   rI   r   s        r   mem_efficient_fusion_kwargsrL   T   s3      "!;	F #9 Mr   c                 B     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 Y   y xY wr   )r
   r   mapr   )modelinputsr   fns      r   wrapperz(fake_tensor_unsupported.<locals>.wrappern   s>    #% 	/#ff-.FeV.v.	/ 	/ 	/s	   #9A)	functoolswraps)rR   rS   s   ` r   fake_tensor_unsupportedrV   h   s'     __R/ /
 Nr   r>   c                 F    | D ]  }t        |d      s|j                  c S  y )Ndevice)hasattrrX   r9   r   s     r   device_from_inputsr[   w   s$     1h88Or   c                 F    | D ]  }t        |d      s|j                  c S  y )Ndtype)rY   r]   rZ   s     r   dtype_from_inputsr^   }   s$     1g77Nr   )r6   rT   loggingunittest.mockr   rA   torch._dynamor   torch._dynamo.utilsr   r   r   torch._functorch.aot_autogradr	   torch.utils._python_dispatchr
   	getLoggerr   r.   r   r!   rL   rV   rX   r[   r]   r^   rD   r   r   <module>rf      ss         ! F F ? ? g!; ;|!(%,,  r   