with Abstract_Ring;
with Abstract_Ring.Field;
with Generic_Vectors,Generic_VecVecs;
with Generic_Laurent_Polynomials;
with Generic_Laur_Poly_Functions;
with Generic_Laur_Poly_Systems;
generic
with package Ring is new Abstract_Ring(<>);
with package Field is new Ring.Field(<>);
with package Vectors is new Generic_Vectors(Ring);
with package VecVecs is new Generic_VecVecs(Ring,Vectors);
with package Polynomials is new Generic_Laurent_Polynomials(Ring);
with package Poly_Functions is
new Generic_Laur_Poly_Functions(Ring,Field,Vectors,Polynomials);
with package Poly_Systems is
new Generic_Laur_Poly_Systems(Ring,Polynomials);
package Generic_Laur_System_Functions is
-- DESCRIPTION :
-- This package provides data structures and evaluation functions for
-- systems of Laurent polynomials.
use Ring,Field,Vectors,VecVecs,Poly_Functions,Poly_Systems;
-- FUNCTION TYPE :
type Evaluator is access function ( x : Vector ) return Vector;
-- DATA STRUCTURES :
type Eval_Laur_Sys is array ( integer range <> ) of Eval_Poly;
type Eval_Coeff_Laur_Sys is array ( integer range <> ) of Eval_Coeff_Poly;
-- CREATORS :
function Create ( p : Laur_Sys ) return Eval_Laur_Sys;
function Create ( p : Laur_Sys ) return Eval_Coeff_Laur_Sys;
-- EVALUATORS :
function Eval ( p : Laur_Sys; x : number; i : natural ) return Laur_Sys;
function Eval ( p : Laur_Sys; x : Vector ) return Vector;
function Eval ( p : Eval_Laur_Sys; x : Vector ) return Vector;
function Eval ( p : Eval_Coeff_Laur_Sys; c : VecVec; x : Vector )
return Vector;
-- DESTRUCTORS :
procedure Clear ( p : in out Eval_Laur_Sys );
procedure Clear ( p : in out Eval_Coeff_Laur_Sys );
end Generic_Laur_System_Functions;