
    MZd<                     L    d 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.
    )	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       Q/usr/lib/python3/dist-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.midO   s    

TXX%,,r   c                 4    | j                   | j                  z
  S N)r   r   r   s    r   widthzinterval.widthS   s    xx$**$$r   c                 8    d| j                   | j                  fz  S )Nzinterval(%f, %f)r   r   s    r   __repr__zinterval.__repr__W   s    !TZZ$:::r   c                 8    d| j                   | j                  fz  S )Nz[%f, %f]r   r   s    r   __str__zinterval.__str__Z   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__p   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   r1   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   r6   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 )NrD   r	   r   F)r
   r   r   r   r'   r   r   rE   rG   rF   r(   )r   r*   thisrH   r   r   s         r   rM   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                 8   ddl m}m} | j                  s| S t	        |t
              r || ||       z        S t	        |t        t        f      rH|dk  rd| j                  t        |            z  S t        |      |k(  rt        | |      S t        | |      S t        S )Nr   )explogr   )lib_intervalrR   rS   r
   r   r   r   r'   __pow__abs_pow_int
_pow_floatr(   )r   r*   rR   rS   s       r   rU   zinterval.__pow__A  s    *}}KeX&us4y())s|,qy4<<E
333u:&#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   rD   Fr	   r   )r   r   r'   r
   r   r   r   r   as_numer_denomrV   r   rU   r(   )r   r*   power_rationalnumdenomr   r   s          r   __rpow__zinterval.__rpow__S  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__l  s     T]]DJJ9::r   N)__name__
__module____qualname____doc__r   propertyr   r   r!   r#   r,   r/   r2   r4   r6   r8   r<   __radd__r>   r@   rB   rI   __rmul__rK   rN   rM   rU   r^   ra    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   rD   Fr	   N)	r   rZ   rV   r   r   r   rG   r   r
   )interpowerr[   r\   r]   r   r   rets           r   rX   rX   p  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   rG   )rk   rl   r   r   s       r   rW   rW     s    JEqyU*EIIu,<==;;?uyy1}Eekk5(%))U*:;CE3''EKK.		50@AAr   N)
re   sympy.core.logicr   sympy.simplify.simplifyr   interval_membershipr   r   rX   rW   ri   r   r   <module>rr      s/   D ' - 3D; D;N
=BBr   