1
+ ad_name: namespace = {
1
2
2
3
ad_test: @autodiff @print type = {
3
4
@@ -151,6 +152,7 @@ ad_test: @autodiff @print type = {
151
152
}
152
153
}
153
154
}
155
+ }
154
156
155
157
ad_test_twice: @autodiff @autodiff<"suffix=_d2"> @print type = {
156
158
mul_1: (x: double) -> (r: double) = {
@@ -169,31 +171,31 @@ main: () = {
169
171
y: double = 3.0;
170
172
y_d: double = 2.0;
171
173
172
- write_output("x + y", x, x_d, y, y_d, ad_test::add_1_d(x, x_d, y, y_d));
173
- write_output("x + y + x", x, x_d, y, y_d, ad_test::add_2_d(x, x_d, y, y_d));
174
- write_output("x - y", x, x_d, y, y_d, ad_test::sub_1_d(x, x_d, y, y_d));
175
- write_output("x - y - x", x, x_d, y, y_d, ad_test::sub_2_d(x, x_d, y, y_d));
176
- write_output("x + y - x", x, x_d, y, y_d, ad_test::add_sub_2_d(x, x_d, y, y_d));
177
- write_output("x * y", x, x_d, y, y_d, ad_test::mul_1_d(x, x_d, y, y_d));
178
- write_output("x * y * x", x, x_d, y, y_d, ad_test::mul_2_d(x, x_d, y, y_d));
179
- write_output("x / y", x, x_d, y, y_d, ad_test::div_1_d(x, x_d, y, y_d));
180
- write_output("x / y / y", x, x_d, y, y_d, ad_test::div_2_d(x, x_d, y, y_d));
181
- write_output("x * y / x", x, x_d, y, y_d, ad_test::mul_div_2_d(x, x_d, y, y_d));
182
- write_output("x * (x + y)", x, x_d, y, y_d, ad_test::mul_add_d(x, x_d, y, y_d));
183
- write_output("x + x * y", x, x_d, y, y_d, ad_test::add_mul_d(x, x_d, y, y_d));
184
- write_output("x * func(x, y)", x, x_d, y, y_d, ad_test::func_call_d(x, x_d, y, y_d));
185
- write_output("sin(x - y)", x, x_d, y, y_d, ad_test::sin_call_d(x, x_d, y, y_d));
186
- write_output("if branch", x, x_d, y, y_d, ad_test::if_branch_d(x, x_d, y, y_d));
187
- write_output("if else branch", x, x_d, y, y_d, ad_test::if_else_branch_d(x, x_d, y, y_d));
188
- write_output("direct return", x, x_d, y, y_d, ad_test::direct_return_d(x, x_d, y, y_d));
189
- write_output("intermediate var", x, x_d, y, y_d, ad_test::intermediate_var_d(x, x_d, y, y_d));
190
- write_output("intermediate passive var", x, x_d, y, y_d, ad_test::intermediate_passive_var_d(x, x_d, y, y_d));
191
- write_output("intermediate untyped", x, x_d, y, y_d, ad_test::intermediate_untyped_d(x, x_d, y, y_d));
192
- write_output("intermediate default init", x, x_d, y, y_d, ad_test::intermediate_default_init_d(x, x_d, y, y_d));
193
- write_output("intermediate no init", x, x_d, y, y_d, ad_test::intermediate_no_init_d(x, x_d, y, y_d));
194
- write_output("while loop", x, x_d, y, y_d, ad_test::while_loop_d(x, x_d, y, y_d));
195
- write_output("do while loop", x, x_d, y, y_d, ad_test::do_while_loop_d(x, x_d, y, y_d));
196
- write_output("for loop", x, x_d, y, y_d, ad_test::for_loop_d(x, x_d, y, y_d));
174
+ write_output("x + y", x, x_d, y, y_d, ad_name:: ad_test::add_1_d(x, x_d, y, y_d));
175
+ write_output("x + y + x", x, x_d, y, y_d, ad_name:: ad_test::add_2_d(x, x_d, y, y_d));
176
+ write_output("x - y", x, x_d, y, y_d, ad_name:: ad_test::sub_1_d(x, x_d, y, y_d));
177
+ write_output("x - y - x", x, x_d, y, y_d, ad_name:: ad_test::sub_2_d(x, x_d, y, y_d));
178
+ write_output("x + y - x", x, x_d, y, y_d, ad_name:: ad_test::add_sub_2_d(x, x_d, y, y_d));
179
+ write_output("x * y", x, x_d, y, y_d, ad_name:: ad_test::mul_1_d(x, x_d, y, y_d));
180
+ write_output("x * y * x", x, x_d, y, y_d, ad_name:: ad_test::mul_2_d(x, x_d, y, y_d));
181
+ write_output("x / y", x, x_d, y, y_d, ad_name:: ad_test::div_1_d(x, x_d, y, y_d));
182
+ write_output("x / y / y", x, x_d, y, y_d, ad_name:: ad_test::div_2_d(x, x_d, y, y_d));
183
+ write_output("x * y / x", x, x_d, y, y_d, ad_name:: ad_test::mul_div_2_d(x, x_d, y, y_d));
184
+ write_output("x * (x + y)", x, x_d, y, y_d, ad_name:: ad_test::mul_add_d(x, x_d, y, y_d));
185
+ write_output("x + x * y", x, x_d, y, y_d, ad_name:: ad_test::add_mul_d(x, x_d, y, y_d));
186
+ write_output("x * func(x, y)", x, x_d, y, y_d, ad_name:: ad_test::func_call_d(x, x_d, y, y_d));
187
+ write_output("sin(x - y)", x, x_d, y, y_d, ad_name:: ad_test::sin_call_d(x, x_d, y, y_d));
188
+ write_output("if branch", x, x_d, y, y_d, ad_name:: ad_test::if_branch_d(x, x_d, y, y_d));
189
+ write_output("if else branch", x, x_d, y, y_d, ad_name:: ad_test::if_else_branch_d(x, x_d, y, y_d));
190
+ write_output("direct return", x, x_d, y, y_d, ad_name:: ad_test::direct_return_d(x, x_d, y, y_d));
191
+ write_output("intermediate var", x, x_d, y, y_d, ad_name:: ad_test::intermediate_var_d(x, x_d, y, y_d));
192
+ write_output("intermediate passive var", x, x_d, y, y_d, ad_name:: ad_test::intermediate_passive_var_d(x, x_d, y, y_d));
193
+ write_output("intermediate untyped", x, x_d, y, y_d, ad_name:: ad_test::intermediate_untyped_d(x, x_d, y, y_d));
194
+ write_output("intermediate default init", x, x_d, y, y_d, ad_name:: ad_test::intermediate_default_init_d(x, x_d, y, y_d));
195
+ write_output("intermediate no init", x, x_d, y, y_d, ad_name:: ad_test::intermediate_no_init_d(x, x_d, y, y_d));
196
+ write_output("while loop", x, x_d, y, y_d, ad_name:: ad_test::while_loop_d(x, x_d, y, y_d));
197
+ write_output("do while loop", x, x_d, y, y_d, ad_name:: ad_test::do_while_loop_d(x, x_d, y, y_d));
198
+ write_output("for loop", x, x_d, y, y_d, ad_name:: ad_test::for_loop_d(x, x_d, y, y_d));
197
199
198
200
r_twice := ad_test_twice::mul_1_d_d2(x, x_d, x_d, 0.0);
199
201
std::cout << "2nd order diff of x*x at (x)$ = (r_twice.r_d_d2)$" << std::endl;
0 commit comments