1use flint_sys::deps::*;
2use flint_sys::flint::*;
3use flint_sys::fmpq::fmpq;
4use flint_sys::fmpq_mat::fmpq_mat_struct;
5use flint_sys::fmpq_poly::{fmpq_poly_struct, fmpq_poly_t};
6use flint_sys::fmpz::{fmpz, fmpz_t};
7use flint_sys::fmpz_mat::fmpz_mat_struct;
8use flint_sys::fmpz_mod::fmpz_mod_ctx_struct;
9use flint_sys::fmpz_mod_poly::fmpz_mod_poly_struct;
10use flint_sys::nmod_poly::nmod_poly_struct;
11
12use libc::{c_char, c_int};
13
14use crate::nf::nf_struct;
15
16#[repr(C)]
17#[derive(Debug, Copy, Clone)]
18pub struct lnf_elem_struct {
19 pub num: fmpz_t,
20 pub den: fmpz_t,
21}
22
23pub type lnf_elem_t = [lnf_elem_struct; 1usize];
24
25#[repr(C)]
26#[derive(Debug, Copy, Clone)]
27pub struct qnf_elem_struct {
28 pub num: [fmpz; 3usize],
29 pub den: fmpz_t,
30}
31
32pub type qnf_elem_t = [qnf_elem_struct; 1usize];
33
34#[repr(C)]
35#[derive(Copy, Clone)]
36pub union nf_elem_struct {
37 pub elem: fmpq_poly_t,
38 pub lelem: lnf_elem_t,
39 pub qelem: qnf_elem_t,
40}
41
42pub type nf_elem_t = [nf_elem_struct; 1usize];
43
44extern "C" {
45 pub fn nf_elem_init(a: *mut nf_elem_struct, nf: *const nf_struct);
46 pub fn nf_elem_clear(a: *mut nf_elem_struct, nf: *const nf_struct);
47 pub fn nf_elem_randtest(
48 a: *mut nf_elem_struct,
49 state: *const flint_rand_s,
50 bits: mp_bitcnt_t,
51 nf: *const nf_struct,
52 );
53 pub fn nf_elem_randtest_not_zero(
54 a: *mut nf_elem_struct,
55 state: *const flint_rand_s,
56 bits: mp_bitcnt_t,
57 nf: *const nf_struct,
58 );
59 pub fn _nf_elem_reduce(a: *mut nf_elem_struct, nf: *const nf_struct);
60 pub fn nf_elem_reduce(a: *mut nf_elem_struct, nf: *const nf_struct);
61 pub fn _nf_elem_invertible_check(a: *const nf_elem_struct, nf: *const nf_struct) -> c_int;
62 pub fn _nf_elem_equal(
63 a: *const nf_elem_struct,
64 b: *const nf_elem_struct,
65 nf: *const nf_struct,
66 ) -> c_int;
67 pub fn nf_elem_equal(
68 a: *const nf_elem_struct,
69 b: *const nf_elem_struct,
70 nf: *const nf_struct,
71 ) -> c_int;
72 pub fn nf_elem_is_gen(a: *const nf_elem_struct, nf: *const nf_struct) -> c_int;
73 pub fn nf_elem_print_pretty(a: *const nf_elem_struct, nf: *const nf_struct, var: *const c_char);
74 pub fn nf_elem_get_str_pretty(
75 a: *const nf_elem_struct,
76 var: *const c_char,
77 nf: *const nf_struct,
78 ) -> *const c_char;
79 pub fn nf_elem_set_fmpq_poly(
80 a: *mut nf_elem_struct,
81 pol: *const fmpq_poly_struct,
82 nf: *const nf_struct,
83 );
84 pub fn nf_elem_set_fmpz_mat_row(
85 b: *mut nf_elem_struct,
86 M: *const fmpz_mat_struct,
87 i: mp_limb_signed_t,
88 den: *const fmpz,
89 nf: *const nf_struct,
90 );
91 pub fn nf_elem_get_fmpz_mat_row(
92 M: *mut fmpz_mat_struct,
93 i: mp_limb_signed_t,
94 den: *const fmpz,
95 b: *const nf_elem_struct,
96 nf: *const nf_struct,
97 );
98 pub fn nf_elem_get_fmpq_poly(
99 pol: *mut fmpq_poly_struct,
100 a: *const nf_elem_struct,
101 nf: *const nf_struct,
102 );
103 pub fn _nf_elem_get_nmod_poly(
104 pol: *mut nmod_poly_struct,
105 a: *const nf_elem_struct,
106 nf: *const nf_struct,
107 );
108 pub fn nf_elem_get_nmod_poly_den(
109 pol: *mut nmod_poly_struct,
110 a: *const nf_elem_struct,
111 nf: *const nf_struct,
112 den: c_int,
113 );
114 pub fn nf_elem_get_nmod_poly(
115 pol: *mut nmod_poly_struct,
116 a: *const nf_elem_struct,
117 nf: *const nf_struct,
118 );
119 pub fn _nf_elem_get_fmpz_mod_poly(
120 pol: *mut fmpz_mod_poly_struct,
121 a: *const nf_elem_struct,
122 nf: *const nf_struct,
123 ctx: *const fmpz_mod_ctx_struct,
124 );
125 pub fn nf_elem_get_fmpz_mod_poly_den(
126 pol: *mut fmpz_mod_poly_struct,
127 a: *const nf_elem_struct,
128 nf: *const nf_struct,
129 den: c_int,
130 ctx: *const fmpz_mod_ctx_struct,
131 );
132 pub fn nf_elem_get_fmpz_mod_poly(
133 pol: *mut fmpz_mod_poly_struct,
134 a: *const nf_elem_struct,
135 nf: *const nf_struct,
136 ctx: *const fmpz_mod_ctx_struct,
137 );
138 pub fn nf_elem_get_coeff_fmpq(
139 a: *mut fmpq,
140 b: *const nf_elem_struct,
141 i: mp_limb_signed_t,
142 nf: *const nf_struct,
143 );
144 pub fn nf_elem_get_coeff_fmpz(
145 a: *mut fmpz,
146 b: *const nf_elem_struct,
147 i: mp_limb_signed_t,
148 nf: *const nf_struct,
149 );
150 pub fn _nf_elem_set_coeff_num_fmpz(
151 a: *mut nf_elem_struct,
152 i: mp_limb_signed_t,
153 b: *const fmpz,
154 nf: *const nf_struct,
155 );
156 pub fn nf_elem_add_si(
157 a: *mut nf_elem_struct,
158 b: *const nf_elem_struct,
159 c: mp_limb_signed_t,
160 nf: *const nf_struct,
161 );
162 pub fn nf_elem_add_fmpz(
163 a: *mut nf_elem_struct,
164 b: *const nf_elem_struct,
165 c: *const fmpz,
166 nf: *const nf_struct,
167 );
168 pub fn nf_elem_add_fmpq(
169 a: *mut nf_elem_struct,
170 b: *const nf_elem_struct,
171 c: *const fmpq,
172 nf: *const nf_struct,
173 );
174 pub fn nf_elem_sub_si(
175 a: *mut nf_elem_struct,
176 b: *const nf_elem_struct,
177 c: mp_limb_signed_t,
178 nf: *const nf_struct,
179 );
180 pub fn nf_elem_sub_fmpz(
181 a: *mut nf_elem_struct,
182 b: *const nf_elem_struct,
183 c: *const fmpz,
184 nf: *const nf_struct,
185 );
186 pub fn nf_elem_sub_fmpq(
187 a: *mut nf_elem_struct,
188 b: *const nf_elem_struct,
189 c: *const fmpq,
190 nf: *const nf_struct,
191 );
192 pub fn nf_elem_si_sub(
193 a: *mut nf_elem_struct,
194 c: mp_limb_signed_t,
195 b: *const nf_elem_struct,
196 nf: *const nf_struct,
197 );
198 pub fn nf_elem_fmpz_sub(
199 a: *mut nf_elem_struct,
200 c: *const fmpz,
201 b: *const nf_elem_struct,
202 nf: *const nf_struct,
203 );
204 pub fn nf_elem_fmpq_sub(
205 a: *mut nf_elem_struct,
206 c: *const fmpq,
207 b: *const nf_elem_struct,
208 nf: *const nf_struct,
209 );
210 pub fn nf_elem_scalar_mul_si(
211 a: *mut nf_elem_struct,
212 b: *const nf_elem_struct,
213 c: mp_limb_signed_t,
214 nf: *const nf_struct,
215 );
216 pub fn nf_elem_scalar_mul_fmpz(
217 a: *mut nf_elem_struct,
218 b: *const nf_elem_struct,
219 c: *const fmpz,
220 nf: *const nf_struct,
221 );
222 pub fn nf_elem_scalar_mul_fmpq(
223 a: *mut nf_elem_struct,
224 b: *const nf_elem_struct,
225 c: *const fmpq,
226 nf: *const nf_struct,
227 );
228 pub fn nf_elem_scalar_div_si(
229 a: *mut nf_elem_struct,
230 b: *const nf_elem_struct,
231 c: mp_limb_signed_t,
232 nf: *const nf_struct,
233 );
234 pub fn nf_elem_scalar_div_fmpz(
235 a: *mut nf_elem_struct,
236 b: *const nf_elem_struct,
237 c: *const fmpz,
238 nf: *const nf_struct,
239 );
240 pub fn nf_elem_scalar_div_fmpq(
241 a: *mut nf_elem_struct,
242 b: *const nf_elem_struct,
243 c: *const fmpq,
244 nf: *const nf_struct,
245 );
246 pub fn _nf_elem_add_lf(
247 a: *mut nf_elem_struct,
248 b: *const nf_elem_struct,
249 c: *const nf_elem_struct,
250 nf: *const nf_struct,
251 can: c_int,
252 );
253 pub fn _nf_elem_sub_lf(
254 a: *mut nf_elem_struct,
255 b: *const nf_elem_struct,
256 c: *const nf_elem_struct,
257 nf: *const nf_struct,
258 can: c_int,
259 );
260 pub fn _nf_elem_add_qf(
261 a: *mut nf_elem_struct,
262 b: *const nf_elem_struct,
263 c: *const nf_elem_struct,
264 nf: *const nf_struct,
265 can: c_int,
266 );
267 pub fn _nf_elem_sub_qf(
268 a: *mut nf_elem_struct,
269 b: *const nf_elem_struct,
270 c: *const nf_elem_struct,
271 nf: *const nf_struct,
272 can: c_int,
273 );
274 pub fn nf_elem_add_qf(
275 a: *mut nf_elem_struct,
276 b: *const nf_elem_struct,
277 c: *const nf_elem_struct,
278 nf: *const nf_struct,
279 );
280 pub fn nf_elem_sub_qf(
281 a: *mut nf_elem_struct,
282 b: *const nf_elem_struct,
283 c: *const nf_elem_struct,
284 nf: *const nf_struct,
285 );
286 pub fn nf_elem_mul_gen(a: *mut nf_elem_struct, b: *const nf_elem_struct, nf: *const nf_struct);
287 pub fn _nf_elem_mul(
288 a: *mut nf_elem_struct,
289 b: *const nf_elem_struct,
290 c: *const nf_elem_struct,
291 nf: *const nf_struct,
292 );
293 pub fn nf_elem_mul(
294 a: *mut nf_elem_struct,
295 b: *const nf_elem_struct,
296 c: *const nf_elem_struct,
297 nf: *const nf_struct,
298 );
299 pub fn _nf_elem_mul_red(
300 a: *mut nf_elem_struct,
301 b: *const nf_elem_struct,
302 c: *const nf_elem_struct,
303 nf: *const nf_struct,
304 red: c_int,
305 );
306 pub fn nf_elem_mul_red(
307 a: *mut nf_elem_struct,
308 b: *const nf_elem_struct,
309 c: *const nf_elem_struct,
310 nf: *const nf_struct,
311 red: c_int,
312 );
313 pub fn _nf_elem_inv(a: *mut nf_elem_struct, b: *const nf_elem_struct, nf: *const nf_struct);
314 pub fn nf_elem_inv(a: *mut nf_elem_struct, b: *const nf_elem_struct, nf: *const nf_struct);
315 pub fn _nf_elem_div(
316 a: *mut nf_elem_struct,
317 b: *const nf_elem_struct,
318 c: *const nf_elem_struct,
319 nf: *const nf_struct,
320 );
321 pub fn nf_elem_div(
322 a: *mut nf_elem_struct,
323 b: *const nf_elem_struct,
324 c: *const nf_elem_struct,
325 nf: *const nf_struct,
326 );
327 pub fn _nf_elem_pow(
328 res: *mut nf_elem_struct,
329 b: *const nf_elem_struct,
330 e: mp_limb_t,
331 nf: *const nf_struct,
332 );
333 pub fn nf_elem_pow(
334 res: *mut nf_elem_struct,
335 a: *const nf_elem_struct,
336 e: mp_limb_t,
337 nf: *const nf_struct,
338 );
339 pub fn _nf_elem_norm(
340 rnum: *mut fmpz,
341 rden: *const fmpz,
342 a: *const nf_elem_struct,
343 nf: *const nf_struct,
344 );
345 pub fn nf_elem_norm(res: *mut fmpq, a: *const nf_elem_struct, nf: *const nf_struct);
346 pub fn _nf_elem_norm_div(
347 rnum: *mut fmpz,
348 rden: *const fmpz,
349 a: *const nf_elem_struct,
350 nf: *const nf_struct,
351 divisor: *const fmpz,
352 nbits: mp_limb_signed_t,
353 );
354 pub fn nf_elem_norm_div(
355 res: *mut fmpq,
356 a: *const nf_elem_struct,
357 nf: *const nf_struct,
358 divisor: *const fmpz,
359 nbits: mp_limb_signed_t,
360 );
361 pub fn _nf_elem_trace(
362 rnum: *mut fmpz,
363 rden: *mut fmpz,
364 a: *const nf_elem_struct,
365 nf: *const nf_struct,
366 );
367 pub fn nf_elem_trace(res: *mut fmpq, a: *const nf_elem_struct, nf: *const nf_struct);
368 pub fn nf_elem_rep_mat(
369 res: *mut fmpq_mat_struct,
370 a: *const nf_elem_struct,
371 nf: *const nf_struct,
372 );
373 pub fn nf_elem_rep_mat_fmpz_mat_den(
374 res: *mut fmpz_mat_struct,
375 den: *const fmpz,
376 a: *const nf_elem_struct,
377 nf: *const nf_struct,
378 );
379 pub fn _nf_elem_mod_fmpz(
380 res: *mut nf_elem_struct,
381 a: *const nf_elem_struct,
382 mod_: *const fmpz,
383 nf: *const nf_struct,
384 sign: c_int,
385 );
386 pub fn nf_elem_mod_fmpz_den(
387 res: *mut nf_elem_struct,
388 a: *const nf_elem_struct,
389 mod_: *const fmpz,
390 nf: *const nf_struct,
391 den: c_int,
392 );
393 pub fn nf_elem_smod_fmpz_den(
394 res: *mut nf_elem_struct,
395 a: *const nf_elem_struct,
396 mod_: *const fmpz,
397 nf: *const nf_struct,
398 den: c_int,
399 );
400 pub fn nf_elem_mod_fmpz(
401 res: *mut nf_elem_struct,
402 a: *const nf_elem_struct,
403 mod_: *const fmpz,
404 nf: *const nf_struct,
405 );
406 pub fn nf_elem_smod_fmpz(
407 res: *mut nf_elem_struct,
408 a: *const nf_elem_struct,
409 mod_: *const fmpz,
410 nf: *const nf_struct,
411 );
412 pub fn nf_elem_coprime_den(
413 res: *mut nf_elem_struct,
414 a: *const nf_elem_struct,
415 mod_: *const fmpz,
416 nf: *const nf_struct,
417 );
418 pub fn nf_elem_coprime_den_signed(
419 res: *mut nf_elem_struct,
420 a: *const nf_elem_struct,
421 mod_: *const fmpz,
422 nf: *const nf_struct,
423 );
424}