| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541 |
- 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 None
- 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 None
- assert ask(Q.odd(z)) is None
- assert ask(Q.finite(z)) is True
- assert ask(Q.prime(z)) is None
- assert ask(Q.composite(z)) is None
- 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 None
- 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')
- a = x + y
- x, y = a.args
- assert ask(Q.finite(a), Q.positive_infinite(y)) is None
- 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.zero(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) &~Q.zero(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.zero(x) & Q.finite(y)
- & ~Q.zero(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.zero(x) & ~Q.finite(y)
- & Q.finite(z) & ~Q.zero(z)) is False
- assert ask(Q.finite(a), Q.finite(x) & ~Q.zero(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.zero(y)
- & Q.finite(z) & ~Q.zero(z)) is False
- assert ask(Q.finite(a), ~Q.finite(x) & ~Q.zero(x) & Q.finite(y)
- & ~Q.zero(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) & ~Q.zero(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
- # https://github.com/sympy/sympy/issues/27707
- assert ask(Q.finite(x**y), Q.real(x) & Q.real(y)) is None
- assert ask(Q.finite(x**y), Q.real(x) & Q.negative(y)) is None
- assert ask(Q.finite(x**y), Q.zero(x) & Q.negative(y)) is False
- assert ask(Q.finite(x**y), Q.real(x) & Q.positive(y)) is True
- assert ask(Q.finite(x**y), Q.nonzero(x) & Q.real(y)) is True
- assert ask(Q.finite(x**y), Q.nonzero(x) & Q.negative(y)) is True
- assert ask(Q.finite(x**y), Q.zero(x) & Q.positive(y)) is True
- # 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
- def test_unbounded():
- assert ask(Q.infinite(I * oo)) is True
- assert ask(Q.infinite(1 + I*oo)) is True
- assert ask(Q.infinite(3 * (I * oo))) is True
- assert ask(Q.infinite(-I * oo)) is True
- assert ask(Q.infinite(1 + zoo)) is True
- assert ask(Q.infinite(I * zoo)) is True
- assert ask(Q.infinite(x / y), Q.infinite(x) & Q.finite(y) & ~Q.zero(y)) is True
- assert ask(Q.infinite(I * oo - I * oo)) is None
- assert ask(Q.infinite(x * I * oo)) is None
- assert ask(Q.infinite(1 / x), Q.finite(x) & ~Q.zero(x)) is False
- assert ask(Q.infinite(1 / (I * oo))) is False
- def test_issue_27441():
- # https://github.com/sympy/sympy/issues/27441
- assert ask(Q.composite(y), Q.integer(y) & Q.positive(y) & ~Q.prime(y)) is None
- def test_issue_27447():
- x,y,z = symbols('x y z')
- a = x*y
- assert ask(Q.finite(a), Q.finite(x) & ~Q.finite(y)) is None
- assert ask(Q.finite(a), ~Q.finite(x) & Q.finite(y)) is None
- a = x*y*z
- 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.finite(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.finite(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.finite(z)) is None
- @XFAIL
- def test_issue_27662_xfail():
- assert ask(Q.finite(x*y), ~Q.finite(x)
- & Q.zero(y)) is None
- @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) & Q.nonzero(x)) is True
- assert ask(Q.rational(1/x), Q.integer(x) & Q.nonzero(x)) is True
- assert ask(Q.rational(1/x), Q.even(x) & Q.nonzero(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) & Q.nonzero(x)) is True
- assert ask(Q.rational(2/x), Q.integer(x) & Q.nonzero(x)) is True
- assert ask(Q.rational(2/x), Q.even(x) & Q.nonzero(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) & Q.nonzero(x)) is True
- assert ask(Q.rational(y/x), Q.integer(x) & Q.rational(y) & Q.nonzero(x)) is True
- assert ask(Q.rational(y/x), Q.even(x) & Q.rational(y) & Q.nonzero(x)) 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) & Q.nonzero(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
- # https://github.com/sympy/sympy/issues/27442
- assert ask(Q.rational(x**y),Q.irrational(x) & Q.rational(y)) is None
- assert ask(Q.rational(x**y),Q.integer(x) & Q.prime(x) & Q.rational(y)) is None
- assert ask(Q.rational(x**y),Q.integer(x) & Q.integer(y)) is None
- assert ask(Q.rational(x**y),Q.integer(x) & Q.eq(x,0) & Q.integer(y)) is None
- assert ask(Q.rational(x**y),Q.eq(x,1) & Q.rational(y)) is None
- assert ask(Q.rational(x**y),Q.eq(x,-1) & Q.rational(y)) is None
- assert ask(Q.rational(x**y), Q.prime(x) & Q.rational(y)) is None
- assert ask(Q.rational(x**y), ~Q.rational(x) & Q.integer(y) ) is None
- assert ask(Q.rational(Pow(-1, x, evaluate=False), Q.rational(x))) is None
- assert ask(Q.rational(x**y), Q.integer(y) & ~Q. algebraic(x)) is None
- assert ask(Q.rational(x**y), Q.integer(y) & ~Q. algebraic(x) & ~Q.zero(x)) is None
- assert ask(Q.rational(x**y), Q.integer(y) & ~Q.algebraic(x) & Q.complex(x) & ~Q.real(x)) is None
- assert ask(Q.rational(x**y), Q.integer(y) & ~Q.algebraic(x) & Q.complex(x)) is None
- 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
- # https://github.com/sympy/sympy/issues/7286
- assert ask(Q.integer(Abs(x)),Q.integer(x)) is True
- assert ask(Q.integer(Abs(-x)),Q.integer(x)) is True
- assert ask(Q.integer(Abs(x)), ~Q.integer(x)) is None
- assert ask(Q.integer(Abs(x)),Q.complex(x)) is None
- assert ask(Q.integer(Abs(x+I*y)),Q.real(x) & Q.real(y)) is None
- # https://github.com/sympy/sympy/issues/27739
- assert ask(Q.integer(x/y), Q.integer(x) & Q.integer(y)) is None
- assert ask(Q.integer(1/x), Q.integer(x)) is None
- assert ask(Q.integer(x**y), Q.integer(x) & Q.integer(y)) is None
- assert ask(Q.integer(sqrt(5))) is False
- assert ask(Q.integer(x**y), Q.nonzero(x) & Q.zero(y)) is True
- assert ask(Q.integer(x**y), Q.integer(x) & Q.integer(y) & Q.positive(y)) is True
- assert ask(Q.integer(-1**x), Q.integer(x)) is True
- assert ask(Q.integer(x**y), Q.integer(x) & Q.integer(y) & Q.positive(y)) is True
- assert ask(Q.integer(x**y), Q.zero(x) & Q.integer(y) & Q.positive(y)) is True
- assert ask(Q.integer(pi**x), Q.zero(x)) is True
- assert ask(Q.integer(x**y), Q.imaginary(x) & Q.zero(y)) is True
- 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
- # https://github.com/sympy/sympy/issues/27446
- assert ask(Q.prime(4**x), Q.integer(x)) is False
- assert ask(Q.prime(p**x), Q.prime(p) & Q.integer(x) & Q.ne(x, 1)) is False
- assert ask(Q.prime(n**x), Q.integer(x) & Q.composite(n)) is False
- assert ask(Q.prime(x**y), Q.integer(x) & Q.integer(y)) is None
- assert ask(Q.prime(2**x), Q.integer(x)) is None
- assert ask(Q.prime(p**x), Q.prime(p) & Q.integer(x)) is None
- # Ideally, these should return True since the base is prime and the exponent is one,
- # but currently, they return None.
- assert ask(Q.prime(x**y), Q.prime(x) & Q.eq(y,1)) is None
- assert ask(Q.prime(x**y), Q.prime(x) & Q.integer(y) & Q.gt(y,0) & Q.lt(y,2)) is None
- assert ask(Q.prime(Pow(x,1, evaluate=False)), Q.prime(x)) is True
- @_both_exp_pow
- def test_positive():
- assert ask(Q.positive(cos(I) ** 2 + sin(I) ** 2 - 1)) is None
- 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 None
- 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.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 None
- assert ask(Q.real(x**(y/z)), Q.real(x) & Q.integer(y/z)) is None
- 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 None
- 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
- # https://github.com/sympy/sympy/issues/27485
- assert ask(Q.real(n**p), Q.negative(n) & Q.positive(p)) is None
- # https://github.com/sympy/sympy/issues/16530
- assert ask(Q.real(1/Abs(x))) is None
- assert ask(Q.real(x**y), Q.zero(x) & Q.real(y)) is None
- assert ask(Q.real(x**y), Q.zero(x) & Q.positive(y)) 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 None
- 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 None
- 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
- #https://github.com/sympy/sympy/issues/27445
- assert ask(Q.algebraic(Pow(1, x, evaluate=False)), Q.algebraic(x)) is None
- assert ask(Q.algebraic(Pow(x, y))) is None
- assert ask(Q.algebraic(Pow(1, x, evaluate=False))) is None
- assert ask(Q.algebraic(x**(pi*I))) is None
- assert ask(Q.algebraic(pi**n),Q.integer(n) & Q.positive(n)) is False
- assert ask(Q.algebraic(x**y),Q.algebraic(x) & Q.rational(y)) is True
- 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()
- clauses.update(frozenset(Literal(lit.arg.function, lit.is_Not) for lit in sorted(cl, key=str)) for cl in cnf.clauses)
- 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=False))) is True
- assert ask(Q.prime(Add(S(2), S(2), evaluate=False))) is False
- assert ask(Q.integer(Add(S(2), S(2), evaluate=False))) 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 None
- assert ask(Q.prime(3.0)) is None
- assert ask(Q.composite(4.0)) is None
- assert ask(Q.even(2.0)) is None
- assert ask(Q.odd(3.0)) is None
- 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))
- def test_issue_25221():
- assert ask(Q.transcendental(x), Q.algebraic(x) | Q.positive(y,y)) is None
- assert ask(Q.transcendental(x), Q.algebraic(x) | (0 > y)) is None
- assert ask(Q.transcendental(x), Q.algebraic(x) | Q.gt(0,y)) is None
- def test_issue_27440():
- nan = S.NaN
- assert ask(Q.negative(nan)) is None
|