1import pytest 2 3from diofant import (Dummy, E, Float, GoldenRatio, I, Integer, Mod, Mul, Pow, 4 Rational, Symbol, Wild, asin, cbrt, exp, false, log, nan, 5 oo, pi, simplify, sin, sqrt, zoo) 6from diofant.core.facts import InconsistentAssumptions 7 8 9__all__ = () 10 11 12def test_symbol_unset(): 13 x = Symbol('x', extended_real=True, integer=True) 14 assert x.is_extended_real is True 15 assert x.is_integer is True 16 assert x.is_imaginary is None 17 assert x.is_noninteger is False 18 assert x.is_number is False 19 20 21def test_zero(): 22 z = Integer(0) 23 assert z.is_commutative is True 24 assert z.is_integer is True 25 assert z.is_rational is True 26 assert z.is_algebraic is True 27 assert z.is_transcendental is False 28 assert z.is_extended_real is True 29 assert z.is_complex is True 30 assert z.is_noninteger is False 31 assert z.is_irrational is False 32 assert z.is_imaginary is True 33 assert z.is_positive is False 34 assert z.is_negative is False 35 assert z.is_nonpositive is True 36 assert z.is_nonnegative is True 37 assert z.is_even is True 38 assert z.is_odd is False 39 assert z.is_finite is True 40 assert z.is_infinite is False 41 assert z.is_comparable is True 42 assert z.is_prime is False 43 assert z.is_composite is False 44 assert z.is_number is True 45 46 47def test_one(): 48 z = Integer(1) 49 assert z.is_commutative is True 50 assert z.is_integer is True 51 assert z.is_rational is True 52 assert z.is_algebraic is True 53 assert z.is_transcendental is False 54 assert z.is_extended_real is True 55 assert z.is_complex is True 56 assert z.is_noninteger is False 57 assert z.is_irrational is False 58 assert z.is_imaginary is False 59 assert z.is_positive is True 60 assert z.is_negative is False 61 assert z.is_nonpositive is False 62 assert z.is_nonnegative is True 63 assert z.is_even is False 64 assert z.is_odd is True 65 assert z.is_finite is True 66 assert z.is_infinite is False 67 assert z.is_comparable is True 68 assert z.is_prime is False 69 assert z.is_number is True 70 assert z.is_composite is False # issue sympy/sympy#8807 71 72 73def test_negativeone(): 74 z = Integer(-1) 75 assert z.is_commutative is True 76 assert z.is_integer is True 77 assert z.is_rational is True 78 assert z.is_algebraic is True 79 assert z.is_transcendental is False 80 assert z.is_extended_real is True 81 assert z.is_complex is True 82 assert z.is_noninteger is False 83 assert z.is_irrational is False 84 assert z.is_imaginary is False 85 assert z.is_positive is False 86 assert z.is_negative is True 87 assert z.is_nonpositive is True 88 assert z.is_nonnegative is False 89 assert z.is_even is False 90 assert z.is_odd is True 91 assert z.is_finite is True 92 assert z.is_infinite is False 93 assert z.is_comparable is True 94 assert z.is_prime is False 95 assert z.is_composite is False 96 assert z.is_number is True 97 98 99def test_infinity(): 100 assert oo.is_commutative is True 101 assert oo.is_integer is False 102 assert oo.is_rational is False 103 assert oo.is_algebraic is False 104 assert oo.is_transcendental is False 105 assert oo.is_extended_real is True 106 assert oo.is_complex is False 107 assert oo.is_noninteger is False 108 assert oo.is_irrational is False 109 assert oo.is_imaginary is False 110 assert oo.is_positive is True 111 assert oo.is_negative is False 112 assert oo.is_nonpositive is False 113 assert oo.is_nonnegative is True 114 assert oo.is_even is False 115 assert oo.is_odd is False 116 assert oo.is_finite is False 117 assert oo.is_infinite is True 118 assert oo.is_comparable is True 119 assert oo.is_prime is False 120 assert oo.is_composite is False 121 assert oo.is_number is True 122 assert oo.is_zero is False 123 assert oo.is_nonzero is True # issue sympy/sympy#21107 124 125 126def test_neg_infinity(): 127 mm = -oo 128 129 assert mm.is_commutative is True 130 assert mm.is_integer is False 131 assert mm.is_rational is False 132 assert mm.is_algebraic is False 133 assert mm.is_transcendental is False 134 assert mm.is_extended_real is True 135 assert mm.is_complex is False 136 assert mm.is_noninteger is False 137 assert mm.is_irrational is False 138 assert mm.is_imaginary is False 139 assert mm.is_positive is False 140 assert mm.is_negative is True 141 assert mm.is_nonpositive is True 142 assert mm.is_nonnegative is False 143 assert mm.is_even is False 144 assert mm.is_odd is False 145 assert mm.is_finite is False 146 assert mm.is_infinite is True 147 assert mm.is_comparable is True 148 assert mm.is_prime is False 149 assert mm.is_composite is False 150 assert mm.is_number is True 151 152 153def test_zoo(): 154 assert zoo.is_complex is False 155 assert zoo.is_real is False 156 assert zoo.is_prime is False 157 assert zoo.is_infinite 158 159 160def test_nan(): 161 assert nan.is_commutative is True 162 assert nan.is_integer is False 163 assert nan.is_rational is False 164 assert nan.is_algebraic is False 165 assert nan.is_transcendental is False 166 assert nan.is_extended_real is None 167 assert nan.is_complex is False 168 assert nan.is_noninteger is False 169 assert nan.is_irrational is False 170 assert nan.is_imaginary is False 171 assert nan.is_positive is None 172 assert nan.is_negative is None 173 assert nan.is_nonpositive is None 174 assert nan.is_nonnegative is None 175 assert nan.is_even is False 176 assert nan.is_odd is False 177 assert nan.is_finite is False 178 assert nan.is_infinite is None 179 assert nan.is_comparable is False 180 assert nan.is_prime is False 181 assert nan.is_composite is False 182 assert nan.is_number is True 183 184 185def test_pos_rational(): 186 r = Rational(3, 4) 187 assert r.is_commutative is True 188 assert r.is_integer is False 189 assert r.is_rational is True 190 assert r.is_algebraic is True 191 assert r.is_transcendental is False 192 assert r.is_extended_real is True 193 assert r.is_complex is True 194 assert r.is_noninteger is True 195 assert r.is_irrational is False 196 assert r.is_imaginary is False 197 assert r.is_positive is True 198 assert r.is_negative is False 199 assert r.is_nonpositive is False 200 assert r.is_nonnegative is True 201 assert r.is_even is False 202 assert r.is_odd is False 203 assert r.is_finite is True 204 assert r.is_infinite is False 205 assert r.is_comparable is True 206 assert r.is_prime is False 207 assert r.is_composite is False 208 209 r = Rational(1, 4) 210 assert r.is_nonpositive is False 211 assert r.is_positive is True 212 assert r.is_negative is False 213 assert r.is_nonnegative is True 214 r = Rational(5, 4) 215 assert r.is_negative is False 216 assert r.is_positive is True 217 assert r.is_nonpositive is False 218 assert r.is_nonnegative is True 219 r = Rational(5, 3) 220 assert r.is_nonnegative is True 221 assert r.is_positive is True 222 assert r.is_negative is False 223 assert r.is_nonpositive is False 224 225 226def test_neg_rational(): 227 r = Rational(-3, 4) 228 assert r.is_positive is False 229 assert r.is_nonpositive is True 230 assert r.is_negative is True 231 assert r.is_nonnegative is False 232 r = Rational(-1, 4) 233 assert r.is_nonpositive is True 234 assert r.is_positive is False 235 assert r.is_negative is True 236 assert r.is_nonnegative is False 237 r = Rational(-5, 4) 238 assert r.is_negative is True 239 assert r.is_positive is False 240 assert r.is_nonpositive is True 241 assert r.is_nonnegative is False 242 r = Rational(-5, 3) 243 assert r.is_nonnegative is False 244 assert r.is_positive is False 245 assert r.is_negative is True 246 assert r.is_nonpositive is True 247 248 249def test_pi(): 250 z = pi 251 assert z.is_commutative is True 252 assert z.is_integer is False 253 assert z.is_rational is False 254 assert z.is_algebraic is False 255 assert z.is_transcendental is True 256 assert z.is_extended_real is True 257 assert z.is_complex is True 258 assert z.is_noninteger is True 259 assert z.is_irrational is True 260 assert z.is_imaginary is False 261 assert z.is_positive is True 262 assert z.is_negative is False 263 assert z.is_nonpositive is False 264 assert z.is_nonnegative is True 265 assert z.is_even is False 266 assert z.is_odd is False 267 assert z.is_finite is True 268 assert z.is_infinite is False 269 assert z.is_comparable is True 270 assert z.is_prime is False 271 assert z.is_composite is False 272 273 274def test_E(): 275 z = E 276 assert z.is_commutative is True 277 assert z.is_integer is False 278 assert z.is_rational is False 279 assert z.is_algebraic is False 280 assert z.is_transcendental is True 281 assert z.is_extended_real is True 282 assert z.is_complex is True 283 assert z.is_noninteger is True 284 assert z.is_irrational is True 285 assert z.is_imaginary is False 286 assert z.is_positive is True 287 assert z.is_negative is False 288 assert z.is_nonpositive is False 289 assert z.is_nonnegative is True 290 assert z.is_even is False 291 assert z.is_odd is False 292 assert z.is_finite is True 293 assert z.is_infinite is False 294 assert z.is_comparable is True 295 assert z.is_prime is False 296 assert z.is_composite is False 297 298 299def test_I(): 300 z = I 301 assert z.is_commutative is True 302 assert z.is_integer is False 303 assert z.is_rational is False 304 assert z.is_algebraic is True 305 assert z.is_transcendental is False 306 assert z.is_extended_real is False 307 assert z.is_complex is True 308 assert z.is_noninteger is False 309 assert z.is_irrational is False 310 assert z.is_imaginary is True 311 assert z.is_positive is False 312 assert z.is_negative is False 313 assert z.is_nonpositive is False 314 assert z.is_nonnegative is False 315 assert z.is_even is False 316 assert z.is_odd is False 317 assert z.is_finite is True 318 assert z.is_infinite is False 319 assert z.is_comparable is False 320 assert z.is_prime is False 321 assert z.is_composite is False 322 323 324def test_symbol_real(): 325 # issue sympy/sympy#3848 326 a = Symbol('a', extended_real=False) 327 328 assert a.is_extended_real is False 329 assert a.is_integer is False 330 assert a.is_negative is False 331 assert a.is_positive is False 332 assert a.is_nonnegative is False 333 assert a.is_nonpositive is False 334 assert a.is_nonzero is True 335 336 337def test_symbol_zero(): 338 x = Symbol('x', zero=True) 339 assert x.is_positive is False 340 assert x.is_nonpositive 341 assert x.is_negative is False 342 assert x.is_nonnegative 343 assert x.is_zero is True 344 assert x.is_nonzero is False 345 assert x.is_finite is True 346 347 # issue sympy/sympy#9165 348 f = Symbol('f', finite=False) 349 assert 0/x == nan 350 assert 0*(1/x) == nan 351 assert 0*f == nan 352 353 354def test_symbol_positive(): 355 x = Symbol('x', positive=True) 356 assert x.is_positive is True 357 assert x.is_nonpositive is False 358 assert x.is_negative is False 359 assert x.is_nonnegative is True 360 assert x.is_zero is False 361 assert x.is_nonzero is True 362 363 364def test_neg_symbol_positive(): 365 x = -Symbol('x', positive=True) 366 assert x.is_positive is False 367 assert x.is_nonpositive is True 368 assert x.is_negative is True 369 assert x.is_nonnegative is False 370 assert x.is_zero is False 371 assert x.is_nonzero is True 372 373 374def test_symbol_nonpositive(): 375 x = Symbol('x', nonpositive=True) 376 assert x.is_positive is False 377 assert x.is_nonpositive is True 378 assert x.is_negative is None 379 assert x.is_nonnegative is None 380 assert x.is_zero is None 381 assert x.is_nonzero is None 382 383 384def test_neg_symbol_nonpositive(): 385 x = -Symbol('x', nonpositive=True) 386 assert x.is_positive is None 387 assert x.is_nonpositive is None 388 assert x.is_negative is False 389 assert x.is_nonnegative is True 390 assert x.is_zero is None 391 assert x.is_nonzero is None 392 393 394def test_symbol_falsepositive(): 395 x = Symbol('x', positive=False) 396 assert x.is_positive is False 397 assert x.is_nonpositive is None 398 assert x.is_negative is None 399 assert x.is_nonnegative is None 400 assert x.is_zero is None 401 assert x.is_nonzero is None 402 403 404def test_neg_symbol_falsepositive(): 405 x = -Symbol('x', positive=False) 406 assert x.is_positive is None 407 assert x.is_nonpositive is None 408 assert x.is_negative is False 409 assert x.is_nonnegative is None 410 assert x.is_zero is None 411 assert x.is_nonzero is None 412 413 414def test_symbol_falsepositive_real(): 415 x = Symbol('x', positive=False, extended_real=True) 416 assert x.is_positive is False 417 assert x.is_nonpositive is True 418 assert x.is_negative is None 419 assert x.is_nonnegative is None 420 assert x.is_zero is None 421 assert x.is_nonzero is None 422 423 424def test_neg_symbol_falsepositive_real(): 425 x = -Symbol('x', positive=False, extended_real=True) 426 assert x.is_positive is None 427 assert x.is_nonpositive is None 428 assert x.is_negative is False 429 assert x.is_nonnegative is True 430 assert x.is_zero is None 431 assert x.is_nonzero is None 432 433 434def test_symbol_falsenonnegative(): 435 x = Symbol('x', nonnegative=False) 436 assert x.is_positive is False 437 assert x.is_nonpositive is None 438 assert x.is_negative is None 439 assert x.is_nonnegative is False 440 assert x.is_zero is False 441 assert x.is_nonzero is True 442 443 444def test_neg_symbol_falsenonnegative(): 445 x = -Symbol('x', nonnegative=False) 446 assert x.is_positive is None 447 assert x.is_negative is False 448 assert x.is_nonnegative is None 449 assert x.is_zero is False 450 assert x.is_nonzero is True 451 452 453@pytest.mark.xfail 454def test_neg_symbol_falsenonnegative_xfail(): 455 x = -Symbol('x', nonnegative=False) 456 assert x.is_nonpositive is False 457 458 459def test_symbol_falsenonnegative_real(): 460 x = Symbol('x', nonnegative=False, extended_real=True) 461 assert x.is_positive is False 462 assert x.is_nonpositive is True 463 assert x.is_negative is True 464 assert x.is_nonnegative is False 465 assert x.is_zero is False 466 assert x.is_nonzero is True 467 468 469def test_neg_symbol_falsenonnegative_real(): 470 x = -Symbol('x', nonnegative=False, extended_real=True) 471 assert x.is_positive is True 472 assert x.is_nonpositive is False 473 assert x.is_negative is False 474 assert x.is_nonnegative is True 475 assert x.is_zero is False 476 assert x.is_nonzero is True 477 478 479def test_prime(): 480 assert Integer(-1).is_prime is False 481 assert Integer(-2).is_prime is False 482 assert Integer(-4).is_prime is False 483 assert Integer(0).is_prime is False 484 assert Integer(1).is_prime is False 485 assert Integer(2).is_prime is True 486 assert Integer(17).is_prime is True 487 assert Integer(4).is_prime is False 488 489 490def test_composite(): 491 assert Integer(-1).is_composite is False 492 assert Integer(-2).is_composite is False 493 assert Integer(-4).is_composite is False 494 assert Integer(0).is_composite is False 495 assert Integer(2).is_composite is False 496 assert Integer(17).is_composite is False 497 assert Integer(4).is_composite is True 498 499 500def test_prime_symbol(): 501 x = Symbol('x', prime=True) 502 assert x.is_prime is True 503 assert x.is_integer is True 504 assert x.is_positive is True 505 assert x.is_negative is False 506 assert x.is_nonpositive is False 507 assert x.is_nonnegative is True 508 509 x = Symbol('x', prime=False) 510 assert x.is_prime is False 511 assert x.is_integer is None 512 assert x.is_positive is None 513 assert x.is_negative is None 514 assert x.is_nonpositive is None 515 assert x.is_nonnegative is None 516 517 518def test_symbol_noncommutative(): 519 x = Symbol('x', commutative=True) 520 assert x.is_complex is None 521 522 x = Symbol('x', commutative=False) 523 assert x.is_integer is False 524 assert x.is_rational is False 525 assert x.is_algebraic is False 526 assert x.is_irrational is False 527 assert x.is_extended_real is False 528 assert x.is_complex is False 529 530 531def test_other_symbol(): 532 x = Symbol('x', integer=True) 533 assert x.is_integer is True 534 assert x.is_extended_real is True 535 assert x.is_finite is True 536 537 x = Symbol('x', integer=True, nonnegative=True) 538 assert x.is_integer is True 539 assert x.is_nonnegative is True 540 assert x.is_negative is False 541 assert x.is_positive is None 542 543 x = Symbol('x', integer=True, nonpositive=True) 544 assert x.is_integer is True 545 assert x.is_nonpositive is True 546 assert x.is_positive is False 547 assert x.is_negative is None 548 549 x = Symbol('x', odd=True) 550 assert x.is_odd is True 551 assert x.is_even is False 552 assert x.is_integer is True 553 554 x = Symbol('x', odd=False) 555 assert x.is_odd is False 556 assert x.is_even is None 557 assert x.is_integer is None 558 559 x = Symbol('x', even=True) 560 assert x.is_even is True 561 assert x.is_odd is False 562 assert x.is_integer is True 563 assert x.is_finite is True 564 565 x = Symbol('x', even=False) 566 assert x.is_even is False 567 assert x.is_odd is None 568 assert x.is_integer is None 569 assert x.is_finite is None # issue sympy/sympy#16432 570 571 x = Symbol('x', integer=True, nonnegative=True) 572 assert x.is_integer is True 573 assert x.is_nonnegative is True 574 575 x = Symbol('x', integer=True, nonpositive=True) 576 assert x.is_integer is True 577 assert x.is_nonpositive is True 578 579 with pytest.raises(AttributeError): 580 x.is_extended_real = False 581 582 x = Symbol('x', algebraic=True) 583 assert x.is_transcendental is False 584 x = Symbol('x', transcendental=True) 585 assert x.is_algebraic is False 586 assert x.is_rational is False 587 assert x.is_integer is False 588 589 x = Symbol('x', zero=False) 590 assert x.is_nonzero is True # issue sympy/sympy#16431 591 592 593def test_sympyissue_3825(): 594 """catch: hash instability""" 595 x = Symbol('x') 596 y = Symbol('y') 597 a1 = x + y 598 a2 = y + x 599 a2.is_comparable 600 601 h1 = hash(a1) 602 h2 = hash(a2) 603 assert h1 == h2 604 605 606def test_sympyissue_4822(): 607 z = cbrt(-1)*(1 - I*sqrt(3)) 608 assert z.is_extended_real in [True, None] 609 610 611def test_hash_vs_typeinfo(): 612 """Seemingly different typeinfo, but in fact equal.""" 613 # the following two are semantically equal 614 x1 = Symbol('x', even=True) 615 x2 = Symbol('x', integer=True, odd=False) 616 617 assert hash(x1) == hash(x2) 618 assert x1 == x2 619 620 621def test_hash_vs_typeinfo_2(): 622 """Different typeinfo should mean !eq""" 623 # the following two are semantically different 624 x = Symbol('x') 625 x1 = Symbol('x', even=True) 626 627 assert x != x1 628 assert hash(x) != hash(x1) # This might fail with very low probability 629 630 631def test_hash_vs_eq(): 632 """catch: different hash for equal objects""" 633 a = 1 + pi # important: do not fold it into a Number instance 634 ha = hash(a) # it should be Add/Mul/... to trigger the bug 635 636 a.is_positive # this uses .evalf() and deduces it is positive 637 assert a.is_positive is True 638 639 # be sure that hash stayed the same 640 assert ha == hash(a) 641 642 # now b should be the same expression 643 b = a.expand(trig=True) 644 hb = hash(b) 645 646 assert a == b 647 assert ha == hb 648 649 650def test_Add_is_pos_neg(): 651 # these cover lines not covered by the rest of tests in core 652 n = Symbol('n', negative=True, infinite=True) 653 nn = Symbol('n', nonnegative=True, infinite=True) 654 np = Symbol('n', nonpositive=True, infinite=True) 655 p = Symbol('p', positive=True, infinite=True) 656 r = Dummy(extended_real=True, finite=False) 657 x = Symbol('x') 658 xf = Symbol('xb', finite=True, real=True) 659 assert (n + p).is_positive is None 660 assert (n + x).is_positive is None 661 assert (p + x).is_positive is None 662 assert (n + p).is_negative is None 663 assert (n + x).is_negative is None 664 assert (p + x).is_negative is None 665 666 assert (n + xf).is_positive is False 667 assert (p + xf).is_positive is True 668 assert (n + xf).is_negative is True 669 assert (p + xf).is_negative is False 670 671 assert (x - oo).is_negative is None # issue sympy/sympy#7798 672 # issue sympy/sympy#8046, 16.2 673 assert (p + nn).is_positive 674 assert (n + np).is_negative 675 assert (p + r).is_positive is None 676 677 678def test_Add_is_imaginary(): 679 nn = Dummy(nonnegative=True, finite=True) 680 assert (I*nn + I).is_imaginary # issue sympy/sympy#8046, 17 681 682 683def test_Add_is_algebraic(): 684 a = Symbol('a', algebraic=True) 685 b = Symbol('a', algebraic=True) 686 na = Symbol('na', algebraic=False) 687 nb = Symbol('nb', algebraic=False) 688 x = Symbol('x') 689 assert (a + b).is_algebraic 690 assert (na + nb).is_algebraic is None 691 assert (a + na).is_algebraic is False 692 assert (a + x).is_algebraic is None 693 assert (na + x).is_algebraic is None 694 695 696def test_Mul_is_algebraic(): 697 a = Symbol('a', algebraic=True) 698 b = Symbol('b', algebraic=True) 699 na = Symbol('na', algebraic=False) 700 an = Symbol('an', algebraic=True, nonzero=True) 701 nb = Symbol('nb', algebraic=False) 702 x = Symbol('x') 703 assert (a*b).is_algebraic 704 assert (na*nb).is_algebraic is None 705 assert (a*na).is_algebraic is None 706 assert (an*na).is_algebraic is False 707 assert (a*x).is_algebraic is None 708 assert (na*x).is_algebraic is None 709 710 711def test_Pow_is_algebraic(): 712 e = Symbol('e', algebraic=True) 713 714 assert Pow(1, e, evaluate=False).is_algebraic 715 assert Pow(0, e, evaluate=False).is_algebraic 716 717 a = Symbol('a', algebraic=True) 718 an = Symbol('an', algebraic=True, nonzero=True) 719 na = Symbol('na', algebraic=False) 720 ia = Symbol('ia', algebraic=True, irrational=True) 721 ib = Symbol('ib', algebraic=True, irrational=True) 722 r = Symbol('r', rational=True, nonzero=True) 723 x = Symbol('x') 724 assert (an**r).is_algebraic 725 assert (a**r**2).is_algebraic 726 assert (a**x).is_algebraic is None 727 assert (na**r).is_algebraic is False 728 assert (ia**r).is_algebraic 729 assert (ia**ib).is_algebraic is False 730 731 assert (a**e).is_algebraic is None 732 733 # Gelfond-Schneider constant: 734 assert Pow(2, sqrt(2), evaluate=False).is_algebraic is False 735 736 assert Pow(GoldenRatio, sqrt(3), evaluate=False).is_algebraic is False 737 738 # sympy/sympy#8649 739 t = Symbol('t', real=True, transcendental=True) 740 n = Symbol('n', integer=True) 741 assert (t**n).is_algebraic is None 742 assert (t**n).is_integer is None 743 744 assert exp(t).is_algebraic is None 745 assert exp(n).is_algebraic is None 746 747 i = Symbol('i', integer=True) 748 p = 1/(i - 1) 749 assert p.is_algebraic is None 750 assert p.is_finite is None # issue sympy/sympy#17453 751 752 # issue sympy/sympy#20617 753 assert exp(I*2*pi/3).is_algebraic is True 754 755 756def test_Mul_is_infinite(): 757 x = Symbol('x') 758 f = Symbol('f', finite=True) 759 i = Symbol('i', infinite=True) 760 z = Dummy(zero=True) 761 nzf = Dummy(finite=True, zero=False) 762 assert (x*f).is_finite is None 763 assert (x*i).is_finite is None 764 assert (f*i).is_finite is False 765 assert (x*f*i).is_finite is None 766 assert (z*i).is_finite is False 767 assert (nzf*i).is_finite is False 768 assert (z*f).is_finite is True 769 assert Mul(0, f, evaluate=False).is_finite is True 770 assert Mul(0, i, evaluate=False).is_finite is False 771 772 assert (x*f).is_infinite is None 773 assert (x*i).is_infinite is None 774 assert (f*i).is_infinite is None 775 assert (x*f*i).is_infinite is None 776 assert (z*i).is_infinite is nan.is_infinite 777 assert (nzf*i).is_infinite is True 778 assert (z*f).is_infinite is False 779 assert Mul(0, f, evaluate=False).is_infinite is False 780 assert Mul(0, i, evaluate=False).is_infinite is nan.is_infinite 781 782 783def test_special_is_rational(): 784 i = Symbol('i', integer=True) 785 i2 = Symbol('i2', integer=True) 786 ni = Symbol('ni', integer=True, nonzero=True) 787 r = Symbol('r', rational=True) 788 rn = Symbol('r', rational=True, nonzero=True) 789 nr = Symbol('nr', irrational=True) 790 x = Symbol('x') 791 assert sqrt(3).is_rational is False 792 assert (3 + sqrt(3)).is_rational is False 793 assert (3*sqrt(3)).is_rational is False 794 z = Symbol('z', zero=True) 795 assert exp(z).is_rational 796 assert exp(0, evaluate=False).is_rational 797 assert exp(3).is_rational is False 798 assert exp(ni).is_rational is False 799 assert exp(rn).is_rational is False 800 assert exp(x).is_rational is None 801 assert exp(log(3), evaluate=False).is_rational is True 802 assert log(exp(3), evaluate=False).is_rational is True 803 assert log(3).is_rational is False 804 assert log(ni + 1).is_rational is False 805 assert log(rn + 1).is_rational is False 806 assert log(x).is_rational is None 807 assert (sqrt(3) + sqrt(5)).is_rational is None 808 assert (sqrt(3) + pi).is_rational is False 809 assert (x**i).is_rational is None 810 assert (i**i).is_rational is True 811 assert (i**i2).is_rational is None 812 assert (r**i).is_rational is None 813 assert (r**r).is_rational is None 814 assert (r**x).is_rational is None 815 assert (nr**i).is_rational is None # issue sympy/sympy#8598 816 assert (nr**Symbol('z', zero=True)).is_rational 817 assert sin(1).is_rational is False 818 assert sin(ni).is_rational is False 819 assert sin(rn).is_rational is False 820 assert sin(x).is_rational is None 821 assert asin(rn).is_rational is False 822 assert sin(asin(3), evaluate=False).is_rational is True 823 824 825def test_sanitize_assumptions(): 826 # issue sympy/sympy#6666 827 for cls in (Symbol, Dummy, Wild): 828 x = cls('x', extended_real=1, positive=0) 829 assert x.is_extended_real is True 830 assert x.is_positive is False 831 assert cls('', extended_real=True, positive=None).is_positive is None 832 pytest.raises(ValueError, lambda: cls('', commutative=None)) 833 pytest.raises(ValueError, lambda: Symbol._sanitize({'commutative': None})) 834 835 836def test_special_assumptions(): 837 e = -3 - sqrt(5) + (-sqrt(10)/2 - sqrt(2)/2)**2 838 assert simplify(e < 0) is false 839 assert simplify(e > 0) is false 840 assert (e == 0) is False # it's not a literal 0 841 assert e.equals(0) is True 842 843 844def test_inconsistent(): 845 # cf. issues sympy/sympy#5795 and sympy/sympy#5545 846 pytest.raises(InconsistentAssumptions, lambda: Symbol('x', extended_real=True, 847 commutative=False)) 848 849 850def test_sympyissue_2730(): 851 assert (1/(1 + I)).is_extended_real is False 852 853 854def test_sympyissue_4149(): 855 assert (3 + I).is_complex 856 assert (3 + I).is_imaginary is False 857 assert (3*I + pi*I).is_imaginary 858 y = Symbol('y', real=True) 859 assert (3*I + pi*I + y*I).is_imaginary is True 860 p = Symbol('p', positive=True, finite=True) 861 assert (3*I + pi*I + p*I).is_imaginary 862 n = Symbol('n', negative=True, finite=True) 863 assert (-3*I - pi*I + n*I).is_imaginary 864 865 i = Symbol('i', imaginary=True) 866 assert ([(i**a).is_imaginary for a in range(4)] == 867 [False, True, False, True]) 868 869 # tests from the PR sympy/sympy#7887: 870 e = -sqrt(3)*I/2 + Float(0.866025403784439)*I 871 assert e.is_extended_real is False 872 assert e.is_imaginary 873 874 875def test_sympyissue_2920(): 876 n = Symbol('n', real=True, negative=True) 877 assert sqrt(n).is_imaginary 878 879 880def test_sympyissue_7899(): 881 x = Symbol('x', extended_real=True) 882 assert (I*x).is_extended_real is None 883 assert ((x - I)*(x - 1)).is_zero is None 884 assert ((x - I)*(x - 1)).is_extended_real is None 885 886 887@pytest.mark.xfail 888def test_sympyissue_7993(): 889 x = Symbol('x', integer=True) 890 y = Symbol('y', noninteger=True) 891 assert (x - y).is_nonzero is True 892 893 894def test_sympyissue_8075(): 895 pytest.raises(InconsistentAssumptions, lambda: Dummy(zero=True, finite=False)) 896 pytest.raises(InconsistentAssumptions, lambda: Dummy(zero=True, infinite=True)) 897 898 899def test_sympyissue_8642(): 900 x = Symbol('x', extended_real=True, integer=False) 901 assert (x*2).is_integer is None 902 903 904def test_sympyissue_10024(): 905 x = Dummy('x') 906 assert Mod(x, 2*pi).is_zero is None 907 908 909def test_sympyissue_16530(): 910 x = Symbol('x') 911 e = 1/abs(x) 912 assert e.is_real is None 913 assert e.is_extended_real is None 914 915 916def test_sympyissue_17555(): 917 x = Symbol('x', infinite=True, extended_real=True) 918 assert x.is_positive is None 919 assert (-x).is_positive is None 920 921 922def test_sympyissue_17556(): 923 z = I*oo 924 assert z.is_imaginary is False 925 assert z.is_finite is False 926