Skip to content

Commit ebe76b7

Browse files
committed
bindings: autogenerate partitions and ulong_extras
1 parent f4a7cda commit ebe76b7

File tree

5 files changed

+60
-52
lines changed

5 files changed

+60
-52
lines changed

bin/all_rst_to_pxd.sh

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ modules=(
5252
"fmpz_poly_factor"
5353
"fmpz_poly"
5454
"fmpz"
55-
#"fmpz_vec"
55+
"fmpz_vec"
5656
#"fq_default_mat"
5757
#"fq_default_poly_factor"
5858
#"fq_default_poly"
@@ -78,8 +78,8 @@ modules=(
7878
#"nmod_poly"
7979
#"nmod"
8080
#"nmod_vec"
81-
#"partitions"
82-
#"ulong_extras"
81+
"partitions"
82+
"ulong_extras"
8383
)
8484

8585
for module in ${modules[@]}; do

bin/rst_to_pxd.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -99,12 +99,13 @@ def undecorate(str):
9999
ret = str.strip()
100100
if ' ' in ret:
101101
ret = ret[:ret.rfind(' ')]
102-
ret = re.sub(type_modifers, '', ret)
103-
return ret.strip()
102+
ret = re.sub(type_modifers, '', ret).strip()
103+
return ret
104104

105105
def get_parameter_types(str):
106106
params = str[str.find("(") + 1 : str.rfind(")")].split(",")
107-
params.append(str.split()[0])
107+
ret_type = str.split('(')[0].rsplit(' ', 1)[0]
108+
params.append(ret_type)
108109
return [undecorate(s) for s in params if s]
109110

110111
def clean_types(function):

src/flint/flintlib/fmpz_vec.pxd

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
1-
from flint.flintlib.types.flint cimport mp_srcptr, flint_bitcnt_t, flint_rand_t, mp_ptr, slong, fmpz_struct, mp_limb_t, ulong
2-
from flint.flintlib.fmpz cimport fmpz_t
3-
from flint.flintlib.nmod cimport nmod_t
1+
from flint.flintlib.types.flint cimport flint_bitcnt_t, flint_rand_t, fmpz_struct, nmod_t, nn_ptr, nn_srcptr, slong, ulong
2+
from flint.flintlib.types.fmpz cimport fmpz_t
3+
4+
# unknown type FILE
5+
46

57
cdef extern from "flint/fmpz_vec.h":
68
fmpz_struct * _fmpz_vec_init(slong len)
@@ -10,17 +12,17 @@ cdef extern from "flint/fmpz_vec.h":
1012
slong _fmpz_vec_max_bits(const fmpz_struct * vec, slong len)
1113
slong _fmpz_vec_max_bits_ref(const fmpz_struct * vec, slong len)
1214
void _fmpz_vec_sum_max_bits(slong * sumabs, slong * maxabs, const fmpz_struct * vec, slong len)
13-
ulong _fmpz_vec_max_limbs(const fmpz_struct * vec, slong len)
15+
slong _fmpz_vec_max_limbs(const fmpz_struct * vec, slong len)
1416
void _fmpz_vec_height(fmpz_t height, const fmpz_struct * vec, slong len)
1517
slong _fmpz_vec_height_index(const fmpz_struct * vec, slong len)
1618
# int _fmpz_vec_fread(FILE * file, fmpz_struct ** vec, slong * len)
1719
int _fmpz_vec_read(fmpz_struct ** vec, slong * len)
1820
# int _fmpz_vec_fprint(FILE * file, const fmpz_struct * vec, slong len)
1921
int _fmpz_vec_print(const fmpz_struct * vec, slong len)
20-
void _fmpz_vec_get_nmod_vec(mp_ptr res, const fmpz_struct * poly, slong len, nmod_t mod)
21-
void _fmpz_vec_set_nmod_vec(fmpz_struct * res, mp_srcptr poly, slong len, nmod_t mod)
22-
void _fmpz_vec_get_fft(mp_limb_t ** coeffs_f, const fmpz_struct * coeffs_m, slong l, slong length)
23-
void _fmpz_vec_set_fft(fmpz_struct * coeffs_m, slong length, const mp_ptr * coeffs_f, slong limbs, slong sign)
22+
void _fmpz_vec_get_nmod_vec(nn_ptr res, const fmpz_struct * poly, slong len, nmod_t mod)
23+
void _fmpz_vec_set_nmod_vec(fmpz_struct * res, nn_srcptr poly, slong len, nmod_t mod)
24+
void _fmpz_vec_get_fft(ulong ** coeffs_f, const fmpz_struct * coeffs_m, slong l, slong length)
25+
void _fmpz_vec_set_fft(fmpz_struct * coeffs_m, slong length, const nn_ptr * coeffs_f, slong limbs, slong sign)
2426
slong _fmpz_vec_get_d_vec_2exp(double * appv, const fmpz_struct * vec, slong len)
2527
void _fmpz_vec_set(fmpz_struct * vec1, const fmpz_struct * vec2, slong len2)
2628
void _fmpz_vec_swap(fmpz_struct * vec1, fmpz_struct * vec2, slong len2)
@@ -40,7 +42,7 @@ cdef extern from "flint/fmpz_vec.h":
4042
void _fmpz_vec_scalar_mul_2exp(fmpz_struct * vec1, const fmpz_struct * vec2, slong len2, ulong exp)
4143
void _fmpz_vec_scalar_divexact_fmpz(fmpz_struct * vec1, const fmpz_struct * vec2, slong len2, const fmpz_t x)
4244
void _fmpz_vec_scalar_divexact_si(fmpz_struct * vec1, const fmpz_struct * vec2, slong len2, slong c)
43-
void _fmpz_vec_scalar_divexact_ui(fmpz_struct * vec1, const fmpz_struct * vec2, ulong len2, ulong c)
45+
void _fmpz_vec_scalar_divexact_ui(fmpz_struct * vec1, const fmpz_struct * vec2, slong len2, ulong c)
4446
void _fmpz_vec_scalar_fdiv_q_fmpz(fmpz_struct * vec1, const fmpz_struct * vec2, slong len2, const fmpz_t c)
4547
void _fmpz_vec_scalar_fdiv_q_si(fmpz_struct * vec1, const fmpz_struct * vec2, slong len2, slong c)
4648
void _fmpz_vec_scalar_fdiv_q_ui(fmpz_struct * vec1, const fmpz_struct * vec2, slong len2, ulong c)
@@ -59,10 +61,11 @@ cdef extern from "flint/fmpz_vec.h":
5961
void _fmpz_vec_scalar_submul_si_2exp(fmpz_struct * vec1, const fmpz_struct * vec2, slong len2, slong c, ulong e)
6062
void _fmpz_vec_sum(fmpz_t res, const fmpz_struct * vec, slong len)
6163
void _fmpz_vec_prod(fmpz_t res, const fmpz_struct * vec, slong len)
62-
void _fmpz_vec_scalar_mod_fmpz(fmpz_struct *res, const fmpz_struct *vec, slong len, const fmpz_t p)
63-
void _fmpz_vec_scalar_smod_fmpz(fmpz_struct *res, const fmpz_struct *vec, slong len, const fmpz_t p)
64+
void _fmpz_vec_scalar_mod_fmpz(fmpz_struct * res, const fmpz_struct * vec, slong len, const fmpz_t p)
65+
void _fmpz_vec_scalar_smod_fmpz(fmpz_struct * res, const fmpz_struct * vec, slong len, const fmpz_t p)
6466
void _fmpz_vec_content(fmpz_t res, const fmpz_struct * vec, slong len)
6567
void _fmpz_vec_content_chained(fmpz_t res, const fmpz_struct * vec, slong len, const fmpz_t input)
6668
void _fmpz_vec_lcm(fmpz_t res, const fmpz_struct * vec, slong len)
69+
void _fmpz_vec_dot_general_naive(fmpz_t res, const fmpz_t initial, int subtract, const fmpz_struct * a, const fmpz_struct * b, int reverse, slong len)
70+
void _fmpz_vec_dot_general(fmpz_t res, const fmpz_t initial, int subtract, const fmpz_struct * a, const fmpz_struct * b, int reverse, slong len)
6771
void _fmpz_vec_dot(fmpz_t res, const fmpz_struct * vec1, const fmpz_struct * vec2, slong len2)
68-
void _fmpz_vec_dot_ptr(fmpz_t res, const fmpz_struct * vec1, fmpz_struct ** const vec2, slong offset, slong len)

src/flint/flintlib/partitions.pxd

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
1-
from flint.flintlib.types.flint cimport ulong, slong
2-
from flint.flintlib.fmpz cimport fmpz_t
3-
from flint.flintlib.arf cimport arf_t
4-
from flint.flintlib.arb cimport arb_t
1+
from flint.flintlib.types.arb cimport arb_t
2+
from flint.flintlib.types.arf cimport arf_t
3+
from flint.flintlib.types.flint cimport slong, ulong
4+
from flint.flintlib.types.fmpz cimport fmpz_t
5+
6+
57

68
cdef extern from "flint/partitions.h":
7-
# from here on is parsed
89
void partitions_rademacher_bound(arf_t b, const fmpz_t n, ulong N)
910
void partitions_hrr_sum_arb(arb_t x, const fmpz_t n, slong N0, slong N, int use_doubles)
1011
void partitions_fmpz_fmpz(fmpz_t p, const fmpz_t n, int use_doubles)

src/flint/flintlib/ulong_extras.pxd

Lines changed: 32 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
1-
from flint.flintlib.types.flint cimport ulong, flint_rand_t, slong, mp_limb_t
2-
from flint.flintlib.fmpz cimport fmpz_t
1+
from flint.flintlib.types.flint cimport flint_rand_t, slong, ulong
2+
from flint.flintlib.types.fmpz cimport fmpz_t
3+
4+
# unknown type n_ecm_t
5+
# unknown type n_factor_t
6+
# unknown type n_primes_t
37

4-
cdef extern from "flint/ulong_extras.h":
5-
# ulong n_gcd(ulong n, ulong k)
6-
# int n_is_prime(ulong n)
78

8-
# from here on is parsed
9+
cdef extern from "flint/ulong_extras.h":
910
ulong n_randlimb(flint_rand_t state)
1011
ulong n_randbits(flint_rand_t state, unsigned int bits)
1112
ulong n_randtest_bits(flint_rand_t state, int bits)
@@ -21,6 +22,7 @@ cdef extern from "flint/ulong_extras.h":
2122
ulong n_clog_2exp(ulong n, ulong b)
2223
ulong n_revbin(ulong n, ulong b)
2324
int n_sizeinbase(ulong n, int base)
25+
ulong n_preinvert_limb_prenorm(ulong n)
2426
ulong n_preinvert_limb(ulong n)
2527
double n_precompute_inverse(ulong n)
2628
ulong n_mod_precomp(ulong a, ulong n, double ninv)
@@ -38,25 +40,25 @@ cdef extern from "flint/ulong_extras.h":
3840
ulong n_gcd(ulong x, ulong y)
3941
ulong n_gcdinv(ulong * a, ulong x, ulong y)
4042
ulong n_xgcd(ulong * a, ulong * b, ulong x, ulong y)
41-
# int n_jacobi(mp_limb_signed_t x, ulong y)
43+
int n_jacobi(slong x, ulong y)
4244
int n_jacobi_unsigned(ulong x, ulong y)
4345
ulong n_addmod(ulong a, ulong b, ulong n)
4446
ulong n_submod(ulong a, ulong b, ulong n)
4547
ulong n_invmod(ulong x, ulong y)
46-
# ulong n_powmod_precomp(ulong a, mp_limb_signed_t exp, ulong n, double npre)
48+
ulong n_powmod_precomp(ulong a, slong exp, ulong n, double npre)
4749
ulong n_powmod_ui_precomp(ulong a, ulong exp, ulong n, double npre)
48-
# ulong n_powmod(ulong a, mp_limb_signed_t exp, ulong n)
49-
# ulong n_powmod2_preinv(ulong a, mp_limb_signed_t exp, ulong n, ulong ninv)
50-
# ulong n_powmod2(ulong a, mp_limb_signed_t exp, ulong n)
50+
ulong n_powmod(ulong a, slong exp, ulong n)
51+
ulong n_powmod2_preinv(ulong a, slong exp, ulong n, ulong ninv)
52+
ulong n_powmod2(ulong a, slong exp, ulong n)
5153
ulong n_powmod2_ui_preinv(ulong a, ulong exp, ulong n, ulong ninv)
5254
ulong n_powmod2_fmpz_preinv(ulong a, const fmpz_t exp, ulong n, ulong ninv)
5355
ulong n_sqrtmod(ulong a, ulong p)
5456
slong n_sqrtmod_2pow(ulong ** sqrt, ulong a, slong exp)
5557
slong n_sqrtmod_primepow(ulong ** sqrt, ulong a, ulong p, slong exp)
5658
# slong n_sqrtmodn(ulong ** sqrt, ulong a, n_factor_t * fac)
57-
mp_limb_t n_mulmod_shoup(mp_limb_t w, mp_limb_t t, mp_limb_t w_precomp, mp_limb_t p)
58-
mp_limb_t n_mulmod_precomp_shoup(mp_limb_t w, mp_limb_t p)
59-
int n_divides(mp_limb_t * q, mp_limb_t n, mp_limb_t p)
59+
ulong n_mulmod_shoup(ulong w, ulong t, ulong w_precomp, ulong p)
60+
ulong n_mulmod_precomp_shoup(ulong w, ulong p)
61+
int n_divides(ulong * q, ulong n, ulong p)
6062
# void n_primes_init(n_primes_t iter)
6163
# void n_primes_clear(n_primes_t iter)
6264
# ulong n_primes_next(n_primes_t iter)
@@ -69,9 +71,9 @@ cdef extern from "flint/ulong_extras.h":
6971
void n_cleanup_primes()
7072
ulong n_nextprime(ulong n, int proved)
7173
ulong n_prime_pi(ulong n)
72-
void n_prime_pi_bounds(ulong *lo, ulong *hi, ulong n)
74+
void n_prime_pi_bounds(ulong * lo, ulong * hi, ulong n)
7375
ulong n_nth_prime(ulong n)
74-
void n_nth_prime_bounds(ulong *lo, ulong *hi, ulong n)
76+
void n_nth_prime_bounds(ulong * lo, ulong * hi, ulong n)
7577
int n_is_oddprime_small(ulong n)
7678
int n_is_oddprime_binary(ulong n)
7779
int n_is_prime_pocklington(ulong n, ulong iterations)
@@ -90,18 +92,19 @@ cdef extern from "flint/ulong_extras.h":
9092
int n_is_square(ulong x)
9193
int n_is_perfect_power235(ulong n)
9294
int n_is_perfect_power(ulong * root, ulong n)
93-
ulong n_rootrem(ulong* remainder, ulong n, ulong root)
95+
ulong n_rootrem(ulong * remainder, ulong n, ulong root)
9496
ulong n_cbrt(ulong n)
95-
ulong n_cbrt_newton_iteration(ulong n)
9697
ulong n_cbrt_binary_search(ulong n)
9798
ulong n_cbrt_chebyshev_approx(ulong n)
98-
ulong n_cbrtrem(ulong* remainder, ulong n)
99+
ulong n_cbrtrem(ulong * remainder, ulong n)
100+
# void n_factor_init(n_factor_t * factors)
101+
# ulong n_factor_evaluate(const n_factor_t * factors)
99102
int n_remove(ulong * n, ulong p)
100103
int n_remove2_precomp(ulong * n, ulong p, double ppre)
101104
# void n_factor_insert(n_factor_t * factors, ulong p, ulong exp)
102105
# ulong n_factor_trial_range(n_factor_t * factors, ulong n, ulong start, ulong num_primes)
103106
# ulong n_factor_trial(n_factor_t * factors, ulong n, ulong num_primes)
104-
ulong n_factor_power235(ulong *exp, ulong n)
107+
ulong n_factor_power235(ulong * exp, ulong n)
105108
ulong n_factor_one_line(ulong n, ulong iters)
106109
ulong n_factor_lehman(ulong n)
107110
ulong n_factor_SQUFOF(ulong n, ulong iters)
@@ -110,8 +113,8 @@ cdef extern from "flint/ulong_extras.h":
110113
# ulong n_factor_partial(n_factor_t * factors, ulong n, ulong limit, int proved)
111114
ulong n_factor_pp1(ulong n, ulong B1, ulong c)
112115
ulong n_factor_pp1_wrapper(ulong n)
113-
int n_factor_pollard_brent_single(mp_limb_t *factor, mp_limb_t n, mp_limb_t ninv, mp_limb_t ai, mp_limb_t xi, mp_limb_t normbits, mp_limb_t max_iters)
114-
int n_factor_pollard_brent(mp_limb_t *factor, flint_rand_t state, mp_limb_t n_in, mp_limb_t max_tries, mp_limb_t max_iters)
116+
int n_factor_pollard_brent_single(ulong * factor, ulong n, ulong ninv, ulong ai, ulong xi, ulong normbits, ulong max_iters)
117+
int n_factor_pollard_brent(ulong * factor, flint_rand_t state, ulong n_in, ulong max_tries, ulong max_iters)
115118
int n_moebius_mu(ulong n)
116119
void n_moebius_mu_vec(int * mu, ulong len)
117120
int n_is_squarefree(ulong n)
@@ -121,10 +124,10 @@ cdef extern from "flint/ulong_extras.h":
121124
# ulong n_primitive_root_prime_prefactor(ulong p, n_factor_t * factors)
122125
ulong n_primitive_root_prime(ulong p)
123126
ulong n_discrete_log_bsgs(ulong b, ulong a, ulong n)
124-
# void n_factor_ecm_double(mp_limb_t *x, mp_limb_t *z, mp_limb_t x0, mp_limb_t z0, mp_limb_t n, n_ecm_t n_ecm_inf)
125-
# void n_factor_ecm_add(mp_limb_t *x, mp_limb_t *z, mp_limb_t x1, mp_limb_t z1, mp_limb_t x2, mp_limb_t z2, mp_limb_t x0, mp_limb_t z0, mp_limb_t n, n_ecm_t n_ecm_inf)
126-
# void n_factor_ecm_mul_montgomery_ladder(mp_limb_t *x, mp_limb_t *z, mp_limb_t x0, mp_limb_t z0, mp_limb_t k, mp_limb_t n, n_ecm_t n_ecm_inf)
127-
# int n_factor_ecm_select_curve(mp_limb_t *f, mp_limb_t sigma, mp_limb_t n, n_ecm_t n_ecm_inf)
128-
# int n_factor_ecm_stage_I(mp_limb_t *f, const mp_limb_t *prime_array, mp_limb_t num, mp_limb_t B1, mp_limb_t n, n_ecm_t n_ecm_inf)
129-
# int n_factor_ecm_stage_II(mp_limb_t *f, mp_limb_t B1, mp_limb_t B2, mp_limb_t P, mp_limb_t n, n_ecm_t n_ecm_inf)
130-
# int n_factor_ecm(mp_limb_t *f, mp_limb_t curves, mp_limb_t B1, mp_limb_t B2, flint_rand_t state, mp_limb_t n)
127+
# void n_factor_ecm_double(ulong * x, ulong * z, ulong x0, ulong z0, ulong n, n_ecm_t n_ecm_inf)
128+
# void n_factor_ecm_add(ulong * x, ulong * z, ulong x1, ulong z1, ulong x2, ulong z2, ulong x0, ulong z0, ulong n, n_ecm_t n_ecm_inf)
129+
# void n_factor_ecm_mul_montgomery_ladder(ulong * x, ulong * z, ulong x0, ulong z0, ulong k, ulong n, n_ecm_t n_ecm_inf)
130+
# int n_factor_ecm_select_curve(ulong * f, ulong sigma, ulong n, n_ecm_t n_ecm_inf)
131+
# int n_factor_ecm_stage_I(ulong * f, const ulong * prime_array, ulong num, ulong B1, ulong n, n_ecm_t n_ecm_inf)
132+
# int n_factor_ecm_stage_II(ulong * f, ulong B1, ulong B2, ulong P, ulong n, n_ecm_t n_ecm_inf)
133+
int n_factor_ecm(ulong * f, ulong curves, ulong B1, ulong B2, flint_rand_t state, ulong n)

0 commit comments

Comments
 (0)