Regina 7.0 Calculation Engine
Todo List
File matrixops.h
Feature (long-term): Add a routine to find the rank of an integer matrix; use this to show the rank of the matching equations.
Class regina::AbelianGroup
Optimise (long-term): Look at using sparse matrices for storage of SNF and the like.
Class regina::Bitmask
Optimise: Insist that sizeof(Piece) is a power of two, and replace expensive division/mod operations with cheap bit operations.
Member regina::detail::FacetPairingBase< dim >::findAllPairings (size_t nSimplices, BoolSet boundary, int nBdryFacets, Action &&action, Args &&... args)

Optimise (long-term): When generating facet pairings, do some checking to eliminate cases in which simplex (k > 0) can be swapped with simplex 0 to produce a smaller representation of the same pairing.

Feature: Allow cancellation of facet pairing generation.

Member regina::detail::TriangulationBase< dim >::barycentricSubdivision ()
Lock the topological properties of the underlying manifold, to avoid recomputing them after the subdivision. However, only do this for valid triangulations (since we can have scenarios where invalid triangulations becoming valid and ideal after subdivision, which may change properties such as Triangulation<4>::knownSimpleLinks).
Member regina::detail::TriangulationBase< dim >::isIsomorphicTo (const Triangulation< dim > &other) const
Optimise: Improve the complexity by choosing a simplex mapping from each component and following gluings to determine the others.
Class regina::DiscSetTet
Bug (long-term): Have some error flag so we can barf politely if the number of normal discs of a given type does not fit into an unsigned long. See how this affects DiscSetTetData also.
Member regina::GluingPermSearcher< 2 >::runSearch (Action &&action, Args &&... args)
Feature: Allow cancellation of permutation set generation.
Member regina::GluingPermSearcher< 3 >::runSearch (Action &&action, Args &&... args)
Feature: Allow cancellation of permutation set generation.
Member regina::GluingPermSearcher< 4 >::runSearch (Action &&action, Args &&... args)
Feature: Allow cancellation of permutation set generation.
Class regina::GraphLoop
Optimise: Speed up homology calculations involving orientable base spaces by adding rank afterwards, instead of adding generators for genus into the presentation matrix.
Class regina::GraphPair
Optimise: Speed up homology calculations involving orientable base spaces by adding rank afterwards, instead of adding generators for genus into the presentation matrix.
Class regina::GraphTriple
Optimise: Speed up homology calculations involving orientable base spaces by adding rank afterwards, instead of adding generators for genus into the presentation matrix.
Member regina::GroupExpression::relabellingsThisToOther (const GroupExpression &other, bool cyclic=false) const
Change this to use less heavyweight types and less deep copying.
Class regina::GroupPresentation
Let's make intelligent simplify a tad more intelligent, and the GUI call a bit more safe. Perhaps parallelize the GUI call, and give users parameters to ensure it won't crash the computer. Also look at the FPGroup package. We should also have a simple way of creating GroupPresentation objects directly from text strings. We would like to have something like GroupPresentation( numGens, "abAAB", "bccd" ) etc., with arbitrary numbers of relators. Maybe std::tuple. Or "variadic templates"?
Member regina::GroupPresentation::prettyRewriting ()
As a final step, make elementary simplifications to aid in seeing standard relators like commutators.
Member regina::GroupPresentation::recogniseGroup (bool moreUtf8=false) const
Feature (long-term): Make this recognition more effective.
Member regina::GroupPresentation::smallCancellation ()
Optimise (long-term): This routine could use some small tweaks - recognition of utility of some score==0 moves, such as commutators, for example.
Class regina::HomGroupPresentation
Add a routine to attempt to verify validity of homomorphism.
Class regina::HomMarkedAbelianGroup

Optimise (long-term): preImageOf in CC and SNF coordinates. This routine would return a generating list of elements in the preimage, thought of as an affine subspace. Or maybe just one element together with the kernel inclusion. IMO smarter to be a list because that way there's a more pleasant way to make it empty. Or we could have a variety of routines among these themes. Store some minimal data for efficient computations of preImage, eventually replacing the internals of inverseHom() with a more flexible set of tools. Also add an isInImage() in various coordinates.

Optimise (long-term): Add map factorization, so that every homomorphism can be split as a composite of a projection followed by an inclusion. Add kernelInclusion(), coKerMap(), etc. Add a liftMap() call, i.e., a procedure to find a lift of a map if one exists.

Optimise (long-term): writeTextShort() have completely different set of descriptors if an endomorphism domain = codomain (not so important at the moment though). New descriptors would include things like automorphism, projection, differential, finite order, etc.

Member regina::Isomorphism< dim >::apply (const Triangulation< dim > &original) const
Lock the topological properties of the underlying manifold, to avoid recomputing them after the isomorphism is applied.
Member regina::Isomorphism< dim >::applyInPlace (Triangulation< dim > &tri) const
Lock the topological properties of the underlying manifold, to avoid recomputing them after the isomorphism is applied.
Class regina::MarkedAbelianGroup
Optimise (long-term): Look at using sparse matrices for storage of SNF and the like.
Member regina::NormalHypersurface::isThinEdgeLink () const
Optimise: Cache results.
Member regina::NormalHypersurface::isVertexLink () const
Optimise: Cache results.
Member regina::NormalHypersurface::isVertexLinking () const
Optimise: Cache results.
Member regina::NormalHypersurface::triangulate () const
Bug: Check for absurdly large numbers of pieces and return null accordingly.
Class regina::NormalSurface

Feature: Calculation of Euler characteristic and orientability for non-compact surfaces.

Feature (long-term): Determine which faces in the solution space a normal surface belongs to.

Member regina::NormalSurface::isCentral () const
Optimise: Cache results.
Member regina::NormalSurface::isCompressingDisc (bool knownConnected=false) const

Optimise: Reimplement this to avoid cutting along surfaces.

Bug: Check for absurdly large numbers of discs and bail accordingly.

Member regina::NormalSurface::isSplitting () const
Optimise: Cache results.
Member regina::NormalSurface::isThinEdgeLink () const
Optimise: Cache results.
Member regina::NormalSurface::isVertexLink () const
Optimise: Cache results.
Member regina::NormalSurface::isVertexLinking () const
Optimise: Cache results.
Class regina::NormalSurfaces

Feature: Allow custom matching equations.

Feature: Allow enumeration with some coordinates explicitly set to zero.

Feature: Allow generating only closed surfaces.

Feature: Generate facets of the solution space representing embedded surfaces.

Member regina::NormalSurfaces::filterForDisjointPairs () const
Deal properly with surfaces that are too large to handle.
Member regina::Primes::primeDecomp (const Integer &n)
Optimise: Add a version that does not return the factors by value.
Member regina::Primes::primePowerDecomp (const Integer &n)

Optimise: Implement this routine natively to avoid the overhead of the temporary primeDecomp() vector.

Optimise: Add a version that does not return the factors by value.

Class regina::SatRegion
Feature: Have this class track the boundary components properly, with annuli grouped and oriented according to the region boundaries (as opposed to individual block boundaries).
Class regina::SFSpace

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

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

Member regina::SigCensus::formCensus (unsigned order, Action &&action, Args &&... args)
Feature: Add support for symbols of differing case.
Class regina::TorusBundle
Feature: Implement the == operator for finding conjugate and inverse matrices.
Class regina::Triangulation< 3 >

Feature: Is the boundary incompressible?

Feature (long-term): Am I obviously a handlebody? (Simplify and see if there is nothing left). Am I obviously not a handlebody? (Compare homology with boundary homology).

Feature (long-term): Is the triangulation Haken?

Feature (long-term): What is the Heegaard genus?

Feature (long-term): Have a subcomplex as a new type. Include routines to crush a subcomplex or to expand a subcomplex to a normal surface.

Member regina::Triangulation< 3 >::idealToFinite ()
Optimise (long-term): Have this routine only use as many tetrahedra as are necessary, leaving finite vertices alone.
Member regina::Triangulation< 3 >::intelligentSimplify ()
Optimise: Include random 2-3 moves to get out of wells.

Copyright © 1999-2021, 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).