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