MCPcopy Create free account
hub / github.com/antgroup/vsag / TestQuantizerEncodeDecodeINT8

Function TestQuantizerEncodeDecodeINT8

src/quantization/int8_quantizer_test.cpp:40–77  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

38
39template <MetricType metric>
40void
41TestQuantizerEncodeDecodeINT8(Quantizer<INT8Quantizer<metric>>& quant,
42 int64_t dim,
43 int count,
44 float error = 1e-5,
45 bool retrain = true) {
46 auto vecs = fixtures::generate_int8_codes(count, dim);
47 if (retrain) {
48 quant.ReTrain(reinterpret_cast<DataType*>(vecs.data()), count);
49 }
50 // Test EncodeOne & DecodeOne
51 for (uint64_t i = 0; i < count; ++i) {
52 std::vector<uint8_t> codes(quant.GetCodeSize());
53 quant.EncodeOne(reinterpret_cast<DataType*>(vecs.data() + i * dim), codes.data());
54 std::vector<int8_t> out_vec(dim);
55 quant.DecodeOne(codes.data(), reinterpret_cast<DataType*>(out_vec.data()));
56 float sum = 0.0F;
57 for (int j = 0; j < dim; ++j) {
58 sum += std::abs(static_cast<DataType>(vecs[i * dim + j]) -
59 static_cast<DataType>(out_vec[j]));
60 }
61 REQUIRE(sum < error * dim);
62 }
63
64 // Test EncodeBatch & DecodeBatch
65 std::vector<uint8_t> codes(quant.GetCodeSize() * count);
66 quant.EncodeBatch(reinterpret_cast<DataType*>(vecs.data()), codes.data(), count);
67 std::vector<int8_t> out_vec(dim * count);
68 quant.DecodeBatch(codes.data(), reinterpret_cast<DataType*>(out_vec.data()), count);
69 for (int64_t i = 0; i < count; ++i) {
70 float sum = 0.0F;
71 for (int j = 0; j < dim; ++j) {
72 sum += std::abs(static_cast<DataType>(vecs[i * dim + j]) -
73 static_cast<DataType>(out_vec[i * dim + j]));
74 }
75 REQUIRE(sum < error * dim);
76 }
77}
78
79template <MetricType metric>
80void

Calls 7

generate_int8_codesFunction · 0.85
ReTrainMethod · 0.80
GetCodeSizeMethod · 0.80
EncodeOneMethod · 0.80
DecodeOneMethod · 0.80
EncodeBatchMethod · 0.80
DecodeBatchMethod · 0.80

Tested by

no test coverage detected