Пример #1
0
def test_ProductPSpace():
    X = Normal('X', 0, 1)
    Y = Normal('Y', 0, 1)
    px = X.pspace
    py = Y.pspace
    assert pspace(X + Y) == ProductPSpace(px, py)
    assert pspace(X + Y) == ProductPSpace(py, px)
Пример #2
0
def test_given():
    X = Normal('X', 0, 1)
    Y = Normal('Y', 0, 1)
    A = given(X, True)
    B = given(X, Y > 2)

    assert X == A == B
Пример #3
0
def test_pspace():
    X, Y = Normal('X', 0, 1), Normal('Y', 0, 1)

    pytest.raises(ValueError, lambda: pspace(5 + 3))
    pytest.raises(ValueError, lambda: pspace(x < 1))
    assert pspace(X) == X.pspace
    assert pspace(2*X + 1) == X.pspace
    assert pspace(2*X + Y) == ProductPSpace(Y.pspace, X.pspace)
Пример #4
0
def test_random_symbols():
    X, Y = Normal('X', 0, 1), Normal('Y', 0, 1)

    assert set(random_symbols(2*X + 1)) == {X}
    assert set(random_symbols(2*X + Y)) == {X, Y}
    assert set(random_symbols(2*X + Y.symbol)) == {X}
    assert set(random_symbols(2)) == set()

    assert X.is_commutative
Пример #5
0
def test_rs_swap():
    X = Normal('x', 0, 1)
    Y = Exponential('y', 1)

    XX = Normal('x', 0, 2)
    YY = Normal('y', 0, 3)

    expr = 2*X + Y
    assert expr.subs(rs_swap((X, Y), (YY, XX))) == 2*XX + YY
Пример #6
0
def test_Density():
    X = Die('X', 6)
    d = Density(X)
    assert d.doit() == density(X)
    r = Rational(1, 6)
    assert density(2*X).dict == {2: r, 4: r, 6: r, 8: r, 10: r, 12: r}

    X = Normal('X', 0, 1)
    Y = Normal('Y', 0, 1)
    assert str(density(X - Y, Y)(z)) == 'sqrt(2)*E**(-(Y + z)**2/2)/(2*sqrt(pi))'
Пример #7
0
def test_RandomSymbol():

    X = Normal('x', 0, 1)
    Y = Normal('x', 0, 2)
    assert X.symbol == Y.symbol
    assert X != Y

    assert X.name == X.symbol.name

    X = Normal('lambda', 0, 1)  # make sure we can use protected terms
    X = Normal('Lambda', 0, 1)  # make sure we can use Diofant terms
Пример #8
0
def test_dependence():
    X, Y = Die('X'), Die('Y')
    assert independent(X, 2*Y)
    assert not dependent(X, 2*Y)

    X, Y = Normal('X', 0, 1), Normal('Y', 0, 1)
    assert independent(X, Y)
    assert dependent(X, 2*X)

    # Create a dependency
    XX, YY = given(Tuple(X, Y), Eq(X + Y, 3))
    assert dependent(XX, YY)
Пример #9
0
def test_input_value_assertions():
    a, b = symbols('a b')
    p, q = symbols('p q', positive=True)

    pytest.raises(ValueError, lambda: Normal('x', 3, 0))
    pytest.raises(ValueError, lambda: Normal('x', a, b))
    Normal('X', a, p)  # No error raised
    pytest.raises(ValueError, lambda: Exponential('x', a))
    Exponential('Ex', p)  # No error raised
    for fn in [Pareto, Weibull, Beta, Gamma]:
        pytest.raises(ValueError, lambda: fn('x', a, p))
        pytest.raises(ValueError, lambda: fn('x', p, a))
        fn('x', p, q)  # No error raised
Пример #10
0
def test_RandomSymbol():
    pytest.raises(TypeError, lambda: RandomSymbol(0, 1))
    pytest.raises(TypeError, lambda: RandomSymbol(0, Symbol('x')))

    X = Normal('x', 0, 1)
    Y = Normal('x', 0, 2)
    assert X.symbol == Y.symbol
    assert X != Y

    assert X.name == X.symbol.name

    X = Normal('lambda', 0, 1)  # make sure we can use protected terms
    X = Normal('Lambda', 0, 1)  # make sure we can use Diofant terms

    pytest.raises(TypeError, lambda: Normal(1, 0, 1))
Пример #11
0
def test_unevaluated():
    X = Normal('x', 0, 1)
    assert E(X, evaluate=False) == (
        Integral(sqrt(2)*x*exp(-x**2/2)/(2*sqrt(pi)), (x, -oo, oo)))

    assert E(X + 1, evaluate=False) == (
        Integral(sqrt(2)*x*exp(-x**2/2)/(2*sqrt(pi)), (x, -oo, oo)) + 1)
Пример #12
0
def test_sample_iter():
    X = Normal('X', 0, 1)
    expr = X*X + 3
    assert all(_ > 3 for _ in sample_iter(expr, numsamples=3))
    assert all(_ > 5 for _ in sample_iter(expr, numsamples=3, condition=X > 2))
    pytest.raises(ValueError, lambda: tuple(sample_iter(expr, numsamples=3,
                                                        condition=X)))
Пример #13
0
def test_cdf():
    X = Normal('x', 0, 1)

    d = cdf(X)
    assert P(X < 1) == d(1)
    assert d(0) == Rational(1, 2)

    d = cdf(X, X > 0)  # given X>0
    assert d(0) == 0

    Y = Exponential('y', 10)
    d = cdf(Y)
    assert d(-5) == 0
    assert P(Y > 3) == 1 - d(3)

    pytest.raises(ValueError, lambda: cdf(X + Y))

    Z = Exponential('z', 1)
    f = cdf(Z)
    z = Symbol('z')
    assert f(z) == Piecewise((1 - exp(-z), z >= 0), (0, True))

    U = Uniform('x', 3, 5)
    u = cdf(U)
    assert u(z) == z/2 - Rational(3, 2)
Пример #14
0
def test_difficult_univariate():
    """ Since using solve in place of deltaintegrate we're able to perform
    substantially more complex density computations on single continuous random
    variables """
    x = Normal('x', 0, 1)
    assert density(x**3)
    assert density(exp(x**2))
    assert density(log(x))
Пример #15
0
def test_ContinuousRV():
    x = Symbol('x')
    pdf = sqrt(2)*exp(-x**2/2)/(2*sqrt(pi))  # Normal distribution
    # X and Y should be equivalent
    X = ContinuousRV(x, pdf)
    Y = Normal('y', 0, 1)

    assert variance(X) == variance(Y)
    assert P(X > 0) == P(Y > 0)
Пример #16
0
def test_symbolic():
    mu1, mu2 = symbols('mu1 mu2', real=True)
    s1, s2 = symbols('sigma1 sigma2', real=True, positive=True)
    rate = Symbol('lambda', real=True, positive=True)
    X = Normal('x', mu1, s1)
    Y = Normal('y', mu2, s2)
    Z = Exponential('z', rate)
    a, b, c = symbols('a b c', real=True)

    assert E(X) == mu1
    assert E(X + Y) == mu1 + mu2
    assert E(a*X + b) == a*E(X) + b
    assert variance(X) == s1**2
    assert simplify(variance(X + a*Y + b)) == variance(X) + a**2*variance(Y)

    assert E(Z) == 1/rate
    assert E(a*Z + b) == a*E(Z) + b
    assert E(X + a*Z + b) == mu1 + a/rate + b
Пример #17
0
def test_unevaluated_fail():
    X = Normal('x', 0, 1)
    assert P(X > 0, evaluate=False) == (
        Integral(sqrt(2)*exp(-x**2/2)/(2*sqrt(pi)), (x, 0, oo)))

    assert P(X > 0, X**2 < 1, evaluate=False) == (
        Integral(sqrt(2)*exp(-x**2/2)/(2*sqrt(pi) *
                                       Integral(sqrt(2)*exp(-x**2/2)/(2*sqrt(pi)),
                                                (x, -1, 1))), (x, 0, 1)))
Пример #18
0
def test_conditional_1d():
    X = Normal('x', 0, 1)
    Y = given(X, X >= 0)

    assert density(Y)(x) == 2 * density(X)(x)

    assert Y.pspace.domain.set == Interval(0, oo, right_open=True)
    assert E(Y) == sqrt(2/pi)
    assert E(X**2) == E(Y**2)
Пример #19
0
def test_conditional_1d():
    X = Normal('x', 0, 1)
    Y = given(X, X >= 0)

    assert density(Y) == 2 * density(X)

    assert Y.pspace.domain.set == Interval(0, oo)
    assert E(Y) == sqrt(2) / sqrt(pi)

    assert E(X**2) == E(Y**2)
Пример #20
0
def test_RandomDomain():
    X = Normal('x1', 0, 1)
    assert str(where(X > 0)) == "Domain: (0 < x1) & (x1 < oo)"

    D = Die('d1', 6)
    assert str(where(D > 4)) == "Domain: (Eq(d1, 5)) | (Eq(d1, 6))"

    A = Exponential('a', 1)
    B = Exponential('b', 1)
    assert str(pspace(Tuple(A, B)).domain) == "Domain: (0 <= a) & (0 <= b) & (a < oo) & (b < oo)"
Пример #21
0
def test_ContinuousDomain():
    X = Normal('x', 0, 1)
    assert where(X**2 <= 1).set == Interval(-1, 1)
    assert where(X**2 <= 1).symbol == X.symbol
    where(And(X**2 <= 1, X >= 0)).set == Interval(0, 1)
    pytest.raises(ValueError, lambda: where(sin(X) > 1))

    Y = given(X, X >= 0)

    assert Y.pspace.domain.set == Interval(0, oo, False, True)
Пример #22
0
def test_multiple_normal():
    X, Y = Normal('x', 0, 1), Normal('y', 0, 1)

    assert E(X + Y) == 0
    assert variance(X + Y) == 2
    assert variance(X + X) == 4
    assert covariance(X, Y) == 0
    assert covariance(2*X + Y, -X) == -2*variance(X)
    assert skewness(X) == 0
    assert skewness(X + Y) == 0
    assert correlation(X, Y) == 0
    assert correlation(X, X + Y) == correlation(X, X - Y)
    assert moment(X, 2) == 1
    assert cmoment(X, 3) == 0
    assert moment(X + Y, 4) == 12
    assert cmoment(X, 2) == variance(X)
    assert smoment(X*X, 2) == 1
    assert smoment(X + Y, 3) == skewness(X + Y)
    assert E(X, Eq(X + Y, 0)) == 0
    assert variance(X, Eq(X + Y, 0)) == Rational(1, 2)
Пример #23
0
def test_RandomDomain():
    X = Normal('x1', 0, 1)
    assert str(where(X > 0)) == "Domain: And(0 < x1, x1 < oo)"

    D = Die('d1', 6)
    assert str(where(D > 4)) == "Domain: Or(Eq(d1, 5), Eq(d1, 6))"

    A = Exponential('a', 1)
    B = Exponential('b', 1)
    assert str(pspace(Tuple(
        A, B)).domain) == "Domain: And(0 <= a, 0 <= b, a < oo, b < oo)"
Пример #24
0
def test_where():
    X, Y = Die('X'), Die('Y')
    Z = Normal('Z', 0, 1)

    assert where(Z**2 <= 1).set == Interval(-1, 1)
    assert where(
        Z**2 <= 1).as_boolean() == Interval(-1, 1).as_relational(Z.symbol)
    assert where(And(X > Y, Y > 4)).as_boolean() == And(
        Eq(X.symbol, 6), Eq(Y.symbol, 5))

    assert len(where(X < 3).set) == 2
    assert 1 in where(X < 3).set

    X, Y = Normal('X', 0, 1), Normal('Y', 0, 1)
    assert where(And(X**2 <= 1, X >= 0)).set == Interval(0, 1)
    XX = given(X, And(X**2 <= 1, X >= 0))
    assert XX.pspace.domain.set == Interval(0, 1)
    assert XX.pspace.domain.as_boolean() == \
        And(0 <= X.symbol, X.symbol**2 <= 1, -oo < X.symbol, X.symbol < oo)

    with pytest.raises(TypeError):
        XX = given(X, X + 3)
Пример #25
0
def test_ProductPSpace():
    X = Normal('X', 0, 1)
    Y = Normal('Y', 0, 1)
    px = X.pspace
    py = Y.pspace
    assert pspace(X + Y) == ProductPSpace(px, py)
    assert pspace(X + Y) == ProductPSpace(py, px)

    X = Die('X', 2)
    Y = Die('Y', 2)

    assert (pspace(X + Y).density ==
            Dict((frozenset({('X', 1), ('Y', 2)}), Rational(1, 4)),
                 (frozenset({('X', 1), ('Y', 1)}), Rational(1, 4)),
                 (frozenset({('X', 2), ('Y', 1)}), Rational(1, 4)),
                 (frozenset({('X', 2), ('Y', 2)}), Rational(1, 4))))
    d = pspace(X + Y).domain
    assert ((X.symbol, 1), (Y.symbol, 2)) in d
    assert ((X.symbol, 0), (Y.symbol, 2)) not in d

    Z = Die('Z', 2)
    d1 = pspace(X + Y).domain
    assert ProductDomain(d1, Z.pspace.domain) == pspace(X + Y + Z).domain
Пример #26
0
def test_Sample():
    X = Die('X', 6)
    Y = Normal('Y', 0, 1)

    assert sample(X) in [1, 2, 3, 4, 5, 6]
    assert sample(X + Y).is_Float

    assert P(X + Y > 0, Y < 0, numsamples=10).is_number
    assert P(X > 10, numsamples=10).is_number
    assert E(X + Y, numsamples=10).is_number
    assert variance(X + Y, numsamples=10).is_number

    pytest.raises(TypeError, lambda: P(Y > z, numsamples=5))

    assert P(sin(Y) <= 1, numsamples=10, modules=['math']) == 1
    assert P(sin(Y) <= 1, cos(Y) < 1, numsamples=10, modules=['math']) == 1

    assert all(i in range(1, 7) for i in density(X, numsamples=10))
    assert all(i in range(4, 7) for i in density(X, X > 3, numsamples=10))

    # Make sure this doesn't raise an error
    Y = Normal('Y', 0, 1)
    E(Sum(1/z**Y, (z, 1, oo)), Y > 2, numsamples=3, modules='mpmath')
Пример #27
0
def test_prefab_sampling():
    N = Normal('X', 0, 1)
    L = LogNormal('L', 0, 1)
    E = Exponential('Ex', 1)
    P = Pareto('P', 1, 3)
    W = Weibull('W', 1, 1)
    U = Uniform('U', 0, 1)
    B = Beta('B', 2, 5)
    G = Gamma('G', 1, 3)

    variables = [N, L, E, P, W, U, B, G]
    niter = 10
    for var in variables:
        for i in range(niter):
            assert sample(var) in var.pspace.domain.set
Пример #28
0
def test_single_normal():
    mu = Symbol('mu', real=True)
    sigma = Symbol('sigma', real=True, positive=True)
    X = Normal('x', 0, 1)
    Y = X*sigma + mu

    assert simplify(E(Y)) == mu
    assert simplify(variance(Y)) == sigma**2
    pdf = density(Y)
    x = Symbol('x')
    assert (pdf(x) ==
            sqrt(2)*exp(-(x - mu)**2/(2*sigma**2))/(2*sqrt(pi)*sigma))

    assert P(X**2 < 1) == erf(sqrt(2)/2)

    assert E(X, Eq(X, mu)) == mu
Пример #29
0
def test_overlap():
    X = Normal('x', 0, 1)
    Y = Normal('x', 0, 2)

    pytest.raises(ValueError, lambda: P(X > Y))
Пример #30
0
def test_RandomSymbol_diff():
    X = Normal('x', 0, 1)
    assert (2*X).diff(X)