with Standard_Floating_Numbers; use Standard_Floating_Numbers;
with Standard_Integer_Vectors;
with Standard_Floating_Vectors;
with Arrays_of_Integer_Vector_Lists;
with Arrays_of_Floating_Vector_Lists;
with Symmetry_Group; use Symmetry_Group;
package Symmetric_Lifting_Functions is
-- DESCRIPTION :
-- This package provides symmetric lifting functions.
procedure Classify_Orbits
( supports : in Arrays_of_Integer_Vector_Lists.Array_of_Lists;
mix : in Standard_Integer_Vectors.Vector;
v,w : in List_of_Permutations; norb : out natural;
orbits : out Arrays_of_Integer_Vector_Lists.Array_of_Lists );
-- DESCRIPTION :
-- This procedure provides a symmetric lifting for the given supports,
-- w.r.t. the symmetry group, represented by the lists of permutations
-- v and w.
-- ON ENTRY :
-- supports supports of a polynomial system;
-- mix type of mixture;
-- v,w linear representations of the group actions:
-- wk P(x) = P(vk x).
-- ON RETURN :
-- norb the number of different orbits;
-- orbits the lifted supports, w.r.t. the symmetry group,
-- as lifting value the orbit number has been used.
procedure Float_Lift_Orbits
( orbits : in out Arrays_of_Floating_Vector_Lists.Array_of_Lists;
lifting : in Standard_Floating_Vectors.Vector );
-- DESCRIPTION :
-- Given supports with classified orbits, each orbit will receive
-- the corresponding lifting value in the vector lifting.
-- REQUIRED :
-- lifting has range 1..#orbits
procedure Integer_Lift_Orbits
( orbits : in out Arrays_of_Integer_Vector_Lists.Array_of_Lists;
lifting : in Standard_Integer_Vectors.Vector );
-- DESCRIPTION :
-- Given supports with classified orbits, each orbit will receive
-- the corresponding lifting value in the vector lifting.
-- REQUIRED :
-- lifting has range 1..#orbits
procedure Float_Random_Lift_Orbits
( orbits : in out Arrays_of_Floating_Vector_Lists.Array_of_Lists;
norb : in natural; lower,upper : in double_float );
-- DESCRIPTION :
-- Orbits are given random floating-point lifting values in [lower,upper].
-- Every point in the same orbit receives the same lifting.
-- ON ENTRY :
-- orbits classified orbits, last entry of vectors is orbit number;
-- norb the number of orbits;
-- lower lower bound for random number generator;
-- upper upper bound for random number generator.
-- ON RETURN :
-- orbits each point in the same orbit has the same random number.
procedure Integer_Random_Lift_Orbits
( orbits : in out Arrays_of_Integer_Vector_Lists.Array_of_Lists;
norb : in natural; lower,upper : in integer );
-- DESCRIPTION :
-- Orbits are given random integer lifting values in [lower,upper].
-- Every point in the same orbit receives the same lifting.
-- ON ENTRY :
-- orbits classified orbits, last entry of vectors is orbit number;
-- norb the number of orbits;
-- lower lower bound for random number generator;
-- upper upper bound for random number generator.
-- ON RETURN :
-- orbits each point in the same orbit has the same random number.
end Symmetric_Lifting_Functions;