Open
Description
Hi, we appreciate your excellent work of FINEdex, and we want to evaluate your FINEdex with other learned indexes on other datasets. However, we found that we cannot define an instantiation of FINEdex with other key/value types, such as double
, except for uint64_t
. The compilation cannot be finished due to the following errors. Can you help to fix the issues? Many thanks!
In file included from /....../lib/FINEdex/include/finedex.h:9,
from /....../src/benchmark/benchmark_finedex.cc:4:
/....../lib/FINEdex/include/piecewise_linear_model.h: In instantiation of ‘size_t make_segmentation_data(size_t, size_t, Fin, Fout, lrmodel_type*) [with Fin = aidel::FINEdex<key_t, val_t>::train(const std::vector<_Tp>&, const std::vector<_ValT>&, size_t) [with key_t = double; val_t = double; size_t = long unsigned int]::<lambda(auto:12)>; Fout = aidel::FINEdex<key_t, val_t>::train(const std::vector<_Tp>&, const std::vector<_ValT>&, size_t) [with key_t = double; val_t = double; size_t = long unsigned int]::<lambda(auto:13, auto:14, auto:15, auto:16, auto:17)>; lrmodel_type = LinearRegressionModel<double>; size_t = long unsigned int]’:
/....../lib/FINEdex/include/finedex_impl.h:43:49: required from ‘aidel::FINEdex<key_t, val_t>::train(const std::vector<_Tp>&, const std::vector<_ValT>&, size_t) [with key_t = double; val_t = double; size_t = long unsigned int]::<lambda(auto:9, auto:10, auto:11)> [with auto:9 = long unsigned int; auto:10 = aidel::FINEdex<key_t, val_t>::train(const std::vector<_Tp>&, const std::vector<_ValT>&, size_t) [with key_t = double; val_t = double; size_t = long unsigned int]::<lambda(auto:12)>; auto:11 = aidel::FINEdex<key_t, val_t>::train(const std::vector<_Tp>&, const std::vector<_ValT>&, size_t) [with key_t = double; val_t = double; size_t = long unsigned int]::<lambda(auto:13, auto:14, auto:15, auto:16, auto:17)>; size_t = long unsigned int]’
/....../lib/FINEdex/include/finedex_impl.h:53:25: required from ‘void aidel::FINEdex<key_t, val_t>::train(const std::vector<_Tp>&, const std::vector<_ValT>&, size_t) [with key_t = double; val_t = double; size_t = long unsigned int]’
/....../src/benchmark/benchmark_finedex.cc:150:12: required from ‘void TestFINEdex() [with KT = double; VT = double]’
/....../src/benchmark/benchmark_finedex.cc:249:23: required from here
/....../lib/FINEdex/include/piecewise_linear_model.h:358:31: error: conversion from ‘CanonicalSegment<double,[...]>’ to non-scalar type ‘CanonicalSegment<long unsigned int,[...]>’ requested
358 | canonical_segment cs = opt.get_segment();
| ^~
/....../lib/FINEdex/include/piecewise_linear_model.h:379:23: error: conversion from ‘CanonicalSegment<double,[...]>’ to non-scalar type ‘CanonicalSegment<long unsigned int,[...]>’ requested
379 | canonical_segment cs = opt.get_segment();
| ^~
/....../lib/FINEdex/include/piecewise_linear_model.h: In instantiation of ‘OptimalPiecewiseLinearModel<X, Y>::Slope OptimalPiecewiseLinearModel<X, Y>::Point::operator-(const OptimalPiecewiseLinearModel<X, Y>::Point&) const [with X = double; Y = long unsigned int]’:
/....../lib/FINEdex/include/piecewise_linear_model.h:139:36: required from ‘bool OptimalPiecewiseLinearModel<X, Y>::add_point(const X&, const Y&) [with X = double; Y = long unsigned int]’
/....../lib/FINEdex/include/piecewise_linear_model.h:345:5: required from ‘size_t make_segmentation_data(size_t, size_t, Fin, Fout, lrmodel_type*) [with Fin = aidel::FINEdex<key_t, val_t>::train(const std::vector<_Tp>&, const std::vector<_ValT>&, size_t) [with key_t = double; val_t = double; size_t = long unsigned int]::<lambda(auto:12)>; Fout = aidel::FINEdex<key_t, val_t>::train(const std::vector<_Tp>&, const std::vector<_ValT>&, size_t) [with key_t = double; val_t = double; size_t = long unsigned int]::<lambda(auto:13, auto:14, auto:15, auto:16, auto:17)>; lrmodel_type = LinearRegressionModel<double>; size_t = long unsigned int]’
/....../lib/FINEdex/include/finedex_impl.h:43:49: required from ‘aidel::FINEdex<key_t, val_t>::train(const std::vector<_Tp>&, const std::vector<_ValT>&, size_t) [with key_t = double; val_t = double; size_t = long unsigned int]::<lambda(auto:9, auto:10, auto:11)> [with auto:9 = long unsigned int; auto:10 = aidel::FINEdex<key_t, val_t>::train(const std::vector<_Tp>&, const std::vector<_ValT>&, size_t) [with key_t = double; val_t = double; size_t = long unsigned int]::<lambda(auto:12)>; auto:11 = aidel::FINEdex<key_t, val_t>::train(const std::vector<_Tp>&, const std::vector<_ValT>&, size_t) [with key_t = double; val_t = double; size_t = long unsigned int]::<lambda(auto:13, auto:14, auto:15, auto:16, auto:17)>; size_t = long unsigned int]’
/....../lib/FINEdex/include/finedex_impl.h:53:25: required from ‘void aidel::FINEdex<key_t, val_t>::train(const std::vector<_Tp>&, const std::vector<_ValT>&, size_t) [with key_t = double; val_t = double; size_t = long unsigned int]’
/....../src/benchmark/benchmark_finedex.cc:150:12: required from ‘void TestFINEdex() [with KT = double; VT = double]’
/....../src/benchmark/benchmark_finedex.cc:249:23: required from here
/....../lib/FINEdex/include/piecewise_linear_model.h:59:27: warning: narrowing conversion of ‘((double)(OptimalPiecewiseLinearModel<double, long unsigned int>::SX)(double)((const OptimalPiecewiseLinearModel<double, long unsigned int>::Point<double, long unsigned int>*)this)->OptimalPiecewiseLinearModel<double, long unsigned int>::Point<double, long unsigned int>::x - ((double)p.OptimalPiecewiseLinearModel<double, long unsigned int>::Point::x))’ from ‘double’ to ‘OptimalPiecewiseLinearModel<double, long unsigned int>::SX’ {aka ‘__int128’} [-Wnarrowing]
59 | return {SX(x) - p.x, y - p.y};
| ~~~~~~^~~~~
make[2]: *** [CMakeFiles/benchmark_finedex.dir/build.make:76: CMakeFiles/benchmark_finedex.dir/src/benchmark/benchmark_finedex.cc.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:289: CMakeFiles/benchmark_finedex.dir/all] Error 2
make: *** [Makefile:91: all] Error 2
Metadata
Metadata
Assignees
Labels
No labels