File: sfsalt.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 (295 lines) | stat: -rw-r--r-- 11,000 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
291
292
293
294
295
/*
  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::SFSAlt
static const char *SFSAlt =
R"doc(Provides an alternative representation of a single bounded Seifert
fibred space. Such alternatives are made possible by altering the
curves made by the fibre and base orbifold on a boundary torus.

This class is designed to help in finding simple representations of
graph manifolds (or, indeed, any non-geometric manifolds containing
Seifert fibred blocks).

Each alternative comes with its own representation of the original
Seifert fibred space, along with instructions for converting
fibre/base curves on the boundary tori between the original and
alternative spaces.

The alternative representation will generally be as simple as possible
(and indeed the hope is that it will be simpler than the original). In
particular, each alternative space is guaranteed to have obstruction
constant zero. The base orbifold may be changed entirely (for
instance, an orientable Seifert fibred space over the Mobius band with
no exceptional fibres will be converted to a Seifert fibred space over
the disc with two exceptional fibres).

The conversions between boundary curves are described by a conversion
matrix *M* as follows. Consider the first boundary torus. Let *f_old*
and *o_old* be directed curves on this boundary representing the fibre
and base orbifold of the original space, and let *f_alt* and *o_alt*
be directed curves on this same boundary representing the fibre and
base orbifold of the new alternative space. Then

```
    [f_alt]         [f_old]
    [     ]  =  M * [     ].
    [o_alt]         [o_old]
```

Note that this _only_ applies to the first boundary torus! If the
Seifert fibred space has more than one boundary, then for the
remaining boundaries the unoriented fibre and base curves remain the
same. More specifically, the directed fibre remains identical, and the
directed curve representing the base orbifold is reversed if and only
if a reflection was used in creating the alternative space, as
returned by reflected().

See the page on notation for Seifert fibred spaces for details on some
of the terminology used above.

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. Note,
however, that SFSAlt still requires a non-trivial (but constant sized)
amount of data to be copied even in a move operation.)doc";

namespace SFSAlt_ {

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

// Docstring regina::python::doc::SFSAlt_::__eq
static const char *__eq =
R"doc(Determines whether this and the given alternative representation have
identical presentations.

To be considered _identical_, the two alternatives must have equal
alternative SFSpace representations, equal conversion matrices, and
either both must have used a reflection or both must have not used a
reflection. In other words, this is equivalent to testing all of
alt(), conversion() and reflected() for equality.

Parameter ``other``:
    the alternative to compare against this.

Returns:
    ``True`` if and only if this and the given alternative have
    identical presentations, as described above.)doc";

// Docstring regina::python::doc::SFSAlt_::__init
static const char *__init =
R"doc(Creates a "basic" alternative representation for the given Seifert
fibred space. This will:

* reduce the parameters via SFSpace::reduce(), without reflecting;

* add twists to the first boundary torus so that the obstruction
  constant *b* in the Seifert fibred space becomes zero;

* if the Seifert fibred space is over ``M/n2`` with no exceptional
  fibres (where ``M`` represents the Mobius band), it will switch the
  fibre and orbifold curves to give a Seifert fibred space over the
  disc with two exception fibres.

Precondition:
    The given Seifert fibred space has at least one torus boundary.

Parameter ``original``:
    the original Seifert fibred space for which we are creating a set
    of alternative representations.)doc";

// Docstring regina::python::doc::SFSAlt_::__init_2
static const char *__init_2 =
R"doc(Creates a new alternative representation from the given alternative
representation. The changes will include:

* if *reflect* is ``True``, then this will reflect the Seifert fibred
  space;

* if *negate* is ``True``, then this will attempt to replace all
  fibres (*alpha*, *beta*) with (*alpha*, *alpha* - *beta*), _without_
  any further reflections (but see below for conditions on when this
  is possible);

* in all cases, this will reduce the parameters via SFSpace::reduce()
  and add twists to give obstruction constant zero.

Asking for reflection is always valid. However, the option to negate
without reflection is possible only if:

* it is possible to negate an exceptional fibre by sliding it around
  the base orbifold (as in SFSpace::fibreNegating()); and

* the number of exceptional fibres is odd.

For convenience, you can test these conditions using the static
function canNegate().

Precondition:
    If *negate* is ``True``, then the underlying Seifert fibred space
    satisfies the requirements outlined above, or equivalently,
    ``canNegate(base.sfs())`` is ``True``.

.. note::
    This constructor only makes sense if at least one of ``reflect``
    or ``negate`` is ``True``, since *base* should already be in a
    reduced form with zero obstruction constant.

Parameter ``base``:
    the Seifert fibred space representation that will be used as a
    starting point for this new alternative.

Parameter ``reflect``:
    ``True`` if we should reflect the Seifert fibred space.

Parameter ``negate``:
    ``True`` if we should attempt to negate all exceptional fibres
    without reflecting, as described above.)doc";

// Docstring regina::python::doc::SFSAlt_::alt
static const char *alt =
R"doc(Returns the alternative representation of the original Seifert fibred
space.

Returns:
    the alternative representation.)doc";

// Docstring regina::python::doc::SFSAlt_::alt_2
static const char *alt_2 =
R"doc(Returns a non-const reference to the alternative representation of the
original Seifert fibred space.

Returns:
    the alternative representation.)doc";

// Docstring regina::python::doc::SFSAlt_::alt_3
static const char *alt_3 =
R"doc(Returns an rvalue reference to the alternative representation of the
original Seifert fibred space.

Returns:
    the alternative representation.)doc";

// Docstring regina::python::doc::SFSAlt_::altSet
static const char *altSet =
R"doc(Returns a set of alternatives for the given Seifert fibred space.
These will consist of (1) the alternative *base* created by passing
the original Seifert fibred space to the SFSAlt constructor; and (2)
all alternatives created by passing *base* with appropriate reflection
and negation arguments to the SFSAlt constructor. The combinations of
reflection and negation arguments that are used (and hence the size of
the set that is returned) will depend on the properties of the
original space.

Note that in general, none of the alternatives will have a
representation identical to the original (generally these alternative
representations will be simpler if possible).

It is guaranteed that the set that is returned will be non-empty.

Precondition:
    The given Seifert fibred space has at least one torus boundary.

Parameter ``sfs``:
    the original Seifert fibred space.

Returns:
    the resulting set of alternative representations for *sfs*.)doc";

// Docstring regina::python::doc::SFSAlt_::canNegate
static const char *canNegate =
R"doc(Determines whether the SFSAlt class constructor will be able to negate
all exceptional fibres without reflecting the underlying Seifert
fibred space.

See the constructor SFSAlt(const SFSAlt&, bool, bool) for further
details.

Precondition:
    The given Seifert fibred space has at least one torus boundary.

Parameter ``sfs``:
    the Seifert fibred space that we are attempting to represent.

Returns:
    ``True`` if and only if it is possible to set the negation
    argument to ``True`` in the SFSAlt class constructor.)doc";

// Docstring regina::python::doc::SFSAlt_::conversion
static const char *conversion =
R"doc(Returns the conversion matrix for this alternative space. This matrix
describes the fibre and base curves of the alternative space on the
first boundary torus in terms of the fibre and base curves of the
original space (which was passed to the SFSAlt constructor). See the
class notes above for details.

Note that this conversion matrix applies _only_ to the first boundary
torus! If there is more than one boundary, the remaining boundary
conversions are simpler and depend only on whether a reflection has
been used or not. See reflected() or the class notes for details.

Returns:
    the conversion matrix for this alternative space.)doc";

// Docstring regina::python::doc::SFSAlt_::global_swap
static const char *global_swap =
R"doc(Swaps the contents of the two given alternative representations of
Seifert fibred spaces.

This global routine simply calls SFSAlt::swap(); it is provided so
that SFSAlt meets the C++ Swappable requirements.

Parameter ``a``:
    the first alternative whose contents should be swapped.

Parameter ``b``:
    the second alternative whose contents should be swapped.)doc";

// Docstring regina::python::doc::SFSAlt_::reflected
static const char *reflected =
R"doc(Returns whether or not a reflection was used when creating this
alternative space. This determines the conversion between boundary
curves for all boundary tori after the first.

More specifically, if no reflection was used then the directed fibre
and base curves are identical for the original and alternative spaces.
If a reflection was used, then the directed fibres are identical but
the directed base curves are reversed.

The conversion between curves on the first boundary torus is generally
more complex, and is returned as a matrix by the conversion() routine.

You can also test whether a reflection was used by examining whether
the conversion matrix has determinant 1 or -1. However, calling
reflected() is both simpler and a little faster.

Returns:
    ``True`` if a reflection was used in creating this alternative
    space, or ``False`` if no reflection was used.)doc";

// Docstring regina::python::doc::SFSAlt_::swap
static const char *swap =
R"doc(Swaps the contents of this and the given alternative.

Parameter ``other``:
    the alternative whose contents should be swapped with this.)doc";

}

} // namespace regina::python::doc

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