1#![allow(non_camel_case_types)]
2
3use crate::deps::*;
6use crate::flint::*;
7use crate::fmpz::fmpz;
8use crate::fmpz_mod::{fmpz_mod_ctx_struct, fmpz_mod_ctx_t};
9use crate::fmpz_mod_mat::fmpz_mod_mat_struct;
10use crate::fmpz_mod_poly::{fmpz_mod_poly_struct, fmpz_mod_poly_t};
11use crate::fmpz_poly::{fmpz_poly_struct, fmpz_poly_t};
12use libc::{c_char, c_int, FILE};
13
14pub type fq_t = fmpz_poly_t;
15pub type fq_struct = fmpz_poly_struct;
16
17#[repr(C)]
18#[derive(Debug, Copy, Clone)]
19pub struct fq_ctx_struct {
20 pub ctxp: fmpz_mod_ctx_t,
21 pub sparse_modulus: c_int,
22 pub is_conway: c_int,
23 pub a: *mut fmpz,
24 pub j: *mut mp_limb_signed_t,
25 pub len: mp_limb_signed_t,
26 pub modulus: fmpz_mod_poly_t,
27 pub inv: fmpz_mod_poly_t,
28 pub var: *mut c_char,
29}
30
31pub type fq_ctx_t = [fq_ctx_struct; 1usize];
32
33extern "C" {
34 pub fn fq_ctx_init(
35 ctx: *mut fq_ctx_struct,
36 p: *const fmpz,
37 d: mp_limb_signed_t,
38 var: *const c_char,
39 );
40 pub fn _fq_ctx_init_conway(
41 ctx: *mut fq_ctx_struct,
42 p: *const fmpz,
43 d: mp_limb_signed_t,
44 var: *const c_char,
45 ) -> c_int;
46 pub fn fq_ctx_init_conway(
47 ctx: *mut fq_ctx_struct,
48 p: *const fmpz,
49 d: mp_limb_signed_t,
50 var: *const c_char,
51 );
52 pub fn fq_ctx_init_modulus(
53 ctx: *mut fq_ctx_struct,
54 modulus: *const fmpz_mod_poly_struct,
55 ctxp: *const fmpz_mod_ctx_struct,
56 var: *const c_char,
57 );
58 pub fn fq_ctx_randtest(ctx: *mut fq_ctx_struct, state: *const flint_rand_s);
59 pub fn fq_ctx_randtest_reducible(ctx: *mut fq_ctx_struct, state: *const flint_rand_s);
60 pub fn fq_ctx_clear(ctx: *mut fq_ctx_struct);
61 pub fn fq_ctx_modulus(ctx: *const fq_ctx_struct) -> *const fmpz_mod_poly_struct;
62 pub fn fq_ctx_degree(ctx: *const fq_ctx_struct) -> mp_limb_signed_t;
63 pub fn fq_ctx_prime(ctx: *const fq_ctx_struct) -> *const fmpz;
64 pub fn fq_ctx_order(f: *mut fmpz, ctx: *const fq_ctx_struct);
65 pub fn fq_ctx_fprint(file: *mut FILE, ctx: *const fq_ctx_struct) -> c_int;
66 pub fn fq_ctx_print(ctx: *const fq_ctx_struct);
67 pub fn fq_init(rop: *mut fmpz_poly_struct, ctx: *const fq_ctx_struct);
68 pub fn fq_init2(rop: *mut fmpz_poly_struct, ctx: *const fq_ctx_struct);
69 pub fn fq_clear(rop: *mut fmpz_poly_struct, ctx: *const fq_ctx_struct);
70 pub fn _fq_sparse_reduce(R: *mut fmpz, lenR: mp_limb_signed_t, ctx: *const fq_ctx_struct);
71 pub fn _fq_dense_reduce(R: *mut fmpz, lenR: mp_limb_signed_t, ctx: *const fq_ctx_struct);
72 pub fn _fq_reduce(R: *mut fmpz, lenR: mp_limb_signed_t, ctx: *const fq_ctx_struct);
73 pub fn fq_reduce(rop: *mut fmpz_poly_struct, ctx: *const fq_ctx_struct);
74 pub fn fq_add(
75 rop: *mut fmpz_poly_struct,
76 op1: *const fmpz_poly_struct,
77 op2: *const fmpz_poly_struct,
78 ctx: *const fq_ctx_struct,
79 );
80 pub fn fq_sub(
81 rop: *mut fmpz_poly_struct,
82 op1: *const fmpz_poly_struct,
83 op2: *const fmpz_poly_struct,
84 ctx: *const fq_ctx_struct,
85 );
86 pub fn fq_sub_one(
87 rop: *mut fmpz_poly_struct,
88 op1: *const fmpz_poly_struct,
89 ctx: *const fq_ctx_struct,
90 );
91 pub fn fq_neg(
92 rop: *mut fmpz_poly_struct,
93 op1: *const fmpz_poly_struct,
94 ctx: *const fq_ctx_struct,
95 );
96 pub fn fq_mul(
97 rop: *mut fmpz_poly_struct,
98 op1: *const fmpz_poly_struct,
99 op2: *const fmpz_poly_struct,
100 ctx: *const fq_ctx_struct,
101 );
102 pub fn fq_mul_fmpz(
103 rop: *mut fmpz_poly_struct,
104 op: *const fmpz_poly_struct,
105 x: *const fmpz,
106 ctx: *const fq_ctx_struct,
107 );
108 pub fn fq_mul_si(
109 rop: *mut fmpz_poly_struct,
110 op: *const fmpz_poly_struct,
111 x: mp_limb_signed_t,
112 ctx: *const fq_ctx_struct,
113 );
114 pub fn fq_mul_ui(
115 rop: *mut fmpz_poly_struct,
116 op: *const fmpz_poly_struct,
117 x: mp_limb_t,
118 ctx: *const fq_ctx_struct,
119 );
120 pub fn fq_sqr(
121 rop: *mut fmpz_poly_struct,
122 op: *const fmpz_poly_struct,
123 ctx: *const fq_ctx_struct,
124 );
125 pub fn fq_inv(
126 rop: *mut fmpz_poly_struct,
127 op1: *const fmpz_poly_struct,
128 ctx: *const fq_ctx_struct,
129 );
130 pub fn _fq_pow(
131 rop: *mut fmpz,
132 op: *const fmpz,
133 len: mp_limb_signed_t,
134 e: *const fmpz,
135 ctx: *const fq_ctx_struct,
136 );
137 pub fn fq_pow(
138 rop: *mut fmpz_poly_struct,
139 op1: *const fmpz_poly_struct,
140 e: *const fmpz,
141 ctx: *const fq_ctx_struct,
142 );
143 pub fn fq_pow_ui(
144 rop: *mut fmpz_poly_struct,
145 op: *const fmpz_poly_struct,
146 e: mp_limb_t,
147 ctx: *const fq_ctx_struct,
148 );
149 pub fn fq_sqrt(
150 rop: *mut fmpz_poly_struct,
151 op: *const fmpz_poly_struct,
152 ctx: *const fq_ctx_struct,
153 ) -> c_int;
154 pub fn fq_pth_root(
155 rop: *mut fmpz_poly_struct,
156 op1: *const fmpz_poly_struct,
157 ctx: *const fq_ctx_struct,
158 );
159 pub fn fq_is_square(op: *const fmpz_poly_struct, ctx: *const fq_ctx_struct) -> c_int;
160 pub fn fq_randtest(
161 rop: *mut fmpz_poly_struct,
162 state: *const flint_rand_s,
163 ctx: *const fq_ctx_struct,
164 );
165 pub fn fq_randtest_dense(
166 rop: *mut fmpz_poly_struct,
167 state: *const flint_rand_s,
168 ctx: *const fq_ctx_struct,
169 );
170 pub fn fq_randtest_not_zero(
171 rop: *mut fmpz_poly_struct,
172 state: *const flint_rand_s,
173 ctx: *const fq_ctx_struct,
174 );
175 pub fn fq_rand(
176 rop: *mut fmpz_poly_struct,
177 state: *const flint_rand_s,
178 ctx: *const fq_ctx_struct,
179 );
180 pub fn fq_rand_not_zero(
181 rop: *mut fmpz_poly_struct,
182 state: *const flint_rand_s,
183 ctx: *const fq_ctx_struct,
184 );
185 pub fn fq_equal(
186 op1: *const fmpz_poly_struct,
187 op2: *const fmpz_poly_struct,
188 ctx: *const fq_ctx_struct,
189 ) -> c_int;
190 pub fn fq_is_zero(op: *const fmpz_poly_struct, ctx: *const fq_ctx_struct) -> c_int;
191 pub fn fq_is_one(op: *const fmpz_poly_struct, ctx: *const fq_ctx_struct) -> c_int;
192 pub fn fq_set(rop: *mut fmpz_poly_struct, op: *mut fmpz_poly_struct, ctx: *const fq_ctx_struct);
193 pub fn fq_set_fmpz(rop: *mut fmpz_poly_struct, x: *const fmpz, ctx: *const fq_ctx_struct);
194 pub fn fq_set_ui(rop: *mut fmpz_poly_struct, x: mp_limb_t, ctx: *const fq_ctx_struct);
195 pub fn fq_set_si(rop: *mut fmpz_poly_struct, x: mp_limb_signed_t, ctx: *const fq_ctx_struct);
196 pub fn fq_swap(
197 op1: *mut fmpz_poly_struct,
198 op2: *mut fmpz_poly_struct,
199 ctx: *const fq_ctx_struct,
200 );
201 pub fn fq_zero(rop: *mut fmpz_poly_struct, ctx: *const fq_ctx_struct);
202 pub fn fq_one(rop: *mut fmpz_poly_struct, ctx: *const fq_ctx_struct);
203 pub fn fq_gen(rop: *mut fmpz_poly_struct, ctx: *const fq_ctx_struct);
204 pub fn fq_get_fmpz_poly(
205 a: *mut fmpz_poly_struct,
206 b: *const fmpz_poly_struct,
207 ctx: *const fq_ctx_struct,
208 );
209 pub fn fq_set_fmpz_poly(
210 a: *mut fmpz_poly_struct,
211 b: *const fmpz_poly_struct,
212 ctx: *const fq_ctx_struct,
213 );
214 pub fn fq_get_fmpz_mod_poly(
215 a: *mut fmpz_mod_poly_struct,
216 b: *const fmpz_poly_struct,
217 ctx: *const fq_ctx_struct,
218 );
219 pub fn fq_set_fmpz_mod_poly(
220 a: *mut fmpz_poly_struct,
221 b: *const fmpz_mod_poly_struct,
222 ctx: *const fq_ctx_struct,
223 );
224 pub fn fq_fprint(
225 file: *mut FILE,
226 op: *const fmpz_poly_struct,
227 ctx: *const fq_ctx_struct,
228 ) -> c_int;
229 pub fn fq_print(op: *const fmpz_poly_struct, ctx: *const fq_ctx_struct);
230 pub fn fq_fprint_pretty(
231 file: *mut FILE,
232 op: *const fmpz_poly_struct,
233 ctx: *const fq_ctx_struct,
234 ) -> c_int;
235 pub fn fq_print_pretty(op: *const fmpz_poly_struct, ctx: *const fq_ctx_struct) -> c_int;
236 pub fn fq_get_str(op: *const fmpz_poly_struct, ctx: *const fq_ctx_struct) -> *mut c_char;
237 pub fn fq_get_str_pretty(op: *const fmpz_poly_struct, ctx: *const fq_ctx_struct)
238 -> *mut c_char;
239 pub fn _fq_trace(
240 rop: *mut fmpz,
241 op: *const fmpz,
242 len: mp_limb_signed_t,
243 ctx: *const fq_ctx_struct,
244 );
245 pub fn fq_trace(rop: *mut fmpz, op: *const fmpz_poly_struct, ctx: *const fq_ctx_struct);
246 pub fn _fq_frobenius(
247 rop: *mut fmpz,
248 op: *const fmpz,
249 len: mp_limb_signed_t,
250 e: mp_limb_signed_t,
251 ctx: *const fq_ctx_struct,
252 );
253 pub fn fq_frobenius(
254 rop: *mut fmpz_poly_struct,
255 op: *const fmpz_poly_struct,
256 e: mp_limb_signed_t,
257 ctx: *const fq_ctx_struct,
258 );
259 pub fn _fq_norm(
260 rop: *mut fmpz,
261 op: *const fmpz,
262 len: mp_limb_signed_t,
263 ctx: *const fq_ctx_struct,
264 );
265 pub fn fq_norm(rop: *mut fmpz, op: *const fmpz_poly_struct, ctx: *const fq_ctx_struct);
266 pub fn fq_bit_pack(
267 f: *mut fmpz,
268 op: *const fmpz_poly_struct,
269 bit_size: mp_limb_t,
270 ctx: *const fq_ctx_struct,
271 );
272 pub fn fq_bit_unpack(
273 rop: *mut fmpz_poly_struct,
274 f: *const fmpz,
275 bit_size: mp_limb_t,
276 ctx: *const fq_ctx_struct,
277 );
278 pub fn __fq_ctx_prime(p: *mut fmpz, ctx: *const fq_ctx_struct);
279 pub fn fq_gcdinv(
280 rop: *mut fmpz_poly_struct,
281 inv: *mut fmpz_poly_struct,
282 op: *const fmpz_poly_struct,
283 ctx: *const fq_ctx_struct,
284 );
285 pub fn fq_is_invertible(op: *const fmpz_poly_struct, ctx: *const fq_ctx_struct) -> c_int;
286 pub fn fq_is_invertible_f(
287 rop: *const fmpz_poly_struct,
288 op: *const fmpz_poly_struct,
289 ctx: *const fq_ctx_struct,
290 ) -> c_int;
291 pub fn fq_div(
292 rop: *mut fmpz_poly_struct,
293 op1: *const fmpz_poly_struct,
294 op2: *const fmpz_poly_struct,
295 ctx: *const fq_ctx_struct,
296 );
297 pub fn fq_multiplicative_order(
298 ord: *mut fmpz,
299 op: *const fmpz_poly_struct,
300 ctx: *const fq_ctx_struct,
301 ) -> c_int;
302 pub fn fq_get_fmpz_mod_mat(
303 col: *mut fmpz_mod_mat_struct,
304 a: *const fmpz_poly_struct,
305 ctx: *const fq_ctx_struct,
306 );
307 pub fn fq_set_fmpz_mod_mat(
308 a: *mut fmpz_poly_struct,
309 col: *const fmpz_mod_mat_struct,
310 ctx: *const fq_ctx_struct,
311 );
312 pub fn fq_is_primitive(op: *const fmpz_poly_struct, ctx: *const fq_ctx_struct) -> c_int;
313}