@@ -172,12 +172,12 @@ class IndexIVFPQ {
172172 dimensions_ = index_->dimensions ();
173173 }
174174
175- void create_temp_data_group () {
175+ void create_temp_data_group (const std::string& partial_write_array_dir ) {
176176 if (!index_) {
177177 throw std::runtime_error (
178178 " Cannot create_temp_data_group() because there is no index." );
179179 }
180- index_->create_temp_data_group ();
180+ index_->create_temp_data_group (partial_write_array_dir );
181181 }
182182
183183 /* *
@@ -231,7 +231,8 @@ class IndexIVFPQ {
231231 const FeatureVector& deleted_ids,
232232 size_t start,
233233 size_t end,
234- size_t partition_start) {
234+ size_t partition_start,
235+ const std::string& partial_write_array_dir) {
235236 if (feature_datatype_ != input_vectors.feature_type ()) {
236237 throw std::runtime_error (
237238 " [ivf_pq_index@ingest_parts] Feature datatype mismatch: " +
@@ -243,7 +244,13 @@ class IndexIVFPQ {
243244 " Cannot ingest_parts() because there is no index." );
244245 }
245246 index_->ingest_parts (
246- input_vectors, external_ids, deleted_ids, start, end, partition_start);
247+ input_vectors,
248+ external_ids,
249+ deleted_ids,
250+ start,
251+ end,
252+ partition_start,
253+ partial_write_array_dir);
247254 }
248255
249256 void ingest (
@@ -266,14 +273,20 @@ class IndexIVFPQ {
266273 size_t work_items,
267274 size_t partition_id_start,
268275 size_t partition_id_end,
269- size_t batch) {
276+ size_t batch,
277+ const std::string& partial_write_array_dir) {
270278 if (!index_) {
271279 throw std::runtime_error (
272280 " [ivf_pq_index@consolidate_partitions] Cannot "
273281 " consolidate_partitions() because there is no index." );
274282 }
275283 index_->consolidate_partitions (
276- partitions, work_items, partition_id_start, partition_id_end, batch);
284+ partitions,
285+ work_items,
286+ partition_id_start,
287+ partition_id_end,
288+ batch,
289+ partial_write_array_dir);
277290 }
278291
279292 [[nodiscard]] auto query (
@@ -413,7 +426,8 @@ class IndexIVFPQ {
413426 struct index_base {
414427 virtual ~index_base () = default ;
415428
416- virtual void create_temp_data_group () = 0;
429+ virtual void create_temp_data_group (
430+ const std::string& partial_write_array_dir) = 0;
417431
418432 virtual void train (
419433 const FeatureVectorArray& training_set,
@@ -426,7 +440,8 @@ class IndexIVFPQ {
426440 const FeatureVector& deleted_ids,
427441 size_t start,
428442 size_t end,
429- size_t partition_start) = 0;
443+ size_t partition_start,
444+ const std::string& partial_write_array_dir) = 0;
430445
431446 virtual void ingest (
432447 const FeatureVectorArray& input_vectors,
@@ -437,7 +452,8 @@ class IndexIVFPQ {
437452 size_t work_items,
438453 size_t partition_id_start,
439454 size_t partition_id_end,
440- size_t batch) = 0;
455+ size_t batch,
456+ const std::string& partial_write_array_dir) = 0;
441457
442458 [[nodiscard]] virtual std::tuple<FeatureVectorArray, FeatureVectorArray>
443459 query (
@@ -499,8 +515,9 @@ class IndexIVFPQ {
499515 temporal_policy) {
500516 }
501517
502- void create_temp_data_group () override {
503- impl_index_.create_temp_data_group ();
518+ void create_temp_data_group (
519+ const std::string& partial_write_array_dir) override {
520+ impl_index_.create_temp_data_group (partial_write_array_dir);
504521 }
505522
506523 void train (
@@ -521,7 +538,8 @@ class IndexIVFPQ {
521538 const FeatureVector& deleted_ids,
522539 size_t start,
523540 size_t end,
524- size_t partition_start) override {
541+ size_t partition_start,
542+ const std::string& partial_write_array_dir) override {
525543 using feature_type = typename T::feature_type;
526544 using id_type = typename T::id_type;
527545 auto fspan = MatrixView<feature_type, stdx::layout_left>{
@@ -534,7 +552,13 @@ class IndexIVFPQ {
534552 auto ids = std::vector<id_type>(::num_vectors (input_vectors));
535553 std::iota (ids.begin (), ids.end (), start);
536554 impl_index_.ingest_parts (
537- fspan, ids, deleted_ids_span, start, end, partition_start);
555+ fspan,
556+ ids,
557+ deleted_ids_span,
558+ start,
559+ end,
560+ partition_start,
561+ partial_write_array_dir);
538562 } else {
539563 auto external_ids_span = std::span<id_type>(
540564 (id_type*)external_ids.data (), external_ids.dimensions ());
@@ -544,7 +568,8 @@ class IndexIVFPQ {
544568 deleted_ids_span,
545569 start,
546570 end,
547- partition_start);
571+ partition_start,
572+ partial_write_array_dir);
548573 }
549574 }
550575
@@ -573,9 +598,15 @@ class IndexIVFPQ {
573598 size_t work_items,
574599 size_t partition_id_start,
575600 size_t partition_id_end,
576- size_t batch) override {
601+ size_t batch,
602+ const std::string& partial_write_array_dir) override {
577603 impl_index_.consolidate_partitions (
578- partitions, work_items, partition_id_start, partition_id_end, batch);
604+ partitions,
605+ work_items,
606+ partition_id_start,
607+ partition_id_end,
608+ batch,
609+ partial_write_array_dir);
579610 }
580611
581612 /* *
0 commit comments