
    %Vji݅                        d dl Z d dlZd dlZd dlmZmZ d dl mZ d dlmZm	Z	m
Z
mZ d dl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j                            ed	          Z d
 Z! G d dej"                  Z# G d de          Z$e j%        d             Z& e$            fde$fdZ' G d de          Z( G d de(          Z) G d de(          Z* G d de(          Z+dej"        fdZ,dS )    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                        fd}|S )Nc                 &     | j         |i i |S N)to)selfargskwargsextra_kwargss      ]/root/voice-cloning/.venv/lib/python3.11/site-packages/torch/_subclasses/functional_tensor.py_z&_conversion_method_template.<locals>._(   s%    tw; :6 :\ :;;;     )r   r   s   ` r   _conversion_method_templater   '   s#    < < < < < Hr   c                       e Zd ZU dZej        ed<   ej        j        j	        Z
e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        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        j        j        ej        j        j        j        ej        j        j        j        ej        j         j!        j        gZ"dZ#e$d          ed<   d Z%ddZ&de'fd	Z(e)d
             Z*d Z+de,fdZ-ddZ.ddZ/ddZ0ddZ1de2fdZ3 fdZ4ddZ5 e6ej7                  Z8 e6 ej!        d                    Z9 e6ej:                  Z: e6ej;                  Z< e6ej=                  Z> e6ej?                  Z@ e6ej,                  Z, e6ejA                  ZB e6ejC                  ZD e6ejE                  ZFd ZGeHd             ZId ZJ xZKS )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                 *   t          j        |          sJ t          j        t           j                            |          z  }t           j                            | |j        t          |          s|
                                nd t          |          s|                                nd d |j        |j        |j        d|j        d dd|          }t           j                            |           ||_        |j        st          j                    rt           j        j        j        ro|                                r)d |_        ||j        |j                                        <   n2|j        |j                                                 |_        |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!   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__zFunctionalTensor.__new__b   s   *400000& 1EH4K4KD4Q4QQ 	 l11
 J!.t!4!4>DKKMMM$-:4-@-@J##%%%dJKK)
 
, 	//444 	</11	< &D	<
 !!## 	<+/( EH%ch&>&>&@&@AA+/+@H,,..,( /;;;
r   r   c                    d |D             }|r"t                               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 r_t          |          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          )Nc                 \    g | ])}|t           j        t           j        j        t          fv'|*S r   )r%   r*   _subclasses
FakeTensorr    .0ts     r   
<listcomp>z7FunctionalTensor.__torch_dispatch__.<locals>.<listcomp>   s=     
 
 
u'8'CEUVVV VVVr   .FunctionalTensor unrecognized subclass(es): %sr         zqAttempting to use FunctionalTensor on its own. Instead, please use it with a corresponding FunctionalTensorMode())not_implemented_logdebugNotImplementedr    metadata_fnslenr%   opsatenis_strides_like_formatdefaultis_contiguousmemory_format
isinstance_from_functional_tensorr!   RuntimeError)r   functypesr   r   unrecognized_typess         r   __torch_dispatch__z#FunctionalTensor.__torch_dispatch__   s`   
 

 
 

  	"%%@BT   "!>F
 #000 v;;!####	5=	,:   4yyA~~*T!W>N*O*O~~OtE9$q',GGaQQQt99>>ja:J&K&K>>K45d1glCCDDD 
 
 	
r   returnc                 2    dt          | j                   dS )NzFunctionalTensor())reprr!   r   s    r   __repr__zFunctionalTensor.__repr__   s    54	??5555r   c                 P   t          j        |           rJ t          j        |           }t          t           j        j        j                  }|J |5  t          j        | |           t          ||          }t          j        ||           d d d            n# 1 swxY w Y   |S r   )	r%   r&   _to_functional_tensorr   r(   _TorchDispatchModeKey
FUNCTIONAL_mirror_autograd_meta_tor    )xx_functionalfunctional_moder?   s       r   to_functionalzFunctionalTensor.to_functional   s     .q11111
 2155 -UX-K-VWW*** 	> 	>*1l;;;"<AAC*<===	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 
s   ;BB"Bc                 \    t          j        |            t          j        | j                  S r   )r%   _syncrX   r!   rb   s    r   from_functionalz FunctionalTensor.from_functional   s%    D,TY777r   c                 4    t          j        | j                  S r   )r%   _is_functional_tensor_baser!   rb   s    r   r9   zFunctionalTensor.is_base_tensor   s    /	:::r   c                 :    t          j        | j        |           d S r   )r%   _functionalize_replacer!   )r   outputs     r   replace_zFunctionalTensor.replace_   s    $TY77777r   c                 8    t          j        | j                   d S r   )r%   _functionalize_commit_updater!   rb   s    r   commit_updatezFunctionalTensor.commit_update   s    *4955555r   c                 8    t          j        | j                   d S r   )r%   _functionalize_syncr!   rb   s    r   synczFunctionalTensor.sync   s    !$),,,,,r   c                 8    t          j        | j                   d S r   )r%   1_functionalize_mark_mutation_hidden_from_autogradr!   rb   s    r   "mark_mutation_hidden_from_autogradz3FunctionalTensor.mark_mutation_hidden_from_autograd   s    ?	JJJJJr   c                     | j                                         dk    r| j                                         S | j                                         dk    rd | j         D             S d | j         D             S )Nr   rK   c                 6    g | ]}|                                 S r   )itemrF   r!   s     r   rH   z+FunctionalTensor.tolist.<locals>.<listcomp>  s     666DDIIKK666r   c                 6    g | ]}|                                 S r   )tolistr   s     r   rH   z+FunctionalTensor.tolist.<locals>.<listcomp>  s     888dDKKMM888r   )r!   dimr   rb   s    r   r   zFunctionalTensor.tolist   sj    9==??a9>>###Y]]__!!66DI666688di8888r   c                     t          t          j        j        j                  j        r7t          j        j                            | | j	        | j
        | j                    t                      j        |i |S )N)r/   r1   r0   )r   r%   r(   rf   rg   r4   rQ   rR   _assert_tensor_metadatar/   r1   r0   superr   )r   r   r   	__class__s      r   r   zFunctionalTensor.to  sn    eh<GHHO 	IN22j{{	 3    uwwz4*6***r   c                     |pt           j                                        }t          |          dk    r | j        |g|R i |S  | j        dd|i|S )Nr   r1   r   )r%   cudacurrent_devicerP   r   )r   r1   r   r   s       r   r   zFunctionalTensor.cuda  sh    65:4466t99q==4763D333F3334733&3F333r   )r/   cpu)r1   c                 4    | j                                         S r   )r!   to_denserb   s    r   r   zFunctionalTensor.to_dense"  s    y!!###r   c                     | j         j        S r   )r!   r0   rb   s    r   r0   zFunctionalTensor.layout%  s    yr   c                 D    t          |                                           S r   )boolr   rb   s    r   __bool__zFunctionalTensor.__bool__)  s    DIIKK   r   r   Nr^   Nr   )L__name__
__module____qualname____doc__r%   r*   __annotations__r(   rf   rg   	_mode_key,_additional_keys_to_prop_for_wrapper_tensorsaddDispatchKey
ZeroTensorr'   rQ   rR   rU   rT   rV   rS   is_non_overlapping_and_densesizesym_sizer-   
sym_strider.   sym_storage_offsetnumel	sym_numelr   primr1   rO   r"   r   r@   r]   strrc   staticmethodrl   ro   r   r9   ru   rx   r{   r~   r   r   r   r   r   int8charr   bfloat16uint8bytefloat64doublefloat32floatfloat16halfint32intint64longr   propertyr0   r   __classcell__r   s   @r   r    r    .   s          , .9I !8PTT'  		$,	$2	-5	3;	#	'	%	!)	%-	)1	$	 (	"	%L$ :>(#56===? ? ?B)
 )
 )
 )
V6# 6 6 6 6   \08 8 8; ; ; ; ;8 8 8 86 6 6 6- - - -K K K K9 9 9 9 9+ + + + +4 4 4 4 '&UZ888D
%
%\U\%-@-@
A
A
AC**@@@H&&U[999D((u}===F''em<<<E&&UZ888D&&U];;;D
%
%EK
8
8
8C&&U[999D$ $ $     X ! ! ! ! ! ! !r   r    c                   X     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 )FunctionalTensorModeFc                 N   t                                                       || _        d| _        g | _        t
          j        j        j        | _	        || _
        |rt
          j        j        j        nd | _        i | _        i | _        || _        t#          j                    | _        d S r$   )r   __init__r4   is_on_stackenter_stackr%   r(   rf   rg   r   pre_dispatchr   PreDispatch_dispatch_key_tokens_tokens_forward_output_allow_token_discoveryweakrefWeakKeyDictionaryr:   )r   r   r4   r   r   s       r   r   zFunctionalTensorMode.__init__.  s      7B(AMWUX1==SW 13 @B# '=# %'' 	r   c                       fd} |            : j                             d           t                                                      S  j                             d            S )Nc                       j         t          j        j        j        k    r#t          t          j        j        j                  S t          j                            t          j        j        j                  S r   )	r   r%   r(   r   r   r   rf   rg   _get_dispatch_moderb   s   r   _get_prev_modez6FunctionalTensorMode.__enter__.<locals>._get_prev_modeO  s]    !UX%9%EEE6H2=   8...9  r   TF)r   appendr   	__enter__)r   r   r   s   ` r   r   zFunctionalTensorMode.__enter__N  sv    	 	 	 	 	 >###D)))77$$&&&##E***Kr   c                     | j                                         }|r%t                                          |||           d S d S r   )r   popr   __exit__)r   abcr   r   s        r   r   zFunctionalTensorMode.__exit___  sK    &**,, 	&GGQ1%%%%%	& 	&r   r   Nc                 4    |i }d |D             }|r"t                               d|           t          S  fd}|t          j        vr{ ||          rpt
          j                            |                                          r? 5   |j	        |i |}|t          ur|cd d d            S 	 d d d            n# 1 swxY w Y    fd}d }	ddl
m}
m}m}  |
|          ryt
          j                            |                                t
          j        j        j                  s3dd lmc m}  j        s|j        s | |||          S  | |||          S ddlm}m}  ||||          rat
          j                            |                                t
          j        j        j                  rJ  | j         j        |||          S t7          j        t          |	||f          \  }}t
          j                            t
          j        j        j                  }t
          j                            t
          j        j        j                  }|s|rJ t
          j                                        t
          j                             t
          j        j        j                  z  }t
          j        !                                "                    t
          j        j        j                  t          j#        z
  }t
          j        $                    ||          5  	 t          j%        d	          }|t          j        v r) ||i |}t7          j        t
          j&        ||          }n |j'        t
          j        j        j        g|R i |} j        r3|t
          j(        j)        j*        j+        k    rt          j,        |           t7          j        t
          j&        ||          }t          j-                     t          j%        |           n,# t          j-                     t          j%        |           w xY w	 d d d            n# 1 swxY w Y   t
          j                            t
          j        j        j                  }t
          j                            t
          j        j        j                  }|s|rJ t]          d
 t7          j/        |          D                       r|t
          j(        j)        j0        j+        k    r|S t
          j1        j2        |j3        v r`|t
          j(        j)        j4        j5        urCt
          j6        j7        8                                5   ||i | d d d            n# 1 swxY w Y   ts          ||||          S )Nc                 z    g | ]8}t          |t          j        j                  s|t          j        t
          fv6|9S r   )
issubclassr%   rC   rD   r*   r    rE   s     r   rH   z;FunctionalTensorMode.__torch_dispatch__.<locals>.<listcomp>h  sQ     
 
 
a!2!=>>
 %,(8999  :99r   rI   c                 r   j         r!| t          j        j        j        j        k    rdS ddlm}  ||           rdS t          d | j	        j
        D                       }|s| j	        j        rdS j         r@j        r7| j        dvr,|                                 rt          j        d|  d           dS dS dS )	NFr   )#_should_decompose_because_unsafe_opTc              3   $   K   | ]}|j         V  d S r   )
alias_info)rF   args     r   	<genexpr>zRFunctionalTensorMode.__torch_dispatch__.<locals>._can_decompose.<locals>.<genexpr>  s$      $V$VS^$V$V$V$V$V$Vr   )rR   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.)r4   r%   rQ   rR   dropoutrT   torch._decompr   any_schema	arguments
is_mutabler   	namespace_can_decomposewarningswarn)rZ   r   alias_info_presentr   s      r   r   z?FunctionalTensorMode.__torch_dispatch__.<locals>._can_decomposeu  s    { tuy~'='EEEu JIIIII22488 t "%$V$Vt|?U$V$V$V!V!V! T\%< t { 
$ !~-===$BUBUBWBW= ?%)? ? ?  
 !5t 4r   c                     t          | t                    rJ t          | t          j                  r$t          j        |           rt          |           S | S r   )rW   r    r%   r*   r&   )ri   r   s    r   wrapz5FunctionalTensorMode.__torch_dispatch__.<locals>.wrap  sW     "!%566666!U\** 1u/J1/M/M 1'4000Hr   c                     | j         S r   )r!   )ri   s    r   unwrapz7FunctionalTensorMode.__torch_dispatch__.<locals>.unwrap  s	    6Mr   r   )can_auto_functionalizedo_auto_functionalizedo_auto_functionalize_v2)handle_effectshas_effectsTc              3   @   K   | ]}t          |t                    V  d S r   )rW   r    )rF   ri   s     r   r   z:FunctionalTensorMode.__torch_dispatch__.<locals>.<genexpr>  sA         1.//     r   ):rL   rM   rN   r    rO   r%   r(   _dispatch_has_kernelname	decompose*torch._higher_order_ops.auto_functionalizer   r   r   %_dispatch_has_kernel_for_dispatch_keyr   Functionalizetorch._inductor.configr6   r7   r4   r8   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_viewsr*   _op_dkrQ   rR   r   rT   _freeze_functional_tensor_disable_functionalizationr   tree_leaves
lift_freshTaginplace_viewtagsset_source_Tensorutils_mode_utilsno_dispatchr   )r   rZ   r[   r   r   r\   r   rr   r   r   r   r   inductor_configr   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__d  s   >F
 

 
 
  	"%%@BT   "!'	 '	 '	 '	 '	T (555t$$ 6 --diikk::	 6   "DND3F33N**       *              
	 	 	 	 		 	 		
 	
 	
 	
 	
 	
 	
 	
 	
 	
 "!
 
 
	J(@@IIKK-;
 

	J
 =<<<<<<<<{ J/"O J,,T4vFFF//dD&IIIOOOOOOOO;tT6** 	xEE		UX1?     ">+T\4v   ,2+?ftVn,
 ,
(( hEEH .
 
 hEEH .
 
 -+---H4466h%%eh&:&HIIJ 	
 H4466==$2  34 	 X,,^^LL  	K  	KK"'"KD"Q"Q +888%)T>%N=M%N%NN#)#7dN$ $LL &1T[,:&'& & & +& &N { L59>#9#AAA!;NKKK#)#7dN$ $L 02229/JJJJ 02229/JJJJJA 	K  	K  	K  	K  	K  	K  	K  	K  	K  	K  	K  	K  	K  	K  	KD hEEH .
 
 hEEH .
 
 -+---   +L99    	  uy~0888 I"di//EIN/===(4466 & &d%f%%%& & & & & & & & & & & & & & & +4v|LLLsO   B99B= B= Q"C
P,(Q)P==QQQ(	U==VVr^   c                     dS )NTr   )r<   s    r   is_infra_modez"FunctionalTensorMode.is_infra_mode1  s    tr   )FFFr   )r   r   r   r   r   r   r]   classmethodr   r  r   r   s   @r   r   r   -  s        ( ( ( ( ( (@    "& & & & &
KM KM KM KMZ d    [    r   r   c                  H    t          t          j        j        j                  S r   )r   r%   r(   rf   rg   r   r   r   disable_functional_moder"  6  s    ux=HIIIr   r=   c                 *     d d  fd}|S )Nc                 n    t          | t          j                  rt                              |           S | S r   )rW   r%   r*   r    rl   rG   s    r   to_funz&dispatch_functionalize.<locals>.to_funE  s/    a&& 	5#11!444r   c                     t          | t                    s2t          | t          j                  rt          j        |           rJ | S t          j        |            t          j        | j                  S r   )rW   r    r%   r*   r&   rn   rX   r!   r%  s    r   from_funz(dispatch_functionalize.<locals>.from_funJ  se    !-.. 	!U\** : 6q99999HA,QV444r   c                     t           j                            t           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xY w Y   d d d            d S # 1 swxY w Y   d S r   )
r%   r(   _ExcludeDispatchKeyGuardr  r   r   r   r   r*   r    )r   r   disable_above	func_argsfunc_kwargsfunc_outputsoutputsr(  rZ   r=   r&  s          r   innerz%dispatch_functionalize.<locals>.innerS  s{   99H##EH$8$FGG
 
  	 	D 	 	,U\64HHI .u|VVLLK4:k::L*+;X|TTG	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s7   C-A%C<C-C	C-C	C--C14C1r   )rZ   r=   r0  r(  r&  s   `` @@r   dispatch_functionalizer1  C  sS      
5 5 5
 
 
 
 
 
 
 
 Lr   c                   6   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d	S )BaseFunctionalizeAPIr   r^   c                     d S r   r   r   r   s     r   wrap_tensorsz!BaseFunctionalizeAPI.wrap_tensorsc      r   .c                     d S r   r   r5  s     r   unwrap_tensorsz#BaseFunctionalizeAPI.unwrap_tensorsg  s	     	r   inner_fc                     d S r   r   r   r:  s     r   functionalizez"BaseFunctionalizeAPI.functionalizem  r7  r   c                     d S r   r   rb   s    r   redispatch_to_nextz'BaseFunctionalizeAPI.redispatch_to_nextq  r7  r   Nc                     d S r   r   r   input_tensoroutput_tensors      r   replacezBaseFunctionalizeAPI.replaceu  r7  r   c                     d S r   r   r   tensors     r   rx   z"BaseFunctionalizeAPI.commit_updatey  r7  r   c                     d S r   r   rF  s     r   r{   zBaseFunctionalizeAPI.sync}  r7  r   c                     d S r   r   rF  s     r   r~   z7BaseFunctionalizeAPI.mark_mutation_hidden_from_autograd  r7  r   r   )r   r   r   r   tupler   r6  r	   r%   r*   r9  r   r=  r   r?  rD  rx   r{   r~   r   r   r   r3  r3  b  sf       s c
    ^ %,elC.?(@@A	   ^
 X (    ^ $:    ^    ^    ^    ^    ^  r   r3  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 )PythonFunctionalizeAPINFr=   r   r^   c                     t                                                       |r|nt                      | _        || _        d S r   )r   r   r   r=   r   )r   r=   r   r   s      r   r   zPythonFunctionalizeAPI.__init__  s@     	 <DD&:&<&<	(r   r   c                     | j         5  t          j        j                            t          j        t          j        |          cd d d            S # 1 swxY w Y   d S r   )r=   r%   r  _pytreer   r*   r    rl   r5  s     r   r6  z#PythonFunctionalizeAPI.wrap_tensors  s    Y 	 	;&44.<d 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   :AAA.c                 l    t           j        j                            t          t          j        |          S r   )r%   r  rO  r   r    ro   r5  s     r   r9  z%PythonFunctionalizeAPI.unwrap_tensors  s,     {"00.>
 
 	
r   r:  c                 ,    t          || j                  S r   )r1  r=   r<  s     r   r=  z$PythonFunctionalizeAPI.functionalize  s    %gty999r   c                 (    t          j                    S r   )
contextlibnullcontextrb   s    r   r?  z)PythonFunctionalizeAPI.redispatch_to_next  s     %'''r   c                     t          |t                    sJ t          |t                    rJ |                    |           d S r   )rW   r    ru   rA  s      r   rD  zPythonFunctionalizeAPI.replace  sJ    ,(899999m-=>>>>>m,,,,,r   c                 \    t          |t                    sJ |                                 d S r   )rW   r    rx   rF  s     r   rx   z$PythonFunctionalizeAPI.commit_update  s1    &"233333r   c                 \    t          |t                    sJ |                                 d S r   )rW   r    r{   rF  s     r   r{   zPythonFunctionalizeAPI.sync  s*    &"233333r   c                 \    t          |t                    sJ |                                 d S r   )rW   r    r~   rF  s     r   r~   z9PythonFunctionalizeAPI.mark_mutation_hidden_from_autograd  s1    &"2333331133333r   r$   r   )r   r   r   r   r   r   r   rJ  r   r6  r	   r%   r*   listr9  r   r=  r   r?  rD  rx   r{   r~   r   r   s   @r   rL  rL    s`       PU) )12)IM)	) ) ) ) ) )s c
    
%,elC.?(@$u|BTTU
	
 
 
 
:X :( : : : :($: ( ( ( (- - - -
      4 4 4 4 4 4 4 4r   rL  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d	S )CppFunctionalizeAPIr   r^   c                 (    ddl m}  ||d          S Nr   )_wrap_all_tensors_to_functional)level)!torch._functorch.eager_transformsr^  r   r   r^  s      r   r6  z CppFunctionalizeAPI.wrap_tensors  s*    UUUUUU..t1====r   .c                 @    ddl m}  ||t                                S Nr   )#_unwrap_all_tensors_from_functional)reapply_views)r`  rd  _reapply_viewsr   r   rd  s      r   r9  z"CppFunctionalizeAPI.unwrap_tensors  s>    	
 	
 	
 	
 	
 	
 324~GWGWXXXXr   r:  c                 @    t           j                            |          S r   )r%   rZ   r=  r<  s     r   r=  z!CppFunctionalizeAPI.functionalize  s    z''000r   c                     t           j                            t           j                            t           j        j        j                            S r   )r%   r(   r*  r  r   r   rb   s    r   r?  z&CppFunctionalizeAPI.redispatch_to_next  s7    x00H##EH$8$FGG
 
 	
r   Nc                 0    t          j        ||           d S r   r%   rs   rA  s      r   rD  zCppFunctionalizeAPI.replace      $\=AAAAAr   c                 .    t          j        |           d S r   r%   rw   rF  s     r   rx   z!CppFunctionalizeAPI.commit_update      *622222r   c                 .    t          j        |           d S r   r%   rz   rF  s     r   r{   zCppFunctionalizeAPI.sync      !&)))))r   c                 .    t          j        |           d S r   r%   r}   rF  s     r   r~   z6CppFunctionalizeAPI.mark_mutation_hidden_from_autograd      ?GGGGGr   r   )r   r   r   rJ  r   r6  r	   r%   r*   r9  r   r=  r   r?  rD  rx   r{   r~   r   r   r   r[  r[    s0       >s >c
 > > > >
Y%,elC.?(@@AY	u|U5<#455	6Y Y Y Y1X 1( 1 1 1 1
$: 
 
 
 

B B B B3 3 3 3* * * *H H H H H Hr   r[  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d
S )FunctorchFunctionalizeAPIc                     || _         d S r   )interpreter)r   ry  s     r   r   z"FunctorchFunctionalizeAPI.__init__  s    &r   r   r^   c                 V    ddl m}  ||| j                                                  S r]  )r`  r^  ry  r_  ra  s      r   r6  z&FunctorchFunctionalizeAPI.wrap_tensors  s9    UUUUUU..t4;K;Q;Q;S;STTTTr   .c                 V    ddl m}  ||| j                                                  S rc  )r`  rd  ry  functionalize_add_back_viewsrg  s      r   r9  z(FunctorchFunctionalizeAPI.unwrap_tensors  sP    	
 	
 	
 	
 	
 	
 32 0 M M O O
 
 
 	
r   r:  c                 z    t           j                            || j                                        rdnd          S )Nmutations_and_views	mutations)r  )r%   rZ   r=  ry  r|  r<  s     r   r=  z'FunctorchFunctionalizeAPI.functionalize  sF    z'' #@@BB!%%  ( 
 
 	
r   c                 4    | j                                         S r   )ry  lowerrb   s    r   r?  z,FunctorchFunctionalizeAPI.redispatch_to_next  s    %%'''r   Nc                 0    t          j        ||           d S r   rk  rA  s      r   rD  z!FunctorchFunctionalizeAPI.replace  rl  r   c                 .    t          j        |           d S r   rn  rF  s     r   rx   z'FunctorchFunctionalizeAPI.commit_update   ro  r   c                 .    t          j        |           d S r   rq  rF  s     r   r{   zFunctorchFunctionalizeAPI.sync  rr  r   c                 .    t          j        |           d S r   rt  rF  s     r   r~   z<FunctorchFunctionalizeAPI.mark_mutation_hidden_from_autograd  ru  r   r   )r   r   r   r   rJ  r   r6  r	   r%   r*   r9  r   r=  r   r?  rD  rx   r{   r~   r   r   r   rw  rw    s?       ' ' 'Us Uc
 U U U U
	
%,elC.?(@@A	
	u|U5<#455	6	
 	
 	
 	

X 
( 
 
 
 
($: ( ( ( (B B B B3 3 3 3* * * *H H H H H Hr   rw  rG  c                 b    t          | t                    rt          j        | j                  S | S r   )rW   r    r%   rX   r!   )rG  s    r   mb_unwrap_functional_tensorr  
  s-    &*++ :,V[999Mr   )-rS  r   r   abcr   r   r   typingr   r   r   r	   r%   torch.utils._pytreer  rO  r   torch._Cr
   rf  
torch._opsr   torch._subclasses.meta_utilsr   torch.utils._python_dispatchr   r   r   r   _logginggetArtifactLoggerr   rL   r   r*   r    r   contextmanagerr"  r1  r3  rL  r[  rw  r  r   r   r   <module>r     s         # # # # # # # # - - - - - - 1 1 1 1 1 1 1 1 1 1 1 1  $ $ $ $ $ $ $ $ $ K K K K K K 6 6 6 6 6 6 6 6 6 6 6 6            n66xARSS "  |! |! |! |! |!u| |! |! |!~F F F F F, F F FR J J J ?S>R>T>T  ';    >! ! ! ! !3 ! ! !H/4 /4 /4 /4 /41 /4 /4 /4d!H !H !H !H !H. !H !H !HH+H +H +H +H +H 4 +H +H +H\      r   