
    ǄgI                        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  G d
 de      Z e       Zej-                  e      d        Zej-                  e      d        Zej2                  d        Z ej-                  ej6                         e	ed             ej-                  ej8                        d        Zd Zed        Zd Z y)    )contextmanagerN)DispatchKeystrict_mode)autograd_not_implemented)HigherOrderOperator)FakeTensorMode)ProxyTorchDispatchModetrack_tensor_tree)_pytreec                   (     e Zd Z fdZ fdZ xZS )ExportTracepointc                 $    t         |   d       y )N_export_tracepoint)super__init__)self	__class__s    ^/home/mcse/projects/flask_80/flask-venv/lib/python3.12/site-packages/torch/_export/wrappers.pyr   zExportTracepoint.__init__   s    -.    c                 "    t        |   |i |S N)r   __call__)r   argskwargsr   s      r   r   zExportTracepoint.__call__   s    w000r   )__name__
__module____qualname__r   r   __classcell__)r   s   @r   r   r      s    /1 1r   r   c                     t        j                  | j                  j                  ||f      \  }}| j                  j	                  dt
        ||      }t        ||d | j                        S )Ncall_function)constanttracer)pytreetree_mapr#   unwrap_proxycreate_proxyr   r   )moder   r   p_argsp_kwargsproxys         r   export_tracepoint_dispatch_moder,      sZ    t{{'?'?$PFHKK$$+VXE T54LLr   c                 6    | 5  |cd d d        S # 1 sw Y   y xY wr    )r(   r   r   s      r   "export_tracepoint_fake_tensor_moder/   #   s    	   s   c                     | j                  |      }| j                  |      }| j                         5  t        |i |}| j                  |      cd d d        S # 1 sw Y   y xY wr   )unwrap_tensorsredispatch_to_nextr   wrap_tensors)ctxr   r   unwrapped_argsunwrapped_kwargsouts         r   export_tracepoint_functionalr8   )   sb    ''-N))&1				! % .E4DE$% % %s   AA"T)deferred_errorc                      | S r   r.   )r   r   s     r   export_tracepoint_cpur;   8   s    Kr   c                 ^  	
 t        | t        j                  j                        sJ dk7  sJ | }j	                  d      D ](  }t        ||      st        d       t        ||      }* fd
d 		fd}	
fd}|j                  |d	      }|j                  |d	      }||fS )
N .z Couldn't find submodule at path c                 R    | v r|    d   |k(  sJ |    d   |k(  sJ ||d| <   y )Nin_specout_spec)r@   rA   r.   )pathr@   rA   module_call_specss      r   update_module_call_signaturesz6_wrap_submodule.<locals>.update_module_call_signaturesF   sL    $$$T*95@@@$T*:6(BBB.58"L$r   c           	          | D ]B  }t        |t        j                  t        t        t
        t        f      r3|6t        d|        y )NzGOnly Tensors or scalars are supported as pytree flattened inputs, got: )
isinstancetorchTensorstrintfloatboolAssertionError)	flat_argsas     r   check_flattenedz(_wrap_submodule.<locals>.check_flattenedL   sG     	Aq5<<c5$"GHAI$]^_]`a 	r   c                     t        j                  ||f      \  }} |       t        |dd}t        j                  ||      \  }}||fS )Nmodule_call_inputskindrB   r$   tree_flattenr   tree_unflatten)moduler   r   rN   r@   rP   rB   s        r   pre_hookz!_wrap_submodule.<locals>.pre_hookS   sT    #00$@	7	"&	8LSWX	,,Y@fV|r   c                     t        j                  ||f      \  }}t        j                  |      \  }} |       t        |d	d} 
	||       t        j                  ||      S )Nmodule_call_outputsrS   rU   )rX   r   r   res_r@   flat_resrA   rP   rB   rD   s           r   	post_hookz"_wrap_submodule.<locals>.post_hookZ   sg    (($8
7#005(!%x6KRVW%dGX>$$Xx88r   T)with_kwargs)
rF   rG   nnModulesplithasattrRuntimeErrorgetattrregister_forward_pre_hookregister_forward_hook)modrB   rC   	submodulenamerY   r_   
pre_handlepost_handlerP   rD   s    ``      @@r   _wrap_submodulern   =   s    c588??+++2::I

3 -y$'!A$HIIIt,	-
M9 44X44PJ11)1NK{""r   c              #      K   g }	 |D ]  }|j                  t        | ||               d  |D ]  }|j                           y # |D ]  }|j                           w xY wwr   )extendrn   remove)fpreserve_signaturemodule_call_signatureshandlesrB   handles         r   _wrap_submodulesrw   g   sj     G& 	MDNN?1d4JKL	M 	FMMO	g 	FMMO	s   A!'A A!AA!c                     d }|| _         | S )Nc                     t        | |      S r   r   )r   r   s     r   callz'_mark_strict_experimental.<locals>.callu   s    4&&r   )r   )clsrz   s     r   _mark_strict_experimentalr|   t   s    ' CLJr   )!
contextlibr   rG   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   r   py_implr,   r/   py_functionalize_implr8   AutogradCPUr;   rn   rw   r|   r.   r   r   <module>r      s   %     ; B * 8 X )1* 1 &'  23M 4M N+ ,
 ))% *% 1   ;// 0/E
 KOO, -'#T 	 	r   