3#ifndef _res_moninfo_dense_hpp_
4#define _res_moninfo_dense_hpp_
79 std::unique_ptr<res_monomial_word[]>
120 const std::vector<int>& var_degrees,
121 const std::vector<int>& weightvecs,
145 for (
int i = 0; i <
nslots; i++) *target++ = *src++;
169 for (
int i = 0; i <
nvars; i++)
179 for (
int i = 0; i <
nvars; i++)
182 if (a > 0) val += a * wt[i];
234 for (
int i =
nvars - 1; i >= 0; i--)
254 for (
int i = 2; i <
nslots; i++)
276 auto e = i.exponent();
290 for (
int j =
nslots; j > 0; --j)
291 if (*m++ != *n++)
return false;
300 if (*m++ != *n++)
return false;
303 for (
int j =
nslots - 2; j > 0; --j)
304 if (*m++ != *n++)
return false;
315 for (
int i = lo; i <= hi; i++)
316 if (monom[i] > 0)
return false;
324 for (
int j =
nslots - 1; j > 0; --j)
325 if (
mask & (*m++))
return false;
334 for (
int j =
nslots; j > 0; --j) *
result++ = *m++ + *n++;
350 for (
int i =
nslots - 2; i > 0; i--)
353 if (cmp < 0)
return false;
378 for (
int i=
nslots-2; i>0; i--) {
380 if (cmp < 0)
return -1;
381 if (cmp > 0)
return 1;
384 if (cmp < 0)
return 1;
385 if (cmp > 0)
return -1;
399 printf(
"compare_schreyer: ");
408 printf(
" tiebreakers: %d %d\n", tie1, tie2);
414 for (
int i =
nslots - 2; i > 0; i--)
417 if (cmp < 0)
return -1;
418 if (cmp > 0)
return 1;
421 if (cmp < 0)
return 1;
422 if (cmp > 0)
return -1;
431 for (
int i=
nslots-2; i>0; i--) {
433 if (cmp > 0)
return -1;
434 if (cmp < 0)
return 1;
437 if (cmp < 0)
return 1;
438 if (cmp > 0)
return -1;
448 if (cmp > 0)
return -1;
449 if (cmp < 0)
return 1;
453 for (
int i=
nvars-1; i>0; i--) {
455 if (cmp < 0)
return -1;
456 if (cmp > 0)
return 1;
459 if (cmp < 0)
return 1;
460 if (cmp > 0)
return -1;
489 for (
int i =
nvars - 1; i >= 0; --i)
static Exponent weight(ConstExponents m, const std::vector< T > &wts)
unsigned long ncalls_quotient_as_vp
bool monomial_part_is_equal(res_const_packed_monomial m, res_const_packed_monomial n) const
int max_monomial_size() const
unsigned long ncalls_hash_value
component_index get_component(res_const_packed_monomial m) const
bool from_expvector(res_const_ntuple_monomial e, component_index comp, res_packed_monomial result) const
unsigned long ncalls_to_varpower
bool mult(res_const_packed_monomial m, res_const_packed_monomial n, res_packed_monomial result) const
unsigned long ncalls_divide
std::unique_ptr< res_monomial_word[]> hashfcn
void copy(res_const_packed_monomial src, res_packed_monomial target) const
int compare_schreyer(res_const_packed_monomial m, res_const_packed_monomial n, res_const_packed_monomial m0, res_const_packed_monomial n0, component_index tie1, component_index tie2) const
res_packed_monomial monomial
void showAlpha(res_const_packed_monomial m) const
void to_varpower_monomial(res_const_packed_monomial m, res_varpower_monomial result) const
unsigned long ncalls_compare
unsigned long ncalls_is_equal
bool to_expvector(res_const_packed_monomial m, res_ntuple_monomial result, component_index &result_comp) const
unsigned long ncalls_unneccesary
void set_component(component_index component, res_packed_monomial m) const
bool is_divisible_by_var_in_range(res_const_packed_monomial monom, int lo, int hi) const
bool one(component_index comp, res_packed_monomial result) const
unsigned long ncalls_to_expvector
unsigned long ncalls_from_expvector
bool is_equal(res_const_packed_monomial m, res_const_packed_monomial n) const
res_monomial_word hash_value(res_const_packed_monomial m) const
ResMonoidDense(int nvars, const std::vector< int > &var_degrees, const std::vector< int > &weightvecs, MonomialOrderingType moType)
int skew_vars(const SkewMultiplication *skew, res_const_packed_monomial m, int *skewvars) const
int monomial_size(res_const_packed_monomial m) const
unsigned long ncalls_get_component
unsigned long ncalls_weight
res_const_packed_monomial const_monomial
void from_varpower_monomial(res_const_varpower_monomial m, component_index comp, res_packed_monomial result) const
std::vector< int > weight_vectors
bool divide(res_const_packed_monomial m, res_const_packed_monomial n, res_packed_monomial result) const
void unchecked_mult(res_const_packed_monomial m, res_const_packed_monomial n, res_packed_monomial result) const
std::vector< int > mVarDegrees
int skew_mult_sign(const SkewMultiplication *skew, res_const_packed_monomial m, res_const_packed_monomial n) const
unsigned long ncalls_is_equal_true
unsigned long ncalls_mult
void quotient_as_vp(res_const_packed_monomial a, res_const_packed_monomial b, res_varpower_monomial result) const
bool check_monomial(res_const_packed_monomial m) const
unsigned long ncalls_from_varpower
void variable_as_vp(int v, res_varpower_monomial result) const
int degree_of_vp(res_const_varpower_monomial a) const
void dump(std::ostream &o, res_const_packed_monomial mon)
int mult_sign(const int *exp1, const int *exp2) const
int skew_vars(const int *exp, int *result) const
Sign-rule helper used by every ring that has a skew-commutative subset of variables (exterior factor,...
static int compare(const vecterm *t, const vecterm *s)
VALGRIND_MAKE_MEM_DEFINED & result(result)
ExponentListIterator< myword, false > index_res_varpower_monomial
const res_varpower_word * res_const_varpower_monomial
res_varpower_word * res_varpower_monomial
res_ntuple_word * res_ntuple_monomial
const res_monomial_word * res_const_packed_monomial
res_varpower_monomials::Exponent res_varpower_word
res_monomial_word * res_packed_monomial
const res_ntuple_word * res_const_ntuple_monomial
Typed-monomial vocabulary shared by ResMonoid, ResPolyRing, SchreyerFrame, and F4Res.
SkewMultiplication — configuration object naming the skew-commuting variables of a ring.