/usr/include/singular/gfanlib/gfanlib_symmetriccomplex.h is in libsingular4-dev-common 4.0.3+ds-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
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 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 | /*
* gfanlib_symmetriccomplex.h
*
* Created on: Nov 16, 2010
* Author: anders
*/
#ifndef GFANLIB_SYMMETRICCOMPLEX_H_INCLUDED
#define GFANLIB_SYMMETRICCOMPLEX_H_INCLUDED
#include <set>
#include <string>
#include <map>
#include "gfanlib_symmetry.h"
#include "gfanlib_matrix.h"
#include "gfanlib_zcone.h"
namespace gfan{
enum FanPrintingFlags{
FPF_conesCompressed=1,
FPF_conesExpanded=2,
FPF_cones=4,
FPF_maximalCones=8,
FPF_boundedInfo=16,
FPF_values=32,
FPF_group=64,
FPF_multiplicities=128,
FPF_xml=256,
FPF_tPlaneSort=512,
FPF_primitiveRays=1024,
FPF_default=2+4+8
};
class SymmetricComplex{
int n;
ZMatrix linealitySpace; // Has full row rank.
ZMatrix vertices;
std::map<ZVector,int> indexMap;
SymmetryGroup sym;
IntVector dimensionsAtInfinity()const;
public:
int getAmbientDimension()const{return n;}
class Cone
{
bool isKnownToBeNonMaximalFlag;
public:
IntVector indices;//always sorted
Cone(std::set<int> const &indices_, int dimension_, Integer multiplicity_, bool sortWithSymmetry, SymmetricComplex const &complex);
std::set<int> indexSet()const;
int dimension;
Integer multiplicity;
bool isKnownToBeNonMaximal()const{return isKnownToBeNonMaximalFlag;}
void setKnownToBeNonMaximal(){isKnownToBeNonMaximalFlag=true;}
bool isSubsetOf(Cone const &c)const;
SymmetricComplex::Cone permuted(Permutation const &permutation, SymmetricComplex const &complex, bool withSymmetry)const;
ZVector sortKey;
Permutation sortKeyPermutation;
bool operator<(const Cone & b)const;
bool isSimplicial(int linealityDim)const;
void remap(SymmetricComplex &complex);
/**
* This routine computes a basis for the orthogonal complement of the cone.
* Notice that the lineality space, which is unknown at the time, is ignored.
* This routine is deterministic and used for orienting the faces when computing homology.
*/
ZMatrix orthogonalComplement(SymmetricComplex &complex)const;
};
typedef std::set<Cone> ConeContainer;
ConeContainer cones;
int dimension;
SymmetricComplex(ZMatrix const &rays, ZMatrix const &linealitySpace, SymmetryGroup const &sym_);
/**
* Returns a reference to the matrix of vertices on which the complex is build.
* The reference is valid as the Symmetric complex object exists.
*/
ZMatrix const &getVertices()const{return vertices;}
bool contains(Cone const &c)const;
void insert(Cone const &c);
int getMaxDim()const;
int getMinDim()const;
int getLinDim()const;
bool isMaximal(Cone const &c)const;
bool isPure()const;
ZVector fvector(bool boundedPart=false)const;
void buildConeLists(bool onlyMaximal, bool compressed, std::vector<std::vector<IntVector > >*conelist, std::vector<std::vector<Integer > > *multiplicities=0)const;
std::string toStringJustCones(int dimLow, int dimHigh, bool onlyMaximal, bool group, std::ostream *multiplicities=0, bool compressed=false, bool tPlaneSort=false)const;
std::string toString(int flags=0)const;
bool isSimplicial()const;
/**
Calling this function will change the representative of each cone
orbit by "applying" the permutation which will give the sortkey to
the set of indices of the cone.
*/
void remap();
/**
* Looks up the index of the vector among the vertices.
*/
int indexOfVertex(ZVector const &v)const;
int numberOfConesOfDimension(int d)const;
/**
* Given a cone this returns its index among all cones of that dimension.
* Used for assigning "names" to cones.
*/
int dimensionIndex(Cone const &c);
#if 0
/**
* This routine is used for constructing the boundary map for homology computations.
*/
void boundary(Cone const &c, IntVector &indices, IntVector &signs);
/**
* This routine computes the ith boundary map for homology as a matrix.
*/
ZMatrix boundaryMap(int i);
#endif
ZCone makeZCone(IntVector const &indices)const;
};
}
#endif
|