8#include "akreon/linalg/linalg_util.hpp"
18template <linalg::RnSpace Space>
21 using T = linalg::space_type_t<Space>;
22 static constexpr std::size_t
N = linalg::space_dim_v<Space>;
25 using Vec = linalg::Vector<T, N>;
35 template <AtomLike Var>
38 "Weighted sum must operate on a var type");
40 std::same_as<dom_space_t<meta_codom_t<atom_meta_t<Var>>>, Space>,
41 "Invalid q^T x operator mismatch on vector types");
43 const auto W = linalg::make_diag(
q);
46 return std::apply([](
const auto&...
cs) {
return Sum(
cs...); },
vars);
60template <AtomLike Var>
typename dom_traits< linalg::remove_cvref_t< Dom > >::Space dom_space_t
constexpr std::size_t dom_size_v
typename dom_traits< linalg::remove_cvref_t< Dom > >::T dom_type_t
constexpr auto make_weighted_sum(const linalg::Vector< dom_type_t< meta_codom_t< atom_meta_t< Var > > >, dom_size_v< meta_codom_t< atom_meta_t< Var > > > > &q, const Var &x)
make weighted sum with domain deduced from the variable atom
typename meta_traits< linalg::remove_cvref_t< Meta > >::Codomain meta_codom_t
typename atom_traits< atom_decay_t< Atom > >::ConvexMeta atom_meta_t
Extract metadata type from atom.
forward declaration - sum op
static constexpr std::size_t N
constexpr auto operator()(const Vec &q, const Var &x)
operator overload
linalg::space_type_t< Space > T
type
linalg::Vector< T, N > Vec
vec type for q