-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathface_relations.h
66 lines (54 loc) · 2.65 KB
/
face_relations.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
// FILE FACE_RELATIONS.H: Declaration of class face_relations
#if !defined(_FACE_RELATIONS_H)
#define _FACE_RELATIONS_H 1 //flags that this file has been included
#include "edge_relations.h"
#define USE_SMATS
class face_relations {
public:
face_relations() {;}
face_relations(edge_relations*, int plus, int verb=0, long ch=0);
long ncoords() const {return coord.nrows();}
vec coords(int i) const {return coord.row(i);}
long get_denom() const {return denom;}
long get_rank() const {return rk;}
long get_hmod() const {return hmod;}
long gen(int i) const {return pivs[i];}
private:
edge_relations* ER; // provides coord(i) and symbdata for nsymb, symbol(i), symbops
int plusflag, verbose;
long ngens, nsymb, numrel, maxnumrel;
long hmod, characteristic, denom, rk;
vec pivs;
action act_with(const mat22& M) {return ER->act_with(M);}
action act_with(const Quad& a, const Quad& b, const Quad& c, const Quad& d) {return ER->act_with(a,b,c,d);}
void make_relations(); // creates relation matrix relmat
void solve_relations(); // computes kernel of relmat and sets rk, denom, coord[, freegens]
mat22 M_alpha(int j) const {return Quad::SD.Mlist[j];}
void add_face_rel(const vector<long>& rel, const vector<int>& types);
void add_face_rel(const vector<long>& rel, const vector<int>& types, const vector<int>& signs);
void triangle_relation_0(); // triangle relation for all fields
void triangle_relation_1_3(); // extra triangle relation for fields 1, 3
// these special relations for class number fields are now included in the general T,Q,H lists
// void triangle_relation_2(); // extra triangle relation(s) for fields 19+
// void square_relation_2(); // extra square relation for field 2
// void rectangle_relation_7(); // extra rectangle relation for field 7
// void hexagon_relation_11(); // extra hexagon relation for field 11
void aaa_triangle_relation(const POLYGON&, int check=1); // generic aaa-triangle relation
void aas_triangle_relation(const POLYGON&, int check=1); // generic aas-triangle relation
void general_square_relation(const POLYGON&, int check=1); // generic square relation
void general_hexagon_relation(const POLYGON&, int check=1); // generic hexagon relation
void general_relation(const vector<action>& Mops, const vector<int>& types, const vector<int>& signs,
int symmetry=0, int check=1); // generic relation
#ifdef USE_SMATS
smat relmat;
vector<int> relmat_rowdata;
int maxrowsize;
#else
mat relmat;
#endif
protected:
mat coord;
friend class newform;
friend class newforms;
};
#endif