Skip to content

Commit 30e71dc

Browse files
Merge pull request #119 from oscarbenjamin/pr_py313
Add prerelease testing for CPython 3.13 to CI
2 parents 0aced1f + 128a035 commit 30e71dc

File tree

7 files changed

+252
-125
lines changed

7 files changed

+252
-125
lines changed

.github/workflows/buildwheel.yml

+18-2
Original file line numberDiff line numberDiff line change
@@ -111,8 +111,8 @@ jobs:
111111
strategy:
112112
fail-fast: false
113113
matrix:
114-
python-version: ['3.11', '3.12']
115-
# '.' means install from git checkout
114+
python-version: ['3.11', '3.12', '3.13-dev']
115+
# '.' means install from python-flint git checkout
116116
# 'python-flint' means install from PyPI sdist
117117
target: ['.', 'python-flint']
118118
steps:
@@ -122,3 +122,19 @@ jobs:
122122
python-version: ${{ matrix.python-version }}
123123
- run: bin/pip_install_ubuntu.sh ${{ matrix.target }}
124124
- run: python -m flint.test --verbose
125+
126+
test_flint_versions:
127+
name: Test flint ${{ matrix.flinttag }}
128+
runs-on: ubuntu-22.04
129+
strategy:
130+
fail-fast: false
131+
matrix:
132+
# minimum supported version and latest git
133+
flinttag: ['v3.0.0', 'main']
134+
steps:
135+
- uses: actions/checkout@v3
136+
- uses: actions/setup-python@v4
137+
with:
138+
python-version: 3.12
139+
- run: bin/pip_install_ubuntu.sh . ${{ matrix.flinttag }}
140+
- run: python -m flint.test --verbose

bin/pip_install_ubuntu.sh

+40-14
Original file line numberDiff line numberDiff line change
@@ -4,22 +4,52 @@ set -o errexit
44

55
# This script should work to install python-flint on Ubuntu from a VCS checkout
66
#
7-
# $ git checkout https://github.com/flintlib/python-flint.git
7+
# $ git clone https://github.com/flintlib/python-flint.git
8+
# $ cd python-flint
89
# $ bin/pip_install_ubuntu.sh .
910
#
1011
# To install an sdist from PyPI, use
1112
#
1213
# $ bin/pip_install_ubuntu.sh python-flint
1314
#
15+
# The Flint version to build can be provided as an argument, e.g.
16+
#
17+
# $ bin/pip_install_ubuntu.sh python-flint v3.0.1
18+
#
19+
# The version is a tag or branch in the Flint repository. If not provided, the
20+
# script will default to downloading the release tarball hard-coded below. Only
21+
# Flint 3 or newer will work.
22+
23+
if [ -z "$2" ]; then
24+
echo "Building from release tarball"
25+
FLINT_GIT=""
26+
FLINTVER=3.0.1
27+
else
28+
echo "Building from git: $2"
29+
FLINT_GIT=$2
30+
fi
31+
# Either . or python-flint. Passed to pip install
32+
PYTHON_FLINT=$1
1433

1534
# Install runtime and build dependencies
1635

1736
# First install their dependencies and build dependencies
1837
sudo apt-get update
1938
sudo apt-get install libgmp-dev libmpfr-dev xz-utils
2039

21-
# Only Flint 3 or newer will work.
22-
FLINTVER=3.0.0
40+
if [ -z "$FLINT_GIT" ]; then
41+
# Install from release tarball
42+
echo "Installing Flint $FLINTVER from release tarball"
43+
curl -O -L https://www.flintlib.org/flint-$FLINTVER.tar.gz
44+
tar xf flint-$FLINTVER.tar.gz
45+
cd flint-$FLINTVER
46+
else
47+
# Install from git
48+
echo "Installing Flint from git: $FLINT_GIT"
49+
git clone https://github.com/flintlib/flint.git
50+
cd flint
51+
git checkout $FLINT_GIT
52+
fi
2353

2454
# This will default to installing in /usr/local. If you want to install in a
2555
# non-standard location then configure flint with
@@ -28,25 +58,21 @@ FLINTVER=3.0.0
2858
# export C_INCLUDE_PATH=$PREFIX/include
2959
# and at runtime set
3060
# export LD_LIBRARY_PATH=$PREFIX/lib
31-
32-
curl -O -L https://www.flintlib.org/flint-$FLINTVER.tar.gz
33-
tar xf flint-$FLINTVER.tar.gz
34-
cd flint-$FLINTVER
35-
./bootstrap.sh
36-
./configure --disable-static
37-
make -j
38-
sudo make install
61+
./bootstrap.sh
62+
./configure --disable-static
63+
make -j
64+
sudo make install
3965
cd ..
4066

4167
ls -l /usr/local/lib
4268
sudo ldconfig /usr/local/lib
4369

44-
# Install from checkout (or sdist).
70+
# Build python-flint from sdist
4571
echo -----------------------------------------------------------
4672
echo
4773
echo Running:
48-
echo $ pip install --no-binary python-flint $1
74+
echo $ pip install --no-binary python-flint $PYTHON_FLINT
4975
echo
5076
echo -----------------------------------------------------------
5177

52-
pip install --no-binary python-flint $1
78+
pip install --no-binary python-flint $PYTHON_FLINT

src/flint/__init__.py

+5
Original file line numberDiff line numberDiff line change
@@ -33,4 +33,9 @@
3333
from .types.dirichlet import *
3434
from .functions.showgood import good, showgood
3535

36+
from .flint_base.flint_base import (
37+
FLINT_VERSION as __FLINT_VERSION__,
38+
FLINT_RELEASE as __FLINT_RELEASE__,
39+
)
40+
3641
__version__ = '0.6.0'

src/flint/flint_base/flint_base.pyx

+10-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,16 @@
1-
from flint.flintlib.flint cimport FLINT_BITS as _FLINT_BITS
1+
from flint.flintlib.flint cimport (
2+
FLINT_BITS as _FLINT_BITS,
3+
FLINT_VERSION as _FLINT_VERSION,
4+
__FLINT_RELEASE as _FLINT_RELEASE,
5+
)
26
from flint.flint_base.flint_context cimport thectx
37

48

9+
FLINT_BITS = _FLINT_BITS
10+
FLINT_VERSION = _FLINT_VERSION.decode("ascii")
11+
FLINT_RELEASE = _FLINT_RELEASE
12+
13+
514
cdef class flint_elem:
615
def __repr__(self):
716
if thectx.pretty:

src/flint/flintlib/flint.pxd

+2
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,8 @@ cdef extern from "flint/fmpz.h":
3737
ctypedef slong fmpz_struct
3838

3939
cdef extern from "flint/flint.h":
40+
const char * FLINT_VERSION
41+
const int __FLINT_RELEASE
4042
const int FLINT_BITS
4143
ctypedef void * flint_rand_t
4244
void flint_randinit(flint_rand_t state)

src/flint/flintlib/fmpz_mod_mat.pxd

+125-59
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,10 @@
1-
from flint.flintlib.flint cimport ulong, slong, fmpz_struct, flint_rand_t
1+
from flint.flintlib.flint cimport (
2+
__FLINT_RELEASE,
3+
ulong,
4+
slong,
5+
fmpz_struct,
6+
flint_rand_t
7+
)
28
from flint.flintlib.fmpz cimport fmpz_t
39
from flint.flintlib.fmpz_mod cimport fmpz_mod_ctx_t
410
from flint.flintlib.fmpz_mat cimport fmpz_mat_t
@@ -12,64 +18,124 @@ cdef extern from "flint/fmpz_mod_mat.h":
1218
ctypedef fmpz_mod_mat_struct fmpz_mod_mat_t[1]
1319

1420

15-
cdef extern from "flint/fmpz_mod_mat.h":
16-
# This is not exposed in the docs:
17-
int fmpz_mod_mat_equal(const fmpz_mod_mat_t mat1, const fmpz_mod_mat_t mat2);
21+
cdef extern from *:
22+
"""
23+
/*
24+
* fmpz_mod_mat function signatures were changed in FLINT 3.1.0
25+
*/
26+
#if __FLINT_RELEASE >= 30100 /* Flint 3.1.0 or later */
27+
28+
#define compat_fmpz_mod_mat_init(mat, rows, cols, ctx) fmpz_mod_mat_init(mat, rows, cols, ctx)
29+
#define compat_fmpz_mod_mat_init_set(mat, src, ctx) fmpz_mod_mat_init_set(mat, src, ctx)
30+
#define compat_fmpz_mod_mat_clear(mat, ctx) fmpz_mod_mat_clear(mat, ctx)
31+
#define compat_fmpz_mod_mat_set(A, B, ctx) fmpz_mod_mat_set(A, B, ctx)
32+
#define compat_fmpz_mod_mat_nrows(mat, ctx) fmpz_mod_mat_nrows(mat, ctx)
33+
#define compat_fmpz_mod_mat_ncols(mat, ctx) fmpz_mod_mat_ncols(mat, ctx)
34+
#define compat_fmpz_mod_mat_entry(mat, i, j) fmpz_mod_mat_entry(mat, i, j)
35+
#define compat_fmpz_mod_mat_set_entry(mat, i, j, val, ctx) fmpz_mod_mat_set_entry(mat, i, j, val, ctx)
36+
#define compat_fmpz_mod_mat_one(mat, ctx) fmpz_mod_mat_one(mat, ctx)
37+
#define compat_fmpz_mod_mat_equal(mat1, mat2, ctx) fmpz_mod_mat_equal(mat1, mat2, ctx)
38+
#define compat_fmpz_mod_mat_is_zero(mat, ctx) fmpz_mod_mat_is_zero(mat, ctx)
39+
#define compat_fmpz_mod_mat_neg(B, A, ctx) fmpz_mod_mat_neg(B, A, ctx)
40+
#define compat_fmpz_mod_mat_add(C, A, B, ctx) fmpz_mod_mat_add(C, A, B, ctx)
41+
#define compat_fmpz_mod_mat_sub(C, A, B, ctx) fmpz_mod_mat_sub(C, A, B, ctx)
42+
#define compat_fmpz_mod_mat_scalar_mul_fmpz(B, A, c, ctx) fmpz_mod_mat_scalar_mul_fmpz(B, A, c, ctx)
43+
#define compat_fmpz_mod_mat_mul(C, A, B, ctx) fmpz_mod_mat_mul(C, A, B, ctx)
44+
#define compat_fmpz_mod_mat_inv(B, A, ctx) fmpz_mod_mat_inv(B, A, ctx)
45+
#define compat_fmpz_mod_mat_transpose(B, A, ctx) fmpz_mod_mat_transpose(B, A, ctx)
46+
#define compat_fmpz_mod_mat_solve(X, A, B, ctx) fmpz_mod_mat_solve(X, A, B, ctx)
47+
#define compat_fmpz_mod_mat_rref(mat, ctx) fmpz_mod_mat_rref(mat, mat, ctx)
48+
#define compat_fmpz_mod_mat_charpoly(p, M, ctx) fmpz_mod_mat_charpoly(p, M, ctx)
49+
#define compat_fmpz_mod_mat_minpoly(p, M, ctx) fmpz_mod_mat_minpoly(p, M, ctx)
50+
51+
#else /* Flint 3.0.0 or 3.0.1 */
52+
53+
#define compat_fmpz_mod_mat_init(mat, rows, cols, ctx) fmpz_mod_mat_init(mat, rows, cols, ctx->n)
54+
#define compat_fmpz_mod_mat_init_set(mat, src, ctx) fmpz_mod_mat_init_set(mat, src)
55+
#define compat_fmpz_mod_mat_clear(mat, ctx) fmpz_mod_mat_clear(mat)
56+
#define compat_fmpz_mod_mat_set(A, B, ctx) fmpz_mod_mat_set(A, B)
57+
#define compat_fmpz_mod_mat_nrows(mat, ctx) fmpz_mod_mat_nrows(mat)
58+
#define compat_fmpz_mod_mat_ncols(mat, ctx) fmpz_mod_mat_ncols(mat)
59+
#define compat_fmpz_mod_mat_entry(mat, i, j) fmpz_mod_mat_entry(mat, i, j)
60+
#define compat_fmpz_mod_mat_set_entry(mat, i, j, val, ctx) fmpz_mod_mat_set_entry(mat, i, j, val)
61+
#define compat_fmpz_mod_mat_one(mat, ctx) fmpz_mod_mat_one(mat)
62+
#define compat_fmpz_mod_mat_equal(mat1, mat2, ctx) fmpz_mod_mat_equal(mat1, mat2)
63+
#define compat_fmpz_mod_mat_is_zero(mat, ctx) fmpz_mod_mat_is_zero(mat)
64+
#define compat_fmpz_mod_mat_neg(B, A, ctx) fmpz_mod_mat_neg(B, A)
65+
#define compat_fmpz_mod_mat_add(C, A, B, ctx) fmpz_mod_mat_add(C, A, B)
66+
#define compat_fmpz_mod_mat_sub(C, A, B, ctx) fmpz_mod_mat_sub(C, A, B)
67+
#define compat_fmpz_mod_mat_scalar_mul_fmpz(B, A, c, ctx) fmpz_mod_mat_scalar_mul_fmpz(B, A, c)
68+
#define compat_fmpz_mod_mat_mul(C, A, B, ctx) fmpz_mod_mat_mul(C, A, B)
69+
#define compat_fmpz_mod_mat_inv(B, A, ctx) fmpz_mod_mat_inv(B, A)
70+
#define compat_fmpz_mod_mat_transpose(B, A, ctx) fmpz_mod_mat_transpose(B, A)
71+
#define compat_fmpz_mod_mat_solve(X, A, B, ctx) fmpz_mod_mat_solve(X, A, B)
72+
#define compat_fmpz_mod_mat_rref(mat, ctx) fmpz_mod_mat_rref(NULL, mat)
73+
#define compat_fmpz_mod_mat_charpoly(p, M, ctx) fmpz_mod_mat_charpoly(p, M, ctx)
74+
#define compat_fmpz_mod_mat_minpoly(p, M, ctx) fmpz_mod_mat_minpoly(p, M, ctx)
75+
76+
#endif
77+
"""
1878

1979

2080
cdef extern from "flint/fmpz_mod_mat.h":
21-
fmpz_struct * fmpz_mod_mat_entry(const fmpz_mod_mat_t mat, slong i, slong j)
22-
void fmpz_mod_mat_set_entry(fmpz_mod_mat_t mat, slong i, slong j, const fmpz_t val)
23-
void fmpz_mod_mat_init(fmpz_mod_mat_t mat, slong rows, slong cols, const fmpz_t n)
24-
void fmpz_mod_mat_init_set(fmpz_mod_mat_t mat, const fmpz_mod_mat_t src)
25-
void fmpz_mod_mat_clear(fmpz_mod_mat_t mat)
26-
slong fmpz_mod_mat_nrows(const fmpz_mod_mat_t mat)
27-
slong fmpz_mod_mat_ncols(const fmpz_mod_mat_t mat)
28-
void _fmpz_mod_mat_set_mod(fmpz_mod_mat_t mat, const fmpz_t n)
29-
void fmpz_mod_mat_one(fmpz_mod_mat_t mat)
30-
void fmpz_mod_mat_zero(fmpz_mod_mat_t mat)
31-
void fmpz_mod_mat_swap(fmpz_mod_mat_t mat1, fmpz_mod_mat_t mat2)
32-
void fmpz_mod_mat_swap_entrywise(fmpz_mod_mat_t mat1, fmpz_mod_mat_t mat2)
33-
int fmpz_mod_mat_is_empty(const fmpz_mod_mat_t mat)
34-
int fmpz_mod_mat_is_square(const fmpz_mod_mat_t mat)
35-
void _fmpz_mod_mat_reduce(fmpz_mod_mat_t mat)
36-
void fmpz_mod_mat_randtest(fmpz_mod_mat_t mat, flint_rand_t state)
37-
void fmpz_mod_mat_window_init(fmpz_mod_mat_t window, const fmpz_mod_mat_t mat, slong r1, slong c1, slong r2, slong c2)
38-
void fmpz_mod_mat_window_clear(fmpz_mod_mat_t window)
39-
void fmpz_mod_mat_concat_horizontal(fmpz_mod_mat_t res, const fmpz_mod_mat_t mat1, const fmpz_mod_mat_t mat2)
40-
void fmpz_mod_mat_concat_vertical(fmpz_mod_mat_t res, const fmpz_mod_mat_t mat1, const fmpz_mod_mat_t mat2)
41-
void fmpz_mod_mat_print_pretty(const fmpz_mod_mat_t mat)
42-
int fmpz_mod_mat_is_zero(const fmpz_mod_mat_t mat)
43-
void fmpz_mod_mat_set(fmpz_mod_mat_t B, const fmpz_mod_mat_t A)
44-
void fmpz_mod_mat_transpose(fmpz_mod_mat_t B, const fmpz_mod_mat_t A)
45-
void fmpz_mod_mat_set_fmpz_mat(fmpz_mod_mat_t A, const fmpz_mat_t B)
46-
void fmpz_mod_mat_get_fmpz_mat(fmpz_mat_t A, const fmpz_mod_mat_t B)
47-
void fmpz_mod_mat_add(fmpz_mod_mat_t C, const fmpz_mod_mat_t A, const fmpz_mod_mat_t B)
48-
void fmpz_mod_mat_sub(fmpz_mod_mat_t C, const fmpz_mod_mat_t A, const fmpz_mod_mat_t B)
49-
void fmpz_mod_mat_neg(fmpz_mod_mat_t B, const fmpz_mod_mat_t A)
50-
void fmpz_mod_mat_scalar_mul_si(fmpz_mod_mat_t B, const fmpz_mod_mat_t A, slong c)
51-
void fmpz_mod_mat_scalar_mul_ui(fmpz_mod_mat_t B, const fmpz_mod_mat_t A, ulong c)
52-
void fmpz_mod_mat_scalar_mul_fmpz(fmpz_mod_mat_t B, const fmpz_mod_mat_t A, fmpz_t c)
53-
void fmpz_mod_mat_mul(fmpz_mod_mat_t C, const fmpz_mod_mat_t A, const fmpz_mod_mat_t B)
54-
# unimported types {'thread_pool_handle'}
55-
# void _fmpz_mod_mat_mul_classical_threaded_pool_op(fmpz_mod_mat_t D, const fmpz_mod_mat_t C, const fmpz_mod_mat_t A, const fmpz_mod_mat_t B, int op, thread_pool_handle * threads, slong num_threads)
56-
void _fmpz_mod_mat_mul_classical_threaded_op(fmpz_mod_mat_t D, const fmpz_mod_mat_t C, const fmpz_mod_mat_t A, const fmpz_mod_mat_t B, int op)
57-
void fmpz_mod_mat_mul_classical_threaded(fmpz_mod_mat_t C, const fmpz_mod_mat_t A, const fmpz_mod_mat_t B)
58-
void fmpz_mod_mat_sqr(fmpz_mod_mat_t B, const fmpz_mod_mat_t A)
59-
void fmpz_mod_mat_mul_fmpz_vec(fmpz_struct * c, const fmpz_mod_mat_t A, const fmpz_struct * b, slong blen)
60-
void fmpz_mod_mat_mul_fmpz_vec_ptr(fmpz_struct * const * c, const fmpz_mod_mat_t A, const fmpz_struct * const * b, slong blen)
61-
void fmpz_mod_mat_fmpz_vec_mul(fmpz_struct * c, const fmpz_struct * a, slong alen, const fmpz_mod_mat_t B)
62-
void fmpz_mod_mat_fmpz_vec_mul_ptr(fmpz_struct * const * c, const fmpz_struct * const * a, slong alen, const fmpz_mod_mat_t B)
63-
void fmpz_mod_mat_trace(fmpz_t trace, const fmpz_mod_mat_t mat)
64-
slong fmpz_mod_mat_rref(slong * perm, fmpz_mod_mat_t mat)
65-
void fmpz_mod_mat_strong_echelon_form(fmpz_mod_mat_t mat)
66-
slong fmpz_mod_mat_howell_form(fmpz_mod_mat_t mat)
67-
int fmpz_mod_mat_inv(fmpz_mod_mat_t B, fmpz_mod_mat_t A)
68-
slong fmpz_mod_mat_lu(slong * P, fmpz_mod_mat_t A, int rank_check)
69-
void fmpz_mod_mat_solve_tril(fmpz_mod_mat_t X, const fmpz_mod_mat_t L, const fmpz_mod_mat_t B, int unit)
70-
void fmpz_mod_mat_solve_triu(fmpz_mod_mat_t X, const fmpz_mod_mat_t U, const fmpz_mod_mat_t B, int unit)
71-
int fmpz_mod_mat_solve(fmpz_mod_mat_t X, const fmpz_mod_mat_t A, const fmpz_mod_mat_t B)
72-
int fmpz_mod_mat_can_solve(fmpz_mod_mat_t X, const fmpz_mod_mat_t A, const fmpz_mod_mat_t B)
73-
void fmpz_mod_mat_similarity(fmpz_mod_mat_t M, slong r, fmpz_t d)
74-
void fmpz_mod_mat_charpoly(fmpz_mod_poly_t p, const fmpz_mod_mat_t M, const fmpz_mod_ctx_t ctx)
75-
void fmpz_mod_mat_minpoly(fmpz_mod_poly_t p, const fmpz_mod_mat_t M, const fmpz_mod_ctx_t ctx)
81+
void compat_fmpz_mod_mat_init(fmpz_mod_mat_t mat, slong rows, slong cols, const fmpz_mod_ctx_t ctx)
82+
void compat_fmpz_mod_mat_init_set(fmpz_mod_mat_t mat, const fmpz_mod_mat_t src, const fmpz_mod_ctx_t ctx)
83+
void compat_fmpz_mod_mat_clear(fmpz_mod_mat_t mat, fmpz_mod_ctx_t ctx)
84+
void compat_fmpz_mod_mat_set(fmpz_mod_mat_t B, const fmpz_mod_mat_t A, const fmpz_mod_ctx_t ctx)
85+
slong compat_fmpz_mod_mat_nrows(const fmpz_mod_mat_t mat, const fmpz_mod_ctx_t ctx)
86+
slong compat_fmpz_mod_mat_ncols(const fmpz_mod_mat_t mat, const fmpz_mod_ctx_t ctx)
87+
fmpz_struct * compat_fmpz_mod_mat_entry(const fmpz_mod_mat_t mat, slong i, slong j)
88+
void compat_fmpz_mod_mat_set_entry(fmpz_mod_mat_t mat, slong i, slong j, const fmpz_t val, const fmpz_mod_ctx_t ctx)
89+
void compat_fmpz_mod_mat_one(fmpz_mod_mat_t mat, const fmpz_mod_ctx_t ctx)
90+
int compat_fmpz_mod_mat_equal(const fmpz_mod_mat_t mat1, const fmpz_mod_mat_t mat2, const fmpz_mod_ctx_t ctx)
91+
int compat_fmpz_mod_mat_is_zero(const fmpz_mod_mat_t mat, const fmpz_mod_ctx_t ctx)
92+
void compat_fmpz_mod_mat_neg(fmpz_mod_mat_t B, const fmpz_mod_mat_t A, const fmpz_mod_ctx_t ctx)
93+
void compat_fmpz_mod_mat_add(fmpz_mod_mat_t C, const fmpz_mod_mat_t A, const fmpz_mod_mat_t B, const fmpz_mod_ctx_t ctx)
94+
void compat_fmpz_mod_mat_sub(fmpz_mod_mat_t C, const fmpz_mod_mat_t A, const fmpz_mod_mat_t B, const fmpz_mod_ctx_t ctx)
95+
void compat_fmpz_mod_mat_scalar_mul_fmpz(fmpz_mod_mat_t B, const fmpz_mod_mat_t A, fmpz_t c, const fmpz_mod_ctx_t ctx)
96+
void compat_fmpz_mod_mat_mul(fmpz_mod_mat_t C, const fmpz_mod_mat_t A, const fmpz_mod_mat_t B, const fmpz_mod_ctx_t ctx)
97+
int compat_fmpz_mod_mat_inv(fmpz_mod_mat_t B, fmpz_mod_mat_t A, const fmpz_mod_ctx_t ctx)
98+
void compat_fmpz_mod_mat_transpose(fmpz_mod_mat_t B, const fmpz_mod_mat_t A, const fmpz_mod_ctx_t ctx)
99+
int compat_fmpz_mod_mat_solve(fmpz_mod_mat_t X, const fmpz_mod_mat_t A, const fmpz_mod_mat_t B, const fmpz_mod_ctx_t ctx)
100+
slong compat_fmpz_mod_mat_rref(fmpz_mod_mat_t mat, const fmpz_mod_ctx_t ctx)
101+
void compat_fmpz_mod_mat_charpoly(fmpz_mod_poly_t p, const fmpz_mod_mat_t M, const fmpz_mod_ctx_t ctx)
102+
void compat_fmpz_mod_mat_minpoly(fmpz_mod_poly_t p, const fmpz_mod_mat_t M, const fmpz_mod_ctx_t ctx)
103+
#
104+
# The functions below are unused. The signatures shown are for Flint < 3.1.0
105+
# Probably compat_ versions are needed but each signature should be checked
106+
# against Flint 3.1.0 or later. For now we comment these out.
107+
#
108+
# void _fmpz_mod_mat_set_mod(fmpz_mod_mat_t mat, const fmpz_t n)
109+
# void fmpz_mod_mat_zero(fmpz_mod_mat_t mat)
110+
# void fmpz_mod_mat_swap(fmpz_mod_mat_t mat1, fmpz_mod_mat_t mat2)
111+
# void fmpz_mod_mat_swap_entrywise(fmpz_mod_mat_t mat1, fmpz_mod_mat_t mat2)
112+
# int fmpz_mod_mat_is_empty(const fmpz_mod_mat_t mat)
113+
# int fmpz_mod_mat_is_square(const fmpz_mod_mat_t mat)
114+
# void _fmpz_mod_mat_reduce(fmpz_mod_mat_t mat)
115+
# void fmpz_mod_mat_randtest(fmpz_mod_mat_t mat, flint_rand_t state)
116+
# void fmpz_mod_mat_window_init(fmpz_mod_mat_t window, const fmpz_mod_mat_t mat, slong r1, slong c1, slong r2, slong c2)
117+
# void fmpz_mod_mat_window_clear(fmpz_mod_mat_t window)
118+
# void fmpz_mod_mat_concat_horizontal(fmpz_mod_mat_t res, const fmpz_mod_mat_t mat1, const fmpz_mod_mat_t mat2)
119+
# void fmpz_mod_mat_concat_vertical(fmpz_mod_mat_t res, const fmpz_mod_mat_t mat1, const fmpz_mod_mat_t mat2)
120+
# void fmpz_mod_mat_print_pretty(const fmpz_mod_mat_t mat)
121+
# void fmpz_mod_mat_set_fmpz_mat(fmpz_mod_mat_t A, const fmpz_mat_t B)
122+
# void fmpz_mod_mat_get_fmpz_mat(fmpz_mat_t A, const fmpz_mod_mat_t B)
123+
# void fmpz_mod_mat_scalar_mul_si(fmpz_mod_mat_t B, const fmpz_mod_mat_t A, slong c)
124+
# void fmpz_mod_mat_scalar_mul_ui(fmpz_mod_mat_t B, const fmpz_mod_mat_t A, ulong c)
125+
# # unimported types {'thread_pool_handle'}
126+
# # void _fmpz_mod_mat_mul_classical_threaded_pool_op(fmpz_mod_mat_t D, const fmpz_mod_mat_t C, const fmpz_mod_mat_t A, const fmpz_mod_mat_t B, int op, thread_pool_handle * threads, slong num_threads)
127+
# void _fmpz_mod_mat_mul_classical_threaded_op(fmpz_mod_mat_t D, const fmpz_mod_mat_t C, const fmpz_mod_mat_t A, const fmpz_mod_mat_t B, int op)
128+
# void fmpz_mod_mat_mul_classical_threaded(fmpz_mod_mat_t C, const fmpz_mod_mat_t A, const fmpz_mod_mat_t B)
129+
# void fmpz_mod_mat_sqr(fmpz_mod_mat_t B, const fmpz_mod_mat_t A)
130+
# void fmpz_mod_mat_mul_fmpz_vec(fmpz_struct * c, const fmpz_mod_mat_t A, const fmpz_struct * b, slong blen)
131+
# void fmpz_mod_mat_mul_fmpz_vec_ptr(fmpz_struct * const * c, const fmpz_mod_mat_t A, const fmpz_struct * const * b, slong blen)
132+
# void fmpz_mod_mat_fmpz_vec_mul(fmpz_struct * c, const fmpz_struct * a, slong alen, const fmpz_mod_mat_t B)
133+
# void fmpz_mod_mat_fmpz_vec_mul_ptr(fmpz_struct * const * c, const fmpz_struct * const * a, slong alen, const fmpz_mod_mat_t B)
134+
# void fmpz_mod_mat_trace(fmpz_t trace, const fmpz_mod_mat_t mat)
135+
# void fmpz_mod_mat_strong_echelon_form(fmpz_mod_mat_t mat)
136+
# slong fmpz_mod_mat_howell_form(fmpz_mod_mat_t mat)
137+
# slong fmpz_mod_mat_lu(slong * P, fmpz_mod_mat_t A, int rank_check)
138+
# void fmpz_mod_mat_solve_tril(fmpz_mod_mat_t X, const fmpz_mod_mat_t L, const fmpz_mod_mat_t B, int unit)
139+
# void fmpz_mod_mat_solve_triu(fmpz_mod_mat_t X, const fmpz_mod_mat_t U, const fmpz_mod_mat_t B, int unit)
140+
# int fmpz_mod_mat_can_solve(fmpz_mod_mat_t X, const fmpz_mod_mat_t A, const fmpz_mod_mat_t B)
141+
# void fmpz_mod_mat_similarity(fmpz_mod_mat_t M, slong r, fmpz_t d)

0 commit comments

Comments
 (0)