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

« back to all changes in this revision

Viewing changes to app_frobenius.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 "vektor.h"
2
 
#include "printer.h"
3
 
#include "parser.h"
4
 
#include "gfanapplication.h"
5
 
#include "binomial.h"
6
 
#include "latticeideal.h"
7
 
#include "matrix.h"
8
 
 
9
 
 
10
 
#define NAME "test4ti2"
11
 
 
12
 
class FrobeniusApplication : public GFanApplication
13
 
{
14
 
  IntegerVectorList readFile(char *filename)  
15
 
  {
16
 
    FILE *f=fopen(filename,"r");
17
 
    assert(f);
18
 
    FileParser F(f);
19
 
    IntegerVectorList v=F.parseIntegerVectorList4ti2();
20
 
    fclose(f);
21
 
    return v;
22
 
  }
23
 
  IntegerVector remainder(IntegerVector v, const IntegerVectorList &l)
24
 
  {
25
 
    //      AsciiPrinter(Stderr).printVectorList(l);
26
 
    //      AsciiPrinter(Stderr).printVector(v);
27
 
    while(!v.isZero())
28
 
      {
29
 
        bool quit=true;
30
 
        for(IntegerVectorList::const_iterator i=l.begin();i!=l.end();i++)
31
 
          {
32
 
            if(i->divides(v))
33
 
              {
34
 
                v-=*i;
35
 
                quit=false;
36
 
                break;
37
 
              }
38
 
            /*      if(i->divides(-v))
39
 
              {
40
 
                v+=*i;
41
 
                quit=false;
42
 
                break;
43
 
                }*/
44
 
          }
45
 
        if(quit)break;
46
 
        //          AsciiPrinter(Stderr).printVector(v);
47
 
      }
48
 
    //  AsciiPrinter(Stderr).printVector(v);
49
 
    return v;
50
 
  }
51
 
  bool isRepresentable(IntegerVector c, IntegerVector const &a, IntegerVectorList const &G)
52
 
  {
53
 
    int n=c.size();
54
 
    int k=0;
55
 
    for(int i=1;i<n;i++)
56
 
      {
57
 
        while(c[i]<0){c[i]+=a[k];c[k]-=a[i];}
58
 
      }
59
 
    IntegerVector m=remainder(c,G);
60
 
    AsciiPrinter(Stderr).printVector(m);
61
 
    m=max(-m,m-m);
62
 
    AsciiPrinter(Stderr).printVector(m);
63
 
    return m.isZero();
64
 
  }
65
 
  void checkRepresentable(IntegerVector c, IntegerVector const &a, IntegerVectorList const &G)
66
 
  {
67
 
    fprintf(Stderr,"Is representable: %i",dot(c,a));
68
 
    AsciiPrinter(Stderr).printVector(c);
69
 
    AsciiPrinter(Stderr).printInteger(isRepresentable(c,a,G));
70
 
    fprintf(Stderr,"\n");
71
 
  }
72
 
 
73
 
  void isLatticeFree(IntegerVector v, IntegerVector const &a, IntegerMatrix const &AM, IntegerVector const &G);
74
 
  {
75
 
    integerVector 
76
 
  }
77
 
public:
78
 
  bool includeInDefaultInstallation()
79
 
  {
80
 
    return false;
81
 
  }
82
 
  FrobeniusApplication()
83
 
  {
84
 
    registerOptions();
85
 
  }
86
 
  char *name()
87
 
  {
88
 
    return "_frobenius";
89
 
  }
90
 
  int main()
91
 
  {
92
 
    FileParser P(Stdin);
93
 
 
94
 
    IntegerVectorList A=readFile(NAME);
95
 
    IntegerVector a=*(A.begin());
96
 
    IntegerVectorList L=readFile(NAME".lat");
97
 
    IntegerVectorList G=readFile(NAME".gro");
98
 
    IntegerMatrix AM=rowsToIntegerMatrix(G);
99
 
 
100
 
    /*    IntegerVectorList ivl=P.parseIntegerVectorList();
101
 
    IntegerMatrix A=rowsToIntegerMatrix(ivl);
102
 
 
103
 
    IntegerVectorList b=latticeIdealRevLex(A);
104
 
 
105
 
    PolynomialSet g;
106
 
    for(IntegerVectorList::const_iterator i=b.begin();i!=b.end();i++)
107
 
      g.push_back(integerVectorToBinomial(*i));
108
 
    */
109
 
    //    AsciiPrinter(Stdout).printPolynomialSet(g);
110
 
 
111
 
    
112
 
    checkRepresentable(StringParser("(1,1,-1)").parseIntegerVector(),a,G);
113
 
    checkRepresentable(StringParser("(1,-1,1)").parseIntegerVector(),a,G);
114
 
    checkRepresentable(StringParser("(1,1,1)").parseIntegerVector(),a,G);
115
 
    checkRepresentable(StringParser("(-1,1,-1)").parseIntegerVector(),a,G);
116
 
    checkRepresentable(StringParser("(3,2,-1)").parseIntegerVector(),a,G);
117
 
 
118
 
    checkRepresentable(StringParser("(1,4,-1)").parseIntegerVector(),a,G);
119
 
    checkRepresentable(StringParser("(2,-1,1)").parseIntegerVector(),a,G);
120
 
    checkRepresentable(StringParser("(1,-1,1)").parseIntegerVector(),a,G);
121
 
    checkRepresentable(StringParser("(-3,2,1)").parseIntegerVector(),a,G);
122
 
 
123
 
    AsciiPrinter(Stdout).printVectorList(A);
124
 
    AsciiPrinter(Stdout).printVectorList(L);
125
 
    AsciiPrinter(Stdout).printVectorList(G);
126
 
    return 0;
127
 
  }
128
 
  const char *helpText()
129
 
  {
130
 
    return "Computes the Frobenius number ....\n";
131
 
  }
132
 
};
133
 
 
134
 
static FrobeniusApplication theApplication;