Regina 7.4 Calculation Engine
|
Normal hypersurfaces in 4-manifold triangulations. More...
Classes | |
class | regina::HyperEncoding |
Indicates precisely how a normal hypersurface within a 4-manifold triangulation is encoded by an integer vector. More... | |
class | regina::HyperInfo |
A class used to query general information about different normal hypersurface coordinate systems. More... | |
class | regina::NormalHypersurface |
Represents a single normal hypersurface in a 4-manifold triangulation. More... | |
class | regina::NormalHypersurfaces |
A collection of normal hypersurfaces in a 4-manifold triangulation. More... | |
Enumerations | |
enum class | regina::HyperCoords { regina::HyperCoords::Standard = 0 , regina::HyperCoords::Prism = 1 , regina::HyperCoords::Edge = 200 } |
Represents different coordinate systems that can be used for enumerating and/or displaying normal hypersurfaces within 4-manifold triangulations. More... | |
enum class | regina::HyperList { regina::HyperList::Default = 0x0000 , regina::HyperList::EmbeddedOnly = 0x0001 , regina::HyperList::ImmersedSingular = 0x0002 , regina::HyperList::Vertex = 0x0004 , regina::HyperList::Fundamental = 0x0008 , regina::HyperList::Legacy = 0x4000 , regina::HyperList::Custom = 0x8000 } |
Represents different lists of normal hypersurfaces that might be constructed for a given 4-manifold triangulation. More... | |
enum class | regina::HyperAlg { regina::HyperAlg::Default = 0x0000 , regina::HyperAlg::VertexDD = 0x0020 , regina::HyperAlg::HilbertPrimal = 0x0100 , regina::HyperAlg::HilbertDual = 0x0200 , regina::HyperAlg::Legacy = 0x4000 , regina::HyperAlg::Custom = 0x8000 } |
Represents options and variants of algorithms for enumerating various types of normal hypersurfaces in 4-manifold triangulations. More... | |
Functions | |
Flags< HyperList > | regina::operator| (HyperList lhs, HyperList rhs) |
Returns the bitwise OR of the two given flags. | |
Flags< HyperAlg > | regina::operator| (HyperAlg lhs, HyperAlg rhs) |
Returns the bitwise OR of the two given flags. | |
void | regina::swap (NormalHypersurface &a, NormalHypersurface &b) noexcept |
Swaps the contents of the given normal hypersurfaces. | |
void | regina::swap (NormalHypersurfaces &lhs, NormalHypersurfaces &rhs) |
Swaps the contents of the two given lists. | |
MatrixInt | regina::makeMatchingEquations (const Triangulation< 4 > &triangulation, HyperCoords coords) |
Generates the set of normal hypersurface matching equations for the given triangulation using the given coordinate system. | |
ValidityConstraints | regina::makeEmbeddedConstraints (const Triangulation< 4 > &triangulation, HyperCoords coords) |
Generates the validity constraints representing the condition that normal hypersurfaces be embedded. | |
Normal hypersurfaces in 4-manifold triangulations.
|
strong |
Represents options and variants of algorithms for enumerating various types of normal hypersurfaces in 4-manifold triangulations.
This enumeration type is used with normal hypersurface enumeration routines, such as the NormalHypersurfaces class constructor.
These values can be combined using the bitwise OR operator (resulting in an object of type Flags<HyperAlg>
). In particular, if a hypersurface enumeration function takes an argument of type Flags<HyperAlg>
, then you can pass a single HyperAlg constant, or a bitwise combination of such constants (flag1 | flag2)
, or empty braces {}
to indicate no flags at all (which is equivalent to passing HyperAlg::Default
).
Enumerator | |
---|---|
Default | An empty flag, indicating to an enumeration routine that it should use its default behaviour. The numeric value of this flag is zero (i.e., it has no effect when combined with other flags using bitwise OR). |
VertexDD | When enumerating vertex normal hypersurfaces, this flag indicates that a modified double description method should be used. This algorithm can suffer from a combinatorial explosion with larger problems, leading to extremely large time and memory footprints. Users should only request this if they have some specialised need. Having said that: this is the only algorithm that Regina currently supports for 4-dimensional vertex enumeration (unlike the 3-dimensional case, where several alternative algorithms are available). Therefore Regina will use the double description method regardless. Alternative algorithms will be implemented in future versions of Regina. For details on the modified double description method, see B. A. Burton, "Optimizing the double description method for normal surface enumeration", Mathematics of Computation 79 (2010), pp. 453-484. |
HilbertPrimal | When enumerating fundamental normal hypersurfaces, this flag indicates that the primal method should be used for enumerating a Hilbert basis. The primal method is recommended, and enumeration algorithms will use it if possible unless a different method is explicitly requested. This method uses code from Normaliz for parts of its processing. For details and comparisons of the various options for enumerating fundamental normal surfaces, see B. A. Burton, "Enumerating fundamental normal surfaces: Algorithms, experiments and invariants", ALENEX 2014: Proceedings of the Meeting on Algorithm Engineering & Experiments, SIAM, 2014, pp. 112-124. This flag is incompatible with HilbertDual. |
HilbertDual | When enumerating fundamental normal hypersurfaces, this flag indicates that the dual method should be used for enumerating a Hilbert basis. The dual method is fast (like the primal method), but its performance is highly variable; for this reason the primal method is recommended instead. This method does not make use of Normaliz, and is the recommended method for situations in which Normaliz is not available for some reason. For details and comparisons of the various options for enumerating fundamental normal surfaces, see B. A. Burton, "Enumerating fundamental normal surfaces: Algorithms, experiments and invariants", ALENEX 2014: Proceedings of the Meeting on Algorithm Engineering & Experiments, SIAM, 2014, pp. 112-124. This flag is incompatible with HilbertPrimal. |
Legacy | Indicates that a normal hypersurface list was enumerated using an older prerelease version of the 4-manifolds code (prior to Regina 5.0). These prerelease versions did not retain details of the algorithm used to build each list, and so in such cases no further algorithmic information is available. If this flag is passed to an enumeration algorithm, it will be ignored. |
Custom | Indicates that a normal hypersurface list was built using a customised algorithm. In such cases, no further details on the algorithm are available. If this flag is passed to an enumeration algorithm, it will be ignored. |
|
strong |
Represents different coordinate systems that can be used for enumerating and/or displaying normal hypersurfaces within 4-manifold triangulations.
IDs 0-9999 are reserved for future use by Regina. If you are extending Regina to include your own coordinate system, you should choose an ID ≥ 10000.
|
strong |
Represents different lists of normal hypersurfaces that might be constructed for a given 4-manifold triangulation.
This enumeration type is used with normal hypersurface enumeration routines, such as the NormalHypersurfaces class constructor.
The HyperList enumeration refers to the contents of the list, whereas the HyperAlg enumeration refers to the algorithm used to build it.
These values can be combined using the bitwise OR operator (resulting in an object of type Flags<HyperList>
). In particular, if a hypersurface enumeration function takes an argument of type Flags<HyperList>
, then you can pass a single HyperList constant, or a bitwise combination of such constants (flag1 | flag2)
, or empty braces {}
to indicate no flags at all (which is equivalent to passing HyperList::Default
).
ValidityConstraints regina::makeEmbeddedConstraints | ( | const Triangulation< 4 > & | triangulation, |
HyperCoords | coords ) |
Generates the validity constraints representing the condition that normal hypersurfaces be embedded.
The validity constraints will be expressed relative to the given coordinate system.
These are the constraints that will be used when enumerating embedded hypersurfaces in the given coordinate system (i.e., when the default flag HyperList::EmbeddedOnly is used). They will not be used when the enumeration allows for immersed and/or singular hypersurfaces.
triangulation | the triangulation upon which these validity constraints will be based. |
coords | the coordinate system to be used; this must be one of the predefined coordinate system constants in NormalHypersurfaces. |
MatrixInt regina::makeMatchingEquations | ( | const Triangulation< 4 > & | triangulation, |
HyperCoords | coords ) |
Generates the set of normal hypersurface matching equations for the given triangulation using the given coordinate system.
These are the matching equations that will be used when enumerating normal hypersurfaces in the coordinate system coords.
Each equation will be represented as a row of the resulting matrix. Each column of the matrix represents a coordinate in the given coordinate system.
InvalidArgument | The matching equations could not be created for the given triangulation in the given coordinate system, due to an error that should have been preventable with the right checks in advance. This can only happen in certain coordinate systems, and for all such coordinate systems this is explicitly described in the HyperCoords enum documentation. |
UnsolvedCase | The matching equations could not be created for the given triangulation in the given coordinate system, due to an error that was "genuinely" unforseeable. Again this can only happen in certain coordinate systems, where this is explicitly described in the HyperCoords enum documentation. |
triangulation | the triangulation upon which these matching equations will be based. |
coords | the coordinate system to be used. |
Returns the bitwise OR of the two given flags.
lhs | the first flag to combine. |
rhs | the second flag to combine. |
Returns the bitwise OR of the two given flags.
lhs | the first flag to combine. |
rhs | the second flag to combine. |
|
inlinenoexcept |
Swaps the contents of the given normal hypersurfaces.
This is a fast (constant time) operation.
This global routine simply calls NormalHypersurface::swap(); it is provided so that NormalHypersurface meets the C++ Swappable requirements.
a | the first normal hypersurface whose contents should be swapped. |
b | the second normal hypersurface whose contents should be swapped. |
|
inline |
Swaps the contents of the two given lists.
This global routine simply calls NormalHypersurfaces::swap(); it is provided so that NormalHypersurfaces meets the C++ Swappable requirements.
See NormalHypersurfaces::swap() for more details.
noexcept
, since it fires change events on both lists which may in turn call arbitrary code via any registered packet listeners.lhs | the list whose contents should be swapped with rhs. |
rhs | the list whose contents should be swapped with lhs. |