o
    h                     @   sL  d dl mZ d dlZd dlZd dlmZmZmZ d dlm	Z	 d dl
mZ d dlmZ d dlmZ d dlmZ d d	lmZmZ d d
lmZ d dlmZmZ edZeej eej eej eej  eej! eej" e#edd Z$e#edd Z%e#ej&dd Z'e#ej(dd Z)dd Z*edd Z+dS )    )contextmanagerN)_ExcludeDispatchKeyGuardDispatchKeyDispatchKeySetModuleCallSignature)#_unwrap_all_tensors_from_functional)wrap)HigherOrderOperator)FakeTensorMode)ProxyTorchDispatchModetrack_tensor_tree)_pytree)_get_current_dispatch_mode_pop_mode_temporarily_export_tracepointc                  O   s   t  }|d usJ dt 7}|js t| i |W  d    S t|jj| |f\}}|jdt||}t	| |d |jdW  d    S 1 sHw   Y  d S )Nz5Mode should always be enabled for python fallback keycall_function)constanttracer)
r   r   enable_tracingr   pytreetree_mapr   unwrap_proxycreate_proxyr   )argskwargsmodep_argsp_kwargsproxy r    L/var/www/html/ai/venv/lib/python3.10/site-packages/torch/_export/wrappers.pyexport_tracepoint_dispatch_mode   s   $r"   c                  O      | S Nr    r   r   r    r    r!   "export_tracepoint_fake_tensor_mode,      r&   c                  O   sb   t j }t| |d}t||d}tttj t|i |W  d    S 1 s*w   Y  d S )N)reapply_views)	torch_C$_functionalization_reapply_views_tlsr   r   r   r   Functionalizer   )r   r   r(   unwrapped_argsunwrapped_kwargsr    r    r!   export_tracepoint_functionalize1   s   
$r/   c                  O   r#   r$   r    r%   r    r    r!   export_tracepoint_cpu>   r'   r0   c                    s   t | tjjs	J dksJ d }| dD ]}}t|s(td t|qddlm	} | fddG  fdd	d	}t
|||  ||fS )
N .z Couldn't find submodule at path r   )assume_constant_resultc                    s$   |  vsJ t g g ||d | < d S )N)inputsoutputsin_specout_specr   )pathr6   r7   )module_call_signaturesr    r!   update_module_call_signaturesQ   s   z6_wrap_submodule.<locals>.update_module_call_signaturesc                       s*   e Zd Z fddZfddZdS )z&_wrap_submodule.<locals>.WrappedModulec                    s:   t jj| jjfi | _j| _t| drJ  | _d S )Nr9   )type	__class____name____dict__hasattrr9   )self)r9   	submoduler    r!   __init__Y   s   

z/_wrap_submodule.<locals>.WrappedModule.__init__c                    sH   t ||f\}  fdd}t|g|R  }t || j jS )Nc                     s\   t | dd} t|  \}}|i |}t|\}}t |dd} | |S )Nmodule_call_inputs)kindr8   module_call_outputs)r   r   tree_unflattentree_flatten)	flat_argsr   r   resflat_resr7   )r6   r8   rA   r:   r    r!   flat_gmf   s   z?_wrap_submodule.<locals>.WrappedModule.forward.<locals>.flat_gm)r   rG   r	   rF   r9   r7   )r@   r   r   rH   rK   rJ   )r8   rA   r:   )r6   r!   forwardc   s   z._wrap_submodule.<locals>.WrappedModule.forwardN)r=   
__module____qualname__rB   rL   r    r9   r8   rA   r:   r    r!   WrappedModuleX   s    
rP   )
isinstancer)   nnModulesplitr?   RuntimeErrorgetattrtorch._dynamor3   setattr)modr8   r9   parentnamer3   rP   r    rO   r!   _wrap_submoduleC   s   
 
r\   c                 c   sj    g }z"|D ]}| t| || qd V  W |D ]\}}}t||| qd S |D ]\}}}t||| q(w r$   )appendr\   rX   )fpreserve_signaturer9   tasksr8   rZ   r[   rA   r    r    r!   _wrap_submodules|   s   ra   ),
contextlibr   r)   torch._custom_opstorch._Cr   r   r   torch._export.exported_programr   !torch._functorch.eager_transformsr   torch._higher_order_ops.wrapr	   
torch._opsr
   torch._subclasses.fake_tensorr   "torch.fx.experimental.proxy_tensorr   r   torch.utilsr   r   torch.utils._python_dispatchr   r   r   fallthroughPythonDispatcherPythonTLSSnapshotADInplaceOrViewBackendSelectAutocastCPUAutogradCPUpy_implr"   r&   r,   r/   CPUr0   r\   ra   r    r    r    r!   <module>   s<    





9