arb_sys/
acb_mat.rs

1#![allow(non_camel_case_types)]
2
3//! *See the [Arb documentation](https://arblib.org/).
4
5use crate::acb::{acb_ptr, acb_srcptr, acb_struct};
6use crate::acb_poly::acb_poly_struct;
7use crate::arb::arb_struct;
8use crate::arb_mat::arb_mat_struct;
9use crate::mag::mag_struct;
10use flint_sys::deps::*;
11use flint_sys::flint::*;
12use flint_sys::fmpq_mat::fmpq_mat_struct;
13use flint_sys::fmpz_mat::fmpz_mat_struct;
14use libc::{c_int, FILE};
15
16#[repr(C)]
17#[derive(Debug, Copy, Clone)]
18pub struct acb_mat_struct {
19    pub entries: acb_ptr,
20    pub r: mp_limb_signed_t,
21    pub c: mp_limb_signed_t,
22    pub rows: *mut acb_ptr,
23}
24
25pub type acb_mat_t = [acb_mat_struct; 1usize];
26
27extern "C" {
28    pub fn acb_mat_init(mat: *mut acb_mat_struct, r: mp_limb_signed_t, c: mp_limb_signed_t);
29    pub fn acb_mat_clear(mat: *mut acb_mat_struct);
30    pub fn acb_mat_window_init(
31        window: *mut acb_mat_struct,
32        mat: *mut acb_mat_struct,
33        r1: mp_limb_signed_t,
34        c1: mp_limb_signed_t,
35        r2: mp_limb_signed_t,
36        c2: mp_limb_signed_t,
37    );
38    pub fn acb_mat_set(dest: *mut acb_mat_struct, src: *mut acb_mat_struct);
39    pub fn acb_mat_set_fmpz_mat(dest: *mut acb_mat_struct, src: *mut fmpz_mat_struct);
40    pub fn acb_mat_set_round_fmpz_mat(
41        dest: *mut acb_mat_struct,
42        src: *mut fmpz_mat_struct,
43        prec: mp_limb_signed_t,
44    );
45    pub fn acb_mat_set_fmpq_mat(
46        dest: *mut acb_mat_struct,
47        src: *mut fmpq_mat_struct,
48        prec: mp_limb_signed_t,
49    );
50    pub fn acb_mat_set_arb_mat(dest: *mut acb_mat_struct, src: *mut arb_mat_struct);
51    pub fn acb_mat_set_round_arb_mat(
52        dest: *mut acb_mat_struct,
53        src: *mut arb_mat_struct,
54        prec: mp_limb_signed_t,
55    );
56    pub fn acb_mat_randtest(
57        mat: *mut acb_mat_struct,
58        state: *mut flint_rand_s,
59        prec: mp_limb_signed_t,
60        mag_bits: mp_limb_signed_t,
61    );
62    pub fn acb_mat_randtest_eig(
63        A: *mut acb_mat_struct,
64        state: *mut flint_rand_s,
65        E: acb_srcptr,
66        prec: mp_limb_signed_t,
67    );
68    pub fn acb_mat_fprintd(file: *mut FILE, mat: *mut acb_mat_struct, digits: mp_limb_signed_t);
69    pub fn acb_mat_eq(mat1: *mut acb_mat_struct, mat2: *mut acb_mat_struct) -> c_int;
70    pub fn acb_mat_ne(mat1: *mut acb_mat_struct, mat2: *mut acb_mat_struct) -> c_int;
71    pub fn acb_mat_equal(mat1: *mut acb_mat_struct, mat2: *mut acb_mat_struct) -> c_int;
72    pub fn acb_mat_overlaps(mat1: *mut acb_mat_struct, mat2: *mut acb_mat_struct) -> c_int;
73    pub fn acb_mat_contains(mat1: *mut acb_mat_struct, mat2: *mut acb_mat_struct) -> c_int;
74    pub fn acb_mat_contains_fmpq_mat(
75        mat1: *mut acb_mat_struct,
76        mat2: *mut fmpq_mat_struct,
77    ) -> c_int;
78    pub fn acb_mat_contains_fmpz_mat(
79        mat1: *mut acb_mat_struct,
80        mat2: *mut fmpz_mat_struct,
81    ) -> c_int;
82    pub fn acb_mat_is_real(mat: *mut acb_mat_struct) -> c_int;
83    pub fn acb_mat_is_exact(mat: *mut acb_mat_struct) -> c_int;
84    pub fn acb_mat_is_zero(mat: *mut acb_mat_struct) -> c_int;
85    pub fn acb_mat_is_finite(mat: *mut acb_mat_struct) -> c_int;
86    pub fn acb_mat_is_triu(mat: *mut acb_mat_struct) -> c_int;
87    pub fn acb_mat_is_tril(mat: *mut acb_mat_struct) -> c_int;
88    pub fn acb_mat_zero(mat: *mut acb_mat_struct);
89    pub fn acb_mat_one(mat: *mut acb_mat_struct);
90    pub fn acb_mat_ones(mat: *mut acb_mat_struct);
91    pub fn acb_mat_indeterminate(mat: *mut acb_mat_struct);
92    pub fn acb_mat_dft(res: *mut acb_mat_struct, kind: c_int, prec: mp_limb_signed_t);
93    pub fn acb_mat_transpose(mat1: *mut acb_mat_struct, mat2: *mut acb_mat_struct);
94    pub fn acb_mat_conjugate(mat1: *mut acb_mat_struct, mat2: *mut acb_mat_struct);
95    pub fn acb_mat_bound_inf_norm(b: *mut mag_struct, A: *mut acb_mat_struct);
96    pub fn acb_mat_frobenius_norm(
97        res: *mut arb_struct,
98        A: *mut acb_mat_struct,
99        prec: mp_limb_signed_t,
100    );
101    pub fn acb_mat_bound_frobenius_norm(b: *mut mag_struct, A: *mut acb_mat_struct);
102    pub fn acb_mat_neg(dest: *mut acb_mat_struct, src: *mut acb_mat_struct);
103    pub fn acb_mat_add(
104        res: *mut acb_mat_struct,
105        mat1: *mut acb_mat_struct,
106        mat2: *mut acb_mat_struct,
107        prec: mp_limb_signed_t,
108    );
109    pub fn acb_mat_sub(
110        res: *mut acb_mat_struct,
111        mat1: *mut acb_mat_struct,
112        mat2: *mut acb_mat_struct,
113        prec: mp_limb_signed_t,
114    );
115    pub fn acb_mat_mul_classical(
116        res: *mut acb_mat_struct,
117        mat1: *mut acb_mat_struct,
118        mat2: *mut acb_mat_struct,
119        prec: mp_limb_signed_t,
120    );
121    pub fn acb_mat_mul_threaded(
122        res: *mut acb_mat_struct,
123        mat1: *mut acb_mat_struct,
124        mat2: *mut acb_mat_struct,
125        prec: mp_limb_signed_t,
126    );
127    pub fn acb_mat_mul_reorder(
128        res: *mut acb_mat_struct,
129        mat1: *mut acb_mat_struct,
130        mat2: *mut acb_mat_struct,
131        prec: mp_limb_signed_t,
132    );
133    pub fn acb_mat_mul(
134        res: *mut acb_mat_struct,
135        mat1: *mut acb_mat_struct,
136        mat2: *mut acb_mat_struct,
137        prec: mp_limb_signed_t,
138    );
139    pub fn acb_mat_mul_entrywise(
140        res: *mut acb_mat_struct,
141        mat1: *mut acb_mat_struct,
142        mat2: *mut acb_mat_struct,
143        prec: mp_limb_signed_t,
144    );
145    pub fn acb_mat_sqr_classical(
146        res: *mut acb_mat_struct,
147        mat: *mut acb_mat_struct,
148        prec: mp_limb_signed_t,
149    );
150    pub fn acb_mat_sqr(res: *mut acb_mat_struct, mat: *mut acb_mat_struct, prec: mp_limb_signed_t);
151    pub fn acb_mat_pow_ui(
152        B: *mut acb_mat_struct,
153        A: *mut acb_mat_struct,
154        exp: mp_limb_t,
155        prec: mp_limb_signed_t,
156    );
157    pub fn acb_mat_find_pivot_partial(
158        mat: *mut acb_mat_struct,
159        start_row: mp_limb_signed_t,
160        end_row: mp_limb_signed_t,
161        c: mp_limb_signed_t,
162    ) -> mp_limb_signed_t;
163    pub fn acb_mat_solve_tril_classical(
164        X: *mut acb_mat_struct,
165        L: *mut acb_mat_struct,
166        B: *mut acb_mat_struct,
167        unit: c_int,
168        prec: mp_limb_signed_t,
169    );
170    pub fn acb_mat_solve_tril_recursive(
171        X: *mut acb_mat_struct,
172        L: *mut acb_mat_struct,
173        B: *mut acb_mat_struct,
174        unit: c_int,
175        prec: mp_limb_signed_t,
176    );
177    pub fn acb_mat_solve_tril(
178        X: *mut acb_mat_struct,
179        L: *mut acb_mat_struct,
180        B: *mut acb_mat_struct,
181        unit: c_int,
182        prec: mp_limb_signed_t,
183    );
184    pub fn acb_mat_solve_triu_classical(
185        X: *mut acb_mat_struct,
186        U: *mut acb_mat_struct,
187        B: *mut acb_mat_struct,
188        unit: c_int,
189        prec: mp_limb_signed_t,
190    );
191    pub fn acb_mat_solve_triu_recursive(
192        X: *mut acb_mat_struct,
193        U: *mut acb_mat_struct,
194        B: *mut acb_mat_struct,
195        unit: c_int,
196        prec: mp_limb_signed_t,
197    );
198    pub fn acb_mat_solve_triu(
199        X: *mut acb_mat_struct,
200        U: *mut acb_mat_struct,
201        B: *mut acb_mat_struct,
202        unit: c_int,
203        prec: mp_limb_signed_t,
204    );
205    pub fn acb_mat_lu_classical(
206        P: *mut mp_limb_signed_t,
207        LU: *mut acb_mat_struct,
208        A: *mut acb_mat_struct,
209        prec: mp_limb_signed_t,
210    ) -> c_int;
211    pub fn acb_mat_lu_recursive(
212        P: *mut mp_limb_signed_t,
213        LU: *mut acb_mat_struct,
214        A: *mut acb_mat_struct,
215        prec: mp_limb_signed_t,
216    ) -> c_int;
217    pub fn acb_mat_lu(
218        P: *mut mp_limb_signed_t,
219        LU: *mut acb_mat_struct,
220        A: *mut acb_mat_struct,
221        prec: mp_limb_signed_t,
222    ) -> c_int;
223    pub fn acb_mat_solve_lu_precomp(
224        X: *mut acb_mat_struct,
225        perm: *const mp_limb_signed_t,
226        A: *mut acb_mat_struct,
227        B: *mut acb_mat_struct,
228        prec: mp_limb_signed_t,
229    );
230    pub fn acb_mat_solve_lu(
231        X: *mut acb_mat_struct,
232        A: *mut acb_mat_struct,
233        B: *mut acb_mat_struct,
234        prec: mp_limb_signed_t,
235    ) -> c_int;
236    pub fn acb_mat_solve(
237        X: *mut acb_mat_struct,
238        A: *mut acb_mat_struct,
239        B: *mut acb_mat_struct,
240        prec: mp_limb_signed_t,
241    ) -> c_int;
242    pub fn acb_mat_solve_precond(
243        X: *mut acb_mat_struct,
244        A: *mut acb_mat_struct,
245        B: *mut acb_mat_struct,
246        prec: mp_limb_signed_t,
247    ) -> c_int;
248    pub fn acb_mat_approx_mul(
249        C: *mut acb_mat_struct,
250        A: *mut acb_mat_struct,
251        B: *mut acb_mat_struct,
252        prec: mp_limb_signed_t,
253    );
254    pub fn acb_mat_approx_solve_triu(
255        X: *mut acb_mat_struct,
256        U: *mut acb_mat_struct,
257        B: *mut acb_mat_struct,
258        unit: c_int,
259        prec: mp_limb_signed_t,
260    );
261    pub fn acb_mat_approx_solve_tril(
262        X: *mut acb_mat_struct,
263        L: *mut acb_mat_struct,
264        B: *mut acb_mat_struct,
265        unit: c_int,
266        prec: mp_limb_signed_t,
267    );
268    pub fn acb_mat_approx_lu(
269        P: *mut mp_limb_signed_t,
270        LU: *mut acb_mat_struct,
271        A: *mut acb_mat_struct,
272        prec: mp_limb_signed_t,
273    ) -> c_int;
274    pub fn acb_mat_approx_solve_lu_precomp(
275        X: *mut acb_mat_struct,
276        perm: *const mp_limb_signed_t,
277        A: *mut acb_mat_struct,
278        B: *mut acb_mat_struct,
279        prec: mp_limb_signed_t,
280    );
281    pub fn acb_mat_approx_solve(
282        X: *mut acb_mat_struct,
283        A: *mut acb_mat_struct,
284        B: *mut acb_mat_struct,
285        prec: mp_limb_signed_t,
286    ) -> c_int;
287    pub fn acb_mat_approx_inv(
288        X: *mut acb_mat_struct,
289        A: *mut acb_mat_struct,
290        prec: mp_limb_signed_t,
291    ) -> c_int;
292    pub fn acb_mat_inv(
293        X: *mut acb_mat_struct,
294        A: *mut acb_mat_struct,
295        prec: mp_limb_signed_t,
296    ) -> c_int;
297    pub fn acb_mat_det_lu(det: *mut acb_struct, A: *mut acb_mat_struct, prec: mp_limb_signed_t);
298    pub fn acb_mat_det_precond(
299        det: *mut acb_struct,
300        A: *mut acb_mat_struct,
301        prec: mp_limb_signed_t,
302    );
303    pub fn acb_mat_det(det: *mut acb_struct, A: *mut acb_mat_struct, prec: mp_limb_signed_t);
304    pub fn acb_mat_approx_eig_qr(
305        E: acb_ptr,
306        L: *mut acb_mat_struct,
307        R: *mut acb_mat_struct,
308        A: *mut acb_mat_struct,
309        tol: *mut mag_struct,
310        maxiter: mp_limb_signed_t,
311        prec: mp_limb_signed_t,
312    ) -> c_int;
313    pub fn acb_mat_eig_global_enclosure(
314        eps: *mut mag_struct,
315        A: *mut acb_mat_struct,
316        E: acb_srcptr,
317        R: *mut acb_mat_struct,
318        prec: mp_limb_signed_t,
319    );
320    pub fn acb_mat_eig_enclosure_rump(
321        lambda: *mut acb_struct,
322        J: *mut acb_mat_struct,
323        X: *mut acb_mat_struct,
324        A: *mut acb_mat_struct,
325        lambda_approx: *mut acb_struct,
326        X_approx: *mut acb_mat_struct,
327        prec: mp_limb_signed_t,
328    );
329    pub fn acb_mat_eig_simple_rump(
330        E: acb_ptr,
331        L: *mut acb_mat_struct,
332        R: *mut acb_mat_struct,
333        A: *mut acb_mat_struct,
334        E_approx: acb_srcptr,
335        R_approx: *mut acb_mat_struct,
336        prec: mp_limb_signed_t,
337    ) -> c_int;
338    pub fn acb_mat_eig_simple_vdhoeven_mourrain(
339        E: acb_ptr,
340        L: *mut acb_mat_struct,
341        R: *mut acb_mat_struct,
342        A: *mut acb_mat_struct,
343        E_approx: acb_srcptr,
344        R_approx: *mut acb_mat_struct,
345        prec: mp_limb_signed_t,
346    ) -> c_int;
347    pub fn acb_mat_eig_simple(
348        E: acb_ptr,
349        L: *mut acb_mat_struct,
350        R: *mut acb_mat_struct,
351        A: *mut acb_mat_struct,
352        E_approx: acb_srcptr,
353        R_approx: *mut acb_mat_struct,
354        prec: mp_limb_signed_t,
355    ) -> c_int;
356    pub fn acb_mat_eig_multiple_rump(
357        E: acb_ptr,
358        A: *mut acb_mat_struct,
359        E_approx: acb_srcptr,
360        R_approx: *mut acb_mat_struct,
361        prec: mp_limb_signed_t,
362    ) -> c_int;
363    pub fn acb_mat_eig_multiple(
364        E: acb_ptr,
365        A: *mut acb_mat_struct,
366        E_approx: acb_srcptr,
367        R_approx: *mut acb_mat_struct,
368        prec: mp_limb_signed_t,
369    ) -> c_int;
370    pub fn acb_mat_exp_taylor_sum(
371        S: *mut acb_mat_struct,
372        A: *mut acb_mat_struct,
373        N: mp_limb_signed_t,
374        prec: mp_limb_signed_t,
375    );
376    pub fn acb_mat_exp(B: *mut acb_mat_struct, A: *mut acb_mat_struct, prec: mp_limb_signed_t);
377    pub fn _acb_mat_charpoly(poly: acb_ptr, mat: *mut acb_mat_struct, prec: mp_limb_signed_t);
378    pub fn acb_mat_charpoly(
379        poly: *mut acb_poly_struct,
380        mat: *mut acb_mat_struct,
381        prec: mp_limb_signed_t,
382    );
383    pub fn _acb_mat_companion(mat: *mut acb_mat_struct, poly: acb_srcptr, prec: mp_limb_signed_t);
384    pub fn acb_mat_companion(
385        mat: *mut acb_mat_struct,
386        poly: *mut acb_poly_struct,
387        prec: mp_limb_signed_t,
388    );
389    pub fn acb_mat_trace(trace: *mut acb_struct, mat: *mut acb_mat_struct, prec: mp_limb_signed_t);
390    pub fn _acb_mat_diag_prod(
391        res: *mut acb_struct,
392        A: *mut acb_mat_struct,
393        a: mp_limb_signed_t,
394        b: mp_limb_signed_t,
395        prec: mp_limb_signed_t,
396    );
397    pub fn acb_mat_diag_prod(res: *mut acb_struct, A: *mut acb_mat_struct, prec: mp_limb_signed_t);
398}