Ë
    Q/æ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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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+ dd
l,m-Z- ddl.m/Z/m0Z0m1Z1  ejd                  e3«      Z4g d¢Z5 edejl                  e«      Z7 G d„ de8«      Z9d„ Z:d„ Z;dd„Z<dd„Z=ee>e?ejl                  f   Z@eeAef   ZBee@eBf   ZCeejl                  gejl                  f   ZDeejl                  ejl                  gejl                  f   ZEeegef   ZFeeegef   ZGeeDeFf   ZHeeEeGf   ZI ej”                  d¬«       G d„ de
e7   «      «       ZK G d„ d«      ZL G d„ deL«      ZM	 d	 	 	 	 	 d d„ZNy)!é    )ÚannotationsN)	ÚCallableÚDictÚ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_sqrtÚPowByNaturalÚRoundDecimalÚ
RoundToIntÚsafe_powÚToFloatÚTruncToFloatÚ
TruncToInt)Úsympy_interp)Úint_ooÚIntInfinityÚNegativeIntInfinity)ÚValueRangesÚValueRangeAnalysisÚbound_sympyÚ_Tc                  ó   — e Zd Zy)ÚValueRangeErrorN)Ú__name__Ú
__module__Ú__qualname__© ó    úb/root/repos/pocs/video-evals/.venv/lib/python3.12/site-packages/torch/utils/_sympy/value_ranges.pyr*   r*   8   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    r0   Úsimple_sympifyrE   >   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Ô	"Ø�{Š{Ð˜AÓˆ{ð
 ”E—I‘IŠ~Ðˆ~ØˆÜ	�A”{Ô	#ØˆäÐ5´d¸1³g°Y¸bÀÀÐ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)r3   r5   r?   ÚSympyBoolean©ÚlowerÚuppers     r0   Úsympy_generic_lerL   W   sn   € Ü�%œŸ™Ô$Ü˜%¤§¡Ô,Ð,Ð,Ø˜‰~Ðô ˜%¤Ô.´:¸eÄ\Ô3Rð 	
ØØðU
ó 	
ÐRð Ò' %˜iÐ(Ð(r/   c                ó   — | j                   S rG   ©Úis_bool©Úvrs    r0   Ú
vr_is_boolrR   d   s   € Ø�:‰:Ðr/   c                ó   — | j                    S rG   rN   rP   s    r0   Ú
vr_is_exprrT   h   s   € Ø�z‰zˆ>Ð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d3d„«       Zed3d„«       Ze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(   rJ   rK   r4   rO   Úis_intÚis_floatc                ó<   — d| j                   › d| j                  › d�S )NzVR[z, ú]rI   ©Úselfs    r0   Ú__repr__zValueRanges.__repr__ˆ   s   € Ø�T—Z‘Z�L  4§:¡: ,¨aÐ0Ð0r/   c                 ó   — y rG   r.   ©r\   rJ   rK   s      r0   Ú__init__zValueRanges.__init__‹   ó   € ð 	r/   c                 ó   — y rG   r.   r_   s      r0   r`   zValueRanges.__init__“   ra   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 [ú:rZ   zCould not compare z <= rJ   rK   rO   rW   rX   )rE   rL   r*   Ú	TypeErrorr3   rH   r5   r9   r=   r"   r$   r#   ÚobjectÚ__setattr__rO   rW   rX   )	r\   rJ   rK   rD   Úis_bool_lowerÚis_bool_upperÚinteger_typesÚis_int_lowerÚis_int_uppers	            r0   r`   zValueRanges.__init__›   sÇ  € Ü˜uÓ%ˆÜ˜uÓ%ˆð	LÜ# E¨5Ô1Ü%Ð(8¸¸¸qÀÀÀqÐ&IÓJÐJð 2ô
 # 5¬,Ó7ˆÜ" 5¬,Ó7ˆØ Ò-Ð=°°u¨~Ó=Ð-ô �eœUŸ]™]Ô+°¼¿¹Ò0AÜˆEÜ�eœUŸ]™]Ô+°¼%¿(¹(¸Ò0BÜ�GˆEäŸ™Ô(;¼[ÐIˆÜ! %¨Ó7ˆÜ! %¨Ó7ˆô 	×Ñ˜4 ¨%Ô0Ü×Ñ˜4 ¨%Ô0ô 	×Ñ˜4 ¨MÔ:Ü×ÑØØØ—‘ÐÒ> Ò>°,ô	
ð
	ô 	×Ñ˜4 °·±Ð-=Ò-QÀdÇkÁkÀ/ÔRØ�|Š|˜tŸ{š{¨d¯mªmÐK¸eÀU¸^ÓKÐ;¨m˜{ˆ|øôa ò 	LÜÐ0°°°t¸E¸7Ð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 )rR   r%   ÚunknownÚunknown_boolrB   r[   s    r0   ÚboolifyzValueRanges.boolifyÕ   sA   € Ü�dÔØˆKØ”[×(Ñ(Ó*Ò*Ü×+Ñ+Ó-Ð-ä  >°$°Ð!8Ó9Ð9r/   c                óJ   — t         j                  |«      j                  | «      S rG   )r%   ÚwrapÚissubset)r\   Úxs     r0   Ú__contains__zValueRanges.__contains__Ý   s   € Ü×Ñ Ó"×+Ñ+¨DÓ1Ð1r/   c                ó†   — t        |j                  | j                  «      xr  t        | j                  |j                  «      S rG   )rL   rJ   rK   ©r\   Úothers     r0   rs   zValueRanges.issubsetà   s3   € Ü §¡¨T¯Z©ZÓ8ò 
Ô=MØ�J‰J˜Ÿ™ó>
ð 	
r/   c                ó   — | |z  S )z1Given two ValueRanges, returns their intersectionr.   rw   s     r0   ÚtightenzValueRanges.tightenå   s   € à�e‰|Ðr/   c                 ó   — y rG   r.   rw   s     r0   Ú__and__zValueRanges.__and__ê   ó   € ð
 	r/   c                 ó   — y rG   r.   rw   s     r0   r|   zValueRanges.__and__ñ   r}   r/   c                óº  — |t         j                  «       k(  r| S | t         j                  «       k(  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 rG   )r%   rn   rO   rW   rX   r5   ÚOrrJ   ÚAndrK   ÚMaxÚMinrw   s     r0   r|   zValueRanges.__and__ø   s  € Ø”K×'Ñ'Ó)Ò)ØˆKØ”;×&Ñ&Ó(Ò(ØˆLØ�|‰|˜uŸ}™}Ò,Ð;¨t°U¨mÓ;Ð,Ø�{‰{˜eŸl™lÒ*Ð9¨T°5¨MÓ9Ð*Ø�}‰} §¡Ò.Ð=°°u°Ó=Ð.Ø�<Š<ÜÜ—‘˜Ÿ™ U§[¡[Ó1´5·9±9¸T¿Z¹ZÈÏÉÓ3Uóð ô Ü—	‘	˜$Ÿ*™* e§k¡kÓ2´E·I±I¸d¿j¹jÈ%Ï+É+Ó4Vóð r/   c                 ó   — y rG   r.   rw   s     r0   Ú__or__zValueRanges.__or__
  r}   r/   c                 ó   — y rG   r.   rw   s     r0   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 rG   )r%   rn   rO   rW   rX   r5   r�   rJ   r€   rK   rƒ   r‚   rw   s     r0   r…   zValueRanges.__or__  sü   € Ü×ÑÓ  T¨5 MÑ1Ü×&Ñ&Ó(Ð(Ø�|‰|˜uŸ}™}Ò,Ð;¨t°U¨mÓ;Ð,Ø�{‰{˜eŸl™lÒ*Ð9¨T°5¨MÓ9Ð*Ø�}‰} §¡Ò.Ð=°°u°Ó=Ð.Ø�<Š<ÜÜ—	‘	˜$Ÿ*™* 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 rG   rI   r[   s    r0   Úis_singletonzValueRanges.is_singleton'  s   € Ø�z‰z˜TŸZ™ZÑ'Ð'r/   c                 óT   — t        t        j                   t        j                  «      S rG   ©r%   r5   r=   r.   r/   r0   rn   zValueRanges.unknown*  ó   € äœEŸH™H˜9¤e§h¡hÓ/Ð/r/   c                 ó,   — t        t         t        «      S rG   )r%   r"   r.   r/   r0   Úunknown_intzValueRanges.unknown_int.  s   € äœF˜7¤FÓ+Ð+r/   c                 óR   — t        t        j                  t        j                  «      S rG   ©r%   r5   r7   r6   r.   r/   r0   ro   zValueRanges.unknown_bool2  s   € äœ5Ÿ;™;¬¯
©
Ó3Ð3r/   c                 ó   — y rG   r.   ©Úargs    r0   rr   zValueRanges.wrap6  s   € ð 	r/   c                 ó   — y rG   r.   r’   s    r0   rr   zValueRanges.wrap<  ó   € ð 	r/   c                ó°   — t        | t        «      r| S t        | t        «      r)t        j                  | «      rt        j                  «       S t        | | «      S rG   )r3   r%   r:   r;   Úisnanrn   r’   s    r0   rr   zValueRanges.wrapA  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%   rr   rJ   rK   ©rt   Úfns     r0   Úincreasing_mapzValueRanges.increasing_mapJ  s1   € ô ×Ñ˜QÓˆÜ™2˜aŸg™g›;©¨1¯7©7«Ó4Ð4r/   c                 ó   — y rG   r.   rš   s     r0   Údecreasing_mapzValueRanges.decreasing_mapP  r•   r/   c                 ó   — y rG   r.   rš   s     r0   rž   zValueRanges.decreasing_mapU  r•   r/   c                ó„   — t         j                  | «      } t         || j                  «       || j                  «      «      S )z#Decreasing: x <= y => f(x) >= f(y).)r%   rr   rK   rJ   rš   s     r0   rž   zValueRanges.decreasing_mapZ  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%   rr   rJ   rK   ÚminÚmax)rt   r›   ÚlÚus       r0   Úmonotone_mapzValueRanges.monotone_mapa  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%   rr   r£   rJ   rK   rE   r3   r5   r>   r=   r¦   )rt   r›   rK   s      r0   Úconvex_min_zero_mapzValueRanges.convex_min_zero_mapi  s‡   € ô ×Ñ˜QÓˆØ�‰6Ü™˜1Ÿ7™7›¡R¨¯©£[Ó1ˆEÜ" 5Ó)ˆEÜ˜%¤§¡Ô-°¼%¿(¹(Ò1BÜ" 3¨Ó.Ð.Ü˜q %Ó(Ð(Ü×'Ñ'¨¨2Ó.Ð.r/   c                 ó   — y rG   r.   ©rt   Úyr›   s      r0   Úcoordinatewise_increasing_mapz)ValueRanges.coordinatewise_increasing_mapu  ó   € ð 	r/   c                 ó   — y rG   r.   r«   s      r0   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      r0   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.)rr   Ú	itertoolsÚproductrJ   rK   r%   r¢   r£   )Úclsrt   r¬   r›   ÚaÚbÚproductss          r0   Ú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]rJ   ÚExprInrK   r¼   r¹   ÚNone)r\   úValueRanges[SympyBoolean]rJ   ÚBoolInrK   r¿   r¹   r½   )rJ   ÚAllInrK   rÀ   r¹   r½   )r¹   r¾   )rt   rÀ   r¹   r4   )r¹   r%   )r\   r»   rx   r»   r¹   r»   )r\   r¾   rx   r¾   r¹   r¾   )r\   ÚAllVRrx   rÁ   r¹   rÁ   )r¹   r4   )r¹   r»   )r“   úUnion[ExprIn, ExprVR]r¹   ÚExprVR)r“   úUnion[BoolIn, BoolVR]r¹   ÚBoolVR)r“   úUnion[AllIn, AllVR]r¹   rÁ   )rt   rÂ   r›   ÚExprFnr¹   rÃ   )rt   rÄ   r›   ÚBoolFnr¹   rÅ   )rt   rÆ   r›   ÚAllFnr¹   rÁ   )rt   rÂ   r¬   rÂ   r›   ÚExprFn2r¹   rÃ   )rt   rÄ   r¬   rÄ   r›   ÚBoolFn2r¹   rÅ   )rt   rÆ   r¬   rÆ   r›   ÚAllFn2r¹   rÁ   )#r+   r,   r-   r
   r%   r5   r?   rÃ   rH   rÅ   r   rÁ   Ú__annotations__r]   r   r`   rp   ru   rs   rz   r|   r…   r‰   Ústaticmethodrn   rŽ   ro   rr   rœ   rž   r¦   r©   r­   Úclassmethodr¸   r.   r/   r0   r%   r%   w   sy  … áà˜UŸZ™ZÑ(ˆØ˜\Ñ*ˆØ�f˜f�nÑ%ˆð
 ƒIØƒIØƒMØƒLØƒNó1ð ðØ%ðàðð ðð 
ò	ó ðð ðØ'ðàðð ðð 
ò	ó ðó8Lót:ó2ò
ó
ð
 ðØ%ðà&ðð 
!òó ðð ðØ'ðà(ðð 
#òó ðóð$ ðØ%ðà&ðð 
!òó ðð ðØ'ðà(ðð 
#òó ðóó(ð ò0ó ð0ð ò,ó ð,ð ò4ó ð4ð Øòó ó ðð Øòó ó ðð ò%ó ð%ð ò5ó ð5ð
 Øòó ó ðð Øòó ó ðð ò5ó ð5ð ò1ó ð1ð ò	/ó ð	/ð ØðØ ðà ðð ðð 
ò	ó ó ðð ØðØ ðà ðð ðð 
ò	ó ó ðð ð
Øð
àð
ð ð
ð 
ò	
ó ð
ð$ ñ9ó ñ9r/   r%   c                  ó2  — e Zd ZdZed„ «       Zed5d„«       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„ «       Z7y)6Ú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        «      rqt        j                  | «      r\|t        j                  k(  rt        j                  «       S |j                   rt        j#                  «       S t        t$         t$        «      S |rt'        |«      } || «      } nY|t        j                  k(  rt        | t        «      s6J ‚|j                   r| j(                  r| j*                  sJ ‚| j,                  sJ ‚t        j/                  | «      }|S rG   )r3   r%   r‰   rJ   r8   r:   r4   r   r5   r9   ÚNumberr	   r;   r—   Útorchro   Úis_floating_pointrn   r"   r   Ú	is_finiteÚis_realÚ
is_integerrr   )ÚvalueÚdtypeÚ	is_pythonÚtype_Úrs        r0   Úconstantz SymPyValueRangeAnalysis.constant«  s1  € ä�eœ[Ô)Ø×%Ñ%Ô'Ð'Ð'Ø—K‘KˆEä˜u¤s¬E´4Ð&8Ó9ˆ	ÙœJØ”K¤§¡´·±Ð=ô
ð 	
ð 
ô �eœ]Ô+´·
±
¸5Ô0AØœŸ
™
Ò"Ü"×/Ñ/Ó1Ð1Ø×(Ò(Ü"×*Ñ*Ó,Ð,ä"¤F 7¬FÓ3Ð3áÜ! %Ó(ˆEÙ˜%“L‰Eð œŸ
™
Ò"Ü! %¬Ô5Ð5Ð5Ø×(Ò(Ø Ÿ?š?¨e¯mªmÐ;Ð;ð ×'Ò'Ð'Ð'ä×Ñ˜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 rG   )
rÔ   Úfloat64r%   rœ   r   r4   ro   rÕ   rŽ   rn   )rµ   rÚ   Ú	src_dtypes      r0   Úto_dtypez SymPyValueRangeAnalysis.to_dtypeÑ  sc   € à”E—M‘MÒ!Ü×-Ñ-¨a´Ó9Ð9Ø”e—j‘jÒ Ü×+Ñ+Ó-Ð-Ø×(Ò(Ü×*Ñ*Ó,Ð,Ü×"Ñ"Ó$Ð$r/   c                ó6   — t         j                  | t        «      S rG   )r%   rœ   r    )rµ   rÚ   s     r0   Útrunc_to_intz$SymPyValueRangeAnalysis.trunc_to_intÛ  s   € ä×)Ñ)¨!¬ZÓ8Ð8r/   c                ó°   — t         j                  | «      } | j                  «       } | j                  sJ ‚t         j	                  | t
        j                  «      S rG   )r%   rr   rp   rO   rž   r5   ÚNot)rµ   s    r0   Únot_zSymPyValueRangeAnalysis.not_ß  s@   € ä×Ñ˜QÓˆØ�I‰I‹KˆØ�yŠyÐˆyÜ×)Ñ)¨!¬U¯Y©YÓ7Ð7r/   c                óL   — t         j                  | |t        j                  «      S rG   )r%   r­   r5   r€   ©rµ   r¶   s     r0   Úor_zSymPyValueRangeAnalysis.or_æ  s   € ä×8Ñ8¸¸A¼u¿x¹xÓHÐHr/   c                óL   — t         j                  | |t        j                  «      S rG   )r%   r­   r5   r�   ré   s     r0   Úand_zSymPyValueRangeAnalysis.and_ê  s   € ä×8Ñ8¸¸A¼u¿y¹yÓIÐIr/   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 rG   )r%   rr   r‰   rJ   r5   r6   rK   r7   ré   s     r0   Ú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 rG   )rç   rî   ©r´   rµ   r¶   s      r0   ÚnezSymPyValueRangeAnalysis.neø  ó   € à�x‰x˜Ÿ™˜q !›Ó%Ð%r/   c                ó,   — t         j                  |«      S rG   )r%   rr   )r´   rµ   s     r0   Úidentityz SymPyValueRangeAnalysis.identityü  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 rG   )
r%   rr   rO   rì   rç   rK   rJ   r5   r6   r7   rð   s      r0   ÚltzSymPyValueRangeAnalysis.lt   s·   € ä×Ñ˜QÓˆÜ×Ñ˜QÓˆØ�y‰y˜AŸI™IÒ%Ð%Ð%Ø�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 rG   )rö   rð   s      r0   ÚgtzSymPyValueRangeAnalysis.gt  s   € à�v‰v�a˜‹|Ðr/   c                óD   — | j                  | j                  ||«      «      S rG   )rç   rø   rð   s      r0   ÚlezSymPyValueRangeAnalysis.le  rò   r/   c                óD   — | j                  | j                  ||«      «      S rG   )rç   rö   rð   s      r0   ÚgezSymPyValueRangeAnalysis.ge  rò   r/   c                ó^   — t         j                  | |t        t        j                  «      «      S rG   )r%   r­   r   ÚoperatorÚaddré   s     r0   rÿ   zSymPyValueRangeAnalysis.add  s%   € ä×8Ñ8Øˆq”+œhŸl™lÓ+ó
ð 	
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     r0   Úsafe_mulz-SymPyValueRangeAnalysis.mul.<locals>.safe_mul)  s/   € à�CŠx˜1 š6Ø�Ø�c’˜Q !šVØ�à˜1‘u�r/   )r%   rr   rO   rì   r¸   r   )r´   rµ   r¶   r  s       r0   ÚmulzSymPyValueRangeAnalysis.mul   sp   € ä×Ñ˜QÓˆÜ×Ñ˜QÓˆà�y‰y˜AŸI™IÒ%Ð%Ð%Ø�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%   rr   r"   rn   r¸   r   r   ré   s     r0   Úint_truedivz#SymPyValueRangeAnalysis.int_truediv4  st   € ä×Ñ˜QÓˆÜ×Ñ˜QÓˆØ�‰6œ�w !‘|¤v°¡{¼&¸ÀA¹ÌÐSTÉÜ×&Ñ&Ó(Ð(ä×:Ñ:Ø�1”k¤*Ó-óð 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%   rr   r5   r=   rn   r¸   r   r   ré   s     r0   ÚtruedivzSymPyValueRangeAnalysis.truediv?  s…   € ä×Ñ˜QÓˆÜ×Ñ˜QÓˆØ�‰6Ü�h‰hˆY˜!‰^œuŸx™x¨1™}´E·H±H°9À±>ÄUÇXÁXÐQRÁ]ä×&Ñ&Ó(Ð(ä×:Ñ:Ø�1”k¤,Ó/óð 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%   rr   rŽ   r²   r³   rJ   rK   r   r5   rA   ÚappendÚsignr"   r¢   r£   )rµ   r¶   r·   rt   r¬   rÝ   s         r0   Úfloordivz SymPyValueRangeAnalysis.floordivL  sÖ   € ä×Ñ˜QÓˆÜ×Ñ˜QÓˆØ�‰6Ü×*Ñ*Ó,Ð,ØˆÜ×%Ñ% 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   éÿÿÿÿ)Úabs)rµ   r¶   Úrets      r0   Úc_modz*SymPyValueRangeAnalysis.mod.<locals>.c_modb  s(   € Ü�a“&œ3˜q›6‘/ˆCØ�1ŠuØ�r‘	�ØˆJr/   c                óp   — | |z  }|j                   r$|t        t         fvrt        j                  |«      S |S rG   )rÖ   r"   r5   r9   )rµ   r¶   rt   s      r0   Úc_divz*SymPyValueRangeAnalysis.mod.<locals>.c_divh  s4   € Ø�A‘ˆAØ'(§{¢{°qÄÌ&ÈÐ@QÑ7Q”5—=‘= Ó#ÐXÐWXÐXr/   r   c                ó   •—  ‰| ‰«      S rG   r.   )r¥   r  Úy_vals    €€r0   ú<lambda>z-SymPyValueRangeAnalysis.mod.<locals>.<lambda>t  s   ø€ ¹uÀQÈ»€ r/   r   )
r%   rr   rŽ   r‰   r  rJ   rK   rœ   r£   r¢   )r´   rt   r¬   r  rJ   rK   r  r  s         @@r0   Ú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                óF   — | j                  | j                  ||«      |«      S rG   )r  r  )r´   rµ   r¶   Úcs       r0   Úmodular_indexingz(SymPyValueRangeAnalysis.modular_indexing…  s   € à�w‰w�s—|‘| A qÓ)¨1Ó-Ð-r/   c                ó*   — t         j                  «       S rG   )r%   rŽ   )r´   Úargss     r0   Ú&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 rG   ©r   rJ   ©rt   r¶   s    €r0   r  z8SymPyValueRangeAnalysis.pow_by_natural.<locals>.<lambda>Ÿ  s   ø€ ¤¨!¨Q¯W©WÓ!5€ r/   c                ó0   •— t        | ‰j                  «      S rG   r"  r#  s    €r0   r  z8SymPyValueRangeAnalysis.pow_by_natural.<locals>.<lambda>£  s   ø€ ¼xÈÈ1Ï7É7Ó?S€ r/   )r%   rr   r‰   r   rJ   r­   r"   r   r©   rœ   r£   rK   )r´   rµ   r¶   Úmax_bases     ` r0   Ú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 rG   ©r%   rn   rð   s      r0   Ú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    r0   r  z4SymPyValueRangeAnalysis.reciprocal.<locals>.<lambda>â  s   € ¼<ÈÈQÓ;O€ r/   )r%   rr   rn   rž   ©rt   s    r0   Ú
reciprocalz"SymPyValueRangeAnalysis.reciprocalÛ  s>   € ô ×Ñ˜QÓˆØ�‰6Ü×&Ñ&Ó(Ð(ä×-Ñ-¨aÑ1OÓPÐPr/   c                ó6   — t         j                  | t        «      S rG   )r%   r©   r  r.  s    r0   r  zSymPyValueRangeAnalysis.absä  s   € ä×.Ñ.¨q´#Ó6Ð6r/   c                ó6   — t         j                  | t        «      S rG   )r%   rœ   r   r.  s    r0   ÚexpzSymPyValueRangeAnalysis.expè  s   € ä×)Ñ)¨!Ô->Ó?Ð?r/   c                ó¦   — t         j                  | «      } | j                  dk  rt         j                  «       S t         j	                  | t
        «      S r  )r%   rr   rJ   rn   rœ   r   r.  s    r0   ÚlogzSymPyValueRangeAnalysis.logì  s@   € ä×Ñ˜QÓˆØ�7‰7�aŠ<Ü×&Ñ&Ó(Ð(Ü×)Ñ)¨!Ô->Ó?Ð?r/   c                óD   — | j                  ||t        j                  «      S rG   )Ú
min_or_maxr5   rƒ   rð   s      r0   ÚminimumzSymPyValueRangeAnalysis.minimumó  ó   € à�~‰~˜a ¤E§I¡IÓ.Ð.r/   c                óD   — | j                  ||t        j                  «      S rG   )r6  r5   r‚   rð   s      r0   ÚmaximumzSymPyValueRangeAnalysis.maximum÷  r8  r/   c                ó„   — t         j                  | «      } t         j                  |«      }t         j                  | ||«      S rG   )r%   rr   r­   )rµ   r¶   r›   s      r0   r6  z"SymPyValueRangeAnalysis.min_or_maxû  s7   € ä×Ñ˜QÓˆÜ×Ñ˜QÓˆÜ×8Ñ8¸¸A¸rÓBÐBr/   c                ó†   — t         j                  |t        j                  j                  j
                  j                  «      S rG   )r%   rœ   r5   Ú	functionsÚ
elementaryÚintegersÚfloor©r´   rt   rÚ   s      r0   Ú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 rG   )r%   rœ   r5   r=  r>  r?  ÚceilingrA  s      r0   Úceil_to_intz#SymPyValueRangeAnalysis.ceil_to_int  s0   € ä×)Ñ)ØŒu�‰×)Ñ)×2Ñ2×:Ñ:ó
ð 	
r/   c                ó˜   — t         j                  |t        t        j                  j
                  j                  j                  «      «      S rG   )r%   rœ   r   r5   r=  r>  r?  r@  ©r´   rt   s     r0   r@  zSymPyValueRangeAnalysis.floor  s5   € ä×)Ñ)ØŒ{œ5Ÿ?™?×5Ñ5×>Ñ>×DÑDÓEó
ð 	
r/   c                ó˜   — t         j                  |t        t        j                  j
                  j                  j                  «      «      S rG   )r%   rœ   r   r5   r=  r>  r?  rD  rG  s     r0   Ú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 rG   )r   )ÚnumberÚndigitss    €r0   r  z7SymPyValueRangeAnalysis.round_decimal.<locals>.<lambda>1  s   ø€ œL¨°Ó9€ r/   )r‰   r%   rn   rJ   rœ   )r´   rL  rM  r›   s     ` r0   Úround_decimalz%SymPyValueRangeAnalysis.round_decimal)  sA   ø€ à×#Ñ#Ô%Ü×&Ñ&Ó(Ð(à—-‘-ˆó :ˆä×)Ñ)¨&°"Ó5Ð5r/   c                ó6   — t         j                  |t        «      S rG   )r%   rœ   r   )r´   rL  rÚ   s      r0   Úround_to_intz$SymPyValueRangeAnalysis.round_to_int5  s   € ä×)Ñ)¨&´*Ó=Ð=r/   c                ó¦   — t         j                  | «      } | j                  dk  rt         j                  «       S t         j	                  | t
        «      S r  )r%   rr   rJ   rn   rœ   r   r.  s    r0   ÚsqrtzSymPyValueRangeAnalysis.sqrt:  s@   € ä×Ñ˜QÓˆØ�7‰7�QŠ;Ü×&Ñ&Ó(Ð(Ü×)Ñ)¨!Ô-?Ó@Ð@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 rG   )r%   rr   rp   rO   rn   r5   r�   rJ   r€   rK   rƒ   r‚   )rµ   r¶   r  s      r0   ÚwherezSymPyValueRangeAnalysis.whereA  sÆ   € ä×Ñ˜QÓˆÜ×Ñ˜QÓˆØ�I‰I‹Kˆð �y‰y˜AŸI™IÒ%¬×)<Ñ)<Ó)>À1ÀaÀ&Ñ)HÐHÐHØ�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 rG   )rp   ré   s     r0   Úexpr_cond_pairz&SymPyValueRangeAnalysis.expr_cond_pairQ  s   € à�I‰I‹KˆØ�1ˆvˆr/   c                 óX   — d }| D ]"  \  }}t         j                  |v sŒ|€|}Œ||z  }Œ$ |S rG   )r5   r6   )ÚrangesÚ
init_rangeÚ
expr_rangeÚ
cond_ranges       r0   Ú	piecewisez!SymPyValueRangeAnalysis.piecewise[  sD   € àˆ
Ø&,ò 	9Ñ"ˆJ˜
Ü�z‰z˜ZÒ'ØÐ%Ø!+‘Jà!+¨jÑ!8‘Jð	9ð Ðr/   c                ó   — t        dd«      S ©Ng      ð¿r,  ©r%   r.  s    r0   ÚcoszSymPyValueRangeAnalysis.cosf  s   € ô
 ˜4 Ó%Ð%r/   c                ó6   — t        dt        j                  «      S )Nr¨   r‹   r.  s    r0   ÚcoshzSymPyValueRangeAnalysis.coshm  s   € ä˜3¤§¡Ó)Ð)r/   c                ó   — t        dd«      S r^  r_  r.  s    r0   ÚsinzSymPyValueRangeAnalysis.siny  s   € ô ˜4 Ó%Ð%r/   c                óT   — t        t        j                   t        j                  «      S rG   r‹   r.  s    r0   ÚsinhzSymPyValueRangeAnalysis.sinh  ó   € ô œEŸH™H˜9¤e§h¡hÓ/Ð/r/   c                óT   — t        t        j                   t        j                  «      S rG   r‹   r.  s    r0   ÚtanzSymPyValueRangeAnalysis.tan„  rŒ   r/   c                óT   — t        t        j                   t        j                  «      S rG   r‹   r.  s    r0   ÚtanhzSymPyValueRangeAnalysis.tanhˆ  rg  r/   c                óT   — t        t        j                   t        j                  «      S rG   r‹   r.  s    r0   ÚasinzSymPyValueRangeAnalysis.asin�  rŒ   r/   c                óT   — t        t        j                   t        j                  «      S rG   r‹   r.  s    r0   ÚacoszSymPyValueRangeAnalysis.acos—  rŒ   r/   c                óT   — t        t        j                   t        j                  «      S rG   r‹   r.  s    r0   ÚatanzSymPyValueRangeAnalysis.atan¡  rŒ   r/   c                ó6   — t         j                  | t        «      S rG   )r%   rœ   r   r.  s    r0   ÚtrunczSymPyValueRangeAnalysis.trunc¦  s   € ä×)Ñ)¨!¬\Ó:Ð:r/   rG   )8r+   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  r2  r4  r7  r:  r6  rB  rE  r@  rI  rN  rP  rR  rT  rV  r\  r`  rb  rd  rf  ri  rk  rm  ro  rq  rs  r.   r/   r0   rÑ   rÑ   ¥  s  „ ñð
 ñ#ó ð#ðJ ò%ó ð%ð ñ9ó ð9ð ñ8ó ð8ð ñIó ðIð ñJó ðJð ñ4ó ð4ð ñ&ó ð&ð ñ#ó ð#ð ñ8ó ð8ð ñó ðð ñ&ó ð&ð ñ&ó ð&ð ñ
ó ð
ð
 ñTó ðTð& ñó ðð ñ
ó ð
ð ñ9ó ð9ð ñ&.ó ð&.ðP ñ.ó ð.ð ñ)ó ð)ð ñó ðð@ ñ*ó ð*ðX ñQó ðQð ñ7ó ð7ð ñ@ó ð@ð ñ@ó ð@ð ñ/ó ð/ð ñ/ó ð/ð ñCó ðCð
 ñXó ðXð ñ
ó ð
ð. ñ
ó ð
ð
 ñ
ó ð
ð
 ñ	6ó ð	6ð ñ>ó ð>ð ñAó ðAð ñ
Yó ð
Yð ñó ðð ñó ðð ñ&ó ð&ð ñ	ó ð	ð ñ&ó ð&ð
 ñ0ó ð0ð ñ0ó ð0ð ñ0ó ð0ð ñó ðð ñó ðð ñ0ó ð0ð ñ;ó ñ;r/   rÑ   c                  ó´   — e Zd Zdd„Zed„ «       Zed„ «       Zdd„Zdd„Zd„ Z	e
d„ «       Zeddd	„«       Zed
„ «       Zed„ «       Ze
d„ «       Ze
d„ «       Zd„ Zy)r&   c                óR   — d| _         d}|D ]  }t        | || j                  «       Œ y )Nr&   )ÚxorÚlogical_andÚ
logical_orÚlogical_not)ÚnameÚsetattrÚbool_handler)r\   Úboolean_operatorsÚops      r0   r`   zValueRangeAnalysis.__init__¬  s4   € Ø(ˆŒ	ð
Ðð $ò 	1ˆBÜ�D˜"˜d×/Ñ/Õ0ñ	1r/   c                 óR   — t        t        j                  t        j                  «      S rG   r�   ©r  Úkwargss     r0   r}  zValueRangeAnalysis.bool_handler·  s   € ô œ5Ÿ;™;¬¯
©
Ó3Ð3r/   c                 ó*   — t         j                  «       S rG   r(  r�  s     r0   Údefault_handlerz"ValueRangeAnalysis.default_handler¼  s   € ô ×"Ñ"Ó$Ð$r/   c                ó*   — t         j                  «       S rG   r(  )r\   r{  Úindexs      r0   ÚloadzValueRangeAnalysis.loadÂ  ó   € Ü×"Ñ"Ó$Ð$r/   Nc                 ó   — y rG   r.   )r\   r{  r†  rÙ   Úmodes        r0   ÚstorezValueRangeAnalysis.storeÅ  s   € Ør/   c                ó*   — t         j                  «       S rG   r(  )r\   r{  rÚ   rá   Úreduction_typer†  rÙ   s          r0   Ú	reductionzValueRangeAnalysis.reductionÈ  rˆ  r/   c                óJ   — t        |t        «      sJ ‚| j                  ||«      S rG   )r3   r%   râ   )r´   r†  rÚ   s      r0   Ú
index_exprzValueRangeAnalysis.index_exprË  s#   € ä˜%¤Ô-Ð-Ð-Ø�|‰|˜E 5Ó)Ð)r/   c                ó–  — t         j                  | «      } |t        j                  k(  r�| j	                  «       r"t         j                  | j
                  dk7  «      S | j                  r| S d| vr#t         j                  t        j                  «      S t        t        j                  t        j                  «      S d„ }| j                  rV| j	                  «       r,| j
                  rdnd}t         j                   |||«      «      S t         |d|«       |d|«      «      S t         || j
                  |«       || j                  |«      «      S )Nr   c                ó´   — |j                   rt        j                  | «      S | t        t         fv r| S 	 t        j                  | «      S # t
        $ r | cY S w xY wrG   )rÕ   r5   r>   r"   r9   re   )rt   rÚ   s     r0   Úcastz)ValueRangeAnalysis.to_dtype.<locals>.castÞ  sU   € à×&Ò&Ü—{‘{ 1“~Ð%àœ¤& Ð)Ñ)Ø�HðÜ Ÿ=™=¨Ó+Ð+øÜ ò à’Hðús   ´A	 Á	AÁAr   )r%   rr   rÔ   r4   r‰   rJ   rO   r5   r6   r7   rK   )rt   rÚ   rá   r“  Úvals        r0   râ   zValueRangeAnalysis.to_dtypeÐ  sù   € ä×Ñ˜QÓˆà”E—J‘JÒØ�~‰~ÔÜ"×'Ñ'¨¯©°1©Ó5Ð5Ø—’Ø�Ø˜!‘Ü"×'Ñ'¬¯
©
Ó3Ð3ä"¤5§;¡;´·
±
Ó;Ð;ò	ð �9Š9Ø�~‰~ÔØŸ7š7‘a¨�Ü"×'Ñ'©¨S°%Ó(8Ó9Ð9ä"¡4¨¨5£>±4¸¸5³>ÓBÐBô ™t A§G¡G¨UÓ3±T¸!¿'¹'À5Ó5IÓJÐJr/   c                ó0   — t         j                  | d„ «      S )Nc                ó   — t        | d«      S )Nr   )r   r-  s    r0   r  z+ValueRangeAnalysis.square.<locals>.<lambda>÷  s   € ¼LÈÈAÓ<N€ r/   )r%   r©   r.  s    r0   ÚsquarezValueRangeAnalysis.squareõ  s   € ä×.Ñ.¨qÑ2NÓOÐOr/   c                óJ   — t         j                  | t        j                  «      S rG   )r%   rž   rþ   Únegr.  s    r0   r™  zValueRangeAnalysis.negù  s   € ä×)Ñ)¨!¬X¯\©\Ó:Ð:r/   c                óz   — | j                  ||«      }|t        j                  «       k(  r|S | j                  |«      S rG   )r  r%   rn   rs  )r´   rµ   r¶   rt   s       r0   ÚtruncdivzValueRangeAnalysis.truncdiv   s6   € à�K‰K˜˜1ÓˆØ”×#Ñ#Ó%Ò%ØˆHà�y‰y˜‹|Ðr/   c                óD   — | j                  || j                  |«      «      S rG   )rÿ   r™  rð   s      r0   ÚsubzValueRangeAnalysis.sub  s   € à�w‰w�q˜#Ÿ'™' !›*Ó%Ð%r/   c                óF   — t         j                  d|«       | j                  S )Nzunhandled ValueRange op %s)r4  Údebugr„  )r\   r{  s     r0   Ú__getattr__zValueRangeAnalysis.__getattr__  s   € Ü�	‰	Ð.°Ô5Ø×#Ñ#Ð#r/   )r¹   r½   )r{  rº   r†  ú
sympy.ExprrG   )rÚ   ztorch.dtyperá   zOptional[torch.dtype])r+   r,   r-   r`   rÎ   r}  r„  r‡  r‹  rŽ  rÏ   r�  râ   r—  r™  r›  r�  r   r.   r/   r0   r&   r&   «  sÀ   „ ó	1ð ñ4ó ð4ð ñ%ó ð%ó
%óò%ð ñ*ó ð*ð ó"Kó ð"KðH ñPó ðPð ñ;ó ð;ð ñó ðð ñ&ó ð&ó$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                  r$i |j                  j                  j                  ¥‰¥Š‰ j                  ‰j!                  «       z
  }|rƒi }|D ]v  }|j"                  rO|j$                  rt        dt&        «      }nF|j(                  rt        dt&        «      }n)t        j+                  «       }nt        j-                  «       }|||<   Œx i ‰¥|¥Št/        t0        ‰‰ «      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  r2   N)Úfree_symbols)Ú.0ÚkrÝ   Úexprs      €r0   ú	<genexpr>z0bound_sympy.<locals>.<lambda>.<locals>.<genexpr>  s3   øè ø€ ò Ù"& ! Q¸AÀ×ARÑARÒ<R�"�Q�C�r˜!˜”ñùs   ƒ'š'Ú )ÚjoinÚitems)r©  rX  s   €€r0   r  zbound_sympy.<locals>.<lambda>  s=   ø€ ñ ð	 Ø�i‰ió Ø*0¯,©,«.ôó ñ€ ð
 ð r/   r   r   )r4  rŸ  r   r3   r5   rÓ   r%   rr   rÔ   Ú_guardsÚTracingContextÚtry_getÚ	fake_modeÚ	shape_envÚvar_to_ranger¦  ÚkeysrØ   Úis_positiver"   Úis_nonnegativerŽ   rn   r!   rÑ   )r©  rX  ÚcontextÚunbounded_varsÚunbounded_rangesÚsrQ   s   ``     r0   r'   r'     sD  ù€ ô ‡I�IØØÜôó	
ôô �$œŸ™Ô%Ü×Ñ Ó%Ð%àŠ\�r€Fô �m‰m×*Ñ*×2Ñ2Ó4€GÙ�7×$Ñ$×.Ò.ØG�G×%Ñ%×/Ñ/×<Ñ<ÐGÀÐGˆà×&Ñ&¨¯©«Ñ6€NÙð =?ÐØò 	%ˆAØ�|Š|Ø—=’=Ü$ Q¬Ó/‘BØ×%Ò%Ü$ Q¬Ó/‘Bä$×0Ñ0Ó2‘Bô !×(Ñ(Ó*�Ø"$Ð˜QÒð	%ð 0�FÐ/Ð.Ð/ˆäÔ/°¸Ó>Ð>r/   )rQ   úValueRanges[_T]r¹   z$TypeGuard[ValueRanges[SympyBoolean]])rQ   r»  r¹   z"TypeGuard[ValueRanges[sympy.Expr]]rG   )r©  r¡  rX  z)Optional[Dict[sympy.Symbol, ValueRanges]]r¹   r%   )OÚ
__future__r   Údataclassesr²   Úloggingr;   rþ   Útypingr   r   r   r   r   r	   r
   r   r   Útyping_extensionsr   r5   Úsympy.logic.boolalgr   rH   r   rÔ   Útorch._loggingr   Útorch._prims_commonr   r=  r   r   r   r   r   r   r   r   r   r   r   r   r   r    Úinterpr!   Únumbersr"   r#   r$   Ú	getLoggerr+   r4  Ú__all__r?   r(   ÚRuntimeErrorr*   rE   rL   rR   rT   r8   r:   r¼   r4   r¿   rÀ   rÇ   rÊ   rÈ   rË   rÉ   rÌ   Ú	dataclassr%   rÑ   r&   r'   r.   r/   r0   ú<module>rÊ     sÅ  ðå "ã Û Û Û Û ÷
÷ 
õ 
õ (ã ß Dã Ý %Ý -÷÷ ÷ ÷ õ  !ß =Ñ =ð €g×Ñ˜Ó!€â
>€áˆT�5—:‘:˜|Ó,€ô	�lô 	òFò2
)óóð 
ˆs�E˜5Ÿ:™:Ð%Ñ	&€Ø	ˆt�\Ð!Ñ	"€Øˆf�fˆnÑ€Ø	�5—:‘:�, §
¡
Ð*Ñ	+€Ø
�E—J‘J §
¡
Ð+¨U¯Z©ZÐ7Ñ
8€Ø	�<�. ,Ð.Ñ	/€Ø
�L ,Ð/°Ð=Ñ
>€Øˆf�fˆnÑ€Ø	ˆw˜ÐÑ	 €ð €×Ñ˜dÔ#ôj9�'˜"‘+ó j9ó $ðj9÷Z	C;ñ C;ôLc$Ð0ô c$ðN KOð-?Ø
ð-?ØGð-?àô-?r/   