ó
    EñiSh ã            	       óB  • S r SSKrSSK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  SSKJr  SSKJrJrJrJr  SSKrSSKJr  SSKrSSKrSSKJr  SS	KJr  SS
KJ r   SSK!J"r"J#r#J$r$J%r%J&r&  SSK'J(r(  SSK)J*r*J+r+J,r,  SSK-J.r.  SSK/J0r0J1r1J2r2J3r3J4r4  SSK5J6r6J7r7  SSK8J9r9J:r:  SSK;J<r<  SSK=J>r>J?r?J@r@JArAJBrBJCrCJDrDJErEJFrFJGrGJHrH  SSKIJJrJJKrKJLrL  SSKMJNrNJOrO  SSKPJQrQJRrR  SSKSJTrT  SSKUJVrV   SSKWrX\(       a   SSKZJ[r[  SSK\J]r]  SSK^J_r_J`r`  SSKaJbrb  SSKcJdrd  \RÊ                  " \f5      rg\RÐ                  \RÒ                  \RÔ                  \RÖ                  \RØ                  \RÚ                  \RÜ                  \RÞ                  S .rp\RÜ                  \RÞ                  \RØ                  \RÚ                  S!.rq0 \pE\qErr\sRé                  \pRë                  5       5      rv\sRé                  \qRë                  5       5      rwS"\xS#\y4S$ jrz\Rö                  Rø                  Rú                  \Rü                  Rú                  -  r " S% S&\L5      r€ " S' S(\L5      r� " S) S*\€5      r‚ " S+ S,\€5      rƒ " S- S.\€5      r„ " S/ S0\V5      r… " S1 S2\L5      r† " S3 S4\L5      r‡g! \Y a    SrX GN«f = f)5aÀ  
This module contains variable tracker classes for handling tensors and tensor-related operations in Dynamo.

The main class is TensorVariable which represents torch.Tensor inputs and intermediate values in the FX graph.
It handles tensor operations, method calls, and maintains metadata about tensor properties like dtype, device, etc.

Other key classes include:
- SymNodeVariable: Represents symbolic scalars (int/float/bool) used for size computation and unspecialized values
- NumpyNdarrayVariable: Handles numpy array interop through torch._numpy
- UnspecializedPythonVariable: Represents unspecialized Python numeric values as 1-element tensors
- TensorSubclassVariable: Handles tensor subclasses with __torch_function__ overrides
- UntypedStorageVariable: Represents tensor storage objects
- DataPtrVariable: Handles tensor data pointer operations

These classes work together to track tensor operations and properties during Dynamo's tracing process.
é    N)ÚIterableÚSequence)Únullcontext)Úchain)ÚNoneType)ÚAnyÚNoReturnÚOptionalÚTYPE_CHECKING)Úcompiled_autograd)Úis_opaque_reference_type)Úis_sparse_any)Úguard_scalarÚGuardOnDataDependentSymNodeÚhas_free_symbolsÚis_symbolicÚSymTypes)Úis_traceable_wrapper_subclassé   )ÚconfigÚgraph_break_hintsÚ	variables)Útrace_wrapped)ÚTorchRuntimeErrorÚunimplementedÚ$UnknownPropertiesDuringBackwardTraceÚ	UserErrorÚUserErrorType)Ú_ApplyBackwardHookÚcall_hook_from_backward_state)ÚGuardBuilderÚinstall_guard)Ú
AttrSource)ÚfqnÚget_custom_getattrÚget_fake_valueÚget_real_valueÚguard_if_dynÚobject_has_getattributeÚproductÚproxy_args_kwargsÚraise_args_mismatchÚset_example_valueÚtensortype_to_dtypeé   )ÚAttributeMutationNewÚValueMutationNewÚVariableTracker)ÚCONSTANT_VARIABLE_NONEÚConstantVariable)ÚListIteratorVariableÚSizeVariable)ÚTorchScriptObjectVariable)ÚUserDefinedClassVariable)Ú	PyCodegen)ÚOutputGraph)ÚInstructionTranslatorÚInstructionTranslatorBase)ÚUserFunctionVariable©ÚTensorWithTFOverrideVariable)Ú>Ú<z>=z<=ú==ú!=Úisúis not)rD   rE   rB   rC   ÚvalueÚreturnc                 ó`  • [        [        U 5      =(       a”    [        R                  R                  R                  U 5      (       + =(       a_    [        U S5      =(       aL    [        U R                  [        R                  5      =(       a!    [        U R                  U R                  S 5      5      $ )NÚ__self__)ÚboolÚcallableÚtorchÚ_dynamoÚutilsr)   ÚhasattrÚ
isinstancerI   ÚTensorÚgetattrÚ__name__©rF   s    Ú[/home/mande/repo/quber/.venv/lib/python3.13/site-packages/torch/_dynamo/variables/tensor.pyÚis_bound_tensor_methodrV   �   sy   € ÜÜ�‹÷ 	:Ü—‘×#Ñ#×;Ñ;¸EÓBÔB÷	:ä�E˜:Ó&÷	:ô �u—~‘~¤u§|¡|Ó4÷	:ô �E—N‘N E§N¡N°DÓ9óð ó    c            #       ó
  ^ • \ rS rSrSrSSSSSSS	S
SSSSSSS1\R                  krS\R                  4S jr	SSSSS.S\R                  R                  S\R                  S\R                  S\R                  S\S
\S\S\S\S\S\S\\S4   S-  S	\\S4   S-  S\S-  S\S-  S\SS4"U 4S jjjr S”SSS\S-  SS4S jjrS\S-  4S jrSSS \S-  S!\SS4S" jrS\4S# jrS\R                  R                  4S$ jrS\4S% jrS\4S& jr\S'\R                  S\\\4   4S( j5       rSSS)\S\4S* jr SSS\4S+ jr!SSS\S-  4S, jr"SSS\S-  4S- jr#SSS\S-  4S. jr$SSS\%S-  4S/ jr&SSS\4S0 jr'SSS\%S-  4S1 jr(SSS\%S-  4S2 jr)SSS\%S-  4S3 jr*SSS\%S-  4S4 jr+SSS\,4S5 jr-SSS\4S6 jr.SSS\%S-  4S7 jr/SSS\4S8 jr0SSS)\S\%4S9 jr1SSS)\S\4S: jr2SSS\4S; jr3SSS\4S< jr4 S”SSS=\5\   S-  S\6\   4S> jjr7SSS?S@SA\SB\5\   SC\\\4   S\4SD jr8S\4SE jr9\:S\\S4   4SF j5       r;S\6\   4SG jr<S\6\   4SH jr=SSS)\SI\5\   SSJS\4
SK jr>SSSI\S\S\S-  4SL jr?SSSI\S\S\S-  4SM jr@ S”S)\SN\S-  S\S-  4SO jjrASSS\S-  4SP jrB\BrCSSS\S-  4SQ jrD\DrESSS\%S-  4SR jrFSSS\%S-  4SS jrGSSS\%S-  4ST jrH S”SSSU\S-  S\%S-  4SV jjrI  S•SSS\S-  SX\S\S\S-  4
SY jjrJSSSZ\SS[4S\ jrKSSS\S-  4S] jrLSSS\4S^ jrMSWS_.SSS`\\-  SSa4Sb jjrNSSS\4Sc jrO S–Sd\P\   Se\S\Q\6\      4Sf jjrR    S—SSSg\Q\   Sh\Q\   Si\Q\   Sj\Q\   S\Q\   4Sk jjrSSSSI\S\SSl4Sm jrTSSSI\S\SS4Sn jrUSSSI\S\S\4So jrV\\WR°                  S˜Sp j5       5       rYSSS\4Sq jrZSSS\[4Sr jr\SSs.SSSt\Su\S'\S-  S\S-  4
Sv jjr]SSSw\S'\S\4Sx jr^SSSI\S\S\,4Sy jr_SSSI\S\S\,4Sz jr`SSSI\S\S\,4S{ jraSSSI\S\S\,4S| jrbSSSI\S\SS4S} jrcSS~.SSS\S€\S-  S\S-  4S� jjrdSSs.SSStS SuS S'\S-  S\S-  4
S‚ jjreSSSƒ\S\4S„ jrfSSSI\S\S\4S… jrgSSSI\S\S\4S† jrhSSSI\S\S\4S‡ jriSSSI\S\S\4Sˆ jrjSSS)\S‰\S\4SŠ jrk S™SSS
\\-  S\4S‹ jjrlS\,4SŒ jrmSSSI\S\S\S-  4S� jrn    SšSŽ jroS)\SS4S� jrpS\4S� jrqS\4S‘ jrrS\sS\4S’ jrtS“ruU =rv$ )›ÚTensorVariableé’   z=A torch.Tensor input or an intermediate value in the FX graphÚproxyÚdtypeÚdeviceÚlayoutÚndimÚsizeÚstrideÚrequires_gradÚis_quantizedÚis_contiguousÚ	is_nestedÚ	is_sparseÚ
class_typeÚspecialized_valueÚ_is_name_setrG   c                 ój   • [        U R                  R                  U R                  R                  5      $ )z¹
Get the actual value represented by this variable if computation is run
using the user-provided inputs.
NOTE: this runs actual tensor computation and may be
slow and memory-intensive.
)r'   r[   ÚnodeÚtracer©Úselfs    rU   r'   ÚTensorVariable.get_real_value¨   s#   € ô ˜dŸj™jŸo™o¨t¯z©z×/@Ñ/@ÓAÐArW   N)Ú_sizera   rd   ri   Úhas_grad_fnrp   .Úkwargsc                ó&  >• [         TU ]  " S0 UD6  Xl        X l        X0l        X@l        XPl        XÀl        XÐl        X`l	        X€l
        Xàl        Xpl        X�l        X l        X°l        Uc#  U R                  R                   R"                  S:H  nXðl        g )NÚplaceholder© )ÚsuperÚ__init__r[   r\   r]   r^   r_   rp   ra   rb   rc   rd   re   rf   rg   rq   rk   Úopri   )rn   r[   r\   r]   r^   r_   rb   re   rc   rf   rg   rq   rp   ra   rd   ri   rr   Ú	__class__s                    €rU   rw   ÚTensorVariable.__init__±   sƒ   ø€ ô( 	‰ÒÑ"˜6Ò"ØŒ
ØŒ
àŒØŒØŒ	ØŒ
ØŒØ*ÔØ(ÔØ*ÔØ"ŒØ"ŒØ$ŒØ&ÔØÑàŸ:™:Ÿ?™?×-Ñ-°Ñ>ˆLØ".ÕrW   Útxr;   Ú
target_clsc                 óö   • SSK JnJn  Uc  [        U 5      nU R                  R
                  R                  R                  S5      nU" X!XT" U5      5      nUR                  5        H  u  px[        XU5        M     g )Nr/   )Úget_specialized_propsÚinfer_subclass_typeÚexample_value)
Úbuilderr~   r   Útyper[   rk   ÚmetaÚgetÚitemsÚsetattr)	rn   r{   r|   r~   r   r€   Úspecialized_propsÚkÚvs	            rU   Úsynchronize_attributesÚ%TensorVariable.synchronize_attributesÚ   sn   € ÷ 	HàÑÜ˜d›ˆJàŸ
™
Ÿ™×,Ñ,×0Ñ0°ÓAˆÙ1Ø˜MÐ+>¸}Ó+Mó
Ðð &×+Ñ+Ö-‰DˆAÜ�D˜QÖò .rW   c                 ó‚   • U R                   R                  R                  R                  S5      nUb  UR                  $ S$ )zFGet the current version of self's fake tensor, or None if unavailable.r€   N)r[   rk   rƒ   r„   Ú_version)rn   Ú	self_fakes     rU   Ú_get_fake_versionÚ TensorVariable._get_fake_versioné   s6   € à—J‘J—O‘O×(Ñ(×,Ñ,¨_Ó=ˆ	Ø%.Ñ%:ˆy×!Ñ!ÐDÀÐDrW   Úversion_beforeÚhas_tensor_argc                 ór   • U R                  5       nUb$  Ub   XB:”  a  U(       a  U R                  U5        ggggg)zs
Sync attributes if self was mutated by an inplace operation.

See Note [Inplace ops and VariableTracker metadata]
N)r�   rŠ   )rn   r{   r‘   r’   Úversion_afters        rU   Ú_sync_if_inplace_mutationÚ(TensorVariable._sync_if_inplace_mutationî   sI   € ð ×.Ñ.Ó0ˆàÑ&ØÑ)ØÓ.Þà×'Ñ'¨Õ+ð ð /ð *ð 'rW   c                 óZ   • [        U R                  R                  R                  S   5      $ ©Nr€   )Úreprr[   rk   rƒ   rm   s    rU   Ú
debug_reprÚTensorVariable.debug_repr  s    € ä�D—J‘J—O‘O×(Ñ(¨Ñ9Ó:Ð:rW   c                 ó   • U R                   $ ©N©r[   rm   s    rU   Úas_proxyÚTensorVariable.as_proxy  ó   € Ø�z‰zÐrW   c                 ó   • U R                   $ r�   )rg   rm   s    rU   Úpython_typeÚTensorVariable.python_type	  s   € Ø�‰ÐrW   c                 ó   • g©NTru   rm   s    rU   Ú	is_tensorÚTensorVariable.is_tensor  ó   € ØrW   rF   c                 ó&  ^ • T R                   T R                  T R                  [        T R                  5      T R
                  T R                  T R                  T R                  [        T 5      S.	n T R                  S LUS'   [        T 5      (       a5  [        T 5      (       d%  [        S T R                  5        5       5      US'   U$ [        T 5      (       d¤  [        S T R                  5        5       5      US'   [        T R!                  5       5      US'   ["        R$                  R&                  R)                  T 5      (       a  S US'   U$ [        U 4S	 j["        R*                  R,                   5       5      US'   U$ ! [         a	    SUS'    GNf = f)
N)	r\   r]   r^   r_   rb   re   rc   rf   rg   rq   Fc              3   ó\   #   • U  H"  n[        U5      (       a  [        U5      OUv •  M$     g 7fr�   ©r   Úint©Ú.0Úss     rU   Ú	<genexpr>Ú,TensorVariable.specialize.<locals>.<genexpr>$  s$   é € ð #Ú9E°Aœ+ aŸ.™.”�A”¨aÔ/ºùó   ‚*,rp   c              3   ó\   #   • U  H"  n[        U5      (       a  [        U5      OUv •  M$     g 7fr�   r¬   r®   s     rU   r±   r²   .  s*   é € ð #ò &�Aô & aŸ.™.”�A”¨aÔ/Ú%ùr³   ra   rd   c              3   óT   >#   • U  H  nTR                  US 9(       d  M  Uv •  M     g7f)©Úmemory_formatN)rd   )r¯   ÚxrF   s     €rU   r±   r²   :  s+   øé € ð /â@˜Ø×*Ñ*¸Ð*Ô;÷ ‘AÚ@ùs   ƒ(Ÿ	()r\   r]   r^   r­   r_   rb   re   rc   rf   r‚   Úgrad_fnÚ	Exceptionr   r   Útupler`   ra   rL   Ú_CÚ
_functorchÚis_batchedtensorÚ_prims_commonÚ_memory_formats)rF   Úpropss   ` rU   Ú
specializeÚTensorVariable.specialize  sp  ø€ ð —[‘[Ø—l‘lØ—l‘lÜ˜Ÿ
™
“OØ"×0Ñ0ØŸ™Ø!×.Ñ.ØŸ™Ü˜u›+ñ
!
ˆð	)Ø#(§=¡=¸Ð#<ˆE�-Ñ ô ˜×ÑÔ(8¸×(?Ñ(?Ü"ñ #Ø9>¿¹¼ó#ó ˆE�'‰Nð6 ˆô1 " %×(Ñ(ô #ñ #ð Ÿ™œó	#ó ˆE�'‰Nô $ E§L¡L£NÓ3ˆE�(‰OÜ�x‰x×"Ñ"×3Ñ3°E×:Ñ:ð *.��oÑ&ð ˆô */ô /ä"×0Ñ0×@Ò@ó/ó *��oÑ&ð
 ˆøôC ó 	)ð $)ˆE�-Ô ð	)ús   Á1E= Å=FÆFÚnamec                 ó8  • U R                   R                  R                  S   nU R                  (       Gd  [	        U5      (       aý  UR                  5       u  pE[        U R                  5       U5      n[        X25      nX$;   a.  [        U[        R                  5      (       d   eSSKJn  U" XUS9$ [        [        U5      5      (       aT  [        R                  R                   R#                  UR$                  R&                  U5      n	[(        R*                  " Xi5      $ [-        U5      (       d  [.        R0                  " X5      $ U R                  (       a  U R                  R3                  5       (       d  [4        eUR$                  R6                  UR$                  R8                  S.n
 [;        U R                  R<                  U
5      nUc  [4        e[A        U5      (       a  [4        e[C        U5      (       a  [4        e[        X²5      n[E        U R                  U5      n[G        U5      (       a  SSK$J%n  U" XU[        U5      S9$ [M        URO                  [P        RR                  5      5        [.        R0                  " XU5      $ ! [>         a  n[4        UeS nAff = f)Nr€   r/   ©Úwrap_fx_proxy)r{   r[   r€   ©ÚLÚG©ÚGetAttrVariable)ÚsourceÚpy_type)*r[   rk   rƒ   rÍ   r   Ú__tensor_flatten__rR   rŸ   rP   rL   rQ   r�   rÇ   r   r‚   Ú_libraryÚfake_class_registryÚmaybe_to_fake_objÚoutputÚ	fake_moder7   ÚcreaterK   r2   ÚbuildÚsubguards_allowedÚNotImplementedErrorÚlocal_scopeÚglobal_scopeÚevalrÄ   rº   r)   r%   r#   rV   ÚmiscrÌ   r"   Ú
make_guardr!   ÚHASATTR)rn   r{   rÄ   Úfake_valÚattrsÚ_ctxr[   r€   rÇ   Úfake_script_objÚscopeÚ_input_associated_real_valueÚexcÚ
real_valueÚattr_sourcerÌ   s                   rU   Údynamic_getattrÚTensorVariable.dynamic_getattrA  s  € ð —:‘:—?‘?×'Ñ'¨Ñ8ˆð �{�{ˆ{Ô<¸X×FÑFØ"×5Ñ5Ó7‰KˆEÜ˜DŸM™M›O¨TÓ2ˆEÜ# HÓ3ˆMØ‹}ä! -´·±×>Ñ>Ð>Ð>Ý2á$¨À}ÑUÐUÜ)¬$¨}Ó*=×>Ñ>Ü"'§.¡.×"DÑ"D×"VÑ"VØ—I‘I×'Ñ'¨ó#�ô 1×7Ò7¸ÓOÐOô ˜m×,Ñ,Ü&×,Ò,¨RÓ?Ð?à—— §¡× =Ñ =× ?Ñ ?Ü%Ð%ð —i‘i×+Ñ+°"·)±)×2HÑ2HÑIˆð	/ô ,0°·±×0@Ñ0@À%Ó+HÐ(ð (Ñ/Ü%Ð%ä"Ð#?×@Ñ@Ü%Ð%äÐ:×;Ñ;Ü%Ð%äÐ9Ó@ˆ
ä  §¡¨dÓ3ˆô " *×-Ñ-å-á"Ø ;¼¸ZÓ8Hñð ô 	�k×,Ñ,¬\×-AÑ-AÓBÔCÜ×$Ò$ R°[ÓAÐAøô7 ó 	/Ü%¨3Ð.ûð	/ús   Æ' J Ê
JÊJÊJc                 ó„   • U R                   b   [        R                  " U R                   5      $ U R                  US/ 0 5      $ )NÚdim)r_   r4   rÕ   Úcall_method©rn   r{   s     rU   Úmethod_attr_ndimÚTensorVariable.method_attr_ndim‹  s8   € Ø�9‰9Ñ Ü#×*Ò*¨4¯9©9Ó5Ð5à×#Ñ# B¨¨r°2Ó6Ð6rW   c                 ó^   • U R                   b   [        R                  " U R                   5      $ g r�   )r\   r4   rÕ   rí   s     rU   Úmethod_attr_dtypeÚ TensorVariable.method_attr_dtype‘  s$   € Ø�:‰:Ñ!Ü#×*Ò*¨4¯:©:Ó6Ð6ØrW   c                 ó^   • U R                   b   [        R                  " U R                   5      $ g r�   )r]   r4   rÕ   rí   s     rU   Úmethod_attr_deviceÚ!TensorVariable.method_attr_device–  ó$   € Ø�;‰;Ñ"Ü#×*Ò*¨4¯;©;Ó7Ð7ØrW   c                 ó^   • U R                   b   [        R                  " U R                   5      $ g r�   )r^   r4   rÕ   rí   s     rU   Úmethod_attr_layoutÚ!TensorVariable.method_attr_layout›  rö   rW   c                 óx   • U R                   b-  [        R                  " U R                   R                  S:H  5      $ g )NÚcuda)r]   r4   rÕ   r‚   rí   s     rU   Úmethod_attr_is_cudaÚ"TensorVariable.method_attr_is_cuda   s1   € ð �;‰;Ñ"Ü#×*Ò*¨4¯;©;×+;Ñ+;¸vÑ+EÓFÐFØrW   c                 óæ   • U R                  5       (       aD  U R                   Vs/ s H"  n[        R                  R	                  U5      PM$     nn[        U5      $ U R                  US/ 0 5      $ s  snf ©Nr`   )Ú
valid_sizer`   r   r4   rÕ   r6   rì   )rn   r{   r¸   Úsizess       rU   Úmethod_attr_shapeÚ TensorVariable.method_attr_shape§  si   € Ø�?‰?×Ñà>B¿iºió,Ú>G¸”	×*Ñ*×1Ñ1°!Ö4¹ið ð ,ô   Ó&Ð&à×#Ñ# B¨°°BÓ7Ð7ùò,s   ¤)A.c                 ó^   • U R                   b   [        R                  " U R                   5      $ g r�   )rb   r4   rÕ   rí   s     rU   Úmethod_attr_requires_gradÚ(TensorVariable.method_attr_requires_grad°  s*   € ð ×ÑÑ)Ü#×*Ò*¨4×+=Ñ+=Ó>Ð>ØrW   c                 ó^   • U R                   b   [        R                  " U R                   5      $ g r�   )rc   r4   rÕ   rí   s     rU   Úmethod_attr_is_quantizedÚ'TensorVariable.method_attr_is_quantized·  s*   € ð ×ÑÑ(Ü#×*Ò*¨4×+<Ñ+<Ó=Ð=ØrW   c                 ó^   • U R                   b   [        R                  " U R                   5      $ g r�   )rf   r4   rÕ   rí   s     rU   Úmethod_attr_is_sparseÚ$TensorVariable.method_attr_is_sparse¾  ó&   € ð �>‰>Ñ%Ü#×*Ò*¨4¯>©>Ó:Ð:ØrW   c                 ó^   • U R                   b   [        R                  " U R                   5      $ g r�   )re   r4   rÕ   rí   s     rU   Úmethod_attr_is_nestedÚ$TensorVariable.method_attr_is_nestedÅ  r  rW   c                 ó$   • [        SSU  S3S/ S9  g )Nz'Tensor.retain_grad() with AOTDispatcherúvar_getattr z retain_gradz8`Tensor.retain_grad()` does not work with AOTDispatcher.©Úgb_typeÚcontextÚexplanationÚhints©r   rí   s     rU   Úmethod_attr_retain_gradÚ&TensorVariable.method_attr_retain_gradÌ  s   € ÜØ=Ø" 4 &¨Ð5ØRØó		
rW   c                 ó”   • [         R                  " [        R                  R                  R
                  5      R                  X/0 5      $ r�   )r   ÚTorchInGraphFunctionVariablerL   r¼   Ú	_autogradÚ_get_data_attrÚcall_functionrí   s     rU   Úmethod_attr_dataÚTensorVariable.method_attr_dataÔ  s6   € Ü×5Ò5Ü�H‰H×Ñ×-Ñ-ó
ç
‰-˜˜F BÓ
'ð	(rW   c                 óf   • U R                   (       a  [        SSU  S3S/ S9  g [        R                  $ )NzTensor with grad_fn()r  z grad_fnz@Dynamo does not support tracing tensors with a grad_fn directly.r  )rq   r   r   r3   rí   s     rU   Úmethod_attr_grad_fnÚ"TensorVariable.method_attr_grad_fnÙ  s8   € ð ××ÜØ/Ø& t f¨HÐ5Ø^Øó	ô ×3Ñ3Ð3rW   c                 ó\   • SSK Jn  [        R                  " U5      R	                  X/0 5      $ )Nr   )Ú_tensor_version)Útensor_version_opr&  r   r  r  )rn   r{   r&  s      rU   Úmethod_attr__versionÚ#TensorVariable.method_attr__versionæ  s*   € Ý7ä×5Ò5°oÓF×TÑTØ�˜ó
ð 	
rW   c                 óˆ  • SSK Jn  SSKJn  U[        ;   a  [        S5      $  U" [        5      R                  X[        U5      /0 5      n[        XS5      (       + nU R                  (       a<  [        [        U R                  U5      R                  [        R                  5      5        [        U5      $ ! [         a    Sn Nff = f)Nr/   rË   ©ÚBuiltinVariableTF)Ú rÌ   Úbuiltinr,  Úall_tensor_attrsr4   rR   r  rP   ÚAttributeErrorrÍ   r"   r#   rÝ   r!   rÞ   )rn   r{   rÄ   rÌ   r,  ÚvarÚret_vals          rU   Úcall_obj_hasattrÚTensorVariable.call_obj_hasattrí  s¬   € õ 	&Ý,ð Ô#Ó#Ü# DÓ)Ð)ð	Ù!¤'Ó*×8Ñ8ØÔ+¨DÓ1Ð2°BóˆCô
 % SÓ:Ô:ˆGð �;�;ÜÜ˜4Ÿ;™;¨Ó-×8Ñ8¼×9MÑ9MÓNôô   Ó(Ð(øô ó 	ØŠGð	ús   £7B2 Â2CÃ Cc                 óú  ^ ^^• T R                  T5      (       aS  TT R                  5       ;   a  [        SST  ST 3ST S3ST S3/S9  O#TT R                  5       ;   a  [	        S	T S
35      eTS:X  a  [        T R                  5       5      $ [        T ST 3S 5      nUb  U" T5      OS nUbŽ  T R                  (       a}  T R                  R                  5       (       a^  TS;  a  UR                  5       (       dC  [        T R                  [        R                  5      5        [        T R                  T5      Ul        T R                  bó  [!        ["        R$                  R&                  T5      (       aÊ  [        ["        R$                  R&                  T5      n[!        US5      (       a•  [!        XUR)                  5       S   5      (       at  ["        R*                  R,                  [        XUR)                  5       S   5      R.                  ;   a2  [0        R2                  R5                  [        T R                  T5      SS9$ Uc   TS:w  a  S[6        S -  4UU U4S jjnU" 5       nUc  T R9                  TT5      nUc  [:        eU$ )NzStrict mode banned opr  Ú zGetattr invocation 'z"' in strict mode is not supported.zRemove `zj` from the list of banned ops by setting `torch._dynamo.config._autograd_backward_strict_mode_banned_ops`.r  zUnknown property z] during speculating backward, dynamo will insert contiguous call ahead and speculate it againry   Úmethod_attr_)Úgradrb   Ú	overloadsr   z9Getting an inplace view on a graph input is not supported)rÍ   Úmsgr8  rG   c                  ó*  >• SSK Jn   SSKJn  [        R                  TS 5      nUc  g [        U5      [        R                  La  g UR                  TR                  5       T5      nTR                  b  U " TU[        TR                  T5      S9$ U " TUS9$ )Nr/   rÆ   rË   )r{   r[   rÍ   ©r{   r[   )r�   rÇ   rÜ   rÌ   r/  r„   r‚   ÚtypesÚGetSetDescriptorTypeÚcreate_getattr_proxyrŸ   rÍ   r#   )rÇ   rÌ   Ústatic_attrr[   rÄ   rn   r{   s       €€€rU   Útry_generic_attr_handlingÚ=TensorVariable.var_getattr.<locals>.try_generic_attr_handlingD  sŒ   ø€ Ý2Ý1ä.×2Ñ2°4¸Ó>�ØÑ&Øô ˜Ó$¬E×,FÑ,FÒFØà'×<Ñ<¸T¿]¹]»_ÈdÓS�Ø—;‘;Ñ*Ù(Ø U´:¸d¿k¹kÈ4Ó3Pñð ñ )¨B°eÑ<Ð<rW   )Úis_strict_modeÚ_strict_mode_banned_opsr   Ú#_strict_mode_conditional_banned_opsr   r8   r£   rR   rÍ   r×   Úis_python_constantr"   rÝ   r!   Ú
TYPE_MATCHr#   rO   rL   ÚopsÚatenr9  ÚTagÚinplace_viewÚtagsr   rÜ   ÚDelayGraphBreakVariabler2   rè   rØ   )rn   r{   rÄ   ÚhandlerÚresultÚfnrA  s   ```    rU   Úvar_getattrÚTensorVariable.var_getattr  sA  ú€ Ø×Ñ˜r×"Ñ"Ø�t×3Ñ3Ó5Ó5ÜØ3Ø*¨4¨&°°$°Ð8Ø"6°t°fÐ<^Ð _à" 4 &ð )dð dðó	ð ˜×AÑAÓCÓCÜ:Ø'¨ vð  .Kð  Lóð ð �;ÓÜ+¨D×,<Ñ,<Ó,>Ó?Ð?ä˜$ ,¨t¨fÐ 5°tÓ<ˆØ 'Ñ 3‘˜”¸ˆð ÑØ——Ø—‘×-Ñ-×/Ñ/àÐ5Ó5¸&×:SÑ:S×:UÑ:Uô ˜$Ÿ/™/¬,×*AÑ*AÓBÔCÜ& t§{¡{°DÓ9ˆFŒMð �;‰;Ñ"¤w¬u¯y©y¯~©~¸t×'DÑ'DÜœŸ™Ÿ™¨Ó.ˆBä˜˜K×(Ñ(Ü˜B§¡£¨qÑ 1×2Ñ2Ü—I‘I×*Ñ*¬g°b¿,¹,».ÈÑ:KÓ.L×.QÑ.QÓQô !—~‘~×=Ñ=Ü% d§k¡k°4Ó8ØSð >ð ð ð ‰>˜d f›nð=¬ÀÑ/E÷ =ñ =ñ2 /Ó0ˆFà‰>Ø×)Ñ)¨"¨dÓ3ˆFà‰>Ü%Ð%ØˆrW   c           	      ó   • U R                   (       d  [        SSU  3S/ S9  U R                   (       d   eUR                  R                  UR                  R                  S.nS n [        U R                   R                  U5      nUc  [        S	SU  3S
/ S9  [        U R                   R                  [        R                  5      5        [        U5      n[        R                  " U5      $ ! [         a  n[        SSU  3S/ US9   S nAN„S nAff = f)Nz$Unsupported call_id() without sourcezcall_id z6call_id() not supported for sourceless TensorVariable.r  rÈ   z#Error getting associated real valuezJDynamo encountered an error while trying to get the associated real value.©r  r  r  r  Úfrom_excz'call_id() without associated real valuez>Dynamo could not find an associated real value for the tensor.)rÍ   r   rÓ   rÙ   rÚ   rÛ   rÄ   rº   r"   rÝ   r!   ÚID_MATCHÚidr4   rÕ   )rn   r{   rã   rä   rå   Úid_values         rU   Úcall_idÚTensorVariable.call_idf  s  € Ø�{�{ÜØ>Ø" 4 &Ð)ØTØò	ð �{�{Ðˆ{à—i‘i×+Ñ+°"·)±)×2HÑ2HÑIˆØ'+Ð$ð
	Ü+/°·±×0@Ñ0@À%Ó+HÐ(ð (Ñ/ÜØAØ" 4 &Ð)Ø\Øò	ô 	�d—k‘k×,Ñ,¬\×-BÑ-BÓCÔDÜÐ2Ó3ˆÜ×&Ò& xÓ0Ð0øô) ó 	ÜØ=Ø" 4 &Ð)ð1àØ÷ûð	ús   Á$ C) Ã)
DÃ3DÄDc                 ó    • U R                   S:„  $ )Nr   )r_   rí   s     rU   Úhas_unpack_var_sequenceÚ&TensorVariable.has_unpack_var_sequence‹  s   € Ø�y‰y˜1‰}ÐrW   Úidxesc           	      óV  • SSK Jn  SSKJn  U R	                  5       (       a  [        U R                  5      nO@U R                  US/ 0 5      n[        U[        5      (       d   e[        UR                  5      nUS:w  d   S5       eU R	                  5       (       a  U R                  S   nO–U R                  US[        R                  " S5      /0 5      n[        U[        5      (       d  UR                  5       (       d   e[        U[        5      (       a  UR                  UR                   5      nOUR#                  5       nUc  [%        U5      nO&[        U5      U:X  d   SU S[        U5       S	35       e[        X5      (       ae  U V	s/ s H  n	U" [&        XR)                  5       U	   S
9PM!     n
n	U
 Vs/ s H+  nUR*                  " XU R,                  U R.                  5      PM-     sn$ U V	s/ s H$  n	U" [1        U 5      XR)                  5       U	   S
9PM&     sn	$ s  sn	f s  snf s  sn	f )Nr/   ©Úwrap_fx_proxy_clsr>   r`   r   zCan't unpack scalar tensors.zCan't unpack a tensor of z rows into a tuple of z
 elements.©r|   r{   r[   )r�   ra  Útorch_functionr?   r   Úlenr`   rì   rP   r6   r…   r4   rÕ   ÚSymNodeVariablerF  Úevaluate_exprrÓ   Úas_python_constantÚrangerY   rŸ   Úfrom_tensor_varrg   rÍ   r‚   )rn   r{   r^  ra  r?   Úsize_lenÚsize_varÚlengthÚ
dyn_lengthÚiÚ	base_varsr‰   s               rU   Úunpack_var_sequenceÚ"TensorVariable.unpack_var_sequenceŽ  s  € õ 	/Ý@à�?‰?×ÑÜ˜4Ÿ9™9“~‰Hà×'Ñ'¨¨F°B¸Ó;ˆHÜ˜h¬×5Ñ5Ð5Ð5Ü˜8Ÿ>™>Ó*ˆHà˜1‹}Ð<Ð<Ó<ˆ}à�?‰?×ÑØ—Y‘Y˜q‘\‰Fà×)Ñ)¨"¨fÔ7G×7NÒ7NÈqÓ7QÐ6RÐTVÓWˆJô ˜:¤×7Ñ7Ø×0Ñ0×2Ñ2ðð3ô ˜*¤o×6Ñ6Ø#×1Ñ1°"·)±)Ó<‘à#×6Ñ6Ó8�à‰=Ü˜&“M‰Eä�u“: Ó'ð Ø+¨F¨8Ð3IÌ#ÈeË*ÈÐU_Ð`óÐ'ô
 �d×9Ñ9ñ
 ó	ò �Añ "Ü-°"¿M¹M»OÈAÑ<Nôñ ð	 ð ñ #ó	ò #�Að -×<Ò<Ø˜4Ÿ?™?¨D¯K©Köñ #ñ	ð ñ ó
â�ñ ¬¨d«¸Ç-Á-Ã/ÐRSÑBTÔUÙñ
ð 	
ùòùòùò
s   Æ	&HÆ52H!Ç.+H&Útree_map_fnr=   Úmap_fnÚrestÚtree_map_kwargsc                 ó,   • UR                  X/UQ0 5      $ r�   )r  )rn   r{   rr  rs  rt  ru  s         rU   Úcall_tree_mapÚTensorVariable.call_tree_mapÇ  s   € ð ×#Ñ# B¨°¨°rÓ:Ð:rW   c                 ó   • U R                   S L$ r�   ©rp   rm   s    rU   r   ÚTensorVariable.valid_sizeÑ  s   € Ø�z‰z Ð%Ð%rW   c                 óB   • U R                   c   S5       eU R                   $ )Nz%accessing None size in TensorVariablerz  rm   s    rU   r`   ÚTensorVariable.sizeÔ  s"   € à�z‰zÑ%ÐNÐ'NÓNÐ%Ø�z‰zÐrW   c                 óJ   • [         R                  R                  R                  $ r�   )rL   rM   r   Ú)_autograd_backward_strict_mode_banned_opsrm   s    rU   rD  Ú&TensorVariable._strict_mode_banned_opsÙ  s   € Ü�}‰}×#Ñ#×MÑMÐMrW   c                 óJ   • [         R                  R                  R                  $ r�   )rL   rM   r   Ú5_autograd_backward_strict_mode_conditional_banned_opsrm   s    rU   rE  Ú2TensorVariable._strict_mode_conditional_banned_opsÜ  s   € ä�M‰M× Ñ ×VÑVð	
rW   Úargszdict[str, VariableTracker]c                 ó¢  • SSK JnJn  SSKJnJn  U R                  U5      (       a/  X R                  5       ;   a  [        SSU  SU SU SU 3SU S3/ S	9  [        R                  US 5      n	U	S Ln
U" U[        U /[        U5      -   5      U5      (       a�  U
(       a‰  U R                  (       a.  U" U[        [        U R                  S
5      U5      5      " U	5      nO*UR                  U[!        ["        R$                  U5      5      nU" X[        U /[        U5      -   5      U5      $  US:X  a.  ['        US   [(        5      (       a  [*        R,                  " S5      $ US:X  a*  [        SSU SU< SU< S3SS/[.        R0                  QS	9  O5US:X  a/  SU;   a)  [        SSU SU< SU< S3SS/[.        R0                  QS	9   [!        U SU 35      n UR3                  5        VVs0 s H  u  pÞXÞR5                  5       _M     nnnU" U/UQ70 UD6nU(       a  U$  SSK Jn  UR<                  R>                  " S U/[A        U /UQU5      Q76 nU RC                  5       nU" UU5      nU RE                  UU[G        S! U 5       5      5        U$ s  snnf ! [6         a'  n[        SSU  SU SU SU 3SU S3/ US9   S nAN¡S nAff = f! [8         a     Nµf = f)"Nr/   )ÚSourcelessBuilderÚVariableBuilder)Úcan_dispatch_torch_functionÚdispatch_torch_functionz(Illegal method invocation in strict modeúcall_method r6  z/Dynamo currently does not support this method (z) invocation in strict mode.r  ry   Ú__eq__r   FÚrandom_zTensor.random_ opzTensor.ú(args=ú	, kwargs=Ú)z This is currently not supported.z'Use the out-of-place version of this opÚuniform_Úfromz-Tensor.uniform_ op called with `from` keywordzAvoid using the `from` keyword.Úmethod_zUnhandled args for methodz6Dynamo encountered an error while calling the method `ú`.rT  rÆ   rì   c              3   ó@   #   • U  H  oR                  5       v •  M     g 7fr�   )r§   )r¯   Úargs     rU   r±   Ú-TensorVariable.call_method.<locals>.<genexpr>T  s   é € Ð#Dºt¸§M¡M§O Oºtùs   ‚)$r�   r†  r‡  rc  rˆ  r‰  rC  rD  r   r/  r„   r»   ÚlistrÍ   r#   rÕ   rR   rL   rQ   rP   r8   r   r4   r   ÚSUPPORTABLEr…   ÚrealizeÚ	TypeErrorr0  rÇ   rÓ   Úcreate_proxyr+   r�   r•   Úany)rn   r{   rÄ   r„  rr   r†  r‡  rˆ  r‰  r@  Úis_base_tensor_methodÚfunc_varÚhandler_methodrˆ   r‰   Úrealized_kwargsrO  ÚerÇ   r[   r‘   s                        rU   rì   ÚTensorVariable.call_methodá  s%  € ÷ 	@ßXà×Ñ˜r×"Ñ" t×/KÑ/KÓ/MÓ'MÜØBØ& t f¨A¨d¨V°1°T°F¸!¸F¸8ÐDðØ�6Ð5ð7àòô '×*Ñ*¨4°Ó6ˆØ +°4Ð 7Ðñ (¨¬E°4°&¼4À»:Ñ2EÓ,FÈ×OÑOÞ%à�{�{Ù*Øœ
¤:¨d¯k©k¸;Ó#GÈÓNôàó‘ð -×3Ñ3°B¼ÄÇÁÈdÓ8SÓT�á*Øœe T F¬T°$«ZÑ$7Ó8¸&óð ð	ð �8Ó¤
¨4°©7Ô4L× MÑ MÜ×-Ò-¨eÓ4Ð4ð �9ÓÜØ+Ø! $  w¨©¨z°&±¸!Ð<Ø>à=ðä&×2Ñ2ðó	ð �ZÓ F¨fÓ$4ÜØGØ! $  w¨©¨z°&±¸!Ð<Ø>à5ðä&×2Ñ2ðò	ð	Ü$ T¨W°T°FÐ+;Ó<ˆNðà>D¿l¹l¼nÔ"Mºn±d°a 1§i¡i£k¢>¹n�Ñ"MÙ'¨ÐE¨TÒE°_ÑE�ÞØ!�Mð õ 	+à—	‘	×&Ò&ØØð
ô  ˜} t˜}¨fÓ5ò
ˆð ×/Ñ/Ó1ˆÙ˜r 5Ó)ˆØ×&Ñ&Ø�¤Ñ#D¹tÓ#DÓ Dô	
ð ˆùóI #Nøô ó ÜØ7Ø*¨4¨&°°$°°q¸¸¸aÀ¸xÐHð!#Ø#' &¨ð!,àØ÷ûðûô ó 	Ùð	ús<   Ç K ÇJ Ç#JÇ?J ÊJ Ê
J>ÊJ9Ê9J>Ë
KËKc                 ó.   • U R                   " S/UQ70 UD6$ rÿ   ©Ú_method_size_stride©rn   r{   r„  rr   s       rU   Úmethod_sizeÚTensorVariable.method_sizeY  s   € ð ×'Ò'¨Ð@°Ò@¸Ñ@Ð@rW   c                 ó.   • U R                   " S/UQ70 UD6$ )Nra   r¤  r¦  s       rU   Úmethod_strideÚTensorVariable.method_stride^  s   € ð ×'Ò'¨ÐB°4ÒB¸6ÑBÐBrW   rë   c                 ó¨  • [        U5      nS[        [           S[        S[        4S jnUS:X  a  UO[        R
                  nUS:w  a  [        X5      nO*US:X  a"  U R                  5       (       a  U R                  nOS nUb#  Uc  U" U5      $ [        R
                  " XR   5      $ U R                  R                  R                  R                  S5      =nb}  Uc:  [        Xa5      " 5       n[        U5      (       d  U" [        S U 5       5      5      $  g [        Xa5      " U5      n[        U5      (       d  [        R
                  " [        U5      5      $ g )Nr¸   ÚoptionsrG   c           
      óp   • [        U  Vs/ s H  n[        R                  " U40 UD6PM     sn40 UD6$ s  snf r�   )r6   r4   rÕ   )r¸   r­  Úys      rU   Úmake_const_size_variableÚDTensorVariable._method_size_stride.<locals>.make_const_size_variableh  s=   € ÜÙ@AÓBÂ¸1Ô!×(Ò(¨Ñ6¨gÔ6ÁÑBñØFMñð ùÚBs   Š!3r`   r€   c              3   ó8   #   • U  H  n[        U5      v •  M     g 7fr�   ©r­   ©r¯   Úrs     rU   r±   Ú5TensorVariable._method_size_stride.<locals>.<genexpr>ˆ  s   é € Ð,DºV¸¬S°¯V¨VºVùó   ‚)r(   r   r   r6   r4   rÕ   rR   r   r`   r[   rk   rƒ   r„   r   r»   r­   )rn   rÄ   rë   r°  ÚRetVariablerµ  ÚfakeÚfake_rs           rU   r¥  Ú"TensorVariable._method_size_stridec  s:  € ô ˜3Óˆð	¬´©ð 	Ä#ð 	Ì,ô 	ð )-°«Ñ$Ô<L×<SÑ<Sð 	ð �6‹>Ü˜Ó#‰AØ�V‹^ §¡× 1Ñ 1Ø—	‘	‰AàˆAà‰=Ø‰{Ù" 1“~Ð%ä'×.Ò.¨q©vÓ6Ð6ð —J‘J—O‘O×(Ñ(×,Ñ,¨_Ó=Ð=ˆDÑJØ‰{Ü  Ô,Ó.�Ü'¨×/Ñ/ñ '¤uÑ,D¹VÓ,DÓ'DÓEÐEð 0ð ô ! Ô,¨SÓ1�Ü'¨×/Ñ/Ü+×2Ò2´3°v³;Ó?Ð?ØrW   c                 ób  • U R                  5       (       a)  [        R                  " [        U R                  5      5      $ U R
                  R                  R                  R                  S5      =nb?  UR                  5       n[        U5      (       d  [        R                  " [        U5      5      $ g r˜   )r   r4   rÕ   r*   r`   r[   rk   rƒ   r„   Únumelr   r­   )rn   r{   r¹  rº  s       rU   Úmethod_numelÚTensorVariable.method_numel�  s}   € Ø�?‰?×ÑÜ#×*Ò*¬7°4·9±9Ó+=Ó>Ð>ð —J‘J—O‘O×(Ñ(×,Ñ,¨_Ó=Ð=ˆDÑJØ—Z‘Z“\ˆFÜ# F×+Ñ+Ü'×.Ò.¬s°6«{Ó;Ð;ØrW   c                 ó^   • U R                   b   [        R                  " U R                   5      $ g r�   )r_   r4   rÕ   rí   s     rU   Ú
method_dimÚTensorVariable.method_dimœ  s$   € Ø�9‰9Ñ Ü#×*Ò*¨4¯9©9Ó5Ð5ØrW   c                 ór   • U R                   b*  [        R                  " U R                   R                  5      $ g r�   )r\   r4   rÕ   Úis_floating_pointrí   s     rU   Úmethod_is_floating_pointÚ'TensorVariable.method_is_floating_point£  s,   € ð �:‰:Ñ!Ü#×*Ò*¨4¯:©:×+GÑ+GÓHÐHØrW   c                 ó2  • [         R                  (       a,  [        SSS/ [        R                  Q[        R
                  QS9  U R                  R                  R                  R                  S5      =nb$  [        R                  " UR                  5       5      $ g )Nz0Encountered tensor.is_inference() during tracingr-  z&tensor.is_inference() is not supportedr  r€   )r   Ú"fake_tensor_disable_inference_moder   r   ÚFUNDAMENTALÚINFERENCE_MODEr[   rk   rƒ   r„   r4   rÕ   Úis_inference)rn   r{   r¹  s      rU   Úmethod_is_inferenceÚ"TensorVariable.method_is_inferenceª  s‚   € ô ×4×4ÜØJØØDðÜ&×2Ñ2ðä&×5Ñ5ðò	ð —J‘J—O‘O×(Ñ(×,Ñ,¨_Ó=Ð=ˆDÑJÜ#×*Ò*¨4×+<Ñ+<Ó+>Ó?Ð?ØrW   c                 ór   • U R                   b*  [        R                  " U R                   R                  5      $ g r�   )r\   r4   rÕ   Ú
is_complexrí   s     rU   Úmethod_is_complexÚ TensorVariable.method_is_complex»  s*   € Ø�:‰:Ñ!Ü#×*Ò*¨4¯:©:×+@Ñ+@ÓAÐAØrW   r·   c                 óR  • Ub  UR                  5       O[        R                  nU R                  b"  [        R
                  " X0R                  ;   5      $ U R                  R                  R                  R                  S5      =nb#  [        R
                  " UR                  US95      $ g )Nr€   r¶   )
rg  rL   Úcontiguous_formatrd   r4   rÕ   r[   rk   rƒ   r„   )rn   r{   r·   Úmemory_format_constr¹  s        rU   Úmethod_is_contiguousÚ#TensorVariable.method_is_contiguousÀ  s�   € ð
 Ñ(ð ×,Ñ,Ô.ä×(Ñ(ð 	ð
 ×ÑÑ)ä#×*Ò*Ð+>×BTÑBTÑ+TÓUÐUØ—j‘j—o‘o×*Ñ*×.Ñ.¨Ó?Ð?ˆdÑLÜ#×*Ò*Ø×"Ñ"Ð1DÐ"ÐEóð ð rW   FÚnon_blockingc           
      óî  ^ • UcÕ  T R                   bÈ  [        T R                  [        R                  5      (       aŸ  [	        U 4S j[
        R                  " 5        5       5      nT R                  R                  S:X  a#  [        R                  " SUR                   35      $ [        R                  " ST R                  R                   SUR                   35      $ Ub™  [        [        UR                  5       5      5      S:X  as  UR                  5       n[        R                  " [        U5      5      nSSKJn  U(       a  SU0UEnU" UUR                  R                   " S	S
/[#        T U/U5      Q76 5      $ g )Nc              3   óP   >#   • U  H  u  pTR                   U;   d  M  Uv •  M     g 7fr�   )r\   )r¯   rˆ   r‰   rn   s      €rU   r±   Ú-TensorVariable.method_type.<locals>.<genexpr>Ý  s#   øé € ð Ú9‘d�a¸T¿Z¹ZÈ1¹_—‘Ò9ùs   ƒ&�	&Úcpuztorch.Ú.ztorch.tensortyper/   rÆ   r×  rì   r‚   )r\   rP   r]   rL   Únextr.   r…   r‚   r4   rÕ   rS   r$   rg  r�   rÇ   rÓ   r›  r+   )	rn   r{   r\   r×  rr   Ú
tensortypeÚtensor_typeÚtensor_type_constrÇ   s	   `        rU   Úmethod_typeÚTensorVariable.method_typeÑ  sT  ø€ ð ‰MØ—
‘
Ñ&Ü˜4Ÿ;™;¬¯©×5Ñ5äô Ü1×7Ò7Ô9óó ˆJð �{‰{×Ñ 5Ó(Ü'×.Ò.°¸
×8KÑ8KÐ7LÐ/MÓNÐNä'×.Ò.Ø˜TŸ[™[×-Ñ-Ð.¨a°
×0CÑ0CÐ/DÐEóð ð ÑÜ”D˜×1Ñ1Ó3Ó4Ó5Ð9KÓKð
  ×2Ñ2Ó4ˆKÜ 0× 7Ò 7¼¸KÓ8HÓ IÐå.æØ(¨,ÐA¸&ÐA�á ØØ—	‘	×&Ò&Ø!Øðô '¨Ð.?Ð'@À&ÓIòóð ð rW   Úclsr?   c                 ób  • [        U[        5      (       aw  UR                  (       af  SSKJn  UR                  5       nUR                  " XXBR                  5      nUR                  R                  R                  [        5       U[        S9  U$ [        SU  SU S3SS/[        R                  QS	9  g )
Nr/   r>   ©Úmutation_type_clszHArgument of `as_subclass` must be a non-dispatcher-style tensor subclassz.as_subclass(r�  úCurrently not supportedz:Avoid this call or move it outside `torch.compile` regioner  )rP   ÚTensorSubclassVariablerÍ   rc  r?   rg  ri  rÓ   Úside_effectsÚ
_track_objÚobjectr0   r   r   r˜  )rn   r{   rã  r?   Úpy_clsr1  s         rU   Úmethod_as_subclassÚ!TensorVariable.method_as_subclassÿ  s¦   € ô �cÔ1×2Ñ2°s·z·zÝDà×+Ñ+Ó-ˆFØ.×>Ò>Ø˜&§*¡*óˆCð �I‰I×"Ñ"×-Ñ-Ü“˜#Ô1Eð .ñ ð ˆJÜØ^Ø�f˜M¨#¨¨aÐ0Ø1àLðä"×.Ñ.ðó		
rW   c                 óæ   • [        U R                  [        R                  5      (       aH  U R                  R                  S:w  a  U R                  R                  OSn[
        R                  " U5      $ g )NrÛ  éÿÿÿÿ)rP   r]   rL   r‚   Úindexr4   rÕ   )rn   r{   rñ  s      rU   Úmethod_get_deviceÚ TensorVariable.method_get_device  sM   € Ü�d—k‘k¤5§<¡<×0Ñ0Ø)-¯©×)9Ñ)9¸UÓ)B�D—K‘K×%Ò%ÈˆEÜ#×*Ò*¨5Ó1Ð1ØrW   c                 óV   • [         R                  " U R                  R                  5      $ r�   )r4   rÕ   r\   Úitemsizerí   s     rU   Úmethod_element_sizeÚ"TensorVariable.method_element_size  s   € Ü×&Ò& t§z¡z×':Ñ':Ó;Ð;rW   )Úforcerø  ÚNumpyNdarrayVariablec                ó,  • [         R                  (       d  [        SSU  S3SS/S9  [        (       d  [        SSU  S3SS	/S9  U R                  [
        R                  :w  a  [        S
U R                   S35      eU(       aW  UR                  5       (       aB  U R                  US/ 0 5      nUR                  R                  SSUR                  5       40 5      nO)UR                  R                  " SS/[        X /0 5      Q76 n[        R                  X5      $ )Nz%Tensor.numpy() with trace_numpy=FalserŠ  z numpyzW`Tensor.numpy()` was called, but the `trace_numpy` configuration was manually disabled.zUSet `torch._dynamo.config.trace_numpy = True` to allow Dynamo to trace through NumPy.r  z&Tensor.numpy() without NumPy installedz_`Tensor.numpy()` was called, but the NumPy library is not available in the current environment.z5Ensure NumPy is installed in your Python environment.zcan't convert z4 layout tensor to numpy. Use Tensor.to_dense() firstÚdetachrì   rÛ  Úview_as)r   Útrace_numpyr   Únpr^   rL   Ústridedrš  rg  rì   rÓ   r›  rŸ   r+   rù  rÕ   )rn   r{   rø  Útr[   s        rU   Úmethod_numpyÚTensorVariable.method_numpy!  s  € ô ×!×!ÜØ?Ø& t f¨FÐ3ð7ð5ðò	÷ ŠrÜØ@Ø& t f¨FÐ3ð?ð Lðòð �;‰;œ%Ÿ-™-Ó'ÜØ  §¡ Ð-aÐbóð ö �U×-Ñ-×/Ñ/à× Ñ   X¨r°2Ó6ˆAØ—I‘I×*Ñ*¨=¸%À!Ç*Á*Ã,ÀÐRTÓU‰Eð —I‘I×*Ò*Ø˜yðÜ+<¸d¸\È2Ó+NòˆEô $×*Ñ*¨2Ó5Ð5rW   c                 óR  ^ ^^^• SSK Jm  S[        R                  S[        R                  R
                  S[        [        [           -  4U UUU4S jjmT R                  5       R                  R                  S   nT" UT R                  5       5      n[        R                  " TU5      $ )Nr/   rÆ   ÚtensorÚ	sub_proxyrG   c           	      ó4  >• S[         S[        R                  R                  S[        4UU	4S jjnU R
                  [        R                  [        R                  [        R                  [        R                  4;  a  [        SST S3SS	/S
9  U R                  5       S:X  a  U" X5      $ U R                  5       S:X  a)  [        U 5       VVs/ s H  u  p4U" XAU   5      PM     snn$ [        U 5       VVs/ s H  u  p5T" XQU   S9PM     snn$ s  snnf s  snnf )Nrn  r  rG   c                 ó2   >• T" TUR                  5       5      $ r�   )Úitem)rn  r  r{   rÇ   s     €€rU   ÚwrapÚ:TensorVariable.method_tolist.<locals>.tolist.<locals>.wrapO  s   ø€ Ù$ØØ—N‘NÓ$óð rW   z'Tensor.tolist() with non-integer tensorrŠ  z to_listzLDynamo currently does not support tracing `tolist()` on non-integer tensors.z[Ensure the input tensor to `tolist()` is an integer type (e.g., int8, int16, int32, int64).r  r   r/   )r  )r   rL   ÚfxÚProxyr2   r\   Úint8Úint16Úint32Úint64r   rë   Ú	enumerate)
r  r  r	  rn  ÚvalÚ
sub_tensorrn   Útolistr{   rÇ   s
         €€€€rU   r  Ú,TensorVariable.method_tolist.<locals>.tolistN  s  ø€ ðœð ¬¯©¯©ð ¼?÷ ð ð �|‰|Ü—
‘
Ü—‘Ü—‘Ü—‘ð	$ó ô ØEØ*¨4¨&°Ð9ð!9ðBðò	ð �z‰z‹|˜qÓ Ù˜FÓ.Ð.à�z‰z‹|˜qÓ Ü>GÈÔ>OÔPÒ>O±F°A™˜S¨A¡,Ö/Ñ>OÒPÐPô &/¨vÔ%6ôâ%6‘M�Añ �z°q©\Ô:Ù%6òð ùó Qùós   ÃDÃ5Dr€   )r�   rÇ   rL   rQ   r  r  r   r—  rŸ   rk   rƒ   r2   rÖ   )rn   r{   r  Úoutr  rÇ   s   ``  @@rU   Úmethod_tolistÚTensorVariable.method_tolistK  s~   û€ Ý*ð!	œ5Ÿ<™<ð !	´E·H±H·N±Nð !	ÄsÌTÔRUÉYÁ÷ !	ò !	ðF —‘“×%Ñ%×*Ñ*¨?Ñ;ˆÙ�V˜TŸ]™]›_Ó-ˆÜ×$Ò$ R¨Ó-Ð-rW   Ú	vars_iterÚerror_on_non_leafc                 óô  • SSK Jn  / n[        5       nU Hß  n[        U[        5      (       d  M  UR
                  (       d  M-  UR                  (       a  U(       a  [        SSU 3SS/S9  MW  MY  UR                   (       a  [        UR                   U5      (       a  U(       a  [        SS	U 3S
S/S9  Mž  M   UR                  R                  nXu;  d  M½  UR                  U5        UR                  U5        Má     U$ )a¡  
Collect unique leaf tensors from vars_iter for backward.

Only collects leaf tensors (no grad_fn). Non-leaf tensors are skipped
(or error if error_on_non_leaf=True) because when auto-detecting inputs,
we must not stop gradients at non-leafs - they are intermediates, and the
real leaf tensors (parameters) are further up the autograd graph.

Deduplicates by proxy.node.
Returns list of unique leaf tensor variables.
r   )ÚSyntheticLocalSourcezbackward() with non-leaf tensorz-backward(inputs=[...]) with non-leaf tensor: zBbackward(inputs=[...]) with non-leaf tensors is not yet supported.zIOnly pass leaf tensors (parameters, graph inputs) to backward(inputs=...)r  z'backward() with in-graph created tensorz5backward(inputs=[...]) with in-graph created tensor: z^backward(inputs=[...]) with tensors created inside the compiled function is not yet supported.zSOnly pass tensors that are inputs to the compiled function or captured from outside)rÍ   r  ÚsetrP   rY   rb   rq   r   r[   rk   ÚaddÚappend)rn   r  r  r  rO  Ú
seen_nodesr1  rk   s           rU   Ú_collect_backward_inputsÚ'TensorVariable._collect_backward_inputsu  sè   € õ 	2àˆÜ),«ˆ
ÛˆCÜ˜#œ~×.Ó.°3×3D×3DÑ3Dð —?—?Þ(Ü%Ø$EØ&SÐTWÐSXÐ$YØ(là kð#ô	ñ )ð ŸŸ¤z°#·*±*Ð>R×'SÑ'SÞ(Ü%Ø$MØ&[Ð\_Ð[`Ð$að)Fð !vð#ôñ )ð Ÿ9™9Ÿ>™>�DØÕ-Ø"Ÿ™ tÔ,ØŸ™ cÖ*ñE ðH ˆrW   ÚgradientÚretain_graphÚcreate_graphÚinputsc                 ó:  • [         R                  (       d  [        SSU  SU SU SU SU 3
SS/S9  U R                  (       d  U R                  (       d  [        S5      eUS	L nU(       aa  [        UR                  R                  UR                  R                  R                  5       5      nU R                  U5      nU(       d  [        $ OR[        U[        R                  5      (       a  UR                   OU/n	U R                  U	S
S9nU(       d  [        SSSS/S9  S["        R$                  " X5      0n
Ub  X:S'   Ub  XJS'   ["        R$                  " X5      nX/nUb  UR'                  U5        ["        R$                  " U[(        R*                  R,                  5      nUR/                  XU
5      nSSKJn  UR5                  USS
S9nUR7                  U5        ["        R$                  " U[(        R8                  R:                  R<                  R>                  5      nUc   e[A        U5       HE  u  nnURC                  US["        R$                  " UU5      /0 5      nUR/                  UUU/0 5        MG     URE                  U5        ["        R$                  " US	5      $ )aD  
Trace tensor.backward() by rewriting as autograd.grad() + accumulate_grad.

Implementation:
1. Collect leaf tensors to compute gradients for
2. Call autograd.grad(loss, inputs) to compute gradients
3. For each leaf tensor, call accumulate_grad to update .grad

Non-leaf tensor handling:
- Auto-detect (inputs=None): Non-leaf tensors are silently skipped.
  This matches eager where only leaves get .grad.
- User-provided (inputs=[...]): Errors if any non-leaf tensor is found.
  While eager backward(inputs=[non_leaf]) works, Dynamo cannot trace it
  because the accumulate_grad polyfill accesses .grad, and Dynamo creates
  a generic GetAttrVariable for .grad on non-leaf tensors (instead of a
  TensorVariable), which cannot be used in tensor operations.

TODO: Support non-leaf tensors by fixing .grad access on non-leaf in Dynamo.
z"Unsupported Tensor.backward() callrŠ  z
 backward r6  z]Dynamo currently does not support tracing `Tensor.backward()` when trace_autograd_ops is off.z)Set torch._dynamo.trace_autograd_ops=Truer  z8tensor does not require grad and does not have a grad_fnNT)r  zbackward() with empty inputsz8backward(inputs=[...]) resulted in no valid leaf tensorsz?backward(inputs=[...]) requires at least one valid leaf tensor.zOEnsure at least one tensor in inputs is a leaf (requires_grad=True, no grad_fn)Úallow_unusedr$  r%  r/   )ÚGradModeVariableF)ÚinitializedÚ__getitem__)#r   Útrace_autograd_opsr   rb   rq   r   r   rÓ   Úleaf_var_creation_orderÚinput_source_to_varÚvaluesr!  r3   rP   r   ÚBaseListVariabler…   r2   rÖ   r  rL   Úautogradr8  r  Úctx_managerr)  rÕ   ÚenterrH  ÚinductorÚaccumulate_grad_Údefaultr  rì   Úexit)rn   r{   r#  r$  r%  r&  Úauto_detectÚall_varsÚ
input_varsÚprovided_varsÚgrad_kwargsÚ
inputs_varÚ	grad_argsÚautograd_grad_fnÚ	grads_varr)  Úgrad_mode_varÚaccumulate_grad_fnÚidxÚ	input_varÚgrad_is                        rU   Úmethod_backwardÚTensorVariable.method_backward­  s˜  € ô6 ×(×(ÜØ<Ø& t f¨J°x°jÀÀ,ÀÈqÐQ]ÐP^Ð^_Ð`fÐ_gÐhØ{ØBÐCò	ð ×!×!¨$×*:×*:Ü#ØJóð ð  �nˆÞô Ø—	‘	×1Ñ1Ø—	‘	×-Ñ-×4Ñ4Ó6óˆHð ×6Ñ6°xÓ@ˆJÞô .Ð-ð	 ô ˜f¤i×&@Ñ&@×AÑAð —’à�Xð ð
 ×6Ñ6Ø°ð 7ð ˆJö ô Ø:ØVØ aàiðò	ð &¤×'<Ò'<¸RÓ'MÐNˆØÑ#Ø*6˜Ñ'ØÑ#Ø*6˜Ñ'ä$×*Ò*¨2Ó:ˆ
ØÐ&ˆ	ØÑØ×Ñ˜XÔ&ä*×0Ò0°´U·^±^×5HÑ5HÓIÐØ$×2Ñ2°2À+ÓNˆ	õ 	2à(×/Ñ/°°EÀtÐ/ÐLˆØ×Ñ˜BÔä,×2Ò2Ø”—	‘	×"Ñ"×3Ñ3×;Ñ;ó
Ðð Ñ%Ð%Ð%Ü'¨
Ö3‰NˆC�Ø×*Ñ*Ø�M¤O×$9Ò$9¸"¸cÓ$BÐ#CÀRóˆFð ×,Ñ,¨R°)¸VÐ1DÀbÖIñ	 4ð 	×Ñ˜2Ôä×$Ò$ R¨Ó.Ð.rW   ÚDataPtrVariablec                 ó   • [        U 5      $ r�   )rH  r¦  s       rU   Úmethod_data_ptrÚTensorVariable.method_data_ptr"  s   € ô ˜tÓ$Ð$rW   c           	      óœ   • UR                   (       d;  [        R                  (       d&  U R                  5         [	        SSU  SU SU 3SS/S9  g )Nz@Unsupported Tensor.item() call with capture_scalar_outputs=FalserŠ  z item r6  zYDynamo does not support tracing `Tensor.item()` with config.capture_scalar_outputs=False.zœSet `torch._dynamo.config.capture_scalar_outputs = True` or `export TORCHDYNAMO_CAPTURE_SCALAR_OUTPUTS=1` to include these operations in the captured graph.r  )Ú	one_graphr   Úcapture_scalar_outputsÚ_warn_capture_scalar_outputsr   r¦  s       rU   Úmethod_itemÚTensorVariable.method_item*  sU   € ð �|�|¤F×$A×$AØ×-Ñ-Ô/ÜØZØ& t f¨F°4°&¸¸&¸ÐBð<ðIðò
ð rW   c           	      ó@  • SSK Jn  [        US   [        5      (       a4  [        R
                  [        R                  R                  S5      US   /p%O[        R                  nUR                  R                  " SU/[        U /[        U5      -   U5      Q76 nU" X5      $ )Nr/   rÆ   r   r  )r�   rÇ   rP   re  rL   Úselectr   r4   rÕ   ÚoperatorÚgetitemrÓ   r›  r+   r—  )rn   r{   r„  rr   rÇ   rP  r[   s          rU   Úmethod___getitem__Ú!TensorVariable.method___getitem__@  s–   € õ 	+ä�d˜1‘gœ×/Ñ/ô
 —‘ä×.Ñ.×5Ñ5°aÓ8Ø˜‘Gðñ ô ×!Ñ!ˆBà—	‘	×&Ò&ØØð
ô  ˜v¬¨T«
Ñ2°FÓ;ò
ˆñ ˜RÓ'Ð'rW   c                  óò   • [         R                  R                  R                  5       n SR	                  [
        R                  " U 5      5      n[        R                  [        R                  " S5      U5        g )Nr-  a�                      Graph break from `Tensor.item()`, consider setting:
                        torch._dynamo.config.capture_scalar_outputs = True
                    or:
                        env TORCHDYNAMO_CAPTURE_SCALAR_OUTPUTS=1
                    to include these operations in the captured graph.

                    Graph break: from user code at:
                    %s
                )rL   Ú_guardsÚTracingContextÚextract_stackÚjoinÚ	tracebackÚformat_listÚlogÚwarningÚtextwrapÚdedent)Ú
user_stackÚuser_stack_formatteds     rU   rO  Ú+TensorVariable._warn_capture_scalar_outputs^  sX   € ô —]‘]×1Ñ1×?Ñ?ÓAˆ
Ø!Ÿw™w¤y×'<Ò'<¸ZÓ'HÓIÐÜ�‰Ü�OŠOð	óð !õ	
rW   c                 óT   • U R                  US[        R                  " S5      /0 5      $ )Nr`   r   )rì   r4   rÕ   rí   s     rU   Úmethod___len__ÚTensorVariable.method___len__s  s(   € Ø×Ñ  FÔ-=×-DÒ-DÀQÓ-GÐ,HÈ"ÓMÐMrW   c                 óD   • [        U R                  U5      [        5       S9$ )N©Úmutation_type)r5   rp  r1   rí   s     rU   Úmethod___iter__ÚTensorVariable.method___iter__v  s#   € Ü#Ø×$Ñ$ RÓ(Ô8HÓ8Jñ
ð 	
rW   rT   Útensor1Útensor2c                ó¦   • UbN  [         R                  (       a9  SSKJn  UR	                  [
        R                  " XR                  5      XX4/0 5      $ g )Nr   )Ú	polyfills)r   Úenable_dynamo_decompositionsr-  rq  Úinline_user_function_returnr2   rÖ   Úaddcmul_inplace)rn   r{   rn  ro  rF   rq  s         rU   Úmethod_addcmul_ÚTensorVariable.method_addcmul_{  sL   € ð Ñ¤×!D×!DÝ$à×1Ñ1Ü×%Ò% b×*CÑ*CÓDØ Ð/Øóð ð
 rW   Úkeyc                 ó(  • UR                   R                  " S[        R                  /[	        XU/0 5      Q76 nU R                  5       n[        R                  R                  R                  5          UR                  (       a?  UR                  R                  (       a$  UR                  R                  R                  5       O	[        5          [        UR                  USS9  S S S 5        S S S 5        U R!                  XUR#                  5       5        [$        R&                  (       d  [$        R(                  (       a0  UR                   R*                  R-                  UR                  S5        [.        $ ! , (       d  f       N–= f! , (       d  f       NŸ= f)Nr  F)Úallow_non_graph_faker   )rÓ   r›  rT  Úsetitemr+   r�   rL   rM   rN   Ú+_disable_saved_tensors_hooks_during_tracingrÔ   Ú	shape_envÚignore_fresh_unbacked_symbolsr   r&   rk   r•   r§   r   Úuse_graph_deduplicationÚtrack_nodes_for_deduplicationÚregion_trackerÚadd_node_mutationr3   )rn   r{   rw  rF   r[   r‘   s         rU   Úmethod___setitem__Ú!TensorVariable.method___setitem__�  s  € ð —	‘	×&Ò&ØÜ×Ñð
ô  ¨5Ð1°2Ó6ò
ˆð ×/Ñ/Ó1ˆô �M‰M×Ñ×KÑKÕMà�|�| §¡× 6× 6ð �L‰L×"Ñ"×@Ñ@ÔBä“ñô ˜5Ÿ:™: rÀÒF÷	÷ Nð 	×&Ñ& r¸5¿?¹?Ó;LÔMä×)×)¬V×-Q×-QØ�I‰I×$Ñ$×6Ñ6°u·z±zÀ1ÔEä%Ð%÷õ ú÷ NÕMús%   Á1AFÃE2Ã"FÅ2
F 	Å<FÆ
Fc           	      ó.   • [        SSU  SU SU 3S/ S9  g )Nz!Unsupported Tensor.resize_() callrŠ  z	 resize_ r6  z=Dynamo currently does not support tracing `Tensor.resize_()`.r  r  r¦  s       rU   Úmethod_resize_ÚTensorVariable.method_resize_®  s+   € ô 	Ø7Ø" 4 &¨	°$°°q¸¸ÐAØWØó		
rW   c           	      ó.   • [        SSU  SU SU 3S/ S9  g )Nz$Unsupported Tensor.resize_as_() callrŠ  z resize_as_ r6  z@Dynamo currently does not support tracing `Tensor.resize_as_()`.r  r  r¦  s       rU   Úmethod_resize_as_Ú TensorVariable.method_resize_as_»  s+   € ô 	Ø:Ø" 4 &¨°T°F¸!¸F¸8ÐDØZØó		
rW   c           	      ó.   • [        SSU  SU SU 3S/ S9  g )Nz(Unsupported Tensor.sparse_resize_() callrŠ  z sparse_resize_ r6  zDDynamo currently does not support tracing `Tensor.sparse_resize_()`.r  r  r¦  s       rU   Úmethod_sparse_resize_Ú$TensorVariable.method_sparse_resize_È  s,   € ô 	Ø>Ø" 4 &Ð(8¸¸¸aÀ¸xÐHØ^Øó		
rW   c           	      ó.   • [        SSU  SU SU 3S/ S9  g )Nz2Unsupported Tensor.sparse_resize_and_clear_() callrŠ  z sparse_resize_and_clear_ r6  zNDynamo currently does not support tracing `Tensor.sparse_resize_and_clear_()`.r  r  r¦  s       rU   Úmethod_sparse_resize_and_clear_Ú.TensorVariable.method_sparse_resize_and_clear_Õ  s,   € ô 	ØHØ" 4 &Ð(BÀ4À&ÈÈ&ÈÐRØhØó		
rW   c           	      ól   • [        U5      S:”  a%  [        SSU  SU SU 3S/ [        R                  QS9  g )Nr/   zUnsupported Tensor.set_() callrŠ  z set_ r6  zhDynamo currently does not support tracing `Tensor.set_()` overloads that include more than one argument.r  )rd  r   r   r˜  r¦  s       rU   Úmethod_set_ÚTensorVariable.method_set_â  sL   € ô ˆt‹9�q‹=ô Ø8Ø& t f¨F°4°&¸¸&¸ÐBðAà6Ô)×5Ñ5Ð6òð rW   )ÚalphaÚotherr“  c                óÊ   • Ub`  [         R                  (       aK  [        R                  " [        R
                  5      R                  XU/0 5      nU R                  USU/0 5      $ g ©NÚadd_)r   rr  r   r  rL   Úmulr  rì   )rn   r{   r”  r“  rO  s        rU   Úmethod_add_ÚTensorVariable.method_add_ø  sX   € ð Ñ¤×!D×!DÜ×;Ò;¼E¿I¹IÓF×TÑTØ˜E�N BóˆFð ×#Ñ# B¨°°¸"Ó=Ð=ØrW   c                ó6  • Ub–  [         R                  (       a�  [        R                  " [        R
                  5      R                  XU/0 5      n[        R                  " [        R                  5      R                  XU/0 5      nU R                  USU/0 5      $ g r–  )	r   rr  r   r  rL   Údivr  r˜  rì   )rn   r{   rn  ro  rF   rO  s         rU   Úmethod_addcdiv_ÚTensorVariable.method_addcdiv_  sƒ   € ð Ñ¤×!D×!DÜ×;Ò;¼E¿I¹IÓF×TÑTØ˜gÐ&¨óˆFô ×;Ò;¼E¿I¹IÓF×TÑTØ˜U�O RóˆFð ×#Ñ# B¨°°¸"Ó=Ð=ØrW   r•  c                 ó   • [         R                  " [        R                  5      R	                  XU/0 5      n[         R                  " [        R
                  5      R	                  X/0 5      nUR                  US/ 0 5      $ )Nr  )r   r  rL   Úeqr  rœ  rì   )rn   r{   r•  rO  s       rU   Úmethod___contains__Ú"TensorVariable.method___contains__  sm   € ô ×7Ò7¼¿¹ÓA×OÑOØ�s�˜Ró
ˆô ×7Ò7¼¿	¹	ÓB×PÑPØ�˜"ó
ˆð ×!Ñ! " f¨b°"Ó5Ð5rW   c           
      ób  ^	^
• U Vs/ s H  oDR                  5       PM     snm	UR                  5        VVs0 s H  u  pVXVR                  5       _M     snnm
S[        S[        4U	U
4S jjnSUl        SSKJn  U" UUR                  R                  " SU/[        U /0 5      Q76 S9$ s  snf s  snnf )	Nr¸   rG   c                 ó(   >• U R                   " T0 TD6$ r�   )Úredistribute©r¸   Úargs_as_valueÚkwargs_as_values    €€rU   Úredistribute_fn_with_prim_typesÚKTensorVariable.method_redistribute.<locals>.redistribute_fn_with_prim_types2  s   ø€ Ø—>’> =ÐD°OÑDÐDrW   Úprim_redistributer/   rÆ   r  r<  )	rg  r…   r   rS   r�   rÇ   rÓ   r›  r+   )rn   r{   r„  rr   r¸   rˆ   r‰   r©  rÇ   r§  r¨  s            @@rU   Úmethod_redistributeÚ"TensorVariable.method_redistribute'  s¶   ù€ ñ :>Ó>º°A×-Ñ-Ö/¹Ñ>ˆØAGÇÁÄÔPÂ¹¸˜1×2Ñ2Ó4Ò4ÁÒPˆð	E¬sð 	E´s÷ 	Eð 	Eð 4GÐ'Ô0å*áØØ—)‘)×(Ò(ØØ/ðô # D 6¨2Ó.òñ
ð 	
ùò ?ùÛPs
   ‡B&¶B+c           
      óP  ^^• S[         S[        4S jnUR                  S[        5      n[	        U[
        R                  5      (       a+  [
        R                  " [        5      R                  X/0 5      nUR                  S5      b  XSS'   U Vs/ s H
  od" U5      PM     snmUR                  5        VVs0 s H  u  pxXt" U5      _M     snnmS[        S[        4UU4S jjn	SU	l        SS	KJn
  U
" UUR                  R                  " S
U	/[!        U /0 5      Q76 S9$ s  snf s  snnf )NÚvtrG   c                 óx   • [        U [        R                  5      (       a  U R                  $ U R	                  5       $ r�   )rP   r   ÚUserDefinedObjectVariablerF   rg  )r¯  s    rU   Úextract_python_valueÚ<TensorVariable.method_to_local.<locals>.extract_python_valueN  s-   € Ü˜"œi×AÑA×BÑBØ—x‘x�à×(Ñ(Ó*Ð*rW   Úgrad_placementsr¸   c                 ó(   >• U R                   " T0 TD6$ r�   )Úto_localr¦  s    €€rU   Úto_local_fn_with_prim_typesÚCTensorVariable.method_to_local.<locals>.to_local_fn_with_prim_typesa  s   ø€ Ø—:’:˜}Ð@°Ñ@Ð@rW   Úprim_to_localr/   rÆ   r  r<  )r2   r   r„   r3   rP   r   r±  r,  r»   r  r…   rS   r�   rÇ   rÓ   r›  r+   )rn   r{   r„  rr   r²  Úgrad_placements_vtr¸   rˆ   r‰   r·  rÇ   r§  r¨  s              @@rU   Úmethod_to_localÚTensorVariable.method_to_localC  s-  ù€ ð	+¤_ð 	+¼ô 	+ð $ŸZ™ZÐ(9Ô;QÓRÐÜÐ(¬)×*MÑ*M×NÑNä!*×!:Ò!:¼5Ó!A×!OÑ!OØÐ(¨"ó"Ðð �:‰:Ð'Ó(Ñ4Ø(:Ð$Ñ%á:>Ó?º$°QÐ-¨aÖ0¹$Ñ?ˆØBHÇ,Á,Ä.ÔQÂ.¹$¸!˜1Ð2°1Ó5Ò5Á.ÒQˆð	A¬3ð 	A´3÷ 	Að 	Að 0?Ð#Ô,å*áØØ—)‘)×(Ò(ØØ+ðô # D 6¨2Ó.òñ
ð 	
ùò @ùÛQs   ÂDÂ5D"c                 ó0   • U R                   " US/UQ70 UD6$ )NÚregister_hook©Ú_method_register_hookr¦  s       rU   Úmethod_register_hookÚ#TensorVariable.method_register_hookr  s!   € ð ×)Ò)¨"¨oÐOÀÒOÈÑOÐOrW   c                 ó0   • U R                   " US/UQ70 UD6$ )NÚ"register_post_accumulate_grad_hookr¿  r¦  s       rU   Ú)method_register_post_accumulate_grad_hookÚ8TensorVariable.method_register_post_accumulate_grad_hookz  s-   € ð ×)Ò)ØÐ4ð
Ø7;ò
Ø?Eñ
ð 	
rW   Úhookc           	      óD  ^^^^^• U R                   (       Gd1  [        R                  (       až  UR                  R	                  U5      u  mnS[
        R                  S[        R                  SS 4UU4S jjnSSKJ	n  U R                  5       nSUR                  R                  S'   U" UUR                  R                  S	UXt40 5      5      $ U R                  5       R                  n[        UR                  R!                  5       5      n	["        R$                  " [&        5      n
U
R)                  XU/0 5      nUR                  5       R                  n/ m[+        5       mS
[
        R,                  R.                  S[
        R,                  R.                  SS 4UUU4S jjmT" XÈ5        UnT H  nUR1                  U5        UnM     U	 H  nUR3                  XŒ5        M     [5        U[6        5      (       d   eUR                  5       U l        U R;                  U5        ["        R<                  " ["        R>                  RA                  5       S9$ ["        R<                  " ["        R>                  RA                  5       S9nUR                  RB                  RE                  XUT5        U$ )Nr  Úbw_staterG   c           	      óh   >• [        U T5      nU" [        R                  " [        [        UTS95        g )N)rP  rÉ  Ú	hook_name)rR   Ú	functoolsÚpartialr   r    )r  rÉ  r¾  rË  rÄ   s      €€rU   Ú_register_hook_trampolineÚGTensorVariable._method_register_hook.<locals>._register_hook_trampoline’  s8   ø€ ô %,¨F°DÓ$9�MÙ!Ü!×)Ò)Ü)Ü<Ø%-Ø&/ñ	ôð  rW   r/   rÆ   TÚhas_backward_hookr  rk   Ústop_atc                 ó”  >• U T;   d  XL a  g U R                    H6  n[        U[        R                  R                  5      (       d  M.  T" X!5        M8     U R
                  R                  5        H6  n[        U[        R                  R                  5      (       d  M.  T" X15        M8     TR                  U 5        TR                  U 5        g r�   )	r„  rP   rL   r  ÚNoderr   r/  r  r  )rk   rÑ  r•  ÚkwargÚcollect_depsÚnodes_to_moveÚvisiteds       €€€rU   rÕ  Ú:TensorVariable._method_register_hook.<locals>.collect_depsá  sŽ   ø€ Ø˜7“? d¢oØØŸ9œ9�CÜ! #¤u§x¡x§}¡}×5Ó5Ù$ SÖ2ñ %ð "Ÿ[™[×/Ñ/Ö1�EÜ! %¬¯©¯©×7Ó7Ù$ UÖ4ñ 2ð —‘˜DÔ!Ø×$Ñ$ TÕ*rW   rj  )#rÍ   r   Úcompiled_autograd_enabledrÓ   Úadd_backward_state_hookrL   rQ   ÚBackwardStater�   rÇ   rŸ   rk   rƒ   r›  r—  ÚusersÚkeysr   ÚAutogradFunctionVariabler   Ú
call_applyr  r  rÓ  r  Úreplace_input_withrP   rY   r[   rŠ   ÚRemovableHandleVariableÚbaser1   ré  r¾  )rn   r{   rÄ   rÇ  Úbw_state_proxyrÎ  rÇ   Ú
self_proxyÚtensor_nodeÚusers_to_replaceÚapply_hook_varrO  Útensor_prime_nodeÚinsert_pointrk   ÚuserÚhandle_variablerÕ  rË  rÖ  r×  s     `              @@@@rU   rÀ  Ú$TensorVariable._method_register_hook„  sD  ü€ ð �{�{ˆ{ô !×:×:à,.¯I©I×,MÑ,MÈdÓ,SÑ)�	˜>ð Ü!ŸL™Lð Ü4E×4SÑ4Sð à÷ ð  õ" 3à!Ÿ]™]›_�
Ø<@�
—‘×$Ñ$Ð%8Ñ9á$ØØ—I‘I×*Ñ*Ø'Ø1Ø#Ð4Øó	óð ðP Ÿ-™-›/×.Ñ.ˆKä# K×$5Ñ$5×$:Ñ$:Ó$<Ó=Ðô '×?Ò?Ô@RÓSˆNØ#×.Ñ.¨r¸$°<ÀÓDˆFð !'§¡Ó 1× 6Ñ 6Ðð
 24ˆMÜ*-«%ˆGð
+¤5§8¡8§=¡=ð 
+¼5¿8¹8¿=¹=ð 
+ÈT÷ 
+ñ 
+ñ Ð*Ô8ð 'ˆLÛ%�Ø×#Ñ# DÔ)Ø#’ñ &ó )�Ø×'Ñ'¨ÖGñ )ô ˜f¤n×5Ñ5Ð5Ð5ØŸ™Ó*ˆDŒJð ×'Ñ'¨Ô+ô
 ×4Ò4Ü'Ÿn™n×=Ñ=Ó?ñð ô $×;Ò;Ü#Ÿ.™.×9Ñ9Ó;ñ
ˆð 	�	‰	×Ñ×,Ñ,¨T¸È$ÔOØÐrW   c                 ó¼   • USLa  UR                  5       nU R                  5       R                  R                  S   R                  U:w  a  [        SSU  S3S/ S9  g U $ )NTr€   z(Unsupported Tensor.requires_grad_() callrŠ  z requires_grad_zaDynamo does not support changes to a Tensor's `requires_grad` through calling `requires_grad_()`.r  )rg  rŸ   rk   rƒ   rb   r   )rn   r{   rb   s      rU   Úmethod_requires_grad_Ú$TensorVariable.method_requires_grad_  sf   € ð  Ò$Ø)×<Ñ<Ó>ˆMà�=‰=‹?×Ñ×$Ñ$ _Ñ5×CÑCÀ}ÓTÜØBØ& t f¨OÐ<ðFàóð ˆKrW   c                 óF   • [        SSU  S3SS/[        R                  QS9  g )Nz'Unsupported Tensor.share_memory_() callrŠ  z share_memory_zTDynamo does not support Tensor.share_memory_() which modifies tensor storage for IPCz7Move share_memory_() call outside the compiled region. r  )r   r   r˜  rm   s    rU   Úmethod_share_memory_Ú#TensorVariable.method_share_memory_  s2   € ÜØ=Ø" 4 &¨Ð7ØnàIðä"×.Ñ.ðó		
rW   c                 óÄ   • [        U5      S:X  a  [        US   [        5      (       d&  [        U5      S:¼  a*  [        S U 5       5      (       a  U R	                  USX#5      $ g )Nr/   r   c              3   óŒ   #   • U  H:  nUR                  5       =(       a    [        UR                  5       [        5      v •  M<     g 7fr�   )rF  rP   rg  r­   )r¯   Úas     rU   r±   Ú,TensorVariable.method_new.<locals>.<genexpr>4  s8   é € ð â�Að ×$Ñ$Ó&×R¬:°a×6JÑ6JÓ6LÌcÓ+RÔRÚùs   ‚AAÚ	new_empty)rd  rP   r6   Úallrì   r¦  s       rU   Ú
method_newÚTensorVariable.method_new*  s^   € ô �‹I˜‹Nœz¨$¨q©'´<×@Ñ@Ü�‹I˜‹NÜñ áó÷ ñ ð
 ×#Ñ# B¨°TÓBÐBØrW   c                 ó~   • [        X R                  5       R                  R                  S   R	                  5       5      $ r˜   )ÚUntypedStorageVariablerŸ   rk   rƒ   Úuntyped_storagerí   s     rU   Úmethod_untyped_storageÚ%TensorVariable.method_untyped_storage<  s4   € ô &Ø—-‘-“/×&Ñ&×+Ñ+¨OÑ<×LÑLÓNó
ð 	
rW   c                 ó~   • U R                   (       d,  U R                  R                  R                  U5        SU l         g r¦   )ri   r[   rk   Ú_rename)rn   rÄ   s     rU   Úset_name_hintÚTensorVariable.set_name_hintC  s,   € Ø× × Ø�J‰J�O‰O×#Ñ# DÔ)Ø $ˆDÔØrW   c                 óT   • U R                  5       R                  R                  S   S L$ r˜   )rŸ   rk   rƒ   rm   s    rU   Úis_python_hashableÚ!TensorVariable.is_python_hashableI  s&   € ð �}‰}‹×#Ñ#×(Ñ(¨Ñ9ÀÐEÐErW   c                 ób   • [        U R                  5       R                  R                  S   5      $ r˜   )ÚhashrŸ   rk   rƒ   rm   s    rU   Úget_python_hashÚTensorVariable.get_python_hashO  s$   € Ü�D—M‘M“O×(Ñ(×-Ñ-¨oÑ>Ó?Ð?rW   c                 óÐ   • [        U[        5      (       d  gU R                  5       R                  R                  S   nUR                  5       R                  R                  S   nX#L $ )NFr€   )rP   r2   rŸ   rk   rƒ   )rn   r”  rõ  Úbs       rU   Úis_python_equalÚTensorVariable.is_python_equalR  sR   € Ü˜%¤×1Ñ1ØØ�M‰M‹O× Ñ ×%Ñ% oÑ6ˆØ�N‰NÓ×!Ñ!×&Ñ& Ñ7ˆØˆvˆrW   )ri   rp   rg   r]   r\   rq   rd   re   rc   rf   r^   r_   r[   rb   ra   r�   )NF)F)NNNN)rG   N©T)r{   r;   rG   rü  )wrS   Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r2   Ú_nonvar_fieldsrL   rQ   r'   r  r  r\   r]   r^   r­   rJ   r‚   r»   r   rw   rŠ   r�   r•   Ústrrš   rŸ   r£   r§   ÚstaticmethodÚdictrÂ   rè   rî   rñ   rô   rø   r4   rü   r  r  r  r  r  r	   r  r   r#  r(  r3  rQ  rY  r\  r   r—  rp  rw  r   Úpropertyr`   rD  rE  rì   r§  rª  r¥  r¾  Úmethod_nelementrÁ  Úmethod_ndimensionrÅ  rÌ  rÐ  rÕ  rá  rí  rò  rö  r  r  r   r
   r!  rF  rJ  rP  rV  rÌ  ÚcacherO  rg  r5   rl  ru  r‚  r…  rˆ  r‹  rŽ  r‘  r™  r�  r¡  r¬  r»  rÁ  rÅ  rÀ  rî  rñ  rù  rþ  r  r  r	  rë  r  Ú__static_attributes__Ú__classcell__©ry   s   @rU   rY   rY   ’   s  ø† ÙGð 	ØØØØØØØØØØØØØØðð  
×	'Ñ	'ð!€Nð&B §¡ô Bð. )-Ø)-Ø%)Ø$(ò#'/à�x‰x�~‰~ð'/ð �{‰{ð	'/ð
 —‘ð'/ð —‘ð'/ð ð'/ð ð'/ð ð'/ð ð'/ð ð'/ð ð'/ð ð'/ð �S˜#�X‰ Ñ%ð'/ð �c˜3�h‘ $Ñ&ð'/ð  ˜d‘{ð!'/ð" ˜T‘kð#'/ð$ ð%'/ð& 
÷''/ð '/ðT FJñ Ø)ð Ø7;¸d±{ð à	õ ðE 3¨¡:ô Eð
,à#ð,ð ˜d™
ð,ð ð	,ð
 
ô,ð(;˜Cô ;ð˜%Ÿ(™(Ÿ.™.ô ð˜Tô ð˜4ô ð ð/˜%Ÿ,™,ð /¨4°°S°©>ó /ó ð/ðbHBØ)ðHBØ14ðHBà	ôHBðT7Ð#:ð 7¸ô 7ðÐ$;ð ÀÐRVÑ@Vô ð
Ð%<ð ÀÐSWÑAWô ð
Ð%<ð ÀÐSWÑAWô ð
Ø)ðà	˜DÑ	 ôð8Ð$;ð 8Àô 8ðØ)ðà	˜DÑ	 ôðØ)ðà	˜DÑ	 ôðØ)ðà	˜DÑ	 ôðØ)ðà	˜DÑ	 ôð
Ð*Að 
Àhô 
ð(Ð#:ð (¸ô (ð
4Ø)ð4à	˜DÑ	 ô4ð
Ð'>ð 
À?ô 
ð)Ø)ð)Ø14ð)à	ô)ð<YÐ5ð Y¸Sð YÀ_ô Yðv#1Ð1ð #1°oô #1ðJÐ*Að Àdô ð JNñ7
Ø)ð7
Ø2:¸3±-À$Ñ2Fð7
à	ˆoÑ	õ7
ðr;à#ð;ð ,ð;ð  ð	;ð
 �Ñ'ð;ð ˜c ?Ð2Ñ3ð;ð 
ô;ð&˜Dô &ð ð�e˜C ˜H‘oó ó ððN¨¨c©ô Nð
°T¸#±Yô 
ð
và#ðvð ðvð �Ñ'ð	vð
 -ðvð 
ôvðpAØ)ðAØ25ðAØADðAà	˜4Ñ	ôAð
CØ)ðCØ25ðCØADðCà	˜4Ñ	ôCð ,0ñ*Øð*Ø! D™jð*à	˜4Ñ	õ*ðX	Ð6ð 	¸?ÈTÑ;Qô 	ð #€OðÐ4ð ¸È4Ñ9Oô ð
 #ÐðØ)ðà	˜DÑ	 ôðØ)ðà	˜DÑ	 ôð"Ð$;ð Ð@PÐSWÑ@Wô ð TXñØ)ðØ:IÈDÑ:Pðà	˜DÑ	 õð( !Ø"ñ	,à#ð,ð �T‰zð,ð ð	,ð
 ð,ð 
˜4Ñ	õ,ð\
Ø)ð
Ø0?ð
à	'ô
ð2Ð$;ð ÀÐRVÑ@Vô ð<Ð&=ð <À/ô <ð OTò(6Ø)ð(6Ø5DÀtÑ5Kð(6à	õ(6ðT(.Ð 7ð (.¸Oô (.ðV OTñ6Ø! /Ñ2ð6ØGKð6à	�$�Ñ'Ñ	(õ6ðv /3Ø26Ø26Ø,0ñs/à#ðs/ð ˜?Ñ+ðs/ð ˜Ñ/ð	s/ð
 ˜Ñ/ðs/ð ˜Ñ)ðs/ð 
�/Ñ	"õs/ðj%à#ð%ð ð%ð "ð	%ð
 
ô%ðà#ðð ðð "ð	ð
 
ôð,(à#ð(ð ð(ð "ð	(ð
 
ô(ð< Ø‡_�_ó
ó ó ð
ð&NÐ!8ð N¸_ô Nð
Ð"9ð 
Ð>Rô 
ð !òà#ðð ðð ð	ð �T‰zðð 
ˆt‰õð$&à#ð&ð ð&ð ð	&ð
 
ô&ðB
à#ð
ð ð
ð "ð	
ð
 
ô
ð
à#ð
ð ð
ð "ð	
ð
 
ô
ð
à#ð
ð ð
ð "ð	
ð
 
ô
ð
à#ð
ð ð
ð "ð	
ð
 
ô
ðà#ðð ðð "ð	ð
 
ôð6 )-òà#ðð ðð
  Ñ%ðð 
˜4Ñ	õð( )-òà#ðð "ðð "ð	ð  Ñ%ðð 
˜4Ñ	õð$6Ø)ð6Ø0?ð6à	ô6ð
à#ð
ð ð
ð "ð	
ð
 
ô
ð8-
à#ð-
ð ð-
ð "ð	-
ð
 
ô-
ð^Pà#ðPð ðPð "ð	Pð
 
ôPð
à#ð
ð ð
ð "ð	
ð
 
ô
ðHØ)ðHØ14ðHØ<KðHà	ôHðV TXñØ)ðØ:>ÀÑ:Pðà	õð"	
 hô 	
ðà#ðð ðð "ð	ð
 
˜4Ñ	ôð$
Ø)ð
à	!ô
ð #ð ¨$ô ðF Dô Fð@ ô @ð Vð °÷ ò rW   rY   c                   óh  ^ • \ rS rSrSrSS1\R                  krS\4S jr\	 S SS	S\
S\
S-  S
\
SS4
S jj5       rS\
S\
S\
SS4U 4S jjrS\4S jrS\4S jrS\
4S jrSS	S\
S\4S jr S S\S   S\\-  \-  4S jjrSSS\S\\   S\\\4   S\4
S jrS\4S jrS\4S jrS\S\4S jrSrU =r $ )!re  iZ  zí
Represents a symbolic scalar, either int, float or bool.  This is most commonly used to
handle symbolic size computation, e.g., tensor.size(0), but it is also used to
handle logic like float_tensor.item() or unspecialized float inputs.
r[   Úsym_numrG   c                 ó,   • [        U R                  5      $ r�   )r™   r   rm   s    rU   rš   ÚSymNodeVariable.debug_reprg  s   € Ü�D—L‘LÓ!Ð!rW   Nr{   r<   r­  r2   c                 óD  • Uc  [        UR                  U5      nSUR                  R                  ;   a  UR                  R                  S   U:X  d   e[        UR                  U5        [	        U[
        R                  [        [        45      (       aB  [	        U[
        R                  5      (       a  [        U5      OUn[        R                  " U5      $ [        X#40 UD6nUR                  R                  S:w  a%  UR                  R                  R                  U5        U$ )Nr€   rt   )r&   rk   rƒ   r-   rP   ÚsympyÚIntegerr­   rJ   r4   rÕ   re  rx   rÓ   Úcurrent_tracerÚrecord_tensor_or_symint_vt)rã  r{   r[   r   r­  r  s         rU   rÕ   ÚSymNodeVariable.createj  sÒ   € ð ‰?Ü$ U§Z¡Z°Ó4ˆGØ˜eŸj™jŸo™oÓ-Ø—:‘:—?‘? ?Ñ3°wÓ>Ð>Ð>Ü˜%Ÿ*™* gÔ.ä�g¤§¡¬s´DÐ9×:Ñ:Ü&0°¼%¿-¹-×&HÑ&H”c˜'”lÈgˆGÜ#×*Ò*¨7Ó3Ð3ä˜eÑ8°Ñ8ˆØ�:‰:�=‰=˜MÓ)Ø�I‰I×$Ñ$×?Ñ?ÀÔDØˆ
rW   rr   c                 óL   >• [         TU ]  " S0 UD6  Xl        X l        S U l        g ©Nru   )rv   rw   r[   r   Ú_tensor_var)rn   r[   r   rr   ry   s       €rU   rw   ÚSymNodeVariable.__init__�  s%   ø€ Ü‰ÒÑ"˜6Ò"ØŒ
àŒØ26ˆÕrW   c                 óª   • [        U R                  [        5      (       a   U R                  R                  R                  $ [        U R                  5      $ r�   )rP   r   r   rk   Úpytyper‚   rm   s    rU   r£   ÚSymNodeVariable.python_typeˆ  s8   € Ü�d—l‘l¤H×-Ñ-Ø—<‘<×$Ñ$×+Ñ+Ð+ä˜Ÿ™Ó%Ð%rW   c                 ó   • gr¦   ru   rm   s    rU   Úis_symnode_likeÚSymNodeVariable.is_symnode_likeŽ  r©   rW   c                 ó   • U R                   $ r�   rž   rm   s    rU   rŸ   ÚSymNodeVariable.as_proxy‘  r¡   rW   r\   c           	      óÖ   • U R                   cQ  [        R                  " U[        R                  5      R                  X/S[        R                  " X5      05      U l         U R                   $ )Nr\   )r+  r2   rÖ   rL   Úscalar_tensorr  )rn   r{   r\   s      rU   Ú	as_tensorÚSymNodeVariable.as_tensor”  s[   € Ø×ÑÑ#Ü.×4Ò4Ø”E×'Ñ'ó ç‰m˜B ¨´/×2GÒ2GÈÓ2RÐ(SÓTð Ôð ×ÑÐrW   Úoutput_graphr:   c                 ó  •  [        U R                  5      $ ! [         a^  n[        R                  R
                  R                  R                  (       a  e [        [        R                  S[        U5       3SS9eS nAff = f)Nz5Consider annotating your code using torch._check*(). Úconstrain_as_size_example)Ú	case_name)r   r   r   rL   r  ÚexperimentalÚ_configÚno_data_dependent_graph_breakr   r   ÚANTI_PATTERNr  )rn   r9  r¡  s      rU   rf  ÚSymNodeVariable.evaluate_expr›  si   € ð
	Ü §¡Ó-Ð-øÜ*ó 	Ü�x‰x×$Ñ$×,Ñ,×J×JØäÜ×*Ñ*ØGÌÈAËÀxÐPØ5ñð ûð		ús   ‚ —
A?¡AA:Á:A?r;   rÄ   r„  c           
      ór   • SSK Jn  U" UUR                  R                  " SU/[	        U /UQU5      Q76 5      $ )Nr/   rÆ   rì   )r�   rÇ   rÓ   r›  r+   )rn   r{   rÄ   r„  rr   rÇ   s         rU   rì   ÚSymNodeVariable.call_methodª  sF   € õ 	+áØØ�I‰I×"Ò"ØØðô # D =¨4 =°&Ó9òó
ð 	
rW   c                 ó   • gr¦   ru   rm   s    rU   r  Ú"SymNodeVariable.is_python_hashable¼  r©   rW   c                 ó4   • [        U R                  5       5      $ r�   )r  rf  rm   s    rU   r	  ÚSymNodeVariable.get_python_hash¿  s   € ô �D×&Ñ&Ó(Ó)Ð)rW   r”  c                 óÞ   • [        U[        5      (       a!  U R                  5       UR                  5       :H  $ [        U[        5      =(       a!    U R                  5       UR	                  5       :H  $ r�   )rP   re  rf  r2   rg  )rn   r”  s     rU   r  ÚSymNodeVariable.is_python_equalÄ  s]   € Ü�eœ_×-Ñ-Ø×%Ñ%Ó'¨5×+>Ñ+>Ó+@Ñ@Ð@ô �uœoÓ.÷ CØ×"Ñ"Ó$¨×(@Ñ(@Ó(BÑBð	
rW   )r+  r[   r   r�   )!rS   r  r  r  r  r2   r  r  rš   Úclassmethodr   rÕ   rw   r‚   r£   rJ   r1  rŸ   rY   r7  r
   r­   Úfloatrf  r   r  rì   r  r	  rë  r  r  r  r  s   @rU   re  re  Z  s|  ø† ñð 	Øðð 
×	'Ñ	'ð€Nð"˜Cô "ð ð
 #ñ	à'ðð ðð �t‘ð	ð
 ðð 
ôó ðð,7˜cð 7¨Cð 7¸3ð 7À4÷ 7ð&˜Tô &ð ô ð˜#ô ð Ð7ð  Àð  Èô  ð 7;ñØ$ ]Ñ3ðà	�‰�eÑ	õð
à#ð
ð ð
ð �Ñ'ð	
ð
 �S˜/Ð)Ñ*ð
ð 
ô
ð$ Dô ð* ô *ð

 Vð 
°÷ 
ò 
rW   re  c                   ó  ^ • \ rS rSrSr\SSS\R                  R                  S\	SS 4S j5       r
SSS	\S\4S
 jr\S	\S\\   S\\\4   S\\\   \\\4   4   4S j5       rSSS	\S\\   S\\\4   S\4
U 4S jjrS\4S jrSrU =r$ )rù  iÎ  zq
Represents a np.ndarray, but backed by torch Tensor via torch._numpy.ndarray.
Use this for Tensor.numpy() call.
r{   r;   r[   r­  rG   c                 ó.   • SSK Jn  U" S[        U US.UD6$ )Nr/   r`  rb  ru   )r�   ra  rù  )r{   r[   r­  ra  s       rU   rÕ   ÚNumpyNdarrayVariable.createÔ  s,   € õ 	/á ð 
Ü+ØØñ
ð ñ	
ð 	
rW   rÄ   c                 ó^  ^ ^^^	^
• SSK Jm	  SSKJm
  S nT R	                  5       R
                  R                  S   n[        R                  " U5      nS[        4UU	U UU
4S jjnTS;   aE  TR                  R                  S	T	T R	                  5       T40 5      n[        R                  TU5      nOöTS
;   a   [        R                  " [        UT5      5      $ TS;   aI  [!        [        UT5      =n5      (       d&  [        R                  " [#        S U 5       5      5      $ U" 5       $ TS:X  aB  [!        UR$                  =n5      (       d  [        R                  " ['        U5      5      $ U" 5       $ TS;   a  [)        SST  ST 3ST S3/ S9  OTS:X  a  [)        SST  ST 3ST S3/ S9  Uc  [*        eU$ )Nr   )Únumpy_attr_wrapperr/   rÆ   r€   rG   c            	      ón   >• T" TTR                   R                  STTR                  5       T 40 5      5      $ )Nr  )rÓ   r›  rŸ   )rÄ   rP  rn   r{   rÇ   s   €€€€€rU   Úinsert_into_graphÚ;NumpyNdarrayVariable.var_getattr.<locals>.insert_into_graphî  s;   ø€ Ù ØØ—	‘	×&Ñ&Ø#Ð%7¸$¿-¹-»/È4Ð9PÐRTóóð rW   )ÚTÚrealÚimagr  )r_   rõ  )Úshapera   c              3   ó8   #   • U  H  n[        U5      v •  M     g 7fr�   r³  r´  s     rU   r±   Ú3NumpyNdarrayVariable.var_getattr.<locals>.<genexpr>  s   é € Ð4GÂQÀ´S¸·V°VÂQùr·  r`   )râ  Úflagsr\   z$Unsupported ndarray attribute accessr  r6  z3Dynamo currently does not support tracing `ndarray.r“  r  Ú__version__z&Unsupported ndarray.__version__ access)rN   rP  r�   rÇ   rŸ   rk   rƒ   ÚtnpÚndarrayr2   rÓ   r›  rù  rÕ   r4   rR   r   r»   r`   r­   r   rØ   )rn   r{   rÄ   rO  r€   Úexample_ndarrayrR  r[   rµ  rP  rÇ   s   ```      @@rU   rQ  Ú NumpyNdarrayVariable.var_getattrá  s·  ü€ õ
 	/Ý*àˆàŸ™›×,Ñ,×1Ñ1°/ÑBˆÜŸ+š+ mÓ4ˆð	¤?÷ 	ó 	ð Ð(Ó(Ø—I‘I×*Ñ*ØØ"Ø—‘“ $Ð'Øó	ˆEô *×0Ñ0°°UÓ;‰Fð Ð)Ó)Ü#×*Ò*¬7°?ÀDÓ+IÓJÐJØÐ(Ó(Ü#¬°À$Ó)GÐ$G A×HÑHÜ'×.Ò.¬uÑ4GÁQÓ4GÓ/GÓHÐHÙ$Ó&Ð&Ø�V‹^Ü#¨×)=Ñ)=Ð$= A×>Ñ>Ü'×.Ò.¬s°1«vÓ6Ð6Ù$Ó&Ð&ØÐ/Ó/ÜØ>Ø& t f¨A¨d¨VÐ4ØQÐRVÐQWÐWYÐZØó	ð �]Ó"ÜØ@Ø& t f¨A¨d¨VÐ4ØQÐRVÐQWÐWYÐZØò	ð ‰>Ü%Ð%ØˆrW   r„  rr   c                 ó’   • U S:X  a9  SSS.nUR                  5        VVs0 s H  u  pEUR                  XD5      U_M     nnnX4$ s  snnf )NÚclipÚminÚmax)Úa_minÚa_max)r…   r„   )rÄ   r„  rr   Úkwargs_renamerˆ   r‰   s         rU   Ú
patch_argsÚNumpyNdarrayVariable.patch_args(  sO   € ð �6‹>Ø&+°eÑ<ˆMØ=C¿\¹\¼^ÔLº^±T°Q�m×'Ñ'¨Ó-¨qÒ0¹^ˆFÑLØˆ|Ðùó Ms   ŸAc                 ó�  >• SSK Jn  SSKJn  U R	                  X#U5      u  p4US:X  a›  SSKJn  S nSU;   a  US   nO[        U5      S:”  a  US   nUS L=(       a    UR                  S	5      n	[        X‡5      =(       a    UR                  [        L n
U	(       d  U
(       a%  U" S
SU  SU SU SU 3S/ [        R                  QS9  US;   a  [        TU ]=  XX45      $ US;   a  U" SSU  SU SU SU 3SU S3/ S9  UR                   R"                  " SU" U5      /[%        U /['        U5      -   U5      Q76 n[(        R+                  X5      $ )Nr   r  )Únumpy_method_wrapperÚastyper/   r+  r\   r   ÚOzndarray.astype(object)rŠ  r6  z­`ndarray.astype('O')` or `ndarray.astype(object)` is not supported by torch.compile, as there is no equivalent to object type in torch.Tensor. This will be executed eagerly.r  )Ú__len__r`   r  Ú__iter__)ÚtostringÚtobytesÚ__delattr__zUnsupported ndarray method callz	`ndarray.z&()` is not modelled in `torch._numpy`.r  )rå   r   rN   rj  rg  r.  r,  rd  Úis_constant_matchrP   rP  rë  r   rÉ  rv   rì   rÓ   r›  r+   r—  rù  rÕ   )rn   r{   rÄ   r„  rr   r   rj  r,  Ú	dtype_argÚis_object_strÚis_object_typer[   ry   s               €rU   rì   Ú NumpyNdarrayVariable.call_method1  sy  ø€ õ 	(Ý0à—‘ t°6Ó:‰ˆà�8ÓÝ0àˆIØ˜&Ó Ø" 7™O‘	Ü�T“˜Q“Ø  ™G�	Ø%¨TÐ1×V°i×6QÑ6QÐRUÓ6VˆMä˜9Ó6×Q¸9¿<¹<Ì6Ð;Qð ö ¦ÙØ4Ø*¨4¨&°°$°°q¸¸¸aÀ¸xÐHð9ð ;Ô-×9Ñ9Ð:ò	ð Ð<Ó<ä‘7Ñ& r°Ó>Ð>ØÐ9Ó9ÙØ9Ø& t f¨A¨d¨V°1°T°F¸!¸F¸8ÐDØ'¨ vÐ-SÐTØò	ð —	‘	×&Ò&ØÙ  Ó&ð
ô  ˜v¬¨T«
Ñ2°FÓ;ò
ˆô
 $×*Ñ*¨2Ó5Ð5rW   c                 ó<   • [         b  [         R                  $ [        $ r�   )rþ  r]  r   rm   s    rU   r£   Ú NumpyNdarrayVariable.python_typee  s   € Ü‰>Ü—:‘:ÐäˆOrW   ru   )rS   r  r  r  r  r  rL   r  r  r   rÕ   r  r2   rQ  r   r  r»   rg  rì   r‚   r£   r  r  r  s   @rU   rù  rù  Î  s  ø† ñð
 ð

Ø#ð

Ø,1¯H©H¯N©Nð

ØGJð

à	ó

ó ð

ðEÐ5ð E¸Sð EÀ_ô EðN ðØðØ! /Ñ2ðØ<@ÀÀoÐAUÑ<Vðà	ˆx˜Ñ(¨$¨s°OÐ/CÑ*DÐDÑ	Eóó ðð26à#ð26ð ð26ð �Ñ'ð	26ð
 �S˜/Ð)Ñ*ð26ð 
÷26ðh˜T÷ ò rW   rù  c                   óØ   ^ • \ rS rSrSrSS1\R                  krSSS.S\R                  R                  S\
\-  S-  S\S	\S
S4
U 4S jjjr\ SS\S\
\-  S-  S\S
S 4S jj5       rSrU =r$ )ÚUnspecializedPythonVariableil  zG
This is a 1-element tensor represents unspecialized python float/int.
Ú	raw_valueÚneed_unwrapNT©r{  r|  r[   rr   rG   c                ó@   >• [         TU ]  " U40 UD6  X l        X0l        g r�   )rv   rw   r{  r|  )rn   r[   r{  r|  rr   ry   s        €rU   rw   Ú$UnspecializedPythonVariable.__init__w  s"   ø€ ô 	‰Ò˜Ñ) &Ò)Ø"ŒØ&ÕrW   Útensor_variablec                 óH   • [        S0 [        UR                  5      DUUS.D6$ )Nr}  ru   )rz  r  Ú__dict__)rã  r€  r{  r|  s       rU   Úfrom_tensor_variableÚ0UnspecializedPythonVariable.from_tensor_variableƒ  s/   € ô +ñ 
Ü�?×+Ñ+Ó,ð
àØ#ó
ð 	
rW   )r|  r{  r  )rS   r  r  r  r  rY   r  rL   r  r  rK  r­   rJ   r   rw   rJ  rƒ  r  r  r  s   @rU   rz  rz  l  sÂ   ø† ñð
 	Øðð 
×	&Ñ	&ð€Nð )-Ø ò
'à�x‰x�~‰~ð
'ð ˜3‘; Ñ%ð	
'ð
 ð
'ð ð
'ð 
÷
'ð 
'ð ð
 !ñ	
à'ð
ð ˜3‘; Ñ%ð
ð ð	
ð
 
'ô
ó ö
rW   rz  c                   óž   ^ • \ rS rSrSrS1\R                  krS\R                  R                  S\
SS4U 4S jjr\S	\SS 4S
 j5       rSrU =r$ )ÚFakeItemVariablei’  z…An unspecialized python variable which prevents access to the underlying raw value.
This is needed if item is called on a FakeTensor.r|  r[   rr   rG   Nc                 óX   >• UR                  SS5      n[        TU ]  " U40 UD6  X0l        g )Nr|  F)Úpoprv   rw   r|  )rn   r[   rr   r|  ry   s       €rU   rw   ÚFakeItemVariable.__init__›  s+   ø€ Ø—j‘j °Ó6ˆÜ‰Ò˜Ñ) &Ò)Ø&ÕrW   r€  c                 ó>   • [        S0 [        UR                  5      D6$ r*  )r†  r  r‚  )rã  r€  s     rU   rƒ  Ú%FakeItemVariable.from_tensor_variable   s   € ô  ÑA¤$ ×'?Ñ'?Ó"@ÑAÐArW   )r|  )rS   r  r  r  r  rY   r  rL   r  r  r   rw   rJ  rƒ  r  r  r  s   @rU   r†  r†  ’  sl   ø† ñ9ð 	ðà	×	&Ñ	&ð€Nð
'˜eŸh™hŸn™nð '¸ð 'À÷ 'ð
 ðBØ,ðBà	óBó öBrW   r†  c                   óL   • \ rS rSrSSS\\   S\\\4   S\4S jrS\	4S jr
S	rg
)rè  i§  r{   r;   r„  rr   rG   c           	      ó,  • SSK Jn  U R                  R                  nU[        R
                  R                  L a—  S n[        U5      S:X  aU  US   R                  5       (       a=  [        U5      S:X  a.  US   nUR                  " XU R                  U R                  5      nOd[        SU R                   SU SU S3SS	/[        R                  QS
9  O3[        R                  " X5      R                  X/[!        U5      -   U5      nUc   eU R                  R"                  nU[        R
                  R"                  La'  [        R                  " X5      R                  X/U5        UR$                  R&                  R)                  [+        5       U[,        S9  U$ )Nr/   r>   r   zCCalling subclass default constructor with more than tensor argumentr�  rŽ  r�  rç  zFAvoid this constructor call or move it outside `torch.compile` regioner  rå  )rc  r?   rF   Ú__new__rL   rQ   rd  r§   ri  rÍ   r   r   r˜  r2   rÖ   r  r—  rw   rÓ   ré  rê  rë  r0   )	rn   r{   r„  rr   r?   Únew_funcr1  ÚdataÚ	init_funcs	            rU   r  Ú$TensorSubclassVariable.call_function¨  sm  € õ 	Aà—:‘:×%Ñ%ˆØ”u—|‘|×+Ñ+Ò+ØˆCÜ�4‹y˜A‹~ $ q¡'×"3Ñ"3×"5Ñ"5¼#¸f»+ÈÓ:JØ˜A‘w�ð 3×BÒBØ˜dŸj™j¨$¯+©+ó‘ô ØaØ#Ÿz™z˜l¨&°°°iÀ¸xÀqÐIØ 9ð2ðô +×6Ñ6ðó		ô "×'Ò'¨Ó5×CÑCØ�FœT $›ZÑ'¨óˆCð ‰Ðˆà—J‘J×'Ñ'ˆ	ð œEŸL™L×1Ñ1Ò1Ü×!Ò! "Ó0×>Ñ>¸rÀ5È&ÔQð 	�	‰	×Ñ×)Ñ)Ü‹H�cÔ-Að 	*ñ 	
ð ˆ
rW   c                 ó   • U R                   $ r�   rT   rm   s    rU   rg  Ú)TensorSubclassVariable.as_python_constantÙ  r¡   rW   ru   N)rS   r  r  r  r   r2   r  r  r  r‚   rg  r  ru   rW   rU   rè  rè  §  sI   † ð/à#ð/ð �Ñ'ð/ð �S˜/Ð)Ñ*ð	/ð
 
ô/ðb D÷ rW   rè  c            
       ó¬   ^ • \ rS rSrS1\R
                  krS\S\R                  S\	SS4U 4S jjr
SS	S
\S\\   S\\\4   S\4
U 4S jjrSS jrSrU =r$ )rü  iÝ  r€   Úfrom_tensorrr   rG   Nc                 ó>   >• [         TU ]  " S0 UD6  Xl        X l        g r*  )rv   rw   r–  r€   )rn   r–  r€   rr   ry   s       €rU   rw   ÚUntypedStorageVariable.__init__ã  s!   ø€ ô 	‰ÒÑ"˜6Ò"Ø&Ôà*ÕrW   r{   r;   rÄ   r„  c           
      ó  >• US:X  aÇ  U(       d  U(       a&  [        UUS[        U5       S[        U5       S35        U R                  R                  5       n[	        U5      (       d  [
        R                  " [        U5      5      $ SSKJ	n  SSK
Jn  U" UUR                  R                  S	UU R                  R                  5       40 5      5      $ US
:X  aœ  [        U5      S:X  a�  U(       a  [        XS[        U5       S35        UR                  R                  S	[         R"                  R$                  R&                  U R                  R                  5       US   R                  5       40 5        U $ [(        TU ]U  XX45      $ )Nr`   z0 args and 0 kwargsz
 args and z kwargsr   )Úuntyped_storage_sizer/   rÆ   r  Úresize_z0 kwargsr   )r,   rd  r€   r`   r   r4   rÕ   r­   Úexternal_utilsrš  r�   rÇ   rÓ   r›  r–  rŸ   rL   rH  r4  Úresize_storage_bytes_rv   rì   )	rn   r{   rÄ   r„  rr   rO  rš  rÇ   ry   s	           €rU   rì   Ú"UntypedStorageVariable.call_methodî  sL  ø€ ð �6‹>Þ–vÜ#ØØØ)Ü˜4“y�k ¬C°«K¨=¸Ð@ô	ð ×'Ñ'×,Ñ,Ó.ˆFÜ# F×+Ñ+ä'×.Ò.¬s°6«{Ó;Ð;åAÝ2á$ØØ—I‘I×*Ñ*Ø'Ø,Ø×)Ñ)×2Ñ2Ó4Ð6Øó	óð ð �9Ó¤ T£¨a£ÞÜ# B¨j¼SÀ»[¸MÈÐ:QÔRØ�I‰I×"Ñ"ØÜ—	‘	×"Ñ"×8Ñ8Ø×!Ñ!×*Ñ*Ó,¨d°1©g×.>Ñ.>Ó.@ÐAØô	ð ˆKä‰wÑ" 2¨TÓ:Ð:rW   c                 ól   • U" U R                   5        UR                  S5        UR                  S5        g )Nrý  r   ©r–  Úload_methodrì   ©rn   Úcodegens     rU   ÚreconstructÚ"UntypedStorageVariable.reconstruct	  s-   € Ù�× Ñ Ô!Ø×ÑÐ-Ô.Ø×Ñ˜AÕrW   )r€   r–  ©r£  r9   rG   N)rS   r  r  r  r2   r  rY   rL   ÚUntypedStorager   rw   r  r—  r  rì   r¤  r  r  r  s   @rU   rü  rü  Ý  s›   ø† àðà	×	'Ñ	'ð€Nð
	+à#ð	+ð ×+Ñ+ð	+ð ð		+ð
 
÷	+ð+;à#ð+;ð ð+;ð �?Ñ#ð	+;ð
 �S˜/Ð)Ñ*ð+;ð 
÷+;÷Zò rW   rü  c                   óB   ^ • \ rS rSrS\S\SS4U 4S jjrS	S jrSrU =r	$ )
rH  i!	  r–  rr   rG   Nc                 ó2   >• [         TU ]  " S0 UD6  Xl        g r*  )rv   rw   r–  )rn   r–  rr   ry   s      €rU   rw   ÚDataPtrVariable.__init__"	  s   ø€ ô
 	‰ÒÑ"˜6Ò"Ø&ÕrW   c                 ól   • U" U R                   5        UR                  S5        UR                  S5        g )NÚdata_ptrr   r   r¢  s     rU   r¤  ÚDataPtrVariable.reconstruct*	  s,   € Ù�× Ñ Ô!Ø×Ñ˜JÔ'Ø×Ñ˜AÕrW   )r–  r¦  )
rS   r  r  r  rY   r   rw   r¤  r  r  r  s   @rU   rH  rH  !	  s.   ø† ð'à#ð'ð ð'ð 
÷	'÷ò rW   rH  )ˆr  rÌ  ÚloggingrT  ra  r]  r=  Úcollections.abcr   r   Ú
contextlibr   Ú	itertoolsr   r   Útypingr   r	   r
   r   r$  Útorch._numpyÚ_numpyr\  Útorch.fxrL   Útorch.randomÚtorch._dynamor   Útorch._library.opaque_objectr   Útorch._subclasses.meta_utilsr   Ú%torch.fx.experimental.symbolic_shapesr   r   r   r   r   Útorch.utils._python_dispatchr   r-  r   r   r   Ú_trace_wrapped_higher_order_opr   rå   r   r   r   r   r   rœ  r   r    Úguardsr!   r"   rÍ   r#   rN   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   râ  r0   r1   r2   Úconstantr3   r4   Úlistsr5   r6   Úscript_objectr7   Úuser_definedr8   Únumpyrþ  ÚModuleNotFoundErrorÚtorch._dynamo.codegenr9   Útorch._dynamo.output_graphr:   Útorch._dynamo.symbolic_convertr;   r<   Ú	functionsr=   rc  r?   Ú	getLoggerrS   r_  ÚgtÚltÚgeÚler   ÚneÚis_Úis_notÚsupported_tensor_comparison_opsÚsupported_const_comparison_opsÚsupported_comparison_opsr  Úfromkeysr/  Ú%supported_tensor_comparison_op_valuesÚ$supported_const_comparison_op_valuesrë  rJ   rV   r¼   Ú
TensorBaser‚  rQ   r/  rY   re  rù  rz  r†  rè  rü  rH  ru   rW   rU   Ú<module>r×     sL  ðñó" Û Û Û Û Û ß .Ý "Ý Ý ß 9Ó 9ã å Û Û Ý +Ý AÝ 6÷õ õ Gç 3Ñ 3Ý :÷õ ÷ Oß 0Ý ÷÷ ÷ ñ ÷ JÑ Iß >ß 5Ý 4Ý 2ðÛö
 Ý/Ý6÷õ
 0Ý<ð ×Ò˜Ó!€ð 
�‰Ø	�‰Ø
�+‰+Ø
�+‰+Ø
�+‰+Ø
�+‰+Ø
�,‰,Ø�o‰oñ	#Ð ð �,‰,Ø�o‰oØ
�+‰+Ø
�+‰+ñ	"Ð ðØ%ðà$ðÐ ð )-¯©Ø#×*Ñ*Ó,ó)Ð %ð (,§}¡}Ø"×)Ñ)Ó+ó(Ð $ð
 &ð ¨Tô ð —8‘8×&Ñ&×/Ñ/°%·,±,×2GÑ2GÑGÐ ôE�_ô EôP6q
�oô q
ôh[˜>ô [ô|#
 .ô #
ôLB�~ô Bô*3Ð5ô 3ôlA˜_ô AôH�oõ øðaF ó Ø	ƒBðús   Ã.J ÊJÊJ