
    g<                     `    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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.
    )
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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       k/var/www/html/ai-engine/env/lib/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.midP   s    
TX%,,r   c                      | j         | j        z
  S N)r   r   r   s    r   widthzinterval.widthT   s    x$*$$r   c                 $    d| j         | j        fz  S )Nzinterval(%f, %f)r   r   s    r   __repr__zinterval.__repr__X   s    !TZ$:::r   c                 $    d| j         | j        fz  S )Nz[%f, %f]r   r   s    r   __str__zinterval.__str__[   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__q   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   r2   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	   r7   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 )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   } 	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                 v   ddl m}m} | j        s| S t	          |t
                    r || ||           z            S t	          |t          t          f          rZ|dk     r%d|                     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&& 	"3uss4yy()))s|,, 		"qyy4<<E

3333e$$ 3#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   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\** 	"= 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__m  s    T]DJ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        " (, , , , , ,( - - 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   rE   Fr
   N)	r   r[   rW   r   r   r	   rH   r   r   )interpowerr\   r]   r^   r   r   rets           r   rY   rY   q  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   rH   )rl   rm   r   r   s       r   rX   rX     s    JJEqy BU*EIu,<===;??uy1}}Eek5(%)U*:;;CE3'''EK.	50@AAAr   N)rf   sympy.core.numbersr   sympy.core.logicr   sympy.simplify.simplifyr   interval_membershipr   r	   rY   rX   rj   r   r   <module>rt      s    D * ) ) ) ) ) & & & & & & - - - - - - 3 3 3 3 3 3D; D; D; D; D; D; D; D;N
= = =BB B B B Br   