30 typename Conf::crmat in,
typename Conf::crmat fwd_step,
31 typename Conf::rmat out,
typename Conf::rmat fb_step,
32 [[maybe_unused]]
typename Conf::real_t γ,
33 typename Conf::real_t γ_fwd) {
34 assert(in.rows() == fwd_step.rows());
35 assert(in.cols() == fwd_step.cols());
36 assert(in.rows() == out.rows());
37 assert(in.cols() == out.cols());
38 assert(in.rows() == fb_step.rows());
39 assert(in.cols() == fb_step.cols());
40 assert(in.size() == self.
lower.size());
41 assert(in.size() == self.
upper.size());
42 assert(!(self.
lower.array() > self.
upper.array()).any());
43 fb_step = (γ_fwd * fwd_step)
45 .cwiseMax(self.
lower - in.reshaped())
46 .cwiseMin(self.
upper - in.reshaped())
47 .reshaped(in.rows(), in.cols());