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