flint_sys/
fq_nmod_mat.rs

1#![allow(non_camel_case_types)]
2
3//! *See the [FLINT documentation](http://flintlib.org/doc/fq_nmod_mat.html).
4
5use 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}