U
    ZÊ¹jÙ9  ã                   @   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   sz   t | ttfƒrtt| ƒƒS t | tƒrr| jdk rZ| jdkrZtdtt| jƒt| jƒƒ| jd�S tt| jƒt| jƒƒS nt	‚d S )Nr   ©Úis_valid)
Ú
isinstanceÚintÚfloatr   ÚabsÚstartÚendÚmaxr   ÚNotImplementedError©Úx© r   úg/var/www/html/bwave/python/venv/lib/python3.8/site-packages/sympy/plotting/intervalmath/lib_interval.pyÚAbs   s    
"r   c                 C   s^   t dƒ}t| ttfƒr,t| | ¡| | ¡ƒS t| tƒrVt| | j¡| | j¡| jd�S t	‚dS )z(evaluates the exponential of an intervalÚnumpyr   N)
r   r   r	   r
   r   Úexpr   r   r   r   ©r   Únpr   r   r   r      s    
 r   c                 C   sÆ   t dƒ}t| ttfƒrB| dkr2t|j |jdd�S t| | ¡ƒS n€t| tƒr¾| jsht|j |j| jd�S | jdkr†t|j |jdd�S | j	dkr¤t|j |jdd�S t| | j	¡| | j¡ƒS t
‚dS )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   sÆ   t dƒ}t| ttfƒrB| dkr2t|j |jdd�S t| | ¡ƒS n€t| tƒr¾| jsht|j |j| jd�S | jdkr†t|j |jdd�S | j	dkr¤t|j |jdd�S t| | j	¡| | j¡ƒS t
‚dS )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   s^   t dƒ}t| ttfƒr$t| | ¡ƒS t| tƒrV| | j¡}| | j¡}t||| jd�S t	‚dS )z(evaluates the tan inverse of an intervalr   r   N)
r   r   r	   r
   r   Zarctanr   r   r   r   ©r   r   r   r   r   r   r   ÚatanM   s    
r   c                 C   s(  t dƒ}t| ttfƒr$t| | ¡ƒS t| tƒ�r | jsFt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rÚt||| jd�S |d d |d d kröd}|d d |d d k�rd}t||ƒS nt‚dS )	z!evaluates the sine of an intervalr   éÿÿÿÿé   r   ç       @é   é   N)r   r   r	   r
   r   Úsinr   Údivmodr   Úpir   Úminr   r   ©r   r   ÚnaÚ__Únbr   r   r   r   r   r#   [   s(    r#   c                 C   s:  t dƒ}t| ttfƒr$t| | ¡ƒS t| tƒ�r2| | j¡rH| | j¡sXt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rìt||| j	d�S |d |d k�rd}|d d |d d k�r d}t||| j	d�S nt‚dS )	z Evaluates the cos of an intervalr   r   r   r   r    r!   é   N)r   r   r	   r
   r   r#   Ú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    r.   c                 C   s²   t dƒ}t| ttfƒrB| dkr,t| | ¡ƒS t|j |jdd�S nlt| tƒrª| jdk rjt|j |jdd�S | jdk rˆt|j |jdd�S t| | j¡| | j¡| j	d�S nt
‚dS )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   r/   œ   s    


ÿr/   c                  G   s¤   t dƒ}tdd„ | D ƒƒstS dd„ | D ƒ}t|ƒdkrrt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 d
S )z,Evaluates the minimum of a list of intervalsr   c                 s   s   | ]}t |tttfƒV  qd S ©N©r   r	   r
   r   ©Ú.0Úargr   r   r   Ú	<genexpr>µ   s     zimin.<locals>.<genexpr>c                 S   s$   g | ]}t |ttfƒs|jr|‘qS r   ©r   r	   r
   r   ©r3   Úar   r   r   Ú
<listcomp>¸   s     ÿzimin.<locals>.<listcomp>r   c                 s   s   | ]}|j d kV  qdS ©FNr   r7   r   r   r   r5   »   s     Fr   Nc                 S   s$   g | ]}t |ttfƒr|n|j‘qS r   ©r   r	   r
   r   r7   r   r   r   r9   ¿   s   ÿc                 S   s$   g | ]}t |ttfƒr|n|j‘qS r   ©r   r	   r
   r   r7   r   r   r   r9   Â   s   ÿ)r   Úallr   Úlenr   r   r&   ©Úargsr   Únew_argsZstart_arrayÚ	end_arrayr   r   r   Úimin²   s    ÿÿrC   c                  G   s¤   t dƒ}tdd„ | D ƒƒstS dd„ | D ƒ}t|ƒdkrrt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 d
S )z,Evaluates the maximum of a list of intervalsr   c                 s   s   | ]}t |tttfƒV  qd S r0   r1   r2   r   r   r   r5   Ê   s     zimax.<locals>.<genexpr>c                 S   s$   g | ]}t |ttfƒs|jr|‘qS r   r6   r7   r   r   r   r9   Í   s     ÿzimax.<locals>.<listcomp>r   c                 s   s   | ]}|j d kV  qdS r:   r   r7   r   r   r   r5   Ð   s     Fr   Nc                 S   s$   g | ]}t |ttfƒr|n|j‘qS r   r;   r7   r   r   r   r9   Ô   s   ÿc                 S   s$   g | ]}t |ttfƒr|n|j‘qS r   r<   r7   r   r   r   r9   ×   s   ÿ)r   r=   r   r>   r   r   r   r?   r   r   r   ÚimaxÇ   s    ÿÿrD   c                 C   s^   t dƒ}t| ttfƒr,t| | ¡| | ¡ƒS t| tƒrVt| | j¡| | j¡| jd�S t	‚dS )z,Evaluates the hyperbolic sine of an intervalr   r   N)
r   r   r	   r
   r   Úsinhr   r   r   r   r   r   r   r   rE   Þ   s    
 rE   c                 C   s¦   t dƒ}t| ttfƒr,t| | ¡| | ¡ƒS t| tƒrž| jdk rt| jdkrtt| | j¡| | j¡ƒ}td|| j	d�S | | j¡}| | j¡}t||| j	d�S nt
‚dS )z+Evaluates the hyperbolic cos of an intervalr   r   r   r   N)r   r   r	   r
   r   Úcoshr   r   r   r   r   )r   r   r   r   r   r   r   rF   é   s    
rF   c                 C   s^   t dƒ}t| ttfƒr,t| | ¡| | ¡ƒS t| tƒrVt| | j¡| | j¡| jd�S t	‚dS )z+Evaluates the hyperbolic tan of an intervalr   r   N)
r   r   r	   r
   r   Útanhr   r   r   r   r   r   r   r   rG   ý   s    
 rG   c                 C   sÞ   t dƒ}t| ttfƒrNt| ƒdkr6t|j |jdd�S t| | ¡| | ¡ƒS nŒt| tƒrÚ| jdksv| j	dksv| j
dk rŠt|j |jdd�S | j	dk sž| j
dkr²t|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    
rH   c                 C   sÞ   t dƒ}t| ttfƒrNt| ƒdkr6t|j |jdd�S t| | ¡| | ¡ƒS nŒt| tƒrÚ| jdksv| j	dksv| j
dk rŠt|j |jdd�S | j	dk sž| j
dkr²t|j |jdd�S | | j	¡}| | j
¡}t||| jd�S dS )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    
rI   c                 C   s”   t dƒ}t| ttfƒr$t| | ¡ƒS t| tƒrŒ| jdkrLt|j |jdd�S | | j¡}| | j	¡}||kr|t||| jd�S t||dd�S nt
S dS )z$Evaluates the ceiling of an intervalr   Fr   N)r   r   r	   r
   r   Úceilr   r   r   r   r   r   r   r   r   rJ   4  s    

rJ   c                 C   s”   t dƒ}t| ttfƒr$t| | ¡ƒS t| tƒrŒ| jdkrLt|j |jdd�S | | j¡}| | j	¡}||kr|t||| jd�S t||dd�S nt
S dS )z"Evaluates the floor of an intervalr   Fr   N)r   r   r	   r
   r   Úfloorr   r   r   r   r   r   r   r   r   rK   I  s    

rK   c                 C   sº   t dƒ}t| ttfƒrB| dk r2t|j |jdd�S t| | ¡ƒS ntt| tƒr²| jdk rjt|j |jdd�S | jdk rˆt|j |jdd�S | | j¡}| | j¡}t||| j	d�S nt
S d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    


rL   c                 C   s^   t dƒ}t| ttfƒr$t| | ¡ƒS t| tƒrV| | j¡}| | j¡}t||| jd�S t	S dS )z4Evaluates the inverse hyperbolic sine of an intervalr   r   N)
r   r   r	   r
   r   Zarcsinhr   r   r   r   r   r   r   r   Úasinhw  s    
rM   c                 C   sÜ   t dƒ}t| ttfƒrFt| ƒdkr6t|j |jdd�S t| | ¡ƒS n’t| tƒrÔ| jdksn| j	dksn| j
dkr‚t|j |jdd�S | j	dks–| j
dkrªt|j |jdd�S | | j	¡}| | j
¡}t||| jd�S ntS d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    
rN   c                  G   s   dd„ }t || ƒS )zZDefines the three valued ``And`` behaviour for a 2-tuple of
     three valued logic valuesc                 S   sˆ   | d dks|d dkrd}n"| d d ks6|d d kr<d }nd}| d dksX|d dkr^d}n"| d d ksv|d d kr|d }nd}||fS )Nr   FTr   r   ©Zcmp_intervalaZcmp_intervalbÚfirstÚsecondr   r   r   Ú
reduce_and¡  s    zAnd.<locals>.reduce_andr   )r@   rR   r   r   r   ÚAndž  s    rS   c                  G   s   dd„ }t || ƒS )zYDefines the three valued ``Or`` behaviour for a 2-tuple of
     three valued logic valuesc                 S   sˆ   | d dks|d dkrd}n"| d d ks6|d d kr<d }nd}| d dksX|d dkr^d}n"| d d ksv|d d kr|d }nd}||fS )Nr   TFr   r   rO   r   r   r   Ú	reduce_orµ  s    zOr.<locals>.reduce_orr   )r@   rT   r   r   r   ÚOr²  s    rU   N)Ú__doc__Ú	functoolsr   Zsympy.plotting.intervalmathr   Zsympy.externalr   r   r   r   r   r   r#   r-   r.   r/   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   rM   rN   rS   rU   r   r   r   r   Ú<module>   s4   