
    Rie<                     T    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	d
S )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dS )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                f   || _         t          |          dk    rxt          |d         t                    r'|d         j        |d         j        c| _        | _        d S t          |d                   | _        t          |d                   | _        d S t          |          dk    r~|d         |d         k     r6t          |d                   | _        t          |d                   | _        d S t          |d                   | _        t          |d                   | _        d S t          d          )Nr   r      z9interval takes a maximum of two float values as arguments)r
   len
isinstancer   startendfloat
ValueError)selfr
   argskwargss       Olib/python3.11/site-packages/sympy/plotting/intervalmath/interval_arithmetic.py__init__zinterval.__init__;   s     t99>>$q'8,, *'+Aw}d1gk$
DHHH"47^^
 a>>YY!^^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    
TX%,,r   c                      | j         | j        z
  S N)r   r   r   s    r   widthzinterval.widthS   s    x$*$$r   c                 $    d| j         | j        fz  S )Nzinterval(%f, %f)r   r   s    r   __repr__zinterval.__repr__W   s    !TZ$:::r   c                 $    d| j         | j        fz  S )Nz[%f, %f]r   r   s    r   __str__zinterval.__str__Z   s    TZ222r   c                    t          |t          t          f          rU| j        |k     rt	          d| j                  S | j        |k    rt	          d| j                  S t	          d | j                  S t          |t                    rkt          | j        |j        g          }| j        |j        k     rt	          d|          S | j        |j        k    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\** 	"x%)$>>>e##)%???)$>>>x(( 	"t}en=>>Ex%,&&)$666zEI%%)%777%dE222!!r   c                 F   t          |t          t          f          rU| j        |k    rt	          d| j                  S | j        |k     rt	          d| j                  S t	          d | j                  S t          |t                    r|                    |           S t          S r%   )
r   r'   r   r   r   r
   r   r   r,   r(   r   r*   s     r   __gt__zinterval.__gt__p   s    ec5\** 
	"zE!!)$>>>E!!)%???)$>>>x(( 	"<<%%%!!r   c                 0   t          |t          t          f          rY| 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 | 	                    |          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\** 	@zU""tx5'8'8)$>>>}})$>>>)%???eX&& 		"t}en=>>EzU[((TX-B-B)$666U##A&2)%777)$666!!r   c                 0   t          |t          t          f          rY| 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 | 	                    |          d         t          d|          S t          d |          S t          S )NFTr   r1   r)   s      r   __ne__zinterval.__ne__   s   ec5\** 	?zU""tx5'8'8)%???}})$>>>)$>>>eX&& 	"t}en=>>EzU[((TX-B-B)%777;;u%%a(0)$666%dE222!!r   c                    t          |t          t          f          rU| j        |k    rt	          d| j                  S | j        |k    rt	          d| j                  S t	          d | j                  S t          |t                    rkt          | j        |j        g          }| j        |j        k    rt	          d|          S | j        |j        k    rt	          d|          S t	          d |          S t          S r%   r&   r)   s      r   __le__zinterval.__le__   s    ec5\** 	?x5  )$>>>zE!!)%???)$>>>eX&& 	"t}en=>>Ex5;&&)$666zEI%%)%777%dE222!!r   c                 <   t          |t          t          f          rU| j        |k    rt	          d| j                  S | j        |k     rt	          d| j                  S t	          d | j                  S t          |t                    r|                    |           S d S r%   )	r   r'   r   r   r   r
   r   r   r6   r.   s     r   __ge__zinterval.__ge__   s    ec5\** 	&zU"")$>>>E!!)%???)$>>>x(( 	&<<%%%	& 	&r   c                    t          |t          t          f          rR| j        r t	          | j        |z   | j        |z             S | j        |z   }| j        |z   }t	          ||| j                  S t          |t                    rK| 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\** 	"} D
U 2DHu4DEEE
U*h&sT]CCCCx(( 	"J,E(UY&Ct}en=>>EE37777!!r   c                 ^   t          |t          t          f          r+| j        |z
  }| j        |z
  }t          ||| j                  S t          |t
                    rK| 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\** 	"J&E(U"CE3????x(( 	"J*E(U[(Ct}en=>>EE37777!!r   c                     t          |t          t          f          r+|| j        z
  }|| j        z
  }t          ||| j                  S t          |t
                    r|                    |           S t          S r:   )	r   r'   r   r   r   r   r
   r>   r(   )r   r*   r   r   s       r   __rsub__zinterval.__rsub__   sq    ec5\** 	"DH$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__   sD    = 	LTXI
{333TXI
{T]KKKKr   c                 &   t          |t                    r2| 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        z             |                    | j        |j        z             |                    | j        |j        z             |                    | j        |j        z             t          |          }t          |          }t          ||          S t          |t          t          f          r't          | 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__   sY   eX&& 	"}%%5)@)@uuU||eLLLL&%.*@uuU||dKKKKdj5;6777dh4555dj594555dh2333F&kks+++U|,, 	"DJu,dhunt}UUUU!!r   c                     t          |t          t          f          r| j        |k    o
| j        |k    S | j        |j        k    o|j        | j        k    S r   )r   r'   r   r   r   r.   s     r   __contains__zinterval.__contains__	  sO    ec5\** 	G:&<48u+<<:,Fdh1FFr   c                     t          |t          t          f          r$t          |          }|                    |           S t          |t                    r|                    |           S t
          S r   )r   r'   r   r   __truediv__r(   r.   s     r   __rtruediv__zinterval.__rtruediv__  sc    ec5\** 	"UOOE$$T***x(( 	"$$T***!!r   c                 x   | j         s2t          t          d           t          d          | j                   S t          |t          t          f          rS|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        z             |                    |j        |j        z             |                    |j        |j        z             |                    |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   } 	QU5\\M5<<$-PPPPec5\** "	"zzuuU||eLLLL
U 2DHu4DEEEx(( 	"~&&$-5*@*@uuU||eLLLL'4=+@uuU||dKKKK ::#U5\\M5<<$OOOO 9q== 5D"FE dj5;6777dh4555dj594555dh2333F&kks+++!!r   c                 ~   ddl m}m} | j        s| S t	          |t
                    r || ||           z            S t	          |t          t          f          r^|dk     r%d|                     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&& 	"3uss4yy()))s|,, 		"qyy4<<E

3333u::&&#D%000%dE222!!r   c                    t          |t          t          f          r| j        s| S |dk     r| j        dk    r-t          t          d           t          d          d          S t          | 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|                    |           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\** 	"= D:>>#U5\\M5<<%PPPP%.tz%:%:N!/!>!>!@!@JCqyA~~'uuU||16 8  8  8 8 "%UTZ!7 7#'s333tz 15$(?CCCx(( 	"==&&&!!r   c                 D    t          | j        | j        | j        f          S r   )hashr
   r   r   r   s    r   __hash__zinterval.__hash__l  s    T]DJ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        " (, , , , , ,( - - X- % % X%; ; ;3 3 3" " "&" " "" " "(" " "&" " "&	& 	& 	&" " "" H" " "" " "L L L" " "( HG G G" " "'" '" '"R" " "$" " "2; ; ; ; ;r   r   c                    t          |          }|                                \  }}|dz  dk    ret          | j                  |z  }t          | j                  |z  }|dk     rt          dt          ||                    }n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  s   u%%N..00JC
Qw!||EK  %'%)nne#1991c%oo..CC5#&&C
	a9q==U5\\M5<<%HHHH[1__Auy%/$????EK.	50@AAA;??%%u,,EEK&E9q==uy>>5((CC)U"CsU^<<<<r   c                 :   t          |          }|dz  r t          | j        |z  | j        |z            S | j        dk     r=| j        dk    r2d}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    JJEqy BU*EIu,<===;??uy1}}Eek5(%)U*:;;CE3'''EK.	50@AAAr   N)
re   sympy.core.logicr   sympy.simplify.simplifyr   interval_membershipr   r   rX   rW   ri   r   r   <module>rr      s    D ' & & & & & - - - - - - 3 3 3 3 3 3D; D; D; D; D; D; D; D;N
= = =BB B B B Br   