+
    –°³jòz  ã                  ó  € ^ RI Ht ^ RIt^ RIt^ RIt^ RIt^ RIHtHt ^ RI	H
t
HtHtHt ^ RIt^ RIt^ RIHt ^ RIHtHt ^ RIHt ^ RIHt ^R	IHtHt ^R
IHt ^RIH t H!t!H"t" ^RI#H$t$H%t%H&t&H't'H(t(H)t) ^RI*H+t+H,t, ]'       d	   ^ RI-H.t.H/t/ ]! R4      t0 ! R R]Pb                  Pd                  4      t3 ! R R]4      t4 ! R R]4      t5 ! R R]4      t6 ! R R4      t7 ! R R4      t8 ! R R] 4      t9 ! R R]"4      t:R# ) é    )ÚannotationsN)ÚautoÚEnum)ÚAnyÚ
NamedTupleÚTYPE_CHECKINGÚTypeVar)Úidentity)ÚScopeÚ
TracerBase)ÚMod)ÚSymT)ÚconfigÚdependencies)Úindex_prevent_reordering)ÚDefaultHandlerÚ
OpsHandlerÚWrapperHandler)Úcache_on_selfÚdecompose_indexÚflatten_indexÚreduction_num_outputsÚsympy_index_symbol_with_prefixÚ
sympy_subs)ÚopsÚV)ÚCallableÚSequenceÚTc                  ót   a € ] tR t^(t]]P                  R 4       4       tV 3R ltR V 3R llt	V 3R lt
RtV ;t# )ÚInterpreterShimc                 	óH   € \         P                  P                  \        4      # ©N)ÚtorchÚfxÚsymbolic_tracer
   © ó    ÚZ/home/luca/screen-checking/.venv/lib/python3.14/site-packages/torch/_inductor/loop_body.pyÚ	_dummy_gmÚInterpreterShim._dummy_gm)   s   € ô �x‰x×&Ñ&¤xÓ0Ð0r(   c                	ó¨   <€ \         SV `  V P                  4       R R7       W n        Wn        W n        R V n        VP                  V n        RV n	        R# )F)Úgarbage_collect_valuesN)
ÚsuperÚ__init__r*   ÚmoduleÚgraphÚ
submodulesÚextra_tracebackÚ__getitem__Ú
fetch_attrÚcurrent_node)Úselfr1   r2   Ú	__class__s   &&&€r)   r/   ÚInterpreterShim.__init__.   sJ   ø€ ô 	‰Ñ˜Ÿ™Ó)À%ÐÔHØŒØŒ
Ø$ŒØ$ˆÔØ$×0Ñ0ˆŒØ ˆÖr(   c               ó    € V ^8„  d   QhRRRR/# )é   Únztorch.fx.NodeÚreturnr   r'   )Úformats   "r)   Ú__annotate__ÚInterpreterShim.__annotate__9   s   € ÷ #ñ #˜-ð #¨Cñ #r(   c                	ó.   <€ Wn         \        SV `	  V4      # r#   )r6   r.   Úrun_node)r7   r<   r8   s   &&€r)   rB   ÚInterpreterShim.run_node9   s   ø€ àÔÜ‰wÑ Ó"Ð"r(   c                	óž   <€ \         P                  ! V 4      ;_uu_ 4        \        SV `  ! V/ VB uuR R R 4       #   + '       g   i     R # ; ir#   )r   Úset_interpreter_handlerr.   Úrun)r7   ÚargsÚkwargsr8   s   &*,€r)   rF   ÚInterpreterShim.run>   s4   ø€ Ü×&Ò& t×,Õ,Ü‘7’; Ð/¨Ñ/÷ -×,×,Ó,ús	    ;»A	)r6   r3   r5   r1   r0   r2   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__ÚstaticmethodÚ	functoolsÚcacher*   r/   rB   rF   Ú__static_attributes__Ú__classcell__©r8   s   @r)   r!   r!   (   s:   ø† ØØ‡_�_ñ1ó ó ð1õ	!÷#ð #÷
0ó 0r(   r!   c                  ó(   a € ] tR t^DtV 3R ltRtV ;t# )ÚLightTracerc                	óÀ   <€ \         SV `  4        \        P                  P	                  V P
                  R 7      V n        \        RR4      V n        / V n	        / V n
        R# ))Ú
tracer_clsÚ N)r.   r/   r$   r%   ÚGraphr8   r1   r   ÚscopeÚmodule_stackÚnode_name_to_scope)r7   r8   s   &€r)   r/   ÚLightTracer.__init__E   sE   ø€ Ü‰ÑÔÜ—X‘X—^‘^¨t¯~©~�^Ó>ˆŒ
Ü˜2˜t“_ˆŒ
ØˆÔØ"$ˆÖr(   )r1   r[   r\   rZ   )rJ   rK   rL   rM   r/   rQ   rR   rS   s   @r)   rU   rU   D   s   ø† ÷%ó %r(   rU   c                  ó6   € ] tR t^Mt$ R]R&   R]R&   R]R&   RtR# )ÚMemoryEntryÚstrÚ
index_nameú
str | NoneÚbuffer_nameÚmoder'   N)rJ   rK   rL   rM   Ú__annotations__rQ   r'   r(   r)   r_   r_   M   s   ‡ ØƒOØÓØ
×r(   r_   c                  óx   € ] tR t^St]! 4       t]! 4       t]! 4       t]! 4       t]! 4       t	]! 4       t
]! 4       tRtR# )ÚMemoryUsageTyper'   N)rJ   rK   rL   rM   r   ÚLOADÚ	LOAD_SEEDÚSTOREÚSTORE_REDUCTIONÚ
INDEX_EXPRÚCHECK_BOUNDSÚ	BUCKETIZErQ   r'   r(   r)   rg   rg   S   s3   † á‹6€DÙ“€IÙ‹F€EÙ“f€OÙ“€JÙ“6€LÙ“„Ir(   rg   c                  óÄ  a € ] tR t^^t$ RtR]R&   R]R&   R]R&   R]R	&   R
]R&   R]R&   R]R&   R]R&   R]R&   ]R 4       tRBV 3R lltR R lt	R t
R tR R ltR R ltR R  ltR! R" ltR# R$ ltR% R& ltR' R( lt]R) 4       t]R* 4       t]R+ 4       tR, tR- tR. tR/ tR0 tR1 tR2 tR3 R4 lt]t RCR5 R6 llt!R7 t"R8 t#R9 t$R: t%RBR; lt&R<R/R= lt'R> t(R? t)R@ t*RAt+V ;t,# )DÚLoopBodyzŒ
Captures the body of a Loops subclass into an FX graph.  Persists any
indexing simplifications and makes it easier to analyze loop bodies.
údict[str, sympy.Expr]Úindexing_exprsúdict[str, Any]r2   zdict[str, LoopBodyBlock]Ú	subblockszlist[sympy.Symbol]Úindirect_varszdict[sympy.Symbol, sympy.Expr]Úindirect_var_rangesÚLoopBodyBlockÚ
root_blockz(dict[MemoryUsageType, list[MemoryEntry]]Úmemory_usageúcollections.Counter[str]Ú	op_countszdict[sympy.Expr, str]Úindexing_exprs_namec                	óX   € \        V 4      \        J d   \        P                  ! V 4      # V # r#   )ÚtypeÚintÚsympyÚInteger)Úexprs   &r)   Ú_wrap_int_to_sympy_integerÚ#LoopBody._wrap_int_to_sympy_integerp   s$   € ô �‹:œÓÜ—=’= Ó&Ð&Øˆr(   Fc                	ó>  <€ \         SV `  4        \        VP                  4       4      pVR \	        V4       V\	        V4      R  3V n        W@n        WPn        W0n        \        V\        4      '       d   V P                  WV4       MV P                  W4       R V n        R # r#   )r.   r/   ÚtupleÚvaluesÚlenÚsizesÚ	iter_varsÚreduce_varsÚ
var_rangesÚ
isinstancerp   Ú_init_with_copyÚ_init_with_tracingÚindexing)	r7   ÚfnrG   rŒ   rŠ   r‹   Úallow_same_symbol_in_indexÚ_flat_sizesr8   s	   &&&&&&& €r)   r/   ÚLoopBody.__init__w   s�   ø€ ô 	‰ÑÔä˜J×-Ñ-Ó/Ó0ˆàÐ(œ#˜i›.Ð)Øœ˜I›Ð(Ð)ð
ˆŒ
ð
 #ŒØ&ÔØ$Œä�bœ(×#Ò#Ø× Ñ  Ð+EÕFà×#Ñ# BÔ-àˆŽr(   c               ó   € V ^8„  d   QhRR/# )r;   r=   r   r'   )r>   s   "r)   r?   ÚLoopBody.__annotate__“   s   € ÷ *ñ *¨ñ *r(   c                	óÐ   € V P                   '       g   \        R 4      hV P                  P                  P	                  RRR7      ^ ,          pVP
                  R,          pVR,          # )z)Expected has_partial_accumulate to be setÚcall_methodÚpartial_accumulate©ÚopÚtargetÚnum_reduction_dimséÿÿÿÿ)Úhas_partial_accumulateÚAssertionErrorrx   r1   Ú
find_nodesrG   )r7   ÚnodeÚmetas   &  r)   Úget_original_num_rdimsÚLoopBody.get_original_num_rdims“   sb   € Ø×*×*Ð*Ü Ð!LÓMÐMØ�‰×$Ñ$×/Ñ/ØÐ%9ð 0ó 
à
õˆð �y‰y˜�}ˆØÐ(Õ)Ð)r(   c                	ó  € V P                   P                  4       V n         R V n        V P                  V P                  ,           V n        . V n        V P
                  ^ ,          V P
                  ^,          ,           \        4       3V n        V # )T)rx   Úextract_pw_from_reductionrŸ   rŠ   r‹   r‰   r†   ©r7   s   &r)   r§   Ú"LoopBody.extract_pw_from_reductionœ   sd   € ØŸ/™/×CÑCÓEˆŒØ&*ˆÔ#ØŸ™¨$×*:Ñ*:Õ:ˆŒØˆÔØ—j‘j •m d§j¡j°¥mÕ3´U³WÐ=ˆŒ
Øˆr(   c                óv  € / V n         / V n        RV P                  /V n        / V n        . V n        / V n        \         Uu/ uF  q3. bK  	  upV n        \        P                  ! 4       V n        \        WV4      V n        \        V P                  P                  P!                  RRR7      4      V n        V =R# u upi )z9Do an FX trace of an arbitrary callable to construct selfÚ	get_indexr˜   r™   rš   N)rr   r|   r«   r2   rt   ru   rv   rg   ry   ÚcollectionsÚCounterr{   rw   rx   Úboolr1   r¡   rŸ   )r7   r‘   rG   Úts   &&& r)   r�   ÚLoopBody._init_with_tracing¤   s­   € à ˆÔØ#%ˆÔ Ø&¨¯©Ð7ˆŒØˆŒØˆÔØCEˆÔ Ý,;Ó<©O q šU©OÑ<ˆÔÜ$×,Ò,Ó.ˆŒÜ'¨°$Ó7ˆŒÜ&*Ø�O‰O×!Ñ!×,Ñ,Ø Ð)=ð -ó ó'
ˆÔ#ð
 Ò$ùò =s   ¿B6c               ó   € V ^8„  d   QhRR/# )r;   Úotherrp   r'   )r>   s   "r)   r?   r–   ¶   s   € ÷ 
ñ 
 Xñ 
r(   c                óV  € VP                  W#4      pVP                  4        UUu/ uFG  w  rVWPP                  \        P                  P
                  P                  W`P                  4      4      bKI  	  uppV n        VP                  P                  4        UUu/ uF  w  rxWxP                  V 4      bK  	  uppV n	        VP                  V n        VP                  V n        VP                  V n        VP                  V n        VP                  P                  V 4      V n        VP                   V n        / VP"                  Cp	V	P%                  R4       RV P&                  /V	P                  4        UUu/ uF  w  rxWxP                  V 4      bK  	  uppCV n        R# u uppi u uppi u uppi )z“
_init_with_tracing() is slow, so this is a fast path in the case
where we are just reordering/merging/splitting the args of an
existing LoopBody.
r«   N)Úindexing_from_argsÚitemsrƒ   r   r1   ÚsizevarsÚsimplify_with_rangesrŒ   rr   rt   Úcloneru   rv   ry   r{   rx   rŸ   r2   Úpopr«   )
r7   r²   rG   r’   rr   Únamer‚   ÚkÚvr2   s
   &&&&      r)   rŽ   ÚLoopBody._init_with_copy¶   sn  € ð ×1Ñ1°$ÓSˆð
 -×2Ñ2Ô4ô	
ñ 5‘
�ð ×1Ñ1Ü—‘× Ñ ×5Ñ5°d¿O¹OÓLóò ñ 5ò	
ˆÔð 8=·±×7LÑ7LÔ7NÔOÑ7N©t¨q˜!ŸW™W T›]Ò*Ñ7NÒOˆŒØ"×0Ñ0ˆÔØ#(×#<Ñ#<ˆÔ Ø!×.Ñ.ˆÔØŸ™ˆŒØ×*Ñ*×0Ñ0°Ó6ˆŒØ&+×&BÑ&BˆÔ#à)˜×(Ñ(Ð)ˆ
Ø�‰�{Ô#à˜Ÿ™ð
à,6×,<Ñ,<Ô,>Ô?Ñ,>¡D Aˆq—'‘'˜$“-ÒÑ,>Ò?ð
ˆŽùó!
ùó Pùó @s   ¥AFÂFÅ1F%c               ó   € V ^8„  d   QhRR/# )r;   rº   r`   r'   )r>   s   "r)   r?   r–   Ò   s   € ÷ /ñ /˜3ñ /r(   c                	ó@   € V P                   P                  V^ 4      ^ 8„  # ©r   )r{   Úget©r7   rº   s   &&r)   Úhas_opÚLoopBody.has_opÒ   s   € Ø�~‰~×!Ñ! $¨Ó*¨QÑ.Ð.r(   c               ó   € V ^8„  d   QhRR/# ©r;   r=   rp   r'   )r>   s   "r)   r?   r–   Õ   s   € ÷ *ñ *˜Xñ *r(   c           	     óô  € T pV P                   pVP                  w  r4Vw  rV. VP                  P                  4       Op\        P
                  P                  P                  VV\        WsV4      4      w  r‰p
\        P
                  P                  P                  VV\        WtV4      4      w  r¼p
W…8X  d	   W¶8X  d   V# \        P                  ! W‹RR7      w  w  ppp\        VV	! V4      V! V4      .VVVRR7      pV# )zE
Merge both iteration and reduction loops and return a new LoopBody.
Úp)ÚprefixT©r’   )r‰   Úvarsrr   r‡   r   r1   r¶   Ú_simplify_loopsr   r   Úindex_vars_no_squeezerp   )r7   Úold_bodyÚ	old_sizesÚold_iter_varsÚold_reduce_varsÚold_iter_sizesÚold_reduce_sizesÚindex_exprsÚ
iter_sizesÚiter_reindexÚ_Úreduce_sizesÚreduce_reindexrŠ   r‹   rŒ   Únew_bodys   &                r)   Úmerge_loopsÚLoopBody.merge_loopsÕ   s
  € ð ˆØ—J‘Jˆ	Ø)1¯©Ñ&ˆØ+4Ñ(ˆà9˜×/Ñ/×6Ñ6Ó8Ð9ˆä&'§g¡g×&6Ñ&6×&FÑ&FØØÜ$ [ÀÓPó'
Ñ#ˆ
 !ô +,¯'©'×*:Ñ*:×*JÑ*JØØÜ$ [ÐCSÓTó+
Ñ'ˆ að Ô'¨LÔ,LØˆOô ×.Ò.¨zÐPSÔTñ	
ñØØàäØÙ˜)Ó$¡n°[Ó&AÐBØØØØ'+ô
ˆð ˆr(   c               ó    € V ^8„  d   QhRRRR/# )r;   Úreplacementsrq   r=   rp   r'   )r>   s   "r)   r?   r–     s   € ÷ ñ Ð0Eð È(ñ r(   c           	     	ó�   € V P                   w  r#\        V W#3V P                  VVR R7      pVP                  P	                  V4       V# )TrÊ   )rË   rp   rŒ   rr   Úupdate)r7   rÞ   rŠ   r‹   rÚ   s   &&   r)   Úwith_indexing_exprsÚLoopBody.with_indexing_exprs  sL   € Ø!%§¡Ñˆ	ÜØØÐ$Ø�O‰OØØØ'+ô
ˆð 	×Ñ×&Ñ& |Ô4Øˆr(   c               ó$   € V ^8„  d   QhRRRRRR/# )r;   Ú	dimensionr   Ú	new_ranger=   rp   r'   )r>   s   "r)   r?   r–     s$   € ÷ 1ñ 1Øð1Ø),ð1à	ñ1r(   c                ó0  aaaaa€ V oV P                   pVw  ooSS,          o\        S4      pW$S&   VS3p\        P                  ! VRR/ w  w  rgpR VVVVV3R llp	\	        W–V3W†V4      p
\        P                  ! VRR/ w  w  r¼p\	        W«V3WÛV4      p	V	# )zf
Expand node on `dimension` to `new_range` and rely on index modular to avoid
out-of-boundary access.
rÉ   r¯   c               ó    € V ^8„  d   QhRRRR/# ©r;   ÚindicesúSequence[sympy.Expr]r=   r   r'   )r>   s   "r)   r?   ÚBLoopBody.expand_dimension_for_pointwise_node.<locals>.__annotate__$  s   € ÷ 	6ñ 	6Ð3ð 	6¸ñ 	6r(   c            
     ó‚  <€ . \         P                  P                  V 4      Op\        V4      \        S4      \        S	4      ,           8X  g1   \	        R \        V4       R\        S4       R\        S	4       R24      hVR\        S4       pV\        S4      R p\        V4      p\        VS,          S4      VS&   S! WC4      # )úExpected index length ú# to equal iter_size + reduce_size (ú + Ú)N)Ú	itertoolsÚchainÚfrom_iterablerˆ   r    Úlistr   )
ré   ÚindexÚiter_idxÚ
reduce_idxÚnew_iter_idxrä   Ú	iter_sizerÎ   Úoriginal_rangeÚreduce_sizes
   *    €€€€€r)   rÚ   Ú>LoopBody.expand_dimension_for_pointwise_node.<locals>.new_body$  sÀ   ø€ Ø=”i—o‘o×3Ñ3°GÓ<Ð=ˆEÜ�u“:¤ Y£´#°kÓ2BÕ!BÔBÜ$Ø,¬S°«Z¨Lð 90Ü03°I³Ð/?¸sÄ3À{ÓCSÐBTÐTUðWóð ð Ð-œs 9›~Ð.ˆHØœs 9›~Ð/Ð0ˆJä ›>ˆLÜ&)¨(°9Õ*=¸~Ó&NˆL˜Ñ#á˜LÓ5Ð5r(   rÈ   ©r‰   rô   r   rÍ   rp   )r7   rä   rå   rÏ   Únew_iter_sizeÚ	new_sizesrŠ   r‹   rŒ   rÚ   Ú	loop_bodyÚ
iter_vars2Úreduce_vars2Úvar_ranges2rù   rÎ   rú   rû   s   &f&           @@@@r)   Ú#expand_dimension_for_pointwise_nodeÚ,LoopBody.expand_dimension_for_pointwise_node  sË   ü€ ð ˆØ—J‘Jˆ	à!*Ñˆ	�;Ø" 9Õ-ˆÜ˜Y›ˆØ#,�iÑ Ø" KÐ0ˆ	ä/;×/QÒ/QØð0
àñ0
Ñ,Ñ ˆ *÷
	6ô 	6ô Ø +Ð.°
À{ó
ˆ	ô
 3?×2TÒ2TØð3
àñ3
Ñ/Ñ"ˆ Kô Ø LÐ1°;ÈLó
ˆð ˆr(   c               ó    € V ^8„  d   QhRRRR/# )r;   Únew_iter_sizesrê   r=   rp   r'   )r>   s   "r)   r?   r–   A  s   € ÷ )
ñ )
Ð1Eð )
È(ñ )
r(   c                óD  aaa€ V oV P                   ^ ,          oV P                   ^,          p\        S4      \        V4      3p\        P                  ! VRR/ w  w  rEpR VVV3R llp\	        WtV3WdV4      p\        P                  ! VRR/ w  w  ršp\	        VWš3VV	V
4      # )zó
Reindex iteration loops into a different factorization of the same
total numel. For example, [1024, 8192] -> [65536, 128].

The old iteration vars are expressed as functions of the new vars via
FloorDiv and ModularIndexing on the flat index.
rÉ   r¯   c               ó    € V ^8„  d   QhRRRR/# rè   r'   )r>   s   "r)   r?   Ú1LoopBody.reindex_iter_loops.<locals>.__annotate__T  s   € ÷ 	<ñ 	<Ð3ð 	<¸ñ 	<r(   c                 óÒ   <€ . \         P                  P                  V 4      OpVR \        S4       pV\        S4      R  p\	        VS4      p\        VS4      pS! V\        V4      4      # r#   )rñ   rò   ró   rˆ   r   r   rô   )	ré   rõ   rø   r÷   ÚflatÚold_iter_idxr  rÎ   rÒ   s	   *     €€€r)   rÚ   Ú-LoopBody.reindex_iter_loops.<locals>.new_bodyT  sj   ø€ Ø=”i—o‘o×3Ñ3°GÓ<Ð=ˆEØ Ð!6¤3 ~Ó#6Ð7ˆLØœs >Ó2Ð4Ð5ˆJÜ  ¨~Ó>ˆDÜ*¨4°Ó@ˆLÙ˜L¬$¨zÓ*:Ó;Ð;r(   rÈ   rý   )r7   r  rØ   rÿ   rŠ   r‹   rŒ   rÚ   r   r  r  r  rÎ   rÒ   s   &f          @@r)   Úreindex_iter_loopsÚLoopBody.reindex_iter_loopsA  sÃ   ú€ ð ˆØŸ™ A�ˆØ—z‘z !•}ˆä˜.Ó)¬4°Ó+=Ð>ˆ	ä/;×/QÒ/QØð0
àñ0
Ñ,Ñ ˆ *÷
	<ò 	<ô Ø +Ð.°
À{ó
ˆ	ô 3?×2TÒ2TØð3
àñ3
Ñ/Ñ"ˆ Kô ØØÐ&ØØØó
ð 	
r(   c               ó   € V ^8„  d   QhRR/# rÆ   r'   )r>   s   "r)   r?   r–   l  s   € ÷ .
ñ .
¨xñ .
r(   c                ó  aaaa€ ^RI Hp V oV P                  p\        V^ ,          4      \        V4      8X  g+   \	        R\        V^ ,          4       R\        V4       24      hV! V4      pVw  ooV! S4      pVS3p\
        P                  ! VRR/ w  w  rxp	\        V4       U
Uu/ uF  w  r«WºbK	  	  upp
o\        \        V4      4       Uu. uF  pSV,          NK  	  upoR VVVV3R llp\        VWx3V	VV4      # u upp
i u upi )z4
Reorder iteration loops and return a new LoopBody.
)Úsame_reorderzExpected old_sizes[0] length z to equal new_order length rÉ   rÈ   c               ó    € V ^8„  d   QhRRRR/# rè   r'   )r>   s   "r)   r?   Ú1LoopBody.reorder_iter_loops.<locals>.__annotate__ˆ  s   € ÷ 
	Sñ 
	SÐ3ð 
	S¸ñ 
	Sr(   c            
     ó|  <€ . \         P                  P                  V 4      Op\        V4      \        S4      \        S4      ,           8X  g1   \	        R \        V4       R\        S4       R\        S4       R24      hVR\        S4       pV\        S4      R pS Uu. uF  qBV,          NK  	  ppS! W#RR7      # u upi )rí   rî   rï   rð   NTrÊ   )rñ   rò   ró   rˆ   r    )	ré   rõ   rö   r÷   ÚiÚinverse_orderrù   rÎ   rû   s	   *    €€€€r)   rÚ   Ú-LoopBody.reorder_iter_loops.<locals>.new_bodyˆ  sÀ   ø€ Ø=”i—o‘o×3Ñ3°GÓ<Ð=ˆEÜ�u“:¤ Y£´#°kÓ2BÕ!BÔBÜ$Ø,¬S°«Z¨Lð 90Ü03°I³Ð/?¸sÄ3À{ÓCSÐBTÐTUðWóð ð Ð-œs 9›~Ð.ˆHØœs 9›~Ð/Ð0ˆJÙ-:Ó;©]¨ Ÿ˜©]ˆHÐ;Ù˜HÈTÔRÐRùò <s   ÂB9)
Úirr  r‰   rˆ   r    r   rÍ   Ú	enumerateÚrangerp   )r7   Ú	new_orderr  rÏ   Ú
reorder_fnrþ   rÿ   rŠ   r‹   rŒ   ÚaÚbr  rÚ   r  rù   rÎ   rû   s   &&            @@@@r)   Úreorder_iter_loopsÚLoopBody.reorder_iter_loopsl  s)  û€ õ 	%àˆØ—J‘Jˆ	Ü�9˜Q•<Ó ¤C¨	£NÔ2Ü Ø/´°I¸aµLÓ0AÐ/Bð C$Ü$'¨	£NÐ#3ð5óð ñ " )Ó,ˆ
à!*Ñˆ	�;Ù" 9Ó-ˆà" KÐ0ˆ	ä/;×/QÒ/QØð0
àñ0
Ñ,Ñ ˆ *ô
 +4°IÔ*>Ô?Ñ*>¡$ !˜šÑ*>Ò?ˆÜ38¼¸Y»Ô3HÓIÑ3H¨a˜ q×)Ð)Ñ3HÑIˆ÷
	Só 
	Sô ØØÐ$ØØØó
ð 	
ùó @ùÚIs   Â%C=ÃDc                	ó–   € V P                   f   \        R4      hV P                  f   \        R4      hV P                   V P                  3# )Nziter_vars is Nonezreduce_vars is None)rŠ   r    r‹   r¨   s   &r)   rË   ÚLoopBody.varsœ  sE   € à�>‰>Ò!Ü Ð!4Ó5Ð5Ø×ÑÒ#Ü Ð!6Ó7Ð7Ø�~‰~˜t×/Ñ/Ð/Ð/r(   c                	óî   € \         P                  ! V P                  P                  3R  V P                  P                  4        4       4      pV UUu. uF  q"P                   F  q3NK  	  K  	  upp# u uppi )c              3  ó8   "  € T F  qP                   x € K  	  R # 5ir#   )r1   )Ú.0Úblocks   & r)   Ú	<genexpr>Ú%LoopBody.get_nodes.<locals>.<genexpr>¨  s   é € Ð>Ñ&=˜U�[Ž[Ó&=ùs   ‚)rñ   rò   rx   r1   rt   r‡   Únodes)r7   Ú
all_graphsr1   r¢   s   &   r)   Ú	get_nodesÚLoopBody.get_nodes¤  sY   € ä—_’_Ø�_‰_×"Ñ"Ð$Ù> d§n¡n×&;Ñ&;Ô&=Ó>ó
ˆ
ñ #-ÔE¡*˜¿¼°’¹‘¡*ÒEÐEùÓEs   ÁA1c                	ó   € ^RI Hp V! V 4      # )é   )Ú	BoundVars)Úboundsr1  )r7   r1  s   & r)   r2  ÚLoopBody.bounds¬  s   € õ 	&á˜‹Ðr(   c                	óÚ   € \        V P                  \        P                  ,          4       F3  pVP                  V8X  g   K  V P
                  VP                  ,          u # 	  \        V4      hr#   )Úreversedry   rg   rh   rc   rr   ra   ÚKeyError©r7   rc   Úentrys   && r)   Úget_read_exprÚLoopBody.get_read_expr³  sU   € ä˜d×/Ñ/´×0DÑ0DÕEÖFˆEØ× Ñ  KÖ/Ø×*Ñ*¨5×+;Ñ+;Õ<Ò<ñ Gô �{Ó#Ð#r(   c                	ó0  € \         P                  ! V P                  \        P                  ,          V P                  \        P
                  ,          4       F3  pVP                  V8X  g   K  V P                  VP                  ,          u # 	  \        V4      hr#   )
rñ   rò   ry   rg   rj   rk   rc   rr   ra   r6  r7  s   && r)   Úget_write_exprÚLoopBody.get_write_exprº  sq   € Ü—_’_Ø×Ñœo×3Ñ3Õ4Ø×Ñœo×=Ñ=Õ>ö
ˆEð × Ñ  KÖ/Ø×*Ñ*¨5×+;Ñ+;Õ<Ò<ñ
ô �{Ó#Ð#r(   c                	ó¤   € V P                   \        P                  ,           Uu. uF   pV P                  VP                  ,          NK"  	  up# u upi r#   )ry   rg   rh   rr   ra   ©r7   r8  s   & r)   Úget_read_exprsÚLoopBody.get_read_exprsÃ  sN   € ð ×*Ñ*¬?×+?Ñ+?Ö@ó
á@�ð ×Ñ × 0Ñ 0×1Ð1Ù@ñ
ð 	
ùò 
s   ¤&Ac                	óê   € . p\        V P                  \        P                  ,          4       FB  pVP                  V8X  g   K  VP                  V P                  VP                  ,          4       KD  	  V# r#   )r5  ry   rg   rh   rc   Úappendrr   ra   ©r7   rc   Úoutr8  s   &&  r)   Úget_all_read_exprÚLoopBody.get_all_read_exprÉ  sZ   € àˆÜ˜d×/Ñ/´×0DÑ0DÕEÖFˆEØ× Ñ  KÖ/Ø—
‘
˜4×.Ñ.¨u×/?Ñ/?Õ@ÖAñ Gð ˆ
r(   c                	ó  € \         P                  ! V P                  \        P                  ,          V P                  \        P
                  ,          4       Uu. uF   pV P                  VP                  ,          NK"  	  up# u upi r#   )rñ   rò   ry   rg   rj   rk   rr   ra   r?  s   & r)   Úget_write_exprsÚLoopBody.get_write_exprsÑ  sr   € ô #ŸšØ×!Ñ!¤/×"7Ñ"7Õ8Ø×!Ñ!¤/×"AÑ"AÕBôó
ñ�ð ×Ñ × 0Ñ 0×1Ð1ññ
ð 	
ùò 
s   Á&Bc                	ó@  € . p\         P                  ! V P                  \        P                  ,          V P                  \        P
                  ,          4       FB  pVP                  V8X  g   K  VP                  V P                  VP                  ,          4       KD  	  V# r#   )
rñ   rò   ry   rg   rj   rk   rc   rC  rr   ra   rD  s   &&  r)   Úget_all_write_exprÚLoopBody.get_all_write_exprÚ  sv   € ØˆÜ—_’_Ø×Ñœo×3Ñ3Õ4Ø×Ñœo×=Ñ=Õ>ö
ˆEð × Ñ  KÖ/Ø—
‘
˜4×.Ñ.¨u×/?Ñ/?Õ@ÖAñ
ð ˆ
r(   c           	     	óÎ  € R \        V P                  4       2.pTP                  V P                  P	                  4        UUu. uF  w  r#V RV 2NK  	  upp4       TP                  \
        P                  ! RV P                  3.V P                  P	                  4       4       UUu. uF  w  r$VP                  V4      NK  	  upp4       RP                  V4      # u uppi u uppi )zvar_ranges = z = ÚbodyÚ
)ÚdictrŒ   Úextendrr   rµ   rñ   rò   rx   rt   Ú	debug_strÚjoin)r7   Úlinesrº   Úvalr(  s   &    r)   rS  ÚLoopBody.debug_strä  sÏ   € Ø ¤ d§o¡oÓ!6Ð 7Ð8Ð9ˆØ�‰¸×9LÑ9L×9RÑ9RÔ9TÔUÑ9T©I¨D˜˜˜c # Ó'Ñ9TÒUÔVØ�‰ô $-§?¢?Ø˜dŸo™oÐ.Ð/°·±×1EÑ1EÓ1Gô$ôñ$‘K�Dð —‘ Ö%ñ$òô	
ð �y‰y˜ÓÐùó Vùós   ÁC
Â&C!
c               ó   € V ^8„  d   QhRR/# ©r;   r=   r®   r'   )r>   s   "r)   r?   r–   ñ  s   € ÷ 

ñ 

 ñ 

r(   c                óL  € \        V P                  \        P                  ,          4      ^8H  ;'       dq    \        V P                  \        P                  ,          4      ^8H  ;'       d<    \        V P
                  4      ^8H  ;'       d    V P                  P                  R4      # )z`
True if this contains only a single loads and store.
Note, this could involve a layout change.
)ÚloadÚstore)rˆ   ry   rg   rh   rj   r2   rx   Úcontains_only_opsr¨   s   &r)   Úis_memory_copyÚLoopBody.is_memory_copyñ  s�   € ô �×!Ñ!¤/×"6Ñ"6Õ7Ó8¸AÑ=÷ Eð EÜ�D×%Ñ%¤o×&;Ñ&;Õ<Ó=ÀÑB÷Eð Eä�D—O‘OÓ$¨Ñ)÷Eð Eð —‘×1Ñ1Ð2CÓDð		
r(   c               ó(   € V ^8„  d   QhRRRRRRRR/# )r;   r‚   ú
sympy.ExprÚmtyperg   rc   rb   rd   r'   )r>   s   "r)   r?   r–   ÿ  s2   € ÷ ñ àðð ðð  ð	ð
 ñr(   c                	ó.  € V P                  V4      pV P                  P                  V4      pV'       g5   R \        V P                  4       2pWPP                  V&   WP                  V&   V P
                  V,          P                  \        WSV4      4       V# )rõ   )rƒ   r|   rÁ   rˆ   rr   ry   rC  r_   )r7   r‚   rb  rc   rd   rº   s   &&&&& r)   Úadd_index_exprÚLoopBody.add_index_exprÿ  s†   € ð ×.Ñ.¨tÓ4ˆØ×'Ñ'×+Ñ+¨DÓ1ˆßØœ3˜t×2Ñ2Ó3Ð4Ð5ˆDØ-1×$Ñ$ TÑ*Ø(,×Ñ Ñ%Ø×Ñ˜%Õ ×'Ñ'¬°DÀtÓ(LÔMØˆr(   c                ó´   € VR,          P                  4       '       d   W P                  9  d   TpMV \        V P                  4       2pWP                  V&   V# )zaNot actually for nn.Modules, but subblocks in generated code are mapped to FX call_module opcodesrž   )Ú	isnumericr2   rˆ   )r7   r(  rÉ   rº   s   &&& r)   Úadd_submoduleÚLoopBody.add_submodule  sL   € à�"�:×Ñ×!Ò! f·O±OÔ&CØ‰Dà�Xœc $§/¡/Ó2Ð3Ð4ˆDØ %�‰˜ÑØˆr(   c                	óð   € \        \        P                  \        V P                  4      4      pW P
                  9   d   \        R V R24      hV P                  P                  V4       WP
                  V&   V# )zIndirect var z already in indirect_var_ranges)r   r   ÚINDIRECTrˆ   ru   rv   r    rC  )r7   ÚsizeÚvars   && r)   Úadd_indirectÚLoopBody.add_indirect  se   € Ü,¬T¯]©]¼CÀ×@RÑ@RÓ<SÓTˆØ×*Ñ*Ô*Ü  =°°Ð5TÐ!UÓVÐVØ×Ñ×!Ñ! #Ô&Ø(,× Ñ  Ñ%Øˆ
r(   c           
     óø   € \        V4      \        V4      8X  d   R# V P                  f   \        R4      hV P                  P                  4        UUu/ uF  w  r4V\	        WAV/4      bK  	  uppV n        R# u uppi )z,Swap in a variable used in indirect indexingNz,indexing must be set before replace_indirect)r`   r�   r    rµ   r   )r7   ÚoldÚnewr»   r¼   s   &&&  r)   Úreplace_indirectÚLoopBody.replace_indirect   sc   € äˆs‹8”s˜3“xÔÙØ�=‰=Ò Ü Ð!OÓPÐPàBFÇ-Á-×BUÑBUÔBWÔXÑBW¹$¸!˜œJ q°¨*Ó5Ò5ÑBWÒXˆŽùÓXs   ÁA6c                	óZ   € V P                   f   \        R4      hV P                   V,          # )Nz%indexing must be set before get_index)r�   r    rÂ   s   &&r)   r«   ÚLoopBody.get_index)  s'   € Ø�=‰=Ò Ü Ð!HÓIÐIØ�}‰}˜TÕ"Ð"r(   c           	     	ób  a € . \         P                  P                  V4      Op\        V4      \        S P                  4      8X  g   \        R V RS P                   24      hV'       g^   \        ;QJ d    V 3R lV 4       F  '       d   K   RM	  RM! V 3R lV 4       4      '       g   \        RS P                  : RV: 24      h\        \        S P                  P                  4       V4      4      pS P                  P                  4        UUu/ uF  w  rVV\        Wd4      bK  	  upp# u uppi )zIndex length mismatch: z vs c              3  ó@   <"  € T F  qSP                   9  x € K  	  R # 5ir#   )rŒ   )r'  r¼   r7   s   & €r)   r)  Ú.LoopBody.indexing_from_args.<locals>.<genexpr>2  s   øé € ð 6
Ù.3¨�T—_‘_Ö$«eùs   ƒFTz,Same symbol found in index: self.var_ranges=z
, indices=)rñ   rò   ró   rˆ   rŒ   r    ÚallrQ  ÚzipÚkeysrr   rµ   r   )r7   ré   r’   rõ   rÞ   rº   r‚   s   f&&    r)   r´   ÚLoopBody.indexing_from_args.  s  ø€ Ø9”)—/‘/×/Ñ/°Ó8Ð9ˆÜ�5‹zœS §¡Ó1Ô1Ü Ð#:¸5¸'ÀÀdÇoÁoÐEVÐ!WÓXÐXß)·#³#ô 6
Ù.3ó6
·#·#²#ô 6
Ù.3ó6
÷ 3
ò 3
ô !Ø?¨t¯©Ñ.@ÀÀ7Á*ÐMóð ô œC §¡× 4Ñ 4Ó 6¸Ó>Ó?ˆð #×1Ñ1×7Ñ7Ô9ô
á9‘
�ð ”*˜TÓ0Ò0Ù9ò
ð 	
ùó 
s   ÄD+r’   c               	ó`   € V P                  W!4      V n        V P                  4       pR V n        V# r#   )r´   r�   rx   )r7   r’   ré   Úresults   &$* r)   Ú__call__ÚLoopBody.__call__?  s,   € Ø×/Ñ/°ÓTˆŒØ—‘Ó"ˆØˆŒØˆr(   c                	ó€   a aaaa€ VV VVV3R  lp\         P                  ! \        P                  SSSSR7      Vn        V# )c           	     ól   <€ SP                  S\        P                  P                  V SSS4      4       R # r#   )rs  r   r   Úindirect_indexing)Únew_varÚcheckr7   rl  rm  Úwrap_negs   &€€€€€r)   Úset_indirectÚ5LoopBody.bind_set_indirect_shim.<locals>.set_indirectF  s+   ø€ Ø×!Ñ!Ø”Q—U‘U×,Ñ,¨W°d¸EÀ8ÓLör(   )rm  rl  r†  r‡  )rO   Úpartialrp   Úbind_set_indirect_shimr¸   )r7   rm  rl  r†  r‡  rˆ  s   fffff r)   r‹  ÚLoopBody.bind_set_indirect_shimE  s?   ü€ ÷	ñ 	ô
 '×.Ò.Ü×+Ñ+ØØØØô
ˆÔð Ðr(   c                	ój   a€ V3R  lp\         P                  ! \        P                  SR7      Vn        V# )c                óF   <€ \         P                  P                  V SV4      # r#   )r   r   Úscan)Údtypesr‡   Ú
combine_fns   &&€r)   ÚshimÚ%LoopBody.bind_scan_shim.<locals>.shimU  s   ø€ Ü—5‘5—:‘:˜f j°&Ó9Ð9r(   )r‘  )rO   rŠ  rp   Úbind_scan_shimr¸   )r7   r‘  r’  s   &f r)   r”  ÚLoopBody.bind_scan_shimT  s)   ø€ õ	:ô ×&Ò&¤x×'>Ñ'>È:ÔVˆŒ
Øˆr(   c                	ón   a a€ VV 3R  lp\         P                  ! \        P                  SR7      Vn        V# )c                óh   <€ \         P                  P                  V SP                  S,          V4      # r#   )r   r   Úmaskedrt   )Úmaskr²   rº   r7   s   &&€€r)   r’  Ú'LoopBody.bind_masked_shim.<locals>.shim\  s#   ø€ Ü—5‘5—<‘<  d§n¡n°TÕ&:¸EÓBÐBr(   )rº   )rO   rŠ  rp   Úbind_masked_shimr¸   )r7   rº   r’  s   ff r)   r›  ÚLoopBody.bind_masked_shim[  s*   ù€ ö	Cô ×&Ò&¤x×'@Ñ'@ÀtÔLˆŒ
Øˆr(   )rŸ   r�   rr   r|   rv   ru   rŠ   ry   r{   r‹   rx   r‰   rt   r2   rŒ   )F©NN)-rJ   rK   rL   rM   Ú__doc__re   rN   rƒ   r/   r¤   r§   r�   rŽ   rÃ   rÛ   rá   r  r  r!  ÚpropertyrË   r   r-  r2  r9  r<  r@  rF  rI  rL  rS  r^  Ú__repr__rd  rh  rn  rs  r«   r´   r€  r‹  r”  r›  rQ   rR   rS   s   @r)   rp   rp   ^   s;  ø‡ ñð
 *Ó)ØÓØ'Ó'Ø%Ó%Ø7Ó7ØÓØ:Ó:Ø'Ó'ð /Ó.àñó ð÷õ8*òò%õ$
õ8/õ*õXõ1õf)
õV.
ð` ñ0ó ð0ð ñFó ðFð ñó ðò$ò$ò
òò
òò õ

ð €H÷ò òòYò#ô

ð"¸Eô òò÷ð r(   rp   c                  óT   € ] tR tRtRtR R ltR tR tRR ltR R	 lt	R
 R lt
RtR# )rw   ic  zð
Captures the body of a Loops subclass into an FX graph.
In normal cases there will be a 1:1 mapping between LoopBody and
LoopBodyBlock, however in the case of ops.masked() the masked out
operations will manifest as an extra LoopBodyBlock.
c               ó$   € V ^8„  d   QhRRRRRR/# )r;   rO  rp   r‘   úCallable[..., Any]rG   z	list[Any]r'   )r>   s   "r)   r?   ÚLoopBodyBlock.__annotate__k  s"   € ÷ "ñ "˜Xð "Ð+=ð "ÀYñ "r(   c                	óô  € Wn         \        4       pVP                  R RR/ 4      p^RIHp \        \        VVV4      VP                  4      p\        P                  '       d2   V! WpP                   P                  V P                   P                  4      p\        P                  ! V4      ;_uu_ 4        \        P                  ! V! V!  4       RRR4       VP                   V n        R#   + '       g   i     L#; i)Úplaceholderr   )ÚIndexPropagationNr'   )rO  rU   Úcreate_proxyÚindex_propagationr§  ÚCountOpsÚCaptureIndexingr{   r   Úconstant_and_index_propagationrŒ   rv   r   Úset_ops_handlerr   Úoutputr1   )r7   rO  r‘   rG   ÚtracerÚ	proxy_opsr§  Úhandlers   &&&&    r)   r/   ÚLoopBodyBlock.__init__k  s¼   € ØŒ	ä“ˆØ×'Ñ'¨°u¸bÀ"ÓEˆ	å7äÜàØØó	ð �N‰Nó
ˆô ×0×0Ð0Ù&ØŸ™×-Ñ-¨t¯y©y×/LÑ/LóˆGô ×Ò˜w×'Õ'ô �JŠJ‘r˜4‘yÔ!÷ (ð —\‘\ˆŽ
÷	 (×'ús   Â1C'Ã'C7	c           
     	ó2  € R pR pV P                   P                   FQ  pVP                  R8X  d   V'       d   \        R4      hTpVP                  R8X  g   K<  V'       d   \        R4      hTpKS  	  V'       g   \        R4      hV'       g   \        R4      hVP                  R	,          pVP                  R
,          pVP                  ^,          pVP                  ^ ,          pR\        V P                  P                  4      /pV P                   P                  V4      ;_uu_ 4        V P                   P                  RWvWEV34       R R R 4       V P                   P                  V4       V P                   P                  V4       V #   + '       g   i     LH; i)NÚ	reductionzFound multiple reduction nodesÚstore_reductionz$Found multiple store_reduction nodesz No reduction node found in graphz&No store_reduction node found in graphr�   r™   éþÿÿÿrž   )r1   r+  rœ   r    rG   rˆ   rO  r‹   Úinserting_afterr˜   Ú
erase_node)	r7   Úredr\  r¢   Úreduction_typeÚred_argÚbufr   Ú
extra_metas	   &        r)   r§   Ú'LoopBodyBlock.extract_pw_from_reduction‡  s@  € ØˆØˆØ—J‘J×$Ô$ˆDØ�{‰{˜kÔ)ßÜ(Ð)IÓJÐJØ�Ø�{‰{Ð/Ö/ßÜ(Ð)OÓPÐPØ’ñ %÷ Ü Ð!CÓDÐDßÜ Ð!IÓJÐJØŸ™ "�ˆØ—(‘(˜2•,ˆØ�j‰j˜�mˆØ�j‰j˜�mˆð !¤# d§i¡i×&;Ñ&;Ó"<ð
ˆ
ð �Z‰Z×'Ñ'¨×.Õ.Ø�J‰J×"Ñ"Ø$ s°È*Ð&Uô÷ /ð 	�
‰
×Ñ˜eÔ$Ø�
‰
×Ñ˜cÔ"Øˆ÷ /×.ús   Ä& FÆF	c                	ó    € V P                   pV P                  P                  p\        W4      P	                  \
        P                  ! 4       4      # r#   )r1   rO  r2   r!   rF   r   Úget_ops_handler)r7   r1   r2   s   &  r)   r€  ÚLoopBodyBlock.__call__§  s9   € Ø—
‘
ˆØ—Y‘Y×)Ñ)ˆ
ä˜uÓ1×5Ñ5´a×6GÒ6GÓ6IÓJÐJr(   c           
     	ó  € \         P                  P                  V P                  P                  V P
                  4      P                  p\        P                  ! R RVP                  4       P                  RRV R24      4      # )z;[^\n]*rX   zdef forward(zdef Ú()r$   r%   ÚGraphModulerO  r2   r1   ÚcodeÚreÚsubÚstripÚreplace)r7   rº   rÅ  s   && r)   rS  ÚLoopBodyBlock.debug_str­  sa   € Ü�x‰x×#Ñ# D§I¡I×$8Ñ$8¸$¿*¹*ÓE×JÑJˆÜ�vŠvàØØ�J‰J‹L× Ñ  °4¸°v¸Q°Ó@ó	
ð 	
r(   c               ó   € V ^8„  d   QhRR/# rY  r'   )r>   s   "r)   r?   r¤  ¶  s   € ÷ 
ñ 
°ñ 
r(   c                	óà   a€ \         ;QJ d9    V3R  lV P                  P                  RR7       4       F  '       d   K   R# 	  R# ! V3R  lV P                  P                  RR7       4       4      # )c              3  óB   <"  € T F  pVP                   S9   x € K  	  R # 5ir#   )rœ   )r'  r¢   Úallowed_opss   & €r)   r)  Ú2LoopBodyBlock.contains_only_ops.<locals>.<genexpr>·  s!   øé € ð 
á?�ð �K‰K˜;Ö&Û?ùs   ƒr˜   )r›   FT)rz  r1   r¡   )r7   rÎ  s   &fr)   r]  ÚLoopBodyBlock.contains_only_ops¶  sb   ø€ ß‹sô 
àŸ
™
×-Ñ-°Ð-Ô?ó
�sŒsð 	
Šsð 	
ˆsô 
àŸ
™
×-Ñ-°Ð-Ô?ó
ó 
ð 	
r(   c               ó   € V ^8„  d   QhRR/# )r;   rO  rp   r'   )r>   s   "r)   r?   r¤  ¼  s   € ÷ ñ ˜(ñ r(   c                óŽ   € \         P                  \         4      pVP                  P                  / V P                  CRV/C4       V# )z'Shallow copy with a new parent LoopBodyrO  )rw   Ú__new__Ú__dict__rà   )r7   rO  Úcopys   && r)   r¸   ÚLoopBodyBlock.clone¼  s:   € ä×$Ñ$¤]Ó3ˆØ�‰×ÑÐ< §¡Ð<¨v°tÑ<Ô=Øˆr(   )rO  r1   N)r(  )rJ   rK   rL   rM   rž  r/   r§   r€  rS  r]  r¸   rQ   r'   r(   r)   rw   rw   c  s,   † ñõ"ò8ò@Kô
õ
÷ñ r(   rw   c                  ó.   € ] tR tRtR R ltR R ltRtR# )rª  iÃ  c               ó    € V ^8„  d   QhRRRR/# )r;   ÚinnerúOpsHandler[Any]Úcountsrz   r'   )r>   s   "r)   r?   ÚCountOps.__annotate__Ä  s   € ÷ ñ ˜oð Ð7Oñ r(   c                	ó   € Wn         W n        R # r#   )Ú_innerÚ_counts)r7   rÙ  rÛ  s   &&&r)   r/   ÚCountOps.__init__Ä  s   € ØŒØŽr(   c               ó(   € V ^8„  d   QhRRRRRRRR/# )	r;   rº   r`   rG   ztuple[Any, ...]rH   rs   r=   r   r'   )r>   s   "r)   r?   rÜ  È  s)   € ÷ ;ñ ;˜Sð ;¨ð ;Àð ;ÐTWñ ;r(   c                	óx   € V P                   V;;,          ^,          uu&   \        V P                  V4      ! V/ VB # )r0  )rß  ÚgetattrrÞ  )r7   rº   rG   rH   s   &&&&r)   Ú_defaultÚCountOps._defaultÈ  s1   € Ø�‰�T×˜aÕÓÜ�t—{‘{ DÔ)¨4Ð:°6Ñ:Ð:r(   )rß  rÞ  N)rJ   rK   rL   rM   r/   rä  rQ   r'   r(   r)   rª  rª  Ã  s   † õ÷;ñ ;r(   rª  c                  óÎ   a € ] tR tRtR tR V 3R lltR R ltR R ltR R	 ltR
 R lt	RR lt
R tR tR tR tR tRR R lltR R ltR R ltR tR tRR ltR tRtV ;t# ) r«  iÍ  c               ó$   € V ^8„  d   QhRRRRRR/# )r;   rÙ  rÚ  rO  rp   r¯  rU   r'   )r>   s   "r)   r?   ÚCaptureIndexing.__annotate__Ð  s(   € ÷ ñ àðð ðð ñ	r(   c                	ó>   <€ \         SV `  V4       W n        W0n        R # r#   )r.   r/   rO  r¯  )r7   rÙ  rO  r¯  r8   s   &&&&€r)   r/   ÚCaptureIndexing.__init__Ð  s   ø€ ô 	‰Ñ˜ÔØŒ	ØŽr(   c               ó$   € V ^8„  d   QhRRRRRR/# )r;   r‚   ra  rb  rg   rH   r   r'   )r>   s   "r)   r?   rè  Ú  s!   € ÷ 
ñ 
˜zð 
°/ð 
ÈSñ 
r(   c           	     	óv   € V P                   P                  R RV P                  P                  ! W3/ VB 3/ 4      # )Úcall_moduler«   )r¯  r¨  rO  rd  )r7   r‚   rb  rH   s   &&&,r)   Ú
_add_indexÚCaptureIndexing._add_indexÚ  s<   € Ø�{‰{×'Ñ'ØØØ�Y‰Y×%Ò% dÑ<°VÑ<Ð>Øó	
ð 	
r(   c               ó    € V ^8„  d   QhRRRR/# )r;   r‚   ra  r=   r'   )r>   s   "r)   r?   rè  â  s   € ÷ Qñ Q˜jð Q¨Zñ Qr(   c                	ó|   € \         P                  P                  P                  WP                  P
                  4      # r#   )r   r1   r¶   r·   rO  rŒ   )r7   r‚   s   &&r)   Ú	_simplifyÚCaptureIndexing._simplifyâ  s'   € Ü�w‰w×Ñ×4Ñ4°T¿9¹9×;OÑ;OÓPÐPr(   c               ó    € V ^8„  d   QhRRRR/# )r;   rº   r`   rõ   ra  r'   )r>   s   "r)   r?   rè  å  s   € ÷ -ñ -˜ð - Zñ -r(   c                	óž   € V P                  V4      pV P                  V\        P                  VR 7      pV P                  P                  W4      # ©©rc   )rò  rî  rg   rh   rÞ  r[  ©r7   rº   rõ   s   &&&r)   r[  ÚCaptureIndexing.loadå  s?   € Ø—‘˜uÓ%ˆØ—‘ ¤×';Ñ';È�ÓNˆØ�{‰{×Ñ Ó,Ð,r(   c               ó    € V ^8„  d   QhRRRR/# )r;   rº   r`   rõ   r   r'   )r>   s   "r)   r?   rè  ê  s   € ÷ 2ñ 2˜cð 2¨#ñ 2r(   c                	ó  € \        V\        4      '       g   \        R \        V4       24      hV P                  P                  \        P                  ! V4      \        P                  VR7       V P                  P                  W4      # )zExpected int, got r÷  )r�   r   r    r~   rO  rd  r€   r�   rg   ri   rÞ  Ú	load_seedrø  s   &&&r)   rü  ÚCaptureIndexing.load_seedê  sj   € Ü˜%¤×%Ò%Ü Ð#5´d¸5³k°]Ð!CÓDÐDØ�	‰	× Ñ Ü�MŠM˜%Ó ¤/×";Ñ";Èð 	!ô 	
ð �{‰{×$Ñ$ TÓ1Ð1r(   c                	ó    € V P                  V4      pV P                  V\        P                  WR 7      pV P                  P                  WW44      # ))rc   rd   )rò  rî  rg   rj   rÞ  r\  )r7   rº   rõ   Úvaluerd   s   &&&&&r)   r\  ÚCaptureIndexing.storeò  sI   € Ø—‘˜uÓ%ˆØ—‘Ø”?×(Ñ(°dð  ó 
ˆð �{‰{× Ñ  ¨eÓ:Ð:r(   c                	ó    € V P                  V4      pV P                  V\        P                  VR 7      pV P                  P                  WV4      # rö  )rò  rî  rg   rk   rÞ  rµ  )r7   rº   rõ   rÿ  s   &&&&r)   rµ  ÚCaptureIndexing.store_reductionù  sI   € Ø—‘˜uÓ%ˆØ—‘Ø”?×2Ñ2Àð  ó 
ˆð �{‰{×*Ñ*¨4¸Ó>Ð>r(   c                	óì   a€ V P                   P                  WW44      o\        V4      pV^8”  dE   \        ;QJ d     . V3R l\	        V4       4       F  NK  	  5# ! V3R l\	        V4       4       4      # S# )r0  c              3  ó6   <"  € T F  pSV,          x € K  	  R # 5ir#   r'   ©r'  r  r  s   & €r)   r)  Ú,CaptureIndexing.reduction.<locals>.<genexpr>  s   øé € Ð?Ñ,> q˜ ŸšÓ,>ùó   ƒ)rÞ  r´  r   r†   r  )r7   ÚdtypeÚ	src_dtyperº  rÿ  Únum_outputsr  s   &&&&& @r)   r´  ÚCaptureIndexing.reduction   s[   ø€ Ø—‘×&Ñ& u¸ÓOˆÜ+¨NÓ;ˆØ˜Œ?ß”5Ô?¬E°+Ô,>Ó?—5Ð?�5Ô?¬E°+Ô,>Ó?Ó?Ð?Øˆr(   c                	ó0  € V P                  V4      p\        V\        \        P                  34      '       d&   V P
                  P                  \        V4      V4      # V P                  V\        P                  4      pV P
                  P                  W4      # r#   )rò  r�   r   r€   r�   rÞ  Úconstantrî  rg   rl   Ú
index_expr©r7   rõ   r  s   &&&r)   r  ÚCaptureIndexing.index_expr  ól   € Ø—‘˜uÓ%ˆÜ�eœc¤5§=¡=Ð1×2Ò2Ø—;‘;×'Ñ'¬¨E«
°EÓ:Ð:Ø—‘ ¤×'AÑ'AÓBˆØ�{‰{×%Ñ% eÓ3Ð3r(   c                	ó0  € V P                  V4      p\        V\        \        P                  34      '       d&   V P
                  P                  \        V4      V4      # V P                  V\        P                  4      pV P
                  P                  W4      # r#   )rò  r�   r   r€   r�   rÞ  r  rî  rg   rl   Ú
value_exprr  s   &&&r)   r  ÚCaptureIndexing.value_expr  r  r(   c                	ó  € V P                  V4      pV P                  V\        P                  4      pV P                  P                  V4      pV P                  V\        P                  4      pV P                  P                  WW44      # r#   )rò  rî  rg   rm   rO  rƒ   rÞ  Úcheck_bounds)r7   rõ   rl  ÚlowerÚuppers   &&&&&r)   r  ÚCaptureIndexing.check_bounds  sg   € Ø—‘˜uÓ%ˆØ—‘ ¤×'CÑ'CÓDˆØ�y‰y×3Ñ3°DÓ9ˆØ�‰˜t¤_×%AÑ%AÓBˆØ�{‰{×'Ñ'¨°UÓBÐBr(   c               ó8   € V ^8„  d   QhRRRRRRRRRR	R
RRRRR/# )r;   r‡   r   Ú
boundariesz.tuple[str, sympy.Expr, sympy.Expr, sympy.Expr]Úboundary_indicesÚindexing_dtypeztorch.dtypeÚrightr®   Úsorterztuple[str, sympy.Expr] | NoneÚsorter_indiceszT | Noner=   r'   )r>   s   "r)   r?   rè    s[   € ÷ /
ñ /
àð/
ð Cð/
ð ð	/
ð
 $ð/
ð ð/
ð .ð/
ð !ð/
ð 
ñ/
r(   c           	     óì  € V^ ,          V P                  V^,          \        P                  V^ ,          R7      V P                  V^,          \        P                  V^ ,          R7      V P                  V^,          \        P                  V^ ,          R7      3pVe:   V^ ,          V P                  V^,          \        P                  V^ ,          R7      3pV P                  P	                  VVVVVVV4      # )z#
See [Note: Inductor bucketize op]
r÷  )rî  rg   rn   rÞ  Ú	bucketize)r7   r‡   r  r  r  r  r  r   s   &&&&&&&&r)   r"  ÚCaptureIndexing.bucketize  sø   € ð �q�MØ�O‰OØ˜1•Ü×)Ñ)Ø& q�Mð ó ð
 �O‰OØ˜1•Ü×)Ñ)Ø& q�Mð ó ð
 �O‰OØ˜1•Ü×)Ñ)Ø& q�Mð ó ð
ˆ
ð$ Òà�q•	Ø—‘Ø˜1•Iœ×8Ñ8ÀfÈQÅið  ó ðˆFð �{‰{×$Ñ$ØØØØØØØó
ð 	
r(   c               ó   € V ^8„  d   QhRR/# )r;   Úmasked_bodyr£  r'   )r>   s   "r)   r?   rè  M  s   € ÷ 	
ñ 	
Ð.@ñ 	
r(   c                ó8  € V P                   P                  RR4      pV P                   P                  V4      V P                   P                  V&   \	        V P                   V. 4      V P                   P
                  V&   V P                  P                  RWAV3/ 4      # )zB
Recursively capture the masked out body in another LoopBodyBlock
NÚmasked_subblockrí  )rO  rh  r›  r2   rw   rt   r¯  r¨  )r7   Ú
mask_proxyr%  Úother_proxyrº   s   &&&& r)   r˜  ÚCaptureIndexing.maskedM  s‚   € ð �y‰y×&Ñ& tÐ->Ó?ˆØ%)§Y¡Y×%?Ñ%?ÀÓ%Eˆ�	‰	×Ñ˜TÑ"Ü$1°$·)±)¸[È"Ó$Mˆ�	‰	×Ñ˜DÑ!Ø�{‰{×'Ñ'Ø˜4¨kÐ!:¸Bó
ð 	
r(   c               ó   € V ^8„  d   QhRR/# )r;   r‘  z=Callable[[tuple[Any, ...], tuple[Any, ...]], tuple[Any, ...]]r'   )r>   s   "r)   r?   rè  X  s   € ÷ Añ Að RñAr(   c                	ó\  a€ V P                   P                  V4      pV P                   P                  VR 4      pV P                  P	                  RVW3/ 4      o\
        ;QJ d)    . V3R l\        \        V4      4       4       F  NK  	  5# ! V3R l\        \        V4      4       4       4      # )r�  rí  c              3  ó6   <"  € T F  pSV,          x € K  	  R # 5ir#   r'   r  s   & €r)   r)  Ú'CaptureIndexing.scan.<locals>.<genexpr>g  s   øé € Ð@Ñ(? 1�V˜A—Y’YÓ(?ùr  )rO  r”  rh  r¯  r¨  r†   r  rˆ   )r7   Údtype_proxyr‘  Úvalue_proxyr’  rº   r  s   &&&&  @r)   r�  ÚCaptureIndexing.scanX  sŠ   ø€ ð �y‰y×'Ñ'¨
Ó3ˆØ�y‰y×&Ñ& t¨VÓ4ˆØ—‘×)Ñ)ØØØÐ&Øó	
ˆ÷ ŒuÔ@¬¬c°+Ó.>Ô(?Ó@�uÐ@ˆuÔ@¬¬c°+Ó.>Ô(?Ó@Ó@Ð@r(   c                	óè   a€ V P                   P                  WW44      o\        ;QJ d)    . V3R  l\        \	        V4      4       4       F  NK  	  5# ! V3R  l\        \	        V4      4       4       4      # )c              3  ó6   <"  € T F  pSV,          x € K  	  R # 5ir#   r'   r  s   & €r)   r)  Ú'CaptureIndexing.sort.<locals>.<genexpr>l  s   øé € Ð;Ñ(: 1�V˜A—Y’YÓ(:ùr  )rÞ  Úsortr†   r  rˆ   )r7   r�  r‡   ÚstableÚ
descendingr  s   &&&&&@r)   r5  ÚCaptureIndexing.sorti  sM   ø€ Ø—‘×!Ñ! &°&ÓEˆçŒuÔ;¬¬c°&«kÔ(:Ó;�uÐ;ˆuÔ;¬¬c°&«kÔ(:Ó;Ó;Ð;r(   c                	ó\   € V P                   P                  V4      pV^ ,          V^,          3# rÀ   )rÞ  Úfrexp)r7   r0  r  s   && r)   r:  ÚCaptureIndexing.frexpn  s)   € Ø—‘×"Ñ" ;Ó/ˆà�q•	˜6 !�9Ð%Ð%r(   c                óì   € V P                   P                  V4      pV P                   P                  WRW44      pV P                  P	                  RV P                   P                  VRV 24      V3/ 4       V# )z`
Flow data from tensors into indexing formulas.
Introduce a call_module to update the indexing.
rí  Úset_)rO  rn  r‹  r¯  r¨  rh  )r7   Úindex_proxyrl  r†  r‡  rm  rˆ  s   &&&&&  r)   r„  Ú!CaptureIndexing.indirect_indexings  sl   € ð �i‰i×$Ñ$ TÓ*ˆØ—y‘y×7Ñ7¸À5ÓSˆØ�‰× Ñ ØØ�I‰I×#Ñ# L°D¸¸°,Ó?ØˆNØô		
ð ˆ
r(   c                	óB   € V P                   P                  R R V/ 4       R# )r®  N)r¯  r¨  )r7   r  s   &*r)   r®  ÚCaptureIndexing.outputƒ  s   € Ø�‰× Ñ  ¨8°V¸RÖ@r(   )rO  r¯  r#   r�  )TT)rJ   rK   rL   rM   rº   r/   rî  rò  r[  rü  r\  rµ  r´  r  r  r  r"  r˜  r�  r5  r:  r„  r®  rQ   rR   rS   s   @r)   r«  r«  Í  sr   ø† Ø€D÷ð õ
õQõ-õ
2ô;ò?òò4ò4òC÷/
õb	
õAò"<ò
&ô
÷ Að Ar(   r«  );Ú
__future__r   r¬   rO   rñ   rÆ  Úenumr   r   Útypingr   r   r   r	   r€   Útorch.fxr$   Útorch._dynamo.utilsr
   Útorch.fx.proxyr   r   Útorch.utils._sympy.functionsr   Útorch.utils._sympy.symbolr   rX   r   r   Úcodegen.commonr   Úops_handlerr   r   r   Úutilsr   r   r   r   r   r   Úvirtualizedr   r   Úcollections.abcr   r   r   r%   ÚInterpreterr!   rU   r_   rg   rp   rw   rª  r«  r'   r(   r)   Ú<module>rP     sÍ   ðå "ã Û Û Û 	ß ß :Ó :ã ã Ý (ß ,Ý ,Ý *ç "Ý 4ß CÑ C÷÷ ÷  ÷ ß2ñ ˆCƒL€ô0�e—h‘h×*Ñ*ô 0ô8%�*ô %ô�*ô ô�dô ÷Bñ B÷J]ñ ]ô@;ˆ~ô ;ôwA�nö wAr(   