Esempio n. 1
0
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)
Esempio n. 2
0
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"