12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408 |
- from sympy.abc import t, w, x, y, z, n, k, m, p, i
- from sympy.assumptions import (ask, AssumptionsContext, Q, register_handler,
- remove_handler)
- from sympy.assumptions.assume import assuming, global_assumptions, Predicate
- from sympy.assumptions.cnf import CNF, Literal
- from sympy.assumptions.facts import (single_fact_lookup,
- get_known_facts, generate_known_facts_dict, get_known_facts_keys)
- from sympy.assumptions.handlers import AskHandler
- from sympy.assumptions.ask_generated import (get_all_known_facts,
- get_known_facts_dict)
- from sympy.core.add import Add
- from sympy.core.numbers import (I, Integer, Rational, oo, zoo, pi)
- from sympy.core.singleton import S
- from sympy.core.power import Pow
- from sympy.core.symbol import Str, symbols, Symbol
- from sympy.functions.combinatorial.factorials import factorial
- from sympy.functions.elementary.complexes import (Abs, im, re, sign)
- from sympy.functions.elementary.exponential import (exp, log)
- from sympy.functions.elementary.miscellaneous import sqrt
- from sympy.functions.elementary.trigonometric import (
- acos, acot, asin, atan, cos, cot, sin, tan)
- from sympy.logic.boolalg import Equivalent, Implies, Xor, And, to_cnf
- from sympy.matrices import Matrix, SparseMatrix
- from sympy.testing.pytest import (XFAIL, slow, raises, warns_deprecated_sympy,
- _both_exp_pow)
- import math
- def test_int_1():
- z = 1
- assert ask(Q.commutative(z)) is True
- assert ask(Q.integer(z)) is True
- assert ask(Q.rational(z)) is True
- assert ask(Q.real(z)) is True
- assert ask(Q.complex(z)) is True
- assert ask(Q.irrational(z)) is False
- assert ask(Q.imaginary(z)) is False
- assert ask(Q.positive(z)) is True
- assert ask(Q.negative(z)) is False
- assert ask(Q.even(z)) is False
- assert ask(Q.odd(z)) is True
- assert ask(Q.finite(z)) is True
- assert ask(Q.prime(z)) is False
- assert ask(Q.composite(z)) is False
- assert ask(Q.hermitian(z)) is True
- assert ask(Q.antihermitian(z)) is False
- def test_int_11():
- z = 11
- assert ask(Q.commutative(z)) is True
- assert ask(Q.integer(z)) is True
- assert ask(Q.rational(z)) is True
- assert ask(Q.real(z)) is True
- assert ask(Q.complex(z)) is True
- assert ask(Q.irrational(z)) is False
- assert ask(Q.imaginary(z)) is False
- assert ask(Q.positive(z)) is True
- assert ask(Q.negative(z)) is False
- assert ask(Q.even(z)) is False
- assert ask(Q.odd(z)) is True
- assert ask(Q.finite(z)) is True
- assert ask(Q.prime(z)) is True
- assert ask(Q.composite(z)) is False
- assert ask(Q.hermitian(z)) is True
- assert ask(Q.antihermitian(z)) is False
- def test_int_12():
- z = 12
- assert ask(Q.commutative(z)) is True
- assert ask(Q.integer(z)) is True
- assert ask(Q.rational(z)) is True
- assert ask(Q.real(z)) is True
- assert ask(Q.complex(z)) is True
- assert ask(Q.irrational(z)) is False
- assert ask(Q.imaginary(z)) is False
- assert ask(Q.positive(z)) is True
- assert ask(Q.negative(z)) is False
- assert ask(Q.even(z)) is True
- assert ask(Q.odd(z)) is False
- assert ask(Q.finite(z)) is True
- assert ask(Q.prime(z)) is False
- assert ask(Q.composite(z)) is True
- assert ask(Q.hermitian(z)) is True
- assert ask(Q.antihermitian(z)) is False
- def test_float_1():
- z = 1.0
- assert ask(Q.commutative(z)) is True
- assert ask(Q.integer(z)) is False
- assert ask(Q.rational(z)) is None
- assert ask(Q.real(z)) is True
- assert ask(Q.complex(z)) is True
- assert ask(Q.irrational(z)) is None
- assert ask(Q.imaginary(z)) is False
- assert ask(Q.positive(z)) is True
- assert ask(Q.negative(z)) is False
- assert ask(Q.even(z)) is False
- assert ask(Q.odd(z)) is False
- assert ask(Q.finite(z)) is True
- assert ask(Q.prime(z)) is False
- assert ask(Q.composite(z)) is False
- assert ask(Q.hermitian(z)) is True
- assert ask(Q.antihermitian(z)) is False
- z = 7.2123
- assert ask(Q.commutative(z)) is True
- assert ask(Q.integer(z)) is False
- assert ask(Q.rational(z)) is None
- assert ask(Q.real(z)) is True
- assert ask(Q.complex(z)) is True
- assert ask(Q.irrational(z)) is None
- assert ask(Q.imaginary(z)) is False
- assert ask(Q.positive(z)) is True
- assert ask(Q.negative(z)) is False
- assert ask(Q.even(z)) is False
- assert ask(Q.odd(z)) is False
- assert ask(Q.finite(z)) is True
- assert ask(Q.prime(z)) is False
- assert ask(Q.composite(z)) is False
- assert ask(Q.hermitian(z)) is True
- assert ask(Q.antihermitian(z)) is False
- # test for issue #12168
- assert ask(Q.rational(math.pi)) is None
- def test_zero_0():
- z = Integer(0)
- assert ask(Q.nonzero(z)) is False
- assert ask(Q.zero(z)) is True
- assert ask(Q.commutative(z)) is True
- assert ask(Q.integer(z)) is True
- assert ask(Q.rational(z)) is True
- assert ask(Q.real(z)) is True
- assert ask(Q.complex(z)) is True
- assert ask(Q.imaginary(z)) is False
- assert ask(Q.positive(z)) is False
- assert ask(Q.negative(z)) is False
- assert ask(Q.even(z)) is True
- assert ask(Q.odd(z)) is False
- assert ask(Q.finite(z)) is True
- assert ask(Q.prime(z)) is False
- assert ask(Q.composite(z)) is False
- assert ask(Q.hermitian(z)) is True
- assert ask(Q.antihermitian(z)) is True
- def test_negativeone():
- z = Integer(-1)
- assert ask(Q.nonzero(z)) is True
- assert ask(Q.zero(z)) is False
- assert ask(Q.commutative(z)) is True
- assert ask(Q.integer(z)) is True
- assert ask(Q.rational(z)) is True
- assert ask(Q.real(z)) is True
- assert ask(Q.complex(z)) is True
- assert ask(Q.irrational(z)) is False
- assert ask(Q.imaginary(z)) is False
- assert ask(Q.positive(z)) is False
- assert ask(Q.negative(z)) is True
- assert ask(Q.even(z)) is False
- assert ask(Q.odd(z)) is True
- assert ask(Q.finite(z)) is True
- assert ask(Q.prime(z)) is False
- assert ask(Q.composite(z)) is False
- assert ask(Q.hermitian(z)) is True
- assert ask(Q.antihermitian(z)) is False
- def test_infinity():
- assert ask(Q.commutative(oo)) is True
- assert ask(Q.integer(oo)) is False
- assert ask(Q.rational(oo)) is False
- assert ask(Q.algebraic(oo)) is False
- assert ask(Q.real(oo)) is False
- assert ask(Q.extended_real(oo)) is True
- assert ask(Q.complex(oo)) is False
- assert ask(Q.irrational(oo)) is False
- assert ask(Q.imaginary(oo)) is False
- assert ask(Q.positive(oo)) is False
- assert ask(Q.extended_positive(oo)) is True
- assert ask(Q.negative(oo)) is False
- assert ask(Q.even(oo)) is False
- assert ask(Q.odd(oo)) is False
- assert ask(Q.finite(oo)) is False
- assert ask(Q.infinite(oo)) is True
- assert ask(Q.prime(oo)) is False
- assert ask(Q.composite(oo)) is False
- assert ask(Q.hermitian(oo)) is False
- assert ask(Q.antihermitian(oo)) is False
- assert ask(Q.positive_infinite(oo)) is True
- assert ask(Q.negative_infinite(oo)) is False
- def test_neg_infinity():
- mm = S.NegativeInfinity
- assert ask(Q.commutative(mm)) is True
- assert ask(Q.integer(mm)) is False
- assert ask(Q.rational(mm)) is False
- assert ask(Q.algebraic(mm)) is False
- assert ask(Q.real(mm)) is False
- assert ask(Q.extended_real(mm)) is True
- assert ask(Q.complex(mm)) is False
- assert ask(Q.irrational(mm)) is False
- assert ask(Q.imaginary(mm)) is False
- assert ask(Q.positive(mm)) is False
- assert ask(Q.negative(mm)) is False
- assert ask(Q.extended_negative(mm)) is True
- assert ask(Q.even(mm)) is False
- assert ask(Q.odd(mm)) is False
- assert ask(Q.finite(mm)) is False
- assert ask(Q.infinite(oo)) is True
- assert ask(Q.prime(mm)) is False
- assert ask(Q.composite(mm)) is False
- assert ask(Q.hermitian(mm)) is False
- assert ask(Q.antihermitian(mm)) is False
- assert ask(Q.positive_infinite(-oo)) is False
- assert ask(Q.negative_infinite(-oo)) is True
- def test_complex_infinity():
- assert ask(Q.commutative(zoo)) is True
- assert ask(Q.integer(zoo)) is False
- assert ask(Q.rational(zoo)) is False
- assert ask(Q.algebraic(zoo)) is False
- assert ask(Q.real(zoo)) is False
- assert ask(Q.extended_real(zoo)) is False
- assert ask(Q.complex(zoo)) is False
- assert ask(Q.irrational(zoo)) is False
- assert ask(Q.imaginary(zoo)) is False
- assert ask(Q.positive(zoo)) is False
- assert ask(Q.negative(zoo)) is False
- assert ask(Q.zero(zoo)) is False
- assert ask(Q.nonzero(zoo)) is False
- assert ask(Q.even(zoo)) is False
- assert ask(Q.odd(zoo)) is False
- assert ask(Q.finite(zoo)) is False
- assert ask(Q.infinite(zoo)) is True
- assert ask(Q.prime(zoo)) is False
- assert ask(Q.composite(zoo)) is False
- assert ask(Q.hermitian(zoo)) is False
- assert ask(Q.antihermitian(zoo)) is False
- assert ask(Q.positive_infinite(zoo)) is False
- assert ask(Q.negative_infinite(zoo)) is False
- def test_nan():
- nan = S.NaN
- assert ask(Q.commutative(nan)) is True
- assert ask(Q.integer(nan)) is None
- assert ask(Q.rational(nan)) is None
- assert ask(Q.algebraic(nan)) is None
- assert ask(Q.real(nan)) is None
- assert ask(Q.extended_real(nan)) is None
- assert ask(Q.complex(nan)) is None
- assert ask(Q.irrational(nan)) is None
- assert ask(Q.imaginary(nan)) is None
- assert ask(Q.positive(nan)) is None
- assert ask(Q.nonzero(nan)) is None
- assert ask(Q.zero(nan)) is None
- assert ask(Q.even(nan)) is None
- assert ask(Q.odd(nan)) is None
- assert ask(Q.finite(nan)) is None
- assert ask(Q.infinite(nan)) is None
- assert ask(Q.prime(nan)) is None
- assert ask(Q.composite(nan)) is None
- assert ask(Q.hermitian(nan)) is None
- assert ask(Q.antihermitian(nan)) is None
- def test_Rational_number():
- r = Rational(3, 4)
- assert ask(Q.commutative(r)) is True
- assert ask(Q.integer(r)) is False
- assert ask(Q.rational(r)) is True
- assert ask(Q.real(r)) is True
- assert ask(Q.complex(r)) is True
- assert ask(Q.irrational(r)) is False
- assert ask(Q.imaginary(r)) is False
- assert ask(Q.positive(r)) is True
- assert ask(Q.negative(r)) is False
- assert ask(Q.even(r)) is False
- assert ask(Q.odd(r)) is False
- assert ask(Q.finite(r)) is True
- assert ask(Q.prime(r)) is False
- assert ask(Q.composite(r)) is False
- assert ask(Q.hermitian(r)) is True
- assert ask(Q.antihermitian(r)) is False
- r = Rational(1, 4)
- assert ask(Q.positive(r)) is True
- assert ask(Q.negative(r)) is False
- r = Rational(5, 4)
- assert ask(Q.negative(r)) is False
- assert ask(Q.positive(r)) is True
- r = Rational(5, 3)
- assert ask(Q.positive(r)) is True
- assert ask(Q.negative(r)) is False
- r = Rational(-3, 4)
- assert ask(Q.positive(r)) is False
- assert ask(Q.negative(r)) is True
- r = Rational(-1, 4)
- assert ask(Q.positive(r)) is False
- assert ask(Q.negative(r)) is True
- r = Rational(-5, 4)
- assert ask(Q.negative(r)) is True
- assert ask(Q.positive(r)) is False
- r = Rational(-5, 3)
- assert ask(Q.positive(r)) is False
- assert ask(Q.negative(r)) is True
- def test_sqrt_2():
- z = sqrt(2)
- assert ask(Q.commutative(z)) is True
- assert ask(Q.integer(z)) is False
- assert ask(Q.rational(z)) is False
- assert ask(Q.real(z)) is True
- assert ask(Q.complex(z)) is True
- assert ask(Q.irrational(z)) is True
- assert ask(Q.imaginary(z)) is False
- assert ask(Q.positive(z)) is True
- assert ask(Q.negative(z)) is False
- assert ask(Q.even(z)) is False
- assert ask(Q.odd(z)) is False
- assert ask(Q.finite(z)) is True
- assert ask(Q.prime(z)) is False
- assert ask(Q.composite(z)) is False
- assert ask(Q.hermitian(z)) is True
- assert ask(Q.antihermitian(z)) is False
- def test_pi():
- z = S.Pi
- assert ask(Q.commutative(z)) is True
- assert ask(Q.integer(z)) is False
- assert ask(Q.rational(z)) is False
- assert ask(Q.algebraic(z)) is False
- assert ask(Q.real(z)) is True
- assert ask(Q.complex(z)) is True
- assert ask(Q.irrational(z)) is True
- assert ask(Q.imaginary(z)) is False
- assert ask(Q.positive(z)) is True
- assert ask(Q.negative(z)) is False
- assert ask(Q.even(z)) is False
- assert ask(Q.odd(z)) is False
- assert ask(Q.finite(z)) is True
- assert ask(Q.prime(z)) is False
- assert ask(Q.composite(z)) is False
- assert ask(Q.hermitian(z)) is True
- assert ask(Q.antihermitian(z)) is False
- z = S.Pi + 1
- assert ask(Q.commutative(z)) is True
- assert ask(Q.integer(z)) is False
- assert ask(Q.rational(z)) is False
- assert ask(Q.algebraic(z)) is False
- assert ask(Q.real(z)) is True
- assert ask(Q.complex(z)) is True
- assert ask(Q.irrational(z)) is True
- assert ask(Q.imaginary(z)) is False
- assert ask(Q.positive(z)) is True
- assert ask(Q.negative(z)) is False
- assert ask(Q.even(z)) is False
- assert ask(Q.odd(z)) is False
- assert ask(Q.finite(z)) is True
- assert ask(Q.prime(z)) is False
- assert ask(Q.composite(z)) is False
- assert ask(Q.hermitian(z)) is True
- assert ask(Q.antihermitian(z)) is False
- z = 2*S.Pi
- assert ask(Q.commutative(z)) is True
- assert ask(Q.integer(z)) is False
- assert ask(Q.rational(z)) is False
- assert ask(Q.algebraic(z)) is False
- assert ask(Q.real(z)) is True
- assert ask(Q.complex(z)) is True
- assert ask(Q.irrational(z)) is True
- assert ask(Q.imaginary(z)) is False
- assert ask(Q.positive(z)) is True
- assert ask(Q.negative(z)) is False
- assert ask(Q.even(z)) is False
- assert ask(Q.odd(z)) is False
- assert ask(Q.finite(z)) is True
- assert ask(Q.prime(z)) is False
- assert ask(Q.composite(z)) is False
- assert ask(Q.hermitian(z)) is True
- assert ask(Q.antihermitian(z)) is False
- z = S.Pi ** 2
- assert ask(Q.commutative(z)) is True
- assert ask(Q.integer(z)) is False
- assert ask(Q.rational(z)) is False
- assert ask(Q.algebraic(z)) is False
- assert ask(Q.real(z)) is True
- assert ask(Q.complex(z)) is True
- assert ask(Q.irrational(z)) is True
- assert ask(Q.imaginary(z)) is False
- assert ask(Q.positive(z)) is True
- assert ask(Q.negative(z)) is False
- assert ask(Q.even(z)) is False
- assert ask(Q.odd(z)) is False
- assert ask(Q.finite(z)) is True
- assert ask(Q.prime(z)) is False
- assert ask(Q.composite(z)) is False
- assert ask(Q.hermitian(z)) is True
- assert ask(Q.antihermitian(z)) is False
- z = (1 + S.Pi) ** 2
- assert ask(Q.commutative(z)) is True
- assert ask(Q.integer(z)) is False
- assert ask(Q.rational(z)) is False
- assert ask(Q.algebraic(z)) is False
- assert ask(Q.real(z)) is True
- assert ask(Q.complex(z)) is True
- assert ask(Q.irrational(z)) is True
- assert ask(Q.imaginary(z)) is False
- assert ask(Q.positive(z)) is True
- assert ask(Q.negative(z)) is False
- assert ask(Q.even(z)) is False
- assert ask(Q.odd(z)) is False
- assert ask(Q.finite(z)) is True
- assert ask(Q.prime(z)) is False
- assert ask(Q.composite(z)) is False
- assert ask(Q.hermitian(z)) is True
- assert ask(Q.antihermitian(z)) is False
- def test_E():
- z = S.Exp1
- assert ask(Q.commutative(z)) is True
- assert ask(Q.integer(z)) is False
- assert ask(Q.rational(z)) is False
- assert ask(Q.algebraic(z)) is False
- assert ask(Q.real(z)) is True
- assert ask(Q.complex(z)) is True
- assert ask(Q.irrational(z)) is True
- assert ask(Q.imaginary(z)) is False
- assert ask(Q.positive(z)) is True
- assert ask(Q.negative(z)) is False
- assert ask(Q.even(z)) is False
- assert ask(Q.odd(z)) is False
- assert ask(Q.finite(z)) is True
- assert ask(Q.prime(z)) is False
- assert ask(Q.composite(z)) is False
- assert ask(Q.hermitian(z)) is True
- assert ask(Q.antihermitian(z)) is False
- def test_GoldenRatio():
- z = S.GoldenRatio
- assert ask(Q.commutative(z)) is True
- assert ask(Q.integer(z)) is False
- assert ask(Q.rational(z)) is False
- assert ask(Q.algebraic(z)) is True
- assert ask(Q.real(z)) is True
- assert ask(Q.complex(z)) is True
- assert ask(Q.irrational(z)) is True
- assert ask(Q.imaginary(z)) is False
- assert ask(Q.positive(z)) is True
- assert ask(Q.negative(z)) is False
- assert ask(Q.even(z)) is False
- assert ask(Q.odd(z)) is False
- assert ask(Q.finite(z)) is True
- assert ask(Q.prime(z)) is False
- assert ask(Q.composite(z)) is False
- assert ask(Q.hermitian(z)) is True
- assert ask(Q.antihermitian(z)) is False
- def test_TribonacciConstant():
- z = S.TribonacciConstant
- assert ask(Q.commutative(z)) is True
- assert ask(Q.integer(z)) is False
- assert ask(Q.rational(z)) is False
- assert ask(Q.algebraic(z)) is True
- assert ask(Q.real(z)) is True
- assert ask(Q.complex(z)) is True
- assert ask(Q.irrational(z)) is True
- assert ask(Q.imaginary(z)) is False
- assert ask(Q.positive(z)) is True
- assert ask(Q.negative(z)) is False
- assert ask(Q.even(z)) is False
- assert ask(Q.odd(z)) is False
- assert ask(Q.finite(z)) is True
- assert ask(Q.prime(z)) is False
- assert ask(Q.composite(z)) is False
- assert ask(Q.hermitian(z)) is True
- assert ask(Q.antihermitian(z)) is False
- def test_I():
- z = I
- assert ask(Q.commutative(z)) is True
- assert ask(Q.integer(z)) is False
- assert ask(Q.rational(z)) is False
- assert ask(Q.algebraic(z)) is True
- assert ask(Q.real(z)) is False
- assert ask(Q.complex(z)) is True
- assert ask(Q.irrational(z)) is False
- assert ask(Q.imaginary(z)) is True
- assert ask(Q.positive(z)) is False
- assert ask(Q.negative(z)) is False
- assert ask(Q.even(z)) is False
- assert ask(Q.odd(z)) is False
- assert ask(Q.finite(z)) is True
- assert ask(Q.prime(z)) is False
- assert ask(Q.composite(z)) is False
- assert ask(Q.hermitian(z)) is False
- assert ask(Q.antihermitian(z)) is True
- z = 1 + I
- assert ask(Q.commutative(z)) is True
- assert ask(Q.integer(z)) is False
- assert ask(Q.rational(z)) is False
- assert ask(Q.algebraic(z)) is True
- assert ask(Q.real(z)) is False
- assert ask(Q.complex(z)) is True
- assert ask(Q.irrational(z)) is False
- assert ask(Q.imaginary(z)) is False
- assert ask(Q.positive(z)) is False
- assert ask(Q.negative(z)) is False
- assert ask(Q.even(z)) is False
- assert ask(Q.odd(z)) is False
- assert ask(Q.finite(z)) is True
- assert ask(Q.prime(z)) is False
- assert ask(Q.composite(z)) is False
- assert ask(Q.hermitian(z)) is False
- assert ask(Q.antihermitian(z)) is False
- z = I*(1 + I)
- assert ask(Q.commutative(z)) is True
- assert ask(Q.integer(z)) is False
- assert ask(Q.rational(z)) is False
- assert ask(Q.algebraic(z)) is True
- assert ask(Q.real(z)) is False
- assert ask(Q.complex(z)) is True
- assert ask(Q.irrational(z)) is False
- assert ask(Q.imaginary(z)) is False
- assert ask(Q.positive(z)) is False
- assert ask(Q.negative(z)) is False
- assert ask(Q.even(z)) is False
- assert ask(Q.odd(z)) is False
- assert ask(Q.finite(z)) is True
- assert ask(Q.prime(z)) is False
- assert ask(Q.composite(z)) is False
- assert ask(Q.hermitian(z)) is False
- assert ask(Q.antihermitian(z)) is False
- z = I**(I)
- assert ask(Q.imaginary(z)) is False
- assert ask(Q.real(z)) is True
- z = (-I)**(I)
- assert ask(Q.imaginary(z)) is False
- assert ask(Q.real(z)) is True
- z = (3*I)**(I)
- assert ask(Q.imaginary(z)) is False
- assert ask(Q.real(z)) is False
- z = (1)**(I)
- assert ask(Q.imaginary(z)) is False
- assert ask(Q.real(z)) is True
- z = (-1)**(I)
- assert ask(Q.imaginary(z)) is False
- assert ask(Q.real(z)) is True
- z = (1+I)**(I)
- assert ask(Q.imaginary(z)) is False
- assert ask(Q.real(z)) is False
- z = (I)**(I+3)
- assert ask(Q.imaginary(z)) is True
- assert ask(Q.real(z)) is False
- z = (I)**(I+2)
- assert ask(Q.imaginary(z)) is False
- assert ask(Q.real(z)) is True
- z = (I)**(2)
- assert ask(Q.imaginary(z)) is False
- assert ask(Q.real(z)) is True
- z = (I)**(3)
- assert ask(Q.imaginary(z)) is True
- assert ask(Q.real(z)) is False
- z = (3)**(I)
- assert ask(Q.imaginary(z)) is False
- assert ask(Q.real(z)) is False
- z = (I)**(0)
- assert ask(Q.imaginary(z)) is False
- assert ask(Q.real(z)) is True
- def test_bounded():
- x, y, z = symbols('x,y,z')
- assert ask(Q.finite(x)) is None
- assert ask(Q.finite(x), Q.finite(x)) is True
- assert ask(Q.finite(x), Q.finite(y)) is None
- assert ask(Q.finite(x), Q.complex(x)) is True
- assert ask(Q.finite(x), Q.extended_real(x)) is None
- assert ask(Q.finite(x + 1)) is None
- assert ask(Q.finite(x + 1), Q.finite(x)) is True
- a = x + y
- x, y = a.args
- # B + B
- assert ask(Q.finite(a), Q.finite(x) & Q.finite(y)) is True
- assert ask(Q.finite(a), Q.positive(x) & Q.finite(y)) is True
- assert ask(Q.finite(a), Q.finite(x) & Q.positive(y)) is True
- assert ask(Q.finite(a), Q.positive(x) & Q.positive(y)) is True
- assert ask(Q.finite(a), Q.positive(x) & Q.finite(y)
- & ~Q.positive(y)) is True
- assert ask(Q.finite(a), Q.finite(x) & ~Q.positive(x)
- & Q.positive(y)) is True
- assert ask(Q.finite(a), Q.finite(x) & Q.finite(y) & ~Q.positive(x)
- & ~Q.positive(y)) is True
- # B + U
- assert ask(Q.finite(a), Q.finite(x) & ~Q.finite(y)) is False
- assert ask(Q.finite(a), Q.positive(x) & ~Q.finite(y)) is False
- assert ask(Q.finite(a), Q.finite(x)
- & Q.positive_infinite(y)) is False
- assert ask(Q.finite(a), Q.positive(x)
- & Q.positive_infinite(y)) is False
- assert ask(Q.finite(a), Q.positive(x) & ~Q.finite(y)
- & ~Q.positive(y)) is False
- assert ask(Q.finite(a), Q.finite(x) & ~Q.positive(x)
- & Q.positive_infinite(y)) is False
- assert ask(Q.finite(a), Q.finite(x) & ~Q.positive(x) & ~Q.finite(y)
- & ~Q.positive(y)) is False
- # B + ?
- assert ask(Q.finite(a), Q.finite(x)) is None
- assert ask(Q.finite(a), Q.positive(x)) is None
- assert ask(Q.finite(a), Q.finite(x)
- & Q.extended_positive(y)) is None
- assert ask(Q.finite(a), Q.positive(x)
- & Q.extended_positive(y)) is None
- assert ask(Q.finite(a), Q.positive(x) & ~Q.positive(y)) is None
- assert ask(Q.finite(a), Q.finite(x) & ~Q.positive(x)
- & Q.extended_positive(y)) is None
- assert ask(Q.finite(a), Q.finite(x) & ~Q.positive(x)
- & ~Q.positive(y)) is None
- # U + U
- assert ask(Q.finite(a), ~Q.finite(x) & ~Q.finite(y)) is None
- assert ask(Q.finite(a), Q.positive_infinite(x)
- & ~Q.finite(y)) is None
- assert ask(Q.finite(a), ~Q.finite(x)
- & Q.positive_infinite(y)) is None
- assert ask(Q.finite(a), Q.positive_infinite(x)
- & Q.positive_infinite(y)) is False
- assert ask(Q.finite(a), Q.positive_infinite(x) & ~Q.finite(y)
- & ~Q.extended_positive(y)) is None
- assert ask(Q.finite(a), ~Q.finite(x) & ~Q.extended_positive(x)
- & Q.positive_infinite(y)) is None
- assert ask(Q.finite(a), ~Q.finite(x) & ~Q.finite(y)
- & ~Q.extended_positive(x) & ~Q.extended_positive(y)) is False
- # U + ?
- assert ask(Q.finite(a), ~Q.finite(y)) is None
- assert ask(Q.finite(a), Q.extended_positive(x)
- & ~Q.finite(y)) is None
- assert ask(Q.finite(a), Q.positive_infinite(y)) is None
- assert ask(Q.finite(a), Q.extended_positive(x)
- & Q.positive_infinite(y)) is False
- assert ask(Q.finite(a), Q.extended_positive(x)
- & ~Q.finite(y) & ~Q.extended_positive(y)) is None
- assert ask(Q.finite(a), ~Q.extended_positive(x)
- & Q.positive_infinite(y)) is None
- assert ask(Q.finite(a), ~Q.extended_positive(x) & ~Q.finite(y)
- & ~Q.extended_positive(y)) is False
- # ? + ?
- assert ask(Q.finite(a)) is None
- assert ask(Q.finite(a), Q.extended_positive(x)) is None
- assert ask(Q.finite(a), Q.extended_positive(y)) is None
- assert ask(Q.finite(a), Q.extended_positive(x)
- & Q.extended_positive(y)) is None
- assert ask(Q.finite(a), Q.extended_positive(x)
- & ~Q.extended_positive(y)) is None
- assert ask(Q.finite(a), ~Q.extended_positive(x)
- & Q.extended_positive(y)) is None
- assert ask(Q.finite(a), ~Q.extended_positive(x)
- & ~Q.extended_positive(y)) is None
- x, y, z = symbols('x,y,z')
- a = x + y + z
- x, y, z = a.args
- assert ask(Q.finite(a), Q.negative(x) & Q.negative(y)
- & Q.negative(z)) is True
- assert ask(Q.finite(a), Q.negative(x) & Q.negative(y)
- & Q.finite(z)) is True
- assert ask(Q.finite(a), Q.negative(x) & Q.negative(y)
- & Q.positive(z)) is True
- assert ask(Q.finite(a), Q.negative(x) & Q.negative(y)
- & Q.negative_infinite(z)) is False
- assert ask(Q.finite(a), Q.negative(x) & Q.negative(y)
- & ~Q.finite(z)) is False
- assert ask(Q.finite(a), Q.negative(x) & Q.negative(y)
- & Q.positive_infinite(z)) is False
- assert ask(Q.finite(a), Q.negative(x) & Q.negative(y)
- & Q.extended_negative(z)) is None
- assert ask(Q.finite(a), Q.negative(x) & Q.negative(y)) is None
- assert ask(Q.finite(a), Q.negative(x) & Q.negative(y)
- & Q.extended_positive(z)) is None
- assert ask(Q.finite(a), Q.negative(x) & Q.finite(y)
- & Q.finite(z)) is True
- assert ask(Q.finite(a), Q.negative(x) & Q.finite(y)
- & Q.positive(z)) is True
- assert ask(Q.finite(a), Q.negative(x) & Q.finite(y)
- & Q.negative_infinite(z)) is False
- assert ask(Q.finite(a), Q.negative(x) & Q.finite(y)
- & ~Q.finite(z)) is False
- assert ask(Q.finite(a), Q.negative(x) & Q.finite(y)
- & Q.positive_infinite(z)) is False
- assert ask(Q.finite(a), Q.negative(x) & Q.finite(y)
- & Q.extended_negative(z)) is None
- assert ask(Q.finite(a), Q.negative(x) & Q.finite(y)) is None
- assert ask(Q.finite(a), Q.negative(x) & Q.finite(y)
- & Q.extended_positive(z)) is None
- assert ask(Q.finite(a), Q.negative(x) & Q.positive(y)
- & Q.positive(z)) is True
- assert ask(Q.finite(a), Q.negative(x) & Q.positive(y)
- & Q.negative_infinite(z)) is False
- assert ask(Q.finite(a), Q.negative(x) & Q.positive(y)
- & ~Q.finite(z)) is False
- assert ask(Q.finite(a), Q.negative(x) & Q.positive(y)
- & Q.positive_infinite(z)) is False
- assert ask(Q.finite(a), Q.negative(x) & Q.positive(y)
- & Q.extended_negative(z)) is None
- assert ask(Q.finite(a), Q.negative(x) & Q.extended_positive(y)
- & Q.finite(y)) is None
- assert ask(Q.finite(a), Q.negative(x) & Q.positive(y)
- & Q.extended_positive(z)) is None
- assert ask(Q.finite(a), Q.negative(x) & Q.negative_infinite(y)
- & Q.negative_infinite(z)) is False
- assert ask(Q.finite(a), Q.negative(x) & Q.negative_infinite(y)
- & ~Q.finite(z)) is None
- assert ask(Q.finite(a), Q.negative(x) & Q.negative_infinite(y)
- & Q.positive_infinite(z)) is None
- assert ask(Q.finite(a), Q.negative(x) & Q.negative_infinite(y)
- & Q.extended_negative(z)) is False
- assert ask(Q.finite(a), Q.negative(x)
- & Q.negative_infinite(y)) is None
- assert ask(Q.finite(a), Q.negative(x) & Q.negative_infinite(y)
- & Q.extended_positive(z)) is None
- assert ask(Q.finite(a), Q.negative(x) & ~Q.finite(y)
- & ~Q.finite(z)) is None
- assert ask(Q.finite(a), Q.negative(x) & ~Q.finite(y)
- & Q.positive_infinite(z)) is None
- assert ask(Q.finite(a), Q.negative(x) & ~Q.finite(y)
- & Q.extended_negative(z)) is None
- assert ask(Q.finite(a), Q.negative(x) & ~Q.finite(y)) is None
- assert ask(Q.finite(a), Q.negative(x) & ~Q.finite(y)
- & Q.extended_positive(z)) is None
- assert ask(Q.finite(a), Q.negative(x) & Q.positive_infinite(y)
- & Q.positive_infinite(z)) is False
- assert ask(Q.finite(a), Q.negative(x) & Q.positive_infinite(y)
- & Q.negative_infinite(z)) is None
- assert ask(Q.finite(a), Q.negative(x) &
- Q.positive_infinite(y)) is None
- assert ask(Q.finite(a), Q.negative(x) & Q.positive_infinite(y)
- & Q.extended_positive(z)) is False
- assert ask(Q.finite(a), Q.negative(x) & Q.extended_negative(y)
- & Q.extended_negative(z)) is None
- assert ask(Q.finite(a), Q.negative(x)
- & Q.extended_negative(y)) is None
- assert ask(Q.finite(a), Q.negative(x) & Q.extended_negative(y)
- & Q.extended_positive(z)) is None
- assert ask(Q.finite(a), Q.negative(x)) is None
- assert ask(Q.finite(a), Q.negative(x)
- & Q.extended_positive(z)) is None
- assert ask(Q.finite(a), Q.negative(x) & Q.extended_positive(y)
- & Q.extended_positive(z)) is None
- assert ask(Q.finite(a), Q.finite(x) & Q.finite(y)
- & Q.finite(z)) is True
- assert ask(Q.finite(a), Q.finite(x) & Q.finite(y)
- & Q.positive(z)) is True
- assert ask(Q.finite(a), Q.finite(x) & Q.finite(y)
- & Q.negative_infinite(z)) is False
- assert ask(Q.finite(a), Q.finite(x) & Q.finite(y)
- & ~Q.finite(z)) is False
- assert ask(Q.finite(a), Q.finite(x) & Q.finite(y)
- & Q.positive_infinite(z)) is False
- assert ask(Q.finite(a), Q.finite(x) & Q.finite(y)
- & Q.extended_negative(z)) is None
- assert ask(Q.finite(a), Q.finite(x) & Q.finite(y)) is None
- assert ask(Q.finite(a), Q.finite(x) & Q.finite(y)
- & Q.extended_positive(z)) is None
- assert ask(Q.finite(a), Q.finite(x) & Q.positive(y)
- & Q.positive(z)) is True
- assert ask(Q.finite(a), Q.finite(x) & Q.positive(y)
- & Q.negative_infinite(z)) is False
- assert ask(Q.finite(a), Q.finite(x) & Q.positive(y)
- & ~Q.finite(z)) is False
- assert ask(Q.finite(a), Q.finite(x) & Q.positive(y)
- & Q.positive_infinite(z)) is False
- assert ask(Q.finite(a), Q.finite(x) & Q.positive(y)
- & Q.extended_negative(z)) is None
- assert ask(Q.finite(a), Q.finite(x) & Q.positive(y)) is None
- assert ask(Q.finite(a), Q.finite(x) & Q.positive(y)
- & Q.extended_positive(z)) is None
- assert ask(Q.finite(a), Q.finite(x) & Q.negative_infinite(y)
- & Q.negative_infinite(z)) is False
- assert ask(Q.finite(a), Q.finite(x) & Q.negative_infinite(y)
- & ~Q.finite(z)) is None
- assert ask(Q.finite(a), Q.finite(x) & Q.negative_infinite(y)
- & Q.positive_infinite(z)) is None
- assert ask(Q.finite(a), Q.finite(x) & Q.negative_infinite(y)
- & Q.extended_negative(z)) is False
- assert ask(Q.finite(a), Q.finite(x)
- & Q.negative_infinite(y)) is None
- assert ask(Q.finite(a), Q.finite(x) & Q.negative_infinite(y)
- & Q.extended_positive(z)) is None
- assert ask(Q.finite(a), Q.finite(x) & ~Q.finite(y)
- & ~Q.finite(z)) is None
- assert ask(Q.finite(a), Q.finite(x) & ~Q.finite(y)
- & Q.positive_infinite(z)) is None
- assert ask(Q.finite(a), Q.finite(x) & ~Q.finite(y)
- & Q.extended_negative(z)) is None
- assert ask(Q.finite(a), Q.finite(x) & ~Q.finite(y)) is None
- assert ask(Q.finite(a), Q.finite(x) & ~Q.finite(y)
- & Q.extended_positive(z)) is None
- assert ask(Q.finite(a), Q.finite(x) & Q.positive_infinite(y)
- & Q.positive_infinite(z)) is False
- assert ask(Q.finite(a), Q.finite(x) & Q.positive_infinite(y)
- & Q.extended_negative(z)) is None
- assert ask(Q.finite(a), Q.finite(x)
- & Q.positive_infinite(y)) is None
- assert ask(Q.finite(a), Q.finite(x) & Q.positive_infinite(y)
- & Q.extended_positive(z)) is False
- assert ask(Q.finite(a), Q.finite(x) & Q.extended_negative(y)
- & Q.extended_negative(z)) is None
- assert ask(Q.finite(a), Q.finite(x)
- & Q.extended_negative(y)) is None
- assert ask(Q.finite(a), Q.finite(x) & Q.extended_negative(y)
- & Q.extended_positive(z)) is None
- assert ask(Q.finite(a), Q.finite(x)) is None
- assert ask(Q.finite(a), Q.finite(x)
- & Q.extended_positive(z)) is None
- assert ask(Q.finite(a), Q.finite(x) & Q.extended_positive(y)
- & Q.extended_positive(z)) is None
- assert ask(Q.finite(a), Q.positive(x) & Q.positive(y)
- & Q.positive(z)) is True
- assert ask(Q.finite(a), Q.positive(x) & Q.positive(y)
- & Q.negative_infinite(z)) is False
- assert ask(Q.finite(a), Q.positive(x) & Q.positive(y)
- & ~Q.finite(z)) is False
- assert ask(Q.finite(a), Q.positive(x) & Q.positive(y)
- & Q.positive_infinite(z)) is False
- assert ask(Q.finite(a), Q.positive(x) & Q.positive(y)
- & Q.extended_negative(z)) is None
- assert ask(Q.finite(a), Q.positive(x) & Q.positive(y)) is None
- assert ask(Q.finite(a), Q.positive(x) & Q.positive(y)
- & Q.extended_positive(z)) is None
- assert ask(Q.finite(a), Q.positive(x) & Q.negative_infinite(y)
- & Q.negative_infinite(z)) is False
- assert ask(Q.finite(a), Q.positive(x) & Q.negative_infinite(y)
- & ~Q.finite(z)) is None
- assert ask(Q.finite(a), Q.positive(x) & Q.negative_infinite(y)
- & Q.positive_infinite(z)) is None
- assert ask(Q.finite(a), Q.positive(x) & Q.negative_infinite(y)
- & Q.extended_negative(z)) is False
- assert ask(Q.finite(a), Q.positive(x)
- & Q.negative_infinite(y)) is None
- assert ask(Q.finite(a), Q.positive(x) & Q.negative_infinite(y)
- & Q.extended_positive(z)) is None
- assert ask(Q.finite(a), Q.positive(x) & ~Q.finite(y)
- & ~Q.finite(z)) is None
- assert ask(Q.finite(a), Q.positive(x) & ~Q.finite(y)
- & Q.positive_infinite(z)) is None
- assert ask(Q.finite(a), Q.positive(x) & ~Q.finite(y)
- & Q.extended_negative(z)) is None
- assert ask(Q.finite(a), Q.positive(x) & ~Q.finite(y)) is None
- assert ask(Q.finite(a), Q.positive(x) & ~Q.finite(y)
- & Q.extended_positive(z)) is None
- assert ask(Q.finite(a), Q.positive(x) & Q.positive_infinite(y)
- & Q.positive_infinite(z)) is False
- assert ask(Q.finite(a), Q.positive(x) & Q.positive_infinite(y)
- & Q.extended_negative(z)) is None
- assert ask(Q.finite(a), Q.positive(x)
- & Q.positive_infinite(y)) is None
- assert ask(Q.finite(a), Q.positive(x) & Q.positive_infinite(y)
- & Q.extended_positive(z)) is False
- assert ask(Q.finite(a), Q.positive(x) & Q.extended_negative(y)
- & Q.extended_negative(z)) is None
- assert ask(Q.finite(a), Q.positive(x)
- & Q.extended_negative(y)) is None
- assert ask(Q.finite(a), Q.positive(x) & Q.extended_negative(y)
- & Q.extended_positive(z)) is None
- assert ask(Q.finite(a), Q.positive(x)) is None
- assert ask(Q.finite(a), Q.positive(x)
- & Q.extended_positive(z)) is None
- assert ask(Q.finite(a), Q.positive(x) & Q.extended_positive(y)
- & Q.extended_positive(z)) is None
- assert ask(Q.finite(a), Q.negative_infinite(x)
- & Q.negative_infinite(y) & Q.negative_infinite(z)) is False
- assert ask(Q.finite(a), Q.negative_infinite(x)
- & Q.negative_infinite(y) & ~Q.finite(z)) is None
- assert ask(Q.finite(a), Q.negative_infinite(x)
- & Q.negative_infinite(y)& Q.positive_infinite(z)) is None
- assert ask(Q.finite(a), Q.negative_infinite(x)
- & Q.negative_infinite(y) & Q.extended_negative(z)) is False
- assert ask(Q.finite(a), Q.negative_infinite(x)
- & Q.negative_infinite(y)) is None
- assert ask(Q.finite(a), Q.negative_infinite(x)
- & Q.negative_infinite(y) & Q.extended_positive(z)) is None
- assert ask(Q.finite(a), Q.negative_infinite(x)
- & ~Q.finite(y) & ~Q.finite(z)) is None
- assert ask(Q.finite(a), Q.negative_infinite(x)
- & ~Q.finite(y) & Q.positive_infinite(z)) is None
- assert ask(Q.finite(a), Q.negative_infinite(x)
- & ~Q.finite(y) & Q.extended_negative(z)) is None
- assert ask(Q.finite(a), Q.negative_infinite(x)
- & ~Q.finite(y)) is None
- assert ask(Q.finite(a), Q.negative_infinite(x)
- & ~Q.finite(y) & Q.extended_positive(z)) is None
- assert ask(Q.finite(a), Q.negative_infinite(x)
- & Q.positive_infinite(y) & Q.positive_infinite(z)) is None
- assert ask(Q.finite(a), Q.negative_infinite(x)
- & Q.positive_infinite(y) & Q.extended_negative(z)) is None
- assert ask(Q.finite(a), Q.negative_infinite(x)
- & Q.positive_infinite(y)) is None
- assert ask(Q.finite(a), Q.negative_infinite(x)
- & Q.positive_infinite(y) & Q.extended_positive(z)) is None
- assert ask(Q.finite(a), Q.negative_infinite(x)
- & Q.extended_negative(y) & Q.extended_negative(z)) is False
- assert ask(Q.finite(a), Q.negative_infinite(x)
- & Q.extended_negative(y)) is None
- assert ask(Q.finite(a), Q.negative_infinite(x)
- & Q.extended_negative(y) & Q.extended_positive(z)) is None
- assert ask(Q.finite(a), Q.negative_infinite(x)) is None
- assert ask(Q.finite(a), Q.negative_infinite(x)
- & Q.extended_positive(z)) is None
- assert ask(Q.finite(a), Q.negative_infinite(x)
- & Q.extended_positive(y) & Q.extended_positive(z)) is None
- assert ask(Q.finite(a), ~Q.finite(x) & ~Q.finite(y)
- & ~Q.finite(z)) is None
- assert ask(Q.finite(a), ~Q.finite(x) & Q.positive_infinite(z)
- & ~Q.finite(z)) is None
- assert ask(Q.finite(a), ~Q.finite(x) & ~Q.finite(y)
- & Q.extended_negative(z)) is None
- assert ask(Q.finite(a), ~Q.finite(x) & ~Q.finite(y)) is None
- assert ask(Q.finite(a), ~Q.finite(x) & ~Q.finite(y)
- & Q.extended_positive(z)) is None
- assert ask(Q.finite(a), ~Q.finite(x) & Q.positive_infinite(y)
- & Q.positive_infinite(z)) is None
- assert ask(Q.finite(a), ~Q.finite(x) & Q.positive_infinite(y)
- & Q.extended_negative(z)) is None
- assert ask(Q.finite(a), ~Q.finite(x)
- & Q.positive_infinite(y)) is None
- assert ask(Q.finite(a), ~Q.finite(x) & Q.positive_infinite(y)
- & Q.extended_positive(z)) is None
- assert ask(Q.finite(a), ~Q.finite(x) & Q.extended_negative(y)
- & Q.extended_negative(z)) is None
- assert ask(Q.finite(a), ~Q.finite(x)
- & Q.extended_negative(y)) is None
- assert ask(Q.finite(a), ~Q.finite(x) & Q.extended_negative(y)
- & Q.extended_positive(z)) is None
- assert ask(Q.finite(a), ~Q.finite(x)) is None
- assert ask(Q.finite(a), ~Q.finite(x)
- & Q.extended_positive(z)) is None
- assert ask(Q.finite(a), ~Q.finite(x) & Q.extended_positive(y)
- & Q.extended_positive(z)) is None
- assert ask(Q.finite(a), Q.positive_infinite(x)
- & Q.positive_infinite(y) & Q.positive_infinite(z)) is False
- assert ask(Q.finite(a), Q.positive_infinite(x)
- & Q.positive_infinite(y) & Q.extended_negative(z)) is None
- assert ask(Q.finite(a), Q.positive_infinite(x)
- & Q.positive_infinite(y)) is None
- assert ask(Q.finite(a), Q.positive_infinite(x)
- & Q.positive_infinite(y) & Q.extended_positive(z)) is False
- assert ask(Q.finite(a), Q.positive_infinite(x)
- & Q.extended_negative(y) & Q.extended_negative(z)) is None
- assert ask(Q.finite(a), Q.positive_infinite(x)
- & Q.extended_negative(y)) is None
- assert ask(Q.finite(a), Q.positive_infinite(x)
- & Q.extended_negative(y) & Q.extended_positive(z)) is None
- assert ask(Q.finite(a), Q.positive_infinite(x)) is None
- assert ask(Q.finite(a), Q.positive_infinite(x)
- & Q.extended_positive(z)) is None
- assert ask(Q.finite(a), Q.positive_infinite(x)
- & Q.extended_positive(y) & Q.extended_positive(z)) is False
- assert ask(Q.finite(a), Q.extended_negative(x)
- & Q.extended_negative(y) & Q.extended_negative(z)) is None
- assert ask(Q.finite(a), Q.extended_negative(x)
- & Q.extended_negative(y)) is None
- assert ask(Q.finite(a), Q.extended_negative(x)
- & Q.extended_negative(y) & Q.extended_positive(z)) is None
- assert ask(Q.finite(a), Q.extended_negative(x)) is None
- assert ask(Q.finite(a), Q.extended_negative(x)
- & Q.extended_positive(z)) is None
- assert ask(Q.finite(a), Q.extended_negative(x)
- & Q.extended_positive(y) & Q.extended_positive(z)) is None
- assert ask(Q.finite(a)) is None
- assert ask(Q.finite(a), Q.extended_positive(z)) is None
- assert ask(Q.finite(a), Q.extended_positive(y)
- & Q.extended_positive(z)) is None
- assert ask(Q.finite(a), Q.extended_positive(x)
- & Q.extended_positive(y) & Q.extended_positive(z)) is None
- assert ask(Q.finite(2*x)) is None
- assert ask(Q.finite(2*x), Q.finite(x)) is True
- x, y, z = symbols('x,y,z')
- a = x*y
- x, y = a.args
- assert ask(Q.finite(a), Q.finite(x) & Q.finite(y)) is True
- assert ask(Q.finite(a), Q.finite(x) & ~Q.finite(y)) is False
- assert ask(Q.finite(a), Q.finite(x)) is None
- assert ask(Q.finite(a), ~Q.finite(x) & Q.finite(y)) is False
- assert ask(Q.finite(a), ~Q.finite(x) & ~Q.finite(y)) is False
- assert ask(Q.finite(a), ~Q.finite(x)) is None
- assert ask(Q.finite(a), Q.finite(y)) is None
- assert ask(Q.finite(a), ~Q.finite(y)) is None
- assert ask(Q.finite(a)) is None
- a = x*y*z
- x, y, z = a.args
- assert ask(Q.finite(a), Q.finite(x) & Q.finite(y)
- & Q.finite(z)) is True
- assert ask(Q.finite(a), Q.finite(x) & Q.finite(y)
- & ~Q.finite(z)) is False
- assert ask(Q.finite(a), Q.finite(x) & Q.finite(y)) is None
- assert ask(Q.finite(a), Q.finite(x) & ~Q.finite(y)
- & Q.finite(z)) is False
- assert ask(Q.finite(a), Q.finite(x) & ~Q.finite(y)
- & ~Q.finite(z)) is False
- assert ask(Q.finite(a), Q.finite(x) & ~Q.finite(y)) is None
- assert ask(Q.finite(a), Q.finite(x) & Q.finite(z)) is None
- assert ask(Q.finite(a), Q.finite(x) & ~Q.finite(z)) is None
- assert ask(Q.finite(a), Q.finite(x)) is None
- assert ask(Q.finite(a), ~Q.finite(x) & Q.finite(y)
- & Q.finite(z)) is False
- assert ask(Q.finite(a), ~Q.finite(x) & Q.finite(y)
- & ~Q.finite(z)) is False
- assert ask(Q.finite(a), ~Q.finite(x) & Q.finite(y)) is None
- assert ask(Q.finite(a), ~Q.finite(x) & ~Q.finite(y)
- & Q.finite(z)) is False
- assert ask(Q.finite(a), ~Q.finite(x) & ~Q.finite(y)
- & ~Q.finite(z)) is False
- assert ask(Q.finite(a), ~Q.finite(x) & ~Q.finite(y)) is None
- assert ask(Q.finite(a), ~Q.finite(x) & Q.finite(z)) is None
- assert ask(Q.finite(a), ~Q.finite(x) & ~Q.finite(z)) is None
- assert ask(Q.finite(a), ~Q.finite(x)) is None
- assert ask(Q.finite(a), Q.finite(y) & Q.finite(z)) is None
- assert ask(Q.finite(a), Q.finite(y) & ~Q.finite(z)) is None
- assert ask(Q.finite(a), Q.finite(y)) is None
- assert ask(Q.finite(a), ~Q.finite(y) & Q.finite(z)) is None
- assert ask(Q.finite(a), ~Q.finite(y) & ~Q.finite(z)) is None
- assert ask(Q.finite(a), ~Q.finite(y)) is None
- assert ask(Q.finite(a), Q.finite(z)) is None
- assert ask(Q.finite(a), ~Q.finite(z)) is None
- assert ask(Q.finite(a), ~Q.finite(z) & Q.extended_nonzero(x)
- & Q.extended_nonzero(y) & Q.extended_nonzero(z)) is None
- assert ask(Q.finite(a), Q.extended_nonzero(x) & ~Q.finite(y)
- & Q.extended_nonzero(y) & ~Q.finite(z)
- & Q.extended_nonzero(z)) is False
- x, y, z = symbols('x,y,z')
- assert ask(Q.finite(x**2)) is None
- assert ask(Q.finite(2**x)) is None
- assert ask(Q.finite(2**x), Q.finite(x)) is True
- assert ask(Q.finite(x**x)) is None
- assert ask(Q.finite(S.Half ** x)) is None
- assert ask(Q.finite(S.Half ** x), Q.extended_positive(x)) is True
- assert ask(Q.finite(S.Half ** x), Q.extended_negative(x)) is None
- assert ask(Q.finite(2**x), Q.extended_negative(x)) is True
- assert ask(Q.finite(sqrt(x))) is None
- assert ask(Q.finite(2**x), ~Q.finite(x)) is False
- assert ask(Q.finite(x**2), ~Q.finite(x)) is False
- # sign function
- assert ask(Q.finite(sign(x))) is True
- assert ask(Q.finite(sign(x)), ~Q.finite(x)) is True
- # exponential functions
- assert ask(Q.finite(log(x))) is None
- assert ask(Q.finite(log(x)), Q.finite(x)) is None
- assert ask(Q.finite(log(x)), ~Q.zero(x)) is True
- assert ask(Q.finite(log(x)), Q.infinite(x)) is False
- assert ask(Q.finite(log(x)), Q.zero(x)) is False
- assert ask(Q.finite(exp(x))) is None
- assert ask(Q.finite(exp(x)), Q.finite(x)) is True
- assert ask(Q.finite(exp(2))) is True
- # trigonometric functions
- assert ask(Q.finite(sin(x))) is True
- assert ask(Q.finite(sin(x)), ~Q.finite(x)) is True
- assert ask(Q.finite(cos(x))) is True
- assert ask(Q.finite(cos(x)), ~Q.finite(x)) is True
- assert ask(Q.finite(2*sin(x))) is True
- assert ask(Q.finite(sin(x)**2)) is True
- assert ask(Q.finite(cos(x)**2)) is True
- assert ask(Q.finite(cos(x) + sin(x))) is True
- @XFAIL
- def test_bounded_xfail():
- """We need to support relations in ask for this to work"""
- assert ask(Q.finite(sin(x)**x)) is True
- assert ask(Q.finite(cos(x)**x)) is True
- def test_commutative():
- """By default objects are Q.commutative that is why it returns True
- for both key=True and key=False"""
- assert ask(Q.commutative(x)) is True
- assert ask(Q.commutative(x), ~Q.commutative(x)) is False
- assert ask(Q.commutative(x), Q.complex(x)) is True
- assert ask(Q.commutative(x), Q.imaginary(x)) is True
- assert ask(Q.commutative(x), Q.real(x)) is True
- assert ask(Q.commutative(x), Q.positive(x)) is True
- assert ask(Q.commutative(x), ~Q.commutative(y)) is True
- assert ask(Q.commutative(2*x)) is True
- assert ask(Q.commutative(2*x), ~Q.commutative(x)) is False
- assert ask(Q.commutative(x + 1)) is True
- assert ask(Q.commutative(x + 1), ~Q.commutative(x)) is False
- assert ask(Q.commutative(x**2)) is True
- assert ask(Q.commutative(x**2), ~Q.commutative(x)) is False
- assert ask(Q.commutative(log(x))) is True
- @_both_exp_pow
- def test_complex():
- assert ask(Q.complex(x)) is None
- assert ask(Q.complex(x), Q.complex(x)) is True
- assert ask(Q.complex(x), Q.complex(y)) is None
- assert ask(Q.complex(x), ~Q.complex(x)) is False
- assert ask(Q.complex(x), Q.real(x)) is True
- assert ask(Q.complex(x), ~Q.real(x)) is None
- assert ask(Q.complex(x), Q.rational(x)) is True
- assert ask(Q.complex(x), Q.irrational(x)) is True
- assert ask(Q.complex(x), Q.positive(x)) is True
- assert ask(Q.complex(x), Q.imaginary(x)) is True
- assert ask(Q.complex(x), Q.algebraic(x)) is True
- # a+b
- assert ask(Q.complex(x + 1), Q.complex(x)) is True
- assert ask(Q.complex(x + 1), Q.real(x)) is True
- assert ask(Q.complex(x + 1), Q.rational(x)) is True
- assert ask(Q.complex(x + 1), Q.irrational(x)) is True
- assert ask(Q.complex(x + 1), Q.imaginary(x)) is True
- assert ask(Q.complex(x + 1), Q.integer(x)) is True
- assert ask(Q.complex(x + 1), Q.even(x)) is True
- assert ask(Q.complex(x + 1), Q.odd(x)) is True
- assert ask(Q.complex(x + y), Q.complex(x) & Q.complex(y)) is True
- assert ask(Q.complex(x + y), Q.real(x) & Q.imaginary(y)) is True
- # a*x +b
- assert ask(Q.complex(2*x + 1), Q.complex(x)) is True
- assert ask(Q.complex(2*x + 1), Q.real(x)) is True
- assert ask(Q.complex(2*x + 1), Q.positive(x)) is True
- assert ask(Q.complex(2*x + 1), Q.rational(x)) is True
- assert ask(Q.complex(2*x + 1), Q.irrational(x)) is True
- assert ask(Q.complex(2*x + 1), Q.imaginary(x)) is True
- assert ask(Q.complex(2*x + 1), Q.integer(x)) is True
- assert ask(Q.complex(2*x + 1), Q.even(x)) is True
- assert ask(Q.complex(2*x + 1), Q.odd(x)) is True
- # x**2
- assert ask(Q.complex(x**2), Q.complex(x)) is True
- assert ask(Q.complex(x**2), Q.real(x)) is True
- assert ask(Q.complex(x**2), Q.positive(x)) is True
- assert ask(Q.complex(x**2), Q.rational(x)) is True
- assert ask(Q.complex(x**2), Q.irrational(x)) is True
- assert ask(Q.complex(x**2), Q.imaginary(x)) is True
- assert ask(Q.complex(x**2), Q.integer(x)) is True
- assert ask(Q.complex(x**2), Q.even(x)) is True
- assert ask(Q.complex(x**2), Q.odd(x)) is True
- # 2**x
- assert ask(Q.complex(2**x), Q.complex(x)) is True
- assert ask(Q.complex(2**x), Q.real(x)) is True
- assert ask(Q.complex(2**x), Q.positive(x)) is True
- assert ask(Q.complex(2**x), Q.rational(x)) is True
- assert ask(Q.complex(2**x), Q.irrational(x)) is True
- assert ask(Q.complex(2**x), Q.imaginary(x)) is True
- assert ask(Q.complex(2**x), Q.integer(x)) is True
- assert ask(Q.complex(2**x), Q.even(x)) is True
- assert ask(Q.complex(2**x), Q.odd(x)) is True
- assert ask(Q.complex(x**y), Q.complex(x) & Q.complex(y)) is True
- # trigonometric expressions
- assert ask(Q.complex(sin(x))) is True
- assert ask(Q.complex(sin(2*x + 1))) is True
- assert ask(Q.complex(cos(x))) is True
- assert ask(Q.complex(cos(2*x + 1))) is True
- # exponential
- assert ask(Q.complex(exp(x))) is True
- assert ask(Q.complex(exp(x))) is True
- # Q.complexes
- assert ask(Q.complex(Abs(x))) is True
- assert ask(Q.complex(re(x))) is True
- assert ask(Q.complex(im(x))) is True
- def test_even_query():
- assert ask(Q.even(x)) is None
- assert ask(Q.even(x), Q.integer(x)) is None
- assert ask(Q.even(x), ~Q.integer(x)) is False
- assert ask(Q.even(x), Q.rational(x)) is None
- assert ask(Q.even(x), Q.positive(x)) is None
- assert ask(Q.even(2*x)) is None
- assert ask(Q.even(2*x), Q.integer(x)) is True
- assert ask(Q.even(2*x), Q.even(x)) is True
- assert ask(Q.even(2*x), Q.irrational(x)) is False
- assert ask(Q.even(2*x), Q.odd(x)) is True
- assert ask(Q.even(2*x), ~Q.integer(x)) is None
- assert ask(Q.even(3*x), Q.integer(x)) is None
- assert ask(Q.even(3*x), Q.even(x)) is True
- assert ask(Q.even(3*x), Q.odd(x)) is False
- assert ask(Q.even(x + 1), Q.odd(x)) is True
- assert ask(Q.even(x + 1), Q.even(x)) is False
- assert ask(Q.even(x + 2), Q.odd(x)) is False
- assert ask(Q.even(x + 2), Q.even(x)) is True
- assert ask(Q.even(7 - x), Q.odd(x)) is True
- assert ask(Q.even(7 + x), Q.odd(x)) is True
- assert ask(Q.even(x + y), Q.odd(x) & Q.odd(y)) is True
- assert ask(Q.even(x + y), Q.odd(x) & Q.even(y)) is False
- assert ask(Q.even(x + y), Q.even(x) & Q.even(y)) is True
- assert ask(Q.even(2*x + 1), Q.integer(x)) is False
- assert ask(Q.even(2*x*y), Q.rational(x) & Q.rational(x)) is None
- assert ask(Q.even(2*x*y), Q.irrational(x) & Q.irrational(x)) is None
- assert ask(Q.even(x + y + z), Q.odd(x) & Q.odd(y) & Q.even(z)) is True
- assert ask(Q.even(x + y + z + t),
- Q.odd(x) & Q.odd(y) & Q.even(z) & Q.integer(t)) is None
- assert ask(Q.even(Abs(x)), Q.even(x)) is True
- assert ask(Q.even(Abs(x)), ~Q.even(x)) is None
- assert ask(Q.even(re(x)), Q.even(x)) is True
- assert ask(Q.even(re(x)), ~Q.even(x)) is None
- assert ask(Q.even(im(x)), Q.even(x)) is True
- assert ask(Q.even(im(x)), Q.real(x)) is True
- assert ask(Q.even((-1)**n), Q.integer(n)) is False
- assert ask(Q.even(k**2), Q.even(k)) is True
- assert ask(Q.even(n**2), Q.odd(n)) is False
- assert ask(Q.even(2**k), Q.even(k)) is None
- assert ask(Q.even(x**2)) is None
- assert ask(Q.even(k**m), Q.even(k) & Q.integer(m) & ~Q.negative(m)) is None
- assert ask(Q.even(n**m), Q.odd(n) & Q.integer(m) & ~Q.negative(m)) is False
- assert ask(Q.even(k**p), Q.even(k) & Q.integer(p) & Q.positive(p)) is True
- assert ask(Q.even(n**p), Q.odd(n) & Q.integer(p) & Q.positive(p)) is False
- assert ask(Q.even(m**k), Q.even(k) & Q.integer(m) & ~Q.negative(m)) is None
- assert ask(Q.even(p**k), Q.even(k) & Q.integer(p) & Q.positive(p)) is None
- assert ask(Q.even(m**n), Q.odd(n) & Q.integer(m) & ~Q.negative(m)) is None
- assert ask(Q.even(p**n), Q.odd(n) & Q.integer(p) & Q.positive(p)) is None
- assert ask(Q.even(k**x), Q.even(k)) is None
- assert ask(Q.even(n**x), Q.odd(n)) is None
- assert ask(Q.even(x*y), Q.integer(x) & Q.integer(y)) is None
- assert ask(Q.even(x*x), Q.integer(x)) is None
- assert ask(Q.even(x*(x + y)), Q.integer(x) & Q.odd(y)) is True
- assert ask(Q.even(x*(x + y)), Q.integer(x) & Q.even(y)) is None
- @XFAIL
- def test_evenness_in_ternary_integer_product_with_odd():
- # Tests that oddness inference is independent of term ordering.
- # Term ordering at the point of testing depends on SymPy's symbol order, so
- # we try to force a different order by modifying symbol names.
- assert ask(Q.even(x*y*(y + z)), Q.integer(x) & Q.integer(y) & Q.odd(z)) is True
- assert ask(Q.even(y*x*(x + z)), Q.integer(x) & Q.integer(y) & Q.odd(z)) is True
- def test_evenness_in_ternary_integer_product_with_even():
- assert ask(Q.even(x*y*(y + z)), Q.integer(x) & Q.integer(y) & Q.even(z)) is None
- def test_extended_real():
- assert ask(Q.extended_real(x), Q.positive_infinite(x)) is True
- assert ask(Q.extended_real(x), Q.positive(x)) is True
- assert ask(Q.extended_real(x), Q.zero(x)) is True
- assert ask(Q.extended_real(x), Q.negative(x)) is True
- assert ask(Q.extended_real(x), Q.negative_infinite(x)) is True
- assert ask(Q.extended_real(-x), Q.positive(x)) is True
- assert ask(Q.extended_real(-x), Q.negative(x)) is True
- assert ask(Q.extended_real(x + S.Infinity), Q.real(x)) is True
- assert ask(Q.extended_real(x), Q.infinite(x)) is None
- @_both_exp_pow
- def test_rational():
- assert ask(Q.rational(x), Q.integer(x)) is True
- assert ask(Q.rational(x), Q.irrational(x)) is False
- assert ask(Q.rational(x), Q.real(x)) is None
- assert ask(Q.rational(x), Q.positive(x)) is None
- assert ask(Q.rational(x), Q.negative(x)) is None
- assert ask(Q.rational(x), Q.nonzero(x)) is None
- assert ask(Q.rational(x), ~Q.algebraic(x)) is False
- assert ask(Q.rational(2*x), Q.rational(x)) is True
- assert ask(Q.rational(2*x), Q.integer(x)) is True
- assert ask(Q.rational(2*x), Q.even(x)) is True
- assert ask(Q.rational(2*x), Q.odd(x)) is True
- assert ask(Q.rational(2*x), Q.irrational(x)) is False
- assert ask(Q.rational(x/2), Q.rational(x)) is True
- assert ask(Q.rational(x/2), Q.integer(x)) is True
- assert ask(Q.rational(x/2), Q.even(x)) is True
- assert ask(Q.rational(x/2), Q.odd(x)) is True
- assert ask(Q.rational(x/2), Q.irrational(x)) is False
- assert ask(Q.rational(1/x), Q.rational(x)) is True
- assert ask(Q.rational(1/x), Q.integer(x)) is True
- assert ask(Q.rational(1/x), Q.even(x)) is True
- assert ask(Q.rational(1/x), Q.odd(x)) is True
- assert ask(Q.rational(1/x), Q.irrational(x)) is False
- assert ask(Q.rational(2/x), Q.rational(x)) is True
- assert ask(Q.rational(2/x), Q.integer(x)) is True
- assert ask(Q.rational(2/x), Q.even(x)) is True
- assert ask(Q.rational(2/x), Q.odd(x)) is True
- assert ask(Q.rational(2/x), Q.irrational(x)) is False
- assert ask(Q.rational(x), ~Q.algebraic(x)) is False
- # with multiple symbols
- assert ask(Q.rational(x*y), Q.irrational(x) & Q.irrational(y)) is None
- assert ask(Q.rational(y/x), Q.rational(x) & Q.rational(y)) is True
- assert ask(Q.rational(y/x), Q.integer(x) & Q.rational(y)) is True
- assert ask(Q.rational(y/x), Q.even(x) & Q.rational(y)) is True
- assert ask(Q.rational(y/x), Q.odd(x) & Q.rational(y)) is True
- assert ask(Q.rational(y/x), Q.irrational(x) & Q.rational(y)) is False
- for f in [exp, sin, tan, asin, atan, cos]:
- assert ask(Q.rational(f(7))) is False
- assert ask(Q.rational(f(7, evaluate=False))) is False
- assert ask(Q.rational(f(0, evaluate=False))) is True
- assert ask(Q.rational(f(x)), Q.rational(x)) is None
- assert ask(Q.rational(f(x)), Q.rational(x) & Q.nonzero(x)) is False
- for g in [log, acos]:
- assert ask(Q.rational(g(7))) is False
- assert ask(Q.rational(g(7, evaluate=False))) is False
- assert ask(Q.rational(g(1, evaluate=False))) is True
- assert ask(Q.rational(g(x)), Q.rational(x)) is None
- assert ask(Q.rational(g(x)), Q.rational(x) & Q.nonzero(x - 1)) is False
- for h in [cot, acot]:
- assert ask(Q.rational(h(7))) is False
- assert ask(Q.rational(h(7, evaluate=False))) is False
- assert ask(Q.rational(h(x)), Q.rational(x)) is False
- def test_hermitian():
- assert ask(Q.hermitian(x)) is None
- assert ask(Q.hermitian(x), Q.antihermitian(x)) is None
- assert ask(Q.hermitian(x), Q.imaginary(x)) is False
- assert ask(Q.hermitian(x), Q.prime(x)) is True
- assert ask(Q.hermitian(x), Q.real(x)) is True
- assert ask(Q.hermitian(x), Q.zero(x)) is True
- assert ask(Q.hermitian(x + 1), Q.antihermitian(x)) is None
- assert ask(Q.hermitian(x + 1), Q.complex(x)) is None
- assert ask(Q.hermitian(x + 1), Q.hermitian(x)) is True
- assert ask(Q.hermitian(x + 1), Q.imaginary(x)) is False
- assert ask(Q.hermitian(x + 1), Q.real(x)) is True
- assert ask(Q.hermitian(x + I), Q.antihermitian(x)) is None
- assert ask(Q.hermitian(x + I), Q.complex(x)) is None
- assert ask(Q.hermitian(x + I), Q.hermitian(x)) is False
- assert ask(Q.hermitian(x + I), Q.imaginary(x)) is None
- assert ask(Q.hermitian(x + I), Q.real(x)) is False
- assert ask(
- Q.hermitian(x + y), Q.antihermitian(x) & Q.antihermitian(y)) is None
- assert ask(Q.hermitian(x + y), Q.antihermitian(x) & Q.complex(y)) is None
- assert ask(
- Q.hermitian(x + y), Q.antihermitian(x) & Q.hermitian(y)) is None
- assert ask(Q.hermitian(x + y), Q.antihermitian(x) & Q.imaginary(y)) is None
- assert ask(Q.hermitian(x + y), Q.antihermitian(x) & Q.real(y)) is None
- assert ask(Q.hermitian(x + y), Q.hermitian(x) & Q.complex(y)) is None
- assert ask(Q.hermitian(x + y), Q.hermitian(x) & Q.hermitian(y)) is True
- assert ask(Q.hermitian(x + y), Q.hermitian(x) & Q.imaginary(y)) is False
- assert ask(Q.hermitian(x + y), Q.hermitian(x) & Q.real(y)) is True
- assert ask(Q.hermitian(x + y), Q.imaginary(x) & Q.complex(y)) is None
- assert ask(Q.hermitian(x + y), Q.imaginary(x) & Q.imaginary(y)) is None
- assert ask(Q.hermitian(x + y), Q.imaginary(x) & Q.real(y)) is False
- assert ask(Q.hermitian(x + y), Q.real(x) & Q.complex(y)) is None
- assert ask(Q.hermitian(x + y), Q.real(x) & Q.real(y)) is True
- assert ask(Q.hermitian(I*x), Q.antihermitian(x)) is True
- assert ask(Q.hermitian(I*x), Q.complex(x)) is None
- assert ask(Q.hermitian(I*x), Q.hermitian(x)) is False
- assert ask(Q.hermitian(I*x), Q.imaginary(x)) is True
- assert ask(Q.hermitian(I*x), Q.real(x)) is False
- assert ask(Q.hermitian(x*y), Q.hermitian(x) & Q.real(y)) is True
- assert ask(
- Q.hermitian(x + y + z), Q.real(x) & Q.real(y) & Q.real(z)) is True
- assert ask(Q.hermitian(x + y + z),
- Q.real(x) & Q.real(y) & Q.imaginary(z)) is False
- assert ask(Q.hermitian(x + y + z),
- Q.real(x) & Q.imaginary(y) & Q.imaginary(z)) is None
- assert ask(Q.hermitian(x + y + z),
- Q.imaginary(x) & Q.imaginary(y) & Q.imaginary(z)) is None
- assert ask(Q.antihermitian(x)) is None
- assert ask(Q.antihermitian(x), Q.real(x)) is False
- assert ask(Q.antihermitian(x), Q.prime(x)) is False
- assert ask(Q.antihermitian(x + 1), Q.antihermitian(x)) is False
- assert ask(Q.antihermitian(x + 1), Q.complex(x)) is None
- assert ask(Q.antihermitian(x + 1), Q.hermitian(x)) is None
- assert ask(Q.antihermitian(x + 1), Q.imaginary(x)) is False
- assert ask(Q.antihermitian(x + 1), Q.real(x)) is None
- assert ask(Q.antihermitian(x + I), Q.antihermitian(x)) is True
- assert ask(Q.antihermitian(x + I), Q.complex(x)) is None
- assert ask(Q.antihermitian(x + I), Q.hermitian(x)) is None
- assert ask(Q.antihermitian(x + I), Q.imaginary(x)) is True
- assert ask(Q.antihermitian(x + I), Q.real(x)) is False
- assert ask(Q.antihermitian(x), Q.zero(x)) is True
- assert ask(
- Q.antihermitian(x + y), Q.antihermitian(x) & Q.antihermitian(y)
- ) is True
- assert ask(
- Q.antihermitian(x + y), Q.antihermitian(x) & Q.complex(y)) is None
- assert ask(
- Q.antihermitian(x + y), Q.antihermitian(x) & Q.hermitian(y)) is None
- assert ask(
- Q.antihermitian(x + y), Q.antihermitian(x) & Q.imaginary(y)) is True
- assert ask(Q.antihermitian(x + y), Q.antihermitian(x) & Q.real(y)
- ) is False
- assert ask(Q.antihermitian(x + y), Q.hermitian(x) & Q.complex(y)) is None
- assert ask(Q.antihermitian(x + y), Q.hermitian(x) & Q.hermitian(y)
- ) is None
- assert ask(
- Q.antihermitian(x + y), Q.hermitian(x) & Q.imaginary(y)) is None
- assert ask(Q.antihermitian(x + y), Q.hermitian(x) & Q.real(y)) is None
- assert ask(Q.antihermitian(x + y), Q.imaginary(x) & Q.complex(y)) is None
- assert ask(Q.antihermitian(x + y), Q.imaginary(x) & Q.imaginary(y)) is True
- assert ask(Q.antihermitian(x + y), Q.imaginary(x) & Q.real(y)) is False
- assert ask(Q.antihermitian(x + y), Q.real(x) & Q.complex(y)) is None
- assert ask(Q.antihermitian(x + y), Q.real(x) & Q.real(y)) is None
- assert ask(Q.antihermitian(I*x), Q.real(x)) is True
- assert ask(Q.antihermitian(I*x), Q.antihermitian(x)) is False
- assert ask(Q.antihermitian(I*x), Q.complex(x)) is None
- assert ask(Q.antihermitian(x*y), Q.antihermitian(x) & Q.real(y)) is True
- assert ask(Q.antihermitian(x + y + z),
- Q.real(x) & Q.real(y) & Q.real(z)) is None
- assert ask(Q.antihermitian(x + y + z),
- Q.real(x) & Q.real(y) & Q.imaginary(z)) is None
- assert ask(Q.antihermitian(x + y + z),
- Q.real(x) & Q.imaginary(y) & Q.imaginary(z)) is False
- assert ask(Q.antihermitian(x + y + z),
- Q.imaginary(x) & Q.imaginary(y) & Q.imaginary(z)) is True
- @_both_exp_pow
- def test_imaginary():
- assert ask(Q.imaginary(x)) is None
- assert ask(Q.imaginary(x), Q.real(x)) is False
- assert ask(Q.imaginary(x), Q.prime(x)) is False
- assert ask(Q.imaginary(x + 1), Q.real(x)) is False
- assert ask(Q.imaginary(x + 1), Q.imaginary(x)) is False
- assert ask(Q.imaginary(x + I), Q.real(x)) is False
- assert ask(Q.imaginary(x + I), Q.imaginary(x)) is True
- assert ask(Q.imaginary(x + y), Q.imaginary(x) & Q.imaginary(y)) is True
- assert ask(Q.imaginary(x + y), Q.real(x) & Q.real(y)) is False
- assert ask(Q.imaginary(x + y), Q.imaginary(x) & Q.real(y)) is False
- assert ask(Q.imaginary(x + y), Q.complex(x) & Q.real(y)) is None
- assert ask(
- Q.imaginary(x + y + z), Q.real(x) & Q.real(y) & Q.real(z)) is False
- assert ask(Q.imaginary(x + y + z),
- Q.real(x) & Q.real(y) & Q.imaginary(z)) is None
- assert ask(Q.imaginary(x + y + z),
- Q.real(x) & Q.imaginary(y) & Q.imaginary(z)) is False
- assert ask(Q.imaginary(I*x), Q.real(x)) is True
- assert ask(Q.imaginary(I*x), Q.imaginary(x)) is False
- assert ask(Q.imaginary(I*x), Q.complex(x)) is None
- assert ask(Q.imaginary(x*y), Q.imaginary(x) & Q.real(y)) is True
- assert ask(Q.imaginary(x*y), Q.real(x) & Q.real(y)) is False
- assert ask(Q.imaginary(I**x), Q.negative(x)) is None
- assert ask(Q.imaginary(I**x), Q.positive(x)) is None
- assert ask(Q.imaginary(I**x), Q.even(x)) is False
- assert ask(Q.imaginary(I**x), Q.odd(x)) is True
- assert ask(Q.imaginary(I**x), Q.imaginary(x)) is False
- assert ask(Q.imaginary((2*I)**x), Q.imaginary(x)) is False
- assert ask(Q.imaginary(x**0), Q.imaginary(x)) is False
- assert ask(Q.imaginary(x**y), Q.imaginary(x) & Q.imaginary(y)) is None
- assert ask(Q.imaginary(x**y), Q.imaginary(x) & Q.real(y)) is None
- assert ask(Q.imaginary(x**y), Q.real(x) & Q.imaginary(y)) is None
- assert ask(Q.imaginary(x**y), Q.real(x) & Q.real(y)) is None
- assert ask(Q.imaginary(x**y), Q.imaginary(x) & Q.integer(y)) is None
- assert ask(Q.imaginary(x**y), Q.imaginary(y) & Q.integer(x)) is None
- assert ask(Q.imaginary(x**y), Q.imaginary(x) & Q.odd(y)) is True
- assert ask(Q.imaginary(x**y), Q.imaginary(x) & Q.rational(y)) is None
- assert ask(Q.imaginary(x**y), Q.imaginary(x) & Q.even(y)) is False
- assert ask(Q.imaginary(x**y), Q.real(x) & Q.integer(y)) is False
- assert ask(Q.imaginary(x**y), Q.positive(x) & Q.real(y)) is False
- assert ask(Q.imaginary(x**y), Q.negative(x) & Q.real(y)) is None
- assert ask(Q.imaginary(x**y), Q.negative(x) & Q.real(y) & ~Q.rational(y)) is False
- assert ask(Q.imaginary(x**y), Q.integer(x) & Q.imaginary(y)) is None
- assert ask(Q.imaginary(x**y), Q.negative(x) & Q.rational(y) & Q.integer(2*y)) is True
- assert ask(Q.imaginary(x**y), Q.negative(x) & Q.rational(y) & ~Q.integer(2*y)) is False
- assert ask(Q.imaginary(x**y), Q.negative(x) & Q.rational(y)) is None
- assert ask(Q.imaginary(x**y), Q.real(x) & Q.rational(y) & ~Q.integer(2*y)) is False
- assert ask(Q.imaginary(x**y), Q.real(x) & Q.rational(y) & Q.integer(2*y)) is None
- # logarithm
- assert ask(Q.imaginary(log(I))) is True
- assert ask(Q.imaginary(log(2*I))) is False
- assert ask(Q.imaginary(log(I + 1))) is False
- assert ask(Q.imaginary(log(x)), Q.complex(x)) is None
- assert ask(Q.imaginary(log(x)), Q.imaginary(x)) is None
- assert ask(Q.imaginary(log(x)), Q.positive(x)) is False
- assert ask(Q.imaginary(log(exp(x))), Q.complex(x)) is None
- assert ask(Q.imaginary(log(exp(x))), Q.imaginary(x)) is None # zoo/I/a+I*b
- assert ask(Q.imaginary(log(exp(I)))) is True
- # exponential
- assert ask(Q.imaginary(exp(x)**x), Q.imaginary(x)) is False
- eq = Pow(exp(pi*I*x, evaluate=False), x, evaluate=False)
- assert ask(Q.imaginary(eq), Q.even(x)) is False
- eq = Pow(exp(pi*I*x/2, evaluate=False), x, evaluate=False)
- assert ask(Q.imaginary(eq), Q.odd(x)) is True
- assert ask(Q.imaginary(exp(3*I*pi*x)**x), Q.integer(x)) is False
- assert ask(Q.imaginary(exp(2*pi*I, evaluate=False))) is False
- assert ask(Q.imaginary(exp(pi*I/2, evaluate=False))) is True
- # issue 7886
- assert ask(Q.imaginary(Pow(x, Rational(1, 4))), Q.real(x) & Q.negative(x)) is False
- def test_integer():
- assert ask(Q.integer(x)) is None
- assert ask(Q.integer(x), Q.integer(x)) is True
- assert ask(Q.integer(x), ~Q.integer(x)) is False
- assert ask(Q.integer(x), ~Q.real(x)) is False
- assert ask(Q.integer(x), ~Q.positive(x)) is None
- assert ask(Q.integer(x), Q.even(x) | Q.odd(x)) is True
- assert ask(Q.integer(2*x), Q.integer(x)) is True
- assert ask(Q.integer(2*x), Q.even(x)) is True
- assert ask(Q.integer(2*x), Q.prime(x)) is True
- assert ask(Q.integer(2*x), Q.rational(x)) is None
- assert ask(Q.integer(2*x), Q.real(x)) is None
- assert ask(Q.integer(sqrt(2)*x), Q.integer(x)) is False
- assert ask(Q.integer(sqrt(2)*x), Q.irrational(x)) is None
- assert ask(Q.integer(x/2), Q.odd(x)) is False
- assert ask(Q.integer(x/2), Q.even(x)) is True
- assert ask(Q.integer(x/3), Q.odd(x)) is None
- assert ask(Q.integer(x/3), Q.even(x)) is None
- def test_negative():
- assert ask(Q.negative(x), Q.negative(x)) is True
- assert ask(Q.negative(x), Q.positive(x)) is False
- assert ask(Q.negative(x), ~Q.real(x)) is False
- assert ask(Q.negative(x), Q.prime(x)) is False
- assert ask(Q.negative(x), ~Q.prime(x)) is None
- assert ask(Q.negative(-x), Q.positive(x)) is True
- assert ask(Q.negative(-x), ~Q.positive(x)) is None
- assert ask(Q.negative(-x), Q.negative(x)) is False
- assert ask(Q.negative(-x), Q.positive(x)) is True
- assert ask(Q.negative(x - 1), Q.negative(x)) is True
- assert ask(Q.negative(x + y)) is None
- assert ask(Q.negative(x + y), Q.negative(x)) is None
- assert ask(Q.negative(x + y), Q.negative(x) & Q.negative(y)) is True
- assert ask(Q.negative(x + y), Q.negative(x) & Q.nonpositive(y)) is True
- assert ask(Q.negative(2 + I)) is False
- # although this could be False, it is representative of expressions
- # that don't evaluate to a zero with precision
- assert ask(Q.negative(cos(I)**2 + sin(I)**2 - 1)) is None
- assert ask(Q.negative(-I + I*(cos(2)**2 + sin(2)**2))) is None
- assert ask(Q.negative(x**2)) is None
- assert ask(Q.negative(x**2), Q.real(x)) is False
- assert ask(Q.negative(x**1.4), Q.real(x)) is None
- assert ask(Q.negative(x**I), Q.positive(x)) is None
- assert ask(Q.negative(x*y)) is None
- assert ask(Q.negative(x*y), Q.positive(x) & Q.positive(y)) is False
- assert ask(Q.negative(x*y), Q.positive(x) & Q.negative(y)) is True
- assert ask(Q.negative(x*y), Q.complex(x) & Q.complex(y)) is None
- assert ask(Q.negative(x**y)) is None
- assert ask(Q.negative(x**y), Q.negative(x) & Q.even(y)) is False
- assert ask(Q.negative(x**y), Q.negative(x) & Q.odd(y)) is True
- assert ask(Q.negative(x**y), Q.positive(x) & Q.integer(y)) is False
- assert ask(Q.negative(Abs(x))) is False
- def test_nonzero():
- assert ask(Q.nonzero(x)) is None
- assert ask(Q.nonzero(x), Q.real(x)) is None
- assert ask(Q.nonzero(x), Q.positive(x)) is True
- assert ask(Q.nonzero(x), Q.negative(x)) is True
- assert ask(Q.nonzero(x), Q.negative(x) | Q.positive(x)) is True
- assert ask(Q.nonzero(x + y)) is None
- assert ask(Q.nonzero(x + y), Q.positive(x) & Q.positive(y)) is True
- assert ask(Q.nonzero(x + y), Q.positive(x) & Q.negative(y)) is None
- assert ask(Q.nonzero(x + y), Q.negative(x) & Q.negative(y)) is True
- assert ask(Q.nonzero(2*x)) is None
- assert ask(Q.nonzero(2*x), Q.positive(x)) is True
- assert ask(Q.nonzero(2*x), Q.negative(x)) is True
- assert ask(Q.nonzero(x*y), Q.nonzero(x)) is None
- assert ask(Q.nonzero(x*y), Q.nonzero(x) & Q.nonzero(y)) is True
- assert ask(Q.nonzero(x**y), Q.nonzero(x)) is True
- assert ask(Q.nonzero(Abs(x))) is None
- assert ask(Q.nonzero(Abs(x)), Q.nonzero(x)) is True
- assert ask(Q.nonzero(log(exp(2*I)))) is False
- # although this could be False, it is representative of expressions
- # that don't evaluate to a zero with precision
- assert ask(Q.nonzero(cos(1)**2 + sin(1)**2 - 1)) is None
- def test_zero():
- assert ask(Q.zero(x)) is None
- assert ask(Q.zero(x), Q.real(x)) is None
- assert ask(Q.zero(x), Q.positive(x)) is False
- assert ask(Q.zero(x), Q.negative(x)) is False
- assert ask(Q.zero(x), Q.negative(x) | Q.positive(x)) is False
- assert ask(Q.zero(x), Q.nonnegative(x) & Q.nonpositive(x)) is True
- assert ask(Q.zero(x + y)) is None
- assert ask(Q.zero(x + y), Q.positive(x) & Q.positive(y)) is False
- assert ask(Q.zero(x + y), Q.positive(x) & Q.negative(y)) is None
- assert ask(Q.zero(x + y), Q.negative(x) & Q.negative(y)) is False
- assert ask(Q.zero(2*x)) is None
- assert ask(Q.zero(2*x), Q.positive(x)) is False
- assert ask(Q.zero(2*x), Q.negative(x)) is False
- assert ask(Q.zero(x*y), Q.nonzero(x)) is None
- assert ask(Q.zero(Abs(x))) is None
- assert ask(Q.zero(Abs(x)), Q.zero(x)) is True
- assert ask(Q.integer(x), Q.zero(x)) is True
- assert ask(Q.even(x), Q.zero(x)) is True
- assert ask(Q.odd(x), Q.zero(x)) is False
- assert ask(Q.zero(x), Q.even(x)) is None
- assert ask(Q.zero(x), Q.odd(x)) is False
- assert ask(Q.zero(x) | Q.zero(y), Q.zero(x*y)) is True
- def test_odd_query():
- assert ask(Q.odd(x)) is None
- assert ask(Q.odd(x), Q.odd(x)) is True
- assert ask(Q.odd(x), Q.integer(x)) is None
- assert ask(Q.odd(x), ~Q.integer(x)) is False
- assert ask(Q.odd(x), Q.rational(x)) is None
- assert ask(Q.odd(x), Q.positive(x)) is None
- assert ask(Q.odd(-x), Q.odd(x)) is True
- assert ask(Q.odd(2*x)) is None
- assert ask(Q.odd(2*x), Q.integer(x)) is False
- assert ask(Q.odd(2*x), Q.odd(x)) is False
- assert ask(Q.odd(2*x), Q.irrational(x)) is False
- assert ask(Q.odd(2*x), ~Q.integer(x)) is None
- assert ask(Q.odd(3*x), Q.integer(x)) is None
- assert ask(Q.odd(x/3), Q.odd(x)) is None
- assert ask(Q.odd(x/3), Q.even(x)) is None
- assert ask(Q.odd(x + 1), Q.even(x)) is True
- assert ask(Q.odd(x + 2), Q.even(x)) is False
- assert ask(Q.odd(x + 2), Q.odd(x)) is True
- assert ask(Q.odd(3 - x), Q.odd(x)) is False
- assert ask(Q.odd(3 - x), Q.even(x)) is True
- assert ask(Q.odd(3 + x), Q.odd(x)) is False
- assert ask(Q.odd(3 + x), Q.even(x)) is True
- assert ask(Q.odd(x + y), Q.odd(x) & Q.odd(y)) is False
- assert ask(Q.odd(x + y), Q.odd(x) & Q.even(y)) is True
- assert ask(Q.odd(x - y), Q.even(x) & Q.odd(y)) is True
- assert ask(Q.odd(x - y), Q.odd(x) & Q.odd(y)) is False
- assert ask(Q.odd(x + y + z), Q.odd(x) & Q.odd(y) & Q.even(z)) is False
- assert ask(Q.odd(x + y + z + t),
- Q.odd(x) & Q.odd(y) & Q.even(z) & Q.integer(t)) is None
- assert ask(Q.odd(2*x + 1), Q.integer(x)) is True
- assert ask(Q.odd(2*x + y), Q.integer(x) & Q.odd(y)) is True
- assert ask(Q.odd(2*x + y), Q.integer(x) & Q.even(y)) is False
- assert ask(Q.odd(2*x + y), Q.integer(x) & Q.integer(y)) is None
- assert ask(Q.odd(x*y), Q.odd(x) & Q.even(y)) is False
- assert ask(Q.odd(x*y), Q.odd(x) & Q.odd(y)) is True
- assert ask(Q.odd(2*x*y), Q.rational(x) & Q.rational(x)) is None
- assert ask(Q.odd(2*x*y), Q.irrational(x) & Q.irrational(x)) is None
- assert ask(Q.odd(Abs(x)), Q.odd(x)) is True
- assert ask(Q.odd((-1)**n), Q.integer(n)) is True
- assert ask(Q.odd(k**2), Q.even(k)) is False
- assert ask(Q.odd(n**2), Q.odd(n)) is True
- assert ask(Q.odd(3**k), Q.even(k)) is None
- assert ask(Q.odd(k**m), Q.even(k) & Q.integer(m) & ~Q.negative(m)) is None
- assert ask(Q.odd(n**m), Q.odd(n) & Q.integer(m) & ~Q.negative(m)) is True
- assert ask(Q.odd(k**p), Q.even(k) & Q.integer(p) & Q.positive(p)) is False
- assert ask(Q.odd(n**p), Q.odd(n) & Q.integer(p) & Q.positive(p)) is True
- assert ask(Q.odd(m**k), Q.even(k) & Q.integer(m) & ~Q.negative(m)) is None
- assert ask(Q.odd(p**k), Q.even(k) & Q.integer(p) & Q.positive(p)) is None
- assert ask(Q.odd(m**n), Q.odd(n) & Q.integer(m) & ~Q.negative(m)) is None
- assert ask(Q.odd(p**n), Q.odd(n) & Q.integer(p) & Q.positive(p)) is None
- assert ask(Q.odd(k**x), Q.even(k)) is None
- assert ask(Q.odd(n**x), Q.odd(n)) is None
- assert ask(Q.odd(x*y), Q.integer(x) & Q.integer(y)) is None
- assert ask(Q.odd(x*x), Q.integer(x)) is None
- assert ask(Q.odd(x*(x + y)), Q.integer(x) & Q.odd(y)) is False
- assert ask(Q.odd(x*(x + y)), Q.integer(x) & Q.even(y)) is None
- @XFAIL
- def test_oddness_in_ternary_integer_product_with_odd():
- # Tests that oddness inference is independent of term ordering.
- # Term ordering at the point of testing depends on SymPy's symbol order, so
- # we try to force a different order by modifying symbol names.
- assert ask(Q.odd(x*y*(y + z)), Q.integer(x) & Q.integer(y) & Q.odd(z)) is False
- assert ask(Q.odd(y*x*(x + z)), Q.integer(x) & Q.integer(y) & Q.odd(z)) is False
- def test_oddness_in_ternary_integer_product_with_even():
- assert ask(Q.odd(x*y*(y + z)), Q.integer(x) & Q.integer(y) & Q.even(z)) is None
- def test_prime():
- assert ask(Q.prime(x), Q.prime(x)) is True
- assert ask(Q.prime(x), ~Q.prime(x)) is False
- assert ask(Q.prime(x), Q.integer(x)) is None
- assert ask(Q.prime(x), ~Q.integer(x)) is False
- assert ask(Q.prime(2*x), Q.integer(x)) is None
- assert ask(Q.prime(x*y)) is None
- assert ask(Q.prime(x*y), Q.prime(x)) is None
- assert ask(Q.prime(x*y), Q.integer(x) & Q.integer(y)) is None
- assert ask(Q.prime(4*x), Q.integer(x)) is False
- assert ask(Q.prime(4*x)) is None
- assert ask(Q.prime(x**2), Q.integer(x)) is False
- assert ask(Q.prime(x**2), Q.prime(x)) is False
- assert ask(Q.prime(x**y), Q.integer(x) & Q.integer(y)) is False
- @_both_exp_pow
- def test_positive():
- assert ask(Q.positive(x), Q.positive(x)) is True
- assert ask(Q.positive(x), Q.negative(x)) is False
- assert ask(Q.positive(x), Q.nonzero(x)) is None
- assert ask(Q.positive(-x), Q.positive(x)) is False
- assert ask(Q.positive(-x), Q.negative(x)) is True
- assert ask(Q.positive(x + y), Q.positive(x) & Q.positive(y)) is True
- assert ask(Q.positive(x + y), Q.positive(x) & Q.nonnegative(y)) is True
- assert ask(Q.positive(x + y), Q.positive(x) & Q.negative(y)) is None
- assert ask(Q.positive(x + y), Q.positive(x) & Q.imaginary(y)) is False
- assert ask(Q.positive(2*x), Q.positive(x)) is True
- assumptions = Q.positive(x) & Q.negative(y) & Q.negative(z) & Q.positive(w)
- assert ask(Q.positive(x*y*z)) is None
- assert ask(Q.positive(x*y*z), assumptions) is True
- assert ask(Q.positive(-x*y*z), assumptions) is False
- assert ask(Q.positive(x**I), Q.positive(x)) is None
- assert ask(Q.positive(x**2), Q.positive(x)) is True
- assert ask(Q.positive(x**2), Q.negative(x)) is True
- assert ask(Q.positive(x**3), Q.negative(x)) is False
- assert ask(Q.positive(1/(1 + x**2)), Q.real(x)) is True
- assert ask(Q.positive(2**I)) is False
- assert ask(Q.positive(2 + I)) is False
- # although this could be False, it is representative of expressions
- # that don't evaluate to a zero with precision
- assert ask(Q.positive(cos(I)**2 + sin(I)**2 - 1)) is None
- assert ask(Q.positive(-I + I*(cos(2)**2 + sin(2)**2))) is None
- #exponential
- assert ask(Q.positive(exp(x)), Q.real(x)) is True
- assert ask(~Q.negative(exp(x)), Q.real(x)) is True
- assert ask(Q.positive(x + exp(x)), Q.real(x)) is None
- assert ask(Q.positive(exp(x)), Q.imaginary(x)) is None
- assert ask(Q.positive(exp(2*pi*I, evaluate=False)), Q.imaginary(x)) is True
- assert ask(Q.negative(exp(pi*I, evaluate=False)), Q.imaginary(x)) is True
- assert ask(Q.positive(exp(x*pi*I)), Q.even(x)) is True
- assert ask(Q.positive(exp(x*pi*I)), Q.odd(x)) is False
- assert ask(Q.positive(exp(x*pi*I)), Q.real(x)) is None
- # logarithm
- assert ask(Q.positive(log(x)), Q.imaginary(x)) is False
- assert ask(Q.positive(log(x)), Q.negative(x)) is False
- assert ask(Q.positive(log(x)), Q.positive(x)) is None
- assert ask(Q.positive(log(x + 2)), Q.positive(x)) is True
- # factorial
- assert ask(Q.positive(factorial(x)), Q.integer(x) & Q.positive(x))
- assert ask(Q.positive(factorial(x)), Q.integer(x)) is None
- #absolute value
- assert ask(Q.positive(Abs(x))) is None # Abs(0) = 0
- assert ask(Q.positive(Abs(x)), Q.positive(x)) is True
- def test_nonpositive():
- assert ask(Q.nonpositive(-1))
- assert ask(Q.nonpositive(0))
- assert ask(Q.nonpositive(1)) is False
- assert ask(~Q.positive(x), Q.nonpositive(x))
- assert ask(Q.nonpositive(x), Q.positive(x)) is False
- assert ask(Q.nonpositive(sqrt(-1))) is False
- assert ask(Q.nonpositive(x), Q.imaginary(x)) is False
- def test_nonnegative():
- assert ask(Q.nonnegative(-1)) is False
- assert ask(Q.nonnegative(0))
- assert ask(Q.nonnegative(1))
- assert ask(~Q.negative(x), Q.nonnegative(x))
- assert ask(Q.nonnegative(x), Q.negative(x)) is False
- assert ask(Q.nonnegative(sqrt(-1))) is False
- assert ask(Q.nonnegative(x), Q.imaginary(x)) is False
- def test_real_basic():
- assert ask(Q.real(x)) is None
- assert ask(Q.real(x), Q.real(x)) is True
- assert ask(Q.real(x), Q.nonzero(x)) is True
- assert ask(Q.real(x), Q.positive(x)) is True
- assert ask(Q.real(x), Q.negative(x)) is True
- assert ask(Q.real(x), Q.integer(x)) is True
- assert ask(Q.real(x), Q.even(x)) is True
- assert ask(Q.real(x), Q.prime(x)) is True
- assert ask(Q.real(x/sqrt(2)), Q.real(x)) is True
- assert ask(Q.real(x/sqrt(-2)), Q.real(x)) is False
- assert ask(Q.real(x + 1), Q.real(x)) is True
- assert ask(Q.real(x + I), Q.real(x)) is False
- assert ask(Q.real(x + I), Q.complex(x)) is None
- assert ask(Q.real(2*x), Q.real(x)) is True
- assert ask(Q.real(I*x), Q.real(x)) is False
- assert ask(Q.real(I*x), Q.imaginary(x)) is True
- assert ask(Q.real(I*x), Q.complex(x)) is None
- def test_real_pow():
- assert ask(Q.real(x**2), Q.real(x)) is True
- assert ask(Q.real(sqrt(x)), Q.negative(x)) is False
- assert ask(Q.real(x**y), Q.real(x) & Q.integer(y)) is True
- assert ask(Q.real(x**y), Q.real(x) & Q.real(y)) is None
- assert ask(Q.real(x**y), Q.positive(x) & Q.real(y)) is True
- assert ask(Q.real(x**y), Q.imaginary(x) & Q.imaginary(y)) is None # I**I or (2*I)**I
- assert ask(Q.real(x**y), Q.imaginary(x) & Q.real(y)) is None # I**1 or I**0
- assert ask(Q.real(x**y), Q.real(x) & Q.imaginary(y)) is None # could be exp(2*pi*I) or 2**I
- assert ask(Q.real(x**0), Q.imaginary(x)) is True
- assert ask(Q.real(x**y), Q.real(x) & Q.integer(y)) is True
- assert ask(Q.real(x**y), Q.positive(x) & Q.real(y)) is True
- assert ask(Q.real(x**y), Q.real(x) & Q.rational(y)) is None
- assert ask(Q.real(x**y), Q.imaginary(x) & Q.integer(y)) is None
- assert ask(Q.real(x**y), Q.imaginary(x) & Q.odd(y)) is False
- assert ask(Q.real(x**y), Q.imaginary(x) & Q.even(y)) is True
- assert ask(Q.real(x**(y/z)), Q.real(x) & Q.real(y/z) & Q.rational(y/z) & Q.even(z) & Q.positive(x)) is True
- assert ask(Q.real(x**(y/z)), Q.real(x) & Q.rational(y/z) & Q.even(z) & Q.negative(x)) is False
- assert ask(Q.real(x**(y/z)), Q.real(x) & Q.integer(y/z)) is True
- assert ask(Q.real(x**(y/z)), Q.real(x) & Q.real(y/z) & Q.positive(x)) is True
- assert ask(Q.real(x**(y/z)), Q.real(x) & Q.real(y/z) & Q.negative(x)) is False
- assert ask(Q.real((-I)**i), Q.imaginary(i)) is True
- assert ask(Q.real(I**i), Q.imaginary(i)) is True
- assert ask(Q.real(i**i), Q.imaginary(i)) is None # i might be 2*I
- assert ask(Q.real(x**i), Q.imaginary(i)) is None # x could be 0
- assert ask(Q.real(x**(I*pi/log(x))), Q.real(x)) is True
- @_both_exp_pow
- def test_real_functions():
- # trigonometric functions
- assert ask(Q.real(sin(x))) is None
- assert ask(Q.real(cos(x))) is None
- assert ask(Q.real(sin(x)), Q.real(x)) is True
- assert ask(Q.real(cos(x)), Q.real(x)) is True
- # exponential function
- assert ask(Q.real(exp(x))) is None
- assert ask(Q.real(exp(x)), Q.real(x)) is True
- assert ask(Q.real(x + exp(x)), Q.real(x)) is True
- assert ask(Q.real(exp(2*pi*I, evaluate=False))) is True
- assert ask(Q.real(exp(pi*I, evaluate=False))) is True
- assert ask(Q.real(exp(pi*I/2, evaluate=False))) is False
- # logarithm
- assert ask(Q.real(log(I))) is False
- assert ask(Q.real(log(2*I))) is False
- assert ask(Q.real(log(I + 1))) is False
- assert ask(Q.real(log(x)), Q.complex(x)) is None
- assert ask(Q.real(log(x)), Q.imaginary(x)) is False
- assert ask(Q.real(log(exp(x))), Q.imaginary(x)) is None # exp(2*pi*I) is 1, log(exp(pi*I)) is pi*I (disregarding periodicity)
- assert ask(Q.real(log(exp(x))), Q.complex(x)) is None
- eq = Pow(exp(2*pi*I*x, evaluate=False), x, evaluate=False)
- assert ask(Q.real(eq), Q.integer(x)) is True
- assert ask(Q.real(exp(x)**x), Q.imaginary(x)) is True
- assert ask(Q.real(exp(x)**x), Q.complex(x)) is None
- # Q.complexes
- assert ask(Q.real(re(x))) is True
- assert ask(Q.real(im(x))) is True
- def test_matrix():
- # hermitian
- assert ask(Q.hermitian(Matrix([[2, 2 + I, 4], [2 - I, 3, I], [4, -I, 1]]))) == True
- assert ask(Q.hermitian(Matrix([[2, 2 + I, 4], [2 + I, 3, I], [4, -I, 1]]))) == False
- z = symbols('z', complex=True)
- assert ask(Q.hermitian(Matrix([[2, 2 + I, z], [2 - I, 3, I], [4, -I, 1]]))) == None
- assert ask(Q.hermitian(SparseMatrix(((25, 15, -5), (15, 18, 0), (-5, 0, 11))))) == True
- assert ask(Q.hermitian(SparseMatrix(((25, 15, -5), (15, I, 0), (-5, 0, 11))))) == False
- assert ask(Q.hermitian(SparseMatrix(((25, 15, -5), (15, z, 0), (-5, 0, 11))))) == None
- # antihermitian
- A = Matrix([[0, -2 - I, 0], [2 - I, 0, -I], [0, -I, 0]])
- B = Matrix([[-I, 2 + I, 0], [-2 + I, 0, 2 + I], [0, -2 + I, -I]])
- assert ask(Q.antihermitian(A)) is True
- assert ask(Q.antihermitian(B)) is True
- assert ask(Q.antihermitian(A**2)) is False
- C = (B**3)
- C.simplify()
- assert ask(Q.antihermitian(C)) is True
- _A = Matrix([[0, -2 - I, 0], [z, 0, -I], [0, -I, 0]])
- assert ask(Q.antihermitian(_A)) is None
- @_both_exp_pow
- def test_algebraic():
- assert ask(Q.algebraic(x)) is None
- assert ask(Q.algebraic(I)) is True
- assert ask(Q.algebraic(2*I)) is True
- assert ask(Q.algebraic(I/3)) is True
- assert ask(Q.algebraic(sqrt(7))) is True
- assert ask(Q.algebraic(2*sqrt(7))) is True
- assert ask(Q.algebraic(sqrt(7)/3)) is True
- assert ask(Q.algebraic(I*sqrt(3))) is True
- assert ask(Q.algebraic(sqrt(1 + I*sqrt(3)))) is True
- assert ask(Q.algebraic(1 + I*sqrt(3)**Rational(17, 31))) is True
- assert ask(Q.algebraic(1 + I*sqrt(3)**(17/pi))) is False
- for f in [exp, sin, tan, asin, atan, cos]:
- assert ask(Q.algebraic(f(7))) is False
- assert ask(Q.algebraic(f(7, evaluate=False))) is False
- assert ask(Q.algebraic(f(0, evaluate=False))) is True
- assert ask(Q.algebraic(f(x)), Q.algebraic(x)) is None
- assert ask(Q.algebraic(f(x)), Q.algebraic(x) & Q.nonzero(x)) is False
- for g in [log, acos]:
- assert ask(Q.algebraic(g(7))) is False
- assert ask(Q.algebraic(g(7, evaluate=False))) is False
- assert ask(Q.algebraic(g(1, evaluate=False))) is True
- assert ask(Q.algebraic(g(x)), Q.algebraic(x)) is None
- assert ask(Q.algebraic(g(x)), Q.algebraic(x) & Q.nonzero(x - 1)) is False
- for h in [cot, acot]:
- assert ask(Q.algebraic(h(7))) is False
- assert ask(Q.algebraic(h(7, evaluate=False))) is False
- assert ask(Q.algebraic(h(x)), Q.algebraic(x)) is False
- assert ask(Q.algebraic(sqrt(sin(7)))) is False
- assert ask(Q.algebraic(sqrt(y + I*sqrt(7)))) is None
- assert ask(Q.algebraic(2.47)) is True
- assert ask(Q.algebraic(x), Q.transcendental(x)) is False
- assert ask(Q.transcendental(x), Q.algebraic(x)) is False
- def test_global():
- """Test ask with global assumptions"""
- assert ask(Q.integer(x)) is None
- global_assumptions.add(Q.integer(x))
- assert ask(Q.integer(x)) is True
- global_assumptions.clear()
- assert ask(Q.integer(x)) is None
- def test_custom_context():
- """Test ask with custom assumptions context"""
- assert ask(Q.integer(x)) is None
- local_context = AssumptionsContext()
- local_context.add(Q.integer(x))
- assert ask(Q.integer(x), context=local_context) is True
- assert ask(Q.integer(x)) is None
- def test_functions_in_assumptions():
- assert ask(Q.negative(x), Q.real(x) >> Q.positive(x)) is False
- assert ask(Q.negative(x), Equivalent(Q.real(x), Q.positive(x))) is False
- assert ask(Q.negative(x), Xor(Q.real(x), Q.negative(x))) is False
- def test_composite_ask():
- assert ask(Q.negative(x) & Q.integer(x),
- assumptions=Q.real(x) >> Q.positive(x)) is False
- def test_composite_proposition():
- assert ask(True) is True
- assert ask(False) is False
- assert ask(~Q.negative(x), Q.positive(x)) is True
- assert ask(~Q.real(x), Q.commutative(x)) is None
- assert ask(Q.negative(x) & Q.integer(x), Q.positive(x)) is False
- assert ask(Q.negative(x) & Q.integer(x)) is None
- assert ask(Q.real(x) | Q.integer(x), Q.positive(x)) is True
- assert ask(Q.real(x) | Q.integer(x)) is None
- assert ask(Q.real(x) >> Q.positive(x), Q.negative(x)) is False
- assert ask(Implies(
- Q.real(x), Q.positive(x), evaluate=False), Q.negative(x)) is False
- assert ask(Implies(Q.real(x), Q.positive(x), evaluate=False)) is None
- assert ask(Equivalent(Q.integer(x), Q.even(x)), Q.even(x)) is True
- assert ask(Equivalent(Q.integer(x), Q.even(x))) is None
- assert ask(Equivalent(Q.positive(x), Q.integer(x)), Q.integer(x)) is None
- assert ask(Q.real(x) | Q.integer(x), Q.real(x) | Q.integer(x)) is True
- def test_tautology():
- assert ask(Q.real(x) | ~Q.real(x)) is True
- assert ask(Q.real(x) & ~Q.real(x)) is False
- def test_composite_assumptions():
- assert ask(Q.real(x), Q.real(x) & Q.real(y)) is True
- assert ask(Q.positive(x), Q.positive(x) | Q.positive(y)) is None
- assert ask(Q.positive(x), Q.real(x) >> Q.positive(y)) is None
- assert ask(Q.real(x), ~(Q.real(x) >> Q.real(y))) is True
- def test_key_extensibility():
- """test that you can add keys to the ask system at runtime"""
- # make sure the key is not defined
- raises(AttributeError, lambda: ask(Q.my_key(x)))
- # Old handler system
- class MyAskHandler(AskHandler):
- @staticmethod
- def Symbol(expr, assumptions):
- return True
- try:
- with warns_deprecated_sympy():
- register_handler('my_key', MyAskHandler)
- with warns_deprecated_sympy():
- assert ask(Q.my_key(x)) is True
- with warns_deprecated_sympy():
- assert ask(Q.my_key(x + 1)) is None
- finally:
- # We have to disable the stacklevel testing here because this raises
- # the warning twice from two different places
- with warns_deprecated_sympy():
- remove_handler('my_key', MyAskHandler)
- del Q.my_key
- raises(AttributeError, lambda: ask(Q.my_key(x)))
- # New handler system
- class MyPredicate(Predicate):
- pass
- try:
- Q.my_key = MyPredicate()
- @Q.my_key.register(Symbol)
- def _(expr, assumptions):
- return True
- assert ask(Q.my_key(x)) is True
- assert ask(Q.my_key(x+1)) is None
- finally:
- del Q.my_key
- raises(AttributeError, lambda: ask(Q.my_key(x)))
- def test_type_extensibility():
- """test that new types can be added to the ask system at runtime
- """
- from sympy.core import Basic
- class MyType(Basic):
- pass
- @Q.prime.register(MyType)
- def _(expr, assumptions):
- return True
- assert ask(Q.prime(MyType())) is True
- def test_single_fact_lookup():
- known_facts = And(Implies(Q.integer, Q.rational),
- Implies(Q.rational, Q.real),
- Implies(Q.real, Q.complex))
- known_facts_keys = {Q.integer, Q.rational, Q.real, Q.complex}
- known_facts_cnf = to_cnf(known_facts)
- mapping = single_fact_lookup(known_facts_keys, known_facts_cnf)
- assert mapping[Q.rational] == {Q.real, Q.rational, Q.complex}
- def test_generate_known_facts_dict():
- known_facts = And(Implies(Q.integer(x), Q.rational(x)),
- Implies(Q.rational(x), Q.real(x)),
- Implies(Q.real(x), Q.complex(x)))
- known_facts_keys = {Q.integer(x), Q.rational(x), Q.real(x), Q.complex(x)}
- assert generate_known_facts_dict(known_facts_keys, known_facts) == \
- {Q.complex: ({Q.complex}, set()),
- Q.integer: ({Q.complex, Q.integer, Q.rational, Q.real}, set()),
- Q.rational: ({Q.complex, Q.rational, Q.real}, set()),
- Q.real: ({Q.complex, Q.real}, set())}
- @slow
- def test_known_facts_consistent():
- """"Test that ask_generated.py is up-to-date"""
- x = Symbol('x')
- fact = get_known_facts(x)
- # test cnf clauses of fact between unary predicates
- cnf = CNF.to_CNF(fact)
- clauses = set()
- for cl in cnf.clauses:
- clauses.add(frozenset(Literal(lit.arg.function, lit.is_Not) for lit in sorted(cl, key=str)))
- assert get_all_known_facts() == clauses
- # test dictionary of fact between unary predicates
- keys = [pred(x) for pred in get_known_facts_keys()]
- mapping = generate_known_facts_dict(keys, fact)
- assert get_known_facts_dict() == mapping
- def test_Add_queries():
- assert ask(Q.prime(12345678901234567890 + (cos(1)**2 + sin(1)**2))) is True
- assert ask(Q.even(Add(S(2), S(2), evaluate=0))) is True
- assert ask(Q.prime(Add(S(2), S(2), evaluate=0))) is False
- assert ask(Q.integer(Add(S(2), S(2), evaluate=0))) is True
- def test_positive_assuming():
- with assuming(Q.positive(x + 1)):
- assert not ask(Q.positive(x))
- def test_issue_5421():
- raises(TypeError, lambda: ask(pi/log(x), Q.real))
- def test_issue_3906():
- raises(TypeError, lambda: ask(Q.positive))
- def test_issue_5833():
- assert ask(Q.positive(log(x)**2), Q.positive(x)) is None
- assert ask(~Q.negative(log(x)**2), Q.positive(x)) is True
- def test_issue_6732():
- raises(ValueError, lambda: ask(Q.positive(x), Q.positive(x) & Q.negative(x)))
- raises(ValueError, lambda: ask(Q.negative(x), Q.positive(x) & Q.negative(x)))
- def test_issue_7246():
- assert ask(Q.positive(atan(p)), Q.positive(p)) is True
- assert ask(Q.positive(atan(p)), Q.negative(p)) is False
- assert ask(Q.positive(atan(p)), Q.zero(p)) is False
- assert ask(Q.positive(atan(x))) is None
- assert ask(Q.positive(asin(p)), Q.positive(p)) is None
- assert ask(Q.positive(asin(p)), Q.zero(p)) is None
- assert ask(Q.positive(asin(Rational(1, 7)))) is True
- assert ask(Q.positive(asin(x)), Q.positive(x) & Q.nonpositive(x - 1)) is True
- assert ask(Q.positive(asin(x)), Q.negative(x) & Q.nonnegative(x + 1)) is False
- assert ask(Q.positive(acos(p)), Q.positive(p)) is None
- assert ask(Q.positive(acos(Rational(1, 7)))) is True
- assert ask(Q.positive(acos(x)), Q.nonnegative(x + 1) & Q.nonpositive(x - 1)) is True
- assert ask(Q.positive(acos(x)), Q.nonnegative(x - 1)) is None
- assert ask(Q.positive(acot(x)), Q.positive(x)) is True
- assert ask(Q.positive(acot(x)), Q.real(x)) is True
- assert ask(Q.positive(acot(x)), Q.imaginary(x)) is False
- assert ask(Q.positive(acot(x))) is None
- @XFAIL
- def test_issue_7246_failing():
- #Move this test to test_issue_7246 once
- #the new assumptions module is improved.
- assert ask(Q.positive(acos(x)), Q.zero(x)) is True
- def test_check_old_assumption():
- x = symbols('x', real=True)
- assert ask(Q.real(x)) is True
- assert ask(Q.imaginary(x)) is False
- assert ask(Q.complex(x)) is True
- x = symbols('x', imaginary=True)
- assert ask(Q.real(x)) is False
- assert ask(Q.imaginary(x)) is True
- assert ask(Q.complex(x)) is True
- x = symbols('x', complex=True)
- assert ask(Q.real(x)) is None
- assert ask(Q.complex(x)) is True
- x = symbols('x', positive=True)
- assert ask(Q.positive(x)) is True
- assert ask(Q.negative(x)) is False
- assert ask(Q.real(x)) is True
- x = symbols('x', commutative=False)
- assert ask(Q.commutative(x)) is False
- x = symbols('x', negative=True)
- assert ask(Q.positive(x)) is False
- assert ask(Q.negative(x)) is True
- x = symbols('x', nonnegative=True)
- assert ask(Q.negative(x)) is False
- assert ask(Q.positive(x)) is None
- assert ask(Q.zero(x)) is None
- x = symbols('x', finite=True)
- assert ask(Q.finite(x)) is True
- x = symbols('x', prime=True)
- assert ask(Q.prime(x)) is True
- assert ask(Q.composite(x)) is False
- x = symbols('x', composite=True)
- assert ask(Q.prime(x)) is False
- assert ask(Q.composite(x)) is True
- x = symbols('x', even=True)
- assert ask(Q.even(x)) is True
- assert ask(Q.odd(x)) is False
- x = symbols('x', odd=True)
- assert ask(Q.even(x)) is False
- assert ask(Q.odd(x)) is True
- x = symbols('x', nonzero=True)
- assert ask(Q.nonzero(x)) is True
- assert ask(Q.zero(x)) is False
- x = symbols('x', zero=True)
- assert ask(Q.zero(x)) is True
- x = symbols('x', integer=True)
- assert ask(Q.integer(x)) is True
- x = symbols('x', rational=True)
- assert ask(Q.rational(x)) is True
- assert ask(Q.irrational(x)) is False
- x = symbols('x', irrational=True)
- assert ask(Q.irrational(x)) is True
- assert ask(Q.rational(x)) is False
- def test_issue_9636():
- assert ask(Q.integer(1.0)) is False
- assert ask(Q.prime(3.0)) is False
- assert ask(Q.composite(4.0)) is False
- assert ask(Q.even(2.0)) is False
- assert ask(Q.odd(3.0)) is False
- def test_autosimp_used_to_fail():
- # See issue #9807
- assert ask(Q.imaginary(0**I)) is None
- assert ask(Q.imaginary(0**(-I))) is None
- assert ask(Q.real(0**I)) is None
- assert ask(Q.real(0**(-I))) is None
- def test_custom_AskHandler():
- from sympy.logic.boolalg import conjuncts
- # Old handler system
- class MersenneHandler(AskHandler):
- @staticmethod
- def Integer(expr, assumptions):
- if ask(Q.integer(log(expr + 1, 2))):
- return True
- @staticmethod
- def Symbol(expr, assumptions):
- if expr in conjuncts(assumptions):
- return True
- try:
- with warns_deprecated_sympy():
- register_handler('mersenne', MersenneHandler)
- n = Symbol('n', integer=True)
- with warns_deprecated_sympy():
- assert ask(Q.mersenne(7))
- with warns_deprecated_sympy():
- assert ask(Q.mersenne(n), Q.mersenne(n))
- finally:
- del Q.mersenne
- # New handler system
- class MersennePredicate(Predicate):
- pass
- try:
- Q.mersenne = MersennePredicate()
- @Q.mersenne.register(Integer)
- def _(expr, assumptions):
- if ask(Q.integer(log(expr + 1, 2))):
- return True
- @Q.mersenne.register(Symbol)
- def _(expr, assumptions):
- if expr in conjuncts(assumptions):
- return True
- assert ask(Q.mersenne(7))
- assert ask(Q.mersenne(n), Q.mersenne(n))
- finally:
- del Q.mersenne
- def test_polyadic_predicate():
- class SexyPredicate(Predicate):
- pass
- try:
- Q.sexyprime = SexyPredicate()
- @Q.sexyprime.register(Integer, Integer)
- def _(int1, int2, assumptions):
- args = sorted([int1, int2])
- if not all(ask(Q.prime(a), assumptions) for a in args):
- return False
- return args[1] - args[0] == 6
- @Q.sexyprime.register(Integer, Integer, Integer)
- def _(int1, int2, int3, assumptions):
- args = sorted([int1, int2, int3])
- if not all(ask(Q.prime(a), assumptions) for a in args):
- return False
- return args[2] - args[1] == 6 and args[1] - args[0] == 6
- assert ask(Q.sexyprime(5, 11))
- assert ask(Q.sexyprime(7, 13, 19))
- finally:
- del Q.sexyprime
- def test_Predicate_handler_is_unique():
- # Undefined predicate does not have a handler
- assert Predicate('mypredicate').handler is None
- # Handler of defined predicate is unique to the class
- class MyPredicate(Predicate):
- pass
- mp1 = MyPredicate(Str('mp1'))
- mp2 = MyPredicate(Str('mp2'))
- assert mp1.handler is mp2.handler
- def test_relational():
- assert ask(Q.eq(x, 0), Q.zero(x))
- assert not ask(Q.eq(x, 0), Q.nonzero(x))
- assert not ask(Q.ne(x, 0), Q.zero(x))
- assert ask(Q.ne(x, 0), Q.nonzero(x))
|