
    ti                       d dl mZ d dlZd dlZd dlZd dlZd dlZd dlZd dlm	Z	 d dl
mZmZmZmZmZmZ d dlmZ d dlZd dlmZmZ d dlZd dlmZ d dlmZ d	d
lmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z, d	dl-m.Z. d	dl/m0Z0m1Z1m2Z2  ejf                  e4      Z5ddgZ6 edejn                  e      Z8 G d de9      Z:d Z;d Z<ddZ=ddZ>ddZ?e@eAz  ejn                  z  ZBeCez  ZDeBeDz  ZEe	ejn                  gejn                  f   ZFe	ejn                  ejn                  gejn                  f   ZGe	egef   ZHe	eegef   ZIeFeHz  ZJeGeIz  ZK ej                  d       G d dee8                ZM G d d      ZN	 d 	 	 	 	 	 d!dZOy)"    )annotationsN)Callable)GenericoverloadSupportsFloatTYPE_CHECKING	TypeGuardTypeVar)TypeIs)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                      e Zd Zy)ValueRangeErrorN)__name__
__module____qualname__     e/home/ubuntu/crypto_trading_bot/.venv/lib/python3.12/site-packages/torch/utils/_sympy/value_ranges.pyr(   r(   1   s    r-   r(   c                l   t        | t              r"| rt        j                  S t        j                  S t        | t
              rt        j                  |       S t        | t              rPt        j                  |       r&| dkD  rt        j                  S t        j                   S t        j                  |       S t        | t        j                        r8t        | dd      st        |       | t        j                  k(  rt        d      | S t        | t               r| S t        dt#        |        d|        )Nr   	is_numberFzsympy expression is NaNznot simple sympy type : )
isinstanceboolsympytruefalseintIntegerfloatmathisinfooFloatExprgetattrAssertionErrornanr   type)es    r.   simple_sympifyrD   7   s    !Tuzz/EKK/	As	}}Q	Au	::a= 1u5883588)3{{1~	Auzz	"q+u- ##
 		> !:;;	A{	#5d1gYbDEEr-   c                    t        | t        j                        r*t        |t        j                        st        d      || k\  S t        | t              rt        |t              st        | |f      | xr |  S )Nz5upper must be a sympy.Expr when lower is a sympy.Expr)r2   r4   r>   r@   SympyBooleanloweruppers     r.   sympy_generic_lerJ   R   sn    %$%, G 
 ~ %.j6U %00'%i((r-   c                    | j                   S Nis_boolvrs    r.   
vr_is_boolrQ   b   s    ::r-   c                    | j                    S rL   rM   rO   s    r.   
vr_is_exprrS   f   s    zz>r-   c                6    t        | t        j                        S rL   )r2   r4   r8   )values    r.   is_sympy_integerrV   j   s    eU]]++r-   T)frozenc                  \   e Zd ZU ereej                     Zee   Z	ee	z  Z
ded<   ded<   ded<   ded<   ded<   d(dZe	 	 	 	 	 	 	 	 d)d	       Ze	 	 	 	 	 	 	 	 d*d
       Zd+dZd,dZd-dZd Zd.dZe	 	 	 	 	 	 d/d       Ze	 	 	 	 	 	 d0d       Zd1dZe	 	 	 	 	 	 d/d       Ze	 	 	 	 	 	 d0d       Zd1dZd2dZeej0                  d3d              Zeej0                  d3d              Zeej0                  d,d              Zeed4d              Zeed5d              Zed6d       Zed7d       Zeed7d              Zeed8d              Zed9d        Zed7d!       Zed7d"       Z ee	 	 	 	 	 	 	 	 d:d#              Z!ee	 	 	 	 	 	 	 	 d;d$              Z!e	 	 	 	 	 	 	 	 d<d%       Z!e"d&        Z#y')=r$   r&   rH   rI   r3   rN   is_intis_floatc                <    d| j                    d| j                   dS )NzVR[z, ]rG   selfs    r.   __repr__zValueRanges.__repr__   s    TZZL4::,a00r-   c                     y rL   r,   r^   rH   rI   s      r.   __init__zValueRanges.__init__       
 r-   c                     y rL   r,   ra   s      r.   rb   zValueRanges.__init__   rc   r-   c                   t        |      }t        |      }	 t        ||      st        d| d| d      	 t	        |t
              }t	        |t
              }||k7  rt        ||f      t	        |t        j                        r|t        j                  k(  rt        }t	        |t        j                        r|t        j                   k(  rt         }t        j                  t        t        f}t	        ||      }t	        ||      }t        j                  | d|       t        j                  | d|       t        j                  | d|       t        j                  | d	| j                   xr |xr |       	 t        j                  | d
| j                   xr | j                           | j                  s'| j                   s| j"                  st        ||f      y y y # t        $ r}t        d| d|       |d }~ww xY w)NzInvalid ranges [:r\   zCould not compare z <= rH   rI   rN   rY   rZ   )rD   rJ   r(   	TypeErrorr2   rF   r@   r4   r8   r<   r!   r#   r"   object__setattr__rN   rY   rZ   )	r^   rH   rI   rC   is_bool_loweris_bool_upperinteger_typesis_int_loweris_int_uppers	            r.   rb   zValueRanges.__init__   s   u%u%	L#E51%(8qq&IJJ 2
 #5,7"5,7M) %00 eU]]+0AEeU]]+%((0BGE(;[I!%7!%7 	4%04%0 	4M:>>,	

	 	4-=-Qdkk/R||DKK %00 9FK|c  	L0tE7CD!K	Ls   G 	G9"G44G9c                    t        |       r| S | t        j                         k(  rt        j                         S t	        d|        )Nznot bool like )rQ   r$   unknownunknown_boolr@   r]   s    r.   boolifyzValueRanges.boolify   sA    dK[((**++-- >$!899r-   c                J    t         j                  |      j                  |       S rL   )r$   wrapissubset)r^   xs     r.   __contains__zValueRanges.__contains__   s    "++D11r-   c                    || j                         u ryt        |j                  | j                        xr  t        | j                  |j                        S )NT)unknown_intrJ   rH   rI   r^   others     r.   ru   zValueRanges.issubset   sG    D$$&&TZZ8 
=MJJ>
 	
r-   c                    | |z  S )z1Given two ValueRanges, returns their intersectionr,   rz   s     r.   tightenzValueRanges.tighten   s    e|r-   c                     y rL   r,   rz   s     r.   __and__zValueRanges.__and__        #&r-   c                     y rL   r,   rz   s     r.   r   zValueRanges.__and__        %(r-   c                   |t         j                         t         j                         fv r| S | t         j                         t         j                         fv r|S | j                  |j                  k7  rt	        | |f      | j
                  |j
                  k7  rt	        | |f      | j                  |j                  k7  rt	        | |f      | j                  r\t        t        j                  | j                  |j                        t        j                  | j                  |j                              S t        t        j                  | j                  |j                        t        j                  | j                  |j                              S rL   )r$   rp   ry   rN   r@   rY   rZ   r4   OrrH   AndrI   MaxMinrz   s     r.   r   zValueRanges.__and__   s    [((*K,C,C,EFFKK'');+B+B+DEEL<<5==( $//;;%,,& $//==ENN* $//<<U[[1599TZZ3U  		$**ekk2EIIdjj%++4V r-   c                     y rL   r,   rz   s     r.   __or__zValueRanges.__or__  r   r-   c                     y rL   r,   rz   s     r.   r   zValueRanges.__or__  r   r-   c                   t         j                         | |fv rt         j                         S | j                  |j                  k7  rt        | |f      | j                  |j                  k7  rt        | |f      | j
                  |j
                  k7  rt        | |f      | j                  r\t        t        j                  | j                  |j                        t        j                  | j                  |j                              S t        t        j                  | j                  |j                        t        j                  | j                  |j                              S rL   )r$   rp   rN   r@   rY   rZ   r4   r   rH   r   rI   r   r   rz   s     r.   r   zValueRanges.__or__  s     T5M1&&((<<5==( $//;;%,,& $//==ENN* $//<<		$**ekk2EHHTZZ4U  		$**ekk2EIIdjj%++4V r-   c                4    | j                   | j                  k(  S rL   rG   r]   s    r.   is_singletonzValueRanges.is_singleton/  s    zzTZZ''r-   c                 T    t        t        j                   t        j                        S rL   r$   r4   r<   r,   r-   r.   rp   zValueRanges.unknown2       EHH9ehh//r-   c                 ,    t        t         t              S rL   )r$   r!   r,   r-   r.   ry   zValueRanges.unknown_int7  s     F7F++r-   c                 R    t        t        j                  t        j                        S rL   )r$   r4   r6   r5   r,   r-   r.   rq   zValueRanges.unknown_bool<  s     5;;

33r-   c                     y rL   r,   args    r.   rt   zValueRanges.wrapA  s     	r-   c                     y rL   r,   r   s    r.   rt   zValueRanges.wrapG       	r-   c                    t        | t              r| S t        | t              r)t        j                  |       rt        j                         S t        | |       S rL   )r2   r$   r9   r:   isnanrp   r   s    r.   rt   zValueRanges.wrapL  sA    c;'Jc5!djjo&&((3$$r-   c                    t         j                  |       } t         || j                         || j                              S )z#Increasing: x <= y => f(x) <= f(y).r$   rt   rH   rI   rv   fns     r.   increasing_mapzValueRanges.increasing_mapU  s1     Q2agg;17744r-   c                     y rL   r,   r   s     r.   decreasing_mapzValueRanges.decreasing_map[  s    BEr-   c                     y rL   r,   r   s     r.   r   zValueRanges.decreasing_map_  r   r-   c                    t         j                  |       } t         || j                         || j                              S )z#Decreasing: x <= y => f(x) >= f(y).)r$   rt   rI   rH   r   s     r.   r   zValueRanges.decreasing_mapd  s1     Q2agg;17744r-   c                    t         j                  |       }  || j                        } || j                        }t        t	        ||      t        ||            S )zIt's increasing or decreasing.)r$   rt   rH   rI   minmax)rv   r   lus       r.   monotone_mapzValueRanges.monotone_mapk  sG     QqwwKqwwK3q!9c!Qi00r-   c                X   t         j                  |       } d| v r|t         || j                         || j                              }t        |      }t        |t        j                        s|t        j                  k(  rt        d|      S t        d|      S t         j                  | |      S )z$Fn is convex and has a minimum at 0.r           )r$   rt   r   rH   rI   rD   r2   r4   r=   r<   r   )rv   r   rI   s      r.   convex_min_zero_mapzValueRanges.convex_min_zero_maps  s     Q6177R[1E"5)E%-%((1B"3..q%((''2..r-   c                     y rL   r,   rv   yr   s      r.   coordinatewise_increasing_mapz)ValueRanges.coordinatewise_increasing_map       r-   c                     y rL   r,   r   s      r.   r   z)ValueRanges.coordinatewise_increasing_map  r   r-   c                    t         j                  |       t         j                  |      }} t         || j                  |j                         || j                  |j                              S )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      r.   r   z)ValueRanges.coordinatewise_increasing_map  sT     "K$4$4Q$71qww qww 
 	
r-   c                D   | j                  |      | j                  |      }}t        j                  |j                  |j                  g|j                  |j                  g      D cg c]  \  }} |||       }}}t        t        |      t        |            S c c}}w )z1It's increasing or decreasing on each coordinate.)rt   	itertoolsproductrH   rI   r$   r   r   )clsrv   r   r   abproductss          r.   coordinatewise_monotone_mapz'ValueRanges.coordinatewise_monotone_map  s     xx{CHHQK1 "))177AGG*<qww>PQ
1 q!H
 
 3x=#h-88	
s   (BN)returnstr)r^   ValueRanges[sympy.Expr]rH   ExprInrI   r   r   None)r^   ValueRanges[SympyBoolean]rH   BoolInrI   r   r   r   )rH   AllInrI   r   r   r   )r   r   )rv   r   r   r3   )r   r$   )r^   r   r{   r   r   r   )r^   r   r{   r   r   r   )r^   AllVRr{   r   r   r   )r   r3   )r   r   )r   ExprIn | ExprVRr   ExprVR)r   BoolIn | BoolVRr   BoolVR)r   AllIn | AllVRr   r   )rv   r   r   ExprFnr   r   )rv   r   r   BoolFnr   r   )rv   r   r   AllFnr   r   )rv   r   r   r   r   ExprFn2r   r   )rv   r   r   r   r   BoolFn2r   r   )rv   r   r   r   r   AllFn2r   r   )$r)   r*   r+   r   r$   r4   r>   r   rF   r   r   __annotations__r_   r   rb   rr   rw   ru   r}   r   r   r   staticmethod	functoolscacherp   ry   rq   rt   r   r   r   r   r   classmethodr   r,   r-   r.   r$   r$   y   s    UZZ(\*
 IIMLN1 %  
	  '  
	 :1x:2

 &%&&& 
!& &
 ('((( 
#( (
* &%&&& 
!& &
 ('((( 
#( (
$( __0  0 __,  , __4  4       % % 5 5
 E  E   5 5 1 1 	/ 	/   
	     
	   


 
 
	
 
$ 9 9r-   c                     e Zd ZdZed        Zed;d       Zed        Zed        Zed        Z	ed        Z
ed	        Zed
        Zed        Zed        Zed        Zed        Zed        Zed        Zed        Zed        Zed        Zed        Zed        Zed        Zed        Zed        Zed        Zed        Zed        Zed        Zed        Z ed        Z!ed        Z"ed         Z#ed!        Z$ed"        Z%ed#        Z&ed$        Z'ed%        Z(ed&        Z)ed'        Z*ed(        Z+ed)        Z,ed*        Z-ed+        Z.ed,        Z/ed-        Z0ed.        Z1ed/        Z2ed0        Z3ed1        Z4ed2        Z5ed3        Z6ed4        Z7ed5        Z8ed6        Z9ed7        Z:ed8        Z;ed9        Z<ed:        Z=y)<SymPyValueRangeAnalysisz
    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                z   t        | t              r'| j                         st        d      | j                  } t        | t
        t        t        f      }|sFt        | t        t        j                  t        j                  f      st        dt        |              t        | t              rpt        j                  |       r[|t         j                  k(  rt        j#                         S |j$                  rt        j'                         S t        j)                         S |rt+        |      } ||       } nu|t         j                  k(  rt        | t              sRt        d      |j$                  r#| j,                  r/| j.                  s#t        d      t1        | dd      st        d      t        j3                  |       }|S )Nz.ValueRanges must be a singleton for constant()znot a supported constant type: z#expected BooleanAtom for bool dtypez/expected float-like sympy value for float dtype
is_integerFz*expected integer sympy value for int dtype)r2   r$   r   r@   rH   r7   r9   r3   r   r4   r8   NumberrB   r   r:   r   torchrq   is_floating_pointrp   ry   r   	is_finiteis_realr?   rt   )rU   dtype	is_pythontype_rs        r.   constantz SymPyValueRangeAnalysis.constant  s_   e[)%%'$%UVVKKEusE4&89	K="
 !#B4;-!PQQ e]+

50A

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

"!%5()NOO((??5==(I 
 ulE:()UVVU#r-   Nc                   |t         j                  k(  rt        j                  | t              S |t         j
                  k(  rt        j                         S |j                  st        j                         S t        j                         S rL   )
r   float64r$   r   r   r3   rq   r   ry   rp   )r   r   	src_dtypes      r.   to_dtypez SymPyValueRangeAnalysis.to_dtype  sc    EMM!--a99ejj ++--((**,,""$$r-   c                6    t         j                  | t              S rL   )r$   r   r   )r   r   s     r.   trunc_to_intz$SymPyValueRangeAnalysis.trunc_to_int  s     ))!Z88r-   c                    t         j                  |       } | j                         } | j                  st	        d      t         j                  | t        j                        S )Nz"not_ expects a boolean ValueRanges)r$   rt   rr   rN   r@   r   r4   Not)r   s    r.   not_zSymPyValueRangeAnalysis.not_  sG    QIIKyy !EFF))!UYY77r-   c                L    t         j                  | |t        j                        S rL   )r$   r   r4   r   r   r   s     r.   or_zSymPyValueRangeAnalysis.or_  s    88AuxxHHr-   c                L    t         j                  | |t        j                        S rL   )r$   r   r4   r   r   s     r.   and_zSymPyValueRangeAnalysis.and_  s    88AuyyIIr-   c                   | j                         r>t        j                  t        j                  | j
                  r
d            S d            S t        t        j                  d      t        j                  d            S Nr   r   )r   r$   rt   r4   r8   rH   rv   s    r.   _bool_to_intz$SymPyValueRangeAnalysis._bool_to_int   sV    >>##EMMqww!$FGGA$FGGu}}Q/q1ABBr-   c                n   t         j                  |      t         j                  |      }}|j                  r|j                  r| j                  ||      S |j                  r| j	                  |      }|j                  r| j	                  |      }t        |j                  |j                        }|dk  rA|t        j                   k7  r-|t         k7  r#	 dt        | dz
        j                         z   }nd}t        |t        |j                  |j                              S # t        $ r
 t         }Y <w xY w)Nr   r   )r$   rt   rN   r   r   r   rH   r4   r<   r!   r7   
bit_length	Exceptionr   rI   )r   r   r   rH   s       r.   bitwise_andz#SymPyValueRangeAnalysis.bitwise_and  s    "K$4$4Q$719988Aq>!99  #A99  #AAGGQWW%19588)+&0@ sE6A:99;;< E5#aggqww"788	    s   !D! !D43D4c                ~   t         j                  |      t         j                  |      }}|j                  r|j                  r| j                  ||      S |j                  r| j	                  |      }|j                  r| j	                  |      }t        |j                  |j                        }|dk(  rd}nI|dkD  r=|t        j                  k7  r*|t        k7  r!	 dt        |      j                         z  dz
  }n|dk  rd}t        t        |j                  |j                        |      S # t        $ r	 t        }Y ;w xY w)Nr   r   )r$   rt   rN   r   r   r   rI   r4   r<   r!   r7   r   r   r   rH   )r   r   r   rI   s       r.   
bitwise_orz"SymPyValueRangeAnalysis.bitwise_or  s   "K$4$4Q$7199771a= 99  #A99  #AAGGQWW%A:EQY5EHH,&c%j3355: QYE3qww0%88	  s   D* *D<;D<c                   t         j                  |      t         j                  |      }}|j                  r|j                  r|j                  |j                  z  |j                  |j                  z  |j                  |j                  z  |j                  |j                  z  h}t        d |D              }t        d |D              }|r#|r!t        j                  t        j                  }}n8|rt        j                  x}}n#|rt        j                  x}}nt        d|       t        ||      S |j                  r| j                  |      }|j                  r| j                  |      }|j                  |j                  k(  rh|j                  |j                  k(  rOt        |j                        r:t        |j                        r%|j                  |j                  z  }t        ||      S t        t         t              S )Nc              3  B   K   | ]  }|t         j                  k(    y wrL   )r4   r6   .0bounds     r.   	<genexpr>z6SymPyValueRangeAnalysis.bitwise_xor.<locals>.<genexpr>@  s     EUEU[[0E   c              3  B   K   | ]  }|t         j                  k(    y wrL   r4   r5   r   s     r.   r   z6SymPyValueRangeAnalysis.bitwise_xor.<locals>.<genexpr>A  s     C55EJJ.Cr  zNon-boolean xor result: )r$   rt   rN   rH   rI   anyr4   r6   r5   r@   r   rV   r!   )	r   r   r   bounds	has_falsehas_truerH   rI   value_ranges	            r.   bitwise_xorz#SymPyValueRangeAnalysis.bitwise_xor5  s   "K$4$4Q$7199!''!!''!!''!!''!	F EfEEICFCCHX${{EJJu %

* %+$'?x%HIIue,,99  #A99  #AGGqww177" ) )''AGG+K{K88F7F++r-   c                   t         j                  |       } t         j                  |      }| j                         rL|j                         r<| j                  |j                  k(  r#t         j                  t        j
                        S | j                  |j                  kD  s|j                  | j                  kD  r#t         j                  t        j                        S t        t        j                  t        j
                        S rL   )r$   rt   r   rH   r4   r5   rI   r6   r   s     r.   eqzSymPyValueRangeAnalysis.eq[  s    QQ>> 0QWW5G##EJJ//WWqww!''AGG"3##EKK005;;

33r-   c                D    | j                  | j                  ||            S rL   )r   r  r   r   r   s      r.   nezSymPyValueRangeAnalysis.nee      xxq!%%r-   c                ,    t         j                  |      S rL   )r$   rt   )r   r   s     r.   identityz SymPyValueRangeAnalysis.identityi  s    ""r-   c                8   t         j                  |      }t         j                  |      }|j                  |j                  k7  rt        d      |j                  r!| j	                  | j                  |      |      S |j                  |j                  k  r#t         j                  t        j                        S |j                  |j                  k\  r#t         j                  t        j                        S t        t        j                  t        j                        S )N=operands must both be boolean ValueRanges or both non-boolean)r$   rt   rN   r@   r   r   rI   rH   r4   r5   r6   r  s      r.   ltzSymPyValueRangeAnalysis.ltm  s    QQ99		! O  9988CHHQK++ww "''

33AGG#"''44u{{EJJ77r-   c                &    | j                  ||      S rL   )r  r  s      r.   gtzSymPyValueRangeAnalysis.gt~  s    vva|r-   c                D    | j                  | j                  ||            S rL   )r   r  r  s      r.   lezSymPyValueRangeAnalysis.le  r  r-   c                D    | j                  | j                  ||            S rL   )r   r  r  s      r.   gezSymPyValueRangeAnalysis.ge  r  r-   c                ^    t         j                  | |t        t        j                              S rL   )r$   r   r   operatoraddr   s     r.   r  zSymPyValueRangeAnalysis.add  s%    88q+hll+
 	
r-   c                    t         j                  |      }t         j                  |      }|j                  |j                  k7  rt        d      |j                  r| j	                  ||      S d }t         j                  ||t        |            S )Nr  c                <    | dk(  s| dk(  r| S |dk(  s|dk(  r|S | |z  S )Nr   r   r,   r   s     r.   safe_mulz-SymPyValueRangeAnalysis.mul.<locals>.safe_mul  s/    Cx16cQ!V1ur-   )r$   rt   rN   r@   r   r   r   )r   r   r   r   s       r.   mulzSymPyValueRangeAnalysis.mul  s|    QQ99		! O  9988Aq>!	 66q![=RSSr-   c                   t         j                  |       } t         j                  |      }d|v s"t         | v st        | v r%t         |v st        |v rt         j                         S t         j	                  | |t        t                    S Nr   )r$   rt   r!   rp   r   r   r   r   s     r.   int_truedivz#SymPyValueRangeAnalysis.int_truediv  sv    QQ6w!|v{&AST&&((::J'	 r-   c                b   t         j                  |       } t         j                  |      }d|v sJt        j                   | v st        j                  | v r9t        j                   |v st        j                  |v rt         j	                         S t         j                  | |t        t                    S r#  )r$   rt   r4   r<   rp   r   r   r   r   s     r.   truedivzSymPyValueRangeAnalysis.truediv  s    QQ6hhY!^uxx1}EHH9>UXXQR]&&((::L)	 r-   c                   t         j                  |       } t         j                  |      }d|v r|j                  dk\  r| j                  dk\  rt        dt              S |j                  dk  r| j                  dk  rt        dt              S |j                  dk  r | j                  dk\  rt        t         d      S |j                  dk\  r | j                  dk  rt        t         d      S t         j                         S g }t        j                  | j                  | j                  g|j                  |j                  g      D ]v  \  }}t        ||      }|t        j                  u rB|j                  t        j                  |      t        j                  |      z  t        z         f|j                  |       x t        t        |      t        |            S r#  )r$   rt   rH   r!   rI   ry   r   r   r   r4   rA   appendsignr   r   )r   r   r   rv   r   r   s         r.   floordivz SymPyValueRangeAnalysis.floordiv  sd   QQ 6ww!|1"1f--ww!|1"1f--ww!|1"F7A..ww!|1"F7A..**,,%%qww&8177AGG:LM 	#DAqAAEII~AA!>& HI"	# 3x=#h-88r-   c                   t         j                  |      }t         j                  |      }d d }d|v rt         j                         S |j                         rt	        |j
                         ||j
                         ||j                        k(  rt         j                  |fd      S |j                  dk  rt         dz   d      S |j
                  dkD  rt        ddz
        S t         dz   |j
                        }t        dz
  |j                        }t        ||      S | j	                  |      j                  dz
  }t        | |      S )Nc                H    t        |       t        |      z  }| dk  r|dz  }|S )Nr   r   )abs)r   r   rets      r.   c_modz*SymPyValueRangeAnalysis.mod.<locals>.c_mod  s(    a&3q6/C1ur	Jr-   c                p    | |z  }|j                   r$|t        t         fvrt        j                  |      S |S rL   )r   r!   r4   r8   )r   r   rv   s      r.   c_divz*SymPyValueRangeAnalysis.mod.<locals>.c_div  s4    AA'({{q&@Q7Q5==#XWXXr-   r   c                     |       S rL   r,   )r   r/  y_vals    r.   <lambda>z-SymPyValueRangeAnalysis.mod.<locals>.<lambda>  s    uQ r-   r   )
r$   rt   ry   r   r-  rH   rI   r   r   r   )r   rv   r   r1  rH   rI   r/  r3  s         @@r.   modz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--r-   c                V   t         j                  |      }t         j                  |      }|j                  dk\  r%|j                  dk\  rt        j	                  ||      S |j                  dk  r|j                  dz   nd}|j
                  dkD  r|j
                  dz
  nd}t        ||      S )zPython-style modulo: result has same sign as divisor.

        Assumes valid input where y is never 0.
        - When y > 0: result is in [0, y - 1]
        - When y < 0: result is in [y + 1, 0]
        r   r   )r$   rt   rH   r   r5  rI   )r   rv   r   rH   rI   s        r.   
python_modz"SymPyValueRangeAnalysis.python_mod  s     QQ77a<AGGqL*..q!44 ww{! ww{!5%((r-   c                F    | j                  | j                  ||      |      S rL   )r5  r*  )r   r   r   cs       r.   modular_indexingz(SymPyValueRangeAnalysis.modular_indexing  s    wws||Aq)1--r-   c                *    t         j                         S rL   )r$   ry   )r   argss     r.   &is_non_overlapping_and_dense_indicatorz>SymPyValueRangeAnalysis.is_non_overlapping_and_dense_indicator  s    &&((r-   c                   t         j                  |      }t         j                        |j                         rCj                         r3t         j                  t        |j                  j                              S |j                  dk\  r,t         j                  |t        dt              z  t              S j                         rDj                  dz  dk(  rt         j                  |fd      S t         j                  |fd      S t        |j                  |j                         }t        t        |j                         t        |j                              S )Nr   r      c                0    t        | j                        S rL   r   rH   rv   r   s    r.   r4  z8SymPyValueRangeAnalysis.pow_by_natural.<locals>.<lambda>4  s    !QWW!5 r-   c                0    t        | j                        S rL   rA  rB  s    r.   r4  z8SymPyValueRangeAnalysis.pow_by_natural.<locals>.<lambda>8  s    x177?S r-   )r$   rt   r   r   rH   r   r!   r   r   r   r   rI   )r   r   r   max_bases     ` r.   pow_by_naturalz&SymPyValueRangeAnalysis.pow_by_natural!  s   QQ>> 0##HQWWagg$>??WW\
 <<1{1f--|  ^^ww{a"665 
 #11!5STT 177QWWH-H8QWW-.1770K r-   c                *    t         j                         S rL   )r$   rp   r  s      r.   powzSymPyValueRangeAnalysis.powC  s    ""$$r-   c                    t         j                  |       } d| v rt         j                         S t         j                  | d       S )zENeeded as it's used in pow, but it won't appear on a SymPy expressionr   c                    t        d|       S )N      ?)r   )r   s    r.   r4  z4SymPyValueRangeAnalysis.reciprocal.<locals>.<lambda>w  s    <Q;O r-   )r$   rt   rp   r   r   s    r.   
reciprocalz"SymPyValueRangeAnalysis.reciprocalp  s>     Q6&&((--a1OPPr-   c                6    t         j                  | t              S rL   )r$   r   r-  r   s    r.   r-  zSymPyValueRangeAnalysis.absy  s    ..q#66r-   c                6    t         j                  | t              S rL   )r$   r   r   r   s    r.   expzSymPyValueRangeAnalysis.exp}  s    ))!->??r-   c                    t         j                  |       } | j                  dk  rt         j                         S t         j	                  | t
              S r#  )r$   rt   rH   rp   r   r   r   s    r.   logzSymPyValueRangeAnalysis.log  s@    Q77a<&&(())!->??r-   c                    t         j                  |       } | j                  dk  rt         j                         S t         j	                  | t
              S r#  )r$   rt   rH   rp   r   r   r   s    r.   log2zSymPyValueRangeAnalysis.log2  s@    Q77a<&&(())!-?@@r-   c                D    | j                  ||t        j                        S rL   )
min_or_maxr4   r   r  s      r.   minimumzSymPyValueRangeAnalysis.minimum      ~~aEII..r-   c                D    | j                  ||t        j                        S rL   )rT  r4   r   r  s      r.   maximumzSymPyValueRangeAnalysis.maximum  rV  r-   c                    t         j                  |       } t         j                  |      }t         j                  | ||      S rL   )r$   rt   r   )r   r   r   s      r.   rT  z"SymPyValueRangeAnalysis.min_or_max  s7    QQ88ArBBr-   c                    t         j                  |t        j                  j                  j
                  j                        S rL   )r$   r   r4   	functions
elementaryintegersfloorr   rv   r   s      r.   floor_to_intz$SymPyValueRangeAnalysis.floor_to_int  s+    ))!U__-G-G-P-P-V-VWWr-   c                    t         j                  |t        j                  j                  j
                  j                        S rL   )r$   r   r4   r[  r\  r]  ceilingr_  s      r.   ceil_to_intz#SymPyValueRangeAnalysis.ceil_to_int  s0    ))u))22::
 	
r-   c                    t         j                  |t        t        j                  j
                  j                  j                              S rL   )r$   r   r   r4   r[  r\  r]  r^  r   rv   s     r.   r^  zSymPyValueRangeAnalysis.floor  s5    )){5??55>>DDE
 	
r-   c                    t         j                  |t        t        j                  j
                  j                  j                              S rL   )r$   r   r   r4   r[  r\  r]  rb  re  s     r.   ceilzSymPyValueRangeAnalysis.ceil  s5    )){5??55>>FFG
 	
r-   c                    j                         st        j                         S j                  fd}t        j	                  ||      S )Nc                    t        |       S rL   )r   )numberndigitss    r.   r4  z7SymPyValueRangeAnalysis.round_decimal.<locals>.<lambda>  s    L9 r-   )r   r$   rp   rH   r   )r   rj  rk  r   s     ` r.   round_decimalz%SymPyValueRangeAnalysis.round_decimal  sA    ##%&&((-- :))&"55r-   c                6    t         j                  |t              S rL   )r$   r   r   )r   rj  r   s      r.   round_to_intz$SymPyValueRangeAnalysis.round_to_int  s     ))&*==r-   c                    t         j                  |       } | j                  dk  rt         j                         S t         j	                  | t
              S r#  )r$   rt   rH   rp   r   r   r   s    r.   sqrtzSymPyValueRangeAnalysis.sqrt  s@    Q77Q;&&(())!-?@@r-   c                v   t         j                  |      }t         j                  |      }| j                         } |j                  |j                  k7  r#t         j	                         ||fvrt        d      |j                  r\t        t        j                  |j                  |j                        t        j                  |j                  |j                              S t        t        j                  |j                  |j                        t        j                  |j                  |j                              S )NzIwhere() requires b and c to have the same boolean-ness or allow unknown())r$   rt   rr   rN   rp   r@   r4   r   rH   r   rI   r   r   )r   r   r9  s      r.   wherezSymPyValueRangeAnalysis.where  s    QQIIK 99		!k&9&9&;Aq6&I [  99uyy!'':EHHQWWagg<VWWuyy!'':EIIaggqww<WXXr-   c                *    |j                         }| |fS rL   )rr   r   s     r.   expr_cond_pairz&SymPyValueRangeAnalysis.expr_cond_pair  s    IIK1vr-   c                 X    d }| D ]"  \  }}t         j                  |v s||}||z  }$ |S rL   r  )ranges
init_range
expr_range
cond_ranges       r.   	piecewisez!SymPyValueRangeAnalysis.piecewise  sD    
&, 	9"J
zzZ'%!+J!+j!8J	9 r-   c                    t        dd      S Ng      rJ  r$   r   s    r.   coszSymPyValueRangeAnalysis.cos  s    
 4%%r-   c                6    t        dt        j                        S )Nr   r   r   s    r.   coshzSymPyValueRangeAnalysis.cosh  s    3))r-   c                    t        dd      S r|  r}  r   s    r.   sinzSymPyValueRangeAnalysis.sin  s     4%%r-   c                T    t        t        j                   t        j                        S rL   r   r   s    r.   sinhzSymPyValueRangeAnalysis.sinh  r   r-   c                T    t        t        j                   t        j                        S rL   r   r   s    r.   tanzSymPyValueRangeAnalysis.tan$      EHH9ehh//r-   c                T    t        t        j                   t        j                        S rL   r   r   s    r.   tanhzSymPyValueRangeAnalysis.tanh(  r   r-   c                T    t        t        j                   t        j                        S rL   r   r   s    r.   asinzSymPyValueRangeAnalysis.asin-  r  r-   c                T    t        t        j                   t        j                        S rL   r   r   s    r.   acoszSymPyValueRangeAnalysis.acos7  r  r-   c                T    t        t        j                   t        j                        S rL   r   r   s    r.   atanzSymPyValueRangeAnalysis.atanA  r  r-   c                6    t         j                  | t              S rL   )r$   r   r   r   s    r.   trunczSymPyValueRangeAnalysis.truncF  s     ))!\::r-   rL   )>r)   r*   r+   __doc__r   r   r   r   r   r   r   r   r   r   r   r	  r  r  r  r  r  r  r  r  r!  r$  r&  r*  r5  r7  r:  r=  rE  rG  rK  r-  rN  rP  rR  rU  rX  rT  r`  rc  r^  rg  rl  rn  rp  rr  rt  rz  r~  r  r  r  r  r  r  r  r  r  r,   r-   r.   r   r     s   
 * *X % % 9 9 8 8 I I J J C C 9 9* 9 9. #, #,J 4 4 & & # # 8 8    & & & & 
 

 T T,     9 92 &. &.P ) )  . . ) )  B * *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 ; ;r-   r   c                
    t         j                  d t         fd             t         t        j
                        rt        j                         S xs i t        j                  j                  j                         }|ri|j                  r]|j                  j                  rGr%i |j                  j                  j                  n |j                  j                  j                  d }t        t          |      S )Nzbound_sympy(%s)%sc                 b    r+ddj                   fdj                         D              z   S dS )N
c              3  R   K   | ]  \  }}|j                   v sd | d|    yw)z  r1   N)free_symbols)r   kr   exprs      r.   r   z0bound_sympy.<locals>.<lambda>.<locals>.<genexpr>U  s3      &*aTEVEV@Vb2aSMs   '' )joinitems)r  rv  s   r.   r4  zbound_sympy.<locals>.<lambda>S  s@    
 	 )) .4lln    r-   c                    | j                   rR| j                  rt        dt              }|S | j                  rt        dt              }|S t        j                         }|S t        j                         }|S r   )r   is_positiver$   r!   is_nonnegativery   rp   )srP   s     r.   missing_handlerz$bound_sympy.<locals>.missing_handlerj  sm    <<}} F+ 	 !! F+ 		 !,,. 	 $$&B	r-   )r  )rP  debugr   r2   r4   r   r$   rt   r   _guardsTracingContexttry_get	fake_mode	shape_envvar_to_ranger    r   )r  rv  contextr  s   ``  r.   r%   r%   L  s     II		
 $%%%\rF mm**224G7$$):):)D)DK))33@@KFKF&&00==F  r-   )rP   ValueRanges[_T]r   z$TypeGuard[ValueRanges[SympyBoolean]])rP   r  r   z"TypeGuard[ValueRanges[sympy.Expr]])r   zTypeIs[sympy.Integer]rL   )r  z
sympy.Exprrv  z&dict[sympy.Symbol, ValueRanges] | Noner   r$   )P
__future__r   dataclassesr   r   loggingr:   r  collections.abcr   typingr   r   r   r   r	   r
   typing_extensionsr   r4   sympy.logic.boolalgr   rF   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)   rP  __all__r>   r&   RuntimeErrorr(   rD   rJ   rQ   rS   rV   r7   r9   r   r3   r   r   r   r   r   r   r   r   	dataclassr$   r   r%   r,   r-   r.   <module>r     s   "       $ V V $  D  % -    " ! = = g!-
(T5::|,	l 	F6) , 
uuzz	!			5::,

*	+
EJJ

+UZZ7
8	<.,.	/
L,/=
>	7	 d#p9'"+ p9 $p9f	\
; \
;@ HL-
-D--r-   