def test_tensorsolve(): rng = np.random.RandomState(utt.fetch_seed()) A = tensor.tensor4("A", dtype=theano.config.floatX) B = tensor.matrix("B", dtype=theano.config.floatX) X = tensorsolve(A, B) fn = function([A, B], [X]) # slightly modified example from np.linalg.tensorsolve docstring a = np.eye(2 * 3 * 4).astype(theano.config.floatX) a.shape = (2 * 3, 4, 2, 3 * 4) b = rng.rand(2 * 3, 4).astype(theano.config.floatX) n_x = np.linalg.tensorsolve(a, b) t_x = fn(a, b) assert _allclose(n_x, t_x) # check the type upcast now C = tensor.tensor4("C", dtype='float32') D = tensor.matrix("D", dtype='float64') Y = tensorsolve(C, D) fn = function([C, D], [Y]) c = np.eye(2 * 3 * 4, dtype='float32') c.shape = (2 * 3, 4, 2, 3 * 4) d = rng.rand(2 * 3, 4).astype('float64') n_y = np.linalg.tensorsolve(c, d) t_y = fn(c, d) assert _allclose(n_y, t_y) assert n_y.dtype == Y.dtype # check the type upcast now E = tensor.tensor4("E", dtype='int32') F = tensor.matrix("F", dtype='float64') Z = tensorsolve(E, F) fn = function([E, F], [Z]) e = np.eye(2 * 3 * 4, dtype='int32') e.shape = (2 * 3, 4, 2, 3 * 4) f = rng.rand(2 * 3, 4).astype('float64') n_z = np.linalg.tensorsolve(e, f) t_z = fn(e, f) assert _allclose(n_z, t_z) assert n_z.dtype == Z.dtype