a
    d]                     @   s   d dl Z d dlmZ d dlZddlmZmZ ddlmZm	Z	 e 
eZdd Zd	d
 Zdd ZeddZeddZeded e	ded ef i eddZdd e_eded dS )    N)partial   )aot_autogradmem_efficient_fusion_kwargs   )register_backendregister_debug_backendc                C   s   ddl m} ddlm} ddlm} ddlm} t| ddsn|  || | } W d    n1 sd0    Y  |t	|| |dS )	Nr   )make_boxed_funcTorchRefsNvfuserCapabilityMode)executemake_fx_nvprim_transformedFexecutor)
functorch.compiler	   torch._prims.contextr   Ztorch._prims.executorr   "torch.fx.experimental.proxy_tensorr   getattrr   )Zgminputsr   r	   r   r   r    r   g/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/torch/_dynamo/backends/nvfuser.pyprims_executor   s    *r   c                   s   ddl m} ddlm} ddlm}  fdd}|  ||| }W d    n1 sX0    Y  dd ttjj	D }|||||d	\}	}
d
|	_
d
|
_
|	|
fS )Nr   )#min_cut_rematerialization_partitionr
   r   c                    s
    | |S )Nr   )ZprimalsZtangentsjoint_moduler   r   func*   s    z(nvprims_fw_bw_partition_fn.<locals>.funcc                 S   sB   h | ]:}t ttjj|tjjrttjj|jrttjj|qS r   )
isinstancer   torchopsnvprimsZ_opsZOpOverloadPacketZis_recomputable).0Zprimr   r   r   	<setcomp>3   s   z-nvprims_fw_bw_partition_fn.<locals>.<setcomp>)recomputable_opsnum_fwd_outputsT)r   r   r   r   r   r   dirr   r    r!   r   )r   Zjoint_inputsr%   r   r   r   r   Zprim_gmr$   Zfw_gmZbw_gmr   r   r   nvprims_fw_bw_partition_fn   s$    *

r'   c                 C   s   t tt| dtt| dtdS )Nr   )Zfw_compilerZbw_compilerZpartition_fn)r   r   r   r'   r   r   r   r   create_nvprims_backendG   s
    

r(   Znvfuserr   ZatenZnvprims_nvfuser)nameZcompiler_fnZnvprims_atenT)Zuse_decompsc                   C   s   t jdS )NZfuser2)r   ZjitZfuserr   r   r   r   <lambda>^       r*   Zaot_ts_nvfuser)logging	functoolsr   r   Zbackends.commonr   r   registryr   r   	getLogger__name__logr   r'   r(   Zaot_nvprims_nvfuserZaot_nvprims_atenZaot_mem_efficient_fusionZbackend_ctx_ctorr   r   r   r   <module>   s   
(


