Example #1
0
void
bool_mat_transpose(bool_mat_t B, const bool_mat_t A)
{
    slong i, j;

    if (bool_mat_nrows(B) != bool_mat_ncols(A) ||
        bool_mat_ncols(B) != bool_mat_nrows(A))
    {
        flint_printf("bool_mat_transpose: Incompatible dimensions.\n");
        abort();
    }

    if (bool_mat_is_empty(A))
        return;

    if (A == B)  /* In-place, guaranteed to be square */
    {
        int tmp;
        for (i = 0; i < bool_mat_nrows(B) - 1; i++)
        {
            for (j = i + 1; j < bool_mat_ncols(B); j++)
            {
                tmp = bool_mat_get_entry(B, i, j);
                bool_mat_set_entry(B, i, j, bool_mat_get_entry(B, j, i));
                bool_mat_set_entry(B, j, i, tmp);
            }
        }
    }
    else  /* Not aliased; general case */
    {
        for (i = 0; i < bool_mat_nrows(B); i++)
            for (j = 0; j < bool_mat_ncols(B); j++)
                bool_mat_set_entry(B, i, j, bool_mat_get_entry(A, j, i));
    }
}
Example #2
0
void
bool_mat_zero(bool_mat_t mat)
{
    slong i, j;

    for (i = 0; i < bool_mat_nrows(mat); i++)
        for (j = 0; j < bool_mat_ncols(mat); j++)
            bool_mat_set_entry(mat, i, j, 0);
}
Example #3
0
File: mul.c Project: argriffing/arb
void
bool_mat_mul(bool_mat_t C, const bool_mat_t A, const bool_mat_t B)
{
    slong ar, ac, br, bc, i, j, k;

    ar = bool_mat_nrows(A);
    ac = bool_mat_ncols(A);
    br = bool_mat_nrows(B);
    bc = bool_mat_ncols(B);

    if (ac != br || ar != bool_mat_nrows(C) || bc != bool_mat_ncols(C))
    {
        flint_printf("bool_mat_mul: incompatible dimensions\n");
        abort();
    }

    if (br == 0)
    {
        bool_mat_zero(C);
        return;
    }

    if (A == C || B == C)
    {
        bool_mat_t T;
        bool_mat_init(T, ar, bc);
        bool_mat_mul(T, A, B);
        bool_mat_swap(T, C);
        bool_mat_clear(T);
        return;
    }

    for (i = 0; i < ar; i++)
    {
        for (j = 0; j < bc; j++)
        {
            int any = 0;
            for (k = 0; k < br && !any; k++)
                any |= (bool_mat_get_entry(A, i, k) &
                        bool_mat_get_entry(B, k, j));
            bool_mat_set_entry(C, i, j, any);
        }
    }
}
Example #4
0
void
bool_mat_mul_entrywise(bool_mat_t C, const bool_mat_t A, const bool_mat_t B)
{
    slong i, j;

    if (bool_mat_nrows(A) != bool_mat_nrows(B) ||
        bool_mat_ncols(A) != bool_mat_ncols(B))
    {
        flint_printf("bool_mat_mul_entrywise: incompatible dimensions\n");
        flint_abort();
    }

    for (i = 0; i < bool_mat_nrows(A); i++)
    {
        for (j = 0; j < bool_mat_ncols(A); j++)
        {
            bool_mat_set_entry(C, i, j, (bool_mat_get_entry(A, i, j) &
                                         bool_mat_get_entry(B, i, j)));
        }
    }
}
Example #5
0
void
bool_mat_complement(bool_mat_t dest, const bool_mat_t src)
{
    slong i, j;

    if (bool_mat_is_empty(src))
        return;

    for (i = 0; i < bool_mat_nrows(src); i++)
        for (j = 0; j < bool_mat_ncols(src); j++)
            bool_mat_set_entry(dest, i, j, !bool_mat_get_entry(src, i, j));
}
Example #6
0
void
bool_mat_add(bool_mat_t res, const bool_mat_t mat1, const bool_mat_t mat2)
{
    slong i, j;

    if (bool_mat_is_empty(mat1))
        return;

    for (i = 0; i < bool_mat_nrows(mat1); i++)
        for (j = 0; j < bool_mat_ncols(mat1); j++)
            bool_mat_set_entry(res, i, j, (bool_mat_get_entry(mat1, i, j) |
                                           bool_mat_get_entry(mat2, i, j)));
}
Example #7
0
File: all.c Project: argriffing/arb
int
bool_mat_all(const bool_mat_t mat)
{
    slong i, j;

    if (bool_mat_is_empty(mat))
        return 1;

    for (i = 0; i < bool_mat_nrows(mat); i++)
        for (j = 0; j < bool_mat_ncols(mat); j++)
            if (!bool_mat_get_entry(mat, i, j))
                return 0;

    return 1;
}