SHOGUN
v3.2.0
|
00001 /* 00002 * This program is free software; you can redistribute it and/or modify 00003 * it under the terms of the GNU General Public License as published by 00004 * the Free Software Foundation; either version 3 of the License, or 00005 * (at your option) any later version. 00006 * 00007 * Copyright (C) 2013 Zhengyang Liu (zhengyangl) 00008 */ 00009 #ifndef __MLDATA_HDF5_FILE_H__ 00010 #define __MLDATA_HDF5_FILE_H__ 00011 00012 #include <shogun/lib/config.h> 00013 00014 #if defined(HAVE_HDF5) && defined( HAVE_CURL) 00015 #include <shogun/lib/common.h> 00016 #include <shogun/io/SGIO.h> 00017 #include <shogun/io/File.h> 00018 #include <shogun/base/SGObject.h> 00019 #include <hdf5.h> 00020 00021 namespace shogun 00022 { 00023 template <class ST> class SGString; 00024 template <class ST> class SGSparseVector; 00025 00032 #define IGNORE_IN_CLASSLIST 00033 IGNORE_IN_CLASSLIST class CMLDataHDF5File : public CFile 00034 { 00035 public: 00037 CMLDataHDF5File(); 00038 00045 CMLDataHDF5File(char* fname, 00046 const char* name=NULL, 00047 const char* url_prefix="http://mldata.org/repository/data/download/"); 00048 00050 virtual ~CMLDataHDF5File(); 00051 00059 virtual void get_vector(bool*& vector, int32_t& len); 00060 virtual void get_vector(int8_t*& vector, int32_t& len); 00061 virtual void get_vector(uint8_t*& vector, int32_t& len); 00062 virtual void get_vector(char*& vector, int32_t& len); 00063 virtual void get_vector(int32_t*& vector, int32_t& len); 00064 virtual void get_vector(uint32_t*& vector, int32_t& len); 00065 virtual void get_vector(float64_t*& vector, int32_t& len); 00066 virtual void get_vector(float32_t*& vector, int32_t& len); 00067 virtual void get_vector(floatmax_t*& vector, int32_t& len); 00068 virtual void get_vector(int16_t*& vector, int32_t& len); 00069 virtual void get_vector(uint16_t*& vector, int32_t& len); 00070 virtual void get_vector(int64_t*& vector, int32_t& len); 00071 virtual void get_vector(uint64_t*& vector, int32_t& len); 00073 00082 virtual void get_matrix( 00083 bool*& matrix, int32_t& num_feat, int32_t& num_vec); 00084 virtual void get_matrix( 00085 uint8_t*& matrix, int32_t& num_feat, int32_t& num_vec); 00086 virtual void get_matrix( 00087 char*& matrix, int32_t& num_feat, int32_t& num_vec); 00088 virtual void get_matrix( 00089 int32_t*& matrix, int32_t& num_feat, int32_t& num_vec); 00090 virtual void get_matrix( 00091 uint32_t*& matrix, int32_t& num_feat, int32_t& num_vec); 00092 virtual void get_matrix( 00093 int64_t*& matrix, int32_t& num_feat, int32_t& num_vec); 00094 virtual void get_matrix( 00095 uint64_t*& matrix, int32_t& num_feat, int32_t& num_vec); 00096 virtual void get_matrix( 00097 float32_t*& matrix, int32_t& num_feat, int32_t& num_vec); 00098 virtual void get_matrix( 00099 float64_t*& matrix, int32_t& num_feat, int32_t& num_vec); 00100 virtual void get_matrix( 00101 floatmax_t*& matrix, int32_t& num_feat, int32_t& num_vec); 00102 virtual void get_matrix( 00103 int16_t*& matrix, int32_t& num_feat, int32_t& num_vec); 00104 virtual void get_matrix( 00105 uint16_t*& matrix, int32_t& num_feat, int32_t& num_vec); 00107 00116 virtual void get_ndarray( 00117 uint8_t*& array, int32_t*& dims, int32_t& num_dims); 00118 virtual void get_ndarray( 00119 char*& array, int32_t*& dims, int32_t& num_dims); 00120 virtual void get_ndarray( 00121 int32_t*& array, int32_t*& dims, int32_t& num_dims); 00122 virtual void get_ndarray( 00123 float32_t*& array, int32_t*& dims, int32_t& num_dims); 00124 virtual void get_ndarray( 00125 float64_t*& array, int32_t*& dims, int32_t& num_dims); 00126 virtual void get_ndarray( 00127 int16_t*& array, int32_t*& dims, int32_t& num_dims); 00128 virtual void get_ndarray( 00129 uint16_t*& array, int32_t*& dims, int32_t& num_dims); 00131 00140 virtual void get_sparse_matrix( 00141 SGSparseVector<bool>*& matrix, int32_t& num_feat, int32_t& num_vec); 00142 virtual void get_sparse_matrix( 00143 SGSparseVector<int8_t>*& matrix, int32_t& num_feat, int32_t& num_vec); 00144 virtual void get_sparse_matrix( 00145 SGSparseVector<uint8_t>*& matrix, int32_t& num_feat, int32_t& num_vec); 00146 virtual void get_sparse_matrix( 00147 SGSparseVector<char>*& matrix, int32_t& num_feat, int32_t& num_vec); 00148 virtual void get_sparse_matrix( 00149 SGSparseVector<int32_t>*& matrix, int32_t& num_feat, int32_t& num_vec); 00150 virtual void get_sparse_matrix( 00151 SGSparseVector<uint32_t>*& matrix, int32_t& num_feat, int32_t& num_vec); 00152 virtual void get_sparse_matrix( 00153 SGSparseVector<int64_t>*& matrix, int32_t& num_feat, int32_t& num_vec); 00154 virtual void get_sparse_matrix( 00155 SGSparseVector<uint64_t>*& matrix, int32_t& num_feat, int32_t& num_vec); 00156 virtual void get_sparse_matrix( 00157 SGSparseVector<int16_t>*& matrix, int32_t& num_feat, int32_t& num_vec); 00158 virtual void get_sparse_matrix( 00159 SGSparseVector<uint16_t>*& matrix, int32_t& num_feat, int32_t& num_vec); 00160 virtual void get_sparse_matrix( 00161 SGSparseVector<float32_t>*& matrix, int32_t& num_feat, int32_t& num_vec); 00162 virtual void get_sparse_matrix( 00163 SGSparseVector<float64_t>*& matrix, int32_t& num_feat, int32_t& num_vec); 00164 virtual void get_sparse_matrix( 00165 SGSparseVector<floatmax_t>*& matrix, int32_t& num_feat, int32_t& num_vec); 00167 00168 00177 virtual void get_string_list( 00178 SGString<bool>*& strings, int32_t& num_str, 00179 int32_t& max_string_len); 00180 virtual void get_string_list( 00181 SGString<int8_t>*& strings, int32_t& num_str, 00182 int32_t& max_string_len); 00183 virtual void get_string_list( 00184 SGString<uint8_t>*& strings, int32_t& num_str, 00185 int32_t& max_string_len); 00186 virtual void get_string_list( 00187 SGString<char>*& strings, int32_t& num_str, 00188 int32_t& max_string_len); 00189 virtual void get_string_list( 00190 SGString<int32_t>*& strings, int32_t& num_str, 00191 int32_t& max_string_len); 00192 virtual void get_string_list( 00193 SGString<uint32_t>*& strings, int32_t& num_str, 00194 int32_t& max_string_len); 00195 virtual void get_string_list( 00196 SGString<int16_t>*& strings, int32_t& num_str, 00197 int32_t& max_string_len); 00198 virtual void get_string_list( 00199 SGString<uint16_t>*& strings, int32_t& num_str, 00200 int32_t& max_string_len); 00201 virtual void get_string_list( 00202 SGString<int64_t>*& strings, int32_t& num_str, 00203 int32_t& max_string_len); 00204 virtual void get_string_list( 00205 SGString<uint64_t>*& strings, int32_t& num_str, 00206 int32_t& max_string_len); 00207 virtual void get_string_list( 00208 SGString<float32_t>*& strings, int32_t& num_str, 00209 int32_t& max_string_len); 00210 virtual void get_string_list( 00211 SGString<float64_t>*& strings, int32_t& num_str, 00212 int32_t& max_string_len); 00213 virtual void get_string_list( 00214 SGString<floatmax_t>*& strings, int32_t& num_str, 00215 int32_t& max_string_len); 00217 00218 virtual void get_matrix(int8_t*&, int32_t&, int32_t&) 00219 { 00220 SG_NOTIMPLEMENTED 00221 } 00222 virtual void get_int8_sparsematrix(shogun::SGSparseVector<signed char>*&, int32_t&, int32_t&) 00223 { 00224 SG_NOTIMPLEMENTED 00225 } 00226 virtual void get_int8_string_list(shogun::SGString<signed char>*&, int32_t&, int32_t&) 00227 { 00228 SG_NOTIMPLEMENTED 00229 } 00230 virtual void set_int8_matrix(const int8_t*, int32_t, int32_t) 00231 { 00232 SG_NOTIMPLEMENTED 00233 } 00234 virtual void set_int8_sparsematrix(const shogun::SGSparseVector<signed char>*, int32_t, int32_t) 00235 { 00236 SG_NOTIMPLEMENTED 00237 } 00238 virtual void set_int8_string_list(const shogun::SGString<signed char>*, int32_t) 00239 { 00240 SG_NOTIMPLEMENTED 00241 } 00242 virtual void set_vector(const int8_t*, int32_t) 00243 { 00244 SG_NOTIMPLEMENTED 00245 } 00246 virtual void set_vector(const uint8_t*, int32_t) 00247 { 00248 SG_NOTIMPLEMENTED 00249 } 00250 virtual void set_vector(const char*, int32_t) 00251 { 00252 SG_NOTIMPLEMENTED 00253 } 00254 virtual void set_vector(const int16_t*, int32_t) 00255 { 00256 SG_NOTIMPLEMENTED 00257 } 00258 virtual void set_vector(const int32_t*, int32_t) 00259 { 00260 SG_NOTIMPLEMENTED 00261 } 00262 virtual void set_vector(const uint32_t*, int32_t) 00263 { 00264 SG_NOTIMPLEMENTED 00265 } 00266 virtual void set_vector(const float32_t*, int32_t) 00267 { 00268 SG_NOTIMPLEMENTED 00269 } 00270 virtual void set_vector(const float64_t*, int32_t){ 00271 SG_NOTIMPLEMENTED 00272 } 00273 virtual void set_vector(const floatmax_t*, int32_t) 00274 { 00275 SG_NOTIMPLEMENTED 00276 } 00277 virtual void set_vector(const uint16_t*, int32_t) 00278 { 00279 SG_NOTIMPLEMENTED 00280 } 00281 virtual void set_vector(const int64_t*, int32_t) 00282 { 00283 SG_NOTIMPLEMENTED 00284 } 00285 virtual void set_vector(const uint64_t*, int32_t) 00286 { 00287 SG_NOTIMPLEMENTED 00288 } 00289 virtual void set_matrix(const uint8_t*, int32_t, int32_t) 00290 { 00291 SG_NOTIMPLEMENTED 00292 } 00293 virtual void set_matrix(const int8_t*, int32_t, int32_t) 00294 { 00295 SG_NOTIMPLEMENTED 00296 } 00297 virtual void set_matrix(const char*, int32_t, int32_t) 00298 { 00299 SG_NOTIMPLEMENTED 00300 } 00301 virtual void set_matrix(const int32_t*, int32_t, int32_t) 00302 { 00303 SG_NOTIMPLEMENTED 00304 } 00305 virtual void set_matrix(const uint32_t*, int32_t, int32_t) 00306 { 00307 SG_NOTIMPLEMENTED 00308 } 00309 virtual void set_matrix(const int64_t*, int32_t, int32_t) 00310 { 00311 SG_NOTIMPLEMENTED 00312 } 00313 virtual void set_matrix(const uint64_t*, int32_t, int32_t) 00314 { 00315 SG_NOTIMPLEMENTED 00316 } 00317 virtual void set_matrix(const float32_t*, int32_t, int32_t) 00318 { 00319 SG_NOTIMPLEMENTED 00320 } 00321 virtual void set_matrix(const float64_t*, int32_t, int32_t) 00322 { 00323 SG_NOTIMPLEMENTED 00324 } 00325 virtual void set_matrix(const floatmax_t*, int32_t, int32_t) 00326 { 00327 SG_NOTIMPLEMENTED 00328 } 00329 virtual void set_matrix(const int16_t*, int32_t, int32_t) 00330 { 00331 SG_NOTIMPLEMENTED 00332 } 00333 virtual void set_matrix(const uint16_t*, int32_t, int32_t) 00334 { 00335 SG_NOTIMPLEMENTED 00336 } 00337 virtual void set_sparse_matrix(const shogun::SGSparseVector<bool>*, int32_t, int32_t) 00338 { 00339 SG_NOTIMPLEMENTED 00340 } 00341 virtual void set_sparse_matrix(const shogun::SGSparseVector<uint8_t>*, int32_t, int32_t) 00342 { 00343 SG_NOTIMPLEMENTED 00344 } 00345 virtual void set_sparse_matrix(const shogun::SGSparseVector<int8_t>*, int32_t, int32_t) 00346 { 00347 SG_NOTIMPLEMENTED 00348 } 00349 virtual void set_sparse_matrix(const shogun::SGSparseVector<char>*, int32_t, int32_t) 00350 { 00351 SG_NOTIMPLEMENTED 00352 } 00353 virtual void set_sparse_matrix(const shogun::SGSparseVector<int32_t>*, int32_t, int32_t) 00354 { 00355 SG_NOTIMPLEMENTED 00356 } 00357 virtual void set_sparse_matrix(const shogun::SGSparseVector<uint32_t>*, int32_t, int32_t) 00358 { 00359 SG_NOTIMPLEMENTED 00360 } 00361 virtual void set_sparse_matrix(const shogun::SGSparseVector<int64_t>*, int32_t, int32_t) 00362 { 00363 SG_NOTIMPLEMENTED 00364 } 00365 virtual void set_sparse_matrix(const shogun::SGSparseVector<uint64_t>*, int32_t, int32_t) 00366 { 00367 SG_NOTIMPLEMENTED 00368 } 00369 virtual void set_sparse_matrix(const shogun::SGSparseVector<int16_t>*, int32_t, int32_t) 00370 { 00371 SG_NOTIMPLEMENTED 00372 } 00373 virtual void set_sparse_matrix(const shogun::SGSparseVector<uint16_t>*, int32_t, int32_t) 00374 { 00375 SG_NOTIMPLEMENTED 00376 } 00377 virtual void set_sparse_matrix(const shogun::SGSparseVector<float32_t>*, int32_t, int32_t) 00378 { 00379 SG_NOTIMPLEMENTED 00380 } 00381 virtual void set_sparse_matrix(const shogun::SGSparseVector<float64_t>*, int32_t, int32_t) 00382 { 00383 SG_NOTIMPLEMENTED 00384 } 00385 virtual void set_sparse_matrix(const shogun::SGSparseVector<floatmax_t>*, int32_t, int32_t) 00386 { 00387 SG_NOTIMPLEMENTED 00388 } 00389 virtual void set_string_list(const shogun::SGString<bool>*, int32_t) 00390 { 00391 SG_NOTIMPLEMENTED 00392 } 00393 virtual void set_string_list(const shogun::SGString<uint8_t>*, int32_t) 00394 { 00395 SG_NOTIMPLEMENTED 00396 } 00397 virtual void set_string_list(const shogun::SGString<int8_t>*, int32_t) 00398 { 00399 SG_NOTIMPLEMENTED 00400 } 00401 virtual void set_string_list(const shogun::SGString<char>*, int32_t) 00402 { 00403 SG_NOTIMPLEMENTED 00404 } 00405 virtual void set_string_list(const shogun::SGString<int32_t>*, int32_t) 00406 { 00407 SG_NOTIMPLEMENTED 00408 } 00409 virtual void set_string_list(const shogun::SGString<uint32_t>*, int32_t) 00410 { 00411 SG_NOTIMPLEMENTED 00412 } 00413 virtual void set_string_list(const shogun::SGString<int16_t>*, int32_t) 00414 { 00415 SG_NOTIMPLEMENTED 00416 } 00417 virtual void set_string_list(const shogun::SGString<uint16_t>*, int32_t) 00418 { 00419 SG_NOTIMPLEMENTED 00420 } 00421 virtual void set_string_list(const shogun::SGString<int64_t>*, int32_t) 00422 { 00423 SG_NOTIMPLEMENTED 00424 } 00425 virtual void set_string_list(const shogun::SGString<uint64_t>*, int32_t) 00426 { 00427 SG_NOTIMPLEMENTED 00428 } 00429 virtual void set_string_list(const shogun::SGString<float32_t>*, int32_t) 00430 { 00431 SG_NOTIMPLEMENTED 00432 } 00433 virtual void set_string_list(const shogun::SGString<float64_t>*, int32_t) 00434 { 00435 SG_NOTIMPLEMENTED 00436 } 00437 virtual void set_string_list(const shogun::SGString<floatmax_t>*, int32_t) 00438 { 00439 SG_NOTIMPLEMENTED 00440 } 00442 virtual const char* get_name() const { return "HDF5File"; } 00443 00444 protected: 00446 void get_boolean_type(); 00447 00456 hid_t get_compatible_type(H5T_class_t t_class, 00457 const TSGDataType* datatype); 00458 00466 void get_dims(hid_t dataset, int32_t*& dims, int32_t& ndims, int64_t& total_elements); 00467 00469 void create_group_hierarchy(); 00470 00471 protected: 00473 hid_t h5file; 00475 hid_t boolean_type; 00476 00478 char *fname; 00479 00481 char *mldata_url; 00482 }; 00483 } 00484 #endif // HAVE_CURL && HAVE_HDF5 00485 #endif //__HDF5_FILE_H__ 00486