from vector import Vector from matrix import Matrix m1 = Matrix([[7.0, 8.0, 4.0], [3.0, 2.0, 1.0]], (2, 3)) m2 = Matrix([[0.0, 3.0], [2.0, 4.0], [3.0, 5.0]], (3, 2)) m3 = Matrix([[7.0, 3.0, 4.0], [8.0, 2.0, 1.0]]) m4 = Matrix([[0.0, 2.0, 3.0], [3.0, 4.0, 5.0]]) v1 = Vector([3.0, 4.0, 3.0]) v2 = Matrix((5, 1)) print(m1 * 2) print(m1 * v1) print(m1.__rmul__(m2)) print(m3.__radd__(m4)) print(m3 / 3)
class TestMatrixOperations(unittest.TestCase): def setUp(self): self.m = Matrix([ [1.0, 2.0], [3.0, 4.0], ]) self.m1 = Matrix((2, 5)) self.m2 = Matrix([[5.0, 6.0], [7.0, 8.0]], (2, 2)) self.v = Vector([5, 6]) def test_add_matrix(self): m3 = self.m + self.m2 self.assertListEqual(m3.data, [[6.0, 8.0], [10.0, 12.0]]) self.assertTupleEqual(m3.shape, (2, 2)) def test_radd_matrix(self): m3 = self.m.__radd__(self.m2) self.assertListEqual(m3.data, [[6.0, 8.0], [10.0, 12.0]]) self.assertTupleEqual(m3.shape, (2, 2)) def test_sub_matrix(self): m3 = self.m2 - self.m self.assertListEqual(m3.data, [[4.0, 4.0], [4.0, 4.0]]) self.assertTupleEqual(m3.shape, (2, 2)) def test_rsub_matrix(self): m3 = self.m.__rsub__(self.m2) self.assertListEqual(m3.data, [[4.0, 4.0], [4.0, 4.0]]) self.assertTupleEqual(m3.shape, (2, 2)) def test_mul_scalar(self): m3 = self.m * 2 self.assertListEqual(m3.data, [[2.0, 4.0], [6.0, 8.0]]) self.assertTupleEqual(m3.shape, (2, 2)) def test_mul_matrix(self): m3 = self.m * self.m2 self.assertListEqual(m3.data, [[19.0, 22.0], [43.0, 50.0]]) self.assertTupleEqual(m3.shape, (2, 2)) def test_mul_vector(self): m3 = self.m * self.v self.assertListEqual(m3.values, [15.0, 42.0]) self.assertEqual(m3.size, 2) def test_rmul(self): m3 = self.m * self.v self.assertListEqual(m3.values, [15.0, 42.0]) self.assertEqual(m3.size, 2) m3 = self.m * self.m2 self.assertListEqual(m3.data, [[19.0, 22.0], [43.0, 50.0]]) self.assertTupleEqual(m3.shape, (2, 2)) m3 = self.m * 2 self.assertListEqual(m3.data, [[2.0, 4.0], [6.0, 8.0]]) self.assertTupleEqual(m3.shape, (2, 2)) def test_truediv(self): m3 = self.m / 2 self.assertListEqual(m3.data, [[0.5, 1.0], [1.5, 2.0]]) self.assertTupleEqual(m3.shape, (2, 2)) def test_rtruediv(self): m3 = self.m / 1 # Errors def test_add_errors(self): with self.assertRaises(ForbiddenOperation): self.m + self.m1 def test_radd_errors(self): with self.assertRaises(TypeError): self.m + "string" def test_sub_errors(self): with self.assertRaises(TypeError): self.m - "string" with self.assertRaises(ForbiddenOperation): self.m - self.m1 def test_rsub_errors(self): with self.assertRaises(TypeError): self.m + "string" with self.assertRaises(ForbiddenOperation): self.m - self.m1 def test_mul_errors(self): with self.assertRaises(TypeError): self.m + "string" with self.assertRaises(ForbiddenOperation): self.m1 * Vector(3) with self.assertRaises(ForbiddenOperation): self.m1 * self.m def test_rmul_errors(self): with self.assertRaises(TypeError): self.m + "string" def test_truediv_errors(self): with self.assertRaises(TypeError): self.m1 / "string" def test_rtruediv_errors(self): with self.assertRaises(TypeError): self.m1 / "string"