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