o
    "i                     @   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
mZ d dlmZ d dlmZ eeZG dd d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flatten_graph_inputs)aot_module_simplified)_disable_current_modesc                   @   s&   e Zd Zdd ZdejjfddZdS )AotAutogradc                 K   s   d| _ || _d S )Ncompiler_fn)__name__kwargs)selfr    r   [/home/ubuntu/SoloSpeech/.venv/lib/python3.10/site-packages/torch/_dynamo/backends/common.py__init__   s   
zAotAutograd.__init__gmc           	   	      s  t dd |D rt||| S t| jdr | jd  | jd< td d  d7  < d}|r?td td d	  d7  < |S  fd
d}| jdpO| jd  || 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 }zJ| < |( t||fi | j}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 )Nc                 s   s     | ]}t |tttfV  qd S N)
isinstancelisttupledict).0xr   r   r   	<genexpr>   s    z'AotAutograd.__call__.<locals>.<genexpr>decompositionsaot_autogradtotal   Fz5Unable to use AOT Autograd because graph has mutationnot_okc                     s   t t  | i |S r   r   )argsr   bw_compilerr   r   _wrapped_bw_compiler-   s   z2AotAutograd.__call__.<locals>._wrapped_bw_compilerr"   fw_compilerinference_compilerr   )nop)enable_aot_loggingz%functorch.compile.config.debug_assertTok)anyr   callabler   getr   logdebugfunctorch.compiler&   torch._inductor.debugr'   r   
contextlibnullcontextr   r   	Exception)	r   r   example_inputsuse_fallbackr#   r&   r'   patch_configcgr   r!   r   __call__   sD   

XzAotAutograd.__call__N)r   
__module____qualname__r   torchfxGraphModuler7   r   r   r   r   r
      s    r
   c                  K   s   t di | S )Nr   )r
   )r   r   r   r   r   M   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>   r?   )use_decompsr=   r>   r?   r   r   r   r   mem_efficient_fusion_kwargsQ   s   rB   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	   r   mapr   )modelinputsr   fnr   r   wrapperk   s   $z(fake_tensor_unsupported.<locals>.wrapper)	functoolswraps)rG   rH   r   rF   r   fake_tensor_unsupportede   s   rK   returnc                 C   "   | D ]}t |dr|j  S qd S )Ndevice)hasattrrN   r3   r   r   r   r   device_from_inputst   
   

rQ   c                 C   rM   )Ndtype)rO   rS   rP   r   r   r   dtype_from_inputsz   rR   rT   )r0   rI   loggingunittest.mockr   r:   torch._dynamor   torch._dynamo.utilsr   r   r   torch._functorch.aot_autogradr   torch.utils._python_dispatchr	   	getLoggerr   r,   r
   r   rB   rK   rN   rQ   rS   rT   r   r   r   r   <module>   s    
<