1#![allow(non_camel_case_types)]
2
3use crate::deps::*;
6use crate::flint::*;
7use crate::fq_nmod::{fq_nmod_ctx_struct, fq_nmod_struct};
8use crate::fq_nmod_poly::{fq_nmod_poly_struct, fq_nmod_poly_t};
9use crate::nmod_poly::nmod_poly_struct;
10use libc::{c_char, c_int};
11
12#[repr(C)]
13#[derive(Debug, Copy, Clone)]
14pub struct fq_nmod_poly_factor_struct {
15 pub poly: *mut fq_nmod_poly_struct,
16 pub exp: *mut mp_limb_signed_t,
17 pub num: mp_limb_signed_t,
18 pub alloc: mp_limb_signed_t,
19}
20
21pub type fq_nmod_poly_factor_t = [fq_nmod_poly_factor_struct; 1usize];
22
23extern "C" {
24 pub fn FQ_NMOD_POLY_ITERATED_FROBENIUS_CUTOFF(
25 ctx: *mut fq_nmod_ctx_struct,
26 length: mp_limb_signed_t,
27 ) -> c_int;
28 pub fn fq_nmod_poly_factor_init(
29 fac: *mut fq_nmod_poly_factor_struct,
30 ctx: *mut fq_nmod_ctx_struct,
31 );
32 pub fn fq_nmod_poly_factor_clear(
33 fac: *mut fq_nmod_poly_factor_struct,
34 ctx: *mut fq_nmod_ctx_struct,
35 );
36 pub fn fq_nmod_poly_factor_realloc(
37 fac: *mut fq_nmod_poly_factor_struct,
38 alloc: mp_limb_signed_t,
39 ctx: *mut fq_nmod_ctx_struct,
40 );
41 pub fn fq_nmod_poly_factor_fit_length(
42 fac: *mut fq_nmod_poly_factor_struct,
43 len: mp_limb_signed_t,
44 ctx: *mut fq_nmod_ctx_struct,
45 );
46 pub fn fq_nmod_poly_factor_set(
47 res: *mut fq_nmod_poly_factor_struct,
48 fac: *mut fq_nmod_poly_factor_struct,
49 ctx: *mut fq_nmod_ctx_struct,
50 );
51 pub fn fq_nmod_poly_factor_insert(
52 fac: *mut fq_nmod_poly_factor_struct,
53 poly: *mut fq_nmod_poly_struct,
54 exp: mp_limb_signed_t,
55 ctx: *mut fq_nmod_ctx_struct,
56 );
57 pub fn fq_nmod_poly_factor_print(
58 fac: *mut fq_nmod_poly_factor_struct,
59 ctx: *mut fq_nmod_ctx_struct,
60 );
61 pub fn fq_nmod_poly_factor_print_pretty(
62 fac: *mut fq_nmod_poly_factor_struct,
63 var: *const c_char,
64 ctx: *mut fq_nmod_ctx_struct,
65 );
66 pub fn fq_nmod_poly_factor_concat(
67 res: *mut fq_nmod_poly_factor_struct,
68 fac: *mut fq_nmod_poly_factor_struct,
69 ctx: *mut fq_nmod_ctx_struct,
70 );
71 pub fn fq_nmod_poly_factor_pow(
72 fac: *mut fq_nmod_poly_factor_struct,
73 exp: mp_limb_signed_t,
74 ctx: *mut fq_nmod_ctx_struct,
75 );
76 pub fn _fq_nmod_poly_is_squarefree(
77 f: *const fq_nmod_struct,
78 len: mp_limb_signed_t,
79 ctx: *mut fq_nmod_ctx_struct,
80 ) -> c_int;
81 pub fn fq_nmod_poly_is_squarefree(
82 f: *mut fq_nmod_poly_struct,
83 ctx: *mut fq_nmod_ctx_struct,
84 ) -> c_int;
85 pub fn fq_nmod_poly_factor_squarefree(
86 res: *mut fq_nmod_poly_factor_struct,
87 f: *mut fq_nmod_poly_struct,
88 ctx: *mut fq_nmod_ctx_struct,
89 );
90 pub fn fq_nmod_poly_is_irreducible(
91 f: *mut fq_nmod_poly_struct,
92 ctx: *mut fq_nmod_ctx_struct,
93 ) -> c_int;
94 pub fn fq_nmod_poly_is_irreducible_ddf(
95 f: *mut fq_nmod_poly_struct,
96 ctx: *mut fq_nmod_ctx_struct,
97 ) -> c_int;
98 pub fn fq_nmod_poly_is_irreducible_ben_or(
99 f: *mut fq_nmod_poly_struct,
100 ctx: *mut fq_nmod_ctx_struct,
101 ) -> c_int;
102 pub fn fq_nmod_poly_factor_distinct_deg(
103 res: *mut fq_nmod_poly_factor_struct,
104 poly: *mut fq_nmod_poly_struct,
105 degs: *const *mut mp_limb_signed_t,
106 ctx: *mut fq_nmod_ctx_struct,
107 );
108 pub fn fq_nmod_poly_factor_equal_deg_prob(
109 factor: *mut fq_nmod_poly_struct,
110 state: *mut flint_rand_s,
111 pol: *mut fq_nmod_poly_struct,
112 d: mp_limb_signed_t,
113 ctx: *mut fq_nmod_ctx_struct,
114 ) -> c_int;
115 pub fn fq_nmod_poly_factor_equal_deg(
116 factors: *mut fq_nmod_poly_factor_struct,
117 pol: *mut fq_nmod_poly_struct,
118 d: mp_limb_signed_t,
119 ctx: *mut fq_nmod_ctx_struct,
120 );
121 pub fn fq_nmod_poly_factor_cantor_zassenhaus(
122 res: *mut fq_nmod_poly_factor_struct,
123 f: *mut fq_nmod_poly_struct,
124 ctx: *mut fq_nmod_ctx_struct,
125 );
126 pub fn fq_nmod_poly_factor_kaltofen_shoup(
127 res: *mut fq_nmod_poly_factor_struct,
128 poly: *mut fq_nmod_poly_struct,
129 ctx: *mut fq_nmod_ctx_struct,
130 );
131 pub fn fq_nmod_poly_factor_berlekamp(
132 factors: *mut fq_nmod_poly_factor_struct,
133 f: *mut fq_nmod_poly_struct,
134 ctx: *mut fq_nmod_ctx_struct,
135 );
136 pub fn fq_nmod_poly_factor_with_berlekamp(
137 result: *mut fq_nmod_poly_factor_struct,
138 leading_coeff: *mut nmod_poly_struct,
139 input: *mut fq_nmod_poly_struct,
140 ctx: *mut fq_nmod_ctx_struct,
141 );
142 pub fn fq_nmod_poly_factor_with_cantor_zassenhaus(
143 result: *mut fq_nmod_poly_factor_struct,
144 leading_coeff: *mut nmod_poly_struct,
145 input: *mut fq_nmod_poly_struct,
146 ctx: *mut fq_nmod_ctx_struct,
147 );
148 pub fn fq_nmod_poly_factor_with_kaltofen_shoup(
149 result: *mut fq_nmod_poly_factor_struct,
150 leading_coeff: *mut nmod_poly_struct,
151 input: *mut fq_nmod_poly_struct,
152 ctx: *mut fq_nmod_ctx_struct,
153 );
154 pub fn fq_nmod_poly_factor(
155 result: *mut fq_nmod_poly_factor_struct,
156 leading_coeff: *mut nmod_poly_struct,
157 input: *mut fq_nmod_poly_struct,
158 ctx: *mut fq_nmod_ctx_struct,
159 );
160 pub fn fq_nmod_poly_iterated_frobenius_preinv(
161 rop: *mut fq_nmod_poly_t,
162 n: mp_limb_signed_t,
163 v: *mut fq_nmod_poly_struct,
164 vinv: *mut fq_nmod_poly_struct,
165 ctx: *mut fq_nmod_ctx_struct,
166 );
167 pub fn fq_nmod_poly_factor_split_single(
168 linfactor: *mut fq_nmod_poly_struct,
169 input: *mut fq_nmod_poly_struct,
170 ctx: *mut fq_nmod_ctx_struct,
171 );
172 pub fn fq_nmod_poly_roots(
173 r: *mut fq_nmod_poly_factor_struct,
174 f: *mut fq_nmod_poly_struct,
175 with_multiplicity: c_int,
176 ctx: *mut fq_nmod_ctx_struct,
177 );
178 pub fn fq_nmod_poly_factor_get_poly(
179 z: *mut fq_nmod_poly_struct,
180 fac: *mut fq_nmod_poly_factor_struct,
181 i: mp_limb_signed_t,
182 ctx: *mut fq_nmod_ctx_struct,
183 );
184}