13template <linalg::RnSpace Space>
17template <linalg::RnSpace Space>
21template <linalg::RnSpace Dom, linalg::RnSpace Codom>
31template <
typename Meta,
typename Child>
40 static_assert(
M ==
N,
"Affine subspace's linear map must be square");
43 using Mat = linalg::Matrix<T, M, N>;
68 return linalg::L2<AmbientVec>()(
A * x -
b) <
tol;
77 const auto rank = linalg::QR(
A).rank();
88 template <
typename Other>
91 other.coord_map == this->coord_map;
106 template <linalg::SquareMatrix TMat>
107 requires(linalg::mat_cols_v<TMat> ==
N &&
108 std::same_as<linalg::matrix_scalar_t<TMat>,
T>)
110 const auto [
U_inv, event] =
111 linalg::MatrixInverse<TMat>()(map.linear_part());
112 static_cast<void>(event);
130 template <AtomType Type, conic::BuilderLike Builder>
132 static_cast<void>(Type);
139 linalg::mat_cols_v<
decltype(
child_coord.linear_part())>;
141 "Convex set domain does not equal the child coordinate "
142 "linear map's codomain in size");
144 const auto eq_map = affine::AffineMap<Mat>(
A,
b).compose(
child_coord);
154template <
typename Mat,
typename Vec,
typename Child>
typename dom_traits< linalg::remove_cvref_t< Dom > >::Space dom_space_t
constexpr std::size_t dom_size_v
linalg::remove_cvref_t< T > atom_decay_t
normalize atom-facing types to a stable internal form.
Atom-local equality emission bundle.
forward declaration of affine subspace
constexpr bool is_equal_impl(const Other &other) const
equality comparison
linalg::Vector< T, M > AmbientVec
alias for ambient vector
constexpr AffineSubspace(const Mat &A_in, const AmbientVec &b_in, const Child &child_in)
CTOR for affine subspace.
constexpr bool contains_impl(const PointT &x, T tol) const
contains function
Mat A
data members for affine subspace
constexpr auto canonicalize_set(const Builder &builder) const
canonicalize impl
linalg::Matrix< T, M, N > Mat
linear map
constexpr bool is_well_formed() const
is well formed checks to see if basis fully spans subspace
constexpr auto transform_impl(const affine::AffineMap< TMat > &map) const
transform
static constexpr std::size_t M
Codomain dimension.
ChildrenT children
Tuple of normalized child atoms.
dom_point_t< Domain > PointT
Point type accepted by the atom domain.
dom_type_t< Domain > T
Scalar field for the atom domain.
static constexpr std::size_t N
Domain dimension.
Domain wrapper with a static sign label.
forward declaration of convex set