arb_sys/
arb_mat.rs

1#![allow(non_camel_case_types)]
2
3//! *See the [Arb documentation](https://arblib.org/).
4
5use crate::arb::{arb_ptr, arb_srcptr, arb_struct};
6use crate::arb_poly::arb_poly_struct;
7use crate::mag::{mag_srcptr, mag_struct};
8use flint_sys::deps::*;
9use flint_sys::flint::*;
10use flint_sys::fmpq_mat::fmpq_mat_struct;
11use flint_sys::fmpz_mat::fmpz_mat_struct;
12use libc::{c_int, FILE};
13
14#[repr(C)]
15#[derive(Debug, Copy, Clone)]
16pub struct arb_mat_struct {
17    pub entries: arb_ptr,
18    pub r: mp_limb_signed_t,
19    pub c: mp_limb_signed_t,
20    pub rows: *mut arb_ptr,
21}
22
23pub type arb_mat_t = [arb_mat_struct; 1usize];
24
25extern "C" {
26    pub fn arb_mat_init(mat: *mut arb_mat_struct, r: mp_limb_signed_t, c: mp_limb_signed_t);
27    pub fn arb_mat_clear(mat: *mut arb_mat_struct);
28    pub fn arb_mat_window_init(
29        window: *mut arb_mat_struct,
30        mat: *mut arb_mat_struct,
31        r1: mp_limb_signed_t,
32        c1: mp_limb_signed_t,
33        r2: mp_limb_signed_t,
34        c2: mp_limb_signed_t,
35    );
36    pub fn arb_mat_set(dest: *mut arb_mat_struct, src: *mut arb_mat_struct);
37    pub fn arb_mat_set_fmpz_mat(dest: *mut arb_mat_struct, src: *mut fmpz_mat_struct);
38    pub fn arb_mat_set_round_fmpz_mat(
39        dest: *mut arb_mat_struct,
40        src: *mut fmpz_mat_struct,
41        prec: mp_limb_signed_t,
42    );
43    pub fn arb_mat_set_fmpq_mat(
44        dest: *mut arb_mat_struct,
45        src: *mut fmpq_mat_struct,
46        prec: mp_limb_signed_t,
47    );
48    pub fn arb_mat_randtest(
49        mat: *mut arb_mat_struct,
50        state: *mut flint_rand_s,
51        prec: mp_limb_signed_t,
52        mag_bits: mp_limb_signed_t,
53    );
54    pub fn arb_mat_fprintd(file: *mut FILE, mat: *mut arb_mat_struct, digits: mp_limb_signed_t);
55    pub fn arb_mat_eq(mat1: *mut arb_mat_struct, mat2: *mut arb_mat_struct) -> c_int;
56    pub fn arb_mat_ne(mat1: *mut arb_mat_struct, mat2: *mut arb_mat_struct) -> c_int;
57    pub fn arb_mat_equal(mat1: *mut arb_mat_struct, mat2: *mut arb_mat_struct) -> c_int;
58    pub fn arb_mat_overlaps(mat1: *mut arb_mat_struct, mat2: *mut arb_mat_struct) -> c_int;
59    pub fn arb_mat_contains(mat1: *mut arb_mat_struct, mat2: *mut arb_mat_struct) -> c_int;
60    pub fn arb_mat_contains_fmpq_mat(
61        mat1: *mut arb_mat_struct,
62        mat2: *mut fmpq_mat_struct,
63    ) -> c_int;
64    pub fn arb_mat_contains_fmpz_mat(
65        mat1: *mut arb_mat_struct,
66        mat2: *mut fmpz_mat_struct,
67    ) -> c_int;
68    pub fn arb_mat_is_exact(A: *mut arb_mat_struct) -> c_int;
69    pub fn arb_mat_is_zero(mat: *mut arb_mat_struct) -> c_int;
70    pub fn arb_mat_is_finite(mat: *mut arb_mat_struct) -> c_int;
71    pub fn arb_mat_is_triu(mat: *mut arb_mat_struct) -> c_int;
72    pub fn arb_mat_is_tril(mat: *mut arb_mat_struct) -> c_int;
73    pub fn arb_mat_zero(mat: *mut arb_mat_struct);
74    pub fn arb_mat_one(mat: *mut arb_mat_struct);
75    pub fn arb_mat_ones(mat: *mut arb_mat_struct);
76    pub fn arb_mat_indeterminate(mat: *mut arb_mat_struct);
77    pub fn arb_mat_hilbert(mat: *mut arb_mat_struct, prec: mp_limb_signed_t);
78    pub fn arb_mat_pascal(mat: *mut arb_mat_struct, triangular: c_int, prec: mp_limb_signed_t);
79    pub fn arb_mat_stirling(mat: *mut arb_mat_struct, kind: c_int, prec: mp_limb_signed_t);
80    pub fn arb_mat_dct(mat: *mut arb_mat_struct, type_: c_int, prec: mp_limb_signed_t);
81    pub fn arb_mat_transpose(mat1: *mut arb_mat_struct, mat2: *mut arb_mat_struct);
82    pub fn arb_mat_bound_inf_norm(b: *mut mag_struct, A: *mut arb_mat_struct);
83    pub fn arb_mat_frobenius_norm(
84        res: *mut arb_struct,
85        A: *mut arb_mat_struct,
86        prec: mp_limb_signed_t,
87    );
88    pub fn arb_mat_bound_frobenius_norm(b: *mut mag_struct, A: *mut arb_mat_struct);
89    pub fn arb_mat_neg(dest: *mut arb_mat_struct, src: *mut arb_mat_struct);
90    pub fn arb_mat_add(
91        res: *mut arb_mat_struct,
92        mat1: *mut arb_mat_struct,
93        mat2: *mut arb_mat_struct,
94        prec: mp_limb_signed_t,
95    );
96    pub fn arb_mat_sub(
97        res: *mut arb_mat_struct,
98        mat1: *mut arb_mat_struct,
99        mat2: *mut arb_mat_struct,
100        prec: mp_limb_signed_t,
101    );
102    pub fn arb_mat_mul(
103        res: *mut arb_mat_struct,
104        mat1: *mut arb_mat_struct,
105        mat2: *mut arb_mat_struct,
106        prec: mp_limb_signed_t,
107    );
108    pub fn arb_mat_mul_classical(
109        C: *mut arb_mat_struct,
110        A: *mut arb_mat_struct,
111        B: *mut arb_mat_struct,
112        prec: mp_limb_signed_t,
113    );
114    pub fn arb_mat_mul_threaded(
115        C: *mut arb_mat_struct,
116        A: *mut arb_mat_struct,
117        B: *mut arb_mat_struct,
118        prec: mp_limb_signed_t,
119    );
120    pub fn _arb_mat_addmul_rad_mag_fast(
121        C: *mut arb_mat_struct,
122        A: mag_srcptr,
123        B: mag_srcptr,
124        ar: mp_limb_signed_t,
125        ac: mp_limb_signed_t,
126        bc: mp_limb_signed_t,
127    );
128    pub fn arb_mat_mul_block(
129        C: *mut arb_mat_struct,
130        A: *mut arb_mat_struct,
131        B: *mut arb_mat_struct,
132        prec: mp_limb_signed_t,
133    );
134    pub fn arb_mat_mul_entrywise(
135        res: *mut arb_mat_struct,
136        mat1: *mut arb_mat_struct,
137        mat2: *mut arb_mat_struct,
138        prec: mp_limb_signed_t,
139    );
140    pub fn arb_mat_sqr_classical(
141        B: *mut arb_mat_struct,
142        A: *mut arb_mat_struct,
143        prec: mp_limb_signed_t,
144    );
145    pub fn arb_mat_sqr(B: *mut arb_mat_struct, A: *mut arb_mat_struct, prec: mp_limb_signed_t);
146    pub fn arb_mat_pow_ui(
147        B: *mut arb_mat_struct,
148        A: *mut arb_mat_struct,
149        exp: mp_limb_t,
150        prec: mp_limb_signed_t,
151    );
152    pub fn arb_mat_find_pivot_partial(
153        mat: *mut arb_mat_struct,
154        start_row: mp_limb_signed_t,
155        end_row: mp_limb_signed_t,
156        c: mp_limb_signed_t,
157    ) -> mp_limb_signed_t;
158    pub fn arb_mat_solve_tril_classical(
159        X: *mut arb_mat_struct,
160        L: *mut arb_mat_struct,
161        B: *mut arb_mat_struct,
162        unit: c_int,
163        prec: mp_limb_signed_t,
164    );
165    pub fn arb_mat_solve_tril_recursive(
166        X: *mut arb_mat_struct,
167        L: *mut arb_mat_struct,
168        B: *mut arb_mat_struct,
169        unit: c_int,
170        prec: mp_limb_signed_t,
171    );
172    pub fn arb_mat_solve_tril(
173        X: *mut arb_mat_struct,
174        L: *mut arb_mat_struct,
175        B: *mut arb_mat_struct,
176        unit: c_int,
177        prec: mp_limb_signed_t,
178    );
179    pub fn arb_mat_solve_triu_classical(
180        X: *mut arb_mat_struct,
181        U: *mut arb_mat_struct,
182        B: *mut arb_mat_struct,
183        unit: c_int,
184        prec: mp_limb_signed_t,
185    );
186    pub fn arb_mat_solve_triu_recursive(
187        X: *mut arb_mat_struct,
188        U: *mut arb_mat_struct,
189        B: *mut arb_mat_struct,
190        unit: c_int,
191        prec: mp_limb_signed_t,
192    );
193    pub fn arb_mat_solve_triu(
194        X: *mut arb_mat_struct,
195        U: *mut arb_mat_struct,
196        B: *mut arb_mat_struct,
197        unit: c_int,
198        prec: mp_limb_signed_t,
199    );
200    pub fn arb_mat_lu_classical(
201        P: *mut mp_limb_signed_t,
202        LU: *mut arb_mat_struct,
203        A: *mut arb_mat_struct,
204        prec: mp_limb_signed_t,
205    ) -> c_int;
206    pub fn arb_mat_lu_recursive(
207        P: *mut mp_limb_signed_t,
208        LU: *mut arb_mat_struct,
209        A: *mut arb_mat_struct,
210        prec: mp_limb_signed_t,
211    ) -> c_int;
212    pub fn arb_mat_lu(
213        P: *mut mp_limb_signed_t,
214        LU: *mut arb_mat_struct,
215        A: *mut arb_mat_struct,
216        prec: mp_limb_signed_t,
217    ) -> c_int;
218    pub fn arb_mat_solve_lu_precomp(
219        X: *mut arb_mat_struct,
220        perm: *const mp_limb_signed_t,
221        A: *mut arb_mat_struct,
222        B: *mut arb_mat_struct,
223        prec: mp_limb_signed_t,
224    );
225    pub fn arb_mat_solve(
226        X: *mut arb_mat_struct,
227        A: *mut arb_mat_struct,
228        B: *mut arb_mat_struct,
229        prec: mp_limb_signed_t,
230    ) -> c_int;
231    pub fn arb_mat_solve_lu(
232        X: *mut arb_mat_struct,
233        A: *mut arb_mat_struct,
234        B: *mut arb_mat_struct,
235        prec: mp_limb_signed_t,
236    ) -> c_int;
237    pub fn arb_mat_solve_precond(
238        X: *mut arb_mat_struct,
239        A: *mut arb_mat_struct,
240        B: *mut arb_mat_struct,
241        prec: mp_limb_signed_t,
242    ) -> c_int;
243    pub fn arb_mat_solve_preapprox(
244        X: *mut arb_mat_struct,
245        A: *mut arb_mat_struct,
246        B: *mut arb_mat_struct,
247        R: *mut arb_mat_struct,
248        T: *mut arb_mat_struct,
249        prec: mp_limb_signed_t,
250    ) -> c_int;
251    pub fn arb_mat_approx_mul(
252        C: *mut arb_mat_struct,
253        A: *mut arb_mat_struct,
254        B: *mut arb_mat_struct,
255        prec: mp_limb_signed_t,
256    );
257    pub fn arb_mat_approx_solve_triu(
258        X: *mut arb_mat_struct,
259        U: *mut arb_mat_struct,
260        B: *mut arb_mat_struct,
261        unit: c_int,
262        prec: mp_limb_signed_t,
263    );
264    pub fn arb_mat_approx_solve_tril(
265        X: *mut arb_mat_struct,
266        L: *mut arb_mat_struct,
267        B: *mut arb_mat_struct,
268        unit: c_int,
269        prec: mp_limb_signed_t,
270    );
271    pub fn arb_mat_approx_lu(
272        P: *mut mp_limb_signed_t,
273        LU: *mut arb_mat_struct,
274        A: *mut arb_mat_struct,
275        prec: mp_limb_signed_t,
276    ) -> c_int;
277    pub fn arb_mat_approx_solve_lu_precomp(
278        X: *mut arb_mat_struct,
279        perm: *const mp_limb_signed_t,
280        A: *mut arb_mat_struct,
281        B: *mut arb_mat_struct,
282        prec: mp_limb_signed_t,
283    );
284    pub fn arb_mat_approx_solve(
285        X: *mut arb_mat_struct,
286        A: *mut arb_mat_struct,
287        B: *mut arb_mat_struct,
288        prec: mp_limb_signed_t,
289    ) -> c_int;
290    pub fn arb_mat_approx_inv(
291        X: *mut arb_mat_struct,
292        A: *mut arb_mat_struct,
293        prec: mp_limb_signed_t,
294    ) -> c_int;
295    pub fn arb_mat_inv(
296        X: *mut arb_mat_struct,
297        A: *mut arb_mat_struct,
298        prec: mp_limb_signed_t,
299    ) -> c_int;
300    pub fn arb_mat_det_lu(det: *mut arb_struct, A: *mut arb_mat_struct, prec: mp_limb_signed_t);
301    pub fn arb_mat_det_precond(
302        det: *mut arb_struct,
303        A: *mut arb_mat_struct,
304        prec: mp_limb_signed_t,
305    );
306    pub fn arb_mat_det(det: *mut arb_struct, A: *mut arb_mat_struct, prec: mp_limb_signed_t);
307    pub fn _arb_mat_cholesky_banachiewicz(A: *mut arb_mat_struct, prec: mp_limb_signed_t) -> c_int;
308    pub fn arb_mat_cho(
309        L: *mut arb_mat_struct,
310        A: *mut arb_mat_struct,
311        prec: mp_limb_signed_t,
312    ) -> c_int;
313    pub fn arb_mat_solve_cho_precomp(
314        X: *mut arb_mat_struct,
315        L: *mut arb_mat_struct,
316        B: *mut arb_mat_struct,
317        prec: mp_limb_signed_t,
318    );
319    pub fn arb_mat_inv_cho_precomp(
320        X: *mut arb_mat_struct,
321        L: *mut arb_mat_struct,
322        prec: mp_limb_signed_t,
323    );
324    pub fn arb_mat_spd_solve(
325        X: *mut arb_mat_struct,
326        A: *mut arb_mat_struct,
327        B: *mut arb_mat_struct,
328        prec: mp_limb_signed_t,
329    ) -> c_int;
330    pub fn arb_mat_spd_inv(
331        X: *mut arb_mat_struct,
332        A: *mut arb_mat_struct,
333        prec: mp_limb_signed_t,
334    ) -> c_int;
335    pub fn _arb_mat_ldl_inplace(A: *mut arb_mat_struct, prec: mp_limb_signed_t) -> c_int;
336    pub fn _arb_mat_ldl_golub_and_van_loan(A: *mut arb_mat_struct, prec: mp_limb_signed_t)
337        -> c_int;
338    pub fn arb_mat_ldl(
339        L: *mut arb_mat_struct,
340        A: *mut arb_mat_struct,
341        prec: mp_limb_signed_t,
342    ) -> c_int;
343    pub fn arb_mat_solve_ldl_precomp(
344        X: *mut arb_mat_struct,
345        L: *mut arb_mat_struct,
346        B: *mut arb_mat_struct,
347        prec: mp_limb_signed_t,
348    );
349    pub fn arb_mat_inv_ldl_precomp(
350        X: *mut arb_mat_struct,
351        L: *mut arb_mat_struct,
352        prec: mp_limb_signed_t,
353    );
354    pub fn arb_mat_exp_taylor_sum(
355        S: *mut arb_mat_struct,
356        A: *mut arb_mat_struct,
357        N: mp_limb_signed_t,
358        prec: mp_limb_signed_t,
359    );
360    pub fn arb_mat_exp(B: *mut arb_mat_struct, A: *mut arb_mat_struct, prec: mp_limb_signed_t);
361    pub fn _arb_mat_charpoly(poly: arb_ptr, mat: *mut arb_mat_struct, prec: mp_limb_signed_t);
362    pub fn arb_mat_charpoly(
363        poly: *mut arb_poly_struct,
364        mat: *mut arb_mat_struct,
365        prec: mp_limb_signed_t,
366    );
367    pub fn _arb_mat_companion(mat: *mut arb_mat_struct, poly: arb_srcptr, prec: mp_limb_signed_t);
368    pub fn arb_mat_companion(
369        mat: *mut arb_mat_struct,
370        poly: *mut arb_poly_struct,
371        prec: mp_limb_signed_t,
372    );
373    pub fn arb_mat_trace(trace: *mut arb_struct, mat: *mut arb_mat_struct, prec: mp_limb_signed_t);
374    pub fn _arb_mat_diag_prod(
375        res: *mut arb_struct,
376        A: *mut arb_mat_struct,
377        a: mp_limb_signed_t,
378        b: mp_limb_signed_t,
379        prec: mp_limb_signed_t,
380    );
381    pub fn arb_mat_diag_prod(res: *mut arb_struct, A: *mut arb_mat_struct, prec: mp_limb_signed_t);
382    pub fn arb_mat_entrywise_is_zero(dest: *mut fmpz_mat_struct, src: *mut arb_mat_struct);
383    pub fn arb_mat_entrywise_not_is_zero(dest: *mut fmpz_mat_struct, src: *mut arb_mat_struct);
384    pub fn arb_mat_count_is_zero(mat: *mut arb_mat_struct) -> mp_limb_signed_t;
385}