[mathicgb] 256/393: Fixed a few ASSERTs and bugs for varCount==0 that needed to be fixed for multigraded ordering.
Doug Torrance
dtorrance-guest at moszumanska.debian.org
Fri Apr 3 15:59:14 UTC 2015
This is an automated email from the git hooks/post-receive script.
dtorrance-guest pushed a commit to branch upstream
in repository mathicgb.
commit a7884a20b95fee3a42aa363701ffc84e3cf7a15b
Author: Bjarke Hammersholt Roune <bjarkehr.code at gmail.com>
Date: Tue Apr 16 13:07:31 2013 -0400
Fixed a few ASSERTs and bugs for varCount==0 that needed to be fixed for multigraded ordering.
---
src/mathicgb.cpp | 5 +----
src/mathicgb/MonoMonoid.hpp | 28 ++++++++++++++++++++++------
src/test/MonoMonoid.cpp | 5 +++++
3 files changed, 28 insertions(+), 10 deletions(-)
diff --git a/src/mathicgb.cpp b/src/mathicgb.cpp
index 975bd57..9af7c77 100755
--- a/src/mathicgb.cpp
+++ b/src/mathicgb.cpp
@@ -413,11 +413,8 @@ namespace mgb {
MonomialOrderData order
) {
MATHICGB_ASSERT(Pimpl::baseOrderValid(order.baseOrder));
- MATHICGB_ASSERT(order.gradingsSize % varCount() == 0);
+ MATHICGB_ASSERT(varCount() == 0 || order.gradingsSize % varCount() == 0);
- // Currently only single grading supported. TODO: make it work.
- MATHICGB_ASSERT(order.gradingsSize / varCount() <= 1);
-
// Currently only reverse lex supported. TODO: make it work
MATHICGB_ASSERT(order.baseOrder == ReverseLexicographicBaseOrder);
diff --git a/src/mathicgb/MonoMonoid.hpp b/src/mathicgb/MonoMonoid.hpp
index 22c33c1..5c17713 100755
--- a/src/mathicgb/MonoMonoid.hpp
+++ b/src/mathicgb/MonoMonoid.hpp
@@ -135,14 +135,17 @@ public:
MonoMonoid(VarIndex varCount, const std::vector<Exponent>& gradings):
mVarCount(varCount),
- mGradingCount(gradings.size() / varCount),
+ mGradingCount(varCount == 0 ? 0 : gradings.size() / varCount),
mOrderIndexBegin(HasComponent + varCount),
mOrderIndexEnd(mOrderIndexBegin + StoreOrder * mGradingCount),
+ mEntryCount
+ (mOrderIndexEnd + StoreHash == 0 ? 1 : mOrderIndexEnd + StoreHash),
mHashCoefficients(varCount),
mGradingIsTotalDegree(
[&]() {
- MATHICGB_ASSERT(gradings.size() % varCount == 0);
- if (gradings.size() != varCount)
+ MATHICGB_ASSERT(varCount == 0 || gradings.size() % varCount == 0);
+ MATHICGB_ASSERT((varCount == 0) == (gradings.empty()));
+ if (gradings.size() != varCount || varCount == 0)
return false;
for (auto it = gradings.begin(); it != gradings.end(); ++it)
if (*it != 1)
@@ -153,7 +156,8 @@ public:
mGradings(),
mPool(*this)
{
- MATHICGB_ASSERT(gradings.size() % varCount == 0);
+ MATHICGB_ASSERT(varCount == 0 || gradings.size() % varCount == 0);
+ MATHICGB_ASSERT((varCount == 0) == (gradings.empty()));
if (!mGradingIsTotalDegree) {
// Take negative values since reverse lex makes bigger values
// give smaller monomials, but we need bigger degrees to give
@@ -179,6 +183,8 @@ public:
mGradingCount(1),
mOrderIndexBegin(HasComponent + mVarCount),
mOrderIndexEnd(mOrderIndexBegin + StoreOrder * mGradingCount),
+ mEntryCount
+ (mOrderIndexEnd + StoreHash == 0 ? 1 : mOrderIndexEnd + StoreHash),
mHashCoefficients(mVarCount),
mGradingIsTotalDegree(true),
mGradings(),
@@ -197,6 +203,8 @@ public:
mGradingCount(monoid.gradingCount()),
mOrderIndexBegin(HasComponent + mVarCount),
mOrderIndexEnd(mOrderIndexBegin + StoreOrder * mGradingCount),
+ mEntryCount
+ (mOrderIndexEnd + StoreHash == 0 ? 1 : mOrderIndexEnd + StoreHash),
mHashCoefficients(mVarCount),
mGradingIsTotalDegree(monoid.mGradingIsTotalDegree),
mGradings(monoid.mGradings),
@@ -214,6 +222,8 @@ public:
mGradingCount(monoid.gradingCount()),
mOrderIndexBegin(HasComponent + mVarCount),
mOrderIndexEnd(mOrderIndexBegin + StoreOrder * mGradingCount),
+ mEntryCount
+ (mOrderIndexEnd + StoreHash == 0 ? 1 : mOrderIndexEnd + StoreHash),
mHashCoefficients(mVarCount),
mGradingIsTotalDegree(monoid.mGradingIsTotalDegree),
mGradings(monoid.mGradings),
@@ -1218,8 +1228,13 @@ private:
const auto storedDegrees = StoreOrder * gradingCount();
MATHICGB_ASSERT(orderIndexEnd() == orderIndexBegin() + storedDegrees);
MATHICGB_ASSERT(orderIndexEnd() <= entryCount());
+ if (mOrderIndexEnd + StoreHash == 0) {
+ MATHICGB_ASSERT(entryCount() == 1);
+ } else {
+ MATHICGB_ASSERT(entryCount() == mOrderIndexEnd + StoreHash);
+ }
- MATHICGB_ASSERT(gradingCount() >= 1); // todo: if rev lex
+ MATHICGB_ASSERT(varCount() == 0 || gradingCount() >= 1); // todo: if rev lex
if (mGradingIsTotalDegree) {
MATHICGB_ASSERT(mGradings.empty());
@@ -1431,7 +1446,7 @@ private:
/// Returns how many Exponents are necessary to store a
/// monomial. This can include other data than the exponents, so
/// this number can be larger than varCount().
- size_t entryCount() const {return mOrderIndexEnd + StoreHash;}
+ size_t entryCount() const {return mEntryCount;}
VarIndex componentIndex() const {
//static_assert(HasComponent, "");
@@ -1466,6 +1481,7 @@ private:
const VarIndex mGradingCount;
const VarIndex mOrderIndexBegin;
const VarIndex mOrderIndexEnd;
+ const VarIndex mEntryCount;
/// Take dot product of exponents with this vector to get hash value.
std::vector<HashValue> mHashCoefficients;
diff --git a/src/test/MonoMonoid.cpp b/src/test/MonoMonoid.cpp
index 21856e0..9472e37 100755
--- a/src/test/MonoMonoid.cpp
+++ b/src/test/MonoMonoid.cpp
@@ -559,6 +559,11 @@ TYPED_TEST(Monoid, Order) {
check(Monoid(52), sortedTotalDegreeRevLex);
check(Monoid(52, std::vector<Exponent>(52, 1)), sortedTotalDegreeRevLex);
check(Monoid(52, std::vector<Exponent>(52, 7)), sortedTotalDegreeRevLex);
+ std::vector<Exponent> revLexGradings(52, 1);
+ for (size_t grading = 51; grading != static_cast<size_t>(-1); --grading)
+ for (size_t var = 0; var < 52; ++var)
+ revLexGradings.push_back(var == grading ? -1 : 0);
+ check(Monoid(52, revLexGradings), sortedTotalDegreeRevLex);
std::vector<Exponent> dupGradings = {
5, 2, 3,
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-science/packages/mathicgb.git
More information about the debian-science-commits
mailing list