add method

void add(
  1. Object? id,
  2. Vector v
)

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++;
}