
    sh'                        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     u/Users/tiagomarins/Projetos/claudeai/copy_bank/venv/lib/python3.13/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(ii4C99$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'    %ekk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  pXR                  ;   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( 
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_precisionrD   )   sG   
# 
$ 
 %dV[9	22i&&,,9CSCS1Si&&s>':'<=>C(-L  '}}#4#44 0 7Izz)//22djj6Q6Q %0

$;IOO,c)//.B%M 8FF!  /$ ,F,=>>9 :< 		?DkkDGdDIr   	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KK:% 	 		!+	 	
 --- 	)   ]]_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 /,EJJ(? D 4
4cN4 94 #uzz/"	4
 3EJJ 7784 
4n
 
d 
r   