32 std::numeric_limits<std::size_t>::max();
92template <
typename NodeRecords = std::tuple<>,
93 typename ConeRecords = std::tuple<>,
94 typename EqualityRecords = std::tuple<>>
103template <
typename Trace>
106template <
typename NodeTuple,
typename ConeTuple,
typename EqualityTuple>
113 static constexpr std::size_t NumNodes = std::tuple_size_v<NodeTuple>;
114 static constexpr std::size_t NumCones = std::tuple_size_v<ConeTuple>;
115 static constexpr std::size_t NumEqualities = std::tuple_size_v<EqualityTuple>;
118template <
typename Trace>
122template <
typename Trace>
126template <
typename Trace>
130template <
typename Trace>
134template <
typename Trace>
138template <
typename Trace>
142template <
typename Cone>
147template <linalg::VectorContainer Vec>
152template <linalg::VectorContainer Vec>
157template <linalg::VectorContainer Vec, std::
size_t Dim>
163template <linalg::VectorContainer Vec>
168template <linalg::VectorContainer Vec>
173template <
typename Cone>
177template <
typename ConeTuple, std::
size_t Index>
179 using Tuple = linalg::remove_cvref_t<ConeTuple>;
180 if constexpr (
Index == 0) {
185 conic::cone_dim_t<PrevCone>;
205 return CanonicalTrace<
decltype(std::tuple_cat(trace.nodes, nodes)),
206 decltype(std::tuple_cat(trace.cones, cones)),
207 decltype(std::tuple_cat(trace.equalities, equalities))>{
208 std::tuple_cat(trace.nodes, nodes), std::tuple_cat(trace.cones, cones),
209 std::tuple_cat(trace.equalities, equalities)};
221template <
typename ConeTuple>
225 using Tuple = linalg::remove_cvref_t<ConeTuple>;
232 conic::cone_dim_t<std::tuple_element_t<Is, Tuple>>}...);
235 return make_records(std::make_index_sequence<std::tuple_size_v<Tuple>>{});
typename canonical_trace_traits< linalg::remove_cvref_t< Trace > >::Equalities canonical_trace_equalities_t
constexpr auto make_canonical_cone_records(std::size_t node_id, std::size_t global_cone_start, std::size_t cone_offset_start)
Make canonical cone records for a node-emitted tuple of cones.
typename canonical_trace_traits< linalg::remove_cvref_t< Trace > >::Cones canonical_trace_cones_t
constexpr std::size_t dom_size_v
consteval std::size_t cone_tuple_offset_before_v()
constexpr std::size_t canonical_trace_num_equalities_v
constexpr std::size_t canonical_trace_num_cones_v
AtomType
Atom category used by canonicalization and DCP checks.
constexpr CanonicalConeKind canonical_cone_kind_v
constexpr std::size_t canonical_trace_num_nodes_v
CanonicalConeKind
Cone family emitted into the global cone block.
constexpr auto extend_canonical_trace(const Trace &trace, const NodeRecords &nodes, const ConeRecords &cones, const EqualityRecords &equalities)
Extends canonical trace by tuple concatenation.
constexpr std::size_t canonical_no_parent
Sentinel used when a canonical node does not have a parent node.
typename canonical_trace_traits< linalg::remove_cvref_t< Trace > >::Nodes canonical_trace_nodes_t
Cone slice emitted by one canonical trace node.
CanonicalConeKind cone_kind
std::size_t cone_dim
Number of rows occupied by this cone.
std::size_t cone_offset
Starting row in the global cone vectors.
std::size_t node_id
Node that emitted this cone.
std::size_t local_cone_index
Cone index within the emitting node.
std::size_t global_cone_index
Cone index in the accumulated cone block.
Equality-row slice emitted by one canonical trace node.
std::size_t node_id
Node that emitted these equality rows.
std::size_t row_count
Number of equality rows in this slice.
std::size_t row_offset
Starting row in the global equality vectors.
std::size_t local_eq_index
Equality block index within the emitting node.
Structural atom emitted during canonicalization.
std::size_t node_id
Stable index of this trace node.
std::size_t child_index
Index of this node within its parent's children.
AtomType atom_type
Canonicalization role that produced this node.
std::size_t parent_id
Parent trace node in a richer lineage DAG, or canonical_no_parent for root/flat emissions.
Compile-time canonicalization trace.
NodeRecords nodes
Canonical node records.
EqualityRecords equalities
Equality slice records.
ConeRecords cones
Cone slice records.
static constexpr CanonicalConeKind value