ó
    Eñi'  ã                   ó  • S SK r S SKJr  S SKrS SKrS SKJr  SSKJr  SSK	J
r
  S\S\4S	 jrS
\\R                     S\4S jrS\S\\\4   S\\   S\\\R                  4   S\\\\R                     4   SS4S jrS\SS4S jrg)é    N)ÚAny)ÚValueRangesé   )ÚLoopBody)Údominated_nodesÚvalÚreturnc                 ó  • [        U SS5      (       a  g[        U [        R                  5      (       aL  U R                  (       d   eU R
                  (       d  U R                  (       a  [        U 5      n O[        U 5      n [        U [        5      (       a  U S:*  =(       a    U S:¬  $ [        U [        5      (       aG  [        R                  " [        R                  5      nXR                  :*  =(       a    XR                  :¬  $ [        SU  35      e)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     Ú^/home/mande/repo/quber/.venv/lib/python3.13/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Ó(ˆØ—i‘iÑ×4 C¯9©9Ñ$4Ð4ä
Ð'¨ uÐ-Ó
.Ð.ó    Úrangec                 ód   • [        U R                  5      =(       a    [        U R                  5      $ )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                 ó\  • S[         S[        4S jn[        U /U5       GHQ  nUR                  S;   a  M  [	        UR                  [
        5      (       Ga  SUR                  ;   a÷  [        UR                  [        S5      S  5      nX'   nUR                  5        H¾  u  pšXŠR                  ;   d  M  XI   n[        R                  " UR                  5      (       d%  [        R                  " UR                  5      (       a      g [        [        R                      " [        UR                  5      [        UR                  5      5      n[#        U5      (       a  M½      g    [#        X   5      (       a  GMR    g    [%        U R&                  5      n[(        R*                  US'   [-        U5      U l        g )Nr"   r	   c                 ó¬   • U R                   S:H  =(       a?    U R                  S   [        R                  [        R                  [        R
                  4;   $ )NÚto_dtypeé   )ÚtargetÚargsr   r   Úfloat32Úfloat64)r"   s    r   Úskip_filterÚ,try_to_reduce_precision.<locals>.skip_filter3   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!   Úlistr,   r   r   Útuple)r"   r#   r$   r%   r&   r/   Ú	dominatedÚidxÚindirect_varÚindexÚexprÚ	index_valÚindex_val_intr,   s                 r   Útry_to_reduce_precisionrD   )   sG  € ð
œ#ð 
¤$ô 
ô % 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   Ú	loop_bodyc                 ó–  • U R                  5       nU R                  5        Vs/ s HK  nUR                  S:X  d  M  UR                  S   [        R
                  :X  d  M8  X!R                  ;  d  MI  UPMM     nnU(       d  gUR                  5       nU H0  n[        UUU R                  U R                  UR                  5        M2     gs  snf )zp
Performs Value Range Analysis on LoopBody's fx graph to reduce precision of
intermediaries from int64 to int32
r)   r*   N)r#   Ú	get_nodesr+   r,   r   Úint64Úunbounded_varsÚ
get_boundsrD   r$   Úindexing_exprsr&   )rE   Úbvr"   Úint64_dtype_nodesr#   s        r   Ú!indexing_dtype_strength_reductionrN   `   sÄ   € ð
 
×	Ñ	Ó	€Bð ×'Ñ'Ô)óâ)ˆDà�K‰K˜:Ñ%ó 	ð —	‘	˜!‘¤§¡Ñ+ó	 	ð
 ×-Ñ-Ñ-÷ 	Ù)ð ð ö Øà�]‰]‹_€Fó "ˆÜØØØ×#Ñ#Ø×$Ñ$Ø×Ñö	
ò "ùò!s   £C»CÁCÁ/C)r9   Útypingr   r   r   Útorch.utils._sympy.value_rangesr   rE   r   Úutilsr   r4   r   r   r!   Údictr;   rD   rN   © r   r   Ú<module>rT      sÆ   ðÛ Ý ã ã Ý 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õ 
r   