flint_sys/
nmod_poly_factor.rs

1#![allow(non_camel_case_types)]
2#![allow(non_snake_case)]
3
4//! *See the [FLINT documentation](http://flintlib.org/doc/nmod_poly_factor.html).
5
6use crate::deps::*;
7use crate::flint::*;
8use crate::nmod_poly::nmod_poly_struct;
9use crate::nmod_vec::nmod_t;
10use crate::ulong_extras::n_factor_t;
11
12#[repr(C)]
13#[derive(Debug, Copy, Clone)]
14pub struct nmod_poly_factor_struct {
15    pub p: *mut nmod_poly_struct,
16    pub exp: *mut mp_limb_signed_t,
17    pub num: mp_limb_signed_t,
18    pub alloc: mp_limb_signed_t,
19}
20
21#[repr(C)]
22#[derive(Debug, Copy, Clone)]
23pub struct nmod_poly_interval_poly_arg_t {
24    pub baby: *mut nmod_poly_struct,
25    pub res: *mut nmod_poly_struct,
26    pub H: *mut nmod_poly_struct,
27    pub v: *mut nmod_poly_struct,
28    pub vinv: *mut nmod_poly_struct,
29    pub tmp: mp_ptr,
30    pub m: mp_limb_signed_t,
31}
32
33pub type nmod_poly_factor_t = [nmod_poly_factor_struct; 1usize];
34
35extern "C" {
36    pub fn nmod_poly_factor_init(fac: *mut nmod_poly_factor_struct);
37    pub fn nmod_poly_factor_clear(fac: *mut nmod_poly_factor_struct);
38    pub fn nmod_poly_factor_realloc(fac: *mut nmod_poly_factor_struct, alloc: mp_limb_signed_t);
39    pub fn nmod_poly_factor_fit_length(fac: *mut nmod_poly_factor_struct, len: mp_limb_signed_t);
40    pub fn nmod_poly_factor_set(
41        res: *mut nmod_poly_factor_struct,
42        fac: *mut nmod_poly_factor_struct,
43    );
44    pub fn nmod_poly_factor_swap(a: *mut nmod_poly_factor_struct, b: *mut nmod_poly_factor_struct);
45    pub fn nmod_poly_factor_insert(
46        fac: *mut nmod_poly_factor_struct,
47        poly: *mut nmod_poly_struct,
48        exp: mp_limb_signed_t,
49    );
50    pub fn nmod_poly_factor_print(fac: *mut nmod_poly_factor_struct);
51    pub fn nmod_poly_factor_concat(
52        res: *mut nmod_poly_factor_struct,
53        fac: *mut nmod_poly_factor_struct,
54    );
55    pub fn nmod_poly_factor_pow(fac: *mut nmod_poly_factor_struct, exp: mp_limb_signed_t);
56    pub fn nmod_poly_factor_equal_deg(
57        factors: *mut nmod_poly_factor_struct,
58        pol: *mut nmod_poly_struct,
59        d: mp_limb_signed_t,
60    );
61    pub fn nmod_poly_factor_equal_deg_prob(
62        factor: *mut nmod_poly_struct,
63        state: *mut flint_rand_s,
64        pol: *mut nmod_poly_struct,
65        d: mp_limb_signed_t,
66    ) -> ::std::os::raw::c_int;
67    pub fn nmod_poly_factor_distinct_deg(
68        res: *mut nmod_poly_factor_struct,
69        poly: *mut nmod_poly_struct,
70        degs: *const *mut mp_limb_signed_t,
71    );
72    pub fn nmod_poly_remove(f: *mut nmod_poly_struct, p: *mut nmod_poly_struct) -> mp_limb_t;
73    pub fn nmod_poly_factor_distinct_deg_threaded(
74        res: *mut nmod_poly_factor_struct,
75        poly: *mut nmod_poly_struct,
76        degs: *const *mut mp_limb_signed_t,
77    );
78    pub fn nmod_poly_is_irreducible(f: *mut nmod_poly_struct) -> ::std::os::raw::c_int;
79    pub fn nmod_poly_is_irreducible_rabin(f: *mut nmod_poly_struct) -> ::std::os::raw::c_int;
80    pub fn nmod_poly_is_irreducible_ddf(f: *mut nmod_poly_struct) -> ::std::os::raw::c_int;
81    pub fn _nmod_poly_is_squarefree(
82        f: mp_srcptr,
83        len: mp_limb_signed_t,
84        mod_: nmod_t,
85    ) -> ::std::os::raw::c_int;
86    pub fn nmod_poly_is_squarefree(f: *mut nmod_poly_struct) -> ::std::os::raw::c_int;
87    pub fn nmod_poly_factor_cantor_zassenhaus(
88        res: *mut nmod_poly_factor_struct,
89        f: *mut nmod_poly_struct,
90    );
91    pub fn nmod_poly_factor_berlekamp(
92        factors: *mut nmod_poly_factor_struct,
93        f: *mut nmod_poly_struct,
94    );
95    pub fn nmod_poly_factor_kaltofen_shoup(
96        res: *mut nmod_poly_factor_struct,
97        poly: *mut nmod_poly_struct,
98    );
99    pub fn nmod_poly_factor_squarefree(res: *mut nmod_poly_factor_struct, f: *mut nmod_poly_struct);
100    pub fn nmod_poly_factor_with_berlekamp(
101        result: *mut nmod_poly_factor_struct,
102        input: *mut nmod_poly_struct,
103    ) -> mp_limb_t;
104    pub fn nmod_poly_factor_with_cantor_zassenhaus(
105        result: *mut nmod_poly_factor_struct,
106        input: *mut nmod_poly_struct,
107    ) -> mp_limb_t;
108    pub fn nmod_poly_factor_with_kaltofen_shoup(
109        result: *mut nmod_poly_factor_struct,
110        input: *mut nmod_poly_struct,
111    ) -> mp_limb_t;
112    pub fn nmod_poly_factor(
113        result: *mut nmod_poly_factor_struct,
114        input: *mut nmod_poly_struct,
115    ) -> mp_limb_t;
116    pub fn _nmod_poly_interval_poly_worker(arg_ptr: *mut ::std::os::raw::c_void);
117    pub fn nmod_poly_roots(
118        r: *mut nmod_poly_factor_struct,
119        f: *mut nmod_poly_struct,
120        with_multiplicity: ::std::os::raw::c_int,
121    );
122    pub fn nmod_poly_roots_factored(
123        r: *mut nmod_poly_factor_struct,
124        f: *mut nmod_poly_struct,
125        with_multiplicity: ::std::os::raw::c_int,
126        n: *const n_factor_t,
127    ) -> ::std::os::raw::c_int;
128    pub fn nmod_poly_factor_get_nmod_poly(
129        z: *mut nmod_poly_struct,
130        fac: *mut nmod_poly_factor_struct,
131        i: mp_limb_signed_t,
132    );
133}