|
from sympy.assumptions import Predicate |
|
from sympy.multipledispatch import Dispatcher |
|
|
|
|
|
class PrimePredicate(Predicate): |
|
""" |
|
Prime number predicate. |
|
|
|
Explanation |
|
=========== |
|
|
|
``ask(Q.prime(x))`` is true iff ``x`` is a natural number greater |
|
than 1 that has no positive divisors other than ``1`` and the |
|
number itself. |
|
|
|
Examples |
|
======== |
|
|
|
>>> from sympy import Q, ask |
|
>>> ask(Q.prime(0)) |
|
False |
|
>>> ask(Q.prime(1)) |
|
False |
|
>>> ask(Q.prime(2)) |
|
True |
|
>>> ask(Q.prime(20)) |
|
False |
|
>>> ask(Q.prime(-3)) |
|
False |
|
|
|
""" |
|
name = 'prime' |
|
handler = Dispatcher( |
|
"PrimeHandler", |
|
doc=("Handler for key 'prime'. Test that an expression represents a prime" |
|
" number. When the expression is an exact number, the result (when True)" |
|
" is subject to the limitations of isprime() which is used to return the " |
|
"result.") |
|
) |
|
|
|
|
|
class CompositePredicate(Predicate): |
|
""" |
|
Composite number predicate. |
|
|
|
Explanation |
|
=========== |
|
|
|
``ask(Q.composite(x))`` is true iff ``x`` is a positive integer and has |
|
at least one positive divisor other than ``1`` and the number itself. |
|
|
|
Examples |
|
======== |
|
|
|
>>> from sympy import Q, ask |
|
>>> ask(Q.composite(0)) |
|
False |
|
>>> ask(Q.composite(1)) |
|
False |
|
>>> ask(Q.composite(2)) |
|
False |
|
>>> ask(Q.composite(20)) |
|
True |
|
|
|
""" |
|
name = 'composite' |
|
handler = Dispatcher("CompositeHandler", doc="Handler for key 'composite'.") |
|
|
|
|
|
class EvenPredicate(Predicate): |
|
""" |
|
Even number predicate. |
|
|
|
Explanation |
|
=========== |
|
|
|
``ask(Q.even(x))`` is true iff ``x`` belongs to the set of even |
|
integers. |
|
|
|
Examples |
|
======== |
|
|
|
>>> from sympy import Q, ask, pi |
|
>>> ask(Q.even(0)) |
|
True |
|
>>> ask(Q.even(2)) |
|
True |
|
>>> ask(Q.even(3)) |
|
False |
|
>>> ask(Q.even(pi)) |
|
False |
|
|
|
""" |
|
name = 'even' |
|
handler = Dispatcher("EvenHandler", doc="Handler for key 'even'.") |
|
|
|
|
|
class OddPredicate(Predicate): |
|
""" |
|
Odd number predicate. |
|
|
|
Explanation |
|
=========== |
|
|
|
``ask(Q.odd(x))`` is true iff ``x`` belongs to the set of odd numbers. |
|
|
|
Examples |
|
======== |
|
|
|
>>> from sympy import Q, ask, pi |
|
>>> ask(Q.odd(0)) |
|
False |
|
>>> ask(Q.odd(2)) |
|
False |
|
>>> ask(Q.odd(3)) |
|
True |
|
>>> ask(Q.odd(pi)) |
|
False |
|
|
|
""" |
|
name = 'odd' |
|
handler = Dispatcher( |
|
"OddHandler", |
|
doc=("Handler for key 'odd'. Test that an expression represents an odd" |
|
" number.") |
|
) |
|
|