
    Vh                       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	m
Z
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>ee?e@ejn                  f   ZAeeBef   ZCeeAeCf   ZDe	ejn                  gejn                  f   ZEe	ejn                  ejn                  gejn                  f   ZFe	egef   ZGe	eegef   ZHeeEeGf   ZIeeFeHf   ZJ ej                  d       G d de
e8                ZL G d d      ZM	 d	 	 	 	 	 ddZNy)    )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                      e Zd Zy)ValueRangeErrorN)__name__
__module____qualname__     O/home/dcms/DCMS/lib/python3.12/site-packages/torch/utils/_sympy/value_ranges.pyr)   r)   9   s    r.   r)   c                P   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                        r*| j                  sJ |        | t        j                  k7  sJ | S t        | t              r| S t!        dt#        |        d|        )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    r/   simple_sympifyrD   ?   s    !Tuzz/EKK/	As	}}Q	Au	::a= 1u5883588)3{{1~	Auzz	"{{A{
 EII~~	A{	#5d1gYbDEEr.   c                    t        | t        j                        r!t        |t        j                        sJ || k\  S t        | t              rt        |t              s	J | |f       | xr |  S N)r2   r4   r>   SympyBooleanloweruppers     r/   sympy_generic_lerK   X   sp    %$%,,, ~ %.:e\3R 	
U
 	
R '%i((r.   c                    | j                   S rF   is_boolvrs    r/   
vr_is_boolrQ   g   s    ::r.   c                    | j                    S rF   rM   rO   s    r/   
vr_is_exprrS   k   s    zz>r.   T)frozenc                  `   e Zd ZU ereej                     Zee   Z	e
ee	f   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j2                  d3d              Zeej2                  d3d              Zeej2                  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'   rI   rJ   r3   rN   is_intis_floatc                <    d| j                    d| j                   dS )NzVR[z, ]rH   selfs    r/   __repr__zValueRanges.__repr__   s    TZZL4::,a00r.   c                     y rF   r-   r[   rI   rJ   s      r/   __init__zValueRanges.__init__        	r.   c                     y rF   r-   r^   s      r/   r_   zValueRanges.__init__   r`   r.   c                   t        |      }t        |      }	 t        ||      st        d| d| d      	 t	        |t
              }t	        |t
              }||k(  s	J ||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	J ||f       y y y # t        $ r}t        d| d|       |d }~ww xY w)NzInvalid ranges [:rY   zCould not compare z <= rI   rJ   rN   rV   rW   )rD   rK   r)   	TypeErrorr2   rG   r4   r8   r<   r"   r$   r#   object__setattr__rN   rV   rW   )	r[   rI   rJ   rC   is_bool_loweris_bool_upperinteger_typesis_int_loweris_int_uppers	            r/   r_   zValueRanges.__init__   s   u%u%	L#E51%(8qq&IJJ 2
 #5,7"5,7-=u~=- eU]]+0AEeU]]+%((0BGE(;[I!%7!%7 	4%04%0 	4M:>>,	

	 	4-=-Qdkk/R||t{{dmmKeU^K;m{|a  	L0tE7CD!K	Ls   G 	G1G,,G1c                    t        |       r| S | t        j                         k(  rt        j                         S t	        d|        )Nznot bool like )rQ   r%   unknownunknown_boolrA   rZ   s    r/   boolifyzValueRanges.boolify   sA    dK[((**++-- >$!899r.   c                J    t         j                  |      j                  |       S rF   )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_intrK   rI   rJ   r[   others     r/   rr   zValueRanges.issubset   sG    D$$&&TZZ8 
=MJJ>
 	
r.   c                    | |z  S )z1Given two ValueRanges, returns their intersectionr-   rw   s     r/   tightenzValueRanges.tighten   s    e|r.   c                     y rF   r-   rw   s     r/   __and__zValueRanges.__and__       
 	r.   c                     y rF   r-   rw   s     r/   r|   zValueRanges.__and__   r}   r.   c                   |t         j                         t         j                         fv r| S | t         j                         t         j                         fv r|S | j                  |j                  k(  s	J | |f       | j                  |j                  k(  s	J | |f       | j
                  |j
                  k(  s	J | |f       | j                  r\t        t        j                  | j                  |j                        t        j                  | j                  |j                              S t        t        j                  | j                  |j                        t        j                  | j                  |j                              S rF   )r%   rm   rv   rN   rV   rW   r4   OrrI   AndrJ   MaxMinrw   s     r/   r|   zValueRanges.__and__   s    [((*K,C,C,EFFKK'');+B+B+DEEL||u}},;tUm;,{{ell*9T5M9*}}.=u=.<<U[[1599TZZ3U  		$**ekk2EIIdjj%++4V r.   c                     y rF   r-   rw   s     r/   __or__zValueRanges.__or__  r}   r.   c                     y rF   r-   rw   s     r/   r   zValueRanges.__or__  r}   r.   c                   t         j                         | |fv rt         j                         S | j                  |j                  k(  s	J | |f       | j                  |j                  k(  s	J | |f       | j                  |j                  k(  s	J | |f       | j                  r\t        t        j                  | j                  |j                        t        j                  | j                  |j                              S t        t        j                  | j                  |j                        t        j                  | j                  |j                              S rF   )r%   rm   rN   rV   rW   r4   r   rI   r   rJ   r   r   rw   s     r/   r   zValueRanges.__or__  s     T5M1&&((||u}},;tUm;,{{ell*9T5M9*}}.=u=.<<		$**ekk2EHHTZZ4U  		$**ekk2EIIdjj%++4V r.   c                4    | j                   | j                  k(  S rF   rH   rZ   s    r/   is_singletonzValueRanges.is_singleton,  s    zzTZZ''r.   c                 T    t        t        j                   t        j                        S rF   r%   r4   r<   r-   r.   r/   rm   zValueRanges.unknown/       EHH9ehh//r.   c                 ,    t        t         t              S rF   )r%   r"   r-   r.   r/   rv   zValueRanges.unknown_int4  s     F7F++r.   c                 R    t        t        j                  t        j                        S rF   )r%   r4   r6   r5   r-   r.   r/   rn   zValueRanges.unknown_bool9  s     5;;

33r.   c                     y rF   r-   args    r/   rq   zValueRanges.wrap>  s     	r.   c                     y rF   r-   r   s    r/   rq   zValueRanges.wrapD       	r.   c                    t        | t              r| S t        | t              r)t        j                  |       rt        j                         S t        | |       S rF   )r2   r%   r9   r:   isnanrm   r   s    r/   rq   zValueRanges.wrapI  sA    c;'Jc5!djjo&&((3$$r.   c                    t         j                  |       } t         || j                         || j                              S )z#Increasing: x <= y => f(x) <= f(y).r%   rq   rI   rJ   rs   fns     r/   increasing_mapzValueRanges.increasing_mapR  s1     Q2agg;17744r.   c                     y rF   r-   r   s     r/   decreasing_mapzValueRanges.decreasing_mapX  r   r.   c                     y rF   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%   rq   rJ   rI   r   s     r/   r   zValueRanges.decreasing_mapb  s1     Q2agg;17744r.   c                    t         j                  |       }  || j                        } || j                        }t        t	        ||      t        ||            S )zIt's increasing or decreasing.)r%   rq   rI   rJ   minmax)rs   r   lus       r/   monotone_mapzValueRanges.monotone_mapi  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%   rq   r   rI   rJ   rD   r2   r4   r=   r<   r   )rs   r   rJ   s      r/   convex_min_zero_mapzValueRanges.convex_min_zero_mapq  s     Q6177R[1E"5)E%-%((1B"3..q%((''2..r.   c                     y rF   r-   rs   yr   s      r/   coordinatewise_increasing_mapz)ValueRanges.coordinatewise_increasing_map}       	r.   c                     y rF   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.)rq   	itertoolsproductrI   rJ   r%   r   r   )clsrs   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]rI   ExprInrJ   r   r   None)r[   ValueRanges[SympyBoolean]rI   BoolInrJ   r   r   r   )rI   AllInrJ   r   r   r   )r   r   )rs   r   r   r3   )r   r%   )r[   r   rx   r   r   r   )r[   r   rx   r   r   r   )r[   AllVRrx   r   r   r   )r   r3   )r   r   )r   Union[ExprIn, ExprVR]r   ExprVR)r   Union[BoolIn, BoolVR]r   BoolVR)r   Union[AllIn, AllVR]r   r   )rs   r   r   ExprFnr   r   )rs   r   r   BoolFnr   r   )rs   r   r   AllFnr   r   )rs   r   r   r   r   ExprFn2r   r   )rs   r   r   r   r   BoolFn2r   r   )rs   r   r   r   r   AllFn2r   r   )%r*   r+   r,   r	   r%   r4   r>   r   rG   r   r   r   __annotations__r\   r   r_   ro   rt   rr   rz   r|   r   r   staticmethod	functoolscacherm   rv   rn   rq   r   r   r   r   r   classmethodr   r-   r.   r/   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 9r.   c                  r   e Zd ZdZed        Zed9d       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;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                   t        | t              r| j                         sJ | j                  } t        | t        t
        t        f      }|s1t        | t        t        j                  t        j                  f      sJ t        | t              rpt        j                  |       r[|t        j                  k(  rt        j                         S |j                   rt        j#                         S t        j%                         S |rt'        |      } ||       } nY|t        j                  k(  rt        | t              s6J |j                   r| j(                  r| j*                  sJ | j,                  sJ t        j/                  |       }|S rF   )r2   r%   r   rI   r7   r9   r3   r   r4   r8   Numberr   r:   r   torchrn   is_floating_pointrm   rv   r   	is_finiteis_real
is_integerrq   )valuedtype	is_pythontype_rs        r/   constantz SymPyValueRangeAnalysis.constant  s1   e[)%%'''KKEusE4&89	JK=
 	
 
 e]+

50A

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

"!%555(( ??emm;; ''''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 rF   )
r   float64r%   r   r   r3   rn   r   rv   rm   )r   r   	src_dtypes      r/   to_dtypez SymPyValueRangeAnalysis.to_dtype  sc    EMM!--a99ejj ++--((**,,""$$r.   c                6    t         j                  | t              S rF   )r%   r   r    )r   r   s     r/   trunc_to_intz$SymPyValueRangeAnalysis.trunc_to_int  s    ))!Z88r.   c                    t         j                  |       } | j                         } | j                  sJ t         j	                  | t
        j                        S rF   )r%   rq   ro   rN   r   r4   Not)r   s    r/   not_zSymPyValueRangeAnalysis.not_  s@    QIIKyyy))!UYY77r.   c                L    t         j                  | |t        j                        S rF   )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 rF   )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%   rq   r4   r8   rI   rs   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%   rq   rN   r   r   r   rI   r4   r<   r"   r7   
bit_length	Exceptionr   rJ   )r   r   r   rI   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%   rq   rN   r   r   r   rJ   r4   r<   r"   r7   r   r   r   rI   )r   r   r   rJ   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                         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 rF   )r%   rq   r   rI   r4   r5   rJ   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 rF   )r   r   r   r   r   s      r/   nezSymPyValueRangeAnalysis.ne5      xxq!%%r.   c                ,    t         j                  |      S rF   )r%   rq   )r   r   s     r/   identityz SymPyValueRangeAnalysis.identity9  s    ""r.   c                &   t         j                  |      }t         j                  |      }|j                  |j                  k(  sJ |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 rF   )
r%   rq   rN   r   r   rJ   rI   r4   r5   r6   r   s      r/   ltzSymPyValueRangeAnalysis.lt=  s    QQyyAII%%%9988CHHQK++ww "''

33AGG#"''44u{{EJJ77r.   c                &    | j                  ||      S rF   )r  r   s      r/   gtzSymPyValueRangeAnalysis.gtK  s    vva|r.   c                D    | j                  | j                  ||            S rF   )r   r  r   s      r/   lezSymPyValueRangeAnalysis.leO  r   r.   c                D    | j                  | j                  ||            S rF   )r   r  r   s      r/   gezSymPyValueRangeAnalysis.geS  r   r.   c                ^    t         j                  | |t        t        j                              S rF   )r%   r   r   operatoraddr   s     r/   r
  zSymPyValueRangeAnalysis.addW  s%    88q+hll+
 	
r.   c                   t         j                  |      }t         j                  |      }|j                  |j                  k(  sJ |j                  r| j                  ||      S d }t         j	                  ||t        |            S )Nc                <    | 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_mulf  s/    Cx16cQ!V1ur.   )r%   rq   rN   r   r   r   )r   r   r   r  s       r/   mulzSymPyValueRangeAnalysis.mul]  sp    QQyyAII%%%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%   rq   r"   rm   r   r   r   r   s     r/   int_truedivz#SymPyValueRangeAnalysis.int_truedivq  st    QQ6w!|v{&AST&&((::1k*- 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%   rq   r4   r<   rm   r   r   r   r   s     r/   truedivzSymPyValueRangeAnalysis.truediv|  s    QQ6hhY!^uxx1}EHH9>UXXQR]&&((::1k,/ r.   c                <   t         j                  |       } t         j                  |      }d|v r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%   rq   rv   r   r   rI   rJ   r   r4   r@   appendsignr"   r   r   )r   r   r   rs   r   r   s         r/   floordivz SymPyValueRangeAnalysis.floordiv  s    QQ6**,,%%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 rF   )r   r"   r4   r8   )r   r   rs   s      r/   c_divz*SymPyValueRangeAnalysis.mod.<locals>.c_div  s4    AA'({{q&@Q7Q5==#XWXXr.   r   c                     |       S rF   r-   )r   r  y_vals    r/   <lambda>z-SymPyValueRangeAnalysis.mod.<locals>.<lambda>  s    uQ r.   r   )
r%   rq   rv   r   r  rI   rJ   r   r   r   )r   rs   r   r  rI   rJ   r  r   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                F    | j                  | j                  ||      |      S rF   )r"  r  )r   r   r   cs       r/   modular_indexingz(SymPyValueRangeAnalysis.modular_indexing  s    wws||Aq)1--r.   c                *    t         j                         S rF   )r%   rv   )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 rF   r   rI   rs   r   s    r/   r!  z8SymPyValueRangeAnalysis.pow_by_natural.<locals>.<lambda>  s    !QWW!5 r.   c                0    t        | j                        S rF   r,  r-  s    r/   r!  z8SymPyValueRangeAnalysis.pow_by_natural.<locals>.<lambda>  s    x177?S r.   )r%   rq   r   r   rI   r   r"   r   r   r   r   rJ   )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 rF   )r%   rm   r   s      r/   powzSymPyValueRangeAnalysis.pow  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/   r!  z4SymPyValueRangeAnalysis.reciprocal.<locals>.<lambda>  s    <Q;O r.   )r%   rq   rm   r   r   s    r/   
reciprocalz"SymPyValueRangeAnalysis.reciprocal  s>     Q6&&((--a1OPPr.   c                6    t         j                  | t              S rF   )r%   r   r  r   s    r/   r  zSymPyValueRangeAnalysis.abs!  s    ..q#66r.   c                6    t         j                  | t              S rF   )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%   rq   rI   rm   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%   rq   rI   rm   r   r   r   s    r/   log2zSymPyValueRangeAnalysis.log20  s@    Q77a<&&(())!-?@@r.   c                D    | j                  ||t        j                        S rF   )
min_or_maxr4   r   r   s      r/   minimumzSymPyValueRangeAnalysis.minimum7      ~~aEII..r.   c                D    | j                  ||t        j                        S rF   )r?  r4   r   r   s      r/   maximumzSymPyValueRangeAnalysis.maximum;  rA  r.   c                    t         j                  |       } t         j                  |      }t         j                  | ||      S rF   )r%   rq   r   )r   r   r   s      r/   r?  z"SymPyValueRangeAnalysis.min_or_max?  s7    QQ88ArBBr.   c                    t         j                  |t        j                  j                  j
                  j                        S rF   )r%   r   r4   	functions
elementaryintegersfloorr   rs   r   s      r/   floor_to_intz$SymPyValueRangeAnalysis.floor_to_intE  s+    ))!U__-G-G-P-P-V-VWWr.   c                    t         j                  |t        j                  j                  j
                  j                        S rF   )r%   r   r4   rF  rG  rH  ceilingrJ  s      r/   ceil_to_intz#SymPyValueRangeAnalysis.ceil_to_intI  s0    ))u))22::
 	
r.   c                    t         j                  |t        t        j                  j
                  j                  j                              S rF   )r%   r   r   r4   rF  rG  rH  rI  r   rs   s     r/   rI  zSymPyValueRangeAnalysis.floora  s5    )){5??55>>DDE
 	
r.   c                    t         j                  |t        t        j                  j
                  j                  j                              S rF   )r%   r   r   r4   rF  rG  rH  rM  rP  s     r/   ceilzSymPyValueRangeAnalysis.ceilg  s5    )){5??55>>FFG
 	
r.   c                    j                         st        j                         S j                  fd}t        j	                  ||      S )Nc                    t        |       S rF   )r   )numberndigitss    r/   r!  z7SymPyValueRangeAnalysis.round_decimal.<locals>.<lambda>u  s    L9 r.   )r   r%   rm   rI   r   )r   rU  rV  r   s     ` r/   round_decimalz%SymPyValueRangeAnalysis.round_decimalm  sA    ##%&&((-- :))&"55r.   c                6    t         j                  |t              S rF   )r%   r   r   )r   rU  r   s      r/   round_to_intz$SymPyValueRangeAnalysis.round_to_inty  s    ))&*==r.   c                    t         j                  |       } | j                  dk  rt         j                         S t         j	                  | t
              S r  )r%   rq   rI   rm   r   r   r   s    r/   sqrtzSymPyValueRangeAnalysis.sqrt~  s@    Q77Q;&&(())!-?@@r.   c                d   t         j                  |      }t         j                  |      }| j                         } |j                  |j                  k(  st         j	                         ||fv sJ |j                  r\t        t        j                  |j                  |j                        t        j                  |j                  |j                              S t        t        j                  |j                  |j                        t        j                  |j                  |j                              S rF   )r%   rq   ro   rN   rm   r4   r   rI   r   rJ   r   r   )r   r   r$  s      r/   wherezSymPyValueRangeAnalysis.where  s    QQIIK yyAII%)<)<)>1a&)HHH99uyy!'':EHHQWWagg<VWWuyy!'':EIIaggqww<WXXr.   c                *    |j                         }| |fS rF   )ro   r   s     r/   expr_cond_pairz&SymPyValueRangeAnalysis.expr_cond_pair  s    IIK1vr.   c                 X    d }| D ]"  \  }}t         j                  |v s||}||z  }$ |S rF   )r4   r5   )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      r5  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 rg  rh  r   s    r/   sinzSymPyValueRangeAnalysis.sin  s     4%%r.   c                T    t        t        j                   t        j                        S rF   r   r   s    r/   sinhzSymPyValueRangeAnalysis.sinh  r   r.   c                T    t        t        j                   t        j                        S rF   r   r   s    r/   tanzSymPyValueRangeAnalysis.tan      EHH9ehh//r.   c                T    t        t        j                   t        j                        S rF   r   r   s    r/   tanhzSymPyValueRangeAnalysis.tanh  r   r.   c                T    t        t        j                   t        j                        S rF   r   r   s    r/   asinzSymPyValueRangeAnalysis.asin  rr  r.   c                T    t        t        j                   t        j                        S rF   r   r   s    r/   acoszSymPyValueRangeAnalysis.acos  rr  r.   c                T    t        t        j                   t        j                        S rF   r   r   s    r/   atanzSymPyValueRangeAnalysis.atan  rr  r.   c                6    t         j                  | t              S rF   )r%   r   r   r   s    r/   trunczSymPyValueRangeAnalysis.trunc  s    ))!\::r.   rF   )<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"  r%  r(  r0  r2  r6  r  r9  r;  r=  r@  rC  r?  rK  rN  rI  rR  rW  rY  r[  r]  r_  re  ri  rk  rm  ro  rq  rt  rv  rx  rz  r|  r-   r.   r/   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 ; ;r.   r   c                    t         j                  d t         fd             t         t        j
                        rt        j                         S xs i t        j                  j                  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).0kr   exprs      r/   	<genexpr>z0bound_sympy.<locals>.<lambda>.<locals>.<genexpr>  s3      &*aTEVEV@Vb2aSMs   '' )joinitems)r  ra  s   r/   r!  zbound_sympy.<locals>.<lambda>  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_nonnegativerv   rm   )srP   s     r/   missing_handlerz$bound_sympy.<locals>.missing_handler  sm    <<}} F+ 	 !! F+ 		 !,,. 	 $$&B	r.   )r  )r;  debugr   r2   r4   r   r%   rq   r   _guardsTracingContexttry_get	fake_mode	shape_envvar_to_ranger!   r   )r  ra  contextr  s   ``  r/   r&   r&     s     II		
 $%%%\rF mm**224G7$$..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]]rF   )r  z
sympy.Exprra  z)Optional[dict[sympy.Symbol, ValueRanges]]r   r%   )O
__future__r   dataclassesr   r   loggingr:   r	  typingr   r   r   r   r   r	   r
   r   typing_extensionsr   r4   sympy.logic.boolalgr   rG   r   r   torch._loggingr   torch._prims_commonr   rF  r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    interpr!   numbersr"   r#   r$   	getLoggerr*   r;  __all__r>   r'   RuntimeErrorr)   rD   rK   rQ   rS   r7   r9   r   r3   r   r   r   r   r   r   r   r   	dataclassr%   r   r&   r-   r.   r/   <module>r     s   "      	 	 	 (  D  % -    " ! = = g!-
(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--r.   