Пример #1
0
def test_discreteuniform():
    # Symbolic
    a, b, c, t = symbols('a b c t')
    X = DiscreteUniform('X', [a, b, c])

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

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

    # Numeric
    assert E(Y) == S('-1/2')
    assert variance(Y) == S('33/4')

    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 dict(density(Die('D', 6)).items()) == \
           dict(density(DiscreteUniform('U', range(1, 7))).items())

    assert characteristic_function(X)(
        t) == exp(I * a * t) / 3 + exp(I * b * t) / 3 + exp(I * c * t) / 3
    assert moment_generating_function(X)(
        t) == exp(a * t) / 3 + exp(b * t) / 3 + exp(c * t) / 3
Пример #2
0
def test_discreteuniform():
    # Symbolic
    a, b, c, t = symbols("a b c t")
    X = DiscreteUniform("X", [a, b, c])

    assert E(X) == (a + b + c) / 3
    assert (simplify(
        variance(X) - ((a**2 + b**2 + c**2) / 3 -
                       (a / 3 + b / 3 + c / 3)**2)) == 0)
    assert P(Eq(X, a)) == P(Eq(X, b)) == P(Eq(X, c)) == S("1/3")

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

    # Numeric
    assert E(Y) == S("-1/2")
    assert variance(Y) == S("33/4")

    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 dict(density(Die("D", 6)).items()) == dict(
        density(DiscreteUniform("U", range(1, 7))).items())

    assert (characteristic_function(X)(t) == exp(I * a * t) / 3 +
            exp(I * b * t) / 3 + exp(I * c * t) / 3)
    assert (moment_generating_function(X)(t) == exp(a * t) / 3 +
            exp(b * t) / 3 + exp(c * t) / 3)
Пример #3
0
def test_sampling_methods():
    distribs_random = [DiscreteUniform("D", list(range(5)))]
    distribs_scipy = [Hypergeometric("H", 1, 1, 1)]
    distribs_pymc3 = [BetaBinomial("B", 1, 1, 1)]

    size = 5

    for X in distribs_random:
        sam = X.pspace.distribution._sample_random(size)
        for i in range(size):
            assert sam[i] in X.pspace.domain.set

    scipy = import_module('scipy')
    if not scipy:
        skip('Scipy not installed. Abort tests for _sample_scipy.')
    else:
        for X in distribs_scipy:
            sam = X.pspace.distribution._sample_scipy(size)
            for i in range(size):
                assert sam[i] in X.pspace.domain.set
    pymc3 = import_module('pymc3')
    if not pymc3:
        skip('PyMC3 not installed. Abort tests for _sample_pymc3.')
    else:
        for X in distribs_pymc3:
            sam = X.pspace.distribution._sample_pymc3(size)
            for i in range(size):
                assert sam[i] in X.pspace.domain.set
Пример #4
0
def test_sample_iter():

    X = Normal('X', 0, 1)
    Y = DiscreteUniform('Y', [1, 2, 7])
    Z = Poisson('Z', 2)

    scipy = import_module('scipy')
    if not scipy:
        skip('Scipy is not installed. Abort tests')
    expr = X**2 + 3
    iterator = sample_iter(expr)

    expr2 = Y**2 + 5 * Y + 4
    iterator2 = sample_iter(expr2)

    expr3 = Z**3 + 4
    iterator3 = sample_iter(expr3)

    def is_iterator(obj):
        if (hasattr(obj, '__iter__')
                and (hasattr(obj, 'next') or hasattr(obj, '__next__'))
                and callable(obj.__iter__) and obj.__iter__() is obj):
            return True
        else:
            return False

    assert is_iterator(iterator)
    assert is_iterator(iterator2)
    assert is_iterator(iterator3)
Пример #5
0
def test_sample_scipy():
    distribs_scipy = [
        FiniteRV('F', {
            1: S.Half,
            2: Rational(1, 4),
            3: Rational(1, 4)
        }),
        DiscreteUniform("Y", list(range(5))),
        Die("D"),
        Bernoulli("Be", 0.3),
        Binomial("Bi", 5, 0.4),
        BetaBinomial("Bb", 2, 1, 1),
        Hypergeometric("H", 1, 1, 1),
        Rademacher("R")
    ]

    size = 3
    scipy = import_module('scipy')
    if not scipy:
        skip('Scipy not installed. Abort tests for _sample_scipy.')
    else:
        for X in distribs_scipy:
            samps = sample(X, size=size)
            samps2 = sample(X, size=(2, 2))
            for sam in samps:
                assert sam in X.pspace.domain.set
            for i in range(2):
                for j in range(2):
                    assert samps2[i][j] in X.pspace.domain.set
Пример #6
0
def test_sample_iter():

    X = Normal("X", 0, 1)
    Y = DiscreteUniform("Y", [1, 2, 7])
    Z = Poisson("Z", 2)

    expr = X ** 2 + 3
    iterator = sample_iter(expr)

    expr2 = Y ** 2 + 5 * Y + 4
    iterator2 = sample_iter(expr2)

    expr3 = Z ** 3 + 4
    iterator3 = sample_iter(expr3)

    def is_iterator(obj):
        if (
            hasattr(obj, "__iter__")
            and (hasattr(obj, "next") or hasattr(obj, "__next__"))
            and callable(obj.__iter__)
            and obj.__iter__() is obj
        ):
            return True
        else:
            return False

    assert is_iterator(iterator)
    assert is_iterator(iterator2)
    assert is_iterator(iterator3)
Пример #7
0
def test_sample_scipy():
    distribs_scipy = [
        FiniteRV('F', {1: S.Half, 2: Rational(1, 4), 3: Rational(1, 4)}),
        DiscreteUniform("Y", list(range(5))),
        Die("D"),
        Bernoulli("Be", 0.3),
        Binomial("Bi", 5, 0.4),
        BetaBinomial("Bb", 2, 1, 1),
        Hypergeometric("H", 1, 1, 1),
        Rademacher("R")
    ]

    size = 3
    numsamples = 5
    scipy = import_module('scipy')
    if not scipy:
        skip('Scipy not installed. Abort tests for _sample_scipy.')
    else:
        with ignore_warnings(UserWarning): ### TODO: Restore tests once warnings are removed
            h_sample = list(sample(Hypergeometric("H", 1, 1, 1), size=size, numsamples=numsamples))
            assert len(h_sample) == numsamples
            for X in distribs_scipy:
                samps = next(sample(X, size=size))
                samps2 = next(sample(X, size=(2, 2)))
                for sam in samps:
                    assert sam in X.pspace.domain.set
                for i in range(2):
                    for j in range(2):
                        assert samps2[i][j] in X.pspace.domain.set
Пример #8
0
def test_sample_iter():

    X = Normal('X', 0, 1)
    Y = DiscreteUniform('Y', [1, 2, 7])
    Z = Poisson('Z', 2)

    expr = X**2 + 3
    iterator = sample_iter(expr)

    expr2 = Y**2 + 5 * Y + 4
    iterator2 = sample_iter(expr2)

    expr3 = Z**3 + 4
    iterator3 = sample_iter(expr3)

    def is_iterator(obj):
        if (hasattr(obj, '__iter__')
                and (hasattr(obj, 'next') or hasattr(obj, '__next__'))
                and callable(obj.__iter__) and obj.__iter__() is obj):
            return True
        else:
            return False

    assert is_iterator(iterator)
    assert is_iterator(iterator2)
    assert is_iterator(iterator3)
Пример #9
0
def test_discreteuniform():
    # Symbolic
    a, b, c = symbols('a b c')
    X = DiscreteUniform('X', [a, b, c])

    assert E(X) == (a + b + c) / 3
    assert variance(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('Y', range(-5, 5))

    # Numeric
    assert E(Y) == S('-1/2')
    assert variance(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('D', 6)) == density(DiscreteUniform('U', range(1, 7)))
Пример #10
0
def test_moment_generating_function():

    X = Normal('X', 0, 1)
    Y = DiscreteUniform('Y', [1, 2, 7])
    Z = Poisson('Z', 2)
    t = symbols('_t')
    P = Lambda(t, exp(t**2 / 2))
    Q = Lambda(t, (exp(7 * t) / 3 + exp(2 * t) / 3 + exp(t) / 3))
    R = Lambda(t, exp(2 * exp(t) - 2))

    assert moment_generating_function(X).dummy_eq(P)
    assert moment_generating_function(Y).dummy_eq(Q)
    assert moment_generating_function(Z).dummy_eq(R)
Пример #11
0
def test_moment_generating_function():

    X = Normal("X", 0, 1)
    Y = DiscreteUniform("Y", [1, 2, 7])
    Z = Poisson("Z", 2)
    t = symbols("_t")
    P = Lambda(t, exp(t ** 2 / 2))
    Q = Lambda(t, (exp(7 * t) / 3 + exp(2 * t) / 3 + exp(t) / 3))
    R = Lambda(t, exp(2 * exp(t) - 2))

    assert moment_generating_function(X) == P
    assert moment_generating_function(Y) == Q
    assert moment_generating_function(Z) == R
Пример #12
0
def test_characteristic_function():
    #  Imports I from sympy
    from sympy.core.numbers import I
    X = Normal('X', 0, 1)
    Y = DiscreteUniform('Y', [1, 2, 7])
    Z = Poisson('Z', 2)
    t = symbols('_t')
    P = Lambda(t, exp(-t**2 / 2))
    Q = Lambda(t, exp(7 * t * I) / 3 + exp(2 * t * I) / 3 + exp(t * I) / 3)
    R = Lambda(t, exp(2 * exp(t * I) - 2))

    assert characteristic_function(X).dummy_eq(P)
    assert characteristic_function(Y).dummy_eq(Q)
    assert characteristic_function(Z).dummy_eq(R)
Пример #13
0
def test_characteristic_function():
    #  Imports I from sympy
    from sympy import I

    X = Normal("X", 0, 1)
    Y = DiscreteUniform("Y", [1, 2, 7])
    Z = Poisson("Z", 2)
    t = symbols("_t")
    P = Lambda(t, exp(-(t ** 2) / 2))
    Q = Lambda(t, exp(7 * t * I) / 3 + exp(2 * t * I) / 3 + exp(t * I) / 3)
    R = Lambda(t, exp(2 * exp(t * I) - 2))

    assert characteristic_function(X) == P
    assert characteristic_function(Y) == Q
    assert characteristic_function(Z) == R