1#![allow(non_camel_case_types)]
2use crate::deps::*;
7use crate::flint::*;
8use crate::fmpq::fmpq;
9use crate::fmpz::fmpz;
10use crate::fmpz_poly::fmpz_poly_struct;
11use libc::{c_int, FILE};
12
13#[repr(C)]
14#[derive(Debug, Copy, Clone, Hash)]
15pub struct fmpz_mat_struct {
16 pub entries: *mut fmpz,
17 pub r: mp_limb_signed_t,
18 pub c: mp_limb_signed_t,
19 pub rows: *mut *mut fmpz,
20}
21
22pub type fmpz_mat_t = [fmpz_mat_struct; 1usize];
23
24#[repr(C)]
25#[derive(Debug, Copy, Clone)]
26pub struct col_hash_t {
27 pub col: mp_limb_t,
28 pub hash: mp_limb_t,
29}
30
31extern "C" {
32 pub fn fmpz_mat_entry(
33 mat: *const fmpz_mat_struct,
34 i: mp_limb_signed_t,
35 j: mp_limb_signed_t,
36 ) -> *mut fmpz;
37 pub fn fmpz_mat_nrows(mat: *const fmpz_mat_struct) -> mp_limb_signed_t;
38 pub fn fmpz_mat_ncols(mat: *const fmpz_mat_struct) -> mp_limb_signed_t;
39 pub fn fmpz_mat_init(mat: *mut fmpz_mat_struct, rows: mp_limb_signed_t, cols: mp_limb_signed_t);
40 pub fn fmpz_mat_init_set(mat: *mut fmpz_mat_struct, src: *const fmpz_mat_struct);
41 pub fn fmpz_mat_swap(mat1: *mut fmpz_mat_struct, mat2: *mut fmpz_mat_struct);
42 pub fn fmpz_mat_set(mat1: *mut fmpz_mat_struct, mat2: *const fmpz_mat_struct);
43 pub fn fmpz_mat_clear(mat: *mut fmpz_mat_struct);
44 pub fn fmpz_mat_equal(mat1: *const fmpz_mat_struct, mat2: *const fmpz_mat_struct) -> c_int;
45 pub fn fmpz_mat_is_zero(mat: *const fmpz_mat_struct) -> c_int;
46 pub fn fmpz_mat_is_one(mat: *const fmpz_mat_struct) -> c_int;
47 pub fn fmpz_mat_is_zero_row(mat: *const fmpz_mat_struct, i: mp_limb_signed_t) -> c_int;
48 pub fn fmpz_mat_col_equal(
49 M: *const fmpz_mat_struct,
50 m: mp_limb_signed_t,
51 n: mp_limb_signed_t,
52 ) -> c_int;
53 pub fn fmpz_mat_row_equal(
54 M: *const fmpz_mat_struct,
55 m: mp_limb_signed_t,
56 n: mp_limb_signed_t,
57 ) -> c_int;
58 pub fn fmpz_mat_is_empty(mat: *const fmpz_mat_struct) -> c_int;
59 pub fn fmpz_mat_is_square(mat: *const fmpz_mat_struct) -> c_int;
60 pub fn fmpz_mat_zero(mat: *mut fmpz_mat_struct);
61 pub fn fmpz_mat_one(mat: *mut fmpz_mat_struct);
62 pub fn fmpz_mat_window_init(
63 window: *mut fmpz_mat_struct,
64 mat: *const fmpz_mat_struct,
65 r1: mp_limb_signed_t,
66 c1: mp_limb_signed_t,
67 r2: mp_limb_signed_t,
68 c2: mp_limb_signed_t,
69 );
70 pub fn fmpz_mat_window_clear(window: *mut fmpz_mat_struct);
71 pub fn fmpz_mat_concat_horizontal(
72 res: *mut fmpz_mat_struct,
73 mat1: *const fmpz_mat_struct,
74 mat2: *const fmpz_mat_struct,
75 );
76 pub fn fmpz_mat_concat_vertical(
77 res: *mut fmpz_mat_struct,
78 mat1: *const fmpz_mat_struct,
79 mat2: *const fmpz_mat_struct,
80 );
81 pub fn fmpz_mat_fprint(file: *mut FILE, mat: *const fmpz_mat_struct) -> c_int;
82 pub fn fmpz_mat_fprint_pretty(file: *mut FILE, mat: *const fmpz_mat_struct) -> c_int;
83 pub fn fmpz_mat_print(mat: *const fmpz_mat_struct) -> c_int;
84 pub fn fmpz_mat_print_pretty(mat: *const fmpz_mat_struct) -> c_int;
85 pub fn fmpz_mat_fread(file: *const FILE, mat: *mut fmpz_mat_struct) -> c_int;
86 pub fn fmpz_mat_read(mat: *mut fmpz_mat_struct) -> c_int;
87 pub fn fmpz_mat_randbits(
88 mat: *mut fmpz_mat_struct,
89 state: *const flint_rand_s,
90 bits: mp_limb_t,
91 );
92 pub fn fmpz_mat_randtest(
93 mat: *mut fmpz_mat_struct,
94 state: *const flint_rand_s,
95 bits: mp_limb_t,
96 );
97 pub fn fmpz_mat_randtest_unsigned(
98 mat: *mut fmpz_mat_struct,
99 state: *const flint_rand_s,
100 bits: mp_limb_t,
101 );
102 pub fn fmpz_mat_randintrel(
103 mat: *mut fmpz_mat_struct,
104 state: *const flint_rand_s,
105 bits: mp_limb_t,
106 );
107 pub fn fmpz_mat_randsimdioph(
108 mat: *mut fmpz_mat_struct,
109 state: *const flint_rand_s,
110 bits: mp_limb_t,
111 bits2: mp_limb_t,
112 );
113 pub fn fmpz_mat_randntrulike(
114 mat: *mut fmpz_mat_struct,
115 state: *const flint_rand_s,
116 bits: mp_limb_t,
117 q: mp_limb_t,
118 );
119 pub fn fmpz_mat_randntrulike2(
120 mat: *mut fmpz_mat_struct,
121 state: *const flint_rand_s,
122 bits: mp_limb_t,
123 q: mp_limb_t,
124 );
125 pub fn fmpz_mat_randajtai(mat: *mut fmpz_mat_struct, state: *const flint_rand_s, alpha: f64);
126 pub fn fmpz_mat_randrank(
127 mat: *mut fmpz_mat_struct,
128 state: *const flint_rand_s,
129 rank: mp_limb_signed_t,
130 bits: mp_limb_t,
131 );
132 pub fn fmpz_mat_randdet(
133 mat: *mut fmpz_mat_struct,
134 state: *const flint_rand_s,
135 det: *const fmpz,
136 );
137 pub fn fmpz_mat_randops(
138 mat: *mut fmpz_mat_struct,
139 state: *const flint_rand_s,
140 count: mp_limb_signed_t,
141 );
142 pub fn fmpz_mat_randpermdiag(
143 mat: *mut fmpz_mat_struct,
144 state: *const flint_rand_s,
145 diag: *const fmpz,
146 n: mp_limb_signed_t,
147 ) -> c_int;
148 pub fn fmpz_mat_max_bits(mat: *const fmpz_mat_struct) -> mp_limb_signed_t;
149 pub fn fmpz_mat_transpose(B: *mut fmpz_mat_struct, A: *const fmpz_mat_struct);
150 pub fn fmpz_mat_add(
151 C: *mut fmpz_mat_struct,
152 A: *const fmpz_mat_struct,
153 B: *const fmpz_mat_struct,
154 );
155 pub fn fmpz_mat_sub(
156 C: *mut fmpz_mat_struct,
157 A: *const fmpz_mat_struct,
158 B: *const fmpz_mat_struct,
159 );
160 pub fn fmpz_mat_neg(B: *mut fmpz_mat_struct, A: *const fmpz_mat_struct);
161 pub fn fmpz_mat_scalar_mul_fmpz(
162 B: *mut fmpz_mat_struct,
163 A: *const fmpz_mat_struct,
164 c: *const fmpz,
165 );
166 pub fn fmpz_mat_scalar_mul_si(
167 B: *mut fmpz_mat_struct,
168 A: *const fmpz_mat_struct,
169 c: mp_limb_signed_t,
170 );
171 pub fn fmpz_mat_scalar_mul_ui(B: *mut fmpz_mat_struct, A: *const fmpz_mat_struct, c: mp_limb_t);
172 pub fn fmpz_mat_scalar_addmul_fmpz(
173 B: *mut fmpz_mat_struct,
174 A: *const fmpz_mat_struct,
175 c: *const fmpz,
176 );
177 pub fn fmpz_mat_scalar_addmul_si(
178 B: *mut fmpz_mat_struct,
179 A: *const fmpz_mat_struct,
180 c: mp_limb_signed_t,
181 );
182 pub fn fmpz_mat_scalar_addmul_ui(
183 B: *mut fmpz_mat_struct,
184 A: *const fmpz_mat_struct,
185 c: mp_limb_t,
186 );
187 pub fn fmpz_mat_scalar_submul_fmpz(
188 B: *mut fmpz_mat_struct,
189 A: *const fmpz_mat_struct,
190 c: *const fmpz,
191 );
192 pub fn fmpz_mat_scalar_submul_si(
193 B: *mut fmpz_mat_struct,
194 A: *const fmpz_mat_struct,
195 c: mp_limb_signed_t,
196 );
197 pub fn fmpz_mat_scalar_submul_ui(
198 B: *mut fmpz_mat_struct,
199 A: *const fmpz_mat_struct,
200 c: mp_limb_t,
201 );
202 pub fn fmpz_mat_scalar_divexact_fmpz(
215 B: *mut fmpz_mat_struct,
216 A: *const fmpz_mat_struct,
217 c: *const fmpz,
218 );
219 pub fn fmpz_mat_scalar_divexact_si(
220 B: *mut fmpz_mat_struct,
221 A: *const fmpz_mat_struct,
222 c: mp_limb_signed_t,
223 );
224 pub fn fmpz_mat_scalar_divexact_ui(
225 B: *mut fmpz_mat_struct,
226 A: *const fmpz_mat_struct,
227 c: mp_limb_t,
228 );
229 pub fn fmpz_mat_scalar_mul_2exp(
230 B: *mut fmpz_mat_struct,
231 A: *const fmpz_mat_struct,
232 exp: mp_limb_t,
233 );
234 pub fn fmpz_mat_scalar_tdiv_q_2exp(
235 B: *mut fmpz_mat_struct,
236 A: *const fmpz_mat_struct,
237 exp: mp_limb_t,
238 );
239 pub fn fmpz_mat_scalar_smod(B: *mut fmpz_mat_struct, A: *const fmpz_mat_struct, P: *const fmpz);
240 pub fn fmpz_mat_scalar_mod_fmpz(
241 B: *mut fmpz_mat_struct,
242 A: *const fmpz_mat_struct,
243 m: *const fmpz,
244 );
245 pub fn fmpz_mat_mul(
246 C: *mut fmpz_mat_struct,
247 A: *const fmpz_mat_struct,
248 B: *const fmpz_mat_struct,
249 );
250 pub fn fmpz_mat_mul_classical(
251 C: *mut fmpz_mat_struct,
252 A: *const fmpz_mat_struct,
253 B: *const fmpz_mat_struct,
254 );
255 pub fn fmpz_mat_mul_strassen(
256 C: *mut fmpz_mat_struct,
257 A: *const fmpz_mat_struct,
258 B: *const fmpz_mat_struct,
259 );
260 pub fn fmpz_mat_mul_classical_inline(
261 C: *mut fmpz_mat_struct,
262 A: *const fmpz_mat_struct,
263 B: *const fmpz_mat_struct,
264 );
265 pub fn _fmpz_mat_mul_multi_mod(
266 C: *mut fmpz_mat_struct,
267 A: *const fmpz_mat_struct,
268 B: *const fmpz_mat_struct,
269 bits: mp_limb_t,
270 );
271 pub fn fmpz_mat_mul_multi_mod(
272 C: *mut fmpz_mat_struct,
273 A: *const fmpz_mat_struct,
274 B: *const fmpz_mat_struct,
275 );
276 pub fn fmpz_mat_sqr_bodrato(B: *mut fmpz_mat_struct, A: *const fmpz_mat_struct);
277 pub fn fmpz_mat_sqr(B: *mut fmpz_mat_struct, A: *const fmpz_mat_struct);
278 pub fn fmpz_mat_pow(B: *mut fmpz_mat_struct, A: *const fmpz_mat_struct, exp: mp_limb_t);
279 pub fn fmpz_mat_kronecker_product(
280 C: *mut fmpz_mat_struct,
281 A: *const fmpz_mat_struct,
282 B: *const fmpz_mat_struct,
283 );
284 pub fn fmpz_mat_content(ret: *mut fmpz, A: *const fmpz_mat_struct);
285 pub fn fmpz_mat_swap_rows(
286 mat: *mut fmpz_mat_struct,
287 perm: *const mp_limb_signed_t,
288 r: mp_limb_signed_t,
289 s: mp_limb_signed_t,
290 );
291 pub fn fmpz_mat_invert_rows(mat: *mut fmpz_mat_struct, perm: *const mp_limb_signed_t);
292 pub fn fmpz_mat_swap_cols(
293 mat: *mut fmpz_mat_struct,
294 perm: *const mp_limb_signed_t,
295 r: mp_limb_signed_t,
296 s: mp_limb_signed_t,
297 );
298 pub fn fmpz_mat_invert_cols(mat: *mut fmpz_mat_struct, perm: *const mp_limb_signed_t);
299 pub fn fmpz_mat_find_pivot_any(
300 mat: *const fmpz_mat_struct,
301 start_row: mp_limb_signed_t,
302 end_row: mp_limb_signed_t,
303 c: mp_limb_signed_t,
304 ) -> mp_limb_signed_t;
305 pub fn fmpz_mat_find_pivot_smallest(
306 mat: *const fmpz_mat_struct,
307 start_row: mp_limb_signed_t,
308 end_row: mp_limb_signed_t,
309 c: mp_limb_signed_t,
310 ) -> mp_limb_signed_t;
311 pub fn fmpz_mat_fflu(
312 B: *mut fmpz_mat_struct,
313 den: *mut fmpz,
314 perm: *const mp_limb_signed_t,
315 A: *const fmpz_mat_struct,
316 rank_check: c_int,
317 ) -> mp_limb_signed_t;
318 pub fn fmpz_mat_rank_small_inplace(B: *mut fmpz_mat_struct) -> mp_limb_signed_t;
319 pub fn fmpz_mat_rref(
320 B: *mut fmpz_mat_struct,
321 den: *mut fmpz,
322 A: *const fmpz_mat_struct,
323 ) -> mp_limb_signed_t;
324 pub fn fmpz_mat_rref_fflu(
325 B: *mut fmpz_mat_struct,
326 den: *mut fmpz,
327 A: *const fmpz_mat_struct,
328 ) -> mp_limb_signed_t;
329 pub fn fmpz_mat_rref_mul(
330 B: *mut fmpz_mat_struct,
331 den: *mut fmpz,
332 A: *const fmpz_mat_struct,
333 ) -> mp_limb_signed_t;
334 pub fn fmpz_mat_is_in_rref_with_rank(
335 A: *mut fmpz_mat_struct,
336 den: *mut fmpz,
337 rank: mp_limb_signed_t,
338 ) -> c_int;
339 pub fn fmpz_mat_rref_mod(
340 perm: *mut mp_limb_signed_t,
341 A: *mut fmpz_mat_struct,
342 p: *const fmpz,
343 ) -> mp_limb_signed_t;
344 pub fn fmpz_mat_howell_form_mod(A: *mut fmpz_mat_struct, mod_: *const fmpz)
345 -> mp_limb_signed_t;
346 pub fn fmpz_mat_strong_echelon_form_mod(A: *mut fmpz_mat_struct, mod_: *const fmpz);
347 pub fn fmpz_mat_trace(trace: *mut fmpz, mat: *const fmpz_mat_struct);
348 pub fn fmpz_mat_det(det: *mut fmpz, A: *const fmpz_mat_struct);
349 pub fn fmpz_mat_det_cofactor(det: *mut fmpz, A: *const fmpz_mat_struct);
350 pub fn fmpz_mat_det_bareiss(det: *mut fmpz, A: *const fmpz_mat_struct);
351 pub fn fmpz_mat_det_modular(det: *mut fmpz, A: *const fmpz_mat_struct, proved: c_int);
352 pub fn fmpz_mat_det_modular_accelerated(
353 det: *mut fmpz,
354 A: *const fmpz_mat_struct,
355 proved: c_int,
356 );
357 pub fn fmpz_mat_det_modular_given_divisor(
358 det: *mut fmpz,
359 A: *const fmpz_mat_struct,
360 d: *const fmpz,
361 proved: c_int,
362 );
363 pub fn fmpz_mat_det_bound(bound: *mut fmpz, A: *const fmpz_mat_struct);
364 pub fn fmpz_mat_det_bound_nonzero(bound: *mut fmpz, A: *const fmpz_mat_struct);
365 pub fn fmpz_mat_det_divisor(d: *mut fmpz, A: *const fmpz_mat_struct);
366 pub fn fmpz_mat_similarity(A: *mut fmpz_mat_struct, r: mp_limb_signed_t, d: *const fmpz);
367 pub fn _fmpz_mat_charpoly_berkowitz(rop: *mut fmpz, op: *const fmpz_mat_struct);
368 pub fn fmpz_mat_charpoly_berkowitz(cp: *mut fmpz_poly_struct, mat: *const fmpz_mat_struct);
369 pub fn _fmpz_mat_charpoly_modular(rop: *mut fmpz, op: *const fmpz_mat_struct);
370 pub fn fmpz_mat_charpoly_modular(cp: *mut fmpz_poly_struct, mat: *const fmpz_mat_struct);
371 pub fn _fmpz_mat_charpoly(cp: *mut fmpz, mat: *const fmpz_mat_struct);
372 pub fn fmpz_mat_charpoly(cp: *mut fmpz_poly_struct, mat: *const fmpz_mat_struct);
373 pub fn _fmpz_mat_minpoly_modular(
374 rop: *mut fmpz,
375 op: *const fmpz_mat_struct,
376 ) -> mp_limb_signed_t;
377 pub fn fmpz_mat_minpoly_modular(cp: *mut fmpz_poly_struct, mat: *const fmpz_mat_struct);
378 pub fn _fmpz_mat_minpoly(cp: *mut fmpz, mat: *const fmpz_mat_struct) -> mp_limb_signed_t;
379 pub fn fmpz_mat_minpoly(cp: *mut fmpz_poly_struct, mat: *const fmpz_mat_struct);
380 pub fn fmpz_mat_rank(A: *const fmpz_mat_struct) -> mp_limb_signed_t;
381 pub fn fmpz_mat_solve_bound(
382 N: *mut fmpz,
383 D: *mut fmpz,
384 A: *const fmpz_mat_struct,
385 B: *const fmpz_mat_struct,
386 );
387 pub fn fmpz_mat_solve(
388 X: *mut fmpz_mat_struct,
389 den: *mut fmpz,
390 A: *const fmpz_mat_struct,
391 B: *const fmpz_mat_struct,
392 ) -> c_int;
393 pub fn fmpz_mat_solve_cramer(
394 X: *mut fmpz_mat_struct,
395 den: *mut fmpz,
396 A: *const fmpz_mat_struct,
397 B: *const fmpz_mat_struct,
398 ) -> c_int;
399 pub fn fmpz_mat_solve_fflu(
400 X: *mut fmpz_mat_struct,
401 den: *mut fmpz,
402 A: *const fmpz_mat_struct,
403 B: *const fmpz_mat_struct,
404 ) -> c_int;
405 pub fn fmpz_mat_solve_fflu_precomp(
406 X: *mut fmpz_mat_struct,
407 perm: *const mp_limb_signed_t,
408 FFLU: *const fmpz_mat_struct,
409 B: *const fmpz_mat_struct,
410 );
411 pub fn fmpz_mat_dixon_get_crt_primes(
419 num_primes: *mut mp_limb_signed_t,
420 A: *mut fmpz_mat_struct,
421 p: mp_limb_t,
422 ) -> *mut mp_limb_t;
423 pub fn fmpz_mat_solve_dixon(
435 X: *mut fmpz_mat_struct,
436 mod_: *mut fmpz,
437 A: *const fmpz_mat_struct,
438 B: *const fmpz_mat_struct,
439 ) -> c_int;
440 pub fn fmpz_mat_solve_dixon_den(
452 X: *mut fmpz_mat_struct,
453 den: *mut fmpz,
454 A: *const fmpz_mat_struct,
455 B: *const fmpz_mat_struct,
456 ) -> c_int;
457 pub fn fmpz_mat_solve_multi_mod_den(
458 X: *mut fmpz_mat_struct,
459 den: *mut fmpz,
460 A: *const fmpz_mat_struct,
461 B: *const fmpz_mat_struct,
462 ) -> c_int;
463 pub fn fmpz_mat_can_solve_multi_mod_den(
464 X: *mut fmpz_mat_struct,
465 den: *mut fmpz,
466 A: *const fmpz_mat_struct,
467 B: *const fmpz_mat_struct,
468 ) -> c_int;
469 pub fn fmpz_mat_nullspace(
470 res: *mut fmpz_mat_struct,
471 mat: *const fmpz_mat_struct,
472 ) -> mp_limb_signed_t;
473 pub fn fmpz_mat_inv(
474 B: *mut fmpz_mat_struct,
475 den: *mut fmpz,
476 A: *const fmpz_mat_struct,
477 ) -> c_int;
478 pub fn fmpz_mat_hnf(H: *mut fmpz_mat_struct, A: *const fmpz_mat_struct);
517 pub fn fmpz_mat_hnf_transform(
518 H: *mut fmpz_mat_struct,
519 U: *mut fmpz_mat_struct,
520 A: *const fmpz_mat_struct,
521 );
522 pub fn fmpz_mat_hnf_classical(H: *mut fmpz_mat_struct, A: *const fmpz_mat_struct);
523 pub fn fmpz_mat_hnf_xgcd(H: *mut fmpz_mat_struct, A: *const fmpz_mat_struct);
524 pub fn fmpz_mat_hnf_minors(H: *mut fmpz_mat_struct, A: *const fmpz_mat_struct);
525 pub fn fmpz_mat_hnf_minors_transform(
526 H: *mut fmpz_mat_struct,
527 U: *mut fmpz_mat_struct,
528 A: *const fmpz_mat_struct,
529 );
530 pub fn fmpz_mat_hnf_modular(H: *mut fmpz_mat_struct, A: *const fmpz_mat_struct, D: *const fmpz);
531 pub fn fmpz_mat_hnf_modular_eldiv(A: *mut fmpz_mat_struct, D: *const fmpz);
532 pub fn fmpz_mat_hnf_pernet_stein(
533 H: *mut fmpz_mat_struct,
534 A: *const fmpz_mat_struct,
535 state: *const flint_rand_s,
536 );
537 pub fn fmpz_mat_is_in_hnf(A: *const fmpz_mat_struct) -> c_int;
538 pub fn fmpz_mat_snf(S: *mut fmpz_mat_struct, A: *const fmpz_mat_struct);
539 pub fn fmpz_mat_snf_diagonal(S: *mut fmpz_mat_struct, A: *const fmpz_mat_struct);
540 pub fn fmpz_mat_snf_kannan_bachem(S: *mut fmpz_mat_struct, A: *const fmpz_mat_struct);
541 pub fn fmpz_mat_snf_iliopoulos(
542 S: *mut fmpz_mat_struct,
543 A: *const fmpz_mat_struct,
544 mod_: *const fmpz,
545 );
546 pub fn fmpz_mat_is_in_snf(A: *const fmpz_mat_struct) -> c_int;
547 pub fn fmpz_mat_is_hadamard(A: *const fmpz_mat_struct) -> c_int;
548 pub fn fmpz_mat_hadamard(A: *mut fmpz_mat_struct) -> c_int;
549 pub fn fmpz_mat_gram(B: *mut fmpz_mat_struct, A: *const fmpz_mat_struct);
550 pub fn fmpz_mat_is_reduced(A: *const fmpz_mat_struct, delta: f64, eta: f64) -> c_int;
563 pub fn fmpz_mat_is_reduced_gram(A: *const fmpz_mat_struct, delta: f64, eta: f64) -> c_int;
564 pub fn fmpz_mat_is_reduced_with_removal(
565 A: *const fmpz_mat_struct,
566 delta: f64,
567 eta: f64,
568 gs_B: *mut fmpz,
569 newd: c_int,
570 ) -> c_int;
571 pub fn fmpz_mat_is_reduced_gram_with_removal(
572 A: *const fmpz_mat_struct,
573 delta: f64,
574 eta: f64,
575 gs_B: *const fmpz,
576 newd: c_int,
577 ) -> c_int;
578 pub fn fmpz_mat_lll_original(A: *mut fmpz_mat_struct, delta: *const fmpq, eta: *const fmpq);
579 pub fn fmpz_mat_lll_storjohann(A: *mut fmpz_mat_struct, delta: *const fmpq, eta: *const fmpq);
580 pub fn fmpz_mat_col_partition(
581 part: *mut mp_limb_signed_t,
582 M: *const fmpz_mat_struct,
583 short_circuit: c_int,
584 ) -> c_int;
585 pub fn fmpz_mat_next_col_van_hoeij(
586 M: *mut fmpz_mat_struct,
587 P: *mut fmpz,
588 col: *mut fmpz_mat_struct,
589 exp: mp_limb_signed_t,
590 U_exp: mp_limb_signed_t,
591 ) -> c_int;
592}