16 #ifndef OPENKALMAN_COLLECTIONS_FROM_STAT_SPACE_HPP 17 #define OPENKALMAN_COLLECTIONS_FROM_STAT_SPACE_HPP 21 #include "coordinates/interfaces/coordinate_descriptor_traits.hpp" 38 template<descriptor T, collections::collection R>
41 template<
typename T,
typename R, std::enable_if_t<descriptor<T> and collections::collection<R>,
int> = 0>
42 constexpr decltype(
auto)
46 if constexpr (stat_dimension_of_v<T> != stdex::dynamic_extent and collections::size_of_v<R> != stdex::dynamic_extent)
47 static_assert(stat_dimension_of_v<T> == collections::size_of_v<R>);
49 if constexpr (euclidean_pattern<T>)
51 return std::forward<R>(stat_data_view);
55 using U = std::decay_t<stdex::unwrap_ref_decay_t<T>>;
57 if constexpr (std::is_same_v<U, T>)
67 template<std::size_t t_i = 0, std::size_t stat_data_view_i = 0,
typename T,
typename R,
typename...Out>
69 from_stat_space_tuple(
const T& t,
const R& stat_data_view, Out...out)
71 if constexpr (t_i < collections::size_of_v<T>)
73 decltype(
auto) t_elem = collections::get<t_i>(t);
75 auto data_view_sub =
collections::views::slice(stat_data_view, std::integral_constant<std::size_t, stat_data_view_i>{}, dim);
77 return from_stat_space_tuple<t_i + 1, stat_data_view_i + values::fixed_value_of_v<decltype(dim)>>(
78 t, stat_data_view, std::move(out)..., std::move(o));
96 template<descriptor_collection T, collections::collection R>
99 template<
typename T,
typename R, std::enable_if_t<descriptor_collection<T> and collections::collection<R>,
int> = 0>
100 constexpr decltype(
auto)
104 if constexpr (stat_dimension_of_v<T> != stdex::dynamic_extent and collections::size_of_v<R> != stdex::dynamic_extent)
105 static_assert(stat_dimension_of_v<T> == collections::size_of_v<R>);
107 if constexpr (stat_dimension_of_v<T> == stdex::dynamic_extent)
109 std::vector<collections::common_collection_type_t<R>> data;
115 #if __cpp_lib_containers_ranges >= 202002L 119 data.insert(data.end(), sd.cbegin(), sd.cend());
127 return detail::from_stat_space_tuple(t, stat_data_view);
Definition for coordinates::euclidean_pattern.
constexpr bool collection
An object describing a collection of objects.
Definition: collection.hpp:32
constexpr detail::concat_adaptor concat
a std::ranges::range_adaptor_closure for a set of concatenated collection objects.
Definition: concat.hpp:196
constexpr auto get_stat_dimension(const Arg &arg)
Get the vector dimension of coordinates::pattern Arg when transformed into statistical space...
Definition: get_stat_dimension.hpp:69
decltype(auto) constexpr to_stat_space(const T &t, R &&data_view)
Maps a range reflecting vector-space data to a corresponding range in a vector space for directional ...
Definition: to_stat_space.hpp:44
decltype(auto) constexpr to_value_type(Arg &&arg)
Convert, if necessary, a fixed or dynamic value to its underlying base type.
Definition: to_value_type.hpp:28
constexpr auto get_dimension(const Arg &arg)
Get the vector dimension of coordinates::pattern Arg.
Definition: get_dimension.hpp:54
Definition for coordinates::descriptor.
The namespace for features relating to coordinates::pattern object.
Definition: compares_with.hpp:25
Inclusion file for collections.
Definition for coordinates::get_stat_dimension.
constexpr detail::slice_adapter slice
a RangeAdapterObject associated with slice_view.
Definition: slice.hpp:364
Traits for coordinates::pattern objects.
Definition: coordinate_descriptor_traits.hpp:36
Definition for coordinates::get_dimension.
decltype(auto) constexpr from_stat_space(const T &t, R &&stat_data_view)
Maps a range in a vector space for directional-statistics back to a range reflecting vector-space dat...
Definition: from_stat_space.hpp:44
Definition for coordinates::stat_dimension_of.
Definition for coordinates::descriptor_collection.