#  Copyright (c) 1997-2018
#  Ewgenij Gawrilow, Michael Joswig (Technische Universitaet Berlin, Germany)
#  http://www.polymake.org
#
#  This program is free software; you can redistribute it and/or modify it
#  under the terms of the GNU General Public License as published by the
#  Free Software Foundation; either version 2, or (at your option) any
#  later version: http://www.gnu.org/licenses/gpl.txt.
#
#  This program is distributed in the hope that it will be useful,
#  but WITHOUT ANY WARRANTY; without even the implied warranty of
#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#  GNU General Public License for more details.
#-------------------------------------------------------------------------------

object Group {

   # @category Symmetry
   # The number of elements in the group
   property ORDER : Integer;

   # @category Symmetry
   # The character table.
   # NOTE: We do not support complex characters, but for the moment only real ones.
   property CHARACTER_TABLE : Matrix<QuadraticExtension<Rational>>;
   
   # @category Symmetry
   # The sizes of the conjugacy classes
   property CONJUGACY_CLASS_SIZES : Array<Int>;

   #
   # after these general properties,
   # different actions that express representations of the group on different entities
   #
   
   # @category Symmetry
   # a permutation action on integers
   property PERMUTATION_ACTION : PermutationAction : multiple;

   # @category Symmetry
   # a permutation action on a collection of sets of integers
   property SET_ACTION : PermutationAction<Set<Int>> : multiple;

   # @category Symmetry
   # an action on sets where only one representative for each orbit is stored
   property IMPLICIT_SET_ACTION : ImplicitActionOnSets : multiple;

   # @category Symmetry
   # operates on indices
   property INPUT_RAYS_ACTION : PermutationAction;

   # @category Symmetry
   # operates on indices
   property RAYS_ACTION : PermutationAction;

   # @category Symmetry
   # operates on indices
   property INEQUALITIES_ACTION : PermutationAction;

   # @category Symmetry
   # operates on indices
   property FACETS_ACTION : PermutationAction;

   # @category Symmetry
   # operates on indices
   property MAXIMAL_CONES_ACTION : PermutationAction;

   # @category Symmetry
   # operates on indices
   property INPUT_CONES_ACTION : group::PermutationAction;

   # @category Symmetry
   # operates on indices
   property FACET_NORMALS_ACTION : PermutationAction;
   
   # @category Symmetry
   # operates on indices, including the '0'-th homogeneous coordinate
   property HOMOGENEOUS_COORDINATE_ACTION : PermutationAction;

   # @category Symmetry
   # operates on indices
   property VECTOR_ACTION : PermutationAction;

   # @category Symmetry
   property REGULAR_REPRESENTATION : MatrixActionOnVectors<Rational>;
}



# Local Variables:
# mode: perl
# cperl-indent-level:3
# indent-tabs-mode:nil
# End:
