ó
    Eñiª} ã                  óJ  • % S SK Jr  S SKrS SKrS SKrS SKrS SKrS SKrS SKrS SK	r	S SK
r
S SKJrJrJrJrJr  S SKJr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JrJrJrJrJ r J!r!J"r"  S SK#J$r$J%r%J&r&J'r'J(r(J)r)  S S	K*J+r+  S SK,r,S S
K,J-r-J.r.J/r/  S SK0J1s  J2s  J3r4  S SK5J6s  J7r8  S SK9r:S SK;r:S SK<J7s  J=r>  S SK?J@r@  S SKAJBrB  S SKCJDrD  S SKEJFrF  S SKGJHrH  S SKIJJrJ  S SKKJLrLJMrMJNrNJOrOJPrP  S SKQJRrRJSrSJTrTJUrUJVrVJWrWJXrXJYrYJZrZ  S SK[J\r\  S SK]J^r^  S SK_J`r`  S SKaJbrbJcrcJdrdJere  S SKfJgrg  SSKhJiriJjrj  SSKkJlrlJmrmJnrnJoroJprp  SSKjJqrqJrrrJsrsJtrtJuru  SSKvJwrw  SSKxJyryJzrzJ{r{J|r|  SSK}J~r~  SSKJ€r€J�r�  SS K7J‚r‚JƒrƒJ„r„J…r…J†r†J‡r‡JˆrˆJ‰r‰JŠrŠJ‹r‹JŒrŒJ�r�JŽrŽJ�r�J�r�J‘r‘J’r’J“r“J”r”J•r•J–r–J—r—  SS!K˜J™r™JšršJ›r›  \(       a+  S S"KœJ�r�  S S#KQJžrž  S S$K[JŸrŸ  SS%K J¡r¡  SS&K¢J£r£  SS'K¤J¥r¥  SS(K7J¦r¦  O\§r¡S)\¨S*'    S SK©r©\©GRT                  r«S+r¬\'" S-5      r®\!" S.5      r¯\!" S/5      r°\!" S05      r±\"\²\-4   r³S)\¨S1'   \"\²\´\-4   rµS)\¨S2'   \"\:GRl                  GRn                  \:GRl                  GRp                  4   r¹S)\¨S3'   \GRt                  " \»5      r¼\R*                  " \	GRz                  S4S59r½\:GR2                  GR|                  r¾ \"\²S6\¿\ÀS64   S7S8\\\"\²\¿\ÀS64   S6S7S84         4   rÁS)\¨S9'   GS-S: jrÂ\GR†                  " S+S;9 " S< S=5      5       rÄGS.S> jrÅGS/S? jrÆGS0S@ jrÇGS0SA jrÈ      GS1SB jrÉ/ SCQrÊ/ SDQrË GS2     GS3SE jjrÌGS4SF jrÍ GS2     GS3SG jjrÎ\GS5GS6SH jj5       rÏ\GS5GS7SI jj5       rÏ GS5     GS8SJ jjrÏ    GS9SK jrÐ    GS:SL jrÑGS;SM jrÒGS;SN jrÓGS<SO jrÔ        GS=SP jrÕ      GS>SQ jrÖGS?SR jr×GS@SS jrØST rÙ " SU S85      rÚ\�" S,S;9 " SV SW5      5       rÛ\� " SX SY\Ú5      5       rÜGSASZ jrÝ\� " S[ S\\Ü5      5       rÞ\� " S] S^\Þ5      5       rß\Æ" S_5      \Æ" S`5      \Æ" Sa5      \Æ" Sb5      \Æ" Sc5      \Æ" Sc5      \Æ" Sd5      Se.ràSf\¨Sg'    GS5       GSBSh jjrá\� " Si Sj\Ü5      5       râS\." S 5      4       GSCSk jjrã\\\-   \\-   /\š4   räS)\¨Sl'    " Sm Sn\â5      rå " So Sp\å5      ræ " Sq Sr\å5      rç\� " Ss St\Ü5      5       rè\� " Su Sv\è5      5       ré\� " Sw Sx\Ü5      5       rêGSDSy jrëGSDSz jrì     GSE             GSFS{ jjrí      GSGS| jrîGSHS} jrï\� " S~ S\Ú5      5       rð\� " S€ S�\ð5      5       rñ\� " S‚ Sƒ\ð5      5       rò\� " S„ S…\ð5      5       ró\� " S† S‡\ð5      5       rô\� " Sˆ S‰\ô5      5       rõ\� " SŠ S‹\ð5      5       rö\� " SŒ S�\ð5      5       r÷ " SŽ S�\õ5      rø\� " S� S‘\Ú5      5       rù\� " S’ S“\ù5      5       rú\� " S” S•\ù5      5       rû      GSIS– jrüGSJS— jrý " S˜ S™5      rþ\� " Sš S›\þ5      5       rÿ " Sœ S�\ÿ5      Gr  " Sž SŸ\ÿ5      Gr " S  S¡\ÿ5      Gr " S¢ S£\5      Gr " S¤ S¥G\ 5      Gr\� " S¦ S§\þ5      5       Gr " S¨ S©\ÿ5      Gr\�" S,S;9 " Sª S«\Ú\m5      5       Gr\�" S,S;9 " S¬ S­G\\Û5      5       Gr " S® S¯G\5      Gr	 " S° S±G\	5      Gr
 " S² S³G\	5      Gr\� " S´ Sµ\Ú5      5       Gr\� " S¶ S·\Ú5      5       Gr\�" S,S;9 " S¸ S¹G\5      5       Gr " Sº S»G\5      Gr " S¼ S½G\5      Gr\"\²\´G\\ÀG\\"\²\À\´G\4      4   Gr " S¾ S¿5      Gr " SÀ SÁG\5      Gr " SÂ SÃG\5      Gr " SÄ SÅG\5      Gr " SÆ SÇG\5      Gr " SÈ SÉG\5      Gr " SÊ SËG\5      Gr    GSKSÌ jGr\�" S,S;9 " SÍ SÎG\5      5       Gr " SÏ SÐG\5      Gr " SÑ SÒG\5      Gr\�" S,S;9 " SÓ SÔG\5      5       Gr\�" S,S;9 " SÕ SÖG\5      5       Gr  " S× SØG\ 5      Gr! " SÙ SÚG\5      Gr" " SÛ SÜG\5      Gr# " SÝ SÞG\5      Gr$ " Sß SàG\$5      Gr% " Sá SâG\$5      Gr& " Sã SäG\5      Gr' " Så SæG\5      Gr( " Sç SèG\5      Gr) " Sé SêG\5      Gr* " Së SìG\5      Gr+ " Sí SîG\+5      Gr, " Sï SðG\"5      Gr- " Sñ SòG\5      Gr. " Só SôG\5      Gr/ " Sõ SöG\ 5      Gr0 " S÷ SøG\5      Gr1 " Sù SúG\5      Gr2 " Sû SüG\5      Gr3 " Sý SþG\5      Gr4\�" S,S;9 " Sÿ GS 5      5       Gr5 " GS GSG\"5      Gr6\�" S,S;9 " GS GSG\65      5       Gr7 " GS GSG\65      Gr8\� " GS GS\þ5      5       Gr9 " GS	 GS
G\5      Gr:\GR†                   " GS GS\Ú5      5       Gr; " GS S6G\;5      Gr< " GS GSG\;5      Gr=\�" S,S;9 " GS GS\Ú5      5       Gr>GSLGS jGr?\�" S,S;9 " GS GSG\5      5       Gr@\�" S,S;9 " GS GSG\5      5       GrA    GSMGS jGrB\�" S,S;9 " GS GSG\5      5       GrC " GS GSG\65      GrD " GS GS\Ú5      GrE\� " GS GSG\E5      5       GrF\� " GS  GS!G\E5      5       GrG " GS" GS#G\65      GrH " GS$ GS%G\H5      GrI " GS& GS'G\H5      GrJ " GS( GS)G\H5      GrKGSNGS* jGrLGSNGS+ jGrMGSOGS, jGrNg! \­ a    Sr«S,r¬ GN¶f = f(P  é    )ÚannotationsN)ÚCallableÚ	GeneratorÚIterableÚIteratorÚSequence)ÚAbstractContextManagerÚnullcontext)ÚEnum)Úpartial)ÚAnyÚcastÚClassVarÚLiteralÚOptionalÚoverloadÚSupportsFloatÚSupportsIntÚTYPE_CHECKINGÚ	TypeAliasÚTypeVarÚUnion)Úassert_neverÚNeverÚoverrideÚ	ParamSpecÚSelfÚTypeIs)Úpatch)ÚExprÚIntegerÚSymbol)Úidentity)ÚGraphModuleSerializer)Úcan_auto_functionalize)Úmetrics©Úget_free_symbols)Úis_opaque_type)Úcompute_required_storage_lengthÚis_boolean_dtypeÚis_float_dtypeÚmake_channels_last_strides_forÚ
StrideType)	Ú&_remove_effect_token_unbacked_bindingsÚcompute_unbacked_bindingsÚfree_symbolsÚfree_unbacked_symbolsÚIterateExprsÚrebind_unbackedÚresolve_unbacked_bindingsÚShapeEnvÚSymTypes)ÚNode©Ú
OrderedSet)Ú_disable_current_modes)ÚCleanDivÚFloorDivÚModÚModularIndexing)ÚSymTé   )ÚconfigÚdependencies)ÚBackendFeatureÚCodegenSymbolÚget_scheduling_for_deviceÚindex_prevent_reorderingÚKernel)ÚDepÚextract_free_symbolsÚ#extract_input_node_reduction_rangesÚextract_read_writesÚvar_builder)ÚLoopBody)ÚOpCounterCSEÚOpCountResultÚReductionTypeÚ	StoreMode)Úbenchmarker)ÚDevicePropertiesÚReductionHint)ÚargsortÚargsort_symÚcache_on_selfÚcache_on_self_and_argsÚceildivÚconvert_shape_to_inductorÚconvert_shape_to_symintÚdeveloper_warningÚdo_bench_using_profilingÚdtype_from_sizeÚget_dtype_sizeÚget_kernel_metadataÚGPU_ALIGN_BYTESÚir_dataclassÚ
is_dynamicÚis_gpuÚ	sympy_dotÚsympy_index_symbolÚsympy_index_symbol_with_prefixÚsympy_productÚ
sympy_subsÚtensor_is_aligned)ÚopsÚOpsValueÚV)ÚFakeScriptObject)ÚSympyBoolean)ÚArgument)ÚCUTLASSTemplate)ÚPythonWrapperCodegen)ÚGraphLowering)ÚIndentedBufferr   rr   TFÚ_PÚ_TÚ_UÚ_VÚ_IntLikeÚ_NumLikeÚ_OpOverloadsz  ©ÚprefixÚ	TensorBoxr"   ÚIRNodeÚ_NodeOrNodesc                ó.   • [        U [        [        45      $ ©N)Ú
isinstanceÚintr!   ©Úxs    ÚO/home/mande/repo/quber/.venv/lib/python3.13/site-packages/torch/_inductor/ir.pyÚ
_is_staticr‰   Ñ   s   € Ü�aœ#œw˜Ó(Ð(ó    )Úfrozenc                  óR   • \ rS rSr% S\S'   S\S'   S\S'   S\S	'   S
\S'   S\S'   Srg)ÚGraphPartitionSignatureéÕ   úOrderedSet[sympy.Symbol]Úsymbol_inputsz5dict[str, Union[IRNode, sympy.Expr, TorchBindObject]]Úinput_nodesúlist[IRNode]Úoutput_nodeszdict[str, bool]Úinput_deallocationÚboolÚskip_cudagraphú	list[str]Úconstant_names© N©Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__annotations__Ú__static_attributes__r™   rŠ   rˆ   r�   r�   Õ   s/   ‡ ð ,Ó+ð GÓFØÓð (Ó'ØÓð ÖrŠ   r�   c                ó&   ^• SU4S jjmT" U 5        g )Nc                ó²  >• U c  g [        U [        [        45      (       a  U  H  nT" U5        M     g [        U [        5      (       a   U R	                  5        H  nT" U5        M     g [        U [
        [        [        [        [        R                  R                  R                  [        [        [        [         4	5      (       d   S[#        U 5       S35       eg )NzFound zE, which is not a supported top level IR node. See [Note: Inductor IR])r„   ÚlistÚtupleÚdictÚvaluesÚ
ExpandViewÚDynamicScalarÚAssertScalarr   ÚsympyÚlogicÚboolalgÚBooleanr    r…   ÚEffectfulKernelÚShapeAsConstantBufferÚtype)ÚnodesÚnodeÚ_check_tensorboxs     €rˆ   r³   Ú%validate_ir.<locals>._check_tensorboxé   s¹   ø€ ð ‰=ØÜ˜¤¤e˜}×-Ñ-Û�Ù  Ö&ò ä˜œt×$Ñ$ØŸ™ž�Ù  Ö&ò 'ô ØäÜ!Ü ÜÜ—K‘K×'Ñ'×/Ñ/ÜÜÜ#Ü)ð
÷ñ ð ð œ˜e›˜Ð%jÐkóñ rŠ   )r±   úOptional[_NodeOrNodes]ÚreturnÚNoner™   )Únode_or_nodesr³   s    @rˆ   Úvalidate_irr¹   è   s   ø€ ÷ñ< �]Õ#rŠ   c                ób   ^ • [        T [        5      (       d   [        T 5      5       eSU 4S jjnU$ )Nc                 ó0   >• [        [        T5      " U 0 UD6$ rƒ   )Úgetattrrl   )ÚargsÚkwargsÚnames     €rˆ   ÚfnÚops_wrapper.<locals>.fn  s   ø€ Ü”s˜DÔ! 4Ð2¨6Ñ2Ð2rŠ   )r½   Úobjectr¾   rÂ   r¶   rm   )r„   Ústrr°   )r¿   rÀ   s   ` rˆ   Úops_wrapperrÄ   
  s+   ø€ Ü�dœC× Ñ Ð,¤$ t£*Ó,Ð ÷3ð €IrŠ   c           
     óf   ^• [        [        U [        [        U 5      5      5      5      mSU4S jjnU$ )Nc                ó–   >• [        U 5      [        T5      :X  d   e[        [        U 5      5       Vs/ s H
  oTU      PM     sn$ s  snf rƒ   ©ÚlenÚrange)ÚindexÚiÚ	inv_orders     €rˆ   ÚreindexÚ inverse_reorder.<locals>.reindex  sC   ø€ Ü�5‹zœS ›^Ó+Ð+Ð+Ü-2´3°u³:Ô->Ó?Ò->¨�i ‘lÔ#Ñ->Ñ?Ð?ùÒ?ó   ²A©rÊ   úSequence[_T]r¶   rÑ   )r¥   ÚziprÉ   rÈ   )ÚorderrÍ   rÌ   s     @rˆ   Úinverse_reorderrÔ     s*   ø€ Ü”S˜¤¤c¨%£jÓ 1Ó2Ó3€I÷@ð €NrŠ   c                ó   ^ • SU 4S jjnU$ )Nc                ó–   >• [        U 5      [        T5      :X  d   e[        [        U 5      5       Vs/ s H
  oTU      PM     sn$ s  snf rƒ   rÇ   )rÊ   rË   rÓ   s     €rˆ   rÍ   Úsame_reorder.<locals>.reindex  sB   ø€ Ü�5‹zœS ›ZÓ'Ð'Ð'Ü).¬s°5«zÔ):Ó;Ò): A�e˜A‘h”Ñ):Ñ;Ð;ùÒ;rÏ   rÐ   r™   )rÓ   rÍ   s   ` rˆ   Úsame_reorderrØ     s   ø€ ÷<ð €NrŠ   c                ó   ^ ^• SU U4S jjnU$ )Nc                ó    >• T" T" U 5      5      $ rƒ   r™   )rÊ   Úreindex1Úreindex2s    €€rˆ   rÍ   Ú fuse_reindexing.<locals>.reindex)  s   ø€ Ù™ ›Ó(Ð(rŠ   )rÊ   rÑ   r¶   zSequence[_V]r™   )rÛ   rÜ   rÍ   s   `` rˆ   Úfuse_reindexingrÞ   %  s   ù€ ÷)ð )ð €NrŠ   )é   r   é   rA   )é   r   rß   rà   rA   c                ój   • Ub  [        S U  5       5      (       a  [        U 5      nU$ [        X5      nU$ )z)
Convert strides to fill order (argsort)
c              3  ób   #   • U  H%  n[        U[        [        R                  45      v •  M'     g 7frƒ   ©r„   r…   rª   r!   ©Ú.0Úss     rˆ   Ú	<genexpr>Ú!get_fill_order.<locals>.<genexpr>9  s#   é € ÐQÊSÈ¤
¨1¬s´E·M±MÐ.B× CÐ CÊSùó   ‚-/)ÚallrV   rW   )ÚseqÚ	shape_envÚ
sorted_idxs      rˆ   Úget_fill_orderrï   3  s=   € ð ÑœCÑQÉSÓQ×QÑQÜ$+¨C£Lˆ
ð Ðô ! Ó0ˆ
ØÐrŠ   c                ó¦   • [        U 5       VVs0 s H  u  pX!_M	     nnn[        [        U 5      5       Vs/ s H  oCU   PM	     nnU$ s  snnf s  snf )zx
Convert stride order to fill order
For channel last format,

stride order = [3, 0, 2, 1] and fill order = [1, 3, 2, 0]
)Ú	enumeraterÉ   rÈ   )rÓ   ÚidxÚposÚlookuprË   Ú
fill_orders         rˆ   Ústride_order2fill_orderrö   A  sR   € ô (1°Ô'7Ô8Ò'7™8˜3ˆcŠhÑ'7€FÑ8Ü%*¬3¨u«:Ô%6Ó7Ò%6 ˜”)Ñ%6€JÐ7ØÐùó 9ùÚ7s
   �A¶Ac                óž   • [        X5      n[        [        U 5      5       Vs/ s H  nSPM     nn[        U5       H	  u  pVXTU'   M     U$ s  snf )z!
Convert strides to stride order
r   )rï   rÉ   rÈ   rñ   )rì   rí   rî   Ú_ÚoutrË   Úelems          rˆ   Úget_stride_orderrû   M  sL   € ô !/¨sÓ >€JÜœC ›H”oÓ
&’o�‹1‘o€CÐ
&Ü˜ZÖ(‰ˆØˆD‹	ñ )à€Jùò 's   ¢A
c                ó   • g rƒ   r™   ©r‡   Úguard_shapes     rˆ   Úir_node_to_tensorrÿ   Z  s   € ØBErŠ   c                ó   • g rƒ   r™   rý   s     rˆ   rÿ   rÿ   ^  s   € ØLOrŠ   c                óÆ  • U c  g U(       d%  [         R                  R                  R                  nO[        nU R                  5        Vs/ s H
  o2" U5      PM     nn[        U 5      (       a0  U R                  5       R                   Vs/ s H
  o2" U5      PM     nnO[        R                  U5      nU R                  5       nU R                  5       n[        U5      n[        U5      n[         R                  R                  R                  R                  5          [         R"                  " XEXgS9R%                  5       nS S S 5        U$ s  snf s  snf ! , (       d  f       W$ = f)N)ÚsizeÚstrideÚdtypeÚdevice)rn   ÚgraphÚsizevarsÚ	size_hintr#   Úget_sizeÚis_storage_and_layoutÚ
get_layoutr  ÚFlexibleLayoutÚcontiguous_stridesÚ	get_dtypeÚ
get_devicer\   rí   Úsuppress_guardsÚtorchÚempty_stridedÚzero_)	r‡   rþ   Úshape_fnrç   r  r  r  r  Úts	            rˆ   rÿ   rÿ   b  s  € ð 	�yØö Ü—7‘7×#Ñ#×-Ñ-‰äˆØ!"§¡¤Ó.¢˜AˆH�QŽK¡€DÐ.ä˜Q×ÑØ'(§|¡|£~×'<Ò'<Ó=Ò'< !�(˜1–+Ñ'<ˆÐ=ˆä×2Ñ2°4Ó8ˆØ�K‰K‹M€EØ�\‰\‹^€FÜ" 4Ó(€Dä$ VÓ,€FÜ	
�‰×	Ñ	×	#Ñ	#×	3Ñ	3Õ	5Ü×ÒØ¨Eñ
ç
‰%‹'ð 	
÷ 
6ð €Hùò /ùò >÷ 
6Ô	5ð €Hús   Á	EÂEÄ$EÅ
E c                óD   • [        U [        5      (       a
  U (       d  S /$ U $ rƒ   )r„   r£   ©Úvalues    rˆ   Úmay_convert_to_optionalr    s!   € ô �%œ×Ñ¦uð ˆvˆØ€LrŠ   c                ó@  • [        U [        5      (       d  U c  U $ [        U [        R                  5      (       a  U R                  $ [        U [
        [        45      (       a  [        U R                  5       5      $ [        SU  S[	        U 5      R                   S35        g )Nzget_device_type(ú: Ú))r„   rÃ   r  r  r°   r€   Ú
OutputSpecÚget_device_typer  r   r›   r†   s    rˆ   r  r  ‰  sz   € ô �!”S×Ñ˜Q™YØˆÜ	�A”u—|‘|×	$Ñ	$Ø�v‰vˆÜ	�Aœ¤
Ð+×	,Ñ	,Ü˜qŸ|™|›~Ó.Ð.äÐ# A 3 b¬¨a«×)9Ñ)9Ð(:¸!Ð<Õ=rŠ   c                óæ   • [        U 5      nUS;   a  [        [        U S35      S:X  a  ggUb  [        U5      =nc  gSSKJn  [        U[        5      (       d   [        U5      5       e[        X#5      $ )N)ÚcpuÚcudaÚ_backendÚtritonTFrA   )ÚTritonScheduling)	r  r¼   rB   rF   Úcodegen.tritonr$  r„   r°   Ú
issubclass)r‡   r  Údevice_schedulingr$  s       rˆ   Ú	is_tritonr(  –  sy   € Ü˜QÓ€Fð �Ó Ü”6˜f˜X XÐ.Ó/°8Ó;ØØà‰Ü!:¸6Ó!BÐBÐÑKàÝ0äÐ'¬×.Ñ.ÐG´Ð5FÓ0GÓGÐ.ÜÐ'Ó:Ð:rŠ   c                ó   • [        U 5      S:H  $ )Nr   )r  r†   s    rˆ   Úis_cpur*  ª  s   € Ü˜1Ó Ñ&Ð&rŠ   c                ój  ^• [        U [        5      (       aM  U R                  5       b<  [        U R	                  5       5      (       d  [        U R                  5       5      (       a  g[        R                  " U4S jU R	                  5       S S  5       6 n[        R                  " [        R                  " U R	                  5       S   S5      [        R                  " U R                  5       S   S5      5      n[        R                  " X#5      n[        R                  R                  R                  U5      $ )NFc              3  óf   >#   • U  H&  n[         R                  " [        UT5      S 5      v •  M(     g7f)r   N)rª   ÚEqr>   )ræ   rç   Ú	alignments     €rˆ   rè   Ú-is_aligned_realized_tensor.<locals>.<genexpr>¸  s(   øé € Ð	FÒ2E¨QŒ%�(Š(”3�q˜)Ó$ a×
(Ð
(Ò2Eùs   ƒ.1éÿÿÿÿrA   )r„   r€   Úmaybe_get_strider2   Ú
get_strider	  rª   ÚAndÚOrr-  ÚLern   r  r  Úguard_or_false)r‡   r.  Úaligned_stridesÚaligned_last_dimÚ
is_aligneds    `   rˆ   Úis_aligned_realized_tensorr:  ®  sÖ   ø€ ä�qœ&×!Ñ!Ø×ÑÓÑ'Ü  §¡£×0Ñ0Ü  §¡£×.Ñ.àä—i’iÜ	F°!·,±,³.ÀÀ"Ñ2EÓ	Fð€Oô —x’xÜ�Š�—‘“ Ñ# QÓ'¬¯ª°!·*±*³,¸rÑ2BÀAÓ)FóÐô —’˜?Ó=€Jô �7‰7×Ñ×*Ñ*¨:Ó6Ð6rŠ   c                ó  • [        U5      [        U 5      :X  a  [        U 5      [        U5      :X  d   e[        X U5       H½  u  p4n[        R                  R                  R                  US5      (       a  M7  [        R                  R                  R                  XE5      (       a  Mg  [        R                  R                  R                  U5      [        R                  R                  R                  U5      :w  d  M½    g   g)zH
Returns true if the strides are equal, ignoring dimensions of size 1 .
rA   FT)rÈ   rÒ   rn   r  r  Ústatically_known_leqÚstatically_known_equalsÚsymbolic_hint)Ústrides1Ústrides2ÚshapeÚdimÚs1Ús2s         rˆ   Úsignificant_strides_equalrE  Ã  s¹   € ô ˆu‹:œ˜X›Ó&¬3¨x«=¼CÀ»MÓ+IÐIÐIÜ˜5¨HÖ5‰ˆ�Ü�7‰7×Ñ×0Ñ0°°a×8Ñ8Ùä�w‰w×Ñ×7Ñ7Ø÷
ó 
ä�g‰g×Ñ×,Ñ,¨RÓ0´A·G±G×4DÑ4D×4RÑ4RÐSUÓ4VÕVÙñ 6ð rŠ   c                ót  • [        U 5      (       d  U $ [        S [        XR                  5       5       5       5      (       a  U $ [	        XR                  5       U R                  5       5      (       d  U $ [        U 5      u  p#/ UR                  Qn[        U R                  5       5       H<  u  pV[        R                  R                  R                  US5      (       d  M6  X   XE'   M>     [        UR                  UR                  UR                   UUR"                  UR$                  5      n['        [)        X'S95      $ )a  
Tries to match the strides of the tensor to those in the meta_strides. Strides of insignificant
dimensions - size 0 or 1 - will be updated.

If there are real stride differences (NHWC vs NCHW), or the tensor is not realized, then the input will be returned
c              3  óx   #   • U  H0  u  p[         R                  R                  R                  X5      v •  M2     g 7frƒ   ©rn   r  r  r=  ©ræ   rC  rD  s      rˆ   rè   Ú2try_match_insignificant_strides.<locals>.<genexpr>å  s1   é € ð â7‰FˆBô 	
�‰×Ñ×0Ñ0°×8Ð8Ú7ùó   ‚8:rA   ©ÚdataÚlayout)r
  rë   rÒ   r2  rE  r	  Úas_storage_and_layoutr  rñ   rn   r  r  r<  ÚFixedLayoutr  r  r  ÚoffsetÚ	is_pinnedr   ÚReinterpretView)ÚtensorÚstridesÚstorageÚ
old_layoutÚ
new_striderË   rç   Ú
new_layouts           rˆ   Útry_match_insignificant_stridesrZ  Ø  s  € ô ! ×(Ñ(Øˆä
ñ ä˜'×#4Ñ#4Ó#6Ô7ó÷ ñ ð ˆä$ W×.?Ñ.?Ó.AÀ6Ç?Á?ÓCT×UÑUØˆä/°Ó7Ñ€GØ%�:×$Ñ$Ð%€JÜ˜&Ÿ/™/Ó+Ö,‰ˆÜ�7‰7×Ñ×0Ñ0°°A×6Ó6Ø#™JˆJ‹Mñ -ô Ø×ÑØ×ÑØ�‰ØØ×ÑØ×Ñó€Jô ”_¨'ÑEÓFÐFrŠ   c                óÒ   • U R                   R                  SS9S   n[        UR                  5       VVs/ s H  u  p#UPM	     snnUR                  S'   SSKJn  U" U 5        g s  snnf )NÚoutput©Úopr   Úuser_visible_output_idxs)Úrecord_original_output_strides)r  Ú
find_nodesrñ   r½   ÚmetaÚtorch._inductor.compile_fxr`  )ÚgmÚoutput_noderò   rø   r`  s        rˆ   Úgm_original_output_stridesrf  ÿ  sd   € Ø—(‘(×%Ñ%¨Ð%Ð2°1Ñ5€Kä# K×$4Ñ$4Ô5ô4Ú5‘�‹Ñ5ò4€K×ÑÐ/Ñ0õ Já" 2Õ&ùó4s   µA#c                óª   • [        5       nU  H9  nU[        UR                  5       SS9-  nU[        UR                  5       SS9-  nM;     [	        U5      $ )NF©Úunbacked_only)r:   r(   r	  r2  r£   )ÚinputsÚsym_varsÚinps      rˆ   Úget_symbolic_inputsrm  	  sP   € Ü!+£€HÛˆØÔ$ S§\¡\£^À5ÑIÑIˆØÔ$ S§^¡^Ó%5ÀUÑKÑKŠñ ô �‹>ÐrŠ   c                ó  • [        U [        5      (       a  U R                  n [        U [        5      (       a  U R	                  5       n [        U [
        5      (       a  U R                  n [        U [        5      (       a  U R                  5       $ S $ rƒ   )r„   r   rM  ÚBaseViewÚunwrap_viewÚ
StorageBoxÚBufferÚget_namer†   s    rˆ   Útry_get_namert    sc   € Ü�!”Y×ÑØ�F‰FˆÜ�!”X×ÑØ�M‰M‹OˆÜ�!”Z× Ñ Ø�F‰FˆÜ% a¬×0Ñ0ˆ1�:‰:‹<Ð:°dÐ:rŠ   c                  óÄ  • \ rS rSr% Sr\" 5       rS\S'   \R                  " SS9r
S\S'   \R                  " SS9rS	\S
'   \R                  " SS9rS\S'   \R                  " SS9rS\S'   \\R                   SKS j5       5       r\SLS j5       rSMS jrSNS jrSOS jrSPS jrSQS jrSRS jrSOS jrSSSTS jjr SU       SVS jjrSWS jrSXS jrSYS jrSZS jrS[S jr S\S jr!S]S  jr"S^S! jr#S_S" jr$\%S`S# j5       r&SaS$ jr'S]S% jr(SbS& jr)ScSdS( jjr*SeS) jr+SfS* jr,S]S+ jr-SgS, jr.ShS- jr/SiS. jr0S_S/ jr1SjS0 jr2SbS1 jr3S]S2 jr4ScSkS3 jjr5SlS4 jr6SNS5 jr7SmS6 jr8SNS7 jr9 Sn     SoS8 jjr:SpS9 jr;SqS: jr< Sn     SrS; jjr=SsS< jr>StS= jr?SuS> jr@SvS? jrA Sn   SwS@ jjrBSbSA jrCS^SB jrDS]SC jrES]SD jrFSxSE jrGSySF jrHSjSG jrISySH jrJ\K(       a  \%SWSI j5       rLSJrMg'SJrMg')zr€   i  zÑBase class for all intermediate representation (IR) nodes in TorchInductor.

Note:
    This is an abstract base class. Most methods raise NotImplementedError
    and must be overridden by concrete subclasses.
zClassVar[OrderedSet[Any]]Ú_current_originsF)ÚinitúOrderedSet[Any]ÚoriginsúOptional[list[str]]Ú	tracebackúOptional[torch.fx.Node]Úorigin_nodeúdict[str, Any]r   c              #  ó†   #   • [         R                  nX-  [         l         S v •  U[         l        g ! U[         l        f = f7frƒ   )r€   rv  )ry  Úolds     rˆ   Úcurrent_originsÚIRNode.current_origins.  s4   é € ô ×%Ñ%ˆØ"%¡-ŒÔð	*Ûà&)ŒFÕ#ø cŒFÕ#üs   ‚A¡1 ¥A±>¾Ac                óL   • [        U [        [        [        [        [
        45      $ rƒ   )r„   ÚComputedBufferÚInputsKernelÚInputBufferrS  ÚTemplateBuffer)r²   s    rˆ   Úis_realized_nodeÚIRNode.is_realized_node8  s&   € äØäÜÜÜÜðó	
ð 		
rŠ   c                ó0   • [         R                  XU5        g rƒ   )rÂ   Ú__setattr__)ÚselfÚattrr  s      rˆ   Ú_post_init_setattrÚIRNode._post_init_setattrE  s   € ô 	×Ñ˜4 uÕ-rŠ   c                ó  • [        U R                  5      nU R                  SU5        U R                  S[        R                  (       a  [
        R                  " 5       OS 5        U R                  SS 5        U R                  S0 5        g )Nry  r{  r}  r   )r:   rv  rŽ  rB   Údebug_ir_tracebackr{  Úformat_stack)rŒ  ry  s     rˆ   Ú__post_init__ÚIRNode.__post_init__K  sk   € Ü˜T×2Ñ2Ó3ˆØ×Ñ 	¨7Ô3Ø×ÑØ´V×5N×5Nœ×/Ò/Ô1ÐTXô	
ð 	×Ñ ¨tÔ4à×Ñ ¨rÕ2rŠ   c                óB   • [        S U R                  5        5       5      $ )Nc              3  ó8   #   • U  H  oR                   v •  M     g 7frƒ   ©r¿   ©ræ   Údeps     rˆ   rè   Ú(IRNode.get_read_names.<locals>.<genexpr>V  ó   é € Ð?Ò.> sŸ(ž(Ò.>ùó   ‚©r:   Ú	get_reads©rŒ  s    rˆ   Úget_read_namesÚIRNode.get_read_namesU  ó   € ÜÑ?¨d¯n©nÔ.>Ó?Ó?Ð?rŠ   c                ó   • U R                   $ rƒ   )r{  rŸ  s    rˆ   Úget_tracebackÚIRNode.get_tracebackX  s   € Ø�~‰~ÐrŠ   c                ó   • U R                   $ rƒ   ©r}  rŸ  s    rˆ   Úget_origin_nodeÚIRNode.get_origin_node[  ó   € Ø×ÑÐrŠ   c                ó   • g rƒ   r™   rŸ  s    rˆ   Úget_defining_opÚIRNode.get_defining_op^  ó   € ØrŠ   c                óÀ  • [        5       nU R                  n[        U [        5      (       a-  U R	                  5       nU R
                  (       a  [        U/5      nU Hÿ  n[        US5      (       a.  UR                  (       a  UR                  UR                  5        MB  [        R                  R                  R                  R                  S0 5      R                  UR                  / 5      n[        U[        5      (       d  M§  U HQ  n[        R                  R                  R                   R                  US 5      nU(       d  M@  UR                  U5        MS     GM     U$ )NÚstack_traceÚ	postToPre)r:   ry  r„   ÚExternKernelr¨  r}  Úhasattrr°  Úaddr  Ú	_inductorÚdebugÚ _inductor_post_to_pre_grad_nodesÚgetr¿   r£   Ú#_inductor_pre_grad_node_stack_trace)rŒ  Ústack_tracesry  r}  r²   Úpre_grad_nodesÚ	node_namer°  s           rˆ   Úget_stack_tracesÚIRNode.get_stack_tracesa  s  € ô )3«ˆØ—,‘,ˆÜ�dœL×)Ñ)Ø×.Ñ.Ó0ˆKØ××Ü$ k ]Ó3�ÛˆDÜ�t˜]×+Ñ+°×0@×0@à× Ñ  ×!1Ñ!1Ö2ô —O‘O×)Ñ)×JÑJ×NÑNØ#Øó÷ ‘c˜$Ÿ)™) RÓ(ð ô " .´$×7Ñ7ÙÛ!/�IäŸ™×-Ñ-×QÑQ×UÑUØ% tóð  ÷
 #�{Ø$×(Ñ(¨Ö5ô "0ñ ð, ÐrŠ   c                ó6  • S[        U SS5       3nU(       a  [        U5      S:”  a  US S  S3nU R                  5       (       d  U/$ / nU R                  5        H8  nUR                  S5        X4R	                  S5      -  nUR                  S	5        M:     U/U-   $ )
Nzorigins=ry  Ú é@   é=   z...zstack_traces = {Ú
Ú})r¼   rÈ   r½  ÚappendÚsplit)rŒ  Úshortenry  Ústack_trace_strr°  s        rˆ   Úcommon_reprÚIRNode.common_repr‚  s¦   € ØœW T¨9°bÓ9Ð:Ð;ˆÞ”s˜7“| bÓ(à   "˜˜ cÐ*ˆGØ×$Ñ$×&Ñ&Ø�9ÐàˆØ×0Ñ0Ö2ˆKØ×"Ñ"Ð#5Ô6Ø×0Ñ0°Ó6Ñ6ˆOØ×"Ñ" 3Ö'ñ 3ð ˆy˜?Ñ*Ð*rŠ   c                ó.  • [        U5      [        U R                  U5      5      -   n[        [        [        U5      5      nU(       a5  [	        SR                  U5      5      n[        U 5      R                   SU S3$ [        U 5      R                   SU S3$ )Nz,
z(
z
)Ú(r  )r£   rÉ  ÚmaprÃ   ÚindentÚjoinr°   r›   )rŒ  ÚlinesrÇ  Ú	multilineÚ	new_liness        rˆ   Ú
str_helperÚIRNode.str_helper‘  s„   € ô �U“œd 4×#3Ñ#3°GÓ#<Ó=Ñ=ˆÜ”Sœ˜e“_Ó%ˆÞä˜uŸz™z¨%Ó0Ó1ˆIÜ˜4“j×)Ñ)Ð*¨#¨i¨[¸Ð<Ð<ä˜4“j×)Ñ)Ð*¨!¨E¨7°!Ð4Ð4rŠ   c                ó   • U R                   $ rƒ   ©r  rŸ  s    rˆ   r  ÚIRNode.get_dtype�  ó   € Ø�z‰zÐrŠ   c                óD   •  U R                  5       $ ! [         a     g f = frƒ   )r  ÚNotImplementedErrorrŸ  s    rˆ   Úmaybe_get_dtypeÚIRNode.maybe_get_dtype   s&   € ð	Ø—>‘>Ó#Ð#øÜ"ó 	Ùð	úó   ‚ ’
žc                ó2   • [        S[        U 5       S35      e)Nz#get_layout() is not implemented by Ú!©rÚ  r°   rŸ  s    rˆ   r  ÚIRNode.get_layout¦  s   € Ü!Ð$GÌÈTË
À|ÐSTÐ"UÓVÐVrŠ   c                óD   •  U R                  5       $ ! [         a     g f = frƒ   )r  rÚ  rŸ  s    rˆ   Úmaybe_get_layoutÚIRNode.maybe_get_layout©  ó&   € ð	Ø—?‘?Ó$Ð$øÜ"ó 	Ùð	úrÝ  c                ó"   • U R                  5       $ rƒ   )r  rŸ  s    rˆ   Úget_output_specÚIRNode.get_output_spec¯  s   € Ø�‰Ó Ð rŠ   c                óD   •  U R                  5       $ ! [         a     g f = frƒ   )rç  rÚ  rŸ  s    rˆ   Úmaybe_get_output_specÚIRNode.maybe_get_output_spec²  s(   € ð	Ø×'Ñ'Ó)Ð)øÜ"ó 	Ùð	úrÝ  c                ó>   • [        U R                  5       [        5      $ )z4True for single tensor output (excludes MultiOutput))r„   rê  ÚLayoutrŸ  s    rˆ   Úhas_tensor_outputÚIRNode.has_tensor_output¸  s   € ä˜$×4Ñ4Ó6¼Ó?Ð?rŠ   c                ó2   • [        S[        U 5       S35      e)Nz!get_size() is not implemented by rß  rà  rŸ  s    rˆ   r	  ÚIRNode.get_size¼  s   € Ü!Ð$EÄdÈ4ÃjÀ\ÐQRÐ"SÓTÐTrŠ   c                óD   •  U R                  5       $ ! [         a     g f = frƒ   )r	  rÚ  rŸ  s    rˆ   Úmaybe_get_sizeÚIRNode.maybe_get_size¿  ó%   € ð	Ø—=‘=“?Ð"øÜ"ó 	Ùð	úrÝ  c                ó"   • U R                  5       $ rƒ   ©r	  rŸ  s    rˆ   rA  ÚIRNode.shapeÅ  s   € à�}‰}‹ÐrŠ   c                ó4   • [        U R                  5       5      $ rƒ   )ri   r	  rŸ  s    rˆ   Ú	get_numelÚIRNode.get_numelÉ  s   € Ü˜TŸ]™]›_Ó-Ð-rŠ   c                óš   • [         R                  R                  R                  [        R
                  " U R                  5       S5      5      $ ©Nr   ©rn   r  r  Ústatically_known_truerª   r-  rú  rŸ  s    rˆ   Úis_zero_elementsÚIRNode.is_zero_elementsÌ  ó0   € Ü�w‰w×Ñ×5Ñ5´e·h²h¸t¿~¹~Ó?OÐQRÓ6SÓTÐTrŠ   c                ó0   • [        S[        U 5       35      e)aÉ  
If the IRNode refers to data which has not been materialized (e.g.,
it is a Pointwise/Reduction that could potentially have more
compute fused into it), realize the IRNode into physical memory,
ending the possibility of fusing into it, but allowing, e.g., multiple
users to access the data without having to recompute.

Check StorageBox.realize for a particularly notable implementation.

TODO(ezyang): I think, in principle, every IRNode should have an
implementation of this, and most of the time no-op is OK, but you
really do have to audit each IRNode for this, so for now, raise
an error if it's not implemented.  Note that some code in graph.py
will catch this thrown error and suppress it with a warning.
zrealize NYI on rà  rŸ  s    rˆ   ÚrealizeÚIRNode.realizeÏ  s   € ô  " O´D¸³J°<Ð"@ÓAÐArŠ   Nc                ó0   • [        S[        U 5       35      e)Nzcodegen_reference NYI on rà  ©rŒ  Úwriters     rˆ   Úcodegen_referenceÚIRNode.codegen_referenceá  s   € Ü!Ð$=¼dÀ4»j¸\Ð"JÓKÐKrŠ   c                ó   • g rƒ   r™   rŸ  s    rˆ   r  ÚIRNode.get_deviceä  r®  rŠ   c                ó0   • U R                  5       nUc   eU$ rƒ   )r  ©rŒ  r  s     rˆ   Úget_device_or_errorÚIRNode.get_device_or_errorç  s   € Ø—‘Ó"ˆØÑ!Ð!Ð!ØˆrŠ   c                ó   • g©NFr™   rŸ  s    rˆ   Úhas_exceeded_max_readsÚIRNode.has_exceeded_max_readsì  ó   € ØrŠ   c                ó>   • [        [        U 5      R                  5      erƒ   ©rÚ  r°   r›   rŸ  s    rˆ   Úmake_loaderÚIRNode.make_loaderï  ó   € Ü!¤$ t£*×"5Ñ"5Ó6Ð6rŠ   c                ó>   • [        [        U 5      R                  5      erƒ   r  rŸ  s    rˆ   Úmake_indexerÚIRNode.make_indexerò  r  rŠ   c                ó>   • [        [        U 5      R                  5      erƒ   r  rŸ  s    rˆ   r2  ÚIRNode.get_strideõ  r  rŠ   c                óD   •  U R                  5       $ ! [         a     g f = frƒ   )r2  rÚ  rŸ  s    rˆ   r1  ÚIRNode.maybe_get_strideø  rå  rÝ  c                ó>   • [        [        U 5      R                  5      erƒ   r  rŸ  s    rˆ   rs  ÚIRNode.get_nameþ  r  rŠ   c                óD   •  U R                  5       $ ! [         a     g f = frƒ   )rs  rÚ  rŸ  s    rˆ   Úmaybe_get_nameÚIRNode.maybe_get_name  rõ  rÝ  c                óz   •  U R                  5       [        R                  R                  ;   $ ! [         a     gf = fr  )rs  rn   r  Úgraph_inputsrÚ  rŸ  s    rˆ   Úis_input_bufferÚIRNode.is_input_buffer  s4   € ð	Ø—=‘=“?¤a§g¡g×&:Ñ&:Ñ:Ð:øÜ"ó 	Ùð	ús   ‚*- ­
:¹:c                ó   • gr  r™   ©rŒ  Ú	thresholds     rˆ   Úhas_large_inner_fnÚIRNode.has_large_inner_fn  r  rŠ   c                ó   • g rƒ   r™   ©rŒ  Úuserss     rˆ   Ú
mark_reuseÚIRNode.mark_reuse  ó   € ØrŠ   c                ó   • g rƒ   r™   rŸ  s    rˆ   Úrealize_hintÚIRNode.realize_hint  r5  rŠ   c                ó>   • [        [        U 5      R                  5      erƒ   r  rŸ  s    rˆ   rp  ÚIRNode.unwrap_view  r  rŠ   c                ó>   • [        [        U 5      R                  5      erƒ   r  rŸ  s    rˆ   Úfreeze_layoutÚIRNode.freeze_layout  r  rŠ   c                ó>   • [        [        U 5      R                  5      erƒ   r  ©rŒ  rÓ   Úallow_paddings      rˆ   Úfreeze_layout_with_stride_orderÚ&IRNode.freeze_layout_with_stride_order  ó   € ô "¤$ t£*×"5Ñ"5Ó6Ð6rŠ   c                ó>   • [        [        U 5      R                  5      erƒ   r  ©rŒ  rÓ   s     rˆ   Úfreeze_layout_with_fill_orderÚ$IRNode.freeze_layout_with_fill_order!  r  rŠ   c                ó>   • [        [        U 5      R                  5      erƒ   r  ©rŒ  r  s     rˆ   Úfreeze_layout_with_same_orderÚ$IRNode.freeze_layout_with_same_order$  r  rŠ   c                ó>   • [        [        U 5      R                  5      erƒ   r  ©rŒ  Úexact_stridesr@  s      rˆ   Ú freeze_layout_with_exact_stridesÚ'IRNode.freeze_layout_with_exact_strides'  rC  rŠ   c                ó>   • [        [        U 5      R                  5      erƒ   r  rŸ  s    rˆ   Úget_read_writesÚIRNode.get_read_writes,  r  rŠ   c                ó6   • U R                  5       R                  $ rƒ   ©rR  ÚreadsrŸ  s    rˆ   rž  ÚIRNode.get_reads/  ó   € Ø×#Ñ#Ó%×+Ñ+Ð+rŠ   c                ó4   • [        U R                  5       5      $ rƒ   )rÈ   rž  rŸ  s    rˆ   Ú	num_readsÚIRNode.num_reads2  s   € Ü�4—>‘>Ó#Ó$Ð$rŠ   c                ó>   • [        [        U 5      R                  5      erƒ   r  rŸ  s    rˆ   Úget_storage_numelÚIRNode.get_storage_numel5  r  rŠ   c                ó>   • [        [        U 5      R                  5      erƒ   r  ©rŒ  ri  s     rˆ   Úget_free_symbol_usesÚIRNode.get_free_symbol_uses8  rC  rŠ   c                ó>   • [        [        U 5      R                  5      erƒ   r  rŸ  s    rˆ   Úget_reduction_typeÚIRNode.get_reduction_type=  r  rŠ   c                ó>   • [        [        U 5      R                  5      erƒ   r  rŸ  s    rˆ   Úget_reduction_sizeÚIRNode.get_reduction_size@  r  rŠ   c                ó   • gr  r™   rŸ  s    rˆ   Ú	is_externÚIRNode.is_externC  r  rŠ   c                ó   • gr  r™   rŸ  s    rˆ   Úis_no_opÚIRNode.is_no_opF  r  rŠ   c                ó>   • [        [        U 5      R                  5      erƒ   r  r  s     rˆ   Úconstant_to_deviceÚIRNode.constant_to_deviceI  r  rŠ   c                ó>   • [        [        U 5      R                  5      erƒ   r  rŸ  s    rˆ   Úget_mutation_namesÚIRNode.get_mutation_namesL  r  rŠ   c                ó>   • [        [        U 5      R                  5      erƒ   r  rŸ  s    rˆ   Úget_operation_nameÚIRNode.get_operation_nameO  r  rŠ   c                ó>   • [        [        U 5      R                  5      erƒ   r  rŸ  s    rˆ   Úget_inputs_that_alias_outputÚ#IRNode.get_inputs_that_alias_outputR  r  rŠ   c                ó   • g rƒ   r™   rŸ  s    rˆ   r  ÚIRNode.dtypeW  s   € Ø(+rŠ   r™   )ry  zOrderedSet[Node]r¶   zGenerator[None, None, None]©r²   r€   r¶   r•   )r�  rÃ   r  r   r¶   r·   ©r¶   r·   ©r¶   úOrderedSet[str])r¶   rz  ©r¶   r|  ©r¶   zOptional[Operation]©T)rÇ  r•   r¶   úSequence[str])TT)rÐ  zSequence[object]rÇ  r•   rÑ  r•   r¶   rÃ   ©r¶   útorch.dtype)r¶   zOptional[torch.dtype]©r¶   rí  )r¶   zOptional[Layout]©r¶   r  )r¶   zOptional[OutputSpec]©r¶   r•   ©r¶   úSequence[Expr])r¶   úOptional[Sequence[_IntLike]])r¶   z.Union[_IntLike, sympy.Rel, Sequence[_IntLike]]©r¶   r    ©r¶   úOptional[str]rƒ   ©r  zOptional[IndentedBuffer]r¶   rÃ   ©r¶   úOptional[torch.device]©r¶   útorch.device©r¶   ú$Callable[[Sequence[Expr]], OpsValue]©r¶   ú Callable[[Sequence[Expr]], Expr]©r¶   úSequence[_IntLike]©r¶   rÃ   ©r-  úOptional[int]r¶   r•   ©r2  r…   r¶   r·   ©r¶   r€   ©F©rÓ   úSequence[int]r@  r•   r¶   r·   ©rÓ   r¢  r¶   r·   ©r  rš  r¶   r·   ©rN  rš  r@  r•   r¶   r·   ©r¶   údependencies.ReadWrites©r¶   zOrderedSet[Dep]©r¶   r…   ©r¶   rz   ©ri  r•   r¶   r�   ©r  r”  r¶   r€   ©r¶   r„  )Nr›   rœ   r�   rž   Ú__doc__r:   rv  rŸ   ÚdataclassesÚfieldry  r{  r}  r   ÚstaticmethodÚ
contextlibÚcontextmanagerr�  rˆ  rŽ  r“  r   r¤  r¨  r¬  r½  rÉ  rÓ  r  rÛ  r  rã  rç  rê  rî  r	  ró  ÚpropertyrA  rú  r   r  r	  r  r  r  r  r  r2  r1  rs  r%  r)  r.  r3  r7  rp  r<  rA  rF  rJ  rO  rR  rž  rZ  r]  ra  rd  rg  rj  rm  rp  rs  rv  ry  r   r  r    r™   rŠ   rˆ   r€   r€     s^  ‡ ññ 3=³,ÐÐ/Ó>ð  +×0Ò0°eÑ<€Gˆ_Ó<à%0×%6Ò%6¸EÑ%B€IÐ"ÓBØ+6×+<Ò+<À%Ñ+H€KÐ(ÓHà"-×"3Ò"3¸Ñ"?€K�Ó?àØ×Ñó*ó ó ð*ð ó

ó ð

ô.ô3ô@ôô ôôöB+ð  PTð
5Ø%ð
5Ø04ð
5ØHLð
5à	õ
5ôôôWôô!ôô@ôUôð óó ðô.ôUôBö$Lôôô
ô7ô7ô7ôô7ôôöôôô7ô7ð ;@ð7Ø"ð7Ø37ð7à	õ7ô
7ô7ð HMð7Ø/ð7Ø@Dð7à	õ7ô
7ô,ô%ô7ð %*ð7Ø!ð7à	!õ7ô
7ô7ôôô7ô7ô7ô7ö à	Û+ó 
Û+ò rŠ   c                  ó¶   • \ rS rSrSS jrSS jrSS jrSS jrSS jrSS jr	SS jr
SS	 jrSS
 jrSS jrSS jrSS jrSS jr S   S S jjrS!S jrSrg)"Ú	Operationi[  c                ó   • S U l         g rƒ   ©Úoperation_namerŸ  s    rˆ   r“  ÚOperation.__post_init__]  s
   € Ø-1ˆÕrŠ   c                ó   • [         erƒ   ©rÚ  rŸ  s    rˆ   r  ÚOperation.get_device`  ó   € Ü!Ð!rŠ   c                ó@   • [        U S5      (       d   eU R                  $ ©Nr}  )r³  r}  rŸ  s    rˆ   r¨  ÚOperation.get_origin_nodec  s!   € Ü�t˜]×+Ñ+Ð+Ð+Ø×ÑÐrŠ   c                ó@   • [        U S5      (       d   eU R                  $ )Nry  )r³  ry  rŸ  s    rˆ   Úget_originsÚOperation.get_originsg  s   € Ü�t˜Y×'Ñ'Ð'Ð'Ø�|‰|ÐrŠ   c                ó8   • U R                   c   eU R                   $ rƒ   r¸  rŸ  s    rˆ   rv  ÚOperation.get_operation_namek  s    € Ø×"Ñ"Ñ.Ð.Ð.Ø×"Ñ"Ð"rŠ   c                ó   • gr  r™   rŸ  s    rˆ   rj  ÚOperation.is_externo  r  rŠ   c                ó   • gr  r™   rŸ  s    rˆ   rm  ÚOperation.is_no_opr  r  rŠ   c                ó   • [         erƒ   r¼  rŸ  s    rˆ   rR  ÚOperation.get_read_writesu  r¾  rŠ   c                ó&   • XR                  5       ;   $ rƒ   )r   ©rŒ  r¿   s     rˆ   Ú
is_user_ofÚOperation.is_user_ofx  s   € Ø×*Ñ*Ó,Ñ,Ð,rŠ   c                óB   • [        S U R                  5        5       5      $ )Nc              3  ó8   #   • U  H  oR                   v •  M     g 7frƒ   r—  r˜  s     rˆ   rè   Ú+Operation.get_read_names.<locals>.<genexpr>|  r›  rœ  r�  rŸ  s    rˆ   r   ÚOperation.get_read_names{  r¢  rŠ   c                ó6   • U R                  5       R                  $ rƒ   rU  rŸ  s    rˆ   rž  ÚOperation.get_reads~  rX  rŠ   c                ó   • [         erƒ   r¼  rŸ  s    rˆ   Úget_outputsÚOperation.get_outputs�  r¾  rŠ   c                ó   • [        5       $ rƒ   r9   rŸ  s    rˆ   Úget_unbacked_symbol_defsÚ"Operation.get_unbacked_symbol_defs„  ó
   € Ü‹|ÐrŠ   c                ó   • [        5       $ )a  
When unbacked_only=True:
Returns the unbacked symbols which are required to be in scope in
order to successfully perform codegen for this buffer.  For example,
a buffer that corresponds to an extern kernel call that takes i0 as
an argument would return {i0} here.  This is used to generate necessary
dependencies that ensure we actually bind i0 in codegen before you
try to use it.

Note that this is NOT transitive; in particular, if this buffer takes
in as input another buffer with dynamic shape (e.g., (i0,)), we will
not report it here, because you will already have a dependency
on that buffer, which will eventually have a dependency on i0 if
necessary.

When unbacked_only=False:
Similar to `unbacked_only=True` but including all free symbols
instead of only free unbacked symbols.
r9   r`  s     rˆ   ra  ÚOperation.get_free_symbol_uses‡  s   € ô, ‹|ÐrŠ   c                ó   • g)z�
Gets extra global memory size needed by this buffer.
Some algorithms (e.g. group gemm) may require extra global memory in the generated code.
r   r™   rŸ  s    rˆ   Úget_workspace_sizeÚOperation.get_workspace_sizeŸ  s   € ð
 rŠ   r¸  Nr~  r‘  r�  )r¶   rx  r›  r‰  r¦  )r¿   rÃ   r¶   r•   r  r¨  ©r¶   úlist[Buffer]©r¶   r�   r   r«  r©  )r›   rœ   r�   rž   r“  r  r¨  rÃ  rv  rj  rm  rR  rÏ  r   rž  rØ  rÛ  ra  rá  r    r™   rŠ   rˆ   r¶  r¶  [  sc   † ô2ô"ô ôô#ôôô"ô-ô@ô,ô"ôð %*ðØ!ðà	!õ÷0rŠ   r¶  c                  óv  • \ rS rSr% S\S'   S\S'   S\S'   S\S	'   \" S 5       S    S!S
 jj5       rS"S jrS#S jr\r	S$S jr
S%S jrS&S jrS&S jr\S'S j5       r\\R$                  4S(S jj5       r\S)S j5       rS*S jr\S#S j5       rS+S,S jjrS S-S jjrS.S jrS/S jrS0S jrS&S jrS1S jrS2S jrSr g)3ÚLoopsi§  r”  r  r†  r  úCallable[..., Any]Úinner_fnrš  Úrangesc                ó‚   ^• [        5       R                  " / U4S jU R                   5       QU R                  T5      P76 $ )Nc              3  ó<   >#   • U  H  n[        UT5      v •  M     g 7frƒ   r'   ©ræ   Úeri  s     €rˆ   rè   Ú-Loops.get_free_symbol_uses.<locals>.<genexpr>³  s   øé € ÐFº+°QÔ˜q -×0Ð0º+ùó   ƒ)r:   Úunionrê  Úinner_fn_free_symbolsr`  s    `rˆ   ra  ÚLoops.get_free_symbol_uses®  s>   ø€ ô ‹|×!Ò!ð 
ÜF¸$¿+º+ÓFð
à×&Ñ& }Ó5ò
ð 	
rŠ   c                ó  • U R                  SU R                  R                   S3[        U R                  5      U R                  5       /U Vs/ s H  o" S[        X5       3PM     sn-   SU R                  < 3/-   5      $ s  snf )NÚ'Ú=úorigin_node=)rÓ  r  r°   rÃ   r  Úinner_fn_strr¼   r}  )rŒ  Únamesr¿   s      rˆ   Ú_to_strÚLoops._to_str·  s‘   € Ø�‰à�D—K‘K×$Ñ$Ð% QÐ'Ü�D—J‘J“Ø×!Ñ!Ó#ðñ
 <AÓAº5°4��qœ Ó,Ð-Ó.¹5ÑAñBð ˜d×.Ñ.Ñ1Ð2Ð3ñ4ó
ð 	
ùò Bs   ÁB
c                ó$   • U R                  S5      $ ©N©rê  ©rú  rŸ  s    rˆ   Ú__str__ÚLoops.__str__Â  ó   € Ø�|‰|˜KÓ(Ð(rŠ   c                ó   • U R                   $ rƒ   ©r  rŸ  s    rˆ   r  ÚLoops.get_deviceÇ  ó   € Ø�{‰{ÐrŠ   c                ó   • U R                   $ rƒ   r§  rŸ  s    rˆ   r¨  ÚLoops.get_origin_nodeÊ  rª  rŠ   c                ó   • U R                   $ rƒ   rþ  rŸ  s    rˆ   r	  ÚLoops.get_sizeÍ  r  rŠ   c                ó   • U R                   $ rƒ   rþ  rŸ  s    rˆ   Úget_pointwise_sizeÚLoops.get_pointwise_sizeÐ  r  rŠ   c                óò   • UR                  SS 5      nUR                  SS 5      nU " U0 UD6nUR                  SU5        UR                  SU=(       d    UR                  5        [        R	                  U5      $ )Nr}  r{  )ÚpoprŽ  r{  r   Úcreate)Úclsr½   r¾   r}  ÚtbÚrs         rˆ   r  ÚLoops.createÓ  sm   € à—j‘j °Ó5ˆØ�Z‰Z˜ TÓ*ˆÙ�Ð ˜Ñ ˆð 	
×Ñ˜]¨KÔ8Ø	×Ñ˜[¨"×*;°·±Ô<Ü×Ñ Ó"Ð"rŠ   c                ó    • [        U 5       VVs/ s H0  u  p#US:X  a  [        R                  R                  O
[	        X5      PM2     snn$ s  snnf ©NrA   )rñ   rª   ÚSÚZerorh   )rê  r~   Únrç   s       rˆ   Ú_indexÚLoops._indexß  sI   € ô " &Ô)ô
â)‘�ð  ›FŒE�G‰G�LŠLÔ(FÀvÓ(QÒQÙ)ò
ð 	
ùó 
s   �7A
c                ó|  • [        [        R                  " 5       5      n[        R                  " U5         [        R
                  " [        SS5         U R                  " U R                  5       6   UR                  5       sS S S 5        sS S S 5        $ ! , (       d  f       O= f S S S 5        g ! , (       d  f       g = f©NÚallow_indexingT)
rO   rn   ÚMockHandlerÚset_ops_handlerr   rÂ   r  ré  Úinner_fn_argsÚgetvalue)rŒ  Ú	opcounters     rˆ   Úinner_fn_opcountÚLoops.inner_fn_opcountæ  sy   € ä ¤§¢£Ó1ˆ	ä×Ò˜iÕ(Ü�LŠLœÐ)9¸4Õ@à�MŠM˜4×-Ñ-Ó/Ñ0Ø×%Ñ%Ó'÷ AÐ@÷ )Ñ(ß@Õ@úÐ@÷ )×(Ö(ús#   µB-Á-BÁ?	B-Â
B 	ÂB-Â-
B;c                ó:   • U R                  U R                  5      4$ rƒ   )r  rê  rŸ  s    rˆ   r!  ÚLoops.inner_fn_argsð  s   € Ø—‘˜DŸK™KÓ(Ð*Ð*rŠ   c                ót   • [         R                  R                  " U R                  /U R	                  5       Q76 $ rƒ   )rn   ÚKernelFormatterHandlerÚir_to_stringré  r!  rŸ  s    rˆ   rø  ÚLoops.inner_fn_stró  s3   € ä×'Ñ'×4Ò4Ø�M‰Mð
Ø ×.Ñ.Ó0ò
ð 	
rŠ   Nc                óz   • Uc  Sn[        U[        R                  5      nU R                  5       R                  U:„  $ rý  )ÚmaxrB   Úrealize_opcount_thresholdr$  Únum_opsr,  s     rˆ   r.  ÚLoops.has_large_inner_fnù  s9   € ØÑØˆIÜ˜	¤6×#CÑ#CÓDˆ	Ø×$Ñ$Ó&×.Ñ.°Ñ:Ð:rŠ   c                ó`   • U R                  U R                  5      n[        U R                  X!S9$ ©Nrh  )r  rê  rJ   ré  )rŒ  ri  rÊ   s      rˆ   rò  ÚLoops.inner_fn_free_symbolsÿ  s%   € Ø—‘˜DŸK™KÓ(ˆÜ# D§M¡M°5ÑVÐVrŠ   c                ó’  • [         R                  " [        SS5         U R                  5       (       aJ  [	        U R                  5       U R                  5       U R                  5       5      R                  sS S S 5        $ [	        U R                  5       U R                  5       5      R                  sS S S 5        $ ! , (       d  f       g = fr  )	r   rÂ   r  rd  rL   r  r	  rg  rV  rŸ  s    rˆ   rž  ÚLoops.get_reads  sŽ   € Ü�\Š\œ.Ð*:¸DÕAØ×&Ñ&×(Ñ(Ü*Ø×$Ñ$Ó&Ø—M‘M“OØ×+Ñ+Ó-ó÷ ‘%÷ BÑAô +Ø×$Ñ$Ó&Ø—M‘M“Oó÷ ‘%÷ B×A×Aús   �AB8Á=1B8Â8
Cc                óH   • [        U R                  5       R                  5      $ rƒ   )r:   r$  Úread_buffersrŸ  s    rˆ   r   ÚLoops.get_read_names  s   € Ü˜$×/Ñ/Ó1×>Ñ>Ó?Ð?rŠ   c                óH   • [        U R                  5       R                  5      $ rƒ   )rÈ   r$  r7  rŸ  s    rˆ   rZ  ÚLoops.num_reads  s   € Ü�4×(Ñ(Ó*×7Ñ7Ó8Ð8rŠ   c                ó2   • [        S[        U 5       S35      e)Nz+get_reduction_size() is not implemented by rß  rà  rŸ  s    rˆ   rg  ÚLoops.get_reduction_size  ó   € Ü!Ø9¼$¸t»*¸ÀQÐGó
ð 	
rŠ   c                ó2   • [        S[        U 5       S35      e)Nz+get_reduction_type() is not implemented by rß  rà  rŸ  s    rˆ   rd  ÚLoops.get_reduction_type  r=  rŠ   c                ó2   • [        S[        U 5       S35      e)Nz+constant_to_device() is not implemented by rß  rà  r  s     rˆ   rp  ÚLoops.constant_to_device!  r=  rŠ   r™   r   r«  )rù  r„  r¶   rÃ   r›  r‘  r�  rŠ  )r½   r   r¾   r   r¶   r   )rê  rš  r~   r@   r¶   r‹  )r¶   rP   ©r¶   zSequence[Sequence[_IntLike]]rƒ   rœ  ©ri  r•   r¶   úOrderedSet[Symbol]r¨  r  r©  rŽ  r¬  )!r›   rœ   r�   rž   rŸ   rY   ra  rú  r   Ú__repr__r  r¨  r	  r  Úclassmethodr  r±  r@   ÚINDEXr  rX   r$  r!  rø  r.  rò  rž  r   rZ  rg  rd  rp  r    r™   rŠ   rˆ   rç  rç  §  sï   ‡ àÓØÓØ Ó ØÓá˜GÓ$à$)ð
Ø!ð
à	!ô
ó %ð
ô	
ô)ð €Hôô ôôð ó	#ó ð	#ð Ø:>¿*¹*õ 
ó ð
ð ó(ó ð(ô+ð ó
ó ð
ö
;öWôô@ô9ô
ô

÷

rŠ   rç  c               ó’   • UR                   (       a   [        R                  " [        S5      U5      $ [        R                  " SU5      $ )NÚnanr   )Úis_floating_pointrl   ÚconstantÚfloat)rò   r  s     rˆ   Únop_loader_fnrM  '  s1   € Ø××Ü�|Š|œE %›L¨%Ó0Ð0ä�|Š|˜A˜uÓ%Ð%rŠ   c                  ód   • \ rS rSrS
S jrSS jr\rSS jrSS jr        SS jr	SS jr
Srg	)Ú	Pointwisei.  c                ót   • U R                  5       (       a  [        [        U R                  S9$ U R                  $ ©NrÖ  )r   r   rM  r  ré  rŸ  s    rˆ   r  ÚPointwise.make_loader0  s,   € à× Ñ ×"Ñ"Üœ=°·
±
Ñ;Ð;à�}‰}ÐrŠ   c                ó$   • U R                  S5      $ rý  rÿ  rŸ  s    rˆ   r   ÚPointwise.__str__7  r  rŠ   c                ó   • / $ rƒ   r™   rŸ  s    rˆ   rg  ÚPointwise.get_reduction_size<  s   € Øˆ	rŠ   c                ó   • g rƒ   r™   rŸ  s    rˆ   rd  ÚPointwise.get_reduction_type?  r®  rŠ   c                ó|   • U R                  5       n[        R                  " U=(       d    SU" U5      U" U5      5      $ ©NÚunnamed)r  rl   Ústore©rŒ  Úoutput_nameÚindexerÚvarsÚloaders        rˆ   Ústore_outputÚPointwise.store_outputB  s2   € ð ×!Ñ!Ó#ˆÜ�yŠy˜×1¨	±7¸4³=Á&ÈÃ,ÓOÐOrŠ   c                ó¦   • U R                  5       n[        R                  " [        SU5      " U5      n[	        UU R
                  UU R                  S9$ ©úFMove this to a given device. Requires that all reads are to constants.Úoverride_device©r  r  ré  rê  )r  r   rÂ   ÚConstantBufferrO  r  rê  ©rŒ  r  ra  s      rˆ   rp  ÚPointwise.constant_to_deviceK  sI   € à×!Ñ!Ó#ˆÜ—’œnÐ.?ÀÔHÈÓPˆÜØØ—*‘*ØØ—;‘;ñ	
ð 	
rŠ   r™   Nr•  r›  )r¶   zSequence[sympy.Expr]rŽ  )r^  r�  r_  ú!Callable[[Sequence[Expr]], Never]r`  r‹  r¶   r·   r¬  )r›   rœ   r�   rž   r  r   rE  rg  rd  rb  rp  r    r™   rŠ   rˆ   rO  rO  .  sR   † ôô)ð €HôôðPà"ðPð 3ðPð ð	Pð
 
ôP÷	
rŠ   rO  c                  óR   • \ rS rSr% S\S'   SrS\S'   S
S jr        SS jrS	rg)ÚScatteriW  r˜  Úoutput_indexerNrR   Úscatter_modec           	     óÒ   • U R                  5       n[        R                  " [        SU5      " U5      n[	        UU R
                  UU R                  U R                  U R                  S9$ )rf  rg  )r  r  ré  rê  ro  rp  )	r  r   rÂ   ri  rn  r  rê  ro  rp  rj  s      rˆ   rp  ÚScatter.constant_to_device\  s[   € à×!Ñ!Ó#ˆÜ—’œnÐ.?ÀÔHÈÓPˆÜØØ—*‘*ØØ—;‘;Ø×.Ñ.Ø×*Ñ*ñ
ð 	
rŠ   c                ó¤   • U R                  5       nUc  Sn[        R                  " UU" U R                  U5      5      U" U5      U R                  S9$ )Nr[  )Úmode)r  rl   r\  ro  rp  r]  s        rˆ   rb  ÚScatter.store_outputi  sT   € ð ×!Ñ!Ó#ˆØÑØ#ˆKÜ�yŠyØÙ�D×'Ñ'¨Ó-Ó.Ù�4‹LØ×"Ñ"ñ	
ð 	
rŠ   r™   r¬  )r^  r�  r_  rl  r`  r‹  r¶   r   )	r›   rœ   r�   rž   rŸ   rp  rp  rb  r    r™   rŠ   rˆ   rn  rn  W  sB   ‡ à4Ó4Ø"€L�)Ó"ô
ð
à"ð
ð 3ð
ð ð	
ð
 
÷
rŠ   rn  Ú
logical_orÚmaximumÚminimumÚmulr´  Úbitwise_xor)Úanyr-  ÚminÚprodÚsumÚdotÚxor_sumz"dict[str, Callable[..., OpsValue]]ÚREDUCTION_COMBINE_FNc                ó    ^ ^^• T [         ;   a	  [         T    $ T S;   a        SUUU 4S jjnU$ T S:X  a        SS jnU$ [        ST  35      e)N©ÚargmaxÚargminc                óâ  >• U u  p#Uu  pETS:X  a  [         R                  " X$5      nO[         R                  " X$5      n[         R                  " X$5      n[	        T5      (       a‚  [         R
                  " X"5      n[         R
                  " XD5      n	[         R                  " U[         R                  " X‰5      5      n[         R                  " U[         R                  " X‰5      5      nT(       a  [         R                  " X55      O[         R                  " X55      n
[         R                  " U[         R                  " Xz5      5      n[         R                  " XbU5      [         R                  " XcU5      4$ )Nr…  )	rl   ÚltÚgtÚeqr,   Únerv  Úlogical_andÚwhere)ÚaÚbÚa_valueÚa_indexÚb_valueÚb_indexÚmaskÚequalÚa_isnanÚb_isnanÚtieÚarg_break_ties_leftr  Úreduction_types              €€€rˆ   Úargmax_combine_fnÚ3get_reduction_combine_fn.<locals>.argmax_combine_fn�  s  ø€ ð  !ÑˆGØ ÑˆGà Ó)Ü—v’v˜gÓ/‘ä—v’v˜gÓ/�ä—F’F˜7Ó,ˆEÜ˜e×$Ñ$ÜŸ&š& Ó2�ÜŸ&š& Ó2�Ü—~’~ d¬C¯FªF°7Ó,DÓE�ÜŸš u¬c¯oªo¸gÓ.OÓP�ö 'ô —’�wÔ(ä—V’V˜GÓ-ð ô
 —>’> $¬¯ª¸Ó(CÓDˆDä—	’	˜$¨Ó1Ü—	’	˜$¨Ó1ðð rŠ   Úwelford_combinec                ó\   • U u  p#nUu  pVnXR-
  nXG-   n	Xy-  n
X(U
-  -   X6-   Xˆ-  U-  U
-  -   U	4$ rƒ   r™   )r�  rŽ  Úa_meanÚa_m2Úa_weightÚb_meanÚb_m2Úb_weightÚdeltaÚ
new_weightÚ	w2_over_ws              rˆ   Úwelford_combine_fnÚ4get_reduction_combine_fn.<locals>.welford_combine_fn®  s]   € ð &'Ñ"ˆF˜(Ø%&Ñ"ˆF˜(à‘OˆEØ!Ñ,ˆJØ Ñ-ˆIà Ñ*Ñ*Ø‘˜e™m¨hÑ6¸ÑBÑBØðð rŠ   zunknown reduction_type=)r�  útuple[object, object]rŽ  r©  r¶   útuple[OpsValue, OpsValue])r�  ú#tuple[OpsValue, OpsValue, OpsValue]rŽ  r«  r¶   r«  )r�  rÚ  )r™  r  r˜  rš  r§  s   ```  rˆ   Úget_reduction_combine_fnr¬  …  s’   ú€ ð Ô-Ó-Ü# NÑ3Ð3à	Ð/Ó	/ð	Ø$ð	Ø)>ð	à&÷	ñ 	ð: !Ð à	Ð,Ó	,ð	Ø2ð	à2ð	ð 1ô	ð  "Ð!ô "Ð$;¸NÐ;KÐ"LÓMÐMrŠ   c                  óJ  ^ • \ rS rSr% S\S'   S\S'   S\S'   S\S	'   S!S
 jr\r\" S 5      S"S#U 4S jjj5       rS$S jr	S%S jr
          S&S jrS'S jrS(S jrS"S#S jjrS)S jr\ S*                   S+S jj5       r\          S,S j5       r\\R*                  S4                   S-S jj5       r\      S.S j5       r\      S.S j5       r\        S/S j5       r\      S0S j5       r\ S*               S1S jj5       r\            S2S j5       r\                        S3S j5       r\ S*                     S4S jj5       r\                      S5S j5       rS r U =r!$ )6Ú	ReductioniÄ  rš  Úreduction_rangesrQ   r™  r†  Ú	src_dtyperU   Úreduction_hintc                ó$   • U R                  S5      $ )N)rê  r¯  r™  rÿ  rŸ  s    rˆ   r   ÚReduction.__str__Ì  s   € Ø�|‰|ÐLÓMÐMrŠ   c                ó|   >^• [         TU ]  T5      [        5       R                  " U4S jU R                   5       6 -  $ )Nc              3  ó<   >#   • U  H  n[        UT5      v •  M     g 7frƒ   r'   rí  s     €rˆ   rè   Ú1Reduction.get_free_symbol_uses.<locals>.<genexpr>Ô  s   øé € ÐPÒ:O°QÔ˜q -×0Ð0Ò:Oùrð  )Úsuperra  r:   rñ  r¯  ©rŒ  ri  Ú	__class__s    `€rˆ   ra  ÚReduction.get_free_symbol_usesÑ  s7   ù€ ä‰wÑ+¨MÓ:¼Z»\×=OÒ=OÜP¸$×:OÒ:OÓPð>
ñ 
ð 	
rŠ   c                ó   • U R                   $ rƒ   )r¯  rŸ  s    rˆ   rg  ÚReduction.get_reduction_size×  s   € Ø×$Ñ$Ð$rŠ   c                ó   • U R                   $ rƒ   )r™  rŸ  s    rˆ   rd  ÚReduction.get_reduction_typeÚ  ó   € Ø×"Ñ"Ð"rŠ   c           	     óÞ   • [         R                  " U R                  U R                  U R                  U R                  X45      5      n[         R                  " U=(       d    SU" U5      U5        g rZ  )rl   Ú	reductionr  r°  r™  ré  Ústore_reduction)rŒ  r^  r_  r`  Úreduction_varsr  s         rˆ   rÂ  ÚReduction.store_reductionÝ  sR   € ô —’Ø�J‰JØ�N‰NØ×ÑØ�M‰M˜$Ó/ó	
ˆô 	×Ò˜K×4¨9±g¸d³mÀUÕKrŠ   c                óX   • [        U R                  5      [        U R                  5      -   $ rƒ   )rÈ   rê  r¯  rŸ  s    rˆ   Úindex_lengthÚReduction.index_lengthì  s!   € Ü�4—;‘;Ó¤# d×&;Ñ&;Ó"<Ñ<Ð<rŠ   c                ó’   • U R                  U R                  5      nU R                  U R                  [        R                  5      nX4$ rƒ   )r  rê  r¯  r@   ÚR0_INDEX)rŒ  rÊ   Úrindexs      rˆ   r!  ÚReduction.inner_fn_argsï  s6   € Ø—‘˜DŸK™KÓ(ˆØ—‘˜T×2Ñ2´D·M±MÓBˆØˆÐrŠ   c                ó¶   • U R                  U R                  5      nU R                  U R                  [        R                  5      n[        U R                  X#US9$ r2  )r  rê  r¯  r@   rÉ  rJ   ré  )rŒ  ri  rÊ   rÊ  s       rˆ   rò  ÚReduction.inner_fn_free_symbolsô  sF   € Ø—‘˜DŸK™KÓ(ˆØ—‘˜T×2Ñ2´D·M±MÓBˆÜ#Ø�M‰M˜5¸ñ
ð 	
rŠ   c                ó  • U R                  5       n[        R                  " [        SU5      " U5      n[	        UU R
                  UU R                  U R                  U R                  U R                  [        R                  S9$ )rf  rg  ©r  r  ré  rê  r¯  r™  r°  r±  )r  r   rÂ   ri  r®  r  rê  r¯  r™  r°  rU   ÚDEFAULTrj  s      rˆ   rp  ÚReduction.constant_to_deviceû  sk   € à×!Ñ!Ó#ˆÜ—’œnÐ.?ÀÔHÈÓPˆÜØØ—*‘*ØØ—;‘;Ø!×2Ñ2Ø×.Ñ.Ø—n‘nÜ(×0Ñ0ñ	
ð 		
rŠ   Nc	                ón  • [         R                  R                  R                  U5      n	[         R                  R                  R                  [	        U5      5      n
US:H  =(       dV    [         R                  R                  U [        R                  5      (       + =(       a    US;  =(       a    [        R                  n[        U	5      (       a  [        U
5      (       d  [        R                  S4$ US:X  a  [        R                  S4$ [        R                  " U 5      nUR                  nSnU(       a]  [         R"                  " [         R$                  R&                  U SS9n[         R"                  " [         R$                  R&                  U SS9nO      SS	 jnUnU
S:X  aê  U" Xš5      nUS:X  a  [        R(                  U4$ Ubµ  [+        U[,        5      (       a   [.        R0                  " [2        S
S5         [5        U5      u  nnS S S 5        Wbj  Wbg  [         R                  R                  R                  [	        UU-   5      5      nU	U:X  a,  [6        R9                  SUUUUU5        [        R(                  S4$ [        R(                  U4$ Xž::  d  X­S-  S-  :¼  a  [        R                  S4$ [;        U UUUUUS:w  a  UOSU[        R                  S9nSS jnU" U5      u  nnU(       a  U" U5      u  nn[=        U5      S:X  a  [        R                  S4$ [>        R@                  " URC                  5       URE                  5       5      u  u  nnnSnSnU H”  n[         R                  R                  RG                  UU5      n[         R                  R                  RI                  UU[K        URM                  5       5      5      n [O        S U  5       5      n!U!(       a  US-  nM�  US-  nM–     UU:”  a  [        R(                  U" Xš5      4$ [        RP                  U" Xš5      4$ ! , (       d  f       GN&= f)NÚscanrƒ  rA   r  é    T)Úinner_reductionFc                ó   • gr  r™   )Úreduction_numel_hintÚ
numel_hints     rˆ   Úinner_reduction_splitsÚ4Reduction.num_splits.<locals>.inner_reduction_splits7  s   € ð rŠ   r  z°Use previous IRNode's range and reduction_ranges instead of split. current ranges: %s, current reduction ranges: %s, current split: %d, new ranges: %s, new reduction ranges: %sr0  rà   r~  rÏ  c           	     ó`  ^	• U R                  5       nUc   e[        S [        UU R                  5       U R	                  5       S9U S9nUR                  5       nUR                  c   eUR                   V s/ s H=  n [        U [        5      (       d  M  [        U [        R                  5      (       a  M;  U PM?     nn / nSn[        UR                  S S9 HÑ  m	[        U	4S jU 5       5      (       d  M  UR                  T	R                  5        T	R                   ["        R$                  R&                  ;   d  Md  ["        R$                  R&                  T	R                      n[)        UR*                  SS 5      nUR-                  5         [)        UR*                  SS 5      U:w  d  MÏ  SnMÓ     XV4$ s  sn f )	N©r  r  r  ©r¿   rN  rM  Fc                ó   • U R                   $ rƒ   r—  r†   s    rˆ   Ú<lambda>Ú@Reduction.num_splits.<locals>.get_read_indices.<locals>.<lambda>‡  s   € ¸a¿fºfrŠ   ©Úkeyc              3  óT   >#   • U  H  oTR                   R                  ;   v •  M     g 7frƒ   )rÊ   r1   )ræ   r  Úmds     €rˆ   rè   ÚAReduction.num_splits.<locals>.get_read_indices.<locals>.<genexpr>ˆ  s   øé € ÐFº:°a˜BŸH™H×1Ñ1Ö1º:ùó   ƒ%(r  T)r  r„  r  r  r	  rR  Ú
range_varsr„   r    rª   ÚNumberÚsortedrV  rë   rÅ  rÊ   r¿   rn   r  Úname_to_bufferr¼   rN  Údecide_layout)
r  r  ÚcbÚread_writesrç  ÚindicesÚchangedÚbufÚoriginal_striderä  s
            @rˆ   Úget_read_indicesÚ.Reduction.num_splits.<locals>.get_read_indiceso  sn  ø€ Ø—\‘\“^ˆFØÑ%Ð%Ð%ÜØÜ%Ø!ØŸ+™+›-ØŸ™›ñð
 ñˆBð ×,Ñ,Ó.ˆKð ×)Ñ)Ñ5Ð5Ð5ð %×/Ò/óâ/�AÜ˜a¤×&ó ä/9¸!¼U¿\¹\×/J÷ Ù/ð ð ð
 ˆGØˆGÜ˜[×.Ñ.Ñ4DÔE�ÜÔF¹:ÓF×FÓFØ—N‘N 2§8¡8Ô,Ø—w‘w¤!§'¡'×"8Ñ"8Õ8ÜŸg™g×4Ñ4°R·W±WÑ=˜Ü*1°#·*±*¸hÈÓ*M˜Ø×)Ñ)Ô+Ü" 3§:¡:¨x¸Ó>À/ÕQØ&*šGñ Fð Ð#Ð#ùò!s   Á4F+ÂF+Â2F+r   c              3  óB   #   • U  H  oS :H  =(       d    US:„  v •  M     g7f)r   rA   Nr™   rå   s     rˆ   rè   Ú'Reduction.num_splits.<locals>.<genexpr>¦  s   é € Ð9²¨A˜Q™Ÿ ! a¡%œ²ùó   ‚)r×  r…   rØ  r…   r¶   r…   )r  r®  r¶   ztuple[Sequence[Expr], bool]))rn   r  r  r>  ri   Úhas_featurerD   ÚREDUCE_TO_SINGLE_ELEMENTrB   Úsplit_reductionsr‰   rU   rÐ  rT   r  Úmulti_processor_countÚ	functoolsr   ÚchoicesÚreduction_split_factorÚINNERr„   r   r   rÂ   r  rK   Úlogr¶  r®  rÈ   rC   Úindex_vars_squeezer	  rg  Úsimplify_with_rangesÚstride_hintsr£   Úkeysrë   ÚOUTER)"r  Ú	dst_dtyper°  ré  rê  r¯  r™  Úreduction_numelÚ
input_noder×  rØ  Úshould_splitÚpropsÚnum_smÚmin_elements_per_threadrÙ  Úouter_reduction_splitsrÆ  Ú
new_rangesÚnew_reduction_rangesÚextracted_numel_hintr  rò  rî  rï  rø   rÃ  Úranges1Ú	num_outerÚ	num_innerrË   ÚjrU  Úouters"                                     rˆ   Ú
num_splitsÚReduction.num_splits
  sú  € ô  !Ÿw™w×/Ñ/×=Ñ=¸oÓNÐÜ—W‘W×%Ñ%×3Ñ3´MÀ&Ó4IÓJˆ
à%¨Ñ/÷ 
Ü—‘×#Ñ# F¬N×,SÑ,SÓTÔT÷ (Øðñ÷(ô ×'Ñ'ð 	ô Ð/×0Ñ0´ZÀ
×5KÑ5Kä ×(Ñ(¨!Ð+Ð+à˜UÓ"ä ×(Ñ(¨!Ð+Ð+ä ×'Ò'¨Ó/ˆØ×,Ñ,ˆØ"$ÐÞÜ@I×@QÒ@QÜ—	‘	×0Ñ0°&È$ñAÐ"ô AJ×@QÒ@QÜ—	‘	×0Ñ0°&È%ñAÑ"ð
Ø&)ðàðð ôð &<Ð"ð ˜‹?Ù*Ð+?ÓLˆEØ˜‹zä$×*Ñ*¨EÐ1Ð1ØÑ%¬*°ZÄ×*KÑ*KÜ—\’\¤.Ð2BÀDÕIô <¸JÓGñØ"Ø,÷ Jð
 Ñ)Ð.BÑ.NÜ+,¯7©7×+;Ñ+;×+IÑ+IÜ% jÐ3GÑ&GÓHó,Ð(ð ,Ð/CÓCÜŸ	™	ðGð #Ø,Ø!Ø&Ø0ô	ô  -×2Ñ2°BÐ6Ð6Ü ×&Ñ&¨Ð-Ð-à Ó;Ø a™Z¨"™_Ó,ä ×(Ñ(¨!Ð+Ð+äØØØØØ-Ø-;¸vÓ-E™>È5ØÜ(×0Ñ0ñ	
ˆô!	$ñF ,¨AÓ.Ñˆ�ÞÙ)¨!Ó,‰JˆG�Qäˆw‹<˜1Óä ×(Ñ(¨!Ð+Ð+ä'3×'FÒ'FØ�J‰J‹L˜!×.Ñ.Ó0ó(
Ñ$ÑˆˆN˜Wð ˆ	Øˆ	ÛˆAÜ—‘× Ñ ×5Ñ5°a¸ÓAˆAÜ—g‘g×&Ñ&×3Ñ3Ø�>¤4¨¯©«Ó#7óˆGô
 Ñ9±Ó9Ó9ˆEÞØ˜Q‘’	à˜Q‘’	ñ ð �yÓ Ü ×&Ñ&Ñ(>Ø$ó)ð ð ô !×&Ñ&Ñ(>Ø$ó)ð ð ÷U JÖIús   Ç7P%Ð%
P4c                ó  ^ ^^^^^• [         R                  R                  R                  T5      m[	        X#5      mSUUU4S jjmUS;   a4  [        T[        R                  T5      5      m      SUU 4S jjmU4S j$ T mT$ )z1Convert inner_fn from a reduction to an pointwisec                óª   >^ • [         R                  " TU U4S j[        R                  " T Vs/ s H  n[	        U5      PM     sn6  5       5      $ s  snf )Nc              3  ó6   >#   • U  H  nT" TU5      v •  M     g 7frƒ   r™   )ræ   rÊ  rÊ   Úvalue_fns     €€rˆ   rè   Ú=Reduction._unroll_reduction_fn.<locals>.fn.<locals>.<genexpr>Ã  s&   øé € ð ò#˜ñ ˜U F×+Ð+ò#ùs   ƒ)rû  ÚreduceÚ	itertoolsÚproductrÉ   )rÊ   r‡   Ú
combine_fnr¯  r  s   ` €€€rˆ   rÀ   Ú*Reduction._unroll_reduction_fn.<locals>.fnÀ  sN   ù€ Ü×#Ò#Øõä"+×"3Ò"3Ù,<Ó=Ò,< qœ% ž(Ñ,<Ñ=ñ#óóð ùò
 >s   ®A©r…  r„  c                óÀ   >• U Vs/ s H  n[         R                  " U5      PM     nnT" X5      [        R                  " T" U5      [        R
                  5      4$ s  snf rƒ   )rª   Úexpandrl   Ú
index_exprr  Úint64)rÊ   rÊ  rË   Úflatten_indexré  s      €€rˆ   r  Ú0Reduction._unroll_reduction_fn.<locals>.value_fnÒ  sO   ø€ ñ 4:Ó:²6¨aœ%Ÿ,š, qž/±6�Ð:á˜UÓ+Ü—N’N¡=°Ó#8¼%¿+¹+ÓFðð ùò ;s   † Ac                ó   >• T" U 5      S   $ r  r™   )rÊ   rÀ   s    €rˆ   rß  Ú0Reduction._unroll_reduction_fn.<locals>.<lambda>Û  s   ø€ ¡ E£¨1¢rŠ   )rÊ   rš  r¶   r   )rÊ   rš  rÊ  rš  r¶   rª  )rn   r  r  Úguard_int_seqr¬  Ú_fixed_indexerr  r  )ré  r¯  r™  r°  r  r&  rÀ   r  s   ``  @@@@rˆ   Ú_unroll_reduction_fnÚReduction._unroll_reduction_fn´  s�   ý€ ô Ÿ7™7×+Ñ+×9Ñ9Ð:JÓKÐä-¨nÓHˆ
÷		ñ 		ð Ð1Ó1Ü*Ø Ü×1Ñ1Ð2BÓCóˆMð
Ø)ðØ3Eðà*÷ð ô .Ð-àˆHØˆIrŠ   c
                ó`  ^^^^^^• [         R                  R                  R                  [	        T5      5      mTS:X  a`  SU4S jjn
U
" S5      U
" S5      U
" S5      U
" S5      S.mTT;   d
   T S35       eSUUU4S jjn[
        R                  UUU[        U5      S9$ TS:X  a-  TS;   a	  SU4S	 jjnO	SUU4S
 jjn[
        R                  UTXÅS9$ [        T[        5      (       a’  [         R                  R                  R                  T5      [        R                  :  aW  [	        U5      S:w  d  [        UR                  5      (       a.  TS:w  a(  [
        R                  UTU R                  TTTU5      US9$ U R!                  UTUTUTTTU	5	      u  pÞSU4S jjnU" U5      nU["        R$                  :X  a  UnUS:X  a\  U	c   e[&        R(                  " [*        SS5         [-        U	5      u  nnSSS5        Wc   eWc   eU R/                  UTUTUTUUTU5
      $ US:”  a×  U R1                  UTUTUTTUUU	5
      nSn[        R2                  R4                  (       a&  [        U[6        5      (       a      SS jnU" U5      nU(       am  [        UR8                  [:        5      (       d   [        UR8                  5       5       eUR8                  R<                  S   Ul        TUl         UUl!        TUl"        U$ [6        R                  [;        UTTUTTUUS95      nU$ ! , (       d  f       GN5= f)za
Create a reduction node. May split the reduction to multiple layers to expose
more parallelism.
r   c                ó$  >• T[         R                  :X  a  [        U 5      $ TR                  (       a0  [        U [        5      (       d   [        U 5      5       e[        U 5      $ [        U [        5      (       d   [        U 5      5       e[        U 5      $ rƒ   )	r  r•   rJ  r„   r   r°   rL  r   r…   )Úvalr  s    €rˆ   Úpy_cnstÚ!Reduction.create.<locals>.py_cnstø  sm   ø€ Ø¤§
¡
Ó*Ü ›9Ð$Ø×0×0Ü% c¬=×9Ñ9ÐD¼4À»9ÓDÐ9Ü  ›:Ð%ä% c¬;×7Ñ7ÐB¼¸c»ÓBÐ7Ü˜s›8�OrŠ   rA   )r~  r€  r}  r{  z* not supported for zero-dimension tensors!c                ó8   >• [         R                  " TT   T5      $ rƒ   ©rl   rK  )rÊ   r  r™  Úrtypes_to_initss    €€€rˆ   Úconst_fnÚ"Reduction.create.<locals>.const_fn  s   ø€ Ü—|’| O°NÑ$CÀYÓOÐOrŠ   rh  r!  c                ó2   >• [         R                  " ST5      $ rý  r4  )rÊ   r  s    €rˆ   rÀ   ÚReduction.create.<locals>.fn  s   ø€ ÜŸ<š<¨¨9Ó5Ð5rŠ   c                ór   >• T Vs/ s H  n[         R                  R                  PM     nnT" X5      $ s  snf rƒ   ©rª   r  r  )rÊ   rø   Úreduction_indexré  r¯  s      €€rˆ   rÀ   r9  !  s2   ø€ Ù=MÓ&NÒ=M¸¤u§w¡w§|¤|Ñ=M�OÐ&NÙ# EÓ;Ð;ùò 'Oó   †$4r  c                ól   >• [        T5      (       a  U $ U S:”  a  [        U [        R                  5      $ U $ r  )r‰   r-  rB   Úmin_num_split)rÆ  r  s    €rˆ   Ú_maybe_increase_splitÚ/Reduction.create.<locals>._maybe_increase_splitJ  s2   ø€ ä˜/×*Ñ*Ø�Ø�q‹yÜ˜5¤&×"6Ñ"6Ó7Ð7à�rŠ   r0  Nr  Tc                óL  • U R                  5       n[        U5      S:w  a  g [        [        U5      5      nU[        R
                  R                  ;  a  g [        R
                  R                  U   n[        U[        5      (       d  g UR                  R                  5       c   eU$ r  )r   rÈ   ÚnextÚiterrn   r  rê  r„   r„  rM  rd  )Úcur_nodeÚ
read_namesÚbufnamerð  s       rˆ   Ú_find_split_reductionÚ/Reduction.create.<locals>._find_split_reduction�  s‡   € ð "*×!8Ñ!8Ó!:�JÜ˜:“¨!Ó+Ø#ä"¤4¨
Ó#3Ó4�GØ¤a§g¡g×&<Ñ&<Ó<Ø#ÜŸ'™'×0Ñ0°Ñ9�CÜ% c¬>×:Ñ:Ø#àŸ8™8×6Ñ6Ó8ÑDÐDÐDà�JrŠ   rÏ  )r0  rÂ   r¶   zUnion[bool, float, int])rÊ   r…   r¶   rm   )rÆ  r…   r¶   r…   )rE  r   r¶   zOptional[ComputedBuffer])#rn   r  r  Úsimplifyri   rO  r  r£   r„   r!   Úsize_hint_or_throwrB   Úunroll_reductions_thresholdre   r°   r,  r  rU   rÐ  r   rÂ   r  rK   Ú!create_multilayer_existing_rangesÚcreate_multilayerr#  Úmix_order_reductionr   rM  r®  r¯  Ú_split_sizeÚ_original_inner_fnÚ_original_rangesÚ_original_reduction_ranges)r  r  r  r°  ré  rê  r¯  r™  r±  r  r1  r6  rÀ   ÚhintrÆ  r@  r  r  rù   Úsplit_reductionrH  r  r5  s     ` ` ``             @@rˆ   r  ÚReduction.createà  s‘  ý€ ô$ Ÿ'™'×*Ñ*×3Ñ3´MÐBRÓ4SÓTˆà˜aÓ÷$ñ ˜q“zÙ" 1›:Ù ›
Ù˜q“zñ	ˆOð " _Ó4ð Ø!Ð"Ð"LÐMóÐ4÷Pñ Pô ×#Ñ#ØØØ!Ü˜F“|ð	 $ð ð ð ˜aÓàÐ!5Ó5÷6ð 6÷
<ð <ô ×#Ñ#Ø Y¸ð $ð ð ô
 �¬×0Ñ0Ü—‘× Ñ ×3Ñ3°OÓDÜ×0Ñ0ó1ä˜vÓ&¨!Ó+¬v°f·k±k×/BÑ/BØ %Ó'ô ×#Ñ#ØØØ×1Ñ1ØÐ.°À	óð ð $ð ð ð —n‘nØØØØØØØØØó

‰ˆ÷	ñ & eÓ,ˆð
 œ]×2Ñ2Ó2Ø!ˆNØ�B‹;ØÑ)Ð)Ð)Ü—’œnÐ.>ÀÕEÜ3VØó4Ñ0�
Ð0÷ Fð Ñ)Ð)Ð)Ø'Ñ3Ð3Ð3Ø×8Ñ8ØØØØØØ ØØ$ØØóð ð �Q‹Yà×'Ñ'ØØØØØØ ØØØØóˆCð #ˆOÜ�}‰}×0×0´ZÀÄY×5OÑ5OðØ'ðà-ôñ$ #8¸Ó"<�æô " /×"6Ñ"6¼	×BÑBð Ü˜O×0Ñ0Ó1Ð2óÐBð />×.BÑ.B×.SÑ.SÐTUÑ.V�Ô+Ø5=�Ô2Ø39�Ô0Ø=M�Ô:ØˆJä×ÑÜØØØ!ØØ!1Ø-Ø#Ø-ñ	ó
ˆð ˆ
÷k FÖEús   Ç!LÌ
L-c           
     óÔ  • U S;   aL  [        U5      (       a  [        S5      $ [        U5      (       a  g[        R                  " U5      R
                  $ U S;   aL  [        U5      (       a  [        S5      $ [        U5      (       a  g[        R                  " U5      R                  $ [        U5      (       a  SOSn[        U5      (       a  SOSnUUUUUX"U4X"U4[        S5      U4S	.U    $ )
N)r-  r„  z-infF)r|  r…  ÚinfTr   rA   )r~  r}  r  r€  r{  Úwelford_reducerœ  Úonline_softmax_reduce)r,   rL  r+   r  Úiinfor|  r-  )r™  r  ÚzeroÚones       rˆ   Údefault_accumulatorÚReduction.default_accumulator³  sç   € ð Ð.Ó.Ü˜e×$Ñ$Ü˜V“}Ð$Ü! %×(Ñ(Øä—{’{ 5Ó)×-Ñ-Ð-ØÐ.Ó.Ü˜e×$Ñ$Ü˜U“|Ð#Ü! %×(Ñ(Øä—{’{ 5Ó)×-Ñ-Ð-ä(¨×/Ñ/‰u°QˆÜ& u×-Ñ-‰d°1ˆàØØØØØ#¨4Ð0Ø $¨DÐ1Ü&+¨F£m°TÐ%:ñ	
ð ñ	ð 		rŠ   c                ó:   • U S:X  a  g[         R                  X5      $ )NrY  r   )r®  r^  ©r™  r  s     rˆ   Údefault_valueÚReduction.default_valueÓ  s!   € ð Ð-Ó-ØÜ×,Ñ,¨^ÓCÐCrŠ   c                óÖ   • U S:X  a  U$ U S::  a*  US::  a$  U[         R                  :X  a  [         R                  $ U S::  a*  US::  a$  U[         R                  :X  a  [         R                  $ U$ )Nr0  é   i   é   )rU   r  Ú
OUTER_TINY)rÆ  rØ  r±  s      rˆ   Ú_multilayer_second_step_hintÚ&Reduction._multilayer_second_step_hintÛ  sg   € ð �B‹;Ø!Ð!Ø�C‹<˜J¨#Ó-°.ÄM×DWÑDWÓ2WÜ ×+Ñ+Ð+à�T‹MØ˜cÓ!Ø¤-×"5Ñ"5Ó5ä ×+Ñ+Ð+àÐrŠ   c                ó”  • Uc  g[         R                  R                  R                  UR	                  5       U5      (       d  gUR                  5          [        U5        UR                  5       n[        USS 5       H8  u  pE[         R                  R                  R                  US5      (       d  M6  Us  $    g! [         a     gf = f)z²
If we are reducing over the full tensor, and it is non-dense in the last dimension,
reindex so we reduce over the dense dimension. initially just handle complete
reduction case
Nr0  rA   )
rn   r  r  r=  rú  r  rO  rÚ  r2  rñ   )r  r  r  rU  rË   rç   s         rˆ   Ú$check_for_split_dense_dim_reindexingÚ.Reduction.check_for_split_dense_dim_reindexingì  s¸   € ð ÑØä�w‰w×Ñ×7Ñ7Ø× Ñ Ó" O÷
ñ 
ð à×ÑÔð	ä! *Ô-ð ×'Ñ'Ó)ˆä˜g c r˜lÖ+‰DˆAÜ�w‰w×Ñ×7Ñ7¸¸1×=Ó=Ø’ñ ,ð øô #ó 	Ùð	ús   ÁB: Â:
CÃCc                ó  ^^^^^
^• U R                  TU5      n[        R                  UT/U5      m[        R                  R
                  R                  [        R                  " TU-  S5      5      (       + m
      SUUUU
UU4S jjn	U	$ )Nr   c                ó"  >^^• Uu  nU Gt mnTU-  U-   mSUU
UU4S jjnT(       ac  [        T5      n[        R                  " [        R                  " TU5      [        R                  " TU5      5      n[        R                  " XST	5      $ U" 5       $ )Nc                 ó$   >• T" TT" T /5      5      $ rƒ   r™   )rî  ra  Ú	new_indexrÍ   s   €€€€rˆ   ÚbodyÚCReduction._multilayer_wrap_loader.<locals>.wrapper_fn.<locals>.body(  s   ø€ Ù˜i©°'°Ó);Ó<Ð<rŠ   )r¶   rm   )r_   rl   r‡  r$  Úmasked)rÊ   r<  Úreduction_blockrq  Úindex_dtyper“  rî  rp  Ú
block_sizeÚdefaultra  Ú	need_maskr  rÍ   s         @@€€€€€€rˆ   Ú
wrapper_fnÚ5Reduction._multilayer_wrap_loader.<locals>.wrapper_fn!  sƒ   ú€ ð "1Ñˆ_Ø*/Ñ'ˆY˜Ø  ?Ñ2°_ÑDˆG÷=ò =ö Ü-¨oÓ>�Ü—v’vÜ—N’N 7¨KÓ8Ü—N’N ?°KÓ@ó�ô —z’z $¨gÓ6Ð6á“v�rŠ   )rÊ   úSequence[Symbol]r<  r{  r¶   rm   )	rk  ÚViewÚdynamic_reshape_indexerrn   r  r  rÿ  rª   r-  )r  ra  r¯  r  rÆ  rv  rw  r  Údense_indexry  rx  rÍ   s    ` ` ``   @@rˆ   Ú_multilayer_wrap_loaderÚ!Reduction._multilayer_wrap_loader  s”   ý€ ð ×>Ñ>Ø˜Zó
ˆô ×.Ñ.Ø˜Ð/°ó
ˆô Ÿ™×(Ñ(×>Ñ>Ü�HŠH�_ uÑ,¨aÓ0ó
ô 
ˆ	ð	Ø#ð	Ø6Fð	à÷	ô 	ð( ÐrŠ   c                óÆ   ^^^• [        S T 5       5      (       d   ST< 35       e[        R                  U[        U5      [        U5      -   5      m      SUUU4S jjnU$ )Nc              3  ó*   #   • U  H	  oS :H  v •  M     g7f)rA   Nr™   ©ræ   r  s     rˆ   rè   ÚDReduction._multilayer_wrap_loader_existing_ranges.<locals>.<genexpr>@  s   é € Ð3¢?˜a˜–6¢?ùs   ‚z8Only enabled for numel_hint == 1, found original_ranges=c           	     ó„   >• U S [        T5       nU [        T5      S  nT" UT" [        U5      [        U5      -   5      5      $ rƒ   )rÈ   r¤   )Úmerged_indexÚnew_reduction_indexÚoriginal_idxrp  ra  Úoriginal_rangesrÍ   s       €€€rˆ   ry  ÚEReduction._multilayer_wrap_loader_existing_ranges.<locals>.wrapper_fnG  sQ   ø€ ð (Ð(>¬#¨oÓ*>Ð?ˆLØ$¤S¨Ó%9Ð%;Ð<ˆIÙØÙœ˜iÓ(¬5Ð1DÓ+EÑEÓFóð rŠ   )r†  r‹  r‡  r‹  r¶   rm   )rë   r|  r}  r¤   )r  ra  r‰  Úoriginal_reduction_rangesr  r  ry  rÍ   s    ``    @rˆ   Ú'_multilayer_wrap_loader_existing_rangesÚ1Reduction._multilayer_wrap_loader_existing_ranges7  s�   ú€ ô Ñ3¡?Ó3×3Ñ3ð 	
ØG°Ñ6HÐIó	
Ð3ô ×.Ñ.Ø%¤u¨ZÓ'8¼5ÐAUÓ;VÑ'Vó
ˆð		Ø(ð		à!/ð		ð ÷		ñ 		ð ÐrŠ   c                ó  ^• U[         R                  [         R                  4;  a  UO[         R                  n[        R                  UUUUUUU	U5      nUR                  5         UR                  5       m      SU4S jjn[        R                  R                  R                  [        U5      5      nU R                  X¯U5      nXWS[        U5       :X  d   e[        R                  [	        UUUUU[        U5      S U	UUS95      $ )úI
Break a large reduction up into multiple smaller reductions
recursively
c                ó   >• T" / U QUQ5      $ rƒ   r™   )rÊ   r<  Úintermediate_loaders     €rˆ   Úintermediate_fnÚ;Reduction.create_multilayer_helper.<locals>.intermediate_fn|  s   ø€ ñ 'Ð'A¨Ð'A°Ð'AÓBÐBrŠ   NrÏ  )rÊ   rš  r<  rš  r¶   rm   )r  Úfloat16Úbfloat16rL  r®  r  r  r  rn   r  r  Úoptimization_hintri   rh  rÈ   r   )r  r  r  r°  ry  r‰  r‹  r  r  r™  rÆ  r±  Úintermediate_dtypeÚintermediater’  rØ  r‘  s                   @rˆ   Úcreate_multilayer_helperÚ"Reduction.create_multilayer_helperT  s$  ø€ ð0 ¤§¡´·±Ð ?Ó?ñ ä—‘ð 	ô
 !×'Ñ'ØØØØØØ ØØó	
ˆð 	×ÑÔØ*×6Ñ6Ó8Ðð	CØ%ð	CØ8Jð	Cà÷	Cô
 —W‘W×%Ñ%×7Ñ7¼ÀoÓ8VÓWˆ
Ø×9Ñ9Ø˜~ó
ˆð Ð-C¬s°?Ó/CÐ"DÓDÐDÐDÜ×ÑÜØØØ(Ø&Ø!+¬C°Ó,@Ð,BÐ!CØ-Ø#Ø-ñ	ó
ð 	
rŠ   c                óÊ   • [        U5      n[        X¸S-
  -   U5      nU R                  Xr5      nU R                  UUUUUUU
5      nU R	                  UUUUUU/ UQUPU/UUU	5      $ )r�  rA   )ri   r=   rb  r  r™  )r  r  r  r°  ré  rê  r¯  r™  rÆ  r±  r  r  rv  rw  ry  s                  rˆ   rN  ÚReduction.create_multilayer”  s™   € ô& (Ð(8Ó9ˆÜ˜o¸±Ñ;¸UÓCˆ
Ø×#Ñ# NÓ>ˆØ×0Ñ0ØØØØØØØó
ˆ
ð ×+Ñ+ØØØØØØØˆfÐ�eÐØˆLØØØó
ð 	
rŠ   c                ój   • U R                  UUUUU5      nU R                  UUUUUU/ UQUQUU	SU
5      $ )r�  r0  )rŒ  r™  )r  r  r  r°  ré  r‰  r‹  r  r  r™  r±  ry  s               rˆ   rM  Ú+Reduction.create_multilayer_existing_rangesÂ  sc   € ð$ ×@Ñ@ØØØ%ØØ ó
ˆ
ð ×+Ñ+ØØØØØØ%Ø+ˆoÐ+ 
Ð+Ø ØØØó
ð 	
rŠ   r™   r›  r   rC  rŠ  rŽ  )
r^  r�  r_  rl  r`  r‹  rÃ  r{  r¶   r·   r©  ©r¶   zSequence[Sequence[Expr]]r¬  rƒ   )r  r”  r  r†  r°  r†  ré  zCallable[_P, OpsValue]rê  rš  r¯  rš  r™  z%Union[ReductionType, Literal['scan']]r  r    r  úOptional[IRNode]r¶   útuple[ReductionHint, _IntLike])
ré  z<Callable[[Sequence[_IntLike], Sequence[_IntLike]], OpsValue]r¯  rš  r™  rÃ   r°  r†  r¶   z(Callable[[Sequence[_IntLike]], OpsValue])r  r”  r  r†  r°  r†  ré  rè  rê  r‹  r¯  r‹  r™  rQ   r±  rU   r  r   r¶   r   ©r™  rÃ   r  r†  r¶   ú#Union[_NumLike, Sequence[_NumLike]])rÆ  rz   rØ  r…   r±  rU   r¶   rU   )r  rz   r  r   r¶   r�  )ra  úCallable[..., OpsValue]r¯  rš  r  rz   rÆ  rz   rv  rz   rw  r£  r  r   r¶   úCallable[..., object])ra  ú4Callable[[Sequence[Expr], Sequence[Expr]], OpsValue]r‰  r‹  r‹  r‹  r  úSequence[Integer]r  r§  r¶   z@Callable[[Sequence[sympy.Expr], Sequence[sympy.Expr]], OpsValue])r  r”  r  r†  r°  r†  ry  rè  r‰  r‹  r‹  r‹  r  ú
list[Expr]r  úlist[Integer]r™  rQ   rÆ  rz   r±  rU   r¶   r   )r  r”  r  r†  r°  r†  ré  rè  rê  r‹  r¯  r‹  r™  rQ   rÆ  rz   r±  rU   r  r   r¶   r   )r  r”  r  r†  r°  r†  ré  rè  r‰  r‹  r‹  r‹  r  r©  r  r©  r™  rQ   r±  rU   r¶   r   )"r›   rœ   r�   rž   rŸ   r   rE  rY   ra  rg  rd  rÂ  rÆ  r!  rò  rp  r±  r  r,  rF  rU   rÐ  r  r^  rb  rh  rk  r  rŒ  r™  rN  rM  r    Ú__classcell__©r¹  s   @rˆ   r®  r®  Ä  sü  ø‡ à(Ó(Ø!Ó!àÓØ!Ó!ôNð €Há˜KÓ(÷
ð 
ó )ð
ô
%ô#ðLà"ðLð 3ðLð ð	Lð
 )ðLð 
ôLô=ôö

ô
ð ð (,ðgØðgàðgð ðgð )ð	gð
 #ðgð -ðgð >ðgð ðgð %ðgð 
(ôgó ðgðR ð)ØNð)à,ð)ð ð)ð ð	)ð
 
2ó)ó ð)ðV ð )6×(=Ñ(=Ø'+ðOàðOð ðOð ð	Oð
 %ðOð ðOð )ðOð &ðOð &ðOð %ðOð 
ôOó ðOðb ðØðØ$/ðà	,óó ðð> ðDØðDØ$/ðDà	,óDó ðDð ðØðØ%(ðØ:Gðà	óó ðð  ðØ&ðØ4Dðà	óó ðð> ð (,ð(à'ð(ð -ð(ð "ð	(ð
 ð(ð ð(ð 5ð(ð %ð(ð 
ô(ó ð(ðT ðàDðð (ðð $2ð	ð
 &ðð 0ðð 
Jóó ðð8 ð=
àð=
ð ð=
ð ð	=
ð
 'ð=
ð (ð=
ð $2ð=
ð ð=
ð ,ð=
ð &ð=
ð ð=
ð &ð=
ð 
ó=
ó ð=
ð~ ð (,ð+
àð+
ð ð+
ð ð	+
ð
 %ð+
ð ð+
ð )ð+
ð &ð+
ð ð+
ð &ð+
ð %ð+
ð 
ô+
ó ð+
ðZ ð$
àð$
ð ð$
ð ð	$
ð
 %ð$
ð (ð$
ð $2ð$
ð "ð$
ð ,ð$
ð &ð$
ð &ð$
ð 
ó$
ó ö$
rŠ   r®  c                ó    ^ ^^• SUU U4S jjnU$ )ú1A closure containing math to read a given elementc                óÆ   >• Tb  [        U 5      [        T5      :X  d   e[        U 5      [        T5      :X  d   eTn[        U TT5       H  u  p#nUS:w  d  M  XU-  -   nM     U$ r  )rÈ   rÒ   )rÊ   Úresultrò   ÚstÚszrQ  r  r  s        €€€rˆ   r_  Ú_fixed_indexer.<locals>.indexerñ  sj   ø€ ØÑ!¤c¨%£j´C¸³KÓ&?Ð?Ð?Ü�5‹zœS ›YÓ&Ð&Ð&ØˆÜ˜u f¨dÖ3‰KˆC�RØ�Q�wØ¨¡(Ñ*’ñ 4ð ˆrŠ   )rÊ   r¢  r¶   r…   r™   )r  r  rQ  r_  s   ``` rˆ   r+  r+  ê  s   ú€ ÷ñ ð €NrŠ   ÚINNER_FN_TYc                  óz   ^ • \ rS rSr% S\S'                     SU 4S jjr          SS jrSrU =r$ )	ÚMultiOutputReductioni   r…   Úoutput_indexc
                ó¨   >^• [        T5      (       a  T4m[        T5      S:X  a  TS   n
O      SU4S jjn
[        TU ]  UUU
UUUUUS9  X�l        g )NrA   r   c                ó4   >^ ^• [        U U4S jT 5       5      $ )Nc              3  ó4   >#   • U  H  o" TT5      v •  M     g 7frƒ   r™   )ræ   rÀ   rò   Úreduction_idxs     €€rˆ   rè   Ú@MultiOutputReduction.__init__.<locals>.loader.<locals>.<genexpr>  s   øé € ÐHºi¸˜R  ]×3Ð3ºiùó   ƒ)r¤   )rò   rº  Ú	inner_fnss   ``€rˆ   ra  Ú-MultiOutputReduction.__init__.<locals>.loader  s   ú€ ô ÕH¹iÓHÓHÐHrŠ   rÏ  )rò   r‹  rº  r‹  r¶   ztuple[OpsValue, ...])ÚcallablerÈ   r·  Ú__init__r¶  )rŒ  r  r  r½  rê  r¯  r™  r°  r±  r¶  ra  r¹  s      `       €rˆ   rÀ  ÚMultiOutputReduction.__init__  sƒ   ù€ ô �I×ÑØ"˜ˆIô ˆy‹>˜QÓØ˜q‘\‰FðIØ#ðIØ4BðIà%÷Iô
 	‰ÑØØØØØ-Ø)ØØ)ð 	ñ 		
ð )ÕrŠ   c           	     óN  • [         R                  " U R                  U R                  U R                  U R                  X45      5      n[        U[        [        45      (       d   [        U5      5       eXPR                     n[         R                  " U=(       d    SU" U5      U5      $ rZ  )rl   rÁ  r  r°  r™  ré  r„   r¤   r£   r°   r¶  rÂ  )rŒ  r^  r_  r`  rÃ  r¦   r  s          rˆ   rÂ  Ú$MultiOutputReduction.store_reduction(  sƒ   € ô —’Ø�J‰JØ�N‰NØ×ÑØ�M‰M˜$Ó/ó	
ˆô ˜&¤5¬$ -×0Ñ0Ð>´$°v³,Ó>Ð0Ø×(Ñ(Ñ)ˆÜ×"Ò" ;×#;°)¹WÀT»]ÈEÓRÐRrŠ   )r¶  )r  r”  r  r†  r½  z)Union[INNER_FN_TY, Sequence[INNER_FN_TY]]rê  r§  r¯  r§  r™  rQ   r°  r†  r±  rU   r¶  r…   )
r^  r�  r_  rl  r`  r‹  rÃ  r{  r¶   r   )	r›   rœ   r�   rž   rŸ   rÀ  rÂ  r    rª  r«  s   @rˆ   rµ  rµ     s¨   ø‡ ØÓð#)àð#)ð ð#)ð =ð	#)ð
 "ð#)ð ,ð#)ð &ð#)ð ð#)ð &ð#)ð ÷#)ðJSà"ðSð 3ðSð ð	Sð
 )ðSð 
÷Sò SrŠ   rµ  c                  ój   • \ rS rSr\\R                  S4                   SS jj5       rSrg)ÚOnlineSoftmaxReductioni:  Nc
           	     óŽ   ^^^^^^^• [        UUUUUUU4S j[        U5       5       5      n
U
 H  nUR                  5         M     U
$ )z.
Create the reduction disregarding splitting.
c              3  óp   >#   • U  H+  n[         R                  [        TTTTTS TTU5	      5      v •  M-     g7f)rZ  N)r   r  rµ  )	ræ   Ú
output_idxr  r  ré  rê  r±  r¯  r°  s	     €€€€€€€rˆ   rè   Ú0OnlineSoftmaxReduction.create.<locals>.<genexpr>K  sO   øé € ð 
ò 0�
ô ×ÑÜ$ØØØØØ$Ø+ØØ"Øó
÷ð ò 0ùs   ƒ36)r¤   rÉ   r  )r  r  r  r°  ré  rê  r¯  Ú
num_outputr±  r  Úresultsr  s    `````` `   rˆ   r  ÚOnlineSoftmaxReduction.create;  sB   þ€ ô  ÷ 
ò 
ô $ JÔ/ó
ó 
ˆó  ˆAØ�I‰IŽKñ àˆrŠ   r™   )r  r”  r  r†  r°  r†  ré  rè  rê  r‹  r¯  r‹  rÊ  r…   r±  rU   r  r   r¶   úSequence[TensorBox])	r›   rœ   r�   rž   rF  rU   rÐ  r  r    r™   rŠ   rˆ   rÅ  rÅ  :  s„   † Øð )6×(=Ñ(=Ø'+ð!àð!ð ð!ð ð	!ð
 %ð!ð ð!ð )ð!ð ð!ð &ð!ð %ð!ð 
ô!ó ó!rŠ   rÅ  c                  ó¸   • \ rS rSr\\R                  4               SS jj5       r\      SS j5       r	\                  S	S j5       r
Srg)
ÚWelfordReductioni`  c                óÐ  ^^^^^• US;   d   e[         R                  R                  R                  [	        T5      5      nS
UUU4S jjn	US:X  a  U	" S5      n
U	" S5      nU	" S5      nX«U4$ US:X  aD      SUUUU4S jjmUS:X  a  T" US   5      U	" S5      U	" S5      4$ [        U4S jU 5       5      $ [        R                  TTTUS   TTUUS9u  pÞU[        R                  :X  a  UnUS:”  a  U R                  TTUTTUUU5      $ [        S	5       Vs/ s H)  n[        R                  [        TTUTTUTUU5	      5      PM+     nnU H  nUR                  5         M     U$ s  snf )N)rY  rœ  c                óV   >^ • SUU 4S jjn[         R                  TTU[        T5      S9$ )Nc                ó2   >• [         R                  " TT5      $ rƒ   r4  )rò   r  r0  s    €€rˆ   ré  Ú8WelfordReduction.create.<locals>.const.<locals>.inner_fnq  s   ø€ Ü—|’|ØØóð rŠ   rh  ©rò   r‹  r¶   rm   ©rO  r  r£   )r0  ré  r  r  rê  s   ` €€€rˆ   ÚconstÚ&WelfordReduction.create.<locals>.constp  s7   ù€ ÷ð ô ×#Ñ#ØØØ!Ü˜F“|ð	 $ð ð rŠ   r   rA   c                óV   >^ • SU U4S jjn[         R                  TTU[        T5      S9$ )Nc                ór   >• T Vs/ s H  n[         R                  R                  PM     nnT" X5      $ s  snf rƒ   r;  )rò   rø   r<  ra  r¯  s      €€rˆ   ré  Ú7WelfordReduction.create.<locals>.copy.<locals>.inner_fn‰  s2   ø€ Ù=MÓ&NÒ=M¸¤u§w¡w§|¤|Ñ=M�OÐ&NÙ! #Ó7Ð7ùò 'Or=  rh  rÔ  rÕ  )ra  ré  r  r  rê  r¯  s   ` €€€€rˆ   ÚcopyÚ%WelfordReduction.create.<locals>.copy†  s7   ù€ ÷8ð 8ô !×'Ñ'Ø!ØØ%Ü ›<ð	 (ð ð rŠ   rY  c              3  ó4   >#   • U  H  nT" U5      v •  M     g 7frƒ   r™   )ræ   rÀ   rÛ  s     €rˆ   rè   Ú*WelfordReduction.create.<locals>.<genexpr>—  s   øé € Ð:²	¨"™T "ŸX˜X²	ùr¼  )r™  r  rß   )r0  r…   r¶   r   )ra  r¦  r¶   r   )rn   r  r  rJ  ri   r¤   r®  r  rU   rÐ  rN  rÉ   r   r  rÏ  r  )r  r  r  r½  rê  r¯  r™  r±  r  rÖ  ÚmeanÚm2ÚweightrT  rÆ  rÈ  rË  r  rÛ  s    `` ``            @rˆ   r  ÚWelfordReduction.createa  s½  ü€ ð Ð!FÓFÐFÐFäŸ'™'×*Ñ*×3Ñ3´MÐBRÓ4SÓTˆ÷	ñ 	ð ˜aÓÙ˜“8ˆDÙ�q“ˆBÙ˜1“XˆFØ˜VÐ#Ð#à˜aÓðØLðà÷ò ð Ð!1Ó1Ù˜I a™LÓ)©5°«8±U¸1³XÐ=Ð=äÔ:±	Ó:Ó:Ð:ô&  ×*Ñ*ØØØØ�a‰LØØØ)Ø+ð +ð 	
‰ˆð œ]×2Ñ2Ó2Ø!ˆNØ�1‹9à×(Ñ(ØØØØØ ØØØó	ð 	ô2 $ Aœhó
ò '�
ô ×ÑÜ ØØØØØ$Ø"ØØ"Øó
öñ 'ð 	ð 
ó  ˆAØ�I‰IŽKñ àˆùò%
s   Ä0E#c                ó   • g)N)r   r   r   r™   ra  s     rˆ   rb  ÚWelfordReduction.default_valueÚ  s   € ð rŠ   c	                ó  ^ ^^^^^^• [        T5      m[        R                  R                  R	                  [
        R                  " TT-  S5      5      (       + n	U	(       aB  US:w  a<          S
U4S jjn
T R                  UTUS   [        U
SS9[        U
SS94UTSTUS9$ [        TTS-
  -   T5      m[        R                  UT[        UU UUU4S jU 5       5      / UQTPT/UU5      nU H  nUR                  5         M             SS jm[        R                  R                  R                  [        U5      5      nT R                  TXØ5      n[        R                  UT[        U4S	 jU 5       5      UT/SU5      $ )r�  r   rœ  c                ó2   >• [         R                  " UT5      $ rƒ   r4  )rò   rº  r  r  s      €rˆ   rK  Ú4WelfordReduction.create_multilayer.<locals>.constantù  s   ø€ ô —|’| E¨5Ó1Ð1rŠ   r  rA   )r  r  r½  rê  r¯  r™  rÆ  r±  c           
   3  óL   >#   • U  H  nTR                  UTTTTS S9v •  M     g7f)r   )rw  N)r  )ræ   ra  rv  r  r  r¯  rÆ  s     €€€€€rˆ   rè   Ú5WelfordReduction.create_multilayer.<locals>.<genexpr>	  s>   øé € ð 
ò (�Fð ×+Ñ+ØØ$Ø#ØØØð ,õ ò (ùs   ƒ!$c                ó   • U" / U QUQ5      $ rƒ   r™   )rÊ   r<  ra  s      rˆ   Úintermediate_loader_fnÚBWelfordReduction.create_multilayer.<locals>.intermediate_loader_fn$	  s   € ñ
 Ð4˜EÐ4 OÐ4Ó5Ð5rŠ   c              3  óT   >#   • U  H  n[        TUR                  5       S 9v •  M     g7f))ra  N)r   r  )ræ   rË   rë  s     €rˆ   rè   ré  2	  s&   øé € ð â&�Aô Ð.°q·}±}³ÖGÚ&ùræ  )rò   r‹  rº  r‹  r  r…   r¶   rm   )rÊ   r‹  r<  r‹  ra  r–  r¶   rm   )ri   rn   r  r  rÿ  rª   r-  rN  r   r=   rÏ  r  r¤   r  r  rh  )r  r  r  r½  rê  r¯  r™  rÆ  r±  rx  rK  ÚintermediatesrË   rØ  rv  rë  r  s   ` `  ` `      @@@rˆ   rN  Ú"WelfordReduction.create_multilayerà  sÜ  þ€ ô  (Ð(8Ó9ˆÜŸ™×(Ñ(×>Ñ>Ü�HŠH�_ uÑ,¨aÓ0ó
ô 
ˆ	ö ˜Ð+<Ó<ð2Ø#ð2Ø4Bð2ØKNð2à÷2ð
 ×(Ñ(ØØà˜a‘LÜ˜H¨AÑ.Ü˜H¨AÑ.ðð
 Ø!1Ø0ØØ-ð )ð ð ô ˜o°¸±Ñ;¸UÓCˆ
Ü(×/Ñ/ØØÜ÷ 
ð 
ñ (ó
ó 
ð ˆfÐ�eÐØˆLØØó#
ˆó& ˆAØ�I‰IŽKñ ð	6Ø!ð	6à+ð	6ð 9ð	6ð ô		6ô —W‘W×%Ñ%×/Ñ/´¸fÓ0EÓFˆ
Ø×9Ñ9Ø�:ó
ˆô  ×&Ñ&ØØÜô á&óó ð ØˆGàØó
ð 	
rŠ   r™   N)r  r”  r  r†  r½  úSequence[Callable[..., Any]]rê  r©  r¯  r©  r™  rQ   r±  rU   r¶   rÍ  r¢  )r  r”  r  r†  r½  rð  rê  r©  r¯  r©  r™  rQ   rÆ  rz   r±  rU   r¶   rÍ  )r›   rœ   r�   rž   rF  rU   rÐ  r  r±  rb  rN  r    r™   rŠ   rˆ   rÏ  rÏ  `  s  † Øð )6×(=Ñ(=ðvàðvð ðvð 0ð	vð
 ðvð (ðvð &ðvð &ðvð 
ôvó ðvðp ðØðØ$/ðà	,óó ðð
 ðZ
àðZ
ð ðZ
ð 0ð	Z
ð
 ðZ
ð (ðZ
ð &ðZ
ð ðZ
ð &ðZ
ð 
óZ
ó óZ
rŠ   rÏ  c                  ó¤  ^ • \ rS rSr% S\S'   S\S'   S\S'   S\S'   S	\S
'   S\S'   S\S'   S\S'   \" S 5      S S!U 4S jjj5       rS"U 4S jjr          S#S jrS$S jr	S%S jr
S%S jrS%S jrS&S jrS'S jrS S!S jjr\\R$                  4SS.                   S(S jjj5       r\                  S)S j5       rSrU =r$ )*ÚScani>	  r©  Úscan_rangesr  ú=Callable[[tuple[Any, ...], tuple[Any, ...]], tuple[Any, ...]]r  zFCallable[[Sequence[_IntLike], Sequence[_IntLike]], Sequence[_IntLike]]rÍ   rU   r±  r…   r¶  útuple[torch.dtype, ...]Údtypesútuple[Callable[..., Any], ...]r½  c                óÔ   >^• [         TU ]  T5      [        5       R                  " U4S jU R                   5       6 -  [        5       R                  " U4S jU R
                   5       6 -  $ )Nc              3  ó<   >#   • U  H  n[        UT5      v •  M     g 7frƒ   r'   rí  s     €rˆ   rè   Ú,Scan.get_free_symbol_uses.<locals>.<genexpr>T	  ó   øé € ÐOÒ>N¸Ô" 1 m×4Ð4Ò>Nùrð  c              3  ó<   >#   • U  H  n[        UT5      v •  M     g 7frƒ   r'   rí  s     €rˆ   rè   rú  W	  ó   øé € ÐHºi¸Ô" 1 m×4Ð4ºiùrð  )r·  ra  r:   rñ  ró  r  r¸  s    `€rˆ   ra  ÚScan.get_free_symbol_usesL	  s]   ù€ ô ‰GÑ(¨Ó7Ü‹l× Ò ÜO¸d×>NÒ>NÓOðñô ‹l× Ò ÜH¸d¿iºiÓHðñ	ð	
rŠ   c                óª   >• [        U R                  5      [        U R                  5      -   [        U R                  5      :X  d   e[        TU ]  5         g rƒ   )rÈ   rê  ró  r  r·  r“  ©rŒ  r¹  s    €rˆ   r“  ÚScan.__post_init__[	  ó=   ø€ Ü�4—;‘;Ó¤# d×&6Ñ&6Ó"7Ñ7¼3¸t¿y¹y»>ÓIÐIÐIÜ‰ÑÕrŠ   c                ó"  ^• U R                  X45      m[        U4S jU R                   5       5      n[        R                  " U R
                  U R                  U5      n[        R                  " U=(       d    SU" T5      X`R                     5      $ )Nc              3  ó2   >#   • U  H  o" T5      v •  M     g 7frƒ   r™   ©ræ   ré  rò   s     €rˆ   rè   Ú'Scan.store_reduction.<locals>.<genexpr>g	  ó   øé € ÐD²^¨�x —}�}²^ùó   ƒr[  )	rÍ   r¤   r½  rl   rÓ  rö  r  r\  r¶  )rŒ  r^  r_  r`  Ú	scan_varsr¦   r¯  rò   s          @rˆ   rÂ  ÚScan.store_reduction_	  sk   ø€ ð �l‰l˜4Ó+ˆÜÔD°T·^²^ÓDÓDˆÜ—’˜$Ÿ+™+ t§¡¸Ó?ˆÜ�yŠyØ×$˜9¡g¨c£l°F×;LÑ;LÑ4Mó
ð 	
rŠ   c                ó   • g)NÚcustomr™   rŸ  s    rˆ   rd  ÚScan.get_reduction_typem	  s   € àrŠ   c                ó   • U R                   $ rƒ   )ró  rŸ  s    rˆ   rg  ÚScan.get_reduction_sizeq	  rª  rŠ   c                ó   • U R                   $ rƒ   ©r  rŸ  s    rˆ   r	  ÚScan.get_sizet	  ó   € Ø�y‰yÐrŠ   c                ó   • U R                   $ rƒ   rþ  rŸ  s    rˆ   r  ÚScan.get_pointwise_sizew	  r  rŠ   c                óX   • [        U R                  5      [        U R                  5      -   $ rƒ   )rÈ   rê  ró  rŸ  s    rˆ   rÆ  ÚScan.index_lengthz	  ó!   € Ü�4—;‘;Ó¤# d×&6Ñ&6Ó"7Ñ7Ð7rŠ   c                ó´   • U R                  U R                  5      nU R                  U R                  [        R                  5      nU R                  X5      nU4$ rƒ   )r  rê  ró  r@   rÉ  rÍ   ©rŒ  rÊ   rÊ  rò   s       rˆ   r!  ÚScan.inner_fn_args}	  óC   € Ø—‘˜DŸK™KÓ(ˆØ—‘˜T×-Ñ-¬t¯}©}Ó=ˆØ�l‰l˜5Ó)ˆØˆvˆrŠ   c                óÖ   • U R                  U R                  5      nU R                  U R                  [        R                  5      nU R                  X#5      n[        U R                  XAS9$ r2  )r  rê  ró  r@   rÉ  rÍ   rJ   ré  ©rŒ  ri  rÊ   rÊ  rò   s        rˆ   rò  ÚScan.inner_fn_free_symbolsƒ	  óM   € Ø—‘˜DŸK™KÓ(ˆØ—‘˜T×-Ñ-¬t¯}©}Ó=ˆØ�l‰l˜5Ó)ˆÜ# D§M¡M°3ÑTÐTrŠ   T)Úcan_fallback_to_atenc               óú  ^^^• / US T QUTS-   S  QmUT   /m[         R                  R                  U[        R                  5      (       d  S /[        U5      -  $ [        U5      S:”  aB  [         R                  R                  U[        R                  5      (       d  S /[        U5      -  $ [         R                  R                  n
U
R                  [        T5      5      n[        U5      [        U5      :X  d   eU
R                  [        R                  " US5      5      (       a=  [        [        U5      5       Vs/ s H  n[        R                  UX,   X<   US9PM     sn$ U R!                  UUS   US   TTTUUS9u  p}["        nUS:”  at  [$        R&                  R(                  S L =(       d    [*        =(       a	    [,        S:¬  =(       a    [        U5      S:H  nU(       d  U(       a  S /[        U5      -  $ SnO[.        nSUUU4S jjn[        [        U5      5       Vs/ s H/  n[0        R                  U" S	UX,   UX<   UUTTUUUUS.U	D65      PM1     nnU H  nUR3                  5         M     U$ s  snf s  snf )
NrA   rh  r   )r  r  ré  ÚaxisÚpointwise_rangesró  r  Ú
scan_numelz3.3.0c                óˆ   >• [        U5      [        T5      :X  d   e[        U 5      [        T5      :X  d   e/ U S T QUQU TS  Q$ rƒ   ©rÈ   )rÊ   Ú
scan_indexr#  r$  ró  s     €€€rˆ   rÍ   ÚScan.create.<locals>.reindexÍ	  óS   ø€ Ü�z“?¤c¨+Ó&6Ó6Ð6Ð6Ü�u“:¤Ð%5Ó!6Ó6Ð6Ð6Ø>�U˜5˜D�\Ð> JÐ>°°t°u°Ð>Ð>rŠ   )r  r  rö  ré  r½  r  rê  ró  r  rÍ   r±  r¶  )rÊ   r‹  r(  r‹  r¶   r¨  r™   )rn   r  r÷  rD   ÚSCANrÈ   ÚTUPLE_REDUCTIONr  rJ  ri   rÿ  rª   r5  rÉ   rO  r  r  rò  r  ÚversionÚhipÚ
has_tritonÚtriton_versionÚ	SplitScanr   r  )r  r  rö  r½  r  r#  r  r±  r!  r¾   r  r%  r¶  r  Ú	scan_typeÚsupports_splitrÍ   rË  r¯  r$  ró  s        `             @@rˆ   r  ÚScan.create‰	  s™  ú€ ð =˜T % 4˜[Ð<¨4°°q±°
Ð+;Ð<ÐØ˜D‘z�lˆä�w‰w×"Ñ" 6¬>×+>Ñ+>×?Ñ?Ø�6œC ›KÑ'Ð'äˆv‹;˜‹?¤1§7¡7×#6Ñ#6Ø”N×2Ñ2÷$
ñ $
ð �6œC ›KÑ'Ð'ä—7‘7×#Ñ#ˆØ×&Ñ&¤}°[Ó'AÓBˆ
ä�6‹{œc )›nÓ,Ð,Ð,ð ×)Ñ)¬%¯(ª(°:¸qÓ*A×BÑBô %*¬#¨f«+Ô$6óò %7�Lô × Ñ Ø!Ø Ñ.Ø&Ñ4Øð	 !ó ñ %7ñð ð &)§^¡^ØØ˜‘)Ø˜q‘\ØØ-Ø#Ø!Ø!ð &4ð 	&
Ñ"ˆô ˆ	Ø˜‹>ô —‘×!Ñ! TÐ)×W¬j×.V¼^ÈwÑ=V÷%ô �v“; !Ñ#ð ö "Þ'à ˜6¤C¨£KÑ/Ð/à!"‘Jä%�	÷	?ñ 	?ô. !&¤c¨&£kÔ 2ó%
ò$ !3�ô# ×ÑÙð Ø!Ø Ñ.Ø!Ø&Ñ4Ø'ØØ+Ø +Ø)Ø#Ø#1Ø!-ñð ñöñ" !3ð% 	ð 
ó* ˆFØ�N‰NÖñ ð ˆùòAùòP
s   Ä;$I3È 6I8c	                óL   ^^• SUU4S jjn	[         R                  UUUU	UUSUS9$ )Nc                ó,   >• T" / U S T QUQU TS  Q5      $ rƒ   r™   )rò   rº  r#  ré  s     €€rˆ   ry  Ú#Scan.num_splits.<locals>.wrapper_fnù	  s*   ø€ ÙÐF˜c % 4˜jÐF¨=ÐF¸3¸t¸u¸:ÐFÓGÐGrŠ   rÓ  )r  r  r°  ré  rê  r¯  r™  r  )rò   r‹  rº  r‹  r¶   rm   )r®  r  )
r  r  r  ré  r#  r$  ró  r  r%  ry  s
      ``     rˆ   r  ÚScan.num_splitsì	  sA   ù€ ÷	Hð 	Hô ×#Ñ#ØØØØØ#Ø(Ø!Ø&ð $ð 	
ð 		
rŠ   r™   r   rC  r~  )
r^  r�  r_  z%Callable[[Sequence[_IntLike]], Never]r`  r‹  r	  r{  r¶   r   rŽ  rŠ  r©  rB  )r  r”  rö  rõ  r½  z+tuple[Callable[[Sequence[Expr]], Any], ...]r  r©  r#  r…   r  rô  r±  rU   r!  r•   r¾   r   r¶   úSequence[Optional[TensorBox]])r  r”  r  r†  ré  r–  r#  r…   r$  r©  ró  r©  r  rô  r%  r    r¶   r¡  )r›   rœ   r�   rž   rŸ   rY   ra  r“  rÂ  rd  rg  r	  r  rÆ  r!  rò  rF  rU   rÐ  r  r  r    rª  r«  s   @rˆ   rò  rò  >	  s¶  ø‡ àÓØ
ÓØMÓMØSÓSØ!Ó!ØÓà#Ó#Ø-Ó-ñ ˜FÓ#÷
ð 
ó $ð
÷ ð
à"ð
ð 7ð
ð ð	
ð
 $ð
ð 
ô
ôô ôôô8ôöUð ð )6×(=Ñ(=ð`ð &*ñ`àð`ð (ð`ð ?ð	`ð
 ð`ð ð`ð Rð`ð &ð`ð #ð`ð ð`ð 
'õ`ó ð`ðD ð
àð
ð ð
ð 7ð	
ð
 ð
ð (ð
ð #ð
ð Rð
ð ð
ð 
(ó
ó ö
rŠ   rò  c                  ó   • \ rS rSrSrg)r1  i	
  r™   N)r›   rœ   r�   rž   r    r™   rŠ   rˆ   r1  r1  	
  s   † ârŠ   r1  c                  ón  ^ • \ rS rSr% S\S'   S\S'   S\S'   S\S'   S	\S
'   S\S'   S\S'   S\S'   S\S'   \" S 5      SSU 4S jjj5       rS U 4S jjr          S!S jrS"S jr	S#S jr
S#S jrS#S jrS$S jrS%S jrSSS jjr\\R$                  4                   S&S jj5       rSrU =r$ )'ÚSorti
  r©  Úsort_rangesr  z:Callable[[Sequence[Expr], Sequence[Expr]], Sequence[Expr]]rÍ   rU   r±  r…   r¶  rõ  rö  r÷  r½  r•   ÚstableÚ
descendingc                óÔ   >^• [         TU ]  T5      [        5       R                  " U4S jU R                   5       6 -  [        5       R                  " U4S jU R
                   5       6 -  $ )Nc              3  ó<   >#   • U  H  n[        UT5      v •  M     g 7frƒ   r'   rí  s     €rˆ   rè   Ú,Sort.get_free_symbol_uses.<locals>.<genexpr>$
  rû  rð  c              3  ó<   >#   • U  H  n[        UT5      v •  M     g 7frƒ   r'   rí  s     €rˆ   rè   rB  '
  rý  rð  )r·  ra  r:   rñ  r=  r  r¸  s    `€rˆ   ra  ÚSort.get_free_symbol_uses
  s]   ù€ ô ‰GÑ(¨Ó7Ü‹l× Ò ÜO¸d×>NÒ>NÓOðñô ‹l× Ò ÜH¸d¿iºiÓHðñ	ð	
rŠ   c                óª   >• [        U R                  5      [        U R                  5      -   [        U R                  5      :X  d   e[        TU ]  5         g rƒ   )rÈ   rê  r=  r  r·  r“  r   s    €rˆ   r“  ÚSort.__post_init__+
  r  rŠ   c                ó6  ^• U R                  X45      m[        U4S jU R                   5       5      n[        R                  " U R
                  XPR                  U R                  5      n[        R                  " U=(       d    SU" T5      X`R                     5      $ )Nc              3  ó2   >#   • U  H  o" T5      v •  M     g 7frƒ   r™   r  s     €rˆ   rè   Ú'Sort.store_reduction.<locals>.<genexpr>7
  r  r  r[  )
rÍ   r¤   r½  rl   Úsortrö  r>  r?  r\  r¶  )rŒ  r^  r_  r`  rÃ  r¦   r¯  rò   s          @rˆ   rÂ  ÚSort.store_reduction/
  so   ø€ ð �l‰l˜4Ó0ˆÜÔD°T·^²^ÓDÓDˆÜ—’˜$Ÿ+™+ v¯{©{¸D¿O¹OÓLˆÜ�yŠyØ×$˜9¡g¨c£l°F×;LÑ;LÑ4Mó
ð 	
rŠ   c                ó   • g)NrJ  r™   rŸ  s    rˆ   rd  ÚSort.get_reduction_type=
  s   € ØrŠ   c                ó   • U R                   $ rƒ   )r=  rŸ  s    rˆ   rg  ÚSort.get_reduction_size@
  rª  rŠ   c                ó   • U R                   $ rƒ   r  rŸ  s    rˆ   r	  ÚSort.get_sizeC
  r  rŠ   c                ó   • U R                   $ rƒ   rþ  rŸ  s    rˆ   r  ÚSort.get_pointwise_sizeF
  r  rŠ   c                óX   • [        U R                  5      [        U R                  5      -   $ rƒ   )rÈ   rê  r=  rŸ  s    rˆ   rÆ  ÚSort.index_lengthI
  r  rŠ   c                ó´   • U R                  U R                  5      nU R                  U R                  [        R                  5      nU R                  X5      nU4$ rƒ   )r  rê  r=  r@   rÉ  rÍ   r  s       rˆ   r!  ÚSort.inner_fn_argsL
  r  rŠ   c                óÖ   • U R                  U R                  5      nU R                  U R                  [        R                  5      nU R                  X#5      n[        U R                  XAS9$ r2  )r  rê  r=  r@   rÉ  rÍ   rJ   ré  r  s        rˆ   rò  ÚSort.inner_fn_free_symbolsR
  r   rŠ   c	                óà  ^^^• / US T QUTS-   S  QmUT   /m[         R                  R                  U[        R                  5      (       d  S /[        U5      -  $ [         R                  R                  n
U
R                  [        T5      5      nSn[        R                  R                  =(       a%    U
R                  [        R                  " X¼5      5      nU(       d  S /[        U5      -  $ [        U5      [        U5      :X  d   eU
R                  [        R                  " US5      5      (       a=  [        [        U5      5       Vs/ s H  n[         R#                  UX.   X>   US9PM     sn$ SUUU4S jjn[        [        U5      5       Vs/ s H3  n[$        R#                  ['        SUX.   UX>   UUTTUUUUUS.U	D65      PM5     nnU H  nUR)                  5         M     U$ s  snf s  snf )NrA   re  rh  c                óˆ   >• [        U5      [        T5      :X  d   e[        U 5      [        T5      :X  d   e/ U S T QUQU TS  Q$ rƒ   r'  )rÊ   Ú
sort_indexr#  r$  r=  s     €€€rˆ   rÍ   ÚSort.create.<locals>.reindex‡
  r*  rŠ   )r  r  rö  ré  r½  r  rê  r=  rÍ   r±  r¶  r>  r?  )rÊ   r‹  r\  r‹  r¶   r¨  r™   )rn   r  r÷  rD   ÚSORTrÈ   r  rJ  ri   rB   r#  Úpersistent_reductionsrÿ  rª   r5  rÉ   rO  r  r   r<  r  )r  r  rö  r½  r  r#  r>  r?  r±  r¾   r  Ú
sort_numelÚ
max_rblockÚis_persistent_kernelr¶  rÍ   rË  r¯  r$  r=  s        `            @@rˆ   r  ÚSort.createX
  s  ú€ ð =˜T % 4˜[Ð<¨4°°q±°
Ð+;Ð<ÐØ˜D‘z�lˆä�w‰w×"Ñ" 6¬>×+>Ñ+>×?Ñ?Ø�6œC ›KÑ'Ð'ä—7‘7×#Ñ#ˆØ×&Ñ&¤}°[Ó'AÓBˆ
ð ˆ
ä�M‰M×/Ñ/÷ QØ×.Ñ.¬u¯xªx¸
Ó/OÓPð 	ö $à�6œC ›KÑ'Ð'ä�6‹{œc )›nÓ,Ð,Ð,ð ×)Ñ)¬%¯(ª(°:¸qÓ*A×BÑBô %*¬#¨f«+Ô$6óò %7�Lô × Ñ Ø!Ø Ñ.Ø&Ñ4Øð	 !ó ñ %7ñð ÷	?ñ 	?ô0 !&¤c¨&£kÔ 2ó'
ò& !3�ô% ×ÑÜð Ø!Ø Ñ.Ø!Ø&Ñ4Ø'ØØ+Ø +Ø#Ø#1Ø!-Ø!Ø)ñð ñöñ$ !3ð' 	ð 
ó, ˆFØ�N‰NÖñ ð ˆùòQùò
s   Å$G&Æ:G+r™   r   rC  r~  )
r^  r�  r_  r˜  r`  r‹  rÃ  r‹  r¶   r   rŽ  rŠ  r©  rŸ  )r  r”  rö  rõ  r½  z'tuple[Callable[[list[Expr]], Any], ...]r  r©  r#  r…   r>  r•   r?  r•   r±  rU   r¾   r   r¶   r9  )r›   rœ   r�   rž   rŸ   rY   ra  r“  rÂ  rd  rg  r	  r  rÆ  r!  rò  rF  rU   rÐ  r  r    rª  r«  s   @rˆ   r<  r<  
  sC  ø‡ ð ÓØ
ÓØGÓGØ!Ó!ØÓà#Ó#Ø-Ó-àƒLØÓñ ˜FÓ#÷	
ð 	
ó $ð	
÷ ð
à"ð
ð 2ð
ð ð	
ð
 'ð
ð 
ô
ôô ôôô8ôöUð ð )6×(=Ñ(=ðLàðLð (ðLð ;ð	Lð
 ðLð ðLð ðLð ðLð &ðLð ðLð 
'ôLó öLrŠ   r<  c                ó:   •  [        U SS9  g! [         a     gf = f)NF©ÚfreezeT)rO  rÚ  r†   s    rˆ   r
  r
  ¨
  s&   € ðÜ˜a¨Ò.ØøÜó Ùðús   ‚
 �
™c                ó¦   •  [        U SS9u  pUR                  5       (       a  UR                  5         UR                  5       $ ! [         a     gf = f©NFre  )rO  Úshould_pad_stridesÚpad_stridesÚis_contiguousrÚ  )r‡   Ú_bufferrN  s      rˆ   Ú is_contiguous_storage_and_layoutrm  °
  sS   € ðÜ/°¸%Ñ@‰ˆð ×$Ñ$×&Ñ&Ø×ÑÔ Ø×#Ñ#Ó%Ð%øÜó Ùðús   ‚A A Á
AÁAc           	     óÀ  • [        U [        5      (       a  [        U R                  UUUUUS9$ [        U [        5      (       a5  [        U R                  UUUUUS9u  pgX R                  R                  5       4$ [        U [        5      (       a•  U(       as  U(       a6  U R                  5         U R                  5       R                  5       (       d   eO6Ub  U R                  X4S9  O#Ub  U R                  XTS9  OU R                  5         [	        U 5      U R                  5       4$ [        U [        5      (       a#  [        U R                  US9u  p†X€R                  4$ [        e)zÈ
Try to simplify x into a StorageBox and a Layout.

allow_padding only affect how we apply stride_order. When allow_padding
is True, we have the freedom to add padding when applying the stride_order.
©rf  Úwant_contiguousÚstride_orderr@  rN  ©r@  re  )r„   r   rO  rM  rq  r  rr  r<  rk  rA  rO  rë  rS  rN  rÚ  )	r‡   rf  rp  rq  r@  rN  rø   rN  Úbuffers	            rˆ   rO  rO  ¼
  sJ  € ô �!”Y×ÑÜ$Ø�F‰FØØ+Ø%Ø'Ø'ñ
ð 	
ô �!”Z× Ñ Ü)Ø�F‰FØØ+Ø%Ø'Ø'ñ
‰	ˆð —&‘&×#Ñ#Ó%Ð%Ð%Ü�!”V×ÑÞÞØ—‘Ô!Ø—|‘|“~×3Ñ3×5Ñ5Ð5Ñ5ØÑ)Ø×1Ñ1Ø ð 2ò ð Ñ*Ø×2Ñ2Ø!ð 3ò ð —‘Ô!Ü˜!‹}˜aŸl™l›nÐ,Ð,Ü�!”_×%Ñ%ô *Ø�F‰FØñ
‰	ˆð —x‘xÐÐÜ
ÐrŠ   c                ó^   •  [        U SS9u  p#UR                  U5      $ ! [         a     gf = frh  )rO  Úis_stride_orderedrÚ  )r‡   rq  rl  rN  s       rˆ   Ú"is_stride_order_storage_and_layoutrv  ø
  s8   € ðÜ/°¸%Ñ@‰ˆØ×'Ñ'¨Ó5Ð5øÜó Ùðús   ‚ Ÿ
,«,c                ó  • [        U [        [        45      (       a  [        U R                  5      $ [        U [
        5      (       a}  U R                  n[        R                  R                  R                  UR                  [        UR                  5      -  [        5      (       + n[        U R                  5      =(       d    U$ [        U [        5      (       a+  U R!                  5       [        R                  R"                  ;   $ gr  )r„   r   rq  Úis_unalignedrM  rS  rN  rn   r  r  Ústatically_known_multiple_ofrQ  r`   r  rb   rr  rs  Úunaligned_buffers)r²   rN  Úhas_unaligned_layouts      rˆ   rx  rx    s´   € Ü�$œ¤JÐ/×0Ñ0Ü˜DŸI™IÓ&Ð&ä�$œ×(Ñ(Ø—‘ˆÜ#$§7¡7×#3Ñ#3×#PÑ#PØ�M‰MœN¨6¯<©<Ó8Ñ8¼/ó$
ô  
Ðô ˜DŸI™IÓ&×>Ð*>Ð>ä�$œ×ÑØ�}‰}‹¤!§'¡'×";Ñ";Ñ;Ð;ð rŠ   c                  ó  • \ rS rSr% S\S'   \" S 5      SSS jj5       rSS jrSS jrSS jr	\
S S j5       rS!S	 jrS"S
 jrS#S jrS$S jrS%S jrS&S jrS'S jrS(S jrS)S jrS*S jrS'S jrS'S jrS+S jrS,S jrS-S jrS.S jrSrg)/ro  i  r€   rM  c                ó8   • U R                   R                  U5      $ rƒ   ©rM  ra  r`  s     rˆ   ra  ÚBaseView.get_free_symbol_uses  s   € à�y‰y×-Ñ-¨mÓ<Ð<rŠ   c                ó   • [        SU  35      e)Nzmake_reindexer NYI on r¼  rŸ  s    rˆ   Úmake_reindexerÚBaseView.make_reindexer  s   € Ü!Ð$:¸4¸&Ð"AÓBÐBrŠ   c                óp   ^^• U R                   R                  5       mU R                  5       mSUU4S jjnU$ )Nc                ó    >• T" T" U 5      5      $ rƒ   r™   ©rò   ÚinnerrÍ   s    €€rˆ   r_  Ú&BaseView.make_indexer.<locals>.indexer#  ó   ø€ Ù™ ›Ó&Ð&rŠ   )rò   r‹  r¶   r    )rM  r  r�  )rŒ  r_  r†  rÍ   s     @@rˆ   r  ÚBaseView.make_indexer  s4   ù€ Ø—	‘	×&Ñ&Ó(ˆØ×%Ñ%Ó'ˆ÷	'ð 	'ð ˆrŠ   c                óp   ^^• U R                   R                  5       mU R                  5       mSUU4S jjnU$ )Nc                ó    >• T" T" U 5      5      $ rƒ   r™   r…  s    €€rˆ   ra  Ú$BaseView.make_loader.<locals>.loader,  rˆ  rŠ   rÔ  )rM  r  r�  )rŒ  ra  r†  rÍ   s     @@rˆ   r  ÚBaseView.make_loader(  s4   ù€ Ø—	‘	×%Ñ%Ó'ˆØ×%Ñ%Ó'ˆ÷	'ð 	'ð ˆrŠ   c                ó6   • U R                   R                  5       $ rƒ   )rM  r  rŸ  s    rˆ   r  ÚBaseView.dtype1  s   € à�y‰y×"Ñ"Ó$Ð$rŠ   c                ó6   • U R                   R                  5       $ rƒ   ©rM  r  rŸ  s    rˆ   r  ÚBaseView.get_layout5  ó   € Ø�y‰y×#Ñ#Ó%Ð%rŠ   c                ó6   • U R                   R                  5       $ rƒ   ©rM  r  rŸ  s    rˆ   r  ÚBaseView.get_device8  r“  rŠ   c                ó   • g rƒ   r™   rŸ  s    rˆ   r¨  ÚBaseView.get_origin_node;  r®  rŠ   c                ó6   • U R                   R                  5       $ rƒ   ©rM  rs  rŸ  s    rˆ   rs  ÚBaseView.get_name>  ó   € Ø�y‰y×!Ñ!Ó#Ð#rŠ   c                ó"   • U R                  5       $ rƒ   r÷  rŸ  s    rˆ   r  ÚBaseView.get_pointwise_sizeA  ó   € Ø�}‰}‹ÐrŠ   c                ó8   • U R                   R                  U5      $ rƒ   ©rM  r3  r1  s     rˆ   r3  ÚBaseView.mark_reuseD  ó   € Ø�y‰y×#Ñ# EÓ*Ð*rŠ   c                ó6   • U R                   R                  5       $ rƒ   ©rM  r  rŸ  s    rˆ   r  ÚBaseView.has_exceeded_max_readsG  ó   € Ø�y‰y×/Ñ/Ó1Ð1rŠ   c                ó6   • U R                   R                  5       $ rƒ   ©rM  r  rŸ  s    rˆ   r  ÚBaseView.realizeJ  ó   € Ø�y‰y× Ñ Ó"Ð"rŠ   c                ó8   • U R                   R                  5         g rƒ   ©rM  r7  rŸ  s    rˆ   r7  ÚBaseView.realize_hintM  s   € Ø�	‰	×ÑÕ rŠ   c                ó6   • U R                   R                  5       $ rƒ   ©rM  r]  rŸ  s    rˆ   r]  ÚBaseView.get_storage_numelP  ó   € Ø�y‰y×*Ñ*Ó,Ð,rŠ   c                ó6   • U R                   R                  5       $ rƒ   ©rM  rj  rŸ  s    rˆ   rj  ÚBaseView.is_externS  ó   € Ø�y‰y×"Ñ"Ó$Ð$rŠ   c                ó¨   • [        U R                  [        5      (       d   [        U R                  5      5       eU R                  R	                  5       $ rƒ   )r„   rM  ro  r°   Úis_module_bufferrŸ  s    rˆ   r¸  ÚBaseView.is_module_bufferV  s9   € Ü˜$Ÿ)™)¤X×.Ñ.Ð?´°T·Y±Y³Ó?Ð.Ø�y‰y×)Ñ)Ó+Ð+rŠ   c                ó6   • U R                   R                  5       $ rƒ   ©rM  r   rŸ  s    rˆ   r   ÚBaseView.get_read_namesZ  ó   € Ø�y‰y×'Ñ'Ó)Ð)rŠ   c                óÔ   • [         R                  " [        SS5         [        U R	                  5       U R                  5       5      R                  sS S S 5        $ ! , (       d  f       g = fr  )r   rÂ   r  rL   r  r	  rV  rŸ  s    rˆ   rž  ÚBaseView.get_reads]  sD   € Ü�\Š\œ.Ð*:¸DÕAÜ&Ø× Ñ Ó"Ø—‘“ó÷ ‰e÷	 B×A×Aús   �2AÁ
A'c                óz   • U n[        U[        5      (       a#  UR                  n[        U[        5      (       a  M#  U$ rƒ   )r„   ro  rM  )rŒ  r‡   s     rˆ   rp  ÚBaseView.unwrap_viewd  s1   € ØˆÜ˜œH×%Ñ%Ø—‘ˆAô ˜œH×%Ó%àˆrŠ   c                ó¶   • U R                  5       n[        R                  " [        SU5      " U5      n[	        UU R                  5       UU R                  5       S9$ re  )r  r   rÂ   ri  rO  r  r	  rj  s      rˆ   rp  ÚBaseView.constant_to_devicej  sN   € à×!Ñ!Ó#ˆÜ—’œnÐ.?ÀÔHÈÓPˆÜØØ—.‘.Ó"ØØ—=‘=“?ñ	
ð 	
rŠ   r™   Nr   rC  ©r¶   ú*Callable[[Sequence[Expr]], Sequence[Expr]]r—  r•  r…  r‡  r‘  r�  r›  rŠ  rž  r‰  rŽ  r~  rª  r  r¨  rŸ  r¬  )r›   rœ   r�   rž   rŸ   rY   ra  r�  r  r  r´  r  r  r  r¨  rs  r  r3  r  r  r7  r]  rj  r¸  r   rž  rp  rp  r    r™   rŠ   rˆ   ro  ro    s’   ‡ à
ƒLá˜JÓ'õ=ó (ð=ôCôôð ó%ó ð%ô&ô&ôô$ôô+ô2ô#ô!ô-ô%ô,ô*ôô÷	
rŠ   ro  c                  ó`   • \ rS rSr% S\S'   \S
S j5       r\SS j5       rSS jr	  SS jr
Srg	)r§   iv  r‹  r  c                ó”  • [         R                  R                  nU Vs/ s H  n[        R                  " U5      PM     nnU R                  5       nS/[        U5      [        U5      -
  -  [        U5      -   n[        U5      [        U5      :X  d   e[        [        U5      5       H™  nX   S:X  a  XE   c   eXE   X'   M  XE   b0  [         R                  R                  R                  XE   5      (       a  MQ  X   nXE   nUc   eUc   eXg-
  nUR                  USS9S:X  a  M}   SU R                  5        SU SU 35       e   U$ s  snf )zReplace `-1` with correct sizesNr0  r   ©ÚfallbackzBroadcast failed in ExpandView(ú, z) on dimension )rn   r  r  rª   r#  r	  rÈ   r£   rÉ   Úis_size_one_or_falser–  )	r‡   Únew_sizer  rç   Úold_sizerË   Úv1Úv2Údiffs	            rˆ   Ú_normalize_sizeÚExpandView._normalize_sizez  s^  € ô —7‘7×#Ñ#ˆÙ-5Ó6ªX¨”E—L’L –O©XˆÐ6Ø—:‘:“<ˆØ�6œS ›]¬S°«]Ñ:Ñ;¼dÀ8»nÑLˆÜ�8‹}¤ H£Ó-Ð-Ð-Ü”s˜8“}Ö%ˆAØ‰{˜bÓ Ø‘{Ñ.Ð.Ð.Ø&™k�“Ø‘Ñ$¬¯©×(8Ñ(8×(MÑ(MØ‘÷)ñ )ñ ð ‘[�Ø‘[�Ø‘~Ð%�~Ø‘~Ð%�~Ø‘w�à×.Ñ.ØØ!"ð /ð ð õ	ðð 6°a·j±j³l°^À2ÀhÀZÈÐ_`Ð^aÐbóðñ) &ð8 ˆùòA 7s   Ÿ Ec                ó˜  • U R                  X5      n[        U5      (       Ga   [        U5      u  p4[        U5      [        UR                  5      -
  nUS:¼  d   e[
        R                  R                  /U-  n[        UR                  UR                  5       H^  u  pxUR                  [        R                  R                  R                  U5      (       d  UO[
        R                  R                  5        M`     [        UR                   UR"                  [%        U5      UUR&                  UR(                  5      n	[+        X9S9$ [-        XS9$ )Nr   rL  )rM  r  )rÑ  r
  rO  rÈ   r  rª   r  r  rÒ   r  rÅ  rn   r  r  rË  rP  r  r  r£   rQ  rR  rS  r§   )
r  r‡   rÌ  rV  rW  ÚskiprX  r  r  rY  s
             rˆ   r  ÚExpandView.create   s
  € à×&Ñ& qÓ3ˆä  ×#Ò#Ü"7¸Ó":ÑˆGÜ�x“=¤3 z§¡Ó#7Ñ7ˆDØ˜1“9Ð�9ÜŸ'™'Ÿ,™,˜¨$Ñ.ˆJÜ # J×$5Ñ$5°z·±Ö G‘�Ø×!Ñ!äŸ7™7×+Ñ+×@Ñ@À×FÑFñ äŸ™Ÿ™öñ !Hô %Ø×!Ñ!Ø× Ñ Ü�X“ØØ×!Ñ!Ø×$Ñ$óˆJô #¨ÑCÐCä˜qÑ0Ð0rŠ   c                ó   • U R                   $ rƒ   r  rŸ  s    rˆ   r	  ÚExpandView.get_size»  r  rŠ   c                ó¦   ^^• U R                  5       nU R                  R                  5       m[        U5      [        T5      -
  m    SUU4S jjnU$ )Nc                óÜ   >• [        U TS  5      n [        U 5      [        T5      :X  d   e[        [        T5      5       H*  nTU   S:X  d  M  [        R                  R
                  X'   M,     U $ r  )r£   rÈ   rÉ   rª   r  r  )rÊ   rË   ÚactualrÔ  s     €€rˆ   rÍ   Ú*ExpandView.make_reindexer.<locals>.reindexÅ  s_   ø€ ô ˜˜t˜u˜Ó&ˆEÜ�u“:¤ V£Ó,Ð,Ð,Üœ3˜v›;Ö'�Ø˜!‘9 •>ä$Ÿw™wŸ|™|�E“Hñ (ð ˆLrŠ   ©rÊ   r‹  r¶   r‹  )r	  rM  rÈ   )rŒ  ÚtargetrÍ   rÚ  rÔ  s      @@rˆ   r�  ÚExpandView.make_reindexer¾  sU   ù€ ð —‘“ˆØ—‘×#Ñ#Ó%ˆÜ�6‹{œS ›[Ñ(ˆð		Ø!ð		à÷		ð 		ð ˆrŠ   r™   N)r‡   r€   rÌ  rš  r¶   rš  )r‡   r€   rÌ  rš  r¶   ro  rŠ  rÄ  )r›   rœ   r�   rž   rŸ   r±  rÑ  rF  r  r	  r�  r    r™   rŠ   rˆ   r§   r§   v  sA   ‡ à
Óàó#ó ð#ðJ ó1ó ð1ô4ðà	3÷rŠ   r§   c                  ó`   • \ rS rSr% S\S'   \S
S j5       r\SS j5       rSS jr  SS jr	Sr
g	)ÚPermuteViewiÓ  r¨  Údimsc           
     óÒ  • U R                  U5      n[        U5      [        [        [        U5      5      5      :X  d   e[	        U5      (       aˆ  [        U5      u  p4[        UR                  UR                  U Vs/ s H  oTR                  U   PM     snU Vs/ s H  oTR                  U   PM     snUR                  UR                  5      n[        X6S9$ [        XS9$ s  snf s  snf )NrL  )rM  rá  )Ú_map_neg_dimsr:   rÉ   rÈ   r
  rO  rP  r  r  r  r  rQ  rR  rS  rà  )r  r‡   rá  rV  rW  rË   rY  s          rˆ   r  ÚPermuteView.create×  sÍ   € à× Ñ  Ó&ˆÜ˜$Ó¤:¬e´C¸³IÓ.>Ó#?Ó?Ð?Ð?ä  ×#Ñ#Ü"7¸Ó":ÑˆGÜ$Ø×!Ñ!Ø× Ñ Ù-1Ó2ªT¨—‘ Ô#©TÑ2Ù/3Ó4ªt¨!×"Ñ" 1Ô%©tÑ4Ø×!Ñ!Ø×$Ñ$óˆJô #¨ÑCÐCä Ñ-Ð-ùò 3ùÚ4s   Á:CÂC$c                óX   • U Vs/ s H  o"S:¼  a  UO[        U5      U-   PM     sn$ s  snf rý  r'  )r  rá  rB  s      rˆ   rã  ÚPermuteView._map_neg_dimsê  s+   € á@DÓEÂ¸˜a“x‘¤S¨£Y°¡_Ò4ÁÑEÐEùÒEs   …'c                ó  • [        U R                  U R                  5      5      [        [        [	        U R                  5      5      5      :X  d   eU R
                  R                  5       nU R                   Vs/ s H  o!U   PM	     sn$ s  snf rƒ   )r:   rã  rá  rÉ   rÈ   rM  r	  )rŒ  r  rË   s      rˆ   r	  ÚPermuteView.get_sizeî  sq   € Ü˜$×,Ñ,¨T¯Y©YÓ7Ó8¼JÜ”#�d—i‘i“.Ó!ó=
ó 
ð 	
ð 
ð �y‰y×!Ñ!Ó#ˆØ!%§¢Ó+¢˜A�Q”¡Ñ+Ð+ùÒ+s   Á8B	c                óZ  ^• [        U R                  5       VVs0 s H  u  pX!_M	     snnm[        [        U R                  5      5       Vs/ s H  nTU   PM
     snm[	        T5      [	        [        [        U R                  5      5      5      :X  d   e    SU4S jjnU$ s  snnf s  snf )Nc                ó8   >• T Vs/ s H  oU   PM	     sn$ s  snf rƒ   r™   )rÊ   rË   Úinvs     €rˆ   rÍ   Ú+PermuteView.make_reindexer.<locals>.reindexü  s   ø€ ñ '*Ó*¢c ˜!”H¡cÑ*Ð*ùÒ*s   †rÜ  )rñ   rá  rÉ   rÈ   r:   )rŒ  rË   r  rÍ   rë  s       @rˆ   r�  ÚPermuteView.make_reindexerõ  s—   ø€ ô !*¨$¯)©)Ô 4Ô5Ò 4™˜ˆqŠtÑ 4Ò5ˆÜ$¤S¨¯©£^Ô4Ó5Ò4˜!ˆs�1ŒvÑ4Ñ5ˆÜ˜#‹¤*¬U´3°t·y±y³>Ó-BÓ"CÓCÐCÐCð	+Ø!ð	+à÷	+ð
 ˆùó 6ùÚ5s   šB"ÁB(r™   N)r‡   r€   rá  r¢  r¶   ro  )rá  r¢  r¶   ú	list[int]rŠ  rÄ  )r›   rœ   r�   rž   rŸ   rF  r  rã  r	  r�  r    r™   rŠ   rˆ   rà  rà  Ó  sB   ‡ à
Óàó.ó ð.ð$ óFó ðFô,ðà	3÷rŠ   rà  c                  óV   • \ rS rSr\SS.SS jj5       r\    S	S j5       rS
S jrSr	g)ÚSqueezeViewi  N)rB  c          	     óˆ  • [        U5      (       Ga]  [        U5      u  p4/ n/ nUbF  [        U[        5      (       d   [	        U5      5       eSU::  a  U[        UR                  5      :  d   e[        [        UR                  UR                  5      5       H•  u  nu  p‰UcT  [        R                  R                  R                  U5      (       d$  UR                  U5        UR                  U	5        M]  M_  Xr:w  a$  UR                  U5        UR                  U	5        Mˆ  US:X  a  M�   S5       e   [        UR                   UR"                  UUUR$                  UR&                  5      n
[)        X:S9$ Uce  [*        R-                  UUR/                  5        Vs/ s H5  n[        R                  R                  R                  U5      (       a  M3  UPM7     sn5      $ UR/                  5       U   S:X  d   e[*        R-                  U[        UR/                  5       5       VVs/ s H  u  p{Xr:w  d  M  UPM     snn5      $ s  snf s  snnf )Nr   rA   zexpected squeezed size to be 1rL  )r
  rO  r„   r…   r°   rÈ   r  rñ   rÒ   r  rn   r  r  rË  rÅ  rP  r  r  rQ  rR  rS  r|  r  r	  )r  r‡   rB  rV  rW  rÌ  rX  rË   r  r  rY  rç   s               rˆ   r  ÚSqueezeView.create  sí  € ä  ×#Ò#Ü"7¸Ó":ÑˆGØˆHØˆJØ‰Ü! #¤s×+Ñ+Ð6¬T°#«YÓ6Ð+Ø˜C“x C¬#¨j¯o©oÓ*>Ó$>Ð>Ð>ä%.¬s°:·?±?ÀJ×DUÑDUÓ/VÖ%WÑ!�‘>�DØ‘;äŸ7™7×+Ñ+×@Ñ@À×FÑFØ Ÿ™¨Ô-Ø"×)Ñ)¨&Ö1ñ Gð “xØ Ÿ™¨Ô-Ø"×)Ñ)¨&Ö1à# q�yÐJÐ*JÓJ˜yñ &Xô %Ø×!Ñ!Ø× Ñ ØØØ×!Ñ!Ø×$Ñ$óˆJô #¨ÑCÐCà‰;Ü—;‘;Øð ŸZ™Zœ\óâ)˜ÜŸ7™7×+Ñ+×@Ñ@À×C÷ Ù)ñóð ð —:‘:“< Ñ$¨Ó)Ð)Ð)Ü—;‘;˜q´¸1¿:¹:»<Ô1HÔ"UÒ1H©¨ÈAÉH§1Ñ1HÒ"UÓVÐVùòùó #Vs   Æ2H9
Ç
H9
ÈH>È+H>c                óÌ   ^^• U  Vs/ s H  oS:w  d  M
  UPM     nn[        U 5       VVs/ s H  u  p1US:w  d  M  UPM     snnm[        U 5      mSUU4S jjnX$4$ s  snf s  snnf )NrA   c                óÐ   >• [        U 5      [        T5      :X  d   U  ST 35       e[        R                  R                  /T-  n[	        TU 5       H	  u  p#X1U'   M     [        U5      $ )NÚ )rÈ   rª   r  r  rÒ   r¤   )rÊ   rp  rò   rç   ÚlengthÚnot_ones       €€rˆ   rÍ   Ú%SqueezeView.squeezer.<locals>.reindex<  sb   ø€ Ü�u“:¤ W£Ó-ÐC°%°¸¸'¸Ð/CÓCÐ-Ü%*§W¡W§\¡\ N°VÑ$;ˆIÜ˜g uÖ-‘�Ø!"˜#“ñ .ä˜Ó#Ð#rŠ   )rÊ   r‹  r¶   ztuple[Expr, ...])rñ   rÈ   )r  rç   rÌ  rË   rÍ   rö  r÷  s        @@rˆ   ÚsqueezerÚSqueezeView.squeezer4  sc   ù€ ñ  $Ó.št˜!¨A¡v—A™tˆÐ.Ü!*¨4¤Ô;¢™˜°A¸±F—1¡Ò;ˆÜ�T“ˆ÷	$ð 	$ð Ð Ð ùò /ùÛ;s   ‡	A”AªA ºA c                ó   • [        S5      e)Nzuse SqueezeView.create())ÚAssertionError)rŒ  rM  s     rˆ   rÀ  ÚSqueezeView.__init__E  s   € ÜÐ7Ó8Ð8rŠ   r™   )r‡   r€   rB  r�  r¶   r€   )r  r‹  r¶   z>tuple[list[int], Callable[[Sequence[Expr]], tuple[Expr, ...]]])rM  r   r¶   r·   )
r›   rœ   r�   rž   rF  r  r±  rù  rÀ  r    r™   rŠ   rˆ   rð  rð    sC   † àØ7;ö +Wó ð+WðZ ð!Øð!à	Gó!ó ð!÷ 9rŠ   rð  c                  ó~   • \ rS rSr% S\S'   S\S'     SS jrSS jrSS jr\r\	        SS	 j5       r
SS
 jrSrg)ÚGenericViewiI  r‹  r  rÅ  rÍ   c                ó   • U R                   $ rƒ   )rÍ   rŸ  s    rˆ   r�  ÚGenericView.make_reindexerN  s   € ð �|‰|ÐrŠ   c                ó  • [        [        U R                  5      5       Vs/ s H  n[        [        R
                  U5      PM     nn[        U R                  U5      5      nSSR                  [        [        U5      5       SU 3$ s  snf )Nzlambda rÊ  r  )rÉ   rÈ   r  rh   r@   rG  r£   rÍ   rÏ  rÍ  rÃ   )rŒ  r  Ú	index_oldÚ	index_news       rˆ   Úreindex_strÚGenericView.reindex_strS  sv   € äCHÌÈTÏYÉYËÔCXó
ÚCX¸aÔ*¬4¯:©:°qÖ9ÑCXð 	ð 
ô ˜Ÿ™ iÓ0Ó1ˆ	Ø˜Ÿ™¤3¤s¨IÓ#6Ó7Ð8¸¸9¸+ÐFÐFùò	
s   ¡$Bc                óz   • U R                  U R                  SU R                   3SU R                  5        3/5      $ )Núsize=zreindex=)rÓ  rM  r  r  rŸ  s    rˆ   r   ÚGenericView.__str__Z  s=   € Ø�‰Ø�Y‰Y˜% §	¡	˜{Ð+¨x¸×8HÑ8HÓ8JÐ7KÐ-LÐMó
ð 	
rŠ   c                ó$   • U " U[        U5      US9$ )N©rM  r  rÍ   )r£   )r  r‡   rÌ  rÍ   s       rˆ   r  ÚGenericView.createa  s   € ñ ˜¤ X£¸Ñ@Ð@rŠ   c                ó   • U R                   $ rƒ   r  rŸ  s    rˆ   r	  ÚGenericView.get_sizej  r  rŠ   r™   NrÄ  r›  )r‡   r€   rÌ  r‹  rÍ   rÅ  r¶   ro  rŠ  )r›   rœ   r�   rž   rŸ   r�  r  r   rE  rF  r  r	  r    r™   rŠ   rˆ   rÿ  rÿ  I  sp   ‡ à
ÓØ7Ó7ðà	3ôô
Gô
ð
 €HàðAàðAð !ðAð <ð	Að
 
óAó ðA÷rŠ   rÿ  c                  óº   • \ rS rSrSr\S
S j5       r\\SS j5       5       r	\      SS j5       r
\ S       SS jj5       r\ S       SS jj5       rS	rg)r|  in  zŽ
This class handles tensor reshaping by computing appropriate index transformations
to map the new shape back to the original storage layout.
c                ó  • [         R                  " U 5      n [         R                  " U5      n[        R                  R                  R
                  R                  nU" [         R                  " U S5      5      (       a  X-   n U $ rý  )rª   r#  rn   r  r  rí   Úevaluate_exprÚLt)rò   r  r  s      rˆ   Úhandle_negative_indexÚView.handle_negative_indexu  s[   € ä�lŠl˜3ÓˆÜ�|Š|˜DÓ!ˆÜŸ™×(Ñ(×2Ñ2×@Ñ@ˆÙœŸš # qÓ)×*Ñ*Ø‘*ˆCØˆ
rŠ   c                óð  ^ ^^^^• [        T[        5      (       d   [        T5      5       eT R                  UR	                  5       T5      u  mm[
        R                  R                  R                  TT5      (       a  U$ [        [        T5      5      S:„  =(       d    [        [        T5      5      S:„  m[        U5      n        SS jm    SU UUUU4S jjnST;   a  SU4S jjnT " U[        T5      US9$ U(       a  T" UT[        R                  T5      5      $ [        U5      (       d  U" U5      $ [!        USS9u  pgUR"                  n[
        R                  R                  R%                  T5      n	[
        R                  R                  R%                  U5      n
[
        R                  R                  R%                  T5      nSSKJn  U" U	U
UTS	9nUb�  U Vs/ s H@  n[+        US
5      (       a  UR,                  R.                  O[0        R2                  " U5      PMB     nn[5        UR6                  UR8                  TUUR:                  UR<                  5      n[?        UUS9$ U" U5      $ s  snf )Nr   c                óœ   • [        U SS9u  p4[        UR                  UR                  UUUR                  UR
                  5      n[        X5S9$ )NT)rp  rL  )rO  rP  r  r  rQ  rR  rS  )rl  rÌ  rX  rV  rW  rY  s         rˆ   Úcreate_reinterpret_viewÚ,View.create.<locals>.create_reinterpret_viewŽ  sT   € ô #8¸ÈTÑ"RÑˆGÜ$Ø×!Ñ!Ø× Ñ ØØØ×!Ñ!Ø×$Ñ$óˆJô #¨ÑCÐCrŠ   c                ó¼   >• T(       a2  [         R                  U 5      n T" U T[        R                  T5      5      $ TR	                  TT5      nT" U [        T5      US9$ )z�
Handle the case where view is not possible with current strides.
For unbacked symbols, make contiguous; otherwise use dynamic_reshape_indexer.
r  )r²  Úrequire_contiguousr  r  r}  r£   )r‡   rÍ   r  r  rÌ  rÍ  Úunbacked_symbols_in_sizess     €€€€€rˆ   Ú"handle_unbacked_or_dynamic_reshapeÚ7View.create.<locals>.handle_unbacked_or_dynamic_reshapeœ  s`   ø€ ö )ô !×3Ñ3°AÓ6�Ù.Ø�x¤×!BÑ!BÀ8Ó!Lóð ð ×1Ñ1°(¸HÓEˆGÙ˜A¤D¨£N¸GÑDÐDrŠ   c                ó4   >• [        S/[        T5      -  5      $ rý  )r¤   rÈ   )rÊ   rÍ  s    €rˆ   Úfake_reindexÚ!View.create.<locals>.fake_reindex²  s   ø€ Ü˜a˜S¤3 x£=Ñ0Ó1Ð1rŠ   r  Fre  )Ú_compute_stride©Úsize_obliviousr²   rL  )rl  r€   rÌ  r‹  rX  r‹  r¶   rS  ©r‡   r€   r¶   r€   )rÊ   r   r¶   ztuple[int, ...]) r„   r   r°   Úresolve_negative_sizer	  rn   r  r  Ústatically_known_list_equalsrÈ   r2   rm  r£   r  r  r
  rO  r  Úto_symints_or_intsÚtorch._subclasses.fake_implsr!  r³  r²   Úexprrª   r!   rP  r  r  rQ  rR  rS  )r  r‡   rÌ  rk  r  r  rV  rW  Ú
old_strideÚold_size_symintÚold_stride_symintÚnew_size_symintr!  Únew_stride_symintrç   rX  rY  r  rÍ  r  s   ` `              @@@rˆ   r  ÚView.create~  ss  ü€ ô ˜(¤H×-Ñ-Ð=¬t°H«~Ó=Ð-Ø ×6Ñ6°q·z±z³|ÀXÓNÑˆ�(ô �7‰7×Ñ×8Ñ8¸À8×LÑLØˆHô Ô% hÓ/Ó0°1Ñ4÷ 8ÜÔ(¨Ó2Ó3°aÑ7ð 	"ô 9¸Ó;ˆð	DØð	DØ#1ð	DØ?Mð	Dàô	Dð	EØð	Eà÷	Eó 	Eð( �‹=÷2ñ ˜A¤D¨£N¸LÑIÐIö á*Ø�8œ^×>Ñ>¸xÓHóð ô
 % Q×'Ñ'á5°aÓ8Ð8ô 4°A¸eÑDÑˆà×&Ñ&ˆ
ô Ÿ'™'×*Ñ*×=Ñ=¸hÓGˆÜŸG™G×,Ñ,×?Ñ?À
ÓKÐÜŸ'™'×*Ñ*×=Ñ=¸hÓGˆå@ñ ,ØØØØ4ñ	
Ðð Ñ(ñ +óâ*�Aô  ' q¨&×1Ñ1�—‘—’´u·}²}ÀQÓ7GÒGÙ*ð ð ô
 %Ø×!Ñ!Ø× Ñ ØØØ×!Ñ!Ø×$Ñ$óˆJô #¨¸
ÑCÐCñ 2°!Ó4Ð4ùò!s   Ç AI3c                óP  • U Vs/ s H,  n[         R                  R                  R                  U5      PM.     nnU  Vs/ s H,  n[         R                  R                  R                  U5      PM.     n n[	        U5      n[        [        U5      5       HI  nX   S:X  d  M  [        R                  R                  X'   [        [        U 5      [        U5      5      X'     O   [         R                  R                  R                  [        U 5      [        U5      5        X4$ s  snf s  snf )Nr0  )rn   r  r  rJ  r£   rÉ   rÈ   rª   r  ÚOner<   ri   Úcheck_equals)rÍ  rÌ  r‡   rË   s       rˆ   r%  ÚView.resolve_negative_sizeë  sß   € ñ ;CÓCº(°Q”A—G‘G×$Ñ$×-Ñ-¨aÖ0¹(ˆÐCÙ:BÓCº(°Q”A—G‘G×$Ñ$×-Ñ-¨aÖ0¹(ˆÐCä˜“>ˆÜ”s˜8“}Ö%ˆAØ‰{˜bÕ Ü#Ÿg™gŸk™k�‘Ü&¤}°XÓ'>ÄÈhÓ@WÓX�‘Ùñ	 &ô 	
�‰×Ñ×%Ñ%¤m°HÓ&=¼}ÈXÓ?VÔWØÐ!Ð!ùò DùÚCs
   …3D¾3D#Nc                óÌ   •  U R                  XU5      nU$ ! [        [        4 a=    [        U5      /nU R                  X5      nU R                  XR5      n[	        Xg5      n U$ f = frƒ   )Ú_dynamic_reshape_indexerrü  Ú
IndexErrorri   rÞ   )r  rÍ  rÌ  Ú	dense_dimrÍ   ÚflatrÛ   rÜ   s           rˆ   r}  ÚView.dynamic_reshape_indexerü  sr   € ð	:Ø×2Ñ2°8ÀyÓQˆGð ˆøô ¤
Ð+ó 	:ä! (Ó+Ð,ˆDØ×3Ñ3°HÓCˆHØ×3Ñ3°DÓCˆHÜ% hÓ9‰GØˆð	:ús   ‚ –A	A#Á"A#c                óô  ^^• [         R                  R                  R                  n[	        [        U5      5       Vs/ s H  n[        [        R                  U5      PM     snm[        [        TU5      5      n[        U 5      nUSL=(       a&    U[        U5      S-
  :g  =(       a    [        U5      S:H  nU(       a'  Uc   eUR                  U5      nUR                  U5        / mU(       GaK  U(       GaC  UR                  5       n	UR                  5       u  p«U	S:X  a=  TR                  [        R                  R                  5        UR                  X«45        GOÍUS:X  a  UR                  U	5        GO´U" U5      U" U	5      :X  a<  TR                  U
5        [         R                  R                  R!                  X¹5        GOfU" U5      U" U	5      :  a~  U" U5      U" U	5      :  a1  UR                  5       u  pÍXË-  U
-   n
X½-  nU" U5      U" U	5      :  a  M1  TR                  U
5        [         R                  R                  R!                  X¹5        OÖU" U5      U" U	5      :”  a¾  [        R                  R"                  nU	nTR                  [%        X®U5      5        Xï-  nU" U5      U" U	5      :”  aG  UR                  5       nTR                  [%        X®U5      5        Xï-  nXŸ-  n	U" U5      U" U	5      :”  a  MG  [         R                  R                  R!                  X¹5        O[&        eU(       a
  U(       a  GMC  U(       al  UR                  5       n	[         R                  R                  R!                  U	S5        TR                  [        R                  R                  5        U(       a  Ml  U(       aE  UR                  5       u  p«[         R                  R                  R!                  US5        U(       a  ME  UbB  [        U5      S:X  a3  TR)                  5         TR                  5       nTR+                  UU5        OTR)                  5         [        T5      [        U 5      :X  d   e    SUU4S jjnU$ s  snf )z7
Perform a reshape entirely by modifying indexing math
NrA   c                óÀ   >^• [        U 5      [        T5      :X  d   [        U 5      [        T5      45       e[        [        TU 5      5      m[        U4S jT 5       5      $ )Nc              3  ó<   >#   • U  H  n[        UT5      v •  M     g 7frƒ   )rj   )ræ   r‡   Úreplacementss     €rˆ   rè   ÚAView._dynamic_reshape_indexer.<locals>.reindex.<locals>.<genexpr>d  s   øé € ÐHºi¸œ A |×4Ð4ºiùrð  )rÈ   r¥   rÒ   r¤   )rÊ   r=  r`  Ú	view_exprs    @€€rˆ   rÍ   Ú.View._dynamic_reshape_indexer.<locals>.reindex_  sO   ù€ ô �u“:¤ T£Ó*ÐC¬S°«Z¼¸T»Ð,CÓCÐ*Ü¤ D¨%Ó 0Ó1ˆLÜÔH¹iÓHÓHÐHrŠ   rÜ  )rn   r  r  r  rÉ   rÈ   rh   r@   ÚVIEWr£   rÒ   r  rÅ  rª   r  r  r2  r1  r?   rü  ÚreverseÚinsert)rÍ  rÌ  r7  r  rË   Ú	stack_newÚ	stack_oldÚreordering_dense_dimÚold_dimÚsize_oldÚvarÚsize_newÚvar2Ú	size_new2ÚdivisorÚmodulusÚ
dense_exprrÍ   r`  r?  s                     @@rˆ   r5  ÚView._dynamic_reshape_indexer  s«  ù€ ô —G‘G×$Ñ$×.Ñ.ˆ	ô CHÌÈHËÔBVó
ÚBV¸QÔ*¬4¯9©9°aÖ8ÑBVñ
ˆô œ˜T 8Ó,Ó-ˆ	Ü˜“Nˆ	ð ˜TÐ!÷ #ØœS ›^¨aÑ/Ñ/÷#ä�H“ Ñ"ð 	ö
  ØÑ(Ð(Ð(Ø—m‘m IÓ.ˆGØ×Ñ˜WÔ%àˆ	ßŸIØ —}‘}“ˆHØ%ŸM™M›O‰MˆCØ˜1‹}Ø× Ñ ¤§¡§¡Ô.Ø× Ñ  # Ö1Ø˜Q“Ø× Ñ  Ö*Ù˜8Ó$©	°(Ó(;Ó;Ø× Ñ  Ô%Ü—‘× Ñ ×-Ñ-¨hÖAÙ˜8Ó$¡y°Ó':Ó:Ù Ó)©I°hÓ,?Ó?Ø&/§m¡m£o‘O�DØ™/¨CÑ/�CØ'Ñ3�Hñ   Ó)©I°hÓ,?Õ?ð × Ñ  Ô%Ü—‘× Ñ ×-Ñ-¨hÕAÙ˜8Ó$¡y°Ó':Ó:ÜŸ'™'Ÿ+™+�Ø"�Ø× Ñ ¤°¸wÓ!GÔHØ!Ñ+�Ù Ó)©I°hÓ,?Ó?Ø'Ÿm™m›o�GØ×$Ñ$¤_°SÀ7Ó%KÔLØ%Ñ/�GØ'Ñ1�Hñ	   Ó)©I°hÓ,?Õ?ô
 —‘× Ñ ×-Ñ-¨hÕAä$Ð$ö= ŸI™Iö@ Ø —}‘}“ˆHÜ�G‰G×Ñ×)Ñ)¨(°AÔ6Ø×ÑœUŸW™WŸ\™\Ô*÷ ˆiö
 Ø%ŸM™M›O‰MˆCÜ�G‰G×Ñ×)Ñ)¨(°AÔ6÷ ˆið Ñ ¤S¨£]°aÓ%7Ø×ÑÔà"Ÿ™›ˆJØ×Ñ˜Y¨
Õ3à×ÑÔä�9‹~¤ X£Ó.Ð.Ð.ð	IØ!ð	Ià÷	Ið 	Ið ˆùò[
s   ½$Q5r™   )rò   r    r  r    r¶   r    )r‡   r€   rÌ  r‹  r¶   r€   )rÍ  r‹  rÌ  r‹  r¶   ztuple[list[Expr], list[Expr]]rƒ   )rÍ  rš  rÌ  rš  r7  r�  r¶   ú&Callable[[Sequence[_T]], Sequence[_V]])rÍ  r‹  rÌ  r‹  r7  r�  r¶   rÅ  )r›   rœ   r�   rž   r®  r±  r  rF  r   r  r%  r}  r5  r    r™   rŠ   rˆ   r|  r|  n  sè   † ñð
 óó ðð Øói5ó ó ði5ðV ð"Ø ð"Ø,:ð"à	&ó"ó ð"ð  ð
 $(ð	à$ðð %ðð !ð	ð
 
0ôó ðð  ð $(ðXØ ðXà ðXð !ðXð 
4ô	Xó óXrŠ   r|  c                  óü   ^ • \ rS rSr% SrS\S'   SU 4S jjrSS jr\rSS jr	SS jr
SS	 jr\SS
 j5       rSS jrSS jrSS jrSS jrSS jrSS jr\" S 5       S   SS jj5       rS S!S jjrS"S jrSrU =r$ )#rS  ii  z*Pretend our storage has a different layoutrí  rN  c                óÀ   >• [         TU ]  5         [        U R                  [        5      (       a0  [
        R                  U SU R                  R                  5       5        g g )NrM  )r·  r“  r„   rM  ro  rÂ   r‹  rp  r   s    €rˆ   r“  ÚReinterpretView.__post_init__o  sC   ø€ Ü‰ÑÔÜ�d—i‘i¤×*Ñ*Ü×Ñ˜t V¨T¯Y©Y×-BÑ-BÓ-DÕEð +rŠ   c                óP   • U R                  U R                  U R                  /5      $ rƒ   )rÓ  rM  rN  rŸ  s    rˆ   r   ÚReinterpretView.__str__t  s&   € Ø�‰à—	‘	Ø—‘ðó
ð 	
rŠ   c                ó6   • U R                   R                  5       $ rƒ   rš  rŸ  s    rˆ   rs  ÚReinterpretView.get_name~  rœ  rŠ   c                ó.   • U R                   R                  $ rƒ   )rN  r  rŸ  s    rˆ   r  ÚReinterpretView.get_device�  s   € Ø�{‰{×!Ñ!Ð!rŠ   c                ó   • g rƒ   r™   rŸ  s    rˆ   r¨  ÚReinterpretView.get_origin_node„  r®  rŠ   c                ó.   • U R                   R                  $ rƒ   )rN  r  rŸ  s    rˆ   r  ÚReinterpretView.dtype‡  s   € à�{‰{× Ñ Ð rŠ   c                ó@   • [        U R                  R                  5      $ rƒ   )r£   rN  r  rŸ  s    rˆ   r	  ÚReinterpretView.get_size‹  s   € Ü�D—K‘K×$Ñ$Ó%Ð%rŠ   c                ó@   • [        U R                  R                  5      $ rƒ   )r£   rN  r  rŸ  s    rˆ   r2  ÚReinterpretView.get_strideŽ  s   € Ü�D—K‘K×&Ñ&Ó'Ð'rŠ   c                ó   ^ • SU 4S jjnU$ )Nc                óZ  >• TR                   R                  5       n[        R                  " TR	                  5       U" U 5      5      nTR                   R
                  TR                  R
                  :w  a6  [        R                  " UTR
                  TR                  R
                  5      $ U$ rƒ   )rN  r  rl   Úloadrs  r  rM  Úto_dtype_bitcast)rÊ   r_  Ú
tmp_loaderrŒ  s      €rˆ   ra  Ú+ReinterpretView.make_loader.<locals>.loader’  sp   ø€ Ø—k‘k×.Ñ.Ó0ˆGÜŸš $§-¡-£/±7¸5³>ÓBˆJØ�{‰{× Ñ  D§I¡I§O¡OÓ3Ü×+Ò+¨J¸¿
¹
ÀDÇIÁIÇOÁOÓTÐTà!Ð!rŠ   ©rÊ   r‹  r¶   rm   r™   ©rŒ  ra  s   ` rˆ   r  ÚReinterpretView.make_loader‘  s   ø€ ÷	"ð ˆrŠ   c                ó6   • U R                   R                  5       $ rƒ   )rN  r  rŸ  s    rˆ   r  ÚReinterpretView.make_indexerœ  ó   € Ø�{‰{×'Ñ'Ó)Ð)rŠ   c                ó   • U R                   $ rƒ   ©rN  rŸ  s    rˆ   r  ÚReinterpretView.get_layoutŸ  r  rŠ   c                ó   • g rƒ   r™   rŸ  s    rˆ   r<  ÚReinterpretView.freeze_layout¢  r5  rŠ   c                óÆ   • [        U R                  R                  U5      [        U R                  R                  U5      -  [        U R                  R                  U5      -  $ rƒ   )r(   rN  r  r  rQ  r`  s     rˆ   ra  Ú$ReinterpretView.get_free_symbol_uses¥  sQ   € ô
 ˜TŸ[™[×-Ñ-¨}Ó=Ü˜tŸ{™{×1Ñ1°=ÓAñBä˜tŸ{™{×1Ñ1°=ÓAñBð	
rŠ   c           	     óp  • [         R                  R                  R                  U R                  U R
                  R                  U R
                  R                  U R
                  R                  Ub  UR                  O#[         R                  R                  R                  U R
                  R                  S9$ rQ  )rn   r  Úwrapper_codeÚcodegen_reinterpret_viewrM  rN  r  r  rQ  Ú	writeliner  r  s     rˆ   r	  Ú!ReinterpretView.codegen_reference¯  s�   € ô �w‰w×#Ñ#×<Ñ<Ø�I‰IØ�K‰K×ÑØ�K‰K×ÑØ�K‰K×ÑØ &Ñ 2ˆF×Ò¼¿¹×8LÑ8L×8VÑ8VØ—+‘+×#Ñ#ð =ð 
ð 	
rŠ   c                ó   • gr  r™   rŸ  s    rˆ   rZ  ÚReinterpretView.num_reads¼  ó   € ØrŠ   r™   r~  r›  r‘  r�  r…  rŠ  r•  r—  r‡  r   r«  rƒ   r�  r©  )r›   rœ   r�   rž   r®  rŸ   r“  r   rE  rs  r  r¨  r´  r  r	  r2  r  r  r  r<  rY   ra  r	  rZ  r    rª  r«  s   @rˆ   rS  rS  i  sš   ø‡ á4àƒN÷Fô

ð €Hô$ô"ôð ó!ó ð!ô&ô(ô	ô*ôôñ Ð-Ó.à$)ð
Ø!ð
à	!ô
ó /ð
ö
÷ò rŠ   rS  c                  ón   • \ rS rSr% SrS\S'   \SS j5       rSS jr\r	\
SS j5       rSS jrSS	 jrS
rg)Ú	DtypeViewiÀ  z(Pretend our storage has a different typer†  Útarget_dtypec                óä   • [        U5      (       aX  [        U5      u  p4[        UR                  UUR                  UR
                  UR                  UR                  5      n[        X5S9$ [        XS9$ )NrL  )rM  r€  )
r
  rO  rP  r  r  r  rQ  rR  rS  r  )r  r‡   Ú	new_dtyperV  rW  rY  s         rˆ   r  ÚDtypeView.createÆ  sj   € ä  ×#Ñ#Ü"7¸Ó":ÑˆGÜ$Ø×!Ñ!ØØ—‘Ø×!Ñ!Ø×!Ñ!Ø×$Ñ$óˆJô #¨ÑCÐCÜ˜aÑ8Ð8rŠ   c                óP   • U R                  U R                  U R                  /5      $ rƒ   )rÓ  rM  r€  rŸ  s    rˆ   r   ÚDtypeView.__str__Õ  s    € Ø�‰ §	¡	¨4×+<Ñ+<Ð=Ó>Ð>rŠ   c                ó   • U R                   $ rƒ   )r€  rŸ  s    rˆ   r  ÚDtypeView.dtypeÚ  s   € à× Ñ Ð rŠ   c                ó6   • U R                   R                  5       $ rƒ   ©rM  r	  rŸ  s    rˆ   r	  ÚDtypeView.get_sizeÞ  rœ  rŠ   c                óP   ^ ^• T R                   R                  5       mSUU 4S jjnU$ )Nc                ó|   >• [         R                  " T" U 5      TR                  TR                  R                  5      $ rƒ   )rl   rf  r€  rM  r  )rò   r†  rŒ  s    €€rˆ   ra  Ú%DtypeView.make_loader.<locals>.loaderä  s*   ø€ Ü×'Ò'©¨c«
°D×4EÑ4EÀtÇyÁyÇÁÓWÐWrŠ   rÔ  ©rM  r  )rŒ  ra  r†  s   ` @rˆ   r  ÚDtypeView.make_loaderá  s(   ù€ Ø—	‘	×%Ñ%Ó'ˆ÷	Xð 	Xð ˆrŠ   r™   N)r‡   r€   r‚  r†  r¶   ro  r›  r…  rŠ  r•  )r›   rœ   r�   rž   r®  rŸ   rF  r  r   rE  r´  r  r	  r  r    r™   rŠ   rˆ   r  r  À  sE   ‡ á2àÓàó9ó ð9ô?ð €Hàó!ó ð!ô$÷rŠ   r  c                  ór   • \ rS rSr\          SS j5       r\  S             SS jj5       rSrg)	Ú	SliceViewiê  c                óx  ^ ^^^^	^
• [         R                  R                  m
UR                  5       U   m[	        S X4T4 5       5      (       a!  [
        R                  m	[
        R                  mOT
R                  m	T
R                  mSUU	U
4S jjm          SUU U4S jjnU" USTS5      nU" XCTT5      nX44$ )zb
Normalize start and end such that both are in the range
[0, x.get_size()[dim]] and start <= end.
c              3  ó8   #   • U  H  n[        U5      v •  M     g 7frƒ   )r2   ©ræ   r‡   s     rˆ   rè   Ú0SliceView.normalize_start_end.<locals>.<genexpr>ö  s   é € ÐHÒ1G¨AÔ$ Q×'Ð'Ò1Gùrœ  c                óŒ   >• TR                  X5      (       a  U OT" X5      nTR                  X25      (       a  UnU$ T" X25      nU$ rƒ   )Ústatically_known_geqr<  )r‡   ÚlowerÚupperÚclamped_lowerÚclamped_fullÚmax_funcÚmin_funcr  s        €€€rˆ   ÚclampÚ,SliceView.normalize_start_end.<locals>.clampý  s^   ø€ à×2Ñ2°1×<Ñ<‘Á(È1ÓBTð ð
 ×0Ñ0°×FÑFð ð ð
  Ðñ ˜mÓ3ð ð
  ÐrŠ   c                óD   >• U c  U$ TR                  U T5      n T" XU5      $ rƒ   )r  )r0  r˜  r™  rw  rž  r  Údim_sizes       €€€rˆ   Ú
clamp_wrapÚ1SliceView.normalize_start_end.<locals>.clamp_wrap  s.   ø€ ð ‰{à�Ø×+Ñ+¨C°Ó:ˆCÙ˜ UÓ+Ð+rŠ   r   )r‡   r    r˜  r…   r™  r…   r¶   r    )
r0  zUnion[int, None]r˜  r…   r™  r…   rw  úUnion[Expr, int]r¶   r¤  )
rn   r  r  r	  r{  rª   ÚMinÚMaxÚevaluate_minÚevaluate_max)r  r‡   rB  ÚstartÚendr¢  rž  r¡  rœ  r�  r  s   `     @@@@@rˆ   Únormalize_start_endÚSliceView.normalize_start_endë  sÆ   ý€ ô —7‘7×#Ñ#ˆØ—:‘:“< Ñ$ˆäÑH°%¸hÑ1GÓH×HÑHÜ—y‘yˆHÜ—y‘y‰Hà×,Ñ,ˆHØ×,Ñ,ˆH÷		 ñ 		 ð	,Ø!ð	,Ø*-ð	,Ø69ð	,ØDTð	,à÷	,ñ 	,ñ ˜5 ! X¨qÓ1ˆÙ˜ X¨xÓ8ˆØˆzÐrŠ   c           	     óº  ^^^^• [         R                  " T5      m[        T[        5      (       d  TS:”  d   T5       e TS:X  a  US:¼  a  TS:X  a  U$ [        UR                  5       5      mU(       a  U R                  UTTU5      u  mn[        UT-
  TS-
  -   T5      TT'   [        U5      (       a�  [        U5      u  px[        UR                  5      n	U	T   T-  U	T'   [        UR                  UR                  TU	UR                  UR                  T   T-  -   UR                   5      n
[#        XzS9$     SUUUU4S jjn[%        UTUS9$ ! [         a     GNf = f)Nr   l   ÿÿÿÿ rA   rL  c                ó„   >• [        U 5      [        T5      :X  d   SU  ST 35       e[        U 5      n U T   T-  T-   U T'   U $ )Nzwrong ndim rõ  )rÈ   r£   )rÊ   rB  rÌ  r©  Ústeps    €€€€rˆ   rÍ   Ú!SliceView.create.<locals>.reindex@  sR   ø€ ô �u“:¤ X£Ó.ÐP°+¸e¸WÀAÀhÀZÐ0PÓPÐ.Ü˜“KˆEØ˜s™ dÑ*¨UÑ2ˆE�#‰JØˆLrŠ   r  rÜ  )rª   r#  r„   r    Ú	TypeErrorr£   r	  r«  r=   r
  rO  r  rP  r  r  rQ  rR  rS  r‘  )r  r‡   rB  r©  rª  r¯  rž  rV  rW  rX  rY  rÍ   rÌ  s     `` `      @rˆ   r  ÚSliceView.create  sm  û€ ô �|Š|˜DÓ!ˆÜ˜$¤×%Ñ%¨°«Ð7°4Ó7Ð1ð	Ø˜‹z˜c YÓ.°4¸1³9Ø�ô ˜Ÿ
™
›Ó%ˆö
 Ø×0Ñ0°°C¸ÀÓD‰JˆE�3ä   u¡°°q±Ñ!9¸4Ó@ˆ�‰ä  ×#Ñ#ä"7¸Ó":ÑˆGÜ˜j×/Ñ/Ó0ˆJØ(¨™o°Ñ4ˆJ�s‰OÜ$Ø×!Ñ!Ø× Ñ ØØØ×!Ñ! J×$5Ñ$5°cÑ$:¸UÑ$BÑBØ×$Ñ$óˆJô #¨ÑCÐCð	Ø!ð	à÷	ò 	ô ˜a h¸Ñ@Ð@øôK ó 	Úð	ús   ¾E Å
EÅEr™   N)
r‡   r€   rB  r…   r©  r…   rª  r…   r¶   ztuple[int, int])rA   T)r‡   r€   rB  r…   r©  r…   rª  r…   r¯  r…   rž  r•   r¶   r€   )r›   rœ   r�   rž   rF  r«  r  r    r™   rŠ   rˆ   r‘  r‘  ê  s¦   † Øð'Øð'Ø ð'Ø),ð'Ø36ð'à	ó'ó ð'ðR ð Øð3Aàð3Að ð3Að ð	3Að
 ð3Að ð3Að ð3Að 
ô3Aó ó3ArŠ   r‘  c                  óR   • \ rS rSr% S\S'   S\S'   SS jrSS jrSS jrSS	 jrS
r	g)ÚBaseConstantiL  r†  r  r”  r  c                ó   • g©Nr™   r™   rŸ  s    rˆ   r	  ÚBaseConstant.get_sizeQ  s   € ØrŠ   c                ó   • U R                   $ rƒ   r  rŸ  s    rˆ   r  ÚBaseConstant.get_deviceT  r  rŠ   c                ó   • g rƒ   r™   rŸ  s    rˆ   r¨  ÚBaseConstant.get_origin_nodeW  r®  rŠ   c                ó   • [        5       $ rƒ   r9   rŸ  s    rˆ   rž  ÚBaseConstant.get_readsZ  rÝ  rŠ   r™   NrŠ  r‘  r�  r¨  )
r›   rœ   r�   rž   rŸ   r	  r  r¨  rž  r    r™   rŠ   rˆ   r´  r´  L  s"   ‡ àÓØÓôôô÷rŠ   r´  c                  óR   • \ rS rSr% S\S'   S\S'   S\S'   SS jrSS	 jrSS
 jrSrg)ÚConstanti^  r   r  r†  r  r”  r  c                ó   ^ • SU 4S jjnU$ )Nc                óZ   >• [         R                  " TR                  TR                  5      $ rƒ   )rl   rK  r  r  ©rÊ   rŒ  s    €rˆ   ra  Ú$Constant.make_loader.<locals>.loadere  s   ø€ Ü—<’< §
¡
¨D¯J©JÓ7Ð7rŠ   ri  r™   rj  s   ` rˆ   r  ÚConstant.make_loaderd  s   ø€ ÷	8ð ˆrŠ   c                ó   • g rƒ   r™   rŸ  s    rˆ   r  ÚConstant.realizej  r5  rŠ   c                ó@   • [        U R                  U R                  US9$ )N)r  r  r  )r¿  r  r  r  s     rˆ   rp  ÚConstant.constant_to_devicem  s   € Ü˜dŸj™j°·
±
À6ÑJÐJrŠ   r™   Nr•  rŽ  r¬  )	r›   rœ   r�   rž   rŸ   r  r  rp  r    r™   rŠ   rˆ   r¿  r¿  ^  s#   ‡ àƒJØÓØÓôô÷KrŠ   r¿  c                  óH   • \ rS rSr% S\S'   S\S'   S\S'   SS jrSS	 jrS
rg)ÚIndexingConstantiq  r   rÊ   r†  r  r”  r  c                ó   ^ • SU 4S jjnU$ )Nc                óZ   >• [         R                  " TR                  TR                  5      $ rƒ   )rl   r$  rÊ   r  rÂ  s    €rˆ   ra  Ú,IndexingConstant.make_loader.<locals>.loaderx  s   ø€ Ü—>’> $§*¡*¨d¯j©jÓ9Ð9rŠ   ri  r™   rj  s   ` rˆ   r  ÚIndexingConstant.make_loaderw  s   ø€ ÷	:ð ˆrŠ   c                ó@   • [        U R                  U R                  US9$ )N)rÊ   r  r  )rÊ  rÊ   r  r  s     rˆ   rp  Ú#IndexingConstant.constant_to_device}  s   € Ü d§j¡j¸¿
¹
È6ÑRÐRrŠ   r™   Nr•  r¬  )r›   rœ   r�   rž   rŸ   r  rp  r    r™   rŠ   rˆ   rÊ  rÊ  q  s   ‡ àƒJØÓØÓô÷SrŠ   rÊ  c                ó`  • SnSn[        [        [        X5      5      5       H‰  u  pEUS:X  a  M  [        R                  R
                  R                  XR5      (       d0  [        R                  R
                  R                  XS5      (       d    gU[        R                  " SU5      -  nX$-  nM‹     g©NrA   FT)	Úreversedr¤   rÒ   rn   r  r  r=  rª   r¦  )r  rA  Úexpected_strideÚexpected_stride_maxr‡   Úys         rˆ   Úis_contiguous_strides_for_shaper×  �  s”   € ð €OØÐÜœœs 5Ó1Ó2Ö3‰ˆØ�‹6Ùä�w‰w×Ñ×7Ñ7Ø÷
ñ 
ä—'‘'×"Ñ"×:Ñ:¸1×RÑRÙàœuŸyšy¨¨A›Ñ.ÐØÑŠñ 4ð rŠ   c                ó<   • [         R                  U R                  -  $ rƒ   )rB   Úpadding_alignment_bytesÚitemsizerÖ  s    rˆ   Úget_align_for_dtyperÛ  •  s   € Ü×)Ñ)¨U¯^©^Ñ;Ð;rŠ   c                  óB   • \ rS rSrSrSS jrS	S jr S
   SS jjrSrg)r  i™  ztAbstract base for Layout, MultiOutputLayout, NoneLayout.
Represents the memory layout of the output of an Operation.c                ó>   • [        [        U 5      R                  5      erƒ   r  rŸ  s    rˆ   r  ÚOutputSpec.get_device�  r  rŠ   c                ó>   • [        [        U 5      R                  5      erƒ   r  rŸ  s    rˆ   Ústorage_sizeÚOutputSpec.storage_size   r  rŠ   c                ó>   • [        [        U 5      R                  5      erƒ   r  r`  s     rˆ   ra  ÚOutputSpec.get_free_symbol_uses£  rC  rŠ   r™   Nr‘  r©  r   r«  )	r›   rœ   r�   rž   r®  r  rà  ra  r    r™   rŠ   rˆ   r  r  ™  s1   † ñCô7ô7ð %*ð7Ø!ð7à	!÷7ð 7rŠ   r  c                  óü  • \ rS rSrSrS\" S5      S4             SS jjr\SS j5       r\R                  S S j5       r\SS	 j5       r
\
R                  S S
 j5       r
\S!S j5       r\R                  S"S j5       rS#S jr\rS$S jrS%S jrS&S jr\      S'S j5       rS&S jrS(S jrS&S jr\        S)S j5       rS*S jrS&S jrS+S jrS,S jrS-S jrS!S jr\" S 5       S.   S/S jj5       rSrg)0rí  i©  z_
Layout base class

Carries tensor meta-information including offset and
whether it is pinned.
Nr   Fc                ó^  • Uc  [         R                  U5      nXl        X l        [	        U5      [	        U5      :X  d   SU SU 35       e[        S U 5       5      (       d   eX0l        X@l        XPl        X`l	        U R                  (       a"  U R                  R                  S:X  d   S5       eg g )Nr  ú	, stride=c              3  óN   #   • U  H  n[        U[        [        45      v •  M     g 7frƒ   )r„   r    r…   rå   s     rˆ   rè   Ú"Layout.__init__.<locals>.<genexpr>Á  s   é € Ð<²t°!”:˜a¤$¬ ×-Ð-²tùó   ‚#%r   zOnly CPU tensors can be pinned)r  r  r  r  rÈ   rë   Ú_sizeÚ_strideÚ_offsetrR  r°   )rŒ  r  r  r  r  rQ  rR  s          rˆ   rÀ  ÚLayout.__init__²  s£   € ð ‰>Ü#×6Ñ6°tÓ<ˆFàŒØŒ
Ü�4‹yœC ›KÓ'ÐH¨5°°°iÀ¸xÐ)HÓHÐ'ÜÑ<±tÓ<×<Ñ<Ð<Ð<ØŒ
ØŒØŒØ"Œà—N—N¨¯©×(8Ñ(8¸EÓ(Að 	
Ø,ó	
ÐBÐ(A�NrŠ   c                ó   • U R                   $ rƒ   ©rê  rŸ  s    rˆ   r  ÚLayout.sizeË  ó   € à�z‰zÐrŠ   c                ó   • Xl         g rƒ   rï  ©rŒ  r  s     rˆ   r  rð  Ï  s   € à�
rŠ   c                ó   • U R                   $ rƒ   ©rë  rŸ  s    rˆ   r  ÚLayout.strideÓ  ó   € à�|‰|ÐrŠ   c                ó   • Xl         g rƒ   rõ  ró  s     rˆ   r  rö  ×  ó   € à�rŠ   c                ó   • U R                   $ rƒ   ©rì  rŸ  s    rˆ   rQ  ÚLayout.offsetÛ  r÷  rŠ   c                ó   • Xl         g rƒ   rû  ró  s     rˆ   rQ  rü  ß  rù  rŠ   c                ó¤  • SnU R                   S:w  a  SU R                    3nU R                  R                  c  SOSU R                  R                   3nSnU R                  (       a  SU R                   3n[	        U 5      R
                   SU R                  R                   U SU R                   SU R                   S	U R                   U U S
3$ )NrÀ  r   z	, offset=Ú:z, is_pinned=z('z', z, size=ræ  r  )	rQ  r  rÊ   rR  r°   r›   r  r  r  )rŒ  rQ  Údevice_index_strÚis_pinned_strs       rˆ   r   ÚLayout.__str__ã  sÈ   € ØˆØ�;‰;˜!ÓØ  §¡ Ð.ˆFà!%§¡×!2Ñ!2Ñ!:™2À!ÀDÇKÁK×DUÑDUÐCVÐ@WÐØˆØ�>�>Ø*¨4¯>©>Ð*:Ð;ˆMä�D‹z×"Ñ"Ð# 2 d§k¡k×&6Ñ&6Ð%7Ð8HÐ7IÈÈTÏZÉZÈLð YØ—I‘I�;˜i¨¯© }°V°H¸]¸OÈ1ðNð	
rŠ   c                ó   • U R                   $ rƒ   r  rŸ  s    rˆ   r  ÚLayout.get_deviceó  r  rŠ   c           	     ó  • [         R                     [        R                  " [	        U R
                  5      [	        U R                  5      U R                  U R                  U R                  S9sS S S 5        $ ! , (       d  f       g = f)N)r  r  Ú
pin_memory)
rn   Ú	fake_moder  r  r\   r  r  r  r  rR  rŸ  s    rˆ   Úget_exampleÚLayout.get_exampleö  sN   € Ü�[‹[Ü×&Ò&Ü'¨¯	©	Ó2Ü'¨¯©Ó4Ø—j‘jØ—{‘{ØŸ>™>ñ÷ �[�[ús   ‘AA7Á7
Bc                óB   • [        U R                  U R                  5      $ rƒ   )r×  r  r  rŸ  s    rˆ   rk  ÚLayout.is_contiguous   s   € Ü.¨t¯{©{¸D¿I¹IÓFÐFrŠ   c                ó˜   • [        U 5      nUS;  d	  U S   S:X  a  g[        U[        U 5      U 5       H  u  p4nUS:w  d  M  X4:w  d  M    g   g)N)rá   é   rA   FT)rÈ   rÒ   r-   )rA  rU  ÚndimÚleftÚrightr  s         rˆ   Úis_channels_last_contiguousÚ"Layout.is_channels_last_contiguous  sY   € ô �5‹zˆØ�vÓ  q¡¨Q£ØÜ!$àä*¨5Ó1Øö"
ÑˆD˜ð �q�y˜T�]Ùñ"
ð rŠ   c                óè   • [        U R                  [        [        R	                  [        [        U R                  5      5      5      5      U R                  5       H  u  pnUS:w  d  M  X:w  d  M    g   grÒ  )rÒ   r  rÓ  r  r  r£   r  )rŒ  r  r  r  s       rˆ   Úis_transposedÚLayout.is_transposed  sZ   € Ü!$Ø�K‰KÜ”^×6Ñ6´t¼HÀTÇYÁYÓ<OÓ7PÓQÓRØ�I‰Iö"
ÑˆD˜ð
 �q�y˜T�]Ùñ"
ð rŠ   c           	     óò  • [        U R                  5      [        U5      :X  d   e[        U R                  5       VVs/ s H5  u  p#[        R
                  R                  R                  USS9S:w  d  M3  UPM7     nnnU Vs/ s H  o R                  U   PM     nnU Vs/ s H  o!U   PM	     nnS	S jnU" U5      nS/[        U5      -  n[        [        U5      5       H  nXR   XqU   '   M     [        [        U5      S-
  5       H_  nXr   XrS-      :„  n[        U[        5      (       d2  [        R
                  R                  R                  Xr   XrS-      :„  SS9nU(       d  M_    g   gs  snnf s  snf s  snf )
Nrà   rÈ  rA   c                ód   • [        U 5      nU  Vs/ s H  o!R                  U5      PM     sn$ s  snf rƒ   )ré  rÊ   )ÚarrÚ
sorted_arrÚelements      rˆ   Úsorted_indicesÚ0Layout.is_stride_ordered.<locals>.sorted_indices,  s,   € Ü ›ˆJÙ=@ÓAºS°'×$Ñ$ WÖ-¹SÑAÐAùÒAs   �-r0  Tr"  F)r  r¢  r¶   r¢  )rÈ   r  rñ   r  rn   r  r  r–  rÉ   r„   r•   Ú
_shape_envr  )	rŒ  rÓ   rË   rB  Únon_1_indicesr  r  Ústride_orderedr)  s	            rˆ   ru  ÚLayout.is_stride_ordered  sl  € Ü�4—;‘;Ó¤3 u£:Ó-Ð-Ð-ô
 $ D§I¡IÔ.ô
â.‘�Ü�w‰w×Ñ×1Ñ1°#ÀÐ1ÐBÀaÑG÷ Ù.ð 	ñ 
ñ +8Ó8ª- Q—+‘+˜a”.©-ˆÐ8Ù2?Ó@²-¨Q a¤±-ˆÐ@ô	Bñ
 ˜uÓ%ˆð ˜¤ E£
Ñ*ˆÜ”s˜5“zÖ"ˆAØ'-¡yˆN ™8Ó$ñ #ô ”s˜5“z A‘~Ö&ˆAØ!Ñ$ ~¸!±eÑ'<Ñ<ˆDÜ˜d¤D×)Ñ)Ü—w‘w×)Ñ)×7Ñ7Ø"Ñ%¨¸1±uÑ(=Ñ=Èdð 8ð �÷ ˆtÙñ 'ð ùó;
ùò 9ùÚ@s   ½2E)Á3E)Â E/ÂE4c                ó²   • S/[        [        [        S[        U R                  5      S-
  5      5      5      -   n[        U5      /U-   nU R                  U5      $ ©Nr   rA   )r£   rÓ  rÉ   rÈ   r  ru  rE  s     rˆ   Úis_channels_last_stride_orderedÚ&Layout.is_channels_last_stride_orderedB  sN   € à�”dœ8¤E¨!¬S°·±Ó-=ÀÑ-AÓ$BÓCÓDÑDˆÜ�U“�˜uÑ$ˆØ×%Ñ% eÓ,Ð,rŠ   c                óô  ^^• [        U5      n[        U 5      S:X  a  U $ [        R                  (       d  [        R                  X5      (       a  U $ [        R                  " 5       n[        US5      (       a#  UR                  R                  SS5      (       a  U $ [        S [        R                  " X5       5       5      (       + n[        R                  (       d	  U(       a  U $ [        [        R                  S5      (       a  [        R                  R                   OSmSU4S jjmT(       a  [#        U4S	 jU  5       5      (       a  U $ [%        U T5      n['        U5      n[)        [        U 5      5       Vs/ s H  nSPM     n	nS
X—S   '   Sn
[+        US
S S
S9 H´  u  p¼X{S
-
     nX�   X   -  n[-        U[.        [0        R2                  45      =(       a!    U[        R4                  :„  =(       a    Xã-  S:g  =(       d1    [-        U[0        R6                  5      =(       a    [        R                  nXéU'   U(       d  M¢  [9        Xã5      U-  Xœ'   Sn
M¶     U
(       d  U $ [:        =R<                  S
-  sl        U	$ s  snf )zv
The padding does not change stride order but makes sure all strides larger
than the threshold are multiple of align.
r   rb  Údislike_paddingFc              3  ób   #   • U  H%  n[        U[        [        R                  45      v •  M'     g 7frƒ   rä   rå   s     rˆ   rè   Ú&Layout._pad_strides.<locals>.<genexpr>a  s*   é € ð 
â6�ô �qœ3¤§¡Ð.×/Ð/Ú6ùrê   r  Nc                óŠ   >• Tc  g[        U [        R                  5      (       d  g[        U4S jU R                   5       5      $ )NFc              3  óF   >#   • U  H  nTR                  U5      v •  M     g 7frƒ   )Úis_unbacked_symint)ræ   rç   rí   s     €rˆ   rè   ÚILayout._pad_strides.<locals>.contains_unbacked_symints.<locals>.<genexpr>o  s!   øé € ÐRÒ@Q¸1�y×3Ñ3°A×6Ð6Ò@Qùs   ƒ!)r„   rª   r    r{  r1   )r)  rí   s    €rˆ   Úcontains_unbacked_symintsÚ6Layout._pad_strides.<locals>.contains_unbacked_symintsj  s7   ø€ ØÑ ØÜ˜d¤E§J¡J×/Ñ/ØÜÔRÀ×@QÒ@QÓRÓRÐRrŠ   c              3  ó4   >#   • U  H  nT" U5      v •  M     g 7frƒ   r™   )ræ   rç   r-  s     €rˆ   rè   r(  r  s   øé € ÐNÂ:¸aÑ6°q×9Ð9Â:ùr¼  rA   )r©  T)r)  zsympy.Expr | intr¶   r•   )rÛ  rÈ   rB   Úpad_channels_lastrí  r  rn   Úget_current_noder³  rb  r¸  rë   r  ÚchainÚpad_dynamic_shapesr  r  r{  rû   rö   rÉ   rñ   r„   r…   rª   r!   Úpadding_stride_thresholdr    rZ   r&   Únum_comprehensive_padding)Ú
in_stridesr  r  ÚalignÚcurrent_fx_noderd   rq  rõ   rø   Únew_stridesÚpaddedÚrankrò   Úprev_idxr  Úrequire_paddingr-  rí   s                   @@rˆ   Ú_pad_stridesÚLayout._pad_stridesH  s-  ù€ ô $ EÓ*ˆÜˆz‹?˜aÓØÐä×'×'¬F×,NÑ,NØ÷-
ñ -
ð Ðä×,Ò,Ó.ˆÜ�? F×+Ñ+°×0DÑ0D×0HÑ0HØ˜u÷1
ñ 1
ð Ðô ñ 
ä—_’_ ZÔ6ó
ó 
ô 
ˆ
ô ×(×(®ZØÐä*1´!·'±'¸<×*HÑ*H”A—G‘G×&Ò&Èdˆ	÷	Sö œÔNÁ:ÓN×NÑNØÐä'¨
°IÓ>ˆÜ,¨\Ó:ˆ
ä"'¬¨J«Ô"8Ó9Ò"8˜Q“qÑ"8ˆÐ9ð &'ˆ˜q‘MÑ"àˆÜ" :¨a¨b >¸Ô;‰IˆDØ!¨¡(Ñ+ˆHØ Ñ*¨T©^Ñ;ˆFô ˜6¤C¬¯©Ð#7Ó8÷ (ØœV×<Ñ<Ñ<÷(à‘N aÑ'÷Pô ˜V¤U§Z¡ZÓ0×N´V×5NÑ5Nð	 ð
  &˜ÑßˆÜ#*¨6Ó#9¸EÑ#A�Ñ Ø’ñ <ö ð Ðô 	×)Ò)¨QÑ.Õ)ØÐùò; :s   Å5I5c                óØ   • [        U [        5      (       d   [        U 5      5       eU R                  c   eU R	                  U R                  U R
                  U R                  5      U l        g rƒ   )r„   r  r°   r  r>  r  r  rŸ  s    rˆ   rj  ÚLayout.pad_strides—  sP   € Ü˜$¤×/Ñ/Ð;´°d³Ó;Ð/Ø�{‰{Ñ&Ð&Ð&Ø×'Ñ'¨¯©°T·Y±YÀÇ
Á
ÓKˆ�rŠ   c                óP   • [         R                  =(       a    [        U [        5      $ rƒ   )rB   Úcomprehensive_paddingr„   r  rŸ  s    rˆ   ri  ÚLayout.should_pad_stridesœ  s   € Ü×+Ñ+×P´
¸4ÄÓ0PÐPrŠ   c                ó  • [        U [        5      (       a  U $ U R                  5       (       a  U R                  5         [        U R                  U R
                  U R                  U R                  U R                  U R                  5      $ rƒ   )
r„   rP  ri  rj  r  r  r  r  rQ  rR  rŸ  s    rˆ   Úas_fixedÚLayout.as_fixedŸ  sf   € Ü�dœK×(Ñ(ØˆKà×"Ñ"×$Ñ$Ø×ÑÔÜØ�K‰KØ�J‰JØ�I‰IØ�K‰KØ�K‰KØ�N‰Nó
ð 	
rŠ   c                ó¤   • [         R                  (       d   S[        U 5      R                   S35       eU R	                  5       R                  5       $ )Nzconvert z to FixedLayout first)r  r  r°   r›   rF  r  rŸ  s    rˆ   r  ÚLayout.make_indexer®  sG   € Ü×,×,ð 	
Ø”t˜D“z×*Ñ*Ð+Ð+@ÐAó	
Ð,ð �}‰}‹×+Ñ+Ó-Ð-rŠ   c                ó¢  • [        U[        5      =(       a¹    U R                  UR                  :H  =(       a™    U R                  UR                  :H  =(       ay    U R                  UR                  :H  =(       aY    U R
                  UR
                  :H  =(       a9    U R                  UR                  :H  =(       a    U R                  UR                  :H  $ rƒ   )r„   rí  r  r  r  r  rQ  rR  )rŒ  Úothers     rˆ   Ú__eq__ÚLayout.__eq__´  s—   € ä�uœfÓ%÷ 2Ø—‘˜uŸ|™|Ñ+÷2à—
‘
˜eŸk™kÑ)÷2ð —	‘	˜UŸZ™ZÑ'÷2ð —‘˜uŸ|™|Ñ+÷	2ð
 —‘˜uŸ|™|Ñ+÷2ð —‘ %§/¡/Ñ1ð	
rŠ   c                óX   • [        U R                  U R                  U R                  5      $ rƒ   )r*   r  r  rQ  rŸ  s    rˆ   rà  ÚLayout.storage_size¿  s   € Ü.¨t¯y©y¸$¿+¹+ÀtÇ{Á{ÓSÐSrŠ   c                óŠ   • [        U R                  U5      [        U R                  U5      -  [        U R                  U5      -  $ rƒ   )r(   r  r  rQ  r`  s     rˆ   ra  ÚLayout.get_free_symbol_usesÂ  s=   € ô
 ˜TŸY™Y¨Ó6Ü˜tŸ{™{¨MÓ:ñ;ä˜tŸ{™{¨MÓ:ñ;ð	
rŠ   )rì  rê  rë  r  r  rR  r  )r  r”  r  r†  r  r‹  r  zOptional[Sequence[Expr]]rQ  r    rR  r•   r¶   r·   rŠ  ©r  r‹  r¶   r·   r�  ©r  r    r¶   r·   r›  r“  )r¶   útorch.Tensorr‰  )rA  rš  rU  rš  r¶   r•   )rÓ   r¢  r¶   r•   )r6  r¢  r  r‹  r  r†  r¶   r¢  r~  ©r¶   rP  r—  )rK  rÂ   r¶   r•   r   r«  ) r›   rœ   r�   rž   r®  r!   rÀ  r´  r  Úsetterr  rQ  r   rE  r  r  rk  r±  r  r  ru  r#  r>  rj  ri  rF  r  rL  rà  rY   ra  r    r™   rŠ   rˆ   rí  rí  ©  sÃ  † ñð ,0Ù˜q“zØð
àð
ð ð
ð ð	
ð
 )ð
ð ð
ð ð
ð 
õ
ð2 óó ðð 
‡[�[óó ðð óó ðð ‡]�]óó ðð óó ðð ‡]�]óó ðô
ð €HôôôGð ðØ!ðØ,>ðà	óó ðô"ô!ôF-ð ðLØ!ðLØ)7ðLØ@KðLà	óLó ðLô\Lô
Qô
ô.ô	
ôTñ ˜HÓ%à$)ð
Ø!ð
à	!ô
ó &ó
rŠ   rí  c                  ó"   • \ rS rSrSrSS jrSrg)rP  iÍ  z A Tensor layout we cannot changec                óX   • [        U R                  U R                  U R                  5      $ )r­  )r+  r  r  rQ  rŸ  s    rˆ   r  ÚFixedLayout.make_indexerÐ  s   € ä˜dŸi™i¨¯©°d·k±kÓBÐBrŠ   r™   Nr—  )r›   rœ   r�   rž   r®  r  r    r™   rŠ   rˆ   rP  rP  Í  s   † Ù*÷CrŠ   rP  c                  óè  ^ • \ rS rSrSrSrSS jr\SS j5       r\SS j5       r	\SS j5       r
\      SS j5       r\      SS	 j5       r\SS
 j5       r\R                  SS j5       r\SS j5       r\R                  SS j5       r\S S j5       r\R                  S!S j5       r S"     S#S jjr S"     S$S jjrS%S jrS&S jrS'S jrS(S jr  S)           S*U 4S jjjrSrU =r$ )+r  iÕ  zp
A Tensor layout that we are allowed to change

Assumption: layout change should NOT add or remove free symbols
Fc                óJ   • [         R                  " U 5      R                  5       $ )z¾
Compute what the strides would be if this layout were frozen,
without actually modifying the layout. This is used for speculative
stride computation during Triton template code generation.
)rÛ  ÚdeepcopyrF  rŸ  s    rˆ   Ú!get_fixed_layout_without_freezingÚ0FlexibleLayout.get_fixed_layout_without_freezingÞ  s   € ô �}Š}˜TÓ"×+Ñ+Ó-Ð-rŠ   c                óØ   • [        U 5      S:X  a  / $ [        R                  R                  /n[	        U SS  5       H  nUR                  X!S   -  5        M     [        [	        U5      5      $ )Nr   rA   r0  )rÈ   rª   r  r1  rÓ  rÅ  r£   )ÚsizesÚreversed_stridesr  s      rˆ   r  Ú!FlexibleLayout.contiguous_stridesè  s^   € äˆu‹:˜‹?ØˆIÜ!ŸG™GŸK™K˜=ÐÜ˜U 1 2˜YÖ'ˆDØ×#Ñ# D¸BÑ+?Ñ$?Ö@ñ (ä”HÐ-Ó.Ó/Ð/rŠ   c                óä   • [        [        [        U 5      5      5      [        U5      :X  d   X45       e[        R                  R
                  nS/[        U5      -  nU H  nX#U'   X U   -  nM     U$ )z‚
Create a stride based on the order the dimensions should be filled in.

In this format, channels last would be:
    [1, 3, 2, 0]
N)r:   rÉ   rÈ   rª   r  r1  )r`  rÓ   Únext_striderU  rË   s        rˆ   Úfill_orderedÚFlexibleLayout.fill_orderedñ  sm   € ô œ%¤ E£
Ó+Ó,´
¸5Ó0AÓAÐQÀEÀ>ÓQÐAÜ—g‘g—k‘kˆØ�&œ3˜u›:Ñ%ˆãˆAØ$�A‰JØ%¨a©Ñ0ŠKñ ð ˆrŠ   c                óš   • [        [        [        U 5      5      5      [        U5      :X  d   e[        U5      n[        R                  X5      $ )zz
Create a stride based on the sorted order of a permuted range.

In this format, channels last would be:
    [3, 0, 2, 1]
)r:   rÉ   rÈ   rö   r  re  )r`  rÓ   rõ   s      rˆ   r  ÚFlexibleLayout.stride_ordered  s@   € ô œ%¤ E£
Ó+Ó,´
¸5Ó0AÓAÐAÐAÜ,¨UÓ3ˆ
Ü×*Ñ*¨5Ó=Ð=rŠ   c                óD  • U[         R                  :X  a  [        R                  U [        5      $ U[         R
                  :X  a  [        R                  U [        5      $ U[         R                  :X  a  [        R                  U 5      $ [        R                  SU5        [        e)a9  
Create a stride based on a memory format.

Memory format is translasted into a stride order,
so channels_last is the same as:
    FlexibleLayout.stride_ordered(sizes, [3, 0, 2, 1])

This interface does not support memory_format `torch.preserve_format`
which should be used to deduce a format from another source
z>stride_ordered_for_memory_format, unsuppored memory_format: %s)r  Úchannels_lastr  r  ÚNHWC_STRIDE_ORDERÚchannels_last_3dÚNHWDC_STRIDE_ORDERÚcontiguous_formatr  rÿ  r¶  rÚ  )r`  Úmemory_formats     rˆ   Ú stride_ordered_for_memory_formatÚ/FlexibleLayout.stride_ordered_for_memory_format  s�   € ð œE×/Ñ/Ó/Ü!×0Ñ0°Ô8IÓJÐJØœe×4Ñ4Ó4Ü!×0Ñ0°Ô8JÓKÐKØœe×5Ñ5Ó5Ü!×4Ñ4°UÓ;Ð;ä�I‰IØPØôô &Ð%rŠ   c                ó(  • [        U 5      [        U5      :X  d   eU Vs/ s H,  n[        R                  R                  R	                  U5      PM.     nn[        [        [        U5      5      UR                  S9n[        R                  X5      $ s  snf )z›
Create a stride that has the same stride order as given stride

For example, if given stride is [1000, 1, 100, 10],
the fill order should be [1, 3, 2, 0]
rá  )
rÈ   rn   r  r  rK  ré  rÉ   Ú__getitem__r  re  )r`  r  r‡   rõ   s       rˆ   Úsame_orderedÚFlexibleLayout.same_ordered)  su   € ô �5‹zœS ›[Ó(Ð(Ð(ÙBHÓIÂ&¸Q”!—'‘'×"Ñ"×5Ñ5°aÖ8Á&ˆÐIÜœE¤# f£+Ó.°F×4FÑ4FÑGˆ
Ü×*Ñ*¨5Ó=Ð=ùò Js   Ÿ3Bc                ó   • U R                   $ rƒ   rï  rŸ  s    rˆ   r  ÚFlexibleLayout.size8  rñ  rŠ   c                ó4   • U R                  SU5        Xl        g )Nr  )Ú!assert_free_symbol_uses_unchangedrê  ró  s     rˆ   r  rw  <  s   € à×.Ñ.¨v°uÔ=Ø�
rŠ   c                ó   • U R                   $ rƒ   rõ  rŸ  s    rˆ   r  ÚFlexibleLayout.strideA  r÷  rŠ   c                ó4   • U R                  SU5        Xl        g )Nr  )ry  rë  ró  s     rˆ   r  r{  E  ó   € à×.Ñ.¨x¸Ô?Ø�rŠ   c                ó   • U R                   $ rƒ   rû  rŸ  s    rˆ   rQ  ÚFlexibleLayout.offsetJ  r÷  rŠ   c                ó4   • U R                  SU5        Xl        g )NrQ  )ry  rì  ró  s     rˆ   rQ  r  N  r}  rŠ   c                óB  • U R                  U R                  U5      nU R                  5       (       a-  U(       a&  U R                  X0R                  U R                  5      n[        U R                  U R                  U R                  UU R                  U R                  5      $ rƒ   )	r  r  ri  r>  r  rP  r  rQ  rR  )rŒ  rÓ   r@  rX  s       rˆ   Úas_stride_orderÚFlexibleLayout.as_stride_orderS  sx   € ð ×(Ñ(¨¯©°EÓ:ˆ
Ø×"Ñ"×$Ñ$®Ø×*Ñ*¨:·y±yÀ$Ç*Á*ÓMˆJäØ�K‰KØ�J‰JØ�I‰IØØ�K‰KØ�N‰Nó
ð 	
rŠ   c                ó  • UnU R                  5       (       a-  U(       a&  U R                  X0R                  U R                  5      n[	        U R
                  U R                  U R                  UU R                  U R                  5      $ rƒ   )ri  r>  r  r  rP  r  rQ  rR  )rŒ  rN  r@  rX  s       rˆ   Úas_exact_stridesÚFlexibleLayout.as_exact_stridesc  sg   € ð #ˆ
Ø×"Ñ"×$Ñ$®Ø×*Ñ*¨:·y±yÀ$Ç*Á*ÓMˆJäØ�K‰KØ�J‰JØ�I‰IØØ�K‰KØ�N‰Nó
ð 	
rŠ   c                ó4  • U R                  U R                  U5      nU R                  5       (       a&  U R                  X R                  U R                  5      n[        U R                  U R                  U R                  UU R                  U R                  5      $ rƒ   )	re  r  ri  r>  r  rP  r  rQ  rR  )rŒ  rÓ   rX  s      rˆ   Úas_fill_orderÚFlexibleLayout.as_fill_orders  st   € Ø$(×$5Ñ$5°d·i±iÀÓ$Gˆ
Ø×"Ñ"×$Ñ$Ø×*Ñ*¨:·y±yÀ$Ç*Á*ÓMˆJÜØ�K‰KØ�J‰JØ�I‰IØØ�K‰KØ�N‰Nó
ð 	
rŠ   c                ó4  • U R                  U R                  U5      nU R                  5       (       a&  U R                  X R                  U R                  5      n[        U R                  U R                  U R                  UU R                  U R                  5      $ rƒ   )	rt  r  ri  r>  r  rP  r  rQ  rR  )rŒ  r  rX  s      rˆ   Úas_same_orderÚFlexibleLayout.as_same_order€  st   € Ø×&Ñ& t§y¡y°&Ó9ˆ
Ø×"Ñ"×$Ñ$Ø×*Ñ*¨:·y±yÀ$Ç*Á*ÓMˆJÜØ�K‰KØ�J‰JØ�I‰IØØ�K‰KØ�N‰Nó
ð 	
rŠ   c           
     ót   • 0 nS H/  nS H&  nX#4n[        [        [        X5      U5      5      X'   M(     M1     U$ )N)r  r  rQ  ©TF)r:   r(   r¼   )rŒ  Úinitial_free_symbolsr¿   ri  râ  s        rˆ   Úget_initial_free_symbol_usesÚ+FlexibleLayout.get_initial_free_symbol_uses�  sI   € Ø!ÐÛ0ˆDÛ!.�ØÐ+�Ü,6Ü$¤W¨TÓ%8¸-ÓHó-Ð$Ó)ó "/ñ 1ð $Ð#rŠ   c                ó‚   • S H9  nU R                   X4   n[        [        X#5      5      nXT:X  a  M.   SU SU 35       e   g )NrŽ  z)Expected free symbols unchanged, but got z vs )r�  r:   r(   )rŒ  r¿   r  ri  Úold_free_symbolsÚnew_free_symbolss         rˆ   ry  Ú0FlexibleLayout.assert_free_symbol_uses_unchanged˜  sX   € Û*ˆMØ#×8Ñ8¸$Ð9NÑOÐÜ)Ô*:¸5Ó*PÓQÐØ#Õ7ð Ø;Ð<LÐ;MÈTÐRbÐQcÐdóÐ7ò +rŠ   c                ó²   >• U(       a  [         R                  X45      nO[         R                  U5      n[        TU ]  XX6US9  U R                  5       U l        g )N©rR  )r  re  r  r·  rÀ  r�  r�  )rŒ  r  r  r  rq  rR  rU  r¹  s          €rˆ   rÀ  ÚFlexibleLayout.__init__   sO   ø€ ö Ü$×1Ñ1°$ÓE‰Gä$×7Ñ7¸Ó=ˆGÜ‰Ñ˜¨ÀÐÑKð %)×$EÑ$EÓ$GˆÕ!rŠ   )rì  rê  rë  r�  rU  )r`  r¢  r¶   r¨  )r`  r¢  rÓ   r¢  r¶   r¨  )r`  r¢  rÓ   r¢  r¶   r‹  )r`  r¢  ro  ztorch.memory_formatr¶   r‹  )r`  r¢  r  rš  r¶   r‹  rŠ  rR  r�  rS  r   )rÓ   r¢  r@  r•   r¶   rP  )rN  rš  r@  r•   r¶   rP  )rÓ   r¢  r¶   rP  )r  rš  r¶   rP  )r¶   z$dict[tuple[str, bool], sympy.Symbol])r¿   rÃ   r  r3   r¶   r·   r  )r  r”  r  r†  r  r‹  rq  ú'Optional[Sequence[Union[int, Integer]]]rR  r•   r¶   r·   )r›   rœ   r�   rž   r®  r  r]  r±  r  re  r  rp  rt  r´  r  rV  r  rQ  r‚  r…  rˆ  r‹  r�  ry  rÀ  r    rª  r«  s   @rˆ   r  r  Õ  sÝ  ø† ñð €Nô.ð ó0ó ð0ð óó ðð  ó	>ó ð	>ð ð&Øð&Ø-@ð&à	ó&ó ð&ð4 ð>Øð>Ø&8ð>à	ó>ó ð>ð óó ðð 
‡[�[óó ðð óó ðð ‡]�]óó ðð óó ðð ‡]�]óó ðð
 ;@ð
Ø"ð
Ø37ð
à	õ
ð" HMð
Ø/ð
Ø@Dð
à	õ
ô 
ô
ô	$ôð AEØðHàðHð ðHð ð	Hð
 >ðHð ðHð 
÷Hö HrŠ   r  c                  óp   ^ • \ rS rSrSrSU 4S jjrS	S jrS
S jr\" S 5       S   SS jj5       r	Sr
U =r$ )ÚNonOwningLayouti³  z,Is a view into the storage of another tensorc                ó¦   >• UR                  5       n[        TU ]	  UR                  UR                  UR
                  UR                  5        Xl        g rƒ   )r  r·  rÀ  r  r  r  r  Úview)rŒ  r�  rN  r¹  s      €rˆ   rÀ  ÚNonOwningLayout.__init__¶  s?   ø€ Ø—‘Ó"ˆÜ‰ÑØ�M‰MØ�L‰LØ�K‰KØ�M‰Mô		
ð �	rŠ   c                ó>   • U R                  5       R                  5       $ rƒ   )rF  r  rŸ  s    rˆ   r  ÚNonOwningLayout.make_indexerÀ  s   € Ø�}‰}‹×+Ñ+Ó-Ð-rŠ   c                ó¶   • U R                   R                  5       R                  nUS:X  a  gSSKJn  [
        R                  R                  R                  X5      $ )Nr   TrA   )Ú	ALIGNMENT)	r�  r  rQ  Úutilsr¢  rn   r  r  ry  )rŒ  rQ  r¢  s      rˆ   Úmaybe_guard_alignedÚ#NonOwningLayout.maybe_guard_alignedÃ  sB   € Ø—‘×%Ñ%Ó'×.Ñ.ˆØ�Q‹;ØÝ$ä�w‰w×Ñ×<Ñ<¸VÓOÐOrŠ   c                óR  • [        U R                  [        5      (       d   eU R                  R                  n[        U[        5      (       d   [        U5      5       eUR                  n[        U[        5      (       d   [        U5      5       eUR                  R                  U5      $ rƒ   )	r„   r�  rS  rM  rq  r°   rr  rN  ra  )rŒ  ri  ÚboxÚinput_buffers       rˆ   ra  Ú$NonOwningLayout.get_free_symbol_usesË  s€   € ô ˜$Ÿ)™)¤_×5Ñ5Ð5Ð5Ø�i‰i�n‰nˆÜ˜#œz×*Ñ*Ð5¬D°«IÓ5Ð*Ø—x‘xˆÜ˜,¬×/Ñ/Ð:´°c³Ó:Ð/Ø×"Ñ"×7Ñ7¸ÓFÐFrŠ   )r�  )r�  zUnion[BaseView, TensorBox]r¶   r·   r—  r‰  r   r«  )r›   rœ   r�   rž   r®  rÀ  r  r¤  rY   ra  r    rª  r«  s   @rˆ   r›  r›  ³  sG   ø† Ù6÷ô.ôPñ Ð-Ó.à$)ðGØ!ðGà	!ôGó /öGrŠ   r›  c                  ó   • \ rS rSrSrSrg)ÚCommBufferTypei×  Úsymm_memr™   N)r›   rœ   r�   rž   ÚSYMM_MEMr    r™   rŠ   rˆ   r«  r«  ×  s   † ØƒHrŠ   r«  c                  óR   ^ • \ rS rSr% SrS\S'   S\S'         S	U 4S jjrSrU =r$ )
ÚCommBufferLayoutiÛ  a\  
A layout that signifies the buffer is a comm buffer.
In terms of striding, the layout is identical to `FixedLayout`.

Buffers with this layout do not participate in in-place reuse - it can be
neither the source nor the target for in-place reuse.

For detailed motivation and usage of this layout, see
NOTE [lowering-time collective optimization].
r«  Úcomm_buffer_typerÃ   Ú
group_namec           	     ó  >• [        U[        5      (       a  UR                  5       OUn[        TU ]  UR
                  UR                  UR                  UR                  UR                  UR                  S9  X l        X0l        g )N©r  r  r  r  rQ  rR  )r„   r  rF  r·  rÀ  r  r  r  r  rQ  rR  r°  r±  )rŒ  rN  r°  r±  Úfixedr¹  s        €rˆ   rÀ  ÚCommBufferLayout.__init__ê  sh   ø€ ô &0°¼×%GÑ%G�—‘Ô!ÈVˆÜ‰ÑØ—<‘<Ø—+‘+Ø—‘Ø—<‘<Ø—<‘<Ø—o‘oð 	ñ 	
ð !1ÔØ$�rŠ   )r°  r±  )rN  z"Union[FlexibleLayout, FixedLayout]r°  r«  r±  rÃ   )	r›   rœ   r�   rž   r®  rŸ   rÀ  r    rª  r«  s   @rˆ   r¯  r¯  Û  s;   ø‡ ñ	ð %Ó$ØƒOð%à2ð%ð )ð%ð ÷	%õ %rŠ   r¯  c                  ó–   • \ rS rSr% S\S'   \R                  " S S9rS\S'   \R                  " S S9rS\S	'   SS
 jr	SS jr
SS jrSrg)Ú
NoneLayoutiý  r’  r  c                 ó   • S/$ rý  r™   r™   rŠ   rˆ   rß  ÚNoneLayout.<lambda>  s   € ÀÁrŠ   ©Údefault_factoryrî  r  c                 ó   • S/$ rý  r™   r™   rŠ   rˆ   rß  r¹  	  s   € À1Á#rŠ   r  c                ó   • grý  r™   rŸ  s    rˆ   rà  ÚNoneLayout.storage_size  r}  rŠ   c                ó   • U $ rƒ   r™   rŸ  s    rˆ   rF  ÚNoneLayout.as_fixed  ó   € ØˆrŠ   c                ó   • U R                   $ rƒ   r  rŸ  s    rˆ   r  ÚNoneLayout.get_device  r  rŠ   r™   Nr©  rˆ  r‘  )r›   rœ   r�   rž   rŸ   r¯  r°  r  r  rà  rF  r  r    r™   rŠ   rˆ   r·  r·  ý  sC   ‡ ð #Ó"Ø!×'Ò'¹ÑD€Dˆ)ÓDØ#×)Ò)¹+ÑF€FˆIÓFôô÷rŠ   r·  c                  óÂ   ^ • \ rS rSrSU 4S jjr\SS j5       r\R                  SS j5       rSS jrSS jr	SS jr
\ S       SS jj5       rSS	 jrSS
 jrSrU =r$ )ÚMutationLayoutSHOULDREMOVEi  c                ó  >• [         TU ]  UR                  5       UR                  5       UR	                  5       S 5        Xl        U R                  5       R                  5       n[        R                  R                  U5        g rƒ   )r·  rÀ  r  r  r	  rÝ  Ú
get_bufferrs  rn   r  Úmark_buffer_mutated)rŒ  rÝ  r¿   r¹  s      €rˆ   rÀ  Ú#MutationLayoutSHOULDREMOVE.__init__  sc   ø€ Ü‰ÑØ×&Ñ&Ó(Ø×ÑÓØ�O‰OÓØô		
ð ŒØ�‰Ó ×)Ñ)Ó+ˆÜ	�‰×#Ñ# DÕ)rŠ   c                ó6   • U R                  5       R                  $ rƒ   )Úreal_layoutr  rŸ  s    rˆ   r  Ú!MutationLayoutSHOULDREMOVE.stride!  s   € à×ÑÓ!×(Ñ(Ð(rŠ   c                ó   • g rƒ   r™   ró  s     rˆ   r  rÌ  %  s   € àrŠ   c                ó>   • U R                  5       R                  5       $ rƒ   )rË  rà  rŸ  s    rˆ   rà  Ú'MutationLayoutSHOULDREMOVE.storage_size)  s   € Ø×ÑÓ!×.Ñ.Ó0Ð0rŠ   c                ó†   ^• SU4S jjmT" U R                   5      n[        U[        5      (       d   [        U5      5       eU$ )Nc                óú   >• [        U [        5      (       a  T" U R                  5      $ [        U [        5      (       a  T" U R	                  5       5      $ [        U [
        5      (       a  T" U R                  5      $ U $ rƒ   )r„   rÅ  rÝ  ro  rp  Ú
MutableBoxrM  )rÝ  Úunwrap_viewss    €rˆ   rÓ  Ú;MutationLayoutSHOULDREMOVE.get_buffer.<locals>.unwrap_views-  sb   ø€ Ü˜&Ô"<×=Ñ=Ù# F§M¡MÓ2Ð2Ü˜&¤(×+Ñ+Ù# F×$6Ñ$6Ó$8Ó9Ð9Ü˜&¤*×-Ñ-Ù# F§K¡KÓ0Ð0ØˆMrŠ   )rÝ  r   r¶   r   )rÝ  r„   rr  r°   )rŒ  r¯  rÓ  s     @rˆ   rÇ  Ú%MutationLayoutSHOULDREMOVE.get_buffer,  s9   ø€ ÷	ñ ˜dŸk™kÓ*ˆÜ˜&¤&×)Ñ)Ð7¬4°«<Ó7Ð)ØˆrŠ   c                óh   • U R                  5       R                  n[        U[        5      (       d   eU$ rƒ   )rÇ  rN  r„   rí  )rŒ  rN  s     rˆ   rË  Ú&MutationLayoutSHOULDREMOVE.real_layout:  s,   € Ø—‘Ó"×)Ñ)ˆÜ˜&¤&×)Ñ)Ð)Ð)ØˆrŠ   c                óÄ  • UR                  5         [        R                  R                  UR	                  5       5        [        U[        5      (       a  UR                  nUR                  5         U(       dË  [        R                  UR                  5       UR                  5       UR                  5       [        UR                  5       UR                  5       5       VVs/ s H.  u  pE[        R                  R                   R#                  XE5      PM0     snnS9n[        U[$        [&        45      (       d   eUR                  nUR                  5         [)        US5      (       d   U5       e[        UR                  R*                  [,        5      (       d$   [/        UR                  R*                  5      5       e[1        U5      UR                  l        UR                  $ s  snnf )Nrh  rM  )r  rn   r  rÈ  rs  r„   r   rM  r7  rO  r  r  r  r  rÒ   r	  r  Úcheck_equals_and_simplifyro  rÒ  r³  rN  r  r°   rÅ  )r  ÚsrcÚdstÚunsafe_aliasr�  rŽ  r²   s          rˆ   Úrealize_intoÚ'MutationLayoutSHOULDREMOVE.realize_into?  sV  € ð 	�‰Œô 	
�‰×#Ñ# C§L¡L£NÔ3ä�cœ9×%Ñ%Ø—(‘(ˆCð 	×ÑÔæÜ×#Ñ#Ø—~‘~Ó'Ø—m‘m“oØŸ™Ó*ô !$ C§L¡L£N°C·L±L³NÔ Côâ C™˜ô —G‘G×$Ñ$×>Ñ>¸qÖDÙ Còð	 $ð ˆDô ˜d¤X¬zÐ$:×;Ñ;Ð;Ð;Ø—)‘)ˆCà�‰ŒÜ�s˜F×#Ñ#Ð( SÓ(Ð#Ü˜#Ÿ(™(Ÿ/™/¬>×:Ñ:ÐQ¼DÀÇÁÇÁÓ<QÓQÐ:Ü4°SÓ9ˆ�‰ŒØ�x‰xˆùós   Ã5Gc                ó   • U $ rƒ   r™   rŸ  s    rˆ   rF  Ú#MutationLayoutSHOULDREMOVE.as_fixedg  rÁ  rŠ   c                ó6   • U R                   R                  5       $ rƒ   )rÝ  r  rŸ  s    rˆ   r  Ú'MutationLayoutSHOULDREMOVE.make_indexerj  rn  rŠ   )rÝ  )rÝ  r€   r¶   r·   rŠ  )r  r   r¶   r·   r�  )r¶   rr  r‡  r   )rÚ  r€   rÛ  r€   rÜ  r•   r¶   r€   )r¶   r   r—  )r›   rœ   r�   rž   rÀ  r´  r  rV  rà  rÇ  rË  rF  rÝ  rF  r  r    rª  r«  s   @rˆ   rÅ  rÅ    sŠ   ø† ÷	*ð ó)ó ð)ð ‡]�]óó ðô1ôôð
 à<Að%Øð%Ø%ð%Ø59ð%à	ô%ó ð%ôN÷*ò *rŠ   rÅ  c                  ó´  ^ • \ rS rSr% S\S'   S\S'   S%U 4S jjrS&S jrS'S jrS(S	 jrS)S
 jr	S*S jr
\S+S j5       rS,S jrS-S jrS.S jrS/S jrS0S jrS1S jrS2S jrS%S jr S3     S4S jjrS5S jrS6S jr S3     S7S jjrS2S jrS8S jrS9S:S jjrS%S jrS;S jrS;S jrS<S jr\ " S 5       S3   S=S  jj5       r!S>S! jr"S?S" jr#S2S# jr$S$r%U =r&$ )@rr  in  r�  r¿   r  rN  c                óF   >• [         TU ]  5         U R                  SS 5        g rÀ  )r·  r“  rŽ  r   s    €rˆ   r“  ÚBuffer.__post_init__x  s   ø€ Ü‰ÑÔØ×Ñ ¨tÕ4rŠ   c                ó>   • U R                  5       R                  5       $ rƒ   )r  r  rŸ  s    rˆ   r  ÚBuffer.make_indexer|  s   € Ø�‰Ó ×-Ñ-Ó/Ð/rŠ   c                óJ   • U R                   (       d   U 5       eU R                   $ rƒ   r—  rŸ  s    rˆ   rs  ÚBuffer.get_name  s   € Ø�y�yÐ˜$ÓˆyØ�y‰yÐrŠ   c                óÄ   • [        U R                  [        5      (       a  U R                  R                  5       $ [	        [        U R                  5      R                  5      erƒ   )r„   rN  rí  r  rÚ  r°   r›   rŸ  s    rˆ   r  ÚBuffer.get_exampleƒ  s@   € Ü�d—k‘k¤6×*Ñ*Ø—;‘;×*Ñ*Ó,Ð,Ü!¤$ t§{¡{Ó"3×"<Ñ"<Ó=Ð=rŠ   c                ó>   • U R                  5       R                  5       $ rƒ   )rç  r  rŸ  s    rˆ   r  ÚBuffer.get_deviceˆ  s   € Ø×#Ñ#Ó%×0Ñ0Ó2Ð2rŠ   c                ó   • g rƒ   r™   rŸ  s    rˆ   r¬  ÚBuffer.get_defining_op‹  r®  rŠ   c                ó6   • U R                  5       R                  $ rƒ   )r  r  rŸ  s    rˆ   r  ÚBuffer.dtypeŽ  s   € à�‰Ó ×&Ñ&Ð&rŠ   c                ó:   • / U R                  5       R                  Q$ rƒ   )r  r  rŸ  s    rˆ   r	  ÚBuffer.get_size’  s   € Ø(�—‘Ó"×'Ñ'Ð(Ð(rŠ   c                ó:   • / U R                  5       R                  Q$ rƒ   )r  r  rŸ  s    rˆ   r2  ÚBuffer.get_stride•  s   € Ø*�—‘Ó"×)Ñ)Ð*Ð*rŠ   c                ó6   • U R                  5       R                  $ rƒ   )r  rQ  rŸ  s    rˆ   Ú
get_offsetÚBuffer.get_offset˜  s   € Ø�‰Ó ×'Ñ'Ð'rŠ   c                ó¨   • [        U R                  [        5      (       a  U R                  $ [        [	        U R                  5      R
                  5      erƒ   )r„   rN  rí  rÚ  r°   r›   rŸ  s    rˆ   r  ÚBuffer.get_layout›  s7   € Ü�d—k‘k¤6×*Ñ*Ø—;‘;ÐÜ!¤$ t§{¡{Ó"3×"<Ñ"<Ó=Ð=rŠ   c                ó   • U R                   $ rƒ   rp  rŸ  s    rˆ   rç  ÚBuffer.get_output_spec   r  rŠ   c                ó"   • U R                  5       $ rƒ   )rú  rŸ  s    rˆ   r]  ÚBuffer.get_storage_numel£  s   € Ø�~‰~ÓÐrŠ   c                ó6   • U R                  5       R                  $ rƒ   )r  rR  rŸ  s    rˆ   Úget_is_pinnedÚBuffer.get_is_pinned¦  s   € Ø�‰Ó ×*Ñ*Ð*rŠ   c                óÂ   • [        U R                  [        5      (       a@  [        U R                  [        5      (       d   U R                  R	                  5       U l        g g g rƒ   )r„   rN  rí  r›  rF  rŸ  s    rˆ   r<  ÚBuffer.freeze_layout©  sF   € Ü�d—k‘k¤6×*Ñ*´:Ø�K‰Kœ÷4
ñ 4
ð Ÿ+™+×.Ñ.Ó0ˆD�Kð4
Ð*rŠ   c                ó²   • [        U R                  [        5      (       d   [        U R                  5      5       eU R                  R	                  XS9U l        g ©Nrr  )r„   rN  r  r°   r‚  r?  s      rˆ   rA  Ú&Buffer.freeze_layout_with_stride_order¯  sB   € ô ˜$Ÿ+™+¤~×6Ñ6ÐI¼¸T¿[¹[Ó8IÓIÐ6Ø—k‘k×1Ñ1°%Ð1ÐUˆ�rŠ   c                ó¶   • [        U R                  [        5      (       d   [        U R                  5      5       eU R                  R	                  U5      U l        g rƒ   )r„   rN  r  r°   rˆ  rE  s     rˆ   rF  Ú$Buffer.freeze_layout_with_fill_orderµ  s=   € Ü˜$Ÿ+™+¤~×6Ñ6ÐI¼¸T¿[¹[Ó8IÓIÐ6Ø—k‘k×/Ñ/°Ó6ˆ�rŠ   c                ó¶   • [        U R                  [        5      (       d   [        U R                  5      5       eU R                  R	                  U5      U l        g rƒ   )r„   rN  r  r°   r‹  rI  s     rˆ   rJ  Ú$Buffer.freeze_layout_with_same_order¹  s=   € Ü˜$Ÿ+™+¤~×6Ñ6ÐI¼¸T¿[¹[Ó8IÓIÐ6Ø—k‘k×/Ñ/°Ó7ˆ�rŠ   c                ó²   • [        U R                  [        5      (       d   [        U R                  5      5       eU R                  R	                  XS9U l        g r  )r„   rN  r  r°   r…  rM  s      rˆ   rO  Ú'Buffer.freeze_layout_with_exact_strides½  sG   € ô ˜$Ÿ+™+¤~×6Ñ6ÐI¼¸T¿[¹[Ó8IÓIÐ6Ø—k‘k×2Ñ2Øð 3ð 
ˆ�rŠ   c                óš   • [         R                  R                  R                  [        R
                  " U R                  5       S5      5      $ rý  rþ  rŸ  s    rˆ   r   ÚBuffer.is_zero_elementsÅ  r  rŠ   c                óz   ^ • T R                  5       (       a  [        [        T R                  5       S9$ SU 4S jjnU$ )NrÖ  c                ó„   >• TR                  5       n[        R                  " TR                  =(       d    SU" U 5      5      $ rZ  )r  rl   re  r¿   ©rÊ   r_  rŒ  s     €rˆ   ra  Ú"Buffer.make_loader.<locals>.loaderÍ  s/   ø€ Ø×'Ñ'Ó)ˆGÜ—8’8˜DŸI™I×2¨±G¸E³NÓCÐCrŠ   ri  )r   r   rM  r  rj  s   ` rˆ   r  ÚBuffer.make_loaderÈ  s3   ø€ à× Ñ ×"Ñ"Üœ=°·±Ó0@ÑAÐA÷	Dð ˆrŠ   c                ó"   • U R                  5       $ rƒ   ©rs  r  s     rˆ   r	  ÚBuffer.codegen_referenceÓ  rŸ  rŠ   c                ó   • g rƒ   r™   rŸ  s    rˆ   rë  ÚBuffer.decide_layoutÖ  r5  rŠ   c                óŒ   • [        U R                  [        5      (       a%  U R                  R                  R	                  5       /$ gr¶  )r„   rN  r›  r�  rs  rŸ  s    rˆ   ry  Ú#Buffer.get_inputs_that_alias_outputÙ  s2   € Ü�d—k‘k¤?×3Ñ3Ø—K‘K×$Ñ$×-Ñ-Ó/Ð0Ð0ØrŠ   c                óŒ   • [        U R                  [        5      (       a%  U R                  R                  R	                  5       /$ gr¶  )r„   rN  rÅ  rÝ  rs  rŸ  s    rˆ   rs  ÚBuffer.get_mutation_namesÞ  s3   € Ü�d—k‘kÔ#=×>Ñ>Ø—K‘K×&Ñ&×/Ñ/Ó1Ð2Ð2ØrŠ   c                ó6   • [        U R                  5       /5      $ rƒ   )r:   rs  rŸ  s    rˆ   r   ÚBuffer.get_read_namesã  s   € Ü˜4Ÿ=™=›?Ð+Ó,Ð,rŠ   c                ó   • [        5       $ rƒ   r9   r`  s     rˆ   ra  ÚBuffer.get_free_symbol_usesæ  ó   € ô ‹|ÐrŠ   c                ó   • [        5       $ rƒ   r9   rŸ  s    rˆ   rÛ  ÚBuffer.get_unbacked_symbol_defsì  rÝ  rŠ   c                ó   • g rƒ   r™   rŸ  s    rˆ   r  ÚBuffer.realizeï  r5  rŠ   c                ó   • gr  r™   rŸ  s    rˆ   Úshould_allocateÚBuffer.should_allocateò  s   € àrŠ   rp  r~  r—  r›  )r¶   z!Union[torch.Tensor, torch.SymInt]r‘  r‚  r…  rŠ  )r¶   r¨  r�  r‡  rˆ  r©  r‰  r   r¡  r£  )r  r¢  r¶   r·   )rN  r¢  r@  r•   r¶   r·   r•  rƒ   r�  r­  r  r«  rå  rŽ  )'r›   rœ   r�   rž   rŸ   r“  r  rs  r  r  r¬  r´  r  r	  r2  r÷  r  rç  r]  r   r<  rA  rF  rJ  rO  r   r  r	  rë  ry  rs  r   rY   ra  rÛ  r  r'  r    rª  r«  s   @rˆ   rr  rr  n  s$  ø‡ ð ÓØÓ÷
5ô0ôô>ô
3ôð ó'ó ð'ô)ô+ô(ô>ô
ô ô+ô1ð ;@ðVØ"ðVØ37ðVà	õVô7ô8ð
 CHð
Ø*ð
Ø;?ð
à	õ
ôUô	öôôô
ô
-ñ ˜HÓ%à$)ðØ!ðà	!ôó &ðô
ô÷ò rŠ   rr  c                  óJ   • \ rS rSrSS jrSS jr\R                  rS	S jrSr	g)
ÚOperationBufferi÷  c                ó   • U /$ rƒ   r™   rŸ  s    rˆ   rØ  ÚOperationBuffer.get_outputsú  s	   € ØˆvˆrŠ   c                ó   • U $ rƒ   r™   rŸ  s    rˆ   r¬  ÚOperationBuffer.get_defining_opý  rÁ  rŠ   c                óX   • [         R                  U 5        [        R                  U 5        g rƒ   )rr  r“  r¶  rŸ  s    rˆ   r“  ÚOperationBuffer.__post_init__  s   € Ü×Ñ˜TÔ"Ü×Ñ Õ%rŠ   r™   Nrã  ©r¶   r¶  r~  )
r›   rœ   r�   rž   rØ  r¬  r¶  rv  r“  r    r™   rŠ   rˆ   r*  r*  ÷  s   † ôôð #×5Ñ5Ð÷&rŠ   r*  c                  ó   • \ rS rSrSS jrSrg)r†  i  c                ó   • gr  r™   rŸ  s    rˆ   rZ  ÚInputBuffer.num_reads	  r}  rŠ   r™   Nr©  )r›   rœ   r�   rž   rZ  r    r™   rŠ   rˆ   r†  r†    s   † ÷rŠ   r†  c                  ó   • \ rS rSrSrSrg)ÚDonatedBufferi  aA  
Represents a donated buffer which is a saved tensor that is not alias to any
fwd inputs, fwd user outputs, and bwd outputs. We generally cannot inplace
reuse the input tensor memory during backward since it might be used in another
function. However, donated buffer can be inplace reused during backward
to save memory.
r™   N)r›   rœ   r�   rž   r®  r    r™   rŠ   rˆ   r6  r6    s   † ôrŠ   r6  c                  ó8   • \ rS rSr% SrS\S'   SS jrS	S jrSrg)
ri  i  Nr’  rg  c                ó   ^ • SU 4S jjnU$ )Nc                óæ   >• TR                  5       R                  5       n[        R                  " [        R
                  R                  TR                  5       TR                  5      U" U 5      5      $ rƒ   )	r  r  rl   re  rn   r  Úconstant_namers  rg  r  s     €rˆ   ra  Ú*ConstantBuffer.make_loader.<locals>.loader  sP   ø€ Ø—o‘oÓ'×4Ñ4Ó6ˆGÜ—8’8Ü—‘×%Ñ% d§m¡m£o°t×7KÑ7KÓLÙ˜“óð rŠ   ri  r™   rj  s   ` rˆ   r  ÚConstantBuffer.make_loader  s   ø€ ÷	ð ˆrŠ   c                ó‚   • [        [        R                  R                  U R	                  5       U5      U R
                  S9$ ©N)r¿   rN  )ri  rn   r  r:  rs  rN  r  s     rˆ   rp  Ú!ConstantBuffer.constant_to_device$  s/   € ÜÜ—‘×&Ñ& t§}¡}£¸Ó?ÈÏÉñ
ð 	
rŠ   r™   r•  r¬  )	r›   rœ   r�   rž   rg  rŸ   r  rp  r    r™   rŠ   rˆ   ri  ri    s   ‡ Ø.2€OÐ+Ó2ô÷
rŠ   ri  c                  ól   • \ rS rSrS	S jr\" S 5       S
   SS jj5       rSSS jjrSS jrSS jr	Sr
g)ÚNoneAsConstantBufferi*  c                ó   • [        5       $ rƒ   r9   rŸ  s    rˆ   rž  ÚNoneAsConstantBuffer.get_reads,  rÝ  rŠ   c                ó   • [        5       $ rƒ   r9   r`  s     rˆ   ra  Ú)NoneAsConstantBuffer.get_free_symbol_uses/  r!  rŠ   Nc                óJ   • [         R                  R                  R                  $ rƒ   )rn   r  rw  Únone_strr  s     rˆ   r	  Ú&NoneAsConstantBuffer.codegen_reference5  s   € Ü�w‰w×#Ñ#×,Ñ,Ð,rŠ   c                ó   • [        S S9$ ©Nr  )r·  rŸ  s    rˆ   rç  Ú$NoneAsConstantBuffer.get_output_spec8  s   € Ü Ñ&Ð&rŠ   c                ó   • gr  r™   rŸ  s    rˆ   rî  Ú&NoneAsConstantBuffer.has_tensor_output;  r  rŠ   r™   r¨  r   r«  rƒ   r�  rˆ  r‰  )r›   rœ   r�   rž   rž  rY   ra  r	  rç  rî  r    r™   rŠ   rˆ   rA  rA  *  sC   † ôñ Ð2Ó3à$)ðØ!ðà	!ôó 4ðö
-ô'÷rŠ   rA  c                  ód   • \ rS rSr% S\S'   \" S 5       S	   S
S jj5       rSSS jjrSS jrSr	g)r¯   i?  r    r)  c                ó.   • [        U R                  U5      $ rƒ   )r(   r)  r`  s     rˆ   ra  Ú*ShapeAsConstantBuffer.get_free_symbol_usesC  s   € ô   §	¡	¨=Ó9Ð9rŠ   Nc                óh   • [         R                  R                  R                  U R                  5      $ rƒ   )rn   r  rw  Úcodegen_sizevarr)  r  s     rˆ   r	  Ú'ShapeAsConstantBuffer.codegen_referenceI  s!   € Ü�w‰w×#Ñ#×3Ñ3°D·I±IÓ>Ð>rŠ   c                ó   • gr  r™   rŸ  s    rˆ   rî  Ú'ShapeAsConstantBuffer.has_tensor_outputL  r  rŠ   r™   r   r«  rƒ   r�  r‰  )
r›   rœ   r�   rž   rŸ   rY   ra  r	  rî  r    r™   rŠ   rˆ   r¯   r¯   ?  s<   ‡ à
ƒJáÐ3Ó4à$)ð:Ø!ð:à	!ô:ó 5ð:ö
?÷rŠ   r¯   c                  ó  ^ • \ rS rSr% SrS\S'   SrS\S'   SrS	\S
'   SrS\S'   Sr	S\S'   Sr
S\S'   \R                  S'S j5       r\\R                  S'S j5       5       rS(S jrS)S jrS*S jrS+S jrS,S jr\" S 5       S-   S.S jj5       rS/U 4S jjrS0S jrS1S jrS2S jrS3S jr\  S4S j5       r  S5     S6S jjr\ S7           S8S jj5       rS9S  jr S9S! jr!S(S" jr"S0S# jr#S0S$ jr$S:S% jr%S&r&U =r'$ );r„  iP  zZ
Represents a buffer that is computed during kernel execution rather than being an input.
rç  rM  FzClassVar[bool]Ú_force_realizeNr�  rP  úOptional[Callable[..., Any]]rQ  rŒ  rR  rS  c              #  óÎ  #   • U R                   c   eU R                  c   eU R                  c   eU R                  c   e[	        U R
                  [        5      (       d   [        U R
                  5       5       eU R
                  nU R                  n [        UR                  UR                  U R                  U R                  U R                  UR                  UR                  UR                  S9nX0l        [        UR                  UR                  U R                  5      U l        U R                  R!                  U 5        S v •  Xl        X l        g ! Xl        X l        f = f7f)NrÏ  )rP  rQ  rR  rS  r„   rM  r®  r°   rN  r  r  r™  r°  r±  rP  Úget_default_sizes_bodyÚclear_cache)rŒ  Úold_datarW  Únew_datas       rˆ   Úwith_original_inner_fnÚ%ComputedBuffer.with_original_inner_fn_  s5  é € à×ÑÑ+Ð+Ð+Ø×&Ñ&Ñ2Ð2Ð2Ø×$Ñ$Ñ0Ð0Ð0Ø×.Ñ.Ñ:Ð:Ð:ä˜$Ÿ)™)¤Y×/Ñ/ÐE´D¸¿¹³OÐ3DÓEÐ/Ø—9‘9ˆØ—[‘[ˆ
ð	%Ü Ø—‘Ø—n‘nØ×0Ñ0Ø×,Ñ,Ø!%×!@Ñ!@Ø'×6Ñ6Ø"×,Ñ,Ø'×6Ñ6ñ	ˆHð !ŒIô &Ø—‘Ø—‘Ø×%Ñ%óˆDŒKð
 ×'Ñ'×3Ñ3°DÔ9Ûà ŒIØ$�Køð !ŒIØ$�Küs   ‚BE%ÂB5E ÅE%ÅE"Å"E%c               #  ó‚   #   • [         R                  n  S[         l        S v •  U [         l        g ! U [         l        f = f7f©NT)r„  rW  )Ú	old_values    rˆ   Úforce_realizeÚComputedBuffer.force_realize‚  s2   é € ô #×1Ñ1ˆ	ð	6Ø,0ŒNÔ)Ûà,5ŒNÕ)ø¨IŒNÕ)üs   ‚?”/ £?¯<¼?c                ó˜   • U R                   b  U R                   $ [        U R                  S5      (       a  U R                  R                   $ g)z}
Returns self.name if it exists, otherwise returns the name of the data node if that exists.
If neither exist, returns None.
Nr¿   )r¿   r³  rM  rŸ  s    rˆ   Úget_computed_buffer_nameÚ'ComputedBuffer.get_computed_buffer_nameŒ  s:   € ð
 �9‰9Ñ Ø—9‘9ÐÜ�4—9‘9˜f×%Ñ%Ø—9‘9—>‘>Ð!ØrŠ   c                ó6   • U R                   R                  5       $ rƒ   ©rM  rZ  rŸ  s    rˆ   rZ  ÚComputedBuffer.num_reads—  r¶  rŠ   c                ó6   • U R                   R                  5       $ rƒ   ©rM  rž  rŸ  s    rˆ   rž  ÚComputedBuffer.get_readsš  r¶  rŠ   c                ó6   • U R                   R                  5       $ rƒ   r»  rŸ  s    rˆ   r   ÚComputedBuffer.get_read_names�  r½  rŠ   c                ót  • [        U R                  [        [        [        [
        45      (       d.  [        R                  " [        5       [        5       [        5       S9$ [        R                  " [        SS5         U R                  R                  5       (       aT  [        U R                  5       U R                  R                  5       U R                  R!                  5       5      sS S S 5        $ [        U R                  5       U R                  R#                  5       5      sS S S 5        $ ! , (       d  f       g = f)N©rV  ÚwritesÚindex_exprsr  T)r„   rM  r®  rò  r<  rO  rC   Ú
ReadWritesr:   r   rÂ   r  rd  rL   Úget_store_functionr  rg  r	  rŸ  s    rˆ   rR  ÚComputedBuffer.get_read_writes   sÔ   € Ü˜$Ÿ)™)¤i´´t¼YÐ%G×HÑHÜ×*Ò*Ü “lÜ!“|Ü&›Lñð ô �\Š\œ.Ð*:¸DÕAØ�y‰y×+Ñ+×-Ñ-Ü*Ø×+Ñ+Ó-Ø—I‘I×0Ñ0Ó2Ø—I‘I×0Ñ0Ó2ó÷ BÑAô +Ø×+Ñ+Ó-Ø—I‘I×&Ñ&Ó(ó÷ B×A×Aús   Á:A*D)Ã.1D)Ä)
D7c                óà   • U R                   R                  U5      U R                  R                  U5      -  nU R                  5       (       a!  X R	                  5       R                  U5      -  nU$ rƒ   )rN  ra  rM  Úhas_store_functionrR  )rŒ  ri  r¯  s      rˆ   ra  Ú#ComputedBuffer.get_free_symbol_usesµ  sd   € ð$ —‘×1Ñ1Øó
à�I‰I×*Ñ*¨=Ó9ñ:ˆð ×"Ñ"×$Ñ$Ø×*Ñ*Ó,×AÑAÀ-ÓPÑPˆFØˆrŠ   c                ó  >• U R                  5       (       dg  U R                  [        R                  R                  ;  a?  U R                  5       S:X  a+  U R                  (       d  U R                  R                  5       $ [        TU ]!  5       $ rý  )
rd  r¿   rn   r  Úmutated_buffersrZ  rW  rM  r  r·  r   s    €rˆ   r  ÚComputedBuffer.make_loaderÏ  sc   ø€ à×'Ñ'×)Ñ)Ø—	‘	¤§¡×!8Ñ!8Ó8Ø—‘Ó  AÓ%Ø×'×'ð —9‘9×(Ñ(Ó*Ð*Ü‰wÑ"Ó$Ð$rŠ   c                óV   • [        U R                  [        [        [        [
        45      $ rƒ   )r„   rM  r®  rò  r<  rO  rŸ  s    rˆ   rx  Ú!ComputedBuffer.has_store_functionÚ  s   € Ü˜$Ÿ)™)¤i´´t¼YÐ%GÓHÐHrŠ   c                óÌ  • U R                  5       R                  5       R                  5       n[        U R                  [
        [        [        45      (       a+  [        U R                  R                  U R                  U5      $ [        U R                  [        5      (       d   [        U R                  5      5       e[        U R                  R                  U R                  U5      $ rƒ   )r  rF  r  r„   rM  r®  rò  r<  r   rÂ  r¿   rO  r°   rb  )rŒ  r_  s     rˆ   ru  Ú!ComputedBuffer.get_store_functionÝ  s–   € Ø—/‘/Ó#×,Ñ,Ó.×;Ñ;Ó=ˆÜ�d—i‘i¤)¬T´4Ð!8×9Ñ9Ü˜4Ÿ9™9×4Ñ4°d·i±iÀÓIÐIä˜dŸi™i¬×3Ñ3ÐD´T¸$¿)¹)³_ÓDÐ3Ü˜4Ÿ9™9×1Ñ1°4·9±9¸gÓFÐFrŠ   c                ó”  • [        U R                  [        5      (       Ga˜  [        R                  " U R
                  R                  5       U R
                  R                  5       5      u  u  pnU R                  5       R                  n[        S U 5       5      (       d   eU VVs/ s Hk  n[        U[        R                  5      (       d  M$  [        UR                  U Vs0 s H%  ofS:w  d  M
  U[        R                  R                   _M'     sn5      PMm     nnnU(       a˜  [        U R
                  ["        [$        45      (       a  U R
                  R'                  X5      nOUnU Vs/ s H,  n[(        R*                  R,                  R/                  X‡5      PM.     n	nSSKJn
  U
" X�R5                  5       5      $ gs  snf s  snnf s  snf )aD  
If our layout is still flexible, try to determine the stride order based on stride orders of reads.

TODO(jansel): A better algorithm here would look at downstream consumers of this
              value and try to do global graph-level layout optimization.
              This is also something just begging to be autotuned.
c              3  óv   #   • U  H/  n[        U[        R                  [        R                  45      v •  M1     g 7frƒ   )r„   rC   ÚStarDepÚ	MemoryDeprƒ  s     rˆ   rè   Ú0ComputedBuffer.get_fill_order.<locals>.<genexpr>ô  s2   é € ð â�Aô ˜1œ|×3Ñ3´\×5KÑ5KÐL×MÐMÚùs   ‚79r   rA   ©Úpick_loop_orderN)r„   rN  r  rC   r   rM  r  rg  rR  rV  rë   r„  rj   rÊ   rª   r  r  rò  r<  rÍ   rn   r  r  r  Ú	schedulerr‡  r	  )rŒ  Ú
index_varsrÃ  rø   rV  r  Úvrî  r)  Ústride_lengthsr‡  s              rˆ   rï   ÚComputedBuffer.get_fill_orderå  sx  € ô �d—k‘k¤>×2Ò2Ü.:×.MÒ.MØ—	‘	×,Ñ,Ó.°·	±	×0LÑ0LÓ0Nó/Ñ+Ñ(ˆZ¨!ð ×(Ñ(Ó*×0Ñ0ˆEô ñ áó÷ ñ ð ð ñ ôâ�AÜ˜a¤×!7Ñ!7×8ó Y”
˜1Ÿ7™7¹nÓ$Wºn¸ÐUVÑPV£_ Q¬¯©¯©¢_¹nÑ$WÖXÙð ñ ö Ü˜dŸi™i¬$´¨×6Ñ6Ø"Ÿi™i×/Ñ/°
ÓK‘Gà(�GáMRó"ÚMRÀT”A—G‘G×$Ñ$×1Ñ1°$Ö@ÉUð ð "õ 7á& ~·}±}³ÓGÐGàùò# %Xùóùò"s*   Â%#F?ÃF?Ã 	F:Ã-F:ÄF?Å(3GÆ:F?c                ó¶   • [        U R                  [        5      (       a:  U R                  5       nU(       a  U R	                  U5        g U R                  5         g g rƒ   )r„   rN  r  rï   rF  r<  rE  s     rˆ   rë  ÚComputedBuffer.decide_layout  sC   € Ü�d—k‘k¤>×2Ñ2Ø×'Ñ'Ó)ˆEÞØ×2Ñ2°5Õ9à×"Ñ"Õ$ð 3rŠ   c                óp  • [         R                  " U R                  5       U R                  5       SS9u  p[        R
                  " [        SU R                  5       5         [        U R                  5       U R                  5       (       a  UOUS S U/UQ76 nS S S 5        / n/ n/ n/ nUR                  5        Hf  u  p‰X�S   ;   a-  U(       a   eUR                  U5        UR                  U	5        M:  X�S   ;   d   eUR                  U5        UR                  U	5        Mh     Xg4WXE44$ ! , (       d  f       N—= f)NÚqr}   rg  rA   r   )rC   r   r  rg  r   rÂ   ri  r  rN   ru  rd  ÚitemsrÅ  )
rŒ  r½   Ú
var_rangesrq  r‰  Úreduce_varsÚ
index_sizeÚreduce_sizerŠ  rç   s
             rˆ   rZ  Ú%ComputedBuffer.get_default_sizes_body  s-  € ô (×:Ò:Ø×#Ñ#Ó% t×'>Ñ'>Ó'@Èñ
Ñˆô �\Š\œ.Ð*;¸T¿_¹_Ó=NÕOÜØ×'Ñ'Ó)Ø×0Ñ0×2Ñ2‘¸¸R¸a¸Øðð ò	ˆD÷ Pð ˆ
Ø!#ˆØˆ
ØˆØ×$Ñ$Ö&‰DˆAØ˜‘G‹|Þ&Ð&�Ø×!Ñ! !Ô$Ø×!Ñ! !Ö$à ™G“|Ð#�|Ø×"Ñ" 1Ô%Ø×"Ñ" 1Ö%ñ 'ð Ð(¨$°Ð0IÐIÐI÷) PÕOús   Á7D'Ä'
D5c                óX  ^ ^^• T R                  5       u  u  p4nu  pgU(       a  U" X44XVU45      u  u  p4nu  pg/ UR                  R                  5       QmUbÅ  [        U[        5      (       a  [        U5      S:X  d   eUu  p‰[        U[        5      (       d   [        U5      5       e[        U	[        5      (       d   [        U	5      5       e[        S U	 5       5      (       d   eUR                  n
X¨:X  d	   U
U45       eU	 Vs/ s H  o»T;  d  M
  UPM     n	nTU	-  m/ UR                  5       Qm[        R                  R                  T [        R                   5      (       d  TR#                  UR%                  5       5                  SUUU 4S jjnXg-   n['        [)        T 5      5      (       + =(       d    [*        R,                  (       + nU" UUUU5      u  nnnU" X}XN5      u  nnn[.        R0                  " UUSS9u  u  nnn[3        UU" U5      U" U5      /UUU5      nUU4U4$ s  snf )aþ  
This is a main place where we do loop transformations in a
backend-agnostic way.

Here we:
    1) Remove any 1 dimensions
    2) Fuse contiguous dimensions together
    3) Reorder dimensions based on stride orders

Optional argument extra_indexing_constraints can be used to append additional
indexing expressions to existing ones derived from buffer's body. This can be useful
to fuse scheduler nodes with compatible ranges, e.g. (s0*s1*...,) and (s0, s1, s2, ...)
on CPU by preventing indexing simplifications and obtaining index/reduce ranges for
the scheduler node compatible with other nodes.
Optional argument recompute_sizes_body_func can be used to recompute sizes and body
on the default body. This can be useful to append additional loop transformations.
rà   c              3  óB   #   • U  H  n[        U[        5      v •  M     g 7frƒ   )r„   r    )ræ   Úfs     rˆ   rè   Ú6ComputedBuffer.simplify_and_reorder.<locals>.<genexpr>c  s   é € ÐHÒ4G¨q”z !¤T×*Ð*Ò4Gùrö  c           	     óÞ  >• TR                  XUT5      u  pEnTR                  5       S:X  ae  [        U5      S:X  aV  [        [	        [        U5      5      5      nU" U5      S   S:w  a*  U Vs/ s H  o‚U   PM	     nn[        U5      n[        U5      nU" U 5      n U(       aD  [        R                  R                  R                  U U[        TX5      5      u  pIn
[        Xi5      nOUnXKU4$ s  snf )Nr  rß   r   )Ú_apply_loop_reorderingrd  rÈ   r£   rÉ   rØ   rÔ   rn   r  r  Ú_simplify_loopsrG   rÞ   )Úx_varsÚsupport_varsr`  Úsimplify_loopsÚnewsizesÚreindex0rÛ   rÓ   rË   rÜ   Ú_prunerÍ   Úindex_formulasÚmemory_addrsrŒ  s               €€€rˆ   Úsimplify_and_reorderÚAComputedBuffer.simplify_and_reorder.<locals>.simplify_and_reordert  sí   ø€ ð ,0×+FÑ+FØ e¨\ó,Ñ(ˆH ð* ×&Ñ&Ó(¨EÓ1´c¸%³jÀA³oÜœU¤3 u£:Ó.Ó/�ñ ˜E“? 1Ñ%¨Ó*Ù27Ó8²%¨Q a¤±%�HÐ8Ü+¨EÓ2�HÜ.¨uÓ5�Hñ ˜fÓ%ˆFæÜ-.¯W©W×-=Ñ-=×-MÑ-MØØÜ,¨^¸VÓNó.Ñ*� Fô
 *¨(Ó=‘à"�Ø hÐ.Ð.ùò!  9s   Á+C*Úpr}   )
rž  úSequence[sympy.Symbol]rŸ  r©  r`  r¢  r   r•   r¶   údtuple[list[int], Callable[[Sequence[int]], Sequence[int]], Callable[[Sequence[int]], Sequence[int]]])rZ  Úindexing_exprsr¦   r„   r¤   rÈ   r¥   r°   r£   rë   r’  Úget_write_exprsrn   r  r÷  rD   ÚPREFER_STORE_LOOP_ORDERÚextendÚget_read_exprsre   r  rB   Úloop_ordering_after_fusionrC   Úindex_vars_no_squeezerN   )rŒ  Úextra_indexing_constraintsÚrecompute_sizes_body_funcr”  r•  rq  r‰  r“  Úextra_indexing_rangesÚextra_indexing_exprÚexpected_var_rangesrî  r¦  rŸ  Úshould_merge_loopsÚiter_rangesÚiter_reindexrø   Úreduce_rangesÚreduce_reindexÚ	iter_varsr’  r¤  r¥  s   `                     @@rˆ   r¦  Ú#ComputedBuffer.simplify_and_reorder5  s   ú€ ð4 ×'Ñ'Ó)ñ		
Ù%ˆZØÙ%ˆZö %ñ
 *ØÐ)¨4¸kÐ1Jóñ	Ù)�ØÙ)�ð
 9˜4×.Ñ.×5Ñ5Ó7Ð8ˆØ%Ñ1äÐ5´u×=Ñ=ÜÐ2Ó3°qÓ8ðð9ð :TÑ6Ð!ÜÐ3´T×:Ñ:ÐW¼DÐAVÓ<WÓWÐ:ÜÐ1´4×8Ñ8ÐS¼$Ð?RÓ:SÓSÐ8ÜÑHÑ4GÓH×HÑHÐHÐHà"&§/¡/ÐØ&Ó?ð Ø#Ø%ðBó Ð?ñ /ó#Ú.�a¸>Ñ2I—Ñ.ð  ð #ð Ð1Ñ1ˆNà0˜×-Ñ-Ó/Ð0ˆÜ�w‰w×"Ñ" 4¬×)OÑ)O×PÑPØ×Ñ × 3Ñ 3Ó 5Ô6ð4	/Ø*ð4	/à0ð4	/ð !ð4	/ð !ð	4	/ð

÷4	/ñ 4	/ðl "Ñ/ˆä” tÓ,Ó-Ô-×V´V×5VÑ5VÔ1Vð 	ñ (<ØØØØó	(
Ñ$ˆ�\ 1ñ ,@Ø {ó,
Ñ(ˆ�~ qô
 0<×/QÒ/QØØØñ0
Ñ,Ñ ˆ�K *ô
 ØÙ˜)Ó$¡n°[Ó&AÐBØØØó
ˆð ˜]Ð+¨TÐ1Ð1ùò#s   Ä	H'ÄH'c           
     ón  • SSK Jn  Uc  / n U Vs/ s H-  n[        R                  R                  R                  X`U5      PM/     nn[        U5      [        U5      :X  a  [        US   5      [        U 5      :X  d   e[        [        U" XrU5      5      5      nU V	s/ s H  o’U	   PM	     nn	U[#        U5      [%        U5      4$ s  snf ! [         a^    [        R                  (       a)  [        R                  S[        [        X5      5      U5        [        [!        [        U5      5      5      n N—f = fs  sn	f )zE
Shuffle the order of loops around to hopefully improve performance.
rA   r†  r   z%Did not simplify complex index:
%s
%s)rˆ  r‡  rn   r  r  r  rÈ   r£   rÓ  Ú	ExceptionrB   r¶  rÿ  Úwarningr¥   rÒ   rÉ   rØ   rÔ   )
r‰  rŸ  r`  r¥  Úpriority_idxr‡  r)  rU  rÓ   rË   s
             rˆ   rœ  Ú%ComputedBuffer._apply_loop_reorderingÌ  s#  € õ 	/àÑØˆLð	,ñ )óâ(�Dô —‘× Ñ ×-Ñ-¨dÀÖMÙ(ð ð ô �w“<¤3 |Ó#4Ó4¼¸WÀQ¹Z»ÌCØóMó :ð ð ô œ¡/°'À,Ó"OÓPÓQˆEñ $)Ó)¢5˜a�q”¡5ˆÐ)Ø”l 5Ó)¬?¸5Ó+AÐAÐAùò#øô ó 	,Ü�|�|Ü—‘Ø=Üœ˜ZÓ/Ó0Ø ôô
 œœs 5›zÓ*Ó+ŠEð	,üò *s*   �C ‘4CÁAC ÂD2ÃC ÃA%D/Ä.D/c                ó6   • U R                   R                  5       $ rƒ   )rM  r  rŸ  s    rˆ   r  Ú!ComputedBuffer.get_pointwise_sizeô  ó   € Ø�y‰y×+Ñ+Ó-Ð-rŠ   c                ó6   • U R                   R                  5       $ rƒ   ©rM  rg  rŸ  s    rˆ   rg  Ú!ComputedBuffer.get_reduction_size÷  rÅ  rŠ   c                ó6   • U R                   R                  5       $ rƒ   ©rM  rd  rŸ  s    rˆ   rd  Ú!ComputedBuffer.get_reduction_typeú  rÅ  rŠ   c                ó6   • U R                   R                  5       $ rƒ   )rM  r   rŸ  s    rˆ   rm  ÚComputedBuffer.is_no_opý  s   € Ø�y‰y×)Ñ)Ó+Ð+rŠ   c                ó   • gra  r™   rŸ  s    rˆ   r'  ÚComputedBuffer.should_allocate   r®  rŠ   c                ó8   • U R                   R                  U5      $ )rf  ©rM  rp  r  s     rˆ   rp  Ú!ComputedBuffer.constant_to_device  s   € à�y‰y×+Ñ+¨FÓ3Ð3rŠ   rL  )r¶   úIterator[None]rŽ  r©  r¨  r  r¦  r   r«  r•  r‰  )r¶   zCallable[..., None])r¶   úOptional[list[int]]r~  )r¶   zMtuple[tuple[list[Expr], list[Expr]], LoopBody, tuple[list[Expr], list[Expr]]]©NN)r²  ú*Optional[tuple[dict[Any, Any], list[Any]]]r³  rX  r¶   z8tuple[tuple[list[Expr], list[Expr]], Optional[LoopBody]]rƒ   )r‰  r©  rŸ  r©  r`  r¢  r¥  zlist[sympy.Expr]rÁ  rÔ  r¶   rª  rŠ  r¬  )(r›   rœ   r�   rž   r®  rŸ   rW  rP  rQ  rR  rS  r²  r³  r^  r±  rc  rf  rZ  rž  r   rR  rY   ra  r  rx  ru  rï   rë  rX   rZ  r¦  rœ  r  rg  rd  rm  r'  rp  r    rª  r«  s   @rˆ   r„  r„  P  s·  ø‡ ñð ƒKØ%*€N�NÓ*ð "&€K�Ó%Ø7;ÐÐ4Ó;Ø59ÐÐ2Ó9Ø?CÐÐ <ÓCà×Ñó %ó ð %ðD Ø×Ñó6ó ó ð6ô	ô%ô%ô*ôñ* Ð,Ó-à$)ðØ!ðà	!ôó .ð÷2	%ôIôGô%ôN%ð ðJð
óJó ðJðD RVØBFðU2à$NðU2ð $@ðU2ð 
Bõ	U2ðn ð -1ð%BØ*ð%Bà,ð%Bð ð%Bð 'ð	%Bð
 *ð%Bð
ô%Bó ð%BôN.ô.ô.ô,ô÷4ò 4rŠ   r„  c                  ó’   ^ • \ rS rSrSr        SU 4S jjrSS jrSSS jjrSS jrSS jr	SS jr
  S     SS	 jjrS
rU =r$ )r‡  i  zh
Represents a Triton (in the future other type) of template operator
that we can fuse an epilogue onto.
c                óö   >• [         TU ]  S US9  [        R                  U5      U l        X0l        [        R                  R                  U 5      U l	        [        R                  R                  U 5        0 U l        g r>  )r·  rÀ  r…  Úunwrap_storagerj  Úmake_kernel_renderrn   r  Úregister_bufferr¿   Úregister_operationr   )rŒ  rN  rj  rÚ  r¹  s       €rˆ   rÀ  ÚTemplateBuffer.__init__  s_   ø€ ô 	‰Ñ˜d¨6ÐÑ2Ü"×1Ñ1°&Ó9ˆŒØ"4ÔÜ—G‘G×+Ñ+¨DÓ1ˆŒ	Ü	�‰×"Ñ" 4Ô(à+-ˆÕrŠ   c                ó    • U R                  SS9$ )NT©Ú	normalize)rL   rŸ  s    rˆ   rR  ÚTemplateBuffer.get_read_writes  s   € Ø×'Ñ'°$Ð'Ð7Ð7rŠ   c           
     óz  ^^^• U R                  5       mU R                  5       R                  5       mSUU4S jjn[        R                  " X R                  5       SUS9nU R                   HÌ  m[        T[        [        45      (       d   [        T5      5       e[        TR                  [        5      (       d   [        TR                  5      5       eTR                  R                  5       mSUU4S jjnU=R                  [        R                  " UTR                  5       SUS9R                  -  sl        MÎ     U$ )Nc                ób   >• [        U5      S:X  d   e[        R                  " TT" U 5      S5      $ )Nr   Úfake)rÈ   rl   r\  )rÊ   rÊ  r_  r¿   s     €€rˆ   ÚdummyÚ1TemplateBuffer.extract_read_writes.<locals>.dummy#  s,   ø€ Ü�v“; !Ó#Ð#Ð#Ü—9’9˜T¡7¨5£>°6Ó:Ð:rŠ   r™   rß  c                ó|   >• [        U5      S:X  d   e[        R                  " TR                  5       T" U 5      5      $ rý  )rÈ   rl   re  rs  )rÊ   rÊ  r_  rl  s     €€rˆ   rå  ræ  1  s0   ø€ Ü˜6“{ aÓ'Ð'Ð'ä—x’x §¡£±¸³Ó?Ð?rŠ   )rÊ   úSequence[Any]rÊ  rè  r¶   r   )rs  r  r  rC   rL   r	  rj  r„   rS  rr  r°   rN  rí  rV  )rŒ  rà  rå  Údepsr_  rl  r¿   s       @@@rˆ   rL   Ú"TemplateBuffer.extract_read_writes  sø   ú€ Ø�}‰}‹ˆØ—/‘/Ó#×0Ñ0Ó2ˆ÷	;ð 	;ô ×/Ò/Ø—=‘=“? B°)ñ
ˆð —;”;ˆCÜ˜c¤O´VÐ#<×=Ñ=ÐH¼tÀC»yÓHÐ=Ü˜cŸj™j¬&×1Ñ1ÐC´4¸¿
¹
Ó3CÓCÐ1à—j‘j×-Ñ-Ó/ˆG÷@ð @ð
 �JŠJœ,×:Ò:Ø�s—|‘|“~ r°Yñç‰eñ�Jñ ð ˆrŠ   c                ó6   • [         R                  R                  $ rƒ   )rª   r  r1  rŸ  s    rˆ   rg  Ú!TemplateBuffer.get_reduction_size<  s   € Ü�w‰w�{‰{ÐrŠ   c                ó   • g rƒ   r™   rŸ  s    rˆ   rd  Ú!TemplateBuffer.get_reduction_type?  r®  rŠ   c                ó   • gra  r™   rŸ  s    rˆ   r'  ÚTemplateBuffer.should_allocateB  r®  rŠ   c                ó*   • U R                  5       / 4S 4$ rƒ   r÷  )rŒ  r²  r³  s      rˆ   r¦  Ú#TemplateBuffer.simplify_and_reorderE  s$   € ð —‘“Øðð ð
ð 	
rŠ   )r   rj  rÚ  r¿   )rN  r  rj  úSequence[IRNode]rÚ  rX  r¶   r·   r¦  r   )rà  r•   r¶   r§  rŠ  rŽ  r‰  rÕ  )r²  rÖ  r³  rX  r¶   z<tuple[tuple[Sequence[Expr], list[Expr]], Optional[LoopBody]])r›   rœ   r�   rž   r®  rÀ  rR  rL   rg  rd  r'  r¦  r    rª  r«  s   @rˆ   r‡  r‡    s~   ø† ñð
.àð.ð !ð.ð 9ð	.ð
 
÷.ô8öô:ôôð
 RVØBFð
à$Nð
ð $@ð
ð 
F÷	
ó 
rŠ   r‡  c                  óš   ^ • \ rS rSr  S           S	U 4S jjjr\" S 5       S
   SU 4S jjj5       rSS jrSS jrSS jr	Sr
U =r$ )ÚTritonTemplateBufferiS  c                óÄ  >• [         TU ]  XU5        X@l        U /U l        Ub“  [	        U R
                  S   [        5      (       d   [        U R
                  S   5      5       eU R
                  S   R                  5       nU =R                  U Vs/ s H  n[        [        US9Xp5      PM     sn-  sl        U(       a  UO	[        5       U l        SU l        SU l        gs  snf )a·  
NOTE:[TritonTemplates with multiple outputs]
We want the ability for TritonTemplates to output multiple tensors. Triton
kernels have no notion of outputs and this is done by creating tensors that
are then mutated by the kernel. Currently our STORE_OUTPUT codegen doesn't
support creating multinode outputs for triton templates.
We work around this by creating an extra input buffer during the lowering
and we mark them as mutated inputs.
Nr   r  )r·  rÀ  Úmutated_inputsÚoutputsr„   rj  r€   r°   r  ÚMutationOutputr·  r:   Úallowed_prologue_inpsÚsubgraph_inpsÚsubgraph_outs)	rŒ  rN  rj  rÚ  r÷  rú  r  rð  r¹  s	           €rˆ   rÀ  ÚTritonTemplateBuffer.__init__T  sÏ   ø€ ô" 	‰Ñ˜Ð);Ô<Ø,ÔØ&* VˆŒØÑ%Ü˜dŸk™k¨!™n¬f×5Ñ5ÐK´t¸D¿K¹KÈ¹NÓ7KÓKÐ5Ø—[‘[ ‘^×.Ñ.Ó0ˆFØ�LŠLá)óâ)�Cô œz°Ñ8¸#ÖDÙ)ññ �Lö &;Ñ!Ä
Ãð 	Ô"ð SWˆÔØ?CˆÕùòs   ÂCc                ó,  >• [         TU ]  U5      nU R                  (       a  U R                  O/ nU R                  (       a  U R                  O/ nU Hz  n[	        U[
        R                  5      (       a  UR                  [        XQ5      5        M>  [	        U[        5      (       a"  UR                  UR                  U5      5        Mu  Uc  Mz   e   U H?  n[	        U[        5      (       a"  UR                  UR                  U5      5        M:  Uc  M?   e   U$ rƒ   )
r·  ra  rü  rû  r„   rª   r    Úupdater(   r€   )rŒ  ri  Úresrü  rû  rl  rù   r¹  s          €rˆ   ra  Ú)TritonTemplateBuffer.get_free_symbol_usesw  sÚ   ø€ ô ‰gÑ*¨=Ó9ˆØ.2×.@×.@˜×*Ò*ÀbˆØ.2×.@×.@˜×*Ò*Àbˆã ˆCÜ˜#œuŸz™z×*Ñ*Ø—
‘
Ô+¨CÓ?Ö@Ü˜C¤×(Ñ(Ø—
‘
˜3×3Ñ3°MÓBÖCà“{Ð"�{ñ !ó !ˆCÜ˜#œv×&Ñ&Ø—
‘
˜3×3Ñ3°MÓBÖCà“{Ð"�{ñ	 !ð ˆ
rŠ   c                ó   • U R                   $ rƒ   ©rø  rŸ  s    rˆ   rØ  Ú TritonTemplateBuffer.get_outputs�  ó   € Ø�|‰|ÐrŠ   c                ó   • U R                   $ rƒ   )rú  rŸ  s    rˆ   Úget_allowed_prologue_inpsÚ.TritonTemplateBuffer.get_allowed_prologue_inps’  s   € Ø×)Ñ)Ð)rŠ   c                ó&   • SU R                    S3nU$ )NzTritonTemplateBuffer(layout=r  rp  )rŒ  rù   s     rˆ   r   ÚTritonTemplateBuffer.__str__•  s   € Ø,¨T¯[©[¨M¸Ð;ˆØˆ
rŠ   )rú  r÷  rø  rû  rü  rÕ  )rN  rí  rj  ró  rÚ  zOptional[Callable[_P, _T]]r÷  úOptional[Iterable[IRNode]]rú  zOptional[OrderedSet[str]]r¶   r·   r   r«  rã  r  r›  )r›   rœ   r�   rž   rÀ  rY   ra  rØ  r	  r   r    rª  r«  s   @rˆ   rõ  rõ  S  s™   ø† ð 6:Ø;?ð!Dàð!Dð !ð!Dð 7ð	!Dð
 3ð!Dð  9ð!Dð 
÷!Dð !DñF Ð2Ó3à$)ðØ!ðà	!÷ó 4ðô.ô*÷ò rŠ   rõ  c                  óž   ^ • \ rS rSrSr          SU 4S jjrSS jrSS jrSS jrSS jr	SS jr
SS	 jrSS
 jrSS jrSS jrSrU =r$ )ÚChoiceCalleri�  a  
Represents a possible choice used in autotune_process.py.
During autotuning, self.benchmark() is first called to get benchmark result,
and if this choice is selected, self.output_node() is called to get the output_node.

Children classes: TritonTemplateCaller, CUTLASSTemplateCaller.
c                ón   >• [         TU ]  5         Xl        X0l        X l        X@l        SU l        0 U l        g r  )r·  rÀ  r¿   rN  r‘   ÚdescriptionÚfailedr   )rŒ  r¿   r‘   rN  r	  r¹  s        €rˆ   rÀ  ÚChoiceCaller.__init__¦  s9   ø€ ô 	‰ÑÔØŒ	ØŒØ&Ôð 'ÔØ!ˆŒð ,.ˆÕrŠ   c               ó¢   ^^• U R                  5       m[        R                  (       a  [        UU4S j5      $ [        R
                  " TTSU0S S9$ )Nc                 ó   >• T " T6 $ rƒ   r™   )Úalgor½   s   €€rˆ   rß  Ú(ChoiceCaller.benchmark.<locals>.<lambda>½  s	   ø€ ±D¸$±KrŠ   rù   r  )Úto_callablerB   Ú/profile_bandwidth_with_do_bench_using_profilingr^   rS   Ú	benchmark)rŒ  rù   r½   r	  s     `@rˆ   r	  ÚChoiceCaller.benchmarkº  sA   ù€ Ø×ÑÓ!ˆÜ×A×AÜ+Õ,?Ó@Ð@Ü×$Ò$ T¨4°%¸°ÀdÑKÐKrŠ   c                ó   • [         erƒ   r¼  rŸ  s    rˆ   Ú	call_nameÚChoiceCaller.call_nameÀ  r¾  rŠ   c                ó   • [         erƒ   r¼  rŸ  s    rˆ   r	  ÚChoiceCaller.to_callableÃ  r¾  rŠ   c                ó"   • U R                  5       $ )z‘
Hash key for the underlying kernel. By default, we assume there are no
runtime params, so kernel hash key defaults to choice caller's hash key.
)Úhash_keyrŸ  s    rˆ   Úkernel_hash_keyÚChoiceCaller.kernel_hash_keyÆ  s   € ð
 �}‰}‹ÐrŠ   c                ó   • [         erƒ   r¼  rŸ  s    rˆ   r 	  ÚChoiceCaller.hash_keyÍ  r¾  rŠ   c                ó   • [         erƒ   r¼  rŸ  s    rˆ   re  ÚChoiceCaller.output_nodeÐ  r¾  rŠ   c                ó   • 0 $ )zRInformation returned here is logged to the autotune log file when that is enabled.r™   rŸ  s    rˆ   Ú	info_dictÚChoiceCaller.info_dictÓ  s   € àˆ	rŠ   c                ó   • g)NÚunsupported_choicer™   rŸ  s    rˆ   Úautoheuristic_idÚChoiceCaller.autoheuristic_id×  s   € Ø#rŠ   c                ó   • SU l         g)zp
Mark the choice as failed so that it can be
removed later. Useful for when we decouple
compilation and tuning.
TN)r	  rŸ  s    rˆ   Úmark_failedÚChoiceCaller.mark_failedÚ  s   € ð ˆ�rŠ   )r   r	  r	  r‘   rN  r¿   )
r¿   rÃ   r‘   rä  rN  rí  r	  rÃ   r¶   r·   )r½   r   rù   rT  r¶   rL  r›  )r¶   rè  )r¶   r   )r¶   z<dict[str, Union[PrimitiveInfoType, list[PrimitiveInfoType]]]r~  )r›   rœ   r�   rž   r®  rÀ  r	  r	  r	  r!	  r 	  re  r(	  r,	  r/	  r    rª  r«  s   @rˆ   r	  r	  �  sp   ø† ñð.àð.ð "ð.ð ð	.ð
 ð.ð 
÷.ô(Lô"ô"ôô"ô"ôô$÷ò rŠ   r	  c                  ó   • \ rS rSrSS jrSrg)ÚTritonTemplateCallerBaseiã  c                ó   • [         erƒ   r¼  rŸ  s    rˆ   Úget_make_kernel_renderÚ/TritonTemplateCallerBase.get_make_kernel_renderä  r¾  rŠ   r™   N)r¶   r   )r›   rœ   r�   rž   r4	  r    r™   rŠ   rˆ   r2	  r2	  ã  s   † ÷"rŠ   r2	  c                  óà   ^ • \ rS rSrSr            SU 4S jjr\SS j5       r\SS j5       r S   SS jjr	\
R                  SS j5       rSS jr S   SS	 jjr    SS
 jrSrU =r$ )ÚMultiTemplateBufferiè  a3  
Represents a Buffer with multiple backing implementation choices.

Choices can be TritonTemplates or ExternKernels. During scheduling if there is a potential
epilogue we will benchmark each of the choices with the epilogue to determine an implementation.
Otherwise, the fastest base choice will be chosen.
c                ó”   >• [         TU ]  UUS US9  X0l        0 U l        X@l        X l        [        S U 5       5      U l        0 U l        g )N)rN  rj  rÚ  rú  c              3  óÒ   #   • U  H]  n[        U[        5      =(       dA    [        U[        R                  R                  R
                  5      =(       a    UR                  v •  M_     g 7frƒ   )r„   r2	  r  rµ  Úselect_algorithmÚExternKernelCallerÚhas_out_variant)ræ   Úchoices     rˆ   rè   Ú/MultiTemplateBuffer.__init__.<locals>.<genexpr>  sU   é € ð %
ò -�ô �vÔ7Ó8÷ ä˜6¤5§?¡?×#CÑ#C×#VÑ#VÓW÷ +Ø×*Ñ*ôò
 -ùs   ‚A%A')	r·  rÀ  Ú_choice_timings_fnÚ_choice_timingsÚ_choicesÚoriginal_inputsrë   Ú_output_plannableÚ_make_kernel_renders)rŒ  rN  rj  Úchoice_timings_fnÚunfiltered_choicesrú  r¹  s         €rˆ   rÀ  ÚMultiTemplateBuffer.__init__ñ  se   ø€ ô 	‰ÑØØØ#Ø"7ð	 	ñ 	
ð #4ÔØOQˆÔØ,>ŒØ%ÔÜ!$ñ %
ñ -ó%
ó "
ˆÔð ?AˆÕ!rŠ   c                ó   • U R                   $ )zN
Are all possible choices TritonTemplates or Extern Kernels with out variants
)rC	  rŸ  s    rˆ   Úoutput_plannableÚ$MultiTemplateBuffer.output_plannable  s   € ð
 ×%Ñ%Ð%rŠ   c                ó   • U R                   $ rƒ   )rA	  rŸ  s    rˆ   rü  ÚMultiTemplateBuffer.choices  s   € à�}‰}ÐrŠ   c                óz   • XR                   ;  a  U R                  U5      U R                   U'   U R                   U   $ rƒ   )r@	  r?	  )rŒ  Úhint_overrides     rˆ   Úchoice_timingsÚ"MultiTemplateBuffer.choice_timings  s<   € ð × 4Ñ 4Ó4Ø26×2IÑ2IÈ-Ó2XˆD× Ñ  Ñ/Ø×#Ñ# MÑ2Ð2rŠ   c              #  ó8  #   • [        U[        R                  R                  R                  5      (       d   [        U5      5       eU R                  UR                  :X  d   eU R                  nUR                  5       U l         S v •  X l        g ! X l        f = f7frƒ   )	r„   r  rµ  r:	  ÚTritonTemplateCallerr°   rN  rÚ  r4	  )rŒ  ÚcallerÚrenders      rˆ   Úswap_as_triton_callerÚ)MultiTemplateBuffer.swap_as_triton_caller  s…   é € äØ”E—O‘O×4Ñ4×IÑI÷
ñ 
ð 	ä�‹<ó	ð 
ð �{‰{˜fŸm™mÓ+Ð+Ð+à×(Ñ(ˆØ"(×"?Ñ"?Ó"AˆÔð	-Ûà&,Õ#ø fÕ#üs   ‚BBÂB ÂBÂBÂBc                ó\  • [        U[        R                  R                  R                  5      (       d   [        U5      5       eU R                  5       UR                  R                  :X  d   eU R                  5       UR                  R                  :X  d   eUR                  5       U l        g rƒ   )r„   r  rµ  r:	  rR	  r°   r	  rN  r  r2  r  r4	  rÚ  )rŒ  rS	  s     rˆ   Úfinalize_as_triton_callerÚ-MultiTemplateBuffer.finalize_as_triton_caller-  sŠ   € ÜØ”E—O‘O×4Ñ4×IÑI÷
ñ 
ð 	ä�‹<ó	ð 
ð �}‰}‹ &§-¡-×"4Ñ"4Ó4Ð4Ð4Ø�‰Ó  F§M¡M×$8Ñ$8Ó8Ð8Ð8Ø"(×"?Ñ"?Ó"AˆÕrŠ   c                óR   • U R                  US9n[        X"R                  S9nX2U   4$ )N)rN	  rá  )rO	  r|  r¸  )rŒ  rN	  ÚtimingsÚ
min_choices       rˆ   Úget_min_choiceÚ"MultiTemplateBuffer.get_min_choice5  s3   € ð ×%Ñ%°MÐ%ÐBˆÜ˜§k¡kÑ2ˆ
Ø JÑ/Ð0Ð0rŠ   c                ó˜   • UR                  5        H"  u  p#UR                  5       U R                  U'   M$     U R                  S   U l        g)z;Finalize with multiple callers for different hint overridesN)r‘  r4	  rD	  rÚ  )rŒ  ÚcallersrN	  rS	  s       rˆ   Úfinalize_as_triton_callersÚ.MultiTemplateBuffer.finalize_as_triton_callers<  sE   € ð &-§]¡]¦_Ñ!ˆMØ7=×7TÑ7TÓ7VˆD×%Ñ% mÓ4ñ &5ð #'×";Ñ";¸DÑ"AˆÕrŠ   )r@	  r?	  rA	  rD	  rC	  rÚ  rB	  )rN  rí  rj  ró  rE	  z4Callable[[Optional[int]], dict[ChoiceCaller, float]]rF	  úlist[ChoiceCaller]rú  r€  r¶   r·   r‰  )r¶   rc	  rƒ   )rN	  r�  r¶   zdict[ChoiceCaller, float])rS	  r2	  r¶   rÓ  )rS	  r2	  r¶   r·   )rN	  r�  r¶   ztuple[ChoiceCaller, float])r`	  z-dict[Optional[int], TritonTemplateCallerBase]r¶   r·   )r›   rœ   r�   rž   r®  rÀ  r´  rI	  rü  rO	  r²  r³  rU	  rX	  r]	  ra	  r    rª  r«  s   @rˆ   r7	  r7	  è  sé   ø† ñðAàðAð !ðAð Pð	Að
 /ðAð  /ðAð 
÷Að8 ó&ó ð&ð óó ðð .2ð3Ø*ð3à	"õ3ð ×Ñó-ó ð-ôBð .2ð1Ø*ð1à	#õ1ðBØDðBà	÷Bò BrŠ   r7	  c                  ó\   ^ • \ rS rSr              SU 4S jjrSS jrSS jrSrU =r$ )	ÚCUTLASSTemplateBufferiG  c                óJ   >• [         TU ]  XU5        X@l        XPl        X`l        g rƒ   )r·  rÀ  Úworkspace_sizeÚtemplateÚsupports_epilogue_fusion)rŒ  rN  rj  rÚ  rg	  rh	  ri	  r¹  s          €rˆ   rÀ  ÚCUTLASSTemplateBuffer.__init__H  s&   ø€ ô 	‰Ñ˜Ð);Ô<à,ÔØ ŒØ(@Õ%rŠ   c                ó8   • U R                   b  U R                   $ S$ rý  ©rg	  rŸ  s    rˆ   rá  Ú(CUTLASSTemplateBuffer.get_workspace_sizeW  s   € Ø&*×&9Ñ&9Ñ&Eˆt×"Ñ"ÐLÈ1ÐLrŠ   c                ó~   • U R                  5        H)  n[        R                  " UR                  5       S S 5        M+     g rƒ   )rØ  rl   r\  rs  )rŒ  r\  s     rˆ   Úemulate_store_fnÚ&CUTLASSTemplateBuffer.emulate_store_fnZ  s,   € Ø×&Ñ&Ö(ˆFÜ�IŠI�f—o‘oÓ'¨¨tÖ4ò )rŠ   )ri	  rh	  rg	  )rN  rí  rj  ró  rÚ  úCallable[_P, _T]rg	  r…   rh	  rr   ri	  r•   r¶   r·   r©  r~  )	r›   rœ   r�   rž   rÀ  rá  ro	  r    rª  r«  s   @rˆ   re	  re	  G  sd   ø† ðAàðAð !ðAð -ð	Að
 ðAð "ðAð #'ðAð 
÷AôM÷5ò 5rŠ   re	  c                  óT   ^ • \ rS rSr            SU 4S jjrSU 4S jjrSrU =r$ )ÚCppTemplateBufferi_  c                óL   >• [         TU ]  XU5        X@l        XPl        S U l        g rƒ   )r·  rÀ  rh	  r=	  rø  )rŒ  rN  rj  rÚ  rh	  r=	  r¹  s         €rˆ   rÀ  ÚCppTemplateBuffer.__init__`  s&   ø€ ô 	‰Ñ˜Ð);Ô<Ø ŒØŒØ/3ˆ�rŠ   c                óž  >• [        U R                  [        5      (       a   [        U R                  [        5      (       d   [        U R                  5      5       eU R                  S   n[        U[        5      (       d   [        U5      5       eUR                  n[        U[        5      (       d   [        U5      5       eU$ [        TU ]%  5       $ rý  )
r„   rN  ÚMultiOutputLayoutrø  r   r°   rr  rí  r·  r  )rŒ  Úfirst_outputrN  r¹  s      €rˆ   r  ÚCppTemplateBuffer.get_layoutm  sž   ø€ Ü�d—k‘kÔ#4×5Ñ5Ü˜dŸl™l¬H×5Ñ5ÐI´t¸D¿L¹LÓ7IÓIÐ5àŸ<™<¨™?ˆLÜ˜l¬F×3Ñ3ÐG´T¸,Ó5GÓGÐ3Ø!×(Ñ(ˆFÜ˜f¤f×-Ñ-Ð;¬t°F«|Ó;Ð-ØˆMä‘7Ñ%Ó'Ð'rŠ   )r=	  rø  rh	  )rN  rí  rj  ró  rÚ  rq	  rh	  rr   r=	  r   r¶   r·   r‡  )r›   rœ   r�   rž   rÀ  r  r    rª  r«  s   @rˆ   rs	  rs	  _  sL   ø† ð4àð4ð !ð4ð -ð	4ð
 "ð4ð ð4ð 
÷4÷
(õ 
(rŠ   rs	  c                  óV   ^ • \ rS rSrSr S           SU 4S jjjrSS jrSrU =r$ )	ÚCuteDSLTemplateBufferiz  z…
Buffer for CuteDSL (CUTLASS Python DSL) template kernels.
Similar to other template buffers but specialized for CuteDSL operations.
c                ó†  >• [         TU ]  XU5        X@l        XPl        U /U l        Ub”  [        U R                  S   [        5      (       d   [        U R                  S   5      5       eU R                  S   R                  5       nU =R                  U Vs/ s H  n[        [        US9Xp5      PM     sn-  sl        g g s  snf )Nr   r  )r·  rÀ  rh	  r÷  rø  r„   rj  r€   r°   r  rù  r·  )	rŒ  rN  rj  rÚ  rh	  r÷  r  rð  r¹  s	           €rˆ   rÀ  ÚCuteDSLTemplateBuffer.__init__€  s±   ø€ ô 	‰Ñ˜Ð);Ô<Ø ŒØ,ÔØ&* VˆŒàÑ%Ü˜dŸk™k¨!™n¬f×5Ñ5ÐK´t¸D¿K¹KÈ¹NÓ7KÓKÐ5Ø—[‘[ ‘^×.Ñ.Ó0ˆFØ�LŠLá)óâ)�Cô œz°Ñ8¸#ÖDÙ)ññ ŽLð &ùòs   ÂB>c                ó   • U R                   $ rƒ   r	  rŸ  s    rˆ   rØ  Ú!CuteDSLTemplateBuffer.get_outputs•  r	  rŠ   )r÷  rø  rh	  rƒ   )rN  rí  rj  ró  rÚ  rq	  rh	  r   r÷  r	  r¶   r·   rã  )	r›   rœ   r�   rž   r®  rÀ  rØ  r    rª  r«  s   @rˆ   r{	  r{	  z  s[   ø† ñð 6:ðàðð !ðð -ð	ð
 ðð 3ðð 
÷ð ÷*ò rŠ   r{	  c                  ó–   ^ • \ rS rSrSr     S                     S	U 4S jjjrS
S jrSS jr S     SS jjrSr	U =r
$ )ÚNVUniversalGemmBufferi™  z°
Buffer for NVIDIA Universal GEMM kernels.

Unlike CuteDSL templates which use Jinja templates, this generates
simpler Python code that directly calls the cutlass_api library.
c                ó  >• [         TU ]  XS S9  X0l        X@l        U /U l        X`l        XPl        Xpl        X€l        X�l	        X l
        UR                  R                  UR                  R                  S.U l        U R                  U l        g )N)rÚ  )Úkernel_nameÚmin_cc)r·  rÀ  ÚkernelÚaccumulator_typerø  rg	  ÚvariantÚscale_type_aÚscale_type_bÚswizzle_type_aÚswizzle_type_bÚmetadatarƒ	  r„	  Úkernel_metadataÚ_make_kernel_renderrÚ  )rŒ  rN  rj  r…	  r†	  r‡	  rg	  rˆ	  r‰	  rŠ	  r‹	  r¹  s              €rˆ   rÀ  ÚNVUniversalGemmBuffer.__init__¡  s„   ø€ ô 	‰Ñ˜¸DÐÑAØŒØ 0ÔØ&* VˆŒØ,ÔØŒØ(ÔØ(ÔØ,ÔØ,Ôð "Ÿ?™?×6Ñ6Ø—o‘o×,Ñ,ñ 
ˆÔð #'×":Ñ":ˆÕrŠ   c                ó   • U R                   $ )z#Return the workspace size in bytes.rl	  rŸ  s    rˆ   rá  Ú(NVUniversalGemmBuffer.get_workspace_sizeÂ  s   € à×"Ñ"Ð"rŠ   c                ó   • U R                   $ rƒ   r	  rŸ  s    rˆ   rØ  Ú!NVUniversalGemmBuffer.get_outputsÆ  r	  rŠ   c                óê  ^	• SSK Jn  SSKJn  / nU R                   HV  n[        U[        5      (       a  UR                  n[        U[        5      (       a  UR                  nUR                  U5        MX     [        UR                  5      nU" UUUU R                  U R                  U R                  U R                  U R                   U R"                  U R$                  U R&                  S9m	U	4S jnT	U4$ )zÊ
Create a kernel renderer for code generation.

Returns (kernel, render) tuple where:
- kernel: NVUniversalGemmKernel object with call_kernel() method
- render: function that returns source code string
r   )ÚNVUniversalGemmKernel)ÚPlaceholder)rƒ	  r‘   re  r�	  r†	  rg	  r‡	  rˆ	  r‰	  rŠ	  r‹	  c                 ó$   >• T R                  5       $ rƒ   )rT	  )Úrender_kernels   €rˆ   rT	  Ú9NVUniversalGemmBuffer._make_kernel_render.<locals>.renderð  s   ø€ Ø ×'Ñ'Ó)Ð)rŠ   )ÚBtorch._inductor.codegen.nv_universal_gemm.nv_universal_gemm_kernelr•	  Útorch._inductor.utilsr–	  rj  r„   r   rM  rq  rÅ  rÃ   ÚKERNEL_NAMEr�	  r†	  rg	  r‡	  rˆ	  r‰	  rŠ	  r‹	  )
rŒ  Úout_noderN	  r•	  r–	  r‘   rl  rƒ	  rT	  r˜	  s
            @rˆ   rŽ	  Ú)NVUniversalGemmBuffer._make_kernel_renderÉ  s×   ø€ õ	
õ 	6à!#ˆØ—;”;ˆCÜ˜#œy×)Ñ)Ø—h‘h�Ü˜#œz×*Ñ*Ø—h‘h�Ø×Ñ˜sÖ#ñ ô ˜+×1Ñ1Ó2ˆá-Ø#Ø#Ø Ø ×0Ñ0Ø!×2Ñ2Ø×.Ñ.Ø—L‘LØ×*Ñ*Ø×*Ñ*Ø×.Ñ.Ø×.Ñ.ñ
ˆõ	*ð ˜fÐ$Ð$rŠ   )r†	  r…	  r�	  rÚ  rø  rˆ	  r‰	  rŠ	  r‹	  r‡	  rg	  )r   NNNN)rN  rí  rj  ró  r…	  r   r†	  r   r‡	  r   rg	  r…   rˆ	  úOptional[Any]r‰	  rŸ	  rŠ	  rŸ	  r‹	  rŸ	  r¶   r·   r©  rã  rƒ   )r�	  r   rN	  r�  r¶   ztuple[Any, Any])r›   rœ   r�   rž   r®  rÀ  rá  rØ  rŽ	  r    rª  r«  s   @rˆ   r�	  r�	  ™  sÂ   ø† ñð  Ø&*Ø&*Ø(,Ø(,ð;àð;ð !ð;ð ð	;ð
 ð;ð ð;ð ð;ð $ð;ð $ð;ð &ð;ð &ð;ð 
÷;ð ;ôB#ôð =Að*%Øð*%Ø,9ð*%à	÷*%ó *%rŠ   r�	  c                ó&   • [        S U  5       5      $ )Nc              3  óB   #   • U  H  n[        U[        5      v •  M     g 7frƒ   ©r„   r€   ©ræ   r  s     rˆ   rè   Ú#is_node_sequence.<locals>.<genexpr>ù  s   é € Ð4ªe¨Œz˜!œV×$Ð$ªeùrö  )rë   )r±   s    rˆ   Úis_node_sequencer¥	  ö  s   € ô Ñ4©eÓ4Ó4Ð4rŠ   c                  ó®   • \ rS rSr% S\S'   SS jrSS jrSS jr\SS j5       r	\
    SS j5       rSS	 jrSS
 jr\" S 5       S   SS jj5       rSrg)r…  iü  ú)Sequence[Union[IRNode, Sequence[IRNode]]]rj  c                ón   • U R                   U   n[        U[        5      (       d   eUR                  5       $ rƒ   ©rj  r„   r€   rs  )rŒ  rË   Úinputs      rˆ   Ú
input_nameÚInputsKernel.input_name   s/   € Ø—‘˜A‘ˆÜ˜%¤×(Ñ(Ð(Ð(Ø�~‰~ÓÐrŠ   c                ó  ^• [         [        R                     " 5       n[        R                  mU R                   Hq  n[        U[        5      (       a  UR                  U4S jU 5       5        M5  [        U[        5      (       a  ML  UR                  T" UR                  5       5      5        Ms     [         [        R                     " U4S jU R                  5        5       5      n[        R                  " UU[        5       S9$ )Nc              3  óP   >#   • U  H  nT" UR                  5       5      v •  M     g 7frƒ   r  )ræ   r‡   rƒ  s     €rˆ   rè   Ú/InputsKernel.get_read_writes.<locals>.<genexpr>
  s   øé € ÐBºE°q™W Q§Z¡Z£\×2Ð2ºEùó   ƒ#&c              3  óP   >#   • U  H  nT" UR                  5       5      v •  M     g 7frƒ   r  )ræ   rð  rƒ  s     €rˆ   rè   r¯	    s#   øé € ð .
Ú/A¨‰G�C—L‘L“N×#Ð#Ò/Aùr°	  rq  )r:   rC   rI   rƒ  rj  r„   r   rÿ  r¯   r´  rs  rØ  rt  )rŒ  rV  rª	  rr  rƒ  s       @rˆ   rR  ÚInputsKernel.get_read_writes  sÄ   ø€ Üœ<×+Ñ+Ò,Ó.ˆÜ×&Ñ&ˆØ—[”[ˆEÜ˜%¤×*Ñ*Ø—‘ÔB¹EÓBÖBÜ˜EÔ#8×9Ñ9áà—	‘	™' %§.¡.Ó"2Ó3Ö4ñ !ô œL×,Ñ,Ò-ô .
Ø/3×/?Ñ/?Ô/Aó.
ó 
ˆô ×&Ò&ØØÜ"›ñ
ð 	
rŠ   c                ó6   • U R                  5       R                  $ rƒ   rU  rŸ  s    rˆ   rž  ÚInputsKernel.get_reads  rX  rŠ   c                óØ  • [        U[        5      (       a  UR                  n[        U[        5      (       a  UR                  n[        U[        5      (       a*  [        U[
        5      (       d  [        R                  U5      n[        U[        5      (       a  U R                  U5      $ [        U[        5      (       a  U$ [        U[        [
        45      (       d   [        U5      5       eU$ rƒ   )r„   r   rM  rq  ro  rS  r²  Úrealize_inputÚunwrap_storage_for_inputÚTorchBindObjectrr  r°   ©r  r‡   s     rˆ   r·	  Ú%InputsKernel.unwrap_storage_for_input  s¯   € ä�aœ×#Ñ#Ø—‘ˆAÜ�aœ×$Ñ$Ø—‘ˆAÜ�aœ×"Ñ"¬:°a¼×+IÑ+IÜ×*Ñ*¨1Ó-ˆAÜ�aœ×#Ñ#ð
 ×/Ñ/°Ó2Ð2Ü�aœ×)Ñ)ØˆHÜ˜!œf¤oÐ6×7Ñ7Ð@¼¸a»Ó@Ð7ØˆrŠ   c                óè   • / nU  Hd  n[        U[        5      (       a&  U Vs/ s H  n[        R                  U5      PM     nnO[        R                  U5      nUR	                  U5        Mf     U$ s  snf rƒ   )r„   r   r…  r·	  rÅ  )rj  Ú
inputs_newr‡   rË   s       rˆ   rÙ  ÚInputsKernel.unwrap_storage1  sm   € ð =?ˆ
ÛˆAÜ˜!œX×&Ñ&ÙGHÓIÂqÀ!”\×:Ñ:¸1Ö=Áq�ÐI�ä ×9Ñ9¸!Ó<�Ø×Ñ˜aÖ ñ ð Ðùò	 Js   ¡A/c                ó   • gra  r™   rŸ  s    rˆ   rj  ÚInputsKernel.is_extern>  r®  rŠ   c                ó   • gr  r™   rŸ  s    rˆ   rZ  ÚInputsKernel.num_readsA  r}  rŠ   c                óð   • [         [        R                     " 5       nU R                   HI  n[	        U[
        5      (       a  X#R                  U5      -  nM-  U H  nX$R                  U5      -  nM     MK     U$ rƒ   )r:   rª   r"   rj  r„   r€   ra  )rŒ  ri  r  rl  Ú	inner_inps        rˆ   ra  Ú!InputsKernel.get_free_symbol_usesD  sg   € ô ”u—|‘|Ò$Ó&ˆØ—;”;ˆCÜ˜#œv×&Ñ&Ø×-Ñ-¨mÓ<Ñ<’ã!$�IØ×7Ñ7¸ÓFÑF’Aó "%ñ	 ð ˆrŠ   r™   N)rË   r…   r¶   rÃ   r¦  r¨  r$  )rj  r§	  r¶   z%list[Union[IRNode, Sequence[IRNode]]]r‰  r©  r   r«  )r›   rœ   r�   rž   rŸ   r«	  rR  rž  rF  r·	  r±  rÙ  rj  rZ  rY   ra  r    r™   rŠ   rˆ   r…  r…  ü  s…   ‡ à5Ó5ô ô

ô,,ð óó ðð$ ð
Ø9ð
à	.ó
ó ð
ôôñ ˜NÓ+à$)ð
Ø!ð
à	!ô
ó ,ó
rŠ   r…  c                  ó(   • \ rS rSrSS jrSS jrSrg)Ú	NopKerneliR  c                ó   • gra  r™   rŸ  s    rˆ   rm  ÚNopKernel.is_no_opS  r®  rŠ   c                ó   • [        5       $ rƒ   r9   rŸ  s    rˆ   rž  ÚNopKernel.get_readsV  rÝ  rŠ   r™   Nr‰  r¨  )r›   rœ   r�   rž   rm  rž  r    r™   rŠ   rˆ   rÆ	  rÆ	  R  s   † ô÷rŠ   rÆ	  c                  óš   • \ rS rSrSr\S
S j5       r\ S     SS jj5       r\" S 5       S   SS jj5       r	\SS j5       r
SS jrS	rg)ÚConcatKerneliZ  zb
There isn't actually a real kernel for concat, we just change the
storage for the upstream data.
c                ó  • US   R                  5       nUS   R                  5       n[        US   R                  5       5      nS/nXR   /nSUs=::  a  [	        U5      :  d   e   e[        S[	        U5      5       Hâ  nX   R                  5       n	UR                  XR   5        [	        U	5      [	        U5      :X  d   eX   R                  5       U:X  d   eX   R                  5       U:X  d   e[        [	        U5      5       HE  n
X¢:X  a  XZ   Xš   -   XZ'   M  [        R                  R                  R                  XZ   Xš   5      XZ'   MG     UR                  XR   5        Mä     [        R                  U5      n[        R                  (       a#  [        R!                  XµUS   R"                  5      n[        [	        U5      5       H|  nX   n[%        U5      (       d  M  UR'                  5       n[)        U[*        5      (       d  M@  [        R-                  UR.                  UR0                  5      (       d  Mq  [3        U5      n  O   [5        S U 5       5      n[        R                  R6                  R8                  S   n[)        U[        5      (       d   [;        U5      5       eUSL a"  [5        S U 5       5      (       a  [3        U5      n[=        S U 5       5      nUc   e[?        S[+        UUUUUS9/ S	9n[A        U5      n/ n[C        U5       GH±  u  nn[)        U[D        [F        45      (       d   [;        U5      5       eU RI                  U[J        RM                  UX&U   Xx   SS
95      n[)        U[N        5      (       d   [;        U5      5       e[)        URP                  [        5      (       d   [;        URP                  5      5       eURP                  R                  U5        [)        URR                  [D        5      (       a  URR                  RU                  5       nOURR                  n[)        U[@        5      (       d  GM4  URW                  5       (       d  GML  UR                  5       =nc  GMb  [Y        UR:                  5      (       d  GM  [[        U5      (       a  GM’  UR                  UR]                  5       5        GM´     [	        U5      S:”  aR  [        R                  R_                  U[`        Rb                  5      (       a  [        R                  Re                  U5        [        R                  Rg                  U5      Ul4        U Rk                  URP                  5      Ul(        [        R                  Rm                  U5        U$ )z&
Create the concat kernel from inputs
r   rA   c              3  ó8   #   • U  H  n[        U5      v •  M     g 7frƒ   )r
  r”  s     rˆ   rè   Ú&ConcatKernel.create.<locals>.<genexpr>Œ  s   é € Ð-WÒPVÈ1Ô.CÀA×.FÐ.FÒPVùrœ  Fc              3  ó  #   • U  Hv  nS UR                   ;   =(       a[    UR                   S    R                  [        R                  S9=(       d*    UR                   S    R                  [        R                  S9v •  Mx     g7f)r0  ©ro  N)rb  rk  r  rj  rl  ©ræ   Úargs     rˆ   rè   rÏ	  �  st   é € ð 
<
ò $�ð �S—X‘XÑ÷ ð —‘˜‘×-Ñ-¼E×<OÑ<OÐ-ÐP÷ Wà—8‘8˜E‘?×0Ñ0¼u×?UÑ?UÐ0ÐVôò $ùs   ‚A>B c              3  óz   #   • U  H1  n[        U5      =(       a    UR                  5       R                  v •  M3     g 7frƒ   )r
  r  rR  r”  s     rˆ   rè   rÏ	  �  s-   é € ð 
ÚKQÀaÔ! !Ó$×A¨¯©«×)AÑ)AÔAÊ6ùs   ‚9;N)r  r  r  r  rR  ©r¿   rN  rj  ©rž  )7r  r  r£   r	  rÈ   rÉ   rÅ  rn   r  r  rÙ  r  r  rB   rC  rí  r>  r  r
  r  r„   rP  r  r  r  r-   r{  Úcurrent_noder½   r°   rë   rÌ	  rq  rñ   ro  rÒ  rÝ  r‘  r  rr  rj  rM  rp  r)  re   rd   rv  r÷  rD   ÚFOREACHÚregister_operation_listrÛ  r¿   rÙ  rÜ  )r  rj  rB  r  r  rÌ  Úoffsets_startÚoffsets_endrË   Ú
input_sizer  Úoutput_strider‡   rN  Úany_input_is_storage_and_layoutÚfx_node_argsrR  Úconcat_kernelr…	  Úop_namesrl  r¨  Úinput_unwrappedÚdevs                           rˆ   r  ÚConcatKernel.create`  s™  € ð
 ˜‘×%Ñ%Ó'ˆØ�q‘	×#Ñ#Ó%ˆÜ˜˜q™	×*Ñ*Ó,Ó-ˆØ˜ˆØ‘}�oˆØ�CÕ'œ#˜h›-Ó'Ð'Ñ'Ð'Ð'Ü�qœ#˜f›+Ö&ˆAØ™×+Ñ+Ó-ˆJØ× Ñ  ¡Ô/Ü�z“?¤c¨(£mÓ3Ð3Ð3Ø‘9×&Ñ&Ó(¨EÓ1Ð1Ð1Ø‘9×'Ñ'Ó)¨VÓ3Ð3Ð3Üœ3˜x›=Ö)�Ø“8Ø"*¡+°
±Ñ"=�H“Kä"#§'¡'×"2Ñ"2×"LÑ"LØ ™ Z¡]ó#�H“Kñ	 *ð ×Ñ˜x™}Ö-ñ 'ô (6×'HÑ'HÈÓ'RˆÜ×'×'ä"×/Ñ/Ø¨°©¯©óˆMô
 ”s˜6“{Ö#ˆAØ‘	ˆAÜ$ Q×'Ó'ØŸ™›�ÜØœK÷ó ä×8Ñ8¸¿¹ÀfÇmÁm×TÓTä$BÀ8Ó$L�MÙñ $ô +.Ñ-WÑPVÓ-WÓ*WÐ'Ü—w‘w×+Ñ+×0Ñ0°Ñ3ˆÜ˜,¬×-Ñ-ÐA¬t°LÓ/AÓAÐ-à*¨eÒ3¼ñ 
<
ñ $ó
<
÷ 
9
ñ 
9
ô ;¸8ÓDˆMäñ 
ÙKQó
ó 
ˆ	ð Ñ!Ð!Ð!Ü$ØÜØØØØ$Ø#ñð ñ

ˆô ˜MÓ*ˆØˆÜ ×'‰FˆAˆsÜ˜c¤H¬jÐ#9×:Ñ:ÐE¼DÀ»IÓEÐ:Ø×+Ñ+ØÜ× Ñ Ø˜C¨qÑ!1°;±>Èð !ð óˆLô ˜l¬F×3Ñ3ÐG´T¸,Ó5GÓGÐ3Ü˜m×2Ñ2´D×9Ñ9ÐU¼4À×@TÑ@TÓ;UÓUÐ9Ø× Ñ ×'Ñ'¨Ô5ä˜#Ÿ(™(¤H×-Ñ-Ø"%§(¡(×"6Ñ"6Ó"8‘à"%§(¡(�ô ˜?¬J×7Ô7Ø#×3Ñ3×5Ô5ØŸN™NÓ,Ð,�SÔ9Ü˜3Ÿ8™8×$Ô$Ü" <×0Ô0à—‘ × ?Ñ ?Ó A×Bñ1 (ô4 ˆx‹=˜1Ó¤§¡×!4Ñ!4°V¼^×=SÑ=S×!TÑ!TÜ�G‰G×+Ñ+¨HÔ5äŸW™W×4Ñ4°]ÓCˆÔØ"×1Ñ1°-×2FÑ2FÓGˆÔÜ	�‰×"Ñ" =Ô1àˆrŠ   Nc                ó2  • [        U[        5      (       a  U R                  UR                  U5      $ [        U[        [
        45      (       d   [        U5      5       e[        UR                  [        5      (       a¶  [        UR                  R                  [        5      (       a  UR                  R                  (       d  gUc  g[        UR                  5       5      [        UR                  5       5      :w  a  g[        S [        UR                  5       UR                  5       5       5       5      $ [        UR                  S5      =(       aJ    [        UR                  R                  [         5      =(       a    [        UR                  ["        5      (       + $ )NFTc              3  óx   #   • U  H0  u  p[         R                  R                  R                  X5      v •  M2     g 7frƒ   rH  rI  s      rˆ   rè   Ú=ConcatKernel.can_realize_into_without_copy.<locals>.<genexpr>ë  s1   é € ð âE‘F�Bô —‘× Ñ ×8Ñ8¸×@Ð@ÚEùrK  rN  )r„   r   Úcan_realize_into_without_copyrM  ro  rq  r°   r7	  rN  rP  rI	  rÈ   r2  rë   rÒ   r³  r  ÚExternKernelAlloc)r  rÚ  rÛ  s      rˆ   rè	  Ú*ConcatKernel.can_realize_into_without_copyÒ  s!  € ô �cœ9×%Ñ%à×4Ñ4°S·X±X¸sÓCÐCä˜#¤¬*Ð5×6Ñ6ÐA¼¸S»	ÓAÐ6Ü�c—h‘hÔ 3×4Ñ4ä˜sŸx™xŸ™´×<Ñ<Ø—x‘x×0×0àð ‰{Øô �3—>‘>Ó#Ó$¬¨C¯N©NÓ,<Ó(=Ó=Øäñ ä! #§.¡.Ó"2°C·N±NÓ4DÔEóó ð ô �C—H‘H˜hÓ'÷ <Ü˜3Ÿ8™8Ÿ?™?¬NÓ;÷<ä˜sŸx™xÔ):Ó;Ô;ð	
rŠ   c                ó,   • [         R                  X5      $ rƒ   )rÆ	  ra  r`  s     rˆ   ra  Ú!ConcatKernel.get_free_symbol_usesö  s   € ô ×-Ñ-¨dÓBÐBrŠ   c                ó’  • [        U[        5      (       d&  [        U5      (       a  [        U5      u  p4[        X4S9n[        U[        5      (       d   [	        U5      5       e[        U[
        5      (       a  U R                  UR                  U5      $ [        U[        5      (       ai  UR                  5         [        UR                  S5      (       d   eU R                  X5      (       a&  [        U5      UR                  l        UR                  $ [        R                  UR!                  5       UR#                  5       UR%                  5       ['        UR)                  5       UR)                  5       5       VVs/ s H.  u  pV[*        R,                  R.                  R1                  XV5      PM0     snnS9nU R                  Xr5      $ s  snnf )NrL  rN  rh  )r„   rS  r
  rO  r°   r   rÝ  rM  rq  r  r³  rè	  r›  rN  rO  r  r  r  r  rÒ   r	  rn   r  r  rÙ  )r  rÚ  rÛ  rV  rN  r�  rŽ  Úpws           rˆ   rÝ  ÚConcatKernel.realize_intoü  sZ  € ô
 ˜#œ×/Ñ/Ü$ S×)Ñ)Ü"7¸Ó"<‘�Ü%¨7ÑB�Ü˜#œ×/Ñ/Ð:´°c³Ó:Ð/Ü�cœ9×%Ñ%à×#Ñ# C§H¡H¨cÓ2Ð2ä�cœ:×&Ñ&Ø�K‰KŒMä˜3Ÿ8™8 X×.Ñ.Ð.Ð.Ø×0Ñ0°×:Ñ:ä"1°#Ó"6�—‘”Ø—x‘x�ä×ÑØ—>‘>Ó#Ø—-‘-“/Ø—_‘_Ó&ô   §¡£°·±³Ô?ôâ?‘D�Aô —‘× Ñ ×:Ñ:¸1Ö@Ù?òð	 ð 
ˆð ×Ñ Ó(Ð(ùós   Å75Gc                ó   • gra  r™   rŸ  s    rˆ   r'  ÚConcatKernel.should_allocate  r®  rŠ   r™   )rj  ró  rB  r…   r¶   rq  rƒ   )rÚ  r€   rÛ  r   r¶   r•   r   r«  )rÚ  r€   rÛ  r€   r¶   r€   r‰  )r›   rœ   r�   rž   r®  rF  r  rè	  rY   ra  rÝ  r'  r    r™   rŠ   rˆ   rÌ	  rÌ	  Z  s˜   † ñð
 óoó ðoðb à26ð!
Øð!
Ø/ð!
à	ô!
ó ð!
ñF ˜NÓ+à$)ðCØ!ðCà	!ôCó ,ðCð
 ó)ó ð)÷BrŠ   rÌ	  c                  ó$  ^ • \ rS rSr% SrSrS\S'   \R                  " \	S9r
S\S'   S	rS
\S'   S	rS\S'   S	rS\S'   \R                  " \S9rS\S'   S	rS\S'   S	rS\S'   \R                  " \	S9rS\S'   S	rS\S'   \R                  " \	S9rS\S'   \R                  " \S9rS\S'          SC                     SDU 4S jjjrSES jrSFS jrSGS  jrSGS! jr SH     SIS" jjrSJS# jrSHSKS$ jjrSLS% jrSMS& jrSNS' jr \!SOS( j5       r"\#        SPS) j5       r$\#SQS* j5       r%\#SRS+ j5       r&\#SRS, j5       r'\#   SS         STS- jj5       r(\# SU       SVS. jj5       r)\# SU       SWS/ jj5       r*\#SRS0 j5       r+\#SRS1 j5       r,\#SRS2 j5       r-\#SRS3 j5       r.SGS4 jr/      SXS5 jr0SHSYS6 jjr1SZS7 jr2S[S8 jr3SUS\S9 jjr4SNS: jr5SJS; jr6SJS< jr7SJS= jr8S]S> jr9S^S? jr:\;" S 5       SU   S_S@ jj5       r<SNSA jr=\=r>SBr?U =r@$ )`r²  i"  z�
A class that represents Kernels which are not directly lowered to Inductor
Loop Level IR, such as custom operators, or aten operators which we fallback to.
r™   rè  Úconstant_argsrº  r~  r¾   NúOptional[ReinterpretView]Úoutput_viewr�  Úpython_kernel_nameÚcpp_kernel_nameúIterable[str]Úordered_kwargs_for_cpp_kernelúOptional[_OpOverloads]Úop_overloadzOptional[list[dict[str, Any]]]Úarg_propertieszdict[str, dict[str, Any]]Úallarg_propertiesz#Optional[dict[str, dict[str, Any]]]Úkwarg_propertiesz"dict[sympy.Symbol, pytree.KeyPath]Úunbacked_bindingszlist[MutationOutput]Úmutation_outputsc                ó@  >• [         TU ]  UUUS9  X@l        U(       a  UO0 U l        X`l        X l        U R                  U5        U R                  U5        X�l        U R                  5         0 U l
        / U l        [        R                  R                  U l        0 U l        g ©NrÕ	  )r·  rÀ  ró	  r¾   rõ	  rû	  Úset_cpp_kernel_nameÚset_python_kernel_namerù	  Úcollect_arg_kwarg_propertiesrÿ	  r 
  rn   r  r×	  Úfx_noder   )rŒ  r¿   rN  rj  ró	  r¾   rõ	  rö	  r÷	  rù	  rû	  r¹  s              €rˆ   rÀ  ÚExternKernel.__init__>  s—   ø€ ô 	‰ÑØØØð 	ñ 	
ð
 +ÔÞ &‘f¨BˆŒØ&ÔØ&ÔØ× Ñ  Ô1Ø×#Ñ#Ð$6Ô7Ø-JÔ*Ø×)Ñ)Ô+Ø!#ˆÔØ "ˆÔÜ—w‘w×+Ñ+ˆŒà+-ˆÕrŠ   c                ó    • U /U R                   Q$ rƒ   ©r 
  rŸ  s    rˆ   rØ  ÚExternKernel.get_outputs^  s   € ØÐ-�t×,Ñ,Ð-Ð-rŠ   c                ó   • [        5       $ rƒ   r9   rŸ  s    rˆ   rÛ  Ú%ExternKernel.get_unbacked_symbol_defsa  rÝ  rŠ   c                ó¶  • [        U R                  [        R                  R                  5      (       af  U R                  R
                  R                   Vs/ s H:  nUR                  (       a  M  UR                  UR                  UR                  S.PM<     snO.[        [        U R                  5      5       Vs/ s H  n0 PM     snU l        [        U R                  [        R                  R                  5      (       aS  U R                  R
                  R                   Vs0 s H'  nUR                  UR                  UR                  S._M)     snO0 U l        [        U R                  [        R                  R                  5      (       a¬  U R                   (       dR  U R                  R
                  R                   Vs/ s H!  oR                  (       d  M  UR                  PM#     snU l        U R                  R
                  R                   Vs/ s H  oR                  (       d  M  UPM     snU l        g / U l        g s  snf s  snf s  snf s  snf s  snf )N)r¿   r°   rb  )r°   rb  )r„   rû	  r  Ú_opsÚ
OpOverloadÚ_schemaÚ	argumentsÚ
kwarg_onlyr¿   Ú	real_typerb  rÉ   rÈ   rj  rü	  rý	  rù	  Úschema_kwargs)rŒ  r‡   rË   s      rˆ   r
  Ú)ExternKernel.collect_arg_kwarg_propertiesd  sË  € ô ˜$×*Ñ*¬E¯J©J×,AÑ,A×BÑBð ×)Ñ)×1Ñ1×;Ò;óò <�AØ—|•|óØŸF™FØŸK™KØ%&§_¡_ôñ
 <òô $¤C¨¯©Ó$4Ô5Ó6Ò5˜“"Ñ5Ñ6ð 	Ôô$ ˜$×*Ñ*¬E¯J©J×,AÑ,A×BÑBð ×)Ñ)×1Ñ1×;Ò;óâ;�Að —‘ §¡¸q¿¹ÑOÒOÙ;òð
 ð 	Ôô �d×&Ñ&¬¯
©
×(=Ñ(=×>Ñ>Ø×5×5à$(×$4Ñ$4×$<Ñ$<×$FÒ$Fó6Ú$F˜qÏ,Í,“F�A—F”FÑ$Fñ6�Ô2ð  ×+Ñ+×3Ñ3×=Ò=ó"Ú=�aÇÅ—Ñ=ñ"ˆDÕð "$ˆDÕùò?ùò 7ùòùò6ùò"s0   ÁIÁ/(IÂ:IÄ#.IÇIÇIÈIÈ+Ic                ó„   • [        U R                  [        5      (       a!  U R                  5         U R	                  5         g g rƒ   )r„   rN  r  Úapply_constraintr<  rŸ  s    rˆ   rë  ÚExternKernel.decide_layout‰  s0   € Ü�d—k‘k¤>×2Ñ2Ø×!Ñ!Ô#Ø×ÑÕ ð 3rŠ   c                óÈ   • [        X5      u  p4U(       a  UR                  U5        U(       d  U R                  5       nU(       a  SSKJn  U" XSS9nUR                  X&5        g g )NrA   )Ú'set_kernel_post_grad_provenance_tracingT)rj  )ra   Úmake_commentÚtry_get_kernel_namer¶  r
  Úwrite_provenance_debug_handle)rŒ  Úwrapperrƒ	  Ú
origin_strÚ_detailed_origin_strr
  Údebug_handles          rˆ   Úcodegen_commentÚExternKernel.codegen_commentŽ  s]   € ô ,?¸tÓ+MÑ(ˆ
ÞØ× Ñ  Ô,æØ×2Ñ2Ó4ˆKÞÝFáBØ¨TñˆLð ×1Ñ1°+ÕLð rŠ   c                ó   • [         erƒ   r¼  ©rŒ  r
  s     rˆ   ÚcodegenÚExternKernel.codegenŸ  r¾  rŠ   c                óì  • Xl         [        R                  R                  (       a3  [	        U R
                  [        R                  R                  5      (       d  g U R
                  nU R                   c‚  UR                  S:X  aV  UR                  S:X  a  UR                  R                  S5      S   OUR                  R                  SS5      nSU S3U l         g UR                  R                  U l         g g )NÚatenrw  Ú.r   rø   z
at::_ops::z::call)r÷	  rn   r  Úcpp_wrapperr„   rû	  r  r
  r
  Ú	namespaceÚ_overloadnamer›   rÆ  Úreplacer
  r¿   )rŒ  r÷	  r…	  Úopnames       rˆ   r
  Ú ExternKernel.set_cpp_kernel_name¢  sÌ   € Ø.ÔÜ�w‰w×"×"¬*Ø×ÑœeŸj™j×3Ñ3÷+
ñ +
ð à×!Ñ!ˆØ×ÑÑ'à×Ñ 6Ó)ð ×+Ñ+¨yÓ8ð —O‘O×)Ñ)¨#Ó.¨qÒ1àŸ™×0Ñ0°°cÓ:ð ð
 *4°F°8¸6Ð'B�Õ$à'-§~¡~×':Ñ':�Õ$ð (rŠ   c                ó  • Xl         Ub  g U R                  nUc  g [        U[        R                  R
                  5      (       a  SUR                   3U l         g UR                  R                  SS5       SUR                   3U l         g )Nztorch.ops.higher_order.ú._ops.ú.ops.r*
  )	rö	  rû	  r„   r  r
  ÚHigherOrderOperatorr›   rœ   r.
  )rŒ  rö	  r…	  s      rˆ   r
  Ú#ExternKernel.set_python_kernel_nameº  s€   € Ø"4ÔØÑ)Øà×!Ñ!ˆØ‰>ØÜ˜¤§
¡
× >Ñ >×?Ñ?Ø(?ÀÇÁÐ?PÐ&QˆDÕ#ð ×$Ñ$×,Ñ,¨X°wÓ?Ð@ÀÀ&Ç/Á/ÐARÐSð Õ#rŠ   c                óZ  • SSK Jn  U R                  5       =n(       a  UR                  O[        R
                  R                  n[        R
                  R                  (       a  U R                  $ [        R
                  R                  (       a“  [        [        R
                  R                  U5      (       d(   [        [        R
                  R                  5      5       eU R                  c  g [        R
                  R                  R                  U R                  U5      $ U R                  $ )NrA   )ÚCppWrapperCpu)Úcodegen.cpp_wrapper_cpur7
  r  r°   rn   r  Údevice_typeÚ
fx_wrapperrö	  r+
  r„   rw  r÷	  Úget_c_shim_func_name)rŒ  r7
  Údr  s       rˆ   r
  Ú ExternKernel.try_get_kernel_nameÉ  sÑ   € Ý:à!%§¡Ó!2Ð2˜AÕ2�—’¼¿¹×9LÑ9LˆÜ�7‰7××Ø×*Ñ*Ð*Ü�W‰W× × ÜœaŸg™g×2Ñ2°M×BÑBð ÄDÜ—‘×$Ñ$óEó ÐBð ×#Ñ#Ñ+ØÜ—7‘7×'Ñ'×<Ñ<Ø×$Ñ$ fóð ð ×*Ñ*Ð*rŠ   c                ó0   • U R                  5       nUc   eU$ rƒ   )r
  rÎ  s     rˆ   Úget_kernel_nameÚExternKernel.get_kernel_nameÛ  s!   € Ø×'Ñ'Ó)ˆØÑÐÐØˆrŠ   c           	     óþ   • [         R                  U R                  5       U R                  5       U R	                  5       U R                  5       U R                  5       U R                  5       S9nUR                  5         U$ )N)r  r  ré  rê  r}  r{  )	rO  r  r  r  r  r	  r¨  r¤  r  )r‡   rî	  s     rˆ   Ú
copy_inputÚExternKernel.copy_inputà  sa   € ä×ÑØ—<‘<“>Ø—+‘+“-Ø—]‘]“_Ø—:‘:“<Ø×)Ñ)Ó+Ø—o‘oÓ'ð ð 
ˆð 	�
‰
ŒØˆ	rŠ   c                ó"
  ^^• X#S.n[         R                  " U5      u  nm/ m/ n/ nU H³  nTR                  [        U[        5      =(       a    [        U[
        5      (       + 5        TS   (       a  UR                  U5        M[  [        U[        5      (       a2  [        R                  R                  R                  R                  US S9nUR                  U5        Mµ           SUU4S jjn	U V
s/ s H  o R                  U
5      PM     nn
U H  n
[        U
5      (       d  M  [        U
SS9  M!     / nU GHó  n
[        U
[        5      (       dh  U
R!                  5       [        R                  R"                  ;   a<  UR                  [        R                  R"                  U
R!                  5          5        M�  [        U
[        5      (       dh  U
R!                  5       [        R                  R$                  ;   a<  UR                  [        R                  R$                  U
R!                  5          5        Mþ  [        U
[&        5      (       a"  UR                  U
R)                  5       5        GM5  [        U
[*        R,                  R.                  R
                  5      (       ar  U
R0                  R2                  nU
R0                  R4                  S:X  a  Uc   eUR                  [*        R6                  R8                  U   R;                  5       5        GMÚ  UR                  [=        U
SS95        GMö     U	" X·5      u  pÞU" U0 UD6nS n[        R>                  R                  =n(       aÃ  [        R@                  RB                  RE                  S	5      n[G        5       n[        R@                  RH                  [*        RJ                  RL                  RN                  L a  US
   n[Q        [        R@                  5      nU   [S        U[        R@                  U5        S S S 5        [U        UUU5      n[        U[V        [X        45      (       d  U/OUnU H§  n[        U[*        RZ                  5      (       d  M$  UR\                  (       d  M7  [^        R`                  (       a  MN  Sn[        R                  R@                  RB                  RE                  SS 5      =n(       a  U SU 3nU[        R                  l1        M©     UUUU	U4$ s  sn
f ! , (       d  f       Nô= f)N)r½   r¾   r0  )rT  c                ó6  >• / n[        U 5      n[        U5      nT H@  nU(       a  UR                  [        U5      5        M&  UR                  [        U5      5        MB     [        R                  " UT5      nUR                  S/ 5      UR                  S0 5      4$ )Nr½   r¾   )rD  rÅ  rC  ÚpytreeÚtree_unflattenr¸  )	Únew_tensor_argsÚnew_non_tensor_argsr¯  Ú
it_tensorsÚit_non_tensorsÚ	is_tensorr  Ú	args_specÚis_arg_tensors	          €€rˆ   Úunflatten_argsÚ3ExternKernel.process_kernel.<locals>.unflatten_args
  sƒ   ø€ ð ˆFÜ˜oÓ.ˆJÜ!Ð"5Ó6ˆNÛ*�	ÞØ—M‘M¤$ zÓ"2Ö3à—M‘M¤$ ~Ó"6Ö7ñ	 +ô
 ×%Ò% f¨iÓ8ˆAØ—5‘5˜ Ó$ a§e¡e¨H°bÓ&9Ð9Ð9rŠ   Tre  r!  )rþ   r0  rA   zEsparsity not handled. Please file issue for sparse inference weights.r°  z Found from : 
 )rH
  rÑ   rI
  rÑ   r¶   ztuple[list[_T], dict[str, _T]])2rF
  Útree_flattenrÅ  r„   r€   ÚGeneratorStater    rn   r  r  rí   Úcreate_symintnoder¶	  r
  rO  ro  rs  Ú	constantsÚtorchbind_constantsr¸	  Ú	get_valuer  rµ  Úirr  rÊ   r°   r!  Údefault_generatorsÚclone_staterÿ   r  r×	  rb  r¸  r
   rÝ  Ú_higher_order_opsÚeffectsÚwith_effectsr/   r4   r0   r£   r¤   ÚTensorÚ	is_sparserB   Úgraph_partitionÚdisable_cudagraphs_reason)r  r…	  r½   r¾   Úbinded_argsÚ	args_flatÚtensor_argsÚnon_tensor_argsrÓ	  rO
  r‡   Úexample_argsÚdevice_indexÚnew_argsÚ
new_kwargsÚexample_outputrÿ	  rí   Únode_meta_valÚctxÚexample_out_lir  Úmsgr°  rM
  rN
  s                           @@rˆ   Úprocess_kernelÚExternKernel.process_kernelí  sö  ù€ ð  $Ñ6ˆä%×2Ò2°;Ó?Ñˆ	�9àˆàˆØ%'ˆÛˆCØ× Ñ Ü˜3¤Ó'×O´
¸3ÄÓ0OÔ,Oôð ˜R× Ø×"Ñ" 3Ö'ä˜c¤4×(Ñ(ÜŸ'™'×*Ñ*×4Ñ4×FÑFÀsÐQUÐFÐV�CØ×&Ñ& sÖ+ñ ð	:Ø)ð	:Ø@Lð	:à+÷	:ð 	:ñ 6AÓA²[°×(Ñ(¨Ö+±[ˆÐAó ˆAÜ$ Q×'Ó'Ü% a°Ô5ñ ð ð	 	ô ˆAô ˜a¤×*Ñ*¨q¯z©z«|¼q¿w¹w×?PÑ?PÓ/PØ×#Ñ#¤A§G¡G×$5Ñ$5°a·j±j³lÑ$CÖDä˜q¤(×+Ñ+Ø—J‘J“L¤A§G¡G×$?Ñ$?Ó?à×#Ñ#¤A§G¡G×$?Ñ$?ÀÇ
Á
ÃÑ$MÖNÜ˜Aœ×/Ñ/Ø×#Ñ# A§K¡K£M×2Ü˜AœuŸ™×1Ñ1×@Ñ@×AÑAØ Ÿx™xŸ~™~�Ø—x‘x—}‘}¨Ó.°<Ñ3KÐKÐKØ×#Ñ#Ü—J‘J×1Ñ1°,Ñ?×KÑKÓM÷ð ×#Ñ#Ô$5°aÀTÑ$J×Kñ' ñ*  .¨lÓLÑˆÙ Ð8¨ZÑ8ˆàJNÐÜŸ™×-Ñ-Ð-ˆ9Õ-ÜŸN™N×/Ñ/×3Ñ3°EÓ:ˆMÜ0;³ˆCÜ�~‰~×$Ñ$¬×(?Ñ(?×(GÑ(G×(TÑ(TÒTà -¨aÑ 0�Ü<¼Q¿^¹^ÓL�âÜ 	¬1¯>©>¸>ÔJ÷ ä 9Ø˜>¨=ó!Ðô ˜n¬t´U¨m×<Ñ<ð Ñàð 	ó  ˆAä˜1œeŸl™l×+Ó+Ø—K—K‘KÜ×.×.Ñ.à]�Ü"#§'¡'×"6Ñ"6×";Ñ";×"?Ñ"?ÀÈtÓ"TÐT�;ÕTØ ˜EÐ!2°;°-Ð@�CØ47”—‘Ö1ñ  ð ØØØØð
ð 	
ùòY B÷j •ús   Ã2S;Ï6T Ô 
Tc                ó\  • [        U[        5      (       d   [        U5      5       e[        U[        5      (       a  U$ UR	                  5       n[
        R                  R                  UR                  5       5      nUc   eUR                  5       nUbÖ  SUR                  ;   aÆ  [        U[        [        [        45      (       a¦  [        UR                  [        5      (       a‡  UR                  S   R                  [         R"                  S9(       d/  UR                  S   R                  [         R$                  S9(       a)  UR'                  [)        UR+                  5       5      5        OUR-                  5         [.        R0                  " UR+                  5       SS9u  pVUS   nUR3                  5       " U5      n[
        R                  R4                  R7                  X†5      n[
        R                  R4                  R9                  X‡5      n	[
        R                  R4                  R;                  X‡5      n
[=        Xy5      U
-   nX‹:w  a  [>        RA                  SU	U
U5        [B        e[        URD                  [G        URI                  5       URK                  5       UR+                  5       U	U
SS9S	9$ )
z€
In order to pass this to an extern kernel we need a
ReinterpretView not a View.  This allows us to avoid some
unneeded copies.
r0  rÑ	  r  r}   r   z@convert_to_reinterpret_view failed: stride=%s offset=%s index=%sFr³  rL  )&r„   ro  r°   rS  rp  rn   r  rÇ  rs  r¨  rb  rr  rÒ  rN  r  rk  r  rj  rl  rJ  r-   r	  r<  rC   r   r  r  r  Ústride_varsÚ
offset_varrf   rÿ  r¶  rÚ  rM  rP  r  r  )r  r‡   Úx_unwrap_viewrð  Úx_unwrap_view_fx_nodeÚ
index_argsr’  rç  rÊ   rU  rQ  Úexpecteds               rˆ   Úconvert_to_reinterpret_viewÚ(ExternKernel.convert_to_reinterpret_viewl  s4  € ô ˜!œX×&Ñ&Ð/¬¨Q«Ó/Ð&Ü�aœ×)Ñ)ØˆHð Ÿ™›ˆÜ�g‰g× Ñ  ×!7Ñ!7Ó!9Ó:ˆØ‰ÐˆØ #× 3Ñ 3Ó 5Ðð "Ñ-ØÐ.×3Ñ3Ó3Ü˜=¬?¼FÄJÐ*O×PÑPÜ˜=×/Ñ/´×@Ñ@à%×*Ñ*¨5Ñ1×?Ñ?Ü"'×"5Ñ"5ð @ö ð )×-Ñ-¨eÑ4×BÑBÜ"'×"8Ñ"8ð Cö ð
 ×7Ñ7Ü.¨}×/EÑ/EÓ/GÓHõð ×'Ñ'Ô)ä!-×!@Ò!@Ø�J‰J‹L ñ"
Ñˆ
ð   ‘]ˆ
Ø—‘Ô  Ó,ˆä—‘× Ñ ×5Ñ5°eÓHˆÜ—'‘'×"Ñ"×.Ñ.¨uÓAˆÜ—‘×!Ñ!×,Ñ,¨UÓ?ˆÜ˜ZÓ1°FÑ:ˆàÓÜ�I‰IØRØØØô	ô &Ð%äØ—‘ÜØ×,Ñ,Ó.Ø—k‘k“mØ—Z‘Z“\ØØØññ

ð 
	
rŠ   c           	     ó`  • Uc
  [        5       $ [        U[        [        R                  R
                  R                  [        45      (       a	  [        US9$ [        U[        5      (       am  [        5          [        R                  R                  [        R                  " UR                   UR#                  5       UR%                  5       S95      sS S S 5        $ [        U[&        5      (       a  U$ [        U[(        5      (       a  U R+                  UR,                  5      $ [        U[.        5      (       a1  [/        U R+                  UR,                  5      UR1                  5       S9$ [        U[2        5      (       a@  UR5                  5         [7        UR9                  5       5      (       a   U R;                  U5      $ [        U[>        5      (       a  UR5                  5         U$ [        U[@        [        45      (       a  U$ U RC                  U5      $ ! , (       d  f       GNF= f! [<         a     Nsf = f)N)r)  )r  r  rL  )"rA  r„   r    rª   r«   r¬   r­   r…   r¯   r¿  r;   rn   r  Úadd_tensor_constantr  rT  r  r  r  ri  r   r¶	  rM  rS  r  ro  r  r
  rp  rw
  rÚ  rq  ÚNonTensorObjrB
  r¹	  s     rˆ   r¶	  ÚExternKernel.realize_input²  s—  € à‰9Ü'Ó)Ð)Ü�aœ$¤§¡× 3Ñ 3× ;Ñ ;¼SÐA×BÑBÜ(¨aÑ0Ð0Ü�aœ×"Ñ"ô (Õ)Ü—w‘w×2Ñ2Ü—L’L §¡°·±³ÀaÇlÁlÃnÑUó÷ *Ñ)ô �aœ×(Ñ(ØˆHÜ�aœ×#Ñ#Ø×$Ñ$ Q§V¡VÓ,Ð,Ü�aœ×)Ñ)Ü"Ø×&Ñ& q§v¡vÓ.°q·|±|³~ñð ô �aœ×"Ñ"Ø�I‰IŒKÜ$ Q§]¡]£_×5Ñ5ðØ×:Ñ:¸1Ó=Ð=ô �aœ×$Ñ$à�I‰IŒKØˆHÜ�aœ,Ô(=Ð>×?Ñ?ØˆHØ�~‰~˜aÓ Ð ÷3 *Ö)ûô" +ó Ùðús   Á4AHÆ(H  È
HÈ 
H-È,H-c                óÄ   • [        U5      (       a@  [        UR                  5       5      S:X  a  U$ UR                  5        H  nUS:X  d  M  Us  $    U R                  U5      $ r"  )r
  rÈ   r2  rB
  )r  r‡   r  s      rˆ   Úrequire_stride1ÚExternKernel.require_stride1Ö  sR   € ä  ×#Ñ#Ü�1—<‘<“>Ó" aÓ'Ø�ØŸ,™,ž.�Ø˜Q•;Ø’Hñ )ð �~‰~˜aÓ Ð rŠ   c                ó’
  • Uc  Uc   eUR                  5       S;   a	  U(       d  U$ [        U5      (       Ga/  [        UR                  5       [        5      (       a±  U(       aš  [        X5      =(       a(    [        UR                  5       R                  5      (       + n[        USSU(       aJ  [        [        R                  R                  R                  UR                  5       R                  5      5      OUUS9  U$ [        USSS UUS9  U$ [        UR                  5       [        [        45      (       ay  U(       a$  UR                  5       R!                  U5      (       d>  U(       aG  [#        X1R                  5       R                  UR%                  5       5      (       a  Ub  ['        X5      $ U$ [        UR                  5       =n[(        5      (       a”  [        UR+                  5       =n[        5      (       a  [-        S5      e[        U[        5      (       aO  U(       a  UR!                  U5      (       d0  U(       a+  [#        X7R                  UR%                  5       5      (       a  U$ [        U[.        5      (       ak  U(       a$  UR                  5       R!                  U5      (       d>  U(       a9  [#        X1R                  5       R                  UR%                  5       5      (       a  U$ [        U[0        5      (       aÞ  [        UR2                  [4        5      (       a¿  [        UR2                  [6        5      (       d   [        UR9                  5       =n5      (       a€  [;        US5      (       ao  [        UR2                  [<        5      (       dP   U R?                  UR2                  5      Ul        U(       a  U RA                  XUS9$ U(       a  U RC                  XUS9$  S n	UR%                  5       n
UbÅ  [        R                  R                  n[G        [I        UR%                  5       5      5       Vs/ s HJ  nURK                  X<   S	5      (       d  M  URM                  UR%                  5       U   S
5      (       d  MH  UPML     n	nU	 H.  n[N        RP                  RR                  RU                  XS	S5      nM0     U RW                  U5      n[        USSUUUS9  U(       a  [        X5      (       d   e U$ U	(       a<  U
b  Uc   e[N        RP                  RR                  RY                  X5      n['        X5      $ U$ ! [D         a     GNgf = fs  snf )N)r   rA   TF)rf  rp  rq  r@  ro  zHthe MutationLayoutSHOULDREMOVE's real layout shouldn't be FlexibleLayoutrM  rr  r   rà   rA   )-rú  r
  r„   r  r  rv  r2   r  rO  rû   rn   r  r  Úsize_hints_or_throwrP  r›  ru  rE  r	  rZ  rÅ  rË  rü  r†  r   rM  ro  rS  rp  r³  ré	  rw
  Úrequire_stride_orderÚrequire_exact_stridesrÚ  rÉ   rÈ   r=  r—  r  rµ  ÚloweringÚslice_rB
  r#  )r  r‡   rÓ   rN  r@  Úuse_current_stride_orderÚmutation_layoutrË  rp  Úexpanded_dimsÚ	orig_sizer  rË   rB  s                 rˆ   Úrequire_stridesÚExternKernel.require_stridesà  s„  € ð Ñ  MÑ$=Ð=Ð=à�;‰;‹=˜FÓ"®=ØˆHô ! ×#Ò#Ü˜!Ÿ,™,›.¬.×9Ñ9Þô 0RØó0÷ 0Kä3°A·L±L³N×4IÑ4IÓJÔJð -ô *ØØ#Ø(-ö  8ô -Ü !§¡× 0Ñ 0× DÑ DØ$%§L¡L£N×$9Ñ$9ó!"ôð "'à&3òð �Hô *ØØ#Ø(-Ø%)Ø&3Ø&3òð �HÜ˜AŸL™L›N¬[¼/Ð,J×KÑKÞ˜1Ÿ<™<›>×;Ñ;¸E×BÑBæ!Ü1Ø%§|¡|£~×'<Ñ'<¸a¿j¹j»l÷ñ ð %Ñ0ô 4°AÓEðð ðô
 Ø$%§L¡L£NÐ2�Ô5O÷ñ ô Ø$3×$?Ñ$?Ó$AÐA�[ÄN÷ñ ô )Øbóð ô   ¬[×9Ñ9Þ˜{×<Ñ<¸U×CÑCæ%Ü5Ø)×+=Ñ+=¸q¿z¹z»|÷ñ ð
 �Hô �aœ×%Ñ%Þ�q—|‘|“~×7Ñ7¸×>Ñ>æÜ-Ø!§<¡<£>×#8Ñ#8¸!¿*¹*»,÷ñ ð
 ˆHä�qœ)×$Ñ$Ü˜1Ÿ6™6¤8×,Ñ,Ü˜qŸv™v¤×7Ñ7Ü%°Q·]±]³_Ð&D k×EÑEÜ˜ V×,Ñ,Ü˜{×/Ñ/Ô1B×CÑCðØ×8Ñ8¸¿¹Ó@�”ÞØ×3Ñ3Ø°ð 4ð ð ö #Ø×4Ñ4Ø¸ð 5ð ð ð #ð .2ˆØ—J‘J“Lˆ	ØÑ$Ü—w‘w×'Ñ'ˆHô œs 1§:¡:£<Ó0Ô1óâ1�AØ×3Ñ3°MÑ4DÀa×Hó ð ×1Ñ1°!·*±*³,¸q±/À1×E÷ Ù1ð ð ó %�Ü—O‘O×,Ñ,×3Ñ3°A¸A¸qÓA’ñ %ð
 �N‰N˜1ÓˆäØØØ!ØØ'Ø'ò	
ö Ü5°a×?Ñ?Ð?Ñ?ð ˆö ØÑ(¨]Ñ-FÐFÐFÜ—‘×(Ñ(×/Ñ/°Ó=ˆAä2°1ÓDÐDàˆøôW 'ó Úðüòs*   Î
6T3 ÏT3 Ð,UÑ&UÑ7UÔ3
UÕ Uc           
     óº   • U R                  UU Vs/ s H:  n[        U[        R                  5      (       a  UR                  R
                  OUPM<     snUS9$ s  snf )N)rN  r@  )rŠ
  r„   r  ÚSymIntr²   r)  )r  r‡   rN  r@  rç   s        rˆ   rƒ
  Ú"ExternKernel.require_exact_strides„  s]   € ð ×"Ñ"ØáKXóÚKXÀaœz¨!¬U¯\©\×:Ñ:�—‘—’ÀÒAÉ=ñð (ð #ð 
ð 	
ùòs   ‘AA
c                ó"   • U R                  XUS9$ )N)rÓ   r@  )rŠ
  )r  r‡   rÓ   r@  s       rˆ   r‚
  Ú!ExternKernel.require_stride_order�  s   € ð ×"Ñ" 1ÀÐ"ÐOÐOrŠ   c                ó.   • U R                  U[        5      $ rƒ   )r‚
  rk  r¹	  s     rˆ   Úrequire_channels_lastÚ"ExternKernel.require_channels_last–  s   € à×'Ñ'¨Ô+<Ó=Ð=rŠ   c                ó.   • U R                  U[        5      $ rƒ   )r‚
  rm  r¹	  s     rˆ   Úrequire_channels_last_3dÚ%ExternKernel.require_channels_last_3dš  s   € à×'Ñ'¨Ô+=Ó>Ð>rŠ   c                ó�   • SS jnU" U5      (       a  U$ U R                  U[        R                  UR                  5       5      5      $ )Nc                óæ   •  U R                  5       nU[        R                  R
                  ;   =(       a'    [        R                  R
                  U   R                  $ ! [        [        4 a     gf = fr  )rs  ÚAttributeErrorrÚ  rn   r  rT
  Ú	is_mkldnn)r‡   r¿   s     rˆ   Úis_mkldnn_tensorÚ9ExternKernel.require_contiguous.<locals>.is_mkldnn_tensor   s]   € ðØ—z‘z“|�ð œ1Ÿ7™7×,Ñ,Ñ,×R´·±×1BÑ1BÀ4Ñ1H×1RÑ1RÐRøô #Ô$7Ð8ó Ùðús   ‚A ÁA0Á/A0©r‡   r€   r¶   r•   ©rƒ
  r  r  r	  )r  r‡   r›
  s      rˆ   r  ÚExternKernel.require_contiguousž  sC   € ô	Sñ ˜A×ÑØˆHà×,Ñ,Ø”>×4Ñ4°Q·Z±Z³\ÓBóð rŠ   c                óh   • U R                  U[        R                  UR                  5       5      5      $ rƒ   rž
  r¹	  s     rˆ   Úrequire_contiguous_stridesÚ'ExternKernel.require_contiguous_strides°  s-   € ð ×(Ñ(ØŒ~×0Ñ0°·±³Ó>ó
ð 	
rŠ   c                ó   • g rƒ   r™   rŸ  s    rˆ   r
  ÚExternKernel.apply_constraint¸  r5  rŠ   c                óì  • [        U[        5      (       d   [        U5      5       e[        U[        5      (       d  [        U5      nU R                  (       d   S5       e[        U5      n[        U R                  5      nX4:  aq  [        R                  SU R                  XC-
  5        [        X45       H?  nU R                  U   S   nUR                  Xb;   a  X&   OU R                  U   S   5        MA     U$ )Nz/ExternKernel.arg_properties should not be emptyzv%s has %d unprovided positional arguments. Will check if they are in the keyword arguments or will use default values.r¿   rb  )r„   r   r°   r£   rü	  rÈ   rÿ  r¶  rû	  rÉ   rÅ  )rŒ  r½   r¾   Ún_argsÚ
n_pos_argsrË   Úarg_names          rˆ   Úfill_non_provided_argsÚ#ExternKernel.fill_non_provided_args»  sç   € ô ˜$¤×)Ñ)Ð5¬4°«:Ó5Ð)Ü˜$¤×%Ñ%Ü˜“:ˆDØ×"×"ÐUÐ$UÓUÐ"ä�T“ˆÜ˜×,Ñ,Ó-ˆ
ð ÓÜ�I‰Ið^à× Ñ ØÑ#ô	ô ˜6Ö.�Ø×.Ñ.¨qÑ1°&Ñ9�Ø—‘àÓ)ð Ò$à×,Ñ,¨QÑ/°Ñ@öñ /ð ˆrŠ   c                óž  • [         R                  R                  (       Ga`  / nS nU(       ae  U R                  (       aT  [	        U R
                  5      [	        U5      :X  d   S5       eU R                   Vs0 s H  oDR                  S5      U_M     nn[        U R
                  5       HÕ  u  pVUb3  Uc   eUR                  X   5      nU(       a  UR                  S5      OS nOb[	        U R                  5      U-   n	U R                  (       a7  U	[	        U R                  5      :  a  U R                  U	   R                  S5      OS nUR                  [         R                  R                  R                  Xh5      5        M×     U$ U R
                   V
s/ s H,  n
[         R                  R                  R                  U
5      PM.     sn
$ s  snf s  sn
f )NzDnames passed to codegen_const_args does not match self.constant_argsr¿   r°   )rn   r  r+
  rü	  rÈ   ró	  r¸  rñ   rj  rÅ  rw  Úval_to_arg_str)rŒ  rù  r¯  Úname_to_arg_propertiesrÓ	  rË   r‡   ÚpropÚtype_rò   r�  s              rˆ   Úcodegen_const_argsÚExternKernel.codegen_const_argsß  sŠ  € Ü�7‰7××ÐØˆFð
 &*Ð"Þ˜×,×,Ü˜4×-Ñ-Ó.´#°e³*Ó<ð ØZóÐ<ð 59×4GÒ4Gó*Ú4G¨S—G‘G˜F“O SÒ(Ñ4Gð 'ð *ô " $×"4Ñ"4Ö5‘�Ø)Ñ5Ø Ñ,Ð,Ð,Ø1×5Ñ5°e±hÓ?�DÞ04˜DŸH™H VÔ,¸$‘Eä˜dŸk™kÓ*¨QÑ.�Cð  ×.×.°3¼¸T×=PÑ=PÓ9QÓ3Qð ×+Ñ+¨CÑ0×4Ñ4°VÔ<à!ð ð
 —‘œaŸg™g×2Ñ2×AÑAÀ!ÓKÖLñ 6ð ˆMàDH×DVÒDVÓWÒDV¸q”A—G‘G×(Ñ(×7Ñ7¸Ö:ÑDVÑWÐWùò'*ùò& Xs   Á4GÆ3G
c                ó   • [         R                  R                  (       aD  U R                  b7  U R	                  / U R
                  QU R                  QU R                  5      nSnOU R
                  nSn/ n[        U5       Hå  u  pE[         R                  R                  (       a‰  U R                  (       a  U[        U R                  5      :  d   S5       eU R                  U   R                  S5      nUR                  [         R                  R                  R                  XV5      5        M­  UR                  [         R                  R                  R                  U5      5        Mç     U(       a  UR                  U R!                  5       5        U$ )NFTz-Invalid access to ExternKernel.arg_propertiesr°   )rn   r  r+
  rû	  r©
  rj  ró	  r¾   rñ   rü	  rÈ   r¸  rÅ  rw  r¬
  r®  r°
  )rŒ  rj  Úneed_codegen_constant_argsr½   rË   r‡   r¯
  s          rˆ   Úcodegen_argsÚExternKernel.codegen_args   s*  € Ü�7‰7×× 4×#3Ñ#3Ñ#?à×0Ñ0Ø3�$—+‘+Ð3 × 2Ñ 2Ð3°T·[±[óˆFð */Ñ&à—[‘[ˆFØ)-Ð&àˆÜ˜fÖ%‰DˆAÜ�w‰w×"×"Ø×*×*¨q´3°t×7JÑ7JÓ3KÓ/Kð ØCóÐKð ×+Ñ+¨AÑ.×2Ñ2°6Ó:�Ø—‘œAŸG™G×0Ñ0×?Ñ?ÀÓIÖJà—‘œAŸG™G×0Ñ0×?Ñ?ÀÓBÖCñ &ö &Ø�K‰K˜×/Ñ/Ó1Ô2ØˆrŠ   c                óü   • X;   a  UR                  U5      $ XR                  ;   a  U R                  R                  U5      $ U R                  R                  U5      =nb  UR                  S5      $ [        U S35      e)zÂGiven an argument name, queries for values in (in order):
1. any provided kwargs for this function.
2. the class self.kwargs member.
3. any available default arguments in self.allarg_properties.rb  z not in self.allarg_properties)r¸  r¾   rý	  rü  )rŒ  r¨
  r¾   rÓ	  s       rˆ   Úget_kwargs_valueÚExternKernel.get_kwargs_value  st   € ð
 ÓØ—:‘:˜hÓ'Ð'Ø—{‘{Ó"Ø—;‘;—?‘? 8Ó,Ð,Ø×)Ñ)×-Ñ-¨hÓ7Ð7ˆCÑDØ—7‘7˜?Ó+Ð+Ü ˜zÐ)GÐHÓIÐIrŠ   c           	     óö  • [         R                  R                  (       aù  U R                  b  [	        U R
                  5      S:X  a  / $ / nU R                   H½  nU(       a  US:X  a  M  U R                  U5      n[        U[        5      (       a  UR                  U5        MK  U R                  c   eU R                  R                  U0 5      R                  S5      nUR                  [         R                  R                  R                  XE5      5        M¿     U$ U R                  R!                  5        VVs/ s H3  u  pdU S[         R                  R                  R                  U5       3PM5     nnnU$ s  snnf )Nr   rù   r°   rö  )rn   r  r+
  rû	  rÈ   r
  rù	  r·
  r„   r    rÅ  rý	  r¸  rw  r¬
  r¾   r‘  )rŒ  Úskip_outr¾   r¨
  rŠ  r¯
  Úks          rˆ   Úcodegen_kwargsÚExternKernel.codegen_kwargs'  s8  € Ü�7‰7××Ø×ÑÑ+´°D×4FÑ4FÓ0GÈ1Ó0Là�	àˆFØ ×>Ô>�Þ ¨EÓ 1áà×)Ñ)¨(Ó3�Ü˜a¤×&Ñ&Ø—M‘M !Ö$à×1Ñ1Ñ=Ð=Ð=Ø ×2Ñ2×6Ñ6°xÀÓD×HÑHÈÓP�EØ—M‘M¤!§'¡'×"6Ñ"6×"EÑ"EÀaÓ"OÖPñ ?ð" ˆð !ŸK™K×-Ñ-Ô/ôâ/‘D�Að �#�Q”q—w‘w×+Ñ+×:Ñ:¸1Ó=Ð>Ó?Ù/ð ñ ð ˆùó	s   Ä6:E5c                óÊ   • U R                   bS  U R                   R                  n[        USS5      nUR                  SS5      nUR	                  SS5      S   nU SU 3nU$ SnU$ )	Nrœ   Úunknown_namespacer2
  r3
  r*
  rA   r   Ú
unknown_op)r
  rÝ  r¼   r.
  Úrsplit)rŒ  rÝ  Úop_namespaceÚop_names       rˆ   Úget_op_nameÚExternKernel.get_op_nameA  sv   € Ø�<‰<Ñ#Ø—\‘\×(Ñ(ˆFÜ" 6¨<Ð9LÓMˆLØ'×/Ñ/°¸'ÓBˆLØ'×.Ñ.¨s°AÓ6°qÑ9ˆLØ%˜ a¨ xÐ0ˆGð ˆð #ˆGØˆrŠ   c                ó  • [         R                  (       aê  [        R                  R                  (       dÊ  [        U R                  5       5      S:X  a  g [        R                  R                  R                  U R                  5       5      n[        R                  R                  R                  U R                  5       5      nU R                  5       nUR                  SU R                  5        SU SU SU< S3	5        g g g )Nr   zassert_size_stride(rÊ  r  )rB   Úsize_assertsrn   r  r+
  ri   r	  rw  Úcodegen_shape_tupler2  rÄ
  ry  rs  )rŒ  r
  r  r  rÃ
  s        rˆ   Úcodegen_size_assertsÚ!ExternKernel.codegen_size_assertsL  s¸   € Ü××¤q§w¡w×':×':ä˜TŸ]™]›_Ó-°Ó2ØÜ—7‘7×'Ñ'×;Ñ;¸D¿M¹M»OÓLˆDÜ—W‘W×)Ñ)×=Ñ=¸d¿o¹oÓ>OÓPˆFØ×&Ñ&Ó(ˆGØ×ÑØ% d§m¡m£oÐ%6°b¸¸¸bÀÀÈÈ7É+ÐUVÐWõð (;ÐrŠ   c           	     ój  • [         R                  (       až  [        R                  R                  (       d~  U R                  5       nU[        R                  R                  ;  nU R                  5       nU(       a!  UR                  SU S[         SU< S35        g UR                  SU SU S35        g g g )Nzassert_alignment(rÊ  r  z	# buffer z (op: z) is assumed to be not aligned)
rB   Úalignment_assertsrn   r  r+
  rs  rz  rÄ
  ry  rb   )rŒ  r
  r¿   ÚalignedrÃ
  s        rˆ   Úcodegen_alignment_assertsÚ&ExternKernel.codegen_alignment_assertsX  sš   € Ü×#×#¬A¯G©G×,?×,?Ø—=‘=“?ˆDØ¤!§'¡'×";Ñ";Ñ;ˆGØ×&Ñ&Ó(ˆGÞØ×!Ñ!Ø'¨ v¨R´Ð/@ÀÀ7Á+ÈQÐOõð ×!Ñ!Ø ˜v V¨G¨9Ð4RÐSõð -@Ð#rŠ   c                óò   • [         R                  R                  (       a  [        R                  R
                  (       a  gUR                  5         U R                  5       nUR                  SU SU S35        g)zS
Track outputs of fallback operators if config.test_configs.track_memory_lifecycle
Nztrack_tensor(z, 'z'))	rB   Útest_configsÚtrack_memory_lifecyclern   r  r+
  Ú"write_memory_track_allocation_oncers  ry  )rŒ  r
  r¿   s      rˆ   Úcodegen_memory_trackingÚ$ExternKernel.codegen_memory_trackingf  sV   € ô ×"Ñ"×9×9¼Q¿W¹W×=P×=PØà×2Ñ2Ô4Ø�}‰}‹ˆØ×Ñ˜M¨$¨¨s°4°&¸Ð;Õ<rŠ   c                óN   • U R                  5       nU R                  5       nU/ /U4$ )z4
get output sizes and strides, for template_codegen
)r	  r2  )rŒ  rê  rë  s      rˆ   Úget_group_strideÚExternKernel.get_group_strideq  s*   € ð —‘“ˆØ—/‘/Ó#ˆà�rˆ{˜GÐ#Ð#rŠ   c                ó¸  • [         R                  R                  nU R                  5       nU R	                  5       nU Vs/ s H  oAR                  U5      PM     nn[        [        U5      5       Vs/ s H  n[        SU 35      PM     nn[        [        [        U5      5      UR                  SS9n[        U5       VV	s0 s H  u  p‰X˜_M	     n
nn	[        [        U
5      5       Vs/ s H  oZU   PM	     nnU Vs/ s H  oVU   PM	     nnU R                  5       nU" U5      n[         R                  R                  R                  XbU/5      u  pïn[        S5      u  nn[        [!        Xo" U Vs/ s H  nU" U5      PM     sn5      5      5      n[#        [$        R&                  " U5      U5      nU[)        U5      4$ s  snf s  snf s  sn	nf s  snf s  snf s  snf )z3
Manually get canonicalization of the output index
r<
  T)râ  rB  Úc)rn   r  r  r	  r2  r  rÉ   rÈ   rg   ré  rs  rñ   r  r�  rM   r¥   rÒ   rj   rª   r#  r¤   )rŒ  r  r`  rU  r‡   rË   r‰  Úindex_orderrò   ró   rô   rÓ   r_  rÊ   Ú	new_sizesrÍ   r£  rø   Úadd_varÚreplacements                       rˆ   ÚcanonicalizeÚExternKernel.canonicalizez  sœ  € ô
 —7‘7×#Ñ#ˆØ—‘“ˆØ—/‘/Ó#ˆÙ29Ó:²'¨Q×%Ñ% aÖ(±'ˆÐ:ä;@ÄÀUÃÔ;LÓMÒ;L°aÔ(¨1¨Q¨C¨Ö1Ñ;Lˆ
ÐMäœU¤3 w£<Ó0°g×6IÑ6IÐSWÑXˆÜ+4°[Ô+AÔBÒ+A™x˜s�#’(Ñ+AˆÑBÜ$)¬#¨f«+Ô$6Ó7Ò$6˜q˜”Ñ$6ˆÐ7Ù-2Ó3ªU¨ ”m©Uˆ
Ð3Ø×#Ñ#Ó%ˆÙ˜
Ó#ˆä%&§W¡W×%5Ñ%5×%EÑ%EØ ˜wó&
Ñ"ˆ	˜Fô ! Ó%‰
ˆˆ7Üœ3˜z¨7É	Ó3RÊ	À1±G¸A¶JÉ	Ñ3RÓ+SÓTÓUˆäœ5Ÿ<š<¨Ó.°Ó<ˆØ”e˜IÓ&Ð&Ð&ùò+ ;ùâMùó CùÚ7ùÚ3ùò 4Ss#   ¿F=Á1GÃ GÃ'GÃ;GÅ/Gc                óæ   • U(       a  [         O[        n[        R                  X5      nU R                   H  nX2" U5      -  nM     U R
                  R                  5        H  nX2" U5      -  nM     U$ rƒ   )Úmaybe_free_unbacked_symbolsÚmaybe_free_symbolsr…  ra  ró	  r¾   r¦   )rŒ  ri  Úmaybe_get_symbolsr  rÓ	  s        rˆ   ra  Ú!ExternKernel.get_free_symbol_uses™  sp   € ö ,9Õ'Ô>Pð 	ô ×-Ñ-¨dÓBˆØ×%Ô%ˆCØÐ" 3Ó'Ñ'ŠAñ &à—;‘;×%Ñ%Ö'ˆCØÐ" 3Ó'Ñ'ŠAñ (àˆrŠ   c           
     ó,  • [        U SS 5      nSU< 3/nU[        R                  " U 5       Vs/ s H'  nUR                   S[        XR                  5       3PM)     sn-  nUR	                  SU R
                  < 35        U R                  U5      $ s  snf )Nrö	  zpython_kernel_name=rö  r÷  )r¼   r¯  Úfieldsr¿   rÅ  r}  rÓ  )rŒ  rƒ	  rÐ  r°  s       rˆ   r   ÚExternKernel.__str__©  s�   € Ü˜dÐ$8¸$Ó?ˆà! +¡Ð1ð
ˆð 	ä$×+Ò+¨DÔ1ó
â1�ð �z‰zˆl˜!œG D¯*©*Ó5Ð6Ó7Ù1ñ
ñ 	
ˆð 	�‰�| D×$4Ñ$4Ñ#7Ð8Ô9Ø�‰˜uÓ%Ð%ùò
s   ®.B)rý	  r   rü	  ró	  r÷	  r
  r¾   r 
  rû	  rù	  rõ	  rö	  r
  rÿ	  ©r™   NNNNr™   N)r¿   r�  rN  r  rj  r§	  ró	  rè  r¾   údict[str, Any] | Nonerõ	  rô	  rö	  r�  r÷	  r�  rù	  rø	  rû	  rú	  r¶   r·   rã  rå  r~  rƒ   )r
  rs   rƒ	  r�  r¶   r·   ©r
  rs   r¶   r·   ©r÷	  r�  r¶   r·   )rö	  r�  r¶   r·   rŽ  r›  )r‡   r€   r¶   r   )r…	  r|   r½   r   r¾   r   r¶   zituple[Any, list[Any], list[Any], Callable[[Any, Any], Any], Optional[dict[sympy.Symbol, pytree.KeyPath]]])r‡   r€   r¶   rS  r$  )NNF)
r‡   r€   rÓ   úOptional[Sequence[int]]rN  rŒ  r@  r•   r¶   r€   r   )r‡   r€   rN  rš  r@  r•   r¶   r€   )r‡   r€   rÓ   r¢  r@  r•   r¶   r€   )r½   rè  r¾   r~  r¶   rè  )rù  rz  r¶   r—   ©r¶   r—   )r¨
  rÃ   r¾   r   r¶   r   )rº
  r•   r¶   r—   )r¶   z'tuple[list[Sequence[Expr]], list[Expr]])r¶   ztuple[Expr, Sequence[Expr]]r«  )Ar›   rœ   r�   rž   r®  ró	  rŸ   r¯  r°  r¥   r¾   rõ	  rö	  r÷	  r£   rù	  rû	  rü	  rý	  rþ	  rÿ	  r 
  rÀ  rØ  rÛ  r
  rë  r"
  r&
  r
  r
  r
  r?
  r±  rB
  rF  rn
  rw
  r¶	  r~
  rŠ
  rƒ
  r‚
  r’
  r•
  r  r¡
  r
  r©
  r°
  r´
  r·
  r¼
  rÄ
  rÉ
  rÎ
  rÔ
  r×
  rß
  rY   ra  r   rE  r    rª  r«  s   @rˆ   r²  r²  "  sþ  ø‡ ñð
 $&€M�=Ó%Ø(×.Ò.¸tÑD€FˆNÓDØ-1€KÐ*Ó1Ø(,Ð˜Ó,Ø%)€O�]Ó)ð 4?×3DÒ3DØñ4Ð! =ó ð +/€KÐ'Ó.Ø59€NÐ2Ó9Ø3>×3DÒ3DØñ4ÐÐ0ó ð =AÐÐ9Ó@Ø<G×<MÒ<MØñ=ÐÐ9ó ð .9×->Ò->ÈtÑ-TÐÐ*ÓTð (*Ø(,Ø15Ø,0Ø)-Ø79Ø.2ð.àð.ð ð.ð :ð	.ð
 %ð.ð &ð.ð /ð.ð *ð.ð 'ð.ð (5ð.ð ,ð.ð 
÷.ð .ô@.ôô#$ôJ!ð KOðMØ+ðMØ:GðMà	õMô""ö;ô0ô+ô$ð
 ó
ó ð
ð ð|
Ø!ð|
Ø*-ð|
Ø9<ð|
ð
ó|
ó ð|
ð| óC
ó ðC
ðJ ó!!ó ð!!ðF ó!ó ð!ð ð *.Ø6:Ø#ðaàðað 'ðað 4ð	að
 ðað 
ôaó ðaðF àQVð	
Øð	
Ø'9ð	
ØJNð	
à	ô	
ó ð	
ð àDIðPØðPØ,ðPØ=AðPà	ôPó ðPð
 ó>ó ð>ð ó?ó ð?ð óó ðð" ó
ó ð
ôð"Ø!ð"Ø+9ð"à	ô"öHXôBô4Jöô4	ô
ôô	=ô$ô'ñ> ˜NÓ+à$)ðØ!ðà	!ôó ,ðô
&ð †HrŠ   r²  c                  óx   ^ • \ rS rSrSS jr       S                   SU 4S jjjrS	S jrSrU =r$ )
ÚExternKernelOuti¸  c                ó&   • UR                  U 5        g rƒ   )Úgenerate_extern_kernel_outr%
  s     rˆ   r&
  ÚExternKernelOut.codegenº  ó   € Ø×*Ñ*¨4Õ0rŠ   c
                ó:  >• U R                  U5      n
[        U
[        5      (       d   [        U
5      5       e[        TU ]  S UU
UU=(       d    0 S UUUU	5
        [        R                  R                  U 5      U l	        [        R                  R                  U 5        g rƒ   )rÙ  r„   r   r°   r·  rÀ  rn   r  rÛ  r¿   rÜ  )rŒ  rN  rj  ró	  r¾   rõ	  rö	  r÷	  rù	  rû	  Úunwrapped_inputsr¹  s              €rˆ   rÀ  ÚExternKernelOut.__init__½  sŽ   ø€ ð  ×.Ñ.¨vÓ6ÐÜÐ*¬H×5Ñ5ÐM´tÐ<LÓ7MÓMÐ5Ü‰ÑØØØØØ�L�bØØØØ)Øô	
ô —G‘G×+Ñ+¨DÓ1ˆŒ	Ü	�‰×"Ñ" 4Õ(rŠ   c                ó   • gra  r™   rŸ  s    rˆ   r'  ÚExternKernelOut.should_allocateÚ  r®  rŠ   r—  rë
  ré
  )rN  rí  rj  ró  ró	  rè  r¾   úOptional[dict[str, Any]]rõ	  rô	  rö	  r�  r÷	  r�  rù	  rè  rû	  rú	  r¶   r·   r‰  )	r›   rœ   r�   rž   r&
  rÀ  r'  r    rª  r«  s   @rˆ   rð
  rð
  ¸  s•   ø† ô1ð (*Ø+/Ø15Ø,0Ø)-Ø79Ø.2ð)àð)ð !ð)ð %ð	)ð
 )ð)ð /ð)ð *ð)ð 'ð)ð (5ð)ð ,ð)ð 
÷)ð )÷:ò rŠ   rð
  c                  ó,   ^ • \ rS rSrSU 4S jjrSrU =r$ )ÚRandomSeedsiÞ  c           	     ó  >• [         R                  " [         R                  5      n[        TU ]  [        U[         R                  U/S9/ UR                  UR                  U//SS[        R                  R                  S9  g )NrÜ  zaten.randint.low_outzat::_ops::randint_low_out::call)rN  rj  ró	  rö	  r÷	  rû	  )r  r[  r%  r·  rÀ  rP  r|  r-  r)
  ÚrandintÚlow_out)rŒ  Úcountr  Úlimitsr¹  s       €rˆ   rÀ  ÚRandomSeeds.__init__ß  sl   ø€ Ü—’œUŸ[™[Ó)ˆÜ‰ÑÜØÜ—k‘kØ�Wñð
 Ø!Ÿ:™: v§z¡z°E°7Ð;Ø5ð >ÜŸ™×,Ñ,ð 	ò 	
rŠ   r™   )r   r…   r  r”  r¶   r·   ©r›   rœ   r�   rž   rÀ  r    rª  r«  s   @rˆ   rü
  rü
  Þ  s   ø† ÷
õ 
rŠ   rü
  c                  ó|   ^ • \ rS rSrSS jr      S                 S	U 4S jjjrS
S jrSS jrSrU =r	$ )ré	  iò  c                ó&   • UR                  U 5        g rƒ   )Úgenerate_extern_kernel_allocr%
  s     rˆ   r&
  ÚExternKernelAlloc.codegenó  s   € Ø×,Ñ,¨TÕ2rŠ   c	                óZ  >• U R                  U5      n	[        S U	 5       5      (       d   e[        T
U ]  S U[	        [
        [           U	5      UU=(       d    0 S UUUU5
        / U l        [        R                  R                  U 5      U l        [        R                  R                  U 5        g )Nc              3  óB   #   • U  H  n[        U[        5      v •  M     g 7frƒ   r¢	  )ræ   rË   s     rˆ   rè   Ú-ExternKernelAlloc.__init__.<locals>.<genexpr>  s   é € ÐCÒ2B¨Q”:˜a¤×(Ð(Ò2Bùrö  )rÙ  rë   r·  rÀ  r   r   r€   rø  rn   r  rÛ  r¿   rÜ  )rŒ  rN  rj  ró	  r¾   rö	  r÷	  rù	  rû	  rö
  r¹  s             €rˆ   rÀ  ÚExternKernelAlloc.__init__ö  s›   ø€ ð  ×.Ñ.¨vÓ6ÐÜÑCÑ2BÓC×CÑCÐCÐCÜ‰ÑØØÜ”œ&Ñ!Ð#3Ó4ØØ�L�bØØØØ)Øô	
ð ')ˆŒÜ—G‘G×+Ñ+¨DÓ1ˆŒ	Ü	�‰×"Ñ" 4Õ(rŠ   c                ó   • gr  r™   rŸ  s    rˆ   r'  Ú!ExternKernelAlloc.should_allocate  r  rŠ   c                ó   • [         erƒ   r¼  rŸ  s    rˆ   r
  Ú"ExternKernelAlloc.apply_constraint  r¾  rŠ   )r¿   rø  rë
  )r™   NNNr™   N)rN  r  rj  ró  ró	  rè  r¾   rú
  rö	  r�  r÷	  r�  rù	  rè  rû	  rú	  r¶   r·   r‰  r~  )
r›   rœ   r�   rž   r&
  rÀ  r'  r
  r    rª  r«  s   @rˆ   ré	  ré	  ò  sŽ   ø† ô3ð (*Ø+/Ø,0Ø)-Ø79Ø.2ð)àð)ð !ð)ð %ð	)ð
 )ð)ð *ð)ð 'ð)ð (5ð)ð ,ð)ð 
÷)ð )ô@÷"ò "rŠ   ré	  c                  óh   ^ • \ rS rSrSr        S	U 4S jjrS
S jrSS jrSS jrSS jr	Sr
U =r$ )rù  i  zH
An output buffer that represents the mutation of a pre-existing buffer
c                óä   >• [         TU ]  S US9  UR                  5       n[        R                  R                  U5        U/U l        X0l        [        R                  R                  U 5      U l	        g r>  )
r·  rÀ  rs  rn   r  rÈ  Úmutation_namesÚmutating_noderÛ  r¿   )rŒ  rN  Úmutated_noder  Úmutated_node_namer¹  s        €rˆ   rÀ  ÚMutationOutput.__init__"  s`   ø€ ô 	‰Ñ˜d¨6ÐÑ2Ø(×1Ñ1Ó3ÐÜ	�‰×#Ñ#Ð$5Ô6Ø0Ð1ˆÔØ(5ÔÜ—G‘G×+Ñ+¨DÓ1ˆ�	rŠ   c                ó   • U R                   $ rƒ   )r  rŸ  s    rˆ   r¬  ÚMutationOutput.get_defining_op,  s   € Ø×!Ñ!Ð!rŠ   c                ó   • U R                   $ rƒ   )r  rŸ  s    rˆ   rs  Ú!MutationOutput.get_mutation_names/  r¿  rŠ   c                ó   • gr  r™   rŸ  s    rˆ   r'  ÚMutationOutput.should_allocate2  r  rŠ   c                ój   • U R                  5       nS U 5        Vs/ s H
  nUc  M  UPM     sn$ s  snf )Nc              3  ó`   #   • U  H$  n[         R                  R                  U5      v •  M&     g 7frƒ   )rn   r  Útry_get_buffer)ræ   r¿   s     rˆ   rè   Ú6MutationOutput.get_mutation_buffers.<locals>.<genexpr>9  s"   é € ÐPÂ¸œŸ™×.Ñ.¨t×4Ð4Âùs   ‚,.)rs  )rŒ  r  rð  s      rˆ   Úget_mutation_buffersÚ#MutationOutput.get_mutation_buffers5  s@   € Ø×0Ñ0Ó2ˆñ QÁÔPó
âP�Ø÷ ÙPñ
ð 	
ùò 
s   œ0§0)r  r  r¿   )rN  r  r  r€   r  r¶  r¶   r·   r1  r­  r‰  ©r¶   ró  )r›   rœ   r�   rž   r®  rÀ  r¬  rs  r'  r!  r    rª  r«  s   @rˆ   rù  rù    sF   ø† ñð2Ø ð2Ø06ð2ØGPð2à	÷2ô"ô#ô÷
ò 
rŠ   rù  c                  ó¤   ^ • \ rS rSr% Sr0 rS\S'   \      SS j5       r\      SS j5       r	        SU 4S jjr
SS jrSS	 jrS
rU =r$ )ÚTMADescriptori>  aL  
An IR node representing a generic host-side TMA descriptor in the Triton API
Mostly useful for user-defined Triton kernels relying on host-side TMA;
but can, in principle, be used for Inductor's Triton templates, too.

See TMADescriptorExperimental and TMADescriptorStable for the two implementations
(the old API and the new API)
zdict[Any, TMADescriptor]Ú_CACHEc                óˆ   • [        U5      S:X  d   eUS   S:X  a  [        U/US   Q76 $ US   S:X  d   e[        U/US   Q76 $ )Nrà   r   ÚexperimentalrA   r>  )rÈ   ÚTMADescriptorExperimentalÚTMADescriptorStable)r  rT  Útma_metas      rˆ   Ú_create_implÚTMADescriptor._create_implL  s\   € ô �8‹} Ó!Ð!Ð!Ø�A‰;˜.Ó(Ü,¨VÐB°h¸q±kÒBÐBà˜A‘; (Ó*Ð*Ð*Ü& vÐ<°¸±Ò<Ð<rŠ   c                ó”   • [        U5      U4nX0R                  ;  a  U R                  X5      U R                  U'   U R                  U   $ rƒ   )Úidr&  r,  )r  rT  r+  râ  s       rˆ   r  ÚTMADescriptor.createW  sB   € ô �&‹z˜8Ð$ˆØ—j‘jÓ Ø!×.Ñ.¨vÓ@ˆC�J‰J�s‰OØ�z‰z˜#‰ÐrŠ   c           
     ó8  >• [         TU ]  S [        [        UUR	                  5       S95      [        [        [           U5      [        U5      S 5        Xl	        [        R                  R                  U 5      U l        [        R                  R                  U 5        g )NrL  )r·  rÀ  r›  rS  r  r   r   rr  r¤   rT  rn   r  rÛ  r¿   rÜ  )rŒ  rT  rj  ró	  r¹  s       €rˆ   rÀ  ÚTMADescriptor.__init__`  s�   ø€ ô 	‰ÑØô ÜØØ!×,Ñ,Ó.ñóô ”œ&Ñ! 6Ó*Ü�-Ó Øô	
ð  ŒÜ—G‘G×+Ñ+¨DÓ1ˆŒ	Ü	�‰×"Ñ" 4Õ(rŠ   c                ó&   • UR                  U 5        g rƒ   )Úgenerate_tma_descriptorr%
  s     rˆ   r&
  ÚTMADescriptor.codegenw  ó   € Ø×'Ñ'¨Õ-rŠ   c                ó   • U R                   $ rƒ   )rT  rŸ  s    rˆ   Ú
get_tensorÚTMADescriptor.get_tensorz  r  rŠ   )r¿   rT  )rT  r€   r+  ztuple[str, tuple[Any, ...]]r¶   r%  )rT  r€   rj  rè  ró	  rè  r¶   r·   rë
  rŸ  )r›   rœ   r�   rž   r®  r&  rŸ   rF  r,  r  rÀ  r&
  r8  r    rª  r«  s   @rˆ   r%  r%  >  sŸ   ø‡ ñð (*€FÐ$Ó)àð=Øð=Ø'Bð=à	ó=ó ð=ð ðØðØ'Bðà	óó ðð)Øð)Ø&3ð)ØDQð)à	÷)ô..÷ò rŠ   r%  c                  óH   ^ • \ rS rSrSr S         SU 4S jjjrSrU =r$ )r)  i~  z“
the new host-side TMA Descriptor API:
(the ones obtained via create_{1d,2d}_tma_descriptor calls).

See also TMADescriptorStable for the new API.
c                ó^  >• [        U5      S;   d   e[        U5      [        U5      :X  d   eUc  UR                  5       R                  nX l        X0l        X@l        [        U R                  5      U l        U/n/ U R                  QU R                  QU R
                  Pn[        TU ]!  UUUS9  g )N)rA   rà   ©rT  rj  ró	  )	rÈ   r  rÚ  rá  Ú
block_dimsÚelement_sizer;  r·  rÀ  )rŒ  rT  rá  r=  r>  rj  ró	  r¹  s          €rˆ   rÀ  Ú"TMADescriptorExperimental.__init__†  s¹   ø€ ô �4‹y˜FÓ"Ð"Ð"Ü�4‹yœC 
›OÓ+Ð+Ð+àÑØ!×+Ñ+Ó-×6Ñ6ˆLàŒ	Ø$ŒØ(ÔÜ˜Ÿ	™	“NˆŒ	à�ˆð
Ø�Y‰Yð
à�_‰_ð
ð ×Ñð
ˆô 	‰ÑØØØ'ð 	ò 	
rŠ   )r=  rá  r>  r;  rƒ   )
rT  r€   rá  úlist[Union[int, torch.SymInt]]r=  r@  r>  r�  r¶   r·   ©r›   rœ   r�   rž   r®  rÀ  r    rª  r«  s   @rˆ   r)  r)  ~  sG   ø† ñð '+ð
àð
ð -ð
ð 3ð	
ð
 $ð
ð 
÷
ö 
rŠ   r)  c                  ó0   ^ • \ rS rSrSrSU 4S jjrSrU =r$ )r*  i¦  z‘
the new host-side TMA descriptor API
(the ones obtained via TensorDescriptor.from_tensor).

See also TMADescriptorExperimental for the old API.
c                ó2   >• X l         [        TU ]	  UU/US9  g )Nr<  )Úblock_shaper·  rÀ  )rŒ  rT  rD  r¹  s      €rˆ   rÀ  ÚTMADescriptorStable.__init__®  s&   ø€ Ø&Ôä‰ÑØØ�8Ø%ð 	ò 	
rŠ   )rD  )rT  r€   rD  r@  rA  r«  s   @rˆ   r*  r*  ¦  s   ø† ñ÷
õ 
rŠ   r*  c                  óJ   ^ • \ rS rSr          SU 4S jjrSS jrSrU =r$ )ÚSubgraphBufferi¸  c                ó¦  >• [         T
U ]  S X5        X0l        X@l        [        R
                  R                  U 5      U l        [        R
                  R                  U 5        [        R
                  R                  U R                  XE5      U l
        [        U R                  5      (       d   e[        U R                  5      nU HT  nXpR                  R                  UR                  '   U R                  R                  R!                  UR                  5        MV     U Vs/ s H  oˆR                  PM     snU l        SS KJs  Jn	  [        R*                  " U R                  5         U	R-                  SSSS9   U R                  R.                  " U R                  6   S S S 5        S S S 5        g s  snf ! , (       d  f       N= f! , (       d  f       g = f)Nr   FÚATEN)Úmax_autotuneÚmax_autotune_gemmÚmax_autotune_gemm_backends)r·  rÀ  rd  Úexample_inputsrn   r  rÛ  r¿   rÜ  Úmake_subgraphÚsubgraphr¥	  rj  rm  r(  Úgraph_input_namesrÅ  Ú
sym_inputsÚtorch._inductor.configrµ  rB   Úset_graph_handlerr   Úrun)rŒ  rN  r‘   rd  rM  Úsubgraph_namerQ  Úsym_inpÚsym_varÚinductor_configr¹  s             €rˆ   rÀ  ÚSubgraphBuffer.__init__¹  sR  ø€ ô 	‰Ñ˜˜vÔ3ØŒØ,ÔÜ—G‘G×+Ñ+¨DÓ1ˆŒ	Ü	�‰×"Ñ" 4Ô(äŸ™×-Ñ-¨d¯g©g°~ÓUˆŒä §¡×,Ñ,Ð,Ð,Ü(¨¯©Ó5ˆ
ã!ˆGØ7>�M‰M×&Ñ& w§|¡|Ñ4Ø�M‰M×+Ñ+×2Ñ2°7·<±<Ö@ñ "ñ 8BÓB²z¨GŸ<œ<±zÑBˆŒç8Ð8ä× Ò  §¡Õ/à ×&Ñ&Ø"Ø"'Ø+1ð 'ò ð
 —‘×!Ò! 4×#6Ñ#6Ñ7÷÷ 0Ð/ùò	 C÷õ ú÷ 0Õ/ús*   ÄF,Å%GÅ7$F1ÆGÆ1
F?	Æ;GÇ
Gc                ó$  •  " S S5      n[        U R                  5      (       d   eU R                   Vs/ s H  o3R                  5       PM     nnUR                  U" U R                  5      / U R
                  QUQU R                  /5        g s  snf )Nc                  ó   • \ rS rSrSS jrSrg)Ú,SubgraphBuffer.codegen.<locals>.CodegenGraphiÞ  c                ó2   • Xl         UR                  U l        g rƒ   ©r  r¿   )rŒ  r  s     rˆ   rÀ  Ú5SubgraphBuffer.codegen.<locals>.CodegenGraph.__init__ß  s   € Ø"”
Ø!ŸJ™J�•	rŠ   r^  N)r  rt   )r›   rœ   r�   rž   rÀ  r    r™   rŠ   rˆ   ÚCodegenGraphr\  Þ  s   † ÷'rŠ   r`  )r¥	  rj  r	  Ú'codegen_subgraph_with_flattened_outputsrO  rQ  r¿   )rŒ  r
  r`  r  Úouter_inputss        rˆ   r&
  ÚSubgraphBuffer.codegenÝ  s|   € ÷	'ñ 	'ô
   §¡×,Ñ,Ð,Ð,Ø7;·{²{ÓC²{°!×+Ñ+Ö-±{ˆÐCØ×7Ñ7Ù˜Ÿ™Ó'Ø-ˆd�o‰oÐ- Ð-Ø�Y‰YˆKõ	
ùò Ds   µB)rM  rd  r¿   rO  rQ  )
rN  rí  r‘   rä  rd  útorch.fx.GraphModulerM  ú	list[Any]rU  rÃ   rë
  ©r›   rœ   r�   rž   rÀ  r&
  r    rª  r«  s   @rˆ   rG  rG  ¸  sC   ø† ð"8àð"8ð "ð"8ð !ð	"8ð
 "ð"8ð ÷"8÷H
ò 
rŠ   rG  c                  ó®   ^ • \ rS rSrS
S jr\SS j5       r\" S 5       S   SU 4S jjj5       rSS jr	          SU 4S jjr
SS jrSS jrS	rU =r$ )ÚUserDefinedTritonKerneliì  c                óz  ^• SSK Jn  SSKJn  UR	                  U R
                  5      m/ n/ n/ n[        TU5      (       aø  [        TS5      (       a&  UR                  U4S jTR                   5       5        O.[        TS5      (       d   eUR                  TR                  5        [        TS5      (       a<  TR                   H+  nUR                  TR                  R                  U   5        M-     O.[        TS5      (       d   eUR                  TR                  5        TR                   nTR                  mTX4U4$ )	Nr   )Ú	Autotuner)Úkernel_side_tableÚrestore_idxc              3  óV   >#   • U  H  nTR                   R                  U   v •  M      g 7frƒ   )rÀ   Ú	arg_names)ræ   rË   r…	  s     €rˆ   rè   ÚBUserDefinedTritonKernel.get_kernel_and_metadata.<locals>.<genexpr>ú  s$   øé € ð *Ú4F¨q�F—I‘I×'Ñ'¨Ö*Ò4Fùs   ƒ&)Úrestore_valueÚ	reset_idxÚreset_to_zero)Útriton.runtime.autotunerrj  Ú*torch._higher_order_ops.triton_kernel_wraprk  Ú
get_kernelÚ
kernel_idxr„   r³  r®  rl  rp  rq  rÅ  rÀ   rn  rr  Úconfigs)rŒ  rj  rk  rw  Úrestore_value_argsÚreset_to_zero_argsrË   r…	  s          @rˆ   Úget_kernel_and_metadataÚ/UserDefinedTritonKernel.get_kernel_and_metadataí  s  ø€ Ý6åPà"×-Ñ-¨d¯o©oÓ>ˆØˆØ(*ÐØ(*ÐÜ�f˜i×(Ñ(ô �v˜}×-Ñ-Ø"×)Ñ)ô *Ø4:×4FÒ4Fó*õ ô ˜v ×7Ñ7Ð7Ð7Ø"×)Ñ)¨&×*>Ñ*>Ô?ä�v˜{×+Ñ+Ø×)Ô)�AØ&×-Ñ-¨f¯i©i×.AÑ.AÀ!Ñ.DÖEò *ô ˜v ×7Ñ7Ð7Ð7Ø"×)Ñ)¨&×*>Ñ*>Ô?à—n‘nˆGØ—Y‘YˆFà�wÐ4FÐFÐFrŠ   c                óJ  ^• SSK Jn  U R                  5       u  nnnnUR                  UUU R                  UUU R
                  5      u  nnn	n
U R                   Vs0 s H  o»U R                  U5      _M     nnUR                   Vs/ s H  oÝR                  PM     snmUR                   Vs/ s H!  oÝR                  (       d  M  UR                  PM#     nn[        U4S jU 5       5      n/ n/ n/ n/ n[        R                  " UR                  5       [!        [        R"                  " S5      U
5      5       GH�  u  nnUU;   a  U" 5       (       a  M  UR%                  U5        UR%                  U5        ['        U[(        5      (       a@  UR%                  UR+                  5       5        UR%                  UR-                  5       5        M’  ['        U[.        [0        [2        [4        R6                  45      (       a-  UR%                  U5        UR%                  [9        U5      5        Mî  UU;   a)  UR%                  S5        UR%                  [.        5        GM  UcY   U" 5       (       a)  UR%                  S5        UR%                  [.        5        GMV  UR;                  5         UR;                  5         GMy  [=        S[9        U5       SU 35      e   U R?                  X5        URA                  UUUUUUU	S	U RC                  5       U RD                  R                  S
9
  gs  snf s  snf s  snf )úQOverrides the parent member.
See https://github.com/pytorch/pytorch/issues/151692r   )Útriton_version_uses_attrs_dictc              3  ó.   >#   • U  H
  nTU   v •  M     g 7frƒ   r™   )ræ   rË   rn  s     €rˆ   rè   Ú2UserDefinedTritonKernel.codegen.<locals>.<genexpr>.  s   øé € Ð$Fº:°a Y¨q¦\º:ùs   ƒrÀ  r0  NzUnsupported arg type: r  T)Ú	arg_typesÚraw_argsÚraw_keysÚtriton_metaÚinductor_metar#  r  Úoriginal_fxnode_name)#r›	  r~  rz  Ú!define_user_defined_triton_kernelr¾   Úgridrù	  r·
  Úparamsr¿   Úis_constexprÚnumr:   r  r2  r‘  rÒ   ÚrepeatrÅ  r„   r€   r	  r  r…   rL  r•   rª   r    r°   r  rÚ  r"
  Úgenerate_kernel_callr  r
  )rŒ  r
  r~  r…	  rw  rx  ry  Únew_namer„  r…  Úextra_launch_argsr»
  Ú
named_argsr¨  Ú
constexprsÚconstexpr_namesr½   r�  Úraw_keys_filteredÚraw_args_filteredr¿   rÓ	  rn  s                         @rˆ   r&
  ÚUserDefinedTritonKernel.codegen  s»  ø€ õ
 	Ið ×(Ñ(Ó*ñ	
ØØØØð ×5Ñ5ØØØ�K‰KØØØ�I‰Ió
ñ	
ØØØØð 26×1SÒ1Só
Ú1S¨Aˆt×$Ñ$ QÓ'Ò'Ñ1Sð 	ð 
ð &,§]¢]Ó3¢] —V”V¡]Ñ3ˆ	Ø%+§]¢]ÓE¢] ·nµn“e�a—e”e¡]ˆ
ÐEÜ$Ô$F¹:Ó$FÓFˆàˆØ!ˆ	Ø')ÐØ')ÐÜ"ŸšØ×ÑÓ¤¤I×$4Ò$4°RÓ$8Ð:KÓ L÷
‰IˆD�#ð �Ó&Ñ+I×+KÑ+KáØ×$Ñ$ TÔ*Ø×$Ñ$ SÔ)Ü˜#œv×&Ñ&Ø—‘˜C×1Ñ1Ó3Ô4Ø× Ñ  §¡£Ö1Ü˜C¤#¤u¬d´E·J±JÐ!?×@Ñ@Ø—‘˜CÔ Ø× Ñ ¤ c£Ö+Ø˜Ó(ð —‘˜B”Ø× Ñ ¤×%Ø‘ðñ 2×3Ñ3Ø—K‘K ”OØ×$Ñ$¤S×)à%×)Ñ)Ô+Ø%×)Ñ)×+ä)Ð,BÄ4ÈÃ9À+ÈRÐPSÈuÐ*UÓVÐVñI
ðL 	×Ñ˜WÔ/Ø×$Ñ$ØØØØ&Ø&Ø#Ø'ØØ—?‘?Ó$Ø!%§¡×!2Ñ!2ð 	%ò 	
ùòe
ùò 4ùÚEs   ÁLÂLÂ+L ÃL c                óP   >• [         TU ]  U5      [        U R                  U5      -  $ rƒ   )r·  ra  r(   rˆ  r¸  s     €rˆ   ra  Ú,UserDefinedTritonKernel.get_free_symbol_usesh  s-   ø€ ô ‰wÑ+¨MÓ:Ô=MØ�I‰I�}ó>
ñ 
ð 	
rŠ   c                ó   • [        5       $ rƒ   r9   rŸ  s    rˆ   rÛ  Ú0UserDefinedTritonKernel.get_unbacked_symbol_defsr  rÝ  rŠ   c          	     óh  >• / n0 n/ nUR                  5        H‡  u  p‰[        U	[        5      (       aX  [        R	                  U R                  U	5      5      n
Xƒ;   a  [        R                  X£U   5      n
UR                  U
5        X¦U'   Mr  UR                  U	5        X–U'   M‰     [        U5      S:w  d   eUS   R                  5       U l        [        U[        5      (       d   [        U5      5       e[        TU ]=  S [!        U R                  S9U[#        U5      U5        Xl        X l        U R)                  5       u  p¼  n[+        US5      (       d   eUR,                   Vs/ s H  oîU;   d  M
  UPM     snU l        SSKJn  [        U5      S:”  a  US   R4                  O0 nU" U0 UEUEU5       Vs/ s H  nUU   PM
     snU l        U R6                   Vs/ s H!  n[9        [!        U R                  S9UU 5      PM#     snU l        [<        R>                  RA                  U 5        g s  snf s  snf s  snf )Nr   r  rn  )Úidentify_mutated_tensors)!r‘  r„   r   r…  r·	  r¶	  r%  r  rÅ  rÈ   r  r  r   r°   r·  rÀ  r·  r¤   rv  rˆ  rz  r³  rn  rù	  rt  r›  r¾   Úmutable_argsrù  r 
  rn   r  rÜ  )rŒ  rv  rˆ  Útma_descriptor_metadataÚkernel_argsrj  r¾   ró	  r»
  rŠ  r  r…	  rw  rø   rÓ	  r›  Úautotuned_kwargsrâ  rð  r¹  s                      €rˆ   rÀ  Ú UserDefinedTritonKernel.__init__u  s$  ø€ ð  "ˆØ$&ˆØ&(ˆà×%Ñ%Ö'‰DˆAÜ˜!œY×'Ñ'Ü ×9Ñ9¸$×:LÑ:LÈQÓ:OÓP�ØÓ/Ü%×,Ñ,¨QÈÑ0JÓK�AØ—‘˜aÔ Ø�q“	à×$Ñ$ QÔ'Ø�q“	ñ (ô �6‹{˜aÓÐÐØ˜Q‘i×*Ñ*Ó,ˆŒä˜&¤(×+Ñ+Ð9¬T°&«\Ó9Ð+Ü‰ÑØÜ˜dŸk™kÑ*ØÜ�-Ó Øô	
ð %ŒØŒ	à $× <Ñ <Ó >Ñˆ˜˜Aô �v˜{×+Ñ+Ð+Ð+à!×+Ò+ó.
Ú+�C°kÑ/A�CÑ+ñ.
ˆÔ*õ 	Xä03°G³¸qÓ0@˜7 1™:×,Ò,ÀbÐñ 0ØØ3�;Ð3Ð"2Ð3Ø'ôó
ò�ð ˜Ôññ
ˆÔð ×(Ò(ó!
â(�ô œ:¨T¯[©[Ñ9¸3ÀÖEÙ(ñ!
ˆÔô 	
�‰×"Ñ" 4Õ(ùò).
ùò
ùò!
s   Å	H%Å,H%Æ0H*Ç(H/c                ó,   • [        U R                  5      $ rƒ   )r£   r 
  rŸ  s    rˆ   rØ  Ú#UserDefinedTritonKernel.get_outputs´  s   € Ü�D×)Ñ)Ó*Ð*rŠ   c                ó   • U R                   $ rƒ   r  rŸ  s    rˆ   r  Ú"UserDefinedTritonKernel.get_device·  r  rŠ   )r  rˆ  rv  rœ  r 
  rù	  )r¶   z(tuple[Kernel, Any, list[str], list[str]]rë
  r   r«  rå  )
rv  r…   rˆ  r   r�  r~  rž  r~  r¶   r·   rã  r‘  )r›   rœ   r�   rž   rz  r   r&
  rY   ra  rÛ  rÀ  rØ  r  r    rª  r«  s   @rˆ   rh  rh  ì  sš   ø† ôGð@ óX
ó ðX
ñt Ð5Ó6à$)ð
Ø!ð
à	!÷
ó 7ð
ôð=)ð ð=)ð ð	=)ð
 "0ð=)ð $ð=)ð 
÷=)ô~+÷ò rŠ   rh  c                  óh   ^ • \ rS rSrSrS	S jrS
S jrSS jrSS jr        SU 4S jjr	Sr
U =r$ )ÚInplaceBernoulliFallbacki»  ú=
This needs to be a custom class to handle mutation properly
c                ó   • [        S U R                   5       5      (       d   eS U R                   5       u  n[        R                  R                  (       a\  UR                  U R                  5        SU SSR                  [        [        U R                  5      5       SUR                   35        g UR                  U R                  5        SU SSR                  [        [        U R                  5      5       SUR                   35        g )Nc              3  óB   #   • U  H  n[        U[        5      v •  M     g 7frƒ   r¢	  ©ræ   r  s     rˆ   rè   Ú3InplaceBernoulliFallback.codegen.<locals>.<genexpr>Á  s   é € Ð>²+¨Q”:˜a¤×(Ð(²+ùrö  c              3  ó^   #   • U  H#  n[        [        U5      R                  5       v •  M%     g 7frƒ   )r   r€   r	  rª  s     rˆ   rè   r«  Â  s"   é € ÐIº[¸””V˜Q“×1Ñ1×3Ð3º[ùs   ‚+-rÌ  rÊ  z, NULL)r  )rë   rj  rn   r  r+
  ry  r?
  rÏ  rÍ  Úreprró	  Úending)rŒ  r
  r‡   s      rˆ   r&
  Ú InplaceBernoulliFallback.codegenÀ  sâ   € ÜÑ>°$·+²+Ó>×>Ñ>Ð>Ð>ÙI¸T¿[º[ÓI‰ˆä�7‰7××ð ×ÑØ×'Ñ'Ó)Ð*¨!¨A¨3¨b°·±¼3¼tÀT×EWÑEWÓ;XÓ1YÐ0ZÐZaÐbi×bpÑbpÐaqÐrõð ×ÑØ×'Ñ'Ó)Ð*¨!¨A¨3¨b°·±¼3¼tÀT×EWÑEWÓ;XÓ1YÐ0ZÐZ[Ð\c×\jÑ\jÐ[kÐlõrŠ   c                ó   • gr  r™   rŸ  s    rˆ   r'  Ú(InplaceBernoulliFallback.should_allocateÏ  r  rŠ   c                ó&   • U R                  S5      /$ rý  ©r«	  rŸ  s    rˆ   rs  Ú+InplaceBernoulliFallback.get_mutation_namesÒ  ó   € Ø—‘ Ó"Ð#Ð#rŠ   c                ó   • [        5       $ rƒ   r9   rŸ  s    rˆ   rÛ  Ú1InplaceBernoulliFallback.get_unbacked_symbol_defsÕ  rÝ  rŠ   c                óR  >• [         TU ]  S [        UR                  5       S9U R	                  U/5      UUS9  [
        R                  R                  UR                  5       5        [
        R                  R                  U 5      U l
        [
        R                  R                  U 5        g )Nr  ©rû	  )r·  rÀ  r·  r  rÙ  rn   r  rÈ  rs  rÛ  r¿   rÜ  )rŒ  rû	  r‡   ró	  r¹  s       €rˆ   rÀ  Ú!InplaceBernoulliFallback.__init__Ø  s€   ø€ ô 	‰ÑØÜ˜aŸl™l›nÑ-Ø×Ñ  Ó$ØØ#ð 	ñ 	
ô 	
�‰×#Ñ# A§J¡J£LÔ1Ü—G‘G×+Ñ+¨DÓ1ˆŒ	Ü	�‰×"Ñ" 4Õ(rŠ   r—  rë
  r‰  r­  rå  )rû	  r|   r‡   r€   ró	  r   r¶   r·   ©r›   rœ   r�   rž   r®  r&
  r'  rs  rÛ  rÀ  r    rª  r«  s   @rˆ   r¦  r¦  »  sF   ø† ñôôô$ôð)Ø'ð)Ø,2ð)ØDGð)à	÷)õ )rŠ   r¦  c                  ó�   ^ • \ rS rSrSrS
S jrSS jrSS jrSS jr        SU 4S jjr	\
 S       SS jj5       rS	rU =r$ )ÚInplaceCopyFallbackiè  r§  c                óN   • U R                  5       u  p#nUR                  X2U5        g rƒ   )r´
  Úcodegen_device_copy)rŒ  r
  rÛ  rÚ  Únon_blockings        rˆ   r&
  ÚInplaceCopyFallback.codegení  s%   € Ø#'×#4Ñ#4Ó#6Ñ ˆ�<Ø×#Ñ# C¨lÕ;rŠ   c                ó   • gr  r™   rŸ  s    rˆ   r'  Ú#InplaceCopyFallback.should_allocateñ  r  rŠ   c                ó&   • U R                  S5      /$ rý  r³  rŸ  s    rˆ   rs  Ú&InplaceCopyFallback.get_mutation_namesô  rµ  rŠ   c                ó   • [        5       $ rƒ   r9   rŸ  s    rˆ   rÛ  Ú,InplaceCopyFallback.get_unbacked_symbol_defs÷  rÝ  rŠ   c           	     ó  >• [         TU ]  S UUUSSS9  [        R                  R	                  US   R                  5       5        [        R                  R                  U 5      U l        [        R                  R                  U 5        g )Nz
aten.copy_Úaoti_torch_copy_)rö	  r÷	  r   )	r·  rÀ  rn   r  rÈ  rs  rÛ  r¿   rÜ  )rŒ  rN  rj  ró	  r¹  s       €rˆ   rÀ  ÚInplaceCopyFallback.__init__ú  sr   ø€ ô 	‰ÑØØØØØ+Ø.ð 	ñ 	
ô 	
�‰×#Ñ# F¨1¡I×$6Ñ$6Ó$8Ô9Ü—G‘G×+Ñ+¨DÓ1ˆŒ	Ü	�‰×"Ñ" 4Õ(rŠ   c                óœ   • X4 Vs/ s H  o@R                  U5      PM     nnU4n[        [        UR                  5       S9UU5      nU$ s  snf rJ  )r¶	  r½  r·  r  )r  rÛ  rÚ  rÀ  r  rj  ró	  r¯  s           rˆ   r  ÚInplaceCopyFallback.create  sU   € ð 25±
Ó;²
¨1×#Ñ# AÖ&±
ˆÐ;Ø%˜ˆÜ$Ü˜cŸn™nÓ.Ñ/ØØó
ˆð
 ˆùò <s   †A	r—  rë
  r‰  r­  rå  )rN  r  rj  ró  ró	  rè  r¶   r·   r   )rÛ  r€   rÚ  r€   rÀ  r•   r¶   r½  )r›   rœ   r�   rž   r®  r&
  r'  rs  rÛ  rÀ  rF  r  r    rª  r«  s   @rˆ   r½  r½  è  s~   ø† ñô<ôô$ôð)àð)ð !ð)ð %ð	)ð
 
÷)ð$ à<Að
Øð
Ø%ð
Ø59ð
à	ô
ó ö
rŠ   r½  c                  óJ   • \ rS rSrSrS
S jrSS jrSS jrSS jrSS jr	Sr
g	)ÚMutatingFirstArgExternKerneli  r§  c                ó  • [        U R                  5      (       d   e/ S U R                   5       Q[        [        U R                  5      QnUR                  U R                  5        SSR                  U5       SUR                   35        g )Nc              3  ó@   #   • U  H  oR                  5       v •  M     g 7frƒ   )r	  rª  s     rˆ   rè   Ú7MutatingFirstArgExternKernel.codegen.<locals>.<genexpr>"  s   é € Ð9ª[¨×!Ñ!×#Ð#ª[ùs   ‚rÌ  rÊ  r  )	r¥	  rj  rÍ  r­  ró	  ry  r?
  rÏ  r®  )rŒ  r
  Úargrefss      rˆ   r&
  Ú$MutatingFirstArgExternKernel.codegen  s�   € Ü §¡×,Ñ,Ð,Ð,ð
Ù9¨T¯[ª[Ó9ð
ä”�t×)Ñ)Ó*ð
ˆð 	×ÑØ×#Ñ#Ó%Ð& a¨¯	©	°'Ó(:Ð';¸1¸W¿^¹^Ð<LÐMõ	
rŠ   c                ó   • gr  r™   rŸ  s    rˆ   r'  Ú,MutatingFirstArgExternKernel.should_allocate)  r  rŠ   c                ó&   • U R                  S5      /$ rý  r³  rŸ  s    rˆ   rs  Ú/MutatingFirstArgExternKernel.get_mutation_names,  rµ  rŠ   c                ó   • [        5       $ rƒ   r9   rŸ  s    rˆ   rÛ  Ú5MutatingFirstArgExternKernel.get_unbacked_symbol_defs/  rÝ  rŠ   c                ó   • gra  r™   rŸ  s    rˆ   Úhas_side_effectsÚ-MutatingFirstArgExternKernel.has_side_effects2  r®  rŠ   r™   Nrë
  r‰  r­  rå  )r›   rœ   r�   rž   r®  r&
  r'  rs  rÛ  rÛ  r    r™   rŠ   rˆ   rÎ  rÎ    s    † ñô
ôô$ô÷rŠ   rÎ  c                  ó,   ^ • \ rS rSrSU 4S jjrSrU =r$ )ÚResizeStorageBytesi6  c                óˆ  >• [        U[        5      (       d   S5       e[        TU ]  S [	        UR                  5       S9U R                  U/5      U4S9  [        R                  R                  UR                  5       5        [        R                  R                  U 5      U l        [        R                  R                  U 5        SU l        SU l        [        U[         ["        [$        45      (       d   ['        U5      5       e[        R                  R(                  R+                  UR,                  R                  5       5        g )NzTODO: dynamic shapesr  )ró	  z"inductor_ops.resize_storage_bytes_z&torch::inductor::resize_storage_bytes_)r„   r…   r·  rÀ  r·  r  rÙ  rn   r  rÈ  rs  rÛ  r¿   rÜ  rö	  r÷	  ro  rq  r   r°   Únever_reuse_buffersr´  rM  )rŒ  ÚvariablerÌ  r¹  s      €rˆ   rÀ  ÚResizeStorageBytes.__init__7  sô   ø€ Ü˜(¤C×(Ñ(Ð@Ð*@Ó@Ð(Ü‰ÑØÜ˜h×1Ñ1Ó3Ñ4Ø×Ñ  
Ó+Ø#˜+ð	 	ñ 	
ô 	
�‰×#Ñ# H×$5Ñ$5Ó$7Ô8Ü—G‘G×+Ñ+¨DÓ1ˆŒ	Ü	�‰×"Ñ" 4Ô(Ø"FˆÔØGˆÔÜ˜(¤X¬z¼9Ð$E×FÑFÐVÌÈXËÓVÐFÜ	�‰×#Ñ#×'Ñ'¨¯©×(>Ñ(>Ó(@ÕArŠ   )r÷	  r¿   rö	  )rá  r€   rÌ  r…   r¶   r·   r  r«  s   @rˆ   rÞ  rÞ  6  s   ø† ÷Bõ BrŠ   rÞ  c                  ó6   ^ • \ rS rSrSU 4S jjrSS jrSrU =r$ )ÚSetSourceTensorKerneliH  c                óð  >• UR                  5         [        TU ]	  UR                  5       X/S[        R
                  R                  R                  R                  S9  [        U[        [        [        45      (       d   [        U5      5       e[        R                  R                   R#                  UR$                  R'                  5       5        [        R                  R                   R#                  UR'                  5       5        [        R                  R                   R#                  U R'                  5       5        UR)                  5       n[+        [-        US9X5      [+        [-        US9X 5      /U l        g )Nz!torch.ops.aten.set_.source_Tensor)rö	  rû	  r  )r<  r·  rÀ  r  r  rl   r)
  Úset_Úsource_Tensorr„   ro  rq  r   r°   rn   r  rà  r´  rM  rs  r  rù  r·  r 
  )rŒ  Úself_tensorÚstorage_tensorr  r¹  s       €rˆ   rÀ  ÚSetSourceTensorKernel.__init__I  s  ø€ Ø×$Ñ$Ô&Ü‰ÑØ×%Ñ%Ó'ØÐ)ØBÜŸ	™	Ÿ™×+Ñ+×9Ñ9ð	 	ñ 	
ô ˜+¬´*¼iÐ'H×IÑIð 	
Ì4ØóL
ó 	
ÐIô 	
�‰×#Ñ#×'Ñ'¨×(8Ñ(8×(AÑ(AÓ(CÔDÜ	�‰×#Ñ#×'Ñ'¨×(?Ñ(?Ó(AÔBÜ	�‰×#Ñ#×'Ñ'¨¯©«Ô8Ø×*Ñ*Ó,ˆäœ:¨VÑ4°kÓHÜœ:¨VÑ4°nÓKð!
ˆÕrŠ   c                óF   • U R                  S5      U R                  S5      /$ r"  r³  rŸ  s    rˆ   ry  Ú2SetSourceTensorKernel.get_inputs_that_alias_output]  s   € Ø—‘ Ó" D§O¡O°AÓ$6Ð7Ð7rŠ   r	
  )rè  r€   ré  r€   r¶   r·   r­  )r›   rœ   r�   rž   rÀ  ry  r    rª  r«  s   @rˆ   rä  rä  H  s   ø† ÷
÷(8ò 8rŠ   rä  c                  ó€   ^ • \ rS rSrSrSS jrSS jrSS jrSS jrSSS	.               SU 4S
 jjjr	Sr
U =r$ )ÚScatterFallbackia  zµ
This needs to be a custom class to handle mutation properly.
This class handles both aten.scatter_ and aten.scatter_reduce_.
It also handle the case `src` being a scalar properly.
c                ó&   • UR                  U 5        g rƒ   )Úgenerate_scatter_fallbackr%
  s     rˆ   r&
  ÚScatterFallback.codegenh  s   € Ø×)Ñ)¨$Õ/rŠ   c                ó   • gr  r™   rŸ  s    rˆ   r'  ÚScatterFallback.should_allocatek  r  rŠ   c                óp   • U R                   S   n[        U[        5      (       d   eUR                  5       /$ rý  r©	  ©rŒ  rl  s     rˆ   rs  Ú"ScatterFallback.get_mutation_namesn  s1   € Ø�k‰k˜!‰nˆÜ˜#œv×&Ñ&Ð&Ð&Ø—‘“ÐÐrŠ   c                ó   • [        5       $ rƒ   r9   rŸ  s    rˆ   rÛ  Ú(ScatterFallback.get_unbacked_symbol_defss  rÝ  rŠ   NT©r  Úinclude_selfc               ód  >• [        U[        5      U l        U R                  (       a&  X$U4 Vs/ s H  o€R                  U5      PM     n	nU4n
O$X$4 Vs/ s H  o€R                  U5      PM     n	nX54n
[        TU ]  S [        UR                  5       S9U R                  U	5      U
XgS.[        U5      SS/US9  [        R                  R                  UR                  5       5        [        R                  R                  U 5      U l        [        R                  R!                  U 5        g s  snf s  snf )Nr  rù  r  rú  )rö	  rù	  rû	  )r„   r   Úsrc_is_tensorr¶	  r·  rÀ  r·  r  rÙ  rÃ   rn   r  rÈ  rs  rÛ  r¿   rÜ  )rŒ  rû	  r‡   rB  rÊ   rÚ  r  rú  r  Útensorsró	  r¹  s              €rˆ   rÀ  ÚScatterFallback.__init__v  s  ø€ ô (¨¬YÓ7ˆÔð ××Ø78À±oÓF²o°×)Ñ)¨!Ö,±oˆGÐFØ ˜F‰Mà78±jÓA²j°×)Ñ)¨!Ö,±jˆGÐAØ ˜JˆMä‰ÑØÜ˜aŸl™l›nÑ-Ø×Ñ Ó(ØØÑ<Ü" ;Ó/Ø+3°^Ð*DØ#ð 	ñ 		
ô 	
�‰×#Ñ# A§J¡J£LÔ1Ü—G‘G×+Ñ+¨DÓ1ˆŒ	Ü	�‰×"Ñ" 4Õ(ùò% Gùò Bs   ®D(ÁD-)r¿   rü  rë
  r‰  rî
  rå  )rû	  r|   r‡   r€   rB  r…   rÊ   r€   rÚ  r€   r  r�  rú  r•   r¶   r·   r»  r«  s   @rˆ   rî  rî  a  s|   ø† ñô0ôô ô
ð !%Ø!ñ!)à!ð!)ð ð!)ð ð	!)ð
 ð!)ð ð!)ð ð!)ð ð!)ð 
÷!)ö !)rŠ   rî  c                  óp   ^ • \ rS rSrSrS	S jrS
S jrSS jrSS jr            SU 4S jjr	Sr
U =r$ )ÚIndexPutFallbackiš  zI
This needs to be a custom class to handle mutation and indices properly
c                ó&   • UR                  U 5        g rƒ   )Úgenerate_index_put_fallbackr%
  s     rˆ   r&
  ÚIndexPutFallback.codegenŸ  s   € Ø×+Ñ+¨DÕ1rŠ   c                ó   • gr  r™   rŸ  s    rˆ   r'  Ú IndexPutFallback.should_allocate¢  r  rŠ   c                ó&   • U R                  S5      /$ rý  r³  rŸ  s    rˆ   rs  Ú#IndexPutFallback.get_mutation_names¥  rµ  rŠ   c                ó   • [        5       $ rƒ   r9   rŸ  s    rˆ   rÛ  Ú)IndexPutFallback.get_unbacked_symbol_defs¨  rÝ  rŠ   c           
     óî  >• X0l         U Vs/ s H	  ofc  M  UPM     nnX$/UQ Vs/ s H  o R                  U5      PM     nnSn	[        T
U ]  S [	        WR                  5       S9U R                  U5      U4SU	US9  [        R                  R                  U R                  S5      5        [        R                  R                  U 5      U l        [        R                  R                  U 5        g s  snf s  snf )NÚaoti_torch_index_put_outr  zaten.index_put_)rö	  r÷	  rû	  r   )rî  r¶	  r·  rÀ  r·  r  rÙ  rn   r  rÈ  r«	  rÛ  r¿   rÜ  )rŒ  rû	  r‡   rî  r¦   Ú
accumulaterË   Úvalid_indicesrý  r÷	  r¹  s             €rˆ   rÀ  ÚIndexPutFallback.__init__«  sÖ   ø€ ð ŒÙ$+Ó=¢G˜qŸ¡GˆÐ=à34Ð2M¸}Ñ2MÓNÒ2M¨Q×%Ñ% aÖ(Ñ2MˆÐNØ4ˆÜ‰ÑØÜ˜aŸl™l›nÑ-Ø×Ñ Ó(ØˆMØ0Ø+Ø#ð 	ñ 	
ô 	
�‰×#Ñ# D§O¡O°AÓ$6Ô7Ü—G‘G×+Ñ+¨DÓ1ˆŒ	Ü	�‰×"Ñ" 4Õ(ùò >ùâNs   ŒC-–C-¥C2)rî  r¿   rë
  r‰  r­  rå  )rû	  útorch._ops.OpOverloadr‡   r€   rî  re  r¦   rè  r  r   r¶   r·   r»  r«  s   @rˆ   r   r   š  s`   ø† ñô2ôô$ôð)à*ð)ð ð)ð ð	)ð
 ð)ð ð)ð 
÷)õ )rŠ   r   c                  ó2   • \ rS rSr\SS j5       rSS jrSrg)Ú
DeviceCopyiÆ  c           
     óÈ  • UR                  5       nUc   eUR                  5       (       dÙ  [        U5      [        R                  R
                  ;  a²  [        S UR                  5        5       5      (       a�  [        R                  R                  (       dn  [        R                  R                  (       a>  [        R                  R                  U5        [        R                  R                  U5        UR                  U5      $ [        R                  R                  U5        [        R                  R                  U5        [        S5        U4n[        R!                  U5      nS nUR#                  5       (       a  UR%                  5       n['        UR(                  5      =(       a    UR(                  S:H  =(       a    UnUR(                  S:H  =(       a    ['        UR(                  5      =(       a    UnU(       a%  [+        U5      (       a  SUR-                  5       l        [1        [3        UUR5                  5       UR#                  5       UUS9U R7                  U5      /U5      $ )Nc              3  óZ   #   • U  H!  o[         R                  R                  ;   v •  M#     g 7frƒ   )rn   r  rT
  rƒ  s     rˆ   rè   Ú$DeviceCopy.create.<locals>.<genexpr>Ï  s   é € ÐGÒ4F¨qœŸ™×*Ñ*Ö*Ò4Fùs   ‚)+zDeviceCopy in input programr   Tr—  )r  rj  rt  rn   r  r{  rë   r   rB   Úaot_inductorÚuse_runtime_constant_foldingr+
  Úadd_device_inforp  r]   r²  r  r	  r2  re   r°   r
  r  rR  r  rP  r  r¶	  )	r  r‡   r  rÀ  Úx_deviceró	  r  Úis_destination_pinnedÚis_source_pinneds	            rˆ   r  ÚDeviceCopy.createÇ  s´  € à—<‘<“>ˆØÑ#Ð#Ð#à—‘—‘ä˜Q“¤q§w¡w×'>Ñ'>Ó>ÜÑG°A×4DÑ4DÔ4FÓG×GÑGÜ×'Ñ'×D×Dä�w‰w×"×"ô —‘×'Ñ'¨Ô/Ü—‘×'Ñ'¨Ô1Ø×'Ñ'¨Ó/Ð/ä	�‰×Ñ Ô'Ü	�‰×Ñ Ô)ÜÐ7Ô8Ø%˜ˆä×+Ñ+¨AÓ.ˆØˆØ�:‰:�<‰<à—\‘\“^ˆFä�8—=‘=Ó!×K f§k¡k°UÑ&:×K¸|ð 	ð �M‰M˜UÑ"×K¤v¨f¯k©kÓ':×K¸|ð 	ö Ô 5°a× 8Ñ 8Ø'+ˆA�L‰L‹NÔ$ÜÜØØ—‘“Ø—
‘
“ØØ/ñð ×Ñ˜qÓ!Ð"Øó

ð 
	
rŠ   c                ó  • U R                  5       n[        U5      S:X  d   eU R                  (       a2  UR                  US   U R                  R	                  5       US   5        g UR                  US   U R	                  5       US   5        g )Nrà   r   rA   )r´
  rÈ   rõ	  r¿  r	  )rŒ  r
  r½   s      rˆ   r&
  ÚDeviceCopy.codegen÷  s{   € Ø× Ñ Ó"ˆÜ�4‹y˜A‹~Ðˆ~Ø××Ø×'Ñ'Ø�Q‘˜×)Ñ)×;Ñ;Ó=¸tÀA¹wõð ×'Ñ'¨¨Q©°×1GÑ1GÓ1IÈ4ÐPQÉ7ÕSrŠ   r™   N)r‡   r€   r  r”  rÀ  r•   r¶   r€   rë
  )r›   rœ   r�   rž   rF  r  r&
  r    r™   rŠ   rˆ   r  r  Æ  s   † Øó-
ó ð-
÷^TrŠ   r  c                  ó    ^ • \ rS rSrSrS
S jrSS jr              SU 4S jjrSS jr\	" S 5       S   SS jj5       r
SS jrS	rU =r$ )ÚDynamicSelectStorageOffseti  a¿  
The result of computing a dynamic selection index is determined as follows: when the index in the
select operation is unbacked, the actual index calculation is ambiguous for negative indices
(index + size) versus non-negative indices (just index). To resolve this, we allocate an unbacked
SymInt to represent the storage offset and decompose the select operation into a call to as_strided,
computing the storage offset at runtime with this node.
c                ó   • [        5       $ rƒ   r9   rŸ  s    rˆ   rž  Ú$DynamicSelectStorageOffset.get_reads  rÝ  rŠ   c                ó   • gr  r™   rŸ  s    rˆ   r'  Ú*DynamicSelectStorageOffset.should_allocate  r  rŠ   c                ó¦   >• [         TU ]  S [        [        R                  " S5      S9/ 5        Xl        X l        X0l        X@l        XPl	        X`l
        g ©Nr   r  )r·  rÀ  r·  r  r  Úunbacked_offset_symbolrÊ   Úbase_offsetÚbase_dim_strider  rž  )rŒ  r&  rÊ   r'  r(  r  rž  r¹  s          €rˆ   rÀ  Ú#DynamicSelectStorageOffset.__init__  sG   ø€ ô 	‰Ñ˜œz´·²¸eÓ1DÑEÀrÔJð '=Ô#ØŒ
Ø&ÔØ.ÔØŒ	Ø�
rŠ   c                ó.   • [        U R                  /5      $ rƒ   )r:   r&  rŸ  s    rˆ   rÛ  Ú3DynamicSelectStorageOffset.get_unbacked_symbol_defs$  s   € Ü˜4×6Ñ6Ð7Ó8Ð8rŠ   c                ó.   • [        U R                  U5      $ rƒ   )r(   rÊ   r`  s     rˆ   ra  Ú/DynamicSelectStorageOffset.get_free_symbol_uses'  s   € ô   §
¡
¨MÓ:Ð:rŠ   c                ó6   • UR                  X R                  S9  g )NrÖ	  )Úcodegen_dynamic_select_indexrž  r%
  s     rˆ   r&
  Ú"DynamicSelectStorageOffset.codegen-  s   € Ø×,Ñ,¨T¿¹Ð,ÒDrŠ   )r(  r'  rž  rÊ   r  r&  r¨  r‰  )r&  úsympy.SymbolrÊ   r1  r'  úUnion[sympy.Symbol, int]r(  r2  r  r2  rž  r•   r¶   r·   rå  r   r«  rë
  ©r›   rœ   r�   rž   r®  rž  r'  rÀ  rÛ  rY   ra  r&
  r    rª  r«  s   @rˆ   r  r    s™   ø† ñôôðà ,ðð ðð .ð	ð
 2ðð 'ðð ðð 
÷ô&9ñ Ð8Ó9à$)ð;Ø!ð;à	!ô;ó :ð;÷
Eò ErŠ   r  c                  ó˜   ^ • \ rS rSrSrS
S jrSS jr          SU 4S jjrSS jr\	" S 5       S   SS jj5       r
SS jrS	rU =r$ )ÚDynamicSliceSizei1  a7  
Computes the output size of a slice call, handling the correct semantics in codegen.
We do this for flexible handling for unbacked indices (to not data-dependent error).

Slicing has 4 semantics for indices, i.e. x[start:] could be:
1) start < -x.size(0)            -> x[0:]                    # negative out-of-bounds
2) start in [-x.size(0), 0)      -> x[x.size(0) + start:]    # negative slicing
3) start in [0, x.size(0))       -> x[start:]                # standard slicing
4) start >= x.size(0)            -> empty slice              # positive out-of-bounds

If the appropriate semantics are known beforehand, the output size is computed based on
the start & end indices. If not (with unbacked indices), a new unbacked symbol is created
to represent the output size, and codegen handles computing the correct case.
c                ó   • [        5       $ rƒ   r9   rŸ  s    rˆ   rž  ÚDynamicSliceSize.get_readsA  rÝ  rŠ   c                ó   • gr  r™   rŸ  s    rˆ   r'  Ú DynamicSliceSize.should_allocateD  r  rŠ   c                óš   >• [         TU ]  S [        [        R                  " S5      S9/ 5        Xl        X l        X0l        X@l        XPl	        g r%  )
r·  rÀ  r·  r  r  Úunbacked_size_symbolr©  rª  r¯  r  )rŒ  r;  r©  rª  r¯  r  r¹  s         €rˆ   rÀ  ÚDynamicSliceSize.__init__G  s>   ø€ ô 	‰Ñ˜œz´·²¸eÓ1DÑEÀrÔJà$8Ô!ØŒ
ØŒØŒ	Ø�	rŠ   c                ó.   • [        U R                  /5      $ rƒ   )r:   r;  rŸ  s    rˆ   rÛ  Ú)DynamicSliceSize.get_unbacked_symbol_defsW  s   € Ü˜4×4Ñ4Ð5Ó6Ð6rŠ   c                ót   • [        U R                  U5      R                  [        U R                  U5      5      $ rƒ   )r(   r©  rñ  rª  r`  s     rˆ   ra  Ú%DynamicSliceSize.get_free_symbol_usesZ  s0   € ô   §
¡
¨MÓ:×@Ñ@Ü˜TŸX™X }Ó5ó
ð 	
rŠ   c                ó&   • UR                  U 5        g rƒ   )Úcodegen_dynamic_slice_sizer%
  s     rˆ   r&
  ÚDynamicSliceSize.codegenb  rô
  rŠ   )rª  r  r©  r¯  r;  r¨  r‰  )
r;  r1  r©  r2  rª  r2  r¯  r2  r  r2  rå  r   r«  rë
  r3  r«  s   @rˆ   r5  r5  1  sƒ   ø† ñôôðà*ðð (ðð &ð	ð
 'ðð '÷ô 7ñ Ð.Ó/à$)ð
Ø!ð
à	!ô
ó 0ð
÷1ò 1rŠ   r5  c                  óh   ^ • \ rS rSrSrS	S jrS
S jr        SU 4S jjrSS jrSS jr	Sr
U =r$ )r¨   if  z3
The result of a call to aten._local_scalar_dense.
c                ó   • [        5       $ rƒ   r9   rŸ  s    rˆ   rž  ÚDynamicScalar.get_readsk  rÝ  rŠ   c                ó   • gr  r™   rŸ  s    rˆ   r'  ÚDynamicScalar.should_allocaten  r  rŠ   c                ó¶   >• UR                  5         [        TU ]	  S [        [        R
                  " S5      S9U R                  U/5      5        Xl        X l        g r%  )	r  r·  rÀ  r·  r  r  rÙ  ÚsymÚkeypath)rŒ  rJ  rK  rM  r¹  s       €rˆ   rÀ  ÚDynamicScalar.__init__q  sI   ø€ ð 	�‰ŒÜ‰ÑØ”*¤E§L¢L°Ó$7Ñ8¸$×:MÑ:MÈtÈfÓ:Uô	
ð ŒØ�rŠ   c                ó.   • [        U R                  /5      $ rƒ   )r:   rJ  rŸ  s    rˆ   rÛ  Ú&DynamicScalar.get_unbacked_symbol_defs{  s   € Ü˜4Ÿ8™8˜*Ó%Ð%rŠ   c                ó&   • UR                  U 5        g rƒ   )Úcodegen_dynamic_scalarr%
  s     rˆ   r&
  ÚDynamicScalar.codegen~  s   € Ø×&Ñ& tÕ,rŠ   )rK  rJ  r¨  r‰  )rJ  r1  rK  zpytree.KeyPathrM  r€   r¶   r·   rå  rë
  )r›   rœ   r�   rž   r®  rž  r'  rÀ  rÛ  r&
  r    rª  r«  s   @rˆ   r¨   r¨   f  sF   ø† ñôôðØðØ*8ðØ@Fðà	÷ô&÷-ò -rŠ   r¨   c                  ó„   ^ • \ rS rSrSrS
S jrSS jrSU 4S jjrSS jr\	" S 5       S   SS jj5       r
SS jrS	rU =r$ )r©   i‚  z-
The result of a call to aten._assert_scalar
c                ó   • [        5       $ rƒ   r9   rŸ  s    rˆ   rž  ÚAssertScalar.get_reads‡  rÝ  rŠ   c                ó   • gr  r™   rŸ  s    rˆ   r'  ÚAssertScalar.should_allocateŠ  r  rŠ   c                óv   >• [         TU ]  S [        [        R                  " S5      S9/ 5        Xl        X l        g r%  )r·  rÀ  r·  r  r  Úscalarrm
  )rŒ  rX  rm
  r¹  s      €rˆ   rÀ  ÚAssertScalar.__init__�  s3   ø€ Ü‰ÑàÜœeŸlšl¨5Ó1Ñ2àô	
ð ŒØ�rŠ   c                ó   • gra  r™   rŸ  s    rˆ   rÛ  ÚAssertScalar.has_side_effects˜  r®  rŠ   c                ó.   • [        U R                  U5      $ rƒ   )r(   rX  r`  s     rˆ   ra  Ú!AssertScalar.get_free_symbol_uses›  s   € ô   §¡¨]Ó;Ð;rŠ   c           	     óÎ  • [         R                  (       d  g [        [        U R	                  SS95      5      n[
        R                  R                  (       a  g [
        R                  R                  (       a^  SU S3n[
        R                  R                  R                  U R                  SS9nUR                  SU SU R                   SU S	35        g [
        R                  R                  R                  U R                  SS9nUR                  S
U S35        UR                  S[        U R                  5       S35        UR                  U R!                  5        S35        g )NFrh  zstd::to_string(r  )rJ  zif (!(z()) { throw std::runtime_error("Expected z but received " + z); }zif not (z):z    raise RuntimeError(z = None)rB   Úscalar_assertsrC  rD  ra  rn   r  r:
  r+
  rw  Úcodegen_cpp_sizevarrX  ry  rm
  Úcodegen_python_sizevarr­  rs  )rŒ  r
  ÚsymbolÚ
symbol_strÚsizevars        rˆ   r&
  ÚAssertScalar.codegen¡  s4  € Ü×$×$Øô ”d˜4×4Ñ4À5Ð4ÐIÓJÓKˆÜ�7‰7××àÜ�W‰W× × Ø*¨6¨(°!Ð4ˆJÜ—g‘g×*Ñ*×>Ñ>Ø—‘ eð ?ð ˆGð ×ÑØ˜˜	Ð!JÈ4Ï8É8È*ÐTfÐgqÐfrÐrwÐxõô —g‘g×*Ñ*×AÑAØ—‘ eð Bð ˆGð ×Ñ ¨¨	°Ð4Ô5Ø×ÑÐ 7¼¸T¿X¹X»Ð7GÀqÐIÔJð ×Ñ §¡£Ð 1°Ð9Õ:rŠ   )rm
  rX  r¨  r‰  )rX  rp   rm
  rÃ   r¶   r·   r   r«  rë
  )r›   rœ   r�   rž   r®  rž  r'  rÀ  rÛ  rY   ra  r&
  r    rª  r«  s   @rˆ   r©   r©   ‚  sR   ø† ñôô÷	ôñ ˜NÓ+à$)ð<Ø!ð<à	!ô<ó ,ð<÷
;ò ;rŠ   r©   c                  ó*   • \ rS rSr% S\S'   S\S'   Srg)ÚExternKernelNodeiÁ  rÃ   r¿   zexport_schema.Noder²   r™   Nrš   r™   rŠ   rˆ   rg  rg  Á  s   ‡ à
ƒIØ
ÖrŠ   rg  c                  ó
  ^ • \ rS rSrSr SSS.               SU 4S jjjjrSU 4S jjrSS jrSS jrSS	 jr	\
      SS
 j5       rSS jrSS jrSS jrS r\SS j5       r\
SS j5       r\SS j5       rSrU =r$ )ÚFallbackKerneliÇ  zà
A class that represents a fallback kernel for handling operators that are not
directly support by inductor. It currently supports functional ops, view ops,
inplace aten ops, and mutating ops that are auto-functionalizable.
N©rÿ	  c               ó  >^ • [         TT ]  U[        U5      [        U5      US9  ST l        U=(       d    0 T l        [        U[        R                  R                  [        R                  R                  45      (       d   SU S[        U5       S35       eUT l        UT l        Uc  0 OUT l        T R                  c   e[        R                   R#                  T R                  5        / T l        / T l        [        T R                  [        R                  R                  5      (       a  g ST R                  R)                  5       ;   a  g T R                  R*                  n[        R,                  R.                  R1                  T R                  5      (       a-  T R&                  R3                  US   R5                  5       5        g SS jn	UR6                  (       aI  [9        T R                  5      (       d/  U	" T R                  5      (       d  [;        S	T R                   35      eT R                  T R<                  T R>                  5      u  p¦SU 4S
 jjn[        R,                  R.                  RA                  XŠU5       H  u  pÍU" XÍ5        M     g )Nr¹  Fú#Fails to create FallbackKernel for r  ú not supportedÚ_c10d_functionalr   c                ó8  • [         R                  R                  U R                  5       [         R                  R                  R
                  5      =(       dD    [        U S5      =(       a1    [         R                  R                  R
                  U R                  ;   $ )NÚ
py_kernels)r  Ú_CÚ%_dispatch_has_kernel_for_dispatch_keyr¿   ÚDispatchKeyÚFunctionalizer³  rp  r]  s    rˆ   Úhas_functionalize_implÚ7FallbackKernel.__init__.<locals>.has_functionalize_impl  sg   € Ü—8‘8×AÑAØ—‘“	œ5Ÿ8™8×/Ñ/×=Ñ=ó÷ ô ˜˜LÓ)÷ HÜ—H‘H×(Ñ(×6Ñ6¸"¿-¹-ÑGð	rŠ   z'NYI: Can't generate FallbackKernel for c                ó>  >^ • [        T R                  [        R                  5      (       a+  [        U[        [
        45      (       d   [        U5      5       e[        R                  " T R                  5      (       a  [        U[
        [        45      (       a   eUc  g T R                  c  g SU U4S jjn[        R                  " T R                  5      (       a  Ub  U H  nU" U5        M     g g [        R                  " T R                  5      (       d   eU" U5        g )Nc                ó$  >• TR                   R                  U R                  5       5        TR                  c   eTR                  R                  (       a<  TR
                  R                  [        [        U R                  5       S9U T5      5        g g rJ  )	Úalias_namesrÅ  rs  Ú
alias_infoÚis_writer 
  rù  r·  r  )r  ÚinforŒ  s    €€rˆ   Ú	add_aliasÚPFallbackKernel.__init__.<locals>.handle_aliasing_and_mutation.<locals>.add_alias1  sj   ø€ Ø× Ñ ×'Ñ'¨¯
©
«Ô5Ø—‘Ñ2Ð2Ð2Ø—?‘?×+×+Ø×)Ñ)×0Ñ0Ü&¤z¸¿¹»Ñ'HÈ!ÈTÓRõð ,rŠ   )r  r€   r¶   r·   )
r„   r°   r  ÚListTyper£   r¤   Úlibrary_utilsÚis_tensor_like_typerz  Úis_tensorlist_like_type)r|  rÓ	  r}  Úoptional_tensor_argrŒ  s   `   €rˆ   Úhandle_aliasing_and_mutationÚ=FallbackKernel.__init__.<locals>.handle_aliasing_and_mutation#  sÞ   ù€ ä˜$Ÿ)™)¤U§^¡^×4Ñ4Ü! #¬¬e }×5Ñ5Ð@´t¸C³yÓ@Ð5Ü×0Ò0°·±×;Ñ;ô & c¬E´4¨=×9Ñ9Ð9Ð9à‰{ØØ�‰Ñ&Ø÷ð ô ×4Ò4°T·Y±Y×?Ñ?Ø‘?Û/2Ð+Ù!Ð"5Ö6ò 03ð #ô %×8Ò8¸¿¹×CÑCÐCÐCá˜#•rŠ   )r^  r  r¶   r•   )r|  ztorch._C.ArgumentrÓ	  r   r¶   r·   )!r·  rÀ  r¤   Úuse_runtime_dispatchrÿ	  r„   r  r
  r
  r4
  r°   rû	  rO
  r¾   rö	  rn   r  Úwarn_fallbackry  r  r¿   r
  Ú_libraryr£  Úmutates_and_returns_first_argrÅ  rs  Ú
is_mutabler%   rÚ  rj  ró	  Ú
zip_schema)rŒ  rN  r…	  rc
  Únontensor_argsrO
  r¾   rÿ	  Úschemaru  r½   r„  r|  rÓ	  r¹  s   `             €rˆ   rÀ  ÚFallbackKernel.__init__Î  s*  ù€ ô 	‰ÑØÜ�+ÓÜ�.Ó!Øð	 	ñ 	
ð %*ˆÔ!Ø!2×!8°bˆÔäØ”U—Z‘Z×*Ñ*¬E¯J©J×,JÑ,JÐK÷
ñ 
ð 	Xà0°°¸¼4À»<¸.ÈÐWó	Xð 
ð "ˆÔØ,ˆÔØ"™N‘b°ˆŒØ×&Ñ&Ñ2Ð2Ð2Ü	�‰×Ñ˜d×5Ñ5Ô6ð ')ˆÔà)+ˆÔä�d×&Ñ&¬¯
©
×(FÑ(F×GÑGð à ×!1Ñ!1×!6Ñ!6Ó!8Ó8ð
 à×!Ñ!×)Ñ)ˆô �>‰>×Ñ×=Ñ=¸d×>NÑ>N×OÑOØ×Ñ×&Ñ& {°1¡~×'>Ñ'>Ó'@ÔAØô	ð ××Ü*¨4×+;Ñ+;×<Ñ<Ù*¨4×+;Ñ+;×<Ñ<ä%Ø9¸$×:JÑ:JÐ9KÐLóð ð ×*Ñ*¨4¯;©;¸×8JÑ8JÓK‰ˆ÷	ô> Ÿ™×-Ñ-×8Ñ8¸ÀvÖN‰IˆDÙ(¨Ö3ò OrŠ   c                ó@  >• [         TU ]  5       nU R                  [        R                  R
                  R                  L a]  U R                   HM  n[        U[        5      (       d  M  UR                  [        R                  " UR                  5       5      5      nMO     U$ rƒ   )r·  rR  rû	  r  Ú_primsÚ	rng_primsÚgraphsafe_run_with_rng_stateró	  r„   rR
  Ú	with_readrC   rƒ  rs  )rŒ  rí  rÓ	  r¹  s      €rˆ   rR  ÚFallbackKernel.get_read_writesE  sw   ø€ Ü‘gÑ-Ó/ˆà×ÑœuŸ|™|×5Ñ5×RÑRÒRØ×)Ô)�Ü˜c¤>×2Ó2Ø"-×"7Ñ"7Ü$×,Ò,¨S¯\©\«^Ó<ó#’Kñ *ð ÐrŠ   c           	     ón   • UR                  U R                  5       U R                  [        U SS 5      5      $ ©Nrÿ	  )Ú(codegen_unbacked_symbol_defs_for_outputsrs  rø  r¼   r%
  s     rˆ   Úcodegen_unbacked_symbol_defsÚ+FallbackKernel.codegen_unbacked_symbol_defsQ  s0   € Ø×?Ñ?Ø�M‰M‹O˜TŸ\™\¬7°4Ð9LÈdÓ+Só
ð 	
rŠ   c                óÖ   • [        U SS 5      =n(       aL  [        [        R                  R                  R
                  U5      nUc   e[        UR                  5       5      $ [        5       $ r–  ©r¼   r5   rn   r  r  rí   r:   r  ©rŒ  rÿ	  Úresolveds      rˆ   rÛ  Ú'FallbackKernel.get_unbacked_symbol_defsV  ó_   € Ü '¨Ð.AÀ4Ó HÐHÐÕHÜ0Ü—‘× Ñ ×*Ñ*Ð,=óˆHð Ñ'Ð'Ð'Ü˜hŸm™m›oÓ.Ð.ä“<ÐrŠ   c                ó~  • [         R                   " S S5      5       n[        U R                  5      (       d   eU R                   Vs/ s H  o!" UR	                  5       5      PM     nnU R                  X0R                  5      u  pE[        R                  R                  (       a´  [        U R                  [        R                  R                  5      (       a�  U R                  XE5      n[!        U R                  R"                  R$                  U5       VVs/ s H8  u  pb[        R                  R&                  R)                  X&R*                  5      PM:     nnnO9U Vs/ s H,  n[        R                  R&                  R)                  U5      PM.     nnU R,                  R/                  U5        U$ s  snf s  snnf s  snf )Nc                  ó*   • \ rS rSr% S\S'   SS jrSrg)Ú)FallbackKernel.codegen_args.<locals>.Shimia  r   Úrefc                ó   • U R                   $ rƒ   )r£  rŸ  s    rˆ   rE  Ú2FallbackKernel.codegen_args.<locals>.Shim.__repr__e  s   € Ø—x‘x�rŠ   r™   Nr›  )r›   rœ   r�   rž   rŸ   rE  r    r™   rŠ   rˆ   ÚShimr¢  a  s   ‡ à‹H÷ rŠ   r¦  )r¯  Ú	dataclassr¥	  rj  r	  rO
  ró	  rn   r  r+
  r„   rû	  r  r
  r
  r©
  rÒ   r
  r
  rw  r¬
  r
  r¾   rÿ  )rŒ  r¦  r‡   rc
  r½   r¾   Úparams          rˆ   r´
  ÚFallbackKernel.codegen_args`  s\  € Ü	×	Ñ	÷	 ð 	 ó 
ð	 ô   §¡×,Ñ,Ð,Ð,Ø<@¿KºKÓHºK°q�t˜A×/Ñ/Ó1Ö2¹KˆÐHØ×*Ñ*¨;×8JÑ8JÓK‰ˆÜ�7‰7××¤:¨d×.>Ñ.>ÄÇ
Á
×@UÑ@U×#VÑ#VØ×.Ñ.¨tÓ<ˆDô !$ D×$4Ñ$4×$<Ñ$<×$FÑ$FÈÔ Môâ M‘H�Eô —‘×$Ñ$×3Ñ3°A·±ÖGÙ Mð ñ ˆDñ
 EIÓIÂD¸q”A—G‘G×(Ñ(×7Ñ7¸Ö:ÁDˆDÐIð 	�‰×Ñ˜6Ô"Øˆùò Iùóùò
 Js   ÁF/Ä?F4Å3F:c                óÄ  • U (       a*  U  Vs/ s H  n[        U[        5      (       a  M  UPM     snOS nU(       aD  U (       d   eU  Vs/ s H)  oDR                  5       (       d  M  UR                  5       PM+     nnUS   $ [        U[        R                  5      (       a  UR
                  $ [        U[        [        45      (       a�  [        S U 5       5      nU Vs/ s H  ow(       d  M  UPM     nn[        U5      S:X  a  US   $ U HB  n[        U[        R
                  5      (       d   e[        UR                  5      (       d  M@  Us  $    US   $ g s  snf s  snf s  snf )Nr   c              3  óN   #   • U  H  n[         R                  S U5      v •  M     g 7frƒ   )ri  Úfind_devicer”  s     rˆ   rè   Ú-FallbackKernel.find_device.<locals>.<genexpr>ˆ  s)   é € ð $ò (�Aô ×*Ñ*¨4°×3Ð3Ú'ùré  rA   )r„   r¸	  r  r  r]
  r  r£   r¤   r:   rÈ   re   r°   )rc
  ri
  r  Únon_torch_bind_tensor_argsrÓ	  ÚdevicesÚ
device_setr  s           rˆ   r¬  ÚFallbackKernel.find_devicex  s3  € ö ñ $ÓJš�1¬:°a¼×+I�Q™ÒJàð 	#ö
 &ÞÐ�;Ù3>ÓS²;¨CÇ.Á.×BRÓ'�s—~‘~Ö'±;ˆGÐSØ˜1‘:ÐÜ�n¤e§l¡l×3Ñ3Ø!×(Ñ(Ð(Ü�n¤t¬U m×4Ñ4Ü#ñ $ñ (ó$ó ˆJñ -7ÓAªJ &»&—v©JˆGÐAÜ�7‹|˜qÓ Ø˜q‘zÐ!Û!�Ü! &¬%¯,©,×7Ñ7Ð7Ð7Ü˜&Ÿ+™+×&Ó&Ø!’Mñ "ð ˜1‘:ÐØùò3 Kùò Tùò Bs"   ŒE©EÁEÁ$EÃ
EÃ)Ec                ó2   • SSK Jn  U" U R                  5      $ )Nr   )Ú	is_impure)Útorch._library.utilsr³  rû	  )rŒ  r³  s     rˆ   rÛ  ÚFallbackKernel.has_side_effects˜  s   € Ý2ñ ˜×)Ñ)Ó*Ð*rŠ   c                ó.  • [        U R                  [        R                  R                  [        R                  R
                  45      (       d+   SU R                   S[        U R                  5       S35       e[        U R                  [        R                  R
                  5      (       d_  SU R                  R                  5       ;  aA  U R                  R                  R                  (       a  [        U R                  5      (       a  / $ U R                  $ )Nrl  r  rm  rn  )r„   rû	  r  r
  r
  r4
  r°   r¿   r
  rŠ  r%   ry  rŸ  s    rˆ   ry  Ú+FallbackKernel.get_inputs_that_alias_outputŸ  sÙ   € ÜØ×ÑœuŸz™z×4Ñ4´e·j±j×6TÑ6TÐU÷
ñ 
ð 	
ð 2°$×2BÑ2BÐ1CÀ2Ü�D×$Ñ$Ó%Ð& nð6ó	
ð 
ô ˜4×+Ñ+¬U¯Z©Z×-KÑ-K×LÑLØ"¨$×*:Ñ*:×*?Ñ*?Ó*AÓAØ× Ñ ×(Ñ(×3×3Ü& t×'7Ñ'7×8Ñ8àˆIà×#Ñ#Ð#rŠ   c                óP   • [        U R                  5      S::  d   eU R                  $ r  )rÈ   r  rŸ  s    rˆ   rs  Ú!FallbackKernel.get_mutation_names´  s'   € Ü�4×&Ñ&Ó'¨1Ó,Ð,Ð,Ø×"Ñ"Ð"rŠ   c           
     ó   • [         R                  SU R                  5       U R                  5        [	        U [
        5      (       d   [        U 5      5       eU R                  U R                  U R                  5      u  pU R                  X5      nU R                   Vs/ s H  nU R                  " U40 UD6PM     nnU R                  n[        R                  R                  (       d  / UQUQ$ [!        S/ 5      nUR#                  XQU5      n      SS jn[	        U[$        R&                  R(                  R*                  5      (       a#  UR-                  US   US   5      R.                  n	OUR0                  R.                  n	[3        U	5      S:X  aB  U R4                  (       a  U R4                  OU R6                  n
U	S   R8                  nU" Xº5      /nO:[;        X�R4                  5       VVs/ s H  u  pÞU" UR8                  U5      PM     nnnU R                  c   e[=        U R                  5       [>        R@                  " U R                  RC                  5       UU0 S9S9n[        RD                  RG                  U5        / UQUQ$ s  snf s  snnf )	a�  
ProxyExecutor Design Note
We export the ExternFallbackNodes (for custom ops) into a serialized file
and run it with a host side proxy executor to address the ABI problem
This is currently only implemented for fbcode. Eventually, we will also make this work for OSS.
Detailed design doc can be found at
https://docs.google.com/document/d/1wC4DOZFaYym2t1Esz0X5yxlLI3RDnSiyRbUus3bkJ64/edit?usp=sharing
z4Extern kernel node added for node %s with target %s.Nc           	     ó
  • [        U [        R                  [        R                  45      (       aÈ  Un[        U[        [
        45      (       a  [        U5      S:X  d   eUS   n[        U [        R                  5      (       aT  [        U[        5      (       d   e[        R                  R                  [        R                  " UR                  5       S9S9$ Ub   e[        R                  R                  SS9$ [        U [        R                  5      (       a   [        U R                  5       [        R                  5      (       as  [        U[        5      (       d   [!        U5      5       e[        R                  R                  U Vs/ s H%  n[        R                  " UR                  5       S9PM'     snS9$ [        U [        R"                  5      (       a×  [        U R                  5       [        R                  5      (       aª  Uc8  [        R                  R                  [        R$                  R                  SS9S9$ [        U[        5      (       d   e[        R                  R                  [        R$                  R                  [        R                  " UR                  5       S9S9S9$ [        U [        R&                  5      (       a  [        R                  R                  US	9$ [)        S
[!        U 5       35      es  snf )NrA   r   r—  )Ú	as_tensorT)Úas_none)Ú
as_tensors)Úas_optional_tensor)Úas_intzUnsupported return type )r„   r  Ú
TensorTypeÚNoneTyper£   r¤   rÈ   r€   Úexport_schemarq   r  ÚTensorArgumentrs  r  ÚgetElementTyper   r°   ÚOptionalTypeÚOptionalTensorArgumentÚIntTypeÚRuntimeError)Úreturn_typer\  rù   s      rˆ   Úhandle_single_outputÚFFallbackKernel.export_extern_kernel_node.<locals>.handle_single_outputØ  s“  € ô ˜+¬×(8Ñ(8¼%¿.¹.Ð'I×JÑJà�Ü˜f¤t¬U m×4Ñ4Ü˜v›;¨!Ó+Ð+Ð+Ø  ™)�CÜ˜k¬5×+;Ñ+;×<Ñ<Ü% c¬6×2Ñ2Ð2Ð2Ü(×1Ñ1×8Ñ8Ü"/×">Ò">ÀCÇLÁLÃNÑ"Sð 9ð ð ð ™;Ð&˜;Ü(×1Ñ1×8Ñ8ÀÐ8ÐFÐFÜ˜K¬¯©×8Ñ8¼ZØ×*Ñ*Ó,¬e×.>Ñ.>÷>ñ >ô " &¬(×3Ñ3ÐA´T¸&³\ÓAÐ3ä$×-Ñ-×4Ñ4ñ $*ó â#)˜Cô &×4Ò4¸#¿,¹,».ÔIÙ#)ñ ð 5ð ð ô ˜K¬×);Ñ);×<Ñ<ÄØ×*Ñ*Ó,¬e×.>Ñ.>÷Bñ Bð ‘>Ü(×1Ñ1×8Ñ8Ü+8×+OÑ+O×+VÑ+VØ$(ð ,Wð ,ð 9ð ð ô & f¬f×5Ñ5Ð5Ð5Ü(×1Ñ1×8Ñ8Ü+8×+OÑ+O×+VÑ+VÜ&3×&BÒ&BØ%+§_¡_Ó%6ñ'ð ,Wð ,ð 9ð ð ô ˜K¬¯©×7Ñ7Ü$×-Ñ-×4Ñ4¸FÐ4ÐCÐCä"Ð%=¼dÀ;Ó>OÐ=PÐ#QÓRÐRùò7 s   Æ,L r   rA   )rÝ  rj  rø  rŒ	  )r¿   r²   )rÊ  z6Union[torch.TensorType, torch.ListType, torch.JitType]r\  úUnion[IRNode, Sequence[IRNode]]r¶   zexport_schema.Argument)$rÿ  r¶  rs  rû	  r„   ri  r°   rO
  rj  ró	  r©
  rù	  r·
  rn   r  Úaot_moder$   Úserialize_inputsr  rZ
  Ú	torchbindÚCallTorchBindr�  Úreturnsr
  rÈ   rø  r 
  r
  rÒ   rg  rÃ  r8   r¿   Úextern_kernel_nodesrÅ  )rŒ  r½   r¾   râ  Úordered_kwargsrÝ  Ú
serializerÚnamed_argumentsrË  rÒ  rø  rÊ  Úoutput_argumentsÚreturn_schemar\  r²   s                   rˆ   Úexport_extern_kernel_nodeÚ(FallbackKernel.export_extern_kernel_node¸  sl  € ô 	�	‰	ØBØ�M‰M‹OØ×Ñô	
ô ˜$¤×/Ñ/Ð;´°d³Ó;Ð/Ø×*Ñ*¨4¯;©;¸×8JÑ8JÓK‰ˆØ×*Ñ*¨4Ó8ˆð ×9Ò9ó
â9�ð ×!Ò! #Ñ0¨Ô0Ù9ð 	ð 
ð ×!Ñ!ˆä�w‰w××à+�TÐ+˜NÐ+Ð+ä*¨4°Ó4ˆ
Ø$×5Ñ5°fÀFÓKˆð3	SØOð3	Sà3ð3	Sð $ô3	Sôj �fœe×5Ñ5×?Ñ?×MÑM×NÑNØ—m‘m D¨¡G¨T°!©WÓ5×=Ñ=‰Gà—n‘n×,Ñ,ˆGÜˆw‹<˜1Óð '+§l§l�d—l’l¸×8MÑ8MˆGØ! !™*×.Ñ.ˆKÙ 4°[Ó JÐKÑô .1°¿,¹,Ô-Gô ò
 .HÑ)�Mñ	 %Ø!×+Ñ+Øöñ .Hð ñ  ð ×ÑÑ+Ð+Ð+ÜØ—‘“Ü×#Ò#Ø×'Ñ'×,Ñ,Ó.Ø&Ø(Øñ	ñ
ˆô 	
×Ñ×$Ñ$ TÔ*à'�Ð'˜Ð'Ð'ùòK
ùó` s   ÂJÇ*J
c                ó¢  ^ ^^• T R                   nUc   eUR                  S:X  a‹  [        U[        R                  R
                  5      (       d   [        U5      5       e[        R                  R                  (       a2  SSK
Jn  [        U5      U;  a  [        R                  SU5        ST l        O‹UR                  S:X  a:  [        U[        R                  R
                  5      (       d   [        U5      5       eOA[        R                  R                  (       a"  U[         R"                  R$                  ;  T l        [        R                  R                  (       aÎ  [        U[        R                  R
                  5      (       a¥  T R                  (       d”  SU4S jjmT R'                  T R(                  T R*                  5      u  nm[,        R.                  " UUU 4S	 jT R0                   5       5      n[3        U4S
 j[5        XRR6                  R8                  5       5       5      T l        T R;                  U5        T R                  (       a’  T R=                  5       nT R>                  c   eT R                   c   eURA                  T RC                  5       T R>                  U 4S jT R                   UT RD                  (       a  T RD                  OT RF                  5        OcURI                  T 5        [        T RJ                  [L        5      (       a3  T RO                  U5        T RQ                  U5        T RS                  U5        T RU                  U5        g)r}  Nr)
  r   )Úinductor_fallback_opszG%s is missing a c-shim implementation, using proxy executor as fallbackTÚ
_quantizedc                ó¢   >• [        U [        R                  5      (       a  T" U R                  5       5      $ [        U [        R                  5      $ rƒ   )r„   r  rÆ  rÅ  Ú
NumberType)r  Ú	is_numbers    €rˆ   rà  Ú)FallbackKernel.codegen.<locals>.is_numberX   s=   ø€ Ü˜a¤×!3Ñ!3×4Ñ4Ù$ Q×%5Ñ%5Ó%7Ó8Ð8Ü! !¤U×%5Ñ%5Ó6Ð6rŠ   c              3  óJ   >#   • U  H  nTR                   " U40 TD6v •  M     g 7frƒ   )r·
  )ræ   r»
  r¾   rŒ  s     €€rˆ   rè   Ú)FallbackKernel.codegen.<locals>.<genexpr>e   s(   øé € ð â?˜ð ×)Ò)¨!Ñ6¨vÖ6Ú?ùs   ƒ #c              3  óz   >#   • U  H0  u  p[        U[        5      =(       a    T" UR                  5      v •  M2     g 7frƒ   )r„   Úcomplexr
  )ræ   rŠ  r�  rà  s      €rˆ   rè   rã  j   s2   øé € ð ,âD‘D�Aô ˜1œgÓ&×A©9°Q·[±[Ó+AÔAÚDùs   ƒ8;c                 óH   >• / T R                  5       QT R                  5       Q$ rƒ   )r´
  r¼
  rŸ  s   €rˆ   rß  Ú(FallbackKernel.codegen.<locals>.<lambda>x   s"   ø€ ÐF˜$×+Ñ+Ó-ÐF°×0CÑ0CÓ0EÑFrŠ   )r  ztorch.JitTyper¶   r•   )+rû	  r,
  r„   r  r
  r
  r°   rn   r  r+
  Útorchgen.aoti.fallback_opsrÜ  rÃ   rÿ  rÀ  r†  rB   r  Úcustom_ops_to_c_shimsrO
  rj  ró	  r  r2  rù	  r{  rÒ   r
  r
  r"
  rÙ  rö	  Ú,generate_fallback_kernel_with_runtime_lookuprs  rø  r 
  Úgenerate_fallback_kernelrN  rí  rÉ
  rÎ
  rÔ
  r˜  )	rŒ  r
  r…	  rÜ  r½   Ú	args_iterÚexported_argsrà  r¾   s	   `      @@rˆ   r&
  ÚFallbackKernel.codegen1   sz  ú€ ð ×!Ñ!ˆØÑ!Ð!Ð!Ø×Ñ˜vÓ%ä˜f¤e§j¡j×&;Ñ&;×<Ñ<ÐJ¼dÀ6»lÓJÐ<Ü�w‰w×"×"ÝLä�v“;Ð&;Ó;ô —K‘KØaØôð 15�DÔ-øØ×Ñ Ó-ä˜f¤e§j¡j×&;Ñ&;×<Ñ<ÐJ¼dÀ6»lÓJÑ<Ü�W‰W× × ð œf×1Ñ1×GÑGÑGð Ô%ô �G‰G××Ü˜6¤5§:¡:×#8Ñ#8×9Ñ9Ø×-×-÷7ð  ×.Ñ.¨t¯{©{¸D×<NÑ<NÓO‰LˆD�&ô "ŸšØõà!×?Ò?óóˆIô ),ô ,ä 	¯>©>×+CÑ+CÔDó,ó )ˆDÔ%ð
 	×Ñ˜WÔ%Ø×$×$Ø ×:Ñ:Ó<ˆMØ×*Ñ*Ñ6Ð6Ð6Ø×#Ñ#Ñ/Ð/Ð/à×@Ñ@Ø—‘“Ø×'Ñ'ÜFØ× Ñ Øà $§§�—’°$×2GÑ2Gõð ×,Ñ,¨TÔ2Ü˜$Ÿ+™+¤v×.Ñ.Ø×)Ñ)¨'Ô2Ø×.Ñ.¨wÔ7Ø×,Ñ,¨WÔ5à×)Ñ)¨'Õ2rŠ   c           	     óæ   • Sn U R                  5       n[        U R                  U R                  [        U R                  5       5      [        U R                  5       5      US9$ ! [         a     N[f = f)NFr—  )rR  rÉ  rP  r  r  r[   r  r  )r\  rR  s     rˆ   Útensor_to_layoutÚFallbackKernel.tensor_to_layout‡   sj   € àˆ	ð	Ø×(Ñ(Ó*ˆIô Ø�M‰MØ�L‰LÜ% f§k¡k£mÓ4Ü% f§m¡m£oÓ6Øñ
ð 	
øô ó 	áð	ús   „A# Á#
A0Á/A0c           
     óŒ  ^ ^^^• [         R                  4nX;  a,  [        [        S   [        R
                  R                  5      nO
[        5       nU   T R                  " U/UQ70 UD6u  nnnn	n
SSS5        [        S W 5       5      mT R                  UW5      nU(       dp  [        U[        R                  R                  R                  5      (       d'  U[        R                   R"                  R$                  L a  [        R&                  " S5      nUc  T " [)        US9UUWW	UW
S9mO!U(       d   S5       eT " [+        US9UUWW	UW
S9mSU UUU4S jjmT" U/ 5      n[        U[,        [.        45      (       a	  UTl        U$ [        U[2        5      (       a  [/        U5      Tl        U$ U/Tl        U$ ! , (       d  f       GNK= f)	z9Create an instance of FallbackKernel from an _OpOverloadsNc              3  ó8   #   • U  H  n[        U5      v •  M     g 7frƒ   )rx  rÒ	  s     rˆ   rè   Ú(FallbackKernel.create.<locals>.<genexpr>«   s   é € Ð!Kº{¸¤,¨s×"3Ð"3º{ùrœ  r   r  ©r¾   rÿ	  z"Not sure where to find device infoc                óJ  >^ ^• [        T [        [        45      (       a/  [        T 5      " UUU 4S j[	        [        T 5      5       5       5      $ [        T [        5      (       a<  T R                  5        VVs0 s H  u  p#UT" UT[        T 5      U4/-   5      _M      snn$ [        T [        R                  5      (       a}  [        TR                  T 5      TT5      n[        R                  (       d  T(       d  [        T 5      (       d3  [        R                   R"                  R%                  UR&                  5        U$ [        T [(        5      (       a  T $ [        T [        R*                  5      (       a  T R,                  R.                  $ T b   S[        T 5       S35       eg s  snnf )Nc              3  óZ   >#   • U  H   nT" TU   T[        T5      U4/-   5      v •  M"     g 7frƒ   )r°   )ræ   rË   Úgenerate_outputrî  r\  s     €€€rˆ   rè   ÚAFallbackKernel.create.<locals>.generate_output.<locals>.<genexpr>Ï   s7   øé € ð $â/˜ñ $ F¨1¡I¨w¼4À»<ÈÐ:KÐ9LÑ/L×MÐMÚ/ùs   ƒ(+zFallbackKernel output type z is not supported)r„   r£   r¤   r°   rÉ   rÈ   r¥   r‘  r  r]
  ÚMultiOutputrð  rB   Ú assume_unaligned_fallback_outputrk   rn   r  rz  r´  r¿   r…   r�
  r²   r)  )	r\  rî  râ  r0  rð  r  rø  Úhas_unaligned_inputÚpackeds	   ``   €€€€rˆ   rø  Ú.FallbackKernel.create.<locals>.generate_outputÍ   s[  ú€ Ü˜&¤4¬ -×0Ñ0Ü˜F”|ö $ä"¤3 v£;Ô/ó$ó ð ô ˜F¤D×)Ñ)ð %+§L¡L¤Nôâ$2™˜ð ™¨¨g¼$¸v»,ÈÐ9LÐ8MÑ.MÓNÒNÙ$2òð ô ˜F¤E§L¡L×1Ñ1Ü!Ø×(Ñ(¨Ó0ØØó�ô ×;×;Þ*Ü,¨V×4Ñ4ä—G‘G×-Ñ-×1Ñ1°#·(±(Ô;Ø�
Ü˜F¤C×(Ñ(Ø�Ü˜F¤E§L¡L×1Ñ1Ø—{‘{×'Ñ'Ð'à‘~ð Ø1´$°v³,°Ð?PÐQó�~ð ùó3s   Á6%F)r\  r   rî  zlist[tuple[Any, int]]r¶   r   )r)
  Ú*_fused_moving_avg_obs_fq_helper_functionalr   r	   rn   r  r  r
   rn
  r{  r¬  r„   r  rZ
  rÐ  rÑ  rl   Úhigher_orderÚprintr  r·  rw	  r£   r¤   rø  r¥   )r  r…	  r½   r¾   Úfake_incorrect_kernelsÚcontextri
  rc
  rd
  rO
  rÿ	  r  rø  rø  rü  rý  s   `            @@@rˆ   r  ÚFallbackKernel.create—   s°  û€ ô #'×"QÑ"QÐ!SÐØÓ/ÜÔ1°$Ñ7¼¿¹×9JÑ9JÓK‰Gä!“mˆGâð ×"Ò" 6Ð;¨DÒ;°FÑ;ñØØØØØ!÷ ô "Ñ!K¹{Ó!KÓKÐà—‘ ¨nÓ=ˆö Ü�vœu×6Ñ6×@Ñ@×NÑN×OÑOØœŸ™×/Ñ/×5Ñ5Ò5ä—\’\ %Ó(ˆFàÑ!ÙÜ &Ñ)ØØØØØØ"3ñ‰Fö Ð?Ð?Ó?�6ÙÜ!¨Ñ0ØØØØØØ"3ñˆF÷ 	ò  	ñD " .°"Ó5ˆÜ�g¤¤e˜}×-Ñ-Ø$ˆFŒNð ˆô ˜¤×&Ñ&Ü" 7›^ˆFŒNð ˆð &˜YˆFŒNàˆ÷o ŽWús   ÁF4Æ4
G)ry  r¾   r  rû	  rÿ	  rO
  r†  rƒ   ©rN  r  r…	  r|   rc
  ró  rŒ  rè  rO
  rè  r¾   rú
  rÿ	  ú,Optional[dict[sympy.Symbol, pytree.KeyPath]]r¶   r·   r¦  rë
  rå  rî
  )rc
  z Optional[Sequence[torch.Tensor]]ri
  rè  r¶   r   r‰  r­  )r\  rT  r¶   rP  )r…	  r|   r½   r   r¾   r   r¶   ri  )r›   rœ   r�   rž   r®  rÀ  rR  r˜  rÛ  r´
  r±  r¬  rÛ  ry  rs  rÙ  r   r&
  rð  rF  r  r    rª  r«  s   @rˆ   ri  ri  Ç  s  ø† ñð ,0ðu4ð KOñu4àðu4ð ðu4ð &ð	u4ð
 &ðu4ð +ðu4ð )ðu4ð Hðu4ð 
÷u4ñ u4÷n
ô
ô
 ôð0 ðØ5ðØGTðà	óó ðô>+ô$ô*#òw(ðr óS3ó ðS3ðj ó
ó ð
ð ó_ó ö_rŠ   ri  c                  ól   ^ • \ rS rSrSrS	S jrS
S jrSSS.               SU 4S jjjrSrU =r	$ )ÚComplexViewiú   z9View a complex number as two dtyped numbers or vice versac                ó   • gr  r™   rŸ  s    rˆ   r'  ÚComplexView.should_allocateþ   r  rŠ   c                ó&   • U R                  S5      /$ rý  r³  rŸ  s    rˆ   ry  Ú(ComplexView.get_inputs_that_alias_output!  s   € à—‘ Ó"Ð#Ð#rŠ   Nrõ  c          
     ó,   >• [         TU ]  UUUUUUUS9  g )Nrõ  )r·  rÀ  ©	rŒ  rN  r…	  rc
  rŒ  rO
  r¾   rÿ	  r¹  s	           €rˆ   rÀ  ÚComplexView.__init__!  s,   ø€ ô 	‰ÑØØØØØØØ/ð 	ò 	
rŠ   r™   r‰  r­  )rN  r  r…	  r|   rc
  ró  rŒ  rè  rO
  rè  r¾   rê
  rÿ	  r  r¶   r·   )
r›   rœ   r�   rž   r®  r'  ry  rÀ  r    rª  r«  s   @rˆ   r  r  ú   sq   ø† áCôô$ð )-ØJNñ
àð
ð ð
ð &ð	
ð
 &ð
ð +ð
ð &ð
ð Hð
ð 
÷
ö 
rŠ   r  c                  ó"   • \ rS rSrSrSS jrSrg)ÚMemoryCheckKerneli!  z¢
Custom kernel for memory checking that generates direct function calls

TODO - the custom op was erroring with str inputs. should be able to custom op directly.
c                óì   • UR                  5         U R                  u  p#n[        U5      n[        U5      nU(       a  UR                  S5        SU SU SU S3nO	SU SU S3nUR                  U5        g)z.Override codegen to write direct function callzV# note: dont currently distinguish between buffers returned and dealloc'd in last stepzcheck_memory_step(allocated=z, freed=z, is_final_step=r  N)rÓ
  ró	  r­  ry  )rŒ  r
  Ú
alive_listÚ	dead_listÚis_final_stepÚ
alive_reprÚ	dead_reprÚcalls           rˆ   r&
  ÚMemoryCheckKernel.codegen"!  sŠ   € ð 	×2Ñ2Ô4Ø/3×/AÑ/AÑ,ˆ
˜}ä˜*Ó%ˆ
Ü˜“Oˆ	ÞØ×ÑØhôð 2°*°¸XÀiÀ[ÐP`ÐanÐ`oÐopÐq‰Dà1°*°¸XÀiÀ[ÐPQÐRˆDØ×Ñ˜$ÕrŠ   r™   Nrë
  )r›   rœ   r�   rž   r®  r&
  r    r™   rŠ   rˆ   r  r  !  s   † ñ÷ rŠ   r  c                  ó*   • \ rS rSr% S\S'   SS jrSrg)rw	  i4!  r”  r  c                ó   • U R                   $ rƒ   r  rŸ  s    rˆ   r  ÚMultiOutputLayout.get_device8!  r  rŠ   r™   Nr‘  )r›   rœ   r�   rž   rŸ   r  r    r™   rŠ   rˆ   rw	  rw	  4!  s   ‡ àÓ÷rŠ   rw	  c                  óŽ   ^ • \ rS rSrSS jr S	         S
U 4S jjjr\" S 5       S	   SS jj5       rSS jrSS jr	Sr
U =r$ )rú  i<!  c                óŽ   • UR                  U 5        U R                  (       d#  U R                  U5        U R                  U5        g g rƒ   )Úcodegen_multi_outputÚ!skip_size_stride_alignment_checksrÉ
  rÎ
  r%
  s     rˆ   r&
  ÚMultiOutput.codegen=!  s:   € Ø×$Ñ$ TÔ*Ø×5×5Ø×%Ñ% gÔ.Ø×*Ñ*¨7Õ3ð 6rŠ   c                óÈ   >• [         TU ]  S X/S5        [        R                  R	                  U 5      U l        [        R                  R                  U 5        X0l        X@l        g r¶  )	r·  rÀ  rn   r  rÛ  r¿   rÜ  rî  r   )rŒ  rN  rª	  rî  r   r¹  s        €rˆ   rÀ  ÚMultiOutput.__init__C!  sK   ø€ ô 	‰Ñ˜˜v w°Ô3Ü—G‘G×+Ñ+¨DÓ1ˆŒ	Ü	�‰×"Ñ" 4Ô(ØŒØ1RÕ.rŠ   c                óz   • U R                   S   n[        U[        5      (       d   U5       eUR                  U5      $ rý  )rj  r„   r€   ra  )rŒ  ri  r  s      rˆ   ra  Ú MultiOutput.get_free_symbol_usesP!  s:   € ð —[‘[ ‘^ˆ
Ü˜*¤f×-Ñ-Ð9¨zÓ9Ð-Ø×.Ñ.¨}Ó=Ð=rŠ   c                óz   • [        U R                  5      S:H  =(       a    [        U R                  S   [        5      $ )NrA   r   )rÈ   rj  r„   rs	  rŸ  s    rˆ   r'  ÚMultiOutput.should_allocateX!  s0   € Ü�4—;‘;Ó 1Ñ$÷ 
Ü�t—{‘{ 1‘~Ô'8Ó9ð	
rŠ   c                óÎ   • U R                    Vs/ s HI  n[        U[        5      (       d  M  [        UR	                  5       5      S:”  d  M9  UR                  5       PMK     sn$ s  snf rý  )rj  r„   ri  rÈ   ry  rs  rõ  s     rˆ   ry  Ú(MultiOutput.get_inputs_that_alias_output]!  s\   € ð —{’{ó
â"�Ü˜#œ~×.ó ô �C×4Ñ4Ó6Ó7¸!Ñ;ó ˆC�L‰LŽNÙ"ñ
ð 	
ùò 
s   �A"¬A"ÁA")rî  r¿   r   rë
  r   )
rN  r  rª	  r€   rî  zlist[tuple[Any, ...]]r   r•   r¶   r·   r«  r‰  r­  )r›   rœ   r�   rž   r&
  rÀ  rY   ra  r'  ry  r    rª  r«  s   @rˆ   rú  rú  <!  s‰   ø† ô4ð 38ðSàðSð ðSð 'ð	Sð
 ,0ðSð 
÷Sð Sñ ˜MÓ*à$)ð>Ø!ð>à	!ô>ó +ð>ô
÷

ò 
rŠ   rú  c                  ó  • \ rS rSr% SrS\S'   S.S jrS/S jrS0S jrS1S jr	S2S	 jr
S3S
 jrS4S5S jjrS6S jrS7S jrS8S jrS.S jrS7S jr S9     S:S jjrS;S jrS<S jr S9     S=S jjrS>S jrS?S jrS@S jrSAS jrSBS jrSCS jrS.S jrS.S jrSDS jrSES jrS3S  jr SES! jr!SBS" jr"\#" S 5       S9   SFS# jj5       r$SGS$ jr%SHS% jr&S4SIS& jjr'\(SJS' j5       r)SKS( jr*SJS) jr+SCS* jr,\(SLS+ j5       r-S3S, jr.\.r/S-r0g)MrÒ  ih!  z;
TensorBox / StorageBox allow in-place mutation of Tensors
r€   rM  c                ó6   • U R                   R                  5       $ rƒ   r¥  rŸ  s    rˆ   r  Ú!MutableBox.has_exceeded_max_readsp!  r§  rŠ   c                ó6   • U R                   R                  5       $ rƒ   r•  rŸ  s    rˆ   r  ÚMutableBox.get_devices!  r“  rŠ   c                ó6   • U R                   R                  5       $ rƒ   rŽ  rŸ  s    rˆ   r  ÚMutableBox.make_loaderv!  ó   € Ø�y‰y×$Ñ$Ó&Ð&rŠ   c                ó6   • U R                   R                  5       $ rƒ   )rM  r  rŸ  s    rˆ   r  ÚMutableBox.make_indexery!  ó   € Ø�y‰y×%Ñ%Ó'Ð'rŠ   c                ó6   • U R                   R                  5       $ rƒ   )rM  r2  rŸ  s    rˆ   r2  ÚMutableBox.get_stride|!  r“  rŠ   c                ó6   • U R                   R                  5       $ rƒ   rš  rŸ  s    rˆ   rs  ÚMutableBox.get_name!  rœ  rŠ   Nc                ó8   • U R                   R                  U5      $ rƒ   )rM  r.  r,  s     rˆ   r.  ÚMutableBox.has_large_inner_fn‚!  s   € Ø�y‰y×+Ñ+¨IÓ6Ð6rŠ   c                ó8   • U R                   R                  U5      $ rƒ   r¡  r1  s     rˆ   r3  ÚMutableBox.mark_reuse…!  r£  rŠ   c                ó6   • U R                   R                  5       $ rƒ   r­  rŸ  s    rˆ   r7  ÚMutableBox.realize_hintˆ!  r4  rŠ   c                ó6   • U R                   R                  5       $ rƒ   )rM  rp  rŸ  s    rˆ   rp  ÚMutableBox.unwrap_view‹!  r1  rŠ   c                ó6   • U R                   R                  5       $ rƒ   )rM  r)  rŸ  s    rˆ   r)  ÚMutableBox.is_input_bufferŽ!  ó   € Ø�y‰y×(Ñ(Ó*Ð*rŠ   c                ó6   • U R                   R                  5       $ rƒ   )rM  r<  rŸ  s    rˆ   r<  ÚMutableBox.freeze_layout‘!  s   € Ø�y‰y×&Ñ&Ó(Ð(rŠ   c                ó8   • U R                   R                  X5      $ rƒ   )rM  rA  r?  s      rˆ   rA  Ú*MutableBox.freeze_layout_with_stride_order”!  s   € ð �y‰y×8Ñ8¸ÓNÐNrŠ   c                ó8   • U R                   R                  U5      $ rƒ   )rM  rF  rE  s     rˆ   rF  Ú(MutableBox.freeze_layout_with_fill_order™!  s   € Ø�y‰y×6Ñ6°uÓ=Ð=rŠ   c                ó8   • U R                   R                  U5      $ rƒ   )rM  rJ  rI  s     rˆ   rJ  Ú(MutableBox.freeze_layout_with_same_orderœ!  s   € Ø�y‰y×6Ñ6°vÓ>Ð>rŠ   c                ó8   • U R                   R                  X5      $ rƒ   )rM  rO  rM  s      rˆ   rO  Ú+MutableBox.freeze_layout_with_exact_stridesŸ!  s   € ð �y‰y×9Ñ9¸-ÓWÐWrŠ   c                ó6   • U R                   R                  5       $ rƒ   )rM  rR  rŸ  s    rˆ   rR  ÚMutableBox.get_read_writes¤!  rC  rŠ   c                ó6   • U R                   R                  5       $ rƒ   rl  rŸ  s    rˆ   rž  ÚMutableBox.get_reads§!  r¶  rŠ   c                ó6   • U R                   R                  5       $ rƒ   ri  rŸ  s    rˆ   rZ  ÚMutableBox.num_readsª!  r¶  rŠ   c                ó6   • U R                   R                  5       $ rƒ   r°  rŸ  s    rˆ   r]  ÚMutableBox.get_storage_numel­!  r²  rŠ   c                ó6   • U R                   R                  5       $ rƒ   rÊ  rŸ  s    rˆ   rd  ÚMutableBox.get_reduction_type°!  rÅ  rŠ   c                ó6   • U R                   R                  5       $ rƒ   rÇ  rŸ  s    rˆ   rg  ÚMutableBox.get_reduction_size³!  rÅ  rŠ   c                ó6   • U R                   R                  5       $ rƒ   r´  rŸ  s    rˆ   rj  ÚMutableBox.is_extern¶!  r¶  rŠ   c                ó6   • U R                   R                  5       $ rƒ   )rM  rm  rŸ  s    rˆ   rm  ÚMutableBox.is_no_op¹!  rœ  rŠ   c                ó8   • U R                   R                  U5      $ rƒ   rÑ  r  s     rˆ   rp  ÚMutableBox.constant_to_device¼!  s   € Ø�y‰y×+Ñ+¨FÓ3Ð3rŠ   c                ó6   • U R                   R                  5       $ rƒ   )rM  rs  rŸ  s    rˆ   rs  ÚMutableBox.get_mutation_names¿!  rÅ  rŠ   c                ó6   • U R                   R                  5       $ rƒ   )rM  rv  rŸ  s    rˆ   rv  ÚMutableBox.get_operation_nameÂ!  rÅ  rŠ   c                ó6   • U R                   R                  5       $ rƒ   )rM  ry  rŸ  s    rˆ   ry  Ú'MutableBox.get_inputs_that_alias_outputÅ!  s   € Ø�y‰y×5Ñ5Ó7Ð7rŠ   c                ó6   • U R                   R                  5       $ rƒ   r©  rŸ  s    rˆ   r  ÚMutableBox.realizeÈ!  r«  rŠ   c                ó8   • U R                   R                  U5      $ rƒ   r~  r`  s     rˆ   ra  ÚMutableBox.get_free_symbol_usesË!  s   € ð �y‰y×-Ñ-¨mÓ<Ð<rŠ   c                ó6   • U R                   R                  5       $ rƒ   r»  rŸ  s    rˆ   r   ÚMutableBox.get_read_namesÑ!  r½  rŠ   c                ó6   • U R                   R                  5       $ rƒ   )rM  r¬  rŸ  s    rˆ   r¬  ÚMutableBox.get_defining_opÔ!  rC  rŠ   c                ó8   • U R                   R                  U5      $ rƒ   )rM  r	  r  s     rˆ   r	  ÚMutableBox.codegen_reference×!  s   € Ø�y‰y×*Ñ*¨6Ó2Ð2rŠ   c                ó6   • U R                   R                  5       $ rƒ   ©rM  rç  rŸ  s    rˆ   rN  ÚMutableBox.layoutÚ!  s   € ð �y‰y×(Ñ(Ó*Ð*rŠ   c                ó6   • U R                   R                  5       $ rƒ   r‘  rŸ  s    rˆ   r  ÚMutableBox.get_layoutß!  r“  rŠ   c                ó6   • U R                   R                  5       $ rƒ   rq  rŸ  s    rˆ   rç  ÚMutableBox.get_output_specâ!  rC  rŠ   c                ó6   • U R                   R                  5       $ rƒ   r‰  rŸ  s    rˆ   r	  ÚMutableBox.get_sizeå!  rœ  rŠ   c                ó.   • U R                   R                  $ rƒ   )rM  r  rŸ  s    rˆ   r  ÚMutableBox.dtypeè!  s   € à�y‰y�‰ÐrŠ   c                ó~  • [        U R                  [        5      (       aQ  [        U 5      R                   S[        U R                  5      R                   S3nSnU R                  R                  nO&[        U 5      R                   S3nU R                  nSnU[        [        U5      5      U/nSR                  U5      $ )NrÌ  z))r  rÃ  )r„   rM  rÒ  r°   r›   rÎ  rÃ   rÏ  )rŒ  Úline0Úendlr†  rÐ  s        rˆ   r   ÚMutableBox.__str__ì!  s¢   € Ü�d—i‘i¤×,Ñ,Ü˜D“z×*Ñ*Ð+¨1¬T°$·)±)«_×-EÑ-EÐ,FÀaÐHˆEØˆDØ—I‘I—N‘N‰Eä˜D“z×*Ñ*Ð+¨1Ð-ˆEØ—I‘IˆEØˆDð Ü”3�u“:ÓØð
ˆð
 �y‰y˜ÓÐrŠ   r™   r‰  r‘  r•  r—  r™  r›  rƒ   rœ  rž  r~  rŸ  r   r¡  r£  r¤  r¥  r¦  r¨  r©  rª  rŽ  rŠ  r¬  r­  r«  r  r‚  r�  rˆ  r‡  r…  )1r›   rœ   r�   rž   r®  rŸ   r  r  r  r  r2  rs  r.  r3  r7  rp  r)  r<  rA  rF  rJ  rO  rR  rž  rZ  r]  rd  rg  rj  rm  rp  rs  rv  ry  r  rY   ra  r   r¬  r	  r´  rN  r  rç  r	  r  r   rE  r    r™   rŠ   rˆ   rÒ  rÒ  h!  sb  ‡ ñð ƒLô2ô&ô'ô(ô&ô$ö7ô+ô(ô'ô+ô)ð ;@ðOØ"ðOØ37ðOà	õOô
>ô?ð HMðXØ/ðXØ@DðXà	õXô
+ô%ô%ô-ô.ô.ô%ô$ô4ô.ô.ô8ô#ñ ˜LÓ)à$)ð=Ø!ð=à	!ô=ó *ð=ô
*ô+ö3ð ó+ó ð+ô&ô+ô$ð óó ðô ð" ƒHrŠ   rÒ  c                  ód   • \ rS rSr\\SS j5       5       r\\SS j5       5       r\S	S j5       rSrg)
r   i "  c                ó   • g rƒ   r™   ©rM  s    rˆ   r  ÚTensorBox.create"  s   € àFIrŠ   c                ó   • g rƒ   r™   r�  s    rˆ   r  r‚  "  s   € à+.rŠ   c                óX   • [        U [        5      (       a  U $ [        [        U 5      5      $ rƒ   )r„   r¯   r   rq  r�  s    rˆ   r  r‚  "  s%   € ä�dÔ1×2Ñ2ØˆKÜœ DÓ)Ó*Ð*rŠ   r™   N)rM  r¯   r¶   r¯   )rM  r€   r¶   r   )rM  r€   )r›   rœ   r�   rž   r   r±  r  r    r™   rŠ   rˆ   r   r    "  s@   † ØØÛIó ó àIØØÛ.ó ó à.àó+ó ó+rŠ   c                  ór   • \ rS rSrSrSS jrSS jrSS jrSS jrSS jr	SS jr
SS	 jrSS
 jrSS jrSrg)rq  i"  z/
StorageBox allow in-place mutation of Tensors
c                ó¸   • [        U R                  [        [        45      (       a5  U R                  R	                  5       [
        R                  R                  ;   $ gr  )r„   rM  r†  rS  rs  rn   r  r(  rŸ  s    rˆ   r)  ÚStorageBox.is_input_buffer"  s=   € Ü�d—i‘i¤+¬Ð!?×@Ñ@Ø—9‘9×%Ñ%Ó'¬1¯7©7×+?Ñ+?Ñ?Ð?ØrŠ   c                ó®   • [        U R                  [        5      =(       a5    U R                  R                  5       [        R
                  R                  ;   $ rƒ   )r„   rM  ri  rs  rn   r  rT
  rŸ  s    rˆ   r¸  ÚStorageBox.is_module_buffer"  s9   € ä�t—y‘y¤>Ó3÷ :Ø—	‘	×"Ñ"Ó$¬¯©×(9Ñ(9Ñ9ð	
rŠ   c           
     óÂ  • [         R                  U R                  5      (       a  U R                  R                  5       $ [	        U R                  [
        [        [        [        45      (       d   [        U R                  5      5       eU R                  R                  5       nU R                  R                  5       nU R                  R                  5       nUc   e[        S [        UU R                  R                  5       U R                  R!                  5       SS9U R                  S9U l        ["        R$                  R'                  U R                  5      U R                  l        ["        R$                  R+                  U R                  5        U R,                  U R                  l        XR                  l        X R                  l        U R                  R(                  $ )NF)r  r  r  rR  rÝ  )r€   rˆ  rM  rs  r„   rO  r®  rò  r<  r°   r¨  r¤  r  r„  r  r  r	  rn   r  rÛ  r¿   rÜ  ry  r}  r{  )rŒ  r}  r{  r  s       rˆ   r  ÚStorageBox.realize"  sR  € Ü×"Ñ" 4§9¡9×-Ñ-Ø—9‘9×%Ñ%Ó'Ð'ä˜$Ÿ)™)¤i´¼DÄ$Ð%G×HÑHð 	
Ì$Ø�I‰IóK
ó 	
ÐHð —i‘i×/Ñ/Ó1ˆØ—I‘I×+Ñ+Ó-ˆ	Ø—‘×%Ñ%Ó'ˆØÑ!Ð!Ð!ä"ØÜ!ØØ—i‘i×)Ñ)Ó+Ø—Y‘Y×'Ñ'Ó)Øñ	ð —‘ñ	
ˆŒ	ô Ÿ™×0Ñ0°·±Ó;ˆ�	‰	ŒÜ	�‰×"Ñ" 4§9¡9Ô-Ø ŸL™Lˆ�	‰	ÔØ +�	‰	ÔØ'�	‰	ÔØ�y‰y�~‰~ÐrŠ   c                óÂ   • [        U R                  [        [        45      (       a:  U R                  R	                  5       R
                  S:”  a  U R                  5         ggg)z<
Called on buffers we expect to be forced to realize later.
rA   N)r„   rM  rO  r®  r$  Únontrivial_read_countr  rŸ  s    rˆ   r7  ÚStorageBox.realize_hint<"  sI   € ô
 �t—y‘y¤9¬iÐ"8×9Ñ9Ø—	‘	×*Ñ*Ó,×BÑBÀQÓFà�L‰L�Nð Gð :rŠ   c                ó<  • SSK Jn  U R                  5        Vs/ s H1  nU" U5      (       a  M  [        R                  R                  U5      PM3     nnU(       d  g[        U5      n[        U5      n[        U5      nXQ:¬  =(       a    XV-  S:¬  =(       a    Xg:H  $ s  snf )Nr   )Úis_nonfreeable_buffersFrà   )	r›	  r�  rž  rn   r  Úget_dep_size_hintr~  r-  r|  )rŒ  r-  r�  r™  Úsize_of_readsÚ
total_sizeÚmax_sizeÚmin_sizes           rˆ   Ú$has_accumulated_enough_reads_by_sizeÚ/StorageBox.has_accumulated_enough_reads_by_sizeF"  s˜   € Ý@ð —~‘~Ô'ó
â'�Ù)¨#×.ó +ŒA�G‰G×%Ñ% cÖ*Ù'ð 	ð 
ö
 ØÜ˜Ó'ˆ
Ü�}Ó%ˆÜ�}Ó%ˆàÑ#÷ %ØÑ%¨Ñ*÷%àÑ$ð	
ùò
s
   ™B®#Bc                ó2  • [        U R                  [        5      =(       aw    U R                  5       [        R
                  :„  =(       dO    U R                  5       =(       d8    [        R                  S L=(       a    U R                  [        R                  5      $ rƒ   )	r„   rM  rO  rZ  rB   Úrealize_acc_reads_thresholdr.  Ú realize_acc_reads_size_thresholdr–  rŸ  s    rˆ   r  Ú!StorageBox.has_exceeded_max_readsY"  sq   € Ü˜$Ÿ)™)¤YÓ/÷ 	
Ø�N‰NÓœv×AÑAÑA÷ Ø×&Ñ&Ó(÷ô ×7Ñ7¸tÐC÷ Ø×=Ñ=Ü×;Ñ;óð		
rŠ   c                ór  ^• US:”  a°  [        U R                  [        [        45      (       a‹  [	        U R                  5      (       a9  U R                  R                  5       mSS/n[        U4S jU 5       5      (       a  gU R                  5       [        R                  :„  =(       d    U R                  5       $ g)zR
A heuristic to decide if we should realize a tensor
that is used multiple times.
rA   ÚexpÚsigmoidc              3  ó@   >#   • U  H  oTR                   ;   v •  M     g 7frƒ   )Úused_ops)ræ   r‡   Úopcounts     €rˆ   rè   Ú5StorageBox.should_realize_on_reuse.<locals>.<genexpr>o"  s   øé € Ð@²i°˜G×,Ñ,Ö,²iùs   ƒTF)r„   rM  rO  r®  r*  r$  r{  rZ  rB   Úrealize_reads_thresholdr.  )rŒ  r2  Ú	heavy_opsr¡  s      @rˆ   Úshould_realize_on_reuseÚ"StorageBox.should_realize_on_reusee"  s�   ø€ ð
 �1‹9œ D§I¡I´	¼9Ð/E×FÑFÜ�d—i‘i× Ñ àŸ)™)×4Ñ4Ó6�Ø" IÐ.�	ÜÔ@±iÓ@×@Ñ@Øà—‘Ó ¤6×#AÑ#AÑA÷ -Ø×*Ñ*Ó,ðð rŠ   c                óR   • U R                  U5      (       a  U R                  5         g g rƒ   )r¥  r  r1  s     rˆ   r3  ÚStorageBox.mark_reusew"  s!   € Ø×'Ñ'¨×.Ñ.Ø�L‰L�Nð /rŠ   c                ó6   • U R                   R                  5       $ rƒ   ri  rŸ  s    rˆ   rZ  ÚStorageBox.num_reads{"  r¶  rŠ   r�  Nr‰  rŽ  r~  )r-  r…   r¶   r•   )r2  r…   r¶   r•   rž  r©  )r›   rœ   r�   rž   r®  r)  r¸  r  r7  r–  r  r¥  r3  rZ  r    r™   rŠ   rˆ   rq  rq  "  s4   † ñôô

ôô:ô
ô&

ôô$÷%rŠ   rq  c                  ó8   • \ rS rSr% S\S'   S\S'   SrS\S'   S	rg)
ÚSubgraphi"  rÃ   r¿   rd  Úgraph_moduleNzOptional[GraphLowering]r  r™   )r›   rœ   r�   rž   rŸ   r  r    r™   rŠ   rˆ   r¬  r¬  "  s   ‡ à
ƒIØ&Ó&Ø%)€EÐ"Ö)rŠ   r¬  c                óÈ   • U  Vs/ s H*  n[        U[        5      (       a  UR                  5       OUPM,     n n[        [	        S U  5       5      5      [        U 5      :  $ s  snf )Nc              3  ó8   #   • U  H  n[        U5      v •  M     g 7frƒ   )r/  )ræ   rs  s     rˆ   rè   Ú'_has_aliased_buffers.<locals>.<genexpr>Œ"  s   é € Ð;²7¨œ"˜VŸ*˜*²7ùrœ  )r„   rS  rp  rÈ   r:   )Úbuffersrs  s     rˆ   Ú_has_aliased_buffersr²  †"  sd   € ñ óâˆFô !+¨6´?× CÑ Cˆ×ÑÔÈÒOÙð ð ô
 ŒzÑ;±7Ó;Ó;Ó<¼sÀ7»|ÑKÐKùòs   …1Ac                  ó–   ^ • \ rS rSr% SrSrS\S'   SrS\S'   SrS\S'           SU 4S	 jjr	\
      SS
 j5       rSS jrSrU =r$ )ÚInvokeSubgraphi�"  z&
Ir node for the invoke_subgraph HOP.
NúOptional[Subgraph]rO  úOptional[Sequence[IRNode]]Úoperandsrø  c                ó¶   >• [         TU ]  S UUS9  Xl        [        R                  R                  U 5      U l        [        R                  R                  U 5        g r
  )r·  rÀ  rO  rn   r  rÛ  r¿   rÜ  )rŒ  rO  r·  rN  r¹  s       €rˆ   rÀ  ÚInvokeSubgraph.__init__™"  sO   ø€ ô 	‰ÑØØØð 	ñ 	
ð
 !ŒÜ—G‘G×+Ñ+¨DÓ1ˆŒ	Ü	�‰×"Ñ" 4Õ(rŠ   c                ó.  ^• SSK Jn  [        R                  R                  nSnUR
                  R                  S5      =n(       at  SnUR                  [        R                  R                  R                  L a8  UR                  S   [        R                  R                  R                  L d   eSnUS   US nO˜SnUR                  [        R                  R                  R                  L a8  UR                  S   [        R                  R                  R                  L d   eSnUR                  US nU V	s/ s H  o™R
                  S	   PM     nn	U V	s/ s H  o�R                  U	5      PM     nn	/ n
[        U5       HM  u  p¼[!        U["        [$        45      (       a  U
R'                  U5        M3  U
R'                  U" XÅU   5      5        MO     U
nUR                  cz  [        R                  R)                  UR*                  UUR,                  S
9Ul        [        R.                  " UR                  5         UR                  R0                  " U6   SSS5        UR                  R2                  nSnU H*  n[!        U["        5      (       a  M  UR5                  5       n  O   Uc   e[7        UU[9        US9S9m      SU4S jjn[        U5       VVs/ s H  u  nnU" UU5      PM     nnnUTl        U$ s  sn	f s  sn	f ! , (       d  f       Nµ= fs  snnf )z|For each operand, get a realized input, force it to have the same
strides as the subgraph inputs, then use an InvokeSubgraphrA   )Úconstrain_to_fake_tensorNÚeager_input_valsrà   rß   r   rá   r0  ©rd  rM  rU  r  )rO  r·  rN  c                óZ  >• [        U [        [        45      (       a  U $ U R                  5       nUc   e[	        [        UU R                  5       U R                  5       U R                  5       U R                  5       R                  U R                  5       R                  S9T[        U4/SS9$ )Nr³  T)r   )r„   r¯   rA  r  rú  rP  r  r	  r2  r  rQ  rR  r£   )r\  Úindr  Úinvoke_subgraphs      €rˆ   Úcreate_outputÚ,InvokeSubgraph.create.<locals>.create_outputñ"  s§   ø€ ô ˜&Ô#8Ô:NÐ"O×PÑPØ�à×*Ñ*Ó,�ØÑ)Ð)Ð)ä"ÜØ%Ø$×.Ñ.Ó0Ø#Ÿ_™_Ó.Ø%×0Ñ0Ó2Ø%×0Ñ0Ó2×9Ñ9Ø"(×"3Ñ"3Ó"5×"?Ñ"?ñð $Ü˜C�[�MØ6:ñð rŠ   )r\  r€   r¿  r…   r¶   z?Union[ShapeAsConstantBuffer, NoneAsConstantBuffer, MultiOutput])r„
  r»  rn   r  r×	  rb  r¸  rÝ  r  rl   r   r\
  r½   rÀ  r¶	  rñ   r„   r¯   rR
  rÅ  rN  r­  r¿   rS  rT  Úgraph_outputsr  r´  rw	  rø  )r  rO  r·  r»  r×	  Úfake_operandsr¼  rQ  Úfx_operandsr‡   Únew_operandsrò   Úoperandrø  r  rÁ  rË   r\  ÚoutsrÀ  s                      @rˆ   r  ÚInvokeSubgraph.create¥"  sÐ  ø€ õ 	7ô —w‘w×+Ñ+ˆàˆØ+×0Ñ0×4Ñ4Ð5GÓHÐHÐÕHàˆFØ×"Ñ"¤e§i¡i×&<Ñ&<×&IÑ&IÒIà#×(Ñ(¨Ñ+¬u¯y©y×/EÑ/E×/UÑ/UÒUÐUÐUØ�Ø,¨QÑ/°°Ð8‰MàˆFØ×"Ñ"¤e§i¡i×&<Ñ&<×&IÑ&IÒIà#×(Ñ(¨Ñ+¬u¯y©y×/EÑ/E×/UÑ/UÒUÐUÐUØ�ð '×+Ñ+¨F¨GÐ4ˆKÙ4?Ó@²K¨qŸV™V Eœ]±KˆMÐ@ñ AIÓ!IÂ¸1×"3Ñ"3°AÖ"6ÁˆÐ!IØ%'ˆä% hÖ/‰LˆCÜ˜'Ô$9¼>Ð#J×KÑKØ×#Ñ# GÖ,à×#Ñ#Ù,¨WÀCÑ6HÓIöñ	 0ð  ˆà�>‰>Ñ!äŸW™W×2Ñ2Ø×(Ñ(Ø,Ø&Ÿm™mð 3ð ˆHŒNô
 ×$Ò$ X§^¡^Õ4Ø—‘×"Ò" MÑ2÷ 5ð —.‘.×.Ñ.ˆð ˆÛˆGÜ˜gÔ'<×=Ó=Ø ×+Ñ+Ó-�Ùñ  ð Ñ!Ð!Ð!Ü(ØØÜ$¨FÑ3ñ
ˆð	Øð	Ø!$ð	àL÷	ô. ;DÀGÔ:LÔMÒ:L©Y¨Q°‘˜f aÖ(Ñ:LˆÑMØ"&ˆÔØˆùòO Aùò "J÷* 5Õ4üóT Ns   Ä8K6ÅK;È7L ËLÌ 
Lc                ó&   • UR                  U 5        g rƒ   )Úcodegen_invoke_subgraphr%
  s     rˆ   r&
  ÚInvokeSubgraph.codegen#  r6  rŠ   )r¿   rO  )rO  r¬  r·  ró  rN  rw	  r¶   r·   )rO  r¬  r·  r€   r¶   zElist[Union[ShapeAsConstantBuffer, NoneAsConstantBuffer, MultiOutput]]rë
  )r›   rœ   r�   rž   r®  rO  rŸ   r·  rø  rÀ  rF  r  r&
  r    rª  r«  s   @rˆ   r´  r´  �"  sŒ   ø‡ ñð $(€HÐ Ó'Ø+/€HÐ(Ó/Ø*.€GÐ'Ó.ð
)Ø ð
)Ø,<ð
)ØFWð
)à	÷
)ð ðdØðdØ,2ðdà	Nódó ðd÷L.ò .rŠ   r´  c                  óä   ^ • \ rS rSr% SrSrS\S'   SrS\S'   SrS\S	'   Sr	S\S
'   Sr
S\S'                 SU 4S jjr\SS j5       r\          SS j5       rSS jrSS jrSrU =r$ )ÚConditionali#  a‚  
IR node representing torch.cond

Attributes:
    predicate: A boolean scalar tensor determining which branch to execute.
    operands: Input tensors passed to both true and false subgraphs.
    true_subgraph: Subgraph executed when predicate is True.
    false_subgraph: Subgraph executed when predicate is False.
    outputs: MultiOutput nodes representing the conditional's outputs.
Nr   Ú	predicater¶  r·  rµ  Útrue_subgraphÚfalse_subgraphúOptional[Sequence[MultiOutput]]rø  c                ó  >• Xl         X l        X0l        X@l        [	        U/UQ5      u  px[
        T	U ]  S UUUS9  Ub  X`l        [        R                  R                  U 5      U l        [        R                  R                  U 5        g ©N)r¿   rN  rj  ró	  )rÏ  r·  rÐ  rÑ  Ú_split_by_sym_typer·  rÀ  rÿ	  rn   r  rÛ  r¿   rÜ  )
rŒ  rÏ  r·  rÐ  rÑ  rN  rÿ	  Úsym_argsrc
  r¹  s
            €rˆ   rÀ  ÚConditional.__init__##  s„   ø€ ð #ŒØ ŒØ*ÔØ,Ôä 2°IÐ3IÀÐ3IÓ JÑˆä‰ÑØØØØ"ð	 	ñ 	
ð Ñ(Ø%6Ô"ä—G‘G×+Ñ+¨DÓ1ˆŒ	Ü	�‰×"Ñ" 4Õ(rŠ   c                ó\   • [        U [        5      (       a  U $ U R                  R                  $ rƒ   )r„   r…   r²   r)  )rç   s    rˆ   Ú_maybe_exprÚConditional._maybe_expr?#  s"   € ä�aœ×ÑØˆHØ�v‰v�{‰{ÐrŠ   c                ó
  • U R                  U5      nU Vs/ s H  oPR                  U5      PM     nn[        R                  R                  R                  S   n[        U[        5      (       d   [        U5      5       e[        S U 5       5      (       d   eU Vs/ s H   n[        [        U5      R                  S   PM"     nn[        R                  R                  R                  S   n      SS jn	X#4 H¸  n
U
R                  b  M  [        R                  R                  U
R                  UU
R                  S9U
l        [        R                  " U
R                  5         U
R                  R                   " U6   U	" U
R                  R"                  U5      U
R                  l        SSS5        Mº     UR                  c   eUR                  c   eUR                  R"                  nUR                  R"                  nSU4SU44 H&  u  pÞ[%        U5      (       d  M  ['        S	U S
U 35      e   [)        U5      [)        U5      :X  d   X¼45       e[+        [-        X¼5      5       H¡  u  nu  nnUR/                  5       UR/                  5       :X  d
   UUU45       eUR1                  5       UR1                  5       :X  d
   UUU45       eUR3                  5       R4                  UR3                  5       R4                  :X  a  M™   UUU45       e   [7        S XA/-    5       5      n[9        [        R                  R:                  R<                  [        R                  R                  R                  R?                  SS5      5      nUc   S5       e[A        UUUU[C        US9US9n[+        [-        U[        R                  R                  R                  S   5      5       VVVVs/ s Hì  u  nu  nn[E        [G        UR/                  5       b  UR/                  5       OUUR1                  5       URI                  5        Vs/ s H  n[@        RK                  U5      PM     snURM                  5        Vs/ s H  n[@        RK                  U5      PM     snUR3                  5       R4                  UR3                  5       RN                  S9U[P        U4/5      PMî     nnnnnUUl)        U$ s  snf s  snf ! , (       d  f       GMÿ  = fs  snf s  snf s  snnnnf )zNCreate a Sequence of IRNodes from a conditional statement (see .lowering.cond)r0  c              3  óB   #   • U  H  n[        U[        5      v •  M     g 7frƒ   )r„   r8   r£	  s     rˆ   rè   Ú%Conditional.create.<locals>.<genexpr>U#  s   é € Ð<²¨1”:˜a¤×&Ð&²ùrö  r0  c           	     óø   • / n[        X5       Hh  u  p4[        U[        5      (       a  UR                  U5        M-  UR                  [        R                  [        U5      UR                  5       SS95        Mj     U$ ©NFrr  )rÒ   r„   r¯   rÅ  r²  rƒ
  r   r  )rÃ  Úfake_tensorsÚretr\  rä  s        rˆ   Ú_require_exact_stridesÚ2Conditional.create.<locals>._require_exact_stridesY#  sm   € ð ˆCÜ # MÖ @‘�Ü˜fÔ&;×<Ñ<Ø—J‘J˜vÖ&à—J‘Jä$×:Ñ:Ü% fÓ-¨t¯{©{«}ÈEð ;ð öñ	 !Að ˆJrŠ   Nr½  Útrue_fnÚfalse_fnzVOutput aliasing is currently not supported in compiled torch.cond. The outputs of the z% subgraph of torch.cond are aliased: c              3  óp   #   • U  H,  n[        U[        5      (       a  M  UR                  5       v •  M.     g 7frƒ   )r„   r¯   r  )ræ   Úos     rˆ   rè   rÝ  “#  s,   é € ð 
â+�Ü˜aÔ!6×7ó ˆA�L‰L�NˆNÚ+ùs   ‚6Ÿ6rÿ	  zcannot determine devicer  )rÏ  r·  rÐ  rÑ  rN  rÿ	  r³  )rÃ  ró  rà  zSequence[torch.Tensor]r¶   r’   )*r¶	  rn   r  r×	  r½   r„   r   r°   rë   r   r8   rb  rN  r­  r¿   rS  rT  rÃ  r²  rü  rÈ   rñ   rÒ   r  r  r  rQ  rC  r5   r  rí   r¸  rÎ  rw	  rú  rP  r  rÙ  r  rR  r£   rø  )r  rÏ  rä  rå  r·  r‡   rÅ  rÄ  Úfake_outputsrâ  rO  Útrue_outputsÚfalse_outputsr¿   rø  rË   Út_oÚf_or  rÿ	  Úconditionalr\  Úmerged_outputr±  s                           rˆ   r  ÚConditional.createE#  s   € ð ×%Ñ% iÓ0ˆ	á2:Ó;²(¨Q×%Ñ% aÖ(±(ˆÐ;Ü !§¡× 4Ñ 4× 9Ñ 9¸"Ñ =ˆä˜+¤x×0Ñ0ÐC´$°{Ó2CÓCÐ0ÜÑ<±Ó<×<Ñ<Ð<Ð<Ù<GÓHºK°qœœd A›×+Ñ+¨EÔ2¹KˆÐHÜ—w‘w×+Ñ+×0Ñ0°Ñ7ˆð	Ø+ð	à0ð	ð ô	ð$ !Ó+ˆHØ�~‰~Ó%ä!"§¡×!6Ñ!6Ø×,Ñ,Ø#0Ø"*§-¡-ð "7ð "�”ô
 ×(Ò(¨¯©Õ8Ø—N‘N×&Ò&¨Ñ6ñ 4JØ Ÿ™×4Ñ4°ló4�H—N‘NÔ0÷ 9Ñ8ñ ,ð" �}‰}Ñ(Ð(Ð(Ø�~‰~Ñ)Ð)Ð)Ø—}‘}×2Ñ2ˆØ Ÿ™×4Ñ4ˆà(¨,Ð7¸*ÀmÐ9TÓU‰MˆDÜ# L×1Ó1Ü$ð*Ø*.¨Ð/TÐU\ÐT]ð_óð ñ Vô �<Ó ¤C¨Ó$6Ó6ÐU¸Ð8UÓUÐ6Ü&¤s¨<Ó'GÖH‰MˆA‰z��SØ—>‘>Ó# s§~¡~Ó'7Ó7ÐF¸!¸SÀ#¸ÓFÐ7Ø—=‘=“? c§m¡m£oÓ5ÐD¸¸3À°}ÓDÐ5Ø—>‘>Ó#×*Ñ*¨c¯n©nÓ.>×.EÑ.EÕEÐTÈÈ3ÐPSÀ}ÓTÐEñ Iô ñ 
à Ò+ó
ó 
ˆô
 6Ü�G‰G×Ñ×&Ñ&Ü�G‰G× Ñ ×%Ñ%×)Ñ)Ð*=¸tÓDó
Ðð Ñ!Ð<Ð#<Ó<Ð!Ü!ØØØ!Ø#Ü$¨FÑ3Ø/ñ
ˆô: /8Ü�L¤!§'¡'×"6Ñ"6×";Ñ";¸EÑ"BÓCô/ö)
ò(/Ñ*�Ñ*�F˜Mô' Üð ×(Ñ(Ó*Ñ6ð "×,Ñ,Ô.àØ ×*Ñ*Ó,Ø@M×@RÑ@RÔ@TÓUÒ@T¸"œ+×1Ñ1°"Ö5Ñ@TÑUà>K×>RÑ>RÔ>TóÚ>T¸œ×/Ñ/°Ö3Ñ>Tñð "×,Ñ,Ó.×5Ñ5Ø$×/Ñ/Ó1×;Ñ;ñð Ü˜��öñ&/ð) 	ó 
ð2 &ˆÔØˆùò_ <ùò
 I÷: 9×8üòv Vùòùõ
s>   –SÂ'S#Å#AS(ÏAT
Ð6S;ÑT
Ñ)T ÒAT
Ó(
S8	Ó;
T
c           	     ó’   • UR                  U 5        UR                  U R                  5       U R                  [	        U S0 5      5        g r–  )Úcodegen_conditionalr—  rs  rø  r¼   r%
  s     rˆ   r&
  ÚConditional.codegenÂ#  s9   € Ø×#Ñ# DÔ)Ø×8Ñ8Ø�M‰M‹O˜TŸ\™\¬7°4Ð9LÈbÓ+Qõ	
rŠ   c                óÖ   • [        U SS 5      =n(       aL  [        [        R                  R                  R
                  U5      nUc   e[        UR                  5       5      $ [        5       $ r–  r›  rœ  s      rˆ   rÛ  Ú$Conditional.get_unbacked_symbol_defsÈ#  rŸ  rŠ   )rÑ  r¿   r·  rÏ  rÐ  rÿ	  )rÏ  r€   r·  ró  rÐ  r¬  rÑ  r¬  rN  rw	  rÿ	  r  r¶   r·   )rç   zUnion[int, torch.SymInt]r¶   zUnion[int, sympy.Expr])
rÏ  r   rä  r¬  rå  r¬  r·  zlist[TensorBox]r¶   zlist[MultiOutput]rë
  rå  )r›   rœ   r�   rž   r®  rÏ  rŸ   r·  rÐ  rÑ  rø  rÀ  r±  rÙ  rF  r  r&
  rÛ  r    rª  r«  s   @rˆ   rÎ  rÎ  #  sú   ø‡ ñ	ð #'€IÐÓ&Ø+/€HÐ(Ó/Ø(,€MÐ%Ó,Ø)-€NÐ&Ó-Ø/3€GÐ,Ó3ð)àð)ð #ð)ð  ð	)ð
 !ð)ð "ð)ð Hð)ð 
÷)ð8 óó ðð
 ðzàðzð ðzð ð	zð
 "ðzð 
ózó ðzôx
÷ ò  rŠ   rÎ  c                ó¨   • / n/ nU  HF  n[        U[        5      (       a  UR                  UR                  5        M5  UR                  U5        MH     X!4$ rƒ   )r„   r¯   rÅ  r)  )r½   Únon_sym_argsrÖ  rÓ	  s       rˆ   rÕ  rÕ  Ó#  sO   € ð €LØ€HÛˆÜ�cÔ0×1Ñ1Ø�O‰O˜CŸH™HÖ%à×Ñ Ö$ñ	 ð Ð!Ð!rŠ   c                  ó   ^ • \ rS rSr% SrSrS\S'   SrS\S'   SrS\S'   Sr	S\S	'   Sr
S
\S'                   SU 4S jjr\SS j5       r\SS j5       r\            SS j5       rSS jrSS jrSrU =r$ )Ú	WhileLoopiá#  zSThe IR node for while_loop and while_loop_stack_output. It supports input mutation.Nr¶  Úcarried_inputsÚadditional_inputsrµ  Úcond_subgraphÚbody_subgraphrÒ  rø  c                ó  >• Xl         X l        X0l        X@l        [	        / UQUQ5      u  p‰[
        T
U ]  S UU	US9  Ub  X`l        Xpl        [        R                  R                  U 5      U l        [        R                  R                  U 5        g rÔ  )rù  rú  rû  rü  rÕ  r·  rÀ  rÿ	  Ústack_outputrn   r  rÛ  r¿   rÜ  )rŒ  rù  rú  rû  rü  rN  rÿ	  rþ  rÖ  rc
  r¹  s             €rˆ   rÀ  ÚWhileLoop.__init__ë#  s”   ø€ ð -ÔØ!2ÔØ*ÔØ*Ôä 2Ø1ˆnÐ1Ð0Ð1ó!
Ñˆô 	‰ÑØØØØ"ð	 	ñ 	
ð Ñ(Ø%6Ô"Ø(Ôä—G‘G×+Ñ+¨DÓ1ˆŒ	Ü	�‰×"Ñ" 4Õ(rŠ   c                ó¢  • [        U 5      (       d  U $ U  Vs/ s H*  n[        U[        5      (       a  UR                  5       OUPM,     nn[	        5       n/ n[        X5       He  u  pV[        U5      U;   a&  UR                  [        R                  U5      5        M:  UR                  [        U5      5        UR                  U5        Mg     U$ s  snf rƒ   )r²  r„   rS  rp  r:   rÒ   r/  rÅ  r²  rB
  r´  )rù  rs  Úunwrapped_buffersÚseen_buffersr¯  Úoriginal_inputÚunwrapped_buffers          rˆ   Ú_clone_aliased_inputsÚWhileLoop._clone_aliased_inputs$  sÁ   € ä# N×3Ñ3Ø!Ð!ñ )ó
â(�ô %/¨v´×$GÑ$GˆF×ÑÔ ÈVÒSÙ(ð 	ð 
ô )3«ˆØ13ˆä03°NÖ0VÑ,ˆNÜÐ"Ó# |Ó3Ø—‘œl×5Ñ5°nÓEÖFà× Ñ ¤Ð$4Ó!5Ô6Ø—‘˜nÖ-ñ 1Wð ˆùò!
s   —1Cc                óþ   • [        U [        5      (       a  U $ [        U [        [        45      (       a  [        U 5      $ [        U [        5      (       a  [        R                  U 5      $ [        S[        U 5       35      e)NzNYI unsupported output type: )r„   r   rq  rS  rú  r  rÉ  r°   )rù   s    rˆ   Ú_maybe_wrap_as_tensor_boxÚ#WhileLoop._maybe_wrap_as_tensor_box'$  se   € ä�cœ9×%Ñ%ØˆJÜ˜œj¬/Ð:×;Ñ;Ü˜S“>Ð!Ü˜œ[×)Ñ)Ü×#Ñ# CÓ(Ð(äÐ!>¼tÀC»y¸kÐJÓKÐKrŠ   c                ó¼  • SSK Jn        SS jn[        R                  R                  R
                  S   n[        R                  R                  R
                  S   n	X‰-   n
U
 Vs/ s H  o»R                  S   PM     nnU Vs/ s H  o»R                  S   PM     nnU	 Vs/ s H  o»R                  S   PM     nnU Vs/ s H  o°R                  U5      PM     nn[        R                  U5      nU" Xý5      nU Vs/ s H  o°R                  U5      PM     nnU" UU5      nUU-   nX4 GH  nUR                  b  M  [        U
[        5      (       d   [        U
5      5       e[        R                  R                  UR                  U
UR                  S9Ul        [        R                   " UR                  5         UR                  R"                  " U6   UUL aZ  [%        UR                  R&                  5      [%        U5      :X  d   eU" UR                  R&                  U5      UR                  l        SSS5        GM     UR                  (       a  UR                  (       d   eUR                  R&                  nUR                  R&                  n[)        U5      (       a  [+        S	U 35      e[%        U5      S
:X  d   U5       eUS   n[        U[,        5      (       dM  UR/                  5       [0        R2                  :X  d   U5       e[%        UR5                  5       5      S:X  d   U5       e[%        U5      S:”  d   S5       eUS   R7                  5       nUc   e[%        U5      [%        U5      :X  d	   UU45       e[9        [;        UU5      5       H·  u  nu  nn      SS jnU" UR5                  5       UR5                  5       5        U" UR=                  5       UR=                  5       5        UR7                  5       UR7                  5       :X  d   UUUU45       eUR/                  5       UR/                  5       :X  a  M¯   UUU45       e   Uc   e[?        [        R                  R@                  RB                  [        R                  R                  R                  RE                  SS5      5      n[        UUUU[G        US9UUS9nUR                  b=  [        UR                  RH                  [0        RJ                  RL                  5      (       d   eU" UR                  RH                  U5      S   n[O        U5      nU Vs/ s H  nUU   PM
     n n[Q        U 5      n!/ n"/ Ul)        / Ul*        U(       Ga  [%        U5      S:X  d   S5       e[9        [        R                  R                  R                  S   5       HÈ  u  nn#[W        [Y        U#RZ                  U#R\                  U#R_                  5        V$s/ s H  n$[`        Rc                  U$5      PM     sn$U#Re                  5        V%s/ s H  n%[`        Rc                  U%5      PM     sn%S9U[f        U4/5      n&URR                  Ri                  U&5        U"Ri                  U&5        MÊ     GO[9        U5       GH  u  nn#UU;   ad  U[%        U5      :  d   S5       e[k        U!5      n'URT                  Ri                  [m        U'Rn                  U'U5      5        U"Ri                  U'5        Mq  [W        [Y        U#R7                  5       U#R/                  5       U#R5                  5       U#R=                  5       U#Rq                  5       Rr                  S9U[f        U4/5      n&URR                  Ri                  U&5        U"Ri                  U&5        GM     [;        UU"5       Hk  u  n(n)U(Ru                  5       [        R                  Rv                  ;   d  M4  [        R                  Rx                  R{                  U)Ru                  5       5        Mm     U"$ s  snf s  snf s  snf s  snf s  snf ! , (       d  f       GM   = fs  snf s  sn$f s  sn%f )z€create the while_loop IR node. stack_output controls whether it stack
each iterations' output, which is necessary for training.
r   )Úcheck_input_alias_and_mutationc           	     óV  • [        U 5      [        U5      :X  d   e/ n[        X5       H}  u  p4[        U[        R                  5      (       aH  [
        R                  U5      nUR                  [        R                  XTR                  5       SS95        Ml  UR                  U5        M     U$ rß  )rÈ   rÒ   r„   r  r]
  rø  r  rÅ  r²  rƒ
  r  )Útensor_boxesrà  rá  r  ÚfkÚnew_tbs         rˆ   râ  Ú0WhileLoop.create.<locals>._require_exact_strides@$  s“   € ô �|Ó$¬¨LÓ(9Ó9Ð9Ð9ØˆCÜ˜lÖ9‘�Ü˜b¤%§,¡,×/Ñ/ô '×@Ñ@ÀÓD�FØ—J‘JÜ$×:Ñ:Ø"§I¡I£K¸uð ;ð öð —J‘J˜r–Nñ) :ð* ˆJrŠ   éþÿÿÿr0  r0  Nr½  zŽOutput aliasing is currently not supported in compiled torch.while_loop. The outputs of the body_fn subgraph of torch.while_loop are aliased: rA   z9torch.while_loop is assumed to have at least one operand.c                ó²   • [        U 5      [        U5      :X  d   e[        X5       H.  u  p#[        R                  R                  R                  X#5        M0     g rƒ   )rÈ   rÒ   rn   r  r  r2  )Ú	lhs_exprsÚ	rhs_exprsÚlhsÚrhss       rˆ   Ú_guard_list_equalsÚ,WhileLoop.create.<locals>._guard_list_equals¦$  sC   € ô ˜9“~¬¨Y«Ó7Ð7Ð7Ü # IÖ 9‘H�CÜ—G‘G×$Ñ$×1Ñ1°#Ö;ò !:rŠ   rÿ	  r  )rù  rú  rû  rü  rN  rÿ	  rþ  rß   z-NYI: while_loop_stack_output input mutations.)r  r  r  r  zonly carries can be mutated.)r  r  r  r  rQ  )r  ró  rà  z,list[Union[int, torch.SymInt, torch.Tensor]]r¶   r’   )r  ú Sequence[Union[int, sympy.Expr]]r  r  r¶   r·   )>Útorch._higher_order_ops.utilsr  rn   r  r×	  r½   rb  r¶	  rø  r  r„   r   r°   rN  r­  r¿   rS  rT  rÈ   rÃ  r²  rü  r¯   r  r  r•   r	  r  rñ   rÒ   r2  r5   r  rí   r¸  rw	  ÚmoduleÚfxÚGraphModuler:   rD  rø  r 
  rú  rP  r  r  r  rÎ  rÙ  r  r£   rÅ  rC  rù  rN  r  rQ  rs  r(  rà  r´  )*r  Úcond_fnÚbody_fnrù  rú  rþ  r  râ  Úfx_carried_inputsÚfx_additional_inputsÚfx_all_inputsr‡   Úfake_all_inputsÚfake_carried_inputsÚfake_additional_inputsÚcarried_inputs_Úadditional_inputs_Ú
all_inputsrO  Úcond_outputsÚbody_outputsr¨  r  rË   r^  Úbor  rÿ	  Ú
while_loopÚmutated_idxsÚmutated_idx_setrò   r÷  Úmutated_inputs_iterÚall_outputsr\  r±  r°  Ú	multi_outÚmutated_inputrl  rù   s*                                             rˆ   r  ÚWhileLoop.create2$  s€  € õ 	Qð	Ø*ð	àFð	ð ô	ô: ŸG™G×0Ñ0×5Ñ5°bÑ9ÐÜ Ÿw™w×3Ñ3×8Ñ8¸Ñ<ÐØ)Ñ@ˆÙ2?Ó@²-¨QŸ6™6 %œ=±-ˆÐ@Ù6GÓHÒ6G°Ÿv™v eœ}Ñ6GÐÐHÙ9MÓ!NÒ9M°A§&¡&¨¤-Ñ9MÐÐ!Ná9GÓHº°A×,Ñ,¨QÖ/¹ˆÐHÜ#×9Ñ9¸/ÓJˆÙ0°ÓVˆÙ<MÓNÒ<M°q×/Ñ/°Ö2Ñ<MÐÐNÙ3ØÐ 6ó
Ðð %Ð'9Ñ9ˆ
à Ô*ˆHØ�~‰~Ó%ä! -´×:Ñ:ÐO¼DÀÓ<OÓOÐ:Ü!"§¡×!6Ñ!6Ø×,Ñ,Ø#0Ø"*§-¡-ð "7ð "�”ô
 ×(Ò(¨¯©Õ8Ø—N‘N×&Ò&¨Ñ8ð   7Ò*Ü" 8§>¡>×#?Ñ#?Ó@ÄCØ/óEó  ð ð  ñ 8NØ$ŸN™N×8Ñ8Ø/ó8˜Ÿ™Ô4÷ 9Ò8ñ +ð4 �}�} §§Ð.Ð.Ø—}‘}×2Ñ2ˆØ—}‘}×2Ñ2ˆä ×-Ñ-Ü ðXØXdÐWeðgóð ô �<Ó  AÓ%Ð3 |Ó3Ð%Ø˜‰OˆÜ˜!Ô2×3Ñ3Ø—;‘;“=¤E§J¡JÓ.Ð1°Ó1Ð.Ü�q—z‘z“|Ó$¨Ó)Ð,¨1Ó,Ð)ä�:‹ Ó"ð 	
ØGó	
Ð"ð ˜A‘×)Ñ)Ó+ˆàÑ!Ð!Ð!ä�?Ó#¤s¨<Ó'8Ó8ð 	
ØØð;
ó 	
Ð8ô %¤S¨¸,Ó%GÖH‰KˆA‰x��Bð<Ø;ð<à;ð<ð ô<ñ ˜rŸ{™{›}¨b¯k©k«mÔ<Ù˜rŸ}™}›°·±³Ô@ð —=‘=“? b§m¡m£oÓ5ÐJ¸¸2¸rÀ6Ð7JÓJÐ5Ø—<‘<“> R§\¡\£^Õ3Ð@°a¸¸R°[Ó@Ð3ñ Ið" Ñ!Ð!Ð!ä5Ü�G‰G×Ñ×&Ñ&Ü�G‰G× Ñ ×%Ñ%×)Ñ)Ð*=¸tÓDó
Ðô
 Ø*Ø0Ø!Ø!ä$¨FÑ3Ø/Ø%ñ	
ˆ
ð �}‰}Ñ(¬ZØ�M‰M× Ñ ¤%§(¡(×"6Ñ"6÷.
ñ .
ð 	
ð 
ñ
 6Ø�M‰M× Ñ  /ó
à
ñˆô % \Ó2ˆÙ5DÓE²_¨c˜* Sœ/±_ˆÐEô # >Ó2ÐØ$&ˆØˆ
ÔØ&(ˆ
Ô#ßÜ�Ó'¨1Ó,ð Ø?óÐ,ô  )¬¯©×)=Ñ)=×)BÑ)BÀ5Ñ)IÖJ‘��Vä'ÜØ%Ÿ}™}Ø$Ÿl™lØDJÇKÁKÄMÓRÂM¸bœk×5Ñ5°bÖ9ÁMÑRØFLÇmÁmÄoÓVÂoÀ¤× 7Ñ 7¸Ö ;ÁoÑVñ	ð Ü˜C�[�Mó	�	ð ×"Ñ"×)Ñ)¨)Ô4Ø×"Ñ" 9Ö-ó  Kô  )¨×6‘��VØ˜/Ó)Ø¤ ^Ó!4Ó4ÐTÐ6TÓTÐ4ä$(Ð)<Ó$=�MØ×/Ñ/×6Ñ6Ü& }×';Ñ';¸]ÈJÓWôð  ×&Ñ& }Ö5ä +Ü#Ø#)×#4Ñ#4Ó#6Ø"(×"2Ñ"2Ó"4Ø!'§¡Ó!2Ø#)×#4Ñ#4Ó#6Ø#)×#4Ñ#4Ó#6×#=Ñ#=ñð #Ü ˜˜ó
!�Ið ×&Ñ&×-Ñ-¨iÔ8Ø×&Ñ& y×1ñ-  7ô0 ˜N¨KÖ8‰HˆC�Ø�|‰|‹~¤§¡×!5Ñ!5Õ5ô —‘×+Ñ+×/Ñ/°·±³Ö?ñ 9ð ÐùòU AùÚHùÚ!NùâHùò O÷ 9×8üòt Fùò" SùÚVs=   Á(`#Â`(Â$`-Ã`2Ã?`7Æ<A9`<Õa×4aØ'aà<
a	c           	     ó¦   • UR                  X R                  5        UR                  U R                  5       U R                  [        U S0 5      5        g r–  )Úcodegen_while_looprþ  r—  rs  rø  r¼   r%
  s     rˆ   r&
  ÚWhileLoop.codegen%  s?   € Ø×"Ñ" 4×):Ñ):Ô;Ø×8Ñ8Ø�M‰M‹O˜TŸ\™\¬7°4Ð9LÈbÓ+Qõ	
rŠ   c                óÖ   • [        U SS 5      =n(       aL  [        [        R                  R                  R
                  U5      nUc   e[        UR                  5       5      $ [        5       $ r–  r›  rœ  s      rˆ   rÛ  Ú"WhileLoop.get_unbacked_symbol_defs%  rŸ  rŠ   )rú  rü  rù  rû  r¿   rþ  rÿ	  )rù  ró  rú  ró  rû  r¬  rü  r¬  rN  rw	  rÿ	  r  rþ  r•   r¶   r·   )rù  ró  r¶   ró  )rù   r€   r¶   r€   )r  r¬  r  r¬  rù  ró  rú  ró  rþ  r•   r¶   rÍ  rë
  rå  )r›   rœ   r�   rž   r®  rù  rŸ   rú  rû  rü  rø  rÀ  r±  r  r  rF  r  r&
  rÛ  r    rª  r«  s   @rˆ   rø  rø  á#  s#  ø‡ á]à15€NÐ.Ó5Ø48ÐÐ1Ó8Ø(,€MÐ%Ó,Ø(,€MÐ%Ó,Ø/3€GÐ,Ó3ð)à(ð)ð ,ð)ð  ð	)ð
  ð)ð "ð)ð Hð)ð ð)ð 
÷)ðD óó ðð2 óLó ðLð ðWàðWð ðWð )ð	Wð
 ,ðWð ðWð 
)óWó ðWôr
÷ ò  rŠ   rø  c                  ór   ^ • \ rS rSr SSS.               S	U 4S jjjjrS
U 4S jjrSS jrSrU =r$ )r®   i%  Nrj  c          
     óö   >• [         T
U ]  UUUUUS US9  SSKJn  U" U5      n	U	c   eX�l        [
        R                  R                  R                  U	S 5      U l	        U [
        R                  R                  U	'   g )Nrõ  r   )Ú_get_effect)
r·  rÀ  Útorch._higher_order_ops.effectsr;  Úeffect_typern   r  Úeffectful_opsr¸  Úprev_effect_buffer)rŒ  rN  r…	  rc
  rŒ  rO
  r¾   rÿ	  r;  r=  r¹  s             €rˆ   rÀ  ÚEffectfulKernel.__init__%  s�   ø€ ô 	‰ÑØØØØØØØ/ð 	ñ 	
õ 	@á! &Ó)ˆØÑ&Ð&Ð&Ø&ÔÜ"#§'¡'×"7Ñ"7×";Ñ";¸KÈÓ"NˆÔØ-1Œ�‰×Ñ˜kÒ*rŠ   c                óÌ   >• [         TU ]  5       nU R                  bG  UR                  R	                  [
        R                  " U R                  R                  5       5      5        U$ rƒ   )r·  rR  r?  rV  r´  rC   rƒ  rs  )rŒ  rí  r¹  s     €rˆ   rR  ÚEffectfulKernel.get_read_writes;%  sU   ø€ Ü‘gÑ-Ó/ˆà×"Ñ"Ñ.Ø×Ñ×!Ñ!Ü×$Ò$ T×%<Ñ%<×%EÑ%EÓ%GÓHôð ÐrŠ   c                ó   • gra  r™   rŸ  s    rˆ   rÛ  Ú EffectfulKernel.has_side_effectsE%  r®  rŠ   )r=  r?  rƒ   r  r¦  r‰  )	r›   rœ   r�   rž   rÀ  rR  rÛ  r    rª  r«  s   @rˆ   r®   r®   %  s|   ø† ð ,0ð2ð KOñ2àð2ð ð2ð &ð	2ð
 &ð2ð +ð2ð )ð2ð Hð2ð 
÷2ñ 2÷:÷ò rŠ   r®   c                  ó@   • \ rS rSr\" S 5       S   SS jj5       rSrg)r{
  iI%  c                ó   • [        5       $ rƒ   r9   r`  s     rˆ   ra  Ú!NonTensorObj.get_free_symbol_usesJ%  r!  rŠ   r™   Nr   r«  )r›   rœ   r�   rž   rY   ra  r    r™   rŠ   rˆ   r{
  r{
  I%  s,   † Ù˜NÓ+à$)ðØ!ðà	!ôó ,órŠ   r{
  c                  ó`   • \ rS rSr% S\S'   S\S'   SS jrSSS jjrSS	 jrSS
 jrSS jr	Sr
g)r¸	  iQ%  rÃ   r¿   ú+Union[FakeScriptObject, torch.ScriptObject]r  c                ó   • U R                   $ rƒ   r—  rŸ  s    rˆ   rs  ÚTorchBindObject.get_nameV%  r  rŠ   Nc                ó   • U R                   $ rƒ   r—  r  s     rˆ   r	  Ú!TorchBindObject.codegen_referenceY%  r  rŠ   c                ó   • U R                   $ rƒ   r  rŸ  s    rˆ   rV
  ÚTorchBindObject.get_value\%  rØ  rŠ   c                ó˜   • [        U R                  [        R                  5      (       a  U R                  $ U R                  R                  $ rƒ   )r„   r  r  ÚScriptObjectÚreal_objrŸ  s    rˆ   Úget_real_objÚTorchBindObject.get_real_obj_%  s3   € Ü�d—j‘j¤%×"4Ñ"4×5Ñ5Ø—:‘:Ðà—:‘:×&Ñ&Ð&rŠ   c                óÈ  • U R                  5       n[        U5      (       a  g[        US5      (       d   e[        UR	                  5       5      n[
        R                  " U5      S   nU Vs/ s HE  n[        U[        R                  5      (       d  M$  UR                  5       UR                  5       -  PMG     nn[        R                  " [        R                  US5      $ s  snf )Nr   Ú__obj_flatten__)rS  r)   r³  r¥   rV  rF
  rQ
  r„   r  r]
  r>  Únumelrû  r  Úoperatorr´  )rŒ  Úreal_script_objÚ	flat_dictÚ
flat_elemsr‡   Ú
flat_sizess         rˆ   Úget_buf_bytesÚTorchBindObject.get_buf_bytese%  s¾   € à×+Ñ+Ó-ˆä˜/×*Ñ*Øä�Ð(9×:Ñ:Ð:Ð:Ü˜×8Ñ8Ó:Ó;ˆ	Ü×(Ò(¨Ó3°AÑ6ˆ
ñ  ó
â�Ü˜!œUŸ\™\×*ó )ˆA�N‰NÓ˜qŸw™w›yÔ(Ùð 	ð 
ô
 ×Ò¤§¡¨j¸!Ó<Ð<ùò
s   Á+#CÂ%Cr™   r›  rƒ   r�  )r¶   rI  )r¶   ztorch.ScriptObjectr©  )r›   rœ   r�   rž   rŸ   rs  r	  rV
  rS  r]  r    r™   rŠ   rˆ   r¸	  r¸	  Q%  s&   ‡ à
ƒIØ6Ó6ôöôô'÷=rŠ   r¸	  c                  óB   • \ rS rSr% S\S'   S\S'   S
S jrSSS jjrS	rg)rR
  iw%  rÃ   r¿   r”  r  c                ó   • U R                   $ rƒ   r—  rŸ  s    rˆ   rs  ÚGeneratorState.get_name|%  r  rŠ   Nc                ó   • U R                   $ rƒ   r—  r  s     rˆ   r	  Ú GeneratorState.codegen_reference%  r  rŠ   r™   r›  rƒ   r�  )r›   rœ   r�   rž   rŸ   rs  r	  r    r™   rŠ   rˆ   rR
  rR
  w%  s   ‡ à
ƒIØÓô÷ñ rŠ   rR
  c                  ó†   • \ rS rSrS	S jrS	S jrS
SS jjr\          SS j5       r\          SS j5       r	Sr
g)Ú_CollectiveKerneliƒ%  c                ó   • gr  r™   rŸ  s    rˆ   r'  Ú!_CollectiveKernel.should_allocate„%  r  rŠ   c                ó   • gra  r™   rŸ  s    rˆ   rÛ  Ú"_CollectiveKernel.has_side_effects‡%  r®  rŠ   Nc                ón  • [        U R                  5      [        R                  R                  L d   S5       eU R                  nUb  Xl        OUR                  R                  U l        UR                  R                   Vs/ s H!  o3R                  (       d  M  UR                  PM#     snU l
        g s  snf )Nz,Setting cpp kernel needs a valid op_overload)r°   rû	  r  r
  r
  r÷	  r
  r¿   r
  r
  rù	  )rŒ  r÷	  r…	  r‡   s       rˆ   r
  Ú%_CollectiveKernel.set_cpp_kernel_nameŒ%  s’   € Ü�D×$Ñ$Ó%¬¯©×)>Ñ)>Ò>ð 	
Ø:ó	
Ð>ð ×!Ñ!ˆØÑ&Ø#2Õ à#)§>¡>×#6Ñ#6ˆDÔ ð #ŸN™N×4Ò4ó.
Ú4�q¿½‹FˆA�FŒFÑ4ñ.
ˆÕ*ùò .
s   ÂB2ÂB2c                ó–  • [         R                  R                     U R                  " X/UQ70 UD6u  nnnnn	S S S 5        W	(       a   U SU	 35       eW H@  n
U
R	                  5         [         R                  R                  U
R                  5       5        MB     US   R                  5       nU " [        US9UUWW5      n[        R                  " U5      nUR                  R                  U Vs/ s H  n[        [        US9Xì5      PM     sn5        UR                  R                  U Vs/ s H  oÿR                  5       PM     sn5        SU;   a]  UR                  R                  [        [        US9US   U5      5        UR                  R                  US   R                  5       5        g g ! , (       d  f       GN~= fs  snf s  snf )Nrõ  r   r  rù   )rn   r  r  rn
  r  rÈ  rs  r  r·  rF
  Útree_leavesr 
  r®  rù  ry  rÅ  )r  r…	  rj  r½   r¾   Ú_example_outputrc
  rd
  rO
  rÿ	  Ú
tensor_argr  rý  Úinpsrð  rl  s                   rˆ   Úcreate_inplaceÚ _CollectiveKernel.create_inplace %  s�  € ô �W‰W×Óð ×"Ò" 6ÐC°DÒC¸FÑCñØØØØØ!÷ ö %ÐE¨¨°Ð2CÐ1DÐ&EÓEÐ$Û%ˆJØ×ÑÔ Ü�G‰G×'Ñ'¨
×(;Ñ(;Ó(=Ö>ñ &ð ˜Q‘×*Ñ*Ó,ˆÙÜ˜fÑ%ØØØØó
ˆô ×!Ò! &Ó)ˆØ×Ñ×&Ñ&ÙOSÓTÊtÈŒ^œJ¨fÑ5°sÖCÉtÑTô	
ð
 	×Ñ×!Ñ!¹TÓ"BºT°c§<¡<¦>¹TÑ"BÔCØ�F‹?Ø×#Ñ#×*Ñ*Üœz°Ñ8¸&À¹-ÈÓPôð ×Ñ×%Ñ% f¨U¡m×&<Ñ&<Ó&>Õ?ð ÷; Öüò0 Uùò #Cs   ›F/Ã.GÄ+GÆ/
F>c           
     óB  • [         R                  R                     U R                  " X/UQ70 UD6u  nnnnn	S S S 5        W	(       a   U SU	 35       eW H*  n
[	        U
[
        5      (       a  M  U
R                  5         M,     [	        W[        5      (       aô  U R                  Xe5      nUc   eU " [        US9UUWW5      n[        U5       VVs/ s H(  u  pÞ[        U R                  U5      U[        U4/5      PM*     snnUl        [        UR                  U5       H_  u  pþ[        R                   (       d  [#        U5      (       a  M,  [         R                  R$                  R'                  UR(                  5        Ma     UR                  $ U " U R                  U5      UUWW5      n[        R                   (       d  [#        U5      (       d3  [         R                  R$                  R'                  UR(                  5        U/Ul        U$ ! , (       d  f       GNØ= fs  snnf )NrÊ  r  )rn   r  r  rn
  r„   r¸	  r  r£   r¬  rw	  rñ   rú  rð  rø  rÒ   rB   rû  rk   rz  r´  r¿   )r  r…	  rj  r½   r¾   ri
  rc
  rd
  rO
  rÿ	  ro  r  rý  rË   rT  rð  s                   rˆ   Úcreate_out_of_placeÚ%_CollectiveKernel.create_out_of_placeâ%  sî  € ô �W‰W×Óð ×"Ò" 6ÐC°DÒC¸FÑCñØØØØØ!÷ ö %ÐF¨¨°Ð3DÐ2EÐ&FÓFÐ$Û%ˆJÜ˜j¬/×:Ó:Ø×"Ñ"Ö$ñ &ô �n¤d×+Ñ+Ø—_‘_ [ÓAˆFØÑ%Ð%Ð%ÙÜ!¨Ñ0ØØØØóˆFô "+¨>Ô!:ôò ";‘I�Aô Ø×(Ñ(¨Ó0ØÜ˜A�Y�Köñ
 ";òˆFŒNô  # 6§>¡>°>ÖB‘�Ü×:×:ÔBSØ÷Có Cô —G‘G×-Ñ-×1Ñ1°#·(±(Ö;ñ	  Cð
 —>‘>Ð!áØ×$Ñ$ ^Ó4ØØØØóˆFô ×6×6Ô>OØ÷?ñ ?ô —‘×)Ñ)×-Ñ-¨f¯k©kÔ:Ø$˜XˆFŒNØˆM÷e Öüó.s   ›H	Ã/HÈ	
H)r÷	  rù	  r‰  rƒ   rì
  )
r…	  r|   rj  zUnion[IRNode, list[IRNode]]r½   r   r¾   r   r¶   r·   )
r…	  r|   rj  z!Union[TensorBox, list[TensorBox]]r½   r   r¾   r   r¶   z+Union[list[MultiOutput], _CollectiveKernel])r›   rœ   r�   rž   r'  rÛ  r
  rF  rq  rt  r    r™   rŠ   rˆ   re  re  ƒ%  s¡   † ôôö

ð( ð)@àð)@ð ,ð)@ð ð	)@ð
 ð)@ð 
ó)@ó ð)@ðB ð9àð9ð 2ð9ð ð	9ð
 ð9ð 
5ó9ó ó9rŠ   re  c                  ób   ^ • \ rS rSr SSS.               SU 4S jjjjrS	S jrSrU =r$ )
Ú_AllReduce_Kerneli&  Nrj  c          
     óN   >• [         TU ]  UUUUUS US9  U R                  S5        g )Nrõ  Ú+aoti_torch_cpu__c10d_functional_all_reduce_©r·  rÀ  r
  r  s	           €rˆ   rÀ  Ú_AllReduce_Kernel.__init__ &  ó=   ø€ ô 	‰ÑØØØØØØØ/ð 	ñ 	
ð 	× Ñ Ð!NÕOrŠ   c                óª   • UR                  S5        UR                  U 5        [        U R                  [        5      (       a  U R                  U5        g g ©Nz+torch/csrc/inductor/aoti_torch/c/shim_cpu.h©Úinclude_extra_headerr  r„   rN  rí  rÉ
  r%
  s     rˆ   r&
  Ú_AllReduce_Kernel.codegen6&  óC   € Ø×$Ñ$Ð%RÔSØ×,Ñ,¨TÔ2ä�d—k‘k¤6×*Ñ*Ø×%Ñ% gÕ.ð +rŠ   r™   rƒ   r  rë
  rf  r«  s   @rˆ   rw  rw  &  s‚   ø† ð ,0ðPð KOñPàðPð ðPð &ð	Pð
 &ðPð +ðPð )ðPð HðPð 
÷Pñ P÷,/ò /rŠ   rw  c                  ób   ^ • \ rS rSr SSS.               SU 4S jjjjrS	S jrSrU =r$ )
Ú_AllReduceKerneli>&  Nrj  c          
     óN   >• [         TU ]  UUUUUS US9  U R                  S5        g )Nrõ  Ú*aoti_torch_cpu__c10d_functional_all_reducerz  r  s	           €rˆ   rÀ  Ú_AllReduceKernel.__init__?&  s=   ø€ ô 	‰ÑØØØØØØØ/ð 	ñ 	
ð 	× Ñ Ð!MÕNrŠ   c                óª   • UR                  S5        UR                  U 5        [        U R                  [        5      (       a  U R                  U5        g g r~  r  r%
  s     rˆ   r&
  Ú_AllReduceKernel.codegenU&  r‚  rŠ   r™   rƒ   r  rë
  rf  r«  s   @rˆ   r„  r„  >&  s‚   ø† ð ,0ðOð KOñOàðOð ðOð &ð	Oð
 &ðOð +ðOð )ðOð HðOð 
÷Oñ O÷,/ò /rŠ   r„  c                  ó�   ^ • \ rS rSr S
SS.               SU 4S jjjjrSS jrSS jr\SS j5       rSU 4S jjr	S	r
U =r$ )Ú_WaitKerneli]&  Nrj  c          
     óN   >• [         TU ]  UUUUUS US9  U R                  S5        g )Nrõ  Ú+aoti_torch_cpu__c10d_functional_wait_tensorrz  r  s	           €rˆ   rÀ  Ú_WaitKernel.__init__^&  r|  rŠ   c                óª   • UR                  S5        UR                  U 5        [        U R                  [        5      (       a  U R                  U5        g g r~  r  r%
  s     rˆ   r&
  Ú_WaitKernel.codegent&  r‚  rŠ   c                ó¢  • U R                   S   n[        U[        5      (       d   e[        U[        5      (       a7  UR                   S   n[        U[        5      (       d   [	        U5      5       eU/$ [        U[
        5      (       aG  UR                   S   n[        U[        5      (       a!  UR                  S   u  pEUR                   U   /$ / $ / $ rý  )rj  r„   r€   re  r°   rú  rî  )rŒ  rl  rË   Úcollrø   rò   s         rˆ   Úget_volatile_readsÚ_WaitKernel.get_volatile_reads{&  s·   € Ø�k‰k˜!‰nˆÜ˜#œv×&Ñ&Ð&Ð&Ü�cÔ,×-Ñ-à—
‘
˜1‘ˆAÜ˜a¤×(Ñ(Ð1¬$¨q«'Ó1Ð(Ø�3ˆJÜ˜œ[×)Ñ)ð —:‘:˜a‘=ˆDä˜$Ô 1×2Ñ2ØŸ™ Q™‘�àŸ™ CÑ(Ð)Ð)àˆIð ˆIrŠ   c                óv  • [         R                  R                     U R                  X5      u  nnnnnS S S 5        W(       a   U SU 35       eU " [	        UR                  5       S9UWWW5      nUR                  R                  [        [	        UR                  5       S9X(5      5        g ! , (       d  f       N}= f)Nrõ  r  )	rn   r  r  rn
  r·  r  r 
  rÅ  rù  )	r  r…	  rl  rn  rc
  rd
  rO
  rÿ	  rý  s	            rˆ   Úcreate_waitÚ_WaitKernel.create_wait”&  s¯   € ä�W‰W×Óð ×"Ñ" 6Ó/ñØØØØØ!÷ ö %ÐE¨¨°Ð2CÐ1DÐ&EÓEÐ$ÙÜ˜cŸn™nÓ.Ñ/ØØØØó
ˆð 	×Ñ×&Ñ&Üœ:¨S¯^©^Ó-=Ñ>ÀÓLõ	
÷! Õús   ›B*Â*
B8c                óÐ   >• [         TU ]  5       nU R                  5       nU H@  nUR                  R	                  [
        R                  " UR                  5       5      5        MB     U$ rƒ   )r·  rR  r“  rV  r´  rC   rƒ  rs  )rŒ  rí  Úvolatile_readsÚvrr¹  s       €rˆ   rR  Ú_WaitKernel.get_read_writesª&  sS   ø€ Ü‘gÑ-Ó/ˆà×0Ñ0Ó2ˆÛ ˆBØ×Ñ×!Ñ!¤,×"6Ò"6°r·{±{³}Ó"EÖFñ !àÐrŠ   r™   rƒ   r  rë
  r#  )r…	  r|   rl  r   r¶   r·   r¦  )r›   rœ   r�   rž   rÀ  r&
  r“  rF  r–  rR  r    rª  r«  s   @rˆ   r‹  r‹  ]&  s    ø† ð ,0ðPð KOñPàðPð ðPð &ð	Pð
 &ðPð +ðPð )ðPð HðPð 
÷Pñ Pô,/ôð2 ó
ó ð
÷*õ rŠ   r‹  c                óV  • [        U [        [        45      (       a  [        U 5      $ [        U [        [
        45      (       a5  [        [        R                     " 5       nU  H  nU[        U5      -  nM     U$ [        U [        R                  5      (       a  [        U 5      $ [        5       $ rƒ   )r„   r7   r    r2   r¤   r£   r:   rª   r"   râ
  r  r]
  ©rç   r  r  s      rˆ   râ
  râ
  ¶&  s„   € Ü�!”h¤Ð%×&Ñ&ä$ QÓ'Ð'Ü	�Aœœt�}×	%Ñ	%Ü”u—|‘|Ò$Ó&ˆÛˆAØÔ,¨QÓ/Ñ/ŠAñ àˆÜ	�A”u—|‘|×	$Ñ	$ä$ QÓ'Ð'ä‹|ÐrŠ   c                óV  • [        U [        [        45      (       a  [        U 5      $ [        U [        [
        45      (       a5  [        [        R                     " 5       nU  H  nU[        U5      -  nM     U$ [        U [        R                  5      (       a  [        U 5      $ [        5       $ rƒ   )r„   r7   r    r1   r¤   r£   r:   rª   r"   rã
  r  r]
  r�  s      rˆ   rã
  rã
  Æ&  s‚   € Ü�!”h¤Ð%×&Ñ&ä˜A‹ÐÜ	�Aœœt�}×	%Ñ	%Ü”u—|‘|Ò$Ó&ˆÛˆAØÔ# AÓ&Ñ&ŠAñ àˆÜ	�A”u—|‘|×	$Ñ	$ä˜A‹Ðä‹|ÐrŠ   c                óD  • [        U [        5      (       Ga
  [        U R                  [        5      (       Gaé  [        U R                  R                  [        5      (       a'  U R                  R                  R                  SU5        g [        U R                  R                  [        5      (       Gan  U R                  R                  R                  SU5        [        U R                  R                  [        5      (       ad  [        U R                  R                  R                  [        5      (       a1  U R                  R                  R                  R                  SU5        g [        U R                  R                  [        5      (       a‘  U R                  R                  R                  (       dk  [        U R                  R                  R                  S   [        5      (       a4  U R                  R                  R                  S   R                  SU5        g g g g g g g )Nr}  r   )r„   r   rM  rq  rç  rŽ  rr  r„  rú  rî  rj  )r¯  r  s     rˆ   Úassign_origin_noder   Ö&  sq  € ô �&œ)×$Ò$¬°F·K±KÄ×)LÒ)LÜ�f—k‘k×&Ñ&¬×.Ñ.Ø�K‰K×Ñ×/Ñ/°¸qÕAÜ˜Ÿ™×(Ñ(¬&×1Ò1Ø�K‰K×Ñ×/Ñ/°¸qÔAÜ˜&Ÿ+™+×*Ñ*¬N×;Ñ;Ä
Ø—‘× Ñ ×%Ñ%¤u÷Añ Að —‘× Ñ ×%Ñ%×8Ñ8¸ÈÕJô ˜6Ÿ;™;×+Ñ+¬[×9Ñ9ØŸ™×(Ñ(×0×0ä˜fŸk™k×.Ñ.×5Ñ5°aÑ8¼&×AÑAØ—K‘K×$Ñ$×+Ñ+¨AÑ.×AÑAÀ-ÐQRÕSð Bð 1ð :ð 2ð *MÐ$rŠ   )r‡   rÂ   r¶   zTypeIs[Union[int, Integer]])r¸   rµ   r¶   r·   )r¿   rÃ   r¶   r¤  )rÓ   r¢  r¶   z&Callable[[Sequence[_T]], Sequence[_T]])rÛ   z&Callable[[Sequence[_U]], Sequence[_V]]rÜ   z&Callable[[Sequence[_T]], Sequence[_U]]r¶   rQ  rƒ   )rì   z(Sequence[Union[int, torch.SymInt, Expr]]rí   zOptional[ShapeEnv]r¶   r¢  )rÓ   úSequence[Union[int, Integer]]r¶   r¢  rƒ  )r‡   r·   rþ   r•   r¶   r·   )r‡   r€   rþ   r•   r¶   rT  )r‡   r   rþ   r•   r¶   zOptional[torch.Tensor])r  zOptional[Sequence[_T]]r¶   z Optional[Sequence[Optional[_T]]])r‡   z2Union[IRNode, OutputSpec, torch.device, None, str]r¶   r�  )r‡   z&Union[IRNode, torch.device, None, str]r¶   r•   )r‡   zUnion[Buffer, TensorBox]r.  r…   r¶   r•   )r?  rš  r@  rš  rA  rš  r¶   r•   )rT  r€   rU  z"Sequence[Union[int, torch.SymInt]]r¶   r€   )rd  rd  r¶   r·   )rj  ró  r¶   r¨  )rò   zUnion[Expr, Sequence[Expr]]r  r†  r¶   rm   )r™  rÃ   r  r†  r˜  r•   r¶   r¥  )r  r¢  r  rí
  rQ  r    r¶   r˜  r�
  )TFNFN)r‡   r€   rf  r•   rp  r•   rq  r™  r@  r•   rN  r™  r¶   ztuple[StorageBox, Layout])r‡   r€   rq  r¡  r¶   r•   r}  )r  rš  rA  rš  r¶   r•   )r  r†  r¶   r…   )r±   r§	  r¶   zTypeIs[Sequence[IRNode]])r±  ró  r¶   r•   )r½   re  r¶   z-tuple[list[ShapeAsConstantBuffer], list[Any]])rç   rÂ   r¶   rD  )r¯  r   r  ztorch.fx.Noder¶   r·   (O  Ú
__future__r   r²  rÛ  r¯  rû  r  ÚloggingrX  Útextwrapr{  Úcollections.abcr   r   r   r   r   r	   r
   Úenumr   r   Útypingr   r   r   r   r   r   r   r   r   r   r   r   Útyping_extensionsr   r   r   r   r   r   Úunittest.mockr   rª   r    r!   r"   Útorch._export.serde.schemaÚ_exportÚserder�  rÃ  r´  rˆ  r£  r€  Útorch._loggingr  Útorch.fxÚtorch.utils._pytreeÚ_pytreerF
  Útorch._dynamo.utilsr#   Útorch._export.serde.serializer$   Ú*torch._higher_order_ops.auto_functionalizer%   Útorch._inductorr&   r›	  r(   Útorch._library.opaque_objectr)   Útorch._prims_commonr*   r+   r,   r-   r.   Ú%torch.fx.experimental.symbolic_shapesr/   r0   r1   r2   r3   r4   r5   r6   r7   Útorch.fx.noder8   Útorch.utils._ordered_setr:   Útorch.utils._python_dispatchr;   Útorch.utils._sympy.functionsr<   r=   r>   r?   Útorch.utils._sympy.symbolr@   rÀ  rB   rC   Úcodegen.commonrD   rE   rF   rG   rH   rI   rJ   rK   rL   rM   Ú	loop_bodyrN   Úops_handlerrO   rP   rQ   rR   Úruntime.benchmarkingrS   Úruntime.hintsrT   rU   rV   rW   rX   rY   rZ   r[   r\   r]   r^   r_   r`   ra   rb   rc   rd   re   rf   rg   rh   ri   rj   rk   Úvirtualizedrl   rm   rn   Ú"torch._library.fake_class_registryro   rp   rq   Úcodegen.cutlass.templaterr   Úcodegen.wrapperrs   r  rt   ru   rÂ   rŸ   r#  Ú__version__r0  r/  ÚImportErrorrv   rw   rx   ry   r…   rz   rL  r{   r
  r
  r4
  r|   Ú	getLoggerr›   rÿ  rÎ  r)
  r¥   rÃ   r�   r‰   r§  r�   r¹   rÄ   rÔ   rØ   rÞ   rk  rm  rï   rö   rû   rÿ   r  r  r(  r*  r:  rE  rZ  rf  rm  rt  r€   r¶  rç  rM  rO  rn  r�  r¬  r®  r+  r³  rµ  rÅ  rÏ  rò  r1  r<  r
  rm  rO  rv  rx  ro  r§   rà  rð  rÿ  r|  rS  r  r‘  r´  r¿  rÊ  r×  rÛ  r  rí  rP  r  r›  r«  r¯  r·  rÅ  rr  r*  r†  r6  ri  rA  r¯   r„  r‡  rõ  r•   r£   ÚPrimitiveInfoTyper	  r2	  r7	  re	  rs	  r{	  r�	  r¥	  r…  rÆ	  rÌ	  r²  rð
  rü
  ré	  rù  r%  r)  r*  rG  rh  r¦  r½  rÎ  rÞ  rä  rî  r   r  r  r5  r¨   r©   rg  ri  r  r  rw	  rú  rÒ  r   rq  r¬  r²  r´  rÎ  rÕ  rø  r®   r{
  r¸	  rR
  re  rw  r„  r‹  râ
  rã
  r   r™   rŠ   rˆ   Ú<module>rÊ     s¨  ðÞ "ã Û Û Û Û Û Û Û Û ß MÕ Mß :Ý Ý ÷÷ ÷ ó ÷ U× TÝ ã ß 'Ñ 'ç 2Ó 2ß ,Ð ,Û Û ß $Ð $Ý (Ý ?Ý MÝ #Ý 2Ý 7÷õ ÷
÷ 
õ 
õ Ý /Ý ?ß QÓ QÝ *ç "÷õ ÷õ õ  ß NÓ NÝ -ß :÷÷ ÷ ÷ ÷ ÷ ÷0 *Ñ )ö ÝCÝBÝ&å9Ý5Ý$Þ%ð "(€O�YÓ'ðÛà×'Ò'€NØ€Jñ ˆtƒ_€ÙˆTƒ]€ÙˆTƒ]€ÙˆTƒ]€à˜C ˜IÑ&€ˆ)Ó &Ø˜C ¨Ð,Ñ-€ˆ)Ó -à §
¢
× 5Ò 5°u·z²z×7UÒ7UÐ UÑV€ˆiÓ Và×Ó˜Ó!€Ø	×	Ò	˜8Ÿ?š?°4Ñ	8€Ø‡y‚y‡~‚~€ð'ðT  ØØØˆˆkÐ	ÑØØØØ��s˜D  kÐ!1Ñ2°KÀÈ8ÐSÑTÑUñðñ	€ˆió 	õ)ð ×Ó˜dÑ#÷ð ó $ðõ$$õDõõðØ4ðà4ðð ,õò !Ð Ú$Ð ð TXñØ	1ðØ>Pðàöõ	ð TXñ
Ø	1ð
Ø>Pð
àö
ð 
ß Eó 
Ø Eð 
ß Oó 
Ø Oð .2ñØðØ&*ðàöð:Ø!ðà%õð
>Ø9ð
>àõ
>õ;õ('õ7ð*Ø ðà ðð ðð 
õ	ð*$GØð$Gà/ð$Gð õ$GõN'õò;÷|,ñ |,ñ~	 �UÑ÷Hð Hó ðHðV ô|
ˆFó |
ó ð|
õ~&ð ô%
�ó %
ó ð%
ðP ô
ˆió 
ó ð
ñF �|Ó$Ù�yÓ!Ù�yÓ!Ù˜ÓÙ�uÓÙ�uÓÙ˜=Ó)ñ<Ð Ð8ó ð JNñ<NØð<NØ +ð<NØBFð<Nàö<Nð~ ôb
�ó b
ó ðb
ðN '+Ù˜1“:ðØ
ðà#ðð ðð &ö	ð& " 8¨D¡>°8¸D±>Ð"BÀHÐ"LÑM€ˆYÓ Mô7S˜9ô 7Sôt#Ð1ô #ôL[
Ð+ô [
ð| ôF
ˆ5ó F
ó ðF
ðT ô	�ó 	ó ð	ð ôVˆ5ó Vó ðVõrõ	ð Ø!Ø<@ØØ=Añ9Øð9àð9ð ð9ð :ð	9ð
 ð9ð ;ð9ð ö9ðxØðØ:ðà	õõð$ ô^
ˆvó ^
ó ð^
ðB ôY�ó Yó ðYðx ô-�(ó -ó ð-ð` ôA9�(ó A9ó ðA9ðH ô!�(ó !ó ð!ðH ôwˆ;ó wó ðwðt ôS�hó Só ðSðl ô&�ó &ó ð&ôR_A�ô _AðD ô�6ó ó ðð" ôKˆ|ó Kó ðKð$ ôS�|ó Só ðSðØðØ'9ðà	õõ(<÷7ñ 7ð  ô`
ˆZó `
ó ð`
ôF	C�&õ Cô[H�Võ [Hô|!G�fõ !GôH�Tõ ô%‘{õ %ðD ô�ó ó ñô.V* õ V*ñr �UÑôEˆV�]ó Eó ñEñP �UÑô&‘f˜ió &ó ñ&ô ‘&õ ô
‘Kõ ô
‘[õ 
ð& ô˜6ó ó ñð( ô˜Fó ó ññ  �UÑôt4‘_ó t4ó ñt4ônH
‘_õ H
ôVD™>õ DðN ˜#˜u¡d¨C±°e¸CÀÀeÉTÐ<QÑ6RÑ1SÐSÑTÑ ÷Cò CôL"™|õ "ô
\BÑ.õ \Bô~5™Nõ 5ô0(™õ (ô6™Nõ ô>Z%™Nõ Z%ðz5Ø4ð5àö5ñ �UÑôR‘?ó Ró ñRôj‘õ ôE‘9õ EñP �UÑôR‘<ó Ró ñRñj �UÑô"‘ló "ó ñ"ôJ
‘/õ 
ô(("™õ ("ôV
‘Võ 
ôB=‘Lõ =ô@%
¡õ %
ôP
™-õ 
ô$1
‘\õ 1
ôhL™lõ Lô^))™|õ ))ôZ/™,õ /ôd¡<õ ô8BÑ5õ Bô$8Ñ-õ 8ô26)‘lõ 6)ôr))‘|õ ))ôX9T‘õ 9Tôx,E¡õ ,Eô^21‘|õ 21ôj-‘Lõ -ô8<;‘<õ <;ñ~ �UÑ÷ñ ó ñö
pÑ&õ pñf �UÑö
‘.ó 
ó ñ
ö@ ™õ  ð2 ö˜
ó ó ñö'
‘,õ '
ðX ×ÒöT�ó Tó ñTõn+‘
õ +öm%‘õ m%ñ` �UÑö*ˆvó *ó ñ*÷Lñ �UÑö}.‘\ó }.ó ñ}.ñ@ �UÑö ‘,ó  ó ñ ðD"Ø
ð"à2÷"ñ �UÑöx ‘ó x ó ñx öv	)‘nõ )öX�6õ ð ö"=‘ló "=ó ñ"=ðJ ö‘\ó ó ñöY™õ Yöx/Ñ)õ /ö>/Ñ(õ /ö>SÑ#õ S÷r÷ ÷ Tð Tøð]r ó Ø€NØƒJðús   Çj ê
j"ê!j"