def test_setitem_column_as_int(self): all_matrices = copy.deepcopy(utils.ALL_MATRICES) for mat, k in itertools.product(all_matrices, utils.ALL_SCALARS): vec = Vector([k] * mat.num_rows) for start in range(0, mat.num_columns): mat[:, start] = k utils.assert_vectors_almost_equal(mat[:, start], vec)
def test_make_unitary(self): for vec in utils.ALL_VECTORS: if vec.norm > 0: v = Vector.make_unitary(vec) self.assertAlmostEqual(v.norm, 1, PRECISION) self.assertEqual(v.dim, vec.dim) utils.assert_vectors_almost_equal(vec.norm * v, vec)
def test_cross_jacobi_identity(self): for v1, v2 in itertools.product(utils.ALL_VECTORS, utils.ALL_VECTORS): for v3 in utils.ALL_VECTORS: vec1 = vector_ops.cross(v1, vector_ops.cross(v2, v3)) vec2 = vector_ops.cross(v2, vector_ops.cross(v3, v1)) vec3 = vector_ops.cross(v3, vector_ops.cross(v1, v2)) utils.assert_vectors_almost_equal(vec1 + vec2 + vec3, Vector.make_zero(3))
def test_cross_scalar_multiply(self): for v1, v2 in itertools.product(utils.ALL_VECTORS, utils.ALL_VECTORS): for k in utils.ALL_SCALARS: vec1 = vector_ops.cross(k * v1, v2) vec2 = vector_ops.cross(v1, k * v2) vec3 = k * vector_ops.cross(v1, v2) for a, b in itertools.combinations([vec1, vec2, vec3], 2): utils.assert_vectors_almost_equal(a, b)
def test_setitem_column_as_sequence(self): factories = [lambda x: x, lambda x: x.components, list, tuple] all_matrices = copy.deepcopy(utils.ALL_MATRICES) for mat, k in itertools.product(all_matrices, utils.ALL_SCALARS): vec = Vector([k] * mat.num_rows) for start in range(0, mat.num_columns): for fac in factories: mat[:, start] = fac(vec) utils.assert_vectors_almost_equal(mat[:, start], vec)
def test_setitem_column_slice_as_int(self): all_matrices = copy.deepcopy(utils.ALL_MATRICES) for mat, k in itertools.product(all_matrices, utils.ALL_SCALARS): vec = Vector([k] * mat.num_rows) for start in range(0, mat.num_columns): for stop in range(start + 1, mat.num_columns + 1): for step in range(1, stop): mat[:, start:stop:step] = k for i in range(start, stop, step): utils.assert_vectors_almost_equal(mat[:, i], vec)
def test_scale(self): for v, k in itertools.product(utils.ALL_VECTORS, utils.ALL_SCALARS): if v.norm != 0 and k > 0: unit = vector_ops.build_unit_vector(v) utils.assert_vectors_almost_equal( vector_ops.scale(unit, v.norm), v) utils.assert_vectors_almost_equal( vector_ops.build_unit_vector(vector_ops.scale(v, k)), unit) utils.assert_vectors_almost_equal( vector_ops.scale(v, (1 / v.norm)), unit)
def test_cross_parallel(self): v1 = Vector([1, 0, 0]) v2 = Vector([2, 0, 0]) utils.assert_vectors_almost_equal(vector_ops.cross(v1, v2), Vector.make_zero(3))
def test_subtract(self): for v1, v2 in itertools.product(utils.ALL_VECTORS, utils.ALL_VECTORS): utils.assert_vectors_almost_equal(vector_ops.subtract(v1, v2), vector_ops.add(v1, -v2))
def test_scalar_multiply(self): for v, k in itertools.product(utils.ALL_VECTORS, utils.ALL_SCALARS): utils.assert_vectors_almost_equal(k * v, vector_ops.scale(v, k))
def test_build_unit_vector(self): for vec in utils.ALL_VECTORS: if vec.norm > 0: unit = vector_ops.build_unit_vector(vec) self.assertAlmostEqual(unit.norm, 1, PRECISION) utils.assert_vectors_almost_equal(vec.norm * unit, vec)
def test_cross_dot_relationship(self): for v1, v2 in itertools.product(utils.ALL_VECTORS, utils.ALL_VECTORS): for v3 in utils.ALL_VECTORS: vec1 = vector_ops.cross(v1, vector_ops.cross(v2, v3)) vec2 = ((v1 @ v3) * v2) - ((v1 @ v2) * v3) utils.assert_vectors_almost_equal(vec1, vec2)
def test_add(self): for v1, v2 in itertools.product(utils.ALL_VECTORS, utils.ALL_VECTORS): utils.assert_vectors_almost_equal(v1 + v2, vector_ops.add(v1, v2))
def test_cross_orthogonal(self): v1 = Vector([0, 1, 0]) v2 = Vector([1, 0, 0]) utils.assert_vectors_almost_equal(vector_ops.cross(v1, v2), Vector([0, 0, -1]))
def test_add_associative(self): for v1, v2 in itertools.product(utils.ALL_VECTORS, utils.ALL_VECTORS): for v3 in utils.ALL_VECTORS: vec1 = vector_ops.add(vector_ops.add(v1, v2), v3) vec2 = vector_ops.add(v1, vector_ops.add(v2, v3)) utils.assert_vectors_almost_equal(vec1, vec2)
def test_cross_distributive(self): for v1, v2 in itertools.product(utils.ALL_VECTORS, utils.ALL_VECTORS): for v3 in utils.ALL_VECTORS: vec1 = vector_ops.cross(v1, v2 + v3) vec2 = vector_ops.cross(v1, v2) + vector_ops.cross(v1, v3) utils.assert_vectors_almost_equal(vec1, vec2)
def test_cross_self(self): for v1, v2 in itertools.product(utils.ALL_VECTORS, utils.ALL_VECTORS): if v1 == v2: vec = vector_ops.cross(v1, v2) utils.assert_vectors_almost_equal(vec, Vector.make_zero(3))
def test_cross_anticommutative(self): for v1, v2 in itertools.product(utils.ALL_VECTORS, utils.ALL_VECTORS): vec1 = vector_ops.cross(v1, v2) vec2 = vector_ops.cross(v2, v1) utils.assert_vectors_almost_equal(vec1, -vec2)