
    sg<                     X    d Z ddlmZ ddlmZ ddlmZ ddlmZ  G d d      Z	d	 Z
d
 Zy)a  
Interval Arithmetic for plotting.
This module does not implement interval arithmetic accurately and
hence cannot be used for purposes other than plotting. If you want
to use interval arithmetic, use mpmath's interval arithmetic.

The module implements interval arithmetic using numpy and
python floating points. The rounding up and down is not handled
and hence this is not an accurate implementation of interval
arithmetic.

The module uses numpy for speed which cannot be achieved with mpmath.
    )
int_valued)	fuzzy_and)	nsimplify   )intervalMembershipc                       e Zd ZdZdddZed        Zed        Zd Zd Z	d	 Z
d
 Zd Zd Zd Zd Zd ZeZd Zd Zd Zd ZeZd Zd Zd Zd Zd Zd Zy)intervala:   Represents an interval containing floating points as start and
    end of the interval
    The is_valid variable tracks whether the interval obtained as the
    result of the function is in the domain and is continuous.
    - True: Represents the interval result of a function is continuous and
            in the domain of the function.
    - False: The interval argument of the function was not in the domain of
             the function, hence the is_valid of the result interval is False
    - None: The function was not continuous over the interval or
            the function's argument interval is partly in the domain of the
            function

    A comparison between an interval and a real number, or a
    comparison between two intervals may return ``intervalMembership``
    of two 3-valued logic values.
    Tis_validc                   || _         t        |      dk(  rdt        |d   t              r*|d   j                  |d   j
                  c| _        | _        y t        |d         | _        t        |d         | _        y t        |      dk(  rY|d   |d   k  r't        |d         | _        t        |d         | _        y t        |d         | _        t        |d         | _        y t        d      )Nr   r      z9interval takes a maximum of two float values as arguments)r   len
isinstancer	   startendfloat
ValueError)selfr   argskwargss       b/var/www/html/venv/lib/python3.12/site-packages/sympy/plotting/intervalmath/interval_arithmetic.py__init__zinterval.__init__<   s     t9>$q'8,'+Aw}}d1gkk$
DH"47^
 a>Y!^Awa "47^
 a>"47^
 a>  + , ,    c                 :    | j                   | j                  z   dz  S )Ng       @r   r   r   s    r   midzinterval.midP   s    

TXX%,,r   c                 4    | j                   | j                  z
  S N)r   r   r   s    r   widthzinterval.widthT   s    xx$**$$r   c                 8    d| j                   | j                  fz  S )Nzinterval(%f, %f)r   r   s    r   __repr__zinterval.__repr__X   s    !TZZ$:::r   c                 8    d| j                   | j                  fz  S )Nz[%f, %f]r   r   s    r   __str__zinterval.__str__[   s    TZZ222r   c                    t        |t        t        f      r`| j                  |k  rt	        d| j
                        S | j                  |kD  rt	        d| j
                        S t	        d | j
                        S t        |t              rwt        | j
                  |j
                  g      }| j                  |j                  k  rt	        d|      S | j                  |j                  kD  rt	        d|      S t	        d |      S t        S NTF
r   intr   r   r   r   r   r	   r   NotImplementedr   othervalids      r   __lt__zinterval.__lt__^   s    ec5\*xx%)$>>e#)%??)$>>x(t}}enn=>Exx%,,&)$66zzEII%)%77%dE22!!r   c                 <   t        |t        t        f      r`| j                  |kD  rt	        d| j
                        S | j                  |k  rt	        d| j
                        S t	        d | j
                        S t        |t              r|j                  |       S t        S r&   )
r   r(   r   r   r   r   r   r	   r-   r)   r   r+   s     r   __gt__zinterval.__gt__q   sz    ec5\*zzE!)$>>E!)%??)$>>x(<<%%!!r   c                 8   t        |t        t        f      rd| j                  |k(  r%| j                  |k(  rt        d| j                        S || v rt        d | j                        S t        d| j                        S t        |t              rt        | j                  |j                  g      }| j                  |j                  k(  r%| j                  |j                  k(  rt        d|      S | j                  |      d   t        d|      S t        d |      S t        S )NTFr   r   r(   r   r   r   r   r   r	   r   r-   r)   r*   s      r   __eq__zinterval.__eq__~   s    ec5\*zzU"txx5'8)$>>})$>>)%??eX&t}}enn=>EzzU[[(TXX-B)$66U#A&2)%77)$66!!r   c                 8   t        |t        t        f      rd| j                  |k(  r%| j                  |k(  rt        d| j                        S || v rt        d | j                        S t        d| j                        S t        |t              rt        | j                  |j                  g      }| j                  |j                  k(  r%| j                  |j                  k(  rt        d|      S | j                  |      d   t        d|      S t        d |      S t        S )NFTr   r2   r*   s      r   __ne__zinterval.__ne__   s    ec5\*zzU"txx5'8)%??})$>>)$>>eX&t}}enn=>EzzU[[(TXX-B)%77;;u%a(0)$66%dE22!!r   c                    t        |t        t        f      r`| j                  |k  rt	        d| j
                        S | j                  |kD  rt	        d| j
                        S t	        d | j
                        S t        |t              rwt        | j
                  |j
                  g      }| j                  |j                  k  rt	        d|      S | j                  |j                  kD  rt	        d|      S t	        d |      S t        S r&   r'   r*   s      r   __le__zinterval.__le__   s    ec5\*xx5 )$>>zzE!)%??)$>>eX&t}}enn=>Exx5;;&)$66zzEII%)%77%dE22!!r   c                 2   t        |t        t        f      r`| j                  |k\  rt	        d| j
                        S | j                  |k  rt	        d| j
                        S t	        d | j
                        S t        |t              r|j                  |       S y r&   )	r   r(   r   r   r   r   r   r	   r7   r/   s     r   __ge__zinterval.__ge__   sy    ec5\*zzU")$>>E!)%??)$>>x(<<%% )r   c                    t        |t        t        f      rh| j                  r&t	        | j
                  |z   | j                  |z         S | j
                  |z   }| j                  |z   }t	        ||| j                        S t        |t              ra| j
                  |j
                  z   }| j                  |j                  z   }t        | j                  |j                  g      }t	        |||      S t        S Nr
   )	r   r(   r   r   r	   r   r   r   r)   r   r+   r   r   r,   s        r   __add__zinterval.__add__   s    ec5\*}}

U 2DHHu4DEE

U*hh&sT]]CCx(JJ,E((UYY&Ct}}enn=>EE377!!r   c                    t        |t        t        f      r6| j                  |z
  }| j                  |z
  }t        ||| j                        S t        |t
              ra| j                  |j                  z
  }| j                  |j                  z
  }t        | j                  |j                  g      }t        |||      S t        S r;   )	r   r(   r   r   r   r	   r   r   r)   r<   s        r   __sub__zinterval.__sub__   s    ec5\*JJ&E((U"CE3??x(JJ*E((U[[(Ct}}enn=>EE377!!r   c                     t        |t        t        f      r6|| j                  z
  }|| j                  z
  }t        ||| j                        S t        |t
              r|j                  |       S t        S r;   )	r   r(   r   r   r   r	   r   r?   r)   )r   r+   r   r   s       r   __rsub__zinterval.__rsub__   s^    ec5\*DHH$E$**$CE3??x(==&&!!r   c                     | j                   r"t        | j                   | j                         S t        | j                   | j                   | j                         S r;   )r   r	   r   r   r   s    r   __neg__zinterval.__neg__   sA    ==TXXI

{33TXXI

{T]]KKr   c                 4   t        |t              r:| j                  du s|j                  du r!t        t        d       t        d      d      S | j                  |j                  !t        t        d       t        d      d       S g }|j	                  | j
                  |j
                  z         |j	                  | j                  |j
                  z         |j	                  | j
                  |j                  z         |j	                  | j                  |j                  z         t        |      }t        |      }t        ||      S t        |t        t        f      r2t        | j
                  |z  | j                  |z  | j                        S t        S )NFinfr
   )r   r	   r   r   appendr   r   minmaxr(   r)   )r   r+   intersr   r   s        r   __mul__zinterval.__mul__   s(   eX&}}%5)@uuU|eLL&%..*@uuU|dKKdjj5;;67dhh45djj59945dhh23F&ks++U|,DJJu,dhhunt}}UU!!r   c                     t        |t        t        f      r | j                  |k  xr | j                  |k\  S | j                  |j                  k  xr |j                  | j                  k  S r   )r   r(   r   r   r   r/   s     r   __contains__zinterval.__contains__
  sR    ec5\*::&<488u+<<::,Fdhh1FFr   c                     t        |t        t        f      rt        |      }|j	                  |       S t        |t              r|j	                  |       S t
        S r   )r   r(   r   r	   __truediv__r)   r/   s     r   __rtruediv__zinterval.__rtruediv__  sK    ec5\*UOE$$T**x($$T**!!r   c                 N   | j                   s+t        t        d       t        d      | j                         S t        |t        t        f      rL|dk(  r!t        t        d       t        d      d      S t        | j
                  |z  | j                  |z        S t        |t              rv|j                   du s| j                   du r!t        t        d       t        d      d      S |j                   | j                   !t        t        d       t        d      d       S d|v r!t        t        d       t        d      d       S | }|j                  dk  r| }| }g }|j                  |j
                  |j
                  z         |j                  |j                  |j
                  z         |j                  |j
                  |j                  z         |j                  |j                  |j                  z         t        |      }t        |      }t        ||      S t        S )NrE   r
   r   F)r   r	   r   r   r(   r   r   rF   rH   rG   r)   )r   r+   thisrI   r   r   s         r   rN   zinterval.__truediv__  s   }}U5\M5<$--PPec5\*zuuU|eLL

U 2DHHu4DEEx(~~&$--5*@uuU|eLL'4==+@uuU|dKK :#U5\M5<$OO 99q= 5D"FE djj5;;67dhh45djj59945dhh23F&ks++!!r   c                 2   ddl m}m} | j                  s| S t	        |t
              r || ||       z        S t	        |t        t        f      rE|dk  rd| j                  t        |            z  S t        |      rt        | |      S t        | |      S t        S )Nr   )explogr   )lib_intervalrS   rT   r   r   r	   r   r(   __pow__absr   _pow_int
_pow_floatr)   )r   r+   rS   rT   s       r   rV   zinterval.__pow__B  s    *}}KeX&us4y())s|,qy4<<E
333e$#D%00%dE22!!r   c                 >   t        |t        t        f      r| j                  s| S |dk  r| j                  dkD  r!t        t        d       t        d      d      S t        | j                        }|j                         \  }}|dz  dk(  r!t        t        d       t        d      d      S t        |      | j                  z   }|}t        ||      S t        || j                  z  || j                  z        S t        |t
              r|j                  |       S t        S )Nr   rE   Fr
   r   )r   r   r(   r   r    r	   r   r   as_numer_denomrW   r   rV   r)   )r   r+   power_rationalnumdenomr   r   s          r   __rpow__zinterval.__rpow__T  s    eeS\*==::>#U5\M5<%PP%.tzz%:N!/!>!>!@JCqyA~'uuU|16 8 8 "%UTZZ!7 7#'s33tzz 15$((?CCx(==&&!!r   c                 Z    t        | j                  | j                  | j                  f      S r   )hashr   r   r   r   s    r   __hash__zinterval.__hash__m  s     T]]DJJ9::r   N)__name__
__module____qualname____doc__r   propertyr   r    r"   r$   r-   r0   r3   r5   r7   r9   r=   __radd__r?   rA   rC   rJ   __rmul__rL   rO   rN   rV   r_   rb    r   r   r	   r	   *   s    " (, ,( - - % %;3"&""("&"&	&"" H""L"( HG"'"R"$"2;r   r	   c                 $   t        |      }|j                         \  }}|dz  dk(  r[t        | j                        |z  }t        | j                        |z  }|dk  rt        dt        ||            }|S t        ||      }|S |dz  dk(  r| j                  dk  r!t        t        d       t        d      d      S | j                  dk  rt        d| j                  |z  d      S t        | j                  |z  | j                  |z        S | j                  dk  rt        | j                        |z   }n| j                  |z  }| j                  dk  rt        | j                        |z   }n| j                  |z  }t        ||| j                        S )z1Evaluates an interval raised to a floating point.r   r   rE   Fr
   N)	r   r[   rW   r   r   r	   rH   r   r   )interpowerr\   r]   r^   r   r   rets           r   rY   rY   q  sb   u%N..0JC
Qw!|EKK %'%))ne#191c%o.C 
 5#&C
	a99q=U5\M5<%HH[[1_Auyy%/$??EKK.		50@AA;;?%u,,EKK&E99q=uyy>5((C))U"CsU^^<<r   c                 ^   t        |      }|dz  r&t        | j                  |z  | j                  |z        S | j                  dk  rC| j                  dkD  r4d}t	        | j                  |z  | j                  |z        }t        ||      S t        | j                  |z  | j                  |z        S )z0Evaluates an interval raised to an integer powerr   r   )r(   r	   r   r   rH   )rl   rm   r   r   s       r   rX   rX     s    JEqyU*EIIu,<==;;?uyy1}Eekk5(%))U*:;CE3''EKK.		50@AAr   N)rf   sympy.core.numbersr   sympy.core.logicr   sympy.simplify.simplifyr   interval_membershipr   r	   rY   rX   rj   r   r   <module>rt      s2   D * & - 3D; D;N
=BBr   