Regina Calculation Engine
Classes | Public Member Functions | List of all members
regina::NHomologicalData Class Reference

Data type that deals with all the detailed homological information in a manifold. More...

#include <triangulation/nhomologicaldata.h>

Inheritance diagram for regina::NHomologicalData:
regina::ShareableObject regina::boost::noncopyable

Public Member Functions

 NHomologicalData (const NTriangulation &input)
 Takes as input a triangulation. More...
 
 NHomologicalData (const NHomologicalData &h)
 Copy constructor. More...
 
virtual ~NHomologicalData ()
 Destructor. More...
 
virtual void writeTextShort (std::ostream &out) const
 Short text representation as required by SharableObject. More...
 
const NMarkedAbelianGroupgetHomology (unsigned q)
 This routine gives access to the manifold's homology computed with the regular CW-decomposition. More...
 
const NMarkedAbelianGroupgetBdryHomology (unsigned q)
 This routine gives access to the homology of the boundary of the manifold, computed with the regular CW-decomposition. More...
 
const NHomMarkedAbelianGroupgetBdryHomologyMap (unsigned q)
 This routine gives access to the homomorphism from the homology of the boundary to the homology of the manifold. More...
 
const NMarkedAbelianGroupgetDualHomology (unsigned q)
 This routine gives access to the manifold's homology computed with the dual CW-decomposition. More...
 
const NHomMarkedAbelianGroupgetH1CellAp ()
 Returns the isomorphism from getDualHomology(1) to getHomology(1) given by a cellular approximation to the identity map on the manifold. More...
 
unsigned long getNumStandardCells (unsigned dimension)
 Returns the number of cells of the given dimension in the standard genuine CW-decomposition of the manifold. More...
 
unsigned long getNumDualCells (unsigned dimension)
 Returns the number of cells of the given dimension in the dual CW-decomposition of the manifold. More...
 
unsigned long getNumBdryCells (unsigned dimension)
 Returns the number of cells of the given dimension in the standard CW-decomposition of the boundary of the manifold. More...
 
long getEulerChar ()
 The proper Euler characteristic of the manifold, computed from the dual CW-decomposition. More...
 
const std::vector< std::pair
< NLargeInteger, std::vector
< unsigned long > > > & 
getTorsionRankVector ()
 Returns the torsion form rank vector. More...
 
const std::string & getTorsionRankVectorString ()
 Same as getTorsionRankVector() but returns as a human-readable string. More...
 
const std::vector
< NLargeInteger > & 
getTorsionSigmaVector ()
 Returns the 2-torsion sigma vector. More...
 
const std::string & getTorsionSigmaVectorString ()
 Same as getTorsionSigmaVector() but returns as a human-readable string. More...
 
const std::vector< std::pair
< NLargeInteger, std::vector
< int > > > & 
getTorsionLegendreSymbolVector ()
 Returns the odd p-torsion Legendre symbol vector. More...
 
const std::string & getTorsionLegendreSymbolVectorString ()
 Same as getTorsionLegendreSymbolVector() but returns as a human-readable string. More...
 
bool formIsHyperbolic ()
 Returns true iff torsion linking form is `hyperbolic' in the linking-form sense of the word. More...
 
bool formIsSplit ()
 Returns true iff the torsion linking form is split. More...
 
bool formSatKK ()
 Returns true iff the torsion linking form satisfies the Kawauchi-Kojima 2-torsion condition. More...
 
const std::string & getEmbeddabilityComment ()
 Returns a comment on whether the manifold might embed in a homology 3-sphere or 4-sphere. More...
 
Input and Output
virtual void writeTextLong (std::ostream &out) const
 Writes this object in long text format to the given output stream. More...
 
std::string str () const
 Returns the output from writeTextShort() as a string. More...
 
std::string toString () const
 A deprecated alias for str(), which returns the output from writeTextShort() as a string. More...
 
std::string detail () const
 Returns the output from writeTextLong() as a string. More...
 
std::string toStringLong () const
 A deprecated alias for detail(), which returns the output from writeTextLong() as a string. More...
 

Detailed Description

Data type that deals with all the detailed homological information in a manifold.

This information includes:

This class takes a "least effort" approach to all computations. It only computes what is neccessary for your requests. It also keeps a record of all previous computations you've made. If a computation can be sped up by not recomputing some data, it takes that short-cut.

All these algorithms use two transverse CW decompositions of the manifold. They correspond to the (possibly ideal) triangulation native to Regina, and the dual polyhedral (CW) decomposition which appears in Seifert and Threlfall's textbook.

In the following lists we describe the canonical ordering of both the cells and the dual cells of the given triangulation.

First we list the cell orderings for the standard CW decomposition, which most closely resembles the ideal triangulation.

Next we list the cell orderings for the dual CW decomposition: if the standard CW decomposition came from a morse function f, this would be the one for -f.

Deprecated:
This class will be removed in Regina 5.0. A new and more flexible class called NCellularData will take its place.
Author
Ryan Budney

Constructor & Destructor Documentation

regina::NHomologicalData::NHomologicalData ( const NTriangulation input)
inline

Takes as input a triangulation.

This class takes its own copy of the input triangulation. This means that the input triangulation can change or even be destroyed, and this homological data will happily continue to work with the original triangulation as it was first passed to the constructor.

Parameters
inputthe triangulation to use.
regina::NHomologicalData::NHomologicalData ( const NHomologicalData h)
inline

Copy constructor.

Parameters
hthe homological data to clone.
regina::NHomologicalData::~NHomologicalData ( )
inlinevirtual

Destructor.

Member Function Documentation

std::string regina::ShareableObject::detail ( ) const
inherited

Returns the output from writeTextLong() as a string.

Returns
a long text representation of this object.
bool regina::NHomologicalData::formIsHyperbolic ( )

Returns true iff torsion linking form is `hyperbolic' in the linking-form sense of the word.

To be a little more precise, Poincare-duality in a compact orientable boundaryless manifold gives an isomorphism between the torsion subgroup of H_1(M) denoted tH_1(M) and Hom(tH_1(M),Q/Z), where Q is the rationals and Z the integers. The associated bilinear form (with values in Q/Z) is said to be `hyperbolic' if tH_1(M) splits as a direct sum A+B such that Poincare duality sends A to Hom(B,Q/Z) and B to Hom(A,Q/Z).

Precondition
The triangulation is of a connected orientable 3-manifold.
Returns
true iff the torsion linking form is hyperbolic.
bool regina::NHomologicalData::formIsSplit ( )
inline

Returns true iff the torsion linking form is split.

Precondition
The triangulation is of a connected orientable 3-manifold.
Returns
true iff the linking form is split.
bool regina::NHomologicalData::formSatKK ( )
inline

Returns true iff the torsion linking form satisfies the Kawauchi-Kojima 2-torsion condition.

This condition states that on all elements x of order 2^k, 2^{k-1}form(x,x) = 0.

This is a neccessary condition for an orientable 3-manifold perhaps with boundary to embed in a homology 4-sphere.

Precondition
The triangulation is of a connected orientable 3-manifold.
Returns
true iff the form satisfies the 2-torsion condition of Kawauchi-Kojima.
const NMarkedAbelianGroup& regina::NHomologicalData::getBdryHomology ( unsigned  q)

This routine gives access to the homology of the boundary of the manifold, computed with the regular CW-decomposition.

Parameters
qthe dimension of the homology group: can be 0, 1 or 2.
Returns
the q-th boundary homology group, in standard cellular homology coordinates
const NHomMarkedAbelianGroup& regina::NHomologicalData::getBdryHomologyMap ( unsigned  q)

This routine gives access to the homomorphism from the homology of the boundary to the homology of the manifold.

Parameters
qthe dimension of the map: can be 0, 1 or 2.
Returns
the map from H_q of the boundary to H_q of the manifold, computed in standard coordinates.
const NMarkedAbelianGroup& regina::NHomologicalData::getDualHomology ( unsigned  q)

This routine gives access to the manifold's homology computed with the dual CW-decomposition.

This routine is typically faster than getHomology() since the dual CW-decomposition generally has far fewer cells.

Note that the groups returned by getHomology() and getDualHomology() are isomorphic, though they are generally described by different presentations.

Parameters
qthe dimension of the homology group: can be 0, 1, 2 or 3.
Returns
the q-th homology group, computed in the dual CW-decomposition.
const std::string & regina::NHomologicalData::getEmbeddabilityComment ( )
inline

Returns a comment on whether the manifold might embed in a homology 3-sphere or 4-sphere.

Basically, this routine runs through all the Kawauchi-Kojima conditions, plus a few other `elementary' conditions.

Each comment will be formatted as one or more English sentences (i.e., with capitalisation and punctuation). The comments themselves are subject to change between releases of Regina, since later releases may have more detailed tests at their disposal.

This routine is available for both orientable and non-orientable triangulations. In the non-orientable case it may return additional information regarding the orientable double cover.

Precondition
The triangulation is of a connected 3-manifold.
Returns
a string giving a one-line description of what is known about where this manifold embeds, based solely on the manifold's homological data.
long int regina::NHomologicalData::getEulerChar ( )
inline

The proper Euler characteristic of the manifold, computed from the dual CW-decomposition.

This routine calculates the Euler characteristic of the corresponding compact triangulated 3-manifold, with each ideal vertex treated as a surface boundary component.

This routine returns the same value as NTriangulation::getEulerCharManifold(), though it computes it in a different way.

On the other hand, this routine differs from NTriangulation::getEulerCharTri(), which handles ideal triangulations in a non-standard way (treating each ideal vertex as just a single vertex).

Returns
the Euler characteristic of the corresponding compact triangulated 3-manifold.
const NHomMarkedAbelianGroup& regina::NHomologicalData::getH1CellAp ( )

Returns the isomorphism from getDualHomology(1) to getHomology(1) given by a cellular approximation to the identity map on the manifold.

Returns
The isomorphism from getDualHomology(1) to getHomology(1) computed via a cellular approximation of the identity map from the first 1-skeleton to the second.
const NMarkedAbelianGroup& regina::NHomologicalData::getHomology ( unsigned  q)

This routine gives access to the manifold's homology computed with the regular CW-decomposition.

This routine is typically slower than getDualHomology(), since getDualHomology() uses the dual CW-decomposition which typically has an order of magnitude fewer cells.

Note that the groups returned by getHomology() and getDualHomology() are isomorphic, though they are generally described by different presentations.

Parameters
qthe dimension of the homology group: can be 0, 1, 2 or 3.
Returns
the q-th homology group, computed in the standard CW-decomposition.
unsigned long regina::NHomologicalData::getNumBdryCells ( unsigned  dimension)
inline

Returns the number of cells of the given dimension in the standard CW-decomposition of the boundary of the manifold.

This is a subcomplex of the complex used in getNumStandardCells().

Parameters
dimensionthe dimension of the cells in question; this must be 0, 1 or 2.
Returns
the number of cells of the given dimension in the standard CW-decomposition of the boundary.
unsigned long regina::NHomologicalData::getNumDualCells ( unsigned  dimension)
inline

Returns the number of cells of the given dimension in the dual CW-decomposition of the manifold.

This is typically much smaller than getNumStandardCells().

Parameters
dimensionthe dimension of the cells in question; this must be 0, 1, 2 or 3.
Returns
the number of cells of the given dimension in the dual CW-decomposition to the triangulation.
unsigned long regina::NHomologicalData::getNumStandardCells ( unsigned  dimension)
inline

Returns the number of cells of the given dimension in the standard genuine CW-decomposition of the manifold.

In the case that the triangulation is a proper triangulation of a manifold (or delta-complex decomposition) it simply returns the same information as in the NTriangulation vertex, edge, face and tetrahedron lists.

In the case that this is an ideal triangulation, this algorithm returns the details of the corresponding compact manifold with boundary a union of closed surfaces.

Parameters
dimensionthe dimension of the cells in question; this must be 0, 1, 2 or 3.
Returns
the number of cells of the given dimension in the standard CW-decomposition of the closed manifold.
const std::vector< std::pair< NLargeInteger, std::vector< int > > > & regina::NHomologicalData::getTorsionLegendreSymbolVector ( )
inline

Returns the odd p-torsion Legendre symbol vector.

This is the last of the three Kawauchi-Kojima invariants.

For details, see "Algebraic classification of linking pairings on 3-manifolds", Akio Kawauchi and Sadayoshi Kojima, Math. Ann. 253 (1980), 29–42.

Precondition
The triangulation is of a connected orientable 3-manifold.
Python:
Not available, though the string routine getTorsionLegendreSymbolVectorString() can still be used.
Returns
the Legendre symbol vector associated to the torsion linking form.
const std::string & regina::NHomologicalData::getTorsionLegendreSymbolVectorString ( )
inline

Same as getTorsionLegendreSymbolVector() but returns as a human-readable string.

Precondition
The triangulation is of a connected orientable 3-manifold.
Returns
the Legendre symbol vector in human-readable form.
const std::vector< std::pair< NLargeInteger, std::vector< unsigned long > > > & regina::NHomologicalData::getTorsionRankVector ( )
inline

Returns the torsion form rank vector.

This is the first of the three Kawauchi-Kojima complete invariants of the torsion linking form.

This vector describes the rank of the torsion subgroup of H1, given in prime power form. It is a vector of pairs (p, x), where p is a prime and x is its exponent.

For details, see "Algebraic classification of linking pairings on 3-manifolds", Akio Kawauchi and Sadayoshi Kojima, Math. Ann. 253 (1980), 29–42.

Precondition
The triangulation is of a connected orientable 3-manifold.
Python:
Not available, though the string routine getTorsionRankVectorString() can still be used.
Returns
the torsion form rank vector.
const std::string & regina::NHomologicalData::getTorsionRankVectorString ( )
inline

Same as getTorsionRankVector() but returns as a human-readable string.

Precondition
The triangulation is of a connected orientable 3-manifold.
Returns
human-readable prime power factorization of the order of the torsion subgroup of H1.
const std::vector< NLargeInteger > & regina::NHomologicalData::getTorsionSigmaVector ( )
inline

Returns the 2-torsion sigma vector.

This is the second of the three Kawauchi-Kojima invariants. It is orientation-sensitive.

For details, see "Algebraic classification of linking pairings on 3-manifolds", Akio Kawauchi and Sadayoshi Kojima, Math. Ann. 253 (1980), 29–42.

Precondition
The triangulation is of a connected orientable 3-manifold.
Python:
Not available, though the string routine getTorsionSigmaVectorString() can still be used.
Returns
the Kawauchi-Kojima sigma-vector.
const std::string & regina::NHomologicalData::getTorsionSigmaVectorString ( )
inline

Same as getTorsionSigmaVector() but returns as a human-readable string.

This is an orientation-sensitive invariant.

Precondition
The triangulation is of a connected orientable 3-manifold.
Returns
the Kawauchi-Kojima sigma-vector in human readable form.
std::string regina::ShareableObject::str ( ) const
inherited

Returns the output from writeTextShort() as a string.

Python:
This implements the __str__() function.
Returns
a short text representation of this object.
std::string regina::ShareableObject::toString ( ) const
inlineinherited

A deprecated alias for str(), which returns the output from writeTextShort() as a string.

Deprecated:
This routine has (at long last) been deprecated; use the simpler-to-type str() instead.
Returns
a short text representation of this object.
std::string regina::ShareableObject::toStringLong ( ) const
inlineinherited

A deprecated alias for detail(), which returns the output from writeTextLong() as a string.

Deprecated:
This routine has (at long last) been deprecated; use the simpler-to-type detail() instead.
Returns
a long text representation of this object.
void regina::ShareableObject::writeTextLong ( std::ostream &  out) const
inlinevirtualinherited

Writes this object in long text format to the given output stream.

The output should provide the user with all the information they could want. The output should be human-readable, should not contain extremely long lines (so users can read the output in a terminal), and should end with a final newline.

The default implementation of this routine merely calls writeTextShort() and adds a newline.

Python:
The parameter out does not exist; standard output will be used.
Parameters
outthe output stream to which to write.

Reimplemented in regina::NSnapPeaTriangulation, regina::NGroupPresentation, regina::NHomMarkedAbelianGroup, regina::NNormalSurfaceList, regina::NTetrahedron, regina::NSatRegion, regina::NVertex, regina::NEdge, regina::Dim2Triangle, regina::NTriangle, regina::NLayeredSolidTorus, regina::NHomGroupPresentation, regina::NGenericIsomorphism< dim >, regina::NGenericIsomorphism< 2 >, regina::NGenericIsomorphism< 3 >, regina::NTriangulation, regina::NComponent, regina::NTxICore, regina::NTriSolidTorus, regina::NAngleStructureList, regina::Dim2Edge, regina::NBoundaryComponent, regina::NLayeredChain, regina::Dim2Vertex, regina::Dim2Component, regina::NScript, regina::NAugTriSolidTorus, regina::NSpiralSolidTorus, regina::NSurfaceFilterProperties, regina::NLayeredTorusBundle, regina::NManifold, regina::NPlugTriSolidTorus, regina::NMatrixInt, regina::NBlockedSFSTriple, regina::NPluggedTorusBundle, regina::Dim2Triangulation, regina::NSurfaceSubset, regina::NLayeredLensSpace, regina::NLayeredLoop, regina::NFileInfo, regina::NBlockedSFSLoop, regina::NSnappedBall, regina::NBlockedSFSPair, regina::Dim2BoundaryComponent, regina::NTrivialTri, regina::NL31Pillow, regina::NLayeredChainPair, regina::NText, regina::NSurfaceFilterCombination, and regina::NBlockedSFS.

virtual void regina::NHomologicalData::writeTextShort ( std::ostream &  out) const
virtual

Short text representation as required by SharableObject.

Note this only writes pre-computed data. Thus if you have not yet asked NHomologicalData to compute anything about this triangulation, writeTextShort may be empty.

Parameters
outthe stream to write to.

Implements regina::ShareableObject.


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

Copyright © 1999-2014, 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@debian.org).