[mathicgb] 65/393: Moved basis output to C file IO which doubled performance. Also turned the output off.
Doug Torrance
dtorrance-guest at moszumanska.debian.org
Fri Apr 3 15:58:33 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 7f0111e59e569226b16887e17e5519b367d11ef3
Author: Bjarke Hammersholt Roune <bjarkehr.code at gmail.com>
Date: Tue Oct 16 16:49:52 2012 +0200
Moved basis output to C file IO which doubled performance. Also turned the output off.
---
build/vs12/mathicgb.sln | 5 -----
src/cli/GBMain.cpp | 9 +++++++--
src/mathicgb/BuchbergerAlg.cpp | 3 ++-
src/mathicgb/Poly.cpp | 27 +++++++++++++++++++++++++++
src/mathicgb/Poly.hpp | 3 ++-
src/mathicgb/PolyRing.cpp | 28 ++++++++++++++++++++++++++++
src/mathicgb/PolyRing.hpp | 4 ++++
src/mathicgb/SparseMatrix.cpp | 2 +-
src/mathicgb/io-util.cpp | 12 ++++++++++++
src/mathicgb/io-util.hpp | 1 +
10 files changed, 84 insertions(+), 10 deletions(-)
diff --git a/build/vs12/mathicgb.sln b/build/vs12/mathicgb.sln
index 4f3edce..ad9225a 100755
--- a/build/vs12/mathicgb.sln
+++ b/build/vs12/mathicgb.sln
@@ -21,11 +21,6 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "memtailor-lib", "..\..\..\m
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mathic-lib", "..\..\..\mathic\build\vs12\mathic-lib\mathic-lib.vcxproj", "{BEBD36F1-A124-4C01-8E67-3208D4472661}"
EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{D819684E-8488-4F68-A901-5108A6DDE925}"
- ProjectSection(SolutionItems) = preProject
- Performance1.psess = Performance1.psess
- EndProjectSection
-EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Win32 = Debug|Win32
diff --git a/src/cli/GBMain.cpp b/src/cli/GBMain.cpp
index bf9e0e7..54c73d8 100755
--- a/src/cli/GBMain.cpp
+++ b/src/cli/GBMain.cpp
@@ -202,10 +202,15 @@ public:
alg.computeGrobnerBasis();
alg.printStats(std::cerr);
+ /*
std::ofstream statsOut((mProjectName.value() + ".stats").c_str());
alg.printStats(statsOut);
- std::ofstream gbOut((mProjectName.value() + ".gb").c_str());
- output(gbOut, alg.basis());
+ {
+ std::string basisFileName = mProjectName.value() + ".gb";
+ FILE* basisOut = std::fopen(basisFileName.c_str(), "w");
+ output(basisOut, alg.basis());
+ }
+ */
} else {
SignatureGB alg(
*ideal,
diff --git a/src/mathicgb/BuchbergerAlg.cpp b/src/mathicgb/BuchbergerAlg.cpp
index 2a9f8d4..dc9a443 100755
--- a/src/mathicgb/BuchbergerAlg.cpp
+++ b/src/mathicgb/BuchbergerAlg.cpp
@@ -208,11 +208,12 @@ void BuchbergerAlg::computeGrobnerBasis() {
}
//printStats(std::cerr);
//mReducer->dump();
-
+ /*
for (size_t i = 0; i < mBasis.size(); ++i)
if (!mBasis.retired(i))
mBasis.replaceSameLeadTerm
(i, mReducer->classicTailReduce(mBasis.poly(i), mBasis));
+ */
}
void BuchbergerAlg::step() {
diff --git a/src/mathicgb/Poly.cpp b/src/mathicgb/Poly.cpp
index e719d89..ca6f86c 100755
--- a/src/mathicgb/Poly.cpp
+++ b/src/mathicgb/Poly.cpp
@@ -318,6 +318,33 @@ void Poly::display(std::ostream &o, bool print_comp) const
}
}
+void Poly::display(FILE* file, bool printComponent) const
+{
+ if (isZero()) {
+ fputs("0", file);
+ return;
+ }
+
+ const auto characteristic = R->charac();
+ const exponent maxPositiveExponent = (characteristic + 1) / 2;
+ bool firstTerm = true;
+ for (auto it = begin(); it != end(); ++it) {
+ coefficient coef = it.getCoefficient();
+ if (coef > maxPositiveExponent) {
+ coef = characteristic - coef;
+ fputc('-', file);
+ } else if (!firstTerm)
+ fputc('+', file);
+ bool printOne = true;
+ if (coef != 1) {
+ printOne = false;
+ fprintf(file, "%i", coef);
+ }
+ R->monomialDisplay(file, it.getMonomial(), printComponent, printOne);
+ firstTerm = false;
+ }
+}
+
size_t Poly::getMemoryUse() const
{
size_t total = sizeof(const PolyRing *);
diff --git a/src/mathicgb/Poly.hpp b/src/mathicgb/Poly.hpp
index e14ea28..53030d5 100755
--- a/src/mathicgb/Poly.hpp
+++ b/src/mathicgb/Poly.hpp
@@ -14,7 +14,8 @@ public:
void parse(std::istream &i); // reads into this, sorts terms
void parseDoNotOrder(std::istream &i); // reads into this, does not sort terms
- void display(std::ostream &o, bool print_comp=true) const;
+ void display(FILE* file, bool printComponent = true) const;
+ void display(std::ostream &o, bool print_comp = true) const;
void see(bool print_comp) const;
class iterator {
diff --git a/src/mathicgb/PolyRing.cpp b/src/mathicgb/PolyRing.cpp
index d13bd02..d402d4c 100755
--- a/src/mathicgb/PolyRing.cpp
+++ b/src/mathicgb/PolyRing.cpp
@@ -289,6 +289,34 @@ void PolyRing::monomialDisplay(std::ostream &o,
o << "1";
}
+void PolyRing::monomialDisplay(FILE* file,
+ ConstMonomial mono,
+ bool printComponent,
+ bool printOne) const
+{
+ const unsigned int letterCount = 26;
+ MATHICGB_ASSERT(getNumVars() <= 2 * letterCount);
+ bool printedAny = false;
+ for (size_t var = 0; var < mNumVars; ++var) {
+ exponent e = monomialExponent(mono, var);
+ if (e == 0)
+ continue;
+ printedAny = true;
+ char varChar;
+ if (var < letterCount)
+ varChar = static_cast<char>('a' + var);
+ else
+ varChar = static_cast<char>('A' + (var - letterCount));
+ fputc(varChar, file);
+ if (e != 1)
+ fprintf(file, "%i", e);
+ }
+ if (printComponent)
+ fprintf(file, "<%i>", mono.component());
+ else if (!printedAny && printOne)
+ fputc('1', file);
+}
+
void PolyRing::printMonomialFrobbyM2Format(std::ostream& out, ConstMonomial m) const {
out << " ";
bool isOne = true;
diff --git a/src/mathicgb/PolyRing.hpp b/src/mathicgb/PolyRing.hpp
index 3eb6641..5c8e465 100755
--- a/src/mathicgb/PolyRing.hpp
+++ b/src/mathicgb/PolyRing.hpp
@@ -462,6 +462,10 @@ public:
ConstMonomial a,
bool print_comp=true,
bool print_one=true) const;
+ void monomialDisplay(FILE* file,
+ ConstMonomial a,
+ bool printComponent = true,
+ bool printOne = true) const;
void printMonomialFrobbyM2Format(std::ostream& out, ConstMonomial m) const;
diff --git a/src/mathicgb/SparseMatrix.cpp b/src/mathicgb/SparseMatrix.cpp
index d4b5653..4ea5e1b 100755
--- a/src/mathicgb/SparseMatrix.cpp
+++ b/src/mathicgb/SparseMatrix.cpp
@@ -54,7 +54,7 @@ void SparseMatrix::sortRowsByIncreasingPivots() {
}
void SparseMatrix::applyColumnMap(std::vector<ColIndex> colMap) {
- MATHICGB_ASSERT(colMap.size() < colCount());
+ MATHICGB_ASSERT(colMap.size() >= colCount());
auto end = mColIndices.end();
for (auto it = mColIndices.begin(); it != end; ++it) {
MATHICGB_ASSERT(*it < colCount());
diff --git a/src/mathicgb/io-util.cpp b/src/mathicgb/io-util.cpp
index 5e995f7..4ee3b4c 100755
--- a/src/mathicgb/io-util.cpp
+++ b/src/mathicgb/io-util.cpp
@@ -146,6 +146,18 @@ void output(std::ostream &o, const PolyBasis &I)
}
}
+void output(FILE* file, const PolyBasis &I)
+{
+ for (size_t i = 0; i < I.size(); i++)
+ {
+ if (!I.retired(i))
+ {
+ I.poly(i).display(file, false);
+ fputc('\n', file);
+ }
+ }
+}
+
// Local Variables:
// compile-command: "make -C .. "
// indent-tabs-mode: nil
diff --git a/src/mathicgb/io-util.hpp b/src/mathicgb/io-util.hpp
index 42b6a62..ce8b857 100755
--- a/src/mathicgb/io-util.hpp
+++ b/src/mathicgb/io-util.hpp
@@ -30,6 +30,7 @@ std::unique_ptr<Ideal> idealParseFromString(std::string str);
std::unique_ptr<Poly> polyParseFromString(const PolyRing *R, const std::string &s);
void output(std::ostream &o, const PolyBasis &I);
+void output(FILE* file, const PolyBasis &I);
#endif
--
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