Regina 7.3 Calculation Engine
Public Member Functions | Protected Member Functions | Protected Attributes | List of all members
regina::TxIParallelCore Class Reference

A specific six-tetrahedron TxICore triangulation that does not fit neatly into other families. More...

#include <subcomplex/txicore.h>

Inheritance diagram for regina::TxIParallelCore:
regina::TxICore regina::Output< TxICore >

Public Member Functions

 TxIParallelCore ()
 Creates a new copy of this T x I triangulation. More...
 
 TxIParallelCore (const TxIParallelCore &)=default
 Creates a new copy of the given T x I triangulation. More...
 
 TxIParallelCore (TxIParallelCore &&) noexcept=default
 Moves the contents of the given T x I triangulation into this new triangulation. More...
 
TxIParallelCoreoperator= (const TxIParallelCore &src)=default
 Sets this to be a copy of the given T x I triangulation. More...
 
TxIParallelCoreoperator= (TxIParallelCore &&src) noexcept=default
 Moves the contents of the given T x I triangulation into this triangulation. More...
 
void swap (TxIParallelCore &other) noexcept
 Swaps the contents of this and the given T x I triangulation. More...
 
bool operator== (const TxICore &other) const override
 Determines if this and the given T x I triangulation are of the same type and have the same parameters. More...
 
std::ostream & writeName (std::ostream &out) const override
 Writes the name of this specific triangulation of T x I to the given output stream. More...
 
std::ostream & writeTeXName (std::ostream &out) const override
 Writes the name of this specific triangulation of T x I in TeX format to the given output stream. More...
 
const Triangulation< 3 > & core () const
 Returns a full copy of the T x I triangulation that this object describes. More...
 
size_t bdryTet (int whichBdry, int whichTri) const
 Determines which tetrahedron provides the requested boundary triangle. More...
 
Perm< 4 > bdryRoles (int whichBdry, int whichTri) const
 Describes which tetrahedron vertices play which roles in the upper and lower boundary triangles. More...
 
const Matrix2bdryReln (int whichBdry) const
 Returns a 2-by-2 matrix describing the α and β curves on a torus boundary in terms of specific tetrahedron edges. More...
 
const Matrix2parallelReln () const
 Returns a 2-by-2 matrix describing the parallel relationship between the upper and lower boundary curves. More...
 
std::string name () const
 Returns the name of this specific triangulation of T x I as a human-readable string. More...
 
std::string texName () const
 Returns the name of this specific triangulation of T x I in TeX format. More...
 
bool operator!= (const TxICore &other) const
 Determines if this and the given T x I triangulation are of different types and/or have different parameters. 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...
 

Protected Member Functions

void swapBaseData (TxICore &other) noexcept
 Swaps all data that is managed by this base class with the given triangulation. More...
 

Protected Attributes

Triangulation< 3 > core_
 A full copy of the T x I triangulation that is described. More...
 
std::array< std::array< size_t, 2 >, 2 > bdryTet_
 The tetrahedra that provide the upper and lower boundary triangles. More...
 
std::array< std::array< Perm< 4 >, 2 >, 2 > bdryRoles_
 Describes which tetrahedron vertices play which roles in the upper and lower boundary triangles. More...
 
std::array< Matrix2, 2 > bdryReln_
 Expresses the α and β curves for each torus boundary in terms of specific tetrahedron edges and vertices. More...
 
Matrix2 parallelReln_
 Expresses the lower α and β curves in terms of the upper α and β curves. More...
 

Detailed Description

A specific six-tetrahedron TxICore triangulation that does not fit neatly into other families.

This triangulation contains the fewest possible number of tetrahedra (TxICore triangulations are not seen below six tetrahedra). It is referred to as T_6¹ in the paper "Structures of small closed non-orientable 3-manifold triangulations", Benjamin A. Burton, J. Knot Theory Ramifications 16 (2007), 545–574. In Regina it is given the name T_6*, to avoid confusion with the different TxIDiagonalCore triangulation T_6:1.

The triangulations of the upper and lower boundary tori are completely parallel (and in particular, the upper and lower α curves are parallel, as are the upper and lower β curves).

For reference, the central torus of this triangulation is depicted below. The left and right sides of the diagram are identified, as are the top and bottom. The four triangles u0, u1, w0 and w1 provide the boundary triangles of the overall triangulation, with the upper boundary coned out from triangles u0 and u1 and the lower boundary coned out from triangles w0 and w1. In each boundary, u0 or w0 gives the first boundary triangle and u1 or w1 gives the second. The directions of the corresponding α and β curves are are also included.

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.

Constructor & Destructor Documentation

◆ TxIParallelCore() [1/3]

regina::TxIParallelCore::TxIParallelCore ( )

Creates a new copy of this T x I triangulation.

◆ TxIParallelCore() [2/3]

regina::TxIParallelCore::TxIParallelCore ( const TxIParallelCore )
default

Creates a new copy of the given T x I triangulation.

Since there is only one triangulation of this type, the copy constructor will give the same end result as the default constructor (but using a different algorithm).

◆ TxIParallelCore() [3/3]

regina::TxIParallelCore::TxIParallelCore ( TxIParallelCore &&  )
defaultnoexcept

Moves the contents of the given T x I triangulation into this new triangulation.

The triangulation that was passed will no longer be usable.

Member Function Documentation

◆ bdryReln()

const Matrix2 & regina::TxICore::bdryReln ( int  whichBdry) const
inlineinherited

Returns a 2-by-2 matrix describing the α and β curves on a torus boundary in terms of specific tetrahedron edges.

Consider the first triangle of the given boundary. Let t be the tetrahedron returned by bdryTet(whichBdry, 0) and let p be the permutation returned by bdryRoles(whichBdry, 0).

Let edge01 be the directed edge from vertex p[0] to p[1] of tetrahedron t, and let edge02 be the directed edge from vertex p[0] to p[2] of tetrahedron t. Then the matrix returned by this routine describes how the directed edges edge01 and edge02 relate to the α and β curves on the given boundary. Specifically:

    [ α ]                  [ edge01 ]
    [   ]  =  bdryReln() * [        ] .
    [ β ]                  [ edge02 ]

It is guaranteed that this matrix has determinant +1 or -1.

Parameters
whichBdry0 if the upper boundary should be examined, or 1 if the lower boundary should be examined.
Returns
the relationship between the boundary curves and tetrahedron edges.

◆ bdryRoles()

Perm< 4 > regina::TxICore::bdryRoles ( int  whichBdry,
int  whichTri 
) const
inlineinherited

Describes which tetrahedron vertices play which roles in the upper and lower boundary triangles.

Each boundary torus contains two triangles, whose vertices can be numbered 0, 1 and 2 according to the following diagram. This diagram is completely symmetric, in that edges 1-2 are no more special than edges 0-2 or 0-1. The important observations are that edges 1-2 and 2-1 of each triangle are identified, edges 0-2 and 2-0 of each triangle are identified and edges 0-1 and 1-0 of each triangle are identified.

          *--->>--*
          |0  2 / |
  First   |    / 1|  Second
 triangle v   /   v triangle
          |1 /    |
          | / 2  0|
          *--->>--*

This routine returns a permutation that maps these integers 0,1,2 to real tetrahedron vertices. Let t be the tetrahedron returned by bdryTet(whichBdry, whichTri) and let p be the permutation returned by bdryRoles(whichBdry, whichTri). Then vertices p[0], p[1] and p[2] of tetrahedron t correspond to the markings 0, 1 and 2 respectively in the diagram above (and therefore the boundary triangle is face p[3] of the tetrahedron).

The arguments to this routine affect whether we examine the upper or lower boundary and whether we examine the first or second triangle of this boundary

Parameters
whichBdry0 if the upper boundary should be examined, or 1 if the lower boundary should be examined.
whichTri0 if the first boundary triangle should be examined, or 1 if the second boundary triangle should be examined.
Returns
the permutation mapping roles 0, 1 and 2 in the diagram above to real tetrahedron vertex numbers.

◆ bdryTet()

size_t regina::TxICore::bdryTet ( int  whichBdry,
int  whichTri 
) const
inlineinherited

Determines which tetrahedron provides the requested boundary triangle.

Recall that the T x I triangulation has two torus boundaries, each consisting of two boundary triangles. This routine returns the specific tetrahedron that provides the given triangle of the given torus boundary.

What is returned is the index number of the tetrahedron within the triangulation. To access the tetrahedron itself, you may call core().tetrahedron(bdryTet(...)).

Note that the same tetrahedron may provide more than one boundary triangle.

Parameters
whichBdry0 if the upper boundary should be examined, or 1 if the lower boundary should be examined.
whichTri0 if the first boundary triangle should be examined, or 1 if the second boundary triangle should be examined.

◆ core()

const Triangulation< 3 > & regina::TxICore::core ( ) const
inlineinherited

Returns a full copy of the T x I triangulation that this object describes.

Successive calls to this routine will return a reference to the same triangulation (i.e., it is not recreated each time this function is called).

Returns
the full triangulation.

◆ detail()

std::string regina::Output< TxICore , 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.

◆ name()

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

Returns the name of this specific triangulation of T x I as a human-readable string.

Returns
the name of this triangulation.

◆ operator!=()

bool regina::TxICore::operator!= ( const TxICore other) const
inlineinherited

Determines if this and the given T x I triangulation are of different types and/or have different parameters.

If this returns false (i.e., both objects compare as equal), then the triangulations returned by core() should also be combinatorially identical.

Parameters
otherthe T x I triangulation to compare with this.
Returns
true if and only if this and the given triangulation are of different types and/or have different parameters.

◆ operator=() [1/2]

TxIParallelCore & regina::TxIParallelCore::operator= ( const TxIParallelCore src)
default

Sets this to be a copy of the given T x I triangulation.

This will induce a deep copy.

Returns
a reference to this triangulation.

◆ operator=() [2/2]

TxIParallelCore & regina::TxIParallelCore::operator= ( TxIParallelCore &&  src)
defaultnoexcept

Moves the contents of the given T x I triangulation into this triangulation.

The triangulation that was passed will no longer be usable.

Returns
a reference to this triangulation.

◆ operator==()

bool regina::TxIParallelCore::operator== ( const TxICore other) const
inlineoverridevirtual

Determines if this and the given T x I triangulation are of the same type and have the same parameters.

If this returns true, then the triangulations returned by core() should also be combinatorially identical.

Parameters
otherthe T x I triangulation to compare with this.
Returns
true if and only if this and the given triangulation are of the same type and have the same parameters.

Implements regina::TxICore.

◆ parallelReln()

const Matrix2 & regina::TxICore::parallelReln ( ) const
inlineinherited

Returns a 2-by-2 matrix describing the parallel relationship between the upper and lower boundary curves.

Let a_u and b_u be the upper α and β boundary curves. Suppose that the lower α is parallel to w.a_u + x.b_u, and that the lower β is parallel to y.a_u + z.b_u. Then the matrix returned will be

    [ w  x ]
    [      ] .
    [ y  z ]

In other words, if a_l and b_l are the lower α and β curves respectively, we have

    [ a_l ]                      [ a_u ]
    [     ]  =  parallelReln() * [     ] .
    [ b_l ]                      [ b_u ]
Returns
the relationship between the upper and lower boundary curves.

◆ str()

std::string regina::Output< TxICore , 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.

◆ swap()

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

Swaps the contents of this and the given T x I triangulation.

Parameters
otherthe triangulation whose contents should be swapped with this.

◆ swapBaseData()

void regina::TxICore::swapBaseData ( TxICore other)
protectednoexceptinherited

Swaps all data that is managed by this base class with the given triangulation.

Note
This function is marked noexcept, even though it calls Triangulation<3>::swap() which is not noexcept. This is because the only potential cause of exceptions comes from packet event listeners, and the internal triangulation here does not belong to a packet.
Parameters
otherthe triangulation whose data should be swapped with this.

◆ texName()

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

Returns the name of this specific triangulation of T x I in TeX format.

No leading or trailing dollar signs will be included.

Returns
the name of this triangulation in TeX format.

◆ utf8()

std::string regina::Output< TxICore , 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::TxIParallelCore::writeName ( std::ostream &  out) const
inlineoverridevirtual

Writes the name of this specific triangulation of T x I to the given output stream.

The name will be written as a human-readable string.

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::TxICore.

◆ writeTeXName()

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

Writes the name of this specific triangulation of T x I in TeX format to the given output stream.

No leading or trailing dollar signs will be written.

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::TxICore.

◆ writeTextLong()

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

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

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

◆ writeTextShort()

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

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

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

Member Data Documentation

◆ bdryReln_

std::array<Matrix2, 2> regina::TxICore::bdryReln_
protectedinherited

Expresses the α and β curves for each torus boundary in terms of specific tetrahedron edges and vertices.

The elements bdryReln_[0] and bdryReln_[1] refer to the upper and lower boundaries respectively, and each of these matrices must have determinant ±1. See bdryReln() for further details.

◆ bdryRoles_

std::array<std::array<Perm<4>, 2>, 2> regina::TxICore::bdryRoles_
protectedinherited

Describes which tetrahedron vertices play which roles in the upper and lower boundary triangles.

See bdryRoles() for details.

◆ bdryTet_

std::array<std::array<size_t, 2>, 2> regina::TxICore::bdryTet_
protectedinherited

The tetrahedra that provide the upper and lower boundary triangles.

See bdryTet() for details.

◆ core_

Triangulation<3> regina::TxICore::core_
protectedinherited

A full copy of the T x I triangulation that is described.

◆ parallelReln_

Matrix2 regina::TxICore::parallelReln_
protectedinherited

Expresses the lower α and β curves in terms of the upper α and β curves.

See parallelReln() for details.


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).