flint_sys/
fq_poly_factor.rs

1#![allow(non_camel_case_types)]
2
3//! *See the [FLINT documentation](http://flintlib.org/doc/fq_poly_factor.html).
4
5use crate::deps::*;
6use crate::flint::*;
7use crate::fmpz_poly::fmpz_poly_struct;
8use crate::fq::{fq_ctx_struct, fq_struct};
9use crate::fq_poly::{fq_poly_struct, fq_poly_t};
10use libc::{c_char, c_int};
11
12#[repr(C)]
13#[derive(Debug, Copy, Clone)]
14pub struct fq_poly_factor_struct {
15    pub poly: *mut fq_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
21pub type fq_poly_factor_t = [fq_poly_factor_struct; 1usize];
22
23extern "C" {
24    pub fn FQ_POLY_ITERATED_FROBENIUS_CUTOFF(
25        ctx: *mut fq_ctx_struct,
26        length: mp_limb_signed_t,
27    ) -> c_int;
28    pub fn fq_poly_factor_init(fac: *mut fq_poly_factor_struct, ctx: *mut fq_ctx_struct);
29    pub fn fq_poly_factor_clear(fac: *mut fq_poly_factor_struct, ctx: *mut fq_ctx_struct);
30    pub fn fq_poly_factor_realloc(
31        fac: *mut fq_poly_factor_struct,
32        alloc: mp_limb_signed_t,
33        ctx: *mut fq_ctx_struct,
34    );
35    pub fn fq_poly_factor_fit_length(
36        fac: *mut fq_poly_factor_struct,
37        len: mp_limb_signed_t,
38        ctx: *mut fq_ctx_struct,
39    );
40    pub fn fq_poly_factor_set(
41        res: *mut fq_poly_factor_struct,
42        fac: *mut fq_poly_factor_struct,
43        ctx: *mut fq_ctx_struct,
44    );
45    pub fn fq_poly_factor_insert(
46        fac: *mut fq_poly_factor_struct,
47        poly: *mut fq_poly_struct,
48        exp: mp_limb_signed_t,
49        ctx: *mut fq_ctx_struct,
50    );
51    pub fn fq_poly_factor_print(fac: *mut fq_poly_factor_struct, ctx: *mut fq_ctx_struct);
52    pub fn fq_poly_factor_print_pretty(
53        fac: *mut fq_poly_factor_struct,
54        var: *const c_char,
55        ctx: *mut fq_ctx_struct,
56    );
57    pub fn fq_poly_factor_concat(
58        res: *mut fq_poly_factor_struct,
59        fac: *mut fq_poly_factor_struct,
60        ctx: *mut fq_ctx_struct,
61    );
62    pub fn fq_poly_factor_pow(
63        fac: *mut fq_poly_factor_struct,
64        exp: mp_limb_signed_t,
65        ctx: *mut fq_ctx_struct,
66    );
67    pub fn _fq_poly_is_squarefree(
68        f: *const fq_struct,
69        len: mp_limb_signed_t,
70        ctx: *mut fq_ctx_struct,
71    ) -> c_int;
72    pub fn fq_poly_is_squarefree(f: *mut fq_poly_struct, ctx: *mut fq_ctx_struct) -> c_int;
73    pub fn fq_poly_factor_squarefree(
74        res: *mut fq_poly_factor_struct,
75        f: *mut fq_poly_struct,
76        ctx: *mut fq_ctx_struct,
77    );
78    pub fn fq_poly_is_irreducible(f: *mut fq_poly_struct, ctx: *mut fq_ctx_struct) -> c_int;
79    pub fn fq_poly_is_irreducible_ddf(f: *mut fq_poly_struct, ctx: *mut fq_ctx_struct) -> c_int;
80    pub fn fq_poly_is_irreducible_ben_or(f: *mut fq_poly_struct, ctx: *mut fq_ctx_struct) -> c_int;
81    pub fn fq_poly_factor_distinct_deg(
82        res: *mut fq_poly_factor_struct,
83        poly: *mut fq_poly_struct,
84        degs: *const *mut mp_limb_signed_t,
85        ctx: *mut fq_ctx_struct,
86    );
87    pub fn fq_poly_factor_equal_deg_prob(
88        factor: *mut fq_poly_struct,
89        state: *mut flint_rand_s,
90        pol: *mut fq_poly_struct,
91        d: mp_limb_signed_t,
92        ctx: *mut fq_ctx_struct,
93    ) -> c_int;
94    pub fn fq_poly_factor_equal_deg(
95        factors: *mut fq_poly_factor_struct,
96        pol: *mut fq_poly_struct,
97        d: mp_limb_signed_t,
98        ctx: *mut fq_ctx_struct,
99    );
100    pub fn fq_poly_factor_cantor_zassenhaus(
101        res: *mut fq_poly_factor_struct,
102        f: *mut fq_poly_struct,
103        ctx: *mut fq_ctx_struct,
104    );
105    pub fn fq_poly_factor_kaltofen_shoup(
106        res: *mut fq_poly_factor_struct,
107        poly: *mut fq_poly_struct,
108        ctx: *mut fq_ctx_struct,
109    );
110    pub fn fq_poly_factor_berlekamp(
111        factors: *mut fq_poly_factor_struct,
112        f: *mut fq_poly_struct,
113        ctx: *mut fq_ctx_struct,
114    );
115    pub fn fq_poly_factor_with_berlekamp(
116        result: *mut fq_poly_factor_struct,
117        leading_coeff: *mut fmpz_poly_struct,
118        input: *mut fq_poly_struct,
119        ctx: *mut fq_ctx_struct,
120    );
121    pub fn fq_poly_factor_with_cantor_zassenhaus(
122        result: *mut fq_poly_factor_struct,
123        leading_coeff: *mut fmpz_poly_struct,
124        input: *mut fq_poly_struct,
125        ctx: *mut fq_ctx_struct,
126    );
127    pub fn fq_poly_factor_with_kaltofen_shoup(
128        result: *mut fq_poly_factor_struct,
129        leading_coeff: *mut fmpz_poly_struct,
130        input: *mut fq_poly_struct,
131        ctx: *mut fq_ctx_struct,
132    );
133    pub fn fq_poly_factor(
134        result: *mut fq_poly_factor_struct,
135        leading_coeff: *mut fmpz_poly_struct,
136        input: *mut fq_poly_struct,
137        ctx: *mut fq_ctx_struct,
138    );
139    pub fn fq_poly_iterated_frobenius_preinv(
140        rop: *mut fq_poly_t,
141        n: mp_limb_signed_t,
142        v: *mut fq_poly_struct,
143        vinv: *mut fq_poly_struct,
144        ctx: *mut fq_ctx_struct,
145    );
146    pub fn fq_poly_factor_split_single(
147        linfactor: *mut fq_poly_struct,
148        input: *mut fq_poly_struct,
149        ctx: *mut fq_ctx_struct,
150    );
151    pub fn fq_poly_roots(
152        r: *mut fq_poly_factor_struct,
153        f: *mut fq_poly_struct,
154        with_multiplicity: c_int,
155        ctx: *mut fq_ctx_struct,
156    );
157    pub fn fq_poly_factor_get_poly(
158        z: *mut fq_poly_struct,
159        fac: *mut fq_poly_factor_struct,
160        i: mp_limb_signed_t,
161        ctx: *mut fq_ctx_struct,
162    );
163}