test_interval_membership.py 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. from sympy.core.symbol import Symbol
  2. from sympy.plotting.intervalmath import interval
  3. from sympy.plotting.intervalmath.interval_membership import intervalMembership
  4. from sympy.plotting.experimental_lambdify import experimental_lambdify
  5. from sympy.testing.pytest import raises
  6. def test_creation():
  7. assert intervalMembership(True, True)
  8. raises(TypeError, lambda: intervalMembership(True))
  9. raises(TypeError, lambda: intervalMembership(True, True, True))
  10. def test_getitem():
  11. a = intervalMembership(True, False)
  12. assert a[0] is True
  13. assert a[1] is False
  14. raises(IndexError, lambda: a[2])
  15. def test_str():
  16. a = intervalMembership(True, False)
  17. assert str(a) == 'intervalMembership(True, False)'
  18. assert repr(a) == 'intervalMembership(True, False)'
  19. def test_equivalence():
  20. a = intervalMembership(True, True)
  21. b = intervalMembership(True, False)
  22. assert (a == b) is False
  23. assert (a != b) is True
  24. a = intervalMembership(True, False)
  25. b = intervalMembership(True, False)
  26. assert (a == b) is True
  27. assert (a != b) is False
  28. def test_not():
  29. x = Symbol('x')
  30. r1 = x > -1
  31. r2 = x <= -1
  32. i = interval
  33. f1 = experimental_lambdify((x,), r1)
  34. f2 = experimental_lambdify((x,), r2)
  35. tt = i(-0.1, 0.1, is_valid=True)
  36. tn = i(-0.1, 0.1, is_valid=None)
  37. tf = i(-0.1, 0.1, is_valid=False)
  38. assert f1(tt) == ~f2(tt)
  39. assert f1(tn) == ~f2(tn)
  40. assert f1(tf) == ~f2(tf)
  41. nt = i(0.9, 1.1, is_valid=True)
  42. nn = i(0.9, 1.1, is_valid=None)
  43. nf = i(0.9, 1.1, is_valid=False)
  44. assert f1(nt) == ~f2(nt)
  45. assert f1(nn) == ~f2(nn)
  46. assert f1(nf) == ~f2(nf)
  47. ft = i(1.9, 2.1, is_valid=True)
  48. fn = i(1.9, 2.1, is_valid=None)
  49. ff = i(1.9, 2.1, is_valid=False)
  50. assert f1(ft) == ~f2(ft)
  51. assert f1(fn) == ~f2(fn)
  52. assert f1(ff) == ~f2(ff)
  53. def test_boolean():
  54. # There can be 9*9 test cases in full mapping of the cartesian product.
  55. # But we only consider 3*3 cases for simplicity.
  56. s = [
  57. intervalMembership(False, False),
  58. intervalMembership(None, None),
  59. intervalMembership(True, True)
  60. ]
  61. # Reduced tests for 'And'
  62. a1 = [
  63. intervalMembership(False, False),
  64. intervalMembership(False, False),
  65. intervalMembership(False, False),
  66. intervalMembership(False, False),
  67. intervalMembership(None, None),
  68. intervalMembership(None, None),
  69. intervalMembership(False, False),
  70. intervalMembership(None, None),
  71. intervalMembership(True, True)
  72. ]
  73. a1_iter = iter(a1)
  74. for i in range(len(s)):
  75. for j in range(len(s)):
  76. assert s[i] & s[j] == next(a1_iter)
  77. # Reduced tests for 'Or'
  78. a1 = [
  79. intervalMembership(False, False),
  80. intervalMembership(None, False),
  81. intervalMembership(True, False),
  82. intervalMembership(None, False),
  83. intervalMembership(None, None),
  84. intervalMembership(True, None),
  85. intervalMembership(True, False),
  86. intervalMembership(True, None),
  87. intervalMembership(True, True)
  88. ]
  89. a1_iter = iter(a1)
  90. for i in range(len(s)):
  91. for j in range(len(s)):
  92. assert s[i] | s[j] == next(a1_iter)
  93. # Reduced tests for 'Xor'
  94. a1 = [
  95. intervalMembership(False, False),
  96. intervalMembership(None, False),
  97. intervalMembership(True, False),
  98. intervalMembership(None, False),
  99. intervalMembership(None, None),
  100. intervalMembership(None, None),
  101. intervalMembership(True, False),
  102. intervalMembership(None, None),
  103. intervalMembership(False, True)
  104. ]
  105. a1_iter = iter(a1)
  106. for i in range(len(s)):
  107. for j in range(len(s)):
  108. assert s[i] ^ s[j] == next(a1_iter)
  109. # Reduced tests for 'Not'
  110. a1 = [
  111. intervalMembership(True, False),
  112. intervalMembership(None, None),
  113. intervalMembership(False, True)
  114. ]
  115. a1_iter = iter(a1)
  116. for i in range(len(s)):
  117. assert ~s[i] == next(a1_iter)
  118. def test_boolean_errors():
  119. a = intervalMembership(True, True)
  120. raises(ValueError, lambda: a & 1)
  121. raises(ValueError, lambda: a | 1)
  122. raises(ValueError, lambda: a ^ 1)