§
    X�’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j3        e4¦  «        Z5ddgZ6 edej7        e¦  «        Z8 G d„ de9¦  «        Z:d„ Z;d„ Z<d'd„Z=d(d„Z>d)d„Z?e@eAz  ej7        z  ZBeCez  ZDeBeDz  ZEe	ej7        gej7        f         ZFe	ej7        ej7        gej7        f         ZGe	egef         ZHe	eegef         ZIeFeHz  ZJeGeIz  ZK ejL        d¬¦  «         G d„ dee8         ¦  «        ¦   «         ZM G d „ d!¦  «        ZN	 d*d+d&„ZOdS ),é    )Ú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dS )ÚValueRangeErrorN)Ú__name__Ú
__module__Ú__qualname__© ó    úMC:\Projects\DSCons\.venv\Lib\site-packages\torch\utils\_sympy\value_ranges.pyr(   r(   1   s   € € € € € Ø€Dr-   r(   c                ó’  — t          | t          ¦  «        r| rt          j        nt          j        S t          | t
          ¦  «        rt          j        | ¦  «        S t          | t          ¦  «        rGt          j	        | ¦  «        r| dk    rt          j
        nt          j
         S t          j        | ¦  «        S t          | t          j        ¦  «        rAt          | 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ÑÔð FØÐ/�uŒzˆz¥E¤KÐ/Ý	�A•sÑ	Ô	ð FÝŒ}˜QÑÔÐÝ	�A•uÑ	Ô	ð FåŒ:�a‰=Œ=ð 	4Ø  1šu˜u•5”8�8­5¬8¨)Ð3ÝŒ{˜1‰~Œ~ÐÝ	�A•u”zÑ	"Ô	"ð FÝ�q˜+ uÑ-Ô-ð 	$Ý  Ñ#Ô#Ð#ð
 •”	Š>ˆ>Ý Ð!:Ñ;Ô;Ð;ØˆÝ	�A•{Ñ	#Ô	#ð FØˆåÐDµd¸1±g´gÐDÐDÀÐDÐDÑEÔEÐEr-   c                ó  — t          | t          j        ¦  «        r/t          |t          j        ¦  «        st          d¦  «        ‚|| k    S t          | t          ¦  «        rt          |t          ¦  «        st          | |f¦  «        ‚| o|  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   s’   € Ý�%�œÑ$Ô$ð )Ý˜%¥¤Ñ,Ô,ð 	Ý ØGñô ð ð
 ˜Š~Ðõ ˜%¥Ñ.Ô.ð 	1µjÀÍÑ6UÔ6Uð 	1Ý  %¨ Ñ0Ô0Ð0ØÐ' %˜iÐ(Ð(r-   ÚvrúValueRanges[_T]Úreturnú$TypeGuard[ValueRanges[SympyBoolean]]c                ó   — | j         S ©N©Úis_bool©rK   s    r.   Ú
vr_is_boolrT   b   s
   € ØŒ:Ðr-   ú"TypeGuard[ValueRanges[sympy.Expr]]c                ó   — | j          S rP   rQ   rS   s    r.   Ú
vr_is_exprrW   f   s   € ØŒzˆ>Ðr-   úTypeIs[sympy.Integer]c                ó6   — t          | t          j        ¦  «        S rP   )r2   r4   r8   )Úvalues    r.   Úis_sympy_integerr[   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<   dBd
„ZedCd„¦   «         ZedDd„¦   «         ZdEd„ZdFd„ZdGd„Zd„ ZdHd„ZedId„¦   «         ZedJd„¦   «         ZdKd„ZedId„¦   «         ZedJd „¦   «         ZdKd!„ZdLd"„Zeej        dMd#„¦   «         ¦   «         Zeej        dMd$„¦   «         ¦   «         Zeej        dFd%„¦   «         ¦   «         ZeedNd)„¦   «         ¦   «         ZeedOd,„¦   «         ¦   «         ZedPd.„¦   «         ZedQd1„¦   «         ZeedQd2„¦   «         ¦   «         ZeedRd4„¦   «         ¦   «         ZedSd6„¦   «         ZedQd7„¦   «         ZedQd8„¦   «         Z eedTd;„¦   «         ¦   «         Z!eedUd=„¦   «         ¦   «         Z!edVd?„¦   «         Z!e"d@„ ¦   «         Z#dAS )Wr$   r&   rH   rI   r3   rR   Úis_intÚis_floatrM   Ústrc                ó(   — d| j         › d| j        › d�S )NzVR[z, ú]rG   ©Úselfs    r.   Ú__repr__zValueRanges.__repr__Œ   s   € Ø0�T”ZÐ0Ð0 4¤:Ð0Ð0Ð0Ð0r-   rd   úValueRanges[sympy.Expr]ÚExprInÚNonec                ó   — d S rP   r,   ©rd   rH   rI   s      r.   Ú__init__zValueRanges.__init__�   ó	   € ð
 ˆsr-   úValueRanges[SympyBoolean]ÚBoolInc                ó   — d S rP   r,   rj   s      r.   rk   zValueRanges.__init__–   rl   r-   ÚAllInc                ó<  — t          |¦  «        }t          |¦  «        }	 t          ||¦  «        st          d|› d|› d�¦  «        ‚n(# t          $ r}t          d|› d|› �¦  «        |‚d }~ww xY wt	          |t
          ¦  «        }t	          |t
          ¦  «        }||k    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                               | d|¦  «         t                               | d|¦  «         t                               | d|¦  «         t                               | d	| j         o|o|¦  «         	 t                               | d
| j         o| j         ¦  «         | j        s| j        s| j        st          ||f¦  «        ‚d S d S d S )NzInvalid ranges [ú:rb   zCould not compare z <= rH   rI   rR   r^   r_   )rD   rJ   r(   Ú	TypeErrorr2   rF   r@   r4   r8   r<   r!   r#   r"   ÚobjectÚ__setattr__rR   r^   r_   )	rd   rH   rI   rC   Úis_bool_lowerÚis_bool_upperÚinteger_typesÚis_int_lowerÚis_int_uppers	            r.   rk   zValueRanges.__init__�   sP  € Ý˜uÑ%Ô%ˆÝ˜uÑ%Ô%ˆð	LÝ# E¨5Ñ1Ô1ð KÝ%Ð&I¸Ð&IÐ&IÀÐ&IÐ&IÐ&IÑJÔJÐJðKøåð 	Lð 	Lð 	LÝÐC°ÐCÐC¸EÐCÐCÑDÔDÈ!ÐKøøøøð	Løøøõ # 5­,Ñ7Ô7ˆÝ" 5­,Ñ7Ô7ˆØ˜MÒ)Ð)Ý  %¨ Ñ0Ô0Ð0õ �e�Uœ]Ñ+Ô+ð 	°½¼Ò0AÐ0AÝˆEÝ�e�Uœ]Ñ+Ô+ð 	°½%¼(¸Ò0BÐ0BÝ�GˆEåœÕ(;½[ÐIˆÝ! %¨Ñ7Ô7ˆÝ! %¨Ñ7Ô7ˆõ 	×Ò˜4 ¨%Ñ0Ô0Ð0Ý×Ò˜4 ¨%Ñ0Ô0Ð0õ 	×Ò˜4 ¨MÑ:Ô:Ð:Ý×ÒØØØ”ÐÐ> Ð>°,ñ	
ô 	
ð 	
ð
	õ 	×Ò˜4 °´Ð-=Ð-QÀdÄkÀ/ÑRÔRÐRØŒ|ð 	1 D¤Kð 	1¸¼ð 	1Ý  %¨ Ñ0Ô0Ð0ð	1ð 	1ð 	1ð 	1ð 	1ð 	1s    &A Á
A,ÁA'Á'A,c                ó´   — t          | ¦  «        r| S | t                               ¦   «         k    rt                               ¦   «         S t	          d| › �¦  «        ‚)Nznot bool like )rT   r$   ÚunknownÚunknown_boolr@   rc   s    r.   ÚboolifyzValueRanges.boolifyÙ   sW   € Ý�dÑÔð 	:ØˆKØ•[×(Ò(Ñ*Ô*Ò*Ð*Ý×+Ò+Ñ-Ô-Ð-å Ð!8°$Ð!8Ð!8Ñ9Ô9Ð9r-   Úxc                ó\   — t                                |¦  «                             | ¦  «        S rP   )r$   ÚwrapÚissubset)rd   r   s     r.   Ú__contains__zValueRanges.__contains__á   s$   € Ý×Ò Ñ"Ô"×+Ò+¨DÑ1Ô1Ð1r-   c                óš   — ||                       ¦   «         u rdS t          |j        | j        ¦  «        ot          | j        |j        ¦  «        S )NT)Úunknown_intrJ   rH   rI   ©rd   Úothers     r.   r‚   zValueRanges.issubsetä   sO   € Ø�D×$Ò$Ñ&Ô&Ð&Ð&Ø�4Ý ¤¨T¬ZÑ8Ô8ð 
Õ=MØŒJ˜œñ>
ô >
ð 	
r-   c                ó   — | |z  S )z1Given two ValueRanges, returns their intersectionr,   r†   s     r.   ÚtightenzValueRanges.tightenë   s   € à�e‰|Ðr-   r‡   c                ó   — d S rP   r,   r†   s     r.   Ú__and__zValueRanges.__and__ð   ó	   € ð #& #r-   c                ó   — d S rP   r,   r†   s     r.   r‹   zValueRanges.__and__ö   ó	   € ð %( Cr-   ÚAllVRc                óÖ  — |t                                ¦   «         t                                ¦   «         fv r| S | t                                ¦   «         t                                ¦   «         fv r|S | j        |j        k    rt	          | |f¦  «        ‚| j        |j        k    rt	          | |f¦  «        ‚| j        |j        k    rt	          | |f¦  «        ‚| j        rJt          t          j        | j	        |j	        ¦  «        t          j
        | j        |j        ¦  «        ¦  «        S t          t          j        | j	        |j	        ¦  «        t          j        | j        |j        ¦  «        ¦  «        S rP   )r$   r|   r…   rR   r@   r^   r_   r4   ÚOrrH   ÚAndrI   ÚMaxÚMinr†   s     r.   r‹   zValueRanges.__and__ü   s9  € Ø•[×(Ò(Ñ*Ô*­K×,CÒ,CÑ,EÔ,EÐFÐFÐFØˆKØ•K×'Ò'Ñ)Ô)­;×+BÒ+BÑ+DÔ+DÐEÐEÐEØˆLØŒ<˜5œ=Ò(Ð(Ý  $¨ Ñ/Ô/Ð/ØŒ;˜%œ,Ò&Ð&Ý  $¨ Ñ/Ô/Ð/ØŒ=˜EœNÒ*Ð*Ý  $¨ Ñ/Ô/Ð/ØŒ<ð 	ÝÝ”˜œ U¤[Ñ1Ô1µ5´9¸T¼ZÈÌÑ3UÔ3Uñô ð õ Ý”	˜$œ* e¤kÑ2Ô2µE´I¸d¼jÈ%Ì+Ñ4VÔ4Vñô ð r-   c                ó   — d S rP   r,   r†   s     r.   Ú__or__zValueRanges.__or__  rŒ   r-   c                ó   — d S rP   r,   r†   s     r.   r–   zValueRanges.__or__  rŽ   r-   c                ój  — t                                ¦   «         | |fv rt                                ¦   «         S | j        |j        k    rt          | |f¦  «        ‚| j        |j        k    rt          | |f¦  «        ‚| j        |j        k    rt          | |f¦  «        ‚| j        rJt          t          j        | j        |j        ¦  «        t          j	        | j
        |j
        ¦  «        ¦  «        S t          t          j        | j        |j        ¦  «        t          j        | j
        |j
        ¦  «        ¦  «        S rP   )r$   r|   rR   r@   r^   r_   r4   r’   rH   r‘   rI   r”   r“   r†   s     r.   r–   zValueRanges.__or__  s  € Ý×ÒÑ Ô  T¨5 MÐ1Ð1Ý×&Ò&Ñ(Ô(Ð(ØŒ<˜5œ=Ò(Ð(Ý  $¨ Ñ/Ô/Ð/ØŒ;˜%œ,Ò&Ð&Ý  $¨ Ñ/Ô/Ð/ØŒ=˜EœNÒ*Ð*Ý  $¨ Ñ/Ô/Ð/ØŒ<ð 	ÝÝ”	˜$œ* e¤kÑ2Ô2µE´H¸T¼ZÈÌÑ4UÔ4Uñô ð õ Ý”	˜$œ* e¤kÑ2Ô2µE´I¸d¼jÈ%Ì+Ñ4VÔ4Vñô ð r-   c                ó"   — | j         | j        k    S rP   rG   rc   s    r.   Úis_singletonzValueRanges.is_singleton/  s   € ØŒz˜TœZÒ'Ð'r-   c                 óL   — t          t          j         t          j        ¦  «        S rP   ©r$   r4   r<   r,   r-   r.   r|   zValueRanges.unknown2  ó   € õ �EœH˜9¥e¤hÑ/Ô/Ð/r-   c                 ó8   — t          t           t          ¦  «        S rP   )r$   r!   r,   r-   r.   r…   zValueRanges.unknown_int7  s   € õ �F˜7¥FÑ+Ô+Ð+r-   c                 óJ   — t          t          j        t          j        ¦  «        S rP   )r$   r4   r6   r5   r,   r-   r.   r}   zValueRanges.unknown_bool<  s   € õ �5œ;­¬
Ñ3Ô3Ð3r-   ÚargúExprIn | ExprVRÚExprVRc                ó   — d S rP   r,   ©r    s    r.   r�   zValueRanges.wrapA  s	   € ð 	ˆr-   úBoolIn | BoolVRÚBoolVRc                ó   — d S rP   r,   r¤   s    r.   r�   zValueRanges.wrapG  ó	   € ð 	ˆr-   úAllIn | AllVRc                óÔ   — t          | t          ¦  «        r| S t          | t          ¦  «        r-t          j        | ¦  «        rt                               ¦   «         S t          | | ¦  «        S rP   )r2   r$   r9   r:   Úisnanr|   r¤   s    r.   r�   zValueRanges.wrapL  s\   € å�c�;Ñ'Ô'ð 	ØˆJÝ�c�5Ñ!Ô!ð 	)¥d¤j°¡o¤oð 	)Ý×&Ò&Ñ(Ô(Ð(å˜3 Ñ$Ô$Ð$r-   ÚfnÚExprFnc                óŽ   — t                                | ¦  «        } t           || j        ¦  «         || j        ¦  «        ¦  «        S )z#Increasing: x <= y => f(x) <= f(y).©r$   r�   rH   rI   ©r   r¬   s     r.   Úincreasing_mapzValueRanges.increasing_mapU  s;   € õ ×Ò˜QÑÔˆÝ˜2˜2˜aœg™;œ;¨¨¨1¬7©¬Ñ4Ô4Ð4r-   c                ó   — d S rP   r,   r°   s     r.   Údecreasing_mapzValueRanges.decreasing_map[  s   € àBEÀ#r-   ÚBoolFnc                ó   — d S rP   r,   r°   s     r.   r³   zValueRanges.decreasing_map_  r¨   r-   ÚAllFnc                óŽ   — t                                | ¦  «        } t           || j        ¦  «         || j        ¦  «        ¦  «        S )z#Decreasing: x <= y => f(x) >= f(y).)r$   r�   rI   rH   r°   s     r.   r³   zValueRanges.decreasing_mapd  s;   € õ ×Ò˜QÑÔˆå˜2˜2˜aœg™;œ;¨¨¨1¬7©¬Ñ4Ô4Ð4r-   c                óÎ   — t                                | ¦  «        }  || j        ¦  «        } || j        ¦  «        }t          t	          ||¦  «        t          ||¦  «        ¦  «        S )zIt's increasing or decreasing.)r$   r�   rH   rI   ÚminÚmax)r   r¬   ÚlÚus       r.   Úmonotone_mapzValueRanges.monotone_mapk  sU   € õ ×Ò˜QÑÔˆØˆBˆqŒw‰KŒKˆØˆBˆqŒw‰KŒKˆÝ�3˜q !™9œ9¥c¨!¨Q¡i¤iÑ0Ô0Ð0r-   c                ó~  — t                                | ¦  «        } d| v r…t           || j        ¦  «         || j        ¦  «        ¦  «        }t          |¦  «        }t          |t          j        ¦  «        s|t          j	        k    rt          d|¦  «        S t          d|¦  «        S t            
                    | |¦  «        S )z$Fn is convex and has a minimum at 0.r   ç        )r$   r�   rº   rH   rI   rD   r2   r4   r=   r<   r½   )r   r¬   rI   s      r.   Úconvex_min_zero_mapzValueRanges.convex_min_zero_maps  s¦   € õ ×Ò˜QÑÔˆØ�ˆ6ˆ6Ý˜˜˜1œ7™œ R R¨¬¡[¤[Ñ1Ô1ˆEÝ" 5Ñ)Ô)ˆEÝ˜%¥¤Ñ-Ô-ð /°½%¼(Ò1BÐ1BÝ" 3¨Ñ.Ô.Ð.Ý˜q %Ñ(Ô(Ð(Ý×'Ò'¨¨2Ñ.Ô.Ð.r-   ÚyÚExprFn2c                ó   — d S rP   r,   ©r   rÁ   r¬   s      r.   Úcoordinatewise_increasing_mapz)ValueRanges.coordinatewise_increasing_map  ó	   € ð �r-   ÚBoolFn2c                ó   — d S rP   r,   rÄ   s      r.   rÅ   z)ValueRanges.coordinatewise_increasing_map‡  rÆ   r-   ÚAllFn2c                óÚ   — t                                | ¦  «        t                                |¦  «        }} t           || j        |j        ¦  «         || j        |j        ¦  «        ¦  «        S )z¶
        It's increasing on each coordinate.

        Mathematically:
        For every 1 <= i <= n and x_i <= y_i we have that
        f(x1, .., xn) <= f(x1, , yi, ..., xn)
        r¯   rÄ   s      r.   rÅ   z)ValueRanges.coordinatewise_increasing_map�  sa   € õ ×Ò Ñ"Ô"¥K×$4Ò$4°QÑ$7Ô$7ˆ1ˆÝØˆBˆqŒw˜œÑ Ô ØˆBˆqŒw˜œÑ Ô ñ
ô 
ð 	
r-   c                ó  ‡— |                       |¦  «        |                       |¦  «        }}ˆfd„t          j        |j        |j        g|j        |j        g¦  «        D ¦   «         }t          t          |¦  «        t          |¦  «        ¦  «        S )z1It's increasing or decreasing on each coordinate.c                ó.   •— g | ]\  }} ‰||¦  «        ‘ŒS r,   r,   )Ú.0ÚaÚbr¬   s      €r.   ú
<listcomp>z;ValueRanges.coordinatewise_monotone_map.<locals>.<listcomp>¦  s7   ø€ ð 
ð 
ð 
á��1ð ˆBˆq�!‰HŒHð
ð 
ð 
r-   )r�   Ú	itertoolsÚproductrH   rI   r$   r¹   rº   )Úclsr   rÁ   r¬   Úproductss      ` r.   Úcoordinatewise_monotone_mapz'ValueRanges.coordinatewise_monotone_map¢  s‡   ø€ ð �xŠx˜‰{Œ{˜CŸHšH Q™KœKˆ1ˆð
ð 
ð 
ð 
å!Ô)¨1¬7°A´GÐ*<¸q¼wÈÌÐ>PÑQÔQð
ñ 
ô 
ˆõ �3˜x™=œ=­#¨h©-¬-Ñ8Ô8Ð8r-   N)rM   r`   )rd   rf   rH   rg   rI   rg   rM   rh   )rd   rm   rH   rn   rI   rn   rM   rh   )rH   rp   rI   rp   rM   rh   )rM   rm   )r   rp   rM   r3   )rM   r$   )rd   rf   r‡   rf   rM   rf   )rd   rm   r‡   rm   rM   rm   )rd   r�   r‡   r�   rM   r�   )rM   r3   )rM   rf   )r    r¡   rM   r¢   )r    r¥   rM   r¦   )r    r©   rM   r�   )r   r¡   r¬   r­   rM   r¢   )r   r¥   r¬   r´   rM   r¦   )r   r©   r¬   r¶   rM   r�   )r   r¡   rÁ   r¡   r¬   rÂ   rM   r¢   )r   r¥   rÁ   r¥   r¬   rÇ   rM   r¦   )r   r©   rÁ   r©   r¬   rÉ   rM   r�   )$r)   r*   r+   r   r$   r4   r>   r¢   rF   r¦   r�   Ú__annotations__re   r   rk   r~   rƒ   r‚   r‰   r‹   r–   rš   ÚstaticmethodÚ	functoolsÚcacher|   r…   r}   r�   r±   r³   r½   rÀ   rÅ   ÚclassmethodrÕ   r,   r-   r.   r$   r$   y   s/  € € € € € € àð  ð ˜UœZÔ(ˆà˜\Ô*ˆØ˜‘ˆð
 €I€I�IØ€I€I�IØ€M€M�MØ€L€L�LØ€N€N�Nð1ð 1ð 1ð 1ð ðð ð ñ „Xðð ðð ð ñ „Xðð:1ð :1ð :1ð :1ðx:ð :ð :ð :ð2ð 2ð 2ð 2ð
ð 
ð 
ðð ð ð ð
 ð&ð &ð &ñ „Xð&ð
 ð(ð (ð (ñ „Xð(ð
ð ð ð ð* ð&ð &ð &ñ „Xð&ð
 ð(ð (ð (ñ „Xð(ð
ð ð ð ð$(ð (ð (ð (ð Ø„_ð0ð 0ð 0ñ „_ñ „\ð0ð Ø„_ð,ð ,ð ,ñ „_ñ „\ð,ð Ø„_ð4ð 4ð 4ñ „_ñ „\ð4ð Øðð ð ñ „\ñ „Xðð Øðð ð ñ „\ñ „Xðð ð%ð %ð %ñ „\ð%ð ð5ð 5ð 5ñ „\ð5ð
 ØØEÐEÐEñ „\ñ „XàEàØðð ð ñ „\ñ „Xðð ð5ð 5ð 5ñ „\ð5ð ð1ð 1ð 1ñ „\ð1ð ð	/ð 	/ð 	/ñ „\ð	/ð Øðð ð ñ „\ñ „Xðð Øðð ð ñ „\ñ „Xðð ð
ð 
ð 
ñ „\ð
ð$ ð9ð 9ñ „[ð9ð 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=dS )<Ú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*|                      ¦   «         st          d¦  «        ‚| j        } t          | t
          t          t          f¦  «        }|sKt          | t          t          j
        t          j        f¦  «        st          dt          | ¦  «        › �¦  «        ‚t          | t          ¦  «        rvt          j        | ¦  «        rb|t           j        k    rt                               ¦   «         S |j        rt                               ¦   «         S t                               ¦   «         S |rt+          |¦  «        } || ¦  «        } nz|t           j        k    r%t          | t          ¦  «        st          d¦  «        ‚nE|j        r| j        r| j        st          d¦  «        ‚n t1          | dd¦  «        st          d¦  «        ‚t                               | ¦  «        }|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«   Útorchr}   Úis_floating_pointr|   r…   r   Ú	is_finiteÚis_realr?   r�   )rZ   ÚdtypeÚ	is_pythonÚtype_Úrs        r.   Úconstantz SymPyValueRangeAnalysis.constant³  sá  € å�e�[Ñ)Ô)ð 	 Ø×%Ò%Ñ'Ô'ð WÝ$Ð%UÑVÔVÐVØ”KˆEå˜u¥s­Eµ4Ð&8Ñ9Ô9ˆ	Øð 	R¥Ø•K¥¤µ´Ð=ñ"
ô "
ð 	Rõ !Ð!PÅ4ÈÁ;Ä;Ð!PÐ!PÑQÔQÐQõ �e�]Ñ+Ô+ð 	1µ´
¸5Ñ0AÔ0Að 	1Ø�œ
Ò"Ð"Ý"×/Ò/Ñ1Ô1Ð1ØÔ(ð 1Ý"×*Ò*Ñ,Ô,Ð,å"×.Ò.Ñ0Ô0Ð0àð 	WÝ! %Ñ(Ô(ˆEØ�E˜%‘L”LˆEˆEð �œ
Ò"Ð"Ý! %­Ñ5Ô5ð PÝ(Ð)NÑOÔOÐOðPàÔ(ð 	Wà”?ð ¨5¬=ð Ý(ØIñô ð øõ
 ˜u l°EÑ:Ô:ð WÝ(Ð)UÑVÔVÐVå×Ò˜UÑ#Ô#ˆØˆr-   Nc                ó&  — |t           j        k    r t                               | t          ¦  «        S |t           j        k    rt                               ¦   «         S |j        st                               ¦   «         S t           	                    ¦   «         S rP   )
rà   Úfloat64r$   r±   r   r3   r}   rá   r…   r|   )rÎ   rä   Ú	src_dtypes      r.   Úto_dtypez SymPyValueRangeAnalysis.to_dtypeá  ss   € à•E”MÒ!Ð!å×-Ò-¨aµÑ9Ô9Ð9Ø•e”jÒ Ð Ý×+Ò+Ñ-Ô-Ð-ØÔ(ð 	-Ý×*Ò*Ñ,Ô,Ð,Ý×"Ò"Ñ$Ô$Ð$r-   c                óB   — t                                | t          ¦  «        S rP   )r$   r±   r   )rÎ   rä   s     r.   Útrunc_to_intz$SymPyValueRangeAnalysis.trunc_to_intì  s   € õ ×)Ò)¨!­ZÑ8Ô8Ð8r-   c                óÔ   — t                                | ¦  «        } |                      ¦   «         } | j        st	          d¦  «        ‚t                                | t          j        ¦  «        S )Nz"not_ expects a boolean ValueRanges)r$   r�   r~   rR   r@   r³   r4   ÚNot)rÎ   s    r.   Únot_zSymPyValueRangeAnalysis.not_ñ  sT   € å×Ò˜QÑÔˆØ�IŠI‰KŒKˆØŒyð 	GÝ Ð!EÑFÔFÐFÝ×)Ò)¨!­U¬YÑ7Ô7Ð7r-   c                óN   — t                                | |t          j        ¦  «        S rP   )r$   rÅ   r4   r‘   ©rÎ   rÏ   s     r.   Úor_zSymPyValueRangeAnalysis.or_ù  s   € å×8Ò8¸¸A½u¼xÑHÔHÐHr-   c                óN   — t                                | |t          j        ¦  «        S rP   )r$   rÅ   r4   r’   ró   s     r.   Úand_zSymPyValueRangeAnalysis.and_ý  s   € å×8Ò8¸¸A½u¼yÑIÔIÐIr-   c                óü   — |                       ¦   «         r5t                               t          j        | j        rdnd¦  «        ¦  «        S t          t          j        d¦  «        t          j        d¦  «        ¦  «        S ©Nr   r   )rš   r$   r�   r4   r8   rH   ©r   s    r.   Ú_bool_to_intz$SymPyValueRangeAnalysis._bool_to_int  sb   € à�>Š>ÑÔð 	CÝ×#Ò#¥E¤M°q´wÐ2E°!°!ÀAÑ$FÔ$FÑGÔGÐGå�uœ}¨QÑ/Ô/µ´¸qÑ1AÔ1AÑBÔBÐBr-   c                óv  — t                                |¦  «        t                                |¦  «        }}|j        r|j        r|                      ||¦  «        S |j        r|                      |¦  «        }|j        r|                      |¦  «        }t          |j        |j        ¦  «        }|dk     r`|t          j         k    rO|t           k    rC	 dt          | dz
  ¦  «                             ¦   «         z   }n# t          $ r t           }Y nw xY wd}t          |t          |j        |j        ¦  «        ¦  «        S )Nr   r   )r$   r�   rR   rö   rú   r¹   rH   r4   r<   r!   r7   Ú
bit_lengthÚ	Exceptionrº   rI   )rÓ   rÎ   rÏ   rH   s       r.   Úbitwise_andz#SymPyValueRangeAnalysis.bitwise_and  s3  € å×Ò Ñ"Ô"¥K×$4Ò$4°QÑ$7Ô$7ˆ1ˆØŒ9ð 	"˜œð 	"Ø—8’8˜A˜q‘>”>Ð!ØŒ9ð 	$Ø× Ò  Ñ#Ô#ˆAØŒ9ð 	$Ø× Ò  Ñ#Ô#ˆAÝ�A”G˜QœWÑ%Ô%ˆØ�1Š9ˆ9˜¥5¤8 )Ò+Ð+°½&¸Ò0@Ð0@ð Ø�s E 6¨A¡:™œ×9Ò9Ñ;Ô;Ñ;Ð<��øÝð  ð  ð  Ý˜���ð øøøð ˆEÝ˜5¥# a¤g¨q¬wÑ"7Ô"7Ñ8Ô8Ð8s   Ã)C9 Ã9DÄDc                óŠ  — t                                |¦  «        t                                |¦  «        }}|j        r|j        r|                      ||¦  «        S |j        r|                      |¦  «        }|j        r|                      |¦  «        }t          |j        |j        ¦  «        }|dk    rd}ni|dk    r[|t          j        k    rK|t          k    r@	 dt          |¦  «                             ¦   «         z  dz
  }n# t          $ r
 t          }Y nw xY w|dk     rd}t          t          |j        |j        ¦  «        |¦  «        S )Nr   r   éÿÿÿÿ)r$   r�   rR   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Ô$7ˆ1ˆØŒ9ð 	!˜œð 	!Ø—7’7˜1˜a‘=”=Ð ØŒ9ð 	$Ø× Ò  Ñ#Ô#ˆAØŒ9ð 	$Ø× Ò  Ñ#Ô#ˆAÝ�A”G˜QœWÑ%Ô%ˆØ�AŠ:ˆ:ØˆEˆEØ�QŠYˆY˜5¥E¤HÒ,Ð,°½&²°ðØ�c %™jœj×3Ò3Ñ5Ô5Ñ5¸Ñ:��øÝð ð ð Ý���ðøøøà�QŠYˆYØˆEÝ�3˜qœw¨¬Ñ0Ô0°%Ñ8Ô8Ð8s   Ã'C> Ã>DÄDc                ó”  — t                                |¦  «        t                                |¦  «        }}|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        }}n4|rt          j        x}}n#|rt          j        x}}nt          d|› �¦  «        ‚t          ||¦  «        S |j        r|  
                    |¦  «        }|j        r|  
                    |¦  «        }|j        |j        k    rW|j        |j        k    rGt          |j        ¦  «        r3t          |j        ¦  «        r|j        |j        z  }t          ||¦  «        S t          t           t          ¦  «        S )Nc              3  ó6   K  — | ]}|t           j        k    V — Œd S rP   )r4   r6   ©rÍ   Úbounds     r.   ú	<genexpr>z6SymPyValueRangeAnalysis.bitwise_xor.<locals>.<genexpr>A  s)   è è € ÐEÐE°U˜E¥U¤[Ò0ÐEÐEÐEÐEÐEÐEr-   c              3  ó6   K  — | ]}|t           j        k    V — Œd S rP   ©r4   r5   r  s     r.   r  z6SymPyValueRangeAnalysis.bitwise_xor.<locals>.<genexpr>B  s)   è è € ÐCÐC°5˜5¥E¤JÒ.ÐCÐCÐCÐCÐCÐCr-   zNon-boolean xor result: )r$   r�   rR   rH   rI   Úanyr4   r6   r5   r@   rú   r[   r!   )	rÓ   rÎ   rÏ   ÚboundsÚ	has_falseÚhas_truerH   rI   Úvalue_ranges	            r.   Úbitwise_xorz#SymPyValueRangeAnalysis.bitwise_xor6  sÎ  € å×Ò Ñ"Ô"¥K×$4Ò$4°QÑ$7Ô$7ˆ1ˆØŒ9ð 	-˜œð 	-à”˜!œ'Ñ!Ø”˜!œ'Ñ!Ø”˜!œ'Ñ!Ø”˜!œ'Ñ!ð	ˆFõ ÐEÐE¸fÐEÑEÔEÑEÔEˆIÝÐCÐC¸FÐCÑCÔCÑCÔCˆHàð J˜Xð JÝ$œ{­E¬J�u��Øð JÝ %¤
Ð*�˜˜Øð JÝ %¤Ð+�˜˜å$Ð%HÀÐ%HÐ%HÑIÔIÐIå˜u eÑ,Ô,Ð,ØŒ9ð 	$Ø× Ò  Ñ#Ô#ˆAØŒ9ð 	$Ø× Ò  Ñ#Ô#ˆAàŒG�q”wÒÐØ”˜1œ7Ò"Ð"Ý  ¤Ñ)Ô)ð #å  ¤Ñ)Ô)ð #ð œ' A¤GÑ+ˆKÝ˜{¨KÑ8Ô8Ð8Ý�F˜7¥FÑ+Ô+Ð+r-   c                óò  — t                                | ¦  «        } t                                |¦  «        }|                      ¦   «         rH|                     ¦   «         r4| j        |j        k    r$t                                t          j        ¦  «        S | j        |j        k    s|j        | j        k    r$t                                t          j        ¦  «        S t          t          j        t          j        ¦  «        S rP   )r$   r�   rš   rH   r4   r5   rI   r6   ró   s     r.   ÚeqzSymPyValueRangeAnalysis.eq\  s¶   € å×Ò˜QÑÔˆÝ×Ò˜QÑÔˆØ�>Š>ÑÔð 	1 §¢Ñ 0Ô 0ð 	1°Q´WÀÄÒ5GÐ5GÝ×#Ò#¥E¤JÑ/Ô/Ð/ØŒW�q”wÒÐ !¤'¨A¬GÒ"3Ð"3Ý×#Ò#¥E¤KÑ0Ô0Ð0Ý�5œ;­¬
Ñ3Ô3Ð3r-   c                óT   — |                       |                      ||¦  «        ¦  «        S rP   )rñ   r  ©rÓ   rÎ   rÏ   s      r.   ÚnezSymPyValueRangeAnalysis.nef  ó    € à�xŠx˜Ÿš˜q !™œÑ%Ô%Ð%r-   c                ó6   — t                                |¦  «        S rP   )r$   r�   )rÓ   rÎ   s     r.   Úidentityz SymPyValueRangeAnalysis.identityj  s   € å×Ò Ñ"Ô"Ð"r-   c                ó   — t                                |¦  «        }t                                |¦  «        }|j        |j        k    rt          d¦  «        ‚|j        r)|                      |                      |¦  «        |¦  «        S |j        |j        k     r$t                                t          j	        ¦  «        S |j        |j        k    r$t                                t          j
        ¦  «        S t          t          j
        t          j	        ¦  «        S )Nú=operands must both be boolean ValueRanges or both non-boolean)r$   r�   rR   r@   rö   rñ   rI   rH   r4   r5   r6   r  s      r.   ÚltzSymPyValueRangeAnalysis.ltn  sÔ   € å×Ò˜QÑÔˆÝ×Ò˜QÑÔˆØŒ9˜œ	Ò!Ð!Ý ØOñô ð ð Œ9ð 	8Ø—8’8˜CŸHšH Q™KœK¨Ñ+Ô+Ð+àŒw˜œÒ Ð Ý"×'Ò'­¬
Ñ3Ô3Ð3Ø”˜AœGÒ#Ð#Ý"×'Ò'­¬Ñ4Ô4Ð4Ý�uœ{­E¬JÑ7Ô7Ð7r-   c                ó.   — |                       ||¦  «        S rP   )r  r  s      r.   ÚgtzSymPyValueRangeAnalysis.gt  s   € à�vŠv�a˜‰|Œ|Ðr-   c                óT   — |                       |                      ||¦  «        ¦  «        S rP   )rñ   r  r  s      r.   ÚlezSymPyValueRangeAnalysis.leƒ  r  r-   c                óT   — |                       |                      ||¦  «        ¦  «        S rP   )rñ   r  r  s      r.   ÚgezSymPyValueRangeAnalysis.ge‡  r  r-   c                óh   — t                                | |t          t          j        ¦  «        ¦  «        S rP   )r$   rÅ   r   ÚoperatorÚaddró   s     r.   r"  zSymPyValueRangeAnalysis.add‹  s+   € å×8Ò8Øˆq•+�hœlÑ+Ô+ñ
ô 
ð 	
r-   c                ó:  — t                                |¦  «        }t                                |¦  «        }|j        |j        k    rt          d¦  «        ‚|j        r|                      ||¦  «        S d„ }t                                ||t          |¦  «        ¦  «        S )Nr  c                óD   — | 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�  s7   € à�CŠxˆx˜1 š6˜6Ø�Ø�c’�˜Q !šV˜VØ�à˜1‘u�r-   )r$   r�   rR   r@   rö   rÕ   r   )rÓ   rÎ   rÏ   r%  s       r.   ÚmulzSymPyValueRangeAnalysis.mul‘  s›   € å×Ò˜QÑÔˆÝ×Ò˜QÑÔˆàŒ9˜œ	Ò!Ð!Ý ØOñô ð ð Œ9ð 	"Ø—8’8˜A˜q‘>”>Ð!ð	ð 	ð 	õ ×6Ò6°q¸!½[ÈÑ=RÔ=RÑSÔSÐSr-   c                óL  — t                                | ¦  «        } t                                |¦  «        }d|v s&t           | v s	t          | v r,t           |v s	t          |v rt                                ¦   «         S t                                | |t          t          ¦  «        ¦  «        S ©Nr   )r$   r�   r!   r|   rÕ   r   r   ró   s     r.   Úint_truedivz#SymPyValueRangeAnalysis.int_truediv¨  s‘   € å×Ò˜QÑÔˆÝ×Ò˜QÑÔˆØ�ˆ6ˆ6��w !�|�|¥v° { {½&¸ÀA¸¸ÍÐSTÈÈÝ×&Ò&Ñ(Ô(Ð(å×:Ò:ØØÝ�JÑ'Ô'ñô ð r-   c                ót  — t                                | ¦  «        } t                                |¦  «        }d|v s:t          j         | v st          j        | v r6t          j         |v st          j        |v rt                                ¦   «         S t                                | |t          t          ¦  «        ¦  «        S r(  )r$   r�   r4   r<   r|   rÕ   r   r   ró   s     r.   ÚtruedivzSymPyValueRangeAnalysis.truedivµ  sš   € å×Ò˜QÑÔˆÝ×Ò˜QÑÔˆØ�ˆ6ˆ6ÝŒhˆY˜!ˆ^ˆ^�uœx¨1˜}˜}µE´H°9À°>°>ÅUÄXÐQRÀ]À]å×&Ò&Ñ(Ô(Ð(å×:Ò:ØØÝ�LÑ)Ô)ñô ð r-   c                ó®  — t                                | ¦  «        } t                                |¦  «        }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                                ¦   «         S g }t          j        | j        | j        g|j        |j        g¦  «        D ]}\  }}t          ||¦  «        }|t          j
        u rE|                     t          j        |¦  «        t          j        |¦  «        z  t          z  ¦  «         Œh|                     |¦  «         Œ~t          t          |¦  «        t          |¦  «        ¦  «        S r(  )r$   r�   rH   r!   rI   r…   rÑ   rÒ   r   r4   rA   ÚappendÚsignr¹   rº   )rÎ   rÏ   rÔ   r   rÁ   rç   s         r.   Úfloordivz SymPyValueRangeAnalysis.floordivÄ  sŒ  € å×Ò˜QÑÔˆÝ×Ò˜QÑÔˆð �ˆ6ˆ6ØŒw˜!Š|ˆ| ¤¨1¢ Ý" 1¥fÑ-Ô-Ð-ØŒw˜!Š|ˆ| ¤¨1¢ Ý" 1¥fÑ-Ô-Ð-ØŒw˜!Š|ˆ| ¤¨1¢ Ý"¥F 7¨AÑ.Ô.Ð.ØŒw˜!Š|ˆ| ¤¨1¢ Ý"¥F 7¨AÑ.Ô.Ð.Ý×*Ò*Ñ,Ô,Ð,ØˆÝÔ% q¤w°´Ð&8¸1¼7ÀAÄGÐ:LÑMÔMð 	#ð 	#‰DˆAˆqÝ˜˜A‘”ˆAØ•E”Iˆ~ˆ~Ø—’¥¤¨A¡¤µ´¸A±´Ñ!>Å&Ñ HÑIÔIÐIÐIà—’ Ñ"Ô"Ð"Ð"å�3˜x™=œ=­#¨h©-¬-Ñ8Ô8Ð8r-   c                óâ  ‡‡— t                                |¦  «        }t                                |¦  «        }d„ Šd„ }d|v rt                                ¦   «         S |                     ¦   «         rÕt	          |j        ¦  «        Š ||j        ‰¦  «         ||j        ‰¦  «        k    rt                                |ˆˆfd„¦  «        S |j        dk     rt          ‰ dz   d¦  «        S |j        dk    rt          d‰dz
  ¦  «        S t          ‰ dz   |j        ¦  «        }t          ‰dz
  |j        ¦  «        }t          ||¦  «        S |                      |¦  «        j        dz
  }t          | |¦  «        S )Nc                óZ   — 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œ6‘/ˆCØ�1ŠuˆuØ�r‘	�ØˆJr-   c                óh   — | |z  }|j         r%|t          t           fvrt          j        |¦  «        n|S rP   )râ   r!   r4   r8   )rÎ   rÏ   r   s      r.   Úc_divz*SymPyValueRangeAnalysis.mod.<locals>.c_divê  s9   € Ø�A‘ˆAØ'(¤{ÐX°qÅÍ&ÈÐ@QÐ7QÐ7Q•5”= Ñ#Ô#Ð#ÐWXÐXr-   r   c                ó   •—  ‰| ‰¦  «        S rP   r,   )r¼   r4  Úy_vals    €€r.   ú<lambda>z-SymPyValueRangeAnalysis.mod.<locals>.<lambda>ö  s   ø€ ¸u¸uÀQÈ¹¼€ r-   r   )
r$   r�   r…   rš   r2  rH   rI   r±   rº   r¹   )rÓ   r   rÁ   r6  rH   rI   r4  r8  s         @@r.   ÚmodzSymPyValueRangeAnalysis.modÞ  s|  øø€ å×Ò˜QÑÔˆÝ×Ò˜QÑÔˆð	ð 	ð 	ð	Yð 	Yð 	Yð �ˆ6ˆ6Ý×*Ò*Ñ,Ô,Ð,Ø�^Š^ÑÔð 	.Ý˜œ‘L”LˆEð ˆu�Q”W˜eÑ$Ô$¨¨¨a¬g°uÑ(=Ô(=Ò=Ð=Ý"×1Ò1°!Ð5NÐ5NÐ5NÐ5NÐ5NÑOÔOÐOØŒw˜Š{ˆ{å" E 6¨A¡:¨qÑ1Ô1Ð1Ø”˜1’�å" 1 e¨a¡iÑ0Ô0Ð0õ ˜U˜F Q™J¨¬Ñ0Ô0�Ý˜E A™I q¤wÑ/Ô/�Ý" 5¨%Ñ0Ô0Ð0ð —G’G˜A‘J”JÔ$ qÑ(ˆEÝ ˜v uÑ-Ô-Ð-r-   c                óH  — t                                |¦  «        }t                                |¦  «        }|j        dk    r&|j        dk    rt                               ||¦  «        S |j        dk     r
|j        dz   nd}|j        dk    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$   r�   rH   rÜ   r:  rI   )rÓ   r   rÁ   rH   rI   s        r.   Ú
python_modz"SymPyValueRangeAnalysis.python_mod  s—   € õ ×Ò˜QÑÔˆÝ×Ò˜QÑÔˆØŒ7�aŠ<ˆ<˜AœG qšL˜LÝ*×.Ò.¨q°!Ñ4Ô4Ð4Ø œw¨š{˜{�”˜!‘�°ˆØ œw¨š{˜{�”˜!‘�°ˆÝ˜5 %Ñ(Ô(Ð(r-   c                óV   — |                       |                      ||¦  «        |¦  «        S rP   )r:  r/  )rÓ   rÎ   rÏ   Úcs       r.   Úmodular_indexingz(SymPyValueRangeAnalysis.modular_indexing  s$   € à�wŠw�s—|’| A qÑ)Ô)¨1Ñ-Ô-Ð-r-   c                ó4   — t                                ¦   «         S rP   )r$   r…   )rÓ   Úargss     r.   Ú&is_non_overlapping_and_dense_indicatorz>SymPyValueRangeAnalysis.is_non_overlapping_and_dense_indicator  s   € å×&Ò&Ñ(Ô(Ð(r-   c                ó  ‡— t                                |¦  «        }t                                ‰¦  «        Š|                     ¦   «         rF‰                     ¦   «         r2t                                t          |j        ‰j        ¦  «        ¦  «        S |j        dk    r7t                                |‰t          dt          ¦  «        z  t          ¦  «        S ‰                     ¦   «         rJ‰j        dz  dk    rt                                |ˆfd„¦  «        S t            	                    |ˆfd„¦  «        S t          |j        |j         ¦  «        }t          t          |‰j        ¦  «         t          |‰j        ¦  «        ¦  «        S )Nr   r   é   c                ó.   •— t          | ‰j        ¦  «        S rP   ©r   rH   ©r   rÏ   s    €r.   r9  z8SymPyValueRangeAnalysis.pow_by_natural.<locals>.<lambda>3  s   ø€ ¥¨!¨Q¬WÑ!5Ô!5€ r-   c                ó.   •— t          | ‰j        ¦  «        S rP   rF  rG  s    €r.   r9  z8SymPyValueRangeAnalysis.pow_by_natural.<locals>.<lambda>7  s   ø€ ½xÈÈ1Ì7Ñ?SÔ?S€ r-   )r$   r�   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Ô 0ð 	Ý×#Ò#¥H¨Q¬W°a´gÑ$>Ô$>Ñ?Ô?Ð?àŒW˜Š\ˆ\õ
 ×<Ò<Ø�1•{ 1¥fÑ-Ô-Ñ-­|ñô ð ð �^Š^ÑÔð 	ØŒw˜‰{˜aÒÐå"×6Ò6ØÐ5Ð5Ð5Ð5ñô ð õ
 #×1Ò1°!Ð5SÐ5SÐ5SÐ5SÑTÔTÐTõ ˜1œ7 Q¤W HÑ-Ô-ˆHÝÝ˜8 Q¤WÑ-Ô-Ð.µ¸À1Ä7Ñ0KÔ0Kñô ð r-   c                ó4   — t                                ¦   «         S rP   )r$   r|   r  s      r.   ÚpowzSymPyValueRangeAnalysis.powB  s   € å×"Ò"Ñ$Ô$Ð$r-   c                ó¨   — t                                | ¦  «        } d| v rt                                ¦   «         S t                                | 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.   r9  z4SymPyValueRangeAnalysis.reciprocal.<locals>.<lambda>v  s   € ½<ÈÈQÑ;OÔ;O€ r-   )r$   r�   r|   r³   rù   s    r.   Ú
reciprocalz"SymPyValueRangeAnalysis.reciprocalo  sL   € õ ×Ò˜QÑÔˆØ�ˆ6ˆ6Ý×&Ò&Ñ(Ô(Ð(å×-Ò-¨aÐ1OÐ1OÑPÔPÐPr-   c                óB   — t                                | t          ¦  «        S rP   )r$   rÀ   r2  rù   s    r.   r2  zSymPyValueRangeAnalysis.absx  s   € å×.Ò.¨qµ#Ñ6Ô6Ð6r-   c                óB   — t                                | t          ¦  «        S rP   )r$   r±   r   rù   s    r.   ÚexpzSymPyValueRangeAnalysis.exp|  s   € å×)Ò)¨!Õ->Ñ?Ô?Ð?r-   c                ó¾   — t                                | ¦  «        } | j        dk    rt                                ¦   «         S t                                | t
          ¦  «        S r(  )r$   r�   rH   r|   r±   r   rù   s    r.   ÚlogzSymPyValueRangeAnalysis.log€  sI   € å×Ò˜QÑÔˆØŒ7�aŠ<ˆ<Ý×&Ò&Ñ(Ô(Ð(Ý×)Ò)¨!Õ->Ñ?Ô?Ð?r-   c                ó¾   — t                                | ¦  «        } | j        dk    rt                                ¦   «         S t                                | t
          ¦  «        S r(  )r$   r�   rH   r|   r±   r   rù   s    r.   Úlog2zSymPyValueRangeAnalysis.log2‡  sI   € å×Ò˜QÑÔˆØŒ7�aŠ<ˆ<Ý×&Ò&Ñ(Ô(Ð(Ý×)Ò)¨!Õ-?Ñ@Ô@Ð@r-   c                óD   — |                       ||t          j        ¦  «        S rP   )Ú
min_or_maxr4   r”   r  s      r.   ÚminimumzSymPyValueRangeAnalysis.minimumŽ  ó   € à�~Š~˜a ¥E¤IÑ.Ô.Ð.r-   c                óD   — |                       ||t          j        ¦  «        S rP   )rY  r4   r“   r  s      r.   ÚmaximumzSymPyValueRangeAnalysis.maximum’  r[  r-   c                ó¢   — t                                | ¦  «        } t                                |¦  «        }t                                | ||¦  «        S rP   )r$   r�   rÅ   )rÎ   rÏ   r¬   s      r.   rY  z"SymPyValueRangeAnalysis.min_or_max–  s@   € å×Ò˜QÑÔˆÝ×Ò˜QÑÔˆÝ×8Ò8¸¸A¸rÑBÔBÐBr-   c                ój   — t                                |t          j        j        j        j        ¦  «        S rP   )r$   r±   r4   Ú	functionsÚ
elementaryÚintegersÚfloor©rÓ   r   rä   s      r.   Úfloor_to_intz$SymPyValueRangeAnalysis.floor_to_intœ  s#   € å×)Ò)¨!­U¬_Ô-GÔ-PÔ-VÑWÔWÐWr-   c                ój   — t                                |t          j        j        j        j        ¦  «        S rP   )r$   r±   r4   r`  ra  rb  Úceilingrd  s      r.   Úceil_to_intz#SymPyValueRangeAnalysis.ceil_to_int   s*   € å×)Ò)Ø�uŒÔ)Ô2Ô:ñ
ô 
ð 	
r-   c                ó„   — t                                |t          t          j        j        j        j        ¦  «        ¦  «        S rP   )r$   r±   r   r4   r`  ra  rb  rc  ©rÓ   r   s     r.   rc  zSymPyValueRangeAnalysis.floor¸  s2   € å×)Ò)Ø�{�5œ?Ô5Ô>ÔDÑEÔEñ
ô 
ð 	
r-   c                ó„   — t                                |t          t          j        j        j        j        ¦  «        ¦  «        S rP   )r$   r±   r   r4   r`  ra  rb  rg  rj  s     r.   ÚceilzSymPyValueRangeAnalysis.ceil¾  s2   € å×)Ò)Ø�{�5œ?Ô5Ô>ÔFÑGÔGñ
ô 
ð 	
r-   c                ó¬   ‡— ‰                      ¦   «         st                               ¦   «         S ‰j        Šˆfd„}t                               ||¦  «        S )Nc                ó$   •— t          | ‰¦  «        S rP   )r   )ÚnumberÚndigitss    €r.   r9  z7SymPyValueRangeAnalysis.round_decimal.<locals>.<lambda>Ì  s   ø€ �L¨°Ñ9Ô9€ r-   )rš   r$   r|   rH   r±   )rÓ   ro  rp  r¬   s     ` r.   Úround_decimalz%SymPyValueRangeAnalysis.round_decimalÄ  sV   ø€ à×#Ò#Ñ%Ô%ð 	)Ý×&Ò&Ñ(Ô(Ð(à”-ˆð :Ð9Ð9Ð9ˆå×)Ò)¨&°"Ñ5Ô5Ð5r-   c                óB   — t                                |t          ¦  «        S rP   )r$   r±   r   )rÓ   ro  rä   s      r.   Úround_to_intz$SymPyValueRangeAnalysis.round_to_intÐ  s   € õ ×)Ò)¨&µ*Ñ=Ô=Ð=r-   c                ó¾   — t                                | ¦  «        } | j        dk     rt                                ¦   «         S t                                | t
          ¦  «        S r(  )r$   r�   rH   r|   r±   r   rù   s    r.   ÚsqrtzSymPyValueRangeAnalysis.sqrtÖ  sI   € å×Ò˜QÑÔˆØŒ7�QŠ;ˆ;Ý×&Ò&Ñ(Ô(Ð(Ý×)Ò)¨!Õ-?Ñ@Ô@Ð@r-   c                ó@  — t                                |¦  «        }t                                |¦  «        }|                      ¦   «         } |j        |j        k    r,t                                ¦   «         ||fvrt          d¦  «        ‚|j        rJt          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$   r�   r~   rR   r|   r@   r4   r’   rH   r‘   rI   r”   r“   )rÎ   rÏ   r>  s      r.   ÚwherezSymPyValueRangeAnalysis.whereÝ  sâ   € å×Ò˜QÑÔˆÝ×Ò˜QÑÔˆØ�IŠI‰KŒKˆð Œ9˜œ	Ò!Ð!¥k×&9Ò&9Ñ&;Ô&;ÀAÀqÀ6Ð&IÐ&IÝ Ø[ñô ð ð Œ9ð 	YÝ�uœy¨¬°!´'Ñ:Ô:½E¼HÀQÄWÈaÌgÑ<VÔ<VÑWÔWÐWå�uœy¨¬°!´'Ñ:Ô:½E¼IÀaÄgÈqÌwÑ<WÔ<WÑXÔXÐXr-   c                ó2   — |                      ¦   «         }| |fS rP   )r~   ró   s     r.   Úexpr_cond_pairz&SymPyValueRangeAnalysis.expr_cond_pairð  s   € à�IŠI‰KŒKˆØ�1ˆvˆr-   c                 óJ   — d }| D ]\  }}t           j        |v r
|€|}Œ||z  }Œ|S rP   r  )ÚrangesÚ
init_rangeÚ
expr_rangeÚ
cond_ranges       r.   Ú	piecewisez!SymPyValueRangeAnalysis.piecewiseú  sF   € àˆ
Ø&,ð 	9ð 	9Ñ"ˆJ˜
ÝŒz˜ZÐ'Ð'ØÐ%Ø!+�J�Jà!+¨jÑ!8�JøØÐr-   c                ó"   — t          dd¦  «        S ©Ng      ð¿rO  ©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                óL   — t          t          j         t          j        ¦  «        S rP   rœ   rù   s    r.   ÚsinhzSymPyValueRangeAnalysis.sinh  r�   r-   c                óL   — t          t          j         t          j        ¦  «        S rP   rœ   rù   s    r.   ÚtanzSymPyValueRangeAnalysis.tan#  ó   € å�EœH˜9¥e¤hÑ/Ô/Ð/r-   c                óL   — t          t          j         t          j        ¦  «        S rP   rœ   rù   s    r.   ÚtanhzSymPyValueRangeAnalysis.tanh'  r�   r-   c                óL   — t          t          j         t          j        ¦  «        S rP   rœ   rù   s    r.   ÚasinzSymPyValueRangeAnalysis.asin,  rŒ  r-   c                óL   — t          t          j         t          j        ¦  «        S rP   rœ   rù   s    r.   ÚacoszSymPyValueRangeAnalysis.acos6  rŒ  r-   c                óL   — t          t          j         t          j        ¦  «        S rP   rœ   rù   s    r.   ÚatanzSymPyValueRangeAnalysis.atan@  rŒ  r-   c                óB   — t                                | t          ¦  «        S rP   )r$   r±   r   rù   s    r.   ÚtrunczSymPyValueRangeAnalysis.truncE  s   € õ ×)Ò)¨!­\Ñ:Ô:Ð:r-   rP   )>r)   r*   r+   Ú__doc__r×   rè   rì   rî   rñ   rô   rö   rú   rÚ   rþ   r  r  r  r  r  r  r  r  r  r"  r&  r)  r+  r/  r:  r<  r?  rB  rJ  rL  rP  r2  rS  rU  rW  rZ  r]  rY  re  rh  rc  rl  rq  rs  ru  rw  ry  r  rƒ  r…  r‡  r‰  r‹  rŽ  r�  r’  r”  r–  r,   r-   r.   rÜ   rÜ   ­  s4  € € € € € ðð ð
 ð+ð +ñ „\ð+ðZ ð%ð %ð %ñ „\ð%ð ð9ð 9ñ „\ð9ð ð8ð 8ñ „\ð8ð ðIð Iñ „\ðIð ðJð Jñ „\ðJð ðCð Cñ „\ðCð ð9ð 9ñ „[ð9ð* ð9ð 9ñ „[ð9ð. ð#,ð #,ñ „[ð#,ðJ ð4ð 4ñ „\ð4ð ð&ð &ñ „[ð&ð ð#ð #ñ „[ð#ð ð8ð 8ñ „[ð8ð  ðð ñ „[ðð ð&ð &ñ „[ð&ð ð&ð &ñ „[ð&ð ð
ð 
ñ „\ð
ð
 ðTð Tñ „[ðTð, ð
ð 
ñ „\ð
ð ðð ñ „\ðð ð9ð 9ñ „\ð9ð2 ð&.ð &.ñ „[ð&.ðP ð)ð )ñ „[ð)ð  ð.ð .ñ „[ð.ð ð)ð )ñ „[ð)ð ðð ñ „[ððB ð*ð *ñ „[ð*ðX ðQð Qñ „\ðQð ð7ð 7ñ „\ð7ð ð@ð @ñ „\ð@ð ð@ð @ñ „\ð@ð ðAð Añ „\ðAð ð/ð /ñ „[ð/ð ð/ð /ñ „[ð/ð ðCð Cñ „\ðCð
 ðXð Xñ „[ðXð ð
ð 
ñ „[ð
ð. ð
ð 
ñ „[ð
ð
 ð
ð 
ñ „[ð
ð
 ð	6ð 	6ñ „[ð	6ð ð>ð >ñ „[ð>ð
 ðAð Añ „\ðAð ðYð Yñ „\ðYð$ ðð ñ „\ðð ðð ñ „\ðð ð&ð &ñ „\ð&ð ð	ð 	ñ „\ð	ð ð&ð &ñ „\ð&ð
 ð0ð 0ñ „\ð0ð ð0ð 0ñ „\ð0ð ð0ð 0ñ „\ð0ð ðð ñ „\ðð ðð ñ „\ðð ð0ð 0ñ „\ð0ð ð;ð ;ñ „\ð;ð ;ð ;r-   rÜ   Úexprú
sympy.Exprr{  ú&dict[sympy.Symbol, ValueRanges] | Nonec                óÈ  ‡ ‡— t                                d‰ t          ˆ ˆfd„¦  «        ¦  «         t          ‰ t          j        ¦  «        rt                               ‰ ¦  «        S ‰pi Št          j	        j
                             ¦   «         }|r<|j        r5|j        j        r)‰ri |j        j        j        ¥‰¥Šn|j        j        j        Šd„ }t          t           ‰‰ |¬¦  «        S )Nzbound_sympy(%s)%sc                 óx   •— ‰r6dd                      ˆ fd„‰                     ¦   «         D ¦   «         ¦  «        z   ndS )Nú
c              3  ó@   •K  — | ]\  }}|‰j         v ¯d |› d|› �V — ŒdS )z  r1   N)Úfree_symbols)rÍ   Úkrç   r˜  s      €r.   r  z0bound_sympy.<locals>.<lambda>.<locals>.<genexpr>T  sI   øè è € ð ð Ù&* a¨ÀÀTÔEVÐ@VÐ@V�M˜�M�M˜a�M�MÐ@VÐ@VÐ@VÐ@Vðð r-   Ú )ÚjoinÚitems)r˜  r{  s   €€r.   r9  zbound_sympy.<locals>.<lambda>R  sb   ø€ ð
 ð	�Ø—)’)ð ð ð ð Ø.4¯lªl©n¬nðñ ô ñ ô ñð ð
 ð r-   c                óî   — | j         rT| j        rt          dt          ¦  «        }nP| j        rt          dt          ¦  «        }n3t                               ¦   «         }nt                               ¦   «         }|S rø   )rÞ   Úis_positiver$   r!   Úis_nonnegativer…   r|   )ÚsrK   s     r.   Úmissing_handlerz$bound_sympy.<locals>.missing_handleri  sn   € ØŒ<ð 		'ØŒ}ð /Ý  ¥FÑ+Ô+��ØÔ!ð /Ý  ¥FÑ+Ô+��å ×,Ò,Ñ.Ô.��õ ×$Ò$Ñ&Ô&ˆBØˆ	r-   )r¨  )rU  Údebugr   r2   r4   rß   r$   r�   rà   Ú_guardsÚTracingContextÚtry_getÚ	fake_modeÚ	shape_envÚvar_to_ranger    rÜ   )r˜  r{  Úcontextr¨  s   ``  r.   r%   r%   K  s  øø€ õ ‡I‚IØØÝðð ð ð ð ñ		
ô 		
ñô ð õ �$�œÑ%Ô%ð &Ý×Ò Ñ%Ô%Ð%àˆ\�r€Fõ ŒmÔ*×2Ò2Ñ4Ô4€GØð >�7Ô$ð >¨Ô):Ô)Dð >Øð 	>ØK˜Ô)Ô3Ô@ÐKÀFÐKˆFˆFàÔ&Ô0Ô=ˆFðð ð õ Ý ¨¸ðñ ô ð r-   )rK   rL   rM   rN   )rK   rL   rM   rU   )rM   rX   rP   )r˜  r™  r{  rš  rM   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)   rU  Ú__all__r>   r&   ÚRuntimeErrorr(   rD   rJ   rT   rW   r[   r7   r9   rg   r3   rn   rp   r­   rÂ   r´   rÇ   r¶   rÉ   Ú	dataclassr$   rÜ   r%   r,   r-   r.   ú<module>rÀ     sÉ  ðà "Ð "Ð "Ð "Ð "Ð "à Ð Ð Ð Ø Ð Ð Ð Ø Ð Ð Ð Ø €€€Ø €€€Ø €€€Ø $Ð $Ð $Ð $Ð $Ð $Ø VÐ VÐ VÐ VÐ VÐ VÐ VÐ VÐ VÐ VÐ VÐ VÐ VÐ VÐ VÐ VØ $Ð $Ð $Ð $Ð $Ð $à €€€Ø DÐ DÐ DÐ DÐ DÐ DÐ DÐ Dà €€€Ø %Ð %Ð %Ð %Ð %Ð %Ø -Ð -Ð -Ð -Ð -Ð -ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð" !Ð  Ð  Ð  Ð  Ð  Ø =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ð =ð €gÔ˜Ñ!Ô!€à˜-Ð
(€à€WˆT�5”:˜|Ñ,Ô,€ð	ð 	ð 	ð 	ð 	�lñ 	ô 	ð 	ðFð Fð Fð6)ð )ð )ð ð ð ð ðð ð ð ð,ð ,ð ,ð ,ð 
ˆu‰�u”zÑ	!€Ø	�Ñ	€Ø�‰€Ø	�5”:�, ¤
Ð*Ô	+€Ø
�E”J ¤
Ð+¨U¬ZÐ7Ô
8€Ø	�<�. ,Ð.Ô	/€Ø
�L ,Ð/°Ð=Ô
>€Ø�‰€Ø	�7Ñ	€ð €Ô˜dÐ#Ñ#Ô#ðp9ð p9ð p9ð p9ð p9�'˜"”+ñ p9ô p9ñ $Ô#ðp9ðf	[
;ð [
;ð [
;ð [
;ð [
;ñ [
;ô [
;ð [
;ð~ HLð-ð -ð -ð -ð -ð -ð -r-   