
    sg3                        d dl Z d dlZd dlZd dlmZmZ d dlmZmZm	Z	m
Z
mZmZmZmZ d dlZd dlmc mZ d dlmc mZ d dlmZ d dlmZ d dlmZ d dlm Z m!Z!m"Z"m#Z# ejH                  jK                  e&d      Z'd	 Z( G d
 dejR                        Z* G d de#      Z+e jX                  d        Z- e+       fde+fdZ. G d de      Z/ G d de/      Z0 G d de/      Z1 G d de/      Z2dejR                  fdZ3y)    N)ABCabstractmethod)AnyCallableContextManagerDictListOptionalTupleUnion)$_functionalization_reapply_views_tls)_get_dispatch_mode_pre_dispatch)is_sparse_any)_detect_infra_mode_disable_infra_modereturn_and_correct_aliasingTorchDispatchModenot_implementedc                        fd}|S )Nc                 0     | j                   |i i |S N)to)selfargskwargsextra_kwargss      V/var/www/html/venv/lib/python3.12/site-packages/torch/_subclasses/functional_tensor.py_z&_conversion_method_template.<locals>._(   s$    tww; :6 :\ :;;     )r   r   s   ` r   _conversion_method_templater!   '   s    < Hr   c                   v    e Zd ZU dZej
                  ed<   ej                  j                  j                  Z
ej                  j                  j                  ej                  j                  j                        Zej                   j"                  j$                  j&                  ej                   j"                  j$                  j(                  ej                   j"                  j*                  j&                  ej                   j"                  j,                  j&                  ej                   j"                  j.                  j&                  ej                   j"                  j0                  j&                  ej                   j"                  j2                  j&                  ej                   j"                  j4                  j&                  ej                   j"                  j6                  j&                  ej                   j"                  j8                  j&                  ej                   j"                  j:                  j&                  ej                   j"                  j<                  j&                  ej                   j"                  j>                  j&                  ej                   j@                  jB                  j&                  gZ"ej                   j"                  jF                  j&                  ej                   j"                  jH                  j&                  ej                   j"                  jJ                  j&                  ej                   j"                  jL                  j&                  ej                   j"                  jN                  j&                  ej                   j"                  jP                  j&                  ej                   j"                  jR                  j&                  ej                   j"                  jT                  j&                  ej                   j"                  jV                  j&                  ej                   j"                  jX                  j&                  ej                   j"                  jZ                  j&                  ej                   j"                  j\                  j&                  ej                   j"                  j^                  j&                  ej                   j"                  j`                  j&                  ej                   j"                  jb                  j&                  gZ2dZ3e4d    ed<   d Z5ddZ6d Z7e8d        Z9d	 Z:d
e;fdZ<ddZ=ddZ>ddZ?ddZ@d
eAfdZB fdZCddZD eEej                        ZG eE ejB                  d            ZH eEej                        ZI eEej                        ZK eEej                        ZM eEej                        ZO eEejv                        Z; eEej                        ZQ eEej                        ZS eEej                        ZUd ZVeWd        ZX xZYS )FunctionalTensoraF  
    Functional tensors represent tensors that will remove mutations
    from a program. If you perform a mutable operation on a functional tensor,
    it will re-dispatch to the functional variant of that operation.

    Historically, functionalization is implemented in C++ in the dispatcher.
    This class is a lightweight python shim around the C++ functionalization logic.

    FunctionalTensor is required to be used with a corresponding
    FunctionalTensormode active, because it relies
    on using the mode for dispatch (which can properly handle factory functions).
    elemN_inference_mode_basec                 l   t        j                  |      sJ t        j                  t         j                  j                  |      z  }t         j                  j                  | |j                  t        |      s|j                         nd t        |      s|j                         nd d |j                  |j                  |j                  d|j                  d dd|      }t         j                  j!                  |       ||_        t        j$                         rt         j&                  j(                  j*                  rz|j-                         r0d |_        ||j0                  |j"                  j3                         <   |S |j0                  |j"                  j3                            |_        |j.                  J |S NF)torch_is_functional_tensorr#   _extra_dispatch_keys_C_dispatch_keysTensor_make_wrapper_subclassshaper   stridestorage_offsetdtypelayoutdevicerequires_grad_set_throw_on_mutable_data_ptrr$   is_inference_mode_enabled	_inductorconfigenable_auto_functionalized_v2is_base_tensorr%   _storage_to_baseuntyped_storage)clsr$   modeextra_dispatch_keysouts        r   __new__zFunctionalTensor.__new__v   si   **4000& 11EHH4K4KD4QQ 	 ll11
 JJ!.t!4DKKM$-:4-@##%dJJKKKK)
, 	//4 ++-&&DD!!#+/( EH%%chh&>&>&@A 
	 ,0+@+@HH,,.,( //;;;
r   c                    |D cg c]5  }|t         j                  t         j                  j                  t        fvr|7 }}|rt
        j                  d|       t        S |i }|t        j                  v rt        |      dk(  sJ |t         j                  j                  j                  j                  t         j                  j                  j                  j                  fv rOt        |      dk(  rt!        |d   t              sJ  |t        j"                  |d   j$                        |d         S t        |      dk(  rt!        |d   t              sJ  |t        j"                  |d   j$                              S t'        d      c c}w )N.FunctionalTensor unrecognized subclass(es): %sr         zqAttempting to use FunctionalTensor on its own. Instead, please use it with a corresponding FunctionalTensorMode())r(   r-   _subclasses
FakeTensorr#   not_implemented_logdebugNotImplementedmetadata_fnslenopsatenis_strides_like_formatdefaultis_contiguousmemory_format
isinstance_from_functional_tensorr$   RuntimeError)r   functypesr   r   tunrecognized_typess          r   __torch_dispatch__z#FunctionalTensor.__torch_dispatch__   sg    
u'8'8'C'CEUVV 
 

 %%@BT "!>F
 #000 v;!###		55==		,,::  4yA~*T!W>N*OOOE99$q',,GaQQt9>ja:J&KKK55d1gllCDD 
 	
M
s   :F	c                 4    dt        | j                         dS )NzFunctionalTensor())reprr$   r   s    r   __repr__zFunctionalTensor.__repr__   s    "4		?"3155r   c                 `   t        j                  |       rJ t        j                  |       }t        t         j                  j
                  j                        }|J |5  t        j                  | |       t        ||      }t        j                  ||       d d d        |S # 1 sw Y   S xY wr   )	r(   r)   _to_functional_tensorr   r+   _TorchDispatchModeKey
FUNCTIONAL_mirror_autograd_meta_tor#   )xx_functionalfunctional_moderA   s       r   to_functionalzFunctionalTensor.to_functional   s     ..q111
 2215 -UXX-K-K-V-VW*** 	>**1l;"<AC**<=	> 
		> 
s    9B##B-c                 j    t        j                  |        t        j                  | j                        S r   )r(   _syncrU   r$   r_   s    r   from_functionalz FunctionalTensor.from_functional   s#    D,,TYY77r   returnc                 @    t        j                  | j                        S r   )r(   _is_functional_tensor_baser$   r_   s    r   r;   zFunctionalTensor.is_base_tensor  s    //		::r   c                 D    t        j                  | j                  |       y r   )r(   _functionalize_replacer$   )r   outputs     r   replace_zFunctionalTensor.replace_  s    $$TYY7r   c                 B    t        j                  | j                         y r   )r(   _functionalize_commit_updater$   r_   s    r   commit_updatezFunctionalTensor.commit_update  s    **4995r   c                 B    t        j                  | j                         y r   )r(   _functionalize_syncr$   r_   s    r   synczFunctionalTensor.sync
  s    !!$)),r   c                 B    t        j                  | j                         y r   )r(   1_functionalize_mark_mutation_hidden_from_autogradr$   r_   s    r   "mark_mutation_hidden_from_autogradz3FunctionalTensor.mark_mutation_hidden_from_autograd  s    ??		Jr   c                 ^   | j                   j                         dk(  r| j                   j                         S | j                   j                         dk(  r(| j                   D cg c]  }|j                          c}S | j                   D cg c]  }|j                          c}S c c}w c c}w )Nr   rF   )r$   dimitemtolist)r   r$   s     r   r   zFunctionalTensor.tolist  su    99==?a99>>##YY]]_!,0II6DDIIK66.2ii8dDKKM88 78s   #B%B*c           	         t        t        j                  j                  j                        j
                  rBt        |D cg c]  }t        |t              s| c}      dk  rt        | (  |i i |ddiS t        | (  |i |S c c}w )NrF   copyT)r   r(   r+   rc   rd   exportrM   rT   boolsuperr   )r   r   r   arg	__class__s       r   r   zFunctionalTensor.to  s}    ehh<<GGHOO4AC:c4+@CABaGwz4D+Cf+Cfd+CDDwz4*6** Bs   B
B
c                     |xs t         j                  j                         }t        |      dkD  r | j                  |g|i |S  | j                  dd|i|S )Nr   r4   r    )r(   cudacurrent_devicerM   r   )r   r4   r   r   s       r   r   zFunctionalTensor.cuda  sX    65::446t9q=47763D3F334773&3F33r   )r2   cpu)r4   c                 6    | j                   j                         S r   )r$   to_denser_   s    r   r   zFunctionalTensor.to_dense2  s    yy!!##r   c                 .    | j                   j                  S r   )r$   r3   r_   s    r   r3   zFunctionalTensor.layout5  s    yyr   r    Nrm   Nr   )Z__name__
__module____qualname____doc__r(   r-   __annotations__r+   rc   rd   	_mode_key,_additional_keys_to_prop_for_wrapper_tensorsaddDispatchKey
ZeroTensorr*   rN   rO   rR   rQ   rS   rP   is_non_overlapping_and_densesizesym_sizer0   
sym_strider1   sym_storage_offsetnumel	sym_numelr~   primr4   rL   dropout
batch_normnative_batch_norm_batch_norm_impl_indexcudnn_batch_normmiopen_batch_norm
atleast_1d
atleast_2d
atleast_3dcartesian_prodconj_physicalalpha_dropoutfeature_dropoutfeature_alpha_dropoutunsafe_chunkmaybe_aliasing_or_mutating_opsr%   r
   rB   r[   r`   staticmethodri   rl   r   r;   rs   rv   ry   r|   r   r   r   r   r!   int8charr   bfloat16uint8bytefloat64doublefloat32floatfloat16halfint32intint64longr   propertyr3   __classcell__r   s   @r   r#   r#   .   s+    ,, ..99I !88PPTT'' 			$$,,		$$22		--55		33;;		##		''		%%		!!))		%%--		))11		$$		  ((		""		%%L( 			&&		!!))		((00		--55		''//		((00		!!))		!!))		!!))		%%--		$$,,		$$,,		&&..		,,44		##++&"& :>(#56=>@)
V6  08; ;86-K9 9+4 'UZZ8D
%\U\\%-@
AC*@H&U[[9D(u}}=F'emm<E&UZZ8D&U]];D
%EKK
8C&U[[9D$    r   r#   c                   R     e Zd Zd fd	Z fdZ fdZddZedefd       Z	 xZ
S )	FunctionalTensorModec                 b   t         |           || _        d| _        g | _        t
        j                  j                  j                  | _	        || _
        |r$t
        j                  j                  j                  nd | _        i | _        i | _        || _        t#        j$                         | _        y r'   )r   __init__r   is_on_stackenter_stackr(   r+   rc   rd   r   pre_dispatchr   PreDispatch_dispatch_key_tokens_tokens_forward_output_allow_token_discoveryweakrefWeakKeyDictionaryr<   )r   r   r   r   r   s       r   r   zFunctionalTensorMode.__init__;  s      77BB(AMUXX11==SW 13 @B# '=# %%' 	r   c                       fd} |       ) j                   j                  d       t                  S  j                   j                  d        S )Nc                  B    j                   t        j                  j                  j                  k(  r-t        t        j                  j                  j                        S t        j                  j                  t        j                  j                  j                        S r   )	r   r(   r+   r   r   r   rc   rd   _get_dispatch_moder_   s   r   _get_prev_modez6FunctionalTensorMode.__enter__.<locals>._get_prev_mode\  sm    !!UXX%9%9%E%EE6HH22==  88....99 r   TF)r   appendr   	__enter__)r   r   r   s   ` r   r   zFunctionalTensorMode.__enter__[  sN    	 ###D)7$&&##E*Kr   c                 b    | j                   j                         }|rt        |   |||       y y r   )r   popr   __exit__)r   abcr   r   s        r   r   zFunctionalTensorMode.__exit__l  s0    &&**,GQ1% r   c                 P    |i } j                   rN|t        j                  j                  j                  j
                  k(  rR|j                  dd         j                  t        j                  j                  j                  j                  |||      S |t        j                  j                  j                  j                  k(  rt        d |j                  j                  D              }t        |dd  |dd        D ]
  \  }}|||<    |j                  dd         j                  t        j                  j                  j                  j                  ||d d |      S |D cg c]@  }t        |t        j                   j"                        s|t        j$                  t&        fvr|B }	}|	rt(        j+                  d|	       t,        S  fd}
|t&        j.                  vrf |
|      r^t        j0                  j3                  |j5                               r1 5   |j6                  |i |}|t,        ur|cd d d        S 	 d d d         fd}d }dd	lm}m}m}  ||      rt        j0                  jA                  |j5                         t        j0                  jB                  jD                        s0 j                   stF        jH                  s
 ||||      S  ||||      S dd
l%m&}m'}  ||||      rrt        j0                  jA                  |j5                         t        j0                  jB                  jD                        rJ  | jP                   jR                  |||      S tU        jV                  t&        |||f      \  }}t        j0                  jY                  t        j0                  jB                  jD                        }t        j0                  j[                  t        j0                  jB                  jD                        }|s|rJ t        j0                  j]                         t        j0                  j_                  t        j0                  jB                  jD                        z  }t        j0                  ja                         jc                  t        j0                  jB                  jD                        t&        jd                  z
  }t        j0                  jg                  ||      5  	 t        jh                  d      }|t&        j.                  v r. ||i |}tU        jV                  t        j$                  ||      }n |jj                  t        j0                  jB                  jD                  g|i |} j                   rs|t        j                  j                  jl                  j                  t        j                  j                  j                  j                  fv rt        jn                  |       tU        jV                  t        j$                  ||      }t        jp                          t        jh                  |       	 d d d        t        j0                  jY                  t        j0                  jB                  jD                        }t        j0                  j[                  t        j0                  jB                  jD                        }|s|rJ ts        d tU        jt                        D              r1|t        j                  j                  jv                  j                  k(  r|S t        jx                  jz                  |j|                  v ri|t        j                  j                  j~                  j                  ur9t        j                  j                  j                         5   ||i | d d d        t        ||||      S c c}w # 1 sw Y   xY w# t        jp                          t        jh                         w xY w# 1 sw Y   xY w# 1 sw Y   dxY w)Nr   c              3   4   K   | ]  }|j                     y wr   )name.0r   s     r   	<genexpr>z:FunctionalTensorMode.__torch_dispatch__.<locals>.<genexpr>~  s     JCsxxJ   rF   rD   c                    j                   r2| t        j                  j                  j                  j
                  k(  ry| t        j                  v ryt        d | j                  j                  D              }|s| j                  j                  ryj                   sj                  r8| j                         r(| j                  dvrt        j                   d|  d       yy)NFTc              3   4   K   | ]  }|j                     y wr   )
alias_infor   s     r   r   zRFunctionalTensorMode.__torch_dispatch__.<locals>._can_decompose.<locals>.<genexpr>  s     $VS^^$Vr   )rO   r   zAt pre-dispatch tracing, we assume that any custom op marked with CompositeImplicitAutograd and have functional schema are safe to not decompose. Found z to be one such op.)r   r(   rN   rO   r   rQ   r#   r   any_schema	arguments
is_mutabler   _can_decompose	namespacewarningswarn)rW   alias_info_presentr   s     r   r   z?FunctionalTensorMode.__torch_dispatch__.<locals>._can_decompose  s     {{tuyy~~'='='E'EE 'FFF "%$Vt||?U?U$V!V!T\\%<%< t00d6I6I6K>>)99MM!!%&9;
  r   c                     t        | t              rJ t        | t        j                        r!t        j                  |       rt        |       S | S r   )rT   r#   r(   r-   r)   )rf   r   s    r   wrapz5FunctionalTensorMode.__torch_dispatch__.<locals>.wrap  sC     "!%5666!U\\*u/J/J1/M'400Hr   c                     | j                   S r   )r$   )rf   s    r   unwrapz7FunctionalTensorMode.__torch_dispatch__.<locals>.unwrap  s    66Mr   r   )can_auto_functionalizedo_auto_functionalizedo_auto_functionalize_v2)handle_effectshas_effectsTc              3   <   K   | ]  }t        |t                y wr   )rT   r#   )r   rf   s     r   r   z:FunctionalTensorMode.__torch_dispatch__.<locals>.<genexpr>3  s        1./s   )Er   r(   rN   rO   r   dtype_layoutr   r[   _to_copyrQ   r2   tupler   r   zip
issubclassrG   rH   r-   r#   rI   rJ   rK   rL   r+   _dispatch_has_kernelr   	decompose*torch._higher_order_ops.auto_functionalizer   r   r   %_dispatch_has_kernel_for_dispatch_keyr   Functionalizeinductor_configr:   torch._higher_order_ops.effectsr   r   r   r   pytreetree_map_only&_dispatch_tls_is_dispatch_key_included&_dispatch_tls_is_dispatch_key_excluded_dispatch_tls_local_include_setDispatchKeySet_dispatch_tls_local_exclude_setremover*   _ForceDispatchKeyGuard#_functionalize_enable_reapply_views_op_dkr   _freeze_functional_tensor_disable_functionalizationr   tree_leaves
lift_freshTaginplace_viewtagsset_source_Tensorutils_mode_utilsno_dispatchr   )r   rW   rX   r   r   schemar   r   rY   rZ   r   rr   r   r   r   r   r   r   args_unwrappedkwargs_unwrappedis_includedis_excludedinclude_to_setexclude_to_setold_apply_viewsouts_unwrappedouts_wrappeds   `                           r   r[   z'FunctionalTensorMode.__torch_dispatch__q  s}   >F;; uyy~~((555

64(..IINN++33UD&  uyy~~((...J4<<3I3IJJ!$T!"Xvabz!: 'IC#&F4L'

64(..IINN++33UD!Hf  
a!2!2!=!=>%,,(899 
 
 %%@BT "!	D (555t$ --diik: "DNND3F3N* *
			
 	
 "
((@@IIK--;;
 {{/"O"O,T4@@/dFCCOtT6*xxEE		UXX11??   "++T\\4v  ,2+?+?ftVn,
(( hhEEHH  ..
 hhEEHH  ..
 +--HH446hh%%ehh&:&:&H&HIJ 	
 HH446==$$22 334 	 XX,,^^L #	K"K"'"K"KD"Q +888%)>%N=M%NN#)#7#7dN$L &1T[[,,::&'& +&N {{!IINN22::!IINN33;;$  ";;NK#)#7#7dN$L 00299/JG#	KJ hhEEHH  ..
 hhEEHH  ..
 +--  ++L9  uyy~~00888 II""dii/EIINN//===((446 &d%f%& +4v|LLG
j V 00299/JG#	K #	K~& &sD   %A__-`/D1_! )`0	`_!+````%rm   c                      y)NTr    )r>   s    r   is_infra_modez"FunctionalTensorMode.is_infra_modeK  s    r   )FFFr   )r   r   r   r   r   r   r[   classmethodr   r,  r   r   s   @r   r   r   :  s6    (@"&
XMt d  r   r   c                  \    t        t        j                  j                  j                        S r   )r   r(   r+   rc   rd   r    r   r   disable_functional_moder/  P  s    uxx==HHIIr   r?   c                 *     d d  fd}|S )Nc                 d    t        | t        j                        rt        j	                  |       S | S r   )rT   r(   r-   r#   ri   rY   s    r   to_funz&dispatch_functionalize.<locals>.to_fun_  s&    a&#11!44r   c                     t        | t              s3t        | t        j                        rt        j                  |       rJ | S t        j
                  |        t        j                  | j                        S r   )rT   r#   r(   r-   r)   rk   rU   r$   r2  s    r   from_funz(dispatch_functionalize.<locals>.from_fund  sT    !-.!U\\* 66q999HA,,QVV44r   c                     t         j                  j                  t         j                  j                  t         j                  j                  j
                              }|5  	5  t        j                  t         j                  
|       }t        j                  t         j                  
|      } |i |}t        j                  t        |      }|cd d d        cd d d        S # 1 sw Y   nxY wd d d        y # 1 sw Y   y xY wr   )
r(   r+   _ExcludeDispatchKeyGuardr  r   r  r	  r
  r-   r#   )r   r   disable_above	func_argsfunc_kwargsfunc_outputsoutputsr5  rW   r?   r3  s          r   innerz%dispatch_functionalize.<locals>.innerm  s    99HH##EHH$8$8$F$FG
  	D 	,,U\\64HI ..u||VVLK:k:L**+;X|TG	 	 	 	 	 	 	s%   "C<%A/C'	C<'C0	,C<<Dr    )rW   r?   r=  r5  r3  s   `` @@r   dispatch_functionalizer>  ]  s    
5
 Lr   c                       e Zd Zedee   dee   fd       Zedeej                  eej                  df   f   defd       Z
ededefd       Zedefd       Zedd
       Zedd       Zedd       Zedd       Zy	)BaseFunctionalizeAPIr   rm   c                      y r   r    r   r   s     r   wrap_tensorsz!BaseFunctionalizeAPI.wrap_tensors}      r   .c                      y r   r    rB  s     r   unwrap_tensorsz#BaseFunctionalizeAPI.unwrap_tensors  s     	r   inner_fc                      y r   r    r   rG  s     r   functionalizez"BaseFunctionalizeAPI.functionalize  rD  r   c                      y r   r    r_   s    r   redispatch_to_nextz'BaseFunctionalizeAPI.redispatch_to_next  rD  r   Nc                      y r   r    r   input_tensoroutput_tensors      r   replacezBaseFunctionalizeAPI.replace  rD  r   c                      y r   r    r   tensors     r   rv   z"BaseFunctionalizeAPI.commit_update  rD  r   c                      y r   r    rS  s     r   ry   zBaseFunctionalizeAPI.sync  rD  r   c                      y r   r    rS  s     r   r|   z7BaseFunctionalizeAPI.mark_mutation_hidden_from_autograd  rD  r   r   )r   r   r   r   r   r   rC  r   r(   r-   rF  r   rJ  r   rL  rQ  rv   ry   r|   r    r   r   r@  r@  |  s    s c
   %,,ellC.?(@@A	 
 X (   N          r   r@  c                        e Zd Z	 ddee   deddf fdZdee   dee   fdZ	de
ej                  eej                  df   eej                     f   defd	Zd
edefdZdefdZddZddZddZddZ xZS )PythonFunctionalizeAPINr?   r   rm   c                 V    t         |           |r|n	t               | _        || _        y r   )r   r   r   r?   r   )r   r?   r   r   s      r   r   zPythonFunctionalizeAPI.__init__  s'     	 D&:&<	(r   r   c                     | j                   5  t        j                  j                  j	                  t        j
                  t        j                  |      cd d d        S # 1 sw Y   y xY wr   )r?   r(   r  _pytreer
  r-   r#   ri   rB  s     r   rC  z#PythonFunctionalizeAPI.wrap_tensors  sH    YY 	;;&&44.<<d	 	 	s   AAA'.c                 |    t         j                  j                  j                  t        t        j
                  |      S r   )r(   r  r[  r
  r#   rl   rB  s     r   rF  z%PythonFunctionalizeAPI.unwrap_tensors  s/     {{""00.>>
 	
r   rG  c                 .    t        || j                        S r   )r>  r?   rI  s     r   rJ  z$PythonFunctionalizeAPI.functionalize  s    %gtyy99r   c                 *    t        j                         S r   )
contextlibnullcontextr_   s    r   rL  z)PythonFunctionalizeAPI.redispatch_to_next  s     %%''r   c                 n    t        |t              sJ t        |t              rJ |j                  |       y r   )rT   r#   rs   rN  s      r   rQ  zPythonFunctionalizeAPI.replace  s2    ,(8999m-=>>>m,r   c                 H    t        |t              sJ |j                          y r   )rT   r#   rv   rS  s     r   rv   z$PythonFunctionalizeAPI.commit_update  s    &"2333r   c                 H    t        |t              sJ |j                          y r   )rT   r#   ry   rS  s     r   ry   zPythonFunctionalizeAPI.sync  s    &"2333r   c                 H    t        |t              sJ |j                          y r   )rT   r#   r|   rS  s     r   r|   z9PythonFunctionalizeAPI.mark_mutation_hidden_from_autograd  s    &"2333113r   r'   r   )r   r   r   r
   r   r   r   r   r   rC  r   r(   r-   r	   rF  r   rJ  r   rL  rQ  rv   ry   r|   r   r   s   @r   rX  rX    s    PU)12)IM)	)s c
 
%,,ellC.?(@$u||BTTU
	
:X :( :(N (-
4r   rX  c                       e Zd Zdee   dee   fdZdeej                  eej                  df   f   deej                  eej                  df   f   fdZ	de
de
fdZdefdZdd
ZddZddZddZy	)CppFunctionalizeAPIr   rm   c                 "    ddl m}  ||d      S Nr   )_wrap_all_tensors_to_functional)level)!torch._functorch.eager_transformsri  r   r   ri  s      r   rC  z CppFunctionalizeAPI.wrap_tensors  s    U.t1==r   .c                 2    ddl m}  ||t                     S Nr   )#_unwrap_all_tensors_from_functional)reapply_views)rk  ro  _reapply_viewsr   r   ro  s      r   rF  z"CppFunctionalizeAPI.unwrap_tensors  s    	
 34~GWXXr   rG  c                 @    t         j                  j                  |      S r   )r(   rW   rJ  rI  s     r   rJ  z!CppFunctionalizeAPI.functionalize  s    zz''00r   c                     t         j                  j                  t         j                  j                  t         j                  j                  j
                              S r   )r(   r+   r7  r  r   r  r_   s    r   rL  z&CppFunctionalizeAPI.redispatch_to_next  s;    xx00HH##EHH$8$8$F$FG
 	
r   Nc                 0    t        j                  ||       y r   r(   rq   rN  s      r   rQ  zCppFunctionalizeAPI.replace      $$\=Ar   c                 .    t        j                  |       y r   r(   ru   rS  s     r   rv   z!CppFunctionalizeAPI.commit_update      **62r   c                 .    t        j                  |       y r   r(   rx   rS  s     r   ry   zCppFunctionalizeAPI.sync      !!&)r   c                 .    t        j                  |       y r   r(   r{   rS  s     r   r|   z6CppFunctionalizeAPI.mark_mutation_hidden_from_autograd      ??Gr   r   )r   r   r   r   r   rC  r   r(   r-   rF  r   rJ  r   rL  rQ  rv   ry   r|   r    r   r   rf  rf    s    >s >c
 >
Y%,,ellC.?(@@AY	u||U5<<#455	6Y1X 1( 1
N 

B3*Hr   rf  c                       e Zd Zd Zdee   dee   fdZdeej                  eej                  df   f   deej                  eej                  df   f   fdZ
dedefdZdefd	ZddZddZddZddZy
)FunctorchFunctionalizeAPIc                     || _         y r   )interpreter)r   r  s     r   r   z"FunctorchFunctionalizeAPI.__init__  s
    &r   r   rm   c                 R    ddl m}  ||| j                  j                               S rh  )rk  ri  r  rj  rl  s      r   rC  z&FunctorchFunctionalizeAPI.wrap_tensors  s!    U.t4;K;K;Q;Q;STTr   .c                 R    ddl m}  ||| j                  j                               S rn  )rk  ro  r  functionalize_add_back_viewsrr  s      r   rF  z(FunctorchFunctionalizeAPI.unwrap_tensors  s*    	
 3 0 0 M M O
 	
r   rG  c                     t         j                  j                  || j                  j	                         rd      S d      S )Nmutations_and_views	mutations)r  )r(   rW   rJ  r  r  rI  s     r   rJ  z'FunctorchFunctionalizeAPI.functionalize
  sN    zz'' ##@@B & ( 
 	

 ! ( 
 	
r   c                 6    | j                   j                         S r   )r  lowerr_   s    r   rL  z,FunctorchFunctionalizeAPI.redispatch_to_next  s    %%''r   Nc                 0    t        j                  ||       y r   rv  rN  s      r   rQ  z!FunctorchFunctionalizeAPI.replace  rw  r   c                 .    t        j                  |       y r   ry  rS  s     r   rv   z'FunctorchFunctionalizeAPI.commit_update  rz  r   c                 .    t        j                  |       y r   r|  rS  s     r   ry   zFunctorchFunctionalizeAPI.sync  r}  r   c                 .    t        j                  |       y r   r  rS  s     r   r|   z<FunctorchFunctionalizeAPI.mark_mutation_hidden_from_autograd   r  r   r   )r   r   r   r   r   r   rC  r   r(   r-   rF  r   rJ  r   rL  rQ  rv   ry   r|   r    r   r   r  r    s    'Us Uc
 U
	
%,,ellC.?(@@A	
	u||U5<<#455	6	

X 
( 
(N (B3*Hr   r  rT  c                 d    t        | t              rt        j                  | j                        S | S r   )rT   r#   r(   rU   r$   )rT  s    r   mb_unwrap_functional_tensorr  $  s'    &*+,,V[[99Mr   )4r_  r   r   abcr   r   typingr   r   r   r   r	   r
   r   r   r(   torch._inductor.configr8   r9   r  torch.utils._pytreer  r[  r	  torch._Cr   rq  
torch._opsr   torch._subclasses.meta_utilsr   torch.utils._python_dispatchr   r   r   r   _logginggetArtifactLoggerr   rI   r!   r-   r#   r   contextmanagerr/  r>  r@  rX  rf  r  r  r    r   r   <module>r     s       # T T T  0 0 $ $ K 6 6  nn66xARS "I u|| I XS, Sl J J ?S>T '; >!3 !H/41 /4d!H. !HH+H 4 +H\ r   