Loading...
Searching...
No Matches
dataset.h
Go to the documentation of this file.
1// SPDX-License-Identifier: AGPL-3.0-only
2// Copyright (C) 2026 Artificial Intelligence Techniques, S.L. and Roberto López González
3
4#pragma once
5
12
13namespace opennn
14{
15
17
19{
20 static const EnumMap<SampleRole> map{
21 {SampleRole::Training, "Training"},
22 {SampleRole::Validation, "Validation"},
23 {SampleRole::Testing, "Testing"},
24 {SampleRole::None, "None"}
25 };
26 return map;
27}
28
29inline const string& sample_role_to_string(SampleRole role)
30{
31 return sample_role_map().to_string(role);
32}
33
34inline SampleRole string_to_sample_role(string_view name)
35{
36 if (name == "0") return SampleRole::Training;
37 if (name == "1") return SampleRole::Validation;
38 if (name == "2") return SampleRole::Testing;
39 if (name == "3") return SampleRole::None;
40 return sample_role_map().from_string(name);
41}
42
43enum class Shuffle { No, Yes };
44
45class TokenizerOperator;
46
48{
49
50public:
51
52 enum class Codification { UTF8, SHIFT_JIS };
53
54 virtual ~Dataset() = default;
55
58
59 virtual Index get_samples_number() const noexcept { return ssize(sample_roles); }
60
61 Index get_samples_number(SampleRole role_type) const { return ranges::count(active_sample_roles(), role_type); }
62 Index get_samples_number(string_view role) const { return get_samples_number(string_to_sample_role(role)); }
63
65
66 vector<Index> get_sample_indices(SampleRole) const;
67 vector<Index> get_sample_indices(string_view role) const { return get_sample_indices(string_to_sample_role(role)); }
68
69 vector<Index> get_used_sample_indices() const;
70
71 const vector<SampleRole>& get_sample_roles() const noexcept { return sample_roles; }
72
73 void set_fold_split(const vector<Index>& training, const vector<Index>& validation);
74 void clear_fold_split() noexcept { fold_split_roles.reset(); }
75
76 Index get_variables_number() const noexcept { return variables.size(); }
78 Index get_variables_number(string_view role) const { return get_variables_number(string_to_variable_role(role)); }
80
81 const vector<Variable>& get_variables() const noexcept { return variables; }
82 vector<Variable> get_variables(VariableRole) const;
83 vector<Variable> get_variables(string_view role) const { return get_variables(string_to_variable_role(role)); }
84
85 Index get_variable_index(const string&) const;
86 Index get_variable_index(const Index) const;
87
88 vector<Index> get_variable_indices(VariableRole) const;
89 vector<Index> get_variable_indices(string_view role) const { return get_variable_indices(string_to_variable_role(role)); }
90 vector<Index> get_used_variables_indices() const;
91
92 vector<string> get_variable_names() const;
93 vector<string> get_variable_names(VariableRole) const;
94 vector<string> get_variable_names(string_view role) const { return get_variable_names(string_to_variable_role(role)); }
95
96 VariableType get_variable_type(const Index index) const { return variables[index].type; }
97
98 Index get_features_number() const;
100 Index get_features_number(string_view role) const { return get_features_number(string_to_variable_role(role)); }
101
102 vector<string> get_feature_names() const;
103 vector<string> get_feature_names(VariableRole) const;
104 vector<string> get_feature_names(string_view role) const { return get_feature_names(string_to_variable_role(role)); }
105
106 virtual vector<Variable> get_model_input_variables() const
107 {
109 }
110
111 virtual bool sample_order_matters() const noexcept { return false; }
112
113 virtual MatrixR calculate_input_target_correlation_values() const { throw runtime_error("Dataset does not support input-target correlations."); }
115
116 vector<vector<Index>> get_feature_indices() const;
117 vector<Index> get_feature_indices(const Index) const;
118 vector<Index> get_feature_indices(VariableRole) const;
119 vector<Index> get_feature_indices(string_view role) const { return get_feature_indices(string_to_variable_role(role)); }
120 vector<Index> get_used_feature_indices() const;
121
123 Shape get_shape(string_view role) const { return get_shape(string_to_variable_role(role)); }
124
125 void get_batches(const vector<Index>&, Index, Shuffle, vector<vector<Index>>&,
126 optional<unsigned> shuffle_seed = nullopt) const;
127
128 const vector<vector<string>>& get_data_file_preview() const noexcept { return data_file_preview; }
129
130 const filesystem::path& get_data_path() const noexcept { return data_path; }
131
132 void set_cache_directory(const filesystem::path& new_cache_directory) { cache_directory = new_cache_directory; }
133
134 StorageMode get_storage_mode() const noexcept { return storage_mode; }
136
137 string get_separator_string() const;
138 string get_separator_name() const;
139
141
142 bool get_display() const noexcept { return display; }
143
144 bool is_empty() const noexcept { return get_samples_number() == 0; }
145
146 Shape get_input_shape() const noexcept { return input_shape; }
147 Shape get_target_shape() const noexcept { return target_shape; }
148
149 void record_memory(const string& stage) const;
150
151 const MatrixR& get_data() const noexcept { return data; }
152 void set_data(const MatrixR&);
154 void set_data_constant(float new_value) { invalidate_data(); data.setConstant(new_value); }
155
158 {
159 data_device.resize_bytes(0, Device::CUDA);
161 }
162 bool is_device_resident() const noexcept { return data_device.data() != nullptr; }
163 bool requests_device_residency() const noexcept
164 {
166 }
167 bool uses_device_residency() const noexcept
168 {
169 return is_device_resident();
170 }
171 const float* get_device_data() const { return data_device.as<float>(); }
172 Index get_device_data_columns() const noexcept { return device_data_columns; }
173
176 const FeatureScaling&,
177 Index);
178 virtual void clear_training_scaling() noexcept {}
179
180 virtual const TokenizerOperator* get_training_tokenizer() const { return nullptr; }
182 {
183 return role == VariableRole::Input ? get_training_tokenizer() : nullptr;
184 }
185
187 void set_sample_roles(string_view role) { set_sample_roles(string_to_sample_role(role)); }
188
190 void set_sample_role(Index index, string_view role) { set_sample_role(index, string_to_sample_role(role)); }
191
192 void set_sample_roles(const vector<string>&);
193 void set_sample_roles(const vector<Index>&, SampleRole);
194 void set_sample_roles(const vector<Index>& indices, string_view role)
195 {
197 }
198
201
202 void set_variable_roles(const vector<string>&);
203
204 void set_variable_indices(const vector<Index>&, const vector<Index>&);
206
208 void set_variable_role(Index index, string_view role) { set_variable_role(index, string_to_variable_role(role)); }
209 void set_variable_role(const string&, VariableRole);
210 void set_variable_role(const string& name, string_view role)
211 {
213 }
214
215 void set_variable_names(const vector<string>&);
216
217 void set_variables_number(const Index new_size) { variables.resize(new_size); }
218
221
223 void set_shape(string_view role, const Shape& shape) { set_shape(string_to_variable_role(role), shape); }
224 virtual void resize_input_shape(Index input_features_count) { set_shape(VariableRole::Input, {input_features_count}); }
225 virtual void set_data_path(const filesystem::path& new_data_path) { data_path = new_data_path; }
227 virtual void set_storage_mode(const string&);
228
229 void set_has_header(bool new_has_header) { has_header = new_has_header; }
230 void set_has_ids(bool new_has_ids) { has_sample_ids = new_has_ids; }
231
232 bool get_header_line() const { return has_header; }
233 bool get_has_sample_ids() const { return has_sample_ids; }
234 const vector<string>& get_sample_ids() const { return sample_ids; }
235
237
239 {
240 return ranges::any_of(get_variables(),
241 [](const Variable& variable) { return variable.type == VariableType::Categorical; });
242 }
243
244 void set_separator(const Separator& new_separator) { separator = new_separator; }
245 void set_separator_string(const string&);
246 void set_separator_name(const string&);
247
248 void set_codification(const Codification& new_codification) { codification = new_codification; }
249 void set_codification(const string&);
250
251 void set_display(bool new_display) { display = new_display; }
252
254
255 void split_samples(const float training_ratio = 0.6f,
256 float validation_ratio = 0.2f,
257 float testing_ratio = 0.2f,
258 bool shuffle = true);
259
260 void split_samples_sequential(const float training_ratio = 0.6f,
261 float validation_ratio = 0.2f,
262 float testing_ratio = 0.2f);
263
264 void split_samples_random(const float training_ratio = 0.6f,
265 float validation_ratio = 0.2f,
266 float testing_ratio = 0.2f);
267
268 virtual void from_JSON(const JsonDocument&) = 0;
269 virtual void to_JSON(JsonWriter&) const {}
270
271 virtual bool has_nan() const { return false; }
272
273 virtual void scrub_missing_values() {}
274
275 virtual VectorI calculate_target_distribution() const { return {}; }
276
277 pair<Index, Index> count_binary_targets(const string& sample_role) const;
278
279 void save(const filesystem::path&) const;
280 void load(const filesystem::path&);
281
282 virtual void fill_inputs(const vector<Index>&,
283 const vector<Index>&,
284 float*,
285 FillMode,
286 ColumnContiguity column_contiguity = ColumnContiguity::Unknown) const;
287
288 virtual void fill_decoder(const vector<Index>&,
289 const vector<Index>&,
290 float*,
291 FillMode,
292 ColumnContiguity column_contiguity = ColumnContiguity::Unknown) const;
293
294 virtual void fill_targets(const vector<Index>&,
295 const vector<Index>&,
296 float*,
297 FillMode,
298 ColumnContiguity column_contiguity = ColumnContiguity::Unknown) const;
299
300 virtual bool supports_bf16_inputs() const { return true; }
301
303
304 virtual void fill_batch(Batch&,
305 const vector<Index>& sample_indices,
306 const FeatureSelection&,
307 FillMode) const;
308
309 // Whether fill_batch will gather this batch on the device rather than on
310 // the host. Residency alone does not decide it, so anything that plans
311 // around the device path has to ask this and not is_device_resident().
312 bool can_device_gather(const Batch&, const FeatureSelection&) const;
313
314protected:
315
316 Dataset() = default;
317
319 const vector<Index>& sample_indices,
320 const FeatureSelection&,
321 FillMode) const;
322
324 const vector<Index>& sample_indices,
325 const FeatureSelection&) const;
326
327 void read_data_file_preview(const vector<string_view>&, char, bool has_quotes = false);
328 void check_separators(string_view) const;
330 virtual void resize_data_from_JSON(Index) {}
331 virtual void on_used_samples_changed() {}
332
333 void require_in_memory_data(string_view what) const
334 {
336 "{} is not available with BinaryFile storage; it needs the data matrix in memory.",
337 what);
338 }
339
341
343 // Stages Input columns followed by Target columns; Decoder inputs are unsupported.
345
346 // Call before replacing or editing host data, including reloads and preprocessing.
352
354
357
361
362 vector<SampleRole> sample_roles;
363 vector<string> sample_ids;
364
365 optional<vector<SampleRole>> fold_split_roles;
366
367 const vector<SampleRole>& active_sample_roles() const noexcept
369
370 vector<Variable> variables;
371
372 filesystem::path data_path;
373
374 filesystem::path cache_directory;
375
377 bool has_header = false;
378 bool has_sample_ids = false;
380 vector<vector<string>> data_file_preview;
381
382 bool display = true;
383
387
390
391 virtual void missing_values_from_JSON(const Json*) {}
392
393 void write_json_header(JsonWriter&, initializer_list<pair<const char*, Json>>) const;
394
396
397 void read_json_blocks(const Json*);
398};
399
401{
403
404 FoldScope(Dataset& dataset, const vector<Index>& training, const vector<Index>& validation)
405 : dataset(dataset) { dataset.set_fold_split(training, validation); }
406
407 ~FoldScope() { dataset.clear_fold_split(); }
408
409 FoldScope(const FoldScope&) = delete;
410 FoldScope& operator=(const FoldScope&) = delete;
411};
412
413}
Definition dataset.h:48
virtual void missing_values_from_JSON(const Json *)
Definition dataset.h:391
void set_variable_role(const string &, VariableRole)
vector< string > get_feature_names() const
virtual FeatureScaling calculate_used_feature_scaling(VariableRole) const
Dataset()=default
void set_variable_indices(const vector< Index > &, const vector< Index > &)
bool uses_device_residency() const noexcept
Definition dataset.h:167
void invalidate_data()
Definition dataset.h:347
void preview_data_to_JSON(JsonWriter &) const
void set_input_variables_unused()
void set_variables_number(const Index new_size)
Definition dataset.h:217
optional< vector< SampleRole > > fold_split_roles
Definition dataset.h:365
vector< Index > get_used_variables_indices() const
void split_samples_random(const float training_ratio=0.6f, float validation_ratio=0.2f, float testing_ratio=0.2f)
void set_variable_role(Index index, string_view role)
Definition dataset.h:208
void set_shape(VariableRole, const Shape &)
void set_separator(const Separator &new_separator)
Definition dataset.h:244
virtual void fill_batch(Batch &, const vector< Index > &sample_indices, const FeatureSelection &, FillMode) const
vector< string > get_feature_names(string_view role) const
Definition dataset.h:104
Codification codification
Definition dataset.h:379
void set_display(bool new_display)
Definition dataset.h:251
bool has_header
Definition dataset.h:377
string get_separator_name() const
void set_sample_roles(const vector< string > &)
virtual vector< Variable > get_model_input_variables() const
Definition dataset.h:106
MatrixR data
Definition dataset.h:353
void set_data(const MatrixR &)
Index device_data_columns
Definition dataset.h:356
vector< Index > get_sample_indices(string_view role) const
Definition dataset.h:67
Shape target_shape
Definition dataset.h:359
bool is_device_resident() const noexcept
Definition dataset.h:162
void set_sample_roles(SampleRole)
bool get_has_sample_ids() const
Definition dataset.h:233
virtual void fill_targets(const vector< Index > &, const vector< Index > &, float *, FillMode, ColumnContiguity column_contiguity=ColumnContiguity::Unknown) const
const vector< string > & get_sample_ids() const
Definition dataset.h:234
bool has_sample_ids
Definition dataset.h:378
void split_samples_sequential(const float training_ratio=0.6f, float validation_ratio=0.2f, float testing_ratio=0.2f)
virtual void fill_decoder(const vector< Index > &, const vector< Index > &, float *, FillMode, ColumnContiguity column_contiguity=ColumnContiguity::Unknown) const
void set_codification(const Codification &new_codification)
Definition dataset.h:248
Shape get_shape(string_view role) const
Definition dataset.h:123
void upload_device_matrix(const MatrixR &)
void set_data(MatrixR &&)
Index get_samples_number(string_view role) const
Definition dataset.h:62
Index get_variable_index(const string &) const
Shape decoder_shape
Definition dataset.h:360
virtual bool sample_order_matters() const noexcept
Definition dataset.h:111
void load(const filesystem::path &)
vector< Index > get_feature_indices(string_view role) const
Definition dataset.h:119
Shape get_target_shape() const noexcept
Definition dataset.h:147
void set_codification(const string &)
const vector< SampleRole > & get_sample_roles() const noexcept
Definition dataset.h:71
void upload_device_samples()
virtual void resize_data_from_JSON(Index)
Definition dataset.h:330
void set_variable_roles(string_view role)
Definition dataset.h:220
void set_fold_split(const vector< Index > &training, const vector< Index > &validation)
void set_sample_roles(const vector< Index > &, SampleRole)
Index get_variables_number(string_view role) const
Definition dataset.h:78
string get_codification_string() const
void fill_batch_host(Batch &, const vector< Index > &sample_indices, const FeatureSelection &, FillMode) const
vector< string > get_variable_names(VariableRole) const
Index get_variable_index(const Index) const
virtual void clear_training_scaling() noexcept
Definition dataset.h:178
vector< string > sample_ids
Definition dataset.h:363
Shape get_input_shape() const noexcept
Definition dataset.h:146
vector< SampleRole > sample_roles
Definition dataset.h:362
void set_variable_roles(const vector< string > &)
vector< string > get_variable_names() const
virtual void from_JSON(const JsonDocument &)=0
void set_variable_role(const string &name, string_view role)
Definition dataset.h:210
vector< Index > get_feature_indices(VariableRole) const
bool get_display() const noexcept
Definition dataset.h:142
void set_variable_roles(VariableRole)
void get_batches(const vector< Index > &, Index, Shuffle, vector< vector< Index > > &, optional< unsigned > shuffle_seed=nullopt) const
vector< vector< Index > > get_feature_indices() const
virtual const TokenizerOperator * get_training_tokenizer() const
Definition dataset.h:180
Codification
Definition dataset.h:52
@ SHIFT_JIS
Definition dataset.h:52
@ UTF8
Definition dataset.h:52
vector< Variable > get_variables(string_view role) const
Definition dataset.h:83
Index get_used_samples_number() const
Definition dataset.h:64
void variables_from_JSON(const Json *)
const float * get_device_data() const
Definition dataset.h:171
StorageMode get_storage_mode() const noexcept
Definition dataset.h:134
void set_default_variable_roles()
Index get_device_data_columns() const noexcept
Definition dataset.h:172
void set_has_ids(bool new_has_ids)
Definition dataset.h:230
void set_variable_names(const vector< string > &)
bool get_header_line() const
Definition dataset.h:232
Index get_variables_number(VariableRole) const
virtual const TokenizerOperator * get_training_tokenizer(VariableRole role) const
Definition dataset.h:181
vector< Index > get_feature_indices(const Index) const
Separator separator
Definition dataset.h:376
bool requests_device_residency() const noexcept
Definition dataset.h:163
bool can_device_gather(const Batch &, const FeatureSelection &) const
void samples_from_JSON(const Json *)
virtual void on_used_samples_changed()
Definition dataset.h:331
Index get_samples_number(SampleRole role_type) const
Definition dataset.h:61
vector< Variable > variables
Definition dataset.h:370
virtual VectorI calculate_target_distribution() const
Definition dataset.h:275
void set_default_variable_names()
vector< Index > get_used_feature_indices() const
void set_shape(string_view role, const Shape &shape)
Definition dataset.h:223
vector< Index > get_variable_indices(VariableRole) const
void set_sample_roles(string_view role)
Definition dataset.h:187
virtual void set_storage_mode(StorageMode)
vector< vector< string > > data_file_preview
Definition dataset.h:380
virtual void enable_device_residency()
vector< Variable > get_variables(VariableRole) const
bool has_categorical_variables() const
Definition dataset.h:238
void set_sample_role(Index, SampleRole)
bool has_validation() const
Definition dataset.h:253
void set_variable_role(Index, VariableRole)
const MatrixR & get_data() const noexcept
Definition dataset.h:151
const vector< Variable > & get_variables() const noexcept
Definition dataset.h:81
vector< Index > get_variable_indices(string_view role) const
Definition dataset.h:89
Shape input_shape
Definition dataset.h:358
Shape get_shape(VariableRole) const
void set_separator_string(const string &)
void write_json_footer(JsonWriter &) const
string get_storage_mode_string() const
const filesystem::path & get_data_path() const noexcept
Definition dataset.h:130
virtual Index get_samples_number() const noexcept
Definition dataset.h:59
void set_separator_name(const string &)
VectorI filter_data(const VectorR &, const VectorR &)
filesystem::path cache_directory
Definition dataset.h:374
virtual bool has_nan() const
Definition dataset.h:271
Buffer data_device
Definition dataset.h:355
virtual ~Dataset()=default
vector< Index > get_used_sample_indices() const
virtual void resize_input_shape(Index input_features_count)
Definition dataset.h:224
Index get_used_variables_number() const
void set_data_constant(float new_value)
Definition dataset.h:154
DeviceGather & start_device_gather(Batch &, const vector< Index > &sample_indices, const FeatureSelection &) const
vector< string > get_feature_names(VariableRole) const
const vector< vector< string > > & get_data_file_preview() const noexcept
Definition dataset.h:128
void samples_to_JSON(JsonWriter &) const
void set_cache_directory(const filesystem::path &new_cache_directory)
Definition dataset.h:132
void read_data_file_preview(const vector< string_view > &, char, bool has_quotes=false)
void set_sample_role(Index index, string_view role)
Definition dataset.h:190
void record_memory(const string &stage) const
virtual MatrixR calculate_input_target_correlation_values() const
Definition dataset.h:113
filesystem::path data_path
Definition dataset.h:372
Separator
Definition dataset.h:56
@ Comma
Definition dataset.h:56
@ Tab
Definition dataset.h:56
@ Semicolon
Definition dataset.h:56
@ Space
Definition dataset.h:56
Index get_features_number(string_view role) const
Definition dataset.h:100
string get_separator_string() const
pair< Index, Index > count_binary_targets(const string &sample_role) const
virtual void set_storage_mode(const string &)
void clear_fold_split() noexcept
Definition dataset.h:74
VariableType get_variable_type(const Index index) const
Definition dataset.h:96
StorageMode storage_mode
Definition dataset.h:340
void read_json_blocks(const Json *)
virtual void to_JSON(JsonWriter &) const
Definition dataset.h:269
vector< Index > get_sample_indices(SampleRole) const
void set_sample_roles(const vector< Index > &indices, string_view role)
Definition dataset.h:194
void split_samples(const float training_ratio=0.6f, float validation_ratio=0.2f, float testing_ratio=0.2f, bool shuffle=true)
void preview_data_from_JSON(const Json *)
void check_separators(string_view) const
bool display
Definition dataset.h:382
void set_has_header(bool new_has_header)
Definition dataset.h:229
Index get_variables_number() const noexcept
Definition dataset.h:76
void require_in_memory_data(string_view what) const
Definition dataset.h:333
StorageMode
Definition dataset.h:57
@ GPUPersistantData
Definition dataset.h:57
@ BinaryFile
Definition dataset.h:57
@ Matrix
Definition dataset.h:57
Index get_features_number(VariableRole) const
virtual FeatureScaling prepare_training_scaling(VariableRole, const FeatureScaling &, Index)
bool is_empty() const noexcept
Definition dataset.h:144
void save(const filesystem::path &) const
void variables_to_JSON(JsonWriter &) const
FeatureSelection get_feature_selection() const
virtual void scrub_missing_values()
Definition dataset.h:273
virtual void fill_inputs(const vector< Index > &, const vector< Index > &, float *, FillMode, ColumnContiguity column_contiguity=ColumnContiguity::Unknown) const
Index get_features_number() const
void write_json_header(JsonWriter &, initializer_list< pair< const char *, Json > >) const
void disable_device_residency()
Definition dataset.h:157
vector< string > get_variable_names(string_view role) const
Definition dataset.h:94
virtual bool supports_bf16_inputs() const
Definition dataset.h:300
virtual void set_data_path(const filesystem::path &new_data_path)
Definition dataset.h:225
const vector< SampleRole > & active_sample_roles() const noexcept
Definition dataset.h:367
Definition enum_map.h:15
const string & to_string(Enum value) const
Definition enum_map.h:31
Definition json.h:75
Definition json.h:92
Definition json.h:24
Definition tokenizer_operator.h:35
Definition training.h:13
Definition configuration.h:10
SampleRole string_to_sample_role(string_view name)
Definition dataset.h:34
FillMode
Definition batch.h:20
@ Validation
Definition batch.h:20
VariableRole string_to_variable_role(string_view name)
Definition variable.h:101
const string & sample_role_to_string(SampleRole role)
Definition dataset.h:29
@ CUDA
Definition configuration.h:12
VariableRole
Definition variable.h:72
@ Input
Definition variable.h:74
void shuffle(VectorB &)
@ Yes
Definition tensor_operations.h:120
@ No
Definition tensor_operations.h:120
const EnumMap< SampleRole > & sample_role_map()
Definition dataset.h:18
SampleRole
Definition dataset.h:16
@ Validation
Definition dataset.h:16
@ None
Definition dataset.h:16
@ Training
Definition dataset.h:16
@ Testing
Definition dataset.h:16
VariableType
Definition variable.h:12
@ Categorical
Definition variable.h:12
@ None
Definition variable.h:12
Shuffle
Definition dataset.h:43
ColumnContiguity
Definition tensor_types.h:747
@ Unknown
Definition tensor_types.h:747
Eigen::Matrix< float, Eigen::Dynamic, 1 > VectorR
Definition opennn_types.h:335
Eigen::Matrix< float, Eigen::Dynamic, Eigen::Dynamic, Layout > MatrixR
Definition opennn_types.h:331
Eigen::Matrix< Index, Eigen::Dynamic, 1 > VectorI
Definition opennn_types.h:336
#define throw_if(condition,...)
Definition opennn_types.h:243
Definition batch.h:60
Definition tensor_types.h:340
Definition batch.h:44
Definition scaling.h:12
Definition batch.h:24
FoldScope(Dataset &dataset, const vector< Index > &training, const vector< Index > &validation)
Definition dataset.h:404
FoldScope(const FoldScope &)=delete
FoldScope & operator=(const FoldScope &)=delete
Dataset & dataset
Definition dataset.h:402
~FoldScope()
Definition dataset.h:407
Definition tensor_types.h:172
Definition variable.h:114
VariableType type
Definition variable.h:129