49 lines
1.2 KiB
Python
49 lines
1.2 KiB
Python
from sympy.core import S
|
|
from sympy.core.relational import Eq, Ne
|
|
from sympy.logic.boolalg import BooleanFunction
|
|
from sympy.utilities.misc import func_name
|
|
from .sets import Set
|
|
|
|
|
|
class Contains(BooleanFunction):
|
|
"""
|
|
Asserts that x is an element of the set S.
|
|
|
|
Examples
|
|
========
|
|
|
|
>>> from sympy import Symbol, Integer, S, Contains
|
|
>>> Contains(Integer(2), S.Integers)
|
|
True
|
|
>>> Contains(Integer(-2), S.Naturals)
|
|
False
|
|
>>> i = Symbol('i', integer=True)
|
|
>>> Contains(i, S.Naturals)
|
|
Contains(i, Naturals)
|
|
|
|
References
|
|
==========
|
|
|
|
.. [1] https://en.wikipedia.org/wiki/Element_%28mathematics%29
|
|
"""
|
|
@classmethod
|
|
def eval(cls, x, s):
|
|
|
|
if not isinstance(s, Set):
|
|
raise TypeError('expecting Set, not %s' % func_name(s))
|
|
|
|
ret = s.contains(x)
|
|
if not isinstance(ret, Contains) and (
|
|
ret in (S.true, S.false) or isinstance(ret, Set)):
|
|
return ret
|
|
|
|
@property
|
|
def binary_symbols(self):
|
|
return set().union(*[i.binary_symbols
|
|
for i in self.args[1].args
|
|
if i.is_Boolean or i.is_Symbol or
|
|
isinstance(i, (Eq, Ne))])
|
|
|
|
def as_set(self):
|
|
return self.args[1]
|