def test_lognormal(): mean = Symbol('mu', real=True) std = Symbol('sigma', positive=True, real=True) X = LogNormal('x', mean, std) # The diofant integrator can't do this too well # assert E(X) == exp(mean+std**2/2) # assert variance(X) == (exp(std**2)-1) * exp(2*mean + std**2) # Right now, only density function and sampling works # Test sampling: Only e^mean in sample std of 0 for i in range(3): X = LogNormal('x', i, 0) assert sample(X) == N(exp(i)) # The diofant integrator can't do this too well # assert E(X) == mu = Symbol("mu", extended_real=True) sigma = Symbol("sigma", positive=True) X = LogNormal('x', mu, sigma) assert density(X)(x) == (sqrt(2)*exp(-(-mu + log(x))**2 / (2*sigma**2))/(2*x*sqrt(pi)*sigma)) X = LogNormal('x', 0, 1) # Mean 0, standard deviation 1 assert density(X)(x) == sqrt(2)*exp(-log(x)**2/2)/(2*x*sqrt(pi))
def test_lognormal(): mean = Symbol('mu', real=True) std = Symbol('sigma', positive=True, real=True) X = LogNormal('x', mean, std) # The diofant integrator can't do this too well # assert E(X) == exp(mean+std**2/2) # assert variance(X) == (exp(std**2)-1) * exp(2*mean + std**2) # Right now, only density function and sampling works # Test sampling: Only e^mean in sample std of 0 for i in range(3): X = LogNormal('x', i, 0) assert sample(X) == N(exp(i)) # The diofant integrator can't do this too well # assert E(X) == mu = Symbol('mu', extended_real=True) sigma = Symbol('sigma', positive=True) X = LogNormal('x', mu, sigma) assert density(X)(x) == (sqrt(2)*exp(-(-mu + log(x))**2 / (2*sigma**2))/(2*x*sqrt(pi)*sigma)) X = LogNormal('x', 0, 1) # Mean 0, standard deviation 1 assert density(X)(x) == sqrt(2)*exp(-log(x)**2/2)/(2*x*sqrt(pi))
def test_Sample(): X = Die('X', 6) Y = Normal('Y', 0, 1) z = Symbol('z') assert sample(X) in [1, 2, 3, 4, 5, 6] assert sample(X + Y).is_Float P(X + Y > 0, Y < 0, numsamples=10).is_number assert E(X + Y, numsamples=10).is_number assert variance(X + Y, numsamples=10).is_number pytest.raises(ValueError, lambda: P(Y > z, numsamples=5)) assert P(sin(Y) <= 1, numsamples=10) == 1 assert P(sin(Y) <= 1, cos(Y) < 1, numsamples=10) == 1 # Make sure this doesn't raise an error E(Sum(1 / z**Y, (z, 1, oo)), Y > 2, numsamples=3) 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))
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")
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
def test_given(): X = Die('X', 6) assert density(X, X > 5) == {6: 1} assert where(X > 2, X > 5).as_boolean() == Eq(X.symbol, 6) assert sample(X, X > 5) == 6
def test_sample(): z = Symbol('z') Z = ContinuousRV(z, exp(-z), set=Interval(0, oo)) assert sample(Z) in Z.pspace.domain.set sym, val = list(Z.pspace.sample().items())[0] assert sym == Z and val in Interval(0, oo)