| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- from sympy.core import S
- from sympy.core.sympify import sympify
- from sympy.core.relational import Eq, Ne
- from sympy.core.parameters import global_parameters
- from sympy.logic.boolalg import Boolean
- from sympy.utilities.misc import func_name
- from .sets import Set
- class Contains(Boolean):
- """
- 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
- """
- def __new__(cls, x, s, evaluate=None):
- x = sympify(x)
- s = sympify(s)
- if evaluate is None:
- evaluate = global_parameters.evaluate
- if not isinstance(s, Set):
- raise TypeError('expecting Set, not %s' % func_name(s))
- if evaluate:
- # _contains can return symbolic booleans that would be returned by
- # s.contains(x) but here for Contains(x, s) we only evaluate to
- # true, false or return the unevaluated Contains.
- result = s._contains(x)
- if isinstance(result, Boolean):
- if result in (S.true, S.false):
- return result
- elif result is not None:
- raise TypeError("_contains() should return Boolean or None")
- return super().__new__(cls, x, s)
- @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]
|