akreon-convex
Typed convex modeling, conic canonicalization, and primal-dual optimization in C++26.
Loading...
Searching...
No Matches
convex_traits.hpp File Reference
#include "akreon/linalg/affine/affine_traits.hpp"
#include "cone_traits.hpp"
#include "akreon/linalg/norms/norm_traits.hpp"
Include dependency graph for convex_traits.hpp:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  convex::ConvexDomain< Space, Sign >
 Domain wrapper with a static sign label. More...
 
struct  convex::dom_traits< Dom >
 Base domain traits. More...
 
struct  convex::dom_traits< ConvexDomain< SpaceIn, Sign > >
 
struct  convex::ConvexAtomMeta< Dom, Codom, Curv >
 Atom metadata bundling domain, codomain, and curvature. More...
 
struct  convex::meta_traits< Meta >
 Base metadata traits. More...
 
struct  convex::meta_traits< ConvexAtomMeta< Dom, Codom, Curv > >
 
struct  convex::prob_traits< ConvexProblem< Builder, Stage > >
 problem type traits More...
 
struct  convex::atom_traits< Atom >
 Base atom traits. More...
 
struct  convex::atom_traits< Atom< Meta, Child > >
 
struct  convex::atom_traits< Variable< Meta > >
 
struct  convex::atom_traits< ScalarView< Meta, Child > >
 
struct  convex::atom_traits< Abs< Meta, Child > >
 
struct  convex::atom_traits< Exp< Meta, Child > >
 
struct  convex::atom_traits< GeoMean< Meta, Child > >
 
struct  convex::atom_traits< InvPos< Meta, Child > >
 
struct  convex::atom_traits< Log< Meta, Child > >
 
struct  convex::atom_traits< LogSumExp< Meta, Child > >
 
struct  convex::atom_traits< Max< Meta, Child > >
 
struct  convex::atom_traits< Square< Meta, Child > >
 
struct  convex::atom_traits< Norm< Meta, Child, NormFunc > >
 
struct  convex::atom_traits< Sqrt< Meta, Child > >
 
struct  convex::atom_traits< Softplus< Meta, Child > >
 
struct  convex::atom_traits< HarmonicMean< Meta, Child > >
 
struct  convex::atom_traits< KLDivergence< Meta, Child > >
 
struct  convex::atom_traits< Huber< Meta, Child > >
 
struct  convex::atom_traits< ConvexSet< Meta, Derived, Child > >
 
struct  convex::atom_traits< AffineSubspace< Meta, Child > >
 
struct  convex::atom_traits< Ellipsoid< Meta, Child > >
 
struct  convex::atom_traits< Halfspace< Meta, Child, HType > >
 
struct  convex::atom_traits< Hyperplane< Meta, Child > >
 
struct  convex::atom_traits< LMI< Meta, Child, Mat > >
 
struct  convex::atom_traits< NormBall< Meta, Child, BType > >
 
struct  convex::atom_traits< Polyhedron< Meta, Child > >
 
struct  convex::atom_traits< Sum< SumMeta< Dom, Codom >, Cs... > >
 type traits for sum More...
 
struct  convex::atom_traits< Intersection< IntersectionMeta< Space >, Cs... > >
 type traits for intersection More...
 

Namespaces

namespace  convex
 

Concepts

concept  convex::ProblemLike
 ProblemLike Concept.
 
concept  convex::AtomLike
 Concept for any convex atom node in the expression tree.
 

Typedefs

template<typename T >
using convex::LiftedVarMat = linalg::RowVector< T, 1 >
 alias for lifted var map
 
template<typename T >
using convex::LiftedVarBias = linalg::Vector< T, 1 >
 alias for lifted var map
 
template<typename Dom >
using convex::dom_space_t = typename dom_traits< linalg::remove_cvref_t< Dom > >::Space
 
template<typename Dom >
using convex::dom_type_t = typename dom_traits< linalg::remove_cvref_t< Dom > >::T
 
template<typename Dom >
using convex::dom_point_t = typename dom_traits< linalg::remove_cvref_t< Dom > >::Point
 
template<typename Meta >
using convex::meta_dom_t = typename meta_traits< linalg::remove_cvref_t< Meta > >::Domain
 
template<typename Meta >
using convex::meta_codom_t = typename meta_traits< linalg::remove_cvref_t< Meta > >::Codomain
 
template<typename Prob >
using convex::prob_builder_t = typename prob_traits< linalg::remove_cvref_t< Prob > >::BuilderT
 builder type from prob
 
template<linalg::RnSpace Dom>
using convex::SumDom = ConvexDomain< Dom, VarType::FREE >
 Domain alias for sum atom.
 
template<linalg::RnSpace Codom>
using convex::SumCodom = ConvexDomain< Codom, VarType::FREE >
 Codomain alias for sum atom (scalar).
 
template<linalg::RnSpace Dom, linalg::RnSpace Codom>
using convex::SumMeta = ConvexAtomMeta< SumDom< Dom >, SumCodom< Codom >, CurvatureType::AFFINE >
 Meta alias for sum atom.
 
template<linalg::RnSpace Space>
using convex::IntersectionDom = ConvexDomain< Space, VarType::FREE >
 Domain alias for intersection atom.
 
template<linalg::RnSpace Space>
using convex::IntersectionCodom = IntersectionDom< Space >
 Codomain alias for intersection atom.
 
template<linalg::RnSpace Space>
using convex::IntersectionMeta = ConvexAtomMeta< IntersectionDom< Space >, IntersectionCodom< Space >, CurvatureType::CONVEX >
 Meta alias for intersection atom.
 
template<typename T >
using convex::atom_decay_t = linalg::remove_cvref_t< T >
 normalize atom-facing types to a stable internal form.
 
template<AtomLike Atom>
using convex::atom_meta_t = typename atom_traits< atom_decay_t< Atom > >::ConvexMeta
 Extract metadata type from atom.
 

Enumerations

enum struct  convex::AtomType : uint8_t {
  convex::VAR = 0 , convex::INDEX , convex::FN , convex::SET ,
  convex::ADD , convex::CAP
}
 Atom category used by canonicalization and DCP checks. More...
 
enum struct  convex::VarType : uint8_t {
  convex::FREE = 0 , convex::NONNEG , convex::NONPOS , convex::POS ,
  convex::NEG , convex::PSD
}
 Domain/variable annotation attached to domains/codomains. More...
 
enum struct  convex::CurvatureType : uint8_t { convex::AFFINE = 0 , convex::CONVEX , convex::CONCAVE }
 Curvature annotation for atom codomain. More...
 
enum struct  convex::MonotonicityType : uint8_t { convex::UNKNOWN = 0 , convex::NONDEC , convex::NONINC }
 Monotonicity annotation for function atoms. More...
 
enum struct  convex::InequalityType : uint8_t { convex::EQ = 0 , convex::LEQ , convex::GEQ }
 InequalityType for inequality atom. More...
 
enum struct  convex::StageType : uint8_t { convex::INIT = 0 , convex::IN_PROGRESS , convex::PROBLEM_SET }
 Problem construction lifecycle stage. More...
 
enum struct  convex::HalfspaceType : uint8_t { convex::LH = 0 , convex::UH }
 simple enum to describe type of halfspace More...
 
enum struct  convex::NormBallType : uint8_t { convex::L2 = 0 , convex::L1 , convex::Linf }
 simple enum to describe ball type More...
 

Variables

template<typename Dom >
constexpr std::size_t convex::dom_size_v
 
template<typename Dom >
constexpr VarType convex::dom_vartype_v
 
template<typename Meta >
constexpr CurvatureType convex::meta_curv_v
 
template<typename Prob >
constexpr bool convex::is_problem_set_v
 stage type from prob
 
template<AtomLike Atom>
constexpr AtomType convex::atom_type_v = atom_traits<atom_decay_t<Atom>>::Type
 Compile-time atom category.
 
template<AtomLike Atom>
constexpr bool convex::is_fn_type_v = atom_type_v<Atom> == AtomType::FN
 Helper predicates on atom category.
 
template<AtomLike Atom>
constexpr bool convex::is_var_type_v = atom_type_v<Atom> == AtomType::VAR
 
template<AtomLike Atom>
constexpr bool convex::is_set_type_v = atom_type_v<Atom> == AtomType::SET
 
template<AtomLike Atom>
constexpr bool convex::is_add_type_v = atom_type_v<Atom> == AtomType::ADD
 
template<AtomLike Atom>
constexpr bool convex::is_cap_type_v = atom_type_v<Atom> == AtomType::CAP
 
template<AtomLike Atom>
constexpr bool convex::is_index_type_v = atom_type_v<Atom> == AtomType::INDEX