o
    0h                     @  s&  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3e4Z5ddgZ6edej7eZ8G dd de9Z:dd Z;dd Z<d(ddZ=d)ddZ>ee?e@ej7f ZAeeBef ZCeeAeCf ZDe	ej7gej7f ZEe	ej7ej7gej7f ZFe	egef ZGe	eegef ZHeeEeGf ZIeeFeHf ZJejKddG d d de
e8 ZLG d!d" d"ZM	d*d+d'dZNdS ),    )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                   @  s   e Zd ZdS )ValueRangeErrorN)__name__
__module____qualname__ r+   r+   S/var/www/vscode/kcb/lib/python3.10/site-packages/torch/utils/_sympy/value_ranges.pyr'   9   s    r'   c                 C  s   t | tr| r
tjS tjS t | trt| S t | tr1t	| r,| dkr(tj
S tj
 S t| S t | tjrG| js>J | | tjksEJ | S t | trN| 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)er+   r+   r,   simple_sympify?   s   






r@   c                 C  sP   t | tjrt |tjsJ || kS t | trt |ts"J | |f| o&|  S N)r.   r0   r:   SympyBooleanlowerupperr+   r+   r,   sympy_generic_leX   s   rF   vrValueRanges[_T]return$TypeGuard[ValueRanges[SympyBoolean]]c                 C  s   | j S rA   is_boolrG   r+   r+   r,   
vr_is_boolg   s   rN   "TypeGuard[ValueRanges[sympy.Expr]]c                 C  s   | j  S rA   rK   rM   r+   r+   r,   
vr_is_exprk   s   rP   T)frozenc                   @  s  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< dUd
dZedVddZedWddZdXddZdYddZdZddZdd Zd[ddZed\d!d"Zed]d#d"Zd^d%d"Zed\d&d'Zed]d(d'Zd^d)d'Zd_d*d+Zeejd`d,d-Zeejd`d.d/ZeejdYd0d1Zeedad5d6Zeedbd9d6Zedcd;d6Zeddd>d?Zeeddd@dAZeededCdAZedfdEdAZedddFdGZ edddHdIZ!eedgdLdMZ"eedhdOdMZ"edidQdMZ"e#dRdS Z$dTS )jr$   r&   rD   rE   r/   rL   is_intis_floatrI   strc                 C  s   d| j  d| j dS )NzVR[z, ]rC   selfr+   r+   r,   __repr__   s   zValueRanges.__repr__rW   ValueRanges[sympy.Expr]ExprInNonec                 C     d S rA   r+   rW   rD   rE   r+   r+   r,   __init__      zValueRanges.__init__ValueRanges[SympyBoolean]BoolInc                 C  r\   rA   r+   r]   r+   r+   r,   r^      r_   AllInc           	   
   C  sn  t |}t |}zt||std| d| dW n ty1 } ztd| d| |d }~ww t|t}t|t}||ksFJ ||ft|tjrS|tjkrSt	}t|tjrb|tj krbt	 }tjt
tf}t||}t||}t| d| t| d| t| d| t| d	| j o|o| 	 t| d
| j o| j  | js| js| jsJ ||fd S d S d S )NzInvalid ranges [:rU   zCould not compare z <= rD   rE   rL   rR   rS   )r@   rF   r'   	TypeErrorr.   rB   r0   r4   r8   r!   r#   r"   object__setattr__rL   rR   rS   )	rW   rD   rE   r?   is_bool_loweris_bool_upperinteger_typesis_int_loweris_int_upperr+   r+   r,   r^      s>   




*c                 C  s.   t | r| S | t krt S td|  )Nznot bool like )rN   r$   unknownunknown_boolr=   rV   r+   r+   r,   boolify   s
   zValueRanges.boolifyxc                 C  s   t || S rA   )r$   wrapissubset)rW   ro   r+   r+   r,   __contains__   s   zValueRanges.__contains__c                 C  s,   ||   u rdS t|j| jot| j|jS )NT)unknown_intrF   rD   rE   rW   otherr+   r+   r,   rq      s
   zValueRanges.issubsetc                 C  s   | |@ S )z1Given two ValueRanges, returns their intersectionr+   rt   r+   r+   r,   tighten      zValueRanges.tightenru   c                 C  r\   rA   r+   rt   r+   r+   r,   __and__      zValueRanges.__and__c                 C  r\   rA   r+   rt   r+   r+   r,   rx      ry   AllVRc                 C  s   |t  t  fv r| S | t  t  fv r|S | j|jks$J | |f| j|jks0J | |f| j|jks<J | |f| jrPt t| j|jt	| j
|j
S t t| j|jt| j
|j
S rA   )r$   rl   rs   rL   rR   rS   r0   OrrD   AndrE   MaxMinrt   r+   r+   r,   rx      s   c                 C  r\   rA   r+   rt   r+   r+   r,   __or__  ry   zValueRanges.__or__c                 C  r\   rA   r+   rt   r+   r+   r,   r     ry   c                 C  s   t  | |fv rt  S | j|jksJ | |f| j|jks$J | |f| j|jks0J | |f| jrDt t| j|jt| j	|j	S t t
| j|jt| j	|j	S rA   )r$   rl   rL   rR   rS   r0   r|   rD   r{   rE   r~   r}   rt   r+   r+   r,   r     s   c                 C  s   | j | jkS rA   rC   rV   r+   r+   r,   is_singleton,  s   zValueRanges.is_singletonc                   C     t tj tjS rA   r$   r0   r8   r+   r+   r+   r,   rl   /     zValueRanges.unknownc                   C  s   t t tS rA   )r$   r!   r+   r+   r+   r,   rs   4  s   zValueRanges.unknown_intc                   C  s   t tjtjS rA   )r$   r0   r2   r1   r+   r+   r+   r,   rm   9  s   zValueRanges.unknown_boolargUnion[ExprIn, ExprVR]ExprVRc                 C  r\   rA   r+   r   r+   r+   r,   rp   >  s   zValueRanges.wrapUnion[BoolIn, BoolVR]BoolVRc                 C  r\   rA   r+   r   r+   r+   r,   rp   D     Union[AllIn, AllVR]c                 C  s4   t | tr| S t | trt| rt S t| | S rA   )r.   r$   r5   r6   isnanrl   r   r+   r+   r,   rp   I  s
   

fnExprFnc                 C      t | } t || j|| jS )z#Increasing: x <= y => f(x) <= f(y).r$   rp   rD   rE   ro   r   r+   r+   r,   increasing_mapR  s   
zValueRanges.increasing_mapc                 C  r\   rA   r+   r   r+   r+   r,   decreasing_mapX  r   zValueRanges.decreasing_mapBoolFnc                 C  r\   rA   r+   r   r+   r+   r,   r   ]  r   AllFnc                 C  r   )z#Decreasing: x <= y => f(x) >= f(y).)r$   rp   rE   rD   r   r+   r+   r,   r   b  s   
c                 C  s4   t | } || j}|| j}t t||t||S )zIt's increasing or decreasing.)r$   rp   rD   rE   minmax)ro   r   lur+   r+   r,   monotone_mapi  s   


zValueRanges.monotone_mapc                 C  sf   t | } d| v r-t|| j|| j}t|}t|tjs#|tj	kr(t d|S t d|S t 
| |S )z$Fn is convex and has a minimum at 0.r           )r$   rp   r   rD   rE   r@   r.   r0   r9   r8   r   )ro   r   rE   r+   r+   r,   convex_min_zero_mapq  s   


zValueRanges.convex_min_zero_mapyExprFn2c                 C  r\   rA   r+   ro   r   r   r+   r+   r,   coordinatewise_increasing_map}     z)ValueRanges.coordinatewise_increasing_mapBoolFn2c                 C  r\   rA   r+   r   r+   r+   r,   r     r   AllFn2c                 C  s4   t | t |} }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   r+   r+   r,   r     s
   c                   sR   |  ||  |}} fddt|j|jg|j|jgD }tt|t|S )z1It's increasing or decreasing on each coordinate.c                   s   g | ]	\}} ||qS r+   r+   ).0abr   r+   r,   
<listcomp>  s    z;ValueRanges.coordinatewise_monotone_map.<locals>.<listcomp>)rp   	itertoolsproductrD   rE   r$   r   r   )clsro   r   r   productsr+   r   r,   coordinatewise_monotone_map  s
   
z'ValueRanges.coordinatewise_monotone_mapN)rI   rT   )rW   rY   rD   rZ   rE   rZ   rI   r[   )rW   r`   rD   ra   rE   ra   rI   r[   )rD   rb   rE   rb   rI   r[   )rI   r`   )ro   rb   rI   r/   )rI   r$   )rW   rY   ru   rY   rI   rY   )rW   r`   ru   r`   rI   r`   )rW   rz   ru   rz   rI   rz   )rI   r/   )rI   rY   )r   r   rI   r   )r   r   rI   r   )r   r   rI   rz   )ro   r   r   r   rI   r   )ro   r   r   r   rI   r   )ro   r   r   r   rI   rz   )ro   r   r   r   r   r   rI   r   )ro   r   r   r   r   r   rI   r   )ro   r   r   r   r   r   rI   rz   )%r(   r)   r*   r   r$   r0   r:   r   rB   r   r
   rz   __annotations__rX   r   r^   rn   rr   rq   rv   rx   r   r   staticmethod	functoolscacherl   rs   rm   rp   r   r   r   r   r   classmethodr   r+   r+   r+   r,   r$   z   s   
 



:




c                   @  s  e Zd ZdZedd ZedoddZedd Zed	d
 Zedd Z	edd Z
edd Zedd Zedd Zedd Zedd Zedd Zedd Zedd Zedd  Zed!d" Zed#d$ Zed%d& Zed'd( Zed)d* Zed+d, Zed-d. Zed/d0 Zed1d2 Zed3d4 Zed5d6 Zed7d8 Z ed9d: Z!ed;d< Z"ed=d> Z#ed?d@ Z$edAdB Z%edCdD Z&edEdF Z'edGdH Z(edIdJ Z)edKdL Z*edMdN Z+edOdP Z,edQdR Z-edSdT Z.edUdV Z/edWdX Z0edYdZ Z1ed[d\ Z2ed]d^ Z3ed_d` Z4edadb Z5edcdd Z6ededf Z7edgdh Z8edidj Z9edkdl Z:edmdn Z;dS )p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                 C  s   t | tr|  sJ | j} t | tttf}|s$t | ttj	tj
fs$J t | trBt| rB|tjkr7t S |jr>t S t S |rMt|}|| } n|tjkrZt | tsYJ n|jrf| jre| jseJ n| jskJ t| }|S rA   )r.   r$   r   rD   r3   r5   r/   r   r0   r4   Numberr   r6   r   torchrm   is_floating_pointrl   rs   r   	is_finiteis_real
is_integerrp   )valuedtype	is_pythontype_rr+   r+   r,   constant  s0   





z SymPyValueRangeAnalysis.constantNc                 C  s>   |t jkrt| tS |t jkrt S |jst S t	 S rA   )
r   float64r$   r   r   r/   rm   r   rs   rl   )r   r   	src_dtyper+   r+   r,   to_dtype  s   

z SymPyValueRangeAnalysis.to_dtypec                 C     t | tS rA   )r$   r   r   )r   r   r+   r+   r,   trunc_to_int     z$SymPyValueRangeAnalysis.trunc_to_intc                 C  s*   t | } |  } | jsJ t | tjS rA   )r$   rp   rn   rL   r   r0   Not)r   r+   r+   r,   not_  s   

zSymPyValueRangeAnalysis.not_c                 C     t | |tjS rA   )r$   r   r0   r{   r   r   r+   r+   r,   or_     zSymPyValueRangeAnalysis.or_c                 C  r   rA   )r$   r   r0   r|   r   r+   r+   r,   and_  r   zSymPyValueRangeAnalysis.and_c                 C  s<   |   rtt| jrdS dS ttdtdS Nr   r   )r   r$   rp   r0   r4   rD   ro   r+   r+   r,   _bool_to_int  s   z$SymPyValueRangeAnalysis._bool_to_intc                 C  s   t |t |}}|jr|jr| ||S |jr| |}|jr'| |}t|j|j}|dk rX|tj krX|t	 krXzdt
| d  >  }W n tyW   t	 }Y nw d}t |t|j|jS )Nr   r   )r$   rp   rL   r   r   r   rD   r0   r8   r!   r3   
bit_length	Exceptionr   rE   )r   r   r   rD   r+   r+   r,   bitwise_and  s    


z#SymPyValueRangeAnalysis.bitwise_andc                 C  s   t |t |}}|jr|jr| ||S |jr| |}|jr'| |}t|j|j}|dkr5d}n+|dkrZ|tjkrZ|t	krZzdt
| > d }W n tyY   t	}Y nw |dk r`d}t t|j|j|S )Nr   r   )r$   rp   rL   r   r   r   rE   r0   r8   r!   r3   r   r   r   rD   )r   r   r   rE   r+   r+   r,   
bitwise_or  s&   

z"SymPyValueRangeAnalysis.bitwise_orc                 C  sn   t | } t |}|  r| r| j|jkrt tjS | j|jks*|j| jkr0t tjS t tjtjS rA   )r$   rp   r   rD   r0   r1   rE   r2   r   r+   r+   r,   eq+  s   

zSymPyValueRangeAnalysis.eqc                 C     |  | ||S rA   )r   r   r   r   r   r+   r+   r,   ne5     zSymPyValueRangeAnalysis.nec                 C  s
   t |S rA   )r$   rp   )r   r   r+   r+   r,   identity9  s   
z SymPyValueRangeAnalysis.identityc                 C  sz   t |}t |}|j|jksJ |jr| | ||S |j|jk r*t tjS |j|jkr6t tj	S t tj	tjS rA   )
r$   rp   rL   r   r   rE   rD   r0   r1   r2   r   r+   r+   r,   lt=  s   

zSymPyValueRangeAnalysis.ltc                 C  s   |  ||S rA   )r   r   r+   r+   r,   gtK  r   zSymPyValueRangeAnalysis.gtc                 C  r   rA   )r   r   r   r+   r+   r,   leO  r   zSymPyValueRangeAnalysis.lec                 C  r   rA   )r   r   r   r+   r+   r,   geS  r   zSymPyValueRangeAnalysis.gec                 C  s   t | |ttjS rA   )r$   r   r   operatoraddr   r+   r+   r,   r   W     zSymPyValueRangeAnalysis.addc                 C  sP   t |}t |}|j|jksJ |jr| ||S dd }t ||t|S )Nc                 S  s0   | dks| dkr
| S |dks|dkr|S | | S )Nr   r   r+   r   r+   r+   r,   safe_mulf  s
   z-SymPyValueRangeAnalysis.mul.<locals>.safe_mul)r$   rp   rL   r   r   r   )r   r   r   r   r+   r+   r,   mul]  s   

	zSymPyValueRangeAnalysis.mulc                 C  sZ   t | } t |}d|v s t | v st| v r$t |v s t|v r$t  S t | |ttS Nr   )r$   rp   r!   rl   r   r   r   r   r+   r+   r,   int_truedivq  s   

,
z#SymPyValueRangeAnalysis.int_truedivc                 C  sb   t | } t |}d|v s$tj | v stj| v r(tj |v s$tj|v r(t  S t | |ttS r   )r$   rp   r0   r8   rl   r   r   r   r   r+   r+   r,   truediv|  s   

,
zSymPyValueRangeAnalysis.truedivc                 C  s   t | } t |}d|v rt  S g }t| j| jg|j|jgD ]#\}}t||}|tj	u r@|
t|t| t  q"|
| q"t t|t|S r   )r$   rp   rs   r   r   rD   rE   r   r0   r<   appendsignr!   r   r   )r   r   r   ro   r   r   r+   r+   r,   floordiv  s   

$

 z SymPyValueRangeAnalysis.floordivc                   s   t |}t |}dd  dd }d|v rt  S | rit|j||j||jkr:t | fddS |jdk rGt  d dS |jdkrSt dd S t d |j}t	d |j}t ||S | |jd }t | |S )	Nc                 S  s$   t | t | }| dk r|d9 }|S )Nr   r   )abs)r   r   retr+   r+   r,   c_mod  s   z*SymPyValueRangeAnalysis.mod.<locals>.c_modc                 S  s*   | | }|j r|tt fvrt|S |S rA   )r   r!   r0   r4   )r   r   ro   r+   r+   r,   c_div  s   "z*SymPyValueRangeAnalysis.mod.<locals>.c_divr   c                   s
    | S rA   r+   )r   r   y_valr+   r,   <lambda>     
 z-SymPyValueRangeAnalysis.mod.<locals>.<lambda>r   )
r$   rp   rs   r   r   rD   rE   r   r   r   )r   ro   r   r   rD   rE   r+   r   r,   mod  s&   





zSymPyValueRangeAnalysis.modc                 C  s   |  | |||S rA   )r   r   )r   r   r   cr+   r+   r,   modular_indexing     z(SymPyValueRangeAnalysis.modular_indexingc                 G     t  S rA   )r$   rs   )r   argsr+   r+   r,   &is_non_overlapping_and_dense_indicator  rw   z>SymPyValueRangeAnalysis.is_non_overlapping_and_dense_indicatorc                   s   t |}t   | r  rt t|j jS |jdkr-t | t dt@ tS   rL jd dkrBt | fddS t 	| fddS t
|j|j }t t| j t| jS )Nr   r      c                      t |  jS rA   r   rD   r   r   r+   r,   r         z8SymPyValueRangeAnalysis.pow_by_natural.<locals>.<lambda>c                   r   rA   r   r   r   r+   r,   r     r   )r$   rp   r   r   rD   r   r!   r   r   r   r   rE   )r   r   r   max_baser+   r   r,   pow_by_natural  s$   


z&SymPyValueRangeAnalysis.pow_by_naturalc                 C  r   rA   )r$   rl   r   r+   r+   r,   pow  rw   zSymPyValueRangeAnalysis.powc                 C  s*   t | } d| v rt  S t | dd S )zENeeded as it's used in pow, but it won't appear on a SymPy expressionr   c                 S  s
   t d| S )N      ?)r   )r   r+   r+   r,   r     r   z4SymPyValueRangeAnalysis.reciprocal.<locals>.<lambda>)r$   rp   rl   r   r   r+   r+   r,   
reciprocal  s   
z"SymPyValueRangeAnalysis.reciprocalc                 C  r   rA   )r$   r   r   r   r+   r+   r,   r   !  r   zSymPyValueRangeAnalysis.absc                 C  r   rA   )r$   r   r   r   r+   r+   r,   exp%  r   zSymPyValueRangeAnalysis.expc                 C  (   t | } | jdkrt  S t | tS r   )r$   rp   rD   rl   r   r   r   r+   r+   r,   log)     

zSymPyValueRangeAnalysis.logc                 C  r  r   )r$   rp   rD   rl   r   r   r   r+   r+   r,   log20  r  zSymPyValueRangeAnalysis.log2c                 C     |  ||tjS rA   )
min_or_maxr0   r~   r   r+   r+   r,   minimum7  r   zSymPyValueRangeAnalysis.minimumc                 C  r  rA   )r	  r0   r}   r   r+   r+   r,   maximum;  r   zSymPyValueRangeAnalysis.maximumc                 C  s"   t | } t |}t | ||S rA   )r$   rp   r   )r   r   r   r+   r+   r,   r	  ?  s   

z"SymPyValueRangeAnalysis.min_or_maxc                 C     t |tjjjjS rA   )r$   r   r0   	functions
elementaryintegersfloorr   ro   r   r+   r+   r,   floor_to_intE  r   z$SymPyValueRangeAnalysis.floor_to_intc                 C  r  rA   )r$   r   r0   r  r  r  ceilingr  r+   r+   r,   ceil_to_intI  r   z#SymPyValueRangeAnalysis.ceil_to_intc                 C     t |ttjjjjS rA   )r$   r   r   r0   r  r  r  r  r   ro   r+   r+   r,   r  a     zSymPyValueRangeAnalysis.floorc                 C  r  rA   )r$   r   r   r0   r  r  r  r  r  r+   r+   r,   ceilg  r  zSymPyValueRangeAnalysis.ceilc                   s.      st S  j  fdd}t||S )Nc                   s
   t |  S rA   )r   )numberndigitsr+   r,   r   u  r   z7SymPyValueRangeAnalysis.round_decimal.<locals>.<lambda>)r   r$   rl   rD   r   )r   r  r  r   r+   r  r,   round_decimalm  s
   z%SymPyValueRangeAnalysis.round_decimalc                 C  s   t |tS rA   )r$   r   r   )r   r  r   r+   r+   r,   round_to_inty  r   z$SymPyValueRangeAnalysis.round_to_intc                 C  s(   t | } | jdk rt  S t | tS r   )r$   rp   rD   rl   r   r   r   r+   r+   r,   sqrt~  r  zSymPyValueRangeAnalysis.sqrtc                 C  s   t |}t |}|  } |j|jkst  ||fv sJ |jr2t t|j|jt|j	|j	S t t
|j|jt|j	|j	S rA   )r$   rp   rn   rL   rl   r0   r|   rD   r{   rE   r~   r}   )r   r   r   r+   r+   r,   where  s   

 ""zSymPyValueRangeAnalysis.wherec                 C  s   |  }| |fS rA   )rn   r   r+   r+   r,   expr_cond_pair  s   z&SymPyValueRangeAnalysis.expr_cond_pairc                  G  s6   d }| D ]\}}t j|v r|d u r|}q||B }q|S rA   )r0   r1   )ranges
init_range
expr_range
cond_ranger+   r+   r,   	piecewise  s   
z!SymPyValueRangeAnalysis.piecewisec                 C  
   t ddS Ng      r  r$   r   r+   r+   r,   cos  s   
zSymPyValueRangeAnalysis.cosc                 C  s   t dtjS )Nr   r   r   r+   r+   r,   cosh  r   zSymPyValueRangeAnalysis.coshc                 C  r&  r'  r(  r   r+   r+   r,   sin  s   
zSymPyValueRangeAnalysis.sinc                 C  r   rA   r   r   r+   r+   r,   sinh  r   zSymPyValueRangeAnalysis.sinhc                 C  r   rA   r   r   r+   r+   r,   tan  r   zSymPyValueRangeAnalysis.tanc                 C  r   rA   r   r   r+   r+   r,   tanh  r   zSymPyValueRangeAnalysis.tanhc                 C  r   rA   r   r   r+   r+   r,   asin  r   zSymPyValueRangeAnalysis.asinc                 C  r   rA   r   r   r+   r+   r,   acos  r   zSymPyValueRangeAnalysis.acosc                 C  r   rA   r   r   r+   r+   r,   atan  r   zSymPyValueRangeAnalysis.atanc                 C  r   rA   )r$   r   r   r   r+   r+   r,   trunc  r   zSymPyValueRangeAnalysis.truncrA   )<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   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.  r/  r0  r1  r2  r+   r+   r+   r,   r     s    
%	







	












(


 
,
















	








	
	
r   expr
sympy.Exprr!  )Optional[dict[sympy.Symbol, ValueRanges]]c                   s   t d t fdd t tjrt S pi tj	j
 }|r:|jjr:r5i |jjjn|jjjdd }tt |dS )Nzbound_sympy(%s)%sc                     s(   rdd  fdd D  S dS )N
c                 3  s.    | ]\}}| j v rd | d| V  qdS )z  r-   N)free_symbols)r   kr   )r4  r+   r,   	<genexpr>  s    $z0bound_sympy.<locals>.<lambda>.<locals>.<genexpr> )joinitemsr+   r4  r!  r+   r,   r     s   zbound_sympy.<locals>.<lambda>c                 S  sF   | j r| jrtdt}|S | jrtdt}|S t }|S t }|S r   )r   is_positiver$   r!   is_nonnegativers   rl   )srG   r+   r+   r,   missing_handler  s   

z$bound_sympy.<locals>.missing_handler)rB  )r  debugr   r.   r0   r   r$   rp   r   _guardsTracingContexttry_get	fake_mode	shape_envvar_to_ranger    r   )r4  r!  contextrB  r+   r>  r,   r%     s&   

)rG   rH   rI   rJ   )rG   rH   rI   rO   rA   )r4  r5  r!  r6  rI   r$   )O
__future__r   dataclassesr   r   loggingr6   r   typingr   r   r   r   r   r   r	   r
   typing_extensionsr   r0   sympy.logic.boolalgr   rB   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(   r  __all__r:   r&   RuntimeErrorr'   r@   rF   rN   rP   r3   r5   rZ   r/   ra   rb   r   r   r   r   r   r   	dataclassr$   r   r%   r+   r+   r+   r,   <module>   sZ   (
D



  4    G