@@ -103,6 +103,9 @@ using if_else_branch_ret = double;
103103
104104#line 72 "pure2-autodiff.cpp2"
105105 public: [[nodiscard]] static auto if_else_branch (cpp2::impl::in<double > x, cpp2::impl::in<double > y) -> if_else_branch_ret;
106+
107+ #line 81 "pure2-autodiff.cpp2"
108+ public: [[nodiscard]] static auto direct_return (cpp2::impl::in<double > x, cpp2::impl::in<double > y) -> double;
106109struct add_1_diff_ret { double r; double r_d; };
107110
108111
@@ -172,17 +175,21 @@ struct if_else_branch_diff_ret { double r; double r_d; };
172175
173176public: [[nodiscard]] static auto if_else_branch_diff (cpp2::impl::in<double > x, cpp2::impl::in<double > x_d, cpp2::impl::in<double > y, cpp2::impl::in<double > y_d) -> if_else_branch_diff_ret;
174177
178+ struct direct_return_diff_ret { double r; double r_d; };
179+
180+ public: [[nodiscard]] static auto direct_return_diff (cpp2::impl::in<double > x, cpp2::impl::in<double > x_d, cpp2::impl::in<double > y, cpp2::impl::in<double > y_d) -> direct_return_diff_ret;
181+
175182 public: ad_test() = default ;
176183 public: ad_test(ad_test const &) = delete ; /* No 'that' constructor, suppress copy */
177184 public: auto operator =(ad_test const &) -> void = delete ;
178185
179186
180- #line 80 "pure2-autodiff.cpp2"
187+ #line 84 "pure2-autodiff.cpp2"
181188};
182189
183190auto write_output (cpp2::impl::in<std::string> func, cpp2::impl::in<double > x, cpp2::impl::in<double > x_d, cpp2::impl::in<double > y, cpp2::impl::in<double > y_d, auto const & ret) -> void;
184191
185- #line 86 "pure2-autodiff.cpp2"
192+ #line 90 "pure2-autodiff.cpp2"
186193auto main () -> int;
187194
188195// === Cpp2 function definitions =================================================
@@ -317,6 +324,11 @@ auto main() -> int;
317324 }return std::move (r.value ());
318325 }
319326
327+ #line 81 "pure2-autodiff.cpp2"
328+ [[nodiscard]] auto ad_test::direct_return (cpp2::impl::in<double > x, cpp2::impl::in<double > y) -> double{
329+ return x + y;
330+ }
331+
320332 [[nodiscard]] auto ad_test::add_1_diff (cpp2::impl::in<double > x, cpp2::impl::in<double > x_d, cpp2::impl::in<double > y, cpp2::impl::in<double > y_d) -> add_1_diff_ret{
321333 double r {0.0 };
322334 double r_d {0.0 };r_d = x_d + y_d;r = x + y;return { std::move (r), std::move (r_d) };
@@ -430,12 +442,18 @@ auto temp_1 {x - y}; r_d = cos(temp_1) * cpp2::move(temp_1_d);
430442 return { std::move (r), std::move (r_d) };
431443 }
432444
433- #line 82 "pure2-autodiff.cpp2"
445+ [[nodiscard]] auto ad_test::direct_return_diff (cpp2::impl::in<double > x, cpp2::impl::in<double > x_d, cpp2::impl::in<double > y, cpp2::impl::in<double > y_d) -> direct_return_diff_ret{
446+ double r {};
447+ double r_d {};r_d = x_d + y_d;r = x + y;
448+ return { std::move (r), std::move (r_d) };
449+ }
450+
451+ #line 86 "pure2-autodiff.cpp2"
434452auto write_output (cpp2::impl::in<std::string> func, cpp2::impl::in<double > x, cpp2::impl::in<double > x_d, cpp2::impl::in<double > y, cpp2::impl::in<double > y_d, auto const & ret) -> void{
435453 std::cout << " diff(" + cpp2::to_string (func) + " ) at (x = " + cpp2::to_string (x) + " , x_d = " + cpp2::to_string (x_d) + " , y = " + cpp2::to_string (y) + " , y_d = " + cpp2::to_string (y_d) + " ) = (r = " + cpp2::to_string (ret.r ) + " , r_d = " + cpp2::to_string (ret.r_d ) + " )" << std::endl;
436454}
437455
438- #line 86 "pure2-autodiff.cpp2"
456+ #line 90 "pure2-autodiff.cpp2"
439457auto main () -> int{
440458
441459 double x {2.0 };
@@ -458,6 +476,7 @@ auto main() -> int{
458476 write_output (" x * func(x, y)" , x, x_d, y, y_d, ad_test::func_call_diff (x, x_d, y, y_d));
459477 write_output (" sin(x + y)" , x, x_d, y, y_d, ad_test::sin_call_diff (x, x_d, y, y_d));
460478 write_output (" if branch" , x, x_d, y, y_d, ad_test::if_branch_diff (x, x_d, y, y_d));
461- write_output (" if else branch" , x, x_d, y, y_d, ad_test::if_else_branch_diff (cpp2::move (x), cpp2::move (x_d), cpp2::move (y), cpp2::move (y_d)));
479+ write_output (" if else branch" , x, x_d, y, y_d, ad_test::if_else_branch_diff (x, x_d, y, y_d));
480+ write_output (" direct return" , x, x_d, y, y_d, ad_test::direct_return_diff (cpp2::move (x), cpp2::move (x_d), cpp2::move (y), cpp2::move (y_d)));
462481}
463482
0 commit comments