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