
    sh*                        S SK r S SKrS SKrS SKJrJr  S SK Jr  S SKJrJ	r	J
r
Jr  S SKrS SKJs  Jr  S SKJr  S SKJr  S SKJr  S SKJrJrJrJr  \R:                  R=                  \S	5      r S
 r! " S S\RD                  5      r# " S S\5      r$\ RJ                  S 5       r&\$" 5       4S\$4S jjr' " S S\5      r( " S S\(5      r) " S S\(5      r* " S S\(5      r+S\RD                  4S jr,g)    N)ABCabstractmethod)AbstractContextManager)AnyCallableOptional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                     ^  U 4S jnU$ )Nc                 0   > U R                   " U0 0 UETED6$ N)to)selfargskwargsextra_kwargss      w/Users/tiagomarins/Projetos/claudeai/copy_bank/venv/lib/python3.13/site-packages/torch/_subclasses/functional_tensor.py_&_conversion_method_template.<locals>._(   s"    ww; :6 :\ :;;     )r   r   s   ` r   _conversion_method_templater   '   s    < Hr   c                     ^  \ rS rSr% Sr\R                  \S'   \R                  R                  R                  r\R                  R                  R                  \R                  R                  R                  5      r\R"                  R$                  R&                  R(                  \R"                  R$                  R&                  R*                  \R"                  R$                  R,                  R(                  \R"                  R$                  R.                  R(                  \R"                  R$                  R0                  R(                  \R"                  R$                  R2                  R(                  \R"                  R$                  R4                  R(                  \R"                  R$                  R6                  R(                  \R"                  R$                  R8                  R(                  \R"                  R$                  R:                  R(                  \R"                  R$                  R<                  R(                  \R"                  R$                  R>                  R(                  \R"                  R$                  R@                  R(                  \R"                  RB                  RD                  R(                  /r#Sr$\%S    \S'   S r&SS jr'S	\(4S
 jr)\*S 5       r+S r,S	\-4S jr.SS jr/SS jr0SS jr1SS jr2S	\34S jr4U 4S jr5SS jr6\7" \Rp                  S9r9\7" \RD                  " S5      S9r:\7" \Rv                  S9r;\7" \Rx                  S9r=\7" \R|                  S9r?\7" \R                  S9rA\7" \RZ                  S9r-\7" \R                  S9rC\7" \R                  S9rE\7" \R                  S9rGS rH\IS 5       rJS rKSrLU =rM$ )FunctionalTensor.   a"  
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                    [         R                  " U5      (       d   e[        R                  [         R                  R                  U5      -  n[         R                  R                  U UR                  [        U5      (       d  UR                  5       OS [        U5      (       d  UR                  5       OS S UR                  UR                  UR                  SUR                  S SSU5      n[         R                  R!                  U5        Xl        UR$                  (       d  [         R&                  " 5       (       a  [         R(                  R*                  R,                  (       a  UR/                  5       (       a/  S Ul        XBR2                  UR"                  R5                  5       '   U$ UR2                  UR"                  R5                  5          Ul        UR0                  c   eU$ 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#   export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__FunctionalTensor.__new__b   s{   **40000& 11EHH4K4KD4QQ 	 ll11
 JJ!.t!4!4DKKM$-:4-@-@##%dJJKKKK)
, 	//4 //11&&DD!!##+/( EH%%chh&>&>&@A 
	 ,0+@+@HH,,.,( //;;;
r   r   c                 \   U Vs/ s H:  nU[         R                  [         R                  R                  [        4;  d  M8  UPM<     nnU(       a  [
        R                  SU5        [        $ Uc  0 nU[        R                  ;   Ga  [        U5      S:X  d   eU[         R                  R                  R                  R                  [         R                  R                  R                  R                  4;   aV  [        U5      S:X  a  [!        US   [        5      (       d   eU" [         R"                  " US   R$                  5      US   5      $ [        U5      S:X  a  [!        US   [        5      (       d   eU" [         R"                  " US   R$                  5      5      $ ['        S5      es  snf )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__#FunctionalTensor.__torch_dispatch__   so    
u'8'8'C'CEUVV  	 

 %%@BT "!>F
 #000 v;!###		55==		,,::  4yA~*T!W>N*O*OOOE99$q',,GaQQt9>ja:J&K&KKK55d1gllCDD 
 	
M
s   7F) F)returnc                 4    S[        U R                  5       S3$ )NzFunctionalTensor())reprr#   r   s    r   __repr__FunctionalTensor.__repr__   s    "4		?"3155r   c                 x   [         R                  " U 5      (       a   e[         R                  " U 5      n[        [         R                  R
                  R                  5      nUc   eU   [         R                  " X5        [        X5      n[         R                  " X5        S S S 5        U$ ! , (       d  f       W$ = fr   )	r'   r(   _to_functional_tensorr   r*   _TorchDispatchModeKey
FUNCTIONAL_mirror_autograd_meta_tor!   )xx_functionalfunctional_moderA   s       r   to_functionalFunctionalTensor.to_functional   s     ..q1111
 2215 -UXX-K-K-V-VW*****1;"<AC**<=  
	 _ 
s   (8B**
B9c                 n    [         R                  " U 5        [         R                  " U R                  5      $ r   )r'   _syncrV   r#   rb   s    r   from_functional FunctionalTensor.from_functional   s#    D,,TYY77r   c                 B    [         R                  " U R                  5      $ r   )r'   _is_functional_tensor_baser#   rb   s    r   r;   FunctionalTensor.is_base_tensor   s    //		::r   c                 F    [         R                  " U R                  U5        g r   )r'   _functionalize_replacer#   )r   outputs     r   replace_FunctionalTensor.replace_   s    $$TYY7r   c                 D    [         R                  " U R                  5        g r   )r'   _functionalize_commit_updater#   rb   s    r   commit_updateFunctionalTensor.commit_update   s    **4995r   c                 D    [         R                  " U R                  5        g r   )r'   _functionalize_syncr#   rb   s    r   syncFunctionalTensor.sync   s    !!$)),r   c                 D    [         R                  " U R                  5        g r   )r'   1_functionalize_mark_mutation_hidden_from_autogradr#   rb   s    r   "mark_mutation_hidden_from_autograd3FunctionalTensor.mark_mutation_hidden_from_autograd   s    ??		Jr   c                 j   U R                   R                  5       S:X  a  U R                   R                  5       $ U R                   R                  5       S:X  a*  U R                    Vs/ s H  oR                  5       PM     sn$ U R                    Vs/ s H  oR                  5       PM     sn$ s  snf s  snf )Nr   rG   )r#   dimitemtolist)r   r#   s     r   r   FunctionalTensor.tolist   sy    99==?a99>>##YY]]_!,0II6IDIIKI66.2ii8idKKMi88 78s   %B+B0c           	      @  > [        [        R                  R                  R                  5      R
                  (       aM  [        U Vs/ s H  n[        U[        5      (       d  M  UPM     sn5      S::  a  [        TU ](  " U0 0 UESS0ED6$ [        TU ](  " U0 UD6$ s  snf )NrG   copyT)r   r'   r*   rg   rh   r6   rN   rU   boolsuperr   )r   r   r   arg	__class__s       r   r   FunctionalTensor.to  s    ehh<<GGHOO4A4C:c4+@C4ABaGwz4D+Cf+Cfd+CDDwz4*6** Bs   B$Bc                     U=(       d    [         R                  R                  5       n[        U5      S:  a  U R                  " U/UQ70 UD6$ U R                  " SSU0UD6$ )Nr   r3   r   )r'   cudacurrent_devicerN   r   )r   r3   r   r   s       r   r   FunctionalTensor.cuda  sT    65::446t9q=7763D3F33773&3F33r   r1   cpu)r3   c                 6    U R                   R                  5       $ r   )r#   to_denserb   s    r   r   FunctionalTensor.to_dense  s    yy!!##r   c                 .    U R                   R                  $ r   )r#   r2   rb   s    r   r2   FunctionalTensor.layout"  s    yyr   c                 4    [        U R                  5       5      $ r   )r   r   rb   s    r   __bool__FunctionalTensor.__bool__&  s    DIIK  r   r   Nr^   Nr   )N__name__
__module____qualname____firstlineno____doc__r'   r,   __annotations__r*   rg   rh   	_mode_key,_additional_keys_to_prop_for_wrapper_tensorsaddDispatchKey
ZeroTensorr)   rO   rP   rS   rR   rT   rQ   is_non_overlapping_and_densesizesym_sizer/   
sym_strider0   sym_storage_offsetnumel	sym_numelr   primr3   rM   r$   r   rB   r\   strrc   staticmethodrm   rq   r   r;   ry   r}   r   r   r   r   r   r   r   int8charr   bfloat16uint8bytefloat64doublefloat32floatfloat16halfint32intint64longr   propertyr2   r   __static_attributes____classcell__r   s   @r   r!   r!   .   s    ,, ..99I !88PPTT'' 			$$,,		$$22		--55		33;;		##		''		%%		!!))		%%--		))11		$$		  ((		""		%%L$ :>(#56=?B)
V6# 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                   f   ^  \ rS rSrS	U 4S jjrU 4S jrU 4S jrS
S jr\S\	4S j5       r
SrU =r$ )FunctionalTensorModei*  c                 h  > [         TU ]  5         X l        SU l        / U l        [
        R                  R                  R                  U l	        Xl
        U(       a$  [
        R                  R                  R                  OS U l        0 U l        0 U l        X0l        ["        R$                  " 5       U l        g r&   )r   __init__r6   is_on_stackenter_stackr'   r*   rg   rh   r   pre_dispatchr   PreDispatch_dispatch_key_tokens_tokens_forward_output_allow_token_discoveryweakrefWeakKeyDictionaryr<   )r   r   r6   r   r   s       r   r   FunctionalTensorMode.__init__+  s      77BB(AMUXX11==SW 13 @B# '=# %%' 	r   c                    >^  U 4S jnU" 5       c)  T R                   R                  S5        [        TT ]  5       $ T R                   R                  S5        T $ )Nc                  D  > T R                   [        R                  R                  R                  :X  a-  [        [        R                  R                  R                  5      $ [        R                  R                  [        R                  R                  R                  5      $ r   )	r   r'   r*   r   r   r   rg   rh   _get_dispatch_moderb   s   r   _get_prev_mode6FunctionalTensorMode.__enter__.<locals>._get_prev_modeL  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   FunctionalTensorMode.__enter__K  sN    	 ###D)7$&&##E*Kr   c                 j   > U R                   R                  5       nU(       a  [        TU ]  XU5        g g r   )r   popr   __exit__)r   abcr   r   s        r   r   FunctionalTensorMode.__exit__\  s.    &&**,GQ1% r   c                   ^ ^^^ Tc  0 mT R                   (       GaO  T[        R                  R                  R                  R
                  :X  aQ  TR                  SS 5        T R                  [        R                  R                  R                  R                  X#T5      $ T[        R                  R                  R                  R                  :X  a  [        S TR                  R                   5       5      n[        USS  USS  5       H
  u  pgUTU'   M     TR                  SS 5        T R                  [        R                  R                  R                  R                  X#S S T5      $ U Vs/ s HL  n[        U[        R                   R"                  5      (       a  M.  U[        R$                  [&        4;  d  MJ  UPMN     n	nU	(       a  [(        R+                  SU	5        [,        $ U 4S jn
T[&        R.                  ;  aq  U
" T5      (       ad  [        R0                  R3                  TR5                  5       5      (       a2  T    TR6                  " U0 TD6nU[,        La  UsS S S 5        $  S S S 5        U 4S jnS nSS	KJnJnJn  U" T5      (       a  [        R0                  RA                  TR5                  5       [        R0                  RB                  RD                  5      (       dA  SS K#J$s  J%n  T R                   (       d  URL                  (       d  U" T TUT5      $ U" T TUT5      $ SS
K'J(nJ)n  U" TUT5      (       aw  [        R0                  RA                  TR5                  5       [        R0                  RB                  RD                  5      (       a   eU" T RT                  T RV                  TUT5      $ [X        RZ                  " [&        XT45      u  mn[        R0                  R]                  [        R0                  RB                  RD                  5      n[        R0                  R_                  [        R0                  RB                  RD                  5      nU(       d	  U(       a   e[        R0                  Ra                  5       [        R0                  Rc                  [        R0                  RB                  RD                  5      -  n[        R0                  Re                  5       Rg                  [        R0                  RB                  RD                  5      [&        Rh                  -
  n[        R0                  Rk                  UU5          [        Rl                  " S5      nT[&        R.                  ;   a0  T" T0 UD6n[X        RZ                  " [        R$                  UU5      nGOnTRn                  " [        R0                  RB                  RD                  /TQ70 UD6nT R                   (       a  T[        R                  R                  Rp                  R                  [        R                  R                  R                  R                  4;   a  UUU4S jnU" 5       (       au  [        Rr                  " TS   5      (       aW  [        R                  R                  Rt                  R                  [        Rv                  " TS   5      TS   R                  S9  O[        Rx                  " U5        [X        RZ                  " [        R$                  UU5      n[        Rz                  " 5         [        Rl                  " U5         S S S 5        [        R0                  R]                  [        R0                  RB                  RD                  5      n[        R0                  R_                  [        R0                  RB                  RD                  5      nU(       d	  U(       a   e[}        S [X        R~                  " W5       5       5      (       a2  T[        R                  R                  R                  R                  :X  a  U$ [        R                  R                  TR                  ;   aj  T[        R                  R                  R                  R                  La9  [        R                  R                  R                  5          T" U0 TD6  S S S 5        [        TUTU5      $ s  snf ! , (       d  f       GNy= f! [        Rz                  " 5         [        Rl                  " W5        f = f! , (       d  f       GN= f! , (       d  f       Nu= f)Nr   c              3   8   #    U  H  oR                   v   M     g 7fr   )name.0r   s     r   	<genexpr>:FunctionalTensorMode.__torch_dispatch__.<locals>.<genexpr>n  s     J3ICxx3I   rG   rE   c                   > TR                   (       a3  U [        R                  R                  R                  R
                  :X  a  gSSKJn  U" U 5      (       a  g[        S U R                  R                   5       5      nU(       d  U R                  R                  (       a  gTR                   (       aR  TR                  (       a@  U R                  S;  a/  U R                  5       (       a  [        R                   " SU  S35        ggg)	NFr   )#_should_decompose_because_unsafe_opTc              3   8   #    U  H  oR                   v   M     g 7fr   )
alias_infor   s     r   r   RFunctionalTensorMode.__torch_dispatch__.<locals>._can_decompose.<locals>.<genexpr>  s     $V?U^^?Ur   )rP   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.)r6   r'   rO   rP   dropoutrR   torch._decompr   any_schema	arguments
is_mutabler   	namespace_can_decomposewarningswarn)rX   r   alias_info_presentr   s      r   r   ?FunctionalTensorMode.__torch_dispatch__.<locals>._can_decompose  s     {{tuyy~~'='='E'EE J2488 "%$Vt||?U?U$V!V!T\\%<%< {{$$~~-==$BUBUBWBW %%)F*=?
 ! r   c                    > [        U [        5      (       a   e[        U [        R                  5      (       a'  [        R                  " U 5      (       a  [        U T5      $ U $ r   )rU   r!   r'   r,   r(   )rj   r   s    r   wrap5FunctionalTensorMode.__torch_dispatch__.<locals>.wrap  sL     "!%56666!U\\**u/J/J1/M/M'400Hr   c                     U R                   $ r   )r#   )rj   s    r   unwrap7FunctionalTensorMode.__torch_dispatch__.<locals>.unwrap  s    66Mr   r   )can_auto_functionalizedo_auto_functionalizedo_auto_functionalize_v2)handle_effectshas_effectsTc                     > T[         R                  R                  R                  R                  :H  =(       a!    ST;   =(       a    TS   T S   R
                  :g  $ )zB
Return True if the output of the op must be copied, not an alias
r1   r   )r'   rO   rP   _to_copyrR   r1   )args_unwrappedrX   r   s   r   	must_copy:FunctionalTensorMode.__torch_dispatch__.<locals>.must_copy  sQ     %)EIINN,C,C,K,K$K %S(/6(9%S(.w>!;L;R;R(R!"r   r   c              3   B   #    U  H  n[        U[        5      v   M     g 7fr   )rU   r!   )r   rj   s     r   r   r   A  s"      9A 1.//9s   )Jr6   r'   rO   rP   r   dtype_layoutr   r\   r  rR   r1   tupler   r   zip
issubclassrH   rI   r,   r!   rJ   rK   rL   rM   r*   _dispatch_has_kernelr   	decompose*torch._higher_order_ops.auto_functionalizer  r	  r
  %_dispatch_has_kernel_for_dispatch_keyr   Functionalizetorch._inductor.configr8   r9   r:   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   r(   _assert_tensor_metadatarV   _freeze_functional_tensor_disable_functionalizationr   tree_leaves
lift_freshTaginplace_viewtagsset_source_Tensorutils_mode_utilsno_dispatchr   )r   rX   rY   r   r   schemar   r   rZ   r[   r   rr  r  r  r	  r
  inductor_configr  r  kwargs_unwrappedis_includedis_excludedinclude_to_setexclude_to_setold_apply_viewsouts_unwrappedouts_wrappedr  r  s   ``  `                        @r   r\   'FunctionalTensorMode.__torch_dispatch__a  s   >F;;; uyy~~((555

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

64(..IINN++33U!Hf  
a!2!2!=!=>  %,,(899  	 
 %%@BT "!'	T (555t$$ --diik::NND3F3N* * 
			
 	
 "
 
((@@IIK--;;
 
 =<{{/"O"O,T4vFF/dD&IIOtT6**xxEE		UXX11??    "++T\\4v  ,2+?+?fVn,
(( 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9K"'"K"KD"Q +888%)>%N=M%NN#)#7#7dN$L &*[[,,::&'& +&N {{!IINN22::!IINN33;;$ 
	"  ){{u/J/J .q 10 0
 !&		 F F N N$)$A$A.QRBS$T*8*;*A*A !O !"
 !& ? ? O#)#7#7dN$L 00299/Ju Mx hhEEHH  ..
 hhEEHH  ..
 +--  ++L9   uyy~~00888 II""dii/EIINN//===((446d%f% 7 +4v|LLC
z B 00299/Ju MLl 76sO   /-c c<ccd
Gc.+d8	d0
c+.-dd
d-0
d>r^   c                     g)NTr   )r>   s    r   is_infra_mode"FunctionalTensorMode.is_infra_modeY  s    r   )
r   r   r   r<   r   r   r   r6   r   r   )FFFr   )r   r   r   r   r   r   r   r\   classmethodr   rC  r   r   r   s   @r   r   r   *  s6    (@"&
vMp d  r   r   c                  \    [        [        R                  R                  R                  5      $ r   )r   r'   r*   rg   rh   r   r   r   disable_functional_moderG  ^  s    uxx==HHIIr   r?   c                 ,   ^ ^^^ S mS mUU UU4S jnU$ )Nc                 n    [        U [        R                  5      (       a  [        R	                  U 5      $ U $ r   )rU   r'   r,   r!   rm   rZ   s    r   to_fun&dispatch_functionalize.<locals>.to_funm  s)    a&&#11!44r   c                    [        U [        5      (       d>  [        U [        R                  5      (       a  [        R                  " U 5      (       a   eU $ [        R
                  " U 5        [        R                  " U R                  5      $ r   )rU   r!   r'   r,   r(   rp   rV   r#   rJ  s    r   from_fun(dispatch_functionalize.<locals>.from_funr  s]    !-..!U\\** 66q9999HA,,QVV44r   c                  *  > [         R                  R                  [         R                  R                  [         R                  R                  R
                  5      5      nU   T	   [        R                  " [         R                  T
U 5      n[        R                  " [         R                  T
U5      nT" U0 UD6n[        R                  " [        TU5      nUsS S S 5        sS S S 5        $ ! , (       d  f       O= fS S S 5        g ! , (       d  f       g = fr   )
r'   r*   _ExcludeDispatchKeyGuardr#  r   r  r  r  r,   r!   )r   r   disable_above	func_argsfunc_kwargsfunc_outputsoutputsrN  rX   r?   rK  s          r   inner%dispatch_functionalize.<locals>.inner{  s    99HH##EHH$8$8$F$FG
 D,,U\\64HI ..u||VVLK:k:L**+;X|TG !D]]DD]]]s%   "D%A2C*	D*
C8	4D
Dr   )rX   r?   rW  rN  rK  s   `` @@r   dispatch_functionalizerY  k  s    
5
 
 Lr   c                      \ rS rSr\S\\   S\\   4S j5       r\S\\	R                  \\	R                  S4   4   S\4S j5       r\S\S\4S j5       r\S\4S	 j5       r\SS j5       r\SS j5       r\SS j5       r\SS j5       rSrg
)BaseFunctionalizeAPIi  r   r^   c                     g r   r   r   r   s     r   wrap_tensors!BaseFunctionalizeAPI.wrap_tensors      r   .c                     g r   r   r]  s     r   unwrap_tensors#BaseFunctionalizeAPI.unwrap_tensors  s     	r   inner_fc                     g r   r   r   rd  s     r   functionalize"BaseFunctionalizeAPI.functionalize  r`  r   c                     g r   r   rb   s    r   redispatch_to_next'BaseFunctionalizeAPI.redispatch_to_next  r`  r   Nc                     g r   r   r   input_tensoroutput_tensors      r   replaceBaseFunctionalizeAPI.replace  r`  r   c                     g r   r   r   tensors     r   r}   "BaseFunctionalizeAPI.commit_update  r`  r   c                     g r   r   rs  s     r   r   BaseFunctionalizeAPI.sync  r`  r   c                     g r   r   rs  s     r   r   7BaseFunctionalizeAPI.mark_mutation_hidden_from_autograd  r`  r   r   r   )r   r   r   r   r   r  r   r^  r	   r'   r,   rb  r   rg  r   rj  rp  r}   r   r   r   r   r   r   r[  r[    s    s c
   %,,ellC.?(@@A	 
 X (   $:          r   r[  c                     ^  \ rS rSr SS\\   S\SS4U 4S jjjrS\\	   S\\	   4S jr
S\\R                  \\R                  S	4   \\R                     4   S\	4S
 jrS\S\4S jrS\4S jrSS jrSS jrSS jrSS jrSrU =r$ )PythonFunctionalizeAPIi  Nr?   r   r^   c                 ^   > [         TU ]  5         U(       a  UO	[        5       U l        X l        g r   )r   r   r   r?   r   )r   r?   r   r   s      r   r   PythonFunctionalizeAPI.__init__  s%     	 D&:&<	(r   r   c                     U R                      [        R                  R                  R	                  [        R
                  [        R                  U5      sS S S 5        $ ! , (       d  f       g = fr   )r?   r'   r3  _pytreer  r,   r!   rm   r]  s     r   r^  #PythonFunctionalizeAPI.wrap_tensors  s=    YY;;&&44.<<d YYs   AA
A,.c                 |    [         R                  R                  R                  [        [        R
                  U5      $ r   )r'   r3  r  r  r!   rq   r]  s     r   rb  %PythonFunctionalizeAPI.unwrap_tensors  s/     {{""00.>>
 	
r   rd  c                 ,    [        XR                  5      $ r   )rY  r?   rf  s     r   rg  $PythonFunctionalizeAPI.functionalize  s    %gyy99r   c                 ,    [         R                  " 5       $ r   )
contextlibnullcontextrb   s    r   rj  )PythonFunctionalizeAPI.redispatch_to_next  s     %%''r   c                     [        U[        5      (       d   e[        U[        5      (       a   eUR                  U5        g r   )rU   r!   ry   rm  s      r   rp  PythonFunctionalizeAPI.replace  s8    ,(89999m-=>>>>m,r   c                 R    [        U[        5      (       d   eUR                  5         g r   )rU   r!   r}   rs  s     r   r}   $PythonFunctionalizeAPI.commit_update  s"    &"23333r   c                 R    [        U[        5      (       d   eUR                  5         g r   )rU   r!   r   rs  s     r   r   PythonFunctionalizeAPI.sync  s    &"23333r   c                 R    [        U[        5      (       d   eUR                  5         g r   )rU   r!   r   rs  s     r   r   9PythonFunctionalizeAPI.mark_mutation_hidden_from_autograd  s"    &"23333113r   )r?   r   r&   r   )r   r   r   r   r   r   r   r   r  r   r^  r	   r'   r,   listrb  r   rg  r   rj  rp  r}   r   r   r   r   r   s   @r   r{  r{    s    PU)12)IM)	) )s c
 
%,,ellC.?(@$u||BTTU
	
:X :( :($: (-
4 4r   r{  c                      \ rS rSrS\\   S\\   4S jrS\\R                  \\R                  S4   4   S\\R                  \\R                  S4   4   4S jr
S\S\4S jrS\4S	 jrSS jrSS jrSS jrSS jrSrg
)CppFunctionalizeAPIi  r   r^   c                     SSK Jn  U" USS9$ Nr   )_wrap_all_tensors_to_functional)level)!torch._functorch.eager_transformsr  r   r   r  s      r   r^   CppFunctionalizeAPI.wrap_tensors  s    U.t1==r   .c                 ,    SSK Jn  U" U[        5       S9$ Nr   )#_unwrap_all_tensors_from_functional)reapply_views)r  r  _reapply_viewsr   r   r  s      r   rb  "CppFunctionalizeAPI.unwrap_tensors  s    	
 34~GWXXr   rd  c                 @    [         R                  R                  U5      $ r   )r'   rX   rg  rf  s     r   rg  !CppFunctionalizeAPI.functionalize  s    zz''00r   c                     [         R                  R                  [         R                  R                  [         R                  R                  R
                  5      5      $ r   )r'   r*   rQ  r#  r   r  rb   s    r   rj  &CppFunctionalizeAPI.redispatch_to_next  s;    xx00HH##EHH$8$8$F$FG
 	
r   Nc                 0    [         R                  " X5        g r   r'   rw   rm  s      r   rp  CppFunctionalizeAPI.replace      $$\Ar   c                 0    [         R                  " U5        g r   r'   r|   rs  s     r   r}   !CppFunctionalizeAPI.commit_update      **62r   c                 0    [         R                  " U5        g r   r'   r   rs  s     r   r   CppFunctionalizeAPI.sync      !!&)r   c                 0    [         R                  " U5        g r   r'   r   rs  s     r   r   6CppFunctionalizeAPI.mark_mutation_hidden_from_autograd       ??Gr   r   r   )r   r   r   r   r  r   r^  r	   r'   r,   rb  r   rg  r   rj  rp  r}   r   r   r   r   r   r   r  r    s    >s >c
 >
Y%,,ellC.?(@@AY	u||U5<<#455	6Y1X 1( 1
$: 

B3*Hr   r  c                   
   \ rS rSrS rS\\   S\\   4S jrS\\	R                  \\	R                  S4   4   S\\	R                  \\	R                  S4   4   4S jrS\S\4S	 jrS\4S
 jrSS jrSS jrSS jrSS jrSrg)FunctorchFunctionalizeAPIi  c                     Xl         g r   interpreter)r   r  s     r   r   "FunctorchFunctionalizeAPI.__init__  s    &r   r   r^   c                 J    SSK Jn  U" XR                  R                  5       S9$ r  )r  r  r  r  r  s      r   r^  &FunctorchFunctionalizeAPI.wrap_tensors  s    U.t;K;K;Q;Q;STTr   .c                 J    SSK Jn  U" XR                  R                  5       S9$ r  )r  r  r  functionalize_add_back_viewsr  s      r   rb  (FunctorchFunctionalizeAPI.unwrap_tensors  s(    	
 3 0 0 M M O
 	
r   rd  c                     [         R                  R                  UU R                  R	                  5       (       a  SS9$ SS9$ )Nmutations_and_views	mutations)r%  )r'   rX   rg  r  r  rf  s     r   rg  'FunctorchFunctionalizeAPI.functionalize  sQ    zz'' ##@@BB & ( 
 	

 ! ( 
 	
r   c                 6    U R                   R                  5       $ r   )r  lowerrb   s    r   rj  ,FunctorchFunctionalizeAPI.redispatch_to_next"  s    %%''r   Nc                 0    [         R                  " X5        g r   r  rm  s      r   rp  !FunctorchFunctionalizeAPI.replace%  r  r   c                 0    [         R                  " U5        g r   r  rs  s     r   r}   'FunctorchFunctionalizeAPI.commit_update(  r  r   c                 0    [         R                  " U5        g r   r  rs  s     r   r   FunctorchFunctionalizeAPI.sync+  r  r   c                 0    [         R                  " U5        g r   r  rs  s     r   r   <FunctorchFunctionalizeAPI.mark_mutation_hidden_from_autograd.  r  r   r  r   )r   r   r   r   r   r  r   r^  r	   r'   r,   rb  r   rg  r   rj  rp  r}   r   r   r   r   r   r   r  r    s    'Us Uc
 U
	
%,,ellC.?(@@A	
	u||U5<<#455	6	

X 
( 
($: (B3*Hr   r  rt  c                 p    [        U [        5      (       a   [        R                  " U R                  5      $ U $ r   )rU   r!   r'   rV   r#   )rt  s    r   mb_unwrap_functional_tensorr  2  s*    &*++,,V[[99Mr   )-r  r   r   abcr   r   r   typingr   r   r   r	   r'   torch.utils._pytreer3  r  r  torch._Cr
   r  
torch._opsr   torch._subclasses.meta_utilsr   torch.utils._python_dispatchr   r   r   r   _logginggetArtifactLoggerr   rJ   r   r,   r!   r   contextmanagerrG  rY  r[  r{  r  r  r  r   r   r   <module>r     s       # - 1 1  $ $ K 6 6  nn66xARS "y!u|| y!xq, qh	 J J ?S>T '; >!3 !H/41 /4d!H. !HH+H 4 +H\ r   