K izWvddlmZddlmZddlmZddlmZmZddl m Z m Z ddl m Z ddlmZmZddlmZmZdd lmZmZmZmZmZmZmZmZdd lmZdd lm Z m!Z!dd l"m#Z#Gd de Z$Gdde$Z%e#e%edZ&Gdde$Z'e#e'edZ&Gdde Z(e#e(edZ&y)) annotations)Basic)Expr)AddS)get_integer_partPrecisionExhausted)DefinedFunction)fuzzy_or fuzzy_and)Integer int_valued)GtLtGeLe Relationalis_eqis_leis_lt)_sympify)imre)dispatchcNeZdZUdZded<edZedZdZdZ dZ y ) RoundFunctionz+Abstract base class for rounding functions.z tuple[Expr]argsc |j|x}|S|j|x}|S|js|jdur|S|jst j |zjrMt|}|jt j s||t j zS||dSt jx}x}}d}tj|D]_}|jr*|t|x}||t j zz }9||x}||z }I|jr||z }[||z }a|s|s|S|r|rM|jr)|js5t j |zjs|jrd|jrX t||jid\} }|t!| t!|t j zzz }t j}||z }|s|S|jst j |zjr'||t|dt j zzSt'|t(t*fr||zS|||dzS#t"t$f$rYwxYw)NFevaluatecNt|r t|S|jr|SdSN)rint is_integer)xs i/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/sympy/functions/elementary/integers.pyz$RoundFunction.eval..-s&JqM#a&A#'T) return_ints) _eval_number_eval_const_numberr$ is_finite is_imaginaryr ImaginaryUnitis_realrhasZeror make_args is_numberr_dirr r NotImplementedError isinstancefloorceiling) clsargviipartnpartspartintoftrs r&evalzRoundFunction.evalsO!!#& &A 3H'', ,A 9H >>S]]e3J    3<<3A55)1vaoo--sU+ +!"&&)s# A~~be #41"A1??**Qx-!,    L  MMu11aooe6K5T5T""u}} '388RT;1gaj&@@@ L   AOOE$9#B#B3r%y59!//II I w/ 05= 3uu55 5'(;<  s#AI;;J  J ctr")r5r9r:s r&r*zRoundFunction._eval_numberSs !##r(c4|jdjSNr)rr,selfs r&_eval_is_finitezRoundFunction._eval_is_finiteWsyy|%%%r(c4|jdjSrGrr/rHs r& _eval_is_realzRoundFunction._eval_is_realZyy|###r(c4|jdjSrGrLrHs r&_eval_is_integerzRoundFunction._eval_is_integer]rNr(N) __name__ __module__ __qualname____doc____annotations__ classmethodrCr*rJrMrPr(r&rrsA5 6666p$$&$$r(rcreZdZdZdZedZedZdZddZ dZ dZ d Z d Z d Zd Zd ZdZy)r7a 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|jr|jStd|| fDr|S|jr|j t dSy)Nc3VK|]!}ttfD]}t||#ywr"r7r8r6.0r<js r& z%floor._eval_number..:@ug.>@)*!Q@@')r) is_Numberr7anyis_NumberSymbolapproximation_intervalr rEs r&r*zfloor._eval_numbers\ ==99;  @t@ @J   --g6q9 9 r(cl|jr'|jrtjS|jrz|j \}}|j }|y|r| | }}t||rtjStt||t|d|zgrtjS|j rx|j \}}|j }|y|r| | }}t| |rtjSttd|z|t|| gr tdSyyyN) r/is_zerorr1 is_positiveas_numer_denom is_negativerr rOne NegativeOner r9r:numdenss r&r+zfloor._eval_const_numbers ;;{{vv --/SOO9 #tcTCc?66MeCouS!C%/@AB55L--/SOO9 #tcTC#s#==(eBsFC0%cT2BCD"2;&E! r(cddlm}|jd}|j|d}|j|d}|tj us t ||r6|j|dt|jrdnd}t|}|jrN||k(rG|j||dk7r|nd}|jr|dz S|jr|Std|z|S|j||| S Nr AccumBounds-+dircdirNot sure of sign of %slogxr)!sympy.calculus.accumulationboundsrxrsubsrNaNr6limitrrnr7r,r|rlr5as_leading_term rIr%rrrxr:arg0rBndirs r&_eval_as_leading_termzfloor._eval_as_leading_termsAiilxx1~ IIaO 155=Jt[999Qbh.B.Bs9LDd A >>qywwqtqytaw@##q5L%%H-.F.MNN""14d";;r(c(|jd}|j|d}|j|d}|tjur6|j |dt |j rdnd}t|}|jr>ddl m }ddl m } |j||||} |dkr | d|dfn|dd} | | zS||k(rG|j||dk7r|nd } | j r|dz S| jr|St!d | z|S) Nrryrzr{rwOrderr}rYr~r)rrrrrrrnr7 is_infiniterrxsympy.series.orderr _eval_nseriesr|rlr5 rIr%nrrr:rrBrxrrtors r&rzfloor._eval_nseriessiilxx1~ IIaO 155=99Qbh.B.Bs9LDd A    E 0!!!Qd3A$%Fa!Q B0BAq5L 197714194!7>66M$..r(ct|}|jdjrQ|jr|jd|k\S|jr'|jr|jdt |k\S|jd|k(r(|jr|j rtjS|tjur|jrtjSt||dSNrFr) rrr/r$r3r8 is_nonintegerfalseNegativeInfinityr,rrrs r&__ge__z floor.__ge__s% 99Q<  yy|u,,5==yy|wu~55 99Q<5 U]]u7J7J77N A&& &4>>66M$..r(ct|}|jdjrT|jr|jd|dzk\S|jr'|jr|jdt |k\S|jd|k(r|jrtj S|tjur|jrtjSt||dSr) rrr/r$r3r8rrr,rrrs r&__gt__z floor.__gt__s% 99Q<  yy|uqy005==yy|wu~55 99Q<5 U]]77N A&& &4>>66M$..r(ct|}|jdjrQ|jr|jd|kS|jr'|jr|jdt |kS|jd|k(r(|jr|j rtjS|tjur|jrtjSt||dSr) rrr/r$r3r8rrrr,rrs r&__lt__z floor.__lt__s% 99Q<  yy|e++5==yy|gen44 99Q<5 U]]u7J7J66M AJJ 4>>66M$..r(Nr)rQrRrSrTr4rVr*r+rrrrrrrrrrrWr(r&r7r7asg"F D::''><*0(+ / / / /r(r7ct|jt|xst|jt|Sr")rrewriter8rlhsrhss r& _eval_is_eqr#s2 W%s + % ckk$$%r(creZdZdZdZedZedZdZddZ dZ dZ d Z d Z d Zd Zd ZdZy)r8a 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 r}c|jr|jStd|| fDr|S|jr|j t dSy)Nc3VK|]!}ttfD]}t||#ywr"r\r]s r&r`z'ceiling._eval_number..Srarbr})rcr8rdrerfr rEs r&r*zceiling._eval_numberOs\ ==;;= @t@ @J   --g6q9 9 r(cl|jr'|jrtjS|jru|j \}}|j }|y|r| | }}t||rtjStt||t|d|zgr tdS|j r}|j \}}|j }|y|r| | }}t| |rtjSttd|z|t|| grtjSyyyrh) r/rkrr1rlrmrnrror rr rprqs r&r+zceiling._eval_const_numberYs ;;{{vv --/SOO9 #tcTCc?55LeCouS!C%/@AB"1:%--/SOO9 #tcTC#s#66MeBsFC0%cT2BCD==(E! r(cddlm}|jd}|j|d}|j|d}|tj us t ||r6|j|dt|jrdnd}t|}|jrN||k(rG|j||dk7r|nd}|jr|S|jr|dzStd|z|S|j||| Srv)rrxrrrrr6rrrnr8r,r|rlr5rrs r&rzceiling._eval_as_leading_termysAiilxx1~ IIaO 155=Jt[999Qbh.B.Bs9LD A >>qywwqtqytaw@##H%%q5L-.F.MNN""14d";;r(c(|jd}|j|d}|j|d}|tjur6|j |dt |j rdnd}t|}|jr>ddl m }ddl m } |j||||} |dkr | d|dfn|dd} | | zS||k(rG|j||dk7r|nd} | j r|S| jr|dzSt!d | z|S) Nrryrzr{rwrr}r~r)rrrrrrrnr8rrrxrrrr|rlr5rs r&rzceiling._eval_nseriessiilxx1~ IIaO 155=99Qbh.B.Bs9LD A    E 0!!!Qd3A$%Fa!Q Aq0AAq5L 197714194!7>66M$..r(ct|}|jdjrQ|jr|jd|kDS|jr'|jr|jdt |kDS|jd|k(r(|jr|j rtjS|tjur|jrtjSt||dSr) rrr/r$r3r7rrrr,rrs r&rzceiling.__gt__s% 99Q<  yy|e++5==yy|eEl22 99Q<5 U]]u7J7J66M A&& &4>>66M$..r(ct|}|jdjrT|jr|jd|dz kDS|jr'|jr|jdt |kDS|jd|k(r|jrtj S|tjur|jrtj St||dSr) rrr/r$r3r7rrr,rrs r&rzceiling.__ge__s% 99Q<  yy|eai//5==yy|eEl22 99Q<5 U]]66M A&& &4>>66M$..r(ct|}|jdjrQ|jr|jd|kS|jr'|jr|jdt |kS|jd|k(r(|jr|j rtjS|tjur|jrtjSt||dSr) rrr/r$r3r7rrrr,rrrs r&rzceiling.__le__s% 99Q<  yy|u,,5==yy|uU|33 99Q<5 U]]u7J7J77N AJJ 4>>66M$..r(Nr)rQrRrSrTr4rVr*r+rrrrrrrrrrrWr(r&r8r8)sg"F D::))><*0 (+ / / / /r(r8ct|jt|xst|jt|Sr")rrr7rrs r&rrs- U#S ) IU3;;t3DS-IIr(c|eZdZdZedZdZdZdZdZ dZ dZ d Z d Z d Zd Zd ZdZdZdZddZy)raRepresents 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 cddlmfd}tjtj}}t j |D]f}|j stj|zjr6t|}|jtjs||z }\||z }b||z }h||}||}|tj|zzS)Nrrwcb|tjtjfvr ddS|jrtjS|j rR|tj urtj S|tjurtj S|t|z S|dSr) rrrr$r1r3rComplexInfinityr7)r:rxr9s r&_evalzfrac.eval.._eval%sqzz1#5#566"1a((~~vv }}!%%<55LA---55Ls++sU+ +r() rrxrr1rr2r-r.r/rr0)r9r:rrealimagrAr<rxs` @r&rCz frac.eval!sA ,VVQVVds# A~~!//!"3!>yywwqtw,##55Ld 33ADt3LL a''Q5G5GH Hq!$ $""14d";;r(cddlm}|jd}|j|d}|j|d}|jr2ddlm} |dkr |d|df} | S| dd|||z|dfz} | S||z j||||} |jrH|j||} | | jrtjz } | Stjz } | S| |z } | S)Nrrrwr}rr~)rrrrrrrxrrkr|rnrror1) rIr%rrrrr:rrBrxrrrs r&rzfrac._eval_nseriess,iilxx1~ IIaO    E$%Fa!Q AH1rs"" A/02QQQ'7+I$OI$X/M/D %%% /m/D '5JJH?HV $  r(