1#![allow(non_snake_case)]
2#![allow(non_camel_case_types)]
3
4use 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}