ó
    CC˜j¥±  ã                  óº  • S SK Jr  S SKrS SKrS SKrS SKrS SKJrJr  S SKJ	r	  S SK
JrJrJr  S SKJr  \(       a   S SKrS SKJrJrJr  S SKJr  S S	KJr  S S
KJr  S SKrS SKJs  Jr  S SK J!s  J"r#  S SK$J%r&  S SKJ'r'J(r(  S SK)J*r*  S SK+J,r,J-r-J.r.J/r/J0r0  \Rb                  Re                  \3S5      r4S'S jr5\Rl                  " SS9        S(S j5       r7S)S jr8S*S jr9 " S S\Rt                  5      r; " S S\05      r<\Rz                  S+S j5       r>\<" 5       4SS.       S,S jjjr? " S S\5      r@ " S  S!\@5      rA " S" S#\@5      rB " S$ S%\@5      rCS-S& jrDg).é    )ÚannotationsN)ÚABCÚabstractmethod)ÚAbstractContextManager)ÚAnyÚcastÚ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                óê   • U  Vs/ s H:  nU[         R                  [         R                  R                  [        4;  d  M8  UPM<     nnU(       a  [
        R                  SU5        [        U5      $ s  snf )Nz.FunctionalTensor unrecognized subclass(es): %s)ÚtorchÚTensorÚ_subclassesÚ
FakeTensorÚFunctionalTensorÚnot_implemented_logÚdebugÚbool)ÚtypesÚtÚunrecognized_typess      Ú±C:\Users\johnn\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\torch/_subclasses/functional_tensor.pyÚ_has_unrecognized_tensor_typesr(   '   sp   € ñ óâˆAØ”U—\‘\¤5×#4Ñ#4×#?Ñ#?ÔAQÐRÑR÷ 	
Ùð ð ö
 Ü×!Ñ!Ø<Ð>Pô	
ô Ð"Ó#Ð#ùòs   …7A0Á A0i   )Úmaxsizec                óÌ  • U(       a2  U [         R                  R                  R                  R                  L a  gSSKJn  U" U 5      (       a  g[        S U R                  R                   5       5      nU(       d  U R                  R                  (       a  gU(       aG  U(       a?  U R                  S;  a.  U R                  5       (       a  [        R                  " SU  S3S	S
9  ggg)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  ó8   #   • U  H  oR                   v •  M     g 7f©N)Ú
alias_info)Ú.0Úargs     r'   Ú	<genexpr>Ú&_can_decompose_fast.<locals>.<genexpr>E   s   é € ÐNÒ7M°Ÿ^ž^Ò7Mù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   Úopsr3   ÚdropoutÚdefaultÚtorch._decompr+   ÚanyÚ_schemaÚ	argumentsÚ
is_mutableÚ	namespaceÚ_can_decomposeÚwarningsÚwarn)ÚfuncÚexportÚpre_dispatchr+   Úalias_info_presents        r'   Ú_can_decompose_fastrG   4   s²   € ö �$œ%Ÿ)™)Ÿ.™.×0Ñ0×8Ñ8Ò8ØåAá*¨4×0Ñ0ØäÑN°t·|±|×7MÒ7MÓNÓNÐÞ˜TŸ\™\×4×4ØæÞØ�~‰~Ð%5Ó5¸$×:MÑ:M×:OÑ:OÜ—’ðà!˜FÐ"5ð7ð  !ò	ð Øàó    c                ó<  • [         R                  R                  [         R                  R                  R                  5      n[         R                  R                  [         R                  R                  R                  5      nU(       d  U(       a  [        U 5      eg g 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_activerS   X   sk   € Ü—(‘(×AÑAÜ�‰×Ñ×*Ñ*ó€Kô —(‘(×AÑAÜ�‰×Ñ×*Ñ*ó€Kö ž;Ü˜SÓ!Ð!ð 'ˆ;rH   c                 ó   ^ • SU 4S jjnU$ )Nc                ó0   >• U R                   " U0 0 UETED6$ r-   )Úto)ÚselfÚargsÚkwargsÚextra_kwargss      €r'   Ú_Ú&_conversion_method_template.<locals>._r   s"   ø€ Ø�wŠw˜Ð;Ð : 6Ð :¨\Ð :Ñ;Ð;rH   )rW   r    rX   r   rY   r   Úreturnr   © )rZ   r[   s   ` r'   Ú_conversion_method_templater_   q   s   ø€ ÷<ð €HrH   c                  óô  ^ • \ rS rSr% SrS\S'   \R                  R                  R                  r
\R                  R                  R                  \R                  R                  R                  5      r\" \R"                  R$                  R&                  R(                  \R"                  R$                  R&                  R*                  \R"                  R$                  R,                  R(                  \R"                  R$                  R.                  R(                  \R"                  R$                  R0                  R(                  \R"                  R$                  R2                  R(                  \R"                  R$                  R4                  R(                  \R"                  R$                  R6                  R(                  \R"                  R$                  R8                  R(                  \R"                  R$                  R:                  R(                  \R"                  R$                  R<                  R(                  \R"                  R$                  R>                  R(                  \R"                  R$                  R@                  R(                  \R"                  RB                  RD                  R(                  15      r#Sr$S\S'   SS jr%  S          S!S
 jjr&SS.S"S jjr'\(S#S j5       r)S$S jr*S%S jr+S&S jr,S'S jr-S'S jr.S'S jr/S(S jr0S)U 4S jjr1 S*       S+S jjr2\3" \Rh                  S9r5\3" \RD                  " S5      S9r6\3" \Rn                  S9r7\3" \Rp                  S9r9\3" \Rt                  S9r;\3" \Rx                  S9r=\3" \R|                  S9r>\3" \R~                  S9r@\3" \R‚                  S9rB\3" \R†                  S9rD S*SS.     S,S jjjrE\FS-S j5       rG\FS.S j5       rHS-S jrIS	rJU =rK$ )/r    éx   a"  
Functional tensors represent tensors that will remove mutations
from a program. If you perform a mutable operation on a functional tensor,
it will re-dispatch to the functional variant of that operation.

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

FunctionalTensor is required to be used with a corresponding
FunctionalTensorMode active, because it relies
on using the mode for dispatch (which can properly handle factory functions).
útorch.TensorÚelemNzFunctionalTensor | NoneÚ_inference_mode_basec                ó  • [         R                  " U5      (       d  [        S5      e[        R                  [         R
                  R                  U5      -  n[         R                  R                  U UR                  [        U5      (       d  UR                  5       OS [        U5      (       d  UR                  5       OS S UR                  UR                  UR                  SUR                   S SSU5      n[         R
                  R#                  U5        Xl        [         R&                  R(                  R*                  (       aÄ  [         R,                  " 5       (       aª  [         R.                  R(                  R0                  (       a�  UR$                  R3                  5       nUR5                  5       (       a  S Ul        XBR8                  U'   U$ UR8                  R;                  U5      Ul        UR6                  c  XBR8                  U'   U$ )Nz elem must be a functional tensorF)r   Ú_is_functional_tensorrO   r    Ú_extra_dispatch_keysrJ   Ú_dispatch_keysr   Ú_make_wrapper_subclassÚshaper   ÚstrideÚstorage_offsetÚdtypeÚlayoutÚdeviceÚrequires_gradÚ_set_throw_on_mutable_data_ptrrc   Ú_exportÚconfigÚ(enable_auto_functionalized_v2_for_exportÚis_inference_mode_enabledÚ	_inductorÚenable_auto_functionalized_v2Úuntyped_storageÚis_base_tensorrd   Ú_storage_to_baseÚget)Úclsrc   ÚmodeÚextra_dispatch_keysÚoutÚstorages         r'   Ú__new__ÚFunctionalTensor.__new__®   sŒ  € Ü×*Ò*¨4×0Ñ0Ü Ð!CÓDÐDô& ×1Ñ1´E·H±H×4KÑ4KÈDÓ4QÑQð 	ô �l‰l×1Ñ1ð
 Ø�J‰JÜ!.¨t×!4Ñ!4ˆD�K‰KŒM¸$ä-:¸4×-@Ñ-@�×#Ñ#Ô%ÀdàØ�J‰JØ�K‰KØ�K‰KØØ×ÑØØØØó)
ˆô, 	�‰×/Ñ/°Ô4ØŒô �M‰M× Ñ ×I×IÜ×/Ò/×1Ñ1Ü—‘×&Ñ&×D×Dà—h‘h×.Ñ.Ó0ˆGØ×!Ñ!×#Ñ#Ø+/�Ô(ð 25×%Ñ% gÑ.ð
 ˆ
ð ,0×+@Ñ+@×+DÑ+DÀWÓ+M�Ô(Ø×+Ñ+Ñ3Ø58×)Ñ)¨'Ñ2Øˆ
rH   r^   c                óš  • [        U5      (       a  [        $ Uc  0 nU[        R                  ;   Ga4  [	        U5      S:w  a  [        S5      eU[        R                  R                  R                  R                  [        R                  R                  R                  R                  4;   a_  [	        U5      S:w  d  [        US   [        5      (       d  [        S5      eU" [        R                  " US   R                  5      US   5      $ [	        U5      S:w  d  [        US   [        5      (       d  [        S5      eU" [        R                  " US   R                  5      5      $ U[        R                  R                  R                   R                  L a,  [	        U5      S:X  a  [        US   [        5      (       a  US   $ [#        S5      e)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ÚlenrO   r   r7   r3   Úis_strides_like_formatr9   Úis_contiguousÚmemory_formatÚ
isinstanceÚ_from_functional_tensorrc   ÚdetachÚRuntimeError)rW   rC   r$   rX   rY   s        r'   Ú__torch_dispatch__Ú#FunctionalTensor.__torch_dispatch__ð   sn  € ô *¨%×0Ñ0Ü!Ð!à‰>ØˆFð Ô#×0Ñ0Ô0ô �6‹{˜aÓÜ$Ð%RÓSÐSØÜ—	‘	—‘×5Ñ5×=Ñ=Ü—	‘	—‘×,Ñ,×:Ñ:ðó ô �t“9 “>¬°D¸±GÔ=M×)NÑ)NÜ(Ð)VÓWÐWÙœE×9Ò9¸$¸q¹'¿,¹,ÓGÈÈaÉÓQÐQÜ�4‹y˜A‹~¤Z°°Q±Ô9I×%JÑ%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Ñ"GØ˜A‘w�ô Øó
ð 	
rH   )Útensor_contentsc               ó4   • S[        U R                  5       S3$ )NzFunctionalTensor(Ú))Úreprrc   )rW   r’   s     r'   Ú__repr__ÚFunctionalTensor.__repr__"  s   € Ø"¤4¨¯	©	£?Ð"3°1Ð5Ð5rH   c                óœ  • [         R                  " U 5      (       a  [        S5      e[         R                  " U 5      n[	        [         R
                  R                  R                  5      nUc  [        S5      eU   [         R                  " X5        [        X5      n[         R                  " X5        S S S 5        U$ ! , (       d  f       W$ = f)Nz)x must not already be a functional tensorú functional_mode must not be None)
r   rf   rO   Ú_to_functional_tensorr   rJ   Ú_TorchDispatchModeKeyÚ
FUNCTIONALÚ_mirror_autograd_meta_tor    )ÚxÚx_functionalÚfunctional_moder   s       r'   Úto_functionalÚFunctionalTensor.to_functional%  s¥   € ô ×&Ò& q×)Ñ)Ü Ð!LÓMÐMô
 ×2Ò2°1Ó5ˆô -¬U¯X©X×-KÑ-K×-VÑ-VÓWˆØÑ"Ü Ð!CÓDÐDâÜ×*Ò*¨1Ô;Ü" <ÓAˆCÜ×*Ò*¨<Ô=÷ ð ˆ
÷	 Œ_ð ˆ
ús   Á:8B<Â<
Cc                ón   • [         R                  " U 5        [         R                  " U R                  5      $ r-   )r   Ú_syncr�   rc   ©rW   s    r'   Úfrom_functionalÚ FunctionalTensor.from_functional@  s#   € Ü�Š�DÔÜ×,Ò,¨T¯Y©YÓ7Ð7rH   c                óB   • [         R                  " U R                  5      $ r-   )r   Ú_is_functional_tensor_baserc   r¥   s    r'   ry   ÚFunctionalTensor.is_base_tensorD  s   € Ü×/Ò/°·	±	Ó:Ð:rH   c                óF   • [         R                  " U R                  U5        g r-   )r   Ú_functionalize_replacerc   )rW   Úoutputs     r'   Úreplace_ÚFunctionalTensor.replace_G  s   € Ü×$Ò$ T§Y¡Y°Õ7rH   c                óD   • [         R                  " U R                  5        g r-   )r   Ú_functionalize_commit_updaterc   r¥   s    r'   Úcommit_updateÚFunctionalTensor.commit_updateJ  s   € Ü×*Ò*¨4¯9©9Õ5rH   c                óD   • [         R                  " U R                  5        g r-   )r   Ú_functionalize_syncrc   r¥   s    r'   ÚsyncÚFunctionalTensor.syncM  s   € Ü×!Ò! $§)¡)Õ,rH   c                óD   • [         R                  " U R                  5        g r-   )r   Ú1_functionalize_mark_mutation_hidden_from_autogradrc   r¥   s    r'   Ú"mark_mutation_hidden_from_autogradÚ3FunctionalTensor.mark_mutation_hidden_from_autogradP  s   € Ü×?Ò?ÀÇ	Á	ÕJrH   c                ój  • U R                   R                  5       S:X  a  U R                   R                  5       $ U R                   R                  5       S:X  a*  U R                    Vs/ s H  oR                  5       PM     sn$ U R                    Vs/ s H  oR                  5       PM     sn$ s  snf s  snf )Nr   r…   )rc   ÚdimÚitemÚtolist)rW   rc   s     r'   r¿   ÚFunctionalTensor.tolistS  sy   € Ø�9‰9�=‰=‹?˜aÓØ—9‘9—>‘>Ó#Ð#Ø�Y‰Y�]‰]‹_ Ó!Ø,0¯IªIÓ6ªI D—I‘I–K©IÑ6Ð6à.2¯iªiÓ8ªi d—K‘K–M©iÑ8Ð8ùò 7ùâ8s   Á%B+ÂB0c                ó,  >• [        [        R                  R                  R                  5      R
                  (       aH  [        R                  R                  R                  U U R                  U R                  U R                  S9  [        TU ]4  " U0 UD6$ )N)rm   ro   rn   )r   r   rJ   r›   rœ   rD   r7   r3   Ú_assert_tensor_metadatarm   ro   rn   ÚsuperrV   )rW   rX   rY   Ú	__class__s      €r'   rV   ÚFunctionalTensor.to[  sj   ø€ ÜœeŸh™h×<Ñ<×GÑGÓH×O×OÜ�I‰I�N‰N×2Ñ2ØØ—j‘jØ—{‘{Ø—{‘{ð	 3ñ ô ‰wŠz˜4Ð* 6Ñ*Ð*rH   c                óÂ   • U=(       d    [         R                  R                  5       n[        U5      S:”  a  U R                  " U/UQ70 UD6$ U R                  " SSU0UD6$ )Nr   ro   r^   )r   ÚcudaÚcurrent_devicerˆ   rV   )rW   ro   rX   rY   s       r'   rÇ   ÚFunctionalTensor.cudaf  sV   € ð ×6œ5Ÿ:™:×4Ñ4Ó6ˆÜˆt‹9�q‹=Ø—7’7˜6Ð3 DÒ3¨FÑ3Ð3à—7’7Ñ3 &Ð3¨FÑ3Ð3rH   ©rm   Úcpu)ro   )Úmasked_gradc               óØ  • U R                   [        R                  :X  a  Ub  U R                  US9$ U $ [        R                  " U R
                  5      n[        R                  R                  R                  U5      (       d§  U R
                  R                  XS9n[        U[        R                  5      (       am  [        R                  " U5      (       aR  [        [        R                  R                  R                   5      nUc  [#        S5      eU   [%        XE5      sS S S 5        $ U$ [        R&                  R(                  R                  R+                  XUS9$ ! , (       d  f       U$ = f)NrÊ   )rm   rÌ   r™   )rn   r   ÚstridedrV   r�   rc   r   Úfake_tensorÚis_fake_tensorÚto_denserŒ   r   rf   r   rJ   r›   rœ   rO   r    r7   r3   r9   )rW   rm   rÌ   Úinnerr   r    s         r'   rÑ   ÚFunctionalTensor.to_dense{  s  € ð �;‰;œ%Ÿ-™-Ó'Ø+0Ñ+<�4—7‘7 �7Ð'ÐFÀ$ÐFä×-Ò-¨d¯i©iÓ8ˆÜ× Ñ ×,Ñ,×;Ñ;¸E×BÑBØ—)‘)×$Ñ$¨5Ð$ÐJˆCÜ˜#œuŸ|™|×,Ñ,´×1LÒ1LÈS×1QÑ1QÜ"4Ü—H‘H×2Ñ2×=Ñ=ó#�ð #Ñ*Ü(Ð)KÓLÐLÚ$Ü+¨CÓA÷ %‘_àˆJä�y‰y�~‰~×&Ñ&×.Ñ.Ø¨;ð /ð 
ð 	
÷	 %”_àˆJús   ÄEÅ
E)c                óV   • [         R                  " U R                  5      R                  $ r-   )r   r�   rc   Ú	is_mkldnnr¥   s    r'   rÕ   ÚFunctionalTensor.is_mkldnn•  s   € ô ×,Ò,¨T¯Y©YÓ7×AÑAÐArH   c                óV   • [         R                  " U R                  5      R                  $ r-   )r   r�   rc   rn   r¥   s    r'   rn   ÚFunctionalTensor.layoutš  s   € ô ×,Ò,¨T¯Y©YÓ7×>Ñ>Ð>rH   c                ó4   • [        U R                  5       5      $ r-   )r#   r¾   r¥   s    r'   Ú__bool__ÚFunctionalTensor.__bool__Ÿ  s   € Ü�D—I‘I“KÓ Ð rH   )rc   rb   r}   ÚFunctionalTensorModer]   r
   ©r^   N©
rC   r   r$   úSequence[type]rX   útuple[Any, ...]rY   zdict[str, Any] | Noner]   r   )r’   zobject | Noner]   Ústr)rž   rb   r]   r    )r]   rb   ©r]   r#   )r­   rb   r]   ÚNone)r]   rã   )r]   r   )rX   r   rY   r   r]   rb   r-   )ro   ztorch.device | int | str | NonerX   r   rY   r   r]   rb   )rm   ztorch.dtype | NonerÌ   zbuiltins.bool | Noner]   rb   )r]   zbuiltins.bool)r]   ztorch.layout)LÚ__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Ú__annotations__r   rJ   r›   rœ   Ú	_mode_keyÚ,_additional_keys_to_prop_for_wrapper_tensorsÚaddrL   Ú
ZeroTensorrg   Ú	frozensetr7   r3   rŠ   r9   r‹   r‰   Úis_non_overlapping_and_denseÚsizeÚsym_sizerk   Ú
sym_striderl   Úsym_storage_offsetÚnumelÚ	sym_numelr½   r4   ro   r‡   rd   r�   r�   r–   Ústaticmethodr¡   r¦   ry   r®   r²   r¶   rº   r¿   rV   rÇ   r_   Úint8ÚcharrË   Úbfloat16Úuint8ÚbyteÚfloat64ÚdoubleÚfloat32Úfloatr#   Úfloat16ÚhalfÚint32ÚintÚint64ÚlongrÑ   ÚpropertyrÕ   rn   rÚ   Ú__static_attributes__Ú__classcell__©rÄ   s   @r'   r    r    x   sf  ø‡ ñð Óð —‘×.Ñ.×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ñ	
à!ð
ð *ð	
ð
 
ö
ð4 óBó ðBð ó?ó ð?÷!ò !rH   r    c                  óâ   ^ • \ rS rSr    S
         SU 4S jjjrSU 4S jjr        SU 4S jjr  S         SS jjr      SS jr        SS jr	\
SS j5       rS	rU =r$ )rÜ   i£  c                ót  >• [         TU ]  5         X l        SU l        / U l        [
        R                  R                  R                  U l	        Xl
        U(       a$  [
        R                  R                  R                  OS U l        0 U l        0 U l        X0l        X@l        [$        R&                  " 5       U l        g ©NF)rÃ   Ú__init__rD   Úis_on_stackÚenter_stackr   rJ   r›   rœ   rê   rE   rL   ÚPreDispatchÚ_dispatch_keyÚ_tokensÚ_tokens_forward_outputÚ_allow_token_discoveryÚ_keep_input_mutationsÚweakrefÚWeakKeyDictionaryrz   )rW   rE   rD   r  r  rÄ   s        €r'   r  ÚFunctionalTensorMode.__init__¤  sš   ø€ ô 	‰ÑÔØŒØ ˆÔØˆÔô Ÿ™×7Ñ7×BÑBˆŒØ(ÔæAMœUŸX™X×1Ñ1×=Ò=ÐSWˆÔð 13ˆŒð @BˆÔ#ð '=Ô#à%:Ô"ô ×%Ò%Ó'ð 	ÕrH   c                ó²   >^ • SU 4S jjnU" 5       c)  T R                   R                  S5        [        TT ]  5       $ T R                   R                  S5        T $ )Nc                 óX  >• T R                   [        R                  R                  R                  :X  a-  [        [        R                  R                  R                  5      $ [        S[        R                  R                  [        R                  R                  R                  5      5      $ )NúFunctionalTensorMode | None)
r  r   rJ   rL   r  r   r›   rœ   r   Ú_get_dispatch_moder¥   s   €r'   Ú_get_prev_modeÚ6FunctionalTensorMode.__enter__.<locals>._get_prev_modeÍ  su   ø€ Ø×!Ñ!¤U§X¡X×%9Ñ%9×%EÑ%EÓEÜ6Ü—H‘H×2Ñ2×=Ñ=óð ô Ø-Ü—‘×+Ñ+¬E¯H©H×,JÑ,J×,UÑ,UÓVóð rH   TF)r]   r  )r  ÚappendrÃ   Ú	__enter__)rW   r  rÄ   s   ` €r'   r   ÚFunctionalTensorMode.__enter__Ì  sN   ù€ ÷	ñ ÓÑ#Ø×Ñ×#Ñ# DÔ)Ü‘7Ñ$Ó&Ð&à×Ñ×#Ñ# EÔ*ØˆKrH   c                ój   >• U R                   R                  5       nU(       a  [        TU ]  XU5        g g r-   )r  ÚpoprÃ   Ú__exit__)rW   Úexc_typeÚexc_valÚexc_tbr  rÄ   s        €r'   r$  ÚFunctionalTensorMode.__exit__Þ  s0   ø€ ð ×&Ñ&×*Ñ*Ó,ˆÞÜ‰GÑ˜X°Õ7ð rH   c                ó¬  ^ ^• Uc  0 n[        U5      (       a  [        $ U[        R                  ;  a{  T R	                  XU5      (       ad  [
        R                  R                  UR                  5       5      (       a2  T    UR                  " U0 UD6nU[        La  UsS S S 5        $  S S S 5        SU 4S jjnSS jnSSK
JnJn	Jn
  U" U5      (       GaZ  [
        R                  R                  UR                  5       [
        R                  R                  R                   5      (       Gd  SS KJs  Jn  SS KJs  Jn  [
        R,                  R/                  5       (       a%  UR0                  (       a
  U
" T XU5      $ U	" T XU5      $ UR2                  (       d…  [5        U[
        R6                  R8                  5      (       af  [
        R:                  R<                  R?                  U5      (       d.  [
        R:                  R<                  RA                  U5      (       a
  U
" T XU5      $ U	" T XU5      $ SSK!J"nJ#n  U" U5      (       a‘  [
        R                  R                  UR                  5       [
        R                  R                  R                   5      (       a  [I        SUR                  5        S35      eU" T RJ                  T RL                  XU5      $ [N        RP                  " [        XsU45      u  nn[S        S5        [
        R                  RU                  5       [
        R                  RW                  [
        R                  R                  R                   5      -  n[
        R                  RY                  5       R[                  [
        R                  R                  R                   5      [        R\                  -
  n[5        U[^        5      (       aG  [a        5       nURc                  U5      nURc                  U5      nU" U0 UD6nURe                  U5      nGO±[
        R                  Rg                  UU5          [
        Rh                  " S	5      nU[        R                  ;   aj  [
        Rj                  Rl                  Rn                  Rq                  5          U" U0 UD6nS S S 5        [N        RP                  " [
        Rr                  UW5      nOÇT Ru                  X45        URv                  " [
        R                  R                  R                   /UQ70 UD6nT Rx                  (       aG  U[
        Rz                  R|                  R~                  R€                  L a  [
        R‚                  " U5        [N        RP                  " [
        Rr                  UU5      n[
        R„                  " 5         [
        Rh                  " U5         S S S 5        [S        S
5        U[
        Rz                  R|                  R†                  R€                  L d1  U[
        Rz                  R|                  Rˆ                  R€                  L a«  [‹        U5      S:X  aœ  [5        US   [        5      (       a„  [
        RŒ                  " US   RŽ                  5      n[5        U[
        R�                  R’                  5      (       a8  UR”                  b+  UR”                  mSU4S jjn[N        R–                  " UW5        [™        S [N        Rš                  " W5       5       5      (       a1  U[
        Rz                  R|                  Rœ                  R€                  L a  U$ [
        Rž                  R                   UR¢                  ;   aj  U[
        Rz                  R|                  R¤                  R¦                  La9  [
        R<                  R¨                  R«                  5          U" U0 UD6  S S S 5        [­        XUU5      $ ! , (       d  f       GNA= f! , (       d  f       GNX= f! [
        R„                  " 5         [
        Rh                  " W5        f = f! , (       d  f       GNx= f! , (       d  f       N�= f)Nc                óÔ   >• [        U [        5      (       a  [        S5      e[        U [        R                  5      (       a'  [        R
                  " U 5      (       a  [        U T5      $ U $ )Nz*x must not be a FunctionalTensor in wrap())rŒ   r    rO   r   r   rf   )rž   rW   s    €r'   ÚwrapÚ5FunctionalTensorMode.__torch_dispatch__.<locals>.wrap  sR   ø€ ô ˜!Ô-×.Ñ.Ü$Ð%QÓRÐRÜ˜!œUŸ\™\×*Ñ*¬u×/JÒ/JÈ1×/MÑ/MÜ'¨¨4Ó0Ð0ØˆHrH   c                ó   • U R                   $ r-   )rc   )rž   s    r'   ÚunwrapÚ7FunctionalTensorMode.__torch_dispatch__.<locals>.unwrap  s   € Ø—6‘6ˆMrH   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 dispatchr…   c                óÔ   >• [        U [        5      (       aR  [        R                  " U R                  5      n[        U[        R
                  R                  5      (       a  TUl        g g g r-   )rŒ   r    r   r�   rc   r   r   Údispatch_keys)r   Ú	unwrappedÚinput_dispatch_keyss     €r'   Úpreserve_dispatch_keysÚGFunctionalTensorMode.__torch_dispatch__.<locals>.preserve_dispatch_keys£  sX   ø€ Ü! #Ô'7×8Ñ8Ü$)×$AÒ$AÀ#Ç(Á(Ó$K˜	Ü%Ø%¤u×'8Ñ'8×'CÑ'C÷ñ ð 7J˜IÕ3ðð 9rH   c              3  óB   #   • U  H  n[        U[        5      v •  M     g 7fr-   )rŒ   r    )r/   rž   s     r'   r1   Ú:FunctionalTensorMode.__torch_dispatch__.<locals>.<genexpr>¯  s"   é € ð â9�Aô ˜1Ô.×/Ð/Ú9ùs   ‚)rž   Úobjectr]   r=  )rž   r    r]   rb   )r   r=  r]   rã   )Wr(   r†   r    r‡   r@   r   rJ   Ú_dispatch_has_kernelÚnameÚ	decomposeÚ*torch._higher_order_ops.auto_functionalizer0  r1  r2  Ú%_dispatch_has_kernel_for_dispatch_keyrL   rM   Útorch._export.configrr   rs   Útorch._inductor.configrv   ÚcompilerÚis_exportingrt   rw   rŒ   Ú_opsr   Ú_libraryÚutilsÚis_outÚ
is_inplaceÚtorch._higher_order_ops.effectsr3  r4  rO   r  r  ÚpytreeÚtree_map_onlyrS   Ú_dispatch_tls_local_include_setÚDispatchKeySetÚ_dispatch_tls_local_exclude_setÚremoverg   r   ÚPythonFunctionalizeAPIÚunwrap_tensorsÚwrap_tensorsÚ_ForceDispatchKeyGuardÚ#_functionalize_enable_reapply_viewsÚfxÚexperimentalÚproxy_tensorÚdisable_proxy_modes_tracingr   Ú_sync_view_replay_annotationsÚ_op_dkrD   r7   r3   r8   r9   Ú_freeze_functional_tensorÚ_disable_functionalizationÚaliasrŽ   rˆ   r�   rc   r   r   r6  Ú	tree_map_r;   Útree_leavesÚ
lift_freshÚTagÚinplace_viewÚtagsÚset_Úsource_TensorÚ_mode_utilsÚno_dispatchr   )rW   rC   r$   rX   rY   Úrr+  r.  r0  r1  r2  Úexport_configÚinductor_configr3  r4  Úargs_unwrappedÚkwargs_unwrappedÚinclude_to_setÚexclude_to_setÚctxÚfully_unwrapped_argsÚfully_unwrapped_kwargsÚouts_unwrappedÚouts_wrappedÚold_apply_viewsÚinput_unwrappedr9  r8  s   `                          @r'   r�   Ú'FunctionalTensorMode.__torch_dispatch__è  sT  ù€ ð ‰>ØˆFä)¨%×0Ñ0Ü!Ð!ð Ô(×5Ñ5Ó5Ø×#Ñ# D°×7Ñ7ô —‘×-Ñ-¨d¯i©i«k×:Ñ:âØ—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Ñ7ä—N‘N×(Ñ(×/Ñ/°×5Ñ5Ü—~‘~×+Ñ+×6Ñ6°t×<Ñ<ñ 0°°dÀ&ÓIÐIÙ(¨¨t¸6ÓBÐBçOá�t×ÑÜ�x‰x×=Ñ=Ø—	‘	“œUŸX™X×1Ñ1×?Ñ?÷ñ ô %Ø˜DŸI™I›K˜=Ð(mÐnóð ñ "Ø×+Ñ+¨T¯\©\¸4Àvóð ô ,2×+?Ò+?Ü˜f¨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Ñ0ô
 )Ó*ˆCØ#&×#5Ñ#5°dÓ#;Ð Ø%(×%7Ñ%7Øó&Ð"ñ "Ø%ðà(ñˆNð ×+Ñ+¨NÓ;ŠLô —‘×0Ñ0°ÀÕPð*Oä&+×&OÒ&OÐPTÓ&U�Oð Ô/×<Ñ<Ó<ô #ŸX™X×2Ñ2×?Ñ?×[Ñ[Õ]Ù-1°>Ð-VÐEUÑ-V˜N÷ ^ä'-×';Ò';Ü!ŸL™L¨$°ó(™ð ×:Ñ:¸4ÔHð *.¯ªÜ!ŸH™H×0Ñ0×>Ñ>ð*à+ò*ð /ñ*˜ð  Ÿ;Ÿ;Ø#¤u§y¡y§~¡~×'=Ñ'=×'EÑ'EÒEÜ %× ?Ò ?ÀÔ OÜ'-×';Ò';Ü!ŸL™L¨$°ó(˜ô ×4Ò4Ô6Ü×=Ò=¸oÕN÷W QôZ 	)Ø\ô	
ð œŸ	™	Ÿ™×,Ñ,×4Ñ4Ò4Øœ5Ÿ9™9Ÿ>™>×0Ñ0×8Ñ8Ò8ä�D“	˜Q“Ü˜4 ™7Ô$4×5Ñ5ä#×;Ò;¸DÀ¹G¿L¹LÓIˆOäØ#¤U×%6Ñ%6×%AÑ%A÷ñ ð $×1Ñ1Ñ=à&5×&CÑ&CÐ#÷Jô × Ò Ð!7¸ÔFô ñ ä×+Ò+¨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Ò%÷ 7ô +¨4°v¸|ÓLÐL÷S –ú÷j ^Ö]ûô4 ×4Ò4Ô6Ü×=Ò=¸oÕNú÷W QÖPú÷| 7Õ6úsV   Á=_Ð9`3Ð;A`Ò	_1Ò C6`Ö+`3ß	aß
_.ß1
` 	ß;`à-`0à0`3à3
aá
ac                óŠ  • [         R                  R                  [         R                  R                  R                  5      nUb»  [
        R                  " X/5       HŸ  n[        U[        5      (       d  M  [         R                  " UR                  5      n UR                  R                  U   nUR                   R"                  n[$        R&                  " U5         [         R(                  " U5        SSS5        M¡     gg! [         a%    UR                  (       a  [        SU S35      Se MÓ  f = f! , (       d  f       Mæ  = f)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   rJ   r  r›   ÚPROXYrM  rb  rŒ   r    r�   rc   ÚtracerÚtensor_trackerÚKeyErrorrp   r�   ÚproxyÚnodeÚfx_tracebackÚset_current_replay_noder¤   )rW   rX   rY   ÚmÚar7  Útracker_entryÚ	curr_nodes           r'   r\  Ú2FunctionalTensorMode._sync_view_replay_annotationsÇ  s  € ô& �H‰H×'Ñ'¬¯©×(FÑ(F×(LÑ(LÓMˆØ‰=Ü×'Ò'¨¨Ö7�Ü! !Ô%5×6Ñ6ÙÜ!×9Ò9¸!¿&¹&ÓA�	ðà$%§H¡H×$;Ñ$;¸IÑ$F�Mð *×/Ñ/×4Ñ4�	Ü!×9Ò9¸)ÕDÜ—K’K ”N÷ EÑDò+ 8ð øô  ó ð !×.×.Ü*Ø*¨9¨+Ð5GÐHóà#ð$ò ðú÷ EÖDús   ÂDÃD3Ä+D0Ä/D0Ä3
E	c                ó”   • [        XR                  U R                  5      nUb  U$ [        R                  " X#45      u  pV[        X5      $ r-   )rG   rD   rE   rM  Útree_flattenr   )rW   rC   rX   rY   ÚresultÚflat_args_kwargsr[   s          r'   r@   Ú#FunctionalTensorMode._can_decomposeô  sH   € ô % T¯;©;¸×8IÑ8IÓJˆØÑØˆMô %×1Ò1°4°.ÓAÑÐÜ-¨dÓEÐErH   c                ó   • g)NTr^   )r|   s    r'   Úis_infra_modeÚ"FunctionalTensorMode.is_infra_mode  s   € àrH   )r  r  r  rê   rz   r  r  r  rD   r  rE   )FFFT)
rE   r#   rD   r#   r  r#   r  r#   r]   rã   )r]   r
   )r%  ztype[BaseException] | Noner&  zBaseException | Noner'  zTracebackType | Noner]   rã   rÝ   rÞ   )rX   rà   rY   údict[str, Any]r]   rã   )rC   r   rX   rà   rY   r�  r]   r#   râ   )rä   rå   ræ   rç   r  r   r$  r�   r\  r@   ÚclassmethodrŽ  r  r  r	  s   @r'   rÜ   rÜ   £  s,  ø† ð #ØØ',Ø&*ð%(àð%(ð ð%(ð !%ð	%(ð
  $ð%(ð 
÷%(ð %(÷Pð$8à,ð8ð &ð8ð %ð	8ð
 
÷8ð !#Ø(,ð]Màð]Mð ð]Mð ð	]Mð
 &ð]Mð 
õ]Mð~+#àð+#ð ð+#ð 
ô	+#ðZFàðFð ðFð ð	Fð
 
ôFð$ óó örH   rÜ   c                 ó\   • [        [        R                  R                  R                  5      $ r-   )r   r   rJ   r›   rœ   r^   rH   r'   Údisable_functional_moder“    s   € äœuŸx™x×=Ñ=×HÑHÓIÐIrH   F)Úpropagate_input_mutationsc               ó<   ^ ^^^^• SS jmSS jmSUU UUU4S jjnU$ )Nc                ón   • [        U [        R                  5      (       a  [        R	                  U 5      $ U $ r-   )rŒ   r   r   r    r¡   ©r%   s    r'   Úto_funÚ&dispatch_functionalize.<locals>.to_fun   s)   € Ü�aœŸ™×&Ñ&Ü#×1Ñ1°!Ó4Ð4ØˆrH   c                ó&  • [        U [        5      (       dG  [        U [        R                  5      (       a&  [        R                  " U 5      (       a  [        S5      eU $ [        R                  " U 5        [        R                  " U R                  5      $ )NzCNon-FunctionalTensor torch.Tensor should not be a functional tensor)	rŒ   r    r   r   rf   rO   r¤   r�   rc   r—  s    r'   Úfrom_funÚ(dispatch_functionalize.<locals>.from_fun%  si   € Ü˜!Ô-×.Ñ.ä˜!œUŸ\™\×*Ñ*Ü×.Ò.¨q×1Ñ1Ü(Ø]óð ð ˆHÜ�Š�AŒÜ×,Ò,¨Q¯V©VÓ4Ð4rH   c                 ó  >• [         R                  R                  [         R                  R                  [         R                  R                  R
                  5      5      n/ n/ nU   T   [        R                  " [         R                  TU 5      n[        R                  " [         R                  TU5      nT(       a,  [        R                  " U 0 UD6n[        R                  " U0 UD6nT" U0 UD6n[        R                  " [        TU5      nS S S 5        T(       aC  SSKJn	  [        X45       H.  u  p«[        U[        5      (       d  M  U	" X«R                  5        M0     WsS S S 5        $ ! , (       d  f       Nc= f! , (       d  f       g = f)Nr   )Ú$_propagate_functional_input_mutation)r   rJ   Ú_ExcludeDispatchKeyGuardrP  rL   rM   rM  rN  r   Úarg_tree_leavesr    Útorch._C._functorchrž  ÚziprŒ   rc   )rX   rY   Údisable_aboveÚflat_inputsÚflat_func_inputsÚ	func_argsÚfunc_kwargsÚfunc_outputsÚoutputsrž  r0   Úfunc_argr›  rC   r}   r”  r˜  s               €€€€€r'   rÒ   Ú%dispatch_functionalize.<locals>.inner1  s#  ø€ ÜŸ™×9Ñ9Ü�H‰H×#Ñ#¤E§H¡H×$8Ñ$8×$FÑ$FÓGó
ˆð "$ˆØ&(ÐÚÚÜ"×0Ò0´·±¸vÀtÓL�	Ü$×2Ò2´5·<±<ÀÈÓP�Þ,ä"(×"8Ò"8¸$Ð"IÀ&Ñ"I�KÜ'-×'=Ò'=¸yÐ'XÈKÑ'XÐ$Ù# YÐ>°+Ñ>�Ü ×.Ò.Ô/?ÀÈ<ÓX�÷ ö )ÝTô &)¨Ö%G‘M�CÜ! (Ô,<×=Ó=Ù<¸SÇ-Á-ÖPñ &Hð ÷' ‰]ß•ú÷ �]ús+   Á&E;Á)B$E*Ä8E;Å	E;Å*
E8	Å4E;Å;
F	)r%   r=  r]   r=  )rX   r   rY   r   r]   r   r^   )rC   r}   r”  rÒ   r›  r˜  s   ``` @@r'   Údispatch_functionalizer¬    s   ü€ ôô

5÷ó ð6 €LrH   c                  óŒ   • \ rS rSr\SS j5       r\SS j5       r\SS j5       r\SS j5       rSS jr	SS jr
SS jrSS	 jrS
rg)ÚBaseFunctionalizeAPIiO  c                ó   • g r-   r^   ©rW   rX   s     r'   rU  Ú!BaseFunctionalizeAPI.wrap_tensorsP  ó   € àrH   c                ó   • g r-   r^   r°  s     r'   rT  Ú#BaseFunctionalizeAPI.unwrap_tensorsT  r²  rH   c                ó   • g r-   r^   ©rW   Úinner_fs     r'   ÚfunctionalizeÚ"BaseFunctionalizeAPI.functionalizeX  r²  rH   c                ó   • g r-   r^   r¥   s    r'   Úredispatch_to_nextÚ'BaseFunctionalizeAPI.redispatch_to_next\  r²  rH   c                ó0   • [         R                  " X5        g r-   )r   r¬   )rW   Úinput_tensorÚoutput_tensors      r'   ÚreplaceÚBaseFunctionalizeAPI.replace`  s   € Ü×$Ò$ \ÕArH   c                ó0   • [         R                  " U5        g r-   )r   r±   ©rW   Útensors     r'   r²   Ú"BaseFunctionalizeAPI.commit_updatec  s   € Ü×*Ò*¨6Õ2rH   c                ó0   • [         R                  " U5        g r-   )r   rµ   rÃ  s     r'   r¶   ÚBaseFunctionalizeAPI.syncf  s   € Ü×!Ò! &Õ)rH   c                ó0   • [         R                  " U5        g r-   )r   r¹   rÃ  s     r'   rº   Ú7BaseFunctionalizeAPI.mark_mutation_hidden_from_autogradi  s   € Ü×?Ò?ÀÕGrH   r^   N©rX   rà   r]   rà   )rX   ú'torch.Tensor | tuple[torch.Tensor, ...]r]   r   )r·  úCallable[..., Any]r]   rÌ  ©r]   zAbstractContextManager[None]©r¾  rb   r¿  rb   r]   rã   ©rÄ  rb   r]   rã   )rä   rå   ræ   rç   r   rU  rT  r¸  r»  rÀ  r²   r¶   rº   r  r^   rH   r'   r®  r®  O  sf   † Øóó ðð óó ðð óó ðð óó ðôBô3ô*÷HrH   r®  c                  ó¨   ^ • \ rS rSr S     SU 4S jjjrSS jr    SS jrSS jrSS jr\	SS j5       r
SS jrSS	 jrSS
 jrSS jrSrU =r$ )rS  im  c                ó^   >• [         TU ]  5         U(       a  UO	[        5       U l        X l        g r-   )rÃ   r  rÜ   r}   rE   )rW   r}   rE   rÄ   s      €r'   r  ÚPythonFunctionalizeAPI.__init__n  s%   ø€ ô 	‰ÑÔÞ ‘DÔ&:Ó&<ˆŒ	Ø(ÕrH   c                óÞ   • U R                      [        R                  R                  R	                  [        R
                  [        R                  U5      sS S S 5        $ ! , (       d  f       g = fr-   )r}   r   rI  Ú_pytreerN  r   r    r¡   r°  s     r'   rU  Ú#PythonFunctionalizeAPI.wrap_tensorsu  s=   € Ø�Y‹YÜ—;‘;×&Ñ&×4Ñ4Ü—‘Ô.×<Ñ<¸dó÷ �Y�Yús   �AAÁ
A,c                ó|   • [         R                  R                  R                  [        [        R
                  U5      $ r-   )r   rI  rÔ  rN  r    r¦   r°  s     r'   rT  Ú%PythonFunctionalizeAPI.unwrap_tensors{  s/   € ô �{‰{×"Ñ"×0Ñ0ÜÔ.×>Ñ>Àó
ð 	
rH   c                ó,   • [        XR                  5      $ r-   )r¬  r}   r¶  s     r'   r¸  Ú$PythonFunctionalizeAPI.functionalizeƒ  s   € Ü% g¯y©yÓ9Ð9rH   c                ó,   • [         R                  " 5       $ r-   )Ú
contextlibÚnullcontextr¥   s    r'   r»  Ú)PythonFunctionalizeAPI.redispatch_to_next†  s   € ô ×%Ò%Ó'Ð'rH   c                ób   • [        U [        5      (       d  [        U S[        U 5       35      eU $ )Nz! must be a FunctionalTensor, got )rŒ   r    rO   Útype)rÄ  r?  s     r'   Ú_check_cast_functionalÚ-PythonFunctionalizeAPI._check_cast_functionalŽ  s7   € ä˜&Ô"2×3Ñ3Ü Ø�&Ð9¼$¸v»,¸ÐHóð ð ˆrH   c                óŠ   • U R                  US5      n[        U[        5      (       a  [        S5      eUR	                  U5        g )Nr¾  z,output_tensor must not be a FunctionalTensor)rà  rŒ   r    rO   r®   )rW   r¾  r¿  Úfts       r'   rÀ  ÚPythonFunctionalizeAPI.replace–  s:   € Ø×(Ñ(¨°~ÓFˆÜ�mÔ%5×6Ñ6Ü Ð!OÓPÐPØ
�‰�MÕ"rH   c                óD   • U R                  US5      R                  5         g ©NrÄ  )rà  r²   rÃ  s     r'   r²   Ú$PythonFunctionalizeAPI.commit_updateœ  s   € Ø×#Ñ# F¨HÓ5×CÑCÕErH   c                óD   • U R                  US5      R                  5         g ræ  )rà  r¶   rÃ  s     r'   r¶   ÚPythonFunctionalizeAPI.syncŸ  s   € Ø×#Ñ# F¨HÓ5×:Ñ:Õ<rH   c                óD   • U R                  US5      R                  5         g ræ  )rà  rº   rÃ  s     r'   rº   Ú9PythonFunctionalizeAPI.mark_mutation_hidden_from_autograd¢  s   € Ø×#Ñ#Ø�Hó	
ç
,Ñ
,Õ
.rH   )r}   rE   r  )r}   r  rE   r#   r]   rã   ©rX   ú
tuple[Any]r]   rí  )rX   z<torch.Tensor | tuple[torch.Tensor, ...] | list[torch.Tensor]r]   r   ©r·  r   r]   r   rÍ  )rÄ  rb   r?  rá   r]   r    rÎ  rÏ  )rä   rå   ræ   rç   r  rU  rT  r¸  r»  rö   rà  rÀ  r²   r¶   rº   r  r  r	  s   @r'   rS  rS  m  sz   ø† àMRð)Ø/ð)ØFJð)à	÷)ð )ôð
ØPð
à	ô
ô:ô(ð óó ðô#ôFô=÷/ò /rH   rS  c                  óD   • \ rS rSrSS jr    S	S jrS
S jrSS jrSrg)ÚCppFunctionalizeAPIi¨  c                ó   • SSK Jn  U" USS9$ ©Nr   )Ú_wrap_all_tensors_to_functional)Úlevel)Ú!torch._functorch.eager_transformsró  ©rW   rX   ró  s      r'   rU  Ú CppFunctionalizeAPI.wrap_tensors©  s   € ÝUá.¨t¸1Ñ=Ð=rH   c                ó,   • SSK Jn  U" U[        5       S9$ ©Nr   )Ú#_unwrap_all_tensors_from_functional)Úreapply_views)rõ  rú  Ú_reapply_views©rW   rX   rú  s      r'   rT  Ú"CppFunctionalizeAPI.unwrap_tensors®  s   € õ	
ñ 3°4Ä~ÓGWÑXÐXrH   c                ó@   • [         R                  R                  U5      $ r-   )r   rC   r¸  r¶  s     r'   r¸  Ú!CppFunctionalizeAPI.functionalize¸  s   € Ü�z‰z×'Ñ'¨Ó0Ð0rH   c                ó¾   • [         R                  R                  [         R                  R                  [         R                  R                  R
                  5      5      $ r-   )r   rJ   rŸ  rP  rL   rM   r¥   s    r'   r»  Ú&CppFunctionalizeAPI.redispatch_to_next»  s;   € Ü�x‰x×0Ñ0Ü�H‰H×#Ñ#¤E§H¡H×$8Ñ$8×$FÑ$FÓGó
ð 	
rH   r^   NrÊ  ©rX   rË  r]   rË  rî  rÍ  )	rä   rå   ræ   rç   rU  rT  r¸  r»  r  r^   rH   r'   rð  rð  ¨  s)   † ô>ð
YØ;ðYà	0ôYô1÷
rH   rð  c                  óN   • \ rS rSrS	S jrS
S jr    SS jrSS jrSS jrSr	g)ÚFunctorchFunctionalizeAPIiÁ  c                ó   • Xl         g r-   ©Úinterpreter)rW   r  s     r'   r  Ú"FunctorchFunctionalizeAPI.__init__Â  s   € Ø&ÕrH   c                óJ   • SSK Jn  U" XR                  R                  5       S9$ rò  )rõ  ró  r  rô  rö  s      r'   rU  Ú&FunctorchFunctionalizeAPI.wrap_tensorsÅ  s   € ÝUá.¨t×;KÑ;K×;QÑ;QÓ;SÑTÐTrH   c                óJ   • SSK Jn  U" XR                  R                  5       S9$ rù  )rõ  rú  r  Úfunctionalize_add_back_viewsrý  s      r'   rT  Ú(FunctorchFunctionalizeAPI.unwrap_tensorsÊ  s(   € õ	
ñ 3Ø× 0Ñ 0× MÑ MÓ Oñ
ð 	
rH   c                ó„   • [         R                  R                  UU R                  R	                  5       (       a  SS9$ SS9$ )NÚmutations_and_viewsÚ	mutations)rR  )r   rC   r¸  r  r  r¶  s     r'   r¸  Ú'FunctorchFunctionalizeAPI.functionalizeÖ  sQ   € Ü�z‰z×'Ñ'Øð ×#Ñ#×@Ñ@×BÑBð &ð (ð 
ð 	
ð
 !ð (ð 
ð 	
rH   c                ó6   • U R                   R                  5       $ r-   )r  Úlowerr¥   s    r'   r»  Ú,FunctorchFunctionalizeAPI.redispatch_to_nextà  s   € Ø×Ñ×%Ñ%Ó'Ð'rH   r  N)r  r   r]   rã   rì  r  rî  rÍ  )
rä   rå   ræ   rç   r  rU  rT  r¸  r»  r  r^   rH   r'   r  r  Á  s,   † ô'ôUð
	
Ø;ð	
à	0ô	
ô
÷(rH   r  c                óp   • [        U [        5      (       a   [        R                  " U R                  5      $ U $ r-   )rŒ   r    r   r�   rc   )rÄ  s    r'   Úmb_unwrap_functional_tensorr  ä  s*   € Ü�&Ô*×+Ñ+Ü×,Ò,¨V¯[©[Ó9Ð9Ø€MrH   )r$   rß   r]   r#   )rC   r   rD   r#   rE   r#   r]   zbool | None)rP   rá   r]   rã   )rZ   r   r]   rÌ  )r]   zGenerator[None, None, None])rC   rÌ  r}   rÜ   r”  r#   r]   rÌ  )rÄ  rb   r]   rb   )EÚ
__future__r   rÛ  Ú	functoolsrA   r  Úabcr   r   r   Útypingr   r   r	   Útyping_extensionsr
   ÚbuiltinsÚcollections.abcr   r   r   r$   r   Útorch._functorch.pyfunctorchr   Ú
torch._opsr   r   Útorch.fx.tracebackrX  Ú	tracebackr�  Útorch.utils._pytreerI  rÔ  rM  Útorch._Cr   rü  r   r   Útorch._subclasses.meta_utilsr   Útorch.utils._python_dispatchr   r   r   r   r   Ú_loggingÚgetArtifactLoggerrä   r!   r(   Ú	lru_cacherG   rS   r_   r   r    rÜ   Úcontextmanagerr“  r¬  r®  rS  rð  r  r  r^   rH   r'   Ú<module>r+     s|  ðÝ "ã Û Û Û ß #Ý -ß +Ñ +Ý "ö Ûß=Ñ=Ý#åEÝ%ã ß )Ð )ß $Ð $Ý Kß KÝ 6÷õ ð —n‘n×6Ñ6°xÐARÓSÐ ô
$ð ×Ò˜SÑ!ð Ø
ð Ø"ð Ø26ð àó ó "ð ôF"ô2ôh!�u—|‘|ô h!ôV	eÐ,ô eðP ×ÑóJó ðJñ "6Ó!7ð3ð ',ñ	3Ø
ð3à
ð3ð  $ð	3ð
 ö3ôlH˜3ô Hô<8/Ð1ô 8/ôv
Ð.ô 
ô2 (Ð 4ô  (õFrH   