o
    h                     @   s   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
 d dlmZ d dlmZ eeZdd Zd	d
 Zdd ZdejfddZdejfddZdS )    N)patchdisable)countersdefake)aot_module_simplified)_disable_current_modesc                     s   dt jjf fdd}|S )Ngmc              	      s  t drd  d< td d  d7  < d}|r-td td d  d7  < | S  fdd	}d
p;d  |d
< dpHd d< ddlm} ddlm} dd |kret	dd}nt
 }zI| ; |' t| |fi }td d  d7  < t|W  d    W  d    W S 1 sw   Y  W d    W d S 1 sw   Y  W d S  ty   td d  d7  <  w )Ndecompositionsaot_autogradtotal   Fz5Unable to use AOT Autograd because graph has mutationnot_okc                     s   t t  | i |S Nr   )argskwargsbw_compiler S/var/www/html/ai/venv/lib/python3.10/site-packages/torch/_dynamo/backends/common.py_wrapped_bw_compiler   s   z?aot_autograd.<locals>.compiler_fn.<locals>._wrapped_bw_compilerr   fw_compilerinference_compilerr   )nop)enable_aot_loggingz%functorch.compile.config.debug_assertTok)callablegetr   logdebugfunctorch.compiler   torch._inductor.debugr   r   
contextlibnullcontextr   r   	Exception)r	   example_inputsuse_fallbackr   r   r   patch_configcgr   r   r   compiler_fn   s8   
Xz!aot_autograd.<locals>.compiler_fn)torchfxGraphModule)r   r*   r   r)   r   r      s   .r   c                 C   s0   ddl m}m}m} |||d}| r||d< |S )Nr   )default_decompositions#min_cut_rematerialization_partition
ts_compile)r   r   partition_fnr
   )r    r.   r/   r0   )use_decompsr.   r/   r0   r   r   r   r   mem_efficient_fusion_kwargsA   s   r3   c                    s   t   fdd}|S )zg
    Decorator for backends that need real inputs.  We swap out fake
    tensors for zero tensors.
    c                    sJ   t   ttt|} | |fi |W  d    S 1 sw   Y  d S r   )r   listmapr   )modelinputsr   fnr   r   wrapper[   s   $z(fake_tensor_unsupported.<locals>.wrapper)	functoolswraps)r9   r:   r   r8   r   fake_tensor_unsupportedU   s   r=   returnc                 C   "   | D ]}t |dr|j  S qd S )Ndevice)hasattrr@   r%   xr   r   r   device_from_inputsd   
   

rD   c                 C   r?   )Ndtype)rA   rF   rB   r   r   r   dtype_from_inputsj   rE   rG   )r"   r;   loggingunittest.mockr   r+   torch._dynamor   torch._dynamo.utilsr   r   torch._functorch.aot_autogradr   torch.utils._python_dispatchr   	getLogger__name__r   r   r3   r=   r@   rD   rF   rG   r   r   r   r   <module>   s    
2