Exemple #1
0
def test_conditional_1d():
    X = Normal(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)
Exemple #2
0
def test_bernoulli():
    p, a, b = symbols('p a b')
    X = Bernoulli(p, a, b, symbol='B')

    assert E(X) == a * p + b * (-p + 1)
    assert Density(X)[a] == p
    assert Density(X)[b] == 1 - p

    X = Bernoulli(p, 1, 0, symbol='B')

    assert E(X) == p
    assert Var(X) == -p**2 + p
    E(a * X + b) == a * E(X) + b
    Var(a * X + b) == a**2 * Var(X)
Exemple #3
0
def test_FiniteRV():
    F = FiniteRV({1: S.Half, 2: S.One / 4, 3: S.One / 4})

    assert Density(F) == {S(1): S.Half, S(2): S.One / 4, S(3): S.One / 4}
    assert P(F >= 2) == S.Half

    assert pspace(F).domain.as_boolean() == Or(
        *[Eq(F.symbol, i) for i in [1, 2, 3]])
Exemple #4
0
def test_pareto():

    xm, beta = symbols('xm beta', positive=True, bounded=True)
    alpha = beta + 5
    X = Pareto(xm, alpha)

    density = Density(X)
    x = Symbol('x')
    assert density(x) == x**(-(alpha+1))*xm**(alpha)*(alpha)
Exemple #5
0
def test_coins():
    C, D = Coin(), Coin()
    H, T = sorted(Density(C).keys())
    assert P(Eq(C, D)) == S.Half
    assert Density(Tuple(C, D)) == {
        (H, H): S.One / 4,
        (H, T): S.One / 4,
        (T, H): S.One / 4,
        (T, T): S.One / 4
    }
    assert Density(C) == {H: S.Half, T: S.Half}

    E = Coin(S.One / 10)
    assert P(Eq(E, H)) == S(1) / 10

    d = pspace(C).domain

    assert d.as_boolean() == Or(Eq(C.symbol, H), Eq(C.symbol, T))

    raises(ValueError, "P(C>D)")  # Can't intelligently compare H to T
Exemple #6
0
def test_discreteuniform():
    # Symbolic
    a, b, c = symbols('a b c')
    X = DiscreteUniform([a, b, c])

    assert E(X) == (a + b + c) / 3
    assert Var(X) == (a**2 + b**2 + c**2) / 3 - (a / 3 + b / 3 + c / 3)**2
    assert P(Eq(X, a)) == P(Eq(X, b)) == P(Eq(X, c)) == S('1/3')

    Y = DiscreteUniform(range(-5, 5))

    # Numeric
    assert E(Y) == S('-1/2')
    assert Var(Y) == S('33/4')
    assert Skewness(Y) == 0
    for x in range(-5, 5):
        assert P(Eq(Y, x)) == S('1/10')
        assert P(Y <= x) == S(x + 6) / 10
        assert P(Y >= x) == S(5 - x) / 10

    assert Density(Die(6)) == Density(DiscreteUniform(range(1, 7)))
Exemple #7
0
def test_dice():
    X, Y, Z = Die(6), Die(6), Die(6)
    a, b = symbols('a b')

    assert E(X) == 3 + S.Half
    assert Var(X) == S(35) / 12
    assert E(X + Y) == 7
    assert E(X + X) == 7
    assert E(a * X + b) == a * E(X) + b
    assert Var(X + Y) == Var(X) + Var(Y)
    assert Var(X + X) == 4 * Var(X)
    assert Covar(X, Y) == S.Zero
    assert Covar(X, X + Y) == Var(X)
    assert Density(Eq(cos(X * S.Pi), 1))[True] == S.Half

    assert P(X > 3) == S.Half
    assert P(2 * X > 6) == S.Half
    assert P(X > Y) == S(5) / 12
    assert P(Eq(X, Y)) == P(Eq(X, 1))

    assert E(X, X > 3) == 5
    assert E(X, Y > 3) == E(X)
    assert E(X + Y, Eq(X, Y)) == E(2 * X)
    assert E(X + Y - Z, 2 * X > Y + 1) == S(49) / 12

    assert P(X > 3, X > 3) == S.One
    assert P(X > Y, Eq(Y, 6)) == S.Zero
    assert P(Eq(X + Y, 12)) == S.One / 36
    assert P(Eq(X + Y, 12), Eq(X, 6)) == S.One / 6

    assert Density(X + Y) == Density(Y + Z) != Density(X + X)
    d = Density(2 * X + Y**Z)
    assert d[S(22)] == S.One / 108 and d[S(4100)] == S.One / 216 and S(
        3130) not in d

    assert pspace(X).domain.as_boolean() == Or(
        *[Eq(X.symbol, i) for i in [1, 2, 3, 4, 5, 6]])

    assert Where(X > 3).set == FiniteSet(4, 5, 6)
Exemple #8
0
def test_single_normal():
    mu = Symbol('mu', real=True, bounded=True)
    sigma = Symbol('sigma', real=True, positive=True, bounded=True)
    X = Normal(0,1)
    Y = X*sigma + mu

    assert simplify(E(Y)) == mu
    assert simplify(Var(Y)) == sigma**2
    pdf = Density(Y)
    x = Symbol('x')
    assert pdf(x) == 2**S.Half*exp(-(x - mu)**2/(2*sigma**2))/(2*pi**S.Half*sigma)

    assert P(X**2 < 1) == erf(2**S.Half/2)

    assert E(X, Eq(X, mu)) == mu
Exemple #9
0
def test_hypergeometric_numeric():
    for N in range(1, 5):
        for m in range(0, N + 1):
            for n in range(1, N + 1):
                X = Hypergeometric(N, m, n)
                N, m, n = map(sympify, (N, m, n))
                assert sum(Density(X).values()) == 1
                assert E(X) == n * m / N
                if N > 1:
                    assert Var(X) == n * (m / N) * (N - m) / N * (N - n) / (N -
                                                                            1)
                # Only test for skewness when defined
                if N > 2 and 0 < m < N and n < N:
                    assert Eq(
                        Skewness(X),
                        simplify((N - 2 * m) * sqrt(N - 1) * (N - 2 * n) /
                                 (sqrt(n * m * (N - m) * (N - n)) * (N - 2))))
Exemple #10
0
def test_beta():
    a, b = symbols('alpha beta', positive=True)

    B = Beta(a, b)

    assert pspace(B).domain.set == Interval(0, 1)

    dens = Density(B)
    x = Symbol('x')
    assert dens(x) == x**(a-1)*(1-x)**(b-1) / beta(a,b)

    # This is too slow
    # assert E(B) == a / (a + b)
    # assert Var(B) == (a*b) / ((a+b)**2 * (a+b+1))

    # Full symbolic solution is too much, test with numeric version
    a, b = 1, 2
    B = Beta(a, b)
    assert E(B) == a / S(a + b)
    assert Var(B) == (a*b) / S((a+b)**2 * (a+b+1))
Exemple #11
0
def test_normality():
    X, Y = Normal(0, 1), Normal(0, 1)
    x, z = symbols('x, z', real=True)
    density = Density(X - Y, Eq(X + Y, z))

    assert integrate(density(x), (x, -oo, oo)) == 1
Exemple #12
0
def test_given():
    X = Die(6)
    Density(X, X > 5) == {S(6): S(1)}
    Where(X > 2, X > 5).as_boolean() == Eq(X.symbol, 6)
    Sample(X, X > 5) == 6