U
    -eJ                     @   s6  d dl mZ d dlmZ d dlmZ d dlmZm	Z	 d dl
mZmZ d dlmZ d dlmZ d dlmZ d d	lmZmZmZmZmZmZ d d
lmZ d dlmZ d dlmZm Z  d dl!m"Z" G dd deZ#G dd de#Z$e"e$edd Z%G dd de#Z&e"e&edd Z%G dd deZ'e"e'edd Z%dS )    )Tuple)Basic)Expr)AddS)get_integer_partPrecisionExhausted)Function)fuzzy_or)Integer)GtLtGeLe
Relationalis_eq)Symbol)_sympify)imre)dispatchc                   @   sN   e Zd ZU dZee ed< edd Zedd Z	dd Z
d	d
 Zdd ZdS )RoundFunctionz+Abstract base class for rounding functions.argsc           
   	   C   s  |  |}|d k	r|S |js&|jdkr*|S |js<tj| jrjt|}|tjs^| |tj S | |ddS tj	 } }}t
|}|D ]@}|js|jrt|jr||7 }q|tr||7 }q||7 }q|s|s|S |rb|r|jr|jstj| js|jrb|jrbz:t|| ji dd\}	}|t|	t|tj  7 }tj	}W n ttfk
r`   Y nX ||7 }|st|S |jstj| jr|| t|ddtj  S t|ttfr|| S || |dd S d S )NFevaluateT)Zreturn_ints)_eval_number
is_integer	is_finiteis_imaginaryr   ImaginaryUnitis_realr   hasZeror   	make_argsr   r   _dirr   r   NotImplementedError
isinstancefloorceiling)
clsargviZipartZnpartZsparttermstr r0   d/var/www/html/Darija-Ai-Train/env/lib/python3.8/site-packages/sympy/functions/elementary/integers.pyeval   sh    






   

zRoundFunction.evalc                 C   s
   t  d S N)r%   r)   r*   r0   r0   r1   r   Q   s    zRoundFunction._eval_numberc                 C   s   | j d jS Nr   )r   r   selfr0   r0   r1   _eval_is_finiteU   s    zRoundFunction._eval_is_finitec                 C   s   | j d jS r5   r   r    r6   r0   r0   r1   _eval_is_realX   s    zRoundFunction._eval_is_realc                 C   s   | j d jS r5   r9   r6   r0   r0   r1   _eval_is_integer[   s    zRoundFunction._eval_is_integerN)__name__
__module____qualname____doc__tTupler   __annotations__classmethodr2   r   r8   r:   r;   r0   r0   r0   r1   r      s   

5
r   c                   @   st   e Zd ZdZdZedd ZdddZd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S )r'   a  
    Floor is a univariate function which returns the largest integer
    value not greater than its argument. This implementation
    generalizes floor to complex numbers by taking the floor of the
    real and imaginary parts separately.

    Examples
    ========

    >>> from sympy import floor, E, I, S, Float, Rational
    >>> floor(17)
    17
    >>> floor(Rational(23, 10))
    2
    >>> floor(2*E)
    5
    >>> floor(-Float(0.567))
    -1
    >>> floor(-I/2)
    -I
    >>> floor(S(5)/2 + 5*I/2)
    2 + 2*I

    See Also
    ========

    sympy.functions.elementary.integers.ceiling

    References
    ==========

    .. [1] "Concrete mathematics" by Graham, pp. 87
    .. [2] https://mathworld.wolfram.com/FloorFunction.html

    c                 C   sB   |j r| S tdd || fD r*|S |jr>|td S d S )Nc                 s   s&   | ]}t tfD ]}t||V  qqd S r3   r'   r(   r&   .0r,   jr0   r0   r1   	<genexpr>   s    
 z%floor._eval_number.<locals>.<genexpr>r   )	is_Numberr'   anyis_NumberSymbolapproximation_intervalr   r4   r0   r0   r1   r      s    zfloor._eval_numberNr   c           	      C   s   ddl m} | jd }||d}| |d}|tjksBt||rh|j|dt|j	rXdndd}t
|}|jr||kr|j||d}|j	r|d S |S |S |j|||dS 	Nr   AccumBounds-+dircdir   logxrU   )!sympy.calculus.accumulationboundsrO   r   subsr   NaNr&   limitr   is_negativer'   r   rS   as_leading_term	r7   xrX   rU   rO   r*   arg0r/   ndirr0   r0   r1   _eval_as_leading_term   s    
zfloor._eval_as_leading_termc                 C   s   | j d }||d}| |d}|tjkrR|j|dt|jrBdndd}t|}|jrddl	m
} ddlm}	 |||||}
|dkr|	d|dfn|dd}|
| S ||kr|j||dkr|ndd	}|jr|d S |S |S d S )
Nr   rP   rQ   rR   rN   OrderrV   rC   rT   )r   rZ   r   r[   r\   r   r]   r'   is_infiniterY   rO   sympy.series.orderre   _eval_nseriesrS   r7   r`   nrX   rU   r*   ra   r/   rO   re   sorb   r0   r0   r1   rh      s     

 zfloor._eval_nseriesc                 C   s   | j d jS r5   )r   r]   r6   r0   r0   r1   _eval_is_negative   s    zfloor._eval_is_negativec                 C   s   | j d jS r5   )r   Zis_nonnegativer6   r0   r0   r1   _eval_is_nonnegative   s    zfloor._eval_is_nonnegativec                 K   s   t |  S r3   r(   r7   r*   kwargsr0   r0   r1   _eval_rewrite_as_ceiling   s    zfloor._eval_rewrite_as_ceilingc                 K   s   |t | S r3   fracrp   r0   r0   r1   _eval_rewrite_as_frac   s    zfloor._eval_rewrite_as_fracc                 C   s   t |}| jd jrJ|jr,| jd |d k S |jrJ|jrJ| jd t|k S | jd |krd|jrdt jS |t jkrz| jrzt jS t	| |ddS Nr   rV   Fr   )
r   r   r    r   	is_numberr(   trueInfinityr   r   r7   otherr0   r0   r1   __le__   s    zfloor.__le__c                 C   s   t |}| jd jrF|jr(| jd |kS |jrF|jrF| jd t|kS | jd |kr`|jr`t jS |t jkrv| jrvt j	S t
| |ddS Nr   Fr   )r   r   r    r   rw   r(   falseNegativeInfinityr   rx   r   rz   r0   r0   r1   __ge__   s    zfloor.__ge__c                 C   s   t |}| jd jrJ|jr,| jd |d kS |jrJ|jrJ| jd t|kS | jd |krd|jrdt jS |t jkrz| jrzt j	S t
| |ddS rv   )r   r   r    r   rw   r(   r~   r   r   rx   r   rz   r0   r0   r1   __gt__   s    zfloor.__gt__c                 C   s   t |}| jd jrF|jr(| jd |k S |jrF|jrF| jd t|k S | jd |kr`|jr`t jS |t jkrv| jrvt j	S t
| |ddS r}   )r   r   r    r   rw   r(   r~   ry   r   rx   r   rz   r0   r0   r1   __lt__   s    zfloor.__lt__)Nr   )r   )r<   r=   r>   r?   r$   rB   r   rc   rh   rm   rn   rr   ru   r|   r   r   r   r0   r0   r0   r1   r'   _   s   #
	

r'   c                 C   s    t | t|pt | t|S r3   )r   rewriter(   rt   lhsrhsr0   r0   r1   _eval_is_eq   s    r   c                   @   st   e Zd ZdZdZedd ZdddZd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S )r(   a  
    Ceiling is a univariate function which returns the smallest integer
    value not less than its argument. This implementation
    generalizes ceiling to complex numbers by taking the ceiling of the
    real and imaginary parts separately.

    Examples
    ========

    >>> from sympy import ceiling, E, I, S, Float, Rational
    >>> ceiling(17)
    17
    >>> ceiling(Rational(23, 10))
    3
    >>> ceiling(2*E)
    6
    >>> ceiling(-Float(0.567))
    0
    >>> ceiling(I/2)
    I
    >>> ceiling(S(5)/2 + 5*I/2)
    3 + 3*I

    See Also
    ========

    sympy.functions.elementary.integers.floor

    References
    ==========

    .. [1] "Concrete mathematics" by Graham, pp. 87
    .. [2] https://mathworld.wolfram.com/CeilingFunction.html

    rV   c                 C   sB   |j r| S tdd || fD r*|S |jr>|td S d S )Nc                 s   s&   | ]}t tfD ]}t||V  qqd S r3   rD   rE   r0   r0   r1   rH   '  s    
 z'ceiling._eval_number.<locals>.<genexpr>rV   )rI   r(   rJ   rK   rL   r   r4   r0   r0   r1   r   #  s    zceiling._eval_numberNr   c           	      C   s   ddl m} | jd }||d}| |d}|tjksBt||rh|j|dt|j	rXdndd}t
|}|jr||kr|j||d}|j	r|S |d S |S |j|||dS rM   )rY   rO   r   rZ   r   r[   r&   r\   r   r]   r(   r   rS   r^   r_   r0   r0   r1   rc   -  s    
zceiling._eval_as_leading_termc                 C   s   | j d }||d}| |d}|tjkrR|j|dt|jrBdndd}t|}|jrddl	m
} ddlm}	 |||||}
|dkr|	d|dfn|dd}|
| S ||kr|j||dkr|ndd}|jr|S |d S |S d S )	Nr   rP   rQ   rR   rN   rd   rV   rT   )r   rZ   r   r[   r\   r   r]   r(   rf   rY   rO   rg   re   rh   rS   ri   r0   r0   r1   rh   =  s     

 zceiling._eval_nseriesc                 K   s   t |  S r3   r'   rp   r0   r0   r1   _eval_rewrite_as_floorP  s    zceiling._eval_rewrite_as_floorc                 K   s   |t |  S r3   rs   rp   r0   r0   r1   ru   S  s    zceiling._eval_rewrite_as_fracc                 C   s   | j d jS r5   )r   is_positiver6   r0   r0   r1   _eval_is_positiveV  s    zceiling._eval_is_positivec                 C   s   | j d jS r5   )r   Zis_nonpositiver6   r0   r0   r1   _eval_is_nonpositiveY  s    zceiling._eval_is_nonpositivec                 C   s   t |}| jd jrJ|jr,| jd |d kS |jrJ|jrJ| jd t|kS | jd |krd|jrdt jS |t jkrz| jrzt j	S t
| |ddS rv   )r   r   r    r   rw   r'   r~   ry   r   rx   r   rz   r0   r0   r1   r   \  s    zceiling.__lt__c                 C   s   t |}| jd jrF|jr(| jd |kS |jrF|jrF| jd t|kS | jd |kr`|jr`t jS |t jkrv| jrvt j	S t
| |ddS r}   )r   r   r    r   rw   r'   r~   r   r   rx   r   rz   r0   r0   r1   r   j  s    zceiling.__gt__c                 C   s   t |}| jd jrJ|jr,| jd |d kS |jrJ|jrJ| jd t|kS | jd |krd|jrdt jS |t jkrz| jrzt jS t	| |ddS rv   )
r   r   r    r   rw   r'   rx   r   r   r   rz   r0   r0   r1   r   x  s    zceiling.__ge__c                 C   s   t |}| jd jrF|jr(| jd |kS |jrF|jrF| jd t|kS | jd |kr`|jr`t jS |t jkrv| jrvt j	S t
| |ddS r}   )r   r   r    r   rw   r'   r~   ry   r   rx   r   rz   r0   r0   r1   r|     s    zceiling.__le__)Nr   )r   )r<   r=   r>   r?   r$   rB   r   rc   rh   r   ru   r   r   r   r   r   r|   r0   r0   r0   r1   r(      s   #
	

r(   c                 C   s    t | t|pt | t|S r3   )r   r   r'   rt   r   r0   r0   r1   r     s    c                   @   s   e Zd Z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dd Zdd Zdd Zdd Zd$d d!Zd%d"d#ZdS )&rt   a  Represents the fractional part of x

    For real numbers it is defined [1]_ as

    .. math::
        x - \left\lfloor{x}\right\rfloor

    Examples
    ========

    >>> from sympy import Symbol, frac, Rational, floor, I
    >>> frac(Rational(4, 3))
    1/3
    >>> frac(-Rational(4, 3))
    2/3

    returns zero for integer arguments

    >>> n = Symbol('n', integer=True)
    >>> frac(n)
    0

    rewrite as floor

    >>> x = Symbol('x')
    >>> frac(x).rewrite(floor)
    x - floor(x)

    for complex arguments

    >>> r = Symbol('r', real=True)
    >>> t = Symbol('t', real=True)
    >>> frac(t + I*r)
    I*frac(r) + frac(t)

    See Also
    ========

    sympy.functions.elementary.integers.floor
    sympy.functions.elementary.integers.ceiling

    References
    ===========

    .. [1] https://en.wikipedia.org/wiki/Fractional_part
    .. [2] https://mathworld.wolfram.com/FractionalPart.html

    c                    s   ddl m   fdd}t|}tjtj }}|D ]F}|jsLtj| jrtt	|}|
tjsj||7 }q|||7 }q6||7 }q6||}||}|tj|  S )Nr   rN   c                    sd   | t jt jfkr ddS | jr&t jS | jrX| t jkr<t jS | t jkrLt jS | t|  S | ddS rv   )	r   ry   r   r   r"   rw   r[   ComplexInfinityr'   )r*   rO   r)   r0   r1   _eval  s    


zfrac.eval.<locals>._eval)rY   rO   r   r#   r   r"   r   r   r    r   r!   )r)   r*   r   r-   realimagr.   r,   r0   r   r1   r2     s    



z	frac.evalc                 K   s   |t | S r3   r   rp   r0   r0   r1   r     s    zfrac._eval_rewrite_as_floorc                 K   s   |t |  S r3   ro   rp   r0   r0   r1   rr     s    zfrac._eval_rewrite_as_ceilingc                 C   s   dS )NTr0   r6   r0   r0   r1   r8     s    zfrac._eval_is_finitec                 C   s   | j d jS r5   )r   is_extended_realr6   r0   r0   r1   r:     s    zfrac._eval_is_realc                 C   s   | j d jS r5   )r   r   r6   r0   r0   r1   _eval_is_imaginary  s    zfrac._eval_is_imaginaryc                 C   s   | j d jS r5   )r   r   r6   r0   r0   r1   r;     s    zfrac._eval_is_integerc                 C   s   t | jd j| jd jgS r5   )r
   r   is_zeror   r6   r0   r0   r1   _eval_is_zero  s    zfrac._eval_is_zeroc                 C   s   dS )NFr0   r6   r0   r0   r1   rm     s    zfrac._eval_is_negativec                 C   s@   | j r2t|}|jrtjS | |}|d k	r2| S t| |ddS NFr   )r   r   is_extended_nonpositiver   rx   _value_one_or_morer   r7   r{   resr0   r0   r1   r     s    
zfrac.__ge__c                 C   s@   | j r2t|}| |}|d k	r&| S |jr2tjS t| |ddS r   )r   r   r   is_extended_negativer   rx   r   r   r0   r0   r1   r     s    
zfrac.__gt__c                 C   s>   | j r0t|}|jrtjS | |}|d k	r0|S t| |ddS r   )r   r   r   r   r~   r   r   r   r0   r0   r1   r|     s    
zfrac.__le__c                 C   s>   | j r0t|}|jrtjS | |}|d k	r0|S t| |ddS r   )r   r   r   r   r~   r   r   r   r0   r0   r1   r   +  s    
zfrac.__lt__c                 C   s>   |j r:|jr(|dk}|r(t|ts(tjS |jr:|jr:tjS d S )NrV   )r   rw   r&   r   r   rx   r   r   r   r0   r0   r1   r   7  s    zfrac._value_one_or_moreNr   c           	      C   s   ddl m} | jd }||d}| |d}|jrn|jrh|j||d}|jrTtj	S || j
|||dS |S n|tjtjtjfkr|ddS |j
|||dS )Nr   rN   rT   rW   rV   )rY   rO   r   rZ   r   r   rS   r]   r   Oner^   r   ry   r   r_   r0   r0   r1   rc   @  s    

zfrac._eval_as_leading_termc                 C   s   ddl m} | jd }||d}| |d}|jrvddlm}	 |dkrV|d|dfn|	dd||| |df }
|
S || j||||d}|jr|j	||d}||j
rtjntj7 }n||7 }|S d S )Nr   rd   rN   rV   rW   rT   )rg   re   r   rZ   rf   rY   rO   rh   r   rS   r]   r   r   r"   )r7   r`   rj   rX   rU   re   r*   ra   r/   rO   rl   r   rb   r0   r0   r1   rh   R  s    
2zfrac._eval_nseries)Nr   )r   )r<   r=   r>   r?   rB   r2   r   rr   r8   r:   r   r;   r   rm   r   r   r|   r   r   rc   rh   r0   r0   r0   r1   rt     s$   0
#	
rt   c                 C   sD   |  t|ks|  t|kr dS |jr*dS | |}|d k	r@dS d S )NTF)r   r'   r(   r   r   )r   r   r   r0   r0   r1   r   f  s    
N)(typingr   r@   Zsympy.core.basicr   Zsympy.core.exprr   Z
sympy.corer   r   Zsympy.core.evalfr   r   Zsympy.core.functionr	   Zsympy.core.logicr
   Zsympy.core.numbersr   Zsympy.core.relationalr   r   r   r   r   r   Zsympy.core.symbolr   Zsympy.core.sympifyr   Z$sympy.functions.elementary.complexesr   r   Zsympy.multipledispatchr   r   r'   r   r(   rt   r0   r0   r0   r1   <module>   s2    I 
 
 M