o
    "i                     @   s   d dl mZ d dlZd dl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 ed
Zeedd Zeedd Zejdd Zeeje	edd eejdd Zdd Zedd Zdd ZdS )    )contextmanagerN)DispatchKeystrict_mode)autograd_not_implemented)HigherOrderOperator)FakeTensorMode)ProxyTorchDispatchModetrack_tensor_tree)_pytree_export_tracepointc                 O   sP   | j s
t|i |S t| jj||f\}}| jdt||}t||d | jdS )Ncall_function)constanttracer)enable_tracingr   pytreetree_mapr   unwrap_proxycreate_proxyr
   )modeargskwargsp_argsp_kwargsproxy r   T/home/ubuntu/SoloSpeech/.venv/lib/python3.10/site-packages/torch/_export/wrappers.pyexport_tracepoint_dispatch_mode   s   r   c                 O   s,   | 
 |W  d    S 1 sw   Y  d S Nr   )r   r   r   r   r   r   "export_tracepoint_fake_tensor_mode   s   $r   c                 O   sX   |  |}|  |}|   t|i |}| |W  d    S 1 s%w   Y  d S r   )unwrap_tensorsredispatch_to_nextr   wrap_tensors)ctxr   r   unwrapped_argsunwrapped_kwargsoutr   r   r   export_tracepoint_functional#   s   


$r'   T)deferred_errorc                  O   s   | S r   r   )r   r   r   r   r   export_tracepoint_cpu2   s   r)   c           	         s   t | tjjs	J dksJ | }dD ]}t||s$td t||}qfdddd   fdd	} fd
d}|j|dd}|j	|dd}||fS )N .z Couldn't find submodule at path c                    sB   |  v r |  d |ksJ  |  d |ksJ ||d | < d S )Nin_specout_spec)r,   r-   r   )pathr,   r-   )module_call_specsr   r   update_module_call_signatures@   s   z6_wrap_submodule.<locals>.update_module_call_signaturesc                 S   s:   | D ]}t |tjttttfs|d u std| qd S )NzGOnly Tensors or scalars are supported as pytree flattened inputs, got: )
isinstancetorchTensorstrintfloatboolAssertionError)	flat_argsar   r   r   check_flattenedF   s   z(_wrap_submodule.<locals>.check_flattenedc                    sB   t ||f\}} | t|dd}t ||\}}||fS )Nmodule_call_inputskindr.   r   tree_flattenr   tree_unflatten)moduler   r   r9   r,   )r;   r.   r   r   pre_hookM   s
   z!_wrap_submodule.<locals>.pre_hookc                    sP   t ||f\}}t |\}} | t|dd}|| t ||S )Nmodule_call_outputsr=   r?   )rB   r   r   res_r,   flat_resr-   )r;   r.   r0   r   r   	post_hookT   s   z"_wrap_submodule.<locals>.post_hookT)with_kwargs)
r1   r2   nnModulesplithasattrRuntimeErrorgetattrregister_forward_pre_hookregister_forward_hook)	modr.   r/   	submodulenamerC   rH   
pre_handlepost_handler   )r;   r/   r.   r0   r   _wrap_submodule7   s   
rW   c              	   c   sV    g }z|D ]}| t| || qd V  W |D ]}|  qd S |D ]}|  q#w r   )extendrW   remove)fpreserve_signaturemodule_call_signatureshandlesr.   handler   r   r   _wrap_submodulesa   s   

r_   c                 C   s   dd }|| _ | S )Nc                 W   s
   t | |S r   r   )selfr   r   r   r   callo   s   
z'_mark_strict_experimental.<locals>.call)__call__)clsra   r   r   r   _mark_strict_experimentaln   s   rd   ) 
contextlibr   r2   torch._custom_opstorch._Cr   #torch._higher_order_ops.strict_moder   torch._higher_order_ops.utilsr   
torch._opsr   torch._subclasses.fake_tensorr   "torch.fx.experimental.proxy_tensorr	   r
   torch.utilsr   r   r   py_implr   r   py_functionalize_implr'   AutogradCPUr)   rW   r_   rd   r   r   r   r   <module>   s4   




	


*
