arb_sys/
acb_dft.rs

1#![allow(non_camel_case_types)]
2#![allow(non_snake_case)]
3
4//! *See the [Arb documentation](https://arblib.org/).
5
6use crate::acb::{acb_ptr, acb_srcptr};
7use flint_sys::deps::*;
8use flint_sys::nmod_vec::nmod_t;
9use flint_sys::ulong_extras::n_factor_t;
10use libc::c_int;
11
12#[repr(C)]
13#[derive(Debug, Copy, Clone)]
14pub struct crt_struct {
15    pub num: ::std::os::raw::c_int,
16    pub n: nmod_t,
17    pub m: [mp_limb_signed_t; 15usize],
18    pub M: [mp_limb_t; 15usize],
19    pub vM: [mp_limb_t; 15usize],
20}
21pub type crt_t = [crt_struct; 1usize];
22
23pub type acb_dft_step_ptr = *mut acb_dft_step_struct;
24
25#[repr(C)]
26#[derive(Debug, Copy, Clone)]
27pub struct acb_dft_cyc_struct {
28    pub n: mp_limb_signed_t,
29    pub z: acb_ptr,
30    pub zclear: ::std::os::raw::c_int,
31    pub num: mp_limb_signed_t,
32    pub cyc: acb_dft_step_ptr,
33}
34
35pub type acb_dft_cyc_t = [acb_dft_cyc_struct; 1usize];
36
37#[repr(C)]
38#[derive(Debug, Copy, Clone)]
39pub struct acb_dft_rad2_struct {
40    pub e: ::std::os::raw::c_int,
41    pub n: mp_limb_signed_t,
42    pub dv: mp_limb_signed_t,
43    pub nz: mp_limb_signed_t,
44    pub z: acb_ptr,
45}
46
47pub type acb_dft_rad2_t = [acb_dft_rad2_struct; 1usize];
48
49#[repr(C)]
50#[derive(Debug, Copy, Clone)]
51pub struct acb_dft_bluestein_struct {
52    pub n: mp_limb_signed_t,
53    pub dv: mp_limb_signed_t,
54    pub z: acb_ptr,
55    pub g: acb_ptr,
56    pub rad2: acb_dft_rad2_t,
57}
58
59pub type acb_dft_bluestein_t = [acb_dft_bluestein_struct; 1usize];
60
61#[repr(C)]
62#[derive(Debug, Copy, Clone)]
63pub struct acb_dft_prod_struct {
64    pub n: mp_limb_signed_t,
65    pub num: mp_limb_signed_t,
66    pub cyc: acb_dft_step_ptr,
67}
68
69pub type acb_dft_prod_t = [acb_dft_prod_struct; 1usize];
70
71#[repr(C)]
72#[derive(Debug, Copy, Clone)]
73pub struct acb_dft_crt_struct {
74    pub n: mp_limb_signed_t,
75    pub c: crt_t,
76    pub dv: mp_limb_signed_t,
77    pub cyc: acb_dft_step_ptr,
78}
79
80pub type acb_dft_crt_t = [acb_dft_crt_struct; 1usize];
81
82#[repr(C)]
83#[derive(Debug, Copy, Clone)]
84pub struct acb_dft_naive_struct {
85    pub n: mp_limb_signed_t,
86    pub dv: mp_limb_signed_t,
87    pub zclear: ::std::os::raw::c_int,
88    pub z: acb_ptr,
89    pub dz: mp_limb_signed_t,
90}
91
92pub type acb_dft_naive_t = [acb_dft_naive_struct; 1usize];
93
94#[repr(C)]
95#[derive(Copy, Clone)]
96pub struct acb_dft_pre_struct {
97    pub n: mp_limb_signed_t,
98    pub type_: ::std::os::raw::c_int,
99    pub t: acb_dft_pre_struct__bindgen_ty_1,
100}
101
102#[repr(C)]
103#[derive(Copy, Clone)]
104pub union acb_dft_pre_struct__bindgen_ty_1 {
105    pub rad2: acb_dft_rad2_t,
106    pub cyc: acb_dft_cyc_t,
107    pub prod: acb_dft_prod_t,
108    pub crt: acb_dft_crt_t,
109    pub naive: acb_dft_naive_t,
110    pub bluestein: acb_dft_bluestein_t,
111}
112
113pub type acb_dft_pre_t = [acb_dft_pre_struct; 1usize];
114
115#[repr(C)]
116#[derive(Copy, Clone)]
117pub struct acb_dft_step_struct {
118    pub m: mp_limb_signed_t,
119    pub M: mp_limb_signed_t,
120    pub dv: mp_limb_signed_t,
121    pub z: acb_srcptr,
122    pub dz: mp_limb_signed_t,
123    pub pre: acb_dft_pre_t,
124}
125
126pub const DFT_NAIVE: ::std::os::raw::c_uint = 0;
127pub const DFT_CYC: ::std::os::raw::c_uint = 1;
128pub const DFT_PROD: ::std::os::raw::c_uint = 2;
129pub const DFT_CRT: ::std::os::raw::c_uint = 3;
130pub const DFT_RAD2: ::std::os::raw::c_uint = 4;
131pub const DFT_CONV: ::std::os::raw::c_uint = 5;
132pub type _bindgen_ty_23 = ::std::os::raw::c_uint;
133
134extern "C" {
135    pub fn _acb_dft_naive(
136        w: acb_ptr,
137        v: acb_srcptr,
138        dv: mp_limb_signed_t,
139        z: acb_srcptr,
140        dz: mp_limb_signed_t,
141        len: mp_limb_signed_t,
142        prec: mp_limb_signed_t,
143    );
144    pub fn acb_dft_naive(w: acb_ptr, v: acb_srcptr, len: mp_limb_signed_t, prec: mp_limb_signed_t);
145    pub fn acb_dft_crt(w: acb_ptr, v: acb_srcptr, len: mp_limb_signed_t, prec: mp_limb_signed_t);
146    pub fn acb_dft_cyc(w: acb_ptr, v: acb_srcptr, len: mp_limb_signed_t, prec: mp_limb_signed_t);
147    pub fn acb_dft_rad2_inplace(v: acb_ptr, e: c_int, prec: mp_limb_signed_t);
148    pub fn acb_dft_rad2(w: acb_ptr, v: acb_srcptr, e: c_int, prec: mp_limb_signed_t);
149    pub fn acb_dft_bluestein(
150        w: acb_ptr,
151        v: acb_srcptr,
152        len: mp_limb_signed_t,
153        prec: mp_limb_signed_t,
154    );
155    pub fn acb_dft_prod(
156        w: acb_ptr,
157        v: acb_srcptr,
158        cyc: *mut mp_limb_signed_t,
159        num: mp_limb_signed_t,
160        prec: mp_limb_signed_t,
161    );
162    pub fn acb_dft_rad2_inplace_threaded(v: acb_ptr, e: c_int, prec: mp_limb_signed_t);
163    pub fn acb_dft_convol_naive(
164        w: acb_ptr,
165        f: acb_srcptr,
166        g: acb_srcptr,
167        len: mp_limb_signed_t,
168        prec: mp_limb_signed_t,
169    );
170    pub fn acb_dft_convol_dft(
171        w: acb_ptr,
172        f: acb_srcptr,
173        g: acb_srcptr,
174        len: mp_limb_signed_t,
175        prec: mp_limb_signed_t,
176    );
177    pub fn acb_dft_convol_rad2(
178        w: acb_ptr,
179        f: acb_srcptr,
180        g: acb_srcptr,
181        len: mp_limb_signed_t,
182        prec: mp_limb_signed_t,
183    );
184    pub fn acb_dft_convol_mullow(
185        w: acb_ptr,
186        f: acb_srcptr,
187        g: acb_srcptr,
188        len: mp_limb_signed_t,
189        prec: mp_limb_signed_t,
190    );
191    pub fn acb_dft_convol(
192        w: acb_ptr,
193        f: acb_srcptr,
194        g: acb_srcptr,
195        len: mp_limb_signed_t,
196        prec: mp_limb_signed_t,
197    );
198    pub fn crt_init(c: *mut crt_struct, n: mp_limb_t);
199    pub fn crt_decomp(
200        y: acb_ptr,
201        x: acb_srcptr,
202        dx: mp_limb_signed_t,
203        c: *mut crt_struct,
204        len: mp_limb_t,
205    );
206    pub fn crt_recomp(y: acb_ptr, x: acb_srcptr, c: *mut crt_struct, len: mp_limb_t);
207    pub fn acb_dft_step(
208        w: acb_ptr,
209        v: acb_srcptr,
210        cyc: acb_dft_step_ptr,
211        num: mp_limb_signed_t,
212        prec: mp_limb_signed_t,
213    );
214    pub fn acb_dft_precomp(
215        w: acb_ptr,
216        v: acb_srcptr,
217        pre: *mut acb_dft_pre_struct,
218        prec: mp_limb_signed_t,
219    );
220    pub fn acb_dft_inverse_precomp(
221        w: acb_ptr,
222        v: acb_srcptr,
223        pre: *mut acb_dft_pre_struct,
224        prec: mp_limb_signed_t,
225    );
226    pub fn acb_dft_naive_precomp(
227        w: acb_ptr,
228        v: acb_srcptr,
229        pol: *mut acb_dft_naive_struct,
230        prec: mp_limb_signed_t,
231    );
232    pub fn acb_dft_cyc_precomp(
233        w: acb_ptr,
234        v: acb_srcptr,
235        cyc: *mut acb_dft_cyc_struct,
236        prec: mp_limb_signed_t,
237    );
238    pub fn acb_dft_rad2_precomp_inplace(
239        v: acb_ptr,
240        rad2: *mut acb_dft_rad2_struct,
241        prec: mp_limb_signed_t,
242    );
243    pub fn acb_dft_rad2_precomp(
244        w: acb_ptr,
245        v: acb_srcptr,
246        rad2: *mut acb_dft_rad2_struct,
247        prec: mp_limb_signed_t,
248    );
249    pub fn acb_dft_crt_precomp(
250        w: acb_ptr,
251        v: acb_srcptr,
252        crt: *mut acb_dft_crt_struct,
253        prec: mp_limb_signed_t,
254    );
255    pub fn acb_dft_prod_precomp(
256        w: acb_ptr,
257        v: acb_srcptr,
258        prod: *mut acb_dft_prod_struct,
259        prec: mp_limb_signed_t,
260    );
261    pub fn acb_dft_bluestein_precomp(
262        w: acb_ptr,
263        v: acb_srcptr,
264        t: *mut acb_dft_bluestein_struct,
265        prec: mp_limb_signed_t,
266    );
267    pub fn acb_dft_rad2_precomp_inplace_threaded(
268        v: acb_ptr,
269        rad2: *mut acb_dft_rad2_struct,
270        prec: mp_limb_signed_t,
271    );
272    pub fn acb_dft_inverse_rad2_precomp_inplace(
273        v: acb_ptr,
274        rad2: *mut acb_dft_rad2_struct,
275        prec: mp_limb_signed_t,
276    );
277    pub fn acb_dft_inverse_rad2_precomp(
278        w: acb_ptr,
279        v: acb_srcptr,
280        rad2: *mut acb_dft_rad2_struct,
281        prec: mp_limb_signed_t,
282    );
283    pub fn acb_dft_convol_rad2_precomp(
284        w: acb_ptr,
285        f: acb_srcptr,
286        g: acb_srcptr,
287        len: mp_limb_signed_t,
288        arg1: *mut acb_dft_rad2_struct,
289        prec: mp_limb_signed_t,
290    );
291    pub fn _acb_dft_precomp_init(
292        pre: *mut acb_dft_pre_struct,
293        dv: mp_limb_signed_t,
294        z: acb_ptr,
295        dz: mp_limb_signed_t,
296        len: mp_limb_signed_t,
297        prec: mp_limb_signed_t,
298    );
299    pub fn acb_dft_precomp_init(
300        pre: *mut acb_dft_pre_struct,
301        len: mp_limb_signed_t,
302        prec: mp_limb_signed_t,
303    );
304    pub fn acb_dft_precomp_clear(pre: *mut acb_dft_pre_struct);
305    pub fn acb_dft(w: acb_ptr, v: acb_srcptr, len: mp_limb_signed_t, prec: mp_limb_signed_t);
306    pub fn acb_dft_inverse(
307        w: acb_ptr,
308        v: acb_srcptr,
309        len: mp_limb_signed_t,
310        prec: mp_limb_signed_t,
311    );
312    pub fn _acb_dft_steps_prod(
313        m: *mut mp_limb_signed_t,
314        num: mp_limb_signed_t,
315        prec: mp_limb_signed_t,
316    ) -> acb_dft_step_ptr;
317    pub fn acb_dft_prod_clear(t: *mut acb_dft_prod_struct);
318    pub fn _acb_dft_cyc_init_z_fac(
319        t: *mut acb_dft_cyc_struct,
320        fac: n_factor_t,
321        dv: mp_limb_signed_t,
322        z: acb_ptr,
323        dz: mp_limb_signed_t,
324        len: mp_limb_signed_t,
325        prec: mp_limb_signed_t,
326    );
327    pub fn _acb_dft_cyc_init(
328        t: *mut acb_dft_cyc_struct,
329        dv: mp_limb_signed_t,
330        len: mp_limb_signed_t,
331        prec: mp_limb_signed_t,
332    );
333    pub fn acb_dft_cyc_clear(t: *mut acb_dft_cyc_struct);
334    pub fn _acb_dft_naive_init(
335        pol: *mut acb_dft_naive_struct,
336        dv: mp_limb_signed_t,
337        z: acb_ptr,
338        dz: mp_limb_signed_t,
339        len: mp_limb_signed_t,
340        prec: mp_limb_signed_t,
341    );
342    pub fn _acb_dft_rad2_init(
343        t: *mut acb_dft_rad2_struct,
344        dv: mp_limb_signed_t,
345        e: ::std::os::raw::c_int,
346        prec: mp_limb_signed_t,
347    );
348    pub fn _acb_dft_bluestein_init(
349        t: *mut acb_dft_bluestein_struct,
350        dv: mp_limb_signed_t,
351        n: mp_limb_signed_t,
352        prec: mp_limb_signed_t,
353    );
354    pub fn _acb_dft_crt_init(
355        crt: *mut acb_dft_crt_struct,
356        dv: mp_limb_signed_t,
357        len: mp_limb_signed_t,
358        prec: mp_limb_signed_t,
359    );
360    pub fn acb_dft_crt_init(
361        crt: *mut acb_dft_crt_struct,
362        len: mp_limb_signed_t,
363        prec: mp_limb_signed_t,
364    );
365    pub fn acb_dft_crt_clear(crt: *mut acb_dft_crt_struct);
366}