
    ЦiM                     j   S SK Jr  S SKJr  S SKJr  S SKJrJ	r	  S SK
JrJr  S SKJr  S SKJr  S SKJrJr  S S	KJrJrJrJrJrJr  S S
KJr  S SKJrJr  S SK J!r!   " S S\5      r" " S S\"5      r#\!" \#\5      S 5       r$ " S S\"5      r%\!" \%\5      S 5       r$ " S S\5      r&\!" \&\5      S 5       r$g)    )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                   \    \ rS rSr% Sr\\   \S'   \S 5       r	\S 5       r
S rS rS rS	rg
)RoundFunction   z+Abstract base class for rounding functions.argsc                    U R                  U5      nUb  U$ UR                  (       d  UR                  SL a  U$ UR                  (       d"  [        R
                  U-  R                  (       aO  [        U5      nUR                  [        R
                  5      (       d  U " U5      [        R
                  -  $ U " USS9$ [        R                  =n=pVS n[        R                  " U5       Hk  nUR                  (       a+  U" [        U5      5      =nb  XC[        R
                  -  -  nM?  U" U5      =nb  XC-  nMP  UR                  (       a  XX-  nMg  Xh-  nMm     U(       d	  U(       d  U$ U(       a  U(       af  UR                  (       a3  UR                  (       dD  [        R
                  U-  R                  (       d"  UR                  (       ad  UR                  (       aS   [        XPR                  0 SS9u  pU[        U	5      [        U5      [        R
                  -  -   -  n[        R                  nXe-  nU(       d  U$ UR                  (       d"  [        R
                  U-  R                  (       a#  X@" [        U5      SS9[        R
                  -  -   $ [%        U[&        [(        45      (       a  XF-   $ X@" USS9-   $ ! [         ["        4 a     Nf = f)NFevaluatec                 b    [        U 5      (       a  [        U 5      $ U R                  (       a  U $ S $ N)r   int
is_integer)xs    b/var/www/html/ai-image-ml/venv/lib/python3.13/site-packages/sympy/functions/elementary/integers.py<lambda>$RoundFunction.eval.<locals>.<lambda>,   s+    JqMM#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$   evalRoundFunction.eval   s"   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}}'88RT;gaj&@@@ 	LAOOE$9#B#B3r%y59!//IIIw/00= 3uu555 '(;< s   AJ8 8K
Kc                     [        5       er    )r3   r7   r8   s     r$   r)   RoundFunction._eval_numberR   s    !##r'   c                 4    U R                   S   R                  $ Nr   )r   r*   selfs    r$   _eval_is_finiteRoundFunction._eval_is_finiteV   s    yy|%%%r'   c                 4    U R                   S   R                  $ rG   r   r-   rH   s    r$   _eval_is_realRoundFunction._eval_is_realY       yy|###r'   c                 4    U R                   S   R                  $ rG   rM   rH   s    r$   _eval_is_integerRoundFunction._eval_is_integer\   rP   r'    N)__name__
__module____qualname____firstlineno____doc__tTupler   __annotations__classmethodrA   r)   rJ   rN   rR   __static_attributes__rT   r'   r$   r   r      sE    5
,56 56n $ $&$$r'   r   c                   p    \ rS rSrSrSr\S 5       rSS jrSS jr	S r
S	 rS
 rS rS rS rS rS rSrg)r5   `   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                     UR                   (       a  UR                  5       $ [        S X* 4 5       5      (       a  U$ UR                  (       a  UR	                  [
        5      S   $ g )Nc              3   `   #    U  H$  n[         [        4  H  n[        X5      v   M     M&     g 7fr    r5   r6   r4   .0r:   js      r$   	<genexpr>%floor._eval_number.<locals>.<genexpr>   1      @$Aug.> A!!.> "$   ,.r   )	is_Numberr5   anyis_NumberSymbolapproximation_intervalr   rD   s     r$   r)   floor._eval_number   s`    ==99; @t@ @ @J--g6q99 r'   Nc                    SSK Jn  U R                  S   nUR                  US5      nU R                  US5      nU[        R
                  L d  [        Xd5      (       a8  UR                  US[        U5      R                  (       a  SOSS9n[        U5      nUR                  (       aU  Xg:X  aN  UR                  XS:w  a  UOSS9nUR                  (       a  US-
  $ UR                  (       a  U$ [        SU-  5      eU$ UR                  XUS	9$ 
Nr   AccumBounds-+dir   cdirNot sure of sign of %slogxrz   )!sympy.calculus.accumulationboundsrs   r   subsr   NaNr4   limitr   is_negativer5   r*   rw   is_positiver3   as_leading_term	rI   r#   r}   rz   rs   r8   arg0r@   ndirs	            r$   _eval_as_leading_termfloor._eval_as_leading_term   s    Aiilxx1~IIaO155=Jt9999Qbh.B.Bs9LDdA>>ywwqqytaw@##q5L%%H-.F.MNN""1d";;r'   c                 B   U R                   S   nUR                  US5      nU R                  US5      nU[        R                  L a8  UR	                  US[        U5      R                  (       a  SOSS9n[        U5      nUR                  (       a<  SSK	J
n  SSKJn	  UR                  XX45      n
US::  a  U	" SUS45      OU" SS5      nX-   $ Xg:X  aN  UR                  XS:w  a  UOSS	9nUR                  (       a  US-
  $ UR                  (       a  U$ [!        S
U-  5      eU$ )Nr   rt   ru   rv   rr   Orderrx   r`   ry   r{   )r   r   r   r   r   r   r   r5   is_infiniter~   rs   sympy.series.orderr   _eval_nseriesrw   r   r3   rI   r#   nr}   rz   r8   r   r@   rs   r   sor   s                r$   r   floor._eval_nseries   s    iilxx1~IIaO155=99Qbh.B.Bs9LDdAE0!!!3A$%Fa!Q B0BA5L9771194!7<D1u!!)*BT*IJJHr'   c                 4    U R                   S   R                  $ rG   )r   r   rH   s    r$   _eval_is_negativefloor._eval_is_negative       yy|'''r'   c                 4    U R                   S   R                  $ rG   )r   is_nonnegativerH   s    r$   _eval_is_nonnegativefloor._eval_is_nonnegative       yy|***r'   c                     [        U* 5      * $ r    r6   rI   r8   kwargss      r$   _eval_rewrite_as_ceilingfloor._eval_rewrite_as_ceiling   s    ~r'   c                     U[        U5      -
  $ r    fracr   s      r$   _eval_rewrite_as_fracfloor._eval_rewrite_as_frac   s    T#Yr'   c                    [        U5      nU R                  S   R                  (       ac  UR                  (       a  U R                  S   US-   :  $ UR                  (       a,  UR                  (       a  U R                  S   [        U5      :  $ U R                  S   U:X  a!  UR                  (       a  [         R                  $ U[         R                  L a!  U R                  (       a  [         R                  $ [        XSS9$ Nr   rx   Fr   )
r   r   r-   r"   r1   r6   trueInfinityr*   r   rI   others     r$   __le__floor.__le__   s    %99Q<yy|eai//5==yy|gen4499Q<5 U]]66MAJJ4>>66M$..r'   c                    [        U5      nU R                  S   R                  (       a`  UR                  (       a  U R                  S   U:  $ UR                  (       a,  UR                  (       a  U R                  S   [        U5      :  $ U R                  S   U:X  a!  UR                  (       a  [         R                  $ U[         R                  L a!  U R                  (       a  [         R                  $ [        XSS9$ Nr   Fr   )r   r   r-   r"   r1   r6   falseNegativeInfinityr*   r   r   r   s     r$   __ge__floor.__ge__   s    %99Q<yy|u,,5==yy|wu~5599Q<5 U]]77NA&&&4>>66M$..r'   c                    [        U5      nU R                  S   R                  (       ac  UR                  (       a  U R                  S   US-   :  $ UR                  (       a,  UR                  (       a  U R                  S   [        U5      :  $ U R                  S   U:X  a!  UR                  (       a  [         R                  $ U[         R                  L a!  U R                  (       a  [         R                  $ [        XSS9$ r   )r   r   r-   r"   r1   r6   r   r   r*   r   r   r   s     r$   __gt__floor.__gt__   s    %99Q<yy|uqy005==yy|wu~5599Q<5 U]]77NA&&&4>>66M$..r'   c                    [        U5      nU R                  S   R                  (       a`  UR                  (       a  U R                  S   U:  $ UR                  (       a,  UR                  (       a  U R                  S   [        U5      :  $ U R                  S   U:X  a!  UR                  (       a  [         R                  $ U[         R                  L a!  U R                  (       a  [         R                  $ [        XSS9$ r   )r   r   r-   r"   r1   r6   r   r   r*   r   r   r   s     r$   __lt__floor.__lt__   s    %99Q<yy|e++5==yy|gen4499Q<5 U]]77NAJJ4>>66M$..r'   rT   rG   r   )rU   rV   rW   rX   rY   r2   r\   r)   r   r   r   r   r   r   r   r   r   r   r]   rT   r'   r$   r5   r5   `   sS    "F D: :<*0(+////r'   r5   c                     [        U R                  [        5      U5      =(       d    [        U R                  [        5      U5      $ r    )r   rewriter6   r   lhsrhss     r$   _eval_is_eqr     s2    
G$c
* %ckk$$%r'   c                   p    \ rS rSrSrSr\S 5       rSS jrSS jr	S r
S	 rS
 rS rS rS rS rS rSrg)r6   i  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

rx   c                     UR                   (       a  UR                  5       $ [        S X* 4 5       5      (       a  U$ UR                  (       a  UR	                  [
        5      S   $ g )Nc              3   `   #    U  H$  n[         [        4  H  n[        X5      v   M     M&     g 7fr    rc   rd   s      r$   rg   'ceiling._eval_number.<locals>.<genexpr>2  ri   rj   rx   )rk   r6   rl   rm   rn   r   rD   s     r$   r)   ceiling._eval_number.  s`    ==;;=  @t@ @ @J--g6q99 r'   Nc                    SSK Jn  U R                  S   nUR                  US5      nU R                  US5      nU[        R
                  L d  [        Xd5      (       a8  UR                  US[        U5      R                  (       a  SOSS9n[        U5      nUR                  (       aU  Xg:X  aN  UR                  XS:w  a  UOSS9nUR                  (       a  U$ UR                  (       a  US-   $ [        SU-  5      eU$ UR                  XUS	9$ rq   )r~   rs   r   r   r   r   r4   r   r   r   r6   r*   rw   r   r3   r   r   s	            r$   r   ceiling._eval_as_leading_term8  s    Aiilxx1~IIaO155=Jt9999Qbh.B.Bs9LDA>>ywwqqytaw@##H%%q5L-.F.MNN""1d";;r'   c                 B   U R                   S   nUR                  US5      nU R                  US5      nU[        R                  L a8  UR	                  US[        U5      R                  (       a  SOSS9n[        U5      nUR                  (       a<  SSK	J
n  SSKJn	  UR                  XX45      n
US::  a  U	" SUS45      OU" SS5      nX-   $ Xg:X  aN  UR                  XS:w  a  UOSS9nUR                  (       a  U$ UR                  (       a  US-   $ [!        S	U-  5      eU$ )
Nr   rt   ru   rv   rr   r   rx   ry   r{   )r   r   r   r   r   r   r   r6   r   r~   rs   r   r   r   rw   r   r3   r   s                r$   r   ceiling._eval_nseriesM  s    iilxx1~IIaO155=99Qbh.B.Bs9LDAE0!!!3A$%Fa!Q Aq0AA5L9771194!7<D!!1u)*BT*IJJHr'   c                     [        U* 5      * $ r    r5   r   s      r$   _eval_rewrite_as_floorceiling._eval_rewrite_as_floore  s    sd|r'   c                      U[        U* 5      -   $ r    r   r   s      r$   r   ceiling._eval_rewrite_as_frach  s    T3$Zr'   c                 4    U R                   S   R                  $ rG   )r   r   rH   s    r$   _eval_is_positiveceiling._eval_is_positivek  r   r'   c                 4    U R                   S   R                  $ rG   )r   is_nonpositiverH   s    r$   _eval_is_nonpositiveceiling._eval_is_nonpositiven  r   r'   c                    [        U5      nU R                  S   R                  (       ac  UR                  (       a  U R                  S   US-
  :*  $ UR                  (       a,  UR                  (       a  U R                  S   [        U5      :*  $ U R                  S   U:X  a!  UR                  (       a  [         R                  $ U[         R                  L a!  U R                  (       a  [         R                  $ [        XSS9$ r   )r   r   r-   r"   r1   r5   r   r   r*   r   r   r   s     r$   r   ceiling.__lt__q  s    %99Q<yy|uqy005==yy|uU|3399Q<5 U]]77NAJJ4>>66M$..r'   c                    [        U5      nU R                  S   R                  (       a`  UR                  (       a  U R                  S   U:  $ UR                  (       a,  UR                  (       a  U R                  S   [        U5      :  $ U R                  S   U:X  a!  UR                  (       a  [         R                  $ U[         R                  L a!  U R                  (       a  [         R                  $ [        XSS9$ r   )r   r   r-   r"   r1   r5   r   r   r*   r   r   r   s     r$   r   ceiling.__gt__  s    %99Q<yy|e++5==yy|eEl2299Q<5 U]]77NA&&&4>>66M$..r'   c                    [        U5      nU R                  S   R                  (       ac  UR                  (       a  U R                  S   US-
  :  $ UR                  (       a,  UR                  (       a  U R                  S   [        U5      :  $ U R                  S   U:X  a!  UR                  (       a  [         R                  $ U[         R                  L a!  U R                  (       a  [         R                  $ [        XSS9$ r   )
r   r   r-   r"   r1   r5   r   r   r*   r   r   s     r$   r   ceiling.__ge__  s    %99Q<yy|eai//5==yy|eEl2299Q<5 U]]66MA&&&4>>66M$..r'   c                    [        U5      nU R                  S   R                  (       a`  UR                  (       a  U R                  S   U:*  $ UR                  (       a,  UR                  (       a  U R                  S   [        U5      :*  $ U R                  S   U:X  a!  UR                  (       a  [         R                  $ U[         R                  L a!  U R                  (       a  [         R                  $ [        XSS9$ r   )r   r   r-   r"   r1   r5   r   r   r*   r   r   r   s     r$   r   ceiling.__le__  s    %99Q<yy|u,,5==yy|uU|3399Q<5 U]]77NAJJ4>>66M$..r'   rT   rG   r   )rU   rV   rW   rX   rY   r2   r\   r)   r   r   r   r   r   r   r   r   r   r   r]   rT   r'   r$   r6   r6     sS    "F D: :<*0 (+////r'   r6   c                     [        U R                  [        5      U5      =(       d    [        U R                  [        5      U5      $ r    )r   r   r5   r   r   s     r$   r   r     s-    U#S)IU3;;t3DS-IIr'   c                       \ rS rSrSr\S 5       rS rS rS r	S r
S rS	 rS
 rS rS rS rS rS rS rSS jrSS jrSrg)r   i  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SK Jm  UU 4S jn[        R                  [        R                  pC[        R
                  " U5       Hu  nUR                  (       d"  [        R                  U-  R                  (       a;  [        U5      nUR                  [        R                  5      (       d  XF-  nMk  X5-  nMq  X5-  nMw     U" U5      nU" U5      nU[        R                  U-  -   $ )Nr   rr   c                 x  > U [         R                  [         R                  4;   a	  T" SS5      $ U R                  (       a  [         R                  $ U R
                  (       aT  U [         R                  L a  [         R                  $ U [         R                  L a  [         R                  $ U [        U 5      -
  $ T" U SS9$ r   )	r   r   r   r"   r/   r1   r   ComplexInfinityr5   )r8   rs   r7   s    r$   _evalfrac.eval.<locals>._eval  s    qzz1#5#566"1a((~~vv}}!%%<55LA---55Ls++sU++r'   )r~   rs   r   r/   r   r0   r+   r,   r-   r   r.   )r7   r8   r   realimagr?   r:   rs   s   `      @r$   rA   	frac.eval  s    A	, VVQVVds#A ~~!//!"3!<!<qEuuQ__--IDID	 $ T{T{aood***r'   c                     U[        U5      -
  $ r    r   r   s      r$   r   frac._eval_rewrite_as_floor  s    U3Zr'   c                      U[        U* 5      -   $ r    r   r   s      r$   r   frac._eval_rewrite_as_ceiling  s    WcT]""r'   c                     g)NTrT   rH   s    r$   rJ   frac._eval_is_finite	  s    r'   c                 4    U R                   S   R                  $ rG   )r   is_extended_realrH   s    r$   rN   frac._eval_is_real  s    yy|,,,r'   c                 4    U R                   S   R                  $ rG   )r   r+   rH   s    r$   _eval_is_imaginaryfrac._eval_is_imaginary  s    yy|(((r'   c                 4    U R                   S   R                  $ rG   )r   r"   rH   s    r$   rR   frac._eval_is_integer  s    yy|&&&r'   c                 x    [        U R                  S   R                  U R                  S   R                  /5      $ rG   )r   r   is_zeror"   rH   s    r$   _eval_is_zerofrac._eval_is_zero  s.    1--tyy|/F/FGHHr'   c                     g)NFrT   rH   s    r$   r   frac._eval_is_negative  s    r'   c                     U R                   (       aG  [        U5      nUR                  (       a  [        R                  $ U R                  U5      nUb  U(       + $ [        XSS9$ NFr   )r   r   is_extended_nonpositiver   r   _value_one_or_morer   rI   r   ress      r$   r   frac.__ge__  sO      UOE,,vv))%0Cx$..r'   c                     U R                   (       aG  [        U5      nU R                  U5      nUb  U(       + $ UR                  (       a  [        R
                  $ [        XSS9$ r  )r   r   r  is_extended_negativer   r   r   r  s      r$   r   frac.__gt__'  sO      UOE))%0Cx))vv$..r'   c                     U R                   (       aB  [        U5      nUR                  (       a  [        R                  $ U R                  U5      nUb  U$ [        XSS9$ r  )r   r   r  r   r   r  r   r  s      r$   r   frac.__le__3  sM      UOE))ww))%0C
$..r'   c                     U R                   (       aB  [        U5      nUR                  (       a  [        R                  $ U R                  U5      nUb  U$ [        XSS9$ r  )r   r   r  r   r   r  r   r  s      r$   r   frac.__lt__?  sM      UOE,,ww))%0C
$..r'   c                    UR                   (       av  UR                  (       a1  US:  nU(       a%  [        U[        5      (       d  [        R
                  $ UR                  (       a"  UR                  (       a  [        R
                  $ g g g )Nrx   )r   r1   r4   r   r   r   r"   r   r  s      r$   r  frac._value_one_or_moreK  sZ    !!qjz#z::66ME$5$5vv %6 "r'   Nc                    SSK Jn  U R                  S   nUR                  US5      nU R                  US5      nUR                  (       aU  UR
                  (       aB  UR                  XS9nUR                  (       a  [        R                  $ XV-
  R                  XUS9$ U$ U[        R                  [        R                  [        R                  4;   a	  U" SS5      $ UR                  XUS9$ )Nr   rr   ry   r|   rx   )r~   rs   r   r   r*   r   rw   r   r   Oner   r   r   r   r   s	            r$   r   frac._eval_as_leading_termT  s    Aiilxx1~IIaO>>yywwqw,##55L
33At3LLa''Q5G5GHHq!$$""1d";;r'   c                    SSK Jn  U R                  S   nUR                  US5      nU R                  US5      nUR                  (       a2  SSKJn	  US::  a  U" SUS45      n
U
$ U	" SS5      U" X-  US45      -   n
U
$ Xg-
  R                  XX4S9nUR                  (       aD  UR                  XS9nXR                  (       a  [        R                  O[        R                  -  nU$ X-  nU$ )Nr   r   rr   rx   r|   ry   )r   r   r   r   r   r~   rs   r   r   rw   r   r   r  r/   )rI   r#   r   r}   rz   r   r8   r   r@   rs   r   r  r   s                r$   r   frac._eval_nseriesf  s    ,iilxx1~IIaOE$%Fa!Q AH 1<Aq0AE!$QRTUPVDW0WAH:,,Q,HCyywwqw, 0 0quuaff< J Jr'   rT   rG   r   )rU   rV   rW   rX   rY   r\   rA   r   r   rJ   rN   r   rR   r   r   r   r   r   r   r  r   r   r]   rT   r'   r$   r   r     si    /`  +  +D #-)'I
/
/
/
/<$r'   r   c                     U R                  [        5      U:X  d  U R                  [        5      U:X  a  gUR                  (       a  gU R	                  U5      nUb  gg )NTF)r   r5   r6   r  r  )r   r   r  s      r$   r   r   z  sP    Ec!	W		$


 
 
%C
 r'   N)'typingr   rZ   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   r5   r   r6   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'   