
    Vh'                        d dl 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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y)    N)Any)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     Q/home/dcms/DCMS/lib/python3.12/site-packages/torch/_inductor/optimize_indexing.pyval_expressable_in_32_bitsr      s    sL%(#uzz"}}}>>S^^c(C*C #uu~1#/1#sEKK(eii4C599$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'    %ekk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
              rd|j                  v rt        |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_filter3   sA    {{j( 
TYYq\KKMMMM>
 .
 	
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_precisionrC   )   sL   
# 
$ 
 %dV[9 	22i&&,9CSCS1Si&&s>':'<=>C(-L  '}} t4#4#44 0 7Izz)//2djj6Q %0

$;IOO,c)//.B%M 8F!$ ,F9,=>9< 		?DkkDGdDIr   	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+   r,   r   int64unbounded_vars
get_boundsrC   r$   indexing_exprsr&   )rD   bvr"   int64_dtype_nodesr#   s        r   !indexing_dtype_strength_reductionrM   `   s    
 
			B '')KK:%		!+B--- 	  ]]_F " 
##$$	

!s   AB3)r8   typingr   r   r   torch.utils._sympy.value_rangesr   rD   r   utilsr   r3   r   r   r!   dictr:   rC   rM    r   r   <module>rS      s        7  "/C /D /,EJJ(? D 4
4cN4 94 #uzz/"	4
 3EJJ 7784 
4n
 
d 
r   