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>
77 typedef std::map<uint32_t,uint32_t> var_map_t;
84 fmpz() { fmpz_init(d); }
85 ~fmpz() { fmpz_clear(d); }
86 void print(
const string& text) { cout << text; fmpz_print(d); cout << endl; }
91 poly() { fmpz_poly_init(d); }
92 ~poly() { fmpz_poly_clear(d); }
93 void print(
const string& text) {
94 cout << text; fmpz_poly_print_pretty(d,
"x"); cout << endl;
105 fmpz_mpoly_ctx_struct *ctx;
108 explicit mpoly(fmpz_mpoly_ctx_struct *ctx_in) : ctx(ctx_in) { fmpz_mpoly_init(d, ctx); }
109 ~mpoly() { fmpz_mpoly_clear(d, ctx); }
110 void print(
const string& text) {
112 fmpz_mpoly_print_pretty(d, 0, ctx);
118 fmpz_mpoly_ctx_struct *ctx;
120 fmpz_mpoly_factor_t d;
121 explicit mpoly_factor(fmpz_mpoly_ctx_struct *ctx_in) : ctx(ctx_in) {
122 fmpz_mpoly_factor_init(d, ctx);
129 explicit mpoly_ctx(int64_t nvars) { fmpz_mpoly_ctx_init(d, nvars, ORD_LEX); }
134 void cleanup_master(
void);
136 WORD* divmod_mpoly(PHEAD
const WORD *,
const WORD *,
const bool,
const WORD,
const var_map_t &,
138 WORD* divmod_poly(PHEAD
const WORD *,
const WORD *,
const bool,
const WORD,
const var_map_t &);
140 WORD* factorize_mpoly(PHEAD
const WORD *, WORD *,
const bool,
const bool,
const var_map_t &,
142 WORD* factorize_poly(PHEAD
const WORD *, WORD *,
const bool,
const bool,
const var_map_t &);
144 void form_sort(PHEAD WORD *);
146 uint64_t from_argument_mpoly(fmpz_mpoly_t, fmpz_mpoly_t,
const WORD *,
const bool,
147 const var_map_t &,
const fmpz_mpoly_ctx_t);
148 uint64_t from_argument_poly(fmpz_poly_t, fmpz_poly_t,
const WORD *,
const bool);
150 WORD fmpz_get_form(fmpz_t, WORD *);
151 void fmpz_set_form(fmpz_t, UWORD *, WORD);
153 WORD* gcd_mpoly(PHEAD
const WORD *,
const WORD *,
const WORD,
const var_map_t &,
const bool);
154 WORD* gcd_poly(PHEAD
const WORD *,
const WORD *,
const WORD,
const var_map_t &);
156 var_map_t get_variables(
const vector <WORD *> &,
const bool,
const bool);
158 WORD* inverse_poly(PHEAD
const WORD *,
const WORD *,
const var_map_t &);
160 WORD* mul_mpoly(PHEAD
const WORD *,
const WORD *,
const var_map_t &,
const bool);
161 WORD* mul_poly(PHEAD
const WORD *,
const WORD *,
const var_map_t &);
163 void ratfun_add_mpoly(PHEAD
const WORD *,
const WORD *, WORD *,
const var_map_t &,
const bool);
164 void ratfun_add_poly(PHEAD
const WORD *,
const WORD *, WORD *,
const var_map_t &);
166 void ratfun_normalize_mpoly(PHEAD WORD *,
const var_map_t &,
const bool);
167 void ratfun_normalize_poly(PHEAD WORD *,
const var_map_t &);
169 void ratfun_read_mpoly(
const WORD *, fmpz_mpoly_t, fmpz_mpoly_t,
const var_map_t &,
171 void ratfun_read_poly(
const WORD *, fmpz_poly_t, fmpz_poly_t);
173 uint64_t to_argument_mpoly(PHEAD WORD *,
const bool,
const bool,
const bool,
const uint64_t,
174 const fmpz_mpoly_t,
const var_map_t &,
const fmpz_mpoly_ctx_t,
const bool);
175 uint64_t to_argument_mpoly(PHEAD WORD *,
const bool,
const bool,
const bool,
const uint64_t,
176 const fmpz_mpoly_t,
const var_map_t &,
const fmpz_mpoly_ctx_t,
const bool,
const fmpz_t);
177 uint64_t to_argument_poly(PHEAD WORD *,
const bool,
const bool,
const bool,
const uint64_t,
178 const fmpz_poly_t,
const var_map_t &);
179 uint64_t to_argument_poly(PHEAD WORD *,
const bool,
const bool,
const bool,
const uint64_t,
180 const fmpz_poly_t,
const var_map_t &,
const fmpz_t);
185 void simplify_fmpz(fmpz_t, fmpz_t, fmpz_t);
186 void simplify_fmpz_poly(fmpz_poly_t, fmpz_poly_t, fmpz_poly_t);
188 void fix_sign_fmpz_mpoly_ratfun(fmpz_mpoly_t, fmpz_mpoly_t,
const fmpz_mpoly_ctx_t);
189 void fix_sign_fmpz_poly_ratfun(fmpz_poly_t, fmpz_poly_t);