§
    J�’jB¦  ã                  óš  — d dl mZ d dlZ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 d dlmZ er d dlZd dlmZmZmZ d dlmZ d d	lmZ d d
l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&m'Z' d dl(m)Z) d dl*m+Z+m,Z,m-Z-m.Z.m/Z/ ej0         1                    e2d¦  «        Z3d8d„Z4 ej5        d¬¦  «        d9d„¦   «         Z6d:d „Z7d;d$„Z8 G d%„ d&ej9        ¦  «        Z: G d'„ d(e/¦  «        Z;ej<        d<d*„¦   «         Z= e;¦   «         fd=d,„Z> G d-„ d.e¦  «        Z? G d/„ d0e?¦  «        Z@ G d1„ d2e?¦  «        ZA G d3„ d4e?¦  «        ZBd>d7„ZCdS )?é    )ÚannotationsN)ÚABCÚabstractmethod)ÚAbstractContextManager)ÚAnyÚTYPE_CHECKING)ÚSelf)ÚCallableÚ	GeneratorÚSequence)ÚTracebackType)ÚFunctionalizeInterpreter)Ú
OpOverload)Ú$_functionalization_reapply_views_tls)Ú_get_dispatch_mode_pre_dispatchÚTorchBindOpOverload)Úis_sparse_any)Ú_detect_infra_modeÚ_disable_infra_modeÚautograd_would_have_decomposedÚreturn_and_correct_aliasingÚTorchDispatchModeÚnot_implementedÚtypesúSequence[type]ÚreturnÚboolc                ór   — d„ | D ¦   «         }|rt                                d|¦  «         t          |¦  «        S )Nc                ó\   — g | ])}|t           j        t           j        j        t          fv¯'|‘Œ*S © )ÚtorchÚTensorÚ_subclassesÚ
FakeTensorÚFunctionalTensor)Ú.0Úts     úQC:\Projects\DSCons\.venv\Lib\site-packages\torch\_subclasses\functional_tensor.pyú
<listcomp>z2_has_unrecognized_tensor_types.<locals>.<listcomp>(   s=   € ð ð ð àØ•U”\¥5Ô#4Ô#?ÕAQÐRÐRÐRð 	
àRÐRÐRó    z.FunctionalTensor unrecognized subclass(es): %s)Únot_implemented_logÚdebugr   )r   Úunrecognized_typess     r(   Ú_has_unrecognized_tensor_typesr.   '   sZ   € ðð àðñ ô Ðð
 ð 
Ý×!Ò!Ø<Ð>Pñ	
ô 	
ð 	
õ Ð"Ñ#Ô#Ð#r*   i   )ÚmaxsizeÚfuncr   ÚexportÚpre_dispatchúbool | Nonec                óR  — |r| t           j        j        j        j        u rdS ddlm}  || ¦  «        rdS t          d„ | j        j	        D ¦   «         ¦  «        }|s| j        j
        rdS |r=|r9| j        dvr.|                      ¦   «         rt          j        d| › d�d	¬
¦  «         dS dS dS )zÔFast path for _can_decompose that depends only on (func, export, pre_dispatch).

    Returns True/False for a definitive answer, or None to fall through
    to the slow path (autograd_would_have_decomposed).
    Fr   )Ú#_should_decompose_because_unsafe_opTc              3  ó$   K  — | ]}|j         V — Œd S ©N)Ú
alias_info)r&   Úargs     r(   ú	<genexpr>z&_can_decompose_fast.<locals>.<genexpr>E   s$   è è € ÐNÐN°˜Sœ^ÐNÐNÐNÐNÐNÐNr*   )ÚatenÚprimz˜At 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.é   )Ú
stacklevelN)r!   Úopsr;   ÚdropoutÚdefaultÚtorch._decompr5   ÚanyÚ_schemaÚ	argumentsÚ
is_mutableÚ	namespaceÚ_can_decomposeÚwarningsÚwarn)r0   r1   r2   r5   Úalias_info_presents        r(   Ú_can_decompose_fastrL   4   sÿ   € ð ð �$�%œ)œ.Ô0Ô8Ð8Ð8ØˆuàAÐAÐAÐAÐAÐAà*Ð*¨4Ñ0Ô0ð ØˆtåÐNÐN°t´|Ô7MÐNÑNÔNÑNÔNÐØð ˜Tœ\Ô4ð Øˆtàð 
Øð 	ØŒ~Ð%5Ð5Ð5¸$×:MÒ:MÑ:OÔ:OÐ5Ý”ð7à!ð7ð 7ð 7ð  !ð	ñ ô ð ð �5Øˆtàˆ4r*   ÚmsgÚstrÚNonec                óü   — t           j                             t           j        j        j        ¦  «        }t           j                             t           j        j        j        ¦  «        }|s|rt          | ¦  «        ‚d S d S r7   )r!   Ú_CÚ&_dispatch_tls_is_dispatch_key_includedÚDispatchKeyÚFunctionalizeÚ&_dispatch_tls_is_dispatch_key_excludedÚAssertionError)rM   Úis_includedÚis_excludeds      r(   Ú _assert_functionalize_not_activerY   X   s{   € Ý”(×AÒAÝŒÔÔ*ñô €Kõ ”(×AÒAÝŒÔÔ*ñô €Kð ð "˜;ð "Ý˜SÑ!Ô!Ð!ð"ð "ð "ð "r*   Úextra_kwargsr   úCallable[..., Any]c                 ó   ‡ — dˆ fd„}|S )	NÚselfr%   Úargsr   Úkwargsr   c                ó&   •—  | j         |i i |¥‰¥¤ŽS r7   )Úto)r]   r^   r_   rZ   s      €r(   Ú_z&_conversion_method_template.<locals>._r   s%   ø€ ØˆtŒw˜Ð;Ð : 6Ð :¨\Ð :Ð;Ð;Ð;r*   )r]   r%   r^   r   r_   r   r   r   r    )rZ   rb   s   ` r(   Ú_conversion_method_templaterc   q   s(   ø€ ð<ð <ð <ð <ð <ð <ð €Hr*   c                  ó6  ‡ — e Zd ZU dZded<   ej        j        j        Z	ej        j
                             ej        j        j        ¦  «        Z e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        h¦  «        Z"dZ#ded<   d9d„Z$	 	 d:d;d„Z%ddœd<d„Z&e'd=d„¦   «         Z(d>d„Z)d?d „Z*d@d#„Z+dAd$„Z,dAd%„Z-dAd&„Z.dBd'„Z/dCˆ fd(„Z0	 dDdEd+„Z1 e2ej3        ¬,¦  «        Z4 e2 ej!        d-¦  «        ¬.¦  «        Z5 e2ej6        ¬,¦  «        Z6 e2ej7        ¬,¦  «        Z8 e2ej9        ¬,¦  «        Z: e2ej;        ¬,¦  «        Z< e2ej=        ¬,¦  «        Z= e2ej>        ¬,¦  «        Z? e2ej@        ¬,¦  «        ZA e2ejB        ¬,¦  «        ZC	 dDdd/œdFd4„ZDeEdGd6„¦   «         ZFdHd8„ZGˆ xZHS )Ir%   aF  
    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).
    útorch.TensorÚelemNzFunctionalTensor | NoneÚ_inference_mode_baseÚmodeÚFunctionalTensorModer   r	   c                ób  — t          j        |¦  «        st          d¦  «        ‚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                             |¦  «         ||_        t           j        j        j        r˜t          j        ¦   «         r…t           j        j        j        ro|j                             ¦   «         }|                     ¦   «         rd |_        ||j        |<   n0|j                             |¦  «        |_        |j        €
||j        |<   |S )Nz elem must be a functional tensorF)r!   Ú_is_functional_tensorrV   r%   Ú_extra_dispatch_keysrQ   Ú_dispatch_keysr"   Ú_make_wrapper_subclassÚshaper   ÚstrideÚstorage_offsetÚdtypeÚlayoutÚdeviceÚrequires_gradÚ_set_throw_on_mutable_data_ptrrf   Ú_exportÚconfigÚ(enable_auto_functionalized_v2_for_exportÚis_inference_mode_enabledÚ	_inductorÚenable_auto_functionalized_v2Úuntyped_storageÚis_base_tensorrg   Ú_storage_to_baseÚget)Úclsrf   rh   Úextra_dispatch_keysÚoutÚstorages         r(   Ú__new__zFunctionalTensor.__new__®   s™  € ÝÔ*¨4Ñ0Ô0ð 	EÝ Ð!CÑDÔDÐDõ& Ô1µE´H×4KÒ4KÈDÑ4QÔ4QÑQð 	õ Œl×1Ò1ð
 ØŒJÝ!.¨tÑ!4Ô!4Ð>ˆD�KŠK‰MŒMˆM¸$å-:¸4Ñ-@Ô-@ÐJ�×#Ò#Ñ%Ô%Ð%ÀdàØŒJØŒKØŒKØØÔØØØØñ)
ô 
ˆõ, 	Œ×/Ò/°Ñ4Ô4Ð4ØˆŒõ ŒMÔ ÔIð	9åÔ/Ñ1Ô1ð	9õ ”Ô&ÔDð	9ð
 ”h×.Ò.Ñ0Ô0ˆGØ×!Ò!Ñ#Ô#ð 9Ø+/�Ô(ð 25�Ô% gÑ.Ð.à+/Ô+@×+DÒ+DÀWÑ+MÔ+M�Ô(ØÔ+Ð3Ø58�DÔ)¨'Ñ2Øˆ
r*   r    r0   r   r   r   r^   útuple[Any, ...]r_   údict[str, Any] | Noner   c                ón  — t          |¦  «        rt          S |€i }|t          j        v �r+t	          |¦  «        dk    rt          d¦  «        ‚|t          j        j        j	        j
        t          j        j        j        j        fv rlt	          |¦  «        dk    st          |d         t          ¦  «        st          d¦  «        ‚ |t          j        |d         j        ¦  «        |d         ¦  «        S t	          |¦  «        dk    st          |d         t          ¦  «        st          d¦  «        ‚ |t          j        |d         j        ¦  «        ¦  «        S |t          j        j        j        j
        u r6t	          |¦  «        dk    r#t          |d         t          ¦  «        r|d         S t#          d¦  «        ‚)Nr   z+kwargs must be empty for metadata functionsé   z+Expected 2 args with FunctionalTensor firsté   z$Expected 1 arg with FunctionalTensorzqAttempting to use FunctionalTensor on its own. Instead, please use it with a corresponding FunctionalTensorMode())r.   ÚNotImplementedr%   Úmetadata_fnsÚlenrV   r!   r?   r;   Úis_strides_like_formatrA   Úis_contiguousÚmemory_formatÚ
isinstanceÚ_from_functional_tensorrf   ÚdetachÚRuntimeError)r]   r0   r   r^   r_   s        r(   Ú__torch_dispatch__z#FunctionalTensor.__torch_dispatch__ð   sˆ  € õ *¨%Ñ0Ô0ð 	"Ý!Ð!àˆ>ØˆFð Õ#Ô0Ð0Ñ0õ �6‰{Œ{˜aÒÐÝ$Ð%RÑSÔSÐSØÝ”	”Ô5Ô=Ý”	”Ô,Ô:ðð ð õ �t‘9”9 ’>�>­°D¸´GÕ=MÑ)NÔ)N�>Ý(Ð)VÑWÔWÐWØ�t�EÔ9¸$¸q¼'¼,ÑGÔGÈÈaÌÑQÔQÐQÝ�4‰yŒy˜AŠ~ˆ~¥Z°°Q´Õ9IÑ%JÔ%Jˆ~Ý$Ð%KÑLÔLÐLà�4�Ô5°d¸1´g´lÑCÔCÑDÔDÐDØ•5”9”>Ô(Ô0Ð0Ð0õ
 �4‰yŒy˜AŠ~ˆ~¥*¨T°!¬WÕ6FÑ"GÔ"Gˆ~Ø˜A”w�õ Øñ
ô 
ð 	
r*   )Útensor_contentsr–   úobject | NonerN   c               ó2   — dt          | j        ¦  «        › d�S )NzFunctionalTensor(ú))Úreprrf   )r]   r–   s     r(   Ú__repr__zFunctionalTensor.__repr__"  s   € Ø5¥4¨¬	¡?¤?Ð5Ð5Ð5Ð5r*   Úxc                ó„  — t          j        | ¦  «        rt          d¦  «        ‚t          j        | ¦  «        }t	          t           j        j        j        ¦  «        }|€t          d¦  «        ‚|5  t          j        | |¦  «         t          ||¦  «        }t          j        ||¦  «         d d d ¦  «         n# 1 swxY w Y   |S )Nz)x must not already be a functional tensorú functional_mode must not be None)
r!   rk   rV   Ú_to_functional_tensorr   rQ   Ú_TorchDispatchModeKeyÚ
FUNCTIONALÚ_mirror_autograd_meta_tor%   )rœ   Úx_functionalÚfunctional_moderƒ   s       r(   Úto_functionalzFunctionalTensor.to_functional%  sü   € õ Ô& qÑ)Ô)ð 	NÝ Ð!LÑMÔMÐMõ
 Ô2°1Ñ5Ô5ˆõ -­U¬XÔ-KÔ-VÑWÔWˆØÐ"Ý Ð!CÑDÔDÐDàð 	>ð 	>ÝÔ*¨1¨lÑ;Ô;Ð;Ý" <°ÑAÔAˆCÝÔ*¨<¸Ñ=Ô=Ð=ð	>ð 	>ð 	>ñ 	>ô 	>ð 	>ð 	>ð 	>ð 	>ð 	>ð 	>øøøð 	>ð 	>ð 	>ð 	>ð ˆ
s   Á.;B5Â5B9Â<B9c                ó\   — t          j        | ¦  «         t          j        | j        ¦  «        S r7   )r!   Ú_syncr’   rf   ©r]   s    r(   Úfrom_functionalz FunctionalTensor.from_functional@  s%   € ÝŒ�DÑÔÐÝÔ,¨T¬YÑ7Ô7Ð7r*   r   c                ó4   — t          j        | j        ¦  «        S r7   )r!   Ú_is_functional_tensor_baserf   r¨   s    r(   r~   zFunctionalTensor.is_base_tensorD  s   € ÝÔ/°´	Ñ:Ô:Ð:r*   ÚoutputrO   c                ó:   — t          j        | j        |¦  «         d S r7   )r!   Ú_functionalize_replacerf   )r]   r¬   s     r(   Úreplace_zFunctionalTensor.replace_G  s   € ÝÔ$ T¤Y°Ñ7Ô7Ð7Ð7Ð7r*   c                ó8   — t          j        | j        ¦  «         d S r7   )r!   Ú_functionalize_commit_updaterf   r¨   s    r(   Úcommit_updatezFunctionalTensor.commit_updateJ  s   € ÝÔ*¨4¬9Ñ5Ô5Ð5Ð5Ð5r*   c                ó8   — t          j        | j        ¦  «         d S r7   )r!   Ú_functionalize_syncrf   r¨   s    r(   ÚsynczFunctionalTensor.syncM  s   € ÝÔ! $¤)Ñ,Ô,Ð,Ð,Ð,r*   c                ó8   — t          j        | j        ¦  «         d S r7   )r!   Ú1_functionalize_mark_mutation_hidden_from_autogradrf   r¨   s    r(   Ú"mark_mutation_hidden_from_autogradz3FunctionalTensor.mark_mutation_hidden_from_autogradP  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   rŠ   c                ó6   — g | ]}|                      ¦   «         ‘ŒS r    )Úitem©r&   rf   s     r(   r)   z+FunctionalTensor.tolist.<locals>.<listcomp>W  s    € Ð6Ð6Ð6 D�D—I’I‘K”KÐ6Ð6Ð6r*   c                ó6   — g | ]}|                      ¦   «         ‘ŒS r    )Útolistr¼   s     r(   r)   z+FunctionalTensor.tolist.<locals>.<listcomp>Y  s    € Ð8Ð8Ð8 d�D—K’K‘M”MÐ8Ð8Ð8r*   )rf   Údimr»   r¨   s    r(   r¾   zFunctionalTensor.tolistS  sj   € ØŒ9�=Š=‰?Œ?˜aÒÐØ”9—>’>Ñ#Ô#Ð#ØŒY�]Š]‰_Œ_ Ò!Ð!Ø6Ð6¨D¬IÐ6Ñ6Ô6Ð6à8Ð8¨d¬iÐ8Ñ8Ô8Ð8r*   c                óô   •— t          t          j        j        j        ¦  «        j        r7t          j        j                             | | j	        | j
        | j        ¬¦  «          t          ¦   «         j        |i |¤ŽS )N)rr   rt   rs   )r   r!   rQ   r    r¡   r1   r?   r;   Ú_assert_tensor_metadatarr   rt   rs   Úsuperra   )r]   r^   r_   Ú	__class__s      €r(   ra   zFunctionalTensor.to[  sn   ø€ Ý�eœhÔ<ÔGÑHÔHÔOð 	ÝŒIŒN×2Ò2ØØ”jØ”{Ø”{ð	 3ñ ô ð ð �u‰wŒwŒz˜4Ð* 6Ð*Ð*Ð*r*   rt   útorch.device | int | str | Nonec                ó¨   — |pt           j                             ¦   «         }t          |¦  «        dk    r | j        |g|¢R i |¤ŽS  | j        dd|i|¤ŽS )Nr   rt   r    )r!   ÚcudaÚcurrent_devicer�   ra   )r]   rt   r^   r_   s       r(   rÆ   zFunctionalTensor.cudaf  sj   € ð Ð6�5œ:×4Ò4Ñ6Ô6ˆÝˆt‰9Œ9�qŠ=ˆ=Ø�4”7˜6Ð3 DÐ3Ð3Ð3¨FÐ3Ð3Ð3à�4”7Ð3Ð3 &Ð3¨FÐ3Ð3Ð3r*   ©rr   Úcpu)rt   )Úmasked_gradrr   útorch.dtype | NonerÊ   úbuiltins.bool | Nonec               ó´  — | j         t          j        k    r|€| S |                      |¬¦  «        S | j                             ||¬¦  «        }t          |t          j        ¦  «        rrt          j        |¦  «        r^t          t          j
        j        j        ¦  «        }|€t          d¦  «        ‚|5  t          ||¦  «        cd d d ¦  «         S # 1 swxY w Y   |S )NrÈ   )rr   rÊ   rž   )rs   r!   Ústridedra   rf   Úto_denser‘   r"   rk   r   rQ   r    r¡   rV   r%   )r]   rr   rÊ   rƒ   r¤   s        r(   rÏ   zFunctionalTensor.to_dense{  s  € ð Œ;�%œ-Ò'Ð'Øˆ}Ø�Ø—7’7 �7Ñ'Ô'Ð'àŒi× Ò  u¸+Ð ÑFÔFˆÝ�c�5œ<Ñ(Ô(ð 	>­UÔ-HÈÑ-MÔ-Mð 	>Ý0Ý”Ô.Ô9ñô ˆOð Ð&Ý$Ð%GÑHÔHÐHØ ð >ð >Ý'¨¨_Ñ=Ô=ð>ð >ð >ð >ñ >ô >ð >ð >ð >ð >ð >ð >øøøð >ð >ð >ð >àˆ
s   Â0CÃCÃCútorch.layoutc                ó   — | j         j        S r7   )rf   rs   r¨   s    r(   rs   zFunctionalTensor.layout‘  s   € ð ŒyÔÐr*   úbuiltins.boolc                óD   — t          |                      ¦   «         ¦  «        S r7   )r   r»   r¨   s    r(   Ú__bool__zFunctionalTensor.__bool__–  s   € Ý�D—I’I‘K”KÑ Ô Ð r*   )rf   re   rh   ri   r   r	   ©r    N©
r0   r   r   r   r^   r†   r_   r‡   r   r   )r–   r—   r   rN   )rœ   re   r   r%   )r   re   ©r   r   )r¬   re   r   rO   )r   rO   )r   r   )r^   r   r_   r   r   re   r7   )rt   rÄ   r^   r   r_   r   r   re   )rr   rË   rÊ   rÌ   r   re   )r   rÐ   )r   rÒ   )IÚ__name__Ú
__module__Ú__qualname__Ú__doc__Ú__annotations__r!   rQ   r    r¡   Ú	_mode_keyÚ,_additional_keys_to_prop_for_wrapper_tensorsÚaddrS   Ú
ZeroTensorrl   Ú	frozensetr?   r;   r�   rA   r�   rŽ   Úis_non_overlapping_and_denseÚsizeÚsym_sizerp   Ú
sym_striderq   Úsym_storage_offsetÚnumelÚ	sym_numelr¿   r<   rt   rŒ   rg   r…   r•   r›   Ústaticmethodr¥   r©   r~   r¯   r²   rµ   r¸   r¾   ra   rÆ   rc   Úint8ÚcharrÉ   Úbfloat16Úuint8ÚbyteÚfloat64ÚdoubleÚfloat32Úfloatr   Úfloat16ÚhalfÚint32ÚintÚint64ÚlongrÏ   Úpropertyrs   rÔ   Ú__classcell__©rÃ   s   @r(   r%   r%   x   sÜ  ø€ € € € € € ðð ð ÐÐÑð ”Ô.Ô9€Ið !œ8ÔP×TÒTØŒÔÔ'ñô Ðð �9àŒIŒNÔ(Ô0ØŒIŒNÔ(Ô6ØŒIŒNÔ1Ô9ØŒIŒNÔ7Ô?ØŒIŒNÔÔ'ØŒIŒNÔ#Ô+ØŒIŒNÔ!Ô)ØŒIŒNÔ%Ô-ØŒIŒNÔ)Ô1ØŒIŒNÔ-Ô5ØŒIŒNÔ Ô(ØŒIŒNÔ$Ô,ØŒIŒNÔÔ&ØŒIŒNÔ!Ô)ð	
ñô €Lð( 59ÐÐ8Ð8Ð8Ñ8ð@ð @ð @ð @ðL !#Ø(,ð0
ð 0
ð 0
ð 0
ð 0
ðd <@ð 6ð 6ð 6ð 6ð 6ð 6ð ðð ð ñ „\ðð48ð 8ð 8ð 8ð;ð ;ð ;ð ;ð8ð 8ð 8ð 8ð6ð 6ð 6ð 6ð-ð -ð -ð -ðKð Kð Kð Kð9ð 9ð 9ð 9ð+ð +ð +ð +ð +ð +ð 9=ð4ð 4ð 4ð 4ð 4ð 'Ð&¨U¬ZÐ8Ñ8Ô8€DØ
%Ð
%¨\¨U¬\¸%Ñ-@Ô-@Ð
AÑ
AÔ
A€CØ*Ð*°´Ð@Ñ@Ô@€HØ&Ð&¨U¬[Ð9Ñ9Ô9€DØ(Ð(¨u¬}Ð=Ñ=Ô=€FØ'Ð'¨e¬mÐ<Ñ<Ô<€EØ&Ð&¨U¬ZÐ8Ñ8Ô8€DØ&Ð&¨U¬]Ð;Ñ;Ô;€DØ
%Ð
%¨E¬KÐ
8Ñ
8Ô
8€CØ&Ð&¨U¬[Ð9Ñ9Ô9€Dð
 %)ðð -1ð	ð ð ð ð ð ð, ð ð  ð  ñ „Xð ð!ð !ð !ð !ð !ð !ð !ð !r*   r%   c                  óv   ‡ — e Zd Z	 	 	 d"d#ˆ fd„Zd$ˆ fd
„Zd%ˆ fd„Z	 	 d&d'd„Zd(d„Zd)d „Ze	d*d!„¦   «         Z
ˆ xZS )+ri   Fr2   r   r1   Ú_allow_token_discoveryr   rO   c                óN  •— t          ¦   «                              ¦   «          || _        d| _        g | _        t
          j        j        j        | _	        || _
        |rt
          j        j        j        nd | _        i | _        i | _        || _        t#          j        ¦   «         | _        d S ©NF)rÂ   Ú__init__r1   Úis_on_stackÚenter_stackr!   rQ   r    r¡   rÝ   r2   rS   ÚPreDispatchÚ_dispatch_keyÚ_tokensÚ_tokens_forward_outputrý   ÚweakrefÚWeakKeyDictionaryr   )r]   r2   r1   rý   rÃ   s       €r(   r   zFunctionalTensorMode.__init__›  s¡   ø€ õ 	‰Œ×ÒÑÔÐØˆŒØ ˆÔØˆÔõ œÔ7ÔBˆŒØ(ˆÔàAMÐW�UœXÔ1Ô=Ð=ÐSWˆÔð 13ˆŒð @BˆÔ#ð '=ˆÔ#õ Ô%Ñ'Ô'ð 	ÔÐÐr*   r	   c                óÒ   •‡ — dˆ fd„} |¦   «         €:‰ j                              d¦  «         t          ¦   «                              ¦   «         S ‰ j                              d¦  «         ‰ S )Nr   úFunctionalTensorMode | Nonec                 óî   •— ‰ j         t          j        j        j        k    r#t          t          j        j        j        ¦  «        S t          j                             t          j        j        j        ¦  «        S r7   )	r  r!   rQ   rS   r  r   r    r¡   Ú_get_dispatch_moder¨   s   €r(   Ú_get_prev_modez6FunctionalTensorMode.__enter__.<locals>._get_prev_modeÁ  s]   ø€ ØÔ!¥U¤XÔ%9Ô%EÒEÐEÝ6Ý”HÔ2Ô=ñô ð õ ”8×.Ò.Ý”Ô.Ô9ñô ð r*   TF)r   r
  )r  ÚappendrÂ   Ú	__enter__)r]   r  rÃ   s   ` €r(   r  zFunctionalTensorMode.__enter__À  s{   øø€ ð	ð 	ð 	ð 	ð 	ð 	ð ˆ>ÑÔÐ#ØÔ×#Ò# DÑ)Ô)Ð)Ý‘7”7×$Ò$Ñ&Ô&Ð&àÔ×#Ò# EÑ*Ô*Ð*ØˆKr*   Úexc_typeútype[BaseException] | NoneÚexc_valúBaseException | NoneÚexc_tbúTracebackType | Nonec                óˆ   •— | j                              ¦   «         }|r%t          ¦   «                              |||¦  «         d S d S r7   )r  ÚpoprÂ   Ú__exit__)r]   r  r  r  r  rÃ   s        €r(   r  zFunctionalTensorMode.__exit__Ñ  sM   ø€ ð Ô&×*Ò*Ñ,Ô,ˆØð 	8Ý‰GŒG×Ò˜X w°Ñ7Ô7Ð7Ð7Ð7ð	8ð 	8r*   r    Nr0   r   r   r   r^   r†   r_   r‡   r   c                ó²  ‡ — |€i }t          |¦  «        rt          S |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   dˆ fd„}dd„}dd	l
m}m}	m}
  ||¦  «        �r#t
          j                             |                     ¦   «         t
          j        j        j        ¦  «        sÝdd lmc m} dd lmc m} t
          j                             ¦   «         r#|j        r |
‰ |||¦  «        S  |	‰ |||¦  «        S |j        sgt5          |t
          j        j        ¦  «        rVt
          j        j                             |¦  «        s$t
          j        j                              |¦  «        r |
‰ |||¦  «        S  |	‰ |||¦  «        S dd
l!m"}m#}  ||¦  «        r„t
          j                             |                     ¦   «         t
          j        j        j        ¦  «        r%tI          d|                     ¦   «         › d�¦  «        ‚ |‰ j%        ‰ j&        |||¦  «        S tO          j(        t          |||f¦  «        \  }}tS          d¦  «         t
          j         *                    ¦   «         t
          j         +                    t
          j        j        j        ¦  «        z  }t
          j         ,                    ¦   «          -                    t
          j        j        j        ¦  «        t          j.        z
  }t5          |t^          ¦  «        rWta          ¦   «         }| 1                    |¦  «        }| 1                    |¦  «        } ||i |¤Ž}| 2                    |¦  «        }�n¬t
          j         3                    ||¦  «        5  	 t          j4        d¦  «        }|t          j        v rit
          j5        j6        j7         8                    ¦   «         5   ||i |¤Ž}d d d ¦  «         n# 1 swxY w Y   tO          j(        t
          j9        ||¦  «        }n“‰  :                    ||¦  «          |j;        t
          j        j        j        g|¢R i |¤Ž}‰ j<        r1|t
          j=        j>        j?        j@        u rt          jA        |¦  «         tO          j(        t
          j9        ||¦  «        }t          jB        ¦   «          t          j4        |¦  «         n,# t          jB        ¦   «          t          j4        |¦  «         w xY w	 d d d ¦  «         n# 1 swxY w Y   tS          d¦  «         t‡          d„ tO          jD        |¦  «        D ¦   «         ¦  «        r|t
          j=        j>        jE        j@        u r|S t
          jF        jG        |jH        v r`|t
          j=        j>        jI        jJ        urCt
          j        jK         L                    ¦   «         5   ||i |¤Ž d d d ¦  «         n# 1 swxY w Y   t›          ||||¦  «        S )Nrœ   Úobjectr   c                óÌ   •— t          | t          ¦  «        rt          d¦  «        ‚t          | t          j        ¦  «        r$t          j        | ¦  «        rt          | ‰¦  «        S | S )Nz*x must not be a FunctionalTensor in wrap())r‘   r%   rV   r!   r"   rk   )rœ   r]   s    €r(   Úwrapz5FunctionalTensorMode.__torch_dispatch__.<locals>.wrapô  sc   ø€ õ ˜!Õ-Ñ.Ô.ð SÝ$Ð%QÑRÔRÐRÝ˜!�Uœ\Ñ*Ô*ð 1­uÔ/JÈ1Ñ/MÔ/Mð 1Ý'¨¨4Ñ0Ô0Ð0ØˆHr*   r%   re   c                ó   — | j         S r7   )rf   )rœ   s    r(   Úunwrapz7FunctionalTensorMode.__torch_dispatch__.<locals>.unwrapþ  s	   € Ø”6ˆMr*   r   )Úcan_auto_functionalizeÚdo_auto_functionalizeÚdo_auto_functionalize_v2)Úhandle_effectsÚhas_effectszfunc zE with effects should not have a kernel for Functionalize dispatch keyz?Functionalization should not already be enabled above this modeTzNFunctionalization should not already be enabled above this mode after dispatchc              3  ó@   K  — | ]}t          |t          ¦  «        V — Œd S r7   )r‘   r%   )r&   rœ   s     r(   r:   z:FunctionalTensorMode.__torch_dispatch__.<locals>.<genexpr>‡  sA   è è € ð ð àõ ˜1Õ.Ñ/Ô/ðð ð ð ð ð r*   )rœ   r  r   r  )rœ   r%   r   re   )Nr.   r‹   r%   rŒ   rH   r!   rQ   Ú_dispatch_has_kernelÚnameÚ	decomposeÚ*torch._higher_order_ops.auto_functionalizer  r   r!  Ú%_dispatch_has_kernel_for_dispatch_keyrS   rT   Útorch._export.configrw   rx   Útorch._inductor.configr{   ÚcompilerÚis_exportingry   r|   r‘   Ú_opsr   Ú_libraryÚutilsÚis_outÚ
is_inplaceÚtorch._higher_order_ops.effectsr"  r#  rV   rý   r  ÚpytreeÚtree_map_onlyrY   Ú_dispatch_tls_local_include_setÚDispatchKeySetÚ_dispatch_tls_local_exclude_setÚremoverl   r   ÚPythonFunctionalizeAPIÚunwrap_tensorsÚwrap_tensorsÚ_ForceDispatchKeyGuardÚ#_functionalize_enable_reapply_viewsÚfxÚexperimentalÚproxy_tensorÚdisable_proxy_modes_tracingr"   Ú_sync_view_replay_annotationsÚ_op_dkr1   r?   r;   r@   rA   Ú_freeze_functional_tensorÚ_disable_functionalizationrC   Útree_leavesÚ
lift_freshÚTagÚinplace_viewÚtagsÚset_Úsource_TensorÚ_mode_utilsÚno_dispatchr   )r]   r0   r   r^   r_   Úrr  r  r  r   r!  Úexport_configÚinductor_configr"  r#  Úargs_unwrappedÚkwargs_unwrappedÚinclude_to_setÚexclude_to_setÚctxÚfully_unwrapped_argsÚfully_unwrapped_kwargsÚouts_unwrappedÚouts_wrappedÚold_apply_viewss   `                        r(   r•   z'FunctionalTensorMode.__torch_dispatch__Û  sI  ø€ ð ˆ>ØˆFå)¨%Ñ0Ô0ð 	"Ý!Ð!ð Õ(Ô5Ð5Ð5Ø×#Ò# D¨$°Ñ7Ô7ð 6õ ”×-Ò-¨d¯iªi©k¬kÑ:Ô:ð	 6ð ð ð Ø"�D”N DÐ3¨FÐ3Ð3�Ø�NÐ*Ð*Øðð ð ð ñ ô ð ð à*ðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð
	ð 	ð 	ð 	ð 	ð 	ð	ð 	ð 	ð 	ð	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð "Ð!Øñ
ô 
ñ 	Cå”(×@Ò@Ø�IŠI‰KŒK�œÔ-Ô;ñ
ô 
ð	Cð
 9Ð8Ð8Ð8Ð8Ð8Ð8Ð8Ð8Ø<Ð<Ð<Ð<Ð<Ð<Ð<Ð<Ð<åŒ~×*Ò*Ñ,Ô,ð Gà ÔIð NØ3Ð3°D¸$ÀÀfÑMÔMÐMà,Ð,¨T°4¸¸vÑFÔFÐFàÔ<ð JÝ˜4¥¤Ô!6Ñ7Ô7ðJõ ”NÔ(×/Ò/°Ñ5Ô5ðJõ ”~Ô+×6Ò6°tÑ<Ô<ð	Jð 0Ð/°°d¸DÀ&ÑIÔIÐIØ(Ð(¨¨t°T¸6ÑBÔBÐBàOÐOÐOÐOÐOÐOÐOÐOàˆ;�tÑÔð 		ÝŒx×=Ò=Ø—	’	‘”�UœXÔ1Ô?ñô ð õ %Øn˜DŸIšI™KœKÐnÐnÐnñô ð ð "�>ØÔ+¨T¬\¸4ÀÀvñô ð õ ,2Ô+?Ý˜f t¨V nñ,
ô ,
Ñ(ˆÐ(õ 	)ØMñ	
ô 	
ð 	
õ ŒH×4Ò4Ñ6Ô6ÝŒh×%Ò%¥e¤hÔ&:Ô&HÑIÔIñJð 	õ
 ŒH×4Ò4Ñ6Ô6×=Ò=Ý”Ô$Ô2ñô õ Ô3ñ4ð 	õ �dÕ/Ñ0Ô0ð =	Oõ
 )Ñ*Ô*ˆCØ#&×#5Ò#5°dÑ#;Ô#;Ð Ø%(×%7Ò%7Øñ&ô &Ð"ð "˜TØ%ðà(ðð ˆNð ×+Ò+¨NÑ;Ô;ˆL‰Lõ ”×0Ò0°ÀÑPÔPð +Oð +Oð*Oå&+Ô&OÐPTÑ&UÔ&U�Oð Õ/Ô<Ð<Ð<õ #œXÔ2Ô?×[Ò[Ñ]Ô]ð Wð WØ-1¨T°>Ð-VÐEUÐ-VÐ-V˜NðWð Wð Wñ Wô Wð Wð Wð Wð Wð Wð Wøøøð Wð Wð Wð Wå'-Ô';Ý!œL¨$°ñ(ô (˜˜ð ×:Ò:¸4ÀÑHÔHÐHð *5¨¬Ý!œHÔ0Ô>ð*à+ð*ð *ð *ð /ð*ð *˜ð  œ;ð PØ#¥u¤y¤~Ô'=Ô'EÐEÐEÝ %Ô ?ÀÑ OÔ OÐ OÝ'-Ô';Ý!œL¨$°ñ(ô (˜õ Ô4Ñ6Ô6Ð6ÝÔ=¸oÑNÔNÐNÐNøõ Ô4Ñ6Ô6Ð6ÝÔ=¸oÑNÔNÐNÐNøøøÐNðW+Oð +Oð +Oñ +Oô +Oð +Oð +Oð +Oð +Oð +Oð +Oøøøð +Oð +Oð +Oð +OõZ 	)Ø\ñ	
ô 	
ð 	
õ ð ð åÔ+¨LÑ9Ô9ðñ ô ñ ô ð	 ð •u”y”~Ô0Ô8Ð8Ð8àÐõ ŒIÔ" d¤iÐ/Ð/Ø�EœIœNÔ/Ô=Ð=Ð=å”Ô(×4Ò4Ñ6Ô6ð &ð &Ø��dÐ%˜fÐ%Ð%Ð%ð&ð &ð &ñ &ô &ð &ð &ð &ð &ð &ð &øøøð &ð &ð &ð &õ +¨4°°v¸|ÑLÔLÐLst   Á4B&Â&B*Â-B*Ï*U+Ï,A
T2Ð6	QÐ?T2ÑQ	ÑT2ÑQ	ÑB7T2Ô
(U+Ô2)UÕU+Õ+U/Õ2U/Ø'	X<Ø<Y ÙY údict[str, Any]c                ó  — t           j                             t           j        j        j        ¦  «        }|�Ót          j        ||g¦  «        D ]¾}t          |t          ¦  «        sŒt          j	        |j
        ¦  «        }	 |j        j        |         }n+# t          $ r |j        rt          d|› d�¦  «        d‚Y Œlw xY w|j        j        }t%          j        |¦  «        5  t          j        |¦  «         ddd¦  «         n# 1 swxY w Y   Œ½dS dS )a[  Sync FunctionalTensor args so view replay uses correct fx node metadata.

        When functionalization encounters a mutation, it handles aliases by lazily
        regenerating them at the first time they are next used. This is a problem when
        plumbing user annotations during tracing: we want view ops from view replay to
        have the same annotation the user specified on the original views. But view
        replay happens the next time the alias is used (e.g.
        second_op(alias_with_pending_mutation)), so the regenerated views would get the
        metadata for second_op instead.

        To fix this, we remember the node metadata from the original views and globally
        set it when we lazily perform view replay. The globally set metadata will be
        used to populate the fx node created for the replayed operation.
        Nzcannot find z in tensor_tracker)r!   rQ   r  r    ÚPROXYr4  rG  r‘   r%   r’   rf   ÚtracerÚtensor_trackerÚKeyErrorru   r”   ÚproxyÚnodeÚfx_tracebackÚset_current_replay_noder§   )r]   r^   r_   ÚmÚaÚ	unwrappedÚtracker_entryÚ	curr_nodes           r(   rC  z2FunctionalTensorMode._sync_view_replay_annotationsŸ  sf  € õ& ŒH×'Ò'­¬Ô(FÔ(LÑMÔMˆØˆ=ÝÔ'¨¨v¨Ñ7Ô7ð #ð #�Ý! !Õ%5Ñ6Ô6ð ØÝ!Ô9¸!¼&ÑAÔA�	ðØ$%¤HÔ$;¸IÔ$F�M�MøÝð ð ð ð !Ô.ð $Ý*ØH¨9ÐHÐHÐHñô à#ð$ð �Hðøøøð *Ô/Ô4�	Ý!Ô9¸)ÑDÔDð #ð #Ý”K ‘N”N�Nð#ð #ð #ñ #ô #ð #ð #ð #ð #ð #ð #øøøð #ð #ð #ð #øð+ ˆ=ð#ð #s$   Á>BÂ%B9Â8B9ÃC=Ã=D	ÄD	c                ó’   — t          || j        | j        ¦  «        }|�|S t          j        ||f¦  «        \  }}t          ||¦  «        S r7   )rL   r1   r2   r4  Útree_flattenr   )r]   r0   r^   r_   ÚresultÚflat_args_kwargsrb   s          r(   rH   z#FunctionalTensorMode._can_decomposeË  sR   € õ % T¨4¬;¸Ô8IÑJÔJˆØÐØˆMõ %Ô1°4¸°.ÑAÔAÑÐ˜!Ý-¨dÐ4DÑEÔEÐEr*   c                ó   — dS )NTr    )r�   s    r(   Úis_infra_modez"FunctionalTensorMode.is_infra_modeÝ  s   € àˆtr*   )FFF)r2   r   r1   r   rý   r   r   rO   )r   r	   )r  r  r  r  r  r  r   rO   rÕ   rÖ   )r^   r†   r_   r]  r   rO   )r0   r   r^   r†   r_   r]  r   r   r×   )rØ   rÙ   rÚ   r   r  r  r•   rC  rH   Úclassmethodrq  rú   rû   s   @r(   ri   ri   š  s  ø€ € € € € ð #ØØ',ð	"(ð "(ð "(ð "(ð "(ð "(ð "(ðJð ð ð ð ð ð"8ð 8ð 8ð 8ð 8ð 8ð !#Ø(,ðBMð BMð BMð BMð BMðH*#ð *#ð *#ð *#ðXFð Fð Fð Fð$ ðð ð ñ „[ðð ð ð ð r*   ri   úGenerator[None, None, None]c                 óH   — t          t          j        j        j        ¦  «        S r7   )r   r!   rQ   r    r¡   r    r*   r(   Údisable_functional_moderu  â  s   € å�uœxÔ=ÔHÑIÔIÐIr*   rh   c                ó0   ‡ ‡‡‡— d
d„Šd
d„Šdˆˆ ˆˆfd	„}|S )Nr'   r  r   c                ón   — t          | t          j        ¦  «        rt                               | ¦  «        S | S r7   )r‘   r!   r"   r%   r¥   ©r'   s    r(   Úto_funz&dispatch_functionalize.<locals>.to_funó  s/   € Ý�a�œÑ&Ô&ð 	5Ý#×1Ò1°!Ñ4Ô4Ð4Øˆr*   c                ó  — t          | t          ¦  «        s?t          | t          j        ¦  «        r#t          j        | ¦  «        rt          d¦  «        ‚| S t          j        | ¦  «         t          j        | j        ¦  «        S )NzCNon-FunctionalTensor torch.Tensor should not be a functional tensor)	r‘   r%   r!   r"   rk   rV   r§   r’   rf   rx  s    r(   Úfrom_funz(dispatch_functionalize.<locals>.from_funø  sx   € Ý˜!Õ-Ñ.Ô.ð 	å˜!�Uœ\Ñ*Ô*ð ÝÔ.¨qÑ1Ô1ð Ý(Ø]ñô ð ð ˆHÝŒ�A‰ŒˆÝÔ,¨Q¬VÑ4Ô4Ð4r*   r^   r   r_   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 r7   )
r!   rQ   Ú_ExcludeDispatchKeyGuardr7  rS   rT   r4  r5  r"   r%   )r^   r_   Údisable_aboveÚ	func_argsÚfunc_kwargsÚfunc_outputsÚoutputsr{  r0   rh   ry  s          €€€€r(   Úinnerz%dispatch_functionalize.<locals>.inner  s{  ø€ Ýœ×9Ò9ÝŒH×#Ò#¥E¤HÔ$8Ô$FÑGÔGñ
ô 
ˆð ð 	ð 	˜Dð 	ð 	ÝÔ,­U¬\¸6À4ÑHÔHˆIÝ Ô.­u¬|¸VÀVÑLÔLˆKØ˜4 Ð:¨kÐ:Ð:ˆLÝÔ*Õ+;¸XÀ|ÑTÔTˆGàð	ð 	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	s7   ÁC-ÁA%CÂ<C-ÃC	ÃC-ÃC	ÃC-Ã-C1Ã4C1)r'   r  r   r  )r^   r   r_   r   r   r   r    )r0   rh   rƒ  r{  ry  s   `` @@r(   Údispatch_functionalizer„  ï  sb   øøøø€ ðð ð ð ð

5ð 
5ð 
5ð 
5ð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð €Lr*   c                  óŽ   — e Zd Zedd„¦   «         Zedd„¦   «         Zedd
„¦   «         Zedd„¦   «         Zdd„Zdd„Z	dd„Z
dd„ZdS )ÚBaseFunctionalizeAPIr^   r†   r   c                ó   — d S r7   r    ©r]   r^   s     r(   r<  z!BaseFunctionalizeAPI.wrap_tensors  ó   € àˆr*   ú'torch.Tensor | tuple[torch.Tensor, ...]r   c                ó   — d S r7   r    rˆ  s     r(   r;  z#BaseFunctionalizeAPI.unwrap_tensors  r‰  r*   Úinner_fr[   c                ó   — d S r7   r    ©r]   rŒ  s     r(   Úfunctionalizez"BaseFunctionalizeAPI.functionalize  r‰  r*   úAbstractContextManager[None]c                ó   — d S r7   r    r¨   s    r(   Úredispatch_to_nextz'BaseFunctionalizeAPI.redispatch_to_next   r‰  r*   Úinput_tensorre   Úoutput_tensorrO   c                ó0   — t          j        ||¦  «         d S r7   )r!   r®   )r]   r“  r”  s      r(   ÚreplacezBaseFunctionalizeAPI.replace$  s   € ÝÔ$ \°=ÑAÔAÐAÐAÐAr*   Útensorc                ó.   — t          j        |¦  «         d S r7   )r!   r±   ©r]   r—  s     r(   r²   z"BaseFunctionalizeAPI.commit_update'  s   € ÝÔ*¨6Ñ2Ô2Ð2Ð2Ð2r*   c                ó.   — t          j        |¦  «         d S r7   )r!   r´   r™  s     r(   rµ   zBaseFunctionalizeAPI.sync*  s   € ÝÔ! &Ñ)Ô)Ð)Ð)Ð)r*   c                ó.   — t          j        |¦  «         d S r7   )r!   r·   r™  s     r(   r¸   z7BaseFunctionalizeAPI.mark_mutation_hidden_from_autograd-  s   € ÝÔ?ÀÑGÔGÐGÐGÐGr*   N©r^   r†   r   r†   )r^   rŠ  r   r   )rŒ  r[   r   r[   ©r   r�  ©r“  re   r”  re   r   rO   ©r—  re   r   rO   )rØ   rÙ   rÚ   r   r<  r;  r�  r’  r–  r²   rµ   r¸   r    r*   r(   r†  r†    sì   € € € € € Øðð ð ñ „^ðð ðð ð ñ „^ðð ðð ð ñ „^ðð ðð ð ñ „^ððBð Bð Bð Bð3ð 3ð 3ð 3ð*ð *ð *ð *ðHð Hð Hð Hð Hð Hr*   r†  c                  ó|   ‡ — e Zd Z	 d!d"ˆ fd	„Zd#d„Zd$d„Zd%d„Zd&d„Zed'd„¦   «         Z	d(d„Z
d)d„Zd)d„Zd)d „Zˆ xZS )*r:  NFrh   r
  r2   r   r   rO   c                ó„   •— t          ¦   «                              ¦   «          |r|nt          ¦   «         | _        || _        d S r7   )rÂ   r   ri   rh   r2   )r]   rh   r2   rÃ   s      €r(   r   zPythonFunctionalizeAPI.__init__2  s@   ø€ õ 	‰Œ×ÒÑÔÐØ Ð<�D�DÕ&:Ñ&<Ô&<ˆŒ	Ø(ˆÔÐÐr*   r^   ú
tuple[Any]c                ó¸   — | j         5  t          j        j                             t          j        t          j        |¦  «        cd d d ¦  «         S # 1 swxY w Y   d S r7   )rh   r!   r0  Ú_pytreer5  r"   r%   r¥   rˆ  s     r(   r<  z#PythonFunctionalizeAPI.wrap_tensors9  s“   € ØŒYð 	ð 	Ý”;Ô&×4Ò4Ý”Õ.Ô<¸dñô ð	ð 	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	s   ˆ:AÁAÁAú<torch.Tensor | tuple[torch.Tensor, ...] | list[torch.Tensor]r   c                ól   — t           j        j                             t          t          j        |¦  «        S r7   )r!   r0  r¤  r5  r%   r©   rˆ  s     r(   r;  z%PythonFunctionalizeAPI.unwrap_tensors?  s,   € õ Œ{Ô"×0Ò0ÝÕ.Ô>Àñ
ô 
ð 	
r*   rŒ  r
   c                ó,   — t          || j        ¦  «        S r7   )r„  rh   rŽ  s     r(   r�  z$PythonFunctionalizeAPI.functionalizeG  s   € Ý% g¨t¬yÑ9Ô9Ð9r*   r�  c                ó(   — t          j        ¦   «         S r7   )Ú
contextlibÚnullcontextr¨   s    r(   r’  z)PythonFunctionalizeAPI.redispatch_to_nextJ  s   € õ Ô%Ñ'Ô'Ð'r*   r—  re   r&  rN   r%   c                ór   — t          | t          ¦  «        s!t          |› dt          | ¦  «        › �¦  «        ‚| S )Nz! must be a FunctionalTensor, got )r‘   r%   rV   Útype)r—  r&  s     r(   Ú_check_cast_functionalz-PythonFunctionalizeAPI._check_cast_functionalR  sE   € å˜&Õ"2Ñ3Ô3ð 	Ý ØÐHÐH½$¸v¹,¼,ÐHÐHñô ð ð ˆr*   r“  r”  c                ó¤   — |                       |d¦  «        }t          |t          ¦  «        rt          d¦  «        ‚|                     |¦  «         d S )Nr“  z,output_tensor must not be a FunctionalTensor)r­  r‘   r%   rV   r¯   )r]   r“  r”  Úfts       r(   r–  zPythonFunctionalizeAPI.replaceZ  sR   € Ø×(Ò(¨°~ÑFÔFˆÝ�mÕ%5Ñ6Ô6ð 	QÝ Ð!OÑPÔPÐPØ
�Š�MÑ"Ô"Ð"Ð"Ð"r*   c                óV   — |                       |d¦  «                             ¦   «          d S ©Nr—  )r­  r²   r™  s     r(   r²   z$PythonFunctionalizeAPI.commit_update`  s*   € Ø×#Ò# F¨HÑ5Ô5×CÒCÑEÔEÐEÐEÐEr*   c                óV   — |                       |d¦  «                             ¦   «          d S r±  )r­  rµ   r™  s     r(   rµ   zPythonFunctionalizeAPI.syncc  s*   € Ø×#Ò# F¨HÑ5Ô5×:Ò:Ñ<Ô<Ð<Ð<Ð<r*   c                óV   — |                       |d¦  «                             ¦   «          d S r±  )r­  r¸   r™  s     r(   r¸   z9PythonFunctionalizeAPI.mark_mutation_hidden_from_autogradf  s/   € Ø×#Ò#Ø�Hñ	
ô 	
ç
,Ò
,Ñ
.Ô
.Ð
.Ð
.Ð
.r*   rÿ   )rh   r
  r2   r   r   rO   ©r^   r¢  r   r¢  )r^   r¥  r   r   ©rŒ  r
   r   r
   r�  )r—  re   r&  rN   r   r%   rž  rŸ  )rØ   rÙ   rÚ   r   r<  r;  r�  r’  ré   r­  r–  r²   rµ   r¸   rú   rû   s   @r(   r:  r:  1  s	  ø€ € € € € àMRð)ð )ð )ð )ð )ð )ð )ðð ð ð ð
ð 
ð 
ð 
ð:ð :ð :ð :ð(ð (ð (ð (ð ðð ð ñ „\ðð#ð #ð #ð #ðFð Fð Fð Fð=ð =ð =ð =ð/ð /ð /ð /ð /ð /ð /ð /r*   r:  c                  ó.   — e Zd Zdd„Zdd„Zdd	„Zdd„ZdS )ÚCppFunctionalizeAPIr^   r†   r   c                ó(   — ddl m}  ||d¬¦  «        S ©Nr   )Ú_wrap_all_tensors_to_functional)Úlevel)Ú!torch._functorch.eager_transformsrº  ©r]   r^   rº  s      r(   r<  z CppFunctionalizeAPI.wrap_tensorsm  s*   € ØUÐUÐUÐUÐUÐUà.Ð.¨t¸1Ð=Ñ=Ô=Ð=r*   rŠ  c                ó@   — ddl m}  ||t          ¦   «         ¬¦  «        S ©Nr   )Ú#_unwrap_all_tensors_from_functional)Úreapply_views)r¼  rÀ  Ú_reapply_views©r]   r^   rÀ  s      r(   r;  z"CppFunctionalizeAPI.unwrap_tensorsr  s>   € ð	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 3Ð2°4Å~ÑGWÔGWÐXÑXÔXÐXr*   rŒ  r
   c                ó@   — t           j                             |¦  «        S r7   )r!   r0   r�  rŽ  s     r(   r�  z!CppFunctionalizeAPI.functionalize|  s   € ÝŒz×'Ò'¨Ñ0Ô0Ð0r*   r�  c                ó¢   — t           j                             t           j                             t           j        j        j        ¦  «        ¦  «        S r7   )r!   rQ   r}  r7  rS   rT   r¨   s    r(   r’  z&CppFunctionalizeAPI.redispatch_to_next  s7   € ÝŒx×0Ò0ÝŒH×#Ò#¥E¤HÔ$8Ô$FÑGÔGñ
ô 
ð 	
r*   Nrœ  ©r^   rŠ  r   rŠ  rµ  r�  )rØ   rÙ   rÚ   r<  r;  r�  r’  r    r*   r(   r·  r·  l  sh   € € € € € ð>ð >ð >ð >ð
Yð Yð Yð Yð1ð 1ð 1ð 1ð
ð 
ð 
ð 
ð 
ð 
r*   r·  c                  ó6   — e Zd Zdd„Zdd„Zdd
„Zdd„Zdd„ZdS )ÚFunctorchFunctionalizeAPIÚinterpreterr   r   rO   c                ó   — || _         d S r7   )rÉ  )r]   rÉ  s     r(   r   z"FunctorchFunctionalizeAPI.__init__†  s   € Ø&ˆÔÐÐr*   r^   r¢  c                óV   — ddl m}  ||| j                             ¦   «         ¬¦  «        S r¹  )r¼  rº  rÉ  r»  r½  s      r(   r<  z&FunctorchFunctionalizeAPI.wrap_tensors‰  s9   € ØUÐUÐUÐUÐUÐUà.Ð.¨t¸4Ô;K×;QÒ;QÑ;SÔ;SÐTÑTÔTÐTr*   rŠ  c                óV   — ddl m}  ||| j                             ¦   «         ¬¦  «        S r¿  )r¼  rÀ  rÉ  Úfunctionalize_add_back_viewsrÃ  s      r(   r;  z(FunctorchFunctionalizeAPI.unwrap_tensorsŽ  sP   € ð	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 3Ð2Ø Ô 0× MÒ MÑ OÔ Oð
ñ 
ô 
ð 	
r*   rŒ  r
   c                óz   — t           j                             || j                             ¦   «         rdnd¬¦  «        S )NÚmutations_and_viewsÚ	mutations)r9  )r!   r0   r�  rÉ  rÍ  rŽ  s     r(   r�  z'FunctorchFunctionalizeAPI.functionalizeš  sF   € ÝŒz×'Ò'Øð Ô#×@Ò@ÑBÔBð!Ð%Ð%à ð (ñ 
ô 
ð 	
r*   r�  c                ó4   — | j                              ¦   «         S r7   )rÉ  Úlowerr¨   s    r(   r’  z,FunctorchFunctionalizeAPI.redispatch_to_next¤  s   € ØÔ×%Ò%Ñ'Ô'Ð'r*   N)rÉ  r   r   rO   r´  rÆ  rµ  r�  )rØ   rÙ   rÚ   r   r<  r;  r�  r’  r    r*   r(   rÈ  rÈ  …  s|   € € € € € ð'ð 'ð 'ð 'ðUð Uð Uð Uð
	
ð 	
ð 	
ð 	
ð
ð 
ð 
ð 
ð(ð (ð (ð (ð (ð (r*   rÈ  r—  re   c                ób   — t          | t          ¦  «        rt          j        | j        ¦  «        S | S r7   )r‘   r%   r!   r’   rf   )r—  s    r(   Úmb_unwrap_functional_tensorrÔ  ¨  s-   € Ý�&Õ*Ñ+Ô+ð :ÝÔ,¨V¬[Ñ9Ô9Ð9Ø€Mr*   )r   r   r   r   )r0   r   r1   r   r2   r   r   r3   )rM   rN   r   rO   )rZ   r   r   r[   )r   rs  )r0   r[   rh   ri   r   r[   )r—  re   r   re   )DÚ
__future__r   r©  Ú	functoolsrI   r  Úabcr   r   r   Útypingr   r   Útyping_extensionsr	   ÚbuiltinsÚcollections.abcr
   r   r   r   r   Útorch._functorch.pyfunctorchr   Ú
torch._opsr   r!   Útorch.fx.tracebackr?  Ú	tracebackre  Útorch.utils._pytreer0  r¤  r4  Útorch._Cr   rÂ  r   r   Útorch._subclasses.meta_utilsr   Útorch.utils._python_dispatchr   r   r   r   r   Ú_loggingÚgetArtifactLoggerrØ   r+   r.   Ú	lru_cacherL   rY   rc   r"   r%   ri   Úcontextmanagerru  r„  r†  r:  r·  rÈ  rÔ  r    r*   r(   ú<module>rè     sÓ  ðØ "Ð "Ð "Ð "Ð "Ð "à Ð Ð Ð Ø Ð Ð Ð Ø €€€Ø €€€Ø #Ð #Ð #Ð #Ð #Ð #Ð #Ð #Ø -Ð -Ð -Ð -Ð -Ð -Ø %Ð %Ð %Ð %Ð %Ð %Ð %Ð %Ø "Ð "Ð "Ð "Ð "Ð "ð ð &Ø€O€O€OØ=Ð=Ð=Ð=Ð=Ð=Ð=Ð=Ð=Ð=Ø#Ð#Ð#Ð#Ð#Ð#àEÐEÐEÐEÐEÐEØ%Ð%Ð%Ð%Ð%Ð%à €€€Ø )Ð )Ð )Ð )Ð )Ð )Ð )Ð )Ð )Ø $Ð $Ð $Ð $Ð $Ð $Ð $Ð $Ð $Ø KÐ KÐ KÐ KÐ KÐ KØ KÐ KÐ KÐ KÐ KÐ KÐ KÐ KØ 6Ð 6Ð 6Ð 6Ð 6Ð 6ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ”n×6Ò6°xÐARÑSÔSÐ ð
$ð 
$ð 
$ð 
$ð €Ô˜SÐ!Ñ!Ô!ð ð  ð  ñ "Ô!ð ðF"ð "ð "ð "ð2ð ð ð ð_!ð _!ð _!ð _!ð _!�u”|ñ _!ô _!ð _!ðD	Eð Eð Eð Eð EÐ,ñ Eô Eð EðP
 ÔðJð Jð Jñ ÔðJð <PÐ;OÑ;QÔ;Qð!ð !ð !ð !ð !ðHHð Hð Hð Hð H˜3ñ Hô Hð Hð<8/ð 8/ð 8/ð 8/ð 8/Ð1ñ 8/ô 8/ð 8/ðv
ð 
ð 
ð 
ð 
Ð.ñ 
ô 
ð 
ð2 (ð  (ð  (ð  (ð  (Ð 4ñ  (ô  (ð  (ðFð ð ð ð ð r*   