CppADCodeGen
2.4.3
A C++ Algorithmic Differentiation Package with Source Code Generation
cppadcg.hpp
1
#ifndef CPPADCG_INCLUDED
2
#define CPPADCG_INCLUDED
3
/* --------------------------------------------------------------------------
4
* CppADCodeGen: C++ Algorithmic Differentiation with Source Code Generation:
5
* Copyright (C) 2012 Ciengis
6
* Copyright (C) 2019 Joao Leal
7
*
8
* CppADCodeGen is distributed under multiple licenses:
9
*
10
* - Eclipse Public License Version 1.0 (EPL1), and
11
* - GNU General Public License Version 3 (GPL3).
12
*
13
* EPL1 terms and conditions can be found in the file "epl-v10.txt", while
14
* terms and conditions for the GPL3 can be found in the file "gpl3.txt".
15
* ----------------------------------------------------------------------------
16
* Author: Joao Leal
17
*/
18
19
// --------------------------------------------------------------------------
20
21
// Make sure CppADCodeGen is included before CppAD
22
# ifdef CPPAD_CPPAD_HPP
23
static_assert(
false
,
24
"\ncppad/cppad.hpp was included before cppad/cg/cppadcg.hpp\n"
25
"cppadcg.hpp includes cppad.hpp with the proper environment for CppADCodeGen"
26
);
27
# endif
28
29
// System routines that can be used by rest of CppAD with out including
30
31
#include <algorithm>
32
#include <array>
33
#include <cassert>
34
#include <cstddef>
35
#include <cerrno>
36
#include <fstream>
37
#include <iomanip>
38
#include <iosfwd>
39
#include <iostream>
40
#include <limits>
41
#include <list>
42
#include <map>
43
#include <memory>
44
#include <valarray>
45
#include <vector>
46
#include <deque>
47
#include <forward_list>
48
#include <set>
49
#include <cstddef>
50
#include <stdexcept>
51
#include <cstdio>
52
#include <cstdlib>
53
#include <sstream>
54
#include <string>
55
#include <cstring>
56
#include <chrono>
57
#include <thread>
58
#include <functional>
59
60
// ---------------------------------------------------------------------------
61
// operating system detection
62
#ifndef CPPAD_CG_SYSTEM_LINUX
63
# if defined(__linux__) || defined(__linux) || defined(linux)
64
# define CPPAD_CG_SYSTEM_LINUX 1
65
# endif
66
#endif
67
#ifndef CPPAD_CG_SYSTEM_APPLE
68
# if defined(__APPLE__)
69
# define CPPAD_CG_SYSTEM_APPLE 1
70
# define CPPAD_CG_SYSTEM_LINUX 1
71
# endif
72
#endif
73
#ifndef CPPAD_CG_SYSTEM_WIN
74
# if defined(_WIN32) || defined(_WIN64) || defined(__WIN32__) || defined(__TOS_WIN__) || defined(__WINDOWS__)
75
# define CPPAD_CG_SYSTEM_WIN 1
76
# endif
77
#endif
78
79
// ---------------------------------------------------------------------------
80
// all base type requirements
81
# include <cppad/base_require.hpp>
82
83
// ---------------------------------------------------------------------------
84
#include <cppad/cg/cppadcg_assert.hpp>
85
#include <cppad/cg/exception.hpp>
86
#include <cppad/cg/operation.hpp>
87
#include <cppad/cg/declare_cg.hpp>
88
89
// ---------------------------------------------------------------------------
90
// system dependent files
91
#include <cppad/cg/model/system/system.hpp>
92
#include <cppad/cg/model/system/linux_system.hpp>
93
94
// ---------------------------------------------------------------------------
95
// some utilities
96
#include <cppad/cg/smart_containers.hpp>
97
#include <cppad/cg/ostream_config_restore.hpp>
98
#include <cppad/cg/array_view.hpp>
99
100
// ---------------------------------------------------------------------------
101
// indexes
102
#include <cppad/cg/patterns/index/index_pattern.hpp>
103
#include <cppad/cg/patterns/index/linear_index_pattern.hpp>
104
#include <cppad/cg/patterns/index/sectioned_index_pattern.hpp>
105
#include <cppad/cg/patterns/index/plane_2d_index_pattern.hpp>
106
#include <cppad/cg/patterns/index/random_index_pattern.hpp>
107
#include <cppad/cg/patterns/index/random_1d_index_pattern.hpp>
108
#include <cppad/cg/patterns/index/random_2d_index_pattern.hpp>
109
#include <cppad/cg/patterns/index/index_pattern_impl.hpp>
110
111
// ---------------------------------------------------------------------------
112
// core files
113
#include <cppad/cg/debug.hpp>
114
#include <cppad/cg/argument.hpp>
115
#include <cppad/cg/operation_node.hpp>
116
#include <cppad/cg/operation_stack.hpp>
117
#include <cppad/cg/nodes/index_operation_node.hpp>
118
#include <cppad/cg/nodes/index_assign_operation_node.hpp>
119
#include <cppad/cg/nodes/loop_start_operation_node.hpp>
120
#include <cppad/cg/nodes/loop_end_operation_node.hpp>
121
#include <cppad/cg/nodes/print_operation_node.hpp>
122
#include <cppad/cg/cg.hpp>
123
#include <cppad/cg/default.hpp>
124
#include <cppad/cg/variable.hpp>
125
#include <cppad/cg/identical.hpp>
126
#include <cppad/cg/range.hpp>
127
#include <cppad/cg/atomic_dependency_locator.hpp>
128
#include <cppad/cg/variable_name_generator.hpp>
129
#include <cppad/cg/job_timer.hpp>
130
#include <cppad/cg/lang/language.hpp>
131
#include <cppad/cg/lang/lang_stream_stack.hpp>
132
#include <cppad/cg/scope_path_element.hpp>
133
#include <cppad/cg/array_id_compresser.hpp>
134
#include <cppad/cg/patterns/loop_position.hpp>
135
#include <cppad/cg/arithmetic.hpp>
136
#include <cppad/cg/arithmetic_assign.hpp>
137
#include <cppad/cg/math.hpp>
138
#include <cppad/cg/math_other.hpp>
139
#include <cppad/cg/nan.hpp>
140
#include <cppad/cg/cond_exp_op.hpp>
141
#include <cppad/cg/compare.hpp>
142
#include <cppad/cg/ordered.hpp>
143
#include <cppad/cg/unary.hpp>
144
145
// ---------------------------------------------------------------------------
146
#include <cppad/cg/code_handler.hpp>
147
#include <cppad/cg/code_handler_impl.hpp>
148
#include <cppad/cg/code_handler_vector.hpp>
149
#include <cppad/cg/code_handler_loops.hpp>
150
151
// ---------------------------------------------------------------------------
152
#include <cppad/cg/base_double.hpp>
153
#include <cppad/cg/base_float.hpp>
154
155
// ---------------------------------------------------------------------------
156
// CppAD
157
#include <cppad/cppad.hpp>
158
159
// resolves some ambiguities
160
#include <cppad/cg/arithmetic_ad.hpp>
161
162
// addons
163
#include <cppad/cg/extra/extra.hpp>
164
165
// ---------------------------------------------------------------------------
166
// additional utilities
167
#include <cppad/cg/util.hpp>
168
#include <cppad/cg/evaluator/evaluator.hpp>
169
#include <cppad/cg/evaluator/evaluator_ad.hpp>
170
#include <cppad/cg/evaluator/evaluator_adcg.hpp>
171
#include <cppad/cg/evaluator/evaluator_cg.hpp>
172
#include <cppad/cg/operation_path_node.hpp>
173
#include <cppad/cg/operation_path.hpp>
174
#include <cppad/cg/solver.hpp>
175
#include <cppad/cg/collect_variable.hpp>
176
#include <cppad/cg/graph_mod.hpp>
177
#include <cppad/cg/operation_node_name_streambuf.hpp>
178
179
// ---------------------------------------------------------------------------
180
// atomic function utilities
181
#include <cppad/cg/custom_position.hpp>
182
#include <cppad/cg/base_abstract_atomic_fun.hpp>
183
#include <cppad/cg/abstract_atomic_fun.hpp>
184
#include <cppad/cg/atomic_fun.hpp>
185
#include <cppad/cg/atomic_fun_bridge.hpp>
186
#include <cppad/cg/model/atomic_generic_model.hpp>
187
188
// ---------------------------------------------------------------------------
189
// loop/pattern detection
190
#include <cppad/cg/patterns/independent_node_sorter.hpp>
191
#include <cppad/cg/patterns/equation_group.hpp>
192
#include <cppad/cg/patterns/iter_equation_group.hpp>
193
#include <cppad/cg/patterns/loop_model.hpp>
194
#include <cppad/cg/patterns/loop_free_model.hpp>
195
#include <cppad/cg/patterns/equation_pattern.hpp>
196
#include <cppad/cg/patterns/loop.hpp>
197
#include <cppad/cg/patterns/dependent_pattern_matcher.hpp>
198
199
// ---------------------------------------------------------------------------
200
// C source code generation
201
#include <cppad/cg/lang/c/lang_c_atomic_fun.hpp>
202
#include <cppad/cg/lang/c/language_c.hpp>
203
#include <cppad/cg/lang/c/language_c_arrays.hpp>
204
#include <cppad/cg/lang/c/language_c_index_patterns.hpp>
205
#include <cppad/cg/lang/c/language_c_double.hpp>
206
#include <cppad/cg/lang/c/language_c_float.hpp>
207
#include <cppad/cg/lang/c/language_c_loops.hpp>
208
#include <cppad/cg/lang/c/lang_c_default_var_name_gen.hpp>
209
#include <cppad/cg/lang/c/lang_c_default_hessian_var_name_gen.hpp>
210
#include <cppad/cg/lang/c/lang_c_default_reverse2_var_name_gen.hpp>
211
#include <cppad/cg/lang/c/lang_c_custom_var_name_gen.hpp>
212
#include <cppad/cg/lang/c/lang_c_util.hpp>
213
214
//
215
#include <cppad/cg/model/threadpool/multi_threading_type.hpp>
216
#include <cppad/cg/model/threadpool/thread_pool_schedule_strategy.hpp>
217
#include <cppad/cg/model/external_function_wrapper.hpp>
218
#include <cppad/cg/model/atomic_external_function_wrapper.hpp>
219
#include <cppad/cg/model/generic_model_external_function_wrapper.hpp>
220
#include <cppad/cg/model/model_library_processor.hpp>
221
#include <cppad/cg/model/model_library.hpp>
222
#include <cppad/cg/model/generic_model.hpp>
223
#include <cppad/cg/model/functor_generic_model.hpp>
224
#include <cppad/cg/model/functor_model_library.hpp>
225
#include <cppad/cg/model/save_files_model_library_processor.hpp>
226
227
// automated static library creation
228
#include <cppad/cg/model/dynamic_lib/archiver.hpp>
229
#include <cppad/cg/model/dynamic_lib/ar_archiver.hpp>
230
231
// compiler
232
#include <cppad/cg/model/compiler/c_compiler.hpp>
233
#include <cppad/cg/model/compiler/abstract_c_compiler.hpp>
234
#include <cppad/cg/model/compiler/gcc_compiler.hpp>
235
#include <cppad/cg/model/compiler/clang_compiler.hpp>
236
237
// model source code generation helpers
238
#include <cppad/cg/model/threadpool/pthread_pool_c.hpp>
239
#include <cppad/cg/model/threadpool/pthread_pool_h.hpp>
240
#include <cppad/cg/model/threadpool/openmp_c.hpp>
241
#include <cppad/cg/model/threadpool/openmp_h.hpp>
242
#include <cppad/cg/model/model_c_source_gen.hpp>
243
#include <cppad/cg/model/model_c_source_gen_impl.hpp>
244
#include <cppad/cg/model/model_library_c_source_gen.hpp>
245
#include <cppad/cg/model/model_library_c_source_gen_impl.hpp>
246
247
#include <cppad/cg/model/model_c_source_gen_for0.hpp>
248
#include <cppad/cg/model/model_c_source_gen_for1.hpp>
249
#include <cppad/cg/model/model_c_source_gen_rev1.hpp>
250
#include <cppad/cg/model/model_c_source_gen_rev2.hpp>
251
#include <cppad/cg/model/model_c_source_gen_jac.hpp>
252
#include <cppad/cg/model/model_c_source_gen_hes.hpp>
253
#include <cppad/cg/model/patterns/model_c_source_gen_loops.hpp>
254
#include <cppad/cg/model/patterns/model_c_source_gen_loops_for0.hpp>
255
#include <cppad/cg/model/patterns/model_c_source_gen_loops_for1.hpp>
256
#include <cppad/cg/model/patterns/model_c_source_gen_loops_jac.hpp>
257
#include <cppad/cg/model/patterns/model_c_source_gen_loops_jac_fr1.hpp>
258
#include <cppad/cg/model/patterns/model_c_source_gen_loops_hess.hpp>
259
#include <cppad/cg/model/patterns/model_c_source_gen_loops_rev1.hpp>
260
#include <cppad/cg/model/patterns/model_c_source_gen_loops_rev2.hpp>
261
#include <cppad/cg/model/patterns/model_c_source_gen_loops_hess_r2.hpp>
262
#include <cppad/cg/model/patterns/hessian_with_loops_info.hpp>
263
264
// automated dynamic library creation
265
#include <cppad/cg/model/dynamic_lib/dynamiclib.hpp>
266
#include <cppad/cg/model/dynamic_lib/dynamic_library_processor.hpp>
267
268
// ---------------------------------------------------------------------------
269
// automated dynamic library creation for Linux
270
#include <cppad/cg/model/dynamic_lib/linux/linux_dynamiclib_model.hpp>
271
#include <cppad/cg/model/dynamic_lib/linux/linux_dynamiclib.hpp>
272
#include <cppad/cg/model/dynamic_lib/linux/linux_dynamic_model_library_processor.hpp>
273
274
#endif
275
include
cppad
cg
cppadcg.hpp
Generated on Tue Jan 23 2024 12:29:55 for CppADCodeGen by
1.9.1