1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
#![allow(non_camel_case_types)]
use crate::deps::*;
use crate::fmpz::fmpz;
use crate::fmpz_mat::fmpz_mat_struct;
use crate::fmpz_poly::fmpz_poly_struct;
use libc::{c_uchar, c_int};
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct fmpz_poly_factor_struct {
pub c: fmpz,
pub p: *mut fmpz_poly_struct,
pub exp: *mut mp_limb_signed_t,
pub num: mp_limb_signed_t,
pub alloc: mp_limb_signed_t,
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct zassenhaus_prune_struct {
pub deg: mp_limb_signed_t,
pub pos_degs: *mut c_uchar,
pub new_length: mp_limb_signed_t,
pub new_total: mp_limb_signed_t,
pub new_degs: *mut mp_limb_signed_t,
pub alloc: mp_limb_signed_t,
}
pub type zassenhaus_prune_t = [zassenhaus_prune_struct; 1usize];
extern "C" {
pub fn fmpz_poly_factor_init(fac: *mut fmpz_poly_factor_struct);
pub fn fmpz_poly_factor_init2(fac: *mut fmpz_poly_factor_struct, alloc: mp_limb_signed_t);
pub fn fmpz_poly_factor_realloc(fac: *mut fmpz_poly_factor_struct, alloc: mp_limb_signed_t);
pub fn fmpz_poly_factor_fit_length(fac: *mut fmpz_poly_factor_struct, len: mp_limb_signed_t);
pub fn fmpz_poly_factor_clear(fac: *mut fmpz_poly_factor_struct);
pub fn fmpz_poly_factor_set(
res: *mut fmpz_poly_factor_struct,
fac: *const fmpz_poly_factor_struct,
);
pub fn fmpz_poly_factor_insert(
fac: *mut fmpz_poly_factor_struct,
p: *const fmpz_poly_struct,
exp: mp_limb_signed_t,
);
pub fn fmpz_poly_factor_concat(
res: *mut fmpz_poly_factor_struct,
fac: *const fmpz_poly_factor_struct,
);
pub fn fmpz_poly_factor_print(fac: *const fmpz_poly_factor_struct);
pub fn fmpz_poly_factor_zassenhaus_recombination(
final_fac: *mut fmpz_poly_factor_struct,
lifted_fac: *const fmpz_poly_factor_struct,
F: *const fmpz_poly_struct,
P: *const fmpz,
exp: mp_limb_signed_t,
);
pub fn fmpz_poly_factor_squarefree(fac: *mut fmpz_poly_factor_struct, F: *const fmpz_poly_struct);
pub fn fmpz_poly_factor_mignotte(B: *mut fmpz, f: *const fmpz_poly_struct);
pub fn _fmpz_poly_factor_zassenhaus(
final_fac: *mut fmpz_poly_factor_struct,
exp: mp_limb_signed_t,
f: *const fmpz_poly_struct,
cutoff: mp_limb_signed_t,
use_van_hoeij: c_int,
);
pub fn fmpz_poly_factor_zassenhaus(fac: *mut fmpz_poly_factor_struct, G: *const fmpz_poly_struct);
pub fn _fmpz_poly_factor_quadratic(
fac: *mut fmpz_poly_factor_struct,
f: *const fmpz_poly_struct,
exp: mp_limb_signed_t,
);
pub fn _fmpz_poly_factor_cubic(
fac: *mut fmpz_poly_factor_struct,
f: *const fmpz_poly_struct,
exp: mp_limb_signed_t,
);
pub fn _fmpz_poly_factor_CLD_mat(
res: *mut fmpz_mat_struct,
f: *const fmpz_poly_struct,
lifted_fac: *const fmpz_poly_factor_struct,
P: *const fmpz,
k: mp_limb_t,
) -> mp_limb_signed_t;
pub fn fmpz_poly_factor_van_hoeij_check_if_solved(
M: *const fmpz_mat_struct,
final_fac: *const fmpz_poly_factor_struct,
lifted_fac: *const fmpz_poly_factor_struct,
f: *const fmpz_poly_struct,
P: *const fmpz,
exp: mp_limb_signed_t,
lc: *const fmpz,
) -> c_int;
pub fn fmpz_poly_factor(fac: *mut fmpz_poly_factor_struct, G: *const fmpz_poly_struct);
pub fn fmpz_poly_factor_get_fmpz_poly(
z: *mut fmpz_poly_struct,
F: *const fmpz_poly_factor_struct,
i: mp_limb_signed_t,
);
pub fn fmpz_poly_factor_get_fmpz(z: *mut fmpz, F: *const fmpz_poly_factor_struct);
pub fn zassenhaus_subset_first(
s: *mut mp_limb_signed_t,
r: mp_limb_signed_t,
m: mp_limb_signed_t,
);
pub fn zassenhaus_subset_next(
s: *mut mp_limb_signed_t,
r: mp_limb_signed_t,
) -> c_int;
pub fn zassenhaus_subset_next_disjoint(
s: *mut mp_limb_signed_t,
r: mp_limb_signed_t,
) -> mp_limb_signed_t;
pub fn zassenhaus_prune_init(Z: *mut zassenhaus_prune_struct);
pub fn zassenhaus_prune_clear(Z: *mut zassenhaus_prune_struct);
pub fn zassenhaus_prune_set_degree(Z: *mut zassenhaus_prune_struct, d: mp_limb_signed_t);
pub fn zassenhaus_prune_start_add_factors(Z: *mut zassenhaus_prune_struct);
pub fn zassenhaus_prune_add_factor(
Z: *mut zassenhaus_prune_struct,
deg: mp_limb_signed_t,
exp: mp_limb_signed_t,
);
pub fn zassenhaus_prune_end_add_factors(Z: *mut zassenhaus_prune_struct);
pub fn zassenhaus_prune_must_be_irreducible(
Z: *mut zassenhaus_prune_struct,
) -> c_int;
pub fn zassenhaus_prune_degree_is_possible(
Z: *mut zassenhaus_prune_struct,
d: mp_limb_signed_t,
) -> c_int;
pub fn fmpz_poly_factor_zassenhaus_recombination_with_prune(
final_fac: *mut fmpz_poly_factor_struct,
lifted_fac: *mut fmpz_poly_factor_struct,
F: *mut fmpz_poly_struct,
P: *mut fmpz,
exp: mp_limb_signed_t,
Z: *mut zassenhaus_prune_struct,
);
}