Macaulay2 Engine
Loading...
Searching...
No Matches
moninfo.cpp
Go to the documentation of this file.
1// Copyright 2005-2021 Michael E. Stillman
2
3#include "f4/moninfo.hpp"
4#include "monordering.hpp" // for monomialOrderingToMatrix
5#include "newdelete.hpp" // for freemem, newarray_atomic
6
7#include <cstdio> // for fprintf, stderr, stdout
8#include <cstdlib> // for rand
9#include <iostream>
10
12 const MonomialOrdering *mo,
13 const std::vector<int>& heftDegrees,
14 const std::vector<int>& moduleHeftDegrees)
15 : mHeftDegrees(heftDegrees),
16 mModuleHeftDegrees(moduleHeftDegrees)
17{
18 nvars = nvars0;
20 for (int i = 0; i < nvars; i++) hashfcn[i] = rand();
21 mask = 0x10000000;
22
24 ncalls_mult = 0;
32 ncalls_divide = 0;
33 ncalls_weight = 0;
36
38 mWeightVectors, // flattened
39 mTieBreakerIsRevLex, // true means RevLex, false means Lex
40 mPositionUp, // +1 means Up, -1 means Down
41 mComponentLoc); // 0 means check first comp, -1 means check at end, otherwise check before this location
42
43 mNumWeights = (nvars == 0 ? 0 : mWeightVectors.size() / nvars);
44
45 // if (moIsLex(mo))
46 // {
47 // compare = &MonomialInfo::compare_lex;
48
49 // if (M2_gbTrace >= 1) fprintf(stderr, "lex order\n");
50 // }
51 // else if (moIsGRevLex(mo))
52 // {
53 // compare = &MonomialInfo::compare_grevlex;
54
55 // if (M2_gbTrace >= 1) fprintf(stderr, "grevlex order\n");
56 // }
57 // else
58 // {
59 // weight_vectors = moGetWeightValues(mo);
60 // nweights = weight_vectors->len / nvars;
61 // compare = &MonomialInfo::compare_weightvector;
62
63 // if (M2_gbTrace >= 1) fprintf(stderr, "weight order\n");
64 // }
65
66 nslots = 2 + nvars + mNumWeights;
68}
69
71{
72 delete [] hashfcn;
73}
74
76{
80 for (int j = 0; j < mHeftDegrees.size(); ++j)
81 {
82 sum += mHeftDegrees[j] * m1[j];
83 }
84 return sum;
85}
86
88{
89 fprintf(stderr, "monomial info\n");
90 fprintf(stderr, " nvars = %d", nvars);
91 fprintf(stderr, " nslots = %d", nslots);
92 fprintf(stderr, " firstvar = %d", firstvar);
93 fprintf(stderr, " nweights = %d", mNumWeights);
94 fprintf(stderr, " tiebreaker = %d", mTieBreakerIsRevLex);
95 fprintf(stderr, " mask = %ld", mask);
96 fprintf(stderr, " hash values for each variable\n");
97 for (int i = 0; i < nvars; i++) fprintf(stderr, " %ld\n", hashfcn[i]);
98 fprintf(stderr, " #calls compare = %lu\n", ncalls_compare);
99 fprintf(stderr, " #calls mult = %lu\n", ncalls_mult);
100 fprintf(stderr, " #calls get comp= %lu\n", ncalls_get_component);
101 fprintf(stderr, " #calls fromexp = %lu\n", ncalls_from_expvector);
102 fprintf(stderr, " #calls toexp = %lu\n", ncalls_to_expvector);
103 fprintf(stderr, " #calls fromvp = %lu\n", ncalls_from_varpower);
104 fprintf(stderr, " #calls tovp = %lu\n", ncalls_to_varpower);
105 fprintf(stderr, " #calls is equal= %lu\n", ncalls_is_equal);
106 fprintf(stderr, " #calls eq true = %lu\n", ncalls_is_equal_true);
107 fprintf(stderr, " #calls divide = %lu\n", ncalls_divide);
108 fprintf(stderr, " #calls weight = %lu\n", ncalls_weight);
109 fprintf(stderr, " #calls unneeded= %lu\n", ncalls_unneccesary);
110 fprintf(stderr, " #calls vp quot = %lu\n", ncalls_quotient_as_vp);
111}
112
114{
115 fprintf(stderr, "[");
116 for (int v = 1; v < monomial_size(m); v++)
117 {
118 if (v > 1) fprintf(stderr, " ");
119 fprintf(stderr, "%ld", m[v]);
120 }
121 fprintf(stderr, "]");
122}
123
125{
126 long comp = get_component(m);
127
128 m += 2 + mNumWeights; // get by: hashcode, component, weightvals
129 for (int i = 0; i < nvars; i++)
130 {
131 long e = *m++;
132 if (e == 0) continue;
133 fprintf(stdout, "%c", 'a' + i);
134 if (e > 1) fprintf(stdout, "%ld", e);
135 }
136 fprintf(stdout, "<%ld>", comp);
137}
138
139// Local Variables:
140// compile-command: "make -C $M2BUILDDIR/Macaulay2/e "
141// indent-tabs-mode: nil
142// End:
unsigned long ncalls_weight
Definition moninfo.hpp:142
unsigned long ncalls_to_varpower
Definition moninfo.hpp:137
unsigned long ncalls_from_expvector
Definition moninfo.hpp:135
monomial_word mask
Definition moninfo.hpp:112
unsigned long ncalls_is_equal_true
Definition moninfo.hpp:140
unsigned long ncalls_compare
Definition moninfo.hpp:132
void show() const
Definition moninfo.cpp:87
unsigned long ncalls_quotient_as_vp
Definition moninfo.hpp:144
unsigned long ncalls_unneccesary
Definition moninfo.hpp:143
std::vector< int > mHeftDegrees
Definition moninfo.hpp:120
MonomialInfo(int nvars, const MonomialOrdering *mo, const std::vector< int > &heftDegrees, const std::vector< int > &moduleHeftDegrees)
Definition moninfo.cpp:11
std::vector< int > mModuleHeftDegrees
Definition moninfo.hpp:123
long get_component(const_packed_monomial m) const
Definition moninfo.hpp:185
unsigned long ncalls_to_expvector
Definition moninfo.hpp:136
std::vector< int > mWeightVectors
Definition moninfo.hpp:119
bool mTieBreakerIsRevLex
Definition moninfo.hpp:125
unsigned long ncalls_get_component
Definition moninfo.hpp:134
monomial_word monomial_heft(const_packed_monomial m) const
Definition moninfo.cpp:75
void showAlpha(const_packed_monomial m) const
Definition moninfo.cpp:124
int monomial_size(const_packed_monomial m) const
Definition moninfo.hpp:160
unsigned long ncalls_is_equal
Definition moninfo.hpp:139
unsigned long ncalls_divide
Definition moninfo.hpp:141
unsigned long ncalls_from_varpower
Definition moninfo.hpp:138
unsigned long ncalls_mult
Definition moninfo.hpp:133
int mComponentLoc
Definition moninfo.hpp:127
monomial_word * hashfcn
Definition moninfo.hpp:111
virtual ~MonomialInfo()
Definition moninfo.cpp:70
bool monomialOrderingToMatrix(const struct MonomialOrdering &mo, std::vector< int > &mat, bool &base_is_revlex, int &component_direction, int &component_is_before_row)
const monomial_word * const_packed_monomial
Definition moninfo.hpp:79
long monomial_word
Definition moninfo.hpp:77
MonomialInfo — F4's packed_monomial encoding plus operations.
MonomialOrderings — C++ factories for the declarative MonomialOrdering blocks.
our_new_delete — per-class opt-in routing of new / delete through bdwgc.
Front-end-side description of a monomial ordering as a list of mon_part blocks.