CppADCodeGen 2.4.3
A C++ Algorithmic Differentiation Package with Source Code Generation
Loading...
Searching...
No Matches
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
23static_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