Ultra 0.9.4
Loading...
Searching...
No Matches
columns_info.h
Go to the documentation of this file.
1
12
13#if !defined(ULTRA_COLUMNS_INFO_H)
14#define ULTRA_COLUMNS_INFO_H
15
16#include "kernel/symbol.h"
17#include "kernel/value.h"
18#include "utility/misc.h"
19
20#include <algorithm>
21#include <functional>
22#include <iostream>
23#include <optional>
24#include <random>
25#include <set>
26#include <string>
27#include <vector>
28
29namespace ultra::src
30{
31
49enum class typing {weak, strong};
50
58enum class task_t {classification, regression, unsupervised};
59
72template<class R>
73concept DataframeRow =
74 std::ranges::forward_range<R>
75 && std::ranges::sized_range<R>
76 && std::copyable<R>
77 && (std::same_as<std::ranges::range_value_t<R>, value_t>
78 || std::same_as<std::ranges::range_value_t<R>, std::string>);
79
90template<class R> concept DataframeMatrix =
91 std::ranges::forward_range<R>
92 && std::ranges::sized_range<R>
94
109class columns_info
110{
111public:
114 {
115 public:
116 explicit column_info(const columns_info &,
117 std::string_view = "",
118 domain_t = d_void,
119 const std::set<value_t> & = {});
120
121 [[nodiscard]] const std::string &name() const noexcept;
122 void name(const std::string &);
123
124 [[nodiscard]] domain_t domain() const noexcept;
125 void domain(domain_t);
126
127 [[nodiscard]] const std::set<value_t> &states() const noexcept;
128 void add_state(value_t);
129
130 [[nodiscard]] symbol::category_t category() const;
131
132 private:
133 const columns_info *owner_ {nullptr};
134
135 std::string name_;
136 domain_t domain_;
137 std::set<value_t> states_;
138 };
139
140 // ---- Aliases ----
141 using const_iterator = std::vector<column_info>::const_iterator;
142 using iterator = std::vector<column_info>::iterator;
143 using size_type = std::size_t;
144 using value_type = column_info;
145
146 // ---- Constructors ----
147 columns_info() = default;
148 columns_info(const columns_info &);
149 columns_info(const std::vector<std::pair<std::string, domain_t>> &);
150
151 columns_info &operator=(const columns_info &);
152
153 // ---- Element access ----
154 [[nodiscard]] const column_info &operator[](size_type) const;
155 [[nodiscard]] column_info &operator[](size_type);
156
157 [[nodiscard]] const column_info &operator[](const std::string &) const;
158
159 [[nodiscard]] const column_info &front() const;
160 [[nodiscard]] column_info &front();
161
162 [[nodiscard]] const column_info &back() const;
163 [[nodiscard]] column_info &back();
164
165 // ---- Capacity ----
166 [[nodiscard]] size_type size() const noexcept;
167 [[nodiscard]] bool empty() const noexcept;
168
169 // ---- Iterators ----
170 [[nodiscard]] const_iterator begin() const noexcept;
171 [[nodiscard]] iterator begin() noexcept;
172 [[nodiscard]] const_iterator end() const noexcept;
173 [[nodiscard]] iterator end() noexcept;
174 [[nodiscard]] const_iterator cbegin() const noexcept;
175 [[nodiscard]] const_iterator cend() const noexcept;
176
177 // ---- Modifiers ----
178 void pop_back();
179 void push_back(const column_info &);
180 void push_front(const column_info &);
181
182 // ---- Misc ----
183 void data_typing(typing) noexcept;
184
185 template<DataframeMatrix R>
186 void build(const R &, std::optional<std::size_t>);
187
188 std::set<symbol::category_t> used_categories() const;
189
190 [[nodiscard]] domain_t domain_of_category(symbol::category_t) const;
191
192 [[nodiscard]] task_t task() const noexcept;
193
194 [[nodiscard]] bool is_valid() const;
195
196private:
197 [[nodiscard]] symbol::category_t category(const column_info &) const;
198 [[nodiscard]] domain_t evaluation_domain(const column_info &) const;
199 void settle_task_t();
200
201 std::vector<column_info> cols_ {};
202 typing typing_ {typing::weak};
203
204 task_t task_ {task_t::regression};
205};
206
207#include "columns_info.tcc"
208
209} // namespace ultra::src
210
211#endif // include guard
Information about a single column of the dataset.
Definition columns_info.h:114
domain_t domain() const noexcept
Definition columns_info.cc:62
symbol::category_t category() const
Definition columns_info.cc:109
const std::string & name() const noexcept
Definition columns_info.cc:42
column_info(const columns_info &, std::string_view="", domain_t=d_void, const std::set< value_t > &={})
Definition columns_info.cc:28
void add_state(value_t)
Definition columns_info.cc:95
const std::set< value_t > & states() const noexcept
Definition columns_info.cc:85
std::set< symbol::category_t > used_categories() const
Definition columns_info.cc:432
const column_info & operator[](size_type) const
Definition columns_info.cc:213
void push_front(const column_info &)
Definition columns_info.cc:364
void push_back(const column_info &)
Definition columns_info.cc:353
void pop_back()
Definition columns_info.cc:343
bool is_valid() const
Definition columns_info.cc:460
const column_info & front() const
Definition columns_info.cc:310
domain_t domain_of_category(symbol::category_t) const
Definition columns_info.cc:448
void data_typing(typing) noexcept
Definition columns_info.cc:256
task_t task() const noexcept
Definition columns_info.cc:148
columns_info & operator=(const columns_info &)
Definition columns_info.cc:189
const column_info & back() const
Definition columns_info.cc:326
size_type size() const noexcept
Definition columns_info.cc:264
void build(const R &, std::optional< std::size_t >)
Definition columns_info.h:185
Definition symbol.h:42
unsigned category_t
Definition symbol.h:55
typing
Definition columns_info.h:49
task_t
Definition columns_info.h:58
Definition columns_info.h:90
Definition columns_info.h:73
STL namespace.
std::variant< D_VOID, D_INT, D_DOUBLE, D_STRING, const D_NULLARY *, D_ADDRESS, const D_VARIABLE *, D_IVECTOR > value_t
Definition value.h:54
domain_t
Definition value.h:38