
    sgM                     j   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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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$y)    )Tuple)Basic)Expr)AddS)get_integer_partPrecisionExhausted)Function)fuzzy_or)Integer
int_valued)GtLtGeLe
Relationalis_eq)_sympify)imre)dispatchc                   T    e Zd ZU dZee   ed<   ed        Zed        Z	d Z
d Zd Zy)	RoundFunctionz+Abstract base class for rounding functions.argsc                    | j                  |      }||S |j                  s|j                  du r|S |j                  st        j
                  |z  j                  rMt        |      }|j                  t        j
                        s | |      t        j
                  z  S  | |d      S t        j                  x}x}}d }t        j                  |      D ]_  }|j                  r* |t        |            x}||t        j
                  z  z  }9 ||      x}||z  }I|j                  r||z  }[||z  }a |s|s|S |r|rM|j                  r)|j                  s5t        j
                  |z  j                  s|j                  rd|j                  rX	 t        || j                  i d      \  }	}|t        |	      t        |      t        j
                  z  z   z  }t        j                  }||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 # t         t"        f$ r Y w xY w)NFevaluatec                 N    t        |       rt        |       S | j                  r| S d S N)r   int
is_integer)xs    V/var/www/html/venv/lib/python3.12/site-packages/sympy/functions/elementary/integers.py<lambda>z$RoundFunction.eval.<locals>.<lambda>,   s&    JqM#a& A #'     T)return_ints)_eval_numberr!   	is_finiteis_imaginaryr   ImaginaryUnitis_realr   hasZeror   	make_args	is_numberr   _dirr   r	   NotImplementedError
isinstancefloorceiling)
clsargviipartnpartspartintoftrs
             r#   evalzRoundFunction.eval   s3   S!=H>>S]]e3J 3<<3A55)1vaoo--sU++ !"&&)s# 	A~~be#41"A1??**Qx-!,


	 L MMu11aooe6K5T5T""u}}'388RT;1gaj&@@@ 	LAOOE$9#B#B3r%y59!//IIIw/05= 3uu555 '(;< s   AI& &I87I8c                     t               r   )r1   r5   r6   s     r#   r'   zRoundFunction._eval_numberR   s    !##r%   c                 4    | j                   d   j                  S Nr   )r   r(   selfs    r#   _eval_is_finitezRoundFunction._eval_is_finiteV   s    yy|%%%r%   c                 4    | j                   d   j                  S rC   r   r+   rD   s    r#   _eval_is_realzRoundFunction._eval_is_realY       yy|###r%   c                 4    | j                   d   j                  S rC   rH   rD   s    r#   _eval_is_integerzRoundFunction._eval_is_integer\   rJ   r%   N)__name__
__module____qualname____doc__tTupler   __annotations__classmethodr?   r'   rF   rI   rL    r%   r#   r   r      sE    5
,56 56n $ $&$$r%   r   c                   d    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y)r3   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|j                         S t        d || fD              r|S |j                  r|j	                  t
              d   S y )Nc              3   V   K   | ]!  }t         t        fD ]  }t        ||        # y wr   r3   r4   r2   .0r8   js      r#   	<genexpr>z%floor._eval_number.<locals>.<genexpr>   :      @ug.>@)* Aq! @! @   ')r   )	is_Numberr3   anyis_NumberSymbolapproximation_intervalr   rA   s     r#   r'   zfloor._eval_number   s\    ==99; @t@ @J--g6q99 r%   Nc                    ddl m} | j                  d   }|j                  |d      }| j                  |d      }|t        j
                  u st        ||      r6|j                  |dt        |      j                  rdnd      }t        |      }|j                  rN||k(  rG|j                  ||dk7  r|nd      }|j                  r|dz
  S |j                  r|S t        d|z        |S |j                  |||	      S 
Nr   AccumBounds-+dir   cdirNot sure of sign of %slogxrn   )!sympy.calculus.accumulationboundsrg   r   subsr   NaNr2   limitr   is_negativer3   r(   rk   is_positiver1   as_leading_term	rE   r"   rq   rn   rg   r6   arg0r>   ndirs	            r#   _eval_as_leading_termzfloor._eval_as_leading_term   s    Aiilxx1~IIaO155=Jt[999Qbh.B.Bs9LDdA>>qywwqtqytaw@##q5L%%H-.F.MNN""14d";;r%   c                 (   | j                   d   }|j                  |d      }| j                  |d      }|t        j                  u r6|j	                  |dt        |      j                  rdnd      }t        |      }|j                  r>ddl	m
} ddlm}	 |j                  ||||      }
|dk  r |	d|df      n |dd      }|
|z   S ||k(  rG|j                  ||dk7  r|nd	      }|j                  r|dz
  S |j                  r|S t!        d
|z        |S )Nr   rh   ri   rj   rf   Orderrl   rV   rm   ro   )r   rs   r   rt   ru   r   rv   r3   is_infiniterr   rg   sympy.series.orderr   _eval_nseriesrk   rw   r1   rE   r"   nrq   rn   r6   rz   r>   rg   r   sor{   s                r#   r   zfloor._eval_nseries   s   iilxx1~IIaO155=99Qbh.B.Bs9LDdAE0!!!Qd3A$%Fa!Q B0BAq5L197714194!7<D1u!!)*BT*IJJHr%   c                 4    | j                   d   j                  S rC   )r   rv   rD   s    r#   _eval_is_negativezfloor._eval_is_negative       yy|'''r%   c                 4    | j                   d   j                  S rC   )r   is_nonnegativerD   s    r#   _eval_is_nonnegativezfloor._eval_is_nonnegative       yy|***r%   c                     t        |        S r   r4   rE   r6   kwargss      r#   _eval_rewrite_as_ceilingzfloor._eval_rewrite_as_ceiling   s    ~r%   c                     |t        |      z
  S r   fracr   s      r#   _eval_rewrite_as_fraczfloor._eval_rewrite_as_frac   s    T#Yr%   c                    t        |      }| j                  d   j                  rT|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   rl   Fr   )
r   r   r+   r!   r/   r4   trueInfinityr(   r   rE   others     r#   __le__zfloor.__le__   s    %99Q<yy|eai//5==yy|gen4499Q<5 U]]66MAJJ4>>66M$..r%   c                    t        |      }| j                  d   j                  rQ|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/   r4   falseNegativeInfinityr(   r   r   r   s     r#   __ge__zfloor.__ge__   s    %99Q<yy|u,,5==yy|wu~5599Q<5 U]]77NA&&&4>>66M$..r%   c                    t        |      }| j                  d   j                  rT|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/   r4   r   r   r(   r   r   r   s     r#   __gt__zfloor.__gt__   s    %99Q<yy|uqy005==yy|wu~5599Q<5 U]]77NA&&&4>>66M$..r%   c                    t        |      }| j                  d   j                  rQ|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/   r4   r   r   r(   r   r   r   s     r#   __lt__zfloor.__lt__   s    %99Q<yy|e++5==yy|gen4499Q<5 U]]77NAJJ4>>66M$..r%   rC   r   )rM   rN   rO   rP   r0   rS   r'   r|   r   r   r   r   r   r   r   r   r   rT   r%   r#   r3   r3   `   sS    "F D: :<*0(+////r%   r3   c                     t        | j                  t              |      xs t        | j                  t              |      S r   )r   rewriter4   r   lhsrhss     r#   _eval_is_eqr     s2    
G$c
* %ckk$$%r%   c                   d    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y)r4   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

    rl   c                     |j                   r|j                         S t        d || fD              r|S |j                  r|j	                  t
              d   S y )Nc              3   V   K   | ]!  }t         t        fD ]  }t        ||        # y wr   rY   rZ   s      r#   r]   z'ceiling._eval_number.<locals>.<genexpr>2  r^   r_   rl   )r`   r4   ra   rb   rc   r   rA   s     r#   r'   zceiling._eval_number.  s\    ==;;=  @t@ @J--g6q99 r%   Nc                    ddl m} | j                  d   }|j                  |d      }| j                  |d      }|t        j
                  u st        ||      r6|j                  |dt        |      j                  rdnd      }t        |      }|j                  rN||k(  rG|j                  ||dk7  r|nd      }|j                  r|S |j                  r|dz   S t        d|z        |S |j                  |||	      S re   )rr   rg   r   rs   r   rt   r2   ru   r   rv   r4   r(   rk   rw   r1   rx   ry   s	            r#   r|   zceiling._eval_as_leading_term8  s    Aiilxx1~IIaO155=Jt[999Qbh.B.Bs9LDA>>qywwqtqytaw@##H%%q5L-.F.MNN""14d";;r%   c                 (   | j                   d   }|j                  |d      }| j                  |d      }|t        j                  u r6|j	                  |dt        |      j                  rdnd      }t        |      }|j                  r>ddl	m
} ddlm}	 |j                  ||||      }
|dk  r |	d|df      n |dd      }|
|z   S ||k(  rG|j                  ||dk7  r|nd      }|j                  r|S |j                  r|dz   S t!        d	|z        |S )
Nr   rh   ri   rj   rf   r~   rl   rm   ro   )r   rs   r   rt   ru   r   rv   r4   r   rr   rg   r   r   r   rk   rw   r1   r   s                r#   r   zceiling._eval_nseriesM  s   iilxx1~IIaO155=99Qbh.B.Bs9LDAE0!!!Qd3A$%Fa!Q Aq0AAq5L197714194!7<D!!1u)*BT*IJJHr%   c                     t        |        S r   r3   r   s      r#   _eval_rewrite_as_floorzceiling._eval_rewrite_as_floore  s    sd|r%   c                      |t        |       z   S r   r   r   s      r#   r   zceiling._eval_rewrite_as_frach  s    T3$Zr%   c                 4    | j                   d   j                  S rC   )r   rw   rD   s    r#   _eval_is_positivezceiling._eval_is_positivek  r   r%   c                 4    | j                   d   j                  S rC   )r   is_nonpositiverD   s    r#   _eval_is_nonpositivezceiling._eval_is_nonpositiven  r   r%   c                    t        |      }| j                  d   j                  rT|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/   r3   r   r   r(   r   r   r   s     r#   r   zceiling.__lt__q  s    %99Q<yy|uqy005==yy|uU|3399Q<5 U]]77NAJJ4>>66M$..r%   c                    t        |      }| j                  d   j                  rQ|j                  r| j                  d   |kD  S |j                  r'|j                  r| j                  d   t        |      kD  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/   r3   r   r   r(   r   r   r   s     r#   r   zceiling.__gt__  s    %99Q<yy|e++5==yy|eEl2299Q<5 U]]77NA&&&4>>66M$..r%   c                    t        |      }| j                  d   j                  rT|j                  r| j                  d   |dz
  kD  S |j                  r'|j                  r| j                  d   t        |      kD  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/   r3   r   r   r(   r   r   s     r#   r   zceiling.__ge__  s    %99Q<yy|eai//5==yy|eEl2299Q<5 U]]66MA&&&4>>66M$..r%   c                    t        |      }| j                  d   j                  rQ|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/   r3   r   r   r(   r   r   r   s     r#   r   zceiling.__le__  s    %99Q<yy|u,,5==yy|uU|3399Q<5 U]]77NAJJ4>>66M$..r%   rC   r   )rM   rN   rO   rP   r0   rS   r'   r|   r   r   r   r   r   r   r   r   r   rT   r%   r#   r4   r4     sS    "F D: :<*0 (+////r%   r4   c                     t        | j                  t              |      xs t        | j                  t              |      S r   )r   r   r3   r   r   s     r#   r   r     s-    U#S)IU3;;t3DS-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y)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 ]f  }|j                  st        j                  |z  j                  r6t        |      }|j                  t        j                        s||z  }\||z  }b||z  }h  ||      } ||      }|t        j                  |z  z   S )Nr   rf   c                 b   | t         j                  t         j                  fv r	 dd      S | j                  rt         j                  S | j
                  rR| 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/   rt   ComplexInfinityr3   )r6   rg   r5   s    r#   _evalzfrac.eval.<locals>._eval  s    qzz1#5#566"1a((~~vv}}!%%<55LA---55Ls++sU++r%   )rr   rg   r   r-   r   r.   r)   r*   r+   r   r,   )r5   r6   r   realimagr=   r8   rg   s   `      @r#   r?   z	frac.eval  s    A	, VVQVVds# 
	A ~~!//!"3!<!<qEuuQ__-AIDAID	
	 T{T{aood***r%   c                     |t        |      z
  S r   r   r   s      r#   r   zfrac._eval_rewrite_as_floor  s    U3Zr%   c                      |t        |       z   S r   r   r   s      r#   r   zfrac._eval_rewrite_as_ceiling  s    WcT]""r%   c                      y)NTrT   rD   s    r#   rF   zfrac._eval_is_finite	  s    r%   c                 4    | j                   d   j                  S rC   )r   is_extended_realrD   s    r#   rI   zfrac._eval_is_real  s    yy|,,,r%   c                 4    | j                   d   j                  S rC   )r   r)   rD   s    r#   _eval_is_imaginaryzfrac._eval_is_imaginary  s    yy|(((r%   c                 4    | j                   d   j                  S rC   )r   r!   rD   s    r#   rL   zfrac._eval_is_integer  s    yy|&&&r%   c                 x    t        | j                  d   j                  | j                  d   j                  g      S rC   )r   r   is_zeror!   rD   s    r#   _eval_is_zerozfrac._eval_is_zero  s.    1--tyy|/F/FGHHr%   c                      y)NFrT   rD   s    r#   r   zfrac._eval_is_negative  s    r%   c                     | j                   r=t        |      }|j                  rt        j                  S | j                  |      }|| S t        | |d      S NFr   )r   r   is_extended_nonpositiver   r   _value_one_or_morer   rE   r   ress      r#   r   zfrac.__ge__  sQ      UOE,,vv))%0Cx$..r%   c                     | j                   r=t        |      }| j                  |      }|| S |j                  rt        j
                  S t        | |d      S r   )r   r   r   is_extended_negativer   r   r   r   s      r#   r   zfrac.__gt__'  sQ      UOE))%0Cx))vv$..r%   c                     | j                   r<t        |      }|j                  rt        j                  S | j                  |      }||S t        | |d      S r   )r   r   r   r   r   r   r   r   s      r#   r   zfrac.__le__3  sO      UOE))ww))%0C
$..r%   c                     | j                   r<t        |      }|j                  rt        j                  S | j                  |      }||S t        | |d      S r   )r   r   r   r   r   r   r   r   s      r#   r   zfrac.__lt__?  sO      UOE,,ww))%0C
$..r%   c                     |j                   r]|j                  r'|dk\  }|r t        |t              st        j
                  S |j                  r|j                  rt        j
                  S y y y )Nrl   )r   r/   r2   r   r   r   r!   rw   r   s      r#   r   zfrac._value_one_or_moreK  sW    !!qjz#z:66ME$5$5vv %6 "r%   Nc                    ddl m} | j                  d   }|j                  |d      }| j                  |d      }|j                  rT|j
                  rF|j                  ||      }|j                  rt        j                  S ||z
  j                  |||      S |S |t        j                  t        j                  t        j                  fv r	 |dd      S |j                  |||      S )Nr   rf   rm   rp   rl   )rr   rg   r   rs   r(   r   rk   rv   r   Onerx   r   r   r   ry   s	            r#   r|   zfrac._eval_as_leading_termT  s    Aiilxx1~IIaO>>yywwqtw,##55Ld
33ADt3LLa''Q5G5GHHq!$$""14d";;r%   c                    ddl m} | j                  d   }|j                  |d      }| j                  |d      }|j                  r2ddlm}	 |dk  r |d|df      }
|
S  |	dd       |||z  |df      z   }
|
S ||z
  j                  ||||      }|j                  rH|j                  ||      }||j                  rt        j                  z  }|S t        j                  z  }|S ||z  }|S )Nr   r~   rf   rl   rp   rm   )r   r   r   rs   r   rr   rg   r   r   rk   rv   r   r   r-   )rE   r"   r   rq   rn   r   r6   rz   r>   rg   r   r   r{   s                r#   r   zfrac._eval_nseriesf  s    ,iilxx1~IIaOE$%Fa!Q AH 1<Aq0AE!Q$QRTUPVDW0WAH:,,Q4,HCyywwqtw, 0 0quu< J 78ff< J qJr%   rC   r   )rM   rN   rO   rP   rS   r?   r   r   rF   rI   r   rL   r   r   r   r   r   r   r   r|   r   rT   r%   r#   r   r     si    /`  +  +D #-)'I
/
/
/
/<$r%   r   c                     | j                  t              |k(  s| j                  t              |k(  ry|j                  ry| j	                  |      }|yy )NTF)r   r3   r4   r   r   )r   r   r   s      r#   r   r   z  sP    Ec!	W		$


 
 
%C
 r%   N)'typingr   rQ   sympy.core.basicr   sympy.core.exprr   
sympy.corer   r   sympy.core.evalfr   r	   sympy.core.functionr
   sympy.core.logicr   sympy.core.numbersr   r   sympy.core.relationalr   r   r   r   r   r   sympy.core.sympifyr   $sympy.functions.elementary.complexesr   r   sympy.multipledispatchr   r   r3   r   r4   r   rT   r%   r#   <module>r      s    " "    A ( % 2 C C ' 7 +H$H H$V_/M _/D 
%% %
_/m _/D 
'5J JH8 HV 
$
 
r%   