13#if !defined(ULTRA_DATAFRAME_H)
14# error "Don't include this file directly, include the specific .h instead"
17#if !defined(ULTRA_DATAFRAME_TCC)
18#define ULTRA_DATAFRAME_TCC
23[[nodiscard]]
inline value_t lexical_cast(value_t v, domain_t d)
27 case d_int:
return lexical_cast<D_INT>(v);
28 case d_double:
return lexical_cast<D_DOUBLE>(v);
29 case d_string:
return lexical_cast<D_STRING>(v);
30 default:
throw exception::data_format(
"Invalid domain for lexical_cast");
35void inplace_trim(T &v)
37 if constexpr (std::same_as<T, std::string>)
40 if constexpr (std::same_as<T, value_t>)
41 if (
auto *p = std::get_if<D_STRING>(&v))
51template<std::ranges::range R>
52example dataframe::to_example(
const R &r)
const
54 Expects(!std::ranges::empty(r));
55 Expects(
static_cast<std::size_t
>(std::ranges::distance(r)) == columns.size());
58 ret.
input.reserve(columns.size() - 1);
60 for (std::size_t i(0);
auto feature : r)
62 if (
const auto domain(columns[i].domain()); domain != d_void)
65 internal::inplace_trim(feature);
69 if (
task() == task_t::classification)
72 ret.
output = internal::lexical_cast(feature, domain);
75 ret.
input.push_back(internal::lexical_cast(feature, domain));
91template<DataframeRow R>
92bool dataframe::read_record(R r, std::optional<std::size_t> output_index,
95 Expects(!std::ranges::empty(r));
97 const std::size_t row_size(std::ranges::distance(r));
99 if (output_index && *output_index >= row_size)
101 ultraWARNING(
"Malformed example {} skipped (wrong column count)",
106 const auto logical_size(
107 internal::normalised_column_count(row_size, output_index));
109 if (logical_size != columns.size())
111 ultraWARNING(
"Malformed example {} skipped (wrong column count)",
116 const internal::normalised_row_view normalised(r, output_index);
118 push_back(to_example(normalised), add_instance);
134template<DataframeMatrix R>
135std::size_t dataframe::read(
const R &container,
params p)
141 if (std::ranges::size(container) <= 1)
144 auto first(std::ranges::begin(container));
151 for (
auto it(std::next(first)); it != std::ranges::end(container); ++it)
160template<DataframeMatrix R> std::size_t dataframe::read(
const R &container)
162 return read(container, {});
177template<DataframeMatrix R> dataframe::dataframe(
const R &t,
params p)
193template<DataframeMatrix R> dataframe::dataframe(
const R &t)
Definition exceptions.h:32
void clear()
Definition dataframe.cc:165
std::size_t size() const noexcept
Definition dataframe.cc:242
task_t task() const noexcept
Definition dataframe.cc:178
bool is_valid() const
Definition dataframe.cc:774
void push_back(src::example, bool=false)
Definition dataframe.cc:288
bool basic_data_type(domain_t d) noexcept
Definition value.cc:40
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
Definition dataframe.h:187
std::optional< std::size_t > output_index
Definition dataframe.h:205
typing data_typing
See typing for details.
Definition dataframe.h:192
Definition dataframe.h:54
value_t output
Definition dataframe.h:57
std::vector< value_t > input
Definition dataframe.h:60