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
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
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():
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
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
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():
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
184 assert r
.is_nonpositive
== False
185 assert r
.is_positive
== True
186 assert r
.is_negative
== False
187 assert r
.is_nonnegative
== True
189 assert r
.is_negative
== False
190 assert r
.is_positive
== True
191 assert r
.is_nonpositive
== False
192 assert r
.is_nonnegative
== True
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():
201 assert r
.is_positive
== False
202 assert r
.is_nonpositive
== True
203 assert r
.is_negative
== True
204 assert r
.is_nonnegative
== False
206 assert r
.is_nonpositive
== True
207 assert r
.is_positive
== False
208 assert r
.is_negative
== True
209 assert r
.is_nonnegative
== False
211 assert r
.is_negative
== True
212 assert r
.is_positive
== False
213 assert r
.is_nonpositive
== True
214 assert r
.is_nonnegative
== False
216 assert r
.is_nonnegative
== False
217 assert r
.is_positive
== False
218 assert r
.is_negative
== True
219 assert r
.is_nonpositive
== True
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
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
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
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
424 """catch: hash instability"""
436 def test_hash_vs_typeinfo():
437 """seemingly different typeinfo, but in fact equal"""
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
)
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
453 x1
= Symbol('x', even
=True)
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
469 # now b should be the same expression
470 b
= a
.expand(trig
=True)