1use crate::deps::*;
4use crate::flint::*;
5use crate::fmpz_mod_types::*;
6use crate::fmpz_types::*;
7use crate::limb_types::*;
8
9
10pub const SQUARING_SPACE: u32 = 70;
11#[repr(C)]
12pub struct _aprcl_config {
13 pub R: ulong,
14 pub s: fmpz_t,
15 pub rs: n_factor_t,
16 pub qs: fmpz_factor_t,
17 pub qs_used: *mut libc::c_int,
18}
19#[allow(clippy::unnecessary_operation, clippy::identity_op)]
20const _: () = {
21 ["Size of _aprcl_config"][::std::mem::size_of::<_aprcl_config>() - 248usize];
22 ["Alignment of _aprcl_config"][::std::mem::align_of::<_aprcl_config>() - 8usize];
23 ["Offset of field: _aprcl_config::R"][::std::mem::offset_of!(_aprcl_config, R) - 0usize];
24 ["Offset of field: _aprcl_config::s"][::std::mem::offset_of!(_aprcl_config, s) - 8usize];
25 ["Offset of field: _aprcl_config::rs"][::std::mem::offset_of!(_aprcl_config, rs) - 16usize];
26 ["Offset of field: _aprcl_config::qs"][::std::mem::offset_of!(_aprcl_config, qs) - 200usize];
27 ["Offset of field: _aprcl_config::qs_used"]
28 [::std::mem::offset_of!(_aprcl_config, qs_used) - 240usize];
29};
30impl Default for _aprcl_config {
31 fn default() -> Self {
32 let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
33 unsafe {
34 ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
35 s.assume_init()
36 }
37 }
38}
39pub type aprcl_config = [_aprcl_config; 1usize];
40#[repr(C)]
41pub struct _unity_zpq {
42 pub polys: *mut fmpz_mod_poly_t,
43 pub p: ulong,
44 pub q: ulong,
45 pub ctx: fmpz_mod_ctx_t,
46}
47#[allow(clippy::unnecessary_operation, clippy::identity_op)]
48const _: () = {
49 ["Size of _unity_zpq"][::std::mem::size_of::<_unity_zpq>() - 136usize];
50 ["Alignment of _unity_zpq"][::std::mem::align_of::<_unity_zpq>() - 8usize];
51 ["Offset of field: _unity_zpq::polys"][::std::mem::offset_of!(_unity_zpq, polys) - 0usize];
52 ["Offset of field: _unity_zpq::p"][::std::mem::offset_of!(_unity_zpq, p) - 8usize];
53 ["Offset of field: _unity_zpq::q"][::std::mem::offset_of!(_unity_zpq, q) - 16usize];
54 ["Offset of field: _unity_zpq::ctx"][::std::mem::offset_of!(_unity_zpq, ctx) - 24usize];
55};
56impl Default for _unity_zpq {
57 fn default() -> Self {
58 let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
59 unsafe {
60 ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
61 s.assume_init()
62 }
63 }
64}
65pub type unity_zpq = [_unity_zpq; 1usize];
66#[repr(C)]
67pub struct _unity_zp {
68 pub poly: fmpz_mod_poly_t,
69 pub p: ulong,
70 pub exp: ulong,
71 pub ctx: fmpz_mod_ctx_t,
72}
73#[allow(clippy::unnecessary_operation, clippy::identity_op)]
74const _: () = {
75 ["Size of _unity_zp"][::std::mem::size_of::<_unity_zp>() - 152usize];
76 ["Alignment of _unity_zp"][::std::mem::align_of::<_unity_zp>() - 8usize];
77 ["Offset of field: _unity_zp::poly"][::std::mem::offset_of!(_unity_zp, poly) - 0usize];
78 ["Offset of field: _unity_zp::p"][::std::mem::offset_of!(_unity_zp, p) - 24usize];
79 ["Offset of field: _unity_zp::exp"][::std::mem::offset_of!(_unity_zp, exp) - 32usize];
80 ["Offset of field: _unity_zp::ctx"][::std::mem::offset_of!(_unity_zp, ctx) - 40usize];
81};
82impl Default for _unity_zp {
83 fn default() -> Self {
84 let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
85 unsafe {
86 ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
87 s.assume_init()
88 }
89 }
90}
91pub type unity_zp = [_unity_zp; 1usize];
92pub const primality_test_status_UNKNOWN: primality_test_status = 0;
93pub const primality_test_status_PRIME: primality_test_status = 1;
94pub const primality_test_status_COMPOSITE: primality_test_status = 2;
95pub const primality_test_status_PROBABPRIME: primality_test_status = 3;
96pub type primality_test_status = libc::c_uint;
97extern "C" {
98 pub fn _aprcl_p_ind(conf: *const _aprcl_config, p: ulong) -> libc::c_int;
99 pub fn aprcl_p_power_in_q(q: ulong, p: ulong) -> ulong;
100 pub fn aprcl_is_mul_coprime_ui_ui(x: ulong, y: ulong, n: *const fmpz) -> libc::c_int;
101 pub fn aprcl_is_mul_coprime_ui_fmpz(x: ulong, y: *const fmpz, n: *const fmpz) -> libc::c_int;
102 pub fn aprcl_is_prime(n: *const fmpz) -> libc::c_int;
103 pub fn aprcl_config_gauss_init(conf: *mut _aprcl_config, n: *const fmpz);
104 pub fn aprcl_config_gauss_init_min_R(conf: *mut _aprcl_config, n: *const fmpz, R: ulong);
105 pub fn aprcl_config_gauss_clear(conf: *mut _aprcl_config);
106 pub fn aprcl_R_value(n: *const fmpz) -> ulong;
107 pub fn aprcl_config_jacobi_init(conf: *mut _aprcl_config, n: *const fmpz);
108 pub fn aprcl_config_jacobi_clear(conf: *mut _aprcl_config);
109 pub fn aprcl_is_prime_gauss(n: *const fmpz) -> libc::c_int;
110 pub fn aprcl_is_prime_gauss_min_R(n: *const fmpz, R: ulong) -> libc::c_int;
111 pub fn _aprcl_is_prime_gauss(
112 n: *const fmpz,
113 config: *const _aprcl_config,
114 ) -> primality_test_status;
115 pub fn _aprcl_is_gausspower_2q_equal_first(q: ulong, n: *const fmpz) -> libc::c_int;
116 pub fn _aprcl_is_gausspower_2q_equal_second(q: ulong, n: *const fmpz) -> libc::c_int;
117 pub fn _aprcl_is_gausspower_from_unity_p(q: ulong, r: ulong, n: *const fmpz) -> slong;
118 pub fn aprcl_is_prime_jacobi(n: *const fmpz) -> libc::c_int;
119 pub fn _aprcl_is_prime_jacobi(
120 n: *const fmpz,
121 config: *const _aprcl_config,
122 ) -> primality_test_status;
123 pub fn _aprcl_is_prime_jacobi_check_pk(j: *const _unity_zp, u: *const fmpz, v: ulong) -> slong;
124 pub fn _aprcl_is_prime_jacobi_check_21(q: ulong, n: *const fmpz) -> slong;
125 pub fn _aprcl_is_prime_jacobi_check_22(
126 j: *const _unity_zp,
127 u: *const fmpz,
128 v: ulong,
129 q: ulong,
130 ) -> slong;
131 pub fn _aprcl_is_prime_jacobi_check_2k(
132 j: *const _unity_zp,
133 j2_1: *const _unity_zp,
134 j2_2: *const _unity_zp,
135 u: *const fmpz,
136 v: ulong,
137 ) -> slong;
138 pub fn _aprcl_is_prime_jacobi_additional_test(n: *const fmpz, p: ulong) -> libc::c_int;
139 pub fn aprcl_is_prime_final_division(n: *const fmpz, s: *const fmpz, r: ulong) -> libc::c_int;
140 pub fn unity_zp_init(f: *mut _unity_zp, p: ulong, exp: ulong, n: *const fmpz);
141 pub fn unity_zp_clear(f: *mut _unity_zp);
142 pub fn unity_zp_copy(f: *mut _unity_zp, g: *const _unity_zp);
143 pub fn unity_zp_swap(f: *mut _unity_zp, g: *mut _unity_zp);
144 pub fn unity_zp_set_zero(f: *mut _unity_zp);
145 pub fn unity_zp_is_unity(f: *mut _unity_zp) -> slong;
146 pub fn unity_zp_equal(f: *mut _unity_zp, g: *mut _unity_zp) -> libc::c_int;
147 pub fn unity_zp_coeff_set_fmpz(f: *mut _unity_zp, ind: ulong, x: *const fmpz);
148 pub fn unity_zp_coeff_set_ui(f: *mut _unity_zp, ind: ulong, x: ulong);
149 pub fn unity_zp_coeff_add_fmpz(f: *mut _unity_zp, ind: ulong, x: *const fmpz);
150 pub fn unity_zp_coeff_add_ui(f: *mut _unity_zp, ind: ulong, x: ulong);
151 pub fn unity_zp_coeff_inc(f: *mut _unity_zp, ind: ulong);
152 pub fn unity_zp_coeff_dec(f: *mut _unity_zp, ind: ulong);
153 pub fn unity_zp_mul_scalar_ui(f: *mut _unity_zp, g: *const _unity_zp, s: ulong);
154 pub fn unity_zp_add(f: *mut _unity_zp, g: *const _unity_zp, h: *const _unity_zp);
155 pub fn unity_zp_mul(f: *mut _unity_zp, g: *const _unity_zp, h: *const _unity_zp);
156 pub fn unity_zp_sqr(f: *mut _unity_zp, g: *const _unity_zp);
157 pub fn unity_zp_mul_inplace(
158 f: *mut _unity_zp,
159 g: *const _unity_zp,
160 h: *const _unity_zp,
161 t: *mut fmpz_t,
162 );
163 pub fn unity_zp_sqr_inplace(f: *mut _unity_zp, g: *const _unity_zp, t: *mut fmpz_t);
164 pub fn unity_zp_ar1(t: *mut fmpz_t);
165 pub fn unity_zp_ar2(t: *mut fmpz_t);
166 pub fn unity_zp_ar3(t: *mut fmpz_t);
167 pub fn unity_zp_ar4(t: *mut fmpz_t);
168 pub fn unity_zp_mul3(
169 f: *mut _unity_zp,
170 g: *const _unity_zp,
171 h: *const _unity_zp,
172 t: *mut fmpz_t,
173 );
174 pub fn unity_zp_mul4(
175 f: *mut _unity_zp,
176 g: *const _unity_zp,
177 h: *const _unity_zp,
178 t: *mut fmpz_t,
179 );
180 pub fn unity_zp_mul5(
181 f: *mut _unity_zp,
182 g: *const _unity_zp,
183 h: *const _unity_zp,
184 t: *mut fmpz_t,
185 );
186 pub fn unity_zp_mul7(
187 f: *mut _unity_zp,
188 g: *const _unity_zp,
189 h: *const _unity_zp,
190 t: *mut fmpz_t,
191 );
192 pub fn unity_zp_mul8(
193 f: *mut _unity_zp,
194 g: *const _unity_zp,
195 h: *const _unity_zp,
196 t: *mut fmpz_t,
197 );
198 pub fn unity_zp_mul9(
199 f: *mut _unity_zp,
200 g: *const _unity_zp,
201 h: *const _unity_zp,
202 t: *mut fmpz_t,
203 );
204 pub fn unity_zp_mul11(
205 f: *mut _unity_zp,
206 g: *const _unity_zp,
207 h: *const _unity_zp,
208 t: *mut fmpz_t,
209 );
210 pub fn unity_zp_mul16(
211 f: *mut _unity_zp,
212 g: *const _unity_zp,
213 h: *const _unity_zp,
214 t: *mut fmpz_t,
215 );
216 pub fn unity_zp_sqr3(f: *mut _unity_zp, g: *const _unity_zp, t: *mut fmpz_t);
217 pub fn unity_zp_sqr4(f: *mut _unity_zp, g: *const _unity_zp, t: *mut fmpz_t);
218 pub fn unity_zp_sqr5(f: *mut _unity_zp, g: *const _unity_zp, t: *mut fmpz_t);
219 pub fn unity_zp_sqr7(f: *mut _unity_zp, g: *const _unity_zp, t: *mut fmpz_t);
220 pub fn unity_zp_sqr8(f: *mut _unity_zp, g: *const _unity_zp, t: *mut fmpz_t);
221 pub fn unity_zp_sqr9(f: *mut _unity_zp, g: *const _unity_zp, t: *mut fmpz_t);
222 pub fn unity_zp_sqr11(f: *mut _unity_zp, g: *const _unity_zp, t: *mut fmpz_t);
223 pub fn unity_zp_sqr16(f: *mut _unity_zp, g: *const _unity_zp, t: *mut fmpz_t);
224 pub fn unity_zp_pow_fmpz(f: *mut _unity_zp, g: *const _unity_zp, pow: *const fmpz);
225 pub fn unity_zp_pow_ui(f: *mut _unity_zp, g: *const _unity_zp, pow: ulong);
226 pub fn _unity_zp_pow_select_k(n: *const fmpz) -> ulong;
227 pub fn unity_zp_pow_2k_fmpz(f: *mut _unity_zp, g: *const _unity_zp, pow: *const fmpz);
228 pub fn unity_zp_pow_2k_ui(f: *mut _unity_zp, g: *const _unity_zp, pow: ulong);
229 pub fn unity_zp_pow_sliding_fmpz(f: *mut _unity_zp, g: *mut _unity_zp, pow: *const fmpz);
230 pub fn _unity_zp_reduce_cyclotomic_divmod(f: *mut _unity_zp);
231 pub fn _unity_zp_reduce_cyclotomic(f: *mut _unity_zp);
232 pub fn unity_zp_reduce_cyclotomic(f: *mut _unity_zp, g: *const _unity_zp);
233 pub fn unity_zp_aut(f: *mut _unity_zp, g: *const _unity_zp, x: ulong);
234 pub fn unity_zp_aut_inv(f: *mut _unity_zp, g: *const _unity_zp, x: ulong);
235 pub fn aprcl_f_table(q: ulong) -> nn_ptr;
236 pub fn _unity_zp_jacobi_sum_pq_general(
237 f: *mut _unity_zp,
238 table: nn_ptr,
239 p: ulong,
240 q: ulong,
241 k: ulong,
242 a: ulong,
243 b: ulong,
244 );
245 pub fn unity_zp_jacobi_sum_pq(f: *mut _unity_zp, q: ulong, p: ulong);
246 pub fn unity_zp_jacobi_sum_2q_one(f: *mut _unity_zp, q: ulong);
247 pub fn unity_zp_jacobi_sum_2q_two(f: *mut _unity_zp, q: ulong);
248 pub fn unity_zpq_init(f: *mut _unity_zpq, q: ulong, p: ulong, n: *const fmpz);
249 pub fn unity_zpq_clear(f: *mut _unity_zpq);
250 pub fn unity_zpq_copy(f: *mut _unity_zpq, g: *const _unity_zpq);
251 pub fn unity_zpq_swap(f: *mut _unity_zpq, g: *mut _unity_zpq);
252 pub fn unity_zpq_equal(f: *const _unity_zpq, g: *const _unity_zpq) -> libc::c_int;
253 pub fn unity_zpq_coeff_set_fmpz(f: *mut _unity_zpq, i: slong, j: slong, x: *const fmpz);
254 pub fn unity_zpq_coeff_set_ui(f: *mut _unity_zpq, i: slong, j: slong, x: ulong);
255 pub fn unity_zpq_coeff_add(f: *mut _unity_zpq, i: slong, j: slong, x: *const fmpz);
256 pub fn unity_zpq_coeff_add_ui(f: *mut _unity_zpq, i: slong, j: slong, x: ulong);
257 pub fn unity_zpq_add(f: *mut _unity_zpq, g: *const _unity_zpq, h: *const _unity_zpq);
258 pub fn unity_zpq_mul(f: *mut _unity_zpq, g: *const _unity_zpq, h: *const _unity_zpq);
259 pub fn _unity_zpq_mul_unity_p(f: *mut _unity_zpq);
260 pub fn unity_zpq_mul_unity_p_pow(f: *mut _unity_zpq, g: *const _unity_zpq, p: slong);
261 pub fn unity_zpq_pow(f: *mut _unity_zpq, g: *const _unity_zpq, p: *const fmpz);
262 pub fn unity_zpq_pow_ui(f: *mut _unity_zpq, g: *const _unity_zpq, pow: ulong);
263 pub fn unity_zpq_gauss_sum(f: *mut _unity_zpq, q: ulong, p: ulong);
264 pub fn unity_zpq_gauss_sum_character_pow(f: *mut _unity_zpq, q: ulong, p: ulong, pow: ulong);
265 pub fn unity_zpq_gauss_sum_sigma_pow(f: *mut _unity_zpq, q: ulong, p: ulong);
266}