flint_sys/
fq_mat.rs

1#![allow(non_camel_case_types)]
2
3//! *See the [FLINT documentation](http://flintlib.org/doc/fq_mat.html).
4
5use crate::deps::*;
6use crate::flint::*;
7use crate::fmpz_poly::fmpz_poly_struct;
8use crate::fq::{fq_ctx_struct, fq_struct};
9use crate::fq_nmod::fq_nmod_ctx_struct;
10use crate::nmod_mat::nmod_mat_struct;
11use crate::nmod_poly::nmod_poly_struct;
12use libc::{c_int, FILE};
13
14#[repr(C)]
15#[derive(Debug, Copy, Clone, Hash)]
16pub struct fq_mat_struct {
17    pub entries: *mut fq_struct,
18    pub r: mp_limb_signed_t,
19    pub c: mp_limb_signed_t,
20    pub rows: *mut *mut fq_struct,
21}
22
23pub type fq_mat_t = [fq_mat_struct; 1usize];
24
25extern "C" {
26    pub fn FQ_MAT_MUL_KS_CUTOFF(
27        r: mp_limb_signed_t,
28        c: mp_limb_signed_t,
29        ctx: *mut fq_ctx_struct,
30    ) -> c_int;
31    pub fn fq_mat_init(
32        mat: *mut fq_mat_struct,
33        rows: mp_limb_signed_t,
34        cols: mp_limb_signed_t,
35        ctx: *mut fq_ctx_struct,
36    );
37    pub fn fq_mat_init_set(
38        mat: *mut fq_mat_struct,
39        src: *mut fq_mat_struct,
40        ctx: *mut fq_ctx_struct,
41    );
42    pub fn fq_mat_swap(mat1: *mut fq_mat_struct, mat2: *mut fq_mat_struct, ctx: *mut fq_ctx_struct);
43    pub fn fq_mat_set(mat1: *mut fq_mat_struct, mat2: *mut fq_mat_struct, ctx: *mut fq_ctx_struct);
44    pub fn fq_mat_clear(mat: *mut fq_mat_struct, ctx: *mut fq_ctx_struct);
45    pub fn fq_mat_equal(
46        mat1: *mut fq_mat_struct,
47        mat2: *mut fq_mat_struct,
48        ctx: *mut fq_ctx_struct,
49    ) -> c_int;
50    pub fn fq_mat_is_zero(mat: *mut fq_mat_struct, ctx: *mut fq_ctx_struct) -> c_int;
51    pub fn fq_mat_is_empty(mat: *mut fq_mat_struct, ctx: *mut fq_ctx_struct) -> c_int;
52    pub fn fq_mat_is_square(mat: *mut fq_mat_struct, ctx: *mut fq_ctx_struct) -> c_int;
53    pub fn fq_mat_entry(
54        mat: *mut fq_mat_struct,
55        i: mp_limb_signed_t,
56        j: mp_limb_signed_t,
57    ) -> *mut fq_struct;
58    pub fn fq_mat_entry_set(
59        mat: *mut fq_mat_struct,
60        i: mp_limb_signed_t,
61        j: mp_limb_signed_t,
62        x: *mut fmpz_poly_struct,
63        ctx: *mut fq_ctx_struct,
64    );
65    pub fn fq_mat_nrows(mat: *mut fq_mat_struct, ctx: *mut fq_ctx_struct) -> mp_limb_signed_t;
66    pub fn fq_mat_ncols(mat: *mut fq_mat_struct, ctx: *mut fq_ctx_struct) -> mp_limb_signed_t;
67    pub fn fq_mat_swap_rows(
68        mat: *mut fq_mat_struct,
69        perm: *mut mp_limb_signed_t,
70        r: mp_limb_signed_t,
71        s: mp_limb_signed_t,
72        ctx: *mut fq_ctx_struct,
73    );
74    pub fn fq_mat_invert_rows(
75        mat: *mut fq_mat_struct,
76        perm: *mut mp_limb_signed_t,
77        ctx: *mut fq_ctx_struct,
78    );
79    pub fn fq_mat_swap_cols(
80        mat: *mut fq_mat_struct,
81        perm: *mut mp_limb_signed_t,
82        r: mp_limb_signed_t,
83        s: mp_limb_signed_t,
84        ctx: *mut fq_ctx_struct,
85    );
86    pub fn fq_mat_invert_cols(
87        mat: *mut fq_mat_struct,
88        perm: *mut mp_limb_signed_t,
89        ctx: *mut fq_ctx_struct,
90    );
91    pub fn fq_mat_zero(A: *mut fq_mat_struct, ctx: *mut fq_ctx_struct);
92    pub fn fq_mat_window_init(
93        window: *mut fq_mat_struct,
94        mat: *mut fq_mat_struct,
95        r1: mp_limb_signed_t,
96        c1: mp_limb_signed_t,
97        r2: mp_limb_signed_t,
98        c2: mp_limb_signed_t,
99        ctx: *mut fq_ctx_struct,
100    );
101    pub fn fq_mat_window_clear(window: *mut fq_mat_struct, ctx: *mut fq_ctx_struct);
102    pub fn fq_mat_concat_horizontal(
103        res: *mut fq_mat_struct,
104        mat1: *mut fq_mat_struct,
105        mat2: *mut fq_mat_struct,
106        ctx: *mut fq_ctx_struct,
107    );
108    pub fn fq_mat_concat_vertical(
109        res: *mut fq_mat_struct,
110        mat1: *mut fq_mat_struct,
111        mat2: *mut fq_mat_struct,
112        ctx: *mut fq_ctx_struct,
113    );
114    pub fn fq_mat_fprint(
115        file: *mut FILE,
116        mat: *mut fq_mat_struct,
117        ctx: *mut fq_ctx_struct,
118    ) -> c_int;
119    pub fn fq_mat_fprint_pretty(
120        file: *mut FILE,
121        mat: *mut fq_mat_struct,
122        ctx: *mut fq_ctx_struct,
123    ) -> c_int;
124    pub fn fq_mat_print(mat: *mut fq_mat_struct, ctx: *mut fq_ctx_struct) -> c_int;
125    pub fn fq_mat_print_pretty(mat: *mut fq_mat_struct, ctx: *mut fq_ctx_struct) -> c_int;
126    pub fn fq_mat_randtest(
127        mat: *mut fq_mat_struct,
128        state: *mut flint_rand_s,
129        ctx: *mut fq_ctx_struct,
130    );
131    pub fn fq_mat_randrank(
132        mat: *mut fq_mat_struct,
133        state: *mut flint_rand_s,
134        rank: mp_limb_signed_t,
135        ctx: *mut fq_ctx_struct,
136    );
137    pub fn fq_mat_randpermdiag(
138        mat: *mut fq_mat_struct,
139        state: *mut flint_rand_s,
140        diag: *mut fq_struct,
141        n: mp_limb_signed_t,
142        ctx: *mut fq_ctx_struct,
143    ) -> c_int;
144    pub fn fq_mat_randops(
145        mat: *mut fq_mat_struct,
146        count: mp_limb_signed_t,
147        state: *mut flint_rand_s,
148        ctx: *mut fq_ctx_struct,
149    );
150    pub fn fq_mat_randtril(
151        mat: *mut fq_mat_struct,
152        state: *mut flint_rand_s,
153        unit: c_int,
154        ctx: *mut fq_ctx_struct,
155    );
156    pub fn fq_mat_randtriu(
157        mat: *mut fq_mat_struct,
158        state: *mut flint_rand_s,
159        unit: c_int,
160        ctx: *mut fq_ctx_struct,
161    );
162    pub fn fq_mat_add(
163        C: *mut fq_mat_struct,
164        A: *mut fq_mat_struct,
165        B: *mut fq_mat_struct,
166        ctx: *mut fq_ctx_struct,
167    );
168    pub fn fq_mat_sub(
169        C: *mut fq_mat_struct,
170        A: *mut fq_mat_struct,
171        B: *mut fq_mat_struct,
172        ctx: *mut fq_ctx_struct,
173    );
174    pub fn fq_mat_neg(B: *mut fq_mat_struct, A: *mut fq_mat_struct, ctx: *mut fq_ctx_struct);
175    pub fn fq_mat_submul(
176        D: *mut fq_mat_struct,
177        C: *mut fq_mat_struct,
178        A: *mut fq_mat_struct,
179        B: *mut fq_mat_struct,
180        ctx: *mut fq_ctx_struct,
181    );
182    pub fn fq_mat_mul(
183        C: *mut fq_mat_struct,
184        A: *mut fq_mat_struct,
185        B: *mut fq_mat_struct,
186        ctx: *mut fq_ctx_struct,
187    );
188    pub fn fq_mat_mul_classical(
189        C: *mut fq_mat_struct,
190        A: *mut fq_mat_struct,
191        B: *mut fq_mat_struct,
192        ctx: *mut fq_ctx_struct,
193    );
194    pub fn fq_mat_mul_KS(
195        C: *mut fq_mat_struct,
196        A: *mut fq_mat_struct,
197        B: *mut fq_mat_struct,
198        ctx: *mut fq_ctx_struct,
199    );
200    pub fn fq_mat_lu(
201        P: *mut mp_limb_signed_t,
202        A: *mut fq_mat_struct,
203        rank_check: c_int,
204        ctx: *mut fq_ctx_struct,
205    ) -> mp_limb_signed_t;
206    pub fn fq_mat_lu_recursive(
207        P: *mut mp_limb_signed_t,
208        A: *mut fq_mat_struct,
209        rank_check: c_int,
210        ctx: *mut fq_ctx_struct,
211    ) -> mp_limb_signed_t;
212    pub fn fq_mat_lu_classical(
213        P: *mut mp_limb_signed_t,
214        A: *mut fq_mat_struct,
215        rank_check: c_int,
216        ctx: *mut fq_ctx_struct,
217    ) -> mp_limb_signed_t;
218    pub fn fq_mat_inv(
219        B: *mut fq_mat_struct,
220        A: *mut fq_mat_struct,
221        ctx: *mut fq_ctx_struct,
222    ) -> c_int;
223    pub fn fq_mat_rref(A: *mut fq_mat_struct, ctx: *mut fq_ctx_struct) -> mp_limb_signed_t;
224    pub fn fq_mat_reduce_row(
225        A: *mut fq_mat_struct,
226        P: *mut mp_limb_signed_t,
227        L: *mut mp_limb_signed_t,
228        m: mp_limb_signed_t,
229        ctx: *mut fq_ctx_struct,
230    ) -> mp_limb_signed_t;
231    pub fn fq_mat_nullspace(
232        X: *mut fq_mat_struct,
233        A: *mut fq_mat_struct,
234        ctx: *mut fq_ctx_struct,
235    ) -> mp_limb_signed_t;
236    pub fn fq_mat_rank(A: *mut fq_mat_struct, ctx: *mut fq_ctx_struct) -> mp_limb_signed_t;
237    pub fn fq_mat_solve_tril(
238        X: *mut fq_mat_struct,
239        L: *mut fq_mat_struct,
240        B: *mut fq_mat_struct,
241        unit: c_int,
242        ctx: *mut fq_ctx_struct,
243    );
244    pub fn fq_mat_solve_tril_classical(
245        X: *mut fq_mat_struct,
246        L: *mut fq_mat_struct,
247        B: *mut fq_mat_struct,
248        unit: c_int,
249        ctx: *mut fq_ctx_struct,
250    );
251    pub fn fq_mat_solve_tril_recursive(
252        X: *mut fq_mat_struct,
253        L: *mut fq_mat_struct,
254        B: *mut fq_mat_struct,
255        unit: c_int,
256        ctx: *mut fq_ctx_struct,
257    );
258    pub fn fq_mat_solve_triu(
259        X: *mut fq_mat_struct,
260        U: *mut fq_mat_struct,
261        B: *mut fq_mat_struct,
262        unit: c_int,
263        ctx: *mut fq_ctx_struct,
264    );
265    pub fn fq_mat_solve_triu_classical(
266        X: *mut fq_mat_struct,
267        U: *mut fq_mat_struct,
268        B: *mut fq_mat_struct,
269        unit: c_int,
270        ctx: *mut fq_ctx_struct,
271    );
272    pub fn fq_mat_solve_triu_recursive(
273        X: *mut fq_mat_struct,
274        U: *mut fq_mat_struct,
275        B: *mut fq_mat_struct,
276        unit: c_int,
277        ctx: *mut fq_ctx_struct,
278    );
279    pub fn fq_mat_solve(
280        X: *mut fq_mat_struct,
281        A: *mut fq_mat_struct,
282        C: *mut fq_mat_struct,
283        ctx: *mut fq_ctx_struct,
284    ) -> c_int;
285    pub fn fq_mat_can_solve(
286        X: *mut fq_mat_struct,
287        A: *mut fq_mat_struct,
288        B: *mut fq_mat_struct,
289        ctx: *mut fq_ctx_struct,
290    ) -> c_int;
291    pub fn fq_mat_similarity(
292        A: *mut fq_mat_struct,
293        r: mp_limb_signed_t,
294        d: *mut fmpz_poly_struct,
295        ctx: *mut fq_ctx_struct,
296    );
297    pub fn fq_nmod_embed_gens(
298        gen_sub: *mut nmod_poly_struct,
299        gen_sup: *mut nmod_poly_struct,
300        minpoly: *mut nmod_poly_struct,
301        sub_ctx: *mut fq_nmod_ctx_struct,
302        sup_ctx: *mut fq_nmod_ctx_struct,
303    );
304    pub fn _fq_nmod_embed_gens_naive(
305        gen_sub: *mut nmod_poly_struct,
306        gen_sup: *mut nmod_poly_struct,
307        minpoly: *mut nmod_poly_struct,
308        sub_ctx: *mut fq_nmod_ctx_struct,
309        sup_ctx: *mut fq_nmod_ctx_struct,
310    );
311    pub fn _fq_nmod_embed_gens_allombert(
312        gen_sub: *mut nmod_poly_struct,
313        gen_sup: *mut nmod_poly_struct,
314        minpoly: *mut nmod_poly_struct,
315        sub_ctx: *mut fq_nmod_ctx_struct,
316        sup_ctx: *mut fq_nmod_ctx_struct,
317    );
318    pub fn fq_nmod_embed_matrices(
319        embed: *mut nmod_mat_struct,
320        project: *mut nmod_mat_struct,
321        gen_sub: *mut nmod_poly_struct,
322        sub_ctx: *mut fq_nmod_ctx_struct,
323        gen_sup: *mut nmod_poly_struct,
324        sup_ctx: *mut fq_nmod_ctx_struct,
325        gen_minpoly: *mut nmod_poly_struct,
326    );
327    pub fn fq_nmod_embed_trace_matrix(
328        res: *mut nmod_mat_struct,
329        basis: *mut nmod_mat_struct,
330        sub_ctx: *mut fq_nmod_ctx_struct,
331        sup_ctx: *mut fq_nmod_ctx_struct,
332    );
333    pub fn fq_nmod_embed_composition_matrix_sub(
334        matrix: *mut nmod_mat_struct,
335        gen: *mut nmod_poly_struct,
336        ctx: *mut fq_nmod_ctx_struct,
337        trunc: mp_limb_signed_t,
338    );
339    pub fn fq_nmod_embed_mul_matrix(
340        matrix: *mut nmod_mat_struct,
341        gen: *mut nmod_poly_struct,
342        ctx: *mut fq_nmod_ctx_struct,
343    );
344    pub fn fq_nmod_embed_mono_to_dual_matrix(
345        res: *mut nmod_mat_struct,
346        ctx: *mut fq_nmod_ctx_struct,
347    );
348    pub fn fq_nmod_embed_dual_to_mono_matrix(
349        res: *mut nmod_mat_struct,
350        ctx: *mut fq_nmod_ctx_struct,
351    );
352}