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
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)
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
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)
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
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)
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
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)
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)))
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)
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
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)
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