From c5a776f43d037ea1f8f749710b64e9962b2c1833 Mon Sep 17 00:00:00 2001 From: lucasdelimanogueira Date: Tue, 7 May 2024 13:39:18 -0300 Subject: [PATCH] unit test autograd transpose, t and reshape then matmul --- norch/__pycache__/tensor.cpython-38.pyc | Bin 12633 -> 12633 bytes tests/test_autograd.py | 98 +++++++++++++----------- tests/test_operations.py | 29 +++++++ 3 files changed, 83 insertions(+), 44 deletions(-) diff --git a/norch/__pycache__/tensor.cpython-38.pyc b/norch/__pycache__/tensor.cpython-38.pyc index 3af7ab1071732245798ffccd78b1f1e5ce6e0ba8..af582eb902aaf34549696c99aa0d66c0a7384a10 100644 GIT binary patch delta 19 ZcmcbabTf%7l$V!_0SNLUHgfqJ0suOP1p5F0 delta 19 ZcmcbabTf%7l$V!_0SMfDHgfqJ0suK%1jhgX diff --git a/tests/test_autograd.py b/tests/test_autograd.py index 9a5b0d7..0615b4f 100644 --- a/tests/test_autograd.py +++ b/tests/test_autograd.py @@ -2,9 +2,12 @@ import unittest import norch from norch import utils import torch +import os class TestTensorAutograd(unittest.TestCase): - + def setUp(self): + self.device = os.environ.get('device', 'cpu') + def test_addition(self): """ Test autograd from addition two tensors: tensor1 + tensor2 @@ -248,61 +251,68 @@ class TestTensorAutograd(unittest.TestCase): norch_tensor_grad_T = utils.to_torch(norch_tensor_T.grad) torch_tensor_T = torch.tensor([[[1, 2.1], [3, -4]], [[5, 6], [7, 8]]], requires_grad=True) - torch_result_T = torch_tensor_T.T.sum() + torch_result_T = torch_tensor_T.mT.sum() torch_result_T.backward() torch_tensor_grad_T = torch_tensor_T.grad self.assertTrue(utils.compare_torch(norch_tensor_grad_T, torch_tensor_grad_T)) -def test_reshape_then_matmul(self): - """ - Test autograd from reshaping a tensor then performing matrix multiplication: matmul(tensor1.reshape(shape), tensor2) - """ - norch_tensor_reshape_matmul = norch.Tensor([[[1, 2.1], [3, -4]], [[5, 6], [7, 8]]], requires_grad=True) - new_shape = (2, 4) - norch_result_reshape_matmul = norch.matmul(norch_tensor_reshape_matmul.reshape(new_shape), norch_tensor_reshape_matmul).sum() - norch_result_reshape_matmul.backward() - norch_tensor_grad_reshape_matmul = utils.to_torch(norch_tensor_reshape_matmul.grad) + def test_reshape_then_matmul(self): + """ + Test autograd from reshaping a tensor then performing matrix multiplication: matmul(tensor1.reshape(shape), tensor2) + """ + norch_tensor_reshape_matmul = norch.Tensor([[1, 2.1], [3, -4], [5, 6], [7, 8]], requires_grad=True) + new_shape = [2, 4] + norch_result_reshape_matmul = (norch_tensor_reshape_matmul.reshape(new_shape) @ norch_tensor_reshape_matmul).sum() + norch_result_reshape_matmul.backward() + norch_tensor_grad_reshape_matmul = utils.to_torch(norch_tensor_reshape_matmul.grad) - torch_tensor_reshape_matmul = torch.tensor([[[1, 2.1], [3, -4]], [[5, 6], [7, 8]]], dtype=torch.float32, requires_grad=True) - torch_result_reshape_matmul = torch.matmul(torch_tensor_reshape_matmul.reshape(new_shape), torch_tensor_reshape_matmul).sum() - torch_result_reshape_matmul.backward() - torch_tensor_grad_reshape_matmul = torch_tensor_reshape_matmul.grad - - self.assertTrue(utils.compare_torch(norch_tensor_grad_reshape_matmul, torch_tensor_grad_reshape_matmul)) + torch_tensor_reshape_matmul = torch.tensor([[1, 2.1], [3, -4], [5, 6], [7, 8]], dtype=torch.float32, requires_grad=True) + torch_result_reshape_matmul = torch.matmul(torch_tensor_reshape_matmul.reshape(new_shape), torch_tensor_reshape_matmul).sum() + torch_result_reshape_matmul.backward() + torch_tensor_grad_reshape_matmul = torch_tensor_reshape_matmul.grad + + + print(norch_tensor_grad_reshape_matmul) + print(torch_tensor_grad_reshape_matmul) + print("\n\n\n\n@@") + + self.assertTrue(utils.compare_torch(norch_tensor_grad_reshape_matmul, torch_tensor_grad_reshape_matmul)) -def test_T_then_matmul(self): - """ - Test autograd from transposing a tensor then performing matrix multiplication: matmul(tensor.T, tensor) - """ - norch_tensor_T_matmul = norch.Tensor([[[1, 2.1], [3, -4]], [[5, 6], [7, 8]]], requires_grad=True) - norch_result_T_matmul = norch.matmul(norch_tensor_T_matmul.T, norch_tensor_T_matmul).sum() - norch_result_T_matmul.backward() - norch_tensor_grad_T_matmul = utils.to_torch(norch_tensor_T_matmul.grad) + def test_T_then_matmul(self): + """ + Test autograd from transposing a tensor then performing matrix multiplication: matmul(tensor.T, tensor) + """ + norch_tensor_T_matmul = norch.Tensor([[1, 2.1], [3, -4], [5, 6], [7, 8]], requires_grad=True) + norch_result_T_matmul = (norch_tensor_T_matmul.T @ norch_tensor_T_matmul).sum() + norch_result_T_matmul.backward() + norch_tensor_grad_T_matmul = utils.to_torch(norch_tensor_T_matmul.grad) - torch_tensor_T_matmul = torch.tensor([[[1, 2.1], [3, -4]], [[5, 6], [7, 8]]], dtype=torch.float32, requires_grad=True) - torch_result_T_matmul = torch.matmul(torch_tensor_T_matmul.T, torch_tensor_T_matmul).sum() - torch_result_T_matmul.backward() - torch_tensor_grad_T_matmul = torch_tensor_T_matmul.grad + torch_tensor_T_matmul = torch.tensor([[1, 2.1], [3, -4], [5, 6], [7, 8]], dtype=torch.float32, requires_grad=True) + torch_result_T_matmul = torch.matmul(torch_tensor_T_matmul.T, torch_tensor_T_matmul).sum() + torch_result_T_matmul.backward() + torch_tensor_grad_T_matmul = torch_tensor_T_matmul.grad - self.assertTrue(utils.compare_torch(norch_tensor_grad_T_matmul, torch_tensor_grad_T_matmul)) + self.assertTrue(utils.compare_torch(norch_tensor_grad_T_matmul, torch_tensor_grad_T_matmul)) -def test_transpose_axes_then_matmul(self): - """ - Test autograd from transposing a tensor with specific axes then performing matrix multiplication: matmul(tensor.transpose(axis1, axis2), tensor) - """ - norch_tensor_transpose_matmul = norch.Tensor([[[1, 2.1], [3, -4]], [[5, 6], [7, 8]]], requires_grad=True) - axis1, axis2 = 0, 2 - norch_result_transpose_matmul = norch.matmul(norch_tensor_transpose_matmul.transpose(axis1, axis2), norch_tensor_transpose_matmul).sum() - norch_result_transpose_matmul.backward() - norch_tensor_grad_transpose_matmul = utils.to_torch(norch_tensor_transpose_matmul.grad) + def test_transpose_axes_then_matmul(self): + """ + Test autograd from transposing a tensor with specific axes then performing matrix multiplication: matmul(tensor.transpose(axis1, axis2), tensor) + """ + norch_tensor_transpose_matmul = norch.Tensor([[1, 2.1], [3, -4], [5, 6], [7, 8]], requires_grad=True) + axis1, axis2 = 0, 1 + norch_result_transpose_matmul = (norch_tensor_transpose_matmul.transpose(axis1, axis2) @ norch_tensor_transpose_matmul).sum() + norch_result_transpose_matmul.backward() + norch_tensor_grad_transpose_matmul = utils.to_torch(norch_tensor_transpose_matmul.grad) - torch_tensor_transpose_matmul = torch.tensor([[[1, 2.1], [3, -4]], [[5, 6], [7, 8]]], dtype=torch.float32, requires_grad=True) - torch_result_transpose_matmul = torch.matmul(torch_tensor_transpose_matmul.transpose(axis1, axis2), torch_tensor_transpose_matmul).sum() - torch_result_transpose_matmul.backward() - torch_tensor_grad_transpose_matmul = torch_tensor_transpose_matmul.grad + torch_tensor_transpose_matmul = torch.tensor([[1, 2.1], [3, -4], [5, 6], [7, 8]], dtype=torch.float32, requires_grad=True) + torch_result_transpose_matmul = torch.matmul(torch_tensor_transpose_matmul.transpose(axis1, axis2), torch_tensor_transpose_matmul).sum() + torch_result_transpose_matmul.backward() + torch_tensor_grad_transpose_matmul = torch_tensor_transpose_matmul.grad - self.assertTrue(utils.compare_torch(norch_tensor_grad_transpose_matmul, torch_tensor_grad_transpose_matmul)) + self.assertTrue(utils.compare_torch(norch_tensor_grad_transpose_matmul, torch_tensor_grad_transpose_matmul)) +if __name__ == '__main__': + unittest.main() \ No newline at end of file diff --git a/tests/test_operations.py b/tests/test_operations.py index 65e399b..b01c231 100644 --- a/tests/test_operations.py +++ b/tests/test_operations.py @@ -2,6 +2,7 @@ import unittest import norch from norch import utils import torch +import sys class TestTensorOperations(unittest.TestCase): def test_creation_and_conversion(self): @@ -231,6 +232,34 @@ class TestTensorOperations(unittest.TestCase): self.assertTrue(utils.compare_torch(torch_result, torch_expected)) + def test_scalar_power_tensor(self): + """ + Test scalar power of a tensor: scalar ** tensor + """ + scalar = 3 + norch_tensor = norch.Tensor([[[1, 2.1], [3, -4]], [[5, 6], [7, 8]]]) + norch_result = scalar ** norch_tensor + torch_result = utils.to_torch(norch_result) + + torch_tensor = torch.tensor([[[1, 2.1], [3, -4]], [[5, 6], [7, 8]]]) + torch_expected = scalar ** torch_tensor + + self.assertTrue(utils.compare_torch(torch_result, torch_expected)) + + def test_tensor_power_scalar(self): + """ + Test tensor power of a scalar: tensor ** scalar + """ + scalar = 3 + norch_tensor = norch.Tensor([[[1, 2.1], [3, -4]], [[5, 6], [7, 8]]]) + norch_result = norch_tensor ** scalar + torch_result = utils.to_torch(norch_result) + + torch_tensor = torch.tensor([[[1, 2.1], [3, -4]], [[5, 6], [7, 8]]]) + torch_expected = torch_tensor ** scalar + + self.assertTrue(utils.compare_torch(torch_result, torch_expected)) + if __name__ == '__main__':