Ë
    ÄÓ^jÔ:  ã                   ó4  — d dl Z d dlmZ d dlmZ d dlZd dlZd dlmZ d dl	m
Z
 d dlmZ ddlmZ dd	lmZ d
edefd„Zdeej&                     defd„Zdedeeef   dee   deeej&                  f   deeeej&                     f   ddfd„Zdeddfd„Z ed¬«       G d„ d«      «       Zdede
ej4                  j6                     fd„Zdej4                  j6                  de
ej4                  j6                     fd„Z G d„ d«      Z G d „ d!«      Zdeddfd"„Z y)#é    N)Ú	dataclass)ÚAny)Úmap_arg)Ú
OrderedSet)ÚValueRangesé   )ÚLoopBody)Údominated_nodesÚvalÚreturnc                 óÆ  — t        | dd«      ryt        | t        j                  «      r=| j                  sJ ‚| j
                  s| j                  rt        | «      } nt        | «      } t        | t        «      r| dk  xr | dk\  S t        | t        «      rCt        j                  t        j                  «      }| |j                  k  xr | |j                  k\  S t        d| › �«      ‚)NÚ
is_BooleanFTi   i   ÿzUnexpected value )ÚgetattrÚ
isinstanceÚsympyÚExprÚ	is_numberÚ
is_Integerr   ÚintÚfloatÚtorchÚiinfoÚint32ÚmaxÚminÚ	TypeError)r   r   s     úl/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/torch/_inductor/optimize_indexing.pyÚval_expressable_in_32_bitsr      sµ   € Üˆs�L %Ô(Øä�#”u—z‘zÔ"Ø�}Š}Ðˆ}Ø�>Š>˜SŸ^š^Ü�c“(‰Cä˜“*ˆCô �#”uÔØ�u‰~Ò1 #¨¡/Ð1ä�#”sÔÜ—‘œEŸK™KÓ(ˆØ�e—i‘iÑÒ4 C¨5¯9©9Ñ$4Ð4ä
Ð'¨ uÐ-Ó
.Ð.ó    Úrangec                 óZ   — t        | j                  «      xr t        | j                  «      S ©N)r   ÚlowerÚupper)r    s    r   Úrange_expressable_in_32_bitsr%   &   s'   € Ü% e§k¡kÓ2ò Ô7QØ�‰ó8ð r   ÚnodeÚboundsÚindirect_varsÚindicesÚreplacement_valsc                 ó  — dt         dt        fd„}t        | g|«      D �].  }|j                  dv rŒt	        |j                  t
        «      ròd|j                  v rät        |j                  t        d«      d  «      }||   }|j                  «       D ]«  \  }	}
||
j                  v sŒ||	   }t        j                  |j                  «      st        j                  |j                  «      r  y t        t        j                      t        |j                  «      t        |j                  «      «      }t#        |«      rŒª  y  t#        ||   «      r�Œ/ y  t%        | j&                  «      }t(        j*                  |d<   t-        |«      | _        y )Nr&   r   c                 ó    — | j                   dk(  xr> | j                  d   t        j                  t        j                  t        j
                  fv S )NÚto_dtypeé   )ÚtargetÚargsr   r   Úfloat32Úfloat64)r&   s    r   Úskip_filterz,try_to_reduce_precision.<locals>.skip_filter6   sA   € Ø�{‰{˜jÑ(ò 
¨T¯Y©Y°q©\Ü�K‰KÜ�M‰MÜ�M‰Mð>
ð .
ð 	
r   )ÚstoreÚoutputÚset_indirectr.   )r   Úboolr
   r/   r   Ústrr   ÚlenÚitemsÚfree_symbolsÚmathÚisinfr#   r$   r   r   r   r%   Úlistr0   r   r   Útuple)r&   r'   r(   r)   r*   r3   Ú	dominatedÚidxÚindirect_varÚindexÚexprÚ	index_valÚindex_val_intr0   s                 r   Útry_to_reduce_precisionrG   ,   sL  € ð
œ#ð 
¤$ó 
ô % d V¨[Ó9ó ˆ	Ø×ÑÐ2Ñ2Øä�i×&Ñ&¬Ô,°À9×CSÑCSÑ1SÜ�i×&Ñ&¤s¨>Ó':Ð'<Ð=Ó>ˆCØ(¨Ñ-ˆLð  'Ÿ}™}›ò ‘��tØ 4×#4Ñ#4Ò4Ø 0°Ñ 7�Iä—z‘z )§/¡/Ô2´d·j±jÀÇÁÔ6QÚô %0´·
±
Ñ$;Ü˜IŸO™OÓ,¬c°)·/±/Ó.Bó%�Mô 8¸ÕFÚð!ô$ ,¨F°9Ñ,=Ö>Ùð9ô< �—	‘	‹?€DÜ�k‰k€Dˆ�GÜ�d“€D…Ir   Ú	loop_bodyc                 óp  — | j                  «       }| j                  «       D �cg c]A  }|j                  dk(  r0|j                  d   t        j
                  k(  r||j                  vr|‘ŒC }}|sy|j                  «       }|D ]/  }t        ||| j                  | j                  |j                  «       Œ1 yc c}w )z|
    Performs Value Range Analysis on LoopBody's fx graph to reduce precision of
    intermediaries from int64 to int32
    r-   r.   N)r'   Ú	get_nodesr/   r0   r   Úint64Úunbounded_varsÚ
get_boundsrG   r(   Úindexing_exprsr*   )rH   Úbvr&   Úint64_dtype_nodesr'   s        r   Ú!indexing_dtype_strength_reductionrQ   c   s»   € ð
 
×	Ñ	Ó	€Bð ×'Ñ'Ó)öàà�K‰K˜:Ò%Ø—	‘	˜!‘¤§¡Ò+Ø˜B×-Ñ-Ñ-ò 	ðÐð ñ Øà�]‰]‹_€Fð "ò 
ˆÜØØØ×#Ñ#Ø×$Ñ$Ø×Ñõ	
ñ
ùò!s   £AB3T)Úfrozenc                   óV   — e Zd ZU dZeedf   ed<   dZeedf   ed<   dZeedf   ed<   y)Ú_ValueUseRule© .Úvalue_inputsÚvalue_sinksÚindexing_inputsN)	Ú__name__Ú
__module__Ú__qualname__rV   r?   r   Ú__annotations__rW   rX   rU   r   r   rT   rT   „   s:   … ð %'€L�%˜˜S˜‘/Ó&Ø#%€K��s˜C�x‘Ó%Ø')€O�U˜3 ˜8‘_Ô)r   rT   Úargc                 ó¨   ‡— t        «       Šdt        j                  j                  dt        j                  j                  fˆfd„}t	        | |«       ‰S )Nr&   r   c                 ó*   •— ‰j                  | «       | S r"   )Úadd)r&   Únodess    €r   Úadd_nodez#_collect_fx_nodes.<locals>.add_node”   s   ø€ Ø�	‰	�$ŒØˆr   )r   r   ÚfxÚNoder   )r]   rb   ra   s     @r   Ú_collect_fx_nodesre   ‘   s>   ø€ Ü'1£|€Eð”u—x‘x—}‘}ð ¬¯©¯©õ ô ˆC�ÔØ€Lr   c                 ó  — t        | j                  «      }| j                  dk(  r[| j                  rOt	        | j                  d   t
        j                  j                  «      r|j                  | j                  d   «       |S )NÚcall_methodr   )	r   Úall_input_nodesÚopr0   r   r   rc   rd   Údiscard)r&   Úinputss     r   Ú_collect_input_nodesrl   œ   sX   € Ü˜×,Ñ,Ó-€Fà�‰�=Ò Ø�IŠIÜ�t—y‘y ‘|¤U§X¡X§]¡]Ô3à�‰�t—y‘y ‘|Ô$Ø€Mr   c                   óB  — e Zd Zededededz  fd„«       Zdedej                  defd„Z
ded	edefd
„Z	 d7dedej                  dededef
d„Zdedej                  dedefd„Zdej                   dej                   dededef
d„Zdedededeeef   def
d„Zdeej                   df   deedf   dededef
d„Z	 d7deej                   df   dedeedf   dz  defd„Z	 	 d8dedeeej                  ej                  ej                  f   dedej                   d ed!eeej                  f   dz  d"edz  defd#„Z	 d9d$ed%ej                  d&ed'edef
d(„Zd)ej                  d%ej                  d*ed+edef
d,„Zd-ed.ed/edefd0„Zd-ed/edefd1„Zd2edefd3„Zd4ed5edefd6„Zy):Ú_ValueUseRulesr0   Úkwargsr   Nc                   ó   — y r"   rU   )r0   ro   s     r   Údefault_rulez_ValueUseRules.default_rule¨   s   € àr   ÚnamerC   c                 ó   — t        |f¬«      S ©N)rX   ©rT   )Úselfrr   rC   s      r   Úloadz_ValueUseRules.load¬   s   € Ü¨e¨XÔ6Ð6r   Úoffsetc                 ó   — t        |f¬«      S rt   ru   )rv   rr   rx   s      r   Ú	load_seedz_ValueUseRules.load_seed¯   s   € Ü¨f¨YÔ7Ð7r   ÚvalueÚmodec                 ó    — t        |f|f¬«      S ©N)rW   rX   ru   )rv   rr   rC   r{   r|   s        r   r4   z_ValueUseRules.store²   s   € ô Ø˜Ø"˜Hô
ð 	
r   c                 ó    — t        |f|f¬«      S r~   ru   )rv   rr   rC   r{   s       r   Ústore_reductionz_ValueUseRules.store_reduction¾   s   € ô Ø˜Ø"˜Hô
ð 	
r   ÚdtypeÚ	src_dtypeÚreduction_typec                 ó   — t        |f¬«      S ©N)rW   ru   )rv   r�   r‚   rƒ   r{   s        r   Ú	reductionz_ValueUseRules.reductionÆ   ó   € ô ¨%¨Ô2Ð2r   Ú
extra_metac                 ó   — t        |f¬«      S r…   ru   )rv   rr   rƒ   r{   rˆ   s        r   Úpartial_accumulatez!_ValueUseRules.partial_accumulateÏ   r‡   r   Údtypes.ÚvaluesÚstableÚ
descendingc                 ó   — t        |f¬«      S r…   ru   )rv   r‹   rŒ   r�   rŽ   s        r   Úsortz_ValueUseRules.sortØ   s   € ô ¨&¨Ô3Ð3r   Úcombine_fn_or_valuesc                 ó$   — |€|}t        |f¬«      S r…   ru   )rv   r‹   r‘   rŒ   s       r   Úscanz_ValueUseRules.scaná   s   € ð ˆ>Ø)ˆFÜ¨&¨Ô3Ð3r   Ú
boundariesÚboundary_indicesÚindexing_dtypeÚrightÚsorterÚsorter_indicesc                 ó&   — t        |f||||f¬«      S ©N)rV   rX   ru   )rv   rŒ   r”   r•   r–   r—   r˜   r™   s           r   Ú	bucketizez_ValueUseRules.bucketizeë   s#   € ô Ø ˜Ø'Ð)9¸6À>ÐRô
ð 	
r   ÚxÚsizeÚcheckÚwrap_negc                 ó   — t        ||f¬«      S rt   ru   )rv   r�   rž   rŸ   r    s        r   Úindirect_indexingz _ValueUseRules.indirect_indexingú   s   € ô ¨a°¨YÔ7Ð7r   rD   r#   r$   c                 ó   — t        ||f¬«      S rt   ru   )rv   rD   rž   r#   r$   s        r   Úcheck_boundsz_ValueUseRules.check_boundsÿ   s   € ô ¨d°D¨\Ô:Ð:r   ÚmaskÚbodyÚotherc                 ó    — t        |f|f¬«      S r›   ru   )rv   r¥   r¦   r§   s       r   Úmaskedz_ValueUseRules.masked  ó   € Ü¨5¨(ÀTÀGÔLÐLr   c                 ó    — t        |f|f¬«      S r›   ru   )rv   r¥   r§   s      r   Úmasked_subblockz_ValueUseRules.masked_subblock  rª   r   Únew_varc                 ó   — t        |f¬«      S rt   ru   )rv   r­   s     r   r6   z_ValueUseRules.set_indirect
  s   € Ü¨g¨ZÔ8Ð8r   ÚcondÚmsgc                 ó   — t        |f¬«      S rt   ru   )rv   r¯   r°   s      r   Údevice_assert_asyncz"_ValueUseRules.device_assert_async  s   € Ü¨d¨WÔ5Ð5r   r"   )NN)TT)rY   rZ   r[   Ústaticmethodr   rT   rq   r8   r   r   rw   r   rz   r4   r€   r   r�   r†   ÚdictrŠ   r?   r7   r�   r“   rœ   r¢   r¤   r©   r¬   r6   r²   rU   r   r   rn   rn   §   sJ  „ Øð˜Cð ¨3ð °=À4Ñ3Gò ó ðð7˜ð 7 U§Z¡Zð 7°Mó 7ð8˜cð 8¨3ð 8°=ó 8ð ñ

àð

ð �z‰zð

ð ð	

ð
 ð

ð 
ó

ð
Øð
Ø %§
¡
ð
Ø36ð
à	ó
ð3à�{‰{ð3ð —;‘;ð3ð ð	3ð
 ð3ð 
ó3ð3àð3ð ð3ð ð	3ð
 ˜˜c˜‘Nð3ð 
ó3ð4à�e—k‘k 3Ð&Ñ'ð4ð �c˜3�h‘ð4ð ð	4ð
 ð4ð 
ó4ð *.ñ	4à�e—k‘k 3Ð&Ñ'ð4ð "ð4ð �c˜3�h‘ $Ñ&ð	4ð
 
ó4ð" 15Ø%)ñ
àð
ð ˜#˜uŸz™z¨5¯:©:°u·z±zÐAÑBð
ð ð	
ð
 Ÿ™ð
ð ð
ð �c˜5Ÿ:™:�oÑ&¨Ñ-ð
ð ˜d™
ð
ð 
ó
ð  NRñ8Øð8Ø!ŸJ™Jð8Ø/3ð8ØFJð8à	ó8ð
;Ø—J‘Jð;Ø&+§j¡jð;Ø9=ð;ØFJð;à	ó;ð
M˜3ð M cð M°#ð M¸-ó MðM Cð M°ð M¸ó Mð9 Cð 9¨Mó 9ð6¨ð 6°#ð 6¸-ô 6r   rn   c                   ó’  — e Zd Zdeddfd„Zdefd„Zdefd„Zdd„Zdd„Z	defd	„Z
d
ej                  j                  dedz  fd„Zd
ej                  j                  deej                  j                     fd„Zd
ej                  j                  deej                  j                     fd„Zdej                  j&                  ddfd„Zy)Ú_ValueUseAnalysisrH   r   Nc                 ón  — || _         t        «       | _        |j                  j                  | _        t        |di «      | _        t        |dd«      | _        | j
                  gd„ | j                  j                  «       D «       ¢| _
        | j                  «        t        «       | _        g | _        i | _        y )NÚ	subblocksr(   rU   c              3   ó4   K  — | ]  }|j                   –— Œ y ­wr"   )Úgraph)Ú.0Úblocks     r   ú	<genexpr>z-_ValueUseAnalysis.__init__.<locals>.<genexpr>  s   è ø€ Ò?˜eˆe�k�kÑ?ùs   ‚)rH   rn   ÚrulesÚ
root_blockrº   Ú
root_graphr   r¸   r(   rŒ   ÚgraphsÚinstall_call_module_rulesr   Úvalue_reachableÚworklistÚindirect_inputs)rv   rH   s     r   Ú__init__z_ValueUseAnalysis.__init__  s˜   € Ø"ˆŒÜ#Ó%ˆŒ
Ø#×.Ñ.×4Ñ4ˆŒÜ  ¨K¸Ó<ˆŒÜ$ Y°ÀÓDˆÔà�O‰Oð
á? t§~¡~×'<Ñ'<Ó'>Ô?ð
ˆŒð 	×&Ñ&Ô(ä:D»,ˆÔØDFˆŒØOQˆÕr   c                 ód   — | j                  «       sy| j                  «        | j                  «       S )NF)Úhas_index_exprÚseed_value_reachable_nodesÚpropagate_value_reachability©rv   s    r   Úrunz_ValueUseAnalysis.run"  s,   € Ø×"Ñ"Ô$Øà×'Ñ'Ô)Ø×0Ñ0Ó2Ð2r   c                 ó:   — t        d„ | j                  D «       «      S )Nc              3   óD   K  — | ]  }|j                  d dd¬«      –— Œ y­w)rg   Ú
index_exprF)ri   r/   r�   N)Ú
find_nodes)r»   rº   s     r   r½   z3_ValueUseAnalysis.has_index_expr.<locals>.<genexpr>*  s*   è ø€ ò 
àð ×Ñ °lÈÐ×Oñ
ùs   ‚ )ÚanyrÁ   rË   s    r   rÈ   z _ValueUseAnalysis.has_index_expr)  s    € Üñ 
àŸ™ô
ó 
ð 	
r   c                 ót  — | j                   D �](  }|j                  dd¬«      D �]  }t        |j                  t        «      sŒ|j                  | j
                  v r6t        | j                  |j                  | j                  j                  «       Œm|j                  j                  d«      r6t        | j                  |j                  | j                  j                  «       Œ¾|j                  j                  d«      sŒÚt        | j                  |j                  | j                  j                  «       �Œ �Œ+ y )NÚcall_moduleF©ri   r�   r“   r6   )rÁ   rÐ   r   r/   r8   r¸   Úsetattrr¾   r¬   Ú
startswithr“   r6   )rv   rº   r&   s      r   rÂ   z+_ValueUseAnalysis.install_call_module_rules/  sÕ   € Ø—[‘[ó 		NˆEØ×(Ñ(¨MÀÐ(ÓFó N�Ü! $§+¡+¬sÔ3ØØ—;‘; $§.¡.Ñ0Ü˜DŸJ™J¨¯©°T·Z±Z×5OÑ5OÕPØ—[‘[×+Ñ+¨FÔ3Ü˜DŸJ™J¨¯©°T·Z±Z·_±_ÕEØ—[‘[×+Ñ+¨NÕ;Ü˜DŸJ™J¨¯©°T·Z±Z×5LÑ5LÖMòNñ		Nr   c                 ó  — | j                  | j                  «       | j                  D ]ã  }|j                  D ]Ò  }|j                  dk(  rŒ|j                  dk(  r~t        |j                  t        «      rd|j                  j                  d«      rIt        |j                  t        d«      d  «      }||j                  f| j                  | j                  |   <   | j                  |«      D ]  }| j                  j!                  ||f«       Œ! ŒÔ Œå y )Nr5   rÓ   r6   )Ú_enqueue_graph_outputrÀ   rÁ   ra   ri   r   r/   r8   rÖ   r   r9   r0   rÅ   r(   Úvalue_sink_nodesrÄ   Úappend)rv   rº   r&   rA   Ú	sink_nodes        r   rÉ   z,_ValueUseAnalysis.seed_value_reachable_nodes;  så   € Ø×"Ñ" 4§?¡?Ô3Ø—[‘[ò 	=ˆEØŸ™ò =�Ø—7‘7˜hÒ&Øà—G‘G˜}Ò,Ü" 4§;¡;´Ô4ØŸ™×.Ñ.¨~Ô>ä˜dŸk™k¬#¨nÓ*=Ð*?Ð@ÓA�CØEJÈDÏIÉIÐDV�D×(Ñ(¨×);Ñ);¸CÑ)@ÑAØ!%×!6Ñ!6°tÓ!<ò =�IØ—M‘M×(Ñ(¨%°Ð);Õ<ñ=ñ=ñ	=r   c                 óº  ‡ ‡
— d}‰ j                   �rÉ‰ j                   j                  «       \  }}|‰ j                  v rŒ9‰ j                  j                  |«       |j                  dk(  r	d|_        d}|j
                  dk(  rdt        |j                  t        «      rJ|j                  ‰ j                  v r2‰ j                  ‰ j                  |j                     j                  «       |j
                  dk(  r§|j                  dk(  r˜|j                  d   }t        |t        «      sJ ‚‰ j                  j                  |   }t        |t        j                  «      rD|j                   D ]5  }‰ j"                  j%                  |«      }|€Œ!|\  Š
}t'        |ˆ
ˆ fd„«       Œ7 ‰ j)                  |«      D ]  }	‰ j                   j+                  ||	f«       Œ! ‰ j                   r�ŒÉ|S )	NFrÏ   Ú
value_exprTrÓ   Ú	get_indexr   c                 ó>   •— ‰j                   j                  ‰| f«      S r"   ©rÄ   rÚ   )ÚnÚigrv   s    €€r   ú<lambda>z@_ValueUseAnalysis.propagate_value_reachability.<locals>.<lambda>g  s   ø€ °$·-±-×2FÑ2FÈÈAÀwÓ2O€ r   )rÄ   ÚpoprÃ   r`   r/   ri   r   r8   r¸   rØ   rº   r0   rH   rN   r   r   r;   rÅ   Úgetr   Úvalue_input_nodesrÚ   )rv   Úchangedrº   r&   Ú
index_namerD   ÚsymbolÚindirect_inputÚiaÚ
input_noderâ   s   `         @r   rÊ   z._ValueUseAnalysis.propagate_value_reachabilityK  s�  ù€ ØˆØ�m‹mØŸ-™-×+Ñ+Ó-‰KˆE�4Ø�t×+Ñ+Ñ+ØØ× Ñ ×$Ñ$ TÔ*à�{‰{˜lÒ*Ø*�”Ø�ð —‘˜=Ò(Ü˜tŸ{™{¬CÔ0Ø—K‘K 4§>¡>Ñ1à×*Ñ*¨4¯>©>¸$¿+¹+Ñ+F×+LÑ+LÔMà�w‰w˜-Ò'¨D¯K©K¸;Ò,FØ!ŸY™Y q™\�
Ü! *¬cÔ2Ð2Ð2Ø—~‘~×4Ñ4°ZÑ@�Ü˜d¤E§J¡JÔ/Ø"&×"3Ñ"3ò Q˜Ø)-×)=Ñ)=×)AÑ)AÀ&Ó)I˜Ø)Ñ5Ø%3™F˜B Ü# BÔ(OÕPð	Qð #×4Ñ4°TÓ:ò :�
Ø—‘×$Ñ$ e¨ZÐ%8Õ9ð:ð9 �mŒmð> ˆr   r&   c                 óò  — |j                   dk(  rnt        |j                  t        «      rTt	        | j
                  |j                  | j
                  j                  «      } ||j                  dd  i |j                  ¤ŽS |j                   dk(  rkt        |j                  t        «      rQt	        | j
                  |j                  | j
                  j                  «      } ||j                  i |j                  ¤ŽS y )Nrg   r   rÓ   )	ri   r   r/   r8   r   r¾   rq   r0   ro   )rv   r&   Úrule_fns      r   Úrule_for_nodez_ValueUseAnalysis.rule_for_noden  s­   € Ø�7‰7�mÒ#¬
°4·;±;ÄÔ(DÜ˜dŸj™j¨$¯+©+°t·z±z×7NÑ7NÓOˆGÙ˜DŸI™I a b˜MÐ9¨T¯[©[Ñ9Ð9Ø�7‰7�mÒ#¬
°4·;±;ÄÔ(DÜ˜dŸj™j¨$¯+©+°t·z±z×7NÑ7NÓOˆGÙ˜DŸI™IÐ5¨¯©Ñ5Ð5Ør   c                 ó”   — | j                  |«      }|€t        |«      S t        |j                  «      t        |j                  «      z  S r"   )rï   rl   re   rV   rW   ©rv   r&   Úrules      r   ræ   z#_ValueUseAnalysis.value_input_nodesw  sK   € Ø×!Ñ! $Ó'ˆØˆ<Ü'¨Ó-Ð-Ü  ×!2Ñ!2Ó3Ô6GØ×Ñó7
ñ 
ð 	
r   c                 óf   — | j                  |«      }|rt        |j                  «      S t        «       S r"   )rï   re   rW   r   rñ   s      r   rÙ   z"_ValueUseAnalysis.value_sink_nodes  s-   € Ø×!Ñ! $Ó'ˆÙ6:Ô  ×!1Ñ!1Ó2ÐLÄ
ÃÐLr   rº   c                 óˆ   ‡ ‡— ‰j                  dd¬«      }t        |«      dk(  sJ ‚t        |d   j                  ˆˆ fd„«       y )Nr5   FrÔ   r   r   c                 ó>   •— ‰j                   j                  ‰| f«      S r"   rà   )rá   rº   rv   s    €€r   rã   z9_ValueUseAnalysis._enqueue_graph_output.<locals>.<lambda>†  s   ø€ °·±×0DÑ0DÀeÈQÀZÓ0P€ r   )rÐ   r9   r   r0   )rv   rº   Úoutput_nodess   `` r   rØ   z'_ValueUseAnalysis._enqueue_graph_outputƒ  s@   ù€ Ø×'Ñ'¨8¸%Ð'Ó@ˆÜ�<Ó  AÒ%Ð%Ð%Ü�˜Q‘×$Ñ$Ô&PÕQr   )r   N)rY   rZ   r[   r	   rÆ   r7   rÌ   rÈ   rÂ   rÉ   rÊ   r   rc   rd   rT   rï   r   ræ   rÙ   ÚGraphrØ   rU   r   r   r¶   r¶     sÙ   „ ðR (ð R¨tó Rð 3�Tó 3ð
 ó 
ó
Nó=ð !¨dó !ðF %§(¡(§-¡-ð °MÀDÑ4Hó ð
 e§h¡h§m¡mð 
¸
À5Ç8Á8Ç=Á=Ñ8Qó 
ðM U§X¡X§]¡]ð M°zÀ%Ç(Á(Ç-Á-Ñ7Pó MðR¨5¯8©8¯>©>ð R¸dô Rr   r¶   c                 ó´   — t        | «      j                  «       r?t        j                  j	                  | «       t        j
                  j	                  | «       yy)av  
    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	   rJ   Úclear_cacher'   )rH   s    r   Ú convert_index_expr_to_value_exprrú   ‰  s@   € ô* ˜Ó#×'Ñ'Ô)Ü×Ñ×&Ñ& yÔ1Ü�‰×#Ñ# IÕ.ð *r   )!r<   Údataclassesr   Útypingr   r   r   Útorch.fx.noder   Útorch.utils._ordered_setr   Útorch.utils._sympy.value_rangesr   rH   r	   Úutilsr
   r7   r   r   r%   r´   r>   rG   rQ   rT   rc   rd   re   rl   rn   r¶   rú   rU   r   r   ú<module>r     se  ðÛ Ý !Ý ã ã Ý !Ý /Ý 7å Ý "ð/ Cð /¨Dó /ð,¨°E·J±JÑ(?ð ÀDó ð4Ø
ð4à��c�‰Nð4ð ˜‘9ð4ð �#�u—z‘z�/Ñ"ð	4ð
 ˜3 ¨E¯J©JÑ 7Ð7Ñ8ð4ð 
ó4ðn
°ð 
¸dó 
ñB �$Ô÷	*ð 	*ó ð	*ð˜3ð  :¨e¯h©h¯m©mÑ#<ó ð˜uŸx™xŸ}™}ð °¸E¿H¹H¿M¹MÑ1Jó ÷g6ñ g6÷TuRñ uRðp/°ð /¸Tô /r   