+
    –°³jO(  ã                   ó  € ^ RI t ^ RIt^ RIHt ^ RIHt ^ RIHt ^ RIt^ RIH	t	 ^ RI
t
^ RIHtHtHt ^RIHt ^RIHt ^R	IHtHtHt ^R
IHtHtHt ^RIHtHt ^RIHt ] P@                  ! ]!4      t" ! R R4      t# ! R R]]4      t$R# )é    N)ÚCallable)Úpartial)ÚAny)ÚExpr)Úbound_sympyÚSymPyValueRangeAnalysisÚValueRanges©ÚPowByNatural)Úint_oo)ÚInterpreterShimÚLoopBodyÚLoopBodyBlock)ÚDefaultHandlerÚReductionTypeÚ	StoreMode)Úcache_on_selfÚdominated_nodes)ÚVc                   ó¬   a € ] tR t^t o RtV 3R lR ltV 3R lR lt]V 3R lR l4       tV 3R lR	 lt	V 3R
 lR lt
V 3R lR ltV 3R lR ltRtV tR# )Ú	BoundVarsaŠ  
Performs Value Range Analysis on LoopBody's fx graph by calling BoundVars.run()
It exposes the ranges of the nodes in the `bounds` variable

Note. A current limitation of this analysis is that it just works on a per-loop basis.
We should be able to propagate the bounds between across the whole graph. This may benefit
the case a bounded variable is returned by a kernel and fed into another.
c                ó$   <€ V ^8„  d   QhRS[ RR/# )é   Ú	loop_bodyÚreturnN)r   )ÚformatÚ__classdict__s   "€ÚW/home/luca/screen-checking/.venv/lib/python3.14/site-packages/torch/_inductor/bounds.pyÚ__annotate__ÚBoundVars.__annotate__&   s   ø€ ÷ Bñ B¡(ð B¨tñ Bó    c                óD  € R  R lpWn         VP                  P                  4        UUu/ uF+  w  r4V\        \        ,          ! ^ V! V4      ^,
          4      bK-  	  uppV n        \        R V P                   P                  4        4       4      V n        / V n	        R# u uppi )c                óF   € V ^8„  d   QhR\         \        ,          R\        /# )r   Úvr   )r   Úint)r   s   "r   r   Ú(BoundVars.__init__.<locals>.__annotate__'   s"   € ÷ 	Fñ 	Fœ4¤#�:ð 	F¬#ñ 	Fr!   c                 ó\   € \        V \        4      '       d   \        V 4      P                  # T # ©N)Ú
isinstancer   r   Úupper)r$   s   &r   Úupper_boundÚ'BoundVars.__init__.<locals>.upper_bound'   s#   € Ü+5°a¼×+>Ò+>”;˜q“>×'Ñ'ÐEÀAÐEr!   c              3   ó�   "  € T F<  pVP                   R R\        P                  39   g   RVP                   9   g   K8  Vx € K>  	  R# 5i)ÚloadÚ	reductionÚmasked_subblockN)ÚtargetÚoperatorÚgetitem)Ú.0Únodes   & r   Ú	<genexpr>Ú%BoundVars.__init__.<locals>.<genexpr>0   s>   é € ð .
á2�Ø�{‰{˜v {´H×4DÑ4DÐEÔEØ  D§K¡KÑ/÷ ŠDÛ2ùs
   ‚5A¼
AN)
r   Ú
var_rangesÚitemsr	   r   Úreplacement_valsr   Ú	get_nodesÚunbounded_varsÚ_bounds)Úselfr   r+   Úkr$   s   &&   r   Ú__init__ÚBoundVars.__init__&   s•   € õ	Fð #Œð "×,Ñ,×2Ñ2Ô4ô!
á4‘�ð Œ{œ4Ö  ¡K°£N°QÕ$6Ó7Ò7Ù4ò!
ˆÔô
 .ñ .
àŸ™×0Ñ0Ô2ó.
ó 
ˆÔð @BˆŽùó!
s   ª1Bc                ó    <€ V ^8„  d   QhRS[ /# ©r   r   )Ústr)r   r   s   "€r   r   r    9   s   ø€ ÷ 
ñ 
™#ñ 
r!   c           
     óœ   € V P                   P                   R V P                   RV P                   RV P                   RV P
                   R2
# )z(loop_body=z,
 replacement_vals=z, 
unbounded_vars=z, 
_bounds=Ú))Ú	__class__Ú__name__r   r:   r<   r=   )r>   s   &r   Ú__repr__ÚBoundVars.__repr__9   s]   € à�~‰~×&Ñ&Ð'ð (ØŸ™Ð(ð ) Ø $× 5Ñ 5Ð6ð 7Ø"×1Ñ1Ð2ð 3Ø—|‘|�n Að	'ð	
r!   c                ón   <€ V ^8„  d   QhRS[ S[P                  P                  S[S[,          3,          /# rC   )ÚdictÚtorchÚfxÚNoder	   r   )r   r   s   "€r   r   r    C   s+   ø€ ÷ ñ ™D¡§¡§¡±¹DÕ0AÐ!AÕBñ r!   c                ó$  € V P                  V P                  P                  4      pV P                   Fu  p\	        VP
                  \        4      '       d'   R VP
                  9  g   K6  RVP
                  9  g   KI  \        \        ,          P                  4       V P                  V&   Kw  	  \        P                  ! \        4       4      ;_uu_ 4        \        V P                  P                  P                   V4      p\"        P%                  RV P                  P                  P                   4       VP'                  \        P(                  ! 4       V P                  R7       RRR4       V P                  #   + '       g   i     T P                  # ; i)r0   Úset_indirectzget_bounds:
%s©Úinitial_envN)Úswap_submodulesr   Ú
submodulesr<   r)   r1   rD   r	   r   Úunknownr=   r   Úset_ops_handlerÚValueRangeAnalysisr   Ú
root_blockÚgraphÚlogÚdebugÚrunÚget_ops_handler)r>   rU   r5   Úinterpreters   &   r   Ú
get_boundsÚBoundVars.get_boundsB   s  € à×)Ñ)¨$¯.©.×*CÑ*CÓDˆ
ð ×'Ô'ˆDä˜dŸk™k¬3×/Ò/Ø!¨¯©Ö4Ø"¨$¯+©+Ö5ä%0´Õ%6×%>Ñ%>Ó%@�—‘˜TÓ"ñ (ô ×ÒÔ1Ó3×4Õ4Ü)¨$¯.©.×*CÑ*C×*IÑ*IÈ:ÓVˆKÜ�I‰IÐ'¨¯©×)BÑ)B×)HÑ)HÔIØ�O‰OœA×-Ò-Ó/¸T¿\¹\ˆOÔJ÷ 5ð �|‰|Ð÷	 5Ö4ð �|‰|Ðús   ÃBE4Å4F	c          	      óŠ   <€ V ^8„  d   QhRS[ S[S[RS[3,          3,          RS[ S[S[RS[S[,          3,          3,          /# )r   rU   .r   )rL   rD   r   r   r	   r   )r   r   s   "€r   r   r    U   sI   ø€ ÷ $ñ $Ù™s¡H¨S±#¨XÕ$6Ð6Õ7ð$á	‰c‘8˜C¡©TÕ!2Ð2Õ3Ð3Õ	4ñ$r!   c                ó¸  a a€ / oV FÏ  pVR 8X  d   S P                   SV&   K  RV9   d5   S P                  P                  V,          pR VV 3R llpV! V4      SV&   KV  RV9   dR   \        V\	        R4      R 4      pS P                  P
                  V,          p\        S P                  V4      pVSV&   K®  RV9  d   \        RV: 24      hW,          SV&   KÑ  	  S# )Ú	get_indexr0   c                ót   € V ^8„  d   QhR\         R\        \        \        .\        \        ,          3,          /# )r   Úsubblockr   )r   r   r   r	   r   )r   s   "r   r   Ú/BoundVars.swap_submodules.<locals>.__annotate__e   s/   € ÷ ñ Ü+ðäœs¤C˜j¬+´dÕ*;Ð;Õ<ñr!   c                 ó   <a € VVV 3R  l# )c                 ó@   <€ SP                  SSP                  WS4      # r(   )r0   r=   )ÚmaskÚvalueÚresultr>   rf   s   &&€€€r   Ú<lambda>Ú<BoundVars.swap_submodules.<locals>.make_fn.<locals>.<lambda>h   s   ø€ ¨t×/CÑ/CØ  $§,¡,°¸Vô0r!   © )rf   rl   r>   s   f€€r   Úmake_fnÚ*BoundVars.swap_submodules.<locals>.make_fne   s   ù€ öð r!   rQ   NÚscanz&expected 'scan' in submodule key, got )	rd   r   Ú	subblocksr%   ÚlenÚindirect_varsr   rQ   ÚAssertionError)	r>   rU   Úkeyrf   rp   ÚidxÚvarÚindirectrl   s	   f&      @r   rT   ÚBoundVars.swap_submodulesU   sâ   ù€ ð ?AˆÛˆCØ�kÔ!Ø"Ÿn™n��s“Ø" cÔ)ØŸ>™>×3Ñ3°CÕ8�÷ñ ñ & hÓ/��s“Ø 3Ô&Ü˜#œc .Ó1Ð3Ð4Ó5�Ø—n‘n×2Ñ2°3Õ7�Ü" 4×#4Ñ#4°cÓ:�Ø&��s“à Ô$Ü(Ø@ÀÁÐHóð ð )�o��s“ñ= ð@ ˆr!   c                óÆ   <€ V ^8„  d   QhRS[ RS[S[P                  P                  S[S[,          3,          RS[RS[RS[S[S[	RS[3,          3,          RS[S[,          /# )r   rf   Úenvrj   rk   rU   .r   )
r   rL   rM   rN   rO   r	   r   r   rD   r   )r   r   s   "€r   r   r    {   sv   ø€ ÷ %ñ %áð%ñ ‘%—(‘(—-‘-¡©TÕ!2Ð2Õ3ð%ñ ð	%ñ
 ð%ñ ™™h s©C xÕ0Ð0Õ1ð%ñ 
‘TÕ	ñ%r!   c                ót  € \        VP                  V4      pVP                  \        P                  ! 4       VR 7       VP                  P
                   Uu. uF  qwP                  R8X  g   K  VNK  	  pp\        V4      ^8w  d   \        R\        V4       24      hVP                  V^ ,          ,          # u upi )rR   Úoutputz$expected exactly 1 output node, got )
r   rZ   r]   r   r^   Únodesr1   rt   rv   r}   )	r>   rf   r}   rj   rk   rU   Úinterpr5   r   s	   &&&&&&   r   r0   ÚBoundVars.masked_subblock{   s–   € ô ! §¡°Ó<ˆØ�
‰
”1×$Ò$Ó&°Cˆ
Ô8Ø#+§>¡>×#7Ò#7ÓSÑ#7˜4¿;¹;È(Ñ;R—$�$Ñ#7ˆÐSÜˆv‹;˜!ÔÜ Ð#GÌÈFËÀ}Ð!UÓVÐVð �z‰z˜& �)Õ$Ð$ùò Ts   ÁB5Á,B5c                óL   <€ V ^8„  d   QhRS[ RS[S[ ,          RS[S[ ,          /# )r   ÚoldÚnewr   )r   r	   )r   r   s   "€r   r   r    Œ   s,   ø€ ÷ ñ ¡ð ©;±tÕ+<ð ÁÉTÕARñ r!   c                ó|   € \        V\        4      '       g   \        R \        V4       24      hW P                  V&   V# ©zexpected ValueRanges, got )r)   r	   rv   Útyper:   )r>   r„   r…   s   &&&r   rQ   ÚBoundVars.set_indirectŒ   s9   € Ü˜#œ{×+Ò+Ü Ð#=¼dÀ3»i¸[Ð!IÓJÐJØ%(×Ñ˜cÑ"Øˆ
r!   c                ó6   <€ V ^8„  d   QhRS[ RS[S[,          /# )r   Únamer   )rD   r	   r   )r   r   s   "€r   r   r    ’   s    ø€ ÷ 	ñ 	™cð 	¡k±$Õ&7ñ 	r!   c                óÄ   € V P                   P                  V,          pV P                  P                  V4      pVf   \	        W P                  4      pW0P                  V&   V# r(   )r   Úindexing_exprsr:   Úgetr   )r>   r‹   ÚexprÚbounds   &&  r   rd   ÚBoundVars.get_index’   sV   € Ø�~‰~×,Ñ,¨TÕ2ˆØ×%Ñ%×)Ñ)¨$Ó/ˆØŠ=Ü ×&;Ñ&;Ó<ˆEð ',×Ñ˜dÑ#Øˆr!   )r=   r   r:   r<   N)rH   Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r@   rI   r   r`   rT   r0   rQ   rd   Ú__static_attributes__Ú__classdictcell__©r   s   @r   r   r      s]   ø‡ € ñ÷Bð B÷&
ð 
ð ÷ó ð÷$$ð $÷L%ð %÷"ð ÷	ö 	r!   r   c                   ób  a € ] tR t^žt o V 3R lR lt]V 3R lR l4       tV 3R lR ltV 3R lR ltRV 3R
 lR llt	V 3R lR lt
]V 3R lR l4       t]V 3R lR l4       t]RV 3R lR ll4       t]V 3R lR l4       t]V 3R lR l4       t]V 3R lR l4       t]V 3R lR l4       tRtV tR	# )rX   c                ó   <€ V ^8„  d   QhRR/# )r   r   Nro   )r   r   s   "€r   r   ÚValueRangeAnalysis.__annotate__Ÿ   s   ø€ ÷ 	1ñ 	1˜$ñ 	1r!   c                óV   € R V n         RpV F  p\        WV P                  4       K  	  R# )rX   N)ÚxorÚlogical_andÚ
logical_orÚlogical_not)r‹   ÚsetattrÚbool_handler)r>   Úboolean_operatorsÚops   &  r   r@   ÚValueRangeAnalysis.__init__Ÿ   s-   € Ø(ˆŒ	ð
Ðó $ˆBÜ�D˜d×/Ñ/Ö0ó $r!   c                ó<   <€ V ^8„  d   QhRS[ RS[ RS[S[ ,          /# )r   ÚargsÚkwargsr   ©r   r	   )r   r   s   "€r   r   r›   «   s'   ø€ ÷ 4ñ 4™Cð 4©3ð 4±;¹sÕ3Cñ 4r!   c                 óR   € \        \        P                  \        P                  4      # r(   )r	   ÚsympyÚfalseÚtrue)r§   r¨   s   *,r   r¢   ÚValueRangeAnalysis.bool_handlerª   s   € ô œ5Ÿ;™;¬¯
©
Ó3Ð3r!   c                ó\   <€ V ^8„  d   QhRS[ RS[S[R3,          RS[S[ S[3,          RS[/# )r   r‹   r§   .r¨   r   )rD   Útupler   rL   )r   r   s   "€r   r   r›   ¯   s:   ø€ ÷ %ñ %™Sð %©©c°3¨h­ð %ÁÁcÉ3ÀhÅð %ÑTWñ %r!   c                ó,   € \         P                  ! 4       # r(   ©r	   rV   )r>   r‹   r§   r¨   s   &&&&r   Ú_defaultÚValueRangeAnalysis._default¯   s   € ô ×"Ò"Ó$Ð$r!   c                óP   <€ V ^8„  d   QhRS[ RS[P                  RS[S[,          /# )r   r‹   Úindexr   )rD   r«   r   r	   r   )r   r   s   "€r   r   r›   ´   s+   ø€ ÷ %ñ %™ð %¡U§Z¡Zð %±KÁÕ4Dñ %r!   c                ó,   € \         P                  ! 4       # r(   r²   )r>   r‹   r¶   s   &&&r   r.   ÚValueRangeAnalysis.load´   s   € Ü×"Ò"Ó$Ð$r!   Nc          
      óJ   <€ V ^8„  d   QhRS[ RS[P                  RS[RS[RR/# )r   r‹   r¶   rk   Úmoder   N)rD   r«   r   r   r   )r   r   s   "€r   r   r›   ·   s9   ø€ ÷ ñ ÙðÙ %§
¡
ðÙ36ðÙ>Gðà	ñr!   c                ó   € R # r(   ro   )r>   r‹   r¶   rk   rº   s   &&&&&r   ÚstoreÚValueRangeAnalysis.store·   s   € ñ 	r!   c                óp   <€ V ^8„  d   QhRS[ P                  RS[ P                  RS[RS[RS[S[,          /# )r   ÚdtypeÚ	src_dtypeÚreduction_typerk   r   )rM   r¿   r   r   r	   )r   r   s   "€r   r   r›   ¼   sJ   ø€ ÷ %ñ %á�{‰{ð%ñ —;‘;ð%ñ &ð	%ñ
 ð%ñ 
‘SÕ	ñ%r!   c                ó,   € \         P                  ! 4       # r(   r²   )r>   r¿   rÀ   rÁ   rk   s   &&&&&r   r/   ÚValueRangeAnalysis.reduction¼   s   € ô ×"Ò"Ó$Ð$r!   c                óP   <€ V ^8„  d   QhRS[ RS[P                  RS[S[ ,          /# ©r   r¶   r¿   r   ©r   rM   r¿   r	   )r   r   s   "€r   r   r›   Æ   s+   ø€ ÷ *ñ *™sð *©5¯;©;ð *¹;ÁsÕ;Kñ *r!   c                ó~   € \        V\        4      '       g   \        R \        V4       24      hV P	                  W4      # r‡   )r)   r	   rv   rˆ   Úto_dtype©Úclsr¶   r¿   s   &&&r   Ú
index_exprÚValueRangeAnalysis.index_exprÅ   s5   € ä˜%¤×-Ò-Ü Ð#=¼dÀ5»k¸]Ð!KÓLÐLØ�|‰|˜EÓ)Ð)r!   c                óP   <€ V ^8„  d   QhRS[ RS[P                  RS[S[ ,          /# rÅ   rÆ   )r   r   s   "€r   r   r›   Ì   s+   ø€ ÷ ,ñ ,™sð ,©5¯;©;ð ,¹;ÁsÕ;Kñ ,r!   c                ó$   € V P                  W4      # r(   )rË   rÉ   s   &&&r   Ú
value_exprÚValueRangeAnalysis.value_exprË   s   € à�~‰~˜eÓ+Ð+r!   c                ó~   <€ V ^8„  d   QhRS[ RS[P                  RS[P                  R,          RS[RS[S[ ,          /# )r   Úxr¿   rÀ   NÚuse_compute_typesr   )r   rM   r¿   Úboolr	   )r   r   s   "€r   r   r›   Ñ   sT   ø€ ÷ 'Kñ 'KÙð'Ká�{‰{ð'Kñ —;‘; Õ%ð'Kñ  ð	'Kñ
 
‘SÕ	ñ'Kr!   c                óè  € \         P                  ! V 4      p V\        P                  8X  d¡   V P	                  4       '       d$   \         P                  ! V P
                  ^ 8g  4      # V P                  '       d   V # ^ V 9  d%   \         P                  ! \        P                  4      # \        \        P                  \        P                  4      # R R lpV P                  '       dc   V P	                  4       '       d3   V P
                  '       d   ^M^ p\         P                  ! V! WQ4      4      # \        V! ^ V4      V! ^V4      4      # \        V! V P
                  V4      V! V P                  V4      4      # )r   c                ód   € V ^8„  d   QhR\         R\        P                  R\        P                  /# )r   rÒ   r¿   r   )r   rM   r¿   r«   r   )r   s   "r   r   Ú1ValueRangeAnalysis.to_dtype.<locals>.__annotate__ã   s)   € ÷ 	ñ 	”Cð 	¤§¡ð 	´·
±
ñ 	r!   c                 óÎ   € VP                   '       d   \        P                  ! V 4      # V \        \        ) 39   d   V #  \        P                  ! V 4      #   \
         d    T u # i ; ir(   )Úis_floating_pointr«   ÚFloatr   ÚIntegerÚ	TypeError)rÒ   r¿   s   &&r   ÚcastÚ)ValueRangeAnalysis.to_dtype.<locals>.castã   sX   € à×&×&Ð&Ü—{’{ 1“~Ð%àœ¤& Ð)Ô)Ø�HðÜ Ÿ=š=¨Ó+Ð+øÜ ô à’Hðús   ¾A ÁA$Á#A$)r	   ÚwraprM   rÔ   Úis_singletonÚlowerÚis_boolr«   r­   r¬   r*   )rÒ   r¿   rÀ   rÓ   rÝ   Úvals   &&&&  r   rÈ   ÚValueRangeAnalysis.to_dtypeÏ   s  € ô ×Ò˜QÓˆà”E—J‘JÔØ�~‰~×ÒÜ"×'Ò'¨¯©°1©Ó5Ð5Ø——�Ø�Ø˜!”Ü"×'Ò'¬¯
©
Ó3Ð3ä"¤5§;¡;´·
±
Ó;Ð;õ	ð �9�9ˆ9Ø�~‰~×ÒØŸ7Ÿ7˜7‘a¨�Ü"×'Ò'©¨SÓ(8Ó9Ð9ä"¡4¨¨5£>±4¸¸5³>ÓBÐBô ™t A§G¡G¨UÓ3±T¸!¿'¹'À5Ó5IÓJÐJr!   c                ó6   <€ V ^8„  d   QhRS[ RS[S[ ,          /# ©r   rÒ   r   r©   )r   r   s   "€r   r   r›   ü   s$   ø€ ÷ Pñ P‘#ð P™+¡cÕ*ñ Pr!   c                ó2   € \         P                  ! V R  4      # )c                 ó   € \        V ^4      # )r   r
   )Úys   &r   rm   Ú+ValueRangeAnalysis.square.<locals>.<lambda>ý   s   € ¼LÈÈAÔ<Nr!   )r	   Úconvex_min_zero_map©rÒ   s   &r   ÚsquareÚValueRangeAnalysis.squareú   s   € ô ×.Ò.¨qÑ2NÓOÐOr!   c                ó6   <€ V ^8„  d   QhRS[ RS[S[ ,          /# ræ   r©   )r   r   s   "€r   r   r›     s    ø€ ÷ ;ñ ;‰sð ;‘{¡3Õ'ñ ;r!   c                óL   € \         P                  ! V \        P                  4      # r(   )r	   Údecreasing_mapr2   Únegrì   s   &r   rò   ÚValueRangeAnalysis.negÿ   s   € ô ×)Ò)¨!¬X¯\©\Ó:Ð:r!   c                ó<   <€ V ^8„  d   QhRS[ RS[ RS[S[ ,          /# ©r   ÚaÚbr   r©   )r   r   s   "€r   r   r›     s'   ø€ ÷ ñ ™ð ¡ð ©±SÕ)9ñ r!   c                ó~   € V P                  W4      pV\        P                  ! 4       8X  d   V# V P                  V4      # r(   )Útruedivr	   rV   Útrunc)rÊ   rö   r÷   rÒ   s   &&& r   ÚtruncdivÚValueRangeAnalysis.truncdiv  s4   € à�K‰K˜ÓˆØ”×#Ò#Ó%Ô%ØˆHà�y‰y˜‹|Ðr!   c                ó<   <€ V ^8„  d   QhRS[ RS[ RS[S[ ,          /# rõ   r©   )r   r   s   "€r   r   r›     s'   ø€ ÷ &ñ &‘Cð &™Cð &¡K±Õ$4ñ &r!   c                óB   € V P                  WP                  V4      4      # r(   )Úaddrò   )rÊ   rö   r÷   s   &&&r   ÚsubÚValueRangeAnalysis.sub  s   € à�w‰w�qŸ'™' !›*Ó%Ð%r!   )r‹   r(   )NT)rH   r’   r“   r”   r@   Ústaticmethodr¢   r³   r.   r¼   r/   ÚclassmethodrË   rÏ   rÈ   rí   rò   rû   r   r–   r—   r˜   s   @r   rX   rX   ž   sâ   ø‡ € ÷	1ð 	1ð ÷4ó ð4÷%ð %÷
%ð %÷ò ÷
%ð %ð ÷*ó ð*ð
 ÷,ó ð,ð ÷'Kñ 'Kó ð'KðR ÷Pó ðPð ÷;ó ð;ð ÷ó ðð ÷&ó ö&r!   rX   )%Úloggingr2   Úcollections.abcr   Ú	functoolsr   Útypingr   r«   r   rM   Útorch.utils._sympy.value_rangesr   r   r	   Úutils._sympy.functionsr   Úutils._sympy.numbersr   r   r   r   r   Úops_handlerr   r   r   Úutilsr   r   Úvirtualizedr   Ú	getLoggerrH   r[   r   rX   ro   r!   r   Ú<module>r     sq   ðÛ Û Ý $Ý Ý ã Ý ã ÷ñ õ 2Ý )ß ?Ñ ?ß AÑ Aß 1Ý ð ×Ò˜Ó!€÷ñ ôDs&Ð0°.ö s&r!   