123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099 |
- """ Tests from Michael Wester's 1999 paper "Review of CAS mathematical
- capabilities".
- http://www.math.unm.edu/~wester/cas/book/Wester.pdf
- See also http://math.unm.edu/~wester/cas_review.html for detailed output of
- each tested system.
- """
- from sympy.assumptions.ask import Q, ask
- from sympy.assumptions.refine import refine
- from sympy.concrete.products import product
- from sympy.core import EulerGamma
- from sympy.core.evalf import N
- from sympy.core.function import (Derivative, Function, Lambda, Subs,
- diff, expand, expand_func)
- from sympy.core.mul import Mul
- from sympy.core.numbers import (AlgebraicNumber, E, I, Rational, igcd,
- nan, oo, pi, zoo)
- from sympy.core.relational import Eq, Lt
- from sympy.core.singleton import S
- from sympy.core.symbol import Dummy, Symbol, symbols
- from sympy.functions.combinatorial.factorials import (rf, binomial,
- factorial, factorial2)
- from sympy.functions.combinatorial.numbers import bernoulli, fibonacci
- from sympy.functions.elementary.complexes import (conjugate, im, re,
- sign)
- from sympy.functions.elementary.exponential import LambertW, exp, log
- from sympy.functions.elementary.hyperbolic import (asinh, cosh, sinh,
- tanh)
- from sympy.functions.elementary.integers import ceiling, floor
- from sympy.functions.elementary.miscellaneous import Max, Min, sqrt
- from sympy.functions.elementary.piecewise import Piecewise
- from sympy.functions.elementary.trigonometric import (acos, acot, asin,
- atan, cos, cot, csc, sec, sin, tan)
- from sympy.functions.special.bessel import besselj
- from sympy.functions.special.delta_functions import DiracDelta
- from sympy.functions.special.elliptic_integrals import (elliptic_e,
- elliptic_f)
- from sympy.functions.special.gamma_functions import gamma, polygamma
- from sympy.functions.special.hyper import hyper
- from sympy.functions.special.polynomials import (assoc_legendre,
- chebyshevt)
- from sympy.functions.special.zeta_functions import polylog
- from sympy.geometry.util import idiff
- from sympy.logic.boolalg import And
- from sympy.matrices.dense import hessian, wronskian
- from sympy.matrices.expressions.matmul import MatMul
- from sympy.ntheory.continued_fraction import (
- continued_fraction_convergents as cf_c,
- continued_fraction_iterator as cf_i, continued_fraction_periodic as
- cf_p, continued_fraction_reduce as cf_r)
- from sympy.ntheory.factor_ import factorint, totient
- from sympy.ntheory.generate import primerange
- from sympy.ntheory.partitions_ import npartitions
- from sympy.polys.domains.integerring import ZZ
- from sympy.polys.orthopolys import legendre_poly
- from sympy.polys.partfrac import apart
- from sympy.polys.polytools import Poly, factor, gcd, resultant
- from sympy.series.limits import limit
- from sympy.series.order import O
- from sympy.series.residues import residue
- from sympy.series.series import series
- from sympy.sets.fancysets import ImageSet
- from sympy.sets.sets import FiniteSet, Intersection, Interval, Union
- from sympy.simplify.combsimp import combsimp
- from sympy.simplify.hyperexpand import hyperexpand
- from sympy.simplify.powsimp import powdenest, powsimp
- from sympy.simplify.radsimp import radsimp
- from sympy.simplify.simplify import logcombine, simplify
- from sympy.simplify.sqrtdenest import sqrtdenest
- from sympy.simplify.trigsimp import trigsimp
- from sympy.solvers.solvers import solve
- import mpmath
- from sympy.functions.combinatorial.numbers import stirling
- from sympy.functions.special.delta_functions import Heaviside
- from sympy.functions.special.error_functions import Ci, Si, erf
- from sympy.functions.special.zeta_functions import zeta
- from sympy.testing.pytest import (XFAIL, slow, SKIP, skip, ON_CI,
- raises)
- from sympy.utilities.iterables import partitions
- from mpmath import mpi, mpc
- from sympy.matrices import Matrix, GramSchmidt, eye
- from sympy.matrices.expressions.blockmatrix import BlockMatrix, block_collapse
- from sympy.matrices.expressions import MatrixSymbol, ZeroMatrix
- from sympy.physics.quantum import Commutator
- from sympy.polys.rings import PolyRing
- from sympy.polys.fields import FracField
- from sympy.polys.solvers import solve_lin_sys
- from sympy.concrete import Sum
- from sympy.concrete.products import Product
- from sympy.integrals import integrate
- from sympy.integrals.transforms import laplace_transform,\
- inverse_laplace_transform, LaplaceTransform, fourier_transform,\
- mellin_transform
- from sympy.solvers.recurr import rsolve
- from sympy.solvers.solveset import solveset, solveset_real, linsolve
- from sympy.solvers.ode import dsolve
- from sympy.core.relational import Equality
- from itertools import islice, takewhile
- from sympy.series.formal import fps
- from sympy.series.fourier import fourier_series
- from sympy.calculus.util import minimum
- EmptySet = S.EmptySet
- R = Rational
- x, y, z = symbols('x y z')
- i, j, k, l, m, n = symbols('i j k l m n', integer=True)
- f = Function('f')
- g = Function('g')
- # A. Boolean Logic and Quantifier Elimination
- # Not implemented.
- # B. Set Theory
- def test_B1():
- assert (FiniteSet(i, j, j, k, k, k) | FiniteSet(l, k, j) |
- FiniteSet(j, m, j)) == FiniteSet(i, j, k, l, m)
- def test_B2():
- assert (FiniteSet(i, j, j, k, k, k) & FiniteSet(l, k, j) &
- FiniteSet(j, m, j)) == Intersection({j, m}, {i, j, k}, {j, k, l})
- # Previous output below. Not sure why that should be the expected output.
- # There should probably be a way to rewrite Intersections that way but I
- # don't see why an Intersection should evaluate like that:
- #
- # == Union({j}, Intersection({m}, Union({j, k}, Intersection({i}, {l}))))
- def test_B3():
- assert (FiniteSet(i, j, k, l, m) - FiniteSet(j) ==
- FiniteSet(i, k, l, m))
- def test_B4():
- assert (FiniteSet(*(FiniteSet(i, j)*FiniteSet(k, l))) ==
- FiniteSet((i, k), (i, l), (j, k), (j, l)))
- # C. Numbers
- def test_C1():
- assert (factorial(50) ==
- 30414093201713378043612608166064768844377641568960512000000000000)
- def test_C2():
- assert (factorint(factorial(50)) == {2: 47, 3: 22, 5: 12, 7: 8,
- 11: 4, 13: 3, 17: 2, 19: 2, 23: 2, 29: 1, 31: 1, 37: 1,
- 41: 1, 43: 1, 47: 1})
- def test_C3():
- assert (factorial2(10), factorial2(9)) == (3840, 945)
- # Base conversions; not really implemented by SymPy
- # Whatever. Take credit!
- def test_C4():
- assert 0xABC == 2748
- def test_C5():
- assert 123 == int('234', 7)
- def test_C6():
- assert int('677', 8) == int('1BF', 16) == 447
- def test_C7():
- assert log(32768, 8) == 5
- def test_C8():
- # Modular multiplicative inverse. Would be nice if divmod could do this.
- assert ZZ.invert(5, 7) == 3
- assert ZZ.invert(5, 6) == 5
- def test_C9():
- assert igcd(igcd(1776, 1554), 5698) == 74
- def test_C10():
- x = 0
- for n in range(2, 11):
- x += R(1, n)
- assert x == R(4861, 2520)
- def test_C11():
- assert R(1, 7) == S('0.[142857]')
- def test_C12():
- assert R(7, 11) * R(22, 7) == 2
- def test_C13():
- test = R(10, 7) * (1 + R(29, 1000)) ** R(1, 3)
- good = 3 ** R(1, 3)
- assert test == good
- def test_C14():
- assert sqrtdenest(sqrt(2*sqrt(3) + 4)) == 1 + sqrt(3)
- def test_C15():
- test = sqrtdenest(sqrt(14 + 3*sqrt(3 + 2*sqrt(5 - 12*sqrt(3 - 2*sqrt(2))))))
- good = sqrt(2) + 3
- assert test == good
- def test_C16():
- test = sqrtdenest(sqrt(10 + 2*sqrt(6) + 2*sqrt(10) + 2*sqrt(15)))
- good = sqrt(2) + sqrt(3) + sqrt(5)
- assert test == good
- def test_C17():
- test = radsimp((sqrt(3) + sqrt(2)) / (sqrt(3) - sqrt(2)))
- good = 5 + 2*sqrt(6)
- assert test == good
- def test_C18():
- assert simplify((sqrt(-2 + sqrt(-5)) * sqrt(-2 - sqrt(-5))).expand(complex=True)) == 3
- @XFAIL
- def test_C19():
- assert radsimp(simplify((90 + 34*sqrt(7)) ** R(1, 3))) == 3 + sqrt(7)
- def test_C20():
- inside = (135 + 78*sqrt(3))
- test = AlgebraicNumber((inside**R(2, 3) + 3) * sqrt(3) / inside**R(1, 3))
- assert simplify(test) == AlgebraicNumber(12)
- def test_C21():
- assert simplify(AlgebraicNumber((41 + 29*sqrt(2)) ** R(1, 5))) == \
- AlgebraicNumber(1 + sqrt(2))
- @XFAIL
- def test_C22():
- test = simplify(((6 - 4*sqrt(2))*log(3 - 2*sqrt(2)) + (3 - 2*sqrt(2))*log(17
- - 12*sqrt(2)) + 32 - 24*sqrt(2)) / (48*sqrt(2) - 72))
- good = sqrt(2)/3 - log(sqrt(2) - 1)/3
- assert test == good
- def test_C23():
- assert 2 * oo - 3 is oo
- @XFAIL
- def test_C24():
- raise NotImplementedError("2**aleph_null == aleph_1")
- # D. Numerical Analysis
- def test_D1():
- assert 0.0 / sqrt(2) == 0.0
- def test_D2():
- assert str(exp(-1000000).evalf()) == '3.29683147808856e-434295'
- def test_D3():
- assert exp(pi*sqrt(163)).evalf(50).num.ae(262537412640768744)
- def test_D4():
- assert floor(R(-5, 3)) == -2
- assert ceiling(R(-5, 3)) == -1
- @XFAIL
- def test_D5():
- raise NotImplementedError("cubic_spline([1, 2, 4, 5], [1, 4, 2, 3], x)(3) == 27/8")
- @XFAIL
- def test_D6():
- raise NotImplementedError("translate sum(a[i]*x**i, (i,1,n)) to FORTRAN")
- @XFAIL
- def test_D7():
- raise NotImplementedError("translate sum(a[i]*x**i, (i,1,n)) to C")
- @XFAIL
- def test_D8():
- # One way is to cheat by converting the sum to a string,
- # and replacing the '[' and ']' with ''.
- # E.g., horner(S(str(_).replace('[','').replace(']','')))
- raise NotImplementedError("apply Horner's rule to sum(a[i]*x**i, (i,1,5))")
- @XFAIL
- def test_D9():
- raise NotImplementedError("translate D8 to FORTRAN")
- @XFAIL
- def test_D10():
- raise NotImplementedError("translate D8 to C")
- @XFAIL
- def test_D11():
- #Is there a way to use count_ops?
- raise NotImplementedError("flops(sum(product(f[i][k], (i,1,k)), (k,1,n)))")
- @XFAIL
- def test_D12():
- assert (mpi(-4, 2) * x + mpi(1, 3)) ** 2 == mpi(-8, 16)*x**2 + mpi(-24, 12)*x + mpi(1, 9)
- @XFAIL
- def test_D13():
- raise NotImplementedError("discretize a PDE: diff(f(x,t),t) == diff(diff(f(x,t),x),x)")
- # E. Statistics
- # See scipy; all of this is numerical.
- # F. Combinatorial Theory.
- def test_F1():
- assert rf(x, 3) == x*(1 + x)*(2 + x)
- def test_F2():
- assert expand_func(binomial(n, 3)) == n*(n - 1)*(n - 2)/6
- @XFAIL
- def test_F3():
- assert combsimp(2**n * factorial(n) * factorial2(2*n - 1)) == factorial(2*n)
- @XFAIL
- def test_F4():
- assert combsimp(2**n * factorial(n) * product(2*k - 1, (k, 1, n))) == factorial(2*n)
- @XFAIL
- def test_F5():
- assert gamma(n + R(1, 2)) / sqrt(pi) / factorial(n) == factorial(2*n)/2**(2*n)/factorial(n)**2
- def test_F6():
- partTest = [p.copy() for p in partitions(4)]
- partDesired = [{4: 1}, {1: 1, 3: 1}, {2: 2}, {1: 2, 2:1}, {1: 4}]
- assert partTest == partDesired
- def test_F7():
- assert npartitions(4) == 5
- def test_F8():
- assert stirling(5, 2, signed=True) == -50 # if signed, then kind=1
- def test_F9():
- assert totient(1776) == 576
- # G. Number Theory
- def test_G1():
- assert list(primerange(999983, 1000004)) == [999983, 1000003]
- @XFAIL
- def test_G2():
- raise NotImplementedError("find the primitive root of 191 == 19")
- @XFAIL
- def test_G3():
- raise NotImplementedError("(a+b)**p mod p == a**p + b**p mod p; p prime")
- # ... G14 Modular equations are not implemented.
- def test_G15():
- assert Rational(sqrt(3).evalf()).limit_denominator(15) == R(26, 15)
- assert list(takewhile(lambda x: x.q <= 15, cf_c(cf_i(sqrt(3)))))[-1] == \
- R(26, 15)
- def test_G16():
- assert list(islice(cf_i(pi),10)) == [3, 7, 15, 1, 292, 1, 1, 1, 2, 1]
- def test_G17():
- assert cf_p(0, 1, 23) == [4, [1, 3, 1, 8]]
- def test_G18():
- assert cf_p(1, 2, 5) == [[1]]
- assert cf_r([[1]]).expand() == S.Half + sqrt(5)/2
- @XFAIL
- def test_G19():
- s = symbols('s', integer=True, positive=True)
- it = cf_i((exp(1/s) - 1)/(exp(1/s) + 1))
- assert list(islice(it, 5)) == [0, 2*s, 6*s, 10*s, 14*s]
- def test_G20():
- s = symbols('s', integer=True, positive=True)
- # Wester erroneously has this as -s + sqrt(s**2 + 1)
- assert cf_r([[2*s]]) == s + sqrt(s**2 + 1)
- @XFAIL
- def test_G20b():
- s = symbols('s', integer=True, positive=True)
- assert cf_p(s, 1, s**2 + 1) == [[2*s]]
- # H. Algebra
- def test_H1():
- assert simplify(2*2**n) == simplify(2**(n + 1))
- assert powdenest(2*2**n) == simplify(2**(n + 1))
- def test_H2():
- assert powsimp(4 * 2**n) == 2**(n + 2)
- def test_H3():
- assert (-1)**(n*(n + 1)) == 1
- def test_H4():
- expr = factor(6*x - 10)
- assert type(expr) is Mul
- assert expr.args[0] == 2
- assert expr.args[1] == 3*x - 5
- p1 = 64*x**34 - 21*x**47 - 126*x**8 - 46*x**5 - 16*x**60 - 81
- p2 = 72*x**60 - 25*x**25 - 19*x**23 - 22*x**39 - 83*x**52 + 54*x**10 + 81
- q = 34*x**19 - 25*x**16 + 70*x**7 + 20*x**3 - 91*x - 86
- def test_H5():
- assert gcd(p1, p2, x) == 1
- def test_H6():
- assert gcd(expand(p1 * q), expand(p2 * q)) == q
- def test_H7():
- p1 = 24*x*y**19*z**8 - 47*x**17*y**5*z**8 + 6*x**15*y**9*z**2 - 3*x**22 + 5
- p2 = 34*x**5*y**8*z**13 + 20*x**7*y**7*z**7 + 12*x**9*y**16*z**4 + 80*y**14*z
- assert gcd(p1, p2, x, y, z) == 1
- def test_H8():
- p1 = 24*x*y**19*z**8 - 47*x**17*y**5*z**8 + 6*x**15*y**9*z**2 - 3*x**22 + 5
- p2 = 34*x**5*y**8*z**13 + 20*x**7*y**7*z**7 + 12*x**9*y**16*z**4 + 80*y**14*z
- q = 11*x**12*y**7*z**13 - 23*x**2*y**8*z**10 + 47*x**17*y**5*z**8
- assert gcd(p1 * q, p2 * q, x, y, z) == q
- def test_H9():
- x = Symbol('x', zero=False)
- p1 = 2*x**(n + 4) - x**(n + 2)
- p2 = 4*x**(n + 1) + 3*x**n
- assert gcd(p1, p2) == x**n
- def test_H10():
- p1 = 3*x**4 + 3*x**3 + x**2 - x - 2
- p2 = x**3 - 3*x**2 + x + 5
- assert resultant(p1, p2, x) == 0
- def test_H11():
- assert resultant(p1 * q, p2 * q, x) == 0
- def test_H12():
- num = x**2 - 4
- den = x**2 + 4*x + 4
- assert simplify(num/den) == (x - 2)/(x + 2)
- @XFAIL
- def test_H13():
- assert simplify((exp(x) - 1) / (exp(x/2) + 1)) == exp(x/2) - 1
- def test_H14():
- p = (x + 1) ** 20
- ep = expand(p)
- assert ep == (1 + 20*x + 190*x**2 + 1140*x**3 + 4845*x**4 + 15504*x**5
- + 38760*x**6 + 77520*x**7 + 125970*x**8 + 167960*x**9 + 184756*x**10
- + 167960*x**11 + 125970*x**12 + 77520*x**13 + 38760*x**14 + 15504*x**15
- + 4845*x**16 + 1140*x**17 + 190*x**18 + 20*x**19 + x**20)
- dep = diff(ep, x)
- assert dep == (20 + 380*x + 3420*x**2 + 19380*x**3 + 77520*x**4
- + 232560*x**5 + 542640*x**6 + 1007760*x**7 + 1511640*x**8 + 1847560*x**9
- + 1847560*x**10 + 1511640*x**11 + 1007760*x**12 + 542640*x**13
- + 232560*x**14 + 77520*x**15 + 19380*x**16 + 3420*x**17 + 380*x**18
- + 20*x**19)
- assert factor(dep) == 20*(1 + x)**19
- def test_H15():
- assert simplify(Mul(*[x - r for r in solveset(x**3 + x**2 - 7)])) == x**3 + x**2 - 7
- def test_H16():
- assert factor(x**100 - 1) == ((x - 1)*(x + 1)*(x**2 + 1)*(x**4 - x**3
- + x**2 - x + 1)*(x**4 + x**3 + x**2 + x + 1)*(x**8 - x**6 + x**4
- - x**2 + 1)*(x**20 - x**15 + x**10 - x**5 + 1)*(x**20 + x**15 + x**10
- + x**5 + 1)*(x**40 - x**30 + x**20 - x**10 + 1))
- def test_H17():
- assert simplify(factor(expand(p1 * p2)) - p1*p2) == 0
- @XFAIL
- def test_H18():
- # Factor over complex rationals.
- test = factor(4*x**4 + 8*x**3 + 77*x**2 + 18*x + 153)
- good = (2*x + 3*I)*(2*x - 3*I)*(x + 1 - 4*I)*(x + 1 + 4*I)
- assert test == good
- def test_H19():
- a = symbols('a')
- # The idea is to let a**2 == 2, then solve 1/(a-1). Answer is a+1")
- assert Poly(a - 1).invert(Poly(a**2 - 2)) == a + 1
- @XFAIL
- def test_H20():
- raise NotImplementedError("let a**2==2; (x**3 + (a-2)*x**2 - "
- + "(2*a+3)*x - 3*a) / (x**2-2) = (x**2 - 2*x - 3) / (x-a)")
- @XFAIL
- def test_H21():
- raise NotImplementedError("evaluate (b+c)**4 assuming b**3==2, c**2==3. \
- Answer is 2*b + 8*c + 18*b**2 + 12*b*c + 9")
- def test_H22():
- assert factor(x**4 - 3*x**2 + 1, modulus=5) == (x - 2)**2 * (x + 2)**2
- def test_H23():
- f = x**11 + x + 1
- g = (x**2 + x + 1) * (x**9 - x**8 + x**6 - x**5 + x**3 - x**2 + 1)
- assert factor(f, modulus=65537) == g
- def test_H24():
- phi = AlgebraicNumber(S.GoldenRatio.expand(func=True), alias='phi')
- assert factor(x**4 - 3*x**2 + 1, extension=phi) == \
- (x - phi)*(x + 1 - phi)*(x - 1 + phi)*(x + phi)
- def test_H25():
- e = (x - 2*y**2 + 3*z**3) ** 20
- assert factor(expand(e)) == e
- def test_H26():
- g = expand((sin(x) - 2*cos(y)**2 + 3*tan(z)**3)**20)
- assert factor(g, expand=False) == (-sin(x) + 2*cos(y)**2 - 3*tan(z)**3)**20
- def test_H27():
- f = 24*x*y**19*z**8 - 47*x**17*y**5*z**8 + 6*x**15*y**9*z**2 - 3*x**22 + 5
- g = 34*x**5*y**8*z**13 + 20*x**7*y**7*z**7 + 12*x**9*y**16*z**4 + 80*y**14*z
- h = -2*z*y**7 \
- *(6*x**9*y**9*z**3 + 10*x**7*z**6 + 17*y*x**5*z**12 + 40*y**7) \
- *(3*x**22 + 47*x**17*y**5*z**8 - 6*x**15*y**9*z**2 - 24*x*y**19*z**8 - 5)
- assert factor(expand(f*g)) == h
- @XFAIL
- def test_H28():
- raise NotImplementedError("expand ((1 - c**2)**5 * (1 - s**2)**5 * "
- + "(c**2 + s**2)**10) with c**2 + s**2 = 1. Answer is c**10*s**10.")
- @XFAIL
- def test_H29():
- assert factor(4*x**2 - 21*x*y + 20*y**2, modulus=3) == (x + y)*(x - y)
- def test_H30():
- test = factor(x**3 + y**3, extension=sqrt(-3))
- answer = (x + y)*(x + y*(-R(1, 2) - sqrt(3)/2*I))*(x + y*(-R(1, 2) + sqrt(3)/2*I))
- assert answer == test
- def test_H31():
- f = (x**2 + 2*x + 3)/(x**3 + 4*x**2 + 5*x + 2)
- g = 2 / (x + 1)**2 - 2 / (x + 1) + 3 / (x + 2)
- assert apart(f) == g
- @XFAIL
- def test_H32(): # issue 6558
- raise NotImplementedError("[A*B*C - (A*B*C)**(-1)]*A*C*B (product \
- of a non-commuting product and its inverse)")
- def test_H33():
- A, B, C = symbols('A, B, C', commutative=False)
- assert (Commutator(A, Commutator(B, C))
- + Commutator(B, Commutator(C, A))
- + Commutator(C, Commutator(A, B))).doit().expand() == 0
- # I. Trigonometry
- def test_I1():
- assert tan(pi*R(7, 10)) == -sqrt(1 + 2/sqrt(5))
- @XFAIL
- def test_I2():
- assert sqrt((1 + cos(6))/2) == -cos(3)
- def test_I3():
- assert cos(n*pi) + sin((4*n - 1)*pi/2) == (-1)**n - 1
- def test_I4():
- assert refine(cos(pi*cos(n*pi)) + sin(pi/2*cos(n*pi)), Q.integer(n)) == (-1)**n - 1
- @XFAIL
- def test_I5():
- assert sin((n**5/5 + n**4/2 + n**3/3 - n/30) * pi) == 0
- @XFAIL
- def test_I6():
- raise NotImplementedError("assuming -3*pi<x<-5*pi/2, abs(cos(x)) == -cos(x), abs(sin(x)) == -sin(x)")
- @XFAIL
- def test_I7():
- assert cos(3*x)/cos(x) == cos(x)**2 - 3*sin(x)**2
- @XFAIL
- def test_I8():
- assert cos(3*x)/cos(x) == 2*cos(2*x) - 1
- @XFAIL
- def test_I9():
- # Supposed to do this with rewrite rules.
- assert cos(3*x)/cos(x) == cos(x)**2 - 3*sin(x)**2
- def test_I10():
- assert trigsimp((tan(x)**2 + 1 - cos(x)**-2) / (sin(x)**2 + cos(x)**2 - 1)) is nan
- @SKIP("hangs")
- @XFAIL
- def test_I11():
- assert limit((tan(x)**2 + 1 - cos(x)**-2) / (sin(x)**2 + cos(x)**2 - 1), x, 0) != 0
- @XFAIL
- def test_I12():
- # This should fail or return nan or something.
- res = diff((tan(x)**2 + 1 - cos(x)**-2) / (sin(x)**2 + cos(x)**2 - 1), x)
- assert res is nan # trigsimp(res) gives nan
- # J. Special functions.
- def test_J1():
- assert bernoulli(16) == R(-3617, 510)
- def test_J2():
- assert diff(elliptic_e(x, y**2), y) == (elliptic_e(x, y**2) - elliptic_f(x, y**2))/y
- @XFAIL
- def test_J3():
- raise NotImplementedError("Jacobi elliptic functions: diff(dn(u,k), u) == -k**2*sn(u,k)*cn(u,k)")
- def test_J4():
- assert gamma(R(-1, 2)) == -2*sqrt(pi)
- def test_J5():
- assert polygamma(0, R(1, 3)) == -log(3) - sqrt(3)*pi/6 - EulerGamma - log(sqrt(3))
- def test_J6():
- assert mpmath.besselj(2, 1 + 1j).ae(mpc('0.04157988694396212', '0.24739764151330632'))
- def test_J7():
- assert simplify(besselj(R(-5,2), pi/2)) == 12/(pi**2)
- def test_J8():
- p = besselj(R(3,2), z)
- q = (sin(z)/z - cos(z))/sqrt(pi*z/2)
- assert simplify(expand_func(p) -q) == 0
- def test_J9():
- assert besselj(0, z).diff(z) == - besselj(1, z)
- def test_J10():
- mu, nu = symbols('mu, nu', integer=True)
- assert assoc_legendre(nu, mu, 0) == 2**mu*sqrt(pi)/gamma((nu - mu)/2 + 1)/gamma((-nu - mu + 1)/2)
- def test_J11():
- assert simplify(assoc_legendre(3, 1, x)) == simplify(-R(3, 2)*sqrt(1 - x**2)*(5*x**2 - 1))
- @slow
- def test_J12():
- assert simplify(chebyshevt(1008, x) - 2*x*chebyshevt(1007, x) + chebyshevt(1006, x)) == 0
- def test_J13():
- a = symbols('a', integer=True, negative=False)
- assert chebyshevt(a, -1) == (-1)**a
- def test_J14():
- p = hyper([S.Half, S.Half], [R(3, 2)], z**2)
- assert hyperexpand(p) == asin(z)/z
- @XFAIL
- def test_J15():
- raise NotImplementedError("F((n+2)/2,-(n-2)/2,R(3,2),sin(z)**2) == sin(n*z)/(n*sin(z)*cos(z)); F(.) is hypergeometric function")
- @XFAIL
- def test_J16():
- raise NotImplementedError("diff(zeta(x), x) @ x=0 == -log(2*pi)/2")
- def test_J17():
- assert integrate(f((x + 2)/5)*DiracDelta((x - 2)/3) - g(x)*diff(DiracDelta(x - 1), x), (x, 0, 3)) == 3*f(R(4, 5)) + Subs(Derivative(g(x), x), x, 1)
- @XFAIL
- def test_J18():
- raise NotImplementedError("define an antisymmetric function")
- # K. The Complex Domain
- def test_K1():
- z1, z2 = symbols('z1, z2', complex=True)
- assert re(z1 + I*z2) == -im(z2) + re(z1)
- assert im(z1 + I*z2) == im(z1) + re(z2)
- def test_K2():
- assert abs(3 - sqrt(7) + I*sqrt(6*sqrt(7) - 15)) == 1
- @XFAIL
- def test_K3():
- a, b = symbols('a, b', real=True)
- assert simplify(abs(1/(a + I/a + I*b))) == 1/sqrt(a**2 + (I/a + b)**2)
- def test_K4():
- assert log(3 + 4*I).expand(complex=True) == log(5) + I*atan(R(4, 3))
- def test_K5():
- x, y = symbols('x, y', real=True)
- assert tan(x + I*y).expand(complex=True) == (sin(2*x)/(cos(2*x) +
- cosh(2*y)) + I*sinh(2*y)/(cos(2*x) + cosh(2*y)))
- def test_K6():
- assert sqrt(x*y*abs(z)**2)/(sqrt(x)*abs(z)) == sqrt(x*y)/sqrt(x)
- assert sqrt(x*y*abs(z)**2)/(sqrt(x)*abs(z)) != sqrt(y)
- def test_K7():
- y = symbols('y', real=True, negative=False)
- expr = sqrt(x*y*abs(z)**2)/(sqrt(x)*abs(z))
- sexpr = simplify(expr)
- assert sexpr == sqrt(y)
- def test_K8():
- z = symbols('z', complex=True)
- assert simplify(sqrt(1/z) - 1/sqrt(z)) != 0 # Passes
- z = symbols('z', complex=True, negative=False)
- assert simplify(sqrt(1/z) - 1/sqrt(z)) == 0 # Fails
- def test_K9():
- z = symbols('z', positive=True)
- assert simplify(sqrt(1/z) - 1/sqrt(z)) == 0
- def test_K10():
- z = symbols('z', negative=True)
- assert simplify(sqrt(1/z) + 1/sqrt(z)) == 0
- # This goes up to K25
- # L. Determining Zero Equivalence
- def test_L1():
- assert sqrt(997) - (997**3)**R(1, 6) == 0
- def test_L2():
- assert sqrt(999983) - (999983**3)**R(1, 6) == 0
- def test_L3():
- assert simplify((2**R(1, 3) + 4**R(1, 3))**3 - 6*(2**R(1, 3) + 4**R(1, 3)) - 6) == 0
- def test_L4():
- assert trigsimp(cos(x)**3 + cos(x)*sin(x)**2 - cos(x)) == 0
- @XFAIL
- def test_L5():
- assert log(tan(R(1, 2)*x + pi/4)) - asinh(tan(x)) == 0
- def test_L6():
- assert (log(tan(x/2 + pi/4)) - asinh(tan(x))).diff(x).subs({x: 0}) == 0
- @XFAIL
- def test_L7():
- assert simplify(log((2*sqrt(x) + 1)/(sqrt(4*x + 4*sqrt(x) + 1)))) == 0
- @XFAIL
- def test_L8():
- assert simplify((4*x + 4*sqrt(x) + 1)**(sqrt(x)/(2*sqrt(x) + 1)) \
- *(2*sqrt(x) + 1)**(1/(2*sqrt(x) + 1)) - 2*sqrt(x) - 1) == 0
- @XFAIL
- def test_L9():
- z = symbols('z', complex=True)
- assert simplify(2**(1 - z)*gamma(z)*zeta(z)*cos(z*pi/2) - pi**2*zeta(1 - z)) == 0
- # M. Equations
- @XFAIL
- def test_M1():
- assert Equality(x, 2)/2 + Equality(1, 1) == Equality(x/2 + 1, 2)
- def test_M2():
- # The roots of this equation should all be real. Note that this
- # doesn't test that they are correct.
- sol = solveset(3*x**3 - 18*x**2 + 33*x - 19, x)
- assert all(s.expand(complex=True).is_real for s in sol)
- @XFAIL
- def test_M5():
- assert solveset(x**6 - 9*x**4 - 4*x**3 + 27*x**2 - 36*x - 23, x) == FiniteSet(2**(1/3) + sqrt(3), 2**(1/3) - sqrt(3), +sqrt(3) - 1/2**(2/3) + I*sqrt(3)/2**(2/3), +sqrt(3) - 1/2**(2/3) - I*sqrt(3)/2**(2/3), -sqrt(3) - 1/2**(2/3) + I*sqrt(3)/2**(2/3), -sqrt(3) - 1/2**(2/3) - I*sqrt(3)/2**(2/3))
- def test_M6():
- assert set(solveset(x**7 - 1, x)) == \
- {cos(n*pi*R(2, 7)) + I*sin(n*pi*R(2, 7)) for n in range(0, 7)}
- # The paper asks for exp terms, but sin's and cos's may be acceptable;
- # if the results are simplified, exp terms appear for all but
- # -sin(pi/14) - I*cos(pi/14) and -sin(pi/14) + I*cos(pi/14) which
- # will simplify if you apply the transformation foo.rewrite(exp).expand()
- def test_M7():
- # TODO: Replace solve with solveset, as of now test fails for solveset
- assert set(solve(x**8 - 8*x**7 + 34*x**6 - 92*x**5 + 175*x**4 - 236*x**3 +
- 226*x**2 - 140*x + 46, x)) == {
- 1 - sqrt(2)*I*sqrt(-sqrt(-3 + 4*sqrt(3)) + 3)/2,
- 1 - sqrt(2)*sqrt(-3 + I*sqrt(3 + 4*sqrt(3)))/2,
- 1 - sqrt(2)*I*sqrt(sqrt(-3 + 4*sqrt(3)) + 3)/2,
- 1 - sqrt(2)*sqrt(-3 - I*sqrt(3 + 4*sqrt(3)))/2,
- 1 + sqrt(2)*I*sqrt(sqrt(-3 + 4*sqrt(3)) + 3)/2,
- 1 + sqrt(2)*sqrt(-3 - I*sqrt(3 + 4*sqrt(3)))/2,
- 1 + sqrt(2)*sqrt(-3 + I*sqrt(3 + 4*sqrt(3)))/2,
- 1 + sqrt(2)*I*sqrt(-sqrt(-3 + 4*sqrt(3)) + 3)/2,
- }
- @XFAIL # There are an infinite number of solutions.
- def test_M8():
- x = Symbol('x')
- z = symbols('z', complex=True)
- assert solveset(exp(2*x) + 2*exp(x) + 1 - z, x, S.Reals) == \
- FiniteSet(log(1 + z - 2*sqrt(z))/2, log(1 + z + 2*sqrt(z))/2)
- # This one could be simplified better (the 1/2 could be pulled into the log
- # as a sqrt, and the function inside the log can be factored as a square,
- # giving [log(sqrt(z) - 1), log(sqrt(z) + 1)]). Also, there should be an
- # infinite number of solutions.
- # x = {log(sqrt(z) - 1), log(sqrt(z) + 1) + i pi} [+ n 2 pi i, + n 2 pi i]
- # where n is an arbitrary integer. See url of detailed output above.
- @XFAIL
- def test_M9():
- # x = symbols('x')
- raise NotImplementedError("solveset(exp(2-x**2)-exp(-x),x) has complex solutions.")
- def test_M10():
- # TODO: Replace solve with solveset, as of now test fails for solveset
- assert solve(exp(x) - x, x) == [-LambertW(-1)]
- @XFAIL
- def test_M11():
- assert solveset(x**x - x, x) == FiniteSet(-1, 1)
- def test_M12():
- # TODO: x = [-1, 2*(+/-asinh(1)*I + n*pi}, 3*(pi/6 + n*pi/3)]
- # TODO: Replace solve with solveset, as of now test fails for solveset
- assert solve((x + 1)*(sin(x)**2 + 1)**2*cos(3*x)**3, x) == [
- -1, pi/6, pi/2,
- - I*log(1 + sqrt(2)), I*log(1 + sqrt(2)),
- pi - I*log(1 + sqrt(2)), pi + I*log(1 + sqrt(2)),
- ]
- @XFAIL
- def test_M13():
- n = Dummy('n')
- assert solveset_real(sin(x) - cos(x), x) == ImageSet(Lambda(n, n*pi - pi*R(7, 4)), S.Integers)
- @XFAIL
- def test_M14():
- n = Dummy('n')
- assert solveset_real(tan(x) - 1, x) == ImageSet(Lambda(n, n*pi + pi/4), S.Integers)
- def test_M15():
- n = Dummy('n')
- got = solveset(sin(x) - S.Half)
- assert any(got.dummy_eq(i) for i in (
- Union(ImageSet(Lambda(n, 2*n*pi + pi/6), S.Integers),
- ImageSet(Lambda(n, 2*n*pi + pi*R(5, 6)), S.Integers)),
- Union(ImageSet(Lambda(n, 2*n*pi + pi*R(5, 6)), S.Integers),
- ImageSet(Lambda(n, 2*n*pi + pi/6), S.Integers))))
- @XFAIL
- def test_M16():
- n = Dummy('n')
- assert solveset(sin(x) - tan(x), x) == ImageSet(Lambda(n, n*pi), S.Integers)
- @XFAIL
- def test_M17():
- assert solveset_real(asin(x) - atan(x), x) == FiniteSet(0)
- @XFAIL
- def test_M18():
- assert solveset_real(acos(x) - atan(x), x) == FiniteSet(sqrt((sqrt(5) - 1)/2))
- def test_M19():
- # TODO: Replace solve with solveset, as of now test fails for solveset
- assert solve((x - 2)/x**R(1, 3), x) == [2]
- def test_M20():
- assert solveset(sqrt(x**2 + 1) - x + 2, x) == EmptySet
- def test_M21():
- assert solveset(x + sqrt(x) - 2) == FiniteSet(1)
- def test_M22():
- assert solveset(2*sqrt(x) + 3*x**R(1, 4) - 2) == FiniteSet(R(1, 16))
- def test_M23():
- x = symbols('x', complex=True)
- # TODO: Replace solve with solveset, as of now test fails for solveset
- assert solve(x - 1/sqrt(1 + x**2)) == [
- -I*sqrt(S.Half + sqrt(5)/2), sqrt(Rational(-1, 2) + sqrt(5)/2)]
- def test_M24():
- # TODO: Replace solve with solveset, as of now test fails for solveset
- solution = solve(1 - binomial(m, 2)*2**k, k)
- answer = log(2/(m*(m - 1)), 2)
- assert solution[0].expand() == answer.expand()
- def test_M25():
- a, b, c, d = symbols(':d', positive=True)
- x = symbols('x')
- # TODO: Replace solve with solveset, as of now test fails for solveset
- assert solve(a*b**x - c*d**x, x)[0].expand() == (log(c/a)/log(b/d)).expand()
- def test_M26():
- # TODO: Replace solve with solveset, as of now test fails for solveset
- assert solve(sqrt(log(x)) - log(sqrt(x))) == [1, exp(4)]
- def test_M27():
- x = symbols('x', real=True)
- b = symbols('b', real=True)
- # TODO: Replace solve with solveset which gives both [+/- current answer]
- # note that there is a typo in this test in the wester.pdf; there is no
- # real solution for the equation as it appears in wester.pdf
- assert solve(log(acos(asin(x**R(2, 3) - b)) - 1) + 2, x
- ) == [(b + sin(cos(exp(-2) + 1)))**R(3, 2)]
- @XFAIL
- def test_M28():
- assert solveset_real(5*x + exp((x - 5)/2) - 8*x**3, x, assume=Q.real(x)) == [-0.784966, -0.016291, 0.802557]
- def test_M29():
- x = symbols('x')
- assert solveset(abs(x - 1) - 2, domain=S.Reals) == FiniteSet(-1, 3)
- def test_M30():
- # TODO: Replace solve with solveset, as of now
- # solveset doesn't supports assumptions
- # assert solve(abs(2*x + 5) - abs(x - 2),x, assume=Q.real(x)) == [-1, -7]
- assert solveset_real(abs(2*x + 5) - abs(x - 2), x) == FiniteSet(-1, -7)
- def test_M31():
- # TODO: Replace solve with solveset, as of now
- # solveset doesn't supports assumptions
- # assert solve(1 - abs(x) - max(-x - 2, x - 2),x, assume=Q.real(x)) == [-3/2, 3/2]
- assert solveset_real(1 - abs(x) - Max(-x - 2, x - 2), x) == FiniteSet(R(-3, 2), R(3, 2))
- @XFAIL
- def test_M32():
- # TODO: Replace solve with solveset, as of now
- # solveset doesn't supports assumptions
- assert solveset_real(Max(2 - x**2, x)- Max(-x, (x**3)/9), x) == FiniteSet(-1, 3)
- @XFAIL
- def test_M33():
- # TODO: Replace solve with solveset, as of now
- # solveset doesn't supports assumptions
- # Second answer can be written in another form. The second answer is the root of x**3 + 9*x**2 - 18 = 0 in the interval (-2, -1).
- assert solveset_real(Max(2 - x**2, x) - x**3/9, x) == FiniteSet(-3, -1.554894, 3)
- @XFAIL
- def test_M34():
- z = symbols('z', complex=True)
- assert solveset((1 + I) * z + (2 - I) * conjugate(z) + 3*I, z) == FiniteSet(2 + 3*I)
- def test_M35():
- x, y = symbols('x y', real=True)
- assert linsolve((3*x - 2*y - I*y + 3*I).as_real_imag(), y, x) == FiniteSet((3, 2))
- def test_M36():
- # TODO: Replace solve with solveset, as of now
- # solveset doesn't supports solving for function
- # assert solve(f**2 + f - 2, x) == [Eq(f(x), 1), Eq(f(x), -2)]
- assert solveset(f(x)**2 + f(x) - 2, f(x)) == FiniteSet(-2, 1)
- def test_M37():
- assert linsolve([x + y + z - 6, 2*x + y + 2*z - 10, x + 3*y + z - 10 ], x, y, z) == \
- FiniteSet((-z + 4, 2, z))
- def test_M38():
- a, b, c = symbols('a, b, c')
- domain = FracField([a, b, c], ZZ).to_domain()
- ring = PolyRing('k1:50', domain)
- (k1, k2, k3, k4, k5, k6, k7, k8, k9, k10,
- k11, k12, k13, k14, k15, k16, k17, k18, k19, k20,
- k21, k22, k23, k24, k25, k26, k27, k28, k29, k30,
- k31, k32, k33, k34, k35, k36, k37, k38, k39, k40,
- k41, k42, k43, k44, k45, k46, k47, k48, k49) = ring.gens
- system = [
- -b*k8/a + c*k8/a, -b*k11/a + c*k11/a, -b*k10/a + c*k10/a + k2, -k3 - b*k9/a + c*k9/a,
- -b*k14/a + c*k14/a, -b*k15/a + c*k15/a, -b*k18/a + c*k18/a - k2, -b*k17/a + c*k17/a,
- -b*k16/a + c*k16/a + k4, -b*k13/a + c*k13/a - b*k21/a + c*k21/a + b*k5/a - c*k5/a,
- b*k44/a - c*k44/a, -b*k45/a + c*k45/a, -b*k20/a + c*k20/a, -b*k44/a + c*k44/a,
- b*k46/a - c*k46/a, b**2*k47/a**2 - 2*b*c*k47/a**2 + c**2*k47/a**2, k3, -k4,
- -b*k12/a + c*k12/a - a*k6/b + c*k6/b, -b*k19/a + c*k19/a + a*k7/c - b*k7/c,
- b*k45/a - c*k45/a, -b*k46/a + c*k46/a, -k48 + c*k48/a + c*k48/b - c**2*k48/(a*b),
- -k49 + b*k49/a + b*k49/c - b**2*k49/(a*c), a*k1/b - c*k1/b, a*k4/b - c*k4/b,
- a*k3/b - c*k3/b + k9, -k10 + a*k2/b - c*k2/b, a*k7/b - c*k7/b, -k9, k11,
- b*k12/a - c*k12/a + a*k6/b - c*k6/b, a*k15/b - c*k15/b, k10 + a*k18/b - c*k18/b,
- -k11 + a*k17/b - c*k17/b, a*k16/b - c*k16/b, -a*k13/b + c*k13/b + a*k21/b - c*k21/b + a*k5/b - c*k5/b,
- -a*k44/b + c*k44/b, a*k45/b - c*k45/b, a*k14/c - b*k14/c + a*k20/b - c*k20/b,
- a*k44/b - c*k44/b, -a*k46/b + c*k46/b, -k47 + c*k47/a + c*k47/b - c**2*k47/(a*b),
- a*k19/b - c*k19/b, -a*k45/b + c*k45/b, a*k46/b - c*k46/b, a**2*k48/b**2 - 2*a*c*k48/b**2 + c**2*k48/b**2,
- -k49 + a*k49/b + a*k49/c - a**2*k49/(b*c), k16, -k17, -a*k1/c + b*k1/c,
- -k16 - a*k4/c + b*k4/c, -a*k3/c + b*k3/c, k18 - a*k2/c + b*k2/c, b*k19/a - c*k19/a - a*k7/c + b*k7/c,
- -a*k6/c + b*k6/c, -a*k8/c + b*k8/c, -a*k11/c + b*k11/c + k17, -a*k10/c + b*k10/c - k18,
- -a*k9/c + b*k9/c, -a*k14/c + b*k14/c - a*k20/b + c*k20/b, -a*k13/c + b*k13/c + a*k21/c - b*k21/c - a*k5/c + b*k5/c,
- a*k44/c - b*k44/c, -a*k45/c + b*k45/c, -a*k44/c + b*k44/c, a*k46/c - b*k46/c,
- -k47 + b*k47/a + b*k47/c - b**2*k47/(a*c), -a*k12/c + b*k12/c, a*k45/c - b*k45/c,
- -a*k46/c + b*k46/c, -k48 + a*k48/b + a*k48/c - a**2*k48/(b*c),
- a**2*k49/c**2 - 2*a*b*k49/c**2 + b**2*k49/c**2, k8, k11, -k15, k10 - k18,
- -k17, k9, -k16, -k29, k14 - k32, -k21 + k23 - k31, -k24 - k30, -k35, k44,
- -k45, k36, k13 - k23 + k39, -k20 + k38, k25 + k37, b*k26/a - c*k26/a - k34 + k42,
- -2*k44, k45, k46, b*k47/a - c*k47/a, k41, k44, -k46, -b*k47/a + c*k47/a,
- k12 + k24, -k19 - k25, -a*k27/b + c*k27/b - k33, k45, -k46, -a*k48/b + c*k48/b,
- a*k28/c - b*k28/c + k40, -k45, k46, a*k48/b - c*k48/b, a*k49/c - b*k49/c,
- -a*k49/c + b*k49/c, -k1, -k4, -k3, k15, k18 - k2, k17, k16, k22, k25 - k7,
- k24 + k30, k21 + k23 - k31, k28, -k44, k45, -k30 - k6, k20 + k32, k27 + b*k33/a - c*k33/a,
- k44, -k46, -b*k47/a + c*k47/a, -k36, k31 - k39 - k5, -k32 - k38, k19 - k37,
- k26 - a*k34/b + c*k34/b - k42, k44, -2*k45, k46, a*k48/b - c*k48/b,
- a*k35/c - b*k35/c - k41, -k44, k46, b*k47/a - c*k47/a, -a*k49/c + b*k49/c,
- -k40, k45, -k46, -a*k48/b + c*k48/b, a*k49/c - b*k49/c, k1, k4, k3, -k8,
- -k11, -k10 + k2, -k9, k37 + k7, -k14 - k38, -k22, -k25 - k37, -k24 + k6,
- -k13 - k23 + k39, -k28 + b*k40/a - c*k40/a, k44, -k45, -k27, -k44, k46,
- b*k47/a - c*k47/a, k29, k32 + k38, k31 - k39 + k5, -k12 + k30, k35 - a*k41/b + c*k41/b,
- -k44, k45, -k26 + k34 + a*k42/c - b*k42/c, k44, k45, -2*k46, -b*k47/a + c*k47/a,
- -a*k48/b + c*k48/b, a*k49/c - b*k49/c, k33, -k45, k46, a*k48/b - c*k48/b,
- -a*k49/c + b*k49/c
- ]
- solution = {
- k49: 0, k48: 0, k47: 0, k46: 0, k45: 0, k44: 0, k41: 0, k40: 0,
- k38: 0, k37: 0, k36: 0, k35: 0, k33: 0, k32: 0, k30: 0, k29: 0,
- k28: 0, k27: 0, k25: 0, k24: 0, k22: 0, k21: 0, k20: 0, k19: 0,
- k18: 0, k17: 0, k16: 0, k15: 0, k14: 0, k13: 0, k12: 0, k11: 0,
- k10: 0, k9: 0, k8: 0, k7: 0, k6: 0, k5: 0, k4: 0, k3: 0,
- k2: 0, k1: 0,
- k34: b/c*k42, k31: k39, k26: a/c*k42, k23: k39
- }
- assert solve_lin_sys(system, ring) == solution
- def test_M39():
- x, y, z = symbols('x y z', complex=True)
- # TODO: Replace solve with solveset, as of now
- # solveset doesn't supports non-linear multivariate
- assert solve([x**2*y + 3*y*z - 4, -3*x**2*z + 2*y**2 + 1, 2*y*z**2 - z**2 - 1 ]) ==\
- [{y: 1, z: 1, x: -1}, {y: 1, z: 1, x: 1},\
- {y: sqrt(2)*I, z: R(1,3) - sqrt(2)*I/3, x: -sqrt(-1 - sqrt(2)*I)},\
- {y: sqrt(2)*I, z: R(1,3) - sqrt(2)*I/3, x: sqrt(-1 - sqrt(2)*I)},\
- {y: -sqrt(2)*I, z: R(1,3) + sqrt(2)*I/3, x: -sqrt(-1 + sqrt(2)*I)},\
- {y: -sqrt(2)*I, z: R(1,3) + sqrt(2)*I/3, x: sqrt(-1 + sqrt(2)*I)}]
- # N. Inequalities
- def test_N1():
- assert ask(E**pi > pi**E)
- @XFAIL
- def test_N2():
- x = symbols('x', real=True)
- assert ask(x**4 - x + 1 > 0) is True
- assert ask(x**4 - x + 1 > 1) is False
- @XFAIL
- def test_N3():
- x = symbols('x', real=True)
- assert ask(And(Lt(-1, x), Lt(x, 1)), abs(x) < 1 )
- @XFAIL
- def test_N4():
- x, y = symbols('x y', real=True)
- assert ask(2*x**2 > 2*y**2, (x > y) & (y > 0)) is True
- @XFAIL
- def test_N5():
- x, y, k = symbols('x y k', real=True)
- assert ask(k*x**2 > k*y**2, (x > y) & (y > 0) & (k > 0)) is True
- @slow
- @XFAIL
- def test_N6():
- x, y, k, n = symbols('x y k n', real=True)
- assert ask(k*x**n > k*y**n, (x > y) & (y > 0) & (k > 0) & (n > 0)) is True
- @XFAIL
- def test_N7():
- x, y = symbols('x y', real=True)
- assert ask(y > 0, (x > 1) & (y >= x - 1)) is True
- @XFAIL
- @slow
- def test_N8():
- x, y, z = symbols('x y z', real=True)
- assert ask(Eq(x, y) & Eq(y, z),
- (x >= y) & (y >= z) & (z >= x))
- def test_N9():
- x = Symbol('x')
- assert solveset(abs(x - 1) > 2, domain=S.Reals) == Union(Interval(-oo, -1, False, True),
- Interval(3, oo, True))
- def test_N10():
- x = Symbol('x')
- p = (x - 1)*(x - 2)*(x - 3)*(x - 4)*(x - 5)
- assert solveset(expand(p) < 0, domain=S.Reals) == Union(Interval(-oo, 1, True, True),
- Interval(2, 3, True, True),
- Interval(4, 5, True, True))
- def test_N11():
- x = Symbol('x')
- assert solveset(6/(x - 3) <= 3, domain=S.Reals) == Union(Interval(-oo, 3, True, True), Interval(5, oo))
- def test_N12():
- x = Symbol('x')
- assert solveset(sqrt(x) < 2, domain=S.Reals) == Interval(0, 4, False, True)
- def test_N13():
- x = Symbol('x')
- assert solveset(sin(x) < 2, domain=S.Reals) == S.Reals
- @XFAIL
- def test_N14():
- x = Symbol('x')
- # Gives 'Union(Interval(Integer(0), Mul(Rational(1, 2), pi), false, true),
- # Interval(Mul(Rational(1, 2), pi), Mul(Integer(2), pi), true, false))'
- # which is not the correct answer, but the provided also seems wrong.
- assert solveset(sin(x) < 1, x, domain=S.Reals) == Union(Interval(-oo, pi/2, True, True),
- Interval(pi/2, oo, True, True))
- def test_N15():
- r, t = symbols('r t')
- # raises NotImplementedError: only univariate inequalities are supported
- solveset(abs(2*r*(cos(t) - 1) + 1) <= 1, r, S.Reals)
- def test_N16():
- r, t = symbols('r t')
- solveset((r**2)*((cos(t) - 4)**2)*sin(t)**2 < 9, r, S.Reals)
- @XFAIL
- def test_N17():
- # currently only univariate inequalities are supported
- assert solveset((x + y > 0, x - y < 0), (x, y)) == (abs(x) < y)
- def test_O1():
- M = Matrix((1 + I, -2, 3*I))
- assert sqrt(expand(M.dot(M.H))) == sqrt(15)
- def test_O2():
- assert Matrix((2, 2, -3)).cross(Matrix((1, 3, 1))) == Matrix([[11],
- [-5],
- [4]])
- # The vector module has no way of representing vectors symbolically (without
- # respect to a basis)
- @XFAIL
- def test_O3():
- # assert (va ^ vb) | (vc ^ vd) == -(va | vc)*(vb | vd) + (va | vd)*(vb | vc)
- raise NotImplementedError("""The vector module has no way of representing
- vectors symbolically (without respect to a basis)""")
- def test_O4():
- from sympy.vector import CoordSys3D, Del
- N = CoordSys3D("N")
- delop = Del()
- i, j, k = N.base_vectors()
- x, y, z = N.base_scalars()
- F = i*(x*y*z) + j*((x*y*z)**2) + k*((y**2)*(z**3))
- assert delop.cross(F).doit() == (-2*x**2*y**2*z + 2*y*z**3)*i + x*y*j + (2*x*y**2*z**2 - x*z)*k
- @XFAIL
- def test_O5():
- #assert grad|(f^g)-g|(grad^f)+f|(grad^g) == 0
- raise NotImplementedError("""The vector module has no way of representing
- vectors symbolically (without respect to a basis)""")
- #testO8-O9 MISSING!!
- def test_O10():
- L = [Matrix([2, 3, 5]), Matrix([3, 6, 2]), Matrix([8, 3, 6])]
- assert GramSchmidt(L) == [Matrix([
- [2],
- [3],
- [5]]),
- Matrix([
- [R(23, 19)],
- [R(63, 19)],
- [R(-47, 19)]]),
- Matrix([
- [R(1692, 353)],
- [R(-1551, 706)],
- [R(-423, 706)]])]
- def test_P1():
- assert Matrix(3, 3, lambda i, j: j - i).diagonal(-1) == Matrix(
- 1, 2, [-1, -1])
- def test_P2():
- M = Matrix([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
- M.row_del(1)
- M.col_del(2)
- assert M == Matrix([[1, 2],
- [7, 8]])
- def test_P3():
- A = Matrix([
- [11, 12, 13, 14],
- [21, 22, 23, 24],
- [31, 32, 33, 34],
- [41, 42, 43, 44]])
- A11 = A[0:3, 1:4]
- A12 = A[(0, 1, 3), (2, 0, 3)]
- A21 = A
- A221 = -A[0:2, 2:4]
- A222 = -A[(3, 0), (2, 1)]
- A22 = BlockMatrix([[A221, A222]]).T
- rows = [[-A11, A12], [A21, A22]]
- raises(ValueError, lambda: BlockMatrix(rows))
- B = Matrix(rows)
- assert B == Matrix([
- [-12, -13, -14, 13, 11, 14],
- [-22, -23, -24, 23, 21, 24],
- [-32, -33, -34, 43, 41, 44],
- [11, 12, 13, 14, -13, -23],
- [21, 22, 23, 24, -14, -24],
- [31, 32, 33, 34, -43, -13],
- [41, 42, 43, 44, -42, -12]])
- @XFAIL
- def test_P4():
- raise NotImplementedError("Block matrix diagonalization not supported")
- def test_P5():
- M = Matrix([[7, 11],
- [3, 8]])
- assert M % 2 == Matrix([[1, 1],
- [1, 0]])
- def test_P6():
- M = Matrix([[cos(x), sin(x)],
- [-sin(x), cos(x)]])
- assert M.diff(x, 2) == Matrix([[-cos(x), -sin(x)],
- [sin(x), -cos(x)]])
- def test_P7():
- M = Matrix([[x, y]])*(
- z*Matrix([[1, 3, 5],
- [2, 4, 6]]) + Matrix([[7, -9, 11],
- [-8, 10, -12]]))
- assert M == Matrix([[x*(z + 7) + y*(2*z - 8), x*(3*z - 9) + y*(4*z + 10),
- x*(5*z + 11) + y*(6*z - 12)]])
- def test_P8():
- M = Matrix([[1, -2*I],
- [-3*I, 4]])
- assert M.norm(ord=S.Infinity) == 7
- def test_P9():
- a, b, c = symbols('a b c', nonzero=True)
- M = Matrix([[a/(b*c), 1/c, 1/b],
- [1/c, b/(a*c), 1/a],
- [1/b, 1/a, c/(a*b)]])
- assert factor(M.norm('fro')) == (a**2 + b**2 + c**2)/(abs(a)*abs(b)*abs(c))
- @XFAIL
- def test_P10():
- M = Matrix([[1, 2 + 3*I],
- [f(4 - 5*I), 6]])
- # conjugate(f(4 - 5*i)) is not simplified to f(4+5*I)
- assert M.H == Matrix([[1, f(4 + 5*I)],
- [2 + 3*I, 6]])
- @XFAIL
- def test_P11():
- # raises NotImplementedError("Matrix([[x,y],[1,x*y]]).inv()
- # not simplifying to extract common factor")
- assert Matrix([[x, y],
- [1, x*y]]).inv() == (1/(x**2 - 1))*Matrix([[x, -1],
- [-1/y, x/y]])
- def test_P11_workaround():
- # This test was changed to inverse method ADJ because it depended on the
- # specific form of inverse returned from the 'GE' method which has changed.
- M = Matrix([[x, y], [1, x*y]]).inv('ADJ')
- c = gcd(tuple(M))
- assert MatMul(c, M/c, evaluate=False) == MatMul(c, Matrix([
- [x*y, -y],
- [ -1, x]]), evaluate=False)
- def test_P12():
- A11 = MatrixSymbol('A11', n, n)
- A12 = MatrixSymbol('A12', n, n)
- A22 = MatrixSymbol('A22', n, n)
- B = BlockMatrix([[A11, A12],
- [ZeroMatrix(n, n), A22]])
- assert block_collapse(B.I) == BlockMatrix([[A11.I, (-1)*A11.I*A12*A22.I],
- [ZeroMatrix(n, n), A22.I]])
- def test_P13():
- M = Matrix([[1, x - 2, x - 3],
- [x - 1, x**2 - 3*x + 6, x**2 - 3*x - 2],
- [x - 2, x**2 - 8, 2*(x**2) - 12*x + 14]])
- L, U, _ = M.LUdecomposition()
- assert simplify(L) == Matrix([[1, 0, 0],
- [x - 1, 1, 0],
- [x - 2, x - 3, 1]])
- assert simplify(U) == Matrix([[1, x - 2, x - 3],
- [0, 4, x - 5],
- [0, 0, x - 7]])
- def test_P14():
- M = Matrix([[1, 2, 3, 1, 3],
- [3, 2, 1, 1, 7],
- [0, 2, 4, 1, 1],
- [1, 1, 1, 1, 4]])
- R, _ = M.rref()
- assert R == Matrix([[1, 0, -1, 0, 2],
- [0, 1, 2, 0, -1],
- [0, 0, 0, 1, 3],
- [0, 0, 0, 0, 0]])
- def test_P15():
- M = Matrix([[-1, 3, 7, -5],
- [4, -2, 1, 3],
- [2, 4, 15, -7]])
- assert M.rank() == 2
- def test_P16():
- M = Matrix([[2*sqrt(2), 8],
- [6*sqrt(6), 24*sqrt(3)]])
- assert M.rank() == 1
- def test_P17():
- t = symbols('t', real=True)
- M=Matrix([
- [sin(2*t), cos(2*t)],
- [2*(1 - (cos(t)**2))*cos(t), (1 - 2*(sin(t)**2))*sin(t)]])
- assert M.rank() == 1
- def test_P18():
- M = Matrix([[1, 0, -2, 0],
- [-2, 1, 0, 3],
- [-1, 2, -6, 6]])
- assert M.nullspace() == [Matrix([[2],
- [4],
- [1],
- [0]]),
- Matrix([[0],
- [-3],
- [0],
- [1]])]
- def test_P19():
- w = symbols('w')
- M = Matrix([[1, 1, 1, 1],
- [w, x, y, z],
- [w**2, x**2, y**2, z**2],
- [w**3, x**3, y**3, z**3]])
- assert M.det() == (w**3*x**2*y - w**3*x**2*z - w**3*x*y**2 + w**3*x*z**2
- + w**3*y**2*z - w**3*y*z**2 - w**2*x**3*y + w**2*x**3*z
- + w**2*x*y**3 - w**2*x*z**3 - w**2*y**3*z + w**2*y*z**3
- + w*x**3*y**2 - w*x**3*z**2 - w*x**2*y**3 + w*x**2*z**3
- + w*y**3*z**2 - w*y**2*z**3 - x**3*y**2*z + x**3*y*z**2
- + x**2*y**3*z - x**2*y*z**3 - x*y**3*z**2 + x*y**2*z**3
- )
- @XFAIL
- def test_P20():
- raise NotImplementedError("Matrix minimal polynomial not supported")
- def test_P21():
- M = Matrix([[5, -3, -7],
- [-2, 1, 2],
- [2, -3, -4]])
- assert M.charpoly(x).as_expr() == x**3 - 2*x**2 - 5*x + 6
- def test_P22():
- d = 100
- M = (2 - x)*eye(d)
- assert M.eigenvals() == {-x + 2: d}
- def test_P23():
- M = Matrix([
- [2, 1, 0, 0, 0],
- [1, 2, 1, 0, 0],
- [0, 1, 2, 1, 0],
- [0, 0, 1, 2, 1],
- [0, 0, 0, 1, 2]])
- assert M.eigenvals() == {
- S('1'): 1,
- S('2'): 1,
- S('3'): 1,
- S('sqrt(3) + 2'): 1,
- S('-sqrt(3) + 2'): 1}
- def test_P24():
- M = Matrix([[611, 196, -192, 407, -8, -52, -49, 29],
- [196, 899, 113, -192, -71, -43, -8, -44],
- [-192, 113, 899, 196, 61, 49, 8, 52],
- [ 407, -192, 196, 611, 8, 44, 59, -23],
- [ -8, -71, 61, 8, 411, -599, 208, 208],
- [ -52, -43, 49, 44, -599, 411, 208, 208],
- [ -49, -8, 8, 59, 208, 208, 99, -911],
- [ 29, -44, 52, -23, 208, 208, -911, 99]])
- assert M.eigenvals() == {
- S('0'): 1,
- S('10*sqrt(10405)'): 1,
- S('100*sqrt(26) + 510'): 1,
- S('1000'): 2,
- S('-100*sqrt(26) + 510'): 1,
- S('-10*sqrt(10405)'): 1,
- S('1020'): 1}
- def test_P25():
- MF = N(Matrix([[ 611, 196, -192, 407, -8, -52, -49, 29],
- [ 196, 899, 113, -192, -71, -43, -8, -44],
- [-192, 113, 899, 196, 61, 49, 8, 52],
- [ 407, -192, 196, 611, 8, 44, 59, -23],
- [ -8, -71, 61, 8, 411, -599, 208, 208],
- [ -52, -43, 49, 44, -599, 411, 208, 208],
- [ -49, -8, 8, 59, 208, 208, 99, -911],
- [ 29, -44, 52, -23, 208, 208, -911, 99]]))
- ev_1 = sorted(MF.eigenvals(multiple=True))
- ev_2 = sorted(
- [-1020.0490184299969, 0.0, 0.09804864072151699, 1000.0, 1000.0,
- 1019.9019513592784, 1020.0, 1020.0490184299969])
- for x, y in zip(ev_1, ev_2):
- assert abs(x - y) < 1e-12
- def test_P26():
- a0, a1, a2, a3, a4 = symbols('a0 a1 a2 a3 a4')
- M = Matrix([[-a4, -a3, -a2, -a1, -a0, 0, 0, 0, 0],
- [ 1, 0, 0, 0, 0, 0, 0, 0, 0],
- [ 0, 1, 0, 0, 0, 0, 0, 0, 0],
- [ 0, 0, 1, 0, 0, 0, 0, 0, 0],
- [ 0, 0, 0, 1, 0, 0, 0, 0, 0],
- [ 0, 0, 0, 0, 0, -1, -1, 0, 0],
- [ 0, 0, 0, 0, 0, 1, 0, 0, 0],
- [ 0, 0, 0, 0, 0, 0, 1, -1, -1],
- [ 0, 0, 0, 0, 0, 0, 0, 1, 0]])
- assert M.eigenvals(error_when_incomplete=False) == {
- S('-1/2 - sqrt(3)*I/2'): 2,
- S('-1/2 + sqrt(3)*I/2'): 2}
- def test_P27():
- a = symbols('a')
- M = Matrix([[a, 0, 0, 0, 0],
- [0, 0, 0, 0, 1],
- [0, 0, a, 0, 0],
- [0, 0, 0, a, 0],
- [0, -2, 0, 0, 2]])
- assert M.eigenvects() == [
- (a, 3, [
- Matrix([1, 0, 0, 0, 0]),
- Matrix([0, 0, 1, 0, 0]),
- Matrix([0, 0, 0, 1, 0])
- ]),
- (1 - I, 1, [
- Matrix([0, (1 + I)/2, 0, 0, 1])
- ]),
- (1 + I, 1, [
- Matrix([0, (1 - I)/2, 0, 0, 1])
- ]),
- ]
- @XFAIL
- def test_P28():
- raise NotImplementedError("Generalized eigenvectors not supported \
- https://github.com/sympy/sympy/issues/5293")
- @XFAIL
- def test_P29():
- raise NotImplementedError("Generalized eigenvectors not supported \
- https://github.com/sympy/sympy/issues/5293")
- def test_P30():
- M = Matrix([[1, 0, 0, 1, -1],
- [0, 1, -2, 3, -3],
- [0, 0, -1, 2, -2],
- [1, -1, 1, 0, 1],
- [1, -1, 1, -1, 2]])
- _, J = M.jordan_form()
- assert J == Matrix([[-1, 0, 0, 0, 0],
- [0, 1, 1, 0, 0],
- [0, 0, 1, 0, 0],
- [0, 0, 0, 1, 1],
- [0, 0, 0, 0, 1]])
- @XFAIL
- def test_P31():
- raise NotImplementedError("Smith normal form not implemented")
- def test_P32():
- M = Matrix([[1, -2],
- [2, 1]])
- assert exp(M).rewrite(cos).simplify() == Matrix([[E*cos(2), -E*sin(2)],
- [E*sin(2), E*cos(2)]])
- def test_P33():
- w, t = symbols('w t')
- M = Matrix([[0, 1, 0, 0],
- [0, 0, 0, 2*w],
- [0, 0, 0, 1],
- [0, -2*w, 3*w**2, 0]])
- assert exp(M*t).rewrite(cos).expand() == Matrix([
- [1, -3*t + 4*sin(t*w)/w, 6*t*w - 6*sin(t*w), -2*cos(t*w)/w + 2/w],
- [0, 4*cos(t*w) - 3, -6*w*cos(t*w) + 6*w, 2*sin(t*w)],
- [0, 2*cos(t*w)/w - 2/w, -3*cos(t*w) + 4, sin(t*w)/w],
- [0, -2*sin(t*w), 3*w*sin(t*w), cos(t*w)]])
- @XFAIL
- def test_P34():
- a, b, c = symbols('a b c', real=True)
- M = Matrix([[a, 1, 0, 0, 0, 0],
- [0, a, 0, 0, 0, 0],
- [0, 0, b, 0, 0, 0],
- [0, 0, 0, c, 1, 0],
- [0, 0, 0, 0, c, 1],
- [0, 0, 0, 0, 0, c]])
- # raises exception, sin(M) not supported. exp(M*I) also not supported
- # https://github.com/sympy/sympy/issues/6218
- assert sin(M) == Matrix([[sin(a), cos(a), 0, 0, 0, 0],
- [0, sin(a), 0, 0, 0, 0],
- [0, 0, sin(b), 0, 0, 0],
- [0, 0, 0, sin(c), cos(c), -sin(c)/2],
- [0, 0, 0, 0, sin(c), cos(c)],
- [0, 0, 0, 0, 0, sin(c)]])
- @XFAIL
- def test_P35():
- M = pi/2*Matrix([[2, 1, 1],
- [2, 3, 2],
- [1, 1, 2]])
- # raises exception, sin(M) not supported. exp(M*I) also not supported
- # https://github.com/sympy/sympy/issues/6218
- assert sin(M) == eye(3)
- @XFAIL
- def test_P36():
- M = Matrix([[10, 7],
- [7, 17]])
- assert sqrt(M) == Matrix([[3, 1],
- [1, 4]])
- def test_P37():
- M = Matrix([[1, 1, 0],
- [0, 1, 0],
- [0, 0, 1]])
- assert M**S.Half == Matrix([[1, R(1, 2), 0],
- [0, 1, 0],
- [0, 0, 1]])
- @XFAIL
- def test_P38():
- M=Matrix([[0, 1, 0],
- [0, 0, 0],
- [0, 0, 0]])
- with raises(AssertionError):
- # raises ValueError: Matrix det == 0; not invertible
- M**S.Half
- # if it doesn't raise then this assertion will be
- # raised and the test will be flagged as not XFAILing
- assert None
- @XFAIL
- def test_P39():
- """
- M=Matrix([
- [1, 1],
- [2, 2],
- [3, 3]])
- M.SVD()
- """
- raise NotImplementedError("Singular value decomposition not implemented")
- def test_P40():
- r, t = symbols('r t', real=True)
- M = Matrix([r*cos(t), r*sin(t)])
- assert M.jacobian(Matrix([r, t])) == Matrix([[cos(t), -r*sin(t)],
- [sin(t), r*cos(t)]])
- def test_P41():
- r, t = symbols('r t', real=True)
- assert hessian(r**2*sin(t),(r,t)) == Matrix([[ 2*sin(t), 2*r*cos(t)],
- [2*r*cos(t), -r**2*sin(t)]])
- def test_P42():
- assert wronskian([cos(x), sin(x)], x).simplify() == 1
- def test_P43():
- def __my_jacobian(M, Y):
- return Matrix([M.diff(v).T for v in Y]).T
- r, t = symbols('r t', real=True)
- M = Matrix([r*cos(t), r*sin(t)])
- assert __my_jacobian(M,[r,t]) == Matrix([[cos(t), -r*sin(t)],
- [sin(t), r*cos(t)]])
- def test_P44():
- def __my_hessian(f, Y):
- V = Matrix([diff(f, v) for v in Y])
- return Matrix([V.T.diff(v) for v in Y])
- r, t = symbols('r t', real=True)
- assert __my_hessian(r**2*sin(t), (r, t)) == Matrix([
- [ 2*sin(t), 2*r*cos(t)],
- [2*r*cos(t), -r**2*sin(t)]])
- def test_P45():
- def __my_wronskian(Y, v):
- M = Matrix([Matrix(Y).T.diff(x, n) for n in range(0, len(Y))])
- return M.det()
- assert __my_wronskian([cos(x), sin(x)], x).simplify() == 1
- # Q1-Q6 Tensor tests missing
- @XFAIL
- def test_R1():
- i, j, n = symbols('i j n', integer=True, positive=True)
- xn = MatrixSymbol('xn', n, 1)
- Sm = Sum((xn[i, 0] - Sum(xn[j, 0], (j, 0, n - 1))/n)**2, (i, 0, n - 1))
- # sum does not calculate
- # Unknown result
- Sm.doit()
- raise NotImplementedError('Unknown result')
- @XFAIL
- def test_R2():
- m, b = symbols('m b')
- i, n = symbols('i n', integer=True, positive=True)
- xn = MatrixSymbol('xn', n, 1)
- yn = MatrixSymbol('yn', n, 1)
- f = Sum((yn[i, 0] - m*xn[i, 0] - b)**2, (i, 0, n - 1))
- f1 = diff(f, m)
- f2 = diff(f, b)
- # raises TypeError: solveset() takes at most 2 arguments (3 given)
- solveset((f1, f2), (m, b), domain=S.Reals)
- @XFAIL
- def test_R3():
- n, k = symbols('n k', integer=True, positive=True)
- sk = ((-1)**k) * (binomial(2*n, k))**2
- Sm = Sum(sk, (k, 1, oo))
- T = Sm.doit()
- T2 = T.combsimp()
- # returns -((-1)**n*factorial(2*n)
- # - (factorial(n))**2)*exp_polar(-I*pi)/(factorial(n))**2
- assert T2 == (-1)**n*binomial(2*n, n)
- @XFAIL
- def test_R4():
- # Macsyma indefinite sum test case:
- #(c15) /* Check whether the full Gosper algorithm is implemented
- # => 1/2^(n + 1) binomial(n, k - 1) */
- #closedform(indefsum(binomial(n, k)/2^n - binomial(n + 1, k)/2^(n + 1), k));
- #Time= 2690 msecs
- # (- n + k - 1) binomial(n + 1, k)
- #(d15) - --------------------------------
- # n
- # 2 2 (n + 1)
- #
- #(c16) factcomb(makefact(%));
- #Time= 220 msecs
- # n!
- #(d16) ----------------
- # n
- # 2 k! 2 (n - k)!
- # Might be possible after fixing https://github.com/sympy/sympy/pull/1879
- raise NotImplementedError("Indefinite sum not supported")
- @XFAIL
- def test_R5():
- a, b, c, n, k = symbols('a b c n k', integer=True, positive=True)
- sk = ((-1)**k)*(binomial(a + b, a + k)
- *binomial(b + c, b + k)*binomial(c + a, c + k))
- Sm = Sum(sk, (k, 1, oo))
- T = Sm.doit() # hypergeometric series not calculated
- assert T == factorial(a+b+c)/(factorial(a)*factorial(b)*factorial(c))
- def test_R6():
- n, k = symbols('n k', integer=True, positive=True)
- gn = MatrixSymbol('gn', n + 2, 1)
- Sm = Sum(gn[k, 0] - gn[k - 1, 0], (k, 1, n + 1))
- assert Sm.doit() == -gn[0, 0] + gn[n + 1, 0]
- def test_R7():
- n, k = symbols('n k', integer=True, positive=True)
- T = Sum(k**3,(k,1,n)).doit()
- assert T.factor() == n**2*(n + 1)**2/4
- @XFAIL
- def test_R8():
- n, k = symbols('n k', integer=True, positive=True)
- Sm = Sum(k**2*binomial(n, k), (k, 1, n))
- T = Sm.doit() #returns Piecewise function
- assert T.combsimp() == n*(n + 1)*2**(n - 2)
- def test_R9():
- n, k = symbols('n k', integer=True, positive=True)
- Sm = Sum(binomial(n, k - 1)/k, (k, 1, n + 1))
- assert Sm.doit().simplify() == (2**(n + 1) - 1)/(n + 1)
- @XFAIL
- def test_R10():
- n, m, r, k = symbols('n m r k', integer=True, positive=True)
- Sm = Sum(binomial(n, k)*binomial(m, r - k), (k, 0, r))
- T = Sm.doit()
- T2 = T.combsimp().rewrite(factorial)
- assert T2 == factorial(m + n)/(factorial(r)*factorial(m + n - r))
- assert T2 == binomial(m + n, r).rewrite(factorial)
- # rewrite(binomial) is not working.
- # https://github.com/sympy/sympy/issues/7135
- T3 = T2.rewrite(binomial)
- assert T3 == binomial(m + n, r)
- @XFAIL
- def test_R11():
- n, k = symbols('n k', integer=True, positive=True)
- sk = binomial(n, k)*fibonacci(k)
- Sm = Sum(sk, (k, 0, n))
- T = Sm.doit()
- # Fibonacci simplification not implemented
- # https://github.com/sympy/sympy/issues/7134
- assert T == fibonacci(2*n)
- @XFAIL
- def test_R12():
- n, k = symbols('n k', integer=True, positive=True)
- Sm = Sum(fibonacci(k)**2, (k, 0, n))
- T = Sm.doit()
- assert T == fibonacci(n)*fibonacci(n + 1)
- @XFAIL
- def test_R13():
- n, k = symbols('n k', integer=True, positive=True)
- Sm = Sum(sin(k*x), (k, 1, n))
- T = Sm.doit() # Sum is not calculated
- assert T.simplify() == cot(x/2)/2 - cos(x*(2*n + 1)/2)/(2*sin(x/2))
- @XFAIL
- def test_R14():
- n, k = symbols('n k', integer=True, positive=True)
- Sm = Sum(sin((2*k - 1)*x), (k, 1, n))
- T = Sm.doit() # Sum is not calculated
- assert T.simplify() == sin(n*x)**2/sin(x)
- @XFAIL
- def test_R15():
- n, k = symbols('n k', integer=True, positive=True)
- Sm = Sum(binomial(n - k, k), (k, 0, floor(n/2)))
- T = Sm.doit() # Sum is not calculated
- assert T.simplify() == fibonacci(n + 1)
- def test_R16():
- k = symbols('k', integer=True, positive=True)
- Sm = Sum(1/k**2 + 1/k**3, (k, 1, oo))
- assert Sm.doit() == zeta(3) + pi**2/6
- def test_R17():
- k = symbols('k', integer=True, positive=True)
- assert abs(float(Sum(1/k**2 + 1/k**3, (k, 1, oo)))
- - 2.8469909700078206) < 1e-15
- def test_R18():
- k = symbols('k', integer=True, positive=True)
- Sm = Sum(1/(2**k*k**2), (k, 1, oo))
- T = Sm.doit()
- assert T.simplify() == -log(2)**2/2 + pi**2/12
- @slow
- @XFAIL
- def test_R19():
- k = symbols('k', integer=True, positive=True)
- Sm = Sum(1/((3*k + 1)*(3*k + 2)*(3*k + 3)), (k, 0, oo))
- T = Sm.doit()
- # assert fails, T not simplified
- assert T.simplify() == -log(3)/4 + sqrt(3)*pi/12
- @XFAIL
- def test_R20():
- n, k = symbols('n k', integer=True, positive=True)
- Sm = Sum(binomial(n, 4*k), (k, 0, oo))
- T = Sm.doit()
- # assert fails, T not simplified
- assert T.simplify() == 2**(n/2)*cos(pi*n/4)/2 + 2**(n - 1)/2
- @XFAIL
- def test_R21():
- k = symbols('k', integer=True, positive=True)
- Sm = Sum(1/(sqrt(k*(k + 1)) * (sqrt(k) + sqrt(k + 1))), (k, 1, oo))
- T = Sm.doit() # Sum not calculated
- assert T.simplify() == 1
- # test_R22 answer not available in Wester samples
- # Sum(Sum(binomial(n, k)*binomial(n - k, n - 2*k)*x**n*y**(n - 2*k),
- # (k, 0, floor(n/2))), (n, 0, oo)) with abs(x*y)<1?
- @XFAIL
- def test_R23():
- n, k = symbols('n k', integer=True, positive=True)
- Sm = Sum(Sum((factorial(n)/(factorial(k)**2*factorial(n - 2*k)))*
- (x/y)**k*(x*y)**(n - k), (n, 2*k, oo)), (k, 0, oo))
- # Missing how to express constraint abs(x*y)<1?
- T = Sm.doit() # Sum not calculated
- assert T == -1/sqrt(x**2*y**2 - 4*x**2 - 2*x*y + 1)
- def test_R24():
- m, k = symbols('m k', integer=True, positive=True)
- Sm = Sum(Product(k/(2*k - 1), (k, 1, m)), (m, 2, oo))
- assert Sm.doit() == pi/2
- def test_S1():
- k = symbols('k', integer=True, positive=True)
- Pr = Product(gamma(k/3), (k, 1, 8))
- assert Pr.doit().simplify() == 640*sqrt(3)*pi**3/6561
- def test_S2():
- n, k = symbols('n k', integer=True, positive=True)
- assert Product(k, (k, 1, n)).doit() == factorial(n)
- def test_S3():
- n, k = symbols('n k', integer=True, positive=True)
- assert Product(x**k, (k, 1, n)).doit().simplify() == x**(n*(n + 1)/2)
- def test_S4():
- n, k = symbols('n k', integer=True, positive=True)
- assert Product(1 + 1/k, (k, 1, n -1)).doit().simplify() == n
- def test_S5():
- n, k = symbols('n k', integer=True, positive=True)
- assert (Product((2*k - 1)/(2*k), (k, 1, n)).doit().gammasimp() ==
- gamma(n + S.Half)/(sqrt(pi)*gamma(n + 1)))
- @XFAIL
- def test_S6():
- n, k = symbols('n k', integer=True, positive=True)
- # Product does not evaluate
- assert (Product(x**2 -2*x*cos(k*pi/n) + 1, (k, 1, n - 1)).doit().simplify()
- == (x**(2*n) - 1)/(x**2 - 1))
- @XFAIL
- def test_S7():
- k = symbols('k', integer=True, positive=True)
- Pr = Product((k**3 - 1)/(k**3 + 1), (k, 2, oo))
- T = Pr.doit() # Product does not evaluate
- assert T.simplify() == R(2, 3)
- @XFAIL
- def test_S8():
- k = symbols('k', integer=True, positive=True)
- Pr = Product(1 - 1/(2*k)**2, (k, 1, oo))
- T = Pr.doit()
- # Product does not evaluate
- assert T.simplify() == 2/pi
- @XFAIL
- def test_S9():
- k = symbols('k', integer=True, positive=True)
- Pr = Product(1 + (-1)**(k + 1)/(2*k - 1), (k, 1, oo))
- T = Pr.doit()
- # Product produces 0
- # https://github.com/sympy/sympy/issues/7133
- assert T.simplify() == sqrt(2)
- @XFAIL
- def test_S10():
- k = symbols('k', integer=True, positive=True)
- Pr = Product((k*(k + 1) + 1 + I)/(k*(k + 1) + 1 - I), (k, 0, oo))
- T = Pr.doit()
- # Product does not evaluate
- assert T.simplify() == -1
- def test_T1():
- assert limit((1 + 1/n)**n, n, oo) == E
- assert limit((1 - cos(x))/x**2, x, 0) == S.Half
- def test_T2():
- assert limit((3**x + 5**x)**(1/x), x, oo) == 5
- def test_T3():
- assert limit(log(x)/(log(x) + sin(x)), x, oo) == 1
- def test_T4():
- assert limit((exp(x*exp(-x)/(exp(-x) + exp(-2*x**2/(x + 1))))
- - exp(x))/x, x, oo) == -exp(2)
- def test_T5():
- assert limit(x*log(x)*log(x*exp(x) - x**2)**2/log(log(x**2
- + 2*exp(exp(3*x**3*log(x))))), x, oo) == R(1, 3)
- def test_T6():
- assert limit(1/n * factorial(n)**(1/n), n, oo) == exp(-1)
- def test_T7():
- limit(1/n * gamma(n + 1)**(1/n), n, oo)
- def test_T8():
- a, z = symbols('a z', positive=True)
- assert limit(gamma(z + a)/gamma(z)*exp(-a*log(z)), z, oo) == 1
- @XFAIL
- def test_T9():
- z, k = symbols('z k', positive=True)
- # raises NotImplementedError:
- # Don't know how to calculate the mrv of '(1, k)'
- assert limit(hyper((1, k), (1,), z/k), k, oo) == exp(z)
- @XFAIL
- def test_T10():
- # No longer raises PoleError, but should return euler-mascheroni constant
- assert limit(zeta(x) - 1/(x - 1), x, 1) == integrate(-1/x + 1/floor(x), (x, 1, oo))
- @XFAIL
- def test_T11():
- n, k = symbols('n k', integer=True, positive=True)
- # evaluates to 0
- assert limit(n**x/(x*product((1 + x/k), (k, 1, n))), n, oo) == gamma(x)
- def test_T12():
- x, t = symbols('x t', real=True)
- # Does not evaluate the limit but returns an expression with erf
- assert limit(x * integrate(exp(-t**2), (t, 0, x))/(1 - exp(-x**2)),
- x, 0) == 1
- def test_T13():
- x = symbols('x', real=True)
- assert [limit(x/abs(x), x, 0, dir='-'),
- limit(x/abs(x), x, 0, dir='+')] == [-1, 1]
- def test_T14():
- x = symbols('x', real=True)
- assert limit(atan(-log(x)), x, 0, dir='+') == pi/2
- def test_U1():
- x = symbols('x', real=True)
- assert diff(abs(x), x) == sign(x)
- def test_U2():
- f = Lambda(x, Piecewise((-x, x < 0), (x, x >= 0)))
- assert diff(f(x), x) == Piecewise((-1, x < 0), (1, x >= 0))
- def test_U3():
- f = Lambda(x, Piecewise((x**2 - 1, x == 1), (x**3, x != 1)))
- f1 = Lambda(x, diff(f(x), x))
- assert f1(x) == 3*x**2
- assert f1(1) == 3
- @XFAIL
- def test_U4():
- n = symbols('n', integer=True, positive=True)
- x = symbols('x', real=True)
- d = diff(x**n, x, n)
- assert d.rewrite(factorial) == factorial(n)
- def test_U5():
- # issue 6681
- t = symbols('t')
- ans = (
- Derivative(f(g(t)), g(t))*Derivative(g(t), (t, 2)) +
- Derivative(f(g(t)), (g(t), 2))*Derivative(g(t), t)**2)
- assert f(g(t)).diff(t, 2) == ans
- assert ans.doit() == ans
- def test_U6():
- h = Function('h')
- T = integrate(f(y), (y, h(x), g(x)))
- assert T.diff(x) == (
- f(g(x))*Derivative(g(x), x) - f(h(x))*Derivative(h(x), x))
- @XFAIL
- def test_U7():
- p, t = symbols('p t', real=True)
- # Exact differential => d(V(P, T)) => dV/dP DP + dV/dT DT
- # raises ValueError: Since there is more than one variable in the
- # expression, the variable(s) of differentiation must be supplied to
- # differentiate f(p,t)
- diff(f(p, t))
- def test_U8():
- x, y = symbols('x y', real=True)
- eq = cos(x*y) + x
- # If SymPy had implicit_diff() function this hack could be avoided
- # TODO: Replace solve with solveset, current test fails for solveset
- assert idiff(y - eq, y, x) == (-y*sin(x*y) + 1)/(x*sin(x*y) + 1)
- def test_U9():
- # Wester sample case for Maple:
- # O29 := diff(f(x, y), x) + diff(f(x, y), y);
- # /d \ /d \
- # |-- f(x, y)| + |-- f(x, y)|
- # \dx / \dy /
- #
- # O30 := factor(subs(f(x, y) = g(x^2 + y^2), %));
- # 2 2
- # 2 D(g)(x + y ) (x + y)
- x, y = symbols('x y', real=True)
- su = diff(f(x, y), x) + diff(f(x, y), y)
- s2 = su.subs(f(x, y), g(x**2 + y**2))
- s3 = s2.doit().factor()
- # Subs not performed, s3 = 2*(x + y)*Subs(Derivative(
- # g(_xi_1), _xi_1), _xi_1, x**2 + y**2)
- # Derivative(g(x*2 + y**2), x**2 + y**2) is not valid in SymPy,
- # and probably will remain that way. You can take derivatives with respect
- # to other expressions only if they are atomic, like a symbol or a
- # function.
- # D operator should be added to SymPy
- # See https://github.com/sympy/sympy/issues/4719.
- assert s3 == (x + y)*Subs(Derivative(g(x), x), x, x**2 + y**2)*2
- def test_U10():
- # see issue 2519:
- assert residue((z**3 + 5)/((z**4 - 1)*(z + 1)), z, -1) == R(-9, 4)
- @XFAIL
- def test_U11():
- # assert (2*dx + dz) ^ (3*dx + dy + dz) ^ (dx + dy + 4*dz) == 8*dx ^ dy ^dz
- raise NotImplementedError
- @XFAIL
- def test_U12():
- # Wester sample case:
- # (c41) /* d(3 x^5 dy /\ dz + 5 x y^2 dz /\ dx + 8 z dx /\ dy)
- # => (15 x^4 + 10 x y + 8) dx /\ dy /\ dz */
- # factor(ext_diff(3*x^5 * dy ~ dz + 5*x*y^2 * dz ~ dx + 8*z * dx ~ dy));
- # 4
- # (d41) (10 x y + 15 x + 8) dx dy dz
- raise NotImplementedError(
- "External diff of differential form not supported")
- def test_U13():
- assert minimum(x**4 - x + 1, x) == -3*2**R(1,3)/8 + 1
- @XFAIL
- def test_U14():
- #f = 1/(x**2 + y**2 + 1)
- #assert [minimize(f), maximize(f)] == [0,1]
- raise NotImplementedError("minimize(), maximize() not supported")
- @XFAIL
- def test_U15():
- raise NotImplementedError("minimize() not supported and also solve does \
- not support multivariate inequalities")
- @XFAIL
- def test_U16():
- raise NotImplementedError("minimize() not supported in SymPy and also \
- solve does not support multivariate inequalities")
- @XFAIL
- def test_U17():
- raise NotImplementedError("Linear programming, symbolic simplex not \
- supported in SymPy")
- def test_V1():
- x = symbols('x', real=True)
- assert integrate(abs(x), x) == Piecewise((-x**2/2, x <= 0), (x**2/2, True))
- def test_V2():
- assert integrate(Piecewise((-x, x < 0), (x, x >= 0)), x
- ) == Piecewise((-x**2/2, x < 0), (x**2/2, True))
- def test_V3():
- assert integrate(1/(x**3 + 2),x).diff().simplify() == 1/(x**3 + 2)
- def test_V4():
- assert integrate(2**x/sqrt(1 + 4**x), x) == asinh(2**x)/log(2)
- @XFAIL
- def test_V5():
- # Returns (-45*x**2 + 80*x - 41)/(5*sqrt(2*x - 1)*(4*x**2 - 4*x + 1))
- assert (integrate((3*x - 5)**2/(2*x - 1)**R(7, 2), x).simplify() ==
- (-41 + 80*x - 45*x**2)/(5*(2*x - 1)**R(5, 2)))
- @XFAIL
- def test_V6():
- # returns RootSum(40*_z**2 - 1, Lambda(_i, _i*log(-4*_i + exp(-m*x))))/m
- assert (integrate(1/(2*exp(m*x) - 5*exp(-m*x)), x) == sqrt(10)*(
- log(2*exp(m*x) - sqrt(10)) - log(2*exp(m*x) + sqrt(10)))/(20*m))
- def test_V7():
- r1 = integrate(sinh(x)**4/cosh(x)**2)
- assert r1.simplify() == x*R(-3, 2) + sinh(x)**3/(2*cosh(x)) + 3*tanh(x)/2
- @XFAIL
- def test_V8_V9():
- #Macsyma test case:
- #(c27) /* This example involves several symbolic parameters
- # => 1/sqrt(b^2 - a^2) log([sqrt(b^2 - a^2) tan(x/2) + a + b]/
- # [sqrt(b^2 - a^2) tan(x/2) - a - b]) (a^2 < b^2)
- # [Gradshteyn and Ryzhik 2.553(3)] */
- #assume(b^2 > a^2)$
- #(c28) integrate(1/(a + b*cos(x)), x);
- #(c29) trigsimp(ratsimp(diff(%, x)));
- # 1
- #(d29) ------------
- # b cos(x) + a
- raise NotImplementedError(
- "Integrate with assumption not supported")
- def test_V10():
- assert integrate(1/(3 + 3*cos(x) + 4*sin(x)), x) == log(4*tan(x/2) + 3)/4
- def test_V11():
- r1 = integrate(1/(4 + 3*cos(x) + 4*sin(x)), x)
- r2 = factor(r1)
- assert (logcombine(r2, force=True) ==
- log(((tan(x/2) + 1)/(tan(x/2) + 7))**R(1, 3)))
- def test_V12():
- r1 = integrate(1/(5 + 3*cos(x) + 4*sin(x)), x)
- assert r1 == -1/(tan(x/2) + 2)
- @XFAIL
- def test_V13():
- r1 = integrate(1/(6 + 3*cos(x) + 4*sin(x)), x)
- # expression not simplified, returns: -sqrt(11)*I*log(tan(x/2) + 4/3
- # - sqrt(11)*I/3)/11 + sqrt(11)*I*log(tan(x/2) + 4/3 + sqrt(11)*I/3)/11
- assert r1.simplify() == 2*sqrt(11)*atan(sqrt(11)*(3*tan(x/2) + 4)/11)/11
- @slow
- @XFAIL
- def test_V14():
- r1 = integrate(log(abs(x**2 - y**2)), x)
- # Piecewise result does not simplify to the desired result.
- assert (r1.simplify() == x*log(abs(x**2 - y**2))
- + y*log(x + y) - y*log(x - y) - 2*x)
- def test_V15():
- r1 = integrate(x*acot(x/y), x)
- assert simplify(r1 - (x*y + (x**2 + y**2)*acot(x/y))/2) == 0
- @XFAIL
- def test_V16():
- # Integral not calculated
- assert integrate(cos(5*x)*Ci(2*x), x) == Ci(2*x)*sin(5*x)/5 - (Si(3*x) + Si(7*x))/10
- @XFAIL
- def test_V17():
- r1 = integrate((diff(f(x), x)*g(x)
- - f(x)*diff(g(x), x))/(f(x)**2 - g(x)**2), x)
- # integral not calculated
- assert simplify(r1 - (f(x) - g(x))/(f(x) + g(x))/2) == 0
- @XFAIL
- def test_W1():
- # The function has a pole at y.
- # The integral has a Cauchy principal value of zero but SymPy returns -I*pi
- # https://github.com/sympy/sympy/issues/7159
- assert integrate(1/(x - y), (x, y - 1, y + 1)) == 0
- @XFAIL
- def test_W2():
- # The function has a pole at y.
- # The integral is divergent but SymPy returns -2
- # https://github.com/sympy/sympy/issues/7160
- # Test case in Macsyma:
- # (c6) errcatch(integrate(1/(x - a)^2, x, a - 1, a + 1));
- # Integral is divergent
- assert integrate(1/(x - y)**2, (x, y - 1, y + 1)) is zoo
- @XFAIL
- @slow
- def test_W3():
- # integral is not calculated
- # https://github.com/sympy/sympy/issues/7161
- assert integrate(sqrt(x + 1/x - 2), (x, 0, 1)) == R(4, 3)
- @XFAIL
- @slow
- def test_W4():
- # integral is not calculated
- assert integrate(sqrt(x + 1/x - 2), (x, 1, 2)) == -2*sqrt(2)/3 + R(4, 3)
- @XFAIL
- @slow
- def test_W5():
- # integral is not calculated
- assert integrate(sqrt(x + 1/x - 2), (x, 0, 2)) == -2*sqrt(2)/3 + R(8, 3)
- @XFAIL
- @slow
- def test_W6():
- # integral is not calculated
- assert integrate(sqrt(2 - 2*cos(2*x))/2, (x, pi*R(-3, 4), -pi/4)) == sqrt(2)
- def test_W7():
- a = symbols('a', positive=True)
- r1 = integrate(cos(x)/(x**2 + a**2), (x, -oo, oo))
- assert r1.simplify() == pi*exp(-a)/a
- @XFAIL
- def test_W8():
- # Test case in Mathematica:
- # In[19]:= Integrate[t^(a - 1)/(1 + t), {t, 0, Infinity},
- # Assumptions -> 0 < a < 1]
- # Out[19]= Pi Csc[a Pi]
- raise NotImplementedError(
- "Integrate with assumption 0 < a < 1 not supported")
- @XFAIL
- @slow
- def test_W9():
- # Integrand with a residue at infinity => -2 pi [sin(pi/5) + sin(2pi/5)]
- # (principal value) [Levinson and Redheffer, p. 234] *)
- r1 = integrate(5*x**3/(1 + x + x**2 + x**3 + x**4), (x, -oo, oo))
- r2 = r1.doit()
- assert r2 == -2*pi*(sqrt(-sqrt(5)/8 + 5/8) + sqrt(sqrt(5)/8 + 5/8))
- @XFAIL
- def test_W10():
- # integrate(1/[1 + x + x^2 + ... + x^(2 n)], x = -infinity..infinity) =
- # 2 pi/(2 n + 1) [1 + cos(pi/[2 n + 1])] csc(2 pi/[2 n + 1])
- # [Levinson and Redheffer, p. 255] => 2 pi/5 [1 + cos(pi/5)] csc(2 pi/5) */
- r1 = integrate(x/(1 + x + x**2 + x**4), (x, -oo, oo))
- r2 = r1.doit()
- assert r2 == 2*pi*(sqrt(5)/4 + 5/4)*csc(pi*R(2, 5))/5
- @XFAIL
- def test_W11():
- # integral not calculated
- assert (integrate(sqrt(1 - x**2)/(1 + x**2), (x, -1, 1)) ==
- pi*(-1 + sqrt(2)))
- def test_W12():
- p = symbols('p', positive=True)
- q = symbols('q', real=True)
- r1 = integrate(x*exp(-p*x**2 + 2*q*x), (x, -oo, oo))
- assert r1.simplify() == sqrt(pi)*q*exp(q**2/p)/p**R(3, 2)
- @XFAIL
- def test_W13():
- # Integral not calculated. Expected result is 2*(Euler_mascheroni_constant)
- r1 = integrate(1/log(x) + 1/(1 - x) - log(log(1/x)), (x, 0, 1))
- assert r1 == 2*EulerGamma
- def test_W14():
- assert integrate(sin(x)/x*exp(2*I*x), (x, -oo, oo)) == 0
- @XFAIL
- def test_W15():
- # integral not calculated
- assert integrate(log(gamma(x))*cos(6*pi*x), (x, 0, 1)) == R(1, 12)
- def test_W16():
- assert integrate((1 + x)**3*legendre_poly(1, x)*legendre_poly(2, x),
- (x, -1, 1)) == R(36, 35)
- def test_W17():
- a, b = symbols('a b', positive=True)
- assert integrate(exp(-a*x)*besselj(0, b*x),
- (x, 0, oo)) == 1/(b*sqrt(a**2/b**2 + 1))
- def test_W18():
- assert integrate((besselj(1, x)/x)**2, (x, 0, oo)) == 4/(3*pi)
- @XFAIL
- def test_W19():
- # Integral not calculated
- # Expected result is (cos 7 - 1)/7 [Gradshteyn and Ryzhik 6.782(3)]
- assert integrate(Ci(x)*besselj(0, 2*sqrt(7*x)), (x, 0, oo)) == (cos(7) - 1)/7
- @XFAIL
- def test_W20():
- # integral not calculated
- assert (integrate(x**2*polylog(3, 1/(x + 1)), (x, 0, 1)) ==
- -pi**2/36 - R(17, 108) + zeta(3)/4 +
- (-pi**2/2 - 4*log(2) + log(2)**2 + 35/3)*log(2)/9)
- def test_W21():
- assert abs(N(integrate(x**2*polylog(3, 1/(x + 1)), (x, 0, 1)))
- - 0.210882859565594) < 1e-15
- def test_W22():
- t, u = symbols('t u', real=True)
- s = Lambda(x, Piecewise((1, And(x >= 1, x <= 2)), (0, True)))
- assert integrate(s(t)*cos(t), (t, 0, u)) == Piecewise(
- (0, u < 0),
- (-sin(Min(1, u)) + sin(Min(2, u)), True))
- @slow
- def test_W23():
- a, b = symbols('a b', positive=True)
- r1 = integrate(integrate(x/(x**2 + y**2), (x, a, b)), (y, -oo, oo))
- assert r1.collect(pi).cancel() == -pi*a + pi*b
- def test_W23b():
- # like W23 but limits are reversed
- a, b = symbols('a b', positive=True)
- r2 = integrate(integrate(x/(x**2 + y**2), (y, -oo, oo)), (x, a, b))
- assert r2.collect(pi) == pi*(-a + b)
- @XFAIL
- @slow
- def test_W24():
- if ON_CI:
- skip("Too slow for CI.")
- # Not that slow, but does not fully evaluate so simplify is slow.
- # Maybe also require doit()
- x, y = symbols('x y', real=True)
- r1 = integrate(integrate(sqrt(x**2 + y**2), (x, 0, 1)), (y, 0, 1))
- assert (r1 - (sqrt(2) + asinh(1))/3).simplify() == 0
- @XFAIL
- @slow
- def test_W25():
- if ON_CI:
- skip("Too slow for CI.")
- a, x, y = symbols('a x y', real=True)
- i1 = integrate(
- sin(a)*sin(y)/sqrt(1 - sin(a)**2*sin(x)**2*sin(y)**2),
- (x, 0, pi/2))
- i2 = integrate(i1, (y, 0, pi/2))
- assert (i2 - pi*a/2).simplify() == 0
- def test_W26():
- x, y = symbols('x y', real=True)
- assert integrate(integrate(abs(y - x**2), (y, 0, 2)),
- (x, -1, 1)) == R(46, 15)
- def test_W27():
- a, b, c = symbols('a b c')
- assert integrate(integrate(integrate(1, (z, 0, c*(1 - x/a - y/b))),
- (y, 0, b*(1 - x/a))),
- (x, 0, a)) == a*b*c/6
- def test_X1():
- v, c = symbols('v c', real=True)
- assert (series(1/sqrt(1 - (v/c)**2), v, x0=0, n=8) ==
- 5*v**6/(16*c**6) + 3*v**4/(8*c**4) + v**2/(2*c**2) + 1 + O(v**8))
- def test_X2():
- v, c = symbols('v c', real=True)
- s1 = series(1/sqrt(1 - (v/c)**2), v, x0=0, n=8)
- assert (1/s1**2).series(v, x0=0, n=8) == -v**2/c**2 + 1 + O(v**8)
- def test_X3():
- s1 = (sin(x).series()/cos(x).series()).series()
- s2 = tan(x).series()
- assert s2 == x + x**3/3 + 2*x**5/15 + O(x**6)
- assert s1 == s2
- def test_X4():
- s1 = log(sin(x)/x).series()
- assert s1 == -x**2/6 - x**4/180 + O(x**6)
- assert log(series(sin(x)/x)).series() == s1
- @XFAIL
- def test_X5():
- # test case in Mathematica syntax:
- # In[21]:= (* => [a f'(a d) + g(b d) + integrate(h(c y), y = 0..d)]
- # + [a^2 f''(a d) + b g'(b d) + h(c d)] (x - d) *)
- # In[22]:= D[f[a*x], x] + g[b*x] + Integrate[h[c*y], {y, 0, x}]
- # Out[22]= g[b x] + Integrate[h[c y], {y, 0, x}] + a f'[a x]
- # In[23]:= Series[%, {x, d, 1}]
- # Out[23]= (g[b d] + Integrate[h[c y], {y, 0, d}] + a f'[a d]) +
- # 2 2
- # (h[c d] + b g'[b d] + a f''[a d]) (-d + x) + O[-d + x]
- h = Function('h')
- a, b, c, d = symbols('a b c d', real=True)
- # series() raises NotImplementedError:
- # The _eval_nseries method should be added to <class
- # 'sympy.core.function.Subs'> to give terms up to O(x**n) at x=0
- series(diff(f(a*x), x) + g(b*x) + integrate(h(c*y), (y, 0, x)),
- x, x0=d, n=2)
- # assert missing, until exception is removed
- def test_X6():
- # Taylor series of nonscalar objects (noncommutative multiplication)
- # expected result => (B A - A B) t^2/2 + O(t^3) [Stanly Steinberg]
- a, b = symbols('a b', commutative=False, scalar=False)
- assert (series(exp((a + b)*x) - exp(a*x) * exp(b*x), x, x0=0, n=3) ==
- x**2*(-a*b/2 + b*a/2) + O(x**3))
- def test_X7():
- # => sum( Bernoulli[k]/k! x^(k - 2), k = 1..infinity )
- # = 1/x^2 - 1/(2 x) + 1/12 - x^2/720 + x^4/30240 + O(x^6)
- # [Levinson and Redheffer, p. 173]
- assert (series(1/(x*(exp(x) - 1)), x, 0, 7) == x**(-2) - 1/(2*x) +
- R(1, 12) - x**2/720 + x**4/30240 - x**6/1209600 + O(x**7))
- def test_X8():
- # Puiseux series (terms with fractional degree):
- # => 1/sqrt(x - 3/2 pi) + (x - 3/2 pi)^(3/2) / 12 + O([x - 3/2 pi]^(7/2))
- # see issue 7167:
- x = symbols('x', real=True)
- assert (series(sqrt(sec(x)), x, x0=pi*3/2, n=4) ==
- 1/sqrt(x - pi*R(3, 2)) + (x - pi*R(3, 2))**R(3, 2)/12 +
- (x - pi*R(3, 2))**R(7, 2)/160 + O((x - pi*R(3, 2))**4, (x, pi*R(3, 2))))
- def test_X9():
- assert (series(x**x, x, x0=0, n=4) == 1 + x*log(x) + x**2*log(x)**2/2 +
- x**3*log(x)**3/6 + O(x**4*log(x)**4))
- def test_X10():
- z, w = symbols('z w')
- assert (series(log(sinh(z)) + log(cosh(z + w)), z, x0=0, n=2) ==
- log(cosh(w)) + log(z) + z*sinh(w)/cosh(w) + O(z**2))
- def test_X11():
- z, w = symbols('z w')
- assert (series(log(sinh(z) * cosh(z + w)), z, x0=0, n=2) ==
- log(cosh(w)) + log(z) + z*sinh(w)/cosh(w) + O(z**2))
- @XFAIL
- def test_X12():
- # Look at the generalized Taylor series around x = 1
- # Result => (x - 1)^a/e^b [1 - (a + 2 b) (x - 1) / 2 + O((x - 1)^2)]
- a, b, x = symbols('a b x', real=True)
- # series returns O(log(x-1)**2)
- # https://github.com/sympy/sympy/issues/7168
- assert (series(log(x)**a*exp(-b*x), x, x0=1, n=2) ==
- (x - 1)**a/exp(b)*(1 - (a + 2*b)*(x - 1)/2 + O((x - 1)**2)))
- def test_X13():
- assert series(sqrt(2*x**2 + 1), x, x0=oo, n=1) == sqrt(2)*x + O(1/x, (x, oo))
- @XFAIL
- def test_X14():
- # Wallis' product => 1/sqrt(pi n) + ... [Knopp, p. 385]
- assert series(1/2**(2*n)*binomial(2*n, n),
- n, x==oo, n=1) == 1/(sqrt(pi)*sqrt(n)) + O(1/x, (x, oo))
- @SKIP("https://github.com/sympy/sympy/issues/7164")
- def test_X15():
- # => 0!/x - 1!/x^2 + 2!/x^3 - 3!/x^4 + O(1/x^5) [Knopp, p. 544]
- x, t = symbols('x t', real=True)
- # raises RuntimeError: maximum recursion depth exceeded
- # https://github.com/sympy/sympy/issues/7164
- # 2019-02-17: Raises
- # PoleError:
- # Asymptotic expansion of Ei around [-oo] is not implemented.
- e1 = integrate(exp(-t)/t, (t, x, oo))
- assert (series(e1, x, x0=oo, n=5) ==
- 6/x**4 + 2/x**3 - 1/x**2 + 1/x + O(x**(-5), (x, oo)))
- def test_X16():
- # Multivariate Taylor series expansion => 1 - (x^2 + 2 x y + y^2)/2 + O(x^4)
- assert (series(cos(x + y), x + y, x0=0, n=4) == 1 - (x + y)**2/2 +
- O(x**4 + x**3*y + x**2*y**2 + x*y**3 + y**4, x, y))
- @XFAIL
- def test_X17():
- # Power series (compute the general formula)
- # (c41) powerseries(log(sin(x)/x), x, 0);
- # /aquarius/data2/opt/local/macsyma_422/library1/trgred.so being loaded.
- # inf
- # ==== i1 2 i1 2 i1
- # \ (- 1) 2 bern(2 i1) x
- # (d41) > ------------------------------
- # / 2 i1 (2 i1)!
- # ====
- # i1 = 1
- # fps does not calculate
- assert fps(log(sin(x)/x)) == \
- Sum((-1)**k*2**(2*k - 1)*bernoulli(2*k)*x**(2*k)/(k*factorial(2*k)), (k, 1, oo))
- @XFAIL
- def test_X18():
- # Power series (compute the general formula). Maple FPS:
- # > FormalPowerSeries(exp(-x)*sin(x), x = 0);
- # infinity
- # ----- (1/2 k) k
- # \ 2 sin(3/4 k Pi) x
- # ) -------------------------
- # / k!
- # -----
- #
- # Now, SymPy returns
- # oo
- # _____
- # \ `
- # \ / k k\
- # \ k |I*(-1 - I) I*(-1 + I) |
- # \ x *|----------- - -----------|
- # / \ 2 2 /
- # / ------------------------------
- # / k!
- # /____,
- # k = 0
- k = Dummy('k')
- assert fps(exp(-x)*sin(x)) == \
- Sum(2**(S.Half*k)*sin(R(3, 4)*k*pi)*x**k/factorial(k), (k, 0, oo))
- @XFAIL
- def test_X19():
- # (c45) /* Derive an explicit Taylor series solution of y as a function of
- # x from the following implicit relation:
- # y = x - 1 + (x - 1)^2/2 + 2/3 (x - 1)^3 + (x - 1)^4 +
- # 17/10 (x - 1)^5 + ...
- # */
- # x = sin(y) + cos(y);
- # Time= 0 msecs
- # (d45) x = sin(y) + cos(y)
- #
- # (c46) taylor_revert(%, y, 7);
- raise NotImplementedError("Solve using series not supported. \
- Inverse Taylor series expansion also not supported")
- @XFAIL
- def test_X20():
- # Pade (rational function) approximation => (2 - x)/(2 + x)
- # > numapprox[pade](exp(-x), x = 0, [1, 1]);
- # bytes used=9019816, alloc=3669344, time=13.12
- # 1 - 1/2 x
- # ---------
- # 1 + 1/2 x
- # mpmath support numeric Pade approximant but there is
- # no symbolic implementation in SymPy
- # https://en.wikipedia.org/wiki/Pad%C3%A9_approximant
- raise NotImplementedError("Symbolic Pade approximant not supported")
- def test_X21():
- """
- Test whether `fourier_series` of x periodical on the [-p, p] interval equals
- `- (2 p / pi) sum( (-1)^n / n sin(n pi x / p), n = 1..infinity )`.
- """
- p = symbols('p', positive=True)
- n = symbols('n', positive=True, integer=True)
- s = fourier_series(x, (x, -p, p))
- # All cosine coefficients are equal to 0
- assert s.an.formula == 0
- # Check for sine coefficients
- assert s.bn.formula.subs(s.bn.variables[0], 0) == 0
- assert s.bn.formula.subs(s.bn.variables[0], n) == \
- -2*p/pi * (-1)**n / n * sin(n*pi*x/p)
- @XFAIL
- def test_X22():
- # (c52) /* => p / 2
- # - (2 p / pi^2) sum( [1 - (-1)^n] cos(n pi x / p) / n^2,
- # n = 1..infinity ) */
- # fourier_series(abs(x), x, p);
- # p
- # (e52) a = -
- # 0 2
- #
- # %nn
- # (2 (- 1) - 2) p
- # (e53) a = ------------------
- # %nn 2 2
- # %pi %nn
- #
- # (e54) b = 0
- # %nn
- #
- # Time= 5290 msecs
- # inf %nn %pi %nn x
- # ==== (2 (- 1) - 2) cos(---------)
- # \ p
- # p > -------------------------------
- # / 2
- # ==== %nn
- # %nn = 1 p
- # (d54) ----------------------------------------- + -
- # 2 2
- # %pi
- raise NotImplementedError("Fourier series not supported")
- def test_Y1():
- t = symbols('t', positive=True)
- w = symbols('w', real=True)
- s = symbols('s')
- F, _, _ = laplace_transform(cos((w - 1)*t), t, s)
- assert F == s/(s**2 + (w - 1)**2)
- def test_Y2():
- t = symbols('t', positive=True)
- w = symbols('w', real=True)
- s = symbols('s')
- f = inverse_laplace_transform(s/(s**2 + (w - 1)**2), s, t, simplify=True)
- assert f == cos(t*(w - 1))
- def test_Y3():
- t = symbols('t', positive=True)
- w = symbols('w', real=True)
- s = symbols('s')
- F, _, _ = laplace_transform(sinh(w*t)*cosh(w*t), t, s, simplify=True)
- assert F == w/(s**2 - 4*w**2)
- def test_Y4():
- t = symbols('t', positive=True)
- s = symbols('s')
- F, _, _ = laplace_transform(erf(3/sqrt(t)), t, s, simplify=True)
- assert F == 1/s - exp(-6*sqrt(s))/s
- def test_Y5_Y6():
- # Solve y'' + y = 4 [H(t - 1) - H(t - 2)], y(0) = 1, y'(0) = 0 where H is the
- # Heaviside (unit step) function (the RHS describes a pulse of magnitude 4 and
- # duration 1). See David A. Sanchez, Richard C. Allen, Jr. and Walter T.
- # Kyner, _Differential Equations: An Introduction_, Addison-Wesley Publishing
- # Company, 1983, p. 211. First, take the Laplace transform of the ODE
- # => s^2 Y(s) - s + Y(s) = 4/s [e^(-s) - e^(-2 s)]
- # where Y(s) is the Laplace transform of y(t)
- t = symbols('t', positive=True)
- s = symbols('s')
- y = Function('y')
- F, _, _ = laplace_transform(diff(y(t), t, 2) + y(t)
- - 4*(Heaviside(t - 1) - Heaviside(t - 2)),
- t, s, simplify=True)
- D = (F - (s**2*LaplaceTransform(y(t), t, s) - s*y(0) +
- LaplaceTransform(y(t), t, s) - Subs(Derivative(y(t), t), t, 0) +
- 4*(1 - exp(s))*exp(-2*s)/s)).simplify(doit=False)
- assert D == 0
- # TODO implement second part of test case
- # Now, solve for Y(s) and then take the inverse Laplace transform
- # => Y(s) = s/(s^2 + 1) + 4 [1/s - s/(s^2 + 1)] [e^(-s) - e^(-2 s)]
- # => y(t) = cos t + 4 {[1 - cos(t - 1)] H(t - 1) - [1 - cos(t - 2)] H(t - 2)}
- @XFAIL
- def test_Y7():
- # What is the Laplace transform of an infinite square wave?
- # => 1/s + 2 sum( (-1)^n e^(- s n a)/s, n = 1..infinity )
- # [Sanchez, Allen and Kyner, p. 213]
- t = symbols('t', positive=True)
- a = symbols('a', real=True)
- s = symbols('s')
- F, _, _ = laplace_transform(1 + 2*Sum((-1)**n*Heaviside(t - n*a),
- (n, 1, oo)), t, s)
- # returns 2*LaplaceTransform(Sum((-1)**n*Heaviside(-a*n + t),
- # (n, 1, oo)), t, s) + 1/s
- # https://github.com/sympy/sympy/issues/7177
- assert F == 2*Sum((-1)**n*exp(-a*n*s)/s, (n, 1, oo)) + 1/s
- @XFAIL
- def test_Y8():
- assert fourier_transform(1, x, z) == DiracDelta(z)
- def test_Y9():
- assert (fourier_transform(exp(-9*x**2), x, z) ==
- sqrt(pi)*exp(-pi**2*z**2/9)/3)
- def test_Y10():
- assert (fourier_transform(abs(x)*exp(-3*abs(x)), x, z).cancel() ==
- (-8*pi**2*z**2 + 18)/(16*pi**4*z**4 + 72*pi**2*z**2 + 81))
- @SKIP("https://github.com/sympy/sympy/issues/7181")
- @slow
- def test_Y11():
- # => pi cot(pi s) (0 < Re s < 1) [Gradshteyn and Ryzhik 17.43(5)]
- x, s = symbols('x s')
- # raises RuntimeError: maximum recursion depth exceeded
- # https://github.com/sympy/sympy/issues/7181
- # Update 2019-02-17 raises:
- # TypeError: cannot unpack non-iterable MellinTransform object
- F, _, _ = mellin_transform(1/(1 - x), x, s)
- assert F == pi*cot(pi*s)
- @XFAIL
- def test_Y12():
- # => 2^(s - 4) gamma(s/2)/gamma(4 - s/2) (0 < Re s < 1)
- # [Gradshteyn and Ryzhik 17.43(16)]
- x, s = symbols('x s')
- # returns Wrong value -2**(s - 4)*gamma(s/2 - 3)/gamma(-s/2 + 1)
- # https://github.com/sympy/sympy/issues/7182
- F, _, _ = mellin_transform(besselj(3, x)/x**3, x, s)
- assert F == -2**(s - 4)*gamma(s/2)/gamma(-s/2 + 4)
- @XFAIL
- def test_Y13():
- # Z[H(t - m T)] => z/[z^m (z - 1)] (H is the Heaviside (unit step) function) z
- raise NotImplementedError("z-transform not supported")
- @XFAIL
- def test_Y14():
- # Z[H(t - m T)] => z/[z^m (z - 1)] (H is the Heaviside (unit step) function)
- raise NotImplementedError("z-transform not supported")
- def test_Z1():
- r = Function('r')
- assert (rsolve(r(n + 2) - 2*r(n + 1) + r(n) - 2, r(n),
- {r(0): 1, r(1): m}).simplify() == n**2 + n*(m - 2) + 1)
- def test_Z2():
- r = Function('r')
- assert (rsolve(r(n) - (5*r(n - 1) - 6*r(n - 2)), r(n), {r(0): 0, r(1): 1})
- == -2**n + 3**n)
- def test_Z3():
- # => r(n) = Fibonacci[n + 1] [Cohen, p. 83]
- r = Function('r')
- # recurrence solution is correct, Wester expects it to be simplified to
- # fibonacci(n+1), but that is quite hard
- expected = ((S(1)/2 - sqrt(5)/2)**n*(S(1)/2 - sqrt(5)/10)
- + (S(1)/2 + sqrt(5)/2)**n*(sqrt(5)/10 + S(1)/2))
- sol = rsolve(r(n) - (r(n - 1) + r(n - 2)), r(n), {r(1): 1, r(2): 2})
- assert sol == expected
- @XFAIL
- def test_Z4():
- # => [c^(n+1) [c^(n+1) - 2 c - 2] + (n+1) c^2 + 2 c - n] / [(c-1)^3 (c+1)]
- # [Joan Z. Yu and Robert Israel in sci.math.symbolic]
- r = Function('r')
- c = symbols('c')
- # raises ValueError: Polynomial or rational function expected,
- # got '(c**2 - c**n)/(c - c**n)
- s = rsolve(r(n) - ((1 + c - c**(n-1) - c**(n+1))/(1 - c**n)*r(n - 1)
- - c*(1 - c**(n-2))/(1 - c**(n-1))*r(n - 2) + 1),
- r(n), {r(1): 1, r(2): (2 + 2*c + c**2)/(1 + c)})
- assert (s - (c*(n + 1)*(c*(n + 1) - 2*c - 2) +
- (n + 1)*c**2 + 2*c - n)/((c-1)**3*(c+1)) == 0)
- @XFAIL
- def test_Z5():
- # Second order ODE with initial conditions---solve directly
- # transform: f(t) = sin(2 t)/8 - t cos(2 t)/4
- C1, C2 = symbols('C1 C2')
- # initial conditions not supported, this is a manual workaround
- # https://github.com/sympy/sympy/issues/4720
- eq = Derivative(f(x), x, 2) + 4*f(x) - sin(2*x)
- sol = dsolve(eq, f(x))
- f0 = Lambda(x, sol.rhs)
- assert f0(x) == C2*sin(2*x) + (C1 - x/4)*cos(2*x)
- f1 = Lambda(x, diff(f0(x), x))
- # TODO: Replace solve with solveset, when it works for solveset
- const_dict = solve((f0(0), f1(0)))
- result = f0(x).subs(C1, const_dict[C1]).subs(C2, const_dict[C2])
- assert result == -x*cos(2*x)/4 + sin(2*x)/8
- # Result is OK, but ODE solving with initial conditions should be
- # supported without all this manual work
- raise NotImplementedError('ODE solving with initial conditions \
- not supported')
- @XFAIL
- def test_Z6():
- # Second order ODE with initial conditions---solve using Laplace
- # transform: f(t) = sin(2 t)/8 - t cos(2 t)/4
- t = symbols('t', positive=True)
- s = symbols('s')
- eq = Derivative(f(t), t, 2) + 4*f(t) - sin(2*t)
- F, _, _ = laplace_transform(eq, t, s)
- # Laplace transform for diff() not calculated
- # https://github.com/sympy/sympy/issues/7176
- assert (F == s**2*LaplaceTransform(f(t), t, s) +
- 4*LaplaceTransform(f(t), t, s) - 2/(s**2 + 4))
- # rest of test case not implemented
|