[mathicgb] 344/393: Pruned unused or less important stuff from the MonomialTableArray interface.
Doug Torrance
dtorrance-guest at moszumanska.debian.org
Fri Apr 3 15:59:32 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 3654c0feca3750845e2e2db10bc309d90712ad24
Author: Bjarke Hammersholt Roune <bjarkehr.code at gmail.com>
Date: Wed Aug 28 17:36:13 2013 +0200
Pruned unused or less important stuff from the MonomialTableArray interface.
---
src/cli/SigGBAction.cpp | 2 +-
src/mathicgb/MTArray.cpp | 102 ++++++++-------------------------------
src/mathicgb/MTArray.hpp | 62 ++----------------------
src/mathicgb/MonTableDivList.hpp | 9 ++--
src/mathicgb/MonTableKDTree.hpp | 3 +-
src/mathicgb/SigSPairs.cpp | 5 +-
src/mathicgb/SignatureGB.cpp | 30 +++---------
src/mathicgb/io-util.cpp | 2 +-
src/test/poly-test.cpp | 30 ++++++------
9 files changed, 53 insertions(+), 192 deletions(-)
diff --git a/src/cli/SigGBAction.cpp b/src/cli/SigGBAction.cpp
index dbe5291..216a402 100755
--- a/src/cli/SigGBAction.cpp
+++ b/src/cli/SigGBAction.cpp
@@ -96,7 +96,7 @@ void SigGBAction::performAction() {
{
std::ofstream syzygyOut((mParams.inputFileNameStem(0) + ".syz").c_str());
syzygyOut << "-- syz: ----\n";
- alg.getSyzTable()->display(syzygyOut, 1);
+ alg.getSyzTable()->display(syzygyOut);
syzygyOut << std::endl;
}
}
diff --git a/src/mathicgb/MTArray.cpp b/src/mathicgb/MTArray.cpp
index 1cbc88b..5cf68b2 100755
--- a/src/mathicgb/MTArray.cpp
+++ b/src/mathicgb/MTArray.cpp
@@ -13,7 +13,6 @@ class MTArrayT : public MonomialTableArray
{
typedef MT T;
typedef typename MT::Configuration Conf;
- typedef MonomialTableArray::V V; // value type
public:
MTArrayT(size_t components, const Conf &conf):
MonomialTableArray(conf.getPolyRing()), conf_(conf) {
@@ -30,87 +29,45 @@ public:
Conf& getConfiguration() { return conf_; }
const Conf &getConfiguration() const { return conf_; }
- bool insert(const_monomial m, V val);
+ bool insert(const_monomial m);
// Only inserts if minimal, in this case "true" is returned.
// and the object takes ownership of 'm'.
void addComponent() {tables.push_back(new T(conf_));}
- bool member(const_monomial m, V &result);
-
- void getStats(MonomialTableArray::Stats &stats) const;
+ bool member(const_monomial m);
std::string description() const;
- void displayStats(std::ostream &o) const;
-
- void display(std::ostream &o, int level) const;
+ void display(std::ostream &o) const;
void getMonomials(std::vector<const_monomial>& monomials) const;
- virtual void printFrobbyM2Format
- (std::ostream& out, size_t component) const;
-
- void dump(int level=0) const;
-
size_t n_elems() const;
size_t getMemoryUse() const;
private:
Conf conf_; // Used to create new instances of T.
std::vector<T *> tables;
-
- mutable MonomialTableArray::Stats stats_;
};
template <typename MT>
-bool MTArrayT<MT>::insert(const_monomial m, V val)
+bool MTArrayT<MT>::insert(const_monomial m)
{
- stats_.n_calls_insert++;
size_t x = R->monomialGetComponent(m);
MATHICGB_ASSERT(x < tables.size());
MATHICGB_ASSERT(tables[x] != 0);
- bool result = tables[x]->insert(m, val);
- if (result) stats_.n_actual_inserts++;
+ bool result = tables[x]->insert(m);
return result;
}
template <typename MT>
-bool MTArrayT<MT>::member(const_monomial m, V &result)
+bool MTArrayT<MT>::member(const_monomial m)
{
- stats_.n_calls_member++;
size_t x = R->monomialGetComponent(m);
MATHICGB_ASSERT(x < tables.size());
MATHICGB_ASSERT(tables[x] != 0);
- return tables[x]->member(m, result);
-}
-
-template <typename MT>
-void MTArrayT<MT>::getStats(Stats &stats) const
-{
- stats = stats_;
-
- // compute denseness
- std::vector<const_monomial> monomials;
- unsigned long long support = 0;
- unsigned long long exponentCount = 0;
- for (size_t i=0; i<tables.size(); i++) {
- T *p = tables[i];
- MATHICGB_ASSERT(p != 0);
- monomials.clear();
- p->getMonomials(monomials);
- typedef std::vector<const_monomial>::const_iterator iter;
- for (iter it = monomials.begin(); it != monomials.end(); ++it) {
- support += R->monomialSizeOfSupport(*it);
- exponentCount += R->getNumVars();
- }
- }
- stats.denseness = static_cast<double>(support) / exponentCount;
-}
-
-template <typename MT>
-void MTArrayT<MT>::displayStats(std::ostream & /* o */) const
-{
+ return tables[x]->member(m);
}
template <typename MT>
@@ -120,8 +77,18 @@ void MTArrayT<MT>::getMonomials(std::vector<const_monomial>& monomials) const {
}
template <typename MT>
-void MTArrayT<MT>::display(std::ostream &o, int level) const
+void MTArrayT<MT>::display(std::ostream &o) const
{
+ class MonomialCompare {
+ public:
+ MonomialCompare(const PolyRing& ring): mRing(ring) {}
+ bool operator()(const_monomial a, const_monomial b) {
+ return mRing.monomialLT(a, b);
+ }
+ private:
+ const PolyRing& mRing;
+ };
+
std::vector<const_monomial> monomials;
for (size_t i=0; i<tables.size(); i++)
{
@@ -133,8 +100,7 @@ void MTArrayT<MT>::display(std::ostream &o, int level) const
o << " " << i << ": ";
monomials.clear();
p->getMonomials(monomials);
- std::sort(monomials.begin(), monomials.end(),
- MonomialTableArray::MonomialCompare(*R));
+ std::sort(monomials.begin(), monomials.end(), MonomialCompare(*R));
typedef std::vector<const_monomial>::const_iterator iter;
for (iter it = monomials.begin(); it != monomials.end(); ++it)
{
@@ -146,36 +112,6 @@ void MTArrayT<MT>::display(std::ostream &o, int level) const
}
template <typename MT>
-void MTArrayT<MT>::printFrobbyM2Format
- (std::ostream& out, size_t component) const
-{
- MATHICGB_ASSERT(component < tables.size());
- T* p = tables[component];
- MATHICGB_ASSERT(p != 0);
- std::vector<const_monomial> monomials;
- p->getMonomials(monomials);
- std::sort(monomials.begin(), monomials.end(),
- MonomialTableArray::MonomialCompare(*R));
-
- out << "I = monomialIdeal(\n";
- typedef std::vector<const_monomial>::const_iterator iter;
- for (iter it = monomials.begin(); it != monomials.end(); ++it) {
- if (it != monomials.begin())
- out << ",\n";
- R->printMonomialFrobbyM2Format(out, *it);
- }
- out << "\n);\n";
-}
-
-template <typename MT>
-void MTArrayT<MT>::dump(int level) const
-{
- // display on stderr the table.
- displayStats(std::cerr);
- if (level > 0) display(std::cerr, level-1);
-}
-
-template <typename MT>
size_t MTArrayT<MT>::n_elems() const
{
size_t result = 0;
diff --git a/src/mathicgb/MTArray.hpp b/src/mathicgb/MTArray.hpp
index 28d84a1..2931aa3 100755
--- a/src/mathicgb/MTArray.hpp
+++ b/src/mathicgb/MTArray.hpp
@@ -13,71 +13,26 @@ MATHICGB_NAMESPACE_BEGIN
class MonomialTableArray
{
public:
- typedef size_t V; // value type
-
- static MonomialTableArray *makeMonomialTableArray(int type, // 0=naive, 1=DivList, 2=KDTree
- const PolyRing *R,
- // for each type, only some of the following are relevant
- bool use_cache,
- bool remin);
-
- MonomialTableArray(const PolyRing *R0) : R(R0) {}
virtual ~MonomialTableArray() {};
- virtual bool insert(const_monomial m, V val) = 0;
// returns true if the monomial actually needs to be inserted.
// If the monomial is inserted, the caller agrees to keep that monomial
// active until it is removed from the table.
- //TODO: At some point: deal with removals too
+ virtual bool insert(const_monomial m) = 0;
// Adds a new component, increasing the number of monomial tables
// in the array by one. Its index is one more than the previous
// maximum index.
virtual void addComponent() = 0;
- bool member(const_monomial m) {
- size_t dummy;
- return member(m, dummy);
- }
- virtual bool member(const_monomial m, V &result) = 0;
-
- struct Stats {
- size_t n_actual_inserts;
- size_t n_calls_member;
- size_t n_calls_insert;
- size_t n_compares;
-
- // ratio of non-zero exponents. 0.75 means a
- // quarter of all exponents are zero.
- double denseness;
-
- Stats() : n_actual_inserts(0),
- n_calls_member(0),
- n_calls_insert(0),
- n_compares(0),
- denseness(0.0) {}
- };
+ virtual bool member(const_monomial m) = 0;
- virtual void getStats(Stats &stats) const = 0;
-
- virtual void display(std::ostream &o, int level) const = 0;
-
- virtual void printFrobbyM2Format
- (std::ostream& out, size_t component) const = 0;
-
- virtual void displayStats(std::ostream &o) const = 0;
+ virtual void display(std::ostream& o) const = 0;
virtual void getMonomials(std::vector<const_monomial>& monomials) const = 0;
virtual size_t n_elems() const = 0;
- void dump(int level=0) const
- {
- // display on stderr the table.
- displayStats(std::cerr);
- if (level > 0) display(std::cerr, level-1);
- }
-
virtual std::string description() const = 0;
virtual size_t getMemoryUse() const = 0;
@@ -88,16 +43,7 @@ public:
make(const PolyRing *R, int typ, size_t components, bool allowRemovals);
protected:
- class MonomialCompare {
- public:
- MonomialCompare(const PolyRing& ring): mRing(ring) {}
- bool operator()(const_monomial a, const_monomial b) {
- return mRing.monomialLT(a, b);
- }
- private:
- const PolyRing& mRing;
- };
-
+ MonomialTableArray(const PolyRing *R0) : R(R0) {}
const PolyRing *R;
};
diff --git a/src/mathicgb/MonTableDivList.hpp b/src/mathicgb/MonTableDivList.hpp
index d8e4220..d159074 100755
--- a/src/mathicgb/MonTableDivList.hpp
+++ b/src/mathicgb/MonTableDivList.hpp
@@ -168,15 +168,14 @@ public:
const PolyRing * getPolyRing() const { return getConfiguration().getPolyRing(); }
- bool member(const_monomial t, ValueType & val) const {
+ bool member(const_monomial t) const {
const Entry* i = findDivisor(t);
if (i == 0) return false;
- val = 0;
return true;
}
bool insert(const_monomial t, ValueType /* val */) { return insert(t); } // Only insert if not there
- void display(std::ostream &o, int level) const;
+ void display(std::ostream &o) const;
void dump(int level) const;
@@ -243,7 +242,7 @@ inline std::string MonTableDivList<ULL, UDM>::getName() const {
}
template <bool UDL, bool UDM>
-void MonTableDivList<UDL,UDM>::display(std::ostream &o, int /* level */) const
+void MonTableDivList<UDL,UDM>::display(std::ostream &o) const
{
const_iterator e = _finder.end();
@@ -259,7 +258,7 @@ template <bool UDL, bool UDM>
void MonTableDivList<UDL,UDM>::dump(int level) const
{
displayStats(std::cerr);
- if (level > 0) display(std::cerr, level-1);
+ if (level > 0) display(std::cerr);
}
template <bool UDL, bool UDM>
diff --git a/src/mathicgb/MonTableKDTree.hpp b/src/mathicgb/MonTableKDTree.hpp
index 32da9da..f8b2889 100755
--- a/src/mathicgb/MonTableKDTree.hpp
+++ b/src/mathicgb/MonTableKDTree.hpp
@@ -156,11 +156,10 @@ public:
const PolyRing * getPolyRing() const { return getConfiguration().getPolyRing(); }
- inline bool member(const_monomial t, ValueType & val) const {
+ inline bool member(const_monomial t) const {
const Entry* entry = findDivisor(t);
if (entry == 0)
return false;
- val = 0;
return true;
}
bool insert(const_monomial t, ValueType /* val */) { return insert(t); } // Only insert if not there
diff --git a/src/mathicgb/SigSPairs.cpp b/src/mathicgb/SigSPairs.cpp
index 696075a..f30c0d3 100755
--- a/src/mathicgb/SigSPairs.cpp
+++ b/src/mathicgb/SigSPairs.cpp
@@ -228,8 +228,7 @@ void SigSPairs::makePreSPairs(size_t newGen)
R->monomialFindSignature(oldLead, newLead, oldSig, pairSig);
}
- size_t result_ignored;
- if (Hsyz->member(pairSig, result_ignored)) {
+ if (Hsyz->member(pairSig)) {
++mStats.syzygyModuleHits;
#ifdef DEBUG
// Check if actually already elim. by low/high base divisor.
@@ -253,7 +252,7 @@ void SigSPairs::makePreSPairs(size_t newGen)
R->monomialMult(newSig, oldLead, hsyz);
else
R->monomialMult(oldSig, newLead, hsyz);
- if (Hsyz->insert(hsyz, 0))
+ if (Hsyz->insert(hsyz))
hsyz = R->allocMonomial();
if (R->monomialRelativelyPrime(newLead, oldLead))
{
diff --git a/src/mathicgb/SignatureGB.cpp b/src/mathicgb/SignatureGB.cpp
index cb7be16..a8bad68 100755
--- a/src/mathicgb/SignatureGB.cpp
+++ b/src/mathicgb/SignatureGB.cpp
@@ -74,10 +74,6 @@ SignatureGB::SignatureGB(
// Populate SP
for (size_t i = 0; i < basis.size(); i++)
SP->newPairs(i);
-
- if (tracingLevel >= 2) {
- Hsyz->dump();
- }
}
void SignatureGB::computeGrobnerBasis()
@@ -98,8 +94,7 @@ void SignatureGB::computeGrobnerBasis()
if (sig.isNull())
break;
++sigs;
- size_t dummy;
- if (Hsyz->member(sig, dummy))
+ if (Hsyz->member(sig))
++syzygySigs;
else
GB->minimalLeadInSig(sig);
@@ -137,7 +132,7 @@ void SignatureGB::computeGrobnerBasis()
auto sig = R->allocMonomial();
R->monomialCopy(v[i], sig);
mProcessor->postprocess(sig);
- Hsyz2->insert(sig, 0);
+ Hsyz2->insert(sig);
}
}
}
@@ -171,7 +166,7 @@ bool SignatureGB::processSPair
if (f->isZero()) { // reduction to zero
if (tracingLevel >= 7)
std::cerr << "zero reduction" << std::endl;
- Hsyz->insert(sig, 0);
+ Hsyz->insert(sig);
SP->newSyzygy(sig);
SP->setKnownSyzygies(mSpairTmp);
delete f;
@@ -215,8 +210,7 @@ bool SignatureGB::step()
std::cerr << std::endl;
}
- size_t result_ignored = 0;
- if (Hsyz->member(sig, result_ignored)) {
+ if (Hsyz->member(sig)) {
++stats_SignatureCriterionLate;
SP->setKnownSyzygies(mSpairTmp);
if (tracingLevel >= 3)
@@ -236,7 +230,7 @@ bool SignatureGB::step()
{
++stats_koszulEliminated;
// This signature is of a syzygy that is not in Hsyz, so add it
- Hsyz->insert(sig, 0);
+ Hsyz->insert(sig);
SP->newSyzygy(sig);
SP->setKnownSyzygies(mSpairTmp);
return true;
@@ -252,9 +246,8 @@ bool SignatureGB::step()
const_monomial b = GB->getLeadMonomial(it->second);
if (R->monomialRelativelyPrime(a, b))
{
- int not_used = 0;
++stats_relativelyPrimeEliminated;
- Hsyz->insert(sig, not_used);
+ Hsyz->insert(sig);
SP->newSyzygy(sig);
SP->setKnownSyzygies(mSpairTmp);
return true;
@@ -282,8 +275,7 @@ bool SignatureGB::step()
const_monomial smallerLead = GB->getLeadMonomial(p.second);
monomial koszul = R->allocMonomial();
R->monomialMult(greaterSig, smallerLead, koszul);
- size_t dummy;
- if (Hsyz->member(koszul, dummy))
+ if (Hsyz->member(koszul))
R->freeMonomial(koszul);
else
mKoszuls.push(koszul);
@@ -314,14 +306,6 @@ void SignatureGB::displayStats(std::ostream &o) const
o << " S-pair queue type: " << SP->name() << '\n';
o << " total compute time: " << stats_nsecs << " -- seconds" << '\n';
- MonomialTableArray::Stats hsyz_stats;
- Hsyz->getStats(hsyz_stats);
- o << " syz-n-compares: " << hsyz_stats.n_compares << '\n';
- o << " syz-n-member-calls: " << hsyz_stats.n_calls_member << '\n';
- o << " syz-n-inserts: " << (hsyz_stats.n_calls_insert) << '\n';
- o << " syz-n-actual-inserts: " << (hsyz_stats.n_actual_inserts) << '\n';
- o << " syz sig denseness: " << hsyz_stats.denseness << '\n';
-
displayMemoryUse(o);
displaySomeStats(o);
o << std::flush;
diff --git a/src/mathicgb/io-util.cpp b/src/mathicgb/io-util.cpp
index a5dbdcd..ced638e 100755
--- a/src/mathicgb/io-util.cpp
+++ b/src/mathicgb/io-util.cpp
@@ -107,7 +107,7 @@ std::string toString(SigPolyBasis *I, int)
std::string toString(MonomialTableArray* H)
{
std::ostringstream o;
- H->display(o, 1);
+ H->display(o);
return o.str();
}
diff --git a/src/test/poly-test.cpp b/src/test/poly-test.cpp
index 2f1b1fb..2c43e7a 100755
--- a/src/test/poly-test.cpp
+++ b/src/test/poly-test.cpp
@@ -505,7 +505,6 @@ TEST(Coeff, addone) {
TEST(MTArray,DivList1) {
// We create a table here
- size_t not_used = 0;
std::unique_ptr<PolyRing> R(ringFromString("32003 6 1\n1 1 1 1 1 1"));
auto M = MonomialTableArray::make(R.get(), 1, 6, false);
std::string mons[2] = {
@@ -515,22 +514,21 @@ TEST(MTArray,DivList1) {
for (int i=0; i<2; i++)
{
monomial m = monomialParseFromString(R.get(), mons[i]);
- M->insert(m,0);
+ M->insert(m);
}
// M.display(std::cout);
// Now we test membership
- EXPECT_TRUE(M->member(monomialParseFromString(R.get(), "abc4d<1>"),not_used));
- EXPECT_TRUE(M->member(monomialParseFromString(R.get(), "a2d2<1>"),not_used));
- EXPECT_TRUE(M->member(monomialParseFromString(R.get(), "abc<1>"),not_used));
- EXPECT_TRUE(M->member(monomialParseFromString(R.get(), "a2d<1>"),not_used));
- EXPECT_FALSE(M->member(monomialParseFromString(R.get(), "a2d<2>"),not_used));
- EXPECT_FALSE(M->member(monomialParseFromString(R.get(), "ad<1>"),not_used));
+ EXPECT_TRUE(M->member(monomialParseFromString(R.get(), "abc4d<1>")));
+ EXPECT_TRUE(M->member(monomialParseFromString(R.get(), "a2d2<1>")));
+ EXPECT_TRUE(M->member(monomialParseFromString(R.get(), "abc<1>")));
+ EXPECT_TRUE(M->member(monomialParseFromString(R.get(), "a2d<1>")));
+ EXPECT_FALSE(M->member(monomialParseFromString(R.get(), "a2d<2>")));
+ EXPECT_FALSE(M->member(monomialParseFromString(R.get(), "ad<1>")));
}
TEST(MTArray,KDTree1) {
// We create a table here
- size_t not_used = 0;
std::unique_ptr<PolyRing> R(ringFromString("32003 6 1\n1 1 1 1 1 1"));
std::unique_ptr<MonomialTableArray> M(MonomialTableArray::make(R.get(), 2, 6, false));
std::string mons[2] = {
@@ -540,17 +538,17 @@ TEST(MTArray,KDTree1) {
for (int i=0; i<2; i++)
{
monomial m = monomialParseFromString(R.get(), mons[i]);
- M->insert(m,0);
+ M->insert(m);
}
// M.display(std::cout);
// Now we test membership
- EXPECT_TRUE(M->member(monomialParseFromString(R.get(), "abc4d<1>"),not_used));
- EXPECT_TRUE(M->member(monomialParseFromString(R.get(), "a2d2<1>"),not_used));
- EXPECT_TRUE(M->member(monomialParseFromString(R.get(), "abc<1>"),not_used));
- EXPECT_TRUE(M->member(monomialParseFromString(R.get(), "a2d<1>"),not_used));
- EXPECT_FALSE(M->member(monomialParseFromString(R.get(), "a2d<2>"),not_used));
- EXPECT_FALSE(M->member(monomialParseFromString(R.get(), "ad<1>"),not_used));
+ EXPECT_TRUE(M->member(monomialParseFromString(R.get(), "abc4d<1>")));
+ EXPECT_TRUE(M->member(monomialParseFromString(R.get(), "a2d2<1>")));
+ EXPECT_TRUE(M->member(monomialParseFromString(R.get(), "abc<1>")));
+ EXPECT_TRUE(M->member(monomialParseFromString(R.get(), "a2d<1>")));
+ EXPECT_FALSE(M->member(monomialParseFromString(R.get(), "a2d<2>")));
+ EXPECT_FALSE(M->member(monomialParseFromString(R.get(), "ad<1>")));
}
//#warning "remove this code"
--
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