+
    –°³jè;  ã                   ó  € ^ RI t ^ RIHt ^ RIHt ^ RIt^ RIt^ RIHt ^ RI	H
t
 ^ RIHt ^RIHt ^RIHt R	 R
 ltR R ltR R ltR R lt]! RR7       ! R R4      4       tR R ltR R lt ! R R4      t ! R R4      tR R ltR# )é    N)Ú	dataclass)ÚAny)Úmap_arg)Ú
OrderedSet)ÚValueRanges©ÚLoopBody)Údominated_nodesc                ó0   € V ^8„  d   QhR\         R\        /# )é   ÚvalÚreturn©r   Úbool)Úformats   "Úb/home/luca/screen-checking/.venv/lib/python3.14/site-packages/torch/_inductor/optimize_indexing.pyÚ__annotate__r      s   € ÷ /ñ /¤Cð /¬Dñ /ó    c                 óJ  € \        V R R4      '       d   R# \        V \        P                  4      '       d\   V P                  '       g   \        RV  24      hV P                  '       g   V P                  '       d   \        V 4      p M\        V 4      p \        V \        4      '       d   V R8*  ;'       d    V R8¬  # \        V \        4      '       dI   \        P                  ! \        P                  4      pWP                  8*  ;'       d    WP                  8¬  # \        RV  24      h)Ú
is_BooleanFTzexpected a number, got zUnexpected value i   i   ÿ)ÚgetattrÚ
isinstanceÚsympyÚExprÚ	is_numberÚAssertionErrorÚ
is_Integerr   ÚintÚfloatÚtorchÚiinfoÚint32ÚmaxÚminÚ	TypeError)r   r!   s   & r   Úval_expressable_in_32_bitsr&      s×   € Üˆs�L %×(Ò(Ùä�#”u—z‘z×"Ò"Ø�}�}ˆ}Ü Ð#:¸3¸%Ð!@ÓAÐAØ�>�>ˆ>˜SŸ^Ÿ^˜^Ü�c“(‰Cä˜“*ˆCô �#”u×ÒØ�u‰~×1Ð1 #¨¡/Ð1ä�#”s×ÒÜ—’œEŸK™KÓ(ˆØ—i‘iÑ×4Ð4 C¯9©9Ñ$4Ð4ä
Ð'¨ uÐ-Ó
.Ð.r   c                óZ   € V ^8„  d   QhR\         \        P                  ,          R\        /# )r   Úranger   )r   r   r   r   )r   s   "r   r   r   '   s#   € ÷ ñ ¬´E·J±JÕ(?ð ÄDñ r   c                 óf   € \        V P                  4      ;'       d    \        V P                  4      # ©N)r&   ÚlowerÚupper)r(   s   &r   Úrange_expressable_in_32_bitsr-   '   s,   € Ü% e§k¡kÓ2÷ ð Ô7QØ�‰ó8ð r   c                ó  € V ^8„  d   QhR\         R\        \         \         3,          R\        \         ,          R\        \         \        P                  3,          R\        \         \
        \        P                  ,          3,          RR/# )r   ÚnodeÚboundsÚindirect_varsÚindicesÚreplacement_valsr   N)r   ÚdictÚlistr   r   r   )r   s   "r   r   r   -   sp   € ÷ 4ñ 4Ü
ð4ä””c��Nð4ô œ•9ð4ô ”#”u—z‘z�/Õ"ð	4ô
 œ3¤¬E¯J©JÕ 7Ð7Õ8ð4ð 
ñ4r   c                 ó€  € R  R lp\        V .V4       EFm  pVP                  R9   d   K  \        VP                  \        4      '       Ed   RVP                  9   Ed
   \	        VP                  \        R4      R 4      pW',          pVP                  4        FÌ  w  ršWŠP                  9   g   K  WI,          p\        P                  ! VP                  4      '       g'   \        P                  ! VP                  4      '       d     R# \        \        P                  ,          ! \	        VP                  4      \	        VP                  4      4      p\        V4      '       d   KÊ    R# 	  \        W,          4      '       d   EKm   R# 	  \!        V P"                  4      p\$        P&                  V^&   \)        V4      V n        R# )c                ó0   € V ^8„  d   QhR\         R\        /# ©r   r/   r   r   )r   s   "r   r   Ú-try_to_reduce_precision.<locals>.__annotate__7   s   € ÷ 
ñ 
œ#ð 
¤$ñ 
r   c                 ó¶   € V P                   R 8H  ;'       dD    V P                  ^,          \        P                  \        P                  \        P
                  39   # )Úto_dtype)ÚtargetÚargsr    r"   Úfloat32Úfloat64)r/   s   &r   Úskip_filterÚ,try_to_reduce_precision.<locals>.skip_filter7   sF   € Ø�{‰{˜jÑ(÷ 
ð 
¨T¯Y©Y°q­\Ü�K‰KÜ�M‰MÜ�M‰Mð>
ñ .
ð 	
r   Úset_indirectN)ÚstoreÚoutput)r
   r<   r   Ústrr   ÚlenÚitemsÚfree_symbolsÚmathÚisinfr+   r,   r   r   r   r-   r5   r=   r    r"   Útuple)r/   r0   r1   r2   r3   r@   Ú	dominatedÚidxÚindirect_varÚindexÚexprÚ	index_valÚindex_val_intr=   s   &&&&&         r   Útry_to_reduce_precisionrS   -   s9  € õ
ô % d V¨[×9ˆ	Ø×ÑÐ2Ô2Ùä�i×&Ñ&¬×,Ó,°À9×CSÑCSÕ1SÜ�i×&Ñ&¤s¨>Ó':Ð'<Ð=Ó>ˆCØ(Õ-ˆLð  'Ÿ}™}ž‘�Ø×#4Ñ#4Ö4Ø 0Õ 7�Iä—z’z )§/¡/×2Ò2´d·j²jÀÇÁ×6QÒ6QÛô %0´·
±
Ö$;Ü˜IŸO™OÓ,¬c°)·/±/Ó.Bó%�Mô 8¸×FÔFÛñ!  /ô$ ,¨FÕ,=×>Õ>Úñ9 :ô< �—	‘	‹?€DÜ�k‰k€Dˆ�GÜ�d“€D†Ir   c                ó(   € V ^8„  d   QhR\         RR/# ©r   Ú	loop_bodyr   Nr   )r   s   "r   r   r   d   s   € ÷ 
ñ 
´ð 
¸dñ 
r   c                ó¨  € V P                  4       pV P                  4        Uu. uFR  pVP                  R8X  g   K  VP                  ^,          \        P
                  8X  g   K>  W!P                  9  g   KP  VNKT  	  ppV'       g   R# VP                  4       pV F0  p\        VVV P                  V P                  VP                  4       K2  	  R# u upi )zp
Performs Value Range Analysis on LoopBody's fx graph to reduce precision of
intermediaries from int64 to int32
r;   N)r0   Ú	get_nodesr<   r=   r    Úint64Úunbounded_varsÚ
get_boundsrS   r1   Úindexing_exprsr3   )rV   Úbvr/   Úint64_dtype_nodesr0   s   &    r   Ú!indexing_dtype_strength_reductionr_   d   sÆ   € ð
 
×	Ñ	Ó	€Bð ×'Ñ'Ô)óá)ˆDà�K‰K˜:Ñ%ô 	ð —	‘	˜!•¤§¡Ñ+ô	 	ð
 ×-Ñ-Ñ-÷ 	ˆÙ)ð ð ÷ Ùà�]‰]‹_€Fó "ˆÜØØØ×#Ñ#Ø×$Ñ$Ø×Ñö	
ó "ùò!s   £C»#CÁ#CÁ5CT)Úfrozenc                   ó8   a € ] tR t^…t o RtRtRtV 3R ltRtV t	R# )Ú_ValueUseRulec                óz   <€ V ^8„  d   Qh/ S[ S[R3,          ;R&   S[ S[R3,          ;R&   S[ S[R3,          ;R&   # )r   .Úvalue_inputsÚvalue_sinksÚindexing_inputs)rK   r   )r   Ú__classdict__s   "€r   r   Ú_ValueUseRule.__annotate__…   sD   ø‡ ‚ ñ ™˜S˜•/Ñ&ñ ñ ‘s˜C�x•Ñ%ñ ñ ™3 ˜8•_Ñ)ò r   © N)
Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__rd   re   rf   Ú__annotate_func__Ú__static_attributes__Ú__classdictcell__©rg   s   @r   rb   rb   …   s   ø‡ € ð %'€LØ#%€KØ')€O÷ ƒ r   rb   c                ón   € V ^8„  d   QhR\         R\        \        P                  P                  ,          /# )r   Úargr   )r   r   r    ÚfxÚNode)r   s   "r   r   r   ’   s'   € ÷ ñ œ3ð ¤:¬e¯h©h¯m©mÕ#<ñ r   c                 óD   a€ \        4       oR  V3R llp\        W4       S# )c                ó€   € V ^8„  d   QhR\         P                  P                  R\         P                  P                  /# r8   )r    rt   ru   )r   s   "r   r   Ú'_collect_fx_nodes.<locals>.__annotate__•   s*   € ÷ ñ ”u—x‘x—}‘}ð ¬¯©¯©ñ r   c                 ó*   <€ SP                  V 4       V # r*   )Úadd)r/   Únodess   &€r   Úadd_nodeÚ#_collect_fx_nodes.<locals>.add_node•   s   ø€ Ø�	‰	�$ŒØˆr   )r   r   )rs   r|   r{   s   & @r   Ú_collect_fx_nodesr~   ’   s#   ø€ Ü'1£|€E÷ð ô ˆCÔØ€Lr   c                ó–   € V ^8„  d   QhR\         P                  P                  R\        \         P                  P                  ,          /# r8   ©r    rt   ru   r   )r   s   "r   r   r   �   s/   € ÷ ñ œuŸx™xŸ}™}ð ´¼E¿H¹H¿M¹MÕ1Jñ r   c                 ó0  € \        V P                  4      pV P                  R 8X  dp   V P                  '       d^   \	        V P                  ^ ,          \
        P                  P                  4      '       d#   VP                  V P                  ^ ,          4       V# )Úcall_method)	r   Úall_input_nodesÚopr=   r   r    rt   ru   Údiscard)r/   Úinputss   & r   Ú_collect_input_nodesr‡   �   s]   € Ü˜×,Ñ,Ó-€Fà�‰�=Ô Ø�I�IˆIÜ�t—y‘y •|¤U§X¡X§]¡]×3Ò3à�‰�t—y‘y •|Ô$Ø€Mr   c                   óZ  a € ] tR t^¨t o ]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t
V 3R lR ltV 3R lR ltR#V 3R lR lltR$V 3R lR lltR%V 3R lR ll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V 3R  lR! ltR"tV tR# )&Ú_ValueUseRulesc                ó:   <€ V ^8„  d   QhRS[ RS[ RS[R,          /# )r   r=   Úkwargsr   N©r   rb   )r   rg   s   "€r   r   Ú_ValueUseRules.__annotate__ª   s'   ø€ ÷ ñ ™Cð ©3ð ±=À4Õ3Gñ r   c                 ó   € R # r*   ri   )r=   r‹   s   *,r   Údefault_ruleÚ_ValueUseRules.default_rule©   s   € ár   c                ó@   <€ V ^8„  d   QhRS[ RS[P                  RS[/# )r   ÚnamerO   r   )rE   r   r   rb   )r   rg   s   "€r   r   r�   ­   s&   ø€ ÷ 7ñ 7™ð 7¡U§Z¡Zð 7±Mñ 7r   c                ó   € \        V3R 7      # ©)rf   ©rb   )Úselfr’   rO   s   &&&r   ÚloadÚ_ValueUseRules.load­   s   € Ü¨e¨XÔ6Ð6r   c                ó,   <€ V ^8„  d   QhRS[ RS[RS[/# )r   r’   Úoffsetr   )rE   r   rb   )r   rg   s   "€r   r   r�   °   s"   ø€ ÷ 8ñ 8™cð 8©3ð 8±=ñ 8r   c                ó   € \        V3R 7      # r”   r•   )r–   r’   rš   s   &&&r   Ú	load_seedÚ_ValueUseRules.load_seed°   s   € Ü¨f¨YÔ7Ð7r   Nc          
      óL   <€ V ^8„  d   QhRS[ RS[P                  RS[RS[RS[/# )r   r’   rO   ÚvalueÚmoder   ©rE   r   r   r   rb   )r   rg   s   "€r   r   r�   ³   sA   ø€ ÷ 

ñ 

áð

ñ �z‰zð

ñ ð	

ñ
 ð

ñ 
ñ

r   c                ó    € \        V3V3R 7      # ©)re   rf   r•   )r–   r’   rO   rŸ   r    s   &&&&&r   rC   Ú_ValueUseRules.store³   s   € ô Ø˜Ø"˜Hô
ð 	
r   c                óF   <€ V ^8„  d   QhRS[ RS[P                  RS[RS[/# )r   r’   rO   rŸ   r   r¡   )r   rg   s   "€r   r   r�   ¿   s1   ø€ ÷ 
ñ 
Ùð
Ù %§
¡
ð
Ù36ð
á	ñ
r   c                ó    € \        V3V3R 7      # r£   r•   )r–   r’   rO   rŸ   s   &&&&r   Ústore_reductionÚ_ValueUseRules.store_reduction¿   s   € ô Ø˜Ø"˜Hô
ð 	
r   c          
      ó`   <€ V ^8„  d   QhRS[ P                  RS[ P                  RS[RS[RS[/# )r   ÚdtypeÚ	src_dtypeÚreduction_typerŸ   r   )r    rª   rE   r   rb   )r   rg   s   "€r   r   r�   Ç   sE   ø€ ÷ 3ñ 3á�{‰{ð3ñ —;‘;ð3ñ ð	3ñ
 ð3ñ 
ñ3r   c                ó   € \        V3R 7      # ©©re   r•   )r–   rª   r«   r¬   rŸ   s   &&&&&r   Ú	reductionÚ_ValueUseRules.reductionÇ   ó   € ô ¨%¨Ô2Ð2r   c          
      óN   <€ V ^8„  d   QhRS[ RS[ RS[RS[S[ S[3,          RS[/# )r   r’   r¬   rŸ   Ú
extra_metar   )rE   r   r4   rb   )r   rg   s   "€r   r   r�   Ð   sE   ø€ ÷ 3ñ 3áð3ñ ð3ñ ð	3ñ
 ™™c˜•Nð3ñ 
ñ3r   c                ó   € \        V3R 7      # r®   r•   )r–   r’   r¬   rŸ   r´   s   &&&&&r   Úpartial_accumulateÚ!_ValueUseRules.partial_accumulateÐ   r²   r   c          
      ót   <€ V ^8„  d   QhRS[ S[P                  R3,          RS[ S[R3,          RS[RS[RS[/# )r   Údtypes.ÚvaluesÚstableÚ
descendingr   )rK   r    rª   r   r   rb   )r   rg   s   "€r   r   r�   Ù   sS   ø€ ÷ 4ñ 4á‘e—k‘k 3Ð&Õ'ð4ñ ‘c˜3�h•ð4ñ ð	4ñ
 ð4ñ 
ñ4r   c                ó   € \        V3R 7      # r®   r•   )r–   r¹   rº   r»   r¼   s   &&&&&r   ÚsortÚ_ValueUseRules.sortÙ   s   € ô ¨&¨Ô3Ð3r   c                ó|   <€ V ^8„  d   QhRS[ S[P                  R3,          RS[RS[ S[R3,          R,          RS[/# )r   r¹   .Úcombine_fn_or_valuesrº   Nr   )rK   r    rª   r   rb   )r   rg   s   "€r   r   r�   â   sN   ø€ ÷ 4ñ 4á‘e—k‘k 3Ð&Õ'ð4ñ "ð4ñ ‘c˜3�h• $Õ&ð	4ñ
 
ñ4r   c                ó(   € Vf   Tp\        V3R7      # )Nr¯   r•   )r–   r¹   rÁ   rº   s   &&&&r   ÚscanÚ_ValueUseRules.scanâ   s   € ð Š>Ø)ˆFÜ¨&¨Ô3Ð3r   c                óþ   <€ V ^8„  d   QhRS[ RS[S[S[P                  S[P                  S[P                  3,          RS[ RS[P                  RS[RS[S[S[P                  3,          R,          RS[ R,          R	S[/# )
r   rº   Ú
boundariesÚboundary_indicesÚindexing_dtypeÚrightÚsorterNÚsorter_indicesr   )	r   rK   rE   r   r   r    rª   r   rb   )r   rg   s   "€r   r   r�   ì   s�   ø€ ÷ 
ñ 
áð
ñ ™#™uŸz™z©5¯:©:±u·z±zÐAÕBð
ñ ð	
ñ
 Ÿ™ð
ñ ð
ñ ‘c™5Ÿ:™:�oÕ&¨Õ-ð
ñ ˜d�
ð
ñ 
ñ
r   c                ó"   € \        V3W#Wg3R 7      # ©)rd   rf   r•   )r–   rº   rÆ   rÇ   rÈ   rÉ   rÊ   rË   s   &&&&&&&&r   Ú	bucketizeÚ_ValueUseRules.bucketizeì   s   € ô Ø ˜Ø'¸6ÐRô
ð 	
r   c          
      óL   <€ V ^8„  d   QhRS[ RS[P                  RS[RS[RS[/# )r   ÚxÚsizeÚcheckÚwrap_negr   )r   r   r   r   rb   )r   rg   s   "€r   r   r�   û   s9   ø€ ÷ 8ñ 8Ùð8Ù!ŸJ™Jð8Ù/3ð8ÙFJð8á	ñ8r   c                ó   € \        W3R 7      # r”   r•   )r–   rÑ   rÒ   rÓ   rÔ   s   &&&&&r   Úindirect_indexingÚ _ValueUseRules.indirect_indexingû   s   € ô ¨a¨YÔ7Ð7r   c          
      ó`   <€ V ^8„  d   QhRS[ P                  RS[ P                  RS[RS[RS[/# )r   rP   rÒ   r+   r,   r   )r   r   r   rb   )r   rg   s   "€r   r   r�      s=   ø€ ÷ ;ñ ;Ù—J‘Jð;Ù&+§j¡jð;Ù9=ð;ÙFJð;á	ñ;r   c                ó   € \        W3R 7      # r”   r•   )r–   rP   rÒ   r+   r,   s   &&&&&r   Úcheck_boundsÚ_ValueUseRules.check_bounds   s   € ô ¨d¨\Ô:Ð:r   c                ó2   <€ V ^8„  d   QhRS[ RS[ RS[ RS[/# )r   ÚmaskÚbodyÚotherr   rŒ   )r   rg   s   "€r   r   r�     s/   ø€ ÷ Mñ M™3ð M¡cð M±#ð M¹-ñ Mr   c                ó    € \        V3V3R 7      # rÍ   r•   )r–   rÝ   rÞ   rß   s   &&&&r   ÚmaskedÚ_ValueUseRules.masked  ó   € Ü¨5¨(ÀTÀGÔLÐLr   c                ó,   <€ V ^8„  d   QhRS[ RS[ RS[/# )r   rÝ   rß   r   rŒ   )r   rg   s   "€r   r   r�     s'   ø€ ÷ Mñ M¡Cð M±ð M¹ñ Mr   c                ó    € \        V3V3R 7      # rÍ   r•   )r–   rÝ   rß   s   &&&r   Úmasked_subblockÚ_ValueUseRules.masked_subblock  rã   r   c                ó&   <€ V ^8„  d   QhRS[ RS[/# )r   Únew_varr   rŒ   )r   rg   s   "€r   r   r�     s   ø€ ÷ 9ñ 9¡Cð 9©Mñ 9r   c                ó   € \        V3R 7      # r”   r•   )r–   ré   s   &&r   rB   Ú_ValueUseRules.set_indirect  s   € Ü¨g¨ZÔ8Ð8r   c                ó,   <€ V ^8„  d   QhRS[ RS[RS[/# )r   ÚcondÚmsgr   )r   rE   rb   )r   rg   s   "€r   r   r�     s"   ø€ ÷ 6ñ 6©ð 6±#ð 6¹-ñ 6r   c                ó   € \        V3R 7      # r”   r•   )r–   rí   rî   s   &&&r   Údevice_assert_asyncÚ"_ValueUseRules.device_assert_async  s   € Ü¨d¨WÔ5Ð5r   ri   r*   )NN)TT)rj   rk   rl   rm   Ústaticmethodr�   r—   rœ   rC   r§   r°   r¶   r¾   rÃ   rÎ   rÖ   rÚ   rá   ræ   rB   rð   ro   rp   rq   s   @r   r‰   r‰   ¨   s±   ø‡ € Ø÷ó ð÷7ð 7÷8ð 8÷

ò 

÷
ð 
÷3ð 3÷3ð 3÷4ð 4÷4ò 4÷
ò 
÷8ò 8÷
;ð ;÷
Mð M÷Mð M÷9ð 9÷6ö 6r   r‰   c                   óÔ   a € ] tR tRt o 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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V 3R lR ltV 3R lR ltRtV tR# )Ú_ValueUseAnalysisi  c                ó$   <€ V ^8„  d   QhRS[ RR/# rU   r   )r   rg   s   "€r   r   Ú_ValueUseAnalysis.__annotate__  s   ø€ ÷ Rñ R¡(ð R¨tñ Rr   c                ón  € Wn         \        4       V n        VP                  P                  V n        \        VR / 4      V n        \        VRR4      V n        V P
                  .R V P                  P                  4        4       OV n
        V P                  4        \        4       V n        . V n        / V n        R# )Ú	subblocksr1   c              3   ó8   "  € T F  qP                   x € K  	  R # 5ir*   )Úgraph)Ú.0Úblocks   & r   Ú	<genexpr>Ú-_ValueUseAnalysis.__init__.<locals>.<genexpr>  s   é € Ð?Ñ'>˜e�kŽkÓ'>ùs   ‚Nri   )rV   r‰   ÚrulesÚ
root_blockrú   Ú
root_graphr   rø   r1   rº   ÚgraphsÚinstall_call_module_rulesr   Úvalue_reachableÚworklistÚindirect_inputs)r–   rV   s   &&r   Ú__init__Ú_ValueUseAnalysis.__init__  s–   € Ø"ŒÜ#Ó%ˆŒ
Ø#×.Ñ.×4Ñ4ˆŒÜ  ¨K¸Ó<ˆŒÜ$ Y°ÀÓDˆÔà�O‰Oð
á? t§~¡~×'<Ñ'<Ô'>Ó?ð
ˆŒð 	×&Ñ&Ô(ä:D»,ˆÔØDFˆŒØOQˆÖr   c                ó    <€ V ^8„  d   QhRS[ /# ©r   r   ©r   )r   rg   s   "€r   r   rö   #  s   ø€ ÷ 3ñ 3‘Tñ 3r   c                ór   € V P                  4       '       g   R # V P                  4        V P                  4       # )F)Úhas_index_exprÚseed_value_reachable_nodesÚpropagate_value_reachability©r–   s   &r   ÚrunÚ_ValueUseAnalysis.run#  s/   € Ø×"Ñ"×$Ò$Ùà×'Ñ'Ô)Ø×0Ñ0Ó2Ð2r   c                ó    <€ V ^8„  d   QhRS[ /# r
  r  )r   rg   s   "€r   r   rö   *  s   ø€ ÷ 
ñ 
¡ñ 
r   c                ó’   € \         ;QJ d&    R  V P                   4       F  '       g   K   R# 	  R# ! R  V P                   4       4      # )c              3   óJ   "  € T F  pVP                  R RRR7      x € K  	  R# 5i)r‚   Ú
index_exprF)r„   r<   r¾   N)Ú
find_nodes)rû   rú   s   & r   rý   Ú3_ValueUseAnalysis.has_index_expr.<locals>.<genexpr>+  s,   é € ð 
á$�ð ×Ñ °lÈÐ×OÐOÛ$ùs   ‚!#TF)Úanyr  r  s   &r   r  Ú _ValueUseAnalysis.has_index_expr*  sE   € ß‹sñ 
àŸšó
�sŒsð 	
Šsð 	
ˆsñ 
àŸšó
ó 
ð 	
r   c                ó   <€ V ^8„  d   QhRR/# ©r   r   Nri   )r   rg   s   "€r   r   rö   0  s   ø€ ÷ 
Nñ 
N¨4ñ 
Nr   c                ó°  € V P                    EFD  pVP                  R RR7       EF(  p\        VP                  \        4      '       g   K&  VP                  V P
                  9   d8   \        V P                  VP                  V P                  P                  4       Kx  VP                  P                  R4      '       d8   \        V P                  VP                  V P                  P                  4       KÐ  VP                  P                  R4      '       g   Kó  \        V P                  VP                  V P                  P                  4       EK+  	  EKG  	  R# )Úcall_moduleF©r„   r¾   rÃ   rB   N)r  r  r   r<   rE   rø   Úsetattrrÿ   ræ   Ú
startswithrÃ   rB   )r–   rú   r/   s   &  r   r  Ú+_ValueUseAnalysis.install_call_module_rules0  sÑ   € Ø—[•[ˆEØ×(Ñ(¨MÀÐ(×F�Ü! $§+¡+¬s×3Ò3ÙØ—;‘; $§.¡.Ô0Ü˜DŸJ™J¨¯©°T·Z±Z×5OÑ5OÖPØ—[‘[×+Ñ+¨F×3Ò3Ü˜DŸJ™J¨¯©°T·Z±Z·_±_ÖEØ—[‘[×+Ñ+¨N×;Ô;Ü˜DŸJ™J¨¯©°T·Z±Z×5LÑ5L×Mô Gó !r   c                ó   <€ V ^8„  d   QhRR/# r  ri   )r   rg   s   "€r   r   rö   <  s   ø€ ÷ =ñ =¨Dñ =r   c                óR  € V P                  V P                  4       V P                   Fû  pVP                   Fè  pVP                  R 8X  d   K  VP                  R8X  dŽ   \        VP                  \        4      '       dn   VP                  P                  R4      '       dM   \        VP                  \        R4      R 4      pWP                  3V P                  V P                  V,          &   V P                  V4       F  pV P                  P!                  W34       K!  	  Kê  	  Ký  	  R# )rD   r  rB   N)Ú_enqueue_graph_outputr  r  r{   r„   r   r<   rE   r!  r   rF   r=   r  r1   Úvalue_sink_nodesr  Úappend)r–   rú   r/   rM   Ú	sink_nodes   &    r   r  Ú,_ValueUseAnalysis.seed_value_reachable_nodes<  sØ   € Ø×"Ñ" 4§?¡?Ô3Ø—[”[ˆEØŸœ�Ø—7‘7˜hÔ&Ùà—G‘G˜}Ô,Ü" 4§;¡;´×4Ò4ØŸ™×.Ñ.¨~×>Ò>ä˜dŸk™k¬#¨nÓ*=Ð*?Ð@ÓA�CØEJÏIÉIÐDV�D×(Ñ(¨×);Ñ);¸CÕ)@ÑAØ!%×!6Ñ!6°tÖ!<�IØ—M‘M×(Ñ(¨%Ð);Ö<ó "=ó $ó !r   c                ó    <€ V ^8„  d   QhRS[ /# r
  r  )r   rg   s   "€r   r   rö   L  s   ø€ ÷ "ñ "©dñ "r   c                ó0  a a
€ R pS P                   '       Edÿ   S P                   P                  4       w  r#VS P                  9   d   KB  S P                  P                  V4       VP                  R8X  d
   RVn        RpVP
                  R8X  dr   \        VP                  \        4      '       dR   VP                  S P                  9   d7   S P                  S P                  VP                  ,          P                  4       VP
                  R8X  dÑ   VP                  R8X  dÀ   VP                  ^ ,          p\        V\        4      '       g   \        RV: 24      hS P                  P                  V,          p\        V\        P                   4      '       dK   VP"                   F:  pS P$                  P'                  V4      pVf   K$  Vw  o
p\)        VV
V 3R l4       K<  	  S P+                  V4       F  p	S P                   P-                  W)34       K!  	  EK  V# )Fr  Ú
value_exprTr  Ú	get_indexzexpected str index name, got c                 ó>   <€ SP                   P                  SV 34      # r*   ©r  r'  )ÚnÚigr–   s   &€€r   Ú<lambda>Ú@_ValueUseAnalysis.propagate_value_reachability.<locals>.<lambda>i  s   ø€ °$·-±-×2FÑ2FÈÈAÀwÔ2Or   )r  Úpopr  rz   r<   r„   r   rE   rø   r%  rú   r=   r   rV   r\   r   r   rH   r  Úgetr   Úvalue_input_nodesr'  )r–   Úchangedrú   r/   Ú
index_namerP   ÚsymbolÚindirect_inputÚiaÚ
input_noder1  s   f         @r   r  Ú._ValueUseAnalysis.propagate_value_reachabilityL  sŽ  ù€ ØˆØ�m�m‰mØŸ-™-×+Ñ+Ó-‰KˆEØ�t×+Ñ+Ô+ÙØ× Ñ ×$Ñ$ TÔ*à�{‰{˜lÔ*Ø*�”Ø�ð —‘˜=Ô(Ü˜tŸ{™{¬C×0Ò0Ø—K‘K 4§>¡>Ô1à×*Ñ*¨4¯>©>¸$¿+¹+Õ+F×+LÑ+LÔMà�w‰w˜-Ô'¨D¯K©K¸;Ô,FØ!ŸY™Y q�\�
Ü! *¬c×2Ò2Ü(Ð+HÈÉÐ)WÓXÐXØ—~‘~×4Ñ4°ZÕ@�Ü˜d¤E§J¡J×/Ò/Ø"&×"3Ô"3˜Ø)-×)=Ñ)=×)AÑ)AÀ&Ó)I˜Ø)Ô5Ø%3™F˜B Ü# BÕ(OÖPñ	 #4ð #×4Ñ4°TÖ:�
Ø—‘×$Ñ$ eÐ%8Ö9ô ;ð ˆr   c                ó\   <€ V ^8„  d   QhRS[ P                  P                  RS[R,          /# )r   r/   r   N)r    rt   ru   rb   )r   rg   s   "€r   r   rö   p  s(   ø€ ÷ ñ ¡%§(¡(§-¡-ð ±MÀDÕ4Hñ r   c                ó  € VP                   R 8X  dy   \        VP                  \        4      '       dY   \	        V P
                  VP                  V P
                  P                  4      pV! VP                  R,          / VP                  B # VP                   R8X  dr   \        VP                  \        4      '       dR   \	        V P
                  VP                  V P
                  P                  4      pV! VP                  / VP                  B # R# )r‚   :é   NNr  N)	r„   r   r<   rE   r   rÿ   r�   r=   r‹   )r–   r/   Úrule_fns   && r   Úrule_for_nodeÚ_ValueUseAnalysis.rule_for_nodep  s±   € Ø�7‰7�mÔ#¬
°4·;±;Ä×(DÒ(DÜ˜dŸj™j¨$¯+©+°t·z±z×7NÑ7NÓOˆGÙ˜DŸI™I b�MÐ9¨T¯[©[Ñ9Ð9Ø�7‰7�mÔ#¬
°4·;±;Ä×(DÒ(DÜ˜dŸj™j¨$¯+©+°t·z±z×7NÑ7NÓOˆGÙ˜DŸI™IÐ5¨¯©Ñ5Ð5Ùr   c                ó†   <€ V ^8„  d   QhRS[ P                  P                  RS[S[ P                  P                  ,          /# r8   r€   )r   rg   s   "€r   r   rö   y  s0   ø€ ÷ 
ñ 
¡e§h¡h§m¡mð 
¹
Á5Ç8Á8Ç=Á=Õ8Qñ 
r   c                ó    € V P                  V4      pVf   \        V4      # \        VP                  4      \        VP                  4      ,          # r*   )rB  r‡   r~   rd   re   ©r–   r/   Úrules   && r   r6  Ú#_ValueUseAnalysis.value_input_nodesy  sK   € Ø×!Ñ! $Ó'ˆØŠ<Ü'¨Ó-Ð-Ü  ×!2Ñ!2Ó3Ô6GØ×Ñó7
õ 
ð 	
r   c                ó†   <€ V ^8„  d   QhRS[ P                  P                  RS[S[ P                  P                  ,          /# r8   r€   )r   rg   s   "€r   r   rö   �  s4   ø€ ÷ Mñ M¡U§X¡X§]¡]ð M±zÁ%Ç(Á(Ç-Á-Õ7Pñ Mr   c                ór   € V P                  V4      pV'       d   \        VP                  4      # \        4       # r*   )rB  r~   re   r   rF  s   && r   r&  Ú"_ValueUseAnalysis.value_sink_nodes�  s-   € Ø×!Ñ! $Ó'ˆß6:Ô  ×!1Ñ!1Ó2ÐLÄ
ÃÐLr   c                óL   <€ V ^8„  d   QhRS[ P                  P                  RR/# )r   rú   r   N)r    rt   ÚGraph)r   rg   s   "€r   r   rö   …  s'   ø€ ÷ Rñ R©5¯8©8¯>©>ð R¸dñ Rr   c                óÂ   a a€ SP                  R RR7      p\        V4      ^8w  d   \        R\        V4       24      h\        V^ ,          P                  VV 3R l4       R# )rD   Fr  z$expected exactly 1 output node, got c                 ó>   <€ SP                   P                  SV 34      # r*   r/  )r0  rú   r–   s   &€€r   r2  Ú9_ValueUseAnalysis._enqueue_graph_output.<locals>.<lambda>‹  s   ø€ °·±×0DÑ0DÀeÈQÀZÔ0Pr   N)r  rF   r   r   r=   )r–   rú   Úoutput_nodess   ff r   r%  Ú'_ValueUseAnalysis._enqueue_graph_output…  sY   ù€ Ø×'Ñ'¨8¸%Ð'Ó@ˆÜˆ|Ó Ô!Ü Ø6´s¸<Ó7HÐ6IÐJóð ô 	�˜Q•×$Ñ$Õ&PÖQr   )	r  r  r1   rV   r  rÿ   rø   r  r  N)rj   rk   rl   rm   r  r  r  r  r  r  rB  r6  r&  r%  ro   rp   rq   s   @r   rô   rô     sr   ø‡ € ÷Rð R÷ 3ð 3÷
ð 
÷
Nð 
N÷=ð =÷ "ð "÷Hð ÷
ð 
÷Mð M÷Rö Rr   rô   c                ó(   € V ^8„  d   QhR\         RR/# rU   r   )r   s   "r   r   r   Ž  s   € ÷ /ñ /´ð /¸Tñ /r   c                óÄ   € \        V 4      P                  4       '       dA   \        P                  P	                  V 4       \        P
                  P	                  V 4       R# R# )a2  
Rewrite ``index_expr`` nodes that participate in value computation to
``value_expr``, so codegen can honor the requested dtype instead of
narrowing to the kernel's indexing dtype.

Classification: walk backward from value sinks (store value, reduction,
output). Indexing inputs to ops such as ``load``, ``store``,
``check_bounds``, and ``set_indirect`` do not receive value demand. Any
``index_expr`` reachable from a value sink is converted in-place to
``value_expr``. Indirect indexing is handled by following value-reachable
``get_index`` expressions through any referenced ``indirect*`` symbols back
to the corresponding ``set_indirect*`` input.

Mixed-use policy: if the same ``index_expr`` feeds both an indexing use and
a value use, rewrite it in-place to ``value_expr``. This is conservative and
correct because the indexing path may compute at a wider dtype than needed,
but the value path cannot lose precision. Cloning would preserve the
narrower indexing path, but the mixed-use case is rare and the simpler
in-place rewrite avoids extra CSE/register pressure.
N)rô   r  r	   rX   Úclear_cacher0   )rV   s   &r   Ú convert_index_expr_to_value_exprrV  Ž  sC   € ô* ˜Ó#×'Ñ'×)Ò)Ü×Ñ×&Ñ& yÔ1Ü�‰×#Ñ# IÖ.ñ *r   )rI   Údataclassesr   Útypingr   r   r    Útorch.fx.noder   Útorch.utils._ordered_setr   Útorch.utils._sympy.value_rangesr   rV   r	   Úutilsr
   r&   r-   rS   r_   rb   r~   r‡   r‰   rô   rV  ri   r   r   Ú<module>r]     s‚   ðÛ Ý !Ý ã ã Ý !Ý /Ý 7å Ý "õ/õ.õ4õn
ñB �$Ô÷	*ð 	*ó ð	*õõ÷g6ñ g6÷TyRñ yR÷x/r   