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