diff --git a/pytensor/tensor/nlinalg.py b/pytensor/tensor/nlinalg.py index d46f576a71..30a3c8d5c8 100644 --- a/pytensor/tensor/nlinalg.py +++ b/pytensor/tensor/nlinalg.py @@ -246,7 +246,7 @@ def perform(self, node, inputs, outputs): (x,) = inputs (sign, det) = outputs try: - sign[0], det[0] = (z.astype(x.dtype) for z in np.linalg.slogdet(x)) + sign[0], det[0] = (np.array(z, dtype=x.dtype) for z in np.linalg.slogdet(x)) except Exception: print("Failed to compute determinant", x) raise @@ -1186,6 +1186,7 @@ def kron(a, b): "lstsq", "matrix_power", "norm", + "slogdet", "tensorinv", "tensorsolve", "kron", diff --git a/tests/tensor/test_nlinalg.py b/tests/tensor/test_nlinalg.py index bf4bb1a904..8a0c6c6596 100644 --- a/tests/tensor/test_nlinalg.py +++ b/tests/tensor/test_nlinalg.py @@ -387,6 +387,11 @@ def test_slogdet(): sign, det = np.linalg.slogdet(r) assert np.equal(sign, f_sign) assert np.allclose(det, f_det) + # check numpy array types is returned + # see https://github.com/pymc-devs/pytensor/issues/799 + sign, logdet = slogdet(x) + det = sign * pytensor.tensor.exp(logdet) + assert_array_almost_equal(det.eval({x: [[1]]}), np.array(1.0)) def test_trace():