4#include <guanaqo/tag-invoke.hpp>
8using guanaqo::guanaqo_tag_invoke;
22 requires guanaqo::tag_invocable<
23 prox_fn, T &,
typename T::config_t::crmat,
24 typename T::config_t::rmat,
typename T::config_t::real_t>;
26 requires std::is_same_v<
27 guanaqo::tag_invoke_result_t<
28 prox_fn, T &,
typename T::config_t::crmat,
29 typename T::config_t::rmat,
typename T::config_t::real_t>,
30 typename T::config_t::real_t>;
33 typename T::config_t::rmat out,
34 typename T::config_t::real_t γ = 1) const
35 noexcept(guanaqo::is_nothrow_tag_invocable_v<
37 typename T::config_t::
rmat, typename T::config_t::
real_t>) ->
38 typename T::config_t::
real_t {
39 return guanaqo::guanaqo_tag_invoke(*
this, func, std::move(in),
77 requires guanaqo::tag_invocable<
79 typename T::config_t::crmat,
typename T::config_t::rmat,
80 typename T::config_t::rmat,
typename T::config_t::real_t,
81 typename T::config_t::real_t>;
83 requires std::is_same_v<
84 guanaqo::tag_invoke_result_t<
86 typename T::config_t::crmat,
typename T::config_t::rmat,
87 typename T::config_t::rmat,
typename T::config_t::real_t,
88 typename T::config_t::real_t>,
89 typename T::config_t::real_t>;
92 typename T::config_t::crmat fwd_step,
93 typename T::config_t::rmat out,
94 typename T::config_t::rmat fb_step,
95 typename T::config_t::real_t γ = 1,
96 typename T::config_t::real_t γ_fwd = -1) const
97 noexcept(guanaqo::is_nothrow_tag_invocable_v<
99 typename T::config_t::
crmat, typename T::config_t::
rmat,
100 typename T::config_t::
rmat, typename T::config_t::
real_t,
101 typename T::config_t::
real_t>) ->
102 typename T::config_t::
real_t {
103 return guanaqo::guanaqo_tag_invoke(*
this, func, std::move(in),
104 std::move(fwd_step), std::move(out),
105 std::move(fb_step), γ, γ_fwd);
111 typename T::config_t;
114 requires !guanaqo::tag_invocable<
116 typename T::config_t::crmat,
typename T::config_t::rmat,
117 typename T::config_t::rmat,
typename T::config_t::real_t,
118 typename T::config_t::real_t>;
120 requires std::invocable<
prox_fn, T &,
typename T::config_t::crmat,
121 typename T::config_t::rmat,
122 typename T::config_t::real_t>;
125 typename T::config_t::crmat fwd_step,
126 typename T::config_t::rmat out,
127 typename T::config_t::rmat fb_step,
128 typename T::config_t::real_t γ = 1,
129 typename T::config_t::real_t γ_fwd = -1) const
130 noexcept(std::is_nothrow_invocable_v<
132 typename T::config_t::
rmat, typename T::config_t::
real_t>) ->
133 typename T::config_t::
real_t {
134 fb_step = in + γ_fwd * fwd_step;
135 auto &&h_out =
prox(func, fb_step, out, γ);
struct alpaqa::prox_fn prox
Compute the proximal mapping.
struct alpaqa::prox_step_fn prox_step
Compute a generalized forward-backward step.
typename Conf::crmat crmat
constexpr bool is_config_v
typename Conf::real_t real_t
Proximal mapping customization point.
auto operator()(T &func, typename T::config_t::crmat in, typename T::config_t::rmat out, typename T::config_t::real_t γ=1) const noexcept(guanaqo::is_nothrow_tag_invocable_v< prox_fn, T &, typename T::config_t::crmat, typename T::config_t::rmat, typename T::config_t::real_t >) -> typename T::config_t::real_t
Proximal mapping customization point for forward-backward steps.
auto operator()(T &func, typename T::config_t::crmat in, typename T::config_t::crmat fwd_step, typename T::config_t::rmat out, typename T::config_t::rmat fb_step, typename T::config_t::real_t γ=1, typename T::config_t::real_t γ_fwd=-1) const noexcept(std::is_nothrow_invocable_v< prox_fn, T &, typename T::config_t::crmat, typename T::config_t::rmat, typename T::config_t::real_t >) -> typename T::config_t::real_t
Default implementation for prox_step if only prox is provided.
auto operator()(T &func, typename T::config_t::crmat in, typename T::config_t::crmat fwd_step, typename T::config_t::rmat out, typename T::config_t::rmat fb_step, typename T::config_t::real_t γ=1, typename T::config_t::real_t γ_fwd=-1) const noexcept(guanaqo::is_nothrow_tag_invocable_v< prox_step_fn, T &, typename T::config_t::crmat, typename T::config_t::crmat, typename T::config_t::rmat, typename T::config_t::rmat, typename T::config_t::real_t, typename T::config_t::real_t >) -> typename T::config_t::real_t