use crate::deps::*;
use crate::flint::*;
use crate::nmod_types::*;
extern "C" {
#[link_name = "nmod_poly_mat_entry__extern"]
pub fn nmod_poly_mat_entry(
mat: *const nmod_poly_mat_struct,
i: slong,
j: slong,
) -> *mut nmod_poly_struct;
#[link_name = "nmod_poly_mat_nrows__extern"]
pub fn nmod_poly_mat_nrows(mat: *const nmod_poly_mat_struct) -> slong;
#[link_name = "nmod_poly_mat_ncols__extern"]
pub fn nmod_poly_mat_ncols(mat: *const nmod_poly_mat_struct) -> slong;
pub fn nmod_poly_mat_init(mat: *mut nmod_poly_mat_struct, rows: slong, cols: slong, n: ulong);
pub fn nmod_poly_mat_init_set(mat: *mut nmod_poly_mat_struct, src: *const nmod_poly_mat_struct);
#[link_name = "nmod_poly_mat_swap__extern"]
pub fn nmod_poly_mat_swap(mat1: *mut nmod_poly_mat_struct, mat2: *mut nmod_poly_mat_struct);
#[link_name = "nmod_poly_mat_swap_entrywise__extern"]
pub fn nmod_poly_mat_swap_entrywise(
mat1: *mut nmod_poly_mat_struct,
mat2: *mut nmod_poly_mat_struct,
);
pub fn nmod_poly_mat_set(mat1: *mut nmod_poly_mat_struct, mat2: *const nmod_poly_mat_struct);
pub fn nmod_poly_mat_set_nmod_mat(
pmat: *mut nmod_poly_mat_struct,
cmat: *const nmod_mat_struct,
);
pub fn nmod_poly_mat_clear(mat: *mut nmod_poly_mat_struct);
pub fn nmod_poly_mat_transpose(B: *mut nmod_poly_mat_struct, A: *const nmod_poly_mat_struct);
pub fn nmod_poly_mat_set_trunc(
res: *mut nmod_poly_mat_struct,
pmat: *const nmod_poly_mat_struct,
len: libc::c_long,
);
#[link_name = "nmod_poly_mat_truncate__extern"]
pub fn nmod_poly_mat_truncate(pmat: *mut nmod_poly_mat_struct, len: libc::c_long);
pub fn nmod_poly_mat_shift_left(
res: *mut nmod_poly_mat_struct,
pmat: *const nmod_poly_mat_struct,
k: slong,
);
pub fn nmod_poly_mat_shift_right(
res: *mut nmod_poly_mat_struct,
pmat: *const nmod_poly_mat_struct,
k: slong,
);
#[link_name = "nmod_poly_mat_modulus__extern"]
pub fn nmod_poly_mat_modulus(mat: *const nmod_poly_mat_struct) -> ulong;
pub fn nmod_poly_mat_get_coeff_mat(
coeff: *mut nmod_mat_struct,
pmat: *const nmod_poly_mat_struct,
deg: slong,
);
pub fn nmod_poly_mat_set_coeff_mat(
pmat: *mut nmod_poly_mat_struct,
coeff: *const nmod_mat_struct,
deg: slong,
);
pub fn nmod_poly_mat_equal(
mat1: *const nmod_poly_mat_struct,
mat2: *const nmod_poly_mat_struct,
) -> libc::c_int;
pub fn nmod_poly_mat_equal_nmod_mat(
pmat: *const nmod_poly_mat_struct,
cmat: *const nmod_mat_struct,
) -> libc::c_int;
pub fn nmod_poly_mat_is_zero(mat: *const nmod_poly_mat_struct) -> libc::c_int;
pub fn nmod_poly_mat_is_one(mat: *const nmod_poly_mat_struct) -> libc::c_int;
#[link_name = "nmod_poly_mat_is_empty__extern"]
pub fn nmod_poly_mat_is_empty(mat: *const nmod_poly_mat_struct) -> libc::c_int;
#[link_name = "nmod_poly_mat_is_square__extern"]
pub fn nmod_poly_mat_is_square(mat: *const nmod_poly_mat_struct) -> libc::c_int;
pub fn nmod_poly_mat_zero(mat: *mut nmod_poly_mat_struct);
pub fn nmod_poly_mat_one(mat: *mut nmod_poly_mat_struct);
pub fn nmod_poly_mat_randtest(
mat: *mut nmod_poly_mat_struct,
state: *mut flint_rand_struct,
len: slong,
);
pub fn nmod_poly_mat_randtest_sparse(
A: *mut nmod_poly_mat_struct,
state: *mut flint_rand_struct,
len: slong,
density: f32,
);
pub fn nmod_poly_mat_window_init(
window: *mut nmod_poly_mat_struct,
mat: *const nmod_poly_mat_struct,
r1: slong,
c1: slong,
r2: slong,
c2: slong,
);
pub fn nmod_poly_mat_window_clear(window: *mut nmod_poly_mat_struct);
pub fn nmod_poly_mat_concat_horizontal(
res: *mut nmod_poly_mat_struct,
mat1: *const nmod_poly_mat_struct,
mat2: *const nmod_poly_mat_struct,
);
pub fn nmod_poly_mat_concat_vertical(
res: *mut nmod_poly_mat_struct,
mat1: *const nmod_poly_mat_struct,
mat2: *const nmod_poly_mat_struct,
);
pub fn nmod_poly_mat_print(mat: *const nmod_poly_mat_struct, x: *const libc::c_char);
pub fn nmod_poly_mat_max_length(A: *const nmod_poly_mat_struct) -> slong;
#[link_name = "nmod_poly_mat_degree__extern"]
pub fn nmod_poly_mat_degree(pmat: *const nmod_poly_mat_struct) -> slong;
pub fn nmod_poly_mat_scalar_mul_nmod_poly(
B: *mut nmod_poly_mat_struct,
A: *const nmod_poly_mat_struct,
c: *const nmod_poly_struct,
);
pub fn nmod_poly_mat_scalar_mul_nmod(
B: *mut nmod_poly_mat_struct,
A: *const nmod_poly_mat_struct,
c: ulong,
);
pub fn nmod_poly_mat_add(
C: *mut nmod_poly_mat_struct,
A: *const nmod_poly_mat_struct,
B: *const nmod_poly_mat_struct,
);
pub fn nmod_poly_mat_sub(
C: *mut nmod_poly_mat_struct,
A: *const nmod_poly_mat_struct,
B: *const nmod_poly_mat_struct,
);
pub fn nmod_poly_mat_neg(B: *mut nmod_poly_mat_struct, A: *const nmod_poly_mat_struct);
pub fn nmod_poly_mat_mul(
C: *mut nmod_poly_mat_struct,
A: *const nmod_poly_mat_struct,
B: *const nmod_poly_mat_struct,
);
pub fn nmod_poly_mat_mul_interpolate(
C: *mut nmod_poly_mat_struct,
A: *const nmod_poly_mat_struct,
B: *const nmod_poly_mat_struct,
);
pub fn nmod_poly_mat_mul_classical(
C: *mut nmod_poly_mat_struct,
A: *const nmod_poly_mat_struct,
B: *const nmod_poly_mat_struct,
);
pub fn nmod_poly_mat_mul_KS(
C: *mut nmod_poly_mat_struct,
A: *const nmod_poly_mat_struct,
B: *const nmod_poly_mat_struct,
);
pub fn nmod_poly_mat_sqr(B: *mut nmod_poly_mat_struct, A: *const nmod_poly_mat_struct);
pub fn nmod_poly_mat_sqr_classical(
B: *mut nmod_poly_mat_struct,
A: *const nmod_poly_mat_struct,
);
pub fn nmod_poly_mat_sqr_KS(B: *mut nmod_poly_mat_struct, A: *const nmod_poly_mat_struct);
pub fn nmod_poly_mat_sqr_interpolate(
B: *mut nmod_poly_mat_struct,
A: *const nmod_poly_mat_struct,
);
pub fn nmod_poly_mat_pow(
B: *mut nmod_poly_mat_struct,
A: *const nmod_poly_mat_struct,
exp: ulong,
);
pub fn nmod_poly_mat_evaluate_nmod(
B: *mut nmod_mat_struct,
A: *const nmod_poly_mat_struct,
x: ulong,
);
pub fn nmod_poly_mat_find_pivot_any(
mat: *const nmod_poly_mat_struct,
start_row: slong,
end_row: slong,
c: slong,
) -> slong;
pub fn nmod_poly_mat_find_pivot_partial(
mat: *const nmod_poly_mat_struct,
start_row: slong,
end_row: slong,
c: slong,
) -> slong;
pub fn nmod_poly_mat_fflu(
B: *mut nmod_poly_mat_struct,
den: *mut nmod_poly_struct,
perm: *mut slong,
A: *const nmod_poly_mat_struct,
rank_check: libc::c_int,
) -> slong;
pub fn nmod_poly_mat_rref(
B: *mut nmod_poly_mat_struct,
den: *mut nmod_poly_struct,
A: *const nmod_poly_mat_struct,
) -> slong;
pub fn nmod_poly_mat_trace(trace: *mut nmod_poly_struct, mat: *const nmod_poly_mat_struct);
pub fn nmod_poly_mat_det(det: *mut nmod_poly_struct, A: *const nmod_poly_mat_struct);
pub fn nmod_poly_mat_det_fflu(det: *mut nmod_poly_struct, A: *const nmod_poly_mat_struct);
pub fn nmod_poly_mat_det_interpolate(
det: *mut nmod_poly_struct,
A: *const nmod_poly_mat_struct,
);
pub fn nmod_poly_mat_rank(A: *const nmod_poly_mat_struct) -> slong;
pub fn nmod_poly_mat_inv(
Ainv: *mut nmod_poly_mat_struct,
den: *mut nmod_poly_struct,
A: *const nmod_poly_mat_struct,
) -> libc::c_int;
pub fn nmod_poly_mat_nullspace(
res: *mut nmod_poly_mat_struct,
mat: *const nmod_poly_mat_struct,
) -> slong;
pub fn nmod_poly_mat_solve(
X: *mut nmod_poly_mat_struct,
den: *mut nmod_poly_struct,
A: *const nmod_poly_mat_struct,
B: *const nmod_poly_mat_struct,
) -> libc::c_int;
pub fn nmod_poly_mat_solve_fflu(
X: *mut nmod_poly_mat_struct,
den: *mut nmod_poly_struct,
A: *const nmod_poly_mat_struct,
B: *const nmod_poly_mat_struct,
) -> libc::c_int;
pub fn nmod_poly_mat_solve_fflu_precomp(
X: *mut nmod_poly_mat_struct,
perm: *const slong,
FFLU: *const nmod_poly_mat_struct,
B: *const nmod_poly_mat_struct,
);
}