-
Notifications
You must be signed in to change notification settings - Fork 11
Expand file tree
/
Copy pathmain.cpp
More file actions
152 lines (128 loc) · 4.68 KB
/
Copy pathmain.cpp
File metadata and controls
152 lines (128 loc) · 4.68 KB
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
//
// libsemigroups - C++ library for semigroups and monoids
// Copyright (C) 2021-2024 James D. Mitchell
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
//
#include "main.hpp"
// libsemigroups....
#include <libsemigroups/config.hpp> // for LIBSEMIGROUPS_EIGEN_ENABLED
#include <libsemigroups/detail/report.hpp> // for ReportGuard
// pybind11....
#include <pybind11/pybind11.h> // for module_, class_, enum_, init
namespace libsemigroups {
namespace py = pybind11;
PYBIND11_MODULE(_libsemigroups_pybind11, m) {
////////////////////////////////////////////////////////////////////////
// Module attributes
////////////////////////////////////////////////////////////////////////
#ifdef VERSION_INFO
m.attr("__version__") = VERSION_INFO;
#else
m.attr("__version__") = "dev";
#endif
#ifdef LIBSEMIGROUPS_EIGEN_ENABLED
m.attr("LIBSEMIGROUPS_EIGEN_ENABLED")
= static_cast<bool>(LIBSEMIGROUPS_EIGEN_ENABLED);
#else
m.attr("LIBSEMIGROUPS_EIGEN_ENABLED") = false;
#endif
#ifdef LIBSEMIGROUPS_HPCOMBI_ENABLED
m.attr("LIBSEMIGROUPS_HPCOMBI_ENABLED")
= static_cast<bool>(LIBSEMIGROUPS_HPCOMBI_ENABLED);
#else
m.attr("LIBSEMIGROUPS_HPCOMBI_ENABLED") = false;
#endif
// At compile time, pybind11 tries to determine what the python type of a
// C++ object will be. This is used when determining what typehints should
// go in the doc, the contents of pybind11 error messages, and may be used
// in function dispatch related ways (though JDE's not sure about that).
// Therefore, it is important that we try to init our classes in the order
// in which they are used.
// It seems as though the code still compiles if we don't manage to get the
// order perfect (but not always).
////////////////////////////////////////////////////////////////////////
// Classes that need to be initialised early
////////////////////////////////////////////////////////////////////////
// Must be before most things
init_constants(m);
// The alphabet-aware order comparison overloads require the Alphabet
// classes to be registered before their signatures are created.
init_alphabet(m);
init_order(m);
init_types(m);
// Must be before runners
init_reporter(m);
init_runner(m);
// Must be before cong classes
init_present(m);
init_inverse_present(m);
// Must be before anything with visualisation
init_dot(m);
// Must be before WordGraph
init_forest(m);
// Must be before anything that returns or requires a WordGraph
init_word_graph(m);
// Must come before anything that uses elements
init_bmat8(m);
init_matrix(m);
init_pbr(m);
init_transf(m);
#ifdef LIBSEMIGROUPS_HPCOMBI_ENABLED
init_hpcombi(m);
#endif
// Must come before paths
init_words(m);
////////////////////////////////////////////////////////////////////////
// Classes in (almost) alphabetical order
////////////////////////////////////////////////////////////////////////
init_detail_cong_common(m);
init_detail_todd_coxeter_impl(m);
init_detail_knuth_bendix_impl(m);
init_detail_report(m);
init_action(m);
init_aho_corasick(m);
init_bipart(m);
init_blocks(m);
init_cong(m);
init_error(m);
init_freeband(m);
init_froidure_pin_base(m); // Must be before init_froidure_pin
init_froidure_pin(m);
init_gabow(m);
init_imagerightaction(m);
init_kambites(m);
init_kbe(m);
init_knuth_bendix(m);
init_konieczny(m);
init_obvinf(m);
init_paths(m);
init_presentation_examples(m);
init_ranges(m);
init_schreier_sims(m);
init_sims(m);
init_stephen(m);
init_todd_coxeter(m);
init_ukkonen(m);
////////////////////////////////////////////////////////////////////////
// Classes that need to be initialised late
////////////////////////////////////////////////////////////////////////
init_to_congruence(m);
init_to_froidure_pin(m);
init_to_knuth_bendix(m);
init_to_present(m);
init_to_present(m);
init_to_todd_coxeter(m);
}
} // namespace libsemigroups