diff --git a/bin/rst_to_pxd.py b/bin/rst_to_pxd.py index b8308f56..0168f9b7 100755 --- a/bin/rst_to_pxd.py +++ b/bin/rst_to_pxd.py @@ -4,8 +4,8 @@ import re import sys import os -import fnmatch import argparse +from pathlib import Path """ This is relatively rudimentary, but works for the purpose intended @@ -89,14 +89,20 @@ def fill_import_dict(pyflintlibdir): """ Get a map from cython structs to the pxd that defines them """ + import_dict.clear() import_dict['fmpq_struct'] = 'types.fmpq' - with os.scandir(pyflintlibdir + '/types') as entry: - for f in entry: - if fnmatch.fnmatch(f.name, "*.pxd"): - with open(f.path) as pxd: - for t in get_cython_struct_types(pxd): - import_dict[t] = 'types.' + f.name.split('.')[0] + type_dir = Path(pyflintlibdir) / 'types' + for f in sorted(type_dir.glob("*.pxd")): + with open(f) as pxd: + for t in get_cython_struct_types(pxd): + module = 'types.' + f.stem + if t in import_dict: + raise RuntimeError( + f"Duplicate Cython type definition for {t}: " + f"{import_dict[t]} and {module}" + ) + import_dict[t] = module def undecorate(str): diff --git a/src/flint/flintlib/functions/fmpz_mod_mat.pxd b/src/flint/flintlib/functions/fmpz_mod_mat.pxd index 50992d85..4519837f 100644 --- a/src/flint/flintlib/functions/fmpz_mod_mat.pxd +++ b/src/flint/flintlib/functions/fmpz_mod_mat.pxd @@ -1,7 +1,6 @@ from flint.flintlib.types.flint cimport flint_rand_t, fmpz_struct, fmpz_t, slong, ulong from flint.flintlib.types.fmpz cimport fmpz_mat_t -from flint.flintlib.types.fmpz_mod cimport fmpz_mod_ctx_t, fmpz_mod_mat_t -from flint.flintlib.types.fmpz_mod_poly cimport fmpz_mod_poly_t +from flint.flintlib.types.fmpz_mod cimport fmpz_mod_ctx_t, fmpz_mod_mat_t, fmpz_mod_poly_t # unknown type thread_pool_handle diff --git a/src/flint/flintlib/functions/fmpz_mod_poly.pxd b/src/flint/flintlib/functions/fmpz_mod_poly.pxd index 7ddddc2b..446fb1a0 100644 --- a/src/flint/flintlib/functions/fmpz_mod_poly.pxd +++ b/src/flint/flintlib/functions/fmpz_mod_poly.pxd @@ -1,7 +1,7 @@ from flint.flintlib.types.flint cimport flint_rand_t, fmpz_struct, fmpz_t, slong, ulong from flint.flintlib.types.fmpz cimport fmpz_mat_t, fmpz_poly_struct, fmpz_poly_t -from flint.flintlib.types.fmpz_mod cimport fmpz_mod_ctx_t -from flint.flintlib.types.fmpz_mod_poly cimport fmpz_mod_berlekamp_massey_t, fmpz_mod_poly_frobenius_powers_2exp_t, fmpz_mod_poly_frobenius_powers_t, fmpz_mod_poly_radix_t, fmpz_mod_poly_struct, fmpz_mod_poly_t +from flint.flintlib.types.fmpz_mod cimport fmpz_mod_ctx_t, fmpz_mod_poly_struct, fmpz_mod_poly_t +from flint.flintlib.types.fmpz_mod_poly cimport fmpz_mod_berlekamp_massey_t, fmpz_mod_poly_frobenius_powers_2exp_t, fmpz_mod_poly_frobenius_powers_t, fmpz_mod_poly_radix_t from flint.flintlib.types.nmod cimport nmod_poly_t # unknown type FILE diff --git a/src/flint/flintlib/functions/fmpz_mod_poly_factor.pxd b/src/flint/flintlib/functions/fmpz_mod_poly_factor.pxd index 8a22bab8..82fbc362 100644 --- a/src/flint/flintlib/functions/fmpz_mod_poly_factor.pxd +++ b/src/flint/flintlib/functions/fmpz_mod_poly_factor.pxd @@ -1,7 +1,6 @@ from flint.flintlib.types.flint cimport flint_rand_t, fmpz_struct, fmpz_t, slong from flint.flintlib.types.fmpz cimport fmpz_factor_t -from flint.flintlib.types.fmpz_mod cimport fmpz_mod_ctx_t, fmpz_mod_poly_factor_t -from flint.flintlib.types.fmpz_mod_poly cimport fmpz_mod_poly_t +from flint.flintlib.types.fmpz_mod cimport fmpz_mod_ctx_t, fmpz_mod_poly_factor_t, fmpz_mod_poly_t diff --git a/src/flint/flintlib/functions/fq.pxd b/src/flint/flintlib/functions/fq.pxd index bf3a4e83..da4e1bb1 100644 --- a/src/flint/flintlib/functions/fq.pxd +++ b/src/flint/flintlib/functions/fq.pxd @@ -1,7 +1,6 @@ from flint.flintlib.types.flint cimport flint_bitcnt_t, flint_rand_t, fmpz_struct, fmpz_t, slong, ulong from flint.flintlib.types.fmpz cimport fmpz_poly_t -from flint.flintlib.types.fmpz_mod cimport fmpz_mod_ctx_t, fmpz_mod_mat_t -from flint.flintlib.types.fmpz_mod_poly cimport fmpz_mod_poly_t +from flint.flintlib.types.fmpz_mod cimport fmpz_mod_ctx_t, fmpz_mod_mat_t, fmpz_mod_poly_t from flint.flintlib.types.fq cimport fq_ctx_t, fq_t # unknown type diff --git a/src/flint/flintlib/functions/fq_default.pxd b/src/flint/flintlib/functions/fq_default.pxd index b69314d5..b7029c55 100644 --- a/src/flint/flintlib/functions/fq_default.pxd +++ b/src/flint/flintlib/functions/fq_default.pxd @@ -1,7 +1,6 @@ from flint.flintlib.types.flint cimport flint_rand_t, fmpz_t, slong, ulong from flint.flintlib.types.fmpz cimport fmpz_poly_t -from flint.flintlib.types.fmpz_mod cimport fmpz_mod_ctx_t -from flint.flintlib.types.fmpz_mod_poly cimport fmpz_mod_poly_t +from flint.flintlib.types.fmpz_mod cimport fmpz_mod_ctx_t, fmpz_mod_poly_t from flint.flintlib.types.fq_default cimport fq_default_ctx_t, fq_default_t from flint.flintlib.types.nmod cimport nmod_poly_t diff --git a/src/flint/flintlib/functions/fq_default_poly.pxd b/src/flint/flintlib/functions/fq_default_poly.pxd index 36c5a4ad..7973d815 100644 --- a/src/flint/flintlib/functions/fq_default_poly.pxd +++ b/src/flint/flintlib/functions/fq_default_poly.pxd @@ -1,6 +1,6 @@ from flint.flintlib.types.flint cimport flint_rand_t, fmpz_t, slong, ulong from flint.flintlib.types.fmpz cimport fmpz_poly_t -from flint.flintlib.types.fmpz_mod_poly cimport fmpz_mod_poly_t +from flint.flintlib.types.fmpz_mod cimport fmpz_mod_poly_t from flint.flintlib.types.fq_default cimport fq_default_ctx_t, fq_default_poly_t, fq_default_t from flint.flintlib.types.nmod cimport nmod_poly_t diff --git a/src/flint/flintlib/functions/fq_nmod_poly.pxd b/src/flint/flintlib/functions/fq_nmod_poly.pxd index 9c40d700..6d8ab10c 100644 --- a/src/flint/flintlib/functions/fq_nmod_poly.pxd +++ b/src/flint/flintlib/functions/fq_nmod_poly.pxd @@ -1,5 +1,5 @@ from flint.flintlib.types.flint cimport flint_rand_t, fmpz_t, slong, ulong -from flint.flintlib.types.fmpz_mod_poly cimport fmpz_mod_poly_t +from flint.flintlib.types.fmpz_mod cimport fmpz_mod_poly_t from flint.flintlib.types.fq_nmod cimport fq_nmod_ctx_t, fq_nmod_mat_t, fq_nmod_poly_t, fq_nmod_struct, fq_nmod_t from flint.flintlib.types.nmod cimport nmod_poly_t diff --git a/src/flint/flintlib/functions/fq_poly.pxd b/src/flint/flintlib/functions/fq_poly.pxd index 6eaa33e4..f29d69af 100644 --- a/src/flint/flintlib/functions/fq_poly.pxd +++ b/src/flint/flintlib/functions/fq_poly.pxd @@ -1,5 +1,5 @@ from flint.flintlib.types.flint cimport flint_rand_t, fmpz_t, slong, ulong -from flint.flintlib.types.fmpz_mod_poly cimport fmpz_mod_poly_t +from flint.flintlib.types.fmpz_mod cimport fmpz_mod_poly_t from flint.flintlib.types.fq cimport fq_ctx_t, fq_mat_t, fq_poly_t, fq_struct, fq_t from flint.flintlib.types.nmod cimport nmod_poly_t diff --git a/src/flint/flintlib/functions/fq_zech_poly.pxd b/src/flint/flintlib/functions/fq_zech_poly.pxd index f05259b3..9410a50b 100644 --- a/src/flint/flintlib/functions/fq_zech_poly.pxd +++ b/src/flint/flintlib/functions/fq_zech_poly.pxd @@ -1,5 +1,5 @@ from flint.flintlib.types.flint cimport flint_rand_t, fmpz_t, slong, ulong -from flint.flintlib.types.fmpz_mod_poly cimport fmpz_mod_poly_t +from flint.flintlib.types.fmpz_mod cimport fmpz_mod_poly_t from flint.flintlib.types.fq_zech cimport fq_zech_ctx_t, fq_zech_mat_t, fq_zech_poly_t, fq_zech_struct, fq_zech_t from flint.flintlib.types.nmod cimport nmod_poly_t diff --git a/src/flint/flintlib/types/fmpz_mod_poly.pxd b/src/flint/flintlib/types/fmpz_mod_poly.pxd index 688c0bc7..d3faf07e 100644 --- a/src/flint/flintlib/types/fmpz_mod_poly.pxd +++ b/src/flint/flintlib/types/fmpz_mod_poly.pxd @@ -1,18 +1,11 @@ from flint.flintlib.types.flint cimport slong, fmpz_struct, fmpz_t from flint.flintlib.types.fmpz cimport fmpz_mat_struct -from flint.flintlib.types.fmpz_mod cimport fmpz_mod_ctx_struct +from flint.flintlib.types.fmpz_mod cimport fmpz_mod_ctx_struct, fmpz_mod_poly_struct, fmpz_mod_poly_t cdef extern from "flint/fmpz_mod_poly.h": # Type definitions *********************************************************/ - ctypedef struct fmpz_mod_poly_struct: - fmpz_struct * coeffs - slong alloc - slong length - - ctypedef fmpz_mod_poly_struct fmpz_mod_poly_t[1] - ctypedef struct fmpz_mod_poly_res_struct: fmpz_t res fmpz_t lc