Example #1
0
def test_naturals():
    N = S.Naturals
    assert 5 in N
    assert -5 not in N
    assert 5.5 not in N
    ni = iter(N)
    a, b, c, d = ni.next(), ni.next(), ni.next(), ni.next()
    assert (a, b, c, d) == (1, 2, 3, 4)
    assert isinstance(a, Basic)

    assert N.intersect(Interval(-5, 5)) == FiniteSet(1, 2, 3, 4, 5)
    assert N.intersect(Interval(-5, 5, True, True)) == FiniteSet(1, 2, 3, 4)

    assert N.inf == 1
    assert N.sup == oo
Example #2
0
def test_integers():
    Z = S.Integers
    assert 5 in Z
    assert -5 in Z
    assert 5.5 not in Z
    zi = iter(Z)
    a, b, c, d = zi.next(), zi.next(), zi.next(), zi.next()
    assert (a, b, c, d) == (0, 1, -1, 2)
    assert isinstance(a, Basic)

    assert Z.intersect(Interval(-5, 5)) == FiniteSet(range(-5, 6))
    assert Z.intersect(Interval(-5, 5, True, True)) == FiniteSet(range(-4, 5))

    assert Z.inf == -oo
    assert Z.sup == oo
Example #3
0
 def __new__(cls):
     from sympy.core.sets import FiniteSet
     x = C.Dummy('x')
     #construct "by hand" to avoid infinite loop
     obj = Expr.__new__(cls, Tuple(x), x)
     obj.nargs = FiniteSet(1)
     return obj
Example #4
0
File: rv.py Project: nthorne/sympy
    def __new__(cls, *domains):
        symbols = sumsets([domain.symbols for domain in domains])

        # Flatten any product of products
        domains2 = []
        for domain in domains:
            if not domain.is_ProductDomain:
                domains2.append(domain)
            else:
                domains2.extend(domain.domains)
        domains2 = FiniteSet(domains2)

        sym_domain_dict = {}
        for domain in domains2:
            for symbol in domain.symbols:
                sym_domain_dict[symbol] = domain

        if all(domain.is_Finite for domain in domains2):
            from sympy.stats.frv import ProductFiniteDomain
            cls = ProductFiniteDomain
        if all(domain.is_Continuous for domain in domains2):
            from sympy.stats.crv import ProductContinuousDomain
            cls = ProductContinuousDomain

        obj = RandomDomain.__new__(cls, symbols, domains2)
        obj.sym_domain_dict = sym_domain_dict
        return obj
Example #5
0
def test_Lambda():
    e = Lambda(x, x**2)
    assert e(4) == 16
    assert e(x) == x**2
    assert e(y) == y**2

    assert Lambda(x, x**2) == Lambda(x, x**2)
    assert Lambda(x, x**2) == Lambda(y, y**2)
    assert Lambda(x, x**2) != Lambda(y, y**2 + 1)
    assert Lambda((x, y), x**y) == Lambda((y, x), y**x)
    assert Lambda((x, y), x**y) != Lambda((x, y), y**x)

    assert Lambda((x, y), x**y)(x, y) == x**y
    assert Lambda((x, y), x**y)(3, 3) == 3**3
    assert Lambda((x, y), x**y)(x, 3) == x**3
    assert Lambda((x, y), x**y)(3, y) == 3**y
    assert Lambda(x, f(x))(x) == f(x)
    assert Lambda(x, x**2)(e(x)) == x**4
    assert e(e(x)) == x**4

    assert Lambda((x, y), x + y).nargs == FiniteSet(2)

    p = x, y, z, t
    assert Lambda(p, t * (x + y + z))(*p) == t * (x + y + z)

    assert Lambda(x, 2 * x) + Lambda(y, 2 * y) == 2 * Lambda(x, 2 * x)
    assert Lambda(x, 2 * x) not in [Lambda(x, x)]
    raises(ValueError, lambda: Lambda(1, x))
    assert Lambda(x, 1)(1) is S.One
Example #6
0
 def set(self):
     if self.fulldomain.__class__ is SingleFiniteDomain:
         return FiniteSet(elem for elem in self.fulldomain.set
                 if frozenset(((self.fulldomain.symbol, elem),)) in self)
     else:
         raise NotImplementedError(
                 "Not implemented on multi-dimensional conditional domain")
Example #7
0
def test_Function():
    class myfunc(Function):
        @classmethod
        def eval(cls, x):
            return

    assert myfunc.nargs == FiniteSet(1)
    assert myfunc(x).nargs == FiniteSet(1)
    raises(TypeError, lambda: myfunc(x, y).nargs)

    class myfunc(Function):
        @classmethod
        def eval(cls, *x):
            return

    assert myfunc.nargs == S.Naturals0
    assert myfunc(x).nargs == S.Naturals0
Example #8
0
def test_TransformationSet():
    squares = TransformationSet(Lambda(x, x**2), S.Naturals)
    assert 4 in squares
    assert 5 not in squares
    assert FiniteSet(range(10)).intersect(squares) == FiniteSet(1, 4, 9)

    assert 16 not in squares.intersect(Interval(0, 10))

    si = iter(squares)
    a, b, c, d = next(si), next(si), next(si), next(si)
    assert (a, b, c, d) == (1, 4, 9, 16)

    harmonics = TransformationSet(Lambda(x, 1 / x), S.Naturals)
    assert Rational(1, 5) in harmonics
    assert .25 in harmonics
    assert .3 not in harmonics

    assert harmonics.is_iterable
Example #9
0
def test_range_interval_intersection():
    # Intersection with intervals
    assert FiniteSet(Range(0, 10, 1).intersect(Interval(2, 6))) == \
            FiniteSet(2, 3, 4, 5, 6)

    # Open Intervals are removed
    assert (FiniteSet(Range(0, 10, 1).intersect(Interval(2, 6, True, True)))
            == FiniteSet(3, 4, 5))

    # Try this with large steps
    assert (FiniteSet(Range(0, 100, 10).intersect(Interval(15, 55))) ==
            FiniteSet(20, 30, 40, 50))

    # Going backwards
    assert FiniteSet(Range(10, -9, -3).intersect(Interval(-5, 6))) == \
            FiniteSet(-5, -2, 1, 4)
    assert FiniteSet(Range(10, -9, -3).intersect(Interval(-5, 6, True))) == \
            FiniteSet(-2, 1, 4)
Example #10
0
def test_univariate_relational_as_set():
    assert (x > 0).as_set() == Interval(0, oo, True, True)
    assert (x >= 0).as_set() == Interval(0, oo)
    assert (x < 0).as_set() == Interval(-oo, 0, True, True)
    assert (x <= 0).as_set() == Interval(-oo, 0)
    assert Eq(x, 0).as_set() == FiniteSet(0)
    assert Ne(x, 0).as_set() == Interval(-oo, 0, True, True) + \
        Interval(0, oo, True, True)

    assert (x**2 >= 4).as_set() == Interval(-oo, -2) + Interval(2, oo)
Example #11
0
    def __new__(cls, *spaces):
        rs_space_dict = {}
        for space in spaces:
            for value in space.values:
                rs_space_dict[value] = space

        symbols = FiniteSet(val.symbol for val in rs_space_dict.keys())

        # Overlapping symbols
        if len(symbols) < sum(len(space.symbols) for space in spaces):
            raise ValueError("Overlapping Random Variables")

        if all(space.is_Finite for space in spaces):
            from sympy.stats.frv import ProductFinitePSpace
            cls = ProductFinitePSpace
        if all(space.is_Continuous for space in spaces):
            from sympy.stats.crv import ProductContinuousPSpace
            cls = ProductContinuousPSpace

        obj = Basic.__new__(cls, *FiniteSet(*spaces))

        return obj
Example #12
0
def test_nargs():
    f = Function('f')
    assert f.nargs == S.Naturals0
    assert f(1).nargs == S.Naturals0
    assert Function('f', nargs=2)(1, 2).nargs == FiniteSet(2)
    assert sin.nargs == FiniteSet(1)
    assert sin(2).nargs == FiniteSet(1)
    assert log.nargs == FiniteSet(1, 2)
    assert log(2).nargs == FiniteSet(1, 2)
    assert Function('f', nargs=2).nargs == FiniteSet(2)
    assert Function('f', nargs=0).nargs == FiniteSet(0)
Example #13
0
def solve_univariate_inequality(expr, gen, assume=True, relational=True):
    """Solves a real univariate inequality.

    Examples
    ========

    >>> from sympy.solvers.inequalities import solve_univariate_inequality
    >>> from sympy.core.symbol import Symbol
    >>> x = Symbol('x', real=True)

    >>> solve_univariate_inequality(x**2 >= 4, x)
    Or(x <= -2, x >= 2)
    >>> solve_univariate_inequality(x**2 >= 4, x, relational=False)
    (-oo, -2] U [2, oo)

    """

    # Implementation for continous functions

    from sympy.solvers.solvers import solve

    solns = solve(expr.lhs - expr.rhs, gen, assume=assume)
    oo = S.Infinity

    start = -oo

    sol_sets = [S.EmptySet]

    for x in sorted(s for s in solns if s.is_real):
        end = x
        if expr.subs(gen, (start + end) / 2 if start != -oo else end - 1):
            sol_sets.append(Interval(start, end, True, True))

        if expr.subs(gen, x):
            sol_sets.append(FiniteSet(x))

        start = end

    end = oo

    if expr.subs(gen, start + 1):
        sol_sets.append(Interval(start, end, True, True))

    rv = Union(*sol_sets)
    return rv if not relational else rv.as_relational(gen)
Example #14
0
    def __new__(cls, *domains):
        symbols = sumsets([domain.symbols for domain in domains])

        # Flatten any product of products
        domains2 = []
        for domain in domains:
            if not domain.is_ProductDomain:
                domains2.append(domain)
            else:
                domains2.extend(domain.domains)
        domains2 = FiniteSet(domains2)

        if all(domain.is_Finite for domain in domains2):
            from sympy.stats.frv import ProductFiniteDomain
            cls = ProductFiniteDomain
        if all(domain.is_Continuous for domain in domains2):
            from sympy.stats.crv import ProductContinuousDomain
            cls = ProductContinuousDomain

        return Basic.__new__(cls, *domains2)
Example #15
0
 def spaces(self):
     return FiniteSet(*self.args)
Example #16
0
 def symbols(self):
     return FiniteSet(val.symbol for val in self.rs_space_dict.keys())
Example #17
0
File: rv.py Project: nthorne/sympy
 def __new__(cls, symbol, set):
     assert symbol.is_Symbol
     symbols = FiniteSet(symbol)
     return RandomDomain.__new__(cls, symbols, set)
Example #18
0
 def _intersect(self, other):
     if other.is_Interval:
         s = FiniteSet(range(ceiling(other.left), floor(other.right) + 1))
         return s.intersect(other)  # take out endpoints if open interval
     return None
Example #19
0
 def elements(self):
     return FiniteSet(iter(self))
Example #20
0
 def elements(self):
     return FiniteSet(
         frozenset(((self.symbol, elem), )) for elem in self.set)
Example #21
0
 def _intersect(self, other):
     if other.is_Interval:
         s = FiniteSet(range(ceiling(other.left), floor(other.right) + 1))
         return s.intersect(other) # take out endpoints if open interval
     return None
Example #22
0
 def symbols(self):
     return FiniteSet(sym for sym, val in self.elements)
Example #23
0
 def symbols(self):
     return FiniteSet(self.symbol)
Example #24
0
 def symbols(self):
     return FiniteSet(sym for domain in self.domains
                      for sym in domain.symbols)
Example #25
0
 def __new__(cls, symbol, set):
     if not isinstance(set, FiniteSet):
         set = FiniteSet(*set)
     return Basic.__new__(cls, symbol, set)
Example #26
0
 def __new__(cls, symbols, *args):
     symbols = FiniteSet(*symbols)
     return Basic.__new__(cls, symbols, *args)
Example #27
0
 def __new__(cls, elements):
     elements = FiniteSet(*elements)
     symbols = FiniteSet(sym for sym, val in elements)
     return RandomDomain.__new__(cls, symbols, elements)
Example #28
0
def test_fun():
    assert (FiniteSet(
        TransformationSet(Lambda(x, sin(pi * x / 4)),
                          Range(-10,
                                11))) == FiniteSet(-1, -sqrt(2) / 2, 0,
                                                   sqrt(2) / 2, 1))
Example #29
0
 def dict(self):
     return FiniteSet(Dict(dict(el)) for el in self.elements)
Example #30
0
def test_sympy__core__sets__FiniteSet():
    from sympy.core.sets import FiniteSet
    assert _test_args(FiniteSet(x, y, z))
Example #31
0
 def __new__(cls, symbol, set):
     return RandomDomain.__new__(cls, (symbol, ), FiniteSet(*set))