o
    Ti(                     @   s~   d dl Z d dlmZ g Zdadaee jjZ	eddr$G dd de	Z
neddr1G d	d de	Z
d
d Zdd Zdd ZdS )    N)required_torch_versionFg@)min_versionc                          e Zd Z fddZ  ZS )FunctionMetac                    `   |dkr'| d  fddd _t|d< t | |||}|_|S t | |||S )NCompiledFunction_backward_implc                    s,    d usJ t rt| d j_ | |S Nenabled_patched_funcbackward_inputsappendowner_classcompiled_bw)ctxall_argsoriginal_backward_implwrapped_backward_impl Y/home/ubuntu/.local/lib/python3.10/site-packages/deepspeed/compile/patch_compiled_func.pyr      s
   

z3FunctionMeta.__new__.<locals>.wrapped_backward_implgetr   staticmethodsuper__new__clsnamebasesdct	new_class	__class__r   r   r      s   
	FunctionMeta.__new____name__
__module____qualname__r   __classcell__r   r   r"   r   r          r   g@c                       r   )r   c                    r   )Nr   _backward_prologuec                    s6    d usJ  | g|R  }t rt| d j_|S r	   r
   )r   grad_outputsr   original_backward_prologuewrapped_backward_prologuer   r   r/   1   s   
z7FunctionMeta.__new__.<locals>.wrapped_backward_prologuer   r   r"   r-   r   r   -   s   

r$   r%   r   r   r"   r   r   +   r*   c                  C   s0   da G dd dtjjtd} tjja| tj_tS )NTc                   @   s   e Zd ZdS )z,patch_compiled_func.<locals>.PatchedFunctionN)r&   r'   r(   r   r   r   r   PatchedFunctionJ   s    r0   )	metaclass)r   torchautogradFunctionr   original_grad_fnr   )r0   r   r   r   patch_compiled_funcE   s
   r6   c                   C   s   da ttj_d S )NF)r   r5   r2   r3   r4   r   r   r   r   unpatch_compiled_funcT   s   r7   c                   C   s   t S r	   )r   r   r   r   r   get_backward_inputs\   s   r8   )r2   deepspeed.utils.torchr   r   r   r5   typer3   r4   	base_metar   r6   r7   r8   r   r   r   r   <module>   s   

