Ë
    ÄÓ^j—¢  ã                  ó–  — 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j`                  jc                  e2d«      Z3d%d„Z4 ejj                  d¬«      	 	 	 	 	 	 	 	 d&d„«       Z6d'd„Z7d(d„Z8 G d„ dejr                  «      Z: G d„ de/«      Z;ejx                  d)d„«       Z= e;«       f	 	 	 	 	 d*d„Z> G d„ de«      Z? G d„ de?«      Z@ G d „ d!e?«      ZA G d"„ d#e?«      ZBd+d$„ZCy),é    )Ú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_implementedc                óÒ   — | D �cg c]5  }|t         j                  t         j                  j                  t        fvr|‘Œ7 }}|rt
        j                  d|«       t        |«      S c c}w )Nz.FunctionalTensor unrecognized subclass(es): %s)ÚtorchÚTensorÚ_subclassesÚ
FakeTensorÚFunctionalTensorÚnot_implemented_logÚdebugÚbool)ÚtypesÚtÚunrecognized_typess      ún/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/torch/_subclasses/functional_tensor.pyÚ_has_unrecognized_tensor_typesr'   '   sn   € ð öàØ”U—\‘\¤5×#4Ñ#4×#?Ñ#?ÔAQÐRÑRò 	
ðÐð ñ
 Ü×!Ñ!Ø<Ð>Pô	
ô Ð"Ó#Ð#ùòs   …:A$i   )Úmaxsizec                ó„  — |r1| t         j                  j                  j                  j                  u ryddlm}  || «      ryt        d„ | j                  j                  D «       «      }|s| j                  j                  ry|r=|r:| j                  dvr+| j                  «       rt        j                  d| › d�d	¬
«       yyy)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  ó4   K  — | ]  }|j                   –— Œ y ­w©N)Ú
alias_info)Ú.0Úargs     r&   ú	<genexpr>z&_can_decompose_fast.<locals>.<genexpr>E   s   è ø€ ÒN°˜SŸ^�^ÑNùs   ‚)Ú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   Úopsr1   ÚdropoutÚdefaultÚtorch._decompr*   ÚanyÚ_schemaÚ	argumentsÚ
is_mutableÚ	namespaceÚ_can_decomposeÚwarningsÚwarn)ÚfuncÚexportÚpre_dispatchr*   Úalias_info_presents        r&   Ú_can_decompose_fastrE   4   s¬   € ñ �$œ%Ÿ)™)Ÿ.™.×0Ñ0×8Ñ8Ñ8ØåAá*¨4Ô0ØäÑN°t·|±|×7MÑ7MÔNÓNÐÙ˜TŸ\™\×4Ò4ØáÙØ�~‰~Ð%5Ñ5¸$×:MÑ:MÔ:OÜ—‘ðà!˜FÐ"5ð7ð  !õ	ð Øàó    c                ó(  — t         j                  j                  t         j                  j                  j                  «      }t         j                  j                  t         j                  j                  j                  «      }|s|rt        | «      ‚y y r,   )r   Ú_CÚ&_dispatch_tls_is_dispatch_key_includedÚDispatchKeyÚFunctionalizeÚ&_dispatch_tls_is_dispatch_key_excludedÚAssertionError)ÚmsgÚis_includedÚis_excludeds      r&   Ú _assert_functionalize_not_activerQ   X   sk   € Ü—(‘(×AÑAÜ�‰×Ñ×*Ñ*ó€Kô —(‘(×AÑAÜ�‰×Ñ×*Ñ*ó€Kñ ™;Ü˜SÓ!Ð!ð 'ˆ;rF   c                 ó   ‡ — dˆ fd„}|S )Nc                ó0   •—  | j                   |i i |¥‰¥¤ŽS r,   )Úto)ÚselfÚargsÚkwargsÚextra_kwargss      €r&   Ú_z&_conversion_method_template.<locals>._r   s$   ø€ Øˆt�w‰w˜Ð;Ð : 6Ð :¨\Ð :Ñ;Ð;rF   )rU   r   rV   r   rW   r   Úreturnr   © )rX   rY   s   ` r&   Ú_conversion_method_templater\   q   s   ø€ õ<ð €HrF   c                  óè  ‡ — e Zd ZU dZded<   ej                  j                  j                  Z	ej                  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"                  j0                  j&                  ej                   j"                  j2                  j&                  ej                   j"                  j4                  j&                  ej                   j"                  j6                  j&                  ej                   j"                  j8                  j&                  ej                   j"                  j:                  j&                  ej                   j"                  j<                  j&                  ej                   j"                  j>                  j&                  ej                   j@                  jB                  j&                  h«      Z"dZ#ded<   dd„Z$	 	 d	 	 	 	 	 	 	 	 	 dd„Z%dd	œdd
„Z&e'd d„«       Z(d!d„Z)d"d„Z*d#d„Z+d$d„Z,d$d„Z-d$d„Z.d%d„Z/d&ˆ fd„Z0	 d'	 	 	 	 	 	 	 d(d„Z1 e2ejf                  ¬«      Z4 e2 ejB                  d«      ¬«      Z5 e2ejl                  ¬«      Z6 e2ejn                  ¬«      Z8 e2ejr                  ¬«      Z: e2ejv                  ¬«      Z< e2ejz                  ¬«      Z= e2ej|                  ¬«      Z? e2ej€                  ¬«      ZA e2ej„                  ¬«      ZC	 d'ddœ	 	 	 	 	 d)d„ZDeEd*d„«       ZFd+d„ZGˆ xZHS ),r   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_basec                óÌ  — t        j                  |«      st        d«      ‚t        j                  t         j
                  j                  |«      z  }t         j                  j                  | |j                  t        |«      s|j                  «       nd t        |«      s|j                  «       nd d |j                  |j                  |j                  d|j                   d dd|«      }t         j
                  j#                  |«       ||_        t         j&                  j(                  j*                  rµt        j,                  «       r¡t         j.                  j(                  j0                  r}|j$                  j3                  «       }|j5                  «       rd |_        ||j8                  |<   |S |j8                  j;                  |«      |_        |j6                  €||j8                  |<   |S )Nz elem must be a functional tensorF)r   Ú_is_functional_tensorrM   r   Ú_extra_dispatch_keysrH   Ú_dispatch_keysr   Ú_make_wrapper_subclassÚshaper   ÚstrideÚstorage_offsetÚdtypeÚlayoutÚdeviceÚrequires_gradÚ_set_throw_on_mutable_data_ptrr_   Ú_exportÚconfigÚ(enable_auto_functionalized_v2_for_exportÚis_inference_mode_enabledÚ	_inductorÚenable_auto_functionalized_v2Úuntyped_storageÚis_base_tensorr`   Ú_storage_to_baseÚget)Úclsr_   ÚmodeÚextra_dispatch_keysÚoutÚstorages         r&   Ú__new__zFunctionalTensor.__new__®   sƒ  € Ü×*Ñ*¨4Ô0Ü Ð!CÓDÐDô& ×1Ñ1´E·H±H×4KÑ4KÈDÓ4QÑQð 	ô �l‰l×1Ñ1ð
 Ø�J‰JÜ!.¨tÔ!4ˆD�K‰KŒM¸$ä-:¸4Ô-@�×#Ñ#Ô%ÀdàØ�J‰JØ�K‰KØ�K‰KØØ×ÑØØØØó)
ˆô, 	�‰×/Ñ/°Ô4ØˆŒô �M‰M× Ñ ×IÒIÜ×/Ñ/Ô1Ü—‘×&Ñ&×DÒDà—h‘h×.Ñ.Ó0ˆGØ×!Ñ!Ô#Ø+/�Ô(ð 25�×%Ñ% gÑ.ð
 ˆ
ð ,0×+@Ñ+@×+DÑ+DÀWÓ+M�Ô(Ø×+Ñ+Ð3Ø58�D×)Ñ)¨'Ñ2Øˆ
rF   c                óZ  — t        |«      rt        S |€i }|t        j                  v �r#t	        |«      dk7  rt        d«      ‚|t        j                  j                  j                  j                  t        j                  j                  j                  j                  fv rXt	        |«      dk7  st        |d   t        «      st        d«      ‚ |t        j                  |d   j                  «      |d   «      S t	        |«      dk7  st        |d   t        «      st        d«      ‚ |t        j                  |d   j                  «      «      S |t        j                  j                  j                   j                  u r&t	        |«      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ÚlenrM   r   r5   r1   Úis_strides_like_formatr7   Úis_contiguousÚmemory_formatÚ
isinstanceÚ_from_functional_tensorr_   ÚdetachÚRuntimeError)rU   rA   r#   rV   rW   s        r&   Ú__torch_dispatch__z#FunctionalTensor.__torch_dispatch__ð   sb  € ô *¨%Ô0Ü!Ð!àˆ>ØˆFð Ô#×0Ñ0Ò0ô �6‹{˜aÒÜ$Ð%RÓSÐSØÜ—	‘	—‘×5Ñ5×=Ñ=Ü—	‘	—‘×,Ñ,×:Ñ:ðñ ô �t“9 ’>¬°D¸±GÔ=MÔ)NÜ(Ð)VÓWÐWÙœE×9Ñ9¸$¸q¹'¿,¹,ÓGÈÈaÉÓQÐQÜ�4‹y˜AŠ~¤Z°°Q±Ô9IÔ%JÜ$Ð%KÓLÐLáœ×5Ñ5°d¸1±g·l±lÓCÓDÐDØ”5—9‘9—>‘>×(Ñ(×0Ñ0Ñ0ô
 �4‹y˜AŠ~¤*¨T°!©WÔ6FÔ"GØ˜A‘w�ô Øó
ð 	
rF   )Útensor_contentsc               ó4   — dt        | j                  «      › d�S )NzFunctionalTensor(ú))Úreprr_   )rU   rŒ   s     r&   Ú__repr__zFunctionalTensor.__repr__"  s   € Ø"¤4¨¯	©	£?Ð"3°1Ð5Ð5rF   c                ó„  — t        j                  | «      rt        d«      ‚t        j                  | «      }t	        t         j
                  j                  j                  «      }|€t        d«      ‚|5  t        j                  | |«       t        ||«      }t        j                  ||«       d d d «       |S # 1 sw Y   S xY w)Nz)x must not already be a functional tensorú functional_mode must not be None)
r   rb   rM   Ú_to_functional_tensorr   rH   Ú_TorchDispatchModeKeyÚ
FUNCTIONALÚ_mirror_autograd_meta_tor   )ÚxÚx_functionalÚfunctional_moder{   s       r&   Úto_functionalzFunctionalTensor.to_functional%  s«   € ô ×&Ñ& qÔ)Ü Ð!LÓMÐMô
 ×2Ñ2°1Ó5ˆô -¬U¯X©X×-KÑ-K×-VÑ-VÓWˆØÐ"Ü Ð!CÓDÐDàñ 	>Ü×*Ñ*¨1¨lÔ;Ü" <°ÓAˆCÜ×*Ñ*¨<¸Ô=÷	>ð ˆ
÷		>ð ˆ
ús   Á29B5Â5B?c                ój   — t        j                  | «       t        j                  | j                  «      S r,   )r   Ú_syncrˆ   r_   ©rU   s    r&   Úfrom_functionalz FunctionalTensor.from_functional@  s#   € Ü�‰�DÔÜ×,Ñ,¨T¯Y©YÓ7Ð7rF   c                ó@   — t        j                  | j                  «      S r,   )r   Ú_is_functional_tensor_baser_   r�   s    r&   ru   zFunctionalTensor.is_base_tensorD  s   € Ü×/Ñ/°·	±	Ó:Ð:rF   c                óD   — t        j                  | j                  |«       y r,   )r   Ú_functionalize_replacer_   )rU   Úoutputs     r&   Úreplace_zFunctionalTensor.replace_G  s   € Ü×$Ñ$ T§Y¡Y°Õ7rF   c                óB   — t        j                  | j                  «       y r,   )r   Ú_functionalize_commit_updater_   r�   s    r&   Úcommit_updatezFunctionalTensor.commit_updateJ  s   € Ü×*Ñ*¨4¯9©9Õ5rF   c                óB   — t        j                  | j                  «       y r,   )r   Ú_functionalize_syncr_   r�   s    r&   ÚsynczFunctionalTensor.syncM  s   € Ü×!Ñ! $§)¡)Õ,rF   c                óB   — t        j                  | j                  «       y r,   )r   Ú1_functionalize_mark_mutation_hidden_from_autogradr_   r�   s    r&   Ú"mark_mutation_hidden_from_autogradz3FunctionalTensor.mark_mutation_hidden_from_autogradP  s   € Ü×?Ñ?ÀÇ	Á	ÕJrF   c                ó^  — | j                   j                  «       dk(  r| j                   j                  «       S | j                   j                  «       dk(  r(| j                   D �cg c]  }|j                  «       ‘Œ c}S | j                   D �cg c]  }|j                  «       ‘Œ c}S c c}w c c}w )Nr   r€   )r_   ÚdimÚitemÚtolist)rU   r_   s     r&   r±   zFunctionalTensor.tolistS  su   € Ø�9‰9�=‰=‹?˜aÒØ—9‘9—>‘>Ó#Ð#Ø�Y‰Y�]‰]‹_ Ò!Ø,0¯I©IÖ6 D�D—I‘I•KÒ6Ð6à.2¯i©iÖ8 d�D—K‘K•MÒ8Ð8ùò 7ùâ8s   Á#B%ÂB*c                ó&  •— t        t        j                  j                  j                  «      j
                  rKt        j                  j                  j                  | | j                  | j                  | j                  ¬«       t        ‰| �4  |i |¤ŽS )N)ri   rk   rj   )r   r   rH   r”   r•   rB   r5   r1   Ú_assert_tensor_metadatari   rk   rj   ÚsuperrT   )rU   rV   rW   Ú	__class__s      €r&   rT   zFunctionalTensor.to[  sj   ø€ ÜœeŸh™h×<Ñ<×GÑGÓH×OÒOÜ�I‰I�N‰N×2Ñ2ØØ—j‘jØ—{‘{Ø—{‘{ð	 3ô ô ‰w‰z˜4Ð* 6Ñ*Ð*rF   c                ó¶   — |xs t         j                  j                  «       }t        |«      dkD  r | j                  |g|¢­i |¤ŽS  | j                  dd|i|¤ŽS )Nr   rk   r[   )r   ÚcudaÚcurrent_devicerƒ   rT   )rU   rk   rV   rW   s       r&   r·   zFunctionalTensor.cudaf  sZ   € ð Ò6œ5Ÿ:™:×4Ñ4Ó6ˆÜˆt‹9�qŠ=Ø�4—7‘7˜6Ð3 DÒ3¨FÑ3Ð3à�4—7‘7Ñ3 &Ð3¨FÑ3Ð3rF   ©ri   Úcpu)rk   )Úmasked_gradc               óÂ  — | j                   t        j                  k(  r|€| S | j                  |¬«      S | j                  j                  ||¬«      }t        |t        j                  «      rgt        j                  |«      rRt        t        j                  j                  j                  «      }|€t        d«      ‚|5  t        ||«      cd d d «       S |S # 1 sw Y   |S xY w)Nr¹   )ri   r»   r’   )rj   r   ÚstridedrT   r_   Úto_denser‡   r   rb   r   rH   r”   r•   rM   r   )rU   ri   r»   r{   r™   s        r&   r¾   zFunctionalTensor.to_dense{  sÀ   € ð �;‰;œ%Ÿ-™-Ò'Øˆ}Ø�Ø—7‘7 �7Ó'Ð'à�i‰i× Ñ  u¸+Ð ÓFˆÜ�cœ5Ÿ<™<Ô(¬U×-HÑ-HÈÔ-MÜ0Ü—‘×.Ñ.×9Ñ9óˆOð Ð&Ü$Ð%GÓHÐHØ ñ >Ü'¨¨_Ó=÷>ñ >àˆ
÷>àˆ
ús   Â<CÃCc                ó.   — | j                   j                  S r,   )r_   rj   r�   s    r&   rj   zFunctionalTensor.layout‘  s   € ð �y‰y×ÑÐrF   c                ó4   — t        | j                  «       «      S r,   )r"   r°   r�   s    r&   Ú__bool__zFunctionalTensor.__bool__–  s   € Ü�D—I‘I“KÓ Ð rF   )r_   r^   ry   ÚFunctionalTensorModerZ   r	   ©r[   N©
rA   r   r#   úSequence[type]rV   útuple[Any, ...]rW   zdict[str, Any] | NonerZ   r   )rŒ   zobject | NonerZ   Ústr)r—   r^   rZ   r   )rZ   r^   ©rZ   r"   )r£   r^   rZ   ÚNone)rZ   rÉ   )rZ   r   )rV   r   rW   r   rZ   r^   r,   )rk   ztorch.device | int | str | NonerV   r   rW   r   rZ   r^   )ri   ztorch.dtype | Noner»   zbuiltins.bool | NonerZ   r^   )rZ   ztorch.layout)rZ   zbuiltins.bool)IÚ__name__Ú
__module__Ú__qualname__Ú__doc__Ú__annotations__r   rH   r”   r•   Ú	_mode_keyÚ,_additional_keys_to_prop_for_wrapper_tensorsÚaddrJ   Ú
ZeroTensorrc   Ú	frozensetr5   r1   r…   r7   r†   r„   Úis_non_overlapping_and_denseÚsizeÚsym_sizerg   Ú
sym_striderh   Úsym_storage_offsetÚnumelÚ	sym_numelr¯   r2   rk   r‚   r`   r}   r‹   r�   Ústaticmethodrš   rž   ru   r¤   r§   rª   r­   r±   rT   r·   r\   Úint8Úcharrº   Úbfloat16Úuint8ÚbyteÚfloat64ÚdoubleÚfloat32Úfloatr"   Úfloat16ÚhalfÚint32ÚintÚint64Úlongr¾   Úpropertyrj   rÁ   Ú__classcell__©rµ   s   @r&   r   r   x   sM  ø… ñð Óð —‘×.Ñ.×9Ñ9€Ið !Ÿ8™8×PÑP×TÑTØ�‰×Ñ×'Ñ'óÐñ à�I‰I�N‰N×(Ñ(×0Ñ0Ø�I‰I�N‰N×(Ñ(×6Ñ6Ø�I‰I�N‰N×1Ñ1×9Ñ9Ø�I‰I�N‰N×7Ñ7×?Ñ?Ø�I‰I�N‰N×Ñ×'Ñ'Ø�I‰I�N‰N×#Ñ#×+Ñ+Ø�I‰I�N‰N×!Ñ!×)Ñ)Ø�I‰I�N‰N×%Ñ%×-Ñ-Ø�I‰I�N‰N×)Ñ)×1Ñ1Ø�I‰I�N‰N×-Ñ-×5Ñ5Ø�I‰I�N‰N× Ñ ×(Ñ(Ø�I‰I�N‰N×$Ñ$×,Ñ,Ø�I‰I�N‰N×Ñ×&Ñ&Ø�I‰I�N‰N×!Ñ!×)Ñ)ð	
ó€Lð( 59ÐÐ1Ó8ó@ðL !#Ø(,ð0
àð0
ð ð0
ð ð	0
ð
 &ð0
ð 
ó0
ðd <@õ 6ð òó ðó48ó;ó8ó6ó-óKó9õ+ð 9=ð4Ø5ð4ØEHð4ØTWð4à	ó4ñ '¨U¯Z©ZÔ8€DÙ
%¨\¨U¯\©\¸%Ó-@Ô
A€CÙ*°·±Ô@€HÙ&¨U¯[©[Ô9€DÙ(¨u¯}©}Ô=€FÙ'¨e¯m©mÔ<€EÙ&¨U¯Z©ZÔ8€DÙ&¨U¯]©]Ô;€DÙ
%¨E¯K©KÔ
8€CÙ&¨U¯[©[Ô9€Dð
 %)ðð -1ñ	à!ðð *ð	ð
 
óð, ò ó ð ÷!rF   r   c                  ó¼   ‡ — 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 )rÂ   c                ób  •— t         ‰| �  «        || _        d| _        g | _        t
        j                  j                  j                  | _	        || _
        |r$t
        j                  j                  j                  nd | _        i | _        i | _        || _        t#        j$                  «       | _        y ©NF)r´   Ú__init__rB   Úis_on_stackÚenter_stackr   rH   r”   r•   rÏ   rC   rJ   ÚPreDispatchÚ_dispatch_keyÚ_tokensÚ_tokens_forward_outputÚ_allow_token_discoveryÚweakrefÚWeakKeyDictionaryrv   )rU   rC   rB   rø   rµ   s       €r&   rñ   zFunctionalTensorMode.__init__›  sš   ø€ ô 	‰ÑÔØˆŒØ ˆÔØˆÔô Ÿ™×7Ñ7×BÑBˆŒØ(ˆÔáAMœUŸX™X×1Ñ1×=Ò=ÐSWˆÔð 13ˆŒð @BˆÔ#ð '=ˆÔ#ô ×%Ñ%Ó'ð 	ÕrF   c                ó¬   •‡ — dˆ fd„} |«       €)‰ j                   j                  d«       t        ‰‰ �  «       S ‰ j                   j                  d«       ‰ S )Nc                 óB  •— ‰ j                   t        j                  j                  j                  k(  r-t        t        j                  j                  j                  «      S t        j                  j                  t        j                  j                  j                  «      S r,   )	rõ   r   rH   rJ   rô   r   r”   r•   Ú_get_dispatch_moder�   s   €r&   Ú_get_prev_modez6FunctionalTensorMode.__enter__.<locals>._get_prev_modeÁ  sm   ø€ Ø×!Ñ!¤U§X¡X×%9Ñ%9×%EÑ%EÒEÜ6Ü—H‘H×2Ñ2×=Ñ=óð ô —8‘8×.Ñ.Ü—‘×.Ñ.×9Ñ9óð rF   TF)rZ   úFunctionalTensorMode | None)ró   Úappendr´   Ú	__enter__)rU   rþ   rµ   s   ` €r&   r  zFunctionalTensorMode.__enter__À  sN   ù€ õ	ñ ÓÐ#Ø×Ñ×#Ñ# DÔ)Ü‘7Ñ$Ó&Ð&à×Ñ×#Ñ# EÔ*ØˆKrF   c                ób   •— | j                   j                  «       }|rt        ‰| �  |||«       y y r,   )ró   Úpopr´   Ú__exit__)rU   Úexc_typeÚexc_valÚexc_tbrò   rµ   s        €r&   r  zFunctionalTensorMode.__exit__Ñ  s2   ø€ ð ×&Ñ&×*Ñ*Ó,ˆÙÜ‰GÑ˜X w°Õ7ð rF   c                ó¨  ‡ — |€i }t        |«      rt        S |t        j                  vrq‰ j	                  |||«      r^t
        j                  j                  |j                  «       «      r1‰ 5   |j                  |i |¤Ž}|t        ur|cd d d «       S 	 d d d «       dˆ fd„}dd„}ddl
m}m}	m}
  ||«      �r:t
        j                  j                  |j                  «       t
        j                  j                  j                   «      sêdd lmc m} dd lmc m} t
        j,                  j/                  «       r"|j0                  r |
‰ |||«      S  |	‰ |||«      S |j2                  svt5        |t
        j6                  j8                  «      r]t
        j:                  j<                  j?                  |«      s)t
        j:                  j<                  jA                  |«      r |
‰ |||«      S  |	‰ |||«      S ddl!m"}m#}  ||«      r�t
        j                  j                  |j                  «       t
        j                  j                  j                   «      rtI        d|j                  «       › d�«      ‚ |‰ jJ                  ‰ jL                  |||«      S tO        jP                  t        |||f«      \  }}tS        d«       t
        j                  jU                  «       t
        j                  jW                  t
        j                  j                  j                   «      z  }t
        j                  jY                  «       j[                  t
        j                  j                  j                   «      t        j\                  z
  }t5        |t^        «      rGta        «       }|jc                  |«      }|jc                  |«      } ||i |¤Ž}|je                  |«      }�n¤t
        j                  jg                  ||«      5  	 t        jh                  d	«      }|t        j                  v rit
        jj                  jl                  jn                  jq                  «       5   ||i |¤Ž}d d d «       tO        jP                  t
        jr                  |«      }nÀ‰ ju                  ||«        |jv                  t
        j                  j                  j                   g|¢­i |¤Ž}‰ jx                  rE|t
        jz                  j|                  j~                  j€                  u rt        j‚                  |«       tO        jP                  t
        jr                  ||«      }t        j„                  «        t        jh                  |«       	 d d d «       tS        d
«       t‡        d„ tO        jˆ                  «      D «       «      r0|t
        jz                  j|                  jŠ                  j€                  u r|S t
        jŒ                  jŽ                  |j�                  v ri|t
        jz                  j|                  j’                  j”                  ur9t
        j<                  j–                  j™                  «       5   ||i |¤Ž d d d «       t›        ||||«      S # 1 sw Y   �ŒãxY w# 1 sw Y   �Œ.xY w# t        j„                  «        t        jh                  «       w xY w# 1 sw Y   �ŒQxY w# 1 sw Y   ŒlxY w)Nc                ó´   •— 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   rM   r   r   rb   )r—   rU   s    €r&   Úwrapz5FunctionalTensorMode.__torch_dispatch__.<locals>.wrapô  sI   ø€ ô ˜!Ô-Ô.Ü$Ð%QÓRÐRÜ˜!œUŸ\™\Ô*¬u×/JÑ/JÈ1Ô/MÜ'¨¨4Ó0Ð0ØˆHrF   c                ó   — | j                   S r,   )r_   )r—   s    r&   Úunwrapz7FunctionalTensorMode.__torch_dispatch__.<locals>.unwrapþ  s   € Ø—6‘6ˆMrF   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        «      –— Œ y ­wr,   )r‡   r   )r.   r—   s     r&   r0   z:FunctionalTensorMode.__torch_dispatch__.<locals>.<genexpr>‡  s    è ø€ ò àô ˜1Ô.×/ñùs   ‚)r—   ÚobjectrZ   r  )r—   r   rZ   r^   )Nr'   r�   r   r‚   r>   r   rH   Ú_dispatch_has_kernelÚnameÚ	decomposeÚ*torch._higher_order_ops.auto_functionalizer  r  r  Ú%_dispatch_has_kernel_for_dispatch_keyrJ   rK   Útorch._export.configrn   ro   Útorch._inductor.configrr   ÚcompilerÚis_exportingrp   rs   r‡   Ú_opsr   Ú_libraryÚutilsÚis_outÚ
is_inplaceÚtorch._higher_order_ops.effectsr  r  rM   rø   rö   ÚpytreeÚtree_map_onlyrQ   Ú_dispatch_tls_local_include_setÚDispatchKeySetÚ_dispatch_tls_local_exclude_setÚremoverc   r   ÚPythonFunctionalizeAPIÚunwrap_tensorsÚwrap_tensorsÚ_ForceDispatchKeyGuardÚ#_functionalize_enable_reapply_viewsÚfxÚexperimentalÚproxy_tensorÚdisable_proxy_modes_tracingr   Ú_sync_view_replay_annotationsÚ_op_dkrB   r5   r1   r6   r7   Ú_freeze_functional_tensorÚ_disable_functionalizationr9   Útree_leavesÚ
lift_freshÚTagÚinplace_viewÚtagsÚset_Úsource_TensorÚ_mode_utilsÚno_dispatchr   )rU   rA   r#   rV   rW   Ú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__Û  sŸ  ø€ ð ˆ>ØˆFä)¨%Ô0Ü!Ð!ð Ô(×5Ñ5Ñ5Ø×#Ñ# D¨$°Ô7ô —‘×-Ñ-¨d¯i©i«kÔ:àñ Ø"�D—N‘N DÐ3¨FÑ3�ØœNÑ*Ø÷ñ à*÷õ
	ó	÷	
ñ 	
ñ "Øõ
ä—(‘(×@Ñ@Ø�I‰I‹KœŸ™×-Ñ-×;Ñ;ô
÷ 9Ð8ß<Ð<ä�~‰~×*Ñ*Ô,à ×IÒIÙ3°D¸$ÀÀfÓMÐMá,¨T°4¸¸vÓFÐFà×<Ò<Ü˜4¤§¡×!6Ñ!6Ô7ä—N‘N×(Ñ(×/Ñ/°Ô5Ü—~‘~×+Ñ+×6Ñ6°tÔ<ñ 0°°d¸DÀ&ÓIÐIÙ(¨¨t°T¸6ÓBÐBçOá�tÔÜ�x‰x×=Ñ=Ø—	‘	“œUŸX™X×1Ñ1×?Ñ?ôô %Ø˜DŸI™I›K˜=Ð(mÐnóð ñ "Ø×+Ñ+¨T¯\©\¸4ÀÀvóð ô ,2×+?Ñ+?Ü˜f t¨V nó,
Ñ(ˆÐ(ô 	)ØMô	
ô �H‰H×4Ñ4Ó6Ü�h‰h×%Ñ%¤e§h¡h×&:Ñ&:×&HÑ&HÓIñJð 	ô
 �H‰H×4Ñ4Ó6×=Ñ=Ü—‘×$Ñ$×2Ñ2óô ×3Ñ3ñ4ð 	ô �dÔ/Ô0ô
 )Ó*ˆCØ#&×#5Ñ#5°dÓ#;Ð Ø%(×%7Ñ%7Øó&Ð"ñ "Ø%ðà(ñˆNð ×+Ñ+¨NÓ;ŠLô —‘×0Ñ0°ÀÓPñ +Oð*Oä&+×&OÑ&OÐPTÓ&U�Oð Ô/×<Ñ<Ñ<ô #ŸX™X×2Ñ2×?Ñ?×[Ñ[Ó]ñ WÙ-1°>Ð-VÐEUÑ-V˜N÷Wä'-×';Ñ';Ü!ŸL™L¨$°ó(™ð ×:Ñ:¸4ÀÔHð *5¨¯©Ü!ŸH™H×0Ñ0×>Ñ>ð*à+ò*ð /ñ*˜ð  Ÿ;š;Ø#¤u§y¡y§~¡~×'=Ñ'=×'EÑ'EÑEÜ %× ?Ñ ?ÀÔ OÜ'-×';Ñ';Ü!ŸL™L¨$°ó(˜ô ×4Ñ4Ô6Ü×=Ñ=¸oÕN÷W+OôZ 	)Ø\ô	
ô ñ ä×+Ñ+¨LÓ9ôô ð ”u—y‘y—~‘~×0Ñ0×8Ñ8Ñ8àÐô �I‰I×"Ñ" d§i¡iÑ/ØœEŸI™IŸN™N×/Ñ/×=Ñ=Ñ=ä—‘×(Ñ(×4Ñ4Ó6ñ &Ù�dÐ%˜fÒ%÷&ô +¨4°°v¸|ÓLÐL÷]ñ ú÷jWñ Wûô4 ×4Ñ4Ô6Ü×=Ñ=¸oÕNú÷W+Oñ +Oú÷F&ð &úsV   Á+Y3Ï0Z;Ï2AZÑ	Z ÑC.ZÕ)Z;Ù	[Ù3Y=Ú Z
	ÚZÚ+Z8Ú8Z;Ú;[Û[c                óX  — t         j                  j                  t         j                  j                  j                  «      }|�°t        j                  ||g«      D ]•  }t        |t        «      sŒt        j                  |j                  «      }	 |j                  j                  |   }|j                   j"                  }t%        j&                  |«      5  t        j(                  |«       ddd«       Œ— yy# t        $ r |j                  rt        d|› d�«      d‚Y ŒÁw xY w# 1 sw Y   ŒÎxY w)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   rH   rý   r”   ÚPROXYr#  r6  r‡   r   rˆ   r_   ÚtracerÚtensor_trackerÚKeyErrorrl   rŠ   ÚproxyÚnodeÚfx_tracebackÚset_current_replay_noderœ   )rU   rV   rW   ÚmÚaÚ	unwrappedÚtracker_entryÚ	curr_nodes           r&   r2  z2FunctionalTensorMode._sync_view_replay_annotationsŸ  s  € ô& �H‰H×'Ñ'¬¯©×(FÑ(F×(LÑ(LÓMˆØˆ=Ü×'Ñ'¨¨v¨Ó7ò #�Ü! !Ô%5Ô6ØÜ!×9Ñ9¸!¿&¹&ÓA�	ðØ$%§H¡H×$;Ñ$;¸IÑ$F�Mð *×/Ñ/×4Ñ4�	Ü!×9Ñ9¸)ÓDñ #Ü—K‘K ”N÷#ð #ñ)#ð øô  ò ð !×.Ò.Ü*Ø*¨9¨+Ð5GÐHóà#ð$ñ ðú÷#ð #ús   ÂC5ÃD Ã5%DÄDÄ D)	c                ó˜   — t        || j                  | j                  «      }|�|S t        j                  ||f«      \  }}t        ||«      S r,   )rE   rB   rC   r#  Útree_flattenr   )rU   rA   rV   rW   ÚresultÚflat_args_kwargsrY   s          r&   r>   z#FunctionalTensorMode._can_decomposeË  sQ   € ô % T¨4¯;©;¸×8IÑ8IÓJˆØÐØˆMô %×1Ñ1°4¸°.ÓAÑÐ˜!Ü-¨dÐ4DÓEÐErF   c                 ó   — y)NTr[   )rx   s    r&   Úis_infra_modez"FunctionalTensorMode.is_infra_modeÝ  s   € àrF   )FFF)rC   r"   rB   r"   rø   r"   rZ   rÉ   )rZ   r	   )r  ztype[BaseException] | Noner  zBaseException | Noner  zTracebackType | NonerZ   rÉ   rÃ   rÄ   )rV   rÆ   rW   údict[str, Any]rZ   rÉ   )rA   r   rV   rÆ   rW   r`  rZ   r"   rÈ   )rÊ   rË   rÌ   rñ   r  r  r‹   r2  r>   Úclassmethodr_  rì   rí   s   @r&   rÂ   rÂ   š  s  ø„ ð #ØØ',ð	"(àð"(ð ð"(ð !%ð	"(ð
 
õ"(õJð"8à,ð8ð &ð8ð %ð	8ð
 
õ8ð !#Ø(,ðBMàðBMð ðBMð ð	BMð
 &ðBMð 
óBMðH*#àð*#ð ð*#ð 
ó	*#ðXFàðFð ðFð ð	Fð
 
óFð$ òó ôrF   rÂ   c                 ó\   — t        t        j                  j                  j                  «      S r,   )r   r   rH   r”   r•   r[   rF   r&   Údisable_functional_moderc  â  s   € äœuŸx™x×=Ñ=×HÑHÓIÐIrF   c                ó0   ‡ ‡‡‡— dd„Šdd„Šdˆˆ ˆˆfd„}|S )Nc                ód   — t        | t        j                  «      rt        j	                  | «      S | S r,   )r‡   r   r   r   rš   ©r$   s    r&   Úto_funz&dispatch_functionalize.<locals>.to_funó  s&   € Ü�aœŸ™Ô&Ü#×1Ñ1°!Ó4Ð4ØˆrF   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   rb   rM   rœ   rˆ   r_   rf  s    r&   Úfrom_funz(dispatch_functionalize.<locals>.from_funø  s`   € Ü˜!Ô-Ô.ä˜!œUŸ\™\Ô*Ü×.Ñ.¨qÔ1Ü(Ø]óð ð ˆHÜ�‰�AŒÜ×,Ñ,¨Q¯V©VÓ4Ð4rF   c                 ó  •— t         j                  j                  t         j                  j                  t         j                  j                  j
                  «      «      }|5  ‰	5  t        j                  t         j                  ‰
| «      }t        j                  t         j                  ‰
|«      } ‰|i |¤Ž}t        j                  t        ‰|«      }|cd d d «       cd d d «       S # 1 sw Y   nxY wd d d «       y # 1 sw Y   y xY wr,   )
r   rH   Ú_ExcludeDispatchKeyGuardr&  rJ   rK   r#  r$  r   r   )rV   rW   Údisable_aboveÚ	func_argsÚfunc_kwargsÚfunc_outputsÚoutputsri  rA   ry   rg  s          €€€€r&   Úinnerz%dispatch_functionalize.<locals>.inner  sÆ   ø€ ÜŸ™×9Ñ9Ü�H‰H×#Ñ#¤E§H¡H×$8Ñ$8×$FÑ$FÓGó
ˆð ñ 	˜Dñ 	Ü×,Ñ,¬U¯\©\¸6À4ÓHˆIÜ ×.Ñ.¬u¯|©|¸VÀVÓLˆKÙ Ð:¨kÑ:ˆLÜ×*Ñ*Ô+;¸XÀ|ÓTˆGà÷	÷ 	÷ 	ó 	ú÷ 	÷ 	ñ 	ús%   Á"C<Á%A/C'Ã	C<Ã'C0	Ã,C<Ã<D)r$   r  rZ   r  )rV   r   rW   r   rZ   r   r[   )rA   ry   rq  ri  rg  s   `` @@r&   Údispatch_functionalizerr  ï  s   û€ óó

5÷
ð 
ð €LrF   c                  ót   — 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y	)ÚBaseFunctionalizeAPIc                 ó   — y r,   r[   ©rU   rV   s     r&   r+  z!BaseFunctionalizeAPI.wrap_tensors  ó   € àrF   c                 ó   — y r,   r[   rv  s     r&   r*  z#BaseFunctionalizeAPI.unwrap_tensors  rw  rF   c                 ó   — y r,   r[   ©rU   Úinner_fs     r&   Úfunctionalizez"BaseFunctionalizeAPI.functionalize  rw  rF   c                 ó   — y r,   r[   r�   s    r&   Úredispatch_to_nextz'BaseFunctionalizeAPI.redispatch_to_next   rw  rF   c                ó0   — t        j                  ||«       y r,   )r   r¢   )rU   Úinput_tensorÚoutput_tensors      r&   ÚreplacezBaseFunctionalizeAPI.replace$  s   € Ü×$Ñ$ \°=ÕArF   c                ó.   — t        j                  |«       y r,   )r   r¦   ©rU   Útensors     r&   r§   z"BaseFunctionalizeAPI.commit_update'  s   € Ü×*Ñ*¨6Õ2rF   c                ó.   — t        j                  |«       y r,   )r   r©   r„  s     r&   rª   zBaseFunctionalizeAPI.sync*  s   € Ü×!Ñ! &Õ)rF   c                ó.   — t        j                  |«       y r,   )r   r¬   r„  s     r&   r­   z7BaseFunctionalizeAPI.mark_mutation_hidden_from_autograd-  s   € Ü×?Ñ?ÀÕGrF   N©rV   rÆ   rZ   rÆ   )rV   ú'torch.Tensor | tuple[torch.Tensor, ...]rZ   r   )r{  úCallable[..., Any]rZ   rŠ  ©rZ   zAbstractContextManager[None]©r€  r^   r�  r^   rZ   rÉ   ©r…  r^   rZ   rÉ   )rÊ   rË   rÌ   r   r+  r*  r|  r~  r‚  r§   rª   r­   r[   rF   r&   rt  rt    sf   „ Øòó ðð òó ðð òó ðð òó ðóBó3ó*ôHrF   rt  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)  c                óV   •— t         ‰| �  «        |r|n	t        «       | _        || _        y r,   )r´   rñ   rÂ   ry   rC   )rU   ry   rC   rµ   s      €r&   rñ   zPythonFunctionalizeAPI.__init__2  s'   ø€ ô 	‰ÑÔÙ ‘DÔ&:Ó&<ˆŒ	Ø(ˆÕrF   c                óÔ   — | j                   5  t        j                  j                  j	                  t        j
                  t        j                  |«      cd d d «       S # 1 sw Y   y xY wr,   )ry   r   r  Ú_pytreer$  r   r   rš   rv  s     r&   r+  z#PythonFunctionalizeAPI.wrap_tensors9  sH   € Ø�Y‰Yñ 	Ü—;‘;×&Ñ&×4Ñ4Ü—‘Ô.×<Ñ<¸dó÷	÷ 	ò 	ús   �AAÁA'c                ó|   — t         j                  j                  j                  t        t        j
                  |«      S r,   )r   r  r‘  r$  r   rž   rv  s     r&   r*  z%PythonFunctionalizeAPI.unwrap_tensors?  s/   € ô �{‰{×"Ñ"×0Ñ0ÜÔ.×>Ñ>Àó
ð 	
rF   c                ó.   — t        || j                  «      S r,   )rr  ry   rz  s     r&   r|  z$PythonFunctionalizeAPI.functionalizeG  s   € Ü% g¨t¯y©yÓ9Ð9rF   c                ó*   — t        j                  «       S r,   )Ú
contextlibÚnullcontextr�   s    r&   r~  z)PythonFunctionalizeAPI.redispatch_to_nextJ  s   € ô ×%Ñ%Ó'Ð'rF   c                óX   — t        | t        «      st        |› dt        | «      › �«      ‚| S )Nz! must be a FunctionalTensor, got )r‡   r   rM   Útype)r…  r  s     r&   Ú_check_cast_functionalz-PythonFunctionalizeAPI._check_cast_functionalR  s4   € ä˜&Ô"2Ô3Ü Ø�&Ð9¼$¸v»,¸ÐHóð ð ˆrF   c                ó€   — | j                  |d«      }t        |t        «      rt        d«      ‚|j	                  |«       y )Nr€  z,output_tensor must not be a FunctionalTensor)r™  r‡   r   rM   r¤   )rU   r€  r�  Úfts       r&   r‚  zPythonFunctionalizeAPI.replaceZ  s7   € Ø×(Ñ(¨°~ÓFˆÜ�mÔ%5Ô6Ü Ð!OÓPÐPØ
�‰�MÕ"rF   c                óD   — | j                  |d«      j                  «        y ©Nr…  )r™  r§   r„  s     r&   r§   z$PythonFunctionalizeAPI.commit_update`  s   € Ø×#Ñ# F¨HÓ5×CÑCÕErF   c                óD   — | j                  |d«      j                  «        y r�  )r™  rª   r„  s     r&   rª   zPythonFunctionalizeAPI.syncc  s   € Ø×#Ñ# F¨HÓ5×:Ñ:Õ<rF   c                óD   — | j                  |d«      j                  «        y r�  )r™  r­   r„  s     r&   r­   z9PythonFunctionalizeAPI.mark_mutation_hidden_from_autogradf  s   € Ø×#Ñ#Ø�Hó	
ç
,Ñ
,Õ
.rF   rð   )ry   rÿ   rC   r"   rZ   rÉ   ©rV   ú
tuple[Any]rZ   r¡  )rV   z<torch.Tensor | tuple[torch.Tensor, ...] | list[torch.Tensor]rZ   r   ©r{  r
   rZ   r
   r‹  )r…  r^   r  rÇ   rZ   r   rŒ  r�  )rÊ   rË   rÌ   rñ   r+  r*  r|  r~  rÛ   r™  r‚  r§   rª   r­   rì   rí   s   @r&   r)  r)  1  sp   ø„ àMRð)Ø/ð)ØFJð)à	õ)óð
ØPð
à	ó
ó:ó(ð òó ðó#óFó=÷/rF   r)  c                  ó4   — e Zd Zdd„Z	 	 	 	 dd„Zdd„Zd	d„Zy)
ÚCppFunctionalizeAPIc                ó"   — ddl m}  ||d¬«      S ©Nr   )Ú_wrap_all_tensors_to_functional)Úlevel)Ú!torch._functorch.eager_transformsr§  ©rU   rV   r§  s      r&   r+  z CppFunctionalizeAPI.wrap_tensorsm  s   € ÝUá.¨t¸1Ô=Ð=rF   c                ó2   — ddl m}  ||t        «       ¬«      S ©Nr   )Ú#_unwrap_all_tensors_from_functional)Úreapply_views)r©  r­  Ú_reapply_views©rU   rV   r­  s      r&   r*  z"CppFunctionalizeAPI.unwrap_tensorsr  s   € õ	
ñ 3°4Ä~ÓGWÔXÐXrF   c                ó@   — t         j                  j                  |«      S r,   )r   rA   r|  rz  s     r&   r|  z!CppFunctionalizeAPI.functionalize|  s   € Ü�z‰z×'Ñ'¨Ó0Ð0rF   c                ó¾   — t         j                  j                  t         j                  j                  t         j                  j                  j
                  «      «      S r,   )r   rH   rk  r&  rJ   rK   r�   s    r&   r~  z&CppFunctionalizeAPI.redispatch_to_next  s;   € Ü�x‰x×0Ñ0Ü�H‰H×#Ñ#¤E§H¡H×$8Ñ$8×$FÑ$FÓGó
ð 	
rF   Nrˆ  ©rV   r‰  rZ   r‰  r¢  r‹  )rÊ   rË   rÌ   r+  r*  r|  r~  r[   rF   r&   r¤  r¤  l  s)   „ ó>ð
YØ;ðYà	0óYó1ô
rF   r¤  c                  ó<   — e Zd Zdd„Zdd„Z	 	 	 	 d	d„Zd
d„Zdd„Zy)ÚFunctorchFunctionalizeAPIc                ó   — || _         y r,   )Úinterpreter)rU   r·  s     r&   rñ   z"FunctorchFunctionalizeAPI.__init__†  s
   € Ø&ˆÕrF   c                óR   — ddl m}  ||| j                  j                  «       ¬«      S r¦  )r©  r§  r·  r¨  rª  s      r&   r+  z&FunctorchFunctionalizeAPI.wrap_tensors‰  s!   € ÝUá.¨t¸4×;KÑ;K×;QÑ;QÓ;SÔTÐTrF   c                óR   — ddl m}  ||| j                  j                  «       ¬«      S r¬  )r©  r­  r·  Úfunctionalize_add_back_viewsr°  s      r&   r*  z(FunctorchFunctionalizeAPI.unwrap_tensorsŽ  s*   € õ	
ñ 3Ø × 0Ñ 0× MÑ MÓ Oô
ð 	
rF   c                ó†   — t         j                  j                  || j                  j	                  «       rd¬«      S d¬«      S )NÚmutations_and_viewsÚ	mutations)r(  )r   rA   r|  r·  rº  rz  s     r&   r|  z'FunctorchFunctionalizeAPI.functionalizeš  sN   € Ü�z‰z×'Ñ'Øð ×#Ñ#×@Ñ@ÔBð &ð (ó 
ð 	
ð
 !ð (ó 
ð 	
rF   c                ó6   — | j                   j                  «       S r,   )r·  Úlowerr�   s    r&   r~  z,FunctorchFunctionalizeAPI.redispatch_to_next¤  s   € Ø×Ñ×%Ñ%Ó'Ð'rF   N)r·  r   rZ   rÉ   r   r³  r¢  r‹  )rÊ   rË   rÌ   rñ   r+  r*  r|  r~  r[   rF   r&   rµ  rµ  …  s,   „ ó'óUð
	
Ø;ð	
à	0ó	
ó
ô(rF   rµ  c                ód   — t        | t        «      rt        j                  | j                  «      S | S r,   )r‡   r   r   rˆ   r_   )r…  s    r&   Úmb_unwrap_functional_tensorrÁ  ¨  s'   € Ü�&Ô*Ô+Ü×,Ñ,¨V¯[©[Ó9Ð9Ø€MrF   )r#   rÅ   rZ   r"   )rA   r   rB   r"   rC   r"   rZ   zbool | None)rN   rÇ   rZ   rÉ   )rX   r   rZ   rŠ  )rZ   zGenerator[None, None, None])rA   rŠ  ry   rÂ   rZ   rŠ  )r…  r^   rZ   r^   )DÚ
__future__r   r•  Ú	functoolsr?   rù   Úabcr   r   r   Útypingr   r   Útyping_extensionsr	   ÚbuiltinsÚcollections.abcr
   r   r   r#   r   Útorch._functorch.pyfunctorchr   Ú
torch._opsr   r   Útorch.fx.tracebackr.  Ú	tracebackrS  Útorch.utils._pytreer  r‘  r#  Útorch._Cr   r¯  r   r   Útorch._subclasses.meta_utilsr   Útorch.utils._python_dispatchr   r   r   r   r   Ú_loggingÚgetArtifactLoggerrÊ   r    r'   Ú	lru_cacherE   rQ   r\   r   r   rÂ   Úcontextmanagerrc  rr  rt  r)  r¤  rµ  rÁ  r[   rF   r&   ú<module>rÕ     sf  ðÝ "ã Û Û Û ß #Ý -ß %Ý "ñ Ûß=Ñ=Ý#åEÝ%ã ß )Ð )ß $Ð $Ý Kß KÝ 6÷õ ð —n‘n×6Ñ6°xÐARÓSÐ ó
$ð €×Ñ˜SÔ!ð Ø
ð Ø"ð Ø26ð àò ó "ð óF"ó2ô_!�u—|‘|ô _!ôD	EÐ,ô EðP
 ×ÑòJó ðJñ <PÓ;Qð!Ø
ð!Ø$8ð!àó!ôHH˜3ô Hô<8/Ð1ô 8/ôv
Ð.ô 
ô2 (Ð 4ô  (ôFrF   