add method
Add v under key id. Assigns to nearest cell, encodes its
residual, appends the PQ code.
Implementation
void add(Object? id, Vector v) {
if (!_trained) {
throw StateError('IvfPqIndex.add: call train() first');
}
if (v.dim != dim) {
throw StateError(
'IvfPqIndex.add: vector dim ${v.dim} != index dim $dim',
);
}
final cell = _coarseQuantizer.assign(v.values, 0);
final cOff = cell * dim;
final residual = Float32List(dim);
for (var j = 0; j < dim; j++) {
residual[j] = v.values[j] - _coarseQuantizer.centroids[cOff + j];
}
final code = Uint8List(m);
_pq.encodeOne(residual, code, 0);
_pushToCell(cell, code, id);
_n++;
}