flint_sys/
qadic.rs

1#![allow(non_camel_case_types)]
2
3//! *See the [FLINT documentation](http://flintlib.org/doc/qadic.html).
4
5use crate::deps::*;
6use crate::flint::*;
7use crate::fmpz::fmpz;
8use crate::fmpz_poly::fmpz_poly_struct;
9use crate::padic::{padic_ctx_struct, padic_print_mode, padic_struct};
10use crate::padic_poly::{padic_poly_struct, padic_poly_t};
11use libc::{c_char, c_int, FILE};
12
13pub type qadic_t = padic_poly_t;
14pub type qadic_struct = padic_poly_struct;
15
16#[repr(C)]
17#[derive(Debug, Copy, Clone)]
18pub struct qadic_ctx_struct {
19    pub pctx: padic_ctx_struct,
20    pub a: *mut fmpz,
21    pub j: *mut mp_limb_signed_t,
22    pub len: mp_limb_signed_t,
23    pub var: *mut c_char,
24}
25
26pub type qadic_ctx_t = [qadic_ctx_struct; 1usize];
27
28extern "C" {
29    pub fn qadic_val(op: *const padic_poly_struct) -> mp_limb_signed_t;
30    pub fn qadic_prec(op: *const padic_poly_struct) -> mp_limb_signed_t;
31    pub fn qadic_ctx_init_conway(
32        ctx: *mut qadic_ctx_struct,
33        p: *const fmpz,
34        d: mp_limb_signed_t,
35        min: mp_limb_signed_t,
36        max: mp_limb_signed_t,
37        var: *const c_char,
38        mode: padic_print_mode,
39    );
40    pub fn qadic_ctx_init(
41        ctx: *mut qadic_ctx_struct,
42        p: *const fmpz,
43        d: mp_limb_signed_t,
44        min: mp_limb_signed_t,
45        max: mp_limb_signed_t,
46        var: *const c_char,
47        mode: padic_print_mode,
48    );
49    pub fn qadic_ctx_clear(ctx: *mut qadic_ctx_struct);
50    pub fn qadic_ctx_degree(ctx: *const qadic_ctx_struct) -> mp_limb_signed_t;
51    pub fn qadic_ctx_print(ctx: *const qadic_ctx_struct);
52    pub fn qadic_init(x: *mut padic_poly_struct);
53    pub fn qadic_init2(rop: *mut padic_poly_struct, prec: mp_limb_signed_t);
54    pub fn qadic_clear(x: *mut padic_poly_struct);
55    pub fn _fmpz_poly_reduce(
56        R: *mut fmpz,
57        lenR: mp_limb_signed_t,
58        a: *const fmpz,
59        j: *const mp_limb_signed_t,
60        len: mp_limb_signed_t,
61    );
62    pub fn _fmpz_mod_poly_reduce(
63        R: *mut fmpz,
64        lenR: mp_limb_signed_t,
65        a: *const fmpz,
66        j: *const mp_limb_signed_t,
67        len: mp_limb_signed_t,
68        p: *mut fmpz,
69    );
70    pub fn qadic_reduce(x: *mut padic_poly_struct, ctx: *const qadic_ctx_struct);
71    pub fn qadic_randtest(
72        x: *mut padic_poly_struct,
73        state: *const flint_rand_s,
74        ctx: *const qadic_ctx_struct,
75    );
76    pub fn qadic_randtest_not_zero(
77        x: *mut padic_poly_struct,
78        state: *const flint_rand_s,
79        ctx: *const qadic_ctx_struct,
80    );
81    pub fn qadic_randtest_val(
82        x: *mut padic_poly_struct,
83        state: *const flint_rand_s,
84        val: mp_limb_signed_t,
85        ctx: *const qadic_ctx_struct,
86    );
87    pub fn qadic_randtest_int(
88        x: *mut padic_poly_struct,
89        state: *const flint_rand_s,
90        ctx: *const qadic_ctx_struct,
91    );
92    pub fn qadic_zero(op: *mut padic_poly_struct);
93    pub fn qadic_one(op: *mut padic_poly_struct);
94    pub fn qadic_gen(x: *mut padic_poly_struct, ctx: *const qadic_ctx_struct);
95    pub fn qadic_set_ui(rop: *mut padic_poly_struct, op: mp_limb_t, ctx: *const qadic_ctx_struct);
96    pub fn qadic_get_padic(
97        rop: *mut padic_struct,
98        op: *const padic_poly_struct,
99        ctx: *const qadic_ctx_struct,
100    ) -> c_int;
101    pub fn qadic_set(
102        rop: *mut padic_poly_struct,
103        op: *const padic_poly_struct,
104        ctx: *const qadic_ctx_struct,
105    );
106    pub fn qadic_set_fmpz_poly(
107        rop: *mut padic_poly_struct,
108        op: *const fmpz_poly_struct,
109        ctx: *const qadic_ctx_struct,
110    );
111    pub fn qadic_is_zero(op: *const padic_poly_struct) -> c_int;
112    pub fn qadic_is_one(op: *const padic_poly_struct) -> c_int;
113    pub fn qadic_equal(op1: *const padic_poly_struct, op2: *const padic_poly_struct) -> c_int;
114    pub fn qadic_add(
115        x: *mut padic_poly_struct,
116        y: *const padic_poly_struct,
117        z: *const padic_poly_struct,
118        ctx: *const qadic_ctx_struct,
119    );
120    pub fn qadic_sub(
121        x: *mut padic_poly_struct,
122        y: *const padic_poly_struct,
123        z: *const padic_poly_struct,
124        ctx: *const qadic_ctx_struct,
125    );
126    pub fn qadic_neg(
127        x: *mut padic_poly_struct,
128        y: *const padic_poly_struct,
129        ctx: *const qadic_ctx_struct,
130    );
131    pub fn qadic_mul(
132        x: *mut padic_poly_struct,
133        y: *const padic_poly_struct,
134        z: *const padic_poly_struct,
135        ctx: *const qadic_ctx_struct,
136    );
137    pub fn _qadic_inv(
138        rop: *mut fmpz,
139        op: *const fmpz,
140        len: mp_limb_signed_t,
141        a: *const fmpz,
142        j: *const mp_limb_signed_t,
143        lena: mp_limb_signed_t,
144        p: *const fmpz,
145        N: mp_limb_signed_t,
146    );
147    pub fn qadic_inv(
148        x: *mut padic_poly_struct,
149        y: *const padic_poly_struct,
150        ctx: *const qadic_ctx_struct,
151    );
152    pub fn _qadic_pow(
153        rop: *mut fmpz,
154        op: *const fmpz,
155        len: mp_limb_signed_t,
156        e: *const fmpz,
157        a: *const fmpz,
158        j: *const mp_limb_signed_t,
159        lena: mp_limb_signed_t,
160        p: *const fmpz,
161    );
162    pub fn qadic_pow(
163        x: *mut padic_poly_struct,
164        y: *const padic_poly_struct,
165        e: *const fmpz,
166        ctx: *const qadic_ctx_struct,
167    );
168    pub fn _qadic_exp_rectangular(
169        rop: *mut fmpz,
170        op: *const fmpz,
171        v: mp_limb_signed_t,
172        len: mp_limb_signed_t,
173        a: *const fmpz,
174        j: *const mp_limb_signed_t,
175        lena: mp_limb_signed_t,
176        p: *const fmpz,
177        N: mp_limb_signed_t,
178        pN: *mut fmpz,
179    );
180    pub fn qadic_exp_rectangular(
181        rop: *mut padic_poly_struct,
182        op: *const padic_poly_struct,
183        ctx: *const qadic_ctx_struct,
184    ) -> c_int;
185    pub fn _qadic_exp_balanced(
186        rop: *mut fmpz,
187        op: *const fmpz,
188        v: mp_limb_signed_t,
189        len: mp_limb_signed_t,
190        a: *const fmpz,
191        j: *const mp_limb_signed_t,
192        lena: mp_limb_signed_t,
193        p: *const fmpz,
194        N: mp_limb_signed_t,
195        pN: *const fmpz,
196    );
197    pub fn qadic_exp_balanced(
198        rop: *mut padic_poly_struct,
199        op: *const padic_poly_struct,
200        ctx: *const qadic_ctx_struct,
201    ) -> c_int;
202    pub fn _qadic_exp(
203        rop: *mut fmpz,
204        op: *const fmpz,
205        v: mp_limb_signed_t,
206        len: mp_limb_signed_t,
207        a: *const fmpz,
208        j: *const mp_limb_signed_t,
209        lena: mp_limb_signed_t,
210        p: *const fmpz,
211        N: mp_limb_signed_t,
212        pN: *const fmpz,
213    );
214    pub fn qadic_exp(
215        rop: *mut padic_poly_struct,
216        op: *const padic_poly_struct,
217        ctx: *const qadic_ctx_struct,
218    ) -> c_int;
219    pub fn _qadic_log_rectangular(
220        z: *mut fmpz,
221        y: *const fmpz,
222        v: mp_limb_signed_t,
223        len: mp_limb_signed_t,
224        a: *const fmpz,
225        j: *const mp_limb_signed_t,
226        lena: mp_limb_signed_t,
227        p: *const fmpz,
228        N: mp_limb_signed_t,
229        pN: *const fmpz,
230    );
231    pub fn qadic_log_rectangular(
232        rop: *mut padic_poly_struct,
233        op: *const padic_poly_struct,
234        ctx: *const qadic_ctx_struct,
235    ) -> c_int;
236    pub fn _qadic_log_balanced(
237        z: *mut fmpz,
238        y: *const fmpz,
239        len: mp_limb_signed_t,
240        a: *const fmpz,
241        j: *const mp_limb_signed_t,
242        lena: mp_limb_signed_t,
243        p: *const fmpz,
244        N: mp_limb_signed_t,
245        pN: *const fmpz,
246    );
247    pub fn qadic_log_balanced(
248        rop: *mut padic_poly_struct,
249        op: *const padic_poly_struct,
250        ctx: *const qadic_ctx_struct,
251    ) -> c_int;
252    pub fn _qadic_log(
253        z: *mut fmpz,
254        y: *const fmpz,
255        v: mp_limb_signed_t,
256        len: mp_limb_signed_t,
257        a: *const fmpz,
258        j: *const mp_limb_signed_t,
259        lena: mp_limb_signed_t,
260        p: *const fmpz,
261        N: mp_limb_signed_t,
262        pN: *const fmpz,
263    );
264    pub fn qadic_log(
265        rop: *mut padic_poly_struct,
266        op: *const padic_poly_struct,
267        ctx: *const qadic_ctx_struct,
268    ) -> c_int;
269    pub fn _qadic_frobenius_a(
270        rop: *mut fmpz,
271        exp: mp_limb_signed_t,
272        a: *const fmpz,
273        j: *const mp_limb_signed_t,
274        lena: mp_limb_signed_t,
275        p: *const fmpz,
276        N: mp_limb_signed_t,
277    );
278    pub fn _qadic_frobenius(
279        rop: *mut fmpz,
280        op: *const fmpz,
281        len: mp_limb_signed_t,
282        e: mp_limb_signed_t,
283        a: *const fmpz,
284        j: *const mp_limb_signed_t,
285        lena: mp_limb_signed_t,
286        p: *const fmpz,
287        N: mp_limb_signed_t,
288    );
289    pub fn qadic_frobenius(
290        rop: *mut padic_poly_struct,
291        op: *const padic_poly_struct,
292        e: mp_limb_signed_t,
293        ctx: *const qadic_ctx_struct,
294    );
295    pub fn _qadic_teichmuller(
296        rop: *mut fmpz,
297        op: *const fmpz,
298        len: mp_limb_signed_t,
299        a: *const fmpz,
300        j: *const mp_limb_signed_t,
301        lena: mp_limb_signed_t,
302        p: *const fmpz,
303        N: mp_limb_signed_t,
304    );
305    pub fn qadic_teichmuller(
306        rop: *mut padic_poly_struct,
307        op: *const padic_poly_struct,
308        ctx: *const qadic_ctx_struct,
309    );
310    pub fn _qadic_trace(
311        rop: *mut fmpz,
312        op: *const fmpz,
313        len: mp_limb_signed_t,
314        a: *const fmpz,
315        j: *const mp_limb_signed_t,
316        lena: mp_limb_signed_t,
317        pN: *const fmpz,
318    );
319    pub fn qadic_trace(
320        rop: *mut padic_struct,
321        op: *const padic_poly_struct,
322        ctx: *const qadic_ctx_struct,
323    );
324    pub fn _qadic_norm_resultant(
325        rop: *mut fmpz,
326        op: *const fmpz,
327        len: mp_limb_signed_t,
328        a: *const fmpz,
329        j: *const mp_limb_signed_t,
330        lena: mp_limb_signed_t,
331        p: *const fmpz,
332        N: mp_limb_signed_t,
333    );
334    pub fn _qadic_norm_analytic(
335        rop: *mut fmpz,
336        y: *const fmpz,
337        v: mp_limb_signed_t,
338        len: mp_limb_signed_t,
339        a: *const fmpz,
340        j: *const mp_limb_signed_t,
341        lena: mp_limb_signed_t,
342        p: *const fmpz,
343        N: mp_limb_signed_t,
344    );
345    pub fn _qadic_norm(
346        rop: *mut fmpz,
347        op: *const fmpz,
348        len: mp_limb_signed_t,
349        a: *const fmpz,
350        j: *const mp_limb_signed_t,
351        lena: mp_limb_signed_t,
352        p: *const fmpz,
353        N: mp_limb_signed_t,
354    );
355    pub fn qadic_norm(
356        rop: *mut padic_struct,
357        op: *const padic_poly_struct,
358        ctx: *const qadic_ctx_struct,
359    );
360    pub fn qadic_norm_analytic(
361        rop: *mut padic_struct,
362        op: *const padic_poly_struct,
363        ctx: *const qadic_ctx_struct,
364    );
365    pub fn qadic_norm_resultant(
366        rop: *mut padic_struct,
367        op: *const padic_poly_struct,
368        ctx: *const qadic_ctx_struct,
369    );
370    pub fn qadic_sqrt(
371        rop: *mut padic_poly_struct,
372        op: *const padic_poly_struct,
373        ctx: *const qadic_ctx_struct,
374    ) -> c_int;
375    pub fn qadic_fprint_pretty(
376        file: *mut FILE,
377        op: *const padic_poly_struct,
378        ctx: *const qadic_ctx_struct,
379    ) -> c_int;
380    pub fn qadic_print_pretty(op: *mut padic_poly_struct, ctx: *const qadic_ctx_struct) -> c_int;
381    pub fn qadic_debug(op: *const padic_poly_struct) -> c_int;
382}