File: maxadmissible.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 (103 lines) | stat: -rw-r--r-- 3,966 bytes parent folder | download | duplicates (2)
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
/*
  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::MaxAdmissible
static const char *MaxAdmissible =
R"doc(Used to enumerate all maximal admissible faces of a polyhedral cone
under a given set of admissibility constraints. See the routine
enumerate() for details.

All routines of interest within this class are static; no object of
this class should ever be created.)doc";

namespace MaxAdmissible_ {

// Docstring regina::python::doc::MaxAdmissible_::enumerate
static const char *enumerate =
R"doc(Enumerates all maximal admissible faces of the given polyhedral cone.
The cone must be the intersection of the non-negative orthant in some
Euclidean space R^n with a linear subspace.

Admissibility is defined by the given set of constraints. Each
constraint requires that at most one of a given set of coordinates can
be non-zero; see the ValidityConstraints class for details. In
particular, the quadrilateral constraints from normal surface theory
are of this type.

It is simple to show that the admissible region of the cone is a union
of faces, which we call "admissible faces". Those admissible faces
that do not appear as a strict subface of some other admissible face
are called "maximal admissible faces". The admissible region can
therefore be expressed as the union of all maximal admissible faces.

The input for this routine is the set of all admissible extremal rays
of the cone. These should be computed beforehand; for instance, using
the routine DoubleDescription::enumerate().

The return value is a vector containing all maximal admissible faces.
Each face *F* is described by a bitmask. Specifically: if we are
working in R^n, then each face is described by a bitmask *b* of length
n, where ``b[i]`` is ``False`` if every point *x* in *F* has
``x[i]=0``, and ``b[i]`` is ``True`` if every point *x* in the
relative interior of *F* has ``x[i] > 0``.

Precondition:
    The template argument RayIterator should be an iterator type that,
    when dereferenced, can be treated as a vector of integers. The
    exact vector and integer types are unimportant; all that matters
    is that, for any such iterator *it* and any integer index *i*, we
    can test ``(*it)[i] == 0`` and ``(*it)[i] != 0``.

Precondition:
    The template argument BitmaskType is one of the bitmask types
    Bitmask, Bitmask1 or Bitmask2.

Precondition:
    Bitmasks of type BitmaskType can hold *n* bits, where *n* is the
    dimension of the underlying space (i.e., the size of the input
    vectors described by *beginExtremalRays* and *endExtremalRays*).
    This is always true of Bitmask, but you must be careful when using
    one of the fast but size-limited types Bitmask1 or Bitmask2.

Python:
    The extremal rays should be passed as a Python list of VectorInt
    objects, not a pair of iterators. The bitmasks that are returned
    will be of type regina::Bitmask.

Parameter ``beginExtremalRays``:
    an iterator that begins the set of admissible extremal rays, as
    described above. Typically this would be rays.begin() if *rays* is
    a standard container type.

Parameter ``endExtremalRays``:
    an iterator that is past-the-end of the set of admissible extremal
    rays. Typically this would be rays.end() if *rays* is a standard
    container type.

Parameter ``constraints``:
    a set of validity constraints as described above. This may be
    ValidityConstraints::none to indicate no constraints (in which
    case there will be just one maximal admissible face).

Returns:
    a vector containing one bitmask representing each maximal
    admissible face, as described above.)doc";

}

} // namespace regina::python::doc

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