1 #pragma once 2 3 #include "polymake/Rational.h" 4 #include "polymake/Matrix.h" 5 #include "polymake/group/permlib.h" 6 7 namespace sympol { 8 class Polyhedron; 9 class QArray; 10 } 11 12 namespace polymake { namespace polytope { namespace sympol_interface { 13 14 enum class SympolRayComputationMethod { 15 lrs, 16 cdd, 17 beneath_beyond, 18 ppl, 19 invalid 20 }; 21 22 class sympol_wrapper { 23 public: 24 static group::PermlibGroup compute_linear_symmetries (const Matrix<Rational>& inequalities, const Matrix<Rational>& equations); 25 /** 26 * @param inequalities inequalities of the polytope 27 * @param equations equations of the polytope 28 * @param symmetry_group symmetry group acting on the inequality/equation indices 29 * @param rayCompMethod the library to use for convex hull computations (e.g. lrs or cdd) 30 * @param idmLevel recursion level up to which IDM is used (must not be negative) 31 * @param admLevel recursion level up to which ADM is used (must not be negative, must be greater or equal than //idmLevel//) 32 * @param dual true iff input are rays and lineality space 33 * @param out_inequalities vertices of the polytope up to symmetry 34 * @param out_equations affine hull of the polytope up to symmetry 35 * @return true iff SymPol computation was successful 36 */ 37 static bool computeFacets(const Matrix<Rational>& inequalities, const Matrix<Rational>& equations, const group::PermlibGroup& symmetry_group, SympolRayComputationMethod rayCompMethod, int idmLevel, int admLevel, bool dual, Matrix<Rational>& out_inequalities, Matrix<Rational>& out_equations); computeFacets(const Matrix<Rational> & inequalities,const Matrix<Rational> & equations,const group::PermlibGroup & symmetry_group,SympolRayComputationMethod rayCompMethod,bool dual,Matrix<Rational> & out_inequalities,Matrix<Rational> & out_equations)38 static bool computeFacets(const Matrix<Rational>& inequalities, const Matrix<Rational>& equations, const group::PermlibGroup& symmetry_group, SympolRayComputationMethod rayCompMethod, bool dual, Matrix<Rational>& out_inequalities, Matrix<Rational>& out_equations) { 39 return computeFacets(inequalities, equations, symmetry_group, rayCompMethod, 0, 1, dual, out_inequalities, out_equations); 40 } 41 42 static sympol::Polyhedron* assembleSympolPolyhedron(const Matrix<Rational>& inequalities, const Matrix<Rational>& equations, bool dual, bool& is_homogeneous); 43 44 static std::list<sympol::QArray> matrix2QArray(const Matrix<Rational>& A, bool& is_homogeneous); 45 46 }; 47 48 49 50 } } } 51 52 53 // Local Variables: 54 // mode:C++ 55 // c-basic-offset:3 56 // indent-tabs-mode:nil 57 // End: 58