16template <linalg::RnSpace Space>
20template <linalg::RnSpace Space>
21 requires(linalg::space_dim_v<Space> == 1)
25template <linalg::RnSpace Space>
26 requires(linalg::space_dim_v<Space> == 1)
30template <linalg::RnSpace Dom, linalg::RnSpace Codom>
35template <linalg::RnSpace Dom, linalg::RnSpace Codom>
49template <
typename Meta,
typename Child>
107 std::for_each(x.begin(), x.end(),
108 [&](
const auto&
pt) { sum += linalg::constexpr_exp(pt); });
110 const auto res = linalg::constexpr_ln_safe(
sum);
113 else {
return T(-1) * res; }
122 constexpr auto mul()
const {
123 if constexpr (Scalar <
T(0)) {
124 const auto alpha =
T(-1) * Scalar;
138 affine::AffineMap<LiftedVarMat<T>>
new_map(
151 constexpr auto add(
T beta)
const {
196 template <AtomType Type, conic::BuilderLike Builder>
204 static constexpr std::size_t Dom = linalg::mat_cols_v<AffineMatT>;
205 static constexpr std::size_t Codom = linalg::mat_rows_v<AffineMatT>;
206 static_assert(Codom ==
N,
207 "Input affine map from cone block has invalid dom which is a "
208 "mismatch between domain in the convex function");
209 static_assert(Dom ==
N,
210 "Expecting child affine map to have square linear part");
211 linalg::Matrix<T, 3 * N + 1, 2 * Dom + 1>
F;
212 linalg::Vector<T, 3 * N + 1>
g;
213 F = linalg::set_block<0, N, 0, Dom>(
F,
child_coord.linear_part());
214 const auto I = linalg::make_identity<T, Dom>();
217 for (std::size_t
i = 0;
i <
N; ++
i)
F(
i,
N) =
T(-1);
219 for (std::size_t
i = 0;
i <
N; ++
i)
F(
i,
N) =
T(1);
221 F = linalg::set_block<2 * N, 3 * N, N + 1, 2 * N + 1>(
F,
I);
222 for (std::size_t
i = 0;
i <
N; ++
i)
F(3 *
N,
N + 1 +
i) =
T(-1);
224 for (std::size_t
i =
N;
i < 2 *
N; ++
i)
g(
i) =
T(1);
242template <
typename Child>
246 linalg::Matrix<dom_type_t<meta_codom_t<atom_meta_t<Child>>>, 1, 1>>,
typename dom_traits< linalg::remove_cvref_t< Dom > >::Space dom_space_t
constexpr std::size_t dom_size_v
CurvatureType
Curvature annotation for atom codomain.
linalg::remove_cvref_t< T > atom_decay_t
normalize atom-facing types to a stable internal form.
MonotonicityType
Monotonicity annotation for function atoms.
linalg::Vector< T, 1 > LiftedVarBias
alias for lifted var map
linalg::RowVector< T, 1 > LiftedVarMat
alias for lifted var map
Atom-local canonical emission bundle.
forward decl for nonneg orthant cone
CRTP base for convex atoms.
ChildrenT children
Tuple of normalized child atoms.
dom_point_t< Domain > PointT
Point type accepted by the atom domain.
dom_type_t< Domain > T
Scalar field for the atom domain.
static constexpr std::size_t N
Domain dimension.
Domain wrapper with a static sign label.
forward declaration - log sum exp fn
constexpr auto add(T beta) const
add
constexpr auto mul() const
mul
constexpr LogSumExp(const Child &child_in)
CTOR.
static constexpr CurvatureType Tag
curvature tag
affine::AffineMap< LiftedVarMat< T > > lift_map
member vars
constexpr T eval(const PointT &x) const
eval impl
constexpr MonotonicityType monotonicity() const
mono
constexpr LogSumExp(const Child &child_in, const affine::AffineMap< LiftedVarMat< T > > &map_in)
CTOR.
constexpr T operator()(const PointT &x) const
eval via operator overload
constexpr auto canonicalize_impl(const Builder &builder) const
canonicalize impl