flint_sys/
nmod_poly_mat.rs

1#![allow(non_camel_case_types)]
2
3//! *See the [FLINT documentation](http://flintlib.org/doc/nmod_poly_mat.html).
4
5use crate::deps::*;
6use crate::flint::*;
7use crate::nmod_mat::nmod_mat_struct;
8use crate::nmod_poly::nmod_poly_struct;
9use libc::{c_char, c_int};
10
11#[repr(C)]
12#[derive(Debug, Copy, Clone)]
13pub struct nmod_poly_mat_struct {
14    pub entries: *mut nmod_poly_struct,
15    pub r: mp_limb_signed_t,
16    pub c: mp_limb_signed_t,
17    pub rows: *mut *mut nmod_poly_struct,
18    pub modulus: mp_limb_t,
19}
20
21pub type nmod_poly_mat_t = [nmod_poly_mat_struct; 1usize];
22
23extern "C" {
24    pub fn nmod_poly_mat_entry(
25        mat: *mut nmod_poly_mat_struct,
26        i: mp_limb_signed_t,
27        j: mp_limb_signed_t,
28    ) -> *mut nmod_poly_struct;
29    pub fn nmod_poly_mat_init(
30        mat: *mut nmod_poly_mat_struct,
31        rows: mp_limb_signed_t,
32        cols: mp_limb_signed_t,
33        n: mp_limb_t,
34    );
35    pub fn nmod_poly_mat_init_set(mat: *mut nmod_poly_mat_struct, src: *mut nmod_poly_mat_struct);
36    pub fn nmod_poly_mat_swap(mat1: *mut nmod_poly_mat_struct, mat2: *mut nmod_poly_mat_struct);
37    pub fn nmod_poly_mat_set(mat1: *mut nmod_poly_mat_struct, mat2: *mut nmod_poly_mat_struct);
38    pub fn nmod_poly_mat_clear(mat: *mut nmod_poly_mat_struct);
39    pub fn nmod_poly_mat_nrows(mat: *mut nmod_poly_mat_struct) -> mp_limb_signed_t;
40    pub fn nmod_poly_mat_ncols(mat: *mut nmod_poly_mat_struct) -> mp_limb_signed_t;
41    pub fn nmod_poly_mat_modulus(mat: *mut nmod_poly_mat_struct) -> mp_limb_t;
42    pub fn nmod_poly_mat_equal(
43        mat1: *mut nmod_poly_mat_struct,
44        mat2: *mut nmod_poly_mat_struct,
45    ) -> c_int;
46    pub fn nmod_poly_mat_is_zero(mat: *mut nmod_poly_mat_struct) -> c_int;
47    pub fn nmod_poly_mat_is_one(mat: *mut nmod_poly_mat_struct) -> c_int;
48    pub fn nmod_poly_mat_is_empty(mat: *mut nmod_poly_mat_struct) -> c_int;
49    pub fn nmod_poly_mat_is_square(mat: *mut nmod_poly_mat_struct) -> c_int;
50    pub fn nmod_poly_mat_zero(mat: *mut nmod_poly_mat_struct);
51    pub fn nmod_poly_mat_one(mat: *mut nmod_poly_mat_struct);
52    pub fn nmod_poly_mat_randtest(
53        mat: *mut nmod_poly_mat_struct,
54        state: *mut flint_rand_s,
55        len: mp_limb_signed_t,
56    );
57    pub fn nmod_poly_mat_randtest_sparse(
58        A: *mut nmod_poly_mat_struct,
59        state: *mut flint_rand_s,
60        len: mp_limb_signed_t,
61        density: f32,
62    );
63    pub fn nmod_poly_mat_window_init(
64        window: *mut nmod_poly_mat_struct,
65        mat: *mut nmod_poly_mat_struct,
66        r1: mp_limb_signed_t,
67        c1: mp_limb_signed_t,
68        r2: mp_limb_signed_t,
69        c2: mp_limb_signed_t,
70    );
71    pub fn nmod_poly_mat_window_clear(window: *mut nmod_poly_mat_struct);
72    pub fn nmod_poly_mat_concat_horizontal(
73        res: *mut nmod_poly_mat_struct,
74        mat1: *mut nmod_poly_mat_struct,
75        mat2: *mut nmod_poly_mat_struct,
76    );
77    pub fn nmod_poly_mat_concat_vertical(
78        res: *mut nmod_poly_mat_struct,
79        mat1: *mut nmod_poly_mat_struct,
80        mat2: *mut nmod_poly_mat_struct,
81    );
82    pub fn nmod_poly_mat_print(mat: *mut nmod_poly_mat_struct, x: *const c_char);
83    pub fn nmod_poly_mat_max_length(A: *mut nmod_poly_mat_struct) -> mp_limb_signed_t;
84    pub fn nmod_poly_mat_scalar_mul_nmod_poly(
85        B: *mut nmod_poly_mat_struct,
86        A: *mut nmod_poly_mat_struct,
87        c: *mut nmod_poly_struct,
88    );
89    pub fn nmod_poly_mat_scalar_mul_nmod(
90        B: *mut nmod_poly_mat_struct,
91        A: *mut nmod_poly_mat_struct,
92        c: mp_limb_t,
93    );
94    pub fn nmod_poly_mat_add(
95        C: *mut nmod_poly_mat_struct,
96        A: *mut nmod_poly_mat_struct,
97        B: *mut nmod_poly_mat_struct,
98    );
99    pub fn nmod_poly_mat_sub(
100        C: *mut nmod_poly_mat_struct,
101        A: *mut nmod_poly_mat_struct,
102        B: *mut nmod_poly_mat_struct,
103    );
104    pub fn nmod_poly_mat_neg(B: *mut nmod_poly_mat_struct, A: *mut nmod_poly_mat_struct);
105    pub fn nmod_poly_mat_mul(
106        C: *mut nmod_poly_mat_struct,
107        A: *mut nmod_poly_mat_struct,
108        B: *mut nmod_poly_mat_struct,
109    );
110    pub fn nmod_poly_mat_mul_interpolate(
111        C: *mut nmod_poly_mat_struct,
112        A: *mut nmod_poly_mat_struct,
113        B: *mut nmod_poly_mat_struct,
114    );
115    pub fn nmod_poly_mat_mul_classical(
116        C: *mut nmod_poly_mat_struct,
117        A: *mut nmod_poly_mat_struct,
118        B: *mut nmod_poly_mat_struct,
119    );
120    pub fn nmod_poly_mat_mul_KS(
121        C: *mut nmod_poly_mat_struct,
122        A: *mut nmod_poly_mat_struct,
123        B: *mut nmod_poly_mat_struct,
124    );
125    pub fn nmod_poly_mat_sqr(B: *mut nmod_poly_mat_struct, A: *mut nmod_poly_mat_struct);
126    pub fn nmod_poly_mat_sqr_classical(B: *mut nmod_poly_mat_struct, A: *mut nmod_poly_mat_struct);
127    pub fn nmod_poly_mat_sqr_KS(B: *mut nmod_poly_mat_struct, A: *mut nmod_poly_mat_struct);
128    pub fn nmod_poly_mat_sqr_interpolate(
129        B: *mut nmod_poly_mat_struct,
130        A: *mut nmod_poly_mat_struct,
131    );
132    pub fn nmod_poly_mat_pow(
133        B: *mut nmod_poly_mat_struct,
134        A: *mut nmod_poly_mat_struct,
135        exp: mp_limb_t,
136    );
137    pub fn nmod_poly_mat_evaluate_nmod(
138        B: *mut nmod_mat_struct,
139        A: *mut nmod_poly_mat_struct,
140        x: mp_limb_t,
141    );
142    pub fn nmod_poly_mat_find_pivot_any(
143        mat: *mut nmod_poly_mat_struct,
144        start_row: mp_limb_signed_t,
145        end_row: mp_limb_signed_t,
146        c: mp_limb_signed_t,
147    ) -> mp_limb_signed_t;
148    pub fn nmod_poly_mat_find_pivot_partial(
149        mat: *mut nmod_poly_mat_struct,
150        start_row: mp_limb_signed_t,
151        end_row: mp_limb_signed_t,
152        c: mp_limb_signed_t,
153    ) -> mp_limb_signed_t;
154    pub fn nmod_poly_mat_fflu(
155        B: *mut nmod_poly_mat_struct,
156        den: *mut nmod_poly_struct,
157        perm: *mut mp_limb_signed_t,
158        A: *mut nmod_poly_mat_struct,
159        rank_check: c_int,
160    ) -> mp_limb_signed_t;
161    pub fn nmod_poly_mat_rref(
162        B: *mut nmod_poly_mat_struct,
163        den: *mut nmod_poly_struct,
164        A: *mut nmod_poly_mat_struct,
165    ) -> mp_limb_signed_t;
166    pub fn nmod_poly_mat_trace(trace: *mut nmod_poly_struct, mat: *mut nmod_poly_mat_struct);
167    pub fn nmod_poly_mat_det(det: *mut nmod_poly_struct, A: *mut nmod_poly_mat_struct);
168    pub fn nmod_poly_mat_det_fflu(det: *mut nmod_poly_struct, A: *mut nmod_poly_mat_struct);
169    pub fn nmod_poly_mat_det_interpolate(det: *mut nmod_poly_struct, A: *mut nmod_poly_mat_struct);
170    pub fn nmod_poly_mat_rank(A: *mut nmod_poly_mat_struct) -> mp_limb_signed_t;
171    pub fn nmod_poly_mat_inv(
172        Ainv: *mut nmod_poly_mat_struct,
173        den: *mut nmod_poly_struct,
174        A: *mut nmod_poly_mat_struct,
175    ) -> c_int;
176    pub fn nmod_poly_mat_nullspace(
177        res: *mut nmod_poly_mat_struct,
178        mat: *mut nmod_poly_mat_struct,
179    ) -> mp_limb_signed_t;
180    pub fn nmod_poly_mat_solve(
181        X: *mut nmod_poly_mat_struct,
182        den: *mut nmod_poly_struct,
183        A: *mut nmod_poly_mat_struct,
184        B: *mut nmod_poly_mat_struct,
185    ) -> c_int;
186    pub fn nmod_poly_mat_solve_fflu(
187        X: *mut nmod_poly_mat_struct,
188        den: *mut nmod_poly_struct,
189        A: *mut nmod_poly_mat_struct,
190        B: *mut nmod_poly_mat_struct,
191    ) -> c_int;
192    pub fn nmod_poly_mat_solve_fflu_precomp(
193        X: *mut nmod_poly_mat_struct,
194        perm: *const mp_limb_signed_t,
195        FFLU: *mut nmod_poly_mat_struct,
196        B: *mut nmod_poly_mat_struct,
197    );
198}