Regina 7.3 Calculation Engine
|
A do-nothing class that imposes no additional linear constraints on the tableaux of normal surface or angle structure matching equations. More...
#include <enumerate/treeconstraint.h>
Public Types | |
using | Coefficient = int |
Static Public Member Functions | |
static void | addRows (LPCol< regina::LPConstraintNone > *, const LPInitialTableaux< LPConstraintNone > &init) |
template<typename IntType > | |
static void | constrain (LPData< regina::LPConstraintNone, IntType > &, size_t) |
static bool | verify (const NormalSurface &) |
static bool | verify (const AngleStructure &) |
static bool | supported (NormalEncoding enc) |
static void | addRows (LPCol< LPConstraintBase > *col, const LPInitialTableaux< LPConstraintBase > &init) |
Explicitly constructs equations for the linear function(s) constrained by this class. More... | |
Static Public Attributes | |
static constexpr int | nConstraints = 0 |
static constexpr Coefficient | octAdjustment = 0 |
A do-nothing class that imposes no additional linear constraints on the tableaux of normal surface or angle structure matching equations.
See the LPConstraintBase class notes for details on all member functions.
These linear constraint classes are designed mainly to act as C++ template arguments, and end users will typically not need to construct their own object of these classes. Instead, to use a linear constraint class, pass it as a template parameter to one of the tree traversal subclasses (e.g., TreeEnumeration, TreeSingleSolution, or TautEnumeration).
TreeEnumeration
, TreeSingleSoln_BanBoundary
and TautEnumeration
all use this do-nothing LPConstraintNone class. See the LPConstraintBase class notes for further details on accessing other types of linear constraints from within Python.
|
staticinherited |
Explicitly constructs equations for the linear function(s) constrained by this class.
Specifically, this routine takes an array of columns in the initial tableaux and fills in the necessary coefficient data.
More precisely: recall that, for each linear function, the initial tableaux acquires one new variable x_i that evaluates this linear function f(x). This routine must create the corresponding row that sets f(x) - x_i = 0
. Thus it must construct the coefficients of f(x) in the columns corresponding to normal coordinates, and it must also set a coefficient of -1 in the column for the corresponding new variable.
As described in the LPInitialTableaux class notes, it might not be possible to construct the linear functions (since the underlying triangulation might not satisfy the necessary requirements). In such cases this routine should throw an exception, as described below, and the corresponding constraint class must mention this possibility in its class documentation.
If you are implementing this routine in a subclass that works with angle structure coordinates, remember that your linear constraints must not interact with the scaling coordinate (the final angle structure coordinate that is used to projectivise the angle structure polytope into a polyhedral cone). Your implementation of this routine must ensure that your linear constraints all have coefficient zero in this column.
The precise form of the linear function(s) will typically depend upon the underlying triangulation, as well as the permutation that indicates which columns of the initial tableaux correspond to which normal or angle structure coordinates. All of this information is read from the given initial tableaux init.
Note that the tableaux init may still be under construction (and indeed, the column array col to be filled will typically be the internal column array from init itself). This routine should not read any of the tableaux entries; it should only access the underlying triangulation (LPInitialTableaux.tri()) and the permutation of columns (LPInitialTableaux.columnPerm()).
For each subclass Sub of LPConstraintBase, the array col must be an array of objects of type LPCol<Sub>, and the tableaux init must be of type LPInitialTableaux<Sub>.
This routine should only write to the coefficients stored in LPCol::extra. You may assume that these coefficients have all been initialised to zero by the LPCol constructor.
InvalidArgument | It was not possible to create the linear functions for these constraints, due to an error which should have been preventable with the right checks in advance. Any constraint class that could throw exceptions in this way must describe this behaviour in its own class documentation. |
UnsolvedCase | It was not possible to create the linear functions for these constraints, due to an error that was "genuinely" unforseeable. Again, any constraint class that could throw exceptions in this way must describe this behaviour in its own class documentation. |
col | the array of columns as stored in the initial tableaux (i.e., the data member LPInitialTableaux::col_). |
init | the tableaux through which this routine can acces the underlying triangulation and permutation of columns. Typically this will be the tableaux holding the column array col. |