with text_io; use text_io;
with Standard_Natural_Vectors;
with Standard_Complex_Vectors;
with Standard_Complex_VecMats; use Standard_Complex_VecMats;
with Standard_Complex_Poly_Matrices;
with Brackets; use Brackets;
with Localization_Posets; use Localization_Posets;
package Deformation_Posets is
-- DESCRIPTION :
-- This package is the continuous analogue of "Localization_Posets".
-- DATA STRUCTURES :
type Array_of_VecMats is array ( integer range <> ) of Link_to_VecMat;
type Link_to_Array_of_VecMats is access Array_of_VecMats;
type Array_of_Array_of_VecMats is
array ( integer range <> ) of Link_to_Array_of_VecMats;
type Duration_Array is array ( integer range <> ) of duration;
-- CREATORS :
function Create ( index_poset : Array_of_Array_of_Nodes )
return Array_of_Array_of_VecMats;
-- DESCRIPTION :
-- The array on return mirrors the index poset in the following sense:
-- res(i)(j)'length = poset(i)(j).roco, if roco > 0,
-- res(i)(j) = null, if roco = 0.
-- SELECTOR :
function Empty ( poset : Array_of_Array_of_VecMats; level,label : natural )
return boolean;
-- DESCRIPTION :
-- Returns true if poset(level)(label) is a vector of null pointers.
-- ANALOGUES TO ROOT COUNTERS :
procedure Solve ( file : in file_type; n : in natural;
poset : in out Array_of_Array_of_VecMats; nd : in Node;
planes : in VecMat; report,outlog : in boolean;
npaths : in out Standard_Natural_Vectors.Vector;
timings : in out Duration_Array );
-- DESCRIPTION :
-- Computes the p-planes that intersect with the given m-planes.
-- This is the solver for hypersurface intersection conditions.
-- ON ENTRY :
-- file output file for intermediate results and logs;
-- n dimension of the working space, equals m+p;
-- poset deformation poset, properly created from index poset;
-- nd target root node from the localization poset;
-- planes input planes in general position;
-- report indicates if reporting path tracker is needed;
-- outlog flag to write homotopies on file if set to true.
-- ON RETURN :
-- poset poset(nd.level)(nd.label) contains all p-planes that
-- intersect nontrivially with planes(1..nd.level);
-- npaths number of paths traced at each level;
-- timings CPU user time at each level.
procedure One_Solve
( file : in file_type; n : in natural; cod : in Bracket;
poset : in out Array_of_Array_of_VecMats; nd : in Node;
planes : in VecMat; report,outlog : in boolean;
npaths : in out Standard_Natural_Vectors.Vector;
timings : in out Duration_Array );
-- DESCRIPTION :
-- Computes the p-planes that intersect with the given planes of
-- dimension (m+1-cod(i)), for i in cod'range.
-- There is only one moving equation in the homotopies.
-- REQUIRED :
-- The localization poset has been built either by consistently
-- incrementing the top or by decrementing the bottom pivots.
-- The co-dimension conditions are not interlaced.
-- ON ENTRY :
-- file output file for intermediate results and logs;
-- n dimension of the working space, equals m+p;
-- cod co-dimensions of input planes, dim(L_i) = m+1-cod(i)
-- poset deformation poset, properly created from index poset;
-- nd target root node from the localization poset;
-- planes input planes L_i in general position;
-- report indicates if reporting path tracker is needed;
-- outlog flag to write homotopies on file if set to true.
-- ON RETURN :
-- poset poset(nd.level)(nd.label) contains all p-planes that
-- intersect nontrivially with planes(1..nd.level);
-- npaths number of paths traced at each level;
-- timings CPU user time at each level.
procedure Solve ( file : in file_type; n : in natural; cod : in Bracket;
poset : in out Array_of_Array_of_VecMats; nd : in Node;
planes : in VecMat; report,outlog : in boolean;
npaths : in out Standard_Natural_Vectors.Vector;
timings : in out Duration_Array );
-- DESCRIPTION :
-- Computes the p-planes that intersect with the given planes of
-- dimension (m+1-cod(i)), for i in cod'range.
-- The co-dimension conditions are interlaced here.
-- ON ENTRY :
-- file output file for intermediate results and logs;
-- n dimension of the working space, equals m+p;
-- cod co-dimensions of input planes, dim(L_i) = m+1-cod(i)
-- poset deformation poset, properly created from index poset;
-- nd target root node from the localization poset;
-- planes input planes L_i in general position;
-- report indicates if reporting path tracker is needed;
-- outlog flag to write homotopies on file if set to true.
-- ON RETURN :
-- poset poset(nd.level)(nd.label) contains all p-planes that
-- intersect nontrivially with planes(1..nd.level);
-- npaths number of paths traced at each level;
-- timings CPU user time at each level.
procedure Solve ( file : in file_type; n,q : in natural;
poset : in out Array_of_Array_of_VecMats; nd : in Node;
planes : in VecMat; s : in Standard_Complex_Vectors.Vector;
report,outlog : in boolean;
npaths : in out Standard_Natural_Vectors.Vector;
timings : in out Duration_Array );
-- DESCRIPTION :
-- Computes the q-curve that produces p-planes in n-dimensional space
-- that intersect with the given m-planes at specific s-values.
-- This is the quantum analogue to the hypersurface solver.
-- ON ENTRY :
-- file output file for intermediate results and logs;
-- n dimension of the working space, equals m+p;
-- q degree of the map;
-- poset deformation poset, properly created from index poset;
-- nd target root node from the localization poset;
-- planes input m-planes in general position;
-- s interpolation points to meet the input m-planes;
-- report indicates if reporting path tracker is needed.
-- outlog flag to write homotopies on file if set to true.
-- ON RETURN :
-- poset poset(nd.level)(nd.label) contains coefficients
-- of all curves that intersect nontrivially with
-- planes(1..nd.level) at the specified s-values.
-- npaths number of paths traced at each level;
-- timings CPU user times at each level.
procedure One_Solve
( file : in file_type; n,q : in natural; cod : in Bracket;
poset : in out Array_of_Array_of_VecMats; nd : in Node;
planes : in VecMat; s : in Standard_Complex_Vectors.Vector;
report,outlog : in boolean;
npaths : in out Standard_Natural_Vectors.Vector;
timings : in out Duration_Array );
-- DESCRIPTION :
-- This is the quantum analogue to the other "One_Solve".
-- Computes the p-planes that intersect with the given planes of
-- dimension (m+1-cod(i)), for i in cod'range.
-- There is only one moving equation in the homotopies.
-- REQUIRED :
-- The localization poset has been built either by consistently
-- incrementing the top or by decrementing the bottom pivots.
-- The co-dimension conditions are not interlaced.
-- ON ENTRY :
-- file output file for intermediate results and logs;
-- n dimension of the working space, equals m+p;
-- q degree of the map;
-- cod co-dimensions of input planes, dim(L_i) = m+1-cod(i)
-- poset deformation poset, properly created from index poset;
-- nd target root node from the localization poset;
-- planes input planes L_i in general position;
-- s interpolation points to meet the input planes;
-- report indicates if reporting path tracker is needed;
-- outlog flag to write homotopies on file if set to true.
-- ON RETURN :
-- poset poset(nd.level)(nd.label) contains all p-planes that
-- intersect nontrivially with planes(1..nd.level);
-- npaths number of paths traced at each level;
-- timings CPU user time at each level.
procedure Solve ( file : in file_type; n,q : in natural; cod : in Bracket;
poset : in out Array_of_Array_of_VecMats; nd : in Node;
planes : in VecMat; s : in Standard_Complex_Vectors.Vector;
report,outlog : in boolean;
npaths : in out Standard_Natural_Vectors.Vector;
timings : in out Duration_Array );
-- DESCRIPTION :
-- Computes the q-curve that produces p-planes in n-dimensional space
-- that intersect with the given m-planes at specific s-values.
-- This is the quantum analogue to the general solver.
-- ON ENTRY :
-- file output file for intermediate results and logs;
-- n dimension of the working space, equals m+p;
-- q degree of the map;
-- cod co-dimensions of input planes, dim(L_i) = m+1-cod(i);
-- poset deformation poset, properly created from index poset;
-- nd target root node from the localization poset;
-- planes input m-planes in general position;
-- s interpolation points to meet the input planes;
-- report indicates if reporting path tracker is needed.
-- outlog flag to write homotopies on file if set to true.
-- ON RETURN :
-- poset poset(nd.level)(nd.label) contains coefficients
-- of all curves that intersect nontrivially with
-- planes(1..nd.level) at the specified s-values.
-- npaths number of paths traced at each level;
-- timings CPU user times at each level.
-- DESTRUCTORS :
procedure Clear ( avm : in out Array_of_VecMats );
procedure Clear ( avm : in out Link_to_Array_of_VecMats );
procedure Clear ( avm : in out Array_of_Array_of_VecMats );
-- DESCRIPTION :
-- Deallocation of the occupied memory.
end Deformation_Posets;