o
    ߗi                     @   s  d dl Z d dlZd dlmZmZmZmZmZmZ d dl	m
Z
 d dlZd dlm  mZ zd dlZW n ey<   dZY nw erMe
deddefddZndefd	dZd
edef dedef fddZdedeej f dededejfddZdedef dedef fddZG dd dZdejjjdeej dedeejeejdf f fddZdejde fddZ!G dd  d Z"ded!ed"e#dedef
d#d$Z$d%ed&eded!ed'e#d(e#defd)d*Z%dS )+    N)AnyCallableListOptionalTYPE_CHECKINGUnion)
deprecatedze`torch._dynamo.external_utils.is_compiling` is deprecated. Use `torch.compiler.is_compiling` instead.)categoryreturnc                   C   
   t j S Ntorchcompileris_compiling r   r   Z/home/ubuntu/transcripts/venv/lib/python3.10/site-packages/torch/_dynamo/external_utils.pyr      s   
r   c                   C   r   )zd
        Indicates whether we are tracing/compiling with torch.compile() or torch.export().
        r   r   r   r   r   r      s   
fn.c                    s(   t  dtdtdtf fdd}|S )zC
    Create an extra frame around fn that is not in skipfiles.
    argskwargsr
   c                     s    | i |S r   r   )r   r   r   r   r   inner+   s   zwrap_inline.<locals>.inner)	functoolswrapsr   )r   r   r   r   r   wrap_inline&   s   r   hookr   r   c                 O   s2   | | }|du r|d S | ddkrtd|S )zB
    Used by compiled autograd to handle hook returning None.
    Nr   	hook_typepost_acc_grad_hookz5Tensor post accumulate grad hooks should return None.)getRuntimeError)r   r   r   resultr   r   r   	call_hook2   s   r!   fc                    s0   t s S t dtdtdtf fdd}|S )zDecorator that turns a function from ``np.ndarray``s to ``np.ndarray``s into a function
    from ``torch.Tensor``s to ``torch.Tensor``s.
    r   r   r
   c                     s>   t tjdd | |f\} } | i |}t tjdd |S )Nc                 S   s   |   S r   )numpyxr   r   r   <lambda>J   s    z*wrap_numpy.<locals>.wrap.<locals>.<lambda>c                 S   s
   t | S r   )r   	as_tensorr$   r   r   r   r&   M   s   
 )pytreetree_map_onlyr   Tensornpndarray)r   r   outr"   r   r   wrapG   s
   zwrap_numpy.<locals>.wrap)r+   r   r   r   )r"   r/   r   r.   r   
wrap_numpy@   s
   r0   c                   @   s@   e Zd Zdejjjdeej ddfddZ	de
defdd	ZdS )
FakeBackwardCFunctionrealsaved_tensorsr
   Nc                 C   s   || _ || _d S r   )r2   r3   )selfr2   r3   r   r   r   __init__S   s   
zFakeBackwardCFunction.__init__namec                 C   s&   |dkrt dt | jS t| j|S )Nsaved_variablesz4'saved_variables' is deprecated; use 'saved_tensors')warningswarnDeprecationWarningr3   getattrr2   )r4   r6   r   r   r   __getattr__[   s   z!FakeBackwardCFunction.__getattr__)__name__
__module____qualname__r   autogradfunctionBackwardCFunctionr   r*   r5   strr   r<   r   r   r   r   r1   R   s    
r1   backward_c_functionr3   c                 G   s2   t | |}|jj|g|R  }t|ts|f}|S r   )r1   _forward_clsbackward
isinstancetuple)rD   r3   r   fakegradsr   r   r   call_backwardf   s
   

rK   r%   c                 C   s   |    S r   )untyped_storagesizer$   r   r   r   untyped_storage_sizet   s   rN   c                   @   sj   e Zd Zedeeg df  deg df ddfddZedeeg df  ddfddZedd	d
ZdS )FakeCompiledAutogradEnginefinal_callbacksNcbr
   c                 C   s   |  | d S r   )append)rP   rQ   r   r   r   queue_callbacky   s   z)FakeCompiledAutogradEngine.queue_callbackc                 C   s>   d}|t | k r| | }|  |d7 }|t | k s|   d S )Nr      )lenclear)rP   irQ   r   r   r   exec_final_callbacks   s   z/FakeCompiledAutogradEngine.exec_final_callbacksc                   C   s   d S r   r   r   r   r   r   _exec_final_callbacks_stub   s   z5FakeCompiledAutogradEngine._exec_final_callbacks_stub)r
   N)	r=   r>   r?   staticmethodr   r   rS   rX   rY   r   r   r   r   rO   x   s    
 rO   bw_state	hook_namec                 O   s   t | ||i |S r   r;   )r[   r\   r   r   r   r   r   call_hook_from_backward_state   s   r^   _r    
hooks_namemodule_namec          
      G   s@   t ||}t ||}|D ]}|||g|R  }	|	d ur|	}q|S r   r]   )
r_   r    r[   r`   ra   r   modulehooksr   
new_resultr   r   r   %call_module_hooks_from_backward_state   s   

re   )&r   r8   typingr   r   r   r   r   r   typing_extensionsr   r   torch.utils._pytreeutils_pytreer(   r#   r+   ModuleNotFoundErrorFutureWarningboolr   r   r*   r!   r0   r1   r@   rA   rB   rH   rK   intrN   rO   rC   r^   re   r   r   r   r   <module>   s    "	
"

