1#![allow(non_camel_case_types)]
2
3use crate::deps::*;
6use crate::flint::*;
7use crate::fq_nmod::{fq_nmod_ctx_struct, fq_nmod_struct};
8use crate::nmod_poly::nmod_poly_struct;
9use libc::{c_int, FILE};
10
11#[repr(C)]
12#[derive(Debug, Copy, Clone, Hash)]
13pub struct fq_nmod_mat_struct {
14 pub entries: *mut fq_nmod_struct,
15 pub r: mp_limb_signed_t,
16 pub c: mp_limb_signed_t,
17 pub rows: *mut *mut fq_nmod_struct,
18}
19
20pub type fq_nmod_mat_t = [fq_nmod_mat_struct; 1usize];
21
22extern "C" {
23 pub fn FQ_NMOD_MAT_MUL_KS_CUTOFF(
24 r: mp_limb_signed_t,
25 c: mp_limb_signed_t,
26 ctx: *mut fq_nmod_ctx_struct,
27 ) -> c_int;
28 pub fn fq_nmod_mat_init(
29 mat: *mut fq_nmod_mat_struct,
30 rows: mp_limb_signed_t,
31 cols: mp_limb_signed_t,
32 ctx: *mut fq_nmod_ctx_struct,
33 );
34 pub fn fq_nmod_mat_init_set(
35 mat: *mut fq_nmod_mat_struct,
36 src: *mut fq_nmod_mat_struct,
37 ctx: *mut fq_nmod_ctx_struct,
38 );
39 pub fn fq_nmod_mat_swap(
40 mat1: *mut fq_nmod_mat_struct,
41 mat2: *mut fq_nmod_mat_struct,
42 ctx: *mut fq_nmod_ctx_struct,
43 );
44 pub fn fq_nmod_mat_set(
45 mat1: *mut fq_nmod_mat_struct,
46 mat2: *mut fq_nmod_mat_struct,
47 ctx: *mut fq_nmod_ctx_struct,
48 );
49 pub fn fq_nmod_mat_clear(mat: *mut fq_nmod_mat_struct, ctx: *mut fq_nmod_ctx_struct);
50 pub fn fq_nmod_mat_equal(
51 mat1: *mut fq_nmod_mat_struct,
52 mat2: *mut fq_nmod_mat_struct,
53 ctx: *mut fq_nmod_ctx_struct,
54 ) -> c_int;
55 pub fn fq_nmod_mat_is_zero(mat: *mut fq_nmod_mat_struct, ctx: *mut fq_nmod_ctx_struct)
56 -> c_int;
57 pub fn fq_nmod_mat_is_empty(
58 mat: *mut fq_nmod_mat_struct,
59 ctx: *mut fq_nmod_ctx_struct,
60 ) -> c_int;
61 pub fn fq_nmod_mat_is_square(
62 mat: *mut fq_nmod_mat_struct,
63 ctx: *mut fq_nmod_ctx_struct,
64 ) -> c_int;
65 pub fn fq_nmod_mat_entry(
66 mat: *mut fq_nmod_mat_struct,
67 i: mp_limb_signed_t,
68 j: mp_limb_signed_t,
69 ) -> *mut fq_nmod_struct;
70 pub fn fq_nmod_mat_entry_set(
71 mat: *mut fq_nmod_mat_struct,
72 i: mp_limb_signed_t,
73 j: mp_limb_signed_t,
74 x: *mut nmod_poly_struct,
75 ctx: *mut fq_nmod_ctx_struct,
76 );
77 pub fn fq_nmod_mat_nrows(
78 mat: *mut fq_nmod_mat_struct,
79 ctx: *mut fq_nmod_ctx_struct,
80 ) -> mp_limb_signed_t;
81 pub fn fq_nmod_mat_ncols(
82 mat: *mut fq_nmod_mat_struct,
83 ctx: *mut fq_nmod_ctx_struct,
84 ) -> mp_limb_signed_t;
85 pub fn fq_nmod_mat_swap_rows(
86 mat: *mut fq_nmod_mat_struct,
87 perm: *mut mp_limb_signed_t,
88 r: mp_limb_signed_t,
89 s: mp_limb_signed_t,
90 ctx: *mut fq_nmod_ctx_struct,
91 );
92 pub fn fq_nmod_mat_invert_rows(
93 mat: *mut fq_nmod_mat_struct,
94 perm: *mut mp_limb_signed_t,
95 ctx: *mut fq_nmod_ctx_struct,
96 );
97 pub fn fq_nmod_mat_swap_cols(
98 mat: *mut fq_nmod_mat_struct,
99 perm: *mut mp_limb_signed_t,
100 r: mp_limb_signed_t,
101 s: mp_limb_signed_t,
102 ctx: *mut fq_nmod_ctx_struct,
103 );
104 pub fn fq_nmod_mat_invert_cols(
105 mat: *mut fq_nmod_mat_struct,
106 perm: *mut mp_limb_signed_t,
107 ctx: *mut fq_nmod_ctx_struct,
108 );
109 pub fn fq_nmod_mat_zero(A: *mut fq_nmod_mat_struct, ctx: *mut fq_nmod_ctx_struct);
110 pub fn fq_nmod_mat_window_init(
111 window: *mut fq_nmod_mat_struct,
112 mat: *mut fq_nmod_mat_struct,
113 r1: mp_limb_signed_t,
114 c1: mp_limb_signed_t,
115 r2: mp_limb_signed_t,
116 c2: mp_limb_signed_t,
117 ctx: *mut fq_nmod_ctx_struct,
118 );
119 pub fn fq_nmod_mat_window_clear(window: *mut fq_nmod_mat_struct, ctx: *mut fq_nmod_ctx_struct);
120 pub fn fq_nmod_mat_concat_horizontal(
121 res: *mut fq_nmod_mat_struct,
122 mat1: *mut fq_nmod_mat_struct,
123 mat2: *mut fq_nmod_mat_struct,
124 ctx: *mut fq_nmod_ctx_struct,
125 );
126 pub fn fq_nmod_mat_concat_vertical(
127 res: *mut fq_nmod_mat_struct,
128 mat1: *mut fq_nmod_mat_struct,
129 mat2: *mut fq_nmod_mat_struct,
130 ctx: *mut fq_nmod_ctx_struct,
131 );
132 pub fn fq_nmod_mat_fprint(
133 file: *mut FILE,
134 mat: *mut fq_nmod_mat_struct,
135 ctx: *mut fq_nmod_ctx_struct,
136 ) -> c_int;
137 pub fn fq_nmod_mat_fprint_pretty(
138 file: *mut FILE,
139 mat: *mut fq_nmod_mat_struct,
140 ctx: *mut fq_nmod_ctx_struct,
141 ) -> c_int;
142 pub fn fq_nmod_mat_print(mat: *mut fq_nmod_mat_struct, ctx: *mut fq_nmod_ctx_struct) -> c_int;
143 pub fn fq_nmod_mat_print_pretty(
144 mat: *mut fq_nmod_mat_struct,
145 ctx: *mut fq_nmod_ctx_struct,
146 ) -> c_int;
147 pub fn fq_nmod_mat_randtest(
148 mat: *mut fq_nmod_mat_struct,
149 state: *mut flint_rand_s,
150 ctx: *mut fq_nmod_ctx_struct,
151 );
152 pub fn fq_nmod_mat_randrank(
153 mat: *mut fq_nmod_mat_struct,
154 state: *mut flint_rand_s,
155 rank: mp_limb_signed_t,
156 ctx: *mut fq_nmod_ctx_struct,
157 );
158 pub fn fq_nmod_mat_randpermdiag(
159 mat: *mut fq_nmod_mat_struct,
160 state: *mut flint_rand_s,
161 diag: *mut fq_nmod_struct,
162 n: mp_limb_signed_t,
163 ctx: *mut fq_nmod_ctx_struct,
164 ) -> c_int;
165 pub fn fq_nmod_mat_randops(
166 mat: *mut fq_nmod_mat_struct,
167 count: mp_limb_signed_t,
168 state: *mut flint_rand_s,
169 ctx: *mut fq_nmod_ctx_struct,
170 );
171 pub fn fq_nmod_mat_randtril(
172 mat: *mut fq_nmod_mat_struct,
173 state: *mut flint_rand_s,
174 unit: c_int,
175 ctx: *mut fq_nmod_ctx_struct,
176 );
177 pub fn fq_nmod_mat_randtriu(
178 mat: *mut fq_nmod_mat_struct,
179 state: *mut flint_rand_s,
180 unit: c_int,
181 ctx: *mut fq_nmod_ctx_struct,
182 );
183 pub fn fq_nmod_mat_add(
184 C: *mut fq_nmod_mat_struct,
185 A: *mut fq_nmod_mat_struct,
186 B: *mut fq_nmod_mat_struct,
187 ctx: *mut fq_nmod_ctx_struct,
188 );
189 pub fn fq_nmod_mat_sub(
190 C: *mut fq_nmod_mat_struct,
191 A: *mut fq_nmod_mat_struct,
192 B: *mut fq_nmod_mat_struct,
193 ctx: *mut fq_nmod_ctx_struct,
194 );
195 pub fn fq_nmod_mat_neg(
196 B: *mut fq_nmod_mat_struct,
197 A: *mut fq_nmod_mat_struct,
198 ctx: *mut fq_nmod_ctx_struct,
199 );
200 pub fn fq_nmod_mat_submul(
201 D: *mut fq_nmod_mat_struct,
202 C: *mut fq_nmod_mat_struct,
203 A: *mut fq_nmod_mat_struct,
204 B: *mut fq_nmod_mat_struct,
205 ctx: *mut fq_nmod_ctx_struct,
206 );
207 pub fn fq_nmod_mat_mul(
208 C: *mut fq_nmod_mat_struct,
209 A: *mut fq_nmod_mat_struct,
210 B: *mut fq_nmod_mat_struct,
211 ctx: *mut fq_nmod_ctx_struct,
212 );
213 pub fn fq_nmod_mat_mul_classical(
214 C: *mut fq_nmod_mat_struct,
215 A: *mut fq_nmod_mat_struct,
216 B: *mut fq_nmod_mat_struct,
217 ctx: *mut fq_nmod_ctx_struct,
218 );
219 pub fn fq_nmod_mat_mul_KS(
220 C: *mut fq_nmod_mat_struct,
221 A: *mut fq_nmod_mat_struct,
222 B: *mut fq_nmod_mat_struct,
223 ctx: *mut fq_nmod_ctx_struct,
224 );
225 pub fn fq_nmod_mat_lu(
226 P: *mut mp_limb_signed_t,
227 A: *mut fq_nmod_mat_struct,
228 rank_check: c_int,
229 ctx: *mut fq_nmod_ctx_struct,
230 ) -> mp_limb_signed_t;
231 pub fn fq_nmod_mat_lu_recursive(
232 P: *mut mp_limb_signed_t,
233 A: *mut fq_nmod_mat_struct,
234 rank_check: c_int,
235 ctx: *mut fq_nmod_ctx_struct,
236 ) -> mp_limb_signed_t;
237 pub fn fq_nmod_mat_lu_classical(
238 P: *mut mp_limb_signed_t,
239 A: *mut fq_nmod_mat_struct,
240 rank_check: c_int,
241 ctx: *mut fq_nmod_ctx_struct,
242 ) -> mp_limb_signed_t;
243 pub fn fq_nmod_mat_inv(
244 B: *mut fq_nmod_mat_struct,
245 A: *mut fq_nmod_mat_struct,
246 ctx: *mut fq_nmod_ctx_struct,
247 ) -> c_int;
248 pub fn fq_nmod_mat_rref(
249 A: *mut fq_nmod_mat_struct,
250 ctx: *mut fq_nmod_ctx_struct,
251 ) -> mp_limb_signed_t;
252 pub fn fq_nmod_mat_reduce_row(
253 A: *mut fq_nmod_mat_struct,
254 P: *mut mp_limb_signed_t,
255 L: *mut mp_limb_signed_t,
256 m: mp_limb_signed_t,
257 ctx: *mut fq_nmod_ctx_struct,
258 ) -> mp_limb_signed_t;
259 pub fn fq_nmod_mat_nullspace(
260 X: *mut fq_nmod_mat_struct,
261 A: *mut fq_nmod_mat_struct,
262 ctx: *mut fq_nmod_ctx_struct,
263 ) -> mp_limb_signed_t;
264 pub fn fq_nmod_mat_rank(
265 A: *mut fq_nmod_mat_struct,
266 ctx: *mut fq_nmod_ctx_struct,
267 ) -> mp_limb_signed_t;
268 pub fn fq_nmod_mat_solve_tril(
269 X: *mut fq_nmod_mat_struct,
270 L: *mut fq_nmod_mat_struct,
271 B: *mut fq_nmod_mat_struct,
272 unit: c_int,
273 ctx: *mut fq_nmod_ctx_struct,
274 );
275 pub fn fq_nmod_mat_solve_tril_classical(
276 X: *mut fq_nmod_mat_struct,
277 L: *mut fq_nmod_mat_struct,
278 B: *mut fq_nmod_mat_struct,
279 unit: c_int,
280 ctx: *mut fq_nmod_ctx_struct,
281 );
282 pub fn fq_nmod_mat_solve_tril_recursive(
283 X: *mut fq_nmod_mat_struct,
284 L: *mut fq_nmod_mat_struct,
285 B: *mut fq_nmod_mat_struct,
286 unit: c_int,
287 ctx: *mut fq_nmod_ctx_struct,
288 );
289 pub fn fq_nmod_mat_solve_triu(
290 X: *mut fq_nmod_mat_struct,
291 U: *mut fq_nmod_mat_struct,
292 B: *mut fq_nmod_mat_struct,
293 unit: c_int,
294 ctx: *mut fq_nmod_ctx_struct,
295 );
296 pub fn fq_nmod_mat_solve_triu_classical(
297 X: *mut fq_nmod_mat_struct,
298 U: *mut fq_nmod_mat_struct,
299 B: *mut fq_nmod_mat_struct,
300 unit: c_int,
301 ctx: *mut fq_nmod_ctx_struct,
302 );
303 pub fn fq_nmod_mat_solve_triu_recursive(
304 X: *mut fq_nmod_mat_struct,
305 U: *mut fq_nmod_mat_struct,
306 B: *mut fq_nmod_mat_struct,
307 unit: c_int,
308 ctx: *mut fq_nmod_ctx_struct,
309 );
310 pub fn fq_nmod_mat_solve(
311 X: *mut fq_nmod_mat_struct,
312 A: *mut fq_nmod_mat_struct,
313 C: *mut fq_nmod_mat_struct,
314 ctx: *mut fq_nmod_ctx_struct,
315 ) -> c_int;
316 pub fn fq_nmod_mat_can_solve(
317 X: *mut fq_nmod_mat_struct,
318 A: *mut fq_nmod_mat_struct,
319 B: *mut fq_nmod_mat_struct,
320 ctx: *mut fq_nmod_ctx_struct,
321 ) -> c_int;
322 pub fn fq_nmod_mat_similarity(
323 A: *mut fq_nmod_mat_struct,
324 r: mp_limb_signed_t,
325 d: *mut nmod_poly_struct,
326 ctx: *mut fq_nmod_ctx_struct,
327 );
328}