~ubuntu-branches/ubuntu/saucy/gfan/saucy-proposed

« back to all changes in this revision

Viewing changes to app_spolynomial.cpp

  • Committer: Package Import Robot
  • Author(s): Cédric Boutillier
  • Date: 2013-07-09 10:44:01 UTC
  • mfrom: (2.1.2 experimental)
  • Revision ID: package-import@ubuntu.com-20130709104401-5q66ozz5j5af0dak
Tags: 0.5+dfsg-3
* Upload to unstable.
* modify remove_failing_tests_on_32bits.patch to replace command of
  0009RenderStairCase test with an empty one instead of deleting it.
* remove lintian override about spelling error

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#include <iostream>
 
2
#include "parser.h"
 
3
#include "printer.h"
 
4
#include "polynomial.h"
 
5
#include "buchberger.h"
 
6
#include "reversesearch.h"
 
7
#include "termorder.h"
 
8
#include "genericwalk.h"
 
9
#include "gfanapplication.h"
 
10
#include "timer.h"
 
11
#include "tropical2.h"
 
12
#include "log.h"
 
13
#include "field_rationals.h"
 
14
 
 
15
class SPolynomialApplication : public GFanApplication
 
16
{
 
17
  SimpleOption optionTakeInitialForms;
 
18
public:
 
19
  bool includeInDefaultInstallation()
 
20
  {
 
21
    return false;
 
22
  }
 
23
  const char *helpText()
 
24
  {
 
25
    return "This program takes a list of polynomials and a weight vector. The output is the set of all...\n";
 
26
  }
 
27
  SPolynomialApplication():
 
28
    optionTakeInitialForms("-f",".\n")
 
29
  {
 
30
    registerOptions();
 
31
  }
 
32
 
 
33
  const char *name()
 
34
  {
 
35
    return "_spolynomial";
 
36
  }
 
37
 
 
38
  int main()
 
39
  {
 
40
    PolynomialSet g=FileParser(Stdin).parsePolynomialSetWithRing();
 
41
    IntegerVector w=FileParser(Stdin).parseIntegerVector();
 
42
 
 
43
    //    WeightReverseLexicographicTermOrder T(w);
 
44
    WeightTermOrder T(w);
 
45
 
 
46
    g.markAndScale(T);
 
47
    PolynomialSet out(g.getRing());
 
48
 
 
49
    int I=0;
 
50
    for(PolynomialSet::const_iterator i=g.begin();i!=g.end();i++,I++)
 
51
      {
 
52
        int J=0;
 
53
        for(PolynomialSet::const_iterator j=g.begin();j!=i;j++,J++)
 
54
        {
 
55
          Polynomial s=sPolynomial(*i,*j);
 
56
          IntegerVector cancelingTerm=max(i->getMarked().m.exponent,j->getMarked().m.exponent);
 
57
          int cancelDegree=dotLong(cancelingTerm,w);
 
58
          if(optionTakeInitialForms.getValue())
 
59
            {
 
60
              if(cancelDegree!=s.degree(w))
 
61
                {
 
62
                  out.push_back(initialForm(s,w));
 
63
                  if(initialForm(s,w).numberOfTerms()<=8)cerr<<"S("<<I<<","<<J<<")"<<endl;
 
64
                }
 
65
            }
 
66
          else
 
67
            out.push_back(s);
 
68
        }
 
69
      }
 
70
    //    AsciiPrinter(Stdout).printPolynomialSet(out);
 
71
 
 
72
    PolynomialSet out2(out.getRing());
 
73
    for(PolynomialSet::const_iterator i=out.begin();i!=out.end();i++)
 
74
      {
 
75
        cerr<< i->numberOfTerms() << "    ";
 
76
        if(i->numberOfTerms()<=8)
 
77
          {
 
78
            AsciiPrinter(Stdout)<<"\n"<< *i<<"\n";
 
79
            out2.push_back(*i);
 
80
          }
 
81
      }
 
82
    out2.saturate();
 
83
    out2=out2.embeddedInto(PolynomialRing(Q,15));
 
84
 
 
85
    AsciiPrinter(Stdout).printPolynomialRing(out2.getRing());
 
86
    AsciiPrinter(Stdout).printPolynomialSet(out2);
 
87
 
 
88
    return 0;
 
89
  }
 
90
};
 
91
 
 
92
static SPolynomialApplication theApplication;
 
93