12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162 |
- from sympy.calculus.accumulationbounds import AccumBounds
- from sympy.core.add import Add
- from sympy.core.function import (Lambda, diff)
- from sympy.core.mod import Mod
- from sympy.core.mul import Mul
- from sympy.core.numbers import (E, Float, I, Rational, nan, oo, pi, zoo)
- from sympy.core.power import Pow
- from sympy.core.singleton import S
- from sympy.core.symbol import (Symbol, symbols)
- from sympy.functions.elementary.complexes import (arg, conjugate, im, re)
- from sympy.functions.elementary.exponential import (exp, log)
- from sympy.functions.elementary.hyperbolic import (acoth, asinh, atanh, cosh, coth, sinh, tanh)
- from sympy.functions.elementary.miscellaneous import sqrt
- from sympy.functions.elementary.trigonometric import (acos, acot, acsc, asec, asin, atan, atan2,
- cos, cot, csc, sec, sin, sinc, tan)
- from sympy.functions.special.bessel import (besselj, jn)
- from sympy.functions.special.delta_functions import Heaviside
- from sympy.matrices.dense import Matrix
- from sympy.polys.polytools import (cancel, gcd)
- from sympy.series.limits import limit
- from sympy.series.order import O
- from sympy.series.series import series
- from sympy.sets.fancysets import ImageSet
- from sympy.sets.sets import (FiniteSet, Interval)
- from sympy.simplify.simplify import simplify
- from sympy.core.expr import unchanged
- from sympy.core.function import ArgumentIndexError
- from sympy.core.relational import Ne, Eq
- from sympy.functions.elementary.piecewise import Piecewise
- from sympy.sets.setexpr import SetExpr
- from sympy.testing.pytest import XFAIL, slow, raises
- x, y, z = symbols('x y z')
- r = Symbol('r', real=True)
- k, m = symbols('k m', integer=True)
- p = Symbol('p', positive=True)
- n = Symbol('n', negative=True)
- np = Symbol('p', nonpositive=True)
- nn = Symbol('n', nonnegative=True)
- nz = Symbol('nz', nonzero=True)
- ep = Symbol('ep', extended_positive=True)
- en = Symbol('en', extended_negative=True)
- enp = Symbol('ep', extended_nonpositive=True)
- enn = Symbol('en', extended_nonnegative=True)
- enz = Symbol('enz', extended_nonzero=True)
- a = Symbol('a', algebraic=True)
- na = Symbol('na', nonzero=True, algebraic=True)
- def test_sin():
- x, y = symbols('x y')
- z = symbols('z', imaginary=True)
- assert sin.nargs == FiniteSet(1)
- assert sin(nan) is nan
- assert sin(zoo) is nan
- assert sin(oo) == AccumBounds(-1, 1)
- assert sin(oo) - sin(oo) == AccumBounds(-2, 2)
- assert sin(oo*I) == oo*I
- assert sin(-oo*I) == -oo*I
- assert 0*sin(oo) is S.Zero
- assert 0/sin(oo) is S.Zero
- assert 0 + sin(oo) == AccumBounds(-1, 1)
- assert 5 + sin(oo) == AccumBounds(4, 6)
- assert sin(0) == 0
- assert sin(z*I) == I*sinh(z)
- assert sin(asin(x)) == x
- assert sin(atan(x)) == x / sqrt(1 + x**2)
- assert sin(acos(x)) == sqrt(1 - x**2)
- assert sin(acot(x)) == 1 / (sqrt(1 + 1 / x**2) * x)
- assert sin(acsc(x)) == 1 / x
- assert sin(asec(x)) == sqrt(1 - 1 / x**2)
- assert sin(atan2(y, x)) == y / sqrt(x**2 + y**2)
- assert sin(pi*I) == sinh(pi)*I
- assert sin(-pi*I) == -sinh(pi)*I
- assert sin(-2*I) == -sinh(2)*I
- assert sin(pi) == 0
- assert sin(-pi) == 0
- assert sin(2*pi) == 0
- assert sin(-2*pi) == 0
- assert sin(-3*10**73*pi) == 0
- assert sin(7*10**103*pi) == 0
- assert sin(pi/2) == 1
- assert sin(-pi/2) == -1
- assert sin(pi*Rational(5, 2)) == 1
- assert sin(pi*Rational(7, 2)) == -1
- ne = symbols('ne', integer=True, even=False)
- e = symbols('e', even=True)
- assert sin(pi*ne/2) == (-1)**(ne/2 - S.Half)
- assert sin(pi*k/2).func == sin
- assert sin(pi*e/2) == 0
- assert sin(pi*k) == 0
- assert sin(pi*k).subs(k, 3) == sin(pi*k/2).subs(k, 6) # issue 8298
- assert sin(pi/3) == S.Half*sqrt(3)
- assert sin(pi*Rational(-2, 3)) == Rational(-1, 2)*sqrt(3)
- assert sin(pi/4) == S.Half*sqrt(2)
- assert sin(-pi/4) == Rational(-1, 2)*sqrt(2)
- assert sin(pi*Rational(17, 4)) == S.Half*sqrt(2)
- assert sin(pi*Rational(-3, 4)) == Rational(-1, 2)*sqrt(2)
- assert sin(pi/6) == S.Half
- assert sin(-pi/6) == Rational(-1, 2)
- assert sin(pi*Rational(7, 6)) == Rational(-1, 2)
- assert sin(pi*Rational(-5, 6)) == Rational(-1, 2)
- assert sin(pi*Rational(1, 5)) == sqrt((5 - sqrt(5)) / 8)
- assert sin(pi*Rational(2, 5)) == sqrt((5 + sqrt(5)) / 8)
- assert sin(pi*Rational(3, 5)) == sin(pi*Rational(2, 5))
- assert sin(pi*Rational(4, 5)) == sin(pi*Rational(1, 5))
- assert sin(pi*Rational(6, 5)) == -sin(pi*Rational(1, 5))
- assert sin(pi*Rational(8, 5)) == -sin(pi*Rational(2, 5))
- assert sin(pi*Rational(-1273, 5)) == -sin(pi*Rational(2, 5))
- assert sin(pi/8) == sqrt((2 - sqrt(2))/4)
- assert sin(pi/10) == Rational(-1, 4) + sqrt(5)/4
- assert sin(pi/12) == -sqrt(2)/4 + sqrt(6)/4
- assert sin(pi*Rational(5, 12)) == sqrt(2)/4 + sqrt(6)/4
- assert sin(pi*Rational(-7, 12)) == -sqrt(2)/4 - sqrt(6)/4
- assert sin(pi*Rational(-11, 12)) == sqrt(2)/4 - sqrt(6)/4
- assert sin(pi*Rational(104, 105)) == sin(pi/105)
- assert sin(pi*Rational(106, 105)) == -sin(pi/105)
- assert sin(pi*Rational(-104, 105)) == -sin(pi/105)
- assert sin(pi*Rational(-106, 105)) == sin(pi/105)
- assert sin(x*I) == sinh(x)*I
- assert sin(k*pi) == 0
- assert sin(17*k*pi) == 0
- assert sin(2*k*pi + 4) == sin(4)
- assert sin(2*k*pi + m*pi + 1) == (-1)**(m + 2*k)*sin(1)
- assert sin(k*pi*I) == sinh(k*pi)*I
- assert sin(r).is_real is True
- assert sin(0, evaluate=False).is_algebraic
- assert sin(a).is_algebraic is None
- assert sin(na).is_algebraic is False
- q = Symbol('q', rational=True)
- assert sin(pi*q).is_algebraic
- qn = Symbol('qn', rational=True, nonzero=True)
- assert sin(qn).is_rational is False
- assert sin(q).is_rational is None # issue 8653
- assert isinstance(sin( re(x) - im(y)), sin) is True
- assert isinstance(sin(-re(x) + im(y)), sin) is False
- assert sin(SetExpr(Interval(0, 1))) == SetExpr(ImageSet(Lambda(x, sin(x)),
- Interval(0, 1)))
- for d in list(range(1, 22)) + [60, 85]:
- for n in range(d*2 + 1):
- x = n*pi/d
- e = abs( float(sin(x)) - sin(float(x)) )
- assert e < 1e-12
- assert sin(0, evaluate=False).is_zero is True
- assert sin(k*pi, evaluate=False).is_zero is True
- assert sin(Add(1, -1, evaluate=False), evaluate=False).is_zero is True
- def test_sin_cos():
- for d in [1, 2, 3, 4, 5, 6, 10, 12, 15, 20, 24, 30, 40, 60, 120]: # list is not exhaustive...
- for n in range(-2*d, d*2):
- x = n*pi/d
- assert sin(x + pi/2) == cos(x), "fails for %d*pi/%d" % (n, d)
- assert sin(x - pi/2) == -cos(x), "fails for %d*pi/%d" % (n, d)
- assert sin(x) == cos(x - pi/2), "fails for %d*pi/%d" % (n, d)
- assert -sin(x) == cos(x + pi/2), "fails for %d*pi/%d" % (n, d)
- def test_sin_series():
- assert sin(x).series(x, 0, 9) == \
- x - x**3/6 + x**5/120 - x**7/5040 + O(x**9)
- def test_sin_rewrite():
- assert sin(x).rewrite(exp) == -I*(exp(I*x) - exp(-I*x))/2
- assert sin(x).rewrite(tan) == 2*tan(x/2)/(1 + tan(x/2)**2)
- assert sin(x).rewrite(cot) == \
- Piecewise((0, Eq(im(x), 0) & Eq(Mod(x, pi), 0)),
- (2*cot(x/2)/(cot(x/2)**2 + 1), True))
- assert sin(sinh(x)).rewrite(
- exp).subs(x, 3).n() == sin(x).rewrite(exp).subs(x, sinh(3)).n()
- assert sin(cosh(x)).rewrite(
- exp).subs(x, 3).n() == sin(x).rewrite(exp).subs(x, cosh(3)).n()
- assert sin(tanh(x)).rewrite(
- exp).subs(x, 3).n() == sin(x).rewrite(exp).subs(x, tanh(3)).n()
- assert sin(coth(x)).rewrite(
- exp).subs(x, 3).n() == sin(x).rewrite(exp).subs(x, coth(3)).n()
- assert sin(sin(x)).rewrite(
- exp).subs(x, 3).n() == sin(x).rewrite(exp).subs(x, sin(3)).n()
- assert sin(cos(x)).rewrite(
- exp).subs(x, 3).n() == sin(x).rewrite(exp).subs(x, cos(3)).n()
- assert sin(tan(x)).rewrite(
- exp).subs(x, 3).n() == sin(x).rewrite(exp).subs(x, tan(3)).n()
- assert sin(cot(x)).rewrite(
- exp).subs(x, 3).n() == sin(x).rewrite(exp).subs(x, cot(3)).n()
- assert sin(log(x)).rewrite(Pow) == I*x**-I / 2 - I*x**I /2
- assert sin(x).rewrite(csc) == 1/csc(x)
- assert sin(x).rewrite(cos) == cos(x - pi / 2, evaluate=False)
- assert sin(x).rewrite(sec) == 1 / sec(x - pi / 2, evaluate=False)
- assert sin(cos(x)).rewrite(Pow) == sin(cos(x))
- def _test_extrig(f, i, e):
- from sympy.core.function import expand_trig
- assert unchanged(f, i)
- assert expand_trig(f(i)) == f(i)
- # testing directly instead of with .expand(trig=True)
- # because the other expansions undo the unevaluated Mul
- assert expand_trig(f(Mul(i, 1, evaluate=False))) == e
- assert abs(f(i) - e).n() < 1e-10
- def test_sin_expansion():
- # Note: these formulas are not unique. The ones here come from the
- # Chebyshev formulas.
- assert sin(x + y).expand(trig=True) == sin(x)*cos(y) + cos(x)*sin(y)
- assert sin(x - y).expand(trig=True) == sin(x)*cos(y) - cos(x)*sin(y)
- assert sin(y - x).expand(trig=True) == cos(x)*sin(y) - sin(x)*cos(y)
- assert sin(2*x).expand(trig=True) == 2*sin(x)*cos(x)
- assert sin(3*x).expand(trig=True) == -4*sin(x)**3 + 3*sin(x)
- assert sin(4*x).expand(trig=True) == -8*sin(x)**3*cos(x) + 4*sin(x)*cos(x)
- _test_extrig(sin, 2, 2*sin(1)*cos(1))
- _test_extrig(sin, 3, -4*sin(1)**3 + 3*sin(1))
- def test_sin_AccumBounds():
- assert sin(AccumBounds(-oo, oo)) == AccumBounds(-1, 1)
- assert sin(AccumBounds(0, oo)) == AccumBounds(-1, 1)
- assert sin(AccumBounds(-oo, 0)) == AccumBounds(-1, 1)
- assert sin(AccumBounds(0, 2*S.Pi)) == AccumBounds(-1, 1)
- assert sin(AccumBounds(0, S.Pi*Rational(3, 4))) == AccumBounds(0, 1)
- assert sin(AccumBounds(S.Pi*Rational(3, 4), S.Pi*Rational(7, 4))) == AccumBounds(-1, sin(S.Pi*Rational(3, 4)))
- assert sin(AccumBounds(S.Pi/4, S.Pi/3)) == AccumBounds(sin(S.Pi/4), sin(S.Pi/3))
- assert sin(AccumBounds(S.Pi*Rational(3, 4), S.Pi*Rational(5, 6))) == AccumBounds(sin(S.Pi*Rational(5, 6)), sin(S.Pi*Rational(3, 4)))
- def test_sin_fdiff():
- assert sin(x).fdiff() == cos(x)
- raises(ArgumentIndexError, lambda: sin(x).fdiff(2))
- def test_trig_symmetry():
- assert sin(-x) == -sin(x)
- assert cos(-x) == cos(x)
- assert tan(-x) == -tan(x)
- assert cot(-x) == -cot(x)
- assert sin(x + pi) == -sin(x)
- assert sin(x + 2*pi) == sin(x)
- assert sin(x + 3*pi) == -sin(x)
- assert sin(x + 4*pi) == sin(x)
- assert sin(x - 5*pi) == -sin(x)
- assert cos(x + pi) == -cos(x)
- assert cos(x + 2*pi) == cos(x)
- assert cos(x + 3*pi) == -cos(x)
- assert cos(x + 4*pi) == cos(x)
- assert cos(x - 5*pi) == -cos(x)
- assert tan(x + pi) == tan(x)
- assert tan(x - 3*pi) == tan(x)
- assert cot(x + pi) == cot(x)
- assert cot(x - 3*pi) == cot(x)
- assert sin(pi/2 - x) == cos(x)
- assert sin(pi*Rational(3, 2) - x) == -cos(x)
- assert sin(pi*Rational(5, 2) - x) == cos(x)
- assert cos(pi/2 - x) == sin(x)
- assert cos(pi*Rational(3, 2) - x) == -sin(x)
- assert cos(pi*Rational(5, 2) - x) == sin(x)
- assert tan(pi/2 - x) == cot(x)
- assert tan(pi*Rational(3, 2) - x) == cot(x)
- assert tan(pi*Rational(5, 2) - x) == cot(x)
- assert cot(pi/2 - x) == tan(x)
- assert cot(pi*Rational(3, 2) - x) == tan(x)
- assert cot(pi*Rational(5, 2) - x) == tan(x)
- assert sin(pi/2 + x) == cos(x)
- assert cos(pi/2 + x) == -sin(x)
- assert tan(pi/2 + x) == -cot(x)
- assert cot(pi/2 + x) == -tan(x)
- def test_cos():
- x, y = symbols('x y')
- assert cos.nargs == FiniteSet(1)
- assert cos(nan) is nan
- assert cos(oo) == AccumBounds(-1, 1)
- assert cos(oo) - cos(oo) == AccumBounds(-2, 2)
- assert cos(oo*I) is oo
- assert cos(-oo*I) is oo
- assert cos(zoo) is nan
- assert cos(0) == 1
- assert cos(acos(x)) == x
- assert cos(atan(x)) == 1 / sqrt(1 + x**2)
- assert cos(asin(x)) == sqrt(1 - x**2)
- assert cos(acot(x)) == 1 / sqrt(1 + 1 / x**2)
- assert cos(acsc(x)) == sqrt(1 - 1 / x**2)
- assert cos(asec(x)) == 1 / x
- assert cos(atan2(y, x)) == x / sqrt(x**2 + y**2)
- assert cos(pi*I) == cosh(pi)
- assert cos(-pi*I) == cosh(pi)
- assert cos(-2*I) == cosh(2)
- assert cos(pi/2) == 0
- assert cos(-pi/2) == 0
- assert cos(pi/2) == 0
- assert cos(-pi/2) == 0
- assert cos((-3*10**73 + 1)*pi/2) == 0
- assert cos((7*10**103 + 1)*pi/2) == 0
- n = symbols('n', integer=True, even=False)
- e = symbols('e', even=True)
- assert cos(pi*n/2) == 0
- assert cos(pi*e/2) == (-1)**(e/2)
- assert cos(pi) == -1
- assert cos(-pi) == -1
- assert cos(2*pi) == 1
- assert cos(5*pi) == -1
- assert cos(8*pi) == 1
- assert cos(pi/3) == S.Half
- assert cos(pi*Rational(-2, 3)) == Rational(-1, 2)
- assert cos(pi/4) == S.Half*sqrt(2)
- assert cos(-pi/4) == S.Half*sqrt(2)
- assert cos(pi*Rational(11, 4)) == Rational(-1, 2)*sqrt(2)
- assert cos(pi*Rational(-3, 4)) == Rational(-1, 2)*sqrt(2)
- assert cos(pi/6) == S.Half*sqrt(3)
- assert cos(-pi/6) == S.Half*sqrt(3)
- assert cos(pi*Rational(7, 6)) == Rational(-1, 2)*sqrt(3)
- assert cos(pi*Rational(-5, 6)) == Rational(-1, 2)*sqrt(3)
- assert cos(pi*Rational(1, 5)) == (sqrt(5) + 1)/4
- assert cos(pi*Rational(2, 5)) == (sqrt(5) - 1)/4
- assert cos(pi*Rational(3, 5)) == -cos(pi*Rational(2, 5))
- assert cos(pi*Rational(4, 5)) == -cos(pi*Rational(1, 5))
- assert cos(pi*Rational(6, 5)) == -cos(pi*Rational(1, 5))
- assert cos(pi*Rational(8, 5)) == cos(pi*Rational(2, 5))
- assert cos(pi*Rational(-1273, 5)) == -cos(pi*Rational(2, 5))
- assert cos(pi/8) == sqrt((2 + sqrt(2))/4)
- assert cos(pi/12) == sqrt(2)/4 + sqrt(6)/4
- assert cos(pi*Rational(5, 12)) == -sqrt(2)/4 + sqrt(6)/4
- assert cos(pi*Rational(7, 12)) == sqrt(2)/4 - sqrt(6)/4
- assert cos(pi*Rational(11, 12)) == -sqrt(2)/4 - sqrt(6)/4
- assert cos(pi*Rational(104, 105)) == -cos(pi/105)
- assert cos(pi*Rational(106, 105)) == -cos(pi/105)
- assert cos(pi*Rational(-104, 105)) == -cos(pi/105)
- assert cos(pi*Rational(-106, 105)) == -cos(pi/105)
- assert cos(x*I) == cosh(x)
- assert cos(k*pi*I) == cosh(k*pi)
- assert cos(r).is_real is True
- assert cos(0, evaluate=False).is_algebraic
- assert cos(a).is_algebraic is None
- assert cos(na).is_algebraic is False
- q = Symbol('q', rational=True)
- assert cos(pi*q).is_algebraic
- assert cos(pi*Rational(2, 7)).is_algebraic
- assert cos(k*pi) == (-1)**k
- assert cos(2*k*pi) == 1
- assert cos(0, evaluate=False).is_zero is False
- assert cos(Rational(1, 2)).is_zero is False
- # The following test will return None as the result, but really it should
- # be True even if it is not always possible to resolve an assumptions query.
- assert cos(asin(-1, evaluate=False), evaluate=False).is_zero is None
- for d in list(range(1, 22)) + [60, 85]:
- for n in range(2*d + 1):
- x = n*pi/d
- e = abs( float(cos(x)) - cos(float(x)) )
- assert e < 1e-12
- def test_issue_6190():
- c = Float('123456789012345678901234567890.25', '')
- for cls in [sin, cos, tan, cot]:
- assert cls(c*pi) == cls(pi/4)
- assert cls(4.125*pi) == cls(pi/8)
- assert cls(4.7*pi) == cls((4.7 % 2)*pi)
- def test_cos_series():
- assert cos(x).series(x, 0, 9) == \
- 1 - x**2/2 + x**4/24 - x**6/720 + x**8/40320 + O(x**9)
- def test_cos_rewrite():
- assert cos(x).rewrite(exp) == exp(I*x)/2 + exp(-I*x)/2
- assert cos(x).rewrite(tan) == (1 - tan(x/2)**2)/(1 + tan(x/2)**2)
- assert cos(x).rewrite(cot) == \
- Piecewise((1, Eq(im(x), 0) & Eq(Mod(x, 2*pi), 0)),
- ((cot(x/2)**2 - 1)/(cot(x/2)**2 + 1), True))
- assert cos(sinh(x)).rewrite(
- exp).subs(x, 3).n() == cos(x).rewrite(exp).subs(x, sinh(3)).n()
- assert cos(cosh(x)).rewrite(
- exp).subs(x, 3).n() == cos(x).rewrite(exp).subs(x, cosh(3)).n()
- assert cos(tanh(x)).rewrite(
- exp).subs(x, 3).n() == cos(x).rewrite(exp).subs(x, tanh(3)).n()
- assert cos(coth(x)).rewrite(
- exp).subs(x, 3).n() == cos(x).rewrite(exp).subs(x, coth(3)).n()
- assert cos(sin(x)).rewrite(
- exp).subs(x, 3).n() == cos(x).rewrite(exp).subs(x, sin(3)).n()
- assert cos(cos(x)).rewrite(
- exp).subs(x, 3).n() == cos(x).rewrite(exp).subs(x, cos(3)).n()
- assert cos(tan(x)).rewrite(
- exp).subs(x, 3).n() == cos(x).rewrite(exp).subs(x, tan(3)).n()
- assert cos(cot(x)).rewrite(
- exp).subs(x, 3).n() == cos(x).rewrite(exp).subs(x, cot(3)).n()
- assert cos(log(x)).rewrite(Pow) == x**I/2 + x**-I/2
- assert cos(x).rewrite(sec) == 1/sec(x)
- assert cos(x).rewrite(sin) == sin(x + pi/2, evaluate=False)
- assert cos(x).rewrite(csc) == 1/csc(-x + pi/2, evaluate=False)
- assert cos(sin(x)).rewrite(Pow) == cos(sin(x))
- def test_cos_expansion():
- assert cos(x + y).expand(trig=True) == cos(x)*cos(y) - sin(x)*sin(y)
- assert cos(x - y).expand(trig=True) == cos(x)*cos(y) + sin(x)*sin(y)
- assert cos(y - x).expand(trig=True) == cos(x)*cos(y) + sin(x)*sin(y)
- assert cos(2*x).expand(trig=True) == 2*cos(x)**2 - 1
- assert cos(3*x).expand(trig=True) == 4*cos(x)**3 - 3*cos(x)
- assert cos(4*x).expand(trig=True) == 8*cos(x)**4 - 8*cos(x)**2 + 1
- _test_extrig(cos, 2, 2*cos(1)**2 - 1)
- _test_extrig(cos, 3, 4*cos(1)**3 - 3*cos(1))
- def test_cos_AccumBounds():
- assert cos(AccumBounds(-oo, oo)) == AccumBounds(-1, 1)
- assert cos(AccumBounds(0, oo)) == AccumBounds(-1, 1)
- assert cos(AccumBounds(-oo, 0)) == AccumBounds(-1, 1)
- assert cos(AccumBounds(0, 2*S.Pi)) == AccumBounds(-1, 1)
- assert cos(AccumBounds(-S.Pi/3, S.Pi/4)) == AccumBounds(cos(-S.Pi/3), 1)
- assert cos(AccumBounds(S.Pi*Rational(3, 4), S.Pi*Rational(5, 4))) == AccumBounds(-1, cos(S.Pi*Rational(3, 4)))
- assert cos(AccumBounds(S.Pi*Rational(5, 4), S.Pi*Rational(4, 3))) == AccumBounds(cos(S.Pi*Rational(5, 4)), cos(S.Pi*Rational(4, 3)))
- assert cos(AccumBounds(S.Pi/4, S.Pi/3)) == AccumBounds(cos(S.Pi/3), cos(S.Pi/4))
- def test_cos_fdiff():
- assert cos(x).fdiff() == -sin(x)
- raises(ArgumentIndexError, lambda: cos(x).fdiff(2))
- def test_tan():
- assert tan(nan) is nan
- assert tan(zoo) is nan
- assert tan(oo) == AccumBounds(-oo, oo)
- assert tan(oo) - tan(oo) == AccumBounds(-oo, oo)
- assert tan.nargs == FiniteSet(1)
- assert tan(oo*I) == I
- assert tan(-oo*I) == -I
- assert tan(0) == 0
- assert tan(atan(x)) == x
- assert tan(asin(x)) == x / sqrt(1 - x**2)
- assert tan(acos(x)) == sqrt(1 - x**2) / x
- assert tan(acot(x)) == 1 / x
- assert tan(acsc(x)) == 1 / (sqrt(1 - 1 / x**2) * x)
- assert tan(asec(x)) == sqrt(1 - 1 / x**2) * x
- assert tan(atan2(y, x)) == y/x
- assert tan(pi*I) == tanh(pi)*I
- assert tan(-pi*I) == -tanh(pi)*I
- assert tan(-2*I) == -tanh(2)*I
- assert tan(pi) == 0
- assert tan(-pi) == 0
- assert tan(2*pi) == 0
- assert tan(-2*pi) == 0
- assert tan(-3*10**73*pi) == 0
- assert tan(pi/2) is zoo
- assert tan(pi*Rational(3, 2)) is zoo
- assert tan(pi/3) == sqrt(3)
- assert tan(pi*Rational(-2, 3)) == sqrt(3)
- assert tan(pi/4) is S.One
- assert tan(-pi/4) is S.NegativeOne
- assert tan(pi*Rational(17, 4)) is S.One
- assert tan(pi*Rational(-3, 4)) is S.One
- assert tan(pi/5) == sqrt(5 - 2*sqrt(5))
- assert tan(pi*Rational(2, 5)) == sqrt(5 + 2*sqrt(5))
- assert tan(pi*Rational(18, 5)) == -sqrt(5 + 2*sqrt(5))
- assert tan(pi*Rational(-16, 5)) == -sqrt(5 - 2*sqrt(5))
- assert tan(pi/6) == 1/sqrt(3)
- assert tan(-pi/6) == -1/sqrt(3)
- assert tan(pi*Rational(7, 6)) == 1/sqrt(3)
- assert tan(pi*Rational(-5, 6)) == 1/sqrt(3)
- assert tan(pi/8) == -1 + sqrt(2)
- assert tan(pi*Rational(3, 8)) == 1 + sqrt(2) # issue 15959
- assert tan(pi*Rational(5, 8)) == -1 - sqrt(2)
- assert tan(pi*Rational(7, 8)) == 1 - sqrt(2)
- assert tan(pi/10) == sqrt(1 - 2*sqrt(5)/5)
- assert tan(pi*Rational(3, 10)) == sqrt(1 + 2*sqrt(5)/5)
- assert tan(pi*Rational(17, 10)) == -sqrt(1 + 2*sqrt(5)/5)
- assert tan(pi*Rational(-31, 10)) == -sqrt(1 - 2*sqrt(5)/5)
- assert tan(pi/12) == -sqrt(3) + 2
- assert tan(pi*Rational(5, 12)) == sqrt(3) + 2
- assert tan(pi*Rational(7, 12)) == -sqrt(3) - 2
- assert tan(pi*Rational(11, 12)) == sqrt(3) - 2
- assert tan(pi/24).radsimp() == -2 - sqrt(3) + sqrt(2) + sqrt(6)
- assert tan(pi*Rational(5, 24)).radsimp() == -2 + sqrt(3) - sqrt(2) + sqrt(6)
- assert tan(pi*Rational(7, 24)).radsimp() == 2 - sqrt(3) - sqrt(2) + sqrt(6)
- assert tan(pi*Rational(11, 24)).radsimp() == 2 + sqrt(3) + sqrt(2) + sqrt(6)
- assert tan(pi*Rational(13, 24)).radsimp() == -2 - sqrt(3) - sqrt(2) - sqrt(6)
- assert tan(pi*Rational(17, 24)).radsimp() == -2 + sqrt(3) + sqrt(2) - sqrt(6)
- assert tan(pi*Rational(19, 24)).radsimp() == 2 - sqrt(3) + sqrt(2) - sqrt(6)
- assert tan(pi*Rational(23, 24)).radsimp() == 2 + sqrt(3) - sqrt(2) - sqrt(6)
- assert tan(x*I) == tanh(x)*I
- assert tan(k*pi) == 0
- assert tan(17*k*pi) == 0
- assert tan(k*pi*I) == tanh(k*pi)*I
- assert tan(r).is_real is None
- assert tan(r).is_extended_real is True
- assert tan(0, evaluate=False).is_algebraic
- assert tan(a).is_algebraic is None
- assert tan(na).is_algebraic is False
- assert tan(pi*Rational(10, 7)) == tan(pi*Rational(3, 7))
- assert tan(pi*Rational(11, 7)) == -tan(pi*Rational(3, 7))
- assert tan(pi*Rational(-11, 7)) == tan(pi*Rational(3, 7))
- assert tan(pi*Rational(15, 14)) == tan(pi/14)
- assert tan(pi*Rational(-15, 14)) == -tan(pi/14)
- assert tan(r).is_finite is None
- assert tan(I*r).is_finite is True
- # https://github.com/sympy/sympy/issues/21177
- f = tan(pi*(x + S(3)/2))/(3*x)
- assert f.as_leading_term(x) == -1/(3*pi*x**2)
- def test_tan_series():
- assert tan(x).series(x, 0, 9) == \
- x + x**3/3 + 2*x**5/15 + 17*x**7/315 + O(x**9)
- def test_tan_rewrite():
- neg_exp, pos_exp = exp(-x*I), exp(x*I)
- assert tan(x).rewrite(exp) == I*(neg_exp - pos_exp)/(neg_exp + pos_exp)
- assert tan(x).rewrite(sin) == 2*sin(x)**2/sin(2*x)
- assert tan(x).rewrite(cos) == cos(x - S.Pi/2, evaluate=False)/cos(x)
- assert tan(x).rewrite(cot) == 1/cot(x)
- assert tan(sinh(x)).rewrite(exp).subs(x, 3).n() == tan(x).rewrite(exp).subs(x, sinh(3)).n()
- assert tan(cosh(x)).rewrite(exp).subs(x, 3).n() == tan(x).rewrite(exp).subs(x, cosh(3)).n()
- assert tan(tanh(x)).rewrite(exp).subs(x, 3).n() == tan(x).rewrite(exp).subs(x, tanh(3)).n()
- assert tan(coth(x)).rewrite(exp).subs(x, 3).n() == tan(x).rewrite(exp).subs(x, coth(3)).n()
- assert tan(sin(x)).rewrite(exp).subs(x, 3).n() == tan(x).rewrite(exp).subs(x, sin(3)).n()
- assert tan(cos(x)).rewrite(exp).subs(x, 3).n() == tan(x).rewrite(exp).subs(x, cos(3)).n()
- assert tan(tan(x)).rewrite(exp).subs(x, 3).n() == tan(x).rewrite(exp).subs(x, tan(3)).n()
- assert tan(cot(x)).rewrite(exp).subs(x, 3).n() == tan(x).rewrite(exp).subs(x, cot(3)).n()
- assert tan(log(x)).rewrite(Pow) == I*(x**-I - x**I)/(x**-I + x**I)
- assert tan(x).rewrite(sec) == sec(x)/sec(x - pi/2, evaluate=False)
- assert tan(x).rewrite(csc) == csc(-x + pi/2, evaluate=False)/csc(x)
- assert tan(sin(x)).rewrite(Pow) == tan(sin(x))
- @slow
- def test_tan_rewrite_slow():
- assert 0 == (cos(pi/34)*tan(pi/34) - sin(pi/34)).rewrite(pow)
- assert 0 == (cos(pi/17)*tan(pi/17) - sin(pi/17)).rewrite(pow)
- assert tan(pi/19).rewrite(pow) == tan(pi/19)
- assert tan(pi*Rational(8, 19)).rewrite(sqrt) == tan(pi*Rational(8, 19))
- assert tan(pi*Rational(2, 5), evaluate=False).rewrite(sqrt) == sqrt(sqrt(5)/8 +
- Rational(5, 8))/(Rational(-1, 4) + sqrt(5)/4)
- def test_tan_subs():
- assert tan(x).subs(tan(x), y) == y
- assert tan(x).subs(x, y) == tan(y)
- assert tan(x).subs(x, S.Pi/2) is zoo
- assert tan(x).subs(x, S.Pi*Rational(3, 2)) is zoo
- def test_tan_expansion():
- assert tan(x + y).expand(trig=True) == ((tan(x) + tan(y))/(1 - tan(x)*tan(y))).expand()
- assert tan(x - y).expand(trig=True) == ((tan(x) - tan(y))/(1 + tan(x)*tan(y))).expand()
- assert tan(x + y + z).expand(trig=True) == (
- (tan(x) + tan(y) + tan(z) - tan(x)*tan(y)*tan(z))/
- (1 - tan(x)*tan(y) - tan(x)*tan(z) - tan(y)*tan(z))).expand()
- assert 0 == tan(2*x).expand(trig=True).rewrite(tan).subs([(tan(x), Rational(1, 7))])*24 - 7
- assert 0 == tan(3*x).expand(trig=True).rewrite(tan).subs([(tan(x), Rational(1, 5))])*55 - 37
- assert 0 == tan(4*x - pi/4).expand(trig=True).rewrite(tan).subs([(tan(x), Rational(1, 5))])*239 - 1
- _test_extrig(tan, 2, 2*tan(1)/(1 - tan(1)**2))
- _test_extrig(tan, 3, (-tan(1)**3 + 3*tan(1))/(1 - 3*tan(1)**2))
- def test_tan_AccumBounds():
- assert tan(AccumBounds(-oo, oo)) == AccumBounds(-oo, oo)
- assert tan(AccumBounds(S.Pi/3, S.Pi*Rational(2, 3))) == AccumBounds(-oo, oo)
- assert tan(AccumBounds(S.Pi/6, S.Pi/3)) == AccumBounds(tan(S.Pi/6), tan(S.Pi/3))
- def test_tan_fdiff():
- assert tan(x).fdiff() == tan(x)**2 + 1
- raises(ArgumentIndexError, lambda: tan(x).fdiff(2))
- def test_cot():
- assert cot(nan) is nan
- assert cot.nargs == FiniteSet(1)
- assert cot(oo*I) == -I
- assert cot(-oo*I) == I
- assert cot(zoo) is nan
- assert cot(0) is zoo
- assert cot(2*pi) is zoo
- assert cot(acot(x)) == x
- assert cot(atan(x)) == 1 / x
- assert cot(asin(x)) == sqrt(1 - x**2) / x
- assert cot(acos(x)) == x / sqrt(1 - x**2)
- assert cot(acsc(x)) == sqrt(1 - 1 / x**2) * x
- assert cot(asec(x)) == 1 / (sqrt(1 - 1 / x**2) * x)
- assert cot(atan2(y, x)) == x/y
- assert cot(pi*I) == -coth(pi)*I
- assert cot(-pi*I) == coth(pi)*I
- assert cot(-2*I) == coth(2)*I
- assert cot(pi) == cot(2*pi) == cot(3*pi)
- assert cot(-pi) == cot(-2*pi) == cot(-3*pi)
- assert cot(pi/2) == 0
- assert cot(-pi/2) == 0
- assert cot(pi*Rational(5, 2)) == 0
- assert cot(pi*Rational(7, 2)) == 0
- assert cot(pi/3) == 1/sqrt(3)
- assert cot(pi*Rational(-2, 3)) == 1/sqrt(3)
- assert cot(pi/4) is S.One
- assert cot(-pi/4) is S.NegativeOne
- assert cot(pi*Rational(17, 4)) is S.One
- assert cot(pi*Rational(-3, 4)) is S.One
- assert cot(pi/6) == sqrt(3)
- assert cot(-pi/6) == -sqrt(3)
- assert cot(pi*Rational(7, 6)) == sqrt(3)
- assert cot(pi*Rational(-5, 6)) == sqrt(3)
- assert cot(pi/8) == 1 + sqrt(2)
- assert cot(pi*Rational(3, 8)) == -1 + sqrt(2)
- assert cot(pi*Rational(5, 8)) == 1 - sqrt(2)
- assert cot(pi*Rational(7, 8)) == -1 - sqrt(2)
- assert cot(pi/12) == sqrt(3) + 2
- assert cot(pi*Rational(5, 12)) == -sqrt(3) + 2
- assert cot(pi*Rational(7, 12)) == sqrt(3) - 2
- assert cot(pi*Rational(11, 12)) == -sqrt(3) - 2
- assert cot(pi/24).radsimp() == sqrt(2) + sqrt(3) + 2 + sqrt(6)
- assert cot(pi*Rational(5, 24)).radsimp() == -sqrt(2) - sqrt(3) + 2 + sqrt(6)
- assert cot(pi*Rational(7, 24)).radsimp() == -sqrt(2) + sqrt(3) - 2 + sqrt(6)
- assert cot(pi*Rational(11, 24)).radsimp() == sqrt(2) - sqrt(3) - 2 + sqrt(6)
- assert cot(pi*Rational(13, 24)).radsimp() == -sqrt(2) + sqrt(3) + 2 - sqrt(6)
- assert cot(pi*Rational(17, 24)).radsimp() == sqrt(2) - sqrt(3) + 2 - sqrt(6)
- assert cot(pi*Rational(19, 24)).radsimp() == sqrt(2) + sqrt(3) - 2 - sqrt(6)
- assert cot(pi*Rational(23, 24)).radsimp() == -sqrt(2) - sqrt(3) - 2 - sqrt(6)
- assert cot(x*I) == -coth(x)*I
- assert cot(k*pi*I) == -coth(k*pi)*I
- assert cot(r).is_real is None
- assert cot(r).is_extended_real is True
- assert cot(a).is_algebraic is None
- assert cot(na).is_algebraic is False
- assert cot(pi*Rational(10, 7)) == cot(pi*Rational(3, 7))
- assert cot(pi*Rational(11, 7)) == -cot(pi*Rational(3, 7))
- assert cot(pi*Rational(-11, 7)) == cot(pi*Rational(3, 7))
- assert cot(pi*Rational(39, 34)) == cot(pi*Rational(5, 34))
- assert cot(pi*Rational(-41, 34)) == -cot(pi*Rational(7, 34))
- assert cot(x).is_finite is None
- assert cot(r).is_finite is None
- i = Symbol('i', imaginary=True)
- assert cot(i).is_finite is True
- assert cot(x).subs(x, 3*pi) is zoo
- # https://github.com/sympy/sympy/issues/21177
- f = cot(pi*(x + 4))/(3*x)
- assert f.as_leading_term(x) == 1/(3*pi*x**2)
- def test_tan_cot_sin_cos_evalf():
- assert abs((tan(pi*Rational(8, 15))*cos(pi*Rational(8, 15))/sin(pi*Rational(8, 15)) - 1).evalf()) < 1e-14
- assert abs((cot(pi*Rational(4, 15))*sin(pi*Rational(4, 15))/cos(pi*Rational(4, 15)) - 1).evalf()) < 1e-14
- @XFAIL
- def test_tan_cot_sin_cos_ratsimp():
- assert 1 == (tan(pi*Rational(8, 15))*cos(pi*Rational(8, 15))/sin(pi*Rational(8, 15))).ratsimp()
- assert 1 == (cot(pi*Rational(4, 15))*sin(pi*Rational(4, 15))/cos(pi*Rational(4, 15))).ratsimp()
- def test_cot_series():
- assert cot(x).series(x, 0, 9) == \
- 1/x - x/3 - x**3/45 - 2*x**5/945 - x**7/4725 + O(x**9)
- # issue 6210
- assert cot(x**4 + x**5).series(x, 0, 1) == \
- x**(-4) - 1/x**3 + x**(-2) - 1/x + 1 + O(x)
- assert cot(pi*(1-x)).series(x, 0, 3) == -1/(pi*x) + pi*x/3 + O(x**3)
- assert cot(x).taylor_term(0, x) == 1/x
- assert cot(x).taylor_term(2, x) is S.Zero
- assert cot(x).taylor_term(3, x) == -x**3/45
- def test_cot_rewrite():
- neg_exp, pos_exp = exp(-x*I), exp(x*I)
- assert cot(x).rewrite(exp) == I*(pos_exp + neg_exp)/(pos_exp - neg_exp)
- assert cot(x).rewrite(sin) == sin(2*x)/(2*(sin(x)**2))
- assert cot(x).rewrite(cos) == cos(x)/cos(x - pi/2, evaluate=False)
- assert cot(x).rewrite(tan) == 1/tan(x)
- def check(func):
- z = cot(func(x)).rewrite(exp) - cot(x).rewrite(exp).subs(x, func(x))
- assert z.rewrite(exp).expand() == 0
- check(sinh)
- check(cosh)
- check(tanh)
- check(coth)
- check(sin)
- check(cos)
- check(tan)
- assert cot(log(x)).rewrite(Pow) == -I*(x**-I + x**I)/(x**-I - x**I)
- assert cot(x).rewrite(sec) == sec(x - pi / 2, evaluate=False) / sec(x)
- assert cot(x).rewrite(csc) == csc(x) / csc(- x + pi / 2, evaluate=False)
- assert cot(sin(x)).rewrite(Pow) == cot(sin(x))
- @slow
- def test_cot_rewrite_slow():
- assert cot(pi*Rational(4, 34)).rewrite(pow).ratsimp() == \
- (cos(pi*Rational(4, 34))/sin(pi*Rational(4, 34))).rewrite(pow).ratsimp()
- assert cot(pi*Rational(4, 17)).rewrite(pow) == \
- (cos(pi*Rational(4, 17))/sin(pi*Rational(4, 17))).rewrite(pow)
- assert cot(pi/19).rewrite(pow) == cot(pi/19)
- assert cot(pi/19).rewrite(sqrt) == cot(pi/19)
- assert cot(pi*Rational(2, 5), evaluate=False).rewrite(sqrt) == \
- (Rational(-1, 4) + sqrt(5)/4) / sqrt(sqrt(5)/8 + Rational(5, 8))
- def test_cot_subs():
- assert cot(x).subs(cot(x), y) == y
- assert cot(x).subs(x, y) == cot(y)
- assert cot(x).subs(x, 0) is zoo
- assert cot(x).subs(x, S.Pi) is zoo
- def test_cot_expansion():
- assert cot(x + y).expand(trig=True).together() == (
- (cot(x)*cot(y) - 1)/(cot(x) + cot(y)))
- assert cot(x - y).expand(trig=True).together() == (
- cot(x)*cot(-y) - 1)/(cot(x) + cot(-y))
- assert cot(x + y + z).expand(trig=True).together() == (
- (cot(x)*cot(y)*cot(z) - cot(x) - cot(y) - cot(z))/
- (-1 + cot(x)*cot(y) + cot(x)*cot(z) + cot(y)*cot(z)))
- assert cot(3*x).expand(trig=True).together() == (
- (cot(x)**2 - 3)*cot(x)/(3*cot(x)**2 - 1))
- assert cot(2*x).expand(trig=True) == cot(x)/2 - 1/(2*cot(x))
- assert cot(3*x).expand(trig=True).together() == (
- cot(x)**2 - 3)*cot(x)/(3*cot(x)**2 - 1)
- assert cot(4*x - pi/4).expand(trig=True).cancel() == (
- -tan(x)**4 + 4*tan(x)**3 + 6*tan(x)**2 - 4*tan(x) - 1
- )/(tan(x)**4 + 4*tan(x)**3 - 6*tan(x)**2 - 4*tan(x) + 1)
- _test_extrig(cot, 2, (-1 + cot(1)**2)/(2*cot(1)))
- _test_extrig(cot, 3, (-3*cot(1) + cot(1)**3)/(-1 + 3*cot(1)**2))
- def test_cot_AccumBounds():
- assert cot(AccumBounds(-oo, oo)) == AccumBounds(-oo, oo)
- assert cot(AccumBounds(-S.Pi/3, S.Pi/3)) == AccumBounds(-oo, oo)
- assert cot(AccumBounds(S.Pi/6, S.Pi/3)) == AccumBounds(cot(S.Pi/3), cot(S.Pi/6))
- def test_cot_fdiff():
- assert cot(x).fdiff() == -cot(x)**2 - 1
- raises(ArgumentIndexError, lambda: cot(x).fdiff(2))
- def test_sinc():
- assert isinstance(sinc(x), sinc)
- s = Symbol('s', zero=True)
- assert sinc(s) is S.One
- assert sinc(S.Infinity) is S.Zero
- assert sinc(S.NegativeInfinity) is S.Zero
- assert sinc(S.NaN) is S.NaN
- assert sinc(S.ComplexInfinity) is S.NaN
- n = Symbol('n', integer=True, nonzero=True)
- assert sinc(n*pi) is S.Zero
- assert sinc(-n*pi) is S.Zero
- assert sinc(pi/2) == 2 / pi
- assert sinc(-pi/2) == 2 / pi
- assert sinc(pi*Rational(5, 2)) == 2 / (5*pi)
- assert sinc(pi*Rational(7, 2)) == -2 / (7*pi)
- assert sinc(-x) == sinc(x)
- assert sinc(x).diff(x) == cos(x)/x - sin(x)/x**2
- assert sinc(x).diff(x) == (sin(x)/x).diff(x)
- assert sinc(x).diff(x, x) == (-sin(x) - 2*cos(x)/x + 2*sin(x)/x**2)/x
- assert sinc(x).diff(x, x) == (sin(x)/x).diff(x, x)
- assert limit(sinc(x).diff(x), x, 0) == 0
- assert limit(sinc(x).diff(x, x), x, 0) == -S(1)/3
- # https://github.com/sympy/sympy/issues/11402
- #
- # assert sinc(x).diff(x) == Piecewise(((x*cos(x) - sin(x)) / x**2, Ne(x, 0)), (0, True))
- #
- # assert sinc(x).diff(x).equals(sinc(x).rewrite(sin).diff(x))
- #
- # assert sinc(x).diff(x).subs(x, 0) is S.Zero
- assert sinc(x).series() == 1 - x**2/6 + x**4/120 + O(x**6)
- assert sinc(x).rewrite(jn) == jn(0, x)
- assert sinc(x).rewrite(sin) == Piecewise((sin(x)/x, Ne(x, 0)), (1, True))
- assert sinc(pi, evaluate=False).is_zero is True
- assert sinc(0, evaluate=False).is_zero is False
- assert sinc(n*pi, evaluate=False).is_zero is True
- assert sinc(x).is_zero is None
- xr = Symbol('xr', real=True, nonzero=True)
- assert sinc(x).is_real is None
- assert sinc(xr).is_real is True
- assert sinc(I*xr).is_real is True
- assert sinc(I*100).is_real is True
- assert sinc(x).is_finite is None
- assert sinc(xr).is_finite is True
- def test_asin():
- assert asin(nan) is nan
- assert asin.nargs == FiniteSet(1)
- assert asin(oo) == -I*oo
- assert asin(-oo) == I*oo
- assert asin(zoo) is zoo
- # Note: asin(-x) = - asin(x)
- assert asin(0) == 0
- assert asin(1) == pi/2
- assert asin(-1) == -pi/2
- assert asin(sqrt(3)/2) == pi/3
- assert asin(-sqrt(3)/2) == -pi/3
- assert asin(sqrt(2)/2) == pi/4
- assert asin(-sqrt(2)/2) == -pi/4
- assert asin(sqrt((5 - sqrt(5))/8)) == pi/5
- assert asin(-sqrt((5 - sqrt(5))/8)) == -pi/5
- assert asin(S.Half) == pi/6
- assert asin(Rational(-1, 2)) == -pi/6
- assert asin((sqrt(2 - sqrt(2)))/2) == pi/8
- assert asin(-(sqrt(2 - sqrt(2)))/2) == -pi/8
- assert asin((sqrt(5) - 1)/4) == pi/10
- assert asin(-(sqrt(5) - 1)/4) == -pi/10
- assert asin((sqrt(3) - 1)/sqrt(2**3)) == pi/12
- assert asin(-(sqrt(3) - 1)/sqrt(2**3)) == -pi/12
- # check round-trip for exact values:
- for d in [5, 6, 8, 10, 12]:
- for n in range(-(d//2), d//2 + 1):
- if gcd(n, d) == 1:
- assert asin(sin(n*pi/d)) == n*pi/d
- assert asin(x).diff(x) == 1/sqrt(1 - x**2)
- assert asin(0.2, evaluate=False).is_real is True
- assert asin(-2).is_real is False
- assert asin(r).is_real is None
- assert asin(-2*I) == -I*asinh(2)
- assert asin(Rational(1, 7), evaluate=False).is_positive is True
- assert asin(Rational(-1, 7), evaluate=False).is_positive is False
- assert asin(p).is_positive is None
- assert asin(sin(Rational(7, 2))) == Rational(-7, 2) + pi
- assert asin(sin(Rational(-7, 4))) == Rational(7, 4) - pi
- assert unchanged(asin, cos(x))
- def test_asin_series():
- assert asin(x).series(x, 0, 9) == \
- x + x**3/6 + 3*x**5/40 + 5*x**7/112 + O(x**9)
- t5 = asin(x).taylor_term(5, x)
- assert t5 == 3*x**5/40
- assert asin(x).taylor_term(7, x, t5, 0) == 5*x**7/112
- def test_asin_leading_term():
- assert asin(x).as_leading_term(x) == x
- # Tests concerning branch points
- assert asin(x + 1).as_leading_term(x) == pi/2
- assert asin(x - 1).as_leading_term(x) == -pi/2
- assert asin(1/x).as_leading_term(x, cdir=1) == I*log(x) + pi/2 - I*log(2)
- assert asin(1/x).as_leading_term(x, cdir=-1) == -I*log(x) - 3*pi/2 + I*log(2)
- # Tests concerning points lying on branch cuts
- assert asin(I*x + 2).as_leading_term(x, cdir=1) == pi - asin(2)
- assert asin(-I*x + 2).as_leading_term(x, cdir=1) == asin(2)
- assert asin(I*x - 2).as_leading_term(x, cdir=1) == -asin(2)
- assert asin(-I*x - 2).as_leading_term(x, cdir=1) == -pi + asin(2)
- # Tests concerning im(ndir) == 0
- assert asin(-I*x**2 + x - 2).as_leading_term(x, cdir=1) == -pi/2 + I*log(2 - sqrt(3))
- assert asin(-I*x**2 + x - 2).as_leading_term(x, cdir=-1) == -pi/2 + I*log(2 - sqrt(3))
- def test_asin_rewrite():
- assert asin(x).rewrite(log) == -I*log(I*x + sqrt(1 - x**2))
- assert asin(x).rewrite(atan) == 2*atan(x/(1 + sqrt(1 - x**2)))
- assert asin(x).rewrite(acos) == S.Pi/2 - acos(x)
- assert asin(x).rewrite(acot) == 2*acot((sqrt(-x**2 + 1) + 1)/x)
- assert asin(x).rewrite(asec) == -asec(1/x) + pi/2
- assert asin(x).rewrite(acsc) == acsc(1/x)
- def test_asin_fdiff():
- assert asin(x).fdiff() == 1/sqrt(1 - x**2)
- raises(ArgumentIndexError, lambda: asin(x).fdiff(2))
- def test_acos():
- assert acos(nan) is nan
- assert acos(zoo) is zoo
- assert acos.nargs == FiniteSet(1)
- assert acos(oo) == I*oo
- assert acos(-oo) == -I*oo
- # Note: acos(-x) = pi - acos(x)
- assert acos(0) == pi/2
- assert acos(S.Half) == pi/3
- assert acos(Rational(-1, 2)) == pi*Rational(2, 3)
- assert acos(1) == 0
- assert acos(-1) == pi
- assert acos(sqrt(2)/2) == pi/4
- assert acos(-sqrt(2)/2) == pi*Rational(3, 4)
- # check round-trip for exact values:
- for d in [5, 6, 8, 10, 12]:
- for num in range(d):
- if gcd(num, d) == 1:
- assert acos(cos(num*pi/d)) == num*pi/d
- assert acos(2*I) == pi/2 - asin(2*I)
- assert acos(x).diff(x) == -1/sqrt(1 - x**2)
- assert acos(0.2).is_real is True
- assert acos(-2).is_real is False
- assert acos(r).is_real is None
- assert acos(Rational(1, 7), evaluate=False).is_positive is True
- assert acos(Rational(-1, 7), evaluate=False).is_positive is True
- assert acos(Rational(3, 2), evaluate=False).is_positive is False
- assert acos(p).is_positive is None
- assert acos(2 + p).conjugate() != acos(10 + p)
- assert acos(-3 + n).conjugate() != acos(-3 + n)
- assert acos(Rational(1, 3)).conjugate() == acos(Rational(1, 3))
- assert acos(Rational(-1, 3)).conjugate() == acos(Rational(-1, 3))
- assert acos(p + n*I).conjugate() == acos(p - n*I)
- assert acos(z).conjugate() != acos(conjugate(z))
- def test_acos_leading_term():
- assert acos(x).as_leading_term(x) == pi/2
- # Tests concerning branch points
- assert acos(x + 1).as_leading_term(x) == sqrt(2)*sqrt(-x)
- assert acos(x - 1).as_leading_term(x) == pi
- assert acos(1/x).as_leading_term(x, cdir=1) == -I*log(x) + I*log(2)
- assert acos(1/x).as_leading_term(x, cdir=-1) == I*log(x) + 2*pi - I*log(2)
- # Tests concerning points lying on branch cuts
- assert acos(I*x + 2).as_leading_term(x, cdir=1) == -acos(2)
- assert acos(-I*x + 2).as_leading_term(x, cdir=1) == acos(2)
- assert acos(I*x - 2).as_leading_term(x, cdir=1) == acos(-2)
- assert acos(-I*x - 2).as_leading_term(x, cdir=1) == 2*pi - acos(-2)
- # Tests concerning im(ndir) == 0
- assert acos(-I*x**2 + x - 2).as_leading_term(x, cdir=1) == pi + I*log(sqrt(3) + 2)
- assert acos(-I*x**2 + x - 2).as_leading_term(x, cdir=-1) == pi + I*log(sqrt(3) + 2)
- def test_acos_series():
- assert acos(x).series(x, 0, 8) == \
- pi/2 - x - x**3/6 - 3*x**5/40 - 5*x**7/112 + O(x**8)
- assert acos(x).series(x, 0, 8) == pi/2 - asin(x).series(x, 0, 8)
- t5 = acos(x).taylor_term(5, x)
- assert t5 == -3*x**5/40
- assert acos(x).taylor_term(7, x, t5, 0) == -5*x**7/112
- assert acos(x).taylor_term(0, x) == pi/2
- assert acos(x).taylor_term(2, x) is S.Zero
- def test_acos_rewrite():
- assert acos(x).rewrite(log) == pi/2 + I*log(I*x + sqrt(1 - x**2))
- assert acos(x).rewrite(atan) == pi*(-x*sqrt(x**(-2)) + 1)/2 + atan(sqrt(1 - x**2)/x)
- assert acos(0).rewrite(atan) == S.Pi/2
- assert acos(0.5).rewrite(atan) == acos(0.5).rewrite(log)
- assert acos(x).rewrite(asin) == S.Pi/2 - asin(x)
- assert acos(x).rewrite(acot) == -2*acot((sqrt(-x**2 + 1) + 1)/x) + pi/2
- assert acos(x).rewrite(asec) == asec(1/x)
- assert acos(x).rewrite(acsc) == -acsc(1/x) + pi/2
- def test_acos_fdiff():
- assert acos(x).fdiff() == -1/sqrt(1 - x**2)
- raises(ArgumentIndexError, lambda: acos(x).fdiff(2))
- def test_atan():
- assert atan(nan) is nan
- assert atan.nargs == FiniteSet(1)
- assert atan(oo) == pi/2
- assert atan(-oo) == -pi/2
- assert atan(zoo) == AccumBounds(-pi/2, pi/2)
- assert atan(0) == 0
- assert atan(1) == pi/4
- assert atan(sqrt(3)) == pi/3
- assert atan(-(1 + sqrt(2))) == pi*Rational(-3, 8)
- assert atan(sqrt(5 - 2 * sqrt(5))) == pi/5
- assert atan(-sqrt(1 - 2 * sqrt(5)/ 5)) == -pi/10
- assert atan(sqrt(1 + 2 * sqrt(5) / 5)) == pi*Rational(3, 10)
- assert atan(-2 + sqrt(3)) == -pi/12
- assert atan(2 + sqrt(3)) == pi*Rational(5, 12)
- assert atan(-2 - sqrt(3)) == pi*Rational(-5, 12)
- # check round-trip for exact values:
- for d in [5, 6, 8, 10, 12]:
- for num in range(-(d//2), d//2 + 1):
- if gcd(num, d) == 1:
- assert atan(tan(num*pi/d)) == num*pi/d
- assert atan(oo) == pi/2
- assert atan(x).diff(x) == 1/(1 + x**2)
- assert atan(r).is_real is True
- assert atan(-2*I) == -I*atanh(2)
- assert unchanged(atan, cot(x))
- assert atan(cot(Rational(1, 4))) == Rational(-1, 4) + pi/2
- assert acot(Rational(1, 4)).is_rational is False
- for s in (x, p, n, np, nn, nz, ep, en, enp, enn, enz):
- if s.is_real or s.is_extended_real is None:
- assert s.is_nonzero is atan(s).is_nonzero
- assert s.is_positive is atan(s).is_positive
- assert s.is_negative is atan(s).is_negative
- assert s.is_nonpositive is atan(s).is_nonpositive
- assert s.is_nonnegative is atan(s).is_nonnegative
- else:
- assert s.is_extended_nonzero is atan(s).is_nonzero
- assert s.is_extended_positive is atan(s).is_positive
- assert s.is_extended_negative is atan(s).is_negative
- assert s.is_extended_nonpositive is atan(s).is_nonpositive
- assert s.is_extended_nonnegative is atan(s).is_nonnegative
- assert s.is_extended_nonzero is atan(s).is_extended_nonzero
- assert s.is_extended_positive is atan(s).is_extended_positive
- assert s.is_extended_negative is atan(s).is_extended_negative
- assert s.is_extended_nonpositive is atan(s).is_extended_nonpositive
- assert s.is_extended_nonnegative is atan(s).is_extended_nonnegative
- def test_atan_rewrite():
- assert atan(x).rewrite(log) == I*(log(1 - I*x)-log(1 + I*x))/2
- assert atan(x).rewrite(asin) == (-asin(1/sqrt(x**2 + 1)) + pi/2)*sqrt(x**2)/x
- assert atan(x).rewrite(acos) == sqrt(x**2)*acos(1/sqrt(x**2 + 1))/x
- assert atan(x).rewrite(acot) == acot(1/x)
- assert atan(x).rewrite(asec) == sqrt(x**2)*asec(sqrt(x**2 + 1))/x
- assert atan(x).rewrite(acsc) == (-acsc(sqrt(x**2 + 1)) + pi/2)*sqrt(x**2)/x
- assert atan(-5*I).evalf() == atan(x).rewrite(log).evalf(subs={x:-5*I})
- assert atan(5*I).evalf() == atan(x).rewrite(log).evalf(subs={x:5*I})
- def test_atan_fdiff():
- assert atan(x).fdiff() == 1/(x**2 + 1)
- raises(ArgumentIndexError, lambda: atan(x).fdiff(2))
- def test_atan_leading_term():
- assert atan(x).as_leading_term(x) == x
- assert atan(1/x).as_leading_term(x, cdir=1) == pi/2
- assert atan(1/x).as_leading_term(x, cdir=-1) == -pi/2
- # Tests concerning branch points
- assert atan(x + I).as_leading_term(x, cdir=1) == -I*log(x)/2 + pi/4 + I*log(2)/2
- assert atan(x + I).as_leading_term(x, cdir=-1) == -I*log(x)/2 - 3*pi/4 + I*log(2)/2
- assert atan(x - I).as_leading_term(x, cdir=1) == I*log(x)/2 + pi/4 - I*log(2)/2
- assert atan(x - I).as_leading_term(x, cdir=-1) == I*log(x)/2 + pi/4 - I*log(2)/2
- # Tests concerning points lying on branch cuts
- assert atan(x + 2*I).as_leading_term(x, cdir=1) == I*atanh(2)
- assert atan(x + 2*I).as_leading_term(x, cdir=-1) == -pi + I*atanh(2)
- assert atan(x - 2*I).as_leading_term(x, cdir=1) == pi - I*atanh(2)
- assert atan(x - 2*I).as_leading_term(x, cdir=-1) == -I*atanh(2)
- # Tests concerning re(ndir) == 0
- assert atan(2*I - I*x - x**2).as_leading_term(x, cdir=1) == -pi/2 + I*log(3)/2
- assert atan(2*I - I*x - x**2).as_leading_term(x, cdir=-1) == -pi/2 + I*log(3)/2
- def test_atan2():
- assert atan2.nargs == FiniteSet(2)
- assert atan2(0, 0) is S.NaN
- assert atan2(0, 1) == 0
- assert atan2(1, 1) == pi/4
- assert atan2(1, 0) == pi/2
- assert atan2(1, -1) == pi*Rational(3, 4)
- assert atan2(0, -1) == pi
- assert atan2(-1, -1) == pi*Rational(-3, 4)
- assert atan2(-1, 0) == -pi/2
- assert atan2(-1, 1) == -pi/4
- i = symbols('i', imaginary=True)
- r = symbols('r', real=True)
- eq = atan2(r, i)
- ans = -I*log((i + I*r)/sqrt(i**2 + r**2))
- reps = ((r, 2), (i, I))
- assert eq.subs(reps) == ans.subs(reps)
- x = Symbol('x', negative=True)
- y = Symbol('y', negative=True)
- assert atan2(y, x) == atan(y/x) - pi
- y = Symbol('y', nonnegative=True)
- assert atan2(y, x) == atan(y/x) + pi
- y = Symbol('y')
- assert atan2(y, x) == atan2(y, x, evaluate=False)
- u = Symbol("u", positive=True)
- assert atan2(0, u) == 0
- u = Symbol("u", negative=True)
- assert atan2(0, u) == pi
- assert atan2(y, oo) == 0
- assert atan2(y, -oo)== 2*pi*Heaviside(re(y), S.Half) - pi
- assert atan2(y, x).rewrite(log) == -I*log((x + I*y)/sqrt(x**2 + y**2))
- assert atan2(0, 0) is S.NaN
- ex = atan2(y, x) - arg(x + I*y)
- assert ex.subs({x:2, y:3}).rewrite(arg) == 0
- assert ex.subs({x:2, y:3*I}).rewrite(arg) == -pi - I*log(sqrt(5)*I/5)
- assert ex.subs({x:2*I, y:3}).rewrite(arg) == -pi/2 - I*log(sqrt(5)*I)
- assert ex.subs({x:2*I, y:3*I}).rewrite(arg) == -pi + atan(Rational(2, 3)) + atan(Rational(3, 2))
- i = symbols('i', imaginary=True)
- r = symbols('r', real=True)
- e = atan2(i, r)
- rewrite = e.rewrite(arg)
- reps = {i: I, r: -2}
- assert rewrite == -I*log(abs(I*i + r)/sqrt(abs(i**2 + r**2))) + arg((I*i + r)/sqrt(i**2 + r**2))
- assert (e - rewrite).subs(reps).equals(0)
- assert atan2(0, x).rewrite(atan) == Piecewise((pi, re(x) < 0),
- (0, Ne(x, 0)),
- (nan, True))
- assert atan2(0, r).rewrite(atan) == Piecewise((pi, r < 0), (0, Ne(r, 0)), (S.NaN, True))
- assert atan2(0, i),rewrite(atan) == 0
- assert atan2(0, r + i).rewrite(atan) == Piecewise((pi, r < 0), (0, True))
- assert atan2(y, x).rewrite(atan) == Piecewise(
- (2*atan(y/(x + sqrt(x**2 + y**2))), Ne(y, 0)),
- (pi, re(x) < 0),
- (0, (re(x) > 0) | Ne(im(x), 0)),
- (nan, True))
- assert conjugate(atan2(x, y)) == atan2(conjugate(x), conjugate(y))
- assert diff(atan2(y, x), x) == -y/(x**2 + y**2)
- assert diff(atan2(y, x), y) == x/(x**2 + y**2)
- assert simplify(diff(atan2(y, x).rewrite(log), x)) == -y/(x**2 + y**2)
- assert simplify(diff(atan2(y, x).rewrite(log), y)) == x/(x**2 + y**2)
- assert str(atan2(1, 2).evalf(5)) == '0.46365'
- raises(ArgumentIndexError, lambda: atan2(x, y).fdiff(3))
- def test_issue_17461():
- class A(Symbol):
- is_extended_real = True
- def _eval_evalf(self, prec):
- return Float(5.0)
- x = A('X')
- y = A('Y')
- assert abs(atan2(x, y).evalf() - 0.785398163397448) <= 1e-10
- def test_acot():
- assert acot(nan) is nan
- assert acot.nargs == FiniteSet(1)
- assert acot(-oo) == 0
- assert acot(oo) == 0
- assert acot(zoo) == 0
- assert acot(1) == pi/4
- assert acot(0) == pi/2
- assert acot(sqrt(3)/3) == pi/3
- assert acot(1/sqrt(3)) == pi/3
- assert acot(-1/sqrt(3)) == -pi/3
- assert acot(x).diff(x) == -1/(1 + x**2)
- assert acot(r).is_extended_real is True
- assert acot(I*pi) == -I*acoth(pi)
- assert acot(-2*I) == I*acoth(2)
- assert acot(x).is_positive is None
- assert acot(n).is_positive is False
- assert acot(p).is_positive is True
- assert acot(I).is_positive is False
- assert acot(Rational(1, 4)).is_rational is False
- assert unchanged(acot, cot(x))
- assert unchanged(acot, tan(x))
- assert acot(cot(Rational(1, 4))) == Rational(1, 4)
- assert acot(tan(Rational(-1, 4))) == Rational(1, 4) - pi/2
- def test_acot_rewrite():
- assert acot(x).rewrite(log) == I*(log(1 - I/x)-log(1 + I/x))/2
- assert acot(x).rewrite(asin) == x*(-asin(sqrt(-x**2)/sqrt(-x**2 - 1)) + pi/2)*sqrt(x**(-2))
- assert acot(x).rewrite(acos) == x*sqrt(x**(-2))*acos(sqrt(-x**2)/sqrt(-x**2 - 1))
- assert acot(x).rewrite(atan) == atan(1/x)
- assert acot(x).rewrite(asec) == x*sqrt(x**(-2))*asec(sqrt((x**2 + 1)/x**2))
- assert acot(x).rewrite(acsc) == x*(-acsc(sqrt((x**2 + 1)/x**2)) + pi/2)*sqrt(x**(-2))
- assert acot(-I/5).evalf() == acot(x).rewrite(log).evalf(subs={x:-I/5})
- assert acot(I/5).evalf() == acot(x).rewrite(log).evalf(subs={x:I/5})
- def test_acot_fdiff():
- assert acot(x).fdiff() == -1/(x**2 + 1)
- raises(ArgumentIndexError, lambda: acot(x).fdiff(2))
- def test_acot_leading_term():
- assert acot(1/x).as_leading_term(x) == x
- # Tests concerning branch points
- assert acot(x + I).as_leading_term(x, cdir=1) == I*log(x)/2 + pi/4 - I*log(2)/2
- assert acot(x + I).as_leading_term(x, cdir=-1) == I*log(x)/2 + pi/4 - I*log(2)/2
- assert acot(x - I).as_leading_term(x, cdir=1) == -I*log(x)/2 + pi/4 + I*log(2)/2
- assert acot(x - I).as_leading_term(x, cdir=-1) == -I*log(x)/2 - 3*pi/4 + I*log(2)/2
- # Tests concerning points lying on branch cuts
- assert acot(x).as_leading_term(x, cdir=1) == pi/2
- assert acot(x).as_leading_term(x, cdir=-1) == -pi/2
- assert acot(x + I/2).as_leading_term(x, cdir=1) == pi - I*acoth(S(1)/2)
- assert acot(x + I/2).as_leading_term(x, cdir=-1) == -I*acoth(S(1)/2)
- assert acot(x - I/2).as_leading_term(x, cdir=1) == I*acoth(S(1)/2)
- assert acot(x - I/2).as_leading_term(x, cdir=-1) == -pi + I*acoth(S(1)/2)
- # Tests concerning re(ndir) == 0
- assert acot(I/2 - I*x - x**2).as_leading_term(x, cdir=1) == -pi/2 - I*log(3)/2
- assert acot(I/2 - I*x - x**2).as_leading_term(x, cdir=-1) == -pi/2 - I*log(3)/2
- def test_attributes():
- assert sin(x).args == (x,)
- def test_sincos_rewrite():
- assert sin(pi/2 - x) == cos(x)
- assert sin(pi - x) == sin(x)
- assert cos(pi/2 - x) == sin(x)
- assert cos(pi - x) == -cos(x)
- def _check_even_rewrite(func, arg):
- """Checks that the expr has been rewritten using f(-x) -> f(x)
- arg : -x
- """
- return func(arg).args[0] == -arg
- def _check_odd_rewrite(func, arg):
- """Checks that the expr has been rewritten using f(-x) -> -f(x)
- arg : -x
- """
- return func(arg).func.is_Mul
- def _check_no_rewrite(func, arg):
- """Checks that the expr is not rewritten"""
- return func(arg).args[0] == arg
- def test_evenodd_rewrite():
- a = cos(2) # negative
- b = sin(1) # positive
- even = [cos]
- odd = [sin, tan, cot, asin, atan, acot]
- with_minus = [-1, -2**1024 * E, -pi/105, -x*y, -x - y]
- for func in even:
- for expr in with_minus:
- assert _check_even_rewrite(func, expr)
- assert _check_no_rewrite(func, a*b)
- assert func(
- x - y) == func(y - x) # it doesn't matter which form is canonical
- for func in odd:
- for expr in with_minus:
- assert _check_odd_rewrite(func, expr)
- assert _check_no_rewrite(func, a*b)
- assert func(
- x - y) == -func(y - x) # it doesn't matter which form is canonical
- def test_as_leading_term_issue_5272():
- assert sin(x).as_leading_term(x) == x
- assert cos(x).as_leading_term(x) == 1
- assert tan(x).as_leading_term(x) == x
- assert cot(x).as_leading_term(x) == 1/x
- def test_leading_terms():
- assert sin(1/x).as_leading_term(x) == AccumBounds(-1, 1)
- assert sin(S.Half).as_leading_term(x) == sin(S.Half)
- assert cos(1/x).as_leading_term(x) == AccumBounds(-1, 1)
- assert cos(S.Half).as_leading_term(x) == cos(S.Half)
- assert sec(1/x).as_leading_term(x) == AccumBounds(S.NegativeInfinity, S.Infinity)
- assert csc(1/x).as_leading_term(x) == AccumBounds(S.NegativeInfinity, S.Infinity)
- assert tan(1/x).as_leading_term(x) == AccumBounds(S.NegativeInfinity, S.Infinity)
- assert cot(1/x).as_leading_term(x) == AccumBounds(S.NegativeInfinity, S.Infinity)
- # https://github.com/sympy/sympy/issues/21038
- f = sin(pi*(x + 4))/(3*x)
- assert f.as_leading_term(x) == pi/3
- def test_atan2_expansion():
- assert cancel(atan2(x**2, x + 1).diff(x) - atan(x**2/(x + 1)).diff(x)) == 0
- assert cancel(atan(y/x).series(y, 0, 5) - atan2(y, x).series(y, 0, 5)
- + atan2(0, x) - atan(0)) == O(y**5)
- assert cancel(atan(y/x).series(x, 1, 4) - atan2(y, x).series(x, 1, 4)
- + atan2(y, 1) - atan(y)) == O((x - 1)**4, (x, 1))
- assert cancel(atan((y + x)/x).series(x, 1, 3) - atan2(y + x, x).series(x, 1, 3)
- + atan2(1 + y, 1) - atan(1 + y)) == O((x - 1)**3, (x, 1))
- assert Matrix([atan2(y, x)]).jacobian([y, x]) == \
- Matrix([[x/(y**2 + x**2), -y/(y**2 + x**2)]])
- def test_aseries():
- def t(n, v, d, e):
- assert abs(
- n(1/v).evalf() - n(1/x).series(x, dir=d).removeO().subs(x, v)) < e
- t(atan, 0.1, '+', 1e-5)
- t(atan, -0.1, '-', 1e-5)
- t(acot, 0.1, '+', 1e-5)
- t(acot, -0.1, '-', 1e-5)
- def test_issue_4420():
- i = Symbol('i', integer=True)
- e = Symbol('e', even=True)
- o = Symbol('o', odd=True)
- # unknown parity for variable
- assert cos(4*i*pi) == 1
- assert sin(4*i*pi) == 0
- assert tan(4*i*pi) == 0
- assert cot(4*i*pi) is zoo
- assert cos(3*i*pi) == cos(pi*i) # +/-1
- assert sin(3*i*pi) == 0
- assert tan(3*i*pi) == 0
- assert cot(3*i*pi) is zoo
- assert cos(4.0*i*pi) == 1
- assert sin(4.0*i*pi) == 0
- assert tan(4.0*i*pi) == 0
- assert cot(4.0*i*pi) is zoo
- assert cos(3.0*i*pi) == cos(pi*i) # +/-1
- assert sin(3.0*i*pi) == 0
- assert tan(3.0*i*pi) == 0
- assert cot(3.0*i*pi) is zoo
- assert cos(4.5*i*pi) == cos(0.5*pi*i)
- assert sin(4.5*i*pi) == sin(0.5*pi*i)
- assert tan(4.5*i*pi) == tan(0.5*pi*i)
- assert cot(4.5*i*pi) == cot(0.5*pi*i)
- # parity of variable is known
- assert cos(4*e*pi) == 1
- assert sin(4*e*pi) == 0
- assert tan(4*e*pi) == 0
- assert cot(4*e*pi) is zoo
- assert cos(3*e*pi) == 1
- assert sin(3*e*pi) == 0
- assert tan(3*e*pi) == 0
- assert cot(3*e*pi) is zoo
- assert cos(4.0*e*pi) == 1
- assert sin(4.0*e*pi) == 0
- assert tan(4.0*e*pi) == 0
- assert cot(4.0*e*pi) is zoo
- assert cos(3.0*e*pi) == 1
- assert sin(3.0*e*pi) == 0
- assert tan(3.0*e*pi) == 0
- assert cot(3.0*e*pi) is zoo
- assert cos(4.5*e*pi) == cos(0.5*pi*e)
- assert sin(4.5*e*pi) == sin(0.5*pi*e)
- assert tan(4.5*e*pi) == tan(0.5*pi*e)
- assert cot(4.5*e*pi) == cot(0.5*pi*e)
- assert cos(4*o*pi) == 1
- assert sin(4*o*pi) == 0
- assert tan(4*o*pi) == 0
- assert cot(4*o*pi) is zoo
- assert cos(3*o*pi) == -1
- assert sin(3*o*pi) == 0
- assert tan(3*o*pi) == 0
- assert cot(3*o*pi) is zoo
- assert cos(4.0*o*pi) == 1
- assert sin(4.0*o*pi) == 0
- assert tan(4.0*o*pi) == 0
- assert cot(4.0*o*pi) is zoo
- assert cos(3.0*o*pi) == -1
- assert sin(3.0*o*pi) == 0
- assert tan(3.0*o*pi) == 0
- assert cot(3.0*o*pi) is zoo
- assert cos(4.5*o*pi) == cos(0.5*pi*o)
- assert sin(4.5*o*pi) == sin(0.5*pi*o)
- assert tan(4.5*o*pi) == tan(0.5*pi*o)
- assert cot(4.5*o*pi) == cot(0.5*pi*o)
- # x could be imaginary
- assert cos(4*x*pi) == cos(4*pi*x)
- assert sin(4*x*pi) == sin(4*pi*x)
- assert tan(4*x*pi) == tan(4*pi*x)
- assert cot(4*x*pi) == cot(4*pi*x)
- assert cos(3*x*pi) == cos(3*pi*x)
- assert sin(3*x*pi) == sin(3*pi*x)
- assert tan(3*x*pi) == tan(3*pi*x)
- assert cot(3*x*pi) == cot(3*pi*x)
- assert cos(4.0*x*pi) == cos(4.0*pi*x)
- assert sin(4.0*x*pi) == sin(4.0*pi*x)
- assert tan(4.0*x*pi) == tan(4.0*pi*x)
- assert cot(4.0*x*pi) == cot(4.0*pi*x)
- assert cos(3.0*x*pi) == cos(3.0*pi*x)
- assert sin(3.0*x*pi) == sin(3.0*pi*x)
- assert tan(3.0*x*pi) == tan(3.0*pi*x)
- assert cot(3.0*x*pi) == cot(3.0*pi*x)
- assert cos(4.5*x*pi) == cos(4.5*pi*x)
- assert sin(4.5*x*pi) == sin(4.5*pi*x)
- assert tan(4.5*x*pi) == tan(4.5*pi*x)
- assert cot(4.5*x*pi) == cot(4.5*pi*x)
- def test_inverses():
- raises(AttributeError, lambda: sin(x).inverse())
- raises(AttributeError, lambda: cos(x).inverse())
- assert tan(x).inverse() == atan
- assert cot(x).inverse() == acot
- raises(AttributeError, lambda: csc(x).inverse())
- raises(AttributeError, lambda: sec(x).inverse())
- assert asin(x).inverse() == sin
- assert acos(x).inverse() == cos
- assert atan(x).inverse() == tan
- assert acot(x).inverse() == cot
- def test_real_imag():
- a, b = symbols('a b', real=True)
- z = a + b*I
- for deep in [True, False]:
- assert sin(
- z).as_real_imag(deep=deep) == (sin(a)*cosh(b), cos(a)*sinh(b))
- assert cos(
- z).as_real_imag(deep=deep) == (cos(a)*cosh(b), -sin(a)*sinh(b))
- assert tan(z).as_real_imag(deep=deep) == (sin(2*a)/(cos(2*a) +
- cosh(2*b)), sinh(2*b)/(cos(2*a) + cosh(2*b)))
- assert cot(z).as_real_imag(deep=deep) == (-sin(2*a)/(cos(2*a) -
- cosh(2*b)), sinh(2*b)/(cos(2*a) - cosh(2*b)))
- assert sin(a).as_real_imag(deep=deep) == (sin(a), 0)
- assert cos(a).as_real_imag(deep=deep) == (cos(a), 0)
- assert tan(a).as_real_imag(deep=deep) == (tan(a), 0)
- assert cot(a).as_real_imag(deep=deep) == (cot(a), 0)
- @XFAIL
- def test_sin_cos_with_infinity():
- # Test for issue 5196
- # https://github.com/sympy/sympy/issues/5196
- assert sin(oo) is S.NaN
- assert cos(oo) is S.NaN
- @slow
- def test_sincos_rewrite_sqrt():
- # equivalent to testing rewrite(pow)
- for p in [1, 3, 5, 17]:
- for t in [1, 8]:
- n = t*p
- # The vertices `exp(i*pi/n)` of a regular `n`-gon can
- # be expressed by means of nested square roots if and
- # only if `n` is a product of Fermat primes, `p`, and
- # powers of 2, `t'. The code aims to check all vertices
- # not belonging to an `m`-gon for `m < n`(`gcd(i, n) == 1`).
- # For large `n` this makes the test too slow, therefore
- # the vertices are limited to those of index `i < 10`.
- for i in range(1, min((n + 1)//2 + 1, 10)):
- if 1 == gcd(i, n):
- x = i*pi/n
- s1 = sin(x).rewrite(sqrt)
- c1 = cos(x).rewrite(sqrt)
- assert not s1.has(cos, sin), "fails for %d*pi/%d" % (i, n)
- assert not c1.has(cos, sin), "fails for %d*pi/%d" % (i, n)
- assert 1e-3 > abs(sin(x.evalf(5)) - s1.evalf(2)), "fails for %d*pi/%d" % (i, n)
- assert 1e-3 > abs(cos(x.evalf(5)) - c1.evalf(2)), "fails for %d*pi/%d" % (i, n)
- assert cos(pi/14).rewrite(sqrt) == sqrt(cos(pi/7)/2 + S.Half)
- assert cos(pi*Rational(-15, 2)/11, evaluate=False).rewrite(
- sqrt) == -sqrt(-cos(pi*Rational(4, 11))/2 + S.Half)
- assert cos(Mul(2, pi, S.Half, evaluate=False), evaluate=False).rewrite(
- sqrt) == -1
- e = cos(pi/3/17) # don't use pi/15 since that is caught at instantiation
- a = (
- -3*sqrt(-sqrt(17) + 17)*sqrt(sqrt(17) + 17)/64 -
- 3*sqrt(34)*sqrt(sqrt(17) + 17)/128 - sqrt(sqrt(17) +
- 17)*sqrt(-8*sqrt(2)*sqrt(sqrt(17) + 17) - sqrt(2)*sqrt(-sqrt(17) + 17)
- + sqrt(34)*sqrt(-sqrt(17) + 17) + 6*sqrt(17) + 34)/64 - sqrt(-sqrt(17)
- + 17)*sqrt(-8*sqrt(2)*sqrt(sqrt(17) + 17) - sqrt(2)*sqrt(-sqrt(17) +
- 17) + sqrt(34)*sqrt(-sqrt(17) + 17) + 6*sqrt(17) + 34)/128 - Rational(1, 32) +
- sqrt(2)*sqrt(-8*sqrt(2)*sqrt(sqrt(17) + 17) - sqrt(2)*sqrt(-sqrt(17) +
- 17) + sqrt(34)*sqrt(-sqrt(17) + 17) + 6*sqrt(17) + 34)/64 +
- 3*sqrt(2)*sqrt(sqrt(17) + 17)/128 + sqrt(34)*sqrt(-sqrt(17) + 17)/128
- + 13*sqrt(2)*sqrt(-sqrt(17) + 17)/128 + sqrt(17)*sqrt(-sqrt(17) +
- 17)*sqrt(-8*sqrt(2)*sqrt(sqrt(17) + 17) - sqrt(2)*sqrt(-sqrt(17) + 17)
- + sqrt(34)*sqrt(-sqrt(17) + 17) + 6*sqrt(17) + 34)/128 + 5*sqrt(17)/32
- + sqrt(3)*sqrt(-sqrt(2)*sqrt(sqrt(17) + 17)*sqrt(sqrt(17)/32 +
- sqrt(2)*sqrt(-sqrt(17) + 17)/32 +
- sqrt(2)*sqrt(-8*sqrt(2)*sqrt(sqrt(17) + 17) - sqrt(2)*sqrt(-sqrt(17) +
- 17) + sqrt(34)*sqrt(-sqrt(17) + 17) + 6*sqrt(17) + 34)/32 + Rational(15, 32))/8 -
- 5*sqrt(2)*sqrt(sqrt(17)/32 + sqrt(2)*sqrt(-sqrt(17) + 17)/32 +
- sqrt(2)*sqrt(-8*sqrt(2)*sqrt(sqrt(17) + 17) - sqrt(2)*sqrt(-sqrt(17) +
- 17) + sqrt(34)*sqrt(-sqrt(17) + 17) + 6*sqrt(17) + 34)/32 +
- Rational(15, 32))*sqrt(-8*sqrt(2)*sqrt(sqrt(17) + 17) - sqrt(2)*sqrt(-sqrt(17) +
- 17) + sqrt(34)*sqrt(-sqrt(17) + 17) + 6*sqrt(17) + 34)/64 -
- 3*sqrt(2)*sqrt(-sqrt(17) + 17)*sqrt(sqrt(17)/32 +
- sqrt(2)*sqrt(-sqrt(17) + 17)/32 +
- sqrt(2)*sqrt(-8*sqrt(2)*sqrt(sqrt(17) + 17) - sqrt(2)*sqrt(-sqrt(17) +
- 17) + sqrt(34)*sqrt(-sqrt(17) + 17) + 6*sqrt(17) + 34)/32 + Rational(15, 32))/32
- + sqrt(34)*sqrt(sqrt(17)/32 + sqrt(2)*sqrt(-sqrt(17) + 17)/32 +
- sqrt(2)*sqrt(-8*sqrt(2)*sqrt(sqrt(17) + 17) - sqrt(2)*sqrt(-sqrt(17) +
- 17) + sqrt(34)*sqrt(-sqrt(17) + 17) + 6*sqrt(17) + 34)/32 +
- Rational(15, 32))*sqrt(-8*sqrt(2)*sqrt(sqrt(17) + 17) - sqrt(2)*sqrt(-sqrt(17) +
- 17) + sqrt(34)*sqrt(-sqrt(17) + 17) + 6*sqrt(17) + 34)/64 +
- sqrt(sqrt(17)/32 + sqrt(2)*sqrt(-sqrt(17) + 17)/32 +
- sqrt(2)*sqrt(-8*sqrt(2)*sqrt(sqrt(17) + 17) - sqrt(2)*sqrt(-sqrt(17) +
- 17) + sqrt(34)*sqrt(-sqrt(17) + 17) + 6*sqrt(17) + 34)/32 + Rational(15, 32))/2 +
- S.Half + sqrt(-sqrt(17) + 17)*sqrt(sqrt(17)/32 + sqrt(2)*sqrt(-sqrt(17) +
- 17)/32 + sqrt(2)*sqrt(-8*sqrt(2)*sqrt(sqrt(17) + 17) -
- sqrt(2)*sqrt(-sqrt(17) + 17) + sqrt(34)*sqrt(-sqrt(17) + 17) +
- 6*sqrt(17) + 34)/32 + Rational(15, 32))*sqrt(-8*sqrt(2)*sqrt(sqrt(17) + 17) -
- sqrt(2)*sqrt(-sqrt(17) + 17) + sqrt(34)*sqrt(-sqrt(17) + 17) +
- 6*sqrt(17) + 34)/32 + sqrt(34)*sqrt(-sqrt(17) + 17)*sqrt(sqrt(17)/32 +
- sqrt(2)*sqrt(-sqrt(17) + 17)/32 +
- sqrt(2)*sqrt(-8*sqrt(2)*sqrt(sqrt(17) + 17) - sqrt(2)*sqrt(-sqrt(17) +
- 17) + sqrt(34)*sqrt(-sqrt(17) + 17) + 6*sqrt(17) + 34)/32 +
- Rational(15, 32))/32)/2)
- assert e.rewrite(sqrt) == a
- assert e.n() == a.n()
- # coverage of fermatCoords: multiplicity > 1; the following could be
- # different but that portion of the code should be tested in some way
- assert cos(pi/9/17).rewrite(sqrt) == \
- sin(pi/9)*sin(pi*Rational(2, 17)) + cos(pi/9)*cos(pi*Rational(2, 17))
- @slow
- def test_sincos_rewrite_sqrt_257():
- assert cos(pi/257).rewrite(sqrt).evalf(64) == cos(pi/257).evalf(64)
- @slow
- def test_tancot_rewrite_sqrt():
- # equivalent to testing rewrite(pow)
- for p in [1, 3, 5, 17]:
- for t in [1, 8]:
- n = t*p
- for i in range(1, min((n + 1)//2 + 1, 10)):
- if 1 == gcd(i, n):
- x = i*pi/n
- if 2*i != n and 3*i != 2*n:
- t1 = tan(x).rewrite(sqrt)
- assert not t1.has(cot, tan), "fails for %d*pi/%d" % (i, n)
- assert 1e-3 > abs( tan(x.evalf(7)) - t1.evalf(4) ), "fails for %d*pi/%d" % (i, n)
- if i != 0 and i != n:
- c1 = cot(x).rewrite(sqrt)
- assert not c1.has(cot, tan), "fails for %d*pi/%d" % (i, n)
- assert 1e-3 > abs( cot(x.evalf(7)) - c1.evalf(4) ), "fails for %d*pi/%d" % (i, n)
- def test_sec():
- x = symbols('x', real=True)
- z = symbols('z')
- assert sec.nargs == FiniteSet(1)
- assert sec(zoo) is nan
- assert sec(0) == 1
- assert sec(pi) == -1
- assert sec(pi/2) is zoo
- assert sec(-pi/2) is zoo
- assert sec(pi/6) == 2*sqrt(3)/3
- assert sec(pi/3) == 2
- assert sec(pi*Rational(5, 2)) is zoo
- assert sec(pi*Rational(9, 7)) == -sec(pi*Rational(2, 7))
- assert sec(pi*Rational(3, 4)) == -sqrt(2) # issue 8421
- assert sec(I) == 1/cosh(1)
- assert sec(x*I) == 1/cosh(x)
- assert sec(-x) == sec(x)
- assert sec(asec(x)) == x
- assert sec(z).conjugate() == sec(conjugate(z))
- assert (sec(z).as_real_imag() ==
- (cos(re(z))*cosh(im(z))/(sin(re(z))**2*sinh(im(z))**2 +
- cos(re(z))**2*cosh(im(z))**2),
- sin(re(z))*sinh(im(z))/(sin(re(z))**2*sinh(im(z))**2 +
- cos(re(z))**2*cosh(im(z))**2)))
- assert sec(x).expand(trig=True) == 1/cos(x)
- assert sec(2*x).expand(trig=True) == 1/(2*cos(x)**2 - 1)
- assert sec(x).is_extended_real == True
- assert sec(z).is_real == None
- assert sec(a).is_algebraic is None
- assert sec(na).is_algebraic is False
- assert sec(x).as_leading_term() == sec(x)
- assert sec(0, evaluate=False).is_finite == True
- assert sec(x).is_finite == None
- assert sec(pi/2, evaluate=False).is_finite == False
- assert series(sec(x), x, x0=0, n=6) == 1 + x**2/2 + 5*x**4/24 + O(x**6)
- # https://github.com/sympy/sympy/issues/7166
- assert series(sqrt(sec(x))) == 1 + x**2/4 + 7*x**4/96 + O(x**6)
- # https://github.com/sympy/sympy/issues/7167
- assert (series(sqrt(sec(x)), x, x0=pi*3/2, n=4) ==
- 1/sqrt(x - pi*Rational(3, 2)) + (x - pi*Rational(3, 2))**Rational(3, 2)/12 +
- (x - pi*Rational(3, 2))**Rational(7, 2)/160 + O((x - pi*Rational(3, 2))**4, (x, pi*Rational(3, 2))))
- assert sec(x).diff(x) == tan(x)*sec(x)
- # Taylor Term checks
- assert sec(z).taylor_term(4, z) == 5*z**4/24
- assert sec(z).taylor_term(6, z) == 61*z**6/720
- assert sec(z).taylor_term(5, z) == 0
- def test_sec_rewrite():
- assert sec(x).rewrite(exp) == 1/(exp(I*x)/2 + exp(-I*x)/2)
- assert sec(x).rewrite(cos) == 1/cos(x)
- assert sec(x).rewrite(tan) == (tan(x/2)**2 + 1)/(-tan(x/2)**2 + 1)
- assert sec(x).rewrite(pow) == sec(x)
- assert sec(x).rewrite(sqrt) == sec(x)
- assert sec(z).rewrite(cot) == (cot(z/2)**2 + 1)/(cot(z/2)**2 - 1)
- assert sec(x).rewrite(sin) == 1 / sin(x + pi / 2, evaluate=False)
- assert sec(x).rewrite(tan) == (tan(x / 2)**2 + 1) / (-tan(x / 2)**2 + 1)
- assert sec(x).rewrite(csc) == csc(-x + pi/2, evaluate=False)
- def test_sec_fdiff():
- assert sec(x).fdiff() == tan(x)*sec(x)
- raises(ArgumentIndexError, lambda: sec(x).fdiff(2))
- def test_csc():
- x = symbols('x', real=True)
- z = symbols('z')
- # https://github.com/sympy/sympy/issues/6707
- cosecant = csc('x')
- alternate = 1/sin('x')
- assert cosecant.equals(alternate) == True
- assert alternate.equals(cosecant) == True
- assert csc.nargs == FiniteSet(1)
- assert csc(0) is zoo
- assert csc(pi) is zoo
- assert csc(zoo) is nan
- assert csc(pi/2) == 1
- assert csc(-pi/2) == -1
- assert csc(pi/6) == 2
- assert csc(pi/3) == 2*sqrt(3)/3
- assert csc(pi*Rational(5, 2)) == 1
- assert csc(pi*Rational(9, 7)) == -csc(pi*Rational(2, 7))
- assert csc(pi*Rational(3, 4)) == sqrt(2) # issue 8421
- assert csc(I) == -I/sinh(1)
- assert csc(x*I) == -I/sinh(x)
- assert csc(-x) == -csc(x)
- assert csc(acsc(x)) == x
- assert csc(z).conjugate() == csc(conjugate(z))
- assert (csc(z).as_real_imag() ==
- (sin(re(z))*cosh(im(z))/(sin(re(z))**2*cosh(im(z))**2 +
- cos(re(z))**2*sinh(im(z))**2),
- -cos(re(z))*sinh(im(z))/(sin(re(z))**2*cosh(im(z))**2 +
- cos(re(z))**2*sinh(im(z))**2)))
- assert csc(x).expand(trig=True) == 1/sin(x)
- assert csc(2*x).expand(trig=True) == 1/(2*sin(x)*cos(x))
- assert csc(x).is_extended_real == True
- assert csc(z).is_real == None
- assert csc(a).is_algebraic is None
- assert csc(na).is_algebraic is False
- assert csc(x).as_leading_term() == csc(x)
- assert csc(0, evaluate=False).is_finite == False
- assert csc(x).is_finite == None
- assert csc(pi/2, evaluate=False).is_finite == True
- assert series(csc(x), x, x0=pi/2, n=6) == \
- 1 + (x - pi/2)**2/2 + 5*(x - pi/2)**4/24 + O((x - pi/2)**6, (x, pi/2))
- assert series(csc(x), x, x0=0, n=6) == \
- 1/x + x/6 + 7*x**3/360 + 31*x**5/15120 + O(x**6)
- assert csc(x).diff(x) == -cot(x)*csc(x)
- assert csc(x).taylor_term(2, x) == 0
- assert csc(x).taylor_term(3, x) == 7*x**3/360
- assert csc(x).taylor_term(5, x) == 31*x**5/15120
- raises(ArgumentIndexError, lambda: csc(x).fdiff(2))
- def test_asec():
- z = Symbol('z', zero=True)
- assert asec(z) is zoo
- assert asec(nan) is nan
- assert asec(1) == 0
- assert asec(-1) == pi
- assert asec(oo) == pi/2
- assert asec(-oo) == pi/2
- assert asec(zoo) == pi/2
- assert asec(sec(pi*Rational(13, 4))) == pi*Rational(3, 4)
- assert asec(1 + sqrt(5)) == pi*Rational(2, 5)
- assert asec(2/sqrt(3)) == pi/6
- assert asec(sqrt(4 - 2*sqrt(2))) == pi/8
- assert asec(-sqrt(4 + 2*sqrt(2))) == pi*Rational(5, 8)
- assert asec(sqrt(2 + 2*sqrt(5)/5)) == pi*Rational(3, 10)
- assert asec(-sqrt(2 + 2*sqrt(5)/5)) == pi*Rational(7, 10)
- assert asec(sqrt(2) - sqrt(6)) == pi*Rational(11, 12)
- assert asec(x).diff(x) == 1/(x**2*sqrt(1 - 1/x**2))
- assert asec(x).rewrite(log) == I*log(sqrt(1 - 1/x**2) + I/x) + pi/2
- assert asec(x).rewrite(asin) == -asin(1/x) + pi/2
- assert asec(x).rewrite(acos) == acos(1/x)
- assert asec(x).rewrite(atan) == \
- pi*(1 - sqrt(x**2)/x)/2 + sqrt(x**2)*atan(sqrt(x**2 - 1))/x
- assert asec(x).rewrite(acot) == \
- pi*(1 - sqrt(x**2)/x)/2 + sqrt(x**2)*acot(1/sqrt(x**2 - 1))/x
- assert asec(x).rewrite(acsc) == -acsc(x) + pi/2
- raises(ArgumentIndexError, lambda: asec(x).fdiff(2))
- def test_asec_is_real():
- assert asec(S.Half).is_real is False
- n = Symbol('n', positive=True, integer=True)
- assert asec(n).is_extended_real is True
- assert asec(x).is_real is None
- assert asec(r).is_real is None
- t = Symbol('t', real=False, finite=True)
- assert asec(t).is_real is False
- def test_asec_leading_term():
- assert asec(1/x).as_leading_term(x) == pi/2
- # Tests concerning branch points
- assert asec(x + 1).as_leading_term(x) == sqrt(2)*sqrt(x)
- assert asec(x - 1).as_leading_term(x) == pi
- # Tests concerning points lying on branch cuts
- assert asec(x).as_leading_term(x, cdir=1) == -I*log(x) + I*log(2)
- assert asec(x).as_leading_term(x, cdir=-1) == I*log(x) + 2*pi - I*log(2)
- assert asec(I*x + 1/2).as_leading_term(x, cdir=1) == asec(1/2)
- assert asec(-I*x + 1/2).as_leading_term(x, cdir=1) == -asec(1/2)
- assert asec(I*x - 1/2).as_leading_term(x, cdir=1) == 2*pi - asec(-1/2)
- assert asec(-I*x - 1/2).as_leading_term(x, cdir=1) == asec(-1/2)
- # Tests concerning im(ndir) == 0
- assert asec(-I*x**2 + x - S(1)/2).as_leading_term(x, cdir=1) == pi + I*log(2 - sqrt(3))
- assert asec(-I*x**2 + x - S(1)/2).as_leading_term(x, cdir=-1) == pi + I*log(2 - sqrt(3))
- def test_asec_series():
- assert asec(x).series(x, 0, 9) == \
- I*log(2) - I*log(x) - I*x**2/4 - 3*I*x**4/32 \
- - 5*I*x**6/96 - 35*I*x**8/1024 + O(x**9)
- t4 = asec(x).taylor_term(4, x)
- assert t4 == -3*I*x**4/32
- assert asec(x).taylor_term(6, x, t4, 0) == -5*I*x**6/96
- def test_acsc():
- assert acsc(nan) is nan
- assert acsc(1) == pi/2
- assert acsc(-1) == -pi/2
- assert acsc(oo) == 0
- assert acsc(-oo) == 0
- assert acsc(zoo) == 0
- assert acsc(0) is zoo
- assert acsc(csc(3)) == -3 + pi
- assert acsc(csc(4)) == -4 + pi
- assert acsc(csc(6)) == 6 - 2*pi
- assert unchanged(acsc, csc(x))
- assert unchanged(acsc, sec(x))
- assert acsc(2/sqrt(3)) == pi/3
- assert acsc(csc(pi*Rational(13, 4))) == -pi/4
- assert acsc(sqrt(2 + 2*sqrt(5)/5)) == pi/5
- assert acsc(-sqrt(2 + 2*sqrt(5)/5)) == -pi/5
- assert acsc(-2) == -pi/6
- assert acsc(-sqrt(4 + 2*sqrt(2))) == -pi/8
- assert acsc(sqrt(4 - 2*sqrt(2))) == pi*Rational(3, 8)
- assert acsc(1 + sqrt(5)) == pi/10
- assert acsc(sqrt(2) - sqrt(6)) == pi*Rational(-5, 12)
- assert acsc(x).diff(x) == -1/(x**2*sqrt(1 - 1/x**2))
- assert acsc(x).rewrite(log) == -I*log(sqrt(1 - 1/x**2) + I/x)
- assert acsc(x).rewrite(asin) == asin(1/x)
- assert acsc(x).rewrite(acos) == -acos(1/x) + pi/2
- assert acsc(x).rewrite(atan) == \
- (-atan(sqrt(x**2 - 1)) + pi/2)*sqrt(x**2)/x
- assert acsc(x).rewrite(acot) == (-acot(1/sqrt(x**2 - 1)) + pi/2)*sqrt(x**2)/x
- assert acsc(x).rewrite(asec) == -asec(x) + pi/2
- raises(ArgumentIndexError, lambda: acsc(x).fdiff(2))
- def test_csc_rewrite():
- assert csc(x).rewrite(pow) == csc(x)
- assert csc(x).rewrite(sqrt) == csc(x)
- assert csc(x).rewrite(exp) == 2*I/(exp(I*x) - exp(-I*x))
- assert csc(x).rewrite(sin) == 1/sin(x)
- assert csc(x).rewrite(tan) == (tan(x/2)**2 + 1)/(2*tan(x/2))
- assert csc(x).rewrite(cot) == (cot(x/2)**2 + 1)/(2*cot(x/2))
- assert csc(x).rewrite(cos) == 1/cos(x - pi/2, evaluate=False)
- assert csc(x).rewrite(sec) == sec(-x + pi/2, evaluate=False)
- # issue 17349
- assert csc(1 - exp(-besselj(I, I))).rewrite(cos) == \
- -1/cos(-pi/2 - 1 + cos(I*besselj(I, I)) +
- I*cos(-pi/2 + I*besselj(I, I), evaluate=False), evaluate=False)
- def test_acsc_leading_term():
- assert acsc(1/x).as_leading_term(x) == x
- # Tests concerning branch points
- assert acsc(x + 1).as_leading_term(x) == pi/2
- assert acsc(x - 1).as_leading_term(x) == -pi/2
- # Tests concerning points lying on branch cuts
- assert acsc(x).as_leading_term(x, cdir=1) == I*log(x) + pi/2 - I*log(2)
- assert acsc(x).as_leading_term(x, cdir=-1) == -I*log(x) - 3*pi/2 + I*log(2)
- assert acsc(I*x + 1/2).as_leading_term(x, cdir=1) == acsc(1/2)
- assert acsc(-I*x + 1/2).as_leading_term(x, cdir=1) == pi - acsc(1/2)
- assert acsc(I*x - 1/2).as_leading_term(x, cdir=1) == -pi - acsc(-1/2)
- assert acsc(-I*x - 1/2).as_leading_term(x, cdir=1) == -acsc(1/2)
- # Tests concerning im(ndir) == 0
- assert acsc(-I*x**2 + x - S(1)/2).as_leading_term(x, cdir=1) == -pi/2 + I*log(sqrt(3) + 2)
- assert acsc(-I*x**2 + x - S(1)/2).as_leading_term(x, cdir=-1) == -pi/2 + I*log(sqrt(3) + 2)
- def test_acsc_series():
- assert acsc(x).series(x, 0, 9) == \
- -I*log(2) + pi/2 + I*log(x) + I*x**2/4 \
- + 3*I*x**4/32 + 5*I*x**6/96 + 35*I*x**8/1024 + O(x**9)
- t6 = acsc(x).taylor_term(6, x)
- assert t6 == 5*I*x**6/96
- assert acsc(x).taylor_term(8, x, t6, 0) == 35*I*x**8/1024
- def test_asin_nseries():
- assert asin(x + 2)._eval_nseries(x, 4, None, I) == -asin(2) + pi + \
- sqrt(3)*I*x/3 - sqrt(3)*I*x**2/9 + sqrt(3)*I*x**3/18 + O(x**4)
- assert asin(x + 2)._eval_nseries(x, 4, None, -I) == asin(2) - \
- sqrt(3)*I*x/3 + sqrt(3)*I*x**2/9 - sqrt(3)*I*x**3/18 + O(x**4)
- assert asin(x - 2)._eval_nseries(x, 4, None, I) == -asin(2) - \
- sqrt(3)*I*x/3 - sqrt(3)*I*x**2/9 - sqrt(3)*I*x**3/18 + O(x**4)
- assert asin(x - 2)._eval_nseries(x, 4, None, -I) == asin(2) - pi + \
- sqrt(3)*I*x/3 + sqrt(3)*I*x**2/9 + sqrt(3)*I*x**3/18 + O(x**4)
- # testing nseries for asin at branch points
- assert asin(1 + x)._eval_nseries(x, 3, None) == pi/2 - sqrt(2)*sqrt(-x) - \
- sqrt(2)*(-x)**(S(3)/2)/12 - 3*sqrt(2)*(-x)**(S(5)/2)/160 + O(x**3)
- assert asin(-1 + x)._eval_nseries(x, 3, None) == -pi/2 + sqrt(2)*sqrt(x) + \
- sqrt(2)*x**(S(3)/2)/12 + 3*sqrt(2)*x**(S(5)/2)/160 + O(x**3)
- assert asin(exp(x))._eval_nseries(x, 3, None) == pi/2 - sqrt(2)*sqrt(-x) + \
- sqrt(2)*(-x)**(S(3)/2)/6 - sqrt(2)*(-x)**(S(5)/2)/120 + O(x**3)
- assert asin(-exp(x))._eval_nseries(x, 3, None) == -pi/2 + sqrt(2)*sqrt(-x) - \
- sqrt(2)*(-x)**(S(3)/2)/6 + sqrt(2)*(-x)**(S(5)/2)/120 + O(x**3)
- def test_acos_nseries():
- assert acos(x + 2)._eval_nseries(x, 4, None, I) == -acos(2) - sqrt(3)*I*x/3 + \
- sqrt(3)*I*x**2/9 - sqrt(3)*I*x**3/18 + O(x**4)
- assert acos(x + 2)._eval_nseries(x, 4, None, -I) == acos(2) + sqrt(3)*I*x/3 - \
- sqrt(3)*I*x**2/9 + sqrt(3)*I*x**3/18 + O(x**4)
- assert acos(x - 2)._eval_nseries(x, 4, None, I) == acos(-2) + sqrt(3)*I*x/3 + \
- sqrt(3)*I*x**2/9 + sqrt(3)*I*x**3/18 + O(x**4)
- assert acos(x - 2)._eval_nseries(x, 4, None, -I) == -acos(-2) + 2*pi - \
- sqrt(3)*I*x/3 - sqrt(3)*I*x**2/9 - sqrt(3)*I*x**3/18 + O(x**4)
- # testing nseries for acos at branch points
- assert acos(1 + x)._eval_nseries(x, 3, None) == sqrt(2)*sqrt(-x) + \
- sqrt(2)*(-x)**(S(3)/2)/12 + 3*sqrt(2)*(-x)**(S(5)/2)/160 + O(x**3)
- assert acos(-1 + x)._eval_nseries(x, 3, None) == pi - sqrt(2)*sqrt(x) - \
- sqrt(2)*x**(S(3)/2)/12 - 3*sqrt(2)*x**(S(5)/2)/160 + O(x**3)
- assert acos(exp(x))._eval_nseries(x, 3, None) == sqrt(2)*sqrt(-x) - \
- sqrt(2)*(-x)**(S(3)/2)/6 + sqrt(2)*(-x)**(S(5)/2)/120 + O(x**3)
- assert acos(-exp(x))._eval_nseries(x, 3, None) == pi - sqrt(2)*sqrt(-x) + \
- sqrt(2)*(-x)**(S(3)/2)/6 - sqrt(2)*(-x)**(S(5)/2)/120 + O(x**3)
- def test_atan_nseries():
- assert atan(x + 2*I)._eval_nseries(x, 4, None, 1) == I*atanh(2) - x/3 - \
- 2*I*x**2/9 + 13*x**3/81 + O(x**4)
- assert atan(x + 2*I)._eval_nseries(x, 4, None, -1) == I*atanh(2) - pi - \
- x/3 - 2*I*x**2/9 + 13*x**3/81 + O(x**4)
- assert atan(x - 2*I)._eval_nseries(x, 4, None, 1) == -I*atanh(2) + pi - \
- x/3 + 2*I*x**2/9 + 13*x**3/81 + O(x**4)
- assert atan(x - 2*I)._eval_nseries(x, 4, None, -1) == -I*atanh(2) - x/3 + \
- 2*I*x**2/9 + 13*x**3/81 + O(x**4)
- assert atan(1/x)._eval_nseries(x, 2, None, 1) == pi/2 - x + O(x**2)
- assert atan(1/x)._eval_nseries(x, 2, None, -1) == -pi/2 - x + O(x**2)
- # testing nseries for atan at branch points
- assert atan(x + I)._eval_nseries(x, 4, None) == I*log(2)/2 + pi/4 - \
- I*log(x)/2 + x/4 + I*x**2/16 - x**3/48 + O(x**4)
- assert atan(x - I)._eval_nseries(x, 4, None) == -I*log(2)/2 + pi/4 + \
- I*log(x)/2 + x/4 - I*x**2/16 - x**3/48 + O(x**4)
- def test_acot_nseries():
- assert acot(x + S(1)/2*I)._eval_nseries(x, 4, None, 1) == -I*acoth(S(1)/2) + \
- pi - 4*x/3 + 8*I*x**2/9 + 112*x**3/81 + O(x**4)
- assert acot(x + S(1)/2*I)._eval_nseries(x, 4, None, -1) == -I*acoth(S(1)/2) - \
- 4*x/3 + 8*I*x**2/9 + 112*x**3/81 + O(x**4)
- assert acot(x - S(1)/2*I)._eval_nseries(x, 4, None, 1) == I*acoth(S(1)/2) - \
- 4*x/3 - 8*I*x**2/9 + 112*x**3/81 + O(x**4)
- assert acot(x - S(1)/2*I)._eval_nseries(x, 4, None, -1) == I*acoth(S(1)/2) - \
- pi - 4*x/3 - 8*I*x**2/9 + 112*x**3/81 + O(x**4)
- assert acot(x)._eval_nseries(x, 2, None, 1) == pi/2 - x + O(x**2)
- assert acot(x)._eval_nseries(x, 2, None, -1) == -pi/2 - x + O(x**2)
- # testing nseries for acot at branch points
- assert acot(x + I)._eval_nseries(x, 4, None) == -I*log(2)/2 + pi/4 + \
- I*log(x)/2 - x/4 - I*x**2/16 + x**3/48 + O(x**4)
- assert acot(x - I)._eval_nseries(x, 4, None) == I*log(2)/2 + pi/4 - \
- I*log(x)/2 - x/4 + I*x**2/16 + x**3/48 + O(x**4)
- def test_asec_nseries():
- assert asec(x + S(1)/2)._eval_nseries(x, 4, None, I) == asec(S(1)/2) - \
- 4*sqrt(3)*I*x/3 + 8*sqrt(3)*I*x**2/9 - 16*sqrt(3)*I*x**3/9 + O(x**4)
- assert asec(x + S(1)/2)._eval_nseries(x, 4, None, -I) == -asec(S(1)/2) + \
- 4*sqrt(3)*I*x/3 - 8*sqrt(3)*I*x**2/9 + 16*sqrt(3)*I*x**3/9 + O(x**4)
- assert asec(x - S(1)/2)._eval_nseries(x, 4, None, I) == -asec(-S(1)/2) + \
- 2*pi + 4*sqrt(3)*I*x/3 + 8*sqrt(3)*I*x**2/9 + 16*sqrt(3)*I*x**3/9 + O(x**4)
- assert asec(x - S(1)/2)._eval_nseries(x, 4, None, -I) == asec(-S(1)/2) - \
- 4*sqrt(3)*I*x/3 - 8*sqrt(3)*I*x**2/9 - 16*sqrt(3)*I*x**3/9 + O(x**4)
- # testing nseries for asec at branch points
- assert asec(1 + x)._eval_nseries(x, 3, None) == sqrt(2)*sqrt(x) - \
- 5*sqrt(2)*x**(S(3)/2)/12 + 43*sqrt(2)*x**(S(5)/2)/160 + O(x**3)
- assert asec(-1 + x)._eval_nseries(x, 3, None) == pi - sqrt(2)*sqrt(-x) + \
- 5*sqrt(2)*(-x)**(S(3)/2)/12 - 43*sqrt(2)*(-x)**(S(5)/2)/160 + O(x**3)
- assert asec(exp(x))._eval_nseries(x, 3, None) == sqrt(2)*sqrt(x) - \
- sqrt(2)*x**(S(3)/2)/6 + sqrt(2)*x**(S(5)/2)/120 + O(x**3)
- assert asec(-exp(x))._eval_nseries(x, 3, None) == pi - sqrt(2)*sqrt(x) + \
- sqrt(2)*x**(S(3)/2)/6 - sqrt(2)*x**(S(5)/2)/120 + O(x**3)
- def test_acsc_nseries():
- assert acsc(x + S(1)/2)._eval_nseries(x, 4, None, I) == acsc(S(1)/2) + \
- 4*sqrt(3)*I*x/3 - 8*sqrt(3)*I*x**2/9 + 16*sqrt(3)*I*x**3/9 + O(x**4)
- assert acsc(x + S(1)/2)._eval_nseries(x, 4, None, -I) == -acsc(S(1)/2) + \
- pi - 4*sqrt(3)*I*x/3 + 8*sqrt(3)*I*x**2/9 - 16*sqrt(3)*I*x**3/9 + O(x**4)
- assert acsc(x - S(1)/2)._eval_nseries(x, 4, None, I) == acsc(S(1)/2) - pi -\
- 4*sqrt(3)*I*x/3 - 8*sqrt(3)*I*x**2/9 - 16*sqrt(3)*I*x**3/9 + O(x**4)
- assert acsc(x - S(1)/2)._eval_nseries(x, 4, None, -I) == -acsc(S(1)/2) + \
- 4*sqrt(3)*I*x/3 + 8*sqrt(3)*I*x**2/9 + 16*sqrt(3)*I*x**3/9 + O(x**4)
- # testing nseries for acsc at branch points
- assert acsc(1 + x)._eval_nseries(x, 3, None) == pi/2 - sqrt(2)*sqrt(x) + \
- 5*sqrt(2)*x**(S(3)/2)/12 - 43*sqrt(2)*x**(S(5)/2)/160 + O(x**3)
- assert acsc(-1 + x)._eval_nseries(x, 3, None) == -pi/2 + sqrt(2)*sqrt(-x) - \
- 5*sqrt(2)*(-x)**(S(3)/2)/12 + 43*sqrt(2)*(-x)**(S(5)/2)/160 + O(x**3)
- assert acsc(exp(x))._eval_nseries(x, 3, None) == pi/2 - sqrt(2)*sqrt(x) + \
- sqrt(2)*x**(S(3)/2)/6 - sqrt(2)*x**(S(5)/2)/120 + O(x**3)
- assert acsc(-exp(x))._eval_nseries(x, 3, None) == -pi/2 + sqrt(2)*sqrt(x) - \
- sqrt(2)*x**(S(3)/2)/6 + sqrt(2)*x**(S(5)/2)/120 + O(x**3)
- def test_issue_8653():
- n = Symbol('n', integer=True)
- assert sin(n).is_irrational is None
- assert cos(n).is_irrational is None
- assert tan(n).is_irrational is None
- def test_issue_9157():
- n = Symbol('n', integer=True, positive=True)
- assert atan(n - 1).is_nonnegative is True
- def test_trig_period():
- x, y = symbols('x, y')
- assert sin(x).period() == 2*pi
- assert cos(x).period() == 2*pi
- assert tan(x).period() == pi
- assert cot(x).period() == pi
- assert sec(x).period() == 2*pi
- assert csc(x).period() == 2*pi
- assert sin(2*x).period() == pi
- assert cot(4*x - 6).period() == pi/4
- assert cos((-3)*x).period() == pi*Rational(2, 3)
- assert cos(x*y).period(x) == 2*pi/abs(y)
- assert sin(3*x*y + 2*pi).period(y) == 2*pi/abs(3*x)
- assert tan(3*x).period(y) is S.Zero
- raises(NotImplementedError, lambda: sin(x**2).period(x))
- def test_issue_7171():
- assert sin(x).rewrite(sqrt) == sin(x)
- assert sin(x).rewrite(pow) == sin(x)
- def test_issue_11864():
- w, k = symbols('w, k', real=True)
- F = Piecewise((1, Eq(2*pi*k, 0)), (sin(pi*k)/(pi*k), True))
- soln = Piecewise((1, Eq(2*pi*k, 0)), (sinc(pi*k), True))
- assert F.rewrite(sinc) == soln
- def test_real_assumptions():
- z = Symbol('z', real=False, finite=True)
- assert sin(z).is_real is None
- assert cos(z).is_real is None
- assert tan(z).is_real is False
- assert sec(z).is_real is None
- assert csc(z).is_real is None
- assert cot(z).is_real is False
- assert asin(p).is_real is None
- assert asin(n).is_real is None
- assert asec(p).is_real is None
- assert asec(n).is_real is None
- assert acos(p).is_real is None
- assert acos(n).is_real is None
- assert acsc(p).is_real is None
- assert acsc(n).is_real is None
- assert atan(p).is_positive is True
- assert atan(n).is_negative is True
- assert acot(p).is_positive is True
- assert acot(n).is_negative is True
- def test_issue_14320():
- assert asin(sin(2)) == -2 + pi and (-pi/2 <= -2 + pi <= pi/2) and sin(2) == sin(-2 + pi)
- assert asin(cos(2)) == -2 + pi/2 and (-pi/2 <= -2 + pi/2 <= pi/2) and cos(2) == sin(-2 + pi/2)
- assert acos(sin(2)) == -pi/2 + 2 and (0 <= -pi/2 + 2 <= pi) and sin(2) == cos(-pi/2 + 2)
- assert acos(cos(20)) == -6*pi + 20 and (0 <= -6*pi + 20 <= pi) and cos(20) == cos(-6*pi + 20)
- assert acos(cos(30)) == -30 + 10*pi and (0 <= -30 + 10*pi <= pi) and cos(30) == cos(-30 + 10*pi)
- assert atan(tan(17)) == -5*pi + 17 and (-pi/2 < -5*pi + 17 < pi/2) and tan(17) == tan(-5*pi + 17)
- assert atan(tan(15)) == -5*pi + 15 and (-pi/2 < -5*pi + 15 < pi/2) and tan(15) == tan(-5*pi + 15)
- assert atan(cot(12)) == -12 + pi*Rational(7, 2) and (-pi/2 < -12 + pi*Rational(7, 2) < pi/2) and cot(12) == tan(-12 + pi*Rational(7, 2))
- assert acot(cot(15)) == -5*pi + 15 and (-pi/2 < -5*pi + 15 <= pi/2) and cot(15) == cot(-5*pi + 15)
- assert acot(tan(19)) == -19 + pi*Rational(13, 2) and (-pi/2 < -19 + pi*Rational(13, 2) <= pi/2) and tan(19) == cot(-19 + pi*Rational(13, 2))
- assert asec(sec(11)) == -11 + 4*pi and (0 <= -11 + 4*pi <= pi) and cos(11) == cos(-11 + 4*pi)
- assert asec(csc(13)) == -13 + pi*Rational(9, 2) and (0 <= -13 + pi*Rational(9, 2) <= pi) and sin(13) == cos(-13 + pi*Rational(9, 2))
- assert acsc(csc(14)) == -4*pi + 14 and (-pi/2 <= -4*pi + 14 <= pi/2) and sin(14) == sin(-4*pi + 14)
- assert acsc(sec(10)) == pi*Rational(-7, 2) + 10 and (-pi/2 <= pi*Rational(-7, 2) + 10 <= pi/2) and cos(10) == sin(pi*Rational(-7, 2) + 10)
- def test_issue_14543():
- assert sec(2*pi + 11) == sec(11)
- assert sec(2*pi - 11) == sec(11)
- assert sec(pi + 11) == -sec(11)
- assert sec(pi - 11) == -sec(11)
- assert csc(2*pi + 17) == csc(17)
- assert csc(2*pi - 17) == -csc(17)
- assert csc(pi + 17) == -csc(17)
- assert csc(pi - 17) == csc(17)
- x = Symbol('x')
- assert csc(pi/2 + x) == sec(x)
- assert csc(pi/2 - x) == sec(x)
- assert csc(pi*Rational(3, 2) + x) == -sec(x)
- assert csc(pi*Rational(3, 2) - x) == -sec(x)
- assert sec(pi/2 - x) == csc(x)
- assert sec(pi/2 + x) == -csc(x)
- assert sec(pi*Rational(3, 2) + x) == csc(x)
- assert sec(pi*Rational(3, 2) - x) == -csc(x)
- def test_as_real_imag():
- # This is for https://github.com/sympy/sympy/issues/17142
- # If it start failing again in irrelevant builds or in the master
- # please open up the issue again.
- expr = atan(I/(I + I*tan(1)))
- assert expr.as_real_imag() == (expr, 0)
- def test_issue_18746():
- e3 = cos(S.Pi*(x/4 + 1/4))
- assert e3.period() == 8
|