akreon-convex
Typed convex modeling, conic canonicalization, and primal-dual optimization in C++26.
Loading...
Searching...
No Matches
canonical_emission.hpp
Go to the documentation of this file.
1/*
2 * Copyright © 2025-2026 Akreon LLC
3 * SPDX-License-Identifier: Apache-2.0
4 */
5
6#pragma once
7
8#include "akreon/linalg/affine/affine_map.hpp"
11
12namespace conic {
13
22
32template <affine::AffineMapLike CoordMap, typename ConeTuple,
33 affine::AffineMapLike EqMap, typename Trace = EmptyTrace>
35 using Tuple = linalg::remove_cvref_t<ConeTuple>;
36
37 static constexpr std::size_t local_coord_rows =
38 linalg::mat_rows_v<affine::affine_mat_t<CoordMap>>;
39 static constexpr std::size_t local_coord_cols =
40 linalg::mat_cols_v<affine::affine_mat_t<CoordMap>>;
41 static constexpr std::size_t cone_count = cone_tuple_num_cones_v<Tuple>;
42 static constexpr std::size_t local_cone_dim =
43 cone_tuple_local_cone_dim_v<Tuple>;
44 static constexpr std::size_t local_eq_rows =
45 linalg::mat_rows_v<affine::affine_mat_t<EqMap>>;
46 static constexpr std::size_t local_eq_cols =
47 linalg::mat_cols_v<affine::affine_mat_t<EqMap>>;
48
56 constexpr explicit LocalEmission(const CoordMap& coord_map_in,
57 const Tuple& cones_in,
58 const EqMap& eq_map_in)
59 : local_coord_map(coord_map_in), local_cones(cones_in),
60 local_eq_map(eq_map_in) {}
61
63 CoordMap local_coord_map;
64 ConeTuple local_cones;
66 Trace trace;
67};
68
76template <affine::AffineMapLike EqMap, typename Trace = EmptyTrace>
78 static constexpr std::size_t local_eq_rows =
79 linalg::mat_rows_v<affine::affine_mat_t<EqMap>>;
80 static constexpr std::size_t local_eq_cols =
81 linalg::mat_cols_v<affine::affine_mat_t<EqMap>>;
82
83 constexpr explicit LocalEqualityEmission(const EqMap& eq_map_in)
84 : local_eq_map(eq_map_in) {}
85
88 Trace trace;
89};
90
96template <typename CoordMap, typename ConeTuple, typename EqMap>
97LocalEmission(const CoordMap&, const ConeTuple&, const EqMap&)
99
101template <typename CoordMap, typename ConeTuple, typename EqMap, typename Trace>
102LocalEmission(const CoordMap&, const ConeTuple&, const EqMap&, const Trace&)
104
106template <typename EqMap>
108
110template <typename EqMap, typename Trace>
111LocalEqualityEmission(const EqMap&, const Trace&)
113
115template <typename Emission>
117
119template <affine::AffineMapLike CoordMap, typename ConeTuple,
120 affine::AffineMapLike EqMap, typename Trace>
121struct emission_traits<LocalEmission<CoordMap, ConeTuple, EqMap, Trace>> {
122 using LocalCoordinateMap = CoordMap;
123 using Cones = ConeTuple;
124 using LocalEqualityMap = EqMap;
125 using TraceT = Trace;
126
127 static constexpr std::size_t LocalCoordRows =
129 static constexpr std::size_t LocalCoordCols =
131 static constexpr std::size_t NumCones =
133 static constexpr std::size_t LocalConeDim =
135 static constexpr std::size_t LocalEqRows =
137 static constexpr std::size_t LocalEqCols =
139};
140
142template <affine::AffineMapLike EqMap, typename Trace>
144 using LocalEqualityMap = EqMap;
145 using TraceT = Trace;
146
147 static constexpr std::size_t LocalEqRows =
149 static constexpr std::size_t LocalEqCols =
151};
152
154template <typename Emission>
155concept LocalEmissionLike = requires(const Emission& emission) {
156 { emission.local_coord_map };
157 { emission.local_cones };
158 { emission.local_eq_map };
159 { emission.trace };
160};
161
163template <typename Emission>
165 !LocalEmissionLike<Emission> && requires(const Emission& emission) {
166 { emission.local_eq_map };
167 { emission.trace };
168 };
169
170template <typename Emission>
172 linalg::remove_cvref_t<Emission>>::LocalCoordinateMap;
173
174template <typename Emission>
177
178template <typename Emission>
180 linalg::remove_cvref_t<Emission>>::LocalEqualityMap;
181
182template <typename Emission>
185
186template <typename Emission>
187inline constexpr std::size_t emission_local_coord_rows_v =
189
190template <typename Emission>
191inline constexpr std::size_t emission_local_coord_cols_v =
193
194template <typename Emission>
195inline constexpr std::size_t emission_num_cones_v =
197
198template <typename Emission>
199inline constexpr std::size_t emission_local_cone_dim_v =
201
202template <typename Emission>
203inline constexpr std::size_t emission_local_eq_rows_v =
205
206template <typename Emission>
207inline constexpr std::size_t emission_local_eq_cols_v =
209
210template <typename Emission>
212
213template <typename Emission>
215
216template <typename Emission>
217inline constexpr std::size_t emission_coord_rows_v =
218 emission_local_coord_rows_v<Emission>;
219
220template <typename Emission>
221inline constexpr std::size_t emission_coord_cols_v =
222 emission_local_coord_cols_v<Emission>;
223
224template <typename Emission>
225inline constexpr std::size_t emission_cone_dim_v =
226 emission_local_cone_dim_v<Emission>;
227
228template <typename Emission>
229inline constexpr std::size_t emission_eq_rows_v =
230 emission_local_eq_rows_v<Emission>;
231
232template <typename Emission>
233inline constexpr std::size_t emission_eq_cols_v =
234 emission_local_eq_cols_v<Emission>;
235
236} // namespace conic
Concept for fixed-size atom-local canonical emission bundles.
Concept for fixed-size atom-local equality emission bundles.
constexpr std::size_t emission_eq_rows_v
typename emission_traits< linalg::remove_cvref_t< Emission > >::Cones emission_cones_t
constexpr std::size_t emission_coord_rows_v
constexpr std::size_t emission_local_coord_rows_v
emission_local_coord_map_t< Emission > emission_coord_map_t
constexpr std::size_t emission_local_coord_cols_v
constexpr std::size_t emission_eq_cols_v
constexpr std::size_t emission_cone_dim_v
typename emission_traits< linalg::remove_cvref_t< Emission > >::LocalCoordinateMap emission_local_coord_map_t
constexpr std::size_t emission_local_eq_cols_v
typename emission_traits< linalg::remove_cvref_t< Emission > >::TraceT emission_trace_t
constexpr std::size_t emission_local_cone_dim_v
constexpr std::size_t emission_coord_cols_v
emission_local_eq_map_t< Emission > emission_eq_map_t
constexpr std::size_t emission_local_eq_rows_v
constexpr std::size_t emission_num_cones_v
typename emission_traits< linalg::remove_cvref_t< Emission > >::LocalEqualityMap emission_local_eq_map_t
CanonicalTrace<> EmptyCanonicalTrace
Atom-local canonical emission bundle.
constexpr LocalEmission(const CoordMap &coord_map_in, const Tuple &cones_in, const EqMap &eq_map_in)
CTOR.
EqMap local_eq_map
Local equality map.
static constexpr std::size_t local_coord_rows
CoordMap local_coord_map
public member vars
static constexpr std::size_t local_eq_rows
static constexpr std::size_t cone_count
Trace trace
Trace object.
static constexpr std::size_t local_cone_dim
static constexpr std::size_t local_coord_cols
linalg::remove_cvref_t< ConeTuple > Tuple
ConeTuple local_cones
Local cones in emission.
static constexpr std::size_t local_eq_cols
Atom-local equality emission bundle.
constexpr LocalEqualityEmission(const EqMap &eq_map_in)
EqMap local_eq_map
public member vars
static constexpr std::size_t local_eq_rows
static constexpr std::size_t local_eq_cols
Base traits for atom-local canonical emissions.
Compile-time canonicalization trace.