Regina 7.3 Calculation Engine
|
Provides an alternative representation of a single bounded Seifert fibred space. More...
#include <manifold/sfsalt.h>
Public Member Functions | |
SFSAlt (const SFSpace &original) | |
Creates a "basic" alternative representation for the given Seifert fibred space. More... | |
SFSAlt (const SFSAlt &base, bool reflect, bool negate=false) | |
Creates a new alternative representation from the given alternative representation. More... | |
SFSAlt (const SFSAlt &)=default | |
Creates a new copy of the given alternative. More... | |
SFSAlt (SFSAlt &&) noexcept=default | |
Moves the contents of the given alternative into this new alternative. More... | |
SFSAlt & | operator= (const SFSAlt &)=default |
Sets this to be a copy of the given alternative. More... | |
SFSAlt & | operator= (SFSAlt &&) noexcept=default |
Moves the contents of the given alternative into this alternative. More... | |
void | swap (SFSAlt &other) noexcept |
Swaps the contents of this and the given alternative. More... | |
const SFSpace & | alt () const & |
Returns the alternative representation of the original Seifert fibred space. More... | |
SFSpace & | alt () & |
Returns a non-const reference to the alternative representation of the original Seifert fibred space. More... | |
SFSpace && | alt () && |
Returns an rvalue reference to the alternative representation of the original Seifert fibred space. More... | |
const Matrix2 & | conversion () const |
Returns the conversion matrix for this alternative space. More... | |
bool | reflected () const |
Returns whether or not a reflection was used when creating this alternative space. More... | |
bool | operator== (const SFSAlt &other) const |
Determines whether this and the given alternative representation have identical presentations. More... | |
bool | operator!= (const SFSAlt &other) const |
Determines whether this and the given alternative representation do not have identical presentations. More... | |
void | writeTextShort (std::ostream &out) const |
Writes a short text representation of this object to the given output stream. More... | |
void | writeTextLong (std::ostream &out) const |
A default implementation for detailed output. More... | |
std::string | str () const |
Returns a short text representation of this object. More... | |
std::string | utf8 () const |
Returns a short text representation of this object using unicode characters. More... | |
std::string | detail () const |
Returns a detailed text representation of this object. More... | |
Static Public Member Functions | |
static std::vector< SFSAlt > | altSet (const SFSpace &sfs) |
Returns a set of alternatives for the given Seifert fibred space. More... | |
static bool | canNegate (const SFSpace &sfs) |
Determines whether the SFSAlt class constructor will be able to negate all exceptional fibres without reflecting the underlying Seifert fibred space. More... | |
Provides an alternative representation of a single bounded Seifert fibred space.
Such alternatives are made possible by altering the curves made by the fibre and base orbifold on a boundary torus.
This class is designed to help in finding simple representations of graph manifolds (or, indeed, any non-geometric manifolds containing Seifert fibred blocks).
Each alternative comes with its own representation of the original Seifert fibred space, along with instructions for converting fibre/base curves on the boundary tori between the original and alternative spaces.
The alternative representation will generally be as simple as possible (and indeed the hope is that it will be simpler than the original). In particular, each alternative space is guaranteed to have obstruction constant zero. The base orbifold may be changed entirely (for instance, an orientable Seifert fibred space over the Mobius band with no exceptional fibres will be converted to a Seifert fibred space over the disc with two exceptional fibres).
The conversions between boundary curves are described by a conversion matrix M as follows. Consider the first boundary torus. Let f_old and o_old be directed curves on this boundary representing the fibre and base orbifold of the original space, and let f_alt and o_alt be directed curves on this same boundary representing the fibre and base orbifold of the new alternative space. Then
[f_alt] [f_old] [ ] = M * [ ]. [o_alt] [o_old]
Note that this only applies to the first boundary torus! If the Seifert fibred space has more than one boundary, then for the remaining boundaries the unoriented fibre and base curves remain the same. More specifically, the directed fibre remains identical, and the directed curve representing the base orbifold is reversed if and only if a reflection was used in creating the alternative space, as returned by reflected().
See the page on Notation for Seifert fibred spaces for details on some of the terminology used above.
This class implements C++ move semantics and adheres to the C++ Swappable requirement. It is designed to avoid deep copies wherever possible, even when passing or returning objects by value. Note, however, that SFSAlt still requires a non-trivial (but constant sized) amount of data to be copied even in a move operation.
regina::SFSAlt::SFSAlt | ( | const SFSpace & | original | ) |
Creates a "basic" alternative representation for the given Seifert fibred space.
This will:
M/n2
with no exceptional fibres (where M
represents the Mobius band), it will switch the fibre and orbifold curves to give a Seifert fibred space over the disc with two exception fibres.original | the original Seifert fibred space for which we are creating a set of alternative representations. |
regina::SFSAlt::SFSAlt | ( | const SFSAlt & | base, |
bool | reflect, | ||
bool | negate = false |
||
) |
Creates a new alternative representation from the given alternative representation.
The changes will include:
true
, then this will reflect the Seifert fibred space;true
, then this will attempt to replace all fibres (alpha, beta) with (alpha, alpha - beta), without any further reflections (but see below for conditions on when this is possible);Asking for reflection is always valid. However, the option to negate without reflection is possible only if:
For convenience, you can test these conditions using the static function canNegate().
true
, then the underlying Seifert fibred space satisfies the requirements outlined above, or equivalently, canNegate(base.sfs())
is true
.reflect
or negate
is true
, since base should already be in a reduced form with zero obstruction constant.base | the Seifert fibred space representation that will be used as a starting point for this new alternative. |
reflect | true if we should reflect the Seifert fibred space. |
negate | true if we should attempt to negate all exceptional fibres without reflecting, as described above. |
|
default |
Creates a new copy of the given alternative.
|
defaultnoexcept |
Moves the contents of the given alternative into this new alternative.
This is a fast (constant time) operation.
The alternative that was passed will no longer be usable.
|
inline |
Returns a non-const reference to the alternative representation of the original Seifert fibred space.
|
inline |
Returns an rvalue reference to the alternative representation of the original Seifert fibred space.
|
inline |
Returns the alternative representation of the original Seifert fibred space.
Returns a set of alternatives for the given Seifert fibred space.
These will consist of (1) the alternative base created by passing the original Seifert fibred space to the SFSAlt constructor; and (2) all alternatives created by passing base with appropriate reflection and negation arguments to the SFSAlt constructor. The combinations of reflection and negation arguments that are used (and hence the size of the set that is returned) will depend on the properties of the original space.
Note that in general, none of the alternatives will have a representation identical to the original (generally these alternative representations will be simpler if possible).
It is guaranteed that the set that is returned will be non-empty.
sfs | the original Seifert fibred space. |
|
inlinestatic |
Determines whether the SFSAlt class constructor will be able to negate all exceptional fibres without reflecting the underlying Seifert fibred space.
See the constructor SFSAlt(const SFSAlt&, bool, bool) for further details.
sfs | the Seifert fibred space that we are attempting to represent. |
true
if and only if it is possible to set the negation argument to true
in the SFSAlt class constructor.
|
inline |
Returns the conversion matrix for this alternative space.
This matrix describes the fibre and base curves of the alternative space on the first boundary torus in terms of the fibre and base curves of the original space (which was passed to the SFSAlt constructor). See the class notes above for details.
Note that this conversion matrix applies only to the first boundary torus! If there is more than one boundary, the remaining boundary conversions are simpler and depend only on whether a reflection has been used or not. See reflected() or the class notes for details.
|
inherited |
Returns a detailed text representation of this object.
This text may span many lines, and should provide the user with all the information they could want. It should be human-readable, should not contain extremely long lines (which cause problems for users reading the output in a terminal), and should end with a final newline. There are no restrictions on the underlying character set.
|
inline |
Determines whether this and the given alternative representation do not have identical presentations.
To be considered identical, the two alternatives must have equal alternative SFSpace representations, equal conversion matrices, and either both must have used a reflection or both must have not used a reflection. In other words, this is equivalent to testing all of alt(), conversion() and reflected() for equality.
other | the alternative to compare against this. |
true
if and only if this and the given alternative do not have identical presentations, as described above. Sets this to be a copy of the given alternative.
Moves the contents of the given alternative into this alternative.
This is a fast (constant time) operation.
The alternative that was passed will no longer be usable.
|
inline |
Determines whether this and the given alternative representation have identical presentations.
To be considered identical, the two alternatives must have equal alternative SFSpace representations, equal conversion matrices, and either both must have used a reflection or both must have not used a reflection. In other words, this is equivalent to testing all of alt(), conversion() and reflected() for equality.
other | the alternative to compare against this. |
true
if and only if this and the given alternative have identical presentations, as described above.
|
inline |
Returns whether or not a reflection was used when creating this alternative space.
This determines the conversion between boundary curves for all boundary tori after the first.
More specifically, if no reflection was used then the directed fibre and base curves are identical for the original and alternative spaces. If a reflection was used, then the directed fibres are identical but the directed base curves are reversed.
The conversion between curves on the first boundary torus is generally more complex, and is returned as a matrix by the conversion() routine.
You can also test whether a reflection was used by examining whether the conversion matrix has determinant 1 or -1. However, calling reflected() is both simpler and a little faster.
true
if a reflection was used in creating this alternative space, or false
if no reflection was used.
|
inherited |
Returns a short text representation of this object.
This text should be human-readable, should use plain ASCII characters where possible, and should not contain any newlines.
Within these limits, this short text ouptut should be as information-rich as possible, since in most cases this forms the basis for the Python __str__()
and __repr__()
functions.
__str__()
will use precisely this function, and for most classes the Python __repr__()
function will incorporate this into its output.
|
inlinenoexcept |
Swaps the contents of this and the given alternative.
other | the alternative whose contents should be swapped with this. |
|
inherited |
Returns a short text representation of this object using unicode characters.
Like str(), this text should be human-readable, should not contain any newlines, and (within these constraints) should be as information-rich as is reasonable.
Unlike str(), this function may use unicode characters to make the output more pleasant to read. The string that is returned will be encoded in UTF-8.
|
inlineinherited |
A default implementation for detailed output.
This routine simply calls T::writeTextShort() and appends a final newline.
out | the output stream to which to write. |
|
inline |
Writes a short text representation of this object to the given output stream.
out | the output stream to which to write. |