|
18 | 18 | import theano
|
19 | 19 | import theano.tensor as tt
|
20 | 20 |
|
| 21 | +from scipy.special import logsumexp as scipy_logsumexp |
| 22 | + |
21 | 23 | from pymc3.math import (
|
22 | 24 | LogDet,
|
23 | 25 | cartesian,
|
|
30 | 32 | log1mexp_numpy,
|
31 | 33 | log1pexp,
|
32 | 34 | logdet,
|
| 35 | + logsumexp, |
33 | 36 | probit,
|
34 | 37 | )
|
35 | 38 | from pymc3.tests.helpers import SeededTest, verify_grad
|
@@ -207,3 +210,27 @@ def test_expand_packed_triangular():
|
207 | 210 | assert np.all(expand_upper.eval({packed: upper_packed}) == upper)
|
208 | 211 | assert np.all(expand_diag_lower.eval({packed: lower_packed}) == floatX(np.diag(vals)))
|
209 | 212 | assert np.all(expand_diag_upper.eval({packed: upper_packed}) == floatX(np.diag(vals)))
|
| 213 | + |
| 214 | + |
| 215 | +@pytest.mark.parametrize( |
| 216 | + "values, axis, keepdims", |
| 217 | + [ |
| 218 | + (np.array([-4, -2]), None, True), |
| 219 | + (np.array([-np.inf, -2]), None, True), |
| 220 | + (np.array([-2, np.inf]), None, True), |
| 221 | + (np.array([-np.inf, -np.inf]), None, True), |
| 222 | + (np.array([np.inf, np.inf]), None, True), |
| 223 | + (np.array([-np.inf, np.inf]), None, True), |
| 224 | + (np.array([[-np.inf, -np.inf], [-np.inf, -np.inf]]), None, True), |
| 225 | + (np.array([[-np.inf, -np.inf], [-np.inf, -np.inf]]), 0, True), |
| 226 | + (np.array([[-np.inf, -np.inf], [-np.inf, -np.inf]]), 1, True), |
| 227 | + (np.array([[-np.inf, -np.inf], [-np.inf, -np.inf]]), 0, False), |
| 228 | + (np.array([[-np.inf, -np.inf], [-np.inf, -np.inf]]), 1, False), |
| 229 | + (np.array([[-2, np.inf], [-np.inf, -np.inf]]), 0, True), |
| 230 | + ], |
| 231 | +) |
| 232 | +def test_logsumexp(values, axis, keepdims): |
| 233 | + npt.assert_almost_equal( |
| 234 | + logsumexp(values, axis=axis, keepdims=keepdims).eval(), |
| 235 | + scipy_logsumexp(values, axis=axis, keepdims=keepdims), |
| 236 | + ) |
0 commit comments