
    sh                       S SK Jr  S SKrS SKrS SKrS SKrS SKrS SKrS SKJ	r	J
r
JrJrJrJrJrJr  S SKJr  S SKrS SKJrJr  S SKrS SKJr  S SKJr  SS	KJrJrJ r J!r!J"r"J#r#J$r$J%r%J&r&J'r'J(r(J)r)J*r*J+r+J,r,  SS
K-J.r.  SSK/J0r0J1r1J2r2  \Rf                  " \45      r5SS/r6\" S\Rn                  \5      r8 " S S\95      r:S r;S r<SS jr=SS jr>\\?\@\Rn                  4   rA\\B\4   rC\\A\C4   rD\	\Rn                  /\Rn                  4   rE\	\Rn                  \Rn                  /\Rn                  4   rF\	\/\4   rG\	\\/\4   rH\\E\G4   rI\\F\H4   rJ\R                  " SS9 " S S\
\8   5      5       rL " S S5      rM S     SS jjrNg)    )annotationsN)CallableGenericOptionaloverloadSupportsFloatTYPE_CHECKINGTypeVarUnion)	TypeGuard)BooleanBooleanAtom)
LazyString)dtype_to_type   )_keep_floatFloatTrueDivFloorDiv
IntTrueDivOpaqueUnaryFn_expOpaqueUnaryFn_logOpaqueUnaryFn_log2OpaqueUnaryFn_sqrtPowByNaturalRoundDecimal
RoundToIntsafe_powToFloatTruncToFloat
TruncToInt)sympy_interp)int_ooIntInfinityNegativeIntInfinityValueRangesbound_sympy_Tc                      \ rS rSrSrg)ValueRangeError9    N)__name__
__module____qualname____firstlineno____static_attributes__r+       s/Users/tiagomarins/Projetos/claudeai/copy_bank/venv/lib/python3.13/site-packages/torch/utils/_sympy/value_ranges.pyr)   r)   9   s    r1   r)   c                   [        U [        5      (       a'  U (       a  [        R                  $ [        R                  $ [        U [
        5      (       a  [        R                  " U 5      $ [        U [        5      (       aX  [        R                  " U 5      (       a'  U S:  a  [        R                  $ [        R                  * $ [        R                  " U 5      $ [        U [        R                  5      (       a0  U R                  (       d   U 5       eU [        R                  :w  d   eU $ [        U [        5      (       a  U $ [!        S[#        U 5       SU  35      e)Nr   znot simple sympy type : )
isinstanceboolsympytruefalseintIntegerfloatmathisinfooFloatExpr	is_numbernanr   AssertionErrortype)es    r2   simple_sympifyrG   ?   s    !Tuzz/EKK/	As		}}Q	Au		::a== 1u5883588)3{{1~	Auzz	"	"{{A{
 EII~~	A{	#	#5d1gYbDEEr1   c                   [        U [        R                  5      (       a%  [        U[        R                  5      (       d   eX:  $ [        U [        5      (       a  [        U[        5      (       d	   U U45       eU =(       a    U(       + (       + $ N)r5   r7   rA   SympyBooleanloweruppers     r2   sympy_generic_lerN   X   sz    %$$%,,,, ~ %..:e\3R3R 	
U
 	
R '%i((r1   c                    U R                   $ rI   is_boolvrs    r2   
vr_is_boolrT   g   s    ::r1   c                $    U R                   (       + $ rI   rP   rR   s    r2   
vr_is_exprrV   k   s    zz>r1   T)frozenc                     \ rS rSr% \(       a  \\R                     r\\	   r
\\\
4   rS\S'   S\S'   S\S'   S\S'   S\S'   S*S	 jr\        S+S
 j5       r\        S,S j5       rS-S jrS.S jrS/S jrS rS0S jr\      S1S j5       r\      S2S j5       rS3S jr\      S1S j5       r\      S2S j5       rS3S jrS4S jr\\R4                  S5S j5       5       r\\R4                  S5S j5       5       r\\R4                  S.S j5       5       r\\S6S j5       5       r\\S7S j5       5       r\S8S j5       r\S9S j5       r\\S9S j5       5       r \\S:S  j5       5       r \S;S! j5       r \S9S" j5       r!\S9S# j5       r"\\        S<S$ j5       5       r#\\        S=S% j5       5       r#\        S>S& j5       r#\$S' 5       r%S(r&g))?r%   z   r'   rL   rM   r6   rQ   is_intis_floatc                <    SU R                    SU R                   S3$ )NzVR[z, ]rK   selfs    r2   __repr__ValueRanges.__repr__   s    TZZL4::,a00r1   c                    g rI   r+   r_   rL   rM   s      r2   __init__ValueRanges.__init__        	r1   c                    g rI   r+   rc   s      r2   rd   re      rf   r1   c                V   [        U5      n[        U5      n [        X5      (       d  [        SU SU S35      e [	        U[
        5      n[	        U[
        5      nXE:X  d   X45       e[	        U[        R                  5      (       a  U[        R                  :X  a  [        n[	        U[        R                  5      (       a  U[        R                  * :X  a  [        * n[        R                  [        [        4n[	        X5      n[	        X&5      n[        R                  U SU5        [        R                  U SU5        [        R                  U SU5        [        R                  U S	U R                  (       + =(       a    U=(       a    U5         [        R                  U S
U R                  (       + =(       a    U R                  (       + 5        U R                  (       d,  U R                  (       d  U R                   (       d   X45       eg g g ! [         a  n[        SU SU 35      UeS nAff = f)NzInvalid ranges [:r]   zCould not compare z <= rL   rM   rQ   rZ   r[   )rG   rN   r)   	TypeErrorr5   rJ   r7   r;   r?   r"   r$   r#   object__setattr__rQ   rZ   r[   )	r_   rL   rM   rF   is_bool_loweris_bool_upperinteger_typesis_int_loweris_int_uppers	            r2   rd   re      s   u%u%	L#E11%(8qq&IJJ 2
 #5,7"5,7-=~=- eU]]++0AEeU]]++%((0BGE(;[I!%7!%7 	4%04%0 	4M:>>,	

	 	4-=-Qdkk/R||t{{dmmKe^K;m{|a  	L0tE7CD!K	Ls   "H 
H(H##H(c                    [        U 5      (       a  U $ U [        R                  5       :X  a  [        R                  5       $ [	        SU  35      e)Nznot bool like )rT   r%   unknownunknown_boolrD   r^   s    r2   boolifyValueRanges.boolify   sD    dK[((**++-- >$!899r1   c                J    [         R                  U5      R                  U 5      $ rI   )r%   wrapissubset)r_   xs     r2   __contains__ValueRanges.__contains__   s    "++D11r1   c                    XR                  5       L a  g[        UR                  U R                  5      =(       a     [        U R                  UR                  5      $ )NT)unknown_intrN   rL   rM   r_   others     r2   ry   ValueRanges.issubset   sE    $$&&TZZ8 
=MJJ>
 	
r1   c                
    X-  $ )z1Given two ValueRanges, returns their intersectionr+   r   s     r2   tightenValueRanges.tighten   s
    |r1   c                    g rI   r+   r   s     r2   __and__ValueRanges.__and__       
 	r1   c                    g rI   r+   r   s     r2   r   r      r   r1   c                    U[         R                  5       [         R                  5       4;   a  U $ U [         R                  5       [         R                  5       4;   a  U$ U R                  UR                  :X  d   X45       eU R                  UR                  :X  d   X45       eU R
                  UR
                  :X  d   X45       eU R                  (       a^  [        [        R                  " U R                  UR                  5      [        R                  " U R                  UR                  5      5      $ [        [        R                  " U R                  UR                  5      [        R                  " U R                  UR                  5      5      $ rI   )r%   rs   r~   rQ   rZ   r[   r7   OrrL   AndrM   MaxMinr   s     r2   r   r      s   [((*K,C,C,EFFKK'');+B+B+DEEL||u}},;tm;,{{ell*9TM9*}}.==.<<U[[1599TZZ3U  		$**ekk2EIIdjj%++4V r1   c                    g rI   r+   r   s     r2   __or__ValueRanges.__or__  r   r1   c                    g rI   r+   r   s     r2   r   r     r   r1   c                   [         R                  5       X4;   a  [         R                  5       $ U R                  UR                  :X  d   X45       eU R                  UR                  :X  d   X45       eU R                  UR                  :X  d   X45       eU R                  (       a^  [        [
        R                  " U R                  UR                  5      [
        R                  " U R                  UR                  5      5      $ [        [
        R                  " U R                  UR                  5      [
        R                  " U R                  UR                  5      5      $ rI   )r%   rs   rQ   rZ   r[   r7   r   rL   r   rM   r   r   r   s     r2   r   r     s     TM1&&((||u}},;tm;,{{ell*9TM9*}}.==.<<		$**ekk2EHHTZZ4U  		$**ekk2EIIdjj%++4V r1   c                4    U R                   U R                  :H  $ rI   rK   r^   s    r2   is_singletonValueRanges.is_singleton,  s    zzTZZ''r1   c                 T    [        [        R                  * [        R                  5      $ rI   r%   r7   r?   r+   r1   r2   rs   ValueRanges.unknown/       EHH9ehh//r1   c                 ,    [        [        * [        5      $ rI   )r%   r"   r+   r1   r2   r~   ValueRanges.unknown_int4  s     F7F++r1   c                 R    [        [        R                  [        R                  5      $ rI   )r%   r7   r9   r8   r+   r1   r2   rt   ValueRanges.unknown_bool9  s     5;;

33r1   c                    g rI   r+   args    r2   rx   ValueRanges.wrap>  s     	r1   c                    g rI   r+   r   s    r2   rx   r   D       	r1   c                    [        U [        5      (       a  U $ [        U [        5      (       a/  [        R                  " U 5      (       a  [        R                  5       $ [        X 5      $ rI   )r5   r%   r<   r=   isnanrs   r   s    r2   rx   r   I  sG    c;''Jc5!!djjoo&&((3$$r1   c                    [         R                  U 5      n [        U" U R                  5      U" U R                  5      5      $ )z#Increasing: x <= y => f(x) <= f(y).r%   rx   rL   rM   rz   fns     r2   increasing_mapValueRanges.increasing_mapR  s1     Q2agg;17744r1   c                    g rI   r+   r   s     r2   decreasing_mapValueRanges.decreasing_mapX  r   r1   c                    g rI   r+   r   s     r2   r   r   ]  r   r1   c                    [         R                  U 5      n [        U" U R                  5      U" U R                  5      5      $ )z#Decreasing: x <= y => f(x) >= f(y).)r%   rx   rM   rL   r   s     r2   r   r   b  s1     Q2agg;17744r1   c                    [         R                  U 5      n U" U R                  5      nU" U R                  5      n[        [	        X#5      [        X#5      5      $ )zIt's increasing or decreasing.)r%   rx   rL   rM   minmax)rz   r   lus       r2   monotone_mapValueRanges.monotone_mapi  sC     QqwwKqwwK3q9c!i00r1   c                f   [         R                  U 5      n SU ;   a  [        U" U R                  5      U" U R                  5      5      n[        U5      n[        U[        R                  5      (       d  U[        R                  :X  a  [        SU5      $ [        SU5      $ [         R                  X5      $ )z$Fn is convex and has a minimum at 0.r           )r%   rx   r   rL   rM   rG   r5   r7   r@   r?   r   )rz   r   rM   s      r2   convex_min_zero_mapValueRanges.convex_min_zero_mapq  s     Q6177R[1E"5)E%--%((1B"3..q%((''..r1   c                    g rI   r+   rz   yr   s      r2   coordinatewise_increasing_map)ValueRanges.coordinatewise_increasing_map}       	r1   c                    g rI   r+   r   s      r2   r   r     r   r1   c                    [         R                  U 5      [         R                  U5      p[        U" U R                  UR                  5      U" U R                  UR                  5      5      $ )z
It's increasing on each coordinate.

Mathematically:
For every 1 <= i <= n and x_i <= y_i we have that
f(x1, .., xn) <= f(x1, , yi, ..., xn)
r   r   s      r2   r   r     sR     "K$4$4Q$71qww qww 
 	
r1   c                F   U R                  U5      U R                  U5      p![        R                  " UR                  UR                  /UR                  UR                  /5       VVs/ s H  u  pEU" XE5      PM     nnn[        [        U5      [        U5      5      $ s  snnf )z1It's increasing or decreasing on each coordinate.)rx   	itertoolsproductrL   rM   r%   r   r   )clsrz   r   r   abproductss          r2   coordinatewise_monotone_map'ValueRanges.coordinatewise_monotone_map  s     xx{CHHQK1 "))177AGG*<qww>PQ
Q qHQ 	 
 3x=#h-88	
s   (Br+   N)returnstr)r_   ValueRanges[sympy.Expr]rL   ExprInrM   r   r   None)r_   ValueRanges[SympyBoolean]rL   BoolInrM   r   r   r   )rL   AllInrM   r   r   r   )r   r   )rz   r   r   r6   )r   r%   )r_   r   r   r   r   r   )r_   r   r   r   r   r   )r_   AllVRr   r   r   r   )r   r6   )r   r   )r   Union[ExprIn, ExprVR]r   ExprVR)r   Union[BoolIn, BoolVR]r   BoolVR)r   Union[AllIn, AllVR]r   r   )rz   r   r   ExprFnr   r   )rz   r   r   BoolFnr   r   )rz   r   r   AllFnr   r   )rz   r   r   r   r   ExprFn2r   r   )rz   r   r   r   r   BoolFn2r   r   )rz   r   r   r   r   AllFn2r   r   )'r,   r-   r.   r/   r	   r%   r7   rA   r   rJ   r   r   r   __annotations__r`   r   rd   ru   r{   ry   r   r   r   r   staticmethod	functoolscachers   r~   rt   rx   r   r   r   r   r   classmethodr   r0   r+   r1   r2   r%   r%   z   s   UZZ(\*ffn%
 IIMLN1 %  
	  '  
	 8Lt:2

 %& 
!  '( 
# $ %& 
!  '( 
# ( __0  0 __,  , __4  4       % % 5 5
       5 5 1 1 	/ 	/     
	       
	   


 
 
	
 
$ 9 9r1   c                  |   \ rS rSrSr\S 5       r\S;S j5       r\S 5       r\S 5       r	\S 5       r
\S	 5       r\S
 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r \S 5       r!\S 5       r"\S  5       r#\S! 5       r$\S" 5       r%\S# 5       r&\S$ 5       r'\S% 5       r(\S& 5       r)\S' 5       r*\S( 5       r+\S) 5       r,\S* 5       r-\S+ 5       r.\S, 5       r/\S- 5       r0\S. 5       r1\S/ 5       r2\S0 5       r3\S1 5       r4\S2 5       r5\S3 5       r6\S4 5       r7\S5 5       r8\S6 5       r9\S7 5       r:\S8 5       r;\S9 5       r<S:r=g)<SymPyValueRangeAnalysisi  z
It gives bounds on a SymPy operator given bounds on its arguments
See the function `bound_sympy` for a function that applies this logic to a full SymPy expression
c                   [        U [        5      (       a#  U R                  5       (       d   eU R                  n [        U [        [
        [        45      nU(       d6  [        U [        [        R                  [        R                  45      (       d   e[        U [        5      (       a|  [        R                  " U 5      (       aa  U[        R                  :X  a  [        R                  5       $ UR                   (       a  [        R#                  5       $ [        R%                  5       $ U(       a  ['        U5      nU" U 5      n OuU[        R                  :X  a  [        U [        5      (       d   eOIUR                   (       a%  U R(                  (       a  U R*                  (       d   eOU R,                  (       d   e[        R/                  U 5      nU$ rI   )r5   r%   r   rL   r:   r<   r6   r   r7   r;   Numberr   r=   r   torchrt   is_floating_pointrs   r~   r   	is_finiteis_real
is_integerrx   )valuedtype	is_pythontype_rs        r2   constant SymPyValueRangeAnalysis.constant  sF   e[))%%''''KKEusE4&89	JK=
 
 	
 
 e]++

50A0A

""//11(("**,,"..00!%(E%LE 

"!%5555(( ??emm;; ''''U#r1   Nc                    U[         R                  :X  a  [        R                  U [        5      $ U[         R
                  :X  a  [        R                  5       $ UR                  (       d  [        R                  5       $ [        R                  5       $ rI   )
r   float64r%   r   r   r6   rt   r   r~   rs   )r   r   	src_dtypes      r2   to_dtype SymPyValueRangeAnalysis.to_dtype  sc    EMM!--a99ejj ++--((**,,""$$r1   c                6    [         R                  U [        5      $ rI   )r%   r   r    )r   r   s     r2   trunc_to_int$SymPyValueRangeAnalysis.trunc_to_int  s    ))!Z88r1   c                    [         R                  U 5      n U R                  5       n U R                  (       d   e[         R	                  U [
        R                  5      $ rI   )r%   rx   ru   rQ   r   r7   Not)r   s    r2   not_SymPyValueRangeAnalysis.not_  s@    QIIKyyy))!UYY77r1   c                J    [         R                  X[        R                  5      $ rI   )r%   r   r7   r   r   r   s     r2   or_SymPyValueRangeAnalysis.or_  s    88uxxHHr1   c                J    [         R                  X[        R                  5      $ rI   )r%   r   r7   r   r  s     r2   and_SymPyValueRangeAnalysis.and_  s    88uyyIIr1   c                   U R                  5       (       aD  [        R                  [        R                  " U R
                  (       a
  S5      5      $ S5      5      $ [        [        R                  " S5      [        R                  " S5      5      $ Nr   r   )r   r%   rx   r7   r;   rL   rz   s    r2   _bool_to_int$SymPyValueRangeAnalysis._bool_to_int  sY    >>##EMMqww!$FGGA$FGGu}}Q/q1ABBr1   c                   [         R                  U5      [         R                  U5      p!UR                  (       a"  UR                  (       a  U R                  X5      $ UR                  (       a  U R	                  U5      nUR                  (       a  U R	                  U5      n[        UR                  UR                  5      nUS:  aC  U[        R                  * :w  a.  U[        * :w  a#   S[        U* S-
  5      R                  5       -  * nOSn[        U[        UR                  UR                  5      5      $ ! [         a
    [        * n N=f = f)Nr   r   )r%   rx   rQ   r  r  r   rL   r7   r?   r"   r:   
bit_length	Exceptionr   rM   )r   r   r   rL   s       r2   bitwise_and#SymPyValueRangeAnalysis.bitwise_and  s    "K$4$4Q$719988A>!99  #A99  #AAGGQWW%19588)+&0@ sE6A:99;;< E5#aggqww"788	    s   (!D6 6E
	E
c                   [         R                  U5      [         R                  U5      p!UR                  (       a"  UR                  (       a  U R                  X5      $ UR                  (       a  U R	                  U5      nUR                  (       a  U R	                  U5      n[        UR                  UR                  5      nUS:X  a  SnOMUS:  a?  U[        R                  :w  a+  U[        :w  a!   S[        U5      R                  5       -  S-
  nOUS:  a  Sn[        [        UR                  UR                  5      U5      $ ! [         a	    [        n N<f = f)Nr   r   )r%   rx   rQ   r  r  r   rM   r7   r?   r"   r:   r  r  r   rL   )r   r   r   rM   s       r2   
bitwise_or"SymPyValueRangeAnalysis.bitwise_or  s   "K$4$4Q$7199771= 99  #A99  #AAGGQWW%A:EQY5EHH,&c%j3355: QYE3qww0%88	  s   /E EEc                "   [         R                  U 5      n [         R                  U5      nU R                  5       (       aR  UR                  5       (       a=  U R                  UR                  :X  a#  [         R                  [        R
                  5      $ U R                  UR                  :  d  UR                  U R                  :  a#  [         R                  [        R                  5      $ [        [        R                  [        R
                  5      $ rI   )r%   rx   r   rL   r7   r8   rM   r9   r  s     r2   eqSymPyValueRangeAnalysis.eq+  s    QQ>> 0 0QWW5G##EJJ//WWqww!''AGG"3##EKK005;;

33r1   c                B    U R                  U R                  X5      5      $ rI   )r  r  r   r   r   s      r2   neSymPyValueRangeAnalysis.ne5      xxq%%r1   c                ,    [         R                  U5      $ rI   )r%   rx   )r   r   s     r2   identity SymPyValueRangeAnalysis.identity9  s    ""r1   c                6   [         R                  U5      n[         R                  U5      nUR                  UR                  :X  d   eUR                  (       a!  U R                  U R	                  U5      U5      $ UR
                  UR                  :  a#  [         R                  [        R                  5      $ UR                  UR
                  :  a#  [         R                  [        R                  5      $ [        [        R                  [        R                  5      $ rI   )
r%   rx   rQ   r  r  rM   rL   r7   r8   r9   r  s      r2   ltSymPyValueRangeAnalysis.lt=  s    QQyyAII%%%9988CHHQK++ww "''

33AGG#"''44u{{EJJ77r1   c                $    U R                  X!5      $ rI   )r$  r  s      r2   gtSymPyValueRangeAnalysis.gtK  s    vva|r1   c                B    U R                  U R                  X5      5      $ rI   )r  r'  r  s      r2   leSymPyValueRangeAnalysis.leO  r  r1   c                B    U R                  U R                  X5      5      $ rI   )r  r$  r  s      r2   geSymPyValueRangeAnalysis.geS  r  r1   c                \    [         R                  X[        [        R                  5      5      $ rI   )r%   r   r   operatoraddr  s     r2   r1  SymPyValueRangeAnalysis.addW  s#    88+hll+
 	
r1   c                   [         R                  U5      n[         R                  U5      nUR                  UR                  :X  d   eUR                  (       a  U R                  X5      $ S n[         R	                  X[        U5      5      $ )Nc                B    U S:X  d  U S:X  a  U $ US:X  d  US:X  a  U$ X-  $ )Nr   r   r+   r  s     r2   safe_mul-SymPyValueRangeAnalysis.mul.<locals>.safe_mulf  s-    Cx16cQ!Vur1   )r%   rx   rQ   r  r   r   )r   r   r   r5  s       r2   mulSymPyValueRangeAnalysis.mul]  sl    QQyyAII%%%9988A>!	 66q[=RSSr1   c                $   [         R                  U 5      n [         R                  U5      nSU;   d*  [        * U ;   d
  [        U ;   a)  [        * U;   d
  [        U;   a  [         R                  5       $ [         R	                  X[        [        5      5      $ Nr   )r%   rx   r"   rs   r   r   r   r  s     r2   int_truediv#SymPyValueRangeAnalysis.int_truedivq  sr    QQ6w!|v{&AST&&((::k*- r1   c                t   [         R                  U 5      n [         R                  U5      nSU;   dR  [        R                  * U ;   d  [        R                  U ;   a=  [        R                  * U;   d  [        R                  U;   a  [         R	                  5       $ [         R                  X[        [        5      5      $ r:  )r%   rx   r7   r?   rs   r   r   r   r  s     r2   truedivSymPyValueRangeAnalysis.truediv|  s    QQ6hhY!^uxx1}EHH9>UXXQR]&&((::k,/ r1   c                J   [         R                  U 5      n [         R                  U5      nSU;   a  [         R                  5       $ / n[        R                  " U R
                  U R                  /UR
                  UR                  /5       Hy  u  p4[        X45      nU[        R                  L aE  UR                  [        R                  " U5      [        R                  " U5      -  [        -  5        Mh  UR                  U5        M{     [        [        U5      [        U5      5      $ r:  )r%   rx   r~   r   r   rL   rM   r   r7   rC   appendsignr"   r   r   )r   r   r   rz   r   r   s         r2   floordiv SymPyValueRangeAnalysis.floordiv  s    QQ6**,,%%qww&8177AGG:LMDAAEII~AA!>& HI" N 3x=#h-88r1   c                  ^^ [         R                  U5      n[         R                  U5      nS mS nSU;   a  [         R                  5       $ UR                  5       (       a  [	        UR
                  5      mU" UR
                  T5      U" UR                  T5      :X  a  [         R                  UUU4S j5      $ UR                  S:  a  [        T* S-   S5      $ UR
                  S:  a  [        STS-
  5      $ [        T* S-   UR
                  5      n[        TS-
  UR                  5      n[        XE5      $ U R	                  U5      R                  S-
  n[        U* U5      $ )Nc                J    [        U 5      [        U5      -  nU S:  a  US-  nU$ )Nr   r  )abs)r   r   rets      r2   c_mod*SymPyValueRangeAnalysis.mod.<locals>.c_mod  s(    a&3q6/C1ur	Jr1   c                ~    X-  nUR                   (       a'  U[        [        * 4;  a  [        R                  " U5      $ U$ rI   )r   r"   r7   r;   )r   r   rz   s      r2   c_div*SymPyValueRangeAnalysis.mod.<locals>.c_div  s2    A'({{q&@Q7Q5==#XWXXr1   r   c                   > T" U T5      $ rI   r+   )r   rI  y_vals    r2   <lambda>-SymPyValueRangeAnalysis.mod.<locals>.<lambda>  s    uQr1   r   )
r%   rx   r~   r   rG  rL   rM   r   r   r   )r   rz   r   rL  rL   rM   rI  rO  s         @@r2   modSymPyValueRangeAnalysis.mod  s.   QQ		Y 6**,,^^LE QWWe$aggu(=="11!5NOOww{"E6A:q111"1eai00 UFQJ0EAIqww/"500 GGAJ$$q(Evu--r1   c                D    U R                  U R                  X5      U5      $ rI   )rR  rC  )r   r   r   cs       r2   modular_indexing(SymPyValueRangeAnalysis.modular_indexing  s    wws||A)1--r1   c                *    [         R                  5       $ rI   )r%   r~   )r   argss     r2   &is_non_overlapping_and_dense_indicator>SymPyValueRangeAnalysis.is_non_overlapping_and_dense_indicator  s    &&((r1   c                  ^ [         R                  U5      n[         R                  T5      mUR                  5       (       aH  TR                  5       (       a3  [         R                  [        UR                  TR                  5      5      $ UR                  S:  a,  [         R                  UT[        S[        5      -  [        5      $ TR                  5       (       aG  TR                  S-  S:X  a  [         R                  UU4S j5      $ [         R                  UU4S j5      $ [        UR                  UR                  * 5      n[        [        UTR                  5      * [        UTR                  5      5      $ )Nr   r      c                0   > [        U TR                  5      $ rI   r   rL   rz   r   s    r2   rP  8SymPyValueRangeAnalysis.pow_by_natural.<locals>.<lambda>  s    !QWW!5r1   c                0   > [        U TR                  5      $ rI   r_  r`  s    r2   rP  ra    s    x177?Sr1   )r%   rx   r   r   rL   r   r"   r   r   r   r   rM   )r   r   r   max_bases     ` r2   pow_by_natural&SymPyValueRangeAnalysis.pow_by_natural  s    QQ>> 0 0##HQWWagg$>??WW\ <<1{1f--|  ^^ww{a"665 
 #11!5STT 177QWWH-H8QWW-.1770K r1   c                *    [         R                  5       $ rI   )r%   rs   r  s      r2   powSymPyValueRangeAnalysis.pow  s    ""$$r1   c                    [         R                  U 5      n SU ;   a  [         R                  5       $ [         R                  U S 5      $ )zENeeded as it's used in pow, but it won't appear on a SymPy expressionr   c                    [        SU 5      $ )N      ?)r   )r   s    r2   rP  4SymPyValueRangeAnalysis.reciprocal.<locals>.<lambda>  s    <Q;Or1   )r%   rx   rs   r   r  s    r2   
reciprocal"SymPyValueRangeAnalysis.reciprocal  s>     Q6&&((--a1OPPr1   c                6    [         R                  U [        5      $ rI   )r%   r   rG  r  s    r2   rG  SymPyValueRangeAnalysis.abs!  s    ..q#66r1   c                6    [         R                  U [        5      $ rI   )r%   r   r   r  s    r2   expSymPyValueRangeAnalysis.exp%  s    ))!->??r1   c                    [         R                  U 5      n U R                  S::  a  [         R                  5       $ [         R	                  U [
        5      $ r:  )r%   rx   rL   rs   r   r   r  s    r2   logSymPyValueRangeAnalysis.log)  s@    Q77a<&&(())!->??r1   c                    [         R                  U 5      n U R                  S::  a  [         R                  5       $ [         R	                  U [
        5      $ r:  )r%   rx   rL   rs   r   r   r  s    r2   log2SymPyValueRangeAnalysis.log20  s@    Q77a<&&(())!-?@@r1   c                B    U R                  X[        R                  5      $ rI   )
min_or_maxr7   r   r  s      r2   minimumSymPyValueRangeAnalysis.minimum7      ~~aEII..r1   c                B    U R                  X[        R                  5      $ rI   )r{  r7   r   r  s      r2   maximumSymPyValueRangeAnalysis.maximum;  r~  r1   c                    [         R                  U 5      n [         R                  U5      n[         R                  XU5      $ rI   )r%   rx   r   )r   r   r   s      r2   r{  "SymPyValueRangeAnalysis.min_or_max?  s5    QQ88rBBr1   c                    [         R                  U[        R                  R                  R
                  R                  5      $ rI   )r%   r   r7   	functions
elementaryintegersfloorr   rz   r   s      r2   floor_to_int$SymPyValueRangeAnalysis.floor_to_intE  s+    ))!U__-G-G-P-P-V-VWWr1   c                    [         R                  U[        R                  R                  R
                  R                  5      $ rI   )r%   r   r7   r  r  r  ceilingr  s      r2   ceil_to_int#SymPyValueRangeAnalysis.ceil_to_intI  s0    ))u))22::
 	
r1   c                    [         R                  U[        [        R                  R
                  R                  R                  5      5      $ rI   )r%   r   r   r7   r  r  r  r  r   rz   s     r2   r  SymPyValueRangeAnalysis.floora  s5    )){5??55>>DDE
 	
r1   c                    [         R                  U[        [        R                  R
                  R                  R                  5      5      $ rI   )r%   r   r   r7   r  r  r  r  r  s     r2   ceilSymPyValueRangeAnalysis.ceilg  s5    )){5??55>>FFG
 	
r1   c                   ^ TR                  5       (       d  [        R                  5       $ TR                  mU4S jn[        R	                  X5      $ )Nc                   > [        U T5      $ rI   )r   )numberndigitss    r2   rP  7SymPyValueRangeAnalysis.round_decimal.<locals>.<lambda>u  s    L9r1   )r   r%   rs   rL   r   )r   r  r  r   s     ` r2   round_decimal%SymPyValueRangeAnalysis.round_decimalm  sB    ##%%&&((-- :))&55r1   c                6    [         R                  U[        5      $ rI   )r%   r   r   )r   r  r   s      r2   round_to_int$SymPyValueRangeAnalysis.round_to_inty  s    ))&*==r1   c                    [         R                  U 5      n U R                  S:  a  [         R                  5       $ [         R	                  U [
        5      $ r:  )r%   rx   rL   rs   r   r   r  s    r2   sqrtSymPyValueRangeAnalysis.sqrt~  s@    Q77Q;&&(())!-?@@r1   c                z   [         R                  U5      n[         R                  U5      nU R                  5       n UR                  UR                  :X  d  [         R	                  5       X4;   d   eUR                  (       a^  [        [
        R                  " UR                  UR                  5      [
        R                  " UR                  UR                  5      5      $ [        [
        R                  " UR                  UR                  5      [
        R                  " UR                  UR                  5      5      $ rI   )r%   rx   ru   rQ   rs   r7   r   rL   r   rM   r   r   )r   r   rU  s      r2   whereSymPyValueRangeAnalysis.where  s    QQIIK yyAII%)<)<)>1&)HHH99uyy!'':EHHQWWagg<VWWuyy!'':EIIaggqww<WXXr1   c                (    UR                  5       nX4$ rI   )ru   r  s     r2   expr_cond_pair&SymPyValueRangeAnalysis.expr_cond_pair  s    IIKvr1   c                 b    S nU  H&  u  p#[         R                  U;   d  M  Uc  UnM"  X-  nM(     U$ rI   )r7   r8   )ranges
init_range
expr_range
cond_ranges       r2   	piecewise!SymPyValueRangeAnalysis.piecewise  s;    
&,"JzzZ'%!+J!+!8J '- r1   c                    [        SS5      $ Ng      rk  r%   r  s    r2   cosSymPyValueRangeAnalysis.cos  s    
 4%%r1   c                6    [        S[        R                  5      $ )Nr   r   r  s    r2   coshSymPyValueRangeAnalysis.cosh  s    3))r1   c                    [        SS5      $ r  r  r  s    r2   sinSymPyValueRangeAnalysis.sin  s     4%%r1   c                T    [        [        R                  * [        R                  5      $ rI   r   r  s    r2   sinhSymPyValueRangeAnalysis.sinh  r   r1   c                T    [        [        R                  * [        R                  5      $ rI   r   r  s    r2   tanSymPyValueRangeAnalysis.tan      EHH9ehh//r1   c                T    [        [        R                  * [        R                  5      $ rI   r   r  s    r2   tanhSymPyValueRangeAnalysis.tanh  r   r1   c                T    [        [        R                  * [        R                  5      $ rI   r   r  s    r2   asinSymPyValueRangeAnalysis.asin  r  r1   c                T    [        [        R                  * [        R                  5      $ rI   r   r  s    r2   acosSymPyValueRangeAnalysis.acos  r  r1   c                T    [        [        R                  * [        R                  5      $ rI   r   r  s    r2   atanSymPyValueRangeAnalysis.atan  r  r1   c                6    [         R                  U [        5      $ rI   )r%   r   r   r  s    r2   truncSymPyValueRangeAnalysis.trunc  s    ))!\::r1   r+   rI   )>r,   r-   r.   r/   __doc__r   r   r   r   r  r  r  r  r   r  r  r  r  r!  r$  r'  r*  r-  r1  r7  r;  r>  rC  rR  rV  rZ  rd  rg  rm  rG  rr  ru  rx  r|  r  r{  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r0   r+   r1   r2   r   r     s[   
 # #J % % 9 9 8 8 I I J J C C 9 9* 9 9. 4 4 & & # # 8 8   & & & & 
 

 T T&   
 
 9 9 &. &.P . . ) )  @ * *X Q Q 7 7 @ @ @ @ A A / / / / C C
 X X 
 
. 
 

 
 

 	6 	6 > > A A 
Y 
Y     & & 	 	 & &
 0 0 0 0 0 0     0 0 ; ;r1   r   c                   ^ ^ [         R                  ST [        U U4S j5      5        [        T [        R
                  5      (       a  [        R                  T 5      $ T=(       d    0 m[        R                  R                  R                  5       nU(       ag  UR                  R                  (       aL  T(       a%  0 UR                  R                  R                  ETEmO UR                  R                  R                  mS n[        [         TT US9$ )Nzbound_sympy(%s)%sc                 n   > T(       a,  SSR                  U 4S jTR                  5        5       5      -   $ S$ )N
c              3  \   >#    U  H!  u  pUTR                   ;   d  M  S U SU 3v   M#     g7f)z  r4   N)free_symbols).0kr   exprs      r2   	<genexpr>0bound_sympy.<locals>.<lambda>.<locals>.<genexpr>  s1      .<daTEVEV@VMb2aSMns   ,, )joinitems)r  r  s   r2   rP  bound_sympy.<locals>.<lambda>  s@    
 	 )) .4lln  
 r1   c                
   U R                   (       a]  U R                  (       a  [        S[        5      nU$ U R                  (       a  [        S[        5      nU$ [        R                  5       n U$ [        R                  5       nU$ r  )r   is_positiver%   r"   is_nonnegativer~   rs   )srS   s     r2   missing_handler$bound_sympy.<locals>.missing_handler  sm    <<}} F+ 	 !! F+ 		 !,,. 	 $$&B	r1   )r  )ru  debugr   r5   r7   r   r%   rx   r   _guardsTracingContexttry_get	fake_mode	shape_envvar_to_ranger!   r   )r  r  contextr  s   ``  r2   r&   r&     s     II		
 $%%%%\rF mm**224G7$$..K))33@@KFKF&&00==F  r1   )rS   ValueRanges[_T]r   z$TypeGuard[ValueRanges[SympyBoolean]])rS   r  r   z"TypeGuard[ValueRanges[sympy.Expr]]rI   )r  z
sympy.Exprr  z)Optional[dict[sympy.Symbol, ValueRanges]]r   r%   )O
__future__r   dataclassesr   r   loggingr=   r0  typingr   r   r   r   r   r	   r
   r   typing_extensionsr   r7   sympy.logic.boolalgr   rJ   r   r   torch._loggingr   torch._prims_commonr   r  r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    interpr!   numbersr"   r#   r$   	getLoggerr,   ru  __all__rA   r'   RuntimeErrorr)   rG   rN   rT   rV   r:   r<   r   r6   r   r   r   r   r   r   r   r   	dataclassr%   r   r&   r+   r1   r2   <module>r     s   "      	 	 	 (  D  % -    " ! = = !-
(T5::|,	l 	F2) 
sE5::%	&	t\!	"ffn	5::,

*	+
EJJ

+UZZ7
8	<.,.	/
L,/=
>ffn	w	  d#o9'"+ o9 $o9d	; ;F KO-
-G--r1   