test_query.py 102 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541
  1. from sympy.abc import t, w, x, y, z, n, k, m, p, i
  2. from sympy.assumptions import (ask, AssumptionsContext, Q, register_handler,
  3. remove_handler)
  4. from sympy.assumptions.assume import assuming, global_assumptions, Predicate
  5. from sympy.assumptions.cnf import CNF, Literal
  6. from sympy.assumptions.facts import (single_fact_lookup,
  7. get_known_facts, generate_known_facts_dict, get_known_facts_keys)
  8. from sympy.assumptions.handlers import AskHandler
  9. from sympy.assumptions.ask_generated import (get_all_known_facts,
  10. get_known_facts_dict)
  11. from sympy.core.add import Add
  12. from sympy.core.numbers import (I, Integer, Rational, oo, zoo, pi)
  13. from sympy.core.singleton import S
  14. from sympy.core.power import Pow
  15. from sympy.core.symbol import Str, symbols, Symbol
  16. from sympy.functions.combinatorial.factorials import factorial
  17. from sympy.functions.elementary.complexes import (Abs, im, re, sign)
  18. from sympy.functions.elementary.exponential import (exp, log)
  19. from sympy.functions.elementary.miscellaneous import sqrt
  20. from sympy.functions.elementary.trigonometric import (
  21. acos, acot, asin, atan, cos, cot, sin, tan)
  22. from sympy.logic.boolalg import Equivalent, Implies, Xor, And, to_cnf
  23. from sympy.matrices import Matrix, SparseMatrix
  24. from sympy.testing.pytest import (XFAIL, slow, raises, warns_deprecated_sympy,
  25. _both_exp_pow)
  26. import math
  27. def test_int_1():
  28. z = 1
  29. assert ask(Q.commutative(z)) is True
  30. assert ask(Q.integer(z)) is True
  31. assert ask(Q.rational(z)) is True
  32. assert ask(Q.real(z)) is True
  33. assert ask(Q.complex(z)) is True
  34. assert ask(Q.irrational(z)) is False
  35. assert ask(Q.imaginary(z)) is False
  36. assert ask(Q.positive(z)) is True
  37. assert ask(Q.negative(z)) is False
  38. assert ask(Q.even(z)) is False
  39. assert ask(Q.odd(z)) is True
  40. assert ask(Q.finite(z)) is True
  41. assert ask(Q.prime(z)) is False
  42. assert ask(Q.composite(z)) is False
  43. assert ask(Q.hermitian(z)) is True
  44. assert ask(Q.antihermitian(z)) is False
  45. def test_int_11():
  46. z = 11
  47. assert ask(Q.commutative(z)) is True
  48. assert ask(Q.integer(z)) is True
  49. assert ask(Q.rational(z)) is True
  50. assert ask(Q.real(z)) is True
  51. assert ask(Q.complex(z)) is True
  52. assert ask(Q.irrational(z)) is False
  53. assert ask(Q.imaginary(z)) is False
  54. assert ask(Q.positive(z)) is True
  55. assert ask(Q.negative(z)) is False
  56. assert ask(Q.even(z)) is False
  57. assert ask(Q.odd(z)) is True
  58. assert ask(Q.finite(z)) is True
  59. assert ask(Q.prime(z)) is True
  60. assert ask(Q.composite(z)) is False
  61. assert ask(Q.hermitian(z)) is True
  62. assert ask(Q.antihermitian(z)) is False
  63. def test_int_12():
  64. z = 12
  65. assert ask(Q.commutative(z)) is True
  66. assert ask(Q.integer(z)) is True
  67. assert ask(Q.rational(z)) is True
  68. assert ask(Q.real(z)) is True
  69. assert ask(Q.complex(z)) is True
  70. assert ask(Q.irrational(z)) is False
  71. assert ask(Q.imaginary(z)) is False
  72. assert ask(Q.positive(z)) is True
  73. assert ask(Q.negative(z)) is False
  74. assert ask(Q.even(z)) is True
  75. assert ask(Q.odd(z)) is False
  76. assert ask(Q.finite(z)) is True
  77. assert ask(Q.prime(z)) is False
  78. assert ask(Q.composite(z)) is True
  79. assert ask(Q.hermitian(z)) is True
  80. assert ask(Q.antihermitian(z)) is False
  81. def test_float_1():
  82. z = 1.0
  83. assert ask(Q.commutative(z)) is True
  84. assert ask(Q.integer(z)) is None
  85. assert ask(Q.rational(z)) is None
  86. assert ask(Q.real(z)) is True
  87. assert ask(Q.complex(z)) is True
  88. assert ask(Q.irrational(z)) is None
  89. assert ask(Q.imaginary(z)) is False
  90. assert ask(Q.positive(z)) is True
  91. assert ask(Q.negative(z)) is False
  92. assert ask(Q.even(z)) is None
  93. assert ask(Q.odd(z)) is None
  94. assert ask(Q.finite(z)) is True
  95. assert ask(Q.prime(z)) is None
  96. assert ask(Q.composite(z)) is None
  97. assert ask(Q.hermitian(z)) is True
  98. assert ask(Q.antihermitian(z)) is False
  99. z = 7.2123
  100. assert ask(Q.commutative(z)) is True
  101. assert ask(Q.integer(z)) is False
  102. assert ask(Q.rational(z)) is None
  103. assert ask(Q.real(z)) is True
  104. assert ask(Q.complex(z)) is True
  105. assert ask(Q.irrational(z)) is None
  106. assert ask(Q.imaginary(z)) is False
  107. assert ask(Q.positive(z)) is True
  108. assert ask(Q.negative(z)) is False
  109. assert ask(Q.even(z)) is False
  110. assert ask(Q.odd(z)) is False
  111. assert ask(Q.finite(z)) is True
  112. assert ask(Q.prime(z)) is False
  113. assert ask(Q.composite(z)) is False
  114. assert ask(Q.hermitian(z)) is True
  115. assert ask(Q.antihermitian(z)) is False
  116. # test for issue #12168
  117. assert ask(Q.rational(math.pi)) is None
  118. def test_zero_0():
  119. z = Integer(0)
  120. assert ask(Q.nonzero(z)) is False
  121. assert ask(Q.zero(z)) is True
  122. assert ask(Q.commutative(z)) is True
  123. assert ask(Q.integer(z)) is True
  124. assert ask(Q.rational(z)) is True
  125. assert ask(Q.real(z)) is True
  126. assert ask(Q.complex(z)) is True
  127. assert ask(Q.imaginary(z)) is False
  128. assert ask(Q.positive(z)) is False
  129. assert ask(Q.negative(z)) is False
  130. assert ask(Q.even(z)) is True
  131. assert ask(Q.odd(z)) is False
  132. assert ask(Q.finite(z)) is True
  133. assert ask(Q.prime(z)) is False
  134. assert ask(Q.composite(z)) is False
  135. assert ask(Q.hermitian(z)) is True
  136. assert ask(Q.antihermitian(z)) is True
  137. def test_negativeone():
  138. z = Integer(-1)
  139. assert ask(Q.nonzero(z)) is True
  140. assert ask(Q.zero(z)) is False
  141. assert ask(Q.commutative(z)) is True
  142. assert ask(Q.integer(z)) is True
  143. assert ask(Q.rational(z)) is True
  144. assert ask(Q.real(z)) is True
  145. assert ask(Q.complex(z)) is True
  146. assert ask(Q.irrational(z)) is False
  147. assert ask(Q.imaginary(z)) is False
  148. assert ask(Q.positive(z)) is False
  149. assert ask(Q.negative(z)) is True
  150. assert ask(Q.even(z)) is False
  151. assert ask(Q.odd(z)) is True
  152. assert ask(Q.finite(z)) is True
  153. assert ask(Q.prime(z)) is False
  154. assert ask(Q.composite(z)) is False
  155. assert ask(Q.hermitian(z)) is True
  156. assert ask(Q.antihermitian(z)) is False
  157. def test_infinity():
  158. assert ask(Q.commutative(oo)) is True
  159. assert ask(Q.integer(oo)) is False
  160. assert ask(Q.rational(oo)) is False
  161. assert ask(Q.algebraic(oo)) is False
  162. assert ask(Q.real(oo)) is False
  163. assert ask(Q.extended_real(oo)) is True
  164. assert ask(Q.complex(oo)) is False
  165. assert ask(Q.irrational(oo)) is False
  166. assert ask(Q.imaginary(oo)) is False
  167. assert ask(Q.positive(oo)) is False
  168. assert ask(Q.extended_positive(oo)) is True
  169. assert ask(Q.negative(oo)) is False
  170. assert ask(Q.even(oo)) is False
  171. assert ask(Q.odd(oo)) is False
  172. assert ask(Q.finite(oo)) is False
  173. assert ask(Q.infinite(oo)) is True
  174. assert ask(Q.prime(oo)) is False
  175. assert ask(Q.composite(oo)) is False
  176. assert ask(Q.hermitian(oo)) is False
  177. assert ask(Q.antihermitian(oo)) is False
  178. assert ask(Q.positive_infinite(oo)) is True
  179. assert ask(Q.negative_infinite(oo)) is False
  180. def test_neg_infinity():
  181. mm = S.NegativeInfinity
  182. assert ask(Q.commutative(mm)) is True
  183. assert ask(Q.integer(mm)) is False
  184. assert ask(Q.rational(mm)) is False
  185. assert ask(Q.algebraic(mm)) is False
  186. assert ask(Q.real(mm)) is False
  187. assert ask(Q.extended_real(mm)) is True
  188. assert ask(Q.complex(mm)) is False
  189. assert ask(Q.irrational(mm)) is False
  190. assert ask(Q.imaginary(mm)) is False
  191. assert ask(Q.positive(mm)) is False
  192. assert ask(Q.negative(mm)) is False
  193. assert ask(Q.extended_negative(mm)) is True
  194. assert ask(Q.even(mm)) is False
  195. assert ask(Q.odd(mm)) is False
  196. assert ask(Q.finite(mm)) is False
  197. assert ask(Q.infinite(oo)) is True
  198. assert ask(Q.prime(mm)) is False
  199. assert ask(Q.composite(mm)) is False
  200. assert ask(Q.hermitian(mm)) is False
  201. assert ask(Q.antihermitian(mm)) is False
  202. assert ask(Q.positive_infinite(-oo)) is False
  203. assert ask(Q.negative_infinite(-oo)) is True
  204. def test_complex_infinity():
  205. assert ask(Q.commutative(zoo)) is True
  206. assert ask(Q.integer(zoo)) is False
  207. assert ask(Q.rational(zoo)) is False
  208. assert ask(Q.algebraic(zoo)) is False
  209. assert ask(Q.real(zoo)) is False
  210. assert ask(Q.extended_real(zoo)) is False
  211. assert ask(Q.complex(zoo)) is False
  212. assert ask(Q.irrational(zoo)) is False
  213. assert ask(Q.imaginary(zoo)) is False
  214. assert ask(Q.positive(zoo)) is False
  215. assert ask(Q.negative(zoo)) is False
  216. assert ask(Q.zero(zoo)) is False
  217. assert ask(Q.nonzero(zoo)) is False
  218. assert ask(Q.even(zoo)) is False
  219. assert ask(Q.odd(zoo)) is False
  220. assert ask(Q.finite(zoo)) is False
  221. assert ask(Q.infinite(zoo)) is True
  222. assert ask(Q.prime(zoo)) is False
  223. assert ask(Q.composite(zoo)) is False
  224. assert ask(Q.hermitian(zoo)) is False
  225. assert ask(Q.antihermitian(zoo)) is False
  226. assert ask(Q.positive_infinite(zoo)) is False
  227. assert ask(Q.negative_infinite(zoo)) is False
  228. def test_nan():
  229. nan = S.NaN
  230. assert ask(Q.commutative(nan)) is True
  231. assert ask(Q.integer(nan)) is None
  232. assert ask(Q.rational(nan)) is None
  233. assert ask(Q.algebraic(nan)) is None
  234. assert ask(Q.real(nan)) is None
  235. assert ask(Q.extended_real(nan)) is None
  236. assert ask(Q.complex(nan)) is None
  237. assert ask(Q.irrational(nan)) is None
  238. assert ask(Q.imaginary(nan)) is None
  239. assert ask(Q.positive(nan)) is None
  240. assert ask(Q.nonzero(nan)) is None
  241. assert ask(Q.zero(nan)) is None
  242. assert ask(Q.even(nan)) is None
  243. assert ask(Q.odd(nan)) is None
  244. assert ask(Q.finite(nan)) is None
  245. assert ask(Q.infinite(nan)) is None
  246. assert ask(Q.prime(nan)) is None
  247. assert ask(Q.composite(nan)) is None
  248. assert ask(Q.hermitian(nan)) is None
  249. assert ask(Q.antihermitian(nan)) is None
  250. def test_Rational_number():
  251. r = Rational(3, 4)
  252. assert ask(Q.commutative(r)) is True
  253. assert ask(Q.integer(r)) is False
  254. assert ask(Q.rational(r)) is True
  255. assert ask(Q.real(r)) is True
  256. assert ask(Q.complex(r)) is True
  257. assert ask(Q.irrational(r)) is False
  258. assert ask(Q.imaginary(r)) is False
  259. assert ask(Q.positive(r)) is True
  260. assert ask(Q.negative(r)) is False
  261. assert ask(Q.even(r)) is False
  262. assert ask(Q.odd(r)) is False
  263. assert ask(Q.finite(r)) is True
  264. assert ask(Q.prime(r)) is False
  265. assert ask(Q.composite(r)) is False
  266. assert ask(Q.hermitian(r)) is True
  267. assert ask(Q.antihermitian(r)) is False
  268. r = Rational(1, 4)
  269. assert ask(Q.positive(r)) is True
  270. assert ask(Q.negative(r)) is False
  271. r = Rational(5, 4)
  272. assert ask(Q.negative(r)) is False
  273. assert ask(Q.positive(r)) is True
  274. r = Rational(5, 3)
  275. assert ask(Q.positive(r)) is True
  276. assert ask(Q.negative(r)) is False
  277. r = Rational(-3, 4)
  278. assert ask(Q.positive(r)) is False
  279. assert ask(Q.negative(r)) is True
  280. r = Rational(-1, 4)
  281. assert ask(Q.positive(r)) is False
  282. assert ask(Q.negative(r)) is True
  283. r = Rational(-5, 4)
  284. assert ask(Q.negative(r)) is True
  285. assert ask(Q.positive(r)) is False
  286. r = Rational(-5, 3)
  287. assert ask(Q.positive(r)) is False
  288. assert ask(Q.negative(r)) is True
  289. def test_sqrt_2():
  290. z = sqrt(2)
  291. assert ask(Q.commutative(z)) is True
  292. assert ask(Q.integer(z)) is False
  293. assert ask(Q.rational(z)) is False
  294. assert ask(Q.real(z)) is True
  295. assert ask(Q.complex(z)) is True
  296. assert ask(Q.irrational(z)) is True
  297. assert ask(Q.imaginary(z)) is False
  298. assert ask(Q.positive(z)) is True
  299. assert ask(Q.negative(z)) is False
  300. assert ask(Q.even(z)) is False
  301. assert ask(Q.odd(z)) is False
  302. assert ask(Q.finite(z)) is True
  303. assert ask(Q.prime(z)) is False
  304. assert ask(Q.composite(z)) is False
  305. assert ask(Q.hermitian(z)) is True
  306. assert ask(Q.antihermitian(z)) is False
  307. def test_pi():
  308. z = S.Pi
  309. assert ask(Q.commutative(z)) is True
  310. assert ask(Q.integer(z)) is False
  311. assert ask(Q.rational(z)) is False
  312. assert ask(Q.algebraic(z)) is False
  313. assert ask(Q.real(z)) is True
  314. assert ask(Q.complex(z)) is True
  315. assert ask(Q.irrational(z)) is True
  316. assert ask(Q.imaginary(z)) is False
  317. assert ask(Q.positive(z)) is True
  318. assert ask(Q.negative(z)) is False
  319. assert ask(Q.even(z)) is False
  320. assert ask(Q.odd(z)) is False
  321. assert ask(Q.finite(z)) is True
  322. assert ask(Q.prime(z)) is False
  323. assert ask(Q.composite(z)) is False
  324. assert ask(Q.hermitian(z)) is True
  325. assert ask(Q.antihermitian(z)) is False
  326. z = S.Pi + 1
  327. assert ask(Q.commutative(z)) is True
  328. assert ask(Q.integer(z)) is False
  329. assert ask(Q.rational(z)) is False
  330. assert ask(Q.algebraic(z)) is False
  331. assert ask(Q.real(z)) is True
  332. assert ask(Q.complex(z)) is True
  333. assert ask(Q.irrational(z)) is True
  334. assert ask(Q.imaginary(z)) is False
  335. assert ask(Q.positive(z)) is True
  336. assert ask(Q.negative(z)) is False
  337. assert ask(Q.even(z)) is False
  338. assert ask(Q.odd(z)) is False
  339. assert ask(Q.finite(z)) is True
  340. assert ask(Q.prime(z)) is False
  341. assert ask(Q.composite(z)) is False
  342. assert ask(Q.hermitian(z)) is True
  343. assert ask(Q.antihermitian(z)) is False
  344. z = 2*S.Pi
  345. assert ask(Q.commutative(z)) is True
  346. assert ask(Q.integer(z)) is False
  347. assert ask(Q.rational(z)) is False
  348. assert ask(Q.algebraic(z)) is False
  349. assert ask(Q.real(z)) is True
  350. assert ask(Q.complex(z)) is True
  351. assert ask(Q.irrational(z)) is True
  352. assert ask(Q.imaginary(z)) is False
  353. assert ask(Q.positive(z)) is True
  354. assert ask(Q.negative(z)) is False
  355. assert ask(Q.even(z)) is False
  356. assert ask(Q.odd(z)) is False
  357. assert ask(Q.finite(z)) is True
  358. assert ask(Q.prime(z)) is False
  359. assert ask(Q.composite(z)) is False
  360. assert ask(Q.hermitian(z)) is True
  361. assert ask(Q.antihermitian(z)) is False
  362. z = S.Pi ** 2
  363. assert ask(Q.commutative(z)) is True
  364. assert ask(Q.integer(z)) is False
  365. assert ask(Q.rational(z)) is False
  366. assert ask(Q.algebraic(z)) is False
  367. assert ask(Q.real(z)) is True
  368. assert ask(Q.complex(z)) is True
  369. assert ask(Q.irrational(z)) is True
  370. assert ask(Q.imaginary(z)) is False
  371. assert ask(Q.positive(z)) is True
  372. assert ask(Q.negative(z)) is False
  373. assert ask(Q.even(z)) is False
  374. assert ask(Q.odd(z)) is False
  375. assert ask(Q.finite(z)) is True
  376. assert ask(Q.prime(z)) is False
  377. assert ask(Q.composite(z)) is False
  378. assert ask(Q.hermitian(z)) is True
  379. assert ask(Q.antihermitian(z)) is False
  380. z = (1 + S.Pi) ** 2
  381. assert ask(Q.commutative(z)) is True
  382. assert ask(Q.integer(z)) is False
  383. assert ask(Q.rational(z)) is False
  384. assert ask(Q.algebraic(z)) is None
  385. assert ask(Q.real(z)) is True
  386. assert ask(Q.complex(z)) is True
  387. assert ask(Q.irrational(z)) is True
  388. assert ask(Q.imaginary(z)) is False
  389. assert ask(Q.positive(z)) is True
  390. assert ask(Q.negative(z)) is False
  391. assert ask(Q.even(z)) is False
  392. assert ask(Q.odd(z)) is False
  393. assert ask(Q.finite(z)) is True
  394. assert ask(Q.prime(z)) is False
  395. assert ask(Q.composite(z)) is False
  396. assert ask(Q.hermitian(z)) is True
  397. assert ask(Q.antihermitian(z)) is False
  398. def test_E():
  399. z = S.Exp1
  400. assert ask(Q.commutative(z)) is True
  401. assert ask(Q.integer(z)) is False
  402. assert ask(Q.rational(z)) is False
  403. assert ask(Q.algebraic(z)) is False
  404. assert ask(Q.real(z)) is True
  405. assert ask(Q.complex(z)) is True
  406. assert ask(Q.irrational(z)) is True
  407. assert ask(Q.imaginary(z)) is False
  408. assert ask(Q.positive(z)) is True
  409. assert ask(Q.negative(z)) is False
  410. assert ask(Q.even(z)) is False
  411. assert ask(Q.odd(z)) is False
  412. assert ask(Q.finite(z)) is True
  413. assert ask(Q.prime(z)) is False
  414. assert ask(Q.composite(z)) is False
  415. assert ask(Q.hermitian(z)) is True
  416. assert ask(Q.antihermitian(z)) is False
  417. def test_GoldenRatio():
  418. z = S.GoldenRatio
  419. assert ask(Q.commutative(z)) is True
  420. assert ask(Q.integer(z)) is False
  421. assert ask(Q.rational(z)) is False
  422. assert ask(Q.algebraic(z)) is True
  423. assert ask(Q.real(z)) is True
  424. assert ask(Q.complex(z)) is True
  425. assert ask(Q.irrational(z)) is True
  426. assert ask(Q.imaginary(z)) is False
  427. assert ask(Q.positive(z)) is True
  428. assert ask(Q.negative(z)) is False
  429. assert ask(Q.even(z)) is False
  430. assert ask(Q.odd(z)) is False
  431. assert ask(Q.finite(z)) is True
  432. assert ask(Q.prime(z)) is False
  433. assert ask(Q.composite(z)) is False
  434. assert ask(Q.hermitian(z)) is True
  435. assert ask(Q.antihermitian(z)) is False
  436. def test_TribonacciConstant():
  437. z = S.TribonacciConstant
  438. assert ask(Q.commutative(z)) is True
  439. assert ask(Q.integer(z)) is False
  440. assert ask(Q.rational(z)) is False
  441. assert ask(Q.algebraic(z)) is True
  442. assert ask(Q.real(z)) is True
  443. assert ask(Q.complex(z)) is True
  444. assert ask(Q.irrational(z)) is True
  445. assert ask(Q.imaginary(z)) is False
  446. assert ask(Q.positive(z)) is True
  447. assert ask(Q.negative(z)) is False
  448. assert ask(Q.even(z)) is False
  449. assert ask(Q.odd(z)) is False
  450. assert ask(Q.finite(z)) is True
  451. assert ask(Q.prime(z)) is False
  452. assert ask(Q.composite(z)) is False
  453. assert ask(Q.hermitian(z)) is True
  454. assert ask(Q.antihermitian(z)) is False
  455. def test_I():
  456. z = I
  457. assert ask(Q.commutative(z)) is True
  458. assert ask(Q.integer(z)) is False
  459. assert ask(Q.rational(z)) is False
  460. assert ask(Q.algebraic(z)) is True
  461. assert ask(Q.real(z)) is False
  462. assert ask(Q.complex(z)) is True
  463. assert ask(Q.irrational(z)) is False
  464. assert ask(Q.imaginary(z)) is True
  465. assert ask(Q.positive(z)) is False
  466. assert ask(Q.negative(z)) is False
  467. assert ask(Q.even(z)) is False
  468. assert ask(Q.odd(z)) is False
  469. assert ask(Q.finite(z)) is True
  470. assert ask(Q.prime(z)) is False
  471. assert ask(Q.composite(z)) is False
  472. assert ask(Q.hermitian(z)) is False
  473. assert ask(Q.antihermitian(z)) is True
  474. z = 1 + I
  475. assert ask(Q.commutative(z)) is True
  476. assert ask(Q.integer(z)) is False
  477. assert ask(Q.rational(z)) is False
  478. assert ask(Q.algebraic(z)) is True
  479. assert ask(Q.real(z)) is False
  480. assert ask(Q.complex(z)) is True
  481. assert ask(Q.irrational(z)) is False
  482. assert ask(Q.imaginary(z)) is False
  483. assert ask(Q.positive(z)) is False
  484. assert ask(Q.negative(z)) is False
  485. assert ask(Q.even(z)) is False
  486. assert ask(Q.odd(z)) is False
  487. assert ask(Q.finite(z)) is True
  488. assert ask(Q.prime(z)) is False
  489. assert ask(Q.composite(z)) is False
  490. assert ask(Q.hermitian(z)) is False
  491. assert ask(Q.antihermitian(z)) is False
  492. z = I*(1 + I)
  493. assert ask(Q.commutative(z)) is True
  494. assert ask(Q.integer(z)) is False
  495. assert ask(Q.rational(z)) is False
  496. assert ask(Q.algebraic(z)) is True
  497. assert ask(Q.real(z)) is False
  498. assert ask(Q.complex(z)) is True
  499. assert ask(Q.irrational(z)) is False
  500. assert ask(Q.imaginary(z)) is False
  501. assert ask(Q.positive(z)) is False
  502. assert ask(Q.negative(z)) is False
  503. assert ask(Q.even(z)) is False
  504. assert ask(Q.odd(z)) is False
  505. assert ask(Q.finite(z)) is True
  506. assert ask(Q.prime(z)) is False
  507. assert ask(Q.composite(z)) is False
  508. assert ask(Q.hermitian(z)) is False
  509. assert ask(Q.antihermitian(z)) is False
  510. z = I**(I)
  511. assert ask(Q.imaginary(z)) is False
  512. assert ask(Q.real(z)) is True
  513. z = (-I)**(I)
  514. assert ask(Q.imaginary(z)) is False
  515. assert ask(Q.real(z)) is True
  516. z = (3*I)**(I)
  517. assert ask(Q.imaginary(z)) is False
  518. assert ask(Q.real(z)) is False
  519. z = (1)**(I)
  520. assert ask(Q.imaginary(z)) is False
  521. assert ask(Q.real(z)) is True
  522. z = (-1)**(I)
  523. assert ask(Q.imaginary(z)) is False
  524. assert ask(Q.real(z)) is True
  525. z = (1+I)**(I)
  526. assert ask(Q.imaginary(z)) is False
  527. assert ask(Q.real(z)) is False
  528. z = (I)**(I+3)
  529. assert ask(Q.imaginary(z)) is True
  530. assert ask(Q.real(z)) is False
  531. z = (I)**(I+2)
  532. assert ask(Q.imaginary(z)) is False
  533. assert ask(Q.real(z)) is True
  534. z = (I)**(2)
  535. assert ask(Q.imaginary(z)) is False
  536. assert ask(Q.real(z)) is True
  537. z = (I)**(3)
  538. assert ask(Q.imaginary(z)) is True
  539. assert ask(Q.real(z)) is False
  540. z = (3)**(I)
  541. assert ask(Q.imaginary(z)) is False
  542. assert ask(Q.real(z)) is False
  543. z = (I)**(0)
  544. assert ask(Q.imaginary(z)) is False
  545. assert ask(Q.real(z)) is True
  546. def test_bounded():
  547. x, y, z = symbols('x,y,z')
  548. a = x + y
  549. x, y = a.args
  550. assert ask(Q.finite(a), Q.positive_infinite(y)) is None
  551. assert ask(Q.finite(x)) is None
  552. assert ask(Q.finite(x), Q.finite(x)) is True
  553. assert ask(Q.finite(x), Q.finite(y)) is None
  554. assert ask(Q.finite(x), Q.complex(x)) is True
  555. assert ask(Q.finite(x), Q.extended_real(x)) is None
  556. assert ask(Q.finite(x + 1)) is None
  557. assert ask(Q.finite(x + 1), Q.finite(x)) is True
  558. a = x + y
  559. x, y = a.args
  560. # B + B
  561. assert ask(Q.finite(a), Q.finite(x) & Q.finite(y)) is True
  562. assert ask(Q.finite(a), Q.positive(x) & Q.finite(y)) is True
  563. assert ask(Q.finite(a), Q.finite(x) & Q.positive(y)) is True
  564. assert ask(Q.finite(a), Q.positive(x) & Q.positive(y)) is True
  565. assert ask(Q.finite(a), Q.positive(x) & Q.finite(y)
  566. & ~Q.positive(y)) is True
  567. assert ask(Q.finite(a), Q.finite(x) & ~Q.positive(x)
  568. & Q.positive(y)) is True
  569. assert ask(Q.finite(a), Q.finite(x) & Q.finite(y) & ~Q.positive(x)
  570. & ~Q.positive(y)) is True
  571. # B + U
  572. assert ask(Q.finite(a), Q.finite(x) & ~Q.finite(y)) is False
  573. assert ask(Q.finite(a), Q.positive(x) & ~Q.finite(y)) is False
  574. assert ask(Q.finite(a), Q.finite(x)
  575. & Q.positive_infinite(y)) is False
  576. assert ask(Q.finite(a), Q.positive(x)
  577. & Q.positive_infinite(y)) is False
  578. assert ask(Q.finite(a), Q.positive(x) & ~Q.finite(y)
  579. & ~Q.positive(y)) is False
  580. assert ask(Q.finite(a), Q.finite(x) & ~Q.positive(x)
  581. & Q.positive_infinite(y)) is False
  582. assert ask(Q.finite(a), Q.finite(x) & ~Q.positive(x) & ~Q.finite(y)
  583. & ~Q.positive(y)) is False
  584. # B + ?
  585. assert ask(Q.finite(a), Q.finite(x)) is None
  586. assert ask(Q.finite(a), Q.positive(x)) is None
  587. assert ask(Q.finite(a), Q.finite(x)
  588. & Q.extended_positive(y)) is None
  589. assert ask(Q.finite(a), Q.positive(x)
  590. & Q.extended_positive(y)) is None
  591. assert ask(Q.finite(a), Q.positive(x) & ~Q.positive(y)) is None
  592. assert ask(Q.finite(a), Q.finite(x) & ~Q.positive(x)
  593. & Q.extended_positive(y)) is None
  594. assert ask(Q.finite(a), Q.finite(x) & ~Q.positive(x)
  595. & ~Q.positive(y)) is None
  596. # U + U
  597. assert ask(Q.finite(a), ~Q.finite(x) & ~Q.finite(y)) is None
  598. assert ask(Q.finite(a), Q.positive_infinite(x)
  599. & ~Q.finite(y)) is None
  600. assert ask(Q.finite(a), ~Q.finite(x)
  601. & Q.positive_infinite(y)) is None
  602. assert ask(Q.finite(a), Q.positive_infinite(x)
  603. & Q.positive_infinite(y)) is False
  604. assert ask(Q.finite(a), Q.positive_infinite(x) & ~Q.finite(y)
  605. & ~Q.extended_positive(y)) is None
  606. assert ask(Q.finite(a), ~Q.finite(x) & ~Q.extended_positive(x)
  607. & Q.positive_infinite(y)) is None
  608. assert ask(Q.finite(a), ~Q.finite(x) & ~Q.finite(y)
  609. & ~Q.extended_positive(x) & ~Q.extended_positive(y)) is False
  610. # U + ?
  611. assert ask(Q.finite(a), ~Q.finite(y)) is None
  612. assert ask(Q.finite(a), Q.extended_positive(x)
  613. & ~Q.finite(y)) is None
  614. assert ask(Q.finite(a), Q.positive_infinite(y)) is None
  615. assert ask(Q.finite(a), Q.extended_positive(x)
  616. & Q.positive_infinite(y)) is False
  617. assert ask(Q.finite(a), Q.extended_positive(x)
  618. & ~Q.finite(y) & ~Q.extended_positive(y)) is None
  619. assert ask(Q.finite(a), ~Q.extended_positive(x)
  620. & Q.positive_infinite(y)) is None
  621. assert ask(Q.finite(a), ~Q.extended_positive(x) & ~Q.finite(y)
  622. & ~Q.extended_positive(y)) is False
  623. # ? + ?
  624. assert ask(Q.finite(a)) is None
  625. assert ask(Q.finite(a), Q.extended_positive(x)) is None
  626. assert ask(Q.finite(a), Q.extended_positive(y)) is None
  627. assert ask(Q.finite(a), Q.extended_positive(x)
  628. & Q.extended_positive(y)) is None
  629. assert ask(Q.finite(a), Q.extended_positive(x)
  630. & ~Q.extended_positive(y)) is None
  631. assert ask(Q.finite(a), ~Q.extended_positive(x)
  632. & Q.extended_positive(y)) is None
  633. assert ask(Q.finite(a), ~Q.extended_positive(x)
  634. & ~Q.extended_positive(y)) is None
  635. x, y, z = symbols('x,y,z')
  636. a = x + y + z
  637. x, y, z = a.args
  638. assert ask(Q.finite(a), Q.negative(x) & Q.negative(y)
  639. & Q.negative(z)) is True
  640. assert ask(Q.finite(a), Q.negative(x) & Q.negative(y)
  641. & Q.finite(z)) is True
  642. assert ask(Q.finite(a), Q.negative(x) & Q.negative(y)
  643. & Q.positive(z)) is True
  644. assert ask(Q.finite(a), Q.negative(x) & Q.negative(y)
  645. & Q.negative_infinite(z)) is False
  646. assert ask(Q.finite(a), Q.negative(x) & Q.negative(y)
  647. & ~Q.finite(z)) is False
  648. assert ask(Q.finite(a), Q.negative(x) & Q.negative(y)
  649. & Q.positive_infinite(z)) is False
  650. assert ask(Q.finite(a), Q.negative(x) & Q.negative(y)
  651. & Q.extended_negative(z)) is None
  652. assert ask(Q.finite(a), Q.negative(x) & Q.negative(y)) is None
  653. assert ask(Q.finite(a), Q.negative(x) & Q.negative(y)
  654. & Q.extended_positive(z)) is None
  655. assert ask(Q.finite(a), Q.negative(x) & Q.finite(y)
  656. & Q.finite(z)) is True
  657. assert ask(Q.finite(a), Q.negative(x) & Q.finite(y)
  658. & Q.positive(z)) is True
  659. assert ask(Q.finite(a), Q.negative(x) & Q.finite(y)
  660. & Q.negative_infinite(z)) is False
  661. assert ask(Q.finite(a), Q.negative(x) & Q.finite(y)
  662. & ~Q.finite(z)) is False
  663. assert ask(Q.finite(a), Q.negative(x) & Q.finite(y)
  664. & Q.positive_infinite(z)) is False
  665. assert ask(Q.finite(a), Q.negative(x) & Q.finite(y)
  666. & Q.extended_negative(z)) is None
  667. assert ask(Q.finite(a), Q.negative(x) & Q.finite(y)) is None
  668. assert ask(Q.finite(a), Q.negative(x) & Q.finite(y)
  669. & Q.extended_positive(z)) is None
  670. assert ask(Q.finite(a), Q.negative(x) & Q.positive(y)
  671. & Q.positive(z)) is True
  672. assert ask(Q.finite(a), Q.negative(x) & Q.positive(y)
  673. & Q.negative_infinite(z)) is False
  674. assert ask(Q.finite(a), Q.negative(x) & Q.positive(y)
  675. & ~Q.finite(z)) is False
  676. assert ask(Q.finite(a), Q.negative(x) & Q.positive(y)
  677. & Q.positive_infinite(z)) is False
  678. assert ask(Q.finite(a), Q.negative(x) & Q.positive(y)
  679. & Q.extended_negative(z)) is None
  680. assert ask(Q.finite(a), Q.negative(x) & Q.extended_positive(y)
  681. & Q.finite(y)) is None
  682. assert ask(Q.finite(a), Q.negative(x) & Q.positive(y)
  683. & Q.extended_positive(z)) is None
  684. assert ask(Q.finite(a), Q.negative(x) & Q.negative_infinite(y)
  685. & Q.negative_infinite(z)) is False
  686. assert ask(Q.finite(a), Q.negative(x) & Q.negative_infinite(y)
  687. & ~Q.finite(z)) is None
  688. assert ask(Q.finite(a), Q.negative(x) & Q.negative_infinite(y)
  689. & Q.positive_infinite(z)) is None
  690. assert ask(Q.finite(a), Q.negative(x) & Q.negative_infinite(y)
  691. & Q.extended_negative(z)) is False
  692. assert ask(Q.finite(a), Q.negative(x)
  693. & Q.negative_infinite(y)) is None
  694. assert ask(Q.finite(a), Q.negative(x) & Q.negative_infinite(y)
  695. & Q.extended_positive(z)) is None
  696. assert ask(Q.finite(a), Q.negative(x) & ~Q.finite(y)
  697. & ~Q.finite(z)) is None
  698. assert ask(Q.finite(a), Q.negative(x) & ~Q.finite(y)
  699. & Q.positive_infinite(z)) is None
  700. assert ask(Q.finite(a), Q.negative(x) & ~Q.finite(y)
  701. & Q.extended_negative(z)) is None
  702. assert ask(Q.finite(a), Q.negative(x) & ~Q.finite(y)) is None
  703. assert ask(Q.finite(a), Q.negative(x) & ~Q.finite(y)
  704. & Q.extended_positive(z)) is None
  705. assert ask(Q.finite(a), Q.negative(x) & Q.positive_infinite(y)
  706. & Q.positive_infinite(z)) is False
  707. assert ask(Q.finite(a), Q.negative(x) & Q.positive_infinite(y)
  708. & Q.negative_infinite(z)) is None
  709. assert ask(Q.finite(a), Q.negative(x) &
  710. Q.positive_infinite(y)) is None
  711. assert ask(Q.finite(a), Q.negative(x) & Q.positive_infinite(y)
  712. & Q.extended_positive(z)) is False
  713. assert ask(Q.finite(a), Q.negative(x) & Q.extended_negative(y)
  714. & Q.extended_negative(z)) is None
  715. assert ask(Q.finite(a), Q.negative(x)
  716. & Q.extended_negative(y)) is None
  717. assert ask(Q.finite(a), Q.negative(x) & Q.extended_negative(y)
  718. & Q.extended_positive(z)) is None
  719. assert ask(Q.finite(a), Q.negative(x)) is None
  720. assert ask(Q.finite(a), Q.negative(x)
  721. & Q.extended_positive(z)) is None
  722. assert ask(Q.finite(a), Q.negative(x) & Q.extended_positive(y)
  723. & Q.extended_positive(z)) is None
  724. assert ask(Q.finite(a), Q.finite(x) & Q.finite(y)
  725. & Q.finite(z)) is True
  726. assert ask(Q.finite(a), Q.finite(x) & Q.finite(y)
  727. & Q.positive(z)) is True
  728. assert ask(Q.finite(a), Q.finite(x) & Q.finite(y)
  729. & Q.negative_infinite(z)) is False
  730. assert ask(Q.finite(a), Q.finite(x) & Q.finite(y)
  731. & ~Q.finite(z)) is False
  732. assert ask(Q.finite(a), Q.finite(x) & Q.finite(y)
  733. & Q.positive_infinite(z)) is False
  734. assert ask(Q.finite(a), Q.finite(x) & Q.finite(y)
  735. & Q.extended_negative(z)) is None
  736. assert ask(Q.finite(a), Q.finite(x) & Q.finite(y)) is None
  737. assert ask(Q.finite(a), Q.finite(x) & Q.finite(y)
  738. & Q.extended_positive(z)) is None
  739. assert ask(Q.finite(a), Q.finite(x) & Q.positive(y)
  740. & Q.positive(z)) is True
  741. assert ask(Q.finite(a), Q.finite(x) & Q.positive(y)
  742. & Q.negative_infinite(z)) is False
  743. assert ask(Q.finite(a), Q.finite(x) & Q.positive(y)
  744. & ~Q.finite(z)) is False
  745. assert ask(Q.finite(a), Q.finite(x) & Q.positive(y)
  746. & Q.positive_infinite(z)) is False
  747. assert ask(Q.finite(a), Q.finite(x) & Q.positive(y)
  748. & Q.extended_negative(z)) is None
  749. assert ask(Q.finite(a), Q.finite(x) & Q.positive(y)) is None
  750. assert ask(Q.finite(a), Q.finite(x) & Q.positive(y)
  751. & Q.extended_positive(z)) is None
  752. assert ask(Q.finite(a), Q.finite(x) & Q.negative_infinite(y)
  753. & Q.negative_infinite(z)) is False
  754. assert ask(Q.finite(a), Q.finite(x) & Q.negative_infinite(y)
  755. & ~Q.finite(z)) is None
  756. assert ask(Q.finite(a), Q.finite(x) & Q.negative_infinite(y)
  757. & Q.positive_infinite(z)) is None
  758. assert ask(Q.finite(a), Q.finite(x) & Q.negative_infinite(y)
  759. & Q.extended_negative(z)) is False
  760. assert ask(Q.finite(a), Q.finite(x)
  761. & Q.negative_infinite(y)) is None
  762. assert ask(Q.finite(a), Q.finite(x) & Q.negative_infinite(y)
  763. & Q.extended_positive(z)) is None
  764. assert ask(Q.finite(a), Q.finite(x) & ~Q.finite(y)
  765. & ~Q.finite(z)) is None
  766. assert ask(Q.finite(a), Q.finite(x) & ~Q.finite(y)
  767. & Q.positive_infinite(z)) is None
  768. assert ask(Q.finite(a), Q.finite(x) & ~Q.finite(y)
  769. & Q.extended_negative(z)) is None
  770. assert ask(Q.finite(a), Q.finite(x) & ~Q.finite(y)) is None
  771. assert ask(Q.finite(a), Q.finite(x) & ~Q.finite(y)
  772. & Q.extended_positive(z)) is None
  773. assert ask(Q.finite(a), Q.finite(x) & Q.positive_infinite(y)
  774. & Q.positive_infinite(z)) is False
  775. assert ask(Q.finite(a), Q.finite(x) & Q.positive_infinite(y)
  776. & Q.extended_negative(z)) is None
  777. assert ask(Q.finite(a), Q.finite(x)
  778. & Q.positive_infinite(y)) is None
  779. assert ask(Q.finite(a), Q.finite(x) & Q.positive_infinite(y)
  780. & Q.extended_positive(z)) is False
  781. assert ask(Q.finite(a), Q.finite(x) & Q.extended_negative(y)
  782. & Q.extended_negative(z)) is None
  783. assert ask(Q.finite(a), Q.finite(x)
  784. & Q.extended_negative(y)) is None
  785. assert ask(Q.finite(a), Q.finite(x) & Q.extended_negative(y)
  786. & Q.extended_positive(z)) is None
  787. assert ask(Q.finite(a), Q.finite(x)) is None
  788. assert ask(Q.finite(a), Q.finite(x)
  789. & Q.extended_positive(z)) is None
  790. assert ask(Q.finite(a), Q.finite(x) & Q.extended_positive(y)
  791. & Q.extended_positive(z)) is None
  792. assert ask(Q.finite(a), Q.positive(x) & Q.positive(y)
  793. & Q.positive(z)) is True
  794. assert ask(Q.finite(a), Q.positive(x) & Q.positive(y)
  795. & Q.negative_infinite(z)) is False
  796. assert ask(Q.finite(a), Q.positive(x) & Q.positive(y)
  797. & ~Q.finite(z)) is False
  798. assert ask(Q.finite(a), Q.positive(x) & Q.positive(y)
  799. & Q.positive_infinite(z)) is False
  800. assert ask(Q.finite(a), Q.positive(x) & Q.positive(y)
  801. & Q.extended_negative(z)) is None
  802. assert ask(Q.finite(a), Q.positive(x) & Q.positive(y)) is None
  803. assert ask(Q.finite(a), Q.positive(x) & Q.positive(y)
  804. & Q.extended_positive(z)) is None
  805. assert ask(Q.finite(a), Q.positive(x) & Q.negative_infinite(y)
  806. & Q.negative_infinite(z)) is False
  807. assert ask(Q.finite(a), Q.positive(x) & Q.negative_infinite(y)
  808. & ~Q.finite(z)) is None
  809. assert ask(Q.finite(a), Q.positive(x) & Q.negative_infinite(y)
  810. & Q.positive_infinite(z)) is None
  811. assert ask(Q.finite(a), Q.positive(x) & Q.negative_infinite(y)
  812. & Q.extended_negative(z)) is False
  813. assert ask(Q.finite(a), Q.positive(x)
  814. & Q.negative_infinite(y)) is None
  815. assert ask(Q.finite(a), Q.positive(x) & Q.negative_infinite(y)
  816. & Q.extended_positive(z)) is None
  817. assert ask(Q.finite(a), Q.positive(x) & ~Q.finite(y)
  818. & ~Q.finite(z)) is None
  819. assert ask(Q.finite(a), Q.positive(x) & ~Q.finite(y)
  820. & Q.positive_infinite(z)) is None
  821. assert ask(Q.finite(a), Q.positive(x) & ~Q.finite(y)
  822. & Q.extended_negative(z)) is None
  823. assert ask(Q.finite(a), Q.positive(x) & ~Q.finite(y)) is None
  824. assert ask(Q.finite(a), Q.positive(x) & ~Q.finite(y)
  825. & Q.extended_positive(z)) is None
  826. assert ask(Q.finite(a), Q.positive(x) & Q.positive_infinite(y)
  827. & Q.positive_infinite(z)) is False
  828. assert ask(Q.finite(a), Q.positive(x) & Q.positive_infinite(y)
  829. & Q.extended_negative(z)) is None
  830. assert ask(Q.finite(a), Q.positive(x)
  831. & Q.positive_infinite(y)) is None
  832. assert ask(Q.finite(a), Q.positive(x) & Q.positive_infinite(y)
  833. & Q.extended_positive(z)) is False
  834. assert ask(Q.finite(a), Q.positive(x) & Q.extended_negative(y)
  835. & Q.extended_negative(z)) is None
  836. assert ask(Q.finite(a), Q.positive(x)
  837. & Q.extended_negative(y)) is None
  838. assert ask(Q.finite(a), Q.positive(x) & Q.extended_negative(y)
  839. & Q.extended_positive(z)) is None
  840. assert ask(Q.finite(a), Q.positive(x)) is None
  841. assert ask(Q.finite(a), Q.positive(x)
  842. & Q.extended_positive(z)) is None
  843. assert ask(Q.finite(a), Q.positive(x) & Q.extended_positive(y)
  844. & Q.extended_positive(z)) is None
  845. assert ask(Q.finite(a), Q.negative_infinite(x)
  846. & Q.negative_infinite(y) & Q.negative_infinite(z)) is False
  847. assert ask(Q.finite(a), Q.negative_infinite(x)
  848. & Q.negative_infinite(y) & ~Q.finite(z)) is None
  849. assert ask(Q.finite(a), Q.negative_infinite(x)
  850. & Q.negative_infinite(y)& Q.positive_infinite(z)) is None
  851. assert ask(Q.finite(a), Q.negative_infinite(x)
  852. & Q.negative_infinite(y) & Q.extended_negative(z)) is False
  853. assert ask(Q.finite(a), Q.negative_infinite(x)
  854. & Q.negative_infinite(y)) is None
  855. assert ask(Q.finite(a), Q.negative_infinite(x)
  856. & Q.negative_infinite(y) & Q.extended_positive(z)) is None
  857. assert ask(Q.finite(a), Q.negative_infinite(x)
  858. & ~Q.finite(y) & ~Q.finite(z)) is None
  859. assert ask(Q.finite(a), Q.negative_infinite(x)
  860. & ~Q.finite(y) & Q.positive_infinite(z)) is None
  861. assert ask(Q.finite(a), Q.negative_infinite(x)
  862. & ~Q.finite(y) & Q.extended_negative(z)) is None
  863. assert ask(Q.finite(a), Q.negative_infinite(x)
  864. & ~Q.finite(y)) is None
  865. assert ask(Q.finite(a), Q.negative_infinite(x)
  866. & ~Q.finite(y) & Q.extended_positive(z)) is None
  867. assert ask(Q.finite(a), Q.negative_infinite(x)
  868. & Q.positive_infinite(y) & Q.positive_infinite(z)) is None
  869. assert ask(Q.finite(a), Q.negative_infinite(x)
  870. & Q.positive_infinite(y) & Q.extended_negative(z)) is None
  871. assert ask(Q.finite(a), Q.negative_infinite(x)
  872. & Q.positive_infinite(y)) is None
  873. assert ask(Q.finite(a), Q.negative_infinite(x)
  874. & Q.positive_infinite(y) & Q.extended_positive(z)) is None
  875. assert ask(Q.finite(a), Q.negative_infinite(x)
  876. & Q.extended_negative(y) & Q.extended_negative(z)) is False
  877. assert ask(Q.finite(a), Q.negative_infinite(x)
  878. & Q.extended_negative(y)) is None
  879. assert ask(Q.finite(a), Q.negative_infinite(x)
  880. & Q.extended_negative(y) & Q.extended_positive(z)) is None
  881. assert ask(Q.finite(a), Q.negative_infinite(x)) is None
  882. assert ask(Q.finite(a), Q.negative_infinite(x)
  883. & Q.extended_positive(z)) is None
  884. assert ask(Q.finite(a), Q.negative_infinite(x)
  885. & Q.extended_positive(y) & Q.extended_positive(z)) is None
  886. assert ask(Q.finite(a), ~Q.finite(x) & ~Q.finite(y)
  887. & ~Q.finite(z)) is None
  888. assert ask(Q.finite(a), ~Q.finite(x) & Q.positive_infinite(z)
  889. & ~Q.finite(z)) is None
  890. assert ask(Q.finite(a), ~Q.finite(x) & ~Q.finite(y)
  891. & Q.extended_negative(z)) is None
  892. assert ask(Q.finite(a), ~Q.finite(x) & ~Q.finite(y)) is None
  893. assert ask(Q.finite(a), ~Q.finite(x) & ~Q.finite(y)
  894. & Q.extended_positive(z)) is None
  895. assert ask(Q.finite(a), ~Q.finite(x) & Q.positive_infinite(y)
  896. & Q.positive_infinite(z)) is None
  897. assert ask(Q.finite(a), ~Q.finite(x) & Q.positive_infinite(y)
  898. & Q.extended_negative(z)) is None
  899. assert ask(Q.finite(a), ~Q.finite(x)
  900. & Q.positive_infinite(y)) is None
  901. assert ask(Q.finite(a), ~Q.finite(x) & Q.positive_infinite(y)
  902. & Q.extended_positive(z)) is None
  903. assert ask(Q.finite(a), ~Q.finite(x) & Q.extended_negative(y)
  904. & Q.extended_negative(z)) is None
  905. assert ask(Q.finite(a), ~Q.finite(x)
  906. & Q.extended_negative(y)) is None
  907. assert ask(Q.finite(a), ~Q.finite(x) & Q.extended_negative(y)
  908. & Q.extended_positive(z)) is None
  909. assert ask(Q.finite(a), ~Q.finite(x)) is None
  910. assert ask(Q.finite(a), ~Q.finite(x)
  911. & Q.extended_positive(z)) is None
  912. assert ask(Q.finite(a), ~Q.finite(x) & Q.extended_positive(y)
  913. & Q.extended_positive(z)) is None
  914. assert ask(Q.finite(a), Q.positive_infinite(x)
  915. & Q.positive_infinite(y) & Q.positive_infinite(z)) is False
  916. assert ask(Q.finite(a), Q.positive_infinite(x)
  917. & Q.positive_infinite(y) & Q.extended_negative(z)) is None
  918. assert ask(Q.finite(a), Q.positive_infinite(x)
  919. & Q.positive_infinite(y)) is None
  920. assert ask(Q.finite(a), Q.positive_infinite(x)
  921. & Q.positive_infinite(y) & Q.extended_positive(z)) is False
  922. assert ask(Q.finite(a), Q.positive_infinite(x)
  923. & Q.extended_negative(y) & Q.extended_negative(z)) is None
  924. assert ask(Q.finite(a), Q.positive_infinite(x)
  925. & Q.extended_negative(y)) is None
  926. assert ask(Q.finite(a), Q.positive_infinite(x)
  927. & Q.extended_negative(y) & Q.extended_positive(z)) is None
  928. assert ask(Q.finite(a), Q.positive_infinite(x)) is None
  929. assert ask(Q.finite(a), Q.positive_infinite(x)
  930. & Q.extended_positive(z)) is None
  931. assert ask(Q.finite(a), Q.positive_infinite(x)
  932. & Q.extended_positive(y) & Q.extended_positive(z)) is False
  933. assert ask(Q.finite(a), Q.extended_negative(x)
  934. & Q.extended_negative(y) & Q.extended_negative(z)) is None
  935. assert ask(Q.finite(a), Q.extended_negative(x)
  936. & Q.extended_negative(y)) is None
  937. assert ask(Q.finite(a), Q.extended_negative(x)
  938. & Q.extended_negative(y) & Q.extended_positive(z)) is None
  939. assert ask(Q.finite(a), Q.extended_negative(x)) is None
  940. assert ask(Q.finite(a), Q.extended_negative(x)
  941. & Q.extended_positive(z)) is None
  942. assert ask(Q.finite(a), Q.extended_negative(x)
  943. & Q.extended_positive(y) & Q.extended_positive(z)) is None
  944. assert ask(Q.finite(a)) is None
  945. assert ask(Q.finite(a), Q.extended_positive(z)) is None
  946. assert ask(Q.finite(a), Q.extended_positive(y)
  947. & Q.extended_positive(z)) is None
  948. assert ask(Q.finite(a), Q.extended_positive(x)
  949. & Q.extended_positive(y) & Q.extended_positive(z)) is None
  950. assert ask(Q.finite(2*x)) is None
  951. assert ask(Q.finite(2*x), Q.finite(x)) is True
  952. x, y, z = symbols('x,y,z')
  953. a = x*y
  954. x, y = a.args
  955. assert ask(Q.finite(a), Q.finite(x) & Q.finite(y)) is True
  956. assert ask(Q.finite(a), Q.finite(x) & ~Q.zero(x) & ~Q.finite(y)) is False
  957. assert ask(Q.finite(a), Q.finite(x)) is None
  958. assert ask(Q.finite(a), ~Q.finite(x) & Q.finite(y) &~Q.zero(y)) is False
  959. assert ask(Q.finite(a), ~Q.finite(x) & ~Q.finite(y)) is False
  960. assert ask(Q.finite(a), ~Q.finite(x)) is None
  961. assert ask(Q.finite(a), Q.finite(y)) is None
  962. assert ask(Q.finite(a), ~Q.finite(y)) is None
  963. assert ask(Q.finite(a)) is None
  964. a = x*y*z
  965. x, y, z = a.args
  966. assert ask(Q.finite(a), Q.finite(x) & Q.finite(y)
  967. & Q.finite(z)) is True
  968. assert ask(Q.finite(a), Q.finite(x) & ~Q.zero(x) & Q.finite(y)
  969. & ~Q.zero(y) & ~Q.finite(z)) is False
  970. assert ask(Q.finite(a), Q.finite(x) & Q.finite(y)) is None
  971. assert ask(Q.finite(a), Q.finite(x) & ~Q.zero(x) & ~Q.finite(y)
  972. & Q.finite(z) & ~Q.zero(z)) is False
  973. assert ask(Q.finite(a), Q.finite(x) & ~Q.zero(x) & ~Q.finite(y)
  974. & ~Q.finite(z)) is False
  975. assert ask(Q.finite(a), Q.finite(x) & ~Q.finite(y)) is None
  976. assert ask(Q.finite(a), Q.finite(x) & Q.finite(z)) is None
  977. assert ask(Q.finite(a), Q.finite(x) & ~Q.finite(z)) is None
  978. assert ask(Q.finite(a), Q.finite(x)) is None
  979. assert ask(Q.finite(a), ~Q.finite(x) & Q.finite(y) & ~Q.zero(y)
  980. & Q.finite(z) & ~Q.zero(z)) is False
  981. assert ask(Q.finite(a), ~Q.finite(x) & ~Q.zero(x) & Q.finite(y)
  982. & ~Q.zero(y) & ~Q.finite(z)) is False
  983. assert ask(Q.finite(a), ~Q.finite(x) & Q.finite(y)) is None
  984. assert ask(Q.finite(a), ~Q.finite(x) & ~Q.finite(y)
  985. & Q.finite(z) & ~Q.zero(z)) is False
  986. assert ask(Q.finite(a), ~Q.finite(x) & ~Q.finite(y)
  987. & ~Q.finite(z)) is False
  988. assert ask(Q.finite(a), ~Q.finite(x) & ~Q.finite(y)) is None
  989. assert ask(Q.finite(a), ~Q.finite(x) & Q.finite(z)) is None
  990. assert ask(Q.finite(a), ~Q.finite(x) & ~Q.finite(z)) is None
  991. assert ask(Q.finite(a), ~Q.finite(x)) is None
  992. assert ask(Q.finite(a), Q.finite(y) & Q.finite(z)) is None
  993. assert ask(Q.finite(a), Q.finite(y) & ~Q.finite(z)) is None
  994. assert ask(Q.finite(a), Q.finite(y)) is None
  995. assert ask(Q.finite(a), ~Q.finite(y) & Q.finite(z)) is None
  996. assert ask(Q.finite(a), ~Q.finite(y) & ~Q.finite(z)) is None
  997. assert ask(Q.finite(a), ~Q.finite(y)) is None
  998. assert ask(Q.finite(a), Q.finite(z)) is None
  999. assert ask(Q.finite(a), ~Q.finite(z)) is None
  1000. assert ask(Q.finite(a), ~Q.finite(z) & Q.extended_nonzero(x)
  1001. & Q.extended_nonzero(y) & Q.extended_nonzero(z)) is None
  1002. assert ask(Q.finite(a), Q.extended_nonzero(x) & ~Q.finite(y)
  1003. & Q.extended_nonzero(y) & ~Q.finite(z)
  1004. & Q.extended_nonzero(z)) is False
  1005. x, y, z = symbols('x,y,z')
  1006. assert ask(Q.finite(x**2)) is None
  1007. assert ask(Q.finite(2**x)) is None
  1008. assert ask(Q.finite(2**x), Q.finite(x)) is True
  1009. assert ask(Q.finite(x**x)) is None
  1010. assert ask(Q.finite(S.Half ** x)) is None
  1011. assert ask(Q.finite(S.Half ** x), Q.extended_positive(x)) is True
  1012. assert ask(Q.finite(S.Half ** x), Q.extended_negative(x)) is None
  1013. assert ask(Q.finite(2**x), Q.extended_negative(x)) is True
  1014. assert ask(Q.finite(sqrt(x))) is None
  1015. assert ask(Q.finite(2**x), ~Q.finite(x)) is False
  1016. assert ask(Q.finite(x**2), ~Q.finite(x)) is False
  1017. # https://github.com/sympy/sympy/issues/27707
  1018. assert ask(Q.finite(x**y), Q.real(x) & Q.real(y)) is None
  1019. assert ask(Q.finite(x**y), Q.real(x) & Q.negative(y)) is None
  1020. assert ask(Q.finite(x**y), Q.zero(x) & Q.negative(y)) is False
  1021. assert ask(Q.finite(x**y), Q.real(x) & Q.positive(y)) is True
  1022. assert ask(Q.finite(x**y), Q.nonzero(x) & Q.real(y)) is True
  1023. assert ask(Q.finite(x**y), Q.nonzero(x) & Q.negative(y)) is True
  1024. assert ask(Q.finite(x**y), Q.zero(x) & Q.positive(y)) is True
  1025. # sign function
  1026. assert ask(Q.finite(sign(x))) is True
  1027. assert ask(Q.finite(sign(x)), ~Q.finite(x)) is True
  1028. # exponential functions
  1029. assert ask(Q.finite(log(x))) is None
  1030. assert ask(Q.finite(log(x)), Q.finite(x)) is None
  1031. assert ask(Q.finite(log(x)), ~Q.zero(x)) is True
  1032. assert ask(Q.finite(log(x)), Q.infinite(x)) is False
  1033. assert ask(Q.finite(log(x)), Q.zero(x)) is False
  1034. assert ask(Q.finite(exp(x))) is None
  1035. assert ask(Q.finite(exp(x)), Q.finite(x)) is True
  1036. assert ask(Q.finite(exp(2))) is True
  1037. # trigonometric functions
  1038. assert ask(Q.finite(sin(x))) is True
  1039. assert ask(Q.finite(sin(x)), ~Q.finite(x)) is True
  1040. assert ask(Q.finite(cos(x))) is True
  1041. assert ask(Q.finite(cos(x)), ~Q.finite(x)) is True
  1042. assert ask(Q.finite(2*sin(x))) is True
  1043. assert ask(Q.finite(sin(x)**2)) is True
  1044. assert ask(Q.finite(cos(x)**2)) is True
  1045. assert ask(Q.finite(cos(x) + sin(x))) is True
  1046. def test_unbounded():
  1047. assert ask(Q.infinite(I * oo)) is True
  1048. assert ask(Q.infinite(1 + I*oo)) is True
  1049. assert ask(Q.infinite(3 * (I * oo))) is True
  1050. assert ask(Q.infinite(-I * oo)) is True
  1051. assert ask(Q.infinite(1 + zoo)) is True
  1052. assert ask(Q.infinite(I * zoo)) is True
  1053. assert ask(Q.infinite(x / y), Q.infinite(x) & Q.finite(y) & ~Q.zero(y)) is True
  1054. assert ask(Q.infinite(I * oo - I * oo)) is None
  1055. assert ask(Q.infinite(x * I * oo)) is None
  1056. assert ask(Q.infinite(1 / x), Q.finite(x) & ~Q.zero(x)) is False
  1057. assert ask(Q.infinite(1 / (I * oo))) is False
  1058. def test_issue_27441():
  1059. # https://github.com/sympy/sympy/issues/27441
  1060. assert ask(Q.composite(y), Q.integer(y) & Q.positive(y) & ~Q.prime(y)) is None
  1061. def test_issue_27447():
  1062. x,y,z = symbols('x y z')
  1063. a = x*y
  1064. assert ask(Q.finite(a), Q.finite(x) & ~Q.finite(y)) is None
  1065. assert ask(Q.finite(a), ~Q.finite(x) & Q.finite(y)) is None
  1066. a = x*y*z
  1067. assert ask(Q.finite(a), Q.finite(x) & Q.finite(y)
  1068. & ~Q.finite(z)) is None
  1069. assert ask(Q.finite(a), Q.finite(x) & ~Q.finite(y)
  1070. & Q.finite(z) ) is None
  1071. assert ask(Q.finite(a), Q.finite(x) & ~Q.finite(y)
  1072. & ~Q.finite(z)) is None
  1073. assert ask(Q.finite(a), ~Q.finite(x) & Q.finite(y)
  1074. & Q.finite(z)) is None
  1075. assert ask(Q.finite(a), ~Q.finite(x) & Q.finite(y)
  1076. & ~Q.finite(z)) is None
  1077. assert ask(Q.finite(a), ~Q.finite(x) & ~Q.finite(y)
  1078. & Q.finite(z)) is None
  1079. @XFAIL
  1080. def test_issue_27662_xfail():
  1081. assert ask(Q.finite(x*y), ~Q.finite(x)
  1082. & Q.zero(y)) is None
  1083. @XFAIL
  1084. def test_bounded_xfail():
  1085. """We need to support relations in ask for this to work"""
  1086. assert ask(Q.finite(sin(x)**x)) is True
  1087. assert ask(Q.finite(cos(x)**x)) is True
  1088. def test_commutative():
  1089. """By default objects are Q.commutative that is why it returns True
  1090. for both key=True and key=False"""
  1091. assert ask(Q.commutative(x)) is True
  1092. assert ask(Q.commutative(x), ~Q.commutative(x)) is False
  1093. assert ask(Q.commutative(x), Q.complex(x)) is True
  1094. assert ask(Q.commutative(x), Q.imaginary(x)) is True
  1095. assert ask(Q.commutative(x), Q.real(x)) is True
  1096. assert ask(Q.commutative(x), Q.positive(x)) is True
  1097. assert ask(Q.commutative(x), ~Q.commutative(y)) is True
  1098. assert ask(Q.commutative(2*x)) is True
  1099. assert ask(Q.commutative(2*x), ~Q.commutative(x)) is False
  1100. assert ask(Q.commutative(x + 1)) is True
  1101. assert ask(Q.commutative(x + 1), ~Q.commutative(x)) is False
  1102. assert ask(Q.commutative(x**2)) is True
  1103. assert ask(Q.commutative(x**2), ~Q.commutative(x)) is False
  1104. assert ask(Q.commutative(log(x))) is True
  1105. @_both_exp_pow
  1106. def test_complex():
  1107. assert ask(Q.complex(x)) is None
  1108. assert ask(Q.complex(x), Q.complex(x)) is True
  1109. assert ask(Q.complex(x), Q.complex(y)) is None
  1110. assert ask(Q.complex(x), ~Q.complex(x)) is False
  1111. assert ask(Q.complex(x), Q.real(x)) is True
  1112. assert ask(Q.complex(x), ~Q.real(x)) is None
  1113. assert ask(Q.complex(x), Q.rational(x)) is True
  1114. assert ask(Q.complex(x), Q.irrational(x)) is True
  1115. assert ask(Q.complex(x), Q.positive(x)) is True
  1116. assert ask(Q.complex(x), Q.imaginary(x)) is True
  1117. assert ask(Q.complex(x), Q.algebraic(x)) is True
  1118. # a+b
  1119. assert ask(Q.complex(x + 1), Q.complex(x)) is True
  1120. assert ask(Q.complex(x + 1), Q.real(x)) is True
  1121. assert ask(Q.complex(x + 1), Q.rational(x)) is True
  1122. assert ask(Q.complex(x + 1), Q.irrational(x)) is True
  1123. assert ask(Q.complex(x + 1), Q.imaginary(x)) is True
  1124. assert ask(Q.complex(x + 1), Q.integer(x)) is True
  1125. assert ask(Q.complex(x + 1), Q.even(x)) is True
  1126. assert ask(Q.complex(x + 1), Q.odd(x)) is True
  1127. assert ask(Q.complex(x + y), Q.complex(x) & Q.complex(y)) is True
  1128. assert ask(Q.complex(x + y), Q.real(x) & Q.imaginary(y)) is True
  1129. # a*x +b
  1130. assert ask(Q.complex(2*x + 1), Q.complex(x)) is True
  1131. assert ask(Q.complex(2*x + 1), Q.real(x)) is True
  1132. assert ask(Q.complex(2*x + 1), Q.positive(x)) is True
  1133. assert ask(Q.complex(2*x + 1), Q.rational(x)) is True
  1134. assert ask(Q.complex(2*x + 1), Q.irrational(x)) is True
  1135. assert ask(Q.complex(2*x + 1), Q.imaginary(x)) is True
  1136. assert ask(Q.complex(2*x + 1), Q.integer(x)) is True
  1137. assert ask(Q.complex(2*x + 1), Q.even(x)) is True
  1138. assert ask(Q.complex(2*x + 1), Q.odd(x)) is True
  1139. # x**2
  1140. assert ask(Q.complex(x**2), Q.complex(x)) is True
  1141. assert ask(Q.complex(x**2), Q.real(x)) is True
  1142. assert ask(Q.complex(x**2), Q.positive(x)) is True
  1143. assert ask(Q.complex(x**2), Q.rational(x)) is True
  1144. assert ask(Q.complex(x**2), Q.irrational(x)) is True
  1145. assert ask(Q.complex(x**2), Q.imaginary(x)) is True
  1146. assert ask(Q.complex(x**2), Q.integer(x)) is True
  1147. assert ask(Q.complex(x**2), Q.even(x)) is True
  1148. assert ask(Q.complex(x**2), Q.odd(x)) is True
  1149. # 2**x
  1150. assert ask(Q.complex(2**x), Q.complex(x)) is True
  1151. assert ask(Q.complex(2**x), Q.real(x)) is True
  1152. assert ask(Q.complex(2**x), Q.positive(x)) is True
  1153. assert ask(Q.complex(2**x), Q.rational(x)) is True
  1154. assert ask(Q.complex(2**x), Q.irrational(x)) is True
  1155. assert ask(Q.complex(2**x), Q.imaginary(x)) is True
  1156. assert ask(Q.complex(2**x), Q.integer(x)) is True
  1157. assert ask(Q.complex(2**x), Q.even(x)) is True
  1158. assert ask(Q.complex(2**x), Q.odd(x)) is True
  1159. assert ask(Q.complex(x**y), Q.complex(x) & Q.complex(y)) is True
  1160. # trigonometric expressions
  1161. assert ask(Q.complex(sin(x))) is True
  1162. assert ask(Q.complex(sin(2*x + 1))) is True
  1163. assert ask(Q.complex(cos(x))) is True
  1164. assert ask(Q.complex(cos(2*x + 1))) is True
  1165. # exponential
  1166. assert ask(Q.complex(exp(x))) is True
  1167. assert ask(Q.complex(exp(x))) is True
  1168. # Q.complexes
  1169. assert ask(Q.complex(Abs(x))) is True
  1170. assert ask(Q.complex(re(x))) is True
  1171. assert ask(Q.complex(im(x))) is True
  1172. def test_even_query():
  1173. assert ask(Q.even(x)) is None
  1174. assert ask(Q.even(x), Q.integer(x)) is None
  1175. assert ask(Q.even(x), ~Q.integer(x)) is False
  1176. assert ask(Q.even(x), Q.rational(x)) is None
  1177. assert ask(Q.even(x), Q.positive(x)) is None
  1178. assert ask(Q.even(2*x)) is None
  1179. assert ask(Q.even(2*x), Q.integer(x)) is True
  1180. assert ask(Q.even(2*x), Q.even(x)) is True
  1181. assert ask(Q.even(2*x), Q.irrational(x)) is False
  1182. assert ask(Q.even(2*x), Q.odd(x)) is True
  1183. assert ask(Q.even(2*x), ~Q.integer(x)) is None
  1184. assert ask(Q.even(3*x), Q.integer(x)) is None
  1185. assert ask(Q.even(3*x), Q.even(x)) is True
  1186. assert ask(Q.even(3*x), Q.odd(x)) is False
  1187. assert ask(Q.even(x + 1), Q.odd(x)) is True
  1188. assert ask(Q.even(x + 1), Q.even(x)) is False
  1189. assert ask(Q.even(x + 2), Q.odd(x)) is False
  1190. assert ask(Q.even(x + 2), Q.even(x)) is True
  1191. assert ask(Q.even(7 - x), Q.odd(x)) is True
  1192. assert ask(Q.even(7 + x), Q.odd(x)) is True
  1193. assert ask(Q.even(x + y), Q.odd(x) & Q.odd(y)) is True
  1194. assert ask(Q.even(x + y), Q.odd(x) & Q.even(y)) is False
  1195. assert ask(Q.even(x + y), Q.even(x) & Q.even(y)) is True
  1196. assert ask(Q.even(2*x + 1), Q.integer(x)) is False
  1197. assert ask(Q.even(2*x*y), Q.rational(x) & Q.rational(x)) is None
  1198. assert ask(Q.even(2*x*y), Q.irrational(x) & Q.irrational(x)) is None
  1199. assert ask(Q.even(x + y + z), Q.odd(x) & Q.odd(y) & Q.even(z)) is True
  1200. assert ask(Q.even(x + y + z + t),
  1201. Q.odd(x) & Q.odd(y) & Q.even(z) & Q.integer(t)) is None
  1202. assert ask(Q.even(Abs(x)), Q.even(x)) is True
  1203. assert ask(Q.even(Abs(x)), ~Q.even(x)) is None
  1204. assert ask(Q.even(re(x)), Q.even(x)) is True
  1205. assert ask(Q.even(re(x)), ~Q.even(x)) is None
  1206. assert ask(Q.even(im(x)), Q.even(x)) is True
  1207. assert ask(Q.even(im(x)), Q.real(x)) is True
  1208. assert ask(Q.even((-1)**n), Q.integer(n)) is False
  1209. assert ask(Q.even(k**2), Q.even(k)) is True
  1210. assert ask(Q.even(n**2), Q.odd(n)) is False
  1211. assert ask(Q.even(2**k), Q.even(k)) is None
  1212. assert ask(Q.even(x**2)) is None
  1213. assert ask(Q.even(k**m), Q.even(k) & Q.integer(m) & ~Q.negative(m)) is None
  1214. assert ask(Q.even(n**m), Q.odd(n) & Q.integer(m) & ~Q.negative(m)) is False
  1215. assert ask(Q.even(k**p), Q.even(k) & Q.integer(p) & Q.positive(p)) is True
  1216. assert ask(Q.even(n**p), Q.odd(n) & Q.integer(p) & Q.positive(p)) is False
  1217. assert ask(Q.even(m**k), Q.even(k) & Q.integer(m) & ~Q.negative(m)) is None
  1218. assert ask(Q.even(p**k), Q.even(k) & Q.integer(p) & Q.positive(p)) is None
  1219. assert ask(Q.even(m**n), Q.odd(n) & Q.integer(m) & ~Q.negative(m)) is None
  1220. assert ask(Q.even(p**n), Q.odd(n) & Q.integer(p) & Q.positive(p)) is None
  1221. assert ask(Q.even(k**x), Q.even(k)) is None
  1222. assert ask(Q.even(n**x), Q.odd(n)) is None
  1223. assert ask(Q.even(x*y), Q.integer(x) & Q.integer(y)) is None
  1224. assert ask(Q.even(x*x), Q.integer(x)) is None
  1225. assert ask(Q.even(x*(x + y)), Q.integer(x) & Q.odd(y)) is True
  1226. assert ask(Q.even(x*(x + y)), Q.integer(x) & Q.even(y)) is None
  1227. @XFAIL
  1228. def test_evenness_in_ternary_integer_product_with_odd():
  1229. # Tests that oddness inference is independent of term ordering.
  1230. # Term ordering at the point of testing depends on SymPy's symbol order, so
  1231. # we try to force a different order by modifying symbol names.
  1232. assert ask(Q.even(x*y*(y + z)), Q.integer(x) & Q.integer(y) & Q.odd(z)) is True
  1233. assert ask(Q.even(y*x*(x + z)), Q.integer(x) & Q.integer(y) & Q.odd(z)) is True
  1234. def test_evenness_in_ternary_integer_product_with_even():
  1235. assert ask(Q.even(x*y*(y + z)), Q.integer(x) & Q.integer(y) & Q.even(z)) is None
  1236. def test_extended_real():
  1237. assert ask(Q.extended_real(x), Q.positive_infinite(x)) is True
  1238. assert ask(Q.extended_real(x), Q.positive(x)) is True
  1239. assert ask(Q.extended_real(x), Q.zero(x)) is True
  1240. assert ask(Q.extended_real(x), Q.negative(x)) is True
  1241. assert ask(Q.extended_real(x), Q.negative_infinite(x)) is True
  1242. assert ask(Q.extended_real(-x), Q.positive(x)) is True
  1243. assert ask(Q.extended_real(-x), Q.negative(x)) is True
  1244. assert ask(Q.extended_real(x + S.Infinity), Q.real(x)) is True
  1245. assert ask(Q.extended_real(x), Q.infinite(x)) is None
  1246. @_both_exp_pow
  1247. def test_rational():
  1248. assert ask(Q.rational(x), Q.integer(x)) is True
  1249. assert ask(Q.rational(x), Q.irrational(x)) is False
  1250. assert ask(Q.rational(x), Q.real(x)) is None
  1251. assert ask(Q.rational(x), Q.positive(x)) is None
  1252. assert ask(Q.rational(x), Q.negative(x)) is None
  1253. assert ask(Q.rational(x), Q.nonzero(x)) is None
  1254. assert ask(Q.rational(x), ~Q.algebraic(x)) is False
  1255. assert ask(Q.rational(2*x), Q.rational(x)) is True
  1256. assert ask(Q.rational(2*x), Q.integer(x)) is True
  1257. assert ask(Q.rational(2*x), Q.even(x)) is True
  1258. assert ask(Q.rational(2*x), Q.odd(x)) is True
  1259. assert ask(Q.rational(2*x), Q.irrational(x)) is False
  1260. assert ask(Q.rational(x/2), Q.rational(x)) is True
  1261. assert ask(Q.rational(x/2), Q.integer(x)) is True
  1262. assert ask(Q.rational(x/2), Q.even(x)) is True
  1263. assert ask(Q.rational(x/2), Q.odd(x)) is True
  1264. assert ask(Q.rational(x/2), Q.irrational(x)) is False
  1265. assert ask(Q.rational(1/x), Q.rational(x) & Q.nonzero(x)) is True
  1266. assert ask(Q.rational(1/x), Q.integer(x) & Q.nonzero(x)) is True
  1267. assert ask(Q.rational(1/x), Q.even(x) & Q.nonzero(x)) is True
  1268. assert ask(Q.rational(1/x), Q.odd(x)) is True
  1269. assert ask(Q.rational(1/x), Q.irrational(x)) is False
  1270. assert ask(Q.rational(2/x), Q.rational(x) & Q.nonzero(x)) is True
  1271. assert ask(Q.rational(2/x), Q.integer(x) & Q.nonzero(x)) is True
  1272. assert ask(Q.rational(2/x), Q.even(x) & Q.nonzero(x)) is True
  1273. assert ask(Q.rational(2/x), Q.odd(x)) is True
  1274. assert ask(Q.rational(2/x), Q.irrational(x)) is False
  1275. assert ask(Q.rational(x), ~Q.algebraic(x)) is False
  1276. # with multiple symbols
  1277. assert ask(Q.rational(x*y), Q.irrational(x) & Q.irrational(y)) is None
  1278. assert ask(Q.rational(y/x), Q.rational(x) & Q.rational(y) & Q.nonzero(x)) is True
  1279. assert ask(Q.rational(y/x), Q.integer(x) & Q.rational(y) & Q.nonzero(x)) is True
  1280. assert ask(Q.rational(y/x), Q.even(x) & Q.rational(y) & Q.nonzero(x)) is True
  1281. assert ask(Q.rational(y/x), Q.odd(x) & Q.rational(y)) is True
  1282. assert ask(Q.rational(y/x), Q.irrational(x) & Q.rational(y) & Q.nonzero(y)) is False
  1283. for f in [exp, sin, tan, asin, atan, cos]:
  1284. assert ask(Q.rational(f(7))) is False
  1285. assert ask(Q.rational(f(7, evaluate=False))) is False
  1286. assert ask(Q.rational(f(0, evaluate=False))) is True
  1287. assert ask(Q.rational(f(x)), Q.rational(x)) is None
  1288. assert ask(Q.rational(f(x)), Q.rational(x) & Q.nonzero(x)) is False
  1289. for g in [log, acos]:
  1290. assert ask(Q.rational(g(7))) is False
  1291. assert ask(Q.rational(g(7, evaluate=False))) is False
  1292. assert ask(Q.rational(g(1, evaluate=False))) is True
  1293. assert ask(Q.rational(g(x)), Q.rational(x)) is None
  1294. assert ask(Q.rational(g(x)), Q.rational(x) & Q.nonzero(x - 1)) is False
  1295. for h in [cot, acot]:
  1296. assert ask(Q.rational(h(7))) is False
  1297. assert ask(Q.rational(h(7, evaluate=False))) is False
  1298. assert ask(Q.rational(h(x)), Q.rational(x)) is False
  1299. # https://github.com/sympy/sympy/issues/27442
  1300. assert ask(Q.rational(x**y),Q.irrational(x) & Q.rational(y)) is None
  1301. assert ask(Q.rational(x**y),Q.integer(x) & Q.prime(x) & Q.rational(y)) is None
  1302. assert ask(Q.rational(x**y),Q.integer(x) & Q.integer(y)) is None
  1303. assert ask(Q.rational(x**y),Q.integer(x) & Q.eq(x,0) & Q.integer(y)) is None
  1304. assert ask(Q.rational(x**y),Q.eq(x,1) & Q.rational(y)) is None
  1305. assert ask(Q.rational(x**y),Q.eq(x,-1) & Q.rational(y)) is None
  1306. assert ask(Q.rational(x**y), Q.prime(x) & Q.rational(y)) is None
  1307. assert ask(Q.rational(x**y), ~Q.rational(x) & Q.integer(y) ) is None
  1308. assert ask(Q.rational(Pow(-1, x, evaluate=False), Q.rational(x))) is None
  1309. assert ask(Q.rational(x**y), Q.integer(y) & ~Q. algebraic(x)) is None
  1310. assert ask(Q.rational(x**y), Q.integer(y) & ~Q. algebraic(x) & ~Q.zero(x)) is None
  1311. assert ask(Q.rational(x**y), Q.integer(y) & ~Q.algebraic(x) & Q.complex(x) & ~Q.real(x)) is None
  1312. assert ask(Q.rational(x**y), Q.integer(y) & ~Q.algebraic(x) & Q.complex(x)) is None
  1313. def test_hermitian():
  1314. assert ask(Q.hermitian(x)) is None
  1315. assert ask(Q.hermitian(x), Q.antihermitian(x)) is None
  1316. assert ask(Q.hermitian(x), Q.imaginary(x)) is False
  1317. assert ask(Q.hermitian(x), Q.prime(x)) is True
  1318. assert ask(Q.hermitian(x), Q.real(x)) is True
  1319. assert ask(Q.hermitian(x), Q.zero(x)) is True
  1320. assert ask(Q.hermitian(x + 1), Q.antihermitian(x)) is None
  1321. assert ask(Q.hermitian(x + 1), Q.complex(x)) is None
  1322. assert ask(Q.hermitian(x + 1), Q.hermitian(x)) is True
  1323. assert ask(Q.hermitian(x + 1), Q.imaginary(x)) is False
  1324. assert ask(Q.hermitian(x + 1), Q.real(x)) is True
  1325. assert ask(Q.hermitian(x + I), Q.antihermitian(x)) is None
  1326. assert ask(Q.hermitian(x + I), Q.complex(x)) is None
  1327. assert ask(Q.hermitian(x + I), Q.hermitian(x)) is False
  1328. assert ask(Q.hermitian(x + I), Q.imaginary(x)) is None
  1329. assert ask(Q.hermitian(x + I), Q.real(x)) is False
  1330. assert ask(
  1331. Q.hermitian(x + y), Q.antihermitian(x) & Q.antihermitian(y)) is None
  1332. assert ask(Q.hermitian(x + y), Q.antihermitian(x) & Q.complex(y)) is None
  1333. assert ask(
  1334. Q.hermitian(x + y), Q.antihermitian(x) & Q.hermitian(y)) is None
  1335. assert ask(Q.hermitian(x + y), Q.antihermitian(x) & Q.imaginary(y)) is None
  1336. assert ask(Q.hermitian(x + y), Q.antihermitian(x) & Q.real(y)) is None
  1337. assert ask(Q.hermitian(x + y), Q.hermitian(x) & Q.complex(y)) is None
  1338. assert ask(Q.hermitian(x + y), Q.hermitian(x) & Q.hermitian(y)) is True
  1339. assert ask(Q.hermitian(x + y), Q.hermitian(x) & Q.imaginary(y)) is False
  1340. assert ask(Q.hermitian(x + y), Q.hermitian(x) & Q.real(y)) is True
  1341. assert ask(Q.hermitian(x + y), Q.imaginary(x) & Q.complex(y)) is None
  1342. assert ask(Q.hermitian(x + y), Q.imaginary(x) & Q.imaginary(y)) is None
  1343. assert ask(Q.hermitian(x + y), Q.imaginary(x) & Q.real(y)) is False
  1344. assert ask(Q.hermitian(x + y), Q.real(x) & Q.complex(y)) is None
  1345. assert ask(Q.hermitian(x + y), Q.real(x) & Q.real(y)) is True
  1346. assert ask(Q.hermitian(I*x), Q.antihermitian(x)) is True
  1347. assert ask(Q.hermitian(I*x), Q.complex(x)) is None
  1348. assert ask(Q.hermitian(I*x), Q.hermitian(x)) is False
  1349. assert ask(Q.hermitian(I*x), Q.imaginary(x)) is True
  1350. assert ask(Q.hermitian(I*x), Q.real(x)) is False
  1351. assert ask(Q.hermitian(x*y), Q.hermitian(x) & Q.real(y)) is True
  1352. assert ask(
  1353. Q.hermitian(x + y + z), Q.real(x) & Q.real(y) & Q.real(z)) is True
  1354. assert ask(Q.hermitian(x + y + z),
  1355. Q.real(x) & Q.real(y) & Q.imaginary(z)) is False
  1356. assert ask(Q.hermitian(x + y + z),
  1357. Q.real(x) & Q.imaginary(y) & Q.imaginary(z)) is None
  1358. assert ask(Q.hermitian(x + y + z),
  1359. Q.imaginary(x) & Q.imaginary(y) & Q.imaginary(z)) is None
  1360. assert ask(Q.antihermitian(x)) is None
  1361. assert ask(Q.antihermitian(x), Q.real(x)) is False
  1362. assert ask(Q.antihermitian(x), Q.prime(x)) is False
  1363. assert ask(Q.antihermitian(x + 1), Q.antihermitian(x)) is False
  1364. assert ask(Q.antihermitian(x + 1), Q.complex(x)) is None
  1365. assert ask(Q.antihermitian(x + 1), Q.hermitian(x)) is None
  1366. assert ask(Q.antihermitian(x + 1), Q.imaginary(x)) is False
  1367. assert ask(Q.antihermitian(x + 1), Q.real(x)) is None
  1368. assert ask(Q.antihermitian(x + I), Q.antihermitian(x)) is True
  1369. assert ask(Q.antihermitian(x + I), Q.complex(x)) is None
  1370. assert ask(Q.antihermitian(x + I), Q.hermitian(x)) is None
  1371. assert ask(Q.antihermitian(x + I), Q.imaginary(x)) is True
  1372. assert ask(Q.antihermitian(x + I), Q.real(x)) is False
  1373. assert ask(Q.antihermitian(x), Q.zero(x)) is True
  1374. assert ask(
  1375. Q.antihermitian(x + y), Q.antihermitian(x) & Q.antihermitian(y)
  1376. ) is True
  1377. assert ask(
  1378. Q.antihermitian(x + y), Q.antihermitian(x) & Q.complex(y)) is None
  1379. assert ask(
  1380. Q.antihermitian(x + y), Q.antihermitian(x) & Q.hermitian(y)) is None
  1381. assert ask(
  1382. Q.antihermitian(x + y), Q.antihermitian(x) & Q.imaginary(y)) is True
  1383. assert ask(Q.antihermitian(x + y), Q.antihermitian(x) & Q.real(y)
  1384. ) is False
  1385. assert ask(Q.antihermitian(x + y), Q.hermitian(x) & Q.complex(y)) is None
  1386. assert ask(Q.antihermitian(x + y), Q.hermitian(x) & Q.hermitian(y)
  1387. ) is None
  1388. assert ask(
  1389. Q.antihermitian(x + y), Q.hermitian(x) & Q.imaginary(y)) is None
  1390. assert ask(Q.antihermitian(x + y), Q.hermitian(x) & Q.real(y)) is None
  1391. assert ask(Q.antihermitian(x + y), Q.imaginary(x) & Q.complex(y)) is None
  1392. assert ask(Q.antihermitian(x + y), Q.imaginary(x) & Q.imaginary(y)) is True
  1393. assert ask(Q.antihermitian(x + y), Q.imaginary(x) & Q.real(y)) is False
  1394. assert ask(Q.antihermitian(x + y), Q.real(x) & Q.complex(y)) is None
  1395. assert ask(Q.antihermitian(x + y), Q.real(x) & Q.real(y)) is None
  1396. assert ask(Q.antihermitian(I*x), Q.real(x)) is True
  1397. assert ask(Q.antihermitian(I*x), Q.antihermitian(x)) is False
  1398. assert ask(Q.antihermitian(I*x), Q.complex(x)) is None
  1399. assert ask(Q.antihermitian(x*y), Q.antihermitian(x) & Q.real(y)) is True
  1400. assert ask(Q.antihermitian(x + y + z),
  1401. Q.real(x) & Q.real(y) & Q.real(z)) is None
  1402. assert ask(Q.antihermitian(x + y + z),
  1403. Q.real(x) & Q.real(y) & Q.imaginary(z)) is None
  1404. assert ask(Q.antihermitian(x + y + z),
  1405. Q.real(x) & Q.imaginary(y) & Q.imaginary(z)) is False
  1406. assert ask(Q.antihermitian(x + y + z),
  1407. Q.imaginary(x) & Q.imaginary(y) & Q.imaginary(z)) is True
  1408. @_both_exp_pow
  1409. def test_imaginary():
  1410. assert ask(Q.imaginary(x)) is None
  1411. assert ask(Q.imaginary(x), Q.real(x)) is False
  1412. assert ask(Q.imaginary(x), Q.prime(x)) is False
  1413. assert ask(Q.imaginary(x + 1), Q.real(x)) is False
  1414. assert ask(Q.imaginary(x + 1), Q.imaginary(x)) is False
  1415. assert ask(Q.imaginary(x + I), Q.real(x)) is False
  1416. assert ask(Q.imaginary(x + I), Q.imaginary(x)) is True
  1417. assert ask(Q.imaginary(x + y), Q.imaginary(x) & Q.imaginary(y)) is True
  1418. assert ask(Q.imaginary(x + y), Q.real(x) & Q.real(y)) is False
  1419. assert ask(Q.imaginary(x + y), Q.imaginary(x) & Q.real(y)) is False
  1420. assert ask(Q.imaginary(x + y), Q.complex(x) & Q.real(y)) is None
  1421. assert ask(
  1422. Q.imaginary(x + y + z), Q.real(x) & Q.real(y) & Q.real(z)) is False
  1423. assert ask(Q.imaginary(x + y + z),
  1424. Q.real(x) & Q.real(y) & Q.imaginary(z)) is None
  1425. assert ask(Q.imaginary(x + y + z),
  1426. Q.real(x) & Q.imaginary(y) & Q.imaginary(z)) is False
  1427. assert ask(Q.imaginary(I*x), Q.real(x)) is True
  1428. assert ask(Q.imaginary(I*x), Q.imaginary(x)) is False
  1429. assert ask(Q.imaginary(I*x), Q.complex(x)) is None
  1430. assert ask(Q.imaginary(x*y), Q.imaginary(x) & Q.real(y)) is True
  1431. assert ask(Q.imaginary(x*y), Q.real(x) & Q.real(y)) is False
  1432. assert ask(Q.imaginary(I**x), Q.negative(x)) is None
  1433. assert ask(Q.imaginary(I**x), Q.positive(x)) is None
  1434. assert ask(Q.imaginary(I**x), Q.even(x)) is False
  1435. assert ask(Q.imaginary(I**x), Q.odd(x)) is True
  1436. assert ask(Q.imaginary(I**x), Q.imaginary(x)) is False
  1437. assert ask(Q.imaginary((2*I)**x), Q.imaginary(x)) is False
  1438. assert ask(Q.imaginary(x**0), Q.imaginary(x)) is False
  1439. assert ask(Q.imaginary(x**y), Q.imaginary(x) & Q.imaginary(y)) is None
  1440. assert ask(Q.imaginary(x**y), Q.imaginary(x) & Q.real(y)) is None
  1441. assert ask(Q.imaginary(x**y), Q.real(x) & Q.imaginary(y)) is None
  1442. assert ask(Q.imaginary(x**y), Q.real(x) & Q.real(y)) is None
  1443. assert ask(Q.imaginary(x**y), Q.imaginary(x) & Q.integer(y)) is None
  1444. assert ask(Q.imaginary(x**y), Q.imaginary(y) & Q.integer(x)) is None
  1445. assert ask(Q.imaginary(x**y), Q.imaginary(x) & Q.odd(y)) is True
  1446. assert ask(Q.imaginary(x**y), Q.imaginary(x) & Q.rational(y)) is None
  1447. assert ask(Q.imaginary(x**y), Q.imaginary(x) & Q.even(y)) is False
  1448. assert ask(Q.imaginary(x**y), Q.real(x) & Q.integer(y)) is False
  1449. assert ask(Q.imaginary(x**y), Q.positive(x) & Q.real(y)) is False
  1450. assert ask(Q.imaginary(x**y), Q.negative(x) & Q.real(y)) is None
  1451. assert ask(Q.imaginary(x**y), Q.negative(x) & Q.real(y) & ~Q.rational(y)) is False
  1452. assert ask(Q.imaginary(x**y), Q.integer(x) & Q.imaginary(y)) is None
  1453. assert ask(Q.imaginary(x**y), Q.negative(x) & Q.rational(y) & Q.integer(2*y)) is True
  1454. assert ask(Q.imaginary(x**y), Q.negative(x) & Q.rational(y) & ~Q.integer(2*y)) is False
  1455. assert ask(Q.imaginary(x**y), Q.negative(x) & Q.rational(y)) is None
  1456. assert ask(Q.imaginary(x**y), Q.real(x) & Q.rational(y) & ~Q.integer(2*y)) is False
  1457. assert ask(Q.imaginary(x**y), Q.real(x) & Q.rational(y) & Q.integer(2*y)) is None
  1458. # logarithm
  1459. assert ask(Q.imaginary(log(I))) is True
  1460. assert ask(Q.imaginary(log(2*I))) is False
  1461. assert ask(Q.imaginary(log(I + 1))) is False
  1462. assert ask(Q.imaginary(log(x)), Q.complex(x)) is None
  1463. assert ask(Q.imaginary(log(x)), Q.imaginary(x)) is None
  1464. assert ask(Q.imaginary(log(x)), Q.positive(x)) is False
  1465. assert ask(Q.imaginary(log(exp(x))), Q.complex(x)) is None
  1466. assert ask(Q.imaginary(log(exp(x))), Q.imaginary(x)) is None # zoo/I/a+I*b
  1467. assert ask(Q.imaginary(log(exp(I)))) is True
  1468. # exponential
  1469. assert ask(Q.imaginary(exp(x)**x), Q.imaginary(x)) is False
  1470. eq = Pow(exp(pi*I*x, evaluate=False), x, evaluate=False)
  1471. assert ask(Q.imaginary(eq), Q.even(x)) is False
  1472. eq = Pow(exp(pi*I*x/2, evaluate=False), x, evaluate=False)
  1473. assert ask(Q.imaginary(eq), Q.odd(x)) is True
  1474. assert ask(Q.imaginary(exp(3*I*pi*x)**x), Q.integer(x)) is False
  1475. assert ask(Q.imaginary(exp(2*pi*I, evaluate=False))) is False
  1476. assert ask(Q.imaginary(exp(pi*I/2, evaluate=False))) is True
  1477. # issue 7886
  1478. assert ask(Q.imaginary(Pow(x, Rational(1, 4))), Q.real(x) & Q.negative(x)) is False
  1479. def test_integer():
  1480. assert ask(Q.integer(x)) is None
  1481. assert ask(Q.integer(x), Q.integer(x)) is True
  1482. assert ask(Q.integer(x), ~Q.integer(x)) is False
  1483. assert ask(Q.integer(x), ~Q.real(x)) is False
  1484. assert ask(Q.integer(x), ~Q.positive(x)) is None
  1485. assert ask(Q.integer(x), Q.even(x) | Q.odd(x)) is True
  1486. assert ask(Q.integer(2*x), Q.integer(x)) is True
  1487. assert ask(Q.integer(2*x), Q.even(x)) is True
  1488. assert ask(Q.integer(2*x), Q.prime(x)) is True
  1489. assert ask(Q.integer(2*x), Q.rational(x)) is None
  1490. assert ask(Q.integer(2*x), Q.real(x)) is None
  1491. assert ask(Q.integer(sqrt(2)*x), Q.integer(x)) is False
  1492. assert ask(Q.integer(sqrt(2)*x), Q.irrational(x)) is None
  1493. assert ask(Q.integer(x/2), Q.odd(x)) is False
  1494. assert ask(Q.integer(x/2), Q.even(x)) is True
  1495. assert ask(Q.integer(x/3), Q.odd(x)) is None
  1496. assert ask(Q.integer(x/3), Q.even(x)) is None
  1497. # https://github.com/sympy/sympy/issues/7286
  1498. assert ask(Q.integer(Abs(x)),Q.integer(x)) is True
  1499. assert ask(Q.integer(Abs(-x)),Q.integer(x)) is True
  1500. assert ask(Q.integer(Abs(x)), ~Q.integer(x)) is None
  1501. assert ask(Q.integer(Abs(x)),Q.complex(x)) is None
  1502. assert ask(Q.integer(Abs(x+I*y)),Q.real(x) & Q.real(y)) is None
  1503. # https://github.com/sympy/sympy/issues/27739
  1504. assert ask(Q.integer(x/y), Q.integer(x) & Q.integer(y)) is None
  1505. assert ask(Q.integer(1/x), Q.integer(x)) is None
  1506. assert ask(Q.integer(x**y), Q.integer(x) & Q.integer(y)) is None
  1507. assert ask(Q.integer(sqrt(5))) is False
  1508. assert ask(Q.integer(x**y), Q.nonzero(x) & Q.zero(y)) is True
  1509. assert ask(Q.integer(x**y), Q.integer(x) & Q.integer(y) & Q.positive(y)) is True
  1510. assert ask(Q.integer(-1**x), Q.integer(x)) is True
  1511. assert ask(Q.integer(x**y), Q.integer(x) & Q.integer(y) & Q.positive(y)) is True
  1512. assert ask(Q.integer(x**y), Q.zero(x) & Q.integer(y) & Q.positive(y)) is True
  1513. assert ask(Q.integer(pi**x), Q.zero(x)) is True
  1514. assert ask(Q.integer(x**y), Q.imaginary(x) & Q.zero(y)) is True
  1515. def test_negative():
  1516. assert ask(Q.negative(x), Q.negative(x)) is True
  1517. assert ask(Q.negative(x), Q.positive(x)) is False
  1518. assert ask(Q.negative(x), ~Q.real(x)) is False
  1519. assert ask(Q.negative(x), Q.prime(x)) is False
  1520. assert ask(Q.negative(x), ~Q.prime(x)) is None
  1521. assert ask(Q.negative(-x), Q.positive(x)) is True
  1522. assert ask(Q.negative(-x), ~Q.positive(x)) is None
  1523. assert ask(Q.negative(-x), Q.negative(x)) is False
  1524. assert ask(Q.negative(-x), Q.positive(x)) is True
  1525. assert ask(Q.negative(x - 1), Q.negative(x)) is True
  1526. assert ask(Q.negative(x + y)) is None
  1527. assert ask(Q.negative(x + y), Q.negative(x)) is None
  1528. assert ask(Q.negative(x + y), Q.negative(x) & Q.negative(y)) is True
  1529. assert ask(Q.negative(x + y), Q.negative(x) & Q.nonpositive(y)) is True
  1530. assert ask(Q.negative(2 + I)) is False
  1531. # although this could be False, it is representative of expressions
  1532. # that don't evaluate to a zero with precision
  1533. assert ask(Q.negative(cos(I)**2 + sin(I)**2 - 1)) is None
  1534. assert ask(Q.negative(-I + I*(cos(2)**2 + sin(2)**2))) is None
  1535. assert ask(Q.negative(x**2)) is None
  1536. assert ask(Q.negative(x**2), Q.real(x)) is False
  1537. assert ask(Q.negative(x**1.4), Q.real(x)) is None
  1538. assert ask(Q.negative(x**I), Q.positive(x)) is None
  1539. assert ask(Q.negative(x*y)) is None
  1540. assert ask(Q.negative(x*y), Q.positive(x) & Q.positive(y)) is False
  1541. assert ask(Q.negative(x*y), Q.positive(x) & Q.negative(y)) is True
  1542. assert ask(Q.negative(x*y), Q.complex(x) & Q.complex(y)) is None
  1543. assert ask(Q.negative(x**y)) is None
  1544. assert ask(Q.negative(x**y), Q.negative(x) & Q.even(y)) is False
  1545. assert ask(Q.negative(x**y), Q.negative(x) & Q.odd(y)) is True
  1546. assert ask(Q.negative(x**y), Q.positive(x) & Q.integer(y)) is False
  1547. assert ask(Q.negative(Abs(x))) is False
  1548. def test_nonzero():
  1549. assert ask(Q.nonzero(x)) is None
  1550. assert ask(Q.nonzero(x), Q.real(x)) is None
  1551. assert ask(Q.nonzero(x), Q.positive(x)) is True
  1552. assert ask(Q.nonzero(x), Q.negative(x)) is True
  1553. assert ask(Q.nonzero(x), Q.negative(x) | Q.positive(x)) is True
  1554. assert ask(Q.nonzero(x + y)) is None
  1555. assert ask(Q.nonzero(x + y), Q.positive(x) & Q.positive(y)) is True
  1556. assert ask(Q.nonzero(x + y), Q.positive(x) & Q.negative(y)) is None
  1557. assert ask(Q.nonzero(x + y), Q.negative(x) & Q.negative(y)) is True
  1558. assert ask(Q.nonzero(2*x)) is None
  1559. assert ask(Q.nonzero(2*x), Q.positive(x)) is True
  1560. assert ask(Q.nonzero(2*x), Q.negative(x)) is True
  1561. assert ask(Q.nonzero(x*y), Q.nonzero(x)) is None
  1562. assert ask(Q.nonzero(x*y), Q.nonzero(x) & Q.nonzero(y)) is True
  1563. assert ask(Q.nonzero(x**y), Q.nonzero(x)) is True
  1564. assert ask(Q.nonzero(Abs(x))) is None
  1565. assert ask(Q.nonzero(Abs(x)), Q.nonzero(x)) is True
  1566. assert ask(Q.nonzero(log(exp(2*I)))) is False
  1567. # although this could be False, it is representative of expressions
  1568. # that don't evaluate to a zero with precision
  1569. assert ask(Q.nonzero(cos(1)**2 + sin(1)**2 - 1)) is None
  1570. def test_zero():
  1571. assert ask(Q.zero(x)) is None
  1572. assert ask(Q.zero(x), Q.real(x)) is None
  1573. assert ask(Q.zero(x), Q.positive(x)) is False
  1574. assert ask(Q.zero(x), Q.negative(x)) is False
  1575. assert ask(Q.zero(x), Q.negative(x) | Q.positive(x)) is False
  1576. assert ask(Q.zero(x), Q.nonnegative(x) & Q.nonpositive(x)) is True
  1577. assert ask(Q.zero(x + y)) is None
  1578. assert ask(Q.zero(x + y), Q.positive(x) & Q.positive(y)) is False
  1579. assert ask(Q.zero(x + y), Q.positive(x) & Q.negative(y)) is None
  1580. assert ask(Q.zero(x + y), Q.negative(x) & Q.negative(y)) is False
  1581. assert ask(Q.zero(2*x)) is None
  1582. assert ask(Q.zero(2*x), Q.positive(x)) is False
  1583. assert ask(Q.zero(2*x), Q.negative(x)) is False
  1584. assert ask(Q.zero(x*y), Q.nonzero(x)) is None
  1585. assert ask(Q.zero(Abs(x))) is None
  1586. assert ask(Q.zero(Abs(x)), Q.zero(x)) is True
  1587. assert ask(Q.integer(x), Q.zero(x)) is True
  1588. assert ask(Q.even(x), Q.zero(x)) is True
  1589. assert ask(Q.odd(x), Q.zero(x)) is False
  1590. assert ask(Q.zero(x), Q.even(x)) is None
  1591. assert ask(Q.zero(x), Q.odd(x)) is False
  1592. assert ask(Q.zero(x) | Q.zero(y), Q.zero(x*y)) is True
  1593. def test_odd_query():
  1594. assert ask(Q.odd(x)) is None
  1595. assert ask(Q.odd(x), Q.odd(x)) is True
  1596. assert ask(Q.odd(x), Q.integer(x)) is None
  1597. assert ask(Q.odd(x), ~Q.integer(x)) is False
  1598. assert ask(Q.odd(x), Q.rational(x)) is None
  1599. assert ask(Q.odd(x), Q.positive(x)) is None
  1600. assert ask(Q.odd(-x), Q.odd(x)) is True
  1601. assert ask(Q.odd(2*x)) is None
  1602. assert ask(Q.odd(2*x), Q.integer(x)) is False
  1603. assert ask(Q.odd(2*x), Q.odd(x)) is False
  1604. assert ask(Q.odd(2*x), Q.irrational(x)) is False
  1605. assert ask(Q.odd(2*x), ~Q.integer(x)) is None
  1606. assert ask(Q.odd(3*x), Q.integer(x)) is None
  1607. assert ask(Q.odd(x/3), Q.odd(x)) is None
  1608. assert ask(Q.odd(x/3), Q.even(x)) is None
  1609. assert ask(Q.odd(x + 1), Q.even(x)) is True
  1610. assert ask(Q.odd(x + 2), Q.even(x)) is False
  1611. assert ask(Q.odd(x + 2), Q.odd(x)) is True
  1612. assert ask(Q.odd(3 - x), Q.odd(x)) is False
  1613. assert ask(Q.odd(3 - x), Q.even(x)) is True
  1614. assert ask(Q.odd(3 + x), Q.odd(x)) is False
  1615. assert ask(Q.odd(3 + x), Q.even(x)) is True
  1616. assert ask(Q.odd(x + y), Q.odd(x) & Q.odd(y)) is False
  1617. assert ask(Q.odd(x + y), Q.odd(x) & Q.even(y)) is True
  1618. assert ask(Q.odd(x - y), Q.even(x) & Q.odd(y)) is True
  1619. assert ask(Q.odd(x - y), Q.odd(x) & Q.odd(y)) is False
  1620. assert ask(Q.odd(x + y + z), Q.odd(x) & Q.odd(y) & Q.even(z)) is False
  1621. assert ask(Q.odd(x + y + z + t),
  1622. Q.odd(x) & Q.odd(y) & Q.even(z) & Q.integer(t)) is None
  1623. assert ask(Q.odd(2*x + 1), Q.integer(x)) is True
  1624. assert ask(Q.odd(2*x + y), Q.integer(x) & Q.odd(y)) is True
  1625. assert ask(Q.odd(2*x + y), Q.integer(x) & Q.even(y)) is False
  1626. assert ask(Q.odd(2*x + y), Q.integer(x) & Q.integer(y)) is None
  1627. assert ask(Q.odd(x*y), Q.odd(x) & Q.even(y)) is False
  1628. assert ask(Q.odd(x*y), Q.odd(x) & Q.odd(y)) is True
  1629. assert ask(Q.odd(2*x*y), Q.rational(x) & Q.rational(x)) is None
  1630. assert ask(Q.odd(2*x*y), Q.irrational(x) & Q.irrational(x)) is None
  1631. assert ask(Q.odd(Abs(x)), Q.odd(x)) is True
  1632. assert ask(Q.odd((-1)**n), Q.integer(n)) is True
  1633. assert ask(Q.odd(k**2), Q.even(k)) is False
  1634. assert ask(Q.odd(n**2), Q.odd(n)) is True
  1635. assert ask(Q.odd(3**k), Q.even(k)) is None
  1636. assert ask(Q.odd(k**m), Q.even(k) & Q.integer(m) & ~Q.negative(m)) is None
  1637. assert ask(Q.odd(n**m), Q.odd(n) & Q.integer(m) & ~Q.negative(m)) is True
  1638. assert ask(Q.odd(k**p), Q.even(k) & Q.integer(p) & Q.positive(p)) is False
  1639. assert ask(Q.odd(n**p), Q.odd(n) & Q.integer(p) & Q.positive(p)) is True
  1640. assert ask(Q.odd(m**k), Q.even(k) & Q.integer(m) & ~Q.negative(m)) is None
  1641. assert ask(Q.odd(p**k), Q.even(k) & Q.integer(p) & Q.positive(p)) is None
  1642. assert ask(Q.odd(m**n), Q.odd(n) & Q.integer(m) & ~Q.negative(m)) is None
  1643. assert ask(Q.odd(p**n), Q.odd(n) & Q.integer(p) & Q.positive(p)) is None
  1644. assert ask(Q.odd(k**x), Q.even(k)) is None
  1645. assert ask(Q.odd(n**x), Q.odd(n)) is None
  1646. assert ask(Q.odd(x*y), Q.integer(x) & Q.integer(y)) is None
  1647. assert ask(Q.odd(x*x), Q.integer(x)) is None
  1648. assert ask(Q.odd(x*(x + y)), Q.integer(x) & Q.odd(y)) is False
  1649. assert ask(Q.odd(x*(x + y)), Q.integer(x) & Q.even(y)) is None
  1650. @XFAIL
  1651. def test_oddness_in_ternary_integer_product_with_odd():
  1652. # Tests that oddness inference is independent of term ordering.
  1653. # Term ordering at the point of testing depends on SymPy's symbol order, so
  1654. # we try to force a different order by modifying symbol names.
  1655. assert ask(Q.odd(x*y*(y + z)), Q.integer(x) & Q.integer(y) & Q.odd(z)) is False
  1656. assert ask(Q.odd(y*x*(x + z)), Q.integer(x) & Q.integer(y) & Q.odd(z)) is False
  1657. def test_oddness_in_ternary_integer_product_with_even():
  1658. assert ask(Q.odd(x*y*(y + z)), Q.integer(x) & Q.integer(y) & Q.even(z)) is None
  1659. def test_prime():
  1660. assert ask(Q.prime(x), Q.prime(x)) is True
  1661. assert ask(Q.prime(x), ~Q.prime(x)) is False
  1662. assert ask(Q.prime(x), Q.integer(x)) is None
  1663. assert ask(Q.prime(x), ~Q.integer(x)) is False
  1664. assert ask(Q.prime(2*x), Q.integer(x)) is None
  1665. assert ask(Q.prime(x*y)) is None
  1666. assert ask(Q.prime(x*y), Q.prime(x)) is None
  1667. assert ask(Q.prime(x*y), Q.integer(x) & Q.integer(y)) is None
  1668. assert ask(Q.prime(4*x), Q.integer(x)) is False
  1669. assert ask(Q.prime(4*x)) is None
  1670. assert ask(Q.prime(x**2), Q.integer(x)) is False
  1671. assert ask(Q.prime(x**2), Q.prime(x)) is False
  1672. # https://github.com/sympy/sympy/issues/27446
  1673. assert ask(Q.prime(4**x), Q.integer(x)) is False
  1674. assert ask(Q.prime(p**x), Q.prime(p) & Q.integer(x) & Q.ne(x, 1)) is False
  1675. assert ask(Q.prime(n**x), Q.integer(x) & Q.composite(n)) is False
  1676. assert ask(Q.prime(x**y), Q.integer(x) & Q.integer(y)) is None
  1677. assert ask(Q.prime(2**x), Q.integer(x)) is None
  1678. assert ask(Q.prime(p**x), Q.prime(p) & Q.integer(x)) is None
  1679. # Ideally, these should return True since the base is prime and the exponent is one,
  1680. # but currently, they return None.
  1681. assert ask(Q.prime(x**y), Q.prime(x) & Q.eq(y,1)) is None
  1682. assert ask(Q.prime(x**y), Q.prime(x) & Q.integer(y) & Q.gt(y,0) & Q.lt(y,2)) is None
  1683. assert ask(Q.prime(Pow(x,1, evaluate=False)), Q.prime(x)) is True
  1684. @_both_exp_pow
  1685. def test_positive():
  1686. assert ask(Q.positive(cos(I) ** 2 + sin(I) ** 2 - 1)) is None
  1687. assert ask(Q.positive(x), Q.positive(x)) is True
  1688. assert ask(Q.positive(x), Q.negative(x)) is False
  1689. assert ask(Q.positive(x), Q.nonzero(x)) is None
  1690. assert ask(Q.positive(-x), Q.positive(x)) is False
  1691. assert ask(Q.positive(-x), Q.negative(x)) is True
  1692. assert ask(Q.positive(x + y), Q.positive(x) & Q.positive(y)) is True
  1693. assert ask(Q.positive(x + y), Q.positive(x) & Q.nonnegative(y)) is True
  1694. assert ask(Q.positive(x + y), Q.positive(x) & Q.negative(y)) is None
  1695. assert ask(Q.positive(x + y), Q.positive(x) & Q.imaginary(y)) is False
  1696. assert ask(Q.positive(2*x), Q.positive(x)) is True
  1697. assumptions = Q.positive(x) & Q.negative(y) & Q.negative(z) & Q.positive(w)
  1698. assert ask(Q.positive(x*y*z)) is None
  1699. assert ask(Q.positive(x*y*z), assumptions) is True
  1700. assert ask(Q.positive(-x*y*z), assumptions) is False
  1701. assert ask(Q.positive(x**I), Q.positive(x)) is None
  1702. assert ask(Q.positive(x**2), Q.positive(x)) is True
  1703. assert ask(Q.positive(x**2), Q.negative(x)) is True
  1704. assert ask(Q.positive(x**3), Q.negative(x)) is False
  1705. assert ask(Q.positive(1/(1 + x**2)), Q.real(x)) is True
  1706. assert ask(Q.positive(2**I)) is False
  1707. assert ask(Q.positive(2 + I)) is False
  1708. # although this could be False, it is representative of expressions
  1709. # that don't evaluate to a zero with precision
  1710. assert ask(Q.positive(cos(I)**2 + sin(I)**2 - 1)) is None
  1711. assert ask(Q.positive(-I + I*(cos(2)**2 + sin(2)**2))) is None
  1712. #exponential
  1713. assert ask(Q.positive(exp(x)), Q.real(x)) is True
  1714. assert ask(~Q.negative(exp(x)), Q.real(x)) is True
  1715. assert ask(Q.positive(x + exp(x)), Q.real(x)) is None
  1716. assert ask(Q.positive(exp(x)), Q.imaginary(x)) is None
  1717. assert ask(Q.positive(exp(2*pi*I, evaluate=False)), Q.imaginary(x)) is True
  1718. assert ask(Q.negative(exp(pi*I, evaluate=False)), Q.imaginary(x)) is True
  1719. assert ask(Q.positive(exp(x*pi*I)), Q.even(x)) is True
  1720. assert ask(Q.positive(exp(x*pi*I)), Q.odd(x)) is False
  1721. assert ask(Q.positive(exp(x*pi*I)), Q.real(x)) is None
  1722. # logarithm
  1723. assert ask(Q.positive(log(x)), Q.imaginary(x)) is False
  1724. assert ask(Q.positive(log(x)), Q.negative(x)) is False
  1725. assert ask(Q.positive(log(x)), Q.positive(x)) is None
  1726. assert ask(Q.positive(log(x + 2)), Q.positive(x)) is True
  1727. # factorial
  1728. assert ask(Q.positive(factorial(x)), Q.integer(x) & Q.positive(x))
  1729. assert ask(Q.positive(factorial(x)), Q.integer(x)) is None
  1730. #absolute value
  1731. assert ask(Q.positive(Abs(x))) is None # Abs(0) = 0
  1732. assert ask(Q.positive(Abs(x)), Q.positive(x)) is True
  1733. def test_nonpositive():
  1734. assert ask(Q.nonpositive(-1))
  1735. assert ask(Q.nonpositive(0))
  1736. assert ask(Q.nonpositive(1)) is False
  1737. assert ask(~Q.positive(x), Q.nonpositive(x))
  1738. assert ask(Q.nonpositive(x), Q.positive(x)) is False
  1739. assert ask(Q.nonpositive(sqrt(-1))) is False
  1740. assert ask(Q.nonpositive(x), Q.imaginary(x)) is False
  1741. def test_nonnegative():
  1742. assert ask(Q.nonnegative(-1)) is False
  1743. assert ask(Q.nonnegative(0))
  1744. assert ask(Q.nonnegative(1))
  1745. assert ask(~Q.negative(x), Q.nonnegative(x))
  1746. assert ask(Q.nonnegative(x), Q.negative(x)) is False
  1747. assert ask(Q.nonnegative(sqrt(-1))) is False
  1748. assert ask(Q.nonnegative(x), Q.imaginary(x)) is False
  1749. def test_real_basic():
  1750. assert ask(Q.real(x)) is None
  1751. assert ask(Q.real(x), Q.real(x)) is True
  1752. assert ask(Q.real(x), Q.nonzero(x)) is True
  1753. assert ask(Q.real(x), Q.positive(x)) is True
  1754. assert ask(Q.real(x), Q.negative(x)) is True
  1755. assert ask(Q.real(x), Q.integer(x)) is True
  1756. assert ask(Q.real(x), Q.even(x)) is True
  1757. assert ask(Q.real(x), Q.prime(x)) is True
  1758. assert ask(Q.real(x/sqrt(2)), Q.real(x)) is True
  1759. assert ask(Q.real(x/sqrt(-2)), Q.real(x)) is False
  1760. assert ask(Q.real(x + 1), Q.real(x)) is True
  1761. assert ask(Q.real(x + I), Q.real(x)) is False
  1762. assert ask(Q.real(x + I), Q.complex(x)) is None
  1763. assert ask(Q.real(2*x), Q.real(x)) is True
  1764. assert ask(Q.real(I*x), Q.real(x)) is False
  1765. assert ask(Q.real(I*x), Q.imaginary(x)) is True
  1766. assert ask(Q.real(I*x), Q.complex(x)) is None
  1767. def test_real_pow():
  1768. assert ask(Q.real(x**2), Q.real(x)) is True
  1769. assert ask(Q.real(sqrt(x)), Q.negative(x)) is False
  1770. assert ask(Q.real(x**y), Q.real(x) & Q.integer(y)) is None
  1771. assert ask(Q.real(x**y), Q.real(x) & Q.real(y)) is None
  1772. assert ask(Q.real(x**y), Q.positive(x) & Q.real(y)) is True
  1773. assert ask(Q.real(x**y), Q.imaginary(x) & Q.imaginary(y)) is None # I**I or (2*I)**I
  1774. assert ask(Q.real(x**y), Q.imaginary(x) & Q.real(y)) is None # I**1 or I**0
  1775. assert ask(Q.real(x**y), Q.real(x) & Q.imaginary(y)) is None # could be exp(2*pi*I) or 2**I
  1776. assert ask(Q.real(x**0), Q.imaginary(x)) is True
  1777. assert ask(Q.real(x**y), Q.positive(x) & Q.real(y)) is True
  1778. assert ask(Q.real(x**y), Q.real(x) & Q.rational(y)) is None
  1779. assert ask(Q.real(x**y), Q.imaginary(x) & Q.integer(y)) is None
  1780. assert ask(Q.real(x**y), Q.imaginary(x) & Q.odd(y)) is False
  1781. assert ask(Q.real(x**y), Q.imaginary(x) & Q.even(y)) is True
  1782. 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
  1783. assert ask(Q.real(x**(y/z)), Q.real(x) & Q.rational(y/z) & Q.even(z) & Q.negative(x)) is None
  1784. assert ask(Q.real(x**(y/z)), Q.real(x) & Q.integer(y/z)) is None
  1785. assert ask(Q.real(x**(y/z)), Q.real(x) & Q.real(y/z) & Q.positive(x)) is True
  1786. assert ask(Q.real(x**(y/z)), Q.real(x) & Q.real(y/z) & Q.negative(x)) is None
  1787. assert ask(Q.real((-I)**i), Q.imaginary(i)) is True
  1788. assert ask(Q.real(I**i), Q.imaginary(i)) is True
  1789. assert ask(Q.real(i**i), Q.imaginary(i)) is None # i might be 2*I
  1790. assert ask(Q.real(x**i), Q.imaginary(i)) is None # x could be 0
  1791. assert ask(Q.real(x**(I*pi/log(x))), Q.real(x)) is True
  1792. # https://github.com/sympy/sympy/issues/27485
  1793. assert ask(Q.real(n**p), Q.negative(n) & Q.positive(p)) is None
  1794. # https://github.com/sympy/sympy/issues/16530
  1795. assert ask(Q.real(1/Abs(x))) is None
  1796. assert ask(Q.real(x**y), Q.zero(x) & Q.real(y)) is None
  1797. assert ask(Q.real(x**y), Q.zero(x) & Q.positive(y)) is True
  1798. @_both_exp_pow
  1799. def test_real_functions():
  1800. # trigonometric functions
  1801. assert ask(Q.real(sin(x))) is None
  1802. assert ask(Q.real(cos(x))) is None
  1803. assert ask(Q.real(sin(x)), Q.real(x)) is True
  1804. assert ask(Q.real(cos(x)), Q.real(x)) is True
  1805. # exponential function
  1806. assert ask(Q.real(exp(x))) is None
  1807. assert ask(Q.real(exp(x)), Q.real(x)) is True
  1808. assert ask(Q.real(x + exp(x)), Q.real(x)) is True
  1809. assert ask(Q.real(exp(2*pi*I, evaluate=False))) is True
  1810. assert ask(Q.real(exp(pi*I, evaluate=False))) is True
  1811. assert ask(Q.real(exp(pi*I/2, evaluate=False))) is False
  1812. # logarithm
  1813. assert ask(Q.real(log(I))) is False
  1814. assert ask(Q.real(log(2*I))) is False
  1815. assert ask(Q.real(log(I + 1))) is False
  1816. assert ask(Q.real(log(x)), Q.complex(x)) is None
  1817. assert ask(Q.real(log(x)), Q.imaginary(x)) is False
  1818. 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)
  1819. assert ask(Q.real(log(exp(x))), Q.complex(x)) is None
  1820. eq = Pow(exp(2*pi*I*x, evaluate=False), x, evaluate=False)
  1821. assert ask(Q.real(eq), Q.integer(x)) is True
  1822. assert ask(Q.real(exp(x)**x), Q.imaginary(x)) is True
  1823. assert ask(Q.real(exp(x)**x), Q.complex(x)) is None
  1824. # Q.complexes
  1825. assert ask(Q.real(re(x))) is True
  1826. assert ask(Q.real(im(x))) is True
  1827. def test_matrix():
  1828. # hermitian
  1829. assert ask(Q.hermitian(Matrix([[2, 2 + I, 4], [2 - I, 3, I], [4, -I, 1]]))) == True
  1830. assert ask(Q.hermitian(Matrix([[2, 2 + I, 4], [2 + I, 3, I], [4, -I, 1]]))) == False
  1831. z = symbols('z', complex=True)
  1832. assert ask(Q.hermitian(Matrix([[2, 2 + I, z], [2 - I, 3, I], [4, -I, 1]]))) == None
  1833. assert ask(Q.hermitian(SparseMatrix(((25, 15, -5), (15, 18, 0), (-5, 0, 11))))) == True
  1834. assert ask(Q.hermitian(SparseMatrix(((25, 15, -5), (15, I, 0), (-5, 0, 11))))) == False
  1835. assert ask(Q.hermitian(SparseMatrix(((25, 15, -5), (15, z, 0), (-5, 0, 11))))) == None
  1836. # antihermitian
  1837. A = Matrix([[0, -2 - I, 0], [2 - I, 0, -I], [0, -I, 0]])
  1838. B = Matrix([[-I, 2 + I, 0], [-2 + I, 0, 2 + I], [0, -2 + I, -I]])
  1839. assert ask(Q.antihermitian(A)) is True
  1840. assert ask(Q.antihermitian(B)) is True
  1841. assert ask(Q.antihermitian(A**2)) is False
  1842. C = (B**3)
  1843. C.simplify()
  1844. assert ask(Q.antihermitian(C)) is True
  1845. _A = Matrix([[0, -2 - I, 0], [z, 0, -I], [0, -I, 0]])
  1846. assert ask(Q.antihermitian(_A)) is None
  1847. @_both_exp_pow
  1848. def test_algebraic():
  1849. assert ask(Q.algebraic(x)) is None
  1850. assert ask(Q.algebraic(I)) is True
  1851. assert ask(Q.algebraic(2*I)) is True
  1852. assert ask(Q.algebraic(I/3)) is True
  1853. assert ask(Q.algebraic(sqrt(7))) is True
  1854. assert ask(Q.algebraic(2*sqrt(7))) is True
  1855. assert ask(Q.algebraic(sqrt(7)/3)) is True
  1856. assert ask(Q.algebraic(I*sqrt(3))) is True
  1857. assert ask(Q.algebraic(sqrt(1 + I*sqrt(3)))) is True
  1858. assert ask(Q.algebraic(1 + I*sqrt(3)**Rational(17, 31))) is True
  1859. assert ask(Q.algebraic(1 + I*sqrt(3)**(17/pi))) is None
  1860. for f in [exp, sin, tan, asin, atan, cos]:
  1861. assert ask(Q.algebraic(f(7))) is False
  1862. assert ask(Q.algebraic(f(7, evaluate=False))) is False
  1863. assert ask(Q.algebraic(f(0, evaluate=False))) is True
  1864. assert ask(Q.algebraic(f(x)), Q.algebraic(x)) is None
  1865. assert ask(Q.algebraic(f(x)), Q.algebraic(x) & Q.nonzero(x)) is False
  1866. for g in [log, acos]:
  1867. assert ask(Q.algebraic(g(7))) is False
  1868. assert ask(Q.algebraic(g(7, evaluate=False))) is False
  1869. assert ask(Q.algebraic(g(1, evaluate=False))) is True
  1870. assert ask(Q.algebraic(g(x)), Q.algebraic(x)) is None
  1871. assert ask(Q.algebraic(g(x)), Q.algebraic(x) & Q.nonzero(x - 1)) is False
  1872. for h in [cot, acot]:
  1873. assert ask(Q.algebraic(h(7))) is False
  1874. assert ask(Q.algebraic(h(7, evaluate=False))) is False
  1875. assert ask(Q.algebraic(h(x)), Q.algebraic(x)) is False
  1876. assert ask(Q.algebraic(sqrt(sin(7)))) is None
  1877. assert ask(Q.algebraic(sqrt(y + I*sqrt(7)))) is None
  1878. assert ask(Q.algebraic(2.47)) is True
  1879. assert ask(Q.algebraic(x), Q.transcendental(x)) is False
  1880. assert ask(Q.transcendental(x), Q.algebraic(x)) is False
  1881. #https://github.com/sympy/sympy/issues/27445
  1882. assert ask(Q.algebraic(Pow(1, x, evaluate=False)), Q.algebraic(x)) is None
  1883. assert ask(Q.algebraic(Pow(x, y))) is None
  1884. assert ask(Q.algebraic(Pow(1, x, evaluate=False))) is None
  1885. assert ask(Q.algebraic(x**(pi*I))) is None
  1886. assert ask(Q.algebraic(pi**n),Q.integer(n) & Q.positive(n)) is False
  1887. assert ask(Q.algebraic(x**y),Q.algebraic(x) & Q.rational(y)) is True
  1888. def test_global():
  1889. """Test ask with global assumptions"""
  1890. assert ask(Q.integer(x)) is None
  1891. global_assumptions.add(Q.integer(x))
  1892. assert ask(Q.integer(x)) is True
  1893. global_assumptions.clear()
  1894. assert ask(Q.integer(x)) is None
  1895. def test_custom_context():
  1896. """Test ask with custom assumptions context"""
  1897. assert ask(Q.integer(x)) is None
  1898. local_context = AssumptionsContext()
  1899. local_context.add(Q.integer(x))
  1900. assert ask(Q.integer(x), context=local_context) is True
  1901. assert ask(Q.integer(x)) is None
  1902. def test_functions_in_assumptions():
  1903. assert ask(Q.negative(x), Q.real(x) >> Q.positive(x)) is False
  1904. assert ask(Q.negative(x), Equivalent(Q.real(x), Q.positive(x))) is False
  1905. assert ask(Q.negative(x), Xor(Q.real(x), Q.negative(x))) is False
  1906. def test_composite_ask():
  1907. assert ask(Q.negative(x) & Q.integer(x),
  1908. assumptions=Q.real(x) >> Q.positive(x)) is False
  1909. def test_composite_proposition():
  1910. assert ask(True) is True
  1911. assert ask(False) is False
  1912. assert ask(~Q.negative(x), Q.positive(x)) is True
  1913. assert ask(~Q.real(x), Q.commutative(x)) is None
  1914. assert ask(Q.negative(x) & Q.integer(x), Q.positive(x)) is False
  1915. assert ask(Q.negative(x) & Q.integer(x)) is None
  1916. assert ask(Q.real(x) | Q.integer(x), Q.positive(x)) is True
  1917. assert ask(Q.real(x) | Q.integer(x)) is None
  1918. assert ask(Q.real(x) >> Q.positive(x), Q.negative(x)) is False
  1919. assert ask(Implies(
  1920. Q.real(x), Q.positive(x), evaluate=False), Q.negative(x)) is False
  1921. assert ask(Implies(Q.real(x), Q.positive(x), evaluate=False)) is None
  1922. assert ask(Equivalent(Q.integer(x), Q.even(x)), Q.even(x)) is True
  1923. assert ask(Equivalent(Q.integer(x), Q.even(x))) is None
  1924. assert ask(Equivalent(Q.positive(x), Q.integer(x)), Q.integer(x)) is None
  1925. assert ask(Q.real(x) | Q.integer(x), Q.real(x) | Q.integer(x)) is True
  1926. def test_tautology():
  1927. assert ask(Q.real(x) | ~Q.real(x)) is True
  1928. assert ask(Q.real(x) & ~Q.real(x)) is False
  1929. def test_composite_assumptions():
  1930. assert ask(Q.real(x), Q.real(x) & Q.real(y)) is True
  1931. assert ask(Q.positive(x), Q.positive(x) | Q.positive(y)) is None
  1932. assert ask(Q.positive(x), Q.real(x) >> Q.positive(y)) is None
  1933. assert ask(Q.real(x), ~(Q.real(x) >> Q.real(y))) is True
  1934. def test_key_extensibility():
  1935. """test that you can add keys to the ask system at runtime"""
  1936. # make sure the key is not defined
  1937. raises(AttributeError, lambda: ask(Q.my_key(x)))
  1938. # Old handler system
  1939. class MyAskHandler(AskHandler):
  1940. @staticmethod
  1941. def Symbol(expr, assumptions):
  1942. return True
  1943. try:
  1944. with warns_deprecated_sympy():
  1945. register_handler('my_key', MyAskHandler)
  1946. with warns_deprecated_sympy():
  1947. assert ask(Q.my_key(x)) is True
  1948. with warns_deprecated_sympy():
  1949. assert ask(Q.my_key(x + 1)) is None
  1950. finally:
  1951. # We have to disable the stacklevel testing here because this raises
  1952. # the warning twice from two different places
  1953. with warns_deprecated_sympy():
  1954. remove_handler('my_key', MyAskHandler)
  1955. del Q.my_key
  1956. raises(AttributeError, lambda: ask(Q.my_key(x)))
  1957. # New handler system
  1958. class MyPredicate(Predicate):
  1959. pass
  1960. try:
  1961. Q.my_key = MyPredicate()
  1962. @Q.my_key.register(Symbol)
  1963. def _(expr, assumptions):
  1964. return True
  1965. assert ask(Q.my_key(x)) is True
  1966. assert ask(Q.my_key(x+1)) is None
  1967. finally:
  1968. del Q.my_key
  1969. raises(AttributeError, lambda: ask(Q.my_key(x)))
  1970. def test_type_extensibility():
  1971. """test that new types can be added to the ask system at runtime
  1972. """
  1973. from sympy.core import Basic
  1974. class MyType(Basic):
  1975. pass
  1976. @Q.prime.register(MyType)
  1977. def _(expr, assumptions):
  1978. return True
  1979. assert ask(Q.prime(MyType())) is True
  1980. def test_single_fact_lookup():
  1981. known_facts = And(Implies(Q.integer, Q.rational),
  1982. Implies(Q.rational, Q.real),
  1983. Implies(Q.real, Q.complex))
  1984. known_facts_keys = {Q.integer, Q.rational, Q.real, Q.complex}
  1985. known_facts_cnf = to_cnf(known_facts)
  1986. mapping = single_fact_lookup(known_facts_keys, known_facts_cnf)
  1987. assert mapping[Q.rational] == {Q.real, Q.rational, Q.complex}
  1988. def test_generate_known_facts_dict():
  1989. known_facts = And(Implies(Q.integer(x), Q.rational(x)),
  1990. Implies(Q.rational(x), Q.real(x)),
  1991. Implies(Q.real(x), Q.complex(x)))
  1992. known_facts_keys = {Q.integer(x), Q.rational(x), Q.real(x), Q.complex(x)}
  1993. assert generate_known_facts_dict(known_facts_keys, known_facts) == \
  1994. {Q.complex: ({Q.complex}, set()),
  1995. Q.integer: ({Q.complex, Q.integer, Q.rational, Q.real}, set()),
  1996. Q.rational: ({Q.complex, Q.rational, Q.real}, set()),
  1997. Q.real: ({Q.complex, Q.real}, set())}
  1998. @slow
  1999. def test_known_facts_consistent():
  2000. """"Test that ask_generated.py is up-to-date"""
  2001. x = Symbol('x')
  2002. fact = get_known_facts(x)
  2003. # test cnf clauses of fact between unary predicates
  2004. cnf = CNF.to_CNF(fact)
  2005. clauses = set()
  2006. clauses.update(frozenset(Literal(lit.arg.function, lit.is_Not) for lit in sorted(cl, key=str)) for cl in cnf.clauses)
  2007. assert get_all_known_facts() == clauses
  2008. # test dictionary of fact between unary predicates
  2009. keys = [pred(x) for pred in get_known_facts_keys()]
  2010. mapping = generate_known_facts_dict(keys, fact)
  2011. assert get_known_facts_dict() == mapping
  2012. def test_Add_queries():
  2013. assert ask(Q.prime(12345678901234567890 + (cos(1)**2 + sin(1)**2))) is True
  2014. assert ask(Q.even(Add(S(2), S(2), evaluate=False))) is True
  2015. assert ask(Q.prime(Add(S(2), S(2), evaluate=False))) is False
  2016. assert ask(Q.integer(Add(S(2), S(2), evaluate=False))) is True
  2017. def test_positive_assuming():
  2018. with assuming(Q.positive(x + 1)):
  2019. assert not ask(Q.positive(x))
  2020. def test_issue_5421():
  2021. raises(TypeError, lambda: ask(pi/log(x), Q.real))
  2022. def test_issue_3906():
  2023. raises(TypeError, lambda: ask(Q.positive))
  2024. def test_issue_5833():
  2025. assert ask(Q.positive(log(x)**2), Q.positive(x)) is None
  2026. assert ask(~Q.negative(log(x)**2), Q.positive(x)) is True
  2027. def test_issue_6732():
  2028. raises(ValueError, lambda: ask(Q.positive(x), Q.positive(x) & Q.negative(x)))
  2029. raises(ValueError, lambda: ask(Q.negative(x), Q.positive(x) & Q.negative(x)))
  2030. def test_issue_7246():
  2031. assert ask(Q.positive(atan(p)), Q.positive(p)) is True
  2032. assert ask(Q.positive(atan(p)), Q.negative(p)) is False
  2033. assert ask(Q.positive(atan(p)), Q.zero(p)) is False
  2034. assert ask(Q.positive(atan(x))) is None
  2035. assert ask(Q.positive(asin(p)), Q.positive(p)) is None
  2036. assert ask(Q.positive(asin(p)), Q.zero(p)) is None
  2037. assert ask(Q.positive(asin(Rational(1, 7)))) is True
  2038. assert ask(Q.positive(asin(x)), Q.positive(x) & Q.nonpositive(x - 1)) is True
  2039. assert ask(Q.positive(asin(x)), Q.negative(x) & Q.nonnegative(x + 1)) is False
  2040. assert ask(Q.positive(acos(p)), Q.positive(p)) is None
  2041. assert ask(Q.positive(acos(Rational(1, 7)))) is True
  2042. assert ask(Q.positive(acos(x)), Q.nonnegative(x + 1) & Q.nonpositive(x - 1)) is True
  2043. assert ask(Q.positive(acos(x)), Q.nonnegative(x - 1)) is None
  2044. assert ask(Q.positive(acot(x)), Q.positive(x)) is True
  2045. assert ask(Q.positive(acot(x)), Q.real(x)) is True
  2046. assert ask(Q.positive(acot(x)), Q.imaginary(x)) is False
  2047. assert ask(Q.positive(acot(x))) is None
  2048. @XFAIL
  2049. def test_issue_7246_failing():
  2050. #Move this test to test_issue_7246 once
  2051. #the new assumptions module is improved.
  2052. assert ask(Q.positive(acos(x)), Q.zero(x)) is True
  2053. def test_check_old_assumption():
  2054. x = symbols('x', real=True)
  2055. assert ask(Q.real(x)) is True
  2056. assert ask(Q.imaginary(x)) is False
  2057. assert ask(Q.complex(x)) is True
  2058. x = symbols('x', imaginary=True)
  2059. assert ask(Q.real(x)) is False
  2060. assert ask(Q.imaginary(x)) is True
  2061. assert ask(Q.complex(x)) is True
  2062. x = symbols('x', complex=True)
  2063. assert ask(Q.real(x)) is None
  2064. assert ask(Q.complex(x)) is True
  2065. x = symbols('x', positive=True)
  2066. assert ask(Q.positive(x)) is True
  2067. assert ask(Q.negative(x)) is False
  2068. assert ask(Q.real(x)) is True
  2069. x = symbols('x', commutative=False)
  2070. assert ask(Q.commutative(x)) is False
  2071. x = symbols('x', negative=True)
  2072. assert ask(Q.positive(x)) is False
  2073. assert ask(Q.negative(x)) is True
  2074. x = symbols('x', nonnegative=True)
  2075. assert ask(Q.negative(x)) is False
  2076. assert ask(Q.positive(x)) is None
  2077. assert ask(Q.zero(x)) is None
  2078. x = symbols('x', finite=True)
  2079. assert ask(Q.finite(x)) is True
  2080. x = symbols('x', prime=True)
  2081. assert ask(Q.prime(x)) is True
  2082. assert ask(Q.composite(x)) is False
  2083. x = symbols('x', composite=True)
  2084. assert ask(Q.prime(x)) is False
  2085. assert ask(Q.composite(x)) is True
  2086. x = symbols('x', even=True)
  2087. assert ask(Q.even(x)) is True
  2088. assert ask(Q.odd(x)) is False
  2089. x = symbols('x', odd=True)
  2090. assert ask(Q.even(x)) is False
  2091. assert ask(Q.odd(x)) is True
  2092. x = symbols('x', nonzero=True)
  2093. assert ask(Q.nonzero(x)) is True
  2094. assert ask(Q.zero(x)) is False
  2095. x = symbols('x', zero=True)
  2096. assert ask(Q.zero(x)) is True
  2097. x = symbols('x', integer=True)
  2098. assert ask(Q.integer(x)) is True
  2099. x = symbols('x', rational=True)
  2100. assert ask(Q.rational(x)) is True
  2101. assert ask(Q.irrational(x)) is False
  2102. x = symbols('x', irrational=True)
  2103. assert ask(Q.irrational(x)) is True
  2104. assert ask(Q.rational(x)) is False
  2105. def test_issue_9636():
  2106. assert ask(Q.integer(1.0)) is None
  2107. assert ask(Q.prime(3.0)) is None
  2108. assert ask(Q.composite(4.0)) is None
  2109. assert ask(Q.even(2.0)) is None
  2110. assert ask(Q.odd(3.0)) is None
  2111. def test_autosimp_used_to_fail():
  2112. # See issue #9807
  2113. assert ask(Q.imaginary(0**I)) is None
  2114. assert ask(Q.imaginary(0**(-I))) is None
  2115. assert ask(Q.real(0**I)) is None
  2116. assert ask(Q.real(0**(-I))) is None
  2117. def test_custom_AskHandler():
  2118. from sympy.logic.boolalg import conjuncts
  2119. # Old handler system
  2120. class MersenneHandler(AskHandler):
  2121. @staticmethod
  2122. def Integer(expr, assumptions):
  2123. if ask(Q.integer(log(expr + 1, 2))):
  2124. return True
  2125. @staticmethod
  2126. def Symbol(expr, assumptions):
  2127. if expr in conjuncts(assumptions):
  2128. return True
  2129. try:
  2130. with warns_deprecated_sympy():
  2131. register_handler('mersenne', MersenneHandler)
  2132. n = Symbol('n', integer=True)
  2133. with warns_deprecated_sympy():
  2134. assert ask(Q.mersenne(7))
  2135. with warns_deprecated_sympy():
  2136. assert ask(Q.mersenne(n), Q.mersenne(n))
  2137. finally:
  2138. del Q.mersenne
  2139. # New handler system
  2140. class MersennePredicate(Predicate):
  2141. pass
  2142. try:
  2143. Q.mersenne = MersennePredicate()
  2144. @Q.mersenne.register(Integer)
  2145. def _(expr, assumptions):
  2146. if ask(Q.integer(log(expr + 1, 2))):
  2147. return True
  2148. @Q.mersenne.register(Symbol)
  2149. def _(expr, assumptions):
  2150. if expr in conjuncts(assumptions):
  2151. return True
  2152. assert ask(Q.mersenne(7))
  2153. assert ask(Q.mersenne(n), Q.mersenne(n))
  2154. finally:
  2155. del Q.mersenne
  2156. def test_polyadic_predicate():
  2157. class SexyPredicate(Predicate):
  2158. pass
  2159. try:
  2160. Q.sexyprime = SexyPredicate()
  2161. @Q.sexyprime.register(Integer, Integer)
  2162. def _(int1, int2, assumptions):
  2163. args = sorted([int1, int2])
  2164. if not all(ask(Q.prime(a), assumptions) for a in args):
  2165. return False
  2166. return args[1] - args[0] == 6
  2167. @Q.sexyprime.register(Integer, Integer, Integer)
  2168. def _(int1, int2, int3, assumptions):
  2169. args = sorted([int1, int2, int3])
  2170. if not all(ask(Q.prime(a), assumptions) for a in args):
  2171. return False
  2172. return args[2] - args[1] == 6 and args[1] - args[0] == 6
  2173. assert ask(Q.sexyprime(5, 11))
  2174. assert ask(Q.sexyprime(7, 13, 19))
  2175. finally:
  2176. del Q.sexyprime
  2177. def test_Predicate_handler_is_unique():
  2178. # Undefined predicate does not have a handler
  2179. assert Predicate('mypredicate').handler is None
  2180. # Handler of defined predicate is unique to the class
  2181. class MyPredicate(Predicate):
  2182. pass
  2183. mp1 = MyPredicate(Str('mp1'))
  2184. mp2 = MyPredicate(Str('mp2'))
  2185. assert mp1.handler is mp2.handler
  2186. def test_relational():
  2187. assert ask(Q.eq(x, 0), Q.zero(x))
  2188. assert not ask(Q.eq(x, 0), Q.nonzero(x))
  2189. assert not ask(Q.ne(x, 0), Q.zero(x))
  2190. assert ask(Q.ne(x, 0), Q.nonzero(x))
  2191. def test_issue_25221():
  2192. assert ask(Q.transcendental(x), Q.algebraic(x) | Q.positive(y,y)) is None
  2193. assert ask(Q.transcendental(x), Q.algebraic(x) | (0 > y)) is None
  2194. assert ask(Q.transcendental(x), Q.algebraic(x) | Q.gt(0,y)) is None
  2195. def test_issue_27440():
  2196. nan = S.NaN
  2197. assert ask(Q.negative(nan)) is None