Ultra 0.9.4
Loading...
Searching...
No Matches
multi_dataset.h
Go to the documentation of this file.
1
12
13#if !defined(ULTRA_MULTI_DATASET_H)
14#define ULTRA_MULTI_DATASET_H
15
16#include "utility/assert.h"
17#include "utility/misc.h"
18
19#include <array>
20
21namespace ultra::src
22{
23
27/// Data/simulations are categorised into three disjoint sets:
28/// - *training* used directly for learning;
29/// - *validation* used to control overfitting and to measure performance;
30/// - *test* used to estimate generalisation performance.
31///
32enum class dataset_t {training, validation, test};
33
37template<class DAT> concept DataSet = std::ranges::sized_range<DAT>;
42
48template<DataSet D>
50{
51public:
52 /// Constructs an empty multi-dataset.
53 ///
54 /// Each contained dataset is default-constructed. For typical container
55 /// types, this results in empty datasets.
56 multi_dataset() = default;
57
58 // ---- Data access ----
59 [[nodiscard]] const D &selected() const noexcept;
60 [[nodiscard]] D &selected() noexcept;
61 [[nodiscard]] const D &operator[](dataset_t) const noexcept;
62 [[nodiscard]] D &operator[](dataset_t) noexcept;
63 void select(dataset_t) noexcept;
64
65private:
66 // Number of datasets managed by this class.
67 static constexpr std::size_t dataset_count = 3;
68 static_assert(std::to_underlying(dataset_t::test) + 1 == dataset_count,
69 "dataset_t enumerators must be contiguous and zero-based");
70
71 // Storage for the datasets, indexed by `dataset_t`.
72 std::array<D, dataset_count> datasets_;
73
74 // Currently selected dataset.
75 dataset_t selected_ {dataset_t::training};
76}; // class multi_dataset
77
78
84/// evaluates to `false`.
85template<class T> struct is_multi_dataset : std::false_type {};
86template<class T> struct is_multi_dataset<multi_dataset<T>> : std::true_type {};
87
89template<class T> inline constexpr bool is_multi_dataset_v =
91
92
94
95} // namespace ultra::src
96
97#endif // include guard
Definition multi_dataset.h:50
void select(dataset_t) noexcept
Definition multi_dataset.h:84
const D & selected() const noexcept
Definition multi_dataset.h:27
Definition multi_dataset.h:37
dataset_t
Definition multi_dataset.h:32
constexpr bool is_multi_dataset_v
Convenience variable template for is_multi_dataset.
Definition multi_dataset.h:89
STL namespace.
Definition multi_dataset.h:85