Skip to content

Commit d27b1cc

Browse files
committed
Use inplace_[neg/abs/conj] if applicable in [arb/acb/fmpq]_mat
1 parent d17679d commit d27b1cc

File tree

4 files changed

+39
-19
lines changed

4 files changed

+39
-19
lines changed

src/acb_mat/conjugate.c

+12-7
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,18 @@ acb_mat_conjugate(acb_mat_t B, const acb_mat_t A)
1616
{
1717
slong i, j;
1818

19-
if ((acb_mat_nrows(B) != acb_mat_nrows(A)) ||
20-
(acb_mat_ncols(B) != acb_mat_ncols(A)))
19+
if (A == B)
20+
for (i = 0; i < acb_mat_nrows(A); i++)
21+
for (j = 0; j < acb_mat_ncols(A); j++)
22+
acb_inplace_conj(acb_mat_entry(A, i, j));
23+
else
2124
{
22-
flint_throw(FLINT_ERROR, "acb_mat_conjugate: incompatible dimensions.\n");
23-
}
25+
if ((acb_mat_nrows(B) != acb_mat_nrows(A)) ||
26+
(acb_mat_ncols(B) != acb_mat_ncols(A)))
27+
flint_throw(FLINT_ERROR, "acb_mat_conjugate: incompatible dimensions.\n");
2428

25-
for (i = 0; i < acb_mat_nrows(A); i++)
26-
for (j = 0; j < acb_mat_ncols(A); j++)
27-
acb_conj(acb_mat_entry(B, i, j), acb_mat_entry(A, i, j));
29+
for (i = 0; i < acb_mat_nrows(A); i++)
30+
for (j = 0; j < acb_mat_ncols(A); j++)
31+
acb_conj(acb_mat_entry(B, i, j), acb_mat_entry(A, i, j));
32+
}
2833
}

src/acb_mat/neg.c

+9-4
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,13 @@ acb_mat_neg(acb_mat_t dest, const acb_mat_t src)
1616
{
1717
slong i, j;
1818

19-
for (i = 0; i < acb_mat_nrows(src); i++)
20-
for (j = 0; j < acb_mat_ncols(src); j++)
21-
acb_neg(acb_mat_entry(dest, i, j),
22-
acb_mat_entry(src, i, j));
19+
if (dest == src)
20+
for (i = 0; i < acb_mat_nrows(src); i++)
21+
for (j = 0; j < acb_mat_ncols(src); j++)
22+
acb_inplace_neg(acb_mat_entry(dest, i, j));
23+
else
24+
for (i = 0; i < acb_mat_nrows(src); i++)
25+
for (j = 0; j < acb_mat_ncols(src); j++)
26+
acb_neg(acb_mat_entry(dest, i, j),
27+
acb_mat_entry(src, i, j));
2328
}

src/arb_mat/neg.c

+9-4
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,13 @@ arb_mat_neg(arb_mat_t dest, const arb_mat_t src)
1616
{
1717
slong i, j;
1818

19-
for (i = 0; i < arb_mat_nrows(src); i++)
20-
for (j = 0; j < arb_mat_ncols(src); j++)
21-
arb_neg(arb_mat_entry(dest, i, j),
22-
arb_mat_entry(src, i, j));
19+
if (dest == src)
20+
for (i = 0; i < arb_mat_nrows(src); i++)
21+
for (j = 0; j < arb_mat_ncols(src); j++)
22+
arb_inplace_neg(arb_mat_entry(dest, i, j));
23+
else
24+
for (i = 0; i < arb_mat_nrows(src); i++)
25+
for (j = 0; j < arb_mat_ncols(src); j++)
26+
arb_neg(arb_mat_entry(dest, i, j),
27+
arb_mat_entry(src, i, j));
2328
}

src/fmpq_mat/neg.c

+9-4
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,13 @@ void fmpq_mat_neg(fmpq_mat_t rop, const fmpq_mat_t op)
1616
{
1717
slong i, j;
1818

19-
for (i = 0; i < op->r; i++)
20-
for (j = 0; j < op->c; j++)
21-
fmpq_neg(fmpq_mat_entry(rop, i, j),
22-
fmpq_mat_entry(op, i, j));
19+
if (rop == op)
20+
for (i = 0; i < op->r; i++)
21+
for (j = 0; j < op->c; j++)
22+
fmpq_inplace_neg(fmpq_mat_entry(rop, i, j));
23+
else
24+
for (i = 0; i < op->r; i++)
25+
for (j = 0; j < op->c; j++)
26+
fmpq_neg(fmpq_mat_entry(rop, i, j),
27+
fmpq_mat_entry(op, i, j));
2328
}

0 commit comments

Comments
 (0)