TRICENSUS(1)
okay bestie, welcome to tricensus(1) β straight outta The Regina Handbook. this is part 1, and we are keeping every single deet. π
β¨ NAME β¨
tricensus β form a census of triangulations π¦
π SYNOPSIS π
tricensus [ -t, --tetrahedra=tetrahedra ] [ -2, --dim2 | -4, --dim4 ] [
-b, --boundary | -i, --internal | -B, --bdryfaces=triangles ] [ -o,
--orientable | -n, --nonorientable ] [ -f, --finite | -d, --ideal ] [
-m, --minimal | -M, --minprime | -N, --minprimep2 | -h, --minhyp ] [
--allowinvalid ] [ -s, --sigs | -S, --canonical | -e, --encodings | -c,
--subcontainers ] [ -p, --genpairs | -P, --usepairs ] [
--threads=num_threads ] output-file
tricensus { -v, --version | -?, --help }
π DESCRIPTION π
okay so tricensus forms a census of all 2-, 3- or 4-manifold triangulations that satisfy some set of conditions. β¨
you tell it what you want using various command-line arguments. the only condition that you must provide is the number of top-dimensional simplices (e.g., the number of tetrahedra for 3-manifolds), but there are many other options available. no cap.
the default behaviour is to enumerate 3-manifold triangulations. if you wish to enumerate 2-manifold or 4-manifold triangulations instead, you must pass --dim2 or --dim4 respectively. periodt.
each triangulation will be output precisely once up to combinatorial isomorphism. invalid triangulations (for 3-manifolds, this means triangulations with edges identified to themselves in reverse, or vertices whose links have boundary but are not discs) will not be output at all. π
as the census progresses, the state of progress will be written (slowly) to standard output. once the census is complete, the full census will be saved to the given output file. π«Ά
you can use the options --genpairs and --usepairs to split a census into smaller pieces. iykyk.
Caution: a census with even a small number of top-dimensional simplices can take an incredibly long time to run, and can chew up massive amounts of memory. it is recommended that you try very small censuses to begin with (such as 3 or 4 simplices), and work upwards to establish the limits of your machine. π for very large census runs, it is highly recommended that you use either the--sigsor--encodingsoption, which will keep the output file small and significantly reduce the memory footprint. π₯
π OPTIONS π
-t,--tetrahedra=tetrahedraβ specifies the number of top-dimensional simplices used to build the triangulations. for 2-manifolds, 3-manifolds and 4-manifolds, this specifies the number of triangles, tetrahedra or pentachora respectively. β¨-2,--dim2β build a census of 2-manifold triangulations, not 3-manifold triangulations. this is incompatible with several options; for other options it simply translates the relevant constraint into two dimensions. see each individual option for details on how it interacts with--dim2. π¦-4,--dim4β build a census of 4-manifold triangulations, not 3-manifold triangulations. this is incompatible with several options; for other options it simply translates the relevant constraint into four dimensions. see each individual option for details on how it interacts with--dim4. π-b,--boundaryβ only produce triangulations with at least one boundary triangle. for 2-manifolds or 4-manifolds, this option ensures at least one boundary edge or boundary tetrahedron respectively. π-i,--internalβ only produce triangulations with all triangles internal (i.e., with no boundary triangles). for 2-manifolds or 4-manifolds, this option ensures that all edges or tetrahedra respectively are internal. π-B,--bdryfaces=trianglesβ only produce triangulations with the precise number of boundary triangles specified. for 2-manifolds or 4-manifolds, this specifies the number of boundary edges or boundary tetrahedra respectively. πΈ-o,--orientableβ only produce orientable triangulations. π-n,--nonorientableβ only produce non-orientable triangulations. π-f,--finiteβ only produce finite triangulations (triangulations with no ideal vertices). this option cannot be used with--dim2. β-d,--idealβ only produce triangulations with at least one ideal vertex. there might or might not be internal vertices (whose links are spheres) as well. this option cannot be used with--dim2. π-m,--minimalβ do not include triangulations that are obviously non-minimal. this option uses a series of fast tests that try to eliminate non-minimal triangulations, but that are not always conclusive. if Regina cannot quickly tell whether a triangulation is non-minimal, it will place the triangulation in the census regardless. this option cannot be used with--dim4. π₯-M,--minprimeβ do not include triangulations that are obviously non-minimal, non-prime and/or disc-reducible. this can significantly speed up the census and vastly reduce the final number of triangulations produced. as above, this option uses a series of fast tests that are not always conclusive. if Regina cannot quickly tell whether a triangulation is non-minimal, non-prime or disc-reducible, it will place the triangulation in the census regardless. this option cannot be used with--dim2or--dim4. π-N,--minprimep2β do not include triangulations that are obviously non-minimal, non-prime, P2-reducible and/or disc-reducible. this can significantly speed up the census and vastly reduce the final number of triangulations produced, even more so than--minprime. as above, this option uses a series of fast tests that are not always conclusive. if Regina cannot quickly tell whether a triangulation is non-minimal, non-prime, P2-reducible or disc-reducible, it will place the triangulation in the census regardless. this option cannot be used with--dim2or--dim4. β¨-h,--minhypβ do not include triangulations that are obviously not minimal ideal triangulations of cusped finite-volume hyperbolic 3-manifolds. this can significantly speed up the census and vastly reduce the final number of triangulations produced. as above, this option uses a series of fast tests that are not always conclusive. if Regina cannot quickly tell whether a triangulation is a minimal ideal triangulation of a cusped finite-volume hyperbolic 3-manifold, it will place the triangulation in the census regardless. this option is designed for use with ideal triangulations only (so, for instance, combining it with--finiteor--boundarywill produce an error message). this option also cannot be used with--dim2or--dim4. π«Ά--allowinvalidβ normally,tricensuswill test each triangulation that is constructed for validity before including it in the final output. if you pass--allowinvalidhowever, then these validity tests will not be performed. as a result, the output may include some invalid triangulations. however, it will not include all invalid triangulations of the given size, since some invalid constructions are pruned at earlier levels of the search tree by the census algorithm (as opposed to being detected by the validity test when each full triangulation has been constructed). for example, edges that are identified with themselves in reverse are detected and pruned earlier in this way, and so will never appear in the census output, even with the--allowinvalidoption. the one guarantee that you do get from this option is that the census will include all invalid triangulations that could appear as a subcomplex of some valid triangulation. for example, if a 3-dimensional triangulation is invalid only because it has vertices whose links are spheres with multiple punctures, then it will be included in the output. this option cannot be used with finite/ideal options or minimality options. π-s,--sigsβ instead of writing a full Regina data file, just output a list of isomorphism signatures. the output file will be a plain text file. each line will be a short string of letters, digits and/or punctuation that uniquely encodes a triangulation up to combinatorial isomorphism. you can import this text file from within Regina by selectingFile->Import->Isomorphism Signature Listfrom the menu. this option is highly recommended for large census enumerations. first, the output file will be considerably smaller. more importantly, the memory footprint oftricensuswill also be much smaller: triangulations can be written to the output file and forgotten immediately, instead of being kept in memory to construct a final Regina data file. π-S,--canonicalβ a variant of--sigsthat outputs a list of isomorphism signatures along with matching isomorphisms. the output file will be a plain text file. each line will contain two short strings, separated by a single space. the first string will be the same isomorphism signature that is output by--sigs. the second string encodes an isomorphism F with the property that, if we reconstruct a triangulation from the isomorphism signature and apply the isomorphism F, then the resulting triangulation will have a canonical facet pairing. here canonical has the same meaning as described below under the--usepairsoption: a facet pairing is in canonical form if it is a minimal representative of its isomorphism class. the isomorphisms themselves will be encoded using tight encodings, which (like isomorphisms signatures) are short strings of letters, digits and/or punctuation. currently you will need to use either C++ or Python to decode these; for example, in dimension 3 you would callIsomorphism<3>::tightDecoding(). if you do not need these isomorphisms, then you should use the simpler (and slightly faster) option--sigsinstead. π-e,--encodingsβ instead of writing a full Regina data file, just output a list of tight encodings. π
Okay so like, the output file is a plain text file, and every line is a short string of letters, digits and/or punctuation that uniquely encodes a labelled triangulation as a tight encoding. π
Tight encodings are not the same vibe as isomorphism signatures (the ones you get from --sigs), and here's exactly how they differ:
- The main character reason to use tight encodings is that they preserve the labelling of simplices and their vertices (unlike isomorphism signatures, which only encode a triangulation up to combinatorial isomorphism). π
- Generally speaking, tight encodings use slightly more characters and are slightly faster to compute than isomorphism signatures.
- Tight encodings are more difficult to work with. They use a wider variety of punctuation symbols (which makes them inappropriate for filenames, and awkward to use as hard-coded strings in source code). Moreover, at present you need to use either C++ or Python to reconstruct triangulations from them; for example, in dimension 3 you would call
Triangulation<3>::tightDecoding().
If you're not sure whether to use isomorphism signatures or tight encodings, bestie, the recommendation is: choose isomorphism signatures (--sigs). π«Ά
Like --sigs, this option performs much better in large census enumerations than saving a full Regina data file: the output file will be considerably smaller, and the memory footprint of tricensus will also be much smaller. See the --sigs option for further details.
You can also use --encodings with --genpairs, in which case the facet pairings will be written using tight encodings instead of human-readable text representations. Tight encodings of facet pairings cannot be used as input with --usepairs, and again you will need to use C++ or Python to reconstruct facet pairings from them.
-c,--subcontainersβ for each facet pairing, a new container will be created, and resultant triangulations will be placed into these containers. These containers will be created even if the facet pairing results in no triangulations. πΈ
See --genpairs below for further information on facet pairings.
Heads up bestie: this option cannot be used with--sigs,--canonicalor--encodings. π
-p,--genpairsβ only generate facet pairings, not triangulations. A facet pairing stores which facets of top-dimension simplices are glued to which others, but it does not store the precise rotations and/or reflections that are used for each gluing. For 3-manifolds a facet pairing represents a pairing of tetrahedron faces, for 2-manifolds it represents a pairing of triangle edges, and for 4-manifolds it represents a pairing of pentachoron facets. π§
The outermost layer of the census code involves pairing off the facets of individual top-dimensional simplices without determining the corresponding gluing permutations. For each such facet pairing that is produced, Regina will try many different sets of gluing permutations and generated the corresponding triangulations.
Facet pairing generation consumes a very small fraction of the total census runtime, and effectively divides the census into multiple pieces. This option allows you to quickly generate a complete list of possible facet pairings, so that you can feed subsets of this list to different machines to work on simultaneously. π₯
The list of all facet pairings will be written to the given output file in a plain text format (though you may omit the output file from the command line, in which case the facet pairings will be written to standard output). By default, the output format will be a space-separated numerical format, suitable for use with --usepairs (see below). However, if you pass --encodings then the output format will use tight encodings (which are shorter, contain no spaces, and are much harder for humans to read). See --encodings for further details on tight encodings.
If you are coordinating your sub-censuses manually, you can use the option --usepairs to generate triangulations from a subset of these facet pairings. In this case, the facet pairings will need to be presented using the default space-separated numerical format (not tight encodings).
Options for orientability, finiteness or minimality cannot be used with --genpairs; instead you should use them later with --usepairs.
This option does not come with progress reporting, though typically it runs fast enough that this does not matter. You can always track the state of progress by counting lines in the output file. β
-P,--usepairsβ use only the given subset of facet pairings to build the triangulations.
Each facet pairing that is processed must be in canonical form, i.e., must be a minimal representative of its isomorphism class. All facet pairings generated using --genpairs are guaranteed to satisfy this condition. β¨
Facet pairings should be supplied on standard input, one per line. They should be presented using the space-separated numerical format produced by the option --genpairs.
This option effectively lets you run a subset of a larger census. See --genpairs for further details on how to split a census into subsets that can run simultaneously on different machines. π₯οΈ
Fr fr, options for the number of top-dimensional simplices (i.e.,--tetrahedra) or boundary facets (i.e.,--boundaryor--bdryfaces) cannot be used with--usepairs. Instead you should pass these options earlier along with--genpairswhen you split the original census into pieces.
--threads=num_threadsβ run the census in parallel using the given number of threads. This parallelisation is typically very effective (particularly for larger censuses), in that the speed-up factor is usually close to the theoretical maximumnum_threads. π
The way the parallelisation currently works is as follows. For each individual facet pairing, the corresponding search tree is broken into a many smaller subtrees (i.e., subsearches), each of which can be processed independently by different threads.
This has two consequences:
- The
--threadsoption cannot be used with--genpairs, since the facet pairings are still enumerated in serial. - The output that writes each facet pairing to the console will appear deceptively fast. This is because each facet pairing will be written as soon as it is constructed by the main thread, and its many subsearches will be placed in a queue for other threads to process while the main thread moves on to the next facet pairing. Once all of the pairings have been output, you may still face a long wait while the threads together work their way through the queue of subsearches that has accumulated. π
-v,--versionβ show which version of Regina is being used, and exit immediately.-?,--helpβ display brief usage information, and exit immediately. π
β¨ EXAMPLES β¨
The following command forms a census of all 3-tetrahedron closed non-orientable 3-manifold triangulations, and puts the results in the file results.rga. To ensure that triangulations are closed we use the options -i (no boundary triangles) and -f (no ideal vertices). π
example$ tricensus -t 3 -nif results.rga
Starting census generation...
0:1 0:0 1:0 1:1 | 0:2 0:3 2:0 2:1 | 1:2 1:3 2:3 2:2
0:1 0:0 1:0 2:0 | 0:2 1:2 1:1 2:1 | 0:3 1:3 2:3 2:2
0:1 0:0 1:0 2:0 | 0:2 2:1 2:2 2:3 | 0:3 1:1 1:2 1:3
1:0 1:1 2:0 2:1 | 0:0 0:1 2:2 2:3 | 0:2 0:3 1:2 1:3
Finished.
Total triangulations: 5
example$
The following command forms a census of 4-tetrahedron closed orientable 3-manifold triangulations, where the census creation is optimised for prime minimal triangulations. Although all prime minimal triangulations will be included, there may be some non-prime or non-minimal triangulations in the census also. πΈ
example$ tricensus -t 4 -oifM results.rga
Starting census generation...
0:1 0:0 1:0 1:1 | 0:2 0:3 2:0 2:1 | 1:2 1:3 3:0 3:1 | 2:2 ...
0:1 0:0 1:0 1:1 | 0:2 0:3 2:0 3:0 | 1:2 2:2 2:1 3:1 | 1:3 ...
...
1:0 1:1 2:0 3:0 | 0:0 0:1 2:1 3:1 | 0:2 1:2 3:2 3:3 | 0:3 ...
Finished.
Total triangulations: 17
example$
The following command generates all face pairings for a 5-tetrahedron census of 3-manifold triangulation in which all triangulations have precisely two boundary triangles. The face pairings will be written to pairings.txt, whereupon they can be broken up and distributed for processing at a later date. π¦
example$ tricensus --genpairs -t 5 -B 2 pairings.txt
Total face pairings: 118
example$
The face pairings generated in the previous example can then be fleshed out into a full census of all 3-manifold triangulations with five tetrahedra, precisely two boundary triangles and no ideal vertices as follows. The number of tetrahedra and boundary triangles were already specified in the previous command, and cannot be supplied here. The face pairings will be read from pairings.txt, and the final census will be written to results.rga. π
example$ tricensus --usepairs -f results.rga < pairings.txt
Trying face pairings...
0:1 0:0 1:0 1:1 | 0:2 0:3 2:0 2:1 | 1:2 1:3 3:0 3:1 | 2:2 ...
0:1 0:0 1:0 1:1 | 0:2 0:3 2:0 2:1 | 1:2 1:3 3:0 3:1 | 2:2 ...
...
... (running through all 118 face pairings)
...
1:0 2:0 3:0 4:0 | 0:0 2:1 3:1 4:1 | 0:1 1:1 3:2 4:2 | 0:2 ...
Total triangulations: 5817
example$
π MACOS USERS π
If you downloaded a drag-and-drop app bundle, this utility is shipped inside it. If you dragged Regina to the main Applications folder, you can run it as /Applications/Regina.app/Contents/MacOS/tricensus. π«Ά
π§ WINDOWS USERS π§
The command-line utilities are installed beneath the Program Files directory; on some machines this directory is called Program Files (x86). You can start this utility by running c:\Program Files\Regina\Regina 7.4.1\bin\tricensus.exe. β¨
π SEE ALSO π
censuslookup, sigcensus, regina-gui. π
π AUTHOR β¨
Okay so this absolute legend wrote the utility:
- Benjamin Burton
<bab@maths.uq.edu.au>π
And bestie, it does NOT stop there β so many people have been involved in the development of Regina over the years. If you want the full list of credits, go check the users' handbook, because the whole squad deserves their flowers fr fr πΈπ«Ά
Regina TRICENSUS(1) β dated 25 August 2025 π
That's the whole page, bestie, you made it to the end π go forth and census those triangulations, you icon πβ¨
π¦ where this page comes from
- arch rolling: regina 7.4.1-4 Β· LicenseRef-Regina
- ubuntu resolute: regina-normal 7.4.1-1.1build1
- ubuntu stonking: regina-normal 7.4.1-1.2
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms