§
    ŠŠtjO ã                  óÜ  — U d dl mZ d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
Z
d dlmZmZmZmZmZ d dlmZmZ d dlmZ d dlmZ d dlmZ d dlmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z# d d	l$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z* d d
l+m,Z, d dl-Z-d dl-m.Z.m/Z/m0Z0 d dl1m2c m3c m4Z5 d dl6m7c m8Z8 d dl9m7c m:Z; d dl<Z=d dl>Z=d dl?m:c m@ZA d dlBmCZC d dlDmEZE d dlFmGZG d dlHmIZI d dlJmKZK d dlLmMZM d dlNmOZO d dlPmQZQmRZR d dlSmTZTmUZUmVZVmWZWmXZXmYZY d dlZm[Z[m\Z\m]Z]m^Z^m_Z_m`Z`maZambZbmcZcmdZdmeZe d dlfmgZg d dlhmiZi d dljmkZk d dllmmZmmnZnmoZompZpmqZqmrZr d dlsmtZt ddlumvZvmwZw ddlxmyZymzZzm{Z{m|Z|m}Z} ddlwm~Z~mZm€Z€m�Z�m‚Z‚mƒZƒ ddl„m…Z… dd l†m‡Z‡mˆZˆm‰Z‰mŠZŠ dd!l‹mŒZŒ dd"l�mŽZŽm�Z� dd#l:m�Z�m‘Z‘m’Z’m“Z“m”Z”m•Z•m–Z–m—Z—m˜Z˜m™Z™mšZšm›Z›mœZœm�Z�mžZžmŸZŸm Z m¡Z¡m¢Z¢m£Z£m¤Z¤m¥Z¥ dd$l¦m§Z§m¨Z¨m©Z© e r+d d%lZmªZª d d&lfm«Z« d d'l¬m­Z­ dd(l®m¯Z¯ dd)l°m±Z± dd*l²m³Z³ dd+l:m´Z´ neµZ¯d,e¶d-<   	 d dl·Z·e·j¸        Z¹d.Zºn# e»$ r dZ¹d/ZºY nw xY w e(d0¦  «        Z¼ e"d1¦  «        Z½ e"d2¦  «        Z¾ e"d3¦  «        Z¿eÀe.z  ZÁd,e¶d4<   eÀeÂz  e.z  ZÃd,e¶d5<   e=jÄ        jÅ        e=jÄ        jÆ        z  ZÇd,e¶d6<    ejÈ        eÉ¦  «        ZÊ ej        e	jË        d7¬8¦  «        ZËe=j§        jÌ        ZÌ	 e#eÀd9eÍeÎd9f         d:d;ee#eÀeÍeÎd9f         d9d:d;f         dz           f         ZÏd,e¶d<<   �d›dA„ZÐ ejÑ        d.¬B¦  «         G dC„ dD¦  «        ¦   «         ZÒ�dœdH„ZÓ�d�dL„ZÔ�dždP„ZÕ�dždQ„ZÖ�dŸdW„Z×g dX¢ZØg dY¢ZÙ	 �d �d¡d^„ZÚ�d¢d`„ZÛ	 �d �d¡da„ZÜe�d£�d¤dd„¦   «         ZÝe	 �d£�d¥df„¦   «         ZÝ	 �d£�d¦di„ZÝ�d§dm„ZÞ�d¨dp„Zß�d©dr„Zà�d©ds„Zá�dªdw„Zâ�d«d|„Zã�d¬d€„Zä�d­dƒ„Zå�d®d‡„Zædˆ„ Zç G d‰„ d;¦  «        Zè e�d/¬B¦  «         G dŠ„ d‹¦  «        ¦   «         Zée� G dŒ„ d�eè¦  «        ¦   «         Zê�d¯d“„Zëe� G d”„ d•eê¦  «        ¦   «         Zìe� G d–„ d—eì¦  «        ¦   «         Zí eÔd˜¦  «         eÔd™¦  «         eÔdš¦  «         eÔd›¦  «         eÔdœ¦  «         eÔdœ¦  «         eÔd�¦  «        džœZîdŸe¶d <   	 �d°�d±d¤„Zïe� G d¥„ d¦eê¦  «        ¦   «         Zðd e/d ¦  «        f�d²d­„Zñeee.         ee.         ge¨f         Zòd,e¶d®<    G d¯„ d°eð¦  «        Zó G d±„ d²eó¦  «        Zô G d³„ d´eó¦  «        Zõ G dµ„ d¶eó¦  «        Zöe� G d·„ d¸eê¦  «        ¦   «         Z÷e� G d¹„ dºe÷¦  «        ¦   «         Zøe� G d»„ d¼eê¦  «        ¦   «         Zù�d³d½„Zú�d³d¾„Zû�d³d¿„Zü	 	 	 	 	 �d´�dµdÇ„Zý�d¶dÈ„Zþ�d·dÊ„Zÿe� G dË„ dÌeè¦  «        ¦   «         �Z e� G dÍ„ dÎ�e ¦  «        ¦   «         �Ze� G dÏ„ dÐ�e ¦  «        ¦   «         �Ze� G dÑ„ dÒ�e ¦  «        ¦   «         �Ze� G dÓ„ dÔ�e ¦  «        ¦   «         �Ze� G dÕ„ dÖ�e¦  «        ¦   «         �Ze� G d×„ dØ�e ¦  «        ¦   «         �Ze� G dÙ„ dÚ�e ¦  «        ¦   «         �Z G dÛ„ dÜ�e¦  «        �Ze� G dÝ„ dÞeè¦  «        ¦   «         �Z	e� G dß„ dà�e	¦  «        ¦   «         �Z
e� G dá„ dâ�e	¦  «        ¦   «         �Z�d¸dã„�Z�d¹dä„�Z G då„ dæ¦  «        �Ze� G dç„ dè�e¦  «        ¦   «         �Z G dé„ dê�e¦  «        �Z G dë„ dì�e¦  «        �Z G dí„ dî�e¦  «        �Z G dï„ dðe¦  «        �Z G dñ„ dò�e¦  «        �Ze� G dó„ dô�e¦  «        ¦   «         �Z G dõ„ dö�e¦  «        �Z e�d/¬B¦  «         G d÷„ døeèez¦  «        ¦   «         �Z e�d/¬B¦  «         G dù„ dú�eeé¦  «        ¦   «         �Z G dû„ dü�e¦  «        �Z G dý„ dþ�e¦  «        �Z G dÿ„ �d �e¦  «        �Ze� G �d„ �deè¦  «        ¦   «         �Ze� G �d„ �deè¦  «        ¦   «         �Z e�d/¬B¦  «         G �d„ �d�e¦  «        ¦   «         �Z ejÑ        d.¬B¦  «         G �d„ �d¦  «        ¦   «         �Z G �d	„ �d
�e¦  «        �Z  G �d„ �d�e ¦  «        �Z!eÀeÂz  �e"z  eÎz  �e#eÀeÎz  eÂz  �e"z           z  �Z$ G �d„ �d¦  «        �Z% G �d„ �d�e%¦  «        �Z& G �d„ �d�e!¦  «        �Z' G �d„ �d�e ¦  «        �Z( G �d„ �d�e ¦  «        �Z) G �d„ �d�e ¦  «        �Z* G �d„ �d�e ¦  «        �Z+�dº�d„�Z, e�d/¬B¦  «         G �d„ �d �e¦  «        ¦   «         �Z- G �d!„ �d"�e-¦  «        �Z. G �d#„ �d$�e.¦  «        �Z/e�j0        �d»�d'„¦   «         �Z1�d¼�d)„�Z2 e�d/¬B¦  «         G �d*„ �d+�e-¦  «        ¦   «         �Z3 e�d/¬B¦  «         G �d,„ �d-�e3¦  «        ¦   «         �Z4 G �d.„ �d/�e4¦  «        �Z5 G �d0„ �d1�e3¦  «        �Z6 G �d2„ �d3�e¦  «        �Z7 G �d4„ �d5�e3¦  «        �Z8 G �d6„ �d7�e8¦  «        �Z9 G �d8„ �d9�e8¦  «        �Z: G �d:„ �d;�e3¦  «        �Z; G �d<„ �d=�e3¦  «        �Z< G �d>„ �d?�e3¦  «        �Z= G �d@„ �dA�e3¦  «        �Z> G �dB„ �dC�e3¦  «        �Z? G �dD„ �dE�e?¦  «        �Z@ G �dF„ �dG�e6¦  «        �ZA G �dH„ �dI�e3¦  «        �ZB G �dJ„ �dK�e3¦  «        �ZC G �dL„ �dM�e4¦  «        �ZD G �dN„ �dO�e3¦  «        �ZE G �dP„ �dQ�e3¦  «        �ZF G �dR„ �dS�e3¦  «        �ZG G �dT„ �dU�e3¦  «        �ZH e�d/¬B¦  «         G �dV„ �dW¦  «        ¦   «         �ZI G �dX„ �dY�e6¦  «        �ZJ e�d/¬B¦  «         G �dZ„ �d[�eJ¦  «        ¦   «         �ZK G �d\„ �d]�eJ¦  «        �ZLe� G �d^„ �d_�e¦  «        ¦   «         �ZM G �d`„ �da�e3¦  «        �ZN G �db„ �dc�eN¦  «        �ZO G �dd„ �de�eN¦  «        �ZP�d½�dh„�ZQ G �di„ �dj�eJ¦  «        �ZRejÑ         G �dk„ �dleè¦  «        ¦   «         �ZS G �dm„ d9�eS¦  «        �ZT G �dn„ �do�eS¦  «        �ZU e�d/¬B¦  «         G �dp„ �dqeè¦  «        ¦   «         �ZV�d¾�ds„�ZW e�d/¬B¦  «         G �dt„ �du�e3¦  «        ¦   «         �ZX e�d/¬B¦  «         G �dv„ �dw�e3¦  «        ¦   «         �ZY�d¿�d{„�ZZ e�d/¬B¦  «         G �d|„ �d}�e3¦  «        ¦   «         �Z[ G �d~„ �d�eJ¦  «        �Z\ G �d€„ �d�eè¦  «        �Z]e� G �d‚„ �dƒ�e]¦  «        ¦   «         �Z^e� G �d„„ �d…�e]¦  «        ¦   «         �Z_e� G �d†„ �d‡�e]¦  «        ¦   «         �Z`e� G �dˆ„ �d‰�e]¦  «        ¦   «         �Za G �dŠ„ �d‹�eJ¦  «        �Zb G �dŒ„ �d��eb¦  «        �Zc G �dŽ„ �d��eb¦  «        �Zd G �d�„ �d‘�eb¦  «        �Ze�dÀ�d”„�Zf�dÀ�d•„�Zg�dÁ�dš„�ZhdS (Â  é    )ÚannotationsN)ÚCallableÚ	GeneratorÚIterableÚIteratorÚSequence)ÚAbstractContextManagerÚnullcontext)ÚEnum)Úpartial)ÚNumber)ÚAnyÚcastÚClassVarÚLiteralÚoverloadÚSupportsFloatÚSupportsIntÚTYPE_CHECKINGÚ	TypeAliasÚTypeVarÚUnion)Úassert_neverÚNeverÚoverrideÚ	ParamSpecÚSelfÚTypeIs)Úpatch)ÚExprÚIntegerÚSymbol)Úenable_python_dispatcher)Úidentity)ÚGraphModuleSerializer)Úcan_auto_functionalize)Úmetrics©Úget_free_symbols)ÚFakeScriptObject)Úget_opaque_obj_reprÚis_opaque_value)Úcompute_required_storage_lengthÚis_boolean_dtypeÚ(is_contiguous_for_memory_format_or_falseÚis_float_dtypeÚmake_channels_last_strides_forÚ
StrideType)Ú&_remove_effect_token_unbacked_bindingsÚcompute_unbacked_bindingsÚfree_symbolsÚfree_unbacked_symbolsÚGuardOnDataDependentSymNodeÚhas_free_unbacked_symbolsÚIterateExprsÚrebind_unbackedÚresolve_unbacked_bindingsÚShapeEnvÚSymTypes)ÚNode©Ú
OrderedSet)Ú_disable_current_modes)ÚCleanDivÚFloorDivÚMaxÚMinÚ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ÚSymbolUsageCollectorOpsHandlerÚ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)ÚSympyBoolean)ÚArgument)ÚIntLikeType)ÚCUTLASSTemplate)ÚPythonWrapperCodegen)ÚGraphLowering)ÚIndentedBufferr   r{   TFÚ_PÚ_TÚ_UÚ_VÚ_IntLikeÚ_NumLikeÚ_OpOverloadsz  ©ÚprefixÚ	TensorBoxr"   ÚIRNodeÚ_NodeOrNodesÚxÚobjectÚreturnúTypeIs[int | Integer]c                ó:   — t          | t          t          f¦  «        S ©N)Ú
isinstanceÚintr!   ©r‹   s    úP/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/torch/_inductor/ir.pyÚ
_is_staticr•   ß   s   € Ý�a�#�w˜Ñ(Ô(Ð(ó    )Úfrozenc                  óL   — e Zd ZU ded<   ded<   ded<   ded<   d	ed
<   ded<   dS )ÚGraphPartitionSignatureúOrderedSet[sympy.Symbol]Úsymbol_inputsz*dict[str, IRNode | Expr | TorchBindObject]Úinput_nodesúlist[IRNode]Úoutput_nodeszdict[str, bool]Úinput_deallocationÚboolÚskip_cudagraphú	list[str]Úconstant_namesN©Ú__name__Ú
__module__Ú__qualname__Ú__annotations__© r–   r”   r™   r™   ã   sb   € € € € € € ð ,Ð+Ð+Ñ+ð <Ð;Ð;Ñ;ØÐÐÑð (Ð'Ð'Ñ'ØÐÐÑð ÐÐÑÐÐr–   r™   Únode_or_nodesú_NodeOrNodes | NoneÚNonec                ó*   ‡— dˆfd„Š ‰| ¦  «         d S )NÚnodesr«   r�   r¬   c                óÊ  •— | €d S t          | t          t          f¦  «        r| D ]} ‰|¦  «         Œd S t          | t          ¦  «        r$|                      ¦   «         D ]} ‰|¦  «         Œd S t          | t
          t          t          t          t          j
        j        j        t          t          t          t           t"          f
¦  «        sJ dt%          | ¦  «        › d�¦   «         ‚d S )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ÚOpaqueMultiOutputÚtype)r®   ÚnodeÚ_check_tensorboxs     €r”   rÀ   z%validate_ir.<locals>._check_tensorbox÷   s  ø€ ð ˆ=ØˆDÝ˜¥¥e˜}Ñ-Ô-ð 	Øð 'ð '�Ø Ð  Ñ&Ô&Ð&Ð&ð'ð 'å˜�tÑ$Ô$ð 	ØŸš™œð 'ð '�Ø Ð  Ñ&Ô&Ð&Ð&ð'ð 'õ ØåÝ!Ý ÝÝ”KÔ'Ô/ÝÝÝ#Ý)Ý%ðñô ð ð ð l�˜e™œÐkÐkÐkñô ð ð ð r–   )r®   r«   r�   r¬   r©   )rª   rÀ   s    @r”   Úvalidate_irrÁ   ö   s:   ø€ ðð ð ð ð ð ð> Ð�]Ñ#Ô#Ð#Ð#Ð#r–   ÚnameÚstrúCallable[..., OpsValue]c                ól   ‡ — t          ‰ t          ¦  «        sJ t          ‰ ¦  «        ¦   «         ‚dˆ fd„}|S )NÚargsrŒ   Úkwargsr�   rv   c                 ó:   •—  t          t          ‰¦  «        | i |¤ŽS r�   )Úgetattrru   )rÆ   rÇ   rÂ   s     €r”   Úfnzops_wrapper.<locals>.fn  s"   ø€ Ø!�w•s˜DÑ!Ô! 4Ð2¨6Ð2Ð2Ð2r–   )rÆ   rŒ   rÇ   rŒ   r�   rv   )r‘   rÃ   r¾   )rÂ   rÊ   s   ` r”   Úops_wrapperrË     sL   ø€ Ý�d�CÑ Ô Ð,Ð,¥$ t¡*¤*Ñ,Ô,Ð ð3ð 3ð 3ð 3ð 3ð 3ð €Ir–   ÚorderúSequence[int]ú&Callable[[Sequence[_T]], Sequence[_T]]c           
     ó‚   ‡— t          t          | t          t          | ¦  «        ¦  «        ¦  «        ¦  «        Šdˆfd„}|S )NÚindexúSequence[_T]r�   c                óœ   •‡ — t          ‰ ¦  «        t          ‰¦  «        k    sJ ‚ˆ ˆfd„t          t          ‰ ¦  «        ¦  «        D ¦   «         S )Nc                ó,   •— g | ]}‰‰|                  ‘ŒS r©   r©   )Ú.0ÚirÐ   Ú	inv_orders     €€r”   ú
<listcomp>z4inverse_reorder.<locals>.reindex.<locals>.<listcomp>'  s"   ø€ Ð?Ð?Ð?¨��i ”lÔ#Ð?Ð?Ð?r–   ©ÚlenÚrange)rÐ   rÖ   s   `€r”   Úreindexz inverse_reorder.<locals>.reindex%  sL   øø€ Ý�5‰zŒz�S ™^œ^Ò+Ð+Ð+Ð+Ø?Ð?Ð?Ð?Ð?­Uµ3°u±:´:Ñ->Ô->Ð?Ñ?Ô?Ð?r–   ©rÐ   rÑ   r�   rÑ   )r²   ÚziprÚ   rÙ   )rÌ   rÛ   rÖ   s     @r”   Úinverse_reorderrÞ   "  sS   ø€ Ý•S˜¥¥c¨%¡j¤jÑ 1Ô 1Ñ2Ô2Ñ3Ô3€Ið@ð @ð @ð @ð @ð @ð €Nr–   c                ó   ‡ — dˆ fd„}|S )NrÐ   rÑ   r�   c                óœ   •‡ — t          ‰ ¦  «        t          ‰¦  «        k    sJ ‚ˆ ˆfd„t          t          ‰ ¦  «        ¦  «        D ¦   «         S )Nc                ó,   •— g | ]}‰‰|                  ‘ŒS r©   r©   )rÔ   rÕ   rÐ   rÌ   s     €€r”   r×   z1same_reorder.<locals>.reindex.<locals>.<listcomp>/  s!   ø€ Ð;Ð;Ð; A��e˜A”h”Ð;Ð;Ð;r–   rØ   )rÐ   rÌ   s   `€r”   rÛ   zsame_reorder.<locals>.reindex-  sL   øø€ Ý�5‰zŒz�S ™ZœZÒ'Ð'Ð'Ð'Ø;Ð;Ð;Ð;Ð;­­s°5©z¬zÑ):Ô):Ð;Ñ;Ô;Ð;r–   rÜ   r©   )rÌ   rÛ   s   ` r”   Úsame_reorderrâ   ,  s(   ø€ ð<ð <ð <ð <ð <ð <ð €Nr–   Úreindex1ú&Callable[[Sequence[_U]], Sequence[_V]]Úreindex2ú&Callable[[Sequence[_T]], Sequence[_U]]ú&Callable[[Sequence[_T]], Sequence[_V]]c                ó   ‡ ‡— dˆ ˆfd„}|S )NrÐ   rÑ   r�   úSequence[_V]c                ó,   •—  ‰ ‰| ¦  «        ¦  «        S r�   r©   )rÐ   rã   rå   s    €€r”   rÛ   z fuse_reindexing.<locals>.reindex8  s   ø€ Øˆx˜˜ ™œÑ(Ô(Ð(r–   )rÐ   rÑ   r�   ré   r©   )rã   rå   rÛ   s   `` r”   Úfuse_reindexingrë   4  s.   øø€ ð)ð )ð )ð )ð )ð )ð )ð €Nr–   )é   r   é   rI   )é   r   rì   rí   rI   Úseqú#Sequence[int | torch.SymInt | Expr]Ú	shape_envúShapeEnv | Nonec                ó|   — |�t          d„ | D ¦   «         ¦  «        rt          | ¦  «        }nt          || ¦  «        }|S )z1
    Convert strides to fill order (argsort)
    Nc              3  óX   K  — | ]%}t          |t          t          j        f¦  «        V — Œ&d S r�   ©r‘   r’   r·   r!   ©rÔ   Úss     r”   ú	<genexpr>z!get_fill_order.<locals>.<genexpr>H  s3   è è € ÐQÐQÈ¥
¨1­sµE´MÐ.BÑ CÔ CÐQÐQÐQÐQÐQÐQr–   )Úallr_   r`   )rï   rñ   Ú
sorted_idxs      r”   Úget_fill_orderrû   B  sJ   € ð Ð�CÐQÐQÈSÐQÑQÔQÑQÔQÐÝ$+¨C¡L¤Lˆ
ˆ
õ ! ¨CÑ0Ô0ˆ
ØÐr–   úSequence[int | Integer]c                óŠ   ‡— d„ t          | ¦  «        D ¦   «         Šˆfd„t          t          | ¦  «        ¦  «        D ¦   «         }|S )zˆ
    Convert stride order to fill order
    For channel last format,

    stride order = [3, 0, 2, 1] and fill order = [1, 3, 2, 0]
    c                ó   — i | ]\  }}||“Œ	S r©   r©   ©rÔ   ÚidxÚposs      r”   ú
<dictcomp>z+stride_order2fill_order.<locals>.<dictcomp>W  s   € Ð8Ð8Ð8™8˜3 ˆc�3Ð8Ð8Ð8r–   c                ó    •— g | ]
}‰|         ‘ŒS r©   r©   ©rÔ   rÕ   Úlookups     €r”   r×   z+stride_order2fill_order.<locals>.<listcomp>X  s   ø€ Ð7Ð7Ð7 �&˜”)Ð7Ð7Ð7r–   )Ú	enumeraterÚ   rÙ   )rÌ   Ú
fill_orderr  s     @r”   Ústride_order2fill_orderr  P  sM   ø€ ð 9Ð8¥y°Ñ'7Ô'7Ð8Ñ8Ô8€FØ7Ð7Ð7Ð7¥U­3¨u©:¬:Ñ%6Ô%6Ð7Ñ7Ô7€JØÐr–   c                ó¦   — t          | |¦  «        }d„ t          t          | ¦  «        ¦  «        D ¦   «         }t          |¦  «        D ]
\  }}|||<   Œ|S )z)
    Convert strides to stride order
    c                ó   — g | ]}d ‘ŒS ©r   r©   ©rÔ   Ú_s     r”   r×   z$get_stride_order.<locals>.<listcomp>c  s   € Ð
&Ð
&Ð
&�ˆ1Ð
&Ð
&Ð
&r–   )rû   rÚ   rÙ   r  )rï   rñ   rú   ÚoutrÕ   Úelems         r”   Úget_stride_orderr  \  s]   € õ !/¨s°IÑ >Ô >€JØ
&Ð
&•e�C ™HœH‘o”oÐ
&Ñ
&Ô
&€CÝ˜ZÑ(Ô(ð ð ‰ˆˆ4ØˆˆD‰	ˆ	Ø€Jr–   Úreplace_symbols_with_hintsr    c                ó   — d S r�   r©   ©r‹   r  s     r”   Úir_node_to_tensorr  i  s   € ØRUÐRUr–   útorch.Tensorc                ó   — d S r�   r©   r  s     r”   r  r  m  s	   € ð �3r–   úIRNode | Noneútorch.Tensor | Nonec                óŽ  ‡— | €d S |rt           j        j        j        Šnt          Šˆfd„|                      ¦   «         D ¦   «         }t          | ¦  «        r&ˆfd„|                      ¦   «         j        D ¦   «         }nt           
                    |¦  «        }|                      ¦   «         }|                      ¦   «         }t          |¦  «        }t          |¦  «        }t           j        j        j                             ¦   «         5  t!          j        ||||¬¦  «                             ¦   «         }d d d ¦  «         n# 1 swxY w Y   |S )Nc                ó&   •— g | ]} ‰|¦  «        ‘ŒS r©   r©   ©rÔ   r÷   Úshape_fns     €r”   r×   z%ir_node_to_tensor.<locals>.<listcomp>ƒ  s!   ø€ Ð.Ð.Ð.˜AˆHˆH�Q‰KŒKÐ.Ð.Ð.r–   c                ó&   •— g | ]} ‰|¦  «        ‘ŒS r©   r©   r  s     €r”   r×   z%ir_node_to_tensor.<locals>.<listcomp>†  s!   ø€ Ð=Ð=Ð= !�(�(˜1‘+”+Ð=Ð=Ð=r–   )ÚsizeÚstrideÚdtypeÚdevice)rw   ÚgraphÚsizevarsÚoptimization_hintr$   Úget_sizeÚis_storage_and_layoutÚ
get_layoutr  ÚFlexibleLayoutÚcontiguous_stridesÚ	get_dtypeÚ
get_devicere   rñ   Úsuppress_guardsÚtorchÚempty_stridedÚzero_)r‹   r  r  r  r   r!  Útr  s          @r”   r  r  s  sm  ø€ ð 	€yØˆtð "ð Ý”7Ô#Ô5ˆˆåˆØ.Ð.Ð.Ð. §¢¡¤Ð.Ñ.Ô.€Då˜QÑÔð 9Ø=Ð=Ð=Ð= q§|¢|¡~¤~Ô'<Ð=Ñ=Ô=ˆˆå×2Ò2°4Ñ8Ô8ˆØ�KŠK‰MŒM€EØ�\Š\‰^Œ^€FÝ" 4Ñ(Ô(€Då$ VÑ,Ô,€FÝ	
ŒÔ	Ô	#×	3Ò	3Ñ	5Ô	5ð ð ÝÔØ˜f¨E¸&ð
ñ 
ô 
ç
Š%‰'Œ'ð 	
ðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð €Hs   Ä+D:Ä:D>ÅD>ÚvalueúSequence[_T] | NoneúSequence[_T | None] | Nonec                ó:   — t          | t          ¦  «        r| sd gS | S r�   )r‘   r°   ©r1  s    r”   Úmay_convert_to_optionalr6  •  s+   € õ �%�ÑÔð  uð ð ˆvˆØ€Lr–   ú/IRNode | OutputSpec | torch.device | None | strú
str | Nonec                óD  — t          | t          ¦  «        s| €| S t          | t          j        ¦  «        r| j        S t          | t
          t          f¦  «        r!t          |                      ¦   «         ¦  «        S t          d| › dt	          | ¦  «        j
        › d�¦  «         d S )Nzget_device_type(ú: ú))r‘   rÃ   r-  r!  r¾   r‰   Ú
OutputSpecÚget_device_typer+  r   r¥   r“   s    r”   r=  r=  Ÿ  s˜   € õ �!•SÑÔð /˜Q˜YØˆÝ	�A•u”|Ñ	$Ô	$ð /ØŒvˆÝ	�A�¥
Ð+Ñ	,Ô	,ð /Ý˜qŸ|š|™~œ~Ñ.Ô.Ð.åÐ< AÐ<Ð<­¨a©¬Ô)9Ð<Ð<Ð<Ñ=Ô=Ð=Ð=Ð=r–   ú"IRNode | torch.device | None | strc                ó  — t          | ¦  «        }|dv r t          t          |› d�¦  «        dk    rdS dS |�t          |¦  «        x}€dS ddlm} t          |t          ¦  «        sJ t          |¦  «        ¦   «         ‚t          ||¦  «        S )N)ÚcpuÚcudaÚxpuÚ_backendÚtritonTFrI   )ÚTritonScheduling)	r=  rÉ   rJ   rN   Úcodegen.tritonrE  r‘   r¾   Ú
issubclass)r‹   r!  Údevice_schedulingrE  s       r”   Ú	is_tritonrI  ¬  s¯   € Ý˜QÑÔ€Fð Ð'Ð'Ð'Ý•6˜fÐ.Ð.Ð.Ñ/Ô/°8Ò;Ð;Ø�4ØˆuàˆÝ!:¸6Ñ!BÔ!BÐBÐÐKàˆuØ0Ð0Ð0Ð0Ð0Ð0åÐ'­Ñ.Ô.ÐGÐGµÐ5FÑ0GÔ0GÑGÔGÐ.ÝÐ'Ð)9Ñ:Ô:Ð:r–   c                ó(   — t          | ¦  «        dk    S )Nr@  )r=  r“   s    r”   Úis_cpurK  À  s   € Ý˜1ÑÔ Ò&Ð&r–   úBuffer | TensorBoxÚ	alignmentr’   c                óŽ  ‡— t          | t          ¦  «        rV|                      ¦   «         �Bt          |                      ¦   «         ¦  «        s!t          |                      ¦   «         ¦  «        rdS t          j        ˆfd„|                      ¦   «         d d…         D ¦   «         Ž }t          j        t          j	        |                      ¦   «         d         d¦  «        t          j
        |                      ¦   «         d         d¦  «        ¦  «        }t          j        ||¦  «        }t          j        j                             |¦  «        S )NFc              3  ó^   •K  — | ]'}t          j        t          |‰¦  «        d ¦  «        V — Œ(dS ©r   N)r·   ÚEqrF   )rÔ   r÷   rM  s     €r”   rø   z-is_aligned_realized_tensor.<locals>.<genexpr>Î  s9   øè è € Ð	FÐ	F¨Q�%Œ(•3�q˜)Ñ$Ô$ aÑ
(Ô
(Ð	FÐ	FÐ	FÐ	FÐ	FÐ	Fr–   éÿÿÿÿrI   )r‘   r‰   Úmaybe_get_strider6   Ú
get_strider%  r·   ÚAndÚOrrQ  ÚLerw   r"  r#  Úguard_or_false)r‹   rM  Úaligned_stridesÚaligned_last_dimÚ
is_aligneds    `   r”   Úis_aligned_realized_tensorr\  Ä  s  ø€ å�q�&Ñ!Ô!ðà×ÒÑÔÐ'Ý  §¢¡¤Ñ0Ô0ð (å  §¢¡¤Ñ.Ô.ð (ð ˆuå”iØ	FÐ	FÐ	FÐ	F°!·,²,±.´.ÀÀ"ÀÔ2EÐ	FÑ	FÔ	Fð€Oõ ”xÝŒ�—’‘” Ô# QÑ'Ô'­¬°!·*²*±,´,¸rÔ2BÀAÑ)FÔ)Fñô Ðõ ”˜?Ð,<Ñ=Ô=€Jõ Œ7Ô×*Ò*¨:Ñ6Ô6Ð6r–   Ústrides1úSequence[_IntLike]Ústrides2Úshapec                óz  — t          |¦  «        t          | ¦  «        k    r t          | ¦  «        t          |¦  «        k    sJ ‚t          || |¦  «        D ]f\  }}}t          j        j                             |d¦  «        rŒ,t          j        j                             t          j        ||¦  «        ¦  «        s dS ŒgdS )zP
    Returns true if the strides are equal, ignoring dimensions of size 1 .
    rI   FT)	rÙ   rÝ   rw   r"  r#  Ústatically_known_leqrX  r·   rQ  )r]  r_  r`  ÚdimÚs1Ús2s         r”   Úsignificant_strides_equalrf  Ù  s°   € õ ˆu‰:Œ:�˜X™œÒ&Ð&­3¨x©=¬=½CÀ¹M¼MÒ+IÐ+IÐ+IÐIÝ˜5 (¨HÑ5Ô5ð ð ‰ˆˆR�ÝŒ7Ô×0Ò0°°aÑ8Ô8ð 	ØåŒwÔ×.Ò.­u¬x¸¸BÑ/?Ô/?Ñ@Ô@ð 	Ø�5�5ð	àˆ4r–   ÚtensorÚstridesúSequence[int | torch.SymInt]c                ó‚  — t          | ¦  «        s| S t          d„ t          ||                      ¦   «         ¦  «        D ¦   «         ¦  «        r| S t	          ||                      ¦   «         |                      ¦   «         ¦  «        s| S t          | ¦  «        \  }}g |j        ¢}t          |                      ¦   «         ¦  «        D ]5\  }}t          j
        j                             |d¦  «        r||         ||<   Œ6t          |j        |j        |j        ||j        |j        ¦  «        }t'          t)          ||¬¦  «        ¦  «        S )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  óf   K  — | ],\  }}t           j        j                             ||¦  «        V — Œ-d S r�   ©rw   r"  r#  Ústatically_known_equals©rÔ   rd  re  s      r”   rø   z2try_match_insignificant_strides.<locals>.<genexpr>ø  sO   è è € ð ð áˆB�õ 	
ŒÔ×0Ò0°°RÑ8Ô8ðð ð ð ð ð r–   rI   ©ÚdataÚlayout)r&  rù   rÝ   rT  rf  r%  Úas_storage_and_layoutr  r  rw   r"  r#  rb  ÚFixedLayoutr!  r   r  ÚoffsetÚ	is_pinnedrˆ   ÚReinterpretView)rg  rh  ÚstorageÚ
old_layoutÚ
new_striderÕ   r÷   Ú
new_layouts           r”   Útry_match_insignificant_stridesr{  ë  sN  € õ ! Ñ(Ô(ð Øˆå
ð ð å˜' 6×#4Ò#4Ñ#6Ô#6Ñ7Ô7ðñ ô ñ ô ð ð ˆå$ W¨f×.?Ò.?Ñ.AÔ.AÀ6Ç?Â?ÑCTÔCTÑUÔUð Øˆå/°Ñ7Ô7Ñ€GˆZØ%�:Ô$Ð%€JÝ˜&Ÿ/š/Ñ+Ô+Ñ,Ô,ð 'ð '‰ˆˆ1ÝŒ7Ô×0Ò0°°AÑ6Ô6ð 	'Ø# AœJˆJ�q‰MøåØÔØÔØŒØØÔØÔñô €Jõ •_¨'¸*ÐEÑEÔEÑFÔFÐFr–   Úgmútorch.fx.GraphModulec                ó¶   — | j                              d¬¦  «        d         }d„ t          |j        ¦  «        D ¦   «         |j        d<   ddlm}  || ¦  «         d S )NÚoutput©Úopr   c                ó   — g | ]\  }}|‘ŒS r©   r©   )rÔ   r   r  s      r”   r×   z.gm_original_output_strides.<locals>.<listcomp>  s)   € ð 4ð 4ð 4Ù��Qˆð4ð 4ð 4r–   Úuser_visible_output_idxs)Úrecord_original_output_strides)r"  Ú
find_nodesr  rÆ   ÚmetaÚtorch._inductor.compile_fxr„  )r|  Úoutput_noder„  s      r”   Úgm_original_output_stridesr‰    s}   € Ø”(×%Ò%¨Ð%Ñ2Ô2°1Ô5€Kð4ð 4Ý# KÔ$4Ñ5Ô5ð4ñ 4ô 4€KÔÐ/Ñ0ð JÐIÐIÐIÐIÐIà"Ð" 2Ñ&Ô&Ð&Ð&Ð&r–   ÚinputsúSequence[IRNode]ú
list[Expr]c                óÞ   — t          ¦   «         }| D ]N}|t          |                     ¦   «         d¬¦  «        z  }|t          |                     ¦   «         d¬¦  «        z  }ŒOt	          |¦  «        S )NF©Úunbacked_only)r@   r)   r%  rT  r°   )rŠ  Úsym_varsÚinps      r”   Úget_symbolic_inputsr’    sl   € Ý!+¡¤€HØð Lð LˆØÕ$ S§\¢\¡^¤^À5ÐIÑIÔIÑIˆØÕ$ S§^¢^Ñ%5Ô%5ÀUÐKÑKÔKÑKˆˆå�‰>Œ>Ðr–   c                ó  — t          | t          ¦  «        r| j        } t          | t          ¦  «        r|                      ¦   «         } t          | t
          ¦  «        r| j        } t          | t          ¦  «        r|                      ¦   «         nd S r�   )r‘   rˆ   rp  ÚBaseViewÚunwrap_viewÚ
StorageBoxÚBufferÚget_namer“   s    r”   Útry_get_namer™  %  st   € Ý�!•YÑÔð ØŒFˆÝ�!•XÑÔð Ø�MŠM‰OŒOˆÝ�!•ZÑ Ô ð ØŒFˆÝ% a­Ñ0Ô0Ð:ˆ1�:Š:‰<Œ<ˆ<°dÐ:r–   c                  ó¬  — e Zd ZU dZ e¦   «         Zded<   dZded<    ej	        d¬¦  «        Z
d	ed
<    ej	        d¬¦  «        Zded<    ej	        d¬¦  «        Zded<    ej	        d¬¦  «        Zded<    ej	        d¬¦  «        Zded<   eej        d…d„¦   «         ¦   «         Zeej        d†d„¦   «         ¦   «         Zed‡d„¦   «         Zdˆd„Zd‰d!„ZdŠd"„Zd‹d$„ZdŒd%„Zd�d&„ZdŽd(„Zd�d*„Zd‹d+„Zd�d‘d/„Z	 d’d“d3„Zd”d5„Z d•d7„Z!d–d9„Z"d—d;„Z#d˜d=„Z$d™d?„Z%dšd@„Z&d›dB„Z'dœdD„Z(e)d�dF„¦   «         Z*dždH„Z+dšdI„Z,dŸdK„Z-d d¡dN„Z.d¢dP„Z/d£dR„Z0dšdS„Z1d¤dU„Z2d¥dW„Z3d›dX„Z4dœdY„Z5d¦dZ„Z6dŸd[„Z7dšd\„Z8d d§d^„Z9d,d_œd¨dc„Z:dŠdd„Z;dˆde„Z<dŠdf„Z=	 d©dªdj„Z>d«dk„Z?d¬dm„Z@	 d©d­do„ZAd®dq„ZBd¯ds„ZCd°dt„ZDd±dv„ZE	 d©d²dy„ZFdŸdz„ZGd³d|„ZHdšd}„ZIdšd~„ZJd´d€„ZKdµd�„ZLd¦d‚„ZMdµdƒ„ZNeOre)d”d„„¦   «         ZPdS dS )¶r‰   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_originsNzClassVar[int | None]Ú_current_stream_idxF)ÚinitúOrderedSet[Any]Úoriginsúlist[str] | NoneÚ	tracebackútorch.fx.Node | NoneÚorigin_nodeúdict[str, Any]r   ú
int | NoneÚ
stream_idxúOrderedSet[Node]r�   úGenerator[None, None, None]c              #  ó„   K  — t           j        }|| z  t           _        	 d V — |t           _        d S # |t           _        w xY wr�   )r‰   r›  )rŸ  Úolds     r”   Úcurrent_originszIRNode.current_originsD  sL   è è € õ Ô%ˆØ"%¨¡-�Ôð	*ØˆEˆEˆEà&)�FÔ#Ð#Ð#ø c�FÔ#Ð)Ð)Ð)Ð)s   Ÿ1 ±?c              #  ó~   K  — t           j        }| t           _        	 d V — |t           _        d S # |t           _        w xY wr�   )r‰   rœ  )r¦  rª  s     r”   Úcurrent_stream_idxzIRNode.current_stream_idxN  sH   è è € õ
 Ô(ˆØ%/�Ô"ð	-ØˆEˆEˆEà),�FÔ&Ð&Ð&ø¨�FÔ&Ð,Ð,Ð,Ð,s   œ. ®<r¿   r    c                ó^   — t          | t          t          t          t          t
          f¦  «        S r�   )r‘   ÚComputedBufferÚInputsKernelÚInputBufferrv  ÚTemplateBuffer©r¿   s    r”   Úis_realized_nodezIRNode.is_realized_nodeZ  s+   € åØåÝÝÝÝðñ	
ô 	
ð 		
r–   c                ó6   — t                                | ¦  «        S r�   ©rˆ   Úcreate©Úselfs    r”   Úwrap_for_loweringzIRNode.wrap_for_loweringg  s   € Ý×Ò Ñ%Ô%Ð%r–   ÚattrrÃ   r1  r   r¬   c                ó>   — t                                | ||¦  «         d S r�   )rŒ   Ú__setattr__)r¹  r»  r1  s      r”   Ú_post_init_setattrzIRNode._post_init_setattrj  s"   € õ 	×Ò˜4  uÑ-Ô-Ð-Ð-Ð-r–   c                óR  — t          | j        ¦  «        }|                      d|¦  «         |                      dt          j        rt          j        ¦   «         nd ¦  «         |                      dd ¦  «         |                      di ¦  «         |                      d| j        ¦  «         d S )NrŸ  r¡  r£  r   r¦  )r@   r›  r¾  rJ   Údebug_ir_tracebackr¡  Úformat_stackrœ  )r¹  rŸ  s     r”   Ú__post_init__zIRNode.__post_init__p  s©   € Ý˜TÔ2Ñ3Ô3ˆØ×Ò 	¨7Ñ3Ô3Ð3Ø×ÒØµVÔ5NÐX�Ô/Ñ1Ô1Ð1ÐTXñ	
ô 	
ð 	
ð 	×Ò ¨tÑ4Ô4Ð4à×Ò ¨rÑ2Ô2Ð2Ø×Ò ¨dÔ.FÑGÔGÐGÐGÐGr–   úOrderedSet[str]c                óX   — t          d„ |                      ¦   «         D ¦   «         ¦  «        S )Nc              3  ó$   K  — | ]}|j         V — Œd S r�   ©rÂ   ©rÔ   Údeps     r”   rø   z(IRNode.get_read_names.<locals>.<genexpr>|  ó$   è è € Ð?Ð? s˜#œ(Ð?Ð?Ð?Ð?Ð?Ð?r–   ©r@   Ú	get_readsr¸  s    r”   Úget_read_nameszIRNode.get_read_names{  ó)   € ÝÐ?Ð?¨d¯nªnÑ.>Ô.>Ð?Ñ?Ô?Ñ?Ô?Ð?r–   c                ó   — | j         S r�   )r¡  r¸  s    r”   Úget_tracebackzIRNode.get_traceback~  s
   € ØŒ~Ðr–   c                ó   — | j         S r�   ©r£  r¸  s    r”   Úget_origin_nodezIRNode.get_origin_node�  ó   € ØÔÐr–   úOperation | Nonec                ó   — d S r�   r©   r¸  s    r”   Úget_defining_opzIRNode.get_defining_op„  ó   € Øˆtr–   úlist[Subgraph]c                ó   — g S )z'Return subgraphs contained in this noder©   r¸  s    r”   Úget_subgraphszIRNode.get_subgraphs‡  ó   € àˆ	r–   c                ó\  — t          ¦   «         }| j        }t          | t          ¦  «        r+|                      ¦   «         }| j        rt          |g¦  «        }|D ]Ó}t          |d¦  «        r"|j        r|                     |j        ¦  «         Œ4t          j
        j        j                             di ¦  «                             |j        g ¦  «        }t          |t          ¦  «        sŒ�|D ]C}t          j
        j        j                             |d ¦  «        }|r|                     |¦  «         ŒDŒÔ|S )NÚstack_traceÚ	postToPre)r@   rŸ  r‘   ÚExternKernelrÒ  r£  ÚhasattrrÝ  Úaddr-  Ú	_inductorÚdebugÚ _inductor_post_to_pre_grad_nodesÚgetrÂ   r°   Ú#_inductor_pre_grad_node_stack_trace)r¹  Ústack_tracesrŸ  r£  r¿   Úpre_grad_nodesÚ	node_namerÝ  s           r”   Úget_stack_traceszIRNode.get_stack_traces‹  sH  € õ )3©¬ˆØ”,ˆÝ�d�LÑ)Ô)ð 	4Ø×.Ò.Ñ0Ô0ˆKØÔð 4Ý$ k ]Ñ3Ô3�Øð 	6ð 	6ˆDÝ�t˜]Ñ+Ô+ð 6°Ô0@ð 6à× Ò  Ô!1Ñ2Ô2Ð2Ð2õ ”OÔ)ÔJ×NÒNØ#Øñô ÷ ’c˜$œ) RÑ(Ô(ð õ " .µ$Ñ7Ô7ð ØØ!/ð 6ð 6�IåœÔ-ÔQ×UÒUØ% tñô ð  ð
 #ð 6Ø$×(Ò(¨Ñ5Ô5Ð5øð6ð Ðr–   TÚshortenúSequence[str]c                ó^  — dt          | dd¦  «        › �}|r t          |¦  «        dk    r|d d…         › d�}|                      ¦   «         s|gS g }|                      ¦   «         D ]D}|                     d¦  «         ||                     d¦  «        z  }|                     d	¦  «         ŒE|g|z   S )
Nzorigins=rŸ  Ú é@   é=   z...zstack_traces = {ú
Ú})rÉ   rÙ   rê  ÚappendÚsplit)r¹  rë  rŸ  Ústack_trace_strrÝ  s        r”   Úcommon_reprzIRNode.common_repr¬  sÖ   € Ø;�W T¨9°bÑ9Ô9Ð;Ð;ˆØð 	+•s˜7‘|”| bÒ(Ð(à   " œÐ*Ð*Ð*ˆGØ×$Ò$Ñ&Ô&ð 	Ø�9ÐàˆØ×0Ò0Ñ2Ô2ð 	(ð 	(ˆKØ×"Ò"Ð#5Ñ6Ô6Ð6Ø˜{×0Ò0°Ñ6Ô6Ñ6ˆOØ×"Ò" 3Ñ'Ô'Ð'Ð'Øˆy˜?Ñ*Ð*r–   ÚlinesúSequence[object]Ú	multilinec                óZ  — t          |¦  «        t          |                      |¦  «        ¦  «        z   }t          t          t          |¦  «        ¦  «        }|r<t	          d                     |¦  «        ¦  «        }t          | ¦  «        j        › d|› d�S t          | ¦  «        j        › d|› d�S )Nz,
z(
z
)ú(r;  )r°   rö  ÚmaprÃ   ÚindentÚjoinr¾   r¥   )r¹  r÷  rë  rù  Ú	new_liness        r”   Ú
str_helperzIRNode.str_helper»  s    € õ �U‘”�d 4×#3Ò#3°GÑ#<Ô#<Ñ=Ô=Ñ=ˆÝ•S�˜e‘_”_Ñ%Ô%ˆØð 	5å˜uŸzšz¨%Ñ0Ô0Ñ1Ô1ˆIÝ˜4‘j”jÔ)Ð<Ð<¨iÐ<Ð<Ð<Ð<å˜4‘j”jÔ)Ð4Ð4¨EÐ4Ð4Ð4Ð4r–   útorch.dtypec                ó   — | j         S r�   ©r   r¸  s    r”   r*  zIRNode.get_dtypeÇ  ó
   € ØŒzÐr–   útorch.dtype | Nonec                óN   — 	 |                       ¦   «         S # t          $ r Y d S w xY wr�   )r*  ÚNotImplementedErrorr¸  s    r”   Úmaybe_get_dtypezIRNode.maybe_get_dtypeÊ  s9   € ð	Ø—>’>Ñ#Ô#Ð#øÝ"ð 	ð 	ð 	Ø�4�4ð	øøøó   ‚ –
$£$ÚLayoutc                óB   — t          dt          | ¦  «        › d�¦  «        ‚)Nz#get_layout() is not implemented by ú!©r  r¾   r¸  s    r”   r'  zIRNode.get_layoutÐ  s"   € Ý!Ð"UÍÈTÉ
Ì
Ð"UÐ"UÐ"UÑVÔVÐVr–   úLayout | Nonec                óN   — 	 |                       ¦   «         S # t          $ r Y d S w xY wr�   )r'  r  r¸  s    r”   Úmaybe_get_layoutzIRNode.maybe_get_layoutÓ  ó9   € ð	Ø—?’?Ñ$Ô$Ð$øÝ"ð 	ð 	ð 	Ø�4�4ð	øøør	  r<  c                ó*   — |                       ¦   «         S r�   )r'  r¸  s    r”   Úget_output_speczIRNode.get_output_specÙ  s   € Ø�ŠÑ Ô Ð r–   úOutputSpec | Nonec                óN   — 	 |                       ¦   «         S # t          $ r Y d S w xY wr�   )r  r  r¸  s    r”   Úmaybe_get_output_speczIRNode.maybe_get_output_specÜ  s;   € ð	Ø×'Ò'Ñ)Ô)Ð)øÝ"ð 	ð 	ð 	Ø�4�4ð	øøør	  c                óP   — t          |                      ¦   «         t          ¦  «        S )z4True for single tensor output (excludes MultiOutput))r‘   r  r
  r¸  s    r”   Úhas_tensor_outputzIRNode.has_tensor_outputâ  s   € å˜$×4Ò4Ñ6Ô6½Ñ?Ô?Ð?r–   r^  c                óB   — t          dt          | ¦  «        › d�¦  «        ‚)Nz!get_size() is not implemented by r  r  r¸  s    r”   r%  zIRNode.get_sizeæ  s"   € Ý!Ð"SÅdÈ4ÁjÄjÐ"SÐ"SÐ"SÑTÔTÐTr–   úSequence[_IntLike] | Nonec                óN   — 	 |                       ¦   «         S # t          $ r Y d S w xY wr�   )r%  r  r¸  s    r”   Úmaybe_get_sizezIRNode.maybe_get_sizeé  ó7   € ð	Ø—=’=‘?”?Ð"øÝ"ð 	ð 	ð 	Ø�4�4ð	øøør	  ú)_IntLike | sympy.Rel | Sequence[_IntLike]c                ó*   — |                       ¦   «         S r�   ©r%  r¸  s    r”   r`  zIRNode.shapeï  s   € à�}Š}‰ŒÐr–   r    c                óD   — t          |                      ¦   «         ¦  «        S r�   )rr   r%  r¸  s    r”   Ú	get_numelzIRNode.get_numeló  s   € Ý˜TŸ]š]™_œ_Ñ-Ô-Ð-r–   c                ó”   — t           j        j                             t	          j        |                      ¦   «         d¦  «        ¦  «        S ©Nr   ©rw   r"  r#  Ústatically_known_truer·   rQ  r"  r¸  s    r”   Úis_zero_elementszIRNode.is_zero_elementsö  ó2   € ÝŒwÔ×5Ò5µe´h¸t¿~º~Ñ?OÔ?OÐQRÑ6SÔ6SÑTÔTÐTr–   r8  c                ó@   — t          dt          | ¦  «        › �¦  «        ‚)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”   ÚrealizezIRNode.realizeù  s!   € õ  "Ð"@µD¸±J´JÐ"@Ð"@ÑAÔAÐAr–   ÚwriterúIndentedBuffer | Nonec                ó@   — t          dt          | ¦  «        › �¦  «        ‚)Nzcodegen_reference NYI on r  ©r¹  r+  s     r”   Úcodegen_referencezIRNode.codegen_reference  s   € Ý!Ð"J½dÀ4¹j¼jÐ"JÐ"JÑKÔKÐKr–   útorch.device | Nonec                ó   — d S r�   r©   r¸  s    r”   r+  zIRNode.get_device  r×  r–   útorch.devicec                ó6   — |                       ¦   «         }|€J ‚|S r�   ©r+  ©r¹  r!  s     r”   Úget_device_or_errorzIRNode.get_device_or_error  s"   € Ø—’Ñ"Ô"ˆØÐ!Ð!Ð!Øˆr–   c                ó   — dS ©NFr©   r¸  s    r”   Úhas_exceeded_max_readszIRNode.has_exceeded_max_reads  ó   € Øˆur–   ú$Callable[[Sequence[Expr]], OpsValue]c                óD   — t          t          | ¦  «        j        ¦  «        ‚r�   ©r  r¾   r¥   r¸  s    r”   Úmake_loaderzIRNode.make_loader  ó   € Ý!¥$ t¡*¤*Ô"5Ñ6Ô6Ð6r–   ú Callable[[Sequence[Expr]], Expr]c                óD   — t          t          | ¦  «        j        ¦  «        ‚r�   r=  r¸  s    r”   Úmake_indexerzIRNode.make_indexer  r?  r–   c                óD   — t          t          | ¦  «        j        ¦  «        ‚r�   r=  r¸  s    r”   rT  zIRNode.get_stride  r?  r–   c                óN   — 	 |                       ¦   «         S # t          $ r Y d S w xY wr�   )rT  r  r¸  s    r”   rS  zIRNode.maybe_get_stride"  r  r	  c                óD   — t          t          | ¦  «        j        ¦  «        ‚r�   r=  r¸  s    r”   r˜  zIRNode.get_name(  r?  r–   c                óN   — 	 |                       ¦   «         S # t          $ r Y d S w xY wr�   )r˜  r  r¸  s    r”   Úmaybe_get_namezIRNode.maybe_get_name+  r  r	  c                óp   — 	 |                       ¦   «         t          j        j        v S # t          $ r Y dS w xY wr8  )r˜  rw   r"  Úgraph_inputsr  r¸  s    r”   Úis_input_bufferzIRNode.is_input_buffer1  sA   € ð	Ø—=’=‘?”?¥a¤gÔ&:Ð:Ð:øÝ"ð 	ð 	ð 	Ø�5�5ð	øøøs   ‚$' §
5´5Ú	thresholdc                ó   — dS r8  r©   ©r¹  rK  s     r”   Úhas_large_inner_fnzIRNode.has_large_inner_fn7  r:  r–   ©Úgraph_reuseÚusersr’   rP  c               ó   — dS )al  
        Hint that this node's value will be reused.

        `users` estimates the reuse count. When `graph_reuse` is true, this
        represents graph fanout and can trigger fanout-based realization
        heuristics. When false, the reuse comes from loop-level indexing, such
        as a broadcast expand, and should not be treated as graph fanout.
        Nr©   ©r¹  rQ  rP  s      r”   Ú
mark_reusezIRNode.mark_reuse:  s   € € € r–   c                ó   — d S r�   r©   r¸  s    r”   Úrealize_hintzIRNode.realize_hintD  ó   € Øˆr–   c                óD   — t          t          | ¦  «        j        ¦  «        ‚r�   r=  r¸  s    r”   r•  zIRNode.unwrap_viewG  r?  r–   c                óD   — t          t          | ¦  «        j        ¦  «        ‚r�   r=  r¸  s    r”   Úfreeze_layoutzIRNode.freeze_layoutJ  r?  r–   rÌ   rÍ   Úallow_paddingc                óD   — t          t          | ¦  «        j        ¦  «        ‚r�   r=  ©r¹  rÌ   r[  s      r”   Úfreeze_layout_with_stride_orderz&IRNode.freeze_layout_with_stride_orderM  ó   € õ "¥$ t¡*¤*Ô"5Ñ6Ô6Ð6r–   c                óD   — t          t          | ¦  «        j        ¦  «        ‚r�   r=  ©r¹  rÌ   s     r”   Úfreeze_layout_with_fill_orderz$IRNode.freeze_layout_with_fill_orderR  r?  r–   r  c                óD   — t          t          | ¦  «        j        ¦  «        ‚r�   r=  ©r¹  r  s     r”   Úfreeze_layout_with_same_orderz$IRNode.freeze_layout_with_same_orderU  r?  r–   Úexact_stridesc                óD   — t          t          | ¦  «        j        ¦  «        ‚r�   r=  ©r¹  rf  r[  s      r”   Ú freeze_layout_with_exact_stridesz'IRNode.freeze_layout_with_exact_stridesX  r_  r–   údependencies.ReadWritesc                óD   — t          t          | ¦  «        j        ¦  «        ‚r�   r=  r¸  s    r”   Úget_read_writeszIRNode.get_read_writes]  r?  r–   úOrderedSet[Dep]c                ó4   — |                       ¦   «         j        S r�   ©rl  Úreadsr¸  s    r”   rË  zIRNode.get_reads`  ó   € Ø×#Ò#Ñ%Ô%Ô+Ð+r–   c                óD   — t          |                      ¦   «         ¦  «        S r�   )rÙ   rË  r¸  s    r”   Ú	num_readszIRNode.num_readsc  s   € Ý�4—>’>Ñ#Ô#Ñ$Ô$Ð$r–   rƒ   c                óD   — t          t          | ¦  «        j        ¦  «        ‚r�   r=  r¸  s    r”   Úget_storage_numelzIRNode.get_storage_numelf  r?  r–   r�  rš   c                óD   — t          t          | ¦  «        j        ¦  «        ‚r�   r=  ©r¹  r�  s     r”   Úget_free_symbol_useszIRNode.get_free_symbol_usesi  r_  r–   c                óD   — t          t          | ¦  «        j        ¦  «        ‚r�   r=  r¸  s    r”   Úget_reduction_typezIRNode.get_reduction_typen  r?  r–   úSequence[Expr]c                óD   — t          t          | ¦  «        j        ¦  «        ‚r�   r=  r¸  s    r”   Úget_reduction_sizezIRNode.get_reduction_sizeq  r?  r–   c                ó   — dS r8  r©   r¸  s    r”   Ú	is_externzIRNode.is_externt  r:  r–   c                ó   — dS r8  r©   r¸  s    r”   Úis_no_opzIRNode.is_no_opw  r:  r–   r!  c                óD   — t          t          | ¦  «        j        ¦  «        ‚r�   r=  r5  s     r”   Úconstant_to_devicezIRNode.constant_to_devicez  r?  r–   c                óD   — t          t          | ¦  «        j        ¦  «        ‚r�   r=  r¸  s    r”   Úget_mutation_nameszIRNode.get_mutation_names}  r?  r–   c                óD   — t          t          | ¦  «        j        ¦  «        ‚r�   r=  r¸  s    r”   Úget_operation_namezIRNode.get_operation_name€  r?  r–   c                óD   — t          t          | ¦  «        j        ¦  «        ‚r�   r=  r¸  s    r”   Úget_inputs_that_alias_outputz#IRNode.get_inputs_that_alias_outputƒ  r?  r–   c                ó   — d S r�   r©   r¸  s    r”   r   zIRNode.dtypeˆ  s   € Ø(+¨r–   )rŸ  r§  r�   r¨  )r¦  r¥  r�   r¨  ©r¿   r‰   r�   r    ©r�   r‰   )r»  rÃ   r1  r   r�   r¬   ©r�   r¬   ©r�   rÃ  )r�   r   ©r�   r¢  ©r�   rÔ  ©r�   rØ  ©T)rë  r    r�   rì  )TT)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�   r8  r�   ©r+  r,  r�   rÃ   ©r�   r0  ©r�   r2  ©r�   r;  ©r�   r@  ©r�   rÃ   ©rK  r¥  r�   r    ©rQ  r’   rP  r    r�   r¬   ©F©rÌ   rÍ   r[  r    r�   r¬   ©rÌ   rÍ   r�   r¬   ©r  r^  r�   r¬   ©rf  r^  r[  r    r�   r¬   ©r�   rj  ©r�   rm  ©r�   r’   ©r�   rƒ   ©r�  r    r�   rš   ©r�   r{  ©r!  r2  r�   r‰   ©r�   rì  )Qr¥   r¦   r§   Ú__doc__r@   r›  r¨   rœ  ÚdataclassesÚfieldrŸ  r¡  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  r  r%  r  Úpropertyr`  r"  r'  r*  r/  r+  r6  r9  r>  rB  rT  rS  r˜  rG  rJ  rN  rT  rV  r•  rZ  r^  rb  re  ri  rl  rË  rs  ru  rx  rz  r}  r  r�  rƒ  r…  r‡  r‰  r   r   r©   r–   r”   r‰   r‰   /  s�  € € € € € € ðð ð 3=°*±,´,ÐÐ>Ð>Ð>Ñ>Ø04ÐÐ4Ð4Ð4Ñ4ð  1˜{Ô0°eÐ<Ñ<Ô<€GÐ<Ð<Ð<Ñ<à"3 +Ô"3¸Ð"?Ñ"?Ô"?€IÐ?Ð?Ð?Ñ?Ø(9¨Ô(9¸uÐ(EÑ(EÔ(E€KÐEÐEÐEÑEà"3 +Ô"3¸Ð"?Ñ"?Ô"?€KÐ?Ð?Ð?Ñ?à.˜[Ô.°EÐ:Ñ:Ô:€JÐ:Ð:Ð:Ñ:àØÔð*ð *ð *ñ Ôñ „\ð*ð ØÔð-ð -ð -ñ Ôñ „\ð-ð ð

ð 

ð 

ñ „\ð

ð&ð &ð &ð &ð.ð .ð .ð .ð	Hð 	Hð 	Hð 	Hð@ð @ð @ð @ðð ð ð ð ð  ð  ð  ðð ð ð ðð ð ð ðð ð ð ðB+ð +ð +ð +ð +ð  PTð
5ð 
5ð 
5ð 
5ð 
5ðð ð ð ðð ð ð ðWð Wð Wð Wðð ð ð ð!ð !ð !ð !ðð ð ð ð@ð @ð @ð @ðUð Uð Uð Uðð ð ð ð ðð ð ñ „Xðð.ð .ð .ð .ðUð Uð Uð UðBð Bð Bð Bð$Lð Lð Lð Lð Lðð ð ð ðð ð ð ð
ð ð ð ð7ð 7ð 7ð 7ð7ð 7ð 7ð 7ð7ð 7ð 7ð 7ðð ð ð ð7ð 7ð 7ð 7ðð ð ð ðð ð ð ðð ð ð ð ð =Að ð ð ð ð ð ðð ð ð ð7ð 7ð 7ð 7ð7ð 7ð 7ð 7ð ;@ð7ð 7ð 7ð 7ð 7ð
7ð 7ð 7ð 7ð7ð 7ð 7ð 7ð HMð7ð 7ð 7ð 7ð 7ð
7ð 7ð 7ð 7ð,ð ,ð ,ð ,ð%ð %ð %ð %ð7ð 7ð 7ð 7ð %*ð7ð 7ð 7ð 7ð 7ð
7ð 7ð 7ð 7ð7ð 7ð 7ð 7ðð ð ð ðð ð ð ð7ð 7ð 7ð 7ð7ð 7ð 7ð 7ð7ð 7ð 7ð 7ð7ð 7ð 7ð 7ð ð ,à	Ø+Ð+Ð+ñ 
ŒØ+Ð+Ð+ð,ð ,r–   c                  ó¢   — e Zd Zd'd„Zd(d„Zd)d„Zd*d	„Zd+d„Zd,d„Zd-d„Z	d.d„Z
d/d„Zd/d„Zd0d„Zd1d„Zd2d„Zd3d„Zd4d„Zd5d „Z	 d6d7d#„Zd8d%„Zd&S )9Ú	Operationr�   r¬   c                ó"   — d | _         i | _        d S r�   )Úoperation_nameÚ_config_patchesr¸  s    r”   rÂ  zOperation.__post_init__Ž  s   € Ø*.ˆÔØ/1ˆÔÐÐr–   r0  c                ó   — t           ‚r�   ©r  r¸  s    r”   r+  zOperation.get_device’  ó   € Ý!Ð!r–   r¢  c                ó4   — t          | d¦  «        sJ ‚| j        S ©Nr£  )rà  r£  r¸  s    r”   rÒ  zOperation.get_origin_node•  s!   € Ý�t˜]Ñ+Ô+Ð+Ð+Ð+ØÔÐr–   rž  c                ó4   — t          | d¦  «        sJ ‚| j        S )NrŸ  )rà  rŸ  r¸  s    r”   Úget_originszOperation.get_origins™  s    € Ý�t˜YÑ'Ô'Ð'Ð'Ð'ØŒ|Ðr–   r¥  c                ó4   — t          | d¦  «        sJ ‚| j        S )Nr¦  )rà  r¦  r¸  s    r”   Úget_stream_idxzOperation.get_stream_idx�  s    € Ý�t˜\Ñ*Ô*Ð*Ð*Ð*ØŒÐr–   rÃ   c                ó"   — | j         €J ‚| j         S r�   )r¹  r¸  s    r”   r‡  zOperation.get_operation_name¡  s   € ØÔ"Ð.Ð.Ð.ØÔ"Ð"r–   r¤  c                ó   — | j         S )zHGet config patches for this operation (e.g., coordinate_descent_tuning).©rº  r¸  s    r”   Úget_config_patcheszOperation.get_config_patches¥  s   € àÔ#Ð#r–   Úpatchesc                ó   — || _         dS )z&Set config patches for this operation.NrÆ  )r¹  rÈ  s     r”   Úset_config_patcheszOperation.set_config_patches©  s   € à&ˆÔÐÐr–   r    c                ó   — dS r8  r©   r¸  s    r”   r  zOperation.is_extern­  r:  r–   c                ó   — dS r8  r©   r¸  s    r”   r�  zOperation.is_no_op°  r:  r–   rj  c                ó   — t           ‚r�   r¼  r¸  s    r”   rl  zOperation.get_read_writes³  r½  r–   rÂ   c                ó.   — ||                       ¦   «         v S r�   )rÌ  ©r¹  rÂ   s     r”   Ú
is_user_ofzOperation.is_user_of¶  s   € Ø�t×*Ò*Ñ,Ô,Ð,Ð,r–   rÃ  c                óX   — t          d„ |                      ¦   «         D ¦   «         ¦  «        S )Nc              3  ó$   K  — | ]}|j         V — Œd S r�   rÆ  rÇ  s     r”   rø   z+Operation.get_read_names.<locals>.<genexpr>º  rÉ  r–   rÊ  r¸  s    r”   rÌ  zOperation.get_read_names¹  rÍ  r–   rm  c                ó4   — |                       ¦   «         j        S r�   ro  r¸  s    r”   rË  zOperation.get_reads¼  rq  r–   úlist[Buffer]c                ó   — t           ‚r�   r¼  r¸  s    r”   Úget_outputszOperation.get_outputs¿  r½  r–   rš   c                ó   — t          ¦   «         S r�   r?   r¸  s    r”   Úget_unbacked_symbol_defsz"Operation.get_unbacked_symbol_defsÂ  ó   € Ý‰|Œ|Ðr–   Fr�  c                ó   — t          ¦   «         S )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.
        r?   rw  s     r”   rx  zOperation.get_free_symbol_usesÅ  s   € õ, ‰|Œ|Ðr–   r’   c                ó   — dS )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_sizezOperation.get_workspace_sizeÝ  s	   € ð
 ˆqr–   Nr�  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�  rl  rÐ  rÌ  rË  rÖ  rØ  rx  rÜ  r©   r–   r”   r·  r·  Œ  sŠ  € € € € € ð2ð 2ð 2ð 2ð"ð "ð "ð "ð ð  ð  ð  ðð ð ð ðð ð ð ð#ð #ð #ð #ð$ð $ð $ð $ð'ð 'ð 'ð 'ðð ð ð ðð ð ð ð"ð "ð "ð "ð-ð -ð -ð -ð@ð @ð @ð @ð,ð ,ð ,ð ,ð"ð "ð "ð "ðð ð ð ð %*ðð ð ð ð ð0ð ð ð ð ð r–   r·  c                  ó`  — e Zd ZU dZded<   ded<   ded<   ded	<    ed ¦  «        	 d=d>d„¦   «         Zd?d„Zd@d„ZeZ	dAd„Z
dBd„ZdCd„ZdCd„ZedDd„¦   «         Zeej        fdEd#„¦   «         ZedFd%„¦   «         ZdGd'„Zed@d(„¦   «         ZdHdId,„Zd=dJd.„ZdKd2„ZdLd4„ZdMd5„ZdNd7„ZdOd8„ZdPd:„ZdQd<„Z d)S )RÚLoopsz:Base class for pointwise and reduction loop-body IR nodes.r2  r!  r  r   úCallable[..., Any]Úinner_fnr^  ÚrangesFr�  r    r�   rš   c                ó‚   ‡—  t          ¦   «         j        g ˆfd„| j        D ¦   «         ¢|                      ‰¦  «        ‘R Ž S )Nc              3  ó8   •K  — | ]}t          |‰¦  «        V — Œd S r�   r(   ©rÔ   Úer�  s     €r”   rø   z-Loops.get_free_symbol_uses.<locals>.<genexpr>ó  s.   øè è € ÐFÐF°QÕ˜q -Ñ0Ô0ÐFÐFÐFÐFÐFÐFr–   )r@   Úunionrã  Úinner_fn_free_symbolsrw  s    `r”   rx  zLoops.get_free_symbol_usesî  sY   ø€ ð "�z‰|Œ|Ô!ð 
ØFÐFÐFÐF¸$¼+ÐFÑFÔFð
à×&Ò& }Ñ5Ô5ð
ð 
ð 
ð 	
r–   Únamesrì  rÃ   c                óÎ   ‡ — ‰                       d‰ j        j        › d�t          ‰ j        ¦  «        ‰                      ¦   «         gˆ fd„|D ¦   «         z   d‰ j        ›�gz   ¦  «        S )Nú'c                ó:   •— g | ]}|› d t          ‰|¦  «        › �‘ŒS ©ú=)rÉ   )rÔ   rÂ   r¹  s     €r”   r×   z!Loops._to_str.<locals>.<listcomp>þ  s1   ø€ ÐAÐAÐA°4�$Ð.Ð.�  tÑ,Ô,Ð.Ð.ÐAÐAÐAr–   úorigin_node=)r   r!  r¾   rÃ   r   Úinner_fn_strr£  )r¹  rê  s   ` r”   Ú_to_strzLoops._to_str÷  sƒ   ø€ Ø�Šà'�D”KÔ$Ð'Ð'Ð'Ý�D”J‘”Ø×!Ò!Ñ#Ô#ðð
 BÐAÐAÐA¸5ÐAÑAÔAñBð 3˜dÔ.Ð2Ð2Ð3ñ4ñ
ô 
ð 	
r–   c                ó,   — |                       d¦  «        S ©N©rã  ©rò  r¸  s    r”   Ú__str__zLoops.__str__  ó   € Ø�|Š|˜KÑ(Ô(Ð(r–   r0  c                ó   — | j         S r�   ©r!  r¸  s    r”   r+  zLoops.get_device  ó
   € ØŒ{Ðr–   r¢  c                ó   — | j         S r�   rÑ  r¸  s    r”   rÒ  zLoops.get_origin_node
  rÓ  r–   c                ó   — | j         S r�   rõ  r¸  s    r”   r%  zLoops.get_size  rû  r–   c                ó   — | j         S r�   rõ  r¸  s    r”   Úget_pointwise_sizezLoops.get_pointwise_size  rû  r–   rÆ   r   rÇ   rˆ   c                ó  — |                      dd ¦  «        }|                      dd ¦  «        } | |i |¤Ž}|                     d|¦  «         |                     d|p|j        ¦  «         t                               |¦  «        S )Nr£  r¡  )Úpopr¾  r¡  rˆ   r·  )ÚclsrÆ   rÇ   r£  ÚtbÚrs         r”   r·  zLoops.create  s…   € à—j’j °Ñ5Ô5ˆØ�ZŠZ˜ TÑ*Ô*ˆØˆC�Ð ˜Ð Ð ˆð 	
×Ò˜]¨KÑ8Ô8Ð8Ø	×Ò˜[¨"Ð*;°´Ñ<Ô<Ð<Ý×Ò Ñ"Ô"Ð"r–   r‡   rH   r{  c                ó:   ‡— ˆfd„t          | ¦  «        D ¦   «         S )Nc                ód   •— g | ],\  }}|d k    rt           j        j        nt          ‰|¦  «        ‘Œ-S ©rI   )r·   ÚSÚZerorq   )rÔ   Únr÷   r‡   s      €r”   r×   z Loops._index.<locals>.<listcomp>!  sH   ø€ ð 
ð 
ð 
á��1ð  šF˜F�EŒGŒLˆLÕ(FÀvÈqÑ(QÔ(Qð
ð 
ð 
r–   )r  )rã  r‡   s    `r”   Ú_indexzLoops._index  s6   ø€ ð
ð 
ð 
ð 
å! &Ñ)Ô)ð
ñ 
ô 
ð 	
r–   rY   c                ó~  — t          t          j        ¦   «         ¦  «        }t          j        |¦  «        5  t	          j        t          dd¦  «        5   | j        |                      ¦   «         Ž  | 	                    ¦   «         cd d d ¦  «         cd d d ¦  «         S # 1 swxY w Y   d d d ¦  «         d S # 1 swxY w Y   d S ©NÚallow_indexingT)
rX   rw   ÚMockHandlerÚset_ops_handlerr   rŒ   r(  râ  Úinner_fn_argsÚgetvalue)r¹  Ú	opcounters     r”   Úinner_fn_opcountzLoops.inner_fn_opcount&  sH  € å ¥¤¡¤Ñ1Ô1ˆ	åÔ˜iÑ(Ô(ð	(ð 	(åŒL�Ð)9¸4Ñ@Ô@ð	(ð 	(ð ˆDŒM˜4×-Ò-Ñ/Ô/Ð0Ð0Ø×%Ò%Ñ'Ô'ð	(ð 	(ð 	(ð 	(ñ 	(ô 	(ð 	(ð 	(ð 	(ð 	(ð 	(ñ 	(ô 	(ð 	(ð 	(ð 	(ð 	(ð 	(ð 	(øøøð 	(ð 	(ð 	(ð 	(ð 	(ð 	(ð 	(ñ 	(ô 	(ð 	(ð 	(ð 	(ð 	(ð 	(ð 	(ð 	(øøøð 	(ð 	(ð 	(ð 	(ð 	(ð 	(s5   µB2Á0BÂB2ÂB	ÂB2Â!B	Â"B2Â2B6Â9B6úSequence[Sequence[_IntLike]]c                ó8   — |                       | j        ¦  «        fS r�   )r  rã  r¸  s    r”   r  zLoops.inner_fn_args0  s   € Ø—’˜DœKÑ(Ô(Ð*Ð*r–   c                ó^   — t          j        j        | j        g|                      ¦   «         ¢R Ž S r�   )rw   ÚKernelFormatterHandlerÚir_to_stringrâ  r  r¸  s    r”   rñ  zLoops.inner_fn_str3  s8   € åÔ'Ô4ØŒMð
Ø ×.Ò.Ñ0Ô0ð
ð 
ð 
ð 	
r–   NrK  r¥  c                ó   — |€d}t           j        }|€)t          | ¦  «        rt           j        }n$t           j        }nt          |t          ¦  «        sJ ‚t          ||¦  «        }|                      ¦   «         j	        |k    S r$  )
rJ   Úrealize_opcount_thresholdrK  Úrealize_cpu_opcount_thresholdÚ"_realize_opcount_threshold_defaultr‘   r’   Úmaxr  Únum_ops)r¹  rK  r  s      r”   rN  zLoops.has_large_inner_fn9  s„   € ØÐØˆIÝ$*Ô$DÐ!Ø$Ð,Ý�d‰|Œ|ð VÝ,2Ô,PÐ)Ð)å,2Ô,UÐ)Ð)åÐ7½Ñ=Ô=Ð=Ð=Ð=Ý˜	Ð#<Ñ=Ô=ˆ	Ø×$Ò$Ñ&Ô&Ô.°Ò:Ð:r–   úOrderedSet[Symbol]c                ód   — |                       | j        ¦  «        }t          | j        ||¬¦  «        S ©NrŽ  )r  rã  rR   râ  )r¹  r�  rÐ   s      r”   ré  zLoops.inner_fn_free_symbolsG  s,   € Ø—’˜DœKÑ(Ô(ˆÝ# D¤M°5ÈÐVÑVÔVÐVr–   Úsymbolr"   rÃ  c                óä   — |                       | j        ¦  «        }t          |¦  «        }t          j        |¦  «        5  |                      |¦  «         d d d ¦  «         n# 1 swxY w Y   |j        S r�   )r  rã  rU   rw   r  râ  Úusages)r¹  r#  rÐ   Úhandlers       r”   Úcollect_inner_fn_symbol_usagez#Loops.collect_inner_fn_symbol_usageL  s¦   € Ø—’˜DœKÑ(Ô(ˆÝ0°Ñ8Ô8ˆåÔ˜gÑ&Ô&ð	!ð 	!ð �MŠM˜%Ñ Ô Ð ð	!ð 	!ð 	!ñ 	!ô 	!ð 	!ð 	!ð 	!ð 	!ð 	!ð 	!øøøð 	!ð 	!ð 	!ð 	!ð Œ~Ðs   ¾A Á A$Á'A$rm  c                ó¶  — t          j        t          dd¦  «        5  |                      ¦   «         rXt	          |                      ¦   «         |                      ¦   «         |                      ¦   «         ¦  «        j        cd d d ¦  «         S t	          |                      ¦   «         |                      ¦   «         ¦  «        j        cd d d ¦  «         S # 1 swxY w Y   d S r  )	r   rŒ   r(  rz  rT   r>  r%  r}  rp  r¸  s    r”   rË  zLoops.get_readsU  s   € ÝŒ\�.Ð*:¸DÑAÔAð 	ð 	Ø×&Ò&Ñ(Ô(ð 
Ý*Ø×$Ò$Ñ&Ô&Ø—M’M‘O”OØ×+Ò+Ñ-Ô-ñô ô ð	ð 	ð 	ð 	ñ 	ô 	ð 	ð 	õ +Ø×$Ò$Ñ&Ô&Ø—M’M‘O”Oñô ô ð	ð 	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	s   œA CÂ	8CÃCÃCc                óN   — t          |                      ¦   «         j        ¦  «        S r�   )r@   r  Úread_buffersr¸  s    r”   rÌ  zLoops.get_read_namesc  s   € Ý˜$×/Ò/Ñ1Ô1Ô>Ñ?Ô?Ð?r–   r’   c                óN   — t          |                      ¦   «         j        ¦  «        S r�   )rÙ   r  r*  r¸  s    r”   rs  zLoops.num_readsf  s   € Ý�4×(Ò(Ñ*Ô*Ô7Ñ8Ô8Ð8r–   c                óB   — t          dt          | ¦  «        › d�¦  «        ‚)Nz+get_reduction_size() is not implemented by r  r  r¸  s    r”   r}  zLoops.get_reduction_sizei  ó(   € Ý!ØG½$¸t¹*¼*ÐGÐGÐGñ
ô 
ð 	
r–   r8  c                óB   — t          dt          | ¦  «        › d�¦  «        ‚)Nz+get_reduction_type() is not implemented by r  r  r¸  s    r”   rz  zLoops.get_reduction_typen  r-  r–   r‰   c                óB   — t          dt          | ¦  «        › d�¦  «        ‚)Nz+constant_to_device() is not implemented by r  r  r5  s     r”   rƒ  zLoops.constant_to_devices  r-  r–   r¢  r«  )rê  rì  r�   rÃ   rŸ  r›  r�  r—  )rÆ   r   rÇ   r   r�   rˆ   )rã  r^  r‡   rH   r�   r{  )r�   rY   ©r�   r  r�   r   ©r�  r    r�   r   )r#  r"   r�   rÃ  r¨  rŽ  r©  r¬  r™  r­  )!r¥   r¦   r§   r¯  r¨   rb   rx  rò  r÷  Ú__repr__r+  rÒ  r%  rÿ  Úclassmethodr·  r²  rH   ÚINDEXr  ra   r  r  rñ  rN  ré  r'  rË  rÌ  rs  r}  rz  rƒ  r©   r–   r”   rà  rà  å  sb  € € € € € € àDÐDàÐÐÑØÐÐÑØ Ð Ð Ñ ØÐÐÑàÐ˜GÑ$Ô$à$)ð
ð 
ð 
ð 
ñ %Ô$ð
ð	
ð 	
ð 	
ð 	
ð)ð )ð )ð )ð €Hðð ð ð ð ð  ð  ð  ðð ð ð ðð ð ð ð ð	#ð 	#ð 	#ñ „[ð	#ð Ø:>¼*ð 
ð 
ð 
ð 
ñ „\ð
ð ð(ð (ð (ñ „]ð(ð+ð +ð +ð +ð ð
ð 
ð 
ñ „]ð
ð
;ð ;ð ;ð ;ð ;ðWð Wð Wð Wð Wð
ð ð ð ðð ð ð ð@ð @ð @ð @ð9ð 9ð 9ð 9ð
ð 
ð 
ð 
ð

ð 
ð 
ð 
ð

ð 
ð 
ð 
ð 
ð 
r–   rà  r   úExpr | Sequence[Expr]r   r  rv   c               ó~   — |j         r"t          j        t          d¦  «        |¦  «        S t          j        d|¦  «        S )NÚnanr   )Úis_floating_pointru   ÚconstantÚfloat)r   r   s     r”   Únop_loader_fnr;  y  s7   € ØÔð &ÝŒ|�E %™LœL¨%Ñ0Ô0Ð0åŒ|˜A˜uÑ%Ô%Ð%r–   c                  óB   — e Zd Zdd„Zdd„ZeZdd„Zdd	„Zdd„Zdd„Z	dS )Ú	Pointwiser�   r;  c                ón   — |                       ¦   «         rt          t          | j        ¬¦  «        S | j        S ©Nr  )r'  r   r;  r   râ  r¸  s    r”   r>  zPointwise.make_loader‚  s3   € à× Ò Ñ"Ô"ð 	<Ý�=°´
Ð;Ñ;Ô;Ð;àŒ}Ðr–   rÃ   c                ó,   — |                       d¦  «        S rô  rö  r¸  s    r”   r÷  zPointwise.__str__‰  rø  r–   r^  c                ó   — g S r�   r©   r¸  s    r”   r}  zPointwise.get_reduction_sizeŽ  s   € Øˆ	r–   r8  c                ó   — d S r�   r©   r¸  s    r”   rz  zPointwise.get_reduction_type‘  r×  r–   Úoutput_nameÚindexerú!Callable[[Sequence[Expr]], Never]Úvarsr{  r¬   c                ó~   — |                       ¦   «         }t          j        |pd ||¦  «         ||¦  «        ¦  «        S ©NÚunnamed)r>  ru   Ústore©r¹  rC  rD  rF  Úloaders        r”   Ústore_outputzPointwise.store_output”  s>   € ð ×!Ò!Ñ#Ô#ˆÝŒy˜Ð1¨	°7°7¸4±=´=À&À&ÈÁ,Ä,ÑOÔOÐOr–   r!  r2  r‰   c                ó¬   — |                       ¦   «         } t          j        t          d|¦  «        |¦  «        }t	          || j        || j        ¬¦  «        S ©úFMove this to a given device. Requires that all reads are to constants.Úoverride_device©r!  r   râ  rã  )r>  r   rŒ   ÚConstantBufferr=  r   rã  ©r¹  r!  rL  s      r”   rƒ  zPointwise.constant_to_device�  sX   € à×!Ò!Ñ#Ô#ˆØH•”�nÐ.?ÀÑHÔHÈÑPÔPˆÝØØ”*ØØ”;ð	
ñ 
ô 
ð 	
r–   Nr�  rŸ  r—  r™  )rC  r8  rD  rE  rF  r{  r�   r¬   r­  )
r¥   r¦   r§   r>  r÷  r2  r}  rz  rM  rƒ  r©   r–   r”   r=  r=  €  s—   € € € € € ðð ð ð ð)ð )ð )ð )ð €Hðð ð ð ðð ð ð ðPð Pð Pð Pð	
ð 	
ð 	
ð 	
ð 	
ð 	
r–   r=  c                  ó8   — e Zd ZU ded<   dZded<   dd
„Zdd„ZdS )ÚScatterr@  Úoutput_indexerNr[   Úscatter_moder!  r2  r�   r‰   c                óÄ   — |                       ¦   «         } t          j        t          d|¦  «        |¦  «        }t	          || j        || j        | j        | j        ¬¦  «        S )rP  rQ  )r!  r   râ  rã  rW  rX  )	r>  r   rŒ   rS  rV  r   rã  rW  rX  rT  s      r”   rƒ  zScatter.constant_to_device®  sd   € à×!Ò!Ñ#Ô#ˆØH•”�nÐ.?ÀÑHÔHÈÑPÔPˆÝØØ”*ØØ”;ØÔ.ØÔ*ð
ñ 
ô 
ð 	
r–   rC  r8  rD  rE  rF  r{  r   c                ó¶   — |                       ¦   «         }|€d}t          j        | ||                      |¦  «        ¦  «         ||¦  «        | j        ¬¦  «        S )NrI  )Úmode)r>  ru   rJ  rW  rX  rK  s        r”   rM  zScatter.store_output»  sh   € ð ×!Ò!Ñ#Ô#ˆØÐØ#ˆKÝŒyØØˆG�D×'Ò'¨Ñ-Ô-Ñ.Ô.ØˆF�4‰LŒLØÔ"ð	
ñ 
ô 
ð 	
r–   r­  )rC  r8  rD  rE  rF  r{  r�   r   )r¥   r¦   r§   r¨   rX  rƒ  rM  r©   r–   r”   rV  rV  ©  s[   € € € € € € à4Ð4Ð4Ñ4Ø"€LÐ"Ð"Ð"Ñ"ð
ð 
ð 
ð 
ð
ð 
ð 
ð 
ð 
ð 
r–   rV  Ú
logical_orÚmaximumÚminimumÚmulrá  Úbitwise_xor)Úanyr  ÚminÚprodÚsumÚdotÚxor_sumz"dict[str, Callable[..., OpsValue]]ÚREDUCTION_COMBINE_FNÚreduction_typeÚarg_break_ties_leftúCallable[..., object]c                óŒ   ‡ ‡‡— ‰ t           v rt           ‰          S ‰ dv r
dˆˆˆ fd„}|S ‰ dk    rdd
„}|S t          d‰ › �¦  «        ‚)N©ÚargmaxÚargminÚargmax_valueÚargmin_valueÚargmax_with_valueÚargmin_with_valueÚaútuple[object, object]Úbr�   útuple[OpsValue, OpsValue]c                ó²  •— | \  }}|\  }}‰dv rt          j        ||¦  «        }nt          j        ||¦  «        }t          j        ||¦  «        }t	          ‰¦  «        rzt          j        ||¦  «        }t          j        ||¦  «        }	t          j        |t          j        ||	¦  «        ¦  «        }t          j        |t          j        ||	¦  «        ¦  «        }‰rt          j        ||¦  «        nt          j        ||¦  «        }
t          j        |t          j        ||
¦  «        ¦  «        }t          j        |||¦  «        t          j        |||¦  «        fS )N)rn  rp  rr  )	ru   ÚltÚgtÚeqr0   Úner\  Úlogical_andÚwhere)rs  ru  Úa_valueÚa_indexÚb_valueÚb_indexÚmaskÚequalÚa_isnanÚb_isnanÚtieri  r   rh  s              €€€r”   Úargmax_combine_fnz3get_reduction_combine_fn.<locals>.argmax_combine_fnæ  sA  ø€ ð  !ÑˆG�WØ ÑˆG�WàÐ!PÐPÐPÝ”v˜g wÑ/Ô/��å”v˜g wÑ/Ô/�å”F˜7 GÑ,Ô,ˆEÝ˜eÑ$Ô$ð QÝœ& ¨'Ñ2Ô2�Ýœ& ¨'Ñ2Ô2�Ý”~ d­C¬F°7¸GÑ,DÔ,DÑEÔE�Ýœ u­c¬o¸gÀwÑ.OÔ.OÑPÔP�ð 'ð.•”�w Ñ(Ô(Ð(å”V˜G WÑ-Ô-ð õ
 ”> $­¬¸¸sÑ(CÔ(CÑDÔDˆDå”	˜$ ¨Ñ1Ô1Ý”	˜$ ¨Ñ1Ô1ðð r–   Úwelford_combineú#tuple[OpsValue, OpsValue, OpsValue]c           	     ó>  — | \  }}}|\  }}}t          j        t          j        t          j        |¦  «        t          j        ||¦  «        ¦  «        t          j        dt          j        ¦  «        ||z
  ¦  «        }||z   }	||	z  }
|||
z  z   ||z   ||z  |z  |
z  z   |	fS )Ng        )ru   r}  r|  Úisinfrz  r9  r-  Úfloat32)rs  ru  Úa_meanÚa_m2Úa_weightÚb_meanÚb_m2Úb_weightÚdeltaÚ
new_weightÚ	w2_over_ws              r”   Úwelford_combine_fnz4get_reduction_combine_fn.<locals>.welford_combine_fn  s¶   € ð &'Ñ"ˆF�D˜(Ø%&Ñ"ˆF�D˜(õ
 ”IÝ”¥¤	¨&Ñ 1Ô 1µ3´6¸&À&Ñ3IÔ3IÑJÔJÝ”˜S¥%¤-Ñ0Ô0Ø˜‘ñô ˆEð
 " HÑ,ˆJØ  :Ñ-ˆIà˜ Ñ*Ñ*Ø�t‘˜e e™m¨hÑ6¸ÑBÑBØðð r–   zunknown reduction_type=)rs  rt  ru  rt  r�   rv  )rs  r‰  ru  r‰  r�   r‰  )rg  r  )rh  r   ri  r‡  r–  s   ```  r”   Úget_reduction_combine_fnr—  ×  s¡   øøø€ ð Õ-Ð-Ð-Ý# NÔ3Ð3à	ð ð 
ð 
ð	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð: !Ð à	Ð,Ò	,Ð	,ð	ð 	ð 	ð 	ð. "Ð!õ "Ð"L¸NÐ"LÐ"LÑMÔMÐMr–   c                  óð  ‡ — e Zd ZU ded<   ded<   ded<   ded<   dUd„ZeZ ed ¦  «        dVdWˆ fd„¦   «         ZdXd„ZdYd„Z	dZd„Z
d[d„Zd\d „ZdVdWd!„Zd]d%„Ze	 d^d_d1„¦   «         Zed`d4„¦   «         Zeej        d&fdad7„¦   «         Zedbd:„¦   «         Zedbd;„¦   «         Zedcd?„¦   «         ZedddA„¦   «         Ze	 d^dedG„¦   «         ZedfdN„¦   «         ZedgdR„¦   «         Ze	 d^dhdS„¦   «         ZedidT„¦   «         Zˆ xZS )jÚ	Reductionr^  Úreduction_rangesrZ   rh  r  Ú	src_dtyper^   Úreduction_hintr�   rÃ   c                ó,   — |                       d¦  «        S )N)rã  rš  rh  rö  r¸  s    r”   r÷  zReduction.__str__,  s   € Ø�|Š|ÐLÑMÔMÐMr–   Fr�  r    r   c                ó˜   •‡— t          ¦   «                              ‰¦  «         t          ¦   «         j        ˆfd„| j        D ¦   «         Ž z  S )Nc              3  ó8   •K  — | ]}t          |‰¦  «        V — Œd S r�   r(   ræ  s     €r”   rø   z1Reduction.get_free_symbol_uses.<locals>.<genexpr>4  s.   øè è € ÐPÐP°QÕ˜q -Ñ0Ô0ÐPÐPÐPÐPÐPÐPr–   )Úsuperrx  r@   rè  rš  ©r¹  r�  Ú	__class__s    `€r”   rx  zReduction.get_free_symbol_uses1  sN   øø€ å‰wŒw×+Ò+¨MÑ:Ô:Ð=O½Z¹\¼\Ô=OØPÐPÐPÐP¸$Ô:OÐPÑPÔPð>
ñ 
ð 	
r–   c                ó   — | j         S r�   )rš  r¸  s    r”   r}  zReduction.get_reduction_size7  s   € ØÔ$Ð$r–   r8  c                ó   — | j         S r�   )rh  r¸  s    r”   rz  zReduction.get_reduction_type:  ó   € ØÔ"Ð"r–   rC  rD  rE  rF  r{  Úreduction_varsúSequence[Symbol]r¬   c           	     ó¼   — t          j        | j        | j        | j        |                      ||¦  «        ¦  «        }t          j        |pd ||¦  «        |¦  «         d S rH  )ru   Ú	reductionr   r›  rh  râ  Ústore_reduction)r¹  rC  rD  rF  r¦  r1  s         r”   rª  zReduction.store_reduction=  s`   € õ ”ØŒJØŒNØÔØ�MŠM˜$ Ñ/Ô/ñ	
ô 
ˆõ 	Ô˜KÐ4¨9°g°g¸d±m´mÀUÑKÔKÐKÐKÐKr–   r’   c                óT   — t          | j        ¦  «        t          | j        ¦  «        z   S r�   )rÙ   rã  rš  r¸  s    r”   Úindex_lengthzReduction.index_lengthL  s"   € Ý�4”;ÑÔ¥# dÔ&;Ñ"<Ô"<Ñ<Ð<r–   úSequence[Sequence[Expr]]c                óˆ   — |                       | j        ¦  «        }|                       | j        t          j        ¦  «        }||fS r�   )r  rã  rš  rH   ÚR0_INDEX)r¹  rÐ   Úrindexs      r”   r  zReduction.inner_fn_argsO  s7   € Ø—’˜DœKÑ(Ô(ˆØ—’˜TÔ2µD´MÑBÔBˆØ�vˆÐr–   c                ó°   — |                       | j        ¦  «        }|                       | j        t          j        ¦  «        }t          | j        |||¬¦  «        S r"  )r  rã  rš  rH   r¯  rR   râ  )r¹  r�  rÐ   r°  s       r”   ré  zReduction.inner_fn_free_symbolsT  sO   € Ø—’˜DœKÑ(Ô(ˆØ—’˜TÔ2µD´MÑBÔBˆÝ#ØŒM˜5 &¸ð
ñ 
ô 
ð 	
r–   r!  r2  r‰   c           
     óæ   — |                       ¦   «         } t          j        t          d|¦  «        |¦  «        }t	          || j        || j        | j        | j        | j	        t          j        ¬¦  «        S )rP  rQ  ©r!  r   râ  rã  rš  rh  r›  rœ  )r>  r   rŒ   rS  r™  r   rã  rš  rh  r›  r^   ÚDEFAULTrT  s      r”   rƒ  zReduction.constant_to_device[  so   € à×!Ò!Ñ#Ô#ˆØH•”�nÐ.?ÀÑHÔHÈÑPÔPˆÝØØ”*ØØ”;Ø!Ô2ØÔ.Ø”nÝ(Ô0ð	
ñ 	
ô 	
ð 		
r–   NÚ	dst_dtyperâ  úCallable[_P, OpsValue]rã  úReductionType | Literal['scan']Úreduction_numelr    Ú
input_noder  útuple[ReductionHint, _IntLike]c	           
     óX  — |t          |¦  «        g}	t          j        j                             |	¦  «        st
          j        dfS t          j        j                             |¦  «        }
t          |¦  «        }t          j        j                             |¦  «        }t          j                             | t          j
        ¦  «        o0t          | ¦  «         p t          j                             | ||¦  «        }d}|dk    p| o||vot          j        }|dk    rt
          j        dfS t!          j        | ¦  «        }|j        }d}|rMt'          j        t          j        j        | d¬¦  «        }t'          j        t          j        j        | d¬¦  «        }ndd„}|}|dk    rõ ||
|¦  «        }|dk    rt
          j        |fS |�Åt/          |t0          ¦  «        r°t3          j        t6          dd¦  «        5  t9          |¦  «        \  }}ddd¦  «         n# 1 swxY w Y   |�i|�gt          j        j                             t          ||z   ¦  «        ¦  «        }|
|k    r-t<                               d|||||¦  «         t
          j        dfS t
          j        |fS |
|k    s||dz  dz  k    rt
          j        dfS tA          | |||||dk    r|nd|t
          j        ¬¦  «        }dd„} ||¦  «        \  }}|r ||¦  «        \  }}tC          |¦  «        dk    rt
          j        dfS tE          j#        | $                    ¦   «         | %                    ¦   «         ¦  «        \  \  }}}d} d}!|D ]’}"t          j        j         &                    |"|¦  «        }#t          j        j         '                    |#|tQ          | )                    ¦   «         ¦  «        ¦  «        }$tU          d„ |$D ¦   «         ¦  «        }%|%r| dz  } Œ�|!dz  }!Œ“|!| k    rt
          j         ||
|¦  «        fS t
          j+         ||
|¦  «        fS )zd
        Choose the reduction hint and split count from shape and input stride information.
        rI   rl  Úscanre  é    T)Úinner_reductionFÚreduction_numel_hintr’   Ú
numel_hintr�   c                ó   — dS ©NrI   r©   )r¿  rÀ  s     r”   Úinner_reduction_splitsz4Reduction.num_splits.<locals>.inner_reduction_splits¬  s	   € ð �qr–   Nr  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: %srR  rí   rd  r³  r  r™  útuple[Sequence[Expr], bool]c           	     óö  ‡— |                       ¦   «         }|€J ‚t          d t          ||                      ¦   «         |                      ¦   «         ¬¦  «        | ¬¦  «        }|                     ¦   «         }|j        €J ‚d„ |j        D ¦   «         }t          j        |                      ¦   «         |  	                    ¦   «         ¦  «        \  \  }}}d„ |D ¦   «         }g }g }d}	t          |j        d„ ¬¦  «        D ]þ}
|
j        j        Št          ˆfd„|D ¦   «         ¦  «        }| ot          ˆfd	„|D ¦   «         ¦  «        }|r|                     |
j        ¦  «         n|r|                     |
j        ¦  «         |s|rz|
j        t$          j        j        v rbt$          j        j        |
j                 }t+          |j        d
d ¦  «        }|                     ¦   «          t+          |j        d
d ¦  «        |k    rd}	Œÿ|p||	fS )N©r!  r   r  ©rÂ   rq  rp  c                óp   — g | ]3}t          |t          ¦  «        ¯t          |t          j        ¦  «        °1|‘Œ4S r©   ©r‘   r    r·   r   ©rÔ   Úvars     r”   r×   zBReduction.num_splits.<locals>.get_read_indices.<locals>.<listcomp>÷  sN   € ð ð ð àÝ˜c¥4Ñ(Ô(ðõ 2<¸CÅÄÑ1NÔ1NðØðð ð r–   c                óp   — g | ]3}t          |t          ¦  «        ¯t          |t          j        ¦  «        °1|‘Œ4S r©   rÉ  rÊ  s     r”   r×   zBReduction.num_splits.<locals>.get_read_indices.<locals>.<listcomp>ÿ  sN   € ð ð ð àÝ˜c¥4Ñ(Ô(ðõ 2<¸CÅÄÑ1NÔ1NðØðð ð r–   Fc                ó   — | j         S r�   rÆ  r“   s    r”   ú<lambda>z@Reduction.num_splits.<locals>.get_read_indices.<locals>.<lambda>  s   € ¸a¼f€ r–   ©Úkeyc              3  ó    •K  — | ]}|‰v V — Œ	d S r�   r©   ©rÔ   rË  r5   s     €r”   rø   zAReduction.num_splits.<locals>.get_read_indices.<locals>.<genexpr>	  s(   øè è € Ð'RÐ'RÀ¨¨|Ð(;Ð'RÐ'RÐ'RÐ'RÐ'RÐ'Rr–   c              3  ó    •K  — | ]}|‰v V — Œ	d S r�   r©   rÒ  s     €r”   rø   zAReduction.num_splits.<locals>.get_read_indices.<locals>.<genexpr>  sA   øè è € ð Nð NØ,/�C˜<Ð'ðNð Nð Nð Nð Nð Nr–   r  T)r+  r¯  r(  r*  r%  rl  Ú
range_varsrK   Úindex_vars_squeezer}  Úsortedrp  rÐ   r5   rù   ra  ró  rÂ   rw   r"  Úname_to_bufferrÉ   rq  Údecide_layout)r  r!  ÚcbÚread_writesrÔ  r  r¦  ÚindicesÚbroadcasted_reduction_indicesÚchangedÚmdÚis_full_size_readÚis_broadcasted_reduction_readÚbufÚoriginal_strider5   s                  @r”   Úget_read_indicesz.Reduction.num_splits.<locals>.get_read_indicesæ  st  ø€ Ø—\’\‘^”^ˆFØÐ%Ð%Ð%ÝØÝ%Ø!ØŸ+š+™-œ-ØŸš™œðñ ô ð
 ðñ ô ˆBð ×,Ò,Ñ.Ô.ˆKð Ô)Ð5Ð5Ð5ðð à&Ô1ðñ ô ˆJõ
 &2Ô%DØ—
’
‘”˜a×2Ò2Ñ4Ô4ñ&ô &Ñ"ÑˆQ� ðð à)ðñ ô ˆNð
 ˆGØ,.Ð)ØˆGÝ˜[Ô.Ð4DÐ4DÐEÑEÔEð +ð +�Ø!œxÔ4�Ý$'Ð'RÐ'RÐ'RÐ'RÀzÐ'RÑ'RÔ'RÑ$RÔ$RÐ!ð 5FÐ0Eð 1Í#ð Nð Nð Nð NØ3AðNñ Nô Nñ Kô KÐ-ð %ð CØ—N’N 2¤8Ñ,Ô,Ð,Ð,Ø2ð CØ1×8Ò8¸¼ÑBÔBÐBØ$ð +Ð(Eð +Ø”w¥!¤'Ô"8Ð8Ð8ÝœgÔ4°R´WÔ=˜Ý*1°#´*¸hÈÑ*MÔ*M˜Ø×)Ò)Ñ+Ô+Ð+Ý" 3¤:¨x¸Ñ>Ô>À/ÒQÐQØ&*˜GøØÐ;Ð;¸WÐDÐDr–   r   c              3  ó.   K  — | ]}|d k    p|dk    V — ŒdS )r   rI   Nr©   rö   s     r”   rø   z'Reduction.num_splits.<locals>.<genexpr>1  s.   è è € Ð9Ð9¨A˜˜Qš˜ ! a¢%Ð9Ð9Ð9Ð9Ð9Ð9r–   )r¿  r’   rÀ  r’   r�   r’   )r  r™  r�   rÄ  ),rr   rw   r"  r#  Úall_unbacked_explicitly_hintedr^   r´  r$  Úhas_featurerL   ÚREDUCE_TO_SINGLE_ELEMENTrI  ÚchoicesÚ should_use_cooperative_reductionrJ   Úsplit_reductionsr]   r·  Úmulti_processor_countÚ	functoolsr   Úreduction_split_factorÚINNERr‘   rˆ   r   rŒ   r(  rS   Ú!replace_backed_symbols_with_hintsÚlogrã  r™  rÙ   rK   rÕ  r%  r}  Úsimplify_with_rangesÚstride_hintsr°   Úkeysrù   ÚOUTER)&r!  rµ  r›  râ  rã  rš  rh  r¸  r¹  Úexprsr¿  ÚnumelrÀ  Úshould_reduce_to_single_elementÚarg_reduction_typesÚ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Õ   Újrh  Úouters&                                         r”   Ú
num_splitszReduction.num_splitsj  s9  € ð" !¥-°Ñ"7Ô"7Ð8ˆÝŒwÔ×>Ò>¸uÑEÔEð 	,Ý Ô(¨!Ð+Ð+Ý œwÔ/×AÒAÀ/ÑRÔRÐÝ˜fÑ%Ô%ˆÝ”WÔ%×7Ò7¸Ñ>Ô>ˆ
õ
 +,¬'×*=Ò*=Ø•NÔ;ñ+
ô +
ð +
õ ˜&Ñ!Ô!Ð!ð ÝŒy×9Ò9Ø˜˜ñô ð	 	(ð
Ðð &¨Ò/ð 
Ø/Ð/ð (ØÐ&9Ð9ð(åÔ'ð 	ð ˜UÒ"Ð"å Ô(¨!Ð+Ð+å Ô'¨Ñ/Ô/ˆØÔ,ˆØ"$ÐØð 	<Ý@IÔ@QÝ”	Ô0°&È$ðAñ Aô AÐ"õ AJÔ@QÝ”	Ô0°&È%ðAñ Aô AÐ"Ð"ð
ð ð ð ð &<Ð"ð ˜Š?ˆ?Ø*Ð*Ð+?ÀÑLÔLˆEØ˜Šzˆzå$Ô*¨EÐ1Ð1ØÐ%­*°ZÅÑ*KÔ*KÐ%Ý”\¥.Ð2BÀDÑIÔIð Hð Hõ <¸JÑGÔGñØ"Ø,ðHð Hð Hñ Hô Hð Hð Hð Hð Hð Hð Høøøð Hð Hð Hð Hð
 Ð)Ð.BÐ.NåœÔ(×JÒJÝ)¨*Ð7KÑ*KÑLÔLñô ð )ð
 ,Ð/CÒCÐCÝŸ	š	ðGð #Ø,Ø!Ø&Ø0ñ	ô 	ð 	õ  -Ô2°BÐ6Ð6Ý Ô&¨Ð-Ð-à Ð$;Ò;Ð;Ø˜V a™Z¨"™_Ò,Ð,å Ô(¨!Ð+Ð+åØØØØØ-Ø-;¸vÒ-EÐ-E˜>˜>È5ØÝ(Ô0ð	
ñ 	
ô 	
ˆð5	Eð 5	Eð 5	Eð 5	Eðn ,Ð+¨AÑ.Ô.Ñˆ�Øð 	-Ø)Ð)¨!Ñ,Ô,‰JˆG�Qåˆw‰<Œ<˜1ÒÐå Ô(¨!Ð+Ð+å'3Ô'FØ�JŠJ‰LŒL˜!×.Ò.Ñ0Ô0ñ(
ô (
Ñ$ÑˆˆN˜Wð ˆ	Øˆ	Øð 	ð 	ˆAÝ”Ô ×5Ò5°a¸ÑAÔAˆAÝ”gÔ&×3Ò3Ø�>¥4¨¯ª©¬Ñ#7Ô#7ñô ˆGõ
 Ð9Ð9°Ð9Ñ9Ô9Ñ9Ô9ˆEØð Ø˜Q‘�	�	à˜Q‘�	�	Ø�yÒ Ð Ý Ô&Ð(>Ð(>Ø$ jñ)ô )ð ð õ !Ô&Ð(>Ð(>Ø$ jñ)ô )ð ð s   Ç/HÈHÈHú<Callable[[Sequence[_IntLike], Sequence[_IntLike]], OpsValue]ú(Callable[[Sequence[_IntLike]], OpsValue]c                ó  ‡ ‡‡‡‡‡— t           j        j                             ‰¦  «        Št	          ||¦  «        Šdˆˆˆfd„Š|dv rCt          ‰t                               ‰¦  «        ¦  «        Šdˆˆ fd	„Š|d
v r‰S |dv rˆfd„S ˆfd„S ‰ Š‰S )z1Convert inner_fn from a reduction to an pointwiserÐ   r^  r�   r   c                óv   •‡ — t          j        ‰ˆ ˆfd„t          j        d„ ‰D ¦   «         Ž D ¦   «         ¦  «        S )Nc              3  ó0   •K  — | ]} ‰‰|¦  «        V — Œd S r�   r©   )rÔ   r°  rÐ   Úvalue_fns     €€r”   rø   z=Reduction._unroll_reduction_fn.<locals>.fn.<locals>.<genexpr>N  sC   øè è € ð ð àð �H˜U FÑ+Ô+ðð ð ð ð ð r–   c                ó,   — g | ]}t          |¦  «        ‘ŒS r©   )rÚ   ©rÔ   r‹   s     r”   r×   z>Reduction._unroll_reduction_fn.<locals>.fn.<locals>.<listcomp>Q  s   € Ð=Ð=Ð= q�% ™(œ(Ð=Ð=Ð=r–   )rì  ÚreduceÚ	itertoolsÚproduct)rÐ   Ú
combine_fnrš  r  s   `€€€r”   rÊ   z*Reduction._unroll_reduction_fn.<locals>.fnK  sa   øø€ ÝÔ#Øðð ð ð ð å"+Ô"3Ø=Ð=Ð,<Ð=Ñ=Ô=ð#ðñ ô ñô ð r–   )rn  rm  rp  ro  rr  rq  r°  rv  c                ó¶   •— d„ |D ¦   «         } ‰| |¦  «        }t          |t          ¦  «        r|S |t          j         ‰|¦  «        t          j        ¦  «        fS )Nc                ó6   — g | ]}t          j        |¦  «        ‘ŒS r©   ©r·   Úexpand©rÔ   rÕ   s     r”   r×   zDReduction._unroll_reduction_fn.<locals>.value_fn.<locals>.<listcomp>g  s    € Ð:Ð:Ð:¨a�%œ, q™/œ/Ð:Ð:Ð:r–   )r‘   r±   ru   Ú
index_exprr-  Úint64)rÐ   r°  r1  Úflatten_indexrâ  s      €€r”   r  z0Reduction._unroll_reduction_fn.<locals>.value_fnd  sh   ø€ ð ;Ð:°6Ð:Ñ:Ô:�Ø ˜ ¨Ñ/Ô/�Ý˜e¥UÑ+Ô+ð !Ø �LàÝ”N = =°Ñ#8Ô#8½%¼+ÑFÔFðð r–   )rr  rq  )rp  ro  c                ó&   •—  ‰| ¦  «        d         S r$  r©   ©rÐ   rÊ   s    €r”   rÎ  z0Reduction._unroll_reduction_fn.<locals>.<lambda>s  s   ø€  R R¨¡Y¤Y¨q¤\€ r–   c                ó&   •—  ‰| ¦  «        d         S rÂ  r©   r  s    €r”   rÎ  z0Reduction._unroll_reduction_fn.<locals>.<lambda>t  s   ø€    E¡¤¨1¤€ r–   N)rÐ   r^  r�   r   )rÐ   r^  r°  r^  r�   rv  )rw   r"  r#  Úguard_int_seqr—  Ú_fixed_indexerr(  r)  )râ  rš  rh  r›  r  r  rÊ   r  s   ``  @@@@r”   Ú_unroll_reduction_fnzReduction._unroll_reduction_fn?  sÿ   øøøøøø€ õ œ7Ô+×9Ò9Ð:JÑKÔKÐå-¨n¸iÑHÔHˆ
ð		ð 		ð 		ð 		ð 		ð 		ð 		ð 		ð ð 
ð 
ð 
õ +Ø Ý×1Ò1Ð2BÑCÔCñô ˆMð

ð 
ð 
ð 
ð 
ð 
ð 
ð Ð!KÐKÐKØ�	ØÐ!AÐAÐAØ1Ð1Ð1Ð1Ð1Ø-Ð-Ð-Ð-Ð-àˆHØˆIr–   rá  rˆ   c
                óN  ‡‡‡‡‡‡— t           j        j                             t	          ‰¦  «        ¦  «        Š‰dk    rudˆfd„}
 |
d¦  «         |
d¦  «         |
d¦  «         |
d¦  «        dœŠ‰‰v sJ ‰› d	�¦   «         ‚dˆˆˆfd„}t
                               |||t          |¦  «        ¬¦  «        S ‰dk    r0‰dv rdˆfd„}ndˆˆfd„}t
                               |‰||¬¦  «        S t          ‰t          ¦  «        r~t          ‰¦  «        t          j        k     rat	          |¦  «        dk    st          |j        ¦  «        r:‰dk    r4t
                               |‰|                      ‰‰‰|¦  «        |¬¦  «        S |                      |‰|‰|‰‰‰|	¦	  «	        \  }}d ˆfd„} ||¦  «        }|t"          j        k    r|}|dk    ro|	€J ‚t'          j        t*          dd¦  «        5  t-          |	¦  «        \  }}ddd¦  «         n# 1 swxY w Y   |€J ‚|€J ‚|                      |‰|‰|‰||‰|¦
  «
        S |dk    r¼|                      |‰|‰|‰‰|||	¦
  «
        }d}t          j        j        r$t          |t6          ¦  «        rd!d„} ||¦  «        }|rct          |j        t:          ¦  «        sJ t          |j        ¦  «        › ¦   «         ‚|j        j        d         |_        ‰|_         ||_!        ‰|_"        |S t6                               t;          |‰‰|‰‰||¬¦  «        ¦  «        }|S )"zy
        Create a reduction node. May split the reduction to multiple layers to expose
        more parallelism.
        r   ÚvalrŒ   r�   úbool | float | intc                ó<  •— ‰t           j        k    rt          | ¦  «        S ‰j        r;t          | t          ¦  «        sJ t          | ¦  «        ¦   «         ‚t          | ¦  «        S t          | t          ¦  «        sJ t          | ¦  «        ¦   «         ‚t          | ¦  «        S r�   )	r-  r    r8  r‘   r   r¾   r:  r   r’   )r"  rµ  s    €r”   Úpy_cnstz!Reduction.create.<locals>.py_cnst‘  s†   ø€ Ø¥¤
Ò*Ð*Ý ™9œ9Ð$ØÔ0ð $Ý% c­=Ñ9Ô9ÐDÐD½4À¹9¼9ÑDÔDÐ9Ý  ™:œ:Ð%å% c­;Ñ7Ô7ÐBÐB½¸c¹¼ÑBÔBÐ7Ý˜s™8œ8�Or–   rI   )rd  rf  rc  ra  ú* not supported for zero-dimension tensors!rÐ   r’   rv   c                ó:   •— t          j        ‰‰         ‰¦  «        S r�   ©ru   r9  )rÐ   rµ  rh  Úrtypes_to_initss    €€€r”   Úconst_fnz"Reduction.create.<locals>.const_fn§  s   ø€ Ý”| O°NÔ$CÀYÑOÔOÐOr–   rR  )rn  rm  c                ó.   •— t          j        d‰¦  «        S r$  r(  )rÐ   rµ  s    €r”   rÊ   zReduction.create.<locals>.fnµ  s   ø€ Ýœ<¨¨9Ñ5Ô5Ð5r–   c                ó4   •— d„ ‰D ¦   «         } ‰| |¦  «        S )Nc                ó0   — g | ]}t           j        j        ‘ŒS r©   ©r·   r  r	  r  s     r”   r×   z0Reduction.create.<locals>.fn.<locals>.<listcomp>»  ó   € Ð&NÐ&NÐ&N¸¥u¤w¤|Ð&NÐ&NÐ&Nr–   r©   )rÐ   Úreduction_indexrâ  rš  s     €€r”   rÊ   zReduction.create.<locals>.fnº  s)   ø€ Ø&NÐ&NÐ=MÐ&NÑ&NÔ&N�OØ#˜8 E¨?Ñ;Ô;Ð;r–   re  rô  c                ój   •— t          ‰¦  «        r| S | dk    rt          | t          j        ¦  «        S | S rÂ  )r•   r  rJ   Úmin_num_split)rô  r¸  s    €r”   Ú_maybe_increase_splitz/Reduction.create.<locals>._maybe_increase_splitâ  s9   ø€ å˜/Ñ*Ô*ð Ø�Ø�qŠyˆyÝ˜5¥&Ô"6Ñ7Ô7Ð7à�r–   rR  Nr  TÚcur_noderˆ   úComputedBuffer | Nonec                óL  — |                       ¦   «         }t          |¦  «        dk    rd S t          t          |¦  «        ¦  «        }|t          j        j        vrd S t          j        j        |         }t          |t          ¦  «        sd S |j	         
                    ¦   «         €J ‚|S rÂ  )rÌ  rÙ   ÚnextÚiterrw   r"  r×  r‘   r¯  rp  rz  )r4  Ú
read_namesÚbufnamerá  s       r”   Ú_find_split_reductionz/Reduction.create.<locals>._find_split_reduction  sš   € ð "*×!8Ò!8Ñ!:Ô!:�JÝ˜:‘”¨!Ò+Ð+Ø#˜tå"¥4¨
Ñ#3Ô#3Ñ4Ô4�GØ¥a¤gÔ&<Ð<Ð<Ø#˜tÝœ'Ô0°Ô9�CÝ% c­>Ñ:Ô:ð $Ø#˜tàœ8×6Ò6Ñ8Ô8ÐDÐDÐDà�Jr–   r³  )r"  rŒ   r�   r#  )rÐ   r’   r�   rv   )rô  r’   r�   r’   )r4  rˆ   r�   r5  )#rw   r"  r#  Úsimplifyrr   r=  r·  r°   r‘   r!   r’   rJ   Úunroll_reductions_thresholdrn   r¾   r   r  r^   r´  r   rŒ   r(  rS   Ú!create_multilayer_existing_rangesÚcreate_multilayerrD  Úmix_order_reductionrˆ   rp  r™  rš  Ú_split_sizeÚ_original_inner_fnÚ_original_rangesÚ_original_reduction_ranges)r  r!  rµ  r›  râ  rã  rš  rh  rœ  r¹  r%  r*  rÊ   Úhintrô  r3  rþ  rÿ  r  Úsplit_reductionr;  r¸  r)  s     ` ` ``             @@r”   r·  zReduction.createy  sà  øøøøøø€ õ$ œ'Ô*×3Ò3µMÐBRÑ4SÔ4SÑTÔTˆà˜aÒÐð$ð $ð $ð $ð $ð $ð �w˜q‘z”zØ"˜7 1™:œ:Ø˜ ™
œ
Ø�w˜q‘z”zð	ð ˆOð " _Ð4Ð4Ð4Ø!ÐMÐMÐMñ 5Ô4Ð4ðPð Pð Pð Pð Pð Pð Pð Põ ×#Ò#ØØØ!Ý˜F‘|”|ð	 $ñ ô ð ð ˜aÒÐàÐ!5Ð5Ð5ð6ð 6ð 6ð 6ð 6ð 6ð 6ð
<ð <ð <ð <ð <ð <ð <õ ×#Ò#Ø Y¸ÀFð $ñ ô ð õ
 �­Ñ0Ô0ð	å�OÑ$Ô$¥vÔ'IÒIÐIÝ˜vÑ&Ô&¨!Ò+Ð+­v°f´kÑ/BÔ/BÐ+Ø %Ò'Ð'õ ×#Ò#ØØØ×1Ò1ØÐ.°À	ñô ð ð $ñ ô ð ð —n’nØØØØØØØØØñ

ô 

‰ˆˆeð	ð 	ð 	ð 	ð 	ð 	ð &Ð% eÑ,Ô,ˆð
 �]Ô2Ò2Ð2Ø!ˆNØ�BŠ;ˆ;ØÐ)Ð)Ð)Ý”�nÐ.>ÀÑEÔEð ð Ý3VØñ4ô 4Ñ0�
Ð0ðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð Ð)Ð)Ð)Ø'Ð3Ð3Ð3Ø×8Ò8ØØØØØØ ØØ$ØØñô ð ð �QŠYˆYà×'Ò'ØØØØØØ ØØØØñô ˆCð #ˆOÝŒ}Ô0ð =µZÀÅYÑ5OÔ5Oð =ðð ð ð ð$ #8Ð"7¸Ñ"<Ô"<�àð Nõ " /Ô"6½	ÑBÔBð ð Ý˜OÔ0Ñ1Ô1Ð3ñô ÐBð />Ô.BÔ.SÐTUÔ.V�Ô+Ø5=�Ô2Ø39�Ô0Ø=M�Ô:ØˆJå×ÒÝØØØ!ØØ!1Ø-Ø#Ø-ð	ñ 	ô 	ñ
ô 
ˆð ˆ
s   Ç$HÈHÈ
Hr   ú_NumLike | Sequence[_NumLike]c           
     óÊ  — | dv rHt          |¦  «        rt          d¦  «        S t          |¦  «        rdS t          j        |¦  «        j        S | dv rHt          |¦  «        rt          d¦  «        S t          |¦  «        rdS t          j        |¦  «        j        S t          |¦  «        rdnd}t          |¦  «        rdnd}||||||||f|||ft          d¦  «        |fd	œ|          S )
N)r  rm  ro  rq  ú-infF)rb  rn  rp  rr  ÚinfTr   rI   )rd  rc  re  rf  ra  Úwelford_reducerˆ  Úonline_softmax_reduce)r0   r:  r.   r-  Úiinforb  r  )rh  r   ÚzeroÚones       r”   Údefault_accumulatorzReduction.default_accumulatorK  s  € ð ÐSÐSÐSÝ˜eÑ$Ô$ð .Ý˜V‘}”}Ð$Ý! %Ñ(Ô(ð .Ø�uå”{ 5Ñ)Ô)Ô-Ð-ØÐSÐSÐSÝ˜eÑ$Ô$ð .Ý˜U‘|”|Ð#Ý! %Ñ(Ô(ð .Ø�tå”{ 5Ñ)Ô)Ô-Ð-å(¨Ñ/Ô/Ð6ˆuˆu°QˆÝ& uÑ-Ô-Ð4ˆdˆd°1ˆàØØØØØ# T¨4Ð0Ø $ d¨DÐ1Ý&+¨F¡m¤m°TÐ%:ð	
ð 	
ð ô	ð 		r–   c                óH   — | dk    rdS t                                | |¦  «        S )NrK  r   )r™  rP  ©rh  r   s     r”   Údefault_valuezReduction.default_valuek  s+   € ð Ð-Ò-Ð-Ø�1Ý×,Ò,¨^¸UÑCÔCÐCr–   rô  rƒ   rÀ  c                ó¶   — | dk    r|S | dk    r"|dk    r|t           j        k    rt           j        S | dk    r"|dk    r|t           j        k    rt           j        S |S )NrR  é   i   é   )r^   rô  Ú
OUTER_TINY)rô  rÀ  rœ  s      r”   Ú_multilayer_second_step_hintz&Reduction._multilayer_second_step_hints  sm   € ð �BŠ;ˆ;Ø!Ð!Ø�CŠ<ˆ<˜J¨#Ò-Ð-°.ÅMÔDWÒ2WÐ2WÝ Ô+Ð+à�TŠMˆMØ˜cÒ!Ð!Ø¥-Ô"5Ò5Ð5å Ô+Ð+àÐr–   r¥  c                ó   — |€dS t           j        j                             |                     ¦   «         |¦  «        sdS |                     ¦   «          	 t          |¦  «         n# t          $ r Y dS w xY w|                     ¦   «         }t          |dd…         ¦  «        D ].\  }}t           j        j                             |d¦  «        r|c S Œ/dS )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
        NrR  rI   )
rw   r"  r#  rm  r"  r*  rr  r  rT  r  )r  r¸  r¹  rh  rÕ   r÷   s         r”   Ú$check_for_split_dense_dim_reindexingz.Reduction.check_for_split_dense_dim_reindexing„  sö   € ð ÐØ�4åŒwÔ×7Ò7Ø× Ò Ñ"Ô" Oñ
ô 
ð 	ð �4à×ÒÑÔÐð	å! *Ñ-Ô-Ð-Ð-øÝ"ð 	ð 	ð 	Ø�4�4ð	øøøð ×'Ò'Ñ)Ô)ˆå˜g c r cœlÑ+Ô+ð 	ð 	‰DˆAˆqÝŒwÔ×7Ò7¸¸1Ñ=Ô=ð Ø���ðð ˆts   ÁA# Á#
A1Á0A1rL  rÄ   Ú
block_sizeÚdefaultrj  c                ó  ‡‡‡‡‡
‡— |                       ‰|¦  «        }t                               |‰g|¦  «        Št          j        j                             t          j        t          ‰|¦  «        d¦  «        ¦  «         Š
dˆˆˆˆ
ˆˆfd„}	|	S )	Nr   rÐ   r§  r0  r�   rv   c                ó  •‡‡— |\  }| �^ Š}‰|z  |z   Šdˆˆ
ˆˆfd„}‰r`t          ‰¦  «        }t          j        t          j        ‰|¦  «        t          j        ‰|¦  «        ¦  «        }t          j        ||‰	¦  «        S  |¦   «         S )Nr�   rv   c                 ó0   •—  ‰‰ ‰‰ g¦  «        ¦  «        S r�   r©   )rÛ  rL  Ú	new_indexrÛ   s   €€€€r”   ÚbodyzCReduction._multilayer_wrap_loader.<locals>.wrapper_fn.<locals>.bodyÀ  s!   ø€ Ø�v˜i¨¨°'°Ñ);Ô);Ñ<Ô<Ð<r–   ©r�   rv   )rh   ru   rx  r  Úmasked)rÐ   r0  Úreduction_blockra  Úindex_dtyper‚  rÛ  r`  r[  r\  rL  Ú	need_maskr¸  rÛ   s         @@€€€€€€r”   Ú
wrapper_fnz5Reduction._multilayer_wrap_loader.<locals>.wrapper_fn¹  s¼   øøø€ ð "1Ñˆ_Ø*/Ñ'ˆY˜Ø  ?Ñ2°_ÑDˆGð=ð =ð =ð =ð =ð =ð =ð =ð =ð ð Ý-¨oÑ>Ô>�Ý”vÝ”N 7¨KÑ8Ô8Ý”N ?°KÑ@Ô@ñô �õ ”z $¨¨gÑ6Ô6Ð6à�t‘v”v�r–   )rÐ   r§  r0  r§  r�   rv   )
rZ  ÚViewÚdynamic_reshape_indexerrw   r"  r#  r&  r·   rQ  rF   )r  rL  rš  r¸  rô  r[  r\  r¹  Údense_indexrg  rf  rÛ   s    ` ` ``   @@r”   Ú_multilayer_wrap_loaderz!Reduction._multilayer_wrap_loader¤  s¾   øøøøøø€ ð ×>Ò>Ø˜Zñ
ô 
ˆõ ×.Ò.Ø˜Ð/°ñ
ô 
ˆõ œÔ(×>Ò>ÝŒH•S˜¨%Ñ0Ô0°!Ñ4Ô4ñ
ô 
ð 
ˆ	ð	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð( Ðr–   ú4Callable[[Sequence[Expr], Sequence[Expr]], OpsValue]Úoriginal_rangesÚoriginal_reduction_rangesrþ  úSequence[Integer]rÿ  c                óØ   ‡‡‡— t          d„ ‰D ¦   «         ¦  «        sJ d‰›�¦   «         ‚t                               |t          |¦  «        t          |¦  «        z   ¦  «        Šd	ˆˆˆfd„}|S )
Nc              3  ó"   K  — | ]
}|d k    V — ŒdS )rI   Nr©   ©rÔ   r  s     r”   rø   zDReduction._multilayer_wrap_loader_existing_ranges.<locals>.<genexpr>Ø  s&   è è € Ð3Ð3˜a�1˜’6Ð3Ð3Ð3Ð3Ð3Ð3r–   z8Only enabled for numel_hint == 1, found original_ranges=Úmerged_indexr{  Únew_reduction_indexr�   rv   c           	     óÄ   •— | d t          ‰¦  «        …         }| t          ‰¦  «        d …         } ‰| ‰t          |¦  «        t          |¦  «        z   ¦  «        ¦  «        S r�   )rÙ   r±   )rs  rt  Úoriginal_idxr`  rL  rm  rÛ   s       €€€r”   rg  zEReduction._multilayer_wrap_loader_existing_ranges.<locals>.wrapper_fnß  so   ø€ ð (Ð(>­#¨oÑ*>Ô*>Ð(>Ô?ˆLØ$¥S¨Ñ%9Ô%9Ð%;Ð%;Ô<ˆIØ�6ØØ��˜iÑ(Ô(­5Ð1DÑ+EÔ+EÑEÑFÔFñô ð r–   )rs  r{  rt  r{  r�   rv   )rù   rh  ri  r±   )r  rL  rm  rn  rþ  rÿ  rg  rÛ   s    ``    @r”   Ú'_multilayer_wrap_loader_existing_rangesz1Reduction._multilayer_wrap_loader_existing_rangesÏ  s¥   øøø€ õ Ð3Ð3 ?Ð3Ñ3Ô3Ñ3Ô3ð 	
ð 	
ØI°ÐIÐIñ	
ô 	
Ð3õ ×.Ò.Ø%¥u¨ZÑ'8Ô'8½5ÐAUÑ;VÔ;VÑ'Vñ
ô 
ˆð		ð 		ð 		ð 		ð 		ð 		ð 		ð 		ð Ðr–   rg  rŒ  úlist[Integer]c                óD  ‡— |t           j        t           j        fvr|nt           j        }t                               |||||||	|¦  «        }|                     ¦   «          |                     ¦   «         Šd	ˆfd„}t          j	        j
                             t          |¦  «        ¦  «        }|                      |
||¦  «        }||dt          |¦  «        …         k    sJ ‚t                               t	          |||||t          |¦  «        d…         |	||¬¦  «        ¦  «        S )
úa
        Break a large reduction up into multiple smaller reductions
        recursively
        rÐ   r^  r0  r�   rv   c                ó"   •—  ‰g | ¢|¢¦  «        S r�   r©   )rÐ   r0  Úintermediate_loaders     €r”   Úintermediate_fnz;Reduction.create_multilayer_helper.<locals>.intermediate_fn  s!   ø€ ð 'Ð&Ð'A¨Ð'A°Ð'AÑBÔBÐBr–   Nr³  )rÐ   r^  r0  r^  r�   rv   )r-  Úfloat16Úbfloat16r:  r™  r·  r*  r>  rw   r"  r#  r$  rr   rX  rÙ   rˆ   )r  r!  rµ  r›  rg  rm  rn  rþ  rÿ  rh  rô  rœ  Úintermediate_dtypeÚintermediater}  rÀ  r|  s                   @r”   Úcreate_multilayer_helperz"Reduction.create_multilayer_helperì  s\  ø€ ð0 ¥¤µ´Ð ?Ð?Ð?ð ˆIå”ð 	õ
 !×'Ò'ØØØØØØ ØØñ	
ô 	
ˆð 	×ÒÑÔÐØ*×6Ò6Ñ8Ô8Ðð	Cð 	Cð 	Cð 	Cð 	Cð 	Cõ
 ”WÔ%×7Ò7½ÀoÑ8VÔ8VÑWÔWˆ
Ø×9Ò9Ø�:˜~ñ
ô 
ˆð  *Ð-C­s°?Ñ/CÔ/CÐ-CÔ"DÒDÐDÐDÐDÝ×ÒÝØØØ(Ø&Ø!+­C°Ñ,@Ô,@Ð,BÐ,BÔ!CØ-Ø#Ø-ð	ñ 	ô 	ñ
ô 
ð 	
r–   c                óö   — t          |¦  «        }t          ||dz
  z   |¦  «        }|                      ||¦  «        }|                      |||||||
¦  «        }|                      ||||||g |¢|‘|g|||	¦  «        S )rz  rI   )rr   rC   rS  rk  r‚  )r  r!  rµ  r›  râ  rã  rš  rh  rô  rœ  r¹  r¸  r[  r\  rg  s                  r”   r?  zReduction.create_multilayer,  s°   € õ& (Ð(8Ñ9Ô9ˆÝ˜o°¸±Ñ;¸UÑCÔCˆ
Ø×#Ò# N°IÑ>Ô>ˆØ×0Ò0ØØØØØØØñ
ô 
ˆ
ð ×+Ò+ØØØØØØØˆfÐ�eÐØˆLØØØñ
ô 
ð 	
r–   c                óz   — |                       |||||¦  «        }|                      ||||||g |¢|¢||	d|
¦  «        S )rz  rR  )rw  r‚  )r  r!  rµ  r›  râ  rm  rn  rþ  rÿ  rh  rœ  rg  s               r”   r>  z+Reduction.create_multilayer_existing_rangesZ  sm   € ð$ ×@Ò@ØØØ%ØØ ñ
ô 
ˆ
ð ×+Ò+ØØØØØØ%Ø+ˆoÐ+ 
Ð+Ø ØØØñ
ô 
ð 	
r–   rŸ  r¢  r1  r—  r™  )
rC  r8  rD  rE  rF  r{  r¦  r§  r�   r¬   r©  ©r�   r­  r­  r�   )r!  r2  rµ  r  r›  r  râ  r¶  rã  r^  rš  r^  rh  r·  r¸  r    r¹  r  r�   rº  )
râ  r  rš  r^  rh  rÃ   r›  r  r�   r  )r!  r2  rµ  r  r›  r  râ  rá  rã  r^  rš  r^  rh  rZ   rœ  r^   r¹  r  r�   rˆ   ©rh  rÃ   r   r  r�   rG  )rô  rƒ   rÀ  r’   rœ  r^   r�   r^   )r¸  rƒ   r¹  r  r�   r¥  )rL  rÄ   rš  r^  r¸  rƒ   rô  rƒ   r[  rƒ   r\  rG  r¹  r  r�   rj  )rL  rl  rm  r{  rn  r{  rþ  ro  rÿ  ro  r�   rl  )r!  r2  rµ  r  r›  r  rg  rá  rm  r{  rn  r{  rþ  rŒ  rÿ  rx  rh  rZ   rô  rƒ   rœ  r^   r�   rˆ   )r!  r2  rµ  r  r›  r  râ  rá  rã  r^  rš  r^  rh  rZ   rô  rƒ   rœ  r^   r¹  r  r�   rˆ   )r!  r2  rµ  r  r›  r  râ  rá  rm  r^  rn  r^  rþ  rx  rÿ  rx  rh  rZ   rœ  r^   r�   rˆ   ) r¥   r¦   r§   r¨   r÷  r2  rb   rx  r}  rz  rª  r¬  r  ré  rƒ  r²  r  r   r3  r^   r´  r·  rP  rS  rX  rZ  rk  rw  r‚  r?  r>  Ú__classcell__©r¢  s   @r”   r™  r™  $  s   ø€ € € € € € à(Ð(Ð(Ñ(Ø!Ð!Ð!Ñ!àÐÐÑØ!Ð!Ð!Ñ!ðNð Nð Nð Nð €HàÐ˜KÑ(Ô(ð
ð 
ð 
ð 
ð 
ð 
ñ )Ô(ð
ð
%ð %ð %ð %ð#ð #ð #ð #ðLð Lð Lð Lð=ð =ð =ð =ðð ð ð ð

ð 
ð 
ð 
ð 
ð
ð 
ð 
ð 
ð ð %)ðRð Rð Rð Rñ „\ðRðh ð7ð 7ð 7ñ „\ð7ðr ð )6Ô(=Ø$(ðNð Nð Nð Nñ „[ðNð` ðð ð ñ „\ðð> ðDð Dð Dñ „\ðDð ðð ð ñ „\ðð  ðð ð ñ „[ðð> ð %)ð(ð (ð (ð (ñ „[ð(ðT ðð ð ñ „[ðð8 ð=
ð =
ð =
ñ „[ð=
ð~ ð %)ð+
ð +
ð +
ð +
ñ „[ð+
ðZ ð$
ð $
ð $
ñ „[ð$
ð $
ð $
ð $
ð $
r–   r™  r  r  r  rt  r    ú$Callable[[Sequence[_IntLike]], Expr]c                ó   ‡ ‡‡— dˆˆ ˆfd„}|S )ú1A closure containing math to read a given elementrÐ   r^  r�   r    c                óä   •— ‰� t          | ¦  «        t          ‰¦  «        k    sJ ‚t          | ¦  «        t          ‰¦  «        k    sJ ‚‰}t          | ‰‰¦  «        D ]\  }}}|dk    r|||z  z   }Œ|S rÂ  )rÙ   rÝ   )rÐ   Úresultr   ÚstÚszrt  r  r  s        €€€r”   rD  z_fixed_indexer.<locals>.indexer‰  s…   ø€ ØÐ!¥c¨%¡j¤jµC¸±K´KÒ&?Ð&?Ð&?Ð?Ý�5‰zŒz�S ™YœYÒ&Ð&Ð&Ð&ØˆÝ˜u f¨dÑ3Ô3ð 	+ð 	+‰KˆC��RØ�QŠwˆwØ #¨¡(Ñ*�øØˆr–   )rÐ   r^  r�   r    r©   )r  r  rt  rD  s   ``` r”   r  r  ‚  s4   øøø€ ðð ð ð ð ð ð ð ð €Nr–   ÚINNER_FN_TYc                  ó4   ‡ — e Zd ZU ded<   dˆ fd„Zdd„Zˆ xZS )ÚMultiOutputReductionr’   Úoutput_indexr!  r2  rµ  r  Ú	inner_fnsú#INNER_FN_TY | Sequence[INNER_FN_TY]rã  ro  rš  rh  rZ   r›  rœ  r^   c
           
     óÒ   •‡— t          ‰¦  «        r‰fŠt          ‰¦  «        dk    r	‰d         }
nd
ˆfd„}
t          ¦   «                              |||
|||||¬	¦  «         |	| _        d S )NrI   r   r   r{  Úreduction_idxr�   útuple[OpsValue, ...]c                ó@   •‡ ‡— t          ˆ ˆfd„‰D ¦   «         ¦  «        S )Nc              3  ó0   •K  — | ]} |‰‰¦  «        V — Œd S r�   r©   )rÔ   rÊ   r   r—  s     €€r”   rø   z@MultiOutputReduction.__init__.<locals>.loader.<locals>.<genexpr>²  s/   øè è € ÐHÐH¸˜R˜R  ]Ñ3Ô3ÐHÐHÐHÐHÐHÐHr–   ©r±   )r   r—  r”  s   ``€r”   rL  z-MultiOutputReduction.__init__.<locals>.loader¯  s-   øøø€ õ ÐHÐHÐHÐHÐH¸iÐHÑHÔHÑHÔHÐHr–   r³  )r   r{  r—  r{  r�   r˜  )ÚcallablerÙ   r   Ú__init__r“  )r¹  r!  rµ  r”  rã  rš  rh  r›  rœ  r“  rL  r¢  s      `       €r”   r�  zMultiOutputReduction.__init__›  sª   øø€ õ �IÑÔð 	%Ø"˜ˆIõ ˆy‰>Œ>˜QÒÐØ˜q”\ˆFˆFðIð Ið Ið Ið Ið Iõ
 	‰Œ×ÒØØØØØ-Ø)ØØ)ð 	ñ 		
ô 		
ð 		
ð )ˆÔÐÐr–   rC  r8  rD  rE  rF  r{  r¦  r§  r�   r   c           	     ó8  — t          j        | j        | j        | j        |                      ||¦  «        ¦  «        }t          |t          t          f¦  «        sJ t          |¦  «        ¦   «         ‚|| j
                 }t          j        |pd ||¦  «        |¦  «        S rH  )ru   r©  r   r›  rh  râ  r‘   r±   r°   r¾   r“  rª  )r¹  rC  rD  rF  r¦  r³   r1  s          r”   rª  z$MultiOutputReduction.store_reductionÀ  s�   € õ ”ØŒJØŒNØÔØ�MŠM˜$ Ñ/Ô/ñ	
ô 
ˆõ ˜&¥5­$ -Ñ0Ô0Ð>Ð>µ$°v±,´,Ñ>Ô>Ð0Ø�tÔ(Ô)ˆÝÔ" ;Ð#;°)¸W¸WÀT¹]¼]ÈEÑRÔRÐRr–   )r!  r2  rµ  r  r”  r•  rã  ro  rš  ro  rh  rZ   r›  r  rœ  r^   r“  r’   )
rC  r8  rD  rE  rF  r{  r¦  r§  r�   r   )r¥   r¦   r§   r¨   r�  rª  r‡  rˆ  s   @r”   r’  r’  ˜  sh   ø€ € € € € € ØÐÐÑð#)ð #)ð #)ð #)ð #)ð #)ðJSð Sð Sð Sð Sð Sð Sð Sr–   r’  c                  ó:   — e Zd ZdZeej        dfdd„¦   «         ZdS )ÚArgReductionzJMulti-output arg reduction that returns both the selected value and index.Nr!  r2  rµ  r  r›  râ  rá  rã  r{  rš  rh  rZ   rœ  r^   r¹  r  r�   úSequence[TensorBox]c
                ó4  ‡ ‡‡‡‡‡‡‡‡‡— ‰dv sJ ‚t           j        j                             t	          ‰¦  «        ¦  «        }
|
dk    rt          ‰› d�¦  «        ‚|
dk    rkdˆˆfd	„}dd
„}t                               ‰||t          ‰¦  «        ¬¦  «        t                               ‰t          j
        |t          ‰¦  «        ¬¦  «        fS t          |
t          ¦  «        r�t          |
¦  «        t          j        k     r€t	          ‰¦  «        dk    st!          ‰j        ¦  «        rYt$                               ‰‰‰‰¦  «        Šdˆfd„Št)          ˆˆˆfd„t+          |t          j
        f¦  «        D ¦   «         ¦  «        S t$                               ‰|‰‰‰‰‰|
|	¦	  «	        \  }}|dk    s
J d¦   «         ‚‰t.          j        k    r|Št)          ˆ ˆˆˆˆˆˆˆfd„t+          |t          j
        f¦  «        D ¦   «         ¦  «        }|D ]}|                     ¦   «          Œ|S )N)rq  rr  r   r&  rI   rÐ   r{  r�   rv   c                ór   •— d„ ‰D ¦   «         } ‰| |¦  «        }t          |t          ¦  «        r|d         S |S )Nc                ó0   — g | ]}t           j        j        ‘ŒS r©   r.  r  s     r”   r×   z9ArgReduction.create.<locals>.value_fn.<locals>.<listcomp>ì  s   € Ð"JÐ"JÐ"J°A¥5¤7¤<Ð"JÐ"JÐ"Jr–   r   ©r‘   r±   )rÐ   r0  r1  râ  rš  s      €€r”   r  z%ArgReduction.create.<locals>.value_fnë  sH   ø€ Ø"JÐ"JÐ9IÐ"JÑ"JÔ"J�Ø ˜ ¨Ñ8Ô8�Ý˜e¥UÑ+Ô+ð $Ø  œ8�OØ�r–   c                ó@   — t          j        dt          j        ¦  «        S r$  )ru   r9  r-  r  ©rÐ   s    r”   Úindex_fnz%ArgReduction.create.<locals>.index_fnò  s   € Ý”| A¥u¤{Ñ3Ô3Ð3r–   rR  r“  r’   c                óX   •—  ‰| ¦  «        }t          |t          ¦  «        sJ ‚||         S r�   r¥  )rÐ   r“  r�  Úunrolled_fns      €r”   Úprojectz$ArgReduction.create.<locals>.project	  s3   ø€ Ø$˜ UÑ+Ô+�Ý! &­%Ñ0Ô0Ð0Ð0Ð0Ø˜lÔ+Ð+r–   c           	   3  ó’   •K  — | ]A\  }}t                                ‰|t          ‰|¬ ¦  «        t          ‰¦  «        ¬¦  «        V — ŒBdS ))r“  rR  N)r=  r·  r   r°   )rÔ   r“  r   r!  r«  rã  s      €€€r”   rø   z&ArgReduction.create.<locals>.<genexpr>	  sq   øè è € ð ð ñ (�L %õ × Ò Ø!ØÝ$ W¸<ÐHÑHÔHÝ ™<œ<ð	 !ñ ô ðð ð ð ð ð r–   z.arg reductions do not support split reductionsc              3  ót   •K  — | ]2\  }}t                                 ‰‰|‰‰‰‰	‰
‰|¦	  «	        ¦  «        V — Œ3d S r�   r¶  )rÔ   r“  r   r  r!  râ  rã  rœ  rš  rh  r›  s      €€€€€€€€r”   rø   z&ArgReduction.create.<locals>.<genexpr>+	  sw   øè è € ð 
ð 
ñ $�˜eõ ×ÒØ�ØØØØØ$Ø"ØØ"Ø ñ
ô 
ñô ð
ð 
ð 
ð 
ð 
ð 
r–   ©rÐ   r{  r�   rv   )rÐ   r{  r“  r’   r�   rv   )rw   r"  r#  r<  rr   ÚAssertionErrorr=  r·  r°   r-  r  r‘   r!   r’   rJ   r=  rn   r¾   r™  r   r±   r  r  r^   r´  r*  )r  r!  rµ  r›  râ  rã  rš  rh  rœ  r¹  r¸  r  r¨  rE  rô  Úresultsr�  r«  rª  s   `` ``````        @@r”   r·  zArgReduction.createÕ  sá  øøøøøøøøøø€ ð Ð!KÐKÐKÐKÐKÝœ'Ô*×3Ò3µMÐBRÑ4SÔ4SÑTÔTˆØ˜aÒÐÝ Ø!ÐMÐMÐMñô ð ð ˜aÒÐðð ð ð ð ð ð ð4ð 4ð 4ð 4õ × Ò Ø!Ø#Ø%Ý ™<œ<ð	 !ñ ô õ × Ò Ø!Ýœ+Ø%Ý ™<œ<ð	 !ñ ô ðð õ  �­Ñ0Ô0ð	å�OÑ$Ô$¥vÔ'IÒIÐIÝ˜vÑ&Ô&¨!Ò+Ð+­v°f´kÑ/BÔ/BÐ+å#×8Ò8ØÐ*¨N¸Iñô ˆKð,ð ,ð ,ð ,ð ,ð ,õ
 ð ð ð ð ð ð õ ,5°iÅÄÐ5MÑ+NÔ+Nðñ ô ñ ô ð õ  ×*Ò*ØØØØØØØØØñ

ô 

‰ˆˆeð ˜ŠzˆzˆzÐK‰zŒzˆzØ�]Ô2Ò2Ð2Ø!ˆNåð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
õ (1°)½U¼[Ð1IÑ'JÔ'Jð
ñ 
ô 
ñ 
ô 
ˆð  ð 	ð 	ˆFØ�NŠNÑÔÐÐØˆr–   )r!  r2  rµ  r  r›  r  râ  rá  rã  r{  rš  r{  rh  rZ   rœ  r^   r¹  r  r�   r¡  )r¥   r¦   r§   r¯  r3  r^   r´  r·  r©   r–   r”   r   r   Ò  sO   € € € € € ØTÐTàð )6Ô(=Ø$(ðgð gð gð gñ „[ðgð gð gr–   r   c                  ó~   — e Zd ZdZeej        dfdd„¦   «         Zeej        dfdd„¦   «         Ze	 ddd„¦   «         Z	dS )ÚOnlineSoftmaxReductionzAMulti-output reduction that computes softmax max/sum in one pass.Nr!  r2  rµ  r  r›  râ  rá  rã  r{  rš  Ú
num_outputr’   rœ  r^   r¹  r  r�   r¡  c
           	     ó¢   ‡‡‡‡‡‡‡— t          ˆˆˆˆˆˆˆfd„t          |¦  «        D ¦   «         ¦  «        }
|
D ]}|                     ¦   «          Œ|
S )Nc              3  óv   •K  — | ]3}t                                t          ‰‰‰‰‰d ‰‰|¦	  «	        ¦  «        V — Œ4dS )rL  N)rˆ   r·  r’  )	rÔ   Ú
output_idxr!  rµ  râ  rã  rœ  rš  r›  s	     €€€€€€€r”   rø   z:OnlineSoftmaxReduction._create_no_split.<locals>.<genexpr>P	  sq   øè è € ð 
ð 
ð õ ×ÒÝ$ØØØØØ$Ø+ØØ"Øñ
ô 
ñô ð
ð 
ð 
ð 
ð 
ð 
r–   )r±   rÚ   r*  )r  r!  rµ  r›  râ  rã  rš  r³  rœ  r¹  r°  r0  s    `````` `   r”   Ú_create_no_splitz'OnlineSoftmaxReduction._create_no_splitC	  s�   øøøøøøø€ õ ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
õ $ JÑ/Ô/ð
ñ 
ô 
ñ 
ô 
ˆð  ð 	ð 	ˆAØ�IŠI‰KŒKˆKˆKØˆr–   c
                óV  — t           j        j                             t	          |¦  «        ¦  «        }
t
                               ||||||d|
|	¬¦	  «	        \  }}|t          j        k    r|}|dk    r|  	                    ||||||||||	¦
  «
        S |  
                    |||||||||	¦	  «	        S )NrL  )rh  r¸  r¹  rI   )rw   r"  r#  r<  rr   r™  r  r^   r´  r?  r·  )r  r!  rµ  r›  râ  rã  rš  r³  rœ  r¹  r¸  rE  rô  s                r”   r·  zOnlineSoftmaxReduction.created	  sç   € õ œ'Ô*×3Ò3µMÐBRÑ4SÔ4SÑTÔTˆÝ×*Ò*ØØØØØØØ2Ø+Ø!ð +ñ 

ô 

‰ˆˆeð �]Ô2Ò2Ð2Ø!ˆNØ�1Š9ˆ9Ø×(Ò(ØØØØØØ ØØØØñô ð ð ×#Ò#ØØØØØØØØØñ

ô 

ð 
	
r–   rô  rƒ   c           
     ó.  ‡‡‡‡‡‡‡— t          |¦  «        Št          ‰|dz
  z   |¦  «        Š|                      ‰|
¦  «        }t                               |‰g|¦  «        Št
          j        j                             t          j
        t          ‰|¦  «        d¦  «        ¦  «         Šdˆˆˆˆˆˆfd„}|t          j        t          j        fvr|nt          j        }|                      ||‰|g |¢|‘‰g||	¦  «        }|D ]}|                     ¦   «          Œt%          d	„ |D ¦   «         ¦  «        Šdˆfd„}t
          j        j                             t          |¦  «        ¦  «        }|                      |||	¦  «        }	|                      ||||||g||	¦  «        S )NrI   r   rÐ   r§  r0  r�   rv  c           	     ó®  •‡‡— |\  }| �^ Š}‰	|z  |z   Šdˆˆ
ˆˆfd„}t          j        d‰¦  «        }‰r–t          ‰¦  «        }t          j        t          j        ‰|¦  «        t          j        ‰|¦  «        ¦  «        }t          j        ||t          d¦  «        ¦  «        t          j        ||t          j        d‰¦  «        ¦  «        fS  |¦   «         |fS )Nr�   rv   c                 ó0   •—  ‰‰ ‰‰ g¦  «        ¦  «        S r�   r©   )rÛ  râ  r`  rÛ   s   €€€€r”   ra  zJOnlineSoftmaxReduction.create_multilayer.<locals>.wrapper_fn.<locals>.body¹	  s!   ø€ Ø�x 	¨7¨7°G°9Ñ+=Ô+=Ñ>Ô>Ð>r–   rI   rI  r   rb  )ru   r9  rh   rx  r  rc  r:  r}  )rÐ   r0  rd  ra  rO  re  r‚  rÛ  r`  r[  râ  rf  r¸  rÛ   r›  s          @@€€€€€€r”   rg  z<OnlineSoftmaxReduction.create_multilayer.<locals>.wrapper_fn²	  sþ   øøø€ ð "1Ñˆ_Ø*/Ñ'ˆY˜Ø  ?Ñ2°_ÑDˆGð?ð ?ð ?ð ?ð ?ð ?ð ?ð ?ð ?õ ”,˜q )Ñ,Ô,ˆCØð #Ý-¨oÑ>Ô>�Ý”vÝ”N 7¨KÑ8Ô8Ý”N ?°KÑ@Ô@ñô �õ
 ”J˜t T­5°©=¬=Ñ9Ô9Ý”I˜d C­¬°a¸Ñ)CÔ)CÑDÔDðð ð
 �t‘v”v˜s�{Ð"r–   c              3  ó>   K  — | ]}|                      ¦   «         V — Œd S r�   )r>  r  s     r”   rø   z;OnlineSoftmaxReduction.create_multilayer.<locals>.<genexpr>Ü	  s*   è è € Ð$LÐ$L¸ Q§]¢]¡_¤_Ð$LÐ$LÐ$LÐ$LÐ$LÐ$Lr–   r^  r˜  c                ó@   •‡ ‡— t          ˆ ˆfd„‰D ¦   «         ¦  «        S )Nc              3  ó6   •K  — | ]} |g ‰¢‰¢¦  «        V — Œd S r�   r©   )rÔ   rL  rÐ   r0  s     €€r”   rø   zTOnlineSoftmaxReduction.create_multilayer.<locals>.intermediate_fn.<locals>.<genexpr>á	  sI   øè è € ð ð Ø7=��Ð1˜Ð1 Ð1Ñ2Ô2ðð ð ð ð ð r–   r›  )rÐ   r0  Úintermediate_loaderss   ``€r”   r}  zAOnlineSoftmaxReduction.create_multilayer.<locals>.intermediate_fnÞ	  sD   øøø€ õ ð ð ð ð ð ØAUðñ ô ñ ô ð r–   )rÐ   r§  r0  r§  r�   rv  )rÐ   r^  r0  r^  r�   r˜  )rr   rC   rZ  rh  ri  rw   r"  r#  r&  r·   rQ  rF   r-  r~  r  r:  r·  r*  r±   r$  rX  )r  r!  rµ  r›  râ  rã  rš  r³  rô  rœ  r¹  rj  rg  r€  ÚintermediatesrÕ   r}  rÀ  r[  r¿  rf  r¸  rÛ   s      ``             @@@@@r”   r?  z(OnlineSoftmaxReduction.create_multilayer˜	  s  øøøøøøø€ õ (Ð(8Ñ9Ô9ˆÝ˜o°¸±Ñ;¸UÑCÔCˆ
Ø×>Ò>Ø˜Zñ
ô 
ˆõ ×.Ò.Ø˜Ð/°ñ
ô 
ˆõ œÔ(×>Ò>ÝŒH•S˜¨%Ñ0Ô0°!Ñ4Ô4ñ
ô 
ð 
ˆ	ð	#ð 	#ð 	#ð 	#ð 	#ð 	#ð 	#ð 	#ð 	#ð 	#ð 	#ð4 ¥¤µ´Ð ?Ð?Ð?ð ˆIå”ð 	ð
 ×,Ò,ØØØØØˆfÐ�eÐØˆLØØñ	
ô 	
ˆð ð 	ð 	ˆAØ�IŠI‰KŒKˆKˆKå$Ð$LÐ$L¸mÐ$LÑ$LÔ$LÑLÔLÐð	ð 	ð 	ð 	ð 	ð 	õ ”WÔ%×7Ò7½ÀfÑ8MÔ8MÑNÔNˆ
Ø×9Ò9Ø�:˜~ñ
ô 
ˆð ×#Ò#ØØØØØØˆGØØñ	
ô 	
ð 		
r–   )r!  r2  rµ  r  r›  r  râ  rá  rã  r{  rš  r{  r³  r’   rœ  r^   r¹  r  r�   r¡  r�   )r!  r2  rµ  r  r›  r  râ  rá  rã  r{  rš  r{  r³  r’   rô  rƒ   rœ  r^   r¹  r  r�   r¡  )
r¥   r¦   r§   r¯  r3  r^   r´  r·  r·  r?  r©   r–   r”   r²  r²  @	  s«   € € € € € ØKÐKàð )6Ô(=Ø$(ðð ð ð ñ „[ðð@ ð )6Ô(=Ø$(ð1
ð 1
ð 1
ð 1
ñ „[ð1
ðf ð %)ðZ
ð Z
ð Z
ð Z
ñ „[ðZ
ð Z
ð Z
r–   r²  c                  ód   — e Zd Zeej        fdd„¦   «         Zedd„¦   «         Zedd„¦   «         Z	dS )ÚWelfordReductionr!  r2  r   r  r”  úSequence[Callable[..., Any]]rã  rx  rš  rh  rZ   rœ  r^   r�   r¡  c           
     ó   ‡‡‡‡‡‡‡‡— ‰dv sJ ‚t           j        j        r
J d¦   «         ‚t          j        j                             t          ‰¦  «        ¦  «        }dˆˆˆfd„}	|dk    r& |	d¦  «        }
 |	d¦  «        } |	d¦  «        }|
||fS |d	k    rPdˆˆˆˆfd„Š‰dk    r& ‰‰d         ¦  «         |	d¦  «         |	d	¦  «        fS t          ˆfd„‰D ¦   «         ¦  «        S t           
                    ‰‰‰‰d         ‰‰‰|¬¦  «        \  }}‰t          j        k    r|Š|d	k    r|                      ‰‰‰‰‰‰|‰¦  «        S ˆˆˆˆˆˆˆfd„t          d¦  «        D ¦   «         }|D ]}|                     ¦   «          Œ|S )N)rK  rˆ  zGwelford reduction usage is explicitly disabled, please check you configr"  r’   r�   rˆ   c                ój   •‡ — dˆˆ fd„}t                                ‰‰|t          ‰¦  «        ¬¦  «        S )Nr   r{  r�   rv   c                ó.   •— t          j        ‰‰¦  «        S r�   r(  )r   r   r"  s    €€r”   râ  z8WelfordReduction.create.<locals>.const.<locals>.inner_fn

  s   ø€ Ý”|ØØñô ð r–   rR  ©r   r{  r�   rv   ©r=  r·  r°   )r"  râ  r!  r   rã  s   ` €€€r”   Úconstz&WelfordReduction.create.<locals>.const	
  sX   øø€ ðð ð ð ð ð ð õ ×#Ò#ØØØ!Ý˜F‘|”|ð	 $ñ ô ð r–   r   rI   rL  rl  c                ój   •‡ — dˆ ˆfd„}t                                ‰‰|t          ‰¦  «        ¬¦  «        S )Nr   r{  r�   rv   c                ó4   •— d„ ‰D ¦   «         } ‰| |¦  «        S )Nc                ó0   — g | ]}t           j        j        ‘ŒS r©   r.  r  s     r”   r×   zKWelfordReduction.create.<locals>.copy.<locals>.inner_fn.<locals>.<listcomp>#
  r/  r–   r©   )r   r0  rL  rš  s     €€r”   râ  z7WelfordReduction.create.<locals>.copy.<locals>.inner_fn"
  s)   ø€ Ø&NÐ&NÐ=MÐ&NÑ&NÔ&N�OØ!˜6 # Ñ7Ô7Ð7r–   rR  rÇ  rÈ  )rL  râ  r!  r   rã  rš  s   ` €€€€r”   Úcopyz%WelfordReduction.create.<locals>.copy
  sX   øø€ ð8ð 8ð 8ð 8ð 8ð 8ð 8õ !×'Ò'Ø!ØØ%Ý ™<œ<ð	 (ñ ô ð r–   rK  c              3  ó.   •K  — | ]} ‰|¦  «        V — Œd S r�   r©   )rÔ   rÊ   rÍ  s     €r”   rø   z*WelfordReduction.create.<locals>.<genexpr>0
  s+   øè è € Ð:Ð:¨"˜T˜T "™XœXÐ:Ð:Ð:Ð:Ð:Ð:r–   )rh  r¸  c                ón   •— g | ]1}t                                t          ‰‰‰‰‰‰‰‰|¦	  «	        ¦  «        ‘Œ2S r©   )rˆ   r·  rÂ  )	rÔ   r¶  r!  r   r”  rã  rœ  rš  rh  s	     €€€€€€€r”   r×   z+WelfordReduction.create.<locals>.<listcomp>_
  sc   ø€ ð 
ð 
ð 
ð õ ×ÒÝ ØØØØØ$Ø"ØØ"Øñ
ô 
ñô ð
ð 
ð 
r–   rì   )r"  r’   r�   rˆ   )rL  rl  r�   rˆ   )rJ   ÚmtiaÚdisable_welford_reductionrw   r"  r#  r<  rr   r±   r™  r  r^   r´  r?  rÚ   r*  )r  r!  r   r”  rã  rš  rh  rœ  r¸  rÉ  ÚmeanÚm2ÚweightrE  rô  r°  r0  rÍ  s    ```````         @r”   r·  zWelfordReduction.create÷	  s]  øøøøøøøø€ ð Ð!FÐFÐFÐFÐFÝ”;Ô8ð 	
ð 	
ØUñ	
ô 	
Ð8õ œ'Ô*×3Ò3µMÐBRÑ4SÔ4SÑTÔTˆð	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð ˜aÒÐØ�5˜‘8”8ˆDØ��q‘”ˆBØ�U˜1‘X”XˆFØ˜˜VÐ#Ð#à˜aÒÐðð ð ð ð ð ð ð ð ð Ð!1Ò1Ð1Ø�t˜I aœLÑ)Ô)¨5¨5°©8¬8°U°U¸1±X´XÐ=Ð=åÐ:Ð:Ð:Ð:°	Ð:Ñ:Ô:Ñ:Ô:Ð:õ&  ×*Ò*ØØØØ�aŒLØØØ)Ø+ð +ñ 	
ô 	
‰ˆˆeð �]Ô2Ò2Ð2Ø!ˆNØ�1Š9ˆ9à×(Ò(ØØØØØ ØØØñ	ô 	ð 	ð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
õ $ A™hœhð
ñ 
ô 
ˆð  ð 	ð 	ˆAØ�IŠI‰KŒKˆKˆKØˆr–   rÃ   rG  c                ó   — dS )N)r   r   r   r©   rR  s     r”   rS  zWelfordReduction.default_values
  s	   € ð ˆyr–   rô  rƒ   c	                óL  ‡ ‡‡‡‡‡‡— t          ‰¦  «        Št          j        j                             t          j        t          ‰‰¦  «        d¦  «        ¦  «         }	|	rP|dk    rJdˆfd
„}
‰                      |‰|d         t          |
d¬¦  «        t          |
d¬¦  «        f|‰d‰|¬¦  «        S t          ‰‰dz
  z   ‰¦  «        Št                               |‰t          ˆˆ ˆˆˆfd„|D ¦   «         ¦  «        g |¢‰‘‰g||¦  «        }|D ]}|                     ¦   «          Œdd„Št          j        j                             t          |¦  «        ¦  «        }‰                      ‰||¦  «        }t                               |‰t          ˆfd„|D ¦   «         ¦  «        |‰gd|¦  «        S )rz  r   rˆ  r   r{  r—  r1  r’   r�   rv   c                ó.   •— t          j        |‰¦  «        S r�   r(  )r   r—  r1  r   s      €r”   r9  z4WelfordReduction.create_multilayer.<locals>.constant’
  s   ø€ õ ”| E¨5Ñ1Ô1Ð1r–   r5  rI   )r!  r   r”  rã  rš  rh  rô  rœ  c           	   3  óN   •K  — | ]}‰                      |‰‰‰‰d ¬¦  «        V — Œ dS )r   ©r\  N)rk  )rÔ   rL  r[  r  r¸  rš  rô  s     €€€€€r”   rø   z5WelfordReduction.create_multilayer.<locals>.<genexpr>ª
  s`   øè è € ð 
ð 
ð ð ×+Ò+ØØ$Ø#ØØØð ,ñ ô ð
ð 
ð 
ð 
ð 
ð 
r–   rÐ   r0  rL  r;  c                ó    —  |g | ¢|¢¦  «        S r�   r©   )rÐ   r0  rL  s      r”   Úintermediate_loader_fnzBWelfordReduction.create_multilayer.<locals>.intermediate_loader_fn½
  s   € ð
 �6Ð4˜EÐ4 OÐ4Ñ5Ô5Ð5r–   c              3  ó^   •K  — | ]'}t          ‰|                     ¦   «         ¬ ¦  «        V — Œ(dS ))rL  N)r   r>  )rÔ   rÕ   rÛ  s     €r”   rø   z5WelfordReduction.create_multilayer.<locals>.<genexpr>Í
  sM   øè è € ð ð àõ Ð.°q·}²}±´ÐGÑGÔGðð ð ð ð ð r–   )r   r{  r—  r{  r1  r’   r�   rv   )rÐ   r{  r0  r{  rL  r;  r�   rv   )rr   rw   r"  r#  r&  r·   rQ  rF   r?  r   rC   rÂ  r·  r±   r*  r$  rX  )r  r!  r   r”  rã  rš  rh  rô  rœ  rf  r9  rÀ  rÕ   rÀ  r[  rÛ  r¸  s   ` `  ` `      @@@r”   r?  z"WelfordReduction.create_multilayery
  sS  øøøøøøø€ õ  (Ð(8Ñ9Ô9ˆÝœÔ(×>Ò>ÝŒH•S˜¨%Ñ0Ô0°!Ñ4Ô4ñ
ô 
ð 
ˆ	ð ð 	˜Ð+<Ò<Ð<ð2ð 2ð 2ð 2ð 2ð 2ð
 ×(Ò(ØØà˜a”LÝ˜H¨AÐ.Ñ.Ô.Ý˜H¨AÐ.Ñ.Ô.ðð
 Ø!1Ø0ØØ-ð )ñ ô ð õ ˜o°¸±Ñ;¸UÑCÔCˆ
Ý(×/Ò/ØØÝð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð (ð
ñ 
ô 
ñ 
ô 
ð ˆfÐ�eÐØˆLØØñ#
ô 
ˆð& ð 	ð 	ˆAØ�IŠI‰KŒKˆKˆKð	6ð 	6ð 	6ð 	6õ ”WÔ%×7Ò7½ÀfÑ8MÔ8MÑNÔNˆ
Ø×9Ò9Ø�:˜~ñ
ô 
ˆõ  ×&Ò&ØØÝð ð ð ð à&ðñ ô ñ ô ð ØˆGàØñ
ô 
ð 	
r–   N)r!  r2  r   r  r”  rÃ  rã  rx  rš  rx  rh  rZ   rœ  r^   r�   r¡  r†  )r!  r2  r   r  r”  rÃ  rã  rx  rš  rx  rh  rZ   rô  rƒ   rœ  r^   r�   r¡  )
r¥   r¦   r§   r3  r^   r´  r·  r²  rS  r?  r©   r–   r”   rÂ  rÂ  ö	  s‹   € € € € € Øð )6Ô(=ðyð yð yð yñ „[ðyðv ðð ð ñ „\ðð
 ð\
ð \
ð \
ñ „[ð\
ð \
ð \
r–   rÂ  c                  ó(  ‡ — e Zd ZU ded<   ded<   ded<   ded<   ded	<   d
ed<   ded<   ded<    ed ¦  «        d=d>ˆ fd„¦   «         Zd?ˆ fd„Zd@d!„ZdAd"„ZdBd#„Z	dBd$„Z
dBd%„ZdCd&„ZdDd(„Zd=d>d)„Zeej        fd*d+œdEd3„¦   «         ZedFd<„¦   «         Zˆ xZS )GÚScanrx  Úscan_rangesr  ú=Callable[[tuple[Any, ...], tuple[Any, ...]], tuple[Any, ...]]r  zFCallable[[Sequence[_IntLike], Sequence[_IntLike]], Sequence[_IntLike]]rÛ   r^   rœ  r’   r“  útuple[torch.dtype, ...]Údtypesútuple[Callable[..., Any], ...]r”  Fr�  r    r�   r   c                óè   •‡— t          ¦   «                              ‰¦  «         t          ¦   «         j        ˆfd„| j        D ¦   «         Ž z   t          ¦   «         j        ˆfd„| j        D ¦   «         Ž z  S )Nc              3  ó8   •K  — | ]}t          |‰¦  «        V — Œd S r�   r(   ræ  s     €r”   rø   z,Scan.get_free_symbol_uses.<locals>.<genexpr>ï
  ó.   øè è € ÐOÐO¸Õ" 1 mÑ4Ô4ÐOÐOÐOÐOÐOÐOr–   c              3  ó8   •K  — | ]}t          |‰¦  «        V — Œd S r�   r(   ræ  s     €r”   rø   z,Scan.get_free_symbol_uses.<locals>.<genexpr>ò
  ó.   øè è € ÐHÐH¸Õ" 1 mÑ4Ô4ÐHÐHÐHÐHÐHÐHr–   )r   rx  r@   rè  rß  r  r¡  s    `€r”   rx  zScan.get_free_symbol_usesç
  s�   øø€ õ ‰GŒG×(Ò(¨Ñ7Ô7Ø �j‰lŒlÔ ØOÐOÐOÐO¸dÔ>NÐOÑOÔOðñð !�j‰lŒlÔ ØHÐHÐHÐH¸d¼iÐHÑHÔHðñ	ð	
r–   r¬   c                óÊ   •— t          | j        ¦  «        t          | j        ¦  «        z   t          | j        ¦  «        k    sJ ‚t	          ¦   «                              ¦   «          d S r�   )rÙ   rã  rß  r  r   rÂ  ©r¹  r¢  s    €r”   rÂ  zScan.__post_init__ö
  óR   ø€ Ý�4”;ÑÔ¥# dÔ&6Ñ"7Ô"7Ñ7½3¸t¼y¹>¼>ÒIÐIÐIÐIÝ‰Œ×ÒÑÔÐÐÐr–   rC  r8  rD  ú%Callable[[Sequence[_IntLike]], Never]rF  r{  Ú	scan_varsr§  r   c                ó  ‡— |                       ||¦  «        Št          ˆfd„| j        D ¦   «         ¦  «        }t          j        | j        | j        |¦  «        }t          j        |pd |‰¦  «        || j                 ¦  «        S )Nc              3  ó.   •K  — | ]} |‰¦  «        V — Œd S r�   r©   ©rÔ   râ  r   s     €r”   rø   z'Scan.store_reduction.<locals>.<genexpr>  ó+   øè è € ÐDÐD¨�x�x ‘}”}ÐDÐDÐDÐDÐDÐDr–   rI  )	rÛ   r±   r”  ru   r¼  râ  r  rJ  r“  )r¹  rC  rD  rF  rí  r³   r�  r   s          @r”   rª  zScan.store_reductionú
  sƒ   ø€ ð �lŠl˜4 Ñ+Ô+ˆÝÐDÐDÐDÐD°T´^ÐDÑDÔDÑDÔDˆÝ”˜$œ+ t¤¸Ñ?Ô?ˆÝŒyØÐ$˜9 g g¨c¡l¤l°F¸4Ô;LÔ4Mñ
ô 
ð 	
r–   c                ó   — dS )NÚcustomr©   r¸  s    r”   rz  zScan.get_reduction_type  s   € àˆxr–   c                ó   — | j         S r�   )rß  r¸  s    r”   r}  zScan.get_reduction_size  rÓ  r–   c                ó   — | j         S r�   ©r  r¸  s    r”   r%  zScan.get_size  ó
   € ØŒyÐr–   c                ó   — | j         S r�   rõ  r¸  s    r”   rÿ  zScan.get_pointwise_size  rû  r–   c                óT   — t          | j        ¦  «        t          | j        ¦  «        z   S r�   )rÙ   rã  rß  r¸  s    r”   r¬  zScan.index_length  ó"   € Ý�4”;ÑÔ¥# dÔ&6Ñ"7Ô"7Ñ7Ð7r–   r  c                ó²   — |                       | j        ¦  «        }|                       | j        t          j        ¦  «        }|                      ||¦  «        }|fS r�   )r  rã  rß  rH   r¯  rÛ   ©r¹  rÐ   r°  r   s       r”   r  zScan.inner_fn_args  óG   € Ø—’˜DœKÑ(Ô(ˆØ—’˜TÔ-­t¬}Ñ=Ô=ˆØ�lŠl˜5 &Ñ)Ô)ˆØˆvˆr–   c                óÚ   — |                       | j        ¦  «        }|                       | j        t          j        ¦  «        }|                      ||¦  «        }t          | j        ||¬¦  «        S r"  )r  rã  rß  rH   r¯  rÛ   rR   râ  ©r¹  r�  rÐ   r°  r   s        r”   ré  zScan.inner_fn_free_symbols  óW   € Ø—’˜DœKÑ(Ô(ˆØ—’˜TÔ-­t¬}Ñ=Ô=ˆØ�lŠl˜5 &Ñ)Ô)ˆÝ# D¤M°3ÀmÐTÑTÔTÐTr–   T)Úcan_fallback_to_atenr!  r2  ú+tuple[Callable[[Sequence[Expr]], Any], ...]Úaxisr  rÇ   úSequence[TensorBox | None]c               ó–  ‡‡‡‡‡‡‡‡	‡‡‡‡— g ‰d ‰…         ¢‰‰dz   d …         ¢Š‰‰         gŠt           j                             ‰t          j        ¦  «        sd gt          ‰¦  «        z  S t          ‰¦  «        dk    r=t           j                             ‰t          j        ¦  «        sd gt          ‰¦  «        z  S t           j        j        }
|
                     t          ‰¦  «        ¦  «        }t          ‰¦  «        t          ‰¦  «        k    sJ ‚|
 
                    t          j        |d¦  «        ¦  «        r+ˆˆˆˆfd„t          t          ‰¦  «        ¦  «        D ¦   «         S |                      ‰‰d         ‰d         ‰‰‰‰|¬¦  «        \  Š}t          Š|dk    rYt           j        j        d u pt&          o
t(          dk    ot          ‰¦  «        dk    }|s|rd gt          ‰¦  «        z  S d}nt*          Šdˆˆˆfd„Šˆˆˆˆˆ	ˆˆˆˆˆˆfd„t          t          ‰¦  «        ¦  «        D ¦   «         }|D ]}|                     ¦   «          Œ|S )NrI   c                ód   •— g | ],}t                                ‰‰|         ‰|         ‰¬ ¦  «        ‘Œ-S ©rR  ©r=  r·  ©rÔ   r“  r!  râ  r”  r  s     €€€€r”   r×   zScan.create.<locals>.<listcomp>E  óV   ø€ ð ð ð ð !õ × Ò Ø!Ø  Ô.Ø& |Ô4Øð	 !ñ ô ðð ð r–   r   )r!  r   râ  r  Úpointwise_rangesrß  r  Ú
scan_numelz3.3.0rÐ   r{  Ú
scan_indexr�   rŒ  c                ó¼   •— t          |¦  «        t          ‰¦  «        k    sJ ‚t          | ¦  «        t          ‰¦  «        k    sJ ‚g | d ‰…         ¢|¢| ‰d …         ¢S r�   ©rÙ   )rÐ   r  r  r  rß  s     €€€r”   rÛ   zScan.create.<locals>.reindexh  óg   ø€ Ý�z‘?”?¥c¨+Ñ&6Ô&6Ò6Ð6Ð6Ð6Ý�u‘:”:¥Ð%5Ñ!6Ô!6Ò6Ð6Ð6Ð6Ø>�U˜5˜D˜5”\Ð> JÐ>°°t°u°u´Ð>Ð>r–   c                ó‚   •— g | ];}t                                 ‰d‰‰|         ‰‰|         ‰‰‰‰
‰‰	‰|d œ‰¤Ž¦  «        ‘Œ<S ))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ß  Ú	scan_typer  s     €€€€€€€€€€€r”   r×   zScan.create.<locals>.<listcomp>m  sŒ   ø€ ð 
ð 
ð 
ð$ õ# ×ÒØ�	ð Ø!Ø  Ô.Ø!Ø& |Ô4Ø'ØØ+Ø +Ø)Ø#Ø#1Ø!-ðð ð ðð ñô ð
ð 
ð 
r–   )rÐ   r{  r  r{  r�   rŒ  )rw   r"  ræ  rL   ÚSCANrÙ   ÚTUPLE_REDUCTIONr#  r<  rr   r&  r·   rW  rÚ   r  rÞ  r-  ÚversionÚhipÚ
has_tritonÚtriton_versionÚ	SplitScanr*  )r  r!  râ  r”  r  r  r  rœ  r  rÇ   r#  r  r  Úsupports_splitr°  r�  r  rÛ   rß  r  s    ``````` `      @@@@r”   r·  zScan.create$  sÕ  øøøøøøøøøøøø€ ð =˜T % 4 %œ[Ð<¨4°°q±°
°
Ô+;Ð<ÐØ˜D”z�lˆåŒw×"Ò" 6­>Ô+>Ñ?Ô?ð 	(Ø�6�C ™KœKÑ'Ð'åˆv‰;Œ;˜Š?ˆ?¥1¤7×#6Ò#6Ø•NÔ2ñ$
ô $
ˆ?ð �6�C ™KœKÑ'Ð'å”7Ô#ˆØ×&Ò&¥}°[Ñ'AÔ'AÑBÔBˆ
å�6‰{Œ{�c )™nœnÒ,Ð,Ð,Ð,ð ×)Ò)­%¬(°:¸qÑ*AÔ*AÑBÔBð 		ðð ð ð ð ð ð õ %*­#¨f©+¬+Ñ$6Ô$6ðñ ô ð ð &)§^¢^ØØ˜”)Ø˜q”\ØØ-Ø#Ø!Ø!ð &4ñ 	&
ô 	&
Ñ"ˆ˜
õ ˆ	Ø˜Š>ˆ>õ ”Ô! TÐ)ÐW­jÐ.V½^ÈwÒ=Vð%õ �v‘;”; !Ò#ð ð "ð &Ø'ð #à ˜6¥C¨¡K¤KÑ/Ð/à!"�J�Jå%�	ð	?ð 	?ð 	?ð 	?ð 	?ð 	?ð 	?ð 	?ð

ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
õ$ !&¥c¨&¡k¤kÑ 2Ô 2ð%
ñ 
ô 
ˆð* ð 	ð 	ˆFØ�NŠNÑÔÐÐàˆr–   r   r  râ  r;  r  r  r    rº  c	           
     óX   ‡‡— d	ˆˆfd„}	t                                ||||	||d|¬¦  «        S )
Nr   r{  r—  r�   rv   c                óF   •—  ‰g | d ‰…         ¢|¢| ‰d …         ¢¦  «        S r�   r©   )r   r—  r  râ  s     €€r”   rg  z#Scan.num_splits.<locals>.wrapper_fn”  s3   ø€ Ø�8ÐF˜c % 4 %œjÐF¨=ÐF¸3¸t¸u¸u¼:ÐFÑGÔGÐGr–   r¼  )r!  rµ  r›  râ  rã  rš  rh  r¸  )r   r{  r—  r{  r�   rv   )r™  r  )
r  r!  r   râ  r  r  rß  r  r  rg  s
      ``     r”   r  zScan.num_splits‡  se   øø€ ð	Hð 	Hð 	Hð 	Hð 	Hð 	Hð 	Hõ ×#Ò#ØØØØØ#Ø(Ø!Ø&ð $ñ 	
ô 	
ð 		
r–   r¢  r1  r�  )
rC  r8  rD  rì  rF  r{  rí  r§  r�   r   r™  r¬  r©  r0  )r!  r2  râ  rá  r”  r  r  rx  r  r’   r  rà  rœ  r^   r  r    rÇ   r   r�   r  )r!  r2  r   r  râ  r;  r  r’   r  rx  rß  rx  r  rà  r  r    r�   rº  )r¥   r¦   r§   r¨   rb   rx  rÂ  rª  rz  r}  r%  rÿ  r¬  r  ré  r3  r^   r´  r·  r  r‡  rˆ  s   @r”   rÞ  rÞ  Ù
  sè  ø€ € € € € € àÐÐÑØÐÐÑØMÐMÐMÑMØSÐSÐSÑSØ!Ð!Ð!Ñ!ØÐÐÑà#Ð#Ð#Ñ#Ø-Ð-Ð-Ñ-ð Ð˜FÑ#Ô#ð
ð 
ð 
ð 
ð 
ð 
ñ $Ô#ð
ð ð  ð  ð  ð  ð  ð
ð 
ð 
ð 
ðð ð ð ð ð  ð  ð  ðð ð ð ðð ð ð ð8ð 8ð 8ð 8ðð ð ð ðUð Uð Uð Uð Uð ð )6Ô(=ð`ð &*ð`ð `ð `ð `ð `ñ „[ð`ðD ð
ð 
ð 
ñ „[ð
ð 
ð 
ð 
ð 
r–   rÞ  c                  ó   — e Zd ZdS )r  N)r¥   r¦   r§   r©   r–   r”   r  r  ¤  s   € € € € € à€Dr–   r  c                  ó  ‡ — e Zd ZU ded<   ded<   ded<   ded<   ded	<   d
ed<   ded<   ded<   ded<    ed ¦  «        d2d3ˆ fd„¦   «         Zd4ˆ fd„Zd5d „Zd6d!„Zd7d#„Z	d7d$„Z
d8d&„Zd9d'„Zd:d)„Zd2d3d*„Zeej        fd;d1„¦   «         Zˆ xZS )<ÚSortrx  Úsort_rangesr  z:Callable[[Sequence[Expr], Sequence[Expr]], Sequence[Expr]]rÛ   r^   rœ  r’   r“  rá  râ  rã  r”  r    ÚstableÚ
descendingFr�  r�   r   c                óè   •‡— t          ¦   «                              ‰¦  «         t          ¦   «         j        ˆfd„| j        D ¦   «         Ž z   t          ¦   «         j        ˆfd„| j        D ¦   «         Ž z  S )Nc              3  ó8   •K  — | ]}t          |‰¦  «        V — Œd S r�   r(   ræ  s     €r”   rø   z,Sort.get_free_symbol_uses.<locals>.<genexpr>¿  ræ  r–   c              3  ó8   •K  — | ]}t          |‰¦  «        V — Œd S r�   r(   ræ  s     €r”   rø   z,Sort.get_free_symbol_uses.<locals>.<genexpr>Â  rè  r–   )r   rx  r@   rè  r   r  r¡  s    `€r”   rx  zSort.get_free_symbol_usesº  s�   øø€ õ ‰GŒG×(Ò(¨Ñ7Ô7Ø �j‰lŒlÔ ØOÐOÐOÐO¸dÔ>NÐOÑOÔOðñð !�j‰lŒlÔ ØHÐHÐHÐH¸d¼iÐHÑHÔHðñ	ð	
r–   r¬   c                óÊ   •— t          | j        ¦  «        t          | j        ¦  «        z   t          | j        ¦  «        k    sJ ‚t	          ¦   «                              ¦   «          d S r�   )rÙ   rã  r   r  r   rÂ  rê  s    €r”   rÂ  zSort.__post_init__Æ  rë  r–   rC  r8  rD  r@  rF  r{  r¦  r   c                ó  ‡— |                       ||¦  «        Št          ˆfd„| j        D ¦   «         ¦  «        }t          j        | j        || j        | j        ¦  «        }t          j        |pd |‰¦  «        || j	                 ¦  «        S )Nc              3  ó.   •K  — | ]} |‰¦  «        V — Œd S r�   r©   rð  s     €r”   rø   z'Sort.store_reduction.<locals>.<genexpr>Ò  rñ  r–   rI  )
rÛ   r±   r”  ru   Úsortrâ  r!  r"  rJ  r“  )r¹  rC  rD  rF  r¦  r³   r�  r   s          @r”   rª  zSort.store_reductionÊ  s‡   ø€ ð �lŠl˜4 Ñ0Ô0ˆÝÐDÐDÐDÐD°T´^ÐDÑDÔDÑDÔDˆÝ”˜$œ+ v¨t¬{¸D¼OÑLÔLˆÝŒyØÐ$˜9 g g¨c¡l¤l°F¸4Ô;LÔ4Mñ
ô 
ð 	
r–   c                ó   — dS )Nr)  r©   r¸  s    r”   rz  zSort.get_reduction_typeØ  s   € Øˆvr–   ro  c                ó   — | j         S r�   )r   r¸  s    r”   r}  zSort.get_reduction_sizeÛ  rÓ  r–   c                ó   — | j         S r�   rö  r¸  s    r”   r%  zSort.get_sizeÞ  r÷  r–   r^  c                ó   — | j         S r�   rõ  r¸  s    r”   rÿ  zSort.get_pointwise_sizeá  rû  r–   c                óT   — t          | j        ¦  «        t          | j        ¦  «        z   S r�   )rÙ   rã  r   r¸  s    r”   r¬  zSort.index_lengthä  rú  r–   r­  c                ó²   — |                       | j        ¦  «        }|                       | j        t          j        ¦  «        }|                      ||¦  «        }|fS r�   )r  rã  r   rH   r¯  rÛ   rü  s       r”   r  zSort.inner_fn_argsç  rý  r–   c                óÚ   — |                       | j        ¦  «        }|                       | j        t          j        ¦  «        }|                      ||¦  «        }t          | j        ||¬¦  «        S r"  )r  rã  r   rH   r¯  rÛ   rR   râ  rÿ  s        r”   ré  zSort.inner_fn_free_symbolsí  r   r–   r!  r2  ú'tuple[Callable[[list[Expr]], Any], ...]r  rÇ   r  c	                ó¸  ‡‡‡‡‡‡‡‡‡	‡‡‡— g ‰d ‰…         ¢‰‰dz   d …         ¢Š‰‰         gŠt           j                             ‰t          j        ¦  «        sd gt          ‰¦  «        z  S t           j        j        }
|
                     t          ‰¦  «        ¦  «        }t          j
        j        rt          j
        j        }n;d}t          j
        j        o'|
                     t          j        ||¦  «        ¦  «        }|sd gt          ‰¦  «        z  S t          ‰¦  «        t          ‰¦  «        k    sJ ‚|
                     t          j        |d¦  «        ¦  «        r+ˆˆˆˆfd„t!          t          ‰¦  «        ¦  «        D ¦   «         S dˆˆˆfd	„Šˆˆˆˆˆ	ˆˆˆˆˆˆfd
„t!          t          ‰¦  «        ¦  «        D ¦   «         }|D ]}|                     ¦   «          Œ|S )NrI   rU  c                ód   •— g | ],}t                                ‰‰|         ‰|         ‰¬ ¦  «        ‘Œ-S r  r  r	  s     €€€€r”   r×   zSort.create.<locals>.<listcomp>  r
  r–   rÐ   r{  Ú
sort_indexr�   rŒ  c                ó¼   •— t          |¦  «        t          ‰¦  «        k    sJ ‚t          | ¦  «        t          ‰¦  «        k    sJ ‚g | d ‰…         ¢|¢| ‰d …         ¢S r�   r  )rÐ   r4  r  r  r   s     €€€r”   rÛ   zSort.create.<locals>.reindex'  r  r–   c                óŒ   •— g | ]@}t                                t          d‰‰|         ‰‰|         ‰‰
‰‰‰	‰|‰‰d œ‰¤Ž¦  «        ‘ŒAS ))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!  s     €€€€€€€€€€€r”   r×   zSort.create.<locals>.<listcomp>,  s�   ø€ ð 
ð 
ð 
ð& õ% ×ÒÝð Ø!Ø  Ô.Ø!Ø& |Ô4Ø'ØØ+Ø +Ø#Ø#1Ø!-Ø!Ø)ðð ð ðð ñô ð
ð 
ð 
r–   )rÐ   r{  r4  r{  r�   rŒ  )rw   r"  ræ  rL   ÚSORTrÙ   r#  r<  rr   rJ   rD  Údecompose_sort_opsÚpersistent_reductionsr&  r·   rW  rÚ   r*  )r  r!  râ  r”  r  r  r!  r"  rœ  rÇ   r#  Ú
sort_numelÚis_persistent_kernelÚ
max_rblockr°  r�  r  rÛ   r   s    `````````      @@@r”   r·  zSort.createó  sJ  øøøøøøøøøøøø€ ð =˜T % 4 %œ[Ð<¨4°°q±°
°
Ô+;Ð<ÐØ˜D”z�lˆåŒw×"Ò" 6­>Ô+>Ñ?Ô?ð 	(Ø�6�C ™KœKÑ'Ð'å”7Ô#ˆØ×&Ò&¥}°[Ñ'AÔ'AÑBÔBˆ
õ Œ=Ô+ð 	Ý#)¤=Ô#FÐ Ð àˆJå”Ô3ð UØ×2Ò2µ5´8¸JÈ
Ñ3SÔ3SÑTÔTð !ð $ð 	(à�6�C ™KœKÑ'Ð'å�6‰{Œ{�c )™nœnÒ,Ð,Ð,Ð,ð ×)Ò)­%¬(°:¸qÑ*AÔ*AÑBÔBð 		ðð ð ð ð ð ð õ %*­#¨f©+¬+Ñ$6Ô$6ðñ ô ð ð	?ð 	?ð 	?ð 	?ð 	?ð 	?ð 	?ð 	?ð

ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
õ& !&¥c¨&¡k¤kÑ 2Ô 2ð'
ñ 
ô 
ˆð, ð 	ð 	ˆFØ�NŠNÑÔÐÐàˆr–   r¢  r1  r�  )
rC  r8  rD  r@  rF  r{  r¦  r{  r�   r   r™  )r�   ro  r—  r©  r…  )r!  r2  râ  rá  r”  r1  r  rx  r  r’   r!  r    r"  r    rœ  r^   rÇ   r   r�   r  )r¥   r¦   r§   r¨   rb   rx  rÂ  rª  rz  r}  r%  rÿ  r¬  r  ré  r3  r^   r´  r·  r‡  rˆ  s   @r”   r  r  ©  sÅ  ø€ € € € € € ð ÐÐÑØÐÐÑØGÐGÐGÑGØ!Ð!Ð!Ñ!ØÐÐÑà#Ð#Ð#Ñ#Ø-Ð-Ð-Ñ-à€L€L�LØÐÐÑð Ð˜FÑ#Ô#ð	
ð 	
ð 	
ð 	
ð 	
ð 	
ñ $Ô#ð	
ð ð  ð  ð  ð  ð  ð
ð 
ð 
ð 
ðð ð ð ð ð  ð  ð  ðð ð ð ðð ð ð ð8ð 8ð 8ð 8ðð ð ð ðUð Uð Uð Uð Uð ð )6Ô(=ðQð Qð Qð Qñ „[ðQð Qð Qð Qð Qr–   r  c                óL   — 	 t          | d¬¦  «         dS # t          $ r Y dS w xY w)NF©ÚfreezeT)rr  r  r“   s    r”   r&  r&  H  sA   € ðÝ˜a¨Ð.Ñ.Ô.Ð.ØˆtøÝð ð ð Øˆuˆuðøøøs   ‚ •
#¢#c           
     ó˜  — 	 t          | d¬¦  «        \  }}|                     ¦   «         r}t          |t          ¦  «        sJ t	          |¦  «        ¦   «         ‚t          |j        |j        |j        | 	                    |j
        |j        |j        ¦  «        |j        |j        ¦  «        }|                     ¦   «         S # t          $ r Y dS w xY w©NFr>  )rr  Úshould_pad_stridesr‘   r(  r¾   rs  r!  r   r  Ú_pad_stridesr  rt  ru  Úis_contiguousr  ©r‹   Ú_bufferrq  s      r”   Ú is_contiguous_storage_and_layoutrG  P  sÑ   € ðÝ/°¸%Ð@Ñ@Ô@‰ˆ�ð ×$Ò$Ñ&Ô&ð 		Ý˜f¥nÑ5Ô5ÐCÐCµt¸F±|´|ÑCÔCÐ5Ý Ø”Ø”Ø”Ø×#Ò# F¤M°6´;ÀÄÑMÔMØ”ØÔ ñô ˆFð ×#Ò#Ñ%Ô%Ð%øÝð ð ð Øˆuˆuðøøøs   ‚B8B; Â;
C	ÃC	c                ó  — 	 t          | d¬¦  «        \  }}|                     ¦   «         sdS t          j        j                             |                     ¦   «         |j        t          |j	        ¦  «        z   ¦  «        S # t          $ r Y dS w xY wrA  )rr  rD  rw   r"  r#  rm  Ústorage_sizert  rr   r  r  rE  s      r”   Ú&is_dense_contiguous_storage_and_layoutrJ  d  s™   € ðÝ/°¸%Ð@Ñ@Ô@‰ˆ�Ø×#Ò#Ñ%Ô%ð 	Ø�5ÝŒwÔ×7Ò7Ø×ÒÑ!Ô! 6¤=µ=ÀÄÑ3MÔ3MÑ#Mñ
ô 
ð 	
øõ ð ð ð Øˆuˆuðøøøs   ‚(A= ¬AA= Á=
BÂ
Br?  Úwant_contiguousÚstride_orderúSequence[int | Integer] | Noner[  rf  útuple[StorageBox, Layout]c                óø  — t          | t          ¦  «        rt          | j        |||||¬¦  «        S t          | t          ¦  «        r8t          | j        |||||¬¦  «        \  }}| | j                             ¦   «         fS t          | t          ¦  «        r¬|r‡|r=|                      ¦   «          |                      ¦   «                              ¦   «         sJ ‚nH|�|  	                    ||¬¦  «         n.|�|  
                    ||¬¦  «         n|                      ¦   «          t	          | ¦  «        |                      ¦   «         fS t          | t          ¦  «        r"t          | j        |¬¦  «        \  }}|| j        fS t          ‚)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.
    ©r?  rK  rL  r[  rf  N©r[  r>  )r‘   rˆ   rr  rp  r–  r'  r—  rZ  rD  r^  ri  rØ  rv  rq  r  )	r‹   r?  rK  rL  r[  rf  r  rq  Úbuffers	            r”   rr  rr  p  sÁ  € õ �!•YÑÔð 
Ý$ØŒFØØ+Ø%Ø'Ø'ð
ñ 
ô 
ð 	
õ �!•ZÑ Ô ð 	&Ý)ØŒFØØ+Ø%Ø'Ø'ð
ñ 
ô 
‰	ˆˆ6ð �!”&×#Ò#Ñ%Ô%Ð%Ð%Ý�!•VÑÔð -Øð 	"Øð "Ø—’Ñ!Ô!Ð!Ø—|’|‘~”~×3Ò3Ñ5Ô5Ð5Ð5Ð5Ð5ØÐ)Ø×1Ò1Ø °ð 2ñ ô ð ð ð Ð*Ø×2Ò2Ø!°ð 3ñ ô ð ð ð —’Ñ!Ô!Ð!Ý˜!‰}Œ}˜aŸlšl™nœnÐ,Ð,Ý�!•_Ñ%Ô%ð  õ *ØŒFØð
ñ 
ô 
‰	ˆ�ð �q”xÐÐÝ
Ðr–   c                óx   — 	 t          | d¬¦  «        \  }}|                     |¦  «        S # t          $ r Y dS w xY wrA  )rr  Úis_stride_orderedr  )r‹   rL  rF  rq  s       r”   Ú"is_stride_order_storage_and_layoutrU  ¬  sS   € ðÝ/°¸%Ð@Ñ@Ô@‰ˆ�Ø×'Ò'¨Ñ5Ô5Ð5øÝð ð ð Øˆuˆuðøøøs   ‚(+ «
9¸9r¿   c                óÈ  — t          | t          t          f¦  «        rt          | j        ¦  «        S t          | t
          ¦  «        rb| j        }t          j        j	         
                    |j        t          |j        ¦  «        z  t          ¦  «         }t          | j        ¦  «        p|S t          | t          ¦  «        r%|                      ¦   «         t          j        j        v S dS r8  )r‘   rˆ   r–  Úis_unalignedrp  rv  rq  rw   r"  r#  Ústatically_known_multiple_ofrt  ri   r   rk   r—  r˜  Úunaligned_buffers)r¿   rq  Úhas_unaligned_layouts      r”   rW  rW  ¶  sÁ   € Ý�$�¥JÐ/Ñ0Ô0ð 'Ý˜DœIÑ&Ô&Ð&å�$�Ñ(Ô(ð ?Ø”ˆÝ#$¤7Ô#3×#PÒ#PØŒM�N¨6¬<Ñ8Ô8Ñ8½/ñ$
ô $
ð  
Ðõ ˜DœIÑ&Ô&Ð>Ð*>Ð>å�$�ÑÔð <Ø�}Š}‰Œ¥!¤'Ô";Ð;Ð;ð ˆ5r–   c                  óü   — e Zd ZU ded<    ed ¦  «        d3d4d„¦   «         Zd5d
„Zd6d„Zd7d„Ze	d8d„¦   «         Z
d9d„Zd:d„Zd;d„Zd<d„Zd=d„Zddœd>d!„Zd?d"„Zd@d$„ZdAd%„ZdBd'„Zd?d(„Zd?d)„ZdCd+„ZdDd-„ZdEd.„ZdFd1„Zd2S )Gr”  r‰   rp  Fr�  r    r�   r   c                ó6   — | j                              |¦  «        S r�   ©rp  rx  rw  s     r”   rx  zBaseView.get_free_symbol_usesÌ  s   € àŒy×-Ò-¨mÑ<Ô<Ð<r–   ú*Callable[[Sequence[Expr]], Sequence[Expr]]c                ó&   — t          d| › �¦  «        ‚)Nzmake_reindexer NYI on r¼  r¸  s    r”   Úmake_reindexerzBaseView.make_reindexerÐ  s   € Ý!Ð"A¸4Ð"AÐ"AÑBÔBÐBr–   r@  c                ór   ‡‡— | j                              ¦   «         Š|                      ¦   «         Šdˆˆfd„}|S )Nr   r{  r�   r    c                ó,   •—  ‰ ‰| ¦  «        ¦  «        S r�   r©   ©r   ÚinnerrÛ   s    €€r”   rD  z&BaseView.make_indexer.<locals>.indexer×  ó   ø€ Ø�5˜˜ ™œÑ&Ô&Ð&r–   )r   r{  r�   r    )rp  rB  r`  )r¹  rD  rd  rÛ   s     @@r”   rB  zBaseView.make_indexerÓ  sR   øø€ Ø”	×&Ò&Ñ(Ô(ˆØ×%Ò%Ñ'Ô'ˆð	'ð 	'ð 	'ð 	'ð 	'ð 	'ð 	'ð ˆr–   r;  c                ór   ‡‡— | j                              ¦   «         Š|                      ¦   «         Šdˆˆfd„}|S )Nr   r{  r�   rv   c                ó,   •—  ‰ ‰| ¦  «        ¦  «        S r�   r©   rc  s    €€r”   rL  z$BaseView.make_loader.<locals>.loaderà  re  r–   rÇ  )rp  r>  r`  )r¹  rL  rd  rÛ   s     @@r”   r>  zBaseView.make_loaderÜ  sR   øø€ Ø”	×%Ò%Ñ'Ô'ˆØ×%Ò%Ñ'Ô'ˆð	'ð 	'ð 	'ð 	'ð 	'ð 	'ð 	'ð ˆr–   r  c                ó4   — | j                              ¦   «         S r�   )rp  r*  r¸  s    r”   r   zBaseView.dtypeå  s   € àŒy×"Ò"Ñ$Ô$Ð$r–   r
  c                ó4   — | j                              ¦   «         S r�   ©rp  r'  r¸  s    r”   r'  zBaseView.get_layouté  ó   € ØŒy×#Ò#Ñ%Ô%Ð%r–   r0  c                ó4   — | j                              ¦   «         S r�   ©rp  r+  r¸  s    r”   r+  zBaseView.get_deviceì  rk  r–   r¢  c                ó   — d S r�   r©   r¸  s    r”   rÒ  zBaseView.get_origin_nodeï  r×  r–   rÃ   c                ó4   — | j                              ¦   «         S r�   ©rp  r˜  r¸  s    r”   r˜  zBaseView.get_nameò  ó   € ØŒy×!Ò!Ñ#Ô#Ð#r–   r{  c                ó*   — |                       ¦   «         S r�   r   r¸  s    r”   rÿ  zBaseView.get_pointwise_sizeõ  ó   € Ø�}Š}‰ŒÐr–   TrO  rQ  r’   rP  r¬   c               ó:   — | j                              ||¬¦  «        S ©NrO  ©rp  rT  rS  s      r”   rT  zBaseView.mark_reuseø  ó   € ØŒy×#Ò# E°{Ð#ÑCÔCÐCr–   c                ó4   — | j                              ¦   «         S r�   ©rp  r9  r¸  s    r”   r9  zBaseView.has_exceeded_max_readsû  ó   € ØŒy×/Ò/Ñ1Ô1Ð1r–   r8  c                ó4   — | j                              ¦   «         S r�   ©rp  r*  r¸  s    r”   r*  zBaseView.realizeþ  ó   € ØŒy× Ò Ñ"Ô"Ð"r–   c                ó8   — | j                              ¦   «          d S r�   ©rp  rV  r¸  s    r”   rV  zBaseView.realize_hint  s   € ØŒ	×ÒÑ Ô Ð Ð Ð r–   rƒ   c                ó4   — | j                              ¦   «         S r�   ©rp  ru  r¸  s    r”   ru  zBaseView.get_storage_numel  ó   € ØŒy×*Ò*Ñ,Ô,Ð,r–   c                ó4   — | j                              ¦   «         S r�   ©rp  r  r¸  s    r”   r  zBaseView.is_extern  ó   € ØŒy×"Ò"Ñ$Ô$Ð$r–   c                ó    — t          | j        t          ¦  «        sJ t          | j        ¦  «        ¦   «         ‚| j                             ¦   «         S r�   )r‘   rp  r”  r¾   Úis_module_bufferr¸  s    r”   r‡  zBaseView.is_module_buffer
  s>   € Ý˜$œ)¥XÑ.Ô.Ð?Ð?µ°T´Y±´Ñ?Ô?Ð.ØŒy×)Ò)Ñ+Ô+Ð+r–   rÃ  c                ó4   — | j                              ¦   «         S r�   ©rp  rÌ  r¸  s    r”   rÌ  zBaseView.get_read_names  ó   € ØŒy×'Ò'Ñ)Ô)Ð)r–   rm  c                óÞ   — t          j        t          dd¦  «        5  t          |                      ¦   «         |                      ¦   «         ¦  «        j        cd d d ¦  «         S # 1 swxY w Y   d S r  )r   rŒ   r(  rT   r>  r%  rp  r¸  s    r”   rË  zBaseView.get_reads  s§   € ÝŒ\�.Ð*:¸DÑAÔAð 	ð 	Ý&Ø× Ò Ñ"Ô"Ø—’‘”ñô ô ð		ð 	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	s   œ9A"Á"A&Á)A&c                ól   — | }t          |t          ¦  «        r|j        }t          |t          ¦  «        °|S r�   )r‘   r”  rp  )r¹  r‹   s     r”   r•  zBaseView.unwrap_view  s9   € ØˆÝ˜�HÑ%Ô%ð 	Ø”ˆAõ ˜�HÑ%Ô%ð 	àˆr–   r!  r2  c                óà   — |                       ¦   «         } t          j        t          d|¦  «        |¦  «        }t	          ||                      ¦   «         ||                      ¦   «         ¬¦  «        S rO  )r>  r   rŒ   rS  r=  r*  r%  rT  s      r”   rƒ  zBaseView.constant_to_device  sf   € à×!Ò!Ñ#Ô#ˆØH•”�nÐ.?ÀÑHÔHÈÑPÔPˆÝØØ—.’.Ñ"Ô"ØØ—=’=‘?”?ð	
ñ 
ô 
ð 	
r–   Nr¢  r1  ©r�   r^  rž  r�  r“  r”  r›  r�  rŸ  r¬  r¡  r–  r™  r�  rª  rŽ  r¨  rŒ  r­  )r¥   r¦   r§   r¨   rb   rx  r`  rB  r>  rµ  r   r'  r+  rÒ  r˜  rÿ  rT  r9  r*  rV  ru  r  r‡  rÌ  rË  r•  rƒ  r©   r–   r”   r”  r”  È  s  € € € € € € à€L€L�LàÐ˜JÑ'Ô'ð=ð =ð =ð =ñ (Ô'ð=ðCð Cð Cð Cðð ð ð ðð ð ð ð ð%ð %ð %ñ „Xð%ð&ð &ð &ð &ð&ð &ð &ð &ðð ð ð ð$ð $ð $ð $ðð ð ð ð =Að Dð Dð Dð Dð Dð Dð2ð 2ð 2ð 2ð#ð #ð #ð #ð!ð !ð !ð !ð-ð -ð -ð -ð%ð %ð %ð %ð,ð ,ð ,ð ,ð*ð *ð *ð *ðð ð ð ðð ð ð ð	
ð 	
ð 	
ð 	
ð 	
ð 	
r–   r”  c                  óZ   — e Zd ZU ded<   edd„¦   «         Zedd
„¦   «         Zdd„Zdd„Z	dS )r´   r{  r  r‹   r‰   Únew_sizer^  r�   c                óð  — t           j        j        }d„ |D ¦   «         }|                      ¦   «         }dgt	          |¦  «        t	          |¦  «        z
  z  t          |¦  «        z   }t	          |¦  «        t	          |¦  «        k    sJ ‚t          t	          |¦  «        ¦  «        D ]Ò}||         dk    r||         €J ‚||         ||<   Œ$||         �*t           j        j                             ||         ¦  «        rŒWt          |¦  «        slt          |¦  «        s]||         }||         }|€J ‚|€J ‚||z
  }| 	                    |d¬¦  «        dk    s%J d|                      ¦   «         › d|› d|› �¦   «         ‚ŒÓ|S )	zReplace `-1` with correct sizesc                ó6   — g | ]}t          j        |¦  «        ‘ŒS r©   r  rö   s     r”   r×   z.ExpandView._normalize_size.<locals>.<listcomp>2  s    € Ð6Ð6Ð6¨•E”L ‘O”OÐ6Ð6Ð6r–   NrR  r   )ÚfallbackzBroadcast failed in ExpandView(ú, z) on dimension )
rw   r"  r#  r%  rÙ   r°   rÚ   Úis_size_one_or_falser8   r$  )r‹   r�  r#  Úold_sizerÕ   Úv1Úv2Údiffs           r”   Ú_normalize_sizezExpandView._normalize_size.  s²  € õ ”7Ô#ˆØ6Ð6¨XÐ6Ñ6Ô6ˆØ—:’:‘<”<ˆØ�6�S ™]œ]­S°©]¬]Ñ:Ñ;½dÀ8¹n¼nÑLˆÝ�8‰}Œ}¥ H¡¤Ò-Ð-Ð-Ð-Ý•s˜8‘}”}Ñ%Ô%ð 	ð 	ˆAØ˜Œ{˜bÒ Ð Ø ”{Ð.Ð.Ð.Ø& qœk�˜‘�Ø˜!”Ð$­¬Ô(8×(MÒ(MØ˜”ñ)ô )Ð$ð Ý.Øñô ð å/°Ñ9Ô9ðð ˜a”[�Ø˜a”[�Ø�~�~�~Ø�~�~�~Ø˜B‘w�à×.Ò.ØØ!"ð /ñ ô ð ò	ð ð ð c°a·j²j±l´lÐbÐbÀhÐbÐbÐ_`ÐbÐbñô ð øð ˆr–   r”  c                óv  — |                       ||¦  «        }t          |¦  «        �rt          |¦  «        \  }}t          |¦  «        t          |j        ¦  «        z
  }|dk    sJ ‚t
          j        j        g|z  }t          |j	        |j        ¦  «        D ]O\  }}| 
                    t          j        j                             |¦  «        s|nt
          j        j        ¦  «         ŒPt          |j        |j        t%          |¦  «        ||j        |j        ¦  «        }	t+          ||	¬¦  «        S t-          ||¬¦  «        S )Nr   ro  )rp  r  )rš  r&  rr  rÙ   r  r·   r  r	  rÝ   r  ró  rw   r"  r#  r•  rs  r!  r   r°   rt  ru  rv  r´   )
r  r‹   r�  rw  rx  Úskipry  r  r  rz  s
             r”   r·  zExpandView.createV  s3  € à×&Ò& q¨(Ñ3Ô3ˆå  Ñ#Ô#ñ 	DÝ"7¸Ñ":Ô":ÑˆG�ZÝ�x‘=”=¥3 z¤Ñ#7Ô#7Ñ7ˆDØ˜1’9�9�9�9Ýœ'œ,˜¨$Ñ.ˆJÝ # JÔ$5°z´Ñ GÔ Gð ð ‘�˜Ø×!Ò!åœ7Ô+×@Ò@ÀÑFÔFð&�F�Fåœœñô ð ð õ
 %ØÔ!ØÔ Ý�X‘”ØØÔ!ØÔ$ñô ˆJõ #¨¸
ÐCÑCÔCÐCå˜q xÐ0Ñ0Ô0Ð0r–   c                ó   — | j         S r�   rö  r¸  s    r”   r%  zExpandView.get_sizeq  r÷  r–   r^  c                ó°   ‡‡— |                       ¦   «         }| j                              ¦   «         Št          |¦  «        t          ‰¦  «        z
  Šdˆˆfd„}|S )NrÐ   r{  r�   c                óø   •— t          | ‰d …         ¦  «        } t          | ¦  «        t          ‰¦  «        k    sJ ‚t          t          ‰¦  «        ¦  «        D ]"}‰|         dk    rt          j        j        | |<   Œ#| S rÂ  )r°   rÙ   rÚ   r·   r  r	  )rÐ   rÕ   Úactualrœ  s     €€r”   rÛ   z*ExpandView.make_reindexer.<locals>.reindex{  st   ø€ õ ˜˜t˜u˜uœÑ&Ô&ˆEÝ�u‘:”:¥ V¡¤Ò,Ð,Ð,Ð,Ý�3˜v™;œ;Ñ'Ô'ð ,ð ,�Ø˜!”9 ’>�>å$œwœ|�E˜!‘HøØˆLr–   ©rÐ   r{  r�   r{  )r%  rp  rÙ   )r¹  ÚtargetrÛ   r   rœ  s      @@r”   r`  zExpandView.make_reindexert  sf   øø€ ð —’‘”ˆØ”×#Ò#Ñ%Ô%ˆÝ�6‰{Œ{�S ™[œ[Ñ(ˆð		ð 		ð 		ð 		ð 		ð 		ð 		ð ˆr–   N)r‹   r‰   r�  r^  r�   r^  )r‹   r‰   r�  r^  r�   r”  r¬  rŽ  )
r¥   r¦   r§   r¨   r²  rš  r3  r·  r%  r`  r©   r–   r”   r´   r´   *  s‰   € € € € € € àÐÐÑàð%ð %ð %ñ „\ð%ðN ð1ð 1ð 1ñ „[ð1ð4ð ð ð ðð ð ð ð ð r–   r´   c                  ób   — e Zd ZU ded<   edd„¦   «         Zedd
„¦   «         Zdd„Zdd„Zdd„Z	dS )ÚPermuteViewrŒ  Údimsr‹   r‰   rÍ   r�   r”  c                ó¬  ‡— |                       |¦  «        }t          |¦  «        t          t          t          |¦  «        ¦  «        ¦  «        k    sJ ‚t	          |¦  «        rct          |¦  «        \  }Št          ‰j        ‰j        ˆfd„|D ¦   «         ˆfd„|D ¦   «         ‰j	        ‰j
        ¦  «        }t          ||¬¦  «        S t          ||¬¦  «        S )Nc                ó*   •— g | ]}‰j         |         ‘ŒS r©   rö  ©rÔ   rÕ   rx  s     €r”   r×   z&PermuteView.create.<locals>.<listcomp>—  s    ø€ Ð2Ð2Ð2¨�” Ô#Ð2Ð2Ð2r–   c                ó*   •— g | ]}‰j         |         ‘ŒS r©   ©r  r¨  s     €r”   r×   z&PermuteView.create.<locals>.<listcomp>˜  s!   ø€ Ð4Ð4Ð4¨!�Ô" 1Ô%Ð4Ð4Ð4r–   ro  )rp  r¥  )Ú_map_neg_dimsr@   rÚ   rÙ   r&  rr  rs  r!  r   rt  ru  rv  r¤  )r  r‹   r¥  rw  rz  rx  s        @r”   r·  zPermuteView.create�  så   ø€ à× Ò  Ñ&Ô&ˆÝ˜$ÑÔ¥:­eµC¸±I´IÑ.>Ô.>Ñ#?Ô#?Ò?Ð?Ð?Ð?å  Ñ#Ô#ð 
	DÝ"7¸Ñ":Ô":ÑˆG�ZÝ$ØÔ!ØÔ Ø2Ð2Ð2Ð2¨TÐ2Ñ2Ô2Ø4Ð4Ð4Ð4¨tÐ4Ñ4Ô4ØÔ!ØÔ$ñô ˆJõ #¨¸
ÐCÑCÔCÐCå ¨Ð-Ñ-Ô-Ð-r–   ú	list[int]c                ó    ‡— ˆfd„‰D ¦   «         S )Nc                óD   •— g | ]}|d k    r|nt          ‰¦  «        |z   ‘ŒS r  r  )rÔ   rc  r¥  s     €r”   r×   z-PermuteView._map_neg_dims.<locals>.<listcomp>¢  s/   ø€ ÐEÐEÐE¸�s˜a’x�x��¥S¨¡Y¤Y°¡_ÐEÐEÐEr–   r©   )r  r¥  s    `r”   r«  zPermuteView._map_neg_dims   s   ø€ àEÐEÐEÐEÀÐEÑEÔEÐEr–   r{  c                ó  ‡— t          |                      | j        ¦  «        ¦  «        t          t          t	          | j        ¦  «        ¦  «        ¦  «        k    sJ ‚| j                             ¦   «         Šˆfd„| j        D ¦   «         S )Nc                ó    •— g | ]
}‰|         ‘ŒS r©   r©   )rÔ   rÕ   r  s     €r”   r×   z(PermuteView.get_size.<locals>.<listcomp>©  s   ø€ Ð+Ð+Ð+˜A��Q”Ð+Ð+Ð+r–   )r@   r«  r¥  rÚ   rÙ   rp  r%  )r¹  r  s    @r”   r%  zPermuteView.get_size¤  s‚   ø€ Ý˜$×,Ò,¨T¬YÑ7Ô7Ñ8Ô8½JÝ•#�d”i‘.”.Ñ!Ô!ñ=
ô =
ò 
ð 
ð 
ð 
ð Œy×!Ò!Ñ#Ô#ˆØ+Ð+Ð+Ð+ ¤Ð+Ñ+Ô+Ð+r–   c                ó  ‡— t          |                      | j        ¦  «        ¦  «        t          t          t	          | j        ¦  «        ¦  «        ¦  «        k    sJ ‚| j                             ¦   «         Šˆfd„| j        D ¦   «         S )Nc                ó    •— g | ]
}‰|         ‘ŒS r©   r©   )rÔ   rÕ   r  s     €r”   r×   z*PermuteView.get_stride.<locals>.<listcomp>°  s   ø€ Ð-Ð-Ð-˜a��q”	Ð-Ð-Ð-r–   )r@   r«  r¥  rÚ   rÙ   rp  rT  rd  s    @r”   rT  zPermuteView.get_stride«  s‚   ø€ Ý˜$×,Ò,¨T¬YÑ7Ô7Ñ8Ô8½JÝ•#�d”i‘.”.Ñ!Ô!ñ=
ô =
ò 
ð 
ð 
ð 
ð ”×%Ò%Ñ'Ô'ˆØ-Ð-Ð-Ð- 4¤9Ð-Ñ-Ô-Ð-r–   r^  c                ó,  ‡— d„ t          | j        ¦  «        D ¦   «         Šˆfd„t          t          | j        ¦  «        ¦  «        D ¦   «         Št	          ‰¦  «        t	          t          t          | j        ¦  «        ¦  «        ¦  «        k    sJ ‚dˆfd„}|S )Nc                ó   — i | ]\  }}||“Œ	S r©   r©   )rÔ   rÕ   r  s      r”   r  z.PermuteView.make_reindexer.<locals>.<dictcomp>µ  s   € Ð5Ð5Ð5™˜˜1ˆq�!Ð5Ð5Ð5r–   c                ó    •— g | ]
}‰|         ‘ŒS r©   r©   )rÔ   rÕ   Úinvs     €r”   r×   z.PermuteView.make_reindexer.<locals>.<listcomp>¶  s   ø€ Ð5Ð5Ð5˜!ˆs�1ŒvÐ5Ð5Ð5r–   rÐ   r{  r�   c                ó"   •‡ — ˆ fd„‰D ¦   «         S )Nc                ó    •— g | ]
}‰|         ‘ŒS r©   r©   )rÔ   rÕ   rÐ   s     €r”   r×   z?PermuteView.make_reindexer.<locals>.reindex.<locals>.<listcomp>¼  s   ø€ Ð*Ð*Ð* �E˜!”HÐ*Ð*Ð*r–   r©   )rÐ   r¶  s   `€r”   rÛ   z+PermuteView.make_reindexer.<locals>.reindex¹  s    øø€ ð +Ð*Ð*Ð* cÐ*Ñ*Ô*Ð*r–   r¡  )r  r¥  rÚ   rÙ   r@   )r¹  rÛ   r¶  s     @r”   r`  zPermuteView.make_reindexer²  sŸ   ø€ ð 6Ð5¥	¨$¬)Ñ 4Ô 4Ð5Ñ5Ô5ˆØ5Ð5Ð5Ð5�u¥S¨¬¡^¤^Ñ4Ô4Ð5Ñ5Ô5ˆÝ˜#‰Œ¥*­Uµ3°t´y±>´>Ñ-BÔ-BÑ"CÔ"CÒCÐCÐCÐCð	+ð 	+ð 	+ð 	+ð 	+ð 	+ð
 ˆr–   N)r‹   r‰   r¥  rÍ   r�   r”  )r¥  rÍ   r�   r¬  r¬  rŽ  )
r¥   r¦   r§   r¨   r3  r·  r«  r%  rT  r`  r©   r–   r”   r¤  r¤  ‰  s    € € € € € € àÐÐÑàð.ð .ð .ñ „[ð.ð$ ðFð Fð Fñ „[ðFð,ð ,ð ,ð ,ð.ð .ð .ð .ðð ð ð ð ð r–   r¤  c                  óL   — e Zd Zeddœdd„¦   «         Zedd„¦   «         Zdd„ZdS )ÚSqueezeViewN)rc  r‹   r‰   rc  r¥  r�   c               ó   ‡— t          |¦  «        �r_t          |¦  «        \  }}g }g }‰�Lt          ‰t          ¦  «        sJ t	          ‰¦  «        ¦   «         ‚d‰k    r‰t          |j        ¦  «        k     sJ ‚t          t          |j        |j	        ¦  «        ¦  «        D ]š\  }\  }}	‰€Ot          j        j                             |¦  «        s*|                     |¦  «         |                     |	¦  «         ŒY|‰k    r+|                     |¦  «         |                     |	¦  «         ŒŠ|dk    s
J d¦   «         ‚Œ›t          |j        |j        |||j        |j        ¦  «        }
t)          ||
¬¦  «        S ‰€7t*                               |d„ |                     ¦   «         D ¦   «         ¦  «        S |                     ¦   «         ‰         dk    sJ ‚t*                               |ˆfd„t          |                     ¦   «         ¦  «        D ¦   «         ¦  «        S )Nr   rI   zexpected squeezed size to be 1ro  c                óZ   — g | ](}t           j        j                             |¦  «        °&|‘Œ)S r©   )rw   r"  r#  r•  rö   s     r”   r×   z&SqueezeView.create.<locals>.<listcomp>ç  sA   € ð ð ð àÝœ7Ô+×@Ò@ÀÑCÔCðØðð ð r–   c                ó&   •— g | ]\  }}|‰k    ¯|‘ŒS r©   r©   )rÔ   rÕ   r÷   rc  s      €r”   r×   z&SqueezeView.create.<locals>.<listcomp>ï  s#   ø€ Ð"UÐ"UÐ"U©¨¨AÈAÐQTÊHÈH 1ÈHÈHÈHr–   )r&  rr  r‘   r’   r¾   rÙ   r  r  rÝ   r  rw   r"  r#  r•  ró  rs  r!  r   rt  ru  rv  rh  r·  r%  )r  r‹   rc  rw  rx  r�  ry  rÕ   r  r  rz  s     `        r”   r·  zSqueezeView.createÃ  s  ø€ å  Ñ#Ô#ñ 	DÝ"7¸Ñ":Ô":ÑˆG�ZØˆHØˆJØˆÝ! #¥sÑ+Ô+Ð6Ð6­T°#©Y¬YÑ6Ô6Ð+Ø˜C’x�x C­#¨j¬oÑ*>Ô*>Ò$>Ð$>Ð$>Ð>å%.­s°:´?ÀJÔDUÑ/VÔ/VÑ%WÔ%Wð Kð KÑ!�‘>�D˜&Ø�;åœ7Ô+×@Ò@ÀÑFÔFð 2Ø Ÿš¨Ñ-Ô-Ð-Ø"×)Ò)¨&Ñ1Ô1Ð1øà˜C’x�xØ Ÿš¨Ñ-Ô-Ð-Ø"×)Ò)¨&Ñ1Ô1Ð1Ð1à# qšy˜y˜yÐ*J™yœy˜y˜yå$ØÔ!ØÔ ØØØÔ!ØÔ$ñô ˆJõ #¨¸
ÐCÑCÔCÐCàˆ;Ý—;’;Øðð àŸZšZ™\œ\ðñ ô ñô ð ð —:’:‘<”< Ô$¨Ò)Ð)Ð)Ð)Ý—;’;˜qÐ"UÐ"UÐ"UÐ"Uµ¸1¿:º:¹<¼<Ñ1HÔ1HÐ"UÑ"UÔ"UÑVÔVÐVr–   r  r{  ú>tuple[list[int], Callable[[Sequence[Expr]], tuple[Expr, ...]]]c                ó„   ‡‡— d„ | D ¦   «         }d„ t          | ¦  «        D ¦   «         Št          | ¦  «        Šdˆˆfd„}||fS )	Nc                ó   — g | ]
}|d k    ¯|‘ŒS r  r©   rö   s     r”   r×   z(SqueezeView.squeezer.<locals>.<listcomp>õ  s   € Ð.Ð.Ð.˜! q¨A¢v v�A v v vr–   c                ó$   — g | ]\  }}|d k    ¯|‘ŒS r  r©   )rÔ   rÕ   r÷   s      r”   r×   z(SqueezeView.squeezer.<locals>.<listcomp>ö  s!   € Ð;Ð;Ð;™˜˜A°A¸²F°F�1°F°F°Fr–   rÐ   r{  r�   útuple[Expr, ...]c                óà   •— t          | ¦  «        t          ‰¦  «        k    sJ | › d‰› �¦   «         ‚t          j        j        g‰z  }t	          ‰| ¦  «        D ]
\  }}|||<   Œt          |¦  «        S )Nú )rÙ   r·   r  r	  rÝ   r±   )rÐ   r`  r   r÷   ÚlengthÚnot_ones       €€r”   rÛ   z%SqueezeView.squeezer.<locals>.reindexù  s|   ø€ Ý�u‘:”:¥ W¡¤Ò-Ð-Ð-°%Ð/CÐ/C¸'Ð/CÐ/CÑ-Ô-Ð-Ý%*¤W¤\ N°VÑ$;ˆIÝ˜g uÑ-Ô-ð #ð #‘��QØ!"�	˜#‘�Ý˜Ñ#Ô#Ð#r–   )rÐ   r{  r�   rÂ  )r  rÙ   )r  r�  rÛ   rÅ  rÆ  s      @@r”   ÚsqueezerzSqueezeView.squeezerñ  sm   øø€ ð /Ð.˜tÐ.Ñ.Ô.ˆØ;Ð;¥¨4¡¤Ð;Ñ;Ô;ˆÝ�T‘”ˆð	$ð 	$ð 	$ð 	$ð 	$ð 	$ð 	$ð ˜Ð Ð r–   rp  r   r¬   c                ó    — t          d¦  «        ‚)Nzuse SqueezeView.create())r¯  )r¹  rp  s     r”   r�  zSqueezeView.__init__  s   € ÝÐ7Ñ8Ô8Ð8r–   )r‹   r‰   rc  r¥  r�   r‰   )r  r{  r�   r¾  )rp  r   r�   r¬   )r¥   r¦   r§   r3  r·  r²  rÇ  r�  r©   r–   r”   rº  rº  Á  sz   € € € € € àØ48ð +Wð +Wð +Wð +Wð +Wñ „[ð+WðZ ð!ð !ð !ñ „\ð!ð 9ð 9ð 9ð 9ð 9ð 9r–   rº  c                  ó`   — e Zd ZU ded<   ded<   dd„Zdd„Zdd	„ZeZedd„¦   «         Z	dd„Z
dS )ÚGenericViewr{  r  r^  rÛ   r�   c                ó   — | j         S r�   )rÛ   r¸  s    r”   r`  zGenericView.make_reindexer  s   € ð Œ|Ðr–   rÃ   c                óø   — d„ t          t          | j        ¦  «        ¦  «        D ¦   «         }t          |                      |¦  «        ¦  «        }dd                     t          t          |¦  «        ¦  «        › d|› �S )Nc                óB   — g | ]}t          t          j        |¦  «        ‘ŒS r©   )rq   rH   r4  ©rÔ   r
  s     r”   r×   z+GenericView.reindex_str.<locals>.<listcomp>  s2   € ð 
ð 
ð 
Ø>?Õ*­4¬:°qÑ9Ô9ð
ð 
ð 
r–   zlambda r”  r:  )rÚ   rÙ   r  r°   rÛ   rþ  rü  rÃ   )r¹  Ú	index_oldÚ	index_news      r”   Úreindex_strzGenericView.reindex_str  sw   € ð
ð 
ÝCHÍÈTÌYÉÌÑCXÔCXð
ñ 
ô 
ˆ	õ ˜Ÿš iÑ0Ô0Ñ1Ô1ˆ	ØF˜Ÿš¥3¥s¨IÑ#6Ô#6Ñ7Ô7ÐFÐF¸9ÐFÐFÐFr–   c                óv   — |                       | j        d| j        › �d|                      ¦   «         › �g¦  «        S )Núsize=zreindex=)r   rp  r  rÑ  r¸  s    r”   r÷  zGenericView.__str__  sD   € Ø�ŠØŒYÐ+ ¤	Ð+Ð+Ð-L¸×8HÒ8HÑ8JÔ8JÐ-LÐ-LÐMñ
ô 
ð 	
r–   r‹   r‰   r�  r”  c                ó8   —  | |t          |¦  «        |¬¦  «        S )N©rp  r  rÛ   )r°   )r  r‹   r�  rÛ   s       r”   r·  zGenericView.create  s!   € ð ˆs˜¥ X¡¤¸Ð@Ñ@Ô@Ð@r–   c                ó   — | j         S r�   rö  r¸  s    r”   r%  zGenericView.get_size'  r÷  r–   NrŽ  rŸ  )r‹   r‰   r�  r{  rÛ   r^  r�   r”  r¬  )r¥   r¦   r§   r¨   r`  rÑ  r÷  r2  r3  r·  r%  r©   r–   r”   rÊ  rÊ    s«   € € € € € € àÐÐÑØ7Ð7Ð7Ñ7ðð ð ð ð
Gð Gð Gð Gð
ð 
ð 
ð 
ð
 €HàðAð Að Añ „[ðAðð ð ð ð ð r–   rÊ  c                  ó¢   — e Zd ZdZedd„¦   «         Zeedd„¦   «         ¦   «         Zedd„¦   «         Z	e	 ddd„¦   «         Z
e	 ddd„¦   «         ZdS )rh  zš
    This class handles tensor reshaping by computing appropriate index transformations
    to map the new shape back to the original storage layout.
    r   r    r  r�   c                óÒ   — t          j        | ¦  «        } t          j        |¦  «        }t          j        j        j        j        } |t          j        | d¦  «        ¦  «        r| |z   } | S r$  )r·   r  rw   r"  r#  rñ   Úevaluate_exprÚLt)r   r  rÙ  s      r”   Úhandle_negative_indexzView.handle_negative_index2  s\   € åŒl˜3ÑÔˆÝŒ|˜DÑ!Ô!ˆÝœÔ(Ô2Ô@ˆØˆ=�œ # qÑ)Ô)Ñ*Ô*ð 	Ø˜‘*ˆCØˆ
r–   r‹   r‰   r�  r{  c                óf  ‡ ‡‡‡— t          ‰t          ¦  «        sJ t          ‰¦  «        ¦   «         ‚‰                      |                     ¦   «         ‰¦  «        \  ŠŠt
          j        j                             ‰‰¦  «        r|S t          t          ‰¦  «        ¦  «        dk    pt          t          ‰¦  «        ¦  «        dk    }t          |¦  «        }dd	„Šdˆ ˆˆˆfd„}d‰v r!dˆfd„} ‰ |t          ‰¦  «        |¬¦  «        S |r% ‰|‰t                               ‰¦  «        ¦  «        S t          |¦  «        s ||¦  «        S t!          |d¬¦  «        \  }}|j        }	t
          j        j                             ‰¦  «        }
t
          j        j                             |	¦  «        }t
          j        j                             ‰¦  «        }ddlm}  ||
|||¬¦  «        }|�Ed„ |D ¦   «         }t+          |j        |j        ‰||j        |j        ¦  «        }t5          ||¬¦  «        S  ||¦  «        S )Nr   r‘  r‰   r�  r{  ry  r�   rv  c                ó"  — t                                | t                               |                      ¦   «         ¦  «        ¦  «        } t          | ¦  «        \  }}t          |j        |j        |||j	        |j
        ¦  «        }t          ||¬¦  «        S ©Nro  )rß  Úrequire_exact_stridesr(  r)  r%  rr  rs  r!  r   rt  ru  rv  )r‘  r�  ry  rw  rx  rz  s         r”   Úcreate_reinterpret_viewz,View.create.<locals>.create_reinterpret_viewK  sŠ   € õ ×4Ò4Ø•^×6Ò6°s·|²|±~´~ÑFÔFñô ˆCõ #8¸Ñ"<Ô"<ÑˆG�ZÝ$ØÔ!ØÔ ØØØÔ!ØÔ$ñô ˆJõ #¨¸
ÐCÑCÔCÐCr–   r‹   c                ó  •— 	 ‰                      ‰‰¦  «        } ‰| t          ‰¦  «        |¬¦  «        S # t          $ rB t                               | ¦  «        }  ‰| ‰t
                               ‰¦  «        ¦  «        cY S w xY w)a  
            Handle the case where view is not possible with current strides.
            Try dynamic_reshape_indexer first; if it fails with unbacked
            symbols (guard_or_false can't resolve comparisons), fall back
            to making the tensor contiguous.
            rÕ  )ri  r°   r7   rß  Úrequire_contiguousr(  r)  )r‹   rÛ   r  rà  r�  r–  s     €€€€r”   Ú"handle_unbacked_or_dynamic_reshapez7View.create.<locals>.handle_unbacked_or_dynamic_reshape\  sž   ø€ ð
Ø×5Ò5°hÀÑIÔI�Ø�s ­¨X©¬ÀÐHÑHÔHÐHøÝ.ð ð ð õ !×3Ò3°AÑ6Ô6�Ø.Ð.Ø�x¥×!BÒ!BÀ8Ñ!LÔ!Lñô ð ð ð ðøøøs   ƒ04 ´A	B Á?B rÐ   r   útuple[int, ...]c                óD   •— t          dgt          ‰¦  «        z  ¦  «        S r$  )r±   rÙ   )rÐ   r–  s    €r”   Úfake_reindexz!View.create.<locals>.fake_reindext  s   ø€ Ý˜a˜S¥3 x¡=¤=Ñ0Ñ1Ô1Ð1r–   rÕ  Fr>  )Ú_compute_stride)Úsize_obliviousc                ón   — g | ]2}t          |d ¦  «        r|j        j        nt          j        |¦  «        ‘Œ3S r³  )rà  r¿   Úexprr·   r!   rö   s     r”   r×   zView.create.<locals>.<listcomp>›  sI   € ð ð ð àõ  ' q¨&Ñ1Ô1ÐG�””�µu´}ÀQÑ7GÔ7Gðð ð r–   ro  )r‘  r‰   r�  r{  ry  r{  r�   rv  ©r‹   r‰   r�   r‰   )rÐ   r   r�   rä  )r‘   r   r¾   Úresolve_negative_sizer%  rw   r"  r#  Ústatically_known_list_equalsrÙ   r6   rJ  r°   r(  r)  r&  rr  r  Úto_symints_or_intsÚtorch._subclasses.fake_implsrç  rs  r!  r   rt  ru  rv  )r  r‹   r�  Úunbacked_symbols_in_sizesrD  rã  ræ  rw  rx  Ú
old_strideÚold_size_symintÚold_stride_symintÚnew_size_symintrç  Únew_stride_symintry  rz  rà  r–  s   ` `              @@r”   r·  zView.create;  sÃ  øøøø€ õ ˜(¥HÑ-Ô-Ð=Ð=­t°H©~¬~Ñ=Ô=Ð-Ø ×6Ò6°q·z²z±|´|ÀXÑNÔNÑˆ�(õ Œ7Ô×8Ò8¸À8ÑLÔLð 	ØˆHõ Õ% hÑ/Ô/Ñ0Ô0°1Ò4ð 8ÝÕ(¨Ñ2Ô2Ñ3Ô3°aÒ7ð 	"õ ?¸qÑAÔAˆð	Dð 	Dð 	Dð 	Dð"	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð, �ˆ=ˆ=ð2ð 2ð 2ð 2ð 2ð 2ð �3˜A¥D¨¡N¤N¸LÐIÑIÔIÐIð ð 	à*Ð*Ø�8�^×>Ò>¸xÑHÔHñô ð õ
 % QÑ'Ô'ð 	9à5Ð5°aÑ8Ô8Ð8õ 4°A¸eÐDÑDÔDÑˆ�àÔ&ˆ
õ œ'Ô*×=Ò=¸hÑGÔGˆÝœGÔ,×?Ò?À
ÑKÔKÐÝœ'Ô*×=Ò=¸hÑGÔGˆà@Ð@Ð@Ð@Ð@Ð@ð ,˜OØØØØ4ð	
ñ 
ô 
Ðð Ð(ðð à*ðñ ô ˆJõ
 %ØÔ!ØÔ ØØØÔ!ØÔ$ñô ˆJõ #¨¸
ÐCÑCÔCÐCð 2Ð1°!Ñ4Ô4Ð4r–   r–  útuple[list[Expr], list[Expr]]c                ó²  — d„ |D ¦   «         }d„ | D ¦   «         } t          |¦  «        }t          t          |¦  «        ¦  «        D ]Q}||         dk    rCt          j        j        ||<   t          t          | ¦  «        t          |¦  «        ¦  «        ||<    nŒRt          j	        j
                             t          | ¦  «        t          |¦  «        ¦  «         | |fS )Nc                óV   — g | ]&}t           j        j                             |¦  «        ‘Œ'S r©   ©rw   r"  r#  r<  r  s     r”   r×   z.View.resolve_negative_size.<locals>.<listcomp>±  ó+   € ÐCÐCÐC°Q•A”GÔ$×-Ò-¨aÑ0Ô0ÐCÐCÐCr–   c                óV   — g | ]&}t           j        j                             |¦  «        ‘Œ'S r©   rù  r  s     r”   r×   z.View.resolve_negative_size.<locals>.<listcomp>²  rú  r–   rR  )r°   rÚ   rÙ   r·   r  ÚOnerB   rr   rw   r"  r#  Úcheck_equals)r–  r�  rÕ   s      r”   rì  zView.resolve_negative_size­  sÔ   € ð DÐC¸(ÐCÑCÔCˆØCÐC¸(ÐCÑCÔCˆå˜‘>”>ˆÝ•s˜8‘}”}Ñ%Ô%ð 	ð 	ˆAØ˜Œ{˜bÒ Ð Ý#œgœk�˜‘Ý&¥}°XÑ'>Ô'>ÅÈhÑ@WÔ@WÑXÔX�˜‘Ø�ð !õ
 	
ŒÔ×%Ò%¥m°HÑ&=Ô&=½}ÈXÑ?VÔ?VÑWÔWÐWØ˜Ð!Ð!r–   Nr^  Ú	dense_dimr¥  rç   c                ó
  — 	 |                       |||¦  «        }ni# t          t          t          f$ rO t	          |¦  «        g}|                       ||¦  «        }|                       ||¦  «        }t          ||¦  «        }Y nw xY w|S r�   )Ú_dynamic_reshape_indexerr¯  r7   Ú
IndexErrorrr   rë   )r  r–  r�  rþ  rÛ   Úflatrã   rå   s           r”   ri  zView.dynamic_reshape_indexer¾  s—   € ð	:Ø×2Ò2°8¸XÀyÑQÔQˆGˆGøÝÕ ;½ZÐHð 	:ð 	:ð 	:å! (Ñ+Ô+Ð,ˆDØ×3Ò3°H¸dÑCÔCˆHØ×3Ò3°D¸(ÑCÔCˆHÝ% h°Ñ9Ô9ˆGˆGˆGð	:øøøð ˆs   ‚ šA#B Á?B r^  c                óX  ‡‡‡— t           j        j        j        Šdˆfd„}d„ t	          t          |¦  «        ¦  «        D ¦   «         Št          t          ‰|¦  «        ¦  «        }t          | ¦  «        }|duo(|t          |¦  «        d	z
  k    ot          |¦  «        d	k    }|r.|€J ‚|                     |¦  «        }| 	                    |¦  «         g Š|�r$|�r!|                     ¦   «         }|                     ¦   «         \  }	}
|d	k    r=‰ 	                    t          j        j        ¦  «         | 	                    |	|
f¦  «         �n®|
d	k    r| 	                    |¦  «         �n‘ ||
|¦  «        d
k    r‰ 	                    |	¦  «         �nj ||
|¦  «        d
k     r ||
|¦  «        d
k     r4|                     ¦   «         \  }}||
z  |	z   }	|
|z  }
 ||
|¦  «        d
k     °4‰ 	                    |	¦  «         t           j        j                             |
|¦  «         nÛ ||
|¦  «        d
k    rÄt          j        j        }|}‰ 	                    t          |	||¦  «        ¦  «         ||z  } ||
|¦  «        d
k    rR|                     ¦   «         }‰ 	                    t          |	||¦  «        ¦  «         ||z  }||z  } ||
|¦  «        d
k    °Rt           j        j                             |
|¦  «         nt           ‚|r|�°!|r_|                     ¦   «         }t           j        j                             |d	¦  «         ‰ 	                    t          j        j        ¦  «         |°_|r>|                     ¦   «         \  }	}
t           j        j                             |
d	¦  «         |°>|�Rt          |¦  «        d	k    r?‰                     ¦   «          ‰                     ¦   «         }‰                     ||¦  «         n‰                     ¦   «          t          ‰¦  «        t          | ¦  «        k    sJ ‚dˆˆfd„}|S )zG
        Perform a reshape entirely by modifying indexing math
        rs  r    ru  r�   r’   c                ó¤  •—  ‰t          j        | |¦  «        ¦  «        rdS  ‰t          j        | |¦  «        ¦  «        rdS  ‰t          j        | |¦  «        ¦  «        rdS t          j        j                             || ¦  «        rdS t          j        j                             | |¦  «        rdS t          t          j        | |¦  «        ¦  «        ‚)zÚ
            Compare two symbolic sizes, returning -1 if a < b, 0 if a == b, 1 if a > b.

            For unbacked symbols, guard_or_false returns False, so we fall back
            to divisibility checks.
            r   rR  rI   )	r·   rQ  rÚ  ÚGtrw   r"  r#  rX  r7   )rs  ru  rX  s     €r”   Úcompare_sizesz4View._dynamic_reshape_indexer.<locals>.compare_sizesÚ  sÆ   ø€ ð ˆ~�eœh q¨!™nœnÑ-Ô-ð Ø�qØˆ~�eœh q¨!™nœnÑ-Ô-ð Ø�rØˆ~�eœh q¨!™nœnÑ-Ô-ð Ø�qõ ŒwÔ×<Ò<¸QÀÑBÔBð Ø�rÝŒwÔ×<Ò<¸QÀÑBÔBð Ø�qå-­e¬h°q¸!©n¬nÑ=Ô=Ð=r–   c                óB   — g | ]}t          t          j        |¦  «        ‘ŒS r©   )rq   rH   ÚVIEWr  s     r”   r×   z1View._dynamic_reshape_indexer.<locals>.<listcomp>þ  s2   € ð 
ð 
ð 
Ø=>Õ*­4¬9°aÑ8Ô8ð
ð 
ð 
r–   NrI   r   rÐ   r{  c                ó  •‡— t          | ¦  «        t          ‰¦  «        k    s&J t          | ¦  «        t          ‰¦  «        f¦   «         ‚t          t          ‰| ¦  «        ¦  «        Št          ˆfd„‰D ¦   «         ¦  «        S )Nc              3  ó8   •K  — | ]}t          |‰¦  «        V — Œd S r�   )rs   )rÔ   r‹   Úreplacementss     €r”   rø   zAView._dynamic_reshape_indexer.<locals>.reindex.<locals>.<genexpr>H  s-   øè è € ÐHÐH¸� A |Ñ4Ô4ÐHÐHÐHÐHÐHÐHr–   )rÙ   r²   rÝ   r±   )rÐ   r  rF  Ú	view_exprs    @€€r”   rÛ   z.View._dynamic_reshape_indexer.<locals>.reindexC  sv   øø€ õ �u‘:”:¥ T¡¤Ò*Ð*Ð*­S°©Z¬Z½¸T¹¼Ð,CÑ*Ô*Ð*Ý¥ D¨%Ñ 0Ô 0Ñ1Ô1ˆLÝÐHÐHÐHÐH¸iÐHÑHÔHÑHÔHÐHr–   )rs  r    ru  r    r�   r’   r¡  )rw   r"  r#  rX  rÚ   rÙ   r°   rÝ   r  ró  r·   r  r	  rý  rü  rG   r¯  ÚreverseÚinsert)r–  r�  rþ  r  Ú	stack_newÚ	stack_oldÚreordering_dense_dimÚold_dimÚsize_oldrË  Úsize_newÚvar2Ú	size_new2ÚdivisorÚmodulusÚ
dense_exprrÛ   rX  rF  r  s                    @@@r”   r   zView._dynamic_reshape_indexerÏ  s“  øøø€ õ œÔ)Ô8ˆð 	>ð  	>ð  	>ð  	>ð  	>ð  	>ðH
ð 
ÝBGÍÈHÉÌÑBVÔBVð
ñ 
ô 
ˆõ �˜T 8Ñ,Ô,Ñ-Ô-ˆ	Ý˜‘N”Nˆ	ð ˜TÐ!ð #Ø�S ™^œ^¨aÑ/Ò/ð#å�H‘” Ò"ð 	ð
  ð 	&ØÐ(Ð(Ð(Ø—m’m IÑ.Ô.ˆGØ×Ò˜WÑ%Ô%Ð%àˆ	Øñ 	%˜Iñ 	%Ø —}’}‘”ˆHØ%ŸMšM™OœO‰MˆC�Ø˜1Š}ˆ}Ø× Ò ¥¤¤Ñ.Ô.Ð.Ø× Ò  # x Ñ1Ô1Ð1Ñ1Ø˜Q’�Ø× Ò  Ñ*Ô*Ð*Ñ*Ø�˜x¨Ñ2Ô2°aÒ7Ð7Ø× Ò  Ñ%Ô%Ð%Ñ%Ø�˜x¨Ñ2Ô2°QÒ6Ð6Ø#�m H¨hÑ7Ô7¸!Ò;Ð;Ø&/§m¢m¡o¤o‘O�D˜)Ø ™/¨CÑ/�CØ'¨)Ñ3�Hð $�m H¨hÑ7Ô7¸!Ò;Ð;ð × Ò  Ñ%Ô%Ð%Ý”Ô ×-Ò-¨h¸ÑAÔAÐAÐAØ�˜x¨Ñ2Ô2°QÒ6Ð6Ýœ'œ+�Ø"�Ø× Ò ¥°°g¸wÑ!GÔ!GÑHÔHÐHØ! GÑ+�Ø#�m H¨hÑ7Ô7¸!Ò;Ð;Ø'Ÿmšm™oœo�GØ×$Ò$¥_°S¸'À7Ñ%KÔ%KÑLÔLÐLØ%¨Ñ/�GØ'¨'Ñ1�Hð	 $�m H¨hÑ7Ô7¸!Ò;Ð;õ
 ”Ô ×-Ò-¨h¸ÑAÔAÐAÐAå$Ð$ð; ð 	%˜Iñ 	%ð> ð 	+Ø —}’}‘”ˆHÝŒGÔ×)Ò)¨(°AÑ6Ô6Ð6Ø×Ò�UœWœ\Ñ*Ô*Ð*ð ð 	+ð
 ð 	7Ø%ŸMšM™OœO‰MˆC�ÝŒGÔ×)Ò)¨(°AÑ6Ô6Ð6ð ð 	7ð Ð ¥S¨¡]¤]°aÒ%7Ð%7Ø×ÒÑÔÐà"Ÿš™œˆJØ×Ò˜Y¨
Ñ3Ô3Ð3Ð3à×ÒÑÔÐå�9‰~Œ~¥ X¡¤Ò.Ð.Ð.Ð.ð	Ið 	Ið 	Ið 	Ið 	Ið 	Ið 	Ið ˆ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Û  r3  r   r·  rì  ri  r   r©   r–   r”   rh  rh  +  sè   € € € € € ðð ð
 ðð ð ñ „\ðð Øðn5ð n5ð n5ñ „Xñ „[ðn5ð` ð"ð "ð "ñ „\ð"ð  ð
 !%ð	ð ð ð ñ „[ðð  ð !%ðzð zð zð zñ „\ðzð zð zr–   rh  c                  óÜ   ‡ — e Zd ZU dZded<   d$ˆ fd„Zd%d„ZeZd%d	„Zd&d„Z	d'd„Z
ed(d„¦   «         Zd)d„Zd)d„Zd*d„Zd+d„Zd,d„Zd$d„Z ed ¦  «        	 d-d.d„¦   «         Zd/d0d!„Zd1d#„Zˆ xZS )2rv  z*Pretend our storage has a different layoutr
  rq  r�   r¬   c                óæ   •— t          ¦   «                              ¦   «          t          | j        t          ¦  «        r5t
                               | d| j                             ¦   «         ¦  «         d S d S )Nrp  )r   rÂ  r‘   rp  r”  rŒ   r½  r•  rê  s    €r”   rÂ  zReinterpretView.__post_init__S  sf   ø€ Ý‰Œ×ÒÑÔÐÝ�d”i¥Ñ*Ô*ð 	FÝ×Ò˜t V¨T¬Y×-BÒ-BÑ-DÔ-DÑEÔEÐEÐEÐEð	Fð 	Fr–   rÃ   c                óD   — |                       | j        | j        g¦  «        S r�   )r   rp  rq  r¸  s    r”   r÷  zReinterpretView.__str__X  s'   € Ø�Šà”	Ø”ðñ
ô 
ð 	
r–   c                ó4   — | j                              ¦   «         S r�   rp  r¸  s    r”   r˜  zReinterpretView.get_nameb  rq  r–   r0  c                ó   — | j         j        S r�   )rq  r!  r¸  s    r”   r+  zReinterpretView.get_devicee  s   € ØŒ{Ô!Ð!r–   r¢  c                ó   — d S r�   r©   r¸  s    r”   rÒ  zReinterpretView.get_origin_nodeh  r×  r–   r  c                ó   — | j         j        S r�   )rq  r   r¸  s    r”   r   zReinterpretView.dtypek  s   € àŒ{Ô Ð r–   r{  c                ó4   — t          | j        j        ¦  «        S r�   )r°   rq  r  r¸  s    r”   r%  zReinterpretView.get_sizeo  s   € Ý�D”KÔ$Ñ%Ô%Ð%r–   c                ó4   — t          | j        j        ¦  «        S r�   )r°   rq  r  r¸  s    r”   rT  zReinterpretView.get_strider  s   € Ý�D”KÔ&Ñ'Ô'Ð'r–   r;  c                ó   ‡ — dˆ fd„}|S )NrÐ   r{  r�   rv   c                ó  •— ‰j                              ¦   «         }t          j        ‰                     ¦   «          || ¦  «        ¦  «        }‰j         j        ‰j        j        k    r%t          j        |‰j        ‰j        j        ¦  «        S |S r�   )rq  rB  ru   Úloadr˜  r   rp  Úto_dtype_bitcast)rÐ   rD  Ú
tmp_loaderr¹  s      €r”   rL  z+ReinterpretView.make_loader.<locals>.loaderv  sl   ø€ Ø”k×.Ò.Ñ0Ô0ˆGÝœ $§-¢-¡/¤/°7°7¸5±>´>ÑBÔBˆJØŒ{Ô  D¤I¤OÒ3Ð3ÝÔ+¨J¸¼
ÀDÄIÄOÑTÔTÐTà!Ð!r–   r®  r©   ©r¹  rL  s   ` r”   r>  zReinterpretView.make_loaderu  s(   ø€ ð	"ð 	"ð 	"ð 	"ð 	"ð 	"ð ˆr–   r@  c                ó4   — | j                              ¦   «         S r�   )rq  rB  r¸  s    r”   rB  zReinterpretView.make_indexer€  ó   € ØŒ{×'Ò'Ñ)Ô)Ð)r–   c                ó   — | j         S r�   ©rq  r¸  s    r”   r'  zReinterpretView.get_layoutƒ  rû  r–   c                ó   — d S r�   r©   r¸  s    r”   rZ  zReinterpretView.freeze_layout†  rW  r–   Fr�  r    rš   c                ó¢   — t          | j        j        |¦  «        t          | j        j        |¦  «        z  t          | j        j        |¦  «        z  S r�   )r)   rq  r  r  rt  rw  s     r”   rx  z$ReinterpretView.get_free_symbol_uses‰  sK   € õ
 ˜Tœ[Ô-¨}Ñ=Ô=Ý˜tœ{Ô1°=ÑAÔAñBå˜tœ{Ô1°=ÑAÔAñBð	
r–   Nr+  r,  c                óê   — t           j        j                             | j        | j        j        | j        j        | j        j        |�|j	        nt           j        j        j	        | j        j
        ¬¦  «        S r?  )rw   r"  Úwrapper_codeÚcodegen_reinterpret_viewrp  rq  r  r  rt  Ú	writeliner   r.  s     r”   r/  z!ReinterpretView.codegen_reference“  sc   € õ ŒwÔ#×<Ò<ØŒIØŒKÔØŒKÔØŒKÔØ &Ð 2ˆFÔÐ½¼Ô8LÔ8VØ”+Ô#ð =ñ 
ô 
ð 	
r–   r’   c                ó   — dS rÂ  r©   r¸  s    r”   rs  zReinterpretView.num_reads   ó   € Øˆqr–   r�  rŸ  r›  r�  r“  r¬  r�  rž  r”  r¢  r«  r�   rš  r©  )r¥   r¦   r§   r¯  r¨   rÂ  r÷  r2  r˜  r+  rÒ  rµ  r   r%  rT  r>  rB  r'  rZ  rb   rx  r/  rs  r‡  rˆ  s   @r”   rv  rv  M  s¥  ø€ € € € € € à4Ð4à€N€N�NðFð Fð Fð Fð Fð Fð

ð 
ð 
ð 
ð €Hð$ð $ð $ð $ð"ð "ð "ð "ðð ð ð ð ð!ð !ð !ñ „Xð!ð&ð &ð &ð &ð(ð (ð (ð (ð	ð 	ð 	ð 	ð*ð *ð *ð *ðð ð ð ðð ð ð ð ÐÐ-Ñ.Ô.à$)ð
ð 
ð 
ð 
ñ /Ô.ð
ð
ð 
ð 
ð 
ð 
ðð ð ð ð ð ð ð r–   rv  c                  ój   — e Zd ZU dZded<   edd	„¦   «         Zdd„ZeZe	dd„¦   «         Z
dd„Zdd„ZdS )Ú	DtypeViewz(Pretend our storage has a different typer  Útarget_dtyper‹   r‰   Ú	new_dtyper�   r”  c                óâ   — t          |¦  «        rPt          |¦  «        \  }}t          |j        ||j        |j        |j        |j        ¦  «        }t          ||¬¦  «        S t          ||¬¦  «        S )Nro  )rp  r7  )
r&  rr  rs  r!  r  r  rt  ru  rv  r6  )r  r‹   r8  rw  rx  rz  s         r”   r·  zDtypeView.createª  s|   € å  Ñ#Ô#ð 
	DÝ"7¸Ñ":Ô":ÑˆG�ZÝ$ØÔ!ØØ”ØÔ!ØÔ!ØÔ$ñô ˆJõ #¨¸
ÐCÑCÔCÐCÝ˜a¨iÐ8Ñ8Ô8Ð8r–   rÃ   c                óD   — |                       | j        | j        g¦  «        S r�   )r   rp  r7  r¸  s    r”   r÷  zDtypeView.__str__¹  s   € Ø�Š ¤	¨4Ô+<Ð=Ñ>Ô>Ð>r–   c                ó   — | j         S r�   )r7  r¸  s    r”   r   zDtypeView.dtype¾  s   € àÔ Ð r–   r{  c                ó4   — | j                              ¦   «         S r�   ©rp  r%  r¸  s    r”   r%  zDtypeView.get_sizeÂ  rq  r–   r;  c                óJ   ‡ ‡— ‰ j                              ¦   «         Šdˆˆ fd„}|S )Nr   r{  r�   rv   c                ó`   •— t          j         ‰| ¦  «        ‰j        ‰j        j        ¦  «        S r�   )ru   r&  r7  rp  r   )r   rd  r¹  s    €€r”   rL  z%DtypeView.make_loader.<locals>.loaderÈ  s'   ø€ ÝÔ'¨¨¨c©
¬
°DÔ4EÀtÄyÄÑWÔWÐWr–   rÇ  ©rp  r>  )r¹  rL  rd  s   ` @r”   r>  zDtypeView.make_loaderÅ  sH   øø€ Ø”	×%Ò%Ñ'Ô'ˆð	Xð 	Xð 	Xð 	Xð 	Xð 	Xð 	Xð ˆr–   N)r‹   r‰   r8  r  r�   r”  rŸ  r“  r¬  r�  )r¥   r¦   r§   r¯  r¨   r3  r·  r÷  r2  rµ  r   r%  r>  r©   r–   r”   r6  r6  ¤  s§   € € € € € € à2Ð2àÐÐÑàð9ð 9ð 9ñ „[ð9ð?ð ?ð ?ð ?ð €Hàð!ð !ð !ñ „Xð!ð$ð $ð $ð $ðð ð ð ð ð r–   r6  c                  óH   — e Zd ZdZedd
„¦   «         Ze	 	 ddd„¦   «         ZdS )Ú	SliceViewzqView that represents a slice along a single dimension.

    Corresponds to tensor[..., start:end:step, ...].
    r‹   r‰   rc  r’   ÚstartÚendr�   útuple[int, int]c                óŒ  ‡ ‡‡‡‡	‡
— t           j        j        Š
|                     ¦   «         |         Št	          d„ ||‰fD ¦   «         ¦  «        rt
          Š	t          Šn9t	          d„ ||‰fD ¦   «         ¦  «        rt
          Š	t          Šn‰
j        Š	‰
j        Šdˆˆ	ˆ
fd	„Šdˆˆ ˆfd„} ||d‰d¦  «        } |||‰‰¦  «        }||fS )zz
        Normalize start and end such that both are in the range
        [0, x.get_size()[dim]] and start <= end.
        c              3  ó4   K  — | ]}t          |¦  «        V — Œd S r�   )r6   r  s     r”   rø   z0SliceView.normalize_start_end.<locals>.<genexpr>ß  s+   è è € ÐHÐH¨AÕ$ QÑ'Ô'ÐHÐHÐHÐHÐHÐHr–   c              3  ó¬   K  — | ]O}t          |t          ¦  «        ¯|                     t          j        t          j        t          t
          ¦  «        V — ŒPd S r�   )r‘   r    Úhasr·   rE   rD   r  s     r”   rø   z0SliceView.normalize_start_end.<locals>.<genexpr>â  s^   è è € ð 
ð 
ð Ý˜!�TÑ"Ô"ð	
à�EŠE•%”)�UœY­­SÑ1Ô1ð
ð 
ð 
ð 
ð 
ð 
r–   r‹   r    Úlowerr’   Úupperr�   c                ó˜   •— ‰                      | |¦  «        r| n ‰| |¦  «        }‰                     ||¦  «        r|n ‰||¦  «        }|S r�   )Ústatically_known_geqrb  )r‹   rJ  rK  Úclamped_lowerÚclamped_fullÚmax_funcÚmin_funcr#  s        €€€r”   Úclampz,SliceView.normalize_start_end.<locals>.clampî  sj   ø€ à×2Ò2°1°eÑ<Ô<ÐT��À(À(È1ÈeÑBTÔBTð ð
 ×0Ò0°ÀÑFÔFð4��à�X˜m¨UÑ3Ô3ð ð
  Ðr–   r"  r¥  r\  ú
Expr | intc                óR   •— | €|S ‰                      | ‰¦  «        }  ‰| ||¦  «        S r�   )rÛ  )r"  rJ  rK  r\  rR  r  Údim_sizes       €€€r”   Ú
clamp_wrapz1SliceView.normalize_start_end.<locals>.clamp_wrapù  s8   ø€ ð ˆ{à�Ø×+Ò+¨C°Ñ:Ô:ˆCØ�5˜˜e UÑ+Ô+Ð+r–   r   )r‹   r    rJ  r’   rK  r’   r�   r    )
r"  r¥  rJ  r’   rK  r’   r\  rS  r�   rS  )	rw   r"  r#  r%  ra  rE   rD   Úevaluate_minÚevaluate_max)r  r‹   rc  rC  rD  rV  rR  rU  rP  rQ  r#  s   `     @@@@@r”   Únormalize_start_endzSliceView.normalize_start_endÔ  s3  øøøøøø€ õ ”7Ô#ˆØ—:’:‘<”< Ô$ˆåÐHÐH°%¸¸hÐ1GÐHÑHÔHÑHÔHð 	-ÝˆHÝˆHˆHÝð 
ð 
ð ˜S (Ð+ð
ñ 
ô 
ñ 
ô 
ð 
	-õ ˆHÝˆHˆHàÔ,ˆHØÔ,ˆHð		 ð 		 ð 		 ð 		 ð 		 ð 		 ð 		 ð 		 ð	,ð 	,ð 	,ð 	,ð 	,ð 	,ð 	,ð 	,ð �
˜5 ! X¨qÑ1Ô1ˆØˆj˜˜e X¨xÑ8Ô8ˆØ�cˆzÐr–   rI   TÚsteprR  r    c           	     óÌ  ‡‡‡‡— t          j        ‰¦  «        Št          ‰t          ¦  «        s‰dk    s
J ‰¦   «         ‚	 ‰dk    r|dk    r‰dk    r|S n# t          $ r Y nw xY wt          |                     ¦   «         ¦  «        Š|r|                      |‰‰|¦  «        \  Š}t          |‰z
  ‰dz
  z   ‰¦  «        ‰‰<   t          |¦  «        r~t          |¦  «        \  }}t          |j        ¦  «        }	|	‰         ‰z  |	‰<   t          |j        |j        ‰|	|j        |j        ‰         ‰z  z   |j        ¦  «        }
t#          ||
¬¦  «        S d
ˆˆˆˆfd„}t%          |‰|¬	¦  «        S )Nr   l   ÿÿÿÿ rI   ro  rÐ   r{  r�   c                ó¨   •— t          | ¦  «        t          ‰¦  «        k    sJ d| › d‰› �¦   «         ‚t          | ¦  «        } | ‰         ‰z  ‰z   | ‰<   | S )Nzwrong ndim rÄ  )rÙ   r°   )rÐ   rc  r�  rC  rZ  s    €€€€r”   rÛ   z!SliceView.create.<locals>.reindex1  sb   ø€ õ �u‘:”:¥ X¡¤Ò.Ð.Ð.Ð0P¸eÐ0PÐ0PÀhÐ0PÐ0PÑ.Ô.Ð.Ý˜‘K”KˆEØ˜sœ dÑ*¨UÑ2ˆE�#‰JØˆLr–   rÕ  r¡  )r·   r  r‘   r    Ú	TypeErrorr°   r%  rY  rC   r&  rr  r  rs  r!  r   rt  ru  rv  rB  )r  r‹   rc  rC  rD  rZ  rR  rw  rx  ry  rz  rÛ   r�  s     `` `      @r”   r·  zSliceView.create  s¼  øøøø€ õ Œ|˜DÑ!Ô!ˆÝ˜$¥Ñ%Ô%Ð7¨°ª¨¨°4©¬Ð1ð	Ø˜Šzˆz˜c YÒ.Ð.°4¸1²9°9Ø�øøÝð 	ð 	ð 	ØˆDð	øøøõ ˜Ÿ
š
™œÑ%Ô%ˆð
 ð 	EØ×0Ò0°°C¸ÀÑDÔD‰JˆE�3å   u¡°°q±Ñ!9¸4Ñ@Ô@ˆ�‰å  Ñ#Ô#ð 	Då"7¸Ñ":Ô":ÑˆG�ZÝ˜jÔ/Ñ0Ô0ˆJØ(¨œo°Ñ4ˆJ�s‰OÝ$ØÔ!ØÔ ØØØÔ! JÔ$5°cÔ$:¸UÑ$BÑBØÔ$ñô ˆJõ #¨¸
ÐCÑCÔCÐCð	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	õ ˜a h¸Ð@Ñ@Ô@Ð@s   ¿A Á
A!Á A!N)
r‹   r‰   rc  r’   rC  r’   rD  r’   r�   rE  )rI   T)r‹   r‰   rc  r’   rC  r’   rD  r’   rZ  r’   rR  r    r�   r‰   )r¥   r¦   r§   r¯  r3  rY  r·  r©   r–   r”   rB  rB  Î  ss   € € € € € ðð ð
 ð/ð /ð /ñ „[ð/ðb ð Øð3Að 3Að 3Að 3Añ „[ð3Að 3Að 3Ar–   rB  c                  óD   — e Zd ZU ded<   ded<   dd„Zdd	„Zdd„Zdd„ZdS )ÚBaseConstantr  r   r2  r!  r�   r{  c                ó   — dS ©Nr©   r©   r¸  s    r”   r%  zBaseConstant.get_sizeB  s   € Øˆrr–   r0  c                ó   — | j         S r�   rú  r¸  s    r”   r+  zBaseConstant.get_deviceE  rû  r–   r¢  c                ó   — d S r�   r©   r¸  s    r”   rÒ  zBaseConstant.get_origin_nodeH  r×  r–   rm  c                ó   — t          ¦   «         S r�   r?   r¸  s    r”   rË  zBaseConstant.get_readsK  rÙ  r–   Nr¬  r›  r�  r¨  )r¥   r¦   r§   r¨   r%  r+  rÒ  rË  r©   r–   r”   r_  r_  =  s~   € € € € € € àÐÐÑØÐÐÑðð ð ð ðð ð ð ðð ð ð ðð ð ð ð ð r–   r_  c                  óF   — e Zd ZU ded<   ded<   ded<   dd	„Zdd„Zdd„ZdS )ÚConstantr   r1  r  r   r2  r!  r�   r;  c                ó   ‡ — dˆ fd„}|S )NrÐ   r{  r�   rv   c                óB   •— t          j        ‰j        ‰j        ¦  «        S r�   )ru   r9  r1  r   ©rÐ   r¹  s    €r”   rL  z$Constant.make_loader.<locals>.loaderV  s   ø€ Ý”< ¤
¨D¬JÑ7Ô7Ð7r–   r®  r©   r(  s   ` r”   r>  zConstant.make_loaderU  s(   ø€ ð	8ð 	8ð 	8ð 	8ð 	8ð 	8ð ˆr–   r8  c                ó   — d S r�   r©   r¸  s    r”   r*  zConstant.realize[  rW  r–   r‰   c                ó:   — t          | j        | j        |¬¦  «        S )N)r1  r   r!  )rf  r1  r   r5  s     r”   rƒ  zConstant.constant_to_device^  s   € Ý˜dœj°´
À6ÐJÑJÔJÐJr–   Nr�  r™  r­  )r¥   r¦   r§   r¨   r>  r*  rƒ  r©   r–   r”   rf  rf  O  sy   € € € € € € à€J€J�JØÐÐÑØÐÐÑðð ð ð ðð ð ð ðKð Kð Kð Kð Kð Kr–   rf  c                  ó>   — e Zd ZU ded<   ded<   ded<   dd	„Zdd„ZdS )ÚIndexingConstantr   rÐ   r  r   r2  r!  r�   r;  c                ó   ‡ — dˆ fd„}|S )NrÐ   r{  r�   rv   c                óB   •— t          j        ‰j        ‰j        ¦  «        S r�   )ru   r  rÐ   r   ri  s    €r”   rL  z,IndexingConstant.make_loader.<locals>.loaderi  s   ø€ Ý”> $¤*¨d¬jÑ9Ô9Ð9r–   r®  r©   r(  s   ` r”   r>  zIndexingConstant.make_loaderh  s(   ø€ ð	:ð 	:ð 	:ð 	:ð 	:ð 	:ð ˆr–   r‰   c                ó:   — t          | j        | j        |¬¦  «        S )N)rÐ   r   r!  )rm  rÐ   r   r5  s     r”   rƒ  z#IndexingConstant.constant_to_devicen  s   € Ý d¤j¸¼
È6ÐRÑRÔRÐRr–   Nr�  r­  )r¥   r¦   r§   r¨   r>  rƒ  r©   r–   r”   rm  rm  b  se   € € € € € € à€J€J�JØÐÐÑØÐÐÑðð ð ð ðSð Sð Sð Sð Sð Sr–   rm  c                óF  — d}d}t          t          t          || ¦  «        ¦  «        ¦  «        D ]q\  }}|dk    rŒt          j        j                             ||¦  «        s(t          j        j                             ||¦  «        s dS |t          d|¦  «        z  }||z  }ŒrdS ©NrI   FT)Úreversedr±   rÝ   rw   r"  r#  rm  rD   )r  r`  Úexpected_strideÚexpected_stride_maxr‹   Úys         r”   Úis_contiguous_strides_for_shaperw  r  sµ   € ð €OØÐÝ��s 5¨&Ñ1Ô1Ñ2Ô2Ñ3Ô3ð 
ð 
‰ˆˆ1Ø�Š6ˆ6ØåŒwÔ×7Ò7Øˆñ
ô 
ð 	å”'Ô"×:Ò:¸1Ð>QÑRÔRð	ð �5�5à�s 1 a™yœyÑ(ÐØ˜1Ñˆˆàˆ4r–   c                ó*   — t           j        | j        z  S r�   )rJ   Úpadding_alignment_bytesÚitemsizer  s    r”   Úget_align_for_dtyper{  †  s   € ÝÔ)¨U¬^Ñ;Ð;r–   c                  ó.   — e Zd ZdZdd„Zdd„Z	 ddd„ZdS )r<  zxAbstract base for Layout, MultiOutputLayout, NoneLayout.
    Represents the memory layout of the output of an Operation.r�   r0  c                óD   — t          t          | ¦  «        j        ¦  «        ‚r�   r=  r¸  s    r”   r+  zOutputSpec.get_deviceŽ  r?  r–   r’   c                óD   — t          t          | ¦  «        j        ¦  «        ‚r�   r=  r¸  s    r”   rI  zOutputSpec.storage_size‘  r?  r–   Fr�  r    rš   c                óD   — t          t          | ¦  «        j        ¦  «        ‚r�   r=  rw  s     r”   rx  zOutputSpec.get_free_symbol_uses”  r_  r–   Nr›  r©  r¢  r«  )r¥   r¦   r§   r¯  r+  rI  rx  r©   r–   r”   r<  r<  Š  sf   € € € € € ðCð Cð7ð 7ð 7ð 7ð7ð 7ð 7ð 7ð %*ð7ð 7ð 7ð 7ð 7ð 7ð 7r–   r<  c                  óÄ  — e Zd ZdZd ed¦  «        dfd=d„Zed>d„¦   «         Zej        d?d„¦   «         Zed@d„¦   «         Z	e	j        dAd„¦   «         Z	edBd„¦   «         Z
e
j        dCd„¦   «         Z
dDd„ZeZdEd„ZdFd „ZdGd!„ZedHd$„¦   «         ZdGd%„ZedId)„¦   «         ZdJd,„ZdGd-„ZedKd/„¦   «         ZdLd0„ZdGd1„ZdMd3„ZdNd5„ZdOd8„ZdBd9„Z ed ¦  «        	 dPdQd<„¦   «         ZdS )Rr
  zo
    Layout base class

    Carries tensor meta-information including offset and
    whether it is pinned.
    Nr   Fr!  r2  r   r  r  r^  r  úSequence[Expr] | Nonert  r    ru  r    r�   r¬   c                ón  — |€t                                |¦  «        }|| _        || _        t	          |¦  «        t	          |¦  «        k    sJ d|› d|› �¦   «         ‚t          d„ |D ¦   «         ¦  «        sJ ‚|| _        || _        || _        || _	        | j	        r| j        j
        dk    sJ d¦   «         ‚d S d S )NrÓ  ú	, stride=c              3  ó@   K  — | ]}t          |t          ¦  «        V — Œd S r�   )r‘   rƒ   rö   s     r”   rø   z"Layout.__init__.<locals>.<genexpr>²  s,   è è € Ð9Ð9¨q•:˜a¥Ñ*Ô*Ð9Ð9Ð9Ð9Ð9Ð9r–   r@  zOnly CPU tensors can be pinned)r(  r)  r!  r   rÙ   rù   Ú_sizeÚ_strideÚ_offsetru  r¾   )r¹  r!  r   r  r  rt  ru  s          r”   r�  zLayout.__init__£  sÚ   € ð ˆ>Ý#×6Ò6°tÑ<Ô<ˆFàˆŒØˆŒ
Ý�4‰yŒy�C ™KœKÒ'Ð'Ð'Ð)H°Ð)HÐ)HÀÐ)HÐ)HÑ'Ô'Ð'ÝÐ9Ð9°DÐ9Ñ9Ô9Ñ9Ô9Ð9Ð9Ð9ØˆŒ
ØˆŒØˆŒØ"ˆŒà”Nð 	
¨¬Ô(8¸EÒ(AÐ(AÐ(AØ,ñ )BÔ(AÐBð 	
ð 	
Ð(AÐ(Ar–   c                ó   — | j         S r�   ©r…  r¸  s    r”   r  zLayout.size¼  ó
   € àŒzÐr–   r1  c                ó   — || _         d S r�   r‰  ©r¹  r1  s     r”   r  zLayout.sizeÀ  s   € àˆŒ
ˆ
ˆ
r–   r{  c                ó   — | j         S r�   ©r†  r¸  s    r”   r  zLayout.strideÄ  ó
   € àŒ|Ðr–   c                ó   — || _         d S r�   rŽ  rŒ  s     r”   r  zLayout.strideÈ  ó   € àˆŒˆˆr–   c                ó   — | j         S r�   ©r‡  r¸  s    r”   rt  zLayout.offsetÌ  r�  r–   c                ó   — || _         d S r�   r“  rŒ  s     r”   rt  zLayout.offsetÐ  r‘  r–   rÃ   c                ó  — d}| j         dk    r
d| j         › �}| j        j        €dnd| j        j        › �}d}| j        r
d| j        › �}t	          | ¦  «        j        › d| j        j        › |› d| j        › d| j        › d	| j        › |› |› d
�S )Nrî  r   z	, offset=ú:z, is_pinned=z('z', z, size=rƒ  r;  )	rt  r!  rÐ   ru  r¾   r¥   r   r  r  )r¹  rt  Údevice_index_strÚis_pinned_strs       r”   r÷  zLayout.__str__Ô  sæ   € ØˆØŒ;˜!ÒÐØ. ¤Ð.Ð.ˆFà!%¤Ô!2Ð!:˜2˜2Ð@WÀDÄKÔDUÐ@WÐ@WÐØˆØŒ>ð 	<Ø;¨4¬>Ð;Ð;ˆMå�D‰zŒzÔ"ð Nð N d¤kÔ&6ð NÐ8Hð Nð NÈTÌZð Nð NØ”IðNð NØ(,¬ðNØ5;ðNØ=JðNð Nð Nð	
r–   c                ó   — | j         S r�   rú  r¸  s    r”   r+  zLayout.get_deviceä  rû  r–   r  c                óæ   — t           j        5  t          j        t	          | j        ¦  «        t	          | j        ¦  «        | j        | j        | j	        ¬¦  «        cd d d ¦  «         S # 1 swxY w Y   d S )N)r   r!  Ú
pin_memory)
rw   Ú	fake_moder-  r.  re   r  r  r   r!  ru  r¸  s    r”   Úget_examplezLayout.get_exampleç  s¬   € ÝŒ[ð 	ð 	ÝÔ&Ý'¨¬	Ñ2Ô2Ý'¨¬Ñ4Ô4Ø”jØ”{Øœ>ðñ ô ð	ð 	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	s   �AA&Á&A*Á-A*c                ó6   — t          | j        | j        ¦  «        S r�   )rw  r  r  r¸  s    r”   rD  zLayout.is_contiguousñ  s   € Ý.¨t¬{¸D¼IÑFÔFÐFr–   r`  rh  c                ó°   — t          | ¦  «        }|dvs| d         dk    rdS t          |t          | ¦  «        | ¦  «        D ]\  }}}|dk    r	||k    r dS ŒdS )N)rî   é   rI   FT)rÙ   rÝ   r1   )r`  rh  ÚndimÚleftÚrightr  s         r”   Úis_channels_last_contiguousz"Layout.is_channels_last_contiguousô  s|   € õ �5‰zŒzˆØ�vÐÐ  q¤¨Q¢ Ø�5Ý!$àå*¨5Ñ1Ô1Øñ"
ô "
ð 	ð 	ÑˆD�%˜ð �qŠyˆy˜T Uš]˜]Ø�u�uøØˆtr–   c                óð   — t          | j        t          t                               t          t          | j        ¦  «        ¦  «        ¦  «        ¦  «        | j        ¦  «        D ]\  }}}|dk    r	||k    r dS ŒdS rr  )rÝ   r  rs  r(  r)  r°   r  )r¹  r¢  r£  r  s       r”   Úis_transposedzLayout.is_transposed  sw   € Ý!$ØŒKÝ•^×6Ò6µt½HÀTÄYÑ<OÔ<OÑ7PÔ7PÑQÔQÑRÔRØŒIñ"
ô "
ð 	ð 	ÑˆD�%˜ð
 �qŠyˆy˜T Uš]˜]Ø�u�uøØˆtr–   r¢  rƒ   r£  c                ór  — t           j        j        }|                     t	          j        |d¦  «        ¦  «        rdS |                     t	          j        | d¦  «        ¦  «        rdS |                     t	          j        | |¦  «        ¦  «        p*|                     t	          j        | |z  d¦  «        ¦  «        S )zŒ
        Returns true if left is symbolically greater than or equal to right,
        assuming both expressions are tensor strides.
        r   TF)rw   r"  r#  rX  r·   rQ  ÚGe)r¢  r£  r#  s      r”   Ú_stride_expr_ge_or_falsezLayout._stride_expr_ge_or_false  s«   € õ ”7Ô#ˆØ×"Ò"¥5¤8¨E°1Ñ#5Ô#5Ñ6Ô6ð 	Ø�4Ø×"Ò"¥5¤8¨D°!Ñ#4Ô#4Ñ5Ô5ð 	Ø�5Ø×&Ò&ÝŒH�T˜5Ñ!Ô!ñ
ô 
ð @à×$Ò$¥U¤X¨d°U©l¸AÑ%>Ô%>Ñ?Ô?ð	@r–   rÌ   rÍ   c                ó®  ‡ ‡— t          ‰ j        ¦  «        t          ‰¦  «        k    sJ ‚d„ t          ‰ j        ¦  «        D ¦   «         }ˆ fd„|D ¦   «         }ˆfd„|D ¦   «         Šdd„} |‰¦  «        Šdgt          ‰¦  «        z  }t	          t          ‰¦  «        ¦  «        D ]}||         |‰|         <   Œt	          t          ‰¦  «        d	z
  ¦  «        D ]}||         }||d	z            }t
          j        j                             t          j
        ||¦  «        ¦  «        rŒM‰                      ||¦  «        r d
S ‰                      ||¦  «        s d
S Œ€dS )Nc                ób   — g | ],\  }}t           j        j                             |d ¦  «        °*|‘Œ-S r  rl  )rÔ   rÕ   rc  s      r”   r×   z,Layout.is_stride_ordered.<locals>.<listcomp>#  sG   € ð 
ð 
ð 
á��3Ý”7Ô#×;Ò;¸CÀÑCÔCð
Øð
ð 
ð 
r–   c                ó*   •— g | ]}‰j         |         ‘ŒS r©   rª  )rÔ   rÕ   r¹  s     €r”   r×   z,Layout.is_stride_ordered.<locals>.<listcomp>)  s   ø€ Ð8Ð8Ð8 Q�$”+˜a”.Ð8Ð8Ð8r–   c                ó    •— g | ]
}‰|         ‘ŒS r©   r©   )rÔ   rÕ   rÌ   s     €r”   r×   z,Layout.is_stride_ordered.<locals>.<listcomp>*  s   ø€ Ð@Ð@Ð@¨Q  a¤Ð@Ð@Ð@r–   ÚarrrÍ   r�   c                ó>   ‡— t          | ¦  «        Šˆfd„| D ¦   «         S )Nc                ó:   •— g | ]}‰                      |¦  «        ‘ŒS r©   r§  )rÔ   ÚelementÚ
sorted_arrs     €r”   r×   zDLayout.is_stride_ordered.<locals>.sorted_indices.<locals>.<listcomp>.  s'   ø€ ÐAÐAÐA°'�J×$Ò$ WÑ-Ô-ÐAÐAÐAr–   )rÖ  )r®  r²  s    @r”   Úsorted_indicesz0Layout.is_stride_ordered.<locals>.sorted_indices,  s(   ø€ Ý ™œˆJØAÐAÐAÐA¸SÐAÑAÔAÐAr–   rR  rI   FT)r®  rÍ   r�   rÍ   )rÙ   r  r  r  rÚ   rw   r"  r#  rX  r·   rQ  r©  )	r¹  rÌ   Únon_1_indicesr  r³  Ústride_orderedrÕ   r¢  r£  s	   ``       r”   rT  zLayout.is_stride_ordered  s›  øø€ Ý�4”;ÑÔ¥3 u¡:¤:Ò-Ð-Ð-Ð-ð
ð 
å# D¤IÑ.Ô.ð
ñ 
ô 
ˆð 9Ð8Ð8Ð8¨-Ð8Ñ8Ô8ˆØ@Ð@Ð@Ð@°-Ð@Ñ@Ô@ˆð	Bð 	Bð 	Bð 	Bð
 �˜uÑ%Ô%ˆð ˜¥ E¡
¤
Ñ*ˆÝ•s˜5‘z”zÑ"Ô"ð 	1ð 	1ˆAØ'-¨a¤yˆN˜5 œ8Ñ$Ð$å•s˜5‘z”z A‘~Ñ&Ô&ð 	ð 	ˆAØ! !Ô$ˆDØ" 1 q¡5Ô)ˆEÝŒwÔ×.Ò.­u¬x¸¸eÑ/DÔ/DÑEÔEð ØØ×,Ò,¨T°5Ñ9Ô9ð Ø�u�uØ×0Ò0°¸Ñ=Ô=ð Ø�u�uðàˆtr–   c                óØ   — dgt          t          t          dt          | j        ¦  «        dz
  ¦  «        ¦  «        ¦  «        z   }t          |¦  «        g|z   }|                      |¦  «        S ©Nr   rI   )r°   rs  rÚ   rÙ   r  rT  ra  s     r”   Úis_channels_last_stride_orderedz&Layout.is_channels_last_stride_orderedC  s]   € à�•d�8¥E¨!­S°´Ñ-=Ô-=ÀÑ-AÑ$BÔ$BÑCÔCÑDÔDÑDˆÝ�U‘”�˜uÑ$ˆØ×%Ò% eÑ,Ô,Ð,r–   Ú
in_stridesc                ó‚  ‡‡— t          |¦  «        }t          | ¦  «        dk    r| S t          j        st                               || ¦  «        r| S t          j        ¦   «         }t          |d¦  «        r|j	         
                    dd¦  «        r| S t          d„ t          j        | |¦  «        D ¦   «         ¦  «         }t          j        s|r| S t          t          j        d¦  «        rt          j        j        ndŠdˆfd„Š‰rt#          ˆfd„| D ¦   «         ¦  «        r| S t%          | ‰¦  «        }t'          |¦  «        }d„ t)          t          | ¦  «        ¦  «        D ¦   «         }d||d         <   d}	t+          |dd…         d¬¦  «        D ]›\  }
}||
dz
           }||         ||         z  }t-          |t.          t0          j        f¦  «        o|t          j        k    o||z  dk    p t-          |t6          ¦  «        ot          j        }|||<   |rt9          ||¦  «        |z  ||<   d}	Œœ|	s| S t:          xj        dz  c_        |S )zŽ
        The padding does not change stride order but makes sure all strides larger
        than the threshold are multiple of align.
        r   r†  Údislike_paddingFc              3  óX   K  — | ]%}t          |t          t          j        f¦  «        V — Œ&d S r�   rõ   rö   s     r”   rø   z&Layout._pad_strides.<locals>.<genexpr>b  sG   è è € ð 
ð 
àõ �q�3¥¤Ð.Ñ/Ô/ð
ð 
ð 
ð 
ð 
ð 
r–   Ú
_shape_envNrê  rS  r�   r    c                óz   •— ‰€dS t          | t          ¦  «        sdS t          ˆfd„| j        D ¦   «         ¦  «        S )NFc              3  óB   •K  — | ]}‰                      |¦  «        V — Œd S r�   )Úis_unbacked_symint)rÔ   r÷   rñ   s     €r”   rø   zILayout._pad_strides.<locals>.contains_unbacked_symints.<locals>.<genexpr>p  s1   øè è € ÐRÐR¸1�y×3Ò3°AÑ6Ô6ÐRÐRÐRÐRÐRÐRr–   )r‘   r    ra  r5   )rê  rñ   s    €r”   Úcontains_unbacked_symintsz6Layout._pad_strides.<locals>.contains_unbacked_symintsk  sK   ø€ ØÐ Ø�uÝ˜d¥DÑ)Ô)ð Ø�uÝÐRÐRÐRÐRÀÔ@QÐRÑRÔRÑRÔRÐRr–   c              3  ó.   •K  — | ]} ‰|¦  «        V — Œd S r�   r©   )rÔ   r÷   rÁ  s     €r”   rø   z&Layout._pad_strides.<locals>.<genexpr>s  s/   øè è € ÐNÐN¸aÐ6Ð6°qÑ9Ô9ÐNÐNÐNÐNÐNÐNr–   c                ó   — g | ]}d ‘ŒS r  r©   r  s     r”   r×   z'Layout._pad_strides.<locals>.<listcomp>y  s   € Ð9Ð9Ð9˜Q�qÐ9Ð9Ð9r–   rI   )rC  T)rê  rS  r�   r    )r{  rÙ   rJ   Úpad_channels_lastr
  r¤  rw   Úget_current_noderà  r†  rå  rù   r  ÚchainÚpad_dynamic_shapesr"  r½  ra  r  r  rÚ   r  r‘   r’   r·   r!   Úpadding_stride_thresholdr    rc   r'   Únum_comprehensive_padding)r¹  r  r   ÚalignÚcurrent_fx_noderm   rL  r  Únew_stridesÚpaddedÚrankr   Úprev_idxr  Úrequire_paddingrÁ  rñ   s                  @@r”   rC  zLayout._pad_stridesI  sÃ  øø€ õ $ EÑ*Ô*ˆÝˆz‰?Œ?˜aÒÐØÐåÔ'ð 	­F×,NÒ,NØ�*ñ-
ô -
ð 	ð ÐåÔ,Ñ.Ô.ˆÝ�? FÑ+Ô+ð 	°Ô0D×0HÒ0HØ˜uñ1
ô 1
ð 	ð Ðõ ð 
ð 
å”_ Z°Ñ6Ô6ð
ñ 
ô 
ñ 
ô 
ð 
ˆ
õ Ô(ð 	¨Zð 	ØÐå*1µ!´'¸<Ñ*HÔ*HÐR•A”GÔ&Ð&Èdˆ	ð	Sð 	Sð 	Sð 	Sð 	Sð 	Sð ð 	�ÐNÐNÐNÐNÀ:ÐNÑNÔNÑNÔNð 	ØÐå'¨
°IÑ>Ô>ˆÝ,¨\Ñ:Ô:ˆ
à9Ð9¥%­¨J©¬Ñ"8Ô"8Ð9Ñ9Ô9ˆð &'ˆ�J˜q”MÑ"àˆÝ" :¨a¨b¨b¤>¸Ð;Ñ;Ô;ð 	ð 	‰IˆD�#Ø! $¨¡(Ô+ˆHØ  Ô*¨T°(¬^Ñ;ˆFõ ˜6¥C­¬Ð#7Ñ8Ô8ð (Ø�VÔ<Ò<ð(à˜U‘N aÒ'ðJõ ˜V¥TÑ*Ô*ÐH­vÔ/Hð	 ð
  &ˆK˜ÑØð Ý#*¨6°5Ñ#9Ô#9¸EÑ#A�˜CÑ Ø�øàð 	ð Ðõ 	Ð)Ô)¨QÑ.Ð)Ô)ØÐr–   c                óÆ   — t          | t          ¦  «        sJ t          | ¦  «        ¦   «         ‚| j        €J ‚|                      | j        | j        | j        ¦  «        | _        d S r�   )r‘   r(  r¾   r  rC  r  r   r¸  s    r”   Úpad_strideszLayout.pad_strides˜  sW   € Ý˜$¥Ñ/Ô/Ð;Ð;µ°d±´Ñ;Ô;Ð/ØŒ{Ð&Ð&Ð&Ø×'Ò'¨¬°T´YÀÄ
ÑKÔKˆŒˆˆr–   c                óD   — t           j        ot          | t          ¦  «        S r�   )rJ   Úcomprehensive_paddingr‘   r(  r¸  s    r”   rB  zLayout.should_pad_strides�  s   € ÝÔ+ÐPµ
¸4ÅÑ0PÔ0PÐPr–   rs  c                óä   — t          | t          ¦  «        r| S |                      ¦   «         r|                      ¦   «          t          | j        | j        | j        | j        | j        | j	        ¦  «        S r�   )
r‘   rs  rB  rÒ  r!  r   r  r  rt  ru  r¸  s    r”   Úas_fixedzLayout.as_fixed   so   € Ý�d�KÑ(Ô(ð 	ØˆKà×"Ò"Ñ$Ô$ð 	Ø×ÒÑÔÐÝØŒKØŒJØŒIØŒKØŒKØŒNñ
ô 
ð 	
r–   r@  c                ó¦   — t           j        s J dt          | ¦  «        j        › d�¦   «         ‚|                      ¦   «                              ¦   «         S )Nzconvert z to FixedLayout first)r(  r  r¾   r¥   rÖ  rB  r¸  s    r”   rB  zLayout.make_indexer¯  sR   € ÝÔ,ð 	
ð 	
ØA•t˜D‘z”zÔ*ÐAÐAÐAñ	
ô 	
Ð,ð �}Š}‰Œ×+Ò+Ñ-Ô-Ð-r–   ÚotherrŒ   c                óì   — t          |t          ¦  «        o_| j        |j        k    oO| j        |j        k    o?| j        |j        k    o/| j        |j        k    o| j        |j        k    o| j        |j        k    S r�   )r‘   r
  r!  r   r  r  rt  ru  )r¹  rØ  s     r”   Ú__eq__zLayout.__eq__µ  s‚   € å�u�fÑ%Ô%ð 2Ø”˜uœ|Ò+ð2à”
˜eœkÒ)ð2ð ”	˜UœZÒ'ð2ð ”˜uœ|Ò+ð	2ð
 ”˜uœ|Ò+ð2ð ” %¤/Ò1ð	
r–   c                óB   — t          | j        | j        | j        ¦  «        S r�   )r-   r  r  rt  r¸  s    r”   rI  zLayout.storage_sizeÀ  s   € Ý.¨t¬y¸$¼+ÀtÄ{ÑSÔSÐSr–   r�  rš   c                ó„   — t          | j        |¦  «        t          | j        |¦  «        z  t          | j        |¦  «        z  S r�   )r)   r  r  rt  rw  s     r”   rx  zLayout.get_free_symbol_usesÃ  s@   € õ
 ˜TœY¨Ñ6Ô6Ý˜tœ{¨MÑ:Ô:ñ;å˜tœ{¨MÑ:Ô:ñ;ð	
r–   )r!  r2  r   r  r  r^  r  r�  rt  r    ru  r    r�   r¬   r—  )r1  r^  r�   r¬   r¬  ©r1  r{  r�   r¬   r˜  ©r1  r    r�   r¬   rŸ  rœ  )r�   r  r–  )r`  r^  rh  r^  r�   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    r¢  r«  )r¥   r¦   r§   r¯  r!   r�  rµ  r  Úsetterr  rt  r÷  r2  r+  r�  rD  r²  r¤  r¦  r©  rT  r¸  rC  rÒ  rB  rÖ  rB  rÚ  rI  rb   rx  r©   r–   r”   r
  r
  š  sÉ  € € € € € ðð ð )-Ø�w˜q‘z”zØð
ð 
ð 
ð 
ð 
ð2 ðð ð ñ „Xðð 
„[ðð ð ñ „[ðð ðð ð ñ „Xðð „]ðð ð ñ „]ðð ðð ð ñ „Xðð „]ðð ð ñ „]ðð
ð 
ð 
ð 
ð €Hðð ð ð ðð ð ð ðGð Gð Gð Gð ðð ð ñ „\ðð"ð ð ð ð ð@ð @ð @ñ „\ð@ð"ð "ð "ð "ðH-ð -ð -ð -ð ðLð Lð Lñ „\ðLð\Lð Lð Lð Lð
Qð Qð Qð Qð
ð 
ð 
ð 
ð.ð .ð .ð .ð	
ð 	
ð 	
ð 	
ðTð Tð Tð Tð Ð˜HÑ%Ô%à$)ð
ð 
ð 
ð 
ñ &Ô%ð
ð 
ð 
r–   r
  c                  ó   — e Zd ZdZdd„ZdS )rs  z A Tensor layout we cannot changer�   r@  c                óB   — t          | j        | j        | j        ¦  «        S )r‹  )r  r  r  rt  r¸  s    r”   rB  zFixedLayout.make_indexerÑ  s   € å˜dœi¨¬°d´kÑBÔBÐBr–   Nrž  )r¥   r¦   r§   r¯  rB  r©   r–   r”   rs  rs  Î  s4   € € € € € Ø*Ð*ðCð Cð Cð Cð Cð Cr–   rs  c                  ó”  ‡ — e Zd ZdZdZd4d„Zed5d	„¦   «         Zed6d„¦   «         Zed7d„¦   «         Z	ed8d„¦   «         Z
ed9d„¦   «         Zed:d„¦   «         Zej        d;d„¦   «         Zed:d„¦   «         Zej        d;d„¦   «         Zed<d„¦   «         Zej        d=d„¦   «         Z	 d>d?d„Z	 d>d@d!„ZdAd"„ZdBd#„ZdCd%„ZdDd)„Z	 	 dEdFˆ fd3„Zˆ xZS )Gr(  z|
    A Tensor layout that we are allowed to change

    Assumption: layout change should NOT add or remove free symbols
    Fr�   rs  c                óN   — t          j        | ¦  «                             ¦   «         S )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Í  ÚdeepcopyrÖ  r¸  s    r”   Ú!get_fixed_layout_without_freezingz0FlexibleLayout.get_fixed_layout_without_freezingß  s    € õ Œ}˜TÑ"Ô"×+Ò+Ñ-Ô-Ð-r–   ÚsizesrÍ   rŒ  c                óø   — t          | ¦  «        dk    rg S t          j        j        g}t	          | dd …         ¦  «        D ] }|                     ||d         z  ¦  «         Œ!t          t	          |¦  «        ¦  «        S )Nr   rI   rR  )rÙ   r·   r  rü  rs  ró  r°   )rç  Úreversed_stridesr  s      r”   r)  z!FlexibleLayout.contiguous_stridesé  s|   € åˆu‰:Œ:˜Š?ˆ?ØˆIÝ!œGœK˜=ÐÝ˜U 1 2 2œYÑ'Ô'ð 	Að 	AˆDØ×#Ò# DÐ+;¸BÔ+?Ñ$?Ñ@Ô@Ð@Ð@Ý•HÐ-Ñ.Ô.Ñ/Ô/Ð/r–   rÌ   c                ó  — t          t          t          | ¦  «        ¦  «        ¦  «        t          |¦  «        k    sJ | |f¦   «         ‚t          j        j        }dgt          |¦  «        z  }|D ]}|||<   || |         z  }Œ|S )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  rü  )rç  rÌ   Únext_striderh  rÕ   s        r”   Úfill_orderedzFlexibleLayout.fill_orderedò  s‡   € õ �%¥ E¡
¤
Ñ+Ô+Ñ,Ô,µ
¸5Ñ0AÔ0AÒAÐAÐAÀEÈ5À>ÑAÔAÐAÝ”g”kˆØ�&�3˜u™:œ:Ñ%ˆàð 	1ð 	1ˆAØ$ˆG�A‰JØ%¨¨a¬Ñ0ˆKˆKØˆr–   r{  c                óÎ   — t          t          t          | ¦  «        ¦  «        ¦  «        t          |¦  «        k    sJ ‚t          |¦  «        }t                               | |¦  «        S )zš
        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(  rì  )rç  rÌ   r  s      r”   rµ  zFlexibleLayout.stride_ordered  sV   € õ �%¥ E¡
¤
Ñ+Ô+Ñ,Ô,µ
¸5Ñ0AÔ0AÒAÐAÐAÐAÝ,¨UÑ3Ô3ˆ
Ý×*Ò*¨5°*Ñ=Ô=Ð=r–   Úmemory_formatútorch.memory_formatc                óZ  — |t           j        k    r t                               | t          ¦  «        S |t           j        k    r t                               | t          ¦  «        S |t           j        k    rt                               | ¦  «        S t           
                    d|¦  «         t          ‚)aq  
        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ç  rî  s     r”   Ú stride_ordered_for_memory_formatz/FlexibleLayout.stride_ordered_for_memory_format  s”   € ð �EÔ/Ò/Ð/Ý!×0Ò0°Õ8IÑJÔJÐJØ�eÔ4Ò4Ð4Ý!×0Ò0°Õ8JÑKÔKÐKØ�eÔ5Ò5Ð5Ý!×4Ò4°UÑ;Ô;Ð;å�IŠIØPØñô ð õ &Ð%r–   r  r^  c                ó$  — t          | ¦  «        t          |¦  «        k    sJ ‚t          j        j                             |¦  «        }t          t          t          |¦  «        ¦  «        |j        ¬¦  «        }t           	                    | |¦  «        S )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Ù   rw   r"  r#  Úguarding_hints_or_throwrÖ  rÚ   Ú__getitem__r(  rì  )rç  r  r  s      r”   Úsame_orderedzFlexibleLayout.same_ordered*  sr   € õ �5‰zŒz�S ™[œ[Ò(Ð(Ð(Ð(Ý”Ô!×9Ò9¸&ÑAÔAˆÝ�E¥# f¡+¤+Ñ.Ô.°FÔ4FÐGÑGÔGˆ
Ý×*Ò*¨5°*Ñ=Ô=Ð=r–   c                ó   — | j         S r�   r‰  r¸  s    r”   r  zFlexibleLayout.size9  rŠ  r–   r1  r¬   c                ó@   — |                       d|¦  «         || _        d S )Nr  )Ú!assert_free_symbol_uses_unchangedr…  rŒ  s     r”   r  zFlexibleLayout.size=  s#   € à×.Ò.¨v°uÑ=Ô=Ð=ØˆŒ
ˆ
ˆ
r–   c                ó   — | j         S r�   rŽ  r¸  s    r”   r  zFlexibleLayout.strideB  r�  r–   c                ó@   — |                       d|¦  «         || _        d S )Nr  )rý  r†  rŒ  s     r”   r  zFlexibleLayout.strideF  ó#   € à×.Ò.¨x¸Ñ?Ô?Ð?ØˆŒˆˆr–   r    c                ó   — | j         S r�   r“  r¸  s    r”   rt  zFlexibleLayout.offsetK  r�  r–   c                ó@   — |                       d|¦  «         || _        d S )Nrt  )rý  r‡  rŒ  s     r”   rt  zFlexibleLayout.offsetO  r   r–   r[  r    c                ó   — |                       | j        |¦  «        }|                      ¦   «         r#|r!|                      || j        | j        ¦  «        }t          | j        | j        | j        || j        | j        ¦  «        S r�   )	rµ  r  rB  rC  r   rs  r!  rt  ru  )r¹  rÌ   r[  ry  s       r”   Úas_stride_orderzFlexibleLayout.as_stride_orderT  s�   € ð ×(Ò(¨¬°EÑ:Ô:ˆ
Ø×"Ò"Ñ$Ô$ð 	N¨ð 	NØ×*Ò*¨:°t´yÀ$Ä*ÑMÔMˆJåØŒKØŒJØŒIØØŒKØŒNñ
ô 
ð 	
r–   rf  c                óÎ   — |}|                       ¦   «         r#|r!|                      || j        | j        ¦  «        }t	          | j        | j        | j        || j        | j        ¦  «        S r�   )rB  rC  r  r   rs  r!  rt  ru  )r¹  rf  r[  ry  s       r”   Úas_exact_strideszFlexibleLayout.as_exact_stridesd  so   € ð #ˆ
Ø×"Ò"Ñ$Ô$ð 	N¨ð 	NØ×*Ò*¨:°t´yÀ$Ä*ÑMÔMˆJåØŒKØŒJØŒIØØŒKØŒNñ
ô 
ð 	
r–   c                óü   — |                       | j        |¦  «        }|                      ¦   «         r!|                      || j        | j        ¦  «        }t          | j        | j        | j        || j        | j        ¦  «        S r�   )	rì  r  rB  rC  r   rs  r!  rt  ru  )r¹  rÌ   ry  s      r”   Úas_fill_orderzFlexibleLayout.as_fill_ordert  sw   € Ø$(×$5Ò$5°d´iÀÑ$GÔ$Gˆ
Ø×"Ò"Ñ$Ô$ð 	NØ×*Ò*¨:°t´yÀ$Ä*ÑMÔMˆJÝØŒKØŒJØŒIØØŒKØŒNñ
ô 
ð 	
r–   c                óü   — |                       | j        |¦  «        }|                      ¦   «         r!|                      || j        | j        ¦  «        }t          | j        | j        | j        || j        | j        ¦  «        S r�   )	rú  r  rB  rC  r   rs  r!  rt  ru  )r¹  r  ry  s      r”   Úas_same_orderzFlexibleLayout.as_same_order�  sw   € Ø×&Ò& t¤y°&Ñ9Ô9ˆ
Ø×"Ò"Ñ$Ô$ð 	NØ×*Ò*¨:°t´yÀ$Ä*ÑMÔMˆJÝØŒKØŒJØŒIØØŒKØŒNñ
ô 
ð 	
r–   ú$dict[tuple[str, bool], sympy.Symbol]c           
     ó‚   — i }dD ]9}dD ]4}||f}t          t          t          | |¦  «        |¦  «        ¦  «        ||<   Œ5Œ:|S )N)r  r  rt  ©TF)r@   r)   rÉ   )r¹  Úinitial_free_symbolsrÂ   r�  rÐ  s        r”   Úget_initial_free_symbol_usesz+FlexibleLayout.get_initial_free_symbol_usesŽ  sl   € Ø!ÐØ0ð 	ð 	ˆDØ!.ð ð �Ø˜]Ð+�Ý,6Ý$¥W¨T°4Ñ%8Ô%8¸-ÑHÔHñ-ô -Ð$ SÑ)Ð)ðð $Ð#r–   rÂ   rÃ   r9   c                ó”   — dD ]D}| j         ||f         }t          t          ||¦  «        ¦  «        }||k    sJ d|› d|› �¦   «         ‚ŒEd S )Nr  z)Expected free symbols unchanged, but got z vs )r  r@   r)   )r¹  rÂ   r1  r�  Úold_free_symbolsÚnew_free_symbolss         r”   rý  z0FlexibleLayout.assert_free_symbol_uses_unchanged™  sy   € Ø*ð 	ð 	ˆMØ#Ô8¸$ÀÐ9NÔOÐÝ)Õ*:¸5À-Ñ*PÔ*PÑQÔQÐØ#Ð'7Ò7Ð7Ð7ØdÐ<LÐdÐdÐRbÐdÐdñ 8Ô7Ð7Ð7ð	ð 	r–   Nr!  r2  r   r  r  rL  rM  ru  c                óö   •— |rt                                ||¦  «        }nt                                |¦  «        }t          ¦   «                              |||||¬¦  «         |                      ¦   «         | _        d S )N©ru  )r(  rì  r)  r   r�  r  r  )r¹  r!  r   r  rL  ru  rh  r¢  s          €r”   r�  zFlexibleLayout.__init__¡  sv   ø€ ð ð 	>Ý$×1Ò1°$¸ÑEÔEˆGˆGå$×7Ò7¸Ñ=Ô=ˆGÝ‰Œ×Ò˜ ¨¨gÀÐÑKÔKÐKð %)×$EÒ$EÑ$GÔ$GˆÔ!Ð!Ð!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�   rs  )rf  r^  r[  r    r�   rs  )rÌ   rÍ   r�   rs  )r  r^  r�   rs  )r�   r  )rÂ   rÃ   r1  r9   r�   r¬   r8  )r!  r2  r   r  r  r{  rL  rM  ru  r    r�   r¬   )r¥   r¦   r§   r¯  r  ræ  r²  r)  rì  rµ  rö  rú  rµ  r  rà  r  rt  r  r  r  r
  r  rý  r�  r‡  rˆ  s   @r”   r(  r(  Ö  so  ø€ € € € € ðð ð €Nð.ð .ð .ð .ð ð0ð 0ð 0ñ „\ð0ð ðð ð ñ „\ðð  ð	>ð 	>ð 	>ñ „\ð	>ð ð&ð &ð &ñ „\ð&ð4 ð>ð >ð >ñ „\ð>ð ðð ð ñ „Xðð 
„[ðð ð ñ „[ðð ðð ð ñ „Xðð „]ðð ð ñ „]ðð ðð ð ñ „Xðð „]ðð ð ñ „]ðð
 ;@ð
ð 
ð 
ð 
ð 
ð" HMð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð
ð 
ð 
ð 
ð	$ð 	$ð 	$ð 	$ðð ð ð ð 8<ØðHð Hð Hð Hð Hð Hð Hð Hð Hð Hð Hr–   r(  c                  ób   ‡ — e Zd ZdZdˆ fd„Zdd„Zdd
„Z ed ¦  «        	 ddd„¦   «         Zˆ xZ	S )ÚNonOwningLayoutz,Is a view into the storage of another tensorÚviewúBaseView | TensorBoxr�   r¬   c                ó®   •— |                      ¦   «         }t          ¦   «                              |j        |j        |j        |j        ¦  «         || _        d S r�   )r'  r   r�  r!  r   r  r  r  )r¹  r  rq  r¢  s      €r”   r�  zNonOwningLayout.__init__·  sO   ø€ Ø—’Ñ"Ô"ˆÝ‰Œ×ÒØŒMØŒLØŒKØŒMñ		
ô 	
ð 	
ð ˆŒ	ˆ	ˆ	r–   r@  c                óN   — |                       ¦   «                              ¦   «         S r�   )rÖ  rB  r¸  s    r”   rB  zNonOwningLayout.make_indexerÁ  s   € Ø�}Š}‰Œ×+Ò+Ñ-Ô-Ð-r–   r    c                ó¤   — | j                              ¦   «         j        }|dk    rdS ddlm} t
          j        j                             ||¦  «        S )Nr   TrI   )Ú	ALIGNMENT)	r  r'  rt  Úutilsr  rw   r"  r#  rX  )r¹  rt  r  s      r”   Úmaybe_guard_alignedz#NonOwningLayout.maybe_guard_alignedÄ  sS   € Ø”×%Ò%Ñ'Ô'Ô.ˆØ�QŠ;ˆ;Ø�4Ø$Ð$Ð$Ð$Ð$Ð$åŒwÔ×<Ò<¸VÀYÑOÔOÐOr–   Fr�  rš   c                óD  — t          | j        t          ¦  «        sJ ‚| j        j        }t          |t          ¦  «        sJ t          |¦  «        ¦   «         ‚|j        }t          |t          ¦  «        sJ t          |¦  «        ¦   «         ‚|j                             |¦  «        S r�   )	r‘   r  rv  rp  r–  r¾   r—  rq  rx  )r¹  r�  ÚboxÚinput_buffers       r”   rx  z$NonOwningLayout.get_free_symbol_usesÌ  s‹   € õ ˜$œ)¥_Ñ5Ô5Ð5Ð5Ð5ØŒiŒnˆÝ˜#�zÑ*Ô*Ð5Ð5­D°©I¬IÑ5Ô5Ð*Ø”xˆÝ˜,­Ñ/Ô/Ð:Ð:µ°c±´Ñ:Ô:Ð/ØÔ"×7Ò7¸ÑFÔFÐFr–   )r  r  r�   r¬   rž  r–  r¢  r«  )
r¥   r¦   r§   r¯  r�  rB  r  rb   rx  r‡  rˆ  s   @r”   r  r  ´  s­   ø€ € € € € Ø6Ð6ðð ð ð ð ð ð.ð .ð .ð .ðPð Pð Pð Pð ÐÐ-Ñ.Ô.à$)ðGð Gð Gð Gñ /Ô.ðGð Gð Gð Gð Gr–   r  c                  ó   — e Zd ZdZdS )ÚCommBufferTypeÚsymm_memN)r¥   r¦   r§   ÚSYMM_MEMr©   r–   r”   r#  r#  Ø  s   € € € € € Ø€H€H€Hr–   r#  c                  ó:   ‡ — e Zd ZU dZded<   ded<   d	ˆ fd„Zˆ xZS )
ÚCommBufferLayoutax  
    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_namerq  úFlexibleLayout | FixedLayoutc                ó  •— t          |t          ¦  «        r|                     ¦   «         n|}t          ¦   «                              |j        |j        |j        |j        |j	        |j
        ¬¦  «         || _        || _        d S )N©r!  r   r  r  rt  ru  )r‘   r(  rÖ  r   r�  r!  r   r  r  rt  ru  r(  r)  )r¹  rq  r(  r)  Úfixedr¢  s        €r”   r�  zCommBufferLayout.__init__ë  s|   ø€ õ &0°½Ñ%GÔ%GÐS�—’Ñ!Ô!Ð!ÈVˆÝ‰Œ×ÒØ”<Ø”+Ø”Ø”<Ø”<Ø”oð 	ñ 	
ô 	
ð 	
ð !1ˆÔØ$ˆŒˆˆr–   )rq  r*  r(  r#  r)  rÃ   )r¥   r¦   r§   r¯  r¨   r�  r‡  rˆ  s   @r”   r'  r'  Ü  s`   ø€ € € € € € ð	ð 	ð %Ð$Ð$Ñ$Ø€O€O�Oð%ð %ð %ð %ð %ð %ð %ð %ð %ð %r–   r'  c                  óŽ   — e Zd ZU ded<    ej        d„ ¬¦  «        Zded<    ej        d„ ¬¦  «        Zded<   dd„Zdd„Z	dd„Z
dS )Ú
NoneLayoutr0  r!  c                 ó   — dgS r$  r©   r©   r–   r”   rÎ  zNoneLayout.<lambda>	  s   € ÀÀ€ r–   ©Údefault_factoryr¬  r  c                 ó   — dgS r$  r©   r©   r–   r”   rÎ  zNoneLayout.<lambda>
  s   € À1À#€ r–   r  r�   r’   c                ó   — dS r$  r©   r¸  s    r”   rI  zNoneLayout.storage_size  r4  r–   r<  c                ó   — | S r�   r©   r¸  s    r”   rÖ  zNoneLayout.as_fixed  ó   € Øˆr–   c                ó   — | j         S r�   rú  r¸  s    r”   r+  zNoneLayout.get_device  rû  r–   Nr©  r•  r›  )r¥   r¦   r§   r¨   r°  r±  r  r  rI  rÖ  r+  r©   r–   r”   r/  r/  þ  s¦   € € € € € € ð  ÐÐÑØ'�kÔ'¸¸ÐDÑDÔD€DÐDÐDÐDÑDØ)˜Ô)¸+¸+ÐFÑFÔF€FÐFÐFÐFÑFðð ð ð ðð ð ð ðð ð ð ð ð r–   r/  c                  óž   ‡ — e Zd Zdˆ fd„Zedd„¦   «         Zej        dd
„¦   «         Zdd„Zdd„Zd d„Z	e
	 d!d"d„¦   «         Zd#d„Zd$d„Zˆ xZS )%ÚMutationLayoutSHOULDREMOVEr¢  r‰   r�   r¬   c                óT  •— t          ¦   «                              |                     ¦   «         |                     ¦   «         |                     ¦   «         d ¦  «         || _        |                      ¦   «                              ¦   «         }t          j	         
                    |¦  «         d S r�   )r   r�  r6  r*  r%  r¢  Ú
get_bufferr˜  rw   r"  Úmark_buffer_mutated)r¹  r¢  rÂ   r¢  s      €r”   r�  z#MutationLayoutSHOULDREMOVE.__init__  s�   ø€ Ý‰Œ×ÒØ×&Ò&Ñ(Ô(Ø×ÒÑÔØ�OŠOÑÔØñ		
ô 	
ð 	
ð ˆŒØ�ŠÑ Ô ×)Ò)Ñ+Ô+ˆÝ	Œ×#Ò# DÑ)Ô)Ð)Ð)Ð)r–   r{  c                ó4   — |                       ¦   «         j        S r�   )Úreal_layoutr  r¸  s    r”   r  z!MutationLayoutSHOULDREMOVE.stride"  s   € à×ÒÑ!Ô!Ô(Ð(r–   r1  r   c                ó   — d S r�   r©   rŒ  s     r”   r  z!MutationLayoutSHOULDREMOVE.stride&  s   € àˆr–   r    c                óN   — |                       ¦   «                              ¦   «         S r�   )r>  rI  r¸  s    r”   rI  z'MutationLayoutSHOULDREMOVE.storage_size*  s    € Ø×ÒÑ!Ô!×.Ò.Ñ0Ô0Ð0r–   r—  c                óŒ   ‡— dˆfd„Š ‰| j         ¦  «        }t          |t          ¦  «        sJ t          |¦  «        ¦   «         ‚|S )Nr¢  r   r�   c                ó   •— t          | t          ¦  «        r ‰| j        ¦  «        S t          | t          ¦  «        r ‰|                      ¦   «         ¦  «        S t          | t
          ¦  «        r ‰| j        ¦  «        S | S r�   )r‘   r9  r¢  r”  r•  Ú
MutableBoxrp  )r¢  Úunwrap_viewss    €r”   rD  z;MutationLayoutSHOULDREMOVE.get_buffer.<locals>.unwrap_views.  s   ø€ Ý˜&Õ"<Ñ=Ô=ð 3Ø#�| F¤MÑ2Ô2Ð2Ý˜&¥(Ñ+Ô+ð :Ø#�| F×$6Ò$6Ñ$8Ô$8Ñ9Ô9Ð9Ý˜&¥*Ñ-Ô-ð 1Ø#�| F¤KÑ0Ô0Ð0ØˆMr–   )r¢  r   r�   r   )r¢  r‘   r—  r¾   )r¹  r�  rD  s     @r”   r;  z%MutationLayoutSHOULDREMOVE.get_buffer-  s]   ø€ ð	ð 	ð 	ð 	ð 	ð 	ð �˜dœkÑ*Ô*ˆÝ˜&¥&Ñ)Ô)Ð7Ð7­4°©<¬<Ñ7Ô7Ð)Øˆr–   r
  c                óf   — |                       ¦   «         j        }t          |t          ¦  «        sJ ‚|S r�   )r;  rq  r‘   r
  )r¹  rq  s     r”   r>  z&MutationLayoutSHOULDREMOVE.real_layout;  s/   € Ø—’Ñ"Ô"Ô)ˆÝ˜&¥&Ñ)Ô)Ð)Ð)Ð)Øˆr–   FÚsrcÚdstÚunsafe_aliasr    c                óv  — |                      ¦   «          t          j                             |                     ¦   «         ¦  «         t          |t          ¦  «        r|j        }|                     ¦   «          |sµt           
                    |                     ¦   «         |                     ¦   «         |                     ¦   «         d„ t          |                     ¦   «         |                     ¦   «         ¦  «        D ¦   «         ¬¦  «        }t          |t           t"          f¦  «        sJ ‚|j        }|                      ¦   «          t%          |d¦  «        s
J |¦   «         ‚t          |j        j        t(          ¦  «        s!J t+          |j        j        ¦  «        ¦   «         ‚t-          |¦  «        |j        _        |j        S )Nc                ó^   — g | ]*\  }}t           j        j                             ||¦  «        ‘Œ+S r©   ©rw   r"  r#  Úcheck_equals_and_simplify©rÔ   rs  ru  s      r”   r×   z;MutationLayoutSHOULDREMOVE.realize_into.<locals>.<listcomp>Z  sA   € ð ð ð á˜˜1õ ”GÔ$×>Ò>¸qÀ!ÑDÔDðð ð r–   rR  rp  )r*  rw   r"  r<  r˜  r‘   rˆ   rp  rV  r=  r·  r+  r*  r>  rÝ   r%  r”  rC  rà  rq  r(  r¾   r9  )r  rF  rG  rH  r¿   s        r”   Úrealize_intoz'MutationLayoutSHOULDREMOVE.realize_into@  sp  € ð 	�Š‰Œˆõ 	
Œ×#Ò# C§L¢L¡N¤NÑ3Ô3Ð3å�c�9Ñ%Ô%ð 	Ø”(ˆCð 	×ÒÑÔÐàð 	Ý×#Ò#Ø—~’~Ñ'Ô'Ø—m’m‘o”oØŸšÑ*Ô*ðð å # C§L¢L¡N¤N°C·L²L±N´NÑ CÔ Cðñ ô ð	 $ñ ô ˆDõ ˜d¥X­zÐ$:Ñ;Ô;Ð;Ð;Ð;Ø”)ˆCà�Š‰ŒˆÝ�s˜FÑ#Ô#Ð(Ð( SÑ(Ô(Ð#Ý˜#œ(œ/­>Ñ:Ô:ÐQÐQ½DÀÄÄÑ<QÔ<QÑQÔQÐ:Ý4°SÑ9Ô9ˆŒŒØŒxˆr–   r   c                ó   — | S r�   r©   r¸  s    r”   rÖ  z#MutationLayoutSHOULDREMOVE.as_fixedh  r6  r–   r@  c                ó4   — | j                              ¦   «         S r�   )r¢  rB  r¸  s    r”   rB  z'MutationLayoutSHOULDREMOVE.make_indexerk  r*  r–   )r¢  r‰   r�   r¬   r¬  )r1  r   r�   r¬   r˜  )r�   r—  r”  r¢  )rF  r‰   rG  r‰   rH  r    r�   r‰   )r�   r   rž  )r¥   r¦   r§   r�  rµ  r  rà  rI  r;  r>  r3  rN  rÖ  rB  r‡  rˆ  s   @r”   r9  r9    s  ø€ € € € € ð	*ð 	*ð 	*ð 	*ð 	*ð 	*ð ð)ð )ð )ñ „Xð)ð „]ðð ð ñ „]ðð1ð 1ð 1ð 1ðð ð ð ðð ð ð ð
 à<Að%ð %ð %ð %ñ „[ð%ðNð ð ð ð*ð *ð *ð *ð *ð *ð *ð *r–   r9  c                  ó^  ‡ — e Zd ZU ded<   ded<   d?ˆ fd„Zd@d	„ZdAd„ZdBd„ZdCd„ZdDd„Z	e
dEd„¦   «         ZdFd„ZdGd„ZdHd„ZdId„ZdJd„ZdKd„ZdLd „Zd?d!„Z	 dMdNd&„ZdOd'„ZdPd)„Z	 dMdQd+„ZdLd,„ZdRd.„ZdSdTd2„Zd?d3„ZdUd5„ZdUd6„ZdVd8„Z ed ¦  «        	 dMdWd;„¦   «         Z dXd<„Z!dYd=„Z"dLd>„Z#ˆ xZ$S )Zr—  r8  rÂ   r<  rq  r�   r¬   c                ót   •— t          ¦   «                              ¦   «          |                      dd ¦  «         d S r¿  )r   rÂ  r¾  rê  s    €r”   rÂ  zBuffer.__post_init__y  s5   ø€ Ý‰Œ×ÒÑÔÐØ×Ò ¨tÑ4Ô4Ð4Ð4Ð4r–   r@  c                óN   — |                       ¦   «                              ¦   «         S r�   )r'  rB  r¸  s    r”   rB  zBuffer.make_indexer}  s   € Ø�ŠÑ Ô ×-Ò-Ñ/Ô/Ð/r–   rÃ   c                ó2   — | j         s
J | ¦   «         ‚| j         S r�   rÆ  r¸  s    r”   r˜  zBuffer.get_name€  s   € ØŒyÐÐ˜$ÑÔˆyØŒyÐr–   útorch.Tensor | torch.SymIntc                ó´   — t          | j        t          ¦  «        r| j                             ¦   «         S t	          t          | j        ¦  «        j        ¦  «        ‚r�   )r‘   rq  r
  r�  r  r¾   r¥   r¸  s    r”   r�  zBuffer.get_example„  sE   € Ý�d”k¥6Ñ*Ô*ð 	-Ø”;×*Ò*Ñ,Ô,Ð,Ý!¥$ t¤{Ñ"3Ô"3Ô"<Ñ=Ô=Ð=r–   r0  c                óN   — |                       ¦   «                              ¦   «         S r�   )r  r+  r¸  s    r”   r+  zBuffer.get_device‰  s    € Ø×#Ò#Ñ%Ô%×0Ò0Ñ2Ô2Ð2r–   rÔ  c                ó   — d S r�   r©   r¸  s    r”   rÖ  zBuffer.get_defining_opŒ  r×  r–   r  c                ó4   — |                       ¦   «         j        S r�   )r'  r   r¸  s    r”   r   zBuffer.dtype�  s   € à�ŠÑ Ô Ô&Ð&r–   r{  c                ó8   — g |                       ¦   «         j        ¢S r�   )r'  r  r¸  s    r”   r%  zBuffer.get_size“  s   € Ø(�—’Ñ"Ô"Ô'Ð(Ð(r–   rŒ  c                ó8   — g |                       ¦   «         j        ¢S r�   )r'  r  r¸  s    r”   rT  zBuffer.get_stride–  s   € Ø*�—’Ñ"Ô"Ô)Ð*Ð*r–   r    c                ó4   — |                       ¦   «         j        S r�   )r'  rt  r¸  s    r”   Ú
get_offsetzBuffer.get_offset™  s   € Ø�ŠÑ Ô Ô'Ð'r–   r
  c                ó�   — t          | j        t          ¦  «        r| j        S t          t	          | j        ¦  «        j        ¦  «        ‚r�   )r‘   rq  r
  r  r¾   r¥   r¸  s    r”   r'  zBuffer.get_layoutœ  s9   € Ý�d”k¥6Ñ*Ô*ð 	Ø”;ÐÝ!¥$ t¤{Ñ"3Ô"3Ô"<Ñ=Ô=Ð=r–   c                ó   — | j         S r�   r,  r¸  s    r”   r  zBuffer.get_output_spec¡  rû  r–   r’   c                ó*   — |                       ¦   «         S r�   )r"  r¸  s    r”   ru  zBuffer.get_storage_numel¤  s   € Ø�~Š~ÑÔÐr–   r    c                ó4   — |                       ¦   «         j        S r�   )r'  ru  r¸  s    r”   Úget_is_pinnedzBuffer.get_is_pinned§  s   € Ø�ŠÑ Ô Ô*Ð*r–   c                ó²   — t          | j        t          ¦  «        r:t          | j        t          ¦  «        s"| j                             ¦   «         | _        d S d S d S r�   )r‘   rq  r
  r  rÖ  r¸  s    r”   rZ  zBuffer.freeze_layoutª  s]   € Ý�d”k¥6Ñ*Ô*ð 	1µ:ØŒK�ñ4
ô 4
ð 	1ð œ+×.Ò.Ñ0Ô0ˆDŒKˆKˆKð	1ð 	1ð 	1ð 	1r–   FrÌ   rÍ   r[  c                ó´   — t          | j        t          ¦  «        sJ t          | j        ¦  «        ¦   «         ‚| j                             ||¬¦  «        | _        d S ©NrQ  )r‘   rq  r(  r¾   r  r]  s      r”   r^  z&Buffer.freeze_layout_with_stride_order°  sN   € õ ˜$œ+¥~Ñ6Ô6ÐIÐI½¸T¼[Ñ8IÔ8IÑIÔIÐ6Ø”k×1Ò1°%À}Ð1ÑUÔUˆŒˆˆr–   c                ó°   — t          | j        t          ¦  «        sJ t          | j        ¦  «        ¦   «         ‚| j                             |¦  «        | _        d S r�   )r‘   rq  r(  r¾   r  ra  s     r”   rb  z$Buffer.freeze_layout_with_fill_order¶  sG   € Ý˜$œ+¥~Ñ6Ô6ÐIÐI½¸T¼[Ñ8IÔ8IÑIÔIÐ6Ø”k×/Ò/°Ñ6Ô6ˆŒˆˆr–   r  c                ó°   — t          | j        t          ¦  «        sJ t          | j        ¦  «        ¦   «         ‚| j                             |¦  «        | _        d S r�   )r‘   rq  r(  r¾   r
  rd  s     r”   re  z$Buffer.freeze_layout_with_same_orderº  sG   € Ý˜$œ+¥~Ñ6Ô6ÐIÐI½¸T¼[Ñ8IÔ8IÑIÔIÐ6Ø”k×/Ò/°Ñ7Ô7ˆŒˆˆr–   rf  c                ó´   — t          | j        t          ¦  «        sJ t          | j        ¦  «        ¦   «         ‚| j                             ||¬¦  «        | _        d S re  )r‘   rq  r(  r¾   r  rh  s      r”   ri  z'Buffer.freeze_layout_with_exact_strides¾  sU   € õ ˜$œ+¥~Ñ6Ô6ÐIÐI½¸T¼[Ñ8IÔ8IÑIÔIÐ6Ø”k×2Ò2Ø¨ð 3ñ 
ô 
ˆŒˆˆr–   c                ó”   — t           j        j                             t	          j        |                      ¦   «         d¦  «        ¦  «        S r$  r%  r¸  s    r”   r'  zBuffer.is_zero_elementsÆ  r(  r–   r;  c                óŒ   ‡ — ‰                       ¦   «         r(t          t          ‰                      ¦   «         ¬¦  «        S dˆ fd„}|S )Nr  rÐ   r{  r�   rv   c                óv   •— ‰                      ¦   «         }t          j        ‰j        pd || ¦  «        ¦  «        S rH  )rB  ru   r%  rÂ   ©rÐ   rD  r¹  s     €r”   rL  z"Buffer.make_loader.<locals>.loaderÎ  s5   ø€ Ø×'Ò'Ñ)Ô)ˆGÝ”8˜DœIÐ2¨°G°G¸E±N´NÑCÔCÐCr–   r®  )r'  r   r;  r*  r(  s   ` r”   r>  zBuffer.make_loaderÉ  s`   ø€ à× Ò Ñ"Ô"ð 	BÝ�=°·²Ñ0@Ô0@ÐAÑAÔAÐAð	Dð 	Dð 	Dð 	Dð 	Dð 	Dð ˆr–   Nr+  r,  c                ó*   — |                       ¦   «         S r�   ©r˜  r.  s     r”   r/  zBuffer.codegen_referenceÔ  rs  r–   c                ó   — d S r�   r©   r¸  s    r”   rØ  zBuffer.decide_layout×  rW  r–   rì  c                óx   — t          | j        t          ¦  «        r| j        j                             ¦   «         gS dS ra  )r‘   rq  r  r  r˜  r¸  s    r”   r‰  z#Buffer.get_inputs_that_alias_outputÚ  s5   € Ý�d”k¥?Ñ3Ô3ð 	1Ø”KÔ$×-Ò-Ñ/Ô/Ð0Ð0Øˆrr–   c                óx   — t          | j        t          ¦  «        r| j        j                             ¦   «         gS dS ra  )r‘   rq  r9  r¢  r˜  r¸  s    r”   r…  zBuffer.get_mutation_namesß  s6   € Ý�d”kÕ#=Ñ>Ô>ð 	3Ø”KÔ&×/Ò/Ñ1Ô1Ð2Ð2Øˆrr–   rÃ  c                óF   — t          |                      ¦   «         g¦  «        S r�   )r@   r˜  r¸  s    r”   rÌ  zBuffer.get_read_namesä  s   € Ý˜4Ÿ=š=™?œ?Ð+Ñ,Ô,Ð,r–   r�  rš   c                ó   — t          ¦   «         S r�   r?   rw  s     r”   rx  zBuffer.get_free_symbol_usesç  ó   € õ ‰|Œ|Ðr–   c                ó   — t          ¦   «         S r�   r?   r¸  s    r”   rØ  zBuffer.get_unbacked_symbol_defsí  rÙ  r–   c                ó   — d S r�   r©   r¸  s    r”   r*  zBuffer.realizeð  rW  r–   c                ó   — dS r8  r©   r¸  s    r”   Úshould_allocatezBuffer.should_allocateó  s   € àˆur–   r�  rž  rŸ  )r�   rU  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�  r�   rš  r®  rŽ  r«  rÞ  r™  )%r¥   r¦   r§   r¨   rÂ  rB  r˜  r�  r+  rÖ  rµ  r   r%  rT  r]  r'  r  ru  rb  rZ  r^  rb  re  ri  r'  r>  r/  rØ  r‰  r…  rÌ  rb   rx  rØ  r*  rx  r‡  rˆ  s   @r”   r—  r—  o  sî  ø€ € € € € € ð ÐÐÑØÐÐÑð
5ð 5ð 5ð 5ð 5ð 5ð0ð 0ð 0ð 0ðð ð ð ð>ð >ð >ð >ð
3ð 3ð 3ð 3ðð ð ð ð ð'ð 'ð 'ñ „Xð'ð)ð )ð )ð )ð+ð +ð +ð +ð(ð (ð (ð (ð>ð >ð >ð >ð
ð ð ð ð ð  ð  ð  ð+ð +ð +ð +ð1ð 1ð 1ð 1ð ;@ðVð Vð Vð Vð Vð7ð 7ð 7ð 7ð8ð 8ð 8ð 8ð
 CHð
ð 
ð 
ð 
ð 
ðUð Uð Uð Uð	ð 	ð 	ð 	ðð ð ð ð ðð ð ð ðð ð ð ð
ð ð ð ð
-ð -ð -ð -ð Ð˜HÑ%Ô%à$)ðð ð ð ñ &Ô%ðð
ð ð ð ðð ð ð ðð ð ð ð ð ð ð r–   r—  c                  ó4   — e Zd Zd	d„Zd
d„Zej        Zdd„ZdS )ÚOperationBufferr�   rÔ  c                ó   — | gS r�   r©   r¸  s    r”   rÖ  zOperationBuffer.get_outputsû  s	   € Øˆvˆr–   r·  c                ó   — | S r�   r©   r¸  s    r”   rÖ  zOperationBuffer.get_defining_opþ  r6  r–   r¬   c                ón   — t                                | ¦  «         t                               | ¦  «         d S r�   )r—  rÂ  r·  r¸  s    r”   rÂ  zOperationBuffer.__post_init__  s0   € Ý×Ò˜TÑ"Ô"Ð"Ý×Ò Ñ%Ô%Ð%Ð%Ð%r–   NrÝ  ©r�   r·  r�  )r¥   r¦   r§   rÖ  rÖ  r·  r‡  rÂ  r©   r–   r”   rz  rz  ø  s[   € € € € € ðð ð ð ðð ð ð ð #Ô5Ðð&ð &ð &ð &ð &ð &r–   rz  c                  ó   — e Zd Zdd„ZdS )r±  r�   r’   c                ó   — dS rÂ  r©   r¸  s    r”   rs  zInputBuffer.num_reads
  r4  r–   Nr©  )r¥   r¦   r§   rs  r©   r–   r”   r±  r±  	  s(   € € € € € ðð ð ð ð ð r–   r±  c                  ó   — e Zd ZdZdS )ÚDonatedBufferaY  
    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.
    N)r¥   r¦   r§   r¯  r©   r–   r”   r‚  r‚    s   € € € € € ðð ð ð r–   r‚  c                  ó.   — e Zd ZU dZded<   dd„Zdd
„ZdS )rS  Nr0  rQ  r�   r;  c                ó   ‡ — dˆ fd„}|S )NrÐ   r{  r�   rv   c                óö   •— ‰                      ¦   «                              ¦   «         }t          j        t          j                             ‰                     ¦   «         ‰j        ¦  «         || ¦  «        ¦  «        S r�   )	r'  rB  ru   r%  rw   r"  Úconstant_namer˜  rQ  rl  s     €r”   rL  z*ConstantBuffer.make_loader.<locals>.loader  s]   ø€ Ø—o’oÑ'Ô'×4Ò4Ñ6Ô6ˆGÝ”8Ý”×%Ò% d§m¢m¡o¤o°tÔ7KÑLÔLØ�˜‘”ñô ð r–   r®  r©   r(  s   ` r”   r>  zConstantBuffer.make_loader  s(   ø€ ð	ð 	ð 	ð 	ð 	ð 	ð ˆr–   r!  r2  r‰   c                óŽ   — t          t          j                             |                      ¦   «         |¦  «        | j        ¬¦  «        S ©N©rÂ   rq  )rS  rw   r"  r†  r˜  rq  r5  s     r”   rƒ  z!ConstantBuffer.constant_to_device%  s:   € ÝÝ”×&Ò& t§}¢}¡¤¸Ñ?Ô?ÈÌð
ñ 
ô 
ð 	
r–   r�  r­  )r¥   r¦   r§   rQ  r¨   r>  rƒ  r©   r–   r”   rS  rS    sO   € € € € € € Ø+/€OÐ/Ð/Ð/Ñ/ðð ð ð ð
ð 
ð 
ð 
ð 
ð 
r–   rS  c                  ó^   — e Zd Zdd„Z ed ¦  «        	 ddd„¦   «         Zddd„Zdd„Zdd„Zd	S )ÚNoneAsConstantBufferr�   rm  c                ó   — t          ¦   «         S r�   r?   r¸  s    r”   rË  zNoneAsConstantBuffer.get_reads-  rÙ  r–   Fr�  r    rš   c                ó   — t          ¦   «         S r�   r?   rw  s     r”   rx  z)NoneAsConstantBuffer.get_free_symbol_uses0  rt  r–   Nr+  r,  rÃ   c                ó.   — t           j        j        j        S r�   )rw   r"  r0  Únone_strr.  s     r”   r/  z&NoneAsConstantBuffer.codegen_reference6  s   € ÝŒwÔ#Ô,Ð,r–   r<  c                ó"   — t          d ¬¦  «        S ©Nrú  )r/  r¸  s    r”   r  z$NoneAsConstantBuffer.get_output_spec9  s   € Ý Ð&Ñ&Ô&Ð&r–   c                ó   — dS r8  r©   r¸  s    r”   r  z&NoneAsConstantBuffer.has_tensor_output<  r:  r–   r¨  r¢  r«  r�   rš  r•  r–  )	r¥   r¦   r§   rË  rb   rx  r/  r  r  r©   r–   r”   r‹  r‹  +  sž   € € € € € ðð ð ð ð ÐÐ2Ñ3Ô3à$)ðð ð ð ñ 4Ô3ðð
-ð -ð -ð -ð -ð'ð 'ð 'ð 'ðð ð ð ð ð r–   r‹  c                  óZ   — e Zd ZU ded<    ed ¦  «        	 ddd„¦   «         Zddd„Zdd„Zd	S )r¼   r    rê  Fr�  r    r�   rš   c                ó,   — t          | j        |¦  «        S r�   )r)   rê  rw  s     r”   rx  z*ShapeAsConstantBuffer.get_free_symbol_usesD  s   € õ   ¤	¨=Ñ9Ô9Ð9r–   Nr+  r,  rÃ   c                óT   — t           j        j                             | j        ¦  «        S r�   )rw   r"  r0  Úcodegen_sizevarrê  r.  s     r”   r/  z'ShapeAsConstantBuffer.codegen_referenceJ  s   € ÝŒwÔ#×3Ò3°D´IÑ>Ô>Ð>r–   c                ó   — dS r8  r©   r¸  s    r”   r  z'ShapeAsConstantBuffer.has_tensor_outputM  r:  r–   r¢  r«  r�   rš  r–  )r¥   r¦   r§   r¨   rb   rx  r/  r  r©   r–   r”   r¼   r¼   @  s   € € € € € € à€J€J�JàÐÐ3Ñ4Ô4à$)ð:ð :ð :ð :ñ 5Ô4ð:ð
?ð ?ð ?ð ?ð ?ðð ð ð ð ð r–   r¼   c                  ó²  ‡ — e Zd ZU dZded<   dZded<   dZded	<   dZd
ed<   dZded<   dZ	ded<   e
j        dEd„¦   «         Zee
j        dEd„¦   «         ¦   «         ZdFd„ZdGd„ZdHd„ZdId„ZdJd„Z ed ¦  «        	 dKdLd „¦   «         ZdMˆ fd"„ZdNd#„ZdOd%„ZdPd'„ZdQd)„ZedRd+„¦   «         Z	 	 dSdTd0„Ze	 dUdVd:„¦   «         ZdWd<„ZdWd=„Z dFd>„Z!dNd?„Z"dNd@„Z#dXdD„Z$ˆ xZ%S )Yr¯  zb
    Represents a buffer that is computed during kernel execution rather than being an input.
    rà  rp  FzClassVar[bool]Ú_force_realizeNr¥  rA  úCallable[..., Any] | NonerB  r  rC  rD  r�   úIterator[None]c           
   #  ó2  K  — | j         €J ‚| j        €J ‚| j        €J ‚| j        €J ‚t	          | j        t          ¦  «        sJ t          | j        ¦  «        › ¦   «         ‚| j        }| j        }	 t          |j	        |j
        | j        | j        | j        |j        |j        |j        ¬¦  «        }|| _        t          |j	        |j
        | j        ¦  «        | _        | j                             | ¦  «         d V — || _        || _        d S # || _        || _        w xY w)Nr³  )rA  rB  rC  rD  r‘   rp  r™  r¾   rq  r!  r   rh  r›  rœ  rs  Úget_default_sizes_bodyÚclear_cache)r¹  Úold_datarx  Únew_datas       r”   Úwith_original_inner_fnz%ComputedBuffer.with_original_inner_fn`  s?  è è € àÔÐ+Ð+Ð+ØÔ&Ð2Ð2Ð2ØÔ$Ð0Ð0Ð0ØÔ.Ð:Ð:Ð:å˜$œ)¥YÑ/Ô/ÐEÐEµD¸¼±O´OÐ1EÑEÔEÐ/Ø”9ˆØ”[ˆ
ð	%Ý Ø”Ø”nØÔ0ØÔ,Ø!%Ô!@Ø'Ô6Ø"Ô,Ø'Ô6ð	ñ 	ô 	ˆHð !ˆDŒIõ &Ø”Ø”ØÔ%ñô ˆDŒKð
 Ô'×3Ò3°DÑ9Ô9Ð9ØˆEˆEˆEà ˆDŒIØ$ˆDŒKˆKˆKøð !ˆDŒIØ$ˆDŒKÐ$Ð$Ð$Ð$s   Á-B	D ÄDc               #  ó~   K  — t           j        } 	 dt           _        d V — | t           _        d S # | t           _        w xY w©NT)r¯  r™  )Ú	old_values    r”   Úforce_realizezComputedBuffer.force_realizeƒ  sH   è è € õ #Ô1ˆ	ð	6Ø,0�NÔ)ØˆEˆEˆEà,5�NÔ)Ð)Ð)ø¨I�NÔ)Ð5Ð5Ð5Ð5s   �. ®<r8  c                ód   — | j         �| j         S t          | j        d¦  «        r| j        j         S dS )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à  rp  r¸  s    r”   Úget_computed_buffer_namez'ComputedBuffer.get_computed_buffer_name�  s7   € ð
 Œ9Ð Ø”9ÐÝ�4”9˜fÑ%Ô%ð 	"Ø”9”>Ð!Øˆtr–   r’   c                ó4   — | j                              ¦   «         S r�   ©rp  rs  r¸  s    r”   rs  zComputedBuffer.num_reads˜  r…  r–   rm  c                ó4   — | j                              ¦   «         S r�   ©rp  rË  r¸  s    r”   rË  zComputedBuffer.get_reads›  r…  r–   rÃ  c                ó4   — | j                              ¦   «         S r�   r‰  r¸  s    r”   rÌ  zComputedBuffer.get_read_namesž  rŠ  r–   rj  c                óš  — t          | j        t          t          t          t
          f¦  «        s;t          j        t          ¦   «         t          ¦   «         t          ¦   «         ¬¦  «        S t          j
        t          dd¦  «        5  | j                             ¦   «         r]t          |                      ¦   «         | j                             ¦   «         | j                             ¦   «         ¦  «        cd d d ¦  «         S t          |                      ¦   «         | j                             ¦   «         ¦  «        cd d d ¦  «         S # 1 swxY w Y   d S )N©rp  ÚwritesÚindex_exprsr  T)r‘   rp  r™  rÞ  r  r=  rK   Ú
ReadWritesr@   r   rŒ   r(  rz  rT   Úget_store_functionrÿ  r}  r%  r¸  s    r”   rl  zComputedBuffer.get_read_writes¡  st  € Ý˜$œ)¥iµµt½YÐ%GÑHÔHð 	ÝÔ*Ý ‘l”lÝ!‘|”|Ý&™LœLðñ ô ð õ Œ\�.Ð*:¸DÑAÔAð 	ð 	ØŒy×+Ò+Ñ-Ô-ð 
Ý*Ø×+Ò+Ñ-Ô-Ø”I×0Ò0Ñ2Ô2Ø”I×0Ò0Ñ2Ô2ñô ð	ð 	ð 	ð 	ñ 	ô 	ð 	ð 	õ +Ø×+Ò+Ñ-Ô-Ø”I×&Ò&Ñ(Ô(ñô ð	ð 	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	s   ÂA*E Ã;8E Å EÅEr�  r    rš   c                óì   — | j                              |¦  «        | j                             |¦  «        z  }|                      ¦   «         r*||                      ¦   «                              |¦  «        z  }|S r�   )rq  rx  rp  Úhas_store_functionrl  )r¹  r�  r�  s      r”   rx  z#ComputedBuffer.get_free_symbol_uses¶  sv   € ð$ ”×1Ò1Øñ
ô 
àŒI×*Ò*¨=Ñ9Ô9ñ:ˆð ×"Ò"Ñ$Ô$ð 	QØ�d×*Ò*Ñ,Ô,×AÒAÀ-ÑPÔPÑPˆFØˆr–   r;  c                ó  •— |                       ¦   «         sP| j        t          j        j        vr8|                      ¦   «         dk    r | j        s| j                             ¦   «         S t          ¦   «                              ¦   «         S r$  )
rz  rÂ   rw   r"  Úmutated_buffersrs  r™  rp  r>  r   rê  s    €r”   r>  zComputedBuffer.make_loaderÐ  su   ø€ à×'Ò'Ñ)Ô)ð	+à”	¥¤Ô!8Ð8Ð8Ø—’Ñ Ô  AÒ%Ð%ØÔ'ð &ð ”9×(Ò(Ñ*Ô*Ð*Ý‰wŒw×"Ò"Ñ$Ô$Ð$r–   c                ó\   — t          | j        t          t          t          t
          f¦  «        S r�   )r‘   rp  r™  rÞ  r  r=  r¸  s    r”   r´  z!ComputedBuffer.has_store_functionÛ  s   € Ý˜$œ)¥iµµt½YÐ%GÑHÔHÐHr–   úCallable[..., None]c                ó¬  — |                       ¦   «                              ¦   «                              ¦   «         }t          | j        t
          t          t          f¦  «        r t          | j        j	        | j
        |¦  «        S t          | j        t          ¦  «        sJ t          | j        ¦  «        ¦   «         ‚t          | j        j        | j
        |¦  «        S r�   )r'  rÖ  rB  r‘   rp  r™  rÞ  r  r   rª  rÂ   r=  r¾   rM  )r¹  rD  s     r”   r²  z!ComputedBuffer.get_store_functionÞ  sŸ   € Ø—/’/Ñ#Ô#×,Ò,Ñ.Ô.×;Ò;Ñ=Ô=ˆÝ�d”i¥)­Tµ4Ð!8Ñ9Ô9ð 	GÝ˜4œ9Ô4°d´iÀÑIÔIÐIå˜dœi­Ñ3Ô3ÐDÐDµT¸$¼)±_´_ÑDÔDÐ3Ý˜4œ9Ô1°4´9¸gÑFÔFÐFr–   úlist[int] | Nonec                ó:  ‡‡— t          | j        t          ¦  «        rþt          j        | j                             ¦   «         | j                             ¦   «         ¦  «        \  \  }Š}|                      ¦   «         j	        }t          d„ |D ¦   «         ¦  «        sJ ‚ˆfd„|D ¦   «         }|rqt          | j        t          t          f¦  «        r| j                             |‰¦  «        Šn|Šˆfd„|D ¦   «         }ddlm}  |||                      ¦   «         ¦  «        S dS )al  
        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  ób   K  — | ]*}t          |t          j        t          j        f¦  «        V — Œ+d S r�   )r‘   rK   ÚStarDepÚ	MemoryDeprr  s     r”   rø   z0ComputedBuffer.get_fill_order.<locals>.<genexpr>õ  sK   è è € ð ð àõ ˜1�|Ô3µ\Ô5KÐLÑMÔMðð ð ð ð ð r–   c                ó‚   •— g | ];}t          |t          j        ¦  «        ¯t          |j        d „ ‰D ¦   «         ¦  «        ‘Œ<S )c                ó>   — i | ]}|d k    ¯|t           j        j        “ŒS r  r.  ©rÔ   Úvs     r”   r  z<ComputedBuffer.get_fill_order.<locals>.<listcomp>.<dictcomp>ú  s*   € Ð$WÐ$WÐ$W¸ÐPQÐUVÒPVÐPV Q­¬¬ÐPVÐPVÐPVr–   )r‘   rK   r¾  rs   rÐ   )rÔ   r  r¦  s     €r”   r×   z1ComputedBuffer.get_fill_order.<locals>.<listcomp>ù  sW   ø€ ð ð ð àÝ˜a¥Ô!7Ñ8Ô8ðÝ˜1œ7Ð$WÐ$W¸nÐ$WÑ$WÔ$WÑXÔXðð ð r–   c                óZ   •— g | ]'}t           j        j                             |‰¦  «        ‘Œ(S r©   ©rw   r"  r#  rò  )rÔ   rê  rÛ  s     €r”   r×   z1ComputedBuffer.get_fill_order.<locals>.<listcomp>  s;   ø€ ð "ð "ð "ØEI•A”GÔ$×1Ò1°$¸Ñ@Ô@ð"ð "ð "r–   rI   ©Úpick_loop_orderN)r‘   rq  r(  rK   rÕ  rp  rÿ  r}  rl  rp  rù   rÞ  r  rÛ   Ú	schedulerrÆ  r%  )r¹  Ú
index_varsr  rp  Ústride_lengthsrÆ  rÛ  r¦  s         @@r”   rû   zComputedBuffer.get_fill_orderæ  sl  øø€ õ �d”k¥>Ñ2Ô2ð 	HÝ.:Ô.MØ”	×,Ò,Ñ.Ô.°´	×0LÒ0LÑ0NÔ0Nñ/ô /Ñ+Ñ(ˆZ˜¨!ð ×(Ò(Ñ*Ô*Ô0ˆEõ ð ð àðñ ô ñ ô ð ð ð ðð ð ð àðñ ô ˆEð ð 
HÝ˜dœi­$µ¨Ñ6Ô6ð )Ø"œi×/Ò/°
¸NÑKÔK�G�Gà(�Gð"ð "ð "ð "ØMRð"ñ "ô "�ð 7Ð6Ð6Ð6Ð6Ð6à&� ~°t·}²}±´ÑGÔGÐGàˆtr–   r¬   c                óÀ   — t          | j        t          ¦  «        rC|                      ¦   «         }|r|                      |¦  «         d S |                      ¦   «          d S d S r�   )r‘   rq  r(  rû   rb  rZ  ra  s     r”   rØ  zComputedBuffer.decide_layout  sk   € Ý�d”k¥>Ñ2Ô2ð 	%Ø×'Ò'Ñ)Ô)ˆEØð %Ø×2Ò2°5Ñ9Ô9Ð9Ð9Ð9à×"Ò"Ñ$Ô$Ð$Ð$Ð$ð	%ð 	%r–   úMtuple[tuple[list[Expr], list[Expr]], LoopBody, tuple[list[Expr], list[Expr]]]c                óº  — t          j        |                      ¦   «         |                      ¦   «         d¬¦  «        \  }}t	          j        t          d|                      ¦   «         ¦  «        5  t          |  	                    ¦   «         |  
                    ¦   «         r|n	|d d…         |g|¢R Ž }d d d ¦  «         n# 1 swxY w Y   g }g }g }g }|                     ¦   «         D ]t\  }}	||d         v r/|rJ ‚|                     |¦  «         |                     |	¦  «         Œ>||d         v sJ ‚|                     |¦  «         |                     |	¦  «         Œu||f|||ffS )NÚqr†   rQ  rI   r   )rK   rÕ  rÿ  r}  r   rŒ   rS  r+  rW   r²  rz  Úitemsró  )
r¹  rÆ   Ú
var_rangesra  rÈ  Úreduce_varsÚ
index_sizeÚreduce_sizerÂ  r÷   s
             r”   r�  z%ComputedBuffer.get_default_sizes_body  sÐ  € õ (Ô:Ø×#Ò#Ñ%Ô% t×'>Ò'>Ñ'@Ô'@Èð
ñ 
ô 
Ñˆˆjõ Œ\�.Ð*;¸T¿_º_Ñ=NÔ=NÑOÔOð 	ð 	ÝØ×'Ò'Ñ)Ô)Ø×0Ò0Ñ2Ô2Ð@��¸¸R¸a¸R¼Øðð ð	ð ð ˆDð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð ˆ
Ø!#ˆØˆ
ØˆØ×$Ò$Ñ&Ô&ð 	&ð 	&‰DˆAˆqØ�D˜”Gˆ|ˆ|Ø&Ð&Ð&�Ø×!Ò! !Ñ$Ô$Ð$Ø×!Ò! !Ñ$Ô$Ð$Ð$à˜D œG�|�|�|�|Ø×"Ò" 1Ñ%Ô%Ð%Ø×"Ò" 1Ñ%Ô%Ð%Ð%Ø˜KÐ(¨$°¸[Ð0IÐIÐIs   Á,A B8Â8B<Â?B<Úextra_indexing_constraintsú'tuple[dict[Any, Any], list[Any]] | NoneÚrecompute_sizes_body_funcú5tuple[tuple[list[Expr], list[Expr]], LoopBody | None]c                ól  ‡ ‡‡— ‰                       ¦   «         \  \  }}}\  }}|r |||f|||f¦  «        \  \  }}}\  }}g |j                             ¦   «         ¢Š|�Ît          |t          ¦  «        rt          |¦  «        dk    sJ ‚|\  }}	t          |t          ¦  «        sJ t          |¦  «        ¦   «         ‚t          |	t          ¦  «        sJ t          |	¦  «        ¦   «         ‚t          d„ |	D ¦   «         ¦  «        sJ ‚|j
        }
|
|k    sJ |
|f¦   «         ‚ˆfd„|	D ¦   «         }	‰|	z  Šg |                     ¦   «         ¢Št          j                             ‰ t          j        ¦  «        s'‰                     |                     ¦   «         ¦  «         dˆˆˆ fd„}||z   }t'          t)          ‰ ¦  «        ¦  «         pt*          j         } |||||¦  «        \  }}} |||||¦  «        \  }}}t/          j        ||d¬¦  «        \  \  }}}t3          | ||¦  «         ||¦  «        g|||¦  «        }||f|fS )an  
        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.
        Nrí   c              3  ó@   K  — | ]}t          |t          ¦  «        V — Œd S r�   )r‘   r    )rÔ   Úfs     r”   rø   z6ComputedBuffer.simplify_and_reorder.<locals>.<genexpr>d  s,   è è € ÐHÐH¨q•z !¥TÑ*Ô*ÐHÐHÐHÐHÐHÐHr–   c                ó   •— g | ]}|‰v¯|‘Œ	S r©   r©   )rÔ   rç  Úindex_formulass     €r”   r×   z7ComputedBuffer.simplify_and_reorder.<locals>.<listcomp>l  s*   ø€ ð #ð #ð #Ø°!¸>Ð2IÐ2I�Ð2IÐ2IÐ2Ir–   Úx_varsúSequence[sympy.Symbol]Úsupport_varsrç  rÍ   Úsimplify_loopsr    r�   údtuple[list[int], Callable[[Sequence[int]], Sequence[int]], Callable[[Sequence[int]], Sequence[int]]]c           	     ó$  •‡— ‰                      | |‰‰¦  «        \  }}}‰                     ¦   «         dk    r}t          ‰¦  «        dk    rjt          t	          t          ‰¦  «        ¦  «        ¦  «        } ||¦  «        d         dk    r,ˆfd„|D ¦   «         }t          |¦  «        }t          |¦  «        } || ¦  «        } |rJt          j        j	         
                    | |t          ‰| |¦  «        ¦  «        \  }}}	t          ||¦  «        }
n|}
||
|fS )Nre  rì   r   c                ó    •— g | ]
}‰|         ‘ŒS r©   r©   ©rÔ   rÕ   rç  s     €r”   r×   zUComputedBuffer.simplify_and_reorder.<locals>.simplify_and_reorder.<locals>.<listcomp>™  s   ø€ Ð8Ð8Ð8¨Q  a¤Ð8Ð8Ð8r–   )Ú_apply_loop_reorderingrz  rÙ   r°   rÚ   râ   rÞ   rw   r"  r#  Ú_simplify_loopsrO   rë   )rÜ  rÞ  rç  rß  ÚnewsizesÚreindex0rã   rÌ   rå   Ú_prunerÛ   rÛ  Úmemory_addrsr¹  s     `        €€€r”   Úsimplify_and_reorderzAComputedBuffer.simplify_and_reorder.<locals>.simplify_and_reorderu  s.  øø€ ð ,0×+FÒ+FØ˜ e¨\ñ,ô ,Ñ(ˆH�h ð* ×&Ò&Ñ(Ô(¨EÒ1Ð1µc¸%±j´jÀA²o°oÝ�U¥3 u¡:¤:Ñ.Ô.Ñ/Ô/�ð �8˜E‘?”? 1Ô%¨Ò*Ð*Ø8Ð8Ð8Ð8°%Ð8Ñ8Ô8�HÝ+¨EÑ2Ô2�HÝ.¨uÑ5Ô5�Hð �X˜fÑ%Ô%ˆFàð #Ý-.¬WÔ-=×-MÒ-MØØÝ,¨^¸VÀXÑNÔNñ.ô .Ñ*�˜( Fõ
 *¨(°HÑ=Ô=��à"�Ø˜W hÐ.Ð.r–   Úpr†   )
rÜ  rÝ  rÞ  rÝ  rç  rÍ   rß  r    r�   rà  )r�  Úindexing_exprsr³   r‘   r±   rÙ   r²   r¾   r°   rù   rÏ  Úget_write_exprsrw   r"  ræ  rL   ÚPREFER_STORE_LOOP_ORDERÚextendÚget_read_exprsrn   r=  rJ   Úloop_ordering_after_fusionrK   Úindex_vars_no_squeezerW   )r¹  rÓ  rÕ  rÑ  rÒ  ra  rÈ  rÐ  Úextra_indexing_rangesÚextra_indexing_exprÚexpected_var_rangesrê  rÞ  Úshould_merge_loopsÚiter_rangesÚiter_reindexr  Úreduce_rangesÚreduce_reindexÚ	iter_varsrÏ  rÛ  ré  s   `                    @@r”   rê  z#ComputedBuffer.simplify_and_reorder6  s  øøø€ ð4 ×'Ò'Ñ)Ô)ñ		
Ù%ˆZ˜ØÙ%ˆZ˜ð %ð 	ð
 *Ð)Ø˜[Ð)¨4°*¸kÐ1Jñô ñ	Ù)�˜[ØÙ)�˜[ð
 9˜4Ô.×5Ò5Ñ7Ô7Ð8ˆØ%Ð1åÐ5µuÑ=Ô=ðåÐ2Ñ3Ô3°qÒ8Ð8Ð8ð9ð :TÑ6Ð!Ð#6ÝÐ3µTÑ:Ô:ÐWÐW½DÐAVÑ<WÔ<WÑWÔWÐ:ÝÐ1µ4Ñ8Ô8ÐSÐS½$Ð?RÑ:SÔ:SÑSÔSÐ8ÝÐHÐHÐ4GÐHÑHÔHÑHÔHÐHÐHÐHà"&¤/ÐØ&Ð*?Ò?Ð?Ð?Ø#Ø%ðBÑ?Ô?Ð?ð
#ð #ð #ð #Ø.ð#ñ #ô #Ðð Ð1Ñ1ˆNà0˜×-Ò-Ñ/Ô/Ð0ˆÝŒw×"Ò" 4­Ô)OÑPÔPð 	7Ø×Ò × 3Ò 3Ñ 5Ô 5Ñ6Ô6Ð6ð4	/ð 4	/ð 4	/ð 4	/ð 4	/ð 4	/ð 4	/ð 4	/ðl " KÑ/ˆå• tÑ,Ô,Ñ-Ô-Ð-ÐVµVÔ5VÐ1Vð 	ð (<Ð';ØØØØñ	(
ô (
Ñ$ˆ�\ 1ð ,@Ð+?Ø˜ {Ð4Fñ,
ô ,
Ñ(ˆ�~ qõ
 0<Ô/QØØØð0
ñ 0
ô 0
Ñ,Ñ ˆ�K *õ
 ØØˆ\˜)Ñ$Ô$ n n°[Ñ&AÔ&AÐBØØØñ
ô 
ˆð ˜]Ð+¨TÐ1Ð1r–   rÈ  rÝ  rÞ  rç  rÍ   ré  rŒ  Úpriority_idxrà  c           
     ón  ‡ ‡‡— ddl m} |€g }	 ˆ ˆfd„|D ¦   «         }t          |¦  «        t          |¦  «        k    r&t          |d         ¦  «        t          ‰ ¦  «        k    sJ ‚t          t	           ||‰|¦  «        ¦  «        ¦  «        }n|# t
          $ ro t          j        r7t           	                    dt          t          ‰ ‰¦  «        ¦  «        |¦  «         t          t          t          ‰¦  «        ¦  «        ¦  «        }Y nw xY wˆfd„|D ¦   «         Š‰t          |¦  «        t          |¦  «        fS )zU
        Shuffle the order of loops around to hopefully improve performance.
        rI   rÅ  Nc                ó\   •— g | ](}t           j        j                             |‰‰¦  «        ‘Œ)S r©   rÄ  )rÔ   rê  rÈ  rÞ  s     €€r”   r×   z9ComputedBuffer._apply_loop_reordering.<locals>.<listcomp>â  s@   ø€ ð ð ð àõ ”Ô ×-Ò-¨d°JÀÑMÔMðð ð r–   r   z%Did not simplify complex index:
%s
%sc                ó    •— g | ]
}‰|         ‘ŒS r©   r©   rã  s     €r”   r×   z9ComputedBuffer._apply_loop_reordering.<locals>.<listcomp>ò  s   ø€ Ð)Ð)Ð)˜a��q”Ð)Ð)Ð)r–   )rÇ  rÆ  rÙ   r°   rs  Ú	ExceptionrJ   rã  rð  Úwarningr²   rÝ   rÚ   râ   rÞ   )rÈ  rÞ  rç  ré  rü  rÆ  rh  rÌ   s   ```     r”   rä  z%ComputedBuffer._apply_loop_reorderingÍ  sx  øøø€ ð 	/Ð.Ð.Ð.Ð.Ð.àÐØˆLð	,ðð ð ð ð à(ðñ ô ˆGõ �w‘<”<¥3 |Ñ#4Ô#4Ò4Ð4½¸WÀQ¼Z¹¼ÍCØñMô Mò :ð :ð :ð õ � / /°'¸5À,Ñ"OÔ"OÑPÔPÑQÔQˆEˆEøÝð 	,ð 	,ð 	,ÝŒ|ð Ý—’Ø=Ý�˜Z¨Ñ/Ô/Ñ0Ô0Ø ñô ð õ
 ��s 5™zœzÑ*Ô*Ñ+Ô+ˆEˆEˆEð	,øøøð *Ð)Ð)Ð) 5Ð)Ñ)Ô)ˆØ•l 5Ñ)Ô)­?¸5Ñ+AÔ+AÐAÐAs   �A>B ÂA6DÄDr{  c                ó4   — | j                              ¦   «         S r�   )rp  rÿ  r¸  s    r”   rÿ  z!ComputedBuffer.get_pointwise_sizeõ  ó   € ØŒy×+Ò+Ñ-Ô-Ð-r–   c                ó4   — | j                              ¦   «         S r�   ©rp  r}  r¸  s    r”   r}  z!ComputedBuffer.get_reduction_sizeø  r  r–   c                ó4   — | j                              ¦   «         S r�   ©rp  rz  r¸  s    r”   rz  z!ComputedBuffer.get_reduction_typeû  r  r–   c                ó4   — | j                              ¦   «         S r�   )rp  r'  r¸  s    r”   r�  zComputedBuffer.is_no_opþ  s   € ØŒy×)Ò)Ñ+Ô+Ð+r–   c                ó   — dS r£  r©   r¸  s    r”   rx  zComputedBuffer.should_allocate  r×  r–   r!  r2  r‰   c                ó6   — | j                              |¦  «        S )rP  ©rp  rƒ  r5  s     r”   rƒ  z!ComputedBuffer.constant_to_device  s   € àŒy×+Ò+¨FÑ3Ô3Ð3r–   )r�   r›  r™  r©  r¨  rŽ  r§  r¢  r«  r�  r–  )r�   r¸  )r�   rº  r�  )r�   rË  ©NN)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™  rA  rB  rC  rD  r³  r´  r¡  r²  r¥  r§  rs  rË  rÌ  rl  rb   rx  r>  r´  r²  rû   rØ  ra   r�  rê  rä  rÿ  r}  rz  r�  rx  rƒ  r‡  rˆ  s   @r”   r¯  r¯  Q  sç  ø€ € € € € € ðð ð €K€K�KØ%*€NÐ*Ð*Ð*Ñ*ð #€KÐ"Ð"Ð"Ñ"Ø48ÐÐ8Ð8Ð8Ñ8Ø26ÐÐ6Ð6Ð6Ñ6Ø<@ÐÐ@Ð@Ð@Ñ@àÔð %ð  %ð  %ñ Ôð %ðD ØÔð6ð 6ð 6ñ Ôñ „\ð6ð	ð 	ð 	ð 	ð%ð %ð %ð %ð%ð %ð %ð %ð*ð *ð *ð *ðð ð ð ð* ÐÐ,Ñ-Ô-à$)ðð ð ð ñ .Ô-ðð2	%ð 	%ð 	%ð 	%ð 	%ð 	%ðIð Ið Ið IðGð Gð Gð Gð%ð %ð %ð %ðN%ð %ð %ð %ð ðJð Jð Jñ „]ðJðD OSØ?CðU2ð U2ð U2ð U2ð U2ðn ð *.ð%Bð %Bð %Bð %Bñ „\ð%BðN.ð .ð .ð .ð.ð .ð .ð .ð.ð .ð .ð .ð,ð ,ð ,ð ,ðð ð ð ð4ð 4ð 4ð 4ð 4ð 4ð 4ð 4r–   r¯  c                  ó<   — e Zd ZU dZded<   ded<   ded<   ded<   dS )	ÚFinalizeCodegenResultzNStructured result from TemplateBuffer._finalize_codegen for external backends.rÃ   Úsourcer¢   ÚimportsÚcall_preambleÚ	call_argsN)r¥   r¦   r§   r¯  r¨   r©   r–   r”   r  r  	  sE   € € € € € € àXÐXà€K€K�KØÐÐÑØÐÐÑØÐÐÑÐÐr–   r  c                  óÞ   ‡ — e Zd ZdZ	 	 	 d@dAˆ fd„ZedBd„¦   «         ZdCd„ZdDd„ZdEdFd„Z	dGd„Z
dHd„ZdId „Z	 	 dJdKd%„ZdId&„ZdLd(„ZdMd+„ZdNd/„ZedOd3„¦   «         Zedddd4œdPd?„¦   «         Zˆ xZS )Qr²  zÈ
    Base class for template operators that support epilogue and prologue fusion.
    Subclasses: TritonTemplateBuffer (built-in Triton templates),
    HelionTemplateBuffer (Helion kernels), etc.
    Nrq  r<  rŠ  r‹  Úmake_kernel_renderrš  Úmutated_inputsúIterable[IRNode] | NoneÚallowed_prologue_inpsúOrderedSet[str] | NoneÚnamed_inputsúdict[str, IRNode] | Noner�   r¬   c                ó¦  •‡ ‡— t          ¦   «                              d |¬¦  «         t                               |¦  «        ‰ _        |‰ _        t          j                             ‰ ¦  «        ‰ _	        t          j         
                    ‰ ¦  «         i ‰ _        i ‰ _        i ‰ _        |rt          |¦  «        ni ‰ _        |‰ _        g ‰ _        |�a‰ j        d         }t%          |t&          ¦  «        sJ t)          |¦  «        ¦   «         ‚|                     ¦   «         Šˆˆ fd„|D ¦   «         ‰ _        |pt-          ¦   «         ‰ _        d ‰ _        d ‰ _        d S )Nr‰  r   c                óN   •— g | ]!}t          t          ‰¬ ¦  «        |‰¦  «        ‘Œ"S ©rú  ©ÚMutationOutputr/  ©rÔ   rá  r!  r¹  s     €€r”   r×   z+TemplateBuffer.__init__.<locals>.<listcomp>?  s@   ø€ ð %ð %ð %àõ �z°Ð8Ñ8Ô8¸#¸tÑDÔDð%ð %ð %r–   )r   r�  r°  Úunwrap_storagerŠ  r  rw   r"  Úregister_bufferrÂ   Úregister_operationr   Úepilogue_fusable_outputsÚ_multi_output_childrenr²   Ú_named_inputsr  Úmutation_outputsr‘   r‰   r¾   r+  r@   r  Úallow_epilogue_fusionÚallow_prologue_fusion)
r¹  rq  rŠ  r  r  r  r  Úfirst_inputr!  r¢  s
   `       @€r”   r�  zTemplateBuffer.__init__  sb  øøø€ õ 	‰Œ×Ò˜d¨6ÐÑ2Ô2Ð2Ý"×1Ò1°&Ñ9Ô9ˆŒØ"4ˆÔÝ”G×+Ò+¨DÑ1Ô1ˆŒ	Ý	Œ×"Ò" 4Ñ(Ô(Ð(à+-ˆÔð 9;ˆÔ%ð ?AˆÔ#ð
 #/Ð6�D�ÑÔÐ°Bð 	Ôð
 -ˆÔØ68ˆÔØÐ%Øœ+ aœ.ˆKÝ˜k­6Ñ2Ô2ÐEÐEµD¸Ñ4EÔ4EÑEÔEÐ2Ø ×+Ò+Ñ-Ô-ˆFð%ð %ð %ð %ð %à)ð%ñ %ô %ˆDÔ!ð "Ð1¥Z¡\¤\ð 	Ô"ð
 37ˆÔ"Ø26ˆÔ"Ð"Ð"r–   r  c                ó†   — t          | j        t          ¦  «        rt          d¦  «        ‚|                      ¦   «         j        S )Nz1Multi-output templates do not have a single dtype)r‘   rq  ÚMultiOutputLayoutr  r'  r   r¸  s    r”   r   zTemplateBuffer.dtypeL  sA   € å�d”kÕ#4Ñ5Ô5ð 	Ý%ØCñô ð ð �ŠÑ Ô Ô&Ð&r–   rj  c                ó.   — |                       d¬¦  «        S )NT©Ú	normalize)rT   r¸  s    r”   rl  zTemplateBuffer.get_read_writesT  s   € Ø×'Ò'°$Ð'Ñ7Ô7Ð7r–   r/  r    úOrderedSet[dependencies.Dep]c                ó´  ‡‡— t          ¦   «         }| j        D ]¿}t          |t          t          f¦  «        sJ t          |¦  «        ¦   «         ‚|Št          ‰j        t          ¦  «        sJ t          ‰j        ¦  «        ¦   «         ‚‰j                             ¦   «         Šd	ˆˆfd„}|t          j
        |‰                     ¦   «         d|¬¦  «        j        z  }ŒÀ|S )
z(Build read dependencies from all inputs.rÐ   úSequence[Any]r°  r�   r   c                óŽ   •— t          |¦  «        dk    sJ ‚t          j        ‰                     ¦   «          ‰| ¦  «        ¦  «        S r$  )rÙ   ru   r%  r˜  )rÐ   r°  r‘  Úinp_indexers     €€r”   Údummyz4TemplateBuffer._read_deps_from_inputs.<locals>.dummy`  s>   ø€ Ý˜6‘{”{ aÒ'Ð'Ð'Ð'Ý”x §¢¡¤°°¸EÑ0BÔ0BÑCÔCÐCr–   r©   r.  ©rÐ   r2  r°  r2  r�   r   )r@   rŠ  r‘   rv  r—  r¾   rq  r
  rB  rK   rT   r%  rp  )r¹  r/  rp  Úinp_rawr5  r‘  r4  s        @@r”   Ú_read_deps_from_inputsz%TemplateBuffer._read_deps_from_inputsW  sð   øø€ å.8©l¬lˆØ”{ð 	ð 	ˆGÝ˜g­½Ð'@ÑAÔAÐPÐPÅ4ÈÁ=Ä=ÑPÔPÐAØ,3ˆCÝ˜cœj­&Ñ1Ô1ÐCÐCµ4¸¼
Ñ3CÔ3CÑCÔCÐ1Øœ*×1Ò1Ñ3Ô3ˆKðDð Dð Dð Dð Dð Dð Dð •\Ô5Ø�s—|’|‘~”~ r°Yðñ ô äñˆEˆEð ˆr–   Fc                ó^  ‡‡— t          | j        t          ¦  «        r‚t          t	          j        |                      ¦   «         t          j        d¦  «        dd¬¦  «        g¦  «        }t	          j	        |  
                    |¦  «        |t          ¦   «         dd¬¦  «        S |                      ¦   «         Š|                      ¦   «                              ¦   «         Šdˆˆfd„}t	          j        ||                      ¦   «         d|¬¦  «        }|xj        |  
                    |¦  «        z  c_        |S )aµ  Extract read/write dependencies for this TemplateBuffer.

        When the layout is MultiOutputLayout (multi-output templates), the
        buffer itself has no data layout, so we cannot build an indexer.
        Instead, synthesize a trivial write dep and derive read deps from
        the named tensor inputs (``_named_inputs``).  For single-output
        templates with a concrete layout, fall through to the standard path.
        r   r©   )Ú	var_namesr  N)rp  r¯  r°  rÔ  rÏ  rÐ   r2  r°  r�   r   c                ól   •— t          |¦  «        dk    sJ ‚t          j        ‰ ‰| ¦  «        d¦  «        S ©Nr   Úfake©rÙ   ru   rJ  ©rÐ   r°  rD  rÂ   s     €€r”   r5  z1TemplateBuffer.extract_read_writes.<locals>.dummy…  ó6   ø€ Ý�v‘;”; !Ò#Ð#Ð#Ð#Ý”9˜T 7 7¨5¡>¤>°6Ñ:Ô:Ð:r–   r.  r6  )r‘   rq  r,  r@   rK   r¾  r˜  r·   r!   r±  r8  r'  rB  rT   r%  rp  )r¹  r/  r¯  r5  ÚdepsrD  rÂ   s        @@r”   rT   z"TemplateBuffer.extract_read_writesi  s8  øø€ õ �d”kÕ#4Ñ5Ô5ð 	Ý3=å Ô*ØŸš™œ­¬°qÑ)9Ô)9ÀRÈbðñ ô ðñ4ô 4ˆFõ  Ô*Ø×1Ò1°)Ñ<Ô<ØÝ&™LœLØØðñ ô ð ð �}Š}‰ŒˆØ—/’/Ñ#Ô#×0Ò0Ñ2Ô2ˆð	;ð 	;ð 	;ð 	;ð 	;ð 	;ð 	;õ Ô/Ø�4—=’=‘?”? B°)ð
ñ 
ô 
ˆð 	ˆ
Œ
�d×1Ò1°)Ñ<Ô<Ñ<ˆ
Œ
Øˆr–   r{  c                ó$   — t           j        j        S r�   )r·   r  rü  r¸  s    r”   r}  z!TemplateBuffer.get_reduction_size�  s   € ÝŒwŒ{Ðr–   r8  c                ó   — d S r�   r©   r¸  s    r”   rz  z!TemplateBuffer.get_reduction_type’  r×  r–   c                ó   — dS r£  r©   r¸  s    r”   rx  zTemplateBuffer.should_allocate•  r×  r–   rÓ  rÔ  rÕ  ú9tuple[tuple[Sequence[Expr], list[Expr]], LoopBody | None]c                ó2   — |                       ¦   «         g fd fS r�   r   )r¹  rÓ  rÕ  s      r”   rê  z#TemplateBuffer.simplify_and_reorder˜  s&   € ð —’‘”Øðð ð
ð 	
r–   c                ó6   — t          | j        t          ¦  «        S )zFWhether this template produces multiple outputs via MultiOutputLayout.)r‘   rq  r,  r¸  s    r”   Úis_multi_outputs_templatez(TemplateBuffer.is_multi_outputs_template¥  s   € å˜$œ+Õ'8Ñ9Ô9Ð9r–   rÃ  c                ó   — | j         S r�   )r  r¸  s    r”   Úget_allowed_prologue_inpsz(TemplateBuffer.get_allowed_prologue_inps©  s   € ØÔ)Ð)r–   Úscheduler_noder   c                ó*   — |                      ¦   «         S )a3  Return whether this template's aliasing/mutation blocks prologue fusion.

        The default preserves the scheduler's conservative behavior. External
        template subclasses may override this when they can prove a prologue
        producer only feeds independent, non-mutated template inputs.
        )Úhas_aliasing_or_mutation)r¹  rK  s     r”   Ú,has_aliasing_or_mutation_for_prologue_fusionz;TemplateBuffer.has_aliasing_or_mutation_for_prologue_fusion¬  s   € ð ×6Ò6Ñ8Ô8Ð8r–   Úhook_outputsúdict[str, str]úFinalizeCodegenResult | Nonec                ó   — dS )a˜  Called after epilogue/prologue subgraph codegen with rendered hook outputs.

        ``hook_outputs`` maps placeholder keys (e.g. ``<STORE_OUTPUT_0>``,
        ``<LOAD_INPUT_x>``) to the Triton code generated by Inductor for
        each fused subgraph.

        Return a ``FinalizeCodegenResult`` to provide custom source code and
        call metadata, or ``None`` to use the default codegen path.
        Nr©   )r¹  rO  s     r”   Ú_finalize_codegenz TemplateBuffer._finalize_codegenµ  s	   € ð ˆtr–   r  rˆ   r‰   c                ó:  — t          |t          ¦  «        r!t          |j        t          ¦  «        r|j        S t                               |¦  «        }t          |t          ¦  «        r|j        }t          |j        t          ¦  «        r| 	                    ¦   «          |S )zWRealize a TensorBox, preserving MultiOutput layout (unlike ExternKernel.realize_input).)
r‘   rˆ   rp  ÚMultiOutputrß  Úrealize_inputr–  rq  r(  rZ  )r  r  r�  s      r”   Úrealize_template_inputz%TemplateBuffer.realize_template_inputÃ  s‡   € õ �b�)Ñ$Ô$ð 	­°B´G½[Ñ)IÔ)Ið 	Ø”7ˆNÝ×+Ò+¨BÑ/Ô/ˆÝ�f�jÑ)Ô)ð 	!Ø”[ˆFÝ�f”m¥^Ñ4Ô4ð 	#Ø× Ò Ñ"Ô"Ð"Øˆr–   )Údirect_alias_at_leafÚon_tensor_leafÚon_non_tensor_leafÚtemplate_bufÚ
structuredrŒ   rX  údict[int, IRNode] | NonerY  úFCallable[[str, MultiOutput, list[tuple[type, int]], int], None] | NonerZ  úCallable[[int], None] | Noneútuple[TensorBox, ...]c               ó„   ‡‡‡‡‡‡‡— i Št          j        ¦   «         Šdˆˆˆˆˆˆˆfd„Št           ‰|g ¦  «        ¦  «        S )	zLWalk a structured output tree, creating MultiOutput nodes for tensor leaves.r  rŒ   rÛ  úlist[tuple[type, int]]r�   úlist[TensorBox]c           
     óÄ  •— t          | t          t          f¦  «        rKg }t          | ¦  «        D ]7\  }}|                      ‰|g |¢t          | ¦  «        |f‘¦  «        ¦  «         Œ8|S t          ‰
¦  «        }t          | t          j        ¦  «        rÁ‰	r%|‰	v r!t           
                    ‰	|         ¦  «        gS t          | ¦  «        }|‰v r	‰|         gS t          t                               | ¦  «        ‰|¦  «        }|‰j        |                     ¦   «         <   ‰�  ‰|                     ¦   «         |||¦  «         t          |¦  «        }|‰|<   |gS ‰� ‰|¦  «         g S r�   )r‘   r°   r±   r  rï  r¾   r7  r-  ÚTensorrˆ   r·  ÚidrU  ÚFallbackKernelÚtensor_to_layoutr%  r˜  )r  rÛ  r°  rÕ   ÚitemÚleaf_idxÚtidÚmor  rX  Úleaf_counterrZ  rY  Úseen_outputsr[  Úwalks            €€€€€€€r”   ro  z0TemplateBuffer.build_multi_outputs.<locals>.walkÞ  s†  ø€ Ý˜&¥4­ -Ñ0Ô0ð Ø+-�Ý(¨Ñ0Ô0ð Nð N‘G�A�tØ—N’N 4 4¨Ð.K°Ð.K½$¸v¹,¼,ÈÐ9JÐ.KÑ#LÔ#LÑMÔMÐMÐMØ�Ý˜LÑ)Ô)ˆHÝ˜&¥%¤,Ñ/Ô/ð Ø'ð N¨HÐ8LÐ,LÐ,LÝ%×,Ò,Ð-AÀ(Ô-KÑLÔLÐMÐMÝ˜‘j”j�Ø˜,Ð&Ð&Ø(¨Ô-Ð.Ð.Ý Ý"×3Ò3°FÑ;Ô;¸\È7ñô �ð FH�Ô3°B·K²K±M´MÑBØ!Ð-Ø"�N 2§;¢;¡=¤=°"°g¸xÑHÔHÐHÝ˜r‘]”]�Ø$&�˜SÑ!Ø�t�à!Ð-Ø"Ð" 8Ñ,Ô,Ð,ØˆIr–   )r  rŒ   rÛ  rb  r�   rc  )r  Úcountr±   )	r  r[  r\  rX  rY  rZ  rm  rn  ro  s	    ` ```@@@r”   Úbuild_multi_outputsz"TemplateBuffer.build_multi_outputsÏ  su   øøøøøøø€ ð .0ˆÝ ”Ñ(Ô(ˆð	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	õ6 �T�T˜* bÑ)Ô)Ñ*Ô*Ð*r–   )NNN)rq  r<  rŠ  r‹  r  rš  r  r  r  r  r  r  r�   r¬   r“  r§  )r/  r    r�   r0  r¢  )r/  r    r�   rj  r¬  r™  r–  r  )rÓ  rÔ  rÕ  rš  r�   rE  rŽ  )rK  r   r�   r    )rO  rP  r�   rQ  )r  rˆ   r�   r‰   )r[  r²  r\  rŒ   rX  r]  rY  r^  rZ  r_  r�   r`  )r¥   r¦   r§   r¯  r�  rµ  r   rl  r8  rT   r}  rz  rx  rê  rH  rJ  rN  rS  r3  rW  rq  r‡  rˆ  s   @r”   r²  r²    s¾  ø€ € € € € ðð ð 37Ø8<Ø15ð07ð 07ð 07ð 07ð 07ð 07ð 07ðd ð'ð 'ð 'ñ „Xð'ð8ð 8ð 8ð 8ðð ð ð ð$$ð $ð $ð $ð $ðLð ð ð ðð ð ð ðð ð ð ð
 OSØ?Cð
ð 
ð 
ð 
ð 
ð:ð :ð :ð :ð*ð *ð *ð *ð9ð 9ð 9ð 9ðð ð ð ð ð	ð 	ð 	ñ „[ð	ð ð :>àØ;?ð)+ð )+ð )+ð )+ð )+ñ „[ð)+ð )+ð )+ð )+ð )+r–   r²  c                  óh   ‡ — e Zd Z	 	 ddˆ fd„Z ed ¦  «        	 ddˆ fd„¦   «         Zdd„Zdd„Zˆ xZS )ÚTritonTemplateBufferNrq  r
  rŠ  r‹  r  úCallable[_P, _T] | Noner  r  r  r  r�   r¬   c                ó¨   •— t          ¦   «                              |||||¬¦  «         | j        €J ‚| j        | j        i| _        d| _        d| _        dS )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.
        )r  r  N)r   r�  rÂ   r$  Úsubgraph_inpsÚsubgraph_outs)r¹  rq  rŠ  r  r  r  r¢  s         €r”   r�  zTritonTemplateBuffer.__init__ý  sl   ø€ õ" 	‰Œ×ÒØØØØ)Ø"7ð 	ñ 	
ô 	
ð 	
ð ŒyÐ$Ð$Ð$Ø)-¬°D´IÐ(>ˆÔ%à@DˆÔØ9=ˆÔÐÐr–   Fr�  r    rš   c                ó  •— t          ¦   «                              |¦  «        }| j        r| j        ng }| j        r| j        ng }|D ]}}t	          |t
          ¦  «        r$|                     t          ||¦  «        ¦  «         Œ;t	          |t          ¦  «        r)|                     |                     |¦  «        ¦  «         Œy|�J ‚Œ~|D ]D}t	          |t          ¦  «        r)|                     |                     |¦  «        ¦  «         Œ@|�J ‚ŒE|S r�   )	r   rx  rw  rv  r‘   r    Úupdater)   r‰   )r¹  r�  Úresrw  rv  r‘  r  r¢  s          €r”   rx  z)TritonTemplateBuffer.get_free_symbol_uses  s  ø€ õ ‰gŒg×*Ò*¨=Ñ9Ô9ˆØ.2Ô.@ÐH˜Ô*Ð*ÀbˆØ.2Ô.@ÐH˜Ô*Ð*Àbˆà ð 	#ð 	#ˆCÝ˜#�tÑ$Ô$ð #Ø—
’
Õ+¨C°Ñ?Ô?Ñ@Ô@Ð@Ð@Ý˜C¥Ñ(Ô(ð #Ø—
’
˜3×3Ò3°MÑBÔBÑCÔCÐCÐCà�{�{�{�{à ð 	#ð 	#ˆCÝ˜#�vÑ&Ô&ð #Ø—
’
˜3×3Ò3°MÑBÔBÑCÔCÐCÐCà�{�{�{�{àˆ
r–   rÔ  c                ó   — | g| j         ¢S r�   ©r'  r¸  s    r”   rÖ  z TritonTemplateBuffer.get_outputs3  ó   € ØÐ-�tÔ,Ð-Ð-r–   rÃ   c                ó   — d| j         › d�}|S )NzTritonTemplateBuffer(layout=r;  r,  )r¹  r  s     r”   r÷  zTritonTemplateBuffer.__str__6  s   € Ø;¨T¬[Ð;Ð;Ð;ˆØˆ
r–   r  )rq  r
  rŠ  r‹  r  rt  r  r  r  r  r�   r¬   r¢  r«  rÝ  rŸ  )	r¥   r¦   r§   r�  rb   rx  rÖ  r÷  r‡  rˆ  s   @r”   rs  rs  ü  s±   ø€ € € € € ð 37Ø8<ð>ð >ð >ð >ð >ð >ð >ð< ÐÐ2Ñ3Ô3à$)ðð ð ð ð ð ñ 4Ô3ðð..ð .ð .ð .ðð ð ð ð ð ð ð r–   rs  c                  ól   ‡ — e Zd ZdZdˆ fd„Zdd„Zdd„Zd d„Zdd„Zdd„Z	d!d„Z
d"d„Zdd„Zd#d„Zˆ xZS )$ÚChoiceCallera1  
    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.
    rÂ   rÃ   rœ   rÔ  rq  r
  Údescriptionr�   r¬   c                óâ   •— t          ¦   «                              ¦   «          || _        || _        || _        || _        d| _        d| _        i | _        d | _	        d | _
        i | _        i | _        d S r8  )r   r�  rÂ   rq  rœ   r�  ÚfailedÚ_benchmark_with_cudagraphsr   r|  ÚdecompositionÚdecomposition_kwargsÚconfig_patches)r¹  rÂ   rœ   rq  r�  r¢  s        €r”   r�  zChoiceCaller.__init__G  sy   ø€ õ 	‰Œ×ÒÑÔÐØˆŒ	ØˆŒØ&ˆÔð 'ˆÔØ!ˆŒà05ˆÔ'ð ,.ˆÔà/3ˆŒØ8<ˆÔØ46ˆÔ!Ø.0ˆÔÐÐr–   rÆ   r   r  r  r:  c               óÞ   ‡‡— |                       ¦   «         Š| j        rt          j        ˆˆfd„¦  «        S t          j        rt          ˆˆfd„¦  «        S t          j        ‰‰d|id ¬¦  «        S )Nc                 ó   •—  ‰ ‰Ž S r�   r©   ©ÚalgorÆ   s   €€r”   rÎ  z(ChoiceCaller.benchmark.<locals>.<lambda>e  s   ø€ ÀTÀTÈ4À[€ r–   c                 ó   •—  ‰ ‰Ž S r�   r©   rŠ  s   €€r”   rÎ  z(ChoiceCaller.benchmark.<locals>.<lambda>g  s   ø€ °D°D¸$°K€ r–   r  rú  )Úto_callabler„  r\   Úbenchmark_gpu_with_cuda_graphrJ   Ú/profile_bandwidth_with_do_bench_using_profilingrg   Ú	benchmark)r¹  r  rÆ   r‹  s     `@r”   r�  zChoiceCaller.benchmarkb  s„   øø€ Ø×ÒÑ!Ô!ˆØÔ*ð 	RÝÔ<Ð=PÐ=PÐ=PÐ=PÐ=PÑQÔQÐQÝÔAð 	AÝ+Ð,?Ð,?Ð,?Ð,?Ð,?Ñ@Ô@Ð@ÝÔ$ T¨4°%¸°ÀdÐKÑKÔKÐKr–   c                ó   — t           ‚r�   r¼  r¸  s    r”   Ú	call_namezChoiceCaller.call_namej  r½  r–   rá  c                ó   — t           ‚r�   r¼  r¸  s    r”   r�  zChoiceCaller.to_callablem  r½  r–   c                ó*   — |                       ¦   «         S )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_keyzChoiceCaller.kernel_hash_keyp  s   € ð
 �}Š}‰ŒÐr–   c                ó   — t           ‚r�   r¼  r¸  s    r”   r•  zChoiceCaller.hash_keyw  r½  r–   rˆ   c                ó   — t           ‚r�   r¼  r¸  s    r”   rˆ  zChoiceCaller.output_nodez  r½  r–   ú6dict[str, PrimitiveInfoType | list[PrimitiveInfoType]]c                ó   — i S )zRInformation returned here is logged to the autotune log file when that is enabled.r©   r¸  s    r”   Ú	info_dictzChoiceCaller.info_dict}  rÛ  r–   c                ó   — dS )NÚunsupported_choicer©   r¸  s    r”   Úautoheuristic_idzChoiceCaller.autoheuristic_id�  s   € Ø#Ð#r–   c                ó   — d| _         dS )z�
        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_failedzChoiceCaller.mark_failed„  s   € ð ˆŒˆˆr–   )
rÂ   rÃ   rœ   rÔ  rq  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ˆ  s   @r”   r€  r€  >  sÿ   ø€ € € € € ðð ð1ð 1ð 1ð 1ð 1ð 1ð6Lð Lð Lð Lð"ð "ð "ð "ð"ð "ð "ð "ðð ð ð ð"ð "ð "ð "ð"ð "ð "ð "ðð ð ð ð$ð $ð $ð $ðð ð ð ð ð ð ð r–   r€  c                  ó   — e Zd Zdd„ZdS )ÚTritonTemplateCallerBaser�   r   c                ó   — t           ‚r�   r¼  r¸  s    r”   Úget_make_kernel_renderz/TritonTemplateCallerBase.get_make_kernel_renderŽ  r½  r–   N)r�   r   )r¥   r¦   r§   r¤  r©   r–   r”   r¢  r¢  �  s(   € € € € € ð"ð "ð "ð "ð "ð "r–   r¢  c                  óž   ‡ — e Zd ZdZd!ˆ fd„Zed"d„¦   «         Zed#d„¦   «         Z	 d$d%d„Ze	j
        d&d„¦   «         Zd'd„Z	 d$d(d„Zd)d „Zˆ xZS )*ÚMultiTemplateBufferaG  
    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.
    rq  r
  rŠ  r‹  Úchoice_timings_fnú1Callable[[int | None], dict[ChoiceCaller, float]]Úunfiltered_choicesúlist[ChoiceCaller]r  rÃ  r�   r¬   c                óÔ   •— t          ¦   «                              ||d |¬¦  «         || _        i | _        || _        || _        t          d„ |D ¦   «         ¦  «        | _        i | _        d S )N)rq  rŠ  r  r  c              3  ó–   K  — | ]D}t          |t          ¦  «        p*t          |t          j        j        j        ¦  «        o|j        V — ŒEd S r�   )r‘   r¢  r-  râ  Úselect_algorithmÚExternKernelCallerÚhas_out_variant)rÔ   Úchoices     r”   rø   z/MultiTemplateBuffer.__init__.<locals>.<genexpr>­  sh   è è € ð %
ð %
ð õ �vÕ7Ñ8Ô8ð å˜6¥5¤?Ô#CÔ#VÑWÔWð +ØÔ*ð	%
ð %
ð %
ð %
ð %
ð %
r–   )	r   r�  Ú_choice_timings_fnÚ_choice_timingsÚ_choicesÚoriginal_inputsrù   Ú_output_plannableÚ_make_kernel_renders)r¹  rq  rŠ  r§  r©  r  r¢  s         €r”   r�  zMultiTemplateBuffer.__init__›  s“   ø€ õ 	‰Œ×ÒØØØ#Ø"7ð	 	ñ 	
ô 	
ð 	
ð #4ˆÔØLNˆÔØ,>ˆŒØ%ˆÔÝ!$ð %
ð %
ð -ð%
ñ %
ô %
ñ "
ô "
ˆÔð <>ˆÔ!Ð!Ð!r–   r    c                ó   — | j         S )z^
        Are all possible choices TritonTemplates or Extern Kernels with out variants
        )rµ  r¸  s    r”   Úoutput_plannablez$MultiTemplateBuffer.output_plannable·  s   € ð
 Ô%Ð%r–   c                ó   — | j         S r�   )r³  r¸  s    r”   rè  zMultiTemplateBuffer.choices¾  s
   € àŒ}Ðr–   NÚhint_overrider¥  údict[ChoiceCaller, float]c                óh   — || j         vr|                      |¦  «        | j         |<   | j         |         S r�   )r²  r±  )r¹  rº  s     r”   Úchoice_timingsz"MultiTemplateBuffer.choice_timingsÂ  s;   € ð  Ô 4Ð4Ð4Ø26×2IÒ2IÈ-Ñ2XÔ2XˆDÔ  Ñ/ØÔ# MÔ2Ð2r–   Úcallerr¢  r›  c              #  ó  K  — t          |t          j        j        j        ¦  «        sJ t          |¦  «        ¦   «         ‚| j        |j        k    sJ ‚| j        }|                     ¦   «         | _        	 d V — || _        d S # || _        w xY wr�   )	r‘   r-  râ  r­  ÚTritonTemplateCallerr¾   rq  r  r¤  )r¹  r¾  Úrenders      r”   Úswap_as_triton_callerz)MultiTemplateBuffer.swap_as_triton_callerÉ  s¥   è è € åØ•E”OÔ4ÔIñ
ô 
ð 	ð 	å�‰<Œ<ñ	ô 	ð 
ð Œ{˜fœmÒ+Ð+Ð+Ð+àÔ(ˆØ"(×"?Ò"?Ñ"AÔ"AˆÔð	-ØˆEˆEˆEà&,ˆDÔ#Ð#Ð#ø fˆDÔ#Ð,Ð,Ð,Ð,s   Á1A> Á>	Bc                ó>  — t          |t          j        j        j        ¦  «        sJ t          |¦  «        ¦   «         ‚|                      ¦   «         |j        j        k    sJ ‚|  	                    ¦   «         |j        j
        k    sJ ‚|                     ¦   «         | _        d S r�   )r‘   r-  râ  r­  rÀ  r¾   r%  rq  r  rT  r  r¤  r  )r¹  r¾  s     r”   Úfinalize_as_triton_callerz-MultiTemplateBuffer.finalize_as_triton_caller×  s˜   € ÝØ•E”OÔ4ÔIñ
ô 
ð 	ð 	å�‰<Œ<ñ	ô 	ð 
ð �}Š}‰Œ &¤-Ô"4Ò4Ð4Ð4Ð4Ø�ŠÑ Ô  F¤MÔ$8Ò8Ð8Ð8Ð8Ø"(×"?Ò"?Ñ"AÔ"AˆÔÐÐr–   útuple[ChoiceCaller, float]c                ón   — |                       |¬¦  «        }t          ||j        ¬¦  «        }|||         fS )N)rº  rÏ  )r½  rb  rå  )r¹  rº  ÚtimingsÚ
min_choices       r”   Úget_min_choicez"MultiTemplateBuffer.get_min_choiceß  s>   € ð ×%Ò%°MÐ%ÑBÔBˆÝ˜ g¤kÐ2Ñ2Ô2ˆ
Ø˜G JÔ/Ð0Ð0r–   Úcallersú*dict[int | None, TritonTemplateCallerBase]c                ó–   — |                      ¦   «         D ]!\  }}|                     ¦   «         | j        |<   Œ"| j        d         | _        dS )z;Finalize with multiple callers for different hint overridesN)rÎ  r¤  r¶  r  )r¹  rÊ  rº  r¾  s       r”   Úfinalize_as_triton_callersz.MultiTemplateBuffer.finalize_as_triton_callersæ  sV   € ð &-§]¢]¡_¤_ð 	Wð 	WÑ!ˆM˜6Ø7=×7TÒ7TÑ7VÔ7VˆDÔ% mÑ4Ð4ð #'Ô";¸DÔ"AˆÔÐÐr–   )rq  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è  r½  r³  r´  rÂ  rÄ  rÉ  rÍ  r‡  rˆ  s   @r”   r¦  r¦  ’  s  ø€ € € € € ðð ð>ð >ð >ð >ð >ð >ð8 ð&ð &ð &ñ „Xð&ð ðð ð ñ „Xðð +/ð3ð 3ð 3ð 3ð 3ð Ôð-ð -ð -ñ Ôð-ðBð Bð Bð Bð +/ð1ð 1ð 1ð 1ð 1ðBð Bð Bð Bð Bð Bð Bð Br–   r¦  c                  ó0   ‡ — e Zd Zdˆ fd„Zdd„Zdd„Zˆ xZS )ÚCUTLASSTemplateBufferrq  r
  rŠ  r‹  r  úCallable[_P, _T]Úworkspace_sizer’   Útemplater{   Úsupports_epilogue_fusionr    r�   r¬   c                óx   •— t          ¦   «                              |||¦  «         || _        || _        || _        d S r�   )r   r�  rÑ  rÒ  rÓ  )r¹  rq  rŠ  r  rÑ  rÒ  rÓ  r¢  s          €r”   r�  zCUTLASSTemplateBuffer.__init__ò  s?   ø€ õ 	‰Œ×Ò˜ Ð);Ñ<Ô<Ð<à,ˆÔØ ˆŒØ(@ˆÔ%Ð%Ð%r–   c                ó"   — | j         �| j         ndS r$  ©rÑ  r¸  s    r”   rÜ  z(CUTLASSTemplateBuffer.get_workspace_size  s   € Ø&*Ô&9Ð&EˆtÔ"Ð"È1ÐLr–   c                ó„   — |                       ¦   «         D ]*}t          j        |                     ¦   «         d d ¦  «         Œ+d S r�   )rÖ  ru   rJ  r˜  )r¹  r  s     r”   Úemulate_store_fnz&CUTLASSTemplateBuffer.emulate_store_fn  sH   € Ø×&Ò&Ñ(Ô(ð 	5ð 	5ˆFÝŒI�f—o’oÑ'Ô'¨¨tÑ4Ô4Ð4Ð4ð	5ð 	5r–   )rq  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Ï  ñ  so   ø€ € € € € ðAð Að Að Að Að AðMð Mð Mð Mð5ð 5ð 5ð 5ð 5ð 5ð 5ð 5r–   rÏ  c                  ó,   ‡ — e Zd Zdˆ fd„Zdˆ fd„Zˆ xZS )ÚCppTemplateBufferrq  r
  rŠ  r‹  r  rÐ  rÒ  r{   r°  r   r�   r¬   c                óx   •— t          ¦   «                              |||¦  «         || _        || _        d | _        d S r�   )r   r�  rÒ  r°  Úoutputs)r¹  rq  rŠ  r  rÒ  r°  r¢  s         €r”   r�  zCppTemplateBuffer.__init__
  s;   ø€ õ 	‰Œ×Ò˜ Ð);Ñ<Ô<Ð<Ø ˆŒØˆŒØ,0ˆŒˆˆr–   c                óÀ  •— t          | j        t          ¦  «        r¤t          | j        t          ¦  «        sJ t          | j        ¦  «        ¦   «         ‚| j        d         }t          |t          ¦  «        sJ t          |¦  «        ¦   «         ‚|j        }t          |t          ¦  «        sJ t          |¦  «        ¦   «         ‚|S t          ¦   «          	                    ¦   «         S r$  )
r‘   rq  r,  rÜ  r   r¾   r—  r
  r   r'  )r¹  Úfirst_outputrq  r¢  s      €r”   r'  zCppTemplateBuffer.get_layout  sº   ø€ Ý�d”kÕ#4Ñ5Ô5ð 		(Ý˜dœl­HÑ5Ô5ÐIÐIµt¸D¼LÑ7IÔ7IÑIÔIÐ5àœ<¨œ?ˆLÝ˜l­FÑ3Ô3ÐGÐGµT¸,Ñ5GÔ5GÑGÔGÐ3Ø!Ô(ˆFÝ˜f¥fÑ-Ô-Ð;Ð;­t°F©|¬|Ñ;Ô;Ð-ØˆMå‘7”7×%Ò%Ñ'Ô'Ð'r–   )rq  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ð 1ð 1ð 1ð 1ð 1ð
(ð 
(ð 
(ð 
(ð 
(ð 
(ð 
(ð 
(ð 
(ð 
(r–   rÚ  c                  ó0   ‡ — e Zd ZdZ	 ddˆ fd„Zdd„Zˆ xZS )ÚCuteDSLTemplateBufferz‘
    Buffer for CuteDSL (CUTLASS Python DSL) template kernels.
    Similar to other template buffers but specialized for CuteDSL operations.
    Nrq  r
  rŠ  r‹  r  rÐ  rÒ  r   r  r  r�   r¬   c                ó‚  •‡ ‡— t          ¦   «                              |||¦  «         |‰ _        |‰ _        ‰ g‰ _        |�€t          ‰ j        d         t          ¦  «        s"J t          ‰ j        d         ¦  «        ¦   «         ‚‰ j        d          	                    ¦   «         Š‰ xj        ˆˆ fd„|D ¦   «         z  c_        d S d S )Nr   c                óN   •— g | ]!}t          t          ‰¬ ¦  «        |‰¦  «        ‘Œ"S r  r  r   s     €€r”   r×   z2CuteDSLTemplateBuffer.__init__.<locals>.<listcomp>:  s@   ø€ ð ð ð àõ �z°Ð8Ñ8Ô8¸#¸tÑDÔDðð ð r–   )
r   r�  rÒ  r  rÜ  r‘   rŠ  r‰   r¾   r+  )r¹  rq  rŠ  r  rÒ  r  r!  r¢  s   `     @€r”   r�  zCuteDSLTemplateBuffer.__init__*  sÒ   øøø€ õ 	‰Œ×Ò˜ Ð);Ñ<Ô<Ð<Ø ˆŒØ,ˆÔØ&* VˆŒàÐ%Ý˜dœk¨!œn­fÑ5Ô5ÐKÐKµt¸D¼KÈ¼NÑ7KÔ7KÑKÔKÐ5Ø”[ ”^×.Ò.Ñ0Ô0ˆFØˆLŒLð ð ð ð ð à)ðñ ô ñ ˆLŒLˆLˆLð &Ð%r–   rÔ  c                ó   — | j         S r�   ©rÜ  r¸  s    r”   rÖ  z!CuteDSLTemplateBuffer.get_outputs?  ó
   € ØŒ|Ðr–   r�   )rq  r
  rŠ  r‹  r  rÐ  rÒ  r   r  r  r�   r¬   rÝ  )r¥   r¦   r§   r¯  r�  rÖ  r‡  rˆ  s   @r”   rà  rà  $  se   ø€ € € € € ðð ð 37ðð ð ð ð ð ð ð*ð ð ð ð ð ð ð r–   rà  c                  óL   ‡ — e Zd ZdZ	 	 	 	 	 ddˆ fd„Zd d„Zd!d„Z	 d"d#d„Zˆ xZS )$ÚNVUniversalGemmBufferzÀ
    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.
    r   Nrq  r
  rŠ  r‹  Úkernelr   Úaccumulator_typeÚvariantrÑ  r’   Úscale_type_aú
Any | NoneÚscale_type_bÚswizzle_type_aÚswizzle_type_br�   r¬   c                ó$  •— t          ¦   «                              ||d ¬¦  «         || _        || _        | g| _        || _        || _        || _        || _        |	| _	        |
| _
        |j        j        |j        j        dœ| _        | j        | _        d S )N)r  )Úkernel_nameÚmin_cc)r   r�  rè  ré  rÜ  rÑ  rê  rë  rí  rî  rï  Úmetadatarñ  rò  Úkernel_metadataÚ_make_kernel_renderr  )r¹  rq  rŠ  rè  ré  rê  rÑ  rë  rí  rî  rï  r¢  s              €r”   r�  zNVUniversalGemmBuffer.__init__K  sŸ   ø€ õ 	‰Œ×Ò˜ ¸DÐÑAÔAÐAØˆŒØ 0ˆÔØ&* VˆŒØ,ˆÔØˆŒØ(ˆÔØ(ˆÔØ,ˆÔØ,ˆÔð "œ?Ô6Ø”oÔ,ð 
ð  
ˆÔð #'Ô":ˆÔÐÐr–   c                ó   — | j         S )z#Return the workspace size in bytes.rÖ  r¸  s    r”   rÜ  z(NVUniversalGemmBuffer.get_workspace_sizel  s   € àÔ"Ð"r–   rÔ  c                ó   — | j         S r�   rä  r¸  s    r”   rÖ  z!NVUniversalGemmBuffer.get_outputsp  rå  r–   Úout_noderº  r¥  útuple[Any, Any]c                ó„  ‡	— ddl m} ddlm} g }| j        D ]O}t          |t          ¦  «        r|j        }t          |t          ¦  «        r|j        }| 	                    |¦  «         ŒPt          |j        ¦  «        } ||||| j        | j        | j        | j        | j        | j        | j        | j        ¬¦  «        Š	ˆ	fd„}‰	|fS )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œ   rˆ  rô  ré  rÑ  rê  rë  rí  rî  rï  c                 ó,   •— ‰                       ¦   «         S r�   )rÁ  )Úrender_kernels   €r”   rÁ  z9NVUniversalGemmBuffer._make_kernel_render.<locals>.renderš  s   ø€ Ø ×'Ò'Ñ)Ô)Ð)r–   )ÚBtorch._inductor.codegen.nv_universal_gemm.nv_universal_gemm_kernelrû  Útorch._inductor.utilsrü  rŠ  r‘   rˆ   rp  r–  ró  rÃ   ÚKERNEL_NAMErô  ré  rÑ  rê  rë  rí  rî  rï  )
r¹  rø  rº  rû  rü  rœ   r‘  rñ  rÁ  rþ  s
            @r”   rõ  z)NVUniversalGemmBuffer._make_kernel_renders  s  ø€ ð	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	6Ð5Ð5Ð5Ð5Ð5à!#ˆØ”;ð 	$ð 	$ˆCÝ˜#�yÑ)Ô)ð Ø”h�Ý˜#�zÑ*Ô*ð Ø”h�Ø×Ò˜sÑ#Ô#Ð#Ð#å˜+Ô1Ñ2Ô2ˆà-Ð-Ø#Ø#Ø Ø Ô0Ø!Ô2ØÔ.Ø”LØÔ*ØÔ*ØÔ.ØÔ.ð
ñ 
ô 
ˆð	*ð 	*ð 	*ð 	*ð 	*ð ˜fÐ$Ð$r–   )r   NNNN)rq  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ˆ  s   @r”   rç  rç  C  s¤   ø€ € € € € ðð ð  Ø#'Ø#'Ø%)Ø%)ð;ð ;ð ;ð ;ð ;ð ;ð ;ðB#ð #ð #ð #ðð ð ð ð :>ð*%ð *%ð *%ð *%ð *%ð *%ð *%ð *%ð *%r–   rç  r®   ú#Sequence[IRNode | Sequence[IRNode]]úTypeIs[Sequence[IRNode]]c                ó4   — t          d„ | D ¦   «         ¦  «        S )Nc              3  ó@   K  — | ]}t          |t          ¦  «        V — Œd S r�   ©r‘   r‰   rÎ  s     r”   rø   z#is_node_sequence.<locals>.<genexpr>£  s,   è è € Ð4Ð4¨�z˜!�VÑ$Ô$Ð4Ð4Ð4Ð4Ð4Ð4r–   )rù   )r®   s    r”   Úis_node_sequencer	     s!   € õ Ð4Ð4¨eÐ4Ñ4Ô4Ñ4Ô4Ð4r–   c                  ó    — e Zd ZU ded<   dd„Zdd	„Zdd„Zedd„¦   «         Ze	dd„¦   «         Z
dd„Zdd„Z ed ¦  «        	 d d!d„¦   «         ZdS )"r°  r	  rŠ  rÕ   r’   r�   rÃ   c                ór   — | j         |         }t          |t          ¦  «        sJ ‚|                     ¦   «         S r�   ©rŠ  r‘   r‰   r˜  )r¹  rÕ   Úinputs      r”   Ú
input_namezInputsKernel.input_nameª  s3   € Ø”˜A”ˆÝ˜%¥Ñ(Ô(Ð(Ð(Ð(Ø�~Š~ÑÔÐr–   rj  c                ó&  ‡— t          t          j                 ¦   «         }t          j        Š| j        D ]}t          |t          ¦  «        r"|                     ˆfd„|D ¦   «         ¦  «         Œ9t          |t          ¦  «        rŒO| 	                     ‰| 
                    ¦   «         ¦  «        ¦  «         Œ€t          t          j                 ˆfd„|                      ¦   «         D ¦   «         ¦  «        }t          j        ||t          ¦   «         ¬¦  «        S )Nc              3  óR   •K  — | ]!} ‰|                      ¦   «         ¦  «        V — Œ"d S r�   rn  )rÔ   r‹   r½  s     €r”   rø   z/InputsKernel.get_read_writes.<locals>.<genexpr>´  s5   øè è € ÐBÐB°q˜W˜W Q§Z¢Z¡\¤\Ñ2Ô2ÐBÐBÐBÐBÐBÐBr–   c              3  óR   •K  — | ]!} ‰|                      ¦   «         ¦  «        V — Œ"d S r�   rn  )rÔ   rá  r½  s     €r”   rø   z/InputsKernel.get_read_writes.<locals>.<genexpr>»  sF   øè è € ð .
ð .
Ø(+ˆGˆG�C—L’L‘N”NÑ#Ô#ð.
ð .
ð .
ð .
ð .
ð .
r–   r®  )r@   rK   rQ   r½  rŠ  r‘   r   ry  r¼   rá  r˜  rÖ  r±  )r¹  rp  r	  r¯  r½  s       @r”   rl  zInputsKernel.get_read_writes¯  s  ø€ Ý�<Ô+Ô,Ñ.Ô.ˆÝÔ&ˆØ”[ð 	5ð 	5ˆEÝ˜%¥Ñ*Ô*ð 5Ø—’ÐBÐBÐBÐB¸EÐBÑBÔBÑBÔBÐBÐBÝ˜EÕ#8Ñ9Ô9ð 5àà—	’	˜'˜' %§.¢.Ñ"2Ô"2Ñ3Ô3Ñ4Ô4Ð4Ð4å�LÔ,Ô-ð .
ð .
ð .
ð .
Ø/3×/?Ò/?Ñ/AÔ/Að.
ñ .
ô .
ñ 
ô 
ˆõ Ô&ØØÝ"™œð
ñ 
ô 
ð 	
r–   rm  c                ó4   — |                       ¦   «         j        S r�   ro  r¸  s    r”   rË  zInputsKernel.get_readsÅ  rq  r–   r‹   r‰   c                óæ  — t          |t          ¦  «        r|j        }t          |t          ¦  «        r|j        }t          |t          ¦  «        r/t          |t
          ¦  «        st                               |¦  «        }t          |t          ¦  «        r|                      |¦  «        S t          |t          ¦  «        r|S t          |t          t
          f¦  «        sJ t          |¦  «        ¦   «         ‚|S r�   )r‘   rˆ   rp  r–  r”  rv  rß  rV  Úunwrap_storage_for_inputÚTorchBindObjectr—  r¾   ©r  r‹   s     r”   r	  z%InputsKernel.unwrap_storage_for_inputÈ  s×   € å�a�Ñ#Ô#ð 	Ø”ˆAÝ�a�Ñ$Ô$ð 	Ø”ˆAÝ�a�Ñ"Ô"ð 	.­:°a½Ñ+IÔ+Ið 	.Ý×*Ò*¨1Ñ-Ô-ˆAÝ�a�Ñ#Ô#ð 	3ð
 ×/Ò/°Ñ2Ô2Ð2Ý�a�Ñ)Ô)ð 	ØˆHÝ˜!�f¥oÐ6Ñ7Ô7Ð@Ð@½¸a¹¼Ñ@Ô@Ð7Øˆr–   úlist[IRNode | Sequence[IRNode]]c                ó¶   — g }| D ]S}t          |t          ¦  «        rd„ |D ¦   «         }nt                               |¦  «        }|                     |¦  «         ŒT|S )Nc                óB   — g | ]}t                                |¦  «        ‘ŒS r©   )r°  r	  r  s     r”   r×   z/InputsKernel.unwrap_storage.<locals>.<listcomp>â  s&   € ÐIÐIÐIÀ!•\×:Ò:¸1Ñ=Ô=ÐIÐIÐIr–   )r‘   r   r°  r	  ró  )rŠ  Ú
inputs_newr‹   s      r”   r!  zInputsKernel.unwrap_storageÛ  so   € ð 79ˆ
Øð 	!ð 	!ˆAÝ˜!�XÑ&Ô&ð =ØIÐIÀqÐIÑIÔI��å ×9Ò9¸!Ñ<Ô<�Ø×Ò˜aÑ Ô Ð Ð ØÐr–   r    c                ó   — dS r£  r©   r¸  s    r”   r  zInputsKernel.is_externè  r×  r–   c                ó   — dS rÂ  r©   r¸  s    r”   rs  zInputsKernel.num_readsë  r4  r–   Fr�  rš   c                óì   — t          t          j                 ¦   «         }| j        D ]M}t	          |t
          ¦  «        r||                     |¦  «        z  }Œ0|D ]}||                     |¦  «        z  }ŒŒN|S r�   )r@   r·   r"   rŠ  r‘   r‰   rx  )r¹  r�  r  r‘  Ú	inner_inps        r”   rx  z!InputsKernel.get_free_symbol_usesî  sŒ   € õ •u”|Ô$Ñ&Ô&ˆØ”;ð 	Gð 	GˆCÝ˜#�vÑ&Ô&ð GØ�S×-Ò-¨mÑ<Ô<Ñ<��à!$ð Gð G�IØ˜×7Ò7¸ÑFÔFÑF�A�AðGàˆr–   N)rÕ   r’   r�   rÃ   r§  r¨  rë  )rŠ  r	  r�   r	  r–  r©  r¢  r«  )r¥   r¦   r§   r¨   r	  rl  rË  r3  r	  r²  r!  r  rs  rb   rx  r©   r–   r”   r°  r°  ¦  sú   € € € € € € à/Ð/Ð/Ñ/ð ð  ð  ð  ð

ð 
ð 
ð 
ð,,ð ,ð ,ð ,ð ðð ð ñ „[ðð$ ð
ð 
ð 
ñ „\ð
ðð ð ð ðð ð ð ð Ð˜NÑ+Ô+à$)ð
ð 
ð 
ð 
ñ ,Ô+ð
ð 
ð 
r–   r°  c                  ó   — e Zd Zdd„Zdd„ZdS )	Ú	NopKernelr�   r    c                ó   — dS r£  r©   r¸  s    r”   r�  zNopKernel.is_no_opý  r×  r–   rm  c                ó   — t          ¦   «         S r�   r?   r¸  s    r”   rË  zNopKernel.get_reads   rÙ  r–   Nr–  r¨  )r¥   r¦   r§   r�  rË  r©   r–   r”   r	  r	  ü  s<   € € € € € ðð ð ð ðð ð ð ð ð r–   r	  c                  ó”   — e Zd ZdZedd„¦   «         Ze	 ddd„¦   «         Z ed ¦  «        	 ddd„¦   «         Zedd„¦   «         Z	dd„Z
d	S )ÚConcatKernelzn
    There isn't actually a real kernel for concat, we just change the
    storage for the upstream data.
    rŠ  r‹  rc  r’   r�   r–  c                óö  — |d                               ¦   «         }|d                              ¦   «         }t          |d                              ¦   «         ¦  «        }dg}||         g}d|cxk    rt	          |¦  «        k     sn J ‚t          dt	          |¦  «        ¦  «        D �]#}||                              ¦   «         }	|                     ||         ¦  «         t	          |	¦  «        t	          |¦  «        k    sJ ‚||                              ¦   «         |k    sJ ‚||                               ¦   «         |k    sJ ‚t          t	          |¦  «        ¦  «        D ]Q}
|
|k    r||
         |	|
         z   ||
<   Œt          j        j	         
                    ||
         |	|
         ¦  «        ||
<   ŒR|                     ||         ¦  «         �Œ%t                               |¦  «        }t          j        r't                               |||d         j        ¦  «        }t          t	          |¦  «        ¦  «        D ]x}||         }t%          |¦  «        r_|                     ¦   «         }t)          |t*          ¦  «        r6t                               |j        |j        ¦  «        rt3          |¦  «        } nŒyt5          d„ |D ¦   «         ¦  «        }t          j        j        j        d         }|du r=t)          |t          ¦  «        r(t5          d„ |D ¦   «         ¦  «        rt3          |¦  «        }t;          d„ |D ¦   «         ¦  «        }|€J ‚t=          dt+          |||||¬¦  «        g ¬	¦  «        }t?          |¦  «        }g }tA          |¦  «        D �]¸\  }}t)          |tB          tD          f¦  «        sJ tG          |¦  «        ¦   «         ‚|  $                    |tJ           &                    ||||         ||         d¬
¦  «        ¦  «        }t)          |tN          ¦  «        sJ tG          |¦  «        ¦   «         ‚t)          |j(        t          ¦  «        sJ tG          |j(        ¦  «        ¦   «         ‚|j(                             |¦  «         t)          |j)        tB          ¦  «        r|j)         *                    ¦   «         }n|j)        }t)          |t>          ¦  «        rt| +                    ¦   «         r`|                      ¦   «         x}�JtY          |j#        ¦  «        r6t[          |¦  «        s'|                     | .                    ¦   «         ¦  «         �Œºt	          |¦  «        dk    rIt          j         /                    |t`          j1        ¦  «        rt          j         2                    |¦  «         t          j         3                    |¦  «        |_4        |  5                    |j(        ¦  «        |_(        t          j         6                    |¦  «         |S )z6
        Create the concat kernel from inputs
        r   rI   c              3  ó4   K  — | ]}t          |¦  «        V — Œd S r�   )r&  r  s     r”   rø   z&ConcatKernel.create.<locals>.<genexpr>6  s+   è è € Ð-WÐ-WÈ1Õ.CÀAÑ.FÔ.FÐ-WÐ-WÐ-WÐ-WÐ-WÐ-Wr–   Fc              3  óÀ   K  — | ]Y}d |j         v oKt          |j         d          t          j        ¬¦  «        p%t          |j         d          t          j        ¬¦  «        V — ŒZdS )r"  ©rî  N)r†  r/   r-  rñ  ró  ©rÔ   Úargs     r”   rø   z&ConcatKernel.create.<locals>.<genexpr>=  sŽ   è è € ð ð ð ð ˜œÐ!ð å<àœ œÝ&+Ô&9ðñ ô ð 	õ
 @àœ œÝ&+Ô&<ðñ ô ðð ð ð ð ð r–   c              3  óf   K  — | ],}t          |¦  «        o|                     ¦   «         j        V — Œ-d S r�   )r&  r'  ru  r  s     r”   rø   z&ConcatKernel.create.<locals>.<genexpr>Q  sL   è è € ð 
ð 
ØFGÕ! !Ñ$Ô$ÐA¨¯ª©¬Ô)Að
ð 
ð 
ð 
ð 
ð 
r–   N)r!  r   r  r  ru  ©rÂ   rq  rŠ  ©rR  )7r+  r*  r°   r%  rÙ   rÚ   ró  rw   r"  r#  rL  r(  r)  rJ   rÔ  r
  rC  r   r&  r'  r‘   rs  r¤  r  r  r1   ra  Úcurrent_noderÆ   rù   r"	  r–  r  r”  rC  r¾   rN  rB  r·  r—  rŠ  rp  r•  rJ  rn   rm   r‡  ræ  rL   ÚFOREACHÚregister_operation_listr"  rÂ   r!  r#  )r  rŠ  rc  r!  r   r�  Úoffsets_startÚoffsets_endrÕ   Ú
input_sizer  Úoutput_strider‹   rq  Úany_input_is_storage_and_layoutÚfx_node_argsru  Úconcat_kernelrè  Úop_namesr‘  r!  Úinput_unwrappedÚdevs                           r”   r·  zConcatKernel.create
  s×  € ð
 ˜”×%Ò%Ñ'Ô'ˆØ�q”	×#Ò#Ñ%Ô%ˆÝ˜˜qœ	×*Ò*Ñ,Ô,Ñ-Ô-ˆØ˜ˆØ ”}�oˆØ�CÐ'Ð'Ò'Ð'�#˜h™-œ-Ò'Ð'Ð'Ð'Ð'Ð'Ý�q�#˜f™+œ+Ñ&Ô&ð 	.ñ 	.ˆAØ œ×+Ò+Ñ-Ô-ˆJØ× Ò  ¨#¤Ñ/Ô/Ð/Ý�z‘?”?¥c¨(¡m¤mÒ3Ð3Ð3Ð3Ø˜!”9×&Ò&Ñ(Ô(¨EÒ1Ð1Ð1Ð1Ø˜!”9×'Ò'Ñ)Ô)¨VÒ3Ð3Ð3Ð3Ý�3˜x™=œ=Ñ)Ô)ð ð �Ø˜’8�8Ø"*¨1¤+°
¸1´Ñ"=�H˜Q‘K�Kå"#¤'Ô"2×"LÒ"LØ  œ Z°¤]ñ#ô #�H˜Q‘K�Kð ×Ò˜x¨œ}Ñ-Ô-Ð-Ñ-å'5×'HÒ'HÈÑ'RÔ'RˆÝÔ'ð 	å"×/Ò/Ø˜x¨°¬¬ñô ˆMõ
 •s˜6‘{”{Ñ#Ô#ð 		ð 		ˆAØ�q”	ˆAÝ$ QÑ'Ô'ð ØŸš™œ�ÝØ�Kñô ð å×8Ò8¸¼ÀfÄmÑTÔTðõ %CÀ8Ñ$LÔ$L�MØ�EøÝ*-Ð-WÐ-WÐPVÐ-WÑ-WÔ-WÑ*WÔ*WÐ'Ý”wÔ+Ô0°Ô3ˆð ,¨uÐ4Ð4Ý˜<­Ñ.Ô.ð 5åð ð ð (ðñ ô ñ ô ð 5õ( ;¸8ÑDÔDˆMåð 
ð 
ØKQð
ñ 
ô 
ñ 
ô 
ˆ	ð Ð!Ð!Ð!Ý$ØÝØØØØ$Ø#ðñ ô ð ð

ñ 

ô 

ˆõ ˜MÑ*Ô*ˆØˆÝ Ñ'Ô'ð 	Cñ 	C‰FˆAˆsÝ˜c¥H­jÐ#9Ñ:Ô:ÐEÐE½DÀ¹I¼IÑEÔEÐ:Ø×+Ò+ØÝ× Ò Ø˜C ¨qÔ!1°;¸q´>Èð !ñ ô ñô ˆLõ ˜l­FÑ3Ô3ÐGÐGµT¸,Ñ5GÔ5GÑGÔGÐ3Ý˜mÔ2µDÑ9Ô9ÐUÐU½4ÀÔ@TÑ;UÔ;UÑUÔUÐ9ØÔ ×'Ò'¨Ñ5Ô5Ð5å˜#œ(¥HÑ-Ô-ð +Ø"%¤(×"6Ò"6Ñ"8Ô"8��à"%¤(�õ ˜?­JÑ7Ô7ðCà#×3Ò3Ñ5Ô5ðCð  ŸNšNÑ,Ô,Ð,�SÐ9Ý˜3œ8Ñ$Ô$ð :å" <Ñ0Ô0ð :ð —’ × ?Ò ?Ñ AÔ AÑBÔBÐBùåˆx‰=Œ=˜1ÒÐ¥¤×!4Ò!4°V½^Ô=SÑ!TÔ!TÐÝŒG×+Ò+¨HÑ5Ô5Ð5åœW×4Ò4°]ÑCÔCˆÔØ"×1Ò1°-Ô2FÑGÔGˆÔÝ	Œ×"Ò" =Ñ1Ô1Ð1àˆr–   NrF  r‰   rG  r  r    c                ó  — t          |t          ¦  «        r|                      |j        |¦  «        S t          |t          t
          f¦  «        sJ t          |¦  «        ¦   «         ‚t          |j        t          ¦  «        rÂt          |j        j        t          ¦  «        r|j        j
        sdS |€dS t          |                     ¦   «         ¦  «        t          |                     ¦   «         ¦  «        k    rdS t          d„ t          |                     ¦   «         |                     ¦   «         ¦  «        D ¦   «         ¦  «        S t          |j        d¦  «        o9t          |j        j        t           ¦  «        ot          |j        t"          ¦  «         S )NFTc              3  óf   K  — | ],\  }}t           j        j                             ||¦  «        V — Œ-d S r�   rl  rn  s      r”   rø   z=ConcatKernel.can_realize_into_without_copy.<locals>.<genexpr>Ÿ  sO   è è € ð ð á�B˜õ ”Ô ×8Ò8¸¸RÑ@Ô@ðð ð ð ð ð r–   rq  )r‘   rˆ   Úcan_realize_into_without_copyrp  r”  r–  r¾   r¦  rq  rs  r¸  rÙ   rT  rù   rÝ   rà  r(  ÚExternKernelAlloc)r  rF  rG  s      r”   r;	  z*ConcatKernel.can_realize_into_without_copy†  si  € õ �c�9Ñ%Ô%ð 	Dà×4Ò4°S´X¸sÑCÔCÐCå˜#¥­*Ð5Ñ6Ô6ÐAÐA½¸S¹	¼	ÑAÔAÐ6Ý�c”hÕ 3Ñ4Ô4ð 	å˜sœxœµÑ<Ô<ðà”xÔ0ðð �uð ˆ{Ø�tõ �3—>’>Ñ#Ô#Ñ$Ô$­¨C¯NªNÑ,<Ô,<Ñ(=Ô(=Ò=Ð=Ø�uåð ð å! #§.¢.Ñ"2Ô"2°C·N²NÑ4DÔ4DÑEÔEðñ ô ñ ô ð õ �C”H˜hÑ'Ô'ð <Ý˜3œ8œ?­NÑ;Ô;ð<å˜sœxÕ):Ñ;Ô;Ð;ð	
r–   Fr�  rš   c                ó8   — t                                | |¦  «        S r�   )r	  rx  rw  s     r”   rx  z!ConcatKernel.get_free_symbol_usesª  s   € õ ×-Ò-¨d°MÑBÔBÐBr–   c                ó€  — t          |t          ¦  «        s2t          |¦  «        r#t          |¦  «        \  }}t          ||¬¦  «        }t          |t          ¦  «        sJ t	          |¦  «        ¦   «         ‚t          |t
          ¦  «        r|                      |j        |¦  «        S t          |t          ¦  «        ra| 	                    ¦   «          t          |j        d¦  «        sJ ‚|                      ||¦  «        r t          |¦  «        |j        _        |j        S t                               |                     ¦   «         |                     ¦   «         |                     ¦   «         d„ t'          |                     ¦   «         |                     ¦   «         ¦  «        D ¦   «         ¬¦  «        }|                      ||¦  «        S )Nro  rq  c                ó^   — g | ]*\  }}t           j        j                             ||¦  «        ‘Œ+S r©   rK  rM  s      r”   r×   z-ConcatKernel.realize_into.<locals>.<listcomp>Ë  sA   € ð ð ð á�A�qõ ”Ô ×:Ò:¸1¸aÑ@Ô@ðð ð r–   rR  )r‘   rv  r&  rr  r¾   rˆ   rN  rp  r–  r*  rà  r;	  r  rq  r=  r·  r+  r*  r>  rÝ   r%  )r  rF  rG  rw  rq  Úpws         r”   rN  zConcatKernel.realize_into°  s�  € õ
 ˜#�Ñ/Ô/ð 	CÝ$ SÑ)Ô)ð CÝ"7¸Ñ"<Ô"<‘�˜Ý%¨7¸6ÐBÑBÔB�Ý˜#�Ñ/Ô/Ð:Ð:µ°c±´Ñ:Ô:Ð/Ý�c�9Ñ%Ô%ð 	3à×#Ò# C¤H¨cÑ2Ô2Ð2å�c�:Ñ&Ô&ð 	 Ø�KŠK‰MŒMˆMå˜3œ8 XÑ.Ô.Ð.Ð.Ð.Ø×0Ò0°°cÑ:Ô:ð  å"1°#Ñ"6Ô"6�””Ø”x�å×ÒØ—>’>Ñ#Ô#Ø—-’-‘/”/Ø—_’_Ñ&Ô&ðð å §¢¡¤°·²±´Ñ?Ô?ðñ ô ð	 ñ 
ô 
ˆð ×Ò  CÑ(Ô(Ð(r–   c                ó   — dS r£  r©   r¸  s    r”   rx  zConcatKernel.should_allocateÒ  r×  r–   )rŠ  r‹  rc  r’   r�   r–  r�   )rF  r‰   rG  r  r�   r    r¢  r«  )rF  r‰   rG  r‰   r�   r‰   r–  )r¥   r¦   r§   r¯  r3  r·  r;	  rb   rx  rN  rx  r©   r–   r”   r"	  r"	    sÚ   € € € € € ðð ð
 ðyð yð yñ „[ðyðv à/3ð!
ð !
ð !
ð !
ñ „[ð!
ðF Ð˜NÑ+Ô+à$)ðCð Cð Cð Cñ ,Ô+ðCð
 ð)ð )ð )ñ „[ð)ðBð ð ð ð ð r–   r"	  r<   r›  c              #  óœ   K  — |                       d¦  «        }	 d V — |                       |¦  «         d S # |                       |¦  «         w xY wr8  )Ú"_ignore_fresh_unbacked_symbols_set)rñ   Úprevs     r”   Ú_track_fresh_unbacked_symbolsrE	  Ö  s[   è è € à×7Ò7¸Ñ>Ô>€Dð;Øˆˆˆà×4Ò4°TÑ:Ô:Ð:Ð:Ð:øˆ	×4Ò4°TÑ:Ô:Ð:Ð:øøøs	   ™4 ´AúAbstractContextManager[None]c                óh   — | �#|                       ¦   «         rt          | ¦  «        S t          ¦   «         S r�   )Ú"_ignore_fresh_unbacked_symbols_tlsrE	  r
   )rñ   s    r”   Ú(_fallback_kernel_symbol_tracking_contextrI	  ß  s3   € ð Ð ×!MÒ!MÑ!OÔ!OÐÝ,¨YÑ7Ô7Ð7Ý‰=Œ=Ðr–   c                  ó¤  ‡ — e Zd ZU dZdZded<    ej        e¬¦  «        Z	ded<   dZ
d	ed
<   dZded<   dZded<    ej        e¬¦  «        Zded<   dZded<   dZded<    ej        e¬¦  «        Zded<   dZded<    ej        e¬¦  «        Zded<    ej        e¬¦  «        Zded<   	 	 	 	 	 	 	 dkdlˆ fd$„Zdmd&„Zdnd(„Zdoˆ fd*„Zdpd+„Zdpd,„Z	 dqdrd0„Zdsd1„Zdqdtd2„Zdud3„Zdvd4„Zdwd6„Z e!dxd:„¦   «         Z"e#dyd@„¦   «         Z$e#dzdB„¦   «         Z%e#d{dC„¦   «         Z&e#d{dD„¦   «         Z'e#	 	 	 d|d}dL„¦   «         Z(e#	 d~ddN„¦   «         Z)e#	 d~d€dP„¦   «         Z*e#d{dQ„¦   «         Z+e#d{dR„¦   «         Z,e#d{dS„¦   «         Z-e#d{dT„¦   «         Z.dpdU„Z/d�dV„Z0dqd‚dZ„Z1dƒd[„Z2d„d]„Z3d~d…d_„Z4dwd`„Z5dsda„Z6dsdb„Z7dsdc„Z8d†de„Z9d‡dg„Z: e;d ¦  «        	 d~dˆdi„¦   «         Z<dwdj„Z=e=Z>ˆ xZ?S )‰rß  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©   r2  Úconstant_argsr1  r¤  rÇ   NúReinterpretView | NoneÚoutput_viewr8  Úpython_kernel_nameÚcpp_kernel_nameúIterable[str]Úordered_kwargs_for_cpp_kernelú_OpOverloads | NoneÚop_overloadzlist[dict[str, Any]] | NoneÚarg_propertieszdict[str, dict[str, Any]]Úallarg_propertiesz dict[str, dict[str, Any]] | NoneÚkwarg_propertiesz"dict[sympy.Symbol, pytree.KeyPath]Úunbacked_bindingszlist[MutationOutput]r'  rÂ   rq  r<  rŠ  r	  údict[str, Any] | Noner�   r¬   c                óp  •— t          ¦   «                              |||¬¦  «         || _        |r|ni | _        || _        |
| _        |                      |¦  «         |                      |¦  «         |	| _        |  	                    ¦   «          i | _
        g | _        t          j        j        | _        i | _        d S ©Nr*	  )r   r�  rK	  rÇ   rM	  rS	  Úset_cpp_kernel_nameÚset_python_kernel_namerQ	  Úcollect_arg_kwarg_propertiesrW	  r'  rw   r"  r,	  Úfx_noder   )r¹  rÂ   rq  rŠ  rK	  rÇ   rM	  rN	  rO	  rQ	  rS	  r¢  s              €r”   r�  zExternKernel.__init__  sÆ   ø€ õ 	‰Œ×ÒØØØð 	ñ 	
ô 	
ð 	
ð
 +ˆÔØ &Ð.�f�f¨BˆŒØ&ˆÔØ&ˆÔØ× Ò  Ñ1Ô1Ð1Ø×#Ò#Ð$6Ñ7Ô7Ð7Ø-JˆÔ*Ø×)Ò)Ñ+Ô+Ð+Ø!#ˆÔØ "ˆÔÝ”wÔ+ˆŒà+-ˆÔÐÐr–   rÔ  c                ó   — | g| j         ¢S r�   r|  r¸  s    r”   rÖ  zExternKernel.get_outputs#  r}  r–   rš   c                ó   — t          ¦   «         S r�   r?   r¸  s    r”   rØ  z%ExternKernel.get_unbacked_symbol_defs&  rÙ  r–   rj  c                óž   •‡— t          ¦   «                              ¦   «         Šdˆfd„}t          j        || j        | j        fd„ ¬¦  «         ‰S )	Nr1  r   r�   r¬   c                ó¾   •— t          | t          ¦  «        rD|                      ¦   «         }|�0‰j                             t          j        |¦  «        ¦  «         d S d S d S r�   )r‘   r‰   rG  rp  rá  rK   r½  )r1  rÂ   rÚ  s     €r”   Úadd_ir_readz1ExternKernel.get_read_writes.<locals>.add_ir_read,  sg   ø€ Ý˜%¥Ñ(Ô(ð FØ×+Ò+Ñ-Ô-�ØÐ#ØÔ%×)Ò)­,Ô*>¸tÑ*DÔ*DÑEÔEÐEÐEÐEðFð Fà#Ð#r–   c                ó,   — t          | t          ¦  «        S r�   r	  r5  s    r”   rÎ  z.ExternKernel.get_read_writes.<locals>.<lambda>5  s   € ¥*¨UµFÑ";Ô";€ r–   )Úis_leaf)r1  r   r�   r¬   )r   rl  ÚpytreeÚ	tree_map_rK	  rÇ   )r¹  rc	  rÚ  r¢  s     @€r”   rl  zExternKernel.get_read_writes)  sw   øø€ Ý‘g”g×-Ò-Ñ/Ô/ˆð	Fð 	Fð 	Fð 	Fð 	Fð 	Fõ 	ÔØØÔ ¤Ð-Ø;Ð;ð	
ñ 	
ô 	
ð 	
ð
 Ðr–   c                óX  — t          | j        t          j        j        ¦  «        rd„ | j        j        j        D ¦   «         n*d„ t          t          | j	        ¦  «        ¦  «        D ¦   «         | _
        t          | j        t          j        j        ¦  «        rd„ | j        j        j        D ¦   «         ni | _        t          | j        t          j        j        ¦  «        rI| j        s d„ | j        j        j        D ¦   «         | _        d„ | j        j        j        D ¦   «         | _        d S g | _        d S )Nc                óF   — g | ]}|j         °	|j        |j        |j        d œ‘ŒS ))rÂ   r¾   rS  )Ú
kwarg_onlyrÂ   Ú	real_typerS  r  s     r”   r×   z=ExternKernel.collect_arg_kwarg_properties.<locals>.<listcomp>=  sH   € ð ð ð ð Ø”|ðàœFØœKØ%&¤_ðð ðð ð r–   c                ó   — g | ]}i ‘ŒS r©   r©   r  s     r”   r×   z=ExternKernel.collect_arg_kwarg_properties.<locals>.<listcomp>G  s   € Ð6Ð6Ð6˜�"Ð6Ð6Ð6r–   c                ó8   — i | ]}|j         |j        |j        d œ“ŒS ))r¾   rS  )rÂ   rk	  rS  r  s     r”   r  z=ExternKernel.collect_arg_kwarg_properties.<locals>.<dictcomp>J  s8   € ð ð ð àð ” ¤¸q¼ÐOÐOðð ð r–   c                ó*   — g | ]}|j         ¯	|j        ‘ŒS r©   ©rj	  rÂ   r  s     r”   r×   z=ExternKernel.collect_arg_kwarg_properties.<locals>.<listcomp>U  s1   € ð 6ð 6ð 6Ø È!Ì,ð6Ø”Fð6ð 6ð 6r–   c                ó    — g | ]}|j         ¯	|‘ŒS r©   )rj	  r  s     r”   r×   z=ExternKernel.collect_arg_kwarg_properties.<locals>.<listcomp>X  s/   € ð "ð "ð "ØÀÄð"Øð"ð "ð "r–   )r‘   rS	  r-  Ú_opsÚ
OpOverloadÚ_schemaÚ	argumentsrÚ   rÙ   rŠ  rT	  rU	  rQ	  Úschema_kwargsr¸  s    r”   r]	  z)ExternKernel.collect_arg_kwarg_properties9  s[  € õ ˜$Ô*­E¬JÔ,AÑBÔBð
7ð ð ð Ô)Ô1Ô;ðñ ô ð ð 7Ð6�e¥C¨¬Ñ$4Ô$4Ñ5Ô5Ð6Ñ6Ô6ð 	Ôõ$ ˜$Ô*­E¬JÔ,AÑBÔBð	ð ð àÔ)Ô1Ô;ðñ ô ð ð
 ð 	Ôõ �dÔ&­¬
Ô(=Ñ>Ô>ð 		$ØÔ5ð ð6ð 6Ø$(Ô$4Ô$<Ô$Fð6ñ 6ô 6�Ô2ð"ð "ØÔ+Ô3Ô=ð"ñ "ô "ˆDÔÐÐð "$ˆDÔÐÐr–   c                óŽ   — t          | j        t          ¦  «        r*|                      ¦   «          |                      ¦   «          d S d S r�   )r‘   rq  r(  Úapply_constraintrZ  r¸  s    r”   rØ  zExternKernel.decide_layout^  sJ   € Ý�d”k¥>Ñ2Ô2ð 	!Ø×!Ò!Ñ#Ô#Ð#Ø×ÒÑ Ô Ð Ð Ð ð	!ð 	!r–   Úwrapperr|   rñ  c                óâ   — t          | |¦  «        \  }}|r|                     |¦  «         |s|                      ¦   «         }|r,ddlm}  || |d¬¦  «        }|                     ||¦  «         d S d S )NrI   )Ú'set_kernel_post_grad_provenance_tracingT)r  )rj   Úmake_commentÚtry_get_kernel_namerã  rz	  Úwrite_provenance_debug_handle)r¹  rx	  rñ  Ú
origin_strÚ_detailed_origin_strrz	  Údebug_handles          r”   Úcodegen_commentzExternKernel.codegen_commentc  s±   € õ ,?¸tÀWÑ+MÔ+MÑ(ˆ
Ð(Øð 	-Ø× Ò  Ñ,Ô,Ð,àð 	5Ø×2Ò2Ñ4Ô4ˆKØð 	MØFÐFÐFÐFÐFÐFàBÐBØ�k¨Tðñ ô ˆLð ×1Ò1°+¸|ÑLÔLÐLÐLÐLð	Mð 	Mr–   c                ó   — t           ‚r�   r¼  ©r¹  rx	  s     r”   ÚcodegenzExternKernel.codegent  r½  r–   c                ó  — || _         t          j        j        r$t	          | j        t          j        j        ¦  «        sd S | j        }| j         €½|j	        dk    rŸ|j
        dk    r |j                             d¦  «        d         n|j                             dd¦  «        }ddlm} |                     d|j        › �i ¦  «        }t#          d„ |D ¦   «         d	¬
¦  «        }|d	k    r|› d|› �}d|› d�| _         d S |j        j        | _         d S d S )NÚatenr\  ú.r   r  ©Úinductor_fallback_opszaten.c              3  ón   K  — | ]0}|                      d ¦  «        ¯t          |dd…         ¦  «        V — Œ1dS )rÂ  rI   N)Ú
startswithr’   rÁ  s     r”   rø   z3ExternKernel.set_cpp_kernel_name.<locals>.<genexpr>“  sA   è è € ÐKÐK A¸¿ºÀcÑ9JÔ9JÐK•S˜˜1˜2˜2œ‘Z”ZÐKÐKÐKÐKÐKÐKr–   rI   rÙ  Ú_vz
at::_ops::z::call)rO	  rw   r"  Úcpp_wrapperr‘   rS	  r-  rq	  rr	  Ú	namespaceÚ_overloadnamer¥   rô  ÚreplaceÚtorchgen.aoti.fallback_opsr‰	  rå  r  rs	  rÂ   )r¹  rO	  rè  Úopnamer‰	  Úversion_infoÚlatest_versions          r”   r[	  z ExternKernel.set_cpp_kernel_namew  sT  € Ø.ˆÔÝŒwÔ"ð 	­*ØÔ�eœjÔ3ñ+
ô +
ð 	ð ˆFàÔ!ˆØÔÐ'àÔ 6Ò)Ð)ð Ô+¨yÒ8Ð8ð ”O×)Ò)¨#Ñ.Ô.¨qÔ1Ð1àœ×0Ò0°°cÑ:Ô:ð ð MÐLÐLÐLÐLÐLà4×8Ò8Ð9RÀÄÐ9RÐ9RÐTVÑWÔW�Ý!$ØKÐK¨ÐKÑKÔKØð"ñ "ô "�ð " AÒ%Ð%Ø &Ð:Ð:¨.Ð:Ð:�FØ'B°FÐ'BÐ'BÐ'B�Ô$Ð$Ð$à'-¤~Ô':�Ô$Ð$Ð$ð7 (Ð'r–   c                óæ   — || _         |�d S | j        }|€d S t          |t          j        j        ¦  «        rd|j        › �| _         d S |j                             dd¦  «        › d|j        › �| _         d S )Nztorch.ops.higher_order.ú._ops.ú.ops.r‡	  )	rN	  rS	  r‘   r-  rq	  ÚHigherOrderOperatorr¥   r¦   r�	  )r¹  rN	  rè  s      r”   r\	  z#ExternKernel.set_python_kernel_nameœ  sŒ   € Ø"4ˆÔØÐ)ØˆFàÔ!ˆØˆ>ØˆDÝ˜¥¤
Ô >Ñ?Ô?ð 	Ø&QÀÄÐ&QÐ&QˆDÔ#Ð#Ð#ð Ô$×,Ò,¨X°wÑ?Ô?ÐSÐSÀ&Ä/ÐSÐSð Ô#Ð#Ð#r–   c                óº  — ddl m} |                      ¦   «         x}r|j        nt          j        j        }t          j        j        r| j        S t          j        j	        rxt          t          j        j        |¦  «        s&J t          t          j        j        ¦  «        ¦   «         ‚| j        €d S t          j        j                             | j        |¦  «        S | j        S )NrI   )ÚCppWrapperCpu)Úcodegen.cpp_wrapper_cpurš	  r+  r¾   rw   r"  Údevice_typeÚ
fx_wrapperrN	  r�	  r‘   r0  rO	  Úget_c_shim_func_name)r¹  rš	  Údr!  s       r”   r|	  z ExternKernel.try_get_kernel_name«  sÚ   € Ø:Ð:Ð:Ð:Ð:Ð:à!%§¢Ñ!2Ô!2Ð2˜AÐL�”�½¼Ô9LˆÝŒ7Ôð 	+ØÔ*Ð*ÝŒWÔ ð 
	+Ý�aœgÔ2°MÑBÔBð ð ÅDÝ”Ô$ñEô Eñ ô ÐBð Ô#Ð+Ø�tÝ”7Ô'×<Ò<ØÔ$ fñô ð ð Ô*Ð*r–   rÃ   c                ó6   — |                       ¦   «         }|€J ‚|S r�   )r|	  rÏ  s     r”   Úget_kernel_namezExternKernel.get_kernel_name½  s$   € Ø×'Ò'Ñ)Ô)ˆØÐÐÐØˆr–   r‹   r‰   rˆ   c           	     óF  — t                                |                      ¦   «         |                      ¦   «         |                      ¦   «         |                      ¦   «         |                      ¦   «         |                      ¦   «         ¬¦  «        }|                     ¦   «          |S )N)r!  r   râ  rã  r£  r¡  )	r=  r·  r+  r*  r>  r%  rÒ  rÏ  r*  )r‹   r@	  s     r”   Ú
copy_inputzExternKernel.copy_inputÂ  sx   € å×ÒØ—<’<‘>”>Ø—+’+‘-”-Ø—]’]‘_”_Ø—:’:‘<”<Ø×)Ò)Ñ+Ô+Ø—o’oÑ'Ô'ð ñ 
ô 
ˆð 	�
Š
‰ŒˆØˆ	r–   rè  r…   rÆ   r   úftuple[Any, list[Any], list[Any], Callable[[Any, Any], Any], dict[sympy.Symbol, pytree.KeyPath] | None]c                óX  ‡ ‡‡— ||dœ}t          j        |¦  «        \  }Šg Šg }g }g }|D �]ã}	|	xt          d˜ x�n\    t          j        j        j                             |	d¬¦  «        }
‰                     d¦  «         |                     |
¦  «         |                     |
¦  «         Œ} xt          d˜ x�‹\    ‰                     d¦  «         |                     |	¦  «         |	j
        j        }|	j
        j        dk    r|€J ‚|                     t          j        j        |                              ¦   «         ¦  «         �Œ xt"          d˜ x�I\    ‰                     d¦  «         |                     |	¦  «         |                     |	j        ¦  «         �Œi t&          d˜ x�.\   ‰                     d¦  «         |                     |	¦  «         �Œ¢ 	 ‰                     d¦  «         |                     |	¦  «         |                     |	¦  «         �Œådˆˆfd„}ˆ fd„|D ¦   «         }|D ]"}t)          |¦  «        rt+          |d¬¦  «         Œ#g }|D �]}t-          |t.          ¦  «        sb|                     ¦   «         t          j        j        v r=|                     t          j        j        |                     ¦   «                  ¦  «         Œzt-          |t.          ¦  «        sb|                     ¦   «         t          j        j        v r=|                     t          j        j        |                     ¦   «                  ¦  «         Œñt-          |t6          ¦  «        r)|                     |                     ¦   «         ¦  «         �Œ/t-          |t:          ¦  «        r|                     |j        ¦  «         �Œ`t-          |t          j        j         j	        ¦  «        r^|j
        j        }|j
        j        dk    r|€J ‚|                     t          j        j        |                              ¦   «         ¦  «         �Œâ|                     tC          |¦  «        ¦  «         �Œ |||¦  «        \  }}t          j"        j        }tG          ¦   «         5  tI          |¦  «        5   ||i |¤Ž}ddd¦  «         n# 1 swxY w Y   ddd¦  «         n# 1 swxY w Y   d}|rÀt          j%        j&         '                    d¦  «        }tQ          ¦   «         }t          j%        j)        t          j*        j+        j,        u r!|d         }t[          t          j%        ¦  «        }|5  t]          |t          j%        |¦  «         ddd¦  «         n# 1 swxY w Y   t_          |||¦  «        }t-          |t`          tb          f¦  «        s|gn|}|D ]u}t-          |t          j2        ¦  «        rY|j3        rRth          j5        sFd}t          j        j%        j&         '                    dd¦  «        x}r|› d|› �}|t          j        _6        Œv|||||fS )a…  Partition kernel args into tensor and non-tensor, realize tensor inputs,
        re-run fake tensor propagation with the realized strides, and return
        (example_output, tensor_args, non_tensor_args, unflatten_args, unbacked_bindings).

        unflatten_args(new_tensor_args, new_non_tensor_args) reconstructs the
        original (args, kwargs) tree from replacement lists.
        )rÆ   rÇ   r©   N)rE  FrA  TÚnew_tensor_argsrÑ   Únew_non_tensor_argsr�   útuple[list[_T], dict[str, _T]]c                ó^  •— g }t          | ¦  «        }t          |¦  «        }‰D ]I}|r#|                     t          |¦  «        ¦  «         Œ'|                     t          |¦  «        ¦  «         ŒJt          j        |‰¦  «        }|                     dg ¦  «        |                     di ¦  «        fS )NrÆ   rÇ   )r8  ró  r7  rf	  Útree_unflattenrå  )	r¦	  r§	  r�  Ú
it_tensorsÚit_non_tensorsÚ	is_tensorr  Úargs_flat_is_tensorÚ	args_specs	          €€r”   Úunflatten_argsz3ExternKernel.process_kernel.<locals>.unflatten_args  s¯   ø€ ð ˆFÝ˜oÑ.Ô.ˆJÝ!Ð"5Ñ6Ô6ˆNØ0ð 8ð 8�	Øð 8Ø—M’M¥$ zÑ"2Ô"2Ñ3Ô3Ð3Ð3à—M’M¥$ ~Ñ"6Ô"6Ñ7Ô7Ð7Ð7ÝÔ% f¨iÑ8Ô8ˆAØ—5’5˜ Ñ$Ô$ a§e¢e¨H°bÑ&9Ô&9Ð9Ð9r–   c                ó:   •— g | ]}‰                      |¦  «        ‘ŒS r©   ©rV  ©rÔ   r‹   r  s     €r”   r×   z/ExternKernel.process_kernel.<locals>.<listcomp>  s'   ø€ ÐAÐAÐA°�s×(Ò(¨Ñ+Ô+ÐAÐAÐAr–   r>  r"  rI   zEsparsity not handled. Please file issue for sparse inference weights.rÝ  z Found from : 
 )r¦	  rÑ   r§	  rÑ   r�   r¨	  )7rf	  Útree_flattenr    rw   r"  r#  rñ   Úcreate_symintnoderó  ÚGeneratorStater!  rÐ   r¾   r-  rA  Údefault_generatorsÚclone_stateÚOpaqueObjectStater1  r‰   r&  rr  r‘   r”  r˜  Ú	constantsÚtorchbind_constantsr	  Ú	get_valuer½   Úopaque_example_valuerâ  Úirr  rœ  r#   rI	  r,	  r†  rå  r
   r¢  Ú_higher_order_opsÚeffectsÚwith_effectsr3   r:   r4   r°   r±   re  Ú	is_sparserJ   Úgraph_partitionÚdisable_cudagraphs_reason)r  rè  rÆ   rÇ   Úbinded_argsÚ	args_flatÚtensor_argsÚnon_tensor_argsÚreal_non_tensor_argsr(	  r¿   Údevice_indexr°	  r‹   Úexample_argsÚnew_argsÚ
new_kwargsrñ   Úexample_outputrW	  Únode_meta_valÚctxÚexample_out_lir0  ÚmsgrÝ  r®	  r¯	  s   `                         @@r”   Úprocess_kernelzExternKernel.process_kernelÏ  s;  øøø€ ð"  $¨vÐ6Ð6ˆå%Ô2°;Ñ?Ô?Ñˆ	�9à*,Ðà$&ˆØ(*ˆð ð 	ð ð 	5ñ 	5ˆCØØ•T�V�V�V�V‘V�VÝœ7Ô+Ô5×GÒGÈÐRVÐGÑWÔW�DØ'×.Ò.¨uÑ5Ô5Ð5Ø#×*Ò*¨4Ñ0Ô0Ð0Ø(×/Ò/°Ñ5Ô5Ð5Ð5ð	 ð &•^Ð%Ð%Ð%Ð%Ñ%Ð%Ø'×.Ò.¨uÑ5Ô5Ð5Ø#×*Ò*¨3Ñ/Ô/Ð/Ø#&¤:Ô#3�LØœ:œ?¨fÒ4Ð4¸Ð9QÐ9QÐQØ(×/Ò/Ýœ
Ô5°lÔC×OÒOÑQÔQñô ð ñ ð &ð )Õ&Ð(Ð(Ð(Ð(Ñ(Ð(Ø'×.Ò.¨uÑ5Ô5Ð5Ø#×*Ò*¨3Ñ/Ô/Ð/Ø(×/Ò/°´	Ñ:Ô:Ð:Ñ:ð )õ
 �X�X�X�X‘XØ'×.Ò.¨tÑ4Ô4Ð4Ø×&Ò& sÑ+Ô+Ð+Ñ+ð ð Ø'×.Ò.¨uÑ5Ô5Ð5Ø#×*Ò*¨3Ñ/Ô/Ð/Ø(×/Ò/°Ñ4Ô4Ð4Ñ4ð	:ð 	:ð 	:ð 	:ð 	:ð 	:ð 	:ð BÐAÐAÐA°[ÐAÑAÔAˆð ð 	6ð 	6ˆAÝ$ QÑ'Ô'ð 6Ý% a°Ð5Ñ5Ô5Ð5øð ð 	ð ð 	:ñ 	:ˆAõ ˜a¥Ñ*Ô*ð :¨q¯zªz©|¬|½q¼wÔ?PÐ/PÐ/PØ×#Ò#¥A¤GÔ$5°a·j²j±l´lÔ$CÑDÔDÐDÐDå˜q¥(Ñ+Ô+ð:à—J’J‘L”L¥A¤GÔ$?Ð?Ð?à×#Ò#¥A¤GÔ$?ÀÇ
Â
ÁÄÔ$MÑNÔNÐNÐNÝ˜A�Ñ/Ô/ð :Ø×#Ò# A§K¢K¡M¤MÑ2Ô2Ð2Ñ2Ý˜AÕ0Ñ1Ô1ð 	:Ø×#Ò# AÔ$:Ñ;Ô;Ð;Ñ;Ý˜A�uœÔ1Ô@ÑAÔAð :Ø œxœ~�Ø”x”}¨Ò.Ð.°<Ð3KÐ3KÐKØ×#Ò#Ý”JÔ1°,Ô?×KÒKÑMÔMñô ð ñ ð ×#Ò#Õ$5°aÑ$8Ô$8Ñ9Ô9Ð9Ñ9à-˜~¨lÐ<PÑQÔQÑˆ�*Ý”KÔ)ˆ	å$Ñ&Ô&ð	=ð 	=å4°YÑ?Ô?ð	=ð 	=ð $˜V XÐ<°Ð<Ð<ˆNð		=ð 	=ð 	=ñ 	=ô 	=ð 	=ð 	=ð 	=ð 	=ð 	=ð 	=øøøð 	=ð 	=ð 	=ð 	=ð 	=ð 	=ð 	=ñ 	=ô 	=ð 	=ð 	=ð 	=ð 	=ð 	=ð 	=øøøð 	=ð 	=ð 	=ð 	=ð HLÐØð 	ÝœNÔ/×3Ò3°EÑ:Ô:ˆMÝ0;±´ˆCÝŒ~Ô$­Ô(?Ô(GÔ(TÐTÐTà -¨aÔ 0�Ý<½Q¼^ÑLÔL�àð Kð KÝ 	­1¬>¸>ÑJÔJÐJðKð Kð Kñ Kô Kð Kð Kð Kð Kð Kð Køøøð Kð Kð Kð Kå 9Ø˜>¨=ñ!ô !Ðõ ˜n­tµU¨mÑ<Ô<ð ˆ^ÐÐàð 	ð  ð 		8ð 		8ˆAå˜1�eœlÑ+Ô+ð8à”Kð8õ Ô.ð8ð
 ^�Ý"#¤'Ô"6Ô";×"?Ò"?ÀÈtÑ"TÔ"TÐT�;ð AØ Ð@Ð@°;Ð@Ð@�CØ47•”Ô1øð ØØØØð
ð 	
sH   ÒR=Ò	R&ÒR=Ò&R*	Ò*R=Ò-R*	Ò.R=Ò=SÓSÕU0Õ0U4Õ7U4rv  c                ó°  — t          |t          ¦  «        sJ t          |¦  «        ¦   «         ‚t          |t          ¦  «        r|S |                     ¦   «         }t
          j                             |                     ¦   «         ¦  «        }|€J ‚| 	                    ¦   «         }|�Æd|j
        v r½t          |t          t          t          f¦  «        r›t          |j        t          ¦  «        r�t          |j
        d         t           j        ¬¦  «        s&t          |j
        d         t           j        ¬¦  «        r5|                     t)          |                     ¦   «         ¦  «        ¦  «         n|                     ¦   «          t/          j        |                     ¦   «         d¬¦  «        \  }}|d         } |                     ¦   «         |¦  «        }t
          j        j                             ||¦  «        }t
          j        j                             ||¦  «        }	t
          j        j                             ||¦  «        }
t=          ||	¦  «        |
z   }||k    r$t>                                d|	|
|¦  «         tB          ‚t          |j"        tG          | $                    ¦   «         | %                    ¦   «         |                     ¦   «         |	|
d¬	¦  «        ¬
¦  «        S )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.
        Nr"  r&	  r  r†   r   z@convert_to_reinterpret_view failed: stride=%s offset=%s index=%sFr,  ro  )&r‘   r”  r¾   rv  r•  rw   r"  r;  r˜  rÒ  r†  r—  rC  rq  r(  r/   r-  rñ  ró  re  r1   r%  rZ  rK   rÕ  rB  r#  rñ  Ústride_varsÚ
offset_varro   rð  rã  r  rp  rs  r6  r*  )r  r‹   Úx_unwrap_viewrá  Úx_unwrap_view_fx_nodeÚ
index_argsrÏ  rÔ  rÐ   rh  rt  Úexpecteds               r”   Úconvert_to_reinterpret_viewz(ExternKernel.convert_to_reinterpret_viewu  s­  € õ ˜!�XÑ&Ô&Ð/Ð/­¨Q©¬Ñ/Ô/Ð&Ý�a�Ñ)Ô)ð 	ØˆHð Ÿš™œˆÝŒg× Ò  ×!7Ò!7Ñ!9Ô!9Ñ:Ô:ˆØˆˆˆØ #× 3Ò 3Ñ 5Ô 5Ðð "Ð-ØÐ.Ô3Ð3Ð3Ý˜=­?½FÅJÐ*OÑPÔPð 4å˜=Ô/µÑ@Ô@ð 4õ 9Ø)Ô.¨uÔ5Ý"'Ô"5ðñ ô ð	 4õ <Ø)Ô.¨uÔ5Ý"'Ô"8ðñ ô ð 4ð ×7Ò7Ý.¨}×/EÒ/EÑ/GÔ/GÑHÔHñô ð ð ð ×'Ò'Ñ)Ô)Ð)å!-Ô!@Ø�JŠJ‰LŒL ð"
ñ "
ô "
Ñˆ
�Jð   ”]ˆ
Ø �—’Ñ Ô  Ñ,Ô,ˆå”Ô ×5Ò5°e¸ZÑHÔHˆÝ”'Ô"×.Ò.¨u°jÑAÔAˆÝ”Ô!×,Ò,¨U°JÑ?Ô?ˆÝ˜Z¨Ñ1Ô1°FÑ:ˆà�HÒÐÝ�IŠIØRØØØñ	ô ð õ &Ð%åØ”ÝØ×,Ò,Ñ.Ô.Ø—k’k‘m”mØ—Z’Z‘\”\ØØØðñ ô ð

ñ 

ô 

ð 
	
r–   c           	     ó¨  — |€t          ¦   «         S t          |t          t          j        j        j        t          f¦  «        rt          |¬¦  «        S t          |t          ¦  «        rƒt          ¦   «         5  t          j                             t          j        |j        |                     ¦   «         |                     ¦   «         ¬¦  «        ¦  «        cd d d ¦  «         S # 1 swxY w Y   t          |t&          ¦  «        r|S t          |t(          ¦  «        r|                      |j        ¦  «        S t          |t.          ¦  «        r;t/          |                      |j        ¦  «        |                     ¦   «         ¬¦  «        S t          |t2          ¦  «        r[|                     ¦   «          t7          |                     ¦   «         ¦  «        r&	 |                      |¦  «        S # t<          $ r Y nw xY wt          |t>          ¦  «        r|                     ¦   «          |S t          |t@          t          tB          f¦  «        r|S |  "                    |¦  «        S )N)rê  )r   r!  ro  )#r‹  r‘   r    r·   r¸   r¹   rº   r’   r¼   rf  rA   rw   r"  Úadd_tensor_constantr-  rg  r1  r*  r+  rS  rˆ   rV  rp  rv  r'  r”  r*  r&  r•  rÛ	  r  r–  ÚNonTensorObjr½   r£	  r	  s     r”   rV  zExternKernel.realize_input½  sI  € àˆ9Ý'Ñ)Ô)Ð)Ý�a�$¥¤Ô 3Ô ;½SÐAÑBÔBð 	1Ý(¨aÐ0Ñ0Ô0Ð0Ý�a�Ñ"Ô"ð 	õ (Ñ)Ô)ð ð Ý”w×2Ò2Ý”L ¤°·²±´ÀaÇlÂlÁnÄnÐUÑUÔUñô ðð ð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð õ �a�Ñ(Ô(ð 	ØˆHÝ�a�Ñ#Ô#ð 	-Ø×$Ò$ Q¤VÑ,Ô,Ð,Ý�a�Ñ)Ô)ð 	Ý"Ø×&Ò& q¤vÑ.Ô.°q·|²|±~´~ðñ ô ð õ �a�Ñ"Ô"ð 	Ø�IŠI‰KŒKˆKÝ$ Q§]¢]¡_¤_Ñ5Ô5ð ðØ×:Ò:¸1Ñ=Ô=Ð=øÝ*ð ð ð Ø�Dðøøøå�a�Ñ$Ô$ð 	à�IŠI‰KŒKˆKØˆHÝ�a�,Õ(=Õ?PÐQÑRÔRð 	ØˆHØ�~Š~˜aÑ Ô Ð s%   Á5ACÃC#Ã&C#ÇG  Ç 
G-Ç,G-c                óÚ   — t          |¦  «        rHt          |                     ¦   «         ¦  «        dk    r|S |                     ¦   «         D ]}|dk    r|c S Œ|                      |¦  «        S r·  )r&  rÙ   rT  r£	  )r  r‹   r  s      r”   Úrequire_stride1zExternKernel.require_stride1á  sr   € å  Ñ#Ô#ð 	Ý�1—<’<‘>”>Ñ"Ô" aÒ'Ð'Ø�ØŸ,š,™.œ.ð ð �Ø˜Q’;�;Ø�H�H�Hð à�~Š~˜aÑ Ô Ð r–   FrÌ   úSequence[int] | Nonerf  r  r[  r    c                óL  ‡‡‡— |€‰€J ‚‰                      ¦   «         dv r‰s‰S t          ‰¦  «        �rªt          ‰                     ¦   «         t          ¦  «        rV|r=t          ‰|¦  «        }|r‰                     ¦   «          nt          ‰dd||¬¦  «         ‰S t          ‰ddd|‰¬¦  «         ‰S d}|rO‰rMt          t           
                    ‰‰                     ¦   «         ‰                     ¦   «         ¦  «        ¦  «        }t          ‰                     ¦   «         t          t          f¦  «        ry|r'‰                     ¦   «                              |¦  «        s<‰rNt!          ‰‰                     ¦   «         j        ‰                     ¦   «         ¦  «        r‰�t%          ‰‰¦  «        n‰S |�xt          ‰                     ¦   «         t          t          f¦  «        rJt!          |‰                     ¦   «         j        ‰                     ¦   «         ¦  «        rt%          ‰|¦  «        S t          ‰                     ¦   «         x}t&          ¦  «        r�t          |                     ¦   «         x}t          ¦  «        rt+          d¦  «        ‚t          |t          ¦  «        rC|r|                     |¦  «        s*‰r*t!          ‰|j        ‰                     ¦   «         ¦  «        r‰S t          ‰t,          ¦  «        rg|r'‰                     ¦   «                              |¦  «        s<‰r<t!          ‰‰                     ¦   «         j        ‰                     ¦   «         ¦  «        r‰S t          ‰t.          ¦  «        ræt          ‰j        t2          ¦  «        rÌt          ‰j        t4          ¦  «        s²t          ‰                     ¦   «         x}	¦  «        r�t9          |	d¦  «        rt          |	j        t:          ¦  «        se	 |                      ‰j        ¦  «        ‰_        |r|                      ‰||¬	¦  «        S ‰r|                       ‰‰|¬	¦  «        S n# tB          $ r Y nw xY wd}
‰                     ¦   «         }‰�ytD          j#        j$        Šˆˆˆfd
„tK          tM          ‰                     ¦   «         ¦  «        ¦  «        D ¦   «         }
|
D ])}tN          j(        j)         *                    ‰|dd¦  «        ŠŒ*|  +                    ‰¦  «        Št          ‰dd||‰¬¦  «         |rUtY          ‰                     ¦   «         ¦  «        s4tY          ‰ -                    ¦   «         ¦  «        st          ‰|¦  «        sJ ‚n=|
r;|�‰€J ‚tN          j(        j)         .                    ‰|¦  «        Št%          ‰‰¦  «        S ‰S )zUEnsure x has the requested stride order or exact strides, inserting a copy if needed.N)r   rI   TF)r?  rK  rL  r[  rP  zHthe MutationLayoutSHOULDREMOVE's real layout shouldn't be FlexibleLayoutrp  rQ  c                ó¨   •— g | ]N}‰                      ‰|         d ¦  «        ¯‰                     ‰                     ¦   «         |         d¦  «        ¯L|‘ŒOS )r   rí   )rm  rM  r%  )rÔ   rÕ   rf  r#  r‹   s     €€€r”   r×   z0ExternKernel.require_strides.<locals>.<listcomp>~  sj   ø€ ð ð ð àØ×3Ò3°MÀ!Ô4DÀaÑHÔHðð ×1Ò1°!·*²*±,´,¸q´/À1ÑEÔEð	Øðð ð r–   r   rI   )/r"  r&  r‘   r'  r(  rU  rZ  rr  r°   r
  rC  r%  r*  rs  r  rT  rf  r  r{  r9  r>  r¯  r±  rˆ   rp  r”  rv  r•  rà  r<	  rÛ	  Úrequire_stride_orderrß  r  rw   r"  r#  rÚ   rÙ   r-  râ  ÚloweringÚslice_r£	  r6   rT  r  )r  r‹   rÌ   rf  r[  Úuse_current_stride_orderÚpadded_exact_stridesÚmutation_layoutr>  r•  Úexpanded_dimsÚ	orig_sizerc  r#  s    ` `         @r”   Úrequire_strideszExternKernel.require_stridesë  s?  øøø€ ð Ð  MÐ$=Ð$=Ð=à�;Š;‰=Œ=˜FÐ"Ð"¨=Ð"ØˆHõ ! Ñ#Ô#ñ X	Ý˜!Ÿ,š,™.œ.­.Ñ9Ô9ð #Øð "õ 0RØ˜5ñ0ô 0Ð,ð 0ð 
ØŸšÑ)Ô)Ð)Ð)õ .ØØ#'Ø,1Ø).Ø*7ðñ ô ð ð �Hõ *ØØ#Ø(-Ø%)Ø&3Ø&3ðñ ô ð ð �Hð
 $(Ð Øð  ð Ý'+Ý×'Ò'¨°q·z²z±|´|ÀQÇ[Â[Á]Ä]ÑSÔSñ(ô (Ð$õ ˜!Ÿ,š,™.œ.­;½Ð*HÑIÔIð )Øð)ØŸ<š<™>œ>×;Ò;¸EÑBÔBð)ð "ð)õ 2Ø% q§|¢|¡~¤~Ô'<¸a¿jºj¹l¼lñô ð	)ð %Ð0õ 4°A°}ÑEÔEÐEàðð %Ð0Ý˜qŸ|š|™~œ~µ½_Ð/MÑNÔNð 1å-Ø(¨!¯,ª,©.¬.Ô*?ÀÇÂÁÄñô ð 1õ 7°qÐ:NÑOÔOÐOÝØ$%§L¢L¡N¤NÐ2�Õ5Oñô ð õ Ø$3×$?Ò$?Ñ$AÔ$AÐA�[ÅNñô ð õ )Øbñô ð õ   ­[Ñ9Ô9ð 	Øð	Ø*×<Ò<¸UÑCÔCð	ð &ð	õ 6Ø)¨;Ô+=¸q¿zºz¹|¼|ñô ð		ð �Hõ �a�Ñ%Ô%ð 		Øð		Ø—|’|‘~”~×7Ò7¸Ñ>Ô>ð		ð ð		õ .Ø! 1§<¢<¡>¤>Ô#8¸!¿*º*¹,¼,ñô ð			ð ˆHå�q�)Ñ$Ô$ð	å˜1œ6¥8Ñ,Ô,ð	õ ˜qœv¥Ñ7Ô7ð	õ &°Q·]²]±_´_Ð&D kÑEÔEð		õ
 ˜ VÑ,Ô,ð	õ ˜{Ô/Õ1BÑCÔCð	ðØ×8Ò8¸¼Ñ@Ô@�”Øð Ø×3Ò3Ø˜5°ð 4ñ ô ð ð #ð Ø×4Ò4Ø˜=¸ð 5ñ ô ð ðøõ 'ð ð ð Ø�ðøøøð +/ˆØ—J’J‘L”Lˆ	ØÐ$Ý”wÔ'ˆHðð ð ð ð ð å�s 1§:¢:¡<¤<Ñ0Ô0Ñ1Ô1ðñ ô ˆMð %ð Bð B�Ý”OÔ,×3Ò3°A°s¸A¸qÑAÔA��ð �NŠN˜1ÑÔˆåØØØ!ØØ'Ø'ð	
ñ 	
ô 	
ð 	
ð ð
	Eå)¨!¯*ª*©,¬,Ñ7Ô7ð
	Eõ *¨!¯,ª,©.¬.Ñ9Ô9ð
	Eõ
 6°a¸Ñ?Ô?Ð?Ð?Ð?Ð?Øð 	EØÐ(¨]Ð-FÐ-FÐFÝ”Ô(×/Ò/°°9Ñ=Ô=ˆAå2°1°mÑDÔDÐDàˆs   Ï18Q Ð*Q Ñ
QÑQr^  c                óF   — |                       |d„ |D ¦   «         |¬¦  «        S )Nc                ó^   — g | ]*}t          |t          j        ¦  «        r|j        j        n|‘Œ+S r©   )r‘   r-  ÚSymIntr¿   rê  rö   s     r”   r×   z6ExternKernel.require_exact_strides.<locals>.<listcomp>¨  s>   € ð ð ð ØFG�z¨!­U¬\Ñ:Ô:ÐA�””�Àðð ð r–   )rf  r[  ©rì	  )r  r‹   rf  r[  s       r”   rß  z"ExternKernel.require_exact_strides¢  sE   € ð ×"Ò"Øðð ØKXðñ ô ð (ð #ñ 
ô 
ð 	
r–   rÍ   c                ó2   — |                       |||¬¦  «        S )N)rÌ   r[  rð	  )r  r‹   rÌ   r[  s       r”   rä	  z!ExternKernel.require_stride_order®  s   € ð ×"Ò" 1¨EÀÐ"ÑOÔOÐOr–   c                ó8   — |                       |t          ¦  «        S r�   )rä	  rò  r	  s     r”   Úrequire_channels_lastz"ExternKernel.require_channels_last´  s   € à×'Ò'¨Õ+<Ñ=Ô=Ð=r–   c                ó8   — |                       |t          ¦  «        S r�   )rä	  rô  r	  s     r”   Úrequire_channels_last_3dz%ExternKernel.require_channels_last_3d¸  s   € à×'Ò'¨Õ+=Ñ>Ô>Ð>r–   c                ó¤   — dd„} ||¦  «        r|S |                       |t                               |                     ¦   «         ¦  «        ¦  «        S )Nr‹   r‰   r�   r    c                ó¼   — 	 |                       ¦   «         }n# t          t          f$ r Y dS w xY w|t          j        j        v ot          j        j        |         j        S r8  )r˜  ÚAttributeErrorr  rw   r"  rº	  Ú	is_mkldnn)r‹   rÂ   s     r”   Úis_mkldnn_tensorz9ExternKernel.require_contiguous.<locals>.is_mkldnn_tensor¾  sb   € ðØ—z’z‘|”|��øÝ"Õ$7Ð8ð ð ð Ø�u�uðøøøð �1œ7Ô,Ð,ÐRµ´Ô1BÀ4Ô1HÔ1RÐRs   ‚ —,«,©r‹   r‰   r�   r    ©rß  r(  r)  r%  )r  r‹   rú	  s      r”   râ  zExternKernel.require_contiguous¼  sg   € ð	Sð 	Sð 	Sð 	Sð Ð˜AÑÔð 	ØˆHà×,Ò,Ø•>×4Ò4°Q·Z²Z±\´\ÑBÔBñô ð r–   c                ó‚   — |                       |t                               |                     ¦   «         ¦  «        ¦  «        S r�   rü	  r	  s     r”   Úrequire_contiguous_stridesz'ExternKernel.require_contiguous_stridesÎ  s7   € ð ×(Ò(Ø�~×0Ò0°·²±´Ñ>Ô>ñ
ô 
ð 	
r–   c                ó   — d S r�   r©   r¸  s    r”   rw	  zExternKernel.apply_constraintÖ  rW  r–   c                ó  — t          |t          ¦  «        sJ t          |¦  «        ¦   «         ‚t          |t          ¦  «        st          |¦  «        }| j        s
J d¦   «         ‚t          |¦  «        }t          | j        ¦  «        }||k     r|t                               d| j        ||z
  ¦  «         t          ||¦  «        D ]G}| j        |         d         }| 
                    ||v r||         n| j        |         d         ¦  «         ŒH|S )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Â   rS  )r‘   r   r¾   r°   rT	  rÙ   rð  rã  rS	  rÚ   ró  )r¹  rÆ   rÇ   Ún_argsÚ
n_pos_argsrÕ   Úarg_names          r”   Úfill_non_provided_argsz#ExternKernel.fill_non_provided_argsÙ  s&  € õ ˜$¥Ñ)Ô)Ð5Ð5­4°©:¬:Ñ5Ô5Ð)Ý˜$¥Ñ%Ô%ð 	Ý˜‘:”:ˆDØÔ"ÐUÐUÐ$UÑUÔUÐ"å�T‘”ˆÝ˜Ô,Ñ-Ô-ˆ
ð �JÒÐÝ�IŠIð^àÔ Ø˜VÑ#ñ	ô ð õ ˜6 :Ñ.Ô.ð ð �ØÔ.¨qÔ1°&Ô9�Ø—’à 6Ð)Ð)ð ˜8Ô$Ð$àÔ,¨QÔ/°Ô@ñô ð ð ð
 ˆr–   rê  r   r¢   c                ó°  — t           j        j        �r4g }d }|rG| j        r@t	          | j        ¦  «        t	          |¦  «        k    s
J d¦   «         ‚d„ | j        D ¦   «         }t          | j        ¦  «        D ]Ð\  }}|�9|€J ‚|                     ||         ¦  «        }|r|                     d¦  «        nd }nXt	          | j        ¦  «        |z   }| j        r8|t	          | j        ¦  «        k     r | j        |                              d¦  «        nd }| 	                    t           j        j
                             ||¦  «        ¦  «         ŒÑ|S d„ | j        D ¦   «         S )NzDnames passed to codegen_const_args does not match self.constant_argsc                ó:   — i | ]}|                      d ¦  «        |“ŒS rÆ  )rå  r'	  s     r”   r  z3ExternKernel.codegen_const_args.<locals>.<dictcomp>	  s1   € ð *ð *ð *Ø-0�C—G’G˜F‘O”O Sð*ð *ð *r–   r¾   c                óV   — g | ]&}t           j        j                             |¦  «        ‘Œ'S r©   ©rw   r"  r0  Úval_to_arg_str)rÔ   rs  s     r”   r×   z3ExternKernel.codegen_const_args.<locals>.<listcomp>  s+   € ÐWÐWÐW¸q•A”GÔ(×7Ò7¸Ñ:Ô:ÐWÐWÐWr–   )rw   r"  r�	  rT	  rÙ   rK	  r  rå  rŠ  ró  r0  r	
  )	r¹  rê  r�  Úname_to_arg_propertiesrÕ   r‹   ÚpropÚtype_r   s	            r”   Úcodegen_const_argszExternKernel.codegen_const_argsý  s‹  € ÝŒ7Ôñ 	XØˆFð
 &*Ð"Øð ˜Ô,ð Ý˜4Ô-Ñ.Ô.µ#°e±*´*Ò<Ð<Ð<ØZñ =Ô<Ð<ð*ð *Ø48Ô4Gð*ñ *ô *Ð&õ " $Ô"4Ñ5Ô5ð Mð M‘��1Ø)Ð5Ø Ð,Ð,Ð,Ø1×5Ò5°e¸A´hÑ?Ô?�DØ04Ð>˜DŸHšH VÑ,Ô,Ð,¸$�E�Eå˜dœkÑ*Ô*¨QÑ.�Cð  Ô.ð"Ø36½¸TÔ=PÑ9QÔ9QÒ3QÐ3Qð Ô+¨CÔ0×4Ò4°VÑ<Ô<Ð<à!ð ð
 —’�aœgÔ2×AÒAÀ!ÀUÑKÔKÑLÔLÐLÐLØˆMàWÐWÀDÔDVÐWÑWÔWÐWr–   c                ó´  — t           j        j        r3| j        �,|                      g | j        ¢| j        ¢| j        ¦  «        }d}n	| j        }d}g }t          |¦  «        D ]Ï\  }}t           j        j        r‚| j	        r|t          | j	        ¦  «        k     s
J d¦   «         ‚| j	        |                              d¦  «        }|                     t           j        j                             ||¦  «        ¦  «         Œ˜|                     t           j        j                             |¦  «        ¦  «         ŒÐ|r'|                     |                      ¦   «         ¦  «         |S )NFTz-Invalid access to ExternKernel.arg_propertiesr¾   )rw   r"  r�	  rS	  r
  rŠ  rK	  rÇ   r  rT	  rÙ   rå  ró  r0  r	
  rï  r
  )r¹  rŠ  Úneed_codegen_constant_argsrÆ   rÕ   r‹   r
  s          r”   Úcodegen_argszExternKernel.codegen_args  sV  € ÝŒ7Ôð 		. 4Ô#3Ð#?à×0Ò0Ø3�$”+Ð3 Ô 2Ð3°T´[ñô ˆFð */Ð&Ð&à”[ˆFØ)-Ð&àˆÝ˜fÑ%Ô%ð 	Dð 	D‰DˆAˆqÝŒwÔ"ð DØÔ*ð ¨qµ3°tÔ7JÑ3KÔ3KÒ/KÐ/KÐ/KØCñ 0LÔ/KÐKð Ô+¨AÔ.×2Ò2°6Ñ:Ô:�Ø—’�AœGÔ0×?Ò?ÀÀ5ÑIÔIÑJÔJÐJÐJà—’�AœGÔ0×?Ò?ÀÑBÔBÑCÔCÐCÐCØ%ð 	3Ø�KŠK˜×/Ò/Ñ1Ô1Ñ2Ô2Ð2Øˆr–   r
  c                ó   — ||v r|                      |¦  «        S || j        v r| j                              |¦  «        S | j                              |¦  «        x}�|                      d¦  «        S t          |› d�¦  «        ‚)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.NrS  z not in self.allarg_properties)rå  rÇ   rU	  r¯  )r¹  r
  rÇ   r(	  s       r”   Úget_kwargs_valuezExternKernel.get_kwargs_value8  s‡   € ð
 �vÐÐØ—:’:˜hÑ'Ô'Ð'Ø�t”{Ð"Ð"Ø”;—?’? 8Ñ,Ô,Ð,ØÔ)×-Ò-¨hÑ7Ô7Ð7ˆCÐDØ—7’7˜?Ñ+Ô+Ð+Ý ÐHÐHÐHÑIÔIÐIr–   Úskip_outc                ó:  — t           j        j        ræ| j        �t	          | j        ¦  «        dk    rg S g }| j        D ]º}|r|dk    rŒ|                      |¦  «        }t          |t          ¦  «        r| 
                    |¦  «         ŒK| j        €J ‚| j                             |i ¦  «                             d¦  «        }| 
                    t           j        j                             ||¦  «        ¦  «         Œ»n#d„ | j                             ¦   «         D ¦   «         }|S )Nr   r  r¾   c                óf   — g | ].\  }}|› d t           j        j                             |¦  «        › �‘Œ/S rî  r
  )rÔ   ÚkrÂ  s      r”   r×   z/ExternKernel.codegen_kwargs.<locals>.<listcomp>Y  sM   € ð ð ð á�A�qð Ð?Ð?•q”wÔ+×:Ò:¸1Ñ=Ô=Ð?Ð?ðð ð r–   )rw   r"  r�	  rS	  rÙ   ru	  rQ	  r
  r‘   r    ró  rU	  rå  r0  r	
  rÇ   rÎ  )r¹  r
  rÇ   r
  rÂ  r
  s         r”   Úcodegen_kwargszExternKernel.codegen_kwargsE  s3  € ÝŒ7Ôð 	ØÔÐ+µ°DÔ4FÑ0GÔ0GÈ1Ò0LÐ0Là�	àˆFØ Ô>ð Qð Q�Øð  ¨EÒ 1Ð 1àà×)Ò)¨(Ñ3Ô3�Ý˜a¥Ñ&Ô&ð QØ—M’M !Ñ$Ô$Ð$Ð$àÔ1Ð=Ð=Ð=Ø Ô2×6Ò6°xÀÑDÔD×HÒHÈÑPÔP�EØ—M’M¥!¤'Ô"6×"EÒ"EÀaÈÑ"OÔ"OÑPÔPÐPÐPðQðð à œK×-Ò-Ñ/Ô/ðñ ô ˆFð ˆr–   c                óÆ   — | j         �W| j         j        }t          |dd¦  «        }|                     dd¦  «        }|                     dd¦  «        d         }|› d|› �}nd}|S )	Nr¦   Úunknown_namespacer–	  r—	  r‡	  rI   r   Ú
unknown_op)r^	  r¢  rÉ   r�	  Úrsplit)r¹  r¢  Úop_namespaceÚop_names       r”   Úget_op_namezExternKernel.get_op_name_  st   € ØŒ<Ð#Ø”\Ô(ˆFÝ" 6¨<Ð9LÑMÔMˆLØ'×/Ò/°¸'ÑBÔBˆLØ'×.Ò.¨s°AÑ6Ô6°qÔ9ˆLØ%Ð0Ð0¨Ð0Ð0ˆGˆGà"ˆGØˆr–   c                óî  — t           j        sd S t          |                      ¦   «         ¦  «        dk    rd S t          j        j                             |                      ¦   «         ¦  «        }t          j        j                             |                      ¦   «         ¦  «        }|  	                    ¦   «         }|  
                    ¦   «         }t          j        j        r‚t          | j        t          j        j        ¦  «        r^t          j        j        | j        j        v rAt          | j        d         t*          ¦  «        sJ ‚| j        d          
                    ¦   «         }|                     ||||¦  «         d S r$  )rJ   Úsize_assertsrr   r%  rw   r"  r0  Úcodegen_shape_tuplerT  r
  r˜  r�	  r‘   rS	  r-  rq	  rr	  ÚTagÚinplace_viewÚtagsrŠ  r‰   Úwrite_assert_size_stride)r¹  rx	  r  r  r
  rÂ   s         r”   Úcodegen_size_assertsz!ExternKernel.codegen_size_assertsj  s$  € ÝÔ"ð 	ØˆFå˜Ÿš™œÑ)Ô)¨QÒ.Ð.ØˆFÝŒwÔ#×7Ò7¸¿º¹¼ÑHÔHˆÝ”Ô%×9Ò9¸$¿/º/Ñ:KÔ:KÑLÔLˆØ×"Ò"Ñ$Ô$ˆØ�}Š}‰ŒˆÝŒ7Ôð 	5õ ˜$Ô*­E¬JÔ,AÑBÔBð 5Ý”9Ô)¨TÔ-=Ô-BÐBÐBÝ% d¤k°!¤nµfÑ=Ô=Ð=Ð=Ð=Øœ; qœ>×2Ò2Ñ4Ô4�DØ×(Ò(¨¨t°V¸WÑEÔEÐEÐEÐEr–   c           	     óF  — t           j        r’t          j        j        sƒ|                      ¦   «         }|t          j        j        v}|                      ¦   «         }|r&|                     d|› dt          › d|›d�¦  «         d S |                     d|› d|› d�¦  «         d S d S d S )Nzassert_alignment(r”  r;  z	# buffer z (op: z) is assumed to be not aligned)
rJ   Úalignment_assertsrw   r"  r�	  r˜  rY  r
  r2  rk   )r¹  rx	  rÂ   Úalignedr
  s        r”   Úcodegen_alignment_assertsz&ExternKernel.codegen_alignment_asserts}  sÜ   € ÝÔ#ð 	­A¬GÔ,?ð 	Ø—=’=‘?”?ˆDØ¥!¤'Ô";Ð;ˆGØ×&Ò&Ñ(Ô(ˆGØð Ø×!Ò!ØO¨ÐOÐOµÐOÐOÀ7ÐOÐOÐOñô ð ð ð ð ×!Ò!ØS ÐSÐS¨GÐSÐSÐSñô ð ð ð ð	ð 	ð 	ð 	r–   c                óÖ   — t           j        j        rt          j        j        rdS |                     ¦   «          |                      ¦   «         }|                     d|› d|› d�¦  «         dS )zc
        Track outputs of fallback operators if config.test_configs.track_memory_lifecycle
        Nztrack_tensor(z, 'z'))	rJ   Útest_configsÚtrack_memory_lifecyclerw   r"  r�	  Ú"write_memory_track_allocation_oncer˜  r2  )r¹  rx	  rÂ   s      r”   Úcodegen_memory_trackingz$ExternKernel.codegen_memory_tracking‹  sp   € õ Ô"Ô9ð 	½Q¼WÔ=Pð 	ØˆFà×2Ò2Ñ4Ô4Ð4Ø�}Š}‰ŒˆØ×ÒÐ;¨$Ð;Ð;°4Ð;Ð;Ð;Ñ<Ô<Ð<Ð<Ð<r–   ú'tuple[list[Sequence[Expr]], list[Expr]]c                ó^   — |                       ¦   «         }|                      ¦   «         }|g g|fS )zD
        get output sizes and strides, for template_codegen
        )r%  rT  )r¹  r…  r†  s      r”   Úget_group_stridezExternKernel.get_group_stride–  s/   € ð —’‘”ˆØ—/’/Ñ#Ô#ˆà�rˆ{˜GÐ#Ð#r–   útuple[Expr, Sequence[Expr]]c           	     óf  ‡‡‡‡— t           j        j        Š|                      ¦   «         }|                      ¦   «         }ˆfd„|D ¦   «         }d„ t          t          |¦  «        ¦  «        D ¦   «         Št          t          t          |¦  «        ¦  «        |j        d¬¦  «        }d„ t          |¦  «        D ¦   «         Šˆfd„t          t          ‰¦  «        ¦  «        D ¦   «         }ˆfd„|D ¦   «         Š|  
                    ¦   «         } |‰¦  «        }t           j        j                             ‰||g¦  «        \  }}}	t          d¦  «        \  }
Št          t          ‰ |ˆfd	„|D ¦   «         ¦  «        ¦  «        ¦  «        }t          t!          j        |¦  «        |¦  «        }|t%          |¦  «        fS )
zC
        Manually get canonicalization of the output index
        c                ó:   •— g | ]}‰                      |¦  «        ‘ŒS r©   )r$  )rÔ   r‹   r#  s     €r”   r×   z-ExternKernel.canonicalize.<locals>.<listcomp>©  s'   ø€ ÐBÐBÐB°Q�8×-Ò-¨aÑ0Ô0ÐBÐBÐBr–   c                ó2   — g | ]}t          d |› �¦  «        ‘ŒS )rŸ	  )rp   r  s     r”   r×   z-ExternKernel.canonicalize.<locals>.<listcomp>«  s'   € ÐMÐMÐM°aÕ(¨¨Q¨¨Ñ1Ô1ÐMÐMÐMr–   T)rÐ  r  c                ó   — i | ]\  }}||“Œ	S r©   r©   rÿ   s      r”   r  z-ExternKernel.canonicalize.<locals>.<dictcomp>®  s   € ÐBÐBÐB™x˜s C�#�sÐBÐBÐBr–   c                ó    •— g | ]
}‰|         ‘ŒS r©   r©   r  s     €r”   r×   z-ExternKernel.canonicalize.<locals>.<listcomp>¯  s   ø€ Ð7Ð7Ð7˜q�˜”Ð7Ð7Ð7r–   c                ó    •— g | ]
}‰|         ‘ŒS r©   r©   )rÔ   rÕ   rÈ  s     €r”   r×   z-ExternKernel.canonicalize.<locals>.<listcomp>°  s   ø€ Ð3Ð3Ð3¨�j ”mÐ3Ð3Ð3r–   Úcc                ó&   •— g | ]} ‰|¦  «        ‘ŒS r©   r©   )rÔ   r‹   Úadd_vars     €r”   r×   z-ExternKernel.canonicalize.<locals>.<listcomp>»  s!   ø€ Ð3RÐ3RÐ3RÀ1°G°G¸A±J´JÐ3RÐ3RÐ3Rr–   )rw   r"  r#  r%  rT  rÚ   rÙ   rÖ  rù  r  rB  rå  rV   r²   rÝ   rs   r·   r  r±   )r¹  rç  rh  Úindex_orderrÌ   rD  rÐ   Ú	new_sizesrÛ   rè  r  Úreplacementr<
  rÈ  r  r#  s               @@@@r”   ÚcanonicalizezExternKernel.canonicalizeŸ  s«  øøøø€ õ
 ”7Ô#ˆØ—’‘”ˆØ—/’/Ñ#Ô#ˆð CÐBÐBÐB¸'ÐBÑBÔBˆàMÐM½5ÅÀUÁÄÑ;LÔ;LÐMÑMÔMˆ
å�U¥3 w¡<¤<Ñ0Ô0°gÔ6IÐSWÐXÑXÔXˆØBÐB­9°[Ñ+AÔ+AÐBÑBÔBˆØ7Ð7Ð7Ð7¥E­#¨f©+¬+Ñ$6Ô$6Ð7Ñ7Ô7ˆØ3Ð3Ð3Ð3¨UÐ3Ñ3Ô3ˆ
Ø×#Ò#Ñ%Ô%ˆØ�˜
Ñ#Ô#ˆå%&¤WÔ%5×%EÒ%EØ˜ ˜wñ&
ô &
Ñ"ˆ	�7˜Fõ ! Ñ%Ô%‰
ˆˆ7Ý�3˜z¨7¨7Ð3RÐ3RÐ3RÐ3RÈ	Ð3RÑ3RÔ3RÑ+SÔ+SÑTÔTÑUÔUˆå�5œ<¨Ñ.Ô.°Ñ<Ô<ˆØ•e˜IÑ&Ô&Ð&Ð&r–   r�  c                óà   — |rt           nt          }t                               | |¦  «        }| j        D ]}| ||¦  «        z  }Œ| j                             ¦   «         D ]}| ||¦  «        z  }Œ|S r�   )Úmaybe_free_unbacked_symbolsÚmaybe_free_symbolsr°  rx  rK	  rÇ   r³   )r¹  r�  Úmaybe_get_symbolsr  r(	  s        r”   rx  z!ExternKernel.get_free_symbol_usesÀ  s“   € ð ,9ÐPÕ'Ð'Õ>Pð 	õ ×-Ò-¨d°MÑBÔBˆØÔ%ð 	(ð 	(ˆCØÐ"Ð" 3Ñ'Ô'Ñ'ˆAˆAØ”;×%Ò%Ñ'Ô'ð 	(ð 	(ˆCØÐ"Ð" 3Ñ'Ô'Ñ'ˆAˆAØˆr–   c                óÜ   ‡ — t          ‰ dd ¦  «        }d|›�g}|ˆ fd„t          j        ‰ ¦  «        D ¦   «         z  }|                     d‰ j        ›�¦  «         ‰                      |¦  «        S )NrN	  zpython_kernel_name=c                óN   •— g | ]!}|j         › d t          ‰|j         ¦  «        › �‘Œ"S rî  )rÂ   rÉ   )rÔ   r±  r¹  s     €r”   r×   z(ExternKernel.__str__.<locals>.<listcomp>Õ  sE   ø€ ð 
ð 
ð 
àð ŒzÐ7Ð7�G D¨%¬*Ñ5Ô5Ð7Ð7ð
ð 
ð 
r–   rð  )rÉ   r°  Úfieldsró  r£  r   )r¹  rñ  r÷  s   `  r”   r÷  zExternKernel.__str__Ð  s–   ø€ Ý˜dÐ$8¸$Ñ?Ô?ˆà1 +Ð1Ð1ð
ˆð 	ð 
ð 
ð 
ð 
å$Ô+¨DÑ1Ô1ð
ñ 
ô 
ñ 	
ˆð 	�ŠÐ8 DÔ$4Ð8Ð8Ñ9Ô9Ð9Ø�Š˜uÑ%Ô%Ð%r–   ©r©   NNNNr©   N)rÂ   r8  rq  r<  rŠ  r	  rK	  r2  rÇ   rX	  rM	  rL	  rN	  r8  rO	  r8  rQ	  rP	  rS	  rR	  r�   r¬   rÝ  rÞ  r§  r�  r�   )rx	  r|   rñ  r8  r�   r¬   ©rx	  r|   r�   r¬   ©rO	  r8  r�   r¬   )rN	  r8  r�   r¬   r™  rŸ  )r‹   r‰   r�   rˆ   )rè  r…   rÆ   r   rÇ   r   r�   r¤	  )r‹   r‰   r�   rv  rë  )NNF)
r‹   r‰   rÌ   rá	  rf  r  r[  r    r�   r‰   r¢  )r‹   r‰   rf  r^  r[  r    r�   r‰   )r‹   r‰   rÌ   rÍ   r[  r    r�   r‰   )rÆ   r2  rÇ   r¤  r�   r2  )rê  r   r�   r¢   ©r�   r¢   )r
  rÃ   rÇ   r   r�   r   )r
  r    r�   r¢   )r�   r0
  )r�   r3
  r«  )@r¥   r¦   r§   r¯  rK	  r¨   r°  r±  r²   rÇ   rM	  rN	  rO	  r°   rQ	  rS	  rT	  rU	  rV	  rW	  r'  r�  rÖ  rØ  rl  r]	  rØ  r�	  r„	  r[	  r\	  r|	  r¡	  r²  r£	  r3  rÓ	  rÛ	  rV  rà	  rì	  rß  rä	  ró	  rõ	  râ  rþ	  rw	  r
  r
  r
  r
  r
  r
  r&
  r*
  r/
  r2
  r@
  rb   rx  r÷  r2  r‡  rˆ  s   @r”   rß  rß  ç  sÁ  ø€ € € € € € ðð ð
 $&€MÐ%Ð%Ð%Ñ%Ø.˜[Ô.¸tÐDÑDÔD€FÐDÐDÐDÑDØ*.€KÐ.Ð.Ð.Ñ.Ø%)ÐÐ)Ð)Ð)Ñ)Ø"&€OÐ&Ð&Ð&Ñ&ð 4E°;Ô3DØð4ñ 4ô 4Ð!ð ð ð ñ ð (,€KÐ+Ð+Ð+Ñ+Ø26€NÐ6Ð6Ð6Ñ6Ø3D°;Ô3DØð4ñ 4ô 4Ðð ð ð ñ ð :>ÐÐ=Ð=Ð=Ñ=Ø<M¸KÔ<MØð=ñ =ô =Ðð ð ð ñ ð .?¨[Ô->ÈtÐ-TÑ-TÔ-TÐÐTÐTÐTÑTð (*Ø(,Ø.2Ø)-Ø&*Ø79Ø+/ð.ð .ð .ð .ð .ð .ð .ð@.ð .ð .ð .ðð ð ð ðð ð ð ð ð ð #$ð #$ð #$ð #$ðJ!ð !ð !ð !ð HLðMð Mð Mð Mð Mð""ð "ð "ð "ð#;ð #;ð #;ð #;ð #;ðJð ð ð ð+ð +ð +ð +ð$ð ð ð ð
 ð
ð 
ð 
ñ „\ð
ð ðc
ð c
ð c
ñ „[ðc
ðJ ðE
ð E
ð E
ñ „[ðE
ðN ð!!ð !!ð !!ñ „[ð!!ðF ð!ð !ð !ñ „[ð!ð ð '+Ø37Ø#ðtð tð tð tñ „[ðtðl àQVð	
ð 	
ð 	
ð 	
ñ „[ð	
ð àDIðPð Pð Pð Pñ „[ðPð
 ð>ð >ð >ñ „[ð>ð ð?ð ?ð ?ñ „[ð?ð ðð ð ñ „[ðð" ð
ð 
ð 
ñ „[ð
ðð ð ð ð"ð "ð "ð "ðHXð Xð Xð Xð XðBð ð ð ð4Jð Jð Jð Jðð ð ð ð ð4	ð 	ð 	ð 	ðFð Fð Fð Fð&ð ð ð ð	=ð 	=ð 	=ð 	=ð$ð $ð $ð $ð'ð 'ð 'ð 'ðB Ð˜NÑ+Ô+à$)ðð ð ð ñ ,Ô+ðð
&ð 
&ð 
&ð 
&ð €H€H€H€H€Hr–   rß  c                  ó@   ‡ — e Zd Zdd„Z	 	 	 	 	 	 	 ddˆ fd„Zdd„Zˆ xZS )ÚExternKernelOutrx	  r|   r�   r¬   c                ó0   — |                      | ¦  «         d S r�   )Úgenerate_extern_kernel_outrƒ	  s     r”   r„	  zExternKernelOut.codegená  ó   € Ø×*Ò*¨4Ñ0Ô0Ð0Ð0Ð0r–   r©   Nrq  r
  rŠ  r‹  rK	  r2  rÇ   rX	  rM	  rL	  rN	  r8  rO	  rQ	  rS	  rR	  c
                óh  •— |                       |¦  «        }
t          |
t          ¦  «        sJ t          |
¦  «        ¦   «         ‚t	          ¦   «                              d ||
||pi d ||||	¦
  «
         t          j                             | ¦  «        | _	        t          j         
                    | ¦  «         d S r�   )r!  r‘   r   r¾   r   r�  rw   r"  r"  rÂ   r#  )r¹  rq  rŠ  rK	  rÇ   rM	  rN	  rO	  rQ	  rS	  Úunwrapped_inputsr¢  s              €r”   r�  zExternKernelOut.__init__ä  s´   ø€ ð  ×.Ò.¨vÑ6Ô6ÐÝÐ*­HÑ5Ô5ÐMÐMµtÐ<LÑ7MÔ7MÑMÔMÐ5Ý‰Œ×ÒØØØØØˆL�bØØØØ)Øñ	
ô 	
ð 	
õ ”G×+Ò+¨DÑ1Ô1ˆŒ	Ý	Œ×"Ò" 4Ñ(Ô(Ð(Ð(Ð(r–   r    c                ó   — dS r£  r©   r¸  s    r”   rx  zExternKernelOut.should_allocate  r×  r–   rI
  rH
  )rq  r
  rŠ  r‹  rK	  r2  rÇ   rX	  rM	  rL	  rN	  r8  rO	  r8  rQ	  r2  rS	  rR	  r�   r¬   r–  )r¥   r¦   r§   r„	  r�  rx  r‡  rˆ  s   @r”   rM
  rM
  ß  s�   ø€ € € € € ð1ð 1ð 1ð 1ð (*Ø(,Ø.2Ø)-Ø&*Ø79Ø+/ð)ð )ð )ð )ð )ð )ð )ð:ð ð ð ð ð ð ð r–   rM
  c                  ó    ‡ — e Zd Zdˆ fd„Zˆ xZS )	ÚRandomSeedsrp  r’   r!  r2  r�   r¬   c                ó  •— t          j        t           j        ¦  «        }t          ¦   «                              t          |t           j        |g¬¦  «        g |j        |j        |ggddt          j	        j
        ¬¦  «         d S )NrÆ  zaten.randint.low_outzat::_ops::randint_low_out::call)rq  rŠ  rK	  rN	  rO	  rS	  )r-  rM  r  r   r�  rs  rb  r  r†	  ÚrandintÚlow_out)r¹  rp  r!  Úlimitsr¢  s       €r”   r�  zRandomSeeds.__init__  sƒ   ø€ Ý”�Uœ[Ñ)Ô)ˆÝ‰Œ×ÒÝØÝ”kØ�Wðñ ô ð
 Ø!œ: v¤z°E°7Ð;Ø5ð >ÝœÔ,ð 	ñ 	
ô 	
ð 	
ð 	
ð 	
r–   )rp  r’   r!  r2  r�   r¬   ©r¥   r¦   r§   r�  r‡  rˆ  s   @r”   rU
  rU
    s=   ø€ € € € € ð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
r–   rU
  c                  óF   ‡ — e Zd Zdd„Z	 	 	 	 	 	 ddˆ fd„Zdd„Zdd„Zˆ xZS )r<	  rx	  r|   r�   r¬   c                ó0   — |                      | ¦  «         d S r�   )Úgenerate_extern_kernel_allocrƒ	  s     r”   r„	  zExternKernelAlloc.codegen  s   € Ø×,Ò,¨TÑ2Ô2Ð2Ð2Ð2r–   r©   Nrq  r<  rŠ  r‹  rK	  r2  rÇ   rX	  rN	  r8  rO	  rQ	  rS	  rR	  c	                ó�  •— |                       |¦  «        }	t          d„ |	D ¦   «         ¦  «        sJ ‚t          ¦   «                              d |t	          t
          t                   |	¦  «        ||pi d ||||¦
  «
         g | _        t          j	         
                    | ¦  «        | _        t          j	                             | ¦  «         d S )Nc              3  ó@   K  — | ]}t          |t          ¦  «        V — Œd S r�   r	  r  s     r”   rø   z-ExternKernelAlloc.__init__.<locals>.<genexpr>)  s,   è è € ÐCÐC¨Q•:˜a¥Ñ(Ô(ÐCÐCÐCÐCÐCÐCr–   )r!  rù   r   r�  r   r   r‰   rÜ  rw   r"  r"  rÂ   r#  )r¹  rq  rŠ  rK	  rÇ   rN	  rO	  rQ	  rS	  rR
  r¢  s             €r”   r�  zExternKernelAlloc.__init__  sÇ   ø€ ð  ×.Ò.¨vÑ6Ô6ÐÝÐCÐCÐ2BÐCÑCÔCÑCÔCÐCÐCÐCÝ‰Œ×ÒØØÝ•�&Ô!Ð#3Ñ4Ô4ØØˆL�bØØØØ)Øñ	
ô 	
ð 	
ð ')ˆŒÝ”G×+Ò+¨DÑ1Ô1ˆŒ	Ý	Œ×"Ò" 4Ñ(Ô(Ð(Ð(Ð(r–   r    c                ó   — dS r8  r©   r¸  s    r”   rx  z!ExternKernelAlloc.should_allocate=  r:  r–   c                ó   — t           ‚r�   r¼  r¸  s    r”   rw	  z"ExternKernelAlloc.apply_constraint@  r½  r–   rI
  )r©   NNNr©   N)rq  r<  rŠ  r‹  rK	  r2  rÇ   rX	  rN	  r8  rO	  r8  rQ	  r2  rS	  rR	  r�   r¬   r–  r�  )r¥   r¦   r§   r„	  r�  rx  rw	  r‡  rˆ  s   @r”   r<	  r<	    s“   ø€ € € € € ð3ð 3ð 3ð 3ð (*Ø(,Ø)-Ø&*Ø79Ø+/ð)ð )ð )ð )ð )ð )ð )ð@ð ð ð ð"ð "ð "ð "ð "ð "ð "ð "r–   r<	  c                  óD   ‡ — e Zd ZdZdˆ fd
„Zdd„Zdd„Zdd„Zdd„Zˆ xZ	S )r  zP
    An output buffer that represents the mutation of a pre-existing buffer
    rq  r<  Úmutated_noder‰   Úmutating_noder·  r�   r¬   c                ó  •— t          ¦   «                              d |¬¦  «         |                     ¦   «         }t          j                             |¦  «         |g| _        || _        t          j                             | ¦  «        | _	        d S rˆ  )
r   r�  r˜  rw   r"  r<  Úmutation_namesrd
  r"  rÂ   )r¹  rq  rc
  rd
  Úmutated_node_namer¢  s        €r”   r�  zMutationOutput.__init__I  sy   ø€ õ 	‰Œ×Ò˜d¨6ÐÑ2Ô2Ð2Ø(×1Ò1Ñ3Ô3ÐÝ	Œ×#Ò#Ð$5Ñ6Ô6Ð6Ø0Ð1ˆÔØ(5ˆÔÝ”G×+Ò+¨DÑ1Ô1ˆŒ	ˆ	ˆ	r–   c                ó   — | j         S r�   )rd
  r¸  s    r”   rÖ  zMutationOutput.get_defining_opS  s   € ØÔ!Ð!r–   rì  c                ó   — | j         S r�   )rf
  r¸  s    r”   r…  z!MutationOutput.get_mutation_namesV  r¥  r–   r    c                ó   — dS r8  r©   r¸  s    r”   rx  zMutationOutput.should_allocateY  r:  r–   r‹  c                óV   — |                       ¦   «         }d„ d„ |D ¦   «         D ¦   «         S )Nc                ó   — g | ]}|®|‘ŒS r�   r©   )rÔ   rá  s     r”   r×   z7MutationOutput.get_mutation_buffers.<locals>.<listcomp>^  s%   € ð 
ð 
ð 
àØˆð àˆˆr–   c              3  óT   K  — | ]#}t           j                             |¦  «        V — Œ$d S r�   )rw   r"  Útry_get_buffer)rÔ   rÂ   s     r”   rø   z6MutationOutput.get_mutation_buffers.<locals>.<genexpr>`  s2   è è € ÐPÐP¸�œ×.Ò.¨tÑ4Ô4ÐPÐPÐPÐPÐPÐPr–   )r…  )r¹  rf
  s     r”   Úget_mutation_buffersz#MutationOutput.get_mutation_buffers\  sB   € Ø×0Ò0Ñ2Ô2ˆð
ð 
àPÐPÀÐPÑPÔPð
ñ 
ô 
ð 	
r–   )rq  r<  rc
  r‰   rd
  r·  r�   r¬   r~  r®  r–  ©r�   r‹  )
r¥   r¦   r§   r¯  r�  rÖ  r…  rx  ro
  r‡  rˆ  s   @r”   r  r  D  s—   ø€ € € € € ðð ð2ð 2ð 2ð 2ð 2ð 2ð"ð "ð "ð "ð#ð #ð #ð #ðð ð ð ð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
r–   r  c                  ót   ‡ — e Zd ZU dZi Zded<   edd	„¦   «         Zedd
„¦   «         Zdˆ fd„Z	dd„Z
dd„Zˆ xZS )ÚTMADescriptorad  
    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]Ú_CACHErg  r‰   Útma_metaútuple[str, tuple[Any, ...]]r�   c                ó¬   — t          |¦  «        dk    sJ ‚|d         dk    rt          |g|d         ¢R Ž S |d         dk    sJ ‚t          |g|d         ¢R Ž S )Nrí   r   ÚexperimentalrI   r!  )rÙ   ÚTMADescriptorExperimentalÚTMADescriptorStable)r  rg  rt
  s      r”   Ú_create_implzTMADescriptor._create_impls  ss   € õ �8‰}Œ} Ò!Ð!Ð!Ð!Ø�AŒ;˜.Ò(Ð(Ý,¨VÐB°h¸q´kÐBÐBÐBÐBà˜A”; (Ò*Ð*Ð*Ð*Ý& vÐ<°¸´Ð<Ð<Ð<Ð<r–   c                óŒ   — t          |¦  «        |f}|| j        vr|                      ||¦  «        | j        |<   | j        |         S r�   )rf  rs
  rz
  )r  rg  rt
  rÐ  s       r”   r·  zTMADescriptor.create~  sH   € õ �&‰zŒz˜8Ð$ˆØ�c”jÐ Ð Ø!×.Ò.¨v°xÑ@Ô@ˆCŒJ�s‰OØŒz˜#ŒÐr–   rŠ  r2  rK	  r¬   c           
     ó˜  •— t          ¦   «                              d t          t          ||                     ¦   «         ¬¦  «        ¦  «        t          t          t                   |¦  «        t          |¦  «        d ¦  «         || _	        t          j                             | ¦  «        | _        t          j                             | ¦  «         d S rÞ  )r   r�  r  rv  r'  r   r   r—  r±   rg  rw   r"  r"  rÂ   r#  )r¹  rg  rŠ  rK	  r¢  s       €r”   r�  zTMADescriptor.__init__‡  sµ   ø€ õ 	‰Œ×ÒØõ ÝØØ!×,Ò,Ñ.Ô.ðñ ô ñô õ •�&Ô! 6Ñ*Ô*Ý�-Ñ Ô Øñ	
ô 	
ð 	
ð  ˆŒÝ”G×+Ò+¨DÑ1Ô1ˆŒ	Ý	Œ×"Ò" 4Ñ(Ô(Ð(Ð(Ð(r–   rx	  r|   c                ó0   — |                      | ¦  «         d S r�   )Úgenerate_tma_descriptorrƒ	  s     r”   r„	  zTMADescriptor.codegenž  ó   € Ø×'Ò'¨Ñ-Ô-Ð-Ð-Ð-r–   c                ó   — | j         S r�   )rg  r¸  s    r”   Ú
get_tensorzTMADescriptor.get_tensor¡  rû  r–   )rg  r‰   rt
  ru
  r�   rr
  )rg  r‰   rŠ  r2  rK	  r2  r�   r¬   rI
  rŒ  )r¥   r¦   r§   r¯  rs
  r¨   r3  rz
  r·  r�  r„	  r�
  r‡  rˆ  s   @r”   rr
  rr
  e  sÂ   ø€ € € € € € ðð ð (*€FÐ)Ð)Ð)Ñ)àð=ð =ð =ñ „[ð=ð ðð ð ñ „[ðð)ð )ð )ð )ð )ð )ð..ð .ð .ð .ðð ð ð ð ð ð ð r–   rr
  c                  ó(   ‡ — e Zd ZdZ	 ddˆ fd„Zˆ xZS )rx
  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.
    Nrg  r‰   r¥  úlist[int | torch.SymInt]Ú
block_dimsÚelement_sizer¥  r�   r¬   c                ó€  •— t          |¦  «        dv sJ ‚t          |¦  «        t          |¦  «        k    sJ ‚|€|                     ¦   «         j        }|| _        || _        || _        t          | j        ¦  «        | _        |g}g | j        ¢| j        ¢| j        ‘}t          ¦   «                              |||¬¦  «         d S )N)rI   rí   ©rg  rŠ  rK	  )	rÙ   r*  rz  r¥  r„
  r…
  rÎ  r   r�  )r¹  rg  r¥  r„
  r…
  rŠ  rK	  r¢  s          €r”   r�  z"TMADescriptorExperimental.__init__­  sÝ   ø€ õ �4‰yŒy˜FÐ"Ð"Ð"Ð"Ý�4‰yŒy�C 
™OœOÒ+Ð+Ð+Ð+àÐØ!×+Ò+Ñ-Ô-Ô6ˆLàˆŒ	Ø$ˆŒØ(ˆÔÝ˜œ	‘N”NˆŒ	à�ˆð
ØŒYð
àŒ_ð
ð Ôð
ˆõ 	‰Œ×ÒØØØ'ð 	ñ 	
ô 	
ð 	
ð 	
ð 	
r–   r�   )
rg  r‰   r¥  rƒ
  r„
  rƒ
  r…
  r¥  r�   r¬   ©r¥   r¦   r§   r¯  r�  r‡  rˆ  s   @r”   rx
  rx
  ¥  sQ   ø€ € € € € ðð ð $(ð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
r–   rx
  c                  ó$   ‡ — e Zd ZdZdˆ fd„Zˆ xZS )ry
  z¡
    the new host-side TMA descriptor API
    (the ones obtained via TensorDescriptor.from_tensor).

    See also TMADescriptorExperimental for the old API.
    rg  r‰   Úblock_shaperƒ
  c                ó`   •— || _         t          ¦   «                              ||g|¬¦  «         d S )Nr‡
  )rŠ
  r   r�  )r¹  rg  rŠ
  r¢  s      €r”   r�  zTMADescriptorStable.__init__Õ  sA   ø€ Ø&ˆÔå‰Œ×ÒØØ�8Ø%ð 	ñ 	
ô 	
ð 	
ð 	
ð 	
r–   )rg  r‰   rŠ
  rƒ
  rˆ
  rˆ  s   @r”   ry
  ry
  Í  sG   ø€ € € € € ðð ð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
r–   ry
  c                  ó,   ‡ — e Zd Z	 ddˆ fd„Zdd„Zˆ xZS )ÚSubgraphBufferNrq  r
  rœ   rÔ  r|  r}  Úexample_inputsú	list[Any]Úsubgraph_namerÃ   r‡  rX	  c                óº  •— t          ¦   «                              d ||¦  «         || _        || _        t          j                             | ¦  «        | _        t          j                             | ¦  «         t          j         	                    | j        ||¦  «        | _
        t          | j        ¦  «        sJ ‚t          | j        ¦  «        }|D ]:}|| j
        j        |j        <   | j
        j                             |j        ¦  «         Œ;d„ |D ¦   «         | _        dd lmc m}	 t	          j        | j
        ¦  «        5  ddddœ}
i |
¥|pi ¥}|	                     |¦  «        5   | j
        j        | j        Ž  d d d ¦  «         n# 1 swxY w Y   |r6| j
        j        D ])}|                     |                     ¦   «         ¦  «         Œ*d d d ¦  «         d S # 1 swxY w Y   d S )Nc                ó   — g | ]	}|j         ‘Œ
S r©   rÆ  )rÔ   Úsym_vars     r”   r×   z+SubgraphBuffer.__init__.<locals>.<listcomp>ø  s   € ÐBÐBÐB¨G˜7œ<ÐBÐBÐBr–   r   FÚATEN)Úmax_autotuneÚmax_autotune_gemmÚmax_autotune_gemm_backends)r   r�  r|  rŽ
  rw   r"  r"  rÂ   r#  Úmake_subgraphÚsubgraphr	  rŠ  r’  rI  Úgraph_input_namesró  Ú
sym_inputsÚtorch._inductor.configrâ  rJ   Úset_graph_handlerr   ÚrunÚ
operationsrÊ  rÍ  )r¹  rq  rœ   r|  rŽ
  r�
  r‡  r›
  Úsym_inpÚinductor_configÚbase_patchesÚmerged_patchesr�  r¢  s                €r”   r�  zSubgraphBuffer.__init__à  s‹  ø€ õ 	‰Œ×Ò˜˜v {Ñ3Ô3Ð3ØˆŒØ,ˆÔÝ”G×+Ò+¨DÑ1Ô1ˆŒ	Ý	Œ×"Ò" 4Ñ(Ô(Ð(åœ×-Ò-¨d¬g°~À}ÑUÔUˆŒå ¤Ñ,Ô,Ð,Ð,Ð,Ý(¨¬Ñ5Ô5ˆ
à!ð 	Að 	AˆGØ7>ˆDŒMÔ& w¤|Ñ4ØŒMÔ+×2Ò2°7´<Ñ@Ô@Ð@Ð@àBÐB°zÐBÑBÔBˆŒà8Ð8Ð8Ð8Ð8Ð8Ð8Ð8Ð8åÔ  ¤Ñ/Ô/ð 	Að 	Að !&Ø%*Ø.4ðð ˆLð .X°Ð-WÀÐAUÐSUÐ-WˆNØ ×&Ò& ~Ñ6Ô6ð 8ð 8Ø!�”Ô! 4Ô#6Ð7Ð7ð8ð 8ð 8ñ 8ô 8ð 8ð 8ð 8ð 8ð 8ð 8øøøð 8ð 8ð 8ð 8ð
 ð AØœ-Ô2ð Að A�BØ×)Ò)¨.×*=Ò*=Ñ*?Ô*?Ñ@Ô@Ð@Ð@ð!	Að 	Að 	Añ 	Aô 	Að 	Að 	Að 	Að 	Að 	Að 	Að 	Aøøøð 	Að 	Að 	Að 	Að 	Að 	As6   Ä;$GÅF Å4GÆ F	ÆGÆF	Æ;GÇGÇGrx	  r|   r�   r¬   c                óÖ   —  G d„ d¦  «        }t          | j        ¦  «        sJ ‚d„ | j        D ¦   «         }|                      || j        ¦  «        g | j        ¢|¢| j        g¦  «         d S )Nc                  ó   — e Zd Zdd„ZdS )ú,SubgraphBuffer.codegen.<locals>.CodegenGraphr"  r}   c                ó,   — || _         |j        | _        d S r�   )r"  rÂ   )r¹  r"  s     r”   r�  z5SubgraphBuffer.codegen.<locals>.CodegenGraph.__init__  s   € Ø"�”
Ø!œJ�”	�	�	r–   N)r"  r}   )r¥   r¦   r§   r�  r©   r–   r”   ÚCodegenGraphr¦
    s(   € € € € € ð'ð 'ð 'ð 'ð 'ð 'r–   r¨
  c                ó6   — g | ]}|                      ¦   «         ‘ŒS r©   ©r/  ©rÔ   r0  s     r”   r×   z*SubgraphBuffer.codegen.<locals>.<listcomp>  s$   € ÐCÐCÐC°!˜×+Ò+Ñ-Ô-ÐCÐCÐCr–   )r	  rŠ  Ú'codegen_subgraph_with_flattened_outputsr™
  r›
  rÂ   )r¹  rx	  r¨
  Úouter_inputss       r”   r„	  zSubgraphBuffer.codegen  sž   € ð	'ð 	'ð 	'ð 	'ð 	'ñ 	'ô 	'ð 	'õ
   ¤Ñ,Ô,Ð,Ð,Ð,ØCÐC°t´{ÐCÑCÔCˆà×7Ò7ØˆL˜œÑ'Ô'Ø-ˆdŒoÐ- Ð-ØŒYˆKñ	
ô 	
ð 	
ð 	
ð 	
r–   r�   )rq  r
  rœ   rÔ  r|  r}  rŽ
  r�
  r�
  rÃ   r‡  rX	  rI
  ©r¥   r¦   r§   r�  r„	  r‡  rˆ  s   @r”   r�
  r�
  ß  sc   ø€ € € € € ð 15ð,Að ,Að ,Að ,Að ,Að ,Að ,Að\
ð 
ð 
ð 
ð 
ð 
ð 
ð 
r–   r�
  c                  ó¦   ‡ — e Zd ZdZd!d„Zd"d„Zed#d
„¦   «         Zd$d„Zd%d„Z	 e
d ¦  «        	 d&d'ˆ fd„¦   «         Zd(d„Zd)ˆ fd„Zd*d„Zd+d „Zˆ xZS ),ÚUserDefinedTritonKernelz>
    A user-defined triton kernel (e.g. via @triton.jit).
    r�   ú(tuple[Kernel, Any, list[str], list[str]]c                óB  ‡— ddl m} ddlm} |                     | j        ¦  «        Šg }g }g }t          ‰|¦  «        rÝt          ‰d¦  «        r'|                     ˆfd„‰j	        D ¦   «         ¦  «         n,t          ‰d¦  «        sJ ‚|                     ‰j
        ¦  «         t          ‰d¦  «        r0‰j        D ]'}|                     ‰j        j        |         ¦  «         Œ(n,t          ‰d¦  «        sJ ‚|                     ‰j        ¦  «         ‰j        }‰j        Š‰|||fS )	Nr   )Ú	Autotuner)Úkernel_side_tableÚrestore_idxc              3  ó<   •K  — | ]}‰j         j        |         V — Œd S r�   )rÊ   Ú	arg_names)rÔ   rÕ   rè  s     €r”   rø   zBUserDefinedTritonKernel.get_kernel_and_metadata.<locals>.<genexpr>0  s>   øè è € ð *ð *Ø/0�F”IÔ'¨Ô*ð*ð *ð *ð *ð *ð *r–   Úrestore_valueÚ	reset_idxÚreset_to_zero)Útriton.runtime.autotunerr³
  Ú*torch._higher_order_ops.triton_kernel_wrapr´
  Ú
get_kernelÚ
kernel_idxr‘   rà  rï  rµ
  r¸
  r¹
  ró  rÊ   r·
  rº
  Úconfigs)r¹  r³
  r´
  r¿
  Úrestore_value_argsÚreset_to_zero_argsrÕ   rè  s          @r”   Úget_kernel_and_metadataz/UserDefinedTritonKernel.get_kernel_and_metadata#  s…  ø€ Ø6Ð6Ð6Ð6Ð6Ð6àPÐPÐPÐPÐPÐPà"×-Ò-¨d¬oÑ>Ô>ˆØˆØ(*ÐØ(*ÐÝ�f˜iÑ(Ô(ð 	õ �v˜}Ñ-Ô-ð @Ø"×)Ò)ð *ð *ð *ð *Ø4:Ô4Fð*ñ *ô *ñ ô ð ð õ ˜v Ñ7Ô7Ð7Ð7Ð7Ø"×)Ò)¨&Ô*>Ñ?Ô?Ð?å�v˜{Ñ+Ô+ð @ØÔ)ð Fð F�AØ&×-Ò-¨f¬iÔ.AÀ!Ô.DÑEÔEÐEÐEðFõ ˜v Ñ7Ô7Ð7Ð7Ð7Ø"×)Ò)¨&Ô*>Ñ?Ô?Ð?à”nˆGØ”YˆFà�wÐ 2Ð4FÐFÐFr–   r    c                óp  — t           j        sdS | j        j        sdS t	          | j        j        ¦  «        dk    rdS t	          | j        ¦  «        dk    sJ ‚t          | j        d         t          ¦  «        sdS t          | j        d         j
        t          ¦  «        sdS t          | j        d         j
        j
        t          ¦  «        sdS t          | j        d         j
        j
        j
        t          ¦  «        sdS t          d„ | j        d         j
        j
        j
        j        D ¦   «         ¦  «        sdS dS )aE  
        For kernels like

        @triton.jit
        def add_kernel(in_ptr0, in_ptr1, out_ptr, n_elements, BLOCK_SIZE: tl.constexpr):
            pid = tl.program_id(0)
            offs = pid * BLOCK_SIZE + tl.arange(0, BLOCK_SIZE)
            mask = offs < n_elements
            x = tl.load(in_ptr0 + offs, mask=mask)
            y = tl.load(in_ptr1 + offs, mask=mask)
            tl.store(out_ptr + offs, x + y, mask=mask)

        @torch.compile
        def fn(a, b):
            out = torch.empty_like(a)
            grid = (triton.cdiv(a.numel(), 1024),)
            add_kernel[grid](a, b, out, a.numel(), BLOCK_SIZE=1024)
            return out.relu()

        We can potentially fuse the relu epilogue into the add_kernel.
        We do this by pruning the `out` tensor allocation and directly writing the relu-output.
        FrI   r   c              3  ó"   K  — | ]
}|d k    V — ŒdS rP  r©   rr  s     r”   rø   z<UserDefinedTritonKernel.can_fuse_epilogue.<locals>.<genexpr>v  s&   è è € ÐNÐN˜a�1˜’6ÐNÐNÐNÐNÐNÐNr–   T)rJ   Ú*epilogue_fusion_user_defined_triton_kernelÚarg_accessesÚcan_fuse_epiloguerÙ   Úkernel_storesÚstoresÚmutable_argsr‘   rˆ   rp  r–  r¯  r=  rù   rã  r¸  s    r”   rÇ
  z)UserDefinedTritonKernel.can_fuse_epilogueC  s0  € õ0 Ô@ð 	Ø�5àÔ Ô2ð 	Ø�5õ ˆtÔ!Ô(Ñ)Ô)¨QÒ.Ð.Ø�5õ �4Ô$Ñ%Ô%¨Ò*Ð*Ð*Ð*Ý˜$Ô+¨AÔ.µ	Ñ:Ô:ð 	Ø�5Ý˜$Ô+¨AÔ.Ô3µZÑ@Ô@ð 	Ø�5Ý˜$Ô+¨AÔ.Ô3Ô8½.ÑIÔIð 	Ø�5Ý˜$Ô+¨AÔ.Ô3Ô8Ô=½yÑIÔIð 	Ø�5ÝÐNÐN 4Ô#4°QÔ#7Ô#<Ô#AÔ#FÔ#MÐNÑNÔNÑNÔNð 	Ø�5àˆtr–   rx	  r|   r¬   c                ó0   — |                       |d ¬¦  «        S )N)Úepilogue_fusion©Ú_codegenrƒ	  s     r”   r„	  zUserDefinedTritonKernel.codegen{  s   € à�}Š}˜W°dˆ}Ñ;Ô;Ð;r–   rÌ
  útuple[ComputedBuffer, str]c                ó.   — |                       ||¦  «        S )zQ
        epilogue_fusion: (fused epilogue node, modified kerel src code)
        rÍ
  )r¹  rx	  rÌ
  s      r”   Úcodegen_with_epilogue_fusionz4UserDefinedTritonKernel.codegen_with_epilogue_fusion  s   € ð �}Š}˜W oÑ6Ô6Ð6r–   ú!tuple[ComputedBuffer, str] | Nonec                ó  ‡ ‡— ddl m} ‰                      ¦   «         \  }}}}‰ j        }i }	|rjt	          ‰ j        j        j        ¦  «        dk    sJ ‚t          t          ‰ j        j        j        ¦  «        ¦  «        j
        }
|\  }}i ‰ j        ¥|
|i¥}|
|i}	|                     |||||‰ j        |¦  «        \  }}}}ˆ fd„‰ j        D ¦   «         }|                     |	¦  «         d„ |j        D ¦   «         Šd„ |j        D ¦   «         }t!          ˆfd„|D ¦   «         ¦  «        }g }g }g }g }t#          j        |                     ¦   «         t)          t#          j        d¦  «        |¦  «        ¦  «        D �]Á\  }}||v r |¦   «         rŒ|                     |¦  «         |                     |¦  «         t/          |t0          ¦  «        rO|                     |                     ¦   «         ¦  «         |                     |                     ¦   «         ¦  «         Œ£t/          |t6          t8          t:          t<          f¦  «        r9|                     |¦  «         |                     t?          |¦  «        ¦  «         �Œ||v r1|                     d	¦  «         |                     t6          ¦  «         �Œ9|€f	  |¦   «         r1|                     d	¦  «         |                     t6          ¦  «         �Œw|                      ¦   «          |                      ¦   «          �Œ¡tC          dt?          |¦  «        › d|› �¦  «        ‚‰  "                    ||¦  «         | #                    |||||||d‰  $                    ¦   «         ‰ j%        j
        ¬¦
  «
         d
S )úYOverrides the parent member.
        See https://github.com/pytorch/pytorch/issues/151692r   )Útriton_version_uses_attrs_dictrI   c                ó<   •— i | ]}|‰                      |¦  «        “ŒS r©   ©r
  )rÔ   r
  r¹  s     €r”   r  z4UserDefinedTritonKernel._codegen.<locals>.<dictcomp>±  s6   ø€ ð 
ð 
ð 
Ø,-ˆAˆt×$Ò$ QÑ'Ô'ð
ð 
ð 
r–   c                ó   — g | ]	}|j         ‘Œ
S r©   rÆ  ©rÔ   rë  s     r”   r×   z4UserDefinedTritonKernel._codegen.<locals>.<listcomp>¶  s   € Ð3Ð3Ð3 �Q”VÐ3Ð3Ð3r–   c                ó*   — g | ]}|j         ¯	|j        ‘ŒS r©   )Úis_constexprÚnumrÙ
  s     r”   r×   z4UserDefinedTritonKernel._codegen.<locals>.<listcomp>·  s!   € ÐEÐEÐE °a´nÐE�a”eÐEÐEÐEr–   c              3  ó(   •K  — | ]}‰|         V — Œd S r�   r©   )rÔ   rÕ   r·
  s     €r”   rø   z3UserDefinedTritonKernel._codegen.<locals>.<genexpr>¸  s'   øè è € Ð$FÐ$F°a Y¨q¤\Ð$FÐ$FÐ$FÐ$FÐ$FÐ$Fr–   rî  rR  NzUnsupported arg type: r:  T)Ú	arg_typesÚraw_argsÚraw_keysÚtriton_metaÚinductor_metarD  r!  Úoriginal_fxnode_name)&r 	  rÕ
  rÂ
  rÇ   rÙ   rÆ
  rÚ  r¯  r7  r8  rÂ   Ú!define_user_defined_triton_kernelÚgridrQ	  ry  Úparamsr@   r  rÆ  rÎ  rÝ   Úrepeatró  r‘   r‰   r/  r*  r’   r:  r    r    r¾   r  r  r�	  Úgenerate_kernel_callr+  r^	  )r¹  rx	  rÌ
  rÕ
  rè  r¿
  rÀ
  rÁ
  Úkernel_kwargsÚepilogue_out_overrideÚmutable_arg_nameÚepilogue_computed_bufferr  Únew_namerá
  râ
  Úextra_launch_argsÚ
named_argsÚ
constexprsÚconstexpr_namesrÆ   rÞ
  Úraw_keys_filteredÚraw_args_filteredrÂ   r(	  r·
  s   `                         @r”   rÎ
  z UserDefinedTritonKernel._codegen‡  sþ  øø€ ð 	IÐHÐHÐHÐHÐHð ×(Ò(Ñ*Ô*ñ	
ØØØØð
 œˆØ02ÐØð 	QÝ�tÔ(Ô4Ô;Ñ<Ô<ÀÒAÐAÐAÐAÝ#¥D¨Ô):Ô)FÔ)MÑ$NÔ$NÑOÔOÔTÐØ*9Ñ'Ð$ aØW˜tœ{ÐWÐ,<Ð>VÐWÐWˆMØ%5Ð7OÐ$PÐ!ð ×5Ò5ØØØØØØŒIØñ
ô 
ñ	
ØØØØð
ð 
ð 
ð 
Ø15Ô1Sð
ñ 
ô 
ˆ
ð 	×ÒÐ/Ñ0Ô0Ð0à3Ð3 V¤]Ð3Ñ3Ô3ˆ	ØEÐE V¤]ÐEÑEÔEˆ
Ý$Ð$FÐ$FÐ$FÐ$F¸:Ð$FÑ$FÔ$FÑFÔFˆàˆØ!ˆ	Ø')ÐØ')ÐÝ"œØ×ÒÑÔ¥¥IÔ$4°RÑ$8Ô$8Ð:KÑ LÔ Lñ
ô 
ð $	Wñ $	W‰IˆD�#ð �Ð&Ð&Ð+IÐ+IÑ+KÔ+KÐ&àØ×$Ò$ TÑ*Ô*Ð*Ø×$Ò$ SÑ)Ô)Ð)Ý˜#�vÑ&Ô&ð WØ—’˜C×1Ò1Ñ3Ô3Ñ4Ô4Ð4Ø× Ò  §¢¡¤Ñ1Ô1Ð1Ð1Ý˜C¥#¥u­dµDÐ!9Ñ:Ô:ð WØ—’˜CÑ Ô Ð Ø× Ò ¥ c¡¤Ñ+Ô+Ð+Ñ+Ø˜Ð(Ð(ð —’˜B‘”�Ø× Ò ¥Ñ%Ô%Ð%Ñ%Ø�ðð 2Ð1Ñ3Ô3ð ,Ø—K’K ‘O”O�OØ×$Ò$¥SÑ)Ô)Ð)Ñ)à%×)Ò)Ñ+Ô+Ð+Ø%×)Ò)Ñ+Ô+Ð+Ñ+å)Ð*UÅ4ÈÁ9Ä9Ð*UÐ*UÐPSÐ*UÐ*UÑVÔVÐVà×Ò˜W hÑ/Ô/Ð/Ø×$Ò$ØØØØ&Ø&Ø#Ø'ØØ—?’?Ñ$Ô$Ø!%¤Ô!2ð 	%ñ 	
ô 	
ð 	
ð 	
ð 	
r–   Fr�  rš   c                ór   •— t          ¦   «                              |¦  «        t          | j        |¦  «        z  S r�   )r   rx  r)   rå
  r¡  s     €r”   rx  z,UserDefinedTritonKernel.get_free_symbol_usesò  s8   ø€ õ ‰wŒw×+Ò+¨MÑ:Ô:Õ=MØŒI�}ñ>
ô >
ñ 
ð 	
r–   c                ó   — t          ¦   «         S r�   r?   r¸  s    r”   rØ  z0UserDefinedTritonKernel.get_unbacked_symbol_defsü  rÙ  r–   r¾
  r’   rå
  r   Útma_descriptor_metadatar¤  Úkernel_argsc               ó8  •‡ ‡— g }i }g }‰                      ¦   «         D ]¡\  }}	t          |	t          ¦  «        rmt                               ‰                      |	¦  «        ¦  «        }
||v r!t                               |
||         ¦  «        }
|                     |
¦  «         |
||<   Œ‡|                     |	¦  «         |	||<   Œ¢t          |¦  «        dk    sJ ‚|d          
                    ¦   «         ‰ _        t          |t          ¦  «        sJ t          |¦  «        ¦   «         ‚t          ¦   «                              d t!          ‰ j        ¬¦  «        |t#          |¦  «        |¦  «         |‰ _        |‰ _        ‰                      ¦   «         \  }}}}t+          |d¦  «        sJ ‚ˆfd„|j        D ¦   «         ‰ _        ddlm}m} t          |¦  «        dk    r|d         j        ni }dd l}|j        ‰ _        |                     ‰ j        ¦  «        ‰ _          |‰ j        ¦  «        ‰ _!        ‰‰ _"         ||i ‰¥|¥|¦  «        ‰ _#        ˆfd„‰ j#        j$        j%        D ¦   «         ‰ _&        ˆ fd„‰ j&        D ¦   «         ‰ _'        tP          j)         *                    ‰ ¦  «         d S )Nr   rú  r·
  c                ó   •— g | ]}|‰v ¯|‘Œ	S r©   r©   )rÔ   r(	  r÷
  s     €r”   r×   z4UserDefinedTritonKernel.__init__.<locals>.<listcomp>(   s*   ø€ ð .
ð .
ð .
Ø¨s°kÐ/AÐ/AˆCÐ/AÐ/AÐ/Ar–   )Úidentify_accessed_tensorsÚidentify_triton_storesc                ó„   •— g | ]<}t          ‰                     |j        ¦  «        t          ¦  «        ¯/‰|j                 ‘Œ=S r©   )r‘   rå  rÂ   rˆ   )rÔ   rÐ  r÷
  s     €r”   r×   z4UserDefinedTritonKernel.__init__.<locals>.<listcomp>C   sN   ø€ ð 
ð 
ð 
àÝ˜+Ÿ/š/¨#¬(Ñ3Ô3µYÑ?Ô?ð
Ø˜œÔ!ð
ð 
ð 
r–   c                óX   •— g | ]&}t          t          ‰j        ¬ ¦  «        |‰¦  «        ‘Œ'S r  )r  r/  r!  )rÔ   rá  r¹  s     €r”   r×   z4UserDefinedTritonKernel.__init__.<locals>.<listcomp>I   sB   ø€ ð !
ð !
ð !
àõ �:¨T¬[Ð9Ñ9Ô9¸3ÀÑEÔEð!
ð !
ð !
r–   )+rÎ  r‘   rˆ   r°  r	  rV  rr
  r·  ró  rÙ   r+  r!  r   r¾   r   r�  r/  r±   r¾
  rå
  rÂ
  rà  r·
  rQ	  r¼
  rú
  rû
  rÇ   ÚastrF  Ú
kernel_srcÚparseÚ
kernel_astrÈ
  r÷
  rÆ
  rÚ  r¯  rÊ
  r'  rw   r"  r#  )r¹  r¾
  rå
  rö
  r÷
  rŠ  rÇ   rK	  r
  rÂ  r0  rè  r¿
  r  rú
  rû
  Úautotuned_kwargsrþ
  r¢  s   `   `             €r”   r�  z UserDefinedTritonKernel.__init__ÿ  s  øøø€ ð  "ˆØ$&ˆØ&(ˆà×%Ò%Ñ'Ô'ð 		ð 		‰DˆAˆqÝ˜!�YÑ'Ô'ð Ý ×9Ò9¸$×:LÒ:LÈQÑ:OÔ:OÑPÔP�ØÐ/Ð/Ð/Ý%×,Ò,¨QÐ0GÈÔ0JÑKÔK�AØ—’˜aÑ Ô Ð Ø��q‘	�	à×$Ò$ QÑ'Ô'Ð'Ø��q‘	�	å�6‰{Œ{˜aÒÐÐÐØ˜Q”i×*Ò*Ñ,Ô,ˆŒå˜&¥(Ñ+Ô+Ð9Ð9­T°&©\¬\Ñ9Ô9Ð+Ý‰Œ×ÒØÝ˜dœkÐ*Ñ*Ô*ØÝ�-Ñ Ô Øñ	
ô 	
ð 	
ð %ˆŒØˆŒ	à $× <Ò <Ñ >Ô >Ñˆ�˜˜Aõ �v˜{Ñ+Ô+Ð+Ð+Ð+ð.
ð .
ð .
ð .
Ø!Ô+ð.
ñ .
ô .
ˆÔ*ð	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
õ
 14°G±´¸qÒ0@Ð0@˜7 1œ:Ô,Ð,ÀbÐàˆ
ˆ
ˆ
ð !œ*ˆŒØŸ)š) D¤OÑ4Ô4ˆŒØ3Ð3°D´OÑDÔDˆÔØ&ˆÔà5Ð5ØØ/ˆ{Ð/Ð.Ð/Ø#ñ
ô 
ˆÔð
ð 
ð 
ð 
àÔ(Ô4Ô;ð
ñ 
ô 
ˆÔð!
ð !
ð !
ð !
àÔ(ð!
ñ !
ô !
ˆÔõ 	
Œ×"Ò" 4Ñ(Ô(Ð(Ð(Ð(r–   rÔ  c                ó*   — t          | j        ¦  «        S r�   )r°   r'  r¸  s    r”   rÖ  z#UserDefinedTritonKernel.get_outputsO   s   € Ý�DÔ)Ñ*Ô*Ð*r–   r0  c                ó   — | j         S r�   rú  r¸  s    r”   r+  z"UserDefinedTritonKernel.get_deviceR   rû  r–   )r�   r±
  r–  rI
  )rx	  r|   rÌ
  rÏ
  r�   r¬   )rx	  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   rx  rØ  r�  rÖ  r+  r‡  rˆ  s   @r”   r°
  r°
    sD  ø€ € € € € ðð ðGð Gð Gð Gð@6ð 6ð 6ð 6ðp ð<ð <ð <ñ „Xð<ð7ð 7ð 7ð 7ði
ð i
ð i
ð i
ðV ÐÐ5Ñ6Ô6à$)ð
ð 
ð 
ð 
ð 
ð 
ñ 7Ô6ð
ðð ð ð ðN)ð N)ð N)ð N)ð N)ð N)ð`+ð +ð +ð +ðð ð ð ð ð ð ð r–   r°
  c                  óD   ‡ — e Zd ZdZdd„Zdd„Zdd
„Zdd„Zdˆ fd„Zˆ xZ	S )ÚInplaceBernoulliFallbackúE
    This needs to be a custom class to handle mutation properly
    rx	  r|   r�   r¬   c                ó  — t          d„ | j        D ¦   «         ¦  «        sJ ‚d„ | j        D ¦   «         \  }t          j        j        rd|                     |                      ¦   «         › d|› dd                     t          t          | j
        ¦  «        ¦  «        › d|j        › �¦  «         d S |                     |                      ¦   «         › d|› dd                     t          t          | j
        ¦  «        ¦  «        › d|j        › �¦  «         d S )Nc              3  ó@   K  — | ]}t          |t          ¦  «        V — Œd S r�   r	  r«
  s     r”   rø   z3InplaceBernoulliFallback.codegen.<locals>.<genexpr>\   s,   è è € Ð>Ð>¨Q•:˜a¥Ñ(Ô(Ð>Ð>Ð>Ð>Ð>Ð>r–   c              3  ód   K  — | ]+}t          t          |¦  «                             ¦   «         V — Œ,d S r�   )r   r‰   r/  r«
  s     r”   rø   z3InplaceBernoulliFallback.codegen.<locals>.<genexpr>]   s6   è è € ÐIÐI¸••V˜Q‘”×1Ò1Ñ3Ô3ÐIÐIÐIÐIÐIÐIr–   rû  r”  z, NULL)r;  )rù   rŠ  rw   r"  r�	  r2  r¡	  rþ  rü  ÚreprrK	  Úending)r¹  rx	  r‹   s      r”   r„	  z InplaceBernoulliFallback.codegen[   s'  € ÝÐ>Ð>°$´+Ð>Ñ>Ô>Ñ>Ô>Ð>Ð>Ð>ØIÐI¸T¼[ÐIÑIÔI‰ˆåŒ7Ôð 		ð ×ÒØ×'Ò'Ñ)Ô)ÐrÐr¨AÐrÐr°·²½3½tÀTÔEWÑ;XÔ;XÑ1YÔ1YÐrÐrÐbiÔbpÐrÐrñô ð ð ð ð ×ÒØ×'Ò'Ñ)Ô)ÐlÐl¨AÐlÐl°·²½3½tÀTÔEWÑ;XÔ;XÑ1YÔ1YÐlÐlÐ\cÔ\jÐlÐlñô ð ð ð r–   r    c                ó   — dS r8  r©   r¸  s    r”   rx  z(InplaceBernoulliFallback.should_allocatej   r:  r–   rì  c                ó.   — |                       d¦  «        gS r$  ©r	  r¸  s    r”   r…  z+InplaceBernoulliFallback.get_mutation_namesm   ó   € Ø—’ Ñ"Ô"Ð#Ð#r–   rš   c                ó   — t          ¦   «         S r�   r?   r¸  s    r”   rØ  z1InplaceBernoulliFallback.get_unbacked_symbol_defsp   rÙ  r–   rS	  r…   r‹   r‰   rK	  r   c                ó¤  •— t          ¦   «                              d t          |                     ¦   «         ¬¦  «        |                      |g¦  «        ||¬¦  «         t
          j                             |                     ¦   «         ¦  «         t
          j         	                    | ¦  «        | _
        t
          j                             | ¦  «         d S )Nrú  ©rS	  )r   r�  r/  r+  r!  rw   r"  r<  r˜  r"  rÂ   r#  )r¹  rS	  r‹   rK	  r¢  s       €r”   r�  z!InplaceBernoulliFallback.__init__s   s«   ø€ õ 	‰Œ×ÒØÝ˜aŸlšl™nœnÐ-Ñ-Ô-Ø×Ò  Ñ$Ô$ØØ#ð 	ñ 	
ô 	
ð 	
õ 	
Œ×#Ò# A§J¢J¡L¤LÑ1Ô1Ð1Ý”G×+Ò+¨DÑ1Ô1ˆŒ	Ý	Œ×"Ò" 4Ñ(Ô(Ð(Ð(Ð(r–   rI
  r–  r®  rÞ  )rS	  r…   r‹   r‰   rK	  r   r�   r¬   ©
r¥   r¦   r§   r¯  r„	  rx  r…  rØ  r�  r‡  rˆ  s   @r”   r  r  V   s—   ø€ € € € € ðð ðð ð ð ðð ð ð ð$ð $ð $ð $ðð ð ð ð)ð )ð )ð )ð )ð )ð )ð )ð )ð )r–   r  c                  ó`   ‡ — e Zd ZdZdd„Zdd„Zdd
„Zdd„Zdˆ fd„Ze		 dd d„¦   «         Z
ˆ xZS )!ÚInplaceCopyFallbackr  rx	  r|   r�   r¬   c                ód   — |                       ¦   «         \  }}}|                     |||¦  «         d S r�   )r
  Úcodegen_device_copy)r¹  rx	  rG  rF  Únon_blockings        r”   r„	  zInplaceCopyFallback.codegenˆ   s8   € Ø#'×#4Ò#4Ñ#6Ô#6Ñ ˆˆc�<Ø×#Ò# C¨¨lÑ;Ô;Ð;Ð;Ð;r–   r    c                ó   — dS r8  r©   r¸  s    r”   rx  z#InplaceCopyFallback.should_allocateŒ   r:  r–   rì  c                ó.   — |                       d¦  «        gS r$  r  r¸  s    r”   r…  z&InplaceCopyFallback.get_mutation_names�   r  r–   rš   c                ó   — t          ¦   «         S r�   r?   r¸  s    r”   rØ  z,InplaceCopyFallback.get_unbacked_symbol_defs’   rÙ  r–   rq  r<  rŠ  r‹  rK	  r2  c                óJ  •— t          ¦   «                              d |||dd¬¦  «         t          j                             |d                              ¦   «         ¦  «         t          j                             | ¦  «        | _        t          j                             | ¦  «         d S )Nz
aten.copy_Úaoti_torch_copy_)rN	  rO	  r   )	r   r�  rw   r"  r<  r˜  r"  rÂ   r#  )r¹  rq  rŠ  rK	  r¢  s       €r”   r�  zInplaceCopyFallback.__init__•   s“   ø€ õ 	‰Œ×ÒØØØØØ+Ø.ð 	ñ 	
ô 	
ð 	
õ 	
Œ×#Ò# F¨1¤I×$6Ò$6Ñ$8Ô$8Ñ9Ô9Ð9Ý”G×+Ò+¨DÑ1Ô1ˆŒ	Ý	Œ×"Ò" 4Ñ(Ô(Ð(Ð(Ð(r–   FrG  r‰   rF  r  c                ó�   ‡ — ˆ fd„||fD ¦   «         }|f}t          t          |                     ¦   «         ¬¦  «        ||¦  «        }|S )Nc                ó:   •— g | ]}‰                      |¦  «        ‘ŒS r©   r²	  )rÔ   r0  r  s     €r”   r×   z.InplaceCopyFallback.create.<locals>.<listcomp>«   s'   ø€ Ð;Ð;Ð;¨1�#×#Ò# AÑ&Ô&Ð;Ð;Ð;r–   rú  )r  r/  r+  )r  rG  rF  r  rŠ  rK	  r�  s   `      r”   r·  zInplaceCopyFallback.create§   s]   ø€ ð <Ð;Ð;Ð;°°c°
Ð;Ñ;Ô;ˆØ%˜ˆÝ$Ý˜cŸnšnÑ.Ô.Ð/Ñ/Ô/ØØñ
ô 
ˆð
 ˆr–   rI
  r–  r®  rÞ  )rq  r<  rŠ  r‹  rK	  r2  r�   r¬   r¢  )rG  r‰   rF  r‰   r  r    r�   r  )r¥   r¦   r§   r¯  r„	  rx  r…  rØ  r�  r3  r·  r‡  rˆ  s   @r”   r  r  ƒ   s¿   ø€ € € € € ðð ð<ð <ð <ð <ðð ð ð ð$ð $ð $ð $ðð ð ð ð)ð )ð )ð )ð )ð )ð$ à<Að
ð 
ð 
ð 
ñ „[ð
ð 
ð 
ð 
ð 
r–   r  c                  ó:   — e Zd ZdZdd„Zdd„Zdd
„Zdd„Zdd„ZdS )ÚMutatingFirstArgExternKernelr  rx	  r|   r�   r¬   c                ó  — t          | j        ¦  «        sJ ‚g d„ | j        D ¦   «         ¢t          t          | j        ¦  «        ¢}|                     |                      ¦   «         › dd                     |¦  «        › d|j        › �¦  «         d S )Nc              3  ó>   K  — | ]}|                      ¦   «         V — Œd S r�   rª
  r«
  s     r”   rø   z7MutatingFirstArgExternKernel.codegen.<locals>.<genexpr>½   s.   è è € Ð9Ð9¨ˆa×!Ò!Ñ#Ô#Ð9Ð9Ð9Ð9Ð9Ð9r–   rû  r”  r;  )	r	  rŠ  rü  r  rK	  r2  r¡	  rþ  r  )r¹  rx	  Úargrefss      r”   r„	  z$MutatingFirstArgExternKernel.codegenº   s£   € Ý ¤Ñ,Ô,Ð,Ð,Ð,ð
Ø9Ð9¨T¬[Ð9Ñ9Ô9ð
å•�tÔ)Ñ*Ô*ð
ˆð 	×ÒØ×#Ò#Ñ%Ô%ÐMÐM¨¯	ª	°'Ñ(:Ô(:ÐMÐM¸W¼^ÐMÐMñ	
ô 	
ð 	
ð 	
ð 	
r–   r    c                ó   — dS r8  r©   r¸  s    r”   rx  z,MutatingFirstArgExternKernel.should_allocateÄ   r:  r–   rì  c                ó.   — |                       d¦  «        gS r$  r  r¸  s    r”   r…  z/MutatingFirstArgExternKernel.get_mutation_namesÇ   r  r–   rš   c                ó   — t          ¦   «         S r�   r?   r¸  s    r”   rØ  z5MutatingFirstArgExternKernel.get_unbacked_symbol_defsÊ   rÙ  r–   c                ó   — dS r£  r©   r¸  s    r”   Úhas_side_effectsz-MutatingFirstArgExternKernel.has_side_effectsÍ   r×  r–   NrI
  r–  r®  rÞ  )	r¥   r¦   r§   r¯  r„	  rx  r…  rØ  r*  r©   r–   r”   r"  r"  µ   s‚   € € € € € ðð ð
ð 
ð 
ð 
ðð ð ð ð$ð $ð $ð $ðð ð ð ðð ð ð ð ð r–   r"  c                  ó    ‡ — e Zd Zdˆ fd„Zˆ xZS )	ÚResizeStorageBytesÚvariabler‰   r�  r’   r�   r¬   c                óæ  •— t          |t          ¦  «        s
J d¦   «         ‚t          ¦   «                              d t	          |                     ¦   «         ¬¦  «        |                      |g¦  «        |f¬¦  «         t          j         	                    | 
                    ¦   «         ¦  «         t          j                             | ¦  «        | _        t          j                             | ¦  «         d| _        d| _        t          |t           t"          t$          f¦  «        sJ t'          |¦  «        ¦   «         ‚t          j        j                             |j         
                    ¦   «         ¦  «         d S )NzTODO: dynamic shapesrú  )rK	  z"inductor_ops.resize_storage_bytes_z&torch::inductor::resize_storage_bytes_)r‘   r’   r   r�  r/  r+  r!  rw   r"  r<  r˜  r"  rÂ   r#  rN	  rO	  r”  r–  rˆ   r¾   Únever_reuse_buffersrá  rp  )r¹  r-  r�  r¢  s      €r”   r�  zResizeStorageBytes.__init__Ò   s1  ø€ Ý˜(¥CÑ(Ô(Ð@Ð@Ð*@Ñ@Ô@Ð(Ý‰Œ×ÒØÝ˜h×1Ò1Ñ3Ô3Ð4Ñ4Ô4Ø×Ò  
Ñ+Ô+Ø#˜+ð	 	ñ 	
ô 	
ð 	
õ 	
Œ×#Ò# H×$5Ò$5Ñ$7Ô$7Ñ8Ô8Ð8Ý”G×+Ò+¨DÑ1Ô1ˆŒ	Ý	Œ×"Ò" 4Ñ(Ô(Ð(Ø"FˆÔØGˆÔÝ˜(¥X­z½9Ð$EÑFÔFÐVÐVÍÈXÉÌÑVÔVÐFÝ	ŒÔ#×'Ò'¨¬×(>Ò(>Ñ(@Ô(@ÑAÔAÐAÐAÐAr–   )r-  r‰   r�  r’   r�   r¬   rZ
  rˆ  s   @r”   r,  r,  Ñ   sG   ø€ € € € € ðBð Bð Bð Bð Bð Bð Bð Bð Bð Br–   r,  c                  ó(   ‡ — e Zd Zd	ˆ fd„Zd
d„Zˆ xZS )ÚSetSourceTensorKernelÚself_tensorr‰   Ústorage_tensorr�   r¬   c                ól  •— |                       |¦  «        }|                     ¦   «          t          ¦   «                              |                     ¦   «         ||gdt
          j        j        j        j	        ¬¦  «         t          |t          t          t          f¦  «        sJ t          |¦  «        ¦   «         ‚t          j        j                             |j                             ¦   «         ¦  «         t          j        j                             |                     ¦   «         ¦  «         t          j        j                             |                      ¦   «         ¦  «         |                     ¦   «         }t-          t/          |¬¦  «        || ¦  «        t-          t/          |¬¦  «        || ¦  «        g| _        d S )Nz!torch.ops.aten.set_.source_Tensor)rN	  rS	  rú  )rV  rZ  r   r�  r'  r-  ru   r†	  Úset_Úsource_Tensorr‘   r”  r–  rˆ   r¾   rw   r"  r/  rá  rp  r˜  r+  r  r/  r'  )r¹  r2  r3  r!  r¢  s       €r”   r�  zSetSourceTensorKernel.__init__ä   ss  ø€ Ø×+Ò+¨NÑ;Ô;ˆØ×$Ò$Ñ&Ô&Ð&Ý‰Œ×ÒØ×%Ò%Ñ'Ô'Ø˜.Ð)ØBÝœ	œÔ+Ô9ð	 	ñ 	
ô 	
ð 	
õ ˜+­µ*½iÐ'HÑIÔIð 	
ð 	
Í4ØñL
ô L
ñ 	
ô 	
ÐIõ 	
ŒÔ#×'Ò'¨Ô(8×(AÒ(AÑ(CÔ(CÑDÔDÐDÝ	ŒÔ#×'Ò'¨×(?Ò(?Ñ(AÔ(AÑBÔBÐBÝ	ŒÔ#×'Ò'¨¯ª©¬Ñ8Ô8Ð8Ø×*Ò*Ñ,Ô,ˆå�:¨VÐ4Ñ4Ô4°kÀ4ÑHÔHÝ�:¨VÐ4Ñ4Ô4°nÀdÑKÔKð!
ˆÔÐÐr–   rì  c                óV   — |                       d¦  «        |                       d¦  «        gS r·  r  r¸  s    r”   r‰  z2SetSourceTensorKernel.get_inputs_that_alias_outputù   s%   € Ø—’ Ñ"Ô" D§O¢O°AÑ$6Ô$6Ð7Ð7r–   )r2  r‰   r3  r‰   r�   r¬   r®  )r¥   r¦   r§   r�  r‰  r‡  rˆ  s   @r”   r1  r1  ã   sQ   ø€ € € € € ð
ð 
ð 
ð 
ð 
ð 
ð*8ð 8ð 8ð 8ð 8ð 8ð 8ð 8r–   r1  c                  óL   ‡ — e Zd ZdZdd„Zdd„Zdd
„Zdd„Zdddœd ˆ fd„Zˆ xZ	S )!ÚScatterFallbackzÅ
    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.
    rx	  r|   r�   r¬   c                ó0   — |                      | ¦  «         d S r�   )Úgenerate_scatter_fallbackrƒ	  s     r”   r„	  zScatterFallback.codegen!  s   € Ø×)Ò)¨$Ñ/Ô/Ð/Ð/Ð/r–   r    c                ó   — dS r8  r©   r¸  s    r”   rx  zScatterFallback.should_allocate!  r:  r–   r¢   c                ót   — | j         d         }t          |t          ¦  «        sJ ‚|                     ¦   «         gS r$  r
	  )r¹  r‘  s     r”   r…  z"ScatterFallback.get_mutation_names
!  s4   € ØŒk˜!ŒnˆÝ˜#�vÑ&Ô&Ð&Ð&Ð&Ø—’‘”ÐÐr–   rš   c                ó   — t          ¦   «         S r�   r?   r¸  s    r”   rØ  z(ScatterFallback.get_unbacked_symbol_defs!  rÙ  r–   NT©r  Úinclude_selfrS	  r…   r‹   r‰   rc  r’   rÐ   rF  r  r8  r@  c          
     ób  •‡ — t          |t          ¦  «        ‰ _        ‰ j        rˆ fd„|||fD ¦   «         }|f}	nˆ fd„||fD ¦   «         }||f}	t          ¦   «                              d t          |                     ¦   «         ¬¦  «        ‰                      |¦  «        |	||dœt          |¦  «        ddg|¬¦  «         t          j
                             |                     ¦   «         ¦  «         t          j
                             ‰ ¦  «        ‰ _        t          j
                             ‰ ¦  «         d S )Nc                ó:   •— g | ]}‰                      |¦  «        ‘ŒS r©   r²	  ©rÔ   r0  r¹  s     €r”   r×   z,ScatterFallback.__init__.<locals>.<listcomp>!!  s'   ø€ ÐFÐFÐF°�t×)Ò)¨!Ñ,Ô,ÐFÐFÐFr–   c                ó:   •— g | ]}‰                      |¦  «        ‘ŒS r©   r²	  rC  s     €r”   r×   z,ScatterFallback.__init__.<locals>.<listcomp>$!  s'   ø€ ÐAÐAÐA°�t×)Ò)¨!Ñ,Ô,ÐAÐAÐAr–   rú  r?  r  r@  )rN	  rQ	  rS	  )r‘   rˆ   Úsrc_is_tensorr   r�  r/  r+  r!  rÃ   rw   r"  r<  r˜  r"  rÂ   r#  )r¹  rS	  r‹   rc  rÐ   rF  r  r@  ÚtensorsrK	  r¢  s   `         €r”   r�  zScatterFallback.__init__!  s5  øø€ õ (¨­YÑ7Ô7ˆÔð Ôð 	'ØFÐFÐFÐF°q¸%À°oÐFÑFÔFˆGØ ˜FˆMˆMàAÐAÐAÐA°q¸%°jÐAÑAÔAˆGØ  #˜JˆMå‰Œ×ÒØÝ˜aŸlšl™nœnÐ-Ñ-Ô-Ø×Ò Ñ(Ô(ØØ¨|Ð<Ð<Ý" ;Ñ/Ô/Ø+3°^Ð*DØ#ð 	ñ 		
ô 		
ð 		
õ 	
Œ×#Ò# A§J¢J¡L¤LÑ1Ô1Ð1Ý”G×+Ò+¨DÑ1Ô1ˆŒ	Ý	Œ×"Ò" 4Ñ(Ô(Ð(Ð(Ð(r–   rI
  r–  rK
  rÞ  )rS	  r…   r‹   r‰   rc  r’   rÐ   r‰   rF  r‰   r  r8  r@  r    r�   r¬   r  rˆ  s   @r”   r9  r9  ý   s©   ø€ € € € € ðð ð0ð 0ð 0ð 0ðð ð ð ð ð  ð  ð  ð
ð ð ð ð "Ø!ð!)ð !)ð !)ð !)ð !)ð !)ð !)ð !)ð !)ð !)ð !)ð !)r–   r9  c                  óD   ‡ — e Zd ZdZdd„Zdd„Zdd
„Zdd„Zdˆ fd„Zˆ xZ	S )ÚIndexPutFallbackzQ
    This needs to be a custom class to handle mutation and indices properly
    rx	  r|   r�   r¬   c                ó0   — |                      | ¦  «         d S r�   )Úgenerate_index_put_fallbackrƒ	  s     r”   r„	  zIndexPutFallback.codegen;!  s   € Ø×+Ò+¨DÑ1Ô1Ð1Ð1Ð1r–   r    c                ó   — dS r8  r©   r¸  s    r”   rx  z IndexPutFallback.should_allocate>!  r:  r–   rì  c                ó.   — |                       d¦  «        gS r$  r  r¸  s    r”   r…  z#IndexPutFallback.get_mutation_namesA!  r  r–   rš   c                ó   — t          ¦   «         S r�   r?   r¸  s    r”   rØ  z)IndexPutFallback.get_unbacked_symbol_defsD!  rÙ  r–   rS	  útorch._ops.OpOverloadr‹   r‰   rÛ  r�
  r³   r2  Ú
accumulater   c           	     óú  •‡ — |‰ _         d„ |D ¦   «         }ˆ fd„||g|¢D ¦   «         }d}t          ¦   «                              d t          |                     ¦   «         ¬¦  «        ‰                      |¦  «        |fd||¬¦  «         t          j                             ‰  	                    d¦  «        ¦  «         t          j         
                    ‰ ¦  «        ‰ _        t          j                             ‰ ¦  «         d S )Nc                ó   — g | ]}|®|‘ŒS r�   r©   r  s     r”   r×   z-IndexPutFallback.__init__.<locals>.<listcomp>P!  s   € Ð=Ð=Ð=˜q¨q¨}˜¨}¨}¨}r–   c                ó:   •— g | ]}‰                      |¦  «        ‘ŒS r©   r²	  )rÔ   r‹   r¹  s     €r”   r×   z-IndexPutFallback.__init__.<locals>.<listcomp>R!  s'   ø€ ÐNÐNÐN¨Q�4×%Ò% aÑ(Ô(ÐNÐNÐNr–   Úaoti_torch_index_put_outrú  zaten.index_put_)rN	  rO	  rS	  r   )rÛ  r   r�  r/  r+  r!  rw   r"  r<  r	  r"  rÂ   r#  )
r¹  rS	  r‹   rÛ  r³   rO  Úvalid_indicesrF  rO	  r¢  s
   `        €r”   r�  zIndexPutFallback.__init__G!  sø   øø€ ð ˆŒØ=Ð= GÐ=Ñ=Ô=ˆàNÐNÐNÐN°1°fÐ2M¸}Ð2MÐNÑNÔNˆØ4ˆÝ‰Œ×ÒØÝ˜aŸlšl™nœnÐ-Ñ-Ô-Ø×Ò Ñ(Ô(ØˆMØ0Ø+Ø#ð 	ñ 	
ô 	
ð 	
õ 	
Œ×#Ò# D§O¢O°AÑ$6Ô$6Ñ7Ô7Ð7Ý”G×+Ò+¨DÑ1Ô1ˆŒ	Ý	Œ×"Ò" 4Ñ(Ô(Ð(Ð(Ð(r–   rI
  r–  r®  rÞ  )rS	  rN  r‹   r‰   rÛ  r�
  r³   r2  rO  r   r�   r¬   r  rˆ  s   @r”   rH  rH  6!  s—   ø€ € € € € ðð ð2ð 2ð 2ð 2ðð ð ð ð$ð $ð $ð $ðð ð ð ð)ð )ð )ð )ð )ð )ð )ð )ð )ð )r–   rH  c                  ó.   — e Zd Zedd„¦   «         Zdd„ZdS )Ú
DeviceCopyr‹   r‰   r!  r2  r  r    r�   c           	     ó�  — |                      ¦   «         }|€J ‚|                     ¦   «         sÀt          |¦  «        t          j        j        vr t          d„ |                     ¦   «         D ¦   «         ¦  «        rut          j	        j
        sdt          j        j        r>t          j                             |¦  «         t          j                             |¦  «         |                     |¦  «        S t          j                             |¦  «         t          j                             |¦  «         t          d¦  «         |f}t                               |¦  «        }d }|                     ¦   «         r|                     ¦   «         }t'          |j        ¦  «        o|j        dk    o|}|j        dk    ot'          |j        ¦  «        o|}|r(t+          |¦  «        rd|                     ¦   «         _        t1          t3          ||                     ¦   «         |                     ¦   «         ||¬¦  «        |                      |¦  «        g|¦  «        S )Nc              3  ó<   K  — | ]}|t           j        j        v V — Œd S r�   )rw   r"  rº	  rr  s     r”   rø   z$DeviceCopy.create.<locals>.<genexpr>k!  s,   è è € ÐGÐG¨q�A�œÔ*Ð*ÐGÐGÐGÐGÐGÐGr–   zDeviceCopy in input programr@  Tr  )r+  r  r™  rw   r"  r¶  rù   rÌ  rJ   Úaot_inductorÚuse_runtime_constant_foldingr�	  Úadd_device_inforƒ  rf   rß  râ  r%  rT  rn   r¾   r&  r'  ru  rV  rs  r*  rV  )	r  r‹   r!  r  Úx_devicerK	  r  Úis_destination_pinnedÚis_source_pinneds	            r”   r·  zDeviceCopy.createc!  s  € à—<’<‘>”>ˆØÐ#Ð#Ð#à—’‘”ð	0õ ˜Q‘”¥q¤wÔ'>Ð>Ð>ÝÐGÐG°A×4DÒ4DÑ4FÔ4FÐGÑGÔGÑGÔGð ?åÔ'ÔDð ?õ ŒwÔ"ð 2õ ”×'Ò'¨Ñ/Ô/Ð/Ý”×'Ò'¨Ñ1Ô1Ð1Ø×'Ò'¨Ñ/Ô/Ð/å	Œ×Ò Ñ'Ô'Ð'Ý	Œ×Ò Ñ)Ô)Ð)ÝÐ7Ñ8Ô8Ð8Ø%˜ˆå×+Ò+¨AÑ.Ô.ˆØˆØ�:Š:‰<Œ<ð 	$à—\’\‘^”^ˆFå�8”=Ñ!Ô!ÐK f¤k°UÒ&:ÐK¸|ð 	ð ŒM˜UÒ"ÐK¥v¨f¬kÑ':Ô':ÐK¸|ð 	ð ð 	,Õ 5°aÑ 8Ô 8ð 	,Ø'+ˆA�LŠL‰NŒNÔ$ÝÝØØ—’‘”Ø—
’
‘”ØØ/ðñ ô ð ×Ò˜qÑ!Ô!Ð"Øñ

ô 

ð 
	
r–   rx	  r|   r¬   c                óè  — |                       ¦   «         }t          |¦  «        dk    sJ ‚| j        r;|                     |d         | j                             ¦   «         |d         ¦  «         n5|                     |d         |                      ¦   «         |d         ¦  «         t          | j        t          ¦  «        r5| j        j        r+| 	                    |  
                    ¦   «         ¦  «         d S d S d S )Nrí   r   rI   )r
  rÙ   rM	  r  r/  r‘   rq  r
  ru  Úsync_d2h_copyr˜  )r¹  rx	  rÆ   s      r”   r„	  zDeviceCopy.codegen“!  sò   € Ø× Ò Ñ"Ô"ˆÝ�4‰yŒy˜AŠ~ˆ~ˆ~ˆ~ØÔð 	TØ×'Ò'Ø�Q”˜Ô)×;Ò;Ñ=Ô=¸tÀA¼wñô ð ð ð ×'Ò'¨¨Q¬°×1GÒ1GÑ1IÔ1IÈ4ÐPQÌ7ÑSÔSÐSÝ�d”k¥6Ñ*Ô*ð 	3¨t¬{Ô/Dð 	3Ø×!Ò! $§-¢-¡/¤/Ñ2Ô2Ð2Ð2Ð2ð	3ð 	3ð 	3ð 	3r–   N)r‹   r‰   r!  r2  r  r    r�   r‰   rI
  )r¥   r¦   r§   r3  r·  r„	  r©   r–   r”   rV  rV  b!  sG   € € € € € Øð-
ð -
ð -
ñ „[ð-
ð^
3ð 
3ð 
3ð 
3ð 
3ð 
3r–   rV  c                  ór   ‡ — e Zd ZdZdd„Zdd„Zdˆ fd„Zdd„Z ed ¦  «        	 ddd„¦   «         Z	dd„Z
ˆ xZS ) ÚDynamicSelectStorageOffseta×  
    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.
    r�   rm  c                ó   — t          ¦   «         S r�   r?   r¸  s    r”   rË  z$DynamicSelectStorageOffset.get_reads©!  rÙ  r–   r    c                ó   — dS r8  r©   r¸  s    r”   rx  z*DynamicSelectStorageOffset.should_allocate¬!  r:  r–   Úunbacked_offset_symbolúsympy.SymbolrÐ   Úbase_offsetúsympy.Symbol | intÚbase_dim_strider  rR  r¬   c                óâ   •— t          ¦   «                              d t          t          j        d¦  «        ¬¦  «        g ¦  «         || _        || _        || _        || _        || _	        || _
        d S ©Nr@  rú  )r   r�  r/  r-  r!  re  rÐ   rg  ri  r  rR  )r¹  re  rÐ   rg  ri  r  rR  r¢  s          €r”   r�  z#DynamicSelectStorageOffset.__init__¯!  si   ø€ õ 	‰Œ×Ò˜�zµ´¸eÑ1DÔ1DÐEÑEÔEÀrÑJÔJÐJð '=ˆÔ#ØˆŒ
Ø&ˆÔØ.ˆÔØˆŒ	ØˆŒ
ˆ
ˆ
r–   rš   c                ó,   — t          | j        g¦  «        S r�   )r@   re  r¸  s    r”   rØ  z3DynamicSelectStorageOffset.get_unbacked_symbol_defsÂ!  s   € Ý˜4Ô6Ð7Ñ8Ô8Ð8r–   Fr�  c                ó  — t          | j        |¦  «                             t          | j        |¦  «        ¦  «                             t          | j        |¦  «        ¦  «                             t          | j        |¦  «        ¦  «        S r�   )r)   rÐ   rè  r  rg  ri  rw  s     r”   rx  z/DynamicSelectStorageOffset.get_free_symbol_usesÅ!  sh   € õ
 ˜TœZ¨Ñ7Ô7ßŠUÕ# D¤I¨}Ñ=Ô=Ñ>Ô>ßŠUÕ# DÔ$4°mÑDÔDÑEÔEßŠUÕ# DÔ$8¸-ÑHÔHÑIÔIð		
r–   rx	  r|   c                ó>   — |                      | | j        ¬¦  «         d S )Nr+	  )Úcodegen_dynamic_select_indexrR  rƒ	  s     r”   r„	  z"DynamicSelectStorageOffset.codegenÐ!  s#   € Ø×,Ò,¨T¸¼Ð,ÑDÔDÐDÐDÐDr–   r¨  r–  )re  rf  rÐ   rf  rg  rh  ri  rh  r  rh  rR  r    r�   r¬   rÞ  r¢  r«  rI
  ©r¥   r¦   r§   r¯  rË  rx  r�  rØ  rb   rx  r„	  r‡  rˆ  s   @r”   rb  rb   !  sÔ   ø€ € € € € ðð ðð ð ð ðð ð ð ðð ð ð ð ð ð&9ð 9ð 9ð 9ð ÐÐ8Ñ9Ô9à$)ð
ð 
ð 
ð 
ñ :Ô9ð
ðEð Eð Eð Eð Eð Eð Eð Er–   rb  c                  ór   ‡ — e Zd ZdZdd„Zdd„Zdˆ fd„Zdd„Z ed ¦  «        	 ddd„¦   «         Z	dd„Z
ˆ xZS )ÚDynamicSliceSizeac  
    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.
    r�   rm  c                ó   — t          ¦   «         S r�   r?   r¸  s    r”   rË  zDynamicSliceSize.get_readsä!  rÙ  r–   r    c                ó   — dS r8  r©   r¸  s    r”   rx  z DynamicSliceSize.should_allocateç!  r:  r–   Úunbacked_size_symbolrf  rC  rh  rD  rZ  r  c                óÔ   •— t          ¦   «                              d t          t          j        d¦  «        ¬¦  «        g ¦  «         || _        || _        || _        || _        || _	        d S rk  )
r   r�  r/  r-  r!  ru  rC  rD  rZ  r  )r¹  ru  rC  rD  rZ  r  r¢  s         €r”   r�  zDynamicSliceSize.__init__ê!  s^   ø€ õ 	‰Œ×Ò˜�zµ´¸eÑ1DÔ1DÐEÑEÔEÀrÑJÔJÐJà$8ˆÔ!ØˆŒ
ØˆŒØˆŒ	ØˆŒ	ˆ	ˆ	r–   rš   c                ó,   — t          | j        g¦  «        S r�   )r@   ru  r¸  s    r”   rØ  z)DynamicSliceSize.get_unbacked_symbol_defsú!  s   € Ý˜4Ô4Ð5Ñ6Ô6Ð6r–   Fr�  c                ó  — t          | j        |¦  «                             t          | j        |¦  «        ¦  «                             t          | j        |¦  «        ¦  «                             t          | j        |¦  «        ¦  «        S r�   )r)   rC  rè  rD  r  rZ  rw  s     r”   rx  z%DynamicSliceSize.get_free_symbol_usesý!  sf   € õ
 ˜TœZ¨Ñ7Ô7ßŠUÕ# D¤H¨mÑ<Ô<Ñ=Ô=ßŠUÕ# D¤I¨}Ñ=Ô=Ñ>Ô>ßŠUÕ# D¤I¨}Ñ=Ô=Ñ>Ô>ð		
r–   rx	  r|   r¬   c                ó0   — |                      | ¦  «         d S r�   )Úcodegen_dynamic_slice_sizerƒ	  s     r”   r„	  zDynamicSliceSize.codegen"  rP
  r–   r¨  r–  )
ru  rf  rC  rh  rD  rh  rZ  rh  r  rh  rÞ  r¢  r«  rI
  rp  rˆ  s   @r”   rr  rr  Ô!  sÌ   ø€ € € € € ðð ðð ð ð ðð ð ð ðð ð ð ð ð ð 7ð 7ð 7ð 7ð ÐÐ.Ñ/Ô/à$)ð
ð 
ð 
ð 
ñ 0Ô/ð
ð1ð 1ð 1ð 1ð 1ð 1ð 1ð 1r–   rr  c                  óD   ‡ — e Zd ZdZdd„Zdd„Zdˆ fd„Zdd„Zdd„Zˆ xZ	S )rµ   z;
    The result of a call to aten._local_scalar_dense.
    r�   rm  c                ó   — t          ¦   «         S r�   r?   r¸  s    r”   rË  zDynamicScalar.get_reads"  rÙ  r–   r    c                ó   — dS r8  r©   r¸  s    r”   rx  zDynamicScalar.should_allocate"  r:  r–   Úsymrf  Úkeypathúpytree.KeyPathrp  r‰   r¬   c                óú   •— |                      ¦   «          t          ¦   «                              d t          t	          j        d¦  «        ¬¦  «        |                      |g¦  «        ¦  «         || _        || _        d S rk  )	r*  r   r�  r/  r-  r!  r!  r~  r  )r¹  r~  r  rp  r¢  s       €r”   r�  zDynamicScalar.__init__"  sn   ø€ ð 	�Š‰ŒˆÝ‰Œ×ÒØ•*¥E¤L°Ñ$7Ô$7Ð8Ñ8Ô8¸$×:MÒ:MÈtÈfÑ:UÔ:Uñ	
ô 	
ð 	
ð ˆŒØˆŒˆˆr–   rš   c                ó,   — t          | j        g¦  «        S r�   )r@   r~  r¸  s    r”   rØ  z&DynamicScalar.get_unbacked_symbol_defs!"  s   € Ý˜4œ8˜*Ñ%Ô%Ð%r–   rx	  r|   c                ó0   — |                      | ¦  «         d S r�   )Úcodegen_dynamic_scalarrƒ	  s     r”   r„	  zDynamicScalar.codegen$"  s   € Ø×&Ò& tÑ,Ô,Ð,Ð,Ð,r–   r¨  r–  )r~  rf  r  r€  rp  r‰   r�   r¬   rÞ  rI
  )
r¥   r¦   r§   r¯  rË  rx  r�  rØ  r„	  r‡  rˆ  s   @r”   rµ   rµ   "  s—   ø€ € € € € ðð ðð ð ð ðð ð ð ðð ð ð ð ð ð&ð &ð &ð &ð-ð -ð -ð -ð -ð -ð -ð -r–   rµ   c                  ór   ‡ — e Zd ZdZdd„Zdd„Zdˆ fd„Zdd„Z ed ¦  «        	 ddd„¦   «         Z	dd„Z
ˆ xZS )r¶   z5
    The result of a call to aten._assert_scalar
    r�   rm  c                ó   — t          ¦   «         S r�   r?   r¸  s    r”   rË  zAssertScalar.get_reads-"  rÙ  r–   r    c                ó   — dS r8  r©   r¸  s    r”   rx  zAssertScalar.should_allocate0"  r:  r–   Úscalarrx   rÒ	  rÃ   r¬   c                óª   •— t          ¦   «                              d t          t          j        d¦  «        ¬¦  «        g ¦  «         || _        || _        d S rk  )r   r�  r/  r-  r!  rˆ  rÒ	  )r¹  rˆ  rÒ	  r¢  s      €r”   r�  zAssertScalar.__init__3"  sQ   ø€ Ý‰Œ×ÒàÝ�eœl¨5Ñ1Ô1Ð2Ñ2Ô2àñ	
ô 	
ð 	
ð ˆŒØˆŒˆˆr–   c                ó   — dS r£  r©   r¸  s    r”   r*  zAssertScalar.has_side_effects>"  r×  r–   Fr�  rš   c                ó,   — t          | j        |¦  «        S r�   )r)   rˆ  rw  s     r”   rx  z!AssertScalar.get_free_symbol_usesA"  s   € õ   ¤¨]Ñ;Ô;Ð;r–   rx	  r|   c           	     óª  — t           j        sd S t          t          |                      d¬¦  «        ¦  «        ¦  «        }t
          j        j        rd S t
          j        j        rWd|› d�}t
          j        j	         
                    | j        d¬¦  «        }|                     d|› d| j        › d|› d	�¦  «         d S t
          j        j	                             | j        d¬¦  «        }|                     d
|› d�¦  «         |                     dt          | j        ¦  «        › d�¦  «         |                     |                      ¦   «         › d�¦  «         d S )NFrŽ  zstd::to_string(r;  )r<  zif (!(z()) { throw std::runtime_error("Expected z but received " + z); }zif not (z):z    raise RuntimeError(z = None)rJ   Úscalar_assertsr7  r8  rx  rw   r"  r�	  r�	  r0  Úcodegen_cpp_sizevarrˆ  r2  rÒ	  Úcodegen_python_sizevarr  r˜  )r¹  rx	  r#  Ú
symbol_strÚsizevars        r”   r„	  zAssertScalar.codegenG"  st  € ÝÔ$ð 	ØˆFõ •d˜4×4Ò4À5Ð4ÑIÔIÑJÔJÑKÔKˆÝŒ7Ôð 	;àˆDÝŒWÔ ð 	;Ø4¨6Ð4Ð4Ð4ˆJÝ”gÔ*×>Ò>Ø” eð ?ñ ô ˆGð ×ÒØx˜ÐxÐxÈ4Ì8ÐxÐxÐgqÐxÐxÐxñô ð ð ð õ ”gÔ*×AÒAØ” eð Bñ ô ˆGð ×ÒÐ4¨Ð4Ð4Ð4Ñ5Ô5Ð5Ø×ÒÐI½¸T¼X¹¼ÐIÐIÐIÑJÔJÐJð ×Ò §¢¡¤Ð9Ð9Ð9Ñ:Ô:Ð:Ð:Ð:r–   r¨  r–  )rˆ  rx   rÒ	  rÃ   r�   r¬   r¢  r«  rI
  )r¥   r¦   r§   r¯  rË  rx  r�  r*  rb   rx  r„	  r‡  rˆ  s   @r”   r¶   r¶   ("  sË   ø€ € € € € ðð ðð ð ð ðð ð ð ð	ð 	ð 	ð 	ð 	ð 	ðð ð ð ð Ð˜NÑ+Ô+à$)ð<ð <ð <ð <ñ ,Ô+ð<ð
;ð ;ð ;ð ;ð ;ð ;ð ;ð ;r–   r¶   c                  ó$   — e Zd ZU ded<   ded<   dS )ÚExternKernelNoderÃ   rÂ   zexport_schema.Noder¿   Nr¤   r©   r–   r”   r“  r“  g"  s'   € € € € € € à€I€I�IØÐÐÑÐÐr–   r“  c                  óè   ‡ — e Zd ZdZ	 d1ddœd2ˆ fd„Zd3ˆ fd„Zd4d„Zd5d„Zd6d„Ze	d7d!„¦   «         Z
d8d#„Zd9d%„Zd9d&„Zd'„ Zed4d(„¦   «         Ze	d:d,„¦   «         Zed;d/„¦   «         Zed<d0„¦   «         Zˆ xZS )=rg  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©rW	  rq  r<  rè  r…   rÇ	  r‹  Únontensor_argsr2  r°	  rá  rÇ   rX	  rW	  ú)dict[sympy.Symbol, pytree.KeyPath] | Noner�   r¬   c               ó’  •‡ — t          ¦   «                              |t          |¦  «        t          |¦  «        |¬¦  «         d‰ _        |pi ‰ _        t          |t          j        j        t          j        j	        f¦  «        sJ d|› dt          |¦  «        › d�¦   «         ‚|‰ _        |‰ _        |€i n|‰ _        ‰ j        €J ‚t          j                             ‰ j        ¦  «         g ‰ _        g ‰ _        t          ‰ j        t          j        j	        ¦  «        rd S d‰ j                             ¦   «         v rd S ‰ j        j        }t          j        j                             ‰ j        ¦  «        r4‰ j                             |d                              ¦   «         ¦  «         d S dd„}	|j        r;t9          ‰ j        ¦  «        s' |	‰ j        ¦  «        st;          d‰ j        › �¦  «        ‚‰                      ‰ j        ‰ j        ¦  «        \  }
}dˆ fd„}t          j        j                              ||
|¦  «        D ]\  }} |||¦  «         Œd S )Nr  Fú#Fails to create FallbackKernel for r:  ú not supportedÚ_c10d_functionalr   r�  rN  r�   r    c                óè   — t           j                             |                      ¦   «         t           j        j        j        ¦  «        p,t          | d¦  «        ot           j        j        j        | j        v S )NÚ
py_kernels)r-  Ú_CÚ%_dispatch_has_kernel_for_dispatch_keyrÂ   ÚDispatchKeyÚFunctionalizerà  r�  r€  s    r”   Úhas_functionalize_implz7FallbackKernel.__init__.<locals>.has_functionalize_impl¶"  s]   € Ý”8×AÒAØ—’‘	”	�5œ8Ô/Ô=ñô ð õ ˜˜LÑ)Ô)ð HÝ”HÔ(Ô6¸"¼-ÐGð	r–   z'NYI: Can't generate FallbackKernel for Úinfoútorch._C.Argumentr(	  r   r¬   c                óü  •‡ ‡— t          ‰ j        t          j        ¦  «        r3t          |t          t
          f¦  «        sJ t          |¦  «        ¦   «         ‚t          j        ‰ j        ¦  «        rt          |t
          t          f¦  «        rJ ‚|€d S ‰ j        €d S dˆ ˆfd„Šd	ˆfd„}t          j	        ‰ j        ¦  «        r|�|D ]} ||¦  «         Œd S d S t          j        ‰ j        ¦  «        sJ ‚ ||¦  «         d S )
Nr0  r‰   r�   r¬   c                ó   •— ‰j                              |                      ¦   «         ¦  «         ‰j        €J ‚‰j        j        rK‰j                             t          t          |                      ¦   «         ¬¦  «        | ‰¦  «        ¦  «         d S d S r‘  )	Úalias_namesró  r˜  Ú
alias_infoÚis_writer'  r  r/  r+  )r0  r£  r¹  s    €€r”   Ú	add_aliaszPFallbackKernel.__init__.<locals>.handle_aliasing_and_mutation.<locals>.add_alias×"  sŽ   ø€ ØÔ ×'Ò'¨¯
ª
©¬Ñ5Ô5Ð5Ø”Ð2Ð2Ð2Ø”?Ô+ð ØÔ)×0Ò0Ý&¥z¸¿º¹¼Ð'HÑ'HÔ'HÈ!ÈTÑRÔRñô ð ð ð ðð r–   r   c                óÊ   •— | €d S t          | t          t          gt          ¢R ¦  «        rd S t          | t          ¦  «        sJ t          | ¦  «        ¦   «         ‚ ‰| ¦  «         d S r�   )r‘   r   r    r=   r‰   r¾   )r0  rª  s    €r”   Úadd_alias_if_graph_bufferz`FallbackKernel.__init__.<locals>.handle_aliasing_and_mutation.<locals>.add_alias_if_graph_bufferß"  sh   ø€ Ø�9Ø�FÝ˜a¥&­$Ð!:µÐ!:Ð!:Ñ;Ô;ð ð �FÝ! !¥VÑ,Ô,Ð5Ð5­d°1©g¬gÑ5Ô5Ð,Ø�	˜!‘”���r–   )r0  r‰   r�   r¬   )r0  r   r�   r¬   )
r‘   r¾   r-  ÚListTyper°   r±   Úlibrary_utilsÚis_tensor_like_typer¨  Úis_tensorlist_like_type)r£  r(	  r¬  Úoptional_tensor_argrª  r¹  s   `   @€r”   Úhandle_aliasing_and_mutationz=FallbackKernel.__init__.<locals>.handle_aliasing_and_mutationÉ"  sU  øøø€ å˜$œ)¥U¤^Ñ4Ô4ð AÝ! #­­e }Ñ5Ô5Ð@Ð@µt¸C±y´yÑ@Ô@Ð5ÝÔ0°´Ñ;Ô;ð :õ & c­Eµ4¨=Ñ9Ô9Ð9Ð9Ð9àˆ{Ø�ØŒÐ&Ø�ðð ð ð ð ð ð ð	ð 	ð 	ð 	ð 	ð 	õ Ô4°T´YÑ?Ô?ð /Ø�?Ø/2ð Gð GÐ+Ø1Ð1Ð2EÑFÔFÐFÐFð #�?ðGð Gõ %Ô8¸¼ÑCÔCÐCÐCÐCà)Ð)¨#Ñ.Ô.Ð.Ð.Ð.r–   )r�  rN  r�   r    )r£  r¤  r(	  r   r�   r¬   )!r   r�  r±   Úuse_runtime_dispatchrW	  r‘   r-  rq	  rr	  r˜	  r¾   rS	  r°	  rÇ   rN	  rw   r"  Úwarn_fallbackr§  rf
  rÂ   rs	  Ú_libraryr  Úmutates_and_returns_first_argró  r˜  Ú
is_mutabler&   r  rŠ  rK	  Ú
zip_schema)r¹  rq  rè  rÇ	  r–  r°	  rÇ   rW	  Úschemar¢  rÆ   r²  r£  r(	  r¢  s   `             €r”   r�  zFallbackKernel.__init__t"  s¡  øø€ õ 	‰Œ×ÒØÝ�+ÑÔÝ�.Ñ!Ô!Øð	 	ñ 	
ô 	
ð 	
ð %*ˆÔ!Ø!2Ð!8°bˆÔåØ•U”ZÔ*­E¬JÔ,JÐKñ
ô 
ð 	Xð 	XàW°ÐWÐW½4À¹<¼<ÐWÐWÐWñ	Xô 	Xð 
ð "ˆÔØ,ˆÔØ"˜N�b�b°ˆŒØÔ&Ð2Ð2Ð2Ý	Œ×Ò˜dÔ5Ñ6Ô6Ð6ð ')ˆÔà)+ˆÔå�dÔ&­¬
Ô(FÑGÔGð 	ð ˆFà Ô!1×!6Ò!6Ñ!8Ô!8Ð8Ð8ð
 ˆFàÔ!Ô)ˆõ Œ>Ô×=Ò=¸dÔ>NÑOÔOð 	ØÔ×&Ò& {°1¤~×'>Ò'>Ñ'@Ô'@ÑAÔAÐAØˆFð	ð 	ð 	ð 	ð Ôð	å*¨4Ô+;Ñ<Ô<ð	ð +Ð*¨4Ô+;Ñ<Ô<ð	õ
 &ØL¸$Ô:JÐLÐLñô ð ð ×*Ò*¨4¬;¸Ô8JÑKÔK‰ˆˆfð(	/ð (	/ð (	/ð (	/ð (	/ð (	/õT œÔ-×8Ò8¸ÀÀvÑNÔNð 	4ð 	4‰IˆD�#Ø(Ð(¨¨sÑ3Ô3Ð3Ð3ð	4ð 	4r–   rj  c                ó2  •— t          ¦   «                              ¦   «         }| j        t          j        j        j        u rX| j        D ]P}t          |t          ¦  «        r9| 
                    t          j        |                     ¦   «         ¦  «        ¦  «        }ŒQ|S r�   )r   rl  rS	  r-  Ú_primsÚ	rng_primsÚgraphsafe_run_with_rng_staterK	  r‘   r¶	  Ú	with_readrK   r½  r˜  )r¹  rÚ  r(	  r¢  s      €r”   rl  zFallbackKernel.get_read_writesö"  s†   ø€ Ý‘g”g×-Ò-Ñ/Ô/ˆàÔ�uœ|Ô5ÔRÐRÐRØÔ)ð ð �Ý˜c¥>Ñ2Ô2ð Ø"-×"7Ò"7Ý$Ô,¨S¯\ª\©^¬^Ñ<Ô<ñ#ô #�Køð Ðr–   rx	  r|   c           	     ó|   — |                      |                      ¦   «         | j        t          | dd ¦  «        ¦  «        S ©NrW	  )Ú(codegen_unbacked_symbol_defs_for_outputsr˜  rÜ  rÉ   rƒ	  s     r”   Úcodegen_unbacked_symbol_defsz+FallbackKernel.codegen_unbacked_symbol_defs#  s8   € Ø×?Ò?Ø�MŠM‰OŒO˜Tœ\­7°4Ð9LÈdÑ+SÔ+Sñ
ô 
ð 	
r–   rš   c                óÖ   — t          | dd ¦  «        x}rIt          t          j        j        j        |¦  «        }|€J ‚t          |                     ¦   «         ¦  «        S t          ¦   «         S rÀ  ©rÉ   r;   rw   r"  r#  rñ   r@   ró  ©r¹  rW	  Úresolveds      r”   rØ  z'FallbackKernel.get_unbacked_symbol_defs#  óh   € Ý '¨Ð.AÀ4Ñ HÔ HÐHÐð 	 Ý0Ý”Ô Ô*Ð,=ñô ˆHð Ð'Ð'Ð'Ý˜hŸmšm™oœoÑ.Ô.Ð.å‘<”<Ðr–   r¢   c                ó
  ‡— t           j         G d„ d¦  «        ¦   «         Št          | j        ¦  «        sJ ‚ˆfd„| j        D ¦   «         }|                      || j        ¦  «        \  }}t          j        j        rdt          | j
        t          j        j        ¦  «        r@|                      ||¦  «        }d„ t          | j
        j        j        |¦  «        D ¦   «         }nd„ |D ¦   «         }| j                             |¦  «         |S )Nc                  ó"   — e Zd ZU ded<   dd„ZdS )ú)FallbackKernel.codegen_args.<locals>.Shimr   Úrefr�   rÃ   c                ó   — | j         S r�   )rË  r¸  s    r”   r2  z2FallbackKernel.codegen_args.<locals>.Shim.__repr__#  s	   € Ø”x�r–   NrŸ  )r¥   r¦   r§   r¨   r2  r©   r–   r”   ÚShimrÊ  #  s3   € € € € € € àˆHˆH‰Hð ð  ð  ð  ð  ð  r–   rÍ  c                óJ   •— g | ]} ‰|                      ¦   «         ¦  «        ‘Œ S r©   rª
  )rÔ   r‹   rÍ  s     €r”   r×   z/FallbackKernel.codegen_args.<locals>.<listcomp>#  s/   ø€ ÐHÐHÐH°q�t�t˜A×/Ò/Ñ1Ô1Ñ2Ô2ÐHÐHÐHr–   c                óh   — g | ]/\  }}t           j        j                             ||j        ¦  «        ‘Œ0S r©   )rw   r"  r0  r	
  rk	  )rÔ   Úparamr‹   s      r”   r×   z/FallbackKernel.codegen_args.<locals>.<listcomp>#  sC   € ð ð ð á�E˜1õ ”Ô$×3Ò3°A°u´ÑGÔGðð ð r–   c                óV   — g | ]&}t           j        j                             |¦  «        ‘Œ'S r©   r
  r  s     r”   r×   z/FallbackKernel.codegen_args.<locals>.<listcomp>##  s+   € ÐIÐIÐI¸q•A”GÔ(×7Ò7¸Ñ:Ô:ÐIÐIÐIr–   )r°  Ú	dataclassr	  rŠ  r°	  rK	  rw   r"  r�	  r‘   rS	  r-  rq	  rr	  r
  rÝ   rs	  rt	  rÇ   ry  )r¹  rÇ	  rÆ   rÇ   rÍ  s       @r”   r
  zFallbackKernel.codegen_args#  s+  ø€ Ý	Ô	ð	 ð 	 ð 	 ð 	 ð 	 ñ 	 ô 	 ñ 
Ô	ð	 õ   ¤Ñ,Ô,Ð,Ð,Ð,ØHÐHÐHÐH¸D¼KÐHÑHÔHˆØ×*Ò*¨;¸Ô8JÑKÔK‰ˆˆfÝŒ7Ôð 	J¥:¨dÔ.>ÅÄ
Ô@UÑ#VÔ#Vð 	JØ×.Ò.¨t°VÑ<Ô<ˆDðð å # DÔ$4Ô$<Ô$FÈÑ MÔ Mðñ ô ˆDˆDð
 JÐIÀDÐIÑIÔIˆDð 	Œ×Ò˜6Ñ"Ô"Ð"Øˆr–   úSequence[torch.Tensor] | NonerÎ	  r   c                óp  — | rd„ | D ¦   «         nd }|r| sJ ‚d„ | D ¦   «         }|d         S t          |t          j        ¦  «        r|j        S t          |t          j        j        t          f¦  «        st          |¦  «        rt          j        d¦  «        S t          |t          t          f¦  «        r…t          d„ |D ¦   «         ¦  «        }d„ |D ¦   «         }t          |¦  «        dk    r|d         S |sd S |D ]6}t          |t          j        ¦  «        sJ ‚t          |j        ¦  «        r|c S Œ7|d         S d S )Nc                ó<   — g | ]}t          |t          ¦  «        °|‘ŒS r©   )r‘   r	  r«
  s     r”   r×   z.FallbackKernel.find_device.<locals>.<listcomp>.#  s'   € ÐJÐJÐJ�1­:°a½Ñ+IÔ+IÐJˆQÐJÐJÐJr–   c                ó^   — g | ]*}|                      ¦   «         ¯|                      ¦   «         ‘Œ+S r©   r4  r'	  s     r”   r×   z.FallbackKernel.find_device.<locals>.<listcomp>4#  s1   € ÐSÐSÐS¨CÀ#Ç.Â.ÑBRÔBRÐS�s—~’~Ñ'Ô'ÐSÐSÐSr–   r   r@  c              3  óL   K  — | ]}t                                d |¦  «        V — Œ d S r�   )rg  Úfind_devicer  s     r”   rø   z-FallbackKernel.find_device.<locals>.<genexpr>=#  sH   è è € ð $ð $ð õ ×*Ò*¨4°Ñ3Ô3ð$ð $ð $ð $ð $ð $r–   c                ó   — g | ]}|¯|‘ŒS r©   r©   )rÔ   r!  s     r”   r×   z.FallbackKernel.find_device.<locals>.<listcomp>C#  s   € ÐAÐAÐA &¸&ÐA�vÐAÐAÐAr–   rI   )r‘   r-  re  r!  rž  ÚScriptObjectr*   r,   r°   r±   r@   rÙ   rn   r¾   )rÇ	  rÎ	  Únon_torch_bind_tensor_argsÚdevicesÚ
device_setr!  s         r”   rØ  zFallbackKernel.find_device)#  s’  € ð ðÐJÐJ˜ÐJÑJÔJÐJàð 	#ð
 &ð 	ØÐÐ�;ØSÐS°;ÐSÑSÔSˆGØ˜1”:ÐÝ�n¥e¤lÑ3Ô3ð 	)Ø!Ô(Ð(ÝØ�UœXÔ2Õ4DÐEñ
ô 
ð 	'å˜^Ñ,Ô,ð	'õ ”< Ñ&Ô&Ð&Ý�n¥t­U mÑ4Ô4ð 	Ý#ð $ð $ð (ð$ñ $ô $ñ ô ˆJð BÐA¨JÐAÑAÔAˆGÝ�7‰|Œ|˜qÒ Ð Ø˜q”zÐ!Øð Ø�tØ!ð "ð "�Ý! &­%¬,Ñ7Ô7Ð7Ð7Ð7Ý˜&œ+Ñ&Ô&ð "Ø!�M�M�Mð"à˜1”:ÐØˆtr–   r    c                ó.   — ddl m}  || j        ¦  «        S )Nr   )Ú	is_impure)Útorch._library.utilsrß  rS	  )r¹  rß  s     r”   r*  zFallbackKernel.has_side_effectsO#  s)   € Ø2Ð2Ð2Ð2Ð2Ð2ð ˆy˜Ô)Ñ*Ô*Ð*r–   rì  c                ó–  — t          | j        t          j        j        t          j        j        f¦  «        s(J d| j        › dt          | j        ¦  «        › d�¦   «         ‚t          | j        t          j        j        ¦  «        sBd| j                             ¦   «         vr'| j        j        j	        rt          | j        ¦  «        rg S | j        S )Nr™  r:  rš  r›  )r‘   rS	  r-  rq	  rr	  r˜	  r¾   rÂ   rs	  r·  r&   r§  r¸  s    r”   r‰  z+FallbackKernel.get_inputs_that_alias_outputV#  sÜ   € ÝØÔ�uœzÔ4µe´jÔ6TÐUñ
ô 
ð 	
ð 	
ð6°$Ô2Bð 6ð 6Ý�DÔ$Ñ%Ô%ð6ð 6ð 6ñ	
ô 	
ð 
õ ˜4Ô+­U¬ZÔ-KÑLÔLð	$à"¨$Ô*:×*?Ò*?Ñ*AÔ*AÐAÐAØÔ Ô(Ô3ð Bå& tÔ'7Ñ8Ô8ð Bð ˆIàÔ#Ð#r–   c                óD   — t          | j        ¦  «        dk    sJ ‚| j        S rÂ  )rÙ   rf
  r¸  s    r”   r…  z!FallbackKernel.get_mutation_namesk#  s'   € Ý�4Ô&Ñ'Ô'¨1Ò,Ð,Ð,Ð,ØÔ"Ð"r–   c           	     óî  ‡ ‡‡— t                                d‰                      ¦   «         ‰ j        ¦  «         t	          ‰ t
          ¦  «        sJ t          ‰ ¦  «        ¦   «         ‚‰                      ‰ j        ‰ j	        ¦  «        \  }Š‰  
                    |‰¦  «        }ˆˆ fd„‰ j        D ¦   «         }‰ j        }t          j        j        sg |¢|¢S t          dg ¦  «        }|                     ||‰¦  «        }dd
„Št	          |t"          j        j        j        ¦  «        r(|                     |d         |d         ¦  «        j        }n|j        j        }t1          |¦  «        dk    r0‰ j        r‰ j        n‰ j        }|d         j        } ‰||¦  «        g}	n!ˆfd„t9          |‰ j        ¦  «        D ¦   «         }	‰ j        €J ‚i }
t	          ‰ j        t"          j        j        ¦  «        rt?          j         ‰ j        ¦  «        �d|
d<   tC          ‰                      ¦   «         tE          j#        ‰ j         $                    ¦   «         ||	|
¬¦  «        ¬¦  «        }t          j%         &                    |¦  «         g |¢|¢S )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.c                ó,   •— g | ]} ‰j         |fi ‰¤Ž‘ŒS r©   r×
  )rÔ   rÐ  rÇ   r¹  s     €€r”   r×   z<FallbackKernel.export_extern_kernel_node.<locals>.<listcomp>�#  s>   ø€ ð 
ð 
ð 
àð "ˆDÔ! #Ð0Ð0¨Ð0Ð0ð
ð 
ð 
r–   NÚreturn_typeú1torch.TensorType | torch.ListType | torch.JitTyper  úIRNode | Sequence[IRNode]r�   úexport_schema.Argumentc                óâ  — t          | t          j        t          j        f¦  «        rÕ|}t          |t          t
          f¦  «        rt          |¦  «        dk    sJ ‚|d         }t          | t          j        ¦  «        r\t          |t          ¦  «        sJ ‚t          j	         
                    t          j        |                     ¦   «         ¬¦  «        ¬¦  «        S |�J ‚t          j	         
                    d¬¦  «        S t          | t          j        ¦  «        r‚t          |                      ¦   «         t          j        ¦  «        rVt          |t          ¦  «        sJ t!          |¦  «        ¦   «         ‚t          j	         
                    d„ |D ¦   «         ¬¦  «        S t          | t          j        ¦  «        ræt          |                      ¦   «         t          j        ¦  «        rº|€>t          j	         
                    t          j         
                    d¬¦  «        ¬	¦  «        S t          |t          ¦  «        sJ ‚t          j	         
                    t          j         
                    t          j        |                     ¦   «         ¬¦  «        ¬¦  «        ¬	¦  «        S t          | t          j        ¦  «        r t          j	         
                    |¬
¦  «        S t)          dt!          | ¦  «        › �¦  «        ‚)NrI   r   rÆ  )Ú	as_tensorT)Úas_nonec                ó\   — g | ])}t          j        |                     ¦   «         ¬ ¦  «        ‘Œ*S )rÆ  )Úexport_schemaÚTensorArgumentr˜  )rÔ   r  s     r”   r×   zZFallbackKernel.export_extern_kernel_node.<locals>.handle_single_output.<locals>.<listcomp>§#  s>   € ð  ð  ð  àõ &Ô4¸#¿,º,¹.¼.ÐIÑIÔIð ð  ð  r–   )Ú
as_tensors)Úas_optional_tensor)Úas_intzUnsupported return type )r‘   r-  Ú
TensorTypeÚNoneTyper°   r±   rÙ   r‰   rí  ry   r·  rî  r˜  r­  ÚgetElementTyper   r¾   ÚOptionalTypeÚOptionalTensorArgumentÚIntTypeÚRuntimeError)rå  r  r  s      r”   Úhandle_single_outputzFFallbackKernel.export_extern_kernel_node.<locals>.handle_single_output�#  sÏ  € õ ˜+­Ô(8½%¼.Ð'IÑJÔJð /Sà�Ý˜f¥t­U mÑ4Ô4ð $Ý˜v™;œ;¨!Ò+Ð+Ð+Ð+Ø  œ)�CÝ˜k­5Ô+;Ñ<Ô<ð GÝ% c­6Ñ2Ô2Ð2Ð2Ð2Ý(Ô1×8Ò8Ý"/Ô">ÀCÇLÂLÁNÄNÐ"SÑ"SÔ"Sð 9ñ ô ð ð ˜;˜;˜;Ý(Ô1×8Ò8ÀÐ8ÑFÔFÐFÝ˜K­¬Ñ8Ô8ð !S½ZØ×*Ò*Ñ,Ô,­eÔ.>ñ>ô >ð !Sõ " &­(Ñ3Ô3ÐAÐAµT¸&±\´\ÑAÔAÐ3å$Ô-×4Ò4ð ð  à#)ð ñ  ô  ð 5ñ ô ð õ ˜K­Ô);Ñ<Ô<ð SÅØ×*Ò*Ñ,Ô,­eÔ.>ñBô Bð Sð �>Ý(Ô1×8Ò8Ý+8Ô+O×+VÒ+VØ$(ð ,Wñ ,ô ,ð 9ñ ô ð õ & f­fÑ5Ô5Ð5Ð5Ð5Ý(Ô1×8Ò8Ý+8Ô+O×+VÒ+VÝ&3Ô&BØ%+§_¢_Ñ%6Ô%6ð'ñ 'ô 'ð ,Wñ ,ô ,ð 9ñ ô ð õ ˜K­¬Ñ7Ô7ð SÝ$Ô-×4Ò4¸FÐ4ÑCÔCÐCå"Ð#Q½dÀ;Ñ>OÔ>OÐ#QÐ#QÑRÔRÐRr–   r   rI   c                ó8   •— g | ]\  }} ‰|j         |¦  «        ‘ŒS r©   )rk	  )rÔ   Úreturn_schemar  rù  s      €r”   r×   z<FallbackKernel.export_extern_kernel_node.<locals>.<listcomp>Ñ#  sE   ø€ ð  ð  ð  ñ
 *�M 6ð	 %Ð$Ø!Ô+Øñô ð ð  ð  r–   Ú1Útorch_library_custom_op)r¢  rŠ  rÜ  ró  )rÂ   r¿   )rå  ræ  r  rç  r�   rè  )'rð  rã  r˜  rS	  r‘   rg  r¾   r°	  rŠ  rK	  r
  rQ	  rw   r"  Úaot_moder%   Úserialize_inputsr-  r¿	  Ú	torchbindÚCallTorchBindr¹  Úreturnsrs	  rÙ   rÜ  r'  rk	  rÝ   rq	  rr	  Ú
custom_opsÚ_maybe_get_opdefr“  rí  r>   rÂ   Úextern_kernel_nodesró  )r¹  rÆ   Úordered_kwargsr¢  Ú
serializerÚnamed_argumentsr  rÜ  rå  Úoutput_argumentsró  r¿   rù  rÇ   s   `           @@r”   Úexport_extern_kernel_nodez(FallbackKernel.export_extern_kernel_nodeo#  s²  øøø€ õ 	�	Š	ØBØ�MŠM‰OŒOØÔñ	
ô 	
ð 	
õ ˜$¥Ñ/Ô/Ð;Ð;µ°d±´Ñ;Ô;Ð/Ø×*Ò*¨4¬;¸Ô8JÑKÔK‰ˆˆfØ×*Ò*¨4°Ñ8Ô8ˆð
ð 
ð 
ð 
ð 
àÔ9ð
ñ 
ô 
ˆð Ô!ˆåŒwÔð 	,à+�TÐ+˜NÐ+Ð+å*¨4°Ñ4Ô4ˆ
Ø$×5Ò5°f¸dÀFÑKÔKˆð3	Sð 3	Sð 3	Sð 3	Sõj �f�eÔ5Ô?ÔMÑNÔNð 	-Ø—m’m D¨¤G¨T°!¬WÑ5Ô5Ô=ˆGˆGà”nÔ,ˆGÝˆw‰<Œ<˜1ÒÐð '+¤lÐM�d”l�l¸Ô8MˆGØ! !œ*Ô.ˆKØ 4Ð 4°[À'Ñ JÔ JÐKÐÐð ð  ð  ð  õ
 .1°¸$¼,Ñ-GÔ-Gð ñ  ô  Ðð ÔÐ+Ð+Ð+Øˆå�tÔ'­¬Ô)>Ñ?Ô?ð	6åÔ+¨DÔ,<Ñ=Ô=ÐIà25ˆHÐ.Ñ/åØ—’‘”ÝÔ#ØÔ'×,Ò,Ñ.Ô.Ø&Ø(Ø!ð	ñ ô ð
ñ 
ô 
ˆõ 	
Ô×$Ò$ TÑ*Ô*Ð*à'�Ð'˜Ð'Ð'r–   c                ó²  ‡ ‡‡— ‰ j         }|€J ‚|j        dk    r�t          |t          j        j        ¦  «        sJ t          |¦  «        ¦   «         ‚t          j        j	        r9ddl
m} t          |¦  «        |vr"t                               d|¦  «         d‰ _        nk|j        dk    r7t          |t          j        j        ¦  «        sJ t          |¦  «        ¦   «         ‚n)t          j        j	        r|t           j        j        v‰ _        t          j        j	        r®t          |t          j        j        ¦  «        r�‰ j        sˆdˆfd„Š‰                      ‰ j        ‰ j        ¦  «        \  }Št-          j        |ˆˆ fd„‰ j        D ¦   «         ¦  «        }t3          ˆfd„t5          ||j        j        ¦  «        D ¦   «         ¦  «        ‰ _        ‰                      |¦  «         ‰ j        rs‰                      ¦   «         }‰ j        €J ‚‰ j         €J ‚|                      ‰  !                    ¦   «         ‰ j        ˆ fd„‰ j         |‰ j"        r‰ j"        n‰ j#        ¦  «         nn| $                    ‰ ¦  «         t          ‰ j%        tL          ¦  «        r?‰  '                    |¦  «         ‰  (                    |¦  «         ‰  )                    |¦  «         ‰  *                    |¦  «         dS )rÔ
  Nr†	  r   rˆ	  zG%s is missing a c-shim implementation, using proxy executor as fallbackTÚ
_quantizedr0  útorch.JitTyper�   r    c                ó¦   •— t          | t          j        ¦  «        r ‰|                      ¦   «         ¦  «        S t          | t          j        ¦  «        S r�   )r‘   r-  rõ  rô  Ú
NumberType)r0  Ú	is_numbers    €r”   r  z)FallbackKernel.codegen.<locals>.is_number$  sG   ø€ Ý˜a¥Ô!3Ñ4Ô4ð 9Ø$˜9 Q×%5Ò%5Ñ%7Ô%7Ñ8Ô8Ð8Ý! !¥UÔ%5Ñ6Ô6Ð6r–   c              3  ó4   •K  — | ]} ‰j         |fi ‰¤ŽV — Œd S r�   r×
  )rÔ   r
  rÇ   r¹  s     €€r”   rø   z)FallbackKernel.codegen.<locals>.<genexpr>#$  sL   øè è € ð ð àð *�DÔ)¨!Ð6Ð6¨vÐ6Ð6ðð ð ð ð ð r–   c              3  óh   •K  — | ],\  }}t          |t          ¦  «        o ‰|j        ¦  «        V — Œ-d S r�   )r‘   Úcomplexrk	  )rÔ   rÂ  rs  r  s      €r”   rø   z)FallbackKernel.codegen.<locals>.<genexpr>($  sV   øè è € ð ,ð ,á�A�qõ ˜1�gÑ&Ô&ÐA¨9¨9°Q´[Ñ+AÔ+Að,ð ,ð ,ð ,ð ,ð ,r–   c                 óX   •— g ‰                       ¦   «         ¢‰                      ¦   «         ¢S r�   )r
  r
  r¸  s   €r”   rÎ  z(FallbackKernel.codegen.<locals>.<lambda>6$  s*   ø€ ÐF˜$×+Ò+Ñ-Ô-ÐF°×0CÒ0CÑ0EÔ0EÐF€ r–   )r0  r  r�   r    )+rS	  rŽ	  r‘   r-  rq	  rr	  r¾   rw   r"  r�	  r‘	  r‰	  rÃ   rð  r  r³  rJ   rY  Úcustom_ops_to_c_shimsr°	  rŠ  rK	  r  rÆ  rQ	  ra  rÝ   rs	  rt	  r�	  r
  rN	  Ú,generate_fallback_kernel_with_runtime_lookupr˜  rÜ  r'  Úgenerate_fallback_kernelrq  r
  r&
  r*
  r/
  rÂ  )	r¹  rx	  rè  r‰	  rÆ   Ú	args_iterÚexported_argsr  rÇ   s	   `      @@r”   r„	  zFallbackKernel.codegenï#  s/  øøø€ ð Ô!ˆØÐ!Ð!Ð!ØÔ˜vÒ%Ð%å˜f¥e¤jÔ&;Ñ<Ô<ÐJÐJ½dÀ6¹l¼lÑJÔJÐ<ÝŒwÔ"ð 
5ØLÐLÐLÐLÐLÐLå�v‘;”;Ð&;Ð;Ð;õ —K’KØaØñô ð ð 15�DÔ-øØÔ Ò-Ð-å˜f¥e¤jÔ&;Ñ<Ô<ÐJÐJ½dÀ6¹l¼lÑJÔJÐ<ÐJÝŒWÔ ð 	ð �fÔ1ÔGÐGð Ô%õ ŒGÔð	å˜6¥5¤:Ô#8Ñ9Ô9ð	ð Ô-ð	ð7ð 7ð 7ð 7ð 7ð 7ð  ×.Ò.¨t¬{¸DÔ<NÑOÔO‰LˆD�&õ "œØðð ð ð ð à!Ô?ðñ ô ñô ˆIõ ),ð ,ð ,ð ,ð ,å 	¨6¬>Ô+CÑDÔDð,ñ ,ô ,ñ )ô )ˆDÔ%ð
 	×Ò˜WÑ%Ô%Ð%ØÔ$ð 	6Ø ×:Ò:Ñ<Ô<ˆMØÔ*Ð6Ð6Ð6ØÔ#Ð/Ð/Ð/à×@Ò@Ø—’‘”ØÔ'ØFÐFÐFÐFØÔ Øà $¤ÐG�”�°$Ô2Gñô ð ð ð ×,Ò,¨TÑ2Ô2Ð2Ý˜$œ+¥vÑ.Ô.ð 6Ø×)Ò)¨'Ñ2Ô2Ð2Ø×.Ò.¨wÑ7Ô7Ð7Ø×,Ò,¨WÑ5Ô5Ð5à×)Ò)¨'Ñ2Ô2Ð2Ð2Ð2r–   r  r  rs  c           	     ó
  — d}	 |                       ¦   «         }n# t          $ r Y nw xY wt          | j        | j        t          |                      ¦   «         ¦  «        t          |                      ¦   «         ¦  «        |¬¦  «        S )NFr  )ru  rø  rs  r!  r   rd   r  r  )r  ru  s     r”   rh  zFallbackKernel.tensor_to_layoutE$  s‹   € àˆ	ð	Ø×(Ò(Ñ*Ô*ˆIˆIøÝð 	ð 	ð 	àˆDð	øøøõ ØŒMØŒLÝ% f§k¢k¡m¤mÑ4Ô4Ý% f§m¢m¡o¤oÑ6Ô6Øð
ñ 
ô 
ð 	
s   „ ™
&¥&rN  rÆ   c                óž  — ddl m} |j        }|                     |¦  «        }|�|j                             ¦   «         sdS ddlm}m} |j                             ¦   «         }	|	€dS ddl	m
}
  |
|||d¬¦  «        }|€t                               d	|¦  «         dS |\  }}|                     d
¦  «        }|€dS |	D ]“}|                     |¦  «        }t          j        |¦  «        \  }}|D ]b}t          |t           ¦  «        sŒ ||t"          j        ¦  «        r ||t"          j        |¦  «         ŒFt                               d||¦  «         ŒcŒ”dS )zARealize symm_mem args as comm buffers based on registry metadata.r   )Ú	singletonNrI   )Úcan_realize_as_comm_bufferÚrealize_as_comm_buffer)Únormalize_functionT)Únormalize_to_only_use_kwargsz:Failed to normalize arguments for symm_mem realization: %sr)  z8Failed to realize %s as a symmetric memory buffer for %s)Útorch._library.simple_registryr  r§   rå  Úsymm_mem_argsÚis_registeredÚcomm_loweringr  r  Útorch.fx.operator_schemasr  rð  r  rf	  r´	  r‘   rˆ   r#  r%  )r  rè  rÆ   rÇ   r  ÚqualnameÚentryr  r  r"  r  Ú
normalizedr  Úall_argsr)  r
  Ú	arg_valuerF  r0  s                      r”   Ú_maybe_realize_symm_mem_argsz+FallbackKernel._maybe_realize_symm_mem_argsU$  sÃ  € ð
 	=Ð<Ð<Ð<Ð<Ð<àÔ&ˆØ—’˜hÑ'Ô'ˆØˆ= Ô 3× AÒ AÑ CÔ Cˆ=ØˆFàUÐUÐUÐUÐUÐUÐUÐUàÔ+×/Ò/Ñ1Ô1ˆØÐ ØˆFà@Ð@Ð@Ð@Ð@Ð@à'Ð'Ø�D˜&¸tð
ñ 
ô 
ˆ
ð ÐÝ�KŠKØLØñô ð ð ˆFà ‰ˆˆ8à—\’\ ,Ñ/Ô/ˆ
ØÐØˆFà%ð 	ð 	ˆHØ Ÿš XÑ.Ô.ˆIÝÔ,¨YÑ7Ô7‰JˆG�QØð 
ð 
�Ý! !¥YÑ/Ô/ð ØØ-Ð-¨aµÔ1HÑIÔIð Ø*Ð*¨1­nÔ.EÀzÑRÔRÐRÐRå—K’KØRØ Ø ñô ð ð ð
ð	ð 	r–   c                ó$  ‡ ‡‡‡‡— t           j        f}||vr+t          t          d         t          j        j        ¦  «        }nt          ¦   «         }|5   ‰ j        |g|¢R i |¤Ž\  }}}}	}
ddd¦  «         n# 1 swxY w Y   t          |t          j        j        ¦  «        r ‰ j        |g|¢R i |¤Ž t          |t          j        j        ¦  «        �rt          j        j                             |¦  «        sât          |t          j        ¦  «        rÈddlm}m}m}m} d} ||j        ¦  «        r ||¦  «        }|€ ||¦  «        }|��t1           ||¦  «        ¦  «        dk    rtt3          |j        |j        g |j        ¢g |                     ¦   «         ¢¬¦  «        }t=          |t?          |¦  «        t?          |¦  «        |tA          |¦  «        |¬¦  «        S tC          d„ |D ¦   «         ¦  «        Š‰  "                    ||¦  «        Š‰sPt          |t          j#        j$        j%        ¦  «        s|t          j&        j'        j(        u rt          j        d¦  «        Št          |t          j        j        ¦  «        r^t          j        j                             |¦  «        s:t          j        j)        s)‰r'tT           +                    ||‰|||	||
‰¬	¦	  «	        }|�|S |€! ‰ tY          ‰¬
¦  «        ||||	||
¬¦  «        Šn,‰s
J d¦   «         ‚ ‰ t[          ‰¬
¦  «        ||||	||
¬¦  «        Šdˆ ˆˆˆˆfd„Š ‰|g ¦  «        }t          |t>          t\          f¦  «        r|‰_/        n2t          |t`          ¦  «        rt]          |¦  «        ‰_/        n|g‰_/        |S )z9Create an instance of FallbackKernel from an _OpOverloadsNr   )Ú_is_functionalÚget_out_arg_namesÚlookup_manual_out_variantÚto_out_variantrI   ©r!  r   r  r  )rq  rŠ  rK	  rÇ   rN	  rS	  c              3  ó4   K  — | ]}t          |¦  «        V — Œd S r�   )rW  r'	  s     r”   rø   z(FallbackKernel.create.<locals>.<genexpr>Ä$  s*   è è € Ð!KÐ!K¸¥,¨sÑ"3Ô"3Ð!KÐ!KÐ!KÐ!KÐ!KÐ!Kr–   r@  ©rW	  Úhas_unaligned_inputrú  ©rÇ   rW	  z"Not sure where to find device infor  r   rÛ  úlist[tuple[Any, int]]r�   c                óœ  •‡ ‡— t          ‰ t          t          f¦  «        r@ t          ‰ ¦  «        ˆˆˆ fd„t	          t          ‰ ¦  «        ¦  «        D ¦   «         ¦  «        S t          ‰ t          ¦  «        r"ˆˆˆ fd„‰                      ¦   «         D ¦   «         S t          ‰ t          j	        ¦  «        rlt          ‰                     ‰ ¦  «        ‰‰¦  «        }t          j        s‰st          ‰ ¦  «        s)t          j        j                             |j        ¦  «         |S t          ‰ t(          ¦  «        r‰ S t          ‰ t          j        ¦  «        r‰ j        j        S t          ‰ t          j        j        t4          f¦  «        st7          ‰ ¦  «        r t9          t;          ‰¬¦  «        ‰‰‰ ¦  «        S ‰ �J dt          ‰ ¦  «        › d�¦   «         ‚d S )Nc              3  ób   •K  — | ])} ‰‰|         ‰t          ‰¦  «        |fgz   ¦  «        V — Œ*d S r�   ©r¾   )rÔ   rÕ   Úgenerate_outputrÛ  r  s     €€€r”   rø   zAFallbackKernel.create.<locals>.generate_output.<locals>.<genexpr>ý$  sZ   øè è € ð $ð $àð $�O F¨1¤I¨w½4À¹<¼<ÈÐ:KÐ9LÑ/LÑMÔMð$ð $ð $ð $ð $ð $r–   c           
     óV   •— i | ]%\  }}| ‰|‰t          ‰¦  «        |fgz   ¦  «        “Œ&S r©   r9  )rÔ   rÐ  r"  r:  rÛ  r  s      €€€r”   r  zBFallbackKernel.create.<locals>.generate_output.<locals>.<dictcomp>%  sN   ø€ ð ð ð á ˜˜Sð ˜˜¨¨g½$¸v¹,¼,ÈÐ9LÐ8MÑ.MÑNÔNðð ð r–   rú  zFallbackKernel output type z is not supported)r‘   r°   r±   r¾   rÚ   rÙ   r²   rÎ  r-  re  rU  rh  rJ   Ú assume_unaligned_fallback_outputrt   rw   r"  rY  rá  rÂ   r’   rï	  r¿   rê  rž  rÚ  r*   r,   r½   r/  )r  rÛ  rá  r  r!  r:  r4  Úpackeds   `` €€€€€r”   r:  z.FallbackKernel.create.<locals>.generate_outputû$  s	  øøø€ Ý˜&¥4­ -Ñ0Ô0ð (Ø#•t˜F‘|”|ð $ð $ð $ð $ð $ð $å"¥3 v¡;¤;Ñ/Ô/ð$ñ $ô $ñ ô ð õ ˜F¥DÑ)Ô)ð #ðð ð ð ð ð à$*§L¢L¡N¤Nðñ ô ð õ ˜F¥E¤LÑ1Ô1ð Ý!Ø×(Ò(¨Ñ0Ô0ØØñô �õ Ô;ð<à*ð<õ -¨VÑ4Ô4ð<õ
 ”GÔ-×1Ò1°#´(Ñ;Ô;Ð;Ø�
Ý˜F¥CÑ(Ô(ð Ø�Ý˜F¥E¤LÑ1Ô1ð Ø”{Ô'Ð'ÝØ�œÔ.Õ0@ÐAñô ð å  Ñ(Ô(ðõ )Ý fÐ-Ñ-Ô-ØØØñ	ô ð ð �~�~ØQµ$°v±,´,ÐQÐQÐQñ &”~�~ð �tr–   )r  r   rÛ  r6  r�   r   )1r†	  Ú*_fused_moving_avg_obs_fq_helper_functionalr   r	   rw   r"  rœ  r
   rÓ	  r‘   r-  rq	  rr	  r+  rµ  r  Ú
is_builtinre  Útorch._library._out_variantr-  r.  r/  r0  rs	  rÙ   rs  r!  r   r`  r  rM
  r°   Ú_make_out_variant_kernel_namera  rØ  r¿	  r   r  ru   Úhigher_orderÚprintr�	  ÚExternKernelMultiOutÚ
try_creater/  r,  r±   rÜ  r²   )r  rè  rÆ   rÇ   Úfake_incorrect_kernelsÚcontextrÎ	  rÇ	  rÈ	  r°	  rW	  r-  r.  r/  r0  Úout_oprq  Ú
out_resultrÜ  r!  r:  r4  r=  s   `                  @@@@r”   r·  zFallbackKernel.createˆ$  s¨  øøøøø€ õ #'Ô"QÐ!SÐØÐ/Ð/Ð/ÝÕ1°$Ô7½¼Ô9JÑKÔKˆGˆGå!‘m”mˆGàð 	<ð 	<ð #�Ô" 6Ð;¨DÐ;Ð;Ð;°FÐ;Ð;ñØØØØØ!ð	<ð 	<ð 	<ñ 	<ô 	<ð 	<ð 	<ð 	<ð 	<ð 	<ð 	<øøøð 	<ð 	<ð 	<ð 	<õ �f�eœjÔ3Ñ4Ô4ð 	FØ,ˆCÔ,¨VÐE°dÐEÐEÐE¸fÐEÐEÐEõ �v�uœzÔ4Ñ5Ô5ñ 	å”NÔ(×3Ò3°FÑ;Ô;ð 	õ ˜>­5¬<Ñ8Ô8ð 	ð
ð ð ð ð ð ð ð ð ð ð ð ð ˆFØˆ~˜fœnÑ-Ô-ð 0Ø'˜¨Ñ/Ô/�Øˆ~Ø2Ð2°6Ñ:Ô:�àÐ!¥cÐ*;Ð*;¸FÑ*CÔ*CÑ&DÔ&DÈÒ&IÐ&IÝ$Ø)Ô0Ø(Ô.Ø0˜>Ô/Ð0Ø5˜^×2Ò2Ñ4Ô4Ð5ð	ñ ô �õ 'Ø!Ý Ñ,Ô,Ý"& Ñ"7Ô"7Ø!Ý'DÀVÑ'LÔ'LØ &ðñ ô ð õ "Ð!KÐ!K¸{Ð!KÑ!KÔ!KÑKÔKÐà—’ ¨nÑ=Ô=ˆð ð 	)Ý�v�uÔ6Ô@ÔNÑOÔOð	)à�œÔ/Ô5Ð5Ð5å”\ %Ñ(Ô(ˆFõ �v�uœzÔ4Ñ5Ô5ð	"å”NÔ(×3Ò3°FÑ;Ô;ð	"õ ”GÔ'ð	"ð ð		"õ .×8Ò8ØØØØØØØØ"3Ø$7ð 9ñ 
ô 
ˆJð Ð%Ø!Ð!àÐ!Ø�SÝ &Ð)Ñ)Ô)ØØØØØØ"3ðñ ô ˆFˆFð Ð?Ð?Ð?Ñ?Ô?�6Ø�SÝ!¨Ð0Ñ0Ô0ØØØØØØ"3ðñ ô ˆFð)	ð )	ð )	ð )	ð )	ð )	ð )	ð )	ð )	ð )	ðV "�/ .°"Ñ5Ô5ˆÝ�g¥¥e˜}Ñ-Ô-ð 	'Ø$ˆFŒNˆNÝ˜¥Ñ&Ô&ð 	'Ý" 7™^œ^ˆFŒNˆNà%˜YˆFŒNàˆs   ÁA6Á6A:Á=A:r�   ©rq  r<  rè  r…   rÇ	  r‹  r–  r2  r°	  rá  rÇ   rX	  rW	  r—  r�   r¬   r§  rI
  rÞ  rK
  )rÇ	  rÓ  rÎ	  r2  r�   r   r–  r®  )r  r  r�   rs  )rè  rN  rÆ   r   rÇ   r   r�   r¬   )rè  r…   rÆ   r   rÇ   r   r�   rg  )r¥   r¦   r§   r¯  r�  rl  rÂ  rØ  r
  r²  rØ  r*  r‰  r…  r
  r   r„	  rh  r3  r+  r·  r‡  rˆ  s   @r”   rg  rg  m"  sÄ  ø€ € € € € ðð ð )-ð@4ð HLð@4ð @4ð @4ð @4ð @4ð @4ð @4ð @4ðD
ð 
ð 
ð 
ð 
ð 
ð
ð 
ð 
ð 
ð
 ð  ð  ð  ðð ð ð ð0 ð#ð #ð #ñ „\ð#ðJ+ð +ð +ð +ð$ð $ð $ð $ð*#ð #ð #ð #ð~(ð ~(ð ~(ð@ ðS3ð S3ð S3ñ „XðS3ðj ð
ð 
ð 
ñ „\ð
ð ð0ð 0ð 0ñ „[ð0ðd ðeð eð eñ „[ðeð eð eð eð er–   rg  c                  ó<   ‡ — e Zd ZdZdd„Zdd„Zdddœdˆ fd„Zˆ xZS )ÚComplexViewz9View a complex number as two dtyped numbers or vice versar�   r    c                ó   — dS r8  r©   r¸  s    r”   rx  zComplexView.should_allocate5%  r:  r–   rì  c                ó.   — |                       d¦  «        gS r$  r  r¸  s    r”   r‰  z(ComplexView.get_inputs_that_alias_output8%  s   € à—’ Ñ"Ô"Ð#Ð#r–   Nr5  rq  r<  rè  r…   rÇ	  r‹  r–  r2  r°	  rá  rÇ   rX	  rW	  r—  r¬   c          	     óX   •— t          ¦   «                              |||||||¬¦  «         d S )Nr5  )r   r�  ©	r¹  rq  rè  rÇ	  r–  r°	  rÇ   rW	  r¢  s	           €r”   r�  zComplexView.__init__<%  sE   ø€ õ 	‰Œ×ÒØØØØØØØ/ð 	ñ 	
ô 	
ð 	
ð 	
ð 	
r–   r–  r®  rJ  )r¥   r¦   r§   r¯  rx  r‰  r�  r‡  rˆ  s   @r”   rL  rL  1%  s}   ø€ € € € € àCÐCðð ð ð ð$ð $ð $ð $ð )-ØGKð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
r–   rL  c                  ó   — e Zd ZdZdd„ZdS )	ÚMemoryCheckKernelz®
    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.
    rx	  r|   r�   r¬   c                ó  — |                      ¦   «          | j        \  }}}t          |¦  «        }t          |¦  «        }|r"|                     d¦  «         d|› d|› d|› d�}n	d|› d|› d�}|                     |¦  «         dS )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.
  rK	  r  r2  )r¹  rx	  Ú
alive_listÚ	dead_listÚis_final_stepÚ
alive_reprÚ	dead_reprÚcalls           r”   r„	  zMemoryCheckKernel.codegenY%  s¹   € ð 	×2Ò2Ñ4Ô4Ð4Ø/3Ô/AÑ,ˆ
�I˜}å˜*Ñ%Ô%ˆ
Ý˜‘O”Oˆ	Øð 	SØ×ÒØhñô ð ð r°*ÐqÐqÀiÐqÐqÐanÐqÐqÐqˆDˆDàR°*ÐRÐRÀiÐRÐRÐRˆDØ×Ò˜$ÑÔÐÐÐr–   NrI
  )r¥   r¦   r§   r¯  r„	  r©   r–   r”   rR  rR  R%  s2   € € € € € ðð ð ð  ð  ð  ð  ð  r–   rR  c                  ó"   — e Zd ZU ded<   dd„ZdS )r,  r2  r!  r�   r0  c                ó   — | j         S r�   rú  r¸  s    r”   r+  zMultiOutputLayout.get_deviceo%  rû  r–   Nr›  )r¥   r¦   r§   r¨   r+  r©   r–   r”   r,  r,  k%  s6   € € € € € € àÐÐÑðð ð ð ð ð r–   r,  c                  ór   ‡ — e Zd Zdd„Z	 ddˆ fd„Z ed ¦  «        	 ddd„¦   «         Zdd„Zdd„Zdd„Z	ˆ xZ
S )rU  rx	  r|   r�   r¬   c                ó–   — |                      | ¦  «         | j        s,|                      |¦  «         |                      |¦  «         d S d S r�   )Úcodegen_multi_outputÚ!skip_size_stride_alignment_checksr&
  r*
  rƒ	  s     r”   r„	  zMultiOutput.codegent%  sY   € Ø×$Ò$ TÑ*Ô*Ð*ØÔ5ð 	4Ø×%Ò% gÑ.Ô.Ð.Ø×*Ò*¨7Ñ3Ô3Ð3Ð3Ð3ð	4ð 	4r–   Frq  r<  r	  r‰   rÛ  úlist[tuple[Any, ...]]r_  r    c                óô   •— t          ¦   «                              d ||gd¦  «         t          j                             | ¦  «        | _        t          j                             | ¦  «         || _        || _        d S ra  )	r   r�  rw   r"  r"  rÂ   r#  rÛ  r_  )r¹  rq  r	  rÛ  r_  r¢  s        €r”   r�  zMultiOutput.__init__z%  sg   ø€ õ 	‰Œ×Ò˜˜v¨ w°Ñ3Ô3Ð3Ý”G×+Ò+¨DÑ1Ô1ˆŒ	Ý	Œ×"Ò" 4Ñ(Ô(Ð(ØˆŒØ1RˆÔ.Ð.Ð.r–   r�  rš   c                ó„   — | j         d         }t          |t          ¦  «        s
J |¦   «         ‚|                     |¦  «        S r$  )rŠ  r‘   r‰   rx  )r¹  r�  r¹  s      r”   rx  z MultiOutput.get_free_symbol_uses‡%  sA   € ð ”[ ”^ˆ
Ý˜*¥fÑ-Ô-Ð9Ð9¨zÑ9Ô9Ð-Ø×.Ò.¨}Ñ=Ô=Ð=r–   c                ór   — t          | j        ¦  «        dk    ot          | j        d         t          ¦  «        S )NrI   r   )rÙ   rŠ  r‘   rÚ  r¸  s    r”   rx  zMultiOutput.should_allocate�%  s2   € Ý�4”;ÑÔ 1Ò$ð 
Ý�t”{ 1”~Õ'8Ñ9Ô9ð	
r–   rì  c                ó$   — d„ | j         D ¦   «         S )Nc                óª   — g | ]P}t          |t          ¦  «        r9t          |                     ¦   «         ¦  «        d k    ¯<|                     ¦   «         ‘ŒQS r  )r‘   rg  rÙ   r‰  r˜  ©rÔ   r‘  s     r”   r×   z<MultiOutput.get_inputs_that_alias_output.<locals>.<listcomp>•%  s_   € ð 
ð 
ð 
àÝ˜#�~Ñ.Ô.ð
õ �C×4Ò4Ñ6Ô6Ñ7Ô7¸!Ò;Ð;ð �LŠL‰NŒNð <Ð;Ð;r–   )rŠ  r¸  s    r”   r‰  z(MultiOutput.get_inputs_that_alias_output”%  s%   € ð
ð 
à”{ð
ñ 
ô 
ð 	
r–   rj  c                ól  ‡‡— t          ¦   «         }| j        D ]P}t          |t          ¦  «        r9|                     t          j        |                     ¦   «         ¦  «        ¦  «         ŒQ|                      ¦   «         Š|                      ¦   «          	                    ¦   «         Šd
ˆˆfd„}|  
                    ¦   «         }t          j         p|d u pt          |j        ¦  «         }t          j        ||                      ¦   «         d|¬¦  «        }t          j        ||j        t          ¦   «         ¬	¦  «        S )NrÐ   r2  r°  r�   r   c                ól   •— t          |¦  «        dk    sJ ‚t          j        ‰ ‰| ¦  «        d¦  «        S r<  r>  r?  s     €€r”   r5  z*MultiOutput.get_read_writes.<locals>.dummy«%  r@  r–   r©   r.  r®  r6  )r@   rŠ  r‘   r‰   rá  rK   r½  r˜  r'  rB  r+  rJ   rñ  rn   r¾   rT   r%  r±  r¯  )	r¹  rp  r‘  r5  r!  Úshould_normalizeÚwrite_rwrD  rÂ   s	          @@r”   rl  zMultiOutput.get_read_writesœ%  s>  øø€ õ /9©l¬lˆØ”;ð 	@ð 	@ˆCÝ˜#�vÑ&Ô&ð @Ø—	’	�,Ô.¨s¯|ª|©~¬~Ñ>Ô>Ñ?Ô?Ð?øð �}Š}‰ŒˆØ—/’/Ñ#Ô#×0Ò0Ñ2Ô2ˆð	;ð 	;ð 	;ð 	;ð 	;ð 	;ð 	;ð —’Ñ"Ô"ˆåÔ1Ð1ð 'Ø˜ˆ~ð'å˜&œ+Ñ&Ô&Ð&ð 	õ
  Ô3Ø�4—=’=‘?”? BÐ2Bð
ñ 
ô 
ˆõ Ô&ØØ”?Ý"™œð
ñ 
ô 
ð 	
r–   rI
  r¢  )
rq  r<  r	  r‰   rÛ  r`  r_  r    r�   r¬   r«  r–  r®  r§  )r¥   r¦   r§   r„	  r�  rb   rx  rx  r‰  rl  r‡  rˆ  s   @r”   rU  rU  s%  sÒ   ø€ € € € € ð4ð 4ð 4ð 4ð 38ðSð Sð Sð Sð Sð Sð Sð Ð˜MÑ*Ô*à$)ð>ð >ð >ð >ñ +Ô*ð>ð
ð 
ð 
ð 
ð

ð 
ð 
ð 
ð 
ð  
ð  
ð  
ð  
ð  
ð  
ð  
r–   rU  c                  óL   ‡ — e Zd ZdZdˆ fd„Zedd„¦   «         Zdd„Zdd„Zˆ xZ	S )r½   zMultiOutput for opaque objects.rq  r<  r	  r‰   rÛ  r`  Úopaque_valuer   r�   r¬   c                ó`   •— t          ¦   «                              |||d¬¦  «         || _        d S )NT©r_  )r   r�  r½	  )r¹  rq  r	  rÛ  rl  r¢  s        €r”   r�  zOpaqueMultiOutput.__init__Â%  s5   ø€ õ 	‰Œ×Ò˜ ¨ÐSWÐÑXÔXÐXØ$0ˆÔ!Ð!Ð!r–   r   c                ó    — t          d¦  «        ‚)NzOpaqueMultiOutput has no dtype)rø	  r¸  s    r”   r   zOpaqueMultiOutput.dtypeÌ%  s   € åÐ=Ñ>Ô>Ð>r–   c                ó   — | S r�   r©   r¸  s    r”   rº  z#OpaqueMultiOutput.wrap_for_loweringÐ%  r6  r–   rj  c                ó|  — t          ¦   «         }| j        D ]P}t          |t          ¦  «        r9|                     t          j        |                     ¦   «         ¦  «        ¦  «         ŒQt          t          j        |                      ¦   «         ¦  «        g¦  «        }t          j        ||t          ¦   «         ¬¦  «        S )Nr®  )	r@   rŠ  r‘   r‰   rá  rK   r½  r˜  r±  )r¹  rp  r‘  r¯  s       r”   rl  z!OpaqueMultiOutput.get_read_writesÓ%  s¨   € Ý.8©l¬lˆØ”;ð 	@ð 	@ˆCÝ˜#�vÑ&Ô&ð @Ø—	’	�,Ô.¨s¯|ª|©~¬~Ñ>Ô>Ñ?Ô?Ð?øÝ/9ÝÔ! $§-¢-¡/¤/Ñ2Ô2Ð3ñ0
ô 0
ˆõ Ô&ØØÝ"™œð
ñ 
ô 
ð 	
r–   )
rq  r<  r	  r‰   rÛ  r`  rl  r   r�   r¬   )r�   r   )r�   r½   r§  )
r¥   r¦   r§   r¯  r�  rµ  r   rº  rl  r‡  rˆ  s   @r”   r½   r½   ¿%  s‹   ø€ € € € € Ø)Ð)ð1ð 1ð 1ð 1ð 1ð 1ð ð?ð ?ð ?ñ „Xð?ðð ð ð ð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
r–   r½   c                  ó"   — e Zd ZdZd
d„Zdd„Zd	S )ÚAllocatingMultiOutputzñMultiOutput with Inductor-controlled allocation for .out() variant ops.

    Overrides should_allocate()=True so Inductor allocates the output buffer,
    and skips tuple-indexing codegen since .out() writes directly into these buffers.
    r�   r    c                ó   — dS r£  r©   r¸  s    r”   rx  z%AllocatingMultiOutput.should_allocateé%  r×  r–   rx	  r|   r¬   c                ól   — | j         s,|                      |¦  «         |                      |¦  «         d S d S r�   )r_  r&
  r*
  rƒ	  s     r”   r„	  zAllocatingMultiOutput.codegenì%  sE   € ØÔ5ð 	4Ø×%Ò% gÑ.Ô.Ð.Ø×*Ò*¨7Ñ3Ô3Ð3Ð3Ð3ð	4ð 	4r–   Nr–  rI
  )r¥   r¦   r§   r¯  rx  r„	  r©   r–   r”   rs  rs  â%  sF   € € € € € ðð ðð ð ð ð4ð 4ð 4ð 4ð 4ð 4r–   rs  rH  rN  c                ó~   — | j         }| j        j                             d¦  «        d         }| j        }d|› d|› d|› �S )z8Build fully-qualified kernel name for an out-variant op.z::rI   z
torch.ops.r‡	  )rŽ	  rs	  rÂ   rô  r�	  )rH  Únsr
  r   s       r”   rA  rA  ò%  sM   € à	Ô	€BØŒnÔ!×'Ò'¨Ñ-Ô-¨aÔ0€GØÔ#€HØ1˜Ð1Ð1˜WÐ1Ð1 xÐ1Ð1Ð1r–   c                  ób   ‡ — e Zd ZU dZded<   ded<   d%ˆ fd„Zd&d„Zedddœd'd$„¦   «         Zˆ xZ	S )(rD  zÁMulti-output .out() variant lowering.

    Subclass of FallbackKernel that emits .out() calls with pre-allocated
    output buffers. Uses AllocatingMultiOutput child nodes for each output.
    r¢   Úout_arg_nameszlist[AllocatingMultiOutput]Úout_variant_output_nodesrÆ   r   rH  rN  rÇ   r�   r¬   c               óŒ   •—  t          ¦   «         j        |i |¤Ž || _        g | _        t	          |¦  «        | _        || _        d S r�   )r   r�  ry  rz  rA  rN	  rS	  )r¹  rH  ry  rÆ   rÇ   r¢  s        €r”   r�  zExternKernelMultiOut.__init__&  sO   ø€ ð 	�‰ŒÔ˜$Ð) &Ð)Ð)Ð)Ø*ˆÔØ(*ˆÔ%Ý"?ÀÑ"GÔ"GˆÔØ!ˆÔÐÐr–   rx	  r|   c                óZ   — |                       |¦  «         |                     | ¦  «         d S r�   )r�	  Ú generate_extern_kernel_multi_outrƒ	  s     r”   r„	  zExternKernelMultiOut.codegen&  s0   € Ø×Ò˜WÑ%Ô%Ð%Ø×0Ò0°Ñ6Ô6Ð6Ð6Ð6r–   NFr3  rè  rÎ	  r!  r2  rÇ	  r‹  rÈ	  r2  r°	  rá  rX	  rW	  r—  r4  r    ú&Sequence[AllocatingMultiOutput] | Nonec               ó‚  — ddl m}
m}m}  |
|j        ¦  «        sdS t          |t          t          f¦  «        sdS  ||¦  «        }|€dS  ||¦  «        }t          d„ |D ¦   «         ¦  «        sdS t          |¦  «        t          |¦  «        k    rdS  | t          |¬¦  «        ||||||||¬¦	  «	        }g }t          |¦  «        D ]º\  }}t          |j        |j        g |j        ¢g |                     ¦   «         ¢¬¦  «        }t#          ||t%          |¦  «        |fg¬¦  «        }t&          j        s|	st+          |¦  «        s)t,          j        j                             |j        ¦  «         |                     |¦  «         Œ»||_        ||_        t          |t          ¦  «        rt          |¦  «        S t          |¦  «        S )	zGCreate an ExternKernelMultiOut if the op has a matching .out() variant.r   )r-  r.  r0  Nc              3  óJ   K  — | ]}t          |t          j        ¦  «        V — Œd S r�   )r‘   r-  re  r«
  s     r”   rø   z2ExternKernelMultiOut.try_create.<locals>.<genexpr>5&  s.   è è € ÐGÐG°1•:˜a¥¤Ñ.Ô.ÐGÐGÐGÐGÐGÐGr–   rú  )rÇ   rW	  rH  ry  r1  )rq  r	  rÛ  )r@  r-  r.  r0  rs	  r‘   r±   r°   rù   rÙ   r,  r  rs  r!  r   r`  r  rs  r¾   rJ   r<  rt   rw   r"  rY  rá  rÂ   ró  rz  rÜ  )r  rè  rÎ	  r!  rÇ	  rÈ	  r°	  rÇ   rW	  r4  r-  r.  r0  rH  ry  r=  rÜ  rÕ   Ú
tensor_outrq  Ú	multi_outs                        r”   rE  zExternKernelMultiOut.try_create&  s5  € ð	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð ˆ~˜fœnÑ-Ô-ð 	Ø�4å˜.­5µ$¨-Ñ8Ô8ð 	Ø�4à� Ñ'Ô'ˆØˆ>Ø�4à)Ð)¨&Ñ1Ô1ˆÝÐGÐG¸ÐGÑGÔGÑGÔGð 	Ø�4Ýˆ~ÑÔ¥# mÑ"4Ô"4Ò4Ð4Ø�4à�Ý VÐ,Ñ,Ô,ØØØØØØ/ØØ'ð

ñ 

ô 

ˆð 02ˆÝ& ~Ñ6Ô6ð 	&ð 	&‰MˆAˆzÝ Ø!Ô(Ø Ô&Ø(�zÔ'Ð(Ø-˜×*Ò*Ñ,Ô,Ð-ð	ñ ô ˆFõ .ØØÝ˜~Ñ.Ô.°Ð2Ð3ðñ ô ˆIõ Ô7ð>à&ð>õ )¨Ñ4Ô4ð>õ
 ”Ô)×-Ò-¨i¬nÑ=Ô=Ð=Ø�NŠN˜9Ñ%Ô%Ð%Ð%à*1ˆÔ'Ø ˆŒå�n¥eÑ,Ô,ð 	"Ý˜‘>”>Ð!Ý�G‰}Œ}Ðr–   )
rÆ   r   rH  rN  ry  r¢   rÇ   r   r�   r¬   rI
  )rè  rN  rÎ	  r   r!  r2  rÇ	  r‹  rÈ	  r2  r°	  rá  rÇ   rX	  rW	  r—  r4  r    r�   r~  )
r¥   r¦   r§   r¯  r¨   r�  r„	  r3  rE  r‡  rˆ  s   @r”   rD  rD  ú%  sµ   ø€ € € € € € ðð ð ÐÐÑØ9Ð9Ð9Ñ9ð"ð "ð "ð "ð "ð "ð7ð 7ð 7ð 7ð ð HLØ$)ðJð Jð Jð Jð Jñ „[ðJð Jð Jð Jð Jr–   rD  c                  ó²  — e Zd ZU dZded<   dRd„ZdSd„ZdTd
„ZdUd„ZdVd„Z	dWd„Z
dXdYd„ZddœdZd„Zd[d„Zd\d„ZdRd„Zd[d„Z	 d]d^d$„Zd_d%„Zd`d'„Z	 d]dad)„Zdbd+„Zdcd-„Zddd.„Zded0„Zdfd2„Zdgd4„ZdRd5„ZdRd6„Zdhd9„Zdid;„ZdWd<„Zdid=„Z dfd>„Z! e"d ¦  «        	 d]djdA„¦   «         Z#dkdC„Z$dldE„Z%dXdmdH„Z&e'dndJ„¦   «         Z(dodL„Z)dndM„Z*dgdN„Z+e'dpdP„¦   «         Z,dWdQ„Z-e-Z.dS )qrC  zC
    TensorBox / StorageBox allow in-place mutation of Tensors
    r‰   rp  r�   r    c                ó4   — | j                              ¦   «         S r�   ry  r¸  s    r”   r9  z!MutableBox.has_exceeded_max_readsm&  rz  r–   r0  c                ó4   — | j                              ¦   «         S r�   rm  r¸  s    r”   r+  zMutableBox.get_devicep&  rk  r–   r;  c                ó4   — | j                              ¦   «         S r�   r@  r¸  s    r”   r>  zMutableBox.make_loaders&  ó   € ØŒy×$Ò$Ñ&Ô&Ð&r–   r@  c                ó4   — | j                              ¦   «         S r�   )rp  rB  r¸  s    r”   rB  zMutableBox.make_indexerv&  ó   € ØŒy×%Ò%Ñ'Ô'Ð'r–   r^  c                ó4   — | j                              ¦   «         S r�   )rp  rT  r¸  s    r”   rT  zMutableBox.get_stridey&  rk  r–   rÃ   c                ó4   — | j                              ¦   «         S r�   rp  r¸  s    r”   r˜  zMutableBox.get_name|&  rq  r–   NrK  r¥  c                ó6   — | j                              |¦  «        S r�   )rp  rN  rM  s     r”   rN  zMutableBox.has_large_inner_fn&  s   € ØŒy×+Ò+¨IÑ6Ô6Ð6r–   TrO  rQ  r’   rP  r¬   c               ó:   — | j                              ||¬¦  «        S ru  rv  rS  s      r”   rT  zMutableBox.mark_reuse‚&  rw  r–   c                ó4   — | j                              ¦   «         S r�   r  r¸  s    r”   rV  zMutableBox.realize_hint…&  r‰  r–   c                ó4   — | j                              ¦   «         S r�   )rp  r•  r¸  s    r”   r•  zMutableBox.unwrap_viewˆ&  r‡  r–   c                ó4   — | j                              ¦   «         S r�   )rp  rJ  r¸  s    r”   rJ  zMutableBox.is_input_buffer‹&  ó   € ØŒy×(Ò(Ñ*Ô*Ð*r–   c                ó4   — | j                              ¦   «         S r�   )rp  rZ  r¸  s    r”   rZ  zMutableBox.freeze_layoutŽ&  s   € ØŒy×&Ò&Ñ(Ô(Ð(r–   FrÌ   rÍ   r[  c                ó8   — | j                              ||¦  «        S r�   )rp  r^  r]  s      r”   r^  z*MutableBox.freeze_layout_with_stride_order‘&  s   € ð Œy×8Ò8¸ÀÑNÔNÐNr–   c                ó6   — | j                              |¦  «        S r�   )rp  rb  ra  s     r”   rb  z(MutableBox.freeze_layout_with_fill_order–&  s   € ØŒy×6Ò6°uÑ=Ô=Ð=r–   r  c                ó6   — | j                              |¦  «        S r�   )rp  re  rd  s     r”   re  z(MutableBox.freeze_layout_with_same_order™&  s   € ØŒy×6Ò6°vÑ>Ô>Ð>r–   rf  c                ó8   — | j                              ||¦  «        S r�   )rp  ri  rh  s      r”   ri  z+MutableBox.freeze_layout_with_exact_stridesœ&  s   € ð Œy×9Ò9¸-ÈÑWÔWÐWr–   rj  c                ó4   — | j                              ¦   «         S r�   )rp  rl  r¸  s    r”   rl  zMutableBox.get_read_writes¡&  r‘  r–   rm  c                ó4   — | j                              ¦   «         S r�   r«  r¸  s    r”   rË  zMutableBox.get_reads¤&  r…  r–   c                ó4   — | j                              ¦   «         S r�   r©  r¸  s    r”   rs  zMutableBox.num_reads§&  r…  r–   rƒ   c                ó4   — | j                              ¦   «         S r�   r�  r¸  s    r”   ru  zMutableBox.get_storage_numelª&  r‚  r–   r8  c                ó4   — | j                              ¦   «         S r�   r  r¸  s    r”   rz  zMutableBox.get_reduction_type­&  r  r–   r{  c                ó4   — | j                              ¦   «         S r�   r  r¸  s    r”   r}  zMutableBox.get_reduction_size°&  r  r–   c                ó4   — | j                              ¦   «         S r�   r„  r¸  s    r”   r  zMutableBox.is_extern³&  r…  r–   c                ó4   — | j                              ¦   «         S r�   )rp  r�  r¸  s    r”   r�  zMutableBox.is_no_op¶&  rq  r–   r!  r2  c                ó6   — | j                              |¦  «        S r�   r  r5  s     r”   rƒ  zMutableBox.constant_to_device¹&  s   € ØŒy×+Ò+¨FÑ3Ô3Ð3r–   rì  c                ó4   — | j                              ¦   «         S r�   )rp  r…  r¸  s    r”   r…  zMutableBox.get_mutation_names¼&  r  r–   c                ó4   — | j                              ¦   «         S r�   )rp  r‡  r¸  s    r”   r‡  zMutableBox.get_operation_name¿&  r  r–   c                ó4   — | j                              ¦   «         S r�   )rp  r‰  r¸  s    r”   r‰  z'MutableBox.get_inputs_that_alias_outputÂ&  s   € ØŒy×5Ò5Ñ7Ô7Ð7r–   c                ó4   — | j                              ¦   «         S r�   r|  r¸  s    r”   r*  zMutableBox.realizeÅ&  r}  r–   r�  rš   c                ó6   — | j                              |¦  «        S r�   r]  rw  s     r”   rx  zMutableBox.get_free_symbol_usesÈ&  s   € ð Œy×-Ò-¨mÑ<Ô<Ð<r–   rÃ  c                ó4   — | j                              ¦   «         S r�   r‰  r¸  s    r”   rÌ  zMutableBox.get_read_namesÎ&  rŠ  r–   rÔ  c                ó4   — | j                              ¦   «         S r�   )rp  rÖ  r¸  s    r”   rÖ  zMutableBox.get_defining_opÑ&  r‘  r–   r+  r,  c                ó6   — | j                              |¦  «        S r�   )rp  r/  r.  s     r”   r/  zMutableBox.codegen_referenceÔ&  s   € ØŒy×*Ò*¨6Ñ2Ô2Ð2r–   r<  c                ó4   — | j                              ¦   «         S r�   ©rp  r  r¸  s    r”   rq  zMutableBox.layout×&  s   € ð Œy×(Ò(Ñ*Ô*Ð*r–   r
  c                ó4   — | j                              ¦   «         S r�   rj  r¸  s    r”   r'  zMutableBox.get_layoutÜ&  rk  r–   c                ó4   — | j                              ¦   «         S r�   r©  r¸  s    r”   r  zMutableBox.get_output_specß&  r‘  r–   c                ó4   — | j                              ¦   «         S r�   r=  r¸  s    r”   r%  zMutableBox.get_sizeâ&  rq  r–   r  c                ó   — | j         j        S r�   )rp  r   r¸  s    r”   r   zMutableBox.dtypeå&  s   € àŒyŒÐr–   c                ó^  — t          | j        t          ¦  «        r@t          | ¦  «        j        › dt          | j        ¦  «        j        › d�}d}| j        j        }n t          | ¦  «        j        › d�}| j        }d}|t          t          |¦  «        ¦  «        |g}d                     |¦  «        S )Nrû  z))r;  rñ  )r‘   rp  rC  r¾   r¥   rý  rÃ   rþ  )r¹  Úline0Úendlrd  r÷  s        r”   r÷  zMutableBox.__str__é&  s§   € Ý�d”i¥Ñ,Ô,ð 	Ý˜D‘z”zÔ*ÐHÐH­T°$´)©_¬_Ô-EÐHÐHÐHˆEØˆDØ”I”NˆEˆEå˜D‘z”zÔ*Ð-Ð-Ð-ˆEØ”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¥   r¦   r§   r¯  r¨   r9  r+  r>  rB  rT  r˜  rN  rT  rV  r•  rJ  rZ  r^  rb  re  ri  rl  rË  rs  ru  rz  r}  r  r�  rƒ  r…  r‡  r‰  r*  rb   rx  rÌ  rÖ  r/  rµ  rq  r'  r  r%  r   r÷  r2  r©   r–   r”   rC  rC  e&  s±  € € € € € € ðð ð €L€L�Lð2ð 2ð 2ð 2ð&ð &ð &ð &ð'ð 'ð 'ð 'ð(ð (ð (ð (ð&ð &ð &ð &ð$ð $ð $ð $ð7ð 7ð 7ð 7ð 7ð =Að Dð Dð Dð Dð Dð Dð(ð (ð (ð (ð'ð 'ð 'ð 'ð+ð +ð +ð +ð)ð )ð )ð )ð ;@ðOð Oð Oð Oð Oð
>ð >ð >ð >ð?ð ?ð ?ð ?ð HMðXð Xð Xð Xð Xð
+ð +ð +ð +ð%ð %ð %ð %ð%ð %ð %ð %ð-ð -ð -ð -ð.ð .ð .ð .ð.ð .ð .ð .ð%ð %ð %ð %ð$ð $ð $ð $ð4ð 4ð 4ð 4ð.ð .ð .ð .ð.ð .ð .ð .ð8ð 8ð 8ð 8ð#ð #ð #ð #ð Ð˜LÑ)Ô)à$)ð=ð =ð =ð =ñ *Ô)ð=ð
*ð *ð *ð *ð+ð +ð +ð +ð3ð 3ð 3ð 3ð 3ð ð+ð +ð +ñ „Xð+ð&ð &ð &ð &ð+ð +ð +ð +ð$ð $ð $ð $ð ðð ð ñ „Xðð ð  ð  ð  ð" €H€H€Hr–   rC  c                  óv   — e Zd Zeed	d„¦   «         ¦   «         Zeed
d„¦   «         ¦   «         Zedd„¦   «         ZdS )rˆ   rp  r¼   r�   c                ó   — d S r�   r©   ©rp  s    r”   r·  zTensorBox.createþ&  s   € àFIÀcr–   r‰   c                ó   — d S r�   r©   r³  s    r”   r·  zTensorBox.create'  s   € à+.¨3r–   c                óh   — t          | t          ¦  «        r| S t          t          | ¦  «        ¦  «        S r�   )r‘   r¼   rˆ   r–  r³  s    r”   r·  zTensorBox.create'  s0   € å�dÕ1Ñ2Ô2ð 	ØˆKÝ� DÑ)Ô)Ñ*Ô*Ð*r–   N)rp  r¼   r�   r¼   )rp  r‰   r�   rˆ   )rp  r‰   )r¥   r¦   r§   r   r²  r·  r©   r–   r”   rˆ   rˆ   ý&  sr   € € € € € ØØØIÐIÐIñ „\ñ „XàIØØØ.Ð.Ð.ñ „\ñ „Xà.àð+ð +ð +ñ „\ð+ð +ð +r–   c                  óf   — e Zd ZdZdd„Zdd„Zdd„Zdd	„Zdd„Zdd„Z	ddœdd„Z
ddœdd„Zdd„ZdS )r–  z7
    StorageBox allow in-place mutation of Tensors
    r�   r    c                óœ   — t          | j        t          t          f¦  «        r*| j                             ¦   «         t
          j        j        v S dS r8  )r‘   rp  r±  rv  r˜  rw   r"  rI  r¸  s    r”   rJ  zStorageBox.is_input_buffer'  s?   € Ý�d”i¥+­Ð!?Ñ@Ô@ð 	@Ø”9×%Ò%Ñ'Ô'­1¬7Ô+?Ð?Ð?Øˆur–   c                óŠ   — t          | j        t          ¦  «        o)| j                             ¦   «         t          j        j        v S r�   )r‘   rp  rS  r˜  rw   r"  rº	  r¸  s    r”   r‡  zStorageBox.is_module_buffer'  s6   € å�t”y¥>Ñ3Ô3ð :Ø”	×"Ò"Ñ$Ô$­¬Ô(9Ð9ð	
r–   r8  c           	     óœ  — t                                | j        ¦  «        r| j                             ¦   «         S t	          | j        t
          t          t          t          f¦  «        sJ t          | j        ¦  «        ¦   «         ‚| j         
                    ¦   «         }| j                             ¦   «         }| j                             ¦   «         }|€J ‚t          d t          || j                             ¦   «         | j                             ¦   «         d¬¦  «        | j        ¬¦  «        | _        t"          j                             | j        ¦  «        | j        _        t"          j                             | j        ¦  «         | j        | j        _        || j        _        || j        _        | j        j        j        | j        _        | j        j        S )NF)r!  r   r  ru  rÇ  )r‰   r´  rp  r˜  r‘   r=  r™  rÞ  r  r¾   rÒ  rÏ  r+  r¯  r(  r*  r%  rw   r"  r"  rÂ   r#  rŸ  r£  r¡  r¦  )r¹  r£  r¡  r!  s       r”   r*  zStorageBox.realize'  s�  € Ý×"Ò" 4¤9Ñ-Ô-ð 	(Ø”9×%Ò%Ñ'Ô'Ð'å˜$œ)¥iµ½DÅ$Ð%GÑHÔHð 	
ð 	
Í$ØŒIñK
ô K
ñ 	
ô 	
ÐHð ”i×/Ò/Ñ1Ô1ˆØ”I×+Ò+Ñ-Ô-ˆ	Ø”×%Ò%Ñ'Ô'ˆØÐ!Ð!Ð!å"ØÝ!ØØ”i×)Ò)Ñ+Ô+Ø”Y×'Ò'Ñ)Ô)Øð	ñ ô ð ”ð	
ñ 	
ô 	
ˆŒ	õ œ×0Ò0°´Ñ;Ô;ˆŒ	ŒÝ	Œ×"Ò" 4¤9Ñ-Ô-Ð-Ø œLˆŒ	ÔØ +ˆŒ	ÔØ'ˆŒ	ÔØ#œyœ~Ô8ˆŒ	ÔØŒyŒ~Ðr–   r¬   c                ó¼   — t          | j        t          t          f¦  «        r8| j                             ¦   «         j        dk    r|                      ¦   «          dS dS dS )zL
        Called on buffers we expect to be forced to realize later.
        rI   N)r‘   rp  r=  r™  r  Únontrivial_read_countr*  r¸  s    r”   rV  zStorageBox.realize_hint:'  sZ   € õ
 �t”y¥9­iÐ"8Ñ9Ô9ð	à”	×*Ò*Ñ,Ô,ÔBÀQÒFÐFà�LŠL‰NŒNˆNˆNˆNð		ð 	àFÐFr–   rK  r’   c                óÜ   ‡— ddl mŠ ˆfd„|                      ¦   «         D ¦   «         }|sdS t          |¦  «        }t	          |¦  «        }t          |¦  «        }||k    o||z  dk    o||k    S )Nr   )Úis_nonfreeable_buffersc                ód   •— g | ],} ‰|¦  «        °t           j                             |¦  «        ‘Œ-S r©   )rw   r"  Úget_dep_size_hint)rÔ   rÈ  r½  s     €r”   r×   zCStorageBox.has_accumulated_enough_reads_by_size.<locals>.<listcomp>G'  sJ   ø€ ð 
ð 
ð 
àØ)Ð)¨#Ñ.Ô.ð
ÝŒG×%Ò% cÑ*Ô*ð
ð 
ð 
r–   Frí   )r 	  r½  rË  rd  r  rb  )r¹  rK  Úsize_of_readsÚ
total_sizeÚmax_sizeÚmin_sizer½  s         @r”   Ú$has_accumulated_enough_reads_by_sizez/StorageBox.has_accumulated_enough_reads_by_sizeD'  s©   ø€ Ø@Ð@Ð@Ð@Ð@Ð@ð
ð 
ð 
ð 
à—~’~Ñ'Ô'ð
ñ 
ô 
ˆð
 ð 	Ø�5Ý˜Ñ'Ô'ˆ
Ý�}Ñ%Ô%ˆÝ�}Ñ%Ô%ˆà˜)Ò#ð %Ø˜XÑ%¨Ò*ð%à˜HÒ$ð	
r–   c                óŽ  — t           j        }|€.t          | j        ¦  «        rt           j        }n$t           j        }nt          |t          ¦  «        sJ ‚t          | j        t          ¦  «        oX|  	                    ¦   «         |k    p@|  
                    ¦   «         p,t           j        d uo|                      t           j        ¦  «        S r�   )rJ   Úrealize_acc_reads_thresholdrK  rp  Úrealize_cpu_acc_reads_thresholdÚ$_realize_acc_reads_threshold_defaultr‘   r’   r=  rs  rN  Ú realize_acc_reads_size_thresholdrÄ  )r¹  rÆ  s     r”   r9  z!StorageBox.has_exceeded_max_readsW'  sÈ   € Ý&,Ô&HÐ#Ø&Ð.Ý�d”iÑ Ô ð Ý.4Ô.TÐ+Ð+õ Ô?ð ,Ð+õ Ð9½3Ñ?Ô?Ð?Ð?Ð?Ý˜$œ)¥YÑ/Ô/ð 	
Ø�NŠNÑÔÐ:Ò:ð Ø×&Ò&Ñ(Ô(ðõ Ô7¸tÐCð Ø×=Ò=ÝÔ;ñô ð		
r–   TrO  rQ  rP  c               óf  ‡— |dk    r©t          | j        t          t          f¦  «        rˆt	          | j        ¦  «        r:| j                             ¦   «         Šg d¢}t          ˆfd„|D ¦   «         ¦  «        rdS |                      ¦   «         rdS |o!|                      ¦   «         t          j
        k    S dS )zj
        A heuristic to decide if we should realize a tensor
        that is used multiple times.
        rI   )Úexprð  Úlog10Úlog1pÚlog2ÚsigmoidÚtanhc              3  ó*   •K  — | ]}|‰j         v V — Œd S r�   )Úused_ops)rÔ   r‹   Úopcounts     €r”   rø   z5StorageBox.should_realize_on_reuse.<locals>.<genexpr>'  s+   øè è € Ð@Ð@°�q˜GÔ,Ð,Ð@Ð@Ð@Ð@Ð@Ð@r–   TF)r‘   rp  r=  r™  rK  r  ra  rN  rs  rJ   Úrealize_reads_threshold)r¹  rQ  rP  Ú	heavy_opsrÓ  s       @r”   Úshould_realize_on_reusez"StorageBox.should_realize_on_reusem'  sÀ   ø€ ð
 �1Š9ˆ9� D¤Iµ	½9Ð/EÑFÔFˆ9Ý�d”iÑ Ô ð  àœ)×4Ò4Ñ6Ô6�ðð ð �	õ Ð@Ð@Ð@Ð@°iÐ@Ñ@Ô@Ñ@Ô@ð  Ø˜4Ø×&Ò&Ñ(Ô(ð Ø�tØÐT 4§>¢>Ñ#3Ô#3µfÔ6TÒ#TÐTØˆur–   c               ó`   — |                       ||¬¦  «        r|                      ¦   «          d S d S ru  )rÖ  r*  rS  s      r”   rT  zStorageBox.mark_reuse†'  s8   € Ø×'Ò'¨¸;Ð'ÑGÔGð 	Ø�LŠL‰NŒNˆNˆNˆNð	ð 	r–   c                ó4   — | j                              ¦   «         S r�   r©  r¸  s    r”   rs  zStorageBox.num_readsŠ'  r…  r–   Nr–  r™  r�  )rK  r’   r�   r    )rQ  r’   rP  r    r�   r    r¡  r©  )r¥   r¦   r§   r¯  rJ  r‡  r*  rV  rÄ  r9  rÖ  rT  rs  r©   r–   r”   r–  r–  '  só   € € € € € ðð ðð ð ð ð

ð 
ð 
ð 
ðð ð ð ð<ð ð ð ð
ð 
ð 
ð 
ð&
ð 
ð 
ð 
ð, JNð ð ð ð ð ð ð2 =Að ð ð ð ð ð ð%ð %ð %ð %ð %ð %r–   r–  c                  ó2   — e Zd ZU ded<   ded<   dZded<   dS )ÚSubgraphrÃ   rÂ   r}  Úgraph_moduleNzGraphLowering | Noner"  )r¥   r¦   r§   r¨   r"  r©   r–   r”   rÚ  rÚ  Ž'  s8   € € € € € € à€I€I�IØ&Ð&Ð&Ñ&Ø"&€EÐ&Ð&Ð&Ñ&Ð&Ð&r–   rÚ  Úbuffersc                óˆ   — d„ | D ¦   «         } t          t          d„ | D ¦   «         ¦  «        ¦  «        t          | ¦  «        k     S )Nc                ód   — g | ]-}t          |t          ¦  «        r|                     ¦   «         n|‘Œ.S r©   ©r‘   rv  r•  ©rÔ   rR  s     r”   r×   z(_has_aliased_buffers.<locals>.<listcomp>–'  sH   € ð ð ð àõ !+¨6µ?Ñ CÔ CÐOˆ×ÒÑÔÐÈðð ð r–   c              3  ó4   K  — | ]}t          |¦  «        V — Œd S r�   )rf  rà  s     r”   rø   z'_has_aliased_buffers.<locals>.<genexpr>›'  s(   è è € Ð;Ð;¨�"˜V™*œ*Ð;Ð;Ð;Ð;Ð;Ð;r–   )rÙ   r@   )rÜ  s    r”   Ú_has_aliased_buffersrâ  •'  sR   € ðð àðñ ô €Gõ
 �zÐ;Ð;°7Ð;Ñ;Ô;Ñ;Ô;Ñ<Ô<½sÀ7¹|¼|ÒKÐKr–   c                  óx   ‡ — e Zd ZU dZdZded<   dZded<   dZded<   dˆ fd„Zdd„Z	e
dd„¦   «         Zdd„Zˆ xZS )ÚInvokeSubgraphz.
    Ir node for the invoke_subgraph HOP.
    NúSubgraph | Noner™
  úSequence[IRNode] | NoneÚoperandsrÜ  rÚ  r‹  rq  r,  r�   r¬   c                óä   •— t          ¦   «                              d ||¬¦  «         || _        t          j                             | ¦  «        | _        t          j                             | ¦  «         d S rZ	  )r   r�  r™
  rw   r"  r"  rÂ   r#  )r¹  r™
  rç  rq  r¢  s       €r”   r�  zInvokeSubgraph.__init__¨'  sk   ø€ õ 	‰Œ×ÒØØØð 	ñ 	
ô 	
ð 	
ð
 !ˆŒÝ”G×+Ò+¨DÑ1Ô1ˆŒ	Ý	Œ×"Ò" 4Ñ(Ô(Ð(Ð(Ð(r–   rØ  c                ó$   — | j         r| j         gng S r�   )r™
  r¸  s    r”   rÚ  zInvokeSubgraph.get_subgraphs´'  s   € Ø"&¤-Ð7�”ˆˆ°RÐ7r–   r‰   ú@list[ShapeAsConstantBuffer | NoneAsConstantBuffer | MultiOutput]c                óò  ‡ ‡‡— ddl m} t          j        j        }d}|j                             d¦  «        x}rWd}|j        t          j	        j
        j        u r'|j        d         t          j	        j
        j        u sJ ‚d}|d         |d…         }nad}|j        t          j	        j
        j        u r'|j        d         t          j	        j
        j        u sJ ‚d}|j        |d…         }d	„ |D ¦   «         }ˆ fd
„|D ¦   «         }g }	t          |¦  «        D ]b\  }
}t          |t           t"          t$          f¦  «        r|	                     |¦  «         Œ=|	                      ||||
         ¦  «        ¦  «         Œc|	}|j        €qt          j                             |j        ||j        ¬¦  «        |_        t          j        |j        ¦  «        5   |j        j        |Ž  ddd¦  «         n# 1 swxY w Y   |j        j        }d}|D ]-}t          |t           ¦  «        s|                     ¦   «         } nŒ.|€J ‚t7          ||t9          |¬¦  «        ¬¦  «        Šdˆfd„Šˆfd„t          |¦  «        D ¦   «         }|‰_        |S )z„For each operand, get a realized input, force it to have the same
        strides as the subgraph inputs, then use an InvokeSubgraphrI   )Úconstrain_to_fake_tensorNÚeager_input_valsrí   rì   r   rî   c                ó(   — g | ]}|j         d          ‘ŒS ©r"  ©r†  r  s     r”   r×   z)InvokeSubgraph.create.<locals>.<listcomp>Õ'  s   € Ð@Ð@Ð@¨q˜QœV Eœ]Ð@Ð@Ð@r–   c                ó:   •— g | ]}‰                      |¦  «        ‘ŒS r©   r²	  r³	  s     €r”   r×   z)InvokeSubgraph.create.<locals>.<listcomp>Û'  s'   ø€ Ð!IÐ!IÐ!I¸1 #×"3Ò"3°AÑ"6Ô"6Ð!IÐ!IÐ!Ir–   ©r|  rŽ
  r�
  rú  )r™
  rç  rq  r  r‰   Úindr’   r�   ú:ShapeAsConstantBuffer | NoneAsConstantBuffer | MultiOutputc                ó”  •— t          | t          t          f¦  «        r| S |                      ¦   «         }|€J ‚t	          t          ||                      ¦   «         |                      ¦   «         |                      ¦   «         |  	                    ¦   «         j
        |  	                    ¦   «         j        ¬¦  «        ‰t          |fgd¬¦  «        S )Nr,  Trn  )r‘   r¼   r‹  r+  rU  rs  r*  r%  rT  r'  rt  ru  r°   )r  ró  r!  Úinvoke_subgraphs      €r”   Úcreate_outputz,InvokeSubgraph.create.<locals>.create_output(  sÌ   ø€ õ ˜&Õ#8Õ:NÐ"OÑPÔPð Ø�à×*Ò*Ñ,Ô,�ØÐ)Ð)Ð)å"ÝØ%Ø$×.Ò.Ñ0Ô0Ø#Ÿ_š_Ñ.Ô.Ø%×0Ò0Ñ2Ô2Ø%×0Ò0Ñ2Ô2Ô9Ø"(×"3Ò"3Ñ"5Ô"5Ô"?ðñ ô ð $Ý˜C�[�MØ6:ðñ ô ð r–   c                ó.   •— g | ]\  }} ‰||¦  «        ‘ŒS r©   r©   )rÔ   rÕ   r  r÷  s      €r”   r×   z)InvokeSubgraph.create.<locals>.<listcomp>(  s)   ø€ ÐMÐMÐM©Y¨Q°��˜f aÑ(Ô(ÐMÐMÐMr–   )r  r‰   ró  r’   r�   rô  )rå	  rì  rw   r"  r,	  r†  rå  r¢  r-  ru   rB  rÁ	  rÆ   rö  r  r‘   r¼   r¶	  r¹	  ró  r˜
  rÛ  rÂ   r�
  rž
  Úgraph_outputsr+  rä  r,  rÜ  )r  r™
  rç  rì  r,	  Úfake_operandsrí  rt  Úfx_operandsÚnew_operandsr   ÚoperandrÜ  r!  Úoutsr÷  rö  s   `              @@r”   r·  zInvokeSubgraph.create·'  s;  øøø€ ð 	7Ð6Ð6Ð6Ð6Ð6õ ”wÔ+ˆàˆØ+Ô0×4Ò4Ð5GÑHÔHÐHÐð 	AàˆFØÔ"¥e¤iÔ&<Ô&IÐIÐIà#Ô(¨Ô+­u¬yÔ/EÔ/UÐUÐUÐUÐUØ�Ø,¨QÔ/°°°Ô8ˆMˆMàˆFØÔ"¥e¤iÔ&<Ô&IÐIÐIà#Ô(¨Ô+­u¬yÔ/EÔ/UÐUÐUÐUÐUØ�ð 'Ô+¨F¨G¨GÔ4ˆKØ@Ð@°KÐ@Ñ@Ô@ˆMð "JÐ!IÐ!IÐ!IÀÐ!IÑ!IÔ!IˆØ%'ˆå% hÑ/Ô/ð 	ð 	‰LˆC�ÝØÕ/µÕARÐSñô ð ð ×#Ò# GÑ,Ô,Ð,Ð,à×#Ò#Ø,Ð,¨W°mÀCÔ6HÑIÔIñô ð ð ð
  ˆàŒ>Ð!åœW×2Ò2ØÔ(Ø,Ø&œmð 3ñ ô ˆHŒNõ
 Ô$ X¤^Ñ4Ô4ð 3ð 3Ø"�”Ô" MÐ2Ð2ð3ð 3ð 3ñ 3ô 3ð 3ð 3ð 3ð 3ð 3ð 3øøøð 3ð 3ð 3ð 3ð ”.Ô.ˆð ˆØð 	ð 	ˆGÝ˜gÕ'<Ñ=Ô=ð Ø ×+Ò+Ñ-Ô-�Ø�ðð Ð!Ð!Ð!Ý(ØØÝ$¨FÐ3Ñ3Ô3ð
ñ 
ô 
ˆð	ð 	ð 	ð 	ð 	ð 	ð. NÐMÐMÐM½)ÀGÑ:LÔ:LÐMÑMÔMˆØ"&ˆÔØˆs   ÇG"Ç"G&Ç)G&rx	  r|   c                ó0   — |                      | ¦  «         d S r�   )Úcodegen_invoke_subgraphrƒ	  s     r”   r„	  zInvokeSubgraph.codegen (  r
  r–   )r™
  rÚ  rç  r‹  rq  r,  r�   r¬   r‘  )r™
  rÚ  rç  r‰   r�   rê  rI
  )r¥   r¦   r§   r¯  r™
  r¨   rç  rÜ  r�  rÚ  r3  r·  r„	  r‡  rˆ  s   @r”   rä  rä  ž'  sË   ø€ € € € € € ðð ð !%€HÐ$Ð$Ð$Ñ$Ø(,€HÐ,Ð,Ð,Ñ,Ø'+€GÐ+Ð+Ð+Ñ+ð
)ð 
)ð 
)ð 
)ð 
)ð 
)ð8ð 8ð 8ð 8ð ðfð fð fñ „[ðfðP.ð .ð .ð .ð .ð .ð .ð .r–   rä  c                  ó´   ‡ — e Zd ZU dZdZded<   dZded<   dZded<   dZded	<   dZ	d
ed<   d'ˆ fd„Z
d(d„Zed)d„¦   «         Zed*d!„¦   «         Zd+d$„Zd,d&„Zˆ xZS )-ÚConditionala¢  
    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úSequence[MultiOutput] | NonerÜ  r‰   r‹  rÚ  rq  r,  rW	  r—  r�   r¬   c                óL  •— || _         || _        || _        || _        t	          |g|¢¦  «        \  }}t          ¦   «                              d |||¬¦  «         |�|| _        t          j	         
                    | ¦  «        | _        t          j	                             | ¦  «         d S ©N)rÂ   rq  rŠ  rK	  )r  rç  r  r  Ú_split_by_sym_typer   r�  rW	  rw   r"  r"  rÂ   r#  )
r¹  r  rç  r  r  rq  rW	  Úsym_argsrÇ	  r¢  s
            €r”   r�  zConditional.__init__7(  s­   ø€ ð #ˆŒØ ˆŒØ*ˆÔØ,ˆÔå 2°IÐ3IÀÐ3IÑ JÔ JÑˆ�+å‰Œ×ÒØØØØ"ð	 	ñ 	
ô 	
ð 	
ð Ð(Ø%6ˆDÔ"å”G×+Ò+¨DÑ1Ô1ˆŒ	Ý	Œ×"Ò" 4Ñ(Ô(Ð(Ð(Ð(r–   rØ  c                óŽ   — g }| j         r|                     | j         ¦  «         | j        r|                     | j        ¦  «         |S r�   )r  ró  r  ©r¹  Ú	subgraphss     r”   rÚ  zConditional.get_subgraphsS(  sQ   € Øˆ	ØÔð 	1Ø×Ò˜TÔ/Ñ0Ô0Ð0ØÔð 	2Ø×Ò˜TÔ0Ñ1Ô1Ð1ØÐr–   r÷   úint | torch.SymIntú
int | Exprc                óH   — t          | t          ¦  «        r| S | j        j        S r�   )r‘   r’   r¿   rê  )r÷   s    r”   Ú_maybe_exprzConditional._maybe_expr[(  s#   € å�a�ÑÔð 	ØˆHØŒvŒ{Ðr–   rˆ   Útrue_fnÚfalse_fnrc  úlist[MultiOutput]c           	     ój  ‡ ‡‡‡— ‰                       |¦  «        }ˆ fd„‰D ¦   «         Št          j        j        j        d         }t          |t          ¦  «        sJ t          |¦  «        ¦   «         ‚g }|D ]M}t          |t          ¦  «        r!| 	                    |j
        d         ¦  «         Œ8| 	                    |¦  «         ŒNt          j        j        j
        d         }dd
„}	||fD ]š}
|
j        €‘t          j                             |
j        ||
j        ¬¦  «        |
_        t          j        |
j        ¦  «        5   |
j        j        |Ž   |	|
j        j        |¦  «        |
j        _        ddd¦  «         n# 1 swxY w Y   Œ›|j        €J ‚|j        €J ‚|j        j        }|j        j        }d|fd|ffD ])\  }}t#          |¦  «        rt%          d|› d|› �¦  «        ‚Œ*t'          |¦  «        t'          |¦  «        k    sJ ||f¦   «         ‚t)          t+          ||¦  «        ¦  «        D ]·\  }\  }}|                     ¦   «         |                     ¦   «         k    sJ |||f¦   «         ‚|                     ¦   «         |                     ¦   «         k    sJ |||f¦   «         ‚|                     ¦   «         j        |                     ¦   «         j        k    sJ |||f¦   «         ‚Œ¸t5          d„ ‰|gz   D ¦   «         ¦  «        Št7          t          j        j        j        t          j        j        j
                             dd¦  «        ¦  «        }‰€
J d¦   «         ‚t?          |‰||tA          ‰¬¦  «        |¬¦  «        Šˆˆfd„t)          t+          |t          j        j        j
        d         ¦  «        ¦  «        D ¦   «         }|‰_!        ddl"m#}  ||j        ¦  «        \  }}}}} ||j        ¦  «        \  }}}}}tI          |¦  «        tI          |¦  «        z  }ˆˆfd„tK          |¦  «        D ¦   «         ‰_&        |S )zNCreate a Sequence of IRNodes from a conditional statement (see .lowering.cond)c                ó:   •— g | ]}‰                      |¦  «        ‘ŒS r©   r²	  r³	  s     €r”   r×   z&Conditional.create.<locals>.<listcomp>m(  s'   ø€ Ð;Ð;Ð;¨Q�C×%Ò% aÑ(Ô(Ð;Ð;Ð;r–   rR  r"  rù  r‹  Úfake_tensorsúSequence[torch.Tensor]r�   r�   c                ó*  — g }t          | |¦  «        D ]\  }}t          |t          ¦  «        r|                     |¦  «         Œ0|                     t                               t          |¦  «        |                     ¦   «         d¬¦  «        ¦  «         Œ€|S ©NFrQ  )rÝ   r‘   r¼   ró  rß  rß  rˆ   r  )rù  r  Úretr  r=  s        r”   Ú_require_exact_stridesz2Conditional.create.<locals>._require_exact_strides}(  sŸ   € ð ˆCÝ # M°<Ñ @Ô @ð 	ð 	‘�˜Ý˜fÕ&;Ñ<Ô<ð Ø—J’J˜vÑ&Ô&Ð&Ð&à—J’Jå$×:Ò:Ý% fÑ-Ô-¨t¯{ª{©}¬}ÈEð ;ñ ô ñô ð ð ð ˆJr–   Nrò  r  r  zVOutput aliasing is currently not supported in compiled torch.cond. The outputs of the z% subgraph of torch.cond are aliased: c              3  óh   K  — | ]-}t          |t          ¦  «        °|                     ¦   «         V — Œ.d S r�   )r‘   r¼   r+  )rÔ   Úos     r”   rø   z%Conditional.create.<locals>.<genexpr>·(  sO   è è € ð 
ð 
àÝ˜aÕ!6Ñ7Ô7ð
Ø�LŠL‰NŒNð
ð 
ð 
ð 
ð 
ð 
r–   rW	  zcannot determine devicerú  )r  rç  r  r  rq  rW	  c                ó´  •— g | ]Ô\  }\  }}t          t          |                     ¦   «         �|                     ¦   «         n‰|                     ¦   «         d„ |                     ¦   «         D ¦   «         d„ |                     ¦   «         D ¦   «         |                     ¦   «         j        |                     ¦   «         j        ¬¦  «        ‰t          |fg¦  «        ‘ŒÕS )Nc                óB   — g | ]}t                                |¦  «        ‘ŒS r©   ©r  r  ©rÔ   r�  s     r”   r×   z1Conditional.create.<locals>.<listcomp>.<listcomp>Ò(  s&   € ÐUÐUÐU¸"�+×1Ò1°"Ñ5Ô5ÐUÐUÐUr–   c                óB   — g | ]}t                                |¦  «        ‘ŒS r©   r!  r"  s     r”   r×   z1Conditional.create.<locals>.<listcomp>.<listcomp>Ó(  s3   € ð ð ð Ø8:�×/Ò/°Ñ3Ô3ðð ð r–   r,  )
rU  rs  r+  r*  r  r  r'  rt  ru  r°   )rÔ   rÕ   r  Úmerged_outputÚconditionalr!  s       €€r”   r×   z&Conditional.create.<locals>.<listcomp>Ê(  s  ø€ ð 
ð 
ð 
ñ( +�Ñ*�F˜Mõ' Ýð ×(Ò(Ñ*Ô*Ð6ð "×,Ò,Ñ.Ô.Ð.àØ ×*Ò*Ñ,Ô,ØUÐUÀ×@RÒ@RÑ@TÔ@TÐUÑUÔUðð Ø>K×>RÒ>RÑ>TÔ>Tðñ ô ð "×,Ò,Ñ.Ô.Ô5Ø$×/Ò/Ñ1Ô1Ô;ðñ ô ð Ý˜��ñô ð
ð 
ð 
r–   r   )Ú-check_input_alias_and_mutation_return_outputsc                óT   •— g | ]$}t          ‰|         j        ‰|         ‰¦  «        ‘Œ%S r©   )r  rq  )rÔ   r   r%  rç  s     €€r”   r×   z&Conditional.create.<locals>.<listcomp>õ(  s@   ø€ ð (
ð (
ð (
àõ ˜8 Cœ=Ô/°¸#´ÀÑLÔLð(
ð (
ð (
r–   )rù  r‹  r  r  r�   r�   )'rV  rw   r"  r,	  rÆ   r‘   r   r¾   r>   ró  r†  r˜
  rÛ  rÂ   r�
  rž
  rù  râ  r¯  rÙ   r  rÝ   r+  r*  r'  rt  r7  r;   r#  rñ   rå  r  r,  rÜ  Útorch._higher_order_ops.utilsr&  r@   rÖ  r'  )r  r  r  r  rç  rû  rú  Úfx_opÚfake_outputsr  r™
  Útrue_outputsÚfalse_outputsrÂ   rÜ  rÕ   Út_oÚf_orW	  r&  r  Útrue_mutated_inputsÚfalse_mutated_inputsÚmutated_operand_indicesr%  r!  s   `   `                   @@r”   r·  zConditional.createa(  sR  øøøø€ ð ×%Ò% iÑ0Ô0ˆ	à;Ð;Ð;Ð;°(Ð;Ñ;Ô;ˆÝ !¤Ô 4Ô 9¸"Ô =ˆå˜+¥xÑ0Ô0ÐCÐCµ$°{Ñ2CÔ2CÑCÔCÐ0ð $&ˆØ ð 	,ð 	,ˆEÝ˜%¥Ñ&Ô&ð ,Ø×$Ò$ U¤Z°Ô%6Ñ7Ô7Ð7Ð7ð ×$Ò$ UÑ+Ô+Ð+Ð+Ý”wÔ+Ô0°Ô7ˆð	ð 	ð 	ð 	ð$ ! (Ð+ð 	ð 	ˆHØŒ~Ð%å!"¤×!6Ò!6ØÔ,Ø#0Ø"*¤-ð "7ñ "ô "�”õ
 Ô(¨¬Ñ8Ô8ð ð Ø&�H”NÔ&¨Ð6Ð6ð 4JÐ3IØ œÔ4°lñ4ô 4�H”NÔ0ðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð øð Œ}Ð(Ð(Ð(ØŒ~Ð)Ð)Ð)Ø”}Ô2ˆØ œÔ4ˆà(¨,Ð7¸*ÀmÐ9TÐUð 	ð 	‰MˆD�'Ý# LÑ1Ô1ð Ý$ð_Ø*.ð_ð _ØU\ð_ð _ñô ð ðõ �<Ñ Ô ¥C¨Ñ$6Ô$6Ò6Ð6Ð6¸À}Ð8UÑ6Ô6Ð6Ý&¥s¨<¸Ñ'GÔ'GÑHÔHð 	Uð 	U‰MˆA‰z��SØ—>’>Ñ#Ô# s§~¢~Ñ'7Ô'7Ò7Ð7Ð7¸!¸SÀ#¸Ñ7Ô7Ð7Ø—=’=‘?”? c§m¢m¡o¤oÒ5Ð5Ð5¸¸3À°}Ñ5Ô5Ð5Ø—>’>Ñ#Ô#Ô*¨c¯nªnÑ.>Ô.>Ô.EÒEÐEÐEÈÈ3ÐPSÀ}ÑEÔEÐEÐEõ ð 
ð 
à  Ñ+ð
ñ 
ô 
ñ 
ô 
ˆõ
 6ÝŒGÔÔ&ÝŒGÔ Ô%×)Ò)Ð*=¸tÑDÔDñ
ô 
Ðð Ð!Ð!Ð#<Ñ!Ô!Ð!Ý!ØØØ!Ø#Ý$¨FÐ3Ñ3Ô3Ø/ð
ñ 
ô 
ˆð
ð 
ð 
ð 
ð 
õ( /8Ý�L¥!¤'Ô"6Ô";¸EÔ"BÑCÔCñ/ô /ð)
ñ 
ô 
ˆð2 &ˆÔð	
ð 	
ð 	
ð 	
ð 	
ð 	
ð
 :Ð9¸'Ô:NÑOÔOñ 	*ˆˆAˆqÐ% qð :Ð9¸(Ô:OÑPÔPñ 	+ˆˆAˆqÐ&¨õ #-Ð-@Ñ"AÔ"AÅJØ ñE
ô E
ñ #
Ðð
(
ð (
ð (
ð (
ð (
åÐ5Ñ6Ô6ð(
ñ (
ô (
ˆÔ$ð
 ˆs   Ä90E5Å5E9	Å<E9	rx	  r|   c           	     óª   — |                      | ¦  «         |                     |                      ¦   «         | j        t	          | di ¦  «        ¦  «         d S rÀ  )Úcodegen_conditionalrÁ  r˜  rÜ  rÉ   rƒ	  s     r”   r„	  zConditional.codegenü(  sV   € Ø×#Ò# DÑ)Ô)Ð)Ø×8Ò8Ø�MŠM‰OŒO˜Tœ\­7°4Ð9LÈbÑ+QÔ+Qñ	
ô 	
ð 	
ð 	
ð 	
r–   rš   c                óÖ   — t          | dd ¦  «        x}rIt          t          j        j        j        |¦  «        }|€J ‚t          |                     ¦   «         ¦  «        S t          ¦   «         S rÀ  rÄ  rÅ  s      r”   rØ  z$Conditional.get_unbacked_symbol_defs)  rÇ  r–   )r  r‰   rç  r‹  r  rÚ  r  rÚ  rq  r,  rW	  r—  r�   r¬   r‘  )r÷   r  r�   r  )
r  rˆ   r  rÚ  r  rÚ  rç  rc  r�   r  rI
  rÞ  )r¥   r¦   r§   r¯  r  r¨   rç  r  r  rÜ  r�  rÚ  r²  r  r3  r·  r„	  rØ  r‡  rˆ  s   @r”   r  r  $(  s!  ø€ € € € € € ð	ð 	ð  $€IÐ#Ð#Ð#Ñ#Ø(,€HÐ,Ð,Ð,Ñ,Ø%)€MÐ)Ð)Ð)Ñ)Ø&*€NÐ*Ð*Ð*Ñ*Ø,0€GÐ0Ð0Ð0Ñ0ð)ð )ð )ð )ð )ð )ð8ð ð ð ð ðð ð ñ „\ðð
 ðXð Xð Xñ „[ðXðt
ð 
ð 
ð 
ð ð  ð  ð  ð  ð  ð  ð  r–   r  rÆ   r�
  ú-tuple[list[ShapeAsConstantBuffer], list[Any]]c                ó¦   — g }g }| D ]G}t          |t          ¦  «        r|                     |j        ¦  «         Œ2|                     |¦  «         ŒH||fS r�   )r‘   r¼   ró  rê  )rÆ   Únon_sym_argsr
  r(	  s       r”   r	  r	  )  si   € ð €LØ€HØð %ð %ˆÝ�cÕ0Ñ1Ô1ð 	%Ø�OŠO˜CœHÑ%Ô%Ð%Ð%à×Ò Ñ$Ô$Ð$Ð$à�\Ð!Ð!r–   c                  óÌ   ‡ — e Zd ZU dZdZded<   dZded<   dZded<   dZded<   dZ	d	ed
<   d%ˆ fd„Z
d&d„Zed'd„¦   «         Zed(d„¦   «         Zed)d„¦   «         Zd*d"„Zd+d$„Zˆ xZS ),Ú	WhileLoopzSThe IR node for while_loop and while_loop_stack_output. It supports input mutation.Nræ  Úcarried_inputsÚadditional_inputsrå  Úcond_subgraphÚbody_subgraphr  rÜ  r‹  rÚ  rq  r,  rW	  r—  Ústack_outputr    r�   r¬   c                ó\  •— || _         || _        || _        || _        t	          g |¢|¢¦  «        \  }}	t          ¦   «                              d ||	|¬¦  «         |�|| _        || _        t          j
                             | ¦  «        | _        t          j
                             | ¦  «         d S r  )r:  r;  r<  r=  r	  r   r�  rW	  r>  rw   r"  r"  rÂ   r#  )r¹  r:  r;  r<  r=  rq  rW	  r>  r
  rÇ	  r¢  s             €r”   r�  zWhileLoop.__init__%)  sÁ   ø€ ð -ˆÔØ!2ˆÔØ*ˆÔØ*ˆÔå 2Ø1ˆnÐ1Ð0Ð1ñ!
ô !
Ñˆ�+õ 	‰Œ×ÒØØØØ"ð	 	ñ 	
ô 	
ð 	
ð Ð(Ø%6ˆDÔ"Ø(ˆÔå”G×+Ò+¨DÑ1Ô1ˆŒ	Ý	Œ×"Ò" 4Ñ(Ô(Ð(Ð(Ð(r–   rØ  c                óŽ   — g }| j         r|                     | j         ¦  «         | j        r|                     | j        ¦  «         |S r�   )r<  ró  r=  r  s     r”   rÚ  zWhileLoop.get_subgraphsD)  sQ   € Øˆ	ØÔð 	1Ø×Ò˜TÔ/Ñ0Ô0Ð0ØÔð 	1Ø×Ò˜TÔ/Ñ0Ô0Ð0ØÐr–   c                óx  — t          | ¦  «        s| S d„ | D ¦   «         }t          ¦   «         }g }t          | |¦  «        D ]{\  }}t          |¦  «        |v r.|                     t
                               |¦  «        ¦  «         ŒD|                     t          |¦  «        ¦  «         |                     |¦  «         Œ||S )Nc                ód   — g | ]-}t          |t          ¦  «        r|                     ¦   «         n|‘Œ.S r©   rß  rà  s     r”   r×   z3WhileLoop._clone_aliased_inputs.<locals>.<listcomp>W)  sH   € ð 
ð 
ð 
àõ %/¨vµÑ$GÔ$GÐSˆF×ÒÑ Ô Ð ÈVð
ð 
ð 
r–   )râ  r@   rÝ   rf  ró  rß  r£	  rá  )r:  Úunwrapped_buffersÚseen_buffersr�  Úoriginal_inputÚunwrapped_buffers         r”   Ú_clone_aliased_inputszWhileLoop._clone_aliased_inputsO)  sÕ   € å# NÑ3Ô3ð 	"Ø!Ð!ð

ð 
à(ð
ñ 
ô 
Ðõ )3©¬ˆØ+-ˆå03°NÐDUÑ0VÔ0Vð 	.ð 	.Ñ,ˆNÐ,ÝÐ"Ñ#Ô# |Ð3Ð3Ø—’�l×5Ò5°nÑEÔEÑFÔFÐFÐFà× Ò ¥Ð$4Ñ!5Ô!5Ñ6Ô6Ð6Ø—’˜nÑ-Ô-Ð-Ð-àˆr–   r  r‰   c                ó"  — t          | t          ¦  «        r| S t          | t          t          f¦  «        rt          | ¦  «        S t          | t          ¦  «        rt                               | ¦  «        S t          dt          | ¦  «        › �¦  «        ‚)NzNYI unsupported output type: )r‘   rˆ   r–  rv  rU  r·  rø  r¾   )r  s    r”   Ú_maybe_wrap_as_tensor_boxz#WhileLoop._maybe_wrap_as_tensor_boxi)  s‚   € å�c�9Ñ%Ô%ð 	LØˆJÝ˜�j­/Ð:Ñ;Ô;ð 	LÝ˜S‘>”>Ð!Ý˜�[Ñ)Ô)ð 	LÝ×#Ò# CÑ(Ô(Ð(åÐJ½tÀC¹y¼yÐJÐJÑKÔKÐKr–   Úcond_fnÚbody_fnrç  c                ó4  ‡ ‡&— ddl m} d'd	„}t          j        j        j        d
         }t          j        j        j        d         }	||	z   }
d„ |
D ¦   «         }d„ |D ¦   «         }d„ |	D ¦   «         }ˆ fd„|D ¦   «         }t                               |¦  «        } |||¦  «        }ˆ fd„|D ¦   «         } |||¦  «        }||z   Š&||fD ]ö}|j        €ít          |
t          ¦  «        sJ t          |
¦  «        ¦   «         ‚t          j                             |j        |
|j        ¬¦  «        |_        t          j        |j        ¦  «        5   |j        j        |Ž  ||u rLt!          |j        j        ¦  «        t!          |¦  «        k    sJ ‚ ||j        j        |¦  «        |j        _        ddd¦  «         n# 1 swxY w Y   Œ÷|j        r|j        sJ ‚|j        j        }|j        j        }t%          |¦  «        rt'          d|› �¦  «        ‚t!          |¦  «        dk    s
J |¦   «         ‚|d         }t          |t(          ¦  «        s[|                     ¦   «         t,          j        k    s
J |¦   «         ‚t!          |                     ¦   «         ¦  «        dk    s
J |¦   «         ‚t!          ‰&¦  «        dk    s
J d¦   «         ‚‰&d                              ¦   «         }|€J ‚t!          |¦  «        t!          |¦  «        k    sJ ||f¦   «         ‚t5          t7          ||¦  «        ¦  «        D ]Û\  }\  }}d(d„} ||                     ¦   «         |                     ¦   «         ¦  «          ||                     ¦   «         |                     ¦   «         ¦  «         |                     ¦   «         |                     ¦   «         k    sJ ||||f¦   «         ‚|                     ¦   «         |                     ¦   «         k    sJ |||f¦   «         ‚ŒÜ|€J ‚t;          t          j        j        j        t          j        j        j          !                    dd¦  «        ¦  «        }t          ||||tE          |¬¦  «        ||¬¦  «        }|j        �)t          |j        j#        t,          j$        j%        ¦  «        sJ ‚ ||j        j#        |¦  «        d         }tM          |¦  «        }ˆ&fd„|D ¦   «         }tO          |¦  «        }g }g |_(        g |_)        |rét!          |¦  «        dk    s
J d ¦   «         ‚t5          t          j        j        j         d!         ¦  «        D ] \  } }!tU          tW          |!j,        |!j-        d"„ |! .                    ¦   «         D ¦   «         d#„ |! /                    ¦   «         D ¦   «         ¬$¦  «        |t`          | fg¦  «        }"|j(         1                    |"¦  «         | 1                    |"¦  «         Œ¡�nDt5          |¦  «        D �]3\  } }!| |v rp| t!          |¦  «        k     s
J d%¦   «         ‚te          |¦  «        }#|j)         1                    tg          |#j4        |#|¦  «        ¦  «         | 1                    |#¦  «         ŒztU          tW          |!                     ¦   «         |!                     ¦   «         |!                     ¦   «         |!                     ¦   «         |! 5                    ¦   «         j6        ¬&¦  «        |t`          | fg¦  «        }"|j(         1                    |"¦  «         | 1                    |"¦  «         �Œ5t7          ||¦  «        D ]`\  }$}%|$ 7                    ¦   «         t          j        j8        v r6t          j        j9         :                    |% 7                    ¦   «         ¦  «         Œa|S ))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_mutationÚtensor_boxesr‹  r  ú'list[int | torch.SymInt | torch.Tensor]r�   r�   c                ó’  — t          | ¦  «        t          |¦  «        k    sJ ‚g }t          | |¦  «        D ]‘\  }}t          |t          j        ¦  «        r]t
                               |¦  «        }|                     t           	                    || 
                    ¦   «         d¬¦  «        ¦  «         Œ||                     |¦  «         Œ’|S r  )rÙ   rÝ   r‘   r-  re  r9  rI  ró  rß  rß  r  )rN  r  r  r  ÚfkÚnew_tbs         r”   r  z0WhileLoop.create.<locals>._require_exact_strides‚)  sÊ   € õ �|Ñ$Ô$­¨LÑ(9Ô(9Ò9Ð9Ð9Ð9ØˆCÝ˜l¨LÑ9Ô9ð #ð #‘��BÝ˜b¥%¤,Ñ/Ô/ð #õ '×@Ò@ÀÑDÔD�FØ—J’JÝ$×:Ò:Ø" B§I¢I¡K¤K¸uð ;ñ ô ñô ð ð ð —J’J˜r‘N”N�N�NØˆJr–   éþÿÿÿrR  c                ó(   — g | ]}|j         d          ‘ŒS rï  rð  r  s     r”   r×   z$WhileLoop.create.<locals>.<listcomp>¢)  s   € Ð@Ð@Ð@¨Q˜1œ6 %œ=Ð@Ð@Ð@r–   c                ó(   — g | ]}|j         d          ‘ŒS rï  rð  r  s     r”   r×   z$WhileLoop.create.<locals>.<listcomp>£)  s   € ÐHÐHÐH°˜qœv eœ}ÐHÐHÐHr–   c                ó(   — g | ]}|j         d          ‘ŒS rï  rð  r  s     r”   r×   z$WhileLoop.create.<locals>.<listcomp>¤)  s   € Ð!NÐ!NÐ!N°A !¤&¨¤-Ð!NÐ!NÐ!Nr–   c                ó:   •— g | ]}‰                      |¦  «        ‘ŒS r©   r²	  r³	  s     €r”   r×   z$WhileLoop.create.<locals>.<listcomp>¦)  s'   ø€ ÐHÐHÐH°A˜3×,Ò,¨QÑ/Ô/ÐHÐHÐHr–   c                ó:   •— g | ]}‰                      |¦  «        ‘ŒS r©   r²	  r³	  s     €r”   r×   z$WhileLoop.create.<locals>.<listcomp>©)  s'   ø€ ÐNÐNÐN°q˜c×/Ò/°Ñ2Ô2ÐNÐNÐNr–   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: rI   z9torch.while_loop is assumed to have at least one operand.Ú	lhs_exprsúSequence[int | Expr]Ú	rhs_exprsr¬   c                óÀ   — t          | ¦  «        t          |¦  «        k    sJ ‚t          | |¦  «        D ]*\  }}t          j        j                             ||¦  «         Œ+d S r�   )rÙ   rÝ   rw   r"  r#  rý  )rY  r[  ÚlhsÚrhss       r”   Ú_guard_list_equalsz,WhileLoop.create.<locals>._guard_list_equalsè)  sf   € õ ˜9‘~”~­¨Y©¬Ò7Ð7Ð7Ð7Ý # I¨yÑ 9Ô 9ð <ð <‘H�C˜Ý”GÔ$×1Ò1°#°sÑ;Ô;Ð;Ð;ð<ð <r–   rW	  rú  )r:  r;  r<  r=  rq  rW	  r>  rì   c                ó    •— g | ]
}‰|         ‘ŒS r©   r©   )rÔ   r   Ú
all_inputss     €r”   r×   z$WhileLoop.create.<locals>.<listcomp>*  s   ø€ ÐEÐEÐE¨c˜* Sœ/ÐEÐEÐEr–   z-NYI: while_loop_stack_output input mutations.r"  c                óB   — g | ]}t                                |¦  «        ‘ŒS r©   r!  r"  s     r”   r×   z$WhileLoop.create.<locals>.<listcomp>#*  s&   € ÐRÐRÐR¸b�k×5Ò5°bÑ9Ô9ÐRÐRÐRr–   c                óB   — g | ]}t                                |¦  «        ‘ŒS r©   r!  )rÔ   rŽ  s     r”   r×   z$WhileLoop.create.<locals>.<listcomp>$*  s&   € ÐVÐVÐVÀ¥× 7Ò 7¸Ñ ;Ô ;ÐVÐVÐVr–   r1  zonly carries can be mutated.)r!  r   r  r  rt  )rN  r‹  r  rO  r�   r�   )rY  rZ  r[  rZ  r�   r¬   );r(  rM  rw   r"  r,	  rÆ   r9  rG  r‘   r   r¾   r˜
  rÛ  rÂ   r�
  rž
  rÙ   rù  râ  r¯  r¼   r*  r-  r    r%  r+  r  rÝ   rT  r;   r#  rñ   r†  rå  r,  ÚmoduleÚfxÚGraphModuler@   r8  rÜ  r'  rU  rs  r!  r   r  r  r°   ró  r7  r  rq  r'  rt  r˜  rI  r/  rá  )'r  rJ  rK  r:  r;  r>  rM  r  Úfx_carried_inputsÚfx_additional_inputsÚfx_all_inputsÚfake_all_inputsÚfake_carried_inputsÚfake_additional_inputsÚcarried_inputs_Úadditional_inputs_r™
  Úcond_outputsÚbody_outputsrë  r!  rÕ   r�  Úbor_  rW	  Ú
while_loopÚmutated_idxsÚmutated_idx_setr  Úmutated_inputs_iterÚall_outputsr   r  r‚  Úmutated_inputr‘  r  ra  s'   `                                     @r”   r·  zWhileLoop.createt)  s~  øø€ ð 	QÐPÐPÐPÐPÐPð	ð 	ð 	ð 	õ: œGÔ0Ô5°bÔ9ÐÝ œwÔ3Ô8¸Ô<ÐØ)Ð,@Ñ@ˆØ@Ð@°-Ð@Ñ@Ô@ˆØHÐHÐ6GÐHÑHÔHÐØ!NÐ!NÐ9MÐ!NÑ!NÔ!NÐàHÐHÐHÐH¸ÐHÑHÔHˆÝ#×9Ò9¸/ÑJÔJˆØ0Ð0°ÐBUÑVÔVˆØNÐNÐNÐNÐ<MÐNÑNÔNÐØ3Ð3ØÐ 6ñ
ô 
Ðð %Ð'9Ñ9ˆ
à  'Ð*ð 	ð 	ˆHØŒ~Ð%å! -µÑ:Ô:ÐOÐO½DÀÑ<OÔ<OÑOÔOÐ:Ý!"¤×!6Ò!6ØÔ,Ø#0Ø"*¤-ð "7ñ "ô "�”õ
 Ô(¨¬Ñ8Ô8ð ð Ø&�H”NÔ&¨Ð8Ð8ð   7Ð*Ð*Ý" 8¤>Ô#?Ñ@Ô@ÅCØ/ñEô Eò  ð  ð  ð  ð 8NÐ7MØ$œNÔ8Ø/ñ8ô 8˜œÔ4ðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð øð" Œ}Ð. ¤Ð.Ð.Ð.Ø”}Ô2ˆØ”}Ô2ˆå Ñ-Ô-ð 	Ý ðgØXdðgð gñô ð õ �<Ñ Ô  AÒ%Ð%Ð% |Ñ%Ô%Ð%Ø˜ŒOˆÝ˜!Õ2Ñ3Ô3ð 	-Ø—;’;‘=”=¥E¤JÒ.Ð.Ð.°Ñ.Ô.Ð.Ý�q—z’z‘|”|Ñ$Ô$¨Ò)Ð)Ð)¨1Ñ)Ô)Ð)å�:‰Œ Ò"Ð"Ð"ØGñ #Ô"Ð"ð ˜A”×)Ò)Ñ+Ô+ˆàÐ!Ð!Ð!å�?Ñ#Ô#¥s¨<Ñ'8Ô'8Ò8Ð8Ð8ØØð;
Ñ8Ô8Ð8õ %¥S¨¸,Ñ%GÔ%GÑHÔHð 	Að 	A‰KˆA‰x��Bð<ð <ð <ð <ð Ð˜rŸ{š{™}œ}¨b¯kªk©m¬mÑ<Ô<Ð<ØÐ˜rŸ}š}™œ°·²±´Ñ@Ô@Ð@ð —=’=‘?”? b§m¢m¡o¤oÒ5Ð5Ð5¸¸2¸rÀ6Ð7JÑ5Ô5Ð5Ø—<’<‘>”> R§\¢\¡^¤^Ò3Ð3Ð3°a¸¸R°[Ñ3Ô3Ð3Ð3àÐ!Ð!Ð!å5ÝŒGÔÔ&ÝŒGÔ Ô%×)Ò)Ð*=¸tÑDÔDñ
ô 
Ðõ
 Ø*Ø0Ø!Ø!å$¨FÐ3Ñ3Ô3Ø/Ø%ð	
ñ 	
ô 	
ˆ
ð Œ}Ð(­ZØŒMÔ ¥%¤(Ô"6ñ.
ô .
Ð(Ð(ð 
ð
 6Ð5ØŒMÔ  /ñ
ô 
à
ôˆõ % \Ñ2Ô2ˆØEÐEÐEÐE°_ÐEÑEÔEˆõ # >Ñ2Ô2ÐØ$&ˆØˆ
ÔØ&(ˆ
Ô#Øð )	2Ý�Ñ'Ô'¨1Ò,Ð,Ð,Ø?ñ -Ô,Ð,õ  )­¬Ô)=Ô)BÀ5Ô)IÑJÔJð .ð .‘��Vå'ÝØ%œ}Ø$œlØRÐRÀFÇKÂKÁMÄMÐRÑRÔRØVÐVÀfÇmÂmÁoÄoÐVÑVÔVð	ñ ô ð Ý˜C�[�Mñ	ô 	�	ð Ô"×)Ò)¨)Ñ4Ô4Ð4Ø×"Ò" 9Ñ-Ô-Ð-Ð-ñ.õ  )¨Ñ6Ô6ð 2ñ 2‘��VØ˜/Ð)Ð)Ø¥ ^Ñ!4Ô!4Ò4Ð4Ð4Ð6TÑ4Ô4Ð4å$(Ð)<Ñ$=Ô$=�MØÔ/×6Ò6Ý& }Ô';¸]ÈJÑWÔWñô ð ð  ×&Ò& }Ñ5Ô5Ð5Ð5å +Ý#Ø#)×#4Ò#4Ñ#6Ô#6Ø"(×"2Ò"2Ñ"4Ô"4Ø!'§¢Ñ!2Ô!2Ø#)×#4Ò#4Ñ#6Ô#6Ø#)×#4Ò#4Ñ#6Ô#6Ô#=ðñ ô ð #Ý ˜˜ñ
!ô 
!�Ið Ô&×-Ò-¨iÑ8Ô8Ð8Ø×&Ò& yÑ1Ô1Ð1Ñ1å˜N¨KÑ8Ô8ð 	@ð 	@‰HˆC�Ø�|Š|‰~Œ~¥¤Ô!5Ð5Ð5õ ”Ô+×/Ò/°·²±´Ñ?Ô?Ð?øØÐs   ÅA F0Æ0F4	Æ7F4	rx	  r|   c           	     ó¶   — |                      | | j        ¦  «         |                     |                      ¦   «         | j        t          | di ¦  «        ¦  «         d S rÀ  )Úcodegen_while_loopr>  rÁ  r˜  rÜ  rÉ   rƒ	  s     r”   r„	  zWhileLoop.codegenN*  s[   € Ø×"Ò" 4¨Ô):Ñ;Ô;Ð;Ø×8Ò8Ø�MŠM‰OŒO˜Tœ\­7°4Ð9LÈbÑ+QÔ+Qñ	
ô 	
ð 	
ð 	
ð 	
r–   rš   c                óÖ   — t          | dd ¦  «        x}rIt          t          j        j        j        |¦  «        }|€J ‚t          |                     ¦   «         ¦  «        S t          ¦   «         S rÀ  rÄ  rÅ  s      r”   rØ  z"WhileLoop.get_unbacked_symbol_defsT*  rÇ  r–   )r:  r‹  r;  r‹  r<  rÚ  r=  rÚ  rq  r,  rW	  r—  r>  r    r�   r¬   r‘  )r:  r‹  r�   r‹  )r  r‰   r�   r‰   )rJ  rÚ  rK  rÚ  r:  r‹  r;  r‹  r>  r    r�   rç  rI
  rÞ  )r¥   r¦   r§   r¯  r:  r¨   r;  r<  r=  rÜ  r�  rÚ  r²  rG  rI  r3  r·  r„	  rØ  r‡  rˆ  s   @r”   r9  r9  )  s@  ø€ € € € € € à]Ð]à.2€NÐ2Ð2Ð2Ñ2Ø15ÐÐ5Ð5Ð5Ñ5Ø%)€MÐ)Ð)Ð)Ñ)Ø%)€MÐ)Ð)Ð)Ñ)Ø,0€GÐ0Ð0Ð0Ñ0ð)ð )ð )ð )ð )ð )ð>ð ð ð ð ðð ð ñ „\ðð2 ðLð Lð Lñ „\ðLð ðWð Wð Wñ „[ðWðr
ð 
ð 
ð 
ð ð  ð  ð  ð  ð  ð  ð  r–   r9  c                  ó>   ‡ — e Zd Z	 dddœdˆ fd„Zdˆ fd„Zdd„Zˆ xZS )r»   Nr•  rq  r<  rè  r…   rÇ	  r‹  r–  r2  r°	  rá  rÇ   rX	  rW	  r—  r�   r¬   c          	     ó  •— t          ¦   «                              |||||d |¬¦  «         ddlm}  ||¦  «        }	|	€J ‚|	| _        t
          j        j                             |	d ¦  «        | _	        | t
          j        j        |	<   d S )Nr5  r   )Ú_get_effect)
r   r�  Útorch._higher_order_ops.effectsr}  Úeffect_typerw   r"  Úeffectful_opsrå  Úprev_effect_buffer)r¹  rq  rè  rÇ	  r–  r°	  rÇ   rW	  r}  r  r¢  s             €r”   r�  zEffectfulKernel.__init__`*  s¥   ø€ õ 	‰Œ×ÒØØØØØØØ/ð 	ñ 	
ô 	
ð 	
ð 	@Ð?Ð?Ð?Ð?Ð?à!�k &Ñ)Ô)ˆØÐ&Ð&Ð&Ø&ˆÔÝ"#¤'Ô"7×";Ò";¸KÈÑ"NÔ"NˆÔØ-1�ŒÔ˜kÑ*Ð*Ð*r–   rj  c                óÜ   •— t          ¦   «                              ¦   «         }| j        �C|j                             t          j        | j                             ¦   «         ¦  «        ¦  «         |S r�   )r   rl  r�  rp  rá  rK   r½  r˜  )r¹  rÚ  r¢  s     €r”   rl  zEffectfulKernel.get_read_writes}*  sa   ø€ Ý‘g”g×-Ò-Ñ/Ô/ˆàÔ"Ð.ØÔ×!Ò!ÝÔ$ TÔ%<×%EÒ%EÑ%GÔ%GÑHÔHñô ð ð Ðr–   r    c                ó   — dS r£  r©   r¸  s    r”   r*  z EffectfulKernel.has_side_effects‡*  r×  r–   r�   rJ  r§  r–  )r¥   r¦   r§   r�  rl  r*  r‡  rˆ  s   @r”   r»   r»   _*  sŠ   ø€ € € € € ð )-ð2ð HLð2ð 2ð 2ð 2ð 2ð 2ð 2ð 2ð:ð ð ð ð ð ðð ð ð ð ð ð ð r–   r»   c                  óD   — e Zd Z ed ¦  «        	 d
dd„¦   «         Zdd„Zd	S )rÞ	  Fr�  r    r�   rš   c                ó   — t          ¦   «         S r�   r?   rw  s     r”   rx  z!NonTensorObj.get_free_symbol_usesŒ*  rt  r–   r8  c                ó   — d S r�   r©   r¸  s    r”   r*  zNonTensorObj.realize’*  r×  r–   Nr¢  r«  r™  )r¥   r¦   r§   rb   rx  r*  r©   r–   r”   rÞ	  rÞ	  ‹*  sZ   € € € € € ØÐ˜NÑ+Ô+à$)ðð ð ð ñ ,Ô+ðð
ð ð ð ð ð r–   rÞ	  c                  óN   — e Zd ZU ded<   ded<   dd„Zddd
„Zdd„Zdd„Zdd„ZdS )r	  rÃ   rÂ   ú%FakeScriptObject | torch.ScriptObjectr1  r�   c                ó   — | j         S r�   rÆ  r¸  s    r”   r˜  zTorchBindObject.get_name›*  r÷  r–   Nr+  r,  c                ó   — | j         S r�   rÆ  r.  s     r”   r/  z!TorchBindObject.codegen_referencež*  r÷  r–   c                ó   — | j         S r�   r5  r¸  s    r”   r¼	  zTorchBindObject.get_value¡*  r  r–   útorch.ScriptObjectc                óf   — t          | j        t          j        ¦  «        r| j        S | j        j        S r�   )r‘   r1  r-  rÚ  Úreal_objr¸  s    r”   Úget_real_objzTorchBindObject.get_real_obj¤*  s,   € Ý�d”j¥%Ô"4Ñ5Ô5ð 	'Ø”:Ðà”:Ô&Ð&r–   r’   c                ó>  — |                       ¦   «         }t          |¦  «        rdS t          |d¦  «        sJ ‚t          |                     ¦   «         ¦  «        }t          j        |¦  «        d         }d„ |D ¦   «         }t          j        t          j
        |d¦  «        S )Nr   Ú__obj_flatten__c                ó”   — g | ]E}t          |t          j        ¦  «        ¯|                     ¦   «         |                     ¦   «         z  ‘ŒFS r©   )r‘   r-  re  r…
  rö  r  s     r”   r×   z1TorchBindObject.get_buf_bytes.<locals>.<listcomp>´*  sQ   € ð 
ð 
ð 
àÝ˜!�Uœ\Ñ*Ô*ð
Ø�NŠNÑÔ˜qŸwšw™yœyÑ(ð
ð 
ð 
r–   )r�  r,   rà  r²   r‘  rf	  r´	  rì  r  Úoperatorrá  )r¹  Úreal_script_objÚ	flat_dictÚ
flat_elemsÚ
flat_sizess        r”   Úget_buf_byteszTorchBindObject.get_buf_bytesª*  s¤   € à×+Ò+Ñ-Ô-ˆå˜?Ñ+Ô+ð 	Ø�1å�Ð(9Ñ:Ô:Ð:Ð:Ð:Ý˜×8Ò8Ñ:Ô:Ñ;Ô;ˆ	ÝÔ(¨Ñ3Ô3°AÔ6ˆ
ð
ð 
àð
ñ 
ô 
ˆ
õ
 Ô¥¤¨j¸!Ñ<Ô<Ð<r–   rŸ  r�   rš  )r�   rˆ  )r�   rŒ  r©  )	r¥   r¦   r§   r¨   r˜  r/  r¼	  r�  r˜  r©   r–   r”   r	  r	  –*  s”   € € € € € € à€I€I�IØ0Ð0Ð0Ñ0ðð ð ð ðð ð ð ð ðð ð ð ð'ð 'ð 'ð 'ð=ð =ð =ð =ð =ð =r–   r	  c                  ó0   — e Zd ZU dZded<   dd„Zddd
„ZdS )ÚOpaqueValueTypeConstanta  IR node for opaque value type constants that appear directly in graph outputs.

    Unlike TorchBindObject (which references named constants loaded at runtime),
    this inlines the value's repr into the generated code since value types are
    reconstructed from their repr.
    r   r1  r�   rÃ   c                ó*   — t          | j        ¦  «        S r�   )r  r1  r¸  s    r”   r˜  z OpaqueValueTypeConstant.get_nameÇ*  s   € Ý�D”JÑÔÐr–   Nr+  r,  c                ó�   — t          | j        ¦  «        \  }}|                     ¦   «         D ]\  }}|t          j        j        |<   Œ|S r�   )r+   r1  rÎ  rw   r"  Úopaque_value_type_classes)r¹  r+  Úobj_reprÚopaque_typesr
  r0  s         r”   r/  z)OpaqueValueTypeConstant.codegen_referenceÊ*  sL   € Ý!4°T´ZÑ!@Ô!@Ñˆ�,Ø ×&Ò&Ñ(Ô(ð 	5ð 	5‰DˆAˆqØ34�AŒGÔ-¨aÑ0Ð0Øˆr–   rŸ  r�   rš  ©r¥   r¦   r§   r¯  r¨   r˜  r/  r©   r–   r”   rš  rš  ¼*  sX   € € € € € € ðð ð €J€J�Jð ð  ð  ð  ðð ð ð ð ð ð r–   rš  c                  ó6   — e Zd ZU ded<   ded<   dd„Zddd
„ZdS )r¶	  rÃ   rÂ   r2  r!  r�   c                ó   — | j         S r�   rÆ  r¸  s    r”   r˜  zGeneratorState.get_nameÖ*  r÷  r–   Nr+  r,  c                ó   — | j         S r�   rÆ  r.  s     r”   r/  z GeneratorState.codegen_referenceÙ*  r÷  r–   rŸ  r�   rš  )r¥   r¦   r§   r¨   r˜  r/  r©   r–   r”   r¶	  r¶	  Ñ*  sX   € € € € € € à€I€I�IØÐÐÑðð ð ð ðð ð ð ð ð ð r–   r¶	  c                  ó:   — e Zd ZU dZded<   ded<   dd„Zddd„ZdS )r¹	  zÜ
    Represents an opaque object (e.g., ProcessGroup) that is passed through
    as a graph input. Similar to GeneratorState, this wraps the object with
    its placeholder name so codegen can reference it properly.
    rÃ   rÂ   r   r1  r�   c                ó   — | j         S r�   rÆ  r¸  s    r”   r˜  zOpaqueObjectState.get_nameè*  r÷  r–   Nr+  r,  c                ó   — | j         S r�   rÆ  r.  s     r”   r/  z#OpaqueObjectState.codegen_referenceë*  r÷  r–   rŸ  r�   rš  r   r©   r–   r”   r¹	  r¹	  Ý*  sa   € € € € € € ðð ð €I€I�IØ€J€J�Jðð ð ð ðð ð ð ð ð ð r–   r¹	  c                  óX   — e Zd Zdd„Zdd„Zddd	„Zedd„¦   «         Zedd„¦   «         ZdS )Ú_CollectiveKernelr�   r    c                ó   — dS r8  r©   r¸  s    r”   rx  z!_CollectiveKernel.should_allocateð*  r:  r–   c                ó   — dS r£  r©   r¸  s    r”   r*  z"_CollectiveKernel.has_side_effectsó*  r×  r–   NrO	  r8  r¬   c                óÞ   — t          | j        ¦  «        t          j        j        u s
J d¦   «         ‚| j        }|�|| _        n|j        j        | _        d„ |j        j        D ¦   «         | _	        d S )Nz,Setting cpp kernel needs a valid op_overloadc                ó*   — g | ]}|j         ¯	|j        ‘ŒS r©   ro	  r  s     r”   r×   z9_CollectiveKernel.set_cpp_kernel_name.<locals>.<listcomp>+  s1   € ð .
ð .
ð .
Ø¸¼ð.
ØŒFð.
ð .
ð .
r–   )
r¾   rS	  r-  rq	  rr	  rO	  rs	  rÂ   rt	  rQ	  )r¹  rO	  rè  s      r”   r[	  z%_CollectiveKernel.set_cpp_kernel_nameø*  s‚   € Ý�DÔ$Ñ%Ô%­¬Ô)>Ð>Ð>Ð>Ø:ñ ?Ô>Ð>ð Ô!ˆØÐ&Ø#2ˆDÔ Ð à#)¤>Ô#6ˆDÔ ð.
ð .
Ø"œNÔ4ð.
ñ .
ô .
ˆÔ*Ð*Ð*r–   rè  r…   rŠ  úIRNode | list[IRNode]rÆ   r   rÇ   c                ó   ‡‡— t           j        j        5   | j        ||g|¢R i |¤Ž\  }}}}}	d d d ¦  «         n# 1 swxY w Y   |	rJ |› d|	› �¦   «         ‚d Š|D ]s}
t	          |
t
          ¦  «        rŒ|
                     ¦   «          t           j                             |
                     ¦   «         ¦  «         ‰€|
 	                    ¦   «         ŠŒt‰€J d|› d�¦   «         ‚ | t          ‰¬¦  «        ||||¦  «        Št          j        |¦  «        }‰j                             ˆˆfd„|D ¦   «         ¦  «         ‰j                             d„ |D ¦   «         ¦  «         d|v rq‰j                             t#          t          ‰¬¦  «        |d         ‰¦  «        ¦  «         ‰j                             |d                              ¦   «         ¦  «         d S d S )NrÄ  zIn-place collective zE requires at least one tensor argument; got only non-tensor IR nodes.rú  c                óN   •— g | ]!}t          t          ‰¬ ¦  «        |‰¦  «        ‘Œ"S r  r  )rÔ   rá  r!  r=  s     €€r”   r×   z4_CollectiveKernel.create_inplace.<locals>.<listcomp>3+  s0   ø€ ÐTÐTÐTÈ�^�J¨fÐ5Ñ5Ô5°s¸FÑCÔCÐTÐTÐTr–   c                ó6   — g | ]}|                      ¦   «         ‘ŒS r©   rn  rf  s     r”   r×   z4_CollectiveKernel.create_inplace.<locals>.<listcomp>7+  s    € Ð"BÐ"BÐ"B°c 3§<¢<¡>¤>Ð"BÐ"BÐ"Br–   r  )rw   r"  rœ  rÓ	  r‘   rÞ	  r*  r<  r˜  r+  r/  rf	  Útree_leavesr'  rï  r§  ró  r  )r  rè  rŠ  rÆ   rÇ   Ú_example_outputrÇ	  rÈ	  r°	  rW	  Ú
tensor_argÚinpsr!  r=  s               @@r”   Úcreate_inplacez _CollectiveKernel.create_inplace+  s†  øø€ õ ŒWÔð 	Dð 	Dð #�Ô" 6¨6ÐC°DÐCÐCÐC¸FÐCÐCñØØØØØ!ð	Dð 	Dð 	Dñ 	Dô 	Dð 	Dð 	Dð 	Dð 	Dð 	Dð 	Døøøð 	Dð 	Dð 	Dð 	Dð %ÐEÐE¨Ð&EÐ&EÐ2CÐ&EÐ&EÑEÔEÐ$ØˆØ%ð 	1ð 	1ˆJÝ˜*¥lÑ3Ô3ð ØØ×ÒÑ Ô Ð ÝŒG×'Ò'¨
×(;Ò(;Ñ(=Ô(=Ñ>Ô>Ð>Øˆ~Ø#×.Ò.Ñ0Ô0�øØÐ!Ð!ð7 6ð 7ð 7ð 7ñ "Ô!Ð!ð �Ý˜fÐ%Ñ%Ô%ØØØØñ
ô 
ˆõ Ô! &Ñ)Ô)ˆØÔ×&Ò&ØTÐTÐTÐTÐTÈtÐTÑTÔTñ	
ô 	
ð 	
ð
 	Ô×!Ò!Ð"BÐ"B¸TÐ"BÑ"BÔ"BÑCÔCÐCØ�Fˆ?ˆ?ØÔ#×*Ò*Ý�z°Ð8Ñ8Ô8¸&À¼-ÈÑPÔPñô ð ð Ô×%Ò% f¨U¤m×&<Ò&<Ñ&>Ô&>Ñ?Ô?Ð?Ð?Ð?ð ˆ?ó   ”9¹=Á =úTensorBox | list[TensorBox]ú%list[MultiOutput] | _CollectiveKernelc                óŒ  ‡ ‡— t           j        j        5   ‰ j        ||g|¢R i |¤Ž\  }}}}}	d d d ¦  «         n# 1 swxY w Y   |	rJ |› d|	› �¦   «         ‚|D ]+}
t	          |
t
          ¦  «        s|
                     ¦   «          Œ,t	          |t          ¦  «        r¾‰                      ||¦  «        }|€J ‚ ‰ t          |¬¦  «        ||||¦  «        Šˆ ˆfd„t          |¦  «        D ¦   «         ‰_        t          ‰j        |¦  «        D ]I\  }}t          j        st          |¦  «        s)t           j        j                             |j        ¦  «         ŒJ‰j        S  ‰ ‰                      |¦  «        ||||¦  «        Št          j        st          |¦  «        s)t           j        j                             ‰j        ¦  «         ‰g‰_        ‰S )Nr”  rú  c                ón   •— g | ]1\  }}t          ‰                     |¦  «        ‰t          |fg¦  «        ‘Œ2S r©   )rU  rh  r°   )rÔ   rÕ   rg  r  r=  s      €€r”   r×   z9_CollectiveKernel.create_out_of_place.<locals>.<listcomp>t+  sV   ø€ ð ð ð ñ �A�võ Ø×(Ò(¨Ñ0Ô0ØÝ˜A�Y�Kñô ðð ð r–   )rw   r"  rœ  rÓ	  r‘   r	  r*  r°   rØ  r,  r  rÜ  rÝ   rJ   r<  rt   rY  rá  rÂ   rh  )r  rè  rŠ  rÆ   rÇ   rÎ	  rÇ	  rÈ	  r°	  rW	  r³  r!  rá  rg  r=  s   `             @r”   Úcreate_out_of_placez%_CollectiveKernel.create_out_of_placeU+  s�  øø€ õ ŒWÔð 	Dð 	Dð #�Ô" 6¨6ÐC°DÐCÐCÐC¸FÐCÐCñØØØØØ!ð	Dð 	Dð 	Dñ 	Dô 	Dð 	Dð 	Dð 	Dð 	Dð 	Dð 	Døøøð 	Dð 	Dð 	Dð 	Dð %ÐFÐF¨Ð&FÐ&FÐ3DÐ&FÐ&FÑFÔFÐ$Ø%ð 	%ð 	%ˆJÝ˜j­/Ñ:Ô:ð %Ø×"Ò"Ñ$Ô$Ð$øå�n¥dÑ+Ô+ð %	Ø—_’_ [°.ÑAÔAˆFØÐ%Ð%Ð%Ø�SÝ!¨Ð0Ñ0Ô0ØØØØñô ˆFðð ð ð ð õ "+¨>Ñ!:Ô!:ðñ ô ˆFŒNõ  # 6¤>°>ÑBÔBð <ð <‘��VÝÔ:ð <ÕBSØñCô Cð <õ ”GÔ-×1Ò1°#´(Ñ;Ô;Ð;øØ”>Ð!à�SØ×$Ò$ ^Ñ4Ô4ØØØØñô ˆFõ Ô6ð ;Õ>OØñ?ô ?ð ;õ ”Ô)×-Ò-¨f¬kÑ:Ô:Ð:Ø$˜XˆFŒNØˆMr¶  r–  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§   rx  r*  r[	  r3  rµ  r»  r©   r–   r”   r¨  r¨  ï*  sš   € € € € € ðð ð ð ðð ð ð ð

ð 
ð 
ð 
ð 
ð( ð0@ð 0@ð 0@ñ „[ð0@ðP ð9ð 9ð 9ñ „[ð9ð 9ð 9r–   r¨  c                  ó2   ‡ — e Zd Z	 dddœdˆ fd„Zdd„Zˆ xZS )Ú_AllReduce_KernelNr•  rq  r<  rè  r…   rÇ	  r‹  r–  r2  r°	  rá  rÇ   rX	  rW	  r—  r�   r¬   c          	     ó‚   •— t          ¦   «                              |||||d |¬¦  «         |                      d¦  «         d S )Nr5  Ú+aoti_torch_cpu__c10d_functional_all_reduce_©r   r�  r[	  rP  s	           €r”   r�  z_AllReduce_Kernel.__init__“+  óX   ø€ õ 	‰Œ×ÒØØØØØØØ/ð 	ñ 	
ô 	
ð 	
ð 	× Ò Ð!NÑOÔOÐOÐOÐOr–   rx	  r|   c                ó¼   — |                      d¦  «         |                     | ¦  «         t          | j        t          ¦  «        r|                      |¦  «         d S d S ©Nz+torch/csrc/inductor/aoti_torch/c/shim_cpu.h©Úinclude_extra_headerr]
  r‘   rq  r
  r&
  rƒ	  s     r”   r„	  z_AllReduce_Kernel.codegen©+  óc   € Ø×$Ò$Ð%RÑSÔSÐSØ×,Ò,¨TÑ2Ô2Ð2å�d”k¥6Ñ*Ô*ð 	/Ø×%Ò% gÑ.Ô.Ð.Ð.Ð.ð	/ð 	/r–   r�   rJ  rI
  r®
  rˆ  s   @r”   r½  r½  ’+  su   ø€ € € € € ð )-ðPð HLðPð Pð Pð Pð Pð Pð Pð Pð,/ð /ð /ð /ð /ð /ð /ð /r–   r½  c                  ó2   ‡ — e Zd Z	 dddœdˆ fd„Zdd„Zˆ xZS )Ú_AllReduceKernelNr•  rq  r<  rè  r…   rÇ	  r‹  r–  r2  r°	  rá  rÇ   rX	  rW	  r—  r�   r¬   c          	     ó‚   •— t          ¦   «                              |||||d |¬¦  «         |                      d¦  «         d S )Nr5  Ú*aoti_torch_cpu__c10d_functional_all_reducerÀ  rP  s	           €r”   r�  z_AllReduceKernel.__init__²+  sX   ø€ õ 	‰Œ×ÒØØØØØØØ/ð 	ñ 	
ô 	
ð 	
ð 	× Ò Ð!MÑNÔNÐNÐNÐNr–   rx	  r|   c                ó¼   — |                      d¦  «         |                     | ¦  «         t          | j        t          ¦  «        r|                      |¦  «         d S d S rÃ  rÄ  rƒ	  s     r”   r„	  z_AllReduceKernel.codegenÈ+  rÆ  r–   r�   rJ  rI
  r®
  rˆ  s   @r”   rÈ  rÈ  ±+  su   ø€ € € € € ð )-ðOð HLðOð Oð Oð Oð Oð Oð Oð Oð,/ð /ð /ð /ð /ð /ð /ð /r–   rÈ  c                  ó^   ‡ — e Zd Z	 dddœdˆ fd„Zdd„Zd d„Zed!d„¦   «         Zd"ˆ fd„Zˆ xZ	S )#Ú_WaitKernelNr•  rq  r<  rè  r…   rÇ	  r‹  r–  r2  r°	  rá  rÇ   rX	  rW	  r—  r�   r¬   c          	     ó‚   •— t          ¦   «                              |||||d |¬¦  «         |                      d¦  «         d S )Nr5  Ú+aoti_torch_cpu__c10d_functional_wait_tensorrÀ  rP  s	           €r”   r�  z_WaitKernel.__init__Ñ+  rÁ  r–   rx	  r|   c                ó¼   — |                      d¦  «         |                     | ¦  «         t          | j        t          ¦  «        r|                      |¦  «         d S d S rÃ  rÄ  rƒ	  s     r”   r„	  z_WaitKernel.codegenç+  rÆ  r–   c                óž  — | j         d         }t          |t          ¦  «        sJ ‚t          |t          ¦  «        r<|j         d         }t          |t          ¦  «        sJ t	          |¦  «        ¦   «         ‚|gS t          |t
          ¦  «        rB|j         d         }t          |t          ¦  «        r|j        d         \  }}|j         |         gS g S g S r$  )rŠ  r‘   r‰   r¨  r¾   rU  rÛ  )r¹  r‘  rÕ   Úcollr  r   s         r”   Úget_volatile_readsz_WaitKernel.get_volatile_readsî+  sÉ   € ØŒk˜!ŒnˆÝ˜#�vÑ&Ô&Ð&Ð&Ð&Ý�cÕ,Ñ-Ô-ð 	à”
˜1”ˆAÝ˜a¥Ñ(Ô(Ð1Ð1­$¨q©'¬'Ñ1Ô1Ð(Ø�3ˆJÝ˜�[Ñ)Ô)ð 	ð ”:˜a”=ˆDå˜$Õ 1Ñ2Ô2ð *Øœ Qœ‘��3àœ CÔ(Ð)Ð)àˆIð ˆIr–   r‘  rˆ   c                ó¢  — t           j        j        5  |                      ||¦  «        \  }}}}}d d d ¦  «         n# 1 swxY w Y   |rJ |› d|› �¦   «         ‚ | t	          |                     ¦   «         ¬¦  «        ||||¦  «        }|j                             t          t	          |                     ¦   «         ¬¦  «        ||¦  «        ¦  «         d S )NrÄ  rú  )	rw   r"  rœ  rÓ	  r/  r+  r'  ró  r  )	r  rè  r‘  r²  rÇ	  rÈ	  r°	  rW	  r=  s	            r”   Úcreate_waitz_WaitKernel.create_wait,  s0  € åŒWÔð 	0ð 	0ð ×"Ò" 6¨3Ñ/Ô/ñØØØØØ!ð	0ð 	0ð 	0ñ 	0ô 	0ð 	0ð 	0ð 	0ð 	0ð 	0ð 	0øøøð 	0ð 	0ð 	0ð 	0ð %ÐEÐE¨Ð&EÐ&EÐ2CÐ&EÐ&EÑEÔEÐ$Ø�Ý˜cŸnšnÑ.Ô.Ð/Ñ/Ô/ØØØØñ
ô 
ˆð 	Ô×&Ò&Ý�:¨S¯^ª^Ñ-=Ô-=Ð>Ñ>Ô>ÀÀVÑLÔLñ	
ô 	
ð 	
ð 	
ð 	
s   ’;»?Á?rj  c                óö   •— t          ¦   «                              ¦   «         }|                      ¦   «         }|D ]@}|j                             t          j        |                     ¦   «         ¦  «        ¦  «         ŒA|S r�   )r   rl  rÓ  rp  rá  rK   r½  r˜  )r¹  rÚ  Úvolatile_readsÚvrr¢  s       €r”   rl  z_WaitKernel.get_read_writes,  sm   ø€ Ý‘g”g×-Ò-Ñ/Ô/ˆà×0Ò0Ñ2Ô2ˆØ ð 	Gð 	GˆBØÔ×!Ò!¥,Ô"6°r·{²{±}´}Ñ"EÔ"EÑFÔFÐFÐFØÐr–   r�   rJ  rI
  rp
  )rè  r…   r‘  rˆ   r�   r¬   r§  )
r¥   r¦   r§   r�  r„	  rÓ  r3  rÕ  rl  r‡  rˆ  s   @r”   rÍ  rÍ  Ð+  sÇ   ø€ € € € € ð )-ðPð HLðPð Pð Pð Pð Pð Pð Pð Pð,/ð /ð /ð /ðð ð ð ð2 ð
ð 
ð 
ñ „[ð
ð*ð ð ð ð ð ð ð ð ð r–   rÍ  r÷   r   c                ól  — t          | t          t          f¦  «        rt          | ¦  «        S t          | t          t
          f¦  «        r7t          t          j                 ¦   «         }| D ]}|t          |¦  «        z  }Œ|S t          | t          j        ¦  «        rt          | ¦  «        S t          ¦   «         S r�   )r‘   r=   r    r6   r±   r°   r@   r·   r"   rB
  r-  re  ©r÷   r  r0  s      r”   rB
  rB
  ),  s¤   € Ý�!•h¥Ð%Ñ&Ô&ð å$ QÑ'Ô'Ð'Ý	�A��t�}Ñ	%Ô	%ð 	Ý•u”|Ô$Ñ&Ô&ˆØð 	0ð 	0ˆAØÕ,¨QÑ/Ô/Ñ/ˆAˆAØˆÝ	�A•u”|Ñ	$Ô	$ð å$ QÑ'Ô'Ð'å‰|Œ|Ðr–   c                ól  — t          | t          t          f¦  «        rt          | ¦  «        S t          | t          t
          f¦  «        r7t          t          j                 ¦   «         }| D ]}|t          |¦  «        z  }Œ|S t          | t          j        ¦  «        rt          | ¦  «        S t          ¦   «         S r�   )r‘   r=   r    r5   r±   r°   r@   r·   r"   rC
  r-  re  rÚ  s      r”   rC
  rC
  9,  s    € Ý�!•h¥Ð%Ñ&Ô&ð å˜A‰ŒÐÝ	�A��t�}Ñ	%Ô	%ð 	Ý•u”|Ô$Ñ&Ô&ˆØð 	'ð 	'ˆAØÕ# AÑ&Ô&Ñ&ˆAˆAØˆÝ	�A•u”|Ñ	$Ô	$ð å˜A‰ŒÐå‰|Œ|Ðr–   r�  r   r
  útorch.fx.Nodec                ó`  — t          | t          ¦  «        �r�t          | j        t          ¦  «        �rtt          | j        j        t          ¦  «        r"| j        j                             d|¦  «         d S t          | j        j        t          ¦  «        �r| j        j                             d|¦  «         t          | j        j        t          ¦  «        rKt          | j        j        j        t          ¦  «        r'| j        j        j                             d|¦  «         d S t          | j        j        t          ¦  «        rn| j        j        j	        s_t          | j        j        j
        d         t          ¦  «        r7| j        j        j
        d                              d|¦  «         d S d S d S d S d S d S d S )Nr£  r   )r‘   rˆ   rp  r–  rà  r¾  r—  r¯  rU  rÛ  rŠ  )r�  r
  s     r”   Úassign_origin_noderÞ  I,  sµ  € õ �&�)Ñ$Ô$ñ T­°F´KÅÑ)LÔ)Lñ TÝ�f”kÔ&­Ñ.Ô.ð 	TØŒKÔ×/Ò/°¸qÑAÔAÐAÐAÐAÝ˜œÔ(­&Ñ1Ô1ñ 	TØŒKÔ×/Ò/°¸qÑAÔAÐAÝ˜&œ+Ô*­NÑ;Ô;ð 
TÅ
Ø”Ô Ô%¥uñAô Að 
Tð ”Ô Ô%×8Ò8¸ÈÑJÔJÐJÐJÐJõ ˜6œ;Ô+­[Ñ9Ô9ðTàœÔ(Ô0ðTõ ˜fœkÔ.Ô5°aÔ8½&ÑAÔAð TØ”KÔ$Ô+¨AÔ.×AÒAÀ-ÐQRÑSÔSÐSÐSÐSðTð Tð Tð Tð	Tð 	TðTð Tð Tð TðTð T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‰   r  r    r�   r  )r‹   r  r  r    r�   r  )r1  r2  r�   r3  )r‹   r7  r�   r8  )r‹   r>  r�   r    )r‹   rL  rM  r’   r�   r    )r]  r^  r_  r^  r`  r^  r�   r    )rg  r‰   rh  ri  r�   r‰   )r|  r}  r�   r¬   )rŠ  r‹  r�   rŒ  )r   r5  r   r  r�   rv   r’  )rh  rÃ   r   r  ri  r    r�   rj  )r  r^  r  r  rt  r    r�   r‰  rû	  )TFNFN)r‹   r‰   r?  r    rK  r    rL  rM  r[  r    rf  rM  r�   rN  )r‹   r‰   rL  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	  )rH  rN  r�   rÃ   )rÜ  r‹  r�   r    )rÆ   r�
  r�   r5  )r÷   rŒ   r�   r   )r�  r   r
  rÜ  r�   r¬   (i  Ú
__future__r   r³  rÍ  r°  rì  r  Úloggingr“  Útextwrapr¡  Úcollections.abcr   r   r   r   r   r	   r
   Úenumr   r   Únumbersr   Útypingr   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í  Útorch._library.custom_opsrµ  r  rà  r  r®  Útorch._loggingr-  Útorch.fxÚtorch.utils._pytreeÚ_pytreerf	  Útorch._dispatch.pythonr#   Útorch._dynamo.utilsr$   Útorch._export.serde.serializer%   Ú*torch._higher_order_ops.auto_functionalizer&   Útorch._inductorr'   r 	  r)   Ú"torch._library.fake_class_registryr*   Útorch._library.opaque_objectr+   r,   Útorch._prims_commonr-   r.   r/   r0   r1   r2   Ú%torch.fx.experimental.symbolic_shapesr3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   Útorch.fx.noder>   Útorch.utils._ordered_setr@   Útorch.utils._python_dispatchrA   Útorch.utils._sympy.functionsrB   rC   rD   rE   rF   rG   Útorch.utils._sympy.symbolrH   rî  rJ   rK   Úcodegen.commonrL   rM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   Ú	loop_bodyrW   Úops_handlerrX   rY   rZ   r[   Úruntime.benchmarkingr\   Úruntime.hintsr]   r^   r_   r`   ra   rb   rc   rd   re   rf   rg   rh   ri   rj   rk   rl   rm   rn   ro   rp   rq   rr   rs   rt   Úvirtualizedru   rv   rw   rx   ry   Útorch.typesrz   Úcodegen.cutlass.templater{   Úcodegen.wrapperr|   r"  r}   r~   rŒ   r¨   rD  Ú__version__r  r  ÚImportErrorr   r€   r�   r‚   r’   rƒ   r:  r„   rq	  rr	  r˜	  r…   Ú	getLoggerr¥   rð  rý  r†	  r²   rÃ   rŠ   r•   rÒ  r™   rÁ   rË   rÞ   râ   rë   rò  rô  rû   r  r  r  r6  r=  rI  rK  r\  rf  r{  r‰  r’  r™  r‰   r·  rà  r;  r=  rV  rg  r—  r™  r  r�  r’  r   r²  rÂ  rÞ  r  r  r&  rG  rJ  rr  rU  rW  r”  r´   r¤  rº  rÊ  rh  rv  r6  rB  r_  rf  rm  rw  r{  r<  r
  rs  r(  r  r#  r'  r/  r9  r—  rz  r±  r‚  rS  r‹  r¼   r¯  r  r²  rs  r    r°   ÚPrimitiveInfoTyper€  r¢  r¦  rÏ  rÚ  rà  rç  r	  r°  r	  r"	  r´  rE	  rI	  rß  rM
  rU
  r<	  r  rr
  rx
  ry
  r�
  r°
  r  r  r"  r,  r1  r9  rH  rV  rb  rr  rµ   r¶   r“  rg  rL  rR  r,  rU  r½   rs  rA  rD  rC  rˆ   r–  rÚ  râ  rä  r  r	  r9  r»   rÞ	  r	  rš  r¶	  r¹	  r¨  r½  rÈ  rÍ  rB
  rC
  rÞ  r©   r–   r”   ú<module>r     s$#  ðØ "Ð "Ð "Ð "Ð "Ð "Ð "à Ð Ð Ð Ø €€€Ø Ð Ð Ð Ø Ð Ð Ð Ø Ð Ð Ð Ø €€€Ø €€€Ø €€€Ø Ð Ð Ð Ø MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MØ :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð UÐ TÐ TÐ TÐ TÐ TÐ TÐ TÐ TÐ TÐ TÐ TÐ TÐ TÐ TÐ TØ Ð Ð Ð Ð Ð à €€€Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'à 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ø .Ð .Ð .Ð .Ð .Ð .Ð .Ð .Ð .Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø Ð Ð Ð Ø €€€Ø $Ð $Ð $Ð $Ð $Ð $Ð $Ð $Ð $Ø ;Ð ;Ð ;Ð ;Ð ;Ð ;Ø (Ð (Ð (Ð (Ð (Ð (Ø ?Ð ?Ð ?Ð ?Ð ?Ð ?Ø MÐ MÐ MÐ MÐ MÐ MØ #Ð #Ð #Ð #Ð #Ð #Ø 2Ð 2Ð 2Ð 2Ð 2Ð 2Ø ?Ð ?Ð ?Ð ?Ð ?Ð ?Ø MÐ MÐ MÐ MÐ MÐ MÐ MÐ Mðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð Ð Ð Ð Ð Ð Ø /Ð /Ð /Ð /Ð /Ð /Ø ?Ð ?Ð ?Ð ?Ð ?Ð ?ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð +Ð *Ð *Ð *Ð *Ð *à "Ð "Ð "Ð "Ð "Ð "Ð "Ð "ðð ð ð ð ð ð ð ð ð ð ð ð ð ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð  Ð Ð Ð Ð Ð Ø NÐ NÐ NÐ NÐ NÐ NÐ NÐ NÐ NÐ NÐ NÐ NØ -Ð -Ð -Ð -Ð -Ð -Ø :Ð :Ð :Ð :Ð :Ð :Ð :Ð :ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð0 *Ð )Ð )Ð )Ð )Ð )Ð )Ð )Ð )Ð )ð ð (ØBÐBÐBÐBÐBÐBØ&Ð&Ð&Ð&Ð&Ð&Ø'Ð'Ð'Ð'Ð'Ð'à9Ð9Ð9Ð9Ð9Ð9Ø5Ð5Ð5Ð5Ð5Ð5Ø$Ð$Ð$Ð$Ð$Ð$Ø%Ð%Ð%Ð%Ð%Ð%Ð%ð "(€OÐ'Ð'Ð'Ñ'ðØ€M€M€MàÔ'€NØ€J€JøØð ð ð Ø€NØ€J€J€Jðøøøð
 €Yˆt�_„_€Ø€WˆT�]„]€Ø€WˆT�]„]€Ø€WˆT�]„]€à˜D‘j€Ð  Ð  Ð  Ñ  Ø˜E‘k DÑ(€Ð (Ð (Ð (Ñ (àœ*Ô/°%´*Ô2PÑP€Ð PÐ PÐ PÑ Pà€gÔ˜Ñ!Ô!€Ø	ˆÔ	˜8œ?°4Ð	8Ñ	8Ô	8€Ø„y„~€ð'ðT  ØØØˆˆkÐ	ÔØØØØˆc�4˜˜[Ð(Ô)¨;¸À(ÐJÔKÈdÑRôðô	€ð 	ð 	ð 	ñ 	ñ)ð )ð )ð )ð €Ô˜dÐ#Ñ#Ô#ðð ð ð ð ñ ô ñ $Ô#ðñ$ $ð  $ð  $ð  $ñFð ð ð ñð ð ð ñð ð ð ñð ð ð ð !�L�LÐ Ø$�_�_Ð ð LPññ ð ð ð ñ	ð 	ð 	ð 	ð LPñ
ñ 
ð 
ð 
ð 
ð 
Ù UÑ UÐ UÐ Uñ 
„Ø Uð 
à27ññ ð ð ñ 
„ðð :?ññ ð ð ð ñDð ð ð ñ
>ð 
>ð 
>ð 
>ñ;ð ;ð ;ð ;ñ('ð 'ð 'ð 'ñ7ð 7ð 7ð 7ñ*ð ð ð ñ$$Gð $Gð $Gð $GñN'ð 'ð 'ð 'ñð ð ð ð;ð ;ð ;ðZ,ð Z,ð Z,ð Z,ð Z,ñ Z,ô Z,ð Z,ðz
 €�UÐÑÔðUð Uð Uð Uð Uñ Uô Uñ ÔðUðp ðP
ð P
ð P
ð P
ð P
ˆFñ P
ô P
ñ „ðP
ñf&ð &ð &ð &ð ð%
ð %
ð %
ð %
ð %
�ñ %
ô %
ñ „ð%
ðP ð
ð 
ð 
ð 
ð 
ˆiñ 
ô 
ñ „ð
ðF ˆ;�|Ñ$Ô$Øˆ;�yÑ!Ô!Øˆ;�yÑ!Ô!ØˆK˜ÑÔØˆ;�uÑÔØˆ;�uÑÔØˆ{˜=Ñ)Ô)ð<ð <Ð ð ð ð ñ ð JNñJNñ JNð JNð JNð JNðZ ðZ
ð Z
ð Z
ð Z
ð Z
�ñ Z
ô Z
ñ „ðZ
ð~ )-Ø�7˜1‘:”:ðñ ð ð ð ð& " 8¨D¤>°8¸D´>Ð"BÀHÐ"LÔM€Ð MÐ MÐ MÑ Mð7Sð 7Sð 7Sð 7Sð 7S˜9ñ 7Sô 7Sð 7Sðtkð kð kð kð kÐ'ñ kô kð kð\s
ð s
ð s
ð s
ð s
Ð1ñ s
ô s
ð s
ðl`
ð `
ð `
ð `
ð `
Ð+ñ `
ô `
ð `
ðF ðF
ð F
ð F
ð F
ð F
ˆ5ñ F
ô F
ñ „ðF
ðT ð	ð 	ð 	ð 	ð 	�ñ 	ô 	ñ „ð	ð ð[ð [ð [ð [ð [ˆ5ñ [ô [ñ „ð[ñ|ð ð ð ñð ð ð ñ(	ð 	ð 	ð 	ð Ø!Ø37ØØ48ñ9ñ 9ð 9ð 9ð 9ñxð ð ð ñð ð ð ð$ ð^
ð ^
ð ^
ð ^
ð ^
ˆvñ ^
ô ^
ñ „ñ^
ðB ð[ð [ð [ð [ð [‘ñ [ô [ñ „ñ[ð| ð4ð 4ð 4ð 4ð 4‘(ñ 4ô 4ñ „ñ4ðn ðA9ð A9ð A9ð A9ð A9‘(ñ A9ô A9ñ „ñA9ðH ð!ð !ð !ð !ð !‘(ñ !ô !ñ „ñ!ðH ð^ð ^ð ^ð ^ð ^‰;ñ ^ô ^ñ „ñ^ðB	 ðSð Sð Sð Sð S‘hñ Sô Sñ „ñSðl ð&ð &ð &ð &ð &‘ñ &ô &ñ „ñ&ðRlAð lAð lAð lAð lA‘ñ lAô lAñ lAð^ ðð ð ð ð �6ñ ô ñ „ñð" ðKð Kð Kð Kð K‰|ñ Kô Kñ „ñKð$ ðSð Sð Sð Sð S‘|ñ Sô Sñ „ñSñð ð ñ ñ(<ð <ð <ñ <ð7ð 7ð 7ð 7ð 7ñ 7ô 7ñ 7ð  ðp
ð p
ð p
ð p
ð p
‰Zñ p
ô p
ñ „ñp
ðf	Cð Cð Cð Cð C‘&ñ Cô Cñ Cð[Hð [Hð [Hð [Hð [H‘Vñ [Hô [Hñ [Hð|!Gð !Gð !Gð !Gð !G‘fñ !Gô !Gñ !GðHð ð ð ð �Tñ ô ñ ð%ð %ð %ð %ð %‘{ñ %ô %ñ %ðD ðð ð ð ð ‘ñ ô ñ „ñð.V*ð V*ð V*ð V*ð V*¡ñ V*ô V*ñ V*ðr €�UÐÑÔðEð Eð Eð Eð EˆV�]ñ Eô Eñ ÔñEðP €�UÐÑÔð&ð &ð &ð &ð &‘f˜iñ &ô &ñ Ôñ&ð ð ð ð ð ‘&ñ ô ñ ð
ð ð ð ð ‘Kñ ô ñ ð
ð 
ð 
ð 
ñ 
‘[ñ 
ô 
ñ 
ð& ðð ñ ð ñ ˜6ñ ô ñ „ñð( ðð ñ ð ñ ˜Fñ ô ñ „ñð  €�UÐÑÔðt4ð t4ñ t4ð t4ñ t4‘_ñ t4ô t4ñ Ôñt4ðn €Ô˜dÐ#Ñ#Ô#ðð ñ ð ñ ñ ô ñ $Ô#ñðf+ð f+ñ f+ð f+ñ f+‘_ñ f+ô f+ñ f+ðR<ð <ñ <ð <ñ <™>ñ <ô <ñ <ð~ ˜%‘K¡$Ñ&¨Ñ,©t°C¸#±IÀÑ4EÉÑ4LÔ/MÑMÑ ðLð Lñ Lð Lñ Lñ Lô Lñ Lð^"ð "ñ "ð "ñ "™|ñ "ô "ñ "ð
\Bð \Bñ \Bð \Bñ \BÑ.ñ \Bô \Bñ \Bð~5ð 5ñ 5ð 5ñ 5™Nñ 5ô 5ñ 5ð0(ð (ñ (ð (ñ (™ñ (ô (ñ (ð6ð ñ ð ñ ™Nñ ô ñ ð>Z%ð Z%ñ Z%ð Z%ñ Z%™Nñ Z%ô Z%ñ Z%ñz5ñ 5ð 5ñ 5ð €�UÐÑÔðRð Rñ Rð Rñ R‘?ñ Rô Rñ ÔñRðjð ñ ð ñ ‘ñ ô ñ ðOð Oñ Oð Oñ O‘9ñ Oô Oñ Oðd Õñ;ñ ;ð ;ñ Ôñ;ññ ð ñ ð €�UÐÑÔðtð tñ tð tñ t‘<ñ tô tñ Ôñtðn €�UÐÑÔð"ð "ñ "ð "ñ "‘lñ "ô "ñ Ôñ"ðJ
ð 
ñ 
ð 
ñ 
‘/ñ 
ô 
ñ 
ð(("ð ("ñ ("ð ("ñ ("™ñ ("ô ("ñ ("ðV
ð 
ñ 
ð 
ñ 
‘Vñ 
ô 
ñ 
ðB=ð =ñ =ð =ñ =‘Lñ =ô =ñ =ð@%
ð %
ñ %
ð %
ñ %
¡ñ %
ô %
ñ %
ðP
ð 
ñ 
ð 
ñ 
™-ñ 
ô 
ñ 
ð$<
ð <
ñ <
ð <
ñ <
‘\ñ <
ô <
ñ <
ð~uð uñ uð uñ u™lñ uô uñ uðp	))ð ))ñ ))ð ))ñ ))™|ñ ))ô ))ñ ))ðZ/ð /ñ /ð /ñ /™,ñ /ô /ñ /ðdð ñ ð ñ ¡<ñ ô ñ ð8Bð Bñ Bð Bñ BÑ5ñ Bô Bñ Bð$8ð 8ñ 8ð 8ñ 8Ñ-ñ 8ô 8ñ 8ð46)ð 6)ñ 6)ð 6)ñ 6)‘lñ 6)ô 6)ñ 6)ðr))ð ))ñ ))ð ))ñ ))‘|ñ ))ô ))ñ ))ðX;3ð ;3ñ ;3ð ;3ñ ;3‘ñ ;3ô ;3ñ ;3ð|1Eð 1Eñ 1Eð 1Eñ 1E¡ñ 1Eô 1Eñ 1Eðh51ð 51ñ 51ð 51ñ 51‘|ñ 51ô 51ñ 51ðp-ð -ñ -ð -ñ -‘Lñ -ô -ñ -ð8<;ð <;ñ <;ð <;ñ <;‘<ñ <;ô <;ñ <;ð~ €�UÐÑÔðð ñ ð ñ ñ ô ñ Ôñð
Að Añ Að Añ AÑ&ñ Aô Añ AðH €�UÐÑÔð
ð 
ñ 
ð 
ñ 
‘.ñ 
ô 
ñ Ôñ
ð@ ð  ñ  ð  ñ  ™ñ  ô  ñ  ð2 ðð ñ ð ñ ™
ñ ô ñ „ñðI
ð I
ñ I
ð I
ñ I
‘,ñ I
ô I
ñ I
ðX 
ð  
ñ  
ð  
ñ  
™ñ  
ô  
ñ  
ðF4ð 4ñ 4ð 4ñ 4™Kñ 4ô 4ñ 4ñ 2ñ 2ð 2ñ 2ðfð fñ fð fñ f™>ñ fô fñ fðV ÔðTð Tñ Tð Tñ T�ñ Tô Tñ ÔñTðn+ð +ñ +ð +ð +‘
ñ +ô +ñ +ð%ð %ñ %ð %ñ %‘ñ %ô %ñ %ðD €�UÐÑÔð'ð 'ñ 'ð 'ñ 'ˆvñ 'ô 'ñ Ôñ'ñLñ Lð Lñ Lð €�UÐÑÔðB.ð B.ñ B.ð B.ñ B.‘\ñ B.ô B.ñ ÔñB.ðJ €�UÐÑÔðe ð e ñ e ð e ñ e ‘,ñ e ô e ñ Ôñe ñP"ñ "ð "ñ "ð €�UÐÑÔð@ ð @ ñ @ ð @ ñ @ ‘ñ @ ô @ ñ Ôñ@ ðF
)ð )ñ )ð )ñ )‘nñ )ô )ñ )ðXð ñ ð ñ �6ñ ô ñ ð ð"=ð "=ñ "=ð "=ñ "=‘lñ "=ô "=ñ „ñ"=ðJ ðð ñ ð ñ ™lñ ô ñ „ñð( ðð ñ ð ñ ‘\ñ ô ñ „ñð ðð ñ ð ñ ™ñ ô ñ „ñð"`ð `ñ `ð `ñ `™ñ `ô `ñ `ðF/ð /ñ /ð /ñ /Ñ)ñ /ô /ñ /ð>/ð /ñ /ð /ñ /Ñ(ñ /ô /ñ /ð>Sð Sñ Sð Sñ SÑ#ñ Sô Sñ Sñrñ ð ñ ñ ñ ð ñ ñ Tñ Tð Tñ Tð Tð Ts   Ç:H È	HÈH