14#ifndef OR_TOOLS_SAT_SYMMETRY_UTIL_H_
15#define OR_TOOLS_SAT_SYMMETRY_UTIL_H_
20#include "absl/types/span.h"
22#include "ortools/sat/cp_model.pb.h"
50 absl::Span<
const std::unique_ptr<SparsePermutation>> generators);
58 int n, absl::Span<
const std::unique_ptr<SparsePermutation>> generators);
64 absl::Span<
const std::vector<int>> orbitope);
69 int point, absl::Span<
const std::unique_ptr<SparsePermutation>> generators,
70 std::vector<int>* schrier_vector, std::vector<int>* orbit);
76 int point, absl::Span<const int> schrier_vector,
77 absl::Span<
const std::unique_ptr<SparsePermutation>> generators);
81 int n,
const SparsePermutationProto& proto);
99 std::vector<std::unique_ptr<SparsePermutation>>* generators) {}
std::vector< int > GetOrbitopeOrbits(int n, absl::Span< const std::vector< int > > orbitope)
void GetSchreierVectorAndOrbit(int point, absl::Span< const std::unique_ptr< SparsePermutation > > generators, std::vector< int > *schrier_vector, std::vector< int > *orbit)
std::vector< int > TracePoint(int point, absl::Span< const int > schrier_vector, absl::Span< const std::unique_ptr< SparsePermutation > > generators)
void TransformToGeneratorOfStabilizer(int to_stabilize, std::vector< std::unique_ptr< SparsePermutation > > *generators)
std::vector< int > GetOrbits(int n, absl::Span< const std::unique_ptr< SparsePermutation > > generators)
std::unique_ptr< SparsePermutation > CreateSparsePermutationFromProto(int n, const SparsePermutationProto &proto)
Creates a SparsePermutation on [0, n) from its proto representation.
std::vector< std::vector< int > > BasicOrbitopeExtraction(absl::Span< const std::unique_ptr< SparsePermutation > > generators)
In SWIG mode, we don't want anything besides these top-level includes.