o
    oh<                     @   sV   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 dZ	d	d
 Z
d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                   @   s   e Zd ZdZddddZedd Zedd	 Zd
d Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd ZeZdd Zdd Zd d! Zd"d# ZeZd$d% Zd&d' Zd(d) Zd*d+ Zd,d- Zd.d/ Zd0S )1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                O   s   || _ t|dkr/t|d tr|d j|d j| _| _d S t|d | _t|d | _d S t|dkr]|d |d k rMt|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kwargs r   /var/www/html/construction_image-detection-poc/venv/lib/python3.10/site-packages/sympy/plotting/intervalmath/interval_arithmetic.py__init__<   s   zinterval.__init__c                 C   s   | j | j d S )Ng       @r   r   r   r   r   r   midP   s   zinterval.midc                 C   s   | j | j S N)r   r   r   r   r   r   widthT   s   zinterval.widthc                 C      d| j | jf S )Nzinterval(%f, %f)r   r   r   r   r   __repr__X      zinterval.__repr__c                 C   r   )Nz[%f, %f]r   r   r   r   r   __str__[   r   zinterval.__str__c                 C   s   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rKt| j|jg}| j|jk r;td|S | j|jkrFtd|S td |S t	S NTF
r   intr   r   r   r	   r   r   r   NotImplementedr   othervalidr   r   r   __lt__^      





zinterval.__lt__c                 C   s^   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-|| S t	S r    )
r   r"   r   r   r   r	   r   r   r'   r#   r   r%   r   r   r   __gt__q   s   



zinterval.__gt__c                 C      t |ttfr'| j|kr| j|krtd| jS || v r!td | jS td| jS t |trXt| j|jg}| j|jkrE| j|jkrEtd|S | 	|d d urStd|S td |S t
S )NTFr   r   r"   r   r   r   r   r	   r   r   r'   r#   r$   r   r   r   __eq__~   s   



zinterval.__eq__c                 C   r+   )NFTr   r,   r$   r   r   r   __ne__   s   



zinterval.__ne__c                 C   s   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rKt| j|jg}| j|jkr;td|S | j|jkrFtd|S td |S t	S r    r!   r$   r   r   r   __le__   r(   zinterval.__le__c                 C   s^   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-|| S d S r    )	r   r"   r   r   r   r	   r   r   r/   r)   r   r   r   __ge__   s   



zinterval.__ge__c                 C   s   t |ttfr'| jrt| j| | j| S | j| }| j| }t||| jdS t |trG| j|j }| j|j }t| j|jg}t|||dS tS Nr   )	r   r"   r   r	   r   r   r   r   r#   r   r%   r   r   r&   r   r   r   __add__   s   


zinterval.__add__c                 C   sv   t |ttfr| j| }| j| }t||| jdS t |tr9| j|j }| j|j }t| j|jg}t|||dS tS r1   )	r   r"   r   r   r   r   r	   r   r#   r2   r   r   r   __sub__   s   


zinterval.__sub__c                 C   sJ   t |ttfr|| j }|| j }t||| jdS t |tr#|| S tS r1   )	r   r"   r   r   r   r   r	   r4   r#   )r   r%   r   r   r   r   r   __rsub__   s   



zinterval.__rsub__c                 C   s0   | j rt| j | j S t| j | j | j dS r1   )r	   r   r   r   r   r   r   r   __neg__   s   zinterval.__neg__c                 C   s   t |trd| jdu s|jdu rttd tdddS | jd u s%|jd u r1ttd tdd dS g }|| j|j  || j|j  || j|j  || j|j  t|}t|}t||S t |t	tfryt| j| | j| | jdS t
S )NFinfr   )r   r   r	   r   appendr   r   minmaxr"   r#   )r   r%   intersr   r   r   r   r   __mul__   s    

zinterval.__mul__c                 C   s:   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)   r   r   r   __contains__
  s   zinterval.__contains__c                 C   s8   t |ttfrt|}|| S t |tr|| S tS r   )r   r"   r   r   __truediv__r#   r)   r   r   r   __rtruediv__  s   


zinterval.__rtruediv__c                 C   sj  | j sttd td| j dS t|ttfr2|dkr'ttd tdddS t| j| | j| S t|tr|j du sA| j du rMttd tdddS |j d u sW| j d u rcttd tdd dS d|v rsttd tdd dS | }|jdk r| }| }g }||j|j  ||j|j  ||j|j  ||j|j  t|}t	|}t||S t
S )Nr7   r   r   F)r	   r   r   r   r"   r   r   r8   r:   r9   r#   )r   r%   thisr;   r   r   r   r   r   r>     s4   


zinterval.__truediv__c                 C   s|   ddl m}m} | js| S t|tr||||  S t|ttfr<|dk r.d| t	| S t
|r7t| |S t| |S tS )Nr   )explogr   )lib_intervalrA   rB   r	   r   r   r   r"   __pow__absr   _pow_int
_pow_floatr#   )r   r%   rA   rB   r   r   r   rD   B  s   


zinterval.__pow__c                 C   s   t |ttfrX| js| S |dk rM| jdkr!ttd tdddS t| j}| \}}|d dkr>ttd tdddS t	|| j  }|}t||S t|| j || j
 S t |trb|| S tS )Nr   r7   Fr   r
   )r   r   r"   r	   r   r   r   r   as_numer_denomrE   r   rD   r#   )r   r%   power_rationalnumdenomr   r   r   r   r   __rpow__T  s&   




zinterval.__rpow__c                 C   s   t | j| j| jfS r   )hashr	   r   r   r   r   r   r   __hash__m  s   zinterval.__hash__N)__name__
__module____qualname____doc__r   propertyr   r   r   r   r'   r*   r-   r.   r/   r0   r3   __radd__r4   r5   r6   r<   __rmul__r=   r?   r>   rD   rL   rN   r   r   r   r   r   *   s8    


	)r   c                 C   s$  t |}| \}}|d dkr3t| j| }t| j| }|dk r,tdt||}|S t||}|S |d dkrd| jdk rJttd tdddS | jdk rYtd| j| ddS t| j| | j| S | jdk rrt| j|  }n| j| }| jdk rt| j|  }n| j| }t||| jdS )z1Evaluates an interval raised to a floating point.r
   r   r7   Fr   N)	r   rH   rE   r   r   r   r:   r   r	   )interpowerrI   rJ   rK   r   r   retr   r   r   rG   q  s.   






rG   c                 C   st   t |}|d@ rt| j| | j| S | jdk r/| jdkr/d}t| j| | j| }t||S t| j| | j| S )z0Evaluates an interval raised to an integer powerr   r   )r"   r   r   r   r:   )rV   rW   r   r   r   r   r   rF     s   
rF   N)rR   sympy.core.numbersr   sympy.core.logicr   sympy.simplify.simplifyr   interval_membershipr   r   rG   rF   r   r   r   r   <module>   s    "  I!