Remove legacy assumptions thus improving import time (#963)
[sympy.git] / sympy / core / tests / test_assumptions.py
blob4ee2d19f9a138acfd85ff85d2e5b998837024756
1 import py
2 from sympy.core import Symbol, S, Rational, Integer
3 from sympy.utilities.pytest import XFAIL
5 def test_symbol_unset():
6 x = Symbol('x',real=True, integer=True)
7 assert x.is_real == True
8 assert x.is_integer == True
9 assert x.is_imaginary == False
10 assert x.is_noninteger == False
12 def test_zero():
13 z = Integer(0)
14 assert z.is_commutative == True
15 assert z.is_integer == True
16 assert z.is_rational == True
17 assert z.is_real == True
18 assert z.is_complex == True
19 assert z.is_noninteger == False
20 assert z.is_irrational == False
21 assert z.is_imaginary == False
22 assert z.is_positive == False
23 assert z.is_negative == False
24 assert z.is_nonpositive == True
25 assert z.is_nonnegative == True
26 assert z.is_even == True
27 assert z.is_odd == False
28 assert z.is_bounded == True
29 assert z.is_unbounded == False
30 assert z.is_finite == False
31 assert z.is_infinitesimal == True
32 assert z.is_comparable == True
33 assert z.is_prime == False
34 assert z.is_composite == False
36 def test_one():
37 z = Integer(1)
38 assert z.is_commutative == True
39 assert z.is_integer == True
40 assert z.is_rational == True
41 assert z.is_real == True
42 assert z.is_complex == True
43 assert z.is_noninteger == False
44 assert z.is_irrational == False
45 assert z.is_imaginary == False
46 assert z.is_positive == True
47 assert z.is_negative == False
48 assert z.is_nonpositive == False
49 assert z.is_nonnegative == True
50 assert z.is_even == False
51 assert z.is_odd == True
52 assert z.is_bounded == True
53 assert z.is_unbounded == False
54 assert z.is_finite == True
55 assert z.is_infinitesimal == False
56 assert z.is_comparable == True
57 assert z.is_prime == True
58 assert z.is_composite == False
60 def test_negativeone():
61 z = Integer(-1)
62 assert z.is_commutative == True
63 assert z.is_integer == True
64 assert z.is_rational == True
65 assert z.is_real == True
66 assert z.is_complex == True
67 assert z.is_noninteger == False
68 assert z.is_irrational == False
69 assert z.is_imaginary == False
70 assert z.is_positive == False
71 assert z.is_negative == True
72 assert z.is_nonpositive == True
73 assert z.is_nonnegative == False
74 assert z.is_even == False
75 assert z.is_odd == True
76 assert z.is_bounded == True
77 assert z.is_unbounded == False
78 assert z.is_finite == True
79 assert z.is_infinitesimal == False
80 assert z.is_comparable == True
81 assert z.is_prime == False
82 assert z.is_composite == False
84 def test_infinity():
85 oo = S.Infinity
87 assert oo.is_commutative == True
88 assert oo.is_integer == None
89 assert oo.is_rational == None
90 assert oo.is_real == True
91 assert oo.is_complex == True
92 assert oo.is_noninteger == None
93 assert oo.is_irrational == None
94 assert oo.is_imaginary == False
95 assert oo.is_positive == True
96 assert oo.is_negative == False
97 assert oo.is_nonpositive == False
98 assert oo.is_nonnegative == True
99 assert oo.is_even == None
100 assert oo.is_odd == None
101 assert oo.is_bounded == False
102 assert oo.is_unbounded == True
103 assert oo.is_finite == False
104 assert oo.is_infinitesimal == False
105 assert oo.is_comparable == True
106 assert oo.is_prime == None
107 assert oo.is_composite == None
109 def test_neg_infinity():
110 mm = S.NegativeInfinity
112 assert mm.is_commutative == True
113 assert mm.is_integer == None
114 assert mm.is_rational == None
115 assert mm.is_real == True
116 assert mm.is_complex == True
117 assert mm.is_noninteger == None
118 assert mm.is_irrational == None
119 assert mm.is_imaginary == False
120 assert mm.is_positive == False
121 assert mm.is_negative == True
122 assert mm.is_nonpositive == True
123 assert mm.is_nonnegative == False
124 assert mm.is_even == None
125 assert mm.is_odd == None
126 assert mm.is_bounded == False
127 assert mm.is_unbounded == True
128 assert mm.is_finite == False
129 assert mm.is_infinitesimal == False
130 assert mm.is_comparable == True
131 assert mm.is_prime == False
132 assert mm.is_composite == False
134 def test_nan():
135 nan = S.NaN
137 assert nan.is_commutative == True
138 assert nan.is_integer == None
139 assert nan.is_rational == None
140 assert nan.is_real == None
141 assert nan.is_complex == None
142 assert nan.is_noninteger == None
143 assert nan.is_irrational == None
144 assert nan.is_imaginary == None
145 assert nan.is_positive == None
146 assert nan.is_negative == None
147 assert nan.is_nonpositive == None
148 assert nan.is_nonnegative == None
149 assert nan.is_even == None
150 assert nan.is_odd == None
151 assert nan.is_bounded == None
152 assert nan.is_unbounded == None
153 assert nan.is_finite == None
154 assert nan.is_infinitesimal == None
155 assert nan.is_comparable == False
156 assert nan.is_prime == None
157 assert nan.is_composite == None
159 def test_pos_rational():
160 r = Rational(3,4)
161 assert r.is_commutative == True
162 assert r.is_integer == False
163 assert r.is_rational == True
164 assert r.is_real == True
165 assert r.is_complex == True
166 assert r.is_noninteger == True
167 assert r.is_irrational == False
168 assert r.is_imaginary == False
169 assert r.is_positive == True
170 assert r.is_negative == False
171 assert r.is_nonpositive == False
172 assert r.is_nonnegative == True
173 assert r.is_even == False
174 assert r.is_odd == False
175 assert r.is_bounded == True
176 assert r.is_unbounded == False
177 assert r.is_finite == True
178 assert r.is_infinitesimal == False
179 assert r.is_comparable == True
180 assert r.is_prime == False
181 assert r.is_composite == False
183 r = Rational(1,4)
184 assert r.is_nonpositive == False
185 assert r.is_positive == True
186 assert r.is_negative == False
187 assert r.is_nonnegative == True
188 r = Rational(5,4)
189 assert r.is_negative == False
190 assert r.is_positive == True
191 assert r.is_nonpositive == False
192 assert r.is_nonnegative == True
193 r = Rational(5,3)
194 assert r.is_nonnegative == True
195 assert r.is_positive == True
196 assert r.is_negative == False
197 assert r.is_nonpositive == False
199 def test_neg_rational():
200 r = Rational(-3,4)
201 assert r.is_positive == False
202 assert r.is_nonpositive == True
203 assert r.is_negative == True
204 assert r.is_nonnegative == False
205 r = Rational(-1,4)
206 assert r.is_nonpositive == True
207 assert r.is_positive == False
208 assert r.is_negative == True
209 assert r.is_nonnegative == False
210 r = Rational(-5,4)
211 assert r.is_negative == True
212 assert r.is_positive == False
213 assert r.is_nonpositive == True
214 assert r.is_nonnegative == False
215 r = Rational(-5,3)
216 assert r.is_nonnegative == False
217 assert r.is_positive == False
218 assert r.is_negative == True
219 assert r.is_nonpositive == True
221 def test_pi():
222 z = S.Pi
223 assert z.is_commutative == True
224 assert z.is_integer == False
225 assert z.is_rational == False
226 assert z.is_real == True
227 assert z.is_complex == True
228 assert z.is_noninteger == True
229 assert z.is_irrational == True
230 assert z.is_imaginary == False
231 assert z.is_positive == True
232 assert z.is_negative == False
233 assert z.is_nonpositive == False
234 assert z.is_nonnegative == True
235 assert z.is_even == False
236 assert z.is_odd == False
237 assert z.is_bounded == True
238 assert z.is_unbounded == False
239 assert z.is_finite == True
240 assert z.is_infinitesimal == False
241 assert z.is_comparable == True
242 assert z.is_prime == False
243 assert z.is_composite == False
245 def test_E():
246 z = S.Exp1
247 assert z.is_commutative == True
248 assert z.is_integer == False
249 assert z.is_rational == False
250 assert z.is_real == True
251 assert z.is_complex == True
252 assert z.is_noninteger == True
253 assert z.is_irrational == True
254 assert z.is_imaginary == False
255 assert z.is_positive == True
256 assert z.is_negative == False
257 assert z.is_nonpositive == False
258 assert z.is_nonnegative == True
259 assert z.is_even == False
260 assert z.is_odd == False
261 assert z.is_bounded == True
262 assert z.is_unbounded == False
263 assert z.is_finite == True
264 assert z.is_infinitesimal == False
265 assert z.is_comparable == True
266 assert z.is_prime == False
267 assert z.is_composite == False
269 def test_I():
270 z = S.ImaginaryUnit
271 assert z.is_commutative == True
272 assert z.is_integer == False
273 assert z.is_rational == False
274 assert z.is_real == False
275 assert z.is_complex == True
276 assert z.is_noninteger == False
277 assert z.is_irrational == False
278 assert z.is_imaginary == True
279 assert z.is_positive == False
280 assert z.is_negative == False
281 assert z.is_nonpositive == False
282 assert z.is_nonnegative == False
283 assert z.is_even == False
284 assert z.is_odd == False
285 assert z.is_bounded == True
286 assert z.is_unbounded == False
287 assert z.is_finite == True
288 assert z.is_infinitesimal == False
289 assert z.is_comparable == None
290 assert z.is_prime == False
291 assert z.is_composite == False
293 def test_symbol_zero():
294 x = Symbol('x',zero=True)
295 assert x.is_positive == False
296 assert x.is_nonpositive == True
297 assert x.is_negative == False
298 assert x.is_nonnegative == True
299 assert x.is_zero == True
300 assert x.is_nonzero == False
302 def test_symbol_positive():
303 x = Symbol('x',positive=True)
304 assert x.is_positive == True
305 assert x.is_nonpositive == False
306 assert x.is_negative == False
307 assert x.is_nonnegative == True
308 assert x.is_zero == False
309 assert x.is_nonzero == True
311 def test_neg_symbol_positive():
312 x = -Symbol('x',positive=True)
313 assert x.is_positive == False
314 assert x.is_nonpositive == True
315 assert x.is_negative == True
316 assert x.is_nonnegative == False
318 def test_neg_symbol_positive2():
319 x = -Symbol('x',positive=True)
320 assert x.is_zero == False
321 assert x.is_nonzero == True
323 def test_symbol_nonpositive():
324 x = Symbol('x',nonpositive=True)
325 assert x.is_positive == False
326 assert x.is_nonpositive == True
327 assert x.is_negative == None
328 assert x.is_nonnegative == None
329 assert x.is_zero == None
330 assert x.is_nonzero == None
332 def test_neg_symbol_nonpositive():
333 x = -Symbol('x',nonpositive=True)
334 assert x.is_positive == None
335 assert x.is_nonpositive == None
336 assert x.is_negative == False
337 assert x.is_nonnegative == True
338 assert x.is_zero == None
339 assert x.is_nonzero == None
341 def test_prime_symbol():
342 x = Symbol('x', prime=True)
343 assert x.is_prime == True
344 assert x.is_integer == True
345 assert x.is_positive == True
346 assert x.is_negative == False
347 assert x.is_nonpositive == False
348 assert x.is_nonnegative == True
350 x = Symbol('x', prime=False)
351 assert x.is_prime == False
352 assert x.is_integer == None
353 assert x.is_positive == None
354 assert x.is_negative == None
355 assert x.is_nonpositive == None
356 assert x.is_nonnegative == None
358 def test_other_symbol():
359 x = Symbol('x', integer=True)
360 assert x.is_integer == True
361 assert x.is_real == True
363 x = Symbol('x', integer=True, nonnegative=True)
364 assert x.is_integer == True
365 assert x.is_nonnegative == True
366 assert x.is_negative == False
367 assert x.is_positive == None
369 x = Symbol('x', integer=True, nonpositive=True)
370 assert x.is_integer == True
371 assert x.is_nonpositive == True
372 assert x.is_positive == False
373 assert x.is_negative == None
375 x = Symbol('x', odd=True)
376 assert x.is_odd == True
377 assert x.is_even == False
378 assert x.is_integer == True
380 x = Symbol('x', even=True)
381 assert x.is_even == True
382 assert x.is_odd == False
383 assert x.is_integer == True
385 x = Symbol('x', integer=True, nonnegative=True)
386 assert x.is_integer == True
387 assert x.is_nonnegative == True
389 x = Symbol('x', integer=True, nonpositive=True)
390 assert x.is_integer == True
391 assert x.is_nonpositive == True
393 py.test.raises(AttributeError, "x.is_real = False")
396 def test_other_symbol_fail1():
397 # XXX x.is_even currently will be True
398 x = Symbol('x', odd=False)
399 assert x.is_odd == False
400 assert x.is_even == None
401 assert x.is_integer == None
403 def test_other_symbol_fail2():
404 # XXX x.is_odd currently will be True
405 x = Symbol('x', even=False)
406 assert x.is_even == False
407 assert x.is_odd == None
408 assert x.is_integer == None
411 def test_issue749():
412 a = Symbol('a', real=False)
414 assert a.is_real == False
415 assert a.is_integer == False
416 assert a.is_negative == False
417 assert a.is_positive == False
418 assert a.is_nonnegative == False
419 assert a.is_nonpositive == False
420 assert a.is_zero == False
423 def test_issue726():
424 """catch: hash instability"""
425 x = Symbol("x")
426 y = Symbol("y")
427 a1 = x+y
428 a2 = y+x
429 a2.is_comparable
431 h1 = hash(a1)
432 h2 = hash(a2)
433 assert h1 == h2
436 def test_hash_vs_typeinfo():
437 """seemingly different typeinfo, but in fact equal"""
438 x = Symbol('x')
440 # the following two are semantically equal
441 x1= Symbol('x', even=True)
442 x2= Symbol('x', integer=True, odd=False)
444 assert hash(x1) == hash(x2)
445 assert x1 == x2
448 @XFAIL # our __eq__ just does not look at it (yet)
449 def test_hash_vs_typeinfo_2():
450 """different typeinfo should mean !eq"""
451 # the following two are semantically different
452 x = Symbol('x')
453 x1= Symbol('x', even=True)
455 assert x != x1
458 def test_hash_vs_eq():
459 """catch: different hash for equal objects"""
460 a = 1 + S.Pi # important: do not fold it into a Number instance
461 ha= hash(a) # it should be Add/Mul/... to trigger the bug
463 a.is_positive # this uses .evalf() and deduces it is positive
464 assert a.is_positive == True
466 # be sure that hash stayed the same
467 assert ha == hash(a)
469 # now b should be the same expression
470 b = a.expand(trig=True)
471 hb= hash(b)
473 assert a == b
474 assert ha== hb