Exemple #1
0
    def test_write_and_read_array(self, tmp_path, rng):  # noqa: F811
        file_name = str(tmp_path / "test.ga")

        mv_array = MVArray([random_point_pair(rng=rng) for i in range(1000)])
        mv_array.save(file_name, compression=True, transpose=False, sparse=False, support=False)

        loaded_array = layout.load_ga_file(file_name)

        np.testing.assert_equal(loaded_array.value, mv_array.value)
Exemple #2
0
    def test_2d_mv_array(self, g3):
        layout, blades = g3, g3.blades
        Nrows = 2
        Ncolumns = 3
        value_array_a = self._random_value_array(g3, Nrows, Ncolumns)
        value_array_b = self._random_value_array(g3, Nrows, Ncolumns)

        mv_array_a = MVArray.from_value_array(layout, value_array_a)
        assert mv_array_a.shape == (Nrows, Ncolumns)
        mv_array_b = MVArray.from_value_array(layout, value_array_b)
        assert mv_array_b.shape == (Nrows, Ncolumns)

        # check properties of the array are preserved (no need to check both a and b)
        np.testing.assert_array_equal(mv_array_a.value, value_array_a)
        assert mv_array_a.value.dtype == value_array_a.dtype
        assert type(mv_array_a.value) == type(value_array_a)

        # Check addition
        mv_array_sum = mv_array_a + mv_array_b
        array_sum = value_array_a + value_array_b
        np.testing.assert_array_equal(mv_array_sum.value, array_sum)

        # Check elementwise gp
        mv_array_gp = mv_array_a * mv_array_b
        value_array_gp = np.zeros((Nrows, Ncolumns, layout.gaDims))
        for i in range(Nrows):
            for j in range(Ncolumns):
                value_array_gp[i,
                               j, :] = layout.gmt_func(value_array_a[i, j, :],
                                                       value_array_b[i, j, :])
        np.testing.assert_array_equal(mv_array_gp.value, value_array_gp)

        # Check elementwise op
        mv_array_op = mv_array_a ^ mv_array_b
        value_array_op = np.zeros((Nrows, Ncolumns, layout.gaDims))
        for i in range(Nrows):
            for j in range(Ncolumns):
                value_array_op[i,
                               j, :] = layout.omt_func(value_array_a[i, j, :],
                                                       value_array_b[i, j, :])
        np.testing.assert_array_equal(mv_array_op.value, value_array_op)

        # Check elementwise ip
        mv_array_ip = mv_array_a | mv_array_b
        value_array_ip = np.zeros((Nrows, Ncolumns, layout.gaDims))
        for i in range(Nrows):
            for j in range(Ncolumns):
                value_array_ip[i,
                               j, :] = layout.imt_func(value_array_a[i, j, :],
                                                       value_array_b[i, j, :])
        np.testing.assert_array_equal(mv_array_ip.value, value_array_ip)
Exemple #3
0
    def test_array_overload(self, algebra):
        '''
        test overload operations
        '''
        layout, blades = algebra, algebra.blades
        test_array = MVArray([layout.randomMV() for i in range(100)])

        normed_array = test_array.normal()
        other_array = np.array([t.normal().value for t in test_array])
        np.testing.assert_almost_equal(normed_array.value, other_array)

        dual_array = test_array.dual()
        other_array_2 = np.array([t.dual().value for t in test_array])
        np.testing.assert_almost_equal(dual_array.value, other_array_2)
def object_set_cost_matrix(object_set_a, object_set_b,
                           object_type="generic", symmetric=False):
    """
    Evaluates the rotor cost matrix between two sets of objects
    """
    object_array_a = MVArray(object_set_a).value
    object_array_b = MVArray(object_set_b).value
    if object_type == 'lines':
        ret_mat = val_line_set_cost_matrix(object_array_a, object_array_b)
        if symmetric:
            ret_mat = np.minimum(ret_mat, val_line_set_cost_matrix(object_array_a, -object_array_b))
        return ret_mat
    else:
        ret_mat = val_object_set_cost_matrix(object_array_a, object_array_b)
        if symmetric:
            ret_mat = np.minimum(ret_mat, val_object_set_cost_matrix(object_array_a, -object_array_b))
        return ret_mat
Exemple #5
0
    def test_array_control(self, g3, rng):  # noqa: F811
        '''
        test methods to take control addition from numpy arrays
        '''
        layout, blades = g3, g3.blades
        e1 = blades['e1']
        e3 = blades['e3']
        e12 = blades['e12']

        for i in range(100):
            number_array = rng.random(4)

            output = e12 + (e1 * number_array)
            output2 = MVArray([e12 + (e1 * n) for n in number_array])
            np.testing.assert_almost_equal(output, output2)

            output = e12 + (e1 * number_array)
            output2 = MVArray([e12 + (e1 * n) for n in number_array])
            np.testing.assert_almost_equal(output, output2)

            output = (number_array * e1) + e12
            output2 = MVArray([(n * e1) + e12 for n in number_array])
            np.testing.assert_almost_equal(output, output2)

            output = number_array / e12
            output2 = MVArray([n / e12 for n in number_array])
            np.testing.assert_almost_equal(output, output2)

            output = (e1 / number_array)
            output2 = MVArray([(e1 / n) for n in number_array])
            np.testing.assert_almost_equal(output, output2)

            output = ((e1 / number_array) * e3) / e12
            output2 = MVArray([((e1 / n) * e3) / e12 for n in number_array])
            np.testing.assert_almost_equal(output, output2)
Exemple #6
0
def _mv_ones(num_elements):
    return MVArray([D.MultiVector(value=np.ones(2**4, dtype=np.float32)) for i in range(num_elements)])