42#include <flint/flint.h>
43#if __FLINT_RELEASE >= 30000
46#include <flint/fmpz.h>
47#include <flint/fmpz_mpoly.h>
48#include <flint/fmpz_mpoly_factor.h>
49#include <flint/fmpz_poly.h>
50#include <flint/fmpz_poly_factor.h>
76 typedef std::map<uint32_t,uint32_t> var_map_t;
83 fmpz() { fmpz_init(d); }
84 ~fmpz() { fmpz_clear(d); }
85 void print(
const string& text) { cout << text; fmpz_print(d); cout << endl; }
90 poly() { fmpz_poly_init(d); }
91 ~poly() { fmpz_poly_clear(d); }
92 void print(
const string& text) {
93 cout << text; fmpz_poly_print_pretty(d,
"x"); cout << endl;
104 fmpz_mpoly_ctx_struct *ctx;
107 explicit mpoly(fmpz_mpoly_ctx_struct *ctx_in) : ctx(ctx_in) { fmpz_mpoly_init(d, ctx); }
108 ~mpoly() { fmpz_mpoly_clear(d, ctx); }
109 void print(
const string& text) {
111 fmpz_mpoly_print_pretty(d, 0, ctx);
117 fmpz_mpoly_ctx_struct *ctx;
119 fmpz_mpoly_factor_t d;
120 explicit mpoly_factor(fmpz_mpoly_ctx_struct *ctx_in) : ctx(ctx_in) {
121 fmpz_mpoly_factor_init(d, ctx);
128 explicit mpoly_ctx(int64_t nvars) { fmpz_mpoly_ctx_init(d, nvars, ORD_LEX); }
133 void cleanup_master(
void);
135 WORD* divmod_mpoly(PHEAD
const WORD *,
const WORD *,
const bool,
const WORD,
const var_map_t &);
136 WORD* divmod_poly(PHEAD
const WORD *,
const WORD *,
const bool,
const WORD,
const var_map_t &);
138 WORD* factorize_mpoly(PHEAD
const WORD *, WORD *,
const bool,
const bool,
const var_map_t &);
139 WORD* factorize_poly(PHEAD
const WORD *, WORD *,
const bool,
const bool,
const var_map_t &);
141 void form_sort(PHEAD WORD *);
143 uint64_t from_argument_mpoly(fmpz_mpoly_t, fmpz_mpoly_t,
const WORD *,
const bool,
144 const var_map_t &,
const fmpz_mpoly_ctx_t);
145 uint64_t from_argument_poly(fmpz_poly_t, fmpz_poly_t,
const WORD *,
const bool);
147 WORD fmpz_get_form(fmpz_t, WORD *);
148 void fmpz_set_form(fmpz_t, UWORD *, WORD);
150 WORD* gcd_mpoly(PHEAD
const WORD *,
const WORD *,
const WORD,
const var_map_t &);
151 WORD* gcd_poly(PHEAD
const WORD *,
const WORD *,
const WORD,
const var_map_t &);
153 var_map_t get_variables(
const vector <WORD *> &,
const bool,
const bool);
155 WORD* inverse_poly(PHEAD
const WORD *,
const WORD *,
const var_map_t &);
157 WORD* mul_mpoly(PHEAD
const WORD *,
const WORD *,
const var_map_t &);
158 WORD* mul_poly(PHEAD
const WORD *,
const WORD *,
const var_map_t &);
160 void ratfun_add_mpoly(PHEAD
const WORD *,
const WORD *, WORD *,
const var_map_t &);
161 void ratfun_add_poly(PHEAD
const WORD *,
const WORD *, WORD *,
const var_map_t &);
163 void ratfun_normalize_mpoly(PHEAD WORD *,
const var_map_t &);
164 void ratfun_normalize_poly(PHEAD WORD *,
const var_map_t &);
166 void ratfun_read_mpoly(
const WORD *, fmpz_mpoly_t, fmpz_mpoly_t,
const var_map_t &,
168 void ratfun_read_poly(
const WORD *, fmpz_poly_t, fmpz_poly_t);
170 uint64_t to_argument_mpoly(PHEAD WORD *,
const bool,
const bool,
const bool,
const uint64_t,
171 const fmpz_mpoly_t,
const var_map_t &,
const fmpz_mpoly_ctx_t);
172 uint64_t to_argument_mpoly(PHEAD WORD *,
const bool,
const bool,
const bool,
const uint64_t,
173 const fmpz_mpoly_t,
const var_map_t &,
const fmpz_mpoly_ctx_t,
const fmpz_t);
174 uint64_t to_argument_poly(PHEAD WORD *,
const bool,
const bool,
const bool,
const uint64_t,
175 const fmpz_poly_t,
const var_map_t &);
176 uint64_t to_argument_poly(PHEAD WORD *,
const bool,
const bool,
const bool,
const uint64_t,
177 const fmpz_poly_t,
const var_map_t &,
const fmpz_t);
182 void simplify_fmpz(fmpz_t, fmpz_t, fmpz_t);
183 void simplify_fmpz_poly(fmpz_poly_t, fmpz_poly_t, fmpz_poly_t);
185 void fix_sign_fmpz_mpoly_ratfun(fmpz_mpoly_t, fmpz_mpoly_t,
const fmpz_mpoly_ctx_t);
186 void fix_sign_fmpz_poly_ratfun(fmpz_poly_t, fmpz_poly_t);