[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