Пример #1
0
 def probability(self, condition, **kwargs):
     cond_inv = False
     if isinstance(condition, Ne):
         condition = Eq(condition.args[0], condition.args[1])
         cond_inv = True
     elif isinstance(condition, And):  # they are independent
         return Mul(*[self.probability(arg) for arg in condition.args])
     elif isinstance(condition, Or):  # they are independent
         return Add(*[self.probability(arg) for arg in condition.args])
     expr = condition.lhs - condition.rhs
     rvs = random_symbols(expr)
     dens = self.compute_density(expr)
     if any([pspace(rv).is_Continuous for rv in rvs]):
         from sympy.stats.crv import SingleContinuousPSpace
         from sympy.stats.crv_types import ContinuousDistributionHandmade
         if expr in self.values:
             # Marginalize all other random symbols out of the density
             randomsymbols = tuple(set(self.values) - frozenset([expr]))
             symbols = tuple(rs.symbol for rs in randomsymbols)
             pdf = self.domain.integrate(self.pdf, symbols, **kwargs)
             return Lambda(expr.symbol, pdf)
         dens = ContinuousDistributionHandmade(dens)
         z = Dummy('z', real=True)
         space = SingleContinuousPSpace(z, dens)
         result = space.probability(condition.__class__(space.value, 0))
     else:
         from sympy.stats.drv import SingleDiscretePSpace
         from sympy.stats.drv_types import DiscreteDistributionHandmade
         dens = DiscreteDistributionHandmade(dens)
         z = Dummy('z', integer=True)
         space = SingleDiscretePSpace(z, dens)
         result = space.probability(condition.__class__(space.value, 0))
     return result if not cond_inv else S.One - result
Пример #2
0
def test_exponential():
    rate = Symbol('lambda', positive=True)
    X = Exponential('x', rate)
    p = Symbol("p", positive=True, real=True, finite=True)

    assert E(X) == 1 / rate
    assert variance(X) == 1 / rate**2
    assert skewness(X) == 2
    assert skewness(X) == smoment(X, 3)
    assert kurtosis(X) == 9
    assert kurtosis(X) == smoment(X, 4)
    assert smoment(2 * X, 4) == smoment(X, 4)
    assert moment(X, 3) == 3 * 2 * 1 / rate**3
    assert P(X > 0) is S.One
    assert P(X > 1) == exp(-rate)
    assert P(X > 10) == exp(-10 * rate)
    assert quantile(X)(p) == -log(1 - p) / rate

    assert where(X <= 1).set == Interval(0, 1)
    #Test issue 9970
    z = Dummy('z')
    assert P(X > z) == exp(-z * rate)
    assert P(X < z) == 0
    #Test issue 10076 (Distribution with interval(0,oo))
    x = Symbol('x')
    _z = Dummy('_z')
    b = SingleContinuousPSpace(x, ExponentialDistribution(2))

    expected1 = Integral(2 * exp(-2 * _z), (_z, 3, oo))
    assert b.probability(x > 3, evaluate=False).dummy_eq(expected1) is True

    expected2 = Integral(2 * exp(-2 * _z), (_z, 0, 4))
    assert b.probability(x < 4, evaluate=False).dummy_eq(expected2) is True
Пример #3
0
 def probability(self, condition, **kwargs):
     cond_inv = False
     if isinstance(condition, Ne):
         condition = Eq(condition.args[0], condition.args[1])
         cond_inv = True
     expr = condition.lhs - condition.rhs
     rvs = random_symbols(expr)
     z = Dummy('z', real=True, Finite=True)
     dens = self.compute_density(expr)
     if any([pspace(rv).is_Continuous for rv in rvs]):
         from sympy.stats.crv import (ContinuousDistributionHandmade,
             SingleContinuousPSpace)
         if expr in self.values:
             # Marginalize all other random symbols out of the density
             randomsymbols = tuple(set(self.values) - frozenset([expr]))
             symbols = tuple(rs.symbol for rs in randomsymbols)
             pdf = self.domain.integrate(self.pdf, symbols, **kwargs)
             return Lambda(expr.symbol, pdf)
         dens = ContinuousDistributionHandmade(dens)
         space = SingleContinuousPSpace(z, dens)
         result = space.probability(condition.__class__(space.value, 0))
     else:
         from sympy.stats.drv import (DiscreteDistributionHandmade,
             SingleDiscretePSpace)
         dens = DiscreteDistributionHandmade(dens)
         space = SingleDiscretePSpace(z, dens)
         result = space.probability(condition.__class__(space.value, 0))
     return result if not cond_inv else S.One - result
Пример #4
0
def test_NormalDistribution():
    nd = NormalDistribution(0, 1)
    x = Symbol('x')
    assert nd.cdf(x) == erf(sqrt(2) * x / 2) / 2 + S.Half
    assert isinstance(nd.sample(), float) or nd.sample().is_Number
    assert nd.expectation(1, x) == 1
    assert nd.expectation(x, x) == 0
    assert nd.expectation(x**2, x) == 1
    #Test issue 10076
    a = SingleContinuousPSpace(x, NormalDistribution(2, 4))
    _z = Dummy('_z')

    expected1 = Integral(
        sqrt(2) * exp(-(_z - 2)**2 / 32) / (8 * sqrt(pi)), (_z, -oo, 1))
    assert a.probability(x < 1, evaluate=False).dummy_eq(expected1) is True

    expected2 = Integral(
        sqrt(2) * exp(-(_z - 2)**2 / 32) / (8 * sqrt(pi)), (_z, 1, oo))
    assert a.probability(x > 1, evaluate=False).dummy_eq(expected2) is True

    b = SingleContinuousPSpace(x, NormalDistribution(1, 9))

    expected3 = Integral(
        sqrt(2) * exp(-(_z - 1)**2 / 162) / (18 * sqrt(pi)), (_z, 6, oo))
    assert b.probability(x > 6, evaluate=False).dummy_eq(expected3) is True

    expected4 = Integral(
        sqrt(2) * exp(-(_z - 1)**2 / 162) / (18 * sqrt(pi)), (_z, -oo, 6))
    assert b.probability(x < 6, evaluate=False).dummy_eq(expected4) is True