Macaulay2 Engine
Loading...
Searching...
No Matches
res-moninfo-sparse.cpp
Go to the documentation of this file.
1// Copyright 2016-2017 Michael E. Stillman
2
4#include <cstdio> // for fprintf, stderr
5#include <cstdlib> // for rand
6#include "interface/m2-types.h" // for M2_gbTrace
7#include "schreyer-resolution/res-monomial-types.hpp" // for res_monomial_word
8
10 const std::vector<int>& var_degrees,
11 const std::vector<int>& weightvecs,
12 const MonomialOrderingType moType)
13{
14 mNumVars = nvars;
15 hashfcn =
16 std::unique_ptr<res_monomial_word[]>(new res_monomial_word[mNumVars]);
17 for (int i = 0; i < mNumVars; i++) hashfcn[i] = rand();
18 mask = 0x10000000;
19 mVarDegrees = var_degrees;
20
24 ncalls_mult = 0;
32 ncalls_divide = 0;
33 ncalls_weight = 0;
36
37 mNumWeights = 0;
38 if (moType == MonomialOrderingType::Lex) // moIsLex(mo)
39 {
40 // mCompareFcn = &ResMonoidSparse::compare_lex;
41
42 if (M2_gbTrace >= 1) fprintf(stderr, "lex order\n");
43 }
44 else if (moType == MonomialOrderingType::GRevLex) // moIsGRevLex(mo)
45 {
46 // mCompareFcn = &ResMonoidSparse::compare_grevlex;
47
48 if (M2_gbTrace >= 1) fprintf(stderr, "grevlex order\n");
49 }
50 else
51 {
52 mWeightVectors = weightvecs;
53 mNumWeights = static_cast<int>(mWeightVectors.size()) / nvars;
54 // mCompareFcn = &ResMonoidSparse::compare_weightvector;
55
56 if (M2_gbTrace >= 1) fprintf(stderr, "weight order\n");
57 }
58
59 nslots = 3 + nvars + mNumWeights;
61 mFirstWeight = 3;
62}
63
66{
67 fprintf(stderr, "monomial info\n");
68 fprintf(stderr, " nvars = %d", mNumVars);
69 fprintf(stderr, " nslots = %d", nslots);
70 fprintf(stderr, " mask = %d", mask);
71 fprintf(stderr, " hash values for each variable\n");
72 for (int i = 0; i < mNumVars; i++) fprintf(stderr, " %d\n", hashfcn[i]);
73 fprintf(stderr, " #calls hashval = %lu\n", ncalls_hash_value);
74 fprintf(stderr, " #calls compare = %lu\n", ncalls_compare);
75 fprintf(stderr, " #calls grevlex = %lu\n", ncalls_compare_grevlex);
76 fprintf(stderr, " #calls mult = %lu\n", ncalls_mult);
77 fprintf(stderr, " #calls get comp= %lu\n", ncalls_get_component);
78 fprintf(stderr, " #calls fromexp = %lu\n", ncalls_from_expvector);
79 fprintf(stderr, " #calls toexp = %lu\n", ncalls_to_expvector);
80 fprintf(stderr, " #calls fromvp = %lu\n", ncalls_from_varpower);
81 fprintf(stderr, " #calls tovp = %lu\n", ncalls_to_varpower);
82 fprintf(stderr, " #calls is equal= %lu\n", ncalls_is_equal);
83 fprintf(stderr, " #calls eq true = %lu\n", ncalls_is_equal_true);
84 fprintf(stderr, " #calls divide = %lu\n", ncalls_divide);
85 fprintf(stderr, " #calls weight = %lu\n", ncalls_weight);
86 fprintf(stderr, " #calls unneeded= %lu\n", ncalls_unneccesary);
87 fprintf(stderr, " #calls vp quot = %lu\n", ncalls_quotient_as_vp);
88}
89
91{
92 fprintf(stderr, "[");
93 for (int v = 1; v < monomial_size(m); v++)
94 {
95 if (v > 1) fprintf(stderr, " ");
96 fprintf(stderr, "%d", m[v]);
97 }
98 fprintf(stderr, "]");
99}
100
102{
104 const int* end = m + *m;
105 for (const int* v = m + mFirstVar; v != end; ++v)
106 {
107 fprintf(stdout, "%c", 'a' + *v);
108 }
109 fprintf(stdout, "<%d>", comp);
110}
111
113{
114 o << "[";
115 for (int ell = 0; ell < monomial_size(mon); ell++)
116 {
117 if (ell != 0) o << " ";
118 o << mon[ell];
119 }
120 o << "]";
121}
122
123// Local Variables:
124// compile-command: "make -C $M2BUILDDIR/Macaulay2/e "
125// indent-tabs-mode: nil
126// End:
unsigned long ncalls_from_expvector
component_index get_component(res_const_packed_monomial m) const
void showAlpha(res_const_packed_monomial m) const
unsigned long ncalls_from_varpower
unsigned long ncalls_weight
ResMonoidSparse(int mNumVars, const std::vector< int > &var_degrees, const std::vector< int > &weightvecs, const MonomialOrderingType moType)
unsigned long ncalls_compare
res_monomial_word mask
unsigned long ncalls_hash_value
int monomial_size(res_const_packed_monomial m) const
unsigned long ncalls_is_equal_true
unsigned long ncalls_to_varpower
std::vector< int > mVarDegrees
unsigned long ncalls_mult
unsigned long ncalls_quotient_as_vp
unsigned long ncalls_unneccesary
unsigned long ncalls_compare_grevlex
std::vector< int > mWeightVectors
unsigned long ncalls_is_equal
unsigned long ncalls_divide
unsigned long ncalls_to_expvector
void dump(std::ostream &o, res_const_packed_monomial mon)
unsigned long ncalls_get_component
std::unique_ptr< res_monomial_word[]> hashfcn
int M2_gbTrace
Definition m2-types.cpp:52
Engine-to-interpreter type vocabulary across the C++ / .dd boundary.
ResMonoidSparse — sparse-multiset encoding alternative to ResMonoidDense.
myword component_index
const res_monomial_word * res_const_packed_monomial
myword res_monomial_word
MonomialOrderingType
Typed-monomial vocabulary shared by ResMonoid, ResPolyRing, SchreyerFrame, and F4Res.
TermIterator< Nterm > end(Nterm *)
Definition ringelem.cpp:5