flint_sys/
fmpz_poly_factor.rs1#![allow(non_camel_case_types)]
2
3use crate::deps::*;
6use crate::fmpz::fmpz;
7use crate::fmpz_mat::fmpz_mat_struct;
8use crate::fmpz_poly::fmpz_poly_struct;
9use libc::{c_int, c_uchar};
10
11#[repr(C)]
12#[derive(Debug, Copy, Clone)]
13pub struct fmpz_poly_factor_struct {
14 pub c: fmpz,
15 pub p: *mut fmpz_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 zassenhaus_prune_struct {
24 pub deg: mp_limb_signed_t,
25 pub pos_degs: *mut c_uchar,
26 pub new_length: mp_limb_signed_t,
27 pub new_total: mp_limb_signed_t,
28 pub new_degs: *mut mp_limb_signed_t,
29 pub alloc: mp_limb_signed_t,
30}
31
32pub type zassenhaus_prune_t = [zassenhaus_prune_struct; 1usize];
33
34extern "C" {
35 pub fn fmpz_poly_factor_init(fac: *mut fmpz_poly_factor_struct);
36 pub fn fmpz_poly_factor_init2(fac: *mut fmpz_poly_factor_struct, alloc: mp_limb_signed_t);
37 pub fn fmpz_poly_factor_realloc(fac: *mut fmpz_poly_factor_struct, alloc: mp_limb_signed_t);
38 pub fn fmpz_poly_factor_fit_length(fac: *mut fmpz_poly_factor_struct, len: mp_limb_signed_t);
39 pub fn fmpz_poly_factor_clear(fac: *mut fmpz_poly_factor_struct);
40 pub fn fmpz_poly_factor_set(
41 res: *mut fmpz_poly_factor_struct,
42 fac: *const fmpz_poly_factor_struct,
43 );
44 pub fn fmpz_poly_factor_insert(
45 fac: *mut fmpz_poly_factor_struct,
46 p: *const fmpz_poly_struct,
47 exp: mp_limb_signed_t,
48 );
49 pub fn fmpz_poly_factor_concat(
50 res: *mut fmpz_poly_factor_struct,
51 fac: *const fmpz_poly_factor_struct,
52 );
53 pub fn fmpz_poly_factor_print(fac: *const fmpz_poly_factor_struct);
54 pub fn fmpz_poly_factor_zassenhaus_recombination(
55 final_fac: *mut fmpz_poly_factor_struct,
56 lifted_fac: *const fmpz_poly_factor_struct,
57 F: *const fmpz_poly_struct,
58 P: *const fmpz,
59 exp: mp_limb_signed_t,
60 );
61 pub fn fmpz_poly_factor_squarefree(
62 fac: *mut fmpz_poly_factor_struct,
63 F: *const fmpz_poly_struct,
64 );
65 pub fn fmpz_poly_factor_mignotte(B: *mut fmpz, f: *const fmpz_poly_struct);
66 pub fn _fmpz_poly_factor_zassenhaus(
67 final_fac: *mut fmpz_poly_factor_struct,
68 exp: mp_limb_signed_t,
69 f: *const fmpz_poly_struct,
70 cutoff: mp_limb_signed_t,
71 use_van_hoeij: c_int,
72 );
73 pub fn fmpz_poly_factor_zassenhaus(
74 fac: *mut fmpz_poly_factor_struct,
75 G: *const fmpz_poly_struct,
76 );
77 pub fn _fmpz_poly_factor_quadratic(
78 fac: *mut fmpz_poly_factor_struct,
79 f: *const fmpz_poly_struct,
80 exp: mp_limb_signed_t,
81 );
82 pub fn _fmpz_poly_factor_cubic(
83 fac: *mut fmpz_poly_factor_struct,
84 f: *const fmpz_poly_struct,
85 exp: mp_limb_signed_t,
86 );
87 pub fn _fmpz_poly_factor_CLD_mat(
88 res: *mut fmpz_mat_struct,
89 f: *const fmpz_poly_struct,
90 lifted_fac: *const fmpz_poly_factor_struct,
91 P: *const fmpz,
92 k: mp_limb_t,
93 ) -> mp_limb_signed_t;
94 pub fn fmpz_poly_factor_van_hoeij_check_if_solved(
95 M: *const fmpz_mat_struct,
96 final_fac: *const fmpz_poly_factor_struct,
97 lifted_fac: *const fmpz_poly_factor_struct,
98 f: *const fmpz_poly_struct,
99 P: *const fmpz,
100 exp: mp_limb_signed_t,
101 lc: *const fmpz,
102 ) -> c_int;
103 pub fn fmpz_poly_factor(fac: *mut fmpz_poly_factor_struct, G: *const fmpz_poly_struct);
112 pub fn fmpz_poly_factor_get_fmpz_poly(
113 z: *mut fmpz_poly_struct,
114 F: *const fmpz_poly_factor_struct,
115 i: mp_limb_signed_t,
116 );
117 pub fn fmpz_poly_factor_get_fmpz(z: *mut fmpz, F: *const fmpz_poly_factor_struct);
118 pub fn zassenhaus_subset_first(
119 s: *mut mp_limb_signed_t,
120 r: mp_limb_signed_t,
121 m: mp_limb_signed_t,
122 );
123 pub fn zassenhaus_subset_next(s: *mut mp_limb_signed_t, r: mp_limb_signed_t) -> c_int;
124 pub fn zassenhaus_subset_next_disjoint(
125 s: *mut mp_limb_signed_t,
126 r: mp_limb_signed_t,
127 ) -> mp_limb_signed_t;
128 pub fn zassenhaus_prune_init(Z: *mut zassenhaus_prune_struct);
129 pub fn zassenhaus_prune_clear(Z: *mut zassenhaus_prune_struct);
130 pub fn zassenhaus_prune_set_degree(Z: *mut zassenhaus_prune_struct, d: mp_limb_signed_t);
131 pub fn zassenhaus_prune_start_add_factors(Z: *mut zassenhaus_prune_struct);
132 pub fn zassenhaus_prune_add_factor(
133 Z: *mut zassenhaus_prune_struct,
134 deg: mp_limb_signed_t,
135 exp: mp_limb_signed_t,
136 );
137 pub fn zassenhaus_prune_end_add_factors(Z: *mut zassenhaus_prune_struct);
138 pub fn zassenhaus_prune_must_be_irreducible(Z: *mut zassenhaus_prune_struct) -> c_int;
139 pub fn zassenhaus_prune_degree_is_possible(
140 Z: *mut zassenhaus_prune_struct,
141 d: mp_limb_signed_t,
142 ) -> c_int;
143 pub fn fmpz_poly_factor_zassenhaus_recombination_with_prune(
144 final_fac: *mut fmpz_poly_factor_struct,
145 lifted_fac: *mut fmpz_poly_factor_struct,
146 F: *mut fmpz_poly_struct,
147 P: *mut fmpz,
148 exp: mp_limb_signed_t,
149 Z: *mut zassenhaus_prune_struct,
150 );
151}