Skip to content

Fixed key/value type #2

Open
Open
@luffy06

Description

@luffy06

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

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions