ntheory.py 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. from sympy.assumptions import Predicate
  2. from sympy.multipledispatch import Dispatcher
  3. class PrimePredicate(Predicate):
  4. """
  5. Prime number predicate.
  6. Explanation
  7. ===========
  8. ``ask(Q.prime(x))`` is true iff ``x`` is a natural number greater
  9. than 1 that has no positive divisors other than ``1`` and the
  10. number itself.
  11. Examples
  12. ========
  13. >>> from sympy import Q, ask
  14. >>> ask(Q.prime(0))
  15. False
  16. >>> ask(Q.prime(1))
  17. False
  18. >>> ask(Q.prime(2))
  19. True
  20. >>> ask(Q.prime(20))
  21. False
  22. >>> ask(Q.prime(-3))
  23. False
  24. """
  25. name = 'prime'
  26. handler = Dispatcher(
  27. "PrimeHandler",
  28. doc=("Handler for key 'prime'. Test that an expression represents a prime"
  29. " number. When the expression is an exact number, the result (when True)"
  30. " is subject to the limitations of isprime() which is used to return the "
  31. "result.")
  32. )
  33. class CompositePredicate(Predicate):
  34. """
  35. Composite number predicate.
  36. Explanation
  37. ===========
  38. ``ask(Q.composite(x))`` is true iff ``x`` is a positive integer and has
  39. at least one positive divisor other than ``1`` and the number itself.
  40. Examples
  41. ========
  42. >>> from sympy import Q, ask
  43. >>> ask(Q.composite(0))
  44. False
  45. >>> ask(Q.composite(1))
  46. False
  47. >>> ask(Q.composite(2))
  48. False
  49. >>> ask(Q.composite(20))
  50. True
  51. """
  52. name = 'composite'
  53. handler = Dispatcher("CompositeHandler", doc="Handler for key 'composite'.")
  54. class EvenPredicate(Predicate):
  55. """
  56. Even number predicate.
  57. Explanation
  58. ===========
  59. ``ask(Q.even(x))`` is true iff ``x`` belongs to the set of even
  60. integers.
  61. Examples
  62. ========
  63. >>> from sympy import Q, ask, pi
  64. >>> ask(Q.even(0))
  65. True
  66. >>> ask(Q.even(2))
  67. True
  68. >>> ask(Q.even(3))
  69. False
  70. >>> ask(Q.even(pi))
  71. False
  72. """
  73. name = 'even'
  74. handler = Dispatcher("EvenHandler", doc="Handler for key 'even'.")
  75. class OddPredicate(Predicate):
  76. """
  77. Odd number predicate.
  78. Explanation
  79. ===========
  80. ``ask(Q.odd(x))`` is true iff ``x`` belongs to the set of odd numbers.
  81. Examples
  82. ========
  83. >>> from sympy import Q, ask, pi
  84. >>> ask(Q.odd(0))
  85. False
  86. >>> ask(Q.odd(2))
  87. False
  88. >>> ask(Q.odd(3))
  89. True
  90. >>> ask(Q.odd(pi))
  91. False
  92. """
  93. name = 'odd'
  94. handler = Dispatcher(
  95. "OddHandler",
  96. doc=("Handler for key 'odd'. Test that an expression represents an odd"
  97. " number.")
  98. )