Ë
    ÌÓ^j{™  ã                  ó  — 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__© ó    új/var/www/ramen.bs-engineer-server.com/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ÔÙŒu�z‰zÐ/¤E§K¡KÐ/Ü	�A”sÔ	Ü�}‰}˜QÓÐÜ	�A”uÔ	ä�:‰:�aŒ=Ø  1šu”5—8‘8Ð3¬5¯8©8¨)Ð3Ü�{‰{˜1‹~ÐÜ	�A”u—z‘zÔ	"Ü�q˜+ uÔ-Ü  Ó#Ð#ð
 ”—	‘	Š>Ü Ð!:Ó;Ð;ØˆÜ	�A”{Ô	#ØˆäÐ5´d¸1³g°Y¸bÀÀÐ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   € Ø�z‰zˆ>Ðr-   c                ó6   — t        | t        j                  «      S rL   )r2   r4   r8   )Úvalues    r.   Úis_sympy_integerrV   j   s   € Ü�eœUŸ]™]Ó+Ð+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   € Ø�T—Z‘Z�L  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Ü# E¨5Ô1Ü%Ð(8¸¸¸qÀÀÀqÐ&IÓJÐJð 2ô
 # 5¬,Ó7ˆÜ" 5¬,Ó7ˆØ˜MÒ)Ü  %¨ Ó0Ð0ô �eœUŸ]™]Ô+°¼¿¹Ò0AÜˆEÜ�eœUŸ]™]Ô+°¼%¿(¹(¸Ò0BÜ�GˆEäŸ™Ô(;¼[ÐIˆÜ! %¨Ó7ˆÜ! %¨Ó7ˆô 	×Ñ˜4 ¨%Ô0Ü×Ñ˜4 ¨%Ô0ô 	×Ñ˜4 ¨MÔ:Ü×ÑØØØ—‘ÐÒ> Ò>°,ô	
ð
	ô 	×Ñ˜4 °·±Ð-=Ò-QÀdÇkÁkÀ/ÔRØ�|Š| D§K¢K¸¿ºÜ  %¨ Ó0Ð0ð 9F Kˆ|øôc ò 	LÜÐ0°°°t¸E¸7Ð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×$Ñ$Ó&Ñ&ØÜ §¡¨T¯Z©ZÓ8ò 
Ô=MØ�J‰J˜Ÿ™ó>
ð 	
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Ÿ=™=Ò(Ü  $¨ Ó/Ð/Ø�;‰;˜%Ÿ,™,Ò&Ü  $¨ Ó/Ð/Ø�=‰=˜EŸN™NÒ*Ü  $¨ Ó/Ð/Ø�<Š<ÜÜ—‘˜Ÿ™ U§[¡[Ó1´5·9±9¸T¿Z¹ZÈÏÉÓ3Uóð ô Ü—	‘	˜$Ÿ*™* e§k¡kÓ2´E·I±I¸d¿j¹jÈ%Ï+É+Ó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ü   € Ü×ÑÓ  T¨5 MÑ1Ü×&Ñ&Ó(Ð(Ø�<‰<˜5Ÿ=™=Ò(Ü  $¨ Ó/Ð/Ø�;‰;˜%Ÿ,™,Ò&Ü  $¨ Ó/Ð/Ø�=‰=˜EŸN™NÒ*Ü  $¨ Ó/Ð/Ø�<Š<ÜÜ—	‘	˜$Ÿ*™* e§k¡kÓ2´E·H±H¸T¿Z¹ZÈÏÉÓ4Uóð ô Ü—	‘	˜$Ÿ*™* e§k¡kÓ2´E·I±I¸d¿j¹jÈ%Ï+É+Ó4Vóð r-   c                ó4   — | j                   | j                  k(  S rL   rG   r]   s    r.   Úis_singletonzValueRanges.is_singleton/  s   € Ø�z‰z˜TŸZ™ZÑ'Ð'r-   c                 óT   — t        t        j                   t        j                  «      S rL   ©r$   r4   r<   r,   r-   r.   rp   zValueRanges.unknown2  ó   € ô œEŸH™H˜9¤e§h¡hÓ/Ð/r-   c                 ó,   — t        t         t        «      S rL   )r$   r!   r,   r-   r.   ry   zValueRanges.unknown_int7  s   € ô œF˜7¤FÓ+Ð+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Ü�cœ5Ô!¤d§j¡j°¤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ÓˆÜ™2˜aŸg™g›;©¨1¯7©7«Ó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Óˆä™2˜aŸg™g›;©¨1¯7©7«Ó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ÓˆÙˆq�w‰w‹KˆÙˆq�w‰w‹KˆÜœ3˜q !›9¤c¨!¨Q£iÓ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Ü™˜1Ÿ7™7›¡R¨¯©£[Ó1ˆEÜ" 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Ñ$4°QÓ$7ˆ1ˆÜÙˆq�w‰w˜Ÿ™Ó Ùˆq�w‰w˜Ÿ™Ó ó
ð 	
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‰   € ð �x‰x˜‹{˜CŸH™H Q›Kˆ1ˆô "×)Ñ)¨1¯7©7°A·G±GÐ*<¸q¿w¹wÈÏÉÐ>PÓQ÷
á��1ñ ˆq�!�Hð
ˆñ 
ô œ3˜x›=¬#¨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“  … áð ˜UŸZ™ZÑ(ˆà˜\Ñ*ˆØ˜‘ˆð
 ƒIØƒIØƒMØƒLØƒNó1ð ðØ%ðàðð ðð 
ò	ó ðð ðØ'ðàðð ðð 
ò	ó ðó:1óx:ó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Ø—K‘KˆEä˜u¤s¬E´4Ð&8Ó9ˆ	Ù¤Ø”K¤§¡´·±Ð=ô"
ô !Ð#BÄ4ÈÃ;À-Ð!PÓQÐQô �eœ]Ô+´·
±
¸5Ô0AØœŸ
™
Ò"Ü"×/Ñ/Ó1Ð1Ø×(Ò(Ü"×*Ñ*Ó,Ð,ä"×.Ñ.Ó0Ð0áÜ! %Ó(ˆEÙ˜%“L‰Eð œŸ
™
Ò"Ü! %¬Ô5Ü(Ð)NÓOÐOØ×(Ò(à—?’?¨5¯=ª=Ü(ØIóð ô
 ˜u l°EÔ:Ü(Ð)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   € à”E—M‘MÒ!ä×-Ñ-¨a´Ó9Ð9Ø”e—j‘jÒ Ü×+Ñ+Ó-Ð-Ø×(Ò(Ü×*Ñ*Ó,Ð,Ü×"Ñ"Ó$Ð$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ÓˆØ�I‰I‹KˆØ�yŠyÜ Ð!EÓFÐFÜ×)Ñ)¨!¬U¯Y©YÓ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¸¸A¼u¿x¹xÓHÐHr-   c                óL   — t         j                  | |t        j                  «      S rL   )r$   r¯   r4   r…   rì   s     r.   Úand_zSymPyValueRangeAnalysis.and_ý  s   € ä×8Ñ8¸¸A¼u¿y¹yÓ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   € à�>‰>ÔÜ×#Ñ#¤E§M¡M°q·w²w°!Ó$FÓGÐGÀAÓ$FÓGÐGäœuŸ}™}¨QÓ/´·±¸qÓ1AÓ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Ñ$4°QÓ$7ˆ1ˆØ�9Š9˜ŸšØ—8‘8˜A˜q“>Ð!Ø�9Š9Ø× Ñ  Ó#ˆAØ�9Š9Ø× Ñ  Ó#ˆAÜ�A—G‘G˜QŸW™WÓ%ˆØ�1Š9˜¤5§8¡8 )Ò+°¼&¸Ò0@ð Øœs E 6¨A¡:›×9Ñ9Ó;Ñ;Ð<‘ð ˆEÜ˜5¤# a§g¡g¨q¯w©wÓ"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Ñ$4°QÓ$7ˆ1ˆØ�9Š9˜ŸšØ—7‘7˜1˜a“=Ð Ø�9Š9Ø× Ñ  Ó#ˆAØ�9Š9Ø× Ñ  Ó#ˆAÜ�A—G‘G˜QŸW™WÓ%ˆØ�AŠ:Ø‰EØ�QŠY˜5¤E§H¡HÒ,°¼&²ðØœc %›j×3Ñ3Ó5Ñ5¸Ñ:‘ð �QŠYØˆEÜœ3˜qŸw™w¨¯©Ó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>A  s   è ø€ ÒE°U˜E¤U§[¡[Õ0ÑEùó   ‚c              3  óB   K  — | ]  }|t         j                  k(  –— Œ y ­wrL   ©r4   r5   rý   s     r.   r   z6SymPyValueRangeAnalysis.bitwise_xor.<locals>.<genexpr>B  s   è ø€ ÒC°5˜5¤E§J¡JÕ.ÑCùr  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_xor6  sƒ  € ä×Ñ Ó"¤K×$4Ñ$4°QÓ$7ˆ1ˆØ�9Š9˜Ÿšà—‘˜!Ÿ'™'Ñ!Ø—‘˜!Ÿ'™'Ñ!Ø—‘˜!Ÿ'™'Ñ!Ø—‘˜!Ÿ'™'Ñ!ð	ˆFô ÑE¸fÔEÓEˆIÜÑC¸FÔCÓCˆHá™XÜ$Ÿ{™{¬E¯J©J�u‘ÙÜ %§
¡
Ð*�™ÙÜ %§¡Ð+�™ä$Ð'?À¸xÐ%HÓIÐIä˜u eÓ,Ð,Ø�9Š9Ø× Ñ  Ó#ˆAØ�9Š9Ø× Ñ  Ó#ˆAà�G‰G�q—w‘wÒØ—‘˜1Ÿ7™7Ò"Ü  §¡Ô)Ü  §¡Ô)àŸ'™' A§G¡GÑ+ˆKÜ˜{¨KÓ8Ð8ÜœF˜7¤FÓ+Ð+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ÓˆØ�>‰>Ô §¡Ô 0°Q·W±WÀÇÁÒ5GÜ×#Ñ#¤E§J¡JÓ/Ð/Ø�W‰W�q—w‘wÒ !§'¡'¨A¯G©GÒ"3Ü×#Ñ#¤E§K¡KÓ0Ð0Üœ5Ÿ;™;¬¯
©
Ó3Ð3r-   c                óD   — | j                  | j                  ||«      «      S rL   )rê   r  ©r¶   r·   r¸   s      r.   ÚnezSymPyValueRangeAnalysis.nef  ó   € à�x‰x˜Ÿ™˜q !›Ó%Ð%r-   c                ó,   — t         j                  |«      S rL   )r$   rt   )r¶   r·   s     r.   Úidentityz SymPyValueRangeAnalysis.identityj  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.ltn  sÃ   € ä×Ñ˜QÓˆÜ×Ñ˜QÓˆØ�9‰9˜Ÿ	™	Ò!Ü ØOóð ð �9Š9Ø—8‘8˜CŸH™H Q›K¨Ó+Ð+à�w‰w˜Ÿ™Ò Ü"×'Ñ'¬¯
©
Ó3Ð3Ø—‘˜AŸG™GÒ#Ü"×'Ñ'¬¯©Ó4Ð4ÜœuŸ{™{¬E¯J©JÓ7Ð7r-   c                ó&   — | j                  ||«      S rL   )r  r  s      r.   ÚgtzSymPyValueRangeAnalysis.gt  s   € à�v‰v�a˜‹|Ð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”+œhŸl™lÓ+ó
ð 	
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/   € à�CŠx˜1 š6Ø�Ø�c’˜Q !šVØ�à˜1‘u�r-   )r$   rt   rN   r@   rï   rº   r   )r¶   r·   r¸   r   s       r.   ÚmulzSymPyValueRangeAnalysis.mul‘  s|   € ä×Ñ˜QÓˆÜ×Ñ˜QÓˆà�9‰9˜Ÿ	™	Ò!Ü ØOóð ð �9Š9Ø—8‘8˜A˜q“>Ð!ò	ô ×6Ñ6°q¸!¼[ÈÓ=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Ü�h‰hˆY˜!‰^œuŸx™x¨1™}´E·H±H°9À±>ÄUÇXÁXÐQRÁ]ä×&Ñ&Ó(Ð(ä×:Ñ:ØØÜœ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Ø�w‰w˜!Š| §¡¨1¢Ü" 1¤fÓ-Ð-Ø�w‰w˜!Š| §¡¨1¢Ü" 1¤fÓ-Ð-Ø�w‰w˜!Š| §¡¨1¢Ü"¤F 7¨AÓ.Ð.Ø�w‰w˜!Š| §¡¨1¢Ü"¤F 7¨AÓ.Ð.Ü×*Ñ*Ó,Ð,ØˆÜ×%Ñ% q§w¡w°·±Ð&8¸1¿7¹7ÀAÇGÁGÐ:LÓMò 	#‰DˆAˆqÜ˜˜A“ˆAØ”E—I‘I‰~Ø—‘¤§¡¨A£´·±¸A³Ñ!>Ä&Ñ HÕIà—‘ Õ"ð	#ô œ3˜x›=¬#¨h«-Ó8Ð8r-   c                ó°  ‡‡— t         j                  |«      }t         j                  |«      }d„ Šd„ }d|v rt         j                  «       S |j                  «       rÒt	        |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“&œ3˜q›6‘/ˆCØ�1ŠuØ�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ÄÌ&ÈÐ@QÑ7Q”5—=‘= Ó#ÐXÐWXÐXr-   r   c                ó   •—  ‰| ‰«      S rL   r,   )r§   r/  Úy_vals    €€r.   ú<lambda>z-SymPyValueRangeAnalysis.mod.<locals>.<lambda>ö  s   ø€ ¹uÀQÈ»€ 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Ü×*Ñ*Ó,Ð,Ø�^‰^ÔÜ˜Ÿ™“LˆEñ �Q—W‘W˜eÓ$©¨a¯g©g°uÓ(=Ò=Ü"×1Ñ1°!Ô5NÓOÐOØ�w‰w˜Š{ä" E 6¨A¡:¨qÓ1Ð1Ø—‘˜1’ä" 1 e¨a¡iÓ0Ð0ô ˜U˜F Q™J¨¯©Ó0�Ü˜E A™I q§w¡wÓ/�Ü" 5¨%Ó0Ð0ð —G‘G˜A“J×$Ñ$ qÑ(ˆEÜ ˜v uÓ-Ð-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 )zËPython-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ÓˆØ�7‰7�aŠ<˜AŸG™G qšLÜ*×.Ñ.¨q°!Ó4Ð4Ø Ÿw™w¨š{�—‘˜!’°ˆØ Ÿw™w¨š{�—‘˜!’°ˆÜ˜5 %Ó(Ð(r-   c                óF   — | j                  | j                  ||«      |«      S rL   )r5  r*  )r¶   r·   r¸   Úcs       r.   Úmodular_indexingz(SymPyValueRangeAnalysis.modular_indexing  s   € à�w‰w�s—|‘| A qÓ)¨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>3  s   ø€ ¤¨!¨Q¯W©WÓ!5€ r-   c                ó0   •— t        | ‰j                  «      S rL   rA  rB  s    €r.   r4  z8SymPyValueRangeAnalysis.pow_by_natural.<locals>.<lambda>7  s   ø€ ¼xÈÈ1Ï7É7Ó?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Ü×#Ñ#¤H¨Q¯W©W°a·g±gÓ$>Ó?Ð?à�W‰W˜Š\ô
 ×<Ñ<Ø�1”{ 1¤fÓ-Ñ-¬|óð ð �^‰^ÔØ�w‰w˜‰{˜aÒä"×6Ñ6ØÓ5óð ô
 #×1Ñ1°!Ó5SÓTÐTô ˜1Ÿ7™7 Q§W¡W HÓ-ˆHÜÜ˜8 Q§W¡WÓ-Ð.´¸À1Ç7Á7Ó0Kóð r-   c                ó*   — t         j                  «       S rL   )r$   rp   r  s      r.   ÚpowzSymPyValueRangeAnalysis.powB  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>v  s   € ¼<ÈÈQÓ;O€ r-   )r$   rt   rp   r    rò   s    r.   Ú
reciprocalz"SymPyValueRangeAnalysis.reciprocalo  s>   € ô ×Ñ˜QÓˆØ�‰6Ü×&Ñ&Ó(Ð(ä×-Ñ-¨aÑ1OÓPÐPr-   c                ó6   — t         j                  | t        «      S rL   )r$   r«   r-  rò   s    r.   r-  zSymPyValueRangeAnalysis.absx  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ÓˆØ�7‰7�aŠ<Ü×&Ñ&Ó(Ð(Ü×)Ñ)¨!Ô->Ó?Ð?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ÓˆØ�7‰7�aŠ<Ü×&Ñ&Ó(Ð(Ü×)Ñ)¨!Ô-?Ó@Ð@r-   c                óD   — | j                  ||t        j                  «      S rL   )Ú
min_or_maxr4   r‡   r  s      r.   ÚminimumzSymPyValueRangeAnalysis.minimumŽ  ó   € à�~‰~˜a ¤E§I¡IÓ.Ð.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¸¸A¸rÓ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ÓˆØ�7‰7�QŠ;Ü×&Ñ&Ó(Ð(Ü×)Ñ)¨!Ô-?Ó@Ð@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ÓˆØ�I‰I‹Kˆð �9‰9˜Ÿ	™	Ò!¤k×&9Ñ&9Ó&;ÀAÀqÀ6Ñ&IÜ Ø[óð ð �9Š9ÜœuŸy™y¨¯©°!·'±'Ó:¼E¿H¹HÀQÇWÁWÈaÏgÉgÓ<VÓWÐWäœuŸy™y¨¯©°!·'±'Ó:¼E¿I¹IÀaÇgÁgÈqÏwÉwÓ<WÓXÐXr-   c                ó*   — |j                  «       }| |fS rL   )rr   rì   s     r.   Úexpr_cond_pairz&SymPyValueRangeAnalysis.expr_cond_pairð  s   € à�I‰I‹KˆØ�1ˆvˆ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˜
Ü�z‰z˜ZÒ'ØÐ%Ø!+‘Jà!+¨jÑ!8‘Jð	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#  ó   € äœEŸH™H˜9¤e§h¡hÓ/Ð/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.acos6  r‡  r-   c                óT   — t        t        j                   t        j                  «      S rL   r�   rò   s    r.   ÚatanzSymPyValueRangeAnalysis.atan@  r‡  r-   c                ó6   — t         j                  | t        «      S rL   )r$   rž   r   rò   s    r.   ÚtrunczSymPyValueRangeAnalysis.truncE  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„  „ ñð
 ñ+ó ð+ðZ ò%ó ð%ð ñ9ó ð9ð ñ8ó ð8ð ñIó ðIð ñJó ðJð ñCó ðCð ñ9ó ð9ð* ñ9ó ð9ð. ñ#,ó ð#,ðJ ñ4ó ð4ð ñ&ó ð&ð ñ#ó ð#ð ñ8ó ð8ð  ñó ðð ñ&ó ð&ð ñ&ó ð&ð ñ
ó ð
ð
 ñTó ðTð, ñ
ó ð
ð ñó ðð ñ9ó ð9ð2 ñ&.ó ð&.ð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>T  s3   øè ø€ ò Ù&* a¨ÀÀT×EVÑEVÒ@V�b˜˜˜2˜a˜S”Mñùs   ƒ'š'Ú )ÚjoinÚitems)r™  rv  s   €€r.   r4  zbound_sympy.<locals>.<lambda>R  s@   ø€ ñ
 ð	 Ø—)‘)ó Ø.4¯l©l«nôó ñð ð ð 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_handleri  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%   K  sÙ   ù€ ô ‡I�IØØÜôó		
ôô �$œŸ™Ô%Ü×Ñ Ó%Ð%àŠ\�r€Fô �m‰m×*Ñ*×2Ñ2Ó4€GÙ�7×$Ò$¨×):Ñ):×)DÒ)DÙØK˜×)Ñ)×3Ñ3×@Ñ@ÐKÀFÐK‰Fà×&Ñ&×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×Ñ˜Ó!€à˜-Ð
(€áˆT�5—:‘:˜|Ó,€ô	�lô 	òFò6)ó óó,ð 
ˆu‰�u—z‘zÑ	!€Ø	�Ñ	€Ø�‰€Ø	�5—:‘:�, §
¡
Ð*Ñ	+€Ø
�E—J‘J §
¡
Ð+¨U¯Z©ZÐ7Ñ
8€Ø	�<�. ,Ð.Ñ	/€Ø
�L ,Ð/°Ð=Ñ
>€Ø�‰€Ø	�7Ñ	€ð €×Ñ˜dÔ#ôp9�'˜"‘+ó p9ó $ðp9÷f	[
;ñ [
;ð~ HLð-Ø
ð-ØDð-àô-r-   