|
17 | 17 | Flat,
|
18 | 18 | Gamma,
|
19 | 19 | Geometric,
|
| 20 | + Gumbel, |
20 | 21 | HalfCauchy,
|
21 | 22 | HalfFlat,
|
22 | 23 | HalfNormal,
|
|
25 | 26 | Kumaraswamy,
|
26 | 27 | Laplace,
|
27 | 28 | Logistic,
|
| 29 | + LogitNormal, |
28 | 30 | LogNormal,
|
29 | 31 | NegativeBinomial,
|
30 | 32 | Normal,
|
31 | 33 | Pareto,
|
32 | 34 | Poisson,
|
33 | 35 | StudentT,
|
| 36 | + Triangular, |
34 | 37 | TruncatedNormal,
|
35 | 38 | Uniform,
|
36 | 39 | Wald,
|
|
40 | 43 | )
|
41 | 44 | from pymc.distributions.shape_utils import rv_size_is_none
|
42 | 45 | from pymc.initial_point import make_initial_point_fn
|
| 46 | +from pymc.math import invlogit |
43 | 47 | from pymc.model import Model
|
44 | 48 |
|
45 | 49 |
|
@@ -650,3 +654,67 @@ def test_dirichlet_moment(a, size, expected):
|
650 | 654 | with Model() as model:
|
651 | 655 | Dirichlet("x", a=a, size=size)
|
652 | 656 | assert_moment_is_expected(model, expected)
|
| 657 | + |
| 658 | + |
| 659 | +@pytest.mark.parametrize( |
| 660 | + "mu, beta, size, expected", |
| 661 | + [ |
| 662 | + (0, 2, None, 2 * np.euler_gamma), |
| 663 | + (1, np.arange(1, 4), None, 1 + np.arange(1, 4) * np.euler_gamma), |
| 664 | + (np.arange(5), 2, None, np.arange(5) + 2 * np.euler_gamma), |
| 665 | + (1, 2, 5, np.full(5, 1 + 2 * np.euler_gamma)), |
| 666 | + ( |
| 667 | + np.arange(5), |
| 668 | + np.arange(1, 6), |
| 669 | + (2, 5), |
| 670 | + np.full((2, 5), np.arange(5) + np.arange(1, 6) * np.euler_gamma) |
| 671 | + ) |
| 672 | + ], |
| 673 | +) |
| 674 | +def test_gumbel_moment(mu, beta, size, expected): |
| 675 | + with Model() as model: |
| 676 | + Gumbel("x", mu=mu, beta=beta, size=size) |
| 677 | + assert_moment_is_expected(model, expected) |
| 678 | + |
| 679 | + |
| 680 | +@pytest.mark.parametrize( |
| 681 | + "c, lower, upper, size, expected", |
| 682 | + [ |
| 683 | + (1, 0, 5, None, 2), |
| 684 | + (3, np.arange(-3, 6, 3), np.arange(3, 12, 3), None, np.array([1, 3, 5])), |
| 685 | + (np.arange(-3, 6, 3), -3, 3, None, np.array([-1, 0, 1])), |
| 686 | + (3, -3, 6, 5, np.full(5, 2)), |
| 687 | + ( |
| 688 | + np.arange(-3, 6, 3), |
| 689 | + np.arange(-9, -2, 3), |
| 690 | + np.arange(3, 10, 3), |
| 691 | + (2, 3), |
| 692 | + np.full((2, 3), np.array([-3, 0, 3])) |
| 693 | + ) |
| 694 | + ], |
| 695 | +) |
| 696 | +def test_triangular_moment(c, lower, upper, size, expected): |
| 697 | + with Model() as model: |
| 698 | + Triangular("x", c=c, lower=lower, upper=upper, size=size) |
| 699 | + assert_moment_is_expected(model, expected) |
| 700 | + |
| 701 | + |
| 702 | +@pytest.mark.parametrize( |
| 703 | + "mu, sigma, size, expected", |
| 704 | + [ |
| 705 | + (1, 2, None, special.expit(1)), |
| 706 | + (0, np.arange(1, 5), None, special.expit(np.zeros(4))), |
| 707 | + (np.arange(4), 1, None, special.expit(np.arange(4))), |
| 708 | + (1, 5, 4, special.expit(np.ones(4))), |
| 709 | + ( |
| 710 | + np.arange(4), |
| 711 | + np.arange(1, 5), |
| 712 | + (2, 4), |
| 713 | + np.full((2, 4), special.expit(np.arange(4))) |
| 714 | + ) |
| 715 | + ], |
| 716 | +) |
| 717 | +def test_logitnormal_moment(mu, sigma, size, expected): |
| 718 | + with Model() as model: |
| 719 | + LogitNormal("x", mu=mu, sigma=sigma, size=size) |
| 720 | + assert_moment_is_expected(model, expected) |
0 commit comments