#![allow(dead_code)]
use std::ffi::{c_int, c_void};
use std::os::raw::c_char;
#[repr(C, align(8))]
pub struct FmpzMPolyCtxBuf(pub [u8; 608]);
#[repr(C, align(8))]
pub struct FmpzMPolyBuf(pub [u8; 40]);
unsafe impl Send for FmpzMPolyCtxBuf {}
unsafe impl Sync for FmpzMPolyCtxBuf {}
unsafe impl Send for FmpzMPolyBuf {}
unsafe impl Sync for FmpzMPolyBuf {}
#[allow(non_camel_case_types)]
pub type slong = i64;
#[allow(non_camel_case_types)]
pub type ulong = u64;
#[allow(non_camel_case_types)]
pub type fmpz = slong;
#[repr(C)]
pub struct FmpzPolyStruct {
pub coeffs: *mut fmpz,
pub alloc: slong,
pub length: slong,
}
#[repr(C)]
pub struct FmpzPolyFactorStruct {
pub c: fmpz,
pub p: *mut FmpzPolyStruct,
pub exp: *mut slong,
pub num: slong,
pub alloc: slong,
}
#[repr(C)]
pub struct NmodStruct {
pub n: ulong,
pub ninv: ulong,
pub norm: ulong,
}
#[repr(C)]
pub struct NmodPolyStruct {
pub coeffs: *mut ulong,
pub alloc: slong,
pub length: slong,
pub mod_: NmodStruct,
}
#[repr(C)]
pub struct NmodPolyFactorStruct {
pub p: *mut NmodPolyStruct,
pub exp: *mut slong,
pub num: slong,
pub alloc: slong,
}
#[repr(C)]
pub struct FmpzMPolyFactorStruct {
pub constant: fmpz,
pub constant_den: fmpz,
pub poly: *mut FmpzMPolyBuf,
pub exp: *mut fmpz,
pub num: slong,
pub alloc: slong,
}
unsafe impl Send for FmpzPolyStruct {}
unsafe impl Sync for FmpzPolyStruct {}
#[repr(C)]
#[cfg(not(flint3_stride))]
pub struct FmpzMatStruct {
pub entries: *mut fmpz,
pub r: slong,
pub c: slong,
pub rows: *mut *mut fmpz,
}
#[repr(C)]
#[cfg(flint3_stride)]
pub struct FmpzMatStruct {
pub entries: *mut fmpz,
pub r: slong,
pub c: slong,
pub stride: slong,
}
#[repr(C)]
pub struct FmpzFactorStruct {
pub sign: c_int,
pub p: *mut fmpz,
pub exp: *mut ulong,
pub alloc: slong,
pub num: slong,
}
#[link(name = "flint")]
extern "C" {
pub fn flint_free(ptr: *mut c_void);
pub fn fmpz_init(f: *mut fmpz);
pub fn fmpz_clear(f: *mut fmpz);
pub fn fmpz_set(f: *mut fmpz, g: *const fmpz);
pub fn fmpz_set_si(f: *mut fmpz, val: slong);
pub fn fmpz_get_si(f: *const fmpz) -> slong;
pub fn fmpz_get_str(str_: *mut c_char, b: c_int, f: *const fmpz) -> *mut c_char;
pub fn fmpz_set_str(f: *mut fmpz, str_: *const c_char, b: c_int) -> c_int;
pub fn fmpz_equal(f: *const fmpz, g: *const fmpz) -> c_int;
pub fn fmpz_cmp_ui(f: *const fmpz, x: ulong) -> c_int;
pub fn fmpz_add(f: *mut fmpz, g: *const fmpz, h: *const fmpz);
pub fn fmpz_sub(f: *mut fmpz, g: *const fmpz, h: *const fmpz);
pub fn fmpz_mul(f: *mut fmpz, g: *const fmpz, h: *const fmpz);
pub fn fmpz_tdiv_q(f: *mut fmpz, g: *const fmpz, h: *const fmpz);
pub fn fmpz_tdiv_qr(q: *mut fmpz, r: *mut fmpz, g: *const fmpz, h: *const fmpz);
pub fn fmpz_neg(f: *mut fmpz, g: *const fmpz);
pub fn fmpz_gcd(f: *mut fmpz, g: *const fmpz, h: *const fmpz);
pub fn fmpz_pow_ui(f: *mut fmpz, g: *const fmpz, x: ulong);
pub fn fmpz_set_ui(f: *mut fmpz, val: ulong);
pub fn fmpz_cmp(f: *const fmpz, g: *const fmpz) -> c_int;
pub fn fmpz_cmp_si(f: *const fmpz, s: slong) -> c_int;
pub fn fmpz_abs(f: *mut fmpz, g: *const fmpz);
pub fn fmpz_sub_ui(f: *mut fmpz, g: *const fmpz, h: ulong);
pub fn fmpz_mul_ui(f: *mut fmpz, g: *const fmpz, h: ulong);
pub fn fmpz_mod(f: *mut fmpz, x: *const fmpz, m: *const fmpz);
pub fn fmpz_powm(r: *mut fmpz, b: *const fmpz, e: *const fmpz, m: *const fmpz);
pub fn fmpz_invmod(res: *mut fmpz, x: *const fmpz, m: *const fmpz) -> c_int;
pub fn fmpz_sqrtmod(x: *mut fmpz, a: *const fmpz, p: *const fmpz) -> c_int;
pub fn fmpz_jacobi(a: *const fmpz, n: *const fmpz) -> c_int;
pub fn fmpz_is_prime(n: *const fmpz) -> c_int;
pub fn fmpz_nextprime(res: *mut fmpz, n: *const fmpz, proved: c_int);
pub fn fmpz_euler_phi(res: *mut fmpz, n: *const fmpz);
pub fn fmpz_factor_init(fac: *mut FmpzFactorStruct);
pub fn fmpz_factor_clear(fac: *mut FmpzFactorStruct);
pub fn fmpz_factor(fac: *mut FmpzFactorStruct, n: *const fmpz);
pub fn fmpz_fdiv_ui(g: *const fmpz, h: ulong) -> ulong;
pub fn fmpz_get_ui(f: *const fmpz) -> ulong;
pub fn fmpz_poly_init(poly: *mut FmpzPolyStruct);
pub fn fmpz_poly_clear(poly: *mut FmpzPolyStruct);
pub fn fmpz_poly_set(dst: *mut FmpzPolyStruct, src: *const FmpzPolyStruct);
pub fn fmpz_poly_set_coeff_si(poly: *mut FmpzPolyStruct, n: slong, x: slong);
pub fn fmpz_poly_get_coeff_si(poly: *const FmpzPolyStruct, n: slong) -> slong;
pub fn fmpz_poly_set_coeff_fmpz(poly: *mut FmpzPolyStruct, n: slong, x: *const fmpz);
pub fn fmpz_poly_get_coeff_fmpz(x: *mut fmpz, poly: *const FmpzPolyStruct, n: slong);
pub fn fmpz_poly_length(poly: *const FmpzPolyStruct) -> slong;
pub fn fmpz_poly_degree(poly: *const FmpzPolyStruct) -> slong;
pub fn fmpz_poly_add(
res: *mut FmpzPolyStruct,
a: *const FmpzPolyStruct,
b: *const FmpzPolyStruct,
);
pub fn fmpz_poly_sub(
res: *mut FmpzPolyStruct,
a: *const FmpzPolyStruct,
b: *const FmpzPolyStruct,
);
pub fn fmpz_poly_mul(
res: *mut FmpzPolyStruct,
a: *const FmpzPolyStruct,
b: *const FmpzPolyStruct,
);
pub fn fmpz_poly_pow(res: *mut FmpzPolyStruct, poly: *const FmpzPolyStruct, e: ulong);
pub fn fmpz_poly_gcd(
res: *mut FmpzPolyStruct,
a: *const FmpzPolyStruct,
b: *const FmpzPolyStruct,
);
pub fn fmpz_poly_div(
q: *mut FmpzPolyStruct,
a: *const FmpzPolyStruct,
b: *const FmpzPolyStruct,
);
pub fn fmpz_poly_equal(a: *const FmpzPolyStruct, b: *const FmpzPolyStruct) -> c_int;
pub fn fmpz_poly_get_str_pretty(poly: *const FmpzPolyStruct, x: *const c_char) -> *mut c_char;
pub fn fmpz_poly_factor_init(fac: *mut FmpzPolyFactorStruct);
pub fn fmpz_poly_factor_clear(fac: *mut FmpzPolyFactorStruct);
pub fn fmpz_poly_factor(fac: *mut FmpzPolyFactorStruct, poly: *const FmpzPolyStruct);
pub fn fmpz_poly_factor_get_fmpz_poly(
z: *mut FmpzPolyStruct,
fac: *const FmpzPolyFactorStruct,
i: slong,
);
pub fn fmpz_poly_factor_get_fmpz(z: *mut fmpz, fac: *const FmpzPolyFactorStruct);
pub fn fmpz_poly_swinnerton_dyer(poly: *mut FmpzPolyStruct, n: ulong);
pub fn fmpz_poly_cyclotomic(poly: *mut FmpzPolyStruct, n: ulong);
pub fn fmpz_mpoly_ctx_init(ctx: *mut FmpzMPolyCtxBuf, nvars: slong, ord: c_int);
pub fn fmpz_mpoly_ctx_clear(ctx: *mut FmpzMPolyCtxBuf);
pub fn fmpz_mpoly_init(A: *mut FmpzMPolyBuf, ctx: *const FmpzMPolyCtxBuf);
pub fn fmpz_mpoly_clear(A: *mut FmpzMPolyBuf, ctx: *const FmpzMPolyCtxBuf);
pub fn fmpz_mpoly_is_zero(A: *const FmpzMPolyBuf, ctx: *const FmpzMPolyCtxBuf) -> c_int;
pub fn fmpz_mpoly_length(A: *const FmpzMPolyBuf, ctx: *const FmpzMPolyCtxBuf) -> slong;
pub fn fmpz_mpoly_push_term_fmpz_ui(
A: *mut FmpzMPolyBuf,
c: *const fmpz,
exp: *const u64,
ctx: *const FmpzMPolyCtxBuf,
);
pub fn fmpz_mpoly_sort_terms(A: *mut FmpzMPolyBuf, ctx: *const FmpzMPolyCtxBuf);
pub fn fmpz_mpoly_combine_like_terms(A: *mut FmpzMPolyBuf, ctx: *const FmpzMPolyCtxBuf);
pub fn fmpz_mpoly_get_term_coeff_fmpz(
c: *mut fmpz,
A: *const FmpzMPolyBuf,
i: slong,
ctx: *const FmpzMPolyCtxBuf,
);
pub fn fmpz_mpoly_get_term_exp_ui(
exp: *mut u64,
A: *const FmpzMPolyBuf,
i: slong,
ctx: *const FmpzMPolyCtxBuf,
);
pub fn fmpz_mpoly_gcd(
G: *mut FmpzMPolyBuf,
A: *const FmpzMPolyBuf,
B: *const FmpzMPolyBuf,
ctx: *const FmpzMPolyCtxBuf,
) -> c_int;
pub fn fmpz_mpoly_divides(
Q: *mut FmpzMPolyBuf,
A: *const FmpzMPolyBuf,
B: *const FmpzMPolyBuf,
ctx: *const FmpzMPolyCtxBuf,
) -> c_int;
pub fn fmpz_mpoly_resultant(
R: *mut FmpzMPolyBuf,
A: *const FmpzMPolyBuf,
B: *const FmpzMPolyBuf,
var: slong,
ctx: *const FmpzMPolyCtxBuf,
) -> c_int;
pub fn fmpz_mpoly_factor_init(f: *mut FmpzMPolyFactorStruct, ctx: *const FmpzMPolyCtxBuf);
pub fn fmpz_mpoly_factor_clear(f: *mut FmpzMPolyFactorStruct, ctx: *const FmpzMPolyCtxBuf);
pub fn fmpz_mpoly_factor(
f: *mut FmpzMPolyFactorStruct,
A: *const FmpzMPolyBuf,
ctx: *const FmpzMPolyCtxBuf,
) -> c_int;
pub fn fmpz_mpoly_factor_length(
f: *const FmpzMPolyFactorStruct,
ctx: *const FmpzMPolyCtxBuf,
) -> slong;
pub fn fmpz_mpoly_factor_get_base(
p: *mut FmpzMPolyBuf,
fac: *const FmpzMPolyFactorStruct,
i: slong,
ctx: *const FmpzMPolyCtxBuf,
);
pub fn fmpz_mpoly_factor_get_constant_fmpz(
c: *mut fmpz,
f: *const FmpzMPolyFactorStruct,
ctx: *const FmpzMPolyCtxBuf,
);
pub fn fmpz_mpoly_factor_get_exp_si(
f: *mut FmpzMPolyFactorStruct,
i: slong,
ctx: *const FmpzMPolyCtxBuf,
) -> slong;
pub fn fmpz_poly_resultant(res: *mut fmpz, a: *const FmpzPolyStruct, b: *const FmpzPolyStruct);
pub fn fmpz_poly_pseudo_divrem(
Q: *mut FmpzPolyStruct,
R: *mut FmpzPolyStruct,
d: *mut ulong,
A: *const FmpzPolyStruct,
B: *const FmpzPolyStruct,
);
pub fn fmpz_poly_neg(res: *mut FmpzPolyStruct, poly: *const FmpzPolyStruct);
pub fn fmpz_poly_scalar_mul_fmpz(
res: *mut FmpzPolyStruct,
poly: *const FmpzPolyStruct,
x: *const fmpz,
);
pub fn fmpz_poly_scalar_divexact_fmpz(
res: *mut FmpzPolyStruct,
poly: *const FmpzPolyStruct,
x: *const fmpz,
);
pub fn nmod_init(mod_: *mut NmodStruct, n: ulong);
pub fn nmod_poly_init(poly: *mut NmodPolyStruct, n: ulong);
pub fn nmod_poly_clear(poly: *mut NmodPolyStruct);
pub fn nmod_poly_set_coeff_ui(poly: *mut NmodPolyStruct, n: slong, c: ulong);
pub fn nmod_poly_factor_init(fac: *mut NmodPolyFactorStruct);
pub fn nmod_poly_factor_clear(fac: *mut NmodPolyFactorStruct);
pub fn nmod_poly_factor(
result: *mut NmodPolyFactorStruct,
input: *const NmodPolyStruct,
) -> ulong;
#[cfg(not(flint3))]
pub fn nmod_poly_factor_get_nmod_poly(
z: *mut NmodPolyStruct,
fac: *mut NmodPolyFactorStruct,
i: slong,
);
#[cfg(flint3)]
pub fn nmod_poly_factor_get_poly(
z: *mut NmodPolyStruct,
fac: *const NmodPolyFactorStruct,
i: slong,
);
pub fn nmod_poly_degree(poly: *const NmodPolyStruct) -> slong;
pub fn nmod_poly_get_coeff_ui(poly: *const NmodPolyStruct, j: slong) -> ulong;
pub fn fmpz_mat_init(mat: *mut FmpzMatStruct, rows: slong, cols: slong);
pub fn fmpz_mat_clear(mat: *mut FmpzMatStruct);
pub fn fmpz_mat_swap(mat1: *mut FmpzMatStruct, mat2: *mut FmpzMatStruct);
pub fn fmpz_mat_zero(mat: *mut FmpzMatStruct);
pub fn fmpz_mat_one(mat: *mut FmpzMatStruct);
pub fn fmpz_mat_set(dst: *mut FmpzMatStruct, src: *const FmpzMatStruct);
pub fn fmpz_mat_equal(a: *const FmpzMatStruct, b: *const FmpzMatStruct) -> c_int;
pub fn fmpz_mat_mul(c: *mut FmpzMatStruct, a: *const FmpzMatStruct, b: *const FmpzMatStruct);
pub fn fmpz_mat_transpose(dst: *mut FmpzMatStruct, src: *const FmpzMatStruct);
pub fn fmpz_mat_hnf_transform(
h: *mut FmpzMatStruct,
u: *mut FmpzMatStruct,
a: *const FmpzMatStruct,
);
pub fn fmpz_mat_snf(s: *mut FmpzMatStruct, a: *const FmpzMatStruct);
pub fn fmpz_mat_is_in_hnf(a: *const FmpzMatStruct) -> c_int;
pub fn fmpz_mat_is_in_snf(a: *const FmpzMatStruct) -> c_int;
}