def test_diag(): """ Test that linalg.diag has the same behavior as numpy.diag. numpy.diag has two behaviors: (1) when given a vector, it returns a matrix with that vector as the diagonal. (2) when given a matrix, returns a vector which is the diagonal of the matrix. (1) and (2) are tested by test_alloc_diag and test_extract_diag respectively. This test makes sure that linalg.diag instantiates the right op based on the dimension of the input. """ # test that it builds a matrix with given diagonal when using vector inputs x = theano.tensor.vector() y = diag(x) assert y.owner.op.__class__ == AllocDiag # test that it extracts the diagonal when using matrix input x = theano.tensor.matrix() y = extract_diag(x) assert y.owner.op.__class__ == ExtractDiag # other types should raise error x = theano.tensor.tensor3() ok = False try: y = extract_diag(x) except TypeError: ok = True assert ok
def test_extract_diag(): rng = numpy.random.RandomState(utt.fetch_seed()) x = theano.tensor.matrix() g = extract_diag(x) f = theano.function([x], g) for shp in [(2, 3), (3, 2), (3, 3), (1, 1), (0, 0)]: m = rng.rand(*shp).astype(config.floatX) v = numpy.diag(m) r = f(m) # The right diagonal is extracted assert (r == v).all() # Test we accept only matrix xx = theano.tensor.vector() ok = False try: extract_diag(xx) except TypeError: ok = True assert ok # Test infer_shape f = theano.function([x], g.shape) topo = f.maker.fgraph.toposort() if config.mode != 'FAST_COMPILE': assert sum([node.op.__class__ == ExtractDiag for node in topo]) == 0 for shp in [(2, 3), (3, 2), (3, 3)]: m = rng.rand(*shp).astype(config.floatX) assert f(m) == min(shp)
def test_extract_diag_empty(self): c = self.shared(numpy.array([[], []], self.floatX)) f = theano.function([], extract_diag(c), mode=self.mode) assert [isinstance(node.inputs[0].type, self.type) for node in f.maker.fgraph.toposort() if isinstance(node.op, ExtractDiag)] == [True]
def test_diag(self): # test that it builds a matrix with given diagonal when using # vector inputs x = theano.tensor.vector() y = diag(x) assert y.owner.op.__class__ == AllocDiag # test that it extracts the diagonal when using matrix input x = theano.tensor.matrix() y = extract_diag(x) assert y.owner.op.__class__ == ExtractDiag # other types should raise error x = theano.tensor.tensor3() ok = False try: y = extract_diag(x) except TypeError: ok = True assert ok
def test_extract_diag(self): rng = numpy.random.RandomState(utt.fetch_seed()) m = rng.rand(2, 3).astype(self.floatX) x = self.shared(m) g = extract_diag(x) f = theano.function([], g) assert [ isinstance(node.inputs[0].type, self.type) for node in f.maker.fgraph.toposort() if isinstance(node.op, ExtractDiag) ] == [True] for shp in [(2, 3), (3, 2), (3, 3), (1, 1), (0, 0)]: m = rng.rand(*shp).astype(self.floatX) x.set_value(m) v = numpy.diag(m) r = f() # The right diagonal is extracted assert (r == v).all() # Test we accept only matrix xx = theano.tensor.vector() ok = False try: extract_diag(xx) except TypeError: ok = True assert ok # Test infer_shape f = theano.function([], g.shape) topo = f.maker.fgraph.toposort() if config.mode != 'FAST_COMPILE': assert sum([node.op.__class__ == ExtractDiag for node in topo]) == 0 for shp in [(2, 3), (3, 2), (3, 3)]: m = rng.rand(*shp).astype(self.floatX) x.set_value(m) assert f() == min(shp)
def test_extract_diag(self): rng = numpy.random.RandomState(utt.fetch_seed()) m = rng.rand(2, 3).astype(self.floatX) x = self.shared(m) g = extract_diag(x) f = theano.function([], g) assert [isinstance(node.inputs[0].type, self.type) for node in f.maker.fgraph.toposort() if isinstance(node.op, ExtractDiag)] == [True] for shp in [(2, 3), (3, 2), (3, 3), (1, 1), (0, 0)]: m = rng.rand(*shp).astype(self.floatX) x.set_value(m) v = numpy.diag(m) r = f() # The right diagonal is extracted assert (r == v).all() # Test we accept only matrix xx = theano.tensor.vector() ok = False try: extract_diag(xx) except TypeError: ok = True assert ok # Test infer_shape f = theano.function([], g.shape) topo = f.maker.fgraph.toposort() if config.mode != 'FAST_COMPILE': assert sum([node.op.__class__ == ExtractDiag for node in topo]) == 0 for shp in [(2, 3), (3, 2), (3, 3)]: m = rng.rand(*shp).astype(self.floatX) x.set_value(m) assert f() == min(shp)
def test_extract_diag_empty(): c = theano.tensor.constant(numpy.array([[], []], 'int32')) extract_diag(c).eval()