diff --git a/.github/workflows/build_vw_slim.yml b/.github/workflows/build_vw_slim.yml index 3a8f8371340..9acaf124411 100644 --- a/.github/workflows/build_vw_slim.yml +++ b/.github/workflows/build_vw_slim.yml @@ -22,10 +22,45 @@ jobs: - uses: actions/checkout@v1 with: submodules: recursive - - name: Build VW Slim + + - name: Install dependencies + shell: bash + run: | + sudo apt update + sudo apt install -y xxd + + - name: Configure VW Slim shell: bash - run: ./.scripts/linux/build-slim.sh + run: | + rm -rf build + cmake -S . -B build -G Ninja \ + -DBUILD_TESTING=On \ + -DVW_FEAT_FLATBUFFERS=Off \ + -DRAPIDJSON_SYS_DEP=Off \ + -DFMT_SYS_DEP=Off \ + -DSPDLOG_SYS_DEP=Off \ + -DVW_ZLIB_SYS_DEP=Off \ + -DVW_BOOST_MATH_SYS_DEP=Off + + - name: Build VW and VW Slim + shell: bash + run: cmake --build build --target vw_cli_bin vw_slim vw_slim_test + - name: Test VW Slim shell: bash working-directory: build run: ctest --output-on-failure --no-tests=error --tests-regex "VowpalWabbitSlim|ExploreSlim|CommandLineOptionsSlim" --parallel 2 + + - name: Generate test data with new VW executable + shell: bash + working-directory: vowpalwabbit/slim/test/data/ + run: ./generate-data.sh ../../../../build/vowpalwabbit/cli/vw + + - name: Build VW Slim again + shell: bash + run: cmake --build build --target vw_slim vw_slim_test + + - name: Test VW Slim again + shell: bash + working-directory: build + run: ctest --output-on-failure --no-tests=error --tests-regex "VowpalWabbitSlim|ExploreSlim|CommandLineOptionsSlim" --parallel 2 diff --git a/.scripts/linux/build-slim.sh b/.scripts/linux/build-slim.sh deleted file mode 100755 index 04cc7d3f399..00000000000 --- a/.scripts/linux/build-slim.sh +++ /dev/null @@ -1,19 +0,0 @@ -#!/bin/bash -set -e -set -x - -SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" -REPO_DIR=$SCRIPT_DIR/../../ -cd $REPO_DIR - -rm -rf build -cmake -S . -B build -G Ninja \ - -DBUILD_TESTING=On \ - -DVW_FEAT_FLATBUFFERS=Off \ - -DRAPIDJSON_SYS_DEP=Off \ - -DFMT_SYS_DEP=Off \ - -DSPDLOG_SYS_DEP=Off \ - -DVW_ZLIB_SYS_DEP=Off \ - -DVW_BOOST_MATH_SYS_DEP=Off - -cmake --build build --target vw_slim vw_slim_test diff --git a/vowpalwabbit/slim/include/vw/slim/vw_slim_predict.h b/vowpalwabbit/slim/include/vw/slim/vw_slim_predict.h index 0d58099c214..6b8f2bc3574 100644 --- a/vowpalwabbit/slim/include/vw/slim/vw_slim_predict.h +++ b/vowpalwabbit/slim/include/vw/slim/vw_slim_predict.h @@ -44,31 +44,32 @@ class namespace_copy_guard VW::example_predict& _ex; unsigned char _ns; bool _remove_ns; + size_t _old_size; }; class feature_offset_guard { public: - feature_offset_guard(VW::example_predict& ex, uint64_t ft_offset); + feature_offset_guard(VW::example_predict& ex, uint64_t ft_index_offset); ~feature_offset_guard(); private: VW::example_predict& _ex; - uint64_t _old_ft_offset; + uint64_t _old_ft_index_offset; }; -class stride_shift_guard +class feature_scale_guard { public: - stride_shift_guard(VW::example_predict& ex, uint64_t shift); - ~stride_shift_guard(); + feature_scale_guard(VW::example_predict& ex, uint64_t ft_index_scale); + ~feature_scale_guard(); private: VW::example_predict& _ex; - uint64_t _shift; + uint64_t _ft_index_scale; }; -/** +/* * @brief Vowpal Wabbit slim predictor. Supports: regression, multi-class classification and contextual bandits. */ template @@ -152,7 +153,7 @@ class vw_predict } // TODO: take --cb_type dr into account - uint64_t num_weights = 0; + uint64_t feature_scale = 0; if (_command_line_arguments.find("--cb_explore_adf") != std::string::npos) { @@ -164,7 +165,7 @@ class vw_predict _bag_size = static_cast(bag_size); _exploration = vw_predict_exploration::bag; - num_weights = _bag_size; + feature_scale = _bag_size; // check for additional minimum epsilon greedy _minimum_epsilon = 0.f; @@ -212,10 +213,10 @@ class vw_predict RETURN_ON_FAIL(mp.read("resume", gd_resume)); if (gd_resume) { return E_VW_PREDICT_ERR_GD_RESUME_NOT_SUPPORTED; } - // read sparse weights into dense - _stride_shift = (uint32_t)ceil_log_2(num_weights); + _feature_scale_bits = (uint32_t)ceil_log_2(feature_scale); - RETURN_ON_FAIL(mp.read_weights(_weights, _num_bits, _stride_shift)); + // stride shift always 0 bits + RETURN_ON_FAIL(mp.read_weights(_weights, _num_bits, 0)); // TODO: check that permutations is not enabled (or parse it) @@ -261,7 +262,7 @@ class vw_predict // add constant feature ns_copy_guard = std::unique_ptr(new namespace_copy_guard(ex, VW::details::CONSTANT_NAMESPACE)); - ns_copy_guard->feature_push_back(1.f, (VW::details::CONSTANT << _stride_shift) + ex.ft_offset); + ns_copy_guard->feature_push_back(1.f, (VW::details::CONSTANT << _feature_scale_bits) + ex.ft_offset); } if (_contains_wildcard) @@ -291,9 +292,9 @@ class vw_predict out_scores.resize(num_actions); - VW::example_predict* action = actions; - for (size_t i = 0; i < num_actions; i++, action++) + for (size_t i = 0; i < num_actions; i++) { + VW::example_predict* action = &actions[i]; std::vector> ns_copy_guards; // shared feature copying @@ -358,19 +359,21 @@ class vw_predict { std::vector top_actions(num_actions); - // apply stride shifts - std::vector> stride_shift_guards; - stride_shift_guards.push_back( - std::unique_ptr(new stride_shift_guard(shared, _stride_shift))); + // apply feature scale + uint64_t feature_scale = static_cast(1) << _feature_scale_bits; + std::vector> feature_scale_guards; + feature_scale_guards.push_back( + std::unique_ptr(new feature_scale_guard(shared, feature_scale))); VW::example_predict* actions_end = actions + num_actions; for (VW::example_predict* action = actions; action != actions_end; ++action) { - stride_shift_guards.push_back( - std::unique_ptr(new stride_shift_guard(*action, _stride_shift))); + feature_scale_guards.push_back( + std::unique_ptr(new feature_scale_guard(*action, feature_scale))); } for (size_t i = 0; i < _bag_size; i++) { + // apply feature offset std::vector> feature_offset_guards; for (VW::example_predict* action = actions; action != actions_end; ++action) { @@ -487,7 +490,8 @@ class vw_predict size_t _bag_size; uint32_t _num_bits; - uint32_t _stride_shift; + // log2 of feature scale, rounded upwards to next integer + uint32_t _feature_scale_bits; bool _model_loaded; }; } // namespace vw_slim diff --git a/vowpalwabbit/slim/src/vw_slim_predict.cc b/vowpalwabbit/slim/src/vw_slim_predict.cc index 5c094149fe1..dda0deb3513 100644 --- a/vowpalwabbit/slim/src/vw_slim_predict.cc +++ b/vowpalwabbit/slim/src/vw_slim_predict.cc @@ -17,14 +17,23 @@ namespace_copy_guard::namespace_copy_guard(VW::example_predict& ex, unsigned cha { _ex.indices.push_back(_ns); _remove_ns = true; + _old_size = 0; + } + else + { + _remove_ns = false; + _old_size = _ex.feature_space[_ns].size(); } - else { _remove_ns = false; } } namespace_copy_guard::~namespace_copy_guard() { - _ex.indices.pop_back(); - if (_remove_ns) { _ex.feature_space[_ns].clear(); } + if (_remove_ns) + { + _ex.feature_space[_ns].clear(); + _ex.indices.pop_back(); + } + else { _ex.feature_space[_ns].truncate_to(_old_size); } } void namespace_copy_guard::feature_push_back(VW::feature_value v, VW::feature_index idx) @@ -32,32 +41,33 @@ void namespace_copy_guard::feature_push_back(VW::feature_value v, VW::feature_in _ex.feature_space[_ns].push_back(v, idx); } -feature_offset_guard::feature_offset_guard(VW::example_predict& ex, uint64_t ft_offset) - : _ex(ex), _old_ft_offset(ex.ft_offset) +feature_offset_guard::feature_offset_guard(VW::example_predict& ex, uint64_t ft_index_offset) + : _ex(ex), _old_ft_index_offset(ex.ft_offset) { - _ex.ft_offset = ft_offset; + _ex.ft_offset = ft_index_offset; } -feature_offset_guard::~feature_offset_guard() { _ex.ft_offset = _old_ft_offset; } +feature_offset_guard::~feature_offset_guard() { _ex.ft_offset = _old_ft_index_offset; } -stride_shift_guard::stride_shift_guard(VW::example_predict& ex, uint64_t shift) : _ex(ex), _shift(shift) +feature_scale_guard::feature_scale_guard(VW::example_predict& ex, uint64_t ft_index_scale) + : _ex(ex), _ft_index_scale(ft_index_scale) { - if (_shift > 0) + if (_ft_index_scale > 1) { for (auto ns : _ex.indices) { - for (auto& f : _ex.feature_space[ns]) { f.index() <<= _shift; } + for (auto& f : _ex.feature_space[ns]) { f.index() *= _ft_index_scale; } } } } -stride_shift_guard::~stride_shift_guard() +feature_scale_guard::~feature_scale_guard() { - if (_shift > 0) + if (_ft_index_scale > 1) { for (auto ns : _ex.indices) { - for (auto& f : _ex.feature_space[ns]) { f.index() >>= _shift; } + for (auto& f : _ex.feature_space[ns]) { f.index() /= _ft_index_scale; } } } } diff --git a/vowpalwabbit/slim/test/data.h b/vowpalwabbit/slim/test/data.h index 5011d0ca5e9..5f598c0df43 100644 --- a/vowpalwabbit/slim/test/data.h +++ b/vowpalwabbit/slim/test/data.h @@ -1,330 +1,228 @@ -unsigned char regression_data_1_model[] = {0x06, 0x00, 0x00, 0x00, 0x38, 0x2e, 0x35, 0x2e, 0x30, 0x00, 0x01, 0x00, 0x00, +unsigned char regression_data_1_model[] = {0x06, 0x00, 0x00, 0x00, 0x39, 0x2e, 0x39, 0x2e, 0x30, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x6d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x20, 0x2d, 0x2d, 0x68, 0x61, 0x73, 0x68, - 0x5f, 0x73, 0x65, 0x65, 0x64, 0x20, 0x30, 0x20, 0x2d, 0x2d, 0x6c, 0x69, 0x6e, 0x6b, 0x20, 0x69, 0x64, 0x65, 0x6e, - 0x74, 0x69, 0x74, 0x79, 0x00, 0x04, 0x00, 0x00, 0x00, 0x4a, 0x0d, 0xa8, 0x7d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x84, - 0x94, 0x7b, 0xbe, 0x5c, 0xc5, 0x01, 0x00, 0x55, 0xea, 0x9d, 0x3f}; -unsigned int regression_data_1_model_len = 100; + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x49, 0x8e, + 0xa9, 0xc7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4b, 0x94, 0x7b, 0xbe, 0x5c, 0xc5, 0x01, 0x00, 0x3c, 0xea, 0x9d, 0x3f}; +unsigned int regression_data_1_model_len = 70; unsigned char regression_data_1_pred[] = { - 0x30, 0x2e, 0x39, 0x38, 0x38, 0x30, 0x33, 0x30, 0x0a, 0x30, 0x2e, 0x30, 0x30, 0x35, 0x32, 0x39, 0x35, 0x0a}; + 0x30, 0x2e, 0x39, 0x38, 0x38, 0x30, 0x32, 0x38, 0x0a, 0x30, 0x2e, 0x30, 0x30, 0x35, 0x32, 0x39, 0x36, 0x0a}; unsigned int regression_data_1_pred_len = 18; -unsigned char regression_data_no_constant_model[] = {0x06, 0x00, 0x00, 0x00, 0x38, 0x2e, 0x35, 0x2e, 0x30, 0x00, 0x01, +unsigned char regression_data_no_constant_model[] = {0x06, 0x00, 0x00, 0x00, 0x39, 0x2e, 0x39, 0x2e, 0x30, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x6d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x20, 0x2d, 0x2d, 0x68, 0x61, - 0x73, 0x68, 0x5f, 0x73, 0x65, 0x65, 0x64, 0x20, 0x30, 0x20, 0x2d, 0x2d, 0x6c, 0x69, 0x6e, 0x6b, 0x20, 0x69, 0x64, - 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x00, 0x04, 0x00, 0x00, 0x00, 0x4a, 0x0d, 0xa8, 0x7d, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x8c, 0x1e, 0x0d, 0x3d}; -unsigned int regression_data_no_constant_model_len = 92; + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x20, 0x2d, 0x2d, 0x6e, 0x6f, + 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x00, 0x04, 0x00, 0x00, 0x00, 0xf1, 0x40, 0x85, 0xfb, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xe6, 0x1f, 0x0d, 0x3d}; +unsigned int regression_data_no_constant_model_len = 75; unsigned char regression_data_no_constant_pred[] = { - 0x30, 0x2e, 0x30, 0x33, 0x34, 0x34, 0x35, 0x33, 0x0a, 0x30, 0x2e, 0x31, 0x37, 0x32, 0x32, 0x36, 0x35, 0x0a}; + 0x30, 0x2e, 0x30, 0x33, 0x34, 0x34, 0x35, 0x34, 0x0a, 0x30, 0x2e, 0x31, 0x37, 0x32, 0x32, 0x37, 0x31, 0x0a}; unsigned int regression_data_no_constant_pred_len = 18; -unsigned char regression_data_ignore_linear_model[] = {0x06, 0x00, 0x00, 0x00, 0x38, 0x2e, 0x35, 0x2e, 0x30, 0x00, 0x01, +unsigned char regression_data_ignore_linear_model[] = {0x06, 0x00, 0x00, 0x00, 0x39, 0x2e, 0x39, 0x2e, 0x30, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x6d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, 0x00, 0x20, 0x2d, 0x2d, 0x68, 0x61, - 0x73, 0x68, 0x5f, 0x73, 0x65, 0x65, 0x64, 0x20, 0x30, 0x20, 0x2d, 0x2d, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x5f, - 0x6c, 0x69, 0x6e, 0x65, 0x61, 0x72, 0x20, 0x61, 0x20, 0x2d, 0x2d, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x5f, 0x6c, - 0x69, 0x6e, 0x65, 0x61, 0x72, 0x20, 0x62, 0x20, 0x2d, 0x2d, 0x6c, 0x69, 0x6e, 0x6b, 0x20, 0x69, 0x64, 0x65, 0x6e, - 0x74, 0x69, 0x74, 0x79, 0x00, 0x04, 0x00, 0x00, 0x00, 0xec, 0x9d, 0x02, 0x9b, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa7, - 0x93, 0x0f, 0x3f, 0x5c, 0xc5, 0x01, 0x00, 0xb0, 0xd8, 0xe0, 0x3e, 0x5f, 0xd6, 0x02, 0x00, 0xca, 0xe5, 0x15, 0xbe}; -unsigned int regression_data_ignore_linear_model_len = 144; -unsigned char regression_data_ignore_linear_pred[] = { - 0x31, 0x2e, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x0a, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x0a}; -unsigned int regression_data_ignore_linear_pred_len = 18; -unsigned char regression_data_2_model[] = {0x06, 0x00, 0x00, 0x00, 0x38, 0x2e, 0x35, 0x2e, 0x30, 0x00, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x20, 0x2d, 0x2d, 0x69, 0x67, + 0x6e, 0x6f, 0x72, 0x65, 0x5f, 0x6c, 0x69, 0x6e, 0x65, 0x61, 0x72, 0x20, 0x61, 0x62, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x17, 0xa5, 0x23, 0x26, 0x00, 0x00, 0x00, 0x00, 0x00, 0x29, 0x94, 0x0f, 0x3f, 0x5c, 0xc5, 0x01, 0x00, 0xac, 0xd7, + 0xe0, 0x3e, 0x5f, 0xd6, 0x02, 0x00, 0x1d, 0xe5, 0x15, 0xbe}; +unsigned int regression_data_ignore_linear_model_len = 97; +unsigned char regression_data_ignore_linear_pred[] = {0x31, 0x2e, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x0a, 0x30, 0x0a}; +unsigned int regression_data_ignore_linear_pred_len = 11; +unsigned char regression_data_2_model[] = {0x06, 0x00, 0x00, 0x00, 0x39, 0x2e, 0x39, 0x2e, 0x30, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x6d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x20, 0x2d, 0x2d, 0x68, 0x61, 0x73, 0x68, - 0x5f, 0x73, 0x65, 0x65, 0x64, 0x20, 0x30, 0x20, 0x2d, 0x2d, 0x6c, 0x69, 0x6e, 0x6b, 0x20, 0x69, 0x64, 0x65, 0x6e, - 0x74, 0x69, 0x74, 0x79, 0x00, 0x04, 0x00, 0x00, 0x00, 0x4a, 0x0d, 0xa8, 0x7d, 0x00, 0x00, 0x00, 0x00, 0x00, 0xcf, - 0xee, 0xb4, 0x3e, 0xb2, 0x69, 0x01, 0x00, 0xcf, 0xee, 0x34, 0x3e, 0x5c, 0xc5, 0x01, 0x00, 0x60, 0x22, 0x96, 0x3e, - 0x5f, 0xd6, 0x02, 0x00, 0xd5, 0x2d, 0xc8, 0xbd}; -unsigned int regression_data_2_model_len = 116; + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x49, 0x8e, + 0xa9, 0xc7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4c, 0xef, 0xb4, 0x3e, 0xb2, 0x69, 0x01, 0x00, 0x4c, 0xef, 0x34, 0x3e, + 0x5c, 0xc5, 0x01, 0x00, 0x66, 0x21, 0x96, 0x3e, 0x5f, 0xd6, 0x02, 0x00, 0x88, 0x2c, 0xc8, 0xbd}; +unsigned int regression_data_2_model_len = 86; unsigned char regression_data_2_pred[] = {0x31, 0x2e, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x0a, 0x30, 0x0a}; unsigned int regression_data_2_pred_len = 11; -unsigned char regression_data_3_model[] = {0x06, 0x00, 0x00, 0x00, 0x38, 0x2e, 0x35, 0x2e, 0x30, 0x00, 0x01, 0x00, 0x00, +unsigned char regression_data_3_model[] = {0x06, 0x00, 0x00, 0x00, 0x39, 0x2e, 0x39, 0x2e, 0x30, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x6d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x00, 0x20, 0x2d, 0x2d, 0x68, 0x61, 0x73, 0x68, - 0x5f, 0x73, 0x65, 0x65, 0x64, 0x20, 0x30, 0x20, 0x2d, 0x2d, 0x71, 0x75, 0x61, 0x64, 0x72, 0x61, 0x74, 0x69, 0x63, - 0x20, 0x61, 0x62, 0x20, 0x2d, 0x2d, 0x6c, 0x69, 0x6e, 0x6b, 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, - 0x00, 0x04, 0x00, 0x00, 0x00, 0x43, 0x94, 0xd3, 0x3c, 0x00, 0xb2, 0x69, 0x01, 0x00, 0xfe, 0x91, 0x3e, 0x3f, 0x5c, - 0xc5, 0x01, 0x00, 0xfe, 0x91, 0x3e, 0x3f, 0x05, 0x7e, 0x02, 0x00, 0xfb, 0x42, 0x2f, 0xbe, 0x33, 0x1d, 0x03, 0x00, - 0xfb, 0x42, 0x2f, 0xbe}; -unsigned int regression_data_3_model_len = 131; + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x20, 0x2d, 0x2d, 0x71, 0x75, 0x61, 0x64, + 0x72, 0x61, 0x74, 0x69, 0x63, 0x20, 0x61, 0x62, 0x00, 0x04, 0x00, 0x00, 0x00, 0xc5, 0xa5, 0x6a, 0x34, 0x00, 0xb2, + 0x69, 0x01, 0x00, 0xaa, 0x92, 0x3e, 0x3f, 0x5c, 0xc5, 0x01, 0x00, 0xaa, 0x92, 0x3e, 0x3f, 0x05, 0x7e, 0x02, 0x00, + 0x19, 0x44, 0x2f, 0xbe, 0x33, 0x1d, 0x03, 0x00, 0x19, 0x44, 0x2f, 0xbe}; +unsigned int regression_data_3_model_len = 101; unsigned char regression_data_3_pred[] = { - 0x30, 0x2e, 0x38, 0x30, 0x34, 0x32, 0x31, 0x34, 0x0a, 0x30, 0x2e, 0x31, 0x31, 0x39, 0x35, 0x39, 0x39, 0x0a}; + 0x30, 0x2e, 0x38, 0x30, 0x34, 0x32, 0x31, 0x38, 0x0a, 0x30, 0x2e, 0x31, 0x31, 0x39, 0x35, 0x38, 0x35, 0x0a}; unsigned int regression_data_3_pred_len = 18; -unsigned char regression_data_4_model[] = {0x06, 0x00, 0x00, 0x00, 0x38, 0x2e, 0x35, 0x2e, 0x30, 0x00, 0x01, 0x00, 0x00, +unsigned char regression_data_4_model[] = {0x06, 0x00, 0x00, 0x00, 0x39, 0x2e, 0x39, 0x2e, 0x30, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x6d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00, 0x20, 0x2d, 0x2d, 0x68, 0x61, 0x73, 0x68, - 0x5f, 0x73, 0x65, 0x65, 0x64, 0x20, 0x30, 0x20, 0x2d, 0x2d, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x20, 0x61, 0x62, 0x63, 0x20, 0x2d, 0x2d, 0x6c, 0x69, 0x6e, 0x6b, 0x20, 0x69, 0x64, 0x65, 0x6e, - 0x74, 0x69, 0x74, 0x79, 0x00, 0x04, 0x00, 0x00, 0x00, 0x25, 0x5b, 0x51, 0xe0, 0x00, 0x2b, 0x21, 0x00, 0x00, 0x86, - 0xc6, 0x9d, 0x3c, 0x74, 0x14, 0x01, 0x00, 0x37, 0xab, 0xc9, 0xbd, 0x77, 0x14, 0x01, 0x00, 0x37, 0x50, 0x43, 0x3d, - 0xb2, 0x69, 0x01, 0x00, 0xb2, 0x63, 0xab, 0x3d, 0x5c, 0xc5, 0x01, 0x00, 0xb2, 0x63, 0xab, 0x3d, 0x05, 0x7e, 0x02, - 0x00, 0x78, 0xd1, 0xa0, 0x3b, 0x62, 0xd6, 0x02, 0x00, 0x00, 0xb8, 0x4f, 0x3d}; -unsigned int regression_data_4_model_len = 159; + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x20, 0x2d, 0x2d, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x61, 0x62, 0x63, 0x00, 0x04, 0x00, 0x00, 0x00, 0x47, 0x3d, + 0xa8, 0xc1, 0x00, 0x2b, 0x21, 0x00, 0x00, 0x22, 0xc4, 0x9d, 0x3c, 0x74, 0x14, 0x01, 0x00, 0x16, 0xaf, 0xc9, 0xbd, + 0x77, 0x14, 0x01, 0x00, 0x17, 0x53, 0x43, 0x3d, 0xb2, 0x69, 0x01, 0x00, 0x06, 0x67, 0xab, 0x3d, 0x5c, 0xc5, 0x01, + 0x00, 0x06, 0x67, 0xab, 0x3d, 0x05, 0x7e, 0x02, 0x00, 0x3e, 0xd6, 0xa0, 0x3b, 0x62, 0xd6, 0x02, 0x00, 0xd4, 0xb7, + 0x4f, 0x3d}; +unsigned int regression_data_4_model_len = 129; unsigned char regression_data_4_pred[] = { - 0x30, 0x2e, 0x36, 0x33, 0x35, 0x36, 0x32, 0x30, 0x0a, 0x30, 0x2e, 0x31, 0x31, 0x37, 0x38, 0x31, 0x33, 0x0a}; + 0x30, 0x2e, 0x36, 0x33, 0x35, 0x36, 0x33, 0x37, 0x0a, 0x30, 0x2e, 0x31, 0x31, 0x37, 0x38, 0x30, 0x38, 0x0a}; unsigned int regression_data_4_pred_len = 18; -unsigned char regression_data_5_model[] = {0x06, 0x00, 0x00, 0x00, 0x38, 0x2e, 0x35, 0x2e, 0x30, 0x00, 0x01, 0x00, 0x00, +unsigned char regression_data_5_model[] = {0x06, 0x00, 0x00, 0x00, 0x39, 0x2e, 0x39, 0x2e, 0x30, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x6d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x00, 0x20, 0x2d, 0x2d, 0x68, 0x61, 0x73, 0x68, - 0x5f, 0x73, 0x65, 0x65, 0x64, 0x20, 0x30, 0x20, 0x2d, 0x2d, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x20, 0x61, 0x62, 0x63, 0x64, 0x20, 0x2d, 0x2d, 0x6c, 0x69, 0x6e, 0x6b, 0x20, 0x69, 0x64, 0x65, - 0x6e, 0x74, 0x69, 0x74, 0x79, 0x00, 0x04, 0x00, 0x00, 0x00, 0x0b, 0x1f, 0xb3, 0x77, 0x00, 0x74, 0x14, 0x01, 0x00, - 0x2d, 0x4f, 0x94, 0xbd, 0x77, 0x14, 0x01, 0x00, 0x87, 0x9e, 0x37, 0x3d, 0xc5, 0x22, 0x01, 0x00, 0x2d, 0x4f, 0x94, - 0xbc, 0xc6, 0x22, 0x01, 0x00, 0xd8, 0xd4, 0xf4, 0x3b, 0xb2, 0x69, 0x01, 0x00, 0x7d, 0xcf, 0xde, 0x3d, 0x5c, 0xc5, - 0x01, 0x00, 0x7d, 0xcf, 0xde, 0x3d, 0x05, 0x7e, 0x02, 0x00, 0x59, 0x79, 0x78, 0x3c, 0x62, 0xd6, 0x02, 0x00, 0xa7, - 0x34, 0x53, 0x3d}; -unsigned int regression_data_5_model_len = 168; + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x20, 0x2d, 0x2d, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x61, 0x62, 0x63, 0x64, 0x00, 0x04, 0x00, 0x00, 0x00, 0x13, + 0xd9, 0x47, 0xa4, 0x00, 0x74, 0x14, 0x01, 0x00, 0x1f, 0x4f, 0x94, 0xbd, 0x77, 0x14, 0x01, 0x00, 0x43, 0xa0, 0x37, + 0x3d, 0xc5, 0x22, 0x01, 0x00, 0x1f, 0x4f, 0x94, 0xbc, 0xc6, 0x22, 0x01, 0x00, 0xb0, 0xd5, 0xf4, 0x3b, 0xb2, 0x69, + 0x01, 0x00, 0x8a, 0xcd, 0xde, 0x3d, 0x5c, 0xc5, 0x01, 0x00, 0x8a, 0xcd, 0xde, 0x3d, 0x05, 0x7e, 0x02, 0x00, 0xa4, + 0x7a, 0x78, 0x3c, 0x62, 0xd6, 0x02, 0x00, 0xfb, 0x39, 0x53, 0x3d}; +unsigned int regression_data_5_model_len = 138; unsigned char regression_data_5_pred[] = { - 0x30, 0x2e, 0x37, 0x36, 0x31, 0x32, 0x34, 0x37, 0x0a, 0x30, 0x2e, 0x30, 0x34, 0x30, 0x31, 0x34, 0x38, 0x0a}; + 0x30, 0x2e, 0x37, 0x36, 0x31, 0x32, 0x36, 0x34, 0x0a, 0x30, 0x2e, 0x30, 0x34, 0x30, 0x31, 0x34, 0x38, 0x0a}; unsigned int regression_data_5_pred_len = 18; -unsigned char regression_data_6_model[] = {0x06, 0x00, 0x00, 0x00, 0x38, 0x2e, 0x35, 0x2e, 0x30, 0x00, 0x01, 0x00, 0x00, +unsigned char regression_data_6_model[] = {0x06, 0x00, 0x00, 0x00, 0x39, 0x2e, 0x39, 0x2e, 0x30, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x6d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x00, 0x20, 0x2d, 0x2d, 0x68, 0x61, 0x73, 0x68, - 0x5f, 0x73, 0x65, 0x65, 0x64, 0x20, 0x30, 0x20, 0x2d, 0x2d, 0x71, 0x75, 0x61, 0x64, 0x72, 0x61, 0x74, 0x69, 0x63, - 0x20, 0x61, 0x62, 0x20, 0x2d, 0x2d, 0x6c, 0x69, 0x6e, 0x6b, 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, - 0x00, 0x04, 0x00, 0x00, 0x00, 0x9b, 0x9d, 0xc6, 0xde, 0x00, 0x33, 0x1d, 0x3b, 0xf5, 0x00, 0x00, 0x00, 0x00, 0x20, - 0xdc, 0x90, 0x3b, 0x5c, 0xc5, 0xb1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8a, 0x19, 0xd8, 0x3d, 0x05, 0x7e, 0xde, 0x95, - 0x00, 0x00, 0x00, 0x00, 0x20, 0xdc, 0x90, 0x3b, 0xb2, 0x69, 0x25, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x8a, 0x19, 0xd8, - 0x3d}; -unsigned int regression_data_6_model_len = 147; + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x20, 0x2d, 0x2d, 0x71, 0x75, 0x61, 0x64, + 0x72, 0x61, 0x74, 0x69, 0x63, 0x20, 0x61, 0x62, 0x00, 0x04, 0x00, 0x00, 0x00, 0x77, 0xbd, 0xf7, 0x46, 0x00, 0x33, + 0x1d, 0x3b, 0xf5, 0x00, 0x00, 0x00, 0x00, 0xe8, 0xf2, 0x90, 0x3b, 0x5c, 0xc5, 0xb1, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xb9, 0x21, 0xd8, 0x3d, 0x05, 0x7e, 0xde, 0x95, 0x00, 0x00, 0x00, 0x00, 0xe8, 0xf2, 0x90, 0x3b, 0xb2, 0x69, 0x25, + 0x3c, 0x00, 0x00, 0x00, 0x00, 0xb9, 0x21, 0xd8, 0x3d}; +unsigned int regression_data_6_model_len = 117; unsigned char regression_data_6_pred[] = { - 0x30, 0x2e, 0x32, 0x32, 0x38, 0x37, 0x31, 0x38, 0x0a, 0x30, 0x2e, 0x32, 0x34, 0x36, 0x34, 0x30, 0x31, 0x0a}; + 0x30, 0x2e, 0x32, 0x32, 0x38, 0x37, 0x36, 0x30, 0x0a, 0x30, 0x2e, 0x32, 0x34, 0x36, 0x34, 0x35, 0x34, 0x0a}; unsigned int regression_data_6_pred_len = 18; -unsigned char regression_data_7_model[] = {0x06, 0x00, 0x00, 0x00, 0x38, 0x2e, 0x35, 0x2e, 0x30, 0x00, 0x01, 0x00, 0x00, +unsigned char regression_data_7_model[] = {0x06, 0x00, 0x00, 0x00, 0x39, 0x2e, 0x39, 0x2e, 0x30, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x6d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x20, 0x2d, 0x2d, 0x68, 0x61, 0x73, 0x68, - 0x5f, 0x73, 0x65, 0x65, 0x64, 0x20, 0x30, 0x20, 0x2d, 0x2d, 0x6c, 0x69, 0x6e, 0x6b, 0x20, 0x69, 0x64, 0x65, 0x6e, - 0x74, 0x69, 0x74, 0x79, 0x00, 0x04, 0x00, 0x00, 0x00, 0x4a, 0x0d, 0xa8, 0x7d, 0x00, 0x88, 0xd8, 0x00, 0x00, 0xdb, - 0xe8, 0x3c, 0x3e, 0x5c, 0xc5, 0x01, 0x00, 0xdb, 0xe8, 0x3c, 0x3e, 0xd2, 0x52, 0x02, 0x00, 0xb2, 0x6a, 0x14, 0x3e, - 0xe8, 0x78, 0x03, 0x00, 0xf9, 0xc3, 0x89, 0xbd}; -unsigned int regression_data_7_model_len = 116; + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x49, 0x8e, + 0xa9, 0xc7, 0x00, 0x88, 0xd8, 0x00, 0x00, 0xc8, 0xe9, 0x3c, 0x3e, 0x5c, 0xc5, 0x01, 0x00, 0xc8, 0xe9, 0x3c, 0x3e, + 0xd2, 0x52, 0x02, 0x00, 0xc8, 0x6e, 0x14, 0x3e, 0xe8, 0x78, 0x03, 0x00, 0xe0, 0xc1, 0x89, 0xbd}; +unsigned int regression_data_7_model_len = 86; unsigned char regression_data_7_pred[] = { - 0x30, 0x2e, 0x36, 0x35, 0x38, 0x38, 0x34, 0x31, 0x0a, 0x30, 0x2e, 0x30, 0x39, 0x39, 0x38, 0x39, 0x31, 0x0a}; + 0x30, 0x2e, 0x36, 0x35, 0x38, 0x38, 0x37, 0x39, 0x0a, 0x30, 0x2e, 0x30, 0x39, 0x39, 0x39, 0x31, 0x34, 0x0a}; unsigned int regression_data_7_pred_len = 18; -unsigned char multiclass_data_4_model[] = {0x06, 0x00, 0x00, 0x00, 0x38, 0x2e, 0x35, 0x2e, 0x30, 0x00, 0x01, 0x00, 0x00, +unsigned char multiclass_data_4_model[] = {0x06, 0x00, 0x00, 0x00, 0x39, 0x2e, 0x39, 0x2e, 0x30, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x6d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, 0x20, 0x2d, 0x2d, 0x68, 0x61, 0x73, 0x68, - 0x5f, 0x73, 0x65, 0x65, 0x64, 0x20, 0x30, 0x20, 0x2d, 0x2d, 0x71, 0x75, 0x61, 0x64, 0x72, 0x61, 0x74, 0x69, 0x63, - 0x20, 0x61, 0x62, 0x20, 0x2d, 0x2d, 0x63, 0x73, 0x6f, 0x61, 0x61, 0x5f, 0x6c, 0x64, 0x66, 0x20, 0x6d, 0x20, 0x2d, - 0x2d, 0x63, 0x73, 0x6f, 0x61, 0x61, 0x5f, 0x72, 0x61, 0x6e, 0x6b, 0x20, 0x2d, 0x2d, 0x6c, 0x69, 0x6e, 0x6b, 0x20, - 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x00, 0x04, 0x00, 0x00, 0x00, 0xc7, 0x53, 0x35, 0xf9, 0x00, 0xb2, - 0x69, 0x01, 0x00, 0x9a, 0x5c, 0xe3, 0x3e, 0xb7, 0x69, 0x01, 0x00, 0x48, 0x97, 0x17, 0x3d, 0x5c, 0xc5, 0x01, 0x00, - 0x9a, 0x5c, 0xe3, 0x3e, 0x03, 0x7e, 0x02, 0x00, 0xde, 0x2e, 0x13, 0xbe, 0x16, 0x15, 0x03, 0x00, 0x18, 0x41, 0x44, - 0xbc, 0x35, 0x1d, 0x03, 0x00, 0xde, 0x2e, 0x13, 0xbe}; -unsigned int multiclass_data_4_model_len = 174; -unsigned char multiclass_data_4_pred[] = {0x32, 0x3a, 0x30, 0x2e, 0x30, 0x33, 0x38, 0x36, 0x32, 0x32, 0x33, 0x2c, 0x31, - 0x3a, 0x30, 0x2e, 0x34, 0x36, 0x39, 0x38, 0x33, 0x2c, 0x30, 0x3a, 0x30, 0x2e, 0x39, 0x30, 0x31, 0x30, 0x33, 0x38, - 0x0a, 0x0a}; -unsigned int multiclass_data_4_pred_len = 34; -unsigned char multiclass_data_5_model[] = {0x06, 0x00, 0x00, 0x00, 0x38, 0x2e, 0x36, 0x2e, 0x31, 0x00, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00, 0x20, 0x2d, 0x2d, 0x63, 0x73, 0x6f, 0x61, + 0x61, 0x5f, 0x6c, 0x64, 0x66, 0x20, 0x6d, 0x20, 0x2d, 0x2d, 0x63, 0x73, 0x6f, 0x61, 0x61, 0x5f, 0x72, 0x61, 0x6e, + 0x6b, 0x20, 0x2d, 0x2d, 0x71, 0x75, 0x61, 0x64, 0x72, 0x61, 0x74, 0x69, 0x63, 0x20, 0x61, 0x62, 0x00, 0x04, 0x00, + 0x00, 0x00, 0x91, 0xfa, 0x13, 0x4a, 0x00, 0xb2, 0x69, 0x01, 0x00, 0xe2, 0x5e, 0xe3, 0x3e, 0xb7, 0x69, 0x01, 0x00, + 0x98, 0x94, 0x17, 0x3d, 0x5c, 0xc5, 0x01, 0x00, 0xe2, 0x5e, 0xe3, 0x3e, 0x03, 0x7e, 0x02, 0x00, 0x21, 0x30, 0x13, + 0xbe, 0x16, 0x15, 0x03, 0x00, 0x29, 0x40, 0x44, 0xbc, 0x35, 0x1d, 0x03, 0x00, 0x21, 0x30, 0x13, 0xbe}; +unsigned int multiclass_data_4_model_len = 144; +unsigned char multiclass_data_4_pred[] = {0x33, 0x3a, 0x30, 0x2e, 0x30, 0x33, 0x38, 0x36, 0x30, 0x35, 0x2c, 0x32, 0x3a, + 0x30, 0x2e, 0x34, 0x36, 0x39, 0x38, 0x32, 0x2c, 0x31, 0x3a, 0x30, 0x2e, 0x39, 0x30, 0x31, 0x30, 0x33, 0x35, 0x0a, + 0x0a}; +unsigned int multiclass_data_4_pred_len = 33; +unsigned char multiclass_data_5_model[] = {0x06, 0x00, 0x00, 0x00, 0x39, 0x2e, 0x39, 0x2e, 0x30, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x6d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x00, 0x20, 0x2d, 0x2d, 0x68, 0x61, 0x73, 0x68, - 0x5f, 0x73, 0x65, 0x65, 0x64, 0x20, 0x30, 0x20, 0x2d, 0x2d, 0x63, 0x73, 0x6f, 0x61, 0x61, 0x5f, 0x6c, 0x64, 0x66, - 0x20, 0x6d, 0x20, 0x2d, 0x2d, 0x63, 0x73, 0x6f, 0x61, 0x61, 0x5f, 0x72, 0x61, 0x6e, 0x6b, 0x20, 0x2d, 0x2d, 0x6c, - 0x69, 0x6e, 0x6b, 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x00, 0x04, 0x00, 0x00, 0x00, 0x58, 0xf3, - 0xe1, 0x52, 0x00, 0xa9, 0x91, 0x00, 0x00, 0x54, 0x4d, 0x34, 0x3e, 0xae, 0x91, 0x00, 0x00, 0x68, 0x58, 0x70, 0x3c, - 0x5c, 0xc5, 0x01, 0x00, 0x54, 0x4d, 0x34, 0x3e, 0x11, 0x76, 0x03, 0x00, 0x02, 0xc7, 0x03, 0x3d, 0x5f, 0xd7, 0x03, - 0x00, 0xb9, 0x4e, 0xc1, 0x3c}; -unsigned int multiclass_data_5_model_len = 151; -unsigned char multiclass_data_5_pred[] = {0x30, 0x3a, 0x30, 0x2e, 0x35, 0x35, 0x31, 0x37, 0x38, 0x34, 0x2c, 0x33, 0x3a, - 0x30, 0x2e, 0x35, 0x35, 0x31, 0x37, 0x38, 0x34, 0x2c, 0x34, 0x3a, 0x30, 0x2e, 0x35, 0x36, 0x30, 0x33, 0x35, 0x39, - 0x2c, 0x37, 0x3a, 0x30, 0x2e, 0x35, 0x36, 0x30, 0x33, 0x35, 0x39, 0x2c, 0x31, 0x3a, 0x30, 0x2e, 0x35, 0x37, 0x35, - 0x33, 0x38, 0x31, 0x2c, 0x35, 0x3a, 0x30, 0x2e, 0x35, 0x39, 0x32, 0x35, 0x33, 0x31, 0x2c, 0x32, 0x3a, 0x30, 0x2e, - 0x35, 0x39, 0x38, 0x39, 0x37, 0x38, 0x2c, 0x36, 0x3a, 0x30, 0x2e, 0x36, 0x32, 0x34, 0x37, 0x30, 0x33, 0x0a, 0x0a}; + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x20, 0x2d, 0x2d, 0x63, 0x73, 0x6f, 0x61, + 0x61, 0x5f, 0x6c, 0x64, 0x66, 0x20, 0x6d, 0x20, 0x2d, 0x2d, 0x63, 0x73, 0x6f, 0x61, 0x61, 0x5f, 0x72, 0x61, 0x6e, + 0x6b, 0x00, 0x04, 0x00, 0x00, 0x00, 0x2c, 0x43, 0x9b, 0xba, 0x00, 0xa9, 0x91, 0x00, 0x00, 0x31, 0xc8, 0xc0, 0x3e, + 0xae, 0x91, 0x00, 0x00, 0x78, 0x85, 0x00, 0x3d, 0x5c, 0xc5, 0x01, 0x00, 0x31, 0xc8, 0xc0, 0x3e, 0x11, 0x76, 0x03, + 0x00, 0x68, 0xf2, 0x6b, 0xbe, 0x5f, 0xd7, 0x03, 0x00, 0x01, 0x06, 0xab, 0xbe}; +unsigned int multiclass_data_5_model_len = 121; +unsigned char multiclass_data_5_pred[] = {0x33, 0x3a, 0x30, 0x2e, 0x31, 0x32, 0x37, 0x34, 0x39, 0x32, 0x2c, 0x33, 0x3a, + 0x30, 0x2e, 0x34, 0x33, 0x38, 0x33, 0x33, 0x31, 0x2c, 0x32, 0x3a, 0x30, 0x2e, 0x34, 0x36, 0x31, 0x35, 0x32, 0x32, + 0x2c, 0x32, 0x3a, 0x30, 0x2e, 0x36, 0x36, 0x38, 0x37, 0x34, 0x38, 0x2c, 0x31, 0x3a, 0x30, 0x2e, 0x37, 0x39, 0x35, + 0x35, 0x35, 0x32, 0x2c, 0x31, 0x3a, 0x30, 0x2e, 0x37, 0x39, 0x35, 0x35, 0x35, 0x32, 0x2c, 0x31, 0x3a, 0x30, 0x2e, + 0x38, 0x39, 0x39, 0x31, 0x36, 0x35, 0x2c, 0x31, 0x3a, 0x30, 0x2e, 0x38, 0x39, 0x39, 0x31, 0x36, 0x35, 0x0a, 0x0a}; unsigned int multiclass_data_5_pred_len = 89; -unsigned char cb_data_5_model[] = {0x06, 0x00, 0x00, 0x00, 0x38, 0x2e, 0x35, 0x2e, 0x30, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x6d, 0x00, 0x00, 0x00, 0x00, 0x55, 0x55, 0x55, 0x40, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9a, 0x00, 0x00, 0x00, 0x20, 0x2d, 0x2d, 0x68, 0x61, 0x73, 0x68, 0x5f, - 0x73, 0x65, 0x65, 0x64, 0x20, 0x30, 0x20, 0x2d, 0x2d, 0x71, 0x75, 0x61, 0x64, 0x72, 0x61, 0x74, 0x69, 0x63, 0x20, - 0x61, 0x62, 0x20, 0x2d, 0x2d, 0x63, 0x62, 0x5f, 0x65, 0x78, 0x70, 0x6c, 0x6f, 0x72, 0x65, 0x5f, 0x61, 0x64, 0x66, - 0x20, 0x2d, 0x2d, 0x65, 0x70, 0x73, 0x69, 0x6c, 0x6f, 0x6e, 0x20, 0x30, 0x2e, 0x33, 0x20, 0x2d, 0x2d, 0x6c, 0x61, - 0x6d, 0x62, 0x64, 0x61, 0x20, 0x31, 0x20, 0x2d, 0x2d, 0x70, 0x73, 0x69, 0x20, 0x31, 0x20, 0x2d, 0x2d, 0x63, 0x62, - 0x5f, 0x61, 0x64, 0x66, 0x20, 0x2d, 0x2d, 0x63, 0x62, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x20, 0x69, 0x70, 0x73, 0x20, - 0x2d, 0x2d, 0x63, 0x73, 0x6f, 0x61, 0x61, 0x5f, 0x6c, 0x64, 0x66, 0x20, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x6c, 0x69, - 0x6e, 0x65, 0x20, 0x2d, 0x2d, 0x63, 0x73, 0x6f, 0x61, 0x61, 0x5f, 0x72, 0x61, 0x6e, 0x6b, 0x20, 0x2d, 0x2d, 0x6c, - 0x69, 0x6e, 0x6b, 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x31, - 0x09, 0x85, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xb2, 0x69, 0x01, 0x00, 0x87, 0xb4, 0x0d, 0x3d, 0xb7, 0x69, 0x01, 0x00, 0x08, 0xc2, 0x9d, 0x3d, 0x5c, 0xc5, 0x01, - 0x00, 0xec, 0xa1, 0x6c, 0x3f, 0x03, 0x7e, 0x02, 0x00, 0xa3, 0x99, 0x78, 0xbe, 0x16, 0x15, 0x03, 0x00, 0x1a, 0xbd, - 0xa5, 0xbc, 0x35, 0x1d, 0x03, 0x00, 0x1b, 0x69, 0x2e, 0xbc}; -unsigned int cb_data_5_model_len = 271; -unsigned char cb_data_5_pred[] = {0x32, 0x3a, 0x30, 0x2e, 0x38, 0x2c, 0x31, 0x3a, 0x30, 0x2e, 0x31, 0x2c, 0x30, 0x3a, - 0x30, 0x2e, 0x31, 0x0a, 0x0a, 0x32, 0x3a, 0x30, 0x2e, 0x38, 0x2c, 0x31, 0x3a, 0x30, 0x2e, 0x31, 0x2c, 0x30, 0x3a, +unsigned char cb_data_5_model[] = {0x06, 0x00, 0x00, 0x00, 0x39, 0x2e, 0x39, 0x2e, 0x30, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x6d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x77, 0x00, 0x00, 0x00, 0x20, 0x2d, 0x2d, 0x63, 0x62, 0x5f, 0x61, 0x64, + 0x66, 0x20, 0x2d, 0x2d, 0x63, 0x62, 0x5f, 0x65, 0x78, 0x70, 0x6c, 0x6f, 0x72, 0x65, 0x5f, 0x61, 0x64, 0x66, 0x20, + 0x2d, 0x2d, 0x63, 0x62, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x20, 0x6d, 0x74, 0x72, 0x20, 0x2d, 0x2d, 0x63, 0x73, 0x6f, + 0x61, 0x61, 0x5f, 0x6c, 0x64, 0x66, 0x20, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x2d, 0x2d, + 0x63, 0x73, 0x6f, 0x61, 0x61, 0x5f, 0x72, 0x61, 0x6e, 0x6b, 0x20, 0x2d, 0x2d, 0x65, 0x70, 0x73, 0x69, 0x6c, 0x6f, + 0x6e, 0x20, 0x30, 0x2e, 0x33, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x31, 0x31, 0x39, 0x32, 0x30, 0x39, 0x32, 0x39, + 0x20, 0x2d, 0x2d, 0x71, 0x75, 0x61, 0x64, 0x72, 0x61, 0x74, 0x69, 0x63, 0x20, 0x61, 0x62, 0x00, 0x04, 0x00, 0x00, + 0x00, 0xf8, 0x33, 0x84, 0x29, 0xc8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x02, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xb2, 0x69, 0x01, 0x00, 0xaa, 0xaa, 0x2a, 0x3e, 0xb7, 0x69, 0x01, 0x00, 0x3c, 0x8e, 0x63, 0x3c, + 0x5c, 0xc5, 0x01, 0x00, 0xaa, 0xaa, 0x2a, 0x3e, 0x03, 0x7e, 0x02, 0x00, 0xaa, 0xaa, 0x2a, 0x3e, 0x16, 0x15, 0x03, + 0x00, 0x3c, 0x8e, 0x63, 0x3c, 0x35, 0x1d, 0x03, 0x00, 0xaa, 0xaa, 0x2a, 0x3e}; +unsigned int cb_data_5_model_len = 236; +unsigned char cb_data_5_pred[] = {0x30, 0x3a, 0x30, 0x2e, 0x38, 0x2c, 0x31, 0x3a, 0x30, 0x2e, 0x31, 0x2c, 0x32, 0x3a, + 0x30, 0x2e, 0x31, 0x0a, 0x0a, 0x30, 0x3a, 0x30, 0x2e, 0x38, 0x2c, 0x31, 0x3a, 0x30, 0x2e, 0x31, 0x2c, 0x32, 0x3a, 0x30, 0x2e, 0x31, 0x0a, 0x0a}; unsigned int cb_data_5_pred_len = 38; -unsigned char cb_data_6_model[] = {0x06, 0x00, 0x00, 0x00, 0x38, 0x2e, 0x35, 0x2e, 0x30, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x6d, 0x00, 0x00, 0x00, 0x00, 0x55, 0x55, 0x55, 0x40, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x00, 0x00, 0x00, 0x20, 0x2d, 0x2d, 0x68, 0x61, 0x73, 0x68, 0x5f, - 0x73, 0x65, 0x65, 0x64, 0x20, 0x30, 0x20, 0x2d, 0x2d, 0x71, 0x75, 0x61, 0x64, 0x72, 0x61, 0x74, 0x69, 0x63, 0x20, - 0x61, 0x62, 0x20, 0x2d, 0x2d, 0x63, 0x62, 0x5f, 0x65, 0x78, 0x70, 0x6c, 0x6f, 0x72, 0x65, 0x5f, 0x61, 0x64, 0x66, - 0x20, 0x2d, 0x2d, 0x6c, 0x61, 0x6d, 0x62, 0x64, 0x61, 0x20, 0x2d, 0x32, 0x20, 0x2d, 0x2d, 0x70, 0x73, 0x69, 0x20, - 0x31, 0x20, 0x2d, 0x2d, 0x73, 0x6f, 0x66, 0x74, 0x6d, 0x61, 0x78, 0x20, 0x2d, 0x2d, 0x63, 0x62, 0x5f, 0x61, 0x64, - 0x66, 0x20, 0x2d, 0x2d, 0x63, 0x62, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x20, 0x69, 0x70, 0x73, 0x20, 0x2d, 0x2d, 0x63, - 0x73, 0x6f, 0x61, 0x61, 0x5f, 0x6c, 0x64, 0x66, 0x20, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x6c, 0x69, 0x6e, 0x65, 0x20, - 0x2d, 0x2d, 0x63, 0x73, 0x6f, 0x61, 0x61, 0x5f, 0x72, 0x61, 0x6e, 0x6b, 0x20, 0x2d, 0x2d, 0x6c, 0x69, 0x6e, 0x6b, - 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x00, 0x04, 0x00, 0x00, 0x00, 0x4f, 0x24, 0x56, 0xa0, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb2, 0x69, 0x01, - 0x00, 0xb3, 0x32, 0x51, 0x3d, 0xb7, 0x69, 0x01, 0x00, 0x10, 0x4e, 0xd3, 0x3c, 0x5c, 0xc5, 0x01, 0x00, 0x64, 0x7a, - 0x9e, 0x3e, 0x03, 0x7e, 0x02, 0x00, 0xac, 0x65, 0x84, 0xbb, 0x16, 0x15, 0x03, 0x00, 0x98, 0x88, 0xb0, 0xb9, 0x35, - 0x1d, 0x03, 0x00, 0x94, 0x6a, 0xdb, 0x3a}; -unsigned int cb_data_6_model_len = 268; -unsigned char cb_data_6_pred[] = {0x32, 0x3a, 0x30, 0x2e, 0x33, 0x33, 0x37, 0x36, 0x31, 0x34, 0x2c, 0x31, 0x3a, 0x30, - 0x2e, 0x33, 0x33, 0x33, 0x33, 0x31, 0x35, 0x2c, 0x30, 0x3a, 0x30, 0x2e, 0x33, 0x32, 0x39, 0x30, 0x37, 0x31, 0x0a, - 0x0a, 0x32, 0x3a, 0x30, 0x2e, 0x34, 0x31, 0x30, 0x39, 0x37, 0x31, 0x2c, 0x31, 0x3a, 0x30, 0x2e, 0x33, 0x32, 0x37, - 0x37, 0x31, 0x31, 0x2c, 0x30, 0x3a, 0x30, 0x2e, 0x32, 0x36, 0x31, 0x33, 0x31, 0x39, 0x0a, 0x0a}; -unsigned int cb_data_6_pred_len = 68; -unsigned char cb_data_7_model[] = {0x06, 0x00, 0x00, 0x00, 0x38, 0x2e, 0x35, 0x2e, 0x30, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x6d, 0x00, 0x00, 0x00, 0x00, 0x55, 0x55, 0x55, 0x40, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x94, 0x00, 0x00, 0x00, 0x20, 0x2d, 0x2d, 0x68, 0x61, 0x73, 0x68, 0x5f, - 0x73, 0x65, 0x65, 0x64, 0x20, 0x30, 0x20, 0x2d, 0x2d, 0x71, 0x75, 0x61, 0x64, 0x72, 0x61, 0x74, 0x69, 0x63, 0x20, - 0x61, 0x62, 0x20, 0x2d, 0x2d, 0x63, 0x62, 0x5f, 0x65, 0x78, 0x70, 0x6c, 0x6f, 0x72, 0x65, 0x5f, 0x61, 0x64, 0x66, - 0x20, 0x2d, 0x2d, 0x62, 0x61, 0x67, 0x20, 0x33, 0x20, 0x2d, 0x2d, 0x6c, 0x61, 0x6d, 0x62, 0x64, 0x61, 0x20, 0x31, - 0x20, 0x2d, 0x2d, 0x70, 0x73, 0x69, 0x20, 0x31, 0x20, 0x2d, 0x2d, 0x63, 0x62, 0x5f, 0x61, 0x64, 0x66, 0x20, 0x2d, - 0x2d, 0x63, 0x62, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x20, 0x69, 0x70, 0x73, 0x20, 0x2d, 0x2d, 0x63, 0x73, 0x6f, 0x61, - 0x61, 0x5f, 0x6c, 0x64, 0x66, 0x20, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x2d, 0x2d, 0x63, - 0x73, 0x6f, 0x61, 0x61, 0x5f, 0x72, 0x61, 0x6e, 0x6b, 0x20, 0x2d, 0x2d, 0x6c, 0x69, 0x6e, 0x6b, 0x20, 0x69, 0x64, - 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x00, 0x04, 0x00, 0x00, 0x00, 0x83, 0x4b, 0x89, 0xbc, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x54, 0x00, 0x00, 0x00, 0x4e, - 0xaa, 0xbc, 0x59, 0x54, 0x00, 0x00, 0xe9, 0x6a, 0xae, 0xbc, 0x5a, 0x54, 0x00, 0x00, 0x2e, 0x68, 0xa5, 0xbc, 0xd4, - 0x74, 0x00, 0x00, 0x9f, 0xa9, 0xf3, 0xbb, 0xd5, 0x74, 0x00, 0x00, 0xaf, 0xba, 0xf5, 0xbb, 0xd6, 0x74, 0x00, 0x00, - 0xb7, 0x94, 0x29, 0xbc, 0xc8, 0xa6, 0x01, 0x00, 0x39, 0x8e, 0xdf, 0x3c, 0xc9, 0xa6, 0x01, 0x00, 0x9e, 0xb1, 0xdf, - 0x3c, 0xca, 0xa6, 0x01, 0x00, 0xe6, 0x26, 0x0f, 0x3d, 0xdc, 0xa6, 0x01, 0x00, 0x8b, 0x17, 0xa0, 0x3d, 0xdd, 0xa6, - 0x01, 0x00, 0xd2, 0xc3, 0xa2, 0x3d, 0xde, 0xa6, 0x01, 0x00, 0x96, 0x56, 0x9d, 0x3d, 0x0c, 0xf8, 0x01, 0x00, 0xbc, - 0x6e, 0x7f, 0xbe, 0x0d, 0xf8, 0x01, 0x00, 0x9b, 0xd2, 0x82, 0xbe, 0x0e, 0xf8, 0x01, 0x00, 0x6c, 0x1a, 0x78, 0xbe, - 0x70, 0x15, 0x03, 0x00, 0x4a, 0x2e, 0x70, 0x3f, 0x71, 0x15, 0x03, 0x00, 0x7b, 0x25, 0x74, 0x3f, 0x72, 0x15, 0x03, - 0x00, 0x9c, 0x07, 0x6c, 0x3f}; -unsigned int cb_data_7_model_len = 361; -unsigned char cb_data_7_pred[] = {0x32, 0x3a, 0x31, 0x2c, 0x31, 0x3a, 0x30, 0x2c, 0x30, 0x3a, 0x30, 0x0a, 0x0a, 0x32, - 0x3a, 0x31, 0x2c, 0x31, 0x3a, 0x30, 0x2c, 0x30, 0x3a, 0x30, 0x0a, 0x0a}; +unsigned char cb_data_6_model[] = {0x06, 0x00, 0x00, 0x00, 0x39, 0x2e, 0x39, 0x2e, 0x30, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x6d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x71, 0x00, 0x00, 0x00, 0x20, 0x2d, 0x2d, 0x63, 0x62, 0x5f, 0x61, 0x64, + 0x66, 0x20, 0x2d, 0x2d, 0x63, 0x62, 0x5f, 0x65, 0x78, 0x70, 0x6c, 0x6f, 0x72, 0x65, 0x5f, 0x61, 0x64, 0x66, 0x20, + 0x2d, 0x2d, 0x63, 0x62, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x20, 0x6d, 0x74, 0x72, 0x20, 0x2d, 0x2d, 0x63, 0x73, 0x6f, + 0x61, 0x61, 0x5f, 0x6c, 0x64, 0x66, 0x20, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x2d, 0x2d, + 0x63, 0x73, 0x6f, 0x61, 0x61, 0x5f, 0x72, 0x61, 0x6e, 0x6b, 0x20, 0x2d, 0x2d, 0x6c, 0x61, 0x6d, 0x62, 0x64, 0x61, + 0x20, 0x2d, 0x32, 0x20, 0x2d, 0x2d, 0x71, 0x75, 0x61, 0x64, 0x72, 0x61, 0x74, 0x69, 0x63, 0x20, 0x61, 0x62, 0x20, + 0x2d, 0x2d, 0x73, 0x6f, 0x66, 0x74, 0x6d, 0x61, 0x78, 0x00, 0x04, 0x00, 0x00, 0x00, 0x06, 0xe4, 0xbd, 0x5d, 0x0a, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb2, 0x69, 0x01, + 0x00, 0x0d, 0x57, 0x2a, 0x3e, 0xb7, 0x69, 0x01, 0x00, 0xbd, 0x1e, 0x63, 0x3c, 0x5c, 0xc5, 0x01, 0x00, 0x0d, 0x57, + 0x2a, 0x3e, 0x03, 0x7e, 0x02, 0x00, 0x0d, 0x57, 0x2a, 0x3e, 0x16, 0x15, 0x03, 0x00, 0xbd, 0x1e, 0x63, 0x3c, 0x35, + 0x1d, 0x03, 0x00, 0x0d, 0x57, 0x2a, 0x3e}; +unsigned int cb_data_6_model_len = 230; +unsigned char cb_data_6_pred[] = {0x30, 0x3a, 0x30, 0x2e, 0x36, 0x36, 0x34, 0x37, 0x2c, 0x31, 0x3a, 0x30, 0x2e, 0x32, + 0x34, 0x34, 0x39, 0x39, 0x38, 0x2c, 0x32, 0x3a, 0x30, 0x2e, 0x30, 0x39, 0x30, 0x33, 0x30, 0x32, 0x0a, 0x0a, 0x30, + 0x3a, 0x30, 0x2e, 0x38, 0x36, 0x36, 0x38, 0x31, 0x33, 0x2c, 0x31, 0x3a, 0x30, 0x2e, 0x31, 0x31, 0x37, 0x33, 0x31, + 0x2c, 0x32, 0x3a, 0x30, 0x2e, 0x30, 0x31, 0x35, 0x38, 0x37, 0x36, 0x0a, 0x0a}; +unsigned int cb_data_6_pred_len = 65; +unsigned char cb_data_7_model[] = {0x06, 0x00, 0x00, 0x00, 0x39, 0x2e, 0x39, 0x2e, 0x30, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x6d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, 0x20, 0x2d, 0x2d, 0x62, 0x61, 0x67, 0x20, 0x33, + 0x20, 0x2d, 0x2d, 0x63, 0x62, 0x5f, 0x61, 0x64, 0x66, 0x20, 0x2d, 0x2d, 0x63, 0x62, 0x5f, 0x65, 0x78, 0x70, 0x6c, + 0x6f, 0x72, 0x65, 0x5f, 0x61, 0x64, 0x66, 0x20, 0x2d, 0x2d, 0x63, 0x62, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x20, 0x6d, + 0x74, 0x72, 0x20, 0x2d, 0x2d, 0x63, 0x73, 0x6f, 0x61, 0x61, 0x5f, 0x6c, 0x64, 0x66, 0x20, 0x6d, 0x75, 0x6c, 0x74, + 0x69, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x2d, 0x2d, 0x63, 0x73, 0x6f, 0x61, 0x61, 0x5f, 0x72, 0x61, 0x6e, 0x6b, 0x20, + 0x2d, 0x2d, 0x71, 0x75, 0x61, 0x64, 0x72, 0x61, 0x74, 0x69, 0x63, 0x20, 0x61, 0x62, 0x20, 0x2d, 0x2d, 0x72, 0x61, + 0x6e, 0x64, 0x6f, 0x6d, 0x5f, 0x73, 0x65, 0x65, 0x64, 0x20, 0x37, 0x35, 0x38, 0x39, 0x30, 0x36, 0x30, 0x31, 0x32, + 0x31, 0x34, 0x36, 0x33, 0x30, 0x32, 0x31, 0x32, 0x34, 0x30, 0x00, 0x04, 0x00, 0x00, 0x00, 0x6c, 0x85, 0x14, 0x21, + 0xc5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4f, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x54, + 0x00, 0x00, 0xbe, 0x9c, 0x29, 0x3c, 0x59, 0x54, 0x00, 0x00, 0x94, 0xad, 0x2e, 0x3c, 0x5a, 0x54, 0x00, 0x00, 0x3c, + 0x8e, 0x63, 0x3c, 0xd4, 0x74, 0x00, 0x00, 0xba, 0x19, 0x98, 0x3c, 0xd5, 0x74, 0x00, 0x00, 0xe5, 0x51, 0xbd, 0x3c, + 0xd6, 0x74, 0x00, 0x00, 0xaa, 0xaa, 0x2a, 0x3e, 0xc8, 0xa6, 0x01, 0x00, 0xc8, 0x50, 0x3c, 0x3d, 0xc9, 0xa6, 0x01, + 0x00, 0xf4, 0x52, 0x56, 0x3d, 0xca, 0xa6, 0x01, 0x00, 0xaa, 0xaa, 0x2a, 0x3e, 0xdc, 0xa6, 0x01, 0x00, 0x29, 0x7f, + 0xea, 0x3c, 0xdd, 0xa6, 0x01, 0x00, 0xe5, 0x3e, 0xe4, 0x3c, 0xde, 0xa6, 0x01, 0x00, 0x3c, 0x8e, 0x63, 0x3c, 0x0c, + 0xf8, 0x01, 0x00, 0x1f, 0x6b, 0xfe, 0x3d, 0x0d, 0xf8, 0x01, 0x00, 0x31, 0x02, 0x03, 0x3e, 0x0e, 0xf8, 0x01, 0x00, + 0xaa, 0xaa, 0x2a, 0x3e, 0x70, 0x15, 0x03, 0x00, 0x5c, 0xdf, 0xaf, 0x3e, 0x71, 0x15, 0x03, 0x00, 0x28, 0x2f, 0xab, + 0x3e, 0x72, 0x15, 0x03, 0x00, 0xaa, 0xaa, 0x2a, 0x3e}; +unsigned int cb_data_7_model_len = 346; +unsigned char cb_data_7_pred[] = {0x30, 0x3a, 0x31, 0x2c, 0x31, 0x3a, 0x30, 0x2c, 0x32, 0x3a, 0x30, 0x0a, 0x0a, 0x30, + 0x3a, 0x31, 0x2c, 0x31, 0x3a, 0x30, 0x2c, 0x32, 0x3a, 0x30, 0x0a, 0x0a}; unsigned int cb_data_7_pred_len = 26; -unsigned char cb_data_8_model[] = {0x06, 0x00, 0x00, 0x00, 0x38, 0x2e, 0x35, 0x2e, 0x30, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x6d, 0x00, 0x00, 0x00, 0x00, 0x55, 0x55, 0x55, 0x40, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa3, 0x00, 0x00, 0x00, 0x20, 0x2d, 0x2d, 0x68, 0x61, 0x73, 0x68, 0x5f, - 0x73, 0x65, 0x65, 0x64, 0x20, 0x30, 0x20, 0x2d, 0x2d, 0x71, 0x75, 0x61, 0x64, 0x72, 0x61, 0x74, 0x69, 0x63, 0x20, - 0x61, 0x62, 0x20, 0x2d, 0x2d, 0x63, 0x62, 0x5f, 0x65, 0x78, 0x70, 0x6c, 0x6f, 0x72, 0x65, 0x5f, 0x61, 0x64, 0x66, - 0x20, 0x2d, 0x2d, 0x62, 0x61, 0x67, 0x20, 0x35, 0x20, 0x2d, 0x2d, 0x65, 0x70, 0x73, 0x69, 0x6c, 0x6f, 0x6e, 0x20, - 0x30, 0x2e, 0x32, 0x37, 0x20, 0x2d, 0x2d, 0x6c, 0x61, 0x6d, 0x62, 0x64, 0x61, 0x20, 0x31, 0x20, 0x2d, 0x2d, 0x70, - 0x73, 0x69, 0x20, 0x31, 0x20, 0x2d, 0x2d, 0x63, 0x62, 0x5f, 0x61, 0x64, 0x66, 0x20, 0x2d, 0x2d, 0x63, 0x62, 0x5f, - 0x74, 0x79, 0x70, 0x65, 0x20, 0x69, 0x70, 0x73, 0x20, 0x2d, 0x2d, 0x63, 0x73, 0x6f, 0x61, 0x61, 0x5f, 0x6c, 0x64, - 0x66, 0x20, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x2d, 0x2d, 0x63, 0x73, 0x6f, 0x61, 0x61, - 0x5f, 0x72, 0x61, 0x6e, 0x6b, 0x20, 0x2d, 0x2d, 0x6c, 0x69, 0x6e, 0x6b, 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, - 0x74, 0x79, 0x00, 0x04, 0x00, 0x00, 0x00, 0xb1, 0xf7, 0x2d, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb0, 0xa8, 0x00, 0x00, 0x71, 0x18, 0x9b, 0xbc, 0xb1, 0xa8, - 0x00, 0x00, 0x7d, 0x0d, 0xb6, 0xbc, 0xb2, 0xa8, 0x00, 0x00, 0x54, 0x87, 0xbb, 0xbc, 0xb3, 0xa8, 0x00, 0x00, 0x42, - 0x3d, 0xab, 0xbc, 0xb4, 0xa8, 0x00, 0x00, 0x43, 0xee, 0xa1, 0xbc, 0xa8, 0xe9, 0x00, 0x00, 0xb6, 0x76, 0x38, 0xbc, - 0xa9, 0xe9, 0x00, 0x00, 0x20, 0xb2, 0x39, 0xbc, 0xaa, 0xe9, 0x00, 0x00, 0x5a, 0x46, 0x45, 0xbc, 0xab, 0xe9, 0x00, - 0x00, 0x7e, 0x0e, 0x49, 0xbc, 0xac, 0xe9, 0x00, 0x00, 0xa1, 0x9a, 0x5a, 0xbc, 0xe0, 0x2a, 0x02, 0x00, 0x51, 0x4e, - 0x63, 0x3f, 0xe1, 0x2a, 0x02, 0x00, 0x4d, 0xe9, 0x79, 0x3f, 0xe2, 0x2a, 0x02, 0x00, 0x14, 0xcd, 0x7e, 0x3f, 0xe3, - 0x2a, 0x02, 0x00, 0x41, 0xca, 0x70, 0x3f, 0xe4, 0x2a, 0x02, 0x00, 0xe8, 0xb9, 0x68, 0x3f, 0x90, 0x4d, 0x03, 0x00, - 0x6b, 0x97, 0x17, 0x3d, 0x91, 0x4d, 0x03, 0x00, 0xd1, 0x6f, 0x17, 0x3d, 0x92, 0x4d, 0x03, 0x00, 0x0f, 0xd3, 0x1d, - 0x3d, 0x93, 0x4d, 0x03, 0x00, 0xed, 0xa8, 0x23, 0x3d, 0x94, 0x4d, 0x03, 0x00, 0x44, 0xa8, 0x2b, 0x3d, 0xb8, 0x4d, - 0x03, 0x00, 0x8f, 0x87, 0x97, 0x3d, 0xb9, 0x4d, 0x03, 0x00, 0x2a, 0x98, 0xa6, 0x3d, 0xba, 0x4d, 0x03, 0x00, 0x7a, - 0xdf, 0xa9, 0x3d, 0xbb, 0x4d, 0x03, 0x00, 0xc9, 0x85, 0xa0, 0x3d, 0xbc, 0x4d, 0x03, 0x00, 0xc9, 0x1d, 0x9b, 0x3d, - 0x18, 0xf0, 0x03, 0x00, 0xda, 0xa7, 0x68, 0xbe, 0x19, 0xf0, 0x03, 0x00, 0xc3, 0x88, 0x88, 0xbe, 0x1a, 0xf0, 0x03, - 0x00, 0x95, 0xa5, 0x8c, 0xbe, 0x1b, 0xf0, 0x03, 0x00, 0x5c, 0x6c, 0x80, 0xbe, 0x1c, 0xf0, 0x03, 0x00, 0xea, 0xf0, - 0x72, 0xbe}; -unsigned int cb_data_8_model_len = 472; -unsigned char cb_data_8_pred[] = {0x32, 0x3a, 0x30, 0x2e, 0x38, 0x32, 0x2c, 0x31, 0x3a, 0x30, 0x2e, 0x30, 0x39, 0x2c, - 0x30, 0x3a, 0x30, 0x2e, 0x30, 0x39, 0x0a, 0x0a, 0x32, 0x3a, 0x30, 0x2e, 0x38, 0x32, 0x2c, 0x31, 0x3a, 0x30, 0x2e, - 0x30, 0x39, 0x2c, 0x30, 0x3a, 0x30, 0x2e, 0x30, 0x39, 0x0a, 0x0a}; +unsigned char cb_data_8_model[] = {0x06, 0x00, 0x00, 0x00, 0x39, 0x2e, 0x39, 0x2e, 0x30, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x6d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa2, 0x00, 0x00, 0x00, 0x20, 0x2d, 0x2d, 0x62, 0x61, 0x67, 0x20, 0x35, + 0x20, 0x2d, 0x2d, 0x63, 0x62, 0x5f, 0x61, 0x64, 0x66, 0x20, 0x2d, 0x2d, 0x63, 0x62, 0x5f, 0x65, 0x78, 0x70, 0x6c, + 0x6f, 0x72, 0x65, 0x5f, 0x61, 0x64, 0x66, 0x20, 0x2d, 0x2d, 0x63, 0x62, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x20, 0x6d, + 0x74, 0x72, 0x20, 0x2d, 0x2d, 0x63, 0x73, 0x6f, 0x61, 0x61, 0x5f, 0x6c, 0x64, 0x66, 0x20, 0x6d, 0x75, 0x6c, 0x74, + 0x69, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x2d, 0x2d, 0x63, 0x73, 0x6f, 0x61, 0x61, 0x5f, 0x72, 0x61, 0x6e, 0x6b, 0x20, + 0x2d, 0x2d, 0x65, 0x70, 0x73, 0x69, 0x6c, 0x6f, 0x6e, 0x20, 0x30, 0x2e, 0x32, 0x37, 0x30, 0x30, 0x30, 0x30, 0x30, + 0x31, 0x30, 0x37, 0x32, 0x38, 0x38, 0x33, 0x36, 0x20, 0x2d, 0x2d, 0x71, 0x75, 0x61, 0x64, 0x72, 0x61, 0x74, 0x69, + 0x63, 0x20, 0x61, 0x62, 0x20, 0x2d, 0x2d, 0x72, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x5f, 0x73, 0x65, 0x65, 0x64, 0x20, + 0x31, 0x36, 0x37, 0x30, 0x39, 0x32, 0x38, 0x30, 0x35, 0x30, 0x37, 0x32, 0x38, 0x33, 0x33, 0x33, 0x35, 0x35, 0x36, + 0x30, 0x00, 0x04, 0x00, 0x00, 0x00, 0x77, 0x5b, 0xb6, 0xc8, 0xd0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb0, 0xa8, 0x00, 0x00, 0x3c, 0x8e, 0x63, 0x3c, 0xb1, 0xa8, 0x00, + 0x00, 0xa8, 0xfd, 0x2c, 0x3c, 0xb2, 0xa8, 0x00, 0x00, 0x94, 0xad, 0x2e, 0x3c, 0xb3, 0xa8, 0x00, 0x00, 0x3c, 0x8e, + 0x63, 0x3c, 0xb4, 0xa8, 0x00, 0x00, 0x3c, 0x8e, 0x63, 0x3c, 0xa8, 0xe9, 0x00, 0x00, 0xaa, 0xaa, 0x2a, 0x3e, 0xa9, + 0xe9, 0x00, 0x00, 0xfb, 0x83, 0xb3, 0x3c, 0xaa, 0xe9, 0x00, 0x00, 0xe5, 0x51, 0xbd, 0x3c, 0xab, 0xe9, 0x00, 0x00, + 0xaa, 0xaa, 0x2a, 0x3e, 0xac, 0xe9, 0x00, 0x00, 0xaa, 0xaa, 0x2a, 0x3e, 0xe0, 0x2a, 0x02, 0x00, 0xaa, 0xaa, 0x2a, + 0x3e, 0xe1, 0x2a, 0x02, 0x00, 0xe0, 0x91, 0xac, 0x3e, 0xe2, 0x2a, 0x02, 0x00, 0x28, 0x2f, 0xab, 0x3e, 0xe3, 0x2a, + 0x02, 0x00, 0xaa, 0xaa, 0x2a, 0x3e, 0xe4, 0x2a, 0x02, 0x00, 0xaa, 0xaa, 0x2a, 0x3e, 0x90, 0x4d, 0x03, 0x00, 0xaa, + 0xaa, 0x2a, 0x3e, 0x91, 0x4d, 0x03, 0x00, 0x08, 0x2e, 0x4f, 0x3d, 0x92, 0x4d, 0x03, 0x00, 0xf4, 0x52, 0x56, 0x3d, + 0x93, 0x4d, 0x03, 0x00, 0xaa, 0xaa, 0x2a, 0x3e, 0x94, 0x4d, 0x03, 0x00, 0xaa, 0xaa, 0x2a, 0x3e, 0xb8, 0x4d, 0x03, + 0x00, 0x3c, 0x8e, 0x63, 0x3c, 0xb9, 0x4d, 0x03, 0x00, 0xd5, 0x17, 0xe6, 0x3c, 0xba, 0x4d, 0x03, 0x00, 0xe5, 0x3e, + 0xe4, 0x3c, 0xbb, 0x4d, 0x03, 0x00, 0x3c, 0x8e, 0x63, 0x3c, 0xbc, 0x4d, 0x03, 0x00, 0x3c, 0x8e, 0x63, 0x3c, 0x18, + 0xf0, 0x03, 0x00, 0xaa, 0xaa, 0x2a, 0x3e, 0x19, 0xf0, 0x03, 0x00, 0x40, 0xbe, 0x01, 0x3e, 0x1a, 0xf0, 0x03, 0x00, + 0x31, 0x02, 0x03, 0x3e, 0x1b, 0xf0, 0x03, 0x00, 0xaa, 0xaa, 0x2a, 0x3e, 0x1c, 0xf0, 0x03, 0x00, 0xaa, 0xaa, 0x2a, + 0x3e}; +unsigned int cb_data_8_model_len = 471; +unsigned char cb_data_8_pred[] = {0x30, 0x3a, 0x30, 0x2e, 0x38, 0x32, 0x2c, 0x31, 0x3a, 0x30, 0x2e, 0x30, 0x39, 0x2c, + 0x32, 0x3a, 0x30, 0x2e, 0x30, 0x39, 0x0a, 0x0a, 0x30, 0x3a, 0x30, 0x2e, 0x38, 0x32, 0x2c, 0x31, 0x3a, 0x30, 0x2e, + 0x30, 0x39, 0x2c, 0x32, 0x3a, 0x30, 0x2e, 0x30, 0x39, 0x0a, 0x0a}; unsigned int cb_data_8_pred_len = 44; -unsigned char cb_data_9_model[] = {0x06, 0x00, 0x00, 0x00, 0x38, 0x2e, 0x35, 0x2e, 0x30, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x6d, 0x00, 0x00, 0x00, 0x00, 0x55, 0x55, 0x55, 0x40, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x99, 0x00, 0x00, 0x00, 0x20, 0x2d, 0x2d, 0x68, 0x61, 0x73, 0x68, 0x5f, - 0x73, 0x65, 0x65, 0x64, 0x20, 0x30, 0x20, 0x2d, 0x2d, 0x71, 0x75, 0x61, 0x64, 0x72, 0x61, 0x74, 0x69, 0x63, 0x20, - 0x61, 0x62, 0x20, 0x2d, 0x2d, 0x63, 0x62, 0x5f, 0x65, 0x78, 0x70, 0x6c, 0x6f, 0x72, 0x65, 0x5f, 0x61, 0x64, 0x66, - 0x20, 0x2d, 0x2d, 0x65, 0x70, 0x73, 0x69, 0x6c, 0x6f, 0x6e, 0x20, 0x30, 0x2e, 0x33, 0x20, 0x2d, 0x2d, 0x6c, 0x61, - 0x6d, 0x62, 0x64, 0x61, 0x20, 0x31, 0x20, 0x2d, 0x2d, 0x70, 0x73, 0x69, 0x20, 0x31, 0x20, 0x2d, 0x2d, 0x63, 0x62, - 0x5f, 0x61, 0x64, 0x66, 0x20, 0x2d, 0x2d, 0x63, 0x62, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x20, 0x64, 0x72, 0x20, 0x2d, - 0x2d, 0x63, 0x73, 0x6f, 0x61, 0x61, 0x5f, 0x6c, 0x64, 0x66, 0x20, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x6c, 0x69, 0x6e, - 0x65, 0x20, 0x2d, 0x2d, 0x63, 0x73, 0x6f, 0x61, 0x61, 0x5f, 0x72, 0x61, 0x6e, 0x6b, 0x20, 0x2d, 0x2d, 0x6c, 0x69, - 0x6e, 0x6b, 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x00, 0x04, 0x00, 0x00, 0x00, 0x2a, 0x6d, 0x36, - 0x99, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, - 0xfc, 0x00, 0x00, 0x5d, 0x18, 0x2c, 0x38, 0x07, 0xfc, 0x00, 0x00, 0x9f, 0x19, 0xe6, 0x33, 0x2c, 0x2a, 0x02, 0x00, - 0xe3, 0x3a, 0x8e, 0x36, 0x6a, 0x3a, 0x02, 0x00, 0xaf, 0x53, 0x0a, 0xb8, 0x64, 0xd3, 0x02, 0x00, 0x62, 0x48, 0xa4, - 0x38, 0x6e, 0xd3, 0x02, 0x00, 0x0b, 0x9f, 0x2a, 0x3d, 0xb8, 0x8a, 0x03, 0x00, 0x44, 0xf5, 0xff, 0x3e, 0xb9, 0x8a, - 0x03, 0x00, 0xfd, 0xff, 0x7f, 0x3f}; -unsigned int cb_data_9_model_len = 286; +unsigned char cb_data_9_model[] = {0x06, 0x00, 0x00, 0x00, 0x39, 0x2e, 0x39, 0x2e, 0x30, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x6d, 0x36, 0x70, 0xc2, 0xbf, 0x29, 0x5e, 0x62, 0x40, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0x00, 0x00, 0x00, 0x20, 0x2d, 0x2d, 0x63, 0x62, 0x5f, 0x61, 0x64, + 0x66, 0x20, 0x2d, 0x2d, 0x63, 0x62, 0x5f, 0x65, 0x78, 0x70, 0x6c, 0x6f, 0x72, 0x65, 0x5f, 0x61, 0x64, 0x66, 0x20, + 0x2d, 0x2d, 0x63, 0x62, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x20, 0x64, 0x72, 0x20, 0x2d, 0x2d, 0x63, 0x73, 0x6f, 0x61, + 0x61, 0x5f, 0x6c, 0x64, 0x66, 0x20, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x2d, 0x2d, 0x63, + 0x73, 0x6f, 0x61, 0x61, 0x5f, 0x72, 0x61, 0x6e, 0x6b, 0x20, 0x2d, 0x2d, 0x65, 0x70, 0x73, 0x69, 0x6c, 0x6f, 0x6e, + 0x20, 0x30, 0x2e, 0x33, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x31, 0x31, 0x39, 0x32, 0x30, 0x39, 0x32, 0x39, 0x20, + 0x2d, 0x2d, 0x71, 0x75, 0x61, 0x64, 0x72, 0x61, 0x74, 0x69, 0x63, 0x20, 0x61, 0x62, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x0f, 0xd3, 0x3b, 0x51, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x06, 0xfc, 0x00, 0x00, 0x4e, 0x66, 0xa0, 0x3d, 0x07, 0xfc, 0x00, 0x00, 0x30, 0xa5, 0xa0, 0x3d, 0x2c, + 0x2a, 0x02, 0x00, 0x92, 0xdd, 0xd5, 0x3b, 0x2d, 0x2a, 0x02, 0x00, 0x90, 0x31, 0xd6, 0x3b, 0x6a, 0x3a, 0x02, 0x00, + 0x06, 0xa3, 0x94, 0xbc, 0x6b, 0x3a, 0x02, 0x00, 0xcb, 0x5a, 0x95, 0xbc, 0x64, 0xd3, 0x02, 0x00, 0x60, 0x13, 0x23, + 0xbc, 0x65, 0xd3, 0x02, 0x00, 0x09, 0xc9, 0x1f, 0xbc, 0x6e, 0xd3, 0x02, 0x00, 0xf8, 0xc2, 0x14, 0x3d, 0x6f, 0xd3, + 0x02, 0x00, 0x23, 0xab, 0x14, 0x3d, 0xb8, 0x8a, 0x03, 0x00, 0x66, 0x24, 0xdf, 0x3e, 0xb9, 0x8a, 0x03, 0x00, 0xa7, + 0x00, 0xdf, 0x3e}; +unsigned int cb_data_9_model_len = 283; unsigned char cb_data_9_pred[] = {0x30, 0x3a, 0x30, 0x2e, 0x38, 0x2c, 0x31, 0x3a, 0x30, 0x2e, 0x31, 0x2c, 0x32, 0x3a, 0x30, 0x2e, 0x31, 0x0a, 0x0a, 0x30, 0x3a, 0x30, 0x2e, 0x38, 0x2c, 0x31, 0x3a, 0x30, 0x2e, 0x31, 0x2c, 0x32, 0x3a, 0x30, 0x2e, 0x31, 0x0a, 0x0a}; unsigned int cb_data_9_pred_len = 38; -unsigned char cb_data_epsilon_0_skype_jb_model[] = {0x06, 0x00, 0x00, 0x00, 0x38, 0x2E, 0x34, 0x2E, 0x30, 0x00, 0x01, - 0x00, 0x00, 0x00, 0x00, 0x6D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x41, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9B, 0x00, 0x00, 0x00, 0x20, 0x2D, 0x2D, 0x71, 0x75, - 0x61, 0x64, 0x72, 0x61, 0x74, 0x69, 0x63, 0x20, 0x36, 0x38, 0x20, 0x2D, 0x2D, 0x71, 0x75, 0x61, 0x64, 0x72, 0x61, - 0x74, 0x69, 0x63, 0x20, 0x31, 0x38, 0x20, 0x2D, 0x2D, 0x71, 0x75, 0x61, 0x64, 0x72, 0x61, 0x74, 0x69, 0x63, 0x20, - 0x33, 0x38, 0x20, 0x2D, 0x2D, 0x71, 0x75, 0x61, 0x64, 0x72, 0x61, 0x74, 0x69, 0x63, 0x20, 0x34, 0x38, 0x20, 0x2D, - 0x2D, 0x63, 0x62, 0x5F, 0x65, 0x78, 0x70, 0x6C, 0x6F, 0x72, 0x65, 0x5F, 0x61, 0x64, 0x66, 0x20, 0x2D, 0x2D, 0x65, - 0x70, 0x73, 0x69, 0x6C, 0x6F, 0x6E, 0x20, 0x30, 0x2E, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x20, 0x2D, 0x2D, 0x63, - 0x62, 0x5F, 0x61, 0x64, 0x66, 0x20, 0x2D, 0x2D, 0x63, 0x62, 0x5F, 0x74, 0x79, 0x70, 0x65, 0x20, 0x69, 0x70, 0x73, - 0x20, 0x2D, 0x2D, 0x63, 0x73, 0x6F, 0x61, 0x61, 0x5F, 0x6C, 0x64, 0x66, 0x20, 0x6D, 0x75, 0x6C, 0x74, 0x69, 0x6C, - 0x69, 0x6E, 0x65, 0x20, 0x2D, 0x2D, 0x63, 0x73, 0x6F, 0x61, 0x61, 0x5F, 0x72, 0x61, 0x6E, 0x6B, 0x00, 0x04, 0x00, - 0x00, 0x00, 0x50, 0x5F, 0x61, 0x6D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x1F, 0x6C, 0x90, 0x3C, 0x11, 0x00, 0x00, 0x00, 0xC9, 0x0B, 0xD1, - 0x3C, 0x22, 0x00, 0x00, 0x00, 0x16, 0xDA, 0x91, 0x3B, 0x24, 0x00, 0x00, 0x00, 0x1B, 0xBC, 0x92, 0x3C, 0x30, 0x00, - 0x00, 0x00, 0xFF, 0xC4, 0x63, 0x3B, 0x31, 0x00, 0x00, 0x00, 0x24, 0x2A, 0x91, 0xB9, 0x34, 0x00, 0x00, 0x00, 0x34, - 0x71, 0x24, 0x3D, 0x40, 0x00, 0x00, 0x00, 0x08, 0x54, 0xF9, 0x3C, 0x42, 0x00, 0x00, 0x00, 0x0F, 0x4A, 0x55, 0x3C, - 0x50, 0x00, 0x00, 0x00, 0x52, 0x60, 0x14, 0x3C, 0x51, 0x00, 0x00, 0x00, 0x71, 0x7B, 0x23, 0x3C, 0x52, 0x00, 0x00, - 0x00, 0x4E, 0xD3, 0x10, 0x3C, 0x53, 0x00, 0x00, 0x00, 0x4A, 0x47, 0x17, 0x3C, 0x54, 0x00, 0x00, 0x00, 0x4E, 0x6F, - 0x16, 0x3C, 0x55, 0x00, 0x00, 0x00, 0x24, 0x25, 0x1B, 0x3C, 0x56, 0x00, 0x00, 0x00, 0x52, 0xF4, 0x1A, 0x3C, 0x57, - 0x00, 0x00, 0x00, 0x5E, 0x4A, 0x28, 0x3C, 0x58, 0x00, 0x00, 0x00, 0x3A, 0xFA, 0x24, 0x3C, 0x59, 0x00, 0x00, 0x00, - 0x2E, 0x47, 0x2B, 0x3C, 0x07, 0x04, 0x00, 0x00, 0xEA, 0x0E, 0x1A, 0x3D, 0x17, 0x04, 0x00, 0x00, 0xF6, 0x83, 0x64, - 0xBA, 0x27, 0x04, 0x00, 0x00, 0x08, 0xA3, 0xA2, 0xBA, 0x60, 0x19, 0x00, 0x00, 0xCF, 0xB0, 0x93, 0x3B, 0x61, 0x19, - 0x00, 0x00, 0xD0, 0xE4, 0x8C, 0x3B, 0x62, 0x19, 0x00, 0x00, 0xE0, 0x96, 0x98, 0x3B, 0x63, 0x19, 0x00, 0x00, 0x85, - 0xE5, 0x8A, 0x3B, 0x64, 0x19, 0x00, 0x00, 0x06, 0xC2, 0xA5, 0x3B, 0x65, 0x19, 0x00, 0x00, 0x70, 0x22, 0xB7, 0x3B, - 0x66, 0x19, 0x00, 0x00, 0x6F, 0xA2, 0x90, 0x3B, 0x67, 0x19, 0x00, 0x00, 0xAF, 0x6D, 0xAF, 0x3B, 0x68, 0x19, 0x00, - 0x00, 0x5C, 0x03, 0x9F, 0x3B, 0x69, 0x19, 0x00, 0x00, 0x7C, 0x12, 0xBA, 0x3B, 0x90, 0x1A, 0x00, 0x00, 0xCE, 0x61, - 0xEB, 0x3B, 0x91, 0x1A, 0x00, 0x00, 0xDE, 0x5C, 0xEC, 0x3B, 0x92, 0x1A, 0x00, 0x00, 0xA8, 0x99, 0xE6, 0x3B, 0x93, - 0x1A, 0x00, 0x00, 0x3B, 0x98, 0xDF, 0x3B, 0x94, 0x1A, 0x00, 0x00, 0x17, 0xA7, 0x00, 0x3C, 0x95, 0x1A, 0x00, 0x00, - 0x54, 0xC4, 0x00, 0x3C, 0x96, 0x1A, 0x00, 0x00, 0x3D, 0xF9, 0x07, 0x3C, 0x97, 0x1A, 0x00, 0x00, 0x72, 0xBB, 0xF9, - 0x3B, 0x9A, 0x1A, 0x00, 0x00, 0xC5, 0x53, 0x06, 0x3C, 0x9B, 0x1A, 0x00, 0x00, 0x0B, 0x26, 0xFA, 0x3B, 0xD0, 0x35, - 0x00, 0x00, 0x01, 0xA2, 0x73, 0x3A, 0xD1, 0x35, 0x00, 0x00, 0x2E, 0x1B, 0x76, 0xB9, 0xD2, 0x35, 0x00, 0x00, 0x0A, - 0xD5, 0xFB, 0x38, 0xD3, 0x35, 0x00, 0x00, 0x3F, 0xE2, 0x59, 0x3A, 0xD4, 0x35, 0x00, 0x00, 0x05, 0x35, 0xA8, 0xB9, - 0xD5, 0x35, 0x00, 0x00, 0xED, 0x75, 0xC1, 0xB8, 0xD6, 0x35, 0x00, 0x00, 0xE9, 0x66, 0x84, 0xBA, 0xD7, 0x35, 0x00, - 0x00, 0xA3, 0x93, 0x5B, 0xBA, 0xDE, 0x35, 0x00, 0x00, 0xD8, 0xEB, 0x28, 0x3A, 0xDF, 0x35, 0x00, 0x00, 0xF2, 0xA3, - 0x28, 0x3A, 0xF4, 0x38, 0x00, 0x00, 0x07, 0xE5, 0xB3, 0x3B, 0xF5, 0x38, 0x00, 0x00, 0xF3, 0x63, 0xB1, 0x3B, 0xF8, - 0x38, 0x00, 0x00, 0xC5, 0xF0, 0xC0, 0x3B, 0xF9, 0x38, 0x00, 0x00, 0x40, 0x85, 0xBE, 0x3B, 0xFA, 0x38, 0x00, 0x00, - 0xEB, 0xCB, 0xAE, 0x3B, 0xFB, 0x38, 0x00, 0x00, 0x64, 0xBC, 0xC0, 0x3B, 0xFC, 0x38, 0x00, 0x00, 0xB8, 0x35, 0x94, - 0x3B, 0xFD, 0x38, 0x00, 0x00, 0xB2, 0x87, 0x9D, 0x3B, 0xFE, 0x38, 0x00, 0x00, 0x86, 0x21, 0xA4, 0x3B, 0xFF, 0x38, - 0x00, 0x00, 0x4F, 0x11, 0xA1, 0x3B, 0xC0, 0x4B, 0x00, 0x00, 0x9C, 0x97, 0x14, 0x3A, 0xC1, 0x4B, 0x00, 0x00, 0x8C, - 0x68, 0x75, 0x3A, 0xC2, 0x4B, 0x00, 0x00, 0x31, 0xC2, 0x20, 0x3A, 0xC3, 0x4B, 0x00, 0x00, 0xEF, 0x20, 0xB5, 0x39, - 0xC4, 0x4B, 0x00, 0x00, 0xC0, 0x6A, 0x4C, 0x39, 0xC5, 0x4B, 0x00, 0x00, 0x37, 0x8A, 0x7B, 0xB9, 0xC6, 0x4B, 0x00, - 0x00, 0x0C, 0x50, 0xB6, 0x3A, 0xC7, 0x4B, 0x00, 0x00, 0x7F, 0x54, 0xE2, 0x39, 0xC8, 0x4B, 0x00, 0x00, 0x0F, 0x8B, - 0x8A, 0x3A, 0xC9, 0x4B, 0x00, 0x00, 0xD3, 0x50, 0xB2, 0x3A, 0x70, 0x4D, 0x00, 0x00, 0x98, 0x6D, 0xA5, 0xB9, 0x71, - 0x4D, 0x00, 0x00, 0x69, 0x76, 0xA5, 0xB9, 0x72, 0x4D, 0x00, 0x00, 0xD1, 0xBD, 0xA5, 0x39, 0x73, 0x4D, 0x00, 0x00, - 0x88, 0x23, 0xA5, 0xB9, 0x74, 0x4D, 0x00, 0x00, 0xFD, 0x72, 0xA5, 0xB9, 0x75, 0x4D, 0x00, 0x00, 0x1E, 0x79, 0xA5, - 0xB9, 0x76, 0x4D, 0x00, 0x00, 0x79, 0x77, 0xA5, 0xB9, 0x77, 0x4D, 0x00, 0x00, 0x6C, 0x77, 0xA5, 0xB9, 0x7A, 0x4D, - 0x00, 0x00, 0x06, 0x78, 0xA5, 0xB9, 0x7B, 0x4D, 0x00, 0x00, 0xEF, 0x6D, 0xA5, 0xB9, 0x84, 0x51, 0x00, 0x00, 0x1A, - 0x82, 0x57, 0x3C, 0x85, 0x51, 0x00, 0x00, 0x52, 0xA5, 0x54, 0x3C, 0x88, 0x51, 0x00, 0x00, 0x54, 0xD8, 0x4D, 0x3C, - 0x89, 0x51, 0x00, 0x00, 0x9F, 0xE9, 0x3D, 0x3C, 0x8A, 0x51, 0x00, 0x00, 0xD7, 0xA9, 0x4A, 0x3C, 0x8B, 0x51, 0x00, - 0x00, 0x90, 0x5C, 0x4D, 0x3C, 0x8C, 0x51, 0x00, 0x00, 0x7F, 0x1A, 0x4B, 0x3C, 0x8D, 0x51, 0x00, 0x00, 0x01, 0x70, - 0x51, 0x3C, 0x8E, 0x51, 0x00, 0x00, 0x36, 0x65, 0x2E, 0x3C, 0x8F, 0x51, 0x00, 0x00, 0xAF, 0x53, 0x4F, 0x3C, 0x90, - 0x64, 0x00, 0x00, 0xA4, 0x16, 0x13, 0x3C, 0x91, 0x64, 0x00, 0x00, 0x1C, 0x79, 0xE7, 0x3B, 0x92, 0x64, 0x00, 0x00, - 0xCE, 0xB9, 0x07, 0x3C, 0x93, 0x64, 0x00, 0x00, 0xC9, 0x54, 0x0D, 0x3C, 0x94, 0x64, 0x00, 0x00, 0x94, 0x39, 0x0A, - 0x3C, 0x95, 0x64, 0x00, 0x00, 0xAB, 0xD9, 0x14, 0x3C, 0x96, 0x64, 0x00, 0x00, 0xC1, 0x47, 0x0C, 0x3C, 0x97, 0x64, - 0x00, 0x00, 0x45, 0x0E, 0x1C, 0x3C, 0x98, 0x64, 0x00, 0x00, 0xD0, 0xA3, 0x16, 0x3C, 0x99, 0x64, 0x00, 0x00, 0xE3, - 0xBB, 0x17, 0x3C, 0xB0, 0x67, 0x00, 0x00, 0x2F, 0x90, 0x8C, 0x3B, 0xB1, 0x67, 0x00, 0x00, 0x77, 0xB4, 0x3C, 0x3B, - 0xB2, 0x67, 0x00, 0x00, 0xD3, 0x3E, 0x8C, 0x3B, 0xB3, 0x67, 0x00, 0x00, 0x7A, 0xD7, 0x09, 0x3B, 0xB4, 0x67, 0x00, - 0x00, 0xC6, 0x3C, 0x59, 0x3B, 0xB5, 0x67, 0x00, 0x00, 0x69, 0x4B, 0x0A, 0x3B, 0xB6, 0x67, 0x00, 0x00, 0x77, 0xDD, - 0x48, 0x3B, 0xB7, 0x67, 0x00, 0x00, 0x78, 0xE8, 0xA1, 0x3A, 0xBE, 0x67, 0x00, 0x00, 0x81, 0x47, 0x87, 0x3B, 0xBF, - 0x67, 0x00, 0x00, 0x97, 0x87, 0x8E, 0x3B, 0x5C, 0xC5, 0x01, 0x00, 0x15, 0x90, 0xFD, 0x3C, 0x50, 0x57, 0x02, 0x00, - 0x9C, 0xC7, 0x2C, 0x3C, 0x51, 0x57, 0x02, 0x00, 0x5B, 0x0E, 0x14, 0x3C, 0x52, 0x57, 0x02, 0x00, 0xE4, 0x30, 0x24, - 0x3C, 0x53, 0x57, 0x02, 0x00, 0x0E, 0x23, 0x0D, 0x3C, 0x54, 0x57, 0x02, 0x00, 0x15, 0xCC, 0x42, 0x3C, 0x55, 0x57, - 0x02, 0x00, 0x8D, 0x14, 0x3F, 0x3C, 0x56, 0x57, 0x02, 0x00, 0x84, 0x3F, 0x44, 0x3C, 0x57, 0x57, 0x02, 0x00, 0xA2, - 0x59, 0x0D, 0x3C, 0x5C, 0x57, 0x02, 0x00, 0xA6, 0x7B, 0x44, 0x3C, 0x5D, 0x57, 0x02, 0x00, 0xC9, 0xC8, 0x32, 0x3C, - 0x60, 0x70, 0x02, 0x00, 0x56, 0x18, 0x0D, 0xBA, 0x61, 0x70, 0x02, 0x00, 0x00, 0x10, 0x39, 0x34, 0x62, 0x70, 0x02, - 0x00, 0xE1, 0x7E, 0x9B, 0x39, 0x63, 0x70, 0x02, 0x00, 0x41, 0xFD, 0x0C, 0xBA, 0x64, 0x70, 0x02, 0x00, 0xF0, 0xBE, - 0x0C, 0xBA, 0x65, 0x70, 0x02, 0x00, 0xC3, 0xC2, 0x0C, 0xBA, 0x66, 0x70, 0x02, 0x00, 0xCA, 0x22, 0x0D, 0xBA, 0x67, - 0x70, 0x02, 0x00, 0x54, 0xC2, 0x0C, 0xBA, 0x6C, 0x70, 0x02, 0x00, 0x48, 0x2C, 0x0D, 0xBA, 0x6D, 0x70, 0x02, 0x00, - 0xDC, 0x44, 0x0D, 0xBA, 0x30, 0x89, 0x02, 0x00, 0x39, 0x9F, 0x00, 0xB9, 0x31, 0x89, 0x02, 0x00, 0x23, 0x11, 0x03, - 0xBB, 0x32, 0x89, 0x02, 0x00, 0x19, 0xA2, 0x02, 0xBB, 0x33, 0x89, 0x02, 0x00, 0xFF, 0xF0, 0xD6, 0xBA, 0x34, 0x89, - 0x02, 0x00, 0x0C, 0x23, 0x03, 0xBB, 0x35, 0x89, 0x02, 0x00, 0x4C, 0xC7, 0x02, 0xBB, 0x36, 0x89, 0x02, 0x00, 0x36, - 0xE6, 0x9D, 0x39, 0x37, 0x89, 0x02, 0x00, 0x38, 0xE8, 0x3F, 0xB9, 0x3C, 0x89, 0x02, 0x00, 0xDD, 0x62, 0xD9, 0x39, - 0x3D, 0x89, 0x02, 0x00, 0x88, 0xE6, 0x03, 0xBB}; -unsigned int cb_data_epsilon_0_skype_jb_model_len = 1368; -unsigned char cb_data_epsilon_0_skype_jb_pred[] = {0x00}; -unsigned int cb_data_epsilon_0_skype_jb_pred_len = 1; \ No newline at end of file diff --git a/vowpalwabbit/slim/test/data/cb_data_5.model b/vowpalwabbit/slim/test/data/cb_data_5.model index b62b3d410df..140b6f4740b 100644 Binary files a/vowpalwabbit/slim/test/data/cb_data_5.model and b/vowpalwabbit/slim/test/data/cb_data_5.model differ diff --git a/vowpalwabbit/slim/test/data/cb_data_5.pred b/vowpalwabbit/slim/test/data/cb_data_5.pred index a95a5317690..37724df1fb5 100644 --- a/vowpalwabbit/slim/test/data/cb_data_5.pred +++ b/vowpalwabbit/slim/test/data/cb_data_5.pred @@ -1,4 +1,4 @@ -2:0.8,1:0.1,0:0.1 +0:0.8,1:0.1,2:0.1 -2:0.8,1:0.1,0:0.1 +0:0.8,1:0.1,2:0.1 diff --git a/vowpalwabbit/slim/test/data/cb_data_6.model b/vowpalwabbit/slim/test/data/cb_data_6.model index d5d86532721..a3c9537945a 100644 Binary files a/vowpalwabbit/slim/test/data/cb_data_6.model and b/vowpalwabbit/slim/test/data/cb_data_6.model differ diff --git a/vowpalwabbit/slim/test/data/cb_data_6.pred b/vowpalwabbit/slim/test/data/cb_data_6.pred index 7f05b1bbb53..3a9347e2e86 100644 --- a/vowpalwabbit/slim/test/data/cb_data_6.pred +++ b/vowpalwabbit/slim/test/data/cb_data_6.pred @@ -1,4 +1,4 @@ -2:0.337614,1:0.333315,0:0.329071 +0:0.6647,1:0.244998,2:0.090302 -2:0.410971,1:0.327711,0:0.261319 +0:0.866813,1:0.11731,2:0.015876 diff --git a/vowpalwabbit/slim/test/data/cb_data_7.model b/vowpalwabbit/slim/test/data/cb_data_7.model index ffb0fa23261..3cfd196c90d 100644 Binary files a/vowpalwabbit/slim/test/data/cb_data_7.model and b/vowpalwabbit/slim/test/data/cb_data_7.model differ diff --git a/vowpalwabbit/slim/test/data/cb_data_7.pred b/vowpalwabbit/slim/test/data/cb_data_7.pred index dd30d21e58d..57b426532cc 100644 --- a/vowpalwabbit/slim/test/data/cb_data_7.pred +++ b/vowpalwabbit/slim/test/data/cb_data_7.pred @@ -1,4 +1,4 @@ -2:1,1:0,0:0 +0:1,1:0,2:0 -2:1,1:0,0:0 +0:1,1:0,2:0 diff --git a/vowpalwabbit/slim/test/data/cb_data_8.model b/vowpalwabbit/slim/test/data/cb_data_8.model index 7cbdf184d7f..c2a367b2246 100644 Binary files a/vowpalwabbit/slim/test/data/cb_data_8.model and b/vowpalwabbit/slim/test/data/cb_data_8.model differ diff --git a/vowpalwabbit/slim/test/data/cb_data_8.pred b/vowpalwabbit/slim/test/data/cb_data_8.pred index cad4def2485..c04ca26f912 100644 --- a/vowpalwabbit/slim/test/data/cb_data_8.pred +++ b/vowpalwabbit/slim/test/data/cb_data_8.pred @@ -1,4 +1,4 @@ -2:0.82,1:0.09,0:0.09 +0:0.82,1:0.09,2:0.09 -2:0.82,1:0.09,0:0.09 +0:0.82,1:0.09,2:0.09 diff --git a/vowpalwabbit/slim/test/data/cb_data_9.model b/vowpalwabbit/slim/test/data/cb_data_9.model index 483fe597573..885283780f1 100644 Binary files a/vowpalwabbit/slim/test/data/cb_data_9.model and b/vowpalwabbit/slim/test/data/cb_data_9.model differ diff --git a/vowpalwabbit/slim/test/data/generate-data.sh b/vowpalwabbit/slim/test/data/generate-data.sh old mode 100644 new mode 100755 index ad4adbd996b..e8b1b65c462 --- a/vowpalwabbit/slim/test/data/generate-data.sh +++ b/vowpalwabbit/slim/test/data/generate-data.sh @@ -4,96 +4,101 @@ VW=${1:-vw} echo > $DATA_H -$VW --quiet -d regression_data_1.txt -f regression_data_1.model -c -k --passes 100 --holdout_off +$VW --quiet -d regression_data_1.txt -f regression_data_1.model -c -k --passes 100 --holdout_off --predict_only_model $VW --quiet -d regression_data_1.txt -i regression_data_1.model -t -p regression_data_1.pred xxd -i regression_data_1.model >> $DATA_H xxd -i regression_data_1.pred >> $DATA_H -$VW --quiet -d regression_data_1.txt -f regression_data_no_constant.model -c -k --passes 100 --holdout_off --noconstant +$VW --quiet -d regression_data_1.txt -f regression_data_no_constant.model -c -k --passes 100 --holdout_off --noconstant --predict_only_model $VW --quiet -d regression_data_1.txt -i regression_data_no_constant.model -t -p regression_data_no_constant.pred xxd -i regression_data_no_constant.model >> $DATA_H xxd -i regression_data_no_constant.pred >> $DATA_H -$VW --quiet -d regression_data_2.txt -f regression_data_ignore_linear.model -c -k --passes 100 --holdout_off --ignore_linear a --ignore_linear b +$VW --quiet -d regression_data_2.txt -f regression_data_ignore_linear.model -c -k --passes 100 --holdout_off --ignore_linear a --ignore_linear b --predict_only_model $VW --quiet -d regression_data_2.txt -i regression_data_ignore_linear.model -t -p regression_data_ignore_linear.pred xxd -i regression_data_ignore_linear.model >> $DATA_H xxd -i regression_data_ignore_linear.pred >> $DATA_H -$VW --quiet -d regression_data_2.txt -f regression_data_2.model -c -k --passes 100 --holdout_off +$VW --quiet -d regression_data_2.txt -f regression_data_2.model -c -k --passes 100 --holdout_off --predict_only_model $VW --quiet -d regression_data_2.txt -i regression_data_2.model -t -p regression_data_2.pred xxd -i regression_data_2.model >> $DATA_H xxd -i regression_data_2.pred >> $DATA_H # testing interactions order 2 -$VW --quiet -d regression_data_3.txt -f regression_data_3.model -c -k --passes 100 --holdout_off -q ab +$VW --quiet -d regression_data_3.txt -f regression_data_3.model -c -k --passes 100 --holdout_off -q ab --predict_only_model $VW --quiet -d regression_data_3.txt -i regression_data_3.model -t -p regression_data_3.pred xxd -i regression_data_3.model >> $DATA_H xxd -i regression_data_3.pred >> $DATA_H # testing interactions order 3 -$VW --quiet -d regression_data_4.txt -f regression_data_4.model -c -k --passes 2 --holdout_off --interactions abc +$VW --quiet -d regression_data_4.txt -f regression_data_4.model -c -k --passes 2 --holdout_off --interactions abc --predict_only_model $VW --quiet -d regression_data_4.txt -i regression_data_4.model -t -p regression_data_4.pred xxd -i regression_data_4.model >> $DATA_H xxd -i regression_data_4.pred >> $DATA_H # testing interactions order 4 -$VW --quiet -d regression_data_4.txt -f regression_data_5.model -c -k --passes 2 --holdout_off --interactions abcd +$VW --quiet -d regression_data_4.txt -f regression_data_5.model -c -k --passes 2 --holdout_off --interactions abcd --predict_only_model $VW --quiet -d regression_data_4.txt -i regression_data_5.model -t -p regression_data_5.pred xxd -i regression_data_5.model >> $DATA_H xxd -i regression_data_5.pred >> $DATA_H # testing large models -$VW --quiet -d regression_data_3.txt -f regression_data_6.model -c -k --passes 2 --holdout_off -q ab -b 33 --sparse_weights +$VW --quiet -d regression_data_3.txt -f regression_data_6.model -c -k --passes 2 --holdout_off -q ab -b 33 --sparse_weights --predict_only_model $VW --quiet -d regression_data_3.txt -i regression_data_6.model -t -p regression_data_6.pred --sparse_weights xxd -i regression_data_6.model >> $DATA_H xxd -i regression_data_6.pred >> $DATA_H # testing feature hashing -$VW --quiet -d regression_data_7.txt -f regression_data_7.model -c -k --passes 2 --holdout_off +$VW --quiet -d regression_data_7.txt -f regression_data_7.model -c -k --passes 2 --holdout_off --predict_only_model $VW --quiet -d regression_data_7.txt -i regression_data_7.model -t -p regression_data_7.pred xxd -i regression_data_7.model >> $DATA_H xxd -i regression_data_7.pred >> $DATA_H # multi-class classification -$VW --quiet -d multiclass_data_4.txt --csoaa_ldf m --csoaa_rank -q ab -k -c --holdout_off --passes 100 -f multiclass_data_4.model +$VW --quiet -d multiclass_data_4.txt --csoaa_ldf m --csoaa_rank -q ab -k -c --holdout_off --passes 100 -f multiclass_data_4.model --predict_only_model $VW --quiet -d multiclass_data_4.txt -i multiclass_data_4.model -t -p multiclass_data_4.pred -# manual creation of (sort by action id) multiclass_data_4.pred.manual xxd -i multiclass_data_4.model >> $DATA_H xxd -i multiclass_data_4.pred >> $DATA_H +$VW --quiet -d multiclass_data_5.txt --csoaa_ldf m --csoaa_rank -k -c --holdout_off --passes 100 -f multiclass_data_5.model --predict_only_model +$VW --quiet -d multiclass_data_5.txt -i multiclass_data_5.model -t -p multiclass_data_5.pred + +xxd -i multiclass_data_5.model >> $DATA_H +xxd -i multiclass_data_5.pred >> $DATA_H + # epsilon greedy -$VW --quiet -d cb_data_5.txt --cb_explore_adf --epsilon 0.3 -q ab -k -c --holdout_off --passes 100 -f cb_data_5.model +$VW --quiet -d cb_data_5.txt --cb_explore_adf --epsilon 0.3 -q ab -k -c --holdout_off --passes 100 -f cb_data_5.model --predict_only_model $VW --quiet -d cb_data_5.txt -i cb_data_5.model -p cb_data_5.pred xxd -i cb_data_5.model >> $DATA_H xxd -i cb_data_5.pred >> $DATA_H # softmax -$VW --quiet -d cb_data_5.txt --cb_explore_adf --softmax --lambda -2 -q ab -k -c --holdout_off --passes 5 -f cb_data_6.model +$VW --quiet -d cb_data_5.txt --cb_explore_adf --softmax --lambda -2 -q ab -k -c --holdout_off --passes 5 -f cb_data_6.model --predict_only_model $VW --quiet -d cb_data_5.txt -i cb_data_6.model -p cb_data_6.pred xxd -i cb_data_6.model >> $DATA_H xxd -i cb_data_6.pred >> $DATA_H # bag -$VW --quiet -d cb_data_5.txt --cb_explore_adf --bag 3 -q ab -k -c --holdout_off --passes 100 -f cb_data_7.model +$VW --quiet -d cb_data_5.txt --cb_explore_adf --bag 3 -q ab -k -c --holdout_off --passes 100 -f cb_data_7.model --predict_only_model $VW --quiet -d cb_data_5.txt -i cb_data_7.model -p cb_data_7.pred xxd -i cb_data_7.model >> $DATA_H xxd -i cb_data_7.pred >> $DATA_H # bag + epsilon greedy -$VW --quiet -d cb_data_5.txt --cb_explore_adf --bag 5 --epsilon 0.27 -q ab -k -c --holdout_off --passes 100 -f cb_data_8.model +$VW --quiet -d cb_data_5.txt --cb_explore_adf --bag 5 --epsilon 0.27 -q ab -k -c --holdout_off --passes 100 -f cb_data_8.model --predict_only_model $VW --quiet -d cb_data_5.txt -i cb_data_8.model -p cb_data_8.pred xxd -i cb_data_8.model >> $DATA_H @@ -101,7 +106,7 @@ xxd -i cb_data_8.pred >> $DATA_H # epsilon greedy + dr # TODO: results are confusing (for both dr & mtr) as they don't match ips in a simple example -$VW --quiet -d cb_data_5.txt --cb_explore_adf --epsilon 0.3 --cb_type dr -q ab -k -c --holdout_off --passes 1000 -f cb_data_9.model +$VW --quiet -d cb_data_5.txt --cb_explore_adf --epsilon 0.3 --cb_type dr -q ab -k -c --holdout_off --passes 1000 -f cb_data_9.model --predict_only_model $VW --quiet -d cb_data_5.txt -i cb_data_9.model -p cb_data_9.pred xxd -i cb_data_9.model >> $DATA_H diff --git a/vowpalwabbit/slim/test/data/multiclass_data_4.model b/vowpalwabbit/slim/test/data/multiclass_data_4.model index 34351571b78..b994afe6658 100644 Binary files a/vowpalwabbit/slim/test/data/multiclass_data_4.model and b/vowpalwabbit/slim/test/data/multiclass_data_4.model differ diff --git a/vowpalwabbit/slim/test/data/multiclass_data_4.pred b/vowpalwabbit/slim/test/data/multiclass_data_4.pred index 151607bbf2d..60ff4928422 100644 --- a/vowpalwabbit/slim/test/data/multiclass_data_4.pred +++ b/vowpalwabbit/slim/test/data/multiclass_data_4.pred @@ -1,2 +1,2 @@ -2:0.0386223,1:0.46983,0:0.901038 +3:0.038605,2:0.46982,1:0.901035 diff --git a/vowpalwabbit/slim/test/data/multiclass_data_5.pred b/vowpalwabbit/slim/test/data/multiclass_data_5.pred index 9d4795324c6..5d98d4b54fb 100644 --- a/vowpalwabbit/slim/test/data/multiclass_data_5.pred +++ b/vowpalwabbit/slim/test/data/multiclass_data_5.pred @@ -1,2 +1,2 @@ -0:0.551784,3:0.551784,4:0.560359,7:0.560359,1:0.575381,5:0.592531,2:0.598978,6:0.624703 +3:0.127492,3:0.438331,2:0.461522,2:0.668748,1:0.795552,1:0.795552,1:0.899165,1:0.899165 diff --git a/vowpalwabbit/slim/test/data/regression_data_1.model b/vowpalwabbit/slim/test/data/regression_data_1.model index 3a2f6112659..e60c4fb0010 100644 Binary files a/vowpalwabbit/slim/test/data/regression_data_1.model and b/vowpalwabbit/slim/test/data/regression_data_1.model differ diff --git a/vowpalwabbit/slim/test/data/regression_data_1.pred b/vowpalwabbit/slim/test/data/regression_data_1.pred index 961a1add22d..8f23c2b166d 100644 --- a/vowpalwabbit/slim/test/data/regression_data_1.pred +++ b/vowpalwabbit/slim/test/data/regression_data_1.pred @@ -1,2 +1,2 @@ -0.988030 -0.005295 +0.988028 +0.005296 diff --git a/vowpalwabbit/slim/test/data/regression_data_2.model b/vowpalwabbit/slim/test/data/regression_data_2.model index d730bd5c5a4..449d4841333 100644 Binary files a/vowpalwabbit/slim/test/data/regression_data_2.model and b/vowpalwabbit/slim/test/data/regression_data_2.model differ diff --git a/vowpalwabbit/slim/test/data/regression_data_3.model b/vowpalwabbit/slim/test/data/regression_data_3.model index 31245ca1032..83e1c26faa4 100644 Binary files a/vowpalwabbit/slim/test/data/regression_data_3.model and b/vowpalwabbit/slim/test/data/regression_data_3.model differ diff --git a/vowpalwabbit/slim/test/data/regression_data_3.pred b/vowpalwabbit/slim/test/data/regression_data_3.pred index d6d02d56323..e6e7359d503 100644 --- a/vowpalwabbit/slim/test/data/regression_data_3.pred +++ b/vowpalwabbit/slim/test/data/regression_data_3.pred @@ -1,2 +1,2 @@ -0.804214 -0.119599 +0.804218 +0.119585 diff --git a/vowpalwabbit/slim/test/data/regression_data_4.model b/vowpalwabbit/slim/test/data/regression_data_4.model index db5bea2f152..57c7fe2fae2 100644 Binary files a/vowpalwabbit/slim/test/data/regression_data_4.model and b/vowpalwabbit/slim/test/data/regression_data_4.model differ diff --git a/vowpalwabbit/slim/test/data/regression_data_4.pred b/vowpalwabbit/slim/test/data/regression_data_4.pred index 3c459e7518d..9259ea0dbb1 100644 --- a/vowpalwabbit/slim/test/data/regression_data_4.pred +++ b/vowpalwabbit/slim/test/data/regression_data_4.pred @@ -1,2 +1,2 @@ -0.635620 -0.117813 +0.635637 +0.117808 diff --git a/vowpalwabbit/slim/test/data/regression_data_5.model b/vowpalwabbit/slim/test/data/regression_data_5.model index 193591c1cbd..3e8c18fcf99 100644 Binary files a/vowpalwabbit/slim/test/data/regression_data_5.model and b/vowpalwabbit/slim/test/data/regression_data_5.model differ diff --git a/vowpalwabbit/slim/test/data/regression_data_5.pred b/vowpalwabbit/slim/test/data/regression_data_5.pred index 04ee51f85e8..1aad0fa2718 100644 --- a/vowpalwabbit/slim/test/data/regression_data_5.pred +++ b/vowpalwabbit/slim/test/data/regression_data_5.pred @@ -1,2 +1,2 @@ -0.761247 +0.761264 0.040148 diff --git a/vowpalwabbit/slim/test/data/regression_data_6.model b/vowpalwabbit/slim/test/data/regression_data_6.model index 566fcac1776..43c6a9a5dd5 100644 Binary files a/vowpalwabbit/slim/test/data/regression_data_6.model and b/vowpalwabbit/slim/test/data/regression_data_6.model differ diff --git a/vowpalwabbit/slim/test/data/regression_data_6.pred b/vowpalwabbit/slim/test/data/regression_data_6.pred index a2204c96afa..44277405900 100644 --- a/vowpalwabbit/slim/test/data/regression_data_6.pred +++ b/vowpalwabbit/slim/test/data/regression_data_6.pred @@ -1,2 +1,2 @@ -0.228718 -0.246401 +0.228760 +0.246454 diff --git a/vowpalwabbit/slim/test/data/regression_data_7.model b/vowpalwabbit/slim/test/data/regression_data_7.model index 0f2dae856a3..5584d879469 100644 Binary files a/vowpalwabbit/slim/test/data/regression_data_7.model and b/vowpalwabbit/slim/test/data/regression_data_7.model differ diff --git a/vowpalwabbit/slim/test/data/regression_data_7.pred b/vowpalwabbit/slim/test/data/regression_data_7.pred index f7f8dd0188d..c6638c10565 100644 --- a/vowpalwabbit/slim/test/data/regression_data_7.pred +++ b/vowpalwabbit/slim/test/data/regression_data_7.pred @@ -1,2 +1,2 @@ -0.658841 -0.099891 +0.658879 +0.099914 diff --git a/vowpalwabbit/slim/test/data/regression_data_ignore_linear.model b/vowpalwabbit/slim/test/data/regression_data_ignore_linear.model index 68d808987f7..b891f0a195f 100644 Binary files a/vowpalwabbit/slim/test/data/regression_data_ignore_linear.model and b/vowpalwabbit/slim/test/data/regression_data_ignore_linear.model differ diff --git a/vowpalwabbit/slim/test/data/regression_data_ignore_linear.pred b/vowpalwabbit/slim/test/data/regression_data_ignore_linear.pred index f225669ada0..5e715fea88b 100644 --- a/vowpalwabbit/slim/test/data/regression_data_ignore_linear.pred +++ b/vowpalwabbit/slim/test/data/regression_data_ignore_linear.pred @@ -1,2 +1,2 @@ 1.000000 -0.000000 +0 diff --git a/vowpalwabbit/slim/test/data/regression_data_no_constant.model b/vowpalwabbit/slim/test/data/regression_data_no_constant.model index 1175c06f544..71ed9b947f1 100644 Binary files a/vowpalwabbit/slim/test/data/regression_data_no_constant.model and b/vowpalwabbit/slim/test/data/regression_data_no_constant.model differ diff --git a/vowpalwabbit/slim/test/data/regression_data_no_constant.pred b/vowpalwabbit/slim/test/data/regression_data_no_constant.pred index 89b02b9f031..ec553b2b5e9 100644 --- a/vowpalwabbit/slim/test/data/regression_data_no_constant.pred +++ b/vowpalwabbit/slim/test/data/regression_data_no_constant.pred @@ -1,2 +1,2 @@ -0.034453 -0.172265 +0.034454 +0.172271 diff --git a/vowpalwabbit/slim/test/ut_util.cc b/vowpalwabbit/slim/test/ut_util.cc index 431a38d4649..65e8be040b2 100644 --- a/vowpalwabbit/slim/test/ut_util.cc +++ b/vowpalwabbit/slim/test/ut_util.cc @@ -8,6 +8,7 @@ #include +#include #include #include #include @@ -85,7 +86,6 @@ test_data get_test_data(const char* model_filename) TEST_DATA(model_filename, regression_data_ignore_linear); TEST_DATA(model_filename, multiclass_data_4); TEST_DATA(model_filename, multiclass_data_5); - TEST_DATA(model_filename, cb_data_epsilon_0_skype_jb); TEST_DATA(model_filename, cb_data_5); TEST_DATA(model_filename, cb_data_6); TEST_DATA(model_filename, cb_data_7); @@ -214,7 +214,7 @@ void run_predict_in_memory( // compare output std::vector preds_expected = read_floats(td.pred, td.pred_len); - EXPECT_THAT(preds, Pointwise(FloatNear(1e-5f), preds_expected)); + EXPECT_THAT(preds, Pointwise(FloatNear(1e-4f), preds_expected)); } enum class predict_param_weight_type @@ -343,11 +343,11 @@ TEST_P(invalid_model_test, Run) } invalid_model_param invalid_model_param[] = { - {"regression_data_1", regression_data_1_model, regression_data_1_model_len, {84, 92}, + {"regression_data_1", regression_data_1_model, regression_data_1_model_len, {54, 62}, predict_param_weight_type::SPARSE}, // 2 weights - {"regression_data_1", regression_data_1_model, regression_data_1_model_len, {84, 92}, + {"regression_data_1", regression_data_1_model, regression_data_1_model_len, {54, 62}, predict_param_weight_type::DENSE}, // 2 weights - {"regression_data_6", regression_data_6_model, regression_data_6_model_len, {99, 111, 123, 135}, + {"regression_data_6", regression_data_6_model, regression_data_6_model_len, {69, 81, 93, 105}, predict_param_weight_type::SPARSE} // 4 weights }; @@ -384,7 +384,9 @@ TEST(VowpalWabbitSlim, MulticlassData4) std::vector preds_expected = {0.901038f, 0.46983f, 0.0386223f}; // compare output - EXPECT_THAT(out_scores, Pointwise(FloatNear(1e-5f), preds_expected)); + std::sort(out_scores.begin(), out_scores.end()); + std::sort(preds_expected.begin(), preds_expected.end()); + EXPECT_THAT(out_scores, Pointwise(FloatNear(1e-4f), preds_expected)); } TEST(VowpalWabbitSlim, MulticlassData5) @@ -429,51 +431,13 @@ TEST(VowpalWabbitSlim, MulticlassData5) ASSERT_EQ(S_VW_PREDICT_OK, vw.predict(shared, ex, 8, out_scores)); - // 0:0.551784,3:0.551784,4:0.560359,7:0.560359,1:0.575381,5:0.592531,2:0.598978,6:0.624703 - std::vector preds_expected = { - 0.551784f, 0.575380862f, 0.598977983f, 0.5517838f, 0.560358882f, 0.592531085f, 0.624703348f, 0.560358882f}; + // 3:0.127492,3:0.438331,2:0.461522,2:0.668748,1:0.795552,1:0.795552,1:0.899165,1:0.899165 + std::vector preds_expected = {0.127492, 0.438331, 0.461522, 0.668748, 0.795552, 0.795552, 0.899165, 0.899165}; // compare output - EXPECT_THAT(out_scores, Pointwise(FloatNear(1e-5f), preds_expected)); -} - -void cb_data_epsilon_0_skype_jb_test_runner(int call_type, int modality, int network_type, int platform, - const std::vector& ranking_expected, const std::vector& pdf_expected) -{ - // load model. - vw_predict vw; - test_data td = get_test_data("cb_data_epsilon_0_skype_jb"); - ASSERT_EQ(0, vw.load((const char*)td.model, td.model_len)); - - // we have loaded the model and can push the features - VW::example_predict features; - vw_slim::example_predict_builder bOa(&features, "64"); // NOLINT - bOa.push_feature(static_cast(call_type), 1.f); - vw_slim::example_predict_builder bOb(&features, "16"); // NOLINT - bOb.push_feature(static_cast(modality), 1.f); - vw_slim::example_predict_builder bOc(&features, "32"); // NOLINT - bOc.push_feature(static_cast(network_type), 1.f); - vw_slim::example_predict_builder bOd(&features, "48"); // NOLINT - bOd.push_feature(static_cast(platform), 1.f); - - // push actions - const int min_delay_actions = 10; - VW::example_predict actions[min_delay_actions]; - for (int i = 0; i < min_delay_actions; i++) - { - vw_slim::example_predict_builder bOe(&actions[i], "80"); // NOLINT - bOe.push_feature(i, 1.f); - } - - // predict CB value - std::vector pdfs; - std::vector rankings; - int result = vw.predict("eid", features, actions, min_delay_actions, pdfs, rankings); - - // compare output with expected. - EXPECT_EQ(result, 0); - EXPECT_THAT(pdfs, Pointwise(FloatNear(1e-5f), pdf_expected)); - EXPECT_THAT(rankings, Pointwise(Eq(), ranking_expected)); + std::sort(out_scores.begin(), out_scores.end()); + std::sort(preds_expected.begin(), preds_expected.end()); + EXPECT_THAT(out_scores, Pointwise(FloatNear(1e-4f), preds_expected)); } TEST(VowpalWabbitSlim, InteractionNumBitsBug) @@ -522,52 +486,6 @@ TEST(VowpalWabbitSlim, InteractionNumBitsBug) EXPECT_EQ(rankings[0], 3); } -TEST(VowpalWabbitSlim, CbDataEpsilon0SkypeJb) -{ - // Since the model is epsilon=0, the first entry should always be 0. - std::vector pdf_expected = {1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0}; - - // {0, 1, 2, 0} => 1 - std::vector ranking_expected = {1, 0, 2, 3, 4, 5, 7, 6, 8, 9}; - cb_data_epsilon_0_skype_jb_test_runner(0, 1, 2, 0, ranking_expected, pdf_expected); - - // {0, 1, 4, 0} => 1 - ranking_expected = {1, 0, 2, 3, 4, 5, 6, 8, 7, 9}; - cb_data_epsilon_0_skype_jb_test_runner(0, 1, 4, 0, ranking_expected, pdf_expected); - - // {0, 0, 2, 0} => 1 - ranking_expected = {1, 2, 0, 3, 4, 5, 6, 7, 8, 9}; - cb_data_epsilon_0_skype_jb_test_runner(0, 0, 2, 0, ranking_expected, pdf_expected); - - // {0, 0, 4, 0} => 1 - ranking_expected = {1, 3, 2, 0, 4, 6, 5, 8, 7, 9}; - cb_data_epsilon_0_skype_jb_test_runner(0, 0, 4, 0, ranking_expected, pdf_expected); - - // {2, 0, 4, 0} => 3 - ranking_expected = {3, 1, 0, 2, 5, 4, 7, 6, 8, 9}; - cb_data_epsilon_0_skype_jb_test_runner(2, 0, 4, 0, ranking_expected, pdf_expected); - - // {0, 1, 999, 0} => 2 - ranking_expected = {2, 4, 6, 1, 0, 5, 3, 7, 8, 9}; - cb_data_epsilon_0_skype_jb_test_runner(0, 1, 999, 0, ranking_expected, pdf_expected); - - // {0, 0, 999, 0} => 2 - ranking_expected = {2, 4, 6, 1, 3, 5, 0, 7, 8, 9}; - cb_data_epsilon_0_skype_jb_test_runner(0, 0, 999, 0, ranking_expected, pdf_expected); - - // {2, 0, 999, 0} => 2 - ranking_expected = {2, 5, 4, 3, 6, 1, 0, 7, 8, 9}; - cb_data_epsilon_0_skype_jb_test_runner(2, 0, 999, 0, ranking_expected, pdf_expected); - - // {999, 0, 4, 0} => 1 - ranking_expected = {0, 1, 4, 2, 6, 3, 8, 7, 5, 9}; - cb_data_epsilon_0_skype_jb_test_runner(999, 0, 4, 0, ranking_expected, pdf_expected); - - // {999, 0, 2, 0} => 2 - ranking_expected = {0, 1, 4, 2, 7, 3, 6, 8, 5, 9}; - cb_data_epsilon_0_skype_jb_test_runner(999, 0, 2, 0, ranking_expected, pdf_expected); -} - void clear(VW::example_predict& ex) { for (auto ns : ex.indices) { ex.feature_space[ns].clear(); } @@ -670,38 +588,38 @@ TEST_P(cb_predict_test, CBRunPredict) //} #endif - EXPECT_THAT(histogram, Pointwise(FloatNear(1e-2f), GetParam().ranking_pdf_expected)); + EXPECT_THAT(histogram, Pointwise(FloatNear(2e-2f), GetParam().ranking_pdf_expected)); } cb_predict_param cb_predict_params[] = { - {"CB Epsilon Greedy", "cb_data_5", 10000, {0.1f, 0.1f, 0.8f}, + {"CB Epsilon Greedy", "cb_data_5", 10000, {0.8f, 0.1f, 0.1f}, { - // see top action 2 w / 0.8 - 0.1f, 0.09f, 0.80f, // slot 0 - // most of the time we should see action 2 - // in 10% we should see the top action 0 swapped from top-slot to here - 0.0f, 0.90f, 0.09f, // slot 1 - // most of the time we should see action 1 - // in 20% we should see the top action 2 swapped from top-slot to here - 0.89f, 0.0f, 0.10f, // slot 2 + 0.8f, 0.1f, 0.1f, // slot 0 + // most of the time we should see action 0 + 0.1f, 0.9f, 0.0f, // slot 1 + // most of the time we should see action 1 + // in 10% we should see the top action 0 swapped from top-slot to here + 0.1f, 0.0f, 0.9f, // slot 2 + // most of the time we should see action 2 + // in 10% we should see the top action 0 swapped from top-slot to here }}, - {"CB Softmax", "cb_data_6", 1000, {0.329f, 0.333f, 0.337f}, + {"CB Softmax", "cb_data_6", 1000, {0.664f, 0.245f, 0.090f}, { - 0.328f, 0.354f, 0.316f, // slot 0 - 0.000f, 0.644f, 0.354f, // slot 1 - 0.671f, 0.000f, 0.328f, // slot 2 + 0.664f, 0.245f, 0.090f, // slot 0 + 0.245f, 0.755f, 0.000f, // slot 1 + 0.090f, 0.000f, 0.910f, // slot 2 }}, - {"CB Bag", "cb_data_7", 5, {0.0f, 0.0f, 1.0f}, + {"CB Bag", "cb_data_7", 5, {1.0f, 0.0f, 0.0f}, { - 0.0f, 0.0f, 1.0f, // slot 0 + 1.0f, 0.0f, 0.0f, // slot 0 0.0f, 1.0f, 0.0f, // slot 1 - 1.0f, 0.0f, 0.0f, // slot 2 + 0.0f, 0.0f, 1.0f, // slot 2 }}, - {"CB Bag Epsilon Greedy", "cb_data_8", 10000, {0.09f, 0.09f, 0.82f}, + {"CB Bag Epsilon Greedy", "cb_data_8", 10000, {0.82f, 0.09f, 0.09f}, { - 0.091f, 0.086f, 0.82f, // slot 0 - 0.00f, 0.91f, 0.086f, // slot 1 - 0.90f, 0.00f, 0.09f, // slot 2 + 0.82f, 0.09f, 0.09f, // slot 0 + 0.09f, 0.91f, 0.00f, // slot 1 + 0.09f, 0.00f, 0.91f, // slot 2 }}, };