Regina 7.3 Calculation Engine
Public Types | Public Member Functions | List of all members
regina::SFSpace Class Reference

Represents a general Seifert fibred space, which may be orientable or non-orientable. More...

#include <manifold/sfs.h>

Inheritance diagram for regina::SFSpace:
regina::Manifold regina::Output< Manifold >

Public Types

enum  ClassType {
  o1 = 101 , o2 = 102 , n1 = 201 , n2 = 202 ,
  n3 = 203 , n4 = 204 , bo1 = 301 , bo2 = 302 ,
  bn1 = 401 , bn2 = 402 , bn3 = 403
}
 Lists the six classes o1, o2, n1, n2, n3, n4 for base orbifolds without boundaries, plus five classes bo1, b02, bn1, bn2, bn3 for base orbifolds with boundaries. More...
 

Public Member Functions

 SFSpace ()
 Creates a new Seifert fibred space with base orbifold the 2-sphere and no exceptional fibres. More...
 
 SFSpace (ClassType useClass, unsigned long genus, unsigned long punctures=0, unsigned long puncturesTwisted=0, unsigned long reflectors=0, unsigned long reflectorsTwisted=0)
 Creates a new Seifert fibred space of the given class with the given base orbifold and no exceptional fibres. More...
 
 SFSpace (const SFSpace &)=default
 Creates a new copy of the given Seifert fibred space. More...
 
 SFSpace (SFSpace &&) noexcept=default
 Moves the contents of the given Seifert fibred space into this new Seifert fibred space. More...
 
SFSpaceoperator= (const SFSpace &)=default
 Sets this to be a copy of the given Seifert fibred space. More...
 
SFSpaceoperator= (SFSpace &&) noexcept=default
 Moves the contents of the given Seifert fibred space into this Seifert fibred space. More...
 
void swap (SFSpace &other) noexcept
 Swaps the contents of this and the given Seifert fibred space. More...
 
ClassType baseClass () const
 Returns which of the eleven predefined classes this space belongs to. More...
 
unsigned long baseGenus () const
 Returns the genus of the base orbifold. More...
 
bool baseOrientable () const
 Returns whether or not the base surface is orientable. More...
 
bool fibreReversing () const
 Returns whether or not this space contains any fibre-reversing paths. More...
 
bool fibreNegating () const
 Returns whether or not we can negate an exceptional fibre by passing it around the interior of the base orbifold. More...
 
unsigned long punctures () const
 Returns the total number of punctures in the base orbifold. More...
 
unsigned long punctures (bool twisted) const
 Returns the number of punctures of the given type in the base orbifold. More...
 
unsigned long reflectors () const
 Returns the total number of reflector boundary components of the base orbifold. More...
 
unsigned long reflectors (bool twisted) const
 Returns the number of reflector boundary components of the given type in the base orbifold. More...
 
unsigned long fibreCount () const
 Returns the number of exceptional fibres in this Seifert fibred space. More...
 
SFSFibre fibre (unsigned long which) const
 Returns the requested exceptional fibre. More...
 
long obstruction () const
 Returns the obstruction constant b for this Seifert fibred space. More...
 
void addHandle (bool fibreReversing=false)
 Inserts a new handle into the base orbifold. More...
 
void addCrosscap (bool fibreReversing=false)
 Inserts a new crosscap into the base orbifold. More...
 
void addPuncture (bool twisted=false, unsigned long nPunctures=1)
 Inserts one or more new punctures into the base orbifold. More...
 
void addReflector (bool twisted=false, unsigned long nReflectors=1)
 Adds one or more new reflector boundary components to the base orbifold. More...
 
void insertFibre (const SFSFibre &fibre)
 Adds the given fibre to this Seifert fibred space. More...
 
void insertFibre (long alpha, long beta)
 Adds the given fibre to this Seifert fibred space. More...
 
void reflect ()
 Replaces this space with its mirror image. More...
 
void complementAllFibres ()
 Replaces each exceptional fibre of the form (alpha, beta) with a fibre of the form (alpha, alpha - beta). More...
 
void reduce (bool mayReflect=true)
 Reduces the parameters of this Seifert fibred space to a simpler form if possible, without changing the underlying fibration. More...
 
std::optional< LensSpaceisLensSpace () const
 Determines if this Seifert fibred space is a Lens space. More...
 
bool operator== (const SFSpace &compare) const
 Determines whether this and the given object contain precisely the same presentations of the same Seifert fibred space. More...
 
bool operator!= (const SFSpace &compare) const
 Determines whether this and the given object do not contain precisely the same presentations of the same Seifert fibred space. More...
 
bool operator< (const SFSpace &compare) const
 Determines in a fairly ad-hoc fashion whether this representation of this space is "smaller" than the given representation of the given space. More...
 
Triangulation< 3 > construct () const override
 Returns a triangulation of this 3-manifold, if such a construction has been implemented. More...
 
AbelianGroup homology () const override
 Returns the first homology group of this 3-manifold, if such a routine has been implemented. More...
 
bool isHyperbolic () const override
 Returns whether or not this is a finite-volume hyperbolic manifold. More...
 
std::ostream & writeName (std::ostream &out) const override
 Writes the common name of this 3-manifold as a human-readable string to the given output stream. More...
 
std::ostream & writeTeXName (std::ostream &out) const override
 Writes the common name of this 3-manifold in TeX format to the given output stream. More...
 
std::ostream & writeStructure (std::ostream &out) const override
 Writes details of the structure of this 3-manifold that might not be evident from its common name to the given output stream. More...
 
std::string name () const
 Returns the common name of this 3-manifold as a human-readable string. More...
 
std::string texName () const
 Returns the common name of this 3-manifold in TeX format. More...
 
std::string structure () const
 Returns details of the structure of this 3-manifold that might not be evident from its common name. More...
 
bool operator< (const Manifold &compare) const
 Determines in a fairly ad-hoc fashion whether this representation of this 3-manifold is "smaller" than the given representation of the given 3-manifold. 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
 Writes a detailed text representation of this object to the given output stream. 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...
 

Detailed Description

Represents a general Seifert fibred space, which may be orientable or non-orientable.

Punctures and reflector boundaries in the base orbifold are supported.

A Seifert fibred space whose base orbifold has no punctures or reflector boundaries can be placed into one of the six classes o1, o2, n1, n2, n3 and n4, as detailed on page 88 of "Seifert Manifolds", Peter Orlik, Springer-Verlag, 1972. These classes describe whether this base surface is orientable, as well as how many of its generators give fibre-reversing paths in the 3-manifold.

In the case where the base orbifold has punctures and/or reflector boundaries, we use the five simplified classes bo1, bo2, bn1, bn2 and bn3. These classes are not standard terminology (i.e., they have been created explicitly for Regina), and generally they do not provide enough information to uniquely identify the 3-manifold. They do however identify whether or not the base orbifold is orientable, and whether or not it contains any fibre-reversing paths.

When describing punctures and reflector boundaries, a twisted boundary is one that gives a fibre-reversing path, and an untwisted boundary is one around which the direction of fibres is preserved.

Exceptional fibres are sorted first by alpha (the index) and then by beta. The obstruction constant b is stored separately, though in output routines such as name() and structure() it is merged in with the exceptional fibres. Specifically, it is merged in with the beta of the final exceptional fibre (replacing it with beta + b.alpha), or if there are no exceptional fibres then it is presented as a single (1,b) fibre.

The Manifold routines homology() and construct() are only implemented in some cases. The homology() routine is implemented if and only if the base orbifold has no punctures. The construct() routine is implemented only for lens spaces and Seifert fibred spaces over the 2-sphere without punctures or reflector boundaries.

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 SFSpace still requires a non-trivial (but constant sized) amount of data to be copied even in a move operation.

Warning
In Regina 4.2.1 and earlier, this class was named NSFS. As of Regina 4.3, this class was renamed due to significant changes of behaviour (it became more general, and also now keeps the obstruction parameter b separate). Code that was written to work with the old NSFS class should be looked at closely before being adapted to the new SFSpace class (i.e., it may require more than just substituting class names).
Todo:

Feature (long-term): Implement recognition of more common names.

Feature (long-term): Implement triangulation construction and homology calculation for more Seifert fibred spaces.

Member Enumeration Documentation

◆ ClassType

Lists the six classes o1, o2, n1, n2, n3, n4 for base orbifolds without boundaries, plus five classes bo1, b02, bn1, bn2, bn3 for base orbifolds with boundaries.

Enumerator
o1 

Indicates that the base orbifold is orientable with no punctures or reflector boundaries, and that none of its generators give fibre-reversing paths.

o2 

Indicates that the base orbifold is orientable with no punctures or reflector boundaries, and that all of its generators give fibre-reversing paths.

n1 

Indicates that the base orbifold is non-orientable with no punctures or reflector boundaries, and that none of its generators give fibre-reversing paths.

n2 

Indicates that the base orbifold is non-orientable with no punctures or reflector boundaries, and that all of its generators give fibre-reversing paths.

n3 

Indicates that the base orbifold is non-orientable with no punctures or reflector boundaries, that it has non-orientable genus at least two, and that precisely one of its generators gives a fibre-reversing path.

n4 

Indicates that the base orbifold is non-orientable with no punctures or reflector boundaries, that it has non-orientable genus at least three, and that precisely two of its generators give fibre-reversing paths.

bo1 

Indicates that the base orbifold contains punctures and/or reflector boundaries, that it is orientable, and that it contains no fibre-reversing paths.

bo2 

Indicates that the base orbifold contains punctures and/or reflector boundaries, that it is orientable, and that it contains at least one fibre-reversing path.

bn1 

Indicates that the base orbifold contains punctures and/or reflector boundaries, that it is non-orientable, and that it contains no fibre-reversing paths.

bn2 

Indicates that the base orbifold contains punctures and/or reflector boundaries, that it is non-orientable, and that its fibre-reversing paths correspond precisely to its orientation-reversing paths.

bn3 

Indicates that the base orbifold contains punctures and/or reflector boundaries, that it is non-orientable, that it contains at least one fibre-reversing path, and that its fibre-reversing paths do not correspond precisely to its orientation-reversing paths.

Constructor & Destructor Documentation

◆ SFSpace() [1/4]

regina::SFSpace::SFSpace ( )
inline

Creates a new Seifert fibred space with base orbifold the 2-sphere and no exceptional fibres.

◆ SFSpace() [2/4]

regina::SFSpace::SFSpace ( SFSpace::ClassType  useClass,
unsigned long  genus,
unsigned long  punctures = 0,
unsigned long  puncturesTwisted = 0,
unsigned long  reflectors = 0,
unsigned long  reflectorsTwisted = 0 
)
inline

Creates a new Seifert fibred space of the given class with the given base orbifold and no exceptional fibres.

Precondition
If there are no punctures or reflector boundary components, then useClass is one of the six classes o1, o2, n1, n2, n3 or n4. Likewise, if there are punctures and/or reflector boundary components, then useClass is one of the five classes bo1, bo2, bn1, bn2 or bn3.
If there are any twisted punctures or reflector boundary components, then useClass is either bo2 or bn3.
Parameters
useClassindicates whether the base orbifold is closed and/or orientable, and gives information about fibre-reversing paths in the 3-manifold. See the SFSpace class notes and the ClassType enumeration notes for details.
genusthe genus of the base orbifold (the number of tori or projective planes that it contains). Note that for non-orientable base surfaces, this is the non-orientable genus.
puncturesthe number of untwisted ordinary boundary components of the base orbifold. Here "ordinary" means that the puncture gives rise to a real 3-manifold boundary (i.e., this is not a reflector boundary of the base orbifold).
puncturesTwistedthe number of twisted ordinary boundary components of the base orbifold. Here "ordinary" means that the puncture gives rise to a real 3-manifold boundary (i.e., this is not a reflector boundary of the base orbifold).
reflectorsthe number of untwisted reflector boundary components of the base orbifold. These are in addition to the ordinary boundary components described by punctures.
reflectorsTwistedthe number of twisted reflector boundary components of the base orbifold. These are in addition to the ordinary boundary components described by puncturesTwisted.

◆ SFSpace() [3/4]

regina::SFSpace::SFSpace ( const SFSpace )
default

Creates a new copy of the given Seifert fibred space.

◆ SFSpace() [4/4]

regina::SFSpace::SFSpace ( SFSpace &&  )
defaultnoexcept

Moves the contents of the given Seifert fibred space into this new Seifert fibred space.

This is a fast (constant time) operation.

The space that was passed will no longer be usable.

Member Function Documentation

◆ addCrosscap()

void regina::SFSpace::addCrosscap ( bool  fibreReversing = false)

Inserts a new crosscap into the base orbifold.

This makes the base orbifold non-orientable, and increases its non-orientable genus by one. It is equivalent to removing a disc from the base orbifold and replacing it with a Mobius band.

Note that this operation may alter which of the classes described by ClassType this space belongs to.

The exceptional fibres and the obstruction constant b are not modified by this routine.

Parameters
fibreReversingtrue if the generator of the new crosscap should give a fibre-reversing curve in the overall 3-manifold, or false (the default) if it should preserve the directions of the fibres.

◆ addHandle()

void regina::SFSpace::addHandle ( bool  fibreReversing = false)

Inserts a new handle into the base orbifold.

This increases the orientable genus of the base orbifold by one, or the non-orientable genus by two. It is equivalent to removing a disc from the base orbifold and replacing it with a punctured torus.

Note that this operation may alter which of the classes described by ClassType this space belongs to.

The exceptional fibres and the obstruction constant b are not modified by this routine.

Parameters
fibreReversingtrue if one or both generators of the new handle should give fibre-reversing curves in the overall 3-manifold, or false (the default) if both generators should preserve the directions of the fibres.

◆ addPuncture()

void regina::SFSpace::addPuncture ( bool  twisted = false,
unsigned long  nPunctures = 1 
)

Inserts one or more new punctures into the base orbifold.

The punctures may be twisted or untwisted.

Each puncture insertion is equivalent to removing a disc from the base orbifold. In the untwisted case this results in a new torus boundary for the 3-manifold, and in the twisted case it results in a new Klein bottle boundary.

The exceptional fibres and the obstruction constant b are not modified by this routine.

Parameters
twistedtrue if the new punctures should be twisted (i.e., their boundaries should be fibre-reversing), or false if the new punctures should be untwisted.
nPuncturesthe number of new punctures to insert.

◆ addReflector()

void regina::SFSpace::addReflector ( bool  twisted = false,
unsigned long  nReflectors = 1 
)

Adds one or more new reflector boundary components to the base orbifold.

The new reflector boundaries may be twisted or untwisted.

Each addition of a reflector boundary component is equivalent to removing a disc from the base orbifold and replacing it with an annulus with one reflector boundary.

In the untwisted case, it has the effect of removing a trivially fibred solid torus from the overall 3-manifold and replacing it with an appropriately fibred twisted I-bundle over the torus.

The exceptional fibres and the obstruction constant b are not modified by this routine.

Parameters
twistedtrue if the new reflector boundaries should be twisted (i.e., the boundaries should be fibre-reversing), or false if the new reflector boundaries should be untwisted.
nReflectorsthe number of new reflector boundaries to add.

◆ baseClass()

SFSpace::ClassType regina::SFSpace::baseClass ( ) const
inline

Returns which of the eleven predefined classes this space belongs to.

The specific class indicates whether the base orbifold has punctures and/or reflector boundaries, whether the base orbifold is orientable, and gives information on fibre-reversing paths.

The class can be (indirectly) modified by calling addHandle(), addCrosscap(), addPuncture() or addReflector().

For more information on the eleven predefined classes, see the SFSpace class notes or the ClassType enumeration notes.

Returns
the particular class to which this space belongs.

◆ baseGenus()

unsigned long regina::SFSpace::baseGenus ( ) const
inline

Returns the genus of the base orbifold.

All punctures and reflector boundaries in the base orbifold are ignored (i.e., they are treated as though they had been replaced with ordinary filled discs).

The genus is the number of tori or projective planes that the base surface is formed from. In particular, if the base surface is non-orientable then this is the non-orientable genus.

Returns
the genus of the base orbifold.

◆ baseOrientable()

bool regina::SFSpace::baseOrientable ( ) const
inline

Returns whether or not the base surface is orientable.

Reflector boundary components of the base orbifold are not considered here.

The orientability of the base surface can be (indirectly) modified by calling addCrosscap().

Returns
true if and only if the base surface is orientable.

◆ complementAllFibres()

void regina::SFSpace::complementAllFibres ( )

Replaces each exceptional fibre of the form (alpha, beta) with a fibre of the form (alpha, alpha - beta).

The obstruction constant b is not touched.

◆ construct()

Triangulation< 3 > regina::SFSpace::construct ( ) const
overridevirtual

Returns a triangulation of this 3-manifold, if such a construction has been implemented.

For details of which types of 3-manifolds have implemented this routine, see the class notes for each corresponding subclasses of Manifold.

The default implemention of this routine just throws a NotImplemented exception.

Exceptions
NotImplementedExplicit construction has not yet been implemented for this particular 3-manifold.
FileErrorThe construction needs to be read from file (as opposed to computed on the fly), but the file is inaccessible or its contents cannot be read and parsed correctly. Currently this can only happen for the subclass SnapPeaCensusManifold, which reads its triangulations from the SnapPea census databases that are installed with Regina.
Returns
a triangulation of this 3-manifold, if this construction has been implemented.

Reimplemented from regina::Manifold.

◆ detail()

std::string regina::Output< Manifold , false >::detail ( ) const
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.

Returns
a detailed text representation of this object.

◆ fibre()

SFSFibre regina::SFSpace::fibre ( unsigned long  which) const

Returns the requested exceptional fibre.

Fibres are stored in sorted order by alpha (the index) and then by beta. See the SFSpace class notes for details.

Warning
This routine takes linear time (specifically, linear in the argument which).
Parameters
whichdetermines which fibre to return; this must be between 0 and getFibreCount()-1 inclusive.
Returns
the requested fibre.

◆ fibreCount()

unsigned long regina::SFSpace::fibreCount ( ) const
inline

Returns the number of exceptional fibres in this Seifert fibred space.

Note that the obstruction parameter b is not included in this count. That is, any (1,k) fibres are ignored.

Returns
the number of exceptional fibres.

◆ fibreNegating()

bool regina::SFSpace::fibreNegating ( ) const
inline

Returns whether or not we can negate an exceptional fibre by passing it around the interior of the base orbifold.

That is, this routine determines whether a (p, q) exceptional fibre can become a (p, -q) exceptional fibre simply by sliding it around.

This is possible if either

  • the base orbifold has an orientation-reversing loop that does not reverse fibres in the 3-manifold, or
  • the base orbifold has an orientation-preserving loop that does reverse fibres in the 3-manifold.

Note that reflector boundary components, whilst making the overall 3-manifold non-orientable, have no bearing on the outcome of this routine.

Returns
true if and only an exceptional fibre can be reflected as described above.

◆ fibreReversing()

bool regina::SFSpace::fibreReversing ( ) const
inline

Returns whether or not this space contains any fibre-reversing paths.

Returns
true if and only if a fibre-reversing path exists.

◆ homology()

AbelianGroup regina::SFSpace::homology ( ) const
overridevirtual

Returns the first homology group of this 3-manifold, if such a routine has been implemented.

For details of which types of 3-manifolds have implemented this routine, see the class notes for each corresponding subclasses of Manifold.

The default implemention of this routine just throws a NotImplemented exception.

Exceptions
NotImplementedHomology calculation has not yet been implemented for this particular 3-manifold.
FileErrorThe homology needs to be read from file (as opposed to computed), but the file is inaccessible or its contents cannot be read and parsed correctly. Currently this can only happen for the subclass SnapPeaCensusManifold, which reads its results from the SnapPea census databases that are installed with Regina.
Returns
the first homology group of this 3-manifold, if this functionality has been implemented.

Reimplemented from regina::Manifold.

◆ insertFibre() [1/2]

void regina::SFSpace::insertFibre ( const SFSFibre fibre)
inline

Adds the given fibre to this Seifert fibred space.

This may be an exceptional fibre (alpha > 1) or it may be a regular fibre (alpha = 1). If it is a regular fibre, the obstruction constant b will be adjusted according to the value of beta.

Note that there is no restriction on the range of the second parameter beta. If it is out of the usual range 0 ≤ beta < alpha, it will be pulled back into this range and the excess will be pushed into the obstruction constant b.

Exceptions
InvalidArgumentalpha is zero.
Parameters
fibrethe fibre to insert. The first parameter of this fibre (i.e., its index) must be strictly positive, and the two parameters of this fibre must be coprime.

◆ insertFibre() [2/2]

void regina::SFSpace::insertFibre ( long  alpha,
long  beta 
)

Adds the given fibre to this Seifert fibred space.

This may be an exceptional fibre (alpha > 1) or it may be a regular fibre (alpha = 1). If it is a regular fibre, the obstruction constant b will be adjusted according to the value of beta.

Note that there is no restriction on the range of the second parameter beta. If it is out of the usual range 0 ≤ beta < alpha, it will be pulled back into this range and the excess will be pushed into the obstruction constant b.

Exceptions
InvalidArgumentalpha is zero.
Parameters
alphathe first parameter (i.e., the index) of the fibre to insert; this must be strictly positive.
betathe second parameter of the fibre to insert; this must have no common factors with the first parameter alpha.

◆ isHyperbolic()

bool regina::SFSpace::isHyperbolic ( ) const
inlineoverridevirtual

Returns whether or not this is a finite-volume hyperbolic manifold.

Returns
true if this is a finite-volume hyperbolic manifold, or false if not.

Implements regina::Manifold.

◆ isLensSpace()

std::optional< LensSpace > regina::SFSpace::isLensSpace ( ) const

Determines if this Seifert fibred space is a Lens space.

Returns
a structure containing the details of this Lens space, or no value if this is not a Lens space.

◆ name()

std::string regina::Manifold::name ( ) const
inherited

Returns the common name of this 3-manifold as a human-readable string.

Returns
the common name of this 3-manifold.

◆ obstruction()

long regina::SFSpace::obstruction ( ) const
inline

Returns the obstruction constant b for this Seifert fibred space.

The obstruction constant corresponds to the insertion of an additional (1,b) fibre. It can be modified by calling insertFibre() with a value of alpha = 1. It will also be modified whenever insertFibre() is called with beta out of range (beta < 0 or betaalpha), since each exceptional fibre must be stored in standard form (0 ≤ beta < alpha).

Returns
the obstruction constant b.

◆ operator!=()

bool regina::SFSpace::operator!= ( const SFSpace compare) const
inline

Determines whether this and the given object do not contain precisely the same presentations of the same Seifert fibred space.

This routine does not test for homeomorphism. Instead it compares the exact presentations, including the precise details of the base orbifold and the exact parameters of the exceptional fibres, and determines whether or not these presentations are identical. If you have two different presentations of the same Seifert fibred space, they will be treated as not equal by this routine.

Parameters
comparethe presentation with which this will be compared.
Returns
true if and only if this and the given object do not contain identical presentations of the same Seifert fibred space.

◆ operator<() [1/2]

bool regina::Manifold::operator< ( const Manifold compare) const
inherited

Determines in a fairly ad-hoc fashion whether this representation of this 3-manifold is "smaller" than the given representation of the given 3-manifold.

The ordering imposed on 3-manifolds is purely aesthetic on the part of the author, and is subject to change in future versions of Regina.

The ordering also depends on the particular representation of the 3-manifold that is used. As an example, different representations of the same Seifert fibred space might well be ordered differently.

All that this routine really offers is a well-defined way of ordering 3-manifold representations.

Warning
Currently this routine is only implemented in full for closed 3-manifolds. For most classes of bounded 3-manifolds, this routine simply compares the strings returned by name().
Parameters
comparethe 3-manifold representation with which this will be compared.
Returns
true if and only if this is "smaller" than the given 3-manifold representation.

◆ operator<() [2/2]

bool regina::SFSpace::operator< ( const SFSpace compare) const

Determines in a fairly ad-hoc fashion whether this representation of this space is "smaller" than the given representation of the given space.

The ordering imposed on Seifert fibred space representations is purely aesthetic on the part of the author, and is subject to change in future versions of Regina. It also depends upon the particular representation, so that different representations of the same space may be ordered differently.

All that this routine really offers is a well-defined way of ordering Seifert fibred space representations.

Parameters
comparethe representation with which this will be compared.
Returns
true if and only if this is "smaller" than the given Seifert fibred space representation.

◆ operator=() [1/2]

SFSpace & regina::SFSpace::operator= ( const SFSpace )
default

Sets this to be a copy of the given Seifert fibred space.

◆ operator=() [2/2]

SFSpace & regina::SFSpace::operator= ( SFSpace &&  )
defaultnoexcept

Moves the contents of the given Seifert fibred space into this Seifert fibred space.

This is a fast (constant time) operation.

The space that was passed will no longer be usable.

Returns
a reference to this space.

◆ operator==()

bool regina::SFSpace::operator== ( const SFSpace compare) const

Determines whether this and the given object contain precisely the same presentations of the same Seifert fibred space.

This routine does not test for homeomorphism. Instead it compares the exact presentations, including the precise details of the base orbifold and the exact parameters of the exceptional fibres, and determines whether or not these presentations are identical. If you have two different presentations of the same Seifert fibred space, they will be treated as not equal by this routine.

Parameters
comparethe presentation with which this will be compared.
Returns
true if and only if this and the given object contain identical presentations of the same Seifert fibred space.

◆ punctures() [1/2]

unsigned long regina::SFSpace::punctures ( ) const
inline

Returns the total number of punctures in the base orbifold.

In other words, this routine returns the total number of real torus or Klein bottle boundary components in the overall 3-manifold.

Note that reflector boundaries on the base orbifold are not counted here; only the ordinary boundary components that give rise to real 3-manifold boundaries are included.

Both untwisted and twisted punctures (giving rise to torus and Klein bottle boundaries respectively in the 3-manifold) are counted by this routine.

Returns
the total number of punctures.

◆ punctures() [2/2]

unsigned long regina::SFSpace::punctures ( bool  twisted) const
inline

Returns the number of punctures of the given type in the base orbifold.

In other words, this routine returns the number of real boundary components of the given type in the overall 3-manifold.

This routine either counts only twisted punctures (which give rise to Klein bottle boundaries), or only untwisted punctures (which give rise to torus boundaries).

Either way, reflector boundaries on the base orbifold are not counted here; only ordinary boundary components that give rise to real 3-manifold boundaries are considered.

Parameters
twistedtrue if only twisted punctures should be counted (those that give fibre-reversing paths and Klein bottle boundaries), or false if only untwisted punctures should be counted (those that are fibre-preserving and give torus boundaries).
Returns
the number of punctures of the given type.

◆ reduce()

void regina::SFSpace::reduce ( bool  mayReflect = true)

Reduces the parameters of this Seifert fibred space to a simpler form if possible, without changing the underlying fibration.

In some cases the parameters of the Seifert fibred space may be simplified by taking a mirror image of the entire 3-manifold. The argument mayReflect signifies whether this is allowed.

This routine will not change the curves made by the fibres and the base orbifold on any boundary components (i.e., boundaries caused by punctures in the base orbifold).

Warning
If mayReflect is true then the entire 3-manifold might be replaced with its mirror image, in which case any subsequent modifications (such as inserting additional fibres or altering the base orbifold) may give unexpected results.
Parameters
mayReflecttrue if we are allowed to take a mirror image of the entire 3-manifold, or false if we are not.

◆ reflect()

void regina::SFSpace::reflect ( )
inline

Replaces this space with its mirror image.

Specifically, all exceptional fibres and the obstruction constant b will be negated. Note that the obstruction constant will generally undergo further change as the exceptional fibres are standardised into the usual 0 ≤ beta < alpha form.

This routine will not change the curves made by the fibres and the base orbifold on any boundary components (i.e., boundaries caused by punctures in the base orbifold), with the exception that each base curve will be reflected.

Warning
The space is not reduced after reflecting. It may be that the space can be further simplified (especially in the case of non-orientable manifolds).

◆ reflectors() [1/2]

unsigned long regina::SFSpace::reflectors ( ) const
inline

Returns the total number of reflector boundary components of the base orbifold.

This includes both twisted and untwisted reflector boundaries.

Returns
the total number of reflector boundary components.

◆ reflectors() [2/2]

unsigned long regina::SFSpace::reflectors ( bool  twisted) const
inline

Returns the number of reflector boundary components of the given type in the base orbifold.

This either counts only twisted reflector boundaries, or only untwisted reflector boundaries.

Parameters
twistedtrue if only twisted reflector boundaries should be counted (those that give fibre-reversing paths), or false if only untwisted reflector boundaries should be counted.
Returns
the number of reflector boundaries of the given type.

◆ str()

std::string regina::Output< Manifold , false >::str ( ) const
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.

Python
The Python "stringification" function __str__() will use precisely this function, and for most classes the Python __repr__() function will incorporate this into its output.
Returns
a short text representation of this object.

◆ structure()

std::string regina::Manifold::structure ( ) const
inherited

Returns details of the structure of this 3-manifold that might not be evident from its common name.

For instance, for an orbit space S³/G this routine might return the full Seifert structure.

This routine may return the empty string if no additional details are deemed necessary.

Returns
a string describing additional structural details.

◆ swap()

void regina::SFSpace::swap ( SFSpace other)
inlinenoexcept

Swaps the contents of this and the given Seifert fibred space.

Parameters
otherthe space whose contents should be swapped with this.

◆ texName()

std::string regina::Manifold::texName ( ) const
inherited

Returns the common name of this 3-manifold in TeX format.

No leading or trailing dollar signs will be included.

Warning
The behaviour of this routine has changed as of Regina 4.3; in earlier versions, leading and trailing dollar signs were provided.
Returns
the common name of this 3-manifold in TeX format.

◆ utf8()

std::string regina::Output< Manifold , false >::utf8 ( ) const
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.

Returns
a short text representation of this object.

◆ writeName()

std::ostream & regina::SFSpace::writeName ( std::ostream &  out) const
inlineoverridevirtual

Writes the common name of this 3-manifold as a human-readable string to the given output stream.

Python
Not present. Instead use the variant name() that takes no arguments and returns a string.
Parameters
outthe output stream to which to write.
Returns
a reference to the given output stream.

Implements regina::Manifold.

◆ writeStructure()

std::ostream & regina::SFSpace::writeStructure ( std::ostream &  out) const
inlineoverridevirtual

Writes details of the structure of this 3-manifold that might not be evident from its common name to the given output stream.

For instance, for an orbit space S³/G this routine might write the full Seifert structure.

This routine may write nothing if no additional details are deemed necessary. The default implementation of this routine behaves in this way.

Python
Not present. Instead use the variant structure() that takes no arguments and returns a string.
Parameters
outthe output stream to which to write.
Returns
a reference to the given output stream.

Reimplemented from regina::Manifold.

◆ writeTeXName()

std::ostream & regina::SFSpace::writeTeXName ( std::ostream &  out) const
inlineoverridevirtual

Writes the common name of this 3-manifold in TeX format to the given output stream.

No leading or trailing dollar signs will be included.

Warning
The behaviour of this routine has changed as of Regina 4.3; in earlier versions, leading and trailing dollar signs were provided.
Python
Not present. Instead use the variant texName() that takes no arguments and returns a string.
Parameters
outthe output stream to which to write.
Returns
a reference to the given output stream.

Implements regina::Manifold.

◆ writeTextLong()

void regina::Manifold::writeTextLong ( std::ostream &  out) const
inlineinherited

Writes a detailed text representation of this object to the given output stream.

Subclasses must not override this routine. They should override writeName() and writeStructure() instead.

Python
Not present. Use detail() instead.
Parameters
outthe output stream to which to write.

◆ writeTextShort()

void regina::Manifold::writeTextShort ( std::ostream &  out) const
inlineinherited

Writes a short text representation of this object to the given output stream.

Subclasses must not override this routine. They should override writeName() instead.

Python
Not present. Use str() instead.
Parameters
outthe output stream to which to write.

The documentation for this class was generated from the following file:

Copyright © 1999-2023, The Regina development team
This software is released under the GNU General Public License, with some additional permissions; see the source code for details.
For further information, or to submit a bug or other problem, please contact Ben Burton (bab@maths.uq.edu.au).