antic_sys/
nf_elem.rs

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}