
    EdF                        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e          Z# G d de#          Z$ e"e$e          d             Z% G d de#          Z& e"e&e          d             Z% G d de          Z' e"e'e          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                   h    e Zd ZU dZee         ed<   ed             Zed             Z	d Z
d Zd ZdS )	RoundFunctionz+Abstract base class for rounding functions.argsc                 p   |                      |          }||S |j        s	|j        du r|S |j        st          j        |z  j        rSt          |          }|                    t          j                  s | |          t          j        z  S  | |d          S t          j	        x}x}}t          j        |          }|D ]O}|j        s|j        rt          |          j        r||z  }*|                    t                    r||z  }J||z  }P|s|s|S |r|r0|j        r|j        s"t          j        |z  j        s|j        rv|j        ro	 t          || j        i d          \  }	}|t          |	          t          |          t          j        z  z   z  }t          j	        }n# t           t"          f$ r Y nw xY w||z  }|s|S |j        st          j        |z  j        r*| | t          |          d          t          j        z  z   S t%          |t&          t(          f          r||z   S | | |d          z   S )NFevaluateT)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iipartnpartsparttermstrs
             Clib/python3.11/site-packages/sympy/functions/elementary/integers.pyevalzRoundFunction.eval   s   S!! 	H> 	S]e3 	J 	, 3< 	,3A55)) .s1vvao--3sU++++ !"&& c"" 	 	A|  2a553C 
v 

 	 	L  
	
	M
	$1
	67oe6K5T
	 "
	 (-}
	'38RT; ; ;1gajj&@@@&(;<    	 	6L 	6AOE$9#B 	633r%yy5999!/IIIw/00 	65= 33uu55555s   AF" "F65F6c                     t                      N)r)   r-   r.   s     r7   r   zRoundFunction._eval_numberQ   s    !###    c                 &    | j         d         j        S Nr   )r   r!   selfs    r7   _eval_is_finitezRoundFunction._eval_is_finiteU   s    y|%%r<   c                 &    | j         d         j        S r>   r   r$   r?   s    r7   _eval_is_realzRoundFunction._eval_is_realX       y|##r<   c                 &    | j         d         j        S r>   rC   r?   s    r7   _eval_is_integerzRoundFunction._eval_is_integer[   rE   r<   N)__name__
__module____qualname____doc__tTupler   __annotations__classmethodr8   r   rA   rD   rG    r<   r7   r   r      s         55
,36 36 [36j $ $ [$& & &$ $ $$ $ $ $ $r<   r   c                   l    e Zd ZdZdZed             ZddZddZd Z	d	 Z
d
 Zd Zd Zd Zd Z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] http://mathworld.wolfram.com/FloorFunction.html

    c                     |j         r|                                S t          d || fD                       r|S |j        r |                    t
                    d         S d S )Nc              3   X   K   | ]%}t           t          fD ]}t          ||          V  &d S r:   r+   r,   r*   .0r0   js      r7   	<genexpr>z%floor._eval_number.<locals>.<genexpr>   d       @ @ug.>@ @)* Aq!! @ @ @ @ @ @ @r<   r   )	is_Numberr+   anyis_NumberSymbolapproximation_intervalr   r;   s     r7   r   zfloor._eval_number   s    = 	99;; @ @t@ @ @ @ @ 	J 	:--g66q99	: 	:r<   Nr   c                 <   | j         d         }|                    |d          }|                     |d          }|t          j        u r=|                    |dt          |          j        rdnd          }t          |          }|j        rz||k    rr|dk    rG|	                    |d          }|	                    |d          }||k    rt          d| z            n|	                    ||          }|j        r|dz
  n|S |S |                    |||	          S 
Nr   -+dirrQ   cdir   z,Two sided limit of %s around 0does not exist)logxre   )r   subsr   NaNlimitr   is_negativer+   r!   rc   
ValueErroras_leading_term	r@   xrg   re   r.   arg0r6   ndirlndirs	            r7   _eval_as_leading_termzfloor._eval_as_leading_term   s:   ilxx1~~IIaOO15= 	99Qbhh.B'Kss9LLDdA> 	qy 19 1GGABG//E77117--Du} =( *57;*< = = == 7714700D $ 07q1uua7""14d";;;r<   c                    | j         d         }|                    |d          }|                     |d          }|t          j        u r=|                    |dt          |          j        rdnd          }t          |          }|j        rIddl	m
} ddlm}	 |                    ||||          }
|dk    r |	d|df          n |dd          }|
|z   S ||k    r-|                    ||dk    r|nd	          }|j        r|dz
  n|S |S )
Nr   r`   ra   rb   AccumBoundsOrderrf   rQ   rd   )r   rh   r   ri   rj   r   rk   r+   is_infinite!sympy.calculus.accumulationboundsrv   sympy.series.orderrx   _eval_nseriesrc   r@   ro   nrg   re   r.   rp   r6   rv   rx   sorr   s                r7   r|   zfloor._eval_nseries   s:   ilxx1~~IIaOO15= 	99Qbhh.B'Kss9LLDdA 	EEEEEE000000!!!Qd33A$%FBa!Q   B0B0BAq5L19 	771419#;44!7<<D ,31q55!3Hr<   c                 &    | j         d         j        S r>   )r   rk   r?   s    r7   _eval_is_negativezfloor._eval_is_negative       y|''r<   c                 &    | j         d         j        S r>   )r   is_nonnegativer?   s    r7   _eval_is_nonnegativezfloor._eval_is_nonnegative       y|**r<   c                 $    t          |            S r:   r,   r@   r.   kwargss      r7   _eval_rewrite_as_ceilingzfloor._eval_rewrite_as_ceiling   s    ~r<   c                 &    |t          |          z
  S r:   fracr   s      r7   _eval_rewrite_as_fraczfloor._eval_rewrite_as_frac   s    T#YYr<   c                    t          |          }| j        d         j        rG|j        r| j        d         |dz   k     S |j        r%|j        r| j        d         t          |          k     S | j        d         |k    r|j        rt           j        S |t           j        u r| j        rt           j        S t          | |d          S Nr   rf   Fr   )
r   r   r$   r    	is_numberr,   trueInfinityr!   r   r@   others     r7   __le__zfloor.__le__   s    %9Q< 	5 0y|eai// 55= 5y|genn449Q<5  	U] 	6MAJ 	4> 	6M$....r<   c                 z   t          |          }| j        d         j        rD|j        r| j        d         |k    S |j        r%|j        r| j        d         t          |          k    S | j        d         |k    r|j        rt           j        S |t           j        u r| j        rt           j	        S t          | |d          S Nr   Fr   )r   r   r$   r    r   r,   falseNegativeInfinityr!   r   r   r   s     r7   __ge__zfloor.__ge__   s    %9Q< 	6 -y|u,, 65= 6y|wu~~559Q<5  	U] 	7NA&& 	4> 	6M$....r<   c                    t          |          }| j        d         j        rG|j        r| j        d         |dz   k    S |j        r%|j        r| j        d         t          |          k    S | j        d         |k    r|j        rt           j        S |t           j        u r| j        rt           j	        S t          | |d          S r   )r   r   r$   r    r   r,   r   r   r!   r   r   r   s     r7   __gt__zfloor.__gt__   s    %9Q< 	6 1y|uqy00 65= 6y|wu~~559Q<5  	U] 	7NA&& 	4> 	6M$....r<   c                 z   t          |          }| j        d         j        rD|j        r| j        d         |k     S |j        r%|j        r| j        d         t          |          k     S | j        d         |k    r|j        rt           j        S |t           j        u r| j        rt           j	        S t          | |d          S r   )r   r   r$   r    r   r,   r   r   r!   r   r   r   s     r7   __lt__zfloor.__lt__   s    %9Q< 	5 ,y|e++ 55= 5y|genn449Q<5  	U] 	7NAJ 	4> 	6M$....r<   r>   r   )rH   rI   rJ   rK   r(   rN   r   rs   r|   r   r   r   r   r   r   r   r   rO   r<   r7   r+   r+   _   s        " "F D: : [:< < < <,   &( ( (+ + +    / / // / // / // / / / /r<   r+   c                     t          |                     t                    |          p't          |                     t                    |          S r:   )r   rewriter,   r   lhsrhss     r7   _eval_is_eqr      s>    
G$$c
*
* %ckk$$$%r<   c                   l    e Zd ZdZdZed             ZddZddZd Z	d	 Z
d
 Zd Zd Zd Zd Z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] http://mathworld.wolfram.com/CeilingFunction.html

    rf   c                     |j         r|                                S t          d || fD                       r|S |j        r |                    t
                    d         S d S )Nc              3   X   K   | ]%}t           t          fD ]}t          ||          V  &d S r:   rT   rU   s      r7   rX   z'ceiling._eval_number.<locals>.<genexpr>-  rY   r<   rf   )rZ   r,   r[   r\   r]   r   r;   s     r7   r   zceiling._eval_number)  s    = 	;;==  @ @t@ @ @ @ @ 	J 	:--g66q99	: 	:r<   Nr   c                 <   | j         d         }|                    |d          }|                     |d          }|t          j        u r=|                    |dt          |          j        rdnd          }t          |          }|j        rz||k    rr|dk    rG|	                    |d          }|	                    |d          }||k    rt          d| z            n|	                    ||          }|j        r|n|dz   S |S |                    |||	          S r_   )r   rh   r   ri   rj   r   rk   r,   r!   rc   rl   rm   rn   s	            r7   rs   zceiling._eval_as_leading_term3  s:   ilxx1~~IIaOO15= 	99Qbhh.B'Kss9LLDA> 	qy 19 1GGABG//E77117--Du} =( *57;*< = = == 7714700D ,7qq!a%7""14d";;;r<   c                    | j         d         }|                    |d          }|                     |d          }|t          j        u r=|                    |dt          |          j        rdnd          }t          |          }|j        rIddl	m
} ddlm}	 |                    ||||          }
|dk    r |	d|df          n |dd          }|
|z   S ||k    r-|                    ||dk    r|nd          }|j        r|n|dz   S |S )	Nr   r`   ra   rb   ru   rw   rf   rd   )r   rh   r   ri   rj   r   rk   r,   ry   rz   rv   r{   rx   r|   rc   r}   s                r7   r|   zceiling._eval_nseriesI  s:   ilxx1~~IIaOO15= 	99Qbhh.B'Kss9LLDA 	EEEEEE000000!!!Qd33A$%FAa!Q   Aq0A0AAq5L19 	771419#;44!7<<D(311a!e3Hr<   c                 $    t          |            S r:   r+   r   s      r7   _eval_rewrite_as_floorzceiling._eval_rewrite_as_floor\  s    sd|r<   c                 (    |t          |           z   S r:   r   r   s      r7   r   zceiling._eval_rewrite_as_frac_  s    T3$ZZr<   c                 &    | j         d         j        S r>   )r   is_positiver?   s    r7   _eval_is_positivezceiling._eval_is_positiveb  r   r<   c                 &    | j         d         j        S r>   )r   is_nonpositiver?   s    r7   _eval_is_nonpositivezceiling._eval_is_nonpositivee  r   r<   c                    t          |          }| j        d         j        rG|j        r| j        d         |dz
  k    S |j        r%|j        r| j        d         t          |          k    S | j        d         |k    r|j        rt           j        S |t           j        u r| j        rt           j	        S t          | |d          S r   )r   r   r$   r    r   r+   r   r   r!   r   r   r   s     r7   r   zceiling.__lt__h  s    %9Q< 	4 1y|uqy00 45= 4y|uU||339Q<5  	U] 	7NAJ 	4> 	6M$....r<   c                 z   t          |          }| j        d         j        rD|j        r| j        d         |k    S |j        r%|j        r| j        d         t          |          k    S | j        d         |k    r|j        rt           j        S |t           j        u r| j        rt           j	        S t          | |d          S r   )r   r   r$   r    r   r+   r   r   r!   r   r   r   s     r7   r   zceiling.__gt__v  s    %9Q< 	3 ,y|e++ 35= 3y|eEll229Q<5  	U] 	7NA&& 	4> 	6M$....r<   c                    t          |          }| j        d         j        rG|j        r| j        d         |dz
  k    S |j        r%|j        r| j        d         t          |          k    S | j        d         |k    r|j        rt           j        S |t           j        u r| j        rt           j        S t          | |d          S r   )
r   r   r$   r    r   r+   r   r   r!   r   r   s     r7   r   zceiling.__ge__  s    %9Q< 	3 0y|eai// 35= 3y|eEll229Q<5  	U] 	6MA&& 	4> 	6M$....r<   c                 z   t          |          }| j        d         j        rD|j        r| j        d         |k    S |j        r%|j        r| j        d         t          |          k    S | j        d         |k    r|j        rt           j        S |t           j        u r| j        rt           j	        S t          | |d          S r   )r   r   r$   r    r   r+   r   r   r!   r   r   r   s     r7   r   zceiling.__le__  s    %9Q< 	4 -y|u,, 45= 4y|uU||339Q<5  	U] 	7NAJ 	4> 	6M$....r<   r>   r   )rH   rI   rJ   rK   r(   rN   r   rs   r|   r   r   r   r   r   r   r   r   rO   r<   r7   r,   r,     s        " "F D: : [:< < < <,   &       ( ( (+ + +/ / // / // / // / / / /r<   r,   c                     t          |                     t                    |          p't          |                     t                    |          S r:   )r   r   r+   r   r   s     r7   r   r     s9    U##S))IU3;;t3D3DS-I-IIr<   c                   v    e Zd ZdZed             Zd Zd Zd Zd Z	d Z
d Zd	 Zd
 Zd Zd Zd Zd Zd ZdS )r   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] http://mathworld.wolfram.com/FractionalPart.html

    c                     ddl m  fd}t          j        |          }t          j        t          j        }}|D ]\}|j        st          j        |z  j        r:t          |          }|
                    t          j                  s||z  }Q||z  }W||z  }] ||          } ||          }|t          j        |z  z   S )Nr   ru   c                 *   | t           j        t           j        fv r dd          S | j        rt           j        S | j        rF| t           j        u rt           j        S | t           j        u rt           j        S | t          |           z
  S  | d          S r   )	r   r   r   r    r&   r   ri   ComplexInfinityr+   )r.   rv   r-   s    r7   _evalzfrac.eval.<locals>._eval  s    qz1#566 )"{1a(((~ v} ,!%< ,5LA-- ,5Ls++3sU++++r<   )rz   rv   r   r'   r   r&   r"   r#   r$   r   r%   )	r-   r.   r   r4   realimagr5   r0   rv   s	   `       @r7   r8   z	frac.eval  s    AAAAAA	, 	, 	, 	, 	, 	, c""VQVd 
	 
	A ~ !/!"3!< qEEuuQ_-- AIDDAIDD	uT{{uT{{aod***r<   c                 &    |t          |          z
  S r:   r   r   s      r7   r   zfrac._eval_rewrite_as_floor  s    U3ZZr<   c                 (    |t          |           z   S r:   r   r   s      r7   r   zfrac._eval_rewrite_as_ceiling  s    WcT]]""r<   c                     dS )NTrO   r?   s    r7   rA   zfrac._eval_is_finite  s    tr<   c                 &    | j         d         j        S r>   )r   is_extended_realr?   s    r7   rD   zfrac._eval_is_real  s    y|,,r<   c                 &    | j         d         j        S r>   )r   r"   r?   s    r7   _eval_is_imaginaryzfrac._eval_is_imaginary  s    y|((r<   c                 &    | j         d         j        S r>   )r   r    r?   s    r7   rG   zfrac._eval_is_integer
  s    y|&&r<   c                 d    t          | j        d         j        | j        d         j        g          S r>   )r   r   is_zeror    r?   s    r7   _eval_is_zerozfrac._eval_is_zero  s'    1-ty|/FGHHHr<   c                     dS )NFrO   r?   s    r7   r   zfrac._eval_is_negative  s    ur<   c                     | j         r<t          |          }|j        rt          j        S |                     |          }|| S t          | |d          S NFr   )r   r   is_extended_nonpositiver   r   _value_one_or_morer   r@   r   ress      r7   r   zfrac.__ge__  sa      	 UOOE, v))%00C  x$....r<   c                     | j         r<t          |          }|                     |          }|| S |j        rt          j        S t          | |d          S r   )r   r   r   is_extended_negativer   r   r   r   s      r7   r   zfrac.__gt__  sa      	UOOE))%00C  x) v$....r<   c                     | j         r;t          |          }|j        rt          j        S |                     |          }||S t          | |d          S r   )r   r   r   r   r   r   r   r   s      r7   r   zfrac.__le__+  s_      	UOOE) w))%00C 
$....r<   c                     | j         r;t          |          }|j        rt          j        S |                     |          }||S t          | |d          S r   )r   r   r   r   r   r   r   r   s      r7   r   zfrac.__lt__7  s_      	UOOE, w))%00C 
$....r<   c                     |j         rJ|j        r)|dk    }|r!t          |t                    st          j        S |j        r|j        rt          j        S d S d S d S )Nrf   )r   r   r*   r   r   r   r    r   r   s      r7   r   zfrac._value_one_or_moreC  sz    ! 	 "qj "z#z:: "6M E$5 v	 	
   r<   N)rH   rI   rJ   rK   rN   r8   r   r   rA   rD   r   rG   r   r   r   r   r   r   r   rO   r<   r7   r   r     s       / /` !+ !+ [!+F     # # #  - - -) ) )' ' 'I I I  
/ 
/ 
/
/ 
/ 
/
/ 
/ 
/
/ 
/ 
/    r<   r   c                     |                      t                    |k    s|                      t                    |k    rdS |j        rdS |                     |          }|dS d S )NTF)r   r+   r,   r   r   )r   r   r   s      r7   r   r   M  ss    Ec! 	W			$t
 u

 
 
%
%C
 u r<   N)(typingr   rL   sympy.core.basicr   sympy.core.exprr   
sympy.corer   r   sympy.core.evalfr   r	   sympy.core.functionr
   sympy.core.logicr   sympy.core.numbersr   sympy.core.relationalr   r   r   r   r   r   sympy.core.symbolr   sympy.core.sympifyr   $sympy.functions.elementary.complexesr   r   sympy.multipledispatchr   r   r+   r   r,   r   rO   r<   r7   <module>r      sp   " " " " " " " " " " " "                     A A A A A A A A ( ( ( ( ( ( % % % % % % & & & & & & C C C C C C C C C C C C C C C C $ $ $ $ $ $ ' ' ' ' ' ' 7 7 7 7 7 7 7 7 + + + + + +F$ F$ F$ F$ F$H F$ F$ F$R[/ [/ [/ [/ [/M [/ [/ [/| 
%% % %
[/ [/ [/ [/ [/m [/ [/ [/| 
'5J J Jd d d d d8 d d dN 
$
 
 
 
 
r<   