in python/src/vector_of_kll.cpp [190:226]
void vector_of_kll_sketches<T, C>::update(const py::array_t<T>& items) {
size_t ndim = items.ndim();
if (items.shape(ndim-1) != d_) {
throw std::invalid_argument("input data must have rows with " + std::to_string(d_)
+ " elements. Found: " + std::to_string(items.shape(ndim-1)));
}
if (ndim == 1) {
// 1D case: single value to update per sketch
auto data = items.template unchecked<1>();
for (uint32_t i = 0; i < d_; ++i) {
sketches_[i].update(data(i));
}
}
else if (ndim == 2) {
// 2D case: multiple values to update per sketch
auto data = items.template unchecked<2>();
if (items.flags() & py::array::f_style) {
for (uint32_t j = 0; j < d_; ++j) {
for (uint32_t i = 0; i < items.shape(0); ++i) {
sketches_[j].update(data(i,j));
}
}
} else { // py::array::c_style or py::array::forcecast
for (uint32_t i = 0; i < items.shape(0); ++i) {
for (uint32_t j = 0; j < d_; ++j) {
sketches_[j].update(data(i,j));
}
}
}
}
else {
throw std::invalid_argument("Update input must be 2 or fewer dimensions : " + std::to_string(ndim));
}
}