File: hypercoords.h

package info (click to toggle)
regina-normal 7.4.1-1.1
  • links: PTS
  • area: main
  • in suites: forky, sid
  • size: 154,244 kB
  • sloc: cpp: 295,026; xml: 9,992; sh: 1,344; python: 1,225; perl: 616; ansic: 138; makefile: 26
file content (290 lines) | stat: -rw-r--r-- 10,450 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
/*
  This file contains docstrings for use in the Python bindings.
  Do not edit! They were automatically extracted by ../gendoc.sh.
 */

#if defined(__GNUG__)
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wunused-variable"
#endif

namespace regina::python::doc {


// Docstring regina::python::doc::HyperCoords
static const char *HyperCoords =
R"doc(Represents different coordinate systems that can be used for
enumerating and/or displaying normal hypersurfaces within 4-manifold
triangulations.

IDs 0-9999 are reserved for future use by Regina. If you are extending
Regina to include your own coordinate system, you should choose an ID
≥ 10000.)doc";

// Docstring regina::python::doc::HyperEncoding
static const char *HyperEncoding =
R"doc(Indicates precisely how a normal hypersurface within a 4-manifold
triangulation is encoded by an integer vector.

Normal hypersurfaces do not always store their internal vectors in the
same coordinate system that was used to enumerate the surfaces, and
indeed an isolated hypersurface does not know _how_ it was originally
created.

Therefore each normal hypersurface keeps a small amount of data,
represented by this class, so that it knows how to interpret its
internal integer vector. This data also remembers properties of the
enumeration process that can be used for optimisations (e.g., the
knowledge that, even if the vector stores tetrahedron coordinates, the
surface cannot contain any vertex linking components).

Encodings have the important property that any rational multiple of a
normal hypersurface *s* can always be stored using the same encoding
as is used for *s*. (In particular, taking a rational multiple will
not invalidate any of the property flags in the encoding.)

These objects are small enough to pass by value and swap with
std::swap(), with no need for any specialised move operations or swap
functions.)doc";

// Docstring regina::python::doc::HyperInfo
static const char *HyperInfo =
R"doc(A class used to query general information about different normal
hypersurface coordinate systems.

This class has become much simpler and more stripped-down since Regina
7.0. Much of the functionality that was available in this class in
Regina 6.0.1 and earlier can now be accessed through the new
HyperEncoding class.)doc";

namespace HyperCoords_ {

// Docstring regina::python::doc::HyperCoords_::Edge
static const char *Edge =
R"doc(Represents edge weight coordinates for normal hypersurfaces.

This coordinate system is for display only: Regina can view
hypersurfaces in this coordinate system, but it cannot use it to
enumerate or create hypersurfaces.)doc";

// Docstring regina::python::doc::HyperCoords_::Prism
static const char *Prism =
R"doc(Represents prism coordinates for normal hypersurfaces.

Regina can both enumerate and view hypersurfaces in this coordinate
system.)doc";

// Docstring regina::python::doc::HyperCoords_::Standard
static const char *Standard =
R"doc(Represents standard tetrahedron-prism coordinates for normal
hypersurfaces.

Regina can both enumerate and view hypersurfaces in this coordinate
system.)doc";

}

namespace HyperEncoding_ {

// Docstring regina::python::doc::HyperEncoding_::__add
static const char *__add =
R"doc(Returns an encoding that could hold the sum of hypersurfaces that use
this and the given encoding.

More precisely, the encoding that is returned is the "simplest"
possible encoding that is capable of holding the sum of two normal
hypersurfaces that use this and the given encoding respectively.

Parameter ``rhs``:
    the encoding to combine with this.

Returns:
    the "sum" of this and the given encoding, as defined above.)doc";

// Docstring regina::python::doc::HyperEncoding_::__copy
static const char *__copy = R"doc(Creates a new copy of the given encoding.)doc";

// Docstring regina::python::doc::HyperEncoding_::__eq
static const char *__eq =
R"doc(Determines whether this and the given encoding are identical.

Parameter ``other``:
    the encoding to compare with this.

Returns:
    ``True`` if and only if both encodings are identical.)doc";

// Docstring regina::python::doc::HyperEncoding_::__init
static const char *__init =
R"doc(Returns an encoding that precisely describes the given normal
hypersurface coordinate system. This is the encoding that you would
use with a "pen and paper" enumeration of hypersurfaces in the given
coordinate system, with no further conversion, optimisation, or post-
processing.

Note that, when Regina enumerates hypersurfaces in the given
coordinate system, it might choose to post-process the resulting
vectors to use a different encoding. (In the 3-dimensional world, for
example, normal surfaces enumerated in quad coordinates are post-
processed and stored in standard coordinates.)

If *coords* is not one of the coordinate systems that Regina can use
to enumerate normal hypersurfaces, then the resulting encoding will be
invalid, and valid() will return ``False``.

Parameter ``coords``:
    one of Regina's normal hypersurface coordinate systems.)doc";

// Docstring regina::python::doc::HyperEncoding_::block
static const char *block =
R"doc(Returns the number of coordinates stored for each pentachoron.

Returns:
    The number of coordinates per pentachoron.)doc";

// Docstring regina::python::doc::HyperEncoding_::couldBeNonCompact
static const char *couldBeNonCompact =
R"doc(Returns whether it is possible for a normal hypersurface using this
encoding to be non-compact. Here "non-compact" refers to a surface
with infinitely many normal pieces. See
NormalHypersurface::isCompact() for details.

This is typically information that is inherited from whoever
enumerated or created the hypersurface that uses this encoding.

If this returns ``True``, it does not mean that the hypersurface does
actually contain infinitely many normal pieces; it simply means that
the user will need to test this themselves. If this returns ``False``,
however, it is guaranteed that the hypersurface is compact, with no
further testing required.

Returns:
    ``True`` if it is possible that the hypersurface might be non-
    compact.)doc";

// Docstring regina::python::doc::HyperEncoding_::couldBeVertexLink
static const char *couldBeVertexLink =
R"doc(Returns whether it is possible for a normal hypersurface using this
encoding to include one or more vertex linking components.

This is typically information that is inherited from whoever
enumerated or created the hypersurface that uses this encoding.

If this returns ``True``, it does not mean that the hypersurface does
actually contain vertex linking components; it simply means that the
user will need to test this themselves. If this returns ``False``,
however, it is guaranteed that the hypersurface does _not_ contain any
vertex linking components, with no further testing required.

Returns:
    ``True`` if it is possible that the hypersurface might contain one
    or more vertex linking components.)doc";

// Docstring regina::python::doc::HyperEncoding_::empty
static const char *empty =
R"doc(Returns an encoding that is suitable for representing the empty
hypersurface, whose normal coordinates are all zero.

Returns:
    a suitable encoding for the empty hypersurface.)doc";

// Docstring regina::python::doc::HyperEncoding_::fromIntValue
static const char *fromIntValue =
R"doc(Reconstructs an encoding from an integer value.

This is a partner routine to intValue(): for any encoding *enc*, the
encoding ``fromIntValue(enc.intValue())`` is always equal to *enc*.

The main purpose of intValue() and fromIntValue() is to support
reading and writing hypersurfaces to/from Regina's XML file format.

Parameter ``value``:
    an integer that represents an encoding, typically obtained by
    calling intValue().

Returns:
    the corresponding encoding.)doc";

// Docstring regina::python::doc::HyperEncoding_::intValue
static const char *intValue =
R"doc(Exports this encoding as an integer.

The exact value of the integer is meant to be opaque, in the sense
that it can only be used with fromIntValue(). End users are not meant
to pull it apart and analyse it (this is what the other query routines
in this class are for).

The main purpose of intValue() and fromIntValue() is to support
reading and writing hypersurfaces to/from Regina's XML file format.

It is guaranteed that 0 will never be the integer value of a
(correctly constructed) encoding.

Returns:
    an integer that represents this encoding.)doc";

// Docstring regina::python::doc::HyperEncoding_::storesTetrahedra
static const char *storesTetrahedra =
R"doc(Returns whether this encoding explicitly stores tetrahedron
coordinates.

Returns:
    ``True`` if tetrahedron coordinates are stored.)doc";

// Docstring regina::python::doc::HyperEncoding_::valid
static const char *valid =
R"doc(Returns whether this describes a vector encoding of normal
hypersurfaces.

The only case where this would be ``False`` is if you create an
encoding using either (1) a coordinate system that Regina does not use
for enumeration; or (2) another invalid encoding.

Returns:
    ``True`` if and only if this is a valid encoding.)doc";

// Docstring regina::python::doc::HyperEncoding_::withTetrahedra
static const char *withTetrahedra =
R"doc(Returns an extension of this encoding that explicitly stores
tetrahedron coordinates.

All other properties of the encoding will be copied across without
changes (including "theoretical" properties such as whether the
surface could have vertex linking components, or whether it could be
non-compact).

If this encoding already stores tetrahedron coordinates, then the
result will be identical to this.

Returns:
    an extension of this encoding that stores tetrahedron coordinates.)doc";

}

namespace HyperInfo_ {

// Docstring regina::python::doc::HyperInfo_::name
static const char *name =
R"doc(Returns the human-readable name of the given coordinate system.

The first letter of the returned string will be upper-case, and all
subsequent letters will be lower-case.

This routine is guaranteed to return a non-null string, even if
*coordSystem* is not one of the HyperCoords enum values.

Parameter ``coordSystem``:
    the coordinate system being queried; this may be any of the
    HyperCoords enumeration values.

Returns:
    the name of the given coordinate system.)doc";

}

} // namespace regina::python::doc

#if defined(__GNUG__)
#pragma GCC diagnostic pop
#endif