akreon-convex
Typed convex modeling, conic canonicalization, and primal-dual optimization in C++26.
Loading...
Searching...
No Matches
convex::Sum< Meta, Cs > Struct Template Reference

forward declaration - sum op More...

#include <sum.hpp>

Inheritance diagram for convex::Sum< Meta, Cs >:
[legend]

Public Types

using BaseT = Atom< Meta, Sum< Meta, Cs... >, Cs... >
 CRTP base type.
 
using MatT = linalg::Matrix< T, 1, 1 >
 Scalar affine map matrix type.
 
- Public Types inherited from convex::Atom< Meta, Sum< Meta, Cs... >, Cs... >
using Domain = meta_dom_t< Meta >
 Atom input domain.
 
using Codomain = meta_codom_t< Meta >
 Atom output codomain.
 
using ChildrenT = std::tuple< atom_decay_t< Cs >... >
 Tuple of decayed child atom types.
 
using T = dom_type_t< Domain >
 Scalar field for the atom domain.
 
using PointT = dom_point_t< Domain >
 Point type accepted by the atom domain.
 

Public Member Functions

constexpr Sum (const Cs &... cs)
 Construct a sum atom from child atoms.
 
constexpr Sum (const affine::AffineMap< MatT > &map_in, const std::tuple< Cs... > &cs)
 Construct a transformed sum atom from a scalar affine map.
 
template<T Scalar>
constexpr auto mul () const
 Scale this sum by a compile-time scalar.
 
constexpr auto add (T beta) const
 Add a scalar offset to this sum.
 
template<AtomType Type, conic::BuilderLike Builder>
constexpr auto canonicalize_impl (const Builder &builder) const
 Canonicalize this sum into a cone builder.
 
- Public Member Functions inherited from convex::Atom< Meta, Sum< Meta, Cs... >, Cs... >
constexpr Atom ()
 Construct a leaf atom with no children.
 
constexpr Atom (ChildrenT child_in)
 Construct an atom with normalized children.
 
constexpr void validate_fn_domain (const auto &child) const
 Validate DCP composition for a function child.
 
constexpr void validate_domain () const
 Validate child domains, signs, curvature, and composition rules.
 
constexpr auto canonicalize (const Builder &builder) const
 Dispatch canonicalization to the derived atom.
 
constexpr const Sum< Meta, Cs... > & self () const
 Return this object as the CRTP-derived atom type.
 

Public Attributes

affine::AffineMap< MatT > map
 Scalar affine transform applied after summing children.
 
- Public Attributes inherited from convex::Atom< Meta, Sum< Meta, Cs... >, Cs... >
ChildrenT children
 Tuple of normalized child atoms.
 

Additional Inherited Members

- Static Public Attributes inherited from convex::Atom< Meta, Sum< Meta, Cs... >, Cs... >
static constexpr std::size_t N
 Domain dimension.
 
static constexpr std::size_t M
 Codomain dimension.
 
static constexpr CurvatureType Curvature
 Curvature declared by atom metadata.
 
static constexpr VarType DomSign
 Domain sign declared by atom metadata.
 
static constexpr VarType CodomSign
 Codomain sign declared by atom metadata.
 

Detailed Description

template<typename Meta, typename... Cs>
struct convex::Sum< Meta, Cs >

forward declaration - sum op

DCP sum atom over two or more child atoms.

Definition at line 116 of file sum.hpp.

Member Typedef Documentation

◆ BaseT

template<typename Meta , typename... Cs>
using convex::Sum< Meta, Cs >::BaseT = Atom<Meta, Sum<Meta, Cs...>, Cs...>

CRTP base type.

Definition at line 118 of file sum.hpp.

◆ MatT

template<typename Meta , typename... Cs>
using convex::Sum< Meta, Cs >::MatT = linalg::Matrix<T, 1, 1>

Scalar affine map matrix type.

Definition at line 131 of file sum.hpp.

Constructor & Destructor Documentation

◆ Sum() [1/2]

template<typename Meta , typename... Cs>
constexpr convex::Sum< Meta, Cs >::Sum ( const Cs &...  cs)
inlineexplicitconstexpr

Construct a sum atom from child atoms.

Parameters
cschild atoms to sum

Definition at line 138 of file sum.hpp.

References convex::dom_size_v.

◆ Sum() [2/2]

template<typename Meta , typename... Cs>
constexpr convex::Sum< Meta, Cs >::Sum ( const affine::AffineMap< MatT > &  map_in,
const std::tuple< Cs... > &  cs 
)
inlineexplicitconstexpr

Construct a transformed sum atom from a scalar affine map.

Parameters
map_inscalar affine transform applied to the child sum
cstuple of child atoms

Definition at line 149 of file sum.hpp.

References convex::dom_size_v.

Member Function Documentation

◆ add()

template<typename Meta , typename... Cs>
constexpr auto convex::Sum< Meta, Cs >::add ( T  beta) const
inlineconstexpr

Add a scalar offset to this sum.

Parameters
betascalar
Returns
transformed sum atom

Definition at line 176 of file sum.hpp.

References convex::Atom< Meta, Sum< Meta, Cs... >, Cs... >::children, convex::dom_size_v, and convex::Sum< Meta, Cs >::map.

◆ canonicalize_impl()

template<typename Meta , typename... Cs>
template<AtomType Type, conic::BuilderLike Builder>
constexpr auto convex::Sum< Meta, Cs >::canonicalize_impl ( const Builder &  builder) const
inlineconstexpr

Canonicalize this sum into a cone builder.

Template Parameters
Typerequested atom canonicalization target
Buildercanonical-form builder type
Parameters
buildercurrent canonical-form builder
Returns
updated canonical-form builder

Definition at line 193 of file sum.hpp.

References convex::Atom< Meta, Sum< Meta, Cs... >, Cs... >::children, convex::dom_size_v, convex::Sum< Meta, Cs >::map, convex::SET, and convex::tuple_fold_sum().

◆ mul()

template<typename Meta , typename... Cs>
template<T Scalar>
constexpr auto convex::Sum< Meta, Cs >::mul ( ) const
inlineconstexpr

Scale this sum by a compile-time scalar.

Template Parameters
Scalarscale factor applied to the selector map
Returns
transformed sum atom

Definition at line 163 of file sum.hpp.

References convex::Atom< Meta, Sum< Meta, Cs... >, Cs... >::children, convex::dom_size_v, and convex::Sum< Meta, Cs >::map.

Member Data Documentation

◆ map

template<typename Meta , typename... Cs>
affine::AffineMap<MatT> convex::Sum< Meta, Cs >::map

Scalar affine transform applied after summing children.

Definition at line 220 of file sum.hpp.

Referenced by convex::Sum< Meta, Cs >::add(), convex::Sum< Meta, Cs >::canonicalize_impl(), and convex::Sum< Meta, Cs >::mul().


The documentation for this struct was generated from the following files: