flint_sys/
padic_poly.rs

1#![allow(non_snake_case)]
2#![allow(non_camel_case_types)]
3
4//! *See the [FLINT documentation](http://flintlib.org/doc/padic_poly.html).
5
6use crate::deps::*;
7use crate::flint::*;
8use crate::fmpq::fmpq;
9use crate::fmpq_poly::fmpq_poly_struct;
10use crate::fmpz::fmpz;
11use crate::fmpz_poly::fmpz_poly_struct;
12use crate::padic::{padic_ctx_struct, padic_struct};
13use libc::{c_char, c_int, FILE};
14
15#[repr(C)]
16#[derive(Debug, Copy, Clone)]
17pub struct padic_poly_struct {
18    pub coeffs: *mut fmpz,
19    pub alloc: mp_limb_signed_t,
20    pub length: mp_limb_signed_t,
21    pub val: mp_limb_signed_t,
22    pub N: mp_limb_signed_t,
23}
24
25pub type padic_poly_t = [padic_poly_struct; 1usize];
26
27extern "C" {
28    pub fn _fmpz_vec_ord_p(
29        vec: *const fmpz,
30        len: mp_limb_signed_t,
31        p: *mut fmpz,
32    ) -> mp_limb_signed_t;
33    pub fn padic_poly_init(poly: *mut padic_poly_struct);
34    pub fn padic_poly_init2(
35        poly: *mut padic_poly_struct,
36        alloc: mp_limb_signed_t,
37        prec: mp_limb_signed_t,
38    );
39    pub fn padic_poly_clear(poly: *mut padic_poly_struct);
40    pub fn padic_poly_realloc(f: *mut padic_poly_struct, alloc: mp_limb_signed_t, p: *mut fmpz);
41    pub fn padic_poly_fit_length(f: *mut padic_poly_struct, len: mp_limb_signed_t);
42    pub fn _padic_poly_set_length(poly: *mut padic_poly_struct, len: mp_limb_signed_t);
43    pub fn _padic_poly_normalise(f: *mut padic_poly_struct);
44    pub fn _padic_poly_canonicalise(
45        poly: *mut fmpz,
46        v: *mut mp_limb_signed_t,
47        len: mp_limb_signed_t,
48        p: *mut fmpz,
49    );
50    pub fn padic_poly_canonicalise(poly: *mut padic_poly_struct, p: *mut fmpz);
51    pub fn padic_poly_reduce(f: *mut padic_poly_struct, ctx: *mut padic_ctx_struct);
52    pub fn padic_poly_truncate(poly: *mut padic_poly_struct, n: mp_limb_signed_t, p: *mut fmpz);
53    pub fn padic_poly_degree(poly: *mut padic_poly_struct) -> mp_limb_signed_t;
54    pub fn padic_poly_length(poly: *mut padic_poly_struct) -> mp_limb_signed_t;
55    pub fn padic_poly_val(poly: *mut padic_poly_struct) -> mp_limb_signed_t;
56    pub fn padic_poly_randtest(
57        f: *mut padic_poly_struct,
58        state: *mut flint_rand_s,
59        len: mp_limb_signed_t,
60        ctx: *mut padic_ctx_struct,
61    );
62    pub fn padic_poly_randtest_not_zero(
63        f: *mut padic_poly_struct,
64        state: *mut flint_rand_s,
65        len: mp_limb_signed_t,
66        ctx: *mut padic_ctx_struct,
67    );
68    pub fn padic_poly_randtest_val(
69        f: *mut padic_poly_struct,
70        state: *mut flint_rand_s,
71        val: mp_limb_signed_t,
72        len: mp_limb_signed_t,
73        ctx: *mut padic_ctx_struct,
74    );
75    pub fn padic_poly_set(
76        f: *mut padic_poly_struct,
77        g: *mut padic_poly_struct,
78        ctx: *mut padic_ctx_struct,
79    );
80    pub fn padic_poly_set_padic(
81        poly: *mut padic_poly_struct,
82        x: *mut padic_struct,
83        ctx: *mut padic_ctx_struct,
84    );
85    pub fn padic_poly_set_si(
86        poly: *mut padic_poly_struct,
87        x: mp_limb_signed_t,
88        ctx: *mut padic_ctx_struct,
89    );
90    pub fn padic_poly_set_ui(
91        poly: *mut padic_poly_struct,
92        x: mp_limb_t,
93        ctx: *mut padic_ctx_struct,
94    );
95    pub fn padic_poly_set_fmpz(
96        poly: *mut padic_poly_struct,
97        x: *mut fmpz,
98        ctx: *mut padic_ctx_struct,
99    );
100    pub fn padic_poly_set_fmpq(
101        poly: *mut padic_poly_struct,
102        x: *mut fmpq,
103        ctx: *mut padic_ctx_struct,
104    );
105    pub fn padic_poly_set_fmpz_poly(
106        rop: *mut padic_poly_struct,
107        op: *mut fmpz_poly_struct,
108        ctx: *mut padic_ctx_struct,
109    );
110    pub fn padic_poly_set_fmpq_poly(
111        rop: *mut padic_poly_struct,
112        op: *mut fmpq_poly_struct,
113        ctx: *mut padic_ctx_struct,
114    );
115    pub fn padic_poly_get_fmpz_poly(
116        rop: *mut fmpz_poly_struct,
117        op: *mut padic_poly_struct,
118        ctx: *mut padic_ctx_struct,
119    ) -> c_int;
120    pub fn padic_poly_get_fmpq_poly(
121        rop: *mut fmpq_poly_struct,
122        op: *mut padic_poly_struct,
123        ctx: *mut padic_ctx_struct,
124    );
125    pub fn padic_poly_zero(poly: *mut padic_poly_struct);
126    pub fn padic_poly_one(poly: *mut padic_poly_struct);
127    pub fn padic_poly_swap(poly1: *mut padic_poly_struct, poly2: *mut padic_poly_struct);
128    pub fn padic_poly_get_coeff_padic(
129        c: *mut padic_struct,
130        poly: *mut padic_poly_struct,
131        n: mp_limb_signed_t,
132        ctx: *mut padic_ctx_struct,
133    );
134    pub fn padic_poly_set_coeff_padic(
135        f: *mut padic_poly_struct,
136        n: mp_limb_signed_t,
137        c: *mut padic_struct,
138        ctx: *mut padic_ctx_struct,
139    );
140    pub fn padic_poly_equal(f: *mut padic_poly_struct, g: *mut padic_poly_struct) -> c_int;
141    pub fn padic_poly_is_zero(poly: *mut padic_poly_struct) -> c_int;
142    pub fn padic_poly_is_one(poly: *mut padic_poly_struct) -> c_int;
143    pub fn _padic_poly_add(
144        rop: *mut fmpz,
145        rval: *mut mp_limb_signed_t,
146        N: mp_limb_signed_t,
147        op1: *const fmpz,
148        val1: mp_limb_signed_t,
149        len1: mp_limb_signed_t,
150        N1: mp_limb_signed_t,
151        op2: *const fmpz,
152        val2: mp_limb_signed_t,
153        len2: mp_limb_signed_t,
154        N2: mp_limb_signed_t,
155        ctx: *mut padic_ctx_struct,
156    );
157    pub fn padic_poly_add(
158        f: *mut padic_poly_struct,
159        g: *mut padic_poly_struct,
160        h: *mut padic_poly_struct,
161        ctx: *mut padic_ctx_struct,
162    );
163    pub fn _padic_poly_sub(
164        rop: *mut fmpz,
165        rval: *mut mp_limb_signed_t,
166        N: mp_limb_signed_t,
167        op1: *const fmpz,
168        val1: mp_limb_signed_t,
169        len1: mp_limb_signed_t,
170        N1: mp_limb_signed_t,
171        op2: *const fmpz,
172        val2: mp_limb_signed_t,
173        len2: mp_limb_signed_t,
174        N2: mp_limb_signed_t,
175        ctx: *mut padic_ctx_struct,
176    );
177    pub fn padic_poly_sub(
178        f: *mut padic_poly_struct,
179        g: *mut padic_poly_struct,
180        h: *mut padic_poly_struct,
181        ctx: *mut padic_ctx_struct,
182    );
183    pub fn padic_poly_neg(
184        f: *mut padic_poly_struct,
185        g: *mut padic_poly_struct,
186        ctx: *mut padic_ctx_struct,
187    );
188    pub fn _padic_poly_scalar_mul_padic(
189        rop: *mut fmpz,
190        rval: *mut mp_limb_signed_t,
191        N: mp_limb_signed_t,
192        op: *const fmpz,
193        val: mp_limb_signed_t,
194        len: mp_limb_signed_t,
195        c: *mut padic_struct,
196        ctx: *mut padic_ctx_struct,
197    );
198    pub fn padic_poly_scalar_mul_padic(
199        rop: *mut padic_poly_struct,
200        op: *mut padic_poly_struct,
201        c: *mut padic_struct,
202        ctx: *mut padic_ctx_struct,
203    );
204    pub fn _padic_poly_mul(
205        rop: *mut fmpz,
206        rval: *mut mp_limb_signed_t,
207        N: mp_limb_signed_t,
208        op1: *const fmpz,
209        val1: mp_limb_signed_t,
210        len1: mp_limb_signed_t,
211        op2: *const fmpz,
212        val2: mp_limb_signed_t,
213        len2: mp_limb_signed_t,
214        ctx: *mut padic_ctx_struct,
215    );
216    pub fn padic_poly_mul(
217        f: *mut padic_poly_struct,
218        g: *mut padic_poly_struct,
219        h: *mut padic_poly_struct,
220        ctx: *mut padic_ctx_struct,
221    );
222    pub fn _padic_poly_pow(
223        rop: *mut fmpz,
224        rval: *mut mp_limb_signed_t,
225        N: mp_limb_signed_t,
226        op: *const fmpz,
227        val: mp_limb_signed_t,
228        len: mp_limb_signed_t,
229        e: mp_limb_t,
230        ctx: *mut padic_ctx_struct,
231    );
232    pub fn padic_poly_pow(
233        rop: *mut padic_poly_struct,
234        op: *mut padic_poly_struct,
235        e: mp_limb_t,
236        ctx: *mut padic_ctx_struct,
237    );
238    pub fn padic_poly_inv_series(
239        Qinv: *mut padic_poly_struct,
240        Q: *mut padic_poly_struct,
241        n: mp_limb_signed_t,
242        ctx: *mut padic_ctx_struct,
243    );
244    pub fn _padic_poly_derivative(
245        rop: *mut fmpz,
246        rval: *mut mp_limb_signed_t,
247        N: mp_limb_signed_t,
248        op: *const fmpz,
249        val: mp_limb_signed_t,
250        len: mp_limb_signed_t,
251        ctx: *mut padic_ctx_struct,
252    );
253    pub fn padic_poly_derivative(
254        rop: *mut padic_poly_struct,
255        op: *mut padic_poly_struct,
256        ctx: *mut padic_ctx_struct,
257    );
258    pub fn padic_poly_shift_left(
259        rop: *mut padic_poly_struct,
260        op: *mut padic_poly_struct,
261        n: mp_limb_signed_t,
262        ctx: *mut padic_ctx_struct,
263    );
264    pub fn padic_poly_shift_right(
265        rop: *mut padic_poly_struct,
266        op: *mut padic_poly_struct,
267        n: mp_limb_signed_t,
268        ctx: *mut padic_ctx_struct,
269    );
270    pub fn _padic_poly_evaluate_padic(
271        u: *mut fmpz,
272        v: *mut mp_limb_signed_t,
273        N: mp_limb_signed_t,
274        poly: *const fmpz,
275        val: mp_limb_signed_t,
276        len: mp_limb_signed_t,
277        a: *mut fmpz,
278        b: mp_limb_signed_t,
279        ctx: *mut padic_ctx_struct,
280    );
281    pub fn padic_poly_evaluate_padic(
282        y: *mut padic_struct,
283        poly: *mut padic_poly_struct,
284        x: *mut padic_struct,
285        ctx: *mut padic_ctx_struct,
286    );
287    pub fn _padic_poly_compose(
288        rop: *mut fmpz,
289        rval: *mut mp_limb_signed_t,
290        N: mp_limb_signed_t,
291        op1: *const fmpz,
292        val1: mp_limb_signed_t,
293        len1: mp_limb_signed_t,
294        op2: *const fmpz,
295        val2: mp_limb_signed_t,
296        len2: mp_limb_signed_t,
297        ctx: *mut padic_ctx_struct,
298    );
299    pub fn padic_poly_compose(
300        rop: *mut padic_poly_struct,
301        op1: *mut padic_poly_struct,
302        op2: *mut padic_poly_struct,
303        ctx: *mut padic_ctx_struct,
304    );
305    pub fn _padic_poly_compose_pow(
306        rop: *mut fmpz,
307        rval: *mut mp_limb_signed_t,
308        N: mp_limb_signed_t,
309        op: *const fmpz,
310        val: mp_limb_signed_t,
311        len: mp_limb_signed_t,
312        k: mp_limb_signed_t,
313        ctx: *mut padic_ctx_struct,
314    );
315    pub fn padic_poly_compose_pow(
316        rop: *mut padic_poly_struct,
317        op: *mut padic_poly_struct,
318        k: mp_limb_signed_t,
319        ctx: *mut padic_ctx_struct,
320    );
321    pub fn padic_poly_debug(poly: *mut padic_poly_struct) -> c_int;
322    pub fn _padic_poly_fprint(
323        file: *mut FILE,
324        poly: *const fmpz,
325        val: mp_limb_signed_t,
326        len: mp_limb_signed_t,
327        ctx: *mut padic_ctx_struct,
328    ) -> c_int;
329    pub fn padic_poly_fprint(
330        file: *mut FILE,
331        poly: *mut padic_poly_struct,
332        ctx: *mut padic_ctx_struct,
333    ) -> c_int;
334    pub fn _padic_poly_print(
335        poly: *const fmpz,
336        val: mp_limb_signed_t,
337        len: mp_limb_signed_t,
338        ctx: *mut padic_ctx_struct,
339    ) -> c_int;
340    pub fn padic_poly_print(poly: *mut padic_poly_struct, ctx: *mut padic_ctx_struct) -> c_int;
341    pub fn _padic_poly_fprint_pretty(
342        file: *mut FILE,
343        poly: *const fmpz,
344        val: mp_limb_signed_t,
345        len: mp_limb_signed_t,
346        var: *const c_char,
347        ctx: *mut padic_ctx_struct,
348    ) -> c_int;
349    pub fn padic_poly_fprint_pretty(
350        file: *mut FILE,
351        poly: *mut padic_poly_struct,
352        var: *const c_char,
353        ctx: *mut padic_ctx_struct,
354    ) -> c_int;
355    pub fn _padic_poly_print_pretty(
356        file: *mut FILE,
357        poly: *const fmpz,
358        val: mp_limb_signed_t,
359        len: mp_limb_signed_t,
360        var: *const c_char,
361        ctx: *mut padic_ctx_struct,
362    ) -> c_int;
363    pub fn padic_poly_print_pretty(
364        poly: *mut padic_poly_struct,
365        var: *const c_char,
366        ctx: *mut padic_ctx_struct,
367    ) -> c_int;
368    pub fn _padic_poly_is_canonical(
369        op: *const fmpz,
370        val: mp_limb_signed_t,
371        len: mp_limb_signed_t,
372        ctx: *mut padic_ctx_struct,
373    ) -> c_int;
374    pub fn padic_poly_is_canonical(op: *mut padic_poly_struct, ctx: *mut padic_ctx_struct)
375        -> c_int;
376    pub fn _padic_poly_is_reduced(
377        op: *const fmpz,
378        val: mp_limb_signed_t,
379        len: mp_limb_signed_t,
380        N: mp_limb_signed_t,
381        ctx: *mut padic_ctx_struct,
382    ) -> c_int;
383    pub fn padic_poly_is_reduced(op: *mut padic_poly_struct, ctx: *mut padic_ctx_struct) -> c_int;
384}