flint_sys/
fmpq_mat.rs

1#![allow(non_camel_case_types)]
2
3//! See the [FLINT documentation](http://flintlib.org/doc/fmpq_mat.html).
4
5use crate::deps::*;
6use crate::flint::*;
7use crate::fmpq::fmpq;
8use crate::fmpq_poly::fmpq_poly_struct;
9use crate::fmpz::fmpz;
10use crate::fmpz_mat::fmpz_mat_struct;
11use libc::c_int;
12
13#[repr(C)]
14#[derive(Debug, Copy, Clone, Hash)]
15pub struct fmpq_mat_struct {
16    pub entries: *mut fmpq,
17    pub r: mp_limb_signed_t,
18    pub c: mp_limb_signed_t,
19    pub rows: *mut *mut fmpq,
20}
21
22pub type fmpq_mat_t = [fmpq_mat_struct; 1usize];
23
24extern "C" {
25    pub fn fmpq_mat_entry(
26        mat: *const fmpq_mat_struct,
27        i: mp_limb_signed_t,
28        j: mp_limb_signed_t,
29    ) -> *mut fmpq;
30    pub fn fmpq_mat_entry_num(
31        mat: *const fmpq_mat_struct,
32        i: mp_limb_signed_t,
33        j: mp_limb_signed_t,
34    ) -> *mut fmpz;
35    pub fn fmpq_mat_entry_den(
36        mat: *const fmpq_mat_struct,
37        i: mp_limb_signed_t,
38        j: mp_limb_signed_t,
39    ) -> *mut fmpz;
40    pub fn fmpq_mat_nrows(mat: *const fmpq_mat_struct) -> mp_limb_signed_t;
41    pub fn fmpq_mat_ncols(mat: *const fmpq_mat_struct) -> mp_limb_signed_t;
42    pub fn fmpq_mat_init(mat: *mut fmpq_mat_struct, rows: mp_limb_signed_t, cols: mp_limb_signed_t);
43    pub fn fmpq_mat_init_set(mat1: *mut fmpq_mat_struct, mat2: *const fmpq_mat_struct);
44    pub fn fmpq_mat_clear(mat: *mut fmpq_mat_struct);
45    pub fn fmpq_mat_swap(mat1: *mut fmpq_mat_struct, mat2: *mut fmpq_mat_struct);
46    pub fn fmpq_mat_window_init(
47        window: *mut fmpq_mat_struct,
48        mat: *const fmpq_mat_struct,
49        r1: mp_limb_signed_t,
50        c1: mp_limb_signed_t,
51        r2: mp_limb_signed_t,
52        c2: mp_limb_signed_t,
53    );
54    pub fn fmpq_mat_window_clear(window: *mut fmpq_mat_struct);
55    pub fn fmpq_mat_concat_horizontal(
56        res: *mut fmpq_mat_struct,
57        mat1: *const fmpq_mat_struct,
58        mat2: *const fmpq_mat_struct,
59    );
60    pub fn fmpq_mat_concat_vertical(
61        res: *mut fmpq_mat_struct,
62        mat1: *const fmpq_mat_struct,
63        mat2: *const fmpq_mat_struct,
64    );
65    pub fn fmpq_mat_print(mat: *const fmpq_mat_struct);
66    pub fn fmpq_mat_randbits(
67        mat: *mut fmpq_mat_struct,
68        state: *const flint_rand_s,
69        bits: mp_limb_t,
70    );
71    pub fn fmpq_mat_randtest(
72        mat: *mut fmpq_mat_struct,
73        state: *const flint_rand_s,
74        bits: mp_limb_t,
75    );
76    pub fn fmpq_mat_hilbert_matrix(mat: *const fmpq_mat_struct);
77    pub fn fmpq_mat_set(dest: *mut fmpq_mat_struct, src: *const fmpq_mat_struct);
78    pub fn fmpq_mat_zero(mat: *mut fmpq_mat_struct);
79    pub fn fmpq_mat_one(mat: *mut fmpq_mat_struct);
80    pub fn fmpq_mat_transpose(rop: *mut fmpq_mat_struct, op: *const fmpq_mat_struct);
81    pub fn fmpq_mat_add(
82        mat: *mut fmpq_mat_struct,
83        mat1: *const fmpq_mat_struct,
84        mat2: *const fmpq_mat_struct,
85    );
86    pub fn fmpq_mat_sub(
87        mat: *mut fmpq_mat_struct,
88        mat1: *const fmpq_mat_struct,
89        mat2: *const fmpq_mat_struct,
90    );
91    pub fn fmpq_mat_neg(rop: *mut fmpq_mat_struct, op: *const fmpq_mat_struct);
92    pub fn fmpq_mat_scalar_mul_fmpq(
93        rop: *mut fmpq_mat_struct,
94        op: *const fmpq_mat_struct,
95        x: *const fmpq,
96    );
97    pub fn fmpq_mat_scalar_mul_fmpz(
98        rop: *mut fmpq_mat_struct,
99        op: *const fmpq_mat_struct,
100        x: *const fmpz,
101    );
102    pub fn fmpq_mat_scalar_div_fmpz(
103        rop: *mut fmpq_mat_struct,
104        op: *const fmpq_mat_struct,
105        x: *const fmpz,
106    );
107    pub fn fmpq_mat_equal(mat1: *const fmpq_mat_struct, mat2: *const fmpq_mat_struct) -> c_int;
108    pub fn fmpq_mat_is_integral(mat: *const fmpq_mat_struct) -> c_int;
109    pub fn fmpq_mat_is_zero(mat: *const fmpq_mat_struct) -> c_int;
110    pub fn fmpq_mat_is_one(mat: *const fmpq_mat_struct) -> c_int;
111    pub fn fmpq_mat_is_empty(mat: *const fmpq_mat_struct) -> c_int;
112    pub fn fmpq_mat_is_square(mat: *const fmpq_mat_struct) -> c_int;
113    pub fn fmpq_mat_get_fmpz_mat(dest: *mut fmpz_mat_struct, mat: *const fmpq_mat_struct) -> c_int;
114    pub fn fmpq_mat_get_fmpz_mat_entrywise(
115        num: *mut fmpz_mat_struct,
116        den: *mut fmpz_mat_struct,
117        mat: *const fmpq_mat_struct,
118    );
119    pub fn fmpq_mat_get_fmpz_mat_matwise(
120        num: *mut fmpz_mat_struct,
121        den: *mut fmpz,
122        mat: *const fmpq_mat_struct,
123    );
124    pub fn fmpq_mat_get_fmpz_mat_rowwise(
125        num: *mut fmpz_mat_struct,
126        den: *mut fmpz,
127        mat: *const fmpq_mat_struct,
128    );
129    pub fn fmpq_mat_get_fmpz_mat_colwise(
130        num: *mut fmpz_mat_struct,
131        den: *mut fmpz,
132        mat: *const fmpq_mat_struct,
133    );
134    pub fn fmpq_mat_get_fmpz_mat_rowwise_2(
135        num: *mut fmpz_mat_struct,
136        num2: *mut fmpz_mat_struct,
137        den: *mut fmpz,
138        mat: *const fmpq_mat_struct,
139        mat2: *const fmpq_mat_struct,
140    );
141    pub fn fmpq_mat_get_fmpz_mat_mod_fmpz(
142        dest: *mut fmpz_mat_struct,
143        mat: *const fmpq_mat_struct,
144        mod_: *const fmpz,
145    );
146    pub fn fmpq_mat_set_fmpz_mat(dest: *mut fmpq_mat_struct, src: *const fmpz_mat_struct);
147    pub fn fmpq_mat_set_fmpz_mat_div_fmpz(
148        X: *mut fmpq_mat_struct,
149        Xmod: *const fmpz_mat_struct,
150        div: *const fmpz,
151    );
152    pub fn fmpq_mat_set_fmpz_mat_mod_fmpz(
153        X: *mut fmpq_mat_struct,
154        Xmod: *const fmpz_mat_struct,
155        mod_: *const fmpz,
156    ) -> c_int;
157    pub fn fmpq_mat_mul_direct(
158        C: *mut fmpq_mat_struct,
159        A: *const fmpq_mat_struct,
160        B: *const fmpq_mat_struct,
161    );
162    pub fn fmpq_mat_mul_cleared(
163        C: *mut fmpq_mat_struct,
164        A: *const fmpq_mat_struct,
165        B: *const fmpq_mat_struct,
166    );
167    pub fn fmpq_mat_mul(
168        C: *mut fmpq_mat_struct,
169        A: *const fmpq_mat_struct,
170        B: *const fmpq_mat_struct,
171    );
172    pub fn fmpq_mat_mul_fmpz_mat(
173        C: *mut fmpq_mat_struct,
174        A: *const fmpq_mat_struct,
175        B: *const fmpz_mat_struct,
176    );
177    pub fn fmpq_mat_mul_r_fmpz_mat(
178        C: *mut fmpq_mat_struct,
179        A: *const fmpz_mat_struct,
180        B: *const fmpq_mat_struct,
181    );
182    pub fn fmpq_mat_kronecker_product(
183        C: *mut fmpq_mat_struct,
184        A: *const fmpq_mat_struct,
185        B: *const fmpq_mat_struct,
186    );
187    pub fn fmpq_mat_swap_rows(
188        mat: *mut fmpq_mat_struct,
189        perm: *const mp_limb_signed_t,
190        r: mp_limb_signed_t,
191        s: mp_limb_signed_t,
192    );
193    pub fn fmpq_mat_invert_rows(mat: *mut fmpq_mat_struct, perm: *const mp_limb_signed_t);
194    pub fn fmpq_mat_swap_cols(
195        mat: *mut fmpq_mat_struct,
196        perm: *const mp_limb_signed_t,
197        r: mp_limb_signed_t,
198        s: mp_limb_signed_t,
199    );
200    pub fn fmpq_mat_invert_cols(mat: *mut fmpq_mat_struct, perm: *const mp_limb_signed_t);
201    pub fn fmpq_mat_trace(trace: *mut fmpq, mat: *const fmpq_mat_struct);
202    pub fn fmpq_mat_det(det: *mut fmpq, mat: *const fmpq_mat_struct);
203    pub fn fmpq_mat_solve_fmpz_mat_fraction_free(
204        X: *mut fmpq_mat_struct,
205        A: *const fmpz_mat_struct,
206        B: *const fmpz_mat_struct,
207    ) -> c_int;
208    pub fn fmpq_mat_solve_fraction_free(
209        X: *mut fmpq_mat_struct,
210        A: *const fmpq_mat_struct,
211        B: *const fmpq_mat_struct,
212    ) -> c_int;
213    pub fn fmpq_mat_solve_fmpz_mat_dixon(
214        X: *mut fmpq_mat_struct,
215        A: *const fmpz_mat_struct,
216        B: *const fmpz_mat_struct,
217    ) -> c_int;
218    pub fn fmpq_mat_solve_dixon(
219        X: *mut fmpq_mat_struct,
220        A: *const fmpq_mat_struct,
221        B: *const fmpq_mat_struct,
222    ) -> c_int;
223    pub fn fmpq_mat_solve_fmpz_mat_multi_mod(
224        X: *mut fmpq_mat_struct,
225        A: *const fmpz_mat_struct,
226        B: *const fmpz_mat_struct,
227    ) -> c_int;
228    pub fn fmpq_mat_solve_multi_mod(
229        X: *mut fmpq_mat_struct,
230        A: *const fmpq_mat_struct,
231        B: *const fmpq_mat_struct,
232    ) -> c_int;
233    pub fn fmpq_mat_can_solve_fmpz_mat_multi_mod(
234        X: *mut fmpq_mat_struct,
235        A: *const fmpz_mat_struct,
236        B: *const fmpz_mat_struct,
237    ) -> c_int;
238    pub fn fmpq_mat_can_solve_multi_mod(
239        X: *mut fmpq_mat_struct,
240        A: *const fmpq_mat_struct,
241        B: *const fmpq_mat_struct,
242    ) -> c_int;
243    pub fn fmpq_mat_solve_fmpz_mat(
244        X: *mut fmpq_mat_struct,
245        A: *const fmpz_mat_struct,
246        B: *const fmpz_mat_struct,
247    ) -> c_int;
248    pub fn fmpq_mat_solve(
249        X: *mut fmpq_mat_struct,
250        A: *const fmpq_mat_struct,
251        B: *const fmpq_mat_struct,
252    ) -> c_int;
253    pub fn fmpq_mat_inv(B: *mut fmpq_mat_struct, A: *const fmpq_mat_struct) -> c_int;
254    pub fn fmpq_mat_pivot(
255        perm: *mut mp_limb_signed_t,
256        mat: *mut fmpq_mat_struct,
257        r: mp_limb_signed_t,
258        c: mp_limb_signed_t,
259    ) -> c_int;
260    pub fn fmpq_mat_rref_classical(
261        B: *mut fmpq_mat_struct,
262        A: *const fmpq_mat_struct,
263    ) -> mp_limb_signed_t;
264    pub fn fmpq_mat_rref_fraction_free(
265        B: *mut fmpq_mat_struct,
266        A: *const fmpq_mat_struct,
267    ) -> mp_limb_signed_t;
268    pub fn fmpq_mat_rref(B: *mut fmpq_mat_struct, A: *const fmpq_mat_struct) -> mp_limb_signed_t;
269    pub fn fmpq_mat_gso(B: *mut fmpq_mat_struct, A: *const fmpq_mat_struct);
270    pub fn fmpq_mat_similarity(A: *mut fmpq_mat_struct, r: mp_limb_signed_t, d: *const fmpq);
271    pub fn _fmpq_mat_charpoly(coeffs: *mut fmpz, den: *mut fmpz, mat: *const fmpq_mat_struct);
272    pub fn fmpq_mat_charpoly(pol: *mut fmpq_poly_struct, mat: *const fmpq_mat_struct);
273    pub fn _fmpq_mat_minpoly(
274        coeffs: *mut fmpz,
275        den: *mut fmpz,
276        mat: *const fmpq_mat_struct,
277    ) -> mp_limb_signed_t;
278    pub fn fmpq_mat_minpoly(pol: *mut fmpq_poly_struct, mat: *const fmpq_mat_struct);
279}