with Standard_Integer_Vectors; use Standard_Integer_Vectors; with Standard_Integer_VecVecs; use Standard_Integer_VecVecs; with Standard_Integer_Matrices; use Standard_Integer_Matrices; with Standard_Complex_Vectors; package Transformations is -- DESCRIPTION : -- This package implements monomial transformations. type Transfo is private; -- CONSTRUCTORS : function Id ( n : natural ) return Transfo; -- DESCRIPTION : -- Returns the identical transformation. function Create ( v : Vector; i : integer ) return Transfo; -- DESCRIPTION : -- returns a transformation T such that after w = Apply(T,v), -- there exists a j /= i: w(i) = 1 and w(j) = 0; -- if v(i) = 0, then the identity transformation will be returned; -- T is an isomorphism. function Create ( v : VecVec ) return Transfo; -- DESCRIPTION : -- returns a transformation T, where v(i) is the image of -- the i-th basis vector, for i in da'range. function Create ( m : Matrix ) return Transfo; -- DESCRIPTION : -- Returns the transformation defined by the matrix m. -- Apply(Create(m),v) = m*v. function Rotate ( v : Vector; i : integer ) return Transfo; function Rotate ( v : Link_to_Vector; i : integer ) return Transfo; -- DESCRIPTION : -- Returns a transformation T which will reduce v into e_i; -- if v(i) /= 0; T is an isomorphism. function Build_Transfo ( v : Vector; i : integer ) return Transfo; function Build_Transfo ( v : Link_to_Vector; i : integer ) return Transfo; -- DESCRIPTION : -- Returns a transformation T so that for all vectors x -- < x , v > = pv, after application of T on all x, the -- following holds: x(i) = pv / d, where d is the gcd of -- the components of v; T is an isomorphism. -- SELECTORS : function Dimension ( t : Transfo ) return natural; -- DESCRIPTION : -- Returns the dimension of the transformation. function Sign ( t : Transfo ) return integer; -- DESCRIPTION : -- Returns the determinant of the matrix representation of t, -- which is either +1 or -1. -- OPERATIONS : function Transpose ( t : Transfo ) return Transfo; -- DESCRIPTION : -- Returns the transposed transformation. function Invert ( t : Transfo ) return Transfo; -- DESCRIPTION : -- Computes the inverse transformation of t; -- after t1 := Invert(t), t1*t = t*t1 = Id. -- REQUIRED : t is an isomorphism. function "*" ( t1,t2 : Transfo ) return Transfo; -- DESCRIPTION : -- Returns t1 after t2 procedure Mult1 ( t1 : in out Transfo; t2 : in Transfo ); -- DESCRIPTION : -- t1 := t1 * t2; but with an efficient memory management procedure Mult2 ( t1 : in Transfo; t2 : in out Transfo ); -- DESCRIPTION : -- t2 := t1 * t2; but with an efficient memory management function "*"( t : Transfo; v : Vector ) return Vector; -- return t*v; function "*"( t : Transfo; v : Link_to_Vector ) return Link_to_Vector; procedure Apply ( t : in Transfo; v : in out Vector ); -- v := t*v; procedure Apply ( t : in Transfo; v : in out Link_to_Vector ); function "*" ( t : Transfo; v : Standard_Complex_Vectors.Vector ) return Standard_Complex_Vectors.Vector; procedure Apply ( t : in Transfo; v : in out Standard_Complex_Vectors.Vector ); -- v := t*v; -- DESTRUCTOR : procedure Clear ( t : in out Transfo ); -- DESCRIPTION : -- Frees all allocated memory space private type Transfo_tp; type Transfo is access Transfo_tp; end Transformations;