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