
    RieJ                        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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] https://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                    ddl m} | j        d         }|                    |d          }|                     |d          }|t          j        u st          ||          r=|                    |dt          |          j	        rdnd          }t          |          }|j        r-||k    r%|                    ||          }|j	        r|dz
  n|S |S |                    |||          S 	Nr   AccumBounds-+dircdir   logxrg   )!sympy.calculus.accumulationboundsra   r   subsr   NaNr*   limitr   is_negativer+   r!   re   as_leading_term	r@   xrj   rg   ra   r.   arg0r6   ndirs	            r7   _eval_as_leading_termzfloor._eval_as_leading_term   s    AAAAAAilxx1~~IIaOO15==Jt[99=99Qbhh.B'Kss9LLDdA> 	qyywwqtw,, $ 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   rb   rc   rd   r`   Orderrh   rQ   rf   )r   rl   r   rm   rn   r   ro   r+   is_infiniterk   ra   sympy.series.orderrx   _eval_nseriesre   r@   rr   nrj   rg   r.   rs   r6   ra   rx   sort   s                r7   r{   zfloor._eval_nseries   s2   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$%FFa!Q   B0B0BAq5L199771419944!7<<D ,31q55!3Hr<   c                 &    | j         d         j        S r>   )r   ro   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   rh   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   ru   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] https://mathworld.wolfram.com/CeilingFunction.html

    rh   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<   rh   )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                    ddl m} | j        d         }|                    |d          }|                     |d          }|t          j        u st          ||          r=|                    |dt          |          j	        rdnd          }t          |          }|j        r-||k    r%|                    ||          }|j	        r|n|dz   S |S |                    |||          S r_   )rk   ra   r   rl   r   rm   r*   rn   r   ro   r,   r!   re   rp   rq   s	            r7   ru   zceiling._eval_as_leading_term-  s    AAAAAAilxx1~~IIaOO15==Jt[99=99Qbhh.B'Kss9LLDA> 	qyywwqtw,, ,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   rb   rc   rd   r`   rw   rh   rf   )r   rl   r   rm   rn   r   ro   r,   ry   rk   ra   rz   rx   r{   re   r|   s                r7   r{   zceiling._eval_nseries=  s2   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$%FFa!Q   Aq0A0AAq5L199771419944!7<<D(311a!e3Hr<   c                 $    t          |            S r:   r+   r   s      r7   _eval_rewrite_as_floorzceiling._eval_rewrite_as_floorP  s    sd|r<   c                 (    |t          |           z   S r:   r   r   s      r7   r   zceiling._eval_rewrite_as_fracS  s    T3$ZZr<   c                 &    | j         d         j        S r>   )r   is_positiver?   s    r7   _eval_is_positivezceiling._eval_is_positiveV  r   r<   c                 &    | j         d         j        S r>   )r   is_nonpositiver?   s    r7   _eval_is_nonpositivezceiling._eval_is_nonpositiveY  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__\  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__j  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__x  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   ru   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                       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dZd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] https://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   r`   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   rm   ComplexInfinityr+   )r.   ra   r-   s    r7   _evalzfrac.eval.<locals>._eval  s    qz1#5666"{1a(((~ v} ,!%<<5LA---5Ls++3sU++++r<   )rk   ra   r   r'   r   r&   r"   r#   r$   r   r%   )	r-   r.   r   r4   realimagr5   r0   ra   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__  s^      	 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__  s^      	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__+  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 )Nrh   )r   r   r*   r   r   r   r    r   r   s      r7   r   zfrac._value_one_or_more7  sz    ! 	 "qj "z#z:: "6M E$5 v	 	
   r<   Nr   c                    ddl m} | j        d         }|                    |d          }|                     |d          }|j        rN|j        rE|                    ||          }|j        rt          j	        S ||z
  
                    |||          S |S |t          j        t          j        t          j        fv r |dd          S |
                    |||          S )Nr   r`   rf   ri   rh   )rk   ra   r   rl   r!   r   re   ro   r   Onerp   r   r   r   rq   s	            r7   ru   zfrac._eval_as_leading_term@  s    AAAAAAilxx1~~IIaOO> 		%y wwqtw,,# !5Ld
33ADt3LLLa'Q5GHHH;q!$$$""14d";;;r<   c                    ddl m} | j        d         }|                    |d          }|                     |d          }|j        r:ddlm}	 |dk    r |d|df          n |	dd           |||z  |df          z   }
|
S ||z
                      ||||          }|j        r:|	                    ||          }||j
        rt          j        nt          j        z  }n||z  }|S )Nr   rw   r`   rh   ri   rf   )rz   rx   r   rl   ry   rk   ra   r{   r   re   ro   r   r   r&   )r@   rr   r}   rj   rg   rx   r.   rs   r6   ra   r   r   rt   s                r7   r{   zfrac._eval_nseriesR  s   ,,,,,,ilxx1~~IIaOO 	EEEEEE$%FFa!Q   Aq0A0AEE!Q$QRTUPVDWDW0WAH:,,Q4,HHCy wwqtw,, 0<quuaf<qJr<   r>   r   )rH   rI   rJ   rK   rN   r8   r   r   rA   rD   r   rG   r   r   r   r   r   r   r   ru   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   f  si    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U/ U/ U/ U/ U/M U/ U/ U/p 
%% % %
U/ U/ U/ U/ U/m U/ U/ U/p 
'5J J JI I I I I8 I I IX 
$
 
 
 
 
r<   