1#![allow(non_snake_case)]
2#![allow(non_camel_case_types)]
3
4use crate::deps::*;
7use crate::flint::*;
8use crate::fmpz::fmpz;
9use crate::nmod_mat::nmod_mat_struct;
10use crate::nmod_vec::nmod_t;
11use libc::{c_char, c_int, c_void, FILE};
12
13#[repr(C)]
14#[derive(Debug, Copy, Clone, Hash)]
15pub struct nmod_poly_struct {
16 pub coeffs: mp_ptr,
17 pub alloc: mp_limb_signed_t,
18 pub length: mp_limb_signed_t,
19 pub mod_: nmod_t,
20}
21
22pub type nmod_poly_t = [nmod_poly_struct; 1usize];
23
24#[repr(C)]
25#[derive(Debug, Copy, Clone, Hash)]
26pub struct nmod_poly_res_struct {
27 pub res: mp_limb_t,
28 pub lc: mp_limb_t,
29 pub len0: mp_limb_signed_t,
30 pub len1: mp_limb_signed_t,
31 pub off: mp_limb_signed_t,
32}
33
34pub type nmod_poly_res_t = [nmod_poly_res_struct; 1usize];
35
36#[repr(C)]
37#[derive(Debug, Copy, Clone)]
38pub struct nmod_poly_matrix_precompute_arg_t {
39 pub A: *mut nmod_mat_struct,
40 pub poly1: *mut nmod_poly_struct,
41 pub poly2: *mut nmod_poly_struct,
42 pub poly2inv: *mut nmod_poly_struct,
43}
44
45#[repr(C)]
46#[derive(Debug, Copy, Clone)]
47pub struct nmod_poly_compose_mod_precomp_preinv_arg_t {
48 pub A: *mut nmod_mat_struct,
49 pub res: *mut nmod_poly_struct,
50 pub poly1: *mut nmod_poly_struct,
51 pub poly3: *mut nmod_poly_struct,
52 pub poly3inv: *mut nmod_poly_struct,
53}
54
55#[repr(C)]
56#[derive(Debug, Copy, Clone)]
57pub struct _nmod_poly_multi_crt_prog_instr {
58 pub a_idx: mp_limb_signed_t,
59 pub b_idx: mp_limb_signed_t,
60 pub c_idx: mp_limb_signed_t,
61 pub idem: nmod_poly_t,
62 pub modulus: nmod_poly_t,
63}
64
65#[repr(C)]
66#[derive(Debug, Copy, Clone)]
67pub struct nmod_poly_multi_crt_struct {
68 pub prog: *mut _nmod_poly_multi_crt_prog_instr,
69 pub length: mp_limb_signed_t,
70 pub alloc: mp_limb_signed_t,
71 pub localsize: mp_limb_signed_t,
72 pub temp1loc: mp_limb_signed_t,
73 pub temp2loc: mp_limb_signed_t,
74 pub good: c_int,
75}
76
77pub type nmod_poly_multi_crt_t = [nmod_poly_multi_crt_struct; 1usize];
78
79#[repr(C)]
80#[derive(Debug, Copy, Clone)]
81pub struct nmod_berlekamp_massey_struct {
82 pub npoints: mp_limb_signed_t,
83 pub R0: nmod_poly_t,
84 pub R1: nmod_poly_t,
85 pub V0: nmod_poly_t,
86 pub V1: nmod_poly_t,
87 pub qt: nmod_poly_t,
88 pub rt: nmod_poly_t,
89 pub points: nmod_poly_t,
90}
91
92pub type nmod_berlekamp_massey_t = [nmod_berlekamp_massey_struct; 1usize];
93
94extern "C" {
95 pub fn signed_mpn_sub_n(
96 res: mp_ptr,
97 op1: mp_srcptr,
98 op2: mp_srcptr,
99 n: mp_limb_signed_t,
100 ) -> c_int;
101 pub fn nmod_poly_init(poly: *mut nmod_poly_struct, n: mp_limb_t);
102 pub fn nmod_poly_init_preinv(poly: *mut nmod_poly_struct, n: mp_limb_t, ninv: mp_limb_t);
103 pub fn nmod_poly_init2(poly: *mut nmod_poly_struct, n: mp_limb_t, alloc: mp_limb_signed_t);
104 pub fn nmod_poly_init2_preinv(
105 poly: *mut nmod_poly_struct,
106 n: mp_limb_t,
107 ninv: mp_limb_t,
108 alloc: mp_limb_signed_t,
109 );
110 pub fn nmod_poly_realloc(poly: *mut nmod_poly_struct, alloc: mp_limb_signed_t);
111 pub fn nmod_poly_clear(poly: *mut nmod_poly_struct);
112 pub fn nmod_poly_fit_length(poly: *mut nmod_poly_struct, alloc: mp_limb_signed_t);
113 pub fn nmod_poly_init_mod(poly: *mut nmod_poly_struct, mod_: nmod_t);
114 pub fn nmod_poly_set_mod(poly: *mut nmod_poly_struct, mod_: nmod_t);
115 pub fn _nmod_poly_set_length(poly: *mut nmod_poly_struct, len: mp_limb_signed_t);
116 pub fn _nmod_poly_normalise(poly: *mut nmod_poly_struct);
117 pub fn nmod_poly_length(poly: *mut nmod_poly_struct) -> mp_limb_signed_t;
118 pub fn nmod_poly_degree(poly: *mut nmod_poly_struct) -> mp_limb_signed_t;
119 pub fn nmod_poly_modulus(poly: *mut nmod_poly_struct) -> mp_limb_t;
120 pub fn nmod_poly_max_bits(poly: *mut nmod_poly_struct) -> mp_limb_t;
121 pub fn nmod_poly_lead(poly: *mut nmod_poly_struct) -> mp_ptr;
122 pub fn nmod_poly_set(a: *mut nmod_poly_struct, b: *mut nmod_poly_struct);
123 pub fn nmod_poly_swap(poly1: *mut nmod_poly_struct, poly2: *mut nmod_poly_struct);
124 pub fn nmod_poly_zero(res: *mut nmod_poly_struct);
125 pub fn nmod_poly_one(res: *mut nmod_poly_struct);
126 pub fn nmod_poly_truncate(poly: *mut nmod_poly_struct, len: mp_limb_signed_t);
127 pub fn nmod_poly_set_trunc(
128 res: *mut nmod_poly_struct,
129 poly: *mut nmod_poly_struct,
130 n: mp_limb_signed_t,
131 );
132 pub fn _nmod_poly_reverse(
133 output: mp_ptr,
134 input: mp_srcptr,
135 len: mp_limb_signed_t,
136 m: mp_limb_signed_t,
137 );
138 pub fn nmod_poly_reverse(
139 output: *mut nmod_poly_struct,
140 input: *mut nmod_poly_struct,
141 m: mp_limb_signed_t,
142 );
143 pub fn nmod_poly_equal(a: *mut nmod_poly_struct, b: *mut nmod_poly_struct) -> c_int;
144 pub fn nmod_poly_equal_trunc(
145 poly1: *mut nmod_poly_struct,
146 poly2: *mut nmod_poly_struct,
147 n: mp_limb_signed_t,
148 ) -> c_int;
149 pub fn nmod_poly_is_zero(poly: *mut nmod_poly_struct) -> c_int;
150 pub fn nmod_poly_is_one(poly: *mut nmod_poly_struct) -> c_int;
151 pub fn nmod_poly_randtest(
152 poly: *mut nmod_poly_struct,
153 state: *mut flint_rand_s,
154 len: mp_limb_signed_t,
155 );
156 pub fn nmod_poly_randtest_not_zero(
157 poly: *mut nmod_poly_struct,
158 state: *mut flint_rand_s,
159 len: mp_limb_signed_t,
160 );
161 pub fn nmod_poly_randtest_irreducible(
162 poly: *mut nmod_poly_struct,
163 state: *mut flint_rand_s,
164 len: mp_limb_signed_t,
165 );
166 pub fn nmod_poly_randtest_monic(
167 poly: *mut nmod_poly_struct,
168 state: *mut flint_rand_s,
169 len: mp_limb_signed_t,
170 );
171 pub fn nmod_poly_randtest_monic_irreducible(
172 poly: *mut nmod_poly_struct,
173 state: *mut flint_rand_s,
174 len: mp_limb_signed_t,
175 );
176 pub fn nmod_poly_randtest_monic_primitive(
177 poly: *mut nmod_poly_struct,
178 state: *mut flint_rand_s,
179 len: mp_limb_signed_t,
180 );
181 pub fn nmod_poly_randtest_trinomial(
182 poly: *mut nmod_poly_struct,
183 state: *mut flint_rand_s,
184 len: mp_limb_signed_t,
185 );
186 pub fn nmod_poly_randtest_trinomial_irreducible(
187 poly: *mut nmod_poly_struct,
188 state: *mut flint_rand_s,
189 len: mp_limb_signed_t,
190 max_attempts: mp_limb_signed_t,
191 ) -> c_int;
192 pub fn nmod_poly_randtest_pentomial(
193 poly: *mut nmod_poly_struct,
194 state: *mut flint_rand_s,
195 len: mp_limb_signed_t,
196 );
197 pub fn nmod_poly_randtest_pentomial_irreducible(
198 poly: *mut nmod_poly_struct,
199 state: *mut flint_rand_s,
200 len: mp_limb_signed_t,
201 max_attempts: mp_limb_signed_t,
202 ) -> c_int;
203 pub fn nmod_poly_randtest_sparse_irreducible(
204 poly: *mut nmod_poly_struct,
205 state: *mut flint_rand_s,
206 len: mp_limb_signed_t,
207 );
208 pub fn nmod_poly_get_coeff_ui(poly: *mut nmod_poly_struct, j: mp_limb_signed_t) -> mp_limb_t;
209 pub fn nmod_poly_set_coeff_ui(poly: *mut nmod_poly_struct, j: mp_limb_signed_t, c: mp_limb_t);
210 pub fn nmod_poly_get_str(poly: *mut nmod_poly_struct) -> *mut c_char;
211 pub fn nmod_poly_get_str_pretty(poly: *mut nmod_poly_struct, x: *const c_char) -> *mut c_char;
212 pub fn nmod_poly_set_str(poly: *mut nmod_poly_struct, s: *const c_char) -> c_int;
213 pub fn nmod_poly_fread(f: *mut FILE, poly: *mut nmod_poly_struct) -> c_int;
214 pub fn nmod_poly_fprint(f: *mut FILE, poly: *mut nmod_poly_struct) -> c_int;
215 pub fn nmod_poly_fprint_pretty(
216 f: *mut FILE,
217 a: *mut nmod_poly_struct,
218 x: *const c_char,
219 ) -> c_int;
220 pub fn nmod_poly_print(a: *mut nmod_poly_struct) -> c_int;
221 pub fn nmod_poly_print_pretty(a: *mut nmod_poly_struct, x: *const c_char) -> c_int;
222 pub fn nmod_poly_read(poly: *mut nmod_poly_struct) -> c_int;
223 pub fn _nmod_poly_shift_left(
224 res: mp_ptr,
225 poly: mp_srcptr,
226 len: mp_limb_signed_t,
227 k: mp_limb_signed_t,
228 );
229 pub fn nmod_poly_shift_left(
230 res: *mut nmod_poly_struct,
231 poly: *mut nmod_poly_struct,
232 k: mp_limb_signed_t,
233 );
234 pub fn _nmod_poly_shift_right(
235 res: mp_ptr,
236 poly: mp_srcptr,
237 len: mp_limb_signed_t,
238 k: mp_limb_signed_t,
239 );
240 pub fn nmod_poly_shift_right(
241 res: *mut nmod_poly_struct,
242 poly: *mut nmod_poly_struct,
243 k: mp_limb_signed_t,
244 );
245 pub fn _nmod_poly_add(
246 res: mp_ptr,
247 poly1: mp_srcptr,
248 len1: mp_limb_signed_t,
249 poly2: mp_srcptr,
250 len2: mp_limb_signed_t,
251 mod_: nmod_t,
252 );
253 pub fn nmod_poly_add(
254 res: *mut nmod_poly_struct,
255 poly1: *mut nmod_poly_struct,
256 poly2: *mut nmod_poly_struct,
257 );
258 pub fn nmod_poly_add_ui(res: *mut nmod_poly_struct, poly: *mut nmod_poly_struct, c: mp_limb_t);
259 pub fn nmod_poly_add_series(
260 res: *mut nmod_poly_struct,
261 poly1: *mut nmod_poly_struct,
262 poly2: *mut nmod_poly_struct,
263 n: mp_limb_signed_t,
264 );
265 pub fn _nmod_poly_sub(
266 res: mp_ptr,
267 poly1: mp_srcptr,
268 len1: mp_limb_signed_t,
269 poly2: mp_srcptr,
270 len2: mp_limb_signed_t,
271 mod_: nmod_t,
272 );
273 pub fn nmod_poly_sub(
274 res: *mut nmod_poly_struct,
275 poly1: *mut nmod_poly_struct,
276 poly2: *mut nmod_poly_struct,
277 );
278 pub fn nmod_poly_sub_series(
279 res: *mut nmod_poly_struct,
280 poly1: *mut nmod_poly_struct,
281 poly2: *mut nmod_poly_struct,
282 n: mp_limb_signed_t,
283 );
284 pub fn nmod_poly_sub_ui(res: *mut nmod_poly_struct, poly: *mut nmod_poly_struct, c: mp_limb_t);
285 pub fn nmod_poly_neg(res: *mut nmod_poly_struct, poly1: *mut nmod_poly_struct);
286 pub fn nmod_poly_scalar_mul_nmod(
287 res: *mut nmod_poly_struct,
288 poly1: *mut nmod_poly_struct,
289 c: mp_limb_t,
290 );
291 pub fn _nmod_poly_make_monic(
292 output: mp_ptr,
293 input: mp_srcptr,
294 len: mp_limb_signed_t,
295 mod_: nmod_t,
296 );
297 pub fn nmod_poly_make_monic(output: *mut nmod_poly_struct, input: *mut nmod_poly_struct);
298 pub fn _nmod_poly_KS2_pack1(
299 res: mp_ptr,
300 op: mp_srcptr,
301 n: mp_limb_signed_t,
302 s: mp_limb_signed_t,
303 b: mp_limb_t,
304 k: mp_limb_t,
305 r: mp_limb_signed_t,
306 );
307 pub fn _nmod_poly_KS2_pack(
308 res: mp_ptr,
309 op: mp_srcptr,
310 n: mp_limb_signed_t,
311 s: mp_limb_signed_t,
312 b: mp_limb_t,
313 k: mp_limb_t,
314 r: mp_limb_signed_t,
315 );
316 pub fn _nmod_poly_KS2_unpack1(
317 res: mp_ptr,
318 op: mp_srcptr,
319 n: mp_limb_signed_t,
320 b: mp_limb_t,
321 k: mp_limb_t,
322 );
323 pub fn _nmod_poly_KS2_unpack2(
324 res: mp_ptr,
325 op: mp_srcptr,
326 n: mp_limb_signed_t,
327 b: mp_limb_t,
328 k: mp_limb_t,
329 );
330 pub fn _nmod_poly_KS2_unpack3(
331 res: mp_ptr,
332 op: mp_srcptr,
333 n: mp_limb_signed_t,
334 b: mp_limb_t,
335 k: mp_limb_t,
336 );
337 pub fn _nmod_poly_KS2_unpack(
338 res: mp_ptr,
339 op: mp_srcptr,
340 n: mp_limb_signed_t,
341 b: mp_limb_t,
342 k: mp_limb_t,
343 );
344 pub fn _nmod_poly_KS2_reduce(
345 res: mp_ptr,
346 s: mp_limb_signed_t,
347 op: mp_srcptr,
348 n: mp_limb_signed_t,
349 w: mp_limb_t,
350 mod_: nmod_t,
351 );
352 pub fn _nmod_poly_KS2_recover_reduce1(
353 res: mp_ptr,
354 s: mp_limb_signed_t,
355 op1: mp_srcptr,
356 op2: mp_srcptr,
357 n: mp_limb_signed_t,
358 b: mp_limb_t,
359 mod_: nmod_t,
360 );
361 pub fn _nmod_poly_KS2_recover_reduce2(
362 res: mp_ptr,
363 s: mp_limb_signed_t,
364 op1: mp_srcptr,
365 op2: mp_srcptr,
366 n: mp_limb_signed_t,
367 b: mp_limb_t,
368 mod_: nmod_t,
369 );
370 pub fn _nmod_poly_KS2_recover_reduce2b(
371 res: mp_ptr,
372 s: mp_limb_signed_t,
373 op1: mp_srcptr,
374 op2: mp_srcptr,
375 n: mp_limb_signed_t,
376 b: mp_limb_t,
377 mod_: nmod_t,
378 );
379 pub fn _nmod_poly_KS2_recover_reduce3(
380 res: mp_ptr,
381 s: mp_limb_signed_t,
382 op1: mp_srcptr,
383 op2: mp_srcptr,
384 n: mp_limb_signed_t,
385 b: mp_limb_t,
386 mod_: nmod_t,
387 );
388 pub fn _nmod_poly_KS2_recover_reduce(
389 res: mp_ptr,
390 s: mp_limb_signed_t,
391 op1: mp_srcptr,
392 op2: mp_srcptr,
393 n: mp_limb_signed_t,
394 b: mp_limb_t,
395 mod_: nmod_t,
396 );
397 pub fn _nmod_poly_bit_pack(
398 res: mp_ptr,
399 poly: mp_srcptr,
400 len: mp_limb_signed_t,
401 bits: mp_limb_t,
402 );
403 pub fn _nmod_poly_bit_unpack(
404 res: mp_ptr,
405 len: mp_limb_signed_t,
406 mpn: mp_srcptr,
407 bits: mp_limb_t,
408 mod_: nmod_t,
409 );
410 pub fn nmod_poly_bit_pack(f: *mut fmpz, poly: *mut nmod_poly_struct, bit_size: mp_limb_t);
411 pub fn nmod_poly_bit_unpack(poly: *mut nmod_poly_struct, f: *mut fmpz, bit_size: mp_limb_t);
412 pub fn _nmod_poly_mul_classical(
413 res: mp_ptr,
414 poly1: mp_srcptr,
415 len1: mp_limb_signed_t,
416 poly2: mp_srcptr,
417 len2: mp_limb_signed_t,
418 mod_: nmod_t,
419 );
420 pub fn nmod_poly_mul_classical(
421 res: *mut nmod_poly_struct,
422 poly1: *mut nmod_poly_struct,
423 poly2: *mut nmod_poly_struct,
424 );
425 pub fn _nmod_poly_mullow_classical(
426 res: mp_ptr,
427 poly1: mp_srcptr,
428 len1: mp_limb_signed_t,
429 poly2: mp_srcptr,
430 len2: mp_limb_signed_t,
431 trunc: mp_limb_signed_t,
432 mod_: nmod_t,
433 );
434 pub fn nmod_poly_mullow_classical(
435 res: *mut nmod_poly_struct,
436 poly1: *mut nmod_poly_struct,
437 poly2: *mut nmod_poly_struct,
438 trunc: mp_limb_signed_t,
439 );
440 pub fn _nmod_poly_mulhigh_classical(
441 res: mp_ptr,
442 poly1: mp_srcptr,
443 len1: mp_limb_signed_t,
444 poly2: mp_srcptr,
445 len2: mp_limb_signed_t,
446 start: mp_limb_signed_t,
447 mod_: nmod_t,
448 );
449 pub fn nmod_poly_mulhigh_classical(
450 res: *mut nmod_poly_struct,
451 poly1: *mut nmod_poly_struct,
452 poly2: *mut nmod_poly_struct,
453 start: mp_limb_signed_t,
454 );
455 pub fn _nmod_poly_mul_KS(
456 out: mp_ptr,
457 in1: mp_srcptr,
458 len1: mp_limb_signed_t,
459 in2: mp_srcptr,
460 len2: mp_limb_signed_t,
461 bits: mp_limb_t,
462 mod_: nmod_t,
463 );
464 pub fn nmod_poly_mul_KS(
465 res: *mut nmod_poly_struct,
466 poly1: *mut nmod_poly_struct,
467 poly2: *mut nmod_poly_struct,
468 bits: mp_limb_t,
469 );
470 pub fn _nmod_poly_mul_KS2(
471 res: mp_ptr,
472 op1: mp_srcptr,
473 n1: mp_limb_signed_t,
474 op2: mp_srcptr,
475 n2: mp_limb_signed_t,
476 mod_: nmod_t,
477 );
478 pub fn nmod_poly_mul_KS2(
479 res: *mut nmod_poly_struct,
480 poly1: *mut nmod_poly_struct,
481 poly2: *mut nmod_poly_struct,
482 );
483 pub fn _nmod_poly_mul_KS4(
484 res: mp_ptr,
485 op1: mp_srcptr,
486 n1: mp_limb_signed_t,
487 op2: mp_srcptr,
488 n2: mp_limb_signed_t,
489 mod_: nmod_t,
490 );
491 pub fn nmod_poly_mul_KS4(
492 res: *mut nmod_poly_struct,
493 poly1: *mut nmod_poly_struct,
494 poly2: *mut nmod_poly_struct,
495 );
496 pub fn _nmod_poly_mullow_KS(
497 out: mp_ptr,
498 in1: mp_srcptr,
499 len1: mp_limb_signed_t,
500 in2: mp_srcptr,
501 len2: mp_limb_signed_t,
502 bits: mp_limb_t,
503 n: mp_limb_signed_t,
504 mod_: nmod_t,
505 );
506 pub fn nmod_poly_mullow_KS(
507 res: *mut nmod_poly_struct,
508 poly1: *mut nmod_poly_struct,
509 poly2: *mut nmod_poly_struct,
510 bits: mp_limb_t,
511 n: mp_limb_signed_t,
512 );
513 pub fn _nmod_poly_mul(
514 res: mp_ptr,
515 poly1: mp_srcptr,
516 len1: mp_limb_signed_t,
517 poly2: mp_srcptr,
518 len2: mp_limb_signed_t,
519 mod_: nmod_t,
520 );
521 pub fn nmod_poly_mul(
522 res: *mut nmod_poly_struct,
523 poly1: *mut nmod_poly_struct,
524 poly2: *mut nmod_poly_struct,
525 );
526 pub fn _nmod_poly_mullow(
527 res: mp_ptr,
528 poly1: mp_srcptr,
529 len1: mp_limb_signed_t,
530 poly2: mp_srcptr,
531 len2: mp_limb_signed_t,
532 trunc: mp_limb_signed_t,
533 mod_: nmod_t,
534 );
535 pub fn nmod_poly_mullow(
536 res: *mut nmod_poly_struct,
537 poly1: *mut nmod_poly_struct,
538 poly2: *mut nmod_poly_struct,
539 trunc: mp_limb_signed_t,
540 );
541 pub fn _nmod_poly_mulhigh(
542 res: mp_ptr,
543 poly1: mp_srcptr,
544 len1: mp_limb_signed_t,
545 poly2: mp_srcptr,
546 len2: mp_limb_signed_t,
547 n: mp_limb_signed_t,
548 mod_: nmod_t,
549 );
550 pub fn nmod_poly_mulhigh(
551 res: *mut nmod_poly_struct,
552 poly1: *mut nmod_poly_struct,
553 poly2: *mut nmod_poly_struct,
554 n: mp_limb_signed_t,
555 );
556 pub fn _nmod_poly_mulmod(
557 res: mp_ptr,
558 poly1: mp_srcptr,
559 len1: mp_limb_signed_t,
560 poly2: mp_srcptr,
561 len2: mp_limb_signed_t,
562 f: mp_srcptr,
563 lenf: mp_limb_signed_t,
564 mod_: nmod_t,
565 );
566 pub fn nmod_poly_mulmod(
567 res: *mut nmod_poly_struct,
568 poly1: *mut nmod_poly_struct,
569 poly2: *mut nmod_poly_struct,
570 f: *mut nmod_poly_struct,
571 );
572 pub fn _nmod_poly_mulmod_preinv(
573 res: mp_ptr,
574 poly1: mp_srcptr,
575 len1: mp_limb_signed_t,
576 poly2: mp_srcptr,
577 len2: mp_limb_signed_t,
578 f: mp_srcptr,
579 lenf: mp_limb_signed_t,
580 finv: mp_srcptr,
581 lenfinv: mp_limb_signed_t,
582 mod_: nmod_t,
583 );
584 pub fn nmod_poly_mulmod_preinv(
585 res: *mut nmod_poly_struct,
586 poly1: *mut nmod_poly_struct,
587 poly2: *mut nmod_poly_struct,
588 f: *mut nmod_poly_struct,
589 finv: *mut nmod_poly_struct,
590 );
591 pub fn _nmod_poly_invmod(
592 A: *mut mp_limb_t,
593 B: *const mp_limb_t,
594 lenB: mp_limb_signed_t,
595 P: *const mp_limb_t,
596 lenP: mp_limb_signed_t,
597 mod_: nmod_t,
598 ) -> c_int;
599 pub fn nmod_poly_invmod(
600 A: *mut nmod_poly_struct,
601 B: *mut nmod_poly_struct,
602 P: *mut nmod_poly_struct,
603 ) -> c_int;
604 pub fn _nmod_poly_pow_binexp(
605 res: mp_ptr,
606 poly: mp_srcptr,
607 len: mp_limb_signed_t,
608 e: mp_limb_t,
609 mod_: nmod_t,
610 );
611 pub fn nmod_poly_pow_binexp(
612 res: *mut nmod_poly_struct,
613 poly: *mut nmod_poly_struct,
614 e: mp_limb_t,
615 );
616 pub fn _nmod_poly_pow(
617 res: mp_ptr,
618 poly: mp_srcptr,
619 len: mp_limb_signed_t,
620 e: mp_limb_t,
621 mod_: nmod_t,
622 );
623 pub fn nmod_poly_pow(res: *mut nmod_poly_struct, poly: *mut nmod_poly_struct, e: mp_limb_t);
624 pub fn _nmod_poly_pow_trunc_binexp(
625 res: mp_ptr,
626 poly: mp_srcptr,
627 e: mp_limb_t,
628 trunc: mp_limb_signed_t,
629 mod_: nmod_t,
630 );
631 pub fn nmod_poly_pow_trunc_binexp(
632 res: *mut nmod_poly_struct,
633 poly: *mut nmod_poly_struct,
634 e: mp_limb_t,
635 trunc: mp_limb_signed_t,
636 );
637 pub fn _nmod_poly_pow_trunc(
638 res: mp_ptr,
639 poly: mp_srcptr,
640 e: mp_limb_t,
641 trunc: mp_limb_signed_t,
642 mod_: nmod_t,
643 );
644 pub fn nmod_poly_pow_trunc(
645 res: *mut nmod_poly_struct,
646 poly: *mut nmod_poly_struct,
647 e: mp_limb_t,
648 trunc: mp_limb_signed_t,
649 );
650 pub fn nmod_poly_powmod_ui_binexp(
651 res: *mut nmod_poly_struct,
652 poly: *mut nmod_poly_struct,
653 e: mp_limb_t,
654 f: *mut nmod_poly_struct,
655 );
656 pub fn _nmod_poly_powmod_ui_binexp(
657 res: mp_ptr,
658 poly: mp_srcptr,
659 e: mp_limb_t,
660 f: mp_srcptr,
661 lenf: mp_limb_signed_t,
662 mod_: nmod_t,
663 );
664 pub fn nmod_poly_powmod_fmpz_binexp(
665 res: *mut nmod_poly_struct,
666 poly: *mut nmod_poly_struct,
667 e: *mut fmpz,
668 f: *mut nmod_poly_struct,
669 );
670 pub fn _nmod_poly_powmod_fmpz_binexp(
671 res: mp_ptr,
672 poly: mp_srcptr,
673 e: *mut fmpz,
674 f: mp_srcptr,
675 lenf: mp_limb_signed_t,
676 mod_: nmod_t,
677 );
678 pub fn _nmod_poly_powmod_mpz_binexp(
679 res: mp_ptr,
680 poly: mp_srcptr,
681 e: mpz_srcptr,
682 f: mp_srcptr,
683 lenf: mp_limb_signed_t,
684 mod_: nmod_t,
685 );
686 pub fn nmod_poly_powmod_mpz_binexp(
687 res: *mut nmod_poly_struct,
688 poly: *mut nmod_poly_struct,
689 e: mpz_srcptr,
690 f: *mut nmod_poly_struct,
691 );
692 pub fn _nmod_poly_powmod_ui_binexp_preinv(
693 res: mp_ptr,
694 poly: mp_srcptr,
695 e: mp_limb_t,
696 f: mp_srcptr,
697 lenf: mp_limb_signed_t,
698 finv: mp_srcptr,
699 lenfinv: mp_limb_signed_t,
700 mod_: nmod_t,
701 );
702 pub fn nmod_poly_powmod_ui_binexp_preinv(
703 res: *mut nmod_poly_struct,
704 poly: *mut nmod_poly_struct,
705 e: mp_limb_t,
706 f: *mut nmod_poly_struct,
707 finv: *mut nmod_poly_struct,
708 );
709 pub fn _nmod_poly_powmod_fmpz_binexp_preinv(
710 res: mp_ptr,
711 poly: mp_srcptr,
712 e: *mut fmpz,
713 f: mp_srcptr,
714 lenf: mp_limb_signed_t,
715 finv: mp_srcptr,
716 lenfinv: mp_limb_signed_t,
717 mod_: nmod_t,
718 );
719 pub fn nmod_poly_powmod_fmpz_binexp_preinv(
720 res: *mut nmod_poly_struct,
721 poly: *mut nmod_poly_struct,
722 e: *mut fmpz,
723 f: *mut nmod_poly_struct,
724 finv: *mut nmod_poly_struct,
725 );
726 pub fn _nmod_poly_powmod_x_ui_preinv(
727 res: mp_ptr,
728 e: mp_limb_t,
729 f: mp_srcptr,
730 lenf: mp_limb_signed_t,
731 finv: mp_srcptr,
732 lenfinv: mp_limb_signed_t,
733 mod_: nmod_t,
734 );
735 pub fn nmod_poly_powmod_x_ui_preinv(
736 res: *mut nmod_poly_struct,
737 e: mp_limb_t,
738 f: *mut nmod_poly_struct,
739 finv: *mut nmod_poly_struct,
740 );
741 pub fn _nmod_poly_powmod_mpz_binexp_preinv(
742 res: mp_ptr,
743 poly: mp_srcptr,
744 e: mpz_srcptr,
745 f: mp_srcptr,
746 lenf: mp_limb_signed_t,
747 finv: mp_srcptr,
748 lenfinv: mp_limb_signed_t,
749 mod_: nmod_t,
750 );
751 pub fn nmod_poly_powmod_mpz_binexp_preinv(
752 res: *mut nmod_poly_struct,
753 poly: *mut nmod_poly_struct,
754 e: mpz_srcptr,
755 f: *mut nmod_poly_struct,
756 finv: *mut nmod_poly_struct,
757 );
758 pub fn _nmod_poly_powmod_x_fmpz_preinv(
759 res: mp_ptr,
760 e: *mut fmpz,
761 f: mp_srcptr,
762 lenf: mp_limb_signed_t,
763 finv: mp_srcptr,
764 lenfinv: mp_limb_signed_t,
765 mod_: nmod_t,
766 );
767 pub fn nmod_poly_powmod_x_fmpz_preinv(
768 res: *mut nmod_poly_struct,
769 e: *mut fmpz,
770 f: *mut nmod_poly_struct,
771 finv: *mut nmod_poly_struct,
772 );
773 pub fn _nmod_poly_powers_mod_preinv_naive(
774 res: *mut mp_ptr,
775 f: mp_srcptr,
776 flen: mp_limb_signed_t,
777 n: mp_limb_signed_t,
778 g: mp_srcptr,
779 glen: mp_limb_signed_t,
780 ginv: mp_srcptr,
781 ginvlen: mp_limb_signed_t,
782 mod_: nmod_t,
783 );
784 pub fn nmod_poly_powers_mod_naive(
785 res: *mut nmod_poly_struct,
786 f: *mut nmod_poly_struct,
787 n: mp_limb_signed_t,
788 g: *mut nmod_poly_struct,
789 );
790 pub fn _nmod_poly_powers_mod_preinv_threaded_pool(
791 res: *mut mp_ptr,
792 f: mp_srcptr,
793 flen: mp_limb_signed_t,
794 n: mp_limb_signed_t,
795 g: mp_srcptr,
796 glen: mp_limb_signed_t,
797 ginv: mp_srcptr,
798 ginvlen: mp_limb_signed_t,
799 mod_: nmod_t,
800 threads: *mut thread_pool_handle,
801 num_threads: mp_limb_signed_t,
802 );
803 pub fn _nmod_poly_powers_mod_preinv_threaded(
804 res: *mut mp_ptr,
805 f: mp_srcptr,
806 flen: mp_limb_signed_t,
807 n: mp_limb_signed_t,
808 g: mp_srcptr,
809 glen: mp_limb_signed_t,
810 ginv: mp_srcptr,
811 ginvlen: mp_limb_signed_t,
812 mod_: nmod_t,
813 );
814 pub fn nmod_poly_powers_mod_bsgs(
815 res: *mut nmod_poly_struct,
816 f: *mut nmod_poly_struct,
817 n: mp_limb_signed_t,
818 g: *mut nmod_poly_struct,
819 );
820 pub fn _nmod_poly_divrem_basecase(
821 Q: mp_ptr,
822 R: mp_ptr,
823 W: mp_ptr,
824 A: mp_srcptr,
825 A_len: mp_limb_signed_t,
826 B: mp_srcptr,
827 B_len: mp_limb_signed_t,
828 mod_: nmod_t,
829 );
830 pub fn nmod_poly_divrem_basecase(
831 Q: *mut nmod_poly_struct,
832 R: *mut nmod_poly_struct,
833 A: *mut nmod_poly_struct,
834 B: *mut nmod_poly_struct,
835 );
836 pub fn _nmod_poly_divrem_divconquer_recursive(
837 Q: mp_ptr,
838 BQ: mp_ptr,
839 W: mp_ptr,
840 V: mp_ptr,
841 A: mp_srcptr,
842 B: mp_srcptr,
843 lenB: mp_limb_signed_t,
844 mod_: nmod_t,
845 );
846 pub fn _nmod_poly_divrem_divconquer(
847 Q: mp_ptr,
848 R: mp_ptr,
849 A: mp_srcptr,
850 lenA: mp_limb_signed_t,
851 B: mp_srcptr,
852 lenB: mp_limb_signed_t,
853 mod_: nmod_t,
854 );
855 pub fn nmod_poly_divrem_divconquer(
856 Q: *mut nmod_poly_struct,
857 R: *mut nmod_poly_struct,
858 A: *mut nmod_poly_struct,
859 B: *mut nmod_poly_struct,
860 );
861 pub fn _nmod_poly_divrem_q0(
862 Q: mp_ptr,
863 R: mp_ptr,
864 A: mp_srcptr,
865 B: mp_srcptr,
866 lenA: mp_limb_signed_t,
867 mod_: nmod_t,
868 );
869 pub fn _nmod_poly_divrem_q1(
870 Q: mp_ptr,
871 R: mp_ptr,
872 A: mp_srcptr,
873 lenA: mp_limb_signed_t,
874 B: mp_srcptr,
875 lenB: mp_limb_signed_t,
876 mod_: nmod_t,
877 );
878 pub fn _nmod_poly_divrem(
879 Q: mp_ptr,
880 R: mp_ptr,
881 A: mp_srcptr,
882 lenA: mp_limb_signed_t,
883 B: mp_srcptr,
884 lenB: mp_limb_signed_t,
885 mod_: nmod_t,
886 );
887 pub fn nmod_poly_divrem(
888 Q: *mut nmod_poly_struct,
889 R: *mut nmod_poly_struct,
890 A: *mut nmod_poly_struct,
891 B: *mut nmod_poly_struct,
892 );
893 pub fn _nmod_poly_div_basecase(
894 Q: mp_ptr,
895 W: mp_ptr,
896 A: mp_srcptr,
897 A_len: mp_limb_signed_t,
898 B: mp_srcptr,
899 B_len: mp_limb_signed_t,
900 mod_: nmod_t,
901 );
902 pub fn nmod_poly_div_basecase(
903 Q: *mut nmod_poly_struct,
904 A: *mut nmod_poly_struct,
905 B: *mut nmod_poly_struct,
906 );
907 pub fn _nmod_poly_div_divconquer_recursive(
908 Q: mp_ptr,
909 W: mp_ptr,
910 V: mp_ptr,
911 A: mp_srcptr,
912 B: mp_srcptr,
913 lenB: mp_limb_signed_t,
914 mod_: nmod_t,
915 );
916 pub fn _nmod_poly_div_divconquer(
917 Q: mp_ptr,
918 A: mp_srcptr,
919 lenA: mp_limb_signed_t,
920 B: mp_srcptr,
921 lenB: mp_limb_signed_t,
922 mod_: nmod_t,
923 );
924 pub fn nmod_poly_div_divconquer(
925 Q: *mut nmod_poly_struct,
926 A: *mut nmod_poly_struct,
927 B: *mut nmod_poly_struct,
928 );
929 pub fn _nmod_poly_div(
930 Q: mp_ptr,
931 A: mp_srcptr,
932 lenA: mp_limb_signed_t,
933 B: mp_srcptr,
934 lenB: mp_limb_signed_t,
935 mod_: nmod_t,
936 );
937 pub fn nmod_poly_div(
938 Q: *mut nmod_poly_struct,
939 A: *mut nmod_poly_struct,
940 B: *mut nmod_poly_struct,
941 );
942 pub fn _nmod_poly_rem_basecase(
943 R: mp_ptr,
944 W: mp_ptr,
945 A: mp_srcptr,
946 lenA: mp_limb_signed_t,
947 B: mp_srcptr,
948 lenB: mp_limb_signed_t,
949 mod_: nmod_t,
950 );
951 pub fn nmod_poly_rem_basecase(
952 R: *mut nmod_poly_struct,
953 A: *mut nmod_poly_struct,
954 B: *mut nmod_poly_struct,
955 );
956 pub fn _nmod_poly_rem_q1(
957 R: mp_ptr,
958 A: mp_srcptr,
959 lenA: mp_limb_signed_t,
960 B: mp_srcptr,
961 lenB: mp_limb_signed_t,
962 mod_: nmod_t,
963 );
964 pub fn _nmod_poly_rem(
965 R: mp_ptr,
966 A: mp_srcptr,
967 lenA: mp_limb_signed_t,
968 B: mp_srcptr,
969 lenB: mp_limb_signed_t,
970 mod_: nmod_t,
971 );
972 pub fn nmod_poly_rem(
973 R: *mut nmod_poly_struct,
974 A: *mut nmod_poly_struct,
975 B: *mut nmod_poly_struct,
976 );
977 pub fn _nmod_poly_inv_series_basecase(
978 Qinv: mp_ptr,
979 Q: mp_srcptr,
980 Qlen: mp_limb_signed_t,
981 n: mp_limb_signed_t,
982 mod_: nmod_t,
983 );
984 pub fn nmod_poly_inv_series_basecase(
985 Qinv: *mut nmod_poly_struct,
986 Q: *mut nmod_poly_struct,
987 n: mp_limb_signed_t,
988 );
989 pub fn _nmod_poly_inv_series_newton(
990 Qinv: mp_ptr,
991 Q: mp_srcptr,
992 Qlen: mp_limb_signed_t,
993 n: mp_limb_signed_t,
994 mod_: nmod_t,
995 );
996 pub fn nmod_poly_inv_series_newton(
997 Qinv: *mut nmod_poly_struct,
998 Q: *mut nmod_poly_struct,
999 n: mp_limb_signed_t,
1000 );
1001 pub fn _nmod_poly_inv_series(
1002 Qinv: mp_ptr,
1003 Q: mp_srcptr,
1004 Qlen: mp_limb_signed_t,
1005 n: mp_limb_signed_t,
1006 mod_: nmod_t,
1007 );
1008 pub fn nmod_poly_inv_series(
1009 Qinv: *mut nmod_poly_struct,
1010 Q: *mut nmod_poly_struct,
1011 n: mp_limb_signed_t,
1012 );
1013 pub fn _nmod_poly_div_series_basecase(
1014 Q: mp_ptr,
1015 A: mp_srcptr,
1016 Alen: mp_limb_signed_t,
1017 B: mp_srcptr,
1018 Blen: mp_limb_signed_t,
1019 n: mp_limb_signed_t,
1020 mod_: nmod_t,
1021 );
1022 pub fn nmod_poly_div_series_basecase(
1023 Q: *mut nmod_poly_struct,
1024 A: *mut nmod_poly_struct,
1025 B: *mut nmod_poly_struct,
1026 n: mp_limb_signed_t,
1027 );
1028 pub fn _nmod_poly_div_series(
1029 Q: mp_ptr,
1030 A: mp_srcptr,
1031 Alen: mp_limb_signed_t,
1032 B: mp_srcptr,
1033 Blen: mp_limb_signed_t,
1034 n: mp_limb_signed_t,
1035 mod_: nmod_t,
1036 );
1037 pub fn nmod_poly_div_series(
1038 Q: *mut nmod_poly_struct,
1039 A: *mut nmod_poly_struct,
1040 B: *mut nmod_poly_struct,
1041 n: mp_limb_signed_t,
1042 );
1043 pub fn _nmod_poly_div_newton(
1044 Q: mp_ptr,
1045 A: mp_srcptr,
1046 Alen: mp_limb_signed_t,
1047 B: mp_srcptr,
1048 Blen: mp_limb_signed_t,
1049 mod_: nmod_t,
1050 );
1051 pub fn nmod_poly_div_newton(
1052 Q: *mut nmod_poly_struct,
1053 A: *mut nmod_poly_struct,
1054 B: *mut nmod_poly_struct,
1055 );
1056 pub fn _nmod_poly_divrem_newton(
1057 Q: mp_ptr,
1058 R: mp_ptr,
1059 A: mp_srcptr,
1060 Alen: mp_limb_signed_t,
1061 B: mp_srcptr,
1062 Blen: mp_limb_signed_t,
1063 mod_: nmod_t,
1064 );
1065 pub fn nmod_poly_divrem_newton(
1066 Q: *mut nmod_poly_struct,
1067 R: *mut nmod_poly_struct,
1068 A: *mut nmod_poly_struct,
1069 B: *mut nmod_poly_struct,
1070 );
1071 pub fn _nmod_poly_div_newton_n_preinv(
1072 Q: mp_ptr,
1073 A: mp_srcptr,
1074 lenA: mp_limb_signed_t,
1075 B: mp_srcptr,
1076 lenB: mp_limb_signed_t,
1077 Binv: mp_srcptr,
1078 lenBinv: mp_limb_signed_t,
1079 mod_: nmod_t,
1080 );
1081 pub fn nmod_poly_div_newton_n_preinv(
1082 Q: *mut nmod_poly_struct,
1083 A: *mut nmod_poly_struct,
1084 B: *mut nmod_poly_struct,
1085 Binv: *mut nmod_poly_struct,
1086 );
1087 pub fn _nmod_poly_divrem_newton_n_preinv(
1088 Q: mp_ptr,
1089 R: mp_ptr,
1090 A: mp_srcptr,
1091 lenA: mp_limb_signed_t,
1092 B: mp_srcptr,
1093 lenB: mp_limb_signed_t,
1094 Binv: mp_srcptr,
1095 lenBinv: mp_limb_signed_t,
1096 mod_: nmod_t,
1097 );
1098 pub fn nmod_poly_divrem_newton_n_preinv(
1099 Q: *mut nmod_poly_struct,
1100 R: *mut nmod_poly_struct,
1101 A: *mut nmod_poly_struct,
1102 B: *mut nmod_poly_struct,
1103 Binv: *mut nmod_poly_struct,
1104 );
1105 pub fn _nmod_poly_div_root(
1106 Q: mp_ptr,
1107 A: mp_srcptr,
1108 len: mp_limb_signed_t,
1109 c: mp_limb_t,
1110 mod_: nmod_t,
1111 ) -> mp_limb_t;
1112 pub fn nmod_poly_div_root(
1113 Q: *mut nmod_poly_struct,
1114 A: *mut nmod_poly_struct,
1115 c: mp_limb_t,
1116 ) -> mp_limb_t;
1117 pub fn _nmod_poly_derivative(
1118 x_prime: mp_ptr,
1119 x: mp_srcptr,
1120 len: mp_limb_signed_t,
1121 mod_: nmod_t,
1122 );
1123 pub fn nmod_poly_derivative(x_prime: *mut nmod_poly_struct, x: *mut nmod_poly_struct);
1124 pub fn _nmod_poly_integral(x_int: mp_ptr, x: mp_srcptr, len: mp_limb_signed_t, mod_: nmod_t);
1125 pub fn nmod_poly_integral(x_int: *mut nmod_poly_struct, x: *mut nmod_poly_struct);
1126 pub fn _nmod_poly_evaluate_fmpz(
1127 rop: *mut fmpz,
1128 poly: mp_srcptr,
1129 len: mp_limb_signed_t,
1130 c: *mut fmpz,
1131 );
1132 pub fn nmod_poly_evaluate_fmpz(rop: *mut fmpz, poly: *mut nmod_poly_struct, c: *mut fmpz);
1133 pub fn _nmod_poly_evaluate_nmod(
1134 poly: mp_srcptr,
1135 len: mp_limb_signed_t,
1136 c: mp_limb_t,
1137 mod_: nmod_t,
1138 ) -> mp_limb_t;
1139 pub fn nmod_poly_evaluate_nmod(poly: *mut nmod_poly_struct, c: mp_limb_t) -> mp_limb_t;
1140 pub fn _nmod_poly_evaluate_nmod_vec(
1141 ys: mp_ptr,
1142 coeffs: mp_srcptr,
1143 len: mp_limb_signed_t,
1144 xs: mp_srcptr,
1145 n: mp_limb_signed_t,
1146 mod_: nmod_t,
1147 );
1148 pub fn nmod_poly_evaluate_nmod_vec(
1149 ys: mp_ptr,
1150 poly: *mut nmod_poly_struct,
1151 xs: mp_srcptr,
1152 n: mp_limb_signed_t,
1153 );
1154 pub fn _nmod_poly_evaluate_nmod_vec_iter(
1155 ys: mp_ptr,
1156 coeffs: mp_srcptr,
1157 len: mp_limb_signed_t,
1158 xs: mp_srcptr,
1159 n: mp_limb_signed_t,
1160 mod_: nmod_t,
1161 );
1162 pub fn nmod_poly_evaluate_nmod_vec_iter(
1163 ys: mp_ptr,
1164 poly: *mut nmod_poly_struct,
1165 xs: mp_srcptr,
1166 n: mp_limb_signed_t,
1167 );
1168 pub fn _nmod_poly_evaluate_nmod_vec_fast_precomp(
1169 vs: mp_ptr,
1170 poly: mp_srcptr,
1171 plen: mp_limb_signed_t,
1172 tree: *const mp_ptr,
1173 len: mp_limb_signed_t,
1174 mod_: nmod_t,
1175 );
1176 pub fn _nmod_poly_evaluate_nmod_vec_fast(
1177 ys: mp_ptr,
1178 coeffs: mp_srcptr,
1179 len: mp_limb_signed_t,
1180 xs: mp_srcptr,
1181 n: mp_limb_signed_t,
1182 mod_: nmod_t,
1183 );
1184 pub fn nmod_poly_evaluate_nmod_vec_fast(
1185 ys: mp_ptr,
1186 poly: *mut nmod_poly_struct,
1187 xs: mp_srcptr,
1188 n: mp_limb_signed_t,
1189 );
1190 pub fn nmod_mat_one_addmul(dest: *mut nmod_mat_struct, mat: *mut nmod_mat_struct, c: mp_limb_t);
1191 pub fn nmod_poly_evaluate_mat_horner(
1192 dest: *mut nmod_mat_struct,
1193 poly: *mut nmod_poly_struct,
1194 c: *mut nmod_mat_struct,
1195 );
1196 pub fn nmod_poly_evaluate_mat_paterson_stockmeyer(
1197 dest: *mut nmod_mat_struct,
1198 poly: *mut nmod_poly_struct,
1199 c: *mut nmod_mat_struct,
1200 );
1201 pub fn nmod_poly_evaluate_mat(
1202 dest: *mut nmod_mat_struct,
1203 poly: *mut nmod_poly_struct,
1204 c: *mut nmod_mat_struct,
1205 );
1206 pub fn _nmod_poly_tree_alloc(len: mp_limb_signed_t) -> *mut mp_ptr;
1207 pub fn _nmod_poly_tree_free(tree: *mut mp_ptr, len: mp_limb_signed_t);
1208 pub fn _nmod_poly_tree_build(
1209 tree: *mut mp_ptr,
1210 roots: mp_srcptr,
1211 len: mp_limb_signed_t,
1212 mod_: nmod_t,
1213 );
1214 pub fn _nmod_poly_interpolate_nmod_vec_newton(
1215 poly: mp_ptr,
1216 xs: mp_srcptr,
1217 ys: mp_srcptr,
1218 n: mp_limb_signed_t,
1219 mod_: nmod_t,
1220 );
1221 pub fn nmod_poly_interpolate_nmod_vec_newton(
1222 poly: *mut nmod_poly_struct,
1223 xs: mp_srcptr,
1224 ys: mp_srcptr,
1225 n: mp_limb_signed_t,
1226 );
1227 pub fn _nmod_poly_interpolate_nmod_vec_barycentric(
1228 poly: mp_ptr,
1229 xs: mp_srcptr,
1230 ys: mp_srcptr,
1231 n: mp_limb_signed_t,
1232 mod_: nmod_t,
1233 );
1234 pub fn nmod_poly_interpolate_nmod_vec_barycentric(
1235 poly: *mut nmod_poly_struct,
1236 xs: mp_srcptr,
1237 ys: mp_srcptr,
1238 n: mp_limb_signed_t,
1239 );
1240 pub fn _nmod_poly_interpolate_nmod_vec(
1241 poly: mp_ptr,
1242 xs: mp_srcptr,
1243 ys: mp_srcptr,
1244 n: mp_limb_signed_t,
1245 mod_: nmod_t,
1246 );
1247 pub fn nmod_poly_interpolate_nmod_vec(
1248 poly: *mut nmod_poly_struct,
1249 xs: mp_srcptr,
1250 ys: mp_srcptr,
1251 n: mp_limb_signed_t,
1252 );
1253 pub fn nmod_poly_interpolate_nmod_vec_fast(
1254 poly: *mut nmod_poly_struct,
1255 xs: mp_srcptr,
1256 ys: mp_srcptr,
1257 n: mp_limb_signed_t,
1258 );
1259 pub fn _nmod_poly_interpolate_nmod_vec_fast(
1260 poly: mp_ptr,
1261 xs: mp_srcptr,
1262 ys: mp_srcptr,
1263 len: mp_limb_signed_t,
1264 mod_: nmod_t,
1265 );
1266 pub fn _nmod_poly_interpolate_nmod_vec_fast_precomp(
1267 poly: mp_ptr,
1268 ys: mp_srcptr,
1269 tree: *const mp_ptr,
1270 weights: mp_srcptr,
1271 len: mp_limb_signed_t,
1272 mod_: nmod_t,
1273 );
1274 pub fn _nmod_poly_interpolation_weights(
1275 w: mp_ptr,
1276 tree: *const mp_ptr,
1277 len: mp_limb_signed_t,
1278 mod_: nmod_t,
1279 );
1280 pub fn _nmod_poly_compose_horner(
1281 res: mp_ptr,
1282 poly1: mp_srcptr,
1283 len1: mp_limb_signed_t,
1284 poly2: mp_srcptr,
1285 len2: mp_limb_signed_t,
1286 mod_: nmod_t,
1287 );
1288 pub fn nmod_poly_compose_horner(
1289 res: *mut nmod_poly_struct,
1290 poly1: *mut nmod_poly_struct,
1291 poly2: *mut nmod_poly_struct,
1292 );
1293 pub fn _nmod_poly_compose_divconquer(
1294 res: mp_ptr,
1295 poly1: mp_srcptr,
1296 len1: mp_limb_signed_t,
1297 poly2: mp_srcptr,
1298 len2: mp_limb_signed_t,
1299 mod_: nmod_t,
1300 );
1301 pub fn nmod_poly_compose_divconquer(
1302 res: *mut nmod_poly_struct,
1303 poly1: *mut nmod_poly_struct,
1304 poly2: *mut nmod_poly_struct,
1305 );
1306 pub fn _nmod_poly_compose(
1307 res: mp_ptr,
1308 poly1: mp_srcptr,
1309 len1: mp_limb_signed_t,
1310 poly2: mp_srcptr,
1311 len2: mp_limb_signed_t,
1312 mod_: nmod_t,
1313 );
1314 pub fn nmod_poly_compose(
1315 res: *mut nmod_poly_struct,
1316 poly1: *mut nmod_poly_struct,
1317 poly2: *mut nmod_poly_struct,
1318 );
1319 pub fn _nmod_poly_taylor_shift_horner(
1320 poly: mp_ptr,
1321 c: mp_limb_t,
1322 len: mp_limb_signed_t,
1323 mod_: nmod_t,
1324 );
1325 pub fn nmod_poly_taylor_shift_horner(
1326 g: *mut nmod_poly_struct,
1327 f: *mut nmod_poly_struct,
1328 c: mp_limb_t,
1329 );
1330 pub fn _nmod_poly_taylor_shift_convolution(
1331 poly: mp_ptr,
1332 c: mp_limb_t,
1333 len: mp_limb_signed_t,
1334 mod_: nmod_t,
1335 );
1336 pub fn nmod_poly_taylor_shift_convolution(
1337 g: *mut nmod_poly_struct,
1338 f: *mut nmod_poly_struct,
1339 c: mp_limb_t,
1340 );
1341 pub fn _nmod_poly_taylor_shift(poly: mp_ptr, c: mp_limb_t, len: mp_limb_signed_t, mod_: nmod_t);
1342 pub fn nmod_poly_taylor_shift(g: *mut nmod_poly_struct, f: *mut nmod_poly_struct, c: mp_limb_t);
1343 pub fn _nmod_poly_compose_mod_brent_kung(
1344 res: mp_ptr,
1345 f: mp_srcptr,
1346 lenf: mp_limb_signed_t,
1347 g: mp_srcptr,
1348 h: mp_srcptr,
1349 lenh: mp_limb_signed_t,
1350 mod_: nmod_t,
1351 );
1352 pub fn nmod_poly_compose_mod_brent_kung(
1353 res: *mut nmod_poly_struct,
1354 f: *mut nmod_poly_struct,
1355 g: *mut nmod_poly_struct,
1356 h: *mut nmod_poly_struct,
1357 );
1358 pub fn _nmod_poly_reduce_matrix_mod_poly(
1359 A: *mut nmod_mat_struct,
1360 B: *mut nmod_mat_struct,
1361 f: *mut nmod_poly_struct,
1362 );
1363 pub fn _nmod_poly_precompute_matrix(
1364 A: *mut nmod_mat_struct,
1365 poly1: mp_srcptr,
1366 poly2: mp_srcptr,
1367 len2: mp_limb_signed_t,
1368 poly2inv: mp_srcptr,
1369 len2inv: mp_limb_signed_t,
1370 mod_: nmod_t,
1371 );
1372 pub fn _nmod_poly_precompute_matrix_worker(arg_ptr: *mut c_void);
1373 pub fn nmod_poly_precompute_matrix(
1374 A: *mut nmod_mat_struct,
1375 poly1: *mut nmod_poly_struct,
1376 poly2: *mut nmod_poly_struct,
1377 poly2inv: *mut nmod_poly_struct,
1378 );
1379 pub fn _nmod_poly_compose_mod_brent_kung_precomp_preinv(
1380 res: mp_ptr,
1381 poly1: mp_srcptr,
1382 len1: mp_limb_signed_t,
1383 A: *mut nmod_mat_struct,
1384 poly3: mp_srcptr,
1385 len3: mp_limb_signed_t,
1386 poly3inv: mp_srcptr,
1387 len3inv: mp_limb_signed_t,
1388 mod_: nmod_t,
1389 );
1390 pub fn _nmod_poly_compose_mod_brent_kung_precomp_preinv_worker(arg_ptr: *mut c_void);
1391 pub fn nmod_poly_compose_mod_brent_kung_precomp_preinv(
1392 res: *mut nmod_poly_struct,
1393 poly1: *mut nmod_poly_struct,
1394 A: *mut nmod_mat_struct,
1395 poly3: *mut nmod_poly_struct,
1396 poly3inv: *mut nmod_poly_struct,
1397 );
1398 pub fn _nmod_poly_compose_mod_brent_kung_preinv(
1399 res: mp_ptr,
1400 poly1: mp_srcptr,
1401 len1: mp_limb_signed_t,
1402 poly2: mp_srcptr,
1403 poly3: mp_srcptr,
1404 len3: mp_limb_signed_t,
1405 poly3inv: mp_srcptr,
1406 len3inv: mp_limb_signed_t,
1407 mod_: nmod_t,
1408 );
1409 pub fn nmod_poly_compose_mod_brent_kung_preinv(
1410 res: *mut nmod_poly_struct,
1411 poly1: *mut nmod_poly_struct,
1412 poly2: *mut nmod_poly_struct,
1413 poly3: *mut nmod_poly_struct,
1414 poly3inv: *mut nmod_poly_struct,
1415 );
1416 pub fn _nmod_poly_compose_mod_brent_kung_vec_preinv(
1417 res: *mut nmod_poly_struct,
1418 polys: *const nmod_poly_struct,
1419 len1: mp_limb_signed_t,
1420 l: mp_limb_signed_t,
1421 g: mp_srcptr,
1422 glen: mp_limb_signed_t,
1423 poly: mp_srcptr,
1424 len: mp_limb_signed_t,
1425 polyinv: mp_srcptr,
1426 leninv: mp_limb_signed_t,
1427 mod_: nmod_t,
1428 );
1429 pub fn nmod_poly_compose_mod_brent_kung_vec_preinv(
1430 res: *mut nmod_poly_struct,
1431 polys: *const nmod_poly_struct,
1432 len1: mp_limb_signed_t,
1433 n: mp_limb_signed_t,
1434 g: *mut nmod_poly_struct,
1435 poly: *mut nmod_poly_struct,
1436 polyinv: *mut nmod_poly_struct,
1437 );
1438 pub fn _nmod_poly_compose_mod_brent_kung_vec_preinv_worker(arg_ptr: *mut c_void);
1439 pub fn nmod_poly_compose_mod_brent_kung_vec_preinv_threaded_pool(
1440 res: *mut nmod_poly_struct,
1441 polys: *const nmod_poly_struct,
1442 len1: mp_limb_signed_t,
1443 n: mp_limb_signed_t,
1444 g: *mut nmod_poly_struct,
1445 poly: *mut nmod_poly_struct,
1446 polyinv: *mut nmod_poly_struct,
1447 threads: *mut thread_pool_handle,
1448 num_threads: mp_limb_signed_t,
1449 );
1450 pub fn _nmod_poly_compose_mod_brent_kung_vec_preinv_threaded_pool(
1451 res: *mut nmod_poly_struct,
1452 polys: *const nmod_poly_struct,
1453 lenpolys: mp_limb_signed_t,
1454 l: mp_limb_signed_t,
1455 g: mp_srcptr,
1456 glen: mp_limb_signed_t,
1457 poly: mp_srcptr,
1458 len: mp_limb_signed_t,
1459 polyinv: mp_srcptr,
1460 leninv: mp_limb_signed_t,
1461 mod_: nmod_t,
1462 threads: *mut thread_pool_handle,
1463 num_threads: mp_limb_signed_t,
1464 );
1465 pub fn nmod_poly_compose_mod_brent_kung_vec_preinv_threaded(
1466 res: *mut nmod_poly_struct,
1467 polys: *const nmod_poly_struct,
1468 len1: mp_limb_signed_t,
1469 n: mp_limb_signed_t,
1470 g: *mut nmod_poly_struct,
1471 poly: *mut nmod_poly_struct,
1472 polyinv: *mut nmod_poly_struct,
1473 );
1474 pub fn _nmod_poly_compose_mod_horner(
1475 res: mp_ptr,
1476 f: mp_srcptr,
1477 lenf: mp_limb_signed_t,
1478 g: mp_srcptr,
1479 h: mp_srcptr,
1480 lenh: mp_limb_signed_t,
1481 mod_: nmod_t,
1482 );
1483 pub fn nmod_poly_compose_mod_horner(
1484 res: *mut nmod_poly_struct,
1485 f: *mut nmod_poly_struct,
1486 g: *mut nmod_poly_struct,
1487 h: *mut nmod_poly_struct,
1488 );
1489 pub fn _nmod_poly_compose_mod(
1490 res: mp_ptr,
1491 f: mp_srcptr,
1492 lenf: mp_limb_signed_t,
1493 g: mp_srcptr,
1494 h: mp_srcptr,
1495 lenh: mp_limb_signed_t,
1496 mod_: nmod_t,
1497 );
1498 pub fn nmod_poly_compose_mod(
1499 res: *mut nmod_poly_struct,
1500 f: *mut nmod_poly_struct,
1501 g: *mut nmod_poly_struct,
1502 h: *mut nmod_poly_struct,
1503 );
1504 pub fn _nmod_poly_compose_series_horner(
1505 res: mp_ptr,
1506 poly1: mp_srcptr,
1507 len1: mp_limb_signed_t,
1508 poly2: mp_srcptr,
1509 len2: mp_limb_signed_t,
1510 n: mp_limb_signed_t,
1511 mod_: nmod_t,
1512 );
1513 pub fn nmod_poly_compose_series_horner(
1514 res: *mut nmod_poly_struct,
1515 poly1: *mut nmod_poly_struct,
1516 poly2: *mut nmod_poly_struct,
1517 n: mp_limb_signed_t,
1518 );
1519 pub fn _nmod_poly_compose_series_brent_kung(
1520 res: mp_ptr,
1521 poly1: mp_srcptr,
1522 len1: mp_limb_signed_t,
1523 poly2: mp_srcptr,
1524 len2: mp_limb_signed_t,
1525 n: mp_limb_signed_t,
1526 mod_: nmod_t,
1527 );
1528 pub fn nmod_poly_compose_series_brent_kung(
1529 res: *mut nmod_poly_struct,
1530 poly1: *mut nmod_poly_struct,
1531 poly2: *mut nmod_poly_struct,
1532 n: mp_limb_signed_t,
1533 );
1534 pub fn _nmod_poly_compose_series(
1535 res: mp_ptr,
1536 poly1: mp_srcptr,
1537 len1: mp_limb_signed_t,
1538 poly2: mp_srcptr,
1539 len2: mp_limb_signed_t,
1540 n: mp_limb_signed_t,
1541 mod_: nmod_t,
1542 );
1543 pub fn nmod_poly_compose_series(
1544 res: *mut nmod_poly_struct,
1545 poly1: *mut nmod_poly_struct,
1546 poly2: *mut nmod_poly_struct,
1547 n: mp_limb_signed_t,
1548 );
1549 pub fn _nmod_poly_revert_series_lagrange(
1550 Qinv: mp_ptr,
1551 Q: mp_srcptr,
1552 n: mp_limb_signed_t,
1553 mod_: nmod_t,
1554 );
1555 pub fn nmod_poly_revert_series_lagrange(
1556 Qinv: *mut nmod_poly_struct,
1557 Q: *mut nmod_poly_struct,
1558 n: mp_limb_signed_t,
1559 );
1560 pub fn _nmod_poly_revert_series_lagrange_fast(
1561 Qinv: mp_ptr,
1562 Q: mp_srcptr,
1563 n: mp_limb_signed_t,
1564 mod_: nmod_t,
1565 );
1566 pub fn nmod_poly_revert_series_lagrange_fast(
1567 Qinv: *mut nmod_poly_struct,
1568 Q: *mut nmod_poly_struct,
1569 n: mp_limb_signed_t,
1570 );
1571 pub fn _nmod_poly_revert_series_newton(
1572 Qinv: mp_ptr,
1573 Q: mp_srcptr,
1574 n: mp_limb_signed_t,
1575 mod_: nmod_t,
1576 );
1577 pub fn nmod_poly_revert_series_newton(
1578 Qinv: *mut nmod_poly_struct,
1579 Q: *mut nmod_poly_struct,
1580 n: mp_limb_signed_t,
1581 );
1582 pub fn _nmod_poly_revert_series(Qinv: mp_ptr, Q: mp_srcptr, n: mp_limb_signed_t, mod_: nmod_t);
1583 pub fn nmod_poly_revert_series(
1584 Qinv: *mut nmod_poly_struct,
1585 Q: *mut nmod_poly_struct,
1586 n: mp_limb_signed_t,
1587 );
1588 pub fn _nmod_poly_compose_series_divconquer(
1589 res: mp_ptr,
1590 poly1: mp_srcptr,
1591 len1: mp_limb_signed_t,
1592 poly2: mp_srcptr,
1593 len2: mp_limb_signed_t,
1594 N: mp_limb_signed_t,
1595 mod_: nmod_t,
1596 );
1597 pub fn nmod_poly_compose_series_divconquer(
1598 res: *mut nmod_poly_struct,
1599 poly1: *mut nmod_poly_struct,
1600 poly2: *mut nmod_poly_struct,
1601 N: mp_limb_signed_t,
1602 );
1603 pub fn _nmod_poly_gcd_euclidean(
1604 G: mp_ptr,
1605 A: mp_srcptr,
1606 lenA: mp_limb_signed_t,
1607 B: mp_srcptr,
1608 lenB: mp_limb_signed_t,
1609 mod_: nmod_t,
1610 ) -> mp_limb_signed_t;
1611 pub fn nmod_poly_gcd_euclidean(
1612 G: *mut nmod_poly_struct,
1613 A: *mut nmod_poly_struct,
1614 B: *mut nmod_poly_struct,
1615 );
1616 pub fn _nmod_poly_hgcd_recursive(
1617 M: *mut mp_ptr,
1618 lenM: *mut mp_limb_signed_t,
1619 A: mp_ptr,
1620 lenA: *mut mp_limb_signed_t,
1621 B: mp_ptr,
1622 lenB: *mut mp_limb_signed_t,
1623 a: mp_srcptr,
1624 lena: mp_limb_signed_t,
1625 b: mp_srcptr,
1626 lenb: mp_limb_signed_t,
1627 P: mp_ptr,
1628 mod_: nmod_t,
1629 flag: c_int,
1630 res: *mut nmod_poly_res_struct,
1631 ) -> mp_limb_signed_t;
1632 pub fn _nmod_poly_hgcd(
1633 M: *mut mp_ptr,
1634 lenM: *mut mp_limb_signed_t,
1635 A: mp_ptr,
1636 lenA: *mut mp_limb_signed_t,
1637 B: mp_ptr,
1638 lenB: *mut mp_limb_signed_t,
1639 a: mp_srcptr,
1640 lena: mp_limb_signed_t,
1641 b: mp_srcptr,
1642 lenb: mp_limb_signed_t,
1643 mod_: nmod_t,
1644 ) -> mp_limb_signed_t;
1645 pub fn nmod_poly_hgcd_ref(
1646 m11: *mut nmod_poly_struct,
1647 m12: *mut nmod_poly_struct,
1648 m21: *mut nmod_poly_struct,
1649 m22: *mut nmod_poly_struct,
1650 A: *mut nmod_poly_struct,
1651 B: *mut nmod_poly_struct,
1652 a: *mut nmod_poly_struct,
1653 b: *mut nmod_poly_struct,
1654 ) -> mp_limb_signed_t;
1655 pub fn nmod_poly_hgcd(
1656 m11: *mut nmod_poly_struct,
1657 m12: *mut nmod_poly_struct,
1658 m21: *mut nmod_poly_struct,
1659 m22: *mut nmod_poly_struct,
1660 A: *mut nmod_poly_struct,
1661 B: *mut nmod_poly_struct,
1662 a: *mut nmod_poly_struct,
1663 b: *mut nmod_poly_struct,
1664 ) -> mp_limb_signed_t;
1665 pub fn _nmod_poly_gcd_hgcd(
1666 G: mp_ptr,
1667 A: mp_srcptr,
1668 lenA: mp_limb_signed_t,
1669 B: mp_srcptr,
1670 lenB: mp_limb_signed_t,
1671 mod_: nmod_t,
1672 ) -> mp_limb_signed_t;
1673 pub fn nmod_poly_gcd_hgcd(
1674 G: *mut nmod_poly_struct,
1675 A: *mut nmod_poly_struct,
1676 B: *mut nmod_poly_struct,
1677 );
1678 pub fn _nmod_poly_gcd(
1679 G: mp_ptr,
1680 A: mp_srcptr,
1681 lenA: mp_limb_signed_t,
1682 B: mp_srcptr,
1683 lenB: mp_limb_signed_t,
1684 mod_: nmod_t,
1685 ) -> mp_limb_signed_t;
1686 pub fn nmod_poly_gcd(
1687 G: *mut nmod_poly_struct,
1688 A: *mut nmod_poly_struct,
1689 B: *mut nmod_poly_struct,
1690 );
1691 pub fn _nmod_poly_xgcd_euclidean(
1692 res: mp_ptr,
1693 s: mp_ptr,
1694 t: mp_ptr,
1695 poly1: mp_srcptr,
1696 len1: mp_limb_signed_t,
1697 poly2: mp_srcptr,
1698 len2: mp_limb_signed_t,
1699 mod_: nmod_t,
1700 ) -> mp_limb_signed_t;
1701 pub fn nmod_poly_xgcd_euclidean(
1702 G: *mut nmod_poly_struct,
1703 S: *mut nmod_poly_struct,
1704 T: *mut nmod_poly_struct,
1705 A: *mut nmod_poly_struct,
1706 B: *mut nmod_poly_struct,
1707 );
1708 pub fn _nmod_poly_xgcd_hgcd(
1709 G: mp_ptr,
1710 S: mp_ptr,
1711 T: mp_ptr,
1712 A: mp_srcptr,
1713 lenA: mp_limb_signed_t,
1714 B: mp_srcptr,
1715 lenB: mp_limb_signed_t,
1716 mod_: nmod_t,
1717 ) -> mp_limb_signed_t;
1718 pub fn nmod_poly_xgcd_hgcd(
1719 G: *mut nmod_poly_struct,
1720 S: *mut nmod_poly_struct,
1721 T: *mut nmod_poly_struct,
1722 A: *mut nmod_poly_struct,
1723 B: *mut nmod_poly_struct,
1724 );
1725 pub fn _nmod_poly_xgcd(
1726 G: mp_ptr,
1727 S: mp_ptr,
1728 T: mp_ptr,
1729 A: mp_srcptr,
1730 lenA: mp_limb_signed_t,
1731 B: mp_srcptr,
1732 lenB: mp_limb_signed_t,
1733 mod_: nmod_t,
1734 ) -> mp_limb_signed_t;
1735 pub fn nmod_poly_xgcd(
1736 G: *mut nmod_poly_struct,
1737 S: *mut nmod_poly_struct,
1738 T: *mut nmod_poly_struct,
1739 A: *mut nmod_poly_struct,
1740 B: *mut nmod_poly_struct,
1741 );
1742 pub fn _nmod_poly_resultant_euclidean(
1743 poly1: mp_srcptr,
1744 len1: mp_limb_signed_t,
1745 poly2: mp_srcptr,
1746 len2: mp_limb_signed_t,
1747 mod_: nmod_t,
1748 ) -> mp_limb_t;
1749 pub fn nmod_poly_resultant_euclidean(
1750 f: *mut nmod_poly_struct,
1751 g: *mut nmod_poly_struct,
1752 ) -> mp_limb_t;
1753 pub fn _nmod_poly_resultant_hgcd(
1754 A: mp_srcptr,
1755 lenA: mp_limb_signed_t,
1756 B: mp_srcptr,
1757 lenB: mp_limb_signed_t,
1758 mod_: nmod_t,
1759 ) -> mp_limb_t;
1760 pub fn nmod_poly_resultant_hgcd(
1761 A: *mut nmod_poly_struct,
1762 B: *mut nmod_poly_struct,
1763 ) -> mp_limb_t;
1764 pub fn _nmod_poly_resultant(
1765 poly1: mp_srcptr,
1766 len1: mp_limb_signed_t,
1767 poly2: mp_srcptr,
1768 len2: mp_limb_signed_t,
1769 mod_: nmod_t,
1770 ) -> mp_limb_t;
1771 pub fn nmod_poly_resultant(f: *mut nmod_poly_struct, g: *mut nmod_poly_struct) -> mp_limb_t;
1772 pub fn _nmod_poly_gcdinv(
1773 G: *mut mp_limb_t,
1774 S: *mut mp_limb_t,
1775 A: *const mp_limb_t,
1776 lenA: mp_limb_signed_t,
1777 B: *const mp_limb_t,
1778 lenB: mp_limb_signed_t,
1779 mod_: nmod_t,
1780 ) -> mp_limb_signed_t;
1781 pub fn nmod_poly_gcdinv(
1782 G: *mut nmod_poly_struct,
1783 S: *mut nmod_poly_struct,
1784 A: *mut nmod_poly_struct,
1785 B: *mut nmod_poly_struct,
1786 );
1787 pub fn _nmod_poly_discriminant(
1788 poly: mp_srcptr,
1789 len: mp_limb_signed_t,
1790 mod_: nmod_t,
1791 ) -> mp_limb_t;
1792 pub fn nmod_poly_discriminant(f: *mut nmod_poly_struct) -> mp_limb_t;
1793 pub fn _nmod_poly_invsqrt_series(g: mp_ptr, h: mp_srcptr, n: mp_limb_signed_t, mod_: nmod_t);
1794 pub fn nmod_poly_invsqrt_series(
1795 g: *mut nmod_poly_struct,
1796 h: *mut nmod_poly_struct,
1797 n: mp_limb_signed_t,
1798 );
1799 pub fn _nmod_poly_sqrt_series(g: mp_ptr, h: mp_srcptr, n: mp_limb_signed_t, mod_: nmod_t);
1800 pub fn nmod_poly_sqrt_series(
1801 g: *mut nmod_poly_struct,
1802 h: *mut nmod_poly_struct,
1803 n: mp_limb_signed_t,
1804 );
1805 pub fn _nmod_poly_sqrt(s: mp_ptr, p: mp_srcptr, len: mp_limb_signed_t, mod_: nmod_t) -> c_int;
1806 pub fn nmod_poly_sqrt(b: *mut nmod_poly_struct, a: *mut nmod_poly_struct) -> c_int;
1807 pub fn _nmod_poly_power_sums_naive(
1808 res: mp_ptr,
1809 poly: mp_srcptr,
1810 len: mp_limb_signed_t,
1811 n: mp_limb_signed_t,
1812 mod_: nmod_t,
1813 );
1814 pub fn nmod_poly_power_sums_naive(
1815 res: *mut nmod_poly_struct,
1816 poly: *mut nmod_poly_struct,
1817 n: mp_limb_signed_t,
1818 );
1819 pub fn _nmod_poly_power_sums_schoenhage(
1820 res: mp_ptr,
1821 poly: mp_srcptr,
1822 len: mp_limb_signed_t,
1823 n: mp_limb_signed_t,
1824 mod_: nmod_t,
1825 );
1826 pub fn nmod_poly_power_sums_schoenhage(
1827 res: *mut nmod_poly_struct,
1828 poly: *mut nmod_poly_struct,
1829 n: mp_limb_signed_t,
1830 );
1831 pub fn _nmod_poly_power_sums(
1832 res: mp_ptr,
1833 poly: mp_srcptr,
1834 len: mp_limb_signed_t,
1835 n: mp_limb_signed_t,
1836 mod_: nmod_t,
1837 );
1838 pub fn nmod_poly_power_sums(
1839 res: *mut nmod_poly_struct,
1840 poly: *mut nmod_poly_struct,
1841 n: mp_limb_signed_t,
1842 );
1843 pub fn _nmod_poly_power_sums_to_poly_naive(
1844 res: mp_ptr,
1845 poly: mp_srcptr,
1846 len: mp_limb_signed_t,
1847 mod_: nmod_t,
1848 );
1849 pub fn nmod_poly_power_sums_to_poly_naive(res: *mut nmod_poly_struct, Q: *mut nmod_poly_struct);
1850 pub fn _nmod_poly_power_sums_to_poly_schoenhage(
1851 res: mp_ptr,
1852 poly: mp_srcptr,
1853 len: mp_limb_signed_t,
1854 mod_: nmod_t,
1855 );
1856 pub fn nmod_poly_power_sums_to_poly_schoenhage(
1857 res: *mut nmod_poly_struct,
1858 Q: *mut nmod_poly_struct,
1859 );
1860 pub fn _nmod_poly_power_sums_to_poly(
1861 res: mp_ptr,
1862 poly: mp_srcptr,
1863 len: mp_limb_signed_t,
1864 mod_: nmod_t,
1865 );
1866 pub fn nmod_poly_power_sums_to_poly(res: *mut nmod_poly_struct, Q: *mut nmod_poly_struct);
1867 pub fn _nmod_poly_atan_series(g: mp_ptr, h: mp_srcptr, n: mp_limb_signed_t, mod_: nmod_t);
1868 pub fn nmod_poly_atan_series(
1869 g: *mut nmod_poly_struct,
1870 h: *mut nmod_poly_struct,
1871 n: mp_limb_signed_t,
1872 );
1873 pub fn _nmod_poly_tan_series(g: mp_ptr, h: mp_srcptr, n: mp_limb_signed_t, mod_: nmod_t);
1874 pub fn nmod_poly_tan_series(
1875 g: *mut nmod_poly_struct,
1876 h: *mut nmod_poly_struct,
1877 n: mp_limb_signed_t,
1878 );
1879 pub fn _nmod_poly_asin_series(g: mp_ptr, h: mp_srcptr, n: mp_limb_signed_t, mod_: nmod_t);
1880 pub fn nmod_poly_asin_series(
1881 g: *mut nmod_poly_struct,
1882 h: *mut nmod_poly_struct,
1883 n: mp_limb_signed_t,
1884 );
1885 pub fn _nmod_poly_sin_series(g: mp_ptr, h: mp_srcptr, n: mp_limb_signed_t, mod_: nmod_t);
1886 pub fn nmod_poly_sin_series(
1887 g: *mut nmod_poly_struct,
1888 h: *mut nmod_poly_struct,
1889 n: mp_limb_signed_t,
1890 );
1891 pub fn _nmod_poly_cos_series(g: mp_ptr, h: mp_srcptr, n: mp_limb_signed_t, mod_: nmod_t);
1892 pub fn nmod_poly_cos_series(
1893 g: *mut nmod_poly_struct,
1894 h: *mut nmod_poly_struct,
1895 n: mp_limb_signed_t,
1896 );
1897 pub fn _nmod_poly_asinh_series(g: mp_ptr, h: mp_srcptr, n: mp_limb_signed_t, mod_: nmod_t);
1898 pub fn nmod_poly_asinh_series(
1899 g: *mut nmod_poly_struct,
1900 h: *mut nmod_poly_struct,
1901 n: mp_limb_signed_t,
1902 );
1903 pub fn _nmod_poly_atanh_series(g: mp_ptr, h: mp_srcptr, n: mp_limb_signed_t, mod_: nmod_t);
1904 pub fn nmod_poly_atanh_series(
1905 g: *mut nmod_poly_struct,
1906 h: *mut nmod_poly_struct,
1907 n: mp_limb_signed_t,
1908 );
1909 pub fn _nmod_poly_sinh_series(g: mp_ptr, h: mp_srcptr, n: mp_limb_signed_t, mod_: nmod_t);
1910 pub fn nmod_poly_sinh_series(
1911 g: *mut nmod_poly_struct,
1912 h: *mut nmod_poly_struct,
1913 n: mp_limb_signed_t,
1914 );
1915 pub fn _nmod_poly_cosh_series(g: mp_ptr, h: mp_srcptr, n: mp_limb_signed_t, mod_: nmod_t);
1916 pub fn nmod_poly_cosh_series(
1917 g: *mut nmod_poly_struct,
1918 h: *mut nmod_poly_struct,
1919 n: mp_limb_signed_t,
1920 );
1921 pub fn _nmod_poly_tanh_series(g: mp_ptr, h: mp_srcptr, n: mp_limb_signed_t, mod_: nmod_t);
1922 pub fn nmod_poly_tanh_series(
1923 g: *mut nmod_poly_struct,
1924 h: *mut nmod_poly_struct,
1925 n: mp_limb_signed_t,
1926 );
1927 pub fn _nmod_poly_log_series_monomial_ui(
1928 res: mp_ptr,
1929 coeff: mp_limb_t,
1930 power: mp_limb_t,
1931 n: mp_limb_signed_t,
1932 mod_: nmod_t,
1933 );
1934 pub fn nmod_poly_log_series_monomial_ui(
1935 res: *mut nmod_poly_struct,
1936 coeff: mp_limb_t,
1937 power: mp_limb_t,
1938 n: mp_limb_signed_t,
1939 );
1940 pub fn _nmod_poly_log_series(
1941 res: mp_ptr,
1942 f: mp_srcptr,
1943 flen: mp_limb_signed_t,
1944 n: mp_limb_signed_t,
1945 mod_: nmod_t,
1946 );
1947 pub fn nmod_poly_log_series(
1948 res: *mut nmod_poly_struct,
1949 f: *mut nmod_poly_struct,
1950 n: mp_limb_signed_t,
1951 );
1952 pub fn _nmod_poly_exp_series_monomial_ui(
1953 res: mp_ptr,
1954 coeff: mp_limb_t,
1955 power: mp_limb_t,
1956 n: mp_limb_signed_t,
1957 mod_: nmod_t,
1958 );
1959 pub fn nmod_poly_exp_series_monomial_ui(
1960 res: *mut nmod_poly_struct,
1961 coeff: mp_limb_t,
1962 power: mp_limb_t,
1963 n: mp_limb_signed_t,
1964 );
1965 pub fn _nmod_poly_exp_series_basecase(
1966 f: mp_ptr,
1967 h: mp_srcptr,
1968 hlen: mp_limb_signed_t,
1969 n: mp_limb_signed_t,
1970 mod_: nmod_t,
1971 );
1972 pub fn nmod_poly_exp_series_basecase(
1973 f: *mut nmod_poly_struct,
1974 h: *mut nmod_poly_struct,
1975 n: mp_limb_signed_t,
1976 );
1977 pub fn _nmod_poly_exp_expinv_series(
1978 f: mp_ptr,
1979 g: mp_ptr,
1980 h: mp_srcptr,
1981 n: mp_limb_signed_t,
1982 mod_: nmod_t,
1983 );
1984 pub fn _nmod_poly_exp_series(f: mp_ptr, h: mp_srcptr, n: mp_limb_signed_t, mod_: nmod_t);
1985 pub fn _nmod_poly_exp_series2(
1986 f: mp_ptr,
1987 h: mp_srcptr,
1988 hlen: mp_limb_signed_t,
1989 n: mp_limb_signed_t,
1990 mod_: nmod_t,
1991 );
1992 pub fn nmod_poly_exp_series(
1993 f: *mut nmod_poly_struct,
1994 h: *mut nmod_poly_struct,
1995 n: mp_limb_signed_t,
1996 );
1997 pub fn nmod_poly_product_roots_nmod_vec(
1998 poly: *mut nmod_poly_struct,
1999 xs: mp_srcptr,
2000 n: mp_limb_signed_t,
2001 );
2002 pub fn _nmod_poly_product_roots_nmod_vec(
2003 poly: mp_ptr,
2004 xs: mp_srcptr,
2005 n: mp_limb_signed_t,
2006 mod_: nmod_t,
2007 );
2008 pub fn _nmod_poly_split_rabin(
2009 a: *mut nmod_poly_struct,
2010 b: *mut nmod_poly_struct,
2011 f: *mut nmod_poly_struct,
2012 t: *mut nmod_poly_struct,
2013 t2: *mut nmod_poly_struct,
2014 randstate: *mut flint_rand_s,
2015 );
2016 pub fn nmod_poly_find_distinct_nonzero_roots(
2017 roots: *mut mp_limb_t,
2018 P: *mut nmod_poly_struct,
2019 ) -> c_int;
2020 pub fn nmod_poly_multi_crt_init(CRT: *mut nmod_poly_multi_crt_struct);
2021 pub fn nmod_poly_multi_crt_precompute(
2022 CRT: *mut nmod_poly_multi_crt_struct,
2023 moduli: *const nmod_poly_struct,
2024 len: mp_limb_signed_t,
2025 ) -> c_int;
2026 pub fn nmod_poly_multi_crt_precompute_p(
2027 CRT: *mut nmod_poly_multi_crt_struct,
2028 moduli: *const *const nmod_poly_struct,
2029 len: mp_limb_signed_t,
2030 ) -> c_int;
2031 pub fn nmod_poly_multi_crt_precomp(
2032 output: *mut nmod_poly_struct,
2033 CRT: *mut nmod_poly_multi_crt_struct,
2034 values: *const nmod_poly_struct,
2035 );
2036 pub fn nmod_poly_multi_crt_precomp_p(
2037 output: *mut nmod_poly_struct,
2038 CRT: *mut nmod_poly_multi_crt_struct,
2039 values: *const *const nmod_poly_struct,
2040 );
2041 pub fn nmod_poly_multi_crt(
2042 output: *mut nmod_poly_struct,
2043 moduli: *const nmod_poly_struct,
2044 values: *const nmod_poly_struct,
2045 len: mp_limb_signed_t,
2046 ) -> c_int;
2047 pub fn nmod_poly_multi_crt_clear(CRT: *mut nmod_poly_multi_crt_struct);
2048 pub fn _nmod_poly_multi_crt_local_size(
2049 CRT: *mut nmod_poly_multi_crt_struct,
2050 ) -> mp_limb_signed_t;
2051 pub fn _nmod_poly_multi_crt_run(
2052 outputs: *mut nmod_poly_struct,
2053 CRT: *mut nmod_poly_multi_crt_struct,
2054 inputs: *const nmod_poly_struct,
2055 );
2056 pub fn _nmod_poly_multi_crt_run_p(
2057 outputs: *mut nmod_poly_struct,
2058 CRT: *mut nmod_poly_multi_crt_struct,
2059 inputs: *const *const nmod_poly_struct,
2060 );
2061 pub fn nmod_poly_deflation(input: *mut nmod_poly_struct) -> mp_limb_t;
2062 pub fn nmod_poly_deflate(
2063 result: *mut nmod_poly_struct,
2064 input: *mut nmod_poly_struct,
2065 deflation: mp_limb_t,
2066 );
2067 pub fn nmod_poly_inflate(
2068 result: *mut nmod_poly_struct,
2069 input: *mut nmod_poly_struct,
2070 inflation: mp_limb_t,
2071 );
2072 pub fn nmod_mat_charpoly_danilevsky(p: *mut nmod_poly_struct, M: *mut nmod_mat_struct);
2073 pub fn nmod_mat_charpoly(p: *mut nmod_poly_struct, M: *mut nmod_mat_struct);
2074 pub fn nmod_mat_minpoly_with_gens(
2075 p: *mut nmod_poly_struct,
2076 X: *mut nmod_mat_struct,
2077 P: *mut mp_limb_t,
2078 );
2079 pub fn nmod_mat_minpoly(p: *mut nmod_poly_struct, M: *mut nmod_mat_struct);
2080 pub fn nmod_berlekamp_massey_init(B: *mut nmod_berlekamp_massey_struct, p: mp_limb_t);
2081 pub fn nmod_berlekamp_massey_start_over(B: *mut nmod_berlekamp_massey_struct);
2082 pub fn nmod_berlekamp_massey_clear(B: *mut nmod_berlekamp_massey_struct);
2083 pub fn nmod_berlekamp_massey_set_prime(B: *mut nmod_berlekamp_massey_struct, p: mp_limb_t);
2084 pub fn nmod_berlekamp_massey_print(B: *mut nmod_berlekamp_massey_struct);
2085 pub fn nmod_berlekamp_massey_add_points(
2086 B: *mut nmod_berlekamp_massey_struct,
2087 a: *const mp_limb_t,
2088 count: mp_limb_signed_t,
2089 );
2090 pub fn nmod_berlekamp_massey_add_zeros(
2091 B: *mut nmod_berlekamp_massey_struct,
2092 count: mp_limb_signed_t,
2093 );
2094 pub fn nmod_berlekamp_massey_add_point(B: *mut nmod_berlekamp_massey_struct, a: mp_limb_t);
2095 pub fn nmod_berlekamp_massey_reduce(B: *mut nmod_berlekamp_massey_struct) -> c_int;
2096 pub fn nmod_berlekamp_massey_points(B: *mut nmod_berlekamp_massey_struct) -> *const mp_limb_t;
2097 pub fn nmod_berlekamp_massey_point_count(
2098 B: *mut nmod_berlekamp_massey_struct,
2099 ) -> mp_limb_signed_t;
2100 pub fn nmod_berlekamp_massey_V_poly(
2101 B: *mut nmod_berlekamp_massey_struct,
2102 ) -> *const nmod_poly_struct;
2103 pub fn nmod_berlekamp_massey_R_poly(
2104 B: *mut nmod_berlekamp_massey_struct,
2105 ) -> *const nmod_poly_struct;
2106}