def test_properties(self): a, b = dragon.Tensor(()), dragon.Tensor(()) self.assertEqual(dragon.Tensor(()).ndim, 0) self.assertEqual(dragon.Tensor(()).size, 1) self.assertEqual(dragon.Tensor(shape=(2,)).ndim, 1) self.assertEqual(dragon.Tensor(shape=(2,)).shape, (2,)) self.assertEqual(dragon.Tensor(shape=(2,)).size, 2) self.assertEqual(dragon.Tensor(shape=(2,), dtype='float32').dtype, 'float32') self.assertEqual(dragon.Tensor(None, symbolic=True).size, 0) self.assertEqual(dragon.Tensor((), symbolic=True).size, 1) self.assertEqual(dragon.Tensor(None, symbolic=True).shape, None) self.assertEqual(dragon.Tensor(shape=(2, None), symbolic=True).size, math.inf) self.assertEqual(dragon.Tensor(None, dtype='float32', symbolic=True).dtype, 'float32') self.assertEqual(dragon.Tensor(None, None, symbolic=True).dtype, None) self.assertNotEqual(a.__hash__(), b.__hash__()) self.assertEqual(a.__repr__(), b.__repr__()) self.assertNotEqual(a.__repr__(), dragon.Tensor((), symbolic=True).__repr__()) self.assertEqual(float(int(a)), float(b)) self.assertEqual(dragon.constant([2]).item(), 2) self.assertEqual(dragon.constant([2, 3]).tolist(), [2, 3]) try: _ = dragon.Tensor(None) except ValueError: pass b.requires_grad = True self.assertEqual(b.requires_grad, True)
def test_update_function(self): optimizer = dragon.optimizers.SGD(lr=1, momentum=0) try: _ = optimizer.op_type except KeyError: pass var = dragon.constant(1, dtype='float32') grad = dragon.constant(1, dtype='float32') with dragon.eager_mode(): optimizer.apply_gradients([(grad, var)]) with dragon.graph_mode(): optimizer.apply_gradients([(grad, var)]).run() self.assertEqual(float(var), -1.)
def test_register_alias(self): w = dragon.Workspace() with w.as_default(): x = dragon.constant(1) w.set_alias(x.id, 'test_register_alias/y') alias_impl = w.get_tensor('test_register_alias/y') self.assertEqual(int(alias_impl.ToNumpy()), 1)
def test_merge_form(self): w1, w2 = dragon.Workspace(), dragon.Workspace() with w1.as_default(): x = dragon.constant(0) w2.merge_from(w1) with w2.as_default(): self.assertEqual(int(x), 0)
def test_dlpack_converter(self): data = np.array([0., 1., 2.], 'float32') with dragon.device('cpu'): x = dragon.constant(data, copy=True) x_to_dlpack = dragon.dlpack.to_dlpack(x) x_from_dlpack = dragon.dlpack.from_dlpack(x_to_dlpack) self.assertEqual(x_from_dlpack.shape, data.shape) self.assertEqual(x_from_dlpack.dtype, str(data.dtype)) self.assertLessEqual(np.abs(x_from_dlpack.numpy() - data).max(), 1e-5)