U
    	-e9                     @   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   i/var/www/html/Darija-Ai-Train/env/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 nt| tr| jsht|j |j| jdS | jdkrt|j |jddS | j	dkrt|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 nt| tr| jsht|j |j| jdS | jdkrt|j |jddS | j	dkrt|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rtdd| jdS ||krt||| jdS |d d |d d krd}|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rtdd| j	dS ||krt||| 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 rt|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 nt| tr| jdksv| j	dksv| j
dk rt|j |jddS | j	dk s| j
dkrt|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 nt| tr| jdksv| j	dksv| j
dk rt|j |jddS | j	dk s| j
dkrt|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 rt|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 nt| tr| jdksn| j	dksn| j
dkrt|j |jddS | j	dks| j
dkrt|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   