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