File: rref.cc

package info (click to toggle)
eclib 20250122-2
  • links: PTS, VCS
  • area: main
  • in suites: sid, trixie
  • size: 5,916 kB
  • sloc: cpp: 45,414; makefile: 272; sh: 127
file content (37 lines) | stat: -rw-r--r-- 826 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include <flint/fmpz.h>
#include <flint/fmpz_mat.h>
#define uscalar mp_limb_t // unsigned long

// Convert a mat_m to a flint fmpz_mat

void flint_mat_from_mmat(fmpz_mat_t& A, const mat_m& M)
{
  long nr=M.nrows(), nc=M.ncols();
  long i, j;

  // create flint matrix copy of M:
  fmpz_mat_init(A, nr, nc);
  for(i=0; i<nr; i++)
    for(j=0; j<nc; j++)
      fmpz_set_si(fmpz_mat_entry(A,i,j), I2long(M(i+1,j+1)));
}

mat_m mmat_from_flint_mat(const fmpz_mat_t& A)
{
  long nr=fmpz_mat_nrows(A), nc=fmpz_mat_ncols(A);

  // create matrix copy of A:
  mat_m M(nr, nc);
  long i, j;
  for(i=0; i<nr; i++)
    for(j=0; j<nc; j++)
      M(i+1,j+1) = fmpz_get_si(fmpz_mat_entry(A,i,j));
  return M;
}

// mat_m echelon_via_flint(const mat_m& m1, vec_i& pc, vec_i& npc,
//                 long& rk, long& ny, bigint& d)
// {

// }