test_query.py 96 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408
  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 False
  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 False
  93. assert ask(Q.odd(z)) is False
  94. assert ask(Q.finite(z)) is True
  95. assert ask(Q.prime(z)) is False
  96. assert ask(Q.composite(z)) is False
  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 False
  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. assert ask(Q.finite(x)) is None
  549. assert ask(Q.finite(x), Q.finite(x)) is True
  550. assert ask(Q.finite(x), Q.finite(y)) is None
  551. assert ask(Q.finite(x), Q.complex(x)) is True
  552. assert ask(Q.finite(x), Q.extended_real(x)) is None
  553. assert ask(Q.finite(x + 1)) is None
  554. assert ask(Q.finite(x + 1), Q.finite(x)) is True
  555. a = x + y
  556. x, y = a.args
  557. # B + B
  558. assert ask(Q.finite(a), Q.finite(x) & Q.finite(y)) is True
  559. assert ask(Q.finite(a), Q.positive(x) & Q.finite(y)) is True
  560. assert ask(Q.finite(a), Q.finite(x) & Q.positive(y)) is True
  561. assert ask(Q.finite(a), Q.positive(x) & Q.positive(y)) is True
  562. assert ask(Q.finite(a), Q.positive(x) & Q.finite(y)
  563. & ~Q.positive(y)) is True
  564. assert ask(Q.finite(a), Q.finite(x) & ~Q.positive(x)
  565. & Q.positive(y)) is True
  566. assert ask(Q.finite(a), Q.finite(x) & Q.finite(y) & ~Q.positive(x)
  567. & ~Q.positive(y)) is True
  568. # B + U
  569. assert ask(Q.finite(a), Q.finite(x) & ~Q.finite(y)) is False
  570. assert ask(Q.finite(a), Q.positive(x) & ~Q.finite(y)) is False
  571. assert ask(Q.finite(a), Q.finite(x)
  572. & Q.positive_infinite(y)) is False
  573. assert ask(Q.finite(a), Q.positive(x)
  574. & Q.positive_infinite(y)) is False
  575. assert ask(Q.finite(a), Q.positive(x) & ~Q.finite(y)
  576. & ~Q.positive(y)) is False
  577. assert ask(Q.finite(a), Q.finite(x) & ~Q.positive(x)
  578. & Q.positive_infinite(y)) is False
  579. assert ask(Q.finite(a), Q.finite(x) & ~Q.positive(x) & ~Q.finite(y)
  580. & ~Q.positive(y)) is False
  581. # B + ?
  582. assert ask(Q.finite(a), Q.finite(x)) is None
  583. assert ask(Q.finite(a), Q.positive(x)) is None
  584. assert ask(Q.finite(a), Q.finite(x)
  585. & Q.extended_positive(y)) is None
  586. assert ask(Q.finite(a), Q.positive(x)
  587. & Q.extended_positive(y)) is None
  588. assert ask(Q.finite(a), Q.positive(x) & ~Q.positive(y)) is None
  589. assert ask(Q.finite(a), Q.finite(x) & ~Q.positive(x)
  590. & Q.extended_positive(y)) is None
  591. assert ask(Q.finite(a), Q.finite(x) & ~Q.positive(x)
  592. & ~Q.positive(y)) is None
  593. # U + U
  594. assert ask(Q.finite(a), ~Q.finite(x) & ~Q.finite(y)) is None
  595. assert ask(Q.finite(a), Q.positive_infinite(x)
  596. & ~Q.finite(y)) is None
  597. assert ask(Q.finite(a), ~Q.finite(x)
  598. & Q.positive_infinite(y)) is None
  599. assert ask(Q.finite(a), Q.positive_infinite(x)
  600. & Q.positive_infinite(y)) is False
  601. assert ask(Q.finite(a), Q.positive_infinite(x) & ~Q.finite(y)
  602. & ~Q.extended_positive(y)) is None
  603. assert ask(Q.finite(a), ~Q.finite(x) & ~Q.extended_positive(x)
  604. & Q.positive_infinite(y)) is None
  605. assert ask(Q.finite(a), ~Q.finite(x) & ~Q.finite(y)
  606. & ~Q.extended_positive(x) & ~Q.extended_positive(y)) is False
  607. # U + ?
  608. assert ask(Q.finite(a), ~Q.finite(y)) is None
  609. assert ask(Q.finite(a), Q.extended_positive(x)
  610. & ~Q.finite(y)) is None
  611. assert ask(Q.finite(a), Q.positive_infinite(y)) is None
  612. assert ask(Q.finite(a), Q.extended_positive(x)
  613. & Q.positive_infinite(y)) is False
  614. assert ask(Q.finite(a), Q.extended_positive(x)
  615. & ~Q.finite(y) & ~Q.extended_positive(y)) is None
  616. assert ask(Q.finite(a), ~Q.extended_positive(x)
  617. & Q.positive_infinite(y)) is None
  618. assert ask(Q.finite(a), ~Q.extended_positive(x) & ~Q.finite(y)
  619. & ~Q.extended_positive(y)) is False
  620. # ? + ?
  621. assert ask(Q.finite(a)) is None
  622. assert ask(Q.finite(a), Q.extended_positive(x)) is None
  623. assert ask(Q.finite(a), Q.extended_positive(y)) is None
  624. assert ask(Q.finite(a), Q.extended_positive(x)
  625. & Q.extended_positive(y)) is None
  626. assert ask(Q.finite(a), Q.extended_positive(x)
  627. & ~Q.extended_positive(y)) is None
  628. assert ask(Q.finite(a), ~Q.extended_positive(x)
  629. & Q.extended_positive(y)) is None
  630. assert ask(Q.finite(a), ~Q.extended_positive(x)
  631. & ~Q.extended_positive(y)) is None
  632. x, y, z = symbols('x,y,z')
  633. a = x + y + z
  634. x, y, z = a.args
  635. assert ask(Q.finite(a), Q.negative(x) & Q.negative(y)
  636. & Q.negative(z)) is True
  637. assert ask(Q.finite(a), Q.negative(x) & Q.negative(y)
  638. & Q.finite(z)) is True
  639. assert ask(Q.finite(a), Q.negative(x) & Q.negative(y)
  640. & Q.positive(z)) is True
  641. assert ask(Q.finite(a), Q.negative(x) & Q.negative(y)
  642. & Q.negative_infinite(z)) is False
  643. assert ask(Q.finite(a), Q.negative(x) & Q.negative(y)
  644. & ~Q.finite(z)) is False
  645. assert ask(Q.finite(a), Q.negative(x) & Q.negative(y)
  646. & Q.positive_infinite(z)) is False
  647. assert ask(Q.finite(a), Q.negative(x) & Q.negative(y)
  648. & Q.extended_negative(z)) is None
  649. assert ask(Q.finite(a), Q.negative(x) & Q.negative(y)) is None
  650. assert ask(Q.finite(a), Q.negative(x) & Q.negative(y)
  651. & Q.extended_positive(z)) is None
  652. assert ask(Q.finite(a), Q.negative(x) & Q.finite(y)
  653. & Q.finite(z)) is True
  654. assert ask(Q.finite(a), Q.negative(x) & Q.finite(y)
  655. & Q.positive(z)) is True
  656. assert ask(Q.finite(a), Q.negative(x) & Q.finite(y)
  657. & Q.negative_infinite(z)) is False
  658. assert ask(Q.finite(a), Q.negative(x) & Q.finite(y)
  659. & ~Q.finite(z)) is False
  660. assert ask(Q.finite(a), Q.negative(x) & Q.finite(y)
  661. & Q.positive_infinite(z)) is False
  662. assert ask(Q.finite(a), Q.negative(x) & Q.finite(y)
  663. & Q.extended_negative(z)) is None
  664. assert ask(Q.finite(a), Q.negative(x) & Q.finite(y)) is None
  665. assert ask(Q.finite(a), Q.negative(x) & Q.finite(y)
  666. & Q.extended_positive(z)) is None
  667. assert ask(Q.finite(a), Q.negative(x) & Q.positive(y)
  668. & Q.positive(z)) is True
  669. assert ask(Q.finite(a), Q.negative(x) & Q.positive(y)
  670. & Q.negative_infinite(z)) is False
  671. assert ask(Q.finite(a), Q.negative(x) & Q.positive(y)
  672. & ~Q.finite(z)) is False
  673. assert ask(Q.finite(a), Q.negative(x) & Q.positive(y)
  674. & Q.positive_infinite(z)) is False
  675. assert ask(Q.finite(a), Q.negative(x) & Q.positive(y)
  676. & Q.extended_negative(z)) is None
  677. assert ask(Q.finite(a), Q.negative(x) & Q.extended_positive(y)
  678. & Q.finite(y)) is None
  679. assert ask(Q.finite(a), Q.negative(x) & Q.positive(y)
  680. & Q.extended_positive(z)) is None
  681. assert ask(Q.finite(a), Q.negative(x) & Q.negative_infinite(y)
  682. & Q.negative_infinite(z)) is False
  683. assert ask(Q.finite(a), Q.negative(x) & Q.negative_infinite(y)
  684. & ~Q.finite(z)) is None
  685. assert ask(Q.finite(a), Q.negative(x) & Q.negative_infinite(y)
  686. & Q.positive_infinite(z)) is None
  687. assert ask(Q.finite(a), Q.negative(x) & Q.negative_infinite(y)
  688. & Q.extended_negative(z)) is False
  689. assert ask(Q.finite(a), Q.negative(x)
  690. & Q.negative_infinite(y)) is None
  691. assert ask(Q.finite(a), Q.negative(x) & Q.negative_infinite(y)
  692. & Q.extended_positive(z)) is None
  693. assert ask(Q.finite(a), Q.negative(x) & ~Q.finite(y)
  694. & ~Q.finite(z)) is None
  695. assert ask(Q.finite(a), Q.negative(x) & ~Q.finite(y)
  696. & Q.positive_infinite(z)) is None
  697. assert ask(Q.finite(a), Q.negative(x) & ~Q.finite(y)
  698. & Q.extended_negative(z)) is None
  699. assert ask(Q.finite(a), Q.negative(x) & ~Q.finite(y)) is None
  700. assert ask(Q.finite(a), Q.negative(x) & ~Q.finite(y)
  701. & Q.extended_positive(z)) is None
  702. assert ask(Q.finite(a), Q.negative(x) & Q.positive_infinite(y)
  703. & Q.positive_infinite(z)) is False
  704. assert ask(Q.finite(a), Q.negative(x) & Q.positive_infinite(y)
  705. & Q.negative_infinite(z)) is None
  706. assert ask(Q.finite(a), Q.negative(x) &
  707. Q.positive_infinite(y)) is None
  708. assert ask(Q.finite(a), Q.negative(x) & Q.positive_infinite(y)
  709. & Q.extended_positive(z)) is False
  710. assert ask(Q.finite(a), Q.negative(x) & Q.extended_negative(y)
  711. & Q.extended_negative(z)) is None
  712. assert ask(Q.finite(a), Q.negative(x)
  713. & Q.extended_negative(y)) is None
  714. assert ask(Q.finite(a), Q.negative(x) & Q.extended_negative(y)
  715. & Q.extended_positive(z)) is None
  716. assert ask(Q.finite(a), Q.negative(x)) is None
  717. assert ask(Q.finite(a), Q.negative(x)
  718. & Q.extended_positive(z)) is None
  719. assert ask(Q.finite(a), Q.negative(x) & Q.extended_positive(y)
  720. & Q.extended_positive(z)) is None
  721. assert ask(Q.finite(a), Q.finite(x) & Q.finite(y)
  722. & Q.finite(z)) is True
  723. assert ask(Q.finite(a), Q.finite(x) & Q.finite(y)
  724. & Q.positive(z)) is True
  725. assert ask(Q.finite(a), Q.finite(x) & Q.finite(y)
  726. & Q.negative_infinite(z)) is False
  727. assert ask(Q.finite(a), Q.finite(x) & Q.finite(y)
  728. & ~Q.finite(z)) is False
  729. assert ask(Q.finite(a), Q.finite(x) & Q.finite(y)
  730. & Q.positive_infinite(z)) is False
  731. assert ask(Q.finite(a), Q.finite(x) & Q.finite(y)
  732. & Q.extended_negative(z)) is None
  733. assert ask(Q.finite(a), Q.finite(x) & Q.finite(y)) is None
  734. assert ask(Q.finite(a), Q.finite(x) & Q.finite(y)
  735. & Q.extended_positive(z)) is None
  736. assert ask(Q.finite(a), Q.finite(x) & Q.positive(y)
  737. & Q.positive(z)) is True
  738. assert ask(Q.finite(a), Q.finite(x) & Q.positive(y)
  739. & Q.negative_infinite(z)) is False
  740. assert ask(Q.finite(a), Q.finite(x) & Q.positive(y)
  741. & ~Q.finite(z)) is False
  742. assert ask(Q.finite(a), Q.finite(x) & Q.positive(y)
  743. & Q.positive_infinite(z)) is False
  744. assert ask(Q.finite(a), Q.finite(x) & Q.positive(y)
  745. & Q.extended_negative(z)) is None
  746. assert ask(Q.finite(a), Q.finite(x) & Q.positive(y)) is None
  747. assert ask(Q.finite(a), Q.finite(x) & Q.positive(y)
  748. & Q.extended_positive(z)) is None
  749. assert ask(Q.finite(a), Q.finite(x) & Q.negative_infinite(y)
  750. & Q.negative_infinite(z)) is False
  751. assert ask(Q.finite(a), Q.finite(x) & Q.negative_infinite(y)
  752. & ~Q.finite(z)) is None
  753. assert ask(Q.finite(a), Q.finite(x) & Q.negative_infinite(y)
  754. & Q.positive_infinite(z)) is None
  755. assert ask(Q.finite(a), Q.finite(x) & Q.negative_infinite(y)
  756. & Q.extended_negative(z)) is False
  757. assert ask(Q.finite(a), Q.finite(x)
  758. & Q.negative_infinite(y)) is None
  759. assert ask(Q.finite(a), Q.finite(x) & Q.negative_infinite(y)
  760. & Q.extended_positive(z)) is None
  761. assert ask(Q.finite(a), Q.finite(x) & ~Q.finite(y)
  762. & ~Q.finite(z)) is None
  763. assert ask(Q.finite(a), Q.finite(x) & ~Q.finite(y)
  764. & Q.positive_infinite(z)) is None
  765. assert ask(Q.finite(a), Q.finite(x) & ~Q.finite(y)
  766. & Q.extended_negative(z)) is None
  767. assert ask(Q.finite(a), Q.finite(x) & ~Q.finite(y)) is None
  768. assert ask(Q.finite(a), Q.finite(x) & ~Q.finite(y)
  769. & Q.extended_positive(z)) is None
  770. assert ask(Q.finite(a), Q.finite(x) & Q.positive_infinite(y)
  771. & Q.positive_infinite(z)) is False
  772. assert ask(Q.finite(a), Q.finite(x) & Q.positive_infinite(y)
  773. & Q.extended_negative(z)) is None
  774. assert ask(Q.finite(a), Q.finite(x)
  775. & Q.positive_infinite(y)) is None
  776. assert ask(Q.finite(a), Q.finite(x) & Q.positive_infinite(y)
  777. & Q.extended_positive(z)) is False
  778. assert ask(Q.finite(a), Q.finite(x) & Q.extended_negative(y)
  779. & Q.extended_negative(z)) is None
  780. assert ask(Q.finite(a), Q.finite(x)
  781. & Q.extended_negative(y)) is None
  782. assert ask(Q.finite(a), Q.finite(x) & Q.extended_negative(y)
  783. & Q.extended_positive(z)) is None
  784. assert ask(Q.finite(a), Q.finite(x)) is None
  785. assert ask(Q.finite(a), Q.finite(x)
  786. & Q.extended_positive(z)) is None
  787. assert ask(Q.finite(a), Q.finite(x) & Q.extended_positive(y)
  788. & Q.extended_positive(z)) is None
  789. assert ask(Q.finite(a), Q.positive(x) & Q.positive(y)
  790. & Q.positive(z)) is True
  791. assert ask(Q.finite(a), Q.positive(x) & Q.positive(y)
  792. & Q.negative_infinite(z)) is False
  793. assert ask(Q.finite(a), Q.positive(x) & Q.positive(y)
  794. & ~Q.finite(z)) is False
  795. assert ask(Q.finite(a), Q.positive(x) & Q.positive(y)
  796. & Q.positive_infinite(z)) is False
  797. assert ask(Q.finite(a), Q.positive(x) & Q.positive(y)
  798. & Q.extended_negative(z)) is None
  799. assert ask(Q.finite(a), Q.positive(x) & Q.positive(y)) is None
  800. assert ask(Q.finite(a), Q.positive(x) & Q.positive(y)
  801. & Q.extended_positive(z)) is None
  802. assert ask(Q.finite(a), Q.positive(x) & Q.negative_infinite(y)
  803. & Q.negative_infinite(z)) is False
  804. assert ask(Q.finite(a), Q.positive(x) & Q.negative_infinite(y)
  805. & ~Q.finite(z)) is None
  806. assert ask(Q.finite(a), Q.positive(x) & Q.negative_infinite(y)
  807. & Q.positive_infinite(z)) is None
  808. assert ask(Q.finite(a), Q.positive(x) & Q.negative_infinite(y)
  809. & Q.extended_negative(z)) is False
  810. assert ask(Q.finite(a), Q.positive(x)
  811. & Q.negative_infinite(y)) is None
  812. assert ask(Q.finite(a), Q.positive(x) & Q.negative_infinite(y)
  813. & Q.extended_positive(z)) is None
  814. assert ask(Q.finite(a), Q.positive(x) & ~Q.finite(y)
  815. & ~Q.finite(z)) is None
  816. assert ask(Q.finite(a), Q.positive(x) & ~Q.finite(y)
  817. & Q.positive_infinite(z)) is None
  818. assert ask(Q.finite(a), Q.positive(x) & ~Q.finite(y)
  819. & Q.extended_negative(z)) is None
  820. assert ask(Q.finite(a), Q.positive(x) & ~Q.finite(y)) is None
  821. assert ask(Q.finite(a), Q.positive(x) & ~Q.finite(y)
  822. & Q.extended_positive(z)) is None
  823. assert ask(Q.finite(a), Q.positive(x) & Q.positive_infinite(y)
  824. & Q.positive_infinite(z)) is False
  825. assert ask(Q.finite(a), Q.positive(x) & Q.positive_infinite(y)
  826. & Q.extended_negative(z)) is None
  827. assert ask(Q.finite(a), Q.positive(x)
  828. & Q.positive_infinite(y)) is None
  829. assert ask(Q.finite(a), Q.positive(x) & Q.positive_infinite(y)
  830. & Q.extended_positive(z)) is False
  831. assert ask(Q.finite(a), Q.positive(x) & Q.extended_negative(y)
  832. & Q.extended_negative(z)) is None
  833. assert ask(Q.finite(a), Q.positive(x)
  834. & Q.extended_negative(y)) is None
  835. assert ask(Q.finite(a), Q.positive(x) & Q.extended_negative(y)
  836. & Q.extended_positive(z)) is None
  837. assert ask(Q.finite(a), Q.positive(x)) is None
  838. assert ask(Q.finite(a), Q.positive(x)
  839. & Q.extended_positive(z)) is None
  840. assert ask(Q.finite(a), Q.positive(x) & Q.extended_positive(y)
  841. & Q.extended_positive(z)) is None
  842. assert ask(Q.finite(a), Q.negative_infinite(x)
  843. & Q.negative_infinite(y) & Q.negative_infinite(z)) is False
  844. assert ask(Q.finite(a), Q.negative_infinite(x)
  845. & Q.negative_infinite(y) & ~Q.finite(z)) is None
  846. assert ask(Q.finite(a), Q.negative_infinite(x)
  847. & Q.negative_infinite(y)& Q.positive_infinite(z)) is None
  848. assert ask(Q.finite(a), Q.negative_infinite(x)
  849. & Q.negative_infinite(y) & Q.extended_negative(z)) is False
  850. assert ask(Q.finite(a), Q.negative_infinite(x)
  851. & Q.negative_infinite(y)) is None
  852. assert ask(Q.finite(a), Q.negative_infinite(x)
  853. & Q.negative_infinite(y) & Q.extended_positive(z)) is None
  854. assert ask(Q.finite(a), Q.negative_infinite(x)
  855. & ~Q.finite(y) & ~Q.finite(z)) is None
  856. assert ask(Q.finite(a), Q.negative_infinite(x)
  857. & ~Q.finite(y) & Q.positive_infinite(z)) is None
  858. assert ask(Q.finite(a), Q.negative_infinite(x)
  859. & ~Q.finite(y) & Q.extended_negative(z)) is None
  860. assert ask(Q.finite(a), Q.negative_infinite(x)
  861. & ~Q.finite(y)) is None
  862. assert ask(Q.finite(a), Q.negative_infinite(x)
  863. & ~Q.finite(y) & Q.extended_positive(z)) is None
  864. assert ask(Q.finite(a), Q.negative_infinite(x)
  865. & Q.positive_infinite(y) & Q.positive_infinite(z)) is None
  866. assert ask(Q.finite(a), Q.negative_infinite(x)
  867. & Q.positive_infinite(y) & Q.extended_negative(z)) is None
  868. assert ask(Q.finite(a), Q.negative_infinite(x)
  869. & Q.positive_infinite(y)) is None
  870. assert ask(Q.finite(a), Q.negative_infinite(x)
  871. & Q.positive_infinite(y) & Q.extended_positive(z)) is None
  872. assert ask(Q.finite(a), Q.negative_infinite(x)
  873. & Q.extended_negative(y) & Q.extended_negative(z)) is False
  874. assert ask(Q.finite(a), Q.negative_infinite(x)
  875. & Q.extended_negative(y)) is None
  876. assert ask(Q.finite(a), Q.negative_infinite(x)
  877. & Q.extended_negative(y) & Q.extended_positive(z)) is None
  878. assert ask(Q.finite(a), Q.negative_infinite(x)) is None
  879. assert ask(Q.finite(a), Q.negative_infinite(x)
  880. & Q.extended_positive(z)) is None
  881. assert ask(Q.finite(a), Q.negative_infinite(x)
  882. & Q.extended_positive(y) & Q.extended_positive(z)) is None
  883. assert ask(Q.finite(a), ~Q.finite(x) & ~Q.finite(y)
  884. & ~Q.finite(z)) is None
  885. assert ask(Q.finite(a), ~Q.finite(x) & Q.positive_infinite(z)
  886. & ~Q.finite(z)) is None
  887. assert ask(Q.finite(a), ~Q.finite(x) & ~Q.finite(y)
  888. & Q.extended_negative(z)) is None
  889. assert ask(Q.finite(a), ~Q.finite(x) & ~Q.finite(y)) is None
  890. assert ask(Q.finite(a), ~Q.finite(x) & ~Q.finite(y)
  891. & Q.extended_positive(z)) is None
  892. assert ask(Q.finite(a), ~Q.finite(x) & Q.positive_infinite(y)
  893. & Q.positive_infinite(z)) is None
  894. assert ask(Q.finite(a), ~Q.finite(x) & Q.positive_infinite(y)
  895. & Q.extended_negative(z)) is None
  896. assert ask(Q.finite(a), ~Q.finite(x)
  897. & Q.positive_infinite(y)) is None
  898. assert ask(Q.finite(a), ~Q.finite(x) & Q.positive_infinite(y)
  899. & Q.extended_positive(z)) is None
  900. assert ask(Q.finite(a), ~Q.finite(x) & Q.extended_negative(y)
  901. & Q.extended_negative(z)) is None
  902. assert ask(Q.finite(a), ~Q.finite(x)
  903. & Q.extended_negative(y)) is None
  904. assert ask(Q.finite(a), ~Q.finite(x) & Q.extended_negative(y)
  905. & Q.extended_positive(z)) is None
  906. assert ask(Q.finite(a), ~Q.finite(x)) is None
  907. assert ask(Q.finite(a), ~Q.finite(x)
  908. & Q.extended_positive(z)) is None
  909. assert ask(Q.finite(a), ~Q.finite(x) & Q.extended_positive(y)
  910. & Q.extended_positive(z)) is None
  911. assert ask(Q.finite(a), Q.positive_infinite(x)
  912. & Q.positive_infinite(y) & Q.positive_infinite(z)) is False
  913. assert ask(Q.finite(a), Q.positive_infinite(x)
  914. & Q.positive_infinite(y) & Q.extended_negative(z)) is None
  915. assert ask(Q.finite(a), Q.positive_infinite(x)
  916. & Q.positive_infinite(y)) is None
  917. assert ask(Q.finite(a), Q.positive_infinite(x)
  918. & Q.positive_infinite(y) & Q.extended_positive(z)) is False
  919. assert ask(Q.finite(a), Q.positive_infinite(x)
  920. & Q.extended_negative(y) & Q.extended_negative(z)) is None
  921. assert ask(Q.finite(a), Q.positive_infinite(x)
  922. & Q.extended_negative(y)) is None
  923. assert ask(Q.finite(a), Q.positive_infinite(x)
  924. & Q.extended_negative(y) & Q.extended_positive(z)) is None
  925. assert ask(Q.finite(a), Q.positive_infinite(x)) is None
  926. assert ask(Q.finite(a), Q.positive_infinite(x)
  927. & Q.extended_positive(z)) is None
  928. assert ask(Q.finite(a), Q.positive_infinite(x)
  929. & Q.extended_positive(y) & Q.extended_positive(z)) is False
  930. assert ask(Q.finite(a), Q.extended_negative(x)
  931. & Q.extended_negative(y) & Q.extended_negative(z)) is None
  932. assert ask(Q.finite(a), Q.extended_negative(x)
  933. & Q.extended_negative(y)) is None
  934. assert ask(Q.finite(a), Q.extended_negative(x)
  935. & Q.extended_negative(y) & Q.extended_positive(z)) is None
  936. assert ask(Q.finite(a), Q.extended_negative(x)) is None
  937. assert ask(Q.finite(a), Q.extended_negative(x)
  938. & Q.extended_positive(z)) is None
  939. assert ask(Q.finite(a), Q.extended_negative(x)
  940. & Q.extended_positive(y) & Q.extended_positive(z)) is None
  941. assert ask(Q.finite(a)) is None
  942. assert ask(Q.finite(a), Q.extended_positive(z)) is None
  943. assert ask(Q.finite(a), Q.extended_positive(y)
  944. & Q.extended_positive(z)) is None
  945. assert ask(Q.finite(a), Q.extended_positive(x)
  946. & Q.extended_positive(y) & Q.extended_positive(z)) is None
  947. assert ask(Q.finite(2*x)) is None
  948. assert ask(Q.finite(2*x), Q.finite(x)) is True
  949. x, y, z = symbols('x,y,z')
  950. a = x*y
  951. x, y = a.args
  952. assert ask(Q.finite(a), Q.finite(x) & Q.finite(y)) is True
  953. assert ask(Q.finite(a), Q.finite(x) & ~Q.finite(y)) is False
  954. assert ask(Q.finite(a), Q.finite(x)) is None
  955. assert ask(Q.finite(a), ~Q.finite(x) & Q.finite(y)) is False
  956. assert ask(Q.finite(a), ~Q.finite(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(y)) is None
  959. assert ask(Q.finite(a), ~Q.finite(y)) is None
  960. assert ask(Q.finite(a)) is None
  961. a = x*y*z
  962. x, y, z = a.args
  963. assert ask(Q.finite(a), Q.finite(x) & Q.finite(y)
  964. & Q.finite(z)) is True
  965. assert ask(Q.finite(a), Q.finite(x) & Q.finite(y)
  966. & ~Q.finite(z)) is False
  967. assert ask(Q.finite(a), Q.finite(x) & Q.finite(y)) is None
  968. assert ask(Q.finite(a), Q.finite(x) & ~Q.finite(y)
  969. & Q.finite(z)) is False
  970. assert ask(Q.finite(a), Q.finite(x) & ~Q.finite(y)
  971. & ~Q.finite(z)) is False
  972. assert ask(Q.finite(a), Q.finite(x) & ~Q.finite(y)) is None
  973. assert ask(Q.finite(a), Q.finite(x) & Q.finite(z)) is None
  974. assert ask(Q.finite(a), Q.finite(x) & ~Q.finite(z)) is None
  975. assert ask(Q.finite(a), Q.finite(x)) is None
  976. assert ask(Q.finite(a), ~Q.finite(x) & Q.finite(y)
  977. & Q.finite(z)) is False
  978. assert ask(Q.finite(a), ~Q.finite(x) & Q.finite(y)
  979. & ~Q.finite(z)) is False
  980. assert ask(Q.finite(a), ~Q.finite(x) & Q.finite(y)) is None
  981. assert ask(Q.finite(a), ~Q.finite(x) & ~Q.finite(y)
  982. & Q.finite(z)) is False
  983. assert ask(Q.finite(a), ~Q.finite(x) & ~Q.finite(y)
  984. & ~Q.finite(z)) is False
  985. assert ask(Q.finite(a), ~Q.finite(x) & ~Q.finite(y)) is None
  986. assert ask(Q.finite(a), ~Q.finite(x) & Q.finite(z)) is None
  987. assert ask(Q.finite(a), ~Q.finite(x) & ~Q.finite(z)) is None
  988. assert ask(Q.finite(a), ~Q.finite(x)) is None
  989. assert ask(Q.finite(a), Q.finite(y) & Q.finite(z)) is None
  990. assert ask(Q.finite(a), Q.finite(y) & ~Q.finite(z)) is None
  991. assert ask(Q.finite(a), Q.finite(y)) 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(z)) is None
  996. assert ask(Q.finite(a), ~Q.finite(z)) is None
  997. assert ask(Q.finite(a), ~Q.finite(z) & Q.extended_nonzero(x)
  998. & Q.extended_nonzero(y) & Q.extended_nonzero(z)) is None
  999. assert ask(Q.finite(a), Q.extended_nonzero(x) & ~Q.finite(y)
  1000. & Q.extended_nonzero(y) & ~Q.finite(z)
  1001. & Q.extended_nonzero(z)) is False
  1002. x, y, z = symbols('x,y,z')
  1003. assert ask(Q.finite(x**2)) is None
  1004. assert ask(Q.finite(2**x)) is None
  1005. assert ask(Q.finite(2**x), Q.finite(x)) is True
  1006. assert ask(Q.finite(x**x)) is None
  1007. assert ask(Q.finite(S.Half ** x)) is None
  1008. assert ask(Q.finite(S.Half ** x), Q.extended_positive(x)) is True
  1009. assert ask(Q.finite(S.Half ** x), Q.extended_negative(x)) is None
  1010. assert ask(Q.finite(2**x), Q.extended_negative(x)) is True
  1011. assert ask(Q.finite(sqrt(x))) is None
  1012. assert ask(Q.finite(2**x), ~Q.finite(x)) is False
  1013. assert ask(Q.finite(x**2), ~Q.finite(x)) is False
  1014. # sign function
  1015. assert ask(Q.finite(sign(x))) is True
  1016. assert ask(Q.finite(sign(x)), ~Q.finite(x)) is True
  1017. # exponential functions
  1018. assert ask(Q.finite(log(x))) is None
  1019. assert ask(Q.finite(log(x)), Q.finite(x)) is None
  1020. assert ask(Q.finite(log(x)), ~Q.zero(x)) is True
  1021. assert ask(Q.finite(log(x)), Q.infinite(x)) is False
  1022. assert ask(Q.finite(log(x)), Q.zero(x)) is False
  1023. assert ask(Q.finite(exp(x))) is None
  1024. assert ask(Q.finite(exp(x)), Q.finite(x)) is True
  1025. assert ask(Q.finite(exp(2))) is True
  1026. # trigonometric functions
  1027. assert ask(Q.finite(sin(x))) is True
  1028. assert ask(Q.finite(sin(x)), ~Q.finite(x)) is True
  1029. assert ask(Q.finite(cos(x))) is True
  1030. assert ask(Q.finite(cos(x)), ~Q.finite(x)) is True
  1031. assert ask(Q.finite(2*sin(x))) is True
  1032. assert ask(Q.finite(sin(x)**2)) is True
  1033. assert ask(Q.finite(cos(x)**2)) is True
  1034. assert ask(Q.finite(cos(x) + sin(x))) is True
  1035. @XFAIL
  1036. def test_bounded_xfail():
  1037. """We need to support relations in ask for this to work"""
  1038. assert ask(Q.finite(sin(x)**x)) is True
  1039. assert ask(Q.finite(cos(x)**x)) is True
  1040. def test_commutative():
  1041. """By default objects are Q.commutative that is why it returns True
  1042. for both key=True and key=False"""
  1043. assert ask(Q.commutative(x)) is True
  1044. assert ask(Q.commutative(x), ~Q.commutative(x)) is False
  1045. assert ask(Q.commutative(x), Q.complex(x)) is True
  1046. assert ask(Q.commutative(x), Q.imaginary(x)) is True
  1047. assert ask(Q.commutative(x), Q.real(x)) is True
  1048. assert ask(Q.commutative(x), Q.positive(x)) is True
  1049. assert ask(Q.commutative(x), ~Q.commutative(y)) is True
  1050. assert ask(Q.commutative(2*x)) is True
  1051. assert ask(Q.commutative(2*x), ~Q.commutative(x)) is False
  1052. assert ask(Q.commutative(x + 1)) is True
  1053. assert ask(Q.commutative(x + 1), ~Q.commutative(x)) is False
  1054. assert ask(Q.commutative(x**2)) is True
  1055. assert ask(Q.commutative(x**2), ~Q.commutative(x)) is False
  1056. assert ask(Q.commutative(log(x))) is True
  1057. @_both_exp_pow
  1058. def test_complex():
  1059. assert ask(Q.complex(x)) is None
  1060. assert ask(Q.complex(x), Q.complex(x)) is True
  1061. assert ask(Q.complex(x), Q.complex(y)) is None
  1062. assert ask(Q.complex(x), ~Q.complex(x)) is False
  1063. assert ask(Q.complex(x), Q.real(x)) is True
  1064. assert ask(Q.complex(x), ~Q.real(x)) is None
  1065. assert ask(Q.complex(x), Q.rational(x)) is True
  1066. assert ask(Q.complex(x), Q.irrational(x)) is True
  1067. assert ask(Q.complex(x), Q.positive(x)) is True
  1068. assert ask(Q.complex(x), Q.imaginary(x)) is True
  1069. assert ask(Q.complex(x), Q.algebraic(x)) is True
  1070. # a+b
  1071. assert ask(Q.complex(x + 1), Q.complex(x)) is True
  1072. assert ask(Q.complex(x + 1), Q.real(x)) is True
  1073. assert ask(Q.complex(x + 1), Q.rational(x)) is True
  1074. assert ask(Q.complex(x + 1), Q.irrational(x)) is True
  1075. assert ask(Q.complex(x + 1), Q.imaginary(x)) is True
  1076. assert ask(Q.complex(x + 1), Q.integer(x)) is True
  1077. assert ask(Q.complex(x + 1), Q.even(x)) is True
  1078. assert ask(Q.complex(x + 1), Q.odd(x)) is True
  1079. assert ask(Q.complex(x + y), Q.complex(x) & Q.complex(y)) is True
  1080. assert ask(Q.complex(x + y), Q.real(x) & Q.imaginary(y)) is True
  1081. # a*x +b
  1082. assert ask(Q.complex(2*x + 1), Q.complex(x)) is True
  1083. assert ask(Q.complex(2*x + 1), Q.real(x)) is True
  1084. assert ask(Q.complex(2*x + 1), Q.positive(x)) is True
  1085. assert ask(Q.complex(2*x + 1), Q.rational(x)) is True
  1086. assert ask(Q.complex(2*x + 1), Q.irrational(x)) is True
  1087. assert ask(Q.complex(2*x + 1), Q.imaginary(x)) is True
  1088. assert ask(Q.complex(2*x + 1), Q.integer(x)) is True
  1089. assert ask(Q.complex(2*x + 1), Q.even(x)) is True
  1090. assert ask(Q.complex(2*x + 1), Q.odd(x)) is True
  1091. # x**2
  1092. assert ask(Q.complex(x**2), Q.complex(x)) is True
  1093. assert ask(Q.complex(x**2), Q.real(x)) is True
  1094. assert ask(Q.complex(x**2), Q.positive(x)) is True
  1095. assert ask(Q.complex(x**2), Q.rational(x)) is True
  1096. assert ask(Q.complex(x**2), Q.irrational(x)) is True
  1097. assert ask(Q.complex(x**2), Q.imaginary(x)) is True
  1098. assert ask(Q.complex(x**2), Q.integer(x)) is True
  1099. assert ask(Q.complex(x**2), Q.even(x)) is True
  1100. assert ask(Q.complex(x**2), Q.odd(x)) is True
  1101. # 2**x
  1102. assert ask(Q.complex(2**x), Q.complex(x)) is True
  1103. assert ask(Q.complex(2**x), Q.real(x)) is True
  1104. assert ask(Q.complex(2**x), Q.positive(x)) is True
  1105. assert ask(Q.complex(2**x), Q.rational(x)) is True
  1106. assert ask(Q.complex(2**x), Q.irrational(x)) is True
  1107. assert ask(Q.complex(2**x), Q.imaginary(x)) is True
  1108. assert ask(Q.complex(2**x), Q.integer(x)) is True
  1109. assert ask(Q.complex(2**x), Q.even(x)) is True
  1110. assert ask(Q.complex(2**x), Q.odd(x)) is True
  1111. assert ask(Q.complex(x**y), Q.complex(x) & Q.complex(y)) is True
  1112. # trigonometric expressions
  1113. assert ask(Q.complex(sin(x))) is True
  1114. assert ask(Q.complex(sin(2*x + 1))) is True
  1115. assert ask(Q.complex(cos(x))) is True
  1116. assert ask(Q.complex(cos(2*x + 1))) is True
  1117. # exponential
  1118. assert ask(Q.complex(exp(x))) is True
  1119. assert ask(Q.complex(exp(x))) is True
  1120. # Q.complexes
  1121. assert ask(Q.complex(Abs(x))) is True
  1122. assert ask(Q.complex(re(x))) is True
  1123. assert ask(Q.complex(im(x))) is True
  1124. def test_even_query():
  1125. assert ask(Q.even(x)) is None
  1126. assert ask(Q.even(x), Q.integer(x)) is None
  1127. assert ask(Q.even(x), ~Q.integer(x)) is False
  1128. assert ask(Q.even(x), Q.rational(x)) is None
  1129. assert ask(Q.even(x), Q.positive(x)) is None
  1130. assert ask(Q.even(2*x)) is None
  1131. assert ask(Q.even(2*x), Q.integer(x)) is True
  1132. assert ask(Q.even(2*x), Q.even(x)) is True
  1133. assert ask(Q.even(2*x), Q.irrational(x)) is False
  1134. assert ask(Q.even(2*x), Q.odd(x)) is True
  1135. assert ask(Q.even(2*x), ~Q.integer(x)) is None
  1136. assert ask(Q.even(3*x), Q.integer(x)) is None
  1137. assert ask(Q.even(3*x), Q.even(x)) is True
  1138. assert ask(Q.even(3*x), Q.odd(x)) is False
  1139. assert ask(Q.even(x + 1), Q.odd(x)) is True
  1140. assert ask(Q.even(x + 1), Q.even(x)) is False
  1141. assert ask(Q.even(x + 2), Q.odd(x)) is False
  1142. assert ask(Q.even(x + 2), Q.even(x)) is True
  1143. assert ask(Q.even(7 - x), Q.odd(x)) is True
  1144. assert ask(Q.even(7 + x), Q.odd(x)) is True
  1145. assert ask(Q.even(x + y), Q.odd(x) & Q.odd(y)) is True
  1146. assert ask(Q.even(x + y), Q.odd(x) & Q.even(y)) is False
  1147. assert ask(Q.even(x + y), Q.even(x) & Q.even(y)) is True
  1148. assert ask(Q.even(2*x + 1), Q.integer(x)) is False
  1149. assert ask(Q.even(2*x*y), Q.rational(x) & Q.rational(x)) is None
  1150. assert ask(Q.even(2*x*y), Q.irrational(x) & Q.irrational(x)) is None
  1151. assert ask(Q.even(x + y + z), Q.odd(x) & Q.odd(y) & Q.even(z)) is True
  1152. assert ask(Q.even(x + y + z + t),
  1153. Q.odd(x) & Q.odd(y) & Q.even(z) & Q.integer(t)) is None
  1154. assert ask(Q.even(Abs(x)), Q.even(x)) is True
  1155. assert ask(Q.even(Abs(x)), ~Q.even(x)) is None
  1156. assert ask(Q.even(re(x)), Q.even(x)) is True
  1157. assert ask(Q.even(re(x)), ~Q.even(x)) is None
  1158. assert ask(Q.even(im(x)), Q.even(x)) is True
  1159. assert ask(Q.even(im(x)), Q.real(x)) is True
  1160. assert ask(Q.even((-1)**n), Q.integer(n)) is False
  1161. assert ask(Q.even(k**2), Q.even(k)) is True
  1162. assert ask(Q.even(n**2), Q.odd(n)) is False
  1163. assert ask(Q.even(2**k), Q.even(k)) is None
  1164. assert ask(Q.even(x**2)) is None
  1165. assert ask(Q.even(k**m), Q.even(k) & Q.integer(m) & ~Q.negative(m)) is None
  1166. assert ask(Q.even(n**m), Q.odd(n) & Q.integer(m) & ~Q.negative(m)) is False
  1167. assert ask(Q.even(k**p), Q.even(k) & Q.integer(p) & Q.positive(p)) is True
  1168. assert ask(Q.even(n**p), Q.odd(n) & Q.integer(p) & Q.positive(p)) is False
  1169. assert ask(Q.even(m**k), Q.even(k) & Q.integer(m) & ~Q.negative(m)) is None
  1170. assert ask(Q.even(p**k), Q.even(k) & Q.integer(p) & Q.positive(p)) is None
  1171. assert ask(Q.even(m**n), Q.odd(n) & Q.integer(m) & ~Q.negative(m)) is None
  1172. assert ask(Q.even(p**n), Q.odd(n) & Q.integer(p) & Q.positive(p)) is None
  1173. assert ask(Q.even(k**x), Q.even(k)) is None
  1174. assert ask(Q.even(n**x), Q.odd(n)) is None
  1175. assert ask(Q.even(x*y), Q.integer(x) & Q.integer(y)) is None
  1176. assert ask(Q.even(x*x), Q.integer(x)) is None
  1177. assert ask(Q.even(x*(x + y)), Q.integer(x) & Q.odd(y)) is True
  1178. assert ask(Q.even(x*(x + y)), Q.integer(x) & Q.even(y)) is None
  1179. @XFAIL
  1180. def test_evenness_in_ternary_integer_product_with_odd():
  1181. # Tests that oddness inference is independent of term ordering.
  1182. # Term ordering at the point of testing depends on SymPy's symbol order, so
  1183. # we try to force a different order by modifying symbol names.
  1184. assert ask(Q.even(x*y*(y + z)), Q.integer(x) & Q.integer(y) & Q.odd(z)) is True
  1185. assert ask(Q.even(y*x*(x + z)), Q.integer(x) & Q.integer(y) & Q.odd(z)) is True
  1186. def test_evenness_in_ternary_integer_product_with_even():
  1187. assert ask(Q.even(x*y*(y + z)), Q.integer(x) & Q.integer(y) & Q.even(z)) is None
  1188. def test_extended_real():
  1189. assert ask(Q.extended_real(x), Q.positive_infinite(x)) is True
  1190. assert ask(Q.extended_real(x), Q.positive(x)) is True
  1191. assert ask(Q.extended_real(x), Q.zero(x)) is True
  1192. assert ask(Q.extended_real(x), Q.negative(x)) is True
  1193. assert ask(Q.extended_real(x), Q.negative_infinite(x)) is True
  1194. assert ask(Q.extended_real(-x), Q.positive(x)) is True
  1195. assert ask(Q.extended_real(-x), Q.negative(x)) is True
  1196. assert ask(Q.extended_real(x + S.Infinity), Q.real(x)) is True
  1197. assert ask(Q.extended_real(x), Q.infinite(x)) is None
  1198. @_both_exp_pow
  1199. def test_rational():
  1200. assert ask(Q.rational(x), Q.integer(x)) is True
  1201. assert ask(Q.rational(x), Q.irrational(x)) is False
  1202. assert ask(Q.rational(x), Q.real(x)) is None
  1203. assert ask(Q.rational(x), Q.positive(x)) is None
  1204. assert ask(Q.rational(x), Q.negative(x)) is None
  1205. assert ask(Q.rational(x), Q.nonzero(x)) is None
  1206. assert ask(Q.rational(x), ~Q.algebraic(x)) is False
  1207. assert ask(Q.rational(2*x), Q.rational(x)) is True
  1208. assert ask(Q.rational(2*x), Q.integer(x)) is True
  1209. assert ask(Q.rational(2*x), Q.even(x)) is True
  1210. assert ask(Q.rational(2*x), Q.odd(x)) is True
  1211. assert ask(Q.rational(2*x), Q.irrational(x)) is False
  1212. assert ask(Q.rational(x/2), Q.rational(x)) is True
  1213. assert ask(Q.rational(x/2), Q.integer(x)) is True
  1214. assert ask(Q.rational(x/2), Q.even(x)) is True
  1215. assert ask(Q.rational(x/2), Q.odd(x)) is True
  1216. assert ask(Q.rational(x/2), Q.irrational(x)) is False
  1217. assert ask(Q.rational(1/x), Q.rational(x)) is True
  1218. assert ask(Q.rational(1/x), Q.integer(x)) is True
  1219. assert ask(Q.rational(1/x), Q.even(x)) is True
  1220. assert ask(Q.rational(1/x), Q.odd(x)) is True
  1221. assert ask(Q.rational(1/x), Q.irrational(x)) is False
  1222. assert ask(Q.rational(2/x), Q.rational(x)) is True
  1223. assert ask(Q.rational(2/x), Q.integer(x)) is True
  1224. assert ask(Q.rational(2/x), Q.even(x)) is True
  1225. assert ask(Q.rational(2/x), Q.odd(x)) is True
  1226. assert ask(Q.rational(2/x), Q.irrational(x)) is False
  1227. assert ask(Q.rational(x), ~Q.algebraic(x)) is False
  1228. # with multiple symbols
  1229. assert ask(Q.rational(x*y), Q.irrational(x) & Q.irrational(y)) is None
  1230. assert ask(Q.rational(y/x), Q.rational(x) & Q.rational(y)) is True
  1231. assert ask(Q.rational(y/x), Q.integer(x) & Q.rational(y)) is True
  1232. assert ask(Q.rational(y/x), Q.even(x) & Q.rational(y)) is True
  1233. assert ask(Q.rational(y/x), Q.odd(x) & Q.rational(y)) is True
  1234. assert ask(Q.rational(y/x), Q.irrational(x) & Q.rational(y)) is False
  1235. for f in [exp, sin, tan, asin, atan, cos]:
  1236. assert ask(Q.rational(f(7))) is False
  1237. assert ask(Q.rational(f(7, evaluate=False))) is False
  1238. assert ask(Q.rational(f(0, evaluate=False))) is True
  1239. assert ask(Q.rational(f(x)), Q.rational(x)) is None
  1240. assert ask(Q.rational(f(x)), Q.rational(x) & Q.nonzero(x)) is False
  1241. for g in [log, acos]:
  1242. assert ask(Q.rational(g(7))) is False
  1243. assert ask(Q.rational(g(7, evaluate=False))) is False
  1244. assert ask(Q.rational(g(1, evaluate=False))) is True
  1245. assert ask(Q.rational(g(x)), Q.rational(x)) is None
  1246. assert ask(Q.rational(g(x)), Q.rational(x) & Q.nonzero(x - 1)) is False
  1247. for h in [cot, acot]:
  1248. assert ask(Q.rational(h(7))) is False
  1249. assert ask(Q.rational(h(7, evaluate=False))) is False
  1250. assert ask(Q.rational(h(x)), Q.rational(x)) is False
  1251. def test_hermitian():
  1252. assert ask(Q.hermitian(x)) is None
  1253. assert ask(Q.hermitian(x), Q.antihermitian(x)) is None
  1254. assert ask(Q.hermitian(x), Q.imaginary(x)) is False
  1255. assert ask(Q.hermitian(x), Q.prime(x)) is True
  1256. assert ask(Q.hermitian(x), Q.real(x)) is True
  1257. assert ask(Q.hermitian(x), Q.zero(x)) is True
  1258. assert ask(Q.hermitian(x + 1), Q.antihermitian(x)) is None
  1259. assert ask(Q.hermitian(x + 1), Q.complex(x)) is None
  1260. assert ask(Q.hermitian(x + 1), Q.hermitian(x)) is True
  1261. assert ask(Q.hermitian(x + 1), Q.imaginary(x)) is False
  1262. assert ask(Q.hermitian(x + 1), Q.real(x)) is True
  1263. assert ask(Q.hermitian(x + I), Q.antihermitian(x)) is None
  1264. assert ask(Q.hermitian(x + I), Q.complex(x)) is None
  1265. assert ask(Q.hermitian(x + I), Q.hermitian(x)) is False
  1266. assert ask(Q.hermitian(x + I), Q.imaginary(x)) is None
  1267. assert ask(Q.hermitian(x + I), Q.real(x)) is False
  1268. assert ask(
  1269. Q.hermitian(x + y), Q.antihermitian(x) & Q.antihermitian(y)) is None
  1270. assert ask(Q.hermitian(x + y), Q.antihermitian(x) & Q.complex(y)) is None
  1271. assert ask(
  1272. Q.hermitian(x + y), Q.antihermitian(x) & Q.hermitian(y)) is None
  1273. assert ask(Q.hermitian(x + y), Q.antihermitian(x) & Q.imaginary(y)) is None
  1274. assert ask(Q.hermitian(x + y), Q.antihermitian(x) & Q.real(y)) is None
  1275. assert ask(Q.hermitian(x + y), Q.hermitian(x) & Q.complex(y)) is None
  1276. assert ask(Q.hermitian(x + y), Q.hermitian(x) & Q.hermitian(y)) is True
  1277. assert ask(Q.hermitian(x + y), Q.hermitian(x) & Q.imaginary(y)) is False
  1278. assert ask(Q.hermitian(x + y), Q.hermitian(x) & Q.real(y)) is True
  1279. assert ask(Q.hermitian(x + y), Q.imaginary(x) & Q.complex(y)) is None
  1280. assert ask(Q.hermitian(x + y), Q.imaginary(x) & Q.imaginary(y)) is None
  1281. assert ask(Q.hermitian(x + y), Q.imaginary(x) & Q.real(y)) is False
  1282. assert ask(Q.hermitian(x + y), Q.real(x) & Q.complex(y)) is None
  1283. assert ask(Q.hermitian(x + y), Q.real(x) & Q.real(y)) is True
  1284. assert ask(Q.hermitian(I*x), Q.antihermitian(x)) is True
  1285. assert ask(Q.hermitian(I*x), Q.complex(x)) is None
  1286. assert ask(Q.hermitian(I*x), Q.hermitian(x)) is False
  1287. assert ask(Q.hermitian(I*x), Q.imaginary(x)) is True
  1288. assert ask(Q.hermitian(I*x), Q.real(x)) is False
  1289. assert ask(Q.hermitian(x*y), Q.hermitian(x) & Q.real(y)) is True
  1290. assert ask(
  1291. Q.hermitian(x + y + z), Q.real(x) & Q.real(y) & Q.real(z)) is True
  1292. assert ask(Q.hermitian(x + y + z),
  1293. Q.real(x) & Q.real(y) & Q.imaginary(z)) is False
  1294. assert ask(Q.hermitian(x + y + z),
  1295. Q.real(x) & Q.imaginary(y) & Q.imaginary(z)) is None
  1296. assert ask(Q.hermitian(x + y + z),
  1297. Q.imaginary(x) & Q.imaginary(y) & Q.imaginary(z)) is None
  1298. assert ask(Q.antihermitian(x)) is None
  1299. assert ask(Q.antihermitian(x), Q.real(x)) is False
  1300. assert ask(Q.antihermitian(x), Q.prime(x)) is False
  1301. assert ask(Q.antihermitian(x + 1), Q.antihermitian(x)) is False
  1302. assert ask(Q.antihermitian(x + 1), Q.complex(x)) is None
  1303. assert ask(Q.antihermitian(x + 1), Q.hermitian(x)) is None
  1304. assert ask(Q.antihermitian(x + 1), Q.imaginary(x)) is False
  1305. assert ask(Q.antihermitian(x + 1), Q.real(x)) is None
  1306. assert ask(Q.antihermitian(x + I), Q.antihermitian(x)) is True
  1307. assert ask(Q.antihermitian(x + I), Q.complex(x)) is None
  1308. assert ask(Q.antihermitian(x + I), Q.hermitian(x)) is None
  1309. assert ask(Q.antihermitian(x + I), Q.imaginary(x)) is True
  1310. assert ask(Q.antihermitian(x + I), Q.real(x)) is False
  1311. assert ask(Q.antihermitian(x), Q.zero(x)) is True
  1312. assert ask(
  1313. Q.antihermitian(x + y), Q.antihermitian(x) & Q.antihermitian(y)
  1314. ) is True
  1315. assert ask(
  1316. Q.antihermitian(x + y), Q.antihermitian(x) & Q.complex(y)) is None
  1317. assert ask(
  1318. Q.antihermitian(x + y), Q.antihermitian(x) & Q.hermitian(y)) is None
  1319. assert ask(
  1320. Q.antihermitian(x + y), Q.antihermitian(x) & Q.imaginary(y)) is True
  1321. assert ask(Q.antihermitian(x + y), Q.antihermitian(x) & Q.real(y)
  1322. ) is False
  1323. assert ask(Q.antihermitian(x + y), Q.hermitian(x) & Q.complex(y)) is None
  1324. assert ask(Q.antihermitian(x + y), Q.hermitian(x) & Q.hermitian(y)
  1325. ) is None
  1326. assert ask(
  1327. Q.antihermitian(x + y), Q.hermitian(x) & Q.imaginary(y)) is None
  1328. assert ask(Q.antihermitian(x + y), Q.hermitian(x) & Q.real(y)) is None
  1329. assert ask(Q.antihermitian(x + y), Q.imaginary(x) & Q.complex(y)) is None
  1330. assert ask(Q.antihermitian(x + y), Q.imaginary(x) & Q.imaginary(y)) is True
  1331. assert ask(Q.antihermitian(x + y), Q.imaginary(x) & Q.real(y)) is False
  1332. assert ask(Q.antihermitian(x + y), Q.real(x) & Q.complex(y)) is None
  1333. assert ask(Q.antihermitian(x + y), Q.real(x) & Q.real(y)) is None
  1334. assert ask(Q.antihermitian(I*x), Q.real(x)) is True
  1335. assert ask(Q.antihermitian(I*x), Q.antihermitian(x)) is False
  1336. assert ask(Q.antihermitian(I*x), Q.complex(x)) is None
  1337. assert ask(Q.antihermitian(x*y), Q.antihermitian(x) & Q.real(y)) is True
  1338. assert ask(Q.antihermitian(x + y + z),
  1339. Q.real(x) & Q.real(y) & Q.real(z)) is None
  1340. assert ask(Q.antihermitian(x + y + z),
  1341. Q.real(x) & Q.real(y) & Q.imaginary(z)) is None
  1342. assert ask(Q.antihermitian(x + y + z),
  1343. Q.real(x) & Q.imaginary(y) & Q.imaginary(z)) is False
  1344. assert ask(Q.antihermitian(x + y + z),
  1345. Q.imaginary(x) & Q.imaginary(y) & Q.imaginary(z)) is True
  1346. @_both_exp_pow
  1347. def test_imaginary():
  1348. assert ask(Q.imaginary(x)) is None
  1349. assert ask(Q.imaginary(x), Q.real(x)) is False
  1350. assert ask(Q.imaginary(x), Q.prime(x)) is False
  1351. assert ask(Q.imaginary(x + 1), Q.real(x)) is False
  1352. assert ask(Q.imaginary(x + 1), Q.imaginary(x)) is False
  1353. assert ask(Q.imaginary(x + I), Q.real(x)) is False
  1354. assert ask(Q.imaginary(x + I), Q.imaginary(x)) is True
  1355. assert ask(Q.imaginary(x + y), Q.imaginary(x) & Q.imaginary(y)) is True
  1356. assert ask(Q.imaginary(x + y), Q.real(x) & Q.real(y)) is False
  1357. assert ask(Q.imaginary(x + y), Q.imaginary(x) & Q.real(y)) is False
  1358. assert ask(Q.imaginary(x + y), Q.complex(x) & Q.real(y)) is None
  1359. assert ask(
  1360. Q.imaginary(x + y + z), Q.real(x) & Q.real(y) & Q.real(z)) is False
  1361. assert ask(Q.imaginary(x + y + z),
  1362. Q.real(x) & Q.real(y) & Q.imaginary(z)) is None
  1363. assert ask(Q.imaginary(x + y + z),
  1364. Q.real(x) & Q.imaginary(y) & Q.imaginary(z)) is False
  1365. assert ask(Q.imaginary(I*x), Q.real(x)) is True
  1366. assert ask(Q.imaginary(I*x), Q.imaginary(x)) is False
  1367. assert ask(Q.imaginary(I*x), Q.complex(x)) is None
  1368. assert ask(Q.imaginary(x*y), Q.imaginary(x) & Q.real(y)) is True
  1369. assert ask(Q.imaginary(x*y), Q.real(x) & Q.real(y)) is False
  1370. assert ask(Q.imaginary(I**x), Q.negative(x)) is None
  1371. assert ask(Q.imaginary(I**x), Q.positive(x)) is None
  1372. assert ask(Q.imaginary(I**x), Q.even(x)) is False
  1373. assert ask(Q.imaginary(I**x), Q.odd(x)) is True
  1374. assert ask(Q.imaginary(I**x), Q.imaginary(x)) is False
  1375. assert ask(Q.imaginary((2*I)**x), Q.imaginary(x)) is False
  1376. assert ask(Q.imaginary(x**0), Q.imaginary(x)) is False
  1377. assert ask(Q.imaginary(x**y), Q.imaginary(x) & Q.imaginary(y)) is None
  1378. assert ask(Q.imaginary(x**y), Q.imaginary(x) & Q.real(y)) is None
  1379. assert ask(Q.imaginary(x**y), Q.real(x) & Q.imaginary(y)) is None
  1380. assert ask(Q.imaginary(x**y), Q.real(x) & Q.real(y)) is None
  1381. assert ask(Q.imaginary(x**y), Q.imaginary(x) & Q.integer(y)) is None
  1382. assert ask(Q.imaginary(x**y), Q.imaginary(y) & Q.integer(x)) is None
  1383. assert ask(Q.imaginary(x**y), Q.imaginary(x) & Q.odd(y)) is True
  1384. assert ask(Q.imaginary(x**y), Q.imaginary(x) & Q.rational(y)) is None
  1385. assert ask(Q.imaginary(x**y), Q.imaginary(x) & Q.even(y)) is False
  1386. assert ask(Q.imaginary(x**y), Q.real(x) & Q.integer(y)) is False
  1387. assert ask(Q.imaginary(x**y), Q.positive(x) & Q.real(y)) is False
  1388. assert ask(Q.imaginary(x**y), Q.negative(x) & Q.real(y)) is None
  1389. assert ask(Q.imaginary(x**y), Q.negative(x) & Q.real(y) & ~Q.rational(y)) is False
  1390. assert ask(Q.imaginary(x**y), Q.integer(x) & Q.imaginary(y)) is None
  1391. assert ask(Q.imaginary(x**y), Q.negative(x) & Q.rational(y) & Q.integer(2*y)) is True
  1392. assert ask(Q.imaginary(x**y), Q.negative(x) & Q.rational(y) & ~Q.integer(2*y)) is False
  1393. assert ask(Q.imaginary(x**y), Q.negative(x) & Q.rational(y)) is None
  1394. assert ask(Q.imaginary(x**y), Q.real(x) & Q.rational(y) & ~Q.integer(2*y)) is False
  1395. assert ask(Q.imaginary(x**y), Q.real(x) & Q.rational(y) & Q.integer(2*y)) is None
  1396. # logarithm
  1397. assert ask(Q.imaginary(log(I))) is True
  1398. assert ask(Q.imaginary(log(2*I))) is False
  1399. assert ask(Q.imaginary(log(I + 1))) is False
  1400. assert ask(Q.imaginary(log(x)), Q.complex(x)) is None
  1401. assert ask(Q.imaginary(log(x)), Q.imaginary(x)) is None
  1402. assert ask(Q.imaginary(log(x)), Q.positive(x)) is False
  1403. assert ask(Q.imaginary(log(exp(x))), Q.complex(x)) is None
  1404. assert ask(Q.imaginary(log(exp(x))), Q.imaginary(x)) is None # zoo/I/a+I*b
  1405. assert ask(Q.imaginary(log(exp(I)))) is True
  1406. # exponential
  1407. assert ask(Q.imaginary(exp(x)**x), Q.imaginary(x)) is False
  1408. eq = Pow(exp(pi*I*x, evaluate=False), x, evaluate=False)
  1409. assert ask(Q.imaginary(eq), Q.even(x)) is False
  1410. eq = Pow(exp(pi*I*x/2, evaluate=False), x, evaluate=False)
  1411. assert ask(Q.imaginary(eq), Q.odd(x)) is True
  1412. assert ask(Q.imaginary(exp(3*I*pi*x)**x), Q.integer(x)) is False
  1413. assert ask(Q.imaginary(exp(2*pi*I, evaluate=False))) is False
  1414. assert ask(Q.imaginary(exp(pi*I/2, evaluate=False))) is True
  1415. # issue 7886
  1416. assert ask(Q.imaginary(Pow(x, Rational(1, 4))), Q.real(x) & Q.negative(x)) is False
  1417. def test_integer():
  1418. assert ask(Q.integer(x)) is None
  1419. assert ask(Q.integer(x), Q.integer(x)) is True
  1420. assert ask(Q.integer(x), ~Q.integer(x)) is False
  1421. assert ask(Q.integer(x), ~Q.real(x)) is False
  1422. assert ask(Q.integer(x), ~Q.positive(x)) is None
  1423. assert ask(Q.integer(x), Q.even(x) | Q.odd(x)) is True
  1424. assert ask(Q.integer(2*x), Q.integer(x)) is True
  1425. assert ask(Q.integer(2*x), Q.even(x)) is True
  1426. assert ask(Q.integer(2*x), Q.prime(x)) is True
  1427. assert ask(Q.integer(2*x), Q.rational(x)) is None
  1428. assert ask(Q.integer(2*x), Q.real(x)) is None
  1429. assert ask(Q.integer(sqrt(2)*x), Q.integer(x)) is False
  1430. assert ask(Q.integer(sqrt(2)*x), Q.irrational(x)) is None
  1431. assert ask(Q.integer(x/2), Q.odd(x)) is False
  1432. assert ask(Q.integer(x/2), Q.even(x)) is True
  1433. assert ask(Q.integer(x/3), Q.odd(x)) is None
  1434. assert ask(Q.integer(x/3), Q.even(x)) is None
  1435. def test_negative():
  1436. assert ask(Q.negative(x), Q.negative(x)) is True
  1437. assert ask(Q.negative(x), Q.positive(x)) is False
  1438. assert ask(Q.negative(x), ~Q.real(x)) is False
  1439. assert ask(Q.negative(x), Q.prime(x)) is False
  1440. assert ask(Q.negative(x), ~Q.prime(x)) is None
  1441. assert ask(Q.negative(-x), Q.positive(x)) is True
  1442. assert ask(Q.negative(-x), ~Q.positive(x)) is None
  1443. assert ask(Q.negative(-x), Q.negative(x)) is False
  1444. assert ask(Q.negative(-x), Q.positive(x)) is True
  1445. assert ask(Q.negative(x - 1), Q.negative(x)) is True
  1446. assert ask(Q.negative(x + y)) is None
  1447. assert ask(Q.negative(x + y), Q.negative(x)) is None
  1448. assert ask(Q.negative(x + y), Q.negative(x) & Q.negative(y)) is True
  1449. assert ask(Q.negative(x + y), Q.negative(x) & Q.nonpositive(y)) is True
  1450. assert ask(Q.negative(2 + I)) is False
  1451. # although this could be False, it is representative of expressions
  1452. # that don't evaluate to a zero with precision
  1453. assert ask(Q.negative(cos(I)**2 + sin(I)**2 - 1)) is None
  1454. assert ask(Q.negative(-I + I*(cos(2)**2 + sin(2)**2))) is None
  1455. assert ask(Q.negative(x**2)) is None
  1456. assert ask(Q.negative(x**2), Q.real(x)) is False
  1457. assert ask(Q.negative(x**1.4), Q.real(x)) is None
  1458. assert ask(Q.negative(x**I), Q.positive(x)) is None
  1459. assert ask(Q.negative(x*y)) is None
  1460. assert ask(Q.negative(x*y), Q.positive(x) & Q.positive(y)) is False
  1461. assert ask(Q.negative(x*y), Q.positive(x) & Q.negative(y)) is True
  1462. assert ask(Q.negative(x*y), Q.complex(x) & Q.complex(y)) is None
  1463. assert ask(Q.negative(x**y)) is None
  1464. assert ask(Q.negative(x**y), Q.negative(x) & Q.even(y)) is False
  1465. assert ask(Q.negative(x**y), Q.negative(x) & Q.odd(y)) is True
  1466. assert ask(Q.negative(x**y), Q.positive(x) & Q.integer(y)) is False
  1467. assert ask(Q.negative(Abs(x))) is False
  1468. def test_nonzero():
  1469. assert ask(Q.nonzero(x)) is None
  1470. assert ask(Q.nonzero(x), Q.real(x)) is None
  1471. assert ask(Q.nonzero(x), Q.positive(x)) is True
  1472. assert ask(Q.nonzero(x), Q.negative(x)) is True
  1473. assert ask(Q.nonzero(x), Q.negative(x) | Q.positive(x)) is True
  1474. assert ask(Q.nonzero(x + y)) is None
  1475. assert ask(Q.nonzero(x + y), Q.positive(x) & Q.positive(y)) is True
  1476. assert ask(Q.nonzero(x + y), Q.positive(x) & Q.negative(y)) is None
  1477. assert ask(Q.nonzero(x + y), Q.negative(x) & Q.negative(y)) is True
  1478. assert ask(Q.nonzero(2*x)) is None
  1479. assert ask(Q.nonzero(2*x), Q.positive(x)) is True
  1480. assert ask(Q.nonzero(2*x), Q.negative(x)) is True
  1481. assert ask(Q.nonzero(x*y), Q.nonzero(x)) is None
  1482. assert ask(Q.nonzero(x*y), Q.nonzero(x) & Q.nonzero(y)) is True
  1483. assert ask(Q.nonzero(x**y), Q.nonzero(x)) is True
  1484. assert ask(Q.nonzero(Abs(x))) is None
  1485. assert ask(Q.nonzero(Abs(x)), Q.nonzero(x)) is True
  1486. assert ask(Q.nonzero(log(exp(2*I)))) is False
  1487. # although this could be False, it is representative of expressions
  1488. # that don't evaluate to a zero with precision
  1489. assert ask(Q.nonzero(cos(1)**2 + sin(1)**2 - 1)) is None
  1490. def test_zero():
  1491. assert ask(Q.zero(x)) is None
  1492. assert ask(Q.zero(x), Q.real(x)) is None
  1493. assert ask(Q.zero(x), Q.positive(x)) is False
  1494. assert ask(Q.zero(x), Q.negative(x)) is False
  1495. assert ask(Q.zero(x), Q.negative(x) | Q.positive(x)) is False
  1496. assert ask(Q.zero(x), Q.nonnegative(x) & Q.nonpositive(x)) is True
  1497. assert ask(Q.zero(x + y)) is None
  1498. assert ask(Q.zero(x + y), Q.positive(x) & Q.positive(y)) is False
  1499. assert ask(Q.zero(x + y), Q.positive(x) & Q.negative(y)) is None
  1500. assert ask(Q.zero(x + y), Q.negative(x) & Q.negative(y)) is False
  1501. assert ask(Q.zero(2*x)) is None
  1502. assert ask(Q.zero(2*x), Q.positive(x)) is False
  1503. assert ask(Q.zero(2*x), Q.negative(x)) is False
  1504. assert ask(Q.zero(x*y), Q.nonzero(x)) is None
  1505. assert ask(Q.zero(Abs(x))) is None
  1506. assert ask(Q.zero(Abs(x)), Q.zero(x)) is True
  1507. assert ask(Q.integer(x), Q.zero(x)) is True
  1508. assert ask(Q.even(x), Q.zero(x)) is True
  1509. assert ask(Q.odd(x), Q.zero(x)) is False
  1510. assert ask(Q.zero(x), Q.even(x)) is None
  1511. assert ask(Q.zero(x), Q.odd(x)) is False
  1512. assert ask(Q.zero(x) | Q.zero(y), Q.zero(x*y)) is True
  1513. def test_odd_query():
  1514. assert ask(Q.odd(x)) is None
  1515. assert ask(Q.odd(x), Q.odd(x)) is True
  1516. assert ask(Q.odd(x), Q.integer(x)) is None
  1517. assert ask(Q.odd(x), ~Q.integer(x)) is False
  1518. assert ask(Q.odd(x), Q.rational(x)) is None
  1519. assert ask(Q.odd(x), Q.positive(x)) is None
  1520. assert ask(Q.odd(-x), Q.odd(x)) is True
  1521. assert ask(Q.odd(2*x)) is None
  1522. assert ask(Q.odd(2*x), Q.integer(x)) is False
  1523. assert ask(Q.odd(2*x), Q.odd(x)) is False
  1524. assert ask(Q.odd(2*x), Q.irrational(x)) is False
  1525. assert ask(Q.odd(2*x), ~Q.integer(x)) is None
  1526. assert ask(Q.odd(3*x), Q.integer(x)) is None
  1527. assert ask(Q.odd(x/3), Q.odd(x)) is None
  1528. assert ask(Q.odd(x/3), Q.even(x)) is None
  1529. assert ask(Q.odd(x + 1), Q.even(x)) is True
  1530. assert ask(Q.odd(x + 2), Q.even(x)) is False
  1531. assert ask(Q.odd(x + 2), Q.odd(x)) is True
  1532. assert ask(Q.odd(3 - x), Q.odd(x)) is False
  1533. assert ask(Q.odd(3 - x), Q.even(x)) is True
  1534. assert ask(Q.odd(3 + x), Q.odd(x)) is False
  1535. assert ask(Q.odd(3 + x), Q.even(x)) is True
  1536. assert ask(Q.odd(x + y), Q.odd(x) & Q.odd(y)) is False
  1537. assert ask(Q.odd(x + y), Q.odd(x) & Q.even(y)) is True
  1538. assert ask(Q.odd(x - y), Q.even(x) & Q.odd(y)) is True
  1539. assert ask(Q.odd(x - y), Q.odd(x) & Q.odd(y)) is False
  1540. assert ask(Q.odd(x + y + z), Q.odd(x) & Q.odd(y) & Q.even(z)) is False
  1541. assert ask(Q.odd(x + y + z + t),
  1542. Q.odd(x) & Q.odd(y) & Q.even(z) & Q.integer(t)) is None
  1543. assert ask(Q.odd(2*x + 1), Q.integer(x)) is True
  1544. assert ask(Q.odd(2*x + y), Q.integer(x) & Q.odd(y)) is True
  1545. assert ask(Q.odd(2*x + y), Q.integer(x) & Q.even(y)) is False
  1546. assert ask(Q.odd(2*x + y), Q.integer(x) & Q.integer(y)) is None
  1547. assert ask(Q.odd(x*y), Q.odd(x) & Q.even(y)) is False
  1548. assert ask(Q.odd(x*y), Q.odd(x) & Q.odd(y)) is True
  1549. assert ask(Q.odd(2*x*y), Q.rational(x) & Q.rational(x)) is None
  1550. assert ask(Q.odd(2*x*y), Q.irrational(x) & Q.irrational(x)) is None
  1551. assert ask(Q.odd(Abs(x)), Q.odd(x)) is True
  1552. assert ask(Q.odd((-1)**n), Q.integer(n)) is True
  1553. assert ask(Q.odd(k**2), Q.even(k)) is False
  1554. assert ask(Q.odd(n**2), Q.odd(n)) is True
  1555. assert ask(Q.odd(3**k), Q.even(k)) is None
  1556. assert ask(Q.odd(k**m), Q.even(k) & Q.integer(m) & ~Q.negative(m)) is None
  1557. assert ask(Q.odd(n**m), Q.odd(n) & Q.integer(m) & ~Q.negative(m)) is True
  1558. assert ask(Q.odd(k**p), Q.even(k) & Q.integer(p) & Q.positive(p)) is False
  1559. assert ask(Q.odd(n**p), Q.odd(n) & Q.integer(p) & Q.positive(p)) is True
  1560. assert ask(Q.odd(m**k), Q.even(k) & Q.integer(m) & ~Q.negative(m)) is None
  1561. assert ask(Q.odd(p**k), Q.even(k) & Q.integer(p) & Q.positive(p)) is None
  1562. assert ask(Q.odd(m**n), Q.odd(n) & Q.integer(m) & ~Q.negative(m)) is None
  1563. assert ask(Q.odd(p**n), Q.odd(n) & Q.integer(p) & Q.positive(p)) is None
  1564. assert ask(Q.odd(k**x), Q.even(k)) is None
  1565. assert ask(Q.odd(n**x), Q.odd(n)) is None
  1566. assert ask(Q.odd(x*y), Q.integer(x) & Q.integer(y)) is None
  1567. assert ask(Q.odd(x*x), Q.integer(x)) is None
  1568. assert ask(Q.odd(x*(x + y)), Q.integer(x) & Q.odd(y)) is False
  1569. assert ask(Q.odd(x*(x + y)), Q.integer(x) & Q.even(y)) is None
  1570. @XFAIL
  1571. def test_oddness_in_ternary_integer_product_with_odd():
  1572. # Tests that oddness inference is independent of term ordering.
  1573. # Term ordering at the point of testing depends on SymPy's symbol order, so
  1574. # we try to force a different order by modifying symbol names.
  1575. assert ask(Q.odd(x*y*(y + z)), Q.integer(x) & Q.integer(y) & Q.odd(z)) is False
  1576. assert ask(Q.odd(y*x*(x + z)), Q.integer(x) & Q.integer(y) & Q.odd(z)) is False
  1577. def test_oddness_in_ternary_integer_product_with_even():
  1578. assert ask(Q.odd(x*y*(y + z)), Q.integer(x) & Q.integer(y) & Q.even(z)) is None
  1579. def test_prime():
  1580. assert ask(Q.prime(x), Q.prime(x)) is True
  1581. assert ask(Q.prime(x), ~Q.prime(x)) is False
  1582. assert ask(Q.prime(x), Q.integer(x)) is None
  1583. assert ask(Q.prime(x), ~Q.integer(x)) is False
  1584. assert ask(Q.prime(2*x), Q.integer(x)) is None
  1585. assert ask(Q.prime(x*y)) is None
  1586. assert ask(Q.prime(x*y), Q.prime(x)) is None
  1587. assert ask(Q.prime(x*y), Q.integer(x) & Q.integer(y)) is None
  1588. assert ask(Q.prime(4*x), Q.integer(x)) is False
  1589. assert ask(Q.prime(4*x)) is None
  1590. assert ask(Q.prime(x**2), Q.integer(x)) is False
  1591. assert ask(Q.prime(x**2), Q.prime(x)) is False
  1592. assert ask(Q.prime(x**y), Q.integer(x) & Q.integer(y)) is False
  1593. @_both_exp_pow
  1594. def test_positive():
  1595. assert ask(Q.positive(x), Q.positive(x)) is True
  1596. assert ask(Q.positive(x), Q.negative(x)) is False
  1597. assert ask(Q.positive(x), Q.nonzero(x)) is None
  1598. assert ask(Q.positive(-x), Q.positive(x)) is False
  1599. assert ask(Q.positive(-x), Q.negative(x)) is True
  1600. assert ask(Q.positive(x + y), Q.positive(x) & Q.positive(y)) is True
  1601. assert ask(Q.positive(x + y), Q.positive(x) & Q.nonnegative(y)) is True
  1602. assert ask(Q.positive(x + y), Q.positive(x) & Q.negative(y)) is None
  1603. assert ask(Q.positive(x + y), Q.positive(x) & Q.imaginary(y)) is False
  1604. assert ask(Q.positive(2*x), Q.positive(x)) is True
  1605. assumptions = Q.positive(x) & Q.negative(y) & Q.negative(z) & Q.positive(w)
  1606. assert ask(Q.positive(x*y*z)) is None
  1607. assert ask(Q.positive(x*y*z), assumptions) is True
  1608. assert ask(Q.positive(-x*y*z), assumptions) is False
  1609. assert ask(Q.positive(x**I), Q.positive(x)) is None
  1610. assert ask(Q.positive(x**2), Q.positive(x)) is True
  1611. assert ask(Q.positive(x**2), Q.negative(x)) is True
  1612. assert ask(Q.positive(x**3), Q.negative(x)) is False
  1613. assert ask(Q.positive(1/(1 + x**2)), Q.real(x)) is True
  1614. assert ask(Q.positive(2**I)) is False
  1615. assert ask(Q.positive(2 + I)) is False
  1616. # although this could be False, it is representative of expressions
  1617. # that don't evaluate to a zero with precision
  1618. assert ask(Q.positive(cos(I)**2 + sin(I)**2 - 1)) is None
  1619. assert ask(Q.positive(-I + I*(cos(2)**2 + sin(2)**2))) is None
  1620. #exponential
  1621. assert ask(Q.positive(exp(x)), Q.real(x)) is True
  1622. assert ask(~Q.negative(exp(x)), Q.real(x)) is True
  1623. assert ask(Q.positive(x + exp(x)), Q.real(x)) is None
  1624. assert ask(Q.positive(exp(x)), Q.imaginary(x)) is None
  1625. assert ask(Q.positive(exp(2*pi*I, evaluate=False)), Q.imaginary(x)) is True
  1626. assert ask(Q.negative(exp(pi*I, evaluate=False)), Q.imaginary(x)) is True
  1627. assert ask(Q.positive(exp(x*pi*I)), Q.even(x)) is True
  1628. assert ask(Q.positive(exp(x*pi*I)), Q.odd(x)) is False
  1629. assert ask(Q.positive(exp(x*pi*I)), Q.real(x)) is None
  1630. # logarithm
  1631. assert ask(Q.positive(log(x)), Q.imaginary(x)) is False
  1632. assert ask(Q.positive(log(x)), Q.negative(x)) is False
  1633. assert ask(Q.positive(log(x)), Q.positive(x)) is None
  1634. assert ask(Q.positive(log(x + 2)), Q.positive(x)) is True
  1635. # factorial
  1636. assert ask(Q.positive(factorial(x)), Q.integer(x) & Q.positive(x))
  1637. assert ask(Q.positive(factorial(x)), Q.integer(x)) is None
  1638. #absolute value
  1639. assert ask(Q.positive(Abs(x))) is None # Abs(0) = 0
  1640. assert ask(Q.positive(Abs(x)), Q.positive(x)) is True
  1641. def test_nonpositive():
  1642. assert ask(Q.nonpositive(-1))
  1643. assert ask(Q.nonpositive(0))
  1644. assert ask(Q.nonpositive(1)) is False
  1645. assert ask(~Q.positive(x), Q.nonpositive(x))
  1646. assert ask(Q.nonpositive(x), Q.positive(x)) is False
  1647. assert ask(Q.nonpositive(sqrt(-1))) is False
  1648. assert ask(Q.nonpositive(x), Q.imaginary(x)) is False
  1649. def test_nonnegative():
  1650. assert ask(Q.nonnegative(-1)) is False
  1651. assert ask(Q.nonnegative(0))
  1652. assert ask(Q.nonnegative(1))
  1653. assert ask(~Q.negative(x), Q.nonnegative(x))
  1654. assert ask(Q.nonnegative(x), Q.negative(x)) is False
  1655. assert ask(Q.nonnegative(sqrt(-1))) is False
  1656. assert ask(Q.nonnegative(x), Q.imaginary(x)) is False
  1657. def test_real_basic():
  1658. assert ask(Q.real(x)) is None
  1659. assert ask(Q.real(x), Q.real(x)) is True
  1660. assert ask(Q.real(x), Q.nonzero(x)) is True
  1661. assert ask(Q.real(x), Q.positive(x)) is True
  1662. assert ask(Q.real(x), Q.negative(x)) is True
  1663. assert ask(Q.real(x), Q.integer(x)) is True
  1664. assert ask(Q.real(x), Q.even(x)) is True
  1665. assert ask(Q.real(x), Q.prime(x)) is True
  1666. assert ask(Q.real(x/sqrt(2)), Q.real(x)) is True
  1667. assert ask(Q.real(x/sqrt(-2)), Q.real(x)) is False
  1668. assert ask(Q.real(x + 1), Q.real(x)) is True
  1669. assert ask(Q.real(x + I), Q.real(x)) is False
  1670. assert ask(Q.real(x + I), Q.complex(x)) is None
  1671. assert ask(Q.real(2*x), Q.real(x)) is True
  1672. assert ask(Q.real(I*x), Q.real(x)) is False
  1673. assert ask(Q.real(I*x), Q.imaginary(x)) is True
  1674. assert ask(Q.real(I*x), Q.complex(x)) is None
  1675. def test_real_pow():
  1676. assert ask(Q.real(x**2), Q.real(x)) is True
  1677. assert ask(Q.real(sqrt(x)), Q.negative(x)) is False
  1678. assert ask(Q.real(x**y), Q.real(x) & Q.integer(y)) is True
  1679. assert ask(Q.real(x**y), Q.real(x) & Q.real(y)) is None
  1680. assert ask(Q.real(x**y), Q.positive(x) & Q.real(y)) is True
  1681. assert ask(Q.real(x**y), Q.imaginary(x) & Q.imaginary(y)) is None # I**I or (2*I)**I
  1682. assert ask(Q.real(x**y), Q.imaginary(x) & Q.real(y)) is None # I**1 or I**0
  1683. assert ask(Q.real(x**y), Q.real(x) & Q.imaginary(y)) is None # could be exp(2*pi*I) or 2**I
  1684. assert ask(Q.real(x**0), Q.imaginary(x)) is True
  1685. assert ask(Q.real(x**y), Q.real(x) & Q.integer(y)) is True
  1686. assert ask(Q.real(x**y), Q.positive(x) & Q.real(y)) is True
  1687. assert ask(Q.real(x**y), Q.real(x) & Q.rational(y)) is None
  1688. assert ask(Q.real(x**y), Q.imaginary(x) & Q.integer(y)) is None
  1689. assert ask(Q.real(x**y), Q.imaginary(x) & Q.odd(y)) is False
  1690. assert ask(Q.real(x**y), Q.imaginary(x) & Q.even(y)) is True
  1691. 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
  1692. assert ask(Q.real(x**(y/z)), Q.real(x) & Q.rational(y/z) & Q.even(z) & Q.negative(x)) is False
  1693. assert ask(Q.real(x**(y/z)), Q.real(x) & Q.integer(y/z)) is True
  1694. assert ask(Q.real(x**(y/z)), Q.real(x) & Q.real(y/z) & Q.positive(x)) is True
  1695. assert ask(Q.real(x**(y/z)), Q.real(x) & Q.real(y/z) & Q.negative(x)) is False
  1696. assert ask(Q.real((-I)**i), Q.imaginary(i)) is True
  1697. assert ask(Q.real(I**i), Q.imaginary(i)) is True
  1698. assert ask(Q.real(i**i), Q.imaginary(i)) is None # i might be 2*I
  1699. assert ask(Q.real(x**i), Q.imaginary(i)) is None # x could be 0
  1700. assert ask(Q.real(x**(I*pi/log(x))), Q.real(x)) is True
  1701. @_both_exp_pow
  1702. def test_real_functions():
  1703. # trigonometric functions
  1704. assert ask(Q.real(sin(x))) is None
  1705. assert ask(Q.real(cos(x))) is None
  1706. assert ask(Q.real(sin(x)), Q.real(x)) is True
  1707. assert ask(Q.real(cos(x)), Q.real(x)) is True
  1708. # exponential function
  1709. assert ask(Q.real(exp(x))) is None
  1710. assert ask(Q.real(exp(x)), Q.real(x)) is True
  1711. assert ask(Q.real(x + exp(x)), Q.real(x)) is True
  1712. assert ask(Q.real(exp(2*pi*I, evaluate=False))) is True
  1713. assert ask(Q.real(exp(pi*I, evaluate=False))) is True
  1714. assert ask(Q.real(exp(pi*I/2, evaluate=False))) is False
  1715. # logarithm
  1716. assert ask(Q.real(log(I))) is False
  1717. assert ask(Q.real(log(2*I))) is False
  1718. assert ask(Q.real(log(I + 1))) is False
  1719. assert ask(Q.real(log(x)), Q.complex(x)) is None
  1720. assert ask(Q.real(log(x)), Q.imaginary(x)) is False
  1721. 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)
  1722. assert ask(Q.real(log(exp(x))), Q.complex(x)) is None
  1723. eq = Pow(exp(2*pi*I*x, evaluate=False), x, evaluate=False)
  1724. assert ask(Q.real(eq), Q.integer(x)) is True
  1725. assert ask(Q.real(exp(x)**x), Q.imaginary(x)) is True
  1726. assert ask(Q.real(exp(x)**x), Q.complex(x)) is None
  1727. # Q.complexes
  1728. assert ask(Q.real(re(x))) is True
  1729. assert ask(Q.real(im(x))) is True
  1730. def test_matrix():
  1731. # hermitian
  1732. assert ask(Q.hermitian(Matrix([[2, 2 + I, 4], [2 - I, 3, I], [4, -I, 1]]))) == True
  1733. assert ask(Q.hermitian(Matrix([[2, 2 + I, 4], [2 + I, 3, I], [4, -I, 1]]))) == False
  1734. z = symbols('z', complex=True)
  1735. assert ask(Q.hermitian(Matrix([[2, 2 + I, z], [2 - I, 3, I], [4, -I, 1]]))) == None
  1736. assert ask(Q.hermitian(SparseMatrix(((25, 15, -5), (15, 18, 0), (-5, 0, 11))))) == True
  1737. assert ask(Q.hermitian(SparseMatrix(((25, 15, -5), (15, I, 0), (-5, 0, 11))))) == False
  1738. assert ask(Q.hermitian(SparseMatrix(((25, 15, -5), (15, z, 0), (-5, 0, 11))))) == None
  1739. # antihermitian
  1740. A = Matrix([[0, -2 - I, 0], [2 - I, 0, -I], [0, -I, 0]])
  1741. B = Matrix([[-I, 2 + I, 0], [-2 + I, 0, 2 + I], [0, -2 + I, -I]])
  1742. assert ask(Q.antihermitian(A)) is True
  1743. assert ask(Q.antihermitian(B)) is True
  1744. assert ask(Q.antihermitian(A**2)) is False
  1745. C = (B**3)
  1746. C.simplify()
  1747. assert ask(Q.antihermitian(C)) is True
  1748. _A = Matrix([[0, -2 - I, 0], [z, 0, -I], [0, -I, 0]])
  1749. assert ask(Q.antihermitian(_A)) is None
  1750. @_both_exp_pow
  1751. def test_algebraic():
  1752. assert ask(Q.algebraic(x)) is None
  1753. assert ask(Q.algebraic(I)) is True
  1754. assert ask(Q.algebraic(2*I)) is True
  1755. assert ask(Q.algebraic(I/3)) is True
  1756. assert ask(Q.algebraic(sqrt(7))) is True
  1757. assert ask(Q.algebraic(2*sqrt(7))) is True
  1758. assert ask(Q.algebraic(sqrt(7)/3)) is True
  1759. assert ask(Q.algebraic(I*sqrt(3))) is True
  1760. assert ask(Q.algebraic(sqrt(1 + I*sqrt(3)))) is True
  1761. assert ask(Q.algebraic(1 + I*sqrt(3)**Rational(17, 31))) is True
  1762. assert ask(Q.algebraic(1 + I*sqrt(3)**(17/pi))) is False
  1763. for f in [exp, sin, tan, asin, atan, cos]:
  1764. assert ask(Q.algebraic(f(7))) is False
  1765. assert ask(Q.algebraic(f(7, evaluate=False))) is False
  1766. assert ask(Q.algebraic(f(0, evaluate=False))) is True
  1767. assert ask(Q.algebraic(f(x)), Q.algebraic(x)) is None
  1768. assert ask(Q.algebraic(f(x)), Q.algebraic(x) & Q.nonzero(x)) is False
  1769. for g in [log, acos]:
  1770. assert ask(Q.algebraic(g(7))) is False
  1771. assert ask(Q.algebraic(g(7, evaluate=False))) is False
  1772. assert ask(Q.algebraic(g(1, evaluate=False))) is True
  1773. assert ask(Q.algebraic(g(x)), Q.algebraic(x)) is None
  1774. assert ask(Q.algebraic(g(x)), Q.algebraic(x) & Q.nonzero(x - 1)) is False
  1775. for h in [cot, acot]:
  1776. assert ask(Q.algebraic(h(7))) is False
  1777. assert ask(Q.algebraic(h(7, evaluate=False))) is False
  1778. assert ask(Q.algebraic(h(x)), Q.algebraic(x)) is False
  1779. assert ask(Q.algebraic(sqrt(sin(7)))) is False
  1780. assert ask(Q.algebraic(sqrt(y + I*sqrt(7)))) is None
  1781. assert ask(Q.algebraic(2.47)) is True
  1782. assert ask(Q.algebraic(x), Q.transcendental(x)) is False
  1783. assert ask(Q.transcendental(x), Q.algebraic(x)) is False
  1784. def test_global():
  1785. """Test ask with global assumptions"""
  1786. assert ask(Q.integer(x)) is None
  1787. global_assumptions.add(Q.integer(x))
  1788. assert ask(Q.integer(x)) is True
  1789. global_assumptions.clear()
  1790. assert ask(Q.integer(x)) is None
  1791. def test_custom_context():
  1792. """Test ask with custom assumptions context"""
  1793. assert ask(Q.integer(x)) is None
  1794. local_context = AssumptionsContext()
  1795. local_context.add(Q.integer(x))
  1796. assert ask(Q.integer(x), context=local_context) is True
  1797. assert ask(Q.integer(x)) is None
  1798. def test_functions_in_assumptions():
  1799. assert ask(Q.negative(x), Q.real(x) >> Q.positive(x)) is False
  1800. assert ask(Q.negative(x), Equivalent(Q.real(x), Q.positive(x))) is False
  1801. assert ask(Q.negative(x), Xor(Q.real(x), Q.negative(x))) is False
  1802. def test_composite_ask():
  1803. assert ask(Q.negative(x) & Q.integer(x),
  1804. assumptions=Q.real(x) >> Q.positive(x)) is False
  1805. def test_composite_proposition():
  1806. assert ask(True) is True
  1807. assert ask(False) is False
  1808. assert ask(~Q.negative(x), Q.positive(x)) is True
  1809. assert ask(~Q.real(x), Q.commutative(x)) is None
  1810. assert ask(Q.negative(x) & Q.integer(x), Q.positive(x)) is False
  1811. assert ask(Q.negative(x) & Q.integer(x)) is None
  1812. assert ask(Q.real(x) | Q.integer(x), Q.positive(x)) is True
  1813. assert ask(Q.real(x) | Q.integer(x)) is None
  1814. assert ask(Q.real(x) >> Q.positive(x), Q.negative(x)) is False
  1815. assert ask(Implies(
  1816. Q.real(x), Q.positive(x), evaluate=False), Q.negative(x)) is False
  1817. assert ask(Implies(Q.real(x), Q.positive(x), evaluate=False)) is None
  1818. assert ask(Equivalent(Q.integer(x), Q.even(x)), Q.even(x)) is True
  1819. assert ask(Equivalent(Q.integer(x), Q.even(x))) is None
  1820. assert ask(Equivalent(Q.positive(x), Q.integer(x)), Q.integer(x)) is None
  1821. assert ask(Q.real(x) | Q.integer(x), Q.real(x) | Q.integer(x)) is True
  1822. def test_tautology():
  1823. assert ask(Q.real(x) | ~Q.real(x)) is True
  1824. assert ask(Q.real(x) & ~Q.real(x)) is False
  1825. def test_composite_assumptions():
  1826. assert ask(Q.real(x), Q.real(x) & Q.real(y)) is True
  1827. assert ask(Q.positive(x), Q.positive(x) | Q.positive(y)) is None
  1828. assert ask(Q.positive(x), Q.real(x) >> Q.positive(y)) is None
  1829. assert ask(Q.real(x), ~(Q.real(x) >> Q.real(y))) is True
  1830. def test_key_extensibility():
  1831. """test that you can add keys to the ask system at runtime"""
  1832. # make sure the key is not defined
  1833. raises(AttributeError, lambda: ask(Q.my_key(x)))
  1834. # Old handler system
  1835. class MyAskHandler(AskHandler):
  1836. @staticmethod
  1837. def Symbol(expr, assumptions):
  1838. return True
  1839. try:
  1840. with warns_deprecated_sympy():
  1841. register_handler('my_key', MyAskHandler)
  1842. with warns_deprecated_sympy():
  1843. assert ask(Q.my_key(x)) is True
  1844. with warns_deprecated_sympy():
  1845. assert ask(Q.my_key(x + 1)) is None
  1846. finally:
  1847. # We have to disable the stacklevel testing here because this raises
  1848. # the warning twice from two different places
  1849. with warns_deprecated_sympy():
  1850. remove_handler('my_key', MyAskHandler)
  1851. del Q.my_key
  1852. raises(AttributeError, lambda: ask(Q.my_key(x)))
  1853. # New handler system
  1854. class MyPredicate(Predicate):
  1855. pass
  1856. try:
  1857. Q.my_key = MyPredicate()
  1858. @Q.my_key.register(Symbol)
  1859. def _(expr, assumptions):
  1860. return True
  1861. assert ask(Q.my_key(x)) is True
  1862. assert ask(Q.my_key(x+1)) is None
  1863. finally:
  1864. del Q.my_key
  1865. raises(AttributeError, lambda: ask(Q.my_key(x)))
  1866. def test_type_extensibility():
  1867. """test that new types can be added to the ask system at runtime
  1868. """
  1869. from sympy.core import Basic
  1870. class MyType(Basic):
  1871. pass
  1872. @Q.prime.register(MyType)
  1873. def _(expr, assumptions):
  1874. return True
  1875. assert ask(Q.prime(MyType())) is True
  1876. def test_single_fact_lookup():
  1877. known_facts = And(Implies(Q.integer, Q.rational),
  1878. Implies(Q.rational, Q.real),
  1879. Implies(Q.real, Q.complex))
  1880. known_facts_keys = {Q.integer, Q.rational, Q.real, Q.complex}
  1881. known_facts_cnf = to_cnf(known_facts)
  1882. mapping = single_fact_lookup(known_facts_keys, known_facts_cnf)
  1883. assert mapping[Q.rational] == {Q.real, Q.rational, Q.complex}
  1884. def test_generate_known_facts_dict():
  1885. known_facts = And(Implies(Q.integer(x), Q.rational(x)),
  1886. Implies(Q.rational(x), Q.real(x)),
  1887. Implies(Q.real(x), Q.complex(x)))
  1888. known_facts_keys = {Q.integer(x), Q.rational(x), Q.real(x), Q.complex(x)}
  1889. assert generate_known_facts_dict(known_facts_keys, known_facts) == \
  1890. {Q.complex: ({Q.complex}, set()),
  1891. Q.integer: ({Q.complex, Q.integer, Q.rational, Q.real}, set()),
  1892. Q.rational: ({Q.complex, Q.rational, Q.real}, set()),
  1893. Q.real: ({Q.complex, Q.real}, set())}
  1894. @slow
  1895. def test_known_facts_consistent():
  1896. """"Test that ask_generated.py is up-to-date"""
  1897. x = Symbol('x')
  1898. fact = get_known_facts(x)
  1899. # test cnf clauses of fact between unary predicates
  1900. cnf = CNF.to_CNF(fact)
  1901. clauses = set()
  1902. for cl in cnf.clauses:
  1903. clauses.add(frozenset(Literal(lit.arg.function, lit.is_Not) for lit in sorted(cl, key=str)))
  1904. assert get_all_known_facts() == clauses
  1905. # test dictionary of fact between unary predicates
  1906. keys = [pred(x) for pred in get_known_facts_keys()]
  1907. mapping = generate_known_facts_dict(keys, fact)
  1908. assert get_known_facts_dict() == mapping
  1909. def test_Add_queries():
  1910. assert ask(Q.prime(12345678901234567890 + (cos(1)**2 + sin(1)**2))) is True
  1911. assert ask(Q.even(Add(S(2), S(2), evaluate=0))) is True
  1912. assert ask(Q.prime(Add(S(2), S(2), evaluate=0))) is False
  1913. assert ask(Q.integer(Add(S(2), S(2), evaluate=0))) is True
  1914. def test_positive_assuming():
  1915. with assuming(Q.positive(x + 1)):
  1916. assert not ask(Q.positive(x))
  1917. def test_issue_5421():
  1918. raises(TypeError, lambda: ask(pi/log(x), Q.real))
  1919. def test_issue_3906():
  1920. raises(TypeError, lambda: ask(Q.positive))
  1921. def test_issue_5833():
  1922. assert ask(Q.positive(log(x)**2), Q.positive(x)) is None
  1923. assert ask(~Q.negative(log(x)**2), Q.positive(x)) is True
  1924. def test_issue_6732():
  1925. raises(ValueError, lambda: ask(Q.positive(x), Q.positive(x) & Q.negative(x)))
  1926. raises(ValueError, lambda: ask(Q.negative(x), Q.positive(x) & Q.negative(x)))
  1927. def test_issue_7246():
  1928. assert ask(Q.positive(atan(p)), Q.positive(p)) is True
  1929. assert ask(Q.positive(atan(p)), Q.negative(p)) is False
  1930. assert ask(Q.positive(atan(p)), Q.zero(p)) is False
  1931. assert ask(Q.positive(atan(x))) is None
  1932. assert ask(Q.positive(asin(p)), Q.positive(p)) is None
  1933. assert ask(Q.positive(asin(p)), Q.zero(p)) is None
  1934. assert ask(Q.positive(asin(Rational(1, 7)))) is True
  1935. assert ask(Q.positive(asin(x)), Q.positive(x) & Q.nonpositive(x - 1)) is True
  1936. assert ask(Q.positive(asin(x)), Q.negative(x) & Q.nonnegative(x + 1)) is False
  1937. assert ask(Q.positive(acos(p)), Q.positive(p)) is None
  1938. assert ask(Q.positive(acos(Rational(1, 7)))) is True
  1939. assert ask(Q.positive(acos(x)), Q.nonnegative(x + 1) & Q.nonpositive(x - 1)) is True
  1940. assert ask(Q.positive(acos(x)), Q.nonnegative(x - 1)) is None
  1941. assert ask(Q.positive(acot(x)), Q.positive(x)) is True
  1942. assert ask(Q.positive(acot(x)), Q.real(x)) is True
  1943. assert ask(Q.positive(acot(x)), Q.imaginary(x)) is False
  1944. assert ask(Q.positive(acot(x))) is None
  1945. @XFAIL
  1946. def test_issue_7246_failing():
  1947. #Move this test to test_issue_7246 once
  1948. #the new assumptions module is improved.
  1949. assert ask(Q.positive(acos(x)), Q.zero(x)) is True
  1950. def test_check_old_assumption():
  1951. x = symbols('x', real=True)
  1952. assert ask(Q.real(x)) is True
  1953. assert ask(Q.imaginary(x)) is False
  1954. assert ask(Q.complex(x)) is True
  1955. x = symbols('x', imaginary=True)
  1956. assert ask(Q.real(x)) is False
  1957. assert ask(Q.imaginary(x)) is True
  1958. assert ask(Q.complex(x)) is True
  1959. x = symbols('x', complex=True)
  1960. assert ask(Q.real(x)) is None
  1961. assert ask(Q.complex(x)) is True
  1962. x = symbols('x', positive=True)
  1963. assert ask(Q.positive(x)) is True
  1964. assert ask(Q.negative(x)) is False
  1965. assert ask(Q.real(x)) is True
  1966. x = symbols('x', commutative=False)
  1967. assert ask(Q.commutative(x)) is False
  1968. x = symbols('x', negative=True)
  1969. assert ask(Q.positive(x)) is False
  1970. assert ask(Q.negative(x)) is True
  1971. x = symbols('x', nonnegative=True)
  1972. assert ask(Q.negative(x)) is False
  1973. assert ask(Q.positive(x)) is None
  1974. assert ask(Q.zero(x)) is None
  1975. x = symbols('x', finite=True)
  1976. assert ask(Q.finite(x)) is True
  1977. x = symbols('x', prime=True)
  1978. assert ask(Q.prime(x)) is True
  1979. assert ask(Q.composite(x)) is False
  1980. x = symbols('x', composite=True)
  1981. assert ask(Q.prime(x)) is False
  1982. assert ask(Q.composite(x)) is True
  1983. x = symbols('x', even=True)
  1984. assert ask(Q.even(x)) is True
  1985. assert ask(Q.odd(x)) is False
  1986. x = symbols('x', odd=True)
  1987. assert ask(Q.even(x)) is False
  1988. assert ask(Q.odd(x)) is True
  1989. x = symbols('x', nonzero=True)
  1990. assert ask(Q.nonzero(x)) is True
  1991. assert ask(Q.zero(x)) is False
  1992. x = symbols('x', zero=True)
  1993. assert ask(Q.zero(x)) is True
  1994. x = symbols('x', integer=True)
  1995. assert ask(Q.integer(x)) is True
  1996. x = symbols('x', rational=True)
  1997. assert ask(Q.rational(x)) is True
  1998. assert ask(Q.irrational(x)) is False
  1999. x = symbols('x', irrational=True)
  2000. assert ask(Q.irrational(x)) is True
  2001. assert ask(Q.rational(x)) is False
  2002. def test_issue_9636():
  2003. assert ask(Q.integer(1.0)) is False
  2004. assert ask(Q.prime(3.0)) is False
  2005. assert ask(Q.composite(4.0)) is False
  2006. assert ask(Q.even(2.0)) is False
  2007. assert ask(Q.odd(3.0)) is False
  2008. def test_autosimp_used_to_fail():
  2009. # See issue #9807
  2010. assert ask(Q.imaginary(0**I)) is None
  2011. assert ask(Q.imaginary(0**(-I))) is None
  2012. assert ask(Q.real(0**I)) is None
  2013. assert ask(Q.real(0**(-I))) is None
  2014. def test_custom_AskHandler():
  2015. from sympy.logic.boolalg import conjuncts
  2016. # Old handler system
  2017. class MersenneHandler(AskHandler):
  2018. @staticmethod
  2019. def Integer(expr, assumptions):
  2020. if ask(Q.integer(log(expr + 1, 2))):
  2021. return True
  2022. @staticmethod
  2023. def Symbol(expr, assumptions):
  2024. if expr in conjuncts(assumptions):
  2025. return True
  2026. try:
  2027. with warns_deprecated_sympy():
  2028. register_handler('mersenne', MersenneHandler)
  2029. n = Symbol('n', integer=True)
  2030. with warns_deprecated_sympy():
  2031. assert ask(Q.mersenne(7))
  2032. with warns_deprecated_sympy():
  2033. assert ask(Q.mersenne(n), Q.mersenne(n))
  2034. finally:
  2035. del Q.mersenne
  2036. # New handler system
  2037. class MersennePredicate(Predicate):
  2038. pass
  2039. try:
  2040. Q.mersenne = MersennePredicate()
  2041. @Q.mersenne.register(Integer)
  2042. def _(expr, assumptions):
  2043. if ask(Q.integer(log(expr + 1, 2))):
  2044. return True
  2045. @Q.mersenne.register(Symbol)
  2046. def _(expr, assumptions):
  2047. if expr in conjuncts(assumptions):
  2048. return True
  2049. assert ask(Q.mersenne(7))
  2050. assert ask(Q.mersenne(n), Q.mersenne(n))
  2051. finally:
  2052. del Q.mersenne
  2053. def test_polyadic_predicate():
  2054. class SexyPredicate(Predicate):
  2055. pass
  2056. try:
  2057. Q.sexyprime = SexyPredicate()
  2058. @Q.sexyprime.register(Integer, Integer)
  2059. def _(int1, int2, assumptions):
  2060. args = sorted([int1, int2])
  2061. if not all(ask(Q.prime(a), assumptions) for a in args):
  2062. return False
  2063. return args[1] - args[0] == 6
  2064. @Q.sexyprime.register(Integer, Integer, Integer)
  2065. def _(int1, int2, int3, assumptions):
  2066. args = sorted([int1, int2, int3])
  2067. if not all(ask(Q.prime(a), assumptions) for a in args):
  2068. return False
  2069. return args[2] - args[1] == 6 and args[1] - args[0] == 6
  2070. assert ask(Q.sexyprime(5, 11))
  2071. assert ask(Q.sexyprime(7, 13, 19))
  2072. finally:
  2073. del Q.sexyprime
  2074. def test_Predicate_handler_is_unique():
  2075. # Undefined predicate does not have a handler
  2076. assert Predicate('mypredicate').handler is None
  2077. # Handler of defined predicate is unique to the class
  2078. class MyPredicate(Predicate):
  2079. pass
  2080. mp1 = MyPredicate(Str('mp1'))
  2081. mp2 = MyPredicate(Str('mp2'))
  2082. assert mp1.handler is mp2.handler
  2083. def test_relational():
  2084. assert ask(Q.eq(x, 0), Q.zero(x))
  2085. assert not ask(Q.eq(x, 0), Q.nonzero(x))
  2086. assert not ask(Q.ne(x, 0), Q.zero(x))
  2087. assert ask(Q.ne(x, 0), Q.nonzero(x))