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