o
    8Va9                     @   s   d Z ddlmZ ddlmZ ddlm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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d+d, Zd-d. Zd/d0 Zd1d2 Zd3S )4zC The module contains implemented functions for interval arithmetic.    reduce)interval)import_modulec                 C   st   t | ttfrtt| S t | tr8| jdk r-| jdkr-tdtt| jt| j| jdS tt| jt| jS t	)Nr   is_valid)

isinstanceintfloatr   absstartendmaxr   NotImplementedErrorx r   J/usr/lib/python3/dist-packages/sympy/plotting/intervalmath/lib_interval.pyAbs   s   
"r   c                 C   Z   t d}t| ttfrt|| || S t| tr+t|| j|| j| jdS t	)z(evaluates the exponential of an intervalnumpyr   )
r   r   r	   r
   r   expr   r   r   r   r   npr   r   r   r         
 r   c                 C      t d}t| ttfr | dkrt|j |jddS t|| S t| tr^| js3t|j |j| jdS | jdkrBt|j |jddS | j	dkrQt|j |jddS t|| j	|| jS t
)z.evaluates the natural logarithm of an intervalr   r   Fr   N)r   r   r	   r
   r   inflogr   r   r   r   r   r   r   r   r   "   s   


r   c                 C   r   )z5evaluates the logarithm to the base 10 of an intervalr   r   Fr   N)r   r   r	   r
   r   r   log10r   r   r   r   r   r   r   r   r   8   s   


r   c                 C   sZ   t d}t| ttfrt|| S t| tr+|| j}|| j}t||| jdS t	)z(evaluates the tan inverse of an intervalr   r   )
r   r   r	   r
   r   Zarctanr   r   r   r   r   r   r   r   r   r   r   atanM      
r    c                 C   s  t d}t| ttfrt|| S t| tr| js"tdd| jdS t| j|j	d \}}t| j
|j	d \}}t|| j|| j
}t|| j|| j
}|| dkr`tdd| jdS ||krlt||| jdS |d d |d d krzd}|d d |d d krd}t||S t)z!evaluates the sine of an intervalr      r          @      )r   r   r	   r
   r   sinr   divmodr   pir   minr   r   r   r   Zna__nbr   r   r   r   r   r'   [   s(   

r'   c                 C   s.  t d}t| ttfrt|| S t| tr|| jr#|| js+tdd| j	dS t
| j|jd \}}t
| j|jd \}}t|| j|| j}t|| j|| j}|| dkritdd| j	dS ||krut||| j	dS |d |d krd}|d d |d d krd}t||| j	dS t)z Evaluates the cos of an intervalr   r"   r#   r   r$   r%      )r   r   r	   r
   r   r'   Zisfiniter   r   r   r(   r)   r*   cosr   r   r+   r   r   r   r/   x   s(   
r/   c                 C   s   t | t|  S )z Evaluates the tan of an interval)r'   r/   r   r   r   r   tan   s   r0   c                 C   s   t d}t| ttfr | dkrt|| S t|j |jddS t| trS| jdk r4t|j |jddS | jdk rCt|j |jddS t|| j|| j| j	dS t
)z(Evaluates the square root of an intervalr   r   Fr   N)r   r   r	   r
   r   sqrtr   r   r   r   r   r   r   r   r   r1      s   


r1   c                  G      t d}tdd | D stS dd | D }t|dkr9tdd | D r/t|j |jdd	S t|j |jd
d	S dd |D }dd |D }tt|t|S )z,Evaluates the minimum of a list of intervalsr   c                 s        | ]}t |tttfV  qd S Nr   r	   r
   r   .0argr   r   r   	<genexpr>       zimin.<locals>.<genexpr>c                 S   $   g | ]}t |ttfs|jr|qS r   r   r	   r
   r   r7   ar   r   r   
<listcomp>       
zimin.<locals>.<listcomp>r   c                 s       | ]}|j d u V  qdS FNr   r=   r   r   r   r9          Fr   Nc                 S   $   g | ]}t |ttfr|n|jqS r   r   r	   r
   r   r=   r   r   r   r?          c                 S   rD   r   r   r	   r
   r   r=   r   r   r   r?      rF   )r   allr   lenr   r   r*   argsr   new_argsZstart_arrayZ	end_arrayr   r   r   imin   s   rM   c                  G   r2   )z,Evaluates the maximum of a list of intervalsr   c                 s   r3   r4   r5   r6   r   r   r   r9      r:   zimax.<locals>.<genexpr>c                 S   r;   r   r<   r=   r   r   r   r?      r@   zimax.<locals>.<listcomp>r   c                 s   rA   rB   r   r=   r   r   r   r9      rC   Fr   Nc                 S   rD   r   rE   r=   r   r   r   r?      rF   c                 S   rD   r   rG   r=   r   r   r   r?      rF   )r   rH   r   rI   r   r   r   rJ   r   r   r   imax   s   rN   c                 C   r   )z,Evaluates the hyperbolic sine of an intervalr   r   )
r   r   r	   r
   r   sinhr   r   r   r   r   r   r   r   rO      r   rO   c                 C   s   t d}t| ttfrt|| || S t| trN| jdk r:| jdkr:t|| j|| j}td|| j	dS || j}|| j}t||| j	dS t
)z+Evaluates the hyperbolic cos of an intervalr   r   r#   r   )r   r   r	   r
   r   coshr   r   r   r   r   )r   r   r   r   r   r   r   rP      s   
rP   c                 C   r   )z+Evaluates the hyperbolic tan of an intervalr   r   )
r   r   r	   r
   r   tanhr   r   r   r   r   r   r   r   rQ      r   rQ   c                 C      t d}t| ttfr&t| dkrt|j |jddS t|| || S t| trl| jdu s:| j	dks:| j
dk rDt|j |jddS | j	dk sN| j
dkrXt|j |jddS || j	}|| j
}t||| jdS dS )z)Evaluates the inverse sine of an intervalr   r#   Fr   r"   N)r   r   r	   r
   r   r   r   Zarcsinr   r   r   r   r   r   r   asin  s   
rS   c                 C   rR   )z(Evaluates the inverse cos of an intervalr   r#   Fr   r"   N)r   r   r	   r
   r   r   r   Zarccosr   r   r   r   r   r   r   acos  s   
rT   c                 C      t d}t| ttfrt|| S t| trE| jdu r&t|j |jddS || j}|| j	}||kr>t||| jdS t||ddS t
S )z$Evaluates the ceiling of an intervalr   Fr   N)r   r   r	   r
   r   ceilr   r   r   r   r   r   r   r   r   rV   4     

rV   c                 C   rU   )z"Evaluates the floor of an intervalr   Fr   N)r   r   r	   r
   r   floorr   r   r   r   r   r   r   r   r   rX   I  rW   rX   c                 C   s   t d}t| ttfr | dk rt|j |jddS t|| S t| trW| jdk r4t|j |jddS | jdk rCt|j |jddS || j}|| j}t||| j	dS t
S )z6Evaluates the inverse hyperbolic cosine of an intervalr   r#   Fr   N)r   r   r	   r
   r   r   Zarccoshr   r   r   r   r   r   r   r   acosh^  s   


rY   c                 C   sZ   t d}t| ttfrt|| S t| tr+|| j}|| j}t||| jdS t	S )z4Evaluates the inverse hyperbolic sine of an intervalr   r   )
r   r   r	   r
   r   Zarcsinhr   r   r   r   r   r   r   r   asinhw  r!   rZ   c                 C   s   t d}t| ttfr"t| dkrt|j |jddS t|| S t| trh| jdu s6| j	dks6| j
dkr@t|j |jddS | j	dksJ| j
dkrTt|j |jddS || j	}|| j
}t||| jdS tS )z7Evaluates the inverse hyperbolic tangent of an intervalr   r#   Fr   r"   N)r   r   r	   r
   r   r   r   Zarctanhr   r   r   r   r   r   r   r   atanh  s   
r[   c                  G      dd }t || S )zZDefines the three valued ``And`` behaviour for a 2-tuple of
     three valued logic valuesc                 S      | d du s|d du rd}n| d d u s|d d u rd }nd}| d du s,|d du r2d}||fS | d d u s>|d d u rDd }||fS d}||fS )Nr   FTr#   r   Zcmp_intervalaZcmp_intervalbfirstsecondr   r   r   
reduce_and  s   zAnd.<locals>.reduce_andr   )rK   ra   r   r   r   And  s   
rb   c                  G   r\   )zYDefines the three valued ``Or`` behaviour for a 2-tuple of
     three valued logic valuesc                 S   r]   )Nr   TFr#   r   r^   r   r   r   	reduce_or  s   zOr.<locals>.reduce_orr   )rK   rc   r   r   r   Or  s   
rd   N)__doc__	functoolsr   Zsympy.plotting.intervalmathr   Zsympy.externalr   r   r   r   r   r    r'   r/   r0   r1   rM   rN   rO   rP   rQ   rS   rT   rV   rX   rY   rZ   r[   rb   rd   r   r   r   r   <module>   s6    