[mathicgb] 288/393: Removed a lot of now unused free module order code.
Doug Torrance
dtorrance-guest at moszumanska.debian.org
Fri Apr 3 15:59:21 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 b53b43af03053772d39757691d1fb03ace162aa2
Author: Bjarke Hammersholt Roune <bjarkehr.code at gmail.com>
Date: Thu Apr 18 18:37:27 2013 -0400
Removed a lot of now unused free module order code.
---
src/mathicgb/FreeModuleOrder.cpp | 330 +++------------------------------------
1 file changed, 24 insertions(+), 306 deletions(-)
diff --git a/src/mathicgb/FreeModuleOrder.cpp b/src/mathicgb/FreeModuleOrder.cpp
index 2b54d08..2dd9c71 100755
--- a/src/mathicgb/FreeModuleOrder.cpp
+++ b/src/mathicgb/FreeModuleOrder.cpp
@@ -307,99 +307,15 @@ private:
PolyRing const* const mRing;
};
-// let d(x) be the first degree of x, so if there are more than one
-// vector of weights, only the first one matters for d. By "first"
-// degree, read "one with highest index".
-//
-// rule 1: if d(ag_i) > (bg_j) then ae_i > be_j
-// rule 2: if i > j then ae_i > be_j
-// rule 2: graded reverse lex as for OrderA, but ignoring the first degree
-//
-// It was probably intended that all the degree should be considered,
-// it just wasn't implemented for more than 1 degree.
-class OrderB {
-public:
- OrderB(const Ideal *I):
- mRing(I->getPolyRing()),
- topindex(I->getPolyRing()->maxMonomialSize() - 2) {
- for (size_t i = 0; i < I->size(); ++i)
- appendBasisElement(I->getPoly(i)->getLeadMonomial());
- }
-
- void scrambleSignatureForFastComparison(monomial sig) const {}
- void scrambleSignaturesForFastComparison(std::vector<PreSPair>& pairs) const {}
- bool scrambledLessThan(const_monomial a, const_monomial b) const {
- return signatureCompare(a, b) == LT;
- }
- void unscrambleSignature(monomial sig) const {}
-
- int signatureCompare(const_monomial sig, const_monomial sig2) const {
- int da = - sig[topindex] + deg[*sig];
- int db = -sig2[topindex] + deg[*sig2];
- if (da > db) return GT;
- if (db > da) return LT;
- int cmp = *sig - *sig2;
- if (cmp > 0) return GT;
- if (cmp < 0) return LT;
- for (size_t i = topindex-1; i >= 1; --i)
- {
- int cmp = sig[i] - sig2[i];
- if (cmp < 0) return GT;
- if (cmp > 0) return LT;
- }
- return EQ;
- }
-
- int signatureCompare(
- const_monomial sig,
- const_monomial m2,
- const_monomial sig2
- ) const {
- int da = - sig[topindex] + deg[*sig];
- int db = - m2[topindex];
- db += -sig2[topindex] + deg[*sig2];
- if (da > db) return GT;
- if (db > da) return LT;
- int cmp = *sig - *sig2;
- if (cmp > 0) return GT;
- if (cmp < 0) return LT;
- for (size_t i = topindex-1; i >= 1; --i)
- {
- int cmp = sig[i] - m2[i] - sig2[i];
- if (cmp < 0) return GT;
- if (cmp > 0) return LT;
- }
- return EQ;
- }
-
- char const* description() const {return "DegreeUp IndexUp GrevLex";}
- void appendBasisElement(const_monomial m) {deg.push_back(-m[topindex]);}
-
-private:
- PolyRing const* const mRing;
- size_t const topindex;
-
- // array of degrees for each component 0..numgens I - 1
- std::vector<int> deg;
-};
-
-// as OrderB, except rule 2 is opposite, so
-// rule 2: if i > j then ae_i < be_j
class OrderC
{
public:
OrderC(const Ideal* I):
mRing(I->getPolyRing()),
topindex(I->getPolyRing()->maxMonomialSize() - 2)
- {
- for (size_t i = 0; i < I->size(); ++i)
- appendBasisElement(I->getPoly(i)->getLeadMonomial());
- }
+ {}
- void appendBasisElement(const_monomial m) {
- deg.push_back(-m[topindex]);
- monoms.push_back(m);
- }
+ void appendBasisElement(const_monomial m) {}
void scrambleSignatureForFastComparison(monomial sig) const {}
void scrambleSignaturesForFastComparison(std::vector<PreSPair>& pairs) const {}
@@ -409,8 +325,8 @@ public:
void unscrambleSignature(monomial sig) const {}
int signatureCompare(const_monomial sig, const_monomial sig2) const {
- int da = - sig[topindex];// + deg[*sig];
- int db = -sig2[topindex];// + deg[*sig2];
+ int da = - sig[topindex];
+ int db = -sig2[topindex];
if (da > db) return GT;
if (db > da) return LT;
int cmp = *sig - *sig2;
@@ -419,21 +335,11 @@ public:
auto a = sig;
auto b = sig2;
-// const_monomial ma = monoms[*a];
- // const_monomial mb = monoms[*b];
for (size_t i = topindex; i >= 1; i--) {
- int cmp = a[i] - b[i];// + ma[i] - mb[i];
+ int cmp = a[i] - b[i];
if (cmp != 0)
return cmp < 0 ? GT : LT;
}
-/*
- for (size_t i = topindex-1; i >= 1; --i)
- {
- int cmp = sig[i] - sig2[i];
- if (cmp < 0) return GT;
- if (cmp > 0) return LT;
- }
-*/
return EQ;
}
@@ -442,9 +348,9 @@ public:
const_monomial m2,
const_monomial sig2
) const {
- int da = - sig[topindex];// + deg[*sig];
+ int da = - sig[topindex];
int db = - m2[topindex];
- db += -sig2[topindex];// + deg[*sig2];
+ db += -sig2[topindex];
if (da > db) return GT;
if (db > da) return LT;
int cmp = *sig - *sig2;
@@ -453,21 +359,12 @@ public:
auto a = sig;
auto b = sig2;
-// const_monomial ma = monoms[*a];
- // const_monomial mb = monoms[*b];
for (size_t i = topindex; i >= 1; i--)
{
- int cmp = a[i] - b[i]/* + ma[i] - mb[i]*/ - m2[i];
+ int cmp = a[i] - b[i] - m2[i];
if (cmp < 0) return GT;
if (cmp > 0) return LT;
}
-/*
- for (size_t i = topindex-1; i >= 1; --i)
- {
- int cmp = sig[i] - m2[i] - sig2[i];
- if (cmp < 0) return GT;
- if (cmp > 0) return LT;
- }*/
return EQ;
}
@@ -476,156 +373,10 @@ public:
private:
PolyRing const* const mRing;
const size_t topindex;
-
- // array of degrees for each component 0..numgens I - 1
- std::vector<int> deg;
- std::vector<const_monomial> monoms;
};
// Let l(ae_i) be the leading monomial of ag_i.
// Indexes are considered from high to low
-// rule 1: higher degree of l(ae_I) wins
-// rule 2: reverse lex on l(ae_i)
-// rule 3: higher component wins (if mUp is true)
-// rule 3': lower components wins (if mUp is false)
-class OrderD
-{
-public:
- OrderD(Ideal const* I, bool up0):
- mRing(I->getPolyRing()),
- mUp(up0),
- topindex(mRing->maxMonomialSize() - 2) {
- for (size_t i = 0; i < I->size(); ++i)
- appendBasisElement(I->getPoly(i)->getLeadMonomial());
- }
-
- void appendBasisElement(const_monomial m) {monoms.push_back(m);}
-
- int signatureCompare(const_monomial a, const_monomial b) const {
- const_monomial ma = monoms[*a];
- const_monomial mb = monoms[*b];
- for (size_t i = topindex; i >= 1; i--) {
- int cmp = a[i] - b[i] + ma[i] - mb[i];
- if (cmp != 0)
- return cmp < 0 ? GT : LT;
- }
- if (*a == *b)
- return EQ;
- if (mUp)
- return *a < *b ? LT : GT;
- else
- return *a < *b ? GT : LT;
- }
-
- void scrambleSignatureForFastComparison(monomial sig) const {
-#ifdef DEBUG
- monomial original = mRing->allocMonomial();
- mRing->monomialCopy(sig, original);
-#endif
- const_monomial adjust = monoms[*sig];
- for (size_t i = topindex; i >= 1; --i)
- sig[i] += adjust[i];
- if (mUp)
- *sig = -*sig;
-#ifdef DEBUG
- monomial unscrambled = mRing->allocMonomial();
- mRing->monomialCopy(sig, unscrambled);
- unscrambleSignature(unscrambled);
- MATHICGB_ASSERT(mRing->monomialEQ(original, unscrambled));
- mRing->freeMonomial(original);
- mRing->freeMonomial(unscrambled);
-#endif
- }
-
- void scrambleSignaturesForFastComparison(std::vector<PreSPair>& pairs) const {
- typedef std::vector<PreSPair>::iterator Iter;
- Iter end = pairs.end();
- for (Iter it = pairs.begin(); it != end; ++it)
- scrambleSignatureForFastComparison(it->signature);
- }
-
- inline bool scrambledLessThan(
- const_monomial a,
- const_monomial b
- ) const {
- /* non-unrolled version:
- for (size_t i = topindex; i != static_cast<size_t>(-1); i--) {
- // for i == 0, this will compare the components. We have
- // already adjusted those to take account of mUp.
- int cmp = a[i] - b[i]; // already done: + ma[i] - mb[i];
- if (cmp != 0)
- return cmp > 0;
- }
- return false; // equality */
-
- size_t i = topindex;
- if ((topindex & 1) == 0) { // if odd number of entries to check
- int cmp = a[topindex] - b[topindex];
- if (cmp != 0)
- return cmp > 0;
- --i;
- }
- for (; i != static_cast<size_t>(-1); i -= 2) {
- int cmp = a[i] - b[i]; // already done: + ma[i] - mb[i];
- if (cmp != 0)
- return cmp > 0;
- int cmp2 = a[i - 1] - b[i - 1];
- if (cmp2 != 0)
- return cmp2 > 0;
- }
- return false; // equality
- }
-
- void unscrambleSignature(monomial sig) const {
- if (mUp)
- *sig = -*sig;
- const_monomial adjust = monoms[*sig];
- for (size_t i = topindex; i >= 1; --i)
- sig[i] -= adjust[i];
- }
-
- int signatureCompare(const_monomial a, const_monomial m2, const_monomial b) const {
- const_monomial ma = monoms[*a];
- const_monomial mb = monoms[*b];
- for (size_t i = topindex; i >= 1; i--)
- {
- int cmp = a[i] - b[i] + ma[i] - mb[i] - m2[i];
- if (cmp < 0) return GT;
- if (cmp > 0) return LT;
- }
- int cmp = *a - *b;
- if (mUp)
- {
- if (cmp < 0) return LT;
- if (cmp > 0) return GT;
- }
- else
- {
- if (cmp < 0) return GT;
- if (cmp > 0) return LT;
- }
- return EQ;
- }
-
- virtual char const* description() const {
- if (mUp)
- return "SchreyerGrevLexUp";
- else
- return "SchreyerGrevLexDown";
- }
-
-private:
- PolyRing const* const mRing;
- bool const mUp; // how to break ties once the monomials are the same
- size_t const topindex; // taken from R
-
- // array 0..numgens I-1 pointing to lead terms of elements of I
- std::vector<const_monomial> monoms;
-};
-
-
-// Let l(ae_i) be the leading monomial of ag_i.
-// Indexes are considered from high to low
// rule 1: higher component wins (if mUp is true)
// rule 1': lower components wins (if mUp is false)
// rule 2: higher degree of l(ae_I) wins
@@ -633,30 +384,18 @@ private:
class OrderE
{
public:
- OrderE(Ideal const* I, bool up0):
+ OrderE(Ideal const* I):
mRing(I->getPolyRing()),
- mUp(up0),
- topindex(mRing->maxMonomialSize() - 2) {
- for (size_t i = 0; i < I->size(); ++i)
- appendBasisElement(I->getPoly(i)->getLeadMonomial());
- }
+ topindex(mRing->maxMonomialSize() - 2)
+ {}
- void appendBasisElement(const_monomial m) {monoms.push_back(m);}
+ void appendBasisElement(const_monomial m) {}
int signatureCompare(const_monomial a, const_monomial b) const {
- //const_monomial ma = monoms[*a];
- //const_monomial mb = monoms[*b];
-
if (*a != *b)
- {
- if (mUp)
- return *a < *b ? LT : GT;
- else
- return *a < *b ? GT : LT;
- }
-
+ return *a < *b ? GT : LT;
for (size_t i = topindex; i >= 1; i--) {
- int cmp = a[i] - b[i];// + ma[i] - mb[i];
+ int cmp = a[i] - b[i];
if (cmp != 0)
return cmp < 0 ? GT : LT;
}
@@ -671,26 +410,14 @@ public:
void unscrambleSignature(monomial sig) const {}
int signatureCompare(const_monomial a, const_monomial m2, const_monomial b) const {
- const_monomial ma;// = monoms[*a];
- const_monomial mb;// = monoms[*b];
int cmp = *a - *b;
- if (cmp != 0)
- {
- if (mUp)
- {
- if (cmp < 0) return LT;
- if (cmp > 0) return GT;
- }
- else
- {
- if (cmp < 0) return GT;
- if (cmp > 0) return LT;
- }
- }
+ if (cmp != 0) {
+ if (cmp < 0) return GT;
+ if (cmp > 0) return LT;
+ }
- for (size_t i = topindex; i >= 1; i--)
- {
- int cmp = a[i] - b[i]/* + ma[i] - mb[i]*/ - m2[i];
+ for (size_t i = topindex; i >= 1; i--) {
+ int cmp = a[i] - b[i] - m2[i];
if (cmp < 0) return GT;
if (cmp > 0) return LT;
}
@@ -698,19 +425,12 @@ public:
}
virtual char const* description() const {
- if (mUp)
- return "IndexUp SchreyerGrevLex";
- else
- return "IndexDown SchreyerGrevLex";
+ return "IndexDown SchreyerGrevLex";
}
private:
PolyRing const* const mRing;
- bool const mUp;
size_t const topindex; // taken from R
-
- // array 0..numgens I-1 pointing to lead terms of elements of I
- std::vector<const_monomial> monoms;
};
void FreeModuleOrder::displayOrderTypes(std::ostream &o)
@@ -732,20 +452,18 @@ std::unique_ptr<FreeModuleOrder> FreeModuleOrder::makeOrder(FreeModuleOrderType
switch (type) {
case 4:
- //return make_unique<ConcreteOrder<OrderD>>(OrderD(I, true));
case 5:
- //return make_unique<ConcreteOrder<OrderD>>(OrderD(I, false));
case 1:
return make_unique<ConcreteOrder<OrderA>>(OrderA(I->getPolyRing()));
case 2:
- //return make_unique<ConcreteOrder<OrderB>>(OrderB(I));
case 3:
return make_unique<ConcreteOrder<OrderC>>(OrderC(I));
+
case 6:
- //return make_unique<ConcreteOrder<OrderE>>(OrderE(I, true));
case 7:
- return make_unique<ConcreteOrder<OrderE>>(OrderE(I, false));
+ return make_unique<ConcreteOrder<OrderE>>(OrderE(I));
+
default: break;
}
--
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