Ë
    g^(h'  ã                   ó  — 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     ú_/var/www/skyplay_api_hub/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_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_precisionrC   )   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+   r,   r   Úint64Úunbounded_varsÚ
get_boundsrC   r$   Úindexing_exprsr&   )rD   Úbvr"   Úint64_dtype_nodesr#   s        r   Ú!indexing_dtype_strength_reductionrM   `   s»   € ð
 
×	Ñ	Ó	€Bð ×'Ñ'Ó)öàà�K‰K˜:Ò%Ø—	‘	˜!‘¤§¡Ò+Ø˜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ó /ð,¨°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   