§
    ž²Åj§G ã                  ón  — 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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mZmZmZmZmZmZ d dlm Z m!Z!m"Z" d dl#m$Z$ d dl%Z%d d	l%m&Z&m'Z'm(Z( d dl)m*c m+c m,Z- d dl.Z/d dl0Z/d dl1m2c m3Z4 d d
l5m6Z6 d dl7m8Z8 d dl9m:Z: d dl;m<Z< d dl=m>Z>m?Z?m@Z@mAZAmBZB d dlCmDZD d dlEmFZFmGZGmHZHmIZImJZJmKZKmLZLmMZM d dlNmOZO d dlPmQZQmRZRmSZS d dlTmUZU ddlVmWZWmXZX ddlYmZZZm[Z[ ddlXm\Z\m]Z]m^Z^m_Z_m`Z` ddlambZb ddlcmdZdmeZe ddlfmgZg ddlhmiZimjZj ddl2mkZkmlZlmmZmmnZnmoZompZpmqZqmrZrmsZsmtZtmuZumvZvmwZwmxZxmyZymzZz ddl{m|Z|m}Z}m~Z~ erd dlm€Z€ ddl�m‚Z‚ dd lƒm„Z„ dd!l2m…Z… ne†Z‚d"e‡d#<    ed$¦  «        Zˆ ed%¦  «        Z‰ ed&¦  «        ZŠee‹e&f         ZŒd"e‡d'<   ee‹e�e&f         ZŽd"e‡d(<    ej�        e�¦  «        Z‘ ej        ej’        d)¬*¦  «        Z’e/j|        j“        Z“	 ee‹d+ee”d+f         d,d-eeee‹ee”d+f         d+d,d-f                           f         Z•d"e‡d.<   �d6d3„Z–�d7d7„Z—�d8d;„Z˜�d8d<„Z™�d9dB„Zšg dC¢Z›g dD¢Zœ	 �d:�d;dI„Z��d<dK„Zž	 �d:�d;dL„ZŸe�d=�d>dR„¦   «         Z e�d=�d?dT„¦   «         Z 	 �d=�d@dW„Z �dAd[„Z¡�dBd^„Z¢�dCd`„Z£�dCda„Z¤ G db„ d-¦  «        Z¥ esdc¬d¦  «         G de„ df¦  «        ¦   «         Z¦es G dg„ dhe¥¦  «        ¦   «         Z§�dDdn„Z¨es G do„ dpe§¦  «        ¦   «         Z©es G dq„ dre©¦  «        ¦   «         Zª e—ds¦  «         e—dt¦  «         e—du¦  «         e—dv¦  «         e—dw¦  «         e—dx¦  «        dyœZ«dze‡d{<   	 �d=�dEd„Z¬�dFd„„Z­es G d…„ d†e§¦  «        ¦   «         Z® G d‡„ dˆe®¦  «        Z¯es G d‰„ dŠe§¦  «        ¦   «         Z°es G d‹„ dŒe°¦  «        ¦   «         Z±es G d�„ dŽe§¦  «        ¦   «         Z²�dGd�„Z³�dGd�„Z´	 	 	 	 	 �dH�dId˜„Zµ ej        eµdM¬™¦  «        Z¶�dJdš„Z·es G d›„ dœe¥¦  «        ¦   «         Z¸es G d�„ dže¸¦  «        ¦   «         Z¹es G dŸ„ d e¸¦  «        ¦   «         Zºes G d¡„ d¢e¸¦  «        ¦   «         Z»es G d£„ d¤e¸¦  «        ¦   «         Z¼es G d¥„ d¦e¼¦  «        ¦   «         Z½es G d§„ d¨e¸¦  «        ¦   «         Z¾es G d©„ dªe¸¦  «        ¦   «         Z¿ G d«„ d¬e½¦  «        ZÀes G d­„ d®e¥¦  «        ¦   «         ZÁes G d¯„ d°eÁ¦  «        ¦   «         ZÂes G d±„ d²eÁ¦  «        ¦   «         ZÃ�dKdµ„ZÄ�dLd·„ZÅ G d¸„ d¹¦  «        ZÆes 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Ìes G dÆ„ dÇeÆ¦  «        ¦   «         ZÍ G dÈ„ dÉeÇ¦  «        ZÎ esdc¬d¦  «         G dÊ„ dËe¥¦  «        ¦   «         ZÏ esdc¬d¦  «         G dÌ„ dÍeÏe¦¦  «        ¦   «         ZÐ G dÎ„ dÏeÏ¦  «        ZÑ G dÐ„ dÑeÑ¦  «        ZÒ G dÒ„ dÓeÑ¦  «        ZÓes G dÔ„ dÕe¥¦  «        ¦   «         ZÔes G dÖ„ d×e¥¦  «        ¦   «         ZÕ esdc¬d¦  «         G dØ„ dÙeÐ¦  «        ¦   «         ZÖ G dÚ„ dÛeÐ¦  «        Z× G dÜ„ dÝe×¦  «        ZØee‹e�eÙe”eee‹e”e�eÙf                  f         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ß esdc¬d¦  «         G dè„ déeÐ¦  «        ¦   «         Zà G dê„ dëeà¦  «        Zá G dì„ díeá¦  «        Zâ esdc¬d¦  «         G dî„ dïeà¦  «        ¦   «         Zã esdc¬d¦  «         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é 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ï G �d„ �d	eã¦  «        Zð G �d
„ �deä¦  «        Zñ G �d„ �deã¦  «        Zò G �d„ �deã¦  «        Zó esdc¬d¦  «         G �d„ �d¦  «        ¦   «         Zô G �d„ �deæ¦  «        Zõ esdc¬d¦  «         G �d„ �deõ¦  «        ¦   «         Zöes G �d„ �deÆ¦  «        ¦   «         Z÷ G �d„ �deã¦  «        Zøejù         G �d„ �de¥¦  «        ¦   «         Zú G �d„ d+eú¦  «        Zû G �d„ �deú¦  «        Zü esdc¬d¦  «         G �d„ �d e¥¦  «        ¦   «         Zý�dM�d#„Zþ esdc¬d¦  «         G �d$„ �d%eã¦  «        ¦   «         Zÿ esdc¬d¦  «         G �d&„ �d'eã¦  «        ¦   «         �Z  esdc¬d¦  «         G �d(„ �d)eã¦  «        ¦   «         �Z G �d*„ �d+eõ¦  «        �Zes G �d,„ �d-e¥¦  «        ¦   «         �Z G �d.„ �d/eõ¦  «        �Z G �d0„ �d1�e¦  «        �Z�dN�d5„�ZdS (O  é    )ÚannotationsN)Únullcontext)ÚEnum)Úpartial)ÚAnyÚCallableÚClassVarÚContextManagerÚDictÚ	GeneratorÚIterableÚListÚLiteralÚOptionalÚoverloadÚSequenceÚSetÚTupleÚTYPE_CHECKINGÚTypeVarÚUnion)Úassert_neverÚNeverÚ	TypeAlias)Úpatch)ÚExprÚIntegerÚSymbol)Úidentity)ÚGraphModuleSerializer)Úcan_auto_functionalize)Úmetrics)Úcompute_required_storage_lengthÚis_boolean_dtypeÚis_float_dtypeÚmake_channels_last_strides_forÚ
StrideType)Úget_schema_info)ÚCallMethodKeyÚcompute_unbacked_bindingsÚDivideByKeyÚfree_unbacked_symbolsÚrebind_unbackedÚresolve_unbacked_bindingsÚShapeEnvÚSymTypes©Ú
OrderedSet)ÚCleanDivÚFloorDivÚModularIndexing)ÚSymTé   )ÚconfigÚdependencies)ÚBackendFeatureÚindex_prevent_reordering)ÚDepÚextract_free_unbacked_symbolsÚ#extract_input_node_reduction_rangesÚextract_read_writesÚvar_builder)ÚLoopBody)ÚOpCounterCSEÚOpCountResult)Úbenchmarker)ÚDevicePropertiesÚReductionHint)ÚargsortÚargsort_symÚcache_on_selfÚceildivÚconvert_shape_to_inductorÚconvert_shape_to_symintÚdeveloper_warningÚget_kernel_metadataÚir_dataclassÚ
is_dynamicÚis_gpuÚ	sympy_dotÚsympy_index_symbolÚsympy_index_symbol_with_prefixÚsympy_productÚ
sympy_subs)ÚopsÚOpsValueÚV)ÚNode)ÚCUDATemplate)ÚGraphLowering)ÚIndentedBufferr   r[   Ú_TÚ_UÚ_VÚ_IntLikeÚ_NumLikez  ©ÚprefixÚ	TensorBoxr   ÚIRNodeÚ_NodeOrNodesÚnode_or_nodesúOptional[_NodeOrNodes]ÚreturnÚNonec                ó*   ‡— dˆfd„Š ‰| ¦  «         d S )NÚnodesri   rj   rk   c                óÐ  •— | €d S t          | t          t          f¦  «        r| D ]} ‰|¦  «         Œd S t          | t          ¦  «        r$|                      ¦   «         D ]} ‰|¦  «         Œd S t          | t
          j        j        j        t          t          t          t          j        j        j        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])Ú
isinstanceÚlistÚtupleÚdictÚvaluesÚtorchÚ	_inductorÚirÚ
ExpandViewÚDynamicScalarÚAssertScalarre   ÚsympyÚlogicÚboolalgÚBooleanr   ÚintÚEffectfulKernelÚtype)rm   ÚnodeÚ_check_tensorboxs     €úCC:\Projects\Historical\venv\Lib\site-packages\torch/_inductor/ir.pyr‚   z%validate_ir.<locals>._check_tensorbox´   s  ø€ ð ˆ=ØˆDÝ˜¥¥e˜}Ñ-Ô-ð 	kØð 'ð '�Ø Ð  Ñ&Ô&Ð&Ð&ð'ð 'å˜�tÑ$Ô$ð 	kØŸš™œð 'ð '�Ø Ð  Ñ&Ô&Ð&Ð&ð'ð 'õ Øå”OÔ&Ô1Ý!Ý ÝÝ”KÔ'Ô/ÝÝÝ#ð	ñô ð kð kð k�˜U™œÐjÐjÐjñkô kð ð kð kó    )rm   ri   rj   rk   © )rh   r‚   s    @rƒ   Úvalidate_irr†   ³   s@   ø€ ðkð kð kð kð kð kð6 Ð�]Ñ#Ô#Ð#Ð#Ð#r„   ÚnameÚstrúCallable[..., OpsValue]c                óB   ‡ — t          ‰ t          ¦  «        sJ ‚dˆ fd„}|S )NÚargsÚobjectÚkwargsrj   rX   c                 ó:   •—  t          t          ‰¦  «        | i |¤ŽS ©N)ÚgetattrrW   )r‹   r�   r‡   s     €rƒ   Úfnzops_wrapper.<locals>.fnÕ   s"   ø€ Ø!�w•s˜DÑ!Ô! 4Ð2¨6Ð2Ð2Ð2r„   )r‹   rŒ   r�   rŒ   rj   rX   )ro   rˆ   )r‡   r‘   s   ` rƒ   Úops_wrapperr’   Ò   s>   ø€ Ý�d�CÑ Ô Ð Ð Ð ð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]rj   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˜   rj   r˜   )rr   Ú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˜   rj   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˜   rj   úSequence[_V]c                ó,   •—  ‰ ‰| ¦  «        ¦  «        S r�   r…   )r—   rª   r¬   s    €€rƒ   r¢   z fuse_reindexing.<locals>.reindexñ   s   ø€ Øˆx˜˜ ™œÑ(Ô(Ð(r„   )r—   r˜   rj   r°   r…   )rª   r¬   r¢   s   `` rƒ   Úfuse_reindexingr²   í   s.   øø€ ð)ð )ð )ð )ð )ð )ð )ð €Nr„   )é   r   é   r7   )é   r   r³   r´   r7   Úseqú(Sequence[Union[int, torch.SymInt, Expr]]Ú	shape_envúOptional[ShapeEnv]c                óJ   — |€t          | ¦  «        }nt          || ¦  «        }|S )z1
    Convert strides to fill order (argsort)
    )rG   rH   )r¶   r¸   Ú
sorted_idxs      rƒ   Úget_fill_orderr¼   û   s.   € ð ÐÝ$+¨C¡L¤Lˆ
ˆ
õ ! ¨CÑ0Ô0ˆ
ØÐr„   úSequence[Union[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>  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>  s   ø€ Ð7Ð7Ð7 �&˜”)Ð7Ð7Ð7r„   )Ú	enumerater¡   r    )r“   Ú
fill_orderrÆ   s     @rƒ   Ústride_order2fill_orderrÉ   	  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>  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„   TÚxúLiteral[None]Úguard_shapeÚboolc                ó   — d S r�   r…   ©rÒ   rÔ   s     rƒ   Úir_node_to_tensorrØ   "  ó   € à€Cr„   útorch.Tensorc                ó   — d S r�   r…   r×   s     rƒ   rØ   rØ   '  rÙ   r„   úOptional[IRNode]úOptional[torch.Tensor]c                óŽ  ‡— | €d S |s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›   ÚsÚshape_fns     €rƒ   rž   z%ir_node_to_tensor.<locals>.<listcomp>7  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)rY   ÚgraphÚsizevarsÚ	size_hintr   Úget_sizeÚis_storage_and_layoutÚ
get_layoutrå   ÚFlexibleLayoutÚcontiguous_stridesÚ	get_dtypeÚ
get_devicerL   r¸   Úsuppress_guardsrt   Úempty_stridedÚzero_)rÒ   rÔ   rä   rå   ræ   rç   Útrâ   s          @rƒ   rØ   rØ   ,  sm  ø€ ð 	€yØˆtð ð Ý”7Ô#Ô-ˆˆåˆØ.Ð.Ð.Ð. §¢¡¤Ð.Ñ.Ô.€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úOptional[Sequence[_T]]ú Optional[Sequence[Optional[_T]]]c                ó:   — t          | t          ¦  «        r| sd gS | S r�   )ro   rp   ©rö   s    rƒ   Úmay_convert_to_optionalrû   H  s+   € õ �%�ÑÔð  uð ð ˆvˆØ€Lr„   ú2Union[IRNode, OutputSpec, torch.device, None, str]úOptional[str]c                ó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(ú: ú))ro   rˆ   rt   rç   r€   rf   Ú
OutputSpecÚget_device_typerñ   r   Ú__name__©rÒ   s    rƒ   r  r  R  s˜   € õ �!•SÑÔð /˜Q˜YØˆÝ	�A•u”|Ñ	$Ô	$ð /ØŒvˆÝ	�A�¥
Ð+Ñ	,Ô	,ð /Ý˜qŸ|š|™~œ~Ñ.Ô.Ð.ÝÐ< AÐ<Ð<­¨a©¬Ô)9Ð<Ð<Ð<Ñ=Ô=Ð=Ð=Ð=r„   ú&Union[IRNode, torch.device, None, str]c                ó:   — t          t          | ¦  «        ¦  «        S r�   )rQ   r  r  s    rƒ   Ú	is_tritonr  ^  s   € Ý•/ !Ñ$Ô$Ñ%Ô%Ð%r„   c                ó(   — t          | ¦  «        dk    S )NÚcpu)r  r  s    rƒ   Úis_cpur
  b  s   € Ý˜1ÑÔ Ò&Ð&r„   c                  óÎ  — e Zd ZU  e¦   «         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        dvd„¦   «         ¦   «         Zdwd„Zdxd„Zdyd„Zdzd„Zd{d„Zd|d„Zd}d~d „Z	 dd€d$„Zd�d&„Zd‚d(„Zdƒd*„Zd„d,„Zd…d.„Zd†d0„Zd‡d1„Zdˆd3„Zd‰d5„Ze dŠd7„¦   «         Z!d‹d9„Z"d‡d:„Z#dŒd<„Z$d�dŽd@„Z%d�dB„Z&d�dD„Z'd‡dE„Z(d‘dG„Z)d’dI„Z*d“dK„Z+d‰dL„Z,d”dM„Z-dŒdN„Z.d�d•dQ„Z/d–dT„Z0dxdU„Z1d—dV„Z2dxdW„Z3	 d˜d™d[„Z4dšd\„Z5d›d_„Z6	 d˜dœda„Z7d�dc„Z8džde„Z9dŸdf„Z:d dh„Z;d¡dj„Z<dŒdk„Z=d¢dm„Z>d‡dn„Z?d‡do„Z@d£dq„ZAd¤dr„ZBd”ds„ZCd¤dt„ZDeEre d�du„¦   «         ZFd=S d=S )¥rf   zClassVar[OrderedSet[Any]]Ú_current_originsF)ÚinitúOrderedSet[Any]ÚoriginsúOptional[List[str]]Ú	tracebackúOptional[torch.fx.Node]Úorigin_nodeúOrderedSet[Node]rj   úGenerator[None, None, None]c              #  ó„   K  — t           j        }|| z  t           _        	 d V — |t           _        d S # |t           _        w xY wr�   )rf   r  )r  Úolds     rƒ   Úcurrent_originszIRNode.current_originsn  sL   è è € õ Ô%ˆØ"%¨¡-�Ôð	*ØˆEˆEˆEà&)�FÔ#Ð#Ð#ø c�FÔ#Ð)Ð)Ð)Ð)s   Ÿ1 ±?Úattrrˆ   rö   r   rk   c                ó>   — t                                | ||¦  «         d S r�   )rŒ   Ú__setattr__)Úselfr  rö   s      rƒ   Ú_post_init_setattrzIRNode._post_init_setattrx  s"   € õ 	×Ò˜4  uÑ-Ô-Ð-Ð-Ð-r„   c                óì   — |                       dt          | j        ¦  «        ¦  «         |                       dt          j        rt          j        ¦   «         nd ¦  «         |                       dd ¦  «         d S )Nr  r  r  )r  r2   r  r8   Údebug_ir_tracebackr  Úformat_stack©r  s    rƒ   Ú__post_init__zIRNode.__post_init__~  su   € Ø×Ò 	­:°dÔ6KÑ+LÔ+LÑMÔMÐMØ×ÒØµVÔ5NÐX�Ô/Ñ1Ô1Ð1ÐTXñ	
ô 	
ð 	
ð 	×Ò ¨tÑ4Ô4Ð4Ð4Ð4r„   úOrderedSet[str]c                óX   — t          d„ |                      ¦   «         D ¦   «         ¦  «        S )Nc              3  ó$   K  — | ]}|j         V — Œd S r�   ©r‡   ©r›   Údeps     rƒ   ú	<genexpr>z(IRNode.get_read_names.<locals>.<genexpr>†  ó$   è è € Ð?Ð? s˜#œ(Ð?Ð?Ð?Ð?Ð?Ð?r„   ©r2   Ú	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„   úOptional[Operation]c                ó   — d S r�   r…   r!  s    rƒ   Úget_defining_opzIRNode.get_defining_opŽ  ó   € Øˆtr„   TÚshortenrÕ   úSequence[str]c                ót   — dt          | dd¦  «        › �}|r t          |¦  «        dk    r|d d…         › d�}|gS )Nzorigins=r  Ú é@   é=   z...)r�   r    )r  r9  r  s      rƒ   Úcommon_reprzIRNode.common_repr‘  sQ   € Ø;�W T¨9°bÑ9Ô9Ð;Ð;ˆØð 	+•s˜7‘|”| bÒ(Ð(à   " œÐ*Ð*Ð*ˆGØˆ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   )rp   r?  Úmaprˆ   ÚindentÚjoinr€   r  )r  r@  r9  rB  Ú	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£  s
   € ØŒzÐr„   úOptional[torch.dtype]c                ó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 ú!©rO  r€   r!  s    rƒ   rí   zIRNode.get_layout¬  s"   € Ý!Ð"UÍÈTÉ
Ì
Ð"UÐ"UÐ"UÑVÔVÐVr„   úOptional[Layout]c                óN   — 	 |                       ¦   «         S # t          $ r Y d S w xY wr�   )rí   rO  r!  s    rƒ   Úmaybe_get_layoutzIRNode.maybe_get_layout¯  ó9   € ð	Ø—?’?Ñ$Ô$Ð$øÝ"ð 	ð 	ð 	Ø�4�4ð	øøørQ  r  c                ó*   — |                       ¦   «         S r�   )rí   r!  s    rƒ   Úget_output_speczIRNode.get_output_specµ  s   € Ø�ŠÑ Ô Ð r„   úOptional[OutputSpec]c                óN   — 	 |                       ¦   «         S # t          $ r Y d S w xY wr�   )r[  rO  r!  s    rƒ   Úmaybe_get_output_speczIRNode.maybe_get_output_spec¸  s;   € ð	Ø×'Ò'Ñ)Ô)Ð)øÝ"ð 	ð 	ð 	Ø�4�4ð	øøørQ  c                óP   — t          |                      ¦   «         t          ¦  «        S )z4True for single tensor output (excludes MultiOutput))ro   r^  rR  r!  s    rƒ   Úhas_tensor_outputzIRNode.has_tensor_output¾  s   € å˜$×4Ò4Ñ6Ô6½Ñ?Ô?Ð?r„   úSequence[Expr]c                óB   — t          dt          | ¦  «        › d�¦  «        ‚)Nz!get_size() is not implemented by rT  rU  r!  s    rƒ   rë   zIRNode.get_sizeÂ  s"   € Ý!Ð"SÅdÈ4ÁjÄjÐ"SÐ"SÐ"SÑTÔTÐTr„   úOptional[Sequence[_IntLike]]c                óN   — 	 |                       ¦   «         S # t          $ r Y d S w xY wr�   )rë   rO  r!  s    rƒ   Úmaybe_get_sizezIRNode.maybe_get_sizeÅ  ó7   € ð	Ø—=’=‘?”?Ð"øÝ"ð 	ð 	ð 	Ø�4�4ð	øøørQ  ú.Union[_IntLike, sympy.Rel, Sequence[_IntLike]]c                ó*   — |                       ¦   «         S r�   ©rë   r!  s    rƒ   ÚshapezIRNode.shapeË  s   € à�}Š}‰ŒÐr„   r   c                óD   — t          |                      ¦   «         ¦  «        S r�   )rU   rë   r!  s    rƒ   Ú	get_numelzIRNode.get_numelÏ  s   € Ý˜TŸ]š]™_œ_Ñ-Ô-Ð-r„   c                ó”   — t           j        j                             t	          j        |                      ¦   «         d¦  «        ¦  «        S ©Nr   ©rY   rè   ré   Úis_expr_static_and_truerz   ÚEqrl  r!  s    rƒ   Úis_zero_elementszIRNode.is_zero_elementsÒ  ó2   € ÝŒwÔ×7Ò7½¼ÀÇÂÑAQÔAQÐSTÑ8UÔ8UÑVÔVÐVr„   rý   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 rU  r!  s    rƒ   ÚrealizezIRNode.realizeÕ  s!   € õ  "Ð"@µD¸±J´JÐ"@Ð"@ÑAÔAÐAr„   NÚwriterúOptional[IndentedBuffer]c                ó@   — t          dt          | ¦  «        › �¦  «        ‚)Nzcodegen_reference NYI on rU  ©r  rv  s     rƒ   Úcodegen_referencezIRNode.codegen_referenceç  s   € Ý!Ð"J½dÀ4¹j¼jÐ"JÐ"JÑKÔKÐKr„   úOptional[torch.device]c                ó   — d S r�   r…   r!  s    rƒ   rñ   zIRNode.get_deviceê  r8  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�   ©rO  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„   úSequence[_IntLike]c                óD   — t          t          | ¦  «        j        ¦  «        ‚r�   rˆ  r!  s    rƒ   Ú
get_stridezIRNode.get_strideû  rŠ  r„   c                óN   — 	 |                       ¦   «         S # t          $ r Y d S w xY wr�   )r�  rO  r!  s    rƒ   Úmaybe_get_stridezIRNode.maybe_get_strideþ  rY  rQ  c                óD   — t          t          | ¦  «        j        ¦  «        ‚r�   rˆ  r!  s    rƒ   Úget_namezIRNode.get_name  rŠ  r„   c                óN   — 	 |                       ¦   «         S # t          $ r Y d S w xY wr�   )r”  rO  r!  s    rƒ   Úmaybe_get_namezIRNode.maybe_get_name  rf  rQ  Ú	thresholdúOptional[int]c                ó   — dS rƒ  r…   ©r  r—  s     rƒ   Úhas_large_inner_fnzIRNode.has_large_inner_fn  r…  r„   Úusersr~   c                ó   — d S r�   r…   ©r  rœ  s     rƒ   Ú
mark_reusezIRNode.mark_reuse  ó   € Øˆr„   c                ó   — d S r�   r…   r!  s    rƒ   Úrealize_hintzIRNode.realize_hint  r   r„   c                óD   — t          t          | ¦  «        j        ¦  «        ‚r�   rˆ  r!  s    rƒ   Úunwrap_viewzIRNode.unwrap_view  rŠ  r„   c                óD   — t          t          | ¦  «        j        ¦  «        ‚r�   rˆ  r!  s    rƒ   Úfreeze_layoutzIRNode.freeze_layout  rŠ  r„   r“   ú	List[int]Úallow_paddingc                óD   — t          t          | ¦  «        j        ¦  «        ‚r�   rˆ  ©r  r“   r¨  s      rƒ   Úfreeze_layout_with_stride_orderz&IRNode.freeze_layout_with_stride_order  ó   € õ "¥$ 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_order!  rŠ  r„   rå   úList[_IntLike]c                óD   — t          t          | ¦  «        j        ¦  «        ‚r�   rˆ  ©r  rå   s     rƒ   Úfreeze_layout_with_same_orderz$IRNode.freeze_layout_with_same_order$  rŠ  r„   Úexact_stridesc                óD   — t          t          | ¦  «        j        ¦  «        ‚r�   rˆ  ©r  r´  r¨  s      rƒ   Ú freeze_layout_with_exact_stridesz'IRNode.freeze_layout_with_exact_strides'  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�   ©rº  Úreadsr!  s    rƒ   r,  zIRNode.get_reads/  ó   € Ø×#Ò#Ñ%Ô%Ô+Ð+r„   c                óD   — t          |                      ¦   «         ¦  «        S r�   )r    r,  r!  s    rƒ   Ú	num_readszIRNode.num_reads2  s   € Ý�4—>’>Ñ#Ô#Ñ$Ô$Ð$r„   ra   c                óD   — t          t          | ¦  «        j        ¦  «        ‚r�   rˆ  r!  s    rƒ   Úget_storage_numelzIRNode.get_storage_numel5  rŠ  r„   úOrderedSet[Symbol]c                óD   — t          t          | ¦  «        j        ¦  «        ‚r�   rˆ  r!  s    rƒ   Úget_unbacked_symbol_useszIRNode.get_unbacked_symbol_uses8  rŠ  r„   c                óD   — t          t          | ¦  «        j        ¦  «        ‚r�   rˆ  r!  s    rƒ   Úget_reduction_typezIRNode.get_reduction_type;  rŠ  r„   úSequence[sympy.Expr]c                óD   — t          t          | ¦  «        j        ¦  «        ‚r�   rˆ  r!  s    rƒ   Úget_reduction_sizezIRNode.get_reduction_size>  rŠ  r„   c                ó   — dS rƒ  r…   r!  s    rƒ   Ú	is_externzIRNode.is_externA  r…  r„   c                ó   — dS rƒ  r…   r!  s    rƒ   Úis_no_opzIRNode.is_no_opD  r…  r„   rç   c                óD   — t          t          | ¦  «        j        ¦  «        ‚r�   rˆ  r€  s     rƒ   Úconstant_to_devicezIRNode.constant_to_deviceG  rŠ  r„   c                óD   — t          t          | ¦  «        j        ¦  «        ‚r�   rˆ  r!  s    rƒ   Úget_mutation_nameszIRNode.get_mutation_namesJ  rŠ  r„   c                óD   — t          t          | ¦  «        j        ¦  «        ‚r�   rˆ  r!  s    rƒ   Úget_operation_namezIRNode.get_operation_nameM  rŠ  r„   c                óD   — t          t          | ¦  «        j        ¦  «        ‚r�   rˆ  r!  s    rƒ   Úget_inputs_that_alias_outputz#IRNode.get_inputs_that_alias_outputP  rŠ  r„   c                ó   — d S r�   r…   r!  s    rƒ   ræ   zIRNode.dtypeU  s   € àˆCr„   )r  r  rj   r  )r  rˆ   rö   r   rj   rk   ©rj   rk   ©rj   r#  )rj   r  ©rj   r  ©rj   r5  ©T)r9  rÕ   rj   r:  )TT)r@  rA  r9  rÕ   rB  rÕ   rj   rˆ   ©rj   rJ  )rj   rM  ©rj   rR  )rj   rV  ©rj   r  )rj   r\  ©rj   rÕ   ©rj   ra  )rj   rc  )rj   rg  ©rj   r   ©rj   rý   r�   ©rv  rw  rj   rˆ   ©rj   r{  ©rj   r}  ©rj   r†  ©rj   r‹  ©rj   rŽ  ©rj   rˆ   ©r—  r˜  rj   rÕ   ©rœ  r~   rj   rk   ©rj   rf   ©F©r“   r§  r¨  rÕ   rj   rk   ©r“   r§  rj   rk   ©rå   r°  rj   rk   ©r´  r°  r¨  rÕ   rj   rk   ©rj   r¸  ©rj   r»  ©rj   r~   ©rj   ra   ©rj   rÄ  ©rj   rÉ  ©rç   r}  rj   rf   ©rj   r:  )Gr  Ú
__module__Ú__qualname__r2   r  Ú__annotations__ÚdataclassesÚfieldr  r  r  ÚstaticmethodÚ
contextlibÚcontextmanagerr  r  r"  r-  r0  r3  r7  r?  rI  rð   rP  rí   rX  r[  r^  r`  rë   re  Úpropertyrj  rl  rr  ru  rz  rñ   r�  r„  r‰  r�  r�  r’  r”  r–  r›  rŸ  r¢  r¤  r¦  r«  r¯  r³  r·  rº  r,  rÁ  rÃ  rÆ  rÈ  rË  rÍ  rÏ  rÑ  rÓ  rÕ  r×  r   ræ   r…   r„   rƒ   rf   rf   f  so  € € € € € € Ø2<°*±,´,ÐÐ>Ð>Ð>Ñ>ð  1˜{Ô0°eÐ<Ñ<Ô<€GÐ<Ð<Ð<Ñ<Ø%6 [Ô%6¸EÐ%BÑ%BÔ%B€IÐBÐBÐBÑBØ+<¨;Ô+<À%Ð+HÑ+HÔ+H€KÐHÐHÐHÑHàØÔð*ð *ð *ñ Ôñ „\ð*ð.ð .ð .ð .ð5ð 5ð 5ð 5ð@ð @ð @ð @ðð ð ð ð ð  ð  ð  ðð ð ð ðð ð ð ð ð PTð	5ð 	5ð 	5ð 	5ð 	5ðð ð ð ðð ð ð ðWð Wð Wð Wðð ð ð ð!ð !ð !ð !ðð ð ð ð@ð @ð @ð @ðUð Uð Uð Uðð ð ð ð ðð ð ñ „Xðð.ð .ð .ð .ðWð Wð Wð Wð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ðð ð ð ðð ð ð ð ðð ð ð ðð ð ð ð7ð 7ð 7ð 7ð7ð 7ð 7ð 7ð 7<ð7ð 7ð 7ð 7ð 7ð
7ð 7ð 7ð 7ð7ð 7ð 7ð 7ð DIð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„   F)Úfrozenc                  ó†   — 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d(d„Zd)d„Zd*d„Zd*d„Zd+d„ZdS ),Ú	Operationrj   rk   c                ó   — d | _         d S r�   ©Úoperation_namer!  s    rƒ   r"  zOperation.__post_init__\  s   € Ø-1ˆÔÐÐr„   r{  c                ó   — t           ‚r�   ©rO  r!  s    rƒ   rñ   zOperation.get_device_  ó   € Ý!Ð!r„   r  c                ó4   — t          | d¦  «        sJ ‚| j        S ©Nr  )Úhasattrr  r!  s    rƒ   r3  zOperation.get_origin_nodeb  s!   € Ý�t˜]Ñ+Ô+Ð+Ð+Ð+ØÔÐr„   r  c                ó4   — t          | d¦  «        sJ ‚| j        S )Nr  )r  r  r!  s    rƒ   Úget_originszOperation.get_originsf  s    € Ý�t˜YÑ'Ô'Ð'Ð'Ð'ØŒ|Ðr„   rˆ   c                ó"   — | j         €J ‚| j         S r�   r	  r!  s    rƒ   rÕ  zOperation.get_operation_namej  s   € ØÔ"Ð.Ð.Ð.ØÔ"Ð"r„   rÕ   c                ó   — dS rƒ  r…   r!  s    rƒ   rÍ  zOperation.is_externn  r…  r„   c                ó   — dS rƒ  r…   r!  s    rƒ   rÏ  zOperation.is_no_opq  r…  r„   r¸  c                ó   — t           ‚r�   r  r!  s    rƒ   rº  zOperation.get_read_writest  r  r„   r‡   c                ó.   — ||                       ¦   «         v S r�   )r-  )r  r‡   s     rƒ   Ú
is_user_ofzOperation.is_user_ofw  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_namesz  r.  r„   r»  c                ó4   — |                       ¦   «         j        S r�   r½  r!  s    rƒ   r,  zOperation.get_reads}  r¿  r„   úList[Buffer]c                ó   — t           ‚r�   r  r!  s    rƒ   Úget_outputszOperation.get_outputs€  r  r„   úOrderedSet[sympy.Symbol]c                ó   — t          ¦   «         S r�   r1   r!  s    rƒ   Úget_unbacked_symbol_defsz"Operation.get_unbacked_symbol_defsƒ  ó   € Ý‰|Œ|Ðr„   c                ó   — t          ¦   «         S )aÝ  
        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.
        r1   r!  s    rƒ   rÆ  z"Operation.get_unbacked_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Û  )rj   r  rë  rá  rô  )r‡   rˆ   rj   rÕ   rÚ  rõ  ©rj   r  ©rj   r  rö  )r  rü  rý  r"  rñ   r3  r  rÕ  rÍ  rÏ  rº  r  r-  r,  r  r!  rÆ  r%  r…   r„   rƒ   r  r  Z  sD  € € € € € ð2ð 2ð 2ð 2ð"ð "ð "ð "ð ð  ð  ð  ðð ð ð ð#ð #ð #ð #ðð ð ð ðð ð ð ð"ð "ð "ð "ð-ð -ð -ð -ð@ð @ð @ð @ð,ð ,ð ,ð ,ð"ð "ð "ð "ðð ð ð ðð ð ð ð"ð ð ð ð ð r„   r  c                  ó>  ‡ — e Zd ZU ded<   ded<   ded<   ded<   d:d„Zd;d„Zd<ˆ fd„Zd=d„ZeZd>d„Z	d?d„Z
d@d„Zd@d„ZedAd„¦   «         Zeej        fdBd!„¦   «         ZedCd#„¦   «         ZdDd%„Zed=d&„¦   «         ZdEdFd+„ZdGd-„ZdHd/„ZdId1„ZdJd3„ZdKd5„ZdLd7„ZdMd9„Zˆ xZS )NÚLoopsr}  rç   rJ  ræ   úCallable[..., Any]Úinner_fnrŽ  Úrangesrj   rÄ  c                óz   —  t          ¦   «         j        g d„ | j        D ¦   «         ¢|                      ¦   «         ‘R Ž S )Nc              3  ó4   K  — | ]}t          |¦  «        V — Œd S r�   ©r,   ©r›   Úes     rƒ   r)  z1Loops.get_unbacked_symbol_uses.<locals>.<genexpr>¨  s+   è è € Ð<Ð<¨1Õ# AÑ&Ô&Ð<Ð<Ð<Ð<Ð<Ð<r„   )r2   Úunionr,  Úinner_fn_free_unbacked_symbolsr!  s    rƒ   rÆ  zLoops.get_unbacked_symbol_uses¦  sN   € Ø!�z‰|Œ|Ô!ð 
Ø<Ð<°´Ð<Ñ<Ô<ð
à×/Ò/Ñ1Ô1ð
ð 
ð 
ð 	
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=)rI  rç   r€   rˆ   ræ   Úinner_fn_strr  )r  r4  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„   rk   c                óH   •— t          ¦   «                              ¦   «          d S r�   )Úsuperr"  ©r  Ú	__class__s    €rƒ   r"  zLoops.__post_init__·  s   ø€ Ý‰Œ×ÒÑÔÐÐÐr„   c                ó,   — |                       d¦  «        S )N©r,  ©r<  r!  s    rƒ   Ú__str__zLoops.__str__º  s   € Ø�|Š|˜KÑ(Ô(Ð(r„   r{  c                ó   — | j         S r�   ©rç   r!  s    rƒ   rñ   zLoops.get_device¿  ó
   € ØŒ{Ðr„   r  c                ó   — | j         S r�   r2  r!  s    rƒ   r3  zLoops.get_origin_nodeÂ  r4  r„   ra  c                ó   — | j         S r�   rB  r!  s    rƒ   rë   zLoops.get_sizeÅ  rG  r„   c                ó   — | j         S r�   rB  r!  s    rƒ   Úget_pointwise_sizezLoops.get_pointwise_sizeÈ  rG  r„   r‹   r   r�   re   c                ó  — |                      dd ¦  «        }|                      dd ¦  «        } | |i |¤Ž}|                     d|¦  «         |                     d|p|j        ¦  «         t                               |¦  «        S )Nr  r  )Úpopr  r  re   Úcreate)Úclsr‹   r�   r  ÚtbÚrs         rƒ   rN  zLoops.createË  s‡   € à—j’j °Ñ5Ô5ˆØ�ZŠZ˜ TÑ*Ô*ˆð ˆC�Ð ˜Ð Ð ˆð 	
×Ò˜]¨KÑ8Ô8Ð8Ø	×Ò˜[¨"Ð*;°´Ñ<Ô<Ð<Ý×Ò Ñ"Ô"Ð"r„   rd   r6   c                ó:   ‡— ˆfd„t          | ¦  «        D ¦   «         S )Nc                ód   •— g | ],\  }}|d k    rt           j        j        nt          ‰|¦  «        ‘Œ-S ©r7   )rz   ÚSÚZerorT   )r›   Únrá   rd   s      €rƒ   rž   z Loops._index.<locals>.<listcomp>Û  sH   ø€ ð 
ð 
ð 
á��1ð  šF˜F�EŒGŒLˆLÕ(FÀvÈqÑ(QÔ(Qð
ð 
ð 
r„   ©rÇ   )r,  rd   s    `rƒ   Ú_indexzLoops._indexÙ  s6   ø€ ð
ð 
ð 
ð 
å! &Ñ)Ô)ð
ñ 
ô 
ð 	
r„   rC   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)
rB   rY   ÚMockHandlerÚset_ops_handlerr   rŒ   rî   r+  Úinner_fn_argsÚgetvalue)r  Ú	opcounters     rƒ   Úinner_fn_opcountzLoops.inner_fn_opcountà  sL  € å ¥¤¡¤Ñ1Ô1ˆ	ÝÔ˜yÑ)Ô)ð 	(ð 	(­5¬<ÝÐ,¨dñ,
ô ,
ð 	(ð 	(ð ˆ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�   )rY  r,  r!  s    rƒ   r_  zLoops.inner_fn_argsé  s   € Ø—’˜DœKÑ(Ô(Ð*Ð*r„   c                ó^   — t          j        j        | j        g|                      ¦   «         ¢R Ž S r�   )rY   ÚKernelFormatterHandlerÚir_to_stringr+  r_  r!  s    rƒ   r;  zLoops.inner_fn_strì  s8   € åÔ'Ô4ØŒMð
Ø ×.Ò.Ñ0Ô0ð
ð 
ð 
ð 	
r„   Nr—  r˜  rÕ   c                óx   — |€d}t          |t          j        ¦  «        }|                      ¦   «         j        |k    S rn  )Úmaxr8   Úrealize_opcount_thresholdrb  Únum_opsrš  s     rƒ   r›  zLoops.has_large_inner_fnò  s9   € ØÐØˆIÝ˜	¥6Ô#CÑDÔDˆ	Ø×$Ò$Ñ&Ô&Ô.°Ò:Ð:r„   úSet[Symbol]c                ó`   — |                       | j        ¦  «        }t          | j        |¦  «        S r�   )rY  r,  r=   r+  )r  r—   s     rƒ   r3  z$Loops.inner_fn_free_unbacked_symbolsø  s'   € Ø—’˜DœKÑ(Ô(ˆÝ,¨T¬]¸EÑBÔBÐBr„   r»  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î   rÈ  r?   r‰  rë   rË  r¾  r!  s    rƒ   r,  zLoops.get_readsü  s   € ÝŒ\�.Ð*:¸DÑAÔAð 	ð 	Ø×&Ò&Ñ(Ô(ð 
Ý*Ø×$Ò$Ñ&Ô&Ø—M’M‘O”OØ×+Ò+Ñ-Ô-ñô ô ð	ð 	ð 	ð 	ñ 	ô 	ð 	ð 	õ +Ø×$Ò$Ñ&Ô&Ø—M’M‘O”Oñô ô ð	ð 	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	s   œA CÂ	8CÃCÃCr#  c                óN   — t          |                      ¦   «         j        ¦  «        S r�   )r2   rb  Úread_buffersr!  s    rƒ   r-  zLoops.get_read_names
  s   € Ý˜$×/Ò/Ñ1Ô1Ô>Ñ?Ô?Ð?r„   r~   c                óN   — t          |                      ¦   «         j        ¦  «        S r�   )r    rb  rp  r!  s    rƒ   rÁ  zLoops.num_reads  s   € Ý�4×(Ò(Ñ*Ô*Ô7Ñ8Ô8Ð8r„   rÉ  c                óB   — t          dt          | ¦  «        › d�¦  «        ‚)Nz+get_reduction_size() is not implemented by rT  rU  r!  s    rƒ   rË  zLoops.get_reduction_size  ó(   € Ý!ØG½$¸t¹*¼*ÐGÐGÐGñ
ô 
ð 	
r„   rý   c                óB   — t          dt          | ¦  «        › d�¦  «        ‚)Nz+get_reduction_type() is not implemented by rT  rU  r!  s    rƒ   rÈ  zLoops.get_reduction_type  rs  r„   rf   c                óB   — t          dt          | ¦  «        › d�¦  «        ‚)Nz+constant_to_device() is not implemented by rT  rU  r€  s     rƒ   rÑ  zLoops.constant_to_device  rs  r„   rø  )r4  r:  rj   rˆ   rÙ  rë  ræ  rÛ  râ  )r‹   r   r�   r   rj   re   )r,  rŽ  rd   r6   rj   ra  )rj   rC   ©rj   rc  r�   rì  ©rj   rl  rõ  rÚ  rö  rù  rä  rú  ) r  rü  rý  rþ  rÆ  r<  r"  rD  Ú__repr__rñ   r3  rë   rK  ÚclassmethodrN  r  r6   ÚINDEXrY  rI   rb  r_  r;  r›  r3  r,  r-  rÁ  rË  rÈ  rÑ  Ú__classcell__©r@  s   @rƒ   r)  r)  Ÿ  sM  ø€ € € € € € àÐÐÑØÐÐÑØ Ð Ð Ñ ØÐÐÑð
ð 
ð 
ð 
ð	
ð 	
ð 	
ð 	
ð ð  ð  ð  ð  ð  ð)ð )ð )ð )ð €Hðð ð ð ð ð  ð  ð  ðð ð ð ðð ð ð ð ð#ð #ð #ñ „[ð#ð Ø:>¼*ð 
ð 
ð 
ð 
ñ „\ð
ð ð(ð (ð (ñ „]ð(ð+ð +ð +ð +ð ð
ð 
ð 
ñ „]ð
ð
;ð ;ð ;ð ;ð ;ðCð Cð Cð Cðð ð ð ð@ð @ð @ð @ð9ð 9ð 9ð 9ð
ð 
ð 
ð 
ð

ð 
ð 
ð 
ð

ð 
ð 
ð 
ð 
ð 
ð 
ð 
r„   r)  rÁ   úUnion[Expr, Sequence[Expr]]ræ   rJ  rX   c               ó~   — |j         r"t          j        t          d¦  «        |¦  «        S t          j        d|¦  «        S )NÚnanr   )Úis_floating_pointrW   ÚconstantÚfloat)rÁ   ræ   s     rƒ   Únop_loader_fnrƒ     s7   € ØÔð &ÝŒ|�E %™LœL¨%Ñ0Ô0Ð0åŒ|˜A˜uÑ%Ô%Ð%r„   c                  ó6   — e Zd Zdd„Zdd„Zdd„Zdd„Zdd„ZdS )Ú	Pointwiserj   r†  c                ón   — |                       ¦   «         rt          t          | j        ¬¦  «        S | j        S ©NrL  )rr  r   rƒ  ræ   r+  r!  s    rƒ   r‰  zPointwise.make_loader)  s3   € à× Ò Ñ"Ô"ð 	<Ý�=°´
Ð;Ñ;Ô;Ð;àŒ}Ðr„   rÉ  c                ó   — g S r�   r…   r!  s    rƒ   rË  zPointwise.get_reduction_size0  s   € Øˆ	r„   rý   c                ó   — d S r�   r…   r!  s    rƒ   rÈ  zPointwise.get_reduction_type3  r8  r„   Úoutput_nameÚindexerú!Callable[[Sequence[Expr]], Never]Úvarsra  rX   c                óz   — |                       ¦   «         }t          j        | ||¦  «         ||¦  «        ¦  «        S r�   )r‰  rW   Ústore©r  rŠ  r‹  r�  Úloaders        rƒ   Ústore_outputzPointwise.store_output6  s9   € ð ×!Ò!Ñ#Ô#ˆÝŒy˜ g g¨d¡m¤m°V°V¸D±\´\ÑBÔBÐBr„   rç   r}  rf   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ç   r‘  s      rƒ   rÑ  zPointwise.constant_to_device?  sU   € à×!Ò!Ñ#Ô#ˆØH•”�nÐ.?ÀÑHÔHÈÑPÔPˆÝØ ¤°fÀTÄ[ð
ñ 
ô 
ð 	
r„   Nrè  rù  rä  ©rŠ  rý   r‹  rŒ  r�  ra  rj   rX   rú  )r  rü  rý  r‰  rË  rÈ  r’  rÑ  r…   r„   rƒ   r…  r…  '  s|   € € € € € ðð ð ð ðð ð ð ðð ð ð ðCð Cð Cð Cð
ð 
ð 
ð 
ð 
ð 
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ç   r}  rj   rf   c                óÄ   — |                       ¦   «         } t          j        t          d|¦  «        |¦  «        }t	          || j        || j        | j        | j        ¬¦  «        S )r•  r–  )rç   ræ   r+  r,  r�  rž  )	r‰  r   rŒ   r˜  rœ  ræ   r,  r�  rž  r™  s      rƒ   rÑ  zScatter.constant_to_deviceM  sd   € à×!Ò!Ñ#Ô#ˆØH•”�nÐ.?ÀÑHÔHÈÑPÔPˆÝØØ”*ØØ”;ØÔ.ØÔ*ð
ñ 
ô 
ð 	
r„   rŠ  r‹  rŒ  r�  ra  rX   c                ó®   — |                       ¦   «         }t          j        | ||                      |¦  «        ¦  «         ||¦  «        | j        ¬¦  «        S )N)Úmode)r‰  rW   r�  r�  rž  r�  s        rƒ   r’  zScatter.store_outputZ  s]   € ð ×!Ò!Ñ#Ô#ˆÝŒyØØˆG�D×'Ò'¨Ñ-Ô-Ñ.Ô.ØˆF�4‰LŒLØÔ"ð	
ñ 
ô 
ð 	
r„   rú  rš  )r  rü  rý  rþ  rž  rÑ  r’  r…   r„   rƒ   rœ  rœ  H  s[   € € € € € € à4Ð4Ð4Ñ4Ø"&€LÐ&Ð&Ð&Ñ&ð
ð 
ð 
ð 
ð
ð 
ð 
ð 
ð 
ð 
r„   rœ  Ú
logical_orÚmaximumÚminimumÚmulÚaddÚbitwise_xor)Úanyri  ÚminÚprodÚsumÚ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ÚaúTuple[object, object]Úbrj   úTuple[OpsValue, OpsValue]c                ó¶  •— | \  }}|\  }}‰dk    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 )Nr´  )	rW   ÚltÚgtÚeqr%   Úner¢  Úlogical_andÚwhere)rµ  r·  Úa_valueÚa_indexÚb_valueÚb_indexÚmaskÚequalÚa_isnanÚb_isnanÚtier¯  ræ   r®  s              €€€rƒ   Úargmax_combine_fnz3get_reduction_combine_fn.<locals>.argmax_combine_fn{  s@  ø€ ð  !ÑˆG�WØ ÑˆG�Wà Ò)Ð)Ý”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                ól   — | \  }}}|\  }}}||z
  }||z   }	||	z  }
|||
z  z   ||z   ||z  |z  |
z  z   |	fS r�   r…   )rµ  r·  Úa_meanÚa_m2Úa_weightÚb_meanÚb_m2Úb_weightÚdeltaÚ
new_weightÚ	w2_over_ws              rƒ   Úwelford_combine_fnz4get_reduction_combine_fn.<locals>.welford_combine_fnœ  sm   € ð &'Ñ"ˆF�D˜(Ø%&Ñ"ˆF�D˜(à˜V‘OˆEØ! HÑ,ˆJØ  :Ñ-ˆIà˜ Ñ*Ñ*Ø�t‘˜e e™m¨hÑ6¸ÑBÑBØðð r„   zunknown reduction_type=)rµ  r¶  r·  r¶  rj   r¸  )rµ  rË  r·  rË  rj   rË  )r­  rO  )r®  ræ   r¯  rÉ  rÖ  s   ```  rƒ   Úget_reduction_combine_fnr×  s  s›   øøø€ ð Õ-Ð-Ð-Ý# NÔ3Ð3à	Ð/Ð	/Ð	/ð	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð: !Ð à	Ð,Ò	,Ð	,ð	ð 	ð 	ð 	ð  "Ð!õ "Ð"L¸NÐ"LÐ"LÑMÔMÐMr„   Ústrides1rŽ  Ústrides2rä   c                ó|   ‡ ‡— d„ t          |¦  «        D ¦   «         }ˆ fd„|D ¦   «         Š ˆfd„|D ¦   «         Š‰ ‰k    S )zP
    Returns true if the strides are equal, ignoring dimensions of size 1 .
    c                ól   — g | ]1\  }}t           j        j                             |d ¬¦  «        dk    ¯/|‘Œ2S ©r´   ©Úfallbackr7   ©rY   rè   ré   rê   ©r›   rœ   Údims      rƒ   rž   z-significant_strides_equal.<locals>.<listcomp>¸  sI   € ð ð ð áˆAˆsÝŒ7Ô×%Ò% c°AÐ%Ñ6Ô6¸!Ò;Ð;ð 	
à;Ð;Ð;r„   c                ód   •— g | ],}t           j        j                             ‰|         ¦  «        ‘Œ-S r…   rß  )r›   rœ   rØ  s     €rƒ   rž   z-significant_strides_equal.<locals>.<listcomp>½  ó0   ø€ ÐOÐOÐO¸A•”Ô ×*Ò*¨8°A¬;Ñ7Ô7ÐOÐOÐOr„   c                ód   •— g | ],}t           j        j                             ‰|         ¦  «        ‘Œ-S r…   rß  )r›   rœ   rÙ  s     €rƒ   rž   z-significant_strides_equal.<locals>.<listcomp>¾  rã  r„   rX  )rØ  rÙ  rä   Únon_1_indicess   ``  rƒ   Úsignificant_strides_equalræ  ²  sh   øø€ ðð å ‘o”oðñ ô €Mð
 PÐOÐOÐOÀÐOÑOÔO€HØOÐOÐOÐOÀÐOÑOÔO€HØ�xÒÐr„   c                  óª  ‡ — e Zd ZU ded<   ded<   ded<   ded<   dOd
„ZeZdPˆ fd„ZdQd„ZdRd„ZdSd„Z	dTd„Z
dUd„ZdVd„ZdWd#„Ze	 dXdYd.„¦   «         ZedZd1„¦   «         Zeej        d$fd[d4„¦   «         Zed\d7„¦   «         Zed\d8„¦   «         Zed]d<„¦   «         Zed^dA„¦   «         Zed_dH„¦   «         Zed`dL„¦   «         ZedadM„¦   «         ZedbdN„¦   «         Zˆ xZS )cÚ	ReductionrŽ  Úreduction_rangesrˆ   r®  rJ  Ú	src_dtyperF   Úreduction_hintrj   c                ó,   — |                       d¦  «        S )N)r,  ré  r®  rC  r!  s    rƒ   rD  zReduction.__str__Ê  s   € Ø�|Š|ÐLÑMÔMÐMr„   rÄ  c                ó�   •— t          ¦   «                              ¦   «          t          ¦   «         j        d„ | j        D ¦   «         Ž z  S )Nc              3  ó4   K  — | ]}t          |¦  «        V — Œd S r�   r/  r0  s     rƒ   r)  z5Reduction.get_unbacked_symbol_uses.<locals>.<genexpr>Ñ  s+   è è € ÐFÐF¨1Õ# AÑ&Ô&ÐFÐFÐFÐFÐFÐFr„   )r>  rÆ  r2   r2  ré  r?  s    €rƒ   rÆ  z"Reduction.get_unbacked_symbol_usesÏ  sE   ø€ Ý‰wŒw×/Ò/Ñ1Ô1Ð4FµJ±L´LÔ4FØFÐF°Ô0EÐFÑFÔFð5
ñ 
ð 	
r„   rÉ  c                ó   — | j         S r�   )ré  r!  s    rƒ   rË  zReduction.get_reduction_sizeÔ  s   € ØÔ$Ð$r„   rý   c                ó   — | j         S r�   )r®  r!  s    rƒ   rÈ  zReduction.get_reduction_type×  ó   € ØÔ"Ð"r„   rŠ  r‹  rŒ  r�  ra  Úreduction_varsúSequence[Symbol]rX   c           	     ó´   — t          j        | j        | j        | j        |                      ||¦  «        ¦  «        }t          j        | ||¦  «        |¦  «        S r�   )rW   Ú	reductionræ   rê  r®  r+  Ústore_reduction)r  rŠ  r‹  r�  rò  rö   s         rƒ   rö  zReduction.store_reductionÚ  sU   € õ ”ØŒJØŒNØÔØ�MŠM˜$ Ñ/Ô/ñ	
ô 
ˆõ Ô" ;°°¸±´¸uÑEÔEÐEr„   r~   c                óT   — t          | j        ¦  «        t          | j        ¦  «        z   S r�   )r    r,  ré  r!  s    rƒ   Úindex_lengthzReduction.index_lengthé  s"   € Ý�4”;ÑÔ¥# dÔ&;Ñ"<Ô"<Ñ<Ð<r„   úSequence[Sequence[Expr]]c                óˆ   — |                       | j        ¦  «        }|                       | j        t          j        ¦  «        }||fS r�   )rY  r,  ré  r6   ÚRINDEX©r  r—   Úrindexs      rƒ   r_  zReduction.inner_fn_argsì  s7   € Ø—’˜DœKÑ(Ô(ˆØ—’˜TÔ2µD´KÑ@Ô@ˆØ�vˆÐr„   rl  c                ó¬   — |                       | j        ¦  «        }|                       | j        t          j        ¦  «        }t          | j        ||¦  «        S r�   )rY  r,  ré  r6   rû  r=   r+  rü  s      rƒ   r3  z(Reduction.inner_fn_free_unbacked_symbolsñ  sA   € Ø—’˜DœKÑ(Ô(ˆØ—’˜TÔ2µD´KÑ@Ô@ˆÝ,¨T¬]¸EÀ6ÑJÔJÐJr„   rç   r}  rf   c           
     óæ   — |                       ¦   «         } t          j        t          d|¦  «        |¦  «        }t	          || j        || j        | j        | j        | j	        t          j        ¬¦  «        S )r•  r–  ©rç   ræ   r+  r,  ré  r®  rê  rë  )r‰  r   rŒ   r˜  rè  ræ   r,  ré  r®  rê  rF   ÚDEFAULTr™  s      rƒ   rÑ  zReduction.constant_to_deviceö  so   € à×!Ò!Ñ#Ô#ˆØH•”�nÐ.?ÀÑHÔHÈÑPÔPˆÝØØ”*ØØ”;Ø!Ô2ØÔ.Ø”nÝ(Ô0ð	
ñ 	
ô 	
ð 		
r„   NÚ	dst_dtyper+  r‰   r,  Úreduction_numelr   Ú
input_noderÜ   úTuple[ReductionHint, _IntLike]c	           
     óü  — dd„}	t           j        j                             |¦  «        }
t           j        j                             t	          |¦  «        ¦  «        }|dk    p:t           j                             | t          j        ¦  «         o|dvot          j	        } |	|
¦  «        r |	|¦  «        s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)          |t*          ¦  «        r}t-          |¦  «        \  }}|�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 t3          | ||||||t          j        ¬¦  «        }dd„} ||¦  «        \  }}|r ||¦  «        \  }}t5          |¦  «        dk    rt          j        dfS t7          j        |                     ¦   «         |                     ¦   «         ¦  «        \  \  }}}d}d}|D ]…}t           j        j                             ||¦  «        } t           j        j                              | || !                    ¦   «         ¦  «        }!tE          d„ |!D ¦   «         ¦  «        }"|"r|dz  }Œ€|dz  }Œ†||k    rt          j         ||
|¦  «        fS t          j#         ||
|¦  «        fS )NrÒ   rŒ   rj   rÕ   c                ó:   — t          | t          t          f¦  «        S r�   )ro   r~   r   r  s    rƒ   Ú
_is_staticz(Reduction.num_splits.<locals>._is_static  s   € Ý˜a¥#¥w Ñ0Ô0Ð0r„   Úscanr²  r7   é    T)Úinner_reductionFÚreduction_numel_hintr~   Ú
numel_hintc                ó   — dS ©Nr7   r…   )r  r  s     rƒ   Úinner_reduction_splitsz4Reduction.num_splits.<locals>.inner_reduction_splits0  s	   € ð �qr„   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: %séÿÿÿÿr´   r   rQ  rè  úTuple[Sequence[Expr], bool]c           	     ó²  ‡— t          d t          |                      ¦   «         |                      ¦   «         |                      ¦   «         ¬¦  «        | ¬¦  «        }|                     ¦   «         }|j        €J ‚d„ |j        D ¦   «         }g }d}t          |j        d„ ¬¦  «        D ]±Št          ˆfd„|D ¦   «         ¦  «        r”| 
                    ‰j        ¦  «         ‰j        t          j        j        v rbt          j        j        ‰j                 }t!          |j        dd ¦  «        }|                     ¦   «          t!          |j        dd ¦  «        |k    rd	}Œ²||fS )
N©rç   ræ   rä   ©r‡   ÚlayoutÚdatac                óp   — g | ]3}t          |t          ¦  «        ¯t          |t          j        ¦  «        °1|‘Œ4S r…   )ro   r   rz   ÚNumber©r›   rQ  s     rƒ   rž   zBReduction.num_splits.<locals>.get_read_indices.<locals>.<listcomp>u  sN   € ð ð ð àÝ˜a¥Ñ&Ô&ðõ 0:¸!½U¼\Ñ/JÔ/JðØðð ð 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  ó4   •K  — | ]}|‰j         j        v V — Œd S r�   )r—   Úfree_symbols)r›   rQ  Úmds     €rƒ   r)  zAReduction.num_splits.<locals>.get_read_indices.<locals>.<genexpr>}  s-   øè è € ÐFÐF°a�q˜BœHÔ1Ð1ÐFÐFÐFÐFÐFÐFr„   rå   T)ÚComputedBufferrî   rñ   rð   rë   rº  Ú
range_varsÚsortedr¾  ÚallÚappendr—   r‡   rY   rè   Úname_to_bufferr�   r  Údecide_layout)	rQ  ÚcbÚread_writesr#  ÚindicesÚchangedÚbufÚoriginal_strider!  s	           @rƒ   Úget_read_indicesz.Reduction.num_splits.<locals>.get_read_indicesf  sq  ø€ ÝØÝ%ØŸ<š<™>œ>ØŸ+š+™-œ-ØŸš™œðñ ô ð
 ðñ ô ˆBð ×,Ò,Ñ.Ô.ˆKð Ô)Ð5Ð5Ð5ðð à$Ô/ðñ ô ˆJð
 ˆGØˆGÝ˜[Ô.Ð4DÐ4DÐEÑEÔEð +ð +�ÝÐFÐFÐFÐF¸:ÐFÑFÔFÑFÔFð +Ø—N’N 2¤8Ñ,Ô,Ð,Ø”w¥!¤'Ô"8Ð8Ð8ÝœgÔ4°R´WÔ=˜Ý*1°#´*¸hÈÑ*MÔ*M˜Ø×)Ò)Ñ+Ô+Ð+Ý" 3¤:¨x¸Ñ>Ô>À/ÒQÐQØ&*˜GøØ˜GÐ#Ð#r„   r   c              3  ó"   K  — | ]
}|d k    V — ŒdS ©r7   Nr…   ©r›   rá   s     rƒ   r)  z'Reduction.num_splits.<locals>.<genexpr>—  s&   è è € Ð/Ð/ !˜˜AšÐ/Ð/Ð/Ð/Ð/Ð/r„   )rÒ   rŒ   rj   rÕ   )r  r~   r  r~   rj   r~   )rQ  rè  rj   r  )$rY   rè   ré   Úsymbolic_hintrU   Úhas_featurer:   ÚREDUCE_TO_SINGLE_ELEMENTr8   Úsplit_reductionsrF   r  rE   rN  Úmulti_processor_countÚ	functoolsr   ÚchoicesÚreduction_split_factorÚINNERro   re   r>   ÚlogÚdebugrè  r    r9   Úindex_vars_squeezerë   rË  Úsimplify_with_rangesÚstride_hintsÚkeysr%  ÚOUTER)#rç   r  rê  r+  r,  ré  r®  r  r  r  r  r  Úshould_splitÚpropsÚnum_smÚmin_elements_per_threadr  Úouter_reduction_splitsÚsplitÚ
new_rangesÚnew_reduction_rangesÚextracted_numel_hintrQ  r/  r+  r,  rÎ   rò  Úranges1Ú	num_outerÚ	num_innerrœ   ÚjÚstridesÚouters#                                      rƒ   Ú
num_splitszReduction.num_splits  s?  € ð	1ð 	1ð 	1ð 	1õ  !œwÔ/×=Ò=¸oÑNÔNÐÝ”WÔ%×3Ò3µMÀ&Ñ4IÔ4IÑJÔJˆ
à%¨Ò/ð 
Ý”×#Ò# F­NÔ,SÑTÔTÐTð (Øððð(õ Ô'ð 	ð �
Ð/Ñ0Ô0ð 	,°Z°ZÀ
Ñ5KÔ5Kð 	,å Ô(¨!Ð+Ð+å Ô'¨Ñ/Ô/ˆØÔ,ˆØ"$ÐØð 	<Ý@IÔ@QÝ”	Ô0°&È$ðAñ Aô AÐ"õ AJÔ@QÝ”	Ô0°&È%ðAñ Aô AÐ"Ð"ð
ð ð ð ð &<Ð"ð ˜Š?ˆ?Ø*Ð*Ð+?ÀÑLÔLˆEØ˜Šzˆzå$Ô*¨EÐ1Ð1ØÐ%­*°ZÅÑ*KÔ*KÐ%Ý3VØñ4ô 4Ñ0�
Ð0ð Ð)Ð.BÐ.NÝ+,¬7Ô+;×+IÒ+IÝ% jÐ3GÑ&GÑHÔHñ,ô ,Ð(ð ,Ð/CÒCÐCÝŸ	š	ðGð #Ø,Ø!Ø&Ø0ñ	ô 	ð 	õ  -Ô2°BÐ6Ð6Ý Ô&¨Ð-Ð-à Ð$;Ò;Ð;Ø˜V a™Z¨"™_Ò,Ð,å Ô(¨!Ð+Ð+åØØØØØ-Ø)ØÝ(Ô0ð	
ñ 	
ô 	
ˆð	$ð 	$ð 	$ð 	$ðB ,Ð+¨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°A°~ÀwÇ|Â|Á~Ä~ÑVÔVˆGÝÐ/Ð/ wÐ/Ñ/Ô/Ñ/Ô/ˆEØð Ø˜Q‘�	�	à˜Q‘�	�	Ø�yÒ Ð Ý Ô&Ð(>Ð(>Ø$ jñ)ô )ð ð õ !Ô&Ð(>Ð(>Ø$ jñ)ô )ð ð r„   ú<Callable[[Sequence[_IntLike], Sequence[_IntLike]], OpsValue]ú(Callable[[Sequence[_IntLike]], OpsValue]c                óö   ‡ ‡‡‡‡‡— d„ ‰D ¦   «         Št          ||¦  «        Šdˆˆˆfd„Š|dv rHt          dd‰t                               ‰¦  «        ¦  «                             ¦   «         Šdˆˆ fd„Šˆfd„S ‰ Š‰S )z1Convert inner_fn from a reduction to an pointwisec                óV   — g | ]&}t           j        j                             |¦  «        ‘Œ'S r…   )rY   rè   ré   Úevaluate_static_shape©r›   rÒ   s     rƒ   rž   z2Reduction._unroll_reduction_fn.<locals>.<listcomp>­  s8   € ð 
ð 
ð 
Ø:;�AŒGÔ×2Ò2°1Ñ5Ô5ð
ð 
ð 
r„   r—   rŽ  rj   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>¶  sC   øè è € ð ð àð �H˜U FÑ+Ô+ðð ð ð ð ð r„   c                ó,   — g | ]}t          |¦  «        ‘ŒS r…   )r¡   rX  s     rƒ   rž   z>Reduction._unroll_reduction_fn.<locals>.fn.<locals>.<listcomp>¹  s   € Ð=Ð=Ð= q�% ™(œ(Ð=Ð=Ð=r„   )r8  ÚreduceÚ	itertoolsÚproduct)r—   Ú
combine_fnré  r[  s   `€€€rƒ   r‘   z*Reduction._unroll_reduction_fn.<locals>.fn³  sa   øø€ ÝÔ#Øðð ð ð ð å"+Ô"3Ø=Ð=Ð,<Ð=Ñ=Ô=ð#ðñ ô ñô ð r„   ©r´  r³  Nrý  r¸  c                ó„   •— d„ |D ¦   «         } ‰| |¦  «        t          j         ‰|¦  «        t          j        ¦  «        fS )Nc                ó6   — g | ]}t          j        |¦  «        ‘ŒS r…   )rz   Úexpand©r›   rœ   s     rƒ   rž   zDReduction._unroll_reduction_fn.<locals>.value_fn.<locals>.<listcomp>Ê  s    € Ð:Ð:Ð:¨a�%œ, q™/œ/Ð:Ð:Ð:r„   )rW   Ú
index_exprrt   Úint64)r—   rý  Úflatten_indexr+  s     €€rƒ   r[  z0Reduction._unroll_reduction_fn.<locals>.value_fnÇ  sL   ø€ ð ;Ð:°6Ð:Ñ:Ô:�à�H˜U FÑ+Ô+Ý”N = =°Ñ#8Ô#8½%¼+ÑFÔFðð r„   c                ó&   •—  ‰| ¦  «        d         S r  r…   )r—   r‘   s    €rƒ   r  z0Reduction._unroll_reduction_fn.<locals>.<lambda>Ð  s   ø€    E¡¤¨1¤€ r„   )r—   rŽ  rj   r   )r—   rŽ  rý  rŽ  rj   r¸  )r×  ÚFixedLayoutrî   rï   r�  )r+  ré  r®  rê  r`  rh  r‘   r[  s   ``  @@@@rƒ   Ú_unroll_reduction_fnzReduction._unroll_reduction_fn¥  sä   øøøøøø€ ð
ð 
Ø?Oð
ñ 
ô 
Ðõ .¨n¸iÑHÔHˆ
ð		ð 		ð 		ð 		ð 		ð 		ð 		ð 		ð Ð1Ð1Ð1Ý'ØØØ Ý×1Ò1Ð2BÑCÔCñ	ô ÷
 Šl‰nŒnð ðð ð ð ð ð ð ð .Ð-Ð-Ð-Ð-àˆHØˆIr„   r*  re   c
                óÄ  ‡‡‡‡‡— t           j        j                             t	          ‰¦  «        ¦  «        }
|
dk    r‡dˆ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           j        j                             |
¦  «        t          j        k     r[t	          |¦  «        dk    st          |j        ¦  «        r4t                               |‰|                      ‰‰‰|¦  «        |¬¦  «        S |                      |‰|‰|‰‰|
|	¦	  «	        \  }}|t$          j        k    r|}|dk    r<|	€J ‚t)          |	¦  «        \  }}|€J ‚|€J ‚|                      |‰|‰|‰||‰|¦
  «
        S |dk    r|                      |‰|‰|‰‰||¦	  «	        S t.                               t1          |‰‰|‰‰||¬¦  «        ¦  «        S )Nr   ÚvalrŒ   rj   úUnion[bool, float, int]c                óü   •— ‰t           j        k    rt          | ¦  «        S ‰j        r+t          | t          j        ¦  «        sJ ‚t          | ¦  «        S t          | t          j        ¦  «        sJ ‚t          | ¦  «        S r�   )	rt   rÕ   r€  ro   ÚtypingÚSupportsFloatr‚  ÚSupportsIntr~   )rm  r  s    €rƒ   Úpy_cnstz!Reduction.create.<locals>.py_cnstè  sp   ø€ Ø¥¤
Ò*Ð*Ý ™9œ9Ð$ØÔ0ð $Ý% c­6Ô+?Ñ@Ô@Ð@Ð@Ð@Ý  ™:œ:Ð%å% c­6Ô+=Ñ>Ô>Ð>Ð>Ð>Ý˜s™8œ8�Or„   r7   )r«  r¬  rª  r¨  z* not supported for zero-dimension tensors!r—   r~   rX   c                ó:   •— t          j        ‰‰         ‰¦  «        S r�   ©rW   r�  )r—   r  r®  Úrtypes_to_initss    €€€rƒ   Úconst_fnz"Reduction.create.<locals>.const_fnþ  s   ø€ Ý”| O°NÔ$CÀYÑOÔOÐOr„   r—  ra  c                ó.   •— t          j        d‰¦  «        S rn  ru  )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…   ©rz   rU  rV  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„   r  r   )rm  rŒ   rj   rn  )r—   r~   rj   rX   )rY   rè   ré   ÚsimplifyrU   rA  r…  rN  rp   ro   r   rê   r8   Úunroll_reductions_thresholdrQ   r€   rk  rR  rF   r  r>   Ú!create_multilayer_existing_rangesÚcreate_multilayerre   rè  )rO  rç   r  rê  r+  r,  ré  r®  rë  r  r  rs  rw  r‘   ÚhintrH  rI  rJ  rv  s     ` ` ``          @rƒ   rN  zReduction.createÕ  s“  øøøøø€ õ œ'Ô*×3Ò3µMÐBRÑ4SÔ4SÑTÔTˆà˜aÒÐð$ð $ð $ð $ð $ð $ð �w˜q‘z”zØ"˜7 1™:œ:Ø˜ ™
œ
Ø�w˜q‘z”zð	ð ˆOð  /×"6Ò"6Ñ"8Ô"8Ð8Ð8Ð8Ø ÐLÐLÐLñ 9Ô8Ð8ðPð Pð Pð Pð Pð Pð Pð Põ ×#Ò#ØØØ!Ý˜F‘|”|ð	 $ñ ô ð ð ˜aÒÐàÐ!5Ð5Ð5ð6ð 6ð 6ð 6ð 6ð 6ð 6ð
<ð <ð <ð <ð <ð <ð <õ ×#Ò#Ø Y¸ÀFð $ñ ô ð õ
 �­Ñ0Ô0ð	å”Ô ×*Ò*¨?Ñ;Ô;ÝÔ0ò1ð 1å˜vÑ&Ô&¨!Ò+Ð+­v°f´kÑ/BÔ/BÐ+õ ×#Ò#ØØØ×1Ò1ØÐ.°À	ñô ð ð $ñ ô ð ð —n’nØØØØØØØØØñ

ô 

‰ˆˆeð �]Ô2Ò2Ð2Ø!ˆNØ�BŠ;ˆ;ØÐ)Ð)Ð)Ý/RØñ0ô 0Ñ,ˆJÐ,ð Ð)Ð)Ð)Ø'Ð3Ð3Ð3Ø×8Ò8ØØØØØØ ØØ$ØØñô ð ð �QŠYˆYà×(Ò(ØØØØØØ ØØØñ
ô 
ð 
õ ×ÒÝØØØ!ØØ!1Ø-Ø#Ø-ð	ñ 	ô 	ñ
ô 
ð 	
r„   ræ   ú#Union[_NumLike, Sequence[_NumLike]]c                óP  — | 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 dddddddœ|          S )	N)ri  r³  z-infr   )r©  r´  Úinfr7   ©r   r   r   )r«  rª  r¬  r¨  Úwelford_reducerÊ  )r%   r‚  r$   rt   Úiinfor©  ri  ©r®  ræ   s     rƒ   Údefault_accumulatorzReduction.default_accumulatori  sÑ   € ð Ð.Ð.Ð.Ý˜eÑ$Ô$ð .Ý˜V‘}”}Ð$Ý! %Ñ(Ô(ð .Ø�qå”{ 5Ñ)Ô)Ô-Ð-ØÐ.Ð.Ð.Ý˜eÑ$Ô$ð .Ý˜U‘|”|Ð#Ý! %Ñ(Ô(ð .Ø�qå”{ 5Ñ)Ô)Ô-Ð-ð ØØØØ'Ø(ð
ð 
ð ôð 	r„   c                óH   — | dk    rdS t                                | |¦  «        S )Nr‡  r   )rè  rŠ  r‰  s     rƒ   Údefault_valuezReduction.default_value…  s+   € ð Ð-Ò-Ð-Ø�1Ý×,Ò,¨^¸UÑCÔCÐCr„   rH  ra   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 )Nr  é   i   é   )rF   rB  Ú
OUTER_TINY)rH  r  rë  s      rƒ   Ú_multilayer_second_step_hintz&Reduction._multilayer_second_step_hint�  sm   € ð �BŠ;ˆ;Ø!Ð!Ø�CŠ<ˆ<˜J¨#Ò-Ð-°.ÅMÔDWÒ2WÐ2WÝ Ô+Ð+à�TŠMˆMØ˜cÒ!Ð!Ø¥-Ô"5Ò5Ð5å Ô+Ð+àÐr„   r‘  Ú
block_sizeÚdefaultr°  c                óÖ   ‡‡‡‡‡‡	— t                                |‰g¦  «        Š	t          j        j                             t          j        ‰|z  d¦  «        ¦  «         Šdˆˆˆˆˆˆ	fd„}|S )	Nr   r—   ró  r}  rj   rX   c                ó  •‡‡— |\  }| �^ Š}‰|z  |z   Šdˆˆ	ˆˆfd„}‰
ret          j        t          j        ‰t          j        ¦  «        t          j        ‰t          j        ¦  «        ¦  «        }t          j        ||‰¦  «        S  |¦   «         S )Nrj   rX   c                 ó0   •—  ‰‰ ‰‰ g¦  «        ¦  «        S r�   r…   )r+  r‘  Ú	new_indexr¢   s   €€€€rƒ   ÚbodyzCReduction._multilayer_wrap_loader.<locals>.wrapper_fn.<locals>.body´  s!   ø€ Ø�v˜i¨¨°'°Ñ);Ô);Ñ<Ô<Ð<r„   )rj   rX   )rW   rº  rf  rt   Úint32Úmasked)r—   r}  Úreduction_blockr˜  rÄ  r+  r—  r’  r“  r‘  Ú	need_maskr  r¢   s        @@€€€€€€rƒ   Ú
wrapper_fnz5Reduction._multilayer_wrap_loader.<locals>.wrapper_fn­  s³   øøø€ ð "1Ñˆ_Ø*/Ñ'ˆY˜Ø  ?Ñ2°_ÑDˆGð=ð =ð =ð =ð =ð =ð =ð =ð =ð ð Ý”vÝ”N 7­E¬KÑ8Ô8Ý”N ?µE´KÑ@Ô@ñô �õ ”z $¨¨gÑ6Ô6Ð6à�t‘v”v�r„   )r—   ró  r}  ró  rj   rX   )ÚViewÚdynamic_reshape_indexerrY   rè   ré   rp  rz   rq  )
rO  r‘  ré  r  rH  r’  r“  r�  rœ  r¢   s
    ` ` `` @@rƒ   Ú_multilayer_wrap_loaderz!Reduction._multilayer_wrap_loaderž  s•   øøøøøø€ õ ×.Ò.Ð/?À/ÐARÑSÔSˆÝœÔ(×@Ò@ÝŒH�_ uÑ,¨aÑ0Ô0ñ
ô 
ð 
ˆ	ð	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð& Ðr„   ú@Callable[[Sequence[sympy.Expr], Sequence[sympy.Expr]], OpsValue]Úoriginal_rangesÚoriginal_reduction_rangesrI  úSequence[Integer]rJ  c                óØ   ‡‡‡— t          d„ ‰D ¦   «         ¦  «        sJ d‰›�¦   «         ‚t                               |t          |¦  «        t          |¦  «        z   ¦  «        Šd	ˆˆˆfd„}|S )
Nc              3  ó"   K  — | ]
}|d k    V — ŒdS r1  r…   r  s     rƒ   r)  zDReduction._multilayer_wrap_loader_existing_ranges.<locals>.<genexpr>Ë  s7   è è € ð 
ð 
ØˆA�ŠFð
ð 
ð 
ð 
ð 
ð 
r„   z8Only enabled for numel_hint == 1, found original_ranges=Úmerged_indexrÉ  Únew_reduction_indexrj   rX   c           	     óÄ   •— | d t          ‰¦  «        …         }| t          ‰¦  «        d …         } ‰| ‰t          |¦  «        t          |¦  «        z   ¦  «        ¦  «        S r�   )r    rq   )r§  r¨  Úoriginal_idxr—  r‘  r¢  r¢   s       €€€rƒ   r�  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„   )r§  rÉ  r¨  rÉ  rj   rX   )r%  rž  rŸ  rq   )rO  r‘  r¢  r£  rI  rJ  r�  r¢   s    ``    @rƒ   Ú'_multilayer_wrap_loader_existing_rangesz1Reduction._multilayer_wrap_loader_existing_rangesÂ  sº   øøø€ õ ð 
ð 
Ø+ð
ñ 
ô 
ñ 
ô 
ð 	Ið 	IàH°oÐHÐHñ	Iô 	Ið 
õ ×.Ò.Ø%¥u¨ZÑ'8Ô'8½5ÐAUÑ;VÔ;VÑ'Vñ
ô 
ˆð		ð 		ð 		ð 		ð 		ð 		ð 		ð 		ð Ðr„   r�  ú
List[Expr]ú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Ž  r}  rj   rX   c                ó"   •—  ‰g | ¢|¢¦  «        S r�   r…   )r—   r}  Úintermediate_loaders     €rƒ   Úintermediate_fnz;Reduction.create_multilayer_helper.<locals>.intermediate_fn  s!   ø€ ð 'Ð&Ð'A¨Ð'A°Ð'AÑBÔBÐBr„   Nr   )r—   rŽ  r}  rŽ  rj   rX   )rt   Úfloat16Úbfloat16r‚  rè  rN  ru  r‰  rY   rè   ré   rê   rU   r‘  r    re   )rO  rç   r  rê  r�  r¢  r£  rI  rJ  r®  rH  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Ô%×/Ò/µ¸oÑ0NÔ0NÑOÔOˆ
Ø×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 )r¯  r7   )rU   r4   rŒ  r   r·  )rO  rç   r  rê  r+  r,  ré  r®  rH  rë  r  r’  r“  r�  s                 rƒ   r�  zReduction.create_multilayer  s©   € õ$ (Ð(8Ñ9Ô9ˆÝ˜o°¸±Ñ;¸UÑCÔCˆ
Ø×#Ò# N°IÑ>Ô>ˆØ×0Ò0ØÐ&¨¸À
ÈGñ
ô 
ˆ
ð ×+Ò+ØØØØØØØˆfÐ�eÐØˆLØØØñ
ô 
ð 	
r„   c                óz   — |                       |||||¦  «        }|                      ||||||g |¢|¢||	d|
¦  «        S )r¯  r  )r«  r·  )rO  rç   r  rê  r+  r¢  r£  rI  rJ  r®  rë  r�  s               rƒ   r€  z+Reduction.create_multilayer_existing_rangesF  sm   € ð$ ×@Ò@ØØØ%ØØ ñ
ô 
ˆ
ð ×+Ò+ØØØØØØ%Ø+ˆoÐ+ 
Ð+Ø ØØØñ
ô 
ð 	
r„   rë  rø  rù  rä  ©
rŠ  rý   r‹  rŒ  r�  ra  rò  ró  rj   rX   rö  ©rj   rù  rw  rú  r�   )rç   r}  r  rJ  rê  rJ  r+  r‰   r,  rŽ  ré  rŽ  r®  rˆ   r  r   r  rÜ   rj   r  )
r+  rS  ré  rŽ  r®  rˆ   rê  rJ  rj   rT  )rç   r}  r  rJ  rê  rJ  r+  r*  r,  ra  ré  ra  r®  rˆ   rë  rF   r  rÜ   rj   re   ©r®  rˆ   ræ   rJ  rj   rƒ  )rH  ra   r  r~   rë  rF   rj   rF   )r‘  r‰   ré  rŽ  r  ra   rH  ra   r’  ra   r“  rƒ  rj   r°  )r‘  r¡  r¢  ra  r£  ra  rI  r¤  rJ  r¤  rj   r¡  )rç   r}  r  rJ  rê  rJ  r�  r*  r¢  ra  r£  ra  rI  r¬  rJ  r­  r®  rˆ   rH  ra   rë  rF   rj   re   )rç   r}  r  rJ  rê  rJ  r+  r*  r,  ra  ré  ra  r®  rˆ   rH  ra   rë  rF   rj   re   )rç   r}  r  rJ  rê  rJ  r+  r*  r¢  ra  r£  ra  rI  r­  rJ  r­  r®  rˆ   rë  rF   rj   re   )r  rü  rý  rþ  rD  rx  rÆ  rË  rÈ  rö  rø  r_  r3  rÑ  r  rR  rk  ry  rF   r  rN  rŠ  rŒ  r‘  r   r«  r·  r�  r€  r{  r|  s   @rƒ   rè  rè  Â  s°  ø€ € € € € € à(Ð(Ð(Ñ(ØÐÐÑàÐÐÑØ!Ð!Ð!Ñ!ðNð Nð Nð Nð €Hð
ð 
ð 
ð 
ð 
ð 
ð
%ð %ð %ð %ð#ð #ð #ð #ðFð Fð Fð Fð=ð =ð =ð =ðð ð ð ð
Kð Kð Kð Kð

ð 
ð 
ð 
ð ð (,ð]ð ]ð ]ð ]ñ „\ð]ð~ ð-ð -ð -ñ „\ð-ð^ ð )6Ô(=Ø'+ðQ
ð Q
ð Q
ð Q
ñ „[ðQ
ðf ðð ð ñ „\ðð6 ðDð Dð Dñ „\ðDð ðð ð ñ „\ðð  ð!ð !ð !ñ „[ð!ðF ðð ð ñ „[ðð8 ð=
ð =
ð =
ñ „[ð=
ð~ ð$
ð $
ð $
ñ „[ð$
ðL ð$
ð $
ð $
ñ „[ð$
ð $
ð $
ð $
ð $
r„   rè  c                  óŠ   ‡ — e Zd ZU ded<   d&ˆ fd„Zd'd„Zeej        fd(d „¦   «         Z	e
d)d"„¦   «         Zed*d%„¦   «         Zˆ xZS )+ÚWelfordReductionr~   Úoutput_indexrç   r}  ræ   rJ  Ú	inner_fnsú>Sequence[Callable[[Sequence[Expr], Sequence[Expr]], OpsValue]]r,  r¤  ré  r®  rˆ   rë  rF   rj   rk   c	           
     ó®   •‡— t          ‰¦  «        dk    r	‰d         }	nd
ˆfd„}	t          ¦   «                              |||	|||||¬	¦  «         || _        d S )Nr7   r   rÁ   ra  Úreduction_idxrj   ú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<WelfordReduction.__init__.<locals>.loader.<locals>.<genexpr>„  s/   øè è € ÐHÐH¸˜R˜R  ]Ñ3Ô3ÐHÐHÐHÐHÐHÐHr„   )rq   )rÁ   rÃ  rÀ  s   ``€rƒ   r‘  z)WelfordReduction.__init__.<locals>.loader�  s-   øøø€ õ ÐHÐHÐHÐHÐH¸iÐHÑHÔHÑHÔHÐHr„   r   )rÁ   ra  rÃ  ra  rj   rÄ  )r    r>  Ú__init__r¿  )r  rç   ræ   rÀ  r,  ré  r®  rë  r¿  r‘  r@  s      `      €rƒ   rÇ  zWelfordReduction.__init__q  s‘   øø€ õ ˆy‰>Œ>˜QÒÐØ˜q”\ˆFˆFðIð Ið Ið Ið Ið Iõ
 	‰Œ×ÒØØØØØ-Ø)ØØ)ð 	ñ 		
ô 		
ð 		
ð )ˆÔÐÐr„   rŠ  rý   r‹  rŒ  r�  ra  rò  ró  rX   c           	     óÎ   — t          j        | j        | j        | j        |                      ||¦  «        ¦  «        }|| j                 }t          j        | ||¦  «        |¦  «        S r�   )rW   rõ  ræ   rê  r®  r+  r¿  rö  )r  rŠ  r‹  r�  rò  rs   rö   s          rƒ   rö  z WelfordReduction.store_reduction’  sb   € õ ”ØŒJØŒNØÔØ�MŠM˜$ Ñ/Ô/ñ	
ô 
ˆð �tÔ(Ô)ˆÝÔ" ;°°¸±´¸uÑEÔEÐEr„   úSequence[Callable[..., Any]]r­  úSequence[TensorBox]c           
     óÊ  ‡‡‡‡‡‡‡‡— ‰dv sJ ‚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)r‡  rÊ  rm  r~   rj   re   c                ój   •‡ — dˆˆ fd„}t                                ‰‰|t          ‰¦  «        ¬¦  «        S )NrÁ   ra  rj   rX   c                ó.   •— t          j        ‰‰¦  «        S r�   ru  )rÁ   ræ   rm  s    €€rƒ   r+  z8WelfordReduction.create.<locals>.const.<locals>.inner_fn²  s   ø€ Ý”|ØØñô ð r„   r—  ©rÁ   ra  rj   rX   ©r…  rN  rp   )rm  r+  rç   ræ   r,  s   ` €€€rƒ   Úconstz&WelfordReduction.create.<locals>.const±  sX   øø€ ðð ð ð ð ð ð õ ×#Ò#ØØØ!Ý˜F‘|”|ð	 $ñ ô ð r„   r   r7   r‘  ú4Callable[[Sequence[Expr], Sequence[Expr]], OpsValue]c                ój   •‡ — dˆ ˆfd„}t                                ‰‰|t          ‰¦  «        ¬¦  «        S )NrÁ   ra  rj   rX   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Á   r}  r‘  ré  s     €€rƒ   r+  z7WelfordReduction.create.<locals>.copy.<locals>.inner_fnÊ  s)   ø€ Ø&NÐ&NÐ=MÐ&NÑ&NÔ&N�OØ!˜6 # Ñ7Ô7Ð7r„   r—  rÎ  rÏ  )r‘  r+  rç   ræ   r,  ré  s   ` €€€€rƒ   Úcopyz%WelfordReduction.create.<locals>.copyÇ  sX   øø€ ð8ð 8ð 8ð 8ð 8ð 8ð 8õ !×'Ò'Ø!ØØ%Ý ™<œ<ð	 (ñ ô ð r„   r‡  c              3  ó.   •K  — | ]} ‰|¦  «        V — Œd S r�   r…   )r›   r‘   rÕ  s     €rƒ   r)  z*WelfordReduction.create.<locals>.<genexpr>Ø  s+   øè è € Ð:Ð:¨"˜T˜T "™XœXÐ:Ð:Ð:Ð:Ð:Ð:r„   )r®  r  c                ól   •— g | ]0}t                                t          ‰‰‰‰‰‰‰|¦  «        ¦  «        ‘Œ1S r…   )re   rN  r¾  )	r›   Ú
output_idxrç   ræ   rÀ  r,  rë  ré  r®  s	     €€€€€€€rƒ   rž   z+WelfordReduction.create.<locals>.<listcomp>  s`   ø€ ð 
ð 
ð 
ð õ ×ÒÝ ØØØØØ$Ø"Ø"Øñ	ô 	ñô ð
ð 
ð 
r„   r³   )rm  r~   rj   re   )r‘  rÑ  rj   re   )rY   rè   ré   r~  rU   rq   rè  rR  rF   r  r�  r¡   ru  )rO  rç   ræ   rÀ  r,  ré  r®  rë  r  rÐ  ÚmeanÚm2Úweightr‚  rH  Úresultsrõ   rÕ  s    ```````         @rƒ   rN  zWelfordReduction.create¢  s9  øøøøøøøø€ ð Ð!FÐFÐFÐFÐFåœ'Ô*×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ƒ  c                ó   — dS )Nr†  r…   r‰  s     rƒ   rŒ  zWelfordReduction.default_value  s	   € ð ˆyr„   rH  ra   c	                ó6  ‡ ‡‡‡‡‡‡— t          ‰¦  «        Št          j        j                             t          j        ‰‰z  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 )r¯  r   rÊ  rÁ   ra  rÃ  rö   r~   rj   rX   c                ó.   •— t          j        |‰¦  «        S r�   ru  )rÁ   rÃ  rö   ræ   s      €rƒ   r�  z4WelfordReduction.create_multilayer.<locals>.constant9  s   ø€ õ ”| E¨5Ñ1Ô1Ð1r„   rú   r7   )rç   ræ   rÀ  r,  ré  r®  rH  rë  c           	   3  óN   •K  — | ]}‰                      |‰‰‰‰d ¬¦  «        V — Œ dS )r   )r“  N)r   )r›   r‘  r’  rO  r  ré  rH  s     €€€€€rƒ   r)  z5WelfordReduction.create_multilayer.<locals>.<genexpr>Q  s`   øè è € ð 
ð 
ð ð ×+Ò+ØØ$Ø#ØØØð ,ñ ô ð
ð 
ð 
ð 
ð 
ð 
r„   r—   r}  r‘  r†  c                ó    —  |g | ¢|¢¦  «        S r�   r…   )r—   r}  r‘  s      rƒ   Úintermediate_loader_fnzBWelfordReduction.create_multilayer.<locals>.intermediate_loader_fnd  s   € ð
 �6Ð4˜EÐ4 OÐ4Ñ5Ô5Ð5r„   c              3  ó^   •K  — | ]'}t          ‰|                     ¦   «         ¬ ¦  «        V — Œ(dS ))r‘  N)r   r‰  )r›   rœ   râ  s     €rƒ   r)  z5WelfordReduction.create_multilayer.<locals>.<genexpr>r  sM   øè è € ð ð àõ Ð.°q·}²}±´ÐGÑGÔGðð ð ð ð ð r„   )rÁ   ra  rÃ  ra  rö   r~   rj   rX   )r—   ra  r}  ra  r‘  r†  rj   rX   )rU   rY   rè   ré   rp  rz   rq  r�  r   r4   r¾  rN  rq   ru  rê   r‘  )rO  rç   ræ   rÀ  r,  ré  r®  rH  rë  rœ  r�  Úintermediatesrœ   r  r’  râ  r  s   ` `  ` `      @@@rƒ   r�  z"WelfordReduction.create_multilayer   sN  øøøøøøø€ õ  (Ð(8Ñ9Ô9ˆÝœÔ(×@Ò@ÝŒH�_ uÑ,¨aÑ0Ô0ñ
ô 
ð 
ˆ	ð ð 	˜Ð+<Ò<Ð<ð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Ô%×/Ò/µ¸fÑ0EÔ0EÑFÔFˆ
Ø×9Ò9Ø�:˜~ñ
ô 
ˆõ  ×&Ò&ØØÝð ð ð ð à&ðñ ô ñ ô ð ØˆGàØñ
ô 
ð 	
r„   )rç   r}  ræ   rJ  rÀ  rÁ  r,  r¤  ré  r¤  r®  rˆ   rë  rF   r¿  r~   rj   rk   rº  )rç   r}  ræ   rJ  rÀ  rÉ  r,  r­  ré  r­  r®  rˆ   rë  rF   rj   rÊ  r¼  )rç   r}  ræ   rJ  rÀ  rÉ  r,  r­  ré  r­  r®  rˆ   rH  ra   rë  rF   rj   rÊ  )r  rü  rý  rþ  rÇ  rö  ry  rF   r  rN  r  rŒ  r�  r{  r|  s   @rƒ   r¾  r¾  n  sß   ø€ € € € € € ØÐÐÑð)ð )ð )ð )ð )ð )ðBFð Fð Fð Fð  ð )6Ô(=ðuð uð uð uñ „[ðuðn ðð ð ñ „\ðð
 ðZ
ð Z
ð Z
ñ „[ðZ
ð Z
ð Z
ð Z
ð Z
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<   d>ˆ fd„Zd?ˆ fd„Zd@d„ZdAd„ZdBd!„ZdCd"„Z	dCd#„Z
dDd$„ZdEd&„ZdFd(„Zeej        fd)d*œdGd4„¦   «         ZedHd=„¦   «         Zˆ xZS )IÚScanr­  Úscan_rangesrä   ú=Callable[[Tuple[Any, ...], Tuple[Any, ...]], Tuple[Any, ...]]r`  zFCallable[[Sequence[_IntLike], Sequence[_IntLike]], Sequence[_IntLike]]r¢   rF   rë  r~   r¿  úTuple[torch.dtype, ...]ÚdtypesúTuple[Callable[..., Any], ...]rÀ  rj   rÄ  c                óÜ   •— t          ¦   «                              ¦   «          t          ¦   «         j        d„ | j        D ¦   «         Ž z   t          ¦   «         j        d„ | j        D ¦   «         Ž z  S )Nc              3  ó4   K  — | ]}t          |¦  «        V — Œd S r�   r/  r0  s     rƒ   r)  z0Scan.get_unbacked_symbol_uses.<locals>.<genexpr>’  ó+   è è € Ð"VÐ"VÀÕ#8¸Ñ#;Ô#;Ð"VÐ"VÐ"VÐ"VÐ"VÐ"Vr„   c              3  ó4   K  — | ]}t          |¦  «        V — Œd S r�   r/  r0  s     rƒ   r)  z0Scan.get_unbacked_symbol_uses.<locals>.<genexpr>“  ó+   è è € Ð"OÐ"OÀÕ#8¸Ñ#;Ô#;Ð"OÐ"OÐ"OÐ"OÐ"OÐ"Or„   )r>  rÆ  r2   r2  rç  rä   r?  s    €rƒ   rÆ  zScan.get_unbacked_symbol_usesŒ  sn   ø€ õ
 ‰GŒG×,Ò,Ñ.Ô.Ø �j‰lŒlÔ Ð"VÐ"VÀTÔEUÐ"VÑ"VÔ"VÐWñXà �j‰lŒlÔ Ð"OÐ"OÀTÄYÐ"OÑ"OÔ"OÐPñQð	
r„   rk   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Scan.__post_init__–  óR   ø€ Ý�4”;ÑÔ¥# dÔ&6Ñ"7Ô"7Ñ7½3¸t¼y¹>¼>ÒIÐIÐIÐIÝ‰Œ×ÒÑÔÐÐÐr„   rŠ  rý   r‹  ú%Callable[[Sequence[_IntLike]], Never]r�  ra  Ú	scan_varsró  rX   c                óê   ‡— |                       ||¦  «        Šˆfd„| j        D ¦   «         }t          j        | j        | j        |¦  «        }t          j        | |‰¦  «        || j                 ¦  «        S )Nc                ó&   •— g | ]} |‰¦  «        ‘ŒS r…   r…   ©r›   r+  rÁ   s     €rƒ   rž   z(Scan.store_reduction.<locals>.<listcomp>¢  ó!   ø€ Ð?Ð?Ð? H�(�(˜3‘-”-Ð?Ð?Ð?r„   )r¢   rÀ  rW   r	  rê  r`  r�  r¿  )r  rŠ  r‹  r�  rô  rs   ÚresultrÁ   s          @rƒ   rö  zScan.store_reductionš  sn   ø€ ð �lŠl˜4 Ñ+Ô+ˆØ?Ð?Ð?Ð?°´Ð?Ñ?Ô?ˆÝ”˜$œ+ t¤¸Ñ?Ô?ˆÝŒy˜ g g¨c¡l¤l°F¸4Ô;LÔ4MÑNÔNÐNr„   c                ó   — dS )NÚcustomr…   r!  s    rƒ   rÈ  zScan.get_reduction_type¦  s   € àˆxr„   rÉ  c                ó   — | j         S r�   )rç  r!  s    rƒ   rË  zScan.get_reduction_sizeª  r4  r„   c                ó   — | j         S r�   ©rä   r!  s    rƒ   rë   zScan.get_size­  ó
   € ØŒyÐr„   c                ó   — | j         S r�   rB  r!  s    rƒ   rK  zScan.get_pointwise_size°  rG  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„   rc  c                ó²   — |                       | j        ¦  «        }|                       | j        t          j        ¦  «        }|                      ||¦  «        }|fS r�   )rY  r,  rç  r6   rû  r¢   ©r  r—   rý  rÁ   s       rƒ   r_  zScan.inner_fn_args¶  óG   € Ø—’˜DœKÑ(Ô(ˆØ—’˜TÔ-­t¬{Ñ;Ô;ˆØ�lŠl˜5 &Ñ)Ô)ˆØˆvˆr„   rl  c                óÖ   — |                       | j        ¦  «        }|                       | j        t          j        ¦  «        }|                      ||¦  «        }t          | j        |¦  «        S r�   )rY  r,  rç  r6   rû  r¢   r=   r+  r  s       rƒ   r3  z#Scan.inner_fn_free_unbacked_symbols¼  óR   € Ø—’˜DœKÑ(Ô(ˆØ—’˜TÔ-­t¬{Ñ;Ô;ˆØ�lŠl˜5 &Ñ)Ô)ˆÝ,¨T¬]¸CÑ@Ô@Ð@r„   T)Úcan_fallback_to_atenrç   r}  ú+Tuple[Callable[[Sequence[Expr]], Any], ...]Úaxisr  rÕ   r�   r   úSequence[Optional[TensorBox]]c               ór  ‡‡‡‡‡‡‡‡	‡‡‡‡— 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    rGt           j        j        d u ot          ‰¦  «        dk    }|s|rd gt          ‰¦  «        z  S d}nt&          Šdˆˆˆfd
„Šˆˆˆˆˆ	ˆˆˆˆˆˆfd„t          t          ‰¦  «        ¦  «        D ¦   «         }|D ]}|                     ¦   «          Œ|S )Nr7   c                ód   •— g | ],}t                                ‰‰|         ‰|         ‰¬ ¦  «        ‘Œ-S ©r—  ©r…  rN  ©r›   r¿  rç   rê  rÀ  rä   s     €€€€rƒ   rž   zScan.create.<locals>.<listcomp>ã  óV   ø€ ð ð ð ð !õ × Ò Ø!Ø  Ô.Ø& |Ô4Øð	 !ñ ô ðð ð r„   r   )rç   ræ   r+  r
  Úpointwise_rangesrç  r`  Ú
scan_numelr—   ra  Ú
scan_indexrj   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>.reindex  ó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…   )re   rN  )r›   r¿  r`  rç   rê  rÀ  r�   r  rë  r¢   rç  Ú	scan_typerä   s     €€€€€€€€€€€rƒ   rž   zScan.create.<locals>.<listcomp>  sŒ   ø€ ð 
ð 
ð 
ð$ õ# ×ÒØ�	ð Ø!Ø  Ô.Ø!Ø& |Ô4Ø'ØØ+Ø +Ø)Ø#Ø#1Ø!-ðð ð ðð ñô ð
ð 
ð 
r„   )r—   ra  r  ra  rj   r¬  )rY   rè   r4  r:   ÚSCANr    ÚTUPLE_REDUCTIONré   r~  rU   rp  rz   ÚLer¡   rR  ræ  rt   ÚversionÚhipÚ	SplitScanru  )rO  rç   rê  rÀ  rä   r
  r`  rë  r  r�   ré   r  rR  Úsupports_splitrÜ  rù  r  r¢   rç  r  s    ``````` `      @@@@rƒ   rN  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Ò,Ð,Ð,Ð,ð ×+Ò+­E¬H°ZÀÑ,CÔ,CÑDÔDð 		ðð ð ð ð ð ð õ %*­#¨f©+¬+Ñ$6Ô$6ðñ ô ð ð &)§^¢^ØØ˜”)Ø˜q”\ØØ-Ø#Ø!Ø!ð &4ñ 	&
ô 	&
Ñ"ˆ˜
õ ˆ	Ø˜Š>ˆ>Ý"œ]Ô.°$Ð6ÐK½3¸v¹;¼;È!Ò;KˆNØ!ð &Ø'ð #à ˜6¥C¨¡K¤KÑ/Ð/à!"�J�Jå%�	ð	?ð 	?ð 	?ð 	?ð 	?ð 	?ð 	?ð 	?ð

ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
õ$ !&¥c¨&¡k¤kÑ 2Ô 2ð%
ñ 
ô 
ˆð* ð 	ð 	ˆFØ�NŠNÑÔÐÐàˆr„   ræ   rJ  r+  r†  r  r  r   r  c	           
     óX   ‡‡— d	ˆˆfd„}	t                                ||||	||d|¬¦  «        S )
NrÁ   ra  rÃ  rj   rX   c                óF   •—  ‰g | d ‰…         ¢|¢| ‰d …         ¢¦  «        S r�   r…   )rÁ   rÃ  r
  r+  s     €€rƒ   r�  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é  r®  r  )rÁ   ra  rÃ  ra  rj   rX   )rè  rR  )
rO  rç   ræ   r+  r
  r  rç  r`  r  r�  s
      ``     rƒ   rR  zScan.num_splits"  se   øø€ ð	Hð 	Hð 	Hð 	Hð 	Hð 	Hð 	Hõ ×#Ò#ØØØØØ#Ø(Ø!Ø&ð $ñ 	
ô 	
ð 		
r„   rø  rÙ  )
rŠ  rý   r‹  ró  r�  ra  rô  ró  rj   rX   rä  rù  râ  rö  rv  rw  )rç   r}  rê  ré  rÀ  r	  rä   r­  r
  r~   r`  rè  rë  rF   r  rÕ   r�   r   rj   r  )rç   r}  ræ   rJ  r+  r†  r
  r~   r  r­  rç  r­  r`  rè  r  r   rj   r  )r  rü  rý  rþ  rÆ  r"  rö  rÈ  rË  rë   rK  rø  r_  r3  ry  rF   r  rN  rR  r{  r|  s   @rƒ   ræ  ræ  ~  sÉ  ø€ € € € € € àÐÐÑØÐÐÑØMÐMÐMÑMØSÐSÐSÑSØ!Ð!Ð!Ñ!ØÐÐÑà#Ð#Ð#Ñ#Ø-Ð-Ð-Ñ-ð
ð 
ð 
ð 
ð 
ð 
ð ð  ð  ð  ð  ð  ð
Oð 
Oð 
Oð 
Oðð ð ð ð ð  ð  ð  ðð ð ð ðð ð ð ð8ð 8ð 8ð 8ðð ð ð ðAð Að Að Að ð )6Ô(=ð]ð &*ð]ð ]ð ]ð ]ð ]ñ „[ð]ð~ ð
ð 
ð 
ñ „[ð
ð 
ð 
ð 
ð 
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<   d0ˆ fd„Zd1ˆ fd„Zd2d„Zd3d„Zd4d „Zd4d!„Z	d4d"„Z
d5d#„Zd6d%„Zd7d'„Zeej        fd8d/„¦   «         Zˆ xZS )9ÚSortr­  Úsort_rangesrä   z:Callable[[Sequence[Expr], Sequence[Expr]], Sequence[Expr]]r¢   rF   rë  r~   r¿  ré  rê  rë  rÀ  rÕ   ÚstableÚ
descendingrj   rÄ  c                óÜ   •— t          ¦   «                              ¦   «          t          ¦   «         j        d„ | j        D ¦   «         Ž z   t          ¦   «         j        d„ | j        D ¦   «         Ž z  S )Nc              3  ó4   K  — | ]}t          |¦  «        V — Œd S r�   r/  r0  s     rƒ   r)  z0Sort.get_unbacked_symbol_uses.<locals>.<genexpr>X  rî  r„   c              3  ó4   K  — | ]}t          |¦  «        V — Œd S r�   r/  r0  s     rƒ   r)  z0Sort.get_unbacked_symbol_uses.<locals>.<genexpr>Y  rð  r„   )r>  rÆ  r2   r2  r&  rä   r?  s    €rƒ   rÆ  zSort.get_unbacked_symbol_usesU  sl   ø€ å‰GŒG×,Ò,Ñ.Ô.Ø �j‰lŒlÔ Ð"VÐ"VÀTÔEUÐ"VÑ"VÔ"VÐWñXà �j‰lŒlÔ Ð"OÐ"OÀTÄYÐ"OÑ"OÔ"OÐPñQð	
r„   rk   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„   rŠ  rý   r‹  r‹  r�  ra  rò  rX   c                óö   ‡— |                       ||¦  «        Šˆfd„| j        D ¦   «         }t          j        | j        || j        | j        ¦  «        }t          j        | |‰¦  «        || j                 ¦  «        S )Nc                ó&   •— g | ]} |‰¦  «        ‘ŒS r…   r…   r÷  s     €rƒ   rž   z(Sort.store_reduction.<locals>.<listcomp>h  rø  r„   )	r¢   rÀ  rW   Úsortrê  r'  r(  r�  r¿  )r  rŠ  r‹  r�  rò  rs   rù  rÁ   s          @rƒ   rö  zSort.store_reduction`  sr   ø€ ð �lŠl˜4 Ñ0Ô0ˆØ?Ð?Ð?Ð?°´Ð?Ñ?Ô?ˆÝ”˜$œ+ v¨t¬{¸D¼OÑLÔLˆÝŒy˜ g g¨c¡l¤l°F¸4Ô;LÔ4MÑNÔNÐNr„   c                ó   — dS )Nr/  r…   r!  s    rƒ   rÈ  zSort.get_reduction_typel  s   € Øˆvr„   c                ó   — | j         S r�   )r&  r!  s    rƒ   rË  zSort.get_reduction_sizeo  r4  r„   c                ó   — | j         S r�   rþ  r!  s    rƒ   rë   zSort.get_sizer  rÿ  r„   c                ó   — | j         S r�   rB  r!  s    rƒ   rK  zSort.get_pointwise_sizeu  rG  r„   c                óT   — t          | j        ¦  «        t          | j        ¦  «        z   S r�   )r    r,  r&  r!  s    rƒ   rø  zSort.index_lengthx  r  r„   rù  c                ó²   — |                       | j        ¦  «        }|                       | j        t          j        ¦  «        }|                      ||¦  «        }|fS r�   )rY  r,  r&  r6   rû  r¢   r  s       rƒ   r_  zSort.inner_fn_args{  r  r„   rl  c                óÖ   — |                       | j        ¦  «        }|                       | j        t          j        ¦  «        }|                      ||¦  «        }t          | j        |¦  «        S r�   )rY  r,  r&  r6   rû  r¢   r=   r+  r  s       rƒ   r3  z#Sort.inner_fn_free_unbacked_symbols�  r  r„   rç   r}  ú'Tuple[Callable[[List[Expr]], Any], ...]r
  r�   r   r  c	                ór  ‡‡‡‡‡‡‡‡‡	‡‡‡— g ‰d ‰…         ¢‰‰dz   d …         ¢Š‰‰         gŠt           j                             ‰t          j        ¦  «        sd gt          ‰¦  «        z  S t           j        j        }
|
                     t          ‰¦  «        ¦  «        }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 )Nr7   rŽ  c                ód   •— g | ],}t                                ‰‰|         ‰|         ‰¬ ¦  «        ‘Œ-S r  r  r  s     €€€€rƒ   rž   zSort.create.<locals>.<listcomp>¬  r  r„   r—   ra  Ú
sort_indexrj   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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…   )re   rN  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—   ra  r:  ra  rj   r¬  )rY   rè   r4  r:   ÚSORTr    ré   r~  rU   r8   ÚtritonÚpersistent_reductionsrp  rz   r  r¡   ru  )rO  rç   rê  rÀ  rä   r
  r'  r(  rë  r�   ré   Ú
sort_numelÚ
max_rblockÚis_persistent_kernelrÜ  rù  r  r¢   r&  s    `````````      @@@rƒ   rN  zSort.create‡  s/  øøøøøøøøøøøø€ ð =˜T % 4 %œ[Ð<¨4°°q±°
°
Ô+;Ð<ÐØ˜D”z�lˆåŒw×"Ò" 6­>Ô+>Ñ?Ô?ð 	(Ø�6�C ™KœKÑ'Ð'å”7Ô#ˆØ×&Ò&¥}°[Ñ'AÔ'AÑBÔBˆ
ð ˆ
åŒMÔ/ð SØ×0Ò0µ´¸*ÀjÑ1QÔ1QÑRÔRð 	ð $ð 	(à�6�C ™KœKÑ'Ð'å�6‰{Œ{�c )™nœnÒ,Ð,Ð,Ð,ð ×+Ò+­E¬H°ZÀÑ,CÔ,CÑDÔDð 		ðð ð ð ð ð ð õ %*­#¨f©+¬+Ñ$6Ô$6ðñ ô ð ð	?ð 	?ð 	?ð 	?ð 	?ð 	?ð 	?ð 	?ð

ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
õ& !&¥c¨&¡k¤kÑ 2Ô 2ð'
ñ 
ô 
ˆð, ð 	ð 	ˆFØ�NŠNÑÔÐÐàˆr„   rø  rÙ  )
rŠ  rý   r‹  r‹  r�  ra  rò  ra  rj   rX   rä  râ  rö  r»  rw  )rç   r}  rê  ré  rÀ  r7  rä   r­  r
  r~   r'  rÕ   r(  rÕ   rë  rF   r�   r   rj   r  )r  rü  rý  rþ  rÆ  r"  rö  rÈ  rË  rë   rK  rø  r_  r3  ry  rF   r  rN  r{  r|  s   @rƒ   r%  r%  D  s¦  ø€ € € € € € ð ÐÐÑØÐÐÑØGÐGÐGÑGØ!Ð!Ð!Ñ!ØÐÐÑà#Ð#Ð#Ñ#Ø-Ð-Ð-Ñ-à€L€L�LØÐÐÑð
ð 
ð 
ð 
ð 
ð 
ð ð  ð  ð  ð  ð  ð
Oð 
Oð 
Oð 
Oðð ð ð ð ð  ð  ð  ðð ð ð ðð ð ð ð8ð 8ð 8ð 8ðð ð ð ðAð Að Að Að ð )6Ô(=ðLð Lð Lð Lñ „[ðLð Lð Lð Lð Lr„   r%  c                óL   — 	 t          | d¬¦  «         dS # t          $ r Y dS w xY w)NF©ÚfreezeT)Úas_storage_and_layoutrO  r  s    rƒ   rì   rì   ×  sA   € ðÝ˜a¨Ð.Ñ.Ô.Ð.ØˆtøÝð ð ð Øˆuˆuðøøøs   ‚ •
#¢#c                óÆ   — 	 t          | d¬¦  «        \  }}|                     ¦   «         r|                     ¦   «          |                     ¦   «         S # t          $ r Y dS w xY w©NFrD  )rF  Úshould_pad_stridesÚpad_stridesÚis_contiguousrO  )rÒ   Úbufferr  s      rƒ   Ú is_contiguous_storage_and_layoutrM  ß  sy   € ðÝ.¨q¸Ð?Ñ?Ô?‰ˆ�ð ×$Ò$Ñ&Ô&ð 	!Ø×ÒÑ Ô Ð Ø×#Ò#Ñ%Ô%Ð%øÝð ð ð Øˆuˆuðøøøs   ‚AA Á
A ÁA rE  Úwant_contiguousÚstride_orderú'Optional[Sequence[Union[int, Integer]]]r¨  r´  úTuple[StorageBox, Layout]c                ó´  — t          | t          ¦  «        rt          | j        |||||¬¦  «        S t          | t          ¦  «        r×t          | j        t
          ¦  «        r½|r |rG| j                             ¦   «          | j                             ¦   «                              ¦   «         sJ ‚nW|�| j         	                    ||¬¦  «         n8|�| j         
                    ||¬¦  «         n| j                             ¦   «          | | j                             ¦   «         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.
    ©rE  rN  rO  r¨  r´  N©r¨  rD  )ro   re   rF  r  Ú
StorageBoxÚBufferr¦  rí   rK  r«  r·  r(  ÚReinterpretViewr  rO  )rÒ   rE  rN  rO  r¨  r´  rL  rÎ   s           rƒ   rF  rF  ë  s�  € õ �!•YÑÔð 
Ý$ØŒFØØ+Ø%Ø'Ø'ð
ñ 
ô 
ð 	
õ �!•ZÑ Ô ð &¥Z°´½Ñ%?Ô%?ð &Øð 	'Øð 'Ø”×$Ò$Ñ&Ô&Ð&Ø”v×(Ò(Ñ*Ô*×8Ò8Ñ:Ô:Ð:Ð:Ð:Ð:ØÐ)Ø”×6Ò6Ø °ð 7ñ ô ð ð ð Ð*Ø”×7Ò7Ø!°ð 8ñ ô ð ð ð ”×$Ò$Ñ&Ô&Ð&Ø�!”&×#Ò#Ñ%Ô%Ð%Ð%Ý�!•_Ñ%Ô%ð  õ *ØŒFØð
ñ 
ô 
‰	ˆ�ð �q”xÐÐÝ
Ðr„   )rN  c                óx   — 	 t          | d¬¦  «        \  }}|                     |¦  «        S # t          $ r Y dS w xY wrH  )rF  Úis_stride_orderedrO  )rÒ   rO  rL  r  s       rƒ   Ú"is_stride_order_storage_and_layoutrZ  "	  sS   € ðÝ.¨q¸Ð?Ñ?Ô?‰ˆ�Ø×'Ò'¨Ñ5Ô5Ð5øÝð ð ð Øˆuˆuðøøøs   ‚(+ «
9¸9c                  óÌ   — e Zd ZU ded<   d-d„Zd.d„Zd/d	„Zd0d„Zed1d„¦   «         Z	d2d„Z
d3d„Zd4d„Zd5d„Zd6d„Zd7d„Zd8d„Zd9d„Zd „ Zd!„ Zd8d"„Zd8d#„Zd:d%„Zd;d'„Zd(„ Zd<d+„Zd,S )=ÚBaseViewrf   r  rj   rÄ  c                ó4   — | j                              ¦   «         S r�   ©r  rÆ  r!  s    rƒ   rÆ  z!BaseView.get_unbacked_symbol_uses0	  ó   € ØŒy×1Ò1Ñ3Ô3Ð3r„   ú*Callable[[Sequence[Expr]], Sequence[Expr]]c                ó&   — t          d| › �¦  «        ‚)Nzmake_reindexer NYI on r  r!  s    rƒ   Úmake_reindexerzBaseView.make_reindexer3	  s   € Ý!Ð"A¸4Ð"AÐ"AÑBÔBÐBr„   r‹  c                ór   ‡‡— | j                              ¦   «         Š|                      ¦   «         Šdˆˆfd„}|S )NrÁ   ra  rj   r   c                ó,   •—  ‰ ‰| ¦  «        ¦  «        S r�   r…   ©rÁ   Úinnerr¢   s    €€rƒ   r‹  z&BaseView.make_indexer.<locals>.indexer:	  ó   ø€ Ø�5˜˜ ™œÑ&Ô&Ð&r„   )rÁ   ra  rj   r   )r  r�  rb  )r  r‹  rf  r¢   s     @@rƒ   r�  zBaseView.make_indexer6	  sR   øø€ Ø”	×&Ò&Ñ(Ô(ˆØ×%Ò%Ñ'Ô'ˆð	'ð 	'ð 	'ð 	'ð 	'ð 	'ð 	'ð ˆr„   r†  c                ór   ‡‡— | j                              ¦   «         Š|                      ¦   «         Šdˆˆfd„}|S )NrÁ   ra  rj   rX   c                ó,   •—  ‰ ‰| ¦  «        ¦  «        S r�   r…   re  s    €€rƒ   r‘  z$BaseView.make_loader.<locals>.loaderC	  rg  r„   rÎ  )r  r‰  rb  )r  r‘  rf  r¢   s     @@rƒ   r‰  zBaseView.make_loader?	  sR   øø€ Ø”	×%Ò%Ñ'Ô'ˆØ×%Ò%Ñ'Ô'ˆð	'ð 	'ð 	'ð 	'ð 	'ð 	'ð 	'ð ˆr„   rJ  c                ó4   — | j                              ¦   «         S r�   )r  rð   r!  s    rƒ   ræ   zBaseView.dtypeH	  s   € àŒy×"Ò"Ñ$Ô$Ð$r„   rR  c                ó4   — | j                              ¦   «         S r�   ©r  rí   r!  s    rƒ   rí   zBaseView.get_layoutL	  ó   € ØŒy×#Ò#Ñ%Ô%Ð%r„   r{  c                ó4   — | j                              ¦   «         S r�   ©r  rñ   r!  s    rƒ   rñ   zBaseView.get_deviceO	  rm  r„   r  c                ó   — d S r�   r…   r!  s    rƒ   r3  zBaseView.get_origin_nodeR	  r8  r„   rˆ   c                ó4   — | j                              ¦   «         S r�   ©r  r”  r!  s    rƒ   r”  zBaseView.get_nameU	  ó   € ØŒy×!Ò!Ñ#Ô#Ð#r„   ra  c                ó*   — |                       ¦   «         S r�   ri  r!  s    rƒ   rK  zBaseView.get_pointwise_sizeX	  ó   € Ø�}Š}‰ŒÐr„   rœ  r~   rk   c                ó6   — | j                              |¦  «        S r�   ©r  rŸ  rž  s     rƒ   rŸ  zBaseView.mark_reuse[	  ó   € ØŒy×#Ò# EÑ*Ô*Ð*r„   rÕ   c                ó4   — | j                              ¦   «         S r�   ©r  r„  r!  s    rƒ   r„  zBaseView.has_exceeded_max_reads^	  ó   € ØŒy×/Ò/Ñ1Ô1Ð1r„   rý   c                ó4   — | j                              ¦   «         S r�   ©r  ru  r!  s    rƒ   ru  zBaseView.realizea	  ó   € ØŒy× Ò Ñ"Ô"Ð"r„   c                ó4   — | j                              ¦   «         S r�   ©r  r¢  r!  s    rƒ   r¢  zBaseView.realize_hintd	  ó   € ØŒy×%Ò%Ñ'Ô'Ð'r„   c                ó4   — | j                              ¦   «         S r�   ©r  rÃ  r!  s    rƒ   rÃ  zBaseView.get_storage_numelg	  ó   € ØŒy×*Ò*Ñ,Ô,Ð,r„   c                ó4   — | j                              ¦   «         S r�   ©r  rÍ  r!  s    rƒ   rÍ  zBaseView.is_externj	  ó   € ØŒy×"Ò"Ñ$Ô$Ð$r„   c                ó4   — | j                              ¦   «         S r�   )r  Úis_module_bufferr!  s    rƒ   r‰  zBaseView.is_module_bufferm	  ó   € ØŒy×)Ò)Ñ+Ô+Ð+r„   r#  c                ó4   — | j                              ¦   «         S r�   ©r  r-  r!  s    rƒ   r-  zBaseView.get_read_namesp	  ó   € ØŒy×'Ò'Ñ)Ô)Ð)r„   r»  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î   r?   r‰  rë   r¾  r!  s    rƒ   r,  zBaseView.get_readss	  s§   € ÝŒ\�.Ð*:¸DÑAÔAð 	ð 	Ý&Ø× Ò Ñ"Ô"Ø—’‘”ñô ô ð		ð 	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	s   œ9A"Á"A&Á)A&c                ól   — | }t          |t          ¦  «        r|j        }t          |t          ¦  «        °|S r�   )ro   r\  r  )r  rÒ   s     rƒ   r¤  zBaseView.unwrap_viewz	  s9   € ØˆÝ˜�HÑ%Ô%ð 	Ø”ˆAõ ˜�HÑ%Ô%ð 	àˆr„   rç   r}  c                óà   — |                       ¦   «         } t          j        t          d|¦  «        |¦  «        }t	          ||                      ¦   «         ||                      ¦   «         ¬¦  «        S r”  )r‰  r   rŒ   r˜  r…  rð   rë   r™  s      rƒ   rÑ  zBaseView.constant_to_device€	  sf   € à×!Ò!Ñ#Ô#ˆØH•”�nÐ.?ÀÑHÔHÈÑPÔPˆÝØØ—.’.Ñ"Ô"ØØ—=’=‘?”?ð	
ñ 
ô 
ð 	
r„   Nrø  )rj   r`  ré  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ñ   r3  r”  rK  rŸ  r„  ru  r¢  rÃ  rÍ  r‰  r-  r,  r¤  rÑ  r…   r„   rƒ   r\  r\  ,	  sÄ  € € € € € € à€L€L�Lð4ð 4ð 4ð 4ðCð Cð Cð Cðð ð ð ðð ð ð ð ð%ð %ð %ñ „Xð%ð&ð &ð &ð &ð&ð &ð &ð &ðð ð ð ð$ð $ð $ð $ðð ð ð ð+ð +ð +ð +ð2ð 2ð 2ð 2ð#ð #ð #ð #ð(ð (ð (ð-ð -ð -ð%ð %ð %ð %ð,ð ,ð ,ð ,ð*ð *ð *ð *ðð ð ð ðð ð ð	
ð 	
ð 	
ð 	
ð 	
ð 	
r„   r\  c                  óT   — e Zd ZU ded<   ed„ ¦   «         Zed„ ¦   «         Zd
d„Zd„ Z	d	S )rw   r¬  rä   c                óÌ  — t           j        j        }t          t	          t
          j        |¦  «        ¦  «        }|                      ¦   «         }dgt          |¦  «        t          |¦  «        z
  z  t          |¦  «        z   }t          |¦  «        t          |¦  «        k    sJ ‚t          t          |¦  «        ¦  «        D ]¥}||         dk    r||         €J ‚||         ||<   Œ$||         �Dt           j        j        j
                             t          j        ||         d¦  «        d¬¦  «        rŒq|                     ||         ||         z
  d¬¦  «        dk    s
J d¦   «         ‚Œ¦|S )	zReplace `-1` with correct sizesNr  r7   T©Úsize_obliviousr   rÝ  zKBroadcast failed in ExpandView({x.get_size()}, {new_size}) on dimension {i})rY   rè   ré   rp   rE  rz   rd  rë   r    r¡   r¸   Úevaluate_exprrq  rê   )rÒ   Únew_sizeré   Úold_sizerœ   s        rƒ   Ú_normalize_sizezExpandView._normalize_size�	  sU  € õ ”7Ô#ˆÝ��EœL¨(Ñ3Ô3Ñ4Ô4ˆØ—:’:‘<”<ˆØ�6�S ™]œ]­S°©]¬]Ñ:Ñ;½dÀ8¹n¼nÑLˆÝ�8‰}Œ}¥ H¡¤Ò-Ð-Ð-Ð-Ý•s˜8‘}”}Ñ%Ô%ð 	að 	aˆAØ˜Œ{˜bÒ Ð Ø ”{Ð.Ð.Ð.Ø& qœk�˜‘�Ø˜!”Ð$­¬Ô(8Ô(B×(PÒ(PÝ”˜ !œ aÑ(Ô(¸ð )Qñ )ô )Ð$ð ð ×&Ò& x°¤{°X¸a´[Ñ'@È1Ð&ÑMÔMÐQRÒRÐRÐRØ`ñ SÔRÐRÐRàˆr„   c           	     óž  — |                       ||¦  «        }t          |¦  «        �rt          |¦  «        \  }}t          |¦  «        t          |j        ¦  «        z
  }|dk    sJ ‚t
          j        j        g|z  }t          |j	        |j        ¦  «        D ]i\  }}| 
                    t          j        j        j                             t          j        |d¦  «        d¬¦  «        s|nt
          j        j        ¦  «         Œjt#          |j        |j        t)          |¦  «        ||j        ¦  «        }	t-          ||	¬¦  «        S t/          ||¬¦  «        S )Nr   r7   Tr“  ©r  r  )r  rä   )r˜  rì   rF  r    rä   rz   rU  rV  r¤   rå   r&  rY   rè   ré   r¸   r•  rq  rj  rç   ræ   rp   ÚoffsetrW  rw   )
rO  rÒ   r–  ÚstorageÚ
old_layoutÚskipÚ
new_striderå   rä   Ú
new_layouts
             rƒ   rN  zExpandView.create«	  sK  € à×&Ò& 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Ô+Ô5×CÒCÝœ  qÑ)Ô)¸$ð Dñ ô ð&�F�Fõ œœñô ð ð õ %ØÔ!ØÔ Ý�X‘”ØØÔ!ñô ˆJõ #¨¸
ÐCÑCÔCÐCå˜q xÐ0Ñ0Ô0Ð0r„   rj   ra  c                ó   — | j         S r�   rþ  r!  s    rƒ   rë   zExpandView.get_sizeÇ	  rÿ  r„   c                ó®   ‡‡— |                       ¦   «         }| j                              ¦   «         Št          |¦  «        t          ‰¦  «        z
  Šˆˆfd„}|S )Nc                óø   •— t          | ‰d …         ¦  «        } t          | ¦  «        t          ‰¦  «        k    sJ ‚t          t          ‰¦  «        ¦  «        D ]"}‰|         dk    rt          j        j        | |<   Œ#| S r  )rp   r    r¡   rz   rU  rV  )r—   rœ   Úactualrž  s     €€rƒ   r¢   z*ExpandView.make_reindexer.<locals>.reindexÏ	  sr   ø€ Ý˜˜t˜u˜uœÑ&Ô&ˆEÝ�u‘:”:¥ V¡¤Ò,Ð,Ð,Ð,Ý�3˜v™;œ;Ñ'Ô'ð ,ð ,�Ø˜!”9 ’>�>å$œwœ|�E˜!‘HøØˆLr„   )rë   r  r    )r  Útargetr¢   r¤  rž  s      @@rƒ   rb  zExpandView.make_reindexerÊ	  s_   øø€ Ø—’‘”ˆØ”×#Ò#Ñ%Ô%ˆÝ�6‰{Œ{�S ™[œ[Ñ(ˆð	ð 	ð 	ð 	ð 	ð 	ð ˆr„   Nrâ  )
r  rü  rý  rþ  r  r˜  ry  rN  rë   rb  r…   r„   rƒ   rw   rw   Œ	  sy   € € € € € € àÐÐÑàðð ñ „\ðð4 ð1ð 1ñ „[ð1ð6ð ð ð ðð ð ð ð r„   rw   c                  óT   — e Zd ZU ded<   ed„ ¦   «         Zed„ ¦   «         Zd
d„Zd„ Zd	S )ÚPermuteViewr¬  Údimsc                ó   ‡— |                       |¦  «        }t          |¦  «        t          t          t          |¦  «        ¦  «        ¦  «        k    sJ ‚t	          |¦  «        r]t          |¦  «        \  }Št          ‰j        ‰j        ˆfd„|D ¦   «         ˆfd„|D ¦   «         ‰j	        ¦  «        }t          ||¬¦  «        S t          ||¬¦  «        S )Nc                ó*   •— g | ]}‰j         |         ‘ŒS r…   rþ  ©r›   rœ   r�  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„   rš  )r  r¨  )Ú_map_neg_dimsr2   r¡   r    rì   rF  rj  rç   ræ   r›  rW  r§  )rO  rÒ   r¨  rœ  r   r�  s        @rƒ   rN  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„   c                ó    ‡— ˆfd„‰D ¦   «         S )Nc                óD   •— g | ]}|d k    r|nt          ‰¦  «        |z   ‘ŒS rÌ   r  )r›   rá  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…   )rO  r¨  s    `rƒ   r®  zPermuteView._map_neg_dimsñ	  s   ø€ àEÐEÐEÐEÀÐEÑEÔEÐEr„   rj   ra  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„   )r2   r®  r¨  r¡   r    r  rë   )r  rä   s    @rƒ   rë   zPermuteView.get_sizeõ	  s‚   ø€ Ý˜$×,Ò,¨T¬YÑ7Ô7Ñ8Ô8½JÝ•#�d”i‘.”.Ñ!Ô!ñ=
ô =
ò 
ð 
ð 
ð 
ð Œy×!Ò!Ñ#Ô#ˆØ+Ð+Ð+Ð+ ¤Ð+Ñ+Ô+Ð+r„   c                ó*  ‡— d„ t          | j        ¦  «        D ¦   «         Šˆfd„t          t          | j        ¦  «        ¦  «        D ¦   «         Št	          ‰¦  «        t	          t          t          | j        ¦  «        ¦  «        ¦  «        k    sJ ‚ˆfd„}|S )Nc                ó   — i | ]\  }}||“Œ	S r…   r…   )r›   rœ   rO  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„   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    r2   )r  r¢   r¶  s     @rƒ   rb  zPermuteView.make_reindexerü	  s˜   ø€ Ø5Ð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„   Nrâ  )	r  rü  rý  rþ  ry  rN  r®  rë   rb  r…   r„   rƒ   r§  r§  Û	  s|   € € € € € € àÐÐÑàð.ð .ñ „[ð.ð" ðFð Fñ „[ðFð,ð ,ð ,ð ,ðð ð ð ð r„   r§  c                  óJ   — e Zd Zeddœd„¦   «         Zed
d„¦   «         Zdd	„ZdS )ÚSqueezeViewN)rá  c               ó¾  ‡— t          |¦  «        �r.t          |¦  «        \  }}g }g }‰�?t          ‰t          ¦  «        s
J d¦   «         ‚d‰k    r‰t	          |j        ¦  «        k     sJ ‚t          t          |j        |j        ¦  «        ¦  «        D ]|\  }\  }}	‰€1|dk    r*| 	                    |¦  «         | 	                    |	¦  «         Œ;|‰k    r+| 	                    |¦  «         | 	                    |	¦  «         Œl|dk    s
J d¦   «         ‚Œ}t          |j        |j        |||j        ¦  «        }
t          ||
¬¦  «        S ‰€7t                               |d„ |                     ¦   «         D ¦   «         ¦  «        S |                     ¦   «         ‰         dk    sJ ‚t                               |ˆfd„t          |                     ¦   «         ¦  «        D ¦   «         ¦  «        S )Nzexpected integer dim argumentr   r7   zexpected squeezed size to be 1rš  c                ó   — g | ]
}|d k    ¯|‘ŒS rT  r…   r2  s     rƒ   rž   z&SqueezeView.create.<locals>.<listcomp>*
  s   € Ð"EÐ"EÐ"E¨¸aÀ1ºf¸f 1¸f¸f¸fr„   c                ó&   •— g | ]\  }}|‰k    ¯|‘ŒS r…   r…   )r›   rœ   rá   rá  s      €rƒ   rž   z&SqueezeView.create.<locals>.<listcomp>-
  s#   ø€ Ð"UÐ"UÐ"U©¨¨AÈAÐQTÊHÈH 1ÈHÈHÈHr„   )rì   rF  ro   r~   r    rä   rÇ   r¤   rå   r&  rj  rç   ræ   r›  rW  rž  rN  rë   )rO  rÒ   rá  rœ  r�  r–  rŸ  rœ   rä   rå   r   s     `        rƒ   rN  zSqueezeView.create	
  sè  ø€ å  Ñ#Ô#ñ 	DÝ"7¸Ñ":Ô":ÑˆG�ZØˆHØˆJØˆÝ! #¥sÑ+Ô+ÐLÐLÐ-LÑLÔLÐ+Ø˜C’x�x C­#¨j¬oÑ*>Ô*>Ò$>Ð$>Ð$>Ð>å%.­s°:´?ÀJÔDUÑ/VÔ/VÑ%WÔ%Wð 
Kð 
KÑ!�‘>�D˜&Ø�;Ø˜q’y�yØ Ÿš¨Ñ-Ô-Ð-Ø"×)Ò)¨&Ñ1Ô1Ð1øà˜C’x�xØ Ÿš¨Ñ-Ô-Ð-Ø"×)Ò)¨&Ñ1Ô1Ð1Ð1à# qšy˜y˜yÐ*J™yœy˜y˜yå$ØÔ!ØÔ ØØØÔ!ñô ˆJõ #¨¸
ÐCÑCÔCÐCàˆ;å—;’;˜qÐ"EÐ"E¨a¯jªj©l¬lÐ"EÑ"EÔ"EÑFÔFÐFà—:’:‘<”< Ô$¨Ò)Ð)Ð)Ð)Ý—;’;˜qÐ"UÐ"UÐ"UÐ"Uµ¸1¿:º:¹<¼<Ñ1HÔ1HÐ"UÑ"UÔ"UÑVÔVÐVr„   rä   rÉ  c                ó„   ‡‡— d„ | D ¦   «         }d„ t          | ¦  «        D ¦   «         Št          | ¦  «        Šdˆˆfd„}||fS )	Nc                ó   — g | ]
}|d k    ¯|‘ŒS rT  r…   r2  s     rƒ   rž   z(SqueezeView.squeezer.<locals>.<listcomp>1
  s   € Ð.Ð.Ð.˜! q¨A¢v v�A v v vr„   c                ó$   — g | ]\  }}|d k    ¯|‘ŒS rT  r…   )r›   rœ   rá   s      rƒ   rž   z(SqueezeView.squeezer.<locals>.<listcomp>2
  s!   € Ð;Ð;Ð;™˜˜A°A¸²F°F�1°F°F°Fr„   r—   úList[sympy.Expr]rj   úTuple[sympy.Expr, ...]c                óà   •— t          | ¦  «        t          ‰¦  «        k    sJ | › d‰› �¦   «         ‚t          j        j        g‰z  }t	          ‰| ¦  «        D ]
\  }}|||<   Œt          |¦  «        S )Nú )r    rz   rU  rV  r¤   rq   )r—   r—  rÁ   rá   ÚlengthÚnot_ones       €€rƒ   r¢   z%SqueezeView.squeezer.<locals>.reindex5
  s|   ø€ Ý�u‘:”:¥ W¡¤Ò-Ð-Ð-°%Ð/CÐ/C¸'Ð/CÐ/CÑ-Ô-Ð-Ýœœ˜¨Ñ/ˆIÝ˜g uÑ-Ô-ð #ð #‘��QØ!"�	˜#‘�Ý˜Ñ#Ô#Ð#r„   )r—   rÁ  rj   rÂ  )rÇ   r    )rä   r–  r¢   rÅ  rÆ  s      @@rƒ   ÚsqueezerzSqueezeView.squeezer/
  sk   øø€ à.Ð.˜tÐ.Ñ.Ô.ˆØ;Ð;¥¨4¡¤Ð;Ñ;Ô;ˆÝ�T‘”ˆð	$ð 	$ð 	$ð 	$ð 	$ð 	$ð 	$ð ˜Ð Ð r„   rj   rk   c                ó    — t          d¦  «        ‚)Nzuse SqueezeView.create())ÚAssertionError)r  r  s     rƒ   rÇ  zSqueezeView.__init__>
  s   € ÝÐ7Ñ8Ô8Ð8r„   )rä   rÉ  rÙ  )r  rü  rý  ry  rN  r  rÇ  rÇ  r…   r„   rƒ   rº  rº  
  st   € € € € € àØ"ð #Wð #Wð #Wð #Wñ „[ð#WðJ ð!ð !ð !ñ „\ð!ð9ð 9ð 9ð 9ð 9ð 9r„   rº  c                  ó\   — e Zd ZU ded<   ded<   d„ Zdd„Zdd	„ZeZed
„ ¦   «         Z	dd„Z
dS )ÚGenericViewr¬  rä   r*  r¢   c                ó   — | j         S r�   )r¢   r!  s    rƒ   rb  zGenericView.make_reindexerG
  ó
   € ØŒ|Ðr„   rj   rˆ   c                óø   — d„ t          t          | j        ¦  «        ¦  «        D ¦   «         }t          |                      |¦  «        ¦  «        }dd                     t          t          |¦  «        ¦  «        › d|› �S )Nc                óB   — g | ]}t          t          j        |¦  «        ‘ŒS r…   )rT   r6   rz  )r›   rW  s     rƒ   rž   z+GenericView.reindex_str.<locals>.<listcomp>K
  s2   € ð 
ð 
ð 
Ø>?Õ*­4¬:°qÑ9Ô9ð
ð 
ð 
r„   zlambda ú, rÿ   )r¡   r    rä   rp   r¢   rG  rE  rˆ   )r  Ú	index_oldÚ	index_news      rƒ   Úreindex_strzGenericView.reindex_strJ
  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=)rI  r  rä   rÓ  r!  s    rƒ   rD  zGenericView.__str__Q
  sD   € Ø�ŠØŒYÐ+ ¤	Ð+Ð+Ð-L¸×8HÒ8HÑ8JÔ8JÐ-LÐ-LÐMñ
ô 
ð 	
r„   c                ó8   —  | |t          |¦  «        |¬¦  «        S )N©r  rä   r¢   )rp   )rO  rÒ   r–  r¢   s       rƒ   rN  zGenericView.createX
  s   € àˆs˜¥ X¡¤¸Ð@Ñ@Ô@Ð@r„   ra  c                ó   — | j         S r�   rþ  r!  s    rƒ   rë   zGenericView.get_size\
  rÿ  r„   Nrë  râ  )r  rü  rý  rþ  rb  rÓ  rD  rx  ry  rN  rë   r…   r„   rƒ   rË  rË  B
  s    € € € € € € àÐÐÑØÐÐÑðð ð ðGð Gð Gð Gð
ð 
ð 
ð 
ð
 €HàðAð Añ „[ðAðð ð ð ð ð r„   rË  c                  ó|   — e Zd Zed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Z	dS )rž  c                óÒ   — t          j        | ¦  «        } t          j        |¦  «        }t          j        j        j        j        } |t          j        | d¦  «        ¦  «        r| |z   } | S rn  )rz   rd  rY   rè   ré   r¸   r•  ÚLt)rÁ   rä   r•  s      rƒ   Úhandle_negative_indexzView.handle_negative_indexb
  s\   € åŒl˜3ÑÔˆÝŒ|˜DÑ!Ô!ˆÝœÔ(Ô2Ô@ˆØˆ=�œ # qÑ)Ô)Ñ*Ô*ð 	Ø˜‘*ˆCØˆ
r„   c                óH  ‡	— t          |t          t          f¦  «        sJ ‚|                      |                     ¦   «         |¦  «        \  Š	}t
          j        j                             ‰	|¦  «        r|S d}t          t          ‰	¦  «        ¦  «        dk    s t          t          |¦  «        ¦  «        dk    rd}d|v r ˆ	fd„} | |t          |¦  «        |¬¦  «        S t          |¦  «        s|rˆ|r)t          |¦  «        st                               |¦  «        }t          |¦  «        \  }}t          |j        |j        |t$                               |¦  «        |j        ¦  «        }t+          ||¬¦  «        S |                      ‰	|¦  «        } | |t          |¦  «        |¬¦  «        S )NFr   Tc                óD   •— t          dgt          ‰¦  «        z  ¦  «        S rn  )rq   r    )r—   r—  s    €rƒ   Úfake_reindexz!View.create.<locals>.fake_reindex}
  s   ø€ Ý˜a˜S¥3 x¡=¤=Ñ0Ñ1Ô1Ð1r„   r×  rš  )ro   rq   rp   Úresolve_negative_sizerë   rY   rè   ré   Ústatically_known_list_equalsr    r,   rM  ÚExternKernelÚrealize_inputÚ as_contiguous_storage_and_layoutrj  rç   ræ   rî   rï   r›  rW  rŸ  )
rO  rÒ   r–  Úunbacked_symbols_in_sizesrß  rœ  r�  r   r¢   r—  s
            @rƒ   rN  zView.createk
  s¾  ø€ å˜(¥U­D MÑ2Ô2Ð2Ð2Ð2Ø ×6Ò6°q·z²z±|´|ÀXÑNÔNÑˆ�(õ Œ7Ô×8Ò8¸À8ÑLÔLð 	ØˆHà$)Ð!åÕ% hÑ/Ô/Ñ0Ô0°1Ò4Ð4ÝÕ(¨Ñ2Ô2Ñ3Ô3°aÒ7Ð7à(,Ð%à�ˆ=ˆ=ð2ð 2ð 2ð 2ð 2ð �3˜A¥D¨¡N¤N¸LÐIÑIÔIÐIå-¨aÑ0Ô0ð 	DÐ4Mð 	DØ(ð 2Õ2RÐSTÑ2UÔ2Uð 2õ !×.Ò.¨qÑ1Ô1�å"BÀ1Ñ"EÔ"EÑˆG�ZÝ$ØÔ!ØÔ ØÝ×1Ò1°(Ñ;Ô;ØÔ!ñô ˆJõ #¨¸
ÐCÑCÔCÐCà×-Ò-¨h¸ÑAÔAˆØˆs˜¥ X¡¤¸Ð@Ñ@Ô@Ð@r„   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…   ©rY   rè   ré   r~  rX  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è  rX  s     rƒ   rž   z.View.resolve_negative_size.<locals>.<listcomp>˜
  ré  r„   r  )rp   r¡   r    rz   rU  ÚOner3   rU   rY   rè   ré   Úguard_equals)r—  r–  rœ   s      rƒ   rà  zView.resolve_negative_size•
  sÑ   € àCÐ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„   c                óü   — 	 |                       ||¦  «        }nc# t          t          f$ rO t          |¦  «        g}|                       ||¦  «        }|                       ||¦  «        }t	          ||¦  «        }Y nw xY w|S r�   )Ú_dynamic_reshape_indexerrÉ  Ú
IndexErrorrU   r²   )rO  r—  r–  r¢   Úflatrª   r¬   s          rƒ   rŸ  zView.dynamic_reshape_indexer¤
  s’   € ð	:Ø×2Ò2°8¸XÑFÔFˆGˆGøÝ¥
Ð+ð 	:ð 	:ð 	:å! (Ñ+Ô+Ð,ˆDØ×3Ò3°H¸dÑCÔCˆHØ×3Ò3°D¸(ÑCÔCˆHÝ% h°Ñ9Ô9ˆGˆGˆGð	:øøøð ˆs   ‚ ™AA9Á8A9c                ó   ‡‡— t           j        j        j        }d„ t	          t          |¦  «        ¦  «        D ¦   «         Št          t          ‰|¦  «        ¦  «        }t          | ¦  «        }g Š|�r�|�r~|                     ¦   «         }|                     ¦   «         \  }}|dk    r=‰ 	                    t          j        j        ¦  «         | 	                    ||f¦  «         �n|dk    r| 	                    |¦  «         �nî ||¦  «         ||¦  «        k    r<‰ 	                    |¦  «         t           j        j                             ||¦  «         �nš ||¦  «         ||¦  «        k     r� ||¦  «         ||¦  «        k     r<|                     ¦   «         \  }}	||z  |z   }||	z  } ||¦  «         ||¦  «        k     °<‰ 	                    |¦  «         t           j        j                             ||¦  «         nó ||¦  «         ||¦  «        k    rÔt          j        j        }
|}‰ 	                    t          ||
|¦  «        ¦  «         |
|z  }
 ||¦  «         ||¦  «        k    rZ|                     ¦   «         }‰ 	                    t          ||
|¦  «        ¦  «         |
|z  }
||z  } ||¦  «         ||¦  «        k    °Zt           j        j                             ||¦  «         nt           ‚|r|�°~|r_|                     ¦   «         }t           j        j                             |d¦  «         ‰ 	                    t          j        j        ¦  «         |°_|r>|                     ¦   «         \  }}t           j        j                             |d¦  «         |°>‰                     ¦   «          t          ‰¦  «        t          | ¦  «        k    sJ ‚ˆˆfd„}|S )zG
        Perform a reshape entirely by modifying indexing math
        c                óB   — g | ]}t          t          j        |¦  «        ‘ŒS r…   )rT   r6   ÚVIEWre  s     rƒ   rž   z1View._dynamic_reshape_indexer.<locals>.<listcomp>¸
  s2   € ð 
ð 
ð 
Ø=>Õ*­4¬9°aÑ8Ô8ð
ð 
ð 
r„   r7   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�   )rV   )r›   rÒ   Úreplacementss     €rƒ   r)  zAView._dynamic_reshape_indexer.<locals>.reindex.<locals>.<genexpr>ï
  s-   øè è € ÐHÐH¸� A |Ñ4Ô4ÐHÐHÐHÐHÐHÐHr„   )r    rr   r¤   rq   )r—   rö  r�  Ú	view_exprs    @€€rƒ   r¢   z.View._dynamic_reshape_indexer.<locals>.reindexì
  st   øø€ Ý�u‘:”:¥ T¡¤Ò*Ð*Ð*­S°©Z¬Z½¸T¹¼Ð,CÑ*Ô*Ð*Ý¥ D¨%Ñ 0Ô 0Ñ1Ô1ˆLÝÐHÐHÐHÐH¸iÐHÑHÔHÑHÔHÐHr„   )rY   rè   ré   rê   r¡   r    rp   r¤   rM  r&  rz   rU  rV  rì  rë  r5   rÉ  Úreverse)r—  r–  rê   Ú	stack_newÚ	stack_oldÚsize_oldÚvarÚsize_newÚvar2Ú	size_new2ÚdivisorÚmodulusr¢   r�  r÷  s                @@rƒ   rî  zView._dynamic_reshape_indexer°
  sþ  øø€ õ
 ”GÔ$Ô.ˆ	ð
ð 
ÝBGÍÈHÉÌÑBVÔBVð
ñ 
ô 
ˆõ �˜T 8Ñ,Ô,Ñ-Ô-ˆ	Ý˜‘N”Nˆ	àˆ	Øñ 	%˜Iñ 	%Ø —}’}‘”ˆHØ%ŸMšM™OœO‰MˆC�Ø˜1Š}ˆ}Ø× Ò ¥¤¤Ñ.Ô.Ð.Ø× Ò  # x Ñ1Ô1Ð1Ñ1Ø˜Q’�Ø× Ò  Ñ*Ô*Ð*Ñ*Ø�˜8Ñ$Ô$¨	¨	°(Ñ(;Ô(;Ò;Ð;Ø× Ò  Ñ%Ô%Ð%Ý”Ô ×-Ò-¨h¸ÑAÔAÐAÑAØ�˜8Ñ$Ô$ y y°Ñ':Ô':Ò:Ð:Ø�i Ñ)Ô)¨I¨I°hÑ,?Ô,?Ò?Ð?Ø&/§m¢m¡o¤o‘O�D˜)Ø ™/¨CÑ/�CØ'¨)Ñ3�Hð  �i Ñ)Ô)¨I¨I°hÑ,?Ô,?Ò?Ð?ð × Ò  Ñ%Ô%Ð%Ý”Ô ×-Ò-¨h¸ÑAÔAÐAÐAØ�˜8Ñ$Ô$ y y°Ñ':Ô':Ò:Ð:Ýœ'œ+�Ø"�Ø× Ò ¥°°g¸wÑ!GÔ!GÑHÔHÐHØ! GÑ+�Ø�i Ñ)Ô)¨I¨I°hÑ,?Ô,?Ò?Ð?Ø'Ÿmšm™oœo�GØ×$Ò$¥_°S¸'À7Ñ%KÔ%KÑLÔLÐLØ%¨Ñ/�GØ'¨'Ñ1�Hð	  �i Ñ)Ô)¨I¨I°hÑ,?Ô,?Ò?Ð?õ
 ”Ô ×-Ò-¨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ð 	×ÒÑÔÐÝ�9‰~Œ~¥ X¡¤Ò.Ð.Ð.Ð.ð	Ið 	Ið 	Ið 	Ið 	Ið 	Ið
 ˆr„   N)
r  rü  rý  r  rÜ  ry  rN  rà  rŸ  rî  r…   r„   rƒ   rž  rž  `
  s¢   € € € € € àðð ñ „\ðð ð'Að 'Añ „[ð'AðR ð"ð "ñ „\ð"ð ð	ð 	ñ „[ð	ð ð@ð @ñ „\ð@ð @ð @r„   rž  c                  ó®   ‡ — e Zd ZU dZded<   d ˆ fd„Zd!d„ZeZd	„ Zd"d„Z	d#d„Z
ed„ ¦   «         Zd$d„Zd„ Zd%d„Zd&d„Zd'd„Zd„ Zd(d„Zd)d*d„Zd+d„Zˆ xZS ),rW  z*Pretend our storage has a different layoutrR  r  rj   rk   c                óæ   •— t          ¦   «                              ¦   «          t          | j        t          ¦  «        r5t
                               | d| j                             ¦   «         ¦  «         d S d S )Nr  )r>  r"  ro   r  r\  rŒ   r  r¤  r?  s    €rƒ   r"  zReinterpretView.__post_init__ú
  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�   )rI  r  r  r!  s    rƒ   rD  zReinterpretView.__str__ÿ
  s'   € Ø�Šà”	Ø”ðñ
ô 
ð 	
r„   c                ó4   — | j                              ¦   «         S r�   rr  r!  s    rƒ   r”  zReinterpretView.get_name	  rs  r„   r{  c                ó   — | j         j        S r�   )r  rç   r!  s    rƒ   rñ   zReinterpretView.get_device  s   € ØŒ{Ô!Ð!r„   r  c                ó   — d S r�   r…   r!  s    rƒ   r3  zReinterpretView.get_origin_node  r8  r„   c                ó   — | j         j        S r�   )r  ræ   r!  s    rƒ   ræ   zReinterpretView.dtype  s   € àŒ{Ô Ð r„   ra  c                ó4   — t          | j        j        ¦  «        S r�   )rp   r  rä   r!  s    rƒ   rë   zReinterpretView.get_size  s   € Ý�D”KÔ$Ñ%Ô%Ð%r„   c                ó4   — t          | j        j        ¦  «        S r�   )rp   r  rå   r!  s    rƒ   r�  zReinterpretView.get_stride  s   € Ý�D”KÔ&Ñ'Ô'Ð'r„   r†  c                ó   ‡ — dˆ fd„}|S )Nr—   ra  rj   rX   c                ó  •— ‰j                              ¦   «         }t          j        ‰                     ¦   «          || ¦  «        ¦  «        }‰j         j        ‰j        j        k    r%t          j        |‰j        ‰j        j        ¦  «        S |S r�   )r  r�  rW   Úloadr”  ræ   r  Úto_dtype_bitcast)r—   r‹  Ú
tmp_loaderr  s      €rƒ   r‘  z+ReinterpretView.make_loader.<locals>.loader  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—   ra  rj   rX   r…   ©r  r‘  s   ` rƒ   r‰  zReinterpretView.make_loader  s(   ø€ ð	"ð 	"ð 	"ð 	"ð 	"ð 	"ð ˆr„   r‹  c                ó4   — | j                              ¦   «         S r�   )r  r�  r!  s    rƒ   r�  zReinterpretView.make_indexer'  ó   € ØŒ{×'Ò'Ñ)Ô)Ð)r„   c                ó   — | j         S r�   ©r  r!  s    rƒ   rí   zReinterpretView.get_layout*  rG  r„   c                ó   — d S r�   r…   r!  s    rƒ   r¦  zReinterpretView.freeze_layout-  r   r„   r  c                óœ   — t          | j        j        ¦  «        t          | j        j        ¦  «        z  t          | j        j        ¦  «        z  S r�   )r,   r  rä   rå   r›  r!  s    rƒ   rÆ  z(ReinterpretView.get_unbacked_symbol_uses0  sA   € å! $¤+Ô"2Ñ3Ô3Ý# D¤KÔ$6Ñ7Ô7ñ8å# D¤KÔ$6Ñ7Ô7ñ8ð	
r„   Nrv  rw  c                óê   — t           j        j                             | j        | j        j        | j        j        | j        j        |�|j	        nt           j        j        j	        | j        j
        ¬¦  «        S r‡  )rY   rè   Úwrapper_codeÚcodegen_reinterpret_viewr  r  rä   rå   r›  Ú	writelineræ   ry  s     rƒ   rz  z!ReinterpretView.codegen_reference7  sc   € õ ŒwÔ#×<Ò<ØŒIØŒKÔØŒKÔØŒKÔØ &Ð 2ˆFÔÐ½¼Ô8LÔ8VØ”+Ô#ð =ñ 
ô 
ð 	
r„   r~   c                ó   — dS r  r…   r!  s    rƒ   rÁ  zReinterpretView.num_readsD  ó   € Øˆqr„   rÙ  rë  ræ  rÛ  râ  rè  ré  rß  r'  r�   rå  rö  )r  rü  rý  Ú__doc__rþ  r"  rD  rx  r”  rñ   r3  r  ræ   rë   r�  r‰  r�  rí   r¦  rÆ  rz  rÁ  r{  r|  s   @rƒ   rW  rW  ô
  sp  ø€ € € € € € à4Ð4à€N€N�NðFð Fð Fð Fð Fð Fð

ð 
ð 
ð 
ð €Hð$ð $ð $ð"ð "ð "ð "ðð ð ð ð ð!ð !ñ „Xð!ð&ð &ð &ð &ð(ð (ð (ð	ð 	ð 	ð 	ð*ð *ð *ð *ðð ð ð ðð ð ð
ð 
ð 
ð 
ð
ð 
ð 
ð 
ð 
ðð ð ð ð ð ð ð r„   rW  c                  óf   — e Zd ZU dZded<   ed„ ¦   «         Zdd„ZeZe	d„ ¦   «         Z
dd
„Zdd„ZdS )Ú	DtypeViewz(Pretend our storage has a different typerJ  Útarget_dtypec                óÖ   — t          |¦  «        rJt          |¦  «        \  }}t          |j        ||j        |j        |j        ¦  «        }t          ||¬¦  «        S t          ||¬¦  «        S )Nrš  )r  r!  )	rì   rF  rj  rç   rä   rå   r›  rW  r   )rO  rÒ   Ú	new_dtyperœ  r�  r   s         rƒ   rN  zDtypeView.createN  sv   € å  Ñ#Ô#ð 		DÝ"7¸Ñ":Ô":ÑˆG�ZÝ$ØÔ!ØØ”ØÔ!ØÔ!ñô ˆJõ #¨¸
ÐCÑCÔCÐCÝ˜a¨iÐ8Ñ8Ô8Ð8r„   rj   rˆ   c                óD   — |                       | j        | j        g¦  «        S r�   )rI  r  r!  r!  s    rƒ   rD  zDtypeView.__str__\  s   € Ø�Š ¤	¨4Ô+<Ð=Ñ>Ô>Ð>r„   c                ó   — | j         S r�   )r!  r!  s    rƒ   ræ   zDtypeView.dtypea  s   € àÔ Ð r„   ra  c                ó4   — | j                              ¦   «         S r�   ©r  rë   r!  s    rƒ   rë   zDtypeView.get_sizee  rs  r„   r†  c                óH   ‡ ‡— ‰ j                              ¦   «         Šˆˆ fd„}|S )Nc                ó`   •— t          j         ‰| ¦  «        ‰j        ‰j        j        ¦  «        S r�   )rW   r  r!  r  ræ   )rÁ   rf  r  s    €€rƒ   r‘  z%DtypeView.make_loader.<locals>.loaderk  s'   ø€ ÝÔ'¨¨¨c©
¬
°DÔ4EÀtÄyÄÑWÔWÐWr„   ©r  r‰  )r  r‘  rf  s   ` @rƒ   r‰  zDtypeView.make_loaderh  sB   øø€ Ø”	×%Ò%Ñ'Ô'ˆð	Xð 	Xð 	Xð 	Xð 	Xð 	Xð ˆr„   Nrë  râ  rè  )r  rü  rý  r  rþ  ry  rN  rD  rx  r  ræ   rë   r‰  r…   r„   rƒ   r   r   H  s�   € € € € € € à2Ð2àÐÐÑàð9ð 9ñ „[ð9ð?ð ?ð ?ð ?ð €Hàð!ð !ñ „Xð!ð$ð $ð $ð $ðð ð ð ð ð r„   r   c                  ó<   — e Zd Zed„ ¦   «         Zedd„¦   «         ZdS )Ú	SliceViewc                óø   ‡ ‡‡‡— t           j        j        Š|                     ¦   «         |         Št	          d„ ||‰fD ¦   «         ¦  «        rd„ Šnˆf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�   r/  rX  s     rƒ   r)  z0SliceView.normalize_start_end.<locals>.<genexpr>{  s+   è è € ÐHÐH¨AÕ$ QÑ'Ô'ÐHÐHÐHÐHÐHÐHr„   c                óR   — t          j        t          j        | |¦  «        |¦  «        S r�   )rz   ÚMinÚMax)rÒ   ÚlowerÚuppers      rƒ   Úclampz,SliceView.normalize_start_end.<locals>.clamp}  s    € Ý”y¥¤¨1¨eÑ!4Ô!4°eÑ<Ô<Ð<r„   c                óX   •— ‰                      ‰                     | |¦  «        |¦  «        S r�   )Úevaluate_minÚevaluate_max)rÒ   r2  r3  ré   s      €rƒ   r4  z,SliceView.normalize_start_end.<locals>.clamp‚  s)   ø€ Ø×,Ò,¨X×-BÒ-BÀ1ÀeÑ-LÔ-LÈeÑTÔTÐTr„   c                óR   •— | €|S ‰                      | ‰¦  «        }  ‰| ||¦  «        S r�   )rÜ  )rm  r2  r3  r“  r4  rO  Údim_sizes       €€€rƒ   Ú
clamp_wrapz1SliceView.normalize_start_end.<locals>.clamp_wrap…  s6   ø€ Øˆ{Ø�Ø×+Ò+¨C°Ñ:Ô:ˆCØ�5˜˜e UÑ+Ô+Ð+r„   r   )rY   rè   ré   rë   r¨  )	rO  rÒ   rá  ÚstartÚendr:  r4  r9  ré   s	   `     @@@rƒ   Únormalize_start_endzSliceView.normalize_start_endr  sÖ   øøøø€ õ ”7Ô#ˆØ—:’:‘<”< Ô$ˆåÐHÐH°%¸¸hÐ1GÐHÑHÔHÑHÔHð 	Uð=ð =ð =ð =ð
Uð Uð Uð Uð Uð	,ð 	,ð 	,ð 	,ð 	,ð 	,ð 	,ð �
˜5 ! X¨qÑ1Ô1ˆØˆj˜˜e X¨xÑ8Ô8ˆØ�cˆzÐr„   r7   Tc           	     óÚ  ‡‡‡‡— t          j        ‰¦  «        Št          ‰t           j        ¦  «        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
          j        j        }t          | 	                    ¦   «         ¦  «        Š|r|  
                    |‰‰|¦  «        \  Š}t          |‰z
  ‰dz
  z   ‰¦  «        ‰‰<   t          |¦  «        rxt          |¦  «        \  }}	t          |	j        ¦  «        }
|
‰         ‰z  |
‰<   t          |	j        |	j        ‰|
|	j        |	j        ‰         ‰z  z   ¦  «        }t'          ||¬¦  «        S ˆˆˆˆfd„}t)          |‰|¬¦  «        S )Nr   l   ÿÿÿÿ r7   rš  c                ó¨   •— t          | ¦  «        t          ‰¦  «        k    sJ d| › d‰› �¦   «         ‚t          | ¦  «        } | ‰         ‰z  ‰z   | ‰<   | S )Nzwrong ndim rÄ  )r    rp   )r—   rá  r–  r;  Ústeps    €€€€rƒ   r¢   z!SliceView.create.<locals>.reindex²  s`   ø€ Ý�u‘:”:¥ X¡¤Ò.Ð.Ð.Ð0P¸eÐ0PÐ0PÀhÐ0PÐ0PÑ.Ô.Ð.Ý˜‘K”KˆEØ˜sœ dÑ*¨UÑ2ˆE�#‰JØˆLr„   r×  )rz   rd  ro   r   Ú	TypeErrorrY   rè   ré   rp   rë   r=  r4   rì   rF  rå   rj  rç   ræ   r›  rW  r,  )rO  rÒ   rá  r;  r<  r@  r4  ré   rœ  r�  rŸ  r   r¢   r–  s     `` `       @rƒ   rN  zSliceView.create�  sµ  øøøø€ åŒ|˜DÑ!Ô!ˆÝ˜$¥¤
Ñ+Ô+Ð7¨t°aªx¨x¨xÐ7ð	Ø˜Šzˆz˜c YÒ.Ð.°4¸1²9°9Ø�øøÝð 	ð 	ð 	ØˆDð	øøøõ ”7Ô#ˆÝ˜Ÿ
š
™œÑ%Ô%ˆð
 ð 	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)r7   T)r  rü  rý  ry  r=  rN  r…   r„   rƒ   r,  r,  q  sS   € € € € € Øðð ñ „[ðð8 ð)Að )Að )Añ „[ð)Að )Að )Ar„   r,  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 )ÚBaseConstantrJ  ræ   r}  rç   rj   ra  c                ó   — dS ©Nr…   r…   r!  s    rƒ   rë   zBaseConstant.get_sizeÁ  s   € Øˆrr„   r{  c                ó   — | j         S r�   rF  r!  s    rƒ   rñ   zBaseConstant.get_deviceÄ  rG  r„   r  c                ó   — d S r�   r…   r!  s    rƒ   r3  zBaseConstant.get_origin_nodeÇ  r8  r„   r»  c                ó   — t          ¦   «         S r�   r1   r!  s    rƒ   r,  zBaseConstant.get_readsÊ  r"  r„   Nrâ  ræ  rÛ  rõ  )r  rü  rý  rþ  rë   rñ   r3  r,  r…   r„   rƒ   rC  rC  ¼  s~   € € € € € € àÐÐÑØÐÐÑðð ð ð ðð ð ð ðð ð ð ðð ð ð ð ð r„   rC  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   rö   rJ  ræ   r}  rç   rj   r†  c                ó   ‡ — dˆ fd„}|S )Nr—   ra  rj   rX   c                óB   •— t          j        ‰j        ‰j        ¦  «        S r�   )rW   r�  rö   ræ   ©r—   r  s    €rƒ   r‘  z$Constant.make_loader.<locals>.loaderÕ  s   ø€ Ý”< ¤
¨D¬JÑ7Ô7Ð7r„   r  r…   r  s   ` rƒ   r‰  zConstant.make_loaderÔ  s(   ø€ ð	8ð 	8ð 	8ð 	8ð 	8ð 	8ð ˆr„   rý   c                ó   — d S r�   r…   r!  s    rƒ   ru  zConstant.realizeÚ  r   r„   rf   c                ó:   — t          | j        | j        |¬¦  «        S )N)rö   ræ   rç   )rJ  rö   ræ   r€  s     rƒ   rÑ  zConstant.constant_to_deviceÝ  s   € Ý˜dœj°´
À6ÐJÑJÔJÐJr„   Nrè  rä  rú  )r  rü  rý  rþ  r‰  ru  rÑ  r…   r„   rƒ   rJ  rJ  Î  sy   € € € € € € à€J€J�JØÐÐÑØÐÐÑðð ð ð ðð ð ð ðKð Kð Kð Kð Kð Kr„   rJ  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—   rJ  ræ   r}  rç   rj   r†  c                ó   ‡ — dˆ fd„}|S )Nr—   ra  rj   rX   c                óB   •— t          j        ‰j        ‰j        ¦  «        S r�   )rW   rf  r—   ræ   rM  s    €rƒ   r‘  z,IndexingConstant.make_loader.<locals>.loaderè  s   ø€ Ý”> $¤*¨d¬jÑ9Ô9Ð9r„   r  r…   r  s   ` rƒ   r‰  zIndexingConstant.make_loaderç  s(   ø€ ð	:ð 	:ð 	:ð 	:ð 	:ð 	:ð ˆr„   rf   c                ó:   — t          | j        | j        |¬¦  «        S )N)r—   ræ   rç   )rQ  r—   ræ   r€  s     rƒ   rÑ  z#IndexingConstant.constant_to_deviceí  s   € Ý d¤j¸¼
È6ÐRÑRÔRÐRr„   Nrè  rú  )r  rü  rý  rþ  r‰  rÑ  r…   r„   rƒ   rQ  rQ  á  se   € € € € € € à€J€J�JØÐÐÑØÐÐÑðð ð ð ðSð Sð Sð Sð Sð Sr„   rQ  rå   rj  c           	     ó‚   — t          d„ t          | t                               |¦  «        |¦  «        D ¦   «         ¦  «        S )Nc              3  ó6   K  — | ]\  }}}|d k    p||k    V — ŒdS r1  r…   )r›   ÚleftÚrighträ   s       rƒ   r)  z2is_contiguous_strides_for_shape.<locals>.<genexpr>ô  sI   è è € ð ð áˆD�%˜ð 	�Š	Ð"�T˜U’]ðð ð ð ð ð r„   )r%  r¤   rî   rï   )rå   rj  s     rƒ   Úis_contiguous_strides_for_shaperY  ñ  sQ   € õ ð ð å!$Ø•N×5Ò5°eÑ<Ô<¸eñ"
ô "
ðñ ô ñ ô ð r„   r~   c                ó*   — t           j        | j        z  S r�   )r8   Úpadding_alignment_bytesÚitemsizerL  s    rƒ   Úget_align_for_dtyper]  ü  s   € ÝÔ)¨U¬^Ñ;Ð;r„   c                  ó"   — e Zd ZdZdd„Zd	d„ZdS )
r  zxAbstract base for Layout, MultiOutputLayout, NoneLayout.
    Represents the memory layout of the output of an Operation.rj   r{  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ƒ   Ústorage_sizezOutputSpec.storage_size  rŠ  r„   Nræ  rö  )r  rü  rý  r  rñ   ra  r…   r„   rƒ   r  r     sH   € € € € € ðCð Cð7ð 7ð 7ð 7ð7ð 7ð 7ð 7ð 7ð 7r„   r  c                  ó¸   — e Zd Zd ed¦  «        fd%d„Zd&d„ZeZd'd„Zd(d„Ze	d)d„¦   «         Z
d(d„Zd(d„Zd„ Ze	d„ ¦   «         Zd„ Zd„ Zd„ Zd*d!„Zd(d"„Zd+d$„ZdS ),rR  Nr   rç   r}  ræ   rJ  rä   r¬  rå   úOptional[List[Expr]]r›  r   rj   rk   c                ó  — |€t                                |¦  «        }|| _        || _        t	          |¦  «        t	          |¦  «        k    sJ d|› d|› �¦   «         ‚t          d„ |D ¦   «         ¦  «        sJ ‚|| _        || _        || _        d S )NrÕ  ú	, stride=c              3  óN   K  — | ] }t          |t          t          f¦  «        V — Œ!d S r�   )ro   r   r~   r2  s     rƒ   r)  z"Layout.__init__.<locals>.<genexpr>  s0   è è € Ð<Ð<°!•:˜a¥$­ Ñ-Ô-Ð<Ð<Ð<Ð<Ð<Ð<r„   )	rî   rï   rç   ræ   r    r%  rä   rå   r›  )r  rç   ræ   rä   rå   r›  s         rƒ   rÇ  zLayout.__init__  sœ   € ð ˆ>Ý#×6Ò6°tÑ<Ô<ˆFØˆŒØˆŒ
Ý�4‰yŒy�C ™KœKÒ'Ð'Ð'Ð)H°Ð)HÐ)HÀÐ)HÐ)HÑ'Ô'Ð'ÝÐ<Ð<°tÐ<Ñ<Ô<Ñ<Ô<Ð<Ð<Ð<Ø $ˆŒ	Ø"(ˆŒØ"ˆŒˆˆr„   rˆ   c                óê   — d}| j         dk    r
d| j         › �}| j        j        €dnd| j        j        › �}t          | ¦  «        j        › d| j        j        › |› d| j        › d| j        › d| j        › |› d	�S )
Nr<  r   z	, offset=ú:z('z', z, size=re  r   )r›  rç   r—   r€   r  ræ   rä   rå   )r  r›  Údevice_index_strs      rƒ   rD  zLayout.__str__  s²   € ØˆØŒ;˜!ÒÐØ. ¤Ð.Ð.ˆFà!%¤Ô!2Ð!:˜2˜2Ð@WÀDÄKÔDUÐ@WÐ@WÐå�D‰zŒzÔ"ð ?ð ? d¤kÔ&6ð ?Ð8Hð ?ð ?ÈTÌZð ?ð ?Ø”Ið?ð ?Ø(,¬ð?Ø5;ð?ð ?ð ?ð	
r„   c                ó   — | j         S r�   rF  r!  s    rƒ   rñ   zLayout.get_device,  rG  r„   rÕ   c                ó6   — t          | j        | j        ¦  «        S r�   )rY  rå   rä   r!  s    rƒ   rK  zLayout.is_contiguous/  s   € Ý.¨t¬{¸D¼IÑFÔFÐFr„   rj  rŽ  rP  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µ   é   r7   FT)r    r¤   r&   )rj  rP  ÚndimrW  rX  rä   s         rƒ   Úis_channels_last_contiguousz"Layout.is_channels_last_contiguous2  s{   € õ �5‰zŒzˆØ�vÐÐ  q¤¨Q¢ Ø�5Ý!$ØÕ3°EÑ:Ô:¸Eñ"
ô "
ð 	ð 	Ñˆ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 )Nr7   FT)r¤   rå   Úreversedrî   rï   rp   rä   )r  rW  rX  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„   c                ó‚  ‡ ‡— t          ‰ j        ¦  «        t          ‰¦  «        k    sJ ‚d„ t          ‰ j        ¦  «        D ¦   «         }ˆ fd„|D ¦   «         }ˆfd„|D ¦   «         Šd„ } |‰¦  «        Šdgt          ‰¦  «        z  }t	          t          ‰¦  «        ¦  «        D ]}||         |‰|         <   Œt	          t          ‰¦  «        dz
  ¦  «        D ]j}||         ||dz            k    }t          |t          ¦  «        s9t          j        j	         
                    ||         ||dz            k    d¬¦  «        }|r d	S ŒkdS )
Nc                ól   — g | ]1\  }}t           j        j                             |d ¬¦  «        dk    ¯/|‘Œ2S rÜ  rß  rà  s      rƒ   rž   z,Layout.is_stride_ordered.<locals>.<listcomp>N  sI   € ð 
ð 
ð 
á��3ÝŒwÔ×)Ò)¨#¸Ð)Ñ:Ô:¸aÒ?Ð?ð à?Ð?Ð?r„   c                ó*   •— g | ]}‰j         |         ‘ŒS r…   r­  )r›   rœ   r  s     €rƒ   rž   z,Layout.is_stride_ordered.<locals>.<listcomp>T  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>U  s   ø€ Ð1Ð1Ð1˜a��q”Ð1Ð1Ð1r„   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>Y  s'   ø€ ÐAÐAÐA°'�J×$Ò$ WÑ-Ô-ÐAÐAÐAr„   )r$  )Úarrrz  s    @rƒ   Úsorted_indicesz0Layout.is_stride_ordered.<locals>.sorted_indicesW  s(   ø€ Ý ™œˆJØAÐAÐAÐA¸SÐAÑAÔAÐAr„   r  r7   Tr“  F)r    rå   rÇ   rä   r¡   ro   rÕ   rY   rè   Ú
_shape_envr•  )r  r“   rå  rå   r|  Ústride_orderedrœ   Úexprs   ``      rƒ   rY  zLayout.is_stride_orderedJ  s‡  øø€ Ý�4”;ÑÔ¥3 u¡:¤:Ò-Ð-Ð-Ð-ð
ð 
å# D¤IÑ.Ô.ð
ñ 
ô 
ˆð 9Ð8Ð8Ð8¨-Ð8Ñ8Ô8ˆØ1Ð1Ð1Ð1 =Ð1Ñ1Ô1ˆð	Bð 	Bð 	Bð
 �˜uÑ%Ô%ˆð ˜¥ E¡
¤
Ñ*ˆÝ•s˜5‘z”zÑ"Ô"ð 	1ð 	1ˆAØ'-¨a¤yˆN˜5 œ8Ñ$Ð$å•s˜5‘z”z A‘~Ñ&Ô&ð 	ð 	ˆAØ! !Ô$ ~°a¸!±eÔ'<Ò<ˆDÝ˜d¥DÑ)Ô)ð Ý”wÔ)×7Ò7Ø" 1Ô%¨°q¸1±uÔ(=Ò=Èdð 8ñ ô �ð ð Ø�u�uðàˆtr„   c                óØ   — dgt          t          t          dt          | j        ¦  «        dz
  ¦  «        ¦  «        ¦  «        z   }t          |¦  «        g|z   }|                      |¦  «        S ©Nr   r7   )rp   rq  r¡   r    rå   rY  r®  s     rƒ   Úis_channels_last_stride_orderedz&Layout.is_channels_last_stride_orderedm  s]   € à�•d�8¥E¨!­S°´Ñ-=Ô-=ÀÑ-AÑ$BÔ$BÑCÔCÑDÔDÑDˆÝ�U‘”�˜uÑ$ˆØ×%Ò% eÑ,Ô,Ð,r„   c                ó,  — 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 ¦   «         ¦  «        s| S t          | ¦  «        }t          |¦  «        }d„ t!          t          | ¦  «        ¦  «        D ¦   «         }d||d         <   d}t#          |dd…         d¬	¦  «        D ]T\  }	}
||	dz
           }||         ||         z  }|t          j        k    r||z  dk    rt'          ||¦  «        |z  }d
}|||
<   ŒU|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   ÚmetaÚdislike_paddingFc              3  óX   K  — | ]%}t          |t          t          j        f¦  «        V — Œ&d S r�   )ro   r~   rz   r   r2  s     rƒ   r)  z&Layout._pad_strides.<locals>.<genexpr>�  sG   è è € ð 
ð 
àõ �q�3¥¤Ð.Ñ/Ô/ð
ð 
ð 
ð 
ð 
ð 
r„   c                ó   — g | ]}d ‘ŒS rÌ   r…   rÍ   s     rƒ   rž   z'Layout._pad_strides.<locals>.<listcomp>–  s   € Ð9Ð9Ð9˜Q�qÐ9Ð9Ð9r„   r7   N)r;  T)r]  r    r8   Úpad_channels_lastrR  ro  rY   Úget_current_noder  r„  Úgetr%  r^  ÚchainrÑ   rÉ   r¡   rÇ   Úpadding_stride_thresholdrJ   r"   Únum_comprehensive_padding)Ú
in_stridesrä   ræ   ÚalignÚcurrent_fx_noderO  rÈ   Únew_stridesÚpaddedÚrankrÁ   Úprev_idxrå   s                rƒ   Ú_pad_strideszLayout._pad_stridess  sç  € õ $ EÑ*Ô*ˆÝˆz‰?Œ?˜aÒÐØÐåÔ'ð 	­F×,NÒ,NØ�*ñ-
ô -
ð 	ð ÐåÔ,Ñ.Ô.ˆÝ�? FÑ+Ô+ð 	°Ô0D×0HÒ0HØ˜uñ1
ô 1
ð 	ð Ðõ ð 
ð 
å”_ Z°Ñ6Ô6ð
ñ 
ô 
ñ 
ô 
ð 	ð Ðå'¨
Ñ3Ô3ˆÝ,¨\Ñ:Ô:ˆ
à9Ð9¥%­¨J©¬Ñ"8Ô"8Ð9Ñ9Ô9ˆð &'ˆ�J˜q”MÑ"àˆÝ" :¨a¨b¨b¤>¸Ð;Ñ;Ô;ð 	&ð 	&‰IˆD�#Ø! $¨¡(Ô+ˆHØ  Ô*¨T°(¬^Ñ;ˆFà�Ô7Ò7Ð7¸FÀU¹NÈaÒ<OÐ<OÝ  ¨Ñ/Ô/°%Ñ7�Ø�Ø%ˆK˜ÑÐàð 	ð ÐåÐ)Ô)¨QÑ.Ð)Ô)ØÐr„   c                óœ   — t          | t          ¦  «        sJ ‚| j        €J ‚|                      | j        | j        | j        ¦  «        | _        d S r�   )ro   rî   rå   r•  rä   ræ   r!  s    rƒ   rJ  zLayout.pad_strides®  sI   € Ý˜$¥Ñ/Ô/Ð/Ð/Ð/ØŒ{Ð&Ð&Ð&Ø×'Ò'¨¬°T´YÀÄ
ÑKÔKˆŒˆˆr„   c                óD   — t           j        ot          | t          ¦  «        S r�   )r8   Úcomprehensive_paddingro   rî   r!  s    rƒ   rI  zLayout.should_pad_strides³  s   € ÝÔ+ÐPµ
¸4ÅÑ0PÔ0PÐPr„   c                óØ   — t          | t          ¦  «        r| S |                      ¦   «         r|                      ¦   «          t          | j        | j        | j        | j        | j        ¦  «        S r�   )	ro   rj  rI  rJ  rç   ræ   rä   rå   r›  r!  s    rƒ   Úas_fixedzLayout.as_fixed¶  sj   € Ý�d�KÑ(Ô(ð 	ØˆKà×"Ò"Ñ$Ô$ð 	Ø×ÒÑÔÐÝØŒKØŒJØŒIØŒKØŒKñ
ô 
ð 	
r„   r‹  c                ó¦   — t           j        s J dt          | ¦  «        j        › d�¦   «         ‚|                      ¦   «                              ¦   «         S )Nzconvert z to FixedLayout first)rî   r\  r€   r  rš  r�  r!  s    rƒ   r�  zLayout.make_indexerÄ  sT   € åÔ)ð	Að 	Aà@•d˜4‘j”jÔ)Ð@Ð@Ð@ñ	Aô 	AØ)à�}Š}‰Œ×+Ò+Ñ-Ô-Ð-r„   c                ó¢   — | 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  Úothers     rƒ   Ú__eq__zLayout.__eq__Ê  s[   € àŒK˜5œ<Ò'ð ,Ø”
˜eœkÒ)ð,à”	˜UœZÒ'ð,ð ”˜uœ|Ò+ð,ð ”˜uœ|Ò+ð	
r„   ú
sympy.Exprc                óB   — t          | j        | j        | j        ¦  «        S r�   )r#   rä   rå   r›  r!  s    rƒ   ra  zLayout.storage_sizeÓ  s   € Ý.¨t¬y¸$¼+ÀtÄ{ÑSÔSÐSr„   )rç   r}  ræ   rJ  rä   r¬  rå   rc  r›  r   rj   rk   rë  rç  rá  )rj  rŽ  rP  rŽ  rj   rÕ   ré  ©rj   r   )r  rü  rý  r   rÇ  rD  rx  rñ   rK  r  ro  rr  rY  r‚  r•  rJ  rI  rš  r�  rŸ  ra  r…   r„   rƒ   rR  rR    sm  € € € € € ð (,Ø�w˜q‘z”zð#ð #ð #ð #ð #ð$	
ð 	
ð 	
ð 	
ð €Hðð ð ð ðGð Gð Gð Gð ðð ð ñ „\ððð ð ð ð!ð !ð !ð !ðF-ð -ð -ð ð8ð 8ñ „\ð8ðtLð Lð Lð
Qð Qð Qð
ð 
ð 
ð.ð .ð .ð .ð
ð 
ð 
ð 
ðTð Tð Tð Tð Tð Tr„   rR  c                  ó   — e Zd ZdZdd„ZdS )rj  z A Tensor layout we cannot changerj   r‹  c                ó   ‡ — ˆ fd„}|S )z1A closure containing math to read a given elementc                ó  •— t          | ¦  «        t          ‰j        ¦  «        k    sJ ‚t          | ¦  «        t          ‰j        ¦  «        k    sJ ‚‰j        }t	          | ‰j        ‰j        ¦  «        D ]\  }}}|dk    r|||z  z   }Œ|S r  )r    rå   rä   r›  r¤   )r—   rù  rÁ   rå   Úszr  s        €rƒ   r‹  z)FixedLayout.make_indexer.<locals>.indexerÝ  sŒ   ø€ Ý�u‘:”:¥ T¤[Ñ!1Ô!1Ò1Ð1Ð1Ð1Ý�u‘:”:¥ T¤Y¡¤Ò/Ð/Ð/Ð/Ø”[ˆFÝ#& u¨d¬k¸4¼9Ñ#EÔ#Eð 3ð 3‘��V˜RØ˜’7�7Ø# c¨F¡lÑ2�FøØˆMr„   r…   ©r  r‹  s   ` rƒ   r�  zFixedLayout.make_indexerÚ  s#   ø€ ð	ð 	ð 	ð 	ð 	ð ˆr„   Nré  )r  rü  rý  r  r�  r…   r„   rƒ   rj  rj  ×  s.   € € € € € Ø*Ð*ðð ð ð ð ð r„   rj  c                  ó´   ‡ — e Zd ZdZdZed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Z	ed„ ¦   «         Z
dd„Zdd	„Zd
„ Zd„ Zddˆ fd„Zˆ xZS )rî   z(A Tensor layout we are allowed to changeFc                óø   — t          | ¦  «        dk    rg S t          j        j        g}t	          | dd …         ¦  «        D ] }|                     ||d         z  ¦  «         Œ!t          t	          |¦  «        ¦  «        S )Nr   r7   r  )r    rz   rU  rë  rq  r&  rp   )ÚsizesÚ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„   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)r2   r¡   r    rz   rU  rë  )rª  r“   Únext_striderP  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„   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]
        )r2   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„   c                ó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)rt   Úchannels_lastrî   r~  ÚNHWC_STRIDE_ORDERÚchannels_last_3dÚNHWDC_STRIDE_ORDERÚcontiguous_formatrï   r<  r=  rO  )rª  Úmemory_formats     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„   c                óô   — t          | ¦  «        t          |¦  «        k    sJ ‚d„ |D ¦   «         }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]
        c                óV   — g | ]&}t           j        j                             |¦  «        ‘Œ'S r…   rß  rX  s     rƒ   rž   z/FlexibleLayout.same_ordered.<locals>.<listcomp>7  s+   € Ð@Ð@Ð@°A•!”'Ô"×,Ò,¨QÑ/Ô/Ð@Ð@Ð@r„   r  )r    r$  r¡   Ú__getitem__rî   r®  )rª  rå   rÈ   s      rƒ   Úsame_orderedzFlexibleLayout.same_ordered.  sm   € õ �5‰zŒz�S ™[œ[Ò(Ð(Ð(Ð(Ø@Ð@¸Ð@Ñ@Ô@ˆÝ�E¥# f¡+¤+Ñ.Ô.°FÔ4FÐGÑGÔGˆ
Ý×*Ò*¨5°*Ñ=Ô=Ð=r„   c                óô   — |                       | j        |¦  «        }|                      ¦   «         r#|r!|                      || j        | j        ¦  «        }t          | j        | j        | j        || j        ¦  «        S r�   )r~  rä   rI  r•  ræ   rj  rç   r›  )r  r“   r¨  rŸ  s       rƒ   Úas_stride_orderzFlexibleLayout.as_stride_order;  sz   € Ø×(Ò(¨¬°EÑ:Ô:ˆ
Ø×"Ò"Ñ$Ô$ð 	N¨ð 	NØ×*Ò*¨:°t´yÀ$Ä*ÑMÔMˆJåØŒKØŒJØŒIØØŒKñ
ô 
ð 	
r„   c                óÂ   — |}|                       ¦   «         r#|r!|                      || j        | j        ¦  «        }t	          | j        | j        | j        || j        ¦  «        S r�   )rI  r•  rä   ræ   rj  rç   r›  )r  r´  r¨  rŸ  s       rƒ   Úas_exact_strideszFlexibleLayout.as_exact_stridesH  sh   € Ø"ˆ
Ø×"Ò"Ñ$Ô$ð 	N¨ð 	NØ×*Ò*¨:°t´yÀ$Ä*ÑMÔMˆJåØŒKØŒJØŒIØØŒKñ
ô 
ð 	
r„   c                óð   — |                       | j        |¦  «        }|                      ¦   «         r!|                      || j        | j        ¦  «        }t          | j        | j        | j        || j        ¦  «        S r�   )r®  rä   rI  r•  ræ   rj  rç   r›  )r  r“   rŸ  s      rƒ   Úas_fill_orderzFlexibleLayout.as_fill_orderU  sr   € Ø×&Ò& t¤y°%Ñ8Ô8ˆ
Ø×"Ò"Ñ$Ô$ð 	NØ×*Ò*¨:°t´yÀ$Ä*ÑMÔMˆJÝØŒKØŒJØŒIØØŒKñ
ô 
ð 	
r„   c                óð   — |                       | j        |¦  «        }|                      ¦   «         r!|                      || j        | j        ¦  «        }t          | j        | j        | j        || j        ¦  «        S r�   )r»  rä   rI  r•  ræ   rj  rç   r›  )r  rå   rŸ  s      rƒ   Úas_same_orderzFlexibleLayout.as_same_ordera  sr   € Ø×&Ò& t¤y°&Ñ9Ô9ˆ
Ø×"Ò"Ñ$Ô$ð 	NØ×*Ò*¨:°t´yÀ$Ä*ÑMÔMˆJÝØŒKØŒJØŒIØØŒKñ
ô 
ð 	
r„   Nrj   rk   c                óÀ   •— |rt                                ||¦  «        }nt                                |¦  «        }t          ¦   «                              ||||¦  «         d S r�   )rî   r®  rï   r>  rÇ  )r  rç   ræ   rä   rO  rP  r@  s         €rƒ   rÇ  zFlexibleLayout.__init__m  sY   ø€ Øð 	>Ý$×1Ò1°$¸ÑEÔEˆGˆGå$×7Ò7¸Ñ=Ô=ˆGÝ‰Œ×Ò˜ ¨¨gÑ6Ô6Ð6Ð6Ð6r„   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  ø€ € € € € Ø2Ð2à€Nð ð0ð 0ñ „\ð0ð ðð ñ „\ðð  ð	>ð 	>ñ „\ð	>ð ð&ð &ñ „\ð&ð0 ð
>ð 
>ñ „\ð
>ð
ð 
ð 
ð 
ð
ð 
ð 
ð 
ð

ð 

ð 

ð

ð 

ð 

ð7ð 7ð 7ð 7ð 7ð 7ð 7ð 7ð 7ð 7ð 7r„   rî   c                  ó2   ‡ — e Zd ZdZd
ˆ fd„Zdd„Zd	„ Zˆ xZS )ÚNonOwningLayoutz,Is a view into the storage of another tensorÚviewúUnion[BaseView, TensorBox]rj   rk   c                ó®   •— |                      ¦   «         }t          ¦   «                              |j        |j        |j        |j        ¦  «         || _        d S r�   )rí   r>  rÇ  rç   ræ   rä   rå   rÇ  )r  rÇ  r  r@  s      €rƒ   rÇ  zNonOwningLayout.__init__x  sO   ø€ Ø—’Ñ"Ô"ˆÝ‰Œ×ÒØŒMØŒLØŒKØŒMñ		
ô 	
ð 	
ð ˆŒ	ˆ	ˆ	r„   r‹  c                óN   — |                       ¦   «                              ¦   «         S r�   )rš  r�  r!  s    rƒ   r�  zNonOwningLayout.make_indexer‚  s   € Ø�}Š}‰Œ×+Ò+Ñ-Ô-Ð-r„   c                ó¤   — | j                              ¦   «         j        }|dk    rdS ddlm} t
          j        j                             ||¦  «        S )Nr   Tr7   )Ú	ALIGNMENT)	rÇ  rí   r›  ÚutilsrÌ  rY   rè   ré   Ústatically_known_multiple_of)r  r›  rÌ  s      rƒ   Úmaybe_guard_alignedz#NonOwningLayout.maybe_guard_aligned…  sS   € Ø”×%Ò%Ñ'Ô'Ô.ˆØ�QŠ;ˆ;Ø�4Ø$Ð$Ð$Ð$Ð$Ð$åŒwÔ×<Ò<¸VÀYÑOÔOÐOr„   )rÇ  rÈ  rj   rk   ré  )r  rü  rý  r  rÇ  r�  rÏ  r{  r|  s   @rƒ   rÆ  rÆ  u  sm   ø€ € € € € Ø6Ð6ðð ð ð ð ð ð.ð .ð .ð .ðPð Pð Pð Pð Pð Pð P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_namer  rî   c                ó  •— t          |t          ¦  «        st          d|› d�¦  «        ‚|                     ¦   «         }t	          ¦   «                              |j        |j        |j        |j	        |j
        ¬¦  «         || _        || _        d S )NzJA `CommBufferLayout` can only be initialized with a `FlexibleLayout` (got z).r�  )ro   rî   rÉ  rš  r>  rÇ  rç   ræ   rä   rå   r›  rÖ  r×  )r  r  rÖ  r×  Úfixedr@  s        €rƒ   rÇ  zCommBufferLayout.__init__¡  s    ø€ õ ˜&¥.Ñ1Ô1ð 	Ý ð6Ø+1ð6ð 6ð 6ñô ð ð
 —’Ñ!Ô!ˆÝ‰Œ×ÒØ”<Ø”+Ø”Ø”<Ø”<ð 	ñ 	
ô 	
ð 	
ð !1ˆÔØ$ˆŒˆˆr„   )r  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„ Z	dd„Z
dS )Ú
NoneLayoutr{  rç   c                 ó   — dgS rn  r…   r…   r„   rƒ   r  zNoneLayout.<lambda>Ä  s   € ÀÀ€ r„   ©Údefault_factoryr§  rä   c                 ó   — dgS rn  r…   r…   r„   rƒ   r  zNoneLayout.<lambda>Å  s   € À1À#€ r„   rå   rj   r~   c                ó   — dS rn  r…   r!  s    rƒ   ra  zNoneLayout.storage_sizeÇ  r  r„   c                ó   — | S r�   r…   r!  s    rƒ   rš  zNoneLayout.as_fixedÊ  ó   € Øˆr„   c                ó   — | j         S r�   rF  r!  s    rƒ   rñ   zNoneLayout.get_deviceÍ  rG  r„   Nrö  ræ  )r  rü  rý  rþ  rÿ  r   rä   rå   ra  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„ Z	e
dd„¦   «         Zd„ Zdd„Zˆ xZS )ÚMutationLayoutSHOULDREMOVEr¥  rf   rj   rk   c                óT  •— t          ¦   «                              |                     ¦   «         |                     ¦   «         |                     ¦   «         d ¦  «         || _        |                      ¦   «                              ¦   «         }t          j	         
                    |¦  «         d S r�   )r>  rÇ  r�  rð   rë   r¥  Ú
get_bufferr”  rY   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„   rö   r   c                ó   — d S r�   r…   )r  rö   s     rƒ   rå   z!MutationLayoutSHOULDREMOVE.strideá  s   € àˆr„   r   c                óN   — |                       ¦   «                              ¦   «         S r�   )rê  ra  r!  s    rƒ   ra  z'MutationLayoutSHOULDREMOVE.storage_sizeå  s    € Ø×ÒÑ!Ô!×.Ò.Ñ0Ô0Ð0r„   rV  c                óp   ‡— ˆfd„Š ‰| j         ¦  «        }t          |t          ¦  «        s
J d¦   «         ‚|S )Nc                ó   •— t          | t          ¦  «        r ‰| j        ¦  «        S t          | t          ¦  «        r ‰|                      ¦   «         ¦  «        S t          | t
          ¦  «        r ‰| j        ¦  «        S | S r�   )ro   rå  r¥  r\  r¤  Ú
MutableBoxr  )r¥  Úunwrap_viewss    €rƒ   rð  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„   z1MutationLayoutSHOULDREMOVE must refer to a buffer)r¥  ro   rV  )r  rù  rð  s     @rƒ   rç  z%MutationLayoutSHOULDREMOVE.get_bufferè  sd   ø€ ð	ð 	ð 	ð 	ð 	ð �˜dœkÑ*Ô*ˆÝØ•Fñ
ô 
ð 	?ð 	?à>ñ	?ô 	?ð 
ð ˆr„   c                ó4   — |                       ¦   «         j        S r�   )rç  r  r!  s    rƒ   rê  z&MutationLayoutSHOULDREMOVE.real_layoutø  ó   € Ø�ŠÑ Ô Ô'Ð'r„   Fc                óÄ  — |                      ¦   «          t          j                             |                     ¦   «         ¦  «         t          |t          ¦  «        r|j        }|                     ¦   «          |s•t           
                    |                     ¦   «         |                     ¦   «         |                     ¦   «         d„ t          |                     ¦   «         |                     ¦   «         ¦  «        D ¦   «         ¬¦  «        j        }|                      ¦   «          t          |j        j        t"          ¦  «        sJ ‚t%          |¦  «        |j        _        |j        S )Nc                ó^   — g | ]*\  }}t           j        j                             ||¦  «        ‘Œ+S r…   ©rY   rè   ré   rì  ©r›   rµ  r·  s      rƒ   rž   z;MutationLayoutSHOULDREMOVE.realize_into.<locals>.<listcomp>  sA   € ð ð ð á˜˜1õ ”GÔ$×1Ò1°!°QÑ7Ô7ðð ð r„   r—  )ru  rY   rè   rè  r”  ro   re   r  r¢  r…  rN  rñ   rð   r‰  r¤   rë   r  rî   rå  )rO  ÚsrcÚdstÚunsafe_aliass       rƒ   Úrealize_intoz'MutationLayoutSHOULDREMOVE.realize_intoû  s"  € à�Š‰Œˆõ 	
Œ×#Ò# 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ðñ ô ð	 #ñ ô ô ð ð 	�Š‰ŒˆÝ˜#œ(œ/­>Ñ:Ô:Ð:Ð:Ð:Ý4°SÑ9Ô9ˆŒŒØŒxˆr„   c                ó   — | S r�   r…   r!  s    rƒ   rš  z#MutationLayoutSHOULDREMOVE.as_fixed  râ  r„   r‹  c                ó4   — | j                              ¦   «         S r�   )r¥  r�  r!  s    rƒ   r�  z'MutationLayoutSHOULDREMOVE.make_indexer!  r  r„   )r¥  rf   rj   rk   ©rj   r¬  )rö   r   rj   rk   r¢  )rj   rV  rï  ré  )r  rü  rý  rÇ  r  rå   Úsetterra  rç  rê  ry  rú  rš  r�  r{  r|  s   @rƒ   rå  rå  Ñ  sú   ø€ € € € € ð	*ð 	*ð 	*ð 	*ð 	*ð 	*ð ð)ð )ð )ñ „Xð)ð „]ðð ð ñ „]ðð1ð 1ð 1ð 1ðð ð ð ð (ð (ð (ð ð ð  ð  ñ „[ð ðDð ð ð*ð *ð *ð *ð *ð *ð *ð *r„   rå  c                  ó  ‡ — e Zd ZU ded<   ded<   d5ˆ fd„Zd6d	„Zd7d„Zd8d„Zd9d„Ze	d:d„¦   «         Z
d;d„Zd<d„Zd=d„Zd>d„Zd?d„Zd„ Zd„ Zd@d5d„Zd5d„Zd5d „Zd@d5d!„Zd"„ ZdAd$„ZdBdCd(„Zd)„ ZdDd+„ZdDd,„ZdEd.„ZdFd0„ZdFd1„ZdGd2„ZdHd4„Z ˆ xZ!S )IrV  rý   r‡   r  r  rj   rk   c                ót   •— t          ¦   «                              ¦   «          |                      dd ¦  «         d S r  )r>  r"  r  r?  s    €rƒ   r"  zBuffer.__post_init__/  s5   ø€ Ý‰Œ×ÒÑÔÐØ×Ò ¨tÑ4Ô4Ð4Ð4Ð4r„   r‹  c                óN   — |                       ¦   «                              ¦   «         S r�   )rí   r�  r!  s    rƒ   r�  zBuffer.make_indexer3  s   € Ø�ŠÑ Ô ×-Ò-Ñ/Ô/Ð/r„   rˆ   c                ó2   — | j         s
J | ¦   «         ‚| j         S r�   r&  r!  s    rƒ   r”  zBuffer.get_name6  s   € ØŒyÐÐ˜$ÑÔˆyØŒyÐr„   r{  c                óN   — |                       ¦   «                              ¦   «         S r�   )r[  rñ   r!  s    rƒ   rñ   zBuffer.get_device:  s    € Ø×#Ò#Ñ%Ô%×0Ò0Ñ2Ô2Ð2r„   r5  c                ó   — d S r�   r…   r!  s    rƒ   r7  zBuffer.get_defining_op=  r8  r„   rJ  c                ó4   — |                       ¦   «         j        S r�   )rí   ræ   r!  s    rƒ   ræ   zBuffer.dtype@  s   € à�ŠÑ Ô Ô&Ð&r„   ra  c                ó8   — g |                       ¦   «         j        ¢S r�   )rí   rä   r!  s    rƒ   rë   zBuffer.get_sizeD  s   € Ø(�—’Ñ"Ô"Ô'Ð(Ð(r„   r¬  c                ó8   — g |                       ¦   «         j        ¢S r�   )rí   rå   r!  s    rƒ   r�  zBuffer.get_strideG  s   € Ø*�—’Ñ"Ô"Ô)Ð*Ð*r„   r   c                ó4   — |                       ¦   «         j        S r�   )rí   r›  r!  s    rƒ   Ú
get_offsetzBuffer.get_offsetJ  rò  r„   rR  c                ó�   — t          | j        t          ¦  «        r| j        S t          t	          | j        ¦  «        j        ¦  «        ‚r�   )ro   r  rR  rO  r€   r  r!  s    rƒ   rí   zBuffer.get_layoutM  s9   € Ý�d”k¥6Ñ*Ô*ð 	Ø”;ÐÝ!¥$ t¤{Ñ"3Ô"3Ô"<Ñ=Ô=Ð=r„   c                ó   — | j         S r�   r  r!  s    rƒ   r[  zBuffer.get_output_specR  rG  r„   c                ó*   — |                       ¦   «         S r�   )rl  r!  s    rƒ   rÃ  zBuffer.get_storage_numelU  s   € Ø�~Š~ÑÔÐr„   c                ó²   — t          | j        t          ¦  «        r:t          | j        t          ¦  «        s"| j                             ¦   «         | _        d S d S d S r�   )ro   r  rR  rÆ  rš  r!  s    rƒ   r¦  zBuffer.freeze_layoutX  s]   € Ý�d”k¥6Ñ*Ô*ð 	1µ:ØŒK�ñ4
ô 4
ð 	1ð œ+×.Ò.Ñ0Ô0ˆDŒKˆKˆKð	1ð 	1ð 	1ð 	1r„   Fc                ó€   — t          | j        t          ¦  «        sJ ‚| j                             ||¬¦  «        | _        d S ©NrT  )ro   r  rî   r½  rª  s      rƒ   r«  z&Buffer.freeze_layout_with_stride_order^  s:   € Ý˜$œ+¥~Ñ6Ô6Ð6Ð6Ð6Ø”k×1Ò1°%À}Ð1ÑUÔUˆŒˆˆr„   c                ó|   — t          | j        t          ¦  «        sJ ‚| j                             |¦  «        | _        d S r�   )ro   r  rî   rÁ  r®  s     rƒ   r¯  z$Buffer.freeze_layout_with_fill_orderb  s5   € Ý˜$œ+¥~Ñ6Ô6Ð6Ð6Ð6Ø”k×/Ò/°Ñ6Ô6ˆŒˆˆr„   c                ó|   — t          | j        t          ¦  «        sJ ‚| j                             |¦  «        | _        d S r�   )ro   r  rî   rÃ  r²  s     rƒ   r³  z$Buffer.freeze_layout_with_same_orderf  s5   € Ý˜$œ+¥~Ñ6Ô6Ð6Ð6Ð6Ø”k×/Ò/°Ñ7Ô7ˆŒˆˆr„   c                ó€   — t          | j        t          ¦  «        sJ ‚| j                             ||¬¦  «        | _        d S r  )ro   r  rî   r¿  r¶  s      rƒ   r·  z'Buffer.freeze_layout_with_exact_stridesj  sA   € Ý˜$œ+¥~Ñ6Ô6Ð6Ð6Ð6Ø”k×2Ò2Ø¨ð 3ñ 
ô 
ˆŒˆˆr„   c                ó”   — t           j        j                             t	          j        |                      ¦   «         d¦  «        ¦  «        S rn  ro  r!  s    rƒ   rr  zBuffer.is_zero_elementsp  rs  r„   r†  c                óŠ   ‡ — ‰                       ¦   «         r(t          t          ‰                      ¦   «         ¬¦  «        S ˆ fd„}|S )NrL  c                ór   •— ‰                      ¦   «         }t          j        ‰j         || ¦  «        ¦  «        S r�   )r�  rW   r  r‡   ©r—   r‹  r  s     €rƒ   r‘  z"Buffer.make_loader.<locals>.loaderx  s0   ø€ Ø×'Ò'Ñ)Ô)ˆGÝ”8˜DœI w w¨u¡~¤~Ñ6Ô6Ð6r„   )rr  r   rƒ  rð   r  s   ` rƒ   r‰  zBuffer.make_loaders  sU   ø€ à× Ò Ñ"Ô"ð 	BÝ�=°·²Ñ0@Ô0@ÐAÑAÔAÐAð	7ð 	7ð 	7ð 	7ð 	7ð ˆr„   Nrv  rw  c                ó*   — |                       ¦   «         S r�   ©r”  ry  s     rƒ   rz  zBuffer.codegen_reference~  ru  r„   c                ó   — d S r�   r…   r!  s    rƒ   r(  zBuffer.decide_layout�  r   r„   r:  c                óx   — t          | j        t          ¦  «        r| j        j                             ¦   «         gS dS rE  )ro   r  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 rE  )ro   r  rå  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�   )r2   r”  r!  s    rƒ   r-  zBuffer.get_read_namesŽ  s   € Ý˜4Ÿ=š=™?œ?Ð+Ñ,Ô,Ð,r„   r  c                ó   — t          ¦   «         S r�   r1   r!  s    rƒ   rÆ  zBuffer.get_unbacked_symbol_uses‘  r"  r„   c                ó   — t          ¦   «         S r�   r1   r!  s    rƒ   r!  zBuffer.get_unbacked_symbol_defs”  r"  r„   c                ó   — d S r�   r…   r!  s    rƒ   ru  zBuffer.realize—  r   r„   rÕ   c                ó   — dS rƒ  r…   r!  s    rƒ   Úshould_allocatezBuffer.should_allocateš  s   € àˆur„   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ñ   r7  r  ræ   rë   r�  r	  rí   r[  rÃ  r¦  r«  r¯  r³  r·  rr  r‰  rz  r(  r×  rÓ  r-  rÆ  r!  ru  r!  r{  r|  s   @rƒ   rV  rV  %  s„  ø€ € € € € € ð ÐÐÑØÐÐÑð
5ð 5ð 5ð 5ð 5ð 5ð0ð 0ð 0ð 0ðð ð ð ð3ð 3ð 3ð 3ðð ð ð ð ð'ð 'ð 'ñ „Xð'ð)ð )ð )ð )ð+ð +ð +ð +ð(ð (ð (ð (ð>ð >ð >ð >ð
ð ð ð ð ð  ð  ð1ð 1ð 1ðVð Vð Vð Vð Vð7ð 7ð 7ð 7ð8ð 8ð 8ð 8ð
ð 
ð 
ð 
ð 
ðWð Wð Wð	ð 	ð 	ð 	ðð ð ð ð ðð ð ðð ð ð ð
ð ð ð ð
-ð -ð -ð -ðð ð ð ðð ð ð ðð ð ð ðð ð ð ð ð ð ð r„   rV  c                  ó4   — e Zd Zd	d„Zd
d„Zej        Zdd„ZdS )ÚOperationBufferrj   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ƒ   r7  zOperationBuffer.get_defining_op¥  râ  r„   rk   c                ón   — t                                | ¦  «         t                               | ¦  «         d S r�   )rV  r"  r  r!  s    rƒ   r"  zOperationBuffer.__post_init__«  s0   € Ý×Ò˜TÑ"Ô"Ð"Ý×Ò Ñ%Ô%Ð%Ð%Ð%r„   Nr&  ©rj   r  rÙ  )r  rü  rý  r  r7  r  rÕ  r"  r…   r„   rƒ   r#  r#  Ÿ  s[   € € € € € ðð ð ð ðð ð ð ð #Ô5Ðð&ð &ð &ð &ð &ð &r„   r#  c                  ó   — e Zd Zdd„ZdS )ÚInputBufferrj   r~   c                ó   — dS r  r…   r!  s    rƒ   rÁ  zInputBuffer.num_reads±  r  r„   Nrö  )r  rü  rý  rÁ  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 )r˜  Nr{  r–  rj   r†  c                ó   ‡ — dˆ fd„}|S )Nr—   ra  rj   rX   c                óö   •— ‰                      ¦   «                              ¦   «         }t          j        t          j                             ‰                     ¦   «         ‰j        ¦  «         || ¦  «        ¦  «        S r�   )	rí   r�  rW   r  rY   rè   Úconstant_namer”  r–  r  s     €rƒ   r‘  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ç   r}  rf   c                óŽ   — t          t          j                             |                      ¦   «         |¦  «        | j        ¬¦  «        S ©N)r‡   r  )r˜  rY   rè   r0  r”  r  r€  s     rƒ   rÑ  z!ConstantBuffer.constant_to_deviceÌ  s:   € ÝÝ”×&Ò& t§}¢}¡¤¸Ñ?Ô?ÈÌð
ñ 
ô 
ð 	
r„   rè  rú  )r  rü  rý  r–  rþ  r‰  rÑ  r…   r„   rƒ   r˜  r˜  ¿  sO   € € € € € € Ø.2€OÐ2Ð2Ð2Ñ2ðð ð ð ð
ð 
ð 
ð 
ð 
ð 
r„   r˜  c                  ó0   — e Zd Zdd„Zddd„Zdd
„Zdd„ZdS )ÚNoneAsConstantBufferrj   r  c                ó   — t          ¦   «         S r�   r1   r!  s    rƒ   rÆ  z-NoneAsConstantBuffer.get_unbacked_symbol_usesÔ  r"  r„   Nrv  rw  rˆ   c                ó.   — t           j        j        j        S r�   )rY   rè   r  Únone_strry  s     rƒ   rz  z&NoneAsConstantBuffer.codegen_reference×  s   € ÝŒwÔ#Ô,Ð,r„   r  c                ó"   — t          d ¬¦  «        S ©NrF  )rÛ  r!  s    rƒ   r[  z$NoneAsConstantBuffer.get_output_specÚ  s   € Ý Ð&Ñ&Ô&Ð&r„   rÕ   c                ó   — dS rƒ  r…   r!  s    rƒ   r`  z&NoneAsConstantBuffer.has_tensor_outputÝ  r…  r„   r'  r�   rå  rà  rá  )r  rü  rý  rÆ  rz  r[  r`  r…   r„   rƒ   r4  r4  Ò  si   € € € € € ðð ð ð ð-ð -ð -ð -ð -ð'ð 'ð 'ð 'ðð ð ð ð ð r„   r4  c                  ó4   — e Zd ZU ded<   dd„Zddd
„Zdd„ZdS )ÚShapeAsConstantBufferr   r  rj   r  c                ó*   — t          | j        ¦  «        S r�   )r,   r  r!  s    rƒ   rÆ  z.ShapeAsConstantBuffer.get_unbacked_symbol_useså  s   € Ý$ T¤YÑ/Ô/Ð/r„   Nrv  rw  rˆ   c                óT   — t           j        j                             | j        ¦  «        S r�   )rY   rè   r  Úcodegen_sizevarr  ry  s     rƒ   rz  z'ShapeAsConstantBuffer.codegen_referenceè  s   € ÝŒwÔ#×3Ò3°D´IÑ>Ô>Ð>r„   rÕ   c                ó   — dS rƒ  r…   r!  s    rƒ   r`  z'ShapeAsConstantBuffer.has_tensor_outputë  r…  r„   r'  r�   rå  rá  )r  rü  rý  rþ  rÆ  rz  r`  r…   r„   rƒ   r<  r<  á  s`   € € € € € € à€J€J�Jð0ð 0ð 0ð 0ð?ð ?ð ?ð ?ð ?ðð ð ð ð ð r„   r<  c                  óÜ   ‡ — e Zd ZU ded<   d,d„Zd-d„Zd.d	„Zd/d„Zd0d„Zd1d„Z	d2ˆ fd„Z
d3d„Zd4d„Zd5d„Zed6d„¦   «         Z	 	 d7d8d „Ze	 d9d!„¦   «         Zd:d#„Zd,d$„Zd;d&„Zd;d'„Zd<d+„Zˆ xZS )=r"  r)  r  rj   rý   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  r  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�   ©r  rÁ  r!  s    rƒ   rÁ  zComputedBuffer.num_readsþ  r‡  r„   r»  c                ó4   — | j                              ¦   «         S r�   ©r  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„   r¸  c                óÊ  — 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 r[  )
r   rŒ   rî   r  rÈ  r?   Úget_store_functionrK  rË  rë   r!  s    rƒ   rº  zComputedBuffer.get_read_writes  s&  € ÝŒ\�.Ð*:¸DÑAÔAð 	ð 	ØŒy×+Ò+Ñ-Ô-ð 
Ý*Ø×+Ò+Ñ-Ô-Ø”I×0Ò0Ñ2Ô2Ø”I×0Ò0Ñ2Ô2ñô ð	ð 	ð 	ð 	ñ 	ô 	ð 	ð 	õ +Ø×+Ò+Ñ-Ô-Ø”I×&Ò&Ñ(Ô(ñô ð	ð 	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	s   œA*CÂ8CÃCÃCr  c                ó   — t          |                      ¦   «         ¦  «        t          |                      ¦   «         ¦  «        z  t          |                      ¦   «         ¦  «        z  | j                             ¦   «         z  S r�   )r,   rë   r�  r	  r  rÆ  r!  s    rƒ   rÆ  z'ComputedBuffer.get_unbacked_symbol_uses  sh   € õ& " $§-¢-¡/¤/Ñ2Ô2Ý# D§O¢OÑ$5Ô$5Ñ6Ô6ñ7å# D§O¢OÑ$5Ô$5Ñ6Ô6ñ7ð Œi×0Ò0Ñ2Ô2ñ3ð	
r„   r†  c                óþ   •— |                       ¦   «         sI| j        t          j        j        vr1|                      ¦   «         dk    r| j                             ¦   «         S t          ¦   «                              ¦   «         S rn  )	rÈ  r‡   rY   rè   Úmutated_buffersrÁ  r  r‰  r>  r?  s    €rƒ   r‰  zComputedBuffer.make_loader.  sj   ø€ à×'Ò'Ñ)Ô)ð	+à”	¥¤Ô!8Ð8Ð8Ø—’Ñ Ô  AÒ%Ð%ð ”9×(Ò(Ñ*Ô*Ð*Ý‰wŒw×"Ò"Ñ$Ô$Ð$r„   r‰   c                óx  — |                       ¦   «                              ¦   «                              ¦   «         }t          | j        t
          t          t          f¦  «        r t          | j        j	        | j
        |¦  «        S t          | j        t          ¦  «        sJ ‚t          | j        j        | j
        |¦  «        S r�   )rí   rš  r�  ro   r  rè  ræ  r%  r   rö  r‡   r…  r’  r§  s     rƒ   rJ  z!ComputedBuffer.get_store_function8  s�   € Ø—/’/Ñ#Ô#×,Ò,Ñ.Ô.×;Ò;Ñ=Ô=ˆÝ�d”i¥)­Tµ4Ð!8Ñ9Ô9ð 	GÝ˜4œ9Ô4°d´iÀÑIÔIÐIå˜dœi­Ñ3Ô3Ð3Ð3Ð3Ý˜4œ9Ô1°4´9¸gÑFÔFÐFr„   úOptional[List[int]]c                ó:  ‡‡— 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�   )ro   r9   ÚStarDepÚ	MemoryDepr  s     rƒ   r)  z0ComputedBuffer.get_fill_order.<locals>.<genexpr>O  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>T  s*   € Ð$WÐ$WÐ$W¸ÐPQÐUVÒPVÐPV Q­¬¬ÐPVÐPVÐPVr„   )ro   r9   rS  rV   r—   )r›   rQ  rò  s     €rƒ   rž   z1ComputedBuffer.get_fill_order.<locals>.<listcomp>S  sW   ø€ ð ð ð àÝ˜a¥Ô!7Ñ8Ô8ðÝ˜1œ7Ð$WÐ$W¸nÐ$WÑ$WÔ$WÑXÔXðð ð r„   c                óZ   •— g | ]'}t           j        j                             |‰¦  «        ‘Œ(S r…   ©rY   rè   ré   r@  )r›   r  r+  s     €rƒ   rž   z1ComputedBuffer.get_fill_order.<locals>.<listcomp>^  s;   ø€ ð "ð "ð "ØEI•A”GÔ$×1Ò1°$¸Ñ@Ô@ð"ð "ð "r„   r7   ©Úpick_loop_orderN)ro   r  rî   r9   r>  r  rK  rË  rº  r¾  r%  ræ  r%  r¢   Ú	schedulerrZ  rë   )r  Ú
index_varsrÎ   r¾  Ústride_lengthsrZ  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„   rk   c                óÀ   — t          | j        t          ¦  «        rC|                      ¦   «         }|r|                      |¦  «         d S |                      ¦   «          d S d S r�   )ro   r  rî   r¼   r¯  r¦  r®  s     rƒ   r(  zComputedBuffer.decide_layoutg  sk   € Ý�d”k¥>Ñ2Ô2ð 	%Ø×'Ò'Ñ)Ô)ˆEØð %Ø×2Ò2°5Ñ9Ô9Ð9Ð9Ð9à×"Ò"Ñ$Ô$Ð$Ð$Ð$ð	%ð 	%r„   úeTuple[Tuple[List[sympy.Expr], List[sympy.Expr]], LoopBody, Tuple[List[sympy.Expr], List[sympy.Expr]]]c                óÎ  — t          j        | j                             ¦   «         | 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Úqrc   r–  r7   r   )r9   r>  r  rK  rË  r   rŒ   r˜  rñ   rA   rJ  rÈ  Úitemsr&  )
r  r‹   Ú
var_rangesr˜  r\  Úreduce_varsÚ
index_sizeÚreduce_sizerV  rá   s
             rƒ   Úget_default_sizes_bodyz%ComputedBuffer.get_default_sizes_bodyo  sÕ  € õ (Ô:ØŒI×(Ò(Ñ*Ô*¨D¬I×,HÒ,HÑ,JÔ,JÐSVð
ñ 
ô 
Ñˆˆ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   Á6A CÃCÃ	CNÚextra_indexing_constraintsú*Optional[Tuple[Dict[Any, Any], List[Any]]]Úrecompute_sizes_body_funcúOptional[Callable[..., Any]]ú:Tuple[Tuple[List[sympy.Expr], List[sympy.Expr]], LoopBody]c                ó  ‡ ‡‡— ‰                       ¦   «         \  \  }}}\  }}|r |||f|||f¦  «        \  \  }}}\  }}g |j                             ¦   «         ¢Š|�¤t          |t          ¦  «        rt          |¦  «        dk    sJ ‚|\  }}	t          |t          ¦  «        sJ ‚t          |	t          ¦  «        sJ ‚t          d„ |	D ¦   «         ¦  «        sJ ‚|j	        }
|
|k    sJ |
|f¦   «         ‚ˆfd„|	D ¦   «         }	‰|	z  Šg | 
                    ¦   «         ¢Št          j                             ‰ t          j        ¦  «        s'‰                     |                     ¦   «         ¦  «         ˆˆˆ fd„}||z   }t%          t'          ‰ ¦  «        ¦  «         pt(          j         } |||||¦  «        \  }}} |||||¦  «        \  }}}t-          j        ||d¬¦  «        \  \  }}}t1          | ||¦  «         ||¦  «        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�   )ro   r   )r›   Úfs     rƒ   r)  z6ComputedBuffer.simplify_and_reorder.<locals>.<genexpr>¾  s,   è è € ÐHÐH¨q•z !¥TÑ*Ô*ÐHÐHÐHÐHÐHÐHr„   c                ó   •— g | ]}|‰v¯|‘Œ	S r…   r…   )r›   r1  Úindex_formulass     €rƒ   rž   z7ComputedBuffer.simplify_and_reorder.<locals>.<listcomp>Æ  s*   ø€ ð #ð #ð #Ø°!¸>Ð2IÐ2I�Ð2IÐ2IÐ2Ir„   c           	     óø   •— ‰                      | ||‰
¦  «        \  }}} || ¦  «        } |rJt          j        j                             | |t          ‰	| |¦  «        ¦  «        \  }}}t          ||¦  «        }n|}|||fS r�   )Ú_apply_loop_reorderingrY   rè   ré   Ú_simplify_loopsr;   r²   )Úx_varsÚsupport_varsrª  Úsimplify_loopsÚreindex0rª   r¬   Úpruner¢   rq  Úmemory_addrsr  s            €€€rƒ   Úsimplify_and_reorderzAComputedBuffer.simplify_and_reorder.<locals>.simplify_and_reorderÏ  sœ   ø€ Ø(,×(CÒ(CØ˜ e¨\ñ)ô )Ñ%ˆE�8˜Xð �X˜fÑ%Ô%ˆFàð #Ý)*¬Ô)9×)IÒ)IØØÝ,¨^¸VÀUÑKÔKñ*ô *Ñ&��x õ
 *¨(°HÑ=Ô=��à"�Ø˜' 8Ð+Ð+r„   Úprc   )rg  Úindexing_exprsrs   ro   rq   r    rr   rp   r%  rc  Úget_write_exprsrY   rè   r4  r:   ÚPREFER_STORE_LOOP_ORDERÚextendÚget_read_exprsrQ   r  r8   Úloop_ordering_after_fusionr9   Úindex_vars_no_squeezerA   )r  rh  rj  re  rf  r˜  r\  rd  Úextra_indexing_rangesÚextra_indexing_exprÚexpected_var_rangesr{  rv  Úshould_merge_loopsÚiter_rangesÚiter_reindexrÎ   Úreduce_rangesÚreduce_reindexÚ	iter_varsrc  rq  rz  s   `                    @@rƒ   r{  z#ComputedBuffer.simplify_and_reorder�  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Ñ:Ô:Ð:Ð:Ð:ÝÐ1µ4Ñ8Ô8Ð8Ð8Ð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ð	,ð 	,ð 	,ð 	,ð 	,ð 	,ð 	,ð$ " KÑ/ˆå• tÑ,Ô,Ñ-Ô-Ð-ÐVµVÔ5VÐ1Vð 	ð (<Ð';ØØØØñ	(
ô (
Ñ$ˆ�\ 1ð ,@Ð+?Ø˜ {Ð4Fñ,
ô ,
Ñ(ˆ�~ qõ
 0<Ô/QØØØð0
ñ 0
ô 0
Ñ,Ñ ˆ�K *õ
 ØØˆ\˜)Ñ$Ô$ n n°[Ñ&AÔ&AÐBØØØñ
ô 
ˆð ˜]Ð+¨TÐ1Ð1r„   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.
        r7   rY  Nc                ó\   •— g | ](}t           j        j                             |‰‰¦  «        ‘Œ)S r…   rX  )r›   r  r\  rv  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›   rœ   rª  s     €rƒ   rž   z9ComputedBuffer._apply_loop_reordering.<locals>.<listcomp>$  s   ø€ Ð)Ð)Ð)˜a��q”Ð)Ð)Ð)r„   )r[  rZ  r    rp   rq  Ú	Exceptionr8   r=  r<  Úwarningrr   r¤   r¡   r©   r¥   )r\  rv  rª  rz  Úpriority_idxrZ  rP  r“   s   ```     rƒ   rs  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�   ©r  rË  r!  s    rƒ   rË  z!ComputedBuffer.get_reduction_size'  ó   € ØŒy×+Ò+Ñ-Ô-Ð-r„   c                ó4   — | j                              ¦   «         S r�   ©r  rÈ  r!  s    rƒ   rÈ  z!ComputedBuffer.get_reduction_type*  r•  r„   rÕ   c                ó4   — | j                              ¦   «         S r�   )r  rr  r!  s    rƒ   rÏ  zComputedBuffer.is_no_op-  rŠ  r„   c                ó   — dS ©NTr…   r!  s    rƒ   r!  zComputedBuffer.should_allocate0  r8  r„   rç   r}  rf   c                ó6   — | j                              |¦  «        S )r•  ©r  rÑ  r€  s     rƒ   rÑ  z!ComputedBuffer.constant_to_device3  s   € àŒy×+Ò+¨FÑ3Ô3Ð3r„   rä  rö  rõ  rÚ  rô  r'  rè  )rj   r‰   )rj   rO  rÙ  )rj   r_  ©NN)rh  ri  rj  rk  rj   rl  r�   rù  rá  rú  )r  rü  rý  rþ  rC  rÁ  r,  r-  rº  rÆ  r‰  rJ  r¼   r(  rI   rg  r{  r  rs  rË  rÈ  rÏ  r!  rÑ  r{  r|  s   @rƒ   r"  r"  ï  sÝ  ø€ € € € € € à€K€K�Kð	ð 	ð 	ð 	ð%ð %ð %ð %ð%ð %ð %ð %ð*ð *ð *ð *ðð ð ð ð
ð 
ð 
ð 
ð2%ð %ð %ð %ð %ð %ðGð Gð Gð Gð%ð %ð %ð %ðN%ð %ð %ð %ð ðJð Jð Jñ „]ðJðD RVØBFðq2ð q2ð q2ð q2ð q2ðf ð ð!Bð !Bð !Bñ „\ð!BðF.ð .ð .ð .ð.ð .ð .ð .ð,ð ,ð ,ð ,ðð ð ð ð4ð 4ð 4ð 4ð 4ð 4ð 4ð 4r„   r"  c                  óX   ‡ — e Zd ZdZdˆ fd
„Zdd„Zd„ Zdd„Zdd„Zdd„Z		 	 dd d„Z
ˆ xZS )!ÚTemplateBufferzt
    Represents a Triton (in the future other type) of template operator
    that we can fuse an epilogue onto.
    r  rR  ÚinputsúList[IRNode]Úmake_kernel_renderr*  rj   rk   c                ó   •— t          ¦   «                              d |¬¦  «         t                               |¦  «        | _        || _        t          j                             | ¦  «        | _	        t          j         
                    | ¦  «         d S r2  )r>  rÇ  ÚInputsKernelÚunwrap_storager   r¢  rY   rè   Úregister_bufferr‡   Úregister_operation)r  r  r   r¢  r@  s       €rƒ   rÇ  zTemplateBuffer.__init__>  sr   ø€ õ 	‰Œ×Ò˜d¨6ÐÑ2Ô2Ð2Ý"×1Ò1°&Ñ9Ô9ˆŒØ"4ˆÔÝ”G×+Ò+¨DÑ1Ô1ˆŒ	Ý	Œ×"Ò" 4Ñ(Ô(Ð(Ð(Ð(r„   r¸  c                ó.   — |                       d¬¦  «        S )NT©Ú	normalize)r?   r!  s    rƒ   rº  zTemplateBuffer.get_read_writesJ  s   € Ø×'Ò'°$Ð'Ñ7Ô7Ð7r„   c                ó$  ‡‡— |                       ¦   «         Š|                      ¦   «                              ¦   «         Šˆˆfd„}t          j        ||                      ¦   «         d|¬¦  «        }t          d„ | j        D ¦   «         ¦  «        |_        |S )Nc                ól   •— t          |¦  «        dk    sJ ‚t          j        ‰ ‰| ¦  «        d¦  «        S )Nr   Úfake)r    rW   r�  )r—   rý  r‹  r‡   s     €€rƒ   Údummyz1TemplateBuffer.extract_read_writes.<locals>.dummyQ  s6   ø€ Ý�v‘;”; !Ò#Ð#Ð#Ð#Ý”9˜T 7 7¨5¡>¤>°6Ñ:Ô:Ð:r„   r…   r©  c              3  ób   K  — | ]*}t          j        |                     ¦   «         ¦  «        V — Œ+d S r�   )r9   rR  r”  rX  s     rƒ   r)  z5TemplateBuffer.extract_read_writes.<locals>.<genexpr>X  s5   è è € ÐXÐXÀq¥Ô 4°Q·Z²Z±\´\Ñ BÔ BÐXÐXÐXÐXÐXÐXr„   )	r”  rí   r�  r9   r?   rë   r2   r   r¾  )r  rª  r®  Údepsr‹  r‡   s       @@rƒ   r?   z"TemplateBuffer.extract_read_writesM  s›   øø€ Ø�}Š}‰ŒˆØ—/’/Ñ#Ô#×0Ò0Ñ2Ô2ˆð	;ð 	;ð 	;ð 	;ð 	;ð 	;õ Ô/Ø�4—=’=‘?”? B°)ð
ñ 
ô 
ˆõ  ÐXÐXÈDÌKÐXÑXÔXÑXÔXˆŒ
Øˆr„   rÉ  c                ó$   — t           j        j        S r�   )rz   rU  rë  r!  s    rƒ   rË  z!TemplateBuffer.get_reduction_size[  s   € ÝŒwŒ{Ðr„   rý   c                ó   — d S r�   r…   r!  s    rƒ   rÈ  z!TemplateBuffer.get_reduction_type^  r8  r„   rÕ   c                ó   — dS rš  r…   r!  s    rƒ   r!  zTemplateBuffer.should_allocatea  r8  r„   Nrh  ri  rj  rk  c                ó2   — |                       ¦   «         dfd fS rE  ri  )r  rh  rj  s      rƒ   r{  z#TemplateBuffer.simplify_and_reorderd  s&   € ð —’‘”Øðð ð
ð 	
r„   )r  rR  r   r¡  r¢  r*  rj   rk   rô  rù  rä  rá  r�  )rh  ri  rj  rk  )r  rü  rý  r  rÇ  rº  r?   rË  rÈ  r!  r{  r{  r|  s   @rƒ   rŸ  rŸ  8  sÉ   ø€ € € € € ðð ð

)ð 
)ð 
)ð 
)ð 
)ð 
)ð8ð 8ð 8ð 8ðð ð ðð ð ð ðð ð ð ðð ð ð ð
 RVØBFð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
r„   rŸ  c                  ó4   ‡ — e Zd Z	 ddˆ fd„Zdd„Zdd
„Zˆ xZS )ÚTritonTemplateBufferNÚmutated_inputsúOptional[Iterable[IRNode]]rj   rk   c                óœ  •‡ ‡— t          ¦   «                              |||¦  «         |‰ _        ‰ g‰ _        |�”t          j        j        j        t          j        j        j        f}t          j
        j        j        }||v sJ d|› d|› �¦   «         ‚‰ j        d                              ¦   «         Š‰ xj        ˆˆ fd„|D ¦   «         z  c_        dS 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. Currenlty 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.
        Nz$Mutated inputs are only allowed for z	 but got r   c                óN   •— g | ]!}t          t          ‰¬ ¦  «        |‰¦  «        ‘Œ"S ©rF  ©ÚMutationOutputrÛ  )r›   r-  rç   r  s     €€rƒ   rž   z1TritonTemplateBuffer.__init__.<locals>.<listcomp>‘  s@   ø€ ð ð ð àõ �z°Ð8Ñ8Ô8¸#¸tÑDÔDðð ð r„   )r>  rÇ  r·  Úoutputsrt   rW   Úhigher_orderÚflex_attentionÚflex_attention_backwardrY   rè   Úcurrent_noder¥  r   rñ   )	r  r  r   r¢  r·  Úallowed_setrÂ  rç   r@  s	   `      @€rƒ   rÇ  zTritonTemplateBuffer.__init__s  só   øøø€ õ  	‰Œ×Ò˜ Ð);Ñ<Ô<Ð<Ø,ˆÔØ&* VˆŒØÐ%õ ”	Ô&Ô5Ý”	Ô&Ô>ðˆKõ œ7Ô/Ô6ˆLà Ð+Ð+Ð+ØZ°kÐZÐZÈLÐZÐZñ ,Ô+Ð+à”[ ”^×.Ò.Ñ0Ô0ˆFØˆLŒLð ð ð ð ð à)ðñ ô ñ ˆLŒLˆLˆLð &Ð%r„   r  c                ó   — | j         S r�   )r¾  r!  s    rƒ   r  z TritonTemplateBuffer.get_outputs–  rÍ  r„   rˆ   c                ó   — d| j         › d�}|S )NzTritonTemplateBuffer(layout=r   r  )r  rÏ   s     rƒ   rD  zTritonTemplateBuffer.__str__™  s   € Ø;¨T¬[Ð;Ð;Ð;ˆØˆ
r„   r�   )r·  r¸  rj   rk   r&  rë  )r  rü  rý  rÇ  r  rD  r{  r|  s   @rƒ   r¶  r¶  r  sp   ø€ € € € € ð 6:ð!ð !ð !ð !ð !ð !ð !ðFð ð ð ðð ð ð ð ð ð ð r„   r¶  c                  óZ   ‡ — e Zd ZdZdˆ fd„Zdd„Zdd„Zd„ Zdd„Zdd„Z	dd„Z
dd„Zˆ xZS )ÚChoiceCallera.  
    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, CUDATemplateCaller.
    r‡   rˆ   Úinput_nodesr  r  rR  Údescriptionrj   rk   c                ó€   •— t          ¦   «                              ¦   «          || _        || _        || _        || _        d S r�   )r>  rÇ  r‡   r  rÈ  rÉ  )r  r‡   rÈ  r  rÉ  r@  s        €rƒ   rÇ  zChoiceCaller.__init__ª  sA   ø€ õ 	‰Œ×ÒÑÔÐØˆŒ	ØˆŒØ&ˆÔð 'ˆÔÐÐr„   r‚  c               óZ   — |                       ¦   «         }t          j        ||d|i¦  «        S )NrÏ   )Úto_callablerD   Ú	benchmark)r  rÏ   r‹   Úalgos       rƒ   rÍ  zChoiceCaller.benchmark¹  s,   € Ø×ÒÑ!Ô!ˆÝÔ$ T¨4°%¸°Ñ>Ô>Ð>r„   c                ó   — t           ‚r�   r  r!  s    rƒ   Ú	call_namezChoiceCaller.call_name½  r  r„   c                ó   — t           ‚r�   r  r!  s    rƒ   rÌ  zChoiceCaller.to_callableÀ  r  r„   c                ó   — t           ‚r�   r  r!  s    rƒ   Úhash_keyzChoiceCaller.hash_keyÃ  r  r„   re   c                ó   — t           ‚r�   r  r!  s    rƒ   Úoutput_nodezChoiceCaller.output_nodeÆ  r  r„   ú<Dict[str, Union[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É  s   € àˆ	r„   c                ó   — dS )NÚunsupported_choicer…   r!  s    rƒ   Úautoheuristic_idzChoiceCaller.autoheuristic_idÍ  s   € Ø#Ð#r„   )
r‡   rˆ   rÈ  r  r  rR  rÉ  rˆ   rj   rk   )rj   r‚  rë  )rj   re   )rj   rÖ  )r  rü  rý  r  rÇ  rÍ  rÐ  rÌ  rÓ  rÕ  rØ  rÛ  r{  r|  s   @rƒ   rÇ  rÇ  ¡  sÎ   ø€ € € € € ðð ð'ð 'ð 'ð 'ð 'ð 'ð?ð ?ð ?ð ?ð"ð "ð "ð "ð"ð "ð "ð"ð "ð "ð "ð"ð "ð "ð "ðð ð ð ð$ð $ð $ð $ð $ð $ð $ð $r„   rÇ  c                  ó   — e Zd Zdd„ZdS )ÚTritonTemplateCallerBaserj   r   c                ó   — t           ‚r�   r  r!  s    rƒ   Úget_make_kernel_renderz/TritonTemplateCallerBase.get_make_kernel_renderÒ  r  r„   N)rj   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ej	        dd„¦   «         Z
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.
    r  rR  r   r¡  Úchoice_timingsú'Callable[[], Dict[ChoiceCaller, float]]Úunfiltered_choicesúList[ChoiceCaller]rj   rk   c                ó¶   •— t          ¦   «                              ||d ¬¦  «         || _        d | _        || _        t          d„ |D ¦   «         ¦  «        | _        d S )N)r  r   r¢  c              3  ó–   K  — | ]D}t          |t          ¦  «        p*t          |t          j        j        j        ¦  «        o|j        V — ŒEd S r�   )ro   rÝ  rt   ru   Ú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Úoriginal_inputsr%  Ú_output_plannable)r  r  r   râ  rä  r@  s        €rƒ   rÇ  zMultiTemplateBuffer.__init__ß  sr   ø€ õ 	‰Œ×Ò ¨vÈ$ÐÑOÔOÐOØ"0ˆÔØDHˆÔØ%ˆÔÝ!$ð %
ð %
ð -ð%
ñ %
ô %
ñ "
ô "
ˆÔÐÐ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„   úDict[ChoiceCaller, float]c                óP   — | j         €|                      ¦   «         | _         | j         S r�   )rí  rì  r!  s    rƒ   râ  z"MultiTemplateBuffer.choice_timingsú  s(   € àÔÐ'Ø#'×#:Ò#:Ñ#<Ô#<ˆDÔ ØÔ#Ð#r„   ÚcallerrÝ  c              #  óê   K  — t          |t          j        j        j        ¦  «        sJ ‚| j        |j        k    sJ ‚| j        }|                     ¦   «         | _        	 d V — || _        d S # || _        w xY wr�   )ro   rt   ru   rè  ÚTritonTemplateCallerr  r¢  rß  )r  rô  Úrenders      rƒ   Úswap_as_triton_callerz)MultiTemplateBuffer.swap_as_triton_caller   s…   è è € å˜&¥%¤/Ô"BÔ"WÑXÔXÐXÐXÐXØŒ{˜fœmÒ+Ð+Ð+Ð+àÔ(ˆØ"(×"?Ò"?Ñ"AÔ"AˆÔð	-ØˆEˆEˆEà&,ˆDÔ#Ð#Ð#ø fˆDÔ#Ð,Ð,Ð,Ð,s   ÁA) Á)	A2c                ó  — t          |t          j        j        j        ¦  «        sJ ‚|                      ¦   «         |j        j        k    sJ ‚|                      ¦   «         |j        j	        k    sJ ‚| 
                    ¦   «         | _        d S r�   )ro   rt   ru   rè  rö  rë   r  rä   r�  rå   rß  r¢  )r  rô  s     rƒ   Úfinalize_as_triton_callerz-MultiTemplateBuffer.finalize_as_triton_caller  sx   € Ý˜&¥%¤/Ô"BÔ"WÑXÔXÐXÐXÐXØ�}Š}‰Œ &¤-Ô"4Ò4Ð4Ð4Ð4Ø�ŠÑ Ô  F¤MÔ$8Ò8Ð8Ð8Ð8Ø"(×"?Ò"?Ñ"AÔ"AˆÔÐÐr„   úTuple[ChoiceCaller, float]c                ó`   — t          | j        | j        j        ¬¦  «        }|| j        |         fS )Nr  )r©  râ  rŠ  )r  Ú
min_choices     rƒ   Úget_min_choicez"MultiTemplateBuffer.get_min_choice  s0   € Ý˜Ô,°$Ô2EÔ2IÐJÑJÔJˆ
Ø˜DÔ/°
Ô;Ð<Ð<r„   )
r  rR  r   r¡  râ  rã  rä  rå  rj   rk   rá  )rj   rò  )rô  rÝ  )rô  rÝ  rj   rk   )rj   rû  )r  rü  rý  r  rÇ  r  rñ  râ  r  r  rø  rú  rþ  r{  r|  s   @rƒ   rá  rá  Ö  s×   ø€ € € € € ðð ð
ð 
ð 
ð 
ð 
ð 
ð( ð&ð &ð &ñ „Xð&ð ð$ð $ð $ñ „Xð$ð
 Ôð	-ð 	-ð 	-ñ Ôð	-ðBð Bð Bð Bð=ð =ð =ð =ð =ð =ð =ð =r„   rá  c                  ó&   ‡ — e Zd Zd	ˆ fd„Zd„ Zˆ xZS )
ÚCUDATemplateBufferÚworkspace_sizer~   Útemplater[   rj   rk   c                ój   •— t          ¦   «                              |||¦  «         || _        || _        d S r�   )r>  rÇ  r  r  )r  r  r   r¢  r  r  r@  s         €rƒ   rÇ  zCUDATemplateBuffer.__init__  s5   ø€ õ 	‰Œ×Ò˜ Ð);Ñ<Ô<Ð<à,ˆÔØ ˆŒˆˆr„   c                ó"   — | j         �| j         ndS rn  )r  r!  s    rƒ   r%  z%CUDATemplateBuffer.get_workspace_size%  s   € Ø&*Ô&9Ð&EˆtÔ"Ð"È1ÐLr„   )r  r~   r  r[   rj   rk   )r  rü  rý  rÇ  r%  r{  r|  s   @rƒ   r   r     sS   ø€ € € € € ð!ð !ð !ð !ð !ð !ðMð Mð Mð Mð Mð Mð Mr„   r   c                  ó    ‡ — e Zd Zdˆ fd„Zˆ xZS )ÚCppTemplateBufferrj   rk   c                ój   •— t          ¦   «                              |||¦  «         || _        || _        d S r�   )r>  rÇ  r  rë  )r  r  r   r¢  r  rë  r@  s         €rƒ   rÇ  zCppTemplateBuffer.__init__*  s2   ø€ Ý‰Œ×Ò˜ Ð);Ñ<Ô<Ð<Ø ˆŒØˆŒˆˆr„   rÙ  ©r  rü  rý  rÇ  r{  r|  s   @rƒ   r  r  )  s=   ø€ € € € € ðð ð ð ð ð ð ð ð ð r„   r  c                  óh   — e Zd ZU ded<   dd„Zdd„Zedd
„¦   «         Zed„ ¦   «         Z	dd„Z
dd„ZdS )r¤  r  r   rj   r¸  c                óæ  ‡— t          ¦   «         }t          j        Š| j        D ]}t	          |t
          ¦  «        r"|                     ˆfd„|D ¦   «         ¦  «         Œ9t	          |t          ¦  «        rŒO|                      ‰| 	                    ¦   «         ¦  «        ¦  «         Œ€t          ˆfd„|  
                    ¦   «         D ¦   «         ¦  «        }t          j        ||t          ¦   «         ¬¦  «        S )Nc              3  óR   •K  — | ]!} ‰|                      ¦   «         ¦  «        V — Œ"d S r�   r  )r›   rÒ   rR  s     €rƒ   r)  z/InputsKernel.get_read_writes.<locals>.<genexpr>9  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�   r  )r›   r-  rR  s     €rƒ   r)  z/InputsKernel.get_read_writes.<locals>.<genexpr>@  sF   øè è € ð :
ð :
Ø(+ˆGˆG�C—L’L‘N”NÑ#Ô#ð:
ð :
ð :
ð :
ð :
ð :
r„   )r¾  ÚwritesÚindex_exprs)r2   r9   rR  r   ro   rp   Úupdater<  r¦  r”  r  Ú
ReadWrites)r  r¾  Úinputr  rR  s       @rƒ   rº  zInputsKernel.get_read_writes4  s
  ø€ Ý.8©l¬lˆÝÔ&ˆØ”[ð 	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å/9ð :
ð :
ð :
ð :
Ø/3×/?Ò/?Ñ/AÔ/Að:
ñ :
ô :
ñ 0
ô 0
ˆõ Ô&ØØÝ"™œð
ñ 
ô 
ð 	
r„   r»  c                ó4   — |                       ¦   «         j        S r�   r½  r!  s    rƒ   r,  zInputsKernel.get_readsJ  r¿  r„   rÒ   rf   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 |¦   «         ‚|S r�   )ro   re   r  rU  r\  rW  râ  rã  Úunwrap_storage_for_inputÚTorchBindObjectrV  ©rO  rÒ   s     rƒ   r  z%InputsKernel.unwrap_storage_for_inputM  sÑ   € å�a�Ñ#Ô#ð 	Ø”ˆAÝ�a�Ñ$Ô$ð 	Ø”ˆAÝ�a�Ñ"Ô"ð 	.­:°a½Ñ+IÔ+Ið 	.Ý×*Ò*¨1Ñ-Ô-ˆAÝ�a�Ñ#Ô#ð 	3ð
 ×/Ò/°Ñ2Ô2Ð2Ý�a�Ñ)Ô)ð 	ØˆHÝ˜!�f¥oÐ6Ñ7Ô7Ð:Ð:¸Ñ:Ô:Ð7Øˆr„   c                ó¶   — g }| D ]S}t          |t          ¦  «        rd„ |D ¦   «         }nt                               |¦  «        }|                     |¦  «         ŒT|S )Nc                óB   — g | ]}t                                |¦  «        ‘ŒS r…   )r¤  r  re  s     rƒ   rž   z/InputsKernel.unwrap_storage.<locals>.<listcomp>e  s&   € ÐIÐIÐIÀ!•\×:Ò:¸1Ñ=Ô=ÐIÐIÐIr„   )ro   rp   r¤  r  r&  )r   Ú
inputs_newrÒ   s      rƒ   r¥  zInputsKernel.unwrap_storage`  sm   € àˆ
Øð 	!ð 	!ˆAÝ˜!�TÑ"Ô"ð =ØIÐIÀqÐIÑIÔI��å ×9Ò9¸!Ñ<Ô<�Ø×Ò˜aÑ Ô Ð Ð ØÐr„   rÕ   c                ó   — dS rš  r…   r!  s    rƒ   rÍ  zInputsKernel.is_externk  r8  r„   r~   c                ó   — dS r  r…   r!  s    rƒ   rÁ  zInputsKernel.num_readsn  r  r„   Nrô  rõ  )rÒ   rf   rj   rf   rá  rö  )r  rü  rý  rþ  rº  r,  ry  r  r  r¥  rÍ  rÁ  r…   r„   rƒ   r¤  r¤  0  s­   € € € € € € àÐÐÑð
ð 
ð 
ð 
ð,,ð ,ð ,ð ,ð ðð ð ñ „[ðð$ ðð ñ „\ððð ð ð ðð ð ð ð ð r„   r¤  c                  ó   — e Zd Zdd„Zdd„ZdS )	Ú	NopKernelrj   rÕ   c                ó   — dS rš  r…   r!  s    rƒ   rÏ  zNopKernel.is_no_ops  r8  r„   r»  c                ó   — t          ¦   «         S r�   r1   r!  s    rƒ   r,  zNopKernel.get_readsv  r"  r„   Nrá  rõ  )r  rü  rý  rÏ  r,  r…   r„   rƒ   r  r  r  s<   € € € € € ðð ð ð ðð ð ð ð ð r„   r  c                  ó^   — e Zd ZdZed„ ¦   «         Zed	d„¦   «         Ze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.
    c                óL
  — |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          t	          |¦  «        ¦  «        D ]x}||         }t          |¦  «        r_|                     ¦   «         }t          |t           ¦  «        r6t"                               |j        |j        ¦  «        rt+          |¦  «        } nŒyt-          d„ |D ¦   «         ¦  «        }t          j        j        j        d         }t          |t          ¦  «        sJ ‚|du r(t-          d„ |D ¦   «         ¦  «        rt+          |¦  «        }t3          d t!          ||||¬¦  «        g ¬¦  «        }t5          |¦  «        }g }t          t	          |¦  «        ¦  «        D �]%}|                      ||         t8                               ||||         ||         d¬¦  «        ¦  «        }|j                             |¦  «         t          ||         j        t@          ¦  «        r ||         j         !                    ¦   «         }n||         j        }| "                    ¦   «         rbtG          ||                               ¦   «         j$        ¦  «        r6tK          |¦  «        s'|                     | &                    ¦   «         ¦  «         �Œ't	          |¦  «        dk    rIt          j         '                    |tP          j)        ¦  «        rt          j         *                    |¦  «         t          j         +                    |¦  «        |_,        |  -                    |j        ¦  «        |_        t          j         .                    |¦  «         |S )	Nr   r7   c              3  ó4   K  — | ]}t          |¦  «        V — Œd S r�   )rì   rX  s     rƒ   r)  z&ConcatKernel.create.<locals>.<genexpr>£  s+   è è € Ð-WÐ-WÈ1Õ.CÀAÑ.FÔ.FÐ-WÐ-WÐ-WÐ-WÐ-WÐ-Wr„   Fc              3  óÔ   K  — | ]c}d |j         v oU|j         d                               t          j        ¬¦  «        p*|j         d                               t          j        ¬¦  «        V — ŒddS )rm  ©r¶  N)r„  rK  rt   r±  r³  ©r›   Úargs     rƒ   r)  z&ConcatKernel.create.<locals>.<genexpr>§  s„   è è € ð <
ð <
ð ð �S”XÐð à”˜”×-Ò-½EÔ<OÐ-ÑPÔPð WØ”8˜E”?×0Ò0½uÔ?UÐ0ÑVÔVð	<
ð <
ð <
ð <
ð <
ð <
r„   )rç   ræ   rä   rå   ©r‡   r  r   )r4  )/rñ   rð   rp   rë   r    r¡   r&  rY   rè   ré   rì  rî   rï   rì   rí   ro   rj  rR  ro  rä   rå   r&   r¨  rÂ  r‹   r!  rU  rú  r,  rN  r   r  r\  r¤  Úis_input_bufferrQ   r€   rP   rÕ  r4  r:   ÚFOREACHÚregister_operation_listr¦  r‡   r¥  r§  )rO  r   rá  rç   ræ   r–  Úoffsets_startÚoffsets_endrœ   Ú
input_sizerO  Úoutput_striderÒ   r  Úany_input_is_storage_and_layoutÚfx_node_argsÚconcat_kernelÚkernelÚop_namesÚinput_bufferÚinput_unwrappeds                        rƒ   rN  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×"?Ò"?Ø  œ Z°¤]ñ#ô #�H˜Q‘K�Kð ×Ò˜x¨œ}Ñ-Ô-Ð-Ñ-å&×9Ò9¸(ÑCÔCˆå•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ˆÝ˜,­Ñ-Ô-Ð-Ð-Ð-à*¨eÐ3Ð3½ð <
ð <
ð $ð<
ñ <
ô <
ñ 9
ô 9
Ð3õ ;¸8ÑDÔDˆMå$ØÝØØØØ$ð	ñ ô ð ð	
ñ 	
ô 	
ˆõ ˜MÑ*Ô*ˆØˆÝ•s˜6‘{”{Ñ#Ô#ð 	Cñ 	CˆAØ×+Ò+Ø�q”	Ý× Ò Ø˜C ¨qÔ!1°;¸q´>Èð !ñ ô ñô ˆLð Ô ×'Ò'¨Ñ5Ô5Ð5å˜& œ)œ.­(Ñ3Ô3ð 1Ø"(¨¤)¤.×"<Ò"<Ñ">Ô">��à"(¨¤)¤.�ð  ×/Ò/Ñ1Ô1ðCå˜6 !œ9×/Ò/Ñ1Ô1Ô6Ñ7Ô7ðCõ # <Ñ0Ô0ðCð
 —’ × ?Ò ?Ñ 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„   Nc                óŽ  — t          |t          ¦  «        r|                      |j        |¦  «        S t          |j        t          ¦  «        rÂt          |j        j        t          ¦  «        r|j        j        sdS |€dS t          | 	                    ¦   «         ¦  «        t          | 	                    ¦   «         ¦  «        k    sdS t          d„ t          | 	                    ¦   «         | 	                    ¦   «         ¦  «        D ¦   «         ¦  «        S t          |j        j        t          ¦  «        ot          |j        t          ¦  «         S )NFTc              3  óf   K  — | ],\  }}t           j        j                             ||¦  «        V — Œ-d S r�   )rY   rè   ré   Ústatically_known_equals)r›   Ús1Ús2s      rƒ   r)  z=ConcatKernel.can_realize_into_without_copy.<locals>.<genexpr>ñ  sO   è è € ð ð á�B˜õ ”Ô ×8Ò8¸¸RÑ@Ô@ðð ð ð ð ð r„   )ro   re   Úcan_realize_into_without_copyr  rá  r  rj  rñ  r    r�  r%  r¤   rî   ÚExternKernelAlloc)rO  r÷  rø  s      rƒ   r<  z*ConcatKernel.can_realize_into_without_copyÛ  s3  € å�c�9Ñ%Ô%ð 	Dà×4Ò4°S´X¸sÑCÔCÐCå�c”hÕ 3Ñ4Ô4ð 	å˜sœxœµÑ<Ô<ðà”xÔ0ðð �uð ˆ{Ø�tõ �s—~’~Ñ'Ô'Ñ(Ô(­C°·²Ñ0@Ô0@Ñ,AÔ,AÒAÐAØ�uåð ð å! #§.¢.Ñ"2Ô"2°C·N²NÑ4DÔ4DÑEÔEðñ ô ñ ô ð õ
 ˜#œ(œ/­>Ñ:Ô:ð 
Å:ØŒHÕ'ñD
ô D
ð @
ð 	
r„   c                óf  — t          |t          ¦  «        s2t          |¦  «        r#t          |¦  «        \  }}t          ||¬¦  «        }t          |t          ¦  «        s
J |¦   «         ‚t          |t          ¦  «        r|                      |j        |¦  «        S t          |t          ¦  «        ra|                     ¦   «          t          |j        d¦  «        sJ ‚|  
                    ||¦  «        r t          |¦  «        |j        _        |j        S t                               |                     ¦   «         |                     ¦   «         |                     ¦   «         d„ t%          |                     ¦   «         |                     ¦   «         ¦  «        D ¦   «         ¬¦  «        }|                      ||¦  «        S )Nrš  r  c                ó^   — g | ]*\  }}t           j        j                             ||¦  «        ‘Œ+S r…   rõ  rö  s      rƒ   rž   z-ConcatKernel.realize_into.<locals>.<listcomp>  sA   € ð ð ð á�A�qõ ”Ô ×-Ò-¨a°Ñ3Ô3ðð ð r„   r—  )ro   rW  rì   rF  re   rú  r  rU  ru  r  r<  rÆ  r  r…  rN  rñ   rð   r‰  r¤   rë   )rO  r÷  rø  rœ  r  Úpws         rƒ   rú  zConcatKernel.realize_intoú  s‡  € õ
 ˜#�Ñ/Ô/ð 	CÝ$ SÑ)Ô)ð CÝ"7¸Ñ"<Ô"<‘�˜Ý%¨7¸6ÐBÑBÔB�Ý˜#�Ñ/Ô/Ð4Ð4°Ñ4Ô4Ð/Ý�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„   rj   rÕ   c                ó   — dS rš  r…   r!  s    rƒ   r!  zConcatKernel.should_allocate  r8  r„   r�   rá  )	r  rü  rý  r  ry  rN  r<  rú  r!  r…   r„   rƒ   r!  r!  z  s�   € € € € € ðð ð
 ðXð Xñ „[ðXðt ð
ð 
ð 
ñ „[ð
ð< ð)ð )ñ „[ð)ð@ð ð ð ð ð r„   r!  c                  óÜ  ‡ — e Zd ZU 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<   dZded<    ej        e¬¦  «        Zded<    ej        e¬¦  «        Zded<   	 	 	 	 	 	 	 dFdGˆ fd„ZdHd„ZdId„Zd „ Zd!„ ZdGd"„Zd#„ ZdJdKd$„ZdLd%„Zd&„ Zed'„ ¦   «         ZedMd)„¦   «         Z ed*„ ¦   «         Z!ed+„ ¦   «         Z"ed,„ ¦   «         Z#e	 	 	 dNdOd2„¦   «         Z$edPd3„¦   «         Z%edPd4„¦   «         Z&ed5„ ¦   «         Z'ed6„ ¦   «         Z(ed7„ ¦   «         Z)dGd8„Z*d9„ Z+dJdQd<„Z,d=„ Z-d>„ Z.dPd?„Z/dGd@„Z0dA„ Z1dB„ Z2dIdC„Z3dRdE„Z4e4Z5ˆ xZ6S )Srâ  r…   zTuple[Any, ...]Úconstant_argsrÝ  zDict[str, Any]r�   NzOptional[ReinterpretView]Úoutput_viewrý   Úpython_kernel_nameÚcpp_kernel_namezIterable[str]Úordered_kwargs_for_cpp_kernelzFOptional[Union[torch._ops.OpOverload, torch._ops.HigherOrderOperator]]Úop_overloadzOptional[List[Dict[str, Any]]]Úarg_propertiesz#Optional[Dict[str, Dict[str, Any]]]Úkwarg_propertiesz"Dict[sympy.Symbol, pytree.KeyPath]Úunbacked_bindingszList[MutationOutput]Úmutation_outputsrj   rk   c                ób  •— t          ¦   «                              |||¬¦  «         || _        |r|ni | _        || _        |
| _        |                      |¦  «         |                      |¦  «         |	| _        |  	                    ¦   «          i | _
        g | _        t          j        j        | _        d S ©Nr(  )r>  rÇ  rC  r�   rD  rH  Úset_cpp_kernel_nameÚset_python_kernel_namerG  Úcollect_arg_kwarg_propertiesrK  rL  rY   rè   rÂ  Úfx_node)r  r‡   r  r   rC  r�   rD  rE  rF  rG  rH  r@  s              €rƒ   rÇ  zExternKernel.__init__5  s¼   ø€ õ 	‰Œ×ÒØØØð 	ñ 	
ô 	
ð 	
ð
 +ˆÔØ &Ð.�f�f¨BˆŒØ&ˆÔØ&ˆÔØ× Ò  Ñ1Ô1Ð1Ø×#Ò#Ð$6Ñ7Ô7Ð7Ø-JˆÔ*Ø×)Ò)Ñ+Ô+Ð+Ø!#ˆÔØ "ˆÔÝ”wÔ+ˆŒˆˆr„   r  c                ó   — | g| j         ¢S r�   )rL  r!  s    rƒ   r  zExternKernel.get_outputsS  s   € ØÐ-�tÔ,Ð-Ð-r„   r  c                ó   — t          ¦   «         S r�   r1   r!  s    rƒ   r!  z%ExternKernel.get_unbacked_symbol_defsV  r"  r„   c                óJ  — 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 d S )Nc                óF   — g | ]}|j         °	|j        |j        |j        d œ‘ŒS ))r‡   r€   rŒ  )Ú
kwarg_onlyr‡   Ú	real_typerŒ  rX  s     rƒ   rž   z=ExternKernel.collect_arg_kwarg_properties.<locals>.<listcomp>]  sH   € ð ð ð ð Ø”|ðàœFØœKØ%&¤_ðð ðð ð r„   c                ó   — g | ]}i ‘ŒS r…   r…   re  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€   rŒ  )r‡   rX  rŒ  rX  s     rƒ   rÃ   z=ExternKernel.collect_arg_kwarg_properties.<locals>.<dictcomp>j  s8   € ð ð ð àð ” ¤¸q¼ÐOÐOðð ð r„   c                ó*   — g | ]}|j         ¯	|j        ‘ŒS r…   ©rW  r‡   rX  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…   )rW  rX  s     rƒ   rž   z=ExternKernel.collect_arg_kwarg_properties.<locals>.<listcomp>x  s/   € ð "ð "ð "ØÀÄð"Øð"ð "ð "r„   )ro   rH  rt   Ú_opsÚ
OpOverloadÚ_schemaÚ	argumentsr¡   r    r   rI  Úallarg_propertiesrG  Úschema_kwargsr!  s    rƒ   rQ  z)ExternKernel.collect_arg_kwarg_propertiesY  sU  € õ ˜$Ô*­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ÔÐÐð	ð 	r„   c                óŽ   — t          | j        t          ¦  «        r*|                      ¦   «          |                      ¦   «          d S d S r�   )ro   r  rî   Úapply_constraintr¦  r!  s    rƒ   r(  zExternKernel.decide_layout|  sJ   € Ý�d”k¥>Ñ2Ô2ð 	!Ø×!Ò!Ñ#Ô#Ð#Ø×ÒÑ Ô Ð Ð Ð ð	!ð 	!r„   c                ó^   — t          | |¦  «        \  }}|r|                     |¦  «         d S d S r�   )rN   r  )r  ÚwrapperÚ
origin_strÚdetailed_origin_strs       rƒ   Úcodegen_commentzExternKernel.codegen_comment�  sC   € Ý*=¸dÀGÑ*LÔ*LÑ'ˆ
Ð'Øð 	*Ø×Ò˜jÑ)Ô)Ð)Ð)Ð)ð	*ð 	*r„   c                ó   — t           ‚r�   r  ©r  rg  s     rƒ   ÚcodegenzExternKernel.codegen†  r  r„   c                ó€  — || _         t          j        j        r$t	          | j        t          j        j        ¦  «        sd S | j        }| j         €q|j	        dk    rS|j
        dk    r |j                             d¦  «        d         n|j                             dd¦  «        }d|› d�| _         d S |j        j        | _         d S d S )NÚatenr“  ú.r   rÎ   z
at::_ops::z::call)rF  rY   rè   Úcpp_wrapperro   rH  rt   r^  r_  Ú	namespaceÚ_overloadnamer  rH  Úreplacer`  r‡   )r  rF  r3  Úopnames       rƒ   rO  z ExternKernel.set_cpp_kernel_name‰  sÙ   € Ø.ˆÔÝŒwÔ"ð 	­*ØÔ�eœjÔ3ñ+
ô +
ð 	ð ˆFàÔ!ˆØÔÐ'àÔ 6Ò)Ð)ð Ô+¨yÒ8Ð8ð ”O×)Ò)¨#Ñ.Ô.¨qÔ1Ð1àœ×0Ò0°°cÑ:Ô:ð ð
 (C°FÐ'BÐ'BÐ'B�Ô$Ð$Ð$à'-¤~Ô':�Ô$Ð$Ð$ð (Ð'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.z._ops.z.ops.rp  )	rE  rH  ro   rt   r^  ÚHigherOrderOperatorr  rü  rt  )r  rE  r3  s      rƒ   rP  z#ExternKernel.set_python_kernel_name¡  sŒ   € Ø"4ˆÔØÐ)ØˆFàÔ!ˆØˆ>ØˆDÝ˜¥¤
Ô >Ñ?Ô?ð 	Ø&QÀÄÐ&QÐ&QˆDÔ#Ð#Ð#ð Ô$×,Ò,¨X°wÑ?Ô?ÐSÐSÀ&Ä/ÐSÐSð Ô#Ð#Ð#r„   c                ó„   — t           j        j        r)t           j        j                             | j        ¦  «        n| j        S r�   )rY   rè   rq  r  Úget_c_shim_func_namerF  rE  r!  s    rƒ   Úget_kernel_namezExternKernel.get_kernel_name°  s7   € õ ŒwÔ"ð)�AŒGÔ ×5Ò5°dÔ6JÑKÔKÐKàÔ(ð	
r„   c           	     óF  — t                                |                      ¦   «         |                      ¦   «         |                      ¦   «         |                      ¦   «         |                      ¦   «         |                      ¦   «         ¬¦  «        }|                     ¦   «          |S )N)rç   ræ   r+  r,  r  r  )	r…  rN  rñ   rð   r‰  rë   r3  r0  ru  )rÒ   r@  s     rƒ   Ú
copy_inputzExternKernel.copy_input·  sx   € å×ÒØ—<’<‘>”>Ø—+’+‘-”-Ø—]’]‘_”_Ø—:’:‘<”<Ø×)Ò)Ñ+Ô+Ø—o’oÑ'Ô'ð ñ 
ô 
ˆð 	�
Š
‰ŒˆØˆ	r„   úiTuple[Any, List[Any], List[Any], Callable[[Any, Any], Any], Optional[Dict[sympy.Symbol, pytree.KeyPath]]]c                óZ  ‡ ‡‡— ||dœ}t          j        |¦  «        \  }Šg Šg }g }|D ]¢}‰                     t          |t          ¦  «        ¦  «         ‰d         r|                     |¦  «         ŒHt          |t
          j        ¦  «        r+t          j        j	        j
                             |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%          |
d¬¦  «        ¦  «         �Œ |	||¦  «        \  }} ||i |¤Ž}d }t          j        j
        x}rNt)          |t          j        |¦  «         t-          ||t          j        j                             d	¦  «        ¦  «        }t          |t2          t4          f¦  «        s|gn|}|D ]i}t          |t6          j        ¦  «        rM|j        rFd
}t          j        j        j                             dd ¦  «        x}r|› d|› �}|t          j        _        Œj||||	|fS )N)r‹   r�   r  )r‚  c                ó^  •— g }t          | ¦  «        }t          |¦  «        }‰D ]I}|r#|                     t          |¦  «        ¦  «         Œ'|                     t          |¦  «        ¦  «         ŒJt          j        |‰¦  «        }|                     dg ¦  «        |                     di ¦  «        fS )Nr‹   r�   )Úiterr&  ÚnextÚpytreeÚtree_unflattenrŠ  )	Únew_tensor_argsÚnew_non_tensor_argsrù  Ú
it_tensorsÚit_non_tensorsÚ	is_tensorrQ  Ú	args_specÚis_arg_tensors	          €€rƒ   Úunflatten_argsz3ExternKernel.process_kernel.<locals>.unflatten_argsÞ  s­   ø€ ØˆFÝ˜oÑ.Ô.ˆJÝ!Ð"5Ñ6Ô6ˆNØ*ð 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…   ©rã  ©r›   rÒ   rO  s     €rƒ   rž   z/ExternKernel.process_kernel.<locals>.<listcomp>ê  s'   ø€ ÐAÐAÐA°�s×(Ò(¨Ñ+Ô+ÐAÐAÐAr„   TrD  )rÔ   rm  zEsparsity not handled. Please file issue for sparse inference weights.Ústack_tracez Found from : 
 )r‚  Útree_flattenr&  ro   rf   rz   r   rY   rè   ré   r¸   Úcreate_symintnoderì   rF  r\  r”  Ú	constantsÚtorchbind_constantsrØ   Ú	fake_moder-   rÂ  r*   r„  rŠ  rp   rq   rt   ÚTensorÚ	is_sparseÚdisable_cudagraphs_reason)rO  r3  r‹   r�   Úbinded_argsÚ	args_flatÚtensor_argsÚnon_tensor_argsr'  r‹  rÒ   Úexample_argsÚnew_argsÚ
new_kwargsÚexample_outputrK  r¸   Úexample_out_lirõ   Úmsgr�  r‰  rŠ  s   `                    @@rƒ   Úprocess_kernelzExternKernel.process_kernelÄ  si  øøø€ ð  $¨vÐ6Ð6ˆå%Ô2°;Ñ?Ô?Ñˆ	�9àˆØˆØ%'ˆØð 	,ð 	,ˆCØ× Ò ¥¨CµÑ!8Ô!8Ñ9Ô9Ð9Ø˜RÔ ð ,Ø×"Ò" 3Ñ'Ô'Ð'Ð'å˜c¥5¤:Ñ.Ô.ð WÝœ'Ô*Ô4×FÒFÀsÐQUÐFÑVÔV�CØ×&Ò& sÑ+Ô+Ð+Ð+ð
	:ð 
	:ð 
	:ð 
	:ð 
	:ð 
	:ð BÐAÐAÐA°[ÐAÑAÔAˆð ð 	6ð 	6ˆAÝ$ QÑ'Ô'ð 6Ý% a°Ð5Ñ5Ô5Ð5øð
 JLˆð
 ð 	Lñ 	LˆAõ ˜a¥Ñ*Ô*ð L¨q¯zªz©|¬|½q¼wÔ?PÐ/PÐ/PØ×#Ò#¥A¤GÔ$5°a·j²j±l´lÔ$CÑDÔDÐDÐDå˜q¥(Ñ+Ô+ðLà—J’J‘L”L¥A¤GÔ$?Ð?Ð?à×#Ò#¥A¤GÔ$?ÀÇ
Â
ÁÄÔ$MÑNÔNÐNÐNà×#Ò#Õ$5°aÀTÐ$JÑ$JÔ$JÑKÔKÐKÑKà-˜~¨l¸OÑLÔLÑˆ�*Ø˜ Ð8¨ZÐ8Ð8ˆàJNÐÝœÔ-Ð-ˆ9ð 	Ý˜I¥q¤~°~ÑFÔFÐFÝ 9Ø˜>­1¬>Ô+>×+BÒ+BÀ5Ñ+IÔ+Iñ!ô !Ðõ ˜n­tµU¨mÑ<Ô<ð ˆ^ÐÐàð 	ð
  ð 	8ð 	8ˆAÝ˜!�Uœ\Ñ*Ô*ð 8¨q¬{ð 8Ø]�Ý"#¤'Ô"6Ô";×"?Ò"?ÀÈtÑ"TÔ"TÐT�;ð AØ Ð@Ð@°;Ð@Ð@�CØ47•”Ô1øð ØØØØð
ð 	
r„   c           
     óT  — t          |t          ¦  «        sJ ‚t          |t          ¦  «        r|S |                     ¦   «         }t          j                             |                     ¦   «         ¦  «        }|€J ‚|                     ¦   «         }|�®d|j	        v r¥t          |j
        t          ¦  «        r‹|j	        d                              t          j        ¬¦  «        s+|j	        d                              t          j        ¬¦  «        r5|                     t#          |                     ¦   «         ¦  «        ¦  «         n|                     ¦   «          t)          j        |                     ¦   «         d¬¦  «        \  }}|d         } |                     ¦   «         |¦  «        }t          j        j                             ||¦  «        }t          j        j                             ||¦  «        }	t          j        j                             ||¦  «        }
t7          ||	¦  «        |
z   }||k    r$t8                               d|	|
|¦  «         t<          ‚t          |j        tA          | !                    ¦   «         | "                    ¦   «         |                     ¦   «         |	|
¬¦  «        ¬	¦  «        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.
        Nrm  r%  rQ  rc   r   z@convert_to_reinterpret_view failed: stride=%s offset=%s index=%sr�  rš  )#ro   r\  rW  r¤  rY   rè   rç  r”  r3  r„  r  rî   rK  rt   r±  r³  r³  r&   rë   r¦  r9   r>  r�  ré   r?  Ústride_varsÚ
offset_varrR   r<  r=  rO  r  rj  r�  rð   )rO  rÒ   Úx_unwrap_viewr-  Úx_unwrap_view_fx_nodeÚ
index_argsrc  r#  r—   rP  r›  Úexpecteds               rƒ   Úconvert_to_reinterpret_viewz(ExternKernel.convert_to_reinterpret_view%  s‹  € õ ˜!�XÑ&Ô&Ð&Ð&Ð&Ý�a�Ñ)Ô)ð 	ØˆHð Ÿš™œˆÝŒg× Ò  ×!7Ò!7Ñ!9Ô!9Ñ:Ô:ˆØˆˆˆØ #× 3Ò 3Ñ 5Ô 5Ðð "Ð-ØÐ.Ô3Ð3Ð3Ý˜=Ô/µÑ@Ô@ð 4ð &Ô*¨5Ô1×?Ò?Ý"'Ô"5ð @ñ ô ð 4ð )Ô-¨eÔ4×BÒBÝ"'Ô"8ð Cñ ô ð 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                óL  — |€t          ¦   «         S t          |t          j        t          j        j        j        t          f¦  «        rt          |¬¦  «        S t          |t          ¦  «        r]t          j                             t          j        |j        |                     ¦   «         |                     ¦   «         ¬¦  «        ¦  «        S t          |t$          ¦  «        r|S t          |t&          ¦  «        r|                      |j        ¦  «        S t          |t,          ¦  «        r;t-          |                      |j        ¦  «        |                     ¦   «         ¬¦  «        S t          |t0          ¦  «        r[|                     ¦   «          t5          |                     ¦   «         ¦  «        r&	 |                      |¦  «        S # t:          $ r Y nw xY wt          |t<          ¦  «        r|                     ¦   «          |S t          |t>          ¦  «        r|S |                       |¦  «        S )N)r  )ræ   rç   rš  )!r4  ro   rz   r   r{   r|   r}   r~   r<  rJ  rY   rè   Úadd_tensor_constantrt   Útensorrö   rð   rñ   r˜  re   rã  r  rW  rí   r\  ru  rì   r¤  rª  rO  rU  r  r|  r  s     rƒ   rã  zExternKernel.realize_inputi  sß  € àˆ9Ý'Ñ)Ô)Ð)Ý�a�%œ*¥e¤kÔ&9Ô&AÅ3ÐGÑHÔHð 	1Ý(¨aÐ0Ñ0Ô0Ð0Ý�a�Ñ"Ô"ð 	Ý”7×.Ò.Ý”˜QœW¨A¯KªK©M¬MÀ!Ç,Â,Á.Ä.ÐQÑQÔQñô ð õ �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�Ñ)Ô)ð 	ØˆHØ�~Š~˜aÑ Ô Ð s   Æ*F? Æ?
GÇGc                óÚ   — t          |¦  «        rHt          |                     ¦   «         ¦  «        dk    r|S |                     ¦   «         D ]}|dk    r|c S Œ|                      |¦  «        S r�  )rì   r    r�  r|  )rO  rÒ   rå   s      rƒ   Úrequire_stride1zExternKernel.require_stride1Š  sr   € å  Ñ#Ô#ð 	Ý�1—<’<‘>”>Ñ"Ô" aÒ'Ð'Ø�ØŸ,š,™.œ.ð ð �Ø˜Q’;�;Ø�H�H�Hð à�~Š~˜aÑ Ô Ð r„   Fr“   úOptional[Sequence[int]]r´  rc  c                óz	  — |€|€J ‚|                      ¦   «         dv r|S t          |¦  «        �r×t          |                     ¦   «         t          ¦  «        r@|                     ¦   «         j        }t          |                     ¦   «         t          ¦  «        °@t          |                     ¦   «         t          ¦  «        r‡|rnt          |ddt          ||¦  «        rHt          t          j        j                             |                     ¦   «         j        ¦  «        ¦  «        n||¬¦  «         |S t          |ddd ||¬¦  «         |S t          |                     ¦   «         t          ¦  «        rg|r'|                     ¦   «                              |¦  «        s<|r<t#          ||                     ¦   «         j        |                     ¦   «         ¦  «        r|S t          |                     ¦   «         t&          ¦  «        �rt          |                     ¦   «                              ¦   «         t          ¦  «        rt+          d¦  «        ‚t          |                     ¦   «                              ¦   «         t          ¦  «        r‹|r9|                     ¦   «                              ¦   «                              |¦  «        sN|rNt#          ||                     ¦   «                              ¦   «         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          |                     ¦   «         ¦  «        r‘t          |                     ¦   «         j        t8          ¦  «        se	 |                      |j        ¦  «        |_        |r|                      |||¬¦  «        S |r|                      |||¬¦  «        S n# t@          $ r Y nw xY w|  !                    |¦  «        }t          |dd|||¬¦  «         |rt          ||¦  «        sJ ‚|S )N)r   r7   TF)rE  rN  rO  r¨  rS  zHthe MutationLayoutSHOULDREMOVE's real layout shouldn't be FlexibleLayoutrT  )"rl  rì   ro   rí   rÆ  rÇ  rî   rF  rZ  rÑ   rY   rè   ré   Ú
size_hintsrå   rj  rY  ræ  rë   rå  rê  rÉ  r)  re   r  r\  rW  r¤  r=  rª  Úrequire_stride_orderÚrequire_exact_stridesrO  r|  )rO  rÒ   r“   r´  r¨  s        rƒ   Úrequire_strideszExternKernel.require_strides”  s½  € ð Ð  MÐ$=Ð$=Ð=Ø�;Š;‰=Œ=˜FÐ"Ð"ØˆHõ ! Ñ#Ô#ñ B	Ý˜QŸ\š\™^œ^­_Ñ=Ô=ð (Ø—L’L‘N”NÔ'�õ ˜QŸ\š\™^œ^­_Ñ=Ô=ð (å˜!Ÿ,š,™.œ.­.Ñ9Ô9ð ?Øð #õ *ØØ#Ø(-õ
  BÀ!ÀUÑKÔKð'Õ,Ý !¤Ô 0× ;Ò ;¸A¿LºL¹N¼NÔ<QÑ RÔ Rñô ð ð "'à&3ðñ ô ð ð �Hõ *ØØ#Ø(-Ø%)Ø&3Ø&3ðñ ô ð ð �HÝ˜AŸLšL™NœN­KÑ8Ô8ð ØðØŸ<š<™>œ>×;Ò;¸EÑBÔBðð "ðõ 2Ø% q§|¢|¡~¤~Ô'<¸a¿jºj¹l¼lñô ð	ð �Ý˜AŸLšL™NœNÕ,FÑGÔGñ Ý˜aŸlšl™nœn×8Ò8Ñ:Ô:½NÑKÔKð Ý(Øbñô ð õ   §¢¡¤× :Ò :Ñ <Ô <½kÑJÔJð ØðØ Ÿ|š|™~œ~×9Ò9Ñ;Ô;×MÒMÈeÑTÔTðð &ðõ 6Ø)ØŸLšL™NœN×6Ò6Ñ8Ô8Ô?ØŸJšJ™LœLñô ð	ð �Hõ �a�Ñ%Ô%ð 		Øð		Ø—|’|‘~”~×7Ò7¸Ñ>Ô>ð		ð ð		õ .Ø! 1§<¢<¡>¤>Ô#8¸!¿*º*¹,¼,ñô ð			ð ˆHå�q�)Ñ$Ô$ð	å˜1œ6¥8Ñ,Ô,ð	õ ˜qœv¥Ñ7Ô7ð	õ & a§m¢m¡o¤oÑ6Ô6ð		õ
 ˜qŸ}š}™œÔ3Õ5FÑGÔGð	ðØ×8Ò8¸¼Ñ@Ô@�”Øð Ø×3Ò3Ø˜5°ð 4ñ ô ð ð #ð Ø×4Ò4Ø˜=¸ð 5ñ ô ð ðøõ 'ð ð ð Ø�ðøøøð �NŠN˜1ÑÔˆÝØØØ!ØØ'Ø'ð	
ñ 	
ô 	
ð 	
ð ð 	@Ý5°a¸Ñ?Ô?Ð?Ð?Ð?Øˆs   Ð8Q- ÑQ- Ñ-
Q:Ñ9Q:c                ó2   — |                       |||¬¦  «        S )N)r´  r¨  ©rµ  )rO  rÒ   r´  r¨  s       rƒ   r´  z"ExternKernel.require_exact_strides  s&   € à×"Ò"Ø˜]¸-ð #ñ 
ô 
ð 	
r„   c                ó2   — |                       |||¬¦  «        S )N)r“   r¨  r·  )rO  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                óº   — |                       |t          t          t          t	          |                     ¦   «         ¦  «        ¦  «        ¦  «        ¦  «        ¦  «        S r�   )r³  rp   rq  r¡   r    rë   r  s     rƒ   Úrequire_contiguouszExternKernel.require_contiguous$  s@   € à×'Ò'¨­4µ½½sÀ1Ç:Â:Á<Ä<Ñ?PÔ?PÑ9QÔ9QÑ0RÔ0RÑ+SÔ+SÑTÔTÐTr„   c                ó   — d S r�   r…   r!  s    rƒ   re  zExternKernel.apply_constraint(  r   r„   c                óö  — t          |t          t          f¦  «        sJ ‚t          |t          ¦  «        r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‡   rŒ  )
ro   rp   rq   rI  r    r<  r=  rH  r¡   r&  )r  r‹   r�   Ún_argsÚ
n_pos_argsrœ   Úarg_names          rƒ   Úfill_non_provided_argsz#ExternKernel.fill_non_provided_args+  s  € õ ˜$¥¥u Ñ.Ô.Ð.Ð.Ð.Ý�d�EÑ"Ô"ð 	Ý˜‘:”:ˆDØÔ"ÐUÐUÐ$UÑUÔUÐ"å�T‘”ˆÝ˜Ô,Ñ-Ô-ˆ
ð �JÒÐÝ�IŠIð^àÔ Ø˜VÑ#ñ	ô ð õ ˜6 :Ñ.Ô.ð ð �ØÔ.¨qÔ1°&Ô9�Ø—’à 6Ð)Ð)ð ˜8Ô$Ð$àÔ,¨QÔ/°Ô@ñô ð ð ð
 ˆr„   r4  r  c                óØ  — t           j        j        �r0g }d }|rG| j        r@t	          | j        ¦  «        t	          |¦  «        k    s
J d¦   «         ‚d„ | j        D ¦   «         }t          | j        ¦  «        D ]Ì\  }}|�5|                     ||         ¦  «        }|r|                     d¦  «        nd }nXt	          | j        ¦  «        |z   }| j        r8|t	          | j        ¦  «        k     r | j        |                              d¦  «        nd }| 	                    t           j        j
                             ||¦  «        ¦  «         ŒÍ|S t          t           j        j
        j        | j        ¦  «        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>Y  s1   € ð *ð *ð *Ø-0�C—G’G˜F‘O”O Sð*ð *ð *r„   r€   )rY   rè   rq  rI  r    rC  rÇ   rŠ  r   r&  r  Úval_to_arg_strrE  )	r  r4  rù  Úname_to_arg_propertiesrœ   rÒ   ÚpropÚtype_rÁ   s	            rƒ   Úcodegen_const_argszExternKernel.codegen_const_argsM  s”  € ÝŒ7Ôñ 	PØˆFð
 &*Ð"Øð ˜Ô,ð Ý˜4Ô-Ñ.Ô.µ#Øñ3ô 3ò ð ð àYñô ð ð*ð *Ø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å•q”wÔ+Ô:¸DÔ<NÑOÔOÐOr„   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€   )rY   rè   rq  rH  rÄ  r   rC  r�   rÇ   rI  r    rŠ  r&  r  rÈ  r€  rÌ  )r  r   Úneed_codegen_constant_argsr‹   rœ   rÒ   rË  s          rƒ   Úcodegen_argszExternKernel.codegen_argsm  se  € ÝŒ7Ôð 		. 4Ô#3Ð#?à×0Ò0Ø3�$”+Ð3 Ô 2Ð3°T´[ñô ˆFð */Ð&Ð&à”[ˆFØ)-Ð&àˆÝ˜fÑ%Ô%ð 	Dð 	D‰DˆAˆqÝŒwÔ"ð DØÔ*ð C¨qµ3ØÔ'ñ4ô 4ò 0ð 0ð 0àBñ0ô 0ð ð Ô+¨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„   c                ó  — || j         v r| j                              |¦  «        S | j        rG| j                             |¦  «        r-| j                             |¦  «                             d¦  «        S t          |› d�¦  «        ‚)NrŒ  z not in self.allarg_properties)r�   rŠ  rb  rÉ  )r  rÃ  s     rƒ   Úget_kwargs_valuezExternKernel.get_kwargs_value‡  s„   € Ø�t”{Ð"Ð"Ø”;—?’? 8Ñ,Ô,Ð,ØÔ!ð 	N dÔ&<×&@Ò&@ÀÑ&JÔ&Jð 	NØÔ)×-Ò-¨hÑ7Ô7×;Ò;¸OÑLÔLÐLå  HÐ!LÐ!LÐ!LÑMÔMÐMr„   c                óT  — t           j        j        ró| j        �t	          | j        ¦  «        dk    rg S g }| j        D ]Ç}|r|dk    rŒ|                      |¦  «        }t          |t          j
        ¦  «        r|                     |¦  «         ŒP| j        r6|| j        v r-| j                             |¦  «                             d¦  «        nd }|                     t           j        j                             ||¦  «        ¦  «         ŒÈn#d„ | j                             ¦   «         D ¦   «         }|S )Nr   rÏ   r€   c                óf   — g | ].\  }}|› d t           j        j                             |¦  «        › �‘Œ/S r8  ©rY   rè   r  rÈ  )r›   ÚkrV  s      rƒ   rž   z/ExternKernel.codegen_kwargs.<locals>.<listcomp>¦  sM   € ð ð ð á�A�qð Ð?Ð?•q”wÔ+×:Ò:¸1Ñ=Ô=Ð?Ð?ðð ð r„   )rY   rè   rq  rH  r    rc  rG  rÑ  ro   rz   r   r&  rb  rŠ  r  rÈ  r�   rb  )r  Úskip_outr�   rÃ  rV  rË  s         rƒ   Úcodegen_kwargszExternKernel.codegen_kwargs�  sL  € ÝŒ7Ôð 	ØÔÐ+µ°DÔ4FÑ0GÔ0GÈ1Ò0LÐ0Là�	àˆFØ Ô>ð Qð Q�Øð  ¨EÒ 1Ð 1àà×)Ò)¨(Ñ3Ô3�Ý˜a¥¤Ñ,Ô,ð QØ—M’M !Ñ$Ô$Ð$Ð$ð  Ô1ð"Ø6>À$ÔBXÐ6XÐ6Xð Ô.×2Ò2°8Ñ<Ô<×@Ò@ÀÑHÔHÐHà!ð ð
 —M’M¥!¤'Ô"6×"EÒ"EÀaÈÑ"OÔ"OÑPÔPÐPÐPðQð ð à œK×-Ò-Ñ/Ô/ðñ ô ˆFð ˆr„   c           	     óÐ  — t           j        r×t          j        j        sÈt          |                      ¦   «         ¦  «        dk    rd S t          j        j                             |                      ¦   «         ¦  «        }t          j        j                             |  	                    ¦   «         ¦  «        }| 
                    d|                      ¦   «         › d|› d|› d�¦  «         d S d S d S )Nr   zassert_size_stride(rÐ  r   )r8   Úsize_assertsrY   rè   rq  rU   rë   r  Úcodegen_shape_tupler�  r  r”  )r  rg  rä   rå   s       rƒ   Úcodegen_size_assertsz!ExternKernel.codegen_size_asserts¬  s×   € ÝÔð 	¥q¤wÔ':ð 	å˜TŸ]š]™_œ_Ñ-Ô-°Ò2Ð2Ø�Ý”7Ô'×;Ò;¸D¿MºM¹O¼OÑLÔLˆDÝ”WÔ)×=Ò=¸d¿oºoÑ>OÔ>OÑPÔPˆFØ×ÒØJ d§m¢m¡o¤oÐJÐJ¸ÐJÐJÀÐJÐJÐJñô ð ð ð ð	ð 	ð 	ð 	r„   c                ó^   — |                       ¦   «         }|                      ¦   «         }|g g|fS )zD
        get output sizes and strides, for template_codegen
        )rë   r�  )r  Ú_sizeÚ_strides      rƒ   Úget_group_stridezExternKernel.get_group_stride·  s/   € ð —’‘”ˆØ—/’/Ñ#Ô#ˆà�rˆ{˜GÐ#Ð#r„   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'   ø€ Ð:Ð:Ð:¨Q�8×%Ò% aÑ(Ô(Ð:Ð:Ð:r„   c                ó2   — g | ]}t          d |› �¦  «        ‘ŒS )Úd)rS   re  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„   )rY   rè   ré   rë   r�  r¡   r    r$  rº  rÇ   r�  rt  r@   rr   r¤   rV   rz   rd  rq   )r  rª  rP  Úindex_orderr“   r‹  r—   Ú	new_sizesr¢   ry  rÎ   Úreplacementré  r\  rÆ   ré   s               @@@@rƒ   ÚcanonicalizezExternKernel.canonicalizeÀ  s¨  øøøø€ õ
 ”7Ô#ˆØ—’‘”ˆØ—/’/Ñ#Ô#ˆØ:Ð:Ð:Ð:°'Ð:Ñ:Ô:ˆà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ˆ
Ø×#Ò#Ñ%Ô%ˆØ�˜
Ñ#Ô#ˆå$%¤GÔ$4×$DÒ$DØ˜ ˜wñ%
ô %
Ñ!ˆ	�7˜Eõ ! Ñ%Ô%‰
ˆˆ7Ý�3˜z¨7¨7Ð3RÐ3RÐ3RÐ3RÈ	Ð3RÑ3RÔ3RÑ+SÔ+SÑTÔTÑUÔUˆå�5œ<¨Ñ.Ô.°Ñ<Ô<ˆØ•e˜IÑ&Ô&Ð&Ð&r„   c                ó¶   — t          ¦   «         }| j        D ]}|t          |¦  «        z  }Œ| j                             ¦   «         D ]}|t          |¦  «        z  }Œ|S r�   )r2   rC  Úmaybe_free_unbacked_symbolsr�   rs   )r  rQ  r'  s      rƒ   rÆ  z%ExternKernel.get_unbacked_symbol_usesß  sk   € õ '1¡l¤lˆØÔ%ð 	2ð 	2ˆCØÕ,¨SÑ1Ô1Ñ1ˆAˆAØ”;×%Ò%Ñ'Ô'ð 	2ð 	2ˆCØÕ,¨SÑ1Ô1Ñ1ˆAˆAØˆr„   rˆ   c                óÜ   ‡ — t          ‰ dd ¦  «        }d|›�g}|ˆ fd„t          j        ‰ ¦  «        D ¦   «         z  }|                     d‰ j        ›�¦  «         ‰                      |¦  «        S )NrE  zpython_kernel_name=c                óN   •— g | ]!}|j         › d t          ‰|j         ¦  «        › �‘Œ"S r8  )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  rI  )r  Úkernel_namer@  s   `  rƒ   rD  zExternKernel.__str__é  s–   ø€ Ý˜dÐ$8¸$Ñ?Ô?ˆà1 +Ð1Ð1ð
ˆð 	ð 
ð 
ð 
ð 
å$Ô+¨DÑ1Ô1ð
ñ 
ô 
ñ 	
ˆð 	�ŠÐ8 DÔ$4Ð8Ð8Ñ9Ô9Ð9Ø�Š˜uÑ%Ô%Ð%r„   ©r…   NNNNr…   NrÙ  r&  r'  r�   ©rF  rý   rj   rk   )rE  rý   rj   rk   )rj   r}  )NNF)r“   r°  r´  rc  rï  )r4  r  rë  )7r  rü  rý  rC  rþ  rÿ  r   rr   r�   rD  rE  rF  rp   rG  rH  rI  rJ  rK  rL  rÇ  r  r!  rQ  r(  rj  rm  rO  rP  rz  r  r|  ry  r¢  rª  rã  r¯  rµ  r´  r³  rº  r¼  r¾  re  rÄ  rÌ  rÏ  rÑ  r×  rÛ  rß  rí  rÆ  rD  rx  r{  r|  s   @rƒ   râ  râ    sd  ø€ € € € € € à%'€MÐ'Ð'Ð'Ñ'Ø.˜[Ô.¸tÐDÑDÔD€FÐDÐDÐDÑDØ-1€KÐ1Ð1Ð1Ñ1Ø(,ÐÐ,Ð,Ð,Ñ,Ø%)€OÐ)Ð)Ð)Ñ)ð 4E°;Ô3DØð4ñ 4ô 4Ð!ð ð ð ñ ð
 	ð ð ð ð ñ ð 6:€NÐ9Ð9Ð9Ñ9Ø<@ÐÐ@Ð@Ð@Ñ@Ø<M¸KÔ<MØð=ñ =ô =Ðð ð ð ñ ð .?¨[Ô->ÈtÐ-TÑ-TÔ-TÐÐTÐTÐTÑTð ØØØØØ&(Øð,ð ,ð ,ð ,ð ,ð ,ð ,ð<.ð .ð .ð .ðð ð ð ð!ð !ð !ðF!ð !ð !ð
*ð *ð *ð *ð
"ð "ð "ð;ð ;ð ;ð ;ð ;ð0ð ð ð ð
ð 
ð 
ð ð
ð 
ñ „\ð
ð ð^
ð ^
ð ^
ñ „[ð^
ð@ ðA
ð A
ñ „[ðA
ðF ð!ð !ñ „[ð!ð@ ð!ð !ñ „[ð!ð ð *.Ø6:Øð{ð {ð {ð {ñ „[ð{ðz ð
ð 
ð 
ñ „[ð
ð
 ðPð Pð Pñ „[ðPð ð>ð >ñ „[ð>ð ð?ð ?ñ „[ð?ð ðUð Uñ „[ðUðð ð ð ð ð  ð  ðDPð Pð Pð Pð Pð@ð ð ð4Nð Nð 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 )ÚExternKernelOutrj   rk   c                óª  — |                       |¦  «         g |                      ¦   «         ¢|                      d¬¦  «        ¢}|                      ¦   «         }t          j        j        r| j        dk    rd}n|                      ¦   «         }|                     ||  	                    ¦   «         | j
        r| j
         	                    ¦   «         nd |¦  «         d S )NT)rÖ  ztorch::inductor::_mm_plus_mmÚaoti_torch__mm_plus_mm_out)rj  rÏ  r×  rz  rY   rè   rq  rF  Úgenerate_extern_kernel_outrz  rD  )r  rg  r‹   ró  s       rƒ   rm  zExternKernelOut.codegenú  sß   € Ø×Ò˜WÑ%Ô%Ð%ØJ�×"Ò"Ñ$Ô$ÐJ t×':Ò':ÀDÐ':Ñ'IÔ'IÐJˆØ×*Ò*Ñ,Ô,ˆåŒGÔð	1àÔ$Ð(FÒFÐFð 7ˆKˆKà×.Ò.Ñ0Ô0ˆKØ×*Ò*ØØ×"Ò"Ñ$Ô$Ø48Ô4DÐNˆDÔ×.Ò.Ñ0Ô0Ð0È$Øñ		
ô 	
ð 	
ð 	
ð 	
r„   r…   Nc
                ó  •— t          ¦   «                              d ||                      |¦  «        ||pi d ||||	¦
  «
         t          j                             | ¦  «        | _        t          j                             | ¦  «         d S r�   )r>  rÇ  r¥  rY   rè   r¦  r‡   r§  )r  r  r   rC  r�   rD  rE  rF  rG  rH  r@  s             €rƒ   rÇ  zExternKernelOut.__init__  s†   ø€ õ 	‰Œ×ÒØØØ×Ò Ñ'Ô'ØØˆL�bØØØØ)Øñ	
ô 	
ð 	
õ ”G×+Ò+¨DÑ1Ô1ˆŒ	Ý	Œ×"Ò" 4Ñ(Ô(Ð(Ð(Ð(r„   rÕ   c                ó   — dS rš  r…   r!  s    rƒ   r!  zExternKernelOut.should_allocate(  r8  r„   rÙ  rô  rá  )r  rü  rý  rm  rÇ  r!  r{  r|  s   @rƒ   r÷  r÷  ø  s�   ø€ € € € € ð
ð 
ð 
ð 
ð. ØØØØØ&(Øð)ð )ð )ð )ð )ð )ð )ð6ð ð ð ð ð ð ð r„   r÷  c                  ó    ‡ — e Zd Zdˆ fd„Zˆ xZS )	ÚRandomSeedsÚcountr~   rç   r}  rj   rk   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)r  r   rC  rE  rF  rH  )rt   rˆ  rg  r>  rÇ  rj  r©  ri  ro  ÚrandintÚlow_out)r  rÿ  rç   Úlimitsr@  s       €rƒ   rÇ  zRandomSeeds.__init__-  sƒ   ø€ Ý”�Uœ[Ñ)Ô)ˆÝ‰Œ×ÒÝØÝ”kØ�Wðñ ô ð
 Ø!œ: v¤z°E°7Ð;Ø5ð >ÝœÔ,ð 	ñ 	
ô 	
ð 	
ð 	
ð 	
r„   )rÿ  r~   rç   r}  rj   rk   r  r|  s   @rƒ   rþ  rþ  ,  s=   ø€ € € € € ð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
r„   rþ  c                  óD   ‡ — e Zd Zd
d„Z	 	 	 	 	 	 dd
ˆ fd„Zdd„Zd	„ Zˆ xZS )r=  rj   rk   c                ó0  — |                       |¦  «         g |                      ¦   «         ¢|                      ¦   «         ¢}t          j        j                             | |¦  «         t          | j        t          ¦  «        r|  
                    |¦  «         d S d S r�   )rj  rÏ  r×  rY   rè   r  Úgenerate_extern_kernel_allocro   r  rR  rÛ  ©r  rg  r‹   s      rƒ   rm  zExternKernelAlloc.codegenA  s�   € Ø×Ò˜WÑ%Ô%Ð%Ø=�×"Ò"Ñ$Ô$Ð= t×':Ò':Ñ'<Ô'<Ð=ˆÝ	ŒÔ×9Ò9¸$ÀÑEÔEÐEÝ�d”k¥6Ñ*Ô*ð 	/Ø×%Ò% gÑ.Ô.Ð.Ð.Ð.ð	/ð 	/r„   r…   Nc	                ó  •— t          ¦   «                              d ||                      |¦  «        ||pi d ||||¦
  «
         g | _        t          j                             | ¦  «        | _        t          j                             | ¦  «         d S r�   )	r>  rÇ  r¥  r¾  rY   rè   r¦  r‡   r§  )
r  r  r   rC  r�   rE  rF  rG  rH  r@  s
            €rƒ   rÇ  zExternKernelAlloc.__init__H  s�   ø€ õ 	‰Œ×ÒØØØ×Ò Ñ'Ô'ØØˆL�bØØØØ)Øñ	
ô 	
ð 	
ð ')ˆŒÝ”G×+Ò+¨DÑ1Ô1ˆŒ	Ý	Œ×"Ò" 4Ñ(Ô(Ð(Ð(Ð(r„   rÕ   c                ó   — dS rƒ  r…   r!  s    rƒ   r!  z!ExternKernelAlloc.should_allocatef  r…  r„   c                ó   — t           ‚r�   r  r!  s    rƒ   re  z"ExternKernelAlloc.apply_constrainti  r  r„   rÙ  )r…   NNNr…   Nrá  )r  rü  rý  rm  rÇ  r!  re  r{  r|  s   @rƒ   r=  r=  @  s�   ø€ € € € € ð/ð /ð /ð /ð ØØØØ&(Øð)ð )ð )ð )ð )ð )ð )ð<ð ð ð ð"ð "ð "ð "ð "ð "ð "r„   r=  c                  ó:   ‡ — e Zd ZdZdˆ fd„Zdd„Zd„ Zdd
„Zˆ xZS )r½  zP
    An output buffer that represents the mutation of a pre-existing buffer
    Úmutating_noder  rj   rk   c                ó  •— t          ¦   «                              d |¬¦  «         |                     ¦   «         }t          j                             |¦  «         |g| _        || _        t          j                             | ¦  «        | _	        d S r2  )
r>  rÇ  r”  rY   rè   rè  Úmutation_namesr  r¦  r‡   )r  r  Úmutated_noder  Úmutated_node_namer@  s        €rƒ   rÇ  zMutationOutput.__init__r  sw   ø€ Ý‰Œ×Ò˜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�   )r  r!  s    rƒ   r7  zMutationOutput.get_defining_opz  s   € ØÔ!Ð!r„   c                ó   — | j         S r�   )r  r!  s    rƒ   rÓ  z!MutationOutput.get_mutation_names}  rñ  r„   rÕ   c                ó   — dS rƒ  r…   r!  s    rƒ   r!  zMutationOutput.should_allocate€  r…  r„   )r  r  rj   rk   r'  rá  )	r  rü  rý  r  rÇ  r7  rÓ  r!  r{  r|  s   @rƒ   r½  r½  m  s~   ø€ € € € € ðð ð2ð 2ð 2ð 2ð 2ð 2ð"ð "ð "ð "ð#ð #ð #ðð ð ð ð ð ð ð r„   r½  c                  ó\   ‡ — e Zd ZU dZi Zded<   e	 ddd„¦   «         Z	 ddˆ fd„Zdd„Z	ˆ xZ
S )ÚTMADescriptora$  
    An IR node representing a host-side TMA descriptor in the Triton API
    (the ones obtained via create_{1d,2d}_tma_descriptor calls). Mostly
    useful for user-defined Triton kernels relying on host-side TMA; but
    can, in principle, be used for Inductor's Triton templates, too.
    zDict[Any, TMADescriptor]Ú_CACHENr­  rf   r¨  úList[Union[int, torch.SymInt]]Ú
block_dimsÚelement_sizer˜  c                óˆ   — t          |¦  «        |||f}|| j        vrt          ||||¦  «        | j        |<   | j        |         S r�   )Úidr  r  )rO  r­  r¨  r  r  r  s         rƒ   rN  zTMADescriptor.create�  sJ   € õ �&‰zŒz˜4 ¨\Ð:ˆØ�c”jÐ Ð Ý+¨F°D¸*ÀlÑSÔSˆCŒJ�s‰OØŒz˜#ŒÐr„   rj   rk   c           
     óŒ  •— t          |¦  «        dv sJ ‚t          |¦  «        t          |¦  «        k    sJ ‚|€|                     ¦   «         j        }|| _        || _        || _        || _        t          | j        ¦  «        | _        |g}g | j        ¢| j        ¢| j        ‘}t          ¦   «          	                    d t          t          ||                     ¦   «         ¬¦  «        ¦  «        |t          |¦  «        d ¦  «         t          j                             | ¦  «        | _        t          j                             | ¦  «         d S )N)r7   r´   rš  )r    rð   r\  r­  r¨  r  r  r“  r>  rÇ  rÆ  rW  rí   rq   rY   rè   r¦  r‡   r§  )r  r­  r¨  r  r  r   rC  r@  s          €rƒ   rÇ  zTMADescriptor.__init__�  sJ  ø€ õ �4‰yŒy˜FÐ"Ð"Ð"Ð"Ý�4‰yŒy�C 
™OœOÒ+Ð+Ð+Ð+àÐØ!×+Ò+Ñ-Ô-Ô6ˆLàˆŒØˆŒ	Ø$ˆŒØ(ˆÔÝ˜œ	‘N”NˆŒ	à�ˆð
ØŒYð
àŒ_ð
ð Ôð
ˆõ 	‰Œ×ÒØõ ÝØØ!×,Ò,Ñ.Ô.ðñ ô ñô ð Ý�-Ñ Ô Øñ	
ô 	
ð 	
õ  ”G×+Ò+¨DÑ1Ô1ˆŒ	Ý	Œ×"Ò" 4Ñ(Ô(Ð(Ð(Ð(r„   c                ó0   — |                      | ¦  «         d S r�   )Úgenerate_tma_descriptorrl  s     rƒ   rm  zTMADescriptor.codegenÊ  ó   € Ø×'Ò'¨Ñ-Ô-Ð-Ð-Ð-r„   r�   )r­  rf   r¨  r  r  r  r  r˜  )
r­  rf   r¨  r  r  r  r  r˜  rj   rk   rÙ  )r  rü  rý  r  r  rþ  ry  rN  rÇ  rm  r{  r|  s   @rƒ   r  r  „  s£   ø€ € € € € € ðð ð (*€FÐ)Ð)Ð)Ñ)àð '+ð
ð 
ð 
ð 
ñ „[ð
ð" '+ð+)ð +)ð +)ð +)ð +)ð +)ð +)ðZ.ð .ð .ð .ð .ð .ð .ð .r„   r  c                  óR   ‡ — e Zd Zd„ Zdd„Zdˆ fd„Zdd„Zdˆ fd„Zdd
„Zdd„Z	ˆ xZ
S )ÚUserDefinedTritonKernelc                ó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œ   r3  s     €rƒ   r)  zBUserDefinedTritonKernel.get_kernel_and_metadata.<locals>.<genexpr>Ü  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_idxro   r  r€  r%  r(  r)  r&  r‘   r'  r*  Úconfigs)r  r#  r$  r/  Úrestore_value_argsÚreset_to_zero_argsrœ   r3  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„   rj   rk   c                óÊ  ‡ ‡‡— ‰                       ¦   «         \  }}}}|                     ||‰ j        ||¦  «        \  }}ˆ fd„‰ j        D ¦   «         }g }	t	          ‰ j        ¦  «        D ];\  }
}|j                             |¦  «        |j        v r|	                     |
¦  «         Œ<	 t          |	¦  «        Št          ¦   «         Šˆˆfd„t	          |¦  «        D ¦   «         }ˆfd„|D ¦   «         }ˆfd„|D ¦   «         }|r´t          |d         d         j        ¦  «        }g }	g }d}t	          ‰ j        ¦  «        D ]f\  }
}|
|v r|dz  }Œ|j                             |¦  «        }||j        v r|	                     |
|z
  ¦  «         ||v r|                     |
|z
  ¦  «         Œg||d         d         _        ‰                      |¦  «         |                     ||‰ j        |||	¦  «         d S )Nc                ó:   •— g | ]}‰                      |¦  «        ‘ŒS r…   )rÑ  )r›   rÕ  r  s     €rƒ   rž   z3UserDefinedTritonKernel.codegen.<locals>.<listcomp>ú  s4   ø€ ð 
ð 
ð 
Ø)*ˆD×!Ò! !Ñ$Ô$ð
ð 
ð 
r„   c                ó6   •— g | ]\  }}|€|€|‰v r||fn|‰f‘ŒS r�   r…   )r›   rÁ   r'  ÚREMOVEDÚconstexpr_indices_sets      €€rƒ   rž   z3UserDefinedTritonKernel.codegen.<locals>.<listcomp>  sR   ø€ ð 
ð 
ð 
ñ ��Sð �O¨¨¸Ð@UÐ9UÐ9Uð �c�
�
à˜7�^ð	
ð 
ð 
r„   c                ó&   •— g | ]\  }}|‰k    ¯|‘ŒS r…   r…   ©r›   rÁ   rm  r6  s      €rƒ   rž   z3UserDefinedTritonKernel.codegen.<locals>.<listcomp>  s"   ø€ ÐLÐLÐL¡X S¨#¸SÀGº^¸^˜S¸^¸^¸^r„   c                ó&   •— g | ]\  }}|‰k    ¯|‘ŒS r…   r…   r9  s      €rƒ   rž   z3UserDefinedTritonKernel.codegen.<locals>.<listcomp>  s"   ø€ ÐCÐCÐC™H˜C °C¸7²N°N�C°N°N°Nr„   r/  r   r7   )r2  Ú!define_user_defined_triton_kernelr�   rG  rÇ   r'  r—   Ú
constexprsr&  ÚsetrŒ   Ú
equal_to_1rj  Ú#generate_user_defined_triton_kernelÚgrid)r  rg  r3  r/  r0  r1  Únew_nameÚtriton_metaÚraw_argsÚconstexpr_indicesrÁ   ÚkwargÚremoved_none_argsÚeq1_indices_setr>  Úindex_shiftÚ	arg_indexr6  r7  s   `                @@rƒ   rm  zUserDefinedTritonKernel.codegenî  s�  øøø€ ð ×(Ò(Ñ*Ô*ñ	
ØØØØð !(× IÒ IØ�G˜Tœ[Ð*<Ð>Pñ!
ô !
Ñˆ�+ð
ð 
ð 
ð 
Ø.2Ô.Pð
ñ 
ô 
ˆð ÐÝ# DÔ$FÑGÔGð 	.ð 	.‰JˆC�ØÔ×%Ò% eÑ,Ô,°Ô0AÐAÐAØ!×(Ò(¨Ñ-Ô-Ð-øð	õ !$Ð$5Ñ 6Ô 6ÐÝ‘(”(ˆð
ð 
ð 
ð 
ð 
õ & hÑ/Ô/ð
ñ 
ô 
ˆð MÐLÐLÐL°ÐLÑLÔLÐØCÐCÐCÐC¨ÐCÑCÔCˆð ð 	>Ý! +¨iÔ"8¸Ô";Ô"FÑGÔGˆOØ "ÐØˆJØˆKÝ'¨Ô(JÑKÔKð 9ð 9‘
��Uð Ð+Ð+Ð+Ø 1Ñ$�KØØ"Ô,×2Ò2°5Ñ9Ô9�	Ø Ô 1Ð1Ð1Ø%×,Ò,¨S°;Ñ->Ñ?Ô?Ð?Ø Ð/Ð/Ø×%Ò% c¨KÑ&7Ñ8Ô8Ð8øà3=ˆK˜	Ô" 1Ô%Ô0ð 	×Ò˜WÑ%Ô%Ð%Ø×3Ò3ØØØŒIØØØñ	
ô 	
ð 	
ð 	
ð 	
r„   r  c                ón   •— t          ¦   «                              ¦   «         t          | j        ¦  «        z  S r�   )r>  rÆ  r,   r@  r?  s    €rƒ   rÆ  z0UserDefinedTritonKernel.get_unbacked_symbol_uses?  s+   ø€ õ ‰wŒw×/Ò/Ñ1Ô1Õ4IÈ$Ì)Ñ4TÔ4TÑTÐTr„   c                ó   — t          ¦   «         S r�   r1   r!  s    rƒ   r!  z0UserDefinedTritonKernel.get_unbacked_symbol_defsD  r"  r„   c               óâ  •‡ ‡— g }i }g }‰                      ¦   «         D ]˜\  }}	t          |	t          ¦  «        rdt                               ‰                      |	¦  «        ¦  «        }
||v rt          j        |
g||         ¢R Ž }
|                     |
¦  «         |
||<   Œ~|                     |	¦  «         |	||<   Œ™t          |¦  «        dk    sJ ‚|d          
                    ¦   «         ‰ _        t          ¦   «                              d t          ‰ j        ¬¦  «        |t          |¦  «        |¦  «         |‰ _        |‰ _        ‰                      ¦   «         \  }}}}ˆfd„|j        D ¦   «         ‰ _        ddlm} t          |¦  «        dk    r|d         j        ni }ˆfd„ ||i ‰¥|¥¦  «        D ¦   «         ‰ _        ˆ fd„‰ j        D ¦   «         ‰ _        t4          j                             ‰ ¦  «         d S )Nr   rF  c                ó   •— g | ]}|‰v ¯|‘Œ	S r…   r…   )r›   r'  Úkernel_argss     €rƒ   rž   z4UserDefinedTritonKernel.__init__.<locals>.<listcomp>f  s*   ø€ ð .
ð .
ð .
Ø¨s°kÐ/AÐ/AˆCÐ/AÐ/AÐ/Ar„   )Úidentify_mutated_tensorsc                ó    •— g | ]
}‰|         ‘ŒS r…   r…   )r›   r  rN  s     €rƒ   rž   z4UserDefinedTritonKernel.__init__.<locals>.<listcomp>m  s.   ø€ ð 
ð 
ð 
àð ˜Ôð
ð 
ð 
r„   c                óX   •— g | ]&}t          t          ‰j        ¬ ¦  «        |‰¦  «        ‘Œ'S r»  )r½  rÛ  rç   )r›   r-  r  s     €rƒ   rž   z4UserDefinedTritonKernel.__init__.<locals>.<listcomp>t  sB   ø€ ð !
ð !
ð !
àõ �:¨T¬[Ð9Ñ9Ô9¸3ÀÑEÔEð!
ð !
ð !
r„   )rb  ro   re   r¤  r  rã  r  rN  r&  r    rñ   rç   r>  rÇ  rÛ  rq   r.  r@  r2  r'  rG  r,  rO  r�   Úmutable_argsrL  rY   rè   r§  )r  r.  r@  Útma_descriptor_metadatarN  r   r�   rC  rÕ  rV  rõ   r3  r/  rÎ   rO  Úautotuned_kwargsr@  s   `   `           €rƒ   rÇ  z UserDefinedTritonKernel.__init__G  s^  øøø€ ØˆØˆØˆØ×%Ò%Ñ'Ô'ð 		ð 		‰DˆAˆqÝ˜!�YÑ'Ô'ð Ý ×9Ò9¸$×:LÒ:LÈQÑ:OÔ:OÑPÔP�ØÐ/Ð/Ð/Ý%Ô,¨QÐLÐ1HÈÔ1KÐLÐLÐL�AØ—’˜aÑ Ô Ð Ø��q‘	�	à×$Ò$ QÑ'Ô'Ð'Ø��q‘	�	å�6‰{Œ{˜aÒÐÐÐØ˜Q”i×*Ò*Ñ,Ô,ˆŒå‰Œ×ÒØÝ˜dœkÐ*Ñ*Ô*ØÝ�-Ñ Ô Øñ	
ô 	
ð 	
ð %ˆŒØˆŒ	à $× <Ò <Ñ >Ô >Ñˆ�˜˜Að.
ð .
ð .
ð .
Ø!Ô+ð.
ñ .
ô .
ˆÔ*ð 	XÐWÐWÐWÐWÐWå03°G±´¸qÒ0@Ð0@˜7 1œ:Ô,Ð,ÀbÐð
ð 
ð 
ð 
à/Ð/ØÐ;˜;Ð;Ð*:Ð;ñô ð
ñ 
ô 
ˆÔð!
ð !
ð !
ð !
àÔ(ð!
ñ !
ô !
ˆÔõ 	
Œ×"Ò" 4Ñ(Ô(Ð(Ð(Ð(r„   r  c                ó*   — t          | j        ¦  «        S r�   )rp   rL  r!  s    rƒ   r  z#UserDefinedTritonKernel.get_outputsz  s   € Ý�DÔ)Ñ*Ô*Ð*r„   r{  c                ó   — | j         S r�   rF  r!  s    rƒ   rñ   z"UserDefinedTritonKernel.get_device}  rG  r„   rÙ  r'  r&  ræ  )r  rü  rý  r2  rm  rÆ  r!  rÇ  r  rñ   r{  r|  s   @rƒ   r!  r!  Î  sÉ   ø€ € € € € ðGð Gð Gð>O
ð O
ð O
ð O
ðbUð Uð Uð Uð Uð Uð
ð ð ð ð1)ð 1)ð 1)ð 1)ð 1)ð 1)ðf+ð +ð +ð +ðð ð ð ð ð ð ð r„   r!  c                  óB   ‡ — e Zd ZdZdd„Zdd„Z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
    rj   rk   c                óÚ  — 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  — | ]}|                      ¦   «         V — Œd S r�   ©rz  ©r›   rõ   s     rƒ   r)  z3InplaceBernoulliFallback.codegen.<locals>.<genexpr>‡  s.   è è € Ð;Ð;¨!�×#Ò#Ñ%Ô%Ð;Ð;Ð;Ð;Ð;Ð;r„   rD  rÐ  z, NULL)r   )r   rY   rè   rq  r  rz  rG  rE  ÚreprrC  Úending)r  rg  rÒ   s      rƒ   rm  z InplaceBernoulliFallback.codegen†  s  € Ø;Ð;¨t¬{Ð;Ñ;Ô;‰ˆåŒ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 rƒ  r…   r!  s    rƒ   r!  z(InplaceBernoulliFallback.should_allocate”  r…  r„   c                óB   — | j         d                              ¦   «         gS rn  ©r   r”  r!  s    rƒ   rÓ  z+InplaceBernoulliFallback.get_mutation_names—  ó   € Ø”˜A”×'Ò'Ñ)Ô)Ð*Ð*r„   r  c                ó   — t          ¦   «         S r�   r1   r!  s    rƒ   r!  z1InplaceBernoulliFallback.get_unbacked_symbol_defsš  r"  r„   c                ó¤  •— t          ¦   «                              d t          |                     ¦   «         ¬¦  «        |                      |g¦  «        ||¬¦  «         t
          j                             |                     ¦   «         ¦  «         t
          j         	                    | ¦  «        | _
        t
          j                             | ¦  «         d S )NrF  ©rH  )r>  rÇ  rÛ  rñ   r¥  rY   rè   rè  r”  r¦  r‡   r§  )r  rH  rÒ   rC  r@  s       €rƒ   rÇ  z!InplaceBernoulliFallback.__init__�  s©   ø€ Ý‰Œ×ÒØÝ˜aŸlšl™nœnÐ-Ñ-Ô-Ø×Ò  Ñ$Ô$ØØ#ð 	ñ 	
ô 	
ð 	
õ 	
Œ×#Ò# A§J¢J¡L¤LÑ1Ô1Ð1Ý”G×+Ò+¨DÑ1Ô1ˆŒ	Ý	Œ×"Ò" 4Ñ(Ô(Ð(Ð(Ð(r„   rÙ  rá  r'  ©
r  rü  rý  r  rm  r!  rÓ  r!  rÇ  r{  r|  s   @rƒ   rX  rX  �  s’   ø€ € € € € ðð ðð ð ð ðð ð ð ð+ð +ð +ðð ð ð ð
)ð 
)ð 
)ð 
)ð 
)ð 
)ð 
)ð 
)ð 
)ð 
)r„   rX  c                  ó\   ‡ — e Zd ZdZdd„Zdd„Zd„ Zdd	„Zdˆ fd
„Ze	ddd„¦   «         Z
ˆ xZS )ÚInplaceCopyFallbackrY  rj   rk   c                ód   — |                       ¦   «         \  }}}|                     |||¦  «         d S r�   )rÏ  Úcodegen_device_copy)r  rg  rø  r÷  Únon_blockings        rƒ   rm  zInplaceCopyFallback.codegen°  s8   € Ø#'×#4Ò#4Ñ#6Ô#6Ñ ˆˆc�<Ø×#Ò# C¨¨lÑ;Ô;Ð;Ð;Ð;r„   rÕ   c                ó   — dS rƒ  r…   r!  s    rƒ   r!  z#InplaceCopyFallback.should_allocate´  r…  r„   c                óB   — | j         d                              ¦   «         gS rn  rb  r!  s    rƒ   rÓ  z&InplaceCopyFallback.get_mutation_names·  rc  r„   r  c                ó   — t          ¦   «         S r�   r1   r!  s    rƒ   r!  z,InplaceCopyFallback.get_unbacked_symbol_defsº  r"  r„   c                óJ  •— t          ¦   «                              d |||dd¬¦  «         t          j                             |d                              ¦   «         ¦  «         t          j                             | ¦  «        | _        t          j                             | ¦  «         d S )Nz
aten.copy_Úaoti_torch_copy_)rE  rF  r   )	r>  rÇ  rY   rè   rè  r”  r¦  r‡   r§  )r  r  r   rC  r@  s       €rƒ   rÇ  zInplaceCopyFallback.__init__½  s“   ø€ õ 	‰Œ×ÒØØØØØ+Ø.ð 	ñ 	
ô 	
ð 	
õ 	
Œ×#Ò# F¨1¤I×$6Ò$6Ñ$8Ô$8Ñ9Ô9Ð9Ý”G×+Ò+¨DÑ1Ô1ˆŒ	Ý	Œ×"Ò" 4Ñ(Ô(Ð(Ð(Ð(r„   Frl  c                ó�   ‡ — ˆ fd„||fD ¦   «         }|f}t          t          |                     ¦   «         ¬¦  «        ||¦  «        }|S )Nc                ó:   •— g | ]}‰                      |¦  «        ‘ŒS r…   r�  )r›   rõ   rO  s     €rƒ   rž   z.InplaceCopyFallback.create.<locals>.<listcomp>Ñ  s'   ø€ Ð;Ð;Ð;¨1�#×#Ò# AÑ&Ô&Ð;Ð;Ð;r„   rF  )ri  rÛ  rñ   )rO  rø  r÷  rl  r   rC  rù  s   `      rƒ   rN  zInplaceCopyFallback.createÏ  s[   ø€ à;Ð;Ð;Ð;°°c°
Ð;Ñ;Ô;ˆØ%˜ˆÝ$Ý˜cŸnšnÑ.Ô.Ð/Ñ/Ô/ØØñ
ô 
ˆð
 ˆr„   rÙ  rá  r'  rï  )rl  rÕ   )r  rü  rý  r  rm  r!  rÓ  r!  rÇ  ry  rN  r{  r|  s   @rƒ   ri  ri  «  s·   ø€ € € € € ðð ð<ð <ð <ð <ðð ð ð ð+ð +ð +ðð ð ð ð)ð )ð )ð )ð )ð )ð$ ðð ð ð ñ „[ðð ð ð ð r„   ri  c                  ó8   — e Zd ZdZdd„Zdd„Zd„ Zdd	„Zdd
„ZdS )ÚMutatingFirstArgExternKernelrY  rj   rk   c                óî   — 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„   rD  rÐ  r   )r   rE  r^  rC  r  rz  rG  r_  )r  rg  Úargrefss      rƒ   rm  z$MutatingFirstArgExternKernel.codegenà  s�   € ð
Ø9Ð9¨T¬[Ð9Ñ9Ô9ð
å•�tÔ)Ñ*Ô*ð
ˆð 	×ÒØ×#Ò#Ñ%Ô%ÐMÐM¨¯	ª	°'Ñ(:Ô(:ÐMÐM¸W¼^ÐMÐMñ	
ô 	
ð 	
ð 	
ð 	
r„   rÕ   c                ó   — dS rƒ  r…   r!  s    rƒ   r!  z,MutatingFirstArgExternKernel.should_allocateé  r…  r„   c                óB   — | j         d                              ¦   «         gS rn  rb  r!  s    rƒ   rÓ  z/MutatingFirstArgExternKernel.get_mutation_namesì  rc  r„   r  c                ó   — t          ¦   «         S r�   r1   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ò  r8  r„   NrÙ  rá  r'  )	r  rü  rý  r  rm  r!  rÓ  r!  r}  r…   r„   rƒ   ru  ru  Û  s}   € € € € € ðð ð
ð 
ð 
ð 
ðð ð ð ð+ð +ð +ðð ð ð ðð ð ð ð ð r„   ru  c                  ó    ‡ — e Zd Zdˆ fd„Zˆ xZS )ÚResizeStorageBytesrj   rk   c                ót  •— t          |t          ¦  «        s
J d¦   «         ‚t          ¦   «                              d t	          |                     ¦   «         ¬¦  «        |                      |g¦  «        |f¬¦  «         t          j         	                    | 
                    ¦   «         ¦  «         t          j                             | ¦  «        | _        t          j                             | ¦  «         d| _        d| _        t          j        j                             |j         
                    ¦   «         ¦  «         d S )NzTODO: dynamic shapesrF  )rC  z"inductor_ops.resize_storage_bytes_z&torch::inductor::resize_storage_bytes_)ro   r~   r>  rÇ  rÛ  rñ   r¥  rY   rè   rè  r”  r¦  r‡   r§  rE  rF  Únever_reuse_buffersr¦  r  )r  Úvariabler–  r@  s      €rƒ   rÇ  zResizeStorageBytes.__init__÷  s  ø€ Ý˜(¥CÑ(Ô(Ð@Ð@Ð*@Ñ@Ô@Ð(Ý‰Œ×ÒØÝ˜h×1Ò1Ñ3Ô3Ð4Ñ4Ô4Ø×Ò  
Ñ+Ô+Ø#˜+ð	 	ñ 	
ô 	
ð 	
õ 	
Œ×#Ò# H×$5Ò$5Ñ$7Ô$7Ñ8Ô8Ð8Ý”G×+Ò+¨DÑ1Ô1ˆŒ	Ý	Œ×"Ò" 4Ñ(Ô(Ð(Ø"FˆÔØGˆÔÝ	ŒÔ#×'Ò'¨¬×(>Ò(>Ñ(@Ô(@ÑAÔAÐAÐAÐAr„   rÙ  r  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 )ÚSetSourceTensorKernelrj   rk   c                óÐ  •— |                      ¦   «          t          ¦   «                              |                     ¦   «         ||gdt          j        j        j        j        ¬¦  «         t          j
        j                             |j                             ¦   «         ¦  «         t          j
        j                             |                     ¦   «         ¦  «         t          j
        j                             |                      ¦   «         ¦  «         |                     ¦   «         }t!          t#          |¬¦  «        || ¦  «        t!          t#          |¬¦  «        || ¦  «        g| _        d S )Nz!torch.ops.aten.set_.source_Tensor)rE  rH  rF  )r¦  r>  rÇ  rí   rt   rW   ro  Úset_Úsource_TensorrY   rè   r�  r¦  r  r”  rñ   r½  rÛ  rL  )r  Úself_tensorÚstorage_tensorrç   r@  s       €rƒ   rÇ  zSetSourceTensorKernel.__init__  s"  ø€ Ø×$Ò$Ñ&Ô&Ð&Ý‰Œ×ÒØ×%Ò%Ñ'Ô'Ø˜.Ð)ØBÝœ	œÔ+Ô9ð	 	ñ 	
ô 	
ð 	
õ 	
ŒÔ#×'Ò'¨Ô(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                ó~   — | j         d                              ¦   «         | j         d                              ¦   «         gS r�  rb  r!  s    rƒ   r×  z2SetSourceTensorKernel.get_inputs_that_alias_output  s1   € Ø”˜A”×'Ò'Ñ)Ô)¨4¬;°q¬>×+BÒ+BÑ+DÔ+DÐEÐEr„   rÙ  rû  )r  rü  rý  rÇ  r×  r{  r|  s   @rƒ   r„  r„    sY   ø€ € € € € ð
ð 
ð 
ð 
ð 
ð 
ð"Fð Fð Fð Fð Fð Fð Fð Fr„   r„  c                  óJ   ‡ — e Zd ZdZdd„Zdd„Z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.
    rj   rk   c           
     óv  — | j         d         }t          j        j        rdddœ}||v r||         }| j        rd„ | j        D ¦   «         \  }}}n!d„ | j        D ¦   «         \  }}| j        d         }|                     ||| j        d         ||g| j        | j	        | j        ||  
                    ¦   «         ¦  «         d S )	Nr]  r«  rª  )r¦  Úmultiplyc              3  ó>   K  — | ]}|                      ¦   «         V — Œd S r�   r\  r]  s     rƒ   r)  z*ScatterFallback.codegen.<locals>.<genexpr>-  s.   è è € ÐJÐJ¸˜q×2Ò2Ñ4Ô4ÐJÐJÐJÐJÐJÐJr„   c              3  ó>   K  — | ]}|                      ¦   «         V — Œd S r�   r\  r]  s     rƒ   r)  z*ScatterFallback.codegen.<locals>.<genexpr>/  s.   è è € ÐEÐE°A˜!×-Ò-Ñ/Ô/ÐEÐEÐEÐEÐEÐEr„   r7   r   )r�   rY   rè   rq  Úsrc_is_tensorr   rC  Úgenerate_scatter_fallbackrF  rE  r×  )r  rg  r]  Úget_operator_enumrÒ   r—   r÷  s          rƒ   rm  zScatterFallback.codegen$  sê   € Ø”˜XÔ&ˆÝŒ7Ôð 	3à(-¸6Ð BÐ BÐØÐ*Ð*Ð*Ø*¨6Ô2�àÔð 	(ØJÐJ¸d¼kÐJÑJÔJ‰OˆQ��s�sàEÐE¸¼ÐEÑEÔE‰JˆQ�ØÔ$ QÔ'ˆCØ×)Ò)ØØ�Ô" 1Ô% u¨cÐ2ØÔ ØÔ#ØÔØØ×ÒÑ!Ô!ñ	
ô 	
ð 	
ð 	
ð 	
r„   rÕ   c                ó   — dS rƒ  r…   r!  s    rƒ   r!  zScatterFallback.should_allocate;  r…  r„   c                óB   — | j         d                              ¦   «         gS rn  rb  r!  s    rƒ   rÓ  z"ScatterFallback.get_mutation_names>  rc  r„   r  c                ó   — t          ¦   «         S r�   r1   r!  s    rƒ   r!  z(ScatterFallback.get_unbacked_symbol_defsA  r"  r„   NT©r]  Úinclude_selfrá  r~   r]  rý   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›   rõ   r  s     €rƒ   rž   z,ScatterFallback.__init__.<locals>.<listcomp>S  s'   ø€ ÐFÐFÐF°�t×)Ò)¨!Ñ,Ô,ÐFÐFÐFr„   c                ó:   •— g | ]}‰                      |¦  «        ‘ŒS r…   r�  r›  s     €rƒ   rž   z,ScatterFallback.__init__.<locals>.<listcomp>V  s'   ø€ ÐAÐAÐA°�t×)Ò)¨!Ñ,Ô,ÐAÐAÐAr„   rF  r—  r]  r˜  )rE  rG  rH  )ro   re   r‘  r>  rÇ  rÛ  rñ   r¥  rˆ   rY   rè   rè  r”  r¦  r‡   r§  )r  rH  rÒ   rá  r—   r÷  r]  r˜  ÚtensorsrC  r@  s   `         €rƒ   rÇ  zScatterFallback.__init__D  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„   rÙ  rá  r'  )rá  r~   r]  rý   r˜  rÕ   rj   rk   rg  r|  s   @rƒ   rŒ  rŒ    s¤   ø€ € € € € ðð ð
ð 
ð 
ð 
ð.ð ð ð ð+ð +ð +ðð ð ð ð !%Ø!ð!)ð !)ð !)ð !)ð !)ð !)ð !)ð !)ð !)ð !)ð !)ð !)r„   rŒ  c                  óB   ‡ — e Zd ZdZdd„Zdd„Z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
    rj   rk   c                ó   — d„ | j         D ¦   «         ^}}}g }t          |¦  «        }t          | j        ¦  «        D ]^\  }}| j        |         �#|                     t          |¦  «        ¦  «         Œ5|                     t          j        j        j	        ¦  «         Œ_ |j
        |                      ¦   «         |||g|                      ¦   «         ¢R Ž  d S )Nc              3  ó>   K  — | ]}|                      ¦   «         V — Œd S r�   r\  r]  s     rƒ   r)  z+IndexPutFallback.codegen.<locals>.<genexpr>n  s.   è è € Ð&RÐ&RÀ q×':Ò':Ñ'<Ô'<Ð&RÐ&RÐ&RÐ&RÐ&RÐ&Rr„   )r   r€  rÇ   r+  r&  r�  rY   rè   r  r7  Úgenerate_index_put_fallbackrz  rÌ  )	r  rg  rÒ   rs   Úvalid_indicesr+  Úiter_valid_indicesrœ   rÎ   s	            rƒ   rm  zIndexPutFallback.codegenm  sä   € Ø&RÐ&RÀdÄkÐ&RÑ&RÔ&RÐ#ˆˆF�]ØˆÝ! -Ñ0Ô0ÐÝ˜dœlÑ+Ô+ð 	>ð 	>‰DˆAˆqØŒ|˜AŒÐ*Ø—’�tÐ$6Ñ7Ô7Ñ8Ô8Ð8Ð8à—’�qœwÔ3Ô<Ñ=Ô=Ð=Ð=à+ˆÔ+Ø× Ò Ñ"Ô" A w°ð	
Ø9=×9PÒ9PÑ9RÔ9Rð	
ð 	
ð 	
ð 	
ð 	
ð 	
r„   rÕ   c                ó   — dS rƒ  r…   r!  s    rƒ   r!  z IndexPutFallback.should_allocate{  r…  r„   c                óB   — | j         d                              ¦   «         gS rn  rb  r!  s    rƒ   rÓ  z#IndexPutFallback.get_mutation_names~  rc  r„   r  c                ó   — t          ¦   «         S r�   r1   r!  s    rƒ   r!  z)IndexPutFallback.get_unbacked_symbol_defs�  r"  r„   c           	     ó  •‡ — |‰ _         d„ |D ¦   «         }ˆ fd„||g|¢D ¦   «         }d}t          ¦   «                              d t          |                     ¦   «         ¬¦  «        ‰                      |¦  «        |fd||¬¦  «         t          j                             ‰ j	        d          
                    ¦   «         ¦  «         t          j                             ‰ ¦  «        ‰ _        t          j                             ‰ ¦  «         d S )Nc                ó   — g | ]}|®|‘ŒS r�   r…   re  s     rƒ   rž   z-IndexPutFallback.__init__.<locals>.<listcomp>†  s   € Ð=Ð=Ð=˜q¨q¨}˜¨}¨}¨}r„   c                ó:   •— g | ]}‰                      |¦  «        ‘ŒS r…   r�  )r›   rÒ   r  s     €rƒ   rž   z-IndexPutFallback.__init__.<locals>.<listcomp>‡  s'   ø€ ÐNÐNÐN¨Q�4×%Ò% aÑ(Ô(ÐNÐNÐNr„   Úaoti_torch_index_put_outrF  zaten.index_put_)rE  rF  rH  r   )r+  r>  rÇ  rÛ  rñ   r¥  rY   rè   rè  r   r”  r¦  r‡   r§  )
r  rH  rÒ   r+  rs   Ú
accumulater£  r�  rF  r@  s
   `        €rƒ   rÇ  zIndexPutFallback.__init__„  sü   øø€ ØˆŒØ=Ð= GÐ=Ñ=Ô=ˆØNÐNÐNÐN°1°fÐ2M¸}Ð2MÐNÑNÔNˆØ4ˆÝ‰Œ×ÒØÝ˜aŸlšl™nœnÐ-Ñ-Ô-Ø×Ò Ñ(Ô(ØˆMØ0Ø+Ø#ð 	ñ 	
ô 	
ð 	
õ 	
Œ×#Ò# D¤K°¤N×$;Ò$;Ñ$=Ô$=Ñ>Ô>Ð>Ý”G×+Ò+¨DÑ1Ô1ˆŒ	Ý	Œ×"Ò" 4Ñ(Ô(Ð(Ð(Ð(r„   rÙ  rá  r'  rg  r|  s   @rƒ   rŸ  rŸ  h  s’   ø€ € € € € ðð ð
ð 
ð 
ð 
ðð ð ð ð+ð +ð +ðð ð ð ð)ð )ð )ð )ð )ð )ð )ð )ð )ð )r„   rŸ  c                  ó,   — e Zd Zed„ ¦   «         Zdd„ZdS )Ú
DeviceCopyc                óB  — |                      ¦   «         sQt          d„ |                     ¦   «         D ¦   «         ¦  «        r&t          j        j        s|                     |¦  «        S t          j         	                    |¦  «         t          j         	                    | 
                    ¦   «         ¦  «         t          d¦  «         |f}t          t          ||                     ¦   «         |                     ¦   «         ¬¦  «        |                      |¦  «        g|¦  «        S )Nc              3  ó<   K  — | ]}|t           j        j        v V — Œd S r�   )rY   rè   r’  r  s     rƒ   r)  z$DeviceCopy.create.<locals>.<genexpr>œ  s,   è è € ÐGÐG¨q�A�œÔ*Ð*ÐGÐGÐGÐGÐGÐGr„   zDeviceCopy in input programr  )rÍ  r%  r-  r8   Úaot_inductorÚuse_runtime_constant_foldingrÑ  rY   rè   Úadd_device_inforñ   rM   r®  rî   rð   rë   rã  )rO  rÒ   rç   rl  rC  s        rƒ   rN  zDeviceCopy.create˜  s  € ð —’‘”ð	0åÐGÐG°A×4DÒ4DÑ4FÔ4FÐGÑGÔGÑGÔGð	0õ Ô'ÔDð	0ð
 ×'Ò'¨Ñ/Ô/Ð/å	Œ×Ò Ñ'Ô'Ð'Ý	Œ×Ò §¢¡¤Ñ/Ô/Ð/åÐ7Ñ8Ô8Ð8Ø%˜ˆÝÝØØ—k’k‘m”mØ—Z’Z‘\”\ðñ ô ð
 ×Ò˜qÑ!Ô!Ð"Øñ
ô 
ð 	
r„   rj   rk   c                óH  — |                       ¦   «         }t          |¦  «        dk    sJ ‚| j        r<|                     |d         | j                             ¦   «         |d         ¦  «         d S |                     |d         |                      ¦   «         |d         ¦  «         d S )Nr´   r   r7   )rÏ  r    rD  rk  rz  r  s      rƒ   rm  zDeviceCopy.codegen°  s§   € Ø× Ò Ñ"Ô"ˆÝ�4‰yŒy˜AŠ~ˆ~ˆ~ˆ~ØÔð 	TØ×'Ò'Ø�Q”˜Ô)×;Ò;Ñ=Ô=¸tÀA¼wñô ð ð ð ð ×'Ò'¨¨Q¬°×1GÒ1GÑ1IÔ1IÈ4ÐPQÌ7ÑSÔSÐSÐSÐSr„   NrÙ  )r  rü  rý  ry  rN  rm  r…   r„   rƒ   r®  r®  —  sG   € € € € € Øð
ð 
ñ „[ð
ð.Tð Tð Tð Tð Tð Tr„   r®  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 )rx   z;
    The result of a call to aten._local_scalar_dense.
    rj   r»  c                ó   — t          ¦   «         S r�   r1   r!  s    rƒ   r,  zDynamicScalar.get_readsÀ  r"  r„   rÕ   c                ó   — dS rƒ  r…   r!  s    rƒ   r!  zDynamicScalar.should_allocateÃ  r…  r„   rk   c                óú   •— |                      ¦   «          t          ¦   «                              d t          t	          j        d¦  «        ¬¦  «        |                      |g¦  «        ¦  «         || _        || _        d S ©Nr	  rF  )	ru  r>  rÇ  rÛ  rt   rç   r¥  ÚsymÚkeypath)r  rº  r»  r  r@  s       €rƒ   rÇ  zDynamicScalar.__init__Æ  sl   ø€ Ø�Š‰ŒˆÝ‰Œ×ÒØ•*¥E¤L°Ñ$7Ô$7Ð8Ñ8Ô8¸$×:MÒ:MÈtÈfÑ:UÔ:Uñ	
ô 	
ð 	
ð ˆŒØˆŒˆˆr„   r  c                ó,   — t          | j        g¦  «        S r�   )r2   rº  r!  s    rƒ   r!  z&DynamicScalar.get_unbacked_symbol_defsÎ  s   € Ý˜4œ8˜*Ñ%Ô%Ð%r„   c                ó0   — |                      | ¦  «         d S r�   )Úcodegen_dynamic_scalarrl  s     rƒ   rm  zDynamicScalar.codegenÑ  s   € Ø×&Ò& tÑ,Ô,Ð,Ð,Ð,r„   rõ  rá  rÙ  r'  )
r  rü  rý  r  r,  r!  rÇ  r!  rm  r{  r|  s   @rƒ   rx   rx   »  s—   ø€ € € € € ðð ðð ð ð ðð ð ð ðð ð ð ð ð ð&ð &ð &ð &ð-ð -ð -ð -ð -ð -ð -ð -r„   rx   c                  óJ   ‡ — e Zd ZdZdd„Zdd„Zdˆ fd„Zdd	„Zd
„ Zdd„Z	ˆ xZ
S )ry   z5
    The result of a call to aten._assert_scalar
    rj   r»  c                ó   — t          ¦   «         S r�   r1   r!  s    rƒ   r,  zAssertScalar.get_readsÚ  r"  r„   rÕ   c                ó   — dS rƒ  r…   r!  s    rƒ   r!  zAssertScalar.should_allocateÝ  r…  r„   rk   c                óª   •— t          ¦   «                              d t          t          j        d¦  «        ¬¦  «        g ¦  «         || _        || _        d S r¹  )r>  rÇ  rÛ  rt   rç   Úscalarr¡  )r  rÃ  r¡  r@  s      €rƒ   rÇ  zAssertScalar.__init__à  sQ   ø€ Ý‰Œ×ÒàÝ�eœl¨5Ñ1Ô1Ð2Ñ2Ô2àñ	
ô 	
ð 	
ð ˆŒØˆŒˆˆr„   c                ó   — dS rš  r…   r!  s    rƒ   r}  zAssertScalar.has_side_effectsë  r8  r„   c                ó*   — t          | j        ¦  «        S r�   )r,   rÃ  r!  s    rƒ   rÆ  z%AssertScalar.get_unbacked_symbol_usesî  s   € Ý$ T¤[Ñ1Ô1Ð1r„   c                óö  — t           j        j        rNt           j        j                             | j        d¬¦  «        }|                     d|› d| j        › d�¦  «         d S t           j        j                             | j        d¬¦  «        }|                     d|› d�¦  «         |                     dt          | j        ¦  «        › d	�¦  «         |                     |  
                    ¦   «         › d
�¦  «         d S )NF)r~  zif (!(z)) { throw std::runtime_error("z"); }zif not rh  z    raise RuntimeError(r   z = None)rY   rè   rq  r  Úcodegen_cpp_sizevarrÃ  r  r¡  Úcodegen_python_sizevarr^  r”  )r  rg  Úsizevars      rƒ   rm  zAssertScalar.codegenñ  s  € õ Œ7Ôð 	;Ý”gÔ*×>Ò>Ø” eð ?ñ ô ˆGð ×ÒØR˜ÐRÐRÀ$Ä(ÐRÐRÐRñô ð ð ð õ ”gÔ*×AÒAØ” eð Bñ ô ˆGð ×ÒÐ2¨Ð2Ð2Ð2Ñ3Ô3Ð3Ø×ÒÐI½¸T¼X¹¼ÐIÐIÐIÑJÔJÐJð ×Ò §¢¡¤Ð9Ð9Ð9Ñ:Ô:Ð:Ð:Ð:r„   rõ  rá  rÙ  )r  rü  rý  r  r,  r!  rÇ  r}  rÆ  rm  r{  r|  s   @rƒ   ry   ry   Õ  s¦   ø€ € € € € ðð ðð ð ð ðð ð ð ð	ð 	ð 	ð 	ð 	ð 	ðð ð ð ð2ð 2ð 2ð;ð ;ð ;ð ;ð ;ð ;ð ;ð ;r„   ry   c                  ó$   — e Zd ZU ded<   ded<   dS )ÚExternKernelNoderˆ   r‡   zexport_schema.Noder�   N)r  rü  rý  rþ  r…   r„   rƒ   rË  rË  
  s'   € € € € € € à€I€I�IØÐÐÑÐÐr„   rË  c                  ó®   ‡ — e Zd Z	 dddœdˆ fd„Zdd„Zdd„Zd	„ Zed
„ ¦   «         Zd„ Z	d„ Z
d„ Zd„ Zdd„Zedd„¦   «         Zed„ ¦   «         Zˆ fd„Zˆ xZS )ÚFallbackKernelN©rK  rj   rk   c               óì  •‡ — t           j        j        t           j        j        t           j        j        t           j        j        t           j        j        t           j        j        t           j        t           j        j        t           j        j        t           j        j        t           j        j        t           j        j        t           j	        j        t           j	        j        t           j
        j        t           j
        j        t           j        j        t           j        j        i	}||v r.t          |¦  «        dk    rt          |¦  «        dk    r||         }t          ¦   «                              |t          |¦  «        t          |¦  «        |¬¦  «         d‰ _        |‰ _        t%          |t&          j        j        t&          j        j        f¦  «        sJ d|› dt/          |¦  «        › d�¦   «         ‚|‰ _        |‰ _        |€i n|‰ _        t6          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 |	j(        r!tS          |¦  «        stU          d	|› �¦  «        ‚|	j+        }
‰                      ‰ j,        ‰ j-        ¦  «        \  }}dˆ fd„}t&          j#        j$         .                    |	||¦  «        D ]\  }} |||¦  «         Œd S )Nr7   rf  Fz#Fails to create FallbackKernel for rÿ   z not supportedÚ_c10d_functionalr   z'NYI: Can't generate FallbackKernel for rj   rk   c                óî  •‡ — t          ‰ j        t          j        ¦  «        rt          |t          t
          f¦  «        sJ ‚t          ‰ j        t          j        ¦  «        o0t          ‰ j                             ¦   «         t          j        ¦  «        }t          ‰ j        t          j        ¦  «        o0t          ‰ j                             ¦   «         t          j        ¦  «        }|st          ‰ j        t          j        ¦  «        rt          |t
          t          f¦  «        rJ ‚|€d S ‰ j	        €d S dˆ ˆfd„}|r|D ]} ||¦  «         Œd S t          ‰ j        t          j        ¦  «        s|sJ ‚ ||¦  «         d S )Nrj   rk   c                ó  •— ‰j                              |                      ¦   «         ¦  «         ‰j        j        rK‰j                             t          t          |                      ¦   «         ¬¦  «        | ‰¦  «        ¦  «         d S d S r9  )	Úalias_namesr&  r”  Ú
alias_infoÚis_writerL  r½  rÛ  rñ   )rõ   Úinfor  s    €€rƒ   Ú	add_aliaszPFallbackKernel.__init__.<locals>.handle_aliasing_and_mutation.<locals>.add_alias‡  s€   ø€ ØÔ ×'Ò'¨¯
ª
©¬Ñ5Ô5Ð5Ø”?Ô+ð ØÔ)×0Ò0Ý&¥z¸¿º¹¼Ð'HÑ'HÔ'HÈ!ÈTÑRÔRñô ð ð ð ðð r„   rÙ  )
ro   r€   rt   ÚListTyperp   rq   ÚOptionalTypeÚgetElementTypeÚ
TensorTyperÔ  )rÖ  r'  Úis_optional_tensorÚis_list_tensorr×  Ú
tensor_argr  s   `     €rƒ   Úhandle_aliasing_and_mutationz=FallbackKernel.__init__.<locals>.handle_aliasing_and_mutations  s’  øø€ å˜$œ)¥U¤^Ñ4Ô4ð 6Ý! #­­e }Ñ5Ô5Ð5Ð5Ð5Ý!+Ø”	�5Ô-ñ"ô "ð "Kå˜TœY×5Ò5Ñ7Ô7½Ô9IÑJÔJð õ (¨¬	µ5´>ÑBÔBð ÅzØ”	×(Ò(Ñ*Ô*­EÔ,<ñHô HˆNð "ð :¥Z°´	½5Ô;KÑ%LÔ%Lð :õ & c­Eµ4¨=Ñ9Ô9Ð9Ð9Ð9àˆ{Ø�ØŒÐ&Ø�ðð ð ð ð ð ð ð ð Ø"%ð *ð *�JØ�I˜jÑ)Ô)Ð)Ð)ð*ð *õ " $¤)­UÔ-=Ñ>Ô>ÐTÐBTÐTÐTÐTØ�	˜#‘”���r„   rÙ  )/ro  r¦  r•  ÚScalarÚdivÚdivideÚfloor_divider¥  rŽ  ÚsubÚsubtractÚtrue_divider    r>  rÇ  rq   Úuse_runtime_dispatchrK  ro   rt   r^  r_  rw  r€   rH  r‹  r�   rY   rè   Úwarn_fallbackrE  rÓ  r  r‡   r`  Ú_libraryrÍ  Úmutates_and_returns_first_argr&  r”  Ú
is_mutabler!   rO  ra  r   rC  Ú
zip_schema)r  r  r3  rš  Únontensor_argsr‹  r�   rK  ÚBINARY_OP_MAPPINGÚschemaÚschema_argsr‹   rß  rÖ  r'  r@  s   `              €rƒ   rÇ  zFallbackKernel.__init__  s,  øø€ õ ŒHŒO�TœXœ_ÝŒHŒO�TœXœ_ÝŒKÔ¥¤Ô 2ÝÔ�tÔ0Ô7ÝŒHŒO�TœXœ_ÝŒMÔ ¥$¤-Ô"6ÝŒHŒO�TœXœ_ÝŒMÔ ¥$¤-Ô"6ÝÔÔ#¥TÔ%5Ô%<ð

Ðð Ð'Ð'Ð'Ý�KÑ Ô  AÒ%Ð%Ý�NÑ#Ô# qÒ(Ð(à& vÔ.ˆFå‰Œ×ÒØÝ�+ÑÔÝ�.Ñ!Ô!Øð	 	ñ 	
ô 	
ð 	
ð %*ˆÔ!Ø!2ˆÔåØå”
Ô%Ý”
Ô.ðñ
ô 
ð 	Xð 	Xð X°ÐWÐW½4À¹<¼<ÐWÐWÐWñ	Xô 	Xð 
ð "ˆÔØ,ˆÔØ"˜N�b�b°ˆŒÝ	Œ×Ò˜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àÔð 	Õ%;¸FÑ%CÔ%Cð 	Ý%ØB¸&ÐBÐBñô ð ð Ô&ˆØ×*Ò*¨4¬;¸Ô8JÑKÔK‰ˆˆfð 	ð  	ð  	ð  	ð  	ð  	õD œÔ-×8Ò8¸ÀÀvÑNÔNð 	4ð 	4‰IˆD�#Ø(Ð(¨¨sÑ3Ô3Ð3Ð3ð	4ð 	4r„   c                óN  ‡ ‡‡— t          ‰ d¦  «        sd S t          t          j        j        j        ‰ j        ¦  «        }|sd S |                     ¦   «         D ]M\  }Šˆfd„Šˆˆˆ fd„}|                     | 	                    |¦  «        › d |¦   «         › |j
        › �¦  «         ŒNd S )NrK  c                ó2  •— |dk    r| S t          |¦  «        dk    rnt          |d         t          ¦  «        rSt          |d         t          j        ¦  «        r3 ‰| › d|d         j        › d|d         j        › d�|dd …         ¦  «        S t          |d         t          ¦  «        r% ‰| › d|d         j        › d�|dd …         ¦  «        S t          |d         t          j        ¦  «        r\t          j        j	        r& ‰d	|d         j        › d
| › d�|dd …         ¦  «        n$ ‰| › d|d         j        › d�|dd …         ¦  «        S t          |d         t          ¦  «        r% ‰| › d|d         j        › d�|dd …         ¦  «        S t          d|› �¦  «        ‚)Nr…   r´   r   r7   rp  rD  r   z()z	std::get<z>(ú[ú]z.__floordiv__(zunrecognized keypath )r    ro   r)   r‚  ÚSequenceKeyr‡   rÁ   rY   rè   rq  r+   r   rÉ  )r  r»  Úgos     €rƒ   rö  z7FallbackKernel.codegen_unbacked_symbol_defs.<locals>.go¥  sÜ  ø€ Ø˜b’=�=Ø�Kõ ˜‘L”L AÒ%Ð%Ý" 7¨1¤:­}Ñ=Ô=ð &å" 7¨1¤:­vÔ/AÑBÔBð &ð ˜2ØÐEÐE '¨!¤*¤/ÐEÐE°G¸A´J´NÐEÐEÐEÀwÈqÈrÈrÄ{ñô ð õ   ¨¤
­MÑ:Ô:ð LØ˜2 Ð;Ð;¨°¬
¬Ð;Ð;Ð;¸WÀQÀRÀR¼[ÑIÔIÐIÝ ¨¤
­FÔ,>Ñ?Ô?ð Lõ œ7Ô.ðJ˜˜Ð@ w¨q¤z¤~Ð@Ð@¸Ð@Ð@Ð@À'È!È"È"Ä+ÑNÔNÐNà˜R 4Ð ;Ð ;¨'°!¬*¬.Ð ;Ð ;Ð ;¸WÀQÀRÀR¼[ÑIÔIðõ
   ¨¤
­KÑ8Ô8ð Lð ˜2 ÐJÐJ°W¸Q´ZÔ5GÐJÐJÐJÈGÐTUÐTVÐTVÌKÑXÔXÐXå(Ð)JÀÐ)JÐ)JÑKÔKÐKr„   c                 ó   •— t           j        j        rŸt          ‰j        ¦  «        dk    r) ‰ ‰j        d                              ¦   «         ‰¦  «        S t          ‰d         t          j        ¦  «        sJ ‚ ‰ ‰j        ‰d         j	                                      ¦   «         ‰dd …         ¦  «        S  ‰ ‰                     ¦   «         ‰¦  «        S )Nr7   r   )
rY   rè   rq  r    r¾  r”  ro   r‚  rõ  rÁ   )rö  r»  r  s   €€€rƒ   Úgo_outerz=FallbackKernel.codegen_unbacked_symbol_defs.<locals>.go_outerÀ  s¸   ø€ Ý”7Ô&ð 8õ
 ˜4œ<Ñ(Ô(¨AÒ-Ð-Ø!˜r $¤,¨q¤/×":Ò":Ñ"<Ô"<¸gÑFÔFÐFå)¨'°!¬*µfÔ6HÑIÔIÐIÐIÐIØ!˜r $¤,¨w°q¬z¬~Ô">×"GÒ"GÑ"IÔ"IÈ7ÐSTÐSUÐSUÌ;ÑWÔWÐWà˜2˜dŸmšm™oœo¨wÑ7Ô7Ð7r„   z = )r  r.   rY   rè   ré   r¸   rK  rb  r  Úcodegen_unbacked_symbol_declr_  )r  rg  rK  rá   rø  rö  r»  s   `    @@rƒ   Úcodegen_unbacked_symbol_defsz+FallbackKernel.codegen_unbacked_symbol_defs˜  s  øøø€ Ý�tÐ0Ñ1Ô1ð 	ØˆFå5ÝŒGÔÔ&¨Ô(>ñ
ô 
Ðð !ð 	ØˆFà+×1Ò1Ñ3Ô3ð -	ð -	‰JˆAˆwðLð Lð Lð Lð Lð68ð 8ð 8ð 8ð 8ð 8ð 8ð ×ÒØ×7Ò7¸Ñ:Ô:Ð[Ð[¸x¸x¹z¼zÐ[È7Ì>Ð[Ð[ñô ð ð ðW-	ð -	r„   r  c                ó¼   — t          | dd ¦  «        x}r<t          t          j        j        j        |¦  «        }|€J ‚|                     ¦   «         S t          ¦   «         S )NrK  )r�   r.   rY   rè   ré   r¸   rA  r2   )r  rK  Úresolveds      rƒ   r!  z'FallbackKernel.get_unbacked_symbol_defsÒ  s`   € Ý '¨Ð.AÀ4Ñ HÔ HÐHÐð 	 Ý0Ý”Ô Ô*Ð,=ñô ˆHð Ð'Ð'Ð'Ø—=’=‘?”?Ð"å‘<”<Ðr„   c                óÞ  ‡— t           j         G d„ d¦  «        ¦   «         Šˆ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   Úrefrj   rˆ   c                ó   — | j         S r�   )r 	  r!  s    rƒ   rx  z2FallbackKernel.codegen_args.<locals>.Shim.__repr__á  s	   € Ø”x�r„   Nrë  )r  rü  rý  rþ  rx  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…   )rY   rè   r  rÈ  rX  )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Ô  rX  s     rƒ   rž   z/FallbackKernel.codegen_args.<locals>.<listcomp>í  s+   € ÐIÐIÐI¸q•A”GÔ(×7Ò7¸Ñ:Ô:ÐIÐIÐIr„   )rÿ  Ú	dataclassr   r‹  rC  rY   rè   rq  ro   rH  rt   r^  r_  rÄ  r¤   r`  ra  r�   r  )r  rš  r‹   r�   r	  s       @rƒ   rÏ  zFallbackKernel.codegen_argsÜ  s  ø€ Ý	Ô	ð	 ð 	 ð 	 ð 	 ð 	 ñ 	 ô 	 ñ 
Ô	ð	 ð IÐ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„   c                óv  — | rd„ | D ¦   «         }|d         S t          |t          j        ¦  «        r|j        S t          |t          t
          f¦  «        ret          d„ |D ¦   «         ¦  «        }d„ |D ¦   «         }t          |¦  «        dk    r|d         S |D ]}t          |j	        ¦  «        r|c S Œ|d         S d S )Nc                ó^   — g | ]*}|                      ¦   «         ¯|                      ¦   «         ‘Œ+S r…   r  r&  s     rƒ   rž   z.FallbackKernel.find_device.<locals>.<listcomp>ö  s1   € ÐSÐSÐS¨CÀ#Ç.Â.ÑBRÔBRÐS�s—~’~Ñ'Ô'ÐSÐSÐSr„   r   c              3  óL   K  — | ]}t                                d |¦  «        V — Œ d S r�   )rÍ  Úfind_devicerX  s     rƒ   r)  z-FallbackKernel.find_device.<locals>.<genexpr>û  sC   è è € ð $ð $Ø89•×*Ò*¨4°Ñ3Ô3ð$ð $ð $ð $ð $ð $r„   c                ó   — g | ]}|¯|‘ŒS r…   r…   )r›   rç   s     rƒ   rž   z.FallbackKernel.find_device.<locals>.<listcomp>ÿ  s   € ÐAÐAÐA &¸&ÐA�vÐAÐAÐAr„   r7   )
ro   rt   r•  rç   rp   rq   r2   r    rQ   r€   )rš  rŸ  ÚdevicesÚ
device_setrç   s        rƒ   r	  zFallbackKernel.find_deviceó  sô   € àð 	ØSÐS°;ÐSÑSÔSˆGØ˜1”:ÐÝ�n¥e¤lÑ3Ô3ð 	)Ø!Ô(Ð(Ý�n¥t­U mÑ4Ô4ð 	Ý#ð $ð $Ø=Kð$ñ $ô $ñ ô ˆJð BÐA¨JÐAÑAÔAˆGÝ�7‰|Œ|˜qÒ Ð Ø˜q”zÐ!Ø!ð "ð "�Ý˜&œ+Ñ&Ô&ð "Ø!�M�M�Mð"à˜1”:ÐØˆtr„   c                óš   — t          | j        t          j        j        ¦  «        rdS t          | j        ¦  «                             ¦   «         S rƒ  )ro   rH  rt   r^  rw  r(   rë  r!  s    rƒ   r}  zFallbackKernel.has_side_effects  s>   € Ý�dÔ&­¬
Ô(FÑGÔGð 	Ø�5Ý˜tÔ/Ñ0Ô0×;Ò;Ñ=Ô=Ð=r„   c                ó   — | j         S r�   )rÓ  r!  s    rƒ   r×  z+FallbackKernel.get_inputs_that_alias_output  r4  r„   c                óD   — t          | j        ¦  «        dk    sJ ‚| j        S r  )r    r  r!  s    rƒ   rÓ  z!FallbackKernel.get_mutation_names  s'   € Ý�4Ô&Ñ'Ô'¨1Ò,Ð,Ð,Ð,ØÔ"Ð"r„   c           	     ó   ‡‡— t                                d|                      ¦   «         | j        ¦  «         t	          | t
          ¦  «        sJ ‚|                      | j        | j        ¦  «        \  }Š|  	                    |‰¦  «        }ˆfd„| j
        D ¦   «         }t          j        j        sg |¢|¢S t          d d ¦  «        }|                     | j        |‰¦  «        }d„ Š| j        }|j        j        }t%          |¦  «        dk    r0| j        r| j        n| j        }|d         j        } ‰||¦  «        g}	n!ˆfd„t-          || j        ¦  «        D ¦   «         }	t/          |                      ¦   «         t1          j        | j                             ¦   «         ||	i ¬¦  «        ¬¦  «        }
t          j        j                             |
¦  «         g |¢|¢S )	Nz4Extern kernel node added for node %s with target %s.c                ó<   •— g | ]}‰                      |d ¦  «        ‘ŒS r�   rÇ  )r›   r  r�   s     €rƒ   rž   z<FallbackKernel.export_extern_kernel_node.<locals>.<listcomp>$  s4   ø€ ð 
ð 
ð 
Ø&)ˆF�JŠJ�s˜DÑ!Ô!ð
ð 
ð 
r„   c                óT  — t          | t          j        ¦  «        r€|}t          |t          t          f¦  «        rt          |¦  «        dk    sJ ‚|d         }t          j                             t          j	        | 
                    ¦   «         ¬¦  «        ¬¦  «        S t          | t          j        ¦  «        rVt          |                      ¦   «         t          j        ¦  «        r*t          j                             d„ |D ¦   «         ¬¦  «        S t          dt          | ¦  «        › �¦  «        ‚)Nr7   r   r&  )Ú	as_tensorc                ó\   — 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_tensorszUnsupported return type )ro   rt   rÛ  rp   rq   r    r	  ÚArgumentrN  r	  r”  rØ  rÚ  ÚRuntimeErrorr€   )Úreturn_typeÚoutputrÏ   s      rƒ   Úhandle_single_outputzFFallbackKernel.export_extern_kernel_node.<locals>.handle_single_output/  s(  € Ý˜+¥uÔ'7Ñ8Ô8ð Sà�Ý˜f¥t­U mÑ4Ô4ð $Ý˜v™;œ;¨!Ò+Ð+Ð+Ð+Ø  œ)�CÝ$Ô-×4Ò4Ý+Ô:ÀÇÂÁÄÐOÑOÔOð 5ñ ô ð õ ˜K­¬Ñ8Ô8ð S½ZØ×*Ò*Ñ,Ô,­eÔ.>ñ>ô >ð Sõ %Ô-×4Ò4ð ð  à#)ð ñ  ô  ð 5ñ ô ð õ #Ð#Q½dÀ;Ñ>OÔ>OÐ#QÐ#QÑRÔRÐRr„   r7   r   c                ó8   •— g | ]\  }} ‰|j         |¦  «        ‘ŒS r…   )rX  )r›   Úreturn_schemar	  r	  s      €rƒ   rž   z<FallbackKernel.export_extern_kernel_node.<locals>.<listcomp>Q  s=   ø€ ð  ð  ð  á)�M 6ð %Ð$ ]Ô%<¸fÑEÔEð ð  ð  r„   )r¥  r   r¾  Úmetadata)r‡   r�   )r<  r=  r”  rH  ro   rÍ  r‹  r   rC  rÄ  rG  rY   rè   Úaot_moder    Úserialize_inputsr`  Úreturnsr    r¾  rL  rX  r¤   rË  r	  rZ   r‡   Úextern_kernel_nodesr&  )r  r‹   Úordered_kwargsÚ
serializerÚnamed_argumentsr¥  r$	  r¾  r	  Úoutput_argumentsr�   r	  r�   s              @@rƒ   Úexport_extern_kernel_nodez(FallbackKernel.export_extern_kernel_node  s  øø€ Ý�	Š	ØBØ�MŠM‰OŒOØÔñ	
ô 	
ð 	
õ ˜$¥Ñ/Ô/Ð/Ð/Ð/Ø×*Ò*¨4¬;¸Ô8JÑKÔK‰ˆˆfØ×*Ò*¨4°Ñ8Ô8ˆð
ð 
ð 
ð 
Ø-1Ô-Oð
ñ 
ô 
ˆõ ŒwÔð 	,à+�TÐ+˜NÐ+Ð+å*¨4°Ñ6Ô6ˆ
Ø$×5Ò5°dÔ6FÈÈfÑUÔUˆð	Sð 	Sð 	Sð. Ô!ˆØ”.Ô(ˆÝˆw‰<Œ<˜1ÒÐð '+¤lÐM�d”l�l¸Ô8MˆGØ! !œ*Ô.ˆKØ 4Ð 4°[À'Ñ JÔ JÐKÐÐð ð  ð  ð  å-0°¸$¼,Ñ-GÔ-Gð ñ  ô  Ðõ
  Ø—’‘”ÝÔ#ØÔ'×,Ò,Ñ.Ô.Ø&Ø(Øð	ñ ô ð
ñ 
ô 
ˆõ 	
ŒÔ#×*Ò*¨4Ñ0Ô0Ð0à'�Ð'˜Ð'Ð'r„   c           	     óä  — | j         }|j        dk    rlt          |t          j        j        ¦  «        sJ ‚t          j        j        r9ddl	m
} t          |¦  «        |vr"t                               d|¦  «         d| _        nE|j        dk    r"t          |t          j        j        ¦  «        sJ ‚nt          j        j        rd| _        | j        r}|                      |¦  «         d }d }|                      ¦   «         }|                     |                      ¦   «         | j        | j        || j         || j        r| j        n| j        ¦  «         n“|                      |¦  «         g |                      ¦   «         ¢|                      ¦   «         ¢}t          j        j                             | |¦  «         t          | j        t8          ¦  «        r|                      |¦  «         |                      |¦  «         d S )Nro  r   )Úinductor_fallback_opszG%s is missing a c-shim implementation, using proxy executor as fallbackTÚ
_quantized)rH  rr  ro   rt   r^  r_  rY   rè   rq  Útorchgen.aoti.fallback_opsr,	  rˆ   r<  r‘  rç  rj  r*	  Ú,generate_fallback_kernel_with_runtime_lookupr”  rE  rF  r¾  rL  rÏ  r×  r  Úgenerate_fallback_kernelr  rR  rÛ  rú  )r  rg  r3  r,	  Úexported_argsr‹   s         rƒ   rm  zFallbackKernel.codegend  s÷  € ØÔ!ˆØÔ˜vÒ%Ð%å˜f¥e¤jÔ&;Ñ<Ô<Ð<Ð<Ð<ÝŒwÔ"ð 
5ØLÐLÐLÐLÐLÐLå�v‘;”;Ð&;Ð;Ð;õ —K’KØaØñô ð ð 15�DÔ-øØÔ Ò-Ð-å˜f¥e¤jÔ&;Ñ<Ô<Ð<Ð<Ð<Ð<õ ŒwÔ"ð 1Ø,0�Ô)àÔ$ð 	3Ø× Ò  Ñ)Ô)Ð)à ˆMØˆDØ ×:Ò:Ñ<Ô<ˆMà×@Ò@Ø—’‘”ØÔ'ØÔ$ØØÔ Øà $¤ÐG�”�°$Ô2Gñ	ô 	ð 	ð 	ð × Ò  Ñ)Ô)Ð)ØA�T×&Ò&Ñ(Ô(ÐA¨4×+>Ò+>Ñ+@Ô+@ÐAˆDÝŒGÔ ×9Ò9¸$ÀÑEÔEÐEÝ˜$œ+¥vÑ.Ô.ð 3Ø×)Ò)¨'Ñ2Ô2Ð2à×)Ò)¨'Ñ2Ô2Ð2Ð2Ð2r„   r	  rÚ   c           	     ó¶   — t          | j        | j        t          |                      ¦   «         ¦  «        t          |                      ¦   «         ¦  «        ¦  «        S r�   )rj  rç   ræ   rK   rä   rå   )r	  s    rƒ   Útensor_to_layoutzFallbackKernel.tensor_to_layout–  sD   € åØŒMØŒLÝ% f§k¢k¡m¤mÑ4Ô4Ý% f§m¢m¡o¤oÑ6Ô6ñ	
ô 
ð 	
r„   c                ó  ‡ ‡‡— t           j        f}||vrt          j        j        nt          ¦   «         }|5   ‰ j        |g|¢R i |¤Ž\  }}}}	}
d d d ¦  «         n# 1 swxY w Y   ‰                      ||¦  «        }|€  ‰ t          |¬¦  «        ||||	|
¬¦  «        Šn+|s
J d¦   «         ‚ ‰ t          |¬¦  «        ||||	|
¬¦  «        Šˆ ˆˆfd„Š ‰|g ¦  «        }t          |t          t          t          f¦  «        r|‰_        n|g‰_        |S )NrF  rÎ  z"Not sure where to find device infoc                ób  •‡ ‡— t          ‰ t          t          f¦  «        r@ t          ‰ ¦  «        ˆˆˆ fd„t	          t          ‰ ¦  «        ¦  «        D ¦   «         ¦  «        S t          ‰ t          ¦  «        r"ˆˆˆ fd„‰                      ¦   «         D ¦   «         S t          ‰ t          j	        ¦  «        r$t          ‰                     ‰ ¦  «        ‰‰¦  «        S t          ‰ t          ¦  «        r‰ S t          ‰ t          j        ¦  «        r‰ j        j        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…   r7	  )r›   r  rm  r8	  r+  r	  s      €€€rƒ   rÃ   zBFallbackKernel.create.<locals>.generate_output.<locals>.<dictcomp>Ë  sN   ø€ ð ð ð á ˜˜Sð ˜˜¨¨g½$¸v¹,¼,ÈÐ9LÐ8MÑ.MÑNÔNðð ð r„   zFallbackKernel output type z is not supported)ro   rp   rq   r€   r¡   r    rr   rb  rt   r•  ÚMultiOutputr3	  r~   ÚSymIntr�   r  )r	  r+  rO  r8	  Úpackeds   ``€€€rƒ   r8	  z.FallbackKernel.create.<locals>.generate_outputÄ  sf  øøø€ Ý˜&¥4­ -Ñ0Ô0ð Ø#•t˜F‘|”|ð $ð $ð $ð $ð $ð $å"¥3 v¡;¤;Ñ/Ô/ð$ñ $ô $ñ ô ð õ ˜F¥DÑ)Ô)ð ðð ð ð ð ð à$*§L¢L¡N¤Nðñ ô ð õ ˜F¥E¤LÑ1Ô1ð Ý"Ø×(Ò(¨Ñ0Ô0ØØñô ð õ
 ˜F¥CÑ(Ô(ð Ø�Ý˜F¥E¤LÑ1Ô1ð Ø”{Ô'Ð'ð �N�NØPµ°f±´ÐPÐPÐPñ #”N�Nà�tr„   )ro  Ú*_fused_moving_avg_obs_fq_helper_functionalrY   rè   r”  r   r¢  r	  rÛ  ÚMultiOutputLayoutro   rp   rq   rr   r¾  )rO  r3  r‹   r�   Úfake_incorrect_kernelsÚcontextrŸ  rš  r›  r‹  rK  rç   r¾  r8	  r<	  s   `            @@rƒ   rN  zFallbackKernel.createŸ  sÄ  øøø€ å"&Ô"QÐ!SÐà!'Ð/EÐ!EÐ!E�AŒGÔÐÍ;É=Ì=ð 	ð ð 	<ð 	<ð #�Ô" 6Ð;¨DÐ;Ð;Ð;°FÐ;Ð;ñØØØØØ!ð	<ð 	<ð 	<ñ 	<ô 	<ð 	<ð 	<ð 	<ð 	<ð 	<ð 	<øøøð 	<ð 	<ð 	<ð 	<ð —’ ¨nÑ=Ô=ˆØÐ!Ø�SÝ &Ð)Ñ)Ô)ØØØØØ"3ðñ ô ˆFˆFð Ð?Ð?Ð?Ñ?Ô?�6Ø�SÝ!¨Ð0Ñ0Ô0ØØØØØ"3ðñ ô ˆFð	ð 	ð 	ð 	ð 	ð 	ð 	ð6 "�/ .°"Ñ5Ô5ˆÝ�g¥¥e­TÐ2Ñ3Ô3ð 	'Ø$ˆFŒNˆNà%˜YˆFŒNØˆs   ¶AÁAÁ!Ac                óD   •— t          ¦   «                              ¦   «         S r�   )r>  re  r?  s    €rƒ   re  zFallbackKernel.apply_constraintæ  s   ø€ Ý‰wŒw×'Ò'Ñ)Ô)Ð)r„   r�   rÙ  r'  )r	  rÚ   )r  rü  rý  rÇ  rú  r!  rÏ  r  r	  r}  r×  rÓ  r*	  rm  r3	  ry  rN  re  r{  r|  s   @rƒ   rÍ  rÍ    s`  ø€ € € € € ð ðE4ð ðE4ð E4ð E4ð E4ð E4ð E4ð E4ð E4ðN8ð 8ð 8ð 8ðt ð  ð  ð  ðð ð ð. ðð ñ „\ðð(>ð >ð >ð
 ð  ð  ð#ð #ð #ðH(ð H(ð H(ðT03ð 03ð 03ð 03ðd ð
ð 
ð 
ñ „\ð
ð ðDð Dñ „[ðDðL*ð *ð *ð *ð *ð *ð *ð *ð *r„   rÍ  c                  ó:   ‡ — e Zd ZdZdd„Zdd„Zddœdˆ fd
„Zˆ xZS )ÚComplexViewz9View a complex number as two dtyped numbers or vice versarj   rÕ   c                ó   — dS rƒ  r…   r!  s    rƒ   r!  zComplexView.should_allocateî  r…  r„   r:  c                óB   — | j         d                              ¦   «         gS rn  rb  r!  s    rƒ   r×  z(ComplexView.get_inputs_that_alias_outputñ  s   € à”˜A”×'Ò'Ñ)Ô)Ð*Ð*r„   NrÎ  rk   c               óV   •— t          ¦   «                              ||||||¬¦  «         d S )NrÎ  )r>  rÇ  )r  r  r3  rš  rí  r‹  rK  r@  s          €rƒ   rÇ  zComplexView.__init__õ  sB   ø€ õ 	‰Œ×ÒØØØØØØ/ð 	ñ 	
ô 	
ð 	
ð 	
ð 	
r„   rá  rû  rÙ  )r  rü  rý  r  r!  r×  rÇ  r{  r|  s   @rƒ   rC	  rC	  ê  sz   ø€ € € € € àCÐCðð ð ð ð+ð +ð +ð +ð ð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
r„   rC	  c                  ó"   — e Zd ZU ded<   dd„ZdS )r>	  r}  rç   rj   r{  c                ó   — | j         S r�   rF  r!  s    rƒ   rñ   zMultiOutputLayout.get_device  rG  r„   Nræ  )r  rü  rý  rþ  rñ   r…   r„   rƒ   r>	  r>	  	  s6   € € € € € € àÐÐÑðð ð ð ð ð r„   r>	  c                  óF   ‡ — e Zd Zd„ Zdd„Zdˆ fd	„Zdd„Zdd„Zdd„Zˆ xZ	S )r:	  c                ó8  — t          |¦  «        dk    �r|d         \  }}t          |t          ¦  «        r$|                      |› d|› d�|dd …         ¦  «        S t          |t          ¦  «        rct
          j        j                             ||  	                    ¦   «         t          |¦  «        ¦  «        }|                      ||dd …         ¦  «        S t          |t          ¦  «        r$|                      |› d|› d�|dd …         ¦  «        S t          d|¦  «        ‚|S )Nr   ró  rô  r7   z['z']znon supported index type: )r    Ú
issubclassrp   Úcodegen_list_tuple_accessrq   rY   rè   r  Úcodegen_tuple_accessr”  rˆ   rr   rÉ  )r  Úbasenamer+  Úityperœ   Útuple_accesss         rƒ   rL	  z%MultiOutput.codegen_list_tuple_access  s"  € Ýˆw‰<Œ<˜!ÒÑØ˜q”z‰HˆE�1Ý˜%¥Ñ&Ô&ð JØ×5Ò5¸Ð6HÐ6HÀAÐ6HÐ6HÐ6HÈ'ÐRSÐRTÐRTÌ+ÑVÔVÐVÝ˜E¥5Ñ)Ô)ð 	Jå œwÔ3×HÒHØ˜dŸmšm™oœo­s°1©v¬vñ ô  �ð ×5Ò5°lÀGÈAÈBÈBÄKÑPÔPÐPÝ˜E¥4Ñ(Ô(ð JØ×5Ò5¸Ð6JÐ6JÀQÐ6JÐ6JÐ6JÈGÐTUÐTVÐTVÌKÑXÔXÐXå$Ð%AÀ5ÑIÔIÐIàˆOr„   rj   rk   c                óÂ   — |                      |                      ¦   «         |                      | j        d                              ¦   «         | j        ¦  «        ¦  «         d S rn  )Úcodegen_multi_outputr”  rL	  r   r+  rl  s     rƒ   rm  zMultiOutput.codegen'  sV   € Ø×$Ò$Ø�MŠM‰OŒOØ×*Ò*¨4¬;°q¬>×+BÒ+BÑ+DÔ+DÀdÄlÑSÔSñ	
ô 	
ð 	
ð 	
ð 	
r„   r  r  r+  úList[Tuple[Any, ...]]c                óæ   •— t          ¦   «                              d ||gd¦  «         t          j                             | ¦  «        | _        t          j                             | ¦  «         || _        d S rE  )r>  rÇ  rY   rè   r¦  r‡   r§  r+  )r  r  r  r+  r@  s       €rƒ   rÇ  zMultiOutput.__init__-  s[   ø€ Ý‰Œ×Ò˜˜v¨ w°Ñ3Ô3Ð3Ý”G×+Ò+¨DÑ1Ô1ˆŒ	Ý	Œ×"Ò" 4Ñ(Ô(Ð(ØˆŒˆˆr„   r  c                ó@   — | j         d                              ¦   «         S rn  )r   rÆ  r!  s    rƒ   rÆ  z$MultiOutput.get_unbacked_symbol_uses3  s   € ØŒ{˜1Œ~×6Ò6Ñ8Ô8Ð8r„   rÕ   c                ó   — dS rƒ  r…   r!  s    rƒ   r!  zMultiOutput.should_allocate6  r…  r„   r:  c                ó$   — d„ | j         D ¦   «         S )Nc                óª   — g | ]P}t          |t          ¦  «        r9t          |                     ¦   «         ¦  «        d k    ¯<|                     ¦   «         ‘ŒQS rÌ   )ro   rÍ  r    r×  r”  ©r›   Úinps     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_output9  s%   € ð
ð 
à”{ð
ñ 
ô 
ð 	
r„   rÙ  )r  r  r+  rS	  rj   rk   r'  rá  rû  )
r  rü  rý  rL	  rm  rÇ  rÆ  r!  r×  r{  r|  s   @rƒ   r:	  r:	    sœ   ø€ € € € € ðð ð ð$
ð 
ð 
ð 
ðð ð ð ð ð ð9ð 9ð 9ð 9ðð ð ð ð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
r„   r:	  c                  ó|  — e Zd ZU dZded<   dNd„ZdOd„ZdPd
„ZdQd„ZdRd„Z	dSd„Z
dTdUd„ZdVd„ZdWd„ZdXd„ZdWd„Z	 dYdZd „Zd[d!„Zd\d$„Z	 dYd]d&„Zd^d(„Zd_d*„Zd`d+„Zdad-„Zdbd/„Zdcd1„ZdNd2„ZdNd3„Zddd6„Zded8„ZdSd9„Zded:„Zdbd;„Z dfd=„Z!dgd?„Z"dhdA„Z#dTdidD„Z$e%djdF„¦   «         Z&dkdH„Z'djdI„Z(dldK„Z)e%dL„ ¦   «         Z*dSdM„Z+e+Z,dS )mrï  zC
    TensorBox / StorageBox allow in-place mutation of Tensors
    rf   r  rj   rÕ   c                ó4   — | j                              ¦   «         S r�   rz  r!  s    rƒ   r„  z!MutableBox.has_exceeded_max_readsL  r{  r„   r{  c                ó4   — | j                              ¦   «         S r�   ro  r!  s    rƒ   rñ   zMutableBox.get_deviceO  rm  r„   r†  c                ó4   — | j                              ¦   «         S r�   r*  r!  s    rƒ   r‰  zMutableBox.make_loaderR  ó   € ØŒy×$Ò$Ñ&Ô&Ð&r„   r‹  c                ó4   — | j                              ¦   «         S r�   )r  r�  r!  s    rƒ   r�  zMutableBox.make_indexerU  r�  r„   rŽ  c                ó4   — | j                              ¦   «         S r�   )r  r�  r!  s    rƒ   r�  zMutableBox.get_strideX  rm  r„   rˆ   c                ó4   — | j                              ¦   «         S r�   rr  r!  s    rƒ   r”  zMutableBox.get_name[  rs  r„   Nr—  r˜  c                ó6   — | j                              |¦  «        S r�   )r  r›  rš  s     rƒ   r›  zMutableBox.has_large_inner_fn^  s   € ØŒy×+Ò+¨IÑ6Ô6Ð6r„   rœ  r~   rk   c                ó6   — | j                              |¦  «        S r�   rw  rž  s     rƒ   rŸ  zMutableBox.mark_reusea  rx  r„   c                ó4   — | j                              ¦   «         S r�   r€  r!  s    rƒ   r¢  zMutableBox.realize_hintd  r�  r„   c                ó4   — | j                              ¦   «         S r�   )r  r¤  r!  s    rƒ   r¤  zMutableBox.unwrap_viewg  r_	  r„   c                ó4   — | j                              ¦   «         S r�   )r  r¦  r!  s    rƒ   r¦  zMutableBox.freeze_layoutj  s   € ØŒy×&Ò&Ñ(Ô(Ð(r„   Fr“   r§  r¨  c                ó8   — | j                              ||¦  «        S r�   )r  r«  rª  s      rƒ   r«  z*MutableBox.freeze_layout_with_stride_orderm  s   € ð Œy×8Ò8¸ÀÑNÔNÐNr„   c                ó6   — | j                              |¦  «        S r�   )r  r¯  r®  s     rƒ   r¯  z(MutableBox.freeze_layout_with_fill_orderr  s   € ØŒy×6Ò6°uÑ=Ô=Ð=r„   rå   r°  c                ó6   — | j                              |¦  «        S r�   )r  r³  r²  s     rƒ   r³  z(MutableBox.freeze_layout_with_same_orderu  s   € ØŒy×6Ò6°vÑ>Ô>Ð>r„   r´  c                ó8   — | j                              ||¦  «        S r�   )r  r·  r¶  s      rƒ   r·  z+MutableBox.freeze_layout_with_exact_stridesx  s   € ð Œy×9Ò9¸-ÈÑWÔWÐWr„   r¸  c                ó4   — | j                              ¦   «         S r�   )r  rº  r!  s    rƒ   rº  zMutableBox.get_read_writes}  ó   € ØŒy×(Ò(Ñ*Ô*Ð*r„   r»  c                ó4   — | j                              ¦   «         S r�   rG  r!  s    rƒ   r,  zMutableBox.get_reads€  r‡  r„   c                ó4   — | j                              ¦   «         S r�   rE  r!  s    rƒ   rÁ  zMutableBox.num_readsƒ  r‡  r„   ra   c                ó4   — | j                              ¦   «         S r�   rƒ  r!  s    rƒ   rÃ  zMutableBox.get_storage_numel†  r„  r„   rý   c                ó4   — | j                              ¦   «         S r�   r—  r!  s    rƒ   rÈ  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�   )r  rÏ  r!  s    rƒ   rÏ  zMutableBox.is_no_op’  rs  r„   rç   r}  c                ó6   — | j                              |¦  «        S r�   rœ  r€  s     rƒ   rÑ  zMutableBox.constant_to_device•  s   € ØŒy×+Ò+¨FÑ3Ô3Ð3r„   r:  c                ó4   — | j                              ¦   «         S r�   )r  rÓ  r!  s    rƒ   rÓ  zMutableBox.get_mutation_names˜  r•  r„   c                ó4   — | j                              ¦   «         S r�   )r  rÕ  r!  s    rƒ   rÕ  zMutableBox.get_operation_name›  r•  r„   c                ó4   — | j                              ¦   «         S r�   )r  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ƒ   ru  zMutableBox.realize¡  r~  r„   r  c                ó4   — | j                              ¦   «         S r�   r^  r!  s    rƒ   rÆ  z#MutableBox.get_unbacked_symbol_uses¤  r_  r„   r#  c                ó4   — | j                              ¦   «         S r�   rŒ  r!  s    rƒ   r-  zMutableBox.get_read_names§  r�  r„   r5  c                ó4   — | j                              ¦   «         S r�   )r  r7  r!  s    rƒ   r7  zMutableBox.get_defining_opª  rm	  r„   rv  rw  c                ó6   — | j                              |¦  «        S r�   )r  rz  ry  s     rƒ   rz  zMutableBox.codegen_reference­  s   € ØŒy×*Ò*¨6Ñ2Ô2Ð2r„   r  c                ó4   — | j                              ¦   «         S r�   ©r  r[  r!  s    rƒ   r  zMutableBox.layout°  s   € ð Œy×(Ò(Ñ*Ô*Ð*r„   rR  c                ó4   — | j                              ¦   «         S r�   rl  r!  s    rƒ   rí   zMutableBox.get_layoutµ  rm  r„   c                ó4   — | j                              ¦   «         S r�   r	  r!  s    rƒ   r[  zMutableBox.get_output_spec¸  rm	  r„   ra  c                ó4   — | j                              ¦   «         S r�   r'  r!  s    rƒ   rë   zMutableBox.get_size»  rs  r„   c                ó   — | j         j        S r�   )r  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 )NrD  z))r   ú
)ro   r  rï  r€   r  rF  rˆ   rG  )r  Úline0Úendlrf  r@  s        rƒ   rD  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þ  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×  ru  rÆ  r-  r7  rz  r  r  rí   r[  rë   ræ   rD  rx  r…   r„   rƒ   rï  rï  D  sa  € € € € € € ðð ð €L€L�Lð2ð 2ð 2ð 2ð&ð &ð &ð &ð'ð 'ð 'ð 'ð(ð (ð (ð (ð&ð &ð &ð &ð$ð $ð $ð $ð7ð 7ð 7ð 7ð 7ð+ð +ð +ð +ð(ð (ð (ð (ð'ð 'ð 'ð 'ð)ð )ð )ð )ð 7<ðOð Oð Oð Oð Oð
>ð >ð >ð >ð?ð ?ð ?ð ?ð DIðXð Xð Xð Xð Xð
+ð +ð +ð +ð%ð %ð %ð %ð%ð %ð %ð %ð-ð -ð -ð -ð.ð .ð .ð .ð.ð .ð .ð .ð%ð %ð %ð %ð$ð $ð $ð $ð4ð 4ð 4ð 4ð.ð .ð .ð .ð.ð .ð .ð .ð8ð 8ð 8ð 8ð#ð #ð #ð #ð4ð 4ð 4ð 4ð*ð *ð *ð *ð+ð +ð +ð +ð3ð 3ð 3ð 3ð 3ð ð+ð +ð +ñ „Xð+ð&ð &ð &ð &ð+ð +ð +ð +ð$ð $ð $ð $ð ðð ñ „Xðð ð  ð  ð  ð" €H€H€Hr„   rï  c                  ó$   — e Zd Zed„ ¦   «         ZdS )re   c                ó:   — t          t          | ¦  «        ¦  «        S r�   )re   rU  )r  s    rƒ   rN  zTensorBox.create×  s   € å� DÑ)Ô)Ñ*Ô*Ð*r„   N)r  rü  rý  r  rN  r…   r„   rƒ   re   re   Ö  s-   € € € € € Øð+ð +ñ „\ð+ð +ð +r„   c                  óF   — e Zd Zd„ Zd„ Zdd„Zdd„Zdd	„Zd
„ Zdd„Z	d„ Z
dS )rU  c                óœ   — t          | j        t          t          f¦  «        r*| j                             ¦   «         t
          j        j        v S dS rƒ  )ro   r  r)  rW  r”  rY   rè   Úgraph_inputsr!  s    rƒ   r)  zStorageBox.is_input_bufferÝ  s?   € Ý�d”i¥+­Ð!?Ñ@Ô@ð 	@Ø”9×%Ò%Ñ'Ô'­1¬7Ô+?Ð?Ð?Øˆur„   c                óŠ   — t          | j        t          ¦  «        o)| j                             ¦   «         t          j        j        v S r�   )ro   r  r˜  r”  rY   rè   r’  r!  s    rƒ   r‰  zStorageBox.is_module_bufferâ  s6   € å�t”y¥>Ñ3Ô3ð :Ø”	×"Ò"Ñ$Ô$­¬Ô(9Ð9ð	
r„   rj   rý   c           	     ó€  — t          | j        t          t          t          t
          t          f¦  «        r| j                             ¦   «         S t          | j        t          t          t          t          f¦  «        sJ t          | j        ¦  «        ¦   «         ‚| j                             ¦   «         }| j                             ¦   «         }t          d t          | j                             ¦   «         | j                             ¦   «         | j                             ¦   «         ¬¦  «        | j        ¬¦  «        | _        t&          j                             | j        ¦  «        | j        _        t&          j                             | j        ¦  «         | j        | j        _        || j        _        || j        _        | j        j        S )Nr  r  )ro   r  r"  r¤  r)  rW  rŸ  r”  r…  rè  ræ  r%  r€   r3  r0  rî   rñ   rð   rë   rY   rè   r¦  r‡   r§  r  r  r  )r  r  r  s      rƒ   ru  zStorageBox.realizeè  sq  € ÝØŒIåÝÝÝÝðñ	
ô 	
ð 
	(ð ”9×%Ò%Ñ'Ô'Ð'Ý˜$œ)¥iµ½DÅ$Ð%GÑHÔHð 	
ð 	
Í$ØŒIñK
ô K
ñ 	
ô 	
ÐHð ”i×/Ò/Ñ1Ô1ˆØ”I×+Ò+Ñ-Ô-ˆ	Ý"ØÝ!Ø”y×+Ò+Ñ-Ô-Ø”i×)Ò)Ñ+Ô+Ø”Y×'Ò'Ñ)Ô)ðñ ô ð
 ”ð
ñ 
ô 
ˆŒ	õ œ×0Ò0°´Ñ;Ô;ˆŒ	ŒÝ	Œ×"Ò" 4¤9Ñ-Ô-Ð-Ø œLˆŒ	ÔØ +ˆŒ	ÔØ'ˆŒ	ÔØŒyŒ~Ðr„   rk   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.
        r7   N)ro   r  r…  rè  rb  Únontrivial_read_countru  r!  s    rƒ   r¢  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„   rÕ   c                ó¢   — t          | j        t          ¦  «        o5|                      ¦   «         t          j        k    p|                      ¦   «         S r�   )ro   r  r…  rÁ  r8   Úrealize_acc_reads_thresholdr›  r!  s    rƒ   r„  z!StorageBox.has_exceeded_max_reads  sD   € Ý˜$œ)¥YÑ/Ô/ð 
Ø�NŠNÑÔ�vÔAÒAð )Ø×&Ò&Ñ(Ô(ð	
r„   c                ó^  ‡— |dk    r¥t          | j        t          t          f¦  «        r„t	          | j        ¦  «        r:| j                             ¦   «         Šddg}t          ˆfd„|D ¦   «         ¦  «        rdS |                      ¦   «         t          j	        k    p|  
                    ¦   «         S dS )zj
        A heuristic to decide if we should realize a tensor
        that is used multiple times.
        r7   ÚexpÚsigmoidc              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)ro   r  r…  rè  r
  rb  r¨  rÁ  r8   Úrealize_reads_thresholdr›  )r  rœ  Ú	heavy_opsr˜	  s      @rƒ   Úshould_realize_on_reusez"StorageBox.should_realize_on_reuse  s±   ø€ ð
 �1Š9ˆ9� D¤Iµ	½9Ð/EÑFÔFˆ9Ý�d”iÑ Ô ð  àœ)×4Ò4Ñ6Ô6�Ø" IÐ.�	ÝÐ@Ð@Ð@Ð@°iÐ@Ñ@Ô@Ñ@Ô@ð  Ø˜4à—’Ñ Ô ¥6Ô#AÒAð -Ø×*Ò*Ñ,Ô,ðð ˆur„   rœ  r~   c                ó\   — |                       |¦  «        r|                      ¦   «          d S d S r�   )r›	  ru  rž  s     rƒ   rŸ  zStorageBox.mark_reuse+  s3   € Ø×'Ò'¨Ñ.Ô.ð 	Ø�LŠL‰NŒNˆNˆNˆNð	ð 	r„   c                ó4   — | j                              ¦   «         S r�   rE  r!  s    rƒ   rÁ  zStorageBox.num_reads/  r‡  r„   Nrä  rÙ  rá  rí  )r  rü  rý  r)  r‰  ru  r¢  r„  r›	  rŸ  rÁ  r…   r„   rƒ   rU  rU  Ü  s¡   € € € € € ðð ð ð

ð 
ð 
ðð ð ð ðBð ð ð ð
ð 
ð 
ð 
ðð ð ð$ð ð ð ð%ð %ð %ð %ð %r„   rU  c                  ó2   — e Zd ZU ded<   ded<   dZded<   dS )ÚSubgraphrˆ   r‡   ztorch.fx.GraphModuleÚgraph_moduleNzOptional[GraphLowering]rè   )r  rü  rý  rþ  rè   r…   r„   rƒ   rŸ	  rŸ	  3  s8   € € € € € € à€I€I�IØ&Ð&Ð&Ñ&Ø%)€EÐ)Ð)Ð)Ñ)Ð)Ð)r„   rŸ	  ÚbuffersúSequence[IRNode]c                óˆ   — d„ | D ¦   «         } t          t          d„ | D ¦   «         ¦  «        ¦  «        t          | ¦  «        k     S )Nc                ód   — g | ]-}t          |t          ¦  «        r|                     ¦   «         n|‘Œ.S r…   )ro   rW  r¤  ©r›   rL  s     rƒ   rž   z(_has_aliased_buffers.<locals>.<listcomp>;  sH   € ð ð ð àõ !+¨6µ?Ñ CÔ CÐOˆ×ÒÑÔÐÈðð ð r„   c              3  ó4   K  — | ]}t          |¦  «        V — Œd S r�   )r  r¥	  s     rƒ   r)  z'_has_aliased_buffers.<locals>.<genexpr>@  s(   è è € Ð;Ð;¨�"˜V™*œ*Ð;Ð;Ð;Ð;Ð;Ð;r„   )r    r2   )r¡	  s    rƒ   Ú_has_aliased_buffersr§	  :  sR   € ðð àðñ ô €Gõ
 �zÐ;Ð;°7Ð;Ñ;Ô;Ñ;Ô;Ñ<Ô<½sÀ7¹|¼|ÒKÐKr„   c                  ól   ‡ — e Zd ZU dZded<   dZded<   dZded<   dˆ fd„Zedd„¦   «         Z	dd„Z
ˆ xZS )ÚInvokeSubgraphNúOptional[Subgraph]ÚsubgraphúOptional[List[TensorBox]]ÚoperandsúOptional[List[MultiOutput]]r¾  rŸ	  úList[TensorBox]r  r>	  rj   rk   c                óä   •— t          ¦   «                              d ||¬¦  «         || _        t          j                             | ¦  «        | _        t          j                             | ¦  «         d S rN  )r>  rÇ  r«	  rY   rè   r¦  r‡   r§  )r  r«	  r­	  r  r@  s       €rƒ   rÇ  zInvokeSubgraph.__init__I  sk   ø€ õ 	‰Œ×ÒØØØð 	ñ 	
ô 	
ð 	
ð
 !ˆŒÝ”G×+Ò+¨DÑ1Ô1ˆŒ	Ý	Œ×"Ò" 4Ñ(Ô(Ð(Ð(Ð(r„   c                ó”  ‡ ‡— t           j        j        j        d         }d„ |D ¦   «         }ˆ fd„|D ¦   «         }d„ }g }t	          |¦  «        D ]|\  }}t          |t          ¦  «        r|                     |¦  «         Œ0 |||                              ¦   «         ¦  «        }	|                     ‰  	                    ||	¦  «        ¦  «         Œ}|}|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 ‚t#          ||t%          |¬¦  «        ¬¦  «        Šˆfd„t	          |
¦  «        D ¦   «         }
|
‰_        |
S )	Nr  c                ó(   — g | ]}|j         d          ‘ŒS ©rm  ©r„  rX  s     rƒ   rž   z)InvokeSubgraph.create.<locals>.<listcomp>Y  ó   € Ð<Ð<Ð<¨1˜œ œÐ<Ð<Ð<r„   c                ó:   •— g | ]}‰                      |¦  «        ‘ŒS r…   r�  rŽ  s     €rƒ   rž   z)InvokeSubgraph.create.<locals>.<listcomp>^  ó'   ø€ Ð;Ð;Ð;¨Q�C×%Ò% aÑ(Ô(Ð;Ð;Ð;r„   c                ó   — d„ | D ¦   «         S )Nc                ó^   — g | ]*}t          |t          j        ¦  «        r|j        j        n|‘Œ+S r…   )ro   rt   r;	  r�   r  r2  s     rƒ   rž   zBInvokeSubgraph.create.<locals>.handle_sym_expr.<locals>.<listcomp>a  s1   € ÐVÐVÐVÈ!¥:¨aµ´Ñ#>Ô#>ÐE�A”F”K�KÀAÐVÐVÐVr„   r…   r­  s    rƒ   Úhandle_sym_exprz.InvokeSubgraph.create.<locals>.handle_sym_expr`  s   € ØVÐVÈvÐVÑVÔVÐVr„   ©ÚgmÚexample_inputsÚsubgraph_namerF  )r«	  r­	  r  c                ó*  •— g | ]�\  }}t          t          |                     ¦   «         |                     ¦   «         |                     ¦   «         |                     ¦   «         |                     ¦   «         j        ¬ ¦  «        ‰t          |fg¦  «        ‘Œ�S ©r�  ©	r:	  rj  rñ   rð   rë   r�  rí   r›  rp   )r›   rœ   r	  Úinvoke_subgraphs      €rƒ   rž   z)InvokeSubgraph.create.<locals>.<listcomp>ˆ  s¥   ø€ ð 
ð 
ð 
ñ ��6õ ÝØ!×,Ò,Ñ.Ô.Ø ×*Ò*Ñ,Ô,ØŸšÑ*Ô*Ø!×,Ò,Ñ.Ô.Ø!×,Ò,Ñ.Ô.Ô5ðñ ô ð  Ý˜��ñ
ô 
ð
ð 
ð 
r„   )rY   rè   rÂ  r‹   rÇ   ro   r<  r&  rå   r´  Úmake_subgraphr 	  r‡   Úset_graph_handlerÚrunÚgraph_outputsrñ   r©	  r>	  r¾  )rO  r«	  r­	  Úfx_operandsÚfake_operandsrº	  Únew_operandsrÁ   ÚoperandÚexample_strider¾  rç   rÂ	  s   `           @rƒ   rN  zInvokeSubgraph.createU  sj  øø€ õ ”gÔ*Ô/°Ô3ˆØ<Ð<°Ð<Ñ<Ô<ˆð
 <Ð;Ð;Ð;°(Ð;Ñ;Ô;ˆð	Wð 	Wð 	Wð ˆÝ% hÑ/Ô/ð 	Xð 	X‰LˆC�Ý˜'Õ#8Ñ9Ô9ð XØ×#Ò# GÑ,Ô,Ð,Ð,à!0 °¸sÔ1C×1JÒ1JÑ1LÔ1LÑ!MÔ!M�Ø×#Ò# C×$=Ò$=¸gÀ~Ñ$VÔ$VÑWÔWÐWÐWàˆàŒ>Ð!åœ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ð
ñ 
ô 
ˆð
ð 
ð 
ð 
õ ' wÑ/Ô/ð
ñ 
ô 
ˆð #*ˆÔØˆs   ÄD9Ä9D=Å D=c                ó0   — |                      | ¦  «         d S r�   )Úcodegen_invoke_subgraphrl  s     rƒ   rm  zInvokeSubgraph.codegenš  r  r„   )r«	  rŸ	  r­	  r¯	  r  r>	  rj   rk   )r«	  rŸ	  rÙ  )r  rü  rý  r«	  rþ  r­	  r¾  rÇ  ry  rN  rm  r{  r|  s   @rƒ   r©	  r©	  C  s«   ø€ € € € € € à#'€HÐ'Ð'Ð'Ñ'Ø*.€HÐ.Ð.Ð.Ñ.Ø+/€GÐ/Ð/Ð/Ñ/ð
)ð 
)ð 
)ð 
)ð 
)ð 
)ð ðBð Bð Bñ „[ðBðH.ð .ð .ð .ð .ð .ð .ð .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ˆ fd„Z	e
dd„¦   «         Zdd„Zˆ xZS )ÚConditionalNrÜ   Ú	predicater¬	  r­	  rª	  Útrue_subgraphÚfalse_subgraphr®	  r¾  rf   r¯	  rŸ	  r  r>	  rj   rk   c                ó�  •— || _         || _        || _        || _        g }t	          |t
          ¦  «        s|                     |¦  «         |                     |¦  «         t          ¦   «          	                    d ||¬¦  «         t          j                             | ¦  «        | _        t          j                             | ¦  «         d S rN  )rÐ	  r­	  rÑ	  rÒ	  ro   r<  r&  r€  r>  rÇ  rY   rè   r¦  r‡   r§  )r  rÐ	  r­	  rÑ	  rÒ	  r  r   r@  s          €rƒ   rÇ  zConditional.__init__¦  s¾   ø€ ð #ˆŒØ ˆŒØ*ˆÔØ,ˆÔàˆÝ˜)Õ%:Ñ;Ô;ð 	%Ø�MŠM˜)Ñ$Ô$Ð$Ø�Š�hÑÔÐå‰Œ×ÒØØØð 	ñ 	
ô 	
ð 	
õ ”G×+Ò+¨DÑ1Ô1ˆŒ	Ý	Œ×"Ò" 4Ñ(Ô(Ð(Ð(Ð(r„   re   Útrue_fnÚfalse_fnc           	     ó^  ‡ ‡— ‰                       |¦  «        }ˆ fd„|D ¦   «         }t          j        j        j        d         }d„ |D ¦   «         }||fD ]z}|j        €qt          j                             |j        ||j        ¬¦  «        |_        t          j        |j        ¦  «        5   |j        j	        |Ž  d d d ¦  «         n# 1 swxY w Y   Œ{|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¦   «         ‚|                     ¦   «         |                     ¦   «         k    sJ |||f¦   «         ‚|                     ¦   «         |                     ¦   «         k    sJ |||f¦   «         ‚|                     ¦   «         j        |                     ¦   «         j        k    sJ |||f¦   «         ‚�Œ(t-          |t.          ¦  «        s|                     ¦   «         }n7t          |¦  «        d	k    s
J d
¦   «         ‚|d	                              ¦   «         }t1          ||||t3          |¬¦  «        ¬¦  «        Šˆfd„t          |¦  «        D ¦   «         }|‰_        |S )Nc                ó:   •— g | ]}‰                      |¦  «        ‘ŒS r…   r�  rŽ  s     €rƒ   rž   z&Conditional.create.<locals>.<listcomp>Ê  r·	  r„   r  c                ó(   — g | ]}|j         d          ‘ŒS r³	  r´	  rX  s     rƒ   rž   z&Conditional.create.<locals>.<listcomp>Í  rµ	  r„   r»	  rÔ	  rÕ	  zVOutput aliasing is currently not supported in compiled torch.cond. The outputs of the z% subgraph of torch.cond are aliased: r   zQWhen predicate is not a Tensor, there must be at least one operand in torch.cond.rF  )rÐ	  r­	  rÑ	  rÒ	  r  c                ó*  •— g | ]�\  }}t          t          |                     ¦   «         |                     ¦   «         |                     ¦   «         |                     ¦   «         |                     ¦   «         j        ¬ ¦  «        ‰t          |fg¦  «        ‘Œ�S rÀ	  rÁ	  )r›   rœ   r	  Úconditionals      €rƒ   rž   z&Conditional.create.<locals>.<listcomp>ÿ  s¥   ø€ ð 
ð 
ð 
ñ ��6õ ÝØ!×,Ò,Ñ.Ô.Ø ×*Ò*Ñ,Ô,ØŸšÑ*Ô*Ø!×,Ò,Ñ.Ô.Ø!×,Ò,Ñ.Ô.Ô5ðñ ô ð Ý˜��ñ
ô 
ð
ð 
ð 
r„   )rã  rY   rè   rÂ  r‹   rÃ	  r 	  r‡   rÄ	  rÅ	  rÆ	  r§	  rÉ  r    rÇ   r¤   rë   r�  rñ   rð   rí   r›  ro   r<  rÏ	  r>	  r¾  )rO  rÐ	  rÔ	  rÕ	  r­	  rÇ	  rÈ	  r«	  Útrue_outputsÚfalse_outputsr‡   r¾  rœ   ÚtoÚforç   rÚ	  s   `               @rƒ   rN  zConditional.createÁ  s¼  øø€ ð ×%Ò% iÑ0Ô0ˆ	Ø;Ð;Ð;Ð;°(Ð;Ñ;Ô;ˆå”gÔ*Ô/°Ô3ˆØ<Ð<°Ð<Ñ<Ô<ˆà  (Ð+ð 		7ð 		7ˆHØŒ~Ð%å!"¤×!6Ò!6ØÔ,Ø#0Ø"*¤-ð "7ñ "ô "�”õ
 Ô(¨¬Ñ8Ô8ð 7ð 7Ø&�H”NÔ&¨Ð6Ð6ð7ð 7ð 7ñ 7ô 7ð 7ð 7ð 7ð 7ð 7ð 7øøøð 7ð 7ð 7ð 7øð ”}Ô2ˆØ œÔ4ˆà(¨,Ð7¸*ÀmÐ9TÐUð 	ð 	‰MˆD�'Ý# LÑ1Ô1ð Ý$ð_Ø*.ð_ð _ØU\ð_ð _ñô ð ðõ �<Ñ Ô ¥C¨Ñ$6Ô$6Ò6Ð6Ð6¸À}Ð8UÑ6Ô6Ð6Ý$¥S¨°}Ñ%EÔ%EÑFÔFð 	Qñ 	Q‰KˆA‰x��BØ—;’;‘=”= B§K¢K¡M¤MÒ1Ð1Ð1°A°r¸2°;Ñ1Ô1Ð1Ø—=’=‘?”? b§m¢m¡o¤oÒ5Ð5Ð5¸¸2¸r°{Ñ5Ô5Ð5Ø—=’=‘?”? b§m¢m¡o¤oÒ5Ð5Ð5¸¸2¸r°{Ñ5Ô5Ð5Ø—<’<‘>”> R§\¢\¡^¤^Ò3Ð3Ð3°a¸¸R°[Ñ3Ô3Ð3Ø—=’=‘?”?Ô)¨R¯]ª]©_¬_Ô-CÒCÐCÐCÀaÈÈRÀ[ÑCÔCÐCÑCå˜)Õ%:Ñ;Ô;ð 	.à×)Ò)Ñ+Ô+ˆFˆFõ �H‘” Ò!Ð!Ð!Øbñ "Ô!Ð!à˜a”[×+Ò+Ñ-Ô-ˆFå!ØØØ!Ø#Ý$¨FÐ3Ñ3Ô3ð
ñ 
ô 
ˆð
ð 
ð 
ð 
õ ' |Ñ4Ô4ð
ñ 
ô 
ˆð" &ˆÔØˆs   Â%CÃC	ÃC	c                ó0   — |                      | ¦  «         d S r�   )Úcodegen_conditionalrl  s     rƒ   rm  zConditional.codegen  s   € Ø×#Ò# DÑ)Ô)Ð)Ð)Ð)r„   )rÐ	  rf   r­	  r¯	  rÑ	  rŸ	  rÒ	  rŸ	  r  r>	  rj   rk   )rÐ	  re   rÔ	  rŸ	  rÕ	  rŸ	  r­	  r¯	  rÙ  )r  rü  rý  rÐ	  rþ  r­	  rÑ	  rÒ	  r¾  rÇ  ry  rN  rm  r{  r|  s   @rƒ   rÏ	  rÏ	  ž  sÍ   ø€ € € € € € à"&€IÐ&Ð&Ð&Ñ&Ø*.€HÐ.Ð.Ð.Ñ.Ø(,€MÐ,Ð,Ð,Ñ,Ø)-€NÐ-Ð-Ð-Ñ-Ø+/€GÐ/Ð/Ð/Ñ/ð)ð )ð )ð )ð )ð )ð6 ðOð Oð Oñ „[ðOðb*ð *ð *ð *ð *ð *ð *ð *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ˆ fd„Z	e
dd„¦   «         Zdd„Zˆ xZS )Ú	WhileLoopNr¬	  Úcarried_inputsÚadditional_inputsrª	  Úcond_subgraphÚbody_subgraphr®	  r¾  r¯	  rŸ	  r  r>	  rj   rk   c                ó  •— || _         || _        || _        || _        t	          ¦   «                              d |||z   ¬¦  «         t          j                             | ¦  «        | _	        t          j         
                    | ¦  «         d S rN  )rã	  rä	  rå	  ræ	  r>  rÇ  rY   rè   r¦  r‡   r§  )r  rã	  rä	  rå	  ræ	  r  r@  s         €rƒ   rÇ  zWhileLoop.__init__  sŠ   ø€ ð -ˆÔØ!2ˆÔØ*ˆÔØ*ˆÔå‰Œ×ÒØØØ!Ð$5Ñ5ð 	ñ 	
ô 	
ð 	
õ ”G×+Ò+¨DÑ1Ô1ˆŒ	Ý	Œ×"Ò" 4Ñ(Ô(Ð(Ð(Ð(r„   Úcond_fnÚbody_fnc           	     ó  ‡ ‡— ˆ fd„|D ¦   «         }ˆ fd„|D ¦   «         }||z   }t           j        j        j        d         t           j        j        j        d         z   }d„ |D ¦   «         }||fD ]z}|j        €qt           j                             |j        ||j        ¬¦  «        |_        t          j        |j        ¦  «        5   |j        j        |Ž  d d d ¦  «         n# 1 swxY w Y   Œ{|j        j	        }	|j        j	        }
t          |
¦  «        rt          d|
› �¦  «        ‚t          |	¦  «        dk    s
J |	¦   «         ‚|	d	                              ¦   «         t          j        k    s
J |	¦   «         ‚t          |	d	                              ¦   «         ¦  «        d	k    s
J |	¦   «         ‚t          |¦  «        d	k    s
J d
¦   «         ‚|d	                              ¦   «         }t          |¦  «        t          |
¦  «        k    sJ ||
f¦   «         ‚t%          t'          ||
¦  «        ¦  «        D �]&\  }\  }}dd„} ||                     ¦   «         |                     ¦   «         ¦  «          ||                     ¦   «         |                     ¦   «         ¦  «         |                     ¦   «         |                     ¦   «         cxk    r|k    sn J ||||f¦   «         ‚|                     ¦   «         |                     ¦   «         k    sJ |||f¦   «         ‚|                     ¦   «         j        |                     ¦   «         j        k    sJ |||f¦   «         ‚�Œ(t/          ||||t1          |¬¦  «        ¬¦  «        Šˆfd„t%          |
¦  «        D ¦   «         }t'          ||¦  «        D ]`\  }}|                     ¦   «         t           j        j        v r6t           j        j                             |                     ¦   «         ¦  «         Œa|‰_        |S )Nc                ó:   •— g | ]}‰                      |¦  «        ‘ŒS r…   r�  rŽ  s     €rƒ   rž   z$WhileLoop.create.<locals>.<listcomp>=  s'   ø€ ÐGÐGÐG°1˜#×+Ò+¨AÑ.Ô.ÐGÐGÐGr„   c                ó:   •— g | ]}‰                      |¦  «        ‘ŒS r…   r�  rŽ  s     €rƒ   rž   z$WhileLoop.create.<locals>.<listcomp>>  s'   ø€ ÐMÐMÐM°a˜S×.Ò.¨qÑ1Ô1ÐMÐMÐMr„   éþÿÿÿr  c                ó(   — g | ]}|j         d          ‘ŒS r³	  r´	  rX  s     rƒ   rž   z$WhileLoop.create.<locals>.<listcomp>B  s   € Ð@Ð@Ð@¨Q˜1œ6 %œ=Ð@Ð@Ð@r„   r»	  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: r7   r   z9torch.while_loop is assumed to have at least one operand.Ú	lhs_exprsúList[Union[int, sympy.expr]]Ú	rhs_exprsrj   rk   c                ó|   — t          | |¦  «        D ]*\  }}t          j        j                             ||¦  «         Œ+d S r�   )r¤   rY   rè   ré   rì  )rï	  rñ	  ÚlhsÚrhss       rƒ   Ú_guard_list_equalsz,WhileLoop.create.<locals>._guard_list_equalsg  sI   € õ !$ I¨yÑ 9Ô 9ð <ð <‘H�C˜Ý”GÔ$×1Ò1°#°sÑ;Ô;Ð;Ð;ð<ð <r„   rF  )rã	  rä	  rå	  ræ	  r  c                ó*  •— g | ]�\  }}t          t          |                     ¦   «         |                     ¦   «         |                     ¦   «         |                     ¦   «         |                     ¦   «         j        ¬ ¦  «        ‰t          |fg¦  «        ‘Œ�S rÀ	  rÁ	  )r›   rœ   r	  Ú
while_loops      €rƒ   rž   z$WhileLoop.create.<locals>.<listcomp>  s¥   ø€ ð 
ð 
ð 
ñ ��6õ ÝØ!×,Ò,Ñ.Ô.Ø ×*Ò*Ñ,Ô,ØŸšÑ*Ô*Ø!×,Ò,Ñ.Ô.Ø!×,Ò,Ñ.Ô.Ô5ðñ ô ð Ý˜��ñ
ô 
ð
ð 
ð 
r„   )rï	  rð	  rñ	  rð	  rj   rk   )rY   rè   rÂ  r‹   rÃ	  r 	  r‡   rÄ	  rÅ	  rÆ	  r§	  rÉ  r    rð   rt   rÕ   rë   rñ   rÇ   r¤   r�  rí   r›  râ	  r>	  r”  rŒ	  r�  r¦  r¾  )rO  rè	  ré	  rã	  rä	  Ú
all_inputsÚfx_all_inputsÚfake_all_inputsr«	  Úcond_outputsÚbody_outputsrç   rœ   ÚopÚborõ	  r¾  rZ	  rÏ   r÷	  s   `                  @rƒ   rN  zWhileLoop.create5  sz  øø€ ð HÐGÐGÐG¸ÐGÑGÔGˆØMÐMÐMÐMÐ;LÐMÑMÔMÐØ#Ð&7Ñ7ˆ
åœÔ,Ô1°"Ô5½¼Ô8LÔ8QÐRTÔ8UÑUˆØ@Ð@°-Ð@Ñ@Ô@ˆà  'Ð*ð 		9ð 		9ˆHØŒ~Ð%å!"¤×!6Ò!6ØÔ,Ø#0Ø"*¤-ð "7ñ "ô "�”õ
 Ô(¨¬Ñ8Ô8ð 9ð 9Ø&�H”NÔ&¨Ð8Ð8ð9ð 9ð 9ñ 9ô 9ð 9ð 9ð 9ð 9ð 9ð 9øøøð 9ð 9ð 9ð 9øð ”}Ô2ˆØ”}Ô2ˆå Ñ-Ô-ð 	Ý ðgØXdðgð gñô ð õ �<Ñ Ô  AÒ%Ð%Ð% |Ñ%Ô%Ð%Ø˜AŒ×(Ò(Ñ*Ô*­e¬jÒ8Ð8Ð8¸,Ñ8Ô8Ð8Ý�< ”?×+Ò+Ñ-Ô-Ñ.Ô.°!Ò3Ð3Ð3°\Ñ3Ô3Ð3õ �
‰OŒO˜aÒÐÐØFñ  ÔÐð ˜A”×)Ò)Ñ+Ô+ˆõ �>Ñ"Ô"¥c¨,Ñ&7Ô&7Ò7Ð7Ð7¸.È,Ð9WÑ7Ô7Ð7Ý$¥S¨¸Ñ%FÔ%FÑGÔGð 	Qñ 	Q‰KˆA‰x��Bð<ð <ð <ð <ð Ð˜rŸ{š{™}œ}¨b¯kªk©m¬mÑ<Ô<Ð<ØÐ˜rŸ}š}™œ°·²±´Ñ@Ô@Ð@ð —=’=‘?”? b§m¢m¡o¤oÐ?Ð?Ò?Ð?¸Ò?Ð?Ð?Ð?Ð?À!ÀRÈÈVÐATÑ?Ô?Ð?Ø—<’<‘>”> R§\¢\¡^¤^Ò3Ð3Ð3°a¸¸R°[Ñ3Ô3Ð3Ø—=’=‘?”?Ô)¨R¯]ª]©_¬_Ô-CÒCÐCÐCÀaÈÈRÀ[ÑCÔCÐCÑCåØ)Ø/Ø!Ø!å$¨FÐ3Ñ3Ô3ð
ñ 
ô 
ˆ
ð
ð 
ð 
ð 
õ ' |Ñ4Ô4ð
ñ 
ô 
ˆõ ˜N¨GÑ4Ô4ð 	@ð 	@‰HˆC�Ø�|Š|‰~Œ~¥¤Ô!5Ð5Ð5õ ”Ô+×/Ò/°·²±´Ñ?Ô?Ð?øà$ˆ
ÔØˆs   Ã CÃC 	Ã#C 	c                ó0   — |                      | ¦  «         d S r�   )Úcodegen_while_looprl  s     rƒ   rm  zWhileLoop.codegenš  s   € Ø×"Ò" 4Ñ(Ô(Ð(Ð(Ð(r„   )rã	  r¯	  rä	  r¯	  rå	  rŸ	  ræ	  rŸ	  r  r>	  rj   rk   )rè	  rŸ	  ré	  rŸ	  rã	  r¯	  rä	  r¯	  rÙ  )r  rü  rý  rã	  rþ  rä	  rå	  ræ	  r¾  rÇ  ry  rN  rm  r{  r|  s   @rƒ   râ	  râ	    sÎ   ø€ € € € € € à04€NÐ4Ð4Ð4Ñ4Ø37ÐÐ7Ð7Ð7Ñ7Ø(,€MÐ,Ð,Ð,Ñ,Ø(,€MÐ,Ð,Ð,Ñ,Ø+/€GÐ/Ð/Ð/Ñ/ð)ð )ð )ð )ð )ð )ð, ðbð bð bñ „[ðbðH)ð )ð )ð )ð )ð )ð )ð )r„   râ	  c                  ó>   ‡ — e Zd Z	 d
ddœdˆ fd„Zdˆ fd„Zdd	„Zˆ xZS )r   NrÎ  rj   rk   c          	     ó  •— t          ¦   «                              |||||d |¬¦  «         ddlm}  ||g |¢|¢R |¦  «        }	|	€J ‚|	| _        t
          j        j                             |	d ¦  «        | _	        | t
          j        j        |	<   d S )N)r�   rK  r   )Úget_effect_key)
r>  rÇ  Útorch._higher_order_ops.effectsr
  Úeffect_typerY   rè   Úeffectful_opsrŠ  Úprev_effect_buffer)r  r  r3  rš  rí  r‹  r�   rK  r
  r
  r@  s             €rƒ   rÇ  zEffectfulKernel.__init__Ÿ  s·   ø€ õ 	‰Œ×ÒØØØØØØØ/ð 	ñ 	
ô 	
ð 	
ð 	CÐBÐBÐBÐBÐBà$�n VÐ-L¨~Ð-LÀÐ-LÐ-LÈfÑUÔUˆØÐ&Ð&Ð&Ø&ˆÔÝ"#¤'Ô"7×";Ò";¸KÈÑ"NÔ"NˆÔØ-1�ŒÔ˜kÑ*Ð*Ð*r„   r¸  c                óÜ   •— t          ¦   «                              ¦   «         }| j        �C|j                             t          j        | j                             ¦   «         ¦  «        ¦  «         |S r�   )r>  rº  r
  r¾  r¦  r9   rR  r”  )r  r*  r@  s     €rƒ   rº  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Æ  r8  r„   r�   rÙ  rô  rá  )r  rü  rý  rÇ  rº  r}  r{  r|  s   @rƒ   r   r   ž  sˆ   ø€ € € € € ð ð2ð ð2ð 2ð 2ð 2ð 2ð 2ð 2ð 2ð:ð ð ð ð ð ðð ð ð ð ð ð ð r„   r   c                  ó4   — e Zd ZU ded<   ded<   d„ Zddd
„ZdS )r  rˆ   r‡   ztorch._C.ScriptObjectrö   c                ó   — | j         S r�   r&  r!  s    rƒ   r”  zTorchBindObject.get_nameÏ  rÿ  r„   Nrv  rw  rj   c                ó   — | j         S r�   r&  ry  s     rƒ   rz  z!TorchBindObject.codegen_referenceÒ  rÿ  r„   r�   rå  )r  rü  rý  rþ  r”  rz  r…   r„   rƒ   r  r  Ê  sS   € € € € € € à€I€I�IØ Ð Ð Ñ ðð ð ðð ð ð ð ð ð 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 )Ú_CollectiveKernelrj   rÕ   c                ó   — dS rƒ  r…   r!  s    rƒ   r!  z!_CollectiveKernel.should_allocate×  r…  r„   c                ó   — dS rš  r…   r!  s    rƒ   r}  z"_CollectiveKernel.has_side_effectsÚ  r8  r„   NrF  rý   rk   c                óÊ   — t          | j        ¦  «        t          j        j        u s
J d¦   «         ‚| j        }|j        j        | _        d„ |j        j        D ¦   «         | _	        d S )Nz,Setting cpp kernel needs a valid op_overloadc                ó*   — g | ]}|j         ¯	|j        ‘ŒS r…   r\  rX  s     rƒ   rž   z9_CollectiveKernel.set_cpp_kernel_name.<locals>.<listcomp>æ  s1   € ð .
ð .
ð .
Ø¸¼ð.
ØŒFð.
ð .
ð .
r„   )
r€   rH  rt   r^  r_  r`  r‡   rF  ra  rG  )r  rF  r3  s      rƒ   rO  z%_CollectiveKernel.set_cpp_kernel_nameß  so   € å�Ô!Ñ"Ô"¥e¤jÔ&;Ð;Ð;Ð;Ø9ñ <Ô;Ð;àÔ!ˆØ%œ~Ô2ˆÔð.
ð .
Ø"œNÔ4ð.
ñ .
ô .
ˆÔ*Ð*Ð*r„   r   ú!Union[TensorBox, List[TensorBox]]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                              ¦   «         Š | t          ‰¬¦  «        ||||¦  «        Št          j        |¦  «        }‰j	         
                    ˆˆfd„|D ¦   «         ¦  «         ‰j         
                    d„ |D ¦   «         ¦  «         d|v rq‰j	                             t          t          ‰¬¦  «        |d         ‰¦  «        ¦  «         ‰j                             |d                              ¦   «         ¦  «         d S d S )NrÄ  r   rF  c                óN   •— g | ]!}t          t          ‰¬ ¦  «        |‰¦  «        ‘Œ"S r»  r¼  )r›   r-  rç   r<	  s     €€rƒ   rž   z4_CollectiveKernel.create_inplace.<locals>.<listcomp>  s0   ø€ ÐTÐTÐTÈ�^�J¨fÐ5Ñ5Ô5°s¸FÑCÔCÐTÐTÐTr„   c                ó6   — g | ]}|                      ¦   «         ‘ŒS r…   r  rY	  s     rƒ   rž   z4_CollectiveKernel.create_inplace.<locals>.<listcomp>  s    € Ð"BÐ"BÐ"B°c 3§<¢<¡>¤>Ð"BÐ"BÐ"Br„   rÏ   )rY   rè   r”  r¢  ru  rñ   rÛ  r‚  Útree_leavesrL  r€  rÓ  r&  r½  r”  )rO  r3  r   r‹   r�   rŸ  rš  r›  r‹  rK  rÞ  Ú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Ð$Ø%ð 	!ð 	!ˆJØ×ÒÑ Ô Ð Ð à˜Q”×*Ò*Ñ,Ô,ˆØ�Ý˜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¹=Á =c                ó  ‡ ‡— 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          ¦  «        r[‰                      ||¦  «        } ‰ t          |¬¦  «        ||||¦  «        Šˆ ˆfd„t          |¦  «        D ¦   «         ‰_
        ‰j
        S  ‰ ‰                      |¦  «        ||||¦  «        Š‰g‰_
        ‰S )NrÐ  rF  c                ón   •— g | ]1\  }}t          ‰                     |¦  «        ‰t          |fg¦  «        ‘Œ2S r…   )r:	  r3	  rp   )r›   rœ   r­  rO  r<	  s      €€rƒ   rž   z9_CollectiveKernel.create_out_of_place.<locals>.<listcomp>F  sV   ø€ ð ð ð ñ �A�võ Ø×(Ò(¨Ñ0Ô0ØÝ˜A�Y�Kñô ðð ð r„   )rY   rè   r”  r¢  ru  ro   rp   r	  r>	  rÇ   r¾  r3	  )rO  r3  r   r‹   r�   rŸ  rš  r›  r‹  rK  rÞ  rç   r<	  s   `           @rƒ   Úcreate_out_of_placez%_CollectiveKernel.create_out_of_place-  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Ø×ÒÑ Ô Ð Ð å�n¥dÑ+Ô+ð 	Ø—_’_ [°.ÑAÔAˆFØ�SÝ!¨Ð0Ñ0Ô0ØØØØñô ˆFðð ð ð ð õ "+¨>Ñ!:Ô!:ðñ ô ˆFŒNð ”>Ð!à�SØ×$Ò$ ^Ñ4Ô4ØØØØñô ˆFð %˜XˆFŒNØˆMr
  rá  r�   rõ  )r   r
  rj   rk   )r   r
  )	r  rü  rý  r!  r}  rO  ry  r
  r
  r…   r„   rƒ   r
  r
  Ö  sš   € € € € € ðð ð ð ðð ð ð ð
	
ð 	
ð 	
ð 	
ð 	
ð" ð$@ð $@ð $@ñ „[ð$@ðx ð*ð *ð *ñ „[ð*ð *ð *r„   r
  c                  ó>   ‡ — e Zd Zd„ Zed	d„¦   «         Zd
ˆ fd„Zˆ xZS )Ú_WaitKernelc                ó  — | j         d         }t          |t          ¦  «        r|j         d         gS t          |t          ¦  «        rB|j         d         }t          |t          ¦  «        r|j        d         \  }}|j         |         gS g S g S rn  )r   ro   r
  r:	  r+  )r  rZ	  ÚcollrÎ   rÁ   s        rƒ   Úget_volatile_readsz_WaitKernel.get_volatile_reads\  s‹   € ØŒk˜!ŒnˆÝ�cÕ,Ñ-Ô-ð 	à”J˜q”M�?Ð"Ý˜�[Ñ)Ô)ð 	ð ”:˜a”=ˆDå˜$Õ 1Ñ2Ô2ð *Øœ Qœ‘��3Øœ CÔ(Ð)Ð)àˆIð ˆIr„   rZ	  re   rj   rk   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Ä  rF  )	rY   rè   r”  r¢  rÛ  rñ   rL  r&  r½  )	rO  r3  rZ	  rŸ  rš  r›  r‹  rK  r<	  s	            rƒ   Úcreate_waitz_WaitKernel.create_waitq  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   ’;»?Á?r¸  c                óö   •— t          ¦   «                              ¦   «         }|                      ¦   «         }|D ]@}|j                             t          j        |                     ¦   «         ¦  «        ¦  «         ŒA|S r�   )r>  rº  r"
  r¾  r¦  r9   rR  r”  )r  r*  Úvolatile_readsÚvrr@  s       €rƒ   rº  z_WaitKernel.get_read_writes‡  sm   ø€ Ý‘g”g×-Ò-Ñ/Ô/ˆà×0Ò0Ñ2Ô2ˆØ ð 	Gð 	GˆBØÔ×!Ò!¥,Ô"6°r·{²{±}´}Ñ"EÔ"EÑFÔFÐFÐFØÐr„   )rZ	  re   rj   rk   rô  )r  rü  rý  r"
  ry  r$
  rº  r{  r|  s   @rƒ   r
  r
  [  sl   ø€ € € € € ðð ð ð* ð
ð 
ð 
ñ „[ð
ð*ð ð ð ð ð ð ð ð ð r„   r
  rá   rŒ   rÄ  c                óL  — t          | t          t          f¦  «        rt          | ¦  «        S t          | t          t
          f¦  «        r't          ¦   «         }| D ]}|t          |¦  «        z  }Œ|S t          | t          j	        ¦  «        rt          | ¦  «        S t          ¦   «         S r�   )
ro   r0   r   r,   rq   rp   r2   rï  rt   r•  )rá   rQ  rõ   s      rƒ   rï  rï  “  s›   € Ý�!•h¥Ð%Ñ&Ô&ð å$ QÑ'Ô'Ð'Ý	�A��t�}Ñ	%Ô	%ð 	Ý&0¡l¤lˆØð 	0ð 	0ˆAØÕ,¨QÑ/Ô/Ñ/ˆAˆAØˆÝ	�A•u”|Ñ	$Ô	$ð å$ QÑ'Ô'Ð'å‰|Œ|Ðr„   )rh   ri   rj   rk   )r‡   rˆ   rj   r‰   )r“   r”   rj   r•   )rª   r«   r¬   r­   rj   r®   r�   )r¶   r·   r¸   r¹   rj   r”   )r“   r½   rj   r”   rÝ  )rÒ   rÓ   rÔ   rÕ   rj   rk   )rÒ   rf   rÔ   rÕ   rj   rÚ   )rÒ   rÜ   rÔ   rÕ   rj   rÝ   )rö   r÷   rj   rø   )rÒ   rü   rj   rý   )rÒ   r  rj   rÕ   )rÁ   r}  ræ   rJ  rj   rX   )r®  rˆ   ræ   rJ  r¯  rÕ   rj   r°  )rØ  rŽ  rÙ  rŽ  rä   rŽ  rj   rÕ   )rÒ   rf   rj   rÕ   )TFNFN)rÒ   rf   rE  rÕ   rN  rÕ   rO  rP  r¨  rÕ   r´  rP  rj   rQ  )rÒ   rf   rO  r½   rj   rÕ   )rå   rŽ  rj  rŽ  rj   rÕ   )ræ   rJ  rj   r~   )r¡	  r¢	  rj   rÕ   )rá   rŒ   rj   rÄ  (  Ú
__future__r   r  rÿ  r8  r^  ÚloggingÚtextwrapr  rp  r   Úenumr   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   Útyping_extensionsr   r   r   Úunittest.mockr   rz   r   r   r   Útorch._export.serde.schemaÚ_exportÚserderï  r	  Útorch._loggingrt   Útorch.fxÚtorch.utils._pytreerÍ  Ú_pytreer‚  Útorch._dynamo.utilsr   Útorch._export.serde.serializer    Ú*torch._higher_order_ops.auto_functionalizer!   Útorch._inductorr"   Útorch._prims_commonr#   r$   r%   r&   r'   Útorch._subclasses.fake_tensorr(   Ú%torch.fx.experimental.symbolic_shapesr)   r*   r+   r,   r-   r.   r/   r0   Útorch.utils._ordered_setr2   Útorch.utils._sympy.functionsr3   r4   r5   Útorch.utils._sympy.symbolr6   r<  r8   r9   Úcodegen.commonr:   r;   r<   r=   r>   r?   r@   Ú	loop_bodyrA   Úops_handlerrB   rC   Úruntime.benchmarkingrD   Úruntime.hintsrE   rF   rG   rH   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   ÚvirtualizedrW   rX   rY   Útorch.fx.noderZ   Úcodegen.cuda.cuda_templater[   rè   r\   r]   rŒ   rþ  r^   r_   r`   r~   ra   r‚  rb   Ú	getLoggerr  r<  rF  ro  rˆ   rg   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ì   rM  rF  rä  rZ  r\  rw   r§  rº  rË  rž  rW  r   r,  rC  rJ  rQ  rY  r]  r  rR  rj  rî   rÆ  rÑ  rÕ  rÛ  rå  rV  r#  r)  r,  r˜  r4  r<  r"  rŸ  r¶  rÕ   ÚPrimitiveInfoTyperÇ  rÝ  rá  r   r  r¤  r  r!  râ  r÷  rþ  r=  r½  r  r!  rX  ri  ru  r  r„  rŒ  rŸ  r®  rx   ry   rË  rÍ  rC	  r>	  r:	  r	  rï  re   rU  rŸ	  r§	  r©	  rÏ	  râ	  r   r  r
  r
  rï  r…   r„   rƒ   ú<module>rJ
     s  ðØ "Ð "Ð "Ð "Ð "Ð "Ð "à Ð Ð Ð Ø Ð Ð Ð Ø Ð Ð Ð Ø Ð Ð Ð Ø €€€Ø €€€Ø Ð Ð Ð Ø €€€Ø "Ð "Ð "Ð "Ð "Ð "Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð& =Ð <Ð <Ð <Ð <Ð <Ð <Ð <Ð <Ð <Ø Ð Ð Ð Ð Ð à €€€Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'à 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ø Ð Ð Ð Ø €€€Ø $Ð $Ð $Ð $Ð $Ð $Ð $Ð $Ð $Ø (Ð (Ð (Ð (Ð (Ð (Ø ?Ð ?Ð ?Ð ?Ð ?Ð ?Ø MÐ MÐ MÐ MÐ MÐ MØ #Ð #Ð #Ð #Ð #Ð #ðð ð ð ð ð ð ð ð ð ð ð ð ð ð :Ð 9Ð 9Ð 9Ð 9Ð 9ð	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 0Ð /Ð /Ð /Ð /Ð /Ø LÐ LÐ LÐ LÐ LÐ LÐ LÐ LÐ LÐ LØ *Ð *Ð *Ð *Ð *Ð *à "Ð "Ð "Ð "Ð "Ð "Ð "Ð "Ø DÐ DÐ DÐ DÐ DÐ DÐ DÐ Dðð ð ð ð ð ð ð ð ð ð ð ð ð ð  Ð Ð Ð Ð Ð Ø 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ø -Ð -Ð -Ð -Ð -Ð -Ø :Ð :Ð :Ð :Ð :Ð :Ð :Ð :ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð$ *Ð )Ð )Ð )Ð )Ð )Ð )Ð )Ð )Ð )ð ð %Ø"Ð"Ð"Ð"Ð"Ð"à8Ð8Ð8Ð8Ð8Ð8Ø$Ð$Ð$Ð$Ð$Ð$Ø%Ð%Ð%Ð%Ð%Ð%Ð%ð %€LÐ$Ð$Ð$Ñ$ð €WˆT�]„]€Ø€WˆT�]„]€Ø€WˆT�]„]€à˜C ˜IÔ&€Ð &Ð &Ð &Ñ &Ø˜C ¨Ð,Ô-€Ð -Ð -Ð -Ñ -à€gÔ˜Ñ!Ô!€Ø	ˆÔ	˜8œ?°4Ð	8Ñ	8Ô	8€Ø„y„~€ð'ðT  ØØØˆˆkÐ	ÔØØØØ��s˜D  kÐ!1Ô2°KÀÈ8ÐSÔTÔUôðô	€ð 	ð 	ð 	ñ 	ñ$ð $ð $ð $ñ>ð ð ð ñð ð ð ñð ð ð ñð ð ð ð !�L�LÐ Ø$�_�_Ð ð TXññ ð ð ð ñ	ð 	ð 	ð 	ð TXñ
ñ 
ð 
ð 
ð 
ð 
ññ ð ð ñ 
„ðð 
ññ ð ð ñ 
„ðð
 .2ññ ð ð ð ñ8ð ð ð ñ	>ð 	>ð 	>ð 	>ñ&ð &ð &ð &ñ'ð 'ð 'ð 'ðqð qð qð qð qñ qô qð qðh €�UÐÑÔðAð Að Að Að Añ Aô Añ ÔðAðH ð}
ð }
ð }
ð }
ð }
ˆFñ }
ô }
ñ „ð}
ñ@&ð &ð &ð &ð ð
ð 
ð 
ð 
ð 
�ñ 
ô 
ñ „ð
ð@ ð
ð 
ð 
ð 
ð 
ˆiñ 
ô 
ñ „ð
ðB ˆ;�|Ñ$Ô$Øˆ;�yÑ!Ô!Øˆ;�yÑ!Ô!ØˆK˜ÑÔØˆ;�uÑÔØˆ{˜=Ñ)Ô)ð<ð <Ð ð ð ð ñ ð JNñ<Nñ <Nð <Nð <Nð <Nñ~ ð  ð  ð  ð  ðh

ð h

ð h

ð h

ð h

�ñ h

ô h

ñ „ðh

ðVM
ð M
ð M
ð M
ð M
�yñ M
ô M
ð M
ð` ð|
ð |
ð |
ð |
ð |
ˆ5ñ |
ô |
ñ „ð|
ð@ ð	ð 	ð 	ð 	ð 	�ñ 	ô 	ñ „ð	ð ðOð Oð Oð Oð Oˆ5ñ Oô Oñ „ðOñdð ð ð ñ	ð 	ð 	ð 	ð Ø!Ø<@ØØ=Añ/ñ /ð /ð /ð /ðd $5 9Ô#4Ø¨4ð$ñ $ô $Ð  ñ
ð ð ð ð ð\
ð \
ð \
ð \
ð \
ˆvñ \
ô \
ñ „ð\
ð~ ðKð Kð Kð Kð K�ñ Kô Kñ „ðKð\ ð(ð (ð (ð (ð (�(ñ (ô (ñ „ð(ðV ð79ð 79ð 79ð 79ð 79�(ñ 79ô 79ñ „ð79ðt ðð ð ð ð �(ñ ô ñ „ðð: ðPð Pð Pð Pð Pˆ;ñ Pô Pñ „ðPðf ðPð Pð Pð Pð P�hñ Pô Pñ „ðPðf ð%ð %ð %ð %ð %�ñ %ô %ñ „ð%ðPHAð HAð HAð HAð HA�ñ HAô HAð HAðV ðð ð ð ð �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ð ðHTð HTð HTð HTð HTˆZñ HTô HTñ „ðHTðVð ð ð ð �&ñ ô ð ð$I7ð I7ð I7ð I7ð I7�Vñ I7ô I7ð I7ðXPð Pð Pð Pð P�fñ Pô Pð Pð2ð ð ð ð �Tñ ô ð ð$%ð $%ð $%ð $%ð $%�{ñ $%ô $%ð $%ðN ðð ð ð ð �ñ ô ñ „ðð.Q*ð Q*ð Q*ð Q*ð Q* ñ Q*ô Q*ð Q*ðh €�UÐÑÔðvð vð vð vð vˆVñ vô vñ Ôðvðr €�UÐÑÔð&ð &ð &ð &ð &�f˜iñ &ô &ñ Ôð&ð ð ð ð ð �&ñ ô ð ð
ð ð ð ð �Kñ ô ð ð
ð 
ð 
ð 
ð 
�[ñ 
ô 
ð 
ð& ðð ð ð ð ˜6ñ ô ñ „ðð ð
ð 
ð 
ð 
ð 
˜Fñ 
ô 
ñ „ð
ð €�UÐÑÔðE4ð E4ð E4ð E4ð E4�_ñ E4ô E4ñ ÔðE4ðP
7
ð 7
ð 7
ð 7
ð 7
�_ñ 7
ô 7
ð 7
ðt)ð )ð )ð )ð )˜>ñ )ô )ð )ðX ˜#˜u d¨C°°e¸CÀÀeÈTÐ<QÔ6RÔ1SÐSÔTÐ ð-$ð -$ð -$ð -$ð -$ñ -$ô -$ð -$ð`"ð "ð "ð "ð "˜|ñ "ô "ð "ð
>=ð >=ð >=ð >=ð >=Ð.ñ >=ô >=ð >=ðBMð Mð Mð Mð M˜ñ Mô Mð Mð$ð ð ð ð ˜ñ ô ð ð €�UÐÑÔð>ð >ð >ð >ð >�?ñ >ô >ñ Ôð>ðBð ð ð ð �ñ ô ð ðbð bð bð bð b�9ñ bô bð bðJ €�UÐÑÔðUð Uð Uð Uð U�<ñ Uô Uñ ÔðUðp €�UÐÑÔð0ð 0ð 0ð 0ð 0�lñ 0ô 0ñ Ôð0ðf
ð 
ð 
ð 
ð 
�/ñ 
ô 
ð 
ð(*"ð *"ð *"ð *"ð *"˜ñ *"ô *"ð *"ðZð ð ð ð �Vñ ô ð ð.G.ð G.ð G.ð G.ð G.�Lñ G.ô G.ð G.ðTpð pð pð pð p˜lñ pô pð pðf&)ð &)ð &)ð &)ð &)˜|ñ &)ô &)ð &)ðT-ð -ð -ð -ð -˜,ñ -ô -ð -ð`ð ñ ð ñ  <ñ ô ð ð6Bð Bñ Bð Bñ BÐ5ñ Bô Bð Bð"Fð Fñ Fð Fñ FÐ-ñ Fô Fð Fð,H)ð H)ñ H)ð H)ñ H)�lñ H)ô H)ð H)ðV,)ð ,)ñ ,)ð ,)ñ ,)�|ñ ,)ô ,)ð ,)ð^!Tð !Tñ !Tð !Tñ !T�ñ !Tô !Tð !TðH-ð -ñ -ð -ñ -�Lñ -ô -ð -ð42;ð 2;ñ 2;ð 2;ñ 2;�<ñ 2;ô 2;ð 2;ðj €�UÐÑÔðð ñ ð ñ ñ ô ñ Ôðð
W*ð W*ñ W*ð W*ñ W*Ð&ñ W*ô W*ð W*ðt €�UÐÑÔð
ð 
ñ 
ð 
ñ 
�.ñ 
ô 
ñ Ôð
ð< ðð ñ ð ñ ˜
ñ ô ñ „ðð.
ð .
ñ .
ð .
ñ .
�,ñ .
ô .
ð .
ðf ÔðNð Nñ Nð Nñ N�ñ Nô Nñ ÔðNðb+ð +ñ +ð +ð +�
ñ +ô +ð +ðT%ð T%ñ T%ð T%ñ T%�ñ T%ô T%ð T%ðn €�UÐÑÔð*ð *ñ *ð *ñ *ˆvñ *ô *ñ Ôð*ñLñ Lð Lð Lð €�UÐÑÔðW.ð W.ñ W.ð W.ñ W.�\ñ W.ô W.ñ ÔðW.ðt €�UÐÑÔðu*ð u*ñ u*ð u*ñ u*�,ñ u*ô u*ñ Ôñu*ðp €�UÐÑÔðC)ð C)ñ C)ð C)ñ C)�ñ C)ô C)ñ ÔñC)ðL)ð )ñ )ð )ñ )�nñ )ô )ñ )ðX ðð ñ ð ñ �fñ ô ñ „ñðBð Bñ Bð Bñ B˜ñ Bô Bñ BðJ2ð 2ñ 2ð 2ñ 2Ñ#ñ 2ô 2ñ 2ñpñ ð ñ ð ð r„   