From a075fd6f47adc9e22baa70cac8a8e64f54f6b443 Mon Sep 17 00:00:00 2001 From: yichuan520030910320 Date: Mon, 30 Jun 2025 10:11:39 +0000 Subject: [PATCH] Add DiskANN and faiss as submodules --- .../leann-backend-diskann/third_party/DiskANN | 1 + .../third_party/DiskANN/.clang-format | 6 - .../third_party/DiskANN/.gitattributes | 14 - .../.github/ISSUE_TEMPLATE/bug_report.md | 40 - .../DiskANN/.github/ISSUE_TEMPLATE/config.yml | 2 - .../.github/ISSUE_TEMPLATE/feature_request.md | 25 - .../.github/ISSUE_TEMPLATE/usage-question.md | 11 - .../DiskANN/.github/PULL_REQUEST_TEMPLATE.md | 22 - .../DiskANN/.github/actions/build/action.yml | 39 - .../.github/actions/format-check/action.yml | 13 - .../generate-high-dim-random/action.yml | 28 - .../actions/generate-random/action.yml | 38 - .../.github/actions/python-wheel/action.yml | 22 - .../.github/workflows/build-python-pdoc.yml | 81 - .../.github/workflows/build-python.yml | 42 - .../DiskANN/.github/workflows/common.yml | 28 - .../DiskANN/.github/workflows/disk-pq.yml | 117 - .../.github/workflows/dynamic-labels.yml | 102 - .../DiskANN/.github/workflows/dynamic.yml | 75 - .../.github/workflows/in-mem-no-pq.yml | 81 - .../DiskANN/.github/workflows/in-mem-pq.yml | 56 - .../DiskANN/.github/workflows/labels.yml | 120 - .../workflows/multi-sector-disk-pq.yml | 60 - .../DiskANN/.github/workflows/perf.yml | 26 - .../DiskANN/.github/workflows/pr-test.yml | 35 - .../DiskANN/.github/workflows/push-test.yml | 50 - .../.github/workflows/python-release.yml | 43 - .../DiskANN/.github/workflows/unit-tests.yml | 32 - .../third_party/DiskANN/.gitignore | 384 -- .../third_party/DiskANN/.gitmodules | 3 - .../third_party/DiskANN/CMakeLists.txt | 563 --- .../third_party/DiskANN/CMakeSettings.json | 28 - .../third_party/DiskANN/CODE_OF_CONDUCT.md | 9 - .../third_party/DiskANN/CONTRIBUTING.md | 9 - .../third_party/DiskANN/Dockerfile | 17 - .../third_party/DiskANN/DockerfileDev | 17 - .../third_party/DiskANN/LICENSE | 23 - .../third_party/DiskANN/MANIFEST.in | 12 - .../third_party/DiskANN/README.md | 135 - .../third_party/DiskANN/SECURITY.md | 41 - .../third_party/DiskANN/apps/CMakeLists.txt | 42 - .../DiskANN/apps/build_disk_index.cpp | 191 - .../DiskANN/apps/build_memory_index.cpp | 164 - .../DiskANN/apps/build_stitched_index.cpp | 441 -- .../third_party/DiskANN/apps/python/README.md | 46 - .../DiskANN/apps/python/restapi/__init__.py | 0 .../apps/python/restapi/disk_ann_util.py | 67 - .../DiskANN/apps/range_search_disk_index.cpp | 379 -- .../DiskANN/apps/restapi/CMakeLists.txt | 40 - .../DiskANN/apps/restapi/client.cpp | 124 - .../DiskANN/apps/restapi/inmem_server.cpp | 138 - .../third_party/DiskANN/apps/restapi/main.cpp | 83 - .../apps/restapi/multiple_ssdindex_server.cpp | 182 - .../DiskANN/apps/restapi/ssd_server.cpp | 141 - .../DiskANN/apps/search_disk_index.cpp | 499 --- .../DiskANN/apps/search_memory_index.cpp | 477 --- .../apps/test_insert_deletes_consolidate.cpp | 536 --- .../DiskANN/apps/test_streaming_scenario.cpp | 523 --- .../DiskANN/apps/utils/CMakeLists.txt | 110 - .../DiskANN/apps/utils/bin_to_fvecs.cpp | 63 - .../DiskANN/apps/utils/bin_to_tsv.cpp | 69 - .../DiskANN/apps/utils/calculate_recall.cpp | 55 - .../apps/utils/compute_groundtruth.cpp | 574 --- .../utils/compute_groundtruth_for_filters.cpp | 919 ---- .../DiskANN/apps/utils/count_bfs_levels.cpp | 82 - .../DiskANN/apps/utils/create_disk_layout.cpp | 48 - .../DiskANN/apps/utils/float_bin_to_int8.cpp | 63 - .../DiskANN/apps/utils/fvecs_to_bin.cpp | 95 - .../DiskANN/apps/utils/fvecs_to_bvecs.cpp | 56 - .../DiskANN/apps/utils/gen_random_slice.cpp | 58 - .../DiskANN/apps/utils/generate_pq.cpp | 70 - .../apps/utils/generate_synthetic_labels.cpp | 204 - .../DiskANN/apps/utils/int8_to_float.cpp | 23 - .../apps/utils/int8_to_float_scale.cpp | 63 - .../DiskANN/apps/utils/ivecs_to_bin.cpp | 58 - .../DiskANN/apps/utils/merge_shards.cpp | 42 - .../DiskANN/apps/utils/partition_data.cpp | 39 - .../apps/utils/partition_with_ram_budget.cpp | 39 - .../DiskANN/apps/utils/rand_data_gen.cpp | 237 -- .../apps/utils/simulate_aggregate_recall.cpp | 85 - .../DiskANN/apps/utils/stats_label_data.cpp | 147 - .../DiskANN/apps/utils/tsv_to_bin.cpp | 121 - .../DiskANN/apps/utils/uint32_to_uint8.cpp | 23 - .../DiskANN/apps/utils/uint8_to_float.cpp | 23 - .../DiskANN/apps/utils/vector_analysis.cpp | 163 - .../third_party/DiskANN/clang-format.cmake | 22 - .../DiskANN/include/abstract_data_store.h | 127 - .../DiskANN/include/abstract_graph_store.h | 68 - .../DiskANN/include/abstract_index.h | 129 - .../DiskANN/include/abstract_scratch.h | 35 - .../DiskANN/include/aligned_file_reader.h | 138 - .../DiskANN/include/ann_exception.h | 35 - .../DiskANN/include/any_wrappers.h | 53 - .../include/apple_aligned_file_reader.h | 26 - .../include/boost_dynamic_bitset_fwd.h | 11 - .../third_party/DiskANN/include/cached_io.h | 217 - .../DiskANN/include/common_includes.h | 27 - .../DiskANN/include/concurrent_queue.h | 132 - .../DiskANN/include/cosine_similarity.h | 285 -- .../third_party/DiskANN/include/defaults.h | 34 - .../third_party/DiskANN/include/disk_utils.h | 108 - .../third_party/DiskANN/include/distance.h | 236 - .../DiskANN/include/embedding.pb.h | 675 --- .../DiskANN/include/embedding_compute.h | 118 - .../third_party/DiskANN/include/exceptions.h | 17 - .../DiskANN/include/filter_utils.h | 221 - .../DiskANN/include/in_mem_data_store.h | 89 - .../DiskANN/include/in_mem_graph_store.h | 51 - .../third_party/DiskANN/include/index.h | 452 -- .../DiskANN/include/index_build_params.h | 73 - .../DiskANN/include/index_config.h | 256 -- .../DiskANN/include/index_factory.h | 51 - .../include/linux_aligned_file_reader.h | 41 - .../third_party/DiskANN/include/locking.h | 20 - .../third_party/DiskANN/include/logger.h | 35 - .../third_party/DiskANN/include/logger_impl.h | 61 - .../third_party/DiskANN/include/math_utils.h | 87 - .../DiskANN/include/memory_mapper.h | 43 - .../DiskANN/include/natural_number_map.h | 86 - .../DiskANN/include/natural_number_set.h | 50 - .../third_party/DiskANN/include/neighbor.h | 152 - .../third_party/DiskANN/include/parameters.h | 119 - .../third_party/DiskANN/include/partition.h | 49 - .../DiskANN/include/percentile_stats.h | 65 - .../third_party/DiskANN/include/pq.h | 93 - .../third_party/DiskANN/include/pq_common.h | 30 - .../DiskANN/include/pq_data_store.h | 97 - .../DiskANN/include/pq_flash_index.h | 286 -- .../DiskANN/include/pq_l2_distance.h | 87 - .../third_party/DiskANN/include/pq_scratch.h | 23 - .../DiskANN/include/program_options_utils.hpp | 81 - .../DiskANN/include/proto_embedding.h | 9 - .../DiskANN/include/quantized_distance.h | 56 - .../DiskANN/include/restapi/common.h | 18 - .../DiskANN/include/restapi/search_wrapper.h | 140 - .../DiskANN/include/restapi/server.h | 45 - .../third_party/DiskANN/include/scratch.h | 216 - .../third_party/DiskANN/include/simd_utils.h | 106 - .../third_party/DiskANN/include/tag_uint128.h | 68 - .../third_party/DiskANN/include/timer.h | 40 - .../DiskANN/include/tsl/.clang-format | 2 - .../DiskANN/include/tsl/robin_growth_policy.h | 330 -- .../DiskANN/include/tsl/robin_hash.h | 1285 ------ .../DiskANN/include/tsl/robin_map.h | 668 --- .../DiskANN/include/tsl/robin_set.h | 535 --- .../include/tsl/sparse_growth_policy.h | 301 -- .../DiskANN/include/tsl/sparse_hash.h | 2215 ---------- .../DiskANN/include/tsl/sparse_map.h | 800 ---- .../DiskANN/include/tsl/sparse_set.h | 655 --- .../third_party/DiskANN/include/types.h | 22 - .../third_party/DiskANN/include/utils.h | 1455 ------- .../include/windows_aligned_file_reader.h | 57 - .../DiskANN/include/windows_customizations.h | 16 - .../DiskANN/include/windows_slim_lock.h | 73 - .../third_party/DiskANN/pyproject.toml | 58 - .../third_party/DiskANN/python/CMakeLists.txt | 82 - .../third_party/DiskANN/python/README.md | 55 - .../DiskANN/python/apps/cli/__main__.py | 152 - .../DiskANN/python/apps/cluster.py | 28 - .../DiskANN/python/apps/in-mem-dynamic.py | 161 - .../DiskANN/python/apps/in-mem-static.py | 149 - .../python/apps/insert-in-clustered-order.py | 103 - .../third_party/DiskANN/python/apps/utils.py | 120 - .../DiskANN/python/include/builder.h | 27 - .../DiskANN/python/include/common.h | 24 - .../python/include/dynamic_memory_index.h | 53 - .../python/include/static_disk_index.h | 65 - .../python/include/static_memory_index.h | 40 - .../DiskANN/python/src/__init__.py | 138 - .../DiskANN/python/src/_builder.py | 349 -- .../DiskANN/python/src/_builder.pyi | 74 - .../third_party/DiskANN/python/src/_common.py | 251 -- ...kannpy.cpython-310-x86_64-linux-gnu.so.bak | Bin 33617584 -> 0 bytes .../python/src/_dynamic_memory_index.py | 511 --- .../third_party/DiskANN/python/src/_files.py | 122 - .../DiskANN/python/src/_static_disk_index.py | 244 -- .../python/src/_static_memory_index.py | 262 -- .../DiskANN/python/src/builder.cpp | 136 - .../DiskANN/python/src/defaults.py | 71 - .../python/src/dynamic_memory_index.cpp | 167 - .../third_party/DiskANN/python/src/module.cpp | 142 - .../third_party/DiskANN/python/src/py.typed | 0 .../DiskANN/python/src/static_disk_index.cpp | 123 - .../python/src/static_memory_index.cpp | 91 - .../DiskANN/python/tests/fixtures/__init__.py | 6 - .../tests/fixtures/build_memory_index.py | 51 - .../python/tests/fixtures/create_test_data.py | 40 - .../DiskANN/python/tests/fixtures/recall.py | 24 - .../third_party/DiskANN/rust/Cargo.lock | 1820 -------- .../third_party/DiskANN/rust/Cargo.toml | 23 - .../Cargo.toml | 14 - .../src/main.rs | 420 -- .../build_and_insert_memory_index/Cargo.toml | 14 - .../build_and_insert_memory_index/src/main.rs | 382 -- .../cmd_drivers/build_disk_index/Cargo.toml | 14 - .../cmd_drivers/build_disk_index/src/main.rs | 377 -- .../cmd_drivers/build_memory_index/Cargo.toml | 15 - .../build_memory_index/src/args.rs | 62 - .../build_memory_index/src/main.rs | 174 - .../convert_f32_to_bf16/Cargo.toml | 11 - .../convert_f32_to_bf16/src/main.rs | 154 - .../load_and_insert_memory_index/Cargo.toml | 14 - .../load_and_insert_memory_index/src/main.rs | 313 -- .../search_memory_index/Cargo.toml | 16 - .../search_memory_index/src/main.rs | 430 -- .../src/search_index_utils.rs | 186 - .../DiskANN/rust/diskann/Cargo.toml | 45 - .../rust/diskann/benches/distance_bench.rs | 47 - .../rust/diskann/benches/kmeans_bench.rs | 70 - .../rust/diskann/benches/neighbor_bench.rs | 49 - .../DiskANN/rust/diskann/src/algorithm/mod.rs | 7 - .../rust/diskann/src/algorithm/prune/mod.rs | 6 - .../rust/diskann/src/algorithm/prune/prune.rs | 288 -- .../rust/diskann/src/algorithm/search/mod.rs | 7 - .../diskann/src/algorithm/search/search.rs | 359 -- .../diskann/src/common/aligned_allocator.rs | 281 -- .../rust/diskann/src/common/ann_result.rs | 179 - .../DiskANN/rust/diskann/src/common/mod.rs | 9 - .../src/index/disk_index/ann_disk_index.rs | 54 - .../src/index/disk_index/disk_index.rs | 161 - .../rust/diskann/src/index/disk_index/mod.rs | 9 - .../src/index/inmem_index/ann_inmem_index.rs | 97 - .../src/index/inmem_index/inmem_index.rs | 1033 ----- .../index/inmem_index/inmem_index_storage.rs | 304 -- .../rust/diskann/src/index/inmem_index/mod.rs | 12 - .../DiskANN/rust/diskann/src/index/mod.rs | 11 - .../disk_index_build_logger.rs | 57 - .../src/instrumentation/index_logger.rs | 47 - .../rust/diskann/src/instrumentation/mod.rs | 9 - .../DiskANN/rust/diskann/src/lib.rs | 26 - .../disk_index_build_parameter.rs | 85 - .../configuration/index_configuration.rs | 92 - .../configuration/index_write_parameters.rs | 245 -- .../diskann/src/model/configuration/mod.rs | 12 - .../model/data_store/disk_scratch_dataset.rs | 76 - .../src/model/data_store/inmem_dataset.rs | 285 -- .../rust/diskann/src/model/data_store/mod.rs | 11 - .../diskann/src/model/graph/adjacency_list.rs | 64 - .../diskann/src/model/graph/disk_graph.rs | 179 - .../diskann/src/model/graph/inmem_graph.rs | 141 - .../rust/diskann/src/model/graph/mod.rs | 20 - .../diskann/src/model/graph/sector_graph.rs | 87 - .../src/model/graph/vertex_and_neighbors.rs | 159 - .../DiskANN/rust/diskann/src/model/mod.rs | 29 - .../rust/diskann/src/model/neighbor/mod.rs | 13 - .../diskann/src/model/neighbor/neighbor.rs | 104 - .../model/neighbor/neighbor_priority_queue.rs | 241 -- .../model/neighbor/sorted_neighbor_vector.rs | 37 - .../src/model/pq/fixed_chunk_pq_table.rs | 483 --- .../DiskANN/rust/diskann/src/model/pq/mod.rs | 9 - .../diskann/src/model/pq/pq_construction.rs | 398 -- .../src/model/scratch/concurrent_queue.rs | 312 -- .../src/model/scratch/inmem_query_scratch.rs | 186 - .../rust/diskann/src/model/scratch/mod.rs | 28 - .../diskann/src/model/scratch/pq_scratch.rs | 105 - .../model/scratch/scratch_store_manager.rs | 84 - .../src/model/scratch/scratch_traits.rs | 8 - .../src/model/scratch/ssd_io_context.rs | 38 - .../src/model/scratch/ssd_query_scratch.rs | 132 - .../src/model/scratch/ssd_thread_data.rs | 92 - .../diskann/src/model/vertex/dimension.rs | 22 - .../rust/diskann/src/model/vertex/mod.rs | 10 - .../rust/diskann/src/model/vertex/vertex.rs | 68 - .../model/windows_aligned_file_reader/mod.rs | 7 - .../windows_aligned_file_reader.rs | 414 -- .../diskann/src/storage/disk_graph_storage.rs | 37 - .../diskann/src/storage/disk_index_storage.rs | 363 -- .../DiskANN/rust/diskann/src/storage/mod.rs | 12 - .../rust/diskann/src/storage/pq_storage.rs | 367 -- .../test_utils/inmem_index_initialization.rs | 74 - .../rust/diskann/src/test_utils/mod.rs | 11 - .../diskann/src/utils/bit_vec_extension.rs | 45 - .../rust/diskann/src/utils/cached_reader.rs | 160 - .../rust/diskann/src/utils/cached_writer.rs | 142 - .../rust/diskann/src/utils/file_util.rs | 377 -- .../rust/diskann/src/utils/hashset_u32.rs | 46 - .../DiskANN/rust/diskann/src/utils/kmeans.rs | 430 -- .../rust/diskann/src/utils/math_util.rs | 481 --- .../DiskANN/rust/diskann/src/utils/mod.rs | 34 - .../rust/diskann/src/utils/partition.rs | 151 - .../rust/diskann/src/utils/rayon_util.rs | 33 - .../DiskANN/rust/diskann/src/utils/timer.rs | 101 - .../DiskANN/rust/diskann/src/utils/utils.rs | 154 - .../tests/data/siftsmall_learn_256pts.fbin | Bin 131080 -> 0 bytes .../tests/data/siftsmall_learn_256pts_2.fbin | Bin 131080 -> 0 bytes ...dex_siftsmall_learn_256pts_1+2_R4_L50_A1.2 | Bin 10236 -> 0 bytes ...all_learn_256pts_1+2_saturated_R4_L50_A1.2 | Bin 10264 -> 0 bytes ...h_index_siftsmall_learn_256pts_R4_L50_A1.2 | Bin 5108 -> 0 bytes ...ex_siftsmall_learn_256pts_R4_L50_A1.2.data | Bin 131080 -> 0 bytes .../DiskANN/rust/logger/Cargo.toml | 29 - .../third_party/DiskANN/rust/logger/build.rs | 33 - .../DiskANN/rust/logger/src/error_logger.rs | 29 - .../rust/logger/src/examples/trace_example.rs | 30 - .../DiskANN/rust/logger/src/indexlog.proto | 50 - .../DiskANN/rust/logger/src/lib.rs | 19 - .../DiskANN/rust/logger/src/log_error.rs | 27 - .../rust/logger/src/message_handler.rs | 167 - .../DiskANN/rust/logger/src/trace_logger.rs | 41 - .../DiskANN/rust/platform/Cargo.toml | 13 - .../DiskANN/rust/platform/src/file_handle.rs | 212 - .../DiskANN/rust/platform/src/file_io.rs | 154 - .../rust/platform/src/io_completion_port.rs | 142 - .../DiskANN/rust/platform/src/lib.rs | 20 - .../DiskANN/rust/platform/src/perf.rs | 50 - .../DiskANN/rust/project.code-workspace | 58 - .../third_party/DiskANN/rust/readme.md | 25 - .../DiskANN/rust/rust-toolchain.toml | 4 - .../DiskANN/rust/vector/Cargo.toml | 24 - .../third_party/DiskANN/rust/vector/build.rs | 29 - .../DiskANN/rust/vector/distance.c | 35 - .../DiskANN/rust/vector/src/distance.rs | 442 -- .../DiskANN/rust/vector/src/distance_test.rs | 152 - .../DiskANN/rust/vector/src/half.rs | 82 - .../rust/vector/src/l2_float_distance.rs | 78 - .../DiskANN/rust/vector/src/lib.rs | 26 - .../DiskANN/rust/vector/src/metric.rs | 36 - .../DiskANN/rust/vector/src/test_util.rs | 29 - .../DiskANN/rust/vector/src/utils.rs | 21 - .../DiskANN/rust/vector_base64/Cargo.toml | 15 - .../DiskANN/rust/vector_base64/src/main.rs | 82 - .../third_party/DiskANN/setup.py | 176 - .../third_party/DiskANN/src/CMakeLists.txt | 26 - .../DiskANN/src/abstract_data_store.cpp | 45 - .../DiskANN/src/abstract_index.cpp | 334 -- .../third_party/DiskANN/src/ann_exception.cpp | 36 - .../DiskANN/src/apple_aligned_file_reader.cpp | 383 -- .../third_party/DiskANN/src/disk_utils.cpp | 1544 ------- .../third_party/DiskANN/src/distance.cpp | 743 ---- .../DiskANN/src/dll/CMakeLists.txt | 35 - .../third_party/DiskANN/src/dll/dllmain.cpp | 15 - .../third_party/DiskANN/src/filter_utils.cpp | 355 -- .../DiskANN/src/in_mem_data_store.cpp | 401 -- .../DiskANN/src/in_mem_graph_store.cpp | 242 -- .../third_party/DiskANN/src/index.cpp | 3524 --------------- .../third_party/DiskANN/src/index_factory.cpp | 213 - .../DiskANN/src/linux_aligned_file_reader.cpp | 230 - .../third_party/DiskANN/src/logger.cpp | 97 - .../third_party/DiskANN/src/math_utils.cpp | 465 -- .../third_party/DiskANN/src/memory_mapper.cpp | 107 - .../DiskANN/src/natural_number_map.cpp | 116 - .../DiskANN/src/natural_number_set.cpp | 70 - .../third_party/DiskANN/src/partition.cpp | 657 --- .../third_party/DiskANN/src/pq.cpp | 1214 ------ .../third_party/DiskANN/src/pq_data_store.cpp | 260 -- .../DiskANN/src/pq_flash_index.cpp | 2964 ------------- .../DiskANN/src/pq_l2_distance.cpp | 284 -- .../DiskANN/src/restapi/search_wrapper.cpp | 217 - .../DiskANN/src/restapi/server.cpp | 271 -- .../third_party/DiskANN/src/scratch.cpp | 182 - .../third_party/DiskANN/src/utils.cpp | 477 --- .../src/windows_aligned_file_reader.cpp | 189 - .../third_party/DiskANN/tests/CMakeLists.txt | 41 - .../third_party/DiskANN/tests/README.md | 11 - .../index_write_parameters_builder_tests.cpp | 58 - .../third_party/DiskANN/tests/main.cpp | 6 - .../DiskANN/windows/packages.config.in | 11 - .../windows/packages_restapi.config.in | 4 - .../DiskANN/workflows/SSD_index.md | 74 - .../DiskANN/workflows/dynamic_index.md | 187 - .../DiskANN/workflows/filtered_in_memory.md | 126 - .../DiskANN/workflows/filtered_ssd_index.md | 103 - .../DiskANN/workflows/in_memory_index.md | 73 - .../third_party/DiskANN/workflows/python.md | 133 - .../third_party/DiskANN/workflows/rest_api.md | 72 - packages/leann-backend-hnsw/third_party/faiss | 1 + .../third_party/faiss/.clang-format | 88 - .../third_party/faiss/.dockerignore | 1 - .../faiss/.github/ISSUE_TEMPLATE.md | 33 - .../.github/actions/build_cmake/action.yml | 189 - .../.github/actions/build_conda/action.yml | 107 - .../faiss/.github/workflows/autoclose.yml | 23 - .../.github/workflows/build-pull-request.yml | 169 - .../faiss/.github/workflows/build-release.yml | 144 - .../faiss/.github/workflows/build.yml | 17 - .../faiss/.github/workflows/nightly.yml | 148 - .../faiss/.github/workflows/publish-docs.yml | 44 - .../faiss/.github/workflows/retry_build.yml | 33 - .../.github/workflows/update-doxygen.yml | 40 - .../third_party/faiss/.gitignore | 26 - .../third_party/faiss/.vscode/launch.json | 19 - .../third_party/faiss/CHANGELOG.md | 482 --- .../third_party/faiss/CMakeLists.txt | 126 - .../third_party/faiss/CODE_OF_CONDUCT.md | 2 - .../third_party/faiss/CONTRIBUTING.md | 52 - .../third_party/faiss/Doxyfile | 2282 ---------- .../third_party/faiss/INSTALL.md | 325 -- .../third_party/faiss/LICENSE | 21 - .../third_party/faiss/README.md | 92 - .../third_party/faiss/benchs/CMakeLists.txt | 10 - .../third_party/faiss/benchs/README.md | 361 -- .../faiss/benchs/bench_6bit_codec.cpp | 82 - .../faiss/benchs/bench_all_ivf/README.md | 20 - .../benchs/bench_all_ivf/bench_all_ivf.py | 567 --- .../benchs/bench_all_ivf/bench_kmeans.py | 116 - .../benchs/bench_all_ivf/cmp_with_scann.py | 307 -- .../benchs/bench_all_ivf/datasets_oss.py | 136 - .../benchs/bench_all_ivf/make_groundtruth.py | 27 - .../bench_all_ivf/parse_bench_all_ivf.py | 502 --- .../bench_all_ivf/run_on_cluster_generic.bash | 603 --- .../faiss/benchs/bench_big_batch_ivf.py | 109 - .../benchs/bench_cppcontrib_sa_decode.cpp | 1700 -------- .../faiss/benchs/bench_for_interrupt.py | 154 - .../faiss/benchs/bench_fw/__init__.py | 0 .../faiss/benchs/bench_fw/benchmark.py | 1219 ------ .../faiss/benchs/bench_fw/benchmark_io.py | 272 -- .../faiss/benchs/bench_fw/descriptors.py | 379 -- .../faiss/benchs/bench_fw/index.py | 1146 ----- .../faiss/benchs/bench_fw/optimize.py | 335 -- .../faiss/benchs/bench_fw/utils.py | 248 -- .../faiss/benchs/bench_fw_codecs.py | 146 - .../third_party/faiss/benchs/bench_fw_ivf.py | 125 - .../faiss/benchs/bench_fw_notebook.ipynb | 532 --- .../faiss/benchs/bench_fw_optimize.py | 58 - .../faiss/benchs/bench_fw_range.py | 85 - .../third_party/faiss/benchs/bench_gpu_1bn.py | 746 ---- .../faiss/benchs/bench_gpu_sift1m.py | 92 - .../faiss/benchs/bench_hamming_computer.cpp | 314 -- .../faiss/benchs/bench_hamming_knn.py | 29 - .../faiss/benchs/bench_heap_replace.cpp | 139 - .../third_party/faiss/benchs/bench_hnsw.py | 192 - .../faiss/benchs/bench_hybrid_cpu_gpu.py | 599 --- .../faiss/benchs/bench_index_flat.py | 86 - .../faiss/benchs/bench_index_pq.py | 22 - .../faiss/benchs/bench_ivf_fastscan.py | 112 - .../benchs/bench_ivf_fastscan_single_query.py | 122 - .../faiss/benchs/bench_ivf_selector.cpp | 145 - .../faiss/benchs/bench_ivfflat_cuvs.py | 167 - .../faiss/benchs/bench_ivfpq_cuvs.py | 187 - .../faiss/benchs/bench_pairwise_distances.py | 35 - .../faiss/benchs/bench_partition.py | 78 - .../faiss/benchs/bench_polysemous_1bn.py | 251 -- .../faiss/benchs/bench_polysemous_sift1m.py | 46 - .../faiss/benchs/bench_pq_tables.py | 77 - .../bench_pq_transposed_centroid_table.py | 135 - .../faiss/benchs/bench_quantizer.py | 157 - .../faiss/benchs/bench_scalar_quantizer.py | 82 - .../faiss/benchs/bench_vector_ops.py | 84 - .../third_party/faiss/benchs/datasets.py | 45 - .../faiss/benchs/distributed_ondisk/README.md | 194 - .../distributed_ondisk/combined_index.py | 193 - .../distributed_ondisk/distributed_kmeans.py | 239 -- .../distributed_query_demo.py | 70 - .../distributed_ondisk/make_index_vslice.py | 117 - .../distributed_ondisk/make_trained_index.py | 52 - .../distributed_ondisk/merge_to_ondisk.py | 96 - .../distributed_ondisk/run_on_cluster.bash | 263 -- .../distributed_ondisk/search_server.py | 222 - .../third_party/faiss/benchs/kmeans_mnist.py | 88 - .../faiss/benchs/link_and_code/README.md | 25 - .../third_party/faiss/c_api/AutoTune_c.cpp | 113 - .../third_party/faiss/c_api/AutoTune_c.h | 82 - .../third_party/faiss/c_api/CMakeLists.txt | 166 - .../third_party/faiss/c_api/Clustering_c.cpp | 170 - .../third_party/faiss/c_api/Clustering_c.h | 138 - .../third_party/faiss/c_api/INSTALL.md | 104 - .../third_party/faiss/c_api/IndexBinary_c.cpp | 142 - .../third_party/faiss/c_api/IndexBinary_c.h | 169 - .../third_party/faiss/c_api/IndexFlat_c.cpp | 165 - .../third_party/faiss/c_api/IndexFlat_c.h | 129 - .../faiss/c_api/IndexIVFFlat_c.cpp | 100 - .../third_party/faiss/c_api/IndexIVFFlat_c.h | 85 - .../third_party/faiss/c_api/IndexIVF_c.cpp | 184 - .../third_party/faiss/c_api/IndexIVF_c.h | 184 - .../third_party/faiss/c_api/IndexLSH_c.cpp | 46 - .../third_party/faiss/c_api/IndexLSH_c.h | 44 - .../faiss/c_api/IndexPreTransform_c.cpp | 70 - .../faiss/c_api/IndexPreTransform_c.h | 49 - .../faiss/c_api/IndexReplicas_c.cpp | 62 - .../third_party/faiss/c_api/IndexReplicas_c.h | 47 - .../faiss/c_api/IndexScalarQuantizer_c.cpp | 111 - .../faiss/c_api/IndexScalarQuantizer_c.h | 97 - .../third_party/faiss/c_api/IndexShards_c.cpp | 65 - .../third_party/faiss/c_api/IndexShards_c.h | 45 - .../third_party/faiss/c_api/Index_c.cpp | 224 - .../third_party/faiss/c_api/Index_c.h | 281 -- .../third_party/faiss/c_api/MetaIndexes_c.cpp | 81 - .../third_party/faiss/c_api/MetaIndexes_c.h | 99 - .../faiss/c_api/VectorTransform_c.cpp | 227 - .../faiss/c_api/VectorTransform_c.h | 173 - .../third_party/faiss/c_api/clone_index_c.cpp | 35 - .../third_party/faiss/c_api/clone_index_c.h | 34 - .../third_party/faiss/c_api/error_c.h | 41 - .../third_party/faiss/c_api/error_impl.cpp | 26 - .../third_party/faiss/c_api/error_impl.h | 15 - .../third_party/faiss/c_api/example_c.c | 182 - .../third_party/faiss/c_api/faiss_c.h | 62 - .../faiss/c_api/gpu/CMakeLists.txt | 34 - .../faiss/c_api/gpu/DeviceUtils_c.cpp | 46 - .../faiss/c_api/gpu/DeviceUtils_c.h | 37 - .../faiss/c_api/gpu/GpuAutoTune_c.cpp | 112 - .../faiss/c_api/gpu/GpuAutoTune_c.h | 66 - .../faiss/c_api/gpu/GpuClonerOptions_c.cpp | 58 - .../faiss/c_api/gpu/GpuClonerOptions_c.h | 70 - .../faiss/c_api/gpu/GpuIndex_c.cpp | 16 - .../third_party/faiss/c_api/gpu/GpuIndex_c.h | 29 - .../faiss/c_api/gpu/GpuIndicesOptions_c.h | 37 - .../faiss/c_api/gpu/GpuResources_c.cpp | 129 - .../faiss/c_api/gpu/GpuResources_c.h | 82 - .../c_api/gpu/StandardGpuResources_c.cpp | 69 - .../faiss/c_api/gpu/StandardGpuResources_c.h | 60 - .../faiss/c_api/gpu/example_gpu_c.c | 119 - .../third_party/faiss/c_api/gpu/macros_impl.h | 40 - .../faiss/c_api/impl/AuxIndexStructures_c.cpp | 326 -- .../faiss/c_api/impl/AuxIndexStructures_c.h | 201 - .../faiss/c_api/index_factory_c.cpp | 44 - .../third_party/faiss/c_api/index_factory_c.h | 42 - .../third_party/faiss/c_api/index_io_c.cpp | 96 - .../third_party/faiss/c_api/index_io_c.h | 85 - .../third_party/faiss/c_api/macros_impl.h | 107 - .../faiss/c_api/utils/distances_c.cpp | 101 - .../faiss/c_api/utils/distances_c.h | 109 - .../third_party/faiss/c_api/utils/utils_c.cpp | 15 - .../third_party/faiss/c_api/utils/utils_c.h | 26 - .../third_party/faiss/cmake/FindMKL.cmake | 364 -- .../faiss/cmake/faiss-config.cmake.in | 7 - .../faiss/cmake/link_to_faiss_lib.cmake | 66 - .../faiss/cmake/thirdparty/fetch_rapids.cmake | 24 - .../faiss/conda/conda_build_config.yaml | 5 - .../faiss/conda/faiss-gpu-cuvs/meta.yaml | 136 - .../faiss/conda/faiss-gpu/meta.yaml | 122 - .../faiss/conda/faiss/build-lib.bat | 28 - .../faiss/conda/faiss/build-pkg.bat | 28 - .../third_party/faiss/conda/faiss/meta.yaml | 156 - .../third_party/faiss/contrib/README.md | 76 - .../third_party/faiss/contrib/__init__.py | 0 .../faiss/contrib/big_batch_search.py | 515 --- .../faiss/contrib/client_server.py | 91 - .../third_party/faiss/contrib/clustering.py | 428 -- .../third_party/faiss/contrib/datasets.py | 387 -- .../third_party/faiss/contrib/evaluation.py | 492 --- .../faiss/contrib/exhaustive_search.py | 367 -- .../faiss/contrib/factory_tools.py | 149 - .../faiss/contrib/inspect_tools.py | 117 - .../third_party/faiss/contrib/ivf_tools.py | 148 - .../third_party/faiss/contrib/ondisk.py | 59 - .../third_party/faiss/contrib/rpc.py | 258 -- .../third_party/faiss/contrib/torch/README.md | 6 - .../faiss/contrib/torch/__init__.py | 0 .../faiss/contrib/torch/clustering.py | 60 - .../faiss/contrib/torch/quantization.py | 96 - .../third_party/faiss/contrib/torch_utils.py | 764 ---- .../third_party/faiss/contrib/vecs_io.py | 60 - .../demo/H_hnsw_performance_comparison.png | Bin 137688 -> 0 bytes .../faiss/demo/H_hnsw_recall_comparison.png | Bin 90979 -> 0 bytes .../third_party/faiss/demo/build_demo.py | 67 - .../faiss/demo/build_demo_sample.py | 250 -- .../demo/hnsw_performance_comparison.png | Bin 141353 -> 0 bytes .../faiss/demo/hnsw_recall_comparison.png | Bin 88176 -> 0 bytes .../faiss/demo/large_graph_simple_build.py | 354 -- .../faiss/demo/plot_graph_struct.py | 194 - .../faiss/demo/plot_graph_struct_big.py | 202 - .../third_party/faiss/demo/simple_build.py | 329 -- .../faiss/demo/simple_build_dpr.py | 212 - .../faiss/demo/simple_build_nsg.py | 212 - .../third_party/faiss/demo/simple_search.fish | 22 - .../third_party/faiss/demos/CMakeLists.txt | 25 - .../third_party/faiss/demos/README.md | 28 - .../third_party/faiss/demos/demo_auto_tune.py | 169 - .../faiss/demos/demo_client_server_ivf.py | 91 - .../demos/demo_distributed_kmeans_torch.py | 173 - .../third_party/faiss/demos/demo_imi_flat.cpp | 155 - .../third_party/faiss/demos/demo_imi_pq.cpp | 207 - .../faiss/demos/demo_ivfpq_indexing.cpp | 146 - .../faiss/demos/demo_nndescent.cpp | 88 - .../faiss/demos/demo_ondisk_ivf.py | 86 - .../third_party/faiss/demos/demo_qinco.py | 77 - .../faiss/demos/demo_residual_quantizer.cpp | 297 -- .../third_party/faiss/demos/demo_sift1M.cpp | 254 -- .../faiss/demos/demo_weighted_kmeans.cpp | 181 - ...ex_pq_flat_separate_codes_from_codebook.py | 303 -- .../faiss/demos/offline_ivf/README.md | 52 - .../faiss/demos/offline_ivf/__init__.py | 0 .../faiss/demos/offline_ivf/config_ssnpp.yaml | 110 - .../offline_ivf/create_sharded_ssnpp_files.py | 64 - .../faiss/demos/offline_ivf/dataset.py | 174 - .../demos/offline_ivf/generate_config.py | 46 - .../faiss/demos/offline_ivf/offline_ivf.py | 891 ---- .../faiss/demos/offline_ivf/run.py | 219 - .../demos/offline_ivf/tests/testing_utils.py | 181 - .../faiss/demos/offline_ivf/utils.py | 95 - .../faiss/demos/rocksdb_ivf/CMakeLists.txt | 13 - .../faiss/demos/rocksdb_ivf/README.md | 23 - .../rocksdb_ivf/RocksDBInvertedLists.cpp | 114 - .../demos/rocksdb_ivf/RocksDBInvertedLists.h | 67 - .../demos/rocksdb_ivf/demo_rocksdb_ivf.cpp | 88 - .../third_party/faiss/faiss/.flake8 | 3 - .../third_party/faiss/faiss/AutoTune.cpp | 750 ---- .../third_party/faiss/faiss/AutoTune.h | 212 - .../third_party/faiss/faiss/CMakeLists.txt | 511 --- .../third_party/faiss/faiss/Clustering.cpp | 699 --- .../third_party/faiss/faiss/Clustering.h | 213 - .../third_party/faiss/faiss/IVFlib.cpp | 736 ---- .../third_party/faiss/faiss/IVFlib.h | 215 - .../third_party/faiss/faiss/Index.cpp | 189 - .../third_party/faiss/faiss/Index.h | 321 -- .../third_party/faiss/faiss/Index2Layer.cpp | 343 -- .../third_party/faiss/faiss/Index2Layer.h | 76 - .../faiss/faiss/IndexAdditiveQuantizer.cpp | 634 --- .../faiss/faiss/IndexAdditiveQuantizer.h | 262 -- .../faiss/IndexAdditiveQuantizerFastScan.cpp | 297 -- .../faiss/IndexAdditiveQuantizerFastScan.h | 199 - .../third_party/faiss/faiss/IndexBinary.cpp | 117 - .../third_party/faiss/faiss/IndexBinary.h | 184 - .../faiss/faiss/IndexBinaryFlat.cpp | 117 - .../third_party/faiss/faiss/IndexBinaryFlat.h | 69 - .../faiss/faiss/IndexBinaryFromFloat.cpp | 86 - .../faiss/faiss/IndexBinaryFromFloat.h | 54 - .../faiss/faiss/IndexBinaryHNSW.cpp | 299 -- .../third_party/faiss/faiss/IndexBinaryHNSW.h | 58 - .../faiss/faiss/IndexBinaryHash.cpp | 481 --- .../third_party/faiss/faiss/IndexBinaryHash.h | 128 - .../faiss/faiss/IndexBinaryIVF.cpp | 904 ---- .../third_party/faiss/faiss/IndexBinaryIVF.h | 260 -- .../third_party/faiss/faiss/IndexFastScan.cpp | 574 --- .../third_party/faiss/faiss/IndexFastScan.h | 159 - .../third_party/faiss/faiss/IndexFlat.cpp | 520 --- .../third_party/faiss/faiss/IndexFlat.h | 130 - .../faiss/faiss/IndexFlatCodes.cpp | 280 -- .../third_party/faiss/faiss/IndexFlatCodes.h | 88 - .../third_party/faiss/faiss/IndexHNSW.cpp | 1193 ------ .../third_party/faiss/faiss/IndexHNSW.h | 232 - .../third_party/faiss/faiss/IndexIDMap.cpp | 304 -- .../third_party/faiss/faiss/IndexIDMap.h | 130 - .../third_party/faiss/faiss/IndexIVF.cpp | 1403 ------ .../third_party/faiss/faiss/IndexIVF.h | 557 --- .../faiss/faiss/IndexIVFAdditiveQuantizer.cpp | 400 -- .../faiss/faiss/IndexIVFAdditiveQuantizer.h | 188 - .../IndexIVFAdditiveQuantizerFastScan.cpp | 552 --- .../faiss/IndexIVFAdditiveQuantizerFastScan.h | 170 - .../faiss/faiss/IndexIVFFastScan.cpp | 1429 ------- .../faiss/faiss/IndexIVFFastScan.h | 272 -- .../third_party/faiss/faiss/IndexIVFFlat.cpp | 494 --- .../third_party/faiss/faiss/IndexIVFFlat.h | 110 - .../faiss/IndexIVFIndependentQuantizer.cpp | 172 - .../faiss/IndexIVFIndependentQuantizer.h | 56 - .../third_party/faiss/faiss/IndexIVFPQ.cpp | 1391 ------ .../third_party/faiss/faiss/IndexIVFPQ.h | 191 - .../faiss/faiss/IndexIVFPQFastScan.cpp | 287 -- .../faiss/faiss/IndexIVFPQFastScan.h | 85 - .../third_party/faiss/faiss/IndexIVFPQR.cpp | 238 -- .../third_party/faiss/faiss/IndexIVFPQR.h | 74 - .../faiss/faiss/IndexIVFRaBitQ.cpp | 281 -- .../third_party/faiss/faiss/IndexIVFRaBitQ.h | 70 - .../faiss/faiss/IndexIVFSpectralHash.cpp | 341 -- .../faiss/faiss/IndexIVFSpectralHash.h | 90 - .../third_party/faiss/faiss/IndexLSH.cpp | 177 - .../third_party/faiss/faiss/IndexLSH.h | 73 - .../third_party/faiss/faiss/IndexLattice.cpp | 117 - .../third_party/faiss/faiss/IndexLattice.h | 46 - .../faiss/faiss/IndexNNDescent.cpp | 199 - .../third_party/faiss/faiss/IndexNNDescent.h | 72 - .../third_party/faiss/faiss/IndexNSG.cpp | 342 -- .../third_party/faiss/faiss/IndexNSG.h | 109 - .../faiss/faiss/IndexNeuralNetCodec.cpp | 56 - .../faiss/faiss/IndexNeuralNetCodec.h | 49 - .../third_party/faiss/faiss/IndexPQ.cpp | 1115 ----- .../third_party/faiss/faiss/IndexPQ.h | 194 - .../faiss/faiss/IndexPQFastScan.cpp | 71 - .../third_party/faiss/faiss/IndexPQFastScan.h | 53 - .../faiss/faiss/IndexPreTransform.cpp | 337 -- .../faiss/faiss/IndexPreTransform.h | 102 - .../third_party/faiss/faiss/IndexRaBitQ.cpp | 148 - .../third_party/faiss/faiss/IndexRaBitQ.h | 65 - .../third_party/faiss/faiss/IndexRefine.cpp | 339 -- .../third_party/faiss/faiss/IndexRefine.h | 98 - .../third_party/faiss/faiss/IndexReplicas.cpp | 207 - .../third_party/faiss/faiss/IndexReplicas.h | 88 - .../faiss/faiss/IndexRowwiseMinMax.cpp | 445 -- .../faiss/faiss/IndexRowwiseMinMax.h | 99 - .../faiss/faiss/IndexScalarQuantizer.cpp | 282 -- .../faiss/faiss/IndexScalarQuantizer.h | 111 - .../third_party/faiss/faiss/IndexShards.cpp | 270 -- .../third_party/faiss/faiss/IndexShards.h | 111 - .../faiss/faiss/IndexShardsIVF.cpp | 245 -- .../third_party/faiss/faiss/IndexShardsIVF.h | 42 - .../third_party/faiss/faiss/MatrixStats.cpp | 252 -- .../third_party/faiss/faiss/MatrixStats.h | 71 - .../third_party/faiss/faiss/MetaIndexes.cpp | 242 -- .../third_party/faiss/faiss/MetaIndexes.h | 83 - .../third_party/faiss/faiss/MetricType.h | 55 - .../faiss/faiss/VectorTransform.cpp | 1365 ------ .../third_party/faiss/faiss/VectorTransform.h | 313 -- .../third_party/faiss/faiss/clone_index.cpp | 428 -- .../third_party/faiss/faiss/clone_index.h | 39 - .../faiss/faiss/cppcontrib/SaDecodeKernels.h | 322 -- .../faiss/cppcontrib/detail/CoarseBitType.h | 31 - .../faiss/cppcontrib/detail/UintReader.h | 351 -- .../faiss/cppcontrib/docker_dev/Dockerfile | 10 - .../faiss/faiss/cppcontrib/factory_tools.cpp | 211 - .../faiss/faiss/cppcontrib/factory_tools.h | 22 - .../cppcontrib/sa_decode/Level2-avx2-inl.h | 2072 --------- .../faiss/cppcontrib/sa_decode/Level2-inl.h | 467 -- .../cppcontrib/sa_decode/Level2-neon-inl.h | 2161 ---------- .../faiss/cppcontrib/sa_decode/MinMax-inl.h | 467 -- .../cppcontrib/sa_decode/MinMaxFP16-inl.h | 472 -- .../faiss/cppcontrib/sa_decode/PQ-avx2-inl.h | 1625 ------- .../faiss/faiss/cppcontrib/sa_decode/PQ-inl.h | 257 -- .../faiss/cppcontrib/sa_decode/PQ-neon-inl.h | 1460 ------- .../faiss/faiss/gpu/CMakeLists.txt | 352 -- .../faiss/faiss/gpu/GpuAutoTune.cpp | 111 - .../third_party/faiss/faiss/gpu/GpuAutoTune.h | 29 - .../third_party/faiss/faiss/gpu/GpuCloner.cpp | 592 --- .../third_party/faiss/faiss/gpu/GpuCloner.h | 121 - .../faiss/faiss/gpu/GpuClonerOptions.h | 69 - .../faiss/faiss/gpu/GpuDistance.cu | 599 --- .../third_party/faiss/faiss/gpu/GpuDistance.h | 181 - .../faiss/faiss/gpu/GpuFaissAssert.h | 28 - .../faiss/faiss/gpu/GpuIcmEncoder.cu | 126 - .../faiss/faiss/gpu/GpuIcmEncoder.h | 60 - .../third_party/faiss/faiss/gpu/GpuIndex.cu | 548 --- .../third_party/faiss/faiss/gpu/GpuIndex.h | 198 - .../faiss/faiss/gpu/GpuIndexBinaryFlat.cu | 262 -- .../faiss/faiss/gpu/GpuIndexBinaryFlat.h | 100 - .../faiss/faiss/gpu/GpuIndexCagra.cu | 299 -- .../faiss/faiss/gpu/GpuIndexCagra.h | 295 -- .../faiss/faiss/gpu/GpuIndexFlat.cu | 444 -- .../faiss/faiss/gpu/GpuIndexFlat.h | 217 - .../faiss/faiss/gpu/GpuIndexIVF.cu | 481 --- .../third_party/faiss/faiss/gpu/GpuIndexIVF.h | 154 - .../faiss/faiss/gpu/GpuIndexIVFFlat.cu | 392 -- .../faiss/faiss/gpu/GpuIndexIVFFlat.h | 119 - .../faiss/faiss/gpu/GpuIndexIVFPQ.cu | 616 --- .../faiss/faiss/gpu/GpuIndexIVFPQ.h | 181 - .../faiss/gpu/GpuIndexIVFScalarQuantizer.cu | 283 -- .../faiss/gpu/GpuIndexIVFScalarQuantizer.h | 118 - .../faiss/faiss/gpu/GpuIndicesOptions.h | 31 - .../faiss/faiss/gpu/GpuResources.cpp | 228 - .../faiss/faiss/gpu/GpuResources.h | 312 -- .../faiss/faiss/gpu/StandardGpuResources.cpp | 771 ---- .../faiss/faiss/gpu/StandardGpuResources.h | 269 -- .../faiss/faiss/gpu/impl/BinaryDistance.cu | 330 -- .../faiss/faiss/gpu/impl/BinaryDistance.cuh | 24 - .../faiss/faiss/gpu/impl/BinaryFlatIndex.cu | 91 - .../faiss/faiss/gpu/impl/BinaryFlatIndex.cuh | 65 - .../faiss/faiss/gpu/impl/BroadcastSum.cu | 377 -- .../faiss/faiss/gpu/impl/BroadcastSum.cuh | 53 - .../faiss/faiss/gpu/impl/CuvsCagra.cu | 327 -- .../faiss/faiss/gpu/impl/CuvsCagra.cuh | 151 - .../faiss/faiss/gpu/impl/CuvsFlatIndex.cu | 145 - .../faiss/faiss/gpu/impl/CuvsFlatIndex.cuh | 72 - .../faiss/faiss/gpu/impl/CuvsIVFFlat.cu | 555 --- .../faiss/faiss/gpu/impl/CuvsIVFFlat.cuh | 151 - .../faiss/faiss/gpu/impl/CuvsIVFPQ.cu | 550 --- .../faiss/faiss/gpu/impl/CuvsIVFPQ.cuh | 151 - .../faiss/faiss/gpu/impl/Distance.cu | 733 ---- .../faiss/faiss/gpu/impl/Distance.cuh | 445 -- .../faiss/faiss/gpu/impl/DistanceUtils.cuh | 377 -- .../faiss/faiss/gpu/impl/FlatIndex.cu | 305 -- .../faiss/faiss/gpu/impl/FlatIndex.cuh | 133 - .../faiss/faiss/gpu/impl/GeneralDistance.cuh | 460 -- .../faiss/gpu/impl/GpuScalarQuantizer.cuh | 852 ---- .../faiss/faiss/gpu/impl/IVFAppend.cu | 646 --- .../faiss/faiss/gpu/impl/IVFAppend.cuh | 84 - .../faiss/faiss/gpu/impl/IVFBase.cu | 837 ---- .../faiss/faiss/gpu/impl/IVFBase.cuh | 280 -- .../faiss/faiss/gpu/impl/IVFFlat.cu | 405 -- .../faiss/faiss/gpu/impl/IVFFlat.cuh | 105 - .../faiss/faiss/gpu/impl/IVFFlatScan.cu | 494 --- .../faiss/faiss/gpu/impl/IVFFlatScan.cuh | 42 - .../faiss/faiss/gpu/impl/IVFInterleaved.cu | 239 -- .../faiss/faiss/gpu/impl/IVFInterleaved.cuh | 266 -- .../third_party/faiss/faiss/gpu/impl/IVFPQ.cu | 739 ---- .../faiss/faiss/gpu/impl/IVFPQ.cuh | 181 - .../faiss/faiss/gpu/impl/IVFUtils.cu | 189 - .../faiss/faiss/gpu/impl/IVFUtils.cuh | 94 - .../faiss/faiss/gpu/impl/IVFUtilsSelect1.cu | 201 - .../faiss/faiss/gpu/impl/IVFUtilsSelect2.cu | 258 -- .../faiss/faiss/gpu/impl/IcmEncoder.cu | 380 -- .../faiss/faiss/gpu/impl/IcmEncoder.cuh | 79 - .../faiss/faiss/gpu/impl/IndexUtils.cu | 42 - .../faiss/faiss/gpu/impl/IndexUtils.h | 29 - .../faiss/faiss/gpu/impl/InterleavedCodes.cpp | 564 --- .../faiss/faiss/gpu/impl/InterleavedCodes.h | 57 - .../faiss/faiss/gpu/impl/L2Norm.cu | 289 -- .../faiss/faiss/gpu/impl/L2Norm.cuh | 38 - .../faiss/faiss/gpu/impl/L2Select.cu | 292 -- .../faiss/faiss/gpu/impl/L2Select.cuh | 24 - .../faiss/gpu/impl/PQCodeDistances-inl.cuh | 741 ---- .../faiss/faiss/gpu/impl/PQCodeDistances.cuh | 40 - .../faiss/faiss/gpu/impl/PQCodeLoad.cuh | 615 --- .../impl/PQScanMultiPassNoPrecomputed-inl.cuh | 743 ---- .../gpu/impl/PQScanMultiPassNoPrecomputed.cuh | 50 - .../gpu/impl/PQScanMultiPassPrecomputed.cu | 723 ---- .../gpu/impl/PQScanMultiPassPrecomputed.cuh | 45 - .../faiss/faiss/gpu/impl/RemapIndices.cpp | 47 - .../faiss/faiss/gpu/impl/RemapIndices.h | 26 - .../faiss/faiss/gpu/impl/VectorResidual.cu | 214 - .../faiss/faiss/gpu/impl/VectorResidual.cuh | 61 - .../gpu/impl/scan/IVFInterleavedImpl.cuh | 259 -- .../scan/IVFInterleavedScanKernelTemplate.cu | 85 - .../faiss/faiss/gpu/perf/IndexWrapper-inl.h | 66 - .../faiss/faiss/gpu/perf/IndexWrapper.h | 41 - .../faiss/faiss/gpu/perf/PerfBinaryFlat.cu | 121 - .../faiss/faiss/gpu/perf/PerfClustering.cpp | 127 - .../faiss/faiss/gpu/perf/PerfFlat.cu | 159 - .../faiss/faiss/gpu/perf/PerfIVFFlat.cu | 156 - .../faiss/faiss/gpu/perf/PerfIVFPQ.cu | 166 - .../faiss/faiss/gpu/perf/PerfIVFPQAdd.cpp | 159 - .../faiss/faiss/gpu/perf/PerfSelect.cu | 82 - .../faiss/faiss/gpu/perf/WriteIndex.cpp | 113 - .../third_party/faiss/faiss/gpu/perf/slow.py | 24 - .../faiss/faiss/gpu/test/CMakeLists.txt | 64 - .../faiss/faiss/gpu/test/TestCodePacking.cpp | 292 -- .../faiss/faiss/gpu/test/TestGpuDistance.cu | 571 --- .../faiss/gpu/test/TestGpuIndexBinaryFlat.cpp | 199 - .../faiss/faiss/gpu/test/TestGpuIndexCagra.cu | 475 --- .../faiss/faiss/gpu/test/TestGpuIndexFlat.cpp | 770 ---- .../faiss/gpu/test/TestGpuIndexIVFFlat.cpp | 919 ---- .../faiss/gpu/test/TestGpuIndexIVFPQ.cpp | 887 ---- .../test/TestGpuIndexIVFScalarQuantizer.cpp | 233 - .../faiss/gpu/test/TestGpuMemoryException.cpp | 93 - .../gpu/test/TestGpuResidualQuantizer.cpp | 70 - .../faiss/faiss/gpu/test/TestGpuSelect.cu | 207 - .../faiss/faiss/gpu/test/TestUtils.cpp | 433 -- .../faiss/faiss/gpu/test/TestUtils.h | 145 - .../gpu/test/demo_ivfpq_indexing_gpu.cpp | 158 - .../faiss/gpu/test/torch_test_contrib_gpu.py | 509 --- .../faiss/faiss/gpu/utils/BlockSelectFloat.cu | 152 - .../faiss/gpu/utils/BlockSelectKernel.cuh | 169 - .../faiss/faiss/gpu/utils/Comparators.cuh | 47 - .../faiss/gpu/utils/ConversionOperators.cuh | 164 - .../faiss/faiss/gpu/utils/CopyUtils.cuh | 137 - .../faiss/faiss/gpu/utils/CuvsUtils.cu | 118 - .../faiss/faiss/gpu/utils/CuvsUtils.h | 76 - .../faiss/faiss/gpu/utils/DeviceDefs.cuh | 62 - .../faiss/gpu/utils/DeviceTensor-inl.cuh | 192 - .../faiss/faiss/gpu/utils/DeviceTensor.cuh | 96 - .../faiss/faiss/gpu/utils/DeviceUtils.cu | 264 -- .../faiss/faiss/gpu/utils/DeviceUtils.h | 211 - .../faiss/faiss/gpu/utils/DeviceVector.cuh | 277 -- .../faiss/faiss/gpu/utils/Float16.cuh | 84 - .../faiss/faiss/gpu/utils/HostTensor-inl.cuh | 237 -- .../faiss/faiss/gpu/utils/HostTensor.cuh | 94 - .../faiss/faiss/gpu/utils/Limits.cuh | 95 - .../faiss/gpu/utils/LoadStoreOperators.cuh | 148 - .../faiss/faiss/gpu/utils/MathOperators.cuh | 791 ---- .../faiss/faiss/gpu/utils/MatrixMult-inl.cuh | 461 -- .../faiss/faiss/gpu/utils/MatrixMult.cuh | 55 - .../faiss/gpu/utils/MergeNetworkBlock.cuh | 321 -- .../faiss/gpu/utils/MergeNetworkUtils.cuh | 26 - .../faiss/gpu/utils/MergeNetworkWarp.cuh | 558 --- .../faiss/faiss/gpu/utils/NoTypeTensor.cuh | 121 - .../faiss/faiss/gpu/utils/Pair.cuh | 66 - .../faiss/faiss/gpu/utils/PtxUtils.cuh | 135 - .../faiss/gpu/utils/ReductionOperators.cuh | 71 - .../faiss/faiss/gpu/utils/Reductions.cuh | 147 - .../faiss/faiss/gpu/utils/Select.cuh | 647 --- .../faiss/gpu/utils/StackDeviceMemory.cpp | 208 - .../faiss/faiss/gpu/utils/StackDeviceMemory.h | 112 - .../faiss/faiss/gpu/utils/StaticUtils.h | 94 - .../faiss/faiss/gpu/utils/Tensor-inl.cuh | 1052 ----- .../faiss/faiss/gpu/utils/Tensor.cuh | 698 --- .../faiss/faiss/gpu/utils/ThrustUtils.cuh | 82 - .../faiss/faiss/gpu/utils/Timer.cpp | 58 - .../third_party/faiss/faiss/gpu/utils/Timer.h | 53 - .../faiss/faiss/gpu/utils/Transpose.cuh | 193 - .../faiss/faiss/gpu/utils/WarpPackedBits.cuh | 281 -- .../faiss/faiss/gpu/utils/WarpSelectFloat.cu | 99 - .../faiss/gpu/utils/WarpSelectKernel.cuh | 87 - .../faiss/faiss/gpu/utils/WarpShuffles.cuh | 145 - .../utils/blockselect/BlockSelectFloat1.cu | 17 - .../utils/blockselect/BlockSelectFloat128.cu | 17 - .../utils/blockselect/BlockSelectFloat256.cu | 17 - .../utils/blockselect/BlockSelectFloat32.cu | 17 - .../utils/blockselect/BlockSelectFloat64.cu | 17 - .../blockselect/BlockSelectFloatF1024.cu | 16 - .../blockselect/BlockSelectFloatF2048.cu | 19 - .../utils/blockselect/BlockSelectFloatF512.cu | 16 - .../blockselect/BlockSelectFloatT1024.cu | 16 - .../blockselect/BlockSelectFloatT2048.cu | 19 - .../utils/blockselect/BlockSelectFloatT512.cu | 16 - .../gpu/utils/blockselect/BlockSelectImpl.cuh | 104 - .../gpu/utils/warpselect/WarpSelectFloat1.cu | 17 - .../utils/warpselect/WarpSelectFloat128.cu | 17 - .../utils/warpselect/WarpSelectFloat256.cu | 17 - .../gpu/utils/warpselect/WarpSelectFloat32.cu | 17 - .../gpu/utils/warpselect/WarpSelectFloat64.cu | 17 - .../utils/warpselect/WarpSelectFloatF1024.cu | 16 - .../utils/warpselect/WarpSelectFloatF2048.cu | 19 - .../utils/warpselect/WarpSelectFloatF512.cu | 16 - .../utils/warpselect/WarpSelectFloatT1024.cu | 16 - .../utils/warpselect/WarpSelectFloatT2048.cu | 19 - .../utils/warpselect/WarpSelectFloatT512.cu | 16 - .../gpu/utils/warpselect/WarpSelectImpl.cuh | 46 - .../faiss/faiss/impl/AdditiveQuantizer.cpp | 635 --- .../faiss/faiss/impl/AdditiveQuantizer.h | 218 - .../faiss/faiss/impl/AuxIndexStructures.cpp | 264 -- .../faiss/faiss/impl/AuxIndexStructures.h | 202 - .../faiss/faiss/impl/CodePacker.cpp | 67 - .../third_party/faiss/faiss/impl/CodePacker.h | 71 - .../faiss/faiss/impl/DistanceComputer.h | 182 - .../faiss/faiss/impl/FaissAssert.h | 113 - .../faiss/faiss/impl/FaissException.cpp | 100 - .../faiss/faiss/impl/FaissException.h | 65 - .../third_party/faiss/faiss/impl/HNSW.cpp | 1511 ------- .../third_party/faiss/faiss/impl/HNSW.h | 499 --- .../faiss/faiss/impl/HNSW_search.cpp | 851 ---- .../third_party/faiss/faiss/impl/HNSW_zmq.cpp | 657 --- .../third_party/faiss/faiss/impl/HNSW_zmq.h | 155 - .../faiss/faiss/impl/IDSelector.cpp | 125 - .../third_party/faiss/faiss/impl/IDSelector.h | 173 - .../faiss/faiss/impl/LocalSearchQuantizer.cpp | 846 ---- .../faiss/faiss/impl/LocalSearchQuantizer.h | 248 -- .../faiss/faiss/impl/LookupTableScaler.h | 111 - .../faiss/faiss/impl/NNDescent.cpp | 499 --- .../third_party/faiss/faiss/impl/NNDescent.h | 154 - .../third_party/faiss/faiss/impl/NSG.cpp | 775 ---- .../third_party/faiss/faiss/impl/NSG.h | 221 - .../faiss/faiss/impl/PolysemousTraining.cpp | 971 ----- .../faiss/faiss/impl/PolysemousTraining.h | 156 - .../faiss/impl/ProductAdditiveQuantizer.cpp | 374 -- .../faiss/impl/ProductAdditiveQuantizer.h | 154 - .../faiss/faiss/impl/ProductQuantizer-inl.h | 116 - .../faiss/faiss/impl/ProductQuantizer.cpp | 880 ---- .../faiss/faiss/impl/ProductQuantizer.h | 249 -- .../third_party/faiss/faiss/impl/Quantizer.h | 46 - .../faiss/faiss/impl/RaBitQuantizer.cpp | 519 --- .../faiss/faiss/impl/RaBitQuantizer.h | 78 - .../faiss/faiss/impl/ResidualQuantizer.cpp | 514 --- .../faiss/faiss/impl/ResidualQuantizer.h | 148 - .../faiss/faiss/impl/ResultHandler.h | 687 --- .../faiss/faiss/impl/ScalarQuantizer.cpp | 2481 ----------- .../faiss/faiss/impl/ScalarQuantizer.h | 123 - .../faiss/faiss/impl/ThreadedIndex-inl.h | 190 - .../faiss/faiss/impl/ThreadedIndex.h | 86 - .../impl/code_distance/code_distance-avx2.h | 534 --- .../impl/code_distance/code_distance-avx512.h | 248 -- .../code_distance/code_distance-generic.h | 81 - .../impl/code_distance/code_distance-sve.h | 439 -- .../faiss/impl/code_distance/code_distance.h | 186 - .../faiss/faiss/impl/index_read.cpp | 1820 -------- .../faiss/faiss/impl/index_read_utils.h | 37 - .../faiss/faiss/impl/index_write.cpp | 1075 ----- .../third_party/faiss/faiss/impl/io.cpp | 277 -- .../third_party/faiss/faiss/impl/io.h | 145 - .../third_party/faiss/faiss/impl/io_macros.h | 89 - .../third_party/faiss/faiss/impl/kmeans1d.cpp | 301 -- .../third_party/faiss/faiss/impl/kmeans1d.h | 48 - .../faiss/faiss/impl/lattice_Zn.cpp | 664 --- .../third_party/faiss/faiss/impl/lattice_Zn.h | 188 - .../faiss/faiss/impl/mapped_io.cpp | 378 -- .../third_party/faiss/faiss/impl/mapped_io.h | 51 - .../faiss/faiss/impl/maybe_owned_vector.h | 316 -- .../faiss/faiss/impl/platform_macros.h | 203 - .../third_party/faiss/faiss/impl/pq.cpp | 225 - .../third_party/faiss/faiss/impl/pq.h | 92 - .../faiss/faiss/impl/pq4_fast_scan.cpp | 323 -- .../faiss/faiss/impl/pq4_fast_scan.h | 210 - .../faiss/impl/pq4_fast_scan_search_1.cpp | 224 - .../faiss/impl/pq4_fast_scan_search_qbs.cpp | 803 ---- .../impl/residual_quantizer_encode_steps.cpp | 960 ----- .../impl/residual_quantizer_encode_steps.h | 176 - .../faiss/faiss/impl/simd_result_handlers.h | 787 ---- .../faiss/faiss/impl/zerocopy_io.cpp | 67 - .../faiss/faiss/impl/zerocopy_io.h | 32 - .../third_party/faiss/faiss/index_factory.cpp | 956 ----- .../third_party/faiss/faiss/index_factory.h | 27 - .../third_party/faiss/faiss/index_io.h | 126 - .../faiss/invlists/BlockInvertedLists.cpp | 180 - .../faiss/faiss/invlists/BlockInvertedLists.h | 83 - .../faiss/faiss/invlists/DirectMap.cpp | 260 -- .../faiss/faiss/invlists/DirectMap.h | 114 - .../faiss/faiss/invlists/InvertedLists.cpp | 794 ---- .../faiss/faiss/invlists/InvertedLists.h | 426 -- .../faiss/invlists/InvertedListsIOHook.cpp | 102 - .../faiss/invlists/InvertedListsIOHook.h | 62 - .../faiss/invlists/OnDiskInvertedLists.cpp | 806 ---- .../faiss/invlists/OnDiskInvertedLists.h | 156 - .../faiss/faiss/python/CMakeLists.txt | 348 -- .../faiss/faiss/python/__init__.py | 350 -- .../faiss/faiss/python/array_conversions.py | 183 - .../faiss/faiss/python/class_wrappers.py | 1407 ------ .../faiss/faiss/python/extra_wrappers.py | 659 --- .../python/faiss_example_external_module.swig | 141 - .../faiss/faiss/python/gpu_wrappers.py | 293 -- .../third_party/faiss/faiss/python/loader.py | 150 - .../faiss/faiss/python/python_callbacks.cpp | 160 - .../faiss/faiss/python/python_callbacks.h | 82 - .../third_party/faiss/faiss/python/setup.py | 122 - .../faiss/faiss/python/swigfaiss.swig | 1322 ------ .../faiss/faiss/utils/AlignedTable.h | 180 - .../third_party/faiss/faiss/utils/Heap.cpp | 250 -- .../third_party/faiss/faiss/utils/Heap.h | 636 --- .../faiss/faiss/utils/NeuralNet.cpp | 346 -- .../third_party/faiss/faiss/utils/NeuralNet.h | 147 - .../faiss/faiss/utils/WorkerThread.cpp | 117 - .../faiss/faiss/utils/WorkerThread.h | 61 - .../faiss/utils/approx_topk/approx_topk.h | 84 - .../faiss/faiss/utils/approx_topk/avx2-inl.h | 196 - .../faiss/faiss/utils/approx_topk/generic.h | 138 - .../faiss/faiss/utils/approx_topk/mode.h | 34 - .../approx_topk_hamming/approx_topk_hamming.h | 385 -- .../third_party/faiss/faiss/utils/bf16.h | 36 - .../faiss/faiss/utils/distances.cpp | 1208 ------ .../third_party/faiss/faiss/utils/distances.h | 486 --- .../faiss/utils/distances_fused/avx512.cpp | 346 -- .../faiss/utils/distances_fused/avx512.h | 36 - .../utils/distances_fused/distances_fused.cpp | 42 - .../utils/distances_fused/distances_fused.h | 40 - .../utils/distances_fused/simdlib_based.cpp | 352 -- .../utils/distances_fused/simdlib_based.h | 32 - .../faiss/faiss/utils/distances_simd.cpp | 3779 ----------------- .../faiss/faiss/utils/extra_distances-inl.h | 203 - .../faiss/faiss/utils/extra_distances.cpp | 198 - .../faiss/faiss/utils/extra_distances.h | 59 - .../third_party/faiss/faiss/utils/fp16-arm.h | 29 - .../faiss/faiss/utils/fp16-fp16c.h | 28 - .../third_party/faiss/faiss/utils/fp16-inl.h | 108 - .../third_party/faiss/faiss/utils/fp16.h | 20 - .../faiss/faiss/utils/hamming-inl.h | 119 - .../third_party/faiss/faiss/utils/hamming.cpp | 789 ---- .../third_party/faiss/faiss/utils/hamming.h | 291 -- .../faiss/utils/hamming_distance/avx2-inl.h | 462 -- .../faiss/utils/hamming_distance/avx512-inl.h | 490 --- .../faiss/utils/hamming_distance/common.h | 49 - .../utils/hamming_distance/generic-inl.h | 450 -- .../faiss/utils/hamming_distance/hamdis-inl.h | 87 - .../faiss/utils/hamming_distance/neon-inl.h | 524 --- .../faiss/faiss/utils/ordered_key_value.h | 106 - .../faiss/faiss/utils/partitioning.cpp | 1326 ------ .../faiss/faiss/utils/partitioning.h | 74 - .../third_party/faiss/faiss/utils/prefetch.h | 77 - .../faiss/faiss/utils/quantize_lut.cpp | 337 -- .../faiss/faiss/utils/quantize_lut.h | 102 - .../third_party/faiss/faiss/utils/random.cpp | 264 -- .../third_party/faiss/faiss/utils/random.h | 87 - .../third_party/faiss/faiss/utils/simdlib.h | 42 - .../faiss/faiss/utils/simdlib_avx2.h | 803 ---- .../faiss/faiss/utils/simdlib_avx512.h | 296 -- .../faiss/faiss/utils/simdlib_emulated.h | 1045 ----- .../faiss/faiss/utils/simdlib_neon.h | 1360 ------ .../faiss/faiss/utils/simdlib_ppc64.h | 1084 ----- .../third_party/faiss/faiss/utils/sorting.cpp | 827 ---- .../third_party/faiss/faiss/utils/sorting.h | 98 - .../utils/transpose/transpose-avx2-inl.h | 165 - .../utils/transpose/transpose-avx512-inl.h | 176 - .../third_party/faiss/faiss/utils/utils.cpp | 644 --- .../third_party/faiss/faiss/utils/utils.h | 209 - .../third_party/faiss/misc/test_blas.cpp | 110 - .../faiss/perf_tests/CMakeLists.txt | 49 - .../faiss/perf_tests/bench_hnsw.py | 204 - .../bench_no_multithreading_rcq_search.cpp | 65 - .../bench_scalar_quantizer_accuracy.cpp | 87 - .../bench_scalar_quantizer_decode.cpp | 70 - .../bench_scalar_quantizer_distance.cpp | 78 - .../bench_scalar_quantizer_encode.cpp | 64 - .../third_party/faiss/perf_tests/utils.cpp | 27 - .../third_party/faiss/perf_tests/utils.h | 16 - .../third_party/faiss/tests/CMakeLists.txt | 92 - .../faiss/tests/common_faiss_tests.py | 127 - .../faiss/tests/external_module_test.py | 66 - .../faiss/tests/test_NSG_compressed_graph.cpp | 85 - .../faiss/tests/test_RCQ_cropping.cpp | 129 - .../faiss/tests/test_approx_topk.cpp | 224 - .../faiss/tests/test_binary_flat.cpp | 62 - .../third_party/faiss/tests/test_callback.cpp | 37 - .../faiss/tests/test_code_distance.cpp | 240 -- .../tests/test_common_ivf_empty_index.cpp | 148 - .../faiss/tests/test_cppcontrib_sa_decode.cpp | 1306 ------ .../tests/test_cppcontrib_uintreader.cpp | 114 - .../faiss/tests/test_dealloc_invlists.cpp | 170 - .../tests/test_disable_pq_sdc_tables.cpp | 69 - .../faiss/tests/test_distances_simd.cpp | 334 -- .../faiss/tests/test_factory_tools.cpp | 46 - .../faiss/tests/test_fastscan_perf.cpp | 66 - .../third_party/faiss/tests/test_hamming.cpp | 335 -- .../third_party/faiss/tests/test_heap.cpp | 54 - .../third_party/faiss/tests/test_hnsw.cpp | 657 --- .../faiss/tests/test_ivf_index.cpp | 254 -- .../faiss/tests/test_ivfpq_codec.cpp | 85 - .../faiss/tests/test_ivfpq_indexing.cpp | 93 - .../faiss/tests/test_lowlevel_ivf.cpp | 549 --- .../third_party/faiss/tests/test_mem_leak.cpp | 66 - .../third_party/faiss/tests/test_merge.cpp | 246 -- .../third_party/faiss/tests/test_mmap.cpp | 265 -- .../faiss/tests/test_omp_threads.cpp | 14 - .../faiss/tests/test_ondisk_ivf.cpp | 206 - .../faiss/tests/test_pairs_decoding.cpp | 194 - .../faiss/tests/test_params_override.cpp | 287 -- .../faiss/tests/test_partitioning.cpp | 33 - .../faiss/tests/test_pq_encoding.cpp | 145 - .../third_party/faiss/tests/test_simdlib.cpp | 264 -- .../faiss/tests/test_sliding_ivf.cpp | 205 - .../faiss/tests/test_threaded_index.cpp | 260 -- .../faiss/tests/test_transfer_invlists.cpp | 147 - .../third_party/faiss/tests/test_util.h | 38 - .../third_party/faiss/tests/test_utils.cpp | 19 - .../third_party/faiss/tests/test_zerocopy.cpp | 243 -- .../faiss/tests/torch_test_contrib.py | 427 -- .../faiss/tests/torch_test_neural_net.py | 374 -- .../third_party/faiss/tutorial/cpp/1-Flat.cpp | 101 - .../faiss/tutorial/cpp/2-IVFFlat.cpp | 79 - .../faiss/tutorial/cpp/3-IVFPQ.cpp | 95 - .../third_party/faiss/tutorial/cpp/4-GPU.cpp | 120 - .../faiss/tutorial/cpp/5-Multiple-GPUs.cpp | 99 - .../third_party/faiss/tutorial/cpp/6-HNSW.cpp | 73 - .../faiss/tutorial/cpp/7-PQFastScan.cpp | 75 - .../faiss/tutorial/cpp/8-PQFastScanRefine.cpp | 84 - .../faiss/tutorial/cpp/9-RefineComparison.cpp | 104 - .../faiss/tutorial/cpp/CMakeLists.txt | 31 - .../faiss/tutorial/python/1-Flat.py | 29 - .../faiss/tutorial/python/2-IVFFlat.py | 34 - .../faiss/tutorial/python/3-IVFPQ.py | 32 - .../faiss/tutorial/python/4-GPU.py | 57 - .../faiss/tutorial/python/5-Multiple-GPUs.py | 35 - .../faiss/tutorial/python/7-PQFastScan.py | 35 - .../tutorial/python/8-PQFastScanRefine.py | 38 - .../tutorial/python/9-RefineComparison.py | 42 - 1108 files changed, 2 insertions(+), 249940 deletions(-) create mode 160000 packages/leann-backend-diskann/third_party/DiskANN delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/.clang-format delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/.gitattributes delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/.github/ISSUE_TEMPLATE/bug_report.md delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/.github/ISSUE_TEMPLATE/config.yml delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/.github/ISSUE_TEMPLATE/feature_request.md delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/.github/ISSUE_TEMPLATE/usage-question.md delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/.github/PULL_REQUEST_TEMPLATE.md delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/.github/actions/build/action.yml delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/.github/actions/format-check/action.yml delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/.github/actions/generate-high-dim-random/action.yml delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/.github/actions/generate-random/action.yml delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/.github/actions/python-wheel/action.yml delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/.github/workflows/build-python-pdoc.yml delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/.github/workflows/build-python.yml delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/.github/workflows/common.yml delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/.github/workflows/disk-pq.yml delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/.github/workflows/dynamic-labels.yml delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/.github/workflows/dynamic.yml delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/.github/workflows/in-mem-no-pq.yml delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/.github/workflows/in-mem-pq.yml delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/.github/workflows/labels.yml delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/.github/workflows/multi-sector-disk-pq.yml delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/.github/workflows/perf.yml delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/.github/workflows/pr-test.yml delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/.github/workflows/push-test.yml delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/.github/workflows/python-release.yml delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/.github/workflows/unit-tests.yml delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/.gitignore delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/.gitmodules delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/CMakeLists.txt delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/CMakeSettings.json delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/CODE_OF_CONDUCT.md delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/CONTRIBUTING.md delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/Dockerfile delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/DockerfileDev delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/LICENSE delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/MANIFEST.in delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/README.md delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/SECURITY.md delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/apps/CMakeLists.txt delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/apps/build_disk_index.cpp delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/apps/build_memory_index.cpp delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/apps/build_stitched_index.cpp delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/apps/python/README.md delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/apps/python/restapi/__init__.py delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/apps/python/restapi/disk_ann_util.py delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/apps/range_search_disk_index.cpp delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/apps/restapi/CMakeLists.txt delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/apps/restapi/client.cpp delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/apps/restapi/inmem_server.cpp delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/apps/restapi/main.cpp delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/apps/restapi/multiple_ssdindex_server.cpp delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/apps/restapi/ssd_server.cpp delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/apps/search_disk_index.cpp delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/apps/search_memory_index.cpp delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/apps/test_insert_deletes_consolidate.cpp delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/apps/test_streaming_scenario.cpp delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/apps/utils/CMakeLists.txt delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/apps/utils/bin_to_fvecs.cpp delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/apps/utils/bin_to_tsv.cpp delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/apps/utils/calculate_recall.cpp delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/apps/utils/compute_groundtruth.cpp delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/apps/utils/compute_groundtruth_for_filters.cpp delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/apps/utils/count_bfs_levels.cpp delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/apps/utils/create_disk_layout.cpp delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/apps/utils/float_bin_to_int8.cpp delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/apps/utils/fvecs_to_bin.cpp delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/apps/utils/fvecs_to_bvecs.cpp delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/apps/utils/gen_random_slice.cpp delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/apps/utils/generate_pq.cpp delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/apps/utils/generate_synthetic_labels.cpp delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/apps/utils/int8_to_float.cpp delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/apps/utils/int8_to_float_scale.cpp delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/apps/utils/ivecs_to_bin.cpp delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/apps/utils/merge_shards.cpp delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/apps/utils/partition_data.cpp delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/apps/utils/partition_with_ram_budget.cpp delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/apps/utils/rand_data_gen.cpp delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/apps/utils/simulate_aggregate_recall.cpp delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/apps/utils/stats_label_data.cpp delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/apps/utils/tsv_to_bin.cpp delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/apps/utils/uint32_to_uint8.cpp delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/apps/utils/uint8_to_float.cpp delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/apps/utils/vector_analysis.cpp delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/clang-format.cmake delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/include/abstract_data_store.h delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/include/abstract_graph_store.h delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/include/abstract_index.h delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/include/abstract_scratch.h delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/include/aligned_file_reader.h delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/include/ann_exception.h delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/include/any_wrappers.h delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/include/apple_aligned_file_reader.h delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/include/boost_dynamic_bitset_fwd.h delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/include/cached_io.h delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/include/common_includes.h delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/include/concurrent_queue.h delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/include/cosine_similarity.h delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/include/defaults.h delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/include/disk_utils.h delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/include/distance.h delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/include/embedding.pb.h delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/include/embedding_compute.h delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/include/exceptions.h delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/include/filter_utils.h delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/include/in_mem_data_store.h delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/include/in_mem_graph_store.h delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/include/index.h delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/include/index_build_params.h delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/include/index_config.h delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/include/index_factory.h delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/include/linux_aligned_file_reader.h delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/include/locking.h delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/include/logger.h delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/include/logger_impl.h delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/include/math_utils.h delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/include/memory_mapper.h delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/include/natural_number_map.h delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/include/natural_number_set.h delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/include/neighbor.h delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/include/parameters.h delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/include/partition.h delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/include/percentile_stats.h delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/include/pq.h delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/include/pq_common.h delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/include/pq_data_store.h delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/include/pq_flash_index.h delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/include/pq_l2_distance.h delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/include/pq_scratch.h delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/include/program_options_utils.hpp delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/include/proto_embedding.h delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/include/quantized_distance.h delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/include/restapi/common.h delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/include/restapi/search_wrapper.h delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/include/restapi/server.h delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/include/scratch.h delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/include/simd_utils.h delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/include/tag_uint128.h delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/include/timer.h delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/include/tsl/.clang-format delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/include/tsl/robin_growth_policy.h delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/include/tsl/robin_hash.h delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/include/tsl/robin_map.h delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/include/tsl/robin_set.h delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/include/tsl/sparse_growth_policy.h delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/include/tsl/sparse_hash.h delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/include/tsl/sparse_map.h delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/include/tsl/sparse_set.h delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/include/types.h delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/include/utils.h delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/include/windows_aligned_file_reader.h delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/include/windows_customizations.h delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/include/windows_slim_lock.h delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/pyproject.toml delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/python/CMakeLists.txt delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/python/README.md delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/python/apps/cli/__main__.py delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/python/apps/cluster.py delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/python/apps/in-mem-dynamic.py delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/python/apps/in-mem-static.py delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/python/apps/insert-in-clustered-order.py delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/python/apps/utils.py delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/python/include/builder.h delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/python/include/common.h delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/python/include/dynamic_memory_index.h delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/python/include/static_disk_index.h delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/python/include/static_memory_index.h delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/python/src/__init__.py delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/python/src/_builder.py delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/python/src/_builder.pyi delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/python/src/_common.py delete mode 100755 packages/leann-backend-diskann/third_party/DiskANN/python/src/_diskannpy.cpython-310-x86_64-linux-gnu.so.bak delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/python/src/_dynamic_memory_index.py delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/python/src/_files.py delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/python/src/_static_disk_index.py delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/python/src/_static_memory_index.py delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/python/src/builder.cpp delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/python/src/defaults.py delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/python/src/dynamic_memory_index.cpp delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/python/src/module.cpp delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/python/src/py.typed delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/python/src/static_disk_index.cpp delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/python/src/static_memory_index.cpp delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/python/tests/fixtures/__init__.py delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/python/tests/fixtures/build_memory_index.py delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/python/tests/fixtures/create_test_data.py delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/python/tests/fixtures/recall.py delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/rust/Cargo.lock delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/rust/Cargo.toml delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/rust/cmd_drivers/build_and_insert_delete_memory_index/Cargo.toml delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/rust/cmd_drivers/build_and_insert_delete_memory_index/src/main.rs delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/rust/cmd_drivers/build_and_insert_memory_index/Cargo.toml delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/rust/cmd_drivers/build_and_insert_memory_index/src/main.rs delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/rust/cmd_drivers/build_disk_index/Cargo.toml delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/rust/cmd_drivers/build_disk_index/src/main.rs delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/rust/cmd_drivers/build_memory_index/Cargo.toml delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/rust/cmd_drivers/build_memory_index/src/args.rs delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/rust/cmd_drivers/build_memory_index/src/main.rs delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/rust/cmd_drivers/convert_f32_to_bf16/Cargo.toml delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/rust/cmd_drivers/convert_f32_to_bf16/src/main.rs delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/rust/cmd_drivers/load_and_insert_memory_index/Cargo.toml delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/rust/cmd_drivers/load_and_insert_memory_index/src/main.rs delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/rust/cmd_drivers/search_memory_index/Cargo.toml delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/rust/cmd_drivers/search_memory_index/src/main.rs delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/rust/cmd_drivers/search_memory_index/src/search_index_utils.rs delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/rust/diskann/Cargo.toml delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/rust/diskann/benches/distance_bench.rs delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/rust/diskann/benches/kmeans_bench.rs delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/rust/diskann/benches/neighbor_bench.rs delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/rust/diskann/src/algorithm/mod.rs delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/rust/diskann/src/algorithm/prune/mod.rs delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/rust/diskann/src/algorithm/prune/prune.rs delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/rust/diskann/src/algorithm/search/mod.rs delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/rust/diskann/src/algorithm/search/search.rs delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/rust/diskann/src/common/aligned_allocator.rs delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/rust/diskann/src/common/ann_result.rs delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/rust/diskann/src/common/mod.rs delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/rust/diskann/src/index/disk_index/ann_disk_index.rs delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/rust/diskann/src/index/disk_index/disk_index.rs delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/rust/diskann/src/index/disk_index/mod.rs delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/rust/diskann/src/index/inmem_index/ann_inmem_index.rs delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/rust/diskann/src/index/inmem_index/inmem_index.rs delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/rust/diskann/src/index/inmem_index/inmem_index_storage.rs delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/rust/diskann/src/index/inmem_index/mod.rs delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/rust/diskann/src/index/mod.rs delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/rust/diskann/src/instrumentation/disk_index_build_logger.rs delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/rust/diskann/src/instrumentation/index_logger.rs delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/rust/diskann/src/instrumentation/mod.rs delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/rust/diskann/src/lib.rs delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/rust/diskann/src/model/configuration/disk_index_build_parameter.rs delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/rust/diskann/src/model/configuration/index_configuration.rs delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/rust/diskann/src/model/configuration/index_write_parameters.rs delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/rust/diskann/src/model/configuration/mod.rs delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/rust/diskann/src/model/data_store/disk_scratch_dataset.rs delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/rust/diskann/src/model/data_store/inmem_dataset.rs delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/rust/diskann/src/model/data_store/mod.rs delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/rust/diskann/src/model/graph/adjacency_list.rs delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/rust/diskann/src/model/graph/disk_graph.rs delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/rust/diskann/src/model/graph/inmem_graph.rs delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/rust/diskann/src/model/graph/mod.rs delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/rust/diskann/src/model/graph/sector_graph.rs delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/rust/diskann/src/model/graph/vertex_and_neighbors.rs delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/rust/diskann/src/model/mod.rs delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/rust/diskann/src/model/neighbor/mod.rs delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/rust/diskann/src/model/neighbor/neighbor.rs delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/rust/diskann/src/model/neighbor/neighbor_priority_queue.rs delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/rust/diskann/src/model/neighbor/sorted_neighbor_vector.rs delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/rust/diskann/src/model/pq/fixed_chunk_pq_table.rs delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/rust/diskann/src/model/pq/mod.rs delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/rust/diskann/src/model/pq/pq_construction.rs delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/rust/diskann/src/model/scratch/concurrent_queue.rs delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/rust/diskann/src/model/scratch/inmem_query_scratch.rs delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/rust/diskann/src/model/scratch/mod.rs delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/rust/diskann/src/model/scratch/pq_scratch.rs delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/rust/diskann/src/model/scratch/scratch_store_manager.rs delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/rust/diskann/src/model/scratch/scratch_traits.rs delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/rust/diskann/src/model/scratch/ssd_io_context.rs delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/rust/diskann/src/model/scratch/ssd_query_scratch.rs delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/rust/diskann/src/model/scratch/ssd_thread_data.rs delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/rust/diskann/src/model/vertex/dimension.rs delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/rust/diskann/src/model/vertex/mod.rs delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/rust/diskann/src/model/vertex/vertex.rs delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/rust/diskann/src/model/windows_aligned_file_reader/mod.rs delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/rust/diskann/src/model/windows_aligned_file_reader/windows_aligned_file_reader.rs delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/rust/diskann/src/storage/disk_graph_storage.rs delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/rust/diskann/src/storage/disk_index_storage.rs delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/rust/diskann/src/storage/mod.rs delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/rust/diskann/src/storage/pq_storage.rs delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/rust/diskann/src/test_utils/inmem_index_initialization.rs delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/rust/diskann/src/test_utils/mod.rs delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/rust/diskann/src/utils/bit_vec_extension.rs delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/rust/diskann/src/utils/cached_reader.rs delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/rust/diskann/src/utils/cached_writer.rs delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/rust/diskann/src/utils/file_util.rs delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/rust/diskann/src/utils/hashset_u32.rs delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/rust/diskann/src/utils/kmeans.rs delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/rust/diskann/src/utils/math_util.rs delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/rust/diskann/src/utils/mod.rs delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/rust/diskann/src/utils/partition.rs delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/rust/diskann/src/utils/rayon_util.rs delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/rust/diskann/src/utils/timer.rs delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/rust/diskann/src/utils/utils.rs delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/rust/diskann/tests/data/siftsmall_learn_256pts.fbin delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/rust/diskann/tests/data/siftsmall_learn_256pts_2.fbin delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/rust/diskann/tests/data/truth_index_siftsmall_learn_256pts_1+2_R4_L50_A1.2 delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/rust/diskann/tests/data/truth_index_siftsmall_learn_256pts_1+2_saturated_R4_L50_A1.2 delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/rust/diskann/tests/data/truth_index_siftsmall_learn_256pts_R4_L50_A1.2 delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/rust/diskann/tests/data/truth_index_siftsmall_learn_256pts_R4_L50_A1.2.data delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/rust/logger/Cargo.toml delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/rust/logger/build.rs delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/rust/logger/src/error_logger.rs delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/rust/logger/src/examples/trace_example.rs delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/rust/logger/src/indexlog.proto delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/rust/logger/src/lib.rs delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/rust/logger/src/log_error.rs delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/rust/logger/src/message_handler.rs delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/rust/logger/src/trace_logger.rs delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/rust/platform/Cargo.toml delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/rust/platform/src/file_handle.rs delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/rust/platform/src/file_io.rs delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/rust/platform/src/io_completion_port.rs delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/rust/platform/src/lib.rs delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/rust/platform/src/perf.rs delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/rust/project.code-workspace delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/rust/readme.md delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/rust/rust-toolchain.toml delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/rust/vector/Cargo.toml delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/rust/vector/build.rs delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/rust/vector/distance.c delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/rust/vector/src/distance.rs delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/rust/vector/src/distance_test.rs delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/rust/vector/src/half.rs delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/rust/vector/src/l2_float_distance.rs delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/rust/vector/src/lib.rs delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/rust/vector/src/metric.rs delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/rust/vector/src/test_util.rs delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/rust/vector/src/utils.rs delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/rust/vector_base64/Cargo.toml delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/rust/vector_base64/src/main.rs delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/setup.py delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/src/CMakeLists.txt delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/src/abstract_data_store.cpp delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/src/abstract_index.cpp delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/src/ann_exception.cpp delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/src/apple_aligned_file_reader.cpp delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/src/disk_utils.cpp delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/src/distance.cpp delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/src/dll/CMakeLists.txt delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/src/dll/dllmain.cpp delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/src/filter_utils.cpp delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/src/in_mem_data_store.cpp delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/src/in_mem_graph_store.cpp delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/src/index.cpp delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/src/index_factory.cpp delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/src/linux_aligned_file_reader.cpp delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/src/logger.cpp delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/src/math_utils.cpp delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/src/memory_mapper.cpp delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/src/natural_number_map.cpp delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/src/natural_number_set.cpp delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/src/partition.cpp delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/src/pq.cpp delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/src/pq_data_store.cpp delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/src/pq_flash_index.cpp delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/src/pq_l2_distance.cpp delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/src/restapi/search_wrapper.cpp delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/src/restapi/server.cpp delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/src/scratch.cpp delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/src/utils.cpp delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/src/windows_aligned_file_reader.cpp delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/tests/CMakeLists.txt delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/tests/README.md delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/tests/index_write_parameters_builder_tests.cpp delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/tests/main.cpp delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/windows/packages.config.in delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/windows/packages_restapi.config.in delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/workflows/SSD_index.md delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/workflows/dynamic_index.md delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/workflows/filtered_in_memory.md delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/workflows/filtered_ssd_index.md delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/workflows/in_memory_index.md delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/workflows/python.md delete mode 100644 packages/leann-backend-diskann/third_party/DiskANN/workflows/rest_api.md create mode 160000 packages/leann-backend-hnsw/third_party/faiss delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/.clang-format delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/.dockerignore delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/.github/ISSUE_TEMPLATE.md delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/.github/actions/build_cmake/action.yml delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/.github/actions/build_conda/action.yml delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/.github/workflows/autoclose.yml delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/.github/workflows/build-pull-request.yml delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/.github/workflows/build-release.yml delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/.github/workflows/build.yml delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/.github/workflows/nightly.yml delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/.github/workflows/publish-docs.yml delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/.github/workflows/retry_build.yml delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/.github/workflows/update-doxygen.yml delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/.gitignore delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/.vscode/launch.json delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/CHANGELOG.md delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/CMakeLists.txt delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/CODE_OF_CONDUCT.md delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/CONTRIBUTING.md delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/Doxyfile delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/INSTALL.md delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/LICENSE delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/README.md delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/benchs/CMakeLists.txt delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/benchs/README.md delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/benchs/bench_6bit_codec.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/benchs/bench_all_ivf/README.md delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/benchs/bench_all_ivf/bench_all_ivf.py delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/benchs/bench_all_ivf/bench_kmeans.py delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/benchs/bench_all_ivf/cmp_with_scann.py delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/benchs/bench_all_ivf/datasets_oss.py delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/benchs/bench_all_ivf/make_groundtruth.py delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/benchs/bench_all_ivf/parse_bench_all_ivf.py delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/benchs/bench_all_ivf/run_on_cluster_generic.bash delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/benchs/bench_big_batch_ivf.py delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/benchs/bench_cppcontrib_sa_decode.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/benchs/bench_for_interrupt.py delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/benchs/bench_fw/__init__.py delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/benchs/bench_fw/benchmark.py delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/benchs/bench_fw/benchmark_io.py delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/benchs/bench_fw/descriptors.py delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/benchs/bench_fw/index.py delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/benchs/bench_fw/optimize.py delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/benchs/bench_fw/utils.py delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/benchs/bench_fw_codecs.py delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/benchs/bench_fw_ivf.py delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/benchs/bench_fw_notebook.ipynb delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/benchs/bench_fw_optimize.py delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/benchs/bench_fw_range.py delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/benchs/bench_gpu_1bn.py delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/benchs/bench_gpu_sift1m.py delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/benchs/bench_hamming_computer.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/benchs/bench_hamming_knn.py delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/benchs/bench_heap_replace.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/benchs/bench_hnsw.py delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/benchs/bench_hybrid_cpu_gpu.py delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/benchs/bench_index_flat.py delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/benchs/bench_index_pq.py delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/benchs/bench_ivf_fastscan.py delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/benchs/bench_ivf_fastscan_single_query.py delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/benchs/bench_ivf_selector.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/benchs/bench_ivfflat_cuvs.py delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/benchs/bench_ivfpq_cuvs.py delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/benchs/bench_pairwise_distances.py delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/benchs/bench_partition.py delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/benchs/bench_polysemous_1bn.py delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/benchs/bench_polysemous_sift1m.py delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/benchs/bench_pq_tables.py delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/benchs/bench_pq_transposed_centroid_table.py delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/benchs/bench_quantizer.py delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/benchs/bench_scalar_quantizer.py delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/benchs/bench_vector_ops.py delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/benchs/datasets.py delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/benchs/distributed_ondisk/README.md delete mode 100755 packages/leann-backend-hnsw/third_party/faiss/benchs/distributed_ondisk/combined_index.py delete mode 100755 packages/leann-backend-hnsw/third_party/faiss/benchs/distributed_ondisk/distributed_kmeans.py delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/benchs/distributed_ondisk/distributed_query_demo.py delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/benchs/distributed_ondisk/make_index_vslice.py delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/benchs/distributed_ondisk/make_trained_index.py delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/benchs/distributed_ondisk/merge_to_ondisk.py delete mode 100755 packages/leann-backend-hnsw/third_party/faiss/benchs/distributed_ondisk/run_on_cluster.bash delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/benchs/distributed_ondisk/search_server.py delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/benchs/kmeans_mnist.py delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/benchs/link_and_code/README.md delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/c_api/AutoTune_c.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/c_api/AutoTune_c.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/c_api/CMakeLists.txt delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/c_api/Clustering_c.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/c_api/Clustering_c.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/c_api/INSTALL.md delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/c_api/IndexBinary_c.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/c_api/IndexBinary_c.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/c_api/IndexFlat_c.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/c_api/IndexFlat_c.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/c_api/IndexIVFFlat_c.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/c_api/IndexIVFFlat_c.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/c_api/IndexIVF_c.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/c_api/IndexIVF_c.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/c_api/IndexLSH_c.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/c_api/IndexLSH_c.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/c_api/IndexPreTransform_c.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/c_api/IndexPreTransform_c.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/c_api/IndexReplicas_c.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/c_api/IndexReplicas_c.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/c_api/IndexScalarQuantizer_c.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/c_api/IndexScalarQuantizer_c.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/c_api/IndexShards_c.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/c_api/IndexShards_c.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/c_api/Index_c.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/c_api/Index_c.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/c_api/MetaIndexes_c.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/c_api/MetaIndexes_c.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/c_api/VectorTransform_c.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/c_api/VectorTransform_c.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/c_api/clone_index_c.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/c_api/clone_index_c.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/c_api/error_c.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/c_api/error_impl.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/c_api/error_impl.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/c_api/example_c.c delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/c_api/faiss_c.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/c_api/gpu/CMakeLists.txt delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/c_api/gpu/DeviceUtils_c.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/c_api/gpu/DeviceUtils_c.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/c_api/gpu/GpuAutoTune_c.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/c_api/gpu/GpuAutoTune_c.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/c_api/gpu/GpuClonerOptions_c.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/c_api/gpu/GpuClonerOptions_c.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/c_api/gpu/GpuIndex_c.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/c_api/gpu/GpuIndex_c.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/c_api/gpu/GpuIndicesOptions_c.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/c_api/gpu/GpuResources_c.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/c_api/gpu/GpuResources_c.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/c_api/gpu/StandardGpuResources_c.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/c_api/gpu/StandardGpuResources_c.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/c_api/gpu/example_gpu_c.c delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/c_api/gpu/macros_impl.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/c_api/impl/AuxIndexStructures_c.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/c_api/impl/AuxIndexStructures_c.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/c_api/index_factory_c.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/c_api/index_factory_c.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/c_api/index_io_c.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/c_api/index_io_c.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/c_api/macros_impl.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/c_api/utils/distances_c.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/c_api/utils/distances_c.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/c_api/utils/utils_c.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/c_api/utils/utils_c.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/cmake/FindMKL.cmake delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/cmake/faiss-config.cmake.in delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/cmake/link_to_faiss_lib.cmake delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/cmake/thirdparty/fetch_rapids.cmake delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/conda/conda_build_config.yaml delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/conda/faiss-gpu-cuvs/meta.yaml delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/conda/faiss-gpu/meta.yaml delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/conda/faiss/build-lib.bat delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/conda/faiss/build-pkg.bat delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/conda/faiss/meta.yaml delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/contrib/README.md delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/contrib/__init__.py delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/contrib/big_batch_search.py delete mode 100755 packages/leann-backend-hnsw/third_party/faiss/contrib/client_server.py delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/contrib/clustering.py delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/contrib/datasets.py delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/contrib/evaluation.py delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/contrib/exhaustive_search.py delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/contrib/factory_tools.py delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/contrib/inspect_tools.py delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/contrib/ivf_tools.py delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/contrib/ondisk.py delete mode 100755 packages/leann-backend-hnsw/third_party/faiss/contrib/rpc.py delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/contrib/torch/README.md delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/contrib/torch/__init__.py delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/contrib/torch/clustering.py delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/contrib/torch/quantization.py delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/contrib/torch_utils.py delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/contrib/vecs_io.py delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/demo/H_hnsw_performance_comparison.png delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/demo/H_hnsw_recall_comparison.png delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/demo/build_demo.py delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/demo/build_demo_sample.py delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/demo/hnsw_performance_comparison.png delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/demo/hnsw_recall_comparison.png delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/demo/large_graph_simple_build.py delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/demo/plot_graph_struct.py delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/demo/plot_graph_struct_big.py delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/demo/simple_build.py delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/demo/simple_build_dpr.py delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/demo/simple_build_nsg.py delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/demo/simple_search.fish delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/demos/CMakeLists.txt delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/demos/README.md delete mode 100755 packages/leann-backend-hnsw/third_party/faiss/demos/demo_auto_tune.py delete mode 100755 packages/leann-backend-hnsw/third_party/faiss/demos/demo_client_server_ivf.py delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/demos/demo_distributed_kmeans_torch.py delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/demos/demo_imi_flat.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/demos/demo_imi_pq.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/demos/demo_ivfpq_indexing.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/demos/demo_nndescent.cpp delete mode 100755 packages/leann-backend-hnsw/third_party/faiss/demos/demo_ondisk_ivf.py delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/demos/demo_qinco.py delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/demos/demo_residual_quantizer.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/demos/demo_sift1M.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/demos/demo_weighted_kmeans.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/demos/index_pq_flat_separate_codes_from_codebook.py delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/demos/offline_ivf/README.md delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/demos/offline_ivf/__init__.py delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/demos/offline_ivf/config_ssnpp.yaml delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/demos/offline_ivf/create_sharded_ssnpp_files.py delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/demos/offline_ivf/dataset.py delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/demos/offline_ivf/generate_config.py delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/demos/offline_ivf/offline_ivf.py delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/demos/offline_ivf/run.py delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/demos/offline_ivf/tests/testing_utils.py delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/demos/offline_ivf/utils.py delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/demos/rocksdb_ivf/CMakeLists.txt delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/demos/rocksdb_ivf/README.md delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/demos/rocksdb_ivf/RocksDBInvertedLists.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/demos/rocksdb_ivf/RocksDBInvertedLists.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/demos/rocksdb_ivf/demo_rocksdb_ivf.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/.flake8 delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/AutoTune.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/AutoTune.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/CMakeLists.txt delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/Clustering.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/Clustering.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/IVFlib.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/IVFlib.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/Index.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/Index.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/Index2Layer.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/Index2Layer.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/IndexAdditiveQuantizer.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/IndexAdditiveQuantizer.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/IndexAdditiveQuantizerFastScan.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/IndexAdditiveQuantizerFastScan.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/IndexBinary.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/IndexBinary.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/IndexBinaryFlat.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/IndexBinaryFlat.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/IndexBinaryFromFloat.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/IndexBinaryFromFloat.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/IndexBinaryHNSW.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/IndexBinaryHNSW.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/IndexBinaryHash.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/IndexBinaryHash.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/IndexBinaryIVF.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/IndexBinaryIVF.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/IndexFastScan.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/IndexFastScan.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/IndexFlat.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/IndexFlat.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/IndexFlatCodes.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/IndexFlatCodes.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/IndexHNSW.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/IndexHNSW.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/IndexIDMap.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/IndexIDMap.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/IndexIVF.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/IndexIVF.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/IndexIVFAdditiveQuantizer.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/IndexIVFAdditiveQuantizer.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/IndexIVFAdditiveQuantizerFastScan.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/IndexIVFAdditiveQuantizerFastScan.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/IndexIVFFastScan.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/IndexIVFFastScan.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/IndexIVFFlat.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/IndexIVFFlat.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/IndexIVFIndependentQuantizer.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/IndexIVFIndependentQuantizer.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/IndexIVFPQ.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/IndexIVFPQ.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/IndexIVFPQFastScan.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/IndexIVFPQFastScan.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/IndexIVFPQR.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/IndexIVFPQR.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/IndexIVFRaBitQ.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/IndexIVFRaBitQ.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/IndexIVFSpectralHash.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/IndexIVFSpectralHash.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/IndexLSH.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/IndexLSH.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/IndexLattice.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/IndexLattice.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/IndexNNDescent.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/IndexNNDescent.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/IndexNSG.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/IndexNSG.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/IndexNeuralNetCodec.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/IndexNeuralNetCodec.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/IndexPQ.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/IndexPQ.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/IndexPQFastScan.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/IndexPQFastScan.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/IndexPreTransform.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/IndexPreTransform.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/IndexRaBitQ.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/IndexRaBitQ.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/IndexRefine.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/IndexRefine.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/IndexReplicas.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/IndexReplicas.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/IndexRowwiseMinMax.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/IndexRowwiseMinMax.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/IndexScalarQuantizer.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/IndexScalarQuantizer.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/IndexShards.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/IndexShards.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/IndexShardsIVF.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/IndexShardsIVF.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/MatrixStats.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/MatrixStats.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/MetaIndexes.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/MetaIndexes.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/MetricType.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/VectorTransform.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/VectorTransform.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/clone_index.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/clone_index.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/cppcontrib/SaDecodeKernels.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/cppcontrib/detail/CoarseBitType.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/cppcontrib/detail/UintReader.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/cppcontrib/docker_dev/Dockerfile delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/cppcontrib/factory_tools.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/cppcontrib/factory_tools.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/cppcontrib/sa_decode/Level2-avx2-inl.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/cppcontrib/sa_decode/Level2-inl.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/cppcontrib/sa_decode/Level2-neon-inl.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/cppcontrib/sa_decode/MinMax-inl.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/cppcontrib/sa_decode/MinMaxFP16-inl.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/cppcontrib/sa_decode/PQ-avx2-inl.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/cppcontrib/sa_decode/PQ-inl.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/cppcontrib/sa_decode/PQ-neon-inl.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/CMakeLists.txt delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/GpuAutoTune.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/GpuAutoTune.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/GpuCloner.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/GpuCloner.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/GpuClonerOptions.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/GpuDistance.cu delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/GpuDistance.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/GpuFaissAssert.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/GpuIcmEncoder.cu delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/GpuIcmEncoder.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/GpuIndex.cu delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/GpuIndex.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/GpuIndexBinaryFlat.cu delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/GpuIndexBinaryFlat.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/GpuIndexCagra.cu delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/GpuIndexCagra.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/GpuIndexFlat.cu delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/GpuIndexFlat.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/GpuIndexIVF.cu delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/GpuIndexIVF.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/GpuIndexIVFFlat.cu delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/GpuIndexIVFFlat.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/GpuIndexIVFPQ.cu delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/GpuIndexIVFPQ.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/GpuIndexIVFScalarQuantizer.cu delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/GpuIndexIVFScalarQuantizer.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/GpuIndicesOptions.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/GpuResources.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/GpuResources.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/StandardGpuResources.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/StandardGpuResources.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/impl/BinaryDistance.cu delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/impl/BinaryDistance.cuh delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/impl/BinaryFlatIndex.cu delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/impl/BinaryFlatIndex.cuh delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/impl/BroadcastSum.cu delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/impl/BroadcastSum.cuh delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/impl/CuvsCagra.cu delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/impl/CuvsCagra.cuh delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/impl/CuvsFlatIndex.cu delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/impl/CuvsFlatIndex.cuh delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/impl/CuvsIVFFlat.cu delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/impl/CuvsIVFFlat.cuh delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/impl/CuvsIVFPQ.cu delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/impl/CuvsIVFPQ.cuh delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/impl/Distance.cu delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/impl/Distance.cuh delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/impl/DistanceUtils.cuh delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/impl/FlatIndex.cu delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/impl/FlatIndex.cuh delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/impl/GeneralDistance.cuh delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/impl/GpuScalarQuantizer.cuh delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/impl/IVFAppend.cu delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/impl/IVFAppend.cuh delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/impl/IVFBase.cu delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/impl/IVFBase.cuh delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/impl/IVFFlat.cu delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/impl/IVFFlat.cuh delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/impl/IVFFlatScan.cu delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/impl/IVFFlatScan.cuh delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/impl/IVFInterleaved.cu delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/impl/IVFInterleaved.cuh delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/impl/IVFPQ.cu delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/impl/IVFPQ.cuh delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/impl/IVFUtils.cu delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/impl/IVFUtils.cuh delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/impl/IVFUtilsSelect1.cu delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/impl/IVFUtilsSelect2.cu delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/impl/IcmEncoder.cu delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/impl/IcmEncoder.cuh delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/impl/IndexUtils.cu delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/impl/IndexUtils.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/impl/InterleavedCodes.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/impl/InterleavedCodes.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/impl/L2Norm.cu delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/impl/L2Norm.cuh delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/impl/L2Select.cu delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/impl/L2Select.cuh delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/impl/PQCodeDistances-inl.cuh delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/impl/PQCodeDistances.cuh delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/impl/PQCodeLoad.cuh delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/impl/PQScanMultiPassNoPrecomputed-inl.cuh delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/impl/PQScanMultiPassNoPrecomputed.cuh delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/impl/PQScanMultiPassPrecomputed.cu delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/impl/PQScanMultiPassPrecomputed.cuh delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/impl/RemapIndices.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/impl/RemapIndices.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/impl/VectorResidual.cu delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/impl/VectorResidual.cuh delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/impl/scan/IVFInterleavedImpl.cuh delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/impl/scan/IVFInterleavedScanKernelTemplate.cu delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/perf/IndexWrapper-inl.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/perf/IndexWrapper.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/perf/PerfBinaryFlat.cu delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/perf/PerfClustering.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/perf/PerfFlat.cu delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/perf/PerfIVFFlat.cu delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/perf/PerfIVFPQ.cu delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/perf/PerfIVFPQAdd.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/perf/PerfSelect.cu delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/perf/WriteIndex.cpp delete mode 100755 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/perf/slow.py delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/test/CMakeLists.txt delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/test/TestCodePacking.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/test/TestGpuDistance.cu delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/test/TestGpuIndexBinaryFlat.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/test/TestGpuIndexCagra.cu delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/test/TestGpuIndexFlat.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/test/TestGpuIndexIVFFlat.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/test/TestGpuIndexIVFPQ.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/test/TestGpuIndexIVFScalarQuantizer.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/test/TestGpuMemoryException.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/test/TestGpuResidualQuantizer.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/test/TestGpuSelect.cu delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/test/TestUtils.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/test/TestUtils.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/test/demo_ivfpq_indexing_gpu.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/test/torch_test_contrib_gpu.py delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/utils/BlockSelectFloat.cu delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/utils/BlockSelectKernel.cuh delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/utils/Comparators.cuh delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/utils/ConversionOperators.cuh delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/utils/CopyUtils.cuh delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/utils/CuvsUtils.cu delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/utils/CuvsUtils.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/utils/DeviceDefs.cuh delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/utils/DeviceTensor-inl.cuh delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/utils/DeviceTensor.cuh delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/utils/DeviceUtils.cu delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/utils/DeviceUtils.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/utils/DeviceVector.cuh delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/utils/Float16.cuh delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/utils/HostTensor-inl.cuh delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/utils/HostTensor.cuh delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/utils/Limits.cuh delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/utils/LoadStoreOperators.cuh delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/utils/MathOperators.cuh delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/utils/MatrixMult-inl.cuh delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/utils/MatrixMult.cuh delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/utils/MergeNetworkBlock.cuh delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/utils/MergeNetworkUtils.cuh delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/utils/MergeNetworkWarp.cuh delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/utils/NoTypeTensor.cuh delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/utils/Pair.cuh delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/utils/PtxUtils.cuh delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/utils/ReductionOperators.cuh delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/utils/Reductions.cuh delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/utils/Select.cuh delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/utils/StackDeviceMemory.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/utils/StackDeviceMemory.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/utils/StaticUtils.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/utils/Tensor-inl.cuh delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/utils/Tensor.cuh delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/utils/ThrustUtils.cuh delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/utils/Timer.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/utils/Timer.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/utils/Transpose.cuh delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/utils/WarpPackedBits.cuh delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/utils/WarpSelectFloat.cu delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/utils/WarpSelectKernel.cuh delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/utils/WarpShuffles.cuh delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/utils/blockselect/BlockSelectFloat1.cu delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/utils/blockselect/BlockSelectFloat128.cu delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/utils/blockselect/BlockSelectFloat256.cu delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/utils/blockselect/BlockSelectFloat32.cu delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/utils/blockselect/BlockSelectFloat64.cu delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/utils/blockselect/BlockSelectFloatF1024.cu delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/utils/blockselect/BlockSelectFloatF2048.cu delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/utils/blockselect/BlockSelectFloatF512.cu delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/utils/blockselect/BlockSelectFloatT1024.cu delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/utils/blockselect/BlockSelectFloatT2048.cu delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/utils/blockselect/BlockSelectFloatT512.cu delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/utils/blockselect/BlockSelectImpl.cuh delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/utils/warpselect/WarpSelectFloat1.cu delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/utils/warpselect/WarpSelectFloat128.cu delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/utils/warpselect/WarpSelectFloat256.cu delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/utils/warpselect/WarpSelectFloat32.cu delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/utils/warpselect/WarpSelectFloat64.cu delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/utils/warpselect/WarpSelectFloatF1024.cu delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/utils/warpselect/WarpSelectFloatF2048.cu delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/utils/warpselect/WarpSelectFloatF512.cu delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/utils/warpselect/WarpSelectFloatT1024.cu delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/utils/warpselect/WarpSelectFloatT2048.cu delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/utils/warpselect/WarpSelectFloatT512.cu delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/gpu/utils/warpselect/WarpSelectImpl.cuh delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/impl/AdditiveQuantizer.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/impl/AdditiveQuantizer.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/impl/AuxIndexStructures.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/impl/AuxIndexStructures.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/impl/CodePacker.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/impl/CodePacker.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/impl/DistanceComputer.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/impl/FaissAssert.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/impl/FaissException.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/impl/FaissException.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/impl/HNSW.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/impl/HNSW.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/impl/HNSW_search.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/impl/HNSW_zmq.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/impl/HNSW_zmq.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/impl/IDSelector.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/impl/IDSelector.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/impl/LocalSearchQuantizer.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/impl/LocalSearchQuantizer.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/impl/LookupTableScaler.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/impl/NNDescent.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/impl/NNDescent.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/impl/NSG.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/impl/NSG.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/impl/PolysemousTraining.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/impl/PolysemousTraining.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/impl/ProductAdditiveQuantizer.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/impl/ProductAdditiveQuantizer.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/impl/ProductQuantizer-inl.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/impl/ProductQuantizer.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/impl/ProductQuantizer.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/impl/Quantizer.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/impl/RaBitQuantizer.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/impl/RaBitQuantizer.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/impl/ResidualQuantizer.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/impl/ResidualQuantizer.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/impl/ResultHandler.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/impl/ScalarQuantizer.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/impl/ScalarQuantizer.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/impl/ThreadedIndex-inl.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/impl/ThreadedIndex.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/impl/code_distance/code_distance-avx2.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/impl/code_distance/code_distance-avx512.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/impl/code_distance/code_distance-generic.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/impl/code_distance/code_distance-sve.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/impl/code_distance/code_distance.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/impl/index_read.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/impl/index_read_utils.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/impl/index_write.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/impl/io.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/impl/io.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/impl/io_macros.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/impl/kmeans1d.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/impl/kmeans1d.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/impl/lattice_Zn.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/impl/lattice_Zn.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/impl/mapped_io.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/impl/mapped_io.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/impl/maybe_owned_vector.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/impl/platform_macros.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/impl/pq.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/impl/pq.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/impl/pq4_fast_scan.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/impl/pq4_fast_scan.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/impl/pq4_fast_scan_search_1.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/impl/pq4_fast_scan_search_qbs.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/impl/residual_quantizer_encode_steps.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/impl/residual_quantizer_encode_steps.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/impl/simd_result_handlers.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/impl/zerocopy_io.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/impl/zerocopy_io.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/index_factory.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/index_factory.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/index_io.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/invlists/BlockInvertedLists.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/invlists/BlockInvertedLists.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/invlists/DirectMap.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/invlists/DirectMap.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/invlists/InvertedLists.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/invlists/InvertedLists.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/invlists/InvertedListsIOHook.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/invlists/InvertedListsIOHook.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/invlists/OnDiskInvertedLists.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/invlists/OnDiskInvertedLists.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/python/CMakeLists.txt delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/python/__init__.py delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/python/array_conversions.py delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/python/class_wrappers.py delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/python/extra_wrappers.py delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/python/faiss_example_external_module.swig delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/python/gpu_wrappers.py delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/python/loader.py delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/python/python_callbacks.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/python/python_callbacks.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/python/setup.py delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/python/swigfaiss.swig delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/utils/AlignedTable.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/utils/Heap.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/utils/Heap.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/utils/NeuralNet.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/utils/NeuralNet.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/utils/WorkerThread.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/utils/WorkerThread.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/utils/approx_topk/approx_topk.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/utils/approx_topk/avx2-inl.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/utils/approx_topk/generic.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/utils/approx_topk/mode.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/utils/approx_topk_hamming/approx_topk_hamming.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/utils/bf16.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/utils/distances.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/utils/distances.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/utils/distances_fused/avx512.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/utils/distances_fused/avx512.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/utils/distances_fused/distances_fused.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/utils/distances_fused/distances_fused.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/utils/distances_fused/simdlib_based.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/utils/distances_fused/simdlib_based.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/utils/distances_simd.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/utils/extra_distances-inl.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/utils/extra_distances.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/utils/extra_distances.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/utils/fp16-arm.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/utils/fp16-fp16c.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/utils/fp16-inl.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/utils/fp16.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/utils/hamming-inl.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/utils/hamming.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/utils/hamming.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/utils/hamming_distance/avx2-inl.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/utils/hamming_distance/avx512-inl.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/utils/hamming_distance/common.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/utils/hamming_distance/generic-inl.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/utils/hamming_distance/hamdis-inl.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/utils/hamming_distance/neon-inl.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/utils/ordered_key_value.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/utils/partitioning.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/utils/partitioning.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/utils/prefetch.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/utils/quantize_lut.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/utils/quantize_lut.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/utils/random.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/utils/random.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/utils/simdlib.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/utils/simdlib_avx2.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/utils/simdlib_avx512.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/utils/simdlib_emulated.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/utils/simdlib_neon.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/utils/simdlib_ppc64.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/utils/sorting.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/utils/sorting.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/utils/transpose/transpose-avx2-inl.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/utils/transpose/transpose-avx512-inl.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/utils/utils.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/faiss/utils/utils.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/misc/test_blas.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/perf_tests/CMakeLists.txt delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/perf_tests/bench_hnsw.py delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/perf_tests/bench_no_multithreading_rcq_search.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/perf_tests/bench_scalar_quantizer_accuracy.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/perf_tests/bench_scalar_quantizer_decode.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/perf_tests/bench_scalar_quantizer_distance.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/perf_tests/bench_scalar_quantizer_encode.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/perf_tests/utils.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/perf_tests/utils.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/tests/CMakeLists.txt delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/tests/common_faiss_tests.py delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/tests/external_module_test.py delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/tests/test_NSG_compressed_graph.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/tests/test_RCQ_cropping.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/tests/test_approx_topk.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/tests/test_binary_flat.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/tests/test_callback.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/tests/test_code_distance.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/tests/test_common_ivf_empty_index.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/tests/test_cppcontrib_sa_decode.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/tests/test_cppcontrib_uintreader.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/tests/test_dealloc_invlists.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/tests/test_disable_pq_sdc_tables.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/tests/test_distances_simd.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/tests/test_factory_tools.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/tests/test_fastscan_perf.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/tests/test_hamming.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/tests/test_heap.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/tests/test_hnsw.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/tests/test_ivf_index.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/tests/test_ivfpq_codec.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/tests/test_ivfpq_indexing.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/tests/test_lowlevel_ivf.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/tests/test_mem_leak.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/tests/test_merge.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/tests/test_mmap.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/tests/test_omp_threads.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/tests/test_ondisk_ivf.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/tests/test_pairs_decoding.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/tests/test_params_override.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/tests/test_partitioning.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/tests/test_pq_encoding.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/tests/test_simdlib.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/tests/test_sliding_ivf.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/tests/test_threaded_index.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/tests/test_transfer_invlists.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/tests/test_util.h delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/tests/test_utils.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/tests/test_zerocopy.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/tests/torch_test_contrib.py delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/tests/torch_test_neural_net.py delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/tutorial/cpp/1-Flat.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/tutorial/cpp/2-IVFFlat.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/tutorial/cpp/3-IVFPQ.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/tutorial/cpp/4-GPU.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/tutorial/cpp/5-Multiple-GPUs.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/tutorial/cpp/6-HNSW.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/tutorial/cpp/7-PQFastScan.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/tutorial/cpp/8-PQFastScanRefine.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/tutorial/cpp/9-RefineComparison.cpp delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/tutorial/cpp/CMakeLists.txt delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/tutorial/python/1-Flat.py delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/tutorial/python/2-IVFFlat.py delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/tutorial/python/3-IVFPQ.py delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/tutorial/python/4-GPU.py delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/tutorial/python/5-Multiple-GPUs.py delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/tutorial/python/7-PQFastScan.py delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/tutorial/python/8-PQFastScanRefine.py delete mode 100644 packages/leann-backend-hnsw/third_party/faiss/tutorial/python/9-RefineComparison.py diff --git a/packages/leann-backend-diskann/third_party/DiskANN b/packages/leann-backend-diskann/third_party/DiskANN new file mode 160000 index 0000000..015c201 --- /dev/null +++ b/packages/leann-backend-diskann/third_party/DiskANN @@ -0,0 +1 @@ +Subproject commit 015c201141cfd35e2054772358ac5ae7d3dd25a6 diff --git a/packages/leann-backend-diskann/third_party/DiskANN/.clang-format b/packages/leann-backend-diskann/third_party/DiskANN/.clang-format deleted file mode 100644 index ad3192f..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/.clang-format +++ /dev/null @@ -1,6 +0,0 @@ ---- -BasedOnStyle: Microsoft ---- -Language: Cpp -SortIncludes: false -... diff --git a/packages/leann-backend-diskann/third_party/DiskANN/.gitattributes b/packages/leann-backend-diskann/third_party/DiskANN/.gitattributes deleted file mode 100644 index fbf9358..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/.gitattributes +++ /dev/null @@ -1,14 +0,0 @@ -# Set the default behavior, in case people don't have core.autocrlf set. -* text=auto - -# Explicitly declare text files you want to always be normalized and converted -# to native line endings on checkout. -*.c text -*.h text - -# Declare files that will always have CRLF line endings on checkout. -*.sln text eol=crlf - -# Denote all files that are truly binary and should not be modified. -*.png binary -*.jpg binary diff --git a/packages/leann-backend-diskann/third_party/DiskANN/.github/ISSUE_TEMPLATE/bug_report.md b/packages/leann-backend-diskann/third_party/DiskANN/.github/ISSUE_TEMPLATE/bug_report.md deleted file mode 100644 index 829d38d..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/.github/ISSUE_TEMPLATE/bug_report.md +++ /dev/null @@ -1,40 +0,0 @@ ---- -name: Bug report -about: Bug reports help us improve! Thanks for submitting yours! -title: "[BUG] " -labels: bug -assignees: '' - ---- - -## Expected Behavior -Tell us what should happen - -## Actual Behavior -Tell us what happens instead - -## Example Code -Please see [How to create a Minimal, Reproducible example](https://stackoverflow.com/help/minimal-reproducible-example) for some guidance on creating the best possible example of the problem -```bash - -``` - -## Dataset Description -Please tell us about the shape and datatype of your data, (e.g. 128 dimensions, 12.3 billion points, floats) -- Dimensions: -- Number of Points: -- Data type: - -## Error -``` -Paste the full error, with any sensitive information minimally redacted and marked $$REDACTED$$ - -``` - -## Your Environment -* Operating system (e.g. Windows 11 Pro, Ubuntu 22.04.1 LTS) -* DiskANN version (or commit built from) - -## Additional Details -Any other contextual information you might feel is important. - diff --git a/packages/leann-backend-diskann/third_party/DiskANN/.github/ISSUE_TEMPLATE/config.yml b/packages/leann-backend-diskann/third_party/DiskANN/.github/ISSUE_TEMPLATE/config.yml deleted file mode 100644 index 99d680b..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/.github/ISSUE_TEMPLATE/config.yml +++ /dev/null @@ -1,2 +0,0 @@ -blank_issues_enabled: false - diff --git a/packages/leann-backend-diskann/third_party/DiskANN/.github/ISSUE_TEMPLATE/feature_request.md b/packages/leann-backend-diskann/third_party/DiskANN/.github/ISSUE_TEMPLATE/feature_request.md deleted file mode 100644 index 9c3c58c..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/.github/ISSUE_TEMPLATE/feature_request.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -name: Feature request -about: Suggest an idea for this project -title: '' -labels: enhancement -assignees: '' - ---- - -## Is your feature request related to a problem? Please describe. -A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] - -## Describe the solution you'd like -A clear and concise description of what you want to happen. - -## Describe alternatives you've considered -A clear and concise description of any alternative solutions or features you've considered. - -## Provide references (if applicable) -If your feature request is related to a published algorithm/idea, please provide links to -any relevant articles or webpages. - -## Additional context -Add any other context or screenshots about the feature request here. - diff --git a/packages/leann-backend-diskann/third_party/DiskANN/.github/ISSUE_TEMPLATE/usage-question.md b/packages/leann-backend-diskann/third_party/DiskANN/.github/ISSUE_TEMPLATE/usage-question.md deleted file mode 100644 index 7532f76..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/.github/ISSUE_TEMPLATE/usage-question.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -name: Usage Question -about: Ask us a question about DiskANN! -title: "[Question]" -labels: question -assignees: '' - ---- - -This is our forum for asking whatever DiskANN question you'd like! No need to feel shy - we're happy to talk about use cases and optimal tuning strategies! - diff --git a/packages/leann-backend-diskann/third_party/DiskANN/.github/PULL_REQUEST_TEMPLATE.md b/packages/leann-backend-diskann/third_party/DiskANN/.github/PULL_REQUEST_TEMPLATE.md deleted file mode 100644 index 0b97019..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/.github/PULL_REQUEST_TEMPLATE.md +++ /dev/null @@ -1,22 +0,0 @@ - -- [ ] Does this PR have a descriptive title that could go in our release notes? -- [ ] Does this PR add any new dependencies? -- [ ] Does this PR modify any existing APIs? - - [ ] Is the change to the API backwards compatible? -- [ ] Should this result in any changes to our documentation, either updating existing docs or adding new ones? - -#### Reference Issues/PRs - - -#### What does this implement/fix? Briefly explain your changes. - -#### Any other comments? - diff --git a/packages/leann-backend-diskann/third_party/DiskANN/.github/actions/build/action.yml b/packages/leann-backend-diskann/third_party/DiskANN/.github/actions/build/action.yml deleted file mode 100644 index 219d9d6..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/.github/actions/build/action.yml +++ /dev/null @@ -1,39 +0,0 @@ -name: 'DiskANN Build Bootstrap' -description: 'Prepares DiskANN build environment and executes build' -runs: - using: "composite" - steps: - # ------------ Linux Build --------------- - - name: Prepare and Execute Build - if: ${{ runner.os == 'Linux' }} - run: | - sudo scripts/dev/install-dev-deps-ubuntu.bash - cmake -S . -B build -DCMAKE_BUILD_TYPE=Release -DUNIT_TEST=True - cmake --build build -- -j - cmake --install build --prefix="dist" - shell: bash - # ------------ End Linux Build --------------- - # ------------ Windows Build --------------- - - name: Add VisualStudio command line tools into path - if: runner.os == 'Windows' - uses: ilammy/msvc-dev-cmd@v1 - - name: Run configure and build for Windows - if: runner.os == 'Windows' - run: | - mkdir build && cd build && cmake .. -DUNIT_TEST=True && msbuild diskann.sln /m /nologo /t:Build /p:Configuration="Release" /property:Platform="x64" -consoleloggerparameters:"ErrorsOnly;Summary" - cd .. - mkdir dist - mklink /j .\dist\bin .\x64\Release\ - shell: cmd - # ------------ End Windows Build --------------- - # ------------ Windows Build With EXEC_ENV_OLS and USE_BING_INFRA --------------- - - name: Add VisualStudio command line tools into path - if: runner.os == 'Windows' - uses: ilammy/msvc-dev-cmd@v1 - - name: Run configure and build for Windows with Bing feature flags - if: runner.os == 'Windows' - run: | - mkdir build_bing && cd build_bing && cmake .. -DEXEC_ENV_OLS=1 -DUSE_BING_INFRA=1 -DUNIT_TEST=True && msbuild diskann.sln /m /nologo /t:Build /p:Configuration="Release" /property:Platform="x64" -consoleloggerparameters:"ErrorsOnly;Summary" - cd .. - shell: cmd - # ------------ End Windows Build --------------- diff --git a/packages/leann-backend-diskann/third_party/DiskANN/.github/actions/format-check/action.yml b/packages/leann-backend-diskann/third_party/DiskANN/.github/actions/format-check/action.yml deleted file mode 100644 index 6ed08c0..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/.github/actions/format-check/action.yml +++ /dev/null @@ -1,13 +0,0 @@ -name: 'Checking code formatting...' -description: 'Ensures code complies with code formatting rules' -runs: - using: "composite" - steps: - - name: Checking code formatting... - run: | - sudo apt install clang-format - find include -name '*.h' -type f -print0 | xargs -0 -P 16 /usr/bin/clang-format --Werror --dry-run - find src -name '*.cpp' -type f -print0 | xargs -0 -P 16 /usr/bin/clang-format --Werror --dry-run - find apps -name '*.cpp' -type f -print0 | xargs -0 -P 16 /usr/bin/clang-format --Werror --dry-run - find python -name '*.cpp' -type f -print0 | xargs -0 -P 16 /usr/bin/clang-format --Werror --dry-run - shell: bash diff --git a/packages/leann-backend-diskann/third_party/DiskANN/.github/actions/generate-high-dim-random/action.yml b/packages/leann-backend-diskann/third_party/DiskANN/.github/actions/generate-high-dim-random/action.yml deleted file mode 100644 index 65e9b7e..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/.github/actions/generate-high-dim-random/action.yml +++ /dev/null @@ -1,28 +0,0 @@ -name: 'Generating Random Data (Basic)' -description: 'Generates the random data files used in acceptance tests' -runs: - using: "composite" - steps: - - name: Generate Random Data (Basic) - run: | - mkdir data - - echo "Generating random 1020,1024,1536D float and 4096 int8 vectors for index" - dist/bin/rand_data_gen --data_type float --output_file data/rand_float_1020D_5K_norm1.0.bin -D 1020 -N 5000 --norm 1.0 - #dist/bin/rand_data_gen --data_type float --output_file data/rand_float_1024D_5K_norm1.0.bin -D 1024 -N 5000 --norm 1.0 - dist/bin/rand_data_gen --data_type float --output_file data/rand_float_1536D_5K_norm1.0.bin -D 1536 -N 5000 --norm 1.0 - dist/bin/rand_data_gen --data_type int8 --output_file data/rand_int8_4096D_5K_norm1.0.bin -D 4096 -N 5000 --norm 1.0 - - echo "Generating random 1020,1024,1536D float and 4096D int8 avectors for query" - dist/bin/rand_data_gen --data_type float --output_file data/rand_float_1020D_1K_norm1.0.bin -D 1020 -N 1000 --norm 1.0 - #dist/bin/rand_data_gen --data_type float --output_file data/rand_float_1024D_1K_norm1.0.bin -D 1024 -N 1000 --norm 1.0 - dist/bin/rand_data_gen --data_type float --output_file data/rand_float_1536D_1K_norm1.0.bin -D 1536 -N 1000 --norm 1.0 - dist/bin/rand_data_gen --data_type int8 --output_file data/rand_int8_4096D_1K_norm1.0.bin -D 4096 -N 1000 --norm 1.0 - - echo "Computing ground truth for 1020,1024,1536D float and 4096D int8 avectors for query" - dist/bin/compute_groundtruth --data_type float --dist_fn l2 --base_file data/rand_float_1020D_5K_norm1.0.bin --query_file data/rand_float_1020D_1K_norm1.0.bin --gt_file data/l2_rand_float_1020D_5K_norm1.0_1020D_1K_norm1.0_gt100 --K 100 - #dist/bin/compute_groundtruth --data_type float --dist_fn l2 --base_file data/rand_float_1024D_5K_norm1.0.bin --query_file data/rand_float_1024D_1K_norm1.0.bin --gt_file data/l2_rand_float_1024D_5K_norm1.0_1024D_1K_norm1.0_gt100 --K 100 - dist/bin/compute_groundtruth --data_type float --dist_fn l2 --base_file data/rand_float_1536D_5K_norm1.0.bin --query_file data/rand_float_1536D_1K_norm1.0.bin --gt_file data/l2_rand_float_1536D_5K_norm1.0_1536D_1K_norm1.0_gt100 --K 100 - dist/bin/compute_groundtruth --data_type int8 --dist_fn l2 --base_file data/rand_int8_4096D_5K_norm1.0.bin --query_file data/rand_int8_4096D_1K_norm1.0.bin --gt_file data/l2_rand_int8_4096D_5K_norm1.0_4096D_1K_norm1.0_gt100 --K 100 - - shell: bash diff --git a/packages/leann-backend-diskann/third_party/DiskANN/.github/actions/generate-random/action.yml b/packages/leann-backend-diskann/third_party/DiskANN/.github/actions/generate-random/action.yml deleted file mode 100644 index 2755067..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/.github/actions/generate-random/action.yml +++ /dev/null @@ -1,38 +0,0 @@ -name: 'Generating Random Data (Basic)' -description: 'Generates the random data files used in acceptance tests' -runs: - using: "composite" - steps: - - name: Generate Random Data (Basic) - run: | - mkdir data - - echo "Generating random vectors for index" - dist/bin/rand_data_gen --data_type float --output_file data/rand_float_10D_10K_norm1.0.bin -D 10 -N 10000 --norm 1.0 - dist/bin/rand_data_gen --data_type float --output_file data/rand_float_10D_10K_unnorm.bin -D 10 -N 10000 --rand_scaling 2.0 - dist/bin/rand_data_gen --data_type int8 --output_file data/rand_int8_10D_10K_norm50.0.bin -D 10 -N 10000 --norm 50.0 - dist/bin/rand_data_gen --data_type uint8 --output_file data/rand_uint8_10D_10K_norm50.0.bin -D 10 -N 10000 --norm 50.0 - - echo "Generating random vectors for query" - dist/bin/rand_data_gen --data_type float --output_file data/rand_float_10D_1K_norm1.0.bin -D 10 -N 1000 --norm 1.0 - dist/bin/rand_data_gen --data_type float --output_file data/rand_float_10D_1K_unnorm.bin -D 10 -N 1000 --rand_scaling 2.0 - dist/bin/rand_data_gen --data_type int8 --output_file data/rand_int8_10D_1K_norm50.0.bin -D 10 -N 1000 --norm 50.0 - dist/bin/rand_data_gen --data_type uint8 --output_file data/rand_uint8_10D_1K_norm50.0.bin -D 10 -N 1000 --norm 50.0 - - echo "Computing ground truth for floats across l2, mips, and cosine distance functions" - dist/bin/compute_groundtruth --data_type float --dist_fn l2 --base_file data/rand_float_10D_10K_norm1.0.bin --query_file data/rand_float_10D_1K_norm1.0.bin --gt_file data/l2_rand_float_10D_10K_norm1.0_10D_1K_norm1.0_gt100 --K 100 - dist/bin/compute_groundtruth --data_type float --dist_fn mips --base_file data/rand_float_10D_10K_norm1.0.bin --query_file data/rand_float_10D_1K_norm1.0.bin --gt_file data/mips_rand_float_10D_10K_norm1.0_10D_1K_norm1.0_gt100 --K 100 - dist/bin/compute_groundtruth --data_type float --dist_fn cosine --base_file data/rand_float_10D_10K_norm1.0.bin --query_file data/rand_float_10D_1K_norm1.0.bin --gt_file data/cosine_rand_float_10D_10K_norm1.0_10D_1K_norm1.0_gt100 --K 100 - dist/bin/compute_groundtruth --data_type float --dist_fn cosine --base_file data/rand_float_10D_10K_unnorm.bin --query_file data/rand_float_10D_1K_unnorm.bin --gt_file data/cosine_rand_float_10D_10K_unnorm_10D_1K_unnorm_gt100 --K 100 - - echo "Computing ground truth for int8s across l2, mips, and cosine distance functions" - dist/bin/compute_groundtruth --data_type int8 --dist_fn l2 --base_file data/rand_int8_10D_10K_norm50.0.bin --query_file data/rand_int8_10D_1K_norm50.0.bin --gt_file data/l2_rand_int8_10D_10K_norm50.0_10D_1K_norm50.0_gt100 --K 100 - dist/bin/compute_groundtruth --data_type int8 --dist_fn mips --base_file data/rand_int8_10D_10K_norm50.0.bin --query_file data/rand_int8_10D_1K_norm50.0.bin --gt_file data/mips_rand_int8_10D_10K_norm50.0_10D_1K_norm50.0_gt100 --K 100 - dist/bin/compute_groundtruth --data_type int8 --dist_fn cosine --base_file data/rand_int8_10D_10K_norm50.0.bin --query_file data/rand_int8_10D_1K_norm50.0.bin --gt_file data/cosine_rand_int8_10D_10K_norm50.0_10D_1K_norm50.0_gt100 --K 100 - - echo "Computing ground truth for uint8s across l2, mips, and cosine distance functions" - dist/bin/compute_groundtruth --data_type uint8 --dist_fn l2 --base_file data/rand_uint8_10D_10K_norm50.0.bin --query_file data/rand_uint8_10D_1K_norm50.0.bin --gt_file data/l2_rand_uint8_10D_10K_norm50.0_10D_1K_norm50.0_gt100 --K 100 - dist/bin/compute_groundtruth --data_type uint8 --dist_fn mips --base_file data/rand_uint8_10D_10K_norm50.0.bin --query_file data/rand_uint8_10D_1K_norm50.0.bin --gt_file data/mips_rand_uint8_10D_10K_norm50.0_10D_1K_norm50.0_gt100 --K 100 - dist/bin/compute_groundtruth --data_type uint8 --dist_fn cosine --base_file data/rand_uint8_10D_10K_norm50.0.bin --query_file data/rand_uint8_10D_1K_norm50.0.bin --gt_file data/cosine_rand_uint8_10D_10K_norm50.0_10D_1K_norm50.0_gt100 --K 100 - - shell: bash diff --git a/packages/leann-backend-diskann/third_party/DiskANN/.github/actions/python-wheel/action.yml b/packages/leann-backend-diskann/third_party/DiskANN/.github/actions/python-wheel/action.yml deleted file mode 100644 index 6a2880c..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/.github/actions/python-wheel/action.yml +++ /dev/null @@ -1,22 +0,0 @@ -name: Build Python Wheel -description: Builds a python wheel with cibuildwheel -inputs: - cibw-identifier: - description: "CI build wheel identifier to build" - required: true -runs: - using: "composite" - steps: - - uses: actions/setup-python@v3 - - name: Install cibuildwheel - run: python -m pip install cibuildwheel==2.11.3 - shell: bash - - name: Building Python ${{inputs.cibw-identifier}} Wheel - run: python -m cibuildwheel --output-dir dist - env: - CIBW_BUILD: ${{inputs.cibw-identifier}} - shell: bash - - uses: actions/upload-artifact@v3 - with: - name: wheels - path: ./dist/*.whl diff --git a/packages/leann-backend-diskann/third_party/DiskANN/.github/workflows/build-python-pdoc.yml b/packages/leann-backend-diskann/third_party/DiskANN/.github/workflows/build-python-pdoc.yml deleted file mode 100644 index 444a7ee..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/.github/workflows/build-python-pdoc.yml +++ /dev/null @@ -1,81 +0,0 @@ -name: DiskANN Build PDoc Documentation -on: [workflow_call] -jobs: - build-reference-documentation: - permissions: - contents: write - runs-on: ubuntu-latest - steps: - - name: Checkout repository - uses: actions/checkout@v3 - with: - fetch-depth: 1 - - name: Set up Python 3.9 - uses: actions/setup-python@v2 - with: - python-version: 3.9 - - name: Install python build - run: python -m pip install build - shell: bash - # Install required dependencies - - name: Prepare Linux environment - run: | - sudo scripts/dev/install-dev-deps-ubuntu.bash - shell: bash - # We need to build the wheel in order to run pdoc. pdoc does not seem to work if you just point it at - # our source directory. - - name: Building Python Wheel for documentation generation - run: python -m build --wheel --outdir documentation_dist - shell: bash - - name: "Run Reference Documentation Generation" - run: | - pip install pdoc pipdeptree - pip install documentation_dist/*.whl - echo "documentation" > dependencies_documentation.txt - pipdeptree >> dependencies_documentation.txt - pdoc -o docs/python/html diskannpy - - name: Create version environment variable - run: | - echo "DISKANN_VERSION=$(python <> $GITHUB_ENV - - name: Archive documentation version artifact - uses: actions/upload-artifact@v4 - with: - name: dependencies - path: | - ${{ github.run_id }}-dependencies_documentation.txt - overwrite: true - - name: Archive documentation artifacts - uses: actions/upload-artifact@v4 - with: - name: documentation-site - path: | - docs/python/html - # Publish to /dev if we are on the "main" branch - - name: Publish reference docs for latest development version (main branch) - uses: peaceiris/actions-gh-pages@v3 - if: github.ref == 'refs/heads/main' - with: - github_token: ${{ secrets.GITHUB_TOKEN }} - publish_dir: docs/python/html - destination_dir: docs/python/dev - # Publish to / if we are releasing - - name: Publish reference docs by version (main branch) - uses: peaceiris/actions-gh-pages@v3 - if: github.event_name == 'release' - with: - github_token: ${{ secrets.GITHUB_TOKEN }} - publish_dir: docs/python/html - destination_dir: docs/python/${{ env.DISKANN_VERSION }} - # Publish to /latest if we are releasing - - name: Publish latest reference docs (main branch) - uses: peaceiris/actions-gh-pages@v3 - if: github.event_name == 'release' - with: - github_token: ${{ secrets.GITHUB_TOKEN }} - publish_dir: docs/python/html - destination_dir: docs/python/latest diff --git a/packages/leann-backend-diskann/third_party/DiskANN/.github/workflows/build-python.yml b/packages/leann-backend-diskann/third_party/DiskANN/.github/workflows/build-python.yml deleted file mode 100644 index b825398..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/.github/workflows/build-python.yml +++ /dev/null @@ -1,42 +0,0 @@ -name: DiskANN Build Python Wheel -on: [workflow_call] -jobs: - linux-build: - name: Python - Ubuntu - ${{matrix.cibw-identifier}} - strategy: - fail-fast: false - matrix: - cibw-identifier: ["cp39-manylinux_x86_64", "cp310-manylinux_x86_64", "cp311-manylinux_x86_64"] - runs-on: ubuntu-latest - defaults: - run: - shell: bash - steps: - - name: Checkout repository - uses: actions/checkout@v3 - with: - fetch-depth: 1 - - name: Building python wheel ${{matrix.cibw-identifier}} - uses: ./.github/actions/python-wheel - with: - cibw-identifier: ${{matrix.cibw-identifier}} - windows-build: - name: Python - Windows - ${{matrix.cibw-identifier}} - strategy: - fail-fast: false - matrix: - cibw-identifier: ["cp39-win_amd64", "cp310-win_amd64", "cp311-win_amd64"] - runs-on: windows-latest - defaults: - run: - shell: bash - steps: - - name: Checkout repository - uses: actions/checkout@v3 - with: - submodules: true - fetch-depth: 1 - - name: Building python wheel ${{matrix.cibw-identifier}} - uses: ./.github/actions/python-wheel - with: - cibw-identifier: ${{matrix.cibw-identifier}} diff --git a/packages/leann-backend-diskann/third_party/DiskANN/.github/workflows/common.yml b/packages/leann-backend-diskann/third_party/DiskANN/.github/workflows/common.yml deleted file mode 100644 index 09c020a..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/.github/workflows/common.yml +++ /dev/null @@ -1,28 +0,0 @@ -name: DiskANN Common Checks -# common means common to both pr-test and push-test -on: [workflow_call] -jobs: - formatting-check: - strategy: - fail-fast: true - name: Code Formatting Test - runs-on: ubuntu-latest - steps: - - name: Checkout repository - uses: actions/checkout@v3 - with: - fetch-depth: 1 - - name: Checking code formatting... - uses: ./.github/actions/format-check - docker-container-build: - name: Docker Container Build - needs: [formatting-check] - runs-on: ubuntu-latest - steps: - - name: Checkout repository - uses: actions/checkout@v3 - with: - fetch-depth: 1 - - name: Docker build - run: | - docker build . \ No newline at end of file diff --git a/packages/leann-backend-diskann/third_party/DiskANN/.github/workflows/disk-pq.yml b/packages/leann-backend-diskann/third_party/DiskANN/.github/workflows/disk-pq.yml deleted file mode 100644 index 930d213..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/.github/workflows/disk-pq.yml +++ /dev/null @@ -1,117 +0,0 @@ -name: Disk With PQ -on: [workflow_call] -jobs: - acceptance-tests-disk-pq: - name: Disk, PQ - strategy: - fail-fast: false - matrix: - os: [ubuntu-latest, windows-2019, windows-latest] - runs-on: ${{matrix.os}} - defaults: - run: - shell: bash - steps: - - name: Checkout repository - if: ${{ runner.os == 'Linux' }} - uses: actions/checkout@v3 - with: - fetch-depth: 1 - - name: Checkout repository - if: ${{ runner.os == 'Windows' }} - uses: actions/checkout@v3 - with: - fetch-depth: 1 - submodules: true - - name: DiskANN Build CLI Applications - uses: ./.github/actions/build - - - name: Generate Data - uses: ./.github/actions/generate-random - - - name: build and search disk index (one shot graph build, L2, no diskPQ) (float) - if: success() || failure() - run: | - dist/bin/build_disk_index --data_type float --dist_fn l2 --data_path data/rand_float_10D_10K_norm1.0.bin --index_path_prefix data/disk_index_l2_rand_float_10D_10K_norm1.0_diskfull_oneshot -R 16 -L 32 -B 0.00003 -M 1 - dist/bin/search_disk_index --data_type float --dist_fn l2 --fail_if_recall_below 70 --index_path_prefix data/disk_index_l2_rand_float_10D_10K_norm1.0_diskfull_oneshot --result_path /tmp/res --query_file data/rand_float_10D_1K_norm1.0.bin --gt_file data/l2_rand_float_10D_10K_norm1.0_10D_1K_norm1.0_gt100 --recall_at 5 -L 5 12 -W 2 --num_nodes_to_cache 10 -T 16 - - name: build and search disk index (one shot graph build, cosine, no diskPQ) (float) - if: success() || failure() - run: | - dist/bin/build_disk_index --data_type float --dist_fn cosine --data_path data/rand_float_10D_10K_unnorm.bin --index_path_prefix data/disk_index_cosine_rand_float_10D_10K_unnorm_diskfull_oneshot -R 16 -L 32 -B 0.00003 -M 1 - dist/bin/search_disk_index --data_type float --dist_fn cosine --fail_if_recall_below 70 --index_path_prefix data/disk_index_cosine_rand_float_10D_10K_unnorm_diskfull_oneshot --result_path /tmp/res --query_file data/rand_float_10D_1K_unnorm.bin --gt_file data/cosine_rand_float_10D_10K_unnorm_10D_1K_unnorm_gt100 --recall_at 5 -L 5 12 -W 2 --num_nodes_to_cache 10 -T 16 - - name: build and search disk index (one shot graph build, L2, no diskPQ) (int8) - if: success() || failure() - run: | - dist/bin/build_disk_index --data_type int8 --dist_fn l2 --data_path data/rand_int8_10D_10K_norm50.0.bin --index_path_prefix data/disk_index_l2_rand_int8_10D_10K_norm50.0_diskfull_oneshot -R 16 -L 32 -B 0.00003 -M 1 - dist/bin/search_disk_index --data_type int8 --dist_fn l2 --fail_if_recall_below 70 --index_path_prefix data/disk_index_l2_rand_int8_10D_10K_norm50.0_diskfull_oneshot --result_path /tmp/res --query_file data/rand_int8_10D_1K_norm50.0.bin --gt_file data/l2_rand_int8_10D_10K_norm50.0_10D_1K_norm50.0_gt100 --recall_at 5 -L 5 12 -W 2 --num_nodes_to_cache 10 -T 16 - - name: build and search disk index (one shot graph build, L2, no diskPQ) (uint8) - if: success() || failure() - run: | - dist/bin/build_disk_index --data_type uint8 --dist_fn l2 --data_path data/rand_uint8_10D_10K_norm50.0.bin --index_path_prefix data/disk_index_l2_rand_uint8_10D_10K_norm50.0_diskfull_oneshot -R 16 -L 32 -B 0.00003 -M 1 - dist/bin/search_disk_index --data_type uint8 --dist_fn l2 --fail_if_recall_below 70 --index_path_prefix data/disk_index_l2_rand_uint8_10D_10K_norm50.0_diskfull_oneshot --result_path /tmp/res --query_file data/rand_uint8_10D_1K_norm50.0.bin --gt_file data/l2_rand_uint8_10D_10K_norm50.0_10D_1K_norm50.0_gt100 --recall_at 5 -L 5 12 -W 2 --num_nodes_to_cache 10 -T 16 - - - name: build and search disk index (one shot graph build, L2, no diskPQ, build with PQ distance comparisons) (float) - if: success() || failure() - run: | - dist/bin/build_disk_index --data_type float --dist_fn l2 --data_path data/rand_float_10D_10K_norm1.0.bin --index_path_prefix data/disk_index_l2_rand_float_10D_10K_norm1.0_diskfull_oneshot_buildpq5 -R 16 -L 32 -B 0.00003 -M 1 --build_PQ_bytes 5 - dist/bin/search_disk_index --data_type float --dist_fn l2 --fail_if_recall_below 70 --index_path_prefix data/disk_index_l2_rand_float_10D_10K_norm1.0_diskfull_oneshot_buildpq5 --result_path /tmp/res --query_file data/rand_float_10D_1K_norm1.0.bin --gt_file data/l2_rand_float_10D_10K_norm1.0_10D_1K_norm1.0_gt100 --recall_at 5 -L 5 12 -W 2 --num_nodes_to_cache 10 -T 16 - - name: build and search disk index (one shot graph build, L2, no diskPQ, build with PQ distance comparisons) (int8) - if: success() || failure() - run: | - dist/bin/build_disk_index --data_type int8 --dist_fn l2 --data_path data/rand_int8_10D_10K_norm50.0.bin --index_path_prefix data/disk_index_l2_rand_int8_10D_10K_norm50.0_diskfull_oneshot_buildpq5 -R 16 -L 32 -B 0.00003 -M 1 --build_PQ_bytes 5 - dist/bin/search_disk_index --data_type int8 --dist_fn l2 --fail_if_recall_below 70 --index_path_prefix data/disk_index_l2_rand_int8_10D_10K_norm50.0_diskfull_oneshot_buildpq5 --result_path /tmp/res --query_file data/rand_int8_10D_1K_norm50.0.bin --gt_file data/l2_rand_int8_10D_10K_norm50.0_10D_1K_norm50.0_gt100 --recall_at 5 -L 5 12 -W 2 --num_nodes_to_cache 10 -T 16\ - - name: build and search disk index (one shot graph build, L2, no diskPQ, build with PQ distance comparisons) (uint8) - if: success() || failure() - run: | - dist/bin/build_disk_index --data_type uint8 --dist_fn l2 --data_path data/rand_uint8_10D_10K_norm50.0.bin --index_path_prefix data/disk_index_l2_rand_uint8_10D_10K_norm50.0_diskfull_oneshot_buildpq5 -R 16 -L 32 -B 0.00003 -M 1 --build_PQ_bytes 5 - dist/bin/search_disk_index --data_type uint8 --dist_fn l2 --fail_if_recall_below 70 --index_path_prefix data/disk_index_l2_rand_uint8_10D_10K_norm50.0_diskfull_oneshot_buildpq5 --result_path /tmp/res --query_file data/rand_uint8_10D_1K_norm50.0.bin --gt_file data/l2_rand_uint8_10D_10K_norm50.0_10D_1K_norm50.0_gt100 --recall_at 5 -L 5 12 -W 2 --num_nodes_to_cache 10 -T 16 - - - name: build and search disk index (sharded graph build, L2, no diskPQ) (float) - if: success() || failure() - run: | - dist/bin/build_disk_index --data_type float --dist_fn l2 --data_path data/rand_float_10D_10K_norm1.0.bin --index_path_prefix data/disk_index_l2_rand_float_10D_10K_norm1.0_diskfull_sharded -R 16 -L 32 -B 0.00003 -M 0.00006 - dist/bin/search_disk_index --data_type float --dist_fn l2 --fail_if_recall_below 70 --index_path_prefix data/disk_index_l2_rand_float_10D_10K_norm1.0_diskfull_sharded --result_path /tmp/res --query_file data/rand_float_10D_1K_norm1.0.bin --gt_file data/l2_rand_float_10D_10K_norm1.0_10D_1K_norm1.0_gt100 --recall_at 5 -L 5 12 -W 2 --num_nodes_to_cache 10 -T 16 - - name: build and search disk index (sharded graph build, cosine, no diskPQ) (float) - if: success() || failure() - run: | - dist/bin/build_disk_index --data_type float --dist_fn cosine --data_path data/rand_float_10D_10K_unnorm.bin --index_path_prefix data/disk_index_cosine_rand_float_10D_10K_unnorm_diskfull_sharded -R 16 -L 32 -B 0.00003 -M 0.00006 - dist/bin/search_disk_index --data_type float --dist_fn cosine --fail_if_recall_below 70 --index_path_prefix data/disk_index_cosine_rand_float_10D_10K_unnorm_diskfull_sharded --result_path /tmp/res --query_file data/rand_float_10D_1K_unnorm.bin --gt_file data/cosine_rand_float_10D_10K_unnorm_10D_1K_unnorm_gt100 --recall_at 5 -L 5 12 -W 2 --num_nodes_to_cache 10 -T 16 - - name: build and search disk index (sharded graph build, L2, no diskPQ) (int8) - run: | - dist/bin/build_disk_index --data_type int8 --dist_fn l2 --data_path data/rand_int8_10D_10K_norm50.0.bin --index_path_prefix data/disk_index_l2_rand_int8_10D_10K_norm50.0_diskfull_sharded -R 16 -L 32 -B 0.00003 -M 0.00006 - dist/bin/search_disk_index --data_type int8 --dist_fn l2 --fail_if_recall_below 70 --index_path_prefix data/disk_index_l2_rand_int8_10D_10K_norm50.0_diskfull_sharded --result_path /tmp/res --query_file data/rand_int8_10D_1K_norm50.0.bin --gt_file data/l2_rand_int8_10D_10K_norm50.0_10D_1K_norm50.0_gt100 --recall_at 5 -L 5 12 -W 2 --num_nodes_to_cache 10 -T 16 - - name: build and search disk index (sharded graph build, L2, no diskPQ) (uint8) - if: success() || failure() - run: | - dist/bin/build_disk_index --data_type uint8 --dist_fn l2 --data_path data/rand_uint8_10D_10K_norm50.0.bin --index_path_prefix data/disk_index_l2_rand_uint8_10D_10K_norm50.0_diskfull_sharded -R 16 -L 32 -B 0.00003 -M 0.00006 - dist/bin/search_disk_index --data_type uint8 --dist_fn l2 --fail_if_recall_below 70 --index_path_prefix data/disk_index_l2_rand_uint8_10D_10K_norm50.0_diskfull_sharded --result_path /tmp/res --query_file data/rand_uint8_10D_1K_norm50.0.bin --gt_file data/l2_rand_uint8_10D_10K_norm50.0_10D_1K_norm50.0_gt100 --recall_at 5 -L 5 12 -W 2 --num_nodes_to_cache 10 -T 16 - - - name: build and search disk index (one shot graph build, L2, diskPQ) (float) - if: success() || failure() - run: | - dist/bin/build_disk_index --data_type float --dist_fn l2 --data_path data/rand_float_10D_10K_norm1.0.bin --index_path_prefix data/disk_index_l2_rand_float_10D_10K_norm1.0_diskpq_oneshot -R 16 -L 32 -B 0.00003 -M 1 --PQ_disk_bytes 5 - dist/bin/search_disk_index --data_type float --dist_fn l2 --fail_if_recall_below 70 --index_path_prefix data/disk_index_l2_rand_float_10D_10K_norm1.0_diskpq_oneshot --result_path /tmp/res --query_file data/rand_float_10D_1K_norm1.0.bin --gt_file data/l2_rand_float_10D_10K_norm1.0_10D_1K_norm1.0_gt100 --recall_at 5 -L 5 12 -W 2 --num_nodes_to_cache 10 -T 16 - - name: build and search disk index (one shot graph build, L2, diskPQ) (int8) - if: success() || failure() - run: | - dist/bin/build_disk_index --data_type int8 --dist_fn l2 --data_path data/rand_int8_10D_10K_norm50.0.bin --index_path_prefix data/disk_index_l2_rand_int8_10D_10K_norm50.0_diskpq_oneshot -R 16 -L 32 -B 0.00003 -M 1 --PQ_disk_bytes 5 - dist/bin/search_disk_index --data_type int8 --dist_fn l2 --fail_if_recall_below 70 --index_path_prefix data/disk_index_l2_rand_int8_10D_10K_norm50.0_diskpq_oneshot --result_path /tmp/res --query_file data/rand_int8_10D_1K_norm50.0.bin --gt_file data/l2_rand_int8_10D_10K_norm50.0_10D_1K_norm50.0_gt100 --recall_at 5 -L 5 12 -W 2 --num_nodes_to_cache 10 -T 16 - - name: build and search disk index (one shot graph build, L2, diskPQ) (uint8) - if: success() || failure() - run: | - dist/bin/build_disk_index --data_type uint8 --dist_fn l2 --data_path data/rand_uint8_10D_10K_norm50.0.bin --index_path_prefix data/disk_index_l2_rand_uint8_10D_10K_norm50.0_diskpq_oneshot -R 16 -L 32 -B 0.00003 -M 1 --PQ_disk_bytes 5 - dist/bin/search_disk_index --data_type uint8 --dist_fn l2 --fail_if_recall_below 70 --index_path_prefix data/disk_index_l2_rand_uint8_10D_10K_norm50.0_diskpq_oneshot --result_path /tmp/res --query_file data/rand_uint8_10D_1K_norm50.0.bin --gt_file data/l2_rand_uint8_10D_10K_norm50.0_10D_1K_norm50.0_gt100 --recall_at 5 -L 5 12 -W 2 --num_nodes_to_cache 10 -T 16 - - - name: build and search disk index (sharded graph build, MIPS, diskPQ) (float) - if: success() || failure() - run: | - dist/bin/build_disk_index --data_type float --dist_fn mips --data_path data/rand_float_10D_10K_norm1.0.bin --index_path_prefix data/disk_index_mips_rand_float_10D_10K_norm1.0_diskpq_sharded -R 16 -L 32 -B 0.00003 -M 0.00006 --PQ_disk_bytes 5 - dist/bin/search_disk_index --data_type float --dist_fn l2 --fail_if_recall_below 70 --index_path_prefix data/disk_index_mips_rand_float_10D_10K_norm1.0_diskpq_sharded --result_path /tmp/res --query_file data/rand_float_10D_1K_norm1.0.bin --gt_file data/mips_rand_float_10D_10K_norm1.0_10D_1K_norm1.0_gt100 --recall_at 5 -L 5 12 -W 2 --num_nodes_to_cache 10 -T 16 - - - name: upload data and bin - uses: actions/upload-artifact@v4 - with: - name: disk-pq-${{matrix.os}} - path: | - ./dist/** - ./data/** diff --git a/packages/leann-backend-diskann/third_party/DiskANN/.github/workflows/dynamic-labels.yml b/packages/leann-backend-diskann/third_party/DiskANN/.github/workflows/dynamic-labels.yml deleted file mode 100644 index d5dc712..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/.github/workflows/dynamic-labels.yml +++ /dev/null @@ -1,102 +0,0 @@ -name: Dynamic-Labels -on: [workflow_call] -jobs: - acceptance-tests-dynamic: - name: Dynamic-Labels - strategy: - fail-fast: false - matrix: - os: [ubuntu-latest, windows-2019, windows-latest] - runs-on: ${{matrix.os}} - defaults: - run: - shell: bash - steps: - - name: Checkout repository - if: ${{ runner.os == 'Linux' }} - uses: actions/checkout@v3 - with: - fetch-depth: 1 - - name: Checkout repository - if: ${{ runner.os == 'Windows' }} - uses: actions/checkout@v3 - with: - fetch-depth: 1 - submodules: true - - name: DiskANN Build CLI Applications - uses: ./.github/actions/build - - - name: Generate Data - uses: ./.github/actions/generate-random - - - name: Generate Labels - run: | - echo "Generating synthetic labels and computing ground truth for filtered search with universal label" - dist/bin/generate_synthetic_labels --num_labels 50 --num_points 10000 --output_file data/rand_labels_50_10K.txt --distribution_type random - - echo "Generating synthetic labels with a zipf distribution and computing ground truth for filtered search with universal label" - dist/bin/generate_synthetic_labels --num_labels 50 --num_points 10000 --output_file data/zipf_labels_50_10K.txt --distribution_type zipf - - - name: Test a streaming index (float) with labels (Zipf distributed) - run: | - dist/bin/test_streaming_scenario --data_type float --dist_fn l2 --data_path data/rand_float_10D_10K_norm1.0.bin --universal_label 0 --label_file data/zipf_labels_50_10K.txt --index_path_prefix data/index_zipf_stream -R 64 --FilteredLbuild 200 -L 50 --alpha 1.2 --insert_threads 8 --consolidate_threads 8 --max_points_to_insert 10000 --active_window 4000 --consolidate_interval 2000 --start_point_norm 3.2 --unique_labels_supported 51 - - echo "Computing groundtruth with filter" - dist/bin/compute_groundtruth_for_filters --data_type float --universal_label 0 --filter_label 1 --dist_fn l2 --base_file data/index_zipf_stream.after-streaming-act4000-cons2000-max10000.data --query_file data/rand_float_10D_1K_norm1.0.bin --K 100 --gt_file data/gt100_zipf_base-act4000-cons2000-max10000_1 --label_file data/index_zipf_stream.after-streaming-act4000-cons2000-max10000_raw_labels.txt --tags_file data/index_zipf_stream.after-streaming-act4000-cons2000-max10000.tags - echo "Searching with filter" - dist/bin/search_memory_index --data_type float --dist_fn l2 --filter_label 1 --fail_if_recall_below 40 --index_path_prefix data/index_zipf_stream.after-streaming-act4000-cons2000-max10000 --result_path data/res_stream --query_file data/rand_float_10D_1K_norm1.0.bin --gt_file data/gt100_zipf_base-act4000-cons2000-max10000_1 -K 10 -L 20 40 60 80 100 150 -T 64 --dynamic true --tags 1 - - echo "Computing groundtruth w/o filter" - dist/bin/compute_groundtruth --data_type float --dist_fn l2 --base_file data/index_zipf_stream.after-streaming-act4000-cons2000-max10000.data --query_file data/rand_float_10D_1K_norm1.0.bin --K 100 --gt_file data/gt100_zipf_base-act4000-cons2000-max10000 - echo "Searching without filter" - dist/bin/search_memory_index --data_type float --dist_fn l2 --fail_if_recall_below 70 --index_path_prefix data/index_zipf_stream.after-streaming-act4000-cons2000-max10000 --result_path res_stream --query_file data/rand_float_10D_1K_norm1.0.bin --gt_file data/gt100_zipf_base-act4000-cons2000-max10000 -K 10 -L 20 40 60 80 100 -T 64 - - - name: Test a streaming index (float) with labels (random distributed) - run: | - dist/bin/test_streaming_scenario --data_type float --dist_fn l2 --data_path data/rand_float_10D_10K_norm1.0.bin --universal_label 0 --label_file data/rand_labels_50_10K.txt --index_path_prefix data/index_rand_stream -R 64 --FilteredLbuild 200 -L 50 --alpha 1.2 --insert_threads 8 --consolidate_threads 8 --max_points_to_insert 10000 --active_window 4000 --consolidate_interval 2000 --start_point_norm 3.2 --unique_labels_supported 51 - - echo "Computing groundtruth with filter" - dist/bin/compute_groundtruth_for_filters --data_type float --universal_label 0 --filter_label 1 --dist_fn l2 --base_file data/index_rand_stream.after-streaming-act4000-cons2000-max10000.data --query_file data/rand_float_10D_1K_norm1.0.bin --K 100 --gt_file data/gt100_rand_base-act4000-cons2000-max10000_1 --label_file data/index_rand_stream.after-streaming-act4000-cons2000-max10000_raw_labels.txt --tags_file data/index_rand_stream.after-streaming-act4000-cons2000-max10000.tags - echo "Searching with filter" - dist/bin/search_memory_index --data_type float --dist_fn l2 --filter_label 1 --fail_if_recall_below 40 --index_path_prefix data/index_rand_stream.after-streaming-act4000-cons2000-max10000 --result_path data/res_stream --query_file data/rand_float_10D_1K_norm1.0.bin --gt_file data/gt100_rand_base-act4000-cons2000-max10000_1 -K 10 -L 20 40 60 80 100 150 -T 64 --dynamic true --tags 1 - - echo "Computing groundtruth w/o filter" - dist/bin/compute_groundtruth --data_type float --dist_fn l2 --base_file data/index_rand_stream.after-streaming-act4000-cons2000-max10000.data --query_file data/rand_float_10D_1K_norm1.0.bin --K 100 --gt_file data/gt100_rand_base-act4000-cons2000-max10000 - echo "Searching without filter" - dist/bin/search_memory_index --data_type float --dist_fn l2 --fail_if_recall_below 70 --index_path_prefix data/index_rand_stream.after-streaming-act4000-cons2000-max10000 --result_path res_stream --query_file data/rand_float_10D_1K_norm1.0.bin --gt_file data/gt100_rand_base-act4000-cons2000-max10000 -K 10 -L 20 40 60 80 100 -T 64 - - - name: Test Insert Delete Consolidate (float) with labels (zipf distributed) - run: | - dist/bin/test_insert_deletes_consolidate --data_type float --dist_fn l2 --universal_label 0 --label_file data/zipf_labels_50_10K.txt --FilteredLbuild 70 --data_path data/rand_float_10D_10K_norm1.0.bin --index_path_prefix data/index_zipf_ins_del -R 64 -L 10 --alpha 1.2 --points_to_skip 0 --max_points_to_insert 7500 --beginning_index_size 0 --points_per_checkpoint 1000 --checkpoints_per_snapshot 0 --points_to_delete_from_beginning 2500 --start_deletes_after 5000 --do_concurrent true --start_point_norm 3.2 --unique_labels_supported 51 - - echo "Computing groundtruth with filter" - dist/bin/compute_groundtruth_for_filters --data_type float --filter_label 5 --universal_label 0 --dist_fn l2 --base_file data/index_zipf_ins_del.after-concurrent-delete-del2500-7500.data --query_file data/rand_float_10D_1K_norm1.0.bin --K 100 --gt_file data/gt100_zipf_random10D_1K_wlabel_5 --label_file data/index_zipf_ins_del.after-concurrent-delete-del2500-7500_raw_labels.txt --tags_file data/index_zipf_ins_del.after-concurrent-delete-del2500-7500.tags - echo "Searching with filter" - dist/bin/search_memory_index --data_type float --dist_fn l2 --filter_label 5 --fail_if_recall_below 10 --index_path_prefix data/index_zipf_ins_del.after-concurrent-delete-del2500-7500 --result_path data/res_zipf_stream --query_file data/rand_float_10D_1K_norm1.0.bin --gt_file data/gt100_zipf_random10D_1K_wlabel_5 -K 10 -L 20 40 60 80 100 150 -T 64 --dynamic true --tags 1 - - echo "Computing groundtruth w/o filter" - dist/bin/compute_groundtruth --data_type float --dist_fn l2 --base_file data/index_zipf_ins_del.after-concurrent-delete-del2500-7500.data --query_file data/rand_float_10D_1K_norm1.0.bin --K 100 --gt_file data/gt100_zipf_random10D_1K - echo "Searching without filter" - dist/bin/search_memory_index --data_type float --dist_fn l2 --fail_if_recall_below 70 --index_path_prefix data/index_zipf_ins_del.after-concurrent-delete-del2500-7500 --result_path res_stream --query_file data/rand_float_10D_1K_norm1.0.bin --gt_file data/gt100_zipf_random10D_1K -K 10 -L 20 40 60 80 100 -T 64 - - - name: Test Insert Delete Consolidate (float) with labels (random distributed) - run: | - dist/bin/test_insert_deletes_consolidate --data_type float --dist_fn l2 --universal_label 0 --label_file data/rand_labels_50_10K.txt --FilteredLbuild 70 --data_path data/rand_float_10D_10K_norm1.0.bin --index_path_prefix data/index_rand_ins_del -R 64 -L 10 --alpha 1.2 --points_to_skip 0 --max_points_to_insert 7500 --beginning_index_size 0 --points_per_checkpoint 1000 --checkpoints_per_snapshot 0 --points_to_delete_from_beginning 2500 --start_deletes_after 5000 --do_concurrent true --start_point_norm 3.2 --unique_labels_supported 51 - - echo "Computing groundtruth with filter" - dist/bin/compute_groundtruth_for_filters --data_type float --filter_label 5 --universal_label 0 --dist_fn l2 --base_file data/index_rand_ins_del.after-concurrent-delete-del2500-7500.data --query_file data/rand_float_10D_1K_norm1.0.bin --K 100 --gt_file data/gt100_rand_random10D_1K_wlabel_5 --label_file data/index_rand_ins_del.after-concurrent-delete-del2500-7500_raw_labels.txt --tags_file data/index_rand_ins_del.after-concurrent-delete-del2500-7500.tags - echo "Searching with filter" - dist/bin/search_memory_index --data_type float --dist_fn l2 --filter_label 5 --fail_if_recall_below 40 --index_path_prefix data/index_rand_ins_del.after-concurrent-delete-del2500-7500 --result_path data/res_rand_stream --query_file data/rand_float_10D_1K_norm1.0.bin --gt_file data/gt100_rand_random10D_1K_wlabel_5 -K 10 -L 20 40 60 80 100 150 -T 64 --dynamic true --tags 1 - - echo "Computing groundtruth w/o filter" - dist/bin/compute_groundtruth --data_type float --dist_fn l2 --base_file data/index_rand_ins_del.after-concurrent-delete-del2500-7500.data --query_file data/rand_float_10D_1K_norm1.0.bin --K 100 --gt_file data/gt100_rand_random10D_1K - echo "Searching without filter" - dist/bin/search_memory_index --data_type float --dist_fn l2 --fail_if_recall_below 70 --index_path_prefix data/index_rand_ins_del.after-concurrent-delete-del2500-7500 --result_path res_stream --query_file data/rand_float_10D_1K_norm1.0.bin --gt_file data/gt100_rand_random10D_1K -K 10 -L 20 40 60 80 100 -T 64 - - - name: upload data and bin - uses: actions/upload-artifact@v4 - with: - name: dynamic-labels-${{matrix.os}} - path: | - ./dist/** - ./data/** diff --git a/packages/leann-backend-diskann/third_party/DiskANN/.github/workflows/dynamic.yml b/packages/leann-backend-diskann/third_party/DiskANN/.github/workflows/dynamic.yml deleted file mode 100644 index edd691e..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/.github/workflows/dynamic.yml +++ /dev/null @@ -1,75 +0,0 @@ -name: Dynamic -on: [workflow_call] -jobs: - acceptance-tests-dynamic: - name: Dynamic - strategy: - fail-fast: false - matrix: - os: [ubuntu-latest, windows-2019, windows-latest] - runs-on: ${{matrix.os}} - defaults: - run: - shell: bash - steps: - - name: Checkout repository - if: ${{ runner.os == 'Linux' }} - uses: actions/checkout@v3 - with: - fetch-depth: 1 - - name: Checkout repository - if: ${{ runner.os == 'Windows' }} - uses: actions/checkout@v3 - with: - fetch-depth: 1 - submodules: true - - name: DiskANN Build CLI Applications - uses: ./.github/actions/build - - - name: Generate Data - uses: ./.github/actions/generate-random - - - name: test a streaming index (float) - run: | - dist/bin/test_streaming_scenario --data_type float --dist_fn l2 --data_path data/rand_float_10D_10K_norm1.0.bin --index_path_prefix data/index_stream -R 64 -L 600 --alpha 1.2 --insert_threads 4 --consolidate_threads 4 --max_points_to_insert 10000 --active_window 4000 --consolidate_interval 2000 --start_point_norm 3.2 - dist/bin/compute_groundtruth --data_type float --dist_fn l2 --base_file data/index_stream.after-streaming-act4000-cons2000-max10000.data --query_file data/rand_float_10D_1K_norm1.0.bin --K 100 --gt_file data/gt100_base-act4000-cons2000-max10000 --tags_file data/index_stream.after-streaming-act4000-cons2000-max10000.tags - dist/bin/search_memory_index --data_type float --dist_fn l2 --fail_if_recall_below 70 --index_path_prefix data/index_stream.after-streaming-act4000-cons2000-max10000 --result_path data/res_stream --query_file data/rand_float_10D_1K_norm1.0.bin --gt_file data/gt100_base-act4000-cons2000-max10000 -K 10 -L 20 40 60 80 100 -T 64 --dynamic true --tags 1 - - name: test a streaming index (int8) - if: success() || failure() - run: | - dist/bin/test_streaming_scenario --data_type int8 --dist_fn l2 --data_path data/rand_int8_10D_10K_norm50.0.bin --index_path_prefix data/index_stream -R 64 -L 600 --alpha 1.2 --insert_threads 4 --consolidate_threads 4 --max_points_to_insert 10000 --active_window 4000 --consolidate_interval 2000 --start_point_norm 200 - dist/bin/compute_groundtruth --data_type int8 --dist_fn l2 --base_file data/index_stream.after-streaming-act4000-cons2000-max10000.data --query_file data/rand_int8_10D_1K_norm50.0.bin --K 100 --gt_file data/gt100_base-act4000-cons2000-max10000 --tags_file data/index_stream.after-streaming-act4000-cons2000-max10000.tags - dist/bin/search_memory_index --data_type int8 --dist_fn l2 --fail_if_recall_below 70 --index_path_prefix data/index_stream.after-streaming-act4000-cons2000-max10000 --result_path res_stream --query_file data/rand_int8_10D_1K_norm50.0.bin --gt_file data/gt100_base-act4000-cons2000-max10000 -K 10 -L 20 40 60 80 100 -T 64 --dynamic true --tags 1 - - name: test a streaming index - if: success() || failure() - run: | - dist/bin/test_streaming_scenario --data_type uint8 --dist_fn l2 --data_path data/rand_uint8_10D_10K_norm50.0.bin --index_path_prefix data/index_stream -R 64 -L 600 --alpha 1.2 --insert_threads 4 --consolidate_threads 4 --max_points_to_insert 10000 --active_window 4000 --consolidate_interval 2000 --start_point_norm 200 - dist/bin/compute_groundtruth --data_type uint8 --dist_fn l2 --base_file data/index_stream.after-streaming-act4000-cons2000-max10000.data --query_file data/rand_uint8_10D_1K_norm50.0.bin --K 100 --gt_file data/gt100_base-act4000-cons2000-max10000 --tags_file data/index_stream.after-streaming-act4000-cons2000-max10000.tags - dist/bin/search_memory_index --data_type uint8 --dist_fn l2 --fail_if_recall_below 70 --index_path_prefix data/index_stream.after-streaming-act4000-cons2000-max10000 --result_path data/res_stream --query_file data/rand_uint8_10D_1K_norm50.0.bin --gt_file data/gt100_base-act4000-cons2000-max10000 -K 10 -L 20 40 60 80 100 -T 64 --dynamic true --tags 1 - - - name: build and search an incremental index (float) - if: success() || failure() - run: | - dist/bin/test_insert_deletes_consolidate --data_type float --dist_fn l2 --data_path data/rand_float_10D_10K_norm1.0.bin --index_path_prefix data/index_ins_del -R 64 -L 300 --alpha 1.2 -T 8 --points_to_skip 0 --max_points_to_insert 7500 --beginning_index_size 0 --points_per_checkpoint 1000 --checkpoints_per_snapshot 0 --points_to_delete_from_beginning 2500 --start_deletes_after 5000 --do_concurrent true --start_point_norm 3.2; - dist/bin/compute_groundtruth --data_type float --dist_fn l2 --base_file data/index_ins_del.after-concurrent-delete-del2500-7500.data --query_file data/rand_float_10D_1K_norm1.0.bin --K 100 --gt_file data/gt100_random10D_1K-conc-2500-7500 --tags_file data/index_ins_del.after-concurrent-delete-del2500-7500.tags - dist/bin/search_memory_index --data_type float --dist_fn l2 --fail_if_recall_below 70 --index_path_prefix data/index_ins_del.after-concurrent-delete-del2500-7500 --result_path data/res_ins_del --query_file data/rand_float_10D_1K_norm1.0.bin --gt_file data/gt100_random10D_1K-conc-2500-7500 -K 10 -L 20 40 60 80 100 -T 8 --dynamic true --tags 1 - - name: build and search an incremental index (int8) - if: success() || failure() - run: | - dist/bin/test_insert_deletes_consolidate --data_type int8 --dist_fn l2 --data_path data/rand_int8_10D_10K_norm50.0.bin --index_path_prefix data/index_ins_del -R 64 -L 300 --alpha 1.2 -T 8 --points_to_skip 0 --max_points_to_insert 7500 --beginning_index_size 0 --points_per_checkpoint 1000 --checkpoints_per_snapshot 0 --points_to_delete_from_beginning 2500 --start_deletes_after 5000 --do_concurrent true --start_point_norm 200 - dist/bin/compute_groundtruth --data_type int8 --dist_fn l2 --base_file data/index_ins_del.after-concurrent-delete-del2500-7500.data --query_file data/rand_int8_10D_1K_norm50.0.bin --K 100 --gt_file data/gt100_random10D_1K-conc-2500-7500 --tags_file data/index_ins_del.after-concurrent-delete-del2500-7500.tags - dist/bin/search_memory_index --data_type int8 --dist_fn l2 --fail_if_recall_below 70 --index_path_prefix data/index_ins_del.after-concurrent-delete-del2500-7500 --result_path data/res_ins_del --query_file data/rand_int8_10D_1K_norm50.0.bin --gt_file data/gt100_random10D_1K-conc-2500-7500 -K 10 -L 20 40 60 80 100 -T 8 --dynamic true --tags 1 - - name: build and search an incremental index (uint8) - if: success() || failure() - run: | - dist/bin/test_insert_deletes_consolidate --data_type uint8 --dist_fn l2 --data_path data/rand_uint8_10D_10K_norm50.0.bin --index_path_prefix data/index_ins_del -R 64 -L 300 --alpha 1.2 -T 8 --points_to_skip 0 --max_points_to_insert 7500 --beginning_index_size 0 --points_per_checkpoint 1000 --checkpoints_per_snapshot 0 --points_to_delete_from_beginning 2500 --start_deletes_after 5000 --do_concurrent true --start_point_norm 200 - dist/bin/compute_groundtruth --data_type uint8 --dist_fn l2 --base_file data/index_ins_del.after-concurrent-delete-del2500-7500.data --query_file data/rand_uint8_10D_1K_norm50.0.bin --K 100 --gt_file data/gt100_random10D_10K-conc-2500-7500 --tags_file data/index_ins_del.after-concurrent-delete-del2500-7500.tags - dist/bin/search_memory_index --data_type uint8 --dist_fn l2 --fail_if_recall_below 70 --index_path_prefix data/index_ins_del.after-concurrent-delete-del2500-7500 --result_path data/res_ins_del --query_file data/rand_uint8_10D_1K_norm50.0.bin --gt_file data/gt100_random10D_10K-conc-2500-7500 -K 10 -L 20 40 60 80 100 -T 8 --dynamic true --tags 1 - - - name: upload data and bin - uses: actions/upload-artifact@v4 - with: - name: dynamic-${{matrix.os}} - path: | - ./dist/** - ./data/** diff --git a/packages/leann-backend-diskann/third_party/DiskANN/.github/workflows/in-mem-no-pq.yml b/packages/leann-backend-diskann/third_party/DiskANN/.github/workflows/in-mem-no-pq.yml deleted file mode 100644 index 07fc4a2..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/.github/workflows/in-mem-no-pq.yml +++ /dev/null @@ -1,81 +0,0 @@ -name: In-Memory Without PQ -on: [workflow_call] -jobs: - acceptance-tests-mem-no-pq: - name: In-Mem, Without PQ - strategy: - fail-fast: false - matrix: - os: [ubuntu-latest, windows-2019, windows-latest] - runs-on: ${{matrix.os}} - defaults: - run: - shell: bash - steps: - - name: Checkout repository - if: ${{ runner.os == 'Linux' }} - uses: actions/checkout@v3 - with: - fetch-depth: 1 - - name: Checkout repository - if: ${{ runner.os == 'Windows' }} - uses: actions/checkout@v3 - with: - fetch-depth: 1 - submodules: true - - name: DiskANN Build CLI Applications - uses: ./.github/actions/build - - - name: Generate Data - uses: ./.github/actions/generate-random - - - name: build and search in-memory index with L2 metrics (float) - if: success() || failure() - run: | - dist/bin/build_memory_index --data_type float --dist_fn l2 --data_path data/rand_float_10D_10K_norm1.0.bin --index_path_prefix data/index_l2_rand_float_10D_10K_norm1.0 - dist/bin/search_memory_index --data_type float --dist_fn l2 --fail_if_recall_below 70 --index_path_prefix data/index_l2_rand_float_10D_10K_norm1.0 --query_file data/rand_float_10D_1K_norm1.0.bin --recall_at 10 --result_path temp --gt_file data/l2_rand_float_10D_10K_norm1.0_10D_1K_norm1.0_gt100 -L 16 32 - - name: build and search in-memory index with L2 metrics (int8) - if: success() || failure() - run: | - dist/bin/build_memory_index --data_type int8 --dist_fn l2 --data_path data/rand_int8_10D_10K_norm50.0.bin --index_path_prefix data/index_l2_rand_int8_10D_10K_norm50.0 - dist/bin/search_memory_index --data_type int8 --dist_fn l2 --fail_if_recall_below 70 --index_path_prefix data/index_l2_rand_int8_10D_10K_norm50.0 --query_file data/rand_int8_10D_1K_norm50.0.bin --recall_at 10 --result_path temp --gt_file data/l2_rand_int8_10D_10K_norm50.0_10D_1K_norm50.0_gt100 -L 16 32 - - name: build and search in-memory index with L2 metrics (uint8) - if: success() || failure() - run: | - dist/bin/build_memory_index --data_type uint8 --dist_fn l2 --data_path data/rand_uint8_10D_10K_norm50.0.bin --index_path_prefix data/index_l2_rand_uint8_10D_10K_norm50.0 - dist/bin/search_memory_index --data_type uint8 --dist_fn l2 --fail_if_recall_below 70 --index_path_prefix data/index_l2_rand_uint8_10D_10K_norm50.0 --query_file data/rand_uint8_10D_1K_norm50.0.bin --recall_at 10 --result_path temp --gt_file data/l2_rand_uint8_10D_10K_norm50.0_10D_1K_norm50.0_gt100 -L 16 32 - - - name: Searching with fast_l2 distance function (float) - if: runner.os != 'Windows' && (success() || failure()) - run: | - dist/bin/search_memory_index --data_type float --dist_fn fast_l2 --fail_if_recall_below 70 --index_path_prefix data/index_l2_rand_float_10D_10K_norm1.0 --query_file data/rand_float_10D_1K_norm1.0.bin --recall_at 10 --result_path temp --gt_file data/l2_rand_float_10D_10K_norm1.0_10D_1K_norm1.0_gt100 -L 16 32 - - - name: build and search in-memory index with MIPS metric (float) - if: success() || failure() - run: | - dist/bin/build_memory_index --data_type float --dist_fn mips --data_path data/rand_float_10D_10K_norm1.0.bin --index_path_prefix data/index_mips_rand_float_10D_10K_norm1.0 - dist/bin/search_memory_index --data_type float --dist_fn mips --fail_if_recall_below 70 --index_path_prefix data/index_l2_rand_float_10D_10K_norm1.0 --query_file data/rand_float_10D_1K_norm1.0.bin --recall_at 10 --result_path temp --gt_file data/mips_rand_float_10D_10K_norm1.0_10D_1K_norm1.0_gt100 -L 16 32 - - - name: build and search in-memory index with cosine metric (float) - if: success() || failure() - run: | - dist/bin/build_memory_index --data_type float --dist_fn cosine --data_path data/rand_float_10D_10K_norm1.0.bin --index_path_prefix data/index_cosine_rand_float_10D_10K_norm1.0 - dist/bin/search_memory_index --data_type float --dist_fn cosine --fail_if_recall_below 70 --index_path_prefix data/index_l2_rand_float_10D_10K_norm1.0 --query_file data/rand_float_10D_1K_norm1.0.bin --recall_at 10 --result_path temp --gt_file data/cosine_rand_float_10D_10K_norm1.0_10D_1K_norm1.0_gt100 -L 16 32 - - name: build and search in-memory index with cosine metric (int8) - if: success() || failure() - run: | - dist/bin/build_memory_index --data_type int8 --dist_fn cosine --data_path data/rand_int8_10D_10K_norm50.0.bin --index_path_prefix data/index_cosine_rand_int8_10D_10K_norm50.0 - dist/bin/search_memory_index --data_type int8 --dist_fn cosine --fail_if_recall_below 70 --index_path_prefix data/index_l2_rand_int8_10D_10K_norm50.0 --query_file data/rand_int8_10D_1K_norm50.0.bin --recall_at 10 --result_path temp --gt_file data/cosine_rand_int8_10D_10K_norm50.0_10D_1K_norm50.0_gt100 -L 16 32 - - name: build and search in-memory index with cosine metric - if: success() || failure() - run: | - dist/bin/build_memory_index --data_type uint8 --dist_fn cosine --data_path data/rand_uint8_10D_10K_norm50.0.bin --index_path_prefix data/index_cosine_rand_uint8_10D_10K_norm50.0 - dist/bin/search_memory_index --data_type uint8 --dist_fn cosine --fail_if_recall_below 70 --index_path_prefix data/index_l2_rand_uint8_10D_10K_norm50.0 --query_file data/rand_uint8_10D_1K_norm50.0.bin --recall_at 10 --result_path temp --gt_file data/cosine_rand_uint8_10D_10K_norm50.0_10D_1K_norm50.0_gt100 -L 16 32 - - - name: upload data and bin - uses: actions/upload-artifact@v4 - with: - name: in-memory-no-pq-${{matrix.os}} - path: | - ./dist/** - ./data/** diff --git a/packages/leann-backend-diskann/third_party/DiskANN/.github/workflows/in-mem-pq.yml b/packages/leann-backend-diskann/third_party/DiskANN/.github/workflows/in-mem-pq.yml deleted file mode 100644 index be20f10..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/.github/workflows/in-mem-pq.yml +++ /dev/null @@ -1,56 +0,0 @@ -name: In-Memory With PQ -on: [workflow_call] -jobs: - acceptance-tests-mem-pq: - name: In-Mem, PQ - strategy: - fail-fast: false - matrix: - os: [ubuntu-latest, windows-2019, windows-latest] - runs-on: ${{matrix.os}} - defaults: - run: - shell: bash - steps: - - name: Checkout repository - if: ${{ runner.os == 'Linux' }} - uses: actions/checkout@v3 - with: - fetch-depth: 1 - - name: Checkout repository - if: ${{ runner.os == 'Windows' }} - uses: actions/checkout@v3 - with: - fetch-depth: 1 - submodules: true - - name: DiskANN Build CLI Applications - uses: ./.github/actions/build - - - name: Generate Data - uses: ./.github/actions/generate-random - - - name: build and search in-memory index with L2 metric with PQ based distance comparisons (float) - if: success() || failure() - run: | - dist/bin/build_memory_index --data_type float --dist_fn l2 --data_path data/rand_float_10D_10K_norm1.0.bin --index_path_prefix data/index_l2_rand_float_10D_10K_norm1.0_buildpq5 --build_PQ_bytes 5 - dist/bin/search_memory_index --data_type float --dist_fn l2 --fail_if_recall_below 70 --index_path_prefix data/index_l2_rand_float_10D_10K_norm1.0_buildpq5 --query_file data/rand_float_10D_1K_norm1.0.bin --recall_at 10 --result_path temp --gt_file data/l2_rand_float_10D_10K_norm1.0_10D_1K_norm1.0_gt100 -L 16 32 - - - name: build and search in-memory index with L2 metrics with PQ base distance comparisons (int8) - if: success() || failure() - run: | - dist/bin/build_memory_index --data_type int8 --dist_fn l2 --data_path data/rand_int8_10D_10K_norm50.0.bin --index_path_prefix data/index_l2_rand_int8_10D_10K_norm50.0_buildpq5 --build_PQ_bytes 5 - dist/bin/search_memory_index --data_type int8 --dist_fn l2 --fail_if_recall_below 70 --index_path_prefix data/index_l2_rand_int8_10D_10K_norm50.0_buildpq5 --query_file data/rand_int8_10D_1K_norm50.0.bin --recall_at 10 --result_path temp --gt_file data/l2_rand_int8_10D_10K_norm50.0_10D_1K_norm50.0_gt100 -L 16 32 - - - name: build and search in-memory index with L2 metrics with PQ base distance comparisons (uint8) - if: success() || failure() - run: | - dist/bin/build_memory_index --data_type uint8 --dist_fn l2 --data_path data/rand_uint8_10D_10K_norm50.0.bin --index_path_prefix data/index_l2_rand_uint8_10D_10K_norm50.0_buildpq5 --build_PQ_bytes 5 - dist/bin/search_memory_index --data_type uint8 --dist_fn l2 --fail_if_recall_below 70 --index_path_prefix data/index_l2_rand_uint8_10D_10K_norm50.0_buildpq5 --query_file data/rand_uint8_10D_1K_norm50.0.bin --recall_at 10 --result_path temp --gt_file data/l2_rand_uint8_10D_10K_norm50.0_10D_1K_norm50.0_gt100 -L 16 32 - - - name: upload data and bin - uses: actions/upload-artifact@v4 - with: - name: in-memory-pq-${{matrix.os}} - path: | - ./dist/** - ./data/** \ No newline at end of file diff --git a/packages/leann-backend-diskann/third_party/DiskANN/.github/workflows/labels.yml b/packages/leann-backend-diskann/third_party/DiskANN/.github/workflows/labels.yml deleted file mode 100644 index 93995f7..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/.github/workflows/labels.yml +++ /dev/null @@ -1,120 +0,0 @@ -name: Labels -on: [workflow_call] -jobs: - acceptance-tests-labels: - name: Labels - strategy: - fail-fast: false - matrix: - os: [ubuntu-latest, windows-2019, windows-latest] - runs-on: ${{matrix.os}} - defaults: - run: - shell: bash - steps: - - name: Checkout repository - if: ${{ runner.os == 'Linux' }} - uses: actions/checkout@v3 - with: - fetch-depth: 1 - - name: Checkout repository - if: ${{ runner.os == 'Windows' }} - uses: actions/checkout@v3 - with: - fetch-depth: 1 - submodules: true - - name: DiskANN Build CLI Applications - uses: ./.github/actions/build - - - name: Generate Data - uses: ./.github/actions/generate-random - - - name: Generate Labels - run: | - echo "Generating synthetic labels and computing ground truth for filtered search with universal label" - dist/bin/generate_synthetic_labels --num_labels 50 --num_points 10000 --output_file data/rand_labels_50_10K.txt --distribution_type random - dist/bin/compute_groundtruth_for_filters --data_type uint8 --dist_fn l2 --universal_label 0 --filter_label 10 --base_file data/rand_uint8_10D_10K_norm50.0.bin --query_file data/rand_uint8_10D_1K_norm50.0.bin --label_file data/rand_labels_50_10K.txt --gt_file data/l2_rand_uint8_10D_10K_norm50.0_10D_1K_norm50.0_gt100_wlabel --K 100 - dist/bin/compute_groundtruth_for_filters --data_type uint8 --dist_fn mips --universal_label 0 --filter_label 10 --base_file data/rand_uint8_10D_10K_norm50.0.bin --query_file data/rand_uint8_10D_1K_norm50.0.bin --label_file data/rand_labels_50_10K.txt --gt_file data/mips_rand_uint8_10D_10K_norm50.0_10D_1K_norm50.0_gt100_wlabel --K 100 - dist/bin/compute_groundtruth_for_filters --data_type uint8 --dist_fn cosine --universal_label 0 --filter_label 10 --base_file data/rand_uint8_10D_10K_norm50.0.bin --query_file data/rand_uint8_10D_1K_norm50.0.bin --label_file data/rand_labels_50_10K.txt --gt_file data/cosine_rand_uint8_10D_10K_norm50.0_10D_1K_norm50.0_gt100_wlabel --K 100 - - echo "Generating synthetic labels with a zipf distribution and computing ground truth for filtered search with universal label" - dist/bin/generate_synthetic_labels --num_labels 50 --num_points 10000 --output_file data/zipf_labels_50_10K.txt --distribution_type zipf - dist/bin/compute_groundtruth_for_filters --data_type uint8 --dist_fn l2 --universal_label 0 --filter_label 5 --base_file data/rand_uint8_10D_10K_norm50.0.bin --query_file data/rand_uint8_10D_1K_norm50.0.bin --label_file data/zipf_labels_50_10K.txt --gt_file data/l2_zipf_uint8_10D_10K_norm50.0_10D_1K_norm50.0_gt100_wlabel --K 100 - dist/bin/compute_groundtruth_for_filters --data_type uint8 --dist_fn mips --universal_label 0 --filter_label 5 --base_file data/rand_uint8_10D_10K_norm50.0.bin --query_file data/rand_uint8_10D_1K_norm50.0.bin --label_file data/zipf_labels_50_10K.txt --gt_file data/mips_zipf_uint8_10D_10K_norm50.0_10D_1K_norm50.0_gt100_wlabel --K 100 - dist/bin/compute_groundtruth_for_filters --data_type uint8 --dist_fn cosine --universal_label 0 --filter_label 5 --base_file data/rand_uint8_10D_10K_norm50.0.bin --query_file data/rand_uint8_10D_1K_norm50.0.bin --label_file data/zipf_labels_50_10K.txt --gt_file data/cosine_zipf_uint8_10D_10K_norm50.0_10D_1K_norm50.0_gt100_wlabel --K 100 - - echo "Generating synthetic labels and computing ground truth for filtered search without a universal label" - dist/bin/compute_groundtruth_for_filters --data_type uint8 --dist_fn l2 --filter_label 5 --base_file data/rand_uint8_10D_10K_norm50.0.bin --query_file data/rand_uint8_10D_1K_norm50.0.bin --label_file data/zipf_labels_50_10K.txt --gt_file data/l2_zipf_uint8_10D_10K_norm50.0_10D_1K_norm50.0_gt100_wlabel_nouniversal --K 100 - dist/bin/generate_synthetic_labels --num_labels 10 --num_points 1000 --output_file data/query_labels_1K.txt --distribution_type one_per_point - dist/bin/compute_groundtruth_for_filters --data_type uint8 --dist_fn l2 --universal_label 0 --filter_label_file data/query_labels_1K.txt --base_file data/rand_uint8_10D_10K_norm50.0.bin --query_file data/rand_uint8_10D_1K_norm50.0.bin --label_file data/zipf_labels_50_10K.txt --gt_file data/combined_l2_zipf_uint8_10D_10K_norm50.0_10D_1K_norm50.0_gt100_wlabel --K 100 - - - name: build and search in-memory index with labels using L2 and Cosine metrics (random distributed labels) - if: success() || failure() - run: | - dist/bin/build_memory_index --data_type uint8 --dist_fn l2 --FilteredLbuild 90 --universal_label 0 --data_path data/rand_uint8_10D_10K_norm50.0.bin --label_file data/rand_labels_50_10K.txt --index_path_prefix data/index_l2_rand_uint8_10D_10K_norm50_wlabel - dist/bin/build_memory_index --data_type uint8 --dist_fn cosine --FilteredLbuild 90 --universal_label 0 --data_path data/rand_uint8_10D_10K_norm50.0.bin --label_file data/rand_labels_50_10K.txt --index_path_prefix data/index_cosine_rand_uint8_10D_10K_norm50_wlabel - dist/bin/search_memory_index --data_type uint8 --dist_fn l2 --filter_label 10 --fail_if_recall_below 70 --index_path_prefix data/index_l2_rand_uint8_10D_10K_norm50_wlabel --query_file data/rand_uint8_10D_1K_norm50.0.bin --recall_at 10 --result_path temp --gt_file data/l2_rand_uint8_10D_10K_norm50.0_10D_1K_norm50.0_gt100_wlabel -L 16 32 - dist/bin/search_memory_index --data_type uint8 --dist_fn cosine --filter_label 10 --fail_if_recall_below 70 --index_path_prefix data/index_cosine_rand_uint8_10D_10K_norm50_wlabel --query_file data/rand_uint8_10D_1K_norm50.0.bin --recall_at 10 --result_path temp --gt_file data/cosine_rand_uint8_10D_10K_norm50.0_10D_1K_norm50.0_gt100_wlabel -L 16 32 - - echo "Searching without filters" - dist/bin/search_memory_index --data_type uint8 --dist_fn l2 --fail_if_recall_below 70 --index_path_prefix data/index_l2_rand_uint8_10D_10K_norm50_wlabel --query_file data/rand_uint8_10D_1K_norm50.0.bin --recall_at 10 --result_path temp --gt_file data/l2_rand_uint8_10D_10K_norm50.0_10D_1K_norm50.0_gt100 -L 32 64 - dist/bin/search_memory_index --data_type uint8 --dist_fn cosine --fail_if_recall_below 70 --index_path_prefix data/index_cosine_rand_uint8_10D_10K_norm50_wlabel --query_file data/rand_uint8_10D_1K_norm50.0.bin --recall_at 10 --result_path temp --gt_file data/cosine_rand_uint8_10D_10K_norm50.0_10D_1K_norm50.0_gt100 -L 32 64 - - - name: build and search disk index with labels using L2 and Cosine metrics (random distributed labels) - if: success() || failure() - run: | - dist/bin/build_disk_index --data_type uint8 --dist_fn l2 --universal_label 0 --FilteredLbuild 90 --data_path data/rand_uint8_10D_10K_norm50.0.bin --label_file data/rand_labels_50_10K.txt --index_path_prefix data/disk_index_l2_rand_uint8_10D_10K_norm50_wlabel -R 32 -L 5 -B 0.00003 -M 1 - dist/bin/search_disk_index --data_type uint8 --dist_fn l2 --filter_label 10 --fail_if_recall_below 50 --index_path_prefix data/disk_index_l2_rand_uint8_10D_10K_norm50_wlabel --result_path temp --query_file data/rand_uint8_10D_1K_norm50.0.bin --gt_file data/l2_rand_uint8_10D_10K_norm50.0_10D_1K_norm50.0_gt100_wlabel --recall_at 5 -L 5 12 -W 2 --num_nodes_to_cache 10 -T 16 - - name: build and search in-memory index with labels using L2 and Cosine metrics (zipf distributed labels) - if: success() || failure() - run: | - dist/bin/build_memory_index --data_type uint8 --dist_fn l2 --FilteredLbuild 90 --universal_label 0 --data_path data/rand_uint8_10D_10K_norm50.0.bin --label_file data/zipf_labels_50_10K.txt --index_path_prefix data/index_l2_zipf_uint8_10D_10K_norm50_wlabel - dist/bin/build_memory_index --data_type uint8 --dist_fn cosine --FilteredLbuild 90 --universal_label 0 --data_path data/rand_uint8_10D_10K_norm50.0.bin --label_file data/zipf_labels_50_10K.txt --index_path_prefix data/index_cosine_zipf_uint8_10D_10K_norm50_wlabel - dist/bin/search_memory_index --data_type uint8 --dist_fn l2 --filter_label 5 --fail_if_recall_below 70 --index_path_prefix data/index_l2_zipf_uint8_10D_10K_norm50_wlabel --query_file data/rand_uint8_10D_1K_norm50.0.bin --recall_at 10 --result_path temp --gt_file data/l2_zipf_uint8_10D_10K_norm50.0_10D_1K_norm50.0_gt100_wlabel -L 16 32 - dist/bin/search_memory_index --data_type uint8 --dist_fn cosine --filter_label 5 --fail_if_recall_below 70 --index_path_prefix data/index_cosine_zipf_uint8_10D_10K_norm50_wlabel --query_file data/rand_uint8_10D_1K_norm50.0.bin --recall_at 10 --result_path temp --gt_file data/cosine_zipf_uint8_10D_10K_norm50.0_10D_1K_norm50.0_gt100_wlabel -L 16 32 - - echo "Searching without filters" - dist/bin/compute_groundtruth --data_type uint8 --dist_fn l2 --base_file data/rand_uint8_10D_10K_norm50.0.bin --query_file data/rand_uint8_10D_1K_norm50.0.bin --gt_file data/l2_zipf_uint8_10D_10K_norm50.0_10D_1K_norm50.0_gt100 --K 100 - dist/bin/compute_groundtruth --data_type uint8 --dist_fn cosine --base_file data/rand_uint8_10D_10K_norm50.0.bin --query_file data/rand_uint8_10D_1K_norm50.0.bin --gt_file data/cosine_zipf_uint8_10D_10K_norm50.0_10D_1K_norm50.0_gt100 --K 100 - dist/bin/search_memory_index --data_type uint8 --dist_fn l2 --fail_if_recall_below 70 --index_path_prefix data/index_l2_zipf_uint8_10D_10K_norm50_wlabel --query_file data/rand_uint8_10D_1K_norm50.0.bin --recall_at 10 --result_path temp --gt_file data/l2_zipf_uint8_10D_10K_norm50.0_10D_1K_norm50.0_gt100 -L 32 64 - dist/bin/search_memory_index --data_type uint8 --dist_fn cosine --fail_if_recall_below 70 --index_path_prefix data/index_cosine_zipf_uint8_10D_10K_norm50_wlabel --query_file data/rand_uint8_10D_1K_norm50.0.bin --recall_at 10 --result_path temp --gt_file data/cosine_zipf_uint8_10D_10K_norm50.0_10D_1K_norm50.0_gt100 -L 32 64 - - - name: build and search disk index with labels using L2 and Cosine metrics (zipf distributed labels) - if: success() || failure() - run: | - dist/bin/build_disk_index --data_type uint8 --dist_fn l2 --universal_label 0 --FilteredLbuild 90 --data_path data/rand_uint8_10D_10K_norm50.0.bin --label_file data/zipf_labels_50_10K.txt --index_path_prefix data/disk_index_l2_zipf_uint8_10D_10K_norm50_wlabel -R 32 -L 5 -B 0.00003 -M 1 - dist/bin/search_disk_index --data_type uint8 --dist_fn l2 --filter_label 5 --fail_if_recall_below 50 --index_path_prefix data/disk_index_l2_zipf_uint8_10D_10K_norm50_wlabel --result_path temp --query_file data/rand_uint8_10D_1K_norm50.0.bin --gt_file data/l2_zipf_uint8_10D_10K_norm50.0_10D_1K_norm50.0_gt100_wlabel --recall_at 5 -L 5 12 -W 2 --num_nodes_to_cache 10 -T 16 - - - name : build and search in-memory and disk index (without universal label, zipf distributed) - if: success() || failure() - run: | - dist/bin/build_memory_index --data_type uint8 --dist_fn l2 --FilteredLbuild 90 --data_path data/rand_uint8_10D_10K_norm50.0.bin --label_file data/zipf_labels_50_10K.txt --index_path_prefix data/index_l2_zipf_uint8_10D_10K_norm50_wlabel_nouniversal - dist/bin/build_disk_index --data_type uint8 --dist_fn l2 --FilteredLbuild 90 --data_path data/rand_uint8_10D_10K_norm50.0.bin --label_file data/zipf_labels_50_10K.txt --index_path_prefix data/disk_index_l2_zipf_uint8_10D_10K_norm50_wlabel_nouniversal -R 32 -L 5 -B 0.00003 -M 1 - dist/bin/search_memory_index --data_type uint8 --dist_fn l2 --filter_label 5 --fail_if_recall_below 70 --index_path_prefix data/index_l2_zipf_uint8_10D_10K_norm50_wlabel_nouniversal --query_file data/rand_uint8_10D_1K_norm50.0.bin --recall_at 10 --result_path temp --gt_file data/l2_zipf_uint8_10D_10K_norm50.0_10D_1K_norm50.0_gt100_wlabel_nouniversal -L 16 32 - dist/bin/search_disk_index --data_type uint8 --dist_fn l2 --filter_label 5 --index_path_prefix data/disk_index_l2_zipf_uint8_10D_10K_norm50_wlabel_nouniversal --result_path temp --query_file data/rand_uint8_10D_1K_norm50.0.bin --gt_file data/l2_zipf_uint8_10D_10K_norm50.0_10D_1K_norm50.0_gt100_wlabel_nouniversal --recall_at 5 -L 5 12 -W 2 --num_nodes_to_cache 10 -T 16 - - name: Generate combined GT for each query with a separate label and search - if: success() || failure() - run: | - dist/bin/build_memory_index --data_type uint8 --dist_fn l2 --FilteredLbuild 90 --universal_label 0 --data_path data/rand_uint8_10D_10K_norm50.0.bin --label_file data/zipf_labels_50_10K.txt --index_path_prefix data/index_l2_zipf_uint8_10D_10K_norm50_wlabel - dist/bin/search_memory_index --data_type uint8 --dist_fn l2 --query_filters_file data/query_labels_1K.txt --fail_if_recall_below 70 --index_path_prefix data/index_l2_zipf_uint8_10D_10K_norm50_wlabel --query_file data/rand_uint8_10D_1K_norm50.0.bin --recall_at 10 --result_path temp --gt_file data/combined_l2_zipf_uint8_10D_10K_norm50.0_10D_1K_norm50.0_gt100_wlabel -L 16 32 - - name: build and search in-memory index with pq_dist of 5 with 10 dimensions - if: success() || failure() - run: | - dist/bin/build_memory_index --data_type uint8 --dist_fn l2 --FilteredLbuild 90 --universal_label 0 --data_path data/rand_uint8_10D_10K_norm50.0.bin --label_file data/rand_labels_50_10K.txt --index_path_prefix data/index_l2_rand_uint8_10D_10K_norm50_wlabel --build_PQ_bytes 5 - dist/bin/search_memory_index --data_type uint8 --dist_fn l2 --filter_label 10 --fail_if_recall_below 70 --index_path_prefix data/index_l2_rand_uint8_10D_10K_norm50_wlabel --query_file data/rand_uint8_10D_1K_norm50.0.bin --recall_at 10 --result_path temp --gt_file data/l2_rand_uint8_10D_10K_norm50.0_10D_1K_norm50.0_gt100_wlabel -L 16 32 - - name: Build and search stitched vamana with random and zipf distributed labels - if: success() || failure() - run: | - dist/bin/build_stitched_index --num_threads 48 --data_type uint8 --data_path data/rand_uint8_10D_10K_norm50.0.bin --label_file data/rand_labels_50_10K.txt -R 32 -L 100 --alpha 1.2 --stitched_R 64 --index_path_prefix data/stit_rand_32_100_64_new --universal_label 0 - dist/bin/build_stitched_index --num_threads 48 --data_type uint8 --data_path data/rand_uint8_10D_10K_norm50.0.bin --label_file data/zipf_labels_50_10K.txt -R 32 -L 100 --alpha 1.2 --stitched_R 64 --index_path_prefix data/stit_zipf_32_100_64_new --universal_label 0 - dist/bin/search_memory_index --num_threads 48 --data_type uint8 --dist_fn l2 --filter_label 10 --index_path_prefix data/stit_rand_32_100_64_new --query_file data/rand_uint8_10D_1K_norm50.0.bin --result_path data/rand_stit_96_10_90_new --gt_file data/l2_rand_uint8_10D_10K_norm50.0_10D_1K_norm50.0_gt100_wlabel -K 10 -L 16 32 150 - dist/bin/search_memory_index --num_threads 48 --data_type uint8 --dist_fn l2 --filter_label 5 --index_path_prefix data/stit_zipf_32_100_64_new --query_file data/rand_uint8_10D_1K_norm50.0.bin --result_path data/zipf_stit_96_10_90_new --gt_file data/l2_zipf_uint8_10D_10K_norm50.0_10D_1K_norm50.0_gt100_wlabel -K 10 -L 16 32 150 - - - name: upload data and bin - if: success() || failure() - uses: actions/upload-artifact@v4 - with: - name: labels-${{matrix.os}} - path: | - ./dist/** - ./data/** diff --git a/packages/leann-backend-diskann/third_party/DiskANN/.github/workflows/multi-sector-disk-pq.yml b/packages/leann-backend-diskann/third_party/DiskANN/.github/workflows/multi-sector-disk-pq.yml deleted file mode 100644 index 969467a..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/.github/workflows/multi-sector-disk-pq.yml +++ /dev/null @@ -1,60 +0,0 @@ -name: Disk With PQ -on: [workflow_call] -jobs: - acceptance-tests-disk-pq: - name: Disk, PQ - strategy: - fail-fast: false - matrix: - os: [ubuntu-latest, windows-2019, windows-latest] - runs-on: ${{matrix.os}} - defaults: - run: - shell: bash - steps: - - name: Checkout repository - if: ${{ runner.os == 'Linux' }} - uses: actions/checkout@v3 - with: - fetch-depth: 1 - - name: Checkout repository - if: ${{ runner.os == 'Windows' }} - uses: actions/checkout@v3 - with: - fetch-depth: 1 - submodules: true - - name: DiskANN Build CLI Applications - uses: ./.github/actions/build - - - name: Generate Data - uses: ./.github/actions/generate-high-dim-random - - - name: build and search disk index (1020D, one shot graph build, L2, no diskPQ) (float) - if: success() || failure() - run: | - dist/bin/build_disk_index --data_type float --dist_fn l2 --data_path data/rand_float_1020D_5K_norm1.0.bin --index_path_prefix data/disk_index_l2_rand_float_1020D_5K_norm1.0_diskfull_oneshot -R 32 -L 500 -B 0.003 -M 1 - dist/bin/search_disk_index --data_type float --dist_fn l2 --fail_if_recall_below 70 --index_path_prefix data/disk_index_l2_rand_float_1020D_5K_norm1.0_diskfull_oneshot --result_path /tmp/res --query_file data/rand_float_1020D_1K_norm1.0.bin --gt_file data/l2_rand_float_1020D_5K_norm1.0_1020D_1K_norm1.0_gt100 --recall_at 5 -L 250 -W 2 --num_nodes_to_cache 100 -T 16 - #- name: build and search disk index (1024D, one shot graph build, L2, no diskPQ) (float) - # if: success() || failure() - # run: | - # dist/bin/build_disk_index --data_type float --dist_fn l2 --data_path data/rand_float_1024D_5K_norm1.0.bin --index_path_prefix data/disk_index_l2_rand_float_1024D_5K_norm1.0_diskfull_oneshot -R 32 -L 500 -B 0.003 -M 1 - # dist/bin/search_disk_index --data_type float --dist_fn l2 --fail_if_recall_below 70 --index_path_prefix data/disk_index_l2_rand_float_1024D_5K_norm1.0_diskfull_oneshot --result_path /tmp/res --query_file data/rand_float_1024D_1K_norm1.0.bin --gt_file data/l2_rand_float_1024D_5K_norm1.0_1024D_1K_norm1.0_gt100 --recall_at 5 -L 250 -W 2 --num_nodes_to_cache 100 -T 16 - - name: build and search disk index (1536D, one shot graph build, L2, no diskPQ) (float) - if: success() || failure() - run: | - dist/bin/build_disk_index --data_type float --dist_fn l2 --data_path data/rand_float_1536D_5K_norm1.0.bin --index_path_prefix data/disk_index_l2_rand_float_1536D_5K_norm1.0_diskfull_oneshot -R 32 -L 500 -B 0.003 -M 1 - dist/bin/search_disk_index --data_type float --dist_fn l2 --fail_if_recall_below 70 --index_path_prefix data/disk_index_l2_rand_float_1536D_5K_norm1.0_diskfull_oneshot --result_path /tmp/res --query_file data/rand_float_1536D_1K_norm1.0.bin --gt_file data/l2_rand_float_1536D_5K_norm1.0_1536D_1K_norm1.0_gt100 --recall_at 5 -L 250 -W 2 --num_nodes_to_cache 100 -T 16 - - - name: build and search disk index (4096D, one shot graph build, L2, no diskPQ) (int8) - if: success() || failure() - run: | - dist/bin/build_disk_index --data_type int8 --dist_fn l2 --data_path data/rand_int8_4096D_5K_norm1.0.bin --index_path_prefix data/disk_index_l2_rand_int8_4096D_5K_norm1.0_diskfull_oneshot -R 32 -L 500 -B 0.003 -M 1 - dist/bin/search_disk_index --data_type int8 --dist_fn l2 --fail_if_recall_below 70 --index_path_prefix data/disk_index_l2_rand_int8_4096D_5K_norm1.0_diskfull_oneshot --result_path /tmp/res --query_file data/rand_int8_4096D_1K_norm1.0.bin --gt_file data/l2_rand_int8_4096D_5K_norm1.0_4096D_1K_norm1.0_gt100 --recall_at 5 -L 250 -W 2 --num_nodes_to_cache 100 -T 16 - - - name: upload data and bin - uses: actions/upload-artifact@v4 - with: - name: multi-sector-disk-pq-${{matrix.os}} - path: | - ./dist/** - ./data/** diff --git a/packages/leann-backend-diskann/third_party/DiskANN/.github/workflows/perf.yml b/packages/leann-backend-diskann/third_party/DiskANN/.github/workflows/perf.yml deleted file mode 100644 index d4eb9e2..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/.github/workflows/perf.yml +++ /dev/null @@ -1,26 +0,0 @@ -name: DiskANN Nightly Performance Metrics -on: - schedule: - - cron: "41 14 * * *" # 14:41 UTC, 7:41 PDT, 8:41 PST, 08:11 IST -jobs: - perf-test: - name: Run Perf Test from main - runs-on: ubuntu-latest - steps: - - name: Checkout repository - uses: actions/checkout@v3 - with: - fetch-depth: 1 - - name: Build Perf Container - run: | - docker build --build-arg GIT_COMMIT_ISH="$GITHUB_SHA" -t perf -f scripts/perf/Dockerfile scripts - - name: Performance Tests - run: | - mkdir metrics - docker run -v ./metrics:/app/logs perf &> ./metrics/combined_stdouterr.log - - name: Upload Metrics Logs - uses: actions/upload-artifact@v4 - with: - name: metrics-${{matrix.os}} - path: | - ./metrics/** diff --git a/packages/leann-backend-diskann/third_party/DiskANN/.github/workflows/pr-test.yml b/packages/leann-backend-diskann/third_party/DiskANN/.github/workflows/pr-test.yml deleted file mode 100644 index f84953b..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/.github/workflows/pr-test.yml +++ /dev/null @@ -1,35 +0,0 @@ -name: DiskANN Pull Request Build and Test -on: [pull_request] -jobs: - common: - strategy: - fail-fast: true - name: DiskANN Common Build Checks - uses: ./.github/workflows/common.yml - unit-tests: - name: Unit tests - uses: ./.github/workflows/unit-tests.yml - in-mem-pq: - name: In-Memory with PQ - uses: ./.github/workflows/in-mem-pq.yml - in-mem-no-pq: - name: In-Memory without PQ - uses: ./.github/workflows/in-mem-no-pq.yml - disk-pq: - name: Disk with PQ - uses: ./.github/workflows/disk-pq.yml - multi-sector-disk-pq: - name: Multi-sector Disk with PQ - uses: ./.github/workflows/multi-sector-disk-pq.yml - labels: - name: Labels - uses: ./.github/workflows/labels.yml - dynamic: - name: Dynamic - uses: ./.github/workflows/dynamic.yml - dynamic-labels: - name: Dynamic Labels - uses: ./.github/workflows/dynamic-labels.yml - python: - name: Python - uses: ./.github/workflows/build-python.yml diff --git a/packages/leann-backend-diskann/third_party/DiskANN/.github/workflows/push-test.yml b/packages/leann-backend-diskann/third_party/DiskANN/.github/workflows/push-test.yml deleted file mode 100644 index d1261d5..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/.github/workflows/push-test.yml +++ /dev/null @@ -1,50 +0,0 @@ -name: DiskANN Push Build -on: [push] -jobs: - common: - strategy: - fail-fast: true - name: DiskANN Common Build Checks - uses: ./.github/workflows/common.yml - build-documentation: - permissions: - contents: write - strategy: - fail-fast: true - name: DiskANN Build Documentation - uses: ./.github/workflows/build-python-pdoc.yml - build: - strategy: - fail-fast: false - matrix: - os: [ ubuntu-latest, windows-2019, windows-latest ] - name: Build for ${{matrix.os}} - runs-on: ${{matrix.os}} - defaults: - run: - shell: bash - steps: - - name: Checkout repository - if: ${{ runner.os == 'Linux' }} - uses: actions/checkout@v3 - with: - fetch-depth: 1 - - name: Checkout repository - if: ${{ runner.os == 'Windows' }} - uses: actions/checkout@v3 - with: - fetch-depth: 1 - submodules: true - - name: Build diskannpy dependency tree - run: | - pip install diskannpy pipdeptree - echo "dependencies" > dependencies_${{ matrix.os }}.txt - pipdeptree >> dependencies_${{ matrix.os }}.txt - - name: Archive diskannpy dependencies artifact - uses: actions/upload-artifact@v4 - with: - name: dependencies_${{ matrix.os }} - path: | - dependencies_${{ matrix.os }}.txt - - name: DiskANN Build CLI Applications - uses: ./.github/actions/build diff --git a/packages/leann-backend-diskann/third_party/DiskANN/.github/workflows/python-release.yml b/packages/leann-backend-diskann/third_party/DiskANN/.github/workflows/python-release.yml deleted file mode 100644 index a15d4d1..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/.github/workflows/python-release.yml +++ /dev/null @@ -1,43 +0,0 @@ -name: Build and Release Python Wheels -on: - release: - types: [published] -jobs: - python-release-wheels: - name: Python - uses: ./.github/workflows/build-python.yml - build-documentation: - strategy: - fail-fast: true - name: DiskANN Build Documentation - uses: ./.github/workflows/build-python-pdoc.yml - release: - permissions: - contents: write - runs-on: ubuntu-latest - needs: python-release-wheels - steps: - - uses: actions/download-artifact@v3 - with: - name: wheels - path: dist/ - - name: Generate SHA256 files for each wheel - run: | - sha256sum dist/*.whl > checksums.txt - cat checksums.txt - - uses: actions/setup-python@v3 - - name: Install twine - run: python -m pip install twine - - name: Publish with twine - env: - TWINE_USERNAME: ${{ secrets.PYPI_USERNAME }} - TWINE_PASSWORD: ${{ secrets.PYPI_PASSWORD }} - run: | - twine upload dist/*.whl - - name: Update release with SHA256 and Artifacts - uses: softprops/action-gh-release@v1 - with: - token: ${{ secrets.GITHUB_TOKEN }} - files: | - dist/*.whl - checksums.txt diff --git a/packages/leann-backend-diskann/third_party/DiskANN/.github/workflows/unit-tests.yml b/packages/leann-backend-diskann/third_party/DiskANN/.github/workflows/unit-tests.yml deleted file mode 100644 index 6ae6877..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/.github/workflows/unit-tests.yml +++ /dev/null @@ -1,32 +0,0 @@ -name: Unit Tests -on: [workflow_call] -jobs: - acceptance-tests-labels: - name: Unit Tests - strategy: - fail-fast: false - matrix: - os: [ubuntu-latest, windows-2019, windows-latest] - runs-on: ${{matrix.os}} - defaults: - run: - shell: bash - steps: - - name: Checkout repository - if: ${{ runner.os == 'Linux' }} - uses: actions/checkout@v3 - with: - fetch-depth: 1 - - name: Checkout repository - if: ${{ runner.os == 'Windows' }} - uses: actions/checkout@v3 - with: - fetch-depth: 1 - submodules: true - - name: DiskANN Build CLI Applications - uses: ./.github/actions/build - - - name: Run Unit Tests - run: | - cd build - ctest -C Release \ No newline at end of file diff --git a/packages/leann-backend-diskann/third_party/DiskANN/.gitignore b/packages/leann-backend-diskann/third_party/DiskANN/.gitignore deleted file mode 100644 index c6a88e7..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/.gitignore +++ /dev/null @@ -1,384 +0,0 @@ -## Ignore Visual Studio temporary files, build results, and -## files generated by popular Visual Studio add-ons. -## -## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore - -# User-specific files -*.rsuser -*.suo -*.user -*.userosscache -*.sln.docstates - -# User-specific files (MonoDevelop/Xamarin Studio) -*.userprefs - -# Mono auto generated files -mono_crash.* - -# Build results -[Dd]ebug/ -[Dd]ebugPublic/ -[Rr]elease/ -[Rr]eleases/ -x64/ -x86/ -[Aa][Rr][Mm]/ -[Aa][Rr][Mm]64/ -bld/ -[Bb]in/ -[Oo]bj/ -[Ll]og/ -[Ll]ogs/ - -# Visual Studio 2015/2017 cache/options directory -.vs/ -# Uncomment if you have tasks that create the project's static files in wwwroot -#wwwroot/ - -# Visual Studio 2017 auto generated files -Generated\ Files/ - -# MSTest test Results -[Tt]est[Rr]esult*/ -[Bb]uild[Ll]og.* - -# NUnit -*.VisualState.xml -TestResult.xml -nunit-*.xml - -# Build Results of an ATL Project -[Dd]ebugPS/ -[Rr]eleasePS/ -dlldata.c - -# Benchmark Results -BenchmarkDotNet.Artifacts/ - -# .NET Core -project.lock.json -project.fragment.lock.json -artifacts/ - -# StyleCop -StyleCopReport.xml - -# Files built by Visual Studio -*_i.c -*_p.c -*_h.h -*.ilk -*.meta -*.obj -*.iobj -*.pch -*.pdb -*.ipdb -*.pgc -*.pgd -*.rsp -*.sbr -*.tlb -*.tli -*.tlh -*.tmp -*.tmp_proj -*_wpftmp.csproj -*.log -*.vspscc -*.vssscc -.builds -*.pidb -*.svclog -*.scc - -# Chutzpah Test files -_Chutzpah* - -# Visual C++ cache files -ipch/ -*.aps -*.ncb -*.opendb -*.opensdf -*.sdf -*.cachefile -*.VC.db -*.VC.VC.opendb - -# Visual Studio profiler -*.psess -*.vsp -*.vspx -*.sap - -# Visual Studio Trace Files -*.e2e - -# TFS 2012 Local Workspace -$tf/ - -# Guidance Automation Toolkit -*.gpState - -# ReSharper is a .NET coding add-in -_ReSharper*/ -*.[Rr]e[Ss]harper -*.DotSettings.user - -# TeamCity is a build add-in -_TeamCity* - -# DotCover is a Code Coverage Tool -*.dotCover - -# AxoCover is a Code Coverage Tool -.axoCover/* -!.axoCover/settings.json - -# Visual Studio code coverage results -*.coverage -*.coveragexml - -# NCrunch -_NCrunch_* -.*crunch*.local.xml -nCrunchTemp_* - -# MightyMoose -*.mm.* -AutoTest.Net/ - -# Web workbench (sass) -.sass-cache/ - -# Installshield output folder -[Ee]xpress/ - -# DocProject is a documentation generator add-in -DocProject/buildhelp/ -DocProject/Help/*.HxT -DocProject/Help/*.HxC -DocProject/Help/*.hhc -DocProject/Help/*.hhk -DocProject/Help/*.hhp -DocProject/Help/Html2 -DocProject/Help/html - -# Click-Once directory -publish/ - -# Publish Web Output -*.[Pp]ublish.xml -*.azurePubxml -# Note: Comment the next line if you want to checkin your web deploy settings, -# but database connection strings (with potential passwords) will be unencrypted -*.pubxml -*.publishproj - -# Microsoft Azure Web App publish settings. Comment the next line if you want to -# checkin your Azure Web App publish settings, but sensitive information contained -# in these scripts will be unencrypted -PublishScripts/ - -# NuGet Packages -*.nupkg -# NuGet Symbol Packages -*.snupkg -# The packages folder can be ignored because of Package Restore -**/[Pp]ackages/* -# except build/, which is used as an MSBuild target. -!**/[Pp]ackages/build/ -# Uncomment if necessary however generally it will be regenerated when needed -#!**/[Pp]ackages/repositories.config -# NuGet v3's project.json files produces more ignorable files -*.nuget.props -*.nuget.targets - -# Microsoft Azure Build Output -csx/ -*.build.csdef - -# Microsoft Azure Emulator -ecf/ -rcf/ - -# Windows Store app package directories and files -AppPackages/ -BundleArtifacts/ -Package.StoreAssociation.xml -_pkginfo.txt -*.appx -*.appxbundle -*.appxupload - -# Visual Studio cache files -# files ending in .cache can be ignored -*.[Cc]ache -# but keep track of directories ending in .cache -!?*.[Cc]ache/ - -# Others -ClientBin/ -~$* -*~ -*.dbmdl -*.dbproj.schemaview -*.jfm -*.pfx -*.publishsettings -orleans.codegen.cs - -# Including strong name files can present a security risk -# (https://github.com/github/gitignore/pull/2483#issue-259490424) -#*.snk - -# Since there are multiple workflows, uncomment next line to ignore bower_components -# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) -#bower_components/ - -# RIA/Silverlight projects -Generated_Code/ - -# Backup & report files from converting an old project file -# to a newer Visual Studio version. Backup files are not needed, -# because we have git ;-) -_UpgradeReport_Files/ -Backup*/ -UpgradeLog*.XML -UpgradeLog*.htm -ServiceFabricBackup/ -*.rptproj.bak - -# SQL Server files -*.mdf -*.ldf -*.ndf - -# Business Intelligence projects -*.rdl.data -*.bim.layout -*.bim_*.settings -*.rptproj.rsuser -*- [Bb]ackup.rdl -*- [Bb]ackup ([0-9]).rdl -*- [Bb]ackup ([0-9][0-9]).rdl - -# Microsoft Fakes -FakesAssemblies/ - -# GhostDoc plugin setting file -*.GhostDoc.xml - -# Node.js Tools for Visual Studio -.ntvs_analysis.dat -node_modules/ - -# Visual Studio 6 build log -*.plg - -# Visual Studio 6 workspace options file -*.opt - -# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) -*.vbw - -# Visual Studio LightSwitch build output -**/*.HTMLClient/GeneratedArtifacts -**/*.DesktopClient/GeneratedArtifacts -**/*.DesktopClient/ModelManifest.xml -**/*.Server/GeneratedArtifacts -**/*.Server/ModelManifest.xml -_Pvt_Extensions - -# Paket dependency manager -.paket/paket.exe -paket-files/ - -# FAKE - F# Make -.fake/ - -# CodeRush personal settings -.cr/personal - -# Python Tools for Visual Studio (PTVS) -__pycache__/ -*.pyc - -# Cake - Uncomment if you are using it -# tools/** -# !tools/packages.config - -# Tabs Studio -*.tss - -# Telerik's JustMock configuration file -*.jmconfig - -# BizTalk build output -*.btp.cs -*.btm.cs -*.odx.cs -*.xsd.cs - -# OpenCover UI analysis results -OpenCover/ - -# Azure Stream Analytics local run output -ASALocalRun/ - -# MSBuild Binary and Structured Log -*.binlog - -# NVidia Nsight GPU debugger configuration file -*.nvuser - -# MFractors (Xamarin productivity tool) working folder -.mfractor/ - -# Local History for Visual Studio -.localhistory/ - -# BeatPulse healthcheck temp database -healthchecksdb - -# Backup folder for Package Reference Convert tool in Visual Studio 2017 -MigrationBackup/ - -# Ionide (cross platform F# VS Code tools) working folder -.ionide/ - -/vcproj/nsg/x64/Debug/nsg.Build.CppClean.log -/vcproj/test_recall/x64/Debug/test_recall.Build.CppClean.log -/vcproj/test_recall/test_recall.vcxproj.user -/.vs -/out/build/x64-Debug -cscope* - -build/ -build_linux/ -!.github/actions/build - -# jetbrains specific stuff -.idea/ -cmake-build-debug/ - -#python extension module ignores -python/diskannpy.egg-info/ -python/dist/ - -**/*.egg-info -wheelhouse/* -dist/* -venv*/** -*.swp - -gperftools - -# Rust -rust/target - -python/src/*.so - -compile_commands.json \ No newline at end of file diff --git a/packages/leann-backend-diskann/third_party/DiskANN/.gitmodules b/packages/leann-backend-diskann/third_party/DiskANN/.gitmodules deleted file mode 100644 index 125572b..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/.gitmodules +++ /dev/null @@ -1,3 +0,0 @@ -[submodule "gperftools"] - path = gperftools - url = https://github.com/gperftools/gperftools.git diff --git a/packages/leann-backend-diskann/third_party/DiskANN/CMakeLists.txt b/packages/leann-backend-diskann/third_party/DiskANN/CMakeLists.txt deleted file mode 100644 index 4025861..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/CMakeLists.txt +++ /dev/null @@ -1,563 +0,0 @@ -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT license. - -# Parameters: -# -# BOOST_ROOT: -# Specify root of the Boost library if Boost cannot be auto-detected. On Windows, a fallback to a -# downloaded nuget version will be used if Boost cannot be found. -# -# DISKANN_RELEASE_UNUSED_TCMALLOC_MEMORY_AT_CHECKPOINTS: -# This is a work-in-progress feature, not completed yet. The core DiskANN library will be split into -# build-related and search-related functionality. In build-related functionality, when using tcmalloc, -# it's possible to release memory that's free but reserved by tcmalloc. Setting this to true enables -# such behavior. -# Contact for this feature: gopalrs. - - -# Some variables like MSVC are defined only after project(), so put that first. -cmake_minimum_required(VERSION 3.20) -project(diskann) - -#Set option to use tcmalloc -option(USE_TCMALLOC "Use tcmalloc from gperftools" ON) - -# set tcmalloc to false when on macos -if(APPLE) - set(USE_TCMALLOC OFF) -endif() - -option(PYBIND "Build with Python bindings" ON) - -if(PYBIND) - # Find Python - find_package(Python 3.6 COMPONENTS Interpreter Development REQUIRED) - execute_process( - COMMAND "${Python_EXECUTABLE}" -c "import pybind11; print(pybind11.get_cmake_dir())" - OUTPUT_VARIABLE pybind11_DIR - OUTPUT_STRIP_TRAILING_WHITESPACE - ) - find_package(pybind11 CONFIG REQUIRED) - - message(STATUS "Python include dirs: ${Python_INCLUDE_DIRS}") - message(STATUS "Pybind11 include dirs: ${pybind11_INCLUDE_DIRS}") - - # Add pybind11 include directories - include_directories(SYSTEM ${pybind11_INCLUDE_DIRS} ${Python_INCLUDE_DIRS}) - - # Add compilation definitions - add_definitions(-DPYBIND11_EMBEDDED) - - # Set visibility flags - if(NOT MSVC) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility=hidden") - endif() -endif() - -set(CMAKE_STANDARD 17) -set(CMAKE_CXX_STANDARD 17) -set(CMAKE_CXX_STANDARD_REQUIRED ON) - -# if(NOT MSVC) -# set(CMAKE_CXX_COMPILER g++) -# endif() - -set(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake;${CMAKE_MODULE_PATH}") - -# Install nuget packages for dependencies. -if (MSVC) - find_program(NUGET_EXE NAMES nuget) - - if (NOT NUGET_EXE) - message(FATAL_ERROR "Cannot find nuget command line tool.\nPlease install it from e.g. https://www.nuget.org/downloads") - endif() - - set(DISKANN_MSVC_PACKAGES_CONFIG ${CMAKE_BINARY_DIR}/packages.config) - set(DISKANN_MSVC_PACKAGES ${CMAKE_BINARY_DIR}/packages) - - message(STATUS "Invoking nuget to download Boost, OpenMP and MKL dependencies...") - configure_file(${PROJECT_SOURCE_DIR}/windows/packages.config.in ${DISKANN_MSVC_PACKAGES_CONFIG}) - exec_program(${NUGET_EXE} ARGS install \"${DISKANN_MSVC_PACKAGES_CONFIG}\" -ExcludeVersion -OutputDirectory \"${DISKANN_MSVC_PACKAGES}\") - if (RESTAPI) - set(DISKANN_MSVC_RESTAPI_PACKAGES_CONFIG ${CMAKE_BINARY_DIR}/restapi/packages.config) - configure_file(${PROJECT_SOURCE_DIR}/windows/packages_restapi.config.in ${DISKANN_MSVC_RESTAPI_PACKAGES_CONFIG}) - exec_program(${NUGET_EXE} ARGS install \"${DISKANN_MSVC_RESTAPI_PACKAGES_CONFIG}\" -ExcludeVersion -OutputDirectory \"${DISKANN_MSVC_PACKAGES}\") - endif() - message(STATUS "Finished setting up nuget dependencies") -endif() - -include_directories(${PROJECT_SOURCE_DIR}/include) - -include(FetchContent) - -if(USE_TCMALLOC) - FetchContent_Declare( - tcmalloc - GIT_REPOSITORY https://github.com/google/tcmalloc.git - GIT_TAG origin/master # or specify a particular version or commit - ) - - FetchContent_MakeAvailable(tcmalloc) -endif() - -if(NOT PYBIND) - set(DISKANN_RELEASE_UNUSED_TCMALLOC_MEMORY_AT_CHECKPOINTS ON) -endif() -# It's necessary to include tcmalloc headers only if calling into MallocExtension interface. -# For using tcmalloc in DiskANN tools, it's enough to just link with tcmalloc. -if (DISKANN_RELEASE_UNUSED_TCMALLOC_MEMORY_AT_CHECKPOINTS) - include_directories(${tcmalloc_SOURCE_DIR}/src) - if (MSVC) - include_directories(${tcmalloc_SOURCE_DIR}/src/windows) - endif() -endif() - -#OpenMP -if (MSVC) - # Do not use find_package here since it would use VisualStudio's built-in OpenMP, but MKL libraries - # refer to Intel's OpenMP. - # - # No extra settings are needed for compilation: it only needs /openmp flag which is set further below, - # in the common MSVC compiler options block. - include_directories(BEFORE "${DISKANN_MSVC_PACKAGES}/intelopenmp.devel.win/lib/native/include") - link_libraries("${DISKANN_MSVC_PACKAGES}/intelopenmp.devel.win/lib/native/win-x64/libiomp5md.lib") - - set(OPENMP_WINDOWS_RUNTIME_FILES - "${DISKANN_MSVC_PACKAGES}/intelopenmp.redist.win/runtimes/win-x64/native/libiomp5md.dll" - "${DISKANN_MSVC_PACKAGES}/intelopenmp.redist.win/runtimes/win-x64/native/libiomp5md.pdb") -elseif(APPLE) - # Check if we're building Python bindings - if(PYBIND) - # First look for PyTorch's OpenMP to avoid conflicts - execute_process( - COMMAND ${Python_EXECUTABLE} -c "import os; import torch; print(os.path.join(os.path.dirname(torch.__file__), 'lib', 'libomp.dylib'))" - RESULT_VARIABLE TORCH_PATH_RESULT - OUTPUT_VARIABLE TORCH_LIBOMP_PATH - OUTPUT_STRIP_TRAILING_WHITESPACE - ERROR_QUIET - ) - - execute_process( - COMMAND brew --prefix libomp - OUTPUT_VARIABLE LIBOMP_ROOT - OUTPUT_STRIP_TRAILING_WHITESPACE - ) - - if(EXISTS "${TORCH_LIBOMP_PATH}") - message(STATUS "Found PyTorch's libomp: ${TORCH_LIBOMP_PATH}") - set(OpenMP_CXX_FLAGS "-Xclang -fopenmp") - set(OpenMP_C_FLAGS "-Xclang -fopenmp") - set(OpenMP_CXX_LIBRARIES "${TORCH_LIBOMP_PATH}") - set(OpenMP_C_LIBRARIES "${TORCH_LIBOMP_PATH}") - set(OpenMP_FOUND TRUE) - - include_directories(${LIBOMP_ROOT}/include) - - # Set compiler flags and link libraries - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}") - link_libraries("${TORCH_LIBOMP_PATH}") - else() - message(STATUS "No PyTorch's libomp found, falling back to normal OpenMP detection") - # Fallback to normal OpenMP detection - execute_process( - COMMAND brew --prefix libomp - OUTPUT_VARIABLE LIBOMP_ROOT - OUTPUT_STRIP_TRAILING_WHITESPACE - ) - - set(OpenMP_ROOT "${LIBOMP_ROOT}") - find_package(OpenMP) - - if (OPENMP_FOUND) - set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}") - set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}") - link_libraries(OpenMP::OpenMP_CXX) - else() - message(FATAL_ERROR "No OpenMP support") - endif() - endif() - else() - # Regular OpenMP setup for non-Python builds - execute_process( - COMMAND brew --prefix libomp - OUTPUT_VARIABLE LIBOMP_ROOT - OUTPUT_STRIP_TRAILING_WHITESPACE - ) - set(OpenMP_ROOT "${LIBOMP_ROOT}") - find_package(OpenMP) - - if (OPENMP_FOUND) - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}") - link_libraries(OpenMP::OpenMP_CXX) - else() - message(FATAL_ERROR "No OpenMP support") - endif() - endif() -else() - find_package(OpenMP) - - if (OPENMP_FOUND) - set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}") - set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}") - else() - message(FATAL_ERROR "No OpenMP support") - endif() -endif() - -# DiskANN core uses header-only libraries. Only DiskANN tools need program_options which has a linker library, -# but its size is small. Reduce number of dependent DLLs by linking statically. -if (MSVC) - set(Boost_USE_STATIC_LIBS ON) -endif() - -if(NOT MSVC) - find_package(Boost COMPONENTS program_options) -endif() - -# For Windows, fall back to nuget version if find_package didn't find it. -if (MSVC AND NOT Boost_FOUND) - set(DISKANN_BOOST_INCLUDE "${DISKANN_MSVC_PACKAGES}/boost/lib/native/include") - # Multi-threaded static library. - set(PROGRAM_OPTIONS_LIB_PATTERN "${DISKANN_MSVC_PACKAGES}/boost_program_options-vc${MSVC_TOOLSET_VERSION}/lib/native/libboost_program_options-vc${MSVC_TOOLSET_VERSION}-mt-x64-*.lib") - file(GLOB DISKANN_BOOST_PROGRAM_OPTIONS_LIB ${PROGRAM_OPTIONS_LIB_PATTERN}) - - set(PROGRAM_OPTIONS_DLIB_PATTERN "${DISKANN_MSVC_PACKAGES}/boost_program_options-vc${MSVC_TOOLSET_VERSION}/lib/native/libboost_program_options-vc${MSVC_TOOLSET_VERSION}-mt-gd-x64-*.lib") - file(GLOB DISKANN_BOOST_PROGRAM_OPTIONS_DLIB ${PROGRAM_OPTIONS_DLIB_PATTERN}) - - if (EXISTS ${DISKANN_BOOST_INCLUDE} AND EXISTS ${DISKANN_BOOST_PROGRAM_OPTIONS_LIB} AND EXISTS ${DISKANN_BOOST_PROGRAM_OPTIONS_DLIB}) - set(Boost_FOUND ON) - set(Boost_INCLUDE_DIR ${DISKANN_BOOST_INCLUDE}) - add_library(Boost::program_options STATIC IMPORTED) - set_target_properties(Boost::program_options PROPERTIES IMPORTED_LOCATION_RELEASE "${DISKANN_BOOST_PROGRAM_OPTIONS_LIB}") - set_target_properties(Boost::program_options PROPERTIES IMPORTED_LOCATION_DEBUG "${DISKANN_BOOST_PROGRAM_OPTIONS_DLIB}") - message(STATUS "Falling back to using Boost from the nuget package") - else() - message(WARNING "Couldn't find Boost. Was looking for ${DISKANN_BOOST_INCLUDE} and ${PROGRAM_OPTIONS_LIB_PATTERN}") - endif() -endif() - -if (NOT Boost_FOUND) - message(FATAL_ERROR "Couldn't find Boost dependency") -endif() - -include_directories(${Boost_INCLUDE_DIR}) - -#MKL Config -if (MSVC) - # Only the DiskANN DLL and one of the tools need MKL libraries. Additionally, only a small part of MKL is used. - # Given that and given that MKL DLLs are huge, use static linking to end up with no MKL DLL dependencies and with - # significantly smaller disk footprint. - # - # The compile options are not modified as there's already an unconditional -DMKL_ILP64 define below - # for all architectures, which is all that's needed. - set(DISKANN_MKL_INCLUDE_DIRECTORIES "${DISKANN_MSVC_PACKAGES}/intelmkl.static.win-x64/lib/native/include") - set(DISKANN_MKL_LIB_PATH "${DISKANN_MSVC_PACKAGES}/intelmkl.static.win-x64/lib/native/win-x64") - - set(DISKANN_MKL_LINK_LIBRARIES - "${DISKANN_MKL_LIB_PATH}/mkl_intel_ilp64.lib" - "${DISKANN_MKL_LIB_PATH}/mkl_core.lib" - "${DISKANN_MKL_LIB_PATH}/mkl_intel_thread.lib") -elseif(APPLE) - # no mkl on non-intel devices - find_library(ACCELERATE_LIBRARY Accelerate) - message(STATUS "Found Accelerate (${ACCELERATE_LIBRARY})") - set(DISKANN_ACCEL_LINK_OPTIONS ${ACCELERATE_LIBRARY}) - add_compile_definitions(ACCELERATE_NEW_LAPACK) -else() - # expected path for manual intel mkl installs - set(POSSIBLE_OMP_PATHS "/opt/intel/oneapi/compiler/2025.0/lib/libiomp5.so;/opt/intel/oneapi/compiler/latest/linux/compiler/lib/intel64_lin/libiomp5.so;/usr/lib/x86_64-linux-gnu/libiomp5.so;/opt/intel/lib/intel64_lin/libiomp5.so") - foreach(POSSIBLE_OMP_PATH ${POSSIBLE_OMP_PATHS}) - if (EXISTS ${POSSIBLE_OMP_PATH}) - get_filename_component(OMP_PATH ${POSSIBLE_OMP_PATH} DIRECTORY) - endif() - endforeach() - - if(NOT OMP_PATH) - message(FATAL_ERROR "Could not find Intel OMP in standard locations; use -DOMP_PATH to specify the install location for your environment") - endif() - link_directories(${OMP_PATH}) - - set(POSSIBLE_MKL_LIB_PATHS "/opt/intel/oneapi/mkl/latest/lib/intel64/libmkl_core.so;/usr/lib/x86_64-linux-gnu/libmkl_core.so;/opt/intel/mkl/lib/intel64/libmkl_core.so") - foreach(POSSIBLE_MKL_LIB_PATH ${POSSIBLE_MKL_LIB_PATHS}) - if (EXISTS ${POSSIBLE_MKL_LIB_PATH}) - get_filename_component(MKL_PATH ${POSSIBLE_MKL_LIB_PATH} DIRECTORY) - endif() - endforeach() - - set(POSSIBLE_MKL_INCLUDE_PATHS "/opt/intel/oneapi/mkl/latest/include;/usr/include/mkl;/opt/intel/mkl/include/;") - foreach(POSSIBLE_MKL_INCLUDE_PATH ${POSSIBLE_MKL_INCLUDE_PATHS}) - if (EXISTS ${POSSIBLE_MKL_INCLUDE_PATH}) - set(MKL_INCLUDE_PATH ${POSSIBLE_MKL_INCLUDE_PATH}) - endif() - endforeach() - if(NOT MKL_PATH) - message(FATAL_ERROR "Could not find Intel MKL in standard locations; use -DMKL_PATH to specify the install location for your environment") - elseif(NOT MKL_INCLUDE_PATH) - message(FATAL_ERROR "Could not find Intel MKL in standard locations; use -DMKL_INCLUDE_PATH to specify the install location for headers for your environment") - endif() - if (EXISTS ${MKL_PATH}/libmkl_def.so.2) - set(MKL_DEF_SO ${MKL_PATH}/libmkl_def.so.2) - elseif(EXISTS ${MKL_PATH}/libmkl_def.so) - set(MKL_DEF_SO ${MKL_PATH}/libmkl_def.so) - else() - message(FATAL_ERROR "Despite finding MKL, libmkl_def.so was not found in expected locations.") - endif() - link_directories(${MKL_PATH}) - include_directories(${MKL_INCLUDE_PATH}) - - # compile flags and link libraries - # if gcc/g++ - if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") - add_compile_options(-m64 -Wl,--no-as-needed) - endif() - if (NOT PYBIND) - link_libraries(mkl_intel_ilp64 mkl_intel_thread mkl_core iomp5 pthread m dl) - else() - # static linking for python so as to minimize customer dependency issues - if (CMAKE_BUILD_TYPE STREQUAL "Debug") - # In debug mode, use dynamic linking to ensure all symbols are available - link_libraries(mkl_intel_ilp64 mkl_intel_thread mkl_core ${MKL_DEF_SO} iomp5 pthread m dl) - else() - # In release mode, use static linking to minimize dependencies - link_libraries( - ${MKL_PATH}/libmkl_intel_ilp64.a - ${MKL_PATH}/libmkl_intel_thread.a - ${MKL_PATH}/libmkl_core.a - ${MKL_DEF_SO} - iomp5 - pthread - m - dl - ) - endif() - endif() - - add_definitions(-DMKL_ILP64) -endif() - - -# Section for tcmalloc. The DiskANN tools are always linked to tcmalloc. For Windows, they also need to -# force-include the _tcmalloc symbol for enabling tcmalloc. -# -# The DLL itself needs to be linked to tcmalloc only if DISKANN_RELEASE_UNUSED_TCMALLOC_MEMORY_AT_CHECKPOINTS -# is enabled. -if(USE_TCMALLOC) - if (MSVC) - if (NOT EXISTS "${PROJECT_SOURCE_DIR}/gperftools/gperftools.sln") - message(FATAL_ERROR "The gperftools submodule was not found. " - "Please check-out git submodules by doing 'git submodule init' followed by 'git submodule update'") - endif() - - set(TCMALLOC_LINK_LIBRARY "${PROJECT_SOURCE_DIR}/gperftools/x64/Release-Patch/libtcmalloc_minimal.lib") - set(TCMALLOC_WINDOWS_RUNTIME_FILES - "${PROJECT_SOURCE_DIR}/gperftools/x64/Release-Patch/libtcmalloc_minimal.dll" - "${PROJECT_SOURCE_DIR}/gperftools/x64/Release-Patch/libtcmalloc_minimal.pdb") - - # Tell CMake how to build the tcmalloc linker library from the submodule. - add_custom_target(build_libtcmalloc_minimal DEPENDS ${TCMALLOC_LINK_LIBRARY}) - add_custom_command(OUTPUT ${TCMALLOC_LINK_LIBRARY} - COMMAND ${CMAKE_VS_MSBUILD_COMMAND} gperftools.sln /m /nologo - /t:libtcmalloc_minimal /p:Configuration="Release-Patch" - /property:Platform="x64" - /p:PlatformToolset=v${MSVC_TOOLSET_VERSION} - /p:WindowsTargetPlatformVersion=${CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION} - WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}/gperftools) - - add_library(libtcmalloc_minimal_for_exe STATIC IMPORTED) - add_library(libtcmalloc_minimal_for_dll STATIC IMPORTED) - - set_target_properties(libtcmalloc_minimal_for_dll PROPERTIES - IMPORTED_LOCATION "${TCMALLOC_LINK_LIBRARY}") - - set_target_properties(libtcmalloc_minimal_for_exe PROPERTIES - IMPORTED_LOCATION "${TCMALLOC_LINK_LIBRARY}" - INTERFACE_LINK_OPTIONS /INCLUDE:_tcmalloc) - - # Ensure libtcmalloc_minimal is built before it's being used. - add_dependencies(libtcmalloc_minimal_for_dll build_libtcmalloc_minimal) - add_dependencies(libtcmalloc_minimal_for_exe build_libtcmalloc_minimal) - - set(DISKANN_TOOLS_TCMALLOC_LINK_OPTIONS libtcmalloc_minimal_for_exe) - elseif(APPLE) # ! Inherited from #474, not been adjusted for TCMalloc Removal - execute_process( - COMMAND brew --prefix gperftools - OUTPUT_VARIABLE GPERFTOOLS_PREFIX - OUTPUT_STRIP_TRAILING_WHITESPACE - ) - set(DISKANN_TOOLS_TCMALLOC_LINK_OPTIONS "-L${GPERFTOOLS_PREFIX}/lib -ltcmalloc") - elseif(NOT PYBIND) - set(DISKANN_TOOLS_TCMALLOC_LINK_OPTIONS "-ltcmalloc") - endif() - - if (DISKANN_RELEASE_UNUSED_TCMALLOC_MEMORY_AT_CHECKPOINTS) - add_definitions(-DRELEASE_UNUSED_TCMALLOC_MEMORY_AT_CHECKPOINTS) - - if (MSVC) - set(DISKANN_DLL_TCMALLOC_LINK_OPTIONS libtcmalloc_minimal_for_dll) - endif() - endif() -endif() - -if (NOT MSVC AND NOT APPLE) - set(DISKANN_ASYNC_LIB aio) -endif() - -#Main compiler/linker settings -if(MSVC) - #language options - add_compile_options(/permissive- /openmp:experimental /Zc:twoPhase- /Zc:inline /WX- /std:c++17 /Gd /W3 /MP /Zi /FC /nologo) - #code generation options - add_compile_options(/arch:AVX2 /fp:fast /fp:except- /EHsc /GS- /Gy) - #optimization options - add_compile_options(/Ot /Oy /Oi) - #path options - add_definitions(-DUSE_AVX2 -DUSE_ACCELERATED_PQ -D_WINDOWS -DNOMINMAX -DUNICODE) - # Linker options. Exclude VCOMP/VCOMPD.LIB which contain VisualStudio's version of OpenMP. - # MKL was linked against Intel's OpenMP and depends on the corresponding DLL. - add_link_options(/NODEFAULTLIB:VCOMP.LIB /NODEFAULTLIB:VCOMPD.LIB /DEBUG:FULL /OPT:REF /OPT:ICF) - - set(CMAKE_LIBRARY_OUTPUT_DIRECTORY_DEBUG ${PROJECT_SOURCE_DIR}/x64/Debug) - set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG ${PROJECT_SOURCE_DIR}/x64/Debug) - set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_DEBUG ${PROJECT_SOURCE_DIR}/x64/Debug) - - set(CMAKE_LIBRARY_OUTPUT_DIRECTORY_RELEASE ${PROJECT_SOURCE_DIR}/x64/Release) - set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE ${PROJECT_SOURCE_DIR}/x64/Release) - set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELEASE ${PROJECT_SOURCE_DIR}/x64/Release) -elseif(APPLE) - set(ENV{TCMALLOC_LARGE_ALLOC_REPORT_THRESHOLD} 500000000000) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -ftree-vectorize -fno-builtin-malloc -fno-builtin-calloc -fno-builtin-realloc -fno-builtin-free -Xclang -fopenmp -fopenmp-simd -funroll-loops -Wfatal-errors -Wno-inconsistent-missing-override -Wno-return-type") - set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -g -DDEBUG") - set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -Ofast -DNDEBUG -ftree-vectorize") - if (NOT PYBIND) - set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -DNDEBUG -Ofast") - if (NOT PORTABLE) - set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -mtune=native") - endif() - else() - # -Ofast is not supported in a python extension module - set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -DNDEBUG -fPIC") - endif() -else() - set(ENV{TCMALLOC_LARGE_ALLOC_REPORT_THRESHOLD} 500000000000) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mavx2 -mfma -msse2 -ftree-vectorize -fopenmp -fopenmp-simd -funroll-loops -Wfatal-errors -DUSE_AVX2 -fPIC") - if(USE_TCMALLOC) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-builtin-malloc -fno-builtin-calloc -fno-builtin-realloc -fno-builtin-free") - endif() - set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -g -DDEBUG") - if (NOT PYBIND) - set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -DNDEBUG -Ofast") - if (NOT PORTABLE) - set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -march=native -mtune=native") - endif() - else() - # -Ofast is not supported in a python extension module - set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -DNDEBUG") - endif() -endif() - -add_subdirectory(src) -if (NOT PYBIND) - add_subdirectory(apps) - add_subdirectory(apps/utils) -endif() - -if (UNIT_TEST) - enable_testing() - add_subdirectory(tests) -endif() - -if (MSVC) - message(STATUS "The ${PROJECT_NAME}.sln has been created, opened it from VisualStudio to build Release or Debug configurations.\n" - "Alternatively, use MSBuild to build:\n\n" - "msbuild.exe ${PROJECT_NAME}.sln /m /nologo /t:Build /p:Configuration=\"Release\" /property:Platform=\"x64\"\n") -endif() - -if (RESTAPI) - if (MSVC) - set(DISKANN_CPPRESTSDK "${DISKANN_MSVC_PACKAGES}/cpprestsdk.v142/build/native") - # expected path for apt packaged intel mkl installs - link_libraries("${DISKANN_CPPRESTSDK}/x64/lib/cpprest142_2_10.lib") - include_directories("${DISKANN_CPPRESTSDK}/include") - endif() - add_subdirectory(apps/restapi) -endif() - -include(clang-format.cmake) - -if(PYBIND) - add_subdirectory(python) - - install(TARGETS _diskannpy - DESTINATION leann_backend_diskann - COMPONENT python_modules - ) - -endif() -############################################################################### -# PROTOBUF SECTION - Corrected to use CONFIG mode explicitly -############################################################################### -set(Protobuf_USE_STATIC_LIBS OFF) - -find_package(ZLIB REQUIRED) - -find_package(Protobuf REQUIRED) - -message(STATUS "Protobuf found: ${Protobuf_VERSION}") -message(STATUS "Protobuf include dirs: ${Protobuf_INCLUDE_DIRS}") -message(STATUS "Protobuf libraries: ${Protobuf_LIBRARIES}") -message(STATUS "Protobuf protoc executable: ${Protobuf_PROTOC_EXECUTABLE}") - -include_directories(${Protobuf_INCLUDE_DIRS}) - -set(PROTO_FILE "${CMAKE_CURRENT_SOURCE_DIR}/../embedding.proto") -protobuf_generate_cpp(PROTO_SRCS PROTO_HDRS ${PROTO_FILE}) -set(generated_proto_sources ${PROTO_SRCS}) - - -add_library(proto_embeddings STATIC ${generated_proto_sources}) -target_link_libraries(proto_embeddings PUBLIC protobuf::libprotobuf) -target_include_directories(proto_embeddings PUBLIC - ${CMAKE_CURRENT_BINARY_DIR} - ${Protobuf_INCLUDE_DIRS} -) - -target_link_libraries(diskann PRIVATE proto_embeddings protobuf::libprotobuf) -target_include_directories(diskann PRIVATE - ${CMAKE_CURRENT_BINARY_DIR} - ${Protobuf_INCLUDE_DIRS} -) - -target_link_libraries(diskann_s PRIVATE proto_embeddings protobuf::libprotobuf) -target_include_directories(diskann_s PRIVATE - ${CMAKE_CURRENT_BINARY_DIR} - ${Protobuf_INCLUDE_DIRS} -) - - -############################################################################### -# ZEROMQ SECTION - REQUIRED -############################################################################### - -find_package(ZeroMQ QUIET) -if(NOT ZeroMQ_FOUND) - find_path(ZeroMQ_INCLUDE_DIR zmq.h) - find_library(ZeroMQ_LIBRARY zmq) - if(ZeroMQ_INCLUDE_DIR AND ZeroMQ_LIBRARY) - set(ZeroMQ_FOUND TRUE) - endif() -endif() - -if(ZeroMQ_FOUND) - message(STATUS "Found ZeroMQ: ${ZeroMQ_LIBRARY}") - include_directories(${ZeroMQ_INCLUDE_DIR}) - target_link_libraries(diskann PRIVATE ${ZeroMQ_LIBRARY}) - target_link_libraries(diskann_s PRIVATE ${ZeroMQ_LIBRARY}) - add_definitions(-DUSE_ZEROMQ) -else() - message(FATAL_ERROR "ZeroMQ is required but not found. Please install ZeroMQ and try again.") -endif() - -target_link_libraries(diskann ${PYBIND11_LIBRARIES}) -target_link_libraries(diskann_s ${PYBIND11_LIBRARIES}) diff --git a/packages/leann-backend-diskann/third_party/DiskANN/CMakeSettings.json b/packages/leann-backend-diskann/third_party/DiskANN/CMakeSettings.json deleted file mode 100644 index af5d7b5..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/CMakeSettings.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "configurations": [ - { - "name": "x64-Release", - "generator": "Ninja", - "configurationType": "Release", - "inheritEnvironments": [ "msvc_x64" ], - "buildRoot": "${projectDir}\\out\\build\\${name}", - "installRoot": "${projectDir}\\out\\install\\${name}", - "cmakeCommandArgs": "", - "buildCommandArgs": "", - "ctestCommandArgs": "" - }, - { - "name": "WSL-GCC-Release", - "generator": "Ninja", - "configurationType": "RelWithDebInfo", - "buildRoot": "${projectDir}\\out\\build\\${name}", - "installRoot": "${projectDir}\\out\\install\\${name}", - "cmakeExecutable": "cmake", - "cmakeCommandArgs": "", - "buildCommandArgs": "", - "ctestCommandArgs": "", - "inheritEnvironments": [ "linux_x64" ], - "wslPath": "${defaultWSLPath}" - } - ] -} \ No newline at end of file diff --git a/packages/leann-backend-diskann/third_party/DiskANN/CODE_OF_CONDUCT.md b/packages/leann-backend-diskann/third_party/DiskANN/CODE_OF_CONDUCT.md deleted file mode 100644 index f9ba8cf..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/CODE_OF_CONDUCT.md +++ /dev/null @@ -1,9 +0,0 @@ -# Microsoft Open Source Code of Conduct - -This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/). - -Resources: - -- [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/) -- [Microsoft Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) -- Contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with questions or concerns diff --git a/packages/leann-backend-diskann/third_party/DiskANN/CONTRIBUTING.md b/packages/leann-backend-diskann/third_party/DiskANN/CONTRIBUTING.md deleted file mode 100644 index dcbf795..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/CONTRIBUTING.md +++ /dev/null @@ -1,9 +0,0 @@ -# Contributing - -This project welcomes contributions and suggestions. Most contributions require you to agree to a -Contributor License Agreement (CLA) declaring that you have the right to, and actually do, grant us -the rights to use your contribution. For details, visit https://cla.opensource.microsoft.com. - -When you submit a pull request, a CLA bot will automatically determine whether you need to provide -a CLA and decorate the PR appropriately (e.g., status check, comment). Simply follow the instructions -provided by the bot. You will only need to do this once across all repos using our CLA. diff --git a/packages/leann-backend-diskann/third_party/DiskANN/Dockerfile b/packages/leann-backend-diskann/third_party/DiskANN/Dockerfile deleted file mode 100644 index ea1979f..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/Dockerfile +++ /dev/null @@ -1,17 +0,0 @@ -#Copyright(c) Microsoft Corporation.All rights reserved. -#Licensed under the MIT license. - -FROM ubuntu:jammy - -RUN apt update -RUN apt install -y software-properties-common -RUN add-apt-repository -y ppa:git-core/ppa -RUN apt update -RUN DEBIAN_FRONTEND=noninteractive apt install -y git make cmake g++ libaio-dev libgoogle-perftools-dev libunwind-dev clang-format libboost-dev libboost-program-options-dev libmkl-full-dev libcpprest-dev python3.10 - -WORKDIR /app -RUN git clone https://github.com/microsoft/DiskANN.git -WORKDIR /app/DiskANN -RUN mkdir build -RUN cmake -S . -B build -DCMAKE_BUILD_TYPE=Release -RUN cmake --build build -- -j diff --git a/packages/leann-backend-diskann/third_party/DiskANN/DockerfileDev b/packages/leann-backend-diskann/third_party/DiskANN/DockerfileDev deleted file mode 100644 index 0e95e40..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/DockerfileDev +++ /dev/null @@ -1,17 +0,0 @@ -#Copyright(c) Microsoft Corporation.All rights reserved. -#Licensed under the MIT license. - -FROM ubuntu:jammy - -RUN apt update -RUN apt install -y software-properties-common -RUN add-apt-repository -y ppa:git-core/ppa -RUN apt update -RUN DEBIAN_FRONTEND=noninteractive apt install -y git make cmake g++ libaio-dev libgoogle-perftools-dev libunwind-dev clang-format libboost-dev libboost-program-options-dev libboost-test-dev libmkl-full-dev libcpprest-dev python3.10 - -WORKDIR /app -RUN git clone https://github.com/microsoft/DiskANN.git -WORKDIR /app/DiskANN -RUN mkdir build -RUN cmake -S . -B build -DCMAKE_BUILD_TYPE=Release -DUNIT_TEST=True -RUN cmake --build build -- -j diff --git a/packages/leann-backend-diskann/third_party/DiskANN/LICENSE b/packages/leann-backend-diskann/third_party/DiskANN/LICENSE deleted file mode 100644 index b7a909e..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/LICENSE +++ /dev/null @@ -1,23 +0,0 @@ - DiskANN - - MIT License - - Copyright (c) Microsoft Corporation. - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE diff --git a/packages/leann-backend-diskann/third_party/DiskANN/MANIFEST.in b/packages/leann-backend-diskann/third_party/DiskANN/MANIFEST.in deleted file mode 100644 index 0735c27..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/MANIFEST.in +++ /dev/null @@ -1,12 +0,0 @@ -include MANIFEST.in -include *.txt -include *.md -include setup.py -include pyproject.toml -include *.cmake -recursive-include gperftools * -recursive-include include * -recursive-include python * -recursive-include windows * -prune python/tests -recursive-include src * diff --git a/packages/leann-backend-diskann/third_party/DiskANN/README.md b/packages/leann-backend-diskann/third_party/DiskANN/README.md deleted file mode 100644 index 44f4c27..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/README.md +++ /dev/null @@ -1,135 +0,0 @@ -# DiskANN - -[![DiskANN Main](https://github.com/microsoft/DiskANN/actions/workflows/push-test.yml/badge.svg?branch=main)](https://github.com/microsoft/DiskANN/actions/workflows/push-test.yml) -[![PyPI version](https://img.shields.io/pypi/v/diskannpy.svg)](https://pypi.org/project/diskannpy/) -[![Downloads shield](https://pepy.tech/badge/diskannpy)](https://pepy.tech/project/diskannpy) -[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) - -[![DiskANN Paper](https://img.shields.io/badge/Paper-NeurIPS%3A_DiskANN-blue)](https://papers.nips.cc/paper/9527-rand-nsg-fast-accurate-billion-point-nearest-neighbor-search-on-a-single-node.pdf) -[![DiskANN Paper](https://img.shields.io/badge/Paper-Arxiv%3A_Fresh--DiskANN-blue)](https://arxiv.org/abs/2105.09613) -[![DiskANN Paper](https://img.shields.io/badge/Paper-Filtered--DiskANN-blue)](https://harsha-simhadri.org/pubs/Filtered-DiskANN23.pdf) - - -DiskANN is a suite of scalable, accurate and cost-effective approximate nearest neighbor search algorithms for large-scale vector search that support real-time changes and simple filters. -This code is based on ideas from the [DiskANN](https://papers.nips.cc/paper/9527-rand-nsg-fast-accurate-billion-point-nearest-neighbor-search-on-a-single-node.pdf), [Fresh-DiskANN](https://arxiv.org/abs/2105.09613) and the [Filtered-DiskANN](https://harsha-simhadri.org/pubs/Filtered-DiskANN23.pdf) papers with further improvements. -This code forked off from [code for NSG](https://github.com/ZJULearning/nsg) algorithm. - -This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/). -For more information see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or -contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any additional questions or comments. - -See [guidelines](CONTRIBUTING.md) for contributing to this project. - -## Linux build: - -Install the following packages through apt-get - -```bash -sudo apt install make cmake g++ libaio-dev libgoogle-perftools-dev clang-format libboost-all-dev -``` - -### Install Intel MKL -#### Ubuntu 20.04 or newer -```bash -sudo apt install libmkl-full-dev -``` - -#### Earlier versions of Ubuntu -Install Intel MKL either by downloading the [oneAPI MKL installer](https://www.intel.com/content/www/us/en/developer/tools/oneapi/onemkl.html) or using [apt](https://software.intel.com/en-us/articles/installing-intel-free-libs-and-python-apt-repo) (we tested with build 2019.4-070 and 2022.1.2.146). - -``` -# OneAPI MKL Installer -wget https://registrationcenter-download.intel.com/akdlm/irc_nas/18487/l_BaseKit_p_2022.1.2.146.sh -sudo sh l_BaseKit_p_2022.1.2.146.sh -a --components intel.oneapi.lin.mkl.devel --action install --eula accept -s -``` - -### Build -```bash -mkdir build && cd build && cmake -DCMAKE_BUILD_TYPE=Release .. && make -j -``` - -## Windows build: - -The Windows version has been tested with Enterprise editions of Visual Studio 2022, 2019 and 2017. It should work with the Community and Professional editions as well without any changes. - -**Prerequisites:** - -* CMake 3.15+ (available in VisualStudio 2019+ or from https://cmake.org) -* NuGet.exe (install from https://www.nuget.org/downloads) - * The build script will use NuGet to get MKL, OpenMP and Boost packages. -* DiskANN git repository checked out together with submodules. To check out submodules after git clone: -``` -git submodule init -git submodule update -``` - -* Environment variables: - * [optional] If you would like to override the Boost library listed in windows/packages.config.in, set BOOST_ROOT to your Boost folder. - -**Build steps:** -* Open the "x64 Native Tools Command Prompt for VS 2019" (or corresponding version) and change to DiskANN folder -* Create a "build" directory inside it -* Change to the "build" directory and run -``` -cmake .. -``` -OR for Visual Studio 2017 and earlier: -``` -\cmake .. -``` -**This will create a diskann.sln solution**. Now you can: - -- Open it from VisualStudio and build either Release or Debug configuration. -- `\cmake --build build` -- Use MSBuild: -``` -msbuild.exe diskann.sln /m /nologo /t:Build /p:Configuration="Release" /property:Platform="x64" -``` - -* This will also build gperftools submodule for libtcmalloc_minimal dependency. -* Generated binaries are stored in the x64/Release or x64/Debug directories. - -## macOS Build - -### Prerequisites -* Apple Silicon. The code should still work on Intel-based Macs, but there are no guarantees. -* macOS >= 12.0 -* XCode Command Line Tools (install with `xcode-select --install`) -* [homebrew](https://brew.sh/) - -### Install Required Packages -```zsh -brew install cmake -brew install boost -brew install gperftools -brew install libomp -``` - -### Build DiskANN -```zsh -# same as ubuntu instructions -mkdir build && cd build && cmake -DCMAKE_BUILD_TYPE=Release .. && make -j -``` - -## Usage: - -Please see the following pages on using the compiled code: - -- [Commandline interface for building and search SSD based indices](workflows/SSD_index.md) -- [Commandline interface for building and search in memory indices](workflows/in_memory_index.md) -- [Commandline examples for using in-memory streaming indices](workflows/dynamic_index.md) -- [Commandline interface for building and search in memory indices with label data and filters](workflows/filtered_in_memory.md) -- [Commandline interface for building and search SSD based indices with label data and filters](workflows/filtered_ssd_index.md) -- [diskannpy - DiskANN as a python extension module](python/README.md) - -Please cite this software in your work as: - -``` -@misc{diskann-github, - author = {Simhadri, Harsha Vardhan and Krishnaswamy, Ravishankar and Srinivasa, Gopal and Subramanya, Suhas Jayaram and Antonijevic, Andrija and Pryce, Dax and Kaczynski, David and Williams, Shane and Gollapudi, Siddarth and Sivashankar, Varun and Karia, Neel and Singh, Aditi and Jaiswal, Shikhar and Mahapatro, Neelam and Adams, Philip and Tower, Bryan and Patel, Yash}}, - title = {{DiskANN: Graph-structured Indices for Scalable, Fast, Fresh and Filtered Approximate Nearest Neighbor Search}}, - url = {https://github.com/Microsoft/DiskANN}, - version = {0.6.1}, - year = {2023} -} -``` diff --git a/packages/leann-backend-diskann/third_party/DiskANN/SECURITY.md b/packages/leann-backend-diskann/third_party/DiskANN/SECURITY.md deleted file mode 100644 index f7b8998..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/SECURITY.md +++ /dev/null @@ -1,41 +0,0 @@ - - -## Security - -Microsoft takes the security of our software products and services seriously, which includes all source code repositories managed through our GitHub organizations, which include [Microsoft](https://github.com/Microsoft), [Azure](https://github.com/Azure), [DotNet](https://github.com/dotnet), [AspNet](https://github.com/aspnet), [Xamarin](https://github.com/xamarin), and [our GitHub organizations](https://opensource.microsoft.com/). - -If you believe you have found a security vulnerability in any Microsoft-owned repository that meets [Microsoft's definition of a security vulnerability](https://docs.microsoft.com/en-us/previous-versions/tn-archive/cc751383(v=technet.10)), please report it to us as described below. - -## Reporting Security Issues - -**Please do not report security vulnerabilities through public GitHub issues.** - -Instead, please report them to the Microsoft Security Response Center (MSRC) at [https://msrc.microsoft.com/create-report](https://msrc.microsoft.com/create-report). - -If you prefer to submit without logging in, send email to [secure@microsoft.com](mailto:secure@microsoft.com). If possible, encrypt your message with our PGP key; please download it from the [Microsoft Security Response Center PGP Key page](https://www.microsoft.com/en-us/msrc/pgp-key-msrc). - -You should receive a response within 24 hours. If for some reason you do not, please follow up via email to ensure we received your original message. Additional information can be found at [microsoft.com/msrc](https://www.microsoft.com/msrc). - -Please include the requested information listed below (as much as you can provide) to help us better understand the nature and scope of the possible issue: - - * Type of issue (e.g. buffer overflow, SQL injection, cross-site scripting, etc.) - * Full paths of source file(s) related to the manifestation of the issue - * The location of the affected source code (tag/branch/commit or direct URL) - * Any special configuration required to reproduce the issue - * Step-by-step instructions to reproduce the issue - * Proof-of-concept or exploit code (if possible) - * Impact of the issue, including how an attacker might exploit the issue - -This information will help us triage your report more quickly. - -If you are reporting for a bug bounty, more complete reports can contribute to a higher bounty award. Please visit our [Microsoft Bug Bounty Program](https://microsoft.com/msrc/bounty) page for more details about our active programs. - -## Preferred Languages - -We prefer all communications to be in English. - -## Policy - -Microsoft follows the principle of [Coordinated Vulnerability Disclosure](https://www.microsoft.com/en-us/msrc/cvd). - - \ No newline at end of file diff --git a/packages/leann-backend-diskann/third_party/DiskANN/apps/CMakeLists.txt b/packages/leann-backend-diskann/third_party/DiskANN/apps/CMakeLists.txt deleted file mode 100644 index e42c0b6..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/apps/CMakeLists.txt +++ /dev/null @@ -1,42 +0,0 @@ -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT license. - -set(CMAKE_CXX_STANDARD 17) -set(CMAKE_COMPILE_WARNING_AS_ERROR ON) - -add_executable(build_memory_index build_memory_index.cpp) -target_link_libraries(build_memory_index ${PROJECT_NAME} ${DISKANN_TOOLS_TCMALLOC_LINK_OPTIONS} Boost::program_options) - -add_executable(build_stitched_index build_stitched_index.cpp) -target_link_libraries(build_stitched_index ${PROJECT_NAME} ${DISKANN_TOOLS_TCMALLOC_LINK_OPTIONS} Boost::program_options) - -add_executable(search_memory_index search_memory_index.cpp) -target_link_libraries(search_memory_index ${PROJECT_NAME} ${DISKANN_ASYNC_LIB} ${DISKANN_TOOLS_TCMALLOC_LINK_OPTIONS} Boost::program_options) - -add_executable(build_disk_index build_disk_index.cpp) -target_link_libraries(build_disk_index ${PROJECT_NAME} ${DISKANN_TOOLS_TCMALLOC_LINK_OPTIONS} ${DISKANN_ASYNC_LIB} Boost::program_options) - -add_executable(search_disk_index search_disk_index.cpp) -target_link_libraries(search_disk_index ${PROJECT_NAME} ${DISKANN_ASYNC_LIB} ${DISKANN_TOOLS_TCMALLOC_LINK_OPTIONS} Boost::program_options) - -add_executable(range_search_disk_index range_search_disk_index.cpp) -target_link_libraries(range_search_disk_index ${PROJECT_NAME} ${DISKANN_ASYNC_LIB} ${DISKANN_TOOLS_TCMALLOC_LINK_OPTIONS} Boost::program_options) - -add_executable(test_streaming_scenario test_streaming_scenario.cpp) -target_link_libraries(test_streaming_scenario ${PROJECT_NAME} ${DISKANN_TOOLS_TCMALLOC_LINK_OPTIONS} Boost::program_options) - -add_executable(test_insert_deletes_consolidate test_insert_deletes_consolidate.cpp) -target_link_libraries(test_insert_deletes_consolidate ${PROJECT_NAME} ${DISKANN_TOOLS_TCMALLOC_LINK_OPTIONS} Boost::program_options) - -if (NOT MSVC) - install(TARGETS build_memory_index - build_stitched_index - search_memory_index - build_disk_index - search_disk_index - range_search_disk_index - test_streaming_scenario - test_insert_deletes_consolidate - RUNTIME - ) -endif() diff --git a/packages/leann-backend-diskann/third_party/DiskANN/apps/build_disk_index.cpp b/packages/leann-backend-diskann/third_party/DiskANN/apps/build_disk_index.cpp deleted file mode 100644 index f48b617..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/apps/build_disk_index.cpp +++ /dev/null @@ -1,191 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT license. - -#include -#include - -#include "utils.h" -#include "disk_utils.h" -#include "math_utils.h" -#include "index.h" -#include "partition.h" -#include "program_options_utils.hpp" - -namespace po = boost::program_options; - -int main(int argc, char **argv) -{ - std::string data_type, dist_fn, data_path, index_path_prefix, codebook_prefix, label_file, universal_label, - label_type; - uint32_t num_threads, R, L, disk_PQ, build_PQ, QD, Lf, filter_threshold; - float B, M; - bool append_reorder_data = false; - bool use_opq = false; - - po::options_description desc{ - program_options_utils::make_program_description("build_disk_index", "Build a disk-based index.")}; - try - { - desc.add_options()("help,h", "Print information on arguments"); - - // Required parameters - po::options_description required_configs("Required"); - required_configs.add_options()("data_type", po::value(&data_type)->required(), - program_options_utils::DATA_TYPE_DESCRIPTION); - required_configs.add_options()("dist_fn", po::value(&dist_fn)->required(), - program_options_utils::DISTANCE_FUNCTION_DESCRIPTION); - required_configs.add_options()("index_path_prefix", po::value(&index_path_prefix)->required(), - program_options_utils::INDEX_PATH_PREFIX_DESCRIPTION); - required_configs.add_options()("data_path", po::value(&data_path)->required(), - program_options_utils::INPUT_DATA_PATH); - required_configs.add_options()("search_DRAM_budget,B", po::value(&B)->required(), - "DRAM budget in GB for searching the index to set the " - "compressed level for data while search happens"); - required_configs.add_options()("build_DRAM_budget,M", po::value(&M)->required(), - "DRAM budget in GB for building the index"); - - // Optional parameters - po::options_description optional_configs("Optional"); - optional_configs.add_options()("num_threads,T", - po::value(&num_threads)->default_value(omp_get_num_procs()), - program_options_utils::NUMBER_THREADS_DESCRIPTION); - optional_configs.add_options()("max_degree,R", po::value(&R)->default_value(64), - program_options_utils::MAX_BUILD_DEGREE); - optional_configs.add_options()("Lbuild,L", po::value(&L)->default_value(100), - program_options_utils::GRAPH_BUILD_COMPLEXITY); - optional_configs.add_options()("QD", po::value(&QD)->default_value(0), - " Quantized Dimension for compression"); - optional_configs.add_options()("codebook_prefix", po::value(&codebook_prefix)->default_value(""), - "Path prefix for pre-trained codebook"); - optional_configs.add_options()("PQ_disk_bytes", po::value(&disk_PQ)->default_value(0), - "Number of bytes to which vectors should be compressed " - "on SSD; 0 for no compression"); - optional_configs.add_options()("append_reorder_data", po::bool_switch()->default_value(false), - "Include full precision data in the index. Use only in " - "conjuction with compressed data on SSD."); - optional_configs.add_options()("build_PQ_bytes", po::value(&build_PQ)->default_value(0), - program_options_utils::BUIlD_GRAPH_PQ_BYTES); - optional_configs.add_options()("use_opq", po::bool_switch()->default_value(false), - program_options_utils::USE_OPQ); - optional_configs.add_options()("label_file", po::value(&label_file)->default_value(""), - program_options_utils::LABEL_FILE); - optional_configs.add_options()("universal_label", po::value(&universal_label)->default_value(""), - program_options_utils::UNIVERSAL_LABEL); - optional_configs.add_options()("FilteredLbuild", po::value(&Lf)->default_value(0), - program_options_utils::FILTERED_LBUILD); - optional_configs.add_options()("filter_threshold,F", po::value(&filter_threshold)->default_value(0), - "Threshold to break up the existing nodes to generate new graph " - "internally where each node has a maximum F labels."); - optional_configs.add_options()("label_type", po::value(&label_type)->default_value("uint"), - program_options_utils::LABEL_TYPE_DESCRIPTION); - - // Merge required and optional parameters - desc.add(required_configs).add(optional_configs); - - po::variables_map vm; - po::store(po::parse_command_line(argc, argv, desc), vm); - if (vm.count("help")) - { - std::cout << desc; - return 0; - } - po::notify(vm); - if (vm["append_reorder_data"].as()) - append_reorder_data = true; - if (vm["use_opq"].as()) - use_opq = true; - } - catch (const std::exception &ex) - { - std::cerr << ex.what() << '\n'; - return -1; - } - - bool use_filters = (label_file != "") ? true : false; - diskann::Metric metric; - if (dist_fn == std::string("l2")) - metric = diskann::Metric::L2; - else if (dist_fn == std::string("mips")) - metric = diskann::Metric::INNER_PRODUCT; - else if (dist_fn == std::string("cosine")) - metric = diskann::Metric::COSINE; - else - { - std::cout << "Error. Only l2 and mips distance functions are supported" << std::endl; - return -1; - } - - if (append_reorder_data) - { - if (disk_PQ == 0) - { - std::cout << "Error: It is not necessary to append data for reordering " - "when vectors are not compressed on disk." - << std::endl; - return -1; - } - if (data_type != std::string("float")) - { - std::cout << "Error: Appending data for reordering currently only " - "supported for float data type." - << std::endl; - return -1; - } - } - - std::string params = std::string(std::to_string(R)) + " " + std::string(std::to_string(L)) + " " + - std::string(std::to_string(B)) + " " + std::string(std::to_string(M)) + " " + - std::string(std::to_string(num_threads)) + " " + std::string(std::to_string(disk_PQ)) + " " + - std::string(std::to_string(append_reorder_data)) + " " + - std::string(std::to_string(build_PQ)) + " " + std::string(std::to_string(QD)); - - try - { - if (label_file != "" && label_type == "ushort") - { - if (data_type == std::string("int8")) - return diskann::build_disk_index(data_path.c_str(), index_path_prefix.c_str(), params.c_str(), - metric, use_opq, codebook_prefix, use_filters, label_file, - universal_label, filter_threshold, Lf); - else if (data_type == std::string("uint8")) - return diskann::build_disk_index( - data_path.c_str(), index_path_prefix.c_str(), params.c_str(), metric, use_opq, codebook_prefix, - use_filters, label_file, universal_label, filter_threshold, Lf); - else if (data_type == std::string("float")) - return diskann::build_disk_index( - data_path.c_str(), index_path_prefix.c_str(), params.c_str(), metric, use_opq, codebook_prefix, - use_filters, label_file, universal_label, filter_threshold, Lf); - else - { - diskann::cerr << "Error. Unsupported data type" << std::endl; - return -1; - } - } - else - { - if (data_type == std::string("int8")) - return diskann::build_disk_index(data_path.c_str(), index_path_prefix.c_str(), params.c_str(), - metric, use_opq, codebook_prefix, use_filters, label_file, - universal_label, filter_threshold, Lf); - else if (data_type == std::string("uint8")) - return diskann::build_disk_index(data_path.c_str(), index_path_prefix.c_str(), params.c_str(), - metric, use_opq, codebook_prefix, use_filters, label_file, - universal_label, filter_threshold, Lf); - else if (data_type == std::string("float")) - return diskann::build_disk_index(data_path.c_str(), index_path_prefix.c_str(), params.c_str(), - metric, use_opq, codebook_prefix, use_filters, label_file, - universal_label, filter_threshold, Lf); - else - { - diskann::cerr << "Error. Unsupported data type" << std::endl; - return -1; - } - } - } - catch (const std::exception &e) - { - std::cout << std::string(e.what()) << std::endl; - diskann::cerr << "Index build failed." << std::endl; - return -1; - } -} diff --git a/packages/leann-backend-diskann/third_party/DiskANN/apps/build_memory_index.cpp b/packages/leann-backend-diskann/third_party/DiskANN/apps/build_memory_index.cpp deleted file mode 100644 index 544e42d..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/apps/build_memory_index.cpp +++ /dev/null @@ -1,164 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT license. - -#include -#include -#include - -#include "index.h" -#include "utils.h" -#include "program_options_utils.hpp" - -#ifndef _WINDOWS -#include -#include -#else -#include -#endif - -#include "memory_mapper.h" -#include "ann_exception.h" -#include "index_factory.h" - -namespace po = boost::program_options; - -int main(int argc, char **argv) -{ - std::string data_type, dist_fn, data_path, index_path_prefix, label_file, universal_label, label_type; - uint32_t num_threads, R, L, Lf, build_PQ_bytes; - float alpha; - bool use_pq_build, use_opq; - - po::options_description desc{ - program_options_utils::make_program_description("build_memory_index", "Build a memory-based DiskANN index.")}; - try - { - desc.add_options()("help,h", "Print information on arguments"); - - // Required parameters - po::options_description required_configs("Required"); - required_configs.add_options()("data_type", po::value(&data_type)->required(), - program_options_utils::DATA_TYPE_DESCRIPTION); - required_configs.add_options()("dist_fn", po::value(&dist_fn)->required(), - program_options_utils::DISTANCE_FUNCTION_DESCRIPTION); - required_configs.add_options()("index_path_prefix", po::value(&index_path_prefix)->required(), - program_options_utils::INDEX_PATH_PREFIX_DESCRIPTION); - required_configs.add_options()("data_path", po::value(&data_path)->required(), - program_options_utils::INPUT_DATA_PATH); - - // Optional parameters - po::options_description optional_configs("Optional"); - optional_configs.add_options()("num_threads,T", - po::value(&num_threads)->default_value(omp_get_num_procs()), - program_options_utils::NUMBER_THREADS_DESCRIPTION); - optional_configs.add_options()("max_degree,R", po::value(&R)->default_value(64), - program_options_utils::MAX_BUILD_DEGREE); - optional_configs.add_options()("Lbuild,L", po::value(&L)->default_value(100), - program_options_utils::GRAPH_BUILD_COMPLEXITY); - optional_configs.add_options()("alpha", po::value(&alpha)->default_value(1.2f), - program_options_utils::GRAPH_BUILD_ALPHA); - optional_configs.add_options()("build_PQ_bytes", po::value(&build_PQ_bytes)->default_value(0), - program_options_utils::BUIlD_GRAPH_PQ_BYTES); - optional_configs.add_options()("use_opq", po::bool_switch()->default_value(false), - program_options_utils::USE_OPQ); - optional_configs.add_options()("label_file", po::value(&label_file)->default_value(""), - program_options_utils::LABEL_FILE); - optional_configs.add_options()("universal_label", po::value(&universal_label)->default_value(""), - program_options_utils::UNIVERSAL_LABEL); - - optional_configs.add_options()("FilteredLbuild", po::value(&Lf)->default_value(0), - program_options_utils::FILTERED_LBUILD); - optional_configs.add_options()("label_type", po::value(&label_type)->default_value("uint"), - program_options_utils::LABEL_TYPE_DESCRIPTION); - - // Merge required and optional parameters - desc.add(required_configs).add(optional_configs); - - po::variables_map vm; - po::store(po::parse_command_line(argc, argv, desc), vm); - if (vm.count("help")) - { - std::cout << desc; - return 0; - } - po::notify(vm); - use_pq_build = (build_PQ_bytes > 0); - use_opq = vm["use_opq"].as(); - } - catch (const std::exception &ex) - { - std::cerr << ex.what() << '\n'; - return -1; - } - - diskann::Metric metric; - if (dist_fn == std::string("mips")) - { - metric = diskann::Metric::INNER_PRODUCT; - } - else if (dist_fn == std::string("l2")) - { - metric = diskann::Metric::L2; - } - else if (dist_fn == std::string("cosine")) - { - metric = diskann::Metric::COSINE; - } - else - { - std::cout << "Unsupported distance function. Currently only L2/ Inner " - "Product/Cosine are supported." - << std::endl; - return -1; - } - - try - { - diskann::cout << "Starting index build with R: " << R << " Lbuild: " << L << " alpha: " << alpha - << " #threads: " << num_threads << std::endl; - - size_t data_num, data_dim; - diskann::get_bin_metadata(data_path, data_num, data_dim); - - auto index_build_params = diskann::IndexWriteParametersBuilder(L, R) - .with_filter_list_size(Lf) - .with_alpha(alpha) - .with_saturate_graph(false) - .with_num_threads(num_threads) - .build(); - - auto filter_params = diskann::IndexFilterParamsBuilder() - .with_universal_label(universal_label) - .with_label_file(label_file) - .with_save_path_prefix(index_path_prefix) - .build(); - auto config = diskann::IndexConfigBuilder() - .with_metric(metric) - .with_dimension(data_dim) - .with_max_points(data_num) - .with_data_load_store_strategy(diskann::DataStoreStrategy::MEMORY) - .with_graph_load_store_strategy(diskann::GraphStoreStrategy::MEMORY) - .with_data_type(data_type) - .with_label_type(label_type) - .is_dynamic_index(false) - .with_index_write_params(index_build_params) - .is_enable_tags(false) - .is_use_opq(use_opq) - .is_pq_dist_build(use_pq_build) - .with_num_pq_chunks(build_PQ_bytes) - .build(); - - auto index_factory = diskann::IndexFactory(config); - auto index = index_factory.create_instance(); - index->build(data_path, data_num, filter_params); - index->save(index_path_prefix.c_str()); - index.reset(); - return 0; - } - catch (const std::exception &e) - { - std::cout << std::string(e.what()) << std::endl; - diskann::cerr << "Index build failed." << std::endl; - return -1; - } -} diff --git a/packages/leann-backend-diskann/third_party/DiskANN/apps/build_stitched_index.cpp b/packages/leann-backend-diskann/third_party/DiskANN/apps/build_stitched_index.cpp deleted file mode 100644 index 60e38c1..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/apps/build_stitched_index.cpp +++ /dev/null @@ -1,441 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT license. - -#include -#include -#include -#include -#include -#include -#include -#include "filter_utils.h" -#include -#ifndef _WINDOWS -#include -#endif - -#include "index.h" -#include "memory_mapper.h" -#include "parameters.h" -#include "utils.h" -#include "program_options_utils.hpp" - -namespace po = boost::program_options; -typedef std::tuple>, uint64_t> stitch_indices_return_values; - -/* - * Inline function to display progress bar. - */ -inline void print_progress(double percentage) -{ - int val = (int)(percentage * 100); - int lpad = (int)(percentage * PBWIDTH); - int rpad = PBWIDTH - lpad; - printf("\r%3d%% [%.*s%*s]", val, lpad, PBSTR, rpad, ""); - fflush(stdout); -} - -/* - * Inline function to generate a random integer in a range. - */ -inline size_t random(size_t range_from, size_t range_to) -{ - std::random_device rand_dev; - std::mt19937 generator(rand_dev()); - std::uniform_int_distribution distr(range_from, range_to); - return distr(generator); -} - -/* - * function to handle command line parsing. - * - * Arguments are merely the inputs from the command line. - */ -void handle_args(int argc, char **argv, std::string &data_type, path &input_data_path, path &final_index_path_prefix, - path &label_data_path, std::string &universal_label, uint32_t &num_threads, uint32_t &R, uint32_t &L, - uint32_t &stitched_R, float &alpha) -{ - po::options_description desc{ - program_options_utils::make_program_description("build_stitched_index", "Build a stitched DiskANN index.")}; - try - { - desc.add_options()("help,h", "Print information on arguments"); - - // Required parameters - po::options_description required_configs("Required"); - required_configs.add_options()("data_type", po::value(&data_type)->required(), - program_options_utils::DATA_TYPE_DESCRIPTION); - required_configs.add_options()("index_path_prefix", - po::value(&final_index_path_prefix)->required(), - program_options_utils::INDEX_PATH_PREFIX_DESCRIPTION); - required_configs.add_options()("data_path", po::value(&input_data_path)->required(), - program_options_utils::INPUT_DATA_PATH); - - // Optional parameters - po::options_description optional_configs("Optional"); - optional_configs.add_options()("num_threads,T", - po::value(&num_threads)->default_value(omp_get_num_procs()), - program_options_utils::NUMBER_THREADS_DESCRIPTION); - optional_configs.add_options()("max_degree,R", po::value(&R)->default_value(64), - program_options_utils::MAX_BUILD_DEGREE); - optional_configs.add_options()("Lbuild,L", po::value(&L)->default_value(100), - program_options_utils::GRAPH_BUILD_COMPLEXITY); - optional_configs.add_options()("alpha", po::value(&alpha)->default_value(1.2f), - program_options_utils::GRAPH_BUILD_ALPHA); - optional_configs.add_options()("label_file", po::value(&label_data_path)->default_value(""), - program_options_utils::LABEL_FILE); - optional_configs.add_options()("universal_label", po::value(&universal_label)->default_value(""), - program_options_utils::UNIVERSAL_LABEL); - optional_configs.add_options()("stitched_R", po::value(&stitched_R)->default_value(100), - "Degree to prune final graph down to"); - - // Merge required and optional parameters - desc.add(required_configs).add(optional_configs); - - po::variables_map vm; - po::store(po::parse_command_line(argc, argv, desc), vm); - if (vm.count("help")) - { - std::cout << desc; - exit(0); - } - po::notify(vm); - } - catch (const std::exception &ex) - { - std::cerr << ex.what() << '\n'; - throw; - } -} - -/* - * Custom index save to write the in-memory index to disk. - * Also writes required files for diskANN API - - * 1. labels_to_medoids - * 2. universal_label - * 3. data (redundant for static indices) - * 4. labels (redundant for static indices) - */ -void save_full_index(path final_index_path_prefix, path input_data_path, uint64_t final_index_size, - std::vector> stitched_graph, - tsl::robin_map entry_points, std::string universal_label, - path label_data_path) -{ - // aux. file 1 - auto saving_index_timer = std::chrono::high_resolution_clock::now(); - std::ifstream original_label_data_stream; - original_label_data_stream.exceptions(std::ios::badbit | std::ios::failbit); - original_label_data_stream.open(label_data_path, std::ios::binary); - std::ofstream new_label_data_stream; - new_label_data_stream.exceptions(std::ios::badbit | std::ios::failbit); - new_label_data_stream.open(final_index_path_prefix + "_labels.txt", std::ios::binary); - new_label_data_stream << original_label_data_stream.rdbuf(); - original_label_data_stream.close(); - new_label_data_stream.close(); - - // aux. file 2 - std::ifstream original_input_data_stream; - original_input_data_stream.exceptions(std::ios::badbit | std::ios::failbit); - original_input_data_stream.open(input_data_path, std::ios::binary); - std::ofstream new_input_data_stream; - new_input_data_stream.exceptions(std::ios::badbit | std::ios::failbit); - new_input_data_stream.open(final_index_path_prefix + ".data", std::ios::binary); - new_input_data_stream << original_input_data_stream.rdbuf(); - original_input_data_stream.close(); - new_input_data_stream.close(); - - // aux. file 3 - std::ofstream labels_to_medoids_writer; - labels_to_medoids_writer.exceptions(std::ios::badbit | std::ios::failbit); - labels_to_medoids_writer.open(final_index_path_prefix + "_labels_to_medoids.txt"); - for (auto iter : entry_points) - labels_to_medoids_writer << iter.first << ", " << iter.second << std::endl; - labels_to_medoids_writer.close(); - - // aux. file 4 (only if we're using a universal label) - if (universal_label != "") - { - std::ofstream universal_label_writer; - universal_label_writer.exceptions(std::ios::badbit | std::ios::failbit); - universal_label_writer.open(final_index_path_prefix + "_universal_label.txt"); - universal_label_writer << universal_label << std::endl; - universal_label_writer.close(); - } - - // main index - uint64_t index_num_frozen_points = 0, index_num_edges = 0; - uint32_t index_max_observed_degree = 0, index_entry_point = 0; - const size_t METADATA = 2 * sizeof(uint64_t) + 2 * sizeof(uint32_t); - for (auto &point_neighbors : stitched_graph) - { - index_max_observed_degree = std::max(index_max_observed_degree, (uint32_t)point_neighbors.size()); - } - - std::ofstream stitched_graph_writer; - stitched_graph_writer.exceptions(std::ios::badbit | std::ios::failbit); - stitched_graph_writer.open(final_index_path_prefix, std::ios_base::binary); - - stitched_graph_writer.write((char *)&final_index_size, sizeof(uint64_t)); - stitched_graph_writer.write((char *)&index_max_observed_degree, sizeof(uint32_t)); - stitched_graph_writer.write((char *)&index_entry_point, sizeof(uint32_t)); - stitched_graph_writer.write((char *)&index_num_frozen_points, sizeof(uint64_t)); - - size_t bytes_written = METADATA; - for (uint32_t node_point = 0; node_point < stitched_graph.size(); node_point++) - { - uint32_t current_node_num_neighbors = (uint32_t)stitched_graph[node_point].size(); - std::vector current_node_neighbors = stitched_graph[node_point]; - stitched_graph_writer.write((char *)¤t_node_num_neighbors, sizeof(uint32_t)); - bytes_written += sizeof(uint32_t); - for (const auto ¤t_node_neighbor : current_node_neighbors) - { - stitched_graph_writer.write((char *)¤t_node_neighbor, sizeof(uint32_t)); - bytes_written += sizeof(uint32_t); - } - index_num_edges += current_node_num_neighbors; - } - - if (bytes_written != final_index_size) - { - std::cerr << "Error: written bytes does not match allocated space" << std::endl; - throw; - } - - stitched_graph_writer.close(); - - std::chrono::duration saving_index_time = std::chrono::high_resolution_clock::now() - saving_index_timer; - std::cout << "Stitched graph written in " << saving_index_time.count() << " seconds" << std::endl; - std::cout << "Stitched graph average degree: " << ((float)index_num_edges) / ((float)(stitched_graph.size())) - << std::endl; - std::cout << "Stitched graph max degree: " << index_max_observed_degree << std::endl << std::endl; -} - -/* - * Unions the per-label graph indices together via the following policy: - * - any two nodes can only have at most one edge between them - - * - * Returns the "stitched" graph and its expected file size. - */ -template -stitch_indices_return_values stitch_label_indices( - path final_index_path_prefix, uint32_t total_number_of_points, label_set all_labels, - tsl::robin_map labels_to_number_of_points, - tsl::robin_map &label_entry_points, - tsl::robin_map> label_id_to_orig_id_map) -{ - size_t final_index_size = 0; - std::vector> stitched_graph(total_number_of_points); - - auto stitching_index_timer = std::chrono::high_resolution_clock::now(); - for (const auto &lbl : all_labels) - { - path curr_label_index_path(final_index_path_prefix + "_" + lbl); - std::vector> curr_label_index; - uint64_t curr_label_index_size; - uint32_t curr_label_entry_point; - - std::tie(curr_label_index, curr_label_index_size) = - diskann::load_label_index(curr_label_index_path, labels_to_number_of_points[lbl]); - curr_label_entry_point = (uint32_t)random(0, curr_label_index.size()); - label_entry_points[lbl] = label_id_to_orig_id_map[lbl][curr_label_entry_point]; - - for (uint32_t node_point = 0; node_point < curr_label_index.size(); node_point++) - { - uint32_t original_point_id = label_id_to_orig_id_map[lbl][node_point]; - for (auto &node_neighbor : curr_label_index[node_point]) - { - uint32_t original_neighbor_id = label_id_to_orig_id_map[lbl][node_neighbor]; - std::vector curr_point_neighbors = stitched_graph[original_point_id]; - if (std::find(curr_point_neighbors.begin(), curr_point_neighbors.end(), original_neighbor_id) == - curr_point_neighbors.end()) - { - stitched_graph[original_point_id].push_back(original_neighbor_id); - final_index_size += sizeof(uint32_t); - } - } - } - } - - const size_t METADATA = 2 * sizeof(uint64_t) + 2 * sizeof(uint32_t); - final_index_size += (total_number_of_points * sizeof(uint32_t) + METADATA); - - std::chrono::duration stitching_index_time = - std::chrono::high_resolution_clock::now() - stitching_index_timer; - std::cout << "stitched graph generated in memory in " << stitching_index_time.count() << " seconds" << std::endl; - - return std::make_tuple(stitched_graph, final_index_size); -} - -/* - * Applies the prune_neighbors function from src/index.cpp to - * every node in the stitched graph. - * - * This is an optional step, hence the saving of both the full - * and pruned graph. - */ -template -void prune_and_save(path final_index_path_prefix, path full_index_path_prefix, path input_data_path, - std::vector> stitched_graph, uint32_t stitched_R, - tsl::robin_map label_entry_points, std::string universal_label, - path label_data_path, uint32_t num_threads) -{ - size_t dimension, number_of_label_points; - auto diskann_cout_buffer = diskann::cout.rdbuf(nullptr); - auto std_cout_buffer = std::cout.rdbuf(nullptr); - auto pruning_index_timer = std::chrono::high_resolution_clock::now(); - - diskann::get_bin_metadata(input_data_path, number_of_label_points, dimension); - - diskann::Index index(diskann::Metric::L2, dimension, number_of_label_points, nullptr, nullptr, 0, false, false, - false, false, 0, false); - - // not searching this index, set search_l to 0 - index.load(full_index_path_prefix.c_str(), num_threads, 1); - - std::cout << "parsing labels" << std::endl; - - index.prune_all_neighbors(stitched_R, 750, 1.2); - index.save((final_index_path_prefix).c_str()); - - diskann::cout.rdbuf(diskann_cout_buffer); - std::cout.rdbuf(std_cout_buffer); - std::chrono::duration pruning_index_time = std::chrono::high_resolution_clock::now() - pruning_index_timer; - std::cout << "pruning performed in " << pruning_index_time.count() << " seconds\n" << std::endl; -} - -/* - * Delete all temporary artifacts. - * In the process of creating the stitched index, some temporary artifacts are - * created: - * 1. the separate bin files for each labels' points - * 2. the separate diskANN indices built for each label - * 3. the '.data' file created while generating the indices - */ -void clean_up_artifacts(path input_data_path, path final_index_path_prefix, label_set all_labels) -{ - for (const auto &lbl : all_labels) - { - path curr_label_input_data_path(input_data_path + "_" + lbl); - path curr_label_index_path(final_index_path_prefix + "_" + lbl); - path curr_label_index_path_data(curr_label_index_path + ".data"); - - if (std::remove(curr_label_index_path.c_str()) != 0) - throw; - if (std::remove(curr_label_input_data_path.c_str()) != 0) - throw; - if (std::remove(curr_label_index_path_data.c_str()) != 0) - throw; - } -} - -int main(int argc, char **argv) -{ - // 1. handle cmdline inputs - std::string data_type; - path input_data_path, final_index_path_prefix, label_data_path; - std::string universal_label; - uint32_t num_threads, R, L, stitched_R; - float alpha; - - auto index_timer = std::chrono::high_resolution_clock::now(); - handle_args(argc, argv, data_type, input_data_path, final_index_path_prefix, label_data_path, universal_label, - num_threads, R, L, stitched_R, alpha); - - path labels_file_to_use = final_index_path_prefix + "_label_formatted.txt"; - path labels_map_file = final_index_path_prefix + "_labels_map.txt"; - - convert_labels_string_to_int(label_data_path, labels_file_to_use, labels_map_file, universal_label); - - // 2. parse label file and create necessary data structures - std::vector point_ids_to_labels; - tsl::robin_map labels_to_number_of_points; - label_set all_labels; - - std::tie(point_ids_to_labels, labels_to_number_of_points, all_labels) = - diskann::parse_label_file(labels_file_to_use, universal_label); - - // 3. for each label, make a separate data file - tsl::robin_map> label_id_to_orig_id_map; - uint32_t total_number_of_points = (uint32_t)point_ids_to_labels.size(); - -#ifndef _WINDOWS - if (data_type == "uint8") - label_id_to_orig_id_map = diskann::generate_label_specific_vector_files( - input_data_path, labels_to_number_of_points, point_ids_to_labels, all_labels); - else if (data_type == "int8") - label_id_to_orig_id_map = diskann::generate_label_specific_vector_files( - input_data_path, labels_to_number_of_points, point_ids_to_labels, all_labels); - else if (data_type == "float") - label_id_to_orig_id_map = diskann::generate_label_specific_vector_files( - input_data_path, labels_to_number_of_points, point_ids_to_labels, all_labels); - else - throw; -#else - if (data_type == "uint8") - label_id_to_orig_id_map = diskann::generate_label_specific_vector_files_compat( - input_data_path, labels_to_number_of_points, point_ids_to_labels, all_labels); - else if (data_type == "int8") - label_id_to_orig_id_map = diskann::generate_label_specific_vector_files_compat( - input_data_path, labels_to_number_of_points, point_ids_to_labels, all_labels); - else if (data_type == "float") - label_id_to_orig_id_map = diskann::generate_label_specific_vector_files_compat( - input_data_path, labels_to_number_of_points, point_ids_to_labels, all_labels); - else - throw; -#endif - - // 4. for each created data file, create a vanilla diskANN index - if (data_type == "uint8") - diskann::generate_label_indices(input_data_path, final_index_path_prefix, all_labels, R, L, alpha, - num_threads); - else if (data_type == "int8") - diskann::generate_label_indices(input_data_path, final_index_path_prefix, all_labels, R, L, alpha, - num_threads); - else if (data_type == "float") - diskann::generate_label_indices(input_data_path, final_index_path_prefix, all_labels, R, L, alpha, - num_threads); - else - throw; - - // 5. "stitch" the indices together - std::vector> stitched_graph; - tsl::robin_map label_entry_points; - uint64_t stitched_graph_size; - - if (data_type == "uint8") - std::tie(stitched_graph, stitched_graph_size) = - stitch_label_indices(final_index_path_prefix, total_number_of_points, all_labels, - labels_to_number_of_points, label_entry_points, label_id_to_orig_id_map); - else if (data_type == "int8") - std::tie(stitched_graph, stitched_graph_size) = - stitch_label_indices(final_index_path_prefix, total_number_of_points, all_labels, - labels_to_number_of_points, label_entry_points, label_id_to_orig_id_map); - else if (data_type == "float") - std::tie(stitched_graph, stitched_graph_size) = - stitch_label_indices(final_index_path_prefix, total_number_of_points, all_labels, - labels_to_number_of_points, label_entry_points, label_id_to_orig_id_map); - else - throw; - path full_index_path_prefix = final_index_path_prefix + "_full"; - // 5a. save the stitched graph to disk - save_full_index(full_index_path_prefix, input_data_path, stitched_graph_size, stitched_graph, label_entry_points, - universal_label, labels_file_to_use); - - // 6. run a prune on the stitched index, and save to disk - if (data_type == "uint8") - prune_and_save(final_index_path_prefix, full_index_path_prefix, input_data_path, stitched_graph, - stitched_R, label_entry_points, universal_label, labels_file_to_use, num_threads); - else if (data_type == "int8") - prune_and_save(final_index_path_prefix, full_index_path_prefix, input_data_path, stitched_graph, - stitched_R, label_entry_points, universal_label, labels_file_to_use, num_threads); - else if (data_type == "float") - prune_and_save(final_index_path_prefix, full_index_path_prefix, input_data_path, stitched_graph, - stitched_R, label_entry_points, universal_label, labels_file_to_use, num_threads); - else - throw; - - std::chrono::duration index_time = std::chrono::high_resolution_clock::now() - index_timer; - std::cout << "pruned/stitched graph generated in " << index_time.count() << " seconds" << std::endl; - - clean_up_artifacts(input_data_path, final_index_path_prefix, all_labels); -} diff --git a/packages/leann-backend-diskann/third_party/DiskANN/apps/python/README.md b/packages/leann-backend-diskann/third_party/DiskANN/apps/python/README.md deleted file mode 100644 index 2b0bc35..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/apps/python/README.md +++ /dev/null @@ -1,46 +0,0 @@ - - -# Integration Tests -The following tests use Python to prepare, run, verify, and tear down the rest api services. - -We do make use of the built-in `unittest` library, but that's only to take advantage of test reporting purposes. - -These are decidedly **not** _unit_ tests. These are end to end integration tests. - -## Caveats -This has only been tested or built for Linux, though we have written platform agnostic Python for the smoke test -(i.e. using `os.path.join`, etc) - -It has been tested on Python 3.9 and 3.10, but should work on Python 3.6+. - -## How to Run - -First, build the DiskANN RestAPI code; see $REPOSITORY_ROOT/workflows/rest_api.md for detailed instructions. - -```bash -cd tests/python -python3 -m venv venv -source venv/bin/activate -pip install -r requirements.txt - -export DISKANN_BUILD_DIR=/path/to/your/diskann/build -python -m unittest -``` - -## Smoke Test Failed, Now What? -The smoke test written takes advantage of temporary directories that are only valid during the -lifetime of the test. The contents of these directories include: -- Randomized vectors (first in tsv, then bin form) used to build the PQFlashIndex -- The PQFlashIndex files - -It is useful to keep these around. By setting some environment variables, you can control whether an ephemeral, -temporary directory is used (and deleted on test completion), or left as an exercise for the developer to -clean up. - -The valid environment variables are: -- `DISKANN_REST_TEST_WORKING_DIR` (example: `$USER/DiskANNRestTest`) - - If this is specified, it **must exist** and **must be writeable**. Any existing files will be clobbered. -- `DISKANN_REST_SERVER` (example: `http://127.0.0.1:10067`) - - Note that if this is set, no data will be generated, nor will a server be started; it is presumed you have done - all the work in creating and starting the rest server prior to running the test and just submits requests against it. diff --git a/packages/leann-backend-diskann/third_party/DiskANN/apps/python/restapi/__init__.py b/packages/leann-backend-diskann/third_party/DiskANN/apps/python/restapi/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/packages/leann-backend-diskann/third_party/DiskANN/apps/python/restapi/disk_ann_util.py b/packages/leann-backend-diskann/third_party/DiskANN/apps/python/restapi/disk_ann_util.py deleted file mode 100644 index ec89310..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/apps/python/restapi/disk_ann_util.py +++ /dev/null @@ -1,67 +0,0 @@ -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT license. - -import numpy as np -import os -import subprocess - - -def output_vectors( - diskann_build_path: str, - temporary_file_path: str, - vectors: np.ndarray, - timeout: int = 60 -) -> str: - vectors_as_tsv_path = os.path.join(temporary_file_path, "vectors.tsv") - with open(vectors_as_tsv_path, "w") as vectors_tsv_out: - for vector in vectors: - as_str = "\t".join((str(component) for component in vector)) - print(as_str, file=vectors_tsv_out) - # there is probably a clever way to have numpy write out C++ friendly floats, so feel free to remove this in - # favor of something more sane later - vectors_as_bin_path = os.path.join(temporary_file_path, "vectors.bin") - tsv_to_bin_path = os.path.join(diskann_build_path, "apps", "utils", "tsv_to_bin") - - number_of_points, dimensions = vectors.shape - args = [ - tsv_to_bin_path, - "float", - vectors_as_tsv_path, - vectors_as_bin_path, - str(dimensions), - str(number_of_points) - ] - completed = subprocess.run(args, timeout=timeout) - if completed.returncode != 0: - raise Exception(f"Unable to convert tsv to binary using tsv_to_bin, completed_process: {completed}") - return vectors_as_bin_path - - -def build_ssd_index( - diskann_build_path: str, - temporary_file_path: str, - vectors: np.ndarray, - per_process_timeout: int = 60 # this may not be long enough if you're doing something larger -): - vectors_as_bin_path = output_vectors(diskann_build_path, temporary_file_path, vectors, timeout=per_process_timeout) - - ssd_builder_path = os.path.join(diskann_build_path, "apps", "build_disk_index") - args = [ - ssd_builder_path, - "--data_type", "float", - "--dist_fn", "l2", - "--data_path", vectors_as_bin_path, - "--index_path_prefix", os.path.join(temporary_file_path, "smoke_test"), - "-R", "64", - "-L", "100", - "--search_DRAM_budget", "1", - "--build_DRAM_budget", "1", - "--num_threads", "1", - "--PQ_disk_bytes", "0" - ] - completed = subprocess.run(args, timeout=per_process_timeout) - - if completed.returncode != 0: - command_run = " ".join(args) - raise Exception(f"Unable to build a disk index with the command: '{command_run}'\ncompleted_process: {completed}\nstdout: {completed.stdout}\nstderr: {completed.stderr}") - # index is now built inside of temporary_file_path diff --git a/packages/leann-backend-diskann/third_party/DiskANN/apps/range_search_disk_index.cpp b/packages/leann-backend-diskann/third_party/DiskANN/apps/range_search_disk_index.cpp deleted file mode 100644 index 3167572..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/apps/range_search_disk_index.cpp +++ /dev/null @@ -1,379 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT license. - -#include -#include -#include -#include -#include -#include - -#include "index.h" -#include "disk_utils.h" -#include "math_utils.h" -#include "memory_mapper.h" -#include "pq_flash_index.h" -#include "partition.h" -#include "timer.h" -#include "program_options_utils.hpp" - -#ifndef _WINDOWS -#include -#include -#include -#include "linux_aligned_file_reader.h" -#else -#ifdef USE_BING_INFRA -#include "bing_aligned_file_reader.h" -#else -#include "windows_aligned_file_reader.h" -#endif -#endif - -namespace po = boost::program_options; - -#define WARMUP false - -void print_stats(std::string category, std::vector percentiles, std::vector results) -{ - diskann::cout << std::setw(20) << category << ": " << std::flush; - for (uint32_t s = 0; s < percentiles.size(); s++) - { - diskann::cout << std::setw(8) << percentiles[s] << "%"; - } - diskann::cout << std::endl; - diskann::cout << std::setw(22) << " " << std::flush; - for (uint32_t s = 0; s < percentiles.size(); s++) - { - diskann::cout << std::setw(9) << results[s]; - } - diskann::cout << std::endl; -} - -template -int search_disk_index(diskann::Metric &metric, const std::string &index_path_prefix, const std::string &query_file, - std::string >_file, const uint32_t num_threads, const float search_range, - const uint32_t beamwidth, const uint32_t num_nodes_to_cache, const std::vector &Lvec) -{ - std::string pq_prefix = index_path_prefix + "_pq"; - std::string disk_index_file = index_path_prefix + "_disk.index"; - std::string warmup_query_file = index_path_prefix + "_sample_data.bin"; - - diskann::cout << "Search parameters: #threads: " << num_threads << ", "; - if (beamwidth <= 0) - diskann::cout << "beamwidth to be optimized for each L value" << std::endl; - else - diskann::cout << " beamwidth: " << beamwidth << std::endl; - - // load query bin - T *query = nullptr; - std::vector> groundtruth_ids; - size_t query_num, query_dim, query_aligned_dim, gt_num; - diskann::load_aligned_bin(query_file, query, query_num, query_dim, query_aligned_dim); - - bool calc_recall_flag = false; - if (gt_file != std::string("null") && file_exists(gt_file)) - { - diskann::load_range_truthset(gt_file, groundtruth_ids, - gt_num); // use for range search type of truthset - // diskann::prune_truthset_for_range(gt_file, search_range, - // groundtruth_ids, gt_num); // use for traditional truthset - if (gt_num != query_num) - { - diskann::cout << "Error. Mismatch in number of queries and ground truth data" << std::endl; - return -1; - } - calc_recall_flag = true; - } - - std::shared_ptr reader = nullptr; -#ifdef _WINDOWS -#ifndef USE_BING_INFRA - reader.reset(new WindowsAlignedFileReader()); -#else - reader.reset(new diskann::BingAlignedFileReader()); -#endif -#else - reader.reset(new LinuxAlignedFileReader()); -#endif - - std::unique_ptr> _pFlashIndex( - new diskann::PQFlashIndex(reader, metric)); - - int res = _pFlashIndex->load(num_threads, index_path_prefix.c_str()); - - if (res != 0) - { - return res; - } - // cache bfs levels - std::vector node_list; - diskann::cout << "Caching " << num_nodes_to_cache << " BFS nodes around medoid(s)" << std::endl; - _pFlashIndex->cache_bfs_levels(num_nodes_to_cache, node_list); - // _pFlashIndex->generate_cache_list_from_sample_queries( - // warmup_query_file, 15, 6, num_nodes_to_cache, num_threads, - // node_list); - _pFlashIndex->load_cache_list(node_list); - node_list.clear(); - node_list.shrink_to_fit(); - - omp_set_num_threads(num_threads); - - uint64_t warmup_L = 20; - uint64_t warmup_num = 0, warmup_dim = 0, warmup_aligned_dim = 0; - T *warmup = nullptr; - - if (WARMUP) - { - if (file_exists(warmup_query_file)) - { - diskann::load_aligned_bin(warmup_query_file, warmup, warmup_num, warmup_dim, warmup_aligned_dim); - } - else - { - warmup_num = (std::min)((uint32_t)150000, (uint32_t)15000 * num_threads); - warmup_dim = query_dim; - warmup_aligned_dim = query_aligned_dim; - diskann::alloc_aligned(((void **)&warmup), warmup_num * warmup_aligned_dim * sizeof(T), 8 * sizeof(T)); - std::memset(warmup, 0, warmup_num * warmup_aligned_dim * sizeof(T)); - std::random_device rd; - std::mt19937 gen(rd()); - std::uniform_int_distribution<> dis(-128, 127); - for (uint32_t i = 0; i < warmup_num; i++) - { - for (uint32_t d = 0; d < warmup_dim; d++) - { - warmup[i * warmup_aligned_dim + d] = (T)dis(gen); - } - } - } - diskann::cout << "Warming up index... " << std::flush; - std::vector warmup_result_ids_64(warmup_num, 0); - std::vector warmup_result_dists(warmup_num, 0); - -#pragma omp parallel for schedule(dynamic, 1) - for (int64_t i = 0; i < (int64_t)warmup_num; i++) - { - _pFlashIndex->cached_beam_search(warmup + (i * warmup_aligned_dim), 1, warmup_L, - warmup_result_ids_64.data() + (i * 1), - warmup_result_dists.data() + (i * 1), 4); - } - diskann::cout << "..done" << std::endl; - } - - diskann::cout.setf(std::ios_base::fixed, std::ios_base::floatfield); - diskann::cout.precision(2); - - std::string recall_string = "Recall@rng=" + std::to_string(search_range); - diskann::cout << std::setw(6) << "L" << std::setw(12) << "Beamwidth" << std::setw(16) << "QPS" << std::setw(16) - << "Mean Latency" << std::setw(16) << "99.9 Latency" << std::setw(16) << "Mean IOs" << std::setw(16) - << "CPU (s)"; - if (calc_recall_flag) - { - diskann::cout << std::setw(16) << recall_string << std::endl; - } - else - diskann::cout << std::endl; - diskann::cout << "===============================================================" - "===========================================" - << std::endl; - - std::vector>> query_result_ids(Lvec.size()); - - uint32_t optimized_beamwidth = 2; - uint32_t max_list_size = 10000; - - for (uint32_t test_id = 0; test_id < Lvec.size(); test_id++) - { - uint32_t L = Lvec[test_id]; - - if (beamwidth <= 0) - { - optimized_beamwidth = - optimize_beamwidth(_pFlashIndex, warmup, warmup_num, warmup_aligned_dim, L, optimized_beamwidth); - } - else - optimized_beamwidth = beamwidth; - - query_result_ids[test_id].clear(); - query_result_ids[test_id].resize(query_num); - - diskann::QueryStats *stats = new diskann::QueryStats[query_num]; - - auto s = std::chrono::high_resolution_clock::now(); -#pragma omp parallel for schedule(dynamic, 1) - for (int64_t i = 0; i < (int64_t)query_num; i++) - { - std::vector indices; - std::vector distances; - uint32_t res_count = - _pFlashIndex->range_search(query + (i * query_aligned_dim), search_range, L, max_list_size, indices, - distances, optimized_beamwidth, stats + i); - query_result_ids[test_id][i].reserve(res_count); - query_result_ids[test_id][i].resize(res_count); - for (uint32_t idx = 0; idx < res_count; idx++) - query_result_ids[test_id][i][idx] = (uint32_t)indices[idx]; - } - auto e = std::chrono::high_resolution_clock::now(); - std::chrono::duration diff = e - s; - auto qps = (1.0 * query_num) / (1.0 * diff.count()); - - auto mean_latency = diskann::get_mean_stats( - stats, query_num, [](const diskann::QueryStats &stats) { return stats.total_us; }); - - auto latency_999 = diskann::get_percentile_stats( - stats, query_num, 0.999, [](const diskann::QueryStats &stats) { return stats.total_us; }); - - auto mean_ios = diskann::get_mean_stats(stats, query_num, - [](const diskann::QueryStats &stats) { return stats.n_ios; }); - - double mean_cpuus = diskann::get_mean_stats( - stats, query_num, [](const diskann::QueryStats &stats) { return stats.cpu_us; }); - - double recall = 0; - double ratio_of_sums = 0; - if (calc_recall_flag) - { - recall = - diskann::calculate_range_search_recall((uint32_t)query_num, groundtruth_ids, query_result_ids[test_id]); - - uint32_t total_true_positive = 0; - uint32_t total_positive = 0; - for (uint32_t i = 0; i < query_num; i++) - { - total_true_positive += (uint32_t)query_result_ids[test_id][i].size(); - total_positive += (uint32_t)groundtruth_ids[i].size(); - } - - ratio_of_sums = (1.0 * total_true_positive) / (1.0 * total_positive); - } - - diskann::cout << std::setw(6) << L << std::setw(12) << optimized_beamwidth << std::setw(16) << qps - << std::setw(16) << mean_latency << std::setw(16) << latency_999 << std::setw(16) << mean_ios - << std::setw(16) << mean_cpuus; - if (calc_recall_flag) - { - diskann::cout << std::setw(16) << recall << "," << ratio_of_sums << std::endl; - } - else - diskann::cout << std::endl; - } - - diskann::cout << "Done searching. " << std::endl; - - diskann::aligned_free(query); - if (warmup != nullptr) - diskann::aligned_free(warmup); - return 0; -} - -int main(int argc, char **argv) -{ - std::string data_type, dist_fn, index_path_prefix, result_path_prefix, query_file, gt_file; - uint32_t num_threads, W, num_nodes_to_cache; - std::vector Lvec; - float range; - - po::options_description desc{program_options_utils::make_program_description( - "range_search_disk_index", "Searches disk DiskANN indexes using ranges")}; - try - { - desc.add_options()("help,h", "Print information on arguments"); - - // Required parameters - po::options_description required_configs("Required"); - required_configs.add_options()("data_type", po::value(&data_type)->required(), - program_options_utils::DATA_TYPE_DESCRIPTION); - required_configs.add_options()("dist_fn", po::value(&dist_fn)->required(), - program_options_utils::DISTANCE_FUNCTION_DESCRIPTION); - required_configs.add_options()("index_path_prefix", po::value(&index_path_prefix)->required(), - program_options_utils::INDEX_PATH_PREFIX_DESCRIPTION); - required_configs.add_options()("query_file", po::value(&query_file)->required(), - program_options_utils::QUERY_FILE_DESCRIPTION); - required_configs.add_options()("search_list,L", - po::value>(&Lvec)->multitoken()->required(), - program_options_utils::SEARCH_LIST_DESCRIPTION); - required_configs.add_options()("range_threshold,K", po::value(&range)->required(), - "Number of neighbors to be returned"); - - // Optional parameters - po::options_description optional_configs("Optional"); - optional_configs.add_options()("num_threads,T", - po::value(&num_threads)->default_value(omp_get_num_procs()), - program_options_utils::NUMBER_THREADS_DESCRIPTION); - optional_configs.add_options()("gt_file", po::value(>_file)->default_value(std::string("null")), - program_options_utils::GROUND_TRUTH_FILE_DESCRIPTION); - optional_configs.add_options()("num_nodes_to_cache", po::value(&num_nodes_to_cache)->default_value(0), - program_options_utils::NUMBER_OF_NODES_TO_CACHE); - optional_configs.add_options()("beamwidth,W", po::value(&W)->default_value(2), - program_options_utils::BEAMWIDTH); - - // Merge required and optional parameters - desc.add(required_configs).add(optional_configs); - - po::variables_map vm; - po::store(po::parse_command_line(argc, argv, desc), vm); - if (vm.count("help")) - { - std::cout << desc; - return 0; - } - po::notify(vm); - } - catch (const std::exception &ex) - { - std::cerr << ex.what() << '\n'; - return -1; - } - - diskann::Metric metric; - if (dist_fn == std::string("mips")) - { - metric = diskann::Metric::INNER_PRODUCT; - } - else if (dist_fn == std::string("l2")) - { - metric = diskann::Metric::L2; - } - else if (dist_fn == std::string("cosine")) - { - metric = diskann::Metric::COSINE; - } - else - { - std::cout << "Unsupported distance function. Currently only L2/ Inner " - "Product/Cosine are supported." - << std::endl; - return -1; - } - - if ((data_type != std::string("float")) && (metric == diskann::Metric::INNER_PRODUCT)) - { - std::cout << "Currently support only floating point data for Inner Product." << std::endl; - return -1; - } - - try - { - if (data_type == std::string("float")) - return search_disk_index(metric, index_path_prefix, query_file, gt_file, num_threads, range, W, - num_nodes_to_cache, Lvec); - else if (data_type == std::string("int8")) - return search_disk_index(metric, index_path_prefix, query_file, gt_file, num_threads, range, W, - num_nodes_to_cache, Lvec); - else if (data_type == std::string("uint8")) - return search_disk_index(metric, index_path_prefix, query_file, gt_file, num_threads, range, W, - num_nodes_to_cache, Lvec); - else - { - std::cerr << "Unsupported data type. Use float or int8 or uint8" << std::endl; - return -1; - } - } - catch (const std::exception &e) - { - std::cout << std::string(e.what()) << std::endl; - diskann::cerr << "Index search failed." << std::endl; - return -1; - } -} diff --git a/packages/leann-backend-diskann/third_party/DiskANN/apps/restapi/CMakeLists.txt b/packages/leann-backend-diskann/third_party/DiskANN/apps/restapi/CMakeLists.txt deleted file mode 100644 index c73b427..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/apps/restapi/CMakeLists.txt +++ /dev/null @@ -1,40 +0,0 @@ -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT license. - -set(CMAKE_CXX_STANDARD 17) - -add_executable(inmem_server inmem_server.cpp) -if(MSVC) - target_link_options(inmem_server PRIVATE /MACHINE:x64) - target_link_libraries(inmem_server debug ${CMAKE_LIBRARY_OUTPUT_DIRECTORY_DEBUG}/diskann_dll.lib Boost::program_options) - target_link_libraries(inmem_server optimized ${CMAKE_LIBRARY_OUTPUT_DIRECTORY_RELEASE}/diskann_dll.lib Boost::program_options) -else() - target_link_libraries(inmem_server ${PROJECT_NAME} aio -ltcmalloc -lboost_system -lcrypto -lssl -lcpprest Boost::program_options) -endif() - -add_executable(ssd_server ssd_server.cpp) -if(MSVC) - target_link_options(ssd_server PRIVATE /MACHINE:x64) - target_link_libraries(ssd_server debug ${CMAKE_LIBRARY_OUTPUT_DIRECTORY_DEBUG}/diskann_dll.lib Boost::program_options) - target_link_libraries(ssd_server optimized ${CMAKE_LIBRARY_OUTPUT_DIRECTORY_RELEASE}/diskann_dll.lib Boost::program_options) -else() - target_link_libraries(ssd_server ${PROJECT_NAME} aio -ltcmalloc -lboost_system -lcrypto -lssl -lcpprest Boost::program_options) -endif() - -add_executable(multiple_ssdindex_server multiple_ssdindex_server.cpp) -if(MSVC) - target_link_options(multiple_ssdindex_server PRIVATE /MACHINE:x64) - target_link_libraries(multiple_ssdindex_server debug ${CMAKE_LIBRARY_OUTPUT_DIRECTORY_DEBUG}/diskann_dll.lib Boost::program_options) - target_link_libraries(multiple_ssdindex_server optimized ${CMAKE_LIBRARY_OUTPUT_DIRECTORY_RELEASE}/diskann_dll.lib Boost::program_options) -else() - target_link_libraries(multiple_ssdindex_server ${PROJECT_NAME} aio -ltcmalloc -lboost_system -lcrypto -lssl -lcpprest Boost::program_options) -endif() - -add_executable(client client.cpp) -if(MSVC) - target_link_options(client PRIVATE /MACHINE:x64) - target_link_libraries(client debug ${CMAKE_LIBRARY_OUTPUT_DIRECTORY_DEBUG}/diskann_dll.lib Boost::program_options) - target_link_libraries(client optimized ${CMAKE_LIBRARY_OUTPUT_DIRECTORY_RELEASE}/diskann_dll.lib Boost::program_options) -else() - target_link_libraries(client ${PROJECT_NAME} -lboost_system -lcrypto -lssl -lcpprest Boost::program_options) -endif() \ No newline at end of file diff --git a/packages/leann-backend-diskann/third_party/DiskANN/apps/restapi/client.cpp b/packages/leann-backend-diskann/third_party/DiskANN/apps/restapi/client.cpp deleted file mode 100644 index fdf4414..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/apps/restapi/client.cpp +++ /dev/null @@ -1,124 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT license. - -#include -#include -#include -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT license. - -#include -#include -#include -#include - -#include -#include - -using namespace web; -using namespace web::http; -using namespace web::http::client; - -using namespace diskann; -namespace po = boost::program_options; - -template -void query_loop(const std::string &ip_addr_port, const std::string &query_file, const unsigned nq, const unsigned Ls, - const unsigned k_value) -{ - web::http::client::http_client client(U(ip_addr_port)); - - T *data; - size_t npts = 1, ndims = 128, rounded_dim = 128; - diskann::load_aligned_bin(query_file, data, npts, ndims, rounded_dim); - - for (unsigned i = 0; i < nq; ++i) - { - T *vec = data + i * rounded_dim; - web::http::http_request http_query(methods::POST); - web::json::value queryJson = web::json::value::object(); - queryJson[QUERY_ID_KEY] = i; - queryJson[K_KEY] = k_value; - queryJson[L_KEY] = Ls; - for (size_t i = 0; i < ndims; ++i) - { - queryJson[VECTOR_KEY][i] = web::json::value::number(vec[i]); - } - http_query.set_body(queryJson); - - client.request(http_query) - .then([](web::http::http_response response) -> pplx::task { - if (response.status_code() == status_codes::OK) - { - return response.extract_string(); - } - std::cerr << "Query failed" << std::endl; - return pplx::task_from_result(utility::string_t()); - }) - .then([](pplx::task previousTask) { - try - { - std::cout << previousTask.get() << std::endl; - } - catch (http_exception const &e) - { - std::wcout << e.what() << std::endl; - } - }) - .wait(); - } -} - -int main(int argc, char *argv[]) -{ - std::string data_type, query_file, address; - uint32_t num_queries; - uint32_t l_search, k_value; - - po::options_description desc{"Arguments"}; - try - { - desc.add_options()("help,h", "Print information on arguments"); - desc.add_options()("data_type", po::value(&data_type)->required(), "data type "); - desc.add_options()("address", po::value(&address)->required(), "Web server address"); - desc.add_options()("query_file", po::value(&query_file)->required(), - "File containing the queries to search"); - desc.add_options()("num_queries,Q", po::value(&num_queries)->required(), - "Number of queries to search"); - desc.add_options()("l_search", po::value(&l_search)->required(), "Value of L"); - desc.add_options()("k_value,K", po::value(&k_value)->default_value(10), "Value of K (default 10)"); - po::variables_map vm; - po::store(po::parse_command_line(argc, argv, desc), vm); - if (vm.count("help")) - { - std::cout << desc; - return 0; - } - po::notify(vm); - } - catch (const std::exception &ex) - { - std::cerr << ex.what() << std::endl; - return -1; - } - - if (data_type == std::string("float")) - { - query_loop(address, query_file, num_queries, l_search, k_value); - } - else if (data_type == std::string("int8")) - { - query_loop(address, query_file, num_queries, l_search, k_value); - } - else if (data_type == std::string("uint8")) - { - query_loop(address, query_file, num_queries, l_search, k_value); - } - else - { - std::cerr << "Unsupported type " << argv[2] << std::endl; - return -1; - } - - return 0; -} \ No newline at end of file diff --git a/packages/leann-backend-diskann/third_party/DiskANN/apps/restapi/inmem_server.cpp b/packages/leann-backend-diskann/third_party/DiskANN/apps/restapi/inmem_server.cpp deleted file mode 100644 index 11da541..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/apps/restapi/inmem_server.cpp +++ /dev/null @@ -1,138 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT license. - -#include -#include -#include -#include -#include -#include -#include - -#include - -using namespace diskann; -namespace po = boost::program_options; - -std::unique_ptr g_httpServer(nullptr); -std::vector> g_inMemorySearch; - -void setup(const utility::string_t &address, const std::string &typestring) -{ - web::http::uri_builder uriBldr(address); - auto uri = uriBldr.to_uri(); - - std::cout << "Attempting to start server on " << uri.to_string() << std::endl; - - g_httpServer = std::unique_ptr(new Server(uri, g_inMemorySearch, typestring)); - std::cout << "Created a server object" << std::endl; - - g_httpServer->open().wait(); - ucout << U"Listening for requests on: " << address << std::endl; -} - -void teardown(const utility::string_t &address) -{ - g_httpServer->close().wait(); -} - -int main(int argc, char *argv[]) -{ - std::string data_type, index_file, data_file, address, dist_fn, tags_file; - uint32_t num_threads; - uint32_t l_search; - - po::options_description desc{"Arguments"}; - try - { - desc.add_options()("help,h", "Print information on arguments"); - desc.add_options()("data_type", po::value(&data_type)->required(), "data type "); - desc.add_options()("address", po::value(&address)->required(), "Web server address"); - desc.add_options()("data_file", po::value(&data_file)->required(), - "File containing the data found in the index"); - desc.add_options()("index_path_prefix", po::value(&index_file)->required(), - "Path prefix for saving index file components"); - desc.add_options()("num_threads,T", po::value(&num_threads)->required(), - "Number of threads used for building index"); - desc.add_options()("l_search", po::value(&l_search)->required(), "Value of L"); - desc.add_options()("dist_fn", po::value(&dist_fn)->default_value("l2"), - "distance function "); - desc.add_options()("tags_file", po::value(&tags_file)->default_value(std::string()), - "Tags file location"); - po::variables_map vm; - po::store(po::parse_command_line(argc, argv, desc), vm); - if (vm.count("help")) - { - std::cout << desc; - return 0; - } - po::notify(vm); - } - catch (const std::exception &ex) - { - std::cerr << ex.what() << std::endl; - return -1; - } - diskann::Metric metric; - if (dist_fn == std::string("l2")) - metric = diskann::Metric::L2; - else if (dist_fn == std::string("mips")) - metric = diskann::Metric::INNER_PRODUCT; - else - { - std::cout << "Error. Only l2 and mips distance functions are supported" << std::endl; - return -1; - } - - if (data_type == std::string("float")) - { - auto searcher = std::unique_ptr( - new diskann::InMemorySearch(data_file, index_file, tags_file, metric, num_threads, l_search)); - g_inMemorySearch.push_back(std::move(searcher)); - } - else if (data_type == std::string("int8")) - { - auto searcher = std::unique_ptr( - new diskann::InMemorySearch(data_file, index_file, tags_file, metric, num_threads, l_search)); - g_inMemorySearch.push_back(std::move(searcher)); - } - else if (data_type == std::string("uint8")) - { - auto searcher = std::unique_ptr( - new diskann::InMemorySearch(data_file, index_file, tags_file, metric, num_threads, l_search)); - g_inMemorySearch.push_back(std::move(searcher)); - } - else - { - std::cerr << "Unsupported data type " << argv[2] << std::endl; - } - - while (1) - { - try - { - setup(address, data_type); - std::cout << "Type 'exit' (case-sensitive) to exit" << std::endl; - std::string line; - std::getline(std::cin, line); - if (line == "exit") - { - teardown(address); - g_httpServer->close().wait(); - exit(0); - } - } - catch (const std::exception &ex) - { - std::cerr << "Exception occurred: " << ex.what() << std::endl; - std::cerr << "Restarting HTTP server"; - teardown(address); - } - catch (...) - { - std::cerr << "Unknown exception occurreed" << std::endl; - std::cerr << "Restarting HTTP server"; - teardown(address); - } - } -} diff --git a/packages/leann-backend-diskann/third_party/DiskANN/apps/restapi/main.cpp b/packages/leann-backend-diskann/third_party/DiskANN/apps/restapi/main.cpp deleted file mode 100644 index cb48d67..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/apps/restapi/main.cpp +++ /dev/null @@ -1,83 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT license. - -#include -#include -#include -#include - -std::unique_ptr g_httpServer(nullptr); -std::unique_ptr g_inMemorySearch(nullptr); - -void setup(const utility::string_t &address) -{ - web::http::uri_builder uriBldr(address); - auto uri = uriBldr.to_uri(); - - std::wcout << L"Attempting to start server on " << uri.to_string() << std::endl; - - g_httpServer = std::unique_ptr(new Server(uri, g_inMemorySearch)); - g_httpServer->open().wait(); - - ucout << U"Listening for requests on: " << address << std::endl; -} - -void teardown(const utility::string_t &address) -{ - g_httpServer->close().wait(); -} - -void loadIndex(const char *indexFile, const char *baseFile, const char *idsFile) -{ - auto nsgSearch = new diskann::InMemorySearch(baseFile, indexFile, idsFile, diskann::L2); - g_inMemorySearch = std::unique_ptr(nsgSearch); -} - -std::wstring getHostingAddress(const char *hostNameAndPort) -{ - wchar_t buffer[4096]; - mbstowcs_s(nullptr, buffer, sizeof(buffer) / sizeof(buffer[0]), hostNameAndPort, - sizeof(buffer) / sizeof(buffer[0])); - return std::wstring(buffer); -} - -int main(int argc, char *argv[]) -{ - if (argc != 5) - { - std::cout << "Usage: nsg_server " - " " - << std::endl; - exit(1); - } - - auto address = getHostingAddress(argv[1]); - loadIndex(argv[2], argv[3], argv[4]); - while (1) - { - try - { - setup(address); - std::cout << "Type 'exit' (case-sensitive) to exit" << std::endl; - std::string line; - std::getline(std::cin, line); - if (line == "exit") - { - teardown(address); - exit(0); - } - } - catch (const std::exception &ex) - { - std::cerr << "Exception occurred: " << ex.what() << std::endl; - std::cerr << "Restarting HTTP server"; - teardown(address); - } - catch (...) - { - std::cerr << "Unknown exception occurreed" << std::endl; - std::cerr << "Restarting HTTP server"; - teardown(address); - } - } -} diff --git a/packages/leann-backend-diskann/third_party/DiskANN/apps/restapi/multiple_ssdindex_server.cpp b/packages/leann-backend-diskann/third_party/DiskANN/apps/restapi/multiple_ssdindex_server.cpp deleted file mode 100644 index 89cb06f..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/apps/restapi/multiple_ssdindex_server.cpp +++ /dev/null @@ -1,182 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT license. - -#include -#include -#include -#include -#include -#include -#include -#include - -#include - -using namespace diskann; -namespace po = boost::program_options; - -std::unique_ptr g_httpServer(nullptr); -std::vector> g_ssdSearch; - -void setup(const utility::string_t &address, const std::string &typestring) -{ - web::http::uri_builder uriBldr(address); - auto uri = uriBldr.to_uri(); - - std::cout << "Attempting to start server on " << uri.to_string() << std::endl; - - g_httpServer = std::unique_ptr(new Server(uri, g_ssdSearch, typestring)); - std::cout << "Created a server object" << std::endl; - - g_httpServer->open().wait(); - ucout << U"Listening for requests on: " << address << std::endl; -} - -void teardown(const utility::string_t &address) -{ - g_httpServer->close().wait(); -} - -int main(int argc, char *argv[]) -{ - std::string data_type, index_prefix_paths, address, dist_fn, tags_file; - uint32_t num_nodes_to_cache; - uint32_t num_threads; - - po::options_description desc{"Arguments"}; - try - { - desc.add_options()("help,h", "Print information on arguments"); - desc.add_options()("address", po::value(&address)->required(), "Web server address"); - desc.add_options()("data_type", po::value(&data_type)->required(), "data type "); - desc.add_options()("index_prefix_paths", po::value(&index_prefix_paths)->required(), - "Path prefix for loading index file components"); - desc.add_options()("num_nodes_to_cache", po::value(&num_nodes_to_cache)->default_value(0), - "Number of nodes to cache during search"); - desc.add_options()("num_threads,T", po::value(&num_threads)->default_value(omp_get_num_procs()), - "Number of threads used for building index (defaults to " - "omp_get_num_procs())"); - desc.add_options()("dist_fn", po::value(&dist_fn)->default_value("l2"), - "distance function "); - desc.add_options()("tags_file", po::value(&tags_file)->default_value(std::string()), - "Tags file location"); - - po::variables_map vm; - po::store(po::parse_command_line(argc, argv, desc), vm); - if (vm.count("help")) - { - std::cout << desc; - return 0; - } - po::notify(vm); - } - catch (const std::exception &ex) - { - std::cerr << ex.what() << std::endl; - return -1; - } - - diskann::Metric metric; - if (dist_fn == std::string("l2")) - metric = diskann::Metric::L2; - else if (dist_fn == std::string("mips")) - metric = diskann::Metric::INNER_PRODUCT; - else - { - std::cout << "Error. Only l2 and mips distance functions are supported" << std::endl; - return -1; - } - - std::vector> index_tag_paths; - std::ifstream index_in(index_prefix_paths); - if (!index_in.is_open()) - { - std::cerr << "Could not open " << index_prefix_paths << std::endl; - exit(-1); - } - std::ifstream tags_in(tags_file); - if (!tags_in.is_open()) - { - std::cerr << "Could not open " << tags_file << std::endl; - exit(-1); - } - std::string prefix, tagfile; - while (std::getline(index_in, prefix)) - { - if (std::getline(tags_in, tagfile)) - { - index_tag_paths.push_back(std::make_pair(prefix, tagfile)); - } - else - { - std::cerr << "The number of tags specified does not match the number of " - "indices specified" - << std::endl; - exit(-1); - } - } - index_in.close(); - tags_in.close(); - - if (data_type == std::string("float")) - { - for (auto &index_tag : index_tag_paths) - { - auto searcher = std::unique_ptr(new diskann::PQFlashSearch( - index_tag.first.c_str(), num_nodes_to_cache, num_threads, index_tag.second.c_str(), metric)); - g_ssdSearch.push_back(std::move(searcher)); - } - } - else if (data_type == std::string("int8")) - { - for (auto &index_tag : index_tag_paths) - { - auto searcher = std::unique_ptr(new diskann::PQFlashSearch( - index_tag.first.c_str(), num_nodes_to_cache, num_threads, index_tag.second.c_str(), metric)); - g_ssdSearch.push_back(std::move(searcher)); - } - } - else if (data_type == std::string("uint8")) - { - for (auto &index_tag : index_tag_paths) - { - auto searcher = std::unique_ptr(new diskann::PQFlashSearch( - index_tag.first.c_str(), num_nodes_to_cache, num_threads, index_tag.second.c_str(), metric)); - g_ssdSearch.push_back(std::move(searcher)); - } - } - else - { - std::cerr << "Unsupported data type " << data_type << std::endl; - exit(-1); - } - - while (1) - { - try - { - setup(address, data_type); - std::cout << "Type 'exit' (case-sensitive) to exit" << std::endl; - std::string line; - std::getline(std::cin, line); - if (line == "exit") - { - teardown(address); - g_httpServer->close().wait(); - exit(0); - } - } - catch (const std::exception &ex) - { - std::cerr << "Exception occurred: " << ex.what() << std::endl; - std::cerr << "Restarting HTTP server"; - teardown(address); - } - catch (...) - { - std::cerr << "Unknown exception occurreed" << std::endl; - std::cerr << "Restarting HTTP server"; - teardown(address); - } - } -} diff --git a/packages/leann-backend-diskann/third_party/DiskANN/apps/restapi/ssd_server.cpp b/packages/leann-backend-diskann/third_party/DiskANN/apps/restapi/ssd_server.cpp deleted file mode 100644 index d179973..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/apps/restapi/ssd_server.cpp +++ /dev/null @@ -1,141 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT license. - -#include -#include -#include -#include -#include -#include -#include -#include - -#include - -using namespace diskann; -namespace po = boost::program_options; - -std::unique_ptr g_httpServer(nullptr); -std::vector> g_ssdSearch; - -void setup(const utility::string_t &address, const std::string &typestring) -{ - web::http::uri_builder uriBldr(address); - auto uri = uriBldr.to_uri(); - - std::cout << "Attempting to start server on " << uri.to_string() << std::endl; - - g_httpServer = std::unique_ptr(new Server(uri, g_ssdSearch, typestring)); - std::cout << "Created a server object" << std::endl; - - g_httpServer->open().wait(); - ucout << U"Listening for requests on: " << address << std::endl; -} - -void teardown(const utility::string_t &address) -{ - g_httpServer->close().wait(); -} - -int main(int argc, char *argv[]) -{ - std::string data_type, index_path_prefix, address, dist_fn, tags_file; - uint32_t num_nodes_to_cache; - uint32_t num_threads; - - po::options_description desc{"Arguments"}; - try - { - desc.add_options()("help,h", "Print information on arguments"); - desc.add_options()("data_type", po::value(&data_type)->required(), "data type "); - desc.add_options()("address", po::value(&address)->required(), "Web server address"); - desc.add_options()("index_path_prefix", po::value(&index_path_prefix)->required(), - "Path prefix for loading index file components"); - desc.add_options()("num_nodes_to_cache", po::value(&num_nodes_to_cache)->default_value(0), - "Number of nodes to cache during search"); - desc.add_options()("num_threads,T", po::value(&num_threads)->default_value(omp_get_num_procs()), - "Number of threads used for building index (defaults to " - "omp_get_num_procs())"); - desc.add_options()("dist_fn", po::value(&dist_fn)->default_value("l2"), - "distance function "); - desc.add_options()("tags_file", po::value(&tags_file)->default_value(std::string()), - "Tags file location"); - po::variables_map vm; - po::store(po::parse_command_line(argc, argv, desc), vm); - if (vm.count("help")) - { - std::cout << desc; - return 0; - } - po::notify(vm); - } - catch (const std::exception &ex) - { - std::cerr << ex.what() << std::endl; - return -1; - } - - diskann::Metric metric; - if (dist_fn == std::string("l2")) - metric = diskann::Metric::L2; - else if (dist_fn == std::string("mips")) - metric = diskann::Metric::INNER_PRODUCT; - else - { - std::cout << "Error. Only l2 and mips distance functions are supported" << std::endl; - return -1; - } - - if (data_type == std::string("float")) - { - auto searcher = std::unique_ptr( - new diskann::PQFlashSearch(index_path_prefix, num_nodes_to_cache, num_threads, tags_file, metric)); - g_ssdSearch.push_back(std::move(searcher)); - } - else if (data_type == std::string("int8")) - { - auto searcher = std::unique_ptr( - new diskann::PQFlashSearch(index_path_prefix, num_nodes_to_cache, num_threads, tags_file, metric)); - g_ssdSearch.push_back(std::move(searcher)); - } - else if (data_type == std::string("uint8")) - { - auto searcher = std::unique_ptr( - new diskann::PQFlashSearch(index_path_prefix, num_nodes_to_cache, num_threads, tags_file, metric)); - g_ssdSearch.push_back(std::move(searcher)); - } - else - { - std::cerr << "Unsupported data type " << argv[2] << std::endl; - exit(-1); - } - - while (1) - { - try - { - setup(address, data_type); - std::cout << "Type 'exit' (case-sensitive) to exit" << std::endl; - std::string line; - std::getline(std::cin, line); - if (line == "exit") - { - teardown(address); - g_httpServer->close().wait(); - exit(0); - } - } - catch (const std::exception &ex) - { - std::cerr << "Exception occurred: " << ex.what() << std::endl; - std::cerr << "Restarting HTTP server"; - teardown(address); - } - catch (...) - { - std::cerr << "Unknown exception occurreed" << std::endl; - std::cerr << "Restarting HTTP server"; - teardown(address); - } - } -} diff --git a/packages/leann-backend-diskann/third_party/DiskANN/apps/search_disk_index.cpp b/packages/leann-backend-diskann/third_party/DiskANN/apps/search_disk_index.cpp deleted file mode 100644 index 6b0793d..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/apps/search_disk_index.cpp +++ /dev/null @@ -1,499 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT license. - -#include "common_includes.h" -#include - -#include "index.h" -#include "disk_utils.h" -#include "math_utils.h" -#include "memory_mapper.h" -#include "partition.h" -#include "pq_flash_index.h" -#include "timer.h" -#include "percentile_stats.h" -#include "program_options_utils.hpp" - -#ifndef _WINDOWS -#include -#include -#include -#include "linux_aligned_file_reader.h" -#else -#ifdef USE_BING_INFRA -#include "bing_aligned_file_reader.h" -#else -#include "windows_aligned_file_reader.h" -#endif -#endif - -#define WARMUP false - -namespace po = boost::program_options; - -void print_stats(std::string category, std::vector percentiles, std::vector results) -{ - diskann::cout << std::setw(20) << category << ": " << std::flush; - for (uint32_t s = 0; s < percentiles.size(); s++) - { - diskann::cout << std::setw(8) << percentiles[s] << "%"; - } - diskann::cout << std::endl; - diskann::cout << std::setw(22) << " " << std::flush; - for (uint32_t s = 0; s < percentiles.size(); s++) - { - diskann::cout << std::setw(9) << results[s]; - } - diskann::cout << std::endl; -} - -template -int search_disk_index(diskann::Metric &metric, const std::string &index_path_prefix, - const std::string &result_output_prefix, const std::string &query_file, std::string >_file, - const uint32_t num_threads, const uint32_t recall_at, const uint32_t beamwidth, - const uint32_t num_nodes_to_cache, const uint32_t search_io_limit, - const std::vector &Lvec, const float fail_if_recall_below, - const std::vector &query_filters, const bool use_reorder_data = false) -{ - diskann::cout << "Search parameters: #threads: " << num_threads << ", "; - if (beamwidth <= 0) - diskann::cout << "beamwidth to be optimized for each L value" << std::flush; - else - diskann::cout << " beamwidth: " << beamwidth << std::flush; - if (search_io_limit == std::numeric_limits::max()) - diskann::cout << "." << std::endl; - else - diskann::cout << ", io_limit: " << search_io_limit << "." << std::endl; - - std::string warmup_query_file = index_path_prefix + "_sample_data.bin"; - - // load query bin - T *query = nullptr; - uint32_t *gt_ids = nullptr; - float *gt_dists = nullptr; - size_t query_num, query_dim, query_aligned_dim, gt_num, gt_dim; - diskann::load_aligned_bin(query_file, query, query_num, query_dim, query_aligned_dim); - - bool filtered_search = false; - if (!query_filters.empty()) - { - filtered_search = true; - if (query_filters.size() != 1 && query_filters.size() != query_num) - { - std::cout << "Error. Mismatch in number of queries and size of query " - "filters file" - << std::endl; - return -1; // To return -1 or some other error handling? - } - } - - bool calc_recall_flag = false; - if (gt_file != std::string("null") && gt_file != std::string("NULL") && file_exists(gt_file)) - { - diskann::load_truthset(gt_file, gt_ids, gt_dists, gt_num, gt_dim); - if (gt_num != query_num) - { - diskann::cout << "Error. Mismatch in number of queries and ground truth data" << std::endl; - } - calc_recall_flag = true; - } - - std::shared_ptr reader = nullptr; -#ifdef _WINDOWS -#ifndef USE_BING_INFRA - reader.reset(new WindowsAlignedFileReader()); -#else - reader.reset(new diskann::BingAlignedFileReader()); -#endif -#else - reader.reset(new LinuxAlignedFileReader()); -#endif - - std::unique_ptr> _pFlashIndex( - new diskann::PQFlashIndex(reader, metric)); - - int res = _pFlashIndex->load(num_threads, index_path_prefix.c_str()); - - if (res != 0) - { - return res; - } - - std::vector node_list; - diskann::cout << "Caching " << num_nodes_to_cache << " nodes around medoid(s)" << std::endl; - _pFlashIndex->cache_bfs_levels(num_nodes_to_cache, node_list); - // if (num_nodes_to_cache > 0) - // _pFlashIndex->generate_cache_list_from_sample_queries(warmup_query_file, 15, 6, num_nodes_to_cache, - // num_threads, node_list); - _pFlashIndex->load_cache_list(node_list); - node_list.clear(); - node_list.shrink_to_fit(); - - omp_set_num_threads(num_threads); - - uint64_t warmup_L = 20; - uint64_t warmup_num = 0, warmup_dim = 0, warmup_aligned_dim = 0; - T *warmup = nullptr; - - if (WARMUP) - { - if (file_exists(warmup_query_file)) - { - diskann::load_aligned_bin(warmup_query_file, warmup, warmup_num, warmup_dim, warmup_aligned_dim); - } - else - { - warmup_num = (std::min)((uint32_t)150000, (uint32_t)15000 * num_threads); - warmup_dim = query_dim; - warmup_aligned_dim = query_aligned_dim; - diskann::alloc_aligned(((void **)&warmup), warmup_num * warmup_aligned_dim * sizeof(T), 8 * sizeof(T)); - std::memset(warmup, 0, warmup_num * warmup_aligned_dim * sizeof(T)); - std::random_device rd; - std::mt19937 gen(rd()); - std::uniform_int_distribution<> dis(-128, 127); - for (uint32_t i = 0; i < warmup_num; i++) - { - for (uint32_t d = 0; d < warmup_dim; d++) - { - warmup[i * warmup_aligned_dim + d] = (T)dis(gen); - } - } - } - diskann::cout << "Warming up index... " << std::flush; - std::vector warmup_result_ids_64(warmup_num, 0); - std::vector warmup_result_dists(warmup_num, 0); - -#pragma omp parallel for schedule(dynamic, 1) - for (int64_t i = 0; i < (int64_t)warmup_num; i++) - { - _pFlashIndex->cached_beam_search(warmup + (i * warmup_aligned_dim), 1, warmup_L, - warmup_result_ids_64.data() + (i * 1), - warmup_result_dists.data() + (i * 1), 4); - } - diskann::cout << "..done" << std::endl; - } - - diskann::cout.setf(std::ios_base::fixed, std::ios_base::floatfield); - diskann::cout.precision(2); - - std::string recall_string = "Recall@" + std::to_string(recall_at); - diskann::cout << std::setw(6) << "L" << std::setw(12) << "Beamwidth" << std::setw(16) << "QPS" << std::setw(16) - << "Mean Latency" << std::setw(16) << "99.9 Latency" << std::setw(16) << "Mean IOs" << std::setw(16) - << "Mean IO (us)" << std::setw(16) << "CPU (s)"; - if (calc_recall_flag) - { - diskann::cout << std::setw(16) << recall_string << std::endl; - } - else - diskann::cout << std::endl; - diskann::cout << "==================================================================" - "=================================================================" - << std::endl; - - std::vector> query_result_ids(Lvec.size()); - std::vector> query_result_dists(Lvec.size()); - - uint32_t optimized_beamwidth = 2; - - double best_recall = 0.0; - - for (uint32_t test_id = 0; test_id < Lvec.size(); test_id++) - { - uint32_t L = Lvec[test_id]; - - if (L < recall_at) - { - diskann::cout << "Ignoring search with L:" << L << " since it's smaller than K:" << recall_at << std::endl; - continue; - } - - if (beamwidth <= 0) - { - diskann::cout << "Tuning beamwidth.." << std::endl; - optimized_beamwidth = - optimize_beamwidth(_pFlashIndex, warmup, warmup_num, warmup_aligned_dim, L, optimized_beamwidth); - } - else - optimized_beamwidth = beamwidth; - - query_result_ids[test_id].resize(recall_at * query_num); - query_result_dists[test_id].resize(recall_at * query_num); - - auto stats = new diskann::QueryStats[query_num]; - - std::vector query_result_ids_64(recall_at * query_num); - auto s = std::chrono::high_resolution_clock::now(); - -#pragma omp parallel for schedule(dynamic, 1) - for (int64_t i = 0; i < (int64_t)query_num; i++) - { - if (!filtered_search) - { - _pFlashIndex->cached_beam_search(query + (i * query_aligned_dim), recall_at, L, - query_result_ids_64.data() + (i * recall_at), - query_result_dists[test_id].data() + (i * recall_at), - optimized_beamwidth, use_reorder_data, stats + i); - } - else - { - LabelT label_for_search; - if (query_filters.size() == 1) - { // one label for all queries - label_for_search = _pFlashIndex->get_converted_label(query_filters[0]); - } - else - { // one label for each query - label_for_search = _pFlashIndex->get_converted_label(query_filters[i]); - } - _pFlashIndex->cached_beam_search( - query + (i * query_aligned_dim), recall_at, L, query_result_ids_64.data() + (i * recall_at), - query_result_dists[test_id].data() + (i * recall_at), optimized_beamwidth, true, label_for_search, - use_reorder_data, stats + i); - } - } - auto e = std::chrono::high_resolution_clock::now(); - std::chrono::duration diff = e - s; - double qps = (1.0 * query_num) / (1.0 * diff.count()); - - diskann::convert_types(query_result_ids_64.data(), query_result_ids[test_id].data(), - query_num, recall_at); - - auto mean_latency = diskann::get_mean_stats( - stats, query_num, [](const diskann::QueryStats &stats) { return stats.total_us; }); - - auto latency_999 = diskann::get_percentile_stats( - stats, query_num, 0.999, [](const diskann::QueryStats &stats) { return stats.total_us; }); - - auto mean_ios = diskann::get_mean_stats(stats, query_num, - [](const diskann::QueryStats &stats) { return stats.n_ios; }); - - auto mean_cpuus = diskann::get_mean_stats(stats, query_num, - [](const diskann::QueryStats &stats) { return stats.cpu_us; }); - - auto mean_io_us = diskann::get_mean_stats(stats, query_num, - [](const diskann::QueryStats &stats) { return stats.io_us; }); - - double recall = 0; - if (calc_recall_flag) - { - recall = diskann::calculate_recall((uint32_t)query_num, gt_ids, gt_dists, (uint32_t)gt_dim, - query_result_ids[test_id].data(), recall_at, recall_at); - best_recall = std::max(recall, best_recall); - } - - diskann::cout << std::setw(6) << L << std::setw(12) << optimized_beamwidth << std::setw(16) << qps - << std::setw(16) << mean_latency << std::setw(16) << latency_999 << std::setw(16) << mean_ios - << std::setw(16) << mean_io_us << std::setw(16) << mean_cpuus; - if (calc_recall_flag) - { - diskann::cout << std::setw(16) << recall << std::endl; - } - else - diskann::cout << std::endl; - delete[] stats; - } - - diskann::cout << "Done searching. Now saving results " << std::endl; - uint64_t test_id = 0; - for (auto L : Lvec) - { - if (L < recall_at) - continue; - - std::string cur_result_path = result_output_prefix + "_" + std::to_string(L) + "_idx_uint32.bin"; - diskann::save_bin(cur_result_path, query_result_ids[test_id].data(), query_num, recall_at); - - cur_result_path = result_output_prefix + "_" + std::to_string(L) + "_dists_float.bin"; - diskann::save_bin(cur_result_path, query_result_dists[test_id++].data(), query_num, recall_at); - } - - diskann::aligned_free(query); - if (warmup != nullptr) - diskann::aligned_free(warmup); - return best_recall >= fail_if_recall_below ? 0 : -1; -} - -int main(int argc, char **argv) -{ - std::string data_type, dist_fn, index_path_prefix, result_path_prefix, query_file, gt_file, filter_label, - label_type, query_filters_file; - uint32_t num_threads, K, W, num_nodes_to_cache, search_io_limit; - std::vector Lvec; - bool use_reorder_data = false; - float fail_if_recall_below = 0.0f; - - po::options_description desc{ - program_options_utils::make_program_description("search_disk_index", "Searches on-disk DiskANN indexes")}; - try - { - desc.add_options()("help,h", "Print information on arguments"); - - // Required parameters - po::options_description required_configs("Required"); - required_configs.add_options()("data_type", po::value(&data_type)->required(), - program_options_utils::DATA_TYPE_DESCRIPTION); - required_configs.add_options()("dist_fn", po::value(&dist_fn)->required(), - program_options_utils::DISTANCE_FUNCTION_DESCRIPTION); - required_configs.add_options()("index_path_prefix", po::value(&index_path_prefix)->required(), - program_options_utils::INDEX_PATH_PREFIX_DESCRIPTION); - required_configs.add_options()("result_path", po::value(&result_path_prefix)->required(), - program_options_utils::RESULT_PATH_DESCRIPTION); - required_configs.add_options()("query_file", po::value(&query_file)->required(), - program_options_utils::QUERY_FILE_DESCRIPTION); - required_configs.add_options()("recall_at,K", po::value(&K)->required(), - program_options_utils::NUMBER_OF_RESULTS_DESCRIPTION); - required_configs.add_options()("search_list,L", - po::value>(&Lvec)->multitoken()->required(), - program_options_utils::SEARCH_LIST_DESCRIPTION); - - // Optional parameters - po::options_description optional_configs("Optional"); - optional_configs.add_options()("gt_file", po::value(>_file)->default_value(std::string("null")), - program_options_utils::GROUND_TRUTH_FILE_DESCRIPTION); - optional_configs.add_options()("beamwidth,W", po::value(&W)->default_value(2), - program_options_utils::BEAMWIDTH); - optional_configs.add_options()("num_nodes_to_cache", po::value(&num_nodes_to_cache)->default_value(0), - program_options_utils::NUMBER_OF_NODES_TO_CACHE); - optional_configs.add_options()( - "search_io_limit", - po::value(&search_io_limit)->default_value(std::numeric_limits::max()), - "Max #IOs for search. Default value: uint32::max()"); - optional_configs.add_options()("num_threads,T", - po::value(&num_threads)->default_value(omp_get_num_procs()), - program_options_utils::NUMBER_THREADS_DESCRIPTION); - optional_configs.add_options()("use_reorder_data", po::bool_switch()->default_value(false), - "Include full precision data in the index. Use only in " - "conjuction with compressed data on SSD. Default value: false"); - optional_configs.add_options()("filter_label", - po::value(&filter_label)->default_value(std::string("")), - program_options_utils::FILTER_LABEL_DESCRIPTION); - optional_configs.add_options()("query_filters_file", - po::value(&query_filters_file)->default_value(std::string("")), - program_options_utils::FILTERS_FILE_DESCRIPTION); - optional_configs.add_options()("label_type", po::value(&label_type)->default_value("uint"), - program_options_utils::LABEL_TYPE_DESCRIPTION); - optional_configs.add_options()("fail_if_recall_below", - po::value(&fail_if_recall_below)->default_value(0.0f), - program_options_utils::FAIL_IF_RECALL_BELOW); - - // Merge required and optional parameters - desc.add(required_configs).add(optional_configs); - - po::variables_map vm; - po::store(po::parse_command_line(argc, argv, desc), vm); - if (vm.count("help")) - { - std::cout << desc; - return 0; - } - po::notify(vm); - if (vm["use_reorder_data"].as()) - use_reorder_data = true; - } - catch (const std::exception &ex) - { - std::cerr << ex.what() << '\n'; - return -1; - } - - diskann::Metric metric; - if (dist_fn == std::string("mips")) - { - metric = diskann::Metric::INNER_PRODUCT; - } - else if (dist_fn == std::string("l2")) - { - metric = diskann::Metric::L2; - } - else if (dist_fn == std::string("cosine")) - { - metric = diskann::Metric::COSINE; - } - else - { - std::cout << "Unsupported distance function. Currently only L2/ Inner " - "Product/Cosine are supported." - << std::endl; - return -1; - } - - if ((data_type != std::string("float")) && (metric == diskann::Metric::INNER_PRODUCT)) - { - std::cout << "Currently support only floating point data for Inner Product." << std::endl; - return -1; - } - - if (use_reorder_data && data_type != std::string("float")) - { - std::cout << "Error: Reorder data for reordering currently only " - "supported for float data type." - << std::endl; - return -1; - } - - if (filter_label != "" && query_filters_file != "") - { - std::cerr << "Only one of filter_label and query_filters_file should be provided" << std::endl; - return -1; - } - - std::vector query_filters; - if (filter_label != "") - { - query_filters.push_back(filter_label); - } - else if (query_filters_file != "") - { - query_filters = read_file_to_vector_of_strings(query_filters_file); - } - - try - { - if (!query_filters.empty() && label_type == "ushort") - { - if (data_type == std::string("float")) - return search_disk_index( - metric, index_path_prefix, result_path_prefix, query_file, gt_file, num_threads, K, W, - num_nodes_to_cache, search_io_limit, Lvec, fail_if_recall_below, query_filters, use_reorder_data); - else if (data_type == std::string("int8")) - return search_disk_index( - metric, index_path_prefix, result_path_prefix, query_file, gt_file, num_threads, K, W, - num_nodes_to_cache, search_io_limit, Lvec, fail_if_recall_below, query_filters, use_reorder_data); - else if (data_type == std::string("uint8")) - return search_disk_index( - metric, index_path_prefix, result_path_prefix, query_file, gt_file, num_threads, K, W, - num_nodes_to_cache, search_io_limit, Lvec, fail_if_recall_below, query_filters, use_reorder_data); - else - { - std::cerr << "Unsupported data type. Use float or int8 or uint8" << std::endl; - return -1; - } - } - else - { - if (data_type == std::string("float")) - return search_disk_index(metric, index_path_prefix, result_path_prefix, query_file, gt_file, - num_threads, K, W, num_nodes_to_cache, search_io_limit, Lvec, - fail_if_recall_below, query_filters, use_reorder_data); - else if (data_type == std::string("int8")) - return search_disk_index(metric, index_path_prefix, result_path_prefix, query_file, gt_file, - num_threads, K, W, num_nodes_to_cache, search_io_limit, Lvec, - fail_if_recall_below, query_filters, use_reorder_data); - else if (data_type == std::string("uint8")) - return search_disk_index(metric, index_path_prefix, result_path_prefix, query_file, gt_file, - num_threads, K, W, num_nodes_to_cache, search_io_limit, Lvec, - fail_if_recall_below, query_filters, use_reorder_data); - else - { - std::cerr << "Unsupported data type. Use float or int8 or uint8" << std::endl; - return -1; - } - } - } - catch (const std::exception &e) - { - std::cout << std::string(e.what()) << std::endl; - diskann::cerr << "Index search failed." << std::endl; - return -1; - } -} \ No newline at end of file diff --git a/packages/leann-backend-diskann/third_party/DiskANN/apps/search_memory_index.cpp b/packages/leann-backend-diskann/third_party/DiskANN/apps/search_memory_index.cpp deleted file mode 100644 index 1a9acc2..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/apps/search_memory_index.cpp +++ /dev/null @@ -1,477 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT license. - -#include -#include -#include -#include -#include -#include -#include -#include - -#ifndef _WINDOWS -#include -#include -#include -#include -#endif - -#include "index.h" -#include "memory_mapper.h" -#include "utils.h" -#include "program_options_utils.hpp" -#include "index_factory.h" - -namespace po = boost::program_options; - -template -int search_memory_index(diskann::Metric &metric, const std::string &index_path, const std::string &result_path_prefix, - const std::string &query_file, const std::string &truthset_file, const uint32_t num_threads, - const uint32_t recall_at, const bool print_all_recalls, const std::vector &Lvec, - const bool dynamic, const bool tags, const bool show_qps_per_thread, - const std::vector &query_filters, const float fail_if_recall_below) -{ - using TagT = uint32_t; - // Load the query file - T *query = nullptr; - uint32_t *gt_ids = nullptr; - float *gt_dists = nullptr; - size_t query_num, query_dim, query_aligned_dim, gt_num, gt_dim; - diskann::load_aligned_bin(query_file, query, query_num, query_dim, query_aligned_dim); - - bool calc_recall_flag = false; - if (truthset_file != std::string("null") && file_exists(truthset_file)) - { - diskann::load_truthset(truthset_file, gt_ids, gt_dists, gt_num, gt_dim); - if (gt_num != query_num) - { - std::cout << "Error. Mismatch in number of queries and ground truth data" << std::endl; - } - calc_recall_flag = true; - } - else - { - diskann::cout << " Truthset file " << truthset_file << " not found. Not computing recall." << std::endl; - } - - bool filtered_search = false; - if (!query_filters.empty()) - { - filtered_search = true; - if (query_filters.size() != 1 && query_filters.size() != query_num) - { - std::cout << "Error. Mismatch in number of queries and size of query " - "filters file" - << std::endl; - return -1; // To return -1 or some other error handling? - } - } - - const size_t num_frozen_pts = diskann::get_graph_num_frozen_points(index_path); - - auto config = diskann::IndexConfigBuilder() - .with_metric(metric) - .with_dimension(query_dim) - .with_max_points(0) - .with_data_load_store_strategy(diskann::DataStoreStrategy::MEMORY) - .with_graph_load_store_strategy(diskann::GraphStoreStrategy::MEMORY) - .with_data_type(diskann_type_to_name()) - .with_label_type(diskann_type_to_name()) - .with_tag_type(diskann_type_to_name()) - .is_dynamic_index(dynamic) - .is_enable_tags(tags) - .is_concurrent_consolidate(false) - .is_pq_dist_build(false) - .is_use_opq(false) - .with_num_pq_chunks(0) - .with_num_frozen_pts(num_frozen_pts) - .build(); - - auto index_factory = diskann::IndexFactory(config); - auto index = index_factory.create_instance(); - index->load(index_path.c_str(), num_threads, *(std::max_element(Lvec.begin(), Lvec.end()))); - std::cout << "Index loaded" << std::endl; - - if (metric == diskann::FAST_L2) - index->optimize_index_layout(); - - std::cout << "Using " << num_threads << " threads to search" << std::endl; - std::cout.setf(std::ios_base::fixed, std::ios_base::floatfield); - std::cout.precision(2); - const std::string qps_title = show_qps_per_thread ? "QPS/thread" : "QPS"; - uint32_t table_width = 0; - if (tags) - { - std::cout << std::setw(4) << "Ls" << std::setw(12) << qps_title << std::setw(20) << "Mean Latency (mus)" - << std::setw(15) << "99.9 Latency"; - table_width += 4 + 12 + 20 + 15; - } - else - { - std::cout << std::setw(4) << "Ls" << std::setw(12) << qps_title << std::setw(18) << "Avg dist cmps" - << std::setw(20) << "Mean Latency (mus)" << std::setw(15) << "99.9 Latency"; - table_width += 4 + 12 + 18 + 20 + 15; - } - uint32_t recalls_to_print = 0; - const uint32_t first_recall = print_all_recalls ? 1 : recall_at; - if (calc_recall_flag) - { - for (uint32_t curr_recall = first_recall; curr_recall <= recall_at; curr_recall++) - { - std::cout << std::setw(12) << ("Recall@" + std::to_string(curr_recall)); - } - recalls_to_print = recall_at + 1 - first_recall; - table_width += recalls_to_print * 12; - } - std::cout << std::endl; - std::cout << std::string(table_width, '=') << std::endl; - - std::vector> query_result_ids(Lvec.size()); - std::vector> query_result_dists(Lvec.size()); - std::vector latency_stats(query_num, 0); - std::vector cmp_stats; - if (not tags || filtered_search) - { - cmp_stats = std::vector(query_num, 0); - } - - std::vector query_result_tags; - if (tags) - { - query_result_tags.resize(recall_at * query_num); - } - - double best_recall = 0.0; - - for (uint32_t test_id = 0; test_id < Lvec.size(); test_id++) - { - uint32_t L = Lvec[test_id]; - if (L < recall_at) - { - diskann::cout << "Ignoring search with L:" << L << " since it's smaller than K:" << recall_at << std::endl; - continue; - } - - query_result_ids[test_id].resize(recall_at * query_num); - query_result_dists[test_id].resize(recall_at * query_num); - std::vector res = std::vector(); - - auto s = std::chrono::high_resolution_clock::now(); - omp_set_num_threads(num_threads); -#pragma omp parallel for schedule(dynamic, 1) - for (int64_t i = 0; i < (int64_t)query_num; i++) - { - auto qs = std::chrono::high_resolution_clock::now(); - if (filtered_search && !tags) - { - std::string raw_filter = query_filters.size() == 1 ? query_filters[0] : query_filters[i]; - - auto retval = index->search_with_filters(query + i * query_aligned_dim, raw_filter, recall_at, L, - query_result_ids[test_id].data() + i * recall_at, - query_result_dists[test_id].data() + i * recall_at); - cmp_stats[i] = retval.second; - } - else if (metric == diskann::FAST_L2) - { - index->search_with_optimized_layout(query + i * query_aligned_dim, recall_at, L, - query_result_ids[test_id].data() + i * recall_at); - } - else if (tags) - { - if (!filtered_search) - { - index->search_with_tags(query + i * query_aligned_dim, recall_at, L, - query_result_tags.data() + i * recall_at, nullptr, res); - } - else - { - std::string raw_filter = query_filters.size() == 1 ? query_filters[0] : query_filters[i]; - - index->search_with_tags(query + i * query_aligned_dim, recall_at, L, - query_result_tags.data() + i * recall_at, nullptr, res, true, raw_filter); - } - - for (int64_t r = 0; r < (int64_t)recall_at; r++) - { - query_result_ids[test_id][recall_at * i + r] = query_result_tags[recall_at * i + r]; - } - } - else - { - cmp_stats[i] = index - ->search(query + i * query_aligned_dim, recall_at, L, - query_result_ids[test_id].data() + i * recall_at) - .second; - } - auto qe = std::chrono::high_resolution_clock::now(); - std::chrono::duration diff = qe - qs; - latency_stats[i] = (float)(diff.count() * 1000000); - } - std::chrono::duration diff = std::chrono::high_resolution_clock::now() - s; - - double displayed_qps = query_num / diff.count(); - - if (show_qps_per_thread) - displayed_qps /= num_threads; - - std::vector recalls; - if (calc_recall_flag) - { - recalls.reserve(recalls_to_print); - for (uint32_t curr_recall = first_recall; curr_recall <= recall_at; curr_recall++) - { - recalls.push_back(diskann::calculate_recall((uint32_t)query_num, gt_ids, gt_dists, (uint32_t)gt_dim, - query_result_ids[test_id].data(), recall_at, curr_recall)); - } - } - - std::sort(latency_stats.begin(), latency_stats.end()); - double mean_latency = - std::accumulate(latency_stats.begin(), latency_stats.end(), 0.0) / static_cast(query_num); - - float avg_cmps = (float)std::accumulate(cmp_stats.begin(), cmp_stats.end(), 0) / (float)query_num; - - if (tags && !filtered_search) - { - std::cout << std::setw(4) << L << std::setw(12) << displayed_qps << std::setw(20) << (float)mean_latency - << std::setw(15) << (float)latency_stats[(uint64_t)(0.999 * query_num)]; - } - else - { - std::cout << std::setw(4) << L << std::setw(12) << displayed_qps << std::setw(18) << avg_cmps - << std::setw(20) << (float)mean_latency << std::setw(15) - << (float)latency_stats[(uint64_t)(0.999 * query_num)]; - } - for (double recall : recalls) - { - std::cout << std::setw(12) << recall; - best_recall = std::max(recall, best_recall); - } - std::cout << std::endl; - } - - std::cout << "Done searching. Now saving results " << std::endl; - uint64_t test_id = 0; - for (auto L : Lvec) - { - if (L < recall_at) - { - diskann::cout << "Ignoring search with L:" << L << " since it's smaller than K:" << recall_at << std::endl; - continue; - } - std::string cur_result_path_prefix = result_path_prefix + "_" + std::to_string(L); - - std::string cur_result_path = cur_result_path_prefix + "_idx_uint32.bin"; - diskann::save_bin(cur_result_path, query_result_ids[test_id].data(), query_num, recall_at); - - cur_result_path = cur_result_path_prefix + "_dists_float.bin"; - diskann::save_bin(cur_result_path, query_result_dists[test_id].data(), query_num, recall_at); - - test_id++; - } - - diskann::aligned_free(query); - return best_recall >= fail_if_recall_below ? 0 : -1; -} - -int main(int argc, char **argv) -{ - std::string data_type, dist_fn, index_path_prefix, result_path, query_file, gt_file, filter_label, label_type, - query_filters_file; - uint32_t num_threads, K; - std::vector Lvec; - bool print_all_recalls, dynamic, tags, show_qps_per_thread; - float fail_if_recall_below = 0.0f; - - po::options_description desc{ - program_options_utils::make_program_description("search_memory_index", "Searches in-memory DiskANN indexes")}; - try - { - desc.add_options()("help,h", "Print this information on arguments"); - - // Required parameters - po::options_description required_configs("Required"); - required_configs.add_options()("data_type", po::value(&data_type)->required(), - program_options_utils::DATA_TYPE_DESCRIPTION); - required_configs.add_options()("dist_fn", po::value(&dist_fn)->required(), - program_options_utils::DISTANCE_FUNCTION_DESCRIPTION); - required_configs.add_options()("index_path_prefix", po::value(&index_path_prefix)->required(), - program_options_utils::INDEX_PATH_PREFIX_DESCRIPTION); - required_configs.add_options()("result_path", po::value(&result_path)->required(), - program_options_utils::RESULT_PATH_DESCRIPTION); - required_configs.add_options()("query_file", po::value(&query_file)->required(), - program_options_utils::QUERY_FILE_DESCRIPTION); - required_configs.add_options()("recall_at,K", po::value(&K)->required(), - program_options_utils::NUMBER_OF_RESULTS_DESCRIPTION); - required_configs.add_options()("search_list,L", - po::value>(&Lvec)->multitoken()->required(), - program_options_utils::SEARCH_LIST_DESCRIPTION); - - // Optional parameters - po::options_description optional_configs("Optional"); - optional_configs.add_options()("filter_label", - po::value(&filter_label)->default_value(std::string("")), - program_options_utils::FILTER_LABEL_DESCRIPTION); - optional_configs.add_options()("query_filters_file", - po::value(&query_filters_file)->default_value(std::string("")), - program_options_utils::FILTERS_FILE_DESCRIPTION); - optional_configs.add_options()("label_type", po::value(&label_type)->default_value("uint"), - program_options_utils::LABEL_TYPE_DESCRIPTION); - optional_configs.add_options()("gt_file", po::value(>_file)->default_value(std::string("null")), - program_options_utils::GROUND_TRUTH_FILE_DESCRIPTION); - optional_configs.add_options()("num_threads,T", - po::value(&num_threads)->default_value(omp_get_num_procs()), - program_options_utils::NUMBER_THREADS_DESCRIPTION); - optional_configs.add_options()( - "dynamic", po::value(&dynamic)->default_value(false), - "Whether the index is dynamic. Dynamic indices must have associated tags. Default false."); - optional_configs.add_options()("tags", po::value(&tags)->default_value(false), - "Whether to search with external identifiers (tags). Default false."); - optional_configs.add_options()("fail_if_recall_below", - po::value(&fail_if_recall_below)->default_value(0.0f), - program_options_utils::FAIL_IF_RECALL_BELOW); - - // Output controls - po::options_description output_controls("Output controls"); - output_controls.add_options()("print_all_recalls", po::bool_switch(&print_all_recalls), - "Print recalls at all positions, from 1 up to specified " - "recall_at value"); - output_controls.add_options()("print_qps_per_thread", po::bool_switch(&show_qps_per_thread), - "Print overall QPS divided by the number of threads in " - "the output table"); - - // Merge required and optional parameters - desc.add(required_configs).add(optional_configs).add(output_controls); - - po::variables_map vm; - po::store(po::parse_command_line(argc, argv, desc), vm); - if (vm.count("help")) - { - std::cout << desc; - return 0; - } - po::notify(vm); - } - catch (const std::exception &ex) - { - std::cerr << ex.what() << '\n'; - return -1; - } - - diskann::Metric metric; - if ((dist_fn == std::string("mips")) && (data_type == std::string("float"))) - { - metric = diskann::Metric::INNER_PRODUCT; - } - else if (dist_fn == std::string("l2")) - { - metric = diskann::Metric::L2; - } - else if (dist_fn == std::string("cosine")) - { - metric = diskann::Metric::COSINE; - } - else if ((dist_fn == std::string("fast_l2")) && (data_type == std::string("float"))) - { - metric = diskann::Metric::FAST_L2; - } - else - { - std::cout << "Unsupported distance function. Currently only l2/ cosine are " - "supported in general, and mips/fast_l2 only for floating " - "point data." - << std::endl; - return -1; - } - - if (dynamic && not tags) - { - std::cerr << "Tags must be enabled while searching dynamically built indices" << std::endl; - return -1; - } - - if (fail_if_recall_below < 0.0 || fail_if_recall_below >= 100.0) - { - std::cerr << "fail_if_recall_below parameter must be between 0 and 100%" << std::endl; - return -1; - } - - if (filter_label != "" && query_filters_file != "") - { - std::cerr << "Only one of filter_label and query_filters_file should be provided" << std::endl; - return -1; - } - - std::vector query_filters; - if (filter_label != "") - { - query_filters.push_back(filter_label); - } - else if (query_filters_file != "") - { - query_filters = read_file_to_vector_of_strings(query_filters_file); - } - - try - { - if (!query_filters.empty() && label_type == "ushort") - { - if (data_type == std::string("int8")) - { - return search_memory_index( - metric, index_path_prefix, result_path, query_file, gt_file, num_threads, K, print_all_recalls, - Lvec, dynamic, tags, show_qps_per_thread, query_filters, fail_if_recall_below); - } - else if (data_type == std::string("uint8")) - { - return search_memory_index( - metric, index_path_prefix, result_path, query_file, gt_file, num_threads, K, print_all_recalls, - Lvec, dynamic, tags, show_qps_per_thread, query_filters, fail_if_recall_below); - } - else if (data_type == std::string("float")) - { - return search_memory_index(metric, index_path_prefix, result_path, query_file, gt_file, - num_threads, K, print_all_recalls, Lvec, dynamic, tags, - show_qps_per_thread, query_filters, fail_if_recall_below); - } - else - { - std::cout << "Unsupported type. Use float/int8/uint8" << std::endl; - return -1; - } - } - else - { - if (data_type == std::string("int8")) - { - return search_memory_index(metric, index_path_prefix, result_path, query_file, gt_file, - num_threads, K, print_all_recalls, Lvec, dynamic, tags, - show_qps_per_thread, query_filters, fail_if_recall_below); - } - else if (data_type == std::string("uint8")) - { - return search_memory_index(metric, index_path_prefix, result_path, query_file, gt_file, - num_threads, K, print_all_recalls, Lvec, dynamic, tags, - show_qps_per_thread, query_filters, fail_if_recall_below); - } - else if (data_type == std::string("float")) - { - return search_memory_index(metric, index_path_prefix, result_path, query_file, gt_file, - num_threads, K, print_all_recalls, Lvec, dynamic, tags, - show_qps_per_thread, query_filters, fail_if_recall_below); - } - else - { - std::cout << "Unsupported type. Use float/int8/uint8" << std::endl; - return -1; - } - } - } - catch (std::exception &e) - { - std::cout << std::string(e.what()) << std::endl; - diskann::cerr << "Index search failed." << std::endl; - return -1; - } -} diff --git a/packages/leann-backend-diskann/third_party/DiskANN/apps/test_insert_deletes_consolidate.cpp b/packages/leann-backend-diskann/third_party/DiskANN/apps/test_insert_deletes_consolidate.cpp deleted file mode 100644 index 97aed18..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/apps/test_insert_deletes_consolidate.cpp +++ /dev/null @@ -1,536 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT license. - -#include -#include -#include -#include -#include -#include -#include -#include - -#include "utils.h" -#include "filter_utils.h" -#include "program_options_utils.hpp" -#include "index_factory.h" - -#ifndef _WINDOWS -#include -#include -#include -#endif - -#include "memory_mapper.h" - -namespace po = boost::program_options; - -// load_aligned_bin modified to read pieces of the file, but using ifstream -// instead of cached_ifstream. -template -inline void load_aligned_bin_part(const std::string &bin_file, T *data, size_t offset_points, size_t points_to_read) -{ - diskann::Timer timer; - std::ifstream reader; - reader.exceptions(std::ios::failbit | std::ios::badbit); - reader.open(bin_file, std::ios::binary | std::ios::ate); - size_t actual_file_size = reader.tellg(); - reader.seekg(0, std::ios::beg); - - int npts_i32, dim_i32; - reader.read((char *)&npts_i32, sizeof(int)); - reader.read((char *)&dim_i32, sizeof(int)); - size_t npts = (uint32_t)npts_i32; - size_t dim = (uint32_t)dim_i32; - - size_t expected_actual_file_size = npts * dim * sizeof(T) + 2 * sizeof(uint32_t); - if (actual_file_size != expected_actual_file_size) - { - std::stringstream stream; - stream << "Error. File size mismatch. Actual size is " << actual_file_size << " while expected size is " - << expected_actual_file_size << " npts = " << npts << " dim = " << dim << " size of = " << sizeof(T) - << std::endl; - std::cout << stream.str(); - throw diskann::ANNException(stream.str(), -1, __FUNCSIG__, __FILE__, __LINE__); - } - - if (offset_points + points_to_read > npts) - { - std::stringstream stream; - stream << "Error. Not enough points in file. Requested " << offset_points << " offset and " << points_to_read - << " points, but have only " << npts << " points" << std::endl; - std::cout << stream.str(); - throw diskann::ANNException(stream.str(), -1, __FUNCSIG__, __FILE__, __LINE__); - } - - reader.seekg(2 * sizeof(uint32_t) + offset_points * dim * sizeof(T)); - - const size_t rounded_dim = ROUND_UP(dim, 8); - - for (size_t i = 0; i < points_to_read; i++) - { - reader.read((char *)(data + i * rounded_dim), dim * sizeof(T)); - memset(data + i * rounded_dim + dim, 0, (rounded_dim - dim) * sizeof(T)); - } - reader.close(); - - const double elapsedSeconds = timer.elapsed() / 1000000.0; - std::cout << "Read " << points_to_read << " points using non-cached reads in " << elapsedSeconds << std::endl; -} - -std::string get_save_filename(const std::string &save_path, size_t points_to_skip, size_t points_deleted, - size_t last_point_threshold) -{ - std::string final_path = save_path; - if (points_to_skip > 0) - { - final_path += "skip" + std::to_string(points_to_skip) + "-"; - } - - final_path += "del" + std::to_string(points_deleted) + "-"; - final_path += std::to_string(last_point_threshold); - return final_path; -} - -template -void insert_till_next_checkpoint(diskann::AbstractIndex &index, size_t start, size_t end, int32_t thread_count, T *data, - size_t aligned_dim, std::vector> &location_to_labels) -{ - diskann::Timer insert_timer; -#pragma omp parallel for num_threads(thread_count) schedule(dynamic) - for (int64_t j = start; j < (int64_t)end; j++) - { - if (!location_to_labels.empty()) - { - index.insert_point(&data[(j - start) * aligned_dim], 1 + static_cast(j), - location_to_labels[j - start]); - } - else - { - index.insert_point(&data[(j - start) * aligned_dim], 1 + static_cast(j)); - } - } - const double elapsedSeconds = insert_timer.elapsed() / 1000000.0; - std::cout << "Insertion time " << elapsedSeconds << " seconds (" << (end - start) / elapsedSeconds - << " points/second overall, " << (end - start) / elapsedSeconds / thread_count << " per thread)\n "; -} - -template -void delete_from_beginning(diskann::AbstractIndex &index, diskann::IndexWriteParameters &delete_params, - size_t points_to_skip, size_t points_to_delete_from_beginning) -{ - try - { - std::cout << std::endl - << "Lazy deleting points " << points_to_skip << " to " - << points_to_skip + points_to_delete_from_beginning << "... "; - for (size_t i = points_to_skip; i < points_to_skip + points_to_delete_from_beginning; ++i) - index.lazy_delete(static_cast(i + 1)); // Since tags are data location + 1 - std::cout << "done." << std::endl; - - auto report = index.consolidate_deletes(delete_params); - std::cout << "#active points: " << report._active_points << std::endl - << "max points: " << report._max_points << std::endl - << "empty slots: " << report._empty_slots << std::endl - << "deletes processed: " << report._slots_released << std::endl - << "latest delete size: " << report._delete_set_size << std::endl - << "rate: (" << points_to_delete_from_beginning / report._time << " points/second overall, " - << points_to_delete_from_beginning / report._time / delete_params.num_threads << " per thread)" - << std::endl; - } - catch (std::system_error &e) - { - std::cout << "Exception caught in deletion thread: " << e.what() << std::endl; - } -} - -template -void build_incremental_index(const std::string &data_path, diskann::IndexWriteParameters ¶ms, size_t points_to_skip, - size_t max_points_to_insert, size_t beginning_index_size, float start_point_norm, - uint32_t num_start_pts, size_t points_per_checkpoint, size_t checkpoints_per_snapshot, - const std::string &save_path, size_t points_to_delete_from_beginning, - size_t start_deletes_after, bool concurrent, const std::string &label_file, - const std::string &universal_label) -{ - size_t dim, aligned_dim; - size_t num_points; - diskann::get_bin_metadata(data_path, num_points, dim); - aligned_dim = ROUND_UP(dim, 8); - bool has_labels = label_file != ""; - using TagT = uint32_t; - using LabelT = uint32_t; - - size_t current_point_offset = points_to_skip; - const size_t last_point_threshold = points_to_skip + max_points_to_insert; - - bool enable_tags = true; - using TagT = uint32_t; - auto index_search_params = diskann::IndexSearchParams(params.search_list_size, params.num_threads); - diskann::IndexConfig index_config = diskann::IndexConfigBuilder() - .with_metric(diskann::L2) - .with_dimension(dim) - .with_max_points(max_points_to_insert) - .is_dynamic_index(true) - .with_index_write_params(params) - .with_index_search_params(index_search_params) - .with_data_type(diskann_type_to_name()) - .with_tag_type(diskann_type_to_name()) - .with_label_type(diskann_type_to_name()) - .with_data_load_store_strategy(diskann::DataStoreStrategy::MEMORY) - .with_graph_load_store_strategy(diskann::GraphStoreStrategy::MEMORY) - .is_enable_tags(enable_tags) - .is_filtered(has_labels) - .with_num_frozen_pts(num_start_pts) - .is_concurrent_consolidate(concurrent) - .build(); - - diskann::IndexFactory index_factory = diskann::IndexFactory(index_config); - auto index = index_factory.create_instance(); - - if (universal_label != "") - { - LabelT u_label = 0; - index->set_universal_label(u_label); - } - - if (points_to_skip > num_points) - { - throw diskann::ANNException("Asked to skip more points than in data file", -1, __FUNCSIG__, __FILE__, __LINE__); - } - - if (max_points_to_insert == 0) - { - max_points_to_insert = num_points; - } - - if (points_to_skip + max_points_to_insert > num_points) - { - max_points_to_insert = num_points - points_to_skip; - std::cerr << "WARNING: Reducing max_points_to_insert to " << max_points_to_insert - << " points since the data file has only that many" << std::endl; - } - - if (beginning_index_size > max_points_to_insert) - { - beginning_index_size = max_points_to_insert; - std::cerr << "WARNING: Reducing beginning index size to " << beginning_index_size - << " points since the data file has only that many" << std::endl; - } - if (checkpoints_per_snapshot > 0 && beginning_index_size > points_per_checkpoint) - { - beginning_index_size = points_per_checkpoint; - std::cerr << "WARNING: Reducing beginning index size to " << beginning_index_size << std::endl; - } - - T *data = nullptr; - diskann::alloc_aligned( - (void **)&data, std::max(points_per_checkpoint, beginning_index_size) * aligned_dim * sizeof(T), 8 * sizeof(T)); - - std::vector tags(beginning_index_size); - std::iota(tags.begin(), tags.end(), 1 + static_cast(current_point_offset)); - - load_aligned_bin_part(data_path, data, current_point_offset, beginning_index_size); - std::cout << "load aligned bin succeeded" << std::endl; - diskann::Timer timer; - - if (beginning_index_size > 0) - { - index->build(data, beginning_index_size, tags); - } - else - { - index->set_start_points_at_random(static_cast(start_point_norm)); - } - - const double elapsedSeconds = timer.elapsed() / 1000000.0; - std::cout << "Initial non-incremental index build time for " << beginning_index_size << " points took " - << elapsedSeconds << " seconds (" << beginning_index_size / elapsedSeconds << " points/second)\n "; - - current_point_offset += beginning_index_size; - - if (points_to_delete_from_beginning > max_points_to_insert) - { - points_to_delete_from_beginning = static_cast(max_points_to_insert); - std::cerr << "WARNING: Reducing points to delete from beginning to " << points_to_delete_from_beginning - << " points since the data file has only that many" << std::endl; - } - - std::vector> location_to_labels; - if (concurrent) - { - // handle labels - const auto save_path_inc = get_save_filename(save_path + ".after-concurrent-delete-", points_to_skip, - points_to_delete_from_beginning, last_point_threshold); - std::string labels_file_to_use = save_path_inc + "_label_formatted.txt"; - std::string mem_labels_int_map_file = save_path_inc + "_labels_map.txt"; - if (has_labels) - { - convert_labels_string_to_int(label_file, labels_file_to_use, mem_labels_int_map_file, universal_label); - auto parse_result = diskann::parse_formatted_label_file(labels_file_to_use); - location_to_labels = std::get<0>(parse_result); - } - - int32_t sub_threads = (params.num_threads + 1) / 2; - bool delete_launched = false; - std::future delete_task; - - diskann::Timer timer; - - for (size_t start = current_point_offset; start < last_point_threshold; - start += points_per_checkpoint, current_point_offset += points_per_checkpoint) - { - const size_t end = std::min(start + points_per_checkpoint, last_point_threshold); - std::cout << std::endl << "Inserting from " << start << " to " << end << std::endl; - - auto insert_task = std::async(std::launch::async, [&]() { - load_aligned_bin_part(data_path, data, start, end - start); - insert_till_next_checkpoint(*index, start, end, sub_threads, data, aligned_dim, - location_to_labels); - }); - insert_task.wait(); - - if (!delete_launched && end >= start_deletes_after && - end >= points_to_skip + points_to_delete_from_beginning) - { - delete_launched = true; - diskann::IndexWriteParameters delete_params = - diskann::IndexWriteParametersBuilder(params).with_num_threads(sub_threads).build(); - - delete_task = std::async(std::launch::async, [&]() { - delete_from_beginning(*index, delete_params, points_to_skip, - points_to_delete_from_beginning); - }); - } - } - delete_task.wait(); - - std::cout << "Time Elapsed " << timer.elapsed() / 1000 << "ms\n"; - index->save(save_path_inc.c_str(), true); - } - else - { - const auto save_path_inc = get_save_filename(save_path + ".after-delete-", points_to_skip, - points_to_delete_from_beginning, last_point_threshold); - std::string labels_file_to_use = save_path_inc + "_label_formatted.txt"; - std::string mem_labels_int_map_file = save_path_inc + "_labels_map.txt"; - if (has_labels) - { - convert_labels_string_to_int(label_file, labels_file_to_use, mem_labels_int_map_file, universal_label); - auto parse_result = diskann::parse_formatted_label_file(labels_file_to_use); - location_to_labels = std::get<0>(parse_result); - } - - size_t last_snapshot_points_threshold = 0; - size_t num_checkpoints_till_snapshot = checkpoints_per_snapshot; - - for (size_t start = current_point_offset; start < last_point_threshold; - start += points_per_checkpoint, current_point_offset += points_per_checkpoint) - { - const size_t end = std::min(start + points_per_checkpoint, last_point_threshold); - std::cout << std::endl << "Inserting from " << start << " to " << end << std::endl; - - load_aligned_bin_part(data_path, data, start, end - start); - insert_till_next_checkpoint(*index, start, end, (int32_t)params.num_threads, data, - aligned_dim, location_to_labels); - - if (checkpoints_per_snapshot > 0 && --num_checkpoints_till_snapshot == 0) - { - diskann::Timer save_timer; - - const auto save_path_inc = - get_save_filename(save_path + ".inc-", points_to_skip, points_to_delete_from_beginning, end); - index->save(save_path_inc.c_str(), false); - const double elapsedSeconds = save_timer.elapsed() / 1000000.0; - const size_t points_saved = end - points_to_skip; - - std::cout << "Saved " << points_saved << " points in " << elapsedSeconds << " seconds (" - << points_saved / elapsedSeconds << " points/second)\n"; - - num_checkpoints_till_snapshot = checkpoints_per_snapshot; - last_snapshot_points_threshold = end; - } - - std::cout << "Number of points in the index post insertion " << end << std::endl; - } - - if (checkpoints_per_snapshot > 0 && last_snapshot_points_threshold != last_point_threshold) - { - const auto save_path_inc = get_save_filename(save_path + ".inc-", points_to_skip, - points_to_delete_from_beginning, last_point_threshold); - // index.save(save_path_inc.c_str(), false); - } - - if (points_to_delete_from_beginning > 0) - { - delete_from_beginning(*index, params, points_to_skip, points_to_delete_from_beginning); - } - - index->save(save_path_inc.c_str(), true); - } - - diskann::aligned_free(data); -} - -int main(int argc, char **argv) -{ - std::string data_type, dist_fn, data_path, index_path_prefix; - uint32_t num_threads, R, L, num_start_pts; - float alpha, start_point_norm; - size_t points_to_skip, max_points_to_insert, beginning_index_size, points_per_checkpoint, checkpoints_per_snapshot, - points_to_delete_from_beginning, start_deletes_after; - bool concurrent; - - // label options - std::string label_file, label_type, universal_label; - std::uint32_t Lf, unique_labels_supported; - - po::options_description desc{program_options_utils::make_program_description("test_insert_deletes_consolidate", - "Test insert deletes & consolidate")}; - try - { - desc.add_options()("help,h", "Print information on arguments"); - - // Required parameters - po::options_description required_configs("Required"); - required_configs.add_options()("data_type", po::value(&data_type)->required(), - program_options_utils::DATA_TYPE_DESCRIPTION); - required_configs.add_options()("dist_fn", po::value(&dist_fn)->required(), - program_options_utils::DISTANCE_FUNCTION_DESCRIPTION); - required_configs.add_options()("index_path_prefix", po::value(&index_path_prefix)->required(), - program_options_utils::INDEX_PATH_PREFIX_DESCRIPTION); - required_configs.add_options()("data_path", po::value(&data_path)->required(), - program_options_utils::INPUT_DATA_PATH); - required_configs.add_options()("points_to_skip", po::value(&points_to_skip)->required(), - "Skip these first set of points from file"); - required_configs.add_options()("beginning_index_size", po::value(&beginning_index_size)->required(), - "Batch build will be called on these set of points"); - required_configs.add_options()("points_per_checkpoint", po::value(&points_per_checkpoint)->required(), - "Insertions are done in batches of points_per_checkpoint"); - required_configs.add_options()("checkpoints_per_snapshot", - po::value(&checkpoints_per_snapshot)->required(), - "Save the index to disk every few checkpoints"); - required_configs.add_options()("points_to_delete_from_beginning", - po::value(&points_to_delete_from_beginning)->required(), ""); - - // Optional parameters - po::options_description optional_configs("Optional"); - optional_configs.add_options()("num_threads,T", - po::value(&num_threads)->default_value(omp_get_num_procs()), - program_options_utils::NUMBER_THREADS_DESCRIPTION); - optional_configs.add_options()("max_degree,R", po::value(&R)->default_value(64), - program_options_utils::MAX_BUILD_DEGREE); - optional_configs.add_options()("Lbuild,L", po::value(&L)->default_value(100), - program_options_utils::GRAPH_BUILD_COMPLEXITY); - optional_configs.add_options()("alpha", po::value(&alpha)->default_value(1.2f), - program_options_utils::GRAPH_BUILD_ALPHA); - optional_configs.add_options()("max_points_to_insert", - po::value(&max_points_to_insert)->default_value(0), - "These number of points from the file are inserted after " - "points_to_skip"); - optional_configs.add_options()("do_concurrent", po::value(&concurrent)->default_value(false), ""); - optional_configs.add_options()("start_deletes_after", - po::value(&start_deletes_after)->default_value(0), ""); - optional_configs.add_options()("start_point_norm", po::value(&start_point_norm)->default_value(0), - "Set the start point to a random point on a sphere of this radius"); - - // optional params for filters - optional_configs.add_options()("label_file", po::value(&label_file)->default_value(""), - "Input label file in txt format for Filtered Index search. " - "The file should contain comma separated filters for each node " - "with each line corresponding to a graph node"); - optional_configs.add_options()("universal_label", po::value(&universal_label)->default_value(""), - "Universal label, if using it, only in conjunction with labels_file"); - optional_configs.add_options()("FilteredLbuild,Lf", po::value(&Lf)->default_value(0), - "Build complexity for filtered points, higher value " - "results in better graphs"); - optional_configs.add_options()("label_type", po::value(&label_type)->default_value("uint"), - "Storage type of Labels , default value is uint which " - "will consume memory 4 bytes per filter"); - optional_configs.add_options()("unique_labels_supported", - po::value(&unique_labels_supported)->default_value(0), - "Number of unique labels supported by the dynamic index."); - - optional_configs.add_options()( - "num_start_points", - po::value(&num_start_pts)->default_value(diskann::defaults::NUM_FROZEN_POINTS_DYNAMIC), - "Set the number of random start (frozen) points to use when " - "inserting and searching"); - - // Merge required and optional parameters - desc.add(required_configs).add(optional_configs); - - po::variables_map vm; - po::store(po::parse_command_line(argc, argv, desc), vm); - if (vm.count("help")) - { - std::cout << desc; - return 0; - } - po::notify(vm); - if (beginning_index_size == 0) - if (start_point_norm == 0) - { - std::cout << "When beginning_index_size is 0, use a start " - "point with " - "appropriate norm" - << std::endl; - return -1; - } - } - catch (const std::exception &ex) - { - std::cerr << ex.what() << '\n'; - return -1; - } - - bool has_labels = false; - if (!label_file.empty() || label_file != "") - { - has_labels = true; - } - - if (num_start_pts < unique_labels_supported) - { - num_start_pts = unique_labels_supported; - } - - try - { - diskann::IndexWriteParameters params = diskann::IndexWriteParametersBuilder(L, R) - .with_max_occlusion_size(500) - .with_alpha(alpha) - .with_num_threads(num_threads) - .with_filter_list_size(Lf) - .build(); - - if (data_type == std::string("int8")) - build_incremental_index( - data_path, params, points_to_skip, max_points_to_insert, beginning_index_size, start_point_norm, - num_start_pts, points_per_checkpoint, checkpoints_per_snapshot, index_path_prefix, - points_to_delete_from_beginning, start_deletes_after, concurrent, label_file, universal_label); - else if (data_type == std::string("uint8")) - build_incremental_index( - data_path, params, points_to_skip, max_points_to_insert, beginning_index_size, start_point_norm, - num_start_pts, points_per_checkpoint, checkpoints_per_snapshot, index_path_prefix, - points_to_delete_from_beginning, start_deletes_after, concurrent, label_file, universal_label); - else if (data_type == std::string("float")) - build_incremental_index(data_path, params, points_to_skip, max_points_to_insert, - beginning_index_size, start_point_norm, num_start_pts, points_per_checkpoint, - checkpoints_per_snapshot, index_path_prefix, points_to_delete_from_beginning, - start_deletes_after, concurrent, label_file, universal_label); - else - std::cout << "Unsupported type. Use float/int8/uint8" << std::endl; - } - catch (const std::exception &e) - { - std::cerr << "Caught exception: " << e.what() << std::endl; - exit(-1); - } - catch (...) - { - std::cerr << "Caught unknown exception" << std::endl; - exit(-1); - } - - return 0; -} diff --git a/packages/leann-backend-diskann/third_party/DiskANN/apps/test_streaming_scenario.cpp b/packages/leann-backend-diskann/third_party/DiskANN/apps/test_streaming_scenario.cpp deleted file mode 100644 index 5a43a69..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/apps/test_streaming_scenario.cpp +++ /dev/null @@ -1,523 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT license. - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "utils.h" -#include "filter_utils.h" -#include "program_options_utils.hpp" - -#ifndef _WINDOWS -#include -#include -#include -#endif - -#include "memory_mapper.h" - -namespace po = boost::program_options; - -// load_aligned_bin modified to read pieces of the file, but using ifstream -// instead of cached_ifstream. -template -inline void load_aligned_bin_part(const std::string &bin_file, T *data, size_t offset_points, size_t points_to_read) -{ - std::ifstream reader; - reader.exceptions(std::ios::failbit | std::ios::badbit); - reader.open(bin_file, std::ios::binary | std::ios::ate); - size_t actual_file_size = reader.tellg(); - reader.seekg(0, std::ios::beg); - - int npts_i32, dim_i32; - reader.read((char *)&npts_i32, sizeof(int)); - reader.read((char *)&dim_i32, sizeof(int)); - size_t npts = (uint32_t)npts_i32; - size_t dim = (uint32_t)dim_i32; - - size_t expected_actual_file_size = npts * dim * sizeof(T) + 2 * sizeof(uint32_t); - if (actual_file_size != expected_actual_file_size) - { - std::stringstream stream; - stream << "Error. File size mismatch. Actual size is " << actual_file_size << " while expected size is " - << expected_actual_file_size << " npts = " << npts << " dim = " << dim << " size of = " << sizeof(T) - << std::endl; - std::cout << stream.str(); - throw diskann::ANNException(stream.str(), -1, __FUNCSIG__, __FILE__, __LINE__); - } - - if (offset_points + points_to_read > npts) - { - std::stringstream stream; - stream << "Error. Not enough points in file. Requested " << offset_points << " offset and " << points_to_read - << " points, but have only " << npts << " points" << std::endl; - std::cout << stream.str(); - throw diskann::ANNException(stream.str(), -1, __FUNCSIG__, __FILE__, __LINE__); - } - - reader.seekg(2 * sizeof(uint32_t) + offset_points * dim * sizeof(T)); - - const size_t rounded_dim = ROUND_UP(dim, 8); - - for (size_t i = 0; i < points_to_read; i++) - { - reader.read((char *)(data + i * rounded_dim), dim * sizeof(T)); - memset(data + i * rounded_dim + dim, 0, (rounded_dim - dim) * sizeof(T)); - } - reader.close(); -} - -std::string get_save_filename(const std::string &save_path, size_t active_window, size_t consolidate_interval, - size_t max_points_to_insert) -{ - std::string final_path = save_path; - final_path += "act" + std::to_string(active_window) + "-"; - final_path += "cons" + std::to_string(consolidate_interval) + "-"; - final_path += "max" + std::to_string(max_points_to_insert); - return final_path; -} - -template -void insert_next_batch(diskann::AbstractIndex &index, size_t start, size_t end, size_t insert_threads, T *data, - size_t aligned_dim, std::vector> &pts_to_labels) -{ - try - { - diskann::Timer insert_timer; - std::cout << std::endl << "Inserting from " << start << " to " << end << std::endl; - - size_t num_failed = 0; -#pragma omp parallel for num_threads((int32_t)insert_threads) schedule(dynamic) reduction(+ : num_failed) - for (int64_t j = start; j < (int64_t)end; j++) - { - int insert_result = -1; - if (pts_to_labels.size() > 0) - { - insert_result = index.insert_point(&data[(j - start) * aligned_dim], 1 + static_cast(j), - pts_to_labels[j - start]); - } - else - { - insert_result = index.insert_point(&data[(j - start) * aligned_dim], 1 + static_cast(j)); - } - - if (insert_result != 0) - { - std::cerr << "Insert failed " << j << std::endl; - num_failed++; - } - } - const double elapsedSeconds = insert_timer.elapsed() / 1000000.0; - std::cout << "Insertion time " << elapsedSeconds << " seconds (" << (end - start) / elapsedSeconds - << " points/second overall, " << (end - start) / elapsedSeconds / insert_threads << " per thread)" - << std::endl; - if (num_failed > 0) - std::cout << num_failed << " of " << end - start << "inserts failed" << std::endl; - } - catch (std::system_error &e) - { - std::cout << "Exiting after catching exception in insertion task: " << e.what() << std::endl; - exit(-1); - } -} - -template -void delete_and_consolidate(diskann::AbstractIndex &index, diskann::IndexWriteParameters &delete_params, size_t start, - size_t end) -{ - try - { - std::cout << std::endl << "Lazy deleting points " << start << " to " << end << "... "; - for (size_t i = start; i < end; ++i) - index.lazy_delete(static_cast(1 + i)); - std::cout << "lazy delete done." << std::endl; - - auto report = index.consolidate_deletes(delete_params); - while (report._status != diskann::consolidation_report::status_code::SUCCESS) - { - int wait_time = 5; - if (report._status == diskann::consolidation_report::status_code::LOCK_FAIL) - { - diskann::cerr << "Unable to acquire consolidate delete lock after " - << "deleting points " << start << " to " << end << ". Will retry in " << wait_time - << "seconds." << std::endl; - } - else if (report._status == diskann::consolidation_report::status_code::INCONSISTENT_COUNT_ERROR) - { - diskann::cerr << "Inconsistent counts in data structure. " - << "Will retry in " << wait_time << "seconds." << std::endl; - } - else - { - std::cerr << "Exiting after unknown error in consolidate delete" << std::endl; - exit(-1); - } - std::this_thread::sleep_for(std::chrono::seconds(wait_time)); - report = index.consolidate_deletes(delete_params); - } - auto points_processed = report._active_points + report._slots_released; - auto deletion_rate = points_processed / report._time; - std::cout << "#active points: " << report._active_points << std::endl - << "max points: " << report._max_points << std::endl - << "empty slots: " << report._empty_slots << std::endl - << "deletes processed: " << report._slots_released << std::endl - << "latest delete size: " << report._delete_set_size << std::endl - << "Deletion rate: " << deletion_rate << "/sec " - << "Deletion rate: " << deletion_rate / delete_params.num_threads << "/thread/sec " << std::endl; - } - catch (std::system_error &e) - { - std::cerr << "Exiting after catching exception in deletion task: " << e.what() << std::endl; - exit(-1); - } -} - -template -void build_incremental_index(const std::string &data_path, const uint32_t L, const uint32_t R, const float alpha, - const uint32_t insert_threads, const uint32_t consolidate_threads, - size_t max_points_to_insert, size_t active_window, size_t consolidate_interval, - const float start_point_norm, uint32_t num_start_pts, const std::string &save_path, - const std::string &label_file, const std::string &universal_label, const uint32_t Lf) -{ - const uint32_t C = 500; - const bool saturate_graph = false; - bool has_labels = label_file != ""; - - diskann::IndexWriteParameters params = diskann::IndexWriteParametersBuilder(L, R) - .with_max_occlusion_size(C) - .with_alpha(alpha) - .with_saturate_graph(saturate_graph) - .with_num_threads(insert_threads) - .with_filter_list_size(Lf) - .build(); - - auto index_search_params = diskann::IndexSearchParams(L, insert_threads); - diskann::IndexWriteParameters delete_params = diskann::IndexWriteParametersBuilder(L, R) - .with_max_occlusion_size(C) - .with_alpha(alpha) - .with_saturate_graph(saturate_graph) - .with_num_threads(consolidate_threads) - .with_filter_list_size(Lf) - .build(); - - size_t dim, aligned_dim; - size_t num_points; - - std::vector> pts_to_labels; - - const auto save_path_inc = - get_save_filename(save_path + ".after-streaming-", active_window, consolidate_interval, max_points_to_insert); - std::string labels_file_to_use = save_path_inc + "_label_formatted.txt"; - std::string mem_labels_int_map_file = save_path_inc + "_labels_map.txt"; - if (has_labels) - { - convert_labels_string_to_int(label_file, labels_file_to_use, mem_labels_int_map_file, universal_label); - auto parse_result = diskann::parse_formatted_label_file(labels_file_to_use); - pts_to_labels = std::get<0>(parse_result); - } - - diskann::get_bin_metadata(data_path, num_points, dim); - diskann::cout << "metadata: file " << data_path << " has " << num_points << " points in " << dim << " dims" - << std::endl; - aligned_dim = ROUND_UP(dim, 8); - auto index_config = diskann::IndexConfigBuilder() - .with_metric(diskann::L2) - .with_dimension(dim) - .with_max_points(active_window + 4 * consolidate_interval) - .is_dynamic_index(true) - .is_enable_tags(true) - .is_use_opq(false) - .is_filtered(has_labels) - .with_num_pq_chunks(0) - .is_pq_dist_build(false) - .with_num_frozen_pts(num_start_pts) - .with_tag_type(diskann_type_to_name()) - .with_label_type(diskann_type_to_name()) - .with_data_type(diskann_type_to_name()) - .with_index_write_params(params) - .with_index_search_params(index_search_params) - .with_data_load_store_strategy(diskann::DataStoreStrategy::MEMORY) - .with_graph_load_store_strategy(diskann::GraphStoreStrategy::MEMORY) - .build(); - - diskann::IndexFactory index_factory = diskann::IndexFactory(index_config); - auto index = index_factory.create_instance(); - - if (universal_label != "") - { - LabelT u_label = 0; - index->set_universal_label(u_label); - } - - if (max_points_to_insert == 0) - { - max_points_to_insert = num_points; - } - - if (num_points < max_points_to_insert) - throw diskann::ANNException(std::string("num_points(") + std::to_string(num_points) + - ") < max_points_to_insert(" + std::to_string(max_points_to_insert) + ")", - -1, __FUNCSIG__, __FILE__, __LINE__); - - if (max_points_to_insert < active_window + consolidate_interval) - throw diskann::ANNException("ERROR: max_points_to_insert < " - "active_window + consolidate_interval", - -1, __FUNCSIG__, __FILE__, __LINE__); - - if (consolidate_interval < max_points_to_insert / 1000) - throw diskann::ANNException("ERROR: consolidate_interval is too small", -1, __FUNCSIG__, __FILE__, __LINE__); - - index->set_start_points_at_random(static_cast(start_point_norm)); - - T *data = nullptr; - diskann::alloc_aligned((void **)&data, std::max(consolidate_interval, active_window) * aligned_dim * sizeof(T), - 8 * sizeof(T)); - - std::vector tags(max_points_to_insert); - std::iota(tags.begin(), tags.end(), static_cast(0)); - - diskann::Timer timer; - - std::vector> delete_tasks; - - auto insert_task = std::async(std::launch::async, [&]() { - load_aligned_bin_part(data_path, data, 0, active_window); - insert_next_batch(*index, (size_t)0, active_window, params.num_threads, data, aligned_dim, - pts_to_labels); - }); - insert_task.wait(); - - for (size_t start = active_window; start + consolidate_interval <= max_points_to_insert; - start += consolidate_interval) - { - auto end = std::min(start + consolidate_interval, max_points_to_insert); - auto insert_task = std::async(std::launch::async, [&]() { - load_aligned_bin_part(data_path, data, start, end - start); - insert_next_batch(*index, start, end, params.num_threads, data, aligned_dim, - pts_to_labels); - }); - insert_task.wait(); - - if (delete_tasks.size() > 0) - delete_tasks[delete_tasks.size() - 1].wait(); - if (start >= active_window + consolidate_interval) - { - auto start_del = start - active_window - consolidate_interval; - auto end_del = start - active_window; - - delete_tasks.emplace_back(std::async(std::launch::async, [&]() { - delete_and_consolidate(*index, delete_params, (size_t)start_del, (size_t)end_del); - })); - } - } - if (delete_tasks.size() > 0) - delete_tasks[delete_tasks.size() - 1].wait(); - - std::cout << "Time Elapsed " << timer.elapsed() / 1000 << "ms\n"; - - index->save(save_path_inc.c_str(), true); - - diskann::aligned_free(data); -} - -int main(int argc, char **argv) -{ - std::string data_type, dist_fn, data_path, index_path_prefix, label_file, universal_label, label_type; - uint32_t insert_threads, consolidate_threads, R, L, num_start_pts, Lf, unique_labels_supported; - float alpha, start_point_norm; - size_t max_points_to_insert, active_window, consolidate_interval; - - po::options_description desc{program_options_utils::make_program_description("test_streaming_scenario", - "Test insert deletes & consolidate")}; - try - { - desc.add_options()("help,h", "Print information on arguments"); - - // Required parameters - po::options_description required_configs("Required"); - required_configs.add_options()("data_type", po::value(&data_type)->required(), - program_options_utils::DATA_TYPE_DESCRIPTION); - required_configs.add_options()("dist_fn", po::value(&dist_fn)->required(), - program_options_utils::DISTANCE_FUNCTION_DESCRIPTION); - required_configs.add_options()("index_path_prefix", po::value(&index_path_prefix)->required(), - program_options_utils::INDEX_PATH_PREFIX_DESCRIPTION); - required_configs.add_options()("data_path", po::value(&data_path)->required(), - program_options_utils::INPUT_DATA_PATH); - required_configs.add_options()("active_window", po::value(&active_window)->required(), - "Program maintains an index over an active window of " - "this size that slides through the data"); - required_configs.add_options()("consolidate_interval", po::value(&consolidate_interval)->required(), - "The program simultaneously adds this number of points to the " - "right of " - "the window while deleting the same number from the left"); - required_configs.add_options()("start_point_norm", po::value(&start_point_norm)->required(), - "Set the start point to a random point on a sphere of this radius"); - - // Optional parameters - po::options_description optional_configs("Optional"); - optional_configs.add_options()("max_degree,R", po::value(&R)->default_value(64), - program_options_utils::MAX_BUILD_DEGREE); - optional_configs.add_options()("Lbuild,L", po::value(&L)->default_value(100), - program_options_utils::GRAPH_BUILD_COMPLEXITY); - optional_configs.add_options()("alpha", po::value(&alpha)->default_value(1.2f), - program_options_utils::GRAPH_BUILD_ALPHA); - optional_configs.add_options()("insert_threads", - po::value(&insert_threads)->default_value(omp_get_num_procs() / 2), - "Number of threads used for inserting into the index (defaults to " - "omp_get_num_procs()/2)"); - optional_configs.add_options()( - "consolidate_threads", po::value(&consolidate_threads)->default_value(omp_get_num_procs() / 2), - "Number of threads used for consolidating deletes to " - "the index (defaults to omp_get_num_procs()/2)"); - optional_configs.add_options()("max_points_to_insert", - po::value(&max_points_to_insert)->default_value(0), - "The number of points from the file that the program streams " - "over "); - optional_configs.add_options()( - "num_start_points", - po::value(&num_start_pts)->default_value(diskann::defaults::NUM_FROZEN_POINTS_DYNAMIC), - "Set the number of random start (frozen) points to use when " - "inserting and searching"); - - optional_configs.add_options()("label_file", po::value(&label_file)->default_value(""), - "Input label file in txt format for Filtered Index search. " - "The file should contain comma separated filters for each node " - "with each line corresponding to a graph node"); - optional_configs.add_options()("universal_label", po::value(&universal_label)->default_value(""), - "Universal label, if using it, only in conjunction with labels_file"); - optional_configs.add_options()("FilteredLbuild,Lf", po::value(&Lf)->default_value(0), - "Build complexity for filtered points, higher value " - "results in better graphs"); - optional_configs.add_options()("label_type", po::value(&label_type)->default_value("uint"), - "Storage type of Labels , default value is uint which " - "will consume memory 4 bytes per filter"); - optional_configs.add_options()("unique_labels_supported", - po::value(&unique_labels_supported)->default_value(0), - "Number of unique labels supported by the dynamic index."); - - // Merge required and optional parameters - desc.add(required_configs).add(optional_configs); - - po::variables_map vm; - po::store(po::parse_command_line(argc, argv, desc), vm); - if (vm.count("help")) - { - std::cout << desc; - return 0; - } - po::notify(vm); - } - catch (const std::exception &ex) - { - std::cerr << ex.what() << '\n'; - return -1; - } - - // Validate arguments - if (start_point_norm == 0) - { - std::cout << "When beginning_index_size is 0, use a start point with " - "appropriate norm" - << std::endl; - return -1; - } - - if (label_type != std::string("ushort") && label_type != std::string("uint")) - { - std::cerr << "Invalid label type. Supported types are uint and ushort" << std::endl; - return -1; - } - - if (data_type != std::string("int8") && data_type != std::string("uint8") && data_type != std::string("float")) - { - std::cerr << "Invalid data type. Supported types are int8, uint8 and float" << std::endl; - return -1; - } - - // TODO: Are additional distance functions supported? - if (dist_fn != std::string("l2") && dist_fn != std::string("mips")) - { - std::cerr << "Invalid distance function. Supported functions are l2 and mips" << std::endl; - return -1; - } - - if (num_start_pts < unique_labels_supported) - { - num_start_pts = unique_labels_supported; - } - - try - { - if (data_type == std::string("uint8")) - { - if (label_type == std::string("ushort")) - { - build_incremental_index( - data_path, L, R, alpha, insert_threads, consolidate_threads, max_points_to_insert, active_window, - consolidate_interval, start_point_norm, num_start_pts, index_path_prefix, label_file, - universal_label, Lf); - } - else if (label_type == std::string("uint")) - { - build_incremental_index( - data_path, L, R, alpha, insert_threads, consolidate_threads, max_points_to_insert, active_window, - consolidate_interval, start_point_norm, num_start_pts, index_path_prefix, label_file, - universal_label, Lf); - } - } - else if (data_type == std::string("int8")) - { - if (label_type == std::string("ushort")) - { - build_incremental_index( - data_path, L, R, alpha, insert_threads, consolidate_threads, max_points_to_insert, active_window, - consolidate_interval, start_point_norm, num_start_pts, index_path_prefix, label_file, - universal_label, Lf); - } - else if (label_type == std::string("uint")) - { - build_incremental_index( - data_path, L, R, alpha, insert_threads, consolidate_threads, max_points_to_insert, active_window, - consolidate_interval, start_point_norm, num_start_pts, index_path_prefix, label_file, - universal_label, Lf); - } - } - else if (data_type == std::string("float")) - { - if (label_type == std::string("ushort")) - { - build_incremental_index( - data_path, L, R, alpha, insert_threads, consolidate_threads, max_points_to_insert, active_window, - consolidate_interval, start_point_norm, num_start_pts, index_path_prefix, label_file, - universal_label, Lf); - } - else if (label_type == std::string("uint")) - { - build_incremental_index( - data_path, L, R, alpha, insert_threads, consolidate_threads, max_points_to_insert, active_window, - consolidate_interval, start_point_norm, num_start_pts, index_path_prefix, label_file, - universal_label, Lf); - } - } - } - catch (const std::exception &e) - { - std::cerr << "Caught exception: " << e.what() << std::endl; - exit(-1); - } - catch (...) - { - std::cerr << "Caught unknown exception" << std::endl; - exit(-1); - } - - return 0; -} diff --git a/packages/leann-backend-diskann/third_party/DiskANN/apps/utils/CMakeLists.txt b/packages/leann-backend-diskann/third_party/DiskANN/apps/utils/CMakeLists.txt deleted file mode 100644 index 3b8cf22..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/apps/utils/CMakeLists.txt +++ /dev/null @@ -1,110 +0,0 @@ -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT license. - -set(CMAKE_CXX_STANDARD 17) -set(CMAKE_COMPILE_WARNING_AS_ERROR ON) - - -add_executable(fvecs_to_bin fvecs_to_bin.cpp) - -add_executable(fvecs_to_bvecs fvecs_to_bvecs.cpp) - -add_executable(rand_data_gen rand_data_gen.cpp) -target_link_libraries(rand_data_gen ${PROJECT_NAME} Boost::program_options) - -add_executable(float_bin_to_int8 float_bin_to_int8.cpp) - -add_executable(ivecs_to_bin ivecs_to_bin.cpp) - -add_executable(count_bfs_levels count_bfs_levels.cpp) -target_link_libraries(count_bfs_levels ${PROJECT_NAME} Boost::program_options) - -add_executable(tsv_to_bin tsv_to_bin.cpp) - -add_executable(bin_to_tsv bin_to_tsv.cpp) - -add_executable(int8_to_float int8_to_float.cpp) -target_link_libraries(int8_to_float ${PROJECT_NAME}) - -add_executable(int8_to_float_scale int8_to_float_scale.cpp) -target_link_libraries(int8_to_float_scale ${PROJECT_NAME}) - -add_executable(uint8_to_float uint8_to_float.cpp) -target_link_libraries(uint8_to_float ${PROJECT_NAME}) - -add_executable(uint32_to_uint8 uint32_to_uint8.cpp) -target_link_libraries(uint32_to_uint8 ${PROJECT_NAME}) - -add_executable(vector_analysis vector_analysis.cpp) -target_link_libraries(vector_analysis ${PROJECT_NAME} ${DISKANN_TOOLS_TCMALLOC_LINK_OPTIONS}) - -add_executable(gen_random_slice gen_random_slice.cpp) -target_link_libraries(gen_random_slice ${PROJECT_NAME} ${DISKANN_TOOLS_TCMALLOC_LINK_OPTIONS}) - -add_executable(simulate_aggregate_recall simulate_aggregate_recall.cpp) - -add_executable(calculate_recall calculate_recall.cpp) -target_link_libraries(calculate_recall ${PROJECT_NAME} ${DISKANN_ASYNC_LIB} ${DISKANN_TOOLS_TCMALLOC_LINK_OPTIONS}) - -# Compute ground truth thing outside of DiskANN main source that depends on MKL. -add_executable(compute_groundtruth compute_groundtruth.cpp) -target_include_directories(compute_groundtruth PRIVATE ${DISKANN_MKL_INCLUDE_DIRECTORIES}) -target_link_libraries(compute_groundtruth ${PROJECT_NAME} ${DISKANN_MKL_LINK_LIBRARIES} ${DISKANN_ASYNC_LIB} Boost::program_options) - -add_executable(compute_groundtruth_for_filters compute_groundtruth_for_filters.cpp) -target_include_directories(compute_groundtruth_for_filters PRIVATE ${DISKANN_MKL_INCLUDE_DIRECTORIES}) -target_link_libraries(compute_groundtruth_for_filters ${PROJECT_NAME} ${DISKANN_MKL_LINK_LIBRARIES} ${DISKANN_ASYNC_LIB} Boost::program_options) - - -add_executable(generate_pq generate_pq.cpp) -target_link_libraries(generate_pq ${PROJECT_NAME} ${DISKANN_TOOLS_TCMALLOC_LINK_OPTIONS}) - - -add_executable(partition_data partition_data.cpp) -target_link_libraries(partition_data ${PROJECT_NAME} ${DISKANN_TOOLS_TCMALLOC_LINK_OPTIONS}) - -add_executable(partition_with_ram_budget partition_with_ram_budget.cpp) -target_link_libraries(partition_with_ram_budget ${PROJECT_NAME} ${DISKANN_TOOLS_TCMALLOC_LINK_OPTIONS}) - -add_executable(merge_shards merge_shards.cpp) -target_link_libraries(merge_shards ${PROJECT_NAME} ${DISKANN_TOOLS_TCMALLOC_LINK_OPTIONS} ${DISKANN_ASYNC_LIB}) - -add_executable(create_disk_layout create_disk_layout.cpp) -target_link_libraries(create_disk_layout ${PROJECT_NAME} ${DISKANN_ASYNC_LIB} ${DISKANN_TOOLS_TCMALLOC_LINK_OPTIONS}) - -add_executable(generate_synthetic_labels generate_synthetic_labels.cpp) -target_link_libraries(generate_synthetic_labels ${PROJECT_NAME} Boost::program_options) - -add_executable(stats_label_data stats_label_data.cpp) -target_link_libraries(stats_label_data ${PROJECT_NAME} Boost::program_options) - -if (NOT MSVC) - include(GNUInstallDirs) - install(TARGETS fvecs_to_bin - fvecs_to_bvecs - rand_data_gen - float_bin_to_int8 - ivecs_to_bin - count_bfs_levels - tsv_to_bin - bin_to_tsv - int8_to_float - int8_to_float_scale - uint8_to_float - uint32_to_uint8 - vector_analysis - gen_random_slice - simulate_aggregate_recall - calculate_recall - compute_groundtruth - compute_groundtruth_for_filters - generate_pq - partition_data - partition_with_ram_budget - merge_shards - create_disk_layout - generate_synthetic_labels - stats_label_data - RUNTIME - ) -endif() \ No newline at end of file diff --git a/packages/leann-backend-diskann/third_party/DiskANN/apps/utils/bin_to_fvecs.cpp b/packages/leann-backend-diskann/third_party/DiskANN/apps/utils/bin_to_fvecs.cpp deleted file mode 100644 index e9a6a8e..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/apps/utils/bin_to_fvecs.cpp +++ /dev/null @@ -1,63 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT license. - -#include -#include "util.h" - -void block_convert(std::ifstream &writr, std::ofstream &readr, float *read_buf, float *write_buf, uint64_t npts, - uint64_t ndims) -{ - writr.write((char *)read_buf, npts * (ndims * sizeof(float) + sizeof(unsigned))); -#pragma omp parallel for - for (uint64_t i = 0; i < npts; i++) - { - memcpy(write_buf + i * ndims, (read_buf + i * (ndims + 1)) + 1, ndims * sizeof(float)); - } - readr.read((char *)write_buf, npts * ndims * sizeof(float)); -} - -int main(int argc, char **argv) -{ - if (argc != 3) - { - std::cout << argv[0] << " input_bin output_fvecs" << std::endl; - exit(-1); - } - std::ifstream readr(argv[1], std::ios::binary); - int npts_s32; - int ndims_s32; - readr.read((char *)&npts_s32, sizeof(int32_t)); - readr.read((char *)&ndims_s32, sizeof(int32_t)); - size_t npts = npts_s32; - size_t ndims = ndims_s32; - uint32_t ndims_u32 = (uint32_t)ndims_s32; - // uint64_t fsize = writr.tellg(); - readr.seekg(0, std::ios::beg); - - unsigned ndims_u32; - writr.write((char *)&ndims_u32, sizeof(unsigned)); - writr.seekg(0, std::ios::beg); - uint64_t ndims = (uint64_t)ndims_u32; - uint64_t npts = fsize / ((ndims + 1) * sizeof(float)); - std::cout << "Dataset: #pts = " << npts << ", # dims = " << ndims << std::endl; - - uint64_t blk_size = 131072; - uint64_t nblks = ROUND_UP(npts, blk_size) / blk_size; - std::cout << "# blks: " << nblks << std::endl; - - std::ofstream writr(argv[2], std::ios::binary); - float *read_buf = new float[npts * (ndims + 1)]; - float *write_buf = new float[npts * ndims]; - for (uint64_t i = 0; i < nblks; i++) - { - uint64_t cblk_size = std::min(npts - i * blk_size, blk_size); - block_convert(writr, readr, read_buf, write_buf, cblk_size, ndims); - std::cout << "Block #" << i << " written" << std::endl; - } - - delete[] read_buf; - delete[] write_buf; - - writr.close(); - readr.close(); -} diff --git a/packages/leann-backend-diskann/third_party/DiskANN/apps/utils/bin_to_tsv.cpp b/packages/leann-backend-diskann/third_party/DiskANN/apps/utils/bin_to_tsv.cpp deleted file mode 100644 index 7851bef..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/apps/utils/bin_to_tsv.cpp +++ /dev/null @@ -1,69 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT license. - -#include -#include "utils.h" - -template -void block_convert(std::ofstream &writer, std::ifstream &reader, T *read_buf, size_t npts, size_t ndims) -{ - reader.read((char *)read_buf, npts * ndims * sizeof(float)); - - for (size_t i = 0; i < npts; i++) - { - for (size_t d = 0; d < ndims; d++) - { - writer << read_buf[d + i * ndims]; - if (d < ndims - 1) - writer << "\t"; - else - writer << "\n"; - } - } -} - -int main(int argc, char **argv) -{ - if (argc != 4) - { - std::cout << argv[0] << " input_bin output_tsv" << std::endl; - exit(-1); - } - std::string type_string(argv[1]); - if ((type_string != std::string("float")) && (type_string != std::string("int8")) && - (type_string != std::string("uin8"))) - { - std::cerr << "Error: type not supported. Use float/int8/uint8" << std::endl; - } - - std::ifstream reader(argv[2], std::ios::binary); - uint32_t npts_u32; - uint32_t ndims_u32; - reader.read((char *)&npts_u32, sizeof(uint32_t)); - reader.read((char *)&ndims_u32, sizeof(uint32_t)); - size_t npts = npts_u32; - size_t ndims = ndims_u32; - std::cout << "Dataset: #pts = " << npts << ", # dims = " << ndims << std::endl; - - size_t blk_size = 131072; - size_t nblks = ROUND_UP(npts, blk_size) / blk_size; - - std::ofstream writer(argv[3]); - char *read_buf = new char[blk_size * ndims * 4]; - for (size_t i = 0; i < nblks; i++) - { - size_t cblk_size = std::min(npts - i * blk_size, blk_size); - if (type_string == std::string("float")) - block_convert(writer, reader, (float *)read_buf, cblk_size, ndims); - else if (type_string == std::string("int8")) - block_convert(writer, reader, (int8_t *)read_buf, cblk_size, ndims); - else if (type_string == std::string("uint8")) - block_convert(writer, reader, (uint8_t *)read_buf, cblk_size, ndims); - std::cout << "Block #" << i << " written" << std::endl; - } - - delete[] read_buf; - - writer.close(); - reader.close(); -} diff --git a/packages/leann-backend-diskann/third_party/DiskANN/apps/utils/calculate_recall.cpp b/packages/leann-backend-diskann/third_party/DiskANN/apps/utils/calculate_recall.cpp deleted file mode 100644 index dc76252..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/apps/utils/calculate_recall.cpp +++ /dev/null @@ -1,55 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT license. - -#include -#include -#include -#include -#include -#include -#include - -#include "utils.h" -#include "disk_utils.h" - -int main(int argc, char **argv) -{ - if (argc != 4) - { - std::cout << argv[0] << " " << std::endl; - return -1; - } - uint32_t *gold_std = NULL; - float *gs_dist = nullptr; - uint32_t *our_results = NULL; - float *or_dist = nullptr; - size_t points_num, points_num_gs, points_num_or; - size_t dim_gs; - size_t dim_or; - diskann::load_truthset(argv[1], gold_std, gs_dist, points_num_gs, dim_gs); - diskann::load_truthset(argv[2], our_results, or_dist, points_num_or, dim_or); - - if (points_num_gs != points_num_or) - { - std::cout << "Error. Number of queries mismatch in ground truth and " - "our results" - << std::endl; - return -1; - } - points_num = points_num_gs; - - uint32_t recall_at = std::atoi(argv[3]); - - if ((dim_or < recall_at) || (recall_at > dim_gs)) - { - std::cout << "ground truth has size " << dim_gs << "; our set has " << dim_or << " points. Asking for recall " - << recall_at << std::endl; - return -1; - } - std::cout << "Calculating recall@" << recall_at << std::endl; - double recall_val = diskann::calculate_recall((uint32_t)points_num, gold_std, gs_dist, (uint32_t)dim_gs, - our_results, (uint32_t)dim_or, (uint32_t)recall_at); - - // double avg_recall = (recall*1.0)/(points_num*1.0); - std::cout << "Avg. recall@" << recall_at << " is " << recall_val << "\n"; -} diff --git a/packages/leann-backend-diskann/third_party/DiskANN/apps/utils/compute_groundtruth.cpp b/packages/leann-backend-diskann/third_party/DiskANN/apps/utils/compute_groundtruth.cpp deleted file mode 100644 index da32fd7..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/apps/utils/compute_groundtruth.cpp +++ /dev/null @@ -1,574 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT license. - -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#ifdef _WINDOWS -#include -#else -#include -#endif -#include "filter_utils.h" -#include "utils.h" - -// WORKS FOR UPTO 2 BILLION POINTS (as we use INT INSTEAD OF UNSIGNED) - -#define PARTSIZE 10000000 -#define ALIGNMENT 512 - -// custom types (for readability) -typedef tsl::robin_set label_set; -typedef std::string path; - -namespace po = boost::program_options; - -template T div_round_up(const T numerator, const T denominator) -{ - return (numerator % denominator == 0) ? (numerator / denominator) : 1 + (numerator / denominator); -} - -using pairIF = std::pair; -struct cmpmaxstruct -{ - bool operator()(const pairIF &l, const pairIF &r) - { - return l.second < r.second; - }; -}; - -using maxPQIFCS = std::priority_queue, cmpmaxstruct>; - -template T *aligned_malloc(const size_t n, const size_t alignment) -{ -#ifdef _WINDOWS - return (T *)_aligned_malloc(sizeof(T) * n, alignment); -#else - return static_cast(aligned_alloc(alignment, sizeof(T) * n)); -#endif -} - -inline bool custom_dist(const std::pair &a, const std::pair &b) -{ - return a.second < b.second; -} - -void compute_l2sq(float *const points_l2sq, const float *const matrix, const int64_t num_points, const uint64_t dim) -{ - assert(points_l2sq != NULL); -#pragma omp parallel for schedule(static, 65536) - for (int64_t d = 0; d < num_points; ++d) - points_l2sq[d] = cblas_sdot((int64_t)dim, matrix + (ptrdiff_t)d * (ptrdiff_t)dim, 1, - matrix + (ptrdiff_t)d * (ptrdiff_t)dim, 1); -} - -void distsq_to_points(const size_t dim, - float *dist_matrix, // Col Major, cols are queries, rows are points - size_t npoints, const float *const points, - const float *const points_l2sq, // points in Col major - size_t nqueries, const float *const queries, - const float *const queries_l2sq, // queries in Col major - float *ones_vec = NULL) // Scratchspace of num_data size and init to 1.0 -{ - bool ones_vec_alloc = false; - if (ones_vec == NULL) - { - ones_vec = new float[nqueries > npoints ? nqueries : npoints]; - std::fill_n(ones_vec, nqueries > npoints ? nqueries : npoints, (float)1.0); - ones_vec_alloc = true; - } - cblas_sgemm(CblasColMajor, CblasTrans, CblasNoTrans, npoints, nqueries, dim, (float)-2.0, points, dim, queries, dim, - (float)0.0, dist_matrix, npoints); - cblas_sgemm(CblasColMajor, CblasNoTrans, CblasTrans, npoints, nqueries, 1, (float)1.0, points_l2sq, npoints, - ones_vec, nqueries, (float)1.0, dist_matrix, npoints); - cblas_sgemm(CblasColMajor, CblasNoTrans, CblasTrans, npoints, nqueries, 1, (float)1.0, ones_vec, npoints, - queries_l2sq, nqueries, (float)1.0, dist_matrix, npoints); - if (ones_vec_alloc) - delete[] ones_vec; -} - -void inner_prod_to_points(const size_t dim, - float *dist_matrix, // Col Major, cols are queries, rows are points - size_t npoints, const float *const points, size_t nqueries, const float *const queries, - float *ones_vec = NULL) // Scratchspace of num_data size and init to 1.0 -{ - bool ones_vec_alloc = false; - if (ones_vec == NULL) - { - ones_vec = new float[nqueries > npoints ? nqueries : npoints]; - std::fill_n(ones_vec, nqueries > npoints ? nqueries : npoints, (float)1.0); - ones_vec_alloc = true; - } - cblas_sgemm(CblasColMajor, CblasTrans, CblasNoTrans, npoints, nqueries, dim, (float)-1.0, points, dim, queries, dim, - (float)0.0, dist_matrix, npoints); - - if (ones_vec_alloc) - delete[] ones_vec; -} - -void exact_knn(const size_t dim, const size_t k, - size_t *const closest_points, // k * num_queries preallocated, col - // major, queries columns - float *const dist_closest_points, // k * num_queries - // preallocated, Dist to - // corresponding closes_points - size_t npoints, - float *points_in, // points in Col major - size_t nqueries, float *queries_in, - diskann::Metric metric = diskann::Metric::L2) // queries in Col major -{ - float *points_l2sq = new float[npoints]; - float *queries_l2sq = new float[nqueries]; - compute_l2sq(points_l2sq, points_in, npoints, dim); - compute_l2sq(queries_l2sq, queries_in, nqueries, dim); - - float *points = points_in; - float *queries = queries_in; - - if (metric == diskann::Metric::COSINE) - { // we convert cosine distance as - // normalized L2 distnace - points = new float[npoints * dim]; - queries = new float[nqueries * dim]; -#pragma omp parallel for schedule(static, 4096) - for (int64_t i = 0; i < (int64_t)npoints; i++) - { - float norm = std::sqrt(points_l2sq[i]); - if (norm == 0) - { - norm = std::numeric_limits::epsilon(); - } - for (uint32_t j = 0; j < dim; j++) - { - points[i * dim + j] = points_in[i * dim + j] / norm; - } - } - -#pragma omp parallel for schedule(static, 4096) - for (int64_t i = 0; i < (int64_t)nqueries; i++) - { - float norm = std::sqrt(queries_l2sq[i]); - if (norm == 0) - { - norm = std::numeric_limits::epsilon(); - } - for (uint32_t j = 0; j < dim; j++) - { - queries[i * dim + j] = queries_in[i * dim + j] / norm; - } - } - // recalculate norms after normalizing, they should all be one. - compute_l2sq(points_l2sq, points, npoints, dim); - compute_l2sq(queries_l2sq, queries, nqueries, dim); - } - - std::cout << "Going to compute " << k << " NNs for " << nqueries << " queries over " << npoints << " points in " - << dim << " dimensions using"; - if (metric == diskann::Metric::INNER_PRODUCT) - std::cout << " MIPS "; - else if (metric == diskann::Metric::COSINE) - std::cout << " Cosine "; - else - std::cout << " L2 "; - std::cout << "distance fn. " << std::endl; - - size_t q_batch_size = (1 << 9); - float *dist_matrix = new float[(size_t)q_batch_size * (size_t)npoints]; - - for (size_t b = 0; b < div_round_up(nqueries, q_batch_size); ++b) - { - int64_t q_b = b * q_batch_size; - int64_t q_e = ((b + 1) * q_batch_size > nqueries) ? nqueries : (b + 1) * q_batch_size; - - if (metric == diskann::Metric::L2 || metric == diskann::Metric::COSINE) - { - distsq_to_points(dim, dist_matrix, npoints, points, points_l2sq, q_e - q_b, - queries + (ptrdiff_t)q_b * (ptrdiff_t)dim, queries_l2sq + q_b); - } - else - { - inner_prod_to_points(dim, dist_matrix, npoints, points, q_e - q_b, - queries + (ptrdiff_t)q_b * (ptrdiff_t)dim); - } - std::cout << "Computed distances for queries: [" << q_b << "," << q_e << ")" << std::endl; - -#pragma omp parallel for schedule(dynamic, 16) - for (long long q = q_b; q < q_e; q++) - { - maxPQIFCS point_dist; - for (size_t p = 0; p < k; p++) - point_dist.emplace(p, dist_matrix[(ptrdiff_t)p + (ptrdiff_t)(q - q_b) * (ptrdiff_t)npoints]); - for (size_t p = k; p < npoints; p++) - { - if (point_dist.top().second > dist_matrix[(ptrdiff_t)p + (ptrdiff_t)(q - q_b) * (ptrdiff_t)npoints]) - point_dist.emplace(p, dist_matrix[(ptrdiff_t)p + (ptrdiff_t)(q - q_b) * (ptrdiff_t)npoints]); - if (point_dist.size() > k) - point_dist.pop(); - } - for (ptrdiff_t l = 0; l < (ptrdiff_t)k; ++l) - { - closest_points[(ptrdiff_t)(k - 1 - l) + (ptrdiff_t)q * (ptrdiff_t)k] = point_dist.top().first; - dist_closest_points[(ptrdiff_t)(k - 1 - l) + (ptrdiff_t)q * (ptrdiff_t)k] = point_dist.top().second; - point_dist.pop(); - } - assert(std::is_sorted(dist_closest_points + (ptrdiff_t)q * (ptrdiff_t)k, - dist_closest_points + (ptrdiff_t)(q + 1) * (ptrdiff_t)k)); - } - std::cout << "Computed exact k-NN for queries: [" << q_b << "," << q_e << ")" << std::endl; - } - - delete[] dist_matrix; - - delete[] points_l2sq; - delete[] queries_l2sq; - - if (metric == diskann::Metric::COSINE) - { - delete[] points; - delete[] queries; - } -} - -template inline int get_num_parts(const char *filename) -{ - std::ifstream reader; - reader.exceptions(std::ios::failbit | std::ios::badbit); - reader.open(filename, std::ios::binary); - std::cout << "Reading bin file " << filename << " ...\n"; - int npts_i32, ndims_i32; - reader.read((char *)&npts_i32, sizeof(int)); - reader.read((char *)&ndims_i32, sizeof(int)); - std::cout << "#pts = " << npts_i32 << ", #dims = " << ndims_i32 << std::endl; - reader.close(); - uint32_t num_parts = - (npts_i32 % PARTSIZE) == 0 ? npts_i32 / PARTSIZE : (uint32_t)std::floor(npts_i32 / PARTSIZE) + 1; - std::cout << "Number of parts: " << num_parts << std::endl; - return num_parts; -} - -template -inline void load_bin_as_float(const char *filename, float *&data, size_t &npts, size_t &ndims, int part_num) -{ - std::ifstream reader; - reader.exceptions(std::ios::failbit | std::ios::badbit); - reader.open(filename, std::ios::binary); - std::cout << "Reading bin file " << filename << " ...\n"; - int npts_i32, ndims_i32; - reader.read((char *)&npts_i32, sizeof(int)); - reader.read((char *)&ndims_i32, sizeof(int)); - uint64_t start_id = part_num * PARTSIZE; - uint64_t end_id = (std::min)(start_id + PARTSIZE, (uint64_t)npts_i32); - npts = end_id - start_id; - ndims = (uint64_t)ndims_i32; - std::cout << "#pts in part = " << npts << ", #dims = " << ndims << ", size = " << npts * ndims * sizeof(T) << "B" - << std::endl; - - reader.seekg(start_id * ndims * sizeof(T) + 2 * sizeof(uint32_t), std::ios::beg); - T *data_T = new T[npts * ndims]; - reader.read((char *)data_T, sizeof(T) * npts * ndims); - std::cout << "Finished reading part of the bin file." << std::endl; - reader.close(); - data = aligned_malloc(npts * ndims, ALIGNMENT); -#pragma omp parallel for schedule(dynamic, 32768) - for (int64_t i = 0; i < (int64_t)npts; i++) - { - for (int64_t j = 0; j < (int64_t)ndims; j++) - { - float cur_val_float = (float)data_T[i * ndims + j]; - std::memcpy((char *)(data + i * ndims + j), (char *)&cur_val_float, sizeof(float)); - } - } - delete[] data_T; - std::cout << "Finished converting part data to float." << std::endl; -} - -template inline void save_bin(const std::string filename, T *data, size_t npts, size_t ndims) -{ - std::ofstream writer; - writer.exceptions(std::ios::failbit | std::ios::badbit); - writer.open(filename, std::ios::binary | std::ios::out); - std::cout << "Writing bin: " << filename << "\n"; - int npts_i32 = (int)npts, ndims_i32 = (int)ndims; - writer.write((char *)&npts_i32, sizeof(int)); - writer.write((char *)&ndims_i32, sizeof(int)); - std::cout << "bin: #pts = " << npts << ", #dims = " << ndims - << ", size = " << npts * ndims * sizeof(T) + 2 * sizeof(int) << "B" << std::endl; - - writer.write((char *)data, npts * ndims * sizeof(T)); - writer.close(); - std::cout << "Finished writing bin" << std::endl; -} - -inline void save_groundtruth_as_one_file(const std::string filename, int32_t *data, float *distances, size_t npts, - size_t ndims) -{ - std::ofstream writer(filename, std::ios::binary | std::ios::out); - int npts_i32 = (int)npts, ndims_i32 = (int)ndims; - writer.write((char *)&npts_i32, sizeof(int)); - writer.write((char *)&ndims_i32, sizeof(int)); - std::cout << "Saving truthset in one file (npts, dim, npts*dim id-matrix, " - "npts*dim dist-matrix) with npts = " - << npts << ", dim = " << ndims << ", size = " << 2 * npts * ndims * sizeof(uint32_t) + 2 * sizeof(int) - << "B" << std::endl; - - writer.write((char *)data, npts * ndims * sizeof(uint32_t)); - writer.write((char *)distances, npts * ndims * sizeof(float)); - writer.close(); - std::cout << "Finished writing truthset" << std::endl; -} - -template -std::vector>> processUnfilteredParts(const std::string &base_file, - size_t &nqueries, size_t &npoints, - size_t &dim, size_t &k, float *query_data, - const diskann::Metric &metric, - std::vector &location_to_tag) -{ - float *base_data = nullptr; - int num_parts = get_num_parts(base_file.c_str()); - std::vector>> res(nqueries); - for (int p = 0; p < num_parts; p++) - { - size_t start_id = p * PARTSIZE; - load_bin_as_float(base_file.c_str(), base_data, npoints, dim, p); - - size_t *closest_points_part = new size_t[nqueries * k]; - float *dist_closest_points_part = new float[nqueries * k]; - - auto part_k = k < npoints ? k : npoints; - exact_knn(dim, part_k, closest_points_part, dist_closest_points_part, npoints, base_data, nqueries, query_data, - metric); - - for (size_t i = 0; i < nqueries; i++) - { - for (size_t j = 0; j < part_k; j++) - { - if (!location_to_tag.empty()) - if (location_to_tag[closest_points_part[i * k + j] + start_id] == 0) - continue; - - res[i].push_back(std::make_pair((uint32_t)(closest_points_part[i * part_k + j] + start_id), - dist_closest_points_part[i * part_k + j])); - } - } - - delete[] closest_points_part; - delete[] dist_closest_points_part; - - diskann::aligned_free(base_data); - } - return res; -}; - -template -int aux_main(const std::string &base_file, const std::string &query_file, const std::string >_file, size_t k, - const diskann::Metric &metric, const std::string &tags_file = std::string("")) -{ - size_t npoints, nqueries, dim; - - float *query_data; - - load_bin_as_float(query_file.c_str(), query_data, nqueries, dim, 0); - if (nqueries > PARTSIZE) - std::cerr << "WARNING: #Queries provided (" << nqueries << ") is greater than " << PARTSIZE - << ". Computing GT only for the first " << PARTSIZE << " queries." << std::endl; - - // load tags - const bool tags_enabled = tags_file.empty() ? false : true; - std::vector location_to_tag = diskann::loadTags(tags_file, base_file); - - int *closest_points = new int[nqueries * k]; - float *dist_closest_points = new float[nqueries * k]; - - std::vector>> results = - processUnfilteredParts(base_file, nqueries, npoints, dim, k, query_data, metric, location_to_tag); - - for (size_t i = 0; i < nqueries; i++) - { - std::vector> &cur_res = results[i]; - std::sort(cur_res.begin(), cur_res.end(), custom_dist); - size_t j = 0; - for (auto iter : cur_res) - { - if (j == k) - break; - if (tags_enabled) - { - std::uint32_t index_with_tag = location_to_tag[iter.first]; - closest_points[i * k + j] = (int32_t)index_with_tag; - } - else - { - closest_points[i * k + j] = (int32_t)iter.first; - } - - if (metric == diskann::Metric::INNER_PRODUCT) - dist_closest_points[i * k + j] = -iter.second; - else - dist_closest_points[i * k + j] = iter.second; - - ++j; - } - if (j < k) - std::cout << "WARNING: found less than k GT entries for query " << i << std::endl; - } - - save_groundtruth_as_one_file(gt_file, closest_points, dist_closest_points, nqueries, k); - delete[] closest_points; - delete[] dist_closest_points; - diskann::aligned_free(query_data); - - return 0; -} - -void load_truthset(const std::string &bin_file, uint32_t *&ids, float *&dists, size_t &npts, size_t &dim) -{ - size_t read_blk_size = 64 * 1024 * 1024; - cached_ifstream reader(bin_file, read_blk_size); - diskann::cout << "Reading truthset file " << bin_file.c_str() << " ..." << std::endl; - size_t actual_file_size = reader.get_file_size(); - - int npts_i32, dim_i32; - reader.read((char *)&npts_i32, sizeof(int)); - reader.read((char *)&dim_i32, sizeof(int)); - npts = (uint32_t)npts_i32; - dim = (uint32_t)dim_i32; - - diskann::cout << "Metadata: #pts = " << npts << ", #dims = " << dim << "... " << std::endl; - - int truthset_type = -1; // 1 means truthset has ids and distances, 2 means - // only ids, -1 is error - size_t expected_file_size_with_dists = 2 * npts * dim * sizeof(uint32_t) + 2 * sizeof(uint32_t); - - if (actual_file_size == expected_file_size_with_dists) - truthset_type = 1; - - size_t expected_file_size_just_ids = npts * dim * sizeof(uint32_t) + 2 * sizeof(uint32_t); - - if (actual_file_size == expected_file_size_just_ids) - truthset_type = 2; - - if (truthset_type == -1) - { - std::stringstream stream; - stream << "Error. File size mismatch. File should have bin format, with " - "npts followed by ngt followed by npts*ngt ids and optionally " - "followed by npts*ngt distance values; actual size: " - << actual_file_size << ", expected: " << expected_file_size_with_dists << " or " - << expected_file_size_just_ids; - diskann::cout << stream.str(); - throw diskann::ANNException(stream.str(), -1, __FUNCSIG__, __FILE__, __LINE__); - } - - ids = new uint32_t[npts * dim]; - reader.read((char *)ids, npts * dim * sizeof(uint32_t)); - - if (truthset_type == 1) - { - dists = new float[npts * dim]; - reader.read((char *)dists, npts * dim * sizeof(float)); - } -} - -int main(int argc, char **argv) -{ - std::string data_type, dist_fn, base_file, query_file, gt_file, tags_file; - uint64_t K; - - try - { - po::options_description desc{"Arguments"}; - - desc.add_options()("help,h", "Print information on arguments"); - - desc.add_options()("data_type", po::value(&data_type)->required(), "data type "); - desc.add_options()("dist_fn", po::value(&dist_fn)->required(), - "distance function "); - desc.add_options()("base_file", po::value(&base_file)->required(), - "File containing the base vectors in binary format"); - desc.add_options()("query_file", po::value(&query_file)->required(), - "File containing the query vectors in binary format"); - desc.add_options()("gt_file", po::value(>_file)->required(), - "File name for the writing ground truth in binary " - "format, please don' append .bin at end if " - "no filter_label or filter_label_file is provided it " - "will save the file with '.bin' at end." - "else it will save the file as filename_label.bin"); - desc.add_options()("K", po::value(&K)->required(), - "Number of ground truth nearest neighbors to compute"); - desc.add_options()("tags_file", po::value(&tags_file)->default_value(std::string()), - "File containing the tags in binary format"); - - po::variables_map vm; - po::store(po::parse_command_line(argc, argv, desc), vm); - if (vm.count("help")) - { - std::cout << desc; - return 0; - } - po::notify(vm); - } - catch (const std::exception &ex) - { - std::cerr << ex.what() << '\n'; - return -1; - } - - if (data_type != std::string("float") && data_type != std::string("int8") && data_type != std::string("uint8")) - { - std::cout << "Unsupported type. float, int8 and uint8 types are supported." << std::endl; - return -1; - } - - diskann::Metric metric; - if (dist_fn == std::string("l2")) - { - metric = diskann::Metric::L2; - } - else if (dist_fn == std::string("mips")) - { - metric = diskann::Metric::INNER_PRODUCT; - } - else if (dist_fn == std::string("cosine")) - { - metric = diskann::Metric::COSINE; - } - else - { - std::cerr << "Unsupported distance function. Use l2/mips/cosine." << std::endl; - return -1; - } - - try - { - if (data_type == std::string("float")) - aux_main(base_file, query_file, gt_file, K, metric, tags_file); - if (data_type == std::string("int8")) - aux_main(base_file, query_file, gt_file, K, metric, tags_file); - if (data_type == std::string("uint8")) - aux_main(base_file, query_file, gt_file, K, metric, tags_file); - } - catch (const std::exception &e) - { - std::cout << std::string(e.what()) << std::endl; - diskann::cerr << "Compute GT failed." << std::endl; - return -1; - } -} diff --git a/packages/leann-backend-diskann/third_party/DiskANN/apps/utils/compute_groundtruth_for_filters.cpp b/packages/leann-backend-diskann/third_party/DiskANN/apps/utils/compute_groundtruth_for_filters.cpp deleted file mode 100644 index 52e5864..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/apps/utils/compute_groundtruth_for_filters.cpp +++ /dev/null @@ -1,919 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT license. - -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#ifdef _WINDOWS -#include -#else -#include -#endif - -#include "filter_utils.h" -#include "utils.h" - -// WORKS FOR UPTO 2 BILLION POINTS (as we use INT INSTEAD OF UNSIGNED) - -#define PARTSIZE 10000000 -#define ALIGNMENT 512 - -// custom types (for readability) -typedef tsl::robin_set label_set; -typedef std::string path; - -namespace po = boost::program_options; - -template T div_round_up(const T numerator, const T denominator) -{ - return (numerator % denominator == 0) ? (numerator / denominator) : 1 + (numerator / denominator); -} - -using pairIF = std::pair; -struct cmpmaxstruct -{ - bool operator()(const pairIF &l, const pairIF &r) - { - return l.second < r.second; - }; -}; - -using maxPQIFCS = std::priority_queue, cmpmaxstruct>; - -template T *aligned_malloc(const size_t n, const size_t alignment) -{ -#ifdef _WINDOWS - return (T *)_aligned_malloc(sizeof(T) * n, alignment); -#else - return static_cast(aligned_alloc(alignment, sizeof(T) * n)); -#endif -} - -inline bool custom_dist(const std::pair &a, const std::pair &b) -{ - return a.second < b.second; -} - -void compute_l2sq(float *const points_l2sq, const float *const matrix, const int64_t num_points, const uint64_t dim) -{ - assert(points_l2sq != NULL); -#pragma omp parallel for schedule(static, 65536) - for (int64_t d = 0; d < num_points; ++d) - points_l2sq[d] = cblas_sdot((int64_t)dim, matrix + (ptrdiff_t)d * (ptrdiff_t)dim, 1, - matrix + (ptrdiff_t)d * (ptrdiff_t)dim, 1); -} - -void distsq_to_points(const size_t dim, - float *dist_matrix, // Col Major, cols are queries, rows are points - size_t npoints, const float *const points, - const float *const points_l2sq, // points in Col major - size_t nqueries, const float *const queries, - const float *const queries_l2sq, // queries in Col major - float *ones_vec = NULL) // Scratchspace of num_data size and init to 1.0 -{ - bool ones_vec_alloc = false; - if (ones_vec == NULL) - { - ones_vec = new float[nqueries > npoints ? nqueries : npoints]; - std::fill_n(ones_vec, nqueries > npoints ? nqueries : npoints, (float)1.0); - ones_vec_alloc = true; - } - cblas_sgemm(CblasColMajor, CblasTrans, CblasNoTrans, npoints, nqueries, dim, (float)-2.0, points, dim, queries, dim, - (float)0.0, dist_matrix, npoints); - cblas_sgemm(CblasColMajor, CblasNoTrans, CblasTrans, npoints, nqueries, 1, (float)1.0, points_l2sq, npoints, - ones_vec, nqueries, (float)1.0, dist_matrix, npoints); - cblas_sgemm(CblasColMajor, CblasNoTrans, CblasTrans, npoints, nqueries, 1, (float)1.0, ones_vec, npoints, - queries_l2sq, nqueries, (float)1.0, dist_matrix, npoints); - if (ones_vec_alloc) - delete[] ones_vec; -} - -void inner_prod_to_points(const size_t dim, - float *dist_matrix, // Col Major, cols are queries, rows are points - size_t npoints, const float *const points, size_t nqueries, const float *const queries, - float *ones_vec = NULL) // Scratchspace of num_data size and init to 1.0 -{ - bool ones_vec_alloc = false; - if (ones_vec == NULL) - { - ones_vec = new float[nqueries > npoints ? nqueries : npoints]; - std::fill_n(ones_vec, nqueries > npoints ? nqueries : npoints, (float)1.0); - ones_vec_alloc = true; - } - cblas_sgemm(CblasColMajor, CblasTrans, CblasNoTrans, npoints, nqueries, dim, (float)-1.0, points, dim, queries, dim, - (float)0.0, dist_matrix, npoints); - - if (ones_vec_alloc) - delete[] ones_vec; -} - -void exact_knn(const size_t dim, const size_t k, - size_t *const closest_points, // k * num_queries preallocated, col - // major, queries columns - float *const dist_closest_points, // k * num_queries - // preallocated, Dist to - // corresponding closes_points - size_t npoints, - float *points_in, // points in Col major - size_t nqueries, float *queries_in, - diskann::Metric metric = diskann::Metric::L2) // queries in Col major -{ - float *points_l2sq = new float[npoints]; - float *queries_l2sq = new float[nqueries]; - compute_l2sq(points_l2sq, points_in, npoints, dim); - compute_l2sq(queries_l2sq, queries_in, nqueries, dim); - - float *points = points_in; - float *queries = queries_in; - - if (metric == diskann::Metric::COSINE) - { // we convert cosine distance as - // normalized L2 distnace - points = new float[npoints * dim]; - queries = new float[nqueries * dim]; -#pragma omp parallel for schedule(static, 4096) - for (int64_t i = 0; i < (int64_t)npoints; i++) - { - float norm = std::sqrt(points_l2sq[i]); - if (norm == 0) - { - norm = std::numeric_limits::epsilon(); - } - for (uint32_t j = 0; j < dim; j++) - { - points[i * dim + j] = points_in[i * dim + j] / norm; - } - } - -#pragma omp parallel for schedule(static, 4096) - for (int64_t i = 0; i < (int64_t)nqueries; i++) - { - float norm = std::sqrt(queries_l2sq[i]); - if (norm == 0) - { - norm = std::numeric_limits::epsilon(); - } - for (uint32_t j = 0; j < dim; j++) - { - queries[i * dim + j] = queries_in[i * dim + j] / norm; - } - } - // recalculate norms after normalizing, they should all be one. - compute_l2sq(points_l2sq, points, npoints, dim); - compute_l2sq(queries_l2sq, queries, nqueries, dim); - } - - std::cout << "Going to compute " << k << " NNs for " << nqueries << " queries over " << npoints << " points in " - << dim << " dimensions using"; - if (metric == diskann::Metric::INNER_PRODUCT) - std::cout << " MIPS "; - else if (metric == diskann::Metric::COSINE) - std::cout << " Cosine "; - else - std::cout << " L2 "; - std::cout << "distance fn. " << std::endl; - - size_t q_batch_size = (1 << 9); - float *dist_matrix = new float[(size_t)q_batch_size * (size_t)npoints]; - - for (uint64_t b = 0; b < div_round_up(nqueries, q_batch_size); ++b) - { - int64_t q_b = b * q_batch_size; - int64_t q_e = ((b + 1) * q_batch_size > nqueries) ? nqueries : (b + 1) * q_batch_size; - - if (metric == diskann::Metric::L2 || metric == diskann::Metric::COSINE) - { - distsq_to_points(dim, dist_matrix, npoints, points, points_l2sq, q_e - q_b, - queries + (ptrdiff_t)q_b * (ptrdiff_t)dim, queries_l2sq + q_b); - } - else - { - inner_prod_to_points(dim, dist_matrix, npoints, points, q_e - q_b, - queries + (ptrdiff_t)q_b * (ptrdiff_t)dim); - } - std::cout << "Computed distances for queries: [" << q_b << "," << q_e << ")" << std::endl; - -#pragma omp parallel for schedule(dynamic, 16) - for (long long q = q_b; q < q_e; q++) - { - maxPQIFCS point_dist; - for (size_t p = 0; p < k; p++) - point_dist.emplace(p, dist_matrix[(ptrdiff_t)p + (ptrdiff_t)(q - q_b) * (ptrdiff_t)npoints]); - for (size_t p = k; p < npoints; p++) - { - if (point_dist.top().second > dist_matrix[(ptrdiff_t)p + (ptrdiff_t)(q - q_b) * (ptrdiff_t)npoints]) - point_dist.emplace(p, dist_matrix[(ptrdiff_t)p + (ptrdiff_t)(q - q_b) * (ptrdiff_t)npoints]); - if (point_dist.size() > k) - point_dist.pop(); - } - for (ptrdiff_t l = 0; l < (ptrdiff_t)k; ++l) - { - closest_points[(ptrdiff_t)(k - 1 - l) + (ptrdiff_t)q * (ptrdiff_t)k] = point_dist.top().first; - dist_closest_points[(ptrdiff_t)(k - 1 - l) + (ptrdiff_t)q * (ptrdiff_t)k] = point_dist.top().second; - point_dist.pop(); - } - assert(std::is_sorted(dist_closest_points + (ptrdiff_t)q * (ptrdiff_t)k, - dist_closest_points + (ptrdiff_t)(q + 1) * (ptrdiff_t)k)); - } - std::cout << "Computed exact k-NN for queries: [" << q_b << "," << q_e << ")" << std::endl; - } - - delete[] dist_matrix; - - delete[] points_l2sq; - delete[] queries_l2sq; - - if (metric == diskann::Metric::COSINE) - { - delete[] points; - delete[] queries; - } -} - -template inline int get_num_parts(const char *filename) -{ - std::ifstream reader; - reader.exceptions(std::ios::failbit | std::ios::badbit); - reader.open(filename, std::ios::binary); - std::cout << "Reading bin file " << filename << " ...\n"; - int npts_i32, ndims_i32; - reader.read((char *)&npts_i32, sizeof(int)); - reader.read((char *)&ndims_i32, sizeof(int)); - std::cout << "#pts = " << npts_i32 << ", #dims = " << ndims_i32 << std::endl; - reader.close(); - int num_parts = (npts_i32 % PARTSIZE) == 0 ? npts_i32 / PARTSIZE : (uint32_t)std::floor(npts_i32 / PARTSIZE) + 1; - std::cout << "Number of parts: " << num_parts << std::endl; - return num_parts; -} - -template -inline void load_bin_as_float(const char *filename, float *&data, size_t &npts_u64, size_t &ndims_u64, int part_num) -{ - std::ifstream reader; - reader.exceptions(std::ios::failbit | std::ios::badbit); - reader.open(filename, std::ios::binary); - std::cout << "Reading bin file " << filename << " ...\n"; - int npts_i32, ndims_i32; - reader.read((char *)&npts_i32, sizeof(int)); - reader.read((char *)&ndims_i32, sizeof(int)); - uint64_t start_id = part_num * PARTSIZE; - uint64_t end_id = (std::min)(start_id + PARTSIZE, (uint64_t)npts_i32); - npts_u64 = end_id - start_id; - ndims_u64 = (uint64_t)ndims_i32; - std::cout << "#pts in part = " << npts_u64 << ", #dims = " << ndims_u64 - << ", size = " << npts_u64 * ndims_u64 * sizeof(T) << "B" << std::endl; - - reader.seekg(start_id * ndims_u64 * sizeof(T) + 2 * sizeof(uint32_t), std::ios::beg); - T *data_T = new T[npts_u64 * ndims_u64]; - reader.read((char *)data_T, sizeof(T) * npts_u64 * ndims_u64); - std::cout << "Finished reading part of the bin file." << std::endl; - reader.close(); - data = aligned_malloc(npts_u64 * ndims_u64, ALIGNMENT); -#pragma omp parallel for schedule(dynamic, 32768) - for (int64_t i = 0; i < (int64_t)npts_u64; i++) - { - for (int64_t j = 0; j < (int64_t)ndims_u64; j++) - { - float cur_val_float = (float)data_T[i * ndims_u64 + j]; - std::memcpy((char *)(data + i * ndims_u64 + j), (char *)&cur_val_float, sizeof(float)); - } - } - delete[] data_T; - std::cout << "Finished converting part data to float." << std::endl; -} - -template -inline std::vector load_filtered_bin_as_float(const char *filename, float *&data, size_t &npts, size_t &ndims, - int part_num, const char *label_file, - const std::string &filter_label, - const std::string &universal_label, size_t &npoints_filt, - std::vector> &pts_to_labels) -{ - std::ifstream reader(filename, std::ios::binary); - if (reader.fail()) - { - throw diskann::ANNException(std::string("Failed to open file ") + filename, -1); - } - - std::cout << "Reading bin file " << filename << " ...\n"; - int npts_i32, ndims_i32; - std::vector rev_map; - reader.read((char *)&npts_i32, sizeof(int)); - reader.read((char *)&ndims_i32, sizeof(int)); - uint64_t start_id = part_num * PARTSIZE; - uint64_t end_id = (std::min)(start_id + PARTSIZE, (uint64_t)npts_i32); - npts = end_id - start_id; - ndims = (uint32_t)ndims_i32; - uint64_t nptsuint64_t = (uint64_t)npts; - uint64_t ndimsuint64_t = (uint64_t)ndims; - npoints_filt = 0; - std::cout << "#pts in part = " << npts << ", #dims = " << ndims - << ", size = " << nptsuint64_t * ndimsuint64_t * sizeof(T) << "B" << std::endl; - std::cout << "start and end ids: " << start_id << ", " << end_id << std::endl; - reader.seekg(start_id * ndims * sizeof(T) + 2 * sizeof(uint32_t), std::ios::beg); - - T *data_T = new T[nptsuint64_t * ndimsuint64_t]; - reader.read((char *)data_T, sizeof(T) * nptsuint64_t * ndimsuint64_t); - std::cout << "Finished reading part of the bin file." << std::endl; - reader.close(); - - data = aligned_malloc(nptsuint64_t * ndimsuint64_t, ALIGNMENT); - - for (int64_t i = 0; i < (int64_t)nptsuint64_t; i++) - { - if (std::find(pts_to_labels[start_id + i].begin(), pts_to_labels[start_id + i].end(), filter_label) != - pts_to_labels[start_id + i].end() || - std::find(pts_to_labels[start_id + i].begin(), pts_to_labels[start_id + i].end(), universal_label) != - pts_to_labels[start_id + i].end()) - { - rev_map.push_back(start_id + i); - for (int64_t j = 0; j < (int64_t)ndimsuint64_t; j++) - { - float cur_val_float = (float)data_T[i * ndimsuint64_t + j]; - std::memcpy((char *)(data + npoints_filt * ndimsuint64_t + j), (char *)&cur_val_float, sizeof(float)); - } - npoints_filt++; - } - } - delete[] data_T; - std::cout << "Finished converting part data to float.. identified " << npoints_filt - << " points matching the filter." << std::endl; - return rev_map; -} - -template inline void save_bin(const std::string filename, T *data, size_t npts, size_t ndims) -{ - std::ofstream writer; - writer.exceptions(std::ios::failbit | std::ios::badbit); - writer.open(filename, std::ios::binary | std::ios::out); - std::cout << "Writing bin: " << filename << "\n"; - int npts_i32 = (int)npts, ndims_i32 = (int)ndims; - writer.write((char *)&npts_i32, sizeof(int)); - writer.write((char *)&ndims_i32, sizeof(int)); - std::cout << "bin: #pts = " << npts << ", #dims = " << ndims - << ", size = " << npts * ndims * sizeof(T) + 2 * sizeof(int) << "B" << std::endl; - - writer.write((char *)data, npts * ndims * sizeof(T)); - writer.close(); - std::cout << "Finished writing bin" << std::endl; -} - -inline void save_groundtruth_as_one_file(const std::string filename, int32_t *data, float *distances, size_t npts, - size_t ndims) -{ - std::ofstream writer(filename, std::ios::binary | std::ios::out); - int npts_i32 = (int)npts, ndims_i32 = (int)ndims; - writer.write((char *)&npts_i32, sizeof(int)); - writer.write((char *)&ndims_i32, sizeof(int)); - std::cout << "Saving truthset in one file (npts, dim, npts*dim id-matrix, " - "npts*dim dist-matrix) with npts = " - << npts << ", dim = " << ndims << ", size = " << 2 * npts * ndims * sizeof(uint32_t) + 2 * sizeof(int) - << "B" << std::endl; - - writer.write((char *)data, npts * ndims * sizeof(uint32_t)); - writer.write((char *)distances, npts * ndims * sizeof(float)); - writer.close(); - std::cout << "Finished writing truthset" << std::endl; -} - -inline void parse_label_file_into_vec(size_t &line_cnt, const std::string &map_file, - std::vector> &pts_to_labels) -{ - std::ifstream infile(map_file); - std::string line, token; - std::set labels; - infile.clear(); - infile.seekg(0, std::ios::beg); - while (std::getline(infile, line)) - { - std::istringstream iss(line); - std::vector lbls(0); - - getline(iss, token, '\t'); - std::istringstream new_iss(token); - while (getline(new_iss, token, ',')) - { - token.erase(std::remove(token.begin(), token.end(), '\n'), token.end()); - token.erase(std::remove(token.begin(), token.end(), '\r'), token.end()); - lbls.push_back(token); - labels.insert(token); - } - std::sort(lbls.begin(), lbls.end()); - pts_to_labels.push_back(lbls); - } - std::cout << "Identified " << labels.size() << " distinct label(s), and populated labels for " - << pts_to_labels.size() << " points" << std::endl; -} - -template -std::vector>> processUnfilteredParts(const std::string &base_file, - size_t &nqueries, size_t &npoints, - size_t &dim, size_t &k, float *query_data, - const diskann::Metric &metric, - std::vector &location_to_tag) -{ - float *base_data = nullptr; - int num_parts = get_num_parts(base_file.c_str()); - std::vector>> res(nqueries); - for (int p = 0; p < num_parts; p++) - { - size_t start_id = p * PARTSIZE; - load_bin_as_float(base_file.c_str(), base_data, npoints, dim, p); - - size_t *closest_points_part = new size_t[nqueries * k]; - float *dist_closest_points_part = new float[nqueries * k]; - - auto part_k = k < npoints ? k : npoints; - exact_knn(dim, part_k, closest_points_part, dist_closest_points_part, npoints, base_data, nqueries, query_data, - metric); - - for (size_t i = 0; i < nqueries; i++) - { - for (uint64_t j = 0; j < part_k; j++) - { - if (!location_to_tag.empty()) - if (location_to_tag[closest_points_part[i * k + j] + start_id] == 0) - continue; - - res[i].push_back(std::make_pair((uint32_t)(closest_points_part[i * part_k + j] + start_id), - dist_closest_points_part[i * part_k + j])); - } - } - - delete[] closest_points_part; - delete[] dist_closest_points_part; - - diskann::aligned_free(base_data); - } - return res; -}; - -template -std::vector>> processFilteredParts( - const std::string &base_file, const std::string &label_file, const std::string &filter_label, - const std::string &universal_label, size_t &nqueries, size_t &npoints, size_t &dim, size_t &k, float *query_data, - const diskann::Metric &metric, std::vector &location_to_tag) -{ - size_t npoints_filt = 0; - float *base_data = nullptr; - std::vector>> res(nqueries); - int num_parts = get_num_parts(base_file.c_str()); - - std::vector> pts_to_labels; - if (filter_label != "") - parse_label_file_into_vec(npoints, label_file, pts_to_labels); - - for (int p = 0; p < num_parts; p++) - { - size_t start_id = p * PARTSIZE; - std::vector rev_map; - if (filter_label != "") - rev_map = load_filtered_bin_as_float(base_file.c_str(), base_data, npoints, dim, p, label_file.c_str(), - filter_label, universal_label, npoints_filt, pts_to_labels); - size_t *closest_points_part = new size_t[nqueries * k]; - float *dist_closest_points_part = new float[nqueries * k]; - - auto part_k = k < npoints_filt ? k : npoints_filt; - if (npoints_filt > 0) - { - exact_knn(dim, part_k, closest_points_part, dist_closest_points_part, npoints_filt, base_data, nqueries, - query_data, metric); - } - - for (size_t i = 0; i < nqueries; i++) - { - for (uint64_t j = 0; j < part_k; j++) - { - if (!location_to_tag.empty()) - if (location_to_tag[closest_points_part[i * k + j] + start_id] == 0) - continue; - - res[i].push_back(std::make_pair((uint32_t)(rev_map[closest_points_part[i * part_k + j]]), - dist_closest_points_part[i * part_k + j])); - } - } - - delete[] closest_points_part; - delete[] dist_closest_points_part; - - diskann::aligned_free(base_data); - } - return res; -}; - -template -int aux_main(const std::string &base_file, const std::string &label_file, const std::string &query_file, - const std::string >_file, size_t k, const std::string &universal_label, const diskann::Metric &metric, - const std::string &filter_label, const std::string &tags_file = std::string("")) -{ - size_t npoints, nqueries, dim; - - float *query_data = nullptr; - - load_bin_as_float(query_file.c_str(), query_data, nqueries, dim, 0); - if (nqueries > PARTSIZE) - std::cerr << "WARNING: #Queries provided (" << nqueries << ") is greater than " << PARTSIZE - << ". Computing GT only for the first " << PARTSIZE << " queries." << std::endl; - - // load tags - const bool tags_enabled = tags_file.empty() ? false : true; - std::vector location_to_tag = diskann::loadTags(tags_file, base_file); - - int *closest_points = new int[nqueries * k]; - float *dist_closest_points = new float[nqueries * k]; - - std::vector>> results; - if (filter_label == "") - { - results = processUnfilteredParts(base_file, nqueries, npoints, dim, k, query_data, metric, location_to_tag); - } - else - { - results = processFilteredParts(base_file, label_file, filter_label, universal_label, nqueries, npoints, dim, - k, query_data, metric, location_to_tag); - } - - for (size_t i = 0; i < nqueries; i++) - { - std::vector> &cur_res = results[i]; - std::sort(cur_res.begin(), cur_res.end(), custom_dist); - size_t j = 0; - for (auto iter : cur_res) - { - if (j == k) - break; - if (tags_enabled) - { - std::uint32_t index_with_tag = location_to_tag[iter.first]; - closest_points[i * k + j] = (int32_t)index_with_tag; - } - else - { - closest_points[i * k + j] = (int32_t)iter.first; - } - - if (metric == diskann::Metric::INNER_PRODUCT) - dist_closest_points[i * k + j] = -iter.second; - else - dist_closest_points[i * k + j] = iter.second; - - ++j; - } - if (j < k) - std::cout << "WARNING: found less than k GT entries for query " << i << std::endl; - } - - save_groundtruth_as_one_file(gt_file, closest_points, dist_closest_points, nqueries, k); - delete[] closest_points; - delete[] dist_closest_points; - diskann::aligned_free(query_data); - - return 0; -} - -void load_truthset(const std::string &bin_file, uint32_t *&ids, float *&dists, size_t &npts, size_t &dim) -{ - size_t read_blk_size = 64 * 1024 * 1024; - cached_ifstream reader(bin_file, read_blk_size); - diskann::cout << "Reading truthset file " << bin_file.c_str() << " ..." << std::endl; - size_t actual_file_size = reader.get_file_size(); - - int npts_i32, dim_i32; - reader.read((char *)&npts_i32, sizeof(int)); - reader.read((char *)&dim_i32, sizeof(int)); - npts = (uint32_t)npts_i32; - dim = (uint32_t)dim_i32; - - diskann::cout << "Metadata: #pts = " << npts << ", #dims = " << dim << "... " << std::endl; - - int truthset_type = -1; // 1 means truthset has ids and distances, 2 means - // only ids, -1 is error - size_t expected_file_size_with_dists = 2 * npts * dim * sizeof(uint32_t) + 2 * sizeof(uint32_t); - - if (actual_file_size == expected_file_size_with_dists) - truthset_type = 1; - - size_t expected_file_size_just_ids = npts * dim * sizeof(uint32_t) + 2 * sizeof(uint32_t); - - if (actual_file_size == expected_file_size_just_ids) - truthset_type = 2; - - if (truthset_type == -1) - { - std::stringstream stream; - stream << "Error. File size mismatch. File should have bin format, with " - "npts followed by ngt followed by npts*ngt ids and optionally " - "followed by npts*ngt distance values; actual size: " - << actual_file_size << ", expected: " << expected_file_size_with_dists << " or " - << expected_file_size_just_ids; - diskann::cout << stream.str(); - throw diskann::ANNException(stream.str(), -1, __FUNCSIG__, __FILE__, __LINE__); - } - - ids = new uint32_t[npts * dim]; - reader.read((char *)ids, npts * dim * sizeof(uint32_t)); - - if (truthset_type == 1) - { - dists = new float[npts * dim]; - reader.read((char *)dists, npts * dim * sizeof(float)); - } -} - -int main(int argc, char **argv) -{ - std::string data_type, dist_fn, base_file, query_file, gt_file, tags_file, label_file, filter_label, - universal_label, filter_label_file; - uint64_t K; - - try - { - po::options_description desc{"Arguments"}; - - desc.add_options()("help,h", "Print information on arguments"); - - desc.add_options()("data_type", po::value(&data_type)->required(), "data type "); - desc.add_options()("dist_fn", po::value(&dist_fn)->required(), "distance function "); - desc.add_options()("base_file", po::value(&base_file)->required(), - "File containing the base vectors in binary format"); - desc.add_options()("query_file", po::value(&query_file)->required(), - "File containing the query vectors in binary format"); - desc.add_options()("label_file", po::value(&label_file)->default_value(""), - "Input labels file in txt format if present"); - desc.add_options()("filter_label", po::value(&filter_label)->default_value(""), - "Input filter label if doing filtered groundtruth"); - desc.add_options()("universal_label", po::value(&universal_label)->default_value(""), - "Universal label, if using it, only in conjunction with label_file"); - desc.add_options()("gt_file", po::value(>_file)->required(), - "File name for the writing ground truth in binary " - "format, please don' append .bin at end if " - "no filter_label or filter_label_file is provided it " - "will save the file with '.bin' at end." - "else it will save the file as filename_label.bin"); - desc.add_options()("K", po::value(&K)->required(), - "Number of ground truth nearest neighbors to compute"); - desc.add_options()("tags_file", po::value(&tags_file)->default_value(std::string()), - "File containing the tags in binary format"); - desc.add_options()("filter_label_file", - po::value(&filter_label_file)->default_value(std::string("")), - "Filter file for Queries for Filtered Search "); - - po::variables_map vm; - po::store(po::parse_command_line(argc, argv, desc), vm); - if (vm.count("help")) - { - std::cout << desc; - return 0; - } - po::notify(vm); - } - catch (const std::exception &ex) - { - std::cerr << ex.what() << '\n'; - return -1; - } - - if (data_type != std::string("float") && data_type != std::string("int8") && data_type != std::string("uint8")) - { - std::cout << "Unsupported type. float, int8 and uint8 types are supported." << std::endl; - return -1; - } - - if (filter_label != "" && filter_label_file != "") - { - std::cerr << "Only one of filter_label and query_filters_file should be provided" << std::endl; - return -1; - } - - diskann::Metric metric; - if (dist_fn == std::string("l2")) - { - metric = diskann::Metric::L2; - } - else if (dist_fn == std::string("mips")) - { - metric = diskann::Metric::INNER_PRODUCT; - } - else if (dist_fn == std::string("cosine")) - { - metric = diskann::Metric::COSINE; - } - else - { - std::cerr << "Unsupported distance function. Use l2/mips/cosine." << std::endl; - return -1; - } - - std::vector filter_labels; - if (filter_label != "") - { - filter_labels.push_back(filter_label); - } - else if (filter_label_file != "") - { - filter_labels = read_file_to_vector_of_strings(filter_label_file, false); - } - - // only when there is no filter label or 1 filter label for all queries - if (filter_labels.size() == 1) - { - try - { - if (data_type == std::string("float")) - aux_main(base_file, label_file, query_file, gt_file, K, universal_label, metric, - filter_labels[0], tags_file); - if (data_type == std::string("int8")) - aux_main(base_file, label_file, query_file, gt_file, K, universal_label, metric, - filter_labels[0], tags_file); - if (data_type == std::string("uint8")) - aux_main(base_file, label_file, query_file, gt_file, K, universal_label, metric, - filter_labels[0], tags_file); - } - catch (const std::exception &e) - { - std::cout << std::string(e.what()) << std::endl; - diskann::cerr << "Compute GT failed." << std::endl; - return -1; - } - } - else - { // Each query has its own filter label - // Split up data and query bins into label specific ones - tsl::robin_map labels_to_number_of_points; - tsl::robin_map labels_to_number_of_queries; - - label_set all_labels; - for (size_t i = 0; i < filter_labels.size(); i++) - { - std::string label = filter_labels[i]; - all_labels.insert(label); - - if (labels_to_number_of_queries.find(label) == labels_to_number_of_queries.end()) - { - labels_to_number_of_queries[label] = 0; - } - labels_to_number_of_queries[label] += 1; - } - - size_t npoints; - std::vector> point_to_labels; - parse_label_file_into_vec(npoints, label_file, point_to_labels); - std::vector point_ids_to_labels(point_to_labels.size()); - std::vector query_ids_to_labels(filter_labels.size()); - - for (size_t i = 0; i < point_to_labels.size(); i++) - { - for (size_t j = 0; j < point_to_labels[i].size(); j++) - { - std::string label = point_to_labels[i][j]; - if (all_labels.find(label) != all_labels.end()) - { - point_ids_to_labels[i].insert(point_to_labels[i][j]); - if (labels_to_number_of_points.find(label) == labels_to_number_of_points.end()) - { - labels_to_number_of_points[label] = 0; - } - labels_to_number_of_points[label] += 1; - } - } - } - - for (size_t i = 0; i < filter_labels.size(); i++) - { - query_ids_to_labels[i].insert(filter_labels[i]); - } - - tsl::robin_map> label_id_to_orig_id; - tsl::robin_map> label_query_id_to_orig_id; - - if (data_type == std::string("float")) - { - label_id_to_orig_id = diskann::generate_label_specific_vector_files_compat( - base_file, labels_to_number_of_points, point_ids_to_labels, all_labels); - - label_query_id_to_orig_id = diskann::generate_label_specific_vector_files_compat( - query_file, labels_to_number_of_queries, query_ids_to_labels, - all_labels); // query_filters acts like query_ids_to_labels - } - else if (data_type == std::string("int8")) - { - label_id_to_orig_id = diskann::generate_label_specific_vector_files_compat( - base_file, labels_to_number_of_points, point_ids_to_labels, all_labels); - - label_query_id_to_orig_id = diskann::generate_label_specific_vector_files_compat( - query_file, labels_to_number_of_queries, query_ids_to_labels, - all_labels); // query_filters acts like query_ids_to_labels - } - else if (data_type == std::string("uint8")) - { - label_id_to_orig_id = diskann::generate_label_specific_vector_files_compat( - base_file, labels_to_number_of_points, point_ids_to_labels, all_labels); - - label_query_id_to_orig_id = diskann::generate_label_specific_vector_files_compat( - query_file, labels_to_number_of_queries, query_ids_to_labels, - all_labels); // query_filters acts like query_ids_to_labels - } - else - { - diskann::cerr << "Invalid data type" << std::endl; - return -1; - } - - // Generate label specific ground truths - - try - { - for (const auto &label : all_labels) - { - std::string filtered_base_file = base_file + "_" + label; - std::string filtered_query_file = query_file + "_" + label; - std::string filtered_gt_file = gt_file + "_" + label; - if (data_type == std::string("float")) - aux_main(filtered_base_file, "", filtered_query_file, filtered_gt_file, K, "", metric, ""); - if (data_type == std::string("int8")) - aux_main(filtered_base_file, "", filtered_query_file, filtered_gt_file, K, "", metric, ""); - if (data_type == std::string("uint8")) - aux_main(filtered_base_file, "", filtered_query_file, filtered_gt_file, K, "", metric, ""); - } - } - catch (const std::exception &e) - { - std::cout << std::string(e.what()) << std::endl; - diskann::cerr << "Compute GT failed." << std::endl; - return -1; - } - - // Combine the label specific ground truths to produce a single GT file - - uint32_t *gt_ids = nullptr; - float *gt_dists = nullptr; - size_t gt_num, gt_dim; - - std::vector> final_gt_ids; - std::vector> final_gt_dists; - - uint32_t query_num = 0; - for (const auto &lbl : all_labels) - { - query_num += labels_to_number_of_queries[lbl]; - } - - for (uint32_t i = 0; i < query_num; i++) - { - final_gt_ids.push_back(std::vector(K)); - final_gt_dists.push_back(std::vector(K)); - } - - for (const auto &lbl : all_labels) - { - std::string filtered_gt_file = gt_file + "_" + lbl; - load_truthset(filtered_gt_file, gt_ids, gt_dists, gt_num, gt_dim); - - for (uint32_t i = 0; i < labels_to_number_of_queries[lbl]; i++) - { - uint32_t orig_query_id = label_query_id_to_orig_id[lbl][i]; - for (uint64_t j = 0; j < K; j++) - { - final_gt_ids[orig_query_id][j] = label_id_to_orig_id[lbl][gt_ids[i * K + j]]; - final_gt_dists[orig_query_id][j] = gt_dists[i * K + j]; - } - } - } - - int32_t *closest_points = new int32_t[query_num * K]; - float *dist_closest_points = new float[query_num * K]; - - for (uint32_t i = 0; i < query_num; i++) - { - for (uint32_t j = 0; j < K; j++) - { - closest_points[i * K + j] = final_gt_ids[i][j]; - dist_closest_points[i * K + j] = final_gt_dists[i][j]; - } - } - - save_groundtruth_as_one_file(gt_file, closest_points, dist_closest_points, query_num, K); - - // cleanup artifacts - std::cout << "Cleaning up artifacts..." << std::endl; - tsl::robin_set paths_to_clean{gt_file, base_file, query_file}; - clean_up_artifacts(paths_to_clean, all_labels); - } -} diff --git a/packages/leann-backend-diskann/third_party/DiskANN/apps/utils/count_bfs_levels.cpp b/packages/leann-backend-diskann/third_party/DiskANN/apps/utils/count_bfs_levels.cpp deleted file mode 100644 index 6dd2d62..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/apps/utils/count_bfs_levels.cpp +++ /dev/null @@ -1,82 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT license. - -#include -#include -#include -#include -#include -#include -#include -#include - -#ifndef _WINDOWS -#include -#include -#include -#include -#endif - -#include "utils.h" -#include "index.h" -#include "memory_mapper.h" - -namespace po = boost::program_options; - -template void bfs_count(const std::string &index_path, uint32_t data_dims) -{ - using TagT = uint32_t; - using LabelT = uint32_t; - diskann::Index index(diskann::Metric::L2, data_dims, 0, nullptr, nullptr, 0, false, false, false, - false, 0, false); - std::cout << "Index class instantiated" << std::endl; - index.load(index_path.c_str(), 1, 100); - std::cout << "Index loaded" << std::endl; - index.count_nodes_at_bfs_levels(); -} - -int main(int argc, char **argv) -{ - std::string data_type, index_path_prefix; - uint32_t data_dims; - - po::options_description desc{"Arguments"}; - try - { - desc.add_options()("help,h", "Print information on arguments"); - desc.add_options()("data_type", po::value(&data_type)->required(), "data type "); - desc.add_options()("index_path_prefix", po::value(&index_path_prefix)->required(), - "Path prefix to the index"); - desc.add_options()("data_dims", po::value(&data_dims)->required(), "Dimensionality of the data"); - - po::variables_map vm; - po::store(po::parse_command_line(argc, argv, desc), vm); - if (vm.count("help")) - { - std::cout << desc; - return 0; - } - po::notify(vm); - } - catch (const std::exception &ex) - { - std::cerr << ex.what() << '\n'; - return -1; - } - - try - { - if (data_type == std::string("int8")) - bfs_count(index_path_prefix, data_dims); - else if (data_type == std::string("uint8")) - bfs_count(index_path_prefix, data_dims); - if (data_type == std::string("float")) - bfs_count(index_path_prefix, data_dims); - } - catch (std::exception &e) - { - std::cout << std::string(e.what()) << std::endl; - diskann::cerr << "Index BFS failed." << std::endl; - return -1; - } -} diff --git a/packages/leann-backend-diskann/third_party/DiskANN/apps/utils/create_disk_layout.cpp b/packages/leann-backend-diskann/third_party/DiskANN/apps/utils/create_disk_layout.cpp deleted file mode 100644 index f494c12..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/apps/utils/create_disk_layout.cpp +++ /dev/null @@ -1,48 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT license. - -#include -#include -#include -#include -#include -#include - -#include "utils.h" -#include "disk_utils.h" -#include "cached_io.h" - -template int create_disk_layout(char **argv) -{ - std::string base_file(argv[2]); - std::string vamana_file(argv[3]); - std::string output_file(argv[4]); - diskann::create_disk_layout(base_file, vamana_file, output_file); - return 0; -} - -int main(int argc, char **argv) -{ - if (argc != 5) - { - std::cout << argv[0] - << " data_type data_bin " - "vamana_index_file output_diskann_index_file" - << std::endl; - exit(-1); - } - - int ret_val = -1; - if (std::string(argv[1]) == std::string("float")) - ret_val = create_disk_layout(argv); - else if (std::string(argv[1]) == std::string("int8")) - ret_val = create_disk_layout(argv); - else if (std::string(argv[1]) == std::string("uint8")) - ret_val = create_disk_layout(argv); - else - { - std::cout << "unsupported type. use int8/uint8/float " << std::endl; - ret_val = -2; - } - return ret_val; -} diff --git a/packages/leann-backend-diskann/third_party/DiskANN/apps/utils/float_bin_to_int8.cpp b/packages/leann-backend-diskann/third_party/DiskANN/apps/utils/float_bin_to_int8.cpp deleted file mode 100644 index 1982005..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/apps/utils/float_bin_to_int8.cpp +++ /dev/null @@ -1,63 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT license. - -#include -#include "utils.h" - -void block_convert(std::ofstream &writer, int8_t *write_buf, std::ifstream &reader, float *read_buf, size_t npts, - size_t ndims, float bias, float scale) -{ - reader.read((char *)read_buf, npts * ndims * sizeof(float)); - - for (size_t i = 0; i < npts; i++) - { - for (size_t d = 0; d < ndims; d++) - { - write_buf[d + i * ndims] = (int8_t)((read_buf[d + i * ndims] - bias) * (254.0 / scale)); - } - } - writer.write((char *)write_buf, npts * ndims); -} - -int main(int argc, char **argv) -{ - if (argc != 5) - { - std::cout << "Usage: " << argv[0] << " input_bin output_tsv bias scale" << std::endl; - exit(-1); - } - - std::ifstream reader(argv[1], std::ios::binary); - uint32_t npts_u32; - uint32_t ndims_u32; - reader.read((char *)&npts_u32, sizeof(uint32_t)); - reader.read((char *)&ndims_u32, sizeof(uint32_t)); - size_t npts = npts_u32; - size_t ndims = ndims_u32; - std::cout << "Dataset: #pts = " << npts << ", # dims = " << ndims << std::endl; - - size_t blk_size = 131072; - size_t nblks = ROUND_UP(npts, blk_size) / blk_size; - - std::ofstream writer(argv[2], std::ios::binary); - auto read_buf = new float[blk_size * ndims]; - auto write_buf = new int8_t[blk_size * ndims]; - float bias = (float)atof(argv[3]); - float scale = (float)atof(argv[4]); - - writer.write((char *)(&npts_u32), sizeof(uint32_t)); - writer.write((char *)(&ndims_u32), sizeof(uint32_t)); - - for (size_t i = 0; i < nblks; i++) - { - size_t cblk_size = std::min(npts - i * blk_size, blk_size); - block_convert(writer, write_buf, reader, read_buf, cblk_size, ndims, bias, scale); - std::cout << "Block #" << i << " written" << std::endl; - } - - delete[] read_buf; - delete[] write_buf; - - writer.close(); - reader.close(); -} diff --git a/packages/leann-backend-diskann/third_party/DiskANN/apps/utils/fvecs_to_bin.cpp b/packages/leann-backend-diskann/third_party/DiskANN/apps/utils/fvecs_to_bin.cpp deleted file mode 100644 index 873ad3b..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/apps/utils/fvecs_to_bin.cpp +++ /dev/null @@ -1,95 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT license. - -#include -#include "utils.h" - -// Convert float types -void block_convert_float(std::ifstream &reader, std::ofstream &writer, float *read_buf, float *write_buf, size_t npts, - size_t ndims) -{ - reader.read((char *)read_buf, npts * (ndims * sizeof(float) + sizeof(uint32_t))); - for (size_t i = 0; i < npts; i++) - { - memcpy(write_buf + i * ndims, (read_buf + i * (ndims + 1)) + 1, ndims * sizeof(float)); - } - writer.write((char *)write_buf, npts * ndims * sizeof(float)); -} - -// Convert byte types -void block_convert_byte(std::ifstream &reader, std::ofstream &writer, uint8_t *read_buf, uint8_t *write_buf, - size_t npts, size_t ndims) -{ - reader.read((char *)read_buf, npts * (ndims * sizeof(uint8_t) + sizeof(uint32_t))); - for (size_t i = 0; i < npts; i++) - { - memcpy(write_buf + i * ndims, (read_buf + i * (ndims + sizeof(uint32_t))) + sizeof(uint32_t), - ndims * sizeof(uint8_t)); - } - writer.write((char *)write_buf, npts * ndims * sizeof(uint8_t)); -} - -int main(int argc, char **argv) -{ - if (argc != 4) - { - std::cout << argv[0] << " input_vecs output_bin" << std::endl; - exit(-1); - } - - int datasize = sizeof(float); - - if (strcmp(argv[1], "uint8") == 0 || strcmp(argv[1], "int8") == 0) - { - datasize = sizeof(uint8_t); - } - else if (strcmp(argv[1], "float") != 0) - { - std::cout << "Error: type not supported. Use float/int8/uint8" << std::endl; - exit(-1); - } - - std::ifstream reader(argv[2], std::ios::binary | std::ios::ate); - size_t fsize = reader.tellg(); - reader.seekg(0, std::ios::beg); - - uint32_t ndims_u32; - reader.read((char *)&ndims_u32, sizeof(uint32_t)); - reader.seekg(0, std::ios::beg); - size_t ndims = (size_t)ndims_u32; - size_t npts = fsize / ((ndims * datasize) + sizeof(uint32_t)); - std::cout << "Dataset: #pts = " << npts << ", # dims = " << ndims << std::endl; - - size_t blk_size = 131072; - size_t nblks = ROUND_UP(npts, blk_size) / blk_size; - std::cout << "# blks: " << nblks << std::endl; - std::ofstream writer(argv[3], std::ios::binary); - int32_t npts_s32 = (int32_t)npts; - int32_t ndims_s32 = (int32_t)ndims; - writer.write((char *)&npts_s32, sizeof(int32_t)); - writer.write((char *)&ndims_s32, sizeof(int32_t)); - - size_t chunknpts = std::min(npts, blk_size); - uint8_t *read_buf = new uint8_t[chunknpts * ((ndims * datasize) + sizeof(uint32_t))]; - uint8_t *write_buf = new uint8_t[chunknpts * ndims * datasize]; - - for (size_t i = 0; i < nblks; i++) - { - size_t cblk_size = std::min(npts - i * blk_size, blk_size); - if (datasize == sizeof(float)) - { - block_convert_float(reader, writer, (float *)read_buf, (float *)write_buf, cblk_size, ndims); - } - else - { - block_convert_byte(reader, writer, read_buf, write_buf, cblk_size, ndims); - } - std::cout << "Block #" << i << " written" << std::endl; - } - - delete[] read_buf; - delete[] write_buf; - - reader.close(); - writer.close(); -} diff --git a/packages/leann-backend-diskann/third_party/DiskANN/apps/utils/fvecs_to_bvecs.cpp b/packages/leann-backend-diskann/third_party/DiskANN/apps/utils/fvecs_to_bvecs.cpp deleted file mode 100644 index f9c2aa7..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/apps/utils/fvecs_to_bvecs.cpp +++ /dev/null @@ -1,56 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT license. - -#include -#include "utils.h" - -void block_convert(std::ifstream &reader, std::ofstream &writer, float *read_buf, uint8_t *write_buf, size_t npts, - size_t ndims) -{ - reader.read((char *)read_buf, npts * (ndims * sizeof(float) + sizeof(uint32_t))); - for (size_t i = 0; i < npts; i++) - { - memcpy(write_buf + i * (ndims + 4), read_buf + i * (ndims + 1), sizeof(uint32_t)); - for (size_t d = 0; d < ndims; d++) - write_buf[i * (ndims + 4) + 4 + d] = (uint8_t)read_buf[i * (ndims + 1) + 1 + d]; - } - writer.write((char *)write_buf, npts * (ndims * 1 + 4)); -} - -int main(int argc, char **argv) -{ - if (argc != 3) - { - std::cout << argv[0] << " input_fvecs output_bvecs(uint8)" << std::endl; - exit(-1); - } - std::ifstream reader(argv[1], std::ios::binary | std::ios::ate); - size_t fsize = reader.tellg(); - reader.seekg(0, std::ios::beg); - - uint32_t ndims_u32; - reader.read((char *)&ndims_u32, sizeof(uint32_t)); - reader.seekg(0, std::ios::beg); - size_t ndims = (size_t)ndims_u32; - size_t npts = fsize / ((ndims + 1) * sizeof(float)); - std::cout << "Dataset: #pts = " << npts << ", # dims = " << ndims << std::endl; - - size_t blk_size = 131072; - size_t nblks = ROUND_UP(npts, blk_size) / blk_size; - std::cout << "# blks: " << nblks << std::endl; - std::ofstream writer(argv[2], std::ios::binary); - auto read_buf = new float[npts * (ndims + 1)]; - auto write_buf = new uint8_t[npts * (ndims + 4)]; - for (size_t i = 0; i < nblks; i++) - { - size_t cblk_size = std::min(npts - i * blk_size, blk_size); - block_convert(reader, writer, read_buf, write_buf, cblk_size, ndims); - std::cout << "Block #" << i << " written" << std::endl; - } - - delete[] read_buf; - delete[] write_buf; - - reader.close(); - writer.close(); -} diff --git a/packages/leann-backend-diskann/third_party/DiskANN/apps/utils/gen_random_slice.cpp b/packages/leann-backend-diskann/third_party/DiskANN/apps/utils/gen_random_slice.cpp deleted file mode 100644 index a4cd96e..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/apps/utils/gen_random_slice.cpp +++ /dev/null @@ -1,58 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT license. - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "partition.h" -#include "utils.h" - -#include -#include -#include -#include - -template int aux_main(char **argv) -{ - std::string base_file(argv[2]); - std::string output_prefix(argv[3]); - float sampling_rate = (float)(std::atof(argv[4])); - gen_random_slice(base_file, output_prefix, sampling_rate); - return 0; -} - -int main(int argc, char **argv) -{ - if (argc != 5) - { - std::cout << argv[0] - << " data_type [float/int8/uint8] base_bin_file " - "sample_output_prefix sampling_probability" - << std::endl; - exit(-1); - } - - if (std::string(argv[1]) == std::string("float")) - { - aux_main(argv); - } - else if (std::string(argv[1]) == std::string("int8")) - { - aux_main(argv); - } - else if (std::string(argv[1]) == std::string("uint8")) - { - aux_main(argv); - } - else - std::cout << "Unsupported type. Use float/int8/uint8." << std::endl; - return 0; -} diff --git a/packages/leann-backend-diskann/third_party/DiskANN/apps/utils/generate_pq.cpp b/packages/leann-backend-diskann/third_party/DiskANN/apps/utils/generate_pq.cpp deleted file mode 100644 index a881b11..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/apps/utils/generate_pq.cpp +++ /dev/null @@ -1,70 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT license. - -#include "math_utils.h" -#include "pq.h" -#include "partition.h" - -#define KMEANS_ITERS_FOR_PQ 15 - -template -bool generate_pq(const std::string &data_path, const std::string &index_prefix_path, const size_t num_pq_centers, - const size_t num_pq_chunks, const float sampling_rate, const bool opq) -{ - std::string pq_pivots_path = index_prefix_path + "_pq_pivots.bin"; - std::string pq_compressed_vectors_path = index_prefix_path + "_pq_compressed.bin"; - - // generates random sample and sets it to train_data and updates train_size - size_t train_size, train_dim; - float *train_data; - gen_random_slice(data_path, sampling_rate, train_data, train_size, train_dim); - std::cout << "For computing pivots, loaded sample data of size " << train_size << std::endl; - - if (opq) - { - diskann::generate_opq_pivots(train_data, train_size, (uint32_t)train_dim, (uint32_t)num_pq_centers, - (uint32_t)num_pq_chunks, pq_pivots_path, true); - } - else - { - diskann::generate_pq_pivots(train_data, train_size, (uint32_t)train_dim, (uint32_t)num_pq_centers, - (uint32_t)num_pq_chunks, KMEANS_ITERS_FOR_PQ, pq_pivots_path); - } - diskann::generate_pq_data_from_pivots(data_path, (uint32_t)num_pq_centers, (uint32_t)num_pq_chunks, - pq_pivots_path, pq_compressed_vectors_path, true); - - delete[] train_data; - - return 0; -} - -int main(int argc, char **argv) -{ - if (argc != 7) - { - std::cout << "Usage: \n" - << argv[0] - << " " - " " - " " - << std::endl; - } - else - { - const std::string data_path(argv[2]); - const std::string index_prefix_path(argv[3]); - const size_t num_pq_centers = 256; - const size_t num_pq_chunks = (size_t)atoi(argv[4]); - const float sampling_rate = (float)atof(argv[5]); - const bool opq = atoi(argv[6]) == 0 ? false : true; - - if (std::string(argv[1]) == std::string("float")) - generate_pq(data_path, index_prefix_path, num_pq_centers, num_pq_chunks, sampling_rate, opq); - else if (std::string(argv[1]) == std::string("int8")) - generate_pq(data_path, index_prefix_path, num_pq_centers, num_pq_chunks, sampling_rate, opq); - else if (std::string(argv[1]) == std::string("uint8")) - generate_pq(data_path, index_prefix_path, num_pq_centers, num_pq_chunks, sampling_rate, opq); - else - std::cout << "Error. wrong file type" << std::endl; - } -} diff --git a/packages/leann-backend-diskann/third_party/DiskANN/apps/utils/generate_synthetic_labels.cpp b/packages/leann-backend-diskann/third_party/DiskANN/apps/utils/generate_synthetic_labels.cpp deleted file mode 100644 index 6741760..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/apps/utils/generate_synthetic_labels.cpp +++ /dev/null @@ -1,204 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT license. - -#include -#include -#include -#include -#include -#include "utils.h" - -namespace po = boost::program_options; -class ZipfDistribution -{ - public: - ZipfDistribution(uint64_t num_points, uint32_t num_labels) - : num_labels(num_labels), num_points(num_points), - uniform_zero_to_one(std::uniform_real_distribution<>(0.0, 1.0)) - { - } - - std::unordered_map createDistributionMap() - { - std::unordered_map map; - uint32_t primary_label_freq = (uint32_t)ceil(num_points * distribution_factor); - for (uint32_t i{1}; i < num_labels + 1; i++) - { - map[i] = (uint32_t)ceil(primary_label_freq / i); - } - return map; - } - - int writeDistribution(std::ofstream &outfile) - { - auto distribution_map = createDistributionMap(); - for (uint32_t i{0}; i < num_points; i++) - { - bool label_written = false; - for (auto it = distribution_map.cbegin(); it != distribution_map.cend(); it++) - { - auto label_selection_probability = std::bernoulli_distribution(distribution_factor / (double)it->first); - if (label_selection_probability(rand_engine) && distribution_map[it->first] > 0) - { - if (label_written) - { - outfile << ','; - } - outfile << it->first; - label_written = true; - // remove label from map if we have used all labels - distribution_map[it->first] -= 1; - } - } - if (!label_written) - { - outfile << 0; - } - if (i < num_points - 1) - { - outfile << '\n'; - } - } - return 0; - } - - int writeDistribution(std::string filename) - { - std::ofstream outfile(filename); - if (!outfile.is_open()) - { - std::cerr << "Error: could not open output file " << filename << '\n'; - return -1; - } - writeDistribution(outfile); - outfile.close(); - } - - private: - const uint32_t num_labels; - const uint64_t num_points; - const double distribution_factor = 0.7; - std::knuth_b rand_engine; - const std::uniform_real_distribution uniform_zero_to_one; -}; - -int main(int argc, char **argv) -{ - std::string output_file, distribution_type; - uint32_t num_labels; - uint64_t num_points; - - try - { - po::options_description desc{"Arguments"}; - - desc.add_options()("help,h", "Print information on arguments"); - desc.add_options()("output_file,O", po::value(&output_file)->required(), - "Filename for saving the label file"); - desc.add_options()("num_points,N", po::value(&num_points)->required(), "Number of points in dataset"); - desc.add_options()("num_labels,L", po::value(&num_labels)->required(), - "Number of unique labels, up to 5000"); - desc.add_options()("distribution_type,DT", po::value(&distribution_type)->default_value("random"), - "Distribution function for labels defaults " - "to random"); - - po::variables_map vm; - po::store(po::parse_command_line(argc, argv, desc), vm); - if (vm.count("help")) - { - std::cout << desc; - return 0; - } - po::notify(vm); - } - catch (const std::exception &ex) - { - std::cerr << ex.what() << '\n'; - return -1; - } - - if (num_labels > 5000) - { - std::cerr << "Error: num_labels must be 5000 or less" << '\n'; - return -1; - } - - if (num_points <= 0) - { - std::cerr << "Error: num_points must be greater than 0" << '\n'; - return -1; - } - - std::cout << "Generating synthetic labels for " << num_points << " points with " << num_labels << " unique labels" - << '\n'; - - try - { - std::ofstream outfile(output_file); - if (!outfile.is_open()) - { - std::cerr << "Error: could not open output file " << output_file << '\n'; - return -1; - } - - if (distribution_type == "zipf") - { - ZipfDistribution zipf(num_points, num_labels); - zipf.writeDistribution(outfile); - } - else if (distribution_type == "random") - { - for (size_t i = 0; i < num_points; i++) - { - bool label_written = false; - for (size_t j = 1; j <= num_labels; j++) - { - // 50% chance to assign each label - if (rand() > (RAND_MAX / 2)) - { - if (label_written) - { - outfile << ','; - } - outfile << j; - label_written = true; - } - } - if (!label_written) - { - outfile << 0; - } - if (i < num_points - 1) - { - outfile << '\n'; - } - } - } - else if (distribution_type == "one_per_point") - { - std::random_device rd; // obtain a random number from hardware - std::mt19937 gen(rd()); // seed the generator - std::uniform_int_distribution<> distr(0, num_labels); // define the range - - for (size_t i = 0; i < num_points; i++) - { - outfile << distr(gen); - if (i != num_points - 1) - outfile << '\n'; - } - } - if (outfile.is_open()) - { - outfile.close(); - } - - std::cout << "Labels written to " << output_file << '\n'; - } - catch (const std::exception &ex) - { - std::cerr << "Label generation failed: " << ex.what() << '\n'; - return -1; - } - - return 0; -} \ No newline at end of file diff --git a/packages/leann-backend-diskann/third_party/DiskANN/apps/utils/int8_to_float.cpp b/packages/leann-backend-diskann/third_party/DiskANN/apps/utils/int8_to_float.cpp deleted file mode 100644 index dcdfddc..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/apps/utils/int8_to_float.cpp +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT license. - -#include -#include "utils.h" - -int main(int argc, char **argv) -{ - if (argc != 3) - { - std::cout << argv[0] << " input_int8_bin output_float_bin" << std::endl; - exit(-1); - } - - int8_t *input; - size_t npts, nd; - diskann::load_bin(argv[1], input, npts, nd); - float *output = new float[npts * nd]; - diskann::convert_types(input, output, npts, nd); - diskann::save_bin(argv[2], output, npts, nd); - delete[] output; - delete[] input; -} diff --git a/packages/leann-backend-diskann/third_party/DiskANN/apps/utils/int8_to_float_scale.cpp b/packages/leann-backend-diskann/third_party/DiskANN/apps/utils/int8_to_float_scale.cpp deleted file mode 100644 index 19fbc6c..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/apps/utils/int8_to_float_scale.cpp +++ /dev/null @@ -1,63 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT license. - -#include -#include "utils.h" - -void block_convert(std::ofstream &writer, float *write_buf, std::ifstream &reader, int8_t *read_buf, size_t npts, - size_t ndims, float bias, float scale) -{ - reader.read((char *)read_buf, npts * ndims * sizeof(int8_t)); - - for (size_t i = 0; i < npts; i++) - { - for (size_t d = 0; d < ndims; d++) - { - write_buf[d + i * ndims] = (((float)read_buf[d + i * ndims] - bias) * scale); - } - } - writer.write((char *)write_buf, npts * ndims * sizeof(float)); -} - -int main(int argc, char **argv) -{ - if (argc != 5) - { - std::cout << "Usage: " << argv[0] << " input-int8.bin output-float.bin bias scale" << std::endl; - exit(-1); - } - - std::ifstream reader(argv[1], std::ios::binary); - uint32_t npts_u32; - uint32_t ndims_u32; - reader.read((char *)&npts_u32, sizeof(uint32_t)); - reader.read((char *)&ndims_u32, sizeof(uint32_t)); - size_t npts = npts_u32; - size_t ndims = ndims_u32; - std::cout << "Dataset: #pts = " << npts << ", # dims = " << ndims << std::endl; - - size_t blk_size = 131072; - size_t nblks = ROUND_UP(npts, blk_size) / blk_size; - - std::ofstream writer(argv[2], std::ios::binary); - auto read_buf = new int8_t[blk_size * ndims]; - auto write_buf = new float[blk_size * ndims]; - float bias = (float)atof(argv[3]); - float scale = (float)atof(argv[4]); - - writer.write((char *)(&npts_u32), sizeof(uint32_t)); - writer.write((char *)(&ndims_u32), sizeof(uint32_t)); - - for (size_t i = 0; i < nblks; i++) - { - size_t cblk_size = std::min(npts - i * blk_size, blk_size); - block_convert(writer, write_buf, reader, read_buf, cblk_size, ndims, bias, scale); - std::cout << "Block #" << i << " written" << std::endl; - } - - delete[] read_buf; - delete[] write_buf; - - writer.close(); - reader.close(); -} diff --git a/packages/leann-backend-diskann/third_party/DiskANN/apps/utils/ivecs_to_bin.cpp b/packages/leann-backend-diskann/third_party/DiskANN/apps/utils/ivecs_to_bin.cpp deleted file mode 100644 index ea8a4a3..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/apps/utils/ivecs_to_bin.cpp +++ /dev/null @@ -1,58 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT license. - -#include -#include "utils.h" - -void block_convert(std::ifstream &reader, std::ofstream &writer, uint32_t *read_buf, uint32_t *write_buf, size_t npts, - size_t ndims) -{ - reader.read((char *)read_buf, npts * (ndims * sizeof(uint32_t) + sizeof(uint32_t))); - for (size_t i = 0; i < npts; i++) - { - memcpy(write_buf + i * ndims, (read_buf + i * (ndims + 1)) + 1, ndims * sizeof(uint32_t)); - } - writer.write((char *)write_buf, npts * ndims * sizeof(uint32_t)); -} - -int main(int argc, char **argv) -{ - if (argc != 3) - { - std::cout << argv[0] << " input_ivecs output_bin" << std::endl; - exit(-1); - } - std::ifstream reader(argv[1], std::ios::binary | std::ios::ate); - size_t fsize = reader.tellg(); - reader.seekg(0, std::ios::beg); - - uint32_t ndims_u32; - reader.read((char *)&ndims_u32, sizeof(uint32_t)); - reader.seekg(0, std::ios::beg); - size_t ndims = (size_t)ndims_u32; - size_t npts = fsize / ((ndims + 1) * sizeof(uint32_t)); - std::cout << "Dataset: #pts = " << npts << ", # dims = " << ndims << std::endl; - - size_t blk_size = 131072; - size_t nblks = ROUND_UP(npts, blk_size) / blk_size; - std::cout << "# blks: " << nblks << std::endl; - std::ofstream writer(argv[2], std::ios::binary); - int npts_s32 = (int)npts; - int ndims_s32 = (int)ndims; - writer.write((char *)&npts_s32, sizeof(int)); - writer.write((char *)&ndims_s32, sizeof(int)); - uint32_t *read_buf = new uint32_t[npts * (ndims + 1)]; - uint32_t *write_buf = new uint32_t[npts * ndims]; - for (size_t i = 0; i < nblks; i++) - { - size_t cblk_size = std::min(npts - i * blk_size, blk_size); - block_convert(reader, writer, read_buf, write_buf, cblk_size, ndims); - std::cout << "Block #" << i << " written" << std::endl; - } - - delete[] read_buf; - delete[] write_buf; - - reader.close(); - writer.close(); -} diff --git a/packages/leann-backend-diskann/third_party/DiskANN/apps/utils/merge_shards.cpp b/packages/leann-backend-diskann/third_party/DiskANN/apps/utils/merge_shards.cpp deleted file mode 100644 index 106c15e..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/apps/utils/merge_shards.cpp +++ /dev/null @@ -1,42 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT license. - -#include -#include -#include -#include -#include -#include -#include -#include - -#include "disk_utils.h" -#include "cached_io.h" -#include "utils.h" - -int main(int argc, char **argv) -{ - if (argc != 9) - { - std::cout << argv[0] - << " vamana_index_prefix[1] vamana_index_suffix[2] " - "idmaps_prefix[3] " - "idmaps_suffix[4] n_shards[5] max_degree[6] " - "output_vamana_path[7] " - "output_medoids_path[8]" - << std::endl; - exit(-1); - } - - std::string vamana_prefix(argv[1]); - std::string vamana_suffix(argv[2]); - std::string idmaps_prefix(argv[3]); - std::string idmaps_suffix(argv[4]); - uint64_t nshards = (uint64_t)std::atoi(argv[5]); - uint32_t max_degree = (uint64_t)std::atoi(argv[6]); - std::string output_index(argv[7]); - std::string output_medoids(argv[8]); - - return diskann::merge_shards(vamana_prefix, vamana_suffix, idmaps_prefix, idmaps_suffix, nshards, max_degree, - output_index, output_medoids); -} diff --git a/packages/leann-backend-diskann/third_party/DiskANN/apps/utils/partition_data.cpp b/packages/leann-backend-diskann/third_party/DiskANN/apps/utils/partition_data.cpp deleted file mode 100644 index 2520f3f..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/apps/utils/partition_data.cpp +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT license. - -#include -#include -#include "cached_io.h" -#include "partition.h" - -// DEPRECATED: NEED TO REPROGRAM - -int main(int argc, char **argv) -{ - if (argc != 7) - { - std::cout << "Usage:\n" - << argv[0] - << " datatype " - " " - " " - << std::endl; - exit(-1); - } - - const std::string data_path(argv[2]); - const std::string prefix_path(argv[3]); - const float sampling_rate = (float)atof(argv[4]); - const size_t num_partitions = (size_t)std::atoi(argv[5]); - const size_t max_reps = 15; - const size_t k_index = (size_t)std::atoi(argv[6]); - - if (std::string(argv[1]) == std::string("float")) - partition(data_path, sampling_rate, num_partitions, max_reps, prefix_path, k_index); - else if (std::string(argv[1]) == std::string("int8")) - partition(data_path, sampling_rate, num_partitions, max_reps, prefix_path, k_index); - else if (std::string(argv[1]) == std::string("uint8")) - partition(data_path, sampling_rate, num_partitions, max_reps, prefix_path, k_index); - else - std::cout << "unsupported data format. use float/int8/uint8" << std::endl; -} diff --git a/packages/leann-backend-diskann/third_party/DiskANN/apps/utils/partition_with_ram_budget.cpp b/packages/leann-backend-diskann/third_party/DiskANN/apps/utils/partition_with_ram_budget.cpp deleted file mode 100644 index 937b68d..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/apps/utils/partition_with_ram_budget.cpp +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT license. - -#include -#include -#include "cached_io.h" -#include "partition.h" - -// DEPRECATED: NEED TO REPROGRAM - -int main(int argc, char **argv) -{ - if (argc != 8) - { - std::cout << "Usage:\n" - << argv[0] - << " datatype " - " " - " " - << std::endl; - exit(-1); - } - - const std::string data_path(argv[2]); - const std::string prefix_path(argv[3]); - const float sampling_rate = (float)atof(argv[4]); - const double ram_budget = (double)std::atof(argv[5]); - const size_t graph_degree = (size_t)std::atoi(argv[6]); - const size_t k_index = (size_t)std::atoi(argv[7]); - - if (std::string(argv[1]) == std::string("float")) - partition_with_ram_budget(data_path, sampling_rate, ram_budget, graph_degree, prefix_path, k_index); - else if (std::string(argv[1]) == std::string("int8")) - partition_with_ram_budget(data_path, sampling_rate, ram_budget, graph_degree, prefix_path, k_index); - else if (std::string(argv[1]) == std::string("uint8")) - partition_with_ram_budget(data_path, sampling_rate, ram_budget, graph_degree, prefix_path, k_index); - else - std::cout << "unsupported data format. use float/int8/uint8" << std::endl; -} diff --git a/packages/leann-backend-diskann/third_party/DiskANN/apps/utils/rand_data_gen.cpp b/packages/leann-backend-diskann/third_party/DiskANN/apps/utils/rand_data_gen.cpp deleted file mode 100644 index e89ede8..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/apps/utils/rand_data_gen.cpp +++ /dev/null @@ -1,237 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT license. - -#include -#include -#include -#include -#include - -#include "utils.h" - -namespace po = boost::program_options; - -int block_write_float(std::ofstream &writer, size_t ndims, size_t npts, bool normalization, float norm, - float rand_scale) -{ - auto vec = new float[ndims]; - - std::random_device rd{}; - std::mt19937 gen{rd()}; - std::normal_distribution<> normal_rand{0, 1}; - std::uniform_real_distribution<> unif_dis(1.0, rand_scale); - - for (size_t i = 0; i < npts; i++) - { - float sum = 0; - float scale = 1.0f; - if (rand_scale > 1.0f) - scale = (float)unif_dis(gen); - for (size_t d = 0; d < ndims; ++d) - vec[d] = scale * (float)normal_rand(gen); - if (normalization) - { - for (size_t d = 0; d < ndims; ++d) - sum += vec[d] * vec[d]; - for (size_t d = 0; d < ndims; ++d) - vec[d] = vec[d] * norm / std::sqrt(sum); - } - - writer.write((char *)vec, ndims * sizeof(float)); - } - - delete[] vec; - return 0; -} - -int block_write_int8(std::ofstream &writer, size_t ndims, size_t npts, float norm) -{ - auto vec = new float[ndims]; - auto vec_T = new int8_t[ndims]; - - std::random_device rd{}; - std::mt19937 gen{rd()}; - std::normal_distribution<> normal_rand{0, 1}; - - for (size_t i = 0; i < npts; i++) - { - float sum = 0; - for (size_t d = 0; d < ndims; ++d) - vec[d] = (float)normal_rand(gen); - for (size_t d = 0; d < ndims; ++d) - sum += vec[d] * vec[d]; - for (size_t d = 0; d < ndims; ++d) - vec[d] = vec[d] * norm / std::sqrt(sum); - - for (size_t d = 0; d < ndims; ++d) - { - vec_T[d] = (int8_t)std::round(vec[d]); - } - - writer.write((char *)vec_T, ndims * sizeof(int8_t)); - } - - delete[] vec; - delete[] vec_T; - return 0; -} - -int block_write_uint8(std::ofstream &writer, size_t ndims, size_t npts, float norm) -{ - auto vec = new float[ndims]; - auto vec_T = new int8_t[ndims]; - - std::random_device rd{}; - std::mt19937 gen{rd()}; - std::normal_distribution<> normal_rand{0, 1}; - - for (size_t i = 0; i < npts; i++) - { - float sum = 0; - for (size_t d = 0; d < ndims; ++d) - vec[d] = (float)normal_rand(gen); - for (size_t d = 0; d < ndims; ++d) - sum += vec[d] * vec[d]; - for (size_t d = 0; d < ndims; ++d) - vec[d] = vec[d] * norm / std::sqrt(sum); - - for (size_t d = 0; d < ndims; ++d) - { - vec_T[d] = 128 + (int8_t)std::round(vec[d]); - } - - writer.write((char *)vec_T, ndims * sizeof(uint8_t)); - } - - delete[] vec; - delete[] vec_T; - return 0; -} - -int main(int argc, char **argv) -{ - std::string data_type, output_file; - size_t ndims, npts; - float norm, rand_scaling; - bool normalization = false; - try - { - po::options_description desc{"Arguments"}; - - desc.add_options()("help,h", "Print information on arguments"); - - desc.add_options()("data_type", po::value(&data_type)->required(), "data type "); - desc.add_options()("output_file", po::value(&output_file)->required(), - "File name for saving the random vectors"); - desc.add_options()("ndims,D", po::value(&ndims)->required(), "Dimensoinality of the vector"); - desc.add_options()("npts,N", po::value(&npts)->required(), "Number of vectors"); - desc.add_options()("norm", po::value(&norm)->default_value(-1.0f), - "Norm of the vectors (if not specified, vectors are not normalized)"); - desc.add_options()("rand_scaling", po::value(&rand_scaling)->default_value(1.0f), - "Each vector will be scaled (if not explicitly normalized) by a factor randomly chosen from " - "[1, rand_scale]. Only applicable for floating point data"); - po::variables_map vm; - po::store(po::parse_command_line(argc, argv, desc), vm); - if (vm.count("help")) - { - std::cout << desc; - return 0; - } - po::notify(vm); - } - catch (const std::exception &ex) - { - std::cerr << ex.what() << '\n'; - return -1; - } - - if (data_type != std::string("float") && data_type != std::string("int8") && data_type != std::string("uint8")) - { - std::cout << "Unsupported type. float, int8 and uint8 types are supported." << std::endl; - return -1; - } - - if (norm > 0.0) - { - normalization = true; - } - - if (rand_scaling < 1.0) - { - std::cout << "We will only scale the vector norms randomly in [1, value], so value must be >= 1." << std::endl; - return -1; - } - - if ((rand_scaling > 1.0) && (normalization == true)) - { - std::cout << "Data cannot be normalized and randomly scaled at same time. Use one or the other." << std::endl; - return -1; - } - - if (data_type == std::string("int8") || data_type == std::string("uint8")) - { - if (norm > 127) - { - std::cerr << "Error: for int8/uint8 datatypes, L2 norm can not be " - "greater " - "than 127" - << std::endl; - return -1; - } - if (rand_scaling > 1.0) - { - std::cout << "Data scaling only supported for floating point data." << std::endl; - return -1; - } - } - - try - { - std::ofstream writer; - writer.exceptions(std::ofstream::failbit | std::ofstream::badbit); - writer.open(output_file, std::ios::binary); - auto npts_u32 = (uint32_t)npts; - auto ndims_u32 = (uint32_t)ndims; - writer.write((char *)&npts_u32, sizeof(uint32_t)); - writer.write((char *)&ndims_u32, sizeof(uint32_t)); - - size_t blk_size = 131072; - size_t nblks = ROUND_UP(npts, blk_size) / blk_size; - std::cout << "# blks: " << nblks << std::endl; - - int ret = 0; - for (size_t i = 0; i < nblks; i++) - { - size_t cblk_size = std::min(npts - i * blk_size, blk_size); - if (data_type == std::string("float")) - { - ret = block_write_float(writer, ndims, cblk_size, normalization, norm, rand_scaling); - } - else if (data_type == std::string("int8")) - { - ret = block_write_int8(writer, ndims, cblk_size, norm); - } - else if (data_type == std::string("uint8")) - { - ret = block_write_uint8(writer, ndims, cblk_size, norm); - } - if (ret == 0) - std::cout << "Block #" << i << " written" << std::endl; - else - { - writer.close(); - std::cout << "failed to write" << std::endl; - return -1; - } - } - writer.close(); - } - catch (const std::exception &e) - { - std::cout << std::string(e.what()) << std::endl; - diskann::cerr << "Index build failed." << std::endl; - return -1; - } - - return 0; -} diff --git a/packages/leann-backend-diskann/third_party/DiskANN/apps/utils/simulate_aggregate_recall.cpp b/packages/leann-backend-diskann/third_party/DiskANN/apps/utils/simulate_aggregate_recall.cpp deleted file mode 100644 index 73c4ea0..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/apps/utils/simulate_aggregate_recall.cpp +++ /dev/null @@ -1,85 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT license. - -#include -#include -#include -#include - -inline float aggregate_recall(const uint32_t k_aggr, const uint32_t k, const uint32_t npart, uint32_t *count, - const std::vector &recalls) -{ - float found = 0; - for (uint32_t i = 0; i < npart; ++i) - { - size_t max_found = std::min(count[i], k); - found += recalls[max_found - 1] * max_found; - } - return found / (float)k_aggr; -} - -void simulate(const uint32_t k_aggr, const uint32_t k, const uint32_t npart, const uint32_t nsim, - const std::vector &recalls) -{ - std::random_device r; - std::default_random_engine randeng(r()); - std::uniform_int_distribution uniform_dist(0, npart - 1); - - uint32_t *count = new uint32_t[npart]; - double aggr_recall = 0; - - for (uint32_t i = 0; i < nsim; ++i) - { - for (uint32_t p = 0; p < npart; ++p) - { - count[p] = 0; - } - for (uint32_t t = 0; t < k_aggr; ++t) - { - count[uniform_dist(randeng)]++; - } - aggr_recall += aggregate_recall(k_aggr, k, npart, count, recalls); - } - - std::cout << "Aggregate recall is " << aggr_recall / (double)nsim << std::endl; - delete[] count; -} - -int main(int argc, char **argv) -{ - if (argc < 6) - { - std::cout << argv[0] << " k_aggregate k_out npart nsim recall@1 recall@2 ... recall@k" << std::endl; - exit(-1); - } - - const uint32_t k_aggr = atoi(argv[1]); - const uint32_t k = atoi(argv[2]); - const uint32_t npart = atoi(argv[3]); - const uint32_t nsim = atoi(argv[4]); - - std::vector recalls; - for (int ctr = 5; ctr < argc; ctr++) - { - recalls.push_back((float)atof(argv[ctr])); - } - - if (recalls.size() != k) - { - std::cerr << "Please input k numbers for recall@1, recall@2 .. recall@k" << std::endl; - } - if (k_aggr > npart * k) - { - std::cerr << "k_aggr must be <= k * npart" << std::endl; - exit(-1); - } - if (nsim <= npart * k_aggr) - { - std::cerr << "Choose nsim > npart*k_aggr" << std::endl; - exit(-1); - } - - simulate(k_aggr, k, npart, nsim, recalls); - - return 0; -} diff --git a/packages/leann-backend-diskann/third_party/DiskANN/apps/utils/stats_label_data.cpp b/packages/leann-backend-diskann/third_party/DiskANN/apps/utils/stats_label_data.cpp deleted file mode 100644 index 3342672..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/apps/utils/stats_label_data.cpp +++ /dev/null @@ -1,147 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT license. - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "utils.h" - -#ifndef _WINDOWS -#include -#include -#include -#include -#else -#include -#endif -namespace po = boost::program_options; - -void stats_analysis(const std::string labels_file, std::string univeral_label, uint32_t density = 10) -{ - std::string token, line; - std::ifstream labels_stream(labels_file); - std::unordered_map label_counts; - std::string label_with_max_points; - uint32_t max_points = 0; - long long sum = 0; - long long point_cnt = 0; - float avg_labels_per_pt, mean_label_size; - - std::vector labels_per_point; - uint32_t dense_pts = 0; - if (labels_stream.is_open()) - { - while (getline(labels_stream, line)) - { - point_cnt++; - std::stringstream iss(line); - uint32_t lbl_cnt = 0; - while (getline(iss, token, ',')) - { - lbl_cnt++; - token.erase(std::remove(token.begin(), token.end(), '\n'), token.end()); - token.erase(std::remove(token.begin(), token.end(), '\r'), token.end()); - if (label_counts.find(token) == label_counts.end()) - label_counts[token] = 0; - label_counts[token]++; - } - if (lbl_cnt >= density) - { - dense_pts++; - } - labels_per_point.emplace_back(lbl_cnt); - } - } - - std::cout << "fraction of dense points with >= " << density - << " labels = " << (float)dense_pts / (float)labels_per_point.size() << std::endl; - std::sort(labels_per_point.begin(), labels_per_point.end()); - - std::vector> label_count_vec; - - for (auto it = label_counts.begin(); it != label_counts.end(); it++) - { - auto &lbl = *it; - label_count_vec.emplace_back(std::make_pair(lbl.first, lbl.second)); - if (lbl.second > max_points) - { - max_points = lbl.second; - label_with_max_points = lbl.first; - } - sum += lbl.second; - } - - sort(label_count_vec.begin(), label_count_vec.end(), - [](const std::pair &lhs, const std::pair &rhs) { - return lhs.second < rhs.second; - }); - - for (float p = 0; p < 1; p += 0.05) - { - std::cout << "Percentile " << (100 * p) << "\t" << label_count_vec[(size_t)(p * label_count_vec.size())].first - << " with count=" << label_count_vec[(size_t)(p * label_count_vec.size())].second << std::endl; - } - - std::cout << "Most common label " - << "\t" << label_count_vec[label_count_vec.size() - 1].first - << " with count=" << label_count_vec[label_count_vec.size() - 1].second << std::endl; - if (label_count_vec.size() > 1) - std::cout << "Second common label " - << "\t" << label_count_vec[label_count_vec.size() - 2].first - << " with count=" << label_count_vec[label_count_vec.size() - 2].second << std::endl; - if (label_count_vec.size() > 2) - std::cout << "Third common label " - << "\t" << label_count_vec[label_count_vec.size() - 3].first - << " with count=" << label_count_vec[label_count_vec.size() - 3].second << std::endl; - avg_labels_per_pt = sum / (float)point_cnt; - mean_label_size = sum / (float)label_counts.size(); - std::cout << "Total number of points = " << point_cnt << ", number of labels = " << label_counts.size() - << std::endl; - std::cout << "Average number of labels per point = " << avg_labels_per_pt << std::endl; - std::cout << "Mean label size excluding 0 = " << mean_label_size << std::endl; - std::cout << "Most popular label is " << label_with_max_points << " with " << max_points << " pts" << std::endl; -} - -int main(int argc, char **argv) -{ - std::string labels_file, universal_label; - uint32_t density; - - po::options_description desc{"Arguments"}; - try - { - desc.add_options()("help,h", "Print information on arguments"); - desc.add_options()("labels_file", po::value(&labels_file)->required(), - "path to labels data file."); - desc.add_options()("universal_label", po::value(&universal_label)->required(), - "Universal label used in labels file."); - desc.add_options()("density", po::value(&density)->default_value(1), - "Number of labels each point in labels file, defaults to 1"); - po::variables_map vm; - po::store(po::parse_command_line(argc, argv, desc), vm); - if (vm.count("help")) - { - std::cout << desc; - return 0; - } - po::notify(vm); - } - catch (const std::exception &e) - { - std::cerr << e.what() << '\n'; - return -1; - } - stats_analysis(labels_file, universal_label, density); -} diff --git a/packages/leann-backend-diskann/third_party/DiskANN/apps/utils/tsv_to_bin.cpp b/packages/leann-backend-diskann/third_party/DiskANN/apps/utils/tsv_to_bin.cpp deleted file mode 100644 index c590a8f..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/apps/utils/tsv_to_bin.cpp +++ /dev/null @@ -1,121 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT license. - -#include -#include "utils.h" - -void block_convert_float(std::ifstream &reader, std::ofstream &writer, size_t npts, size_t ndims) -{ - auto read_buf = new float[npts * (ndims + 1)]; - - auto cursor = read_buf; - float val; - - for (size_t i = 0; i < npts; i++) - { - for (size_t d = 0; d < ndims; ++d) - { - reader >> val; - *cursor = val; - cursor++; - } - } - writer.write((char *)read_buf, npts * ndims * sizeof(float)); - delete[] read_buf; -} - -void block_convert_int8(std::ifstream &reader, std::ofstream &writer, size_t npts, size_t ndims) -{ - auto read_buf = new int8_t[npts * (ndims + 1)]; - - auto cursor = read_buf; - int val; - - for (size_t i = 0; i < npts; i++) - { - for (size_t d = 0; d < ndims; ++d) - { - reader >> val; - *cursor = (int8_t)val; - cursor++; - } - } - writer.write((char *)read_buf, npts * ndims * sizeof(uint8_t)); - delete[] read_buf; -} - -void block_convert_uint8(std::ifstream &reader, std::ofstream &writer, size_t npts, size_t ndims) -{ - auto read_buf = new uint8_t[npts * (ndims + 1)]; - - auto cursor = read_buf; - int val; - - for (size_t i = 0; i < npts; i++) - { - for (size_t d = 0; d < ndims; ++d) - { - reader >> val; - *cursor = (uint8_t)val; - cursor++; - } - } - writer.write((char *)read_buf, npts * ndims * sizeof(uint8_t)); - delete[] read_buf; -} - -int main(int argc, char **argv) -{ - if (argc != 6) - { - std::cout << argv[0] - << " input_filename.tsv output_filename.bin " - "dim num_pts>" - << std::endl; - exit(-1); - } - - if (std::string(argv[1]) != std::string("float") && std::string(argv[1]) != std::string("int8") && - std::string(argv[1]) != std::string("uint8")) - { - std::cout << "Unsupported type. float, int8 and uint8 types are supported." << std::endl; - } - - size_t ndims = atoi(argv[4]); - size_t npts = atoi(argv[5]); - - std::ifstream reader(argv[2], std::ios::binary | std::ios::ate); - // size_t fsize = reader.tellg(); - reader.seekg(0, std::ios::beg); - reader.seekg(0, std::ios::beg); - - size_t blk_size = 131072; - size_t nblks = ROUND_UP(npts, blk_size) / blk_size; - std::cout << "# blks: " << nblks << std::endl; - std::ofstream writer(argv[3], std::ios::binary); - auto npts_u32 = (uint32_t)npts; - auto ndims_u32 = (uint32_t)ndims; - writer.write((char *)&npts_u32, sizeof(uint32_t)); - writer.write((char *)&ndims_u32, sizeof(uint32_t)); - - for (size_t i = 0; i < nblks; i++) - { - size_t cblk_size = std::min(npts - i * blk_size, blk_size); - if (std::string(argv[1]) == std::string("float")) - { - block_convert_float(reader, writer, cblk_size, ndims); - } - else if (std::string(argv[1]) == std::string("int8")) - { - block_convert_int8(reader, writer, cblk_size, ndims); - } - else if (std::string(argv[1]) == std::string("uint8")) - { - block_convert_uint8(reader, writer, cblk_size, ndims); - } - std::cout << "Block #" << i << " written" << std::endl; - } - - reader.close(); - writer.close(); -} diff --git a/packages/leann-backend-diskann/third_party/DiskANN/apps/utils/uint32_to_uint8.cpp b/packages/leann-backend-diskann/third_party/DiskANN/apps/utils/uint32_to_uint8.cpp deleted file mode 100644 index 87b6fb8..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/apps/utils/uint32_to_uint8.cpp +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT license. - -#include -#include "utils.h" - -int main(int argc, char **argv) -{ - if (argc != 3) - { - std::cout << argv[0] << " input_uint32_bin output_int8_bin" << std::endl; - exit(-1); - } - - uint32_t *input; - size_t npts, nd; - diskann::load_bin(argv[1], input, npts, nd); - uint8_t *output = new uint8_t[npts * nd]; - diskann::convert_types(input, output, npts, nd); - diskann::save_bin(argv[2], output, npts, nd); - delete[] output; - delete[] input; -} diff --git a/packages/leann-backend-diskann/third_party/DiskANN/apps/utils/uint8_to_float.cpp b/packages/leann-backend-diskann/third_party/DiskANN/apps/utils/uint8_to_float.cpp deleted file mode 100644 index 6415b7c..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/apps/utils/uint8_to_float.cpp +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT license. - -#include -#include "utils.h" - -int main(int argc, char **argv) -{ - if (argc != 3) - { - std::cout << argv[0] << " input_uint8_bin output_float_bin" << std::endl; - exit(-1); - } - - uint8_t *input; - size_t npts, nd; - diskann::load_bin(argv[1], input, npts, nd); - float *output = new float[npts * nd]; - diskann::convert_types(input, output, npts, nd); - diskann::save_bin(argv[2], output, npts, nd); - delete[] output; - delete[] input; -} diff --git a/packages/leann-backend-diskann/third_party/DiskANN/apps/utils/vector_analysis.cpp b/packages/leann-backend-diskann/third_party/DiskANN/apps/utils/vector_analysis.cpp deleted file mode 100644 index 009df6d..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/apps/utils/vector_analysis.cpp +++ /dev/null @@ -1,163 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT license. - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "partition.h" -#include "utils.h" - -template int analyze_norm(std::string base_file) -{ - std::cout << "Analyzing data norms" << std::endl; - T *data; - size_t npts, ndims; - diskann::load_bin(base_file, data, npts, ndims); - std::vector norms(npts, 0); -#pragma omp parallel for schedule(dynamic) - for (int64_t i = 0; i < (int64_t)npts; i++) - { - for (size_t d = 0; d < ndims; d++) - norms[i] += data[i * ndims + d] * data[i * ndims + d]; - norms[i] = std::sqrt(norms[i]); - } - std::sort(norms.begin(), norms.end()); - for (int p = 0; p < 100; p += 5) - std::cout << "percentile " << p << ": " << norms[(uint64_t)(std::floor((p / 100.0) * npts))] << std::endl; - std::cout << "percentile 100" - << ": " << norms[npts - 1] << std::endl; - delete[] data; - return 0; -} - -template int normalize_base(std::string base_file, std::string out_file) -{ - std::cout << "Normalizing base" << std::endl; - T *data; - size_t npts, ndims; - diskann::load_bin(base_file, data, npts, ndims); - // std::vector norms(npts, 0); -#pragma omp parallel for schedule(dynamic) - for (int64_t i = 0; i < (int64_t)npts; i++) - { - float pt_norm = 0; - for (size_t d = 0; d < ndims; d++) - pt_norm += data[i * ndims + d] * data[i * ndims + d]; - pt_norm = std::sqrt(pt_norm); - for (size_t d = 0; d < ndims; d++) - data[i * ndims + d] = static_cast(data[i * ndims + d] / pt_norm); - } - diskann::save_bin(out_file, data, npts, ndims); - delete[] data; - return 0; -} - -template int augment_base(std::string base_file, std::string out_file, bool prep_base = true) -{ - std::cout << "Analyzing data norms" << std::endl; - T *data; - size_t npts, ndims; - diskann::load_bin(base_file, data, npts, ndims); - std::vector norms(npts, 0); - float max_norm = 0; -#pragma omp parallel for schedule(dynamic) - for (int64_t i = 0; i < (int64_t)npts; i++) - { - for (size_t d = 0; d < ndims; d++) - norms[i] += data[i * ndims + d] * data[i * ndims + d]; - max_norm = norms[i] > max_norm ? norms[i] : max_norm; - } - // std::sort(norms.begin(), norms.end()); - max_norm = std::sqrt(max_norm); - std::cout << "Max norm: " << max_norm << std::endl; - T *new_data; - size_t newdims = ndims + 1; - new_data = new T[npts * newdims]; - for (size_t i = 0; i < npts; i++) - { - if (prep_base) - { - for (size_t j = 0; j < ndims; j++) - { - new_data[i * newdims + j] = static_cast(data[i * ndims + j] / max_norm); - } - float diff = 1 - (norms[i] / (max_norm * max_norm)); - diff = diff <= 0 ? 0 : std::sqrt(diff); - new_data[i * newdims + ndims] = static_cast(diff); - if (diff <= 0) - { - std::cout << i << " has large max norm, investigate if needed. diff = " << diff << std::endl; - } - } - else - { - for (size_t j = 0; j < ndims; j++) - { - new_data[i * newdims + j] = static_cast(data[i * ndims + j] / std::sqrt(norms[i])); - } - new_data[i * newdims + ndims] = 0; - } - } - diskann::save_bin(out_file, new_data, npts, newdims); - delete[] new_data; - delete[] data; - return 0; -} - -template int aux_main(char **argv) -{ - std::string base_file(argv[2]); - uint32_t option = atoi(argv[3]); - if (option == 1) - analyze_norm(base_file); - else if (option == 2) - augment_base(base_file, std::string(argv[4]), true); - else if (option == 3) - augment_base(base_file, std::string(argv[4]), false); - else if (option == 4) - normalize_base(base_file, std::string(argv[4])); - return 0; -} - -int main(int argc, char **argv) -{ - if (argc < 4) - { - std::cout << argv[0] - << " data_type [float/int8/uint8] base_bin_file " - "[option: 1-norm analysis, 2-prep_base_for_mip, " - "3-prep_query_for_mip, 4-normalize-vecs] [out_file for " - "options 2/3/4]" - << std::endl; - exit(-1); - } - - if (std::string(argv[1]) == std::string("float")) - { - aux_main(argv); - } - else if (std::string(argv[1]) == std::string("int8")) - { - aux_main(argv); - } - else if (std::string(argv[1]) == std::string("uint8")) - { - aux_main(argv); - } - else - std::cout << "Unsupported type. Use float/int8/uint8." << std::endl; - return 0; -} diff --git a/packages/leann-backend-diskann/third_party/DiskANN/clang-format.cmake b/packages/leann-backend-diskann/third_party/DiskANN/clang-format.cmake deleted file mode 100644 index 19bb3a8..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/clang-format.cmake +++ /dev/null @@ -1,22 +0,0 @@ -if (NOT MSVC) - message(STATUS "Setting up `make format` and `make checkformat`") - # additional target to perform clang-format run, requires clang-format - # get all project files - file(GLOB_RECURSE ALL_SOURCE_FILES include/*.h include/*.hpp python/src/*.cpp src/*.cpp src/*.hpp apps/*.cpp apps/*.hpp) - - message(status ${ALL_SOURCE_FILES}) - - add_custom_target( - format - COMMAND /usr/bin/clang-format - -i - ${ALL_SOURCE_FILES} - ) - add_custom_target( - checkformat - COMMAND /usr/bin/clang-format - --Werror - --dry-run - ${ALL_SOURCE_FILES} - ) -endif() diff --git a/packages/leann-backend-diskann/third_party/DiskANN/include/abstract_data_store.h b/packages/leann-backend-diskann/third_party/DiskANN/include/abstract_data_store.h deleted file mode 100644 index 89856f1..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/include/abstract_data_store.h +++ /dev/null @@ -1,127 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT license. - -#pragma once - -#include -#include - -#include "types.h" -#include "windows_customizations.h" -#include "distance.h" - -namespace diskann -{ - -template class AbstractScratch; - -template class AbstractDataStore -{ - public: - AbstractDataStore(const location_t capacity, const size_t dim); - - virtual ~AbstractDataStore() = default; - - // Return number of points returned - virtual location_t load(const std::string &filename) = 0; - - // Why does store take num_pts? Since store only has capacity, but we allow - // resizing we can end up in a situation where the store has spare capacity. - // To optimize disk utilization, we pass the number of points that are "true" - // points, so that the store can discard the empty locations before saving. - virtual size_t save(const std::string &filename, const location_t num_pts) = 0; - - DISKANN_DLLEXPORT virtual location_t capacity() const; - - DISKANN_DLLEXPORT virtual size_t get_dims() const; - - // Implementers can choose to return _dim if they are not - // concerned about memory alignment. - // Some distance metrics (like l2) need data vectors to be aligned, so we - // align the dimension by padding zeros. - virtual size_t get_aligned_dim() const = 0; - - // populate the store with vectors (either from a pointer or bin file), - // potentially after pre-processing the vectors if the metric deems so - // e.g., normalizing vectors for cosine distance over floating-point vectors - // useful for bulk or static index building. - virtual void populate_data(const data_t *vectors, const location_t num_pts) = 0; - virtual void populate_data(const std::string &filename, const size_t offset) = 0; - - // save the first num_pts many vectors back to bin file - // note: cannot undo the pre-processing done in populate data - virtual void extract_data_to_bin(const std::string &filename, const location_t num_pts) = 0; - - // Returns the updated capacity of the datastore. Clients should check - // if resize actually changed the capacity to new_num_points before - // proceeding with operations. See the code below: - // auto new_capcity = data_store->resize(new_num_points); - // if ( new_capacity >= new_num_points) { - // //PROCEED - // else - // //ERROR. - virtual location_t resize(const location_t new_num_points); - - // operations on vectors - // like populate_data function, but over one vector at a time useful for - // streaming setting - virtual void get_vector(const location_t i, data_t *dest) const = 0; - virtual void set_vector(const location_t i, const data_t *const vector) = 0; - virtual void prefetch_vector(const location_t loc) = 0; - - // internal shuffle operations to move around vectors - // will bulk-move all the vectors in [old_start_loc, old_start_loc + - // num_points) to [new_start_loc, new_start_loc + num_points) and set the old - // positions to zero vectors. - virtual void move_vectors(const location_t old_start_loc, const location_t new_start_loc, - const location_t num_points) = 0; - - // same as above, without resetting the vectors in [from_loc, from_loc + - // num_points) to zero - virtual void copy_vectors(const location_t from_loc, const location_t to_loc, const location_t num_points) = 0; - - // With the PQ Data Store PR, we have also changed iterate_to_fixed_point to NOT take the query - // from the scratch object. Therefore every data store has to implement preprocess_query which - // at the least will be to copy the query into the scratch object. So making this pure virtual. - virtual void preprocess_query(const data_t *aligned_query, - AbstractScratch *query_scratch = nullptr) const = 0; - // distance functions. - virtual float get_distance(const data_t *query, const location_t loc) const = 0; - virtual void get_distance(const data_t *query, const location_t *locations, const uint32_t location_count, - float *distances, AbstractScratch *scratch_space = nullptr) const = 0; - // Specific overload for index.cpp. - virtual void get_distance(const data_t *preprocessed_query, const std::vector &ids, - std::vector &distances, AbstractScratch *scratch_space) const = 0; - virtual float get_distance(const location_t loc1, const location_t loc2) const = 0; - - // stats of the data stored in store - // Returns the point in the dataset that is closest to the mean of all points - // in the dataset - virtual location_t calculate_medoid() const = 0; - - // REFACTOR PQ TODO: Each data store knows about its distance function, so this is - // redundant. However, we don't have an OptmizedDataStore yet, and to preserve code - // compability, we are exposing this function. - virtual Distance *get_dist_fn() const = 0; - - // search helpers - // if the base data is aligned per the request of the metric, this will tell - // how to align the query vector in a consistent manner - virtual size_t get_alignment_factor() const = 0; - - protected: - // Expand the datastore to new_num_points. Returns the new capacity created, - // which should be == new_num_points in the normal case. Implementers can also - // return _capacity to indicate that there are not implementing this method. - virtual location_t expand(const location_t new_num_points) = 0; - - // Shrink the datastore to new_num_points. It is NOT an error if shrink - // doesn't reduce the capacity so callers need to check this correctly. See - // also for "default" implementation - virtual location_t shrink(const location_t new_num_points) = 0; - - location_t _capacity; - size_t _dim; -}; - -} // namespace diskann diff --git a/packages/leann-backend-diskann/third_party/DiskANN/include/abstract_graph_store.h b/packages/leann-backend-diskann/third_party/DiskANN/include/abstract_graph_store.h deleted file mode 100644 index 4d6906c..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/include/abstract_graph_store.h +++ /dev/null @@ -1,68 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT license. - -#pragma once - -#include -#include -#include "types.h" - -namespace diskann -{ - -class AbstractGraphStore -{ - public: - AbstractGraphStore(const size_t total_pts, const size_t reserve_graph_degree) - : _capacity(total_pts), _reserve_graph_degree(reserve_graph_degree) - { - } - - virtual ~AbstractGraphStore() = default; - - // returns tuple of - virtual std::tuple load(const std::string &index_path_prefix, - const size_t num_points) = 0; - virtual int store(const std::string &index_path_prefix, const size_t num_points, const size_t num_fz_points, - const uint32_t start) = 0; - - // not synchronised, user should use lock when necvessary. - virtual const std::vector &get_neighbours(const location_t i) const = 0; - virtual void add_neighbour(const location_t i, location_t neighbour_id) = 0; - virtual void clear_neighbours(const location_t i) = 0; - virtual void swap_neighbours(const location_t a, location_t b) = 0; - - virtual void set_neighbours(const location_t i, std::vector &neighbours) = 0; - - virtual size_t resize_graph(const size_t new_size) = 0; - virtual void clear_graph() = 0; - - virtual uint32_t get_max_observed_degree() = 0; - - // set during load - virtual size_t get_max_range_of_graph() = 0; - - // Total internal points _max_points + _num_frozen_points - size_t get_total_points() - { - return _capacity; - } - - protected: - // Internal function, changes total points when resize_graph is called. - void set_total_points(size_t new_capacity) - { - _capacity = new_capacity; - } - - size_t get_reserve_graph_degree() - { - return _reserve_graph_degree; - } - - private: - size_t _capacity; - size_t _reserve_graph_degree; -}; - -} // namespace diskann \ No newline at end of file diff --git a/packages/leann-backend-diskann/third_party/DiskANN/include/abstract_index.h b/packages/leann-backend-diskann/third_party/DiskANN/include/abstract_index.h deleted file mode 100644 index 059866f..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/include/abstract_index.h +++ /dev/null @@ -1,129 +0,0 @@ -#pragma once -#include "distance.h" -#include "parameters.h" -#include "utils.h" -#include "types.h" -#include "index_config.h" -#include "index_build_params.h" -#include - -namespace diskann -{ -struct consolidation_report -{ - enum status_code - { - SUCCESS = 0, - FAIL = 1, - LOCK_FAIL = 2, - INCONSISTENT_COUNT_ERROR = 3 - }; - status_code _status; - size_t _active_points, _max_points, _empty_slots, _slots_released, _delete_set_size, _num_calls_to_process_delete; - double _time; - - consolidation_report(status_code status, size_t active_points, size_t max_points, size_t empty_slots, - size_t slots_released, size_t delete_set_size, size_t num_calls_to_process_delete, - double time_secs) - : _status(status), _active_points(active_points), _max_points(max_points), _empty_slots(empty_slots), - _slots_released(slots_released), _delete_set_size(delete_set_size), - _num_calls_to_process_delete(num_calls_to_process_delete), _time(time_secs) - { - } -}; - -/* A templated independent class for intercation with Index. Uses Type Erasure to add virtual implemetation of methods -that can take any type(using std::any) and Provides a clean API that can be inherited by different type of Index. -*/ -class AbstractIndex -{ - public: - AbstractIndex() = default; - virtual ~AbstractIndex() = default; - - virtual void build(const std::string &data_file, const size_t num_points_to_load, - IndexFilterParams &build_params) = 0; - - template - void build(const data_type *data, const size_t num_points_to_load, const std::vector &tags); - - virtual void save(const char *filename, bool compact_before_save = false) = 0; - -#ifdef EXEC_ENV_OLS - virtual void load(AlignedFileReader &reader, uint32_t num_threads, uint32_t search_l) = 0; -#else - virtual void load(const char *index_file, uint32_t num_threads, uint32_t search_l) = 0; -#endif - - // For FastL2 search on optimized layout - template - void search_with_optimized_layout(const data_type *query, size_t K, size_t L, uint32_t *indices); - - // Initialize space for res_vectors before calling. - template - size_t search_with_tags(const data_type *query, const uint64_t K, const uint32_t L, tag_type *tags, - float *distances, std::vector &res_vectors, bool use_filters = false, - const std::string filter_label = ""); - - // Added search overload that takes L as parameter, so that we - // can customize L on a per-query basis without tampering with "Parameters" - // IDtype is either uint32_t or uint64_t - template - std::pair search(const data_type *query, const size_t K, const uint32_t L, IDType *indices, - float *distances = nullptr); - - // Filter support search - // IndexType is either uint32_t or uint64_t - template - std::pair search_with_filters(const DataType &query, const std::string &raw_label, - const size_t K, const uint32_t L, IndexType *indices, - float *distances); - - // insert points with labels, labels should be present for filtered index - template - int insert_point(const data_type *point, const tag_type tag, const std::vector &labels); - - // insert point for unfiltered index build. do not use with filtered index - template int insert_point(const data_type *point, const tag_type tag); - - // delete point with tag, or return -1 if point can not be deleted - template int lazy_delete(const tag_type &tag); - - // batch delete tags and populates failed tags if unabke to delete given tags. - template - void lazy_delete(const std::vector &tags, std::vector &failed_tags); - - template void get_active_tags(tsl::robin_set &active_tags); - - template void set_start_points_at_random(data_type radius, uint32_t random_seed = 0); - - virtual consolidation_report consolidate_deletes(const IndexWriteParameters ¶meters) = 0; - - virtual void optimize_index_layout() = 0; - - // memory should be allocated for vec before calling this function - template int get_vector_by_tag(tag_type &tag, data_type *vec); - - template void set_universal_label(const label_type universal_label); - - private: - virtual void _build(const DataType &data, const size_t num_points_to_load, TagVector &tags) = 0; - virtual std::pair _search(const DataType &query, const size_t K, const uint32_t L, - std::any &indices, float *distances = nullptr) = 0; - virtual std::pair _search_with_filters(const DataType &query, const std::string &filter_label, - const size_t K, const uint32_t L, std::any &indices, - float *distances) = 0; - virtual int _insert_point(const DataType &data_point, const TagType tag, Labelvector &labels) = 0; - virtual int _insert_point(const DataType &data_point, const TagType tag) = 0; - virtual int _lazy_delete(const TagType &tag) = 0; - virtual void _lazy_delete(TagVector &tags, TagVector &failed_tags) = 0; - virtual void _get_active_tags(TagRobinSet &active_tags) = 0; - virtual void _set_start_points_at_random(DataType radius, uint32_t random_seed = 0) = 0; - virtual int _get_vector_by_tag(TagType &tag, DataType &vec) = 0; - virtual size_t _search_with_tags(const DataType &query, const uint64_t K, const uint32_t L, const TagType &tags, - float *distances, DataVector &res_vectors, bool use_filters = false, - const std::string filter_label = "") = 0; - virtual void _search_with_optimized_layout(const DataType &query, size_t K, size_t L, uint32_t *indices) = 0; - virtual void _set_universal_label(const LabelType universal_label) = 0; -}; -} // namespace diskann diff --git a/packages/leann-backend-diskann/third_party/DiskANN/include/abstract_scratch.h b/packages/leann-backend-diskann/third_party/DiskANN/include/abstract_scratch.h deleted file mode 100644 index b42a836..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/include/abstract_scratch.h +++ /dev/null @@ -1,35 +0,0 @@ -#pragma once -namespace diskann -{ - -template class PQScratch; - -// By somewhat more than a coincidence, it seems that both InMemQueryScratch -// and SSDQueryScratch have the aligned query and PQScratch objects. So we -// can put them in a neat hierarchy and keep PQScratch as a standalone class. -template class AbstractScratch -{ - public: - AbstractScratch() = default; - // This class does not take any responsibilty for memory management of - // its members. It is the responsibility of the derived classes to do so. - virtual ~AbstractScratch() = default; - - // Scratch objects should not be copied - AbstractScratch(const AbstractScratch &) = delete; - AbstractScratch &operator=(const AbstractScratch &) = delete; - - data_t *aligned_query_T() - { - return _aligned_query_T; - } - PQScratch *pq_scratch() - { - return _pq_scratch; - } - - protected: - data_t *_aligned_query_T = nullptr; - PQScratch *_pq_scratch = nullptr; -}; -} // namespace diskann diff --git a/packages/leann-backend-diskann/third_party/DiskANN/include/aligned_file_reader.h b/packages/leann-backend-diskann/third_party/DiskANN/include/aligned_file_reader.h deleted file mode 100644 index 2e2716a..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/include/aligned_file_reader.h +++ /dev/null @@ -1,138 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT license. - -#pragma once - -#define MAX_IO_DEPTH 128 - -#include -#include - -#ifdef __linux__ -#include -#include -#include -#include -typedef io_context_t IOContext; -#elif __APPLE__ -#include -#include -#include - -struct IOContext -{ - int fd; - dispatch_io_t channel; - dispatch_queue_t queue; - dispatch_group_t grp; -}; -#elif _WINDOWS -#include -#include -#include - -#ifndef USE_BING_INFRA -struct IOContext -{ - HANDLE fhandle = NULL; - HANDLE iocp = NULL; - std::vector reqs; -}; -#else -#include "IDiskPriorityIO.h" -#include -// TODO: Caller code is very callous about copying IOContext objects -// all over the place. MUST verify that it won't cause leaks/logical -// errors. -// Because of such callous copying, we have to use ptr->atomic instead -// of atomic, as atomic is not copyable. -struct IOContext -{ - enum Status - { - READ_WAIT = 0, - READ_SUCCESS, - READ_FAILED, - PROCESS_COMPLETE - }; - - std::shared_ptr m_pDiskIO = nullptr; - std::shared_ptr> m_pRequests; - std::shared_ptr> m_pRequestsStatus; - - // waitonaddress on this memory to wait for IO completion signal - // reader should signal this memory after IO completion - // TODO: WindowsAlignedFileReader can be modified to take advantage of this - // and can largely share code with the file reader for Bing. - mutable volatile long m_completeCount = 0; - - IOContext() - : m_pRequestsStatus(new std::vector()), m_pRequests(new std::vector()) - { - (*m_pRequestsStatus).reserve(MAX_IO_DEPTH); - (*m_pRequests).reserve(MAX_IO_DEPTH); - } -}; -#endif - -#endif - -#include -#include -#include -#include "tsl/robin_map.h" -#include "utils.h" - -// NOTE :: all 3 fields must be 512-aligned -struct AlignedRead -{ - uint64_t offset; // where to read from - uint64_t len; // how much to read - void *buf; // where to read into - - AlignedRead() : offset(0), len(0), buf(nullptr) - { - } - - AlignedRead(uint64_t offset, uint64_t len, void *buf) : offset(offset), len(len), buf(buf) - { - assert(IS_512_ALIGNED(offset)); - assert(IS_512_ALIGNED(len)); - assert(IS_512_ALIGNED(buf)); - // assert(malloc_usable_size(buf) >= len); - } -}; - -class AlignedFileReader -{ - protected: - tsl::robin_map ctx_map; - std::mutex ctx_mut; - - public: - // returns the thread-specific context - // returns (io_context_t)(-1) if thread is not registered - virtual IOContext &get_ctx() = 0; - - virtual ~AlignedFileReader(){}; - - // register thread-id for a context - virtual void register_thread() = 0; - // de-register thread-id for a context - virtual void deregister_thread() = 0; - virtual void deregister_all_threads() = 0; - - // Open & close ops - // Blocking calls - virtual void open(const std::string &fname) = 0; - virtual void close() = 0; - - // process batch of aligned requests in parallel - // NOTE :: blocking call - virtual void read(std::vector &read_reqs, IOContext &ctx, bool async = false) = 0; - -#ifdef USE_BING_INFRA - // wait for completion of one request in a batch of requests - virtual void wait(IOContext &ctx, int &completedIndex) = 0; -#endif -}; diff --git a/packages/leann-backend-diskann/third_party/DiskANN/include/ann_exception.h b/packages/leann-backend-diskann/third_party/DiskANN/include/ann_exception.h deleted file mode 100644 index 55f069b..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/include/ann_exception.h +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT license. - -#pragma once -#include -#include -#include -#include "windows_customizations.h" -#include - -#ifndef _WINDOWS -#define __FUNCSIG__ __PRETTY_FUNCTION__ -#endif - -namespace diskann -{ - -class ANNException : public std::runtime_error -{ - public: - DISKANN_DLLEXPORT ANNException(const std::string &message, int errorCode); - DISKANN_DLLEXPORT ANNException(const std::string &message, int errorCode, const std::string &funcSig, - const std::string &fileName, uint32_t lineNum); - - private: - int _errorCode; -}; - -class FileException : public ANNException -{ - public: - DISKANN_DLLEXPORT FileException(const std::string &filename, std::system_error &e, const std::string &funcSig, - const std::string &fileName, uint32_t lineNum); -}; -} // namespace diskann diff --git a/packages/leann-backend-diskann/third_party/DiskANN/include/any_wrappers.h b/packages/leann-backend-diskann/third_party/DiskANN/include/any_wrappers.h deleted file mode 100644 index da9005c..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/include/any_wrappers.h +++ /dev/null @@ -1,53 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT license. - -#pragma once - -#include -#include -#include -#include -#include "tsl/robin_set.h" - -namespace AnyWrapper -{ - -/* - * Base Struct to hold refrence to the data. - * Note: No memory mamagement, caller need to keep object alive. - */ -struct AnyReference -{ - template AnyReference(Ty &reference) : _data(&reference) - { - } - - template Ty &get() - { - auto ptr = std::any_cast(_data); - return *ptr; - } - - private: - std::any _data; -}; -struct AnyRobinSet : public AnyReference -{ - template AnyRobinSet(const tsl::robin_set &robin_set) : AnyReference(robin_set) - { - } - template AnyRobinSet(tsl::robin_set &robin_set) : AnyReference(robin_set) - { - } -}; - -struct AnyVector : public AnyReference -{ - template AnyVector(const std::vector &vector) : AnyReference(vector) - { - } - template AnyVector(std::vector &vector) : AnyReference(vector) - { - } -}; -} // namespace AnyWrapper diff --git a/packages/leann-backend-diskann/third_party/DiskANN/include/apple_aligned_file_reader.h b/packages/leann-backend-diskann/third_party/DiskANN/include/apple_aligned_file_reader.h deleted file mode 100644 index 160e1ea..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/include/apple_aligned_file_reader.h +++ /dev/null @@ -1,26 +0,0 @@ -#pragma once -#ifdef __APPLE__ -#include "aligned_file_reader.h" - -class AppleAlignedFileReader : public AlignedFileReader -{ - private: - uint64_t file_sz; - FileHandle file_desc; - - public: - AppleAlignedFileReader(); - ~AppleAlignedFileReader(); - - IOContext &get_ctx(); - - void register_thread(); - void deregister_thread(); - void deregister_all_threads(); - - void open(const std::string &fname); - void close(); - - void read(std::vector &read_reqs, IOContext &ctx, bool async = false); -}; -#endif diff --git a/packages/leann-backend-diskann/third_party/DiskANN/include/boost_dynamic_bitset_fwd.h b/packages/leann-backend-diskann/third_party/DiskANN/include/boost_dynamic_bitset_fwd.h deleted file mode 100644 index 5aebb2b..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/include/boost_dynamic_bitset_fwd.h +++ /dev/null @@ -1,11 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT license. - -#pragma once - -namespace boost -{ -#ifndef BOOST_DYNAMIC_BITSET_FWD_HPP -template > class dynamic_bitset; -#endif -} // namespace boost diff --git a/packages/leann-backend-diskann/third_party/DiskANN/include/cached_io.h b/packages/leann-backend-diskann/third_party/DiskANN/include/cached_io.h deleted file mode 100644 index daef2f2..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/include/cached_io.h +++ /dev/null @@ -1,217 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT license. - -#pragma once -#include -#include -#include -#include - -#include "logger.h" -#include "ann_exception.h" - -// sequential cached reads -class cached_ifstream -{ - public: - cached_ifstream() - { - } - cached_ifstream(const std::string &filename, uint64_t cacheSize) : cache_size(cacheSize), cur_off(0) - { - reader.exceptions(std::ifstream::failbit | std::ifstream::badbit); - this->open(filename, cache_size); - } - ~cached_ifstream() - { - delete[] cache_buf; - reader.close(); - } - - void open(const std::string &filename, uint64_t cacheSize) - { - this->cur_off = 0; - - try - { - reader.open(filename, std::ios::binary | std::ios::ate); - fsize = reader.tellg(); - reader.seekg(0, std::ios::beg); - assert(reader.is_open()); - assert(cacheSize > 0); - cacheSize = (std::min)(cacheSize, fsize); - this->cache_size = cacheSize; - cache_buf = new char[cacheSize]; - reader.read(cache_buf, cacheSize); - diskann::cout << "Opened: " << filename.c_str() << ", size: " << fsize << ", cache_size: " << cacheSize - << std::endl; - } - catch (std::system_error &e) - { - throw diskann::FileException(filename, e, __FUNCSIG__, __FILE__, __LINE__); - } - } - - size_t get_file_size() - { - return fsize; - } - - void read(char *read_buf, uint64_t n_bytes) - { - assert(cache_buf != nullptr); - assert(read_buf != nullptr); - - if (n_bytes <= (cache_size - cur_off)) - { - // case 1: cache contains all data - memcpy(read_buf, cache_buf + cur_off, n_bytes); - cur_off += n_bytes; - } - else - { - // case 2: cache contains some data - uint64_t cached_bytes = cache_size - cur_off; - if (n_bytes - cached_bytes > fsize - reader.tellg()) - { - std::stringstream stream; - stream << "Reading beyond end of file" << std::endl; - stream << "n_bytes: " << n_bytes << " cached_bytes: " << cached_bytes << " fsize: " << fsize - << " current pos:" << reader.tellg() << std::endl; - diskann::cout << stream.str() << std::endl; - throw diskann::ANNException(stream.str(), -1, __FUNCSIG__, __FILE__, __LINE__); - } - memcpy(read_buf, cache_buf + cur_off, cached_bytes); - - // go to disk and fetch more data - reader.read(read_buf + cached_bytes, n_bytes - cached_bytes); - // reset cur off - cur_off = cache_size; - - uint64_t size_left = fsize - reader.tellg(); - - if (size_left >= cache_size) - { - reader.read(cache_buf, cache_size); - cur_off = 0; - } - // note that if size_left < cache_size, then cur_off = cache_size, - // so subsequent reads will all be directly from file - } - } - - private: - // underlying ifstream - std::ifstream reader; - // # bytes to cache in one shot read - uint64_t cache_size = 0; - // underlying buf for cache - char *cache_buf = nullptr; - // offset into cache_buf for cur_pos - uint64_t cur_off = 0; - // file size - uint64_t fsize = 0; -}; - -// sequential cached writes -class cached_ofstream -{ - public: - cached_ofstream(const std::string &filename, uint64_t cache_size) : cache_size(cache_size), cur_off(0) - { - writer.exceptions(std::ifstream::failbit | std::ifstream::badbit); - try - { - writer.open(filename, std::ios::binary); - assert(writer.is_open()); - assert(cache_size > 0); - cache_buf = new char[cache_size]; - diskann::cout << "Opened: " << filename.c_str() << ", cache_size: " << cache_size << std::endl; - } - catch (std::system_error &e) - { - throw diskann::FileException(filename, e, __FUNCSIG__, __FILE__, __LINE__); - } - } - - ~cached_ofstream() - { - this->close(); - } - - void close() - { - // dump any remaining data in memory - if (cur_off > 0) - { - this->flush_cache(); - } - - if (cache_buf != nullptr) - { - delete[] cache_buf; - cache_buf = nullptr; - } - - if (writer.is_open()) - writer.close(); - diskann::cout << "Finished writing " << fsize << "B" << std::endl; - } - - size_t get_file_size() - { - return fsize; - } - // writes n_bytes from write_buf to the underlying ofstream/cache - void write(char *write_buf, uint64_t n_bytes) - { - assert(cache_buf != nullptr); - if (n_bytes <= (cache_size - cur_off)) - { - // case 1: cache can take all data - memcpy(cache_buf + cur_off, write_buf, n_bytes); - cur_off += n_bytes; - } - else - { - // case 2: cache cant take all data - // go to disk and write existing cache data - writer.write(cache_buf, cur_off); - fsize += cur_off; - // write the new data to disk - writer.write(write_buf, n_bytes); - fsize += n_bytes; - // memset all cache data and reset cur_off - memset(cache_buf, 0, cache_size); - cur_off = 0; - } - } - - void flush_cache() - { - assert(cache_buf != nullptr); - writer.write(cache_buf, cur_off); - fsize += cur_off; - memset(cache_buf, 0, cache_size); - cur_off = 0; - } - - void reset() - { - flush_cache(); - writer.seekp(0); - } - - private: - // underlying ofstream - std::ofstream writer; - // # bytes to cache for one shot write - uint64_t cache_size = 0; - // underlying buf for cache - char *cache_buf = nullptr; - // offset into cache_buf for cur_pos - uint64_t cur_off = 0; - - // file size - uint64_t fsize = 0; -}; diff --git a/packages/leann-backend-diskann/third_party/DiskANN/include/common_includes.h b/packages/leann-backend-diskann/third_party/DiskANN/include/common_includes.h deleted file mode 100644 index e1a51bd..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/include/common_includes.h +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT license. - -#pragma once - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include diff --git a/packages/leann-backend-diskann/third_party/DiskANN/include/concurrent_queue.h b/packages/leann-backend-diskann/third_party/DiskANN/include/concurrent_queue.h deleted file mode 100644 index 1e57bbf..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/include/concurrent_queue.h +++ /dev/null @@ -1,132 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT license. - -#pragma once -#include -#include -#include -#include -#include -#include -#include -#include - -namespace diskann -{ - -template class ConcurrentQueue -{ - typedef std::chrono::microseconds chrono_us_t; - typedef std::unique_lock mutex_locker; - - std::queue q; - std::mutex mut; - std::mutex push_mut; - std::mutex pop_mut; - std::condition_variable push_cv; - std::condition_variable pop_cv; - T null_T; - - public: - ConcurrentQueue() - { - } - - ConcurrentQueue(T nullT) - { - this->null_T = nullT; - } - - ~ConcurrentQueue() - { - this->push_cv.notify_all(); - this->pop_cv.notify_all(); - } - - // queue stats - uint64_t size() - { - mutex_locker lk(this->mut); - uint64_t ret = q.size(); - lk.unlock(); - return ret; - } - - bool empty() - { - return (this->size() == 0); - } - - // PUSH BACK - void push(T &new_val) - { - mutex_locker lk(this->mut); - this->q.push(new_val); - lk.unlock(); - } - - template void insert(Iterator iter_begin, Iterator iter_end) - { - mutex_locker lk(this->mut); - for (Iterator it = iter_begin; it != iter_end; it++) - { - this->q.push(*it); - } - lk.unlock(); - } - - // POP FRONT - T pop() - { - mutex_locker lk(this->mut); - if (this->q.empty()) - { - lk.unlock(); - return this->null_T; - } - else - { - T ret = this->q.front(); - this->q.pop(); - // diskann::cout << "thread_id: " << std::this_thread::get_id() << - // ", ctx: " - // << ret.ctx << "\n"; - lk.unlock(); - return ret; - } - } - - // register for notifications - void wait_for_push_notify(chrono_us_t wait_time = chrono_us_t{10}) - { - mutex_locker lk(this->push_mut); - this->push_cv.wait_for(lk, wait_time); - lk.unlock(); - } - - void wait_for_pop_notify(chrono_us_t wait_time = chrono_us_t{10}) - { - mutex_locker lk(this->pop_mut); - this->pop_cv.wait_for(lk, wait_time); - lk.unlock(); - } - - // just notify functions - void push_notify_one() - { - this->push_cv.notify_one(); - } - void push_notify_all() - { - this->push_cv.notify_all(); - } - void pop_notify_one() - { - this->pop_cv.notify_one(); - } - void pop_notify_all() - { - this->pop_cv.notify_all(); - } -}; -} // namespace diskann diff --git a/packages/leann-backend-diskann/third_party/DiskANN/include/cosine_similarity.h b/packages/leann-backend-diskann/third_party/DiskANN/include/cosine_similarity.h deleted file mode 100644 index 539a8b0..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/include/cosine_similarity.h +++ /dev/null @@ -1,285 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT license. - -#pragma once - -#include -#include -#include -#include -#include -#include -#include - -#ifndef __APPLE__ -#include -#include -#include -#include "simd_utils.h" -#endif - -extern bool Avx2SupportedCPU; - -#ifdef _WINDOWS -// SIMD implementation of Cosine similarity. Taken from hnsw library. - -/** - * Non-metric Space Library - * - * Authors: Bilegsaikhan Naidan (https://github.com/bileg), Leonid Boytsov - * (http://boytsov.info). With contributions from Lawrence Cayton - * (http://lcayton.com/) and others. - * - * For the complete list of contributors and further details see: - * https://github.com/searchivarius/NonMetricSpaceLib - * - * Copyright (c) 2014 - * - * This code is released under the - * Apache License Version 2.0 http://www.apache.org/licenses/. - * - */ - -namespace diskann -{ - -using namespace std; - -#define PORTABLE_ALIGN16 __declspec(align(16)) - -static float NormScalarProductSIMD2(const int8_t *pVect1, const int8_t *pVect2, uint32_t qty) -{ - if (Avx2SupportedCPU) - { - __m256 cos, p1Len, p2Len; - cos = p1Len = p2Len = _mm256_setzero_ps(); - while (qty >= 32) - { - __m256i rx = _mm256_load_si256((__m256i *)pVect1), ry = _mm256_load_si256((__m256i *)pVect2); - cos = _mm256_add_ps(cos, _mm256_mul_epi8(rx, ry)); - p1Len = _mm256_add_ps(p1Len, _mm256_mul_epi8(rx, rx)); - p2Len = _mm256_add_ps(p2Len, _mm256_mul_epi8(ry, ry)); - pVect1 += 32; - pVect2 += 32; - qty -= 32; - } - while (qty > 0) - { - __m128i rx = _mm_load_si128((__m128i *)pVect1), ry = _mm_load_si128((__m128i *)pVect2); - cos = _mm256_add_ps(cos, _mm256_mul32_pi8(rx, ry)); - p1Len = _mm256_add_ps(p1Len, _mm256_mul32_pi8(rx, rx)); - p2Len = _mm256_add_ps(p2Len, _mm256_mul32_pi8(ry, ry)); - pVect1 += 4; - pVect2 += 4; - qty -= 4; - } - cos = _mm256_hadd_ps(_mm256_hadd_ps(cos, cos), cos); - p1Len = _mm256_hadd_ps(_mm256_hadd_ps(p1Len, p1Len), p1Len); - p2Len = _mm256_hadd_ps(_mm256_hadd_ps(p2Len, p2Len), p2Len); - float denominator = max(numeric_limits::min() * 2, sqrt(p1Len.m256_f32[0] + p1Len.m256_f32[4]) * - sqrt(p2Len.m256_f32[0] + p2Len.m256_f32[4])); - float cosine = (cos.m256_f32[0] + cos.m256_f32[4]) / denominator; - - return max(float(-1), min(float(1), cosine)); - } - - __m128 cos, p1Len, p2Len; - cos = p1Len = p2Len = _mm_setzero_ps(); - __m128i rx, ry; - while (qty >= 16) - { - rx = _mm_load_si128((__m128i *)pVect1); - ry = _mm_load_si128((__m128i *)pVect2); - cos = _mm_add_ps(cos, _mm_mul_epi8(rx, ry)); - p1Len = _mm_add_ps(p1Len, _mm_mul_epi8(rx, rx)); - p2Len = _mm_add_ps(p2Len, _mm_mul_epi8(ry, ry)); - pVect1 += 16; - pVect2 += 16; - qty -= 16; - } - while (qty > 0) - { - rx = _mm_load_si128((__m128i *)pVect1); - ry = _mm_load_si128((__m128i *)pVect2); - cos = _mm_add_ps(cos, _mm_mul32_pi8(rx, ry)); - p1Len = _mm_add_ps(p1Len, _mm_mul32_pi8(rx, rx)); - p2Len = _mm_add_ps(p2Len, _mm_mul32_pi8(ry, ry)); - pVect1 += 4; - pVect2 += 4; - qty -= 4; - } - cos = _mm_hadd_ps(_mm_hadd_ps(cos, cos), cos); - p1Len = _mm_hadd_ps(_mm_hadd_ps(p1Len, p1Len), p1Len); - p2Len = _mm_hadd_ps(_mm_hadd_ps(p2Len, p2Len), p2Len); - float norm1 = p1Len.m128_f32[0]; - float norm2 = p2Len.m128_f32[0]; - - static const float eps = numeric_limits::min() * 2; - - if (norm1 < eps) - { /* - * This shouldn't normally happen for this space, but - * if it does, we don't want to get NANs - */ - if (norm2 < eps) - { - return 1; - } - return 0; - } - /* - * Sometimes due to rounding errors, we get values > 1 or < -1. - * This throws off other functions that use scalar product, e.g., acos - */ - return max(float(-1), min(float(1), cos.m128_f32[0] / sqrt(norm1) / sqrt(norm2))); -} - -static float NormScalarProductSIMD(const float *pVect1, const float *pVect2, uint32_t qty) -{ - // Didn't get significant performance gain compared with 128bit version. - static const float eps = numeric_limits::min() * 2; - - if (Avx2SupportedCPU) - { - uint32_t qty8 = qty / 8; - - const float *pEnd1 = pVect1 + 8 * qty8; - const float *pEnd2 = pVect1 + qty; - - __m256 v1, v2; - __m256 sum_prod = _mm256_set_ps(0, 0, 0, 0, 0, 0, 0, 0); - __m256 sum_square1 = sum_prod; - __m256 sum_square2 = sum_prod; - - while (pVect1 < pEnd1) - { - v1 = _mm256_loadu_ps(pVect1); - pVect1 += 8; - v2 = _mm256_loadu_ps(pVect2); - pVect2 += 8; - sum_prod = _mm256_add_ps(sum_prod, _mm256_mul_ps(v1, v2)); - sum_square1 = _mm256_add_ps(sum_square1, _mm256_mul_ps(v1, v1)); - sum_square2 = _mm256_add_ps(sum_square2, _mm256_mul_ps(v2, v2)); - } - - float PORTABLE_ALIGN16 TmpResProd[8]; - float PORTABLE_ALIGN16 TmpResSquare1[8]; - float PORTABLE_ALIGN16 TmpResSquare2[8]; - - _mm256_store_ps(TmpResProd, sum_prod); - _mm256_store_ps(TmpResSquare1, sum_square1); - _mm256_store_ps(TmpResSquare2, sum_square2); - - float sum = 0.0f; - float norm1 = 0.0f; - float norm2 = 0.0f; - for (uint32_t i = 0; i < 8; ++i) - { - sum += TmpResProd[i]; - norm1 += TmpResSquare1[i]; - norm2 += TmpResSquare2[i]; - } - - while (pVect1 < pEnd2) - { - sum += (*pVect1) * (*pVect2); - norm1 += (*pVect1) * (*pVect1); - norm2 += (*pVect2) * (*pVect2); - - ++pVect1; - ++pVect2; - } - - if (norm1 < eps) - { - return norm2 < eps ? 1.0f : 0.0f; - } - - return max(float(-1), min(float(1), sum / sqrt(norm1) / sqrt(norm2))); - } - - __m128 v1, v2; - __m128 sum_prod = _mm_set1_ps(0); - __m128 sum_square1 = sum_prod; - __m128 sum_square2 = sum_prod; - - while (qty >= 4) - { - v1 = _mm_loadu_ps(pVect1); - pVect1 += 4; - v2 = _mm_loadu_ps(pVect2); - pVect2 += 4; - sum_prod = _mm_add_ps(sum_prod, _mm_mul_ps(v1, v2)); - sum_square1 = _mm_add_ps(sum_square1, _mm_mul_ps(v1, v1)); - sum_square2 = _mm_add_ps(sum_square2, _mm_mul_ps(v2, v2)); - - qty -= 4; - } - - float sum = sum_prod.m128_f32[0] + sum_prod.m128_f32[1] + sum_prod.m128_f32[2] + sum_prod.m128_f32[3]; - float norm1 = sum_square1.m128_f32[0] + sum_square1.m128_f32[1] + sum_square1.m128_f32[2] + sum_square1.m128_f32[3]; - float norm2 = sum_square2.m128_f32[0] + sum_square2.m128_f32[1] + sum_square2.m128_f32[2] + sum_square2.m128_f32[3]; - - if (norm1 < eps) - { - return norm2 < eps ? 1.0f : 0.0f; - } - - return max(float(-1), min(float(1), sum / sqrt(norm1) / sqrt(norm2))); -} - -static float NormScalarProductSIMD2(const float *pVect1, const float *pVect2, uint32_t qty) -{ - return NormScalarProductSIMD(pVect1, pVect2, qty); -} - -template static float CosineSimilarity2(const T *p1, const T *p2, uint32_t qty) -{ - return std::max(0.0f, 1.0f - NormScalarProductSIMD2(p1, p2, qty)); -} - -// static template float CosineSimilarity2<__int8>(const __int8* pVect1, -// const __int8* pVect2, size_t qty); - -// static template float CosineSimilarity2(const float* pVect1, -// const float* pVect2, size_t qty); - -template static void CosineSimilarityNormalize(T *pVector, uint32_t qty) -{ - T sum = 0; - for (uint32_t i = 0; i < qty; ++i) - { - sum += pVector[i] * pVector[i]; - } - sum = 1 / sqrt(sum); - if (sum == 0) - { - sum = numeric_limits::min(); - } - for (uint32_t i = 0; i < qty; ++i) - { - pVector[i] *= sum; - } -} - -// template static void CosineSimilarityNormalize(float* pVector, -// size_t qty); -// template static void CosineSimilarityNormalize(double* pVector, -// size_t qty); - -template <> void CosineSimilarityNormalize(__int8 * /*pVector*/, uint32_t /*qty*/) -{ - throw std::runtime_error("For int8 type vector, you can not use cosine distance!"); -} - -template <> void CosineSimilarityNormalize(__int16 * /*pVector*/, uint32_t /*qty*/) -{ - throw std::runtime_error("For int16 type vector, you can not use cosine distance!"); -} - -template <> void CosineSimilarityNormalize(int * /*pVector*/, uint32_t /*qty*/) -{ - throw std::runtime_error("For int type vector, you can not use cosine distance!"); -} -} // namespace diskann -#endif diff --git a/packages/leann-backend-diskann/third_party/DiskANN/include/defaults.h b/packages/leann-backend-diskann/third_party/DiskANN/include/defaults.h deleted file mode 100644 index ef1750f..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/include/defaults.h +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT license. - -#pragma once -#include - -namespace diskann -{ -namespace defaults -{ -const float ALPHA = 1.2f; -const uint32_t NUM_THREADS = 0; -const uint32_t MAX_OCCLUSION_SIZE = 750; -const bool HAS_LABELS = false; -const uint32_t FILTER_LIST_SIZE = 0; -const uint32_t NUM_FROZEN_POINTS_STATIC = 0; -const uint32_t NUM_FROZEN_POINTS_DYNAMIC = 1; - -// In-mem index related limits -const float GRAPH_SLACK_FACTOR = 1.3f; - -// SSD Index related limits -const uint64_t MAX_GRAPH_DEGREE = 512; -const uint64_t SECTOR_LEN = 4096; -const uint64_t MAX_N_SECTOR_READS = 128; - -// following constants should always be specified, but are useful as a -// sensible default at cli / python boundaries -const uint32_t MAX_DEGREE = 64; -const uint32_t BUILD_LIST_SIZE = 100; -const uint32_t SATURATE_GRAPH = false; -const uint32_t SEARCH_LIST_SIZE = 100; -} // namespace defaults -} // namespace diskann diff --git a/packages/leann-backend-diskann/third_party/DiskANN/include/disk_utils.h b/packages/leann-backend-diskann/third_party/DiskANN/include/disk_utils.h deleted file mode 100644 index 08f046d..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/include/disk_utils.h +++ /dev/null @@ -1,108 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT license. - -#pragma once -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#ifdef __APPLE__ -#else -#include -#endif - -#ifdef _WINDOWS -#include -typedef HANDLE FileHandle; -#else -#include -typedef int FileHandle; -#endif - -#include "cached_io.h" -#include "common_includes.h" - -#include "utils.h" -#include "windows_customizations.h" - -namespace diskann -{ -const size_t MAX_SAMPLE_POINTS_FOR_WARMUP = 100000; -const double PQ_TRAINING_SET_FRACTION = 0.1; -const double SPACE_FOR_CACHED_NODES_IN_GB = 0.25; -const double THRESHOLD_FOR_CACHING_IN_GB = 1.0; -const uint32_t NUM_NODES_TO_CACHE = 250000; -const uint32_t WARMUP_L = 20; -const uint32_t NUM_KMEANS_REPS = 12; - -template class PQFlashIndex; - -DISKANN_DLLEXPORT double get_memory_budget(const std::string &mem_budget_str); -DISKANN_DLLEXPORT double get_memory_budget(double search_ram_budget_in_gb); -DISKANN_DLLEXPORT void add_new_file_to_single_index(std::string index_file, std::string new_file); - -DISKANN_DLLEXPORT size_t calculate_num_pq_chunks(double final_index_ram_limit, size_t points_num, uint32_t dim); - -DISKANN_DLLEXPORT void read_idmap(const std::string &fname, std::vector &ivecs); - -#ifdef EXEC_ENV_OLS -template -DISKANN_DLLEXPORT T *load_warmup(MemoryMappedFiles &files, const std::string &cache_warmup_file, uint64_t &warmup_num, - uint64_t warmup_dim, uint64_t warmup_aligned_dim); -#else -template -DISKANN_DLLEXPORT T *load_warmup(const std::string &cache_warmup_file, uint64_t &warmup_num, uint64_t warmup_dim, - uint64_t warmup_aligned_dim); -#endif - -DISKANN_DLLEXPORT int merge_shards(const std::string &vamana_prefix, const std::string &vamana_suffix, - const std::string &idmaps_prefix, const std::string &idmaps_suffix, - const uint64_t nshards, uint32_t max_degree, const std::string &output_vamana, - const std::string &medoids_file, bool use_filters = false, - const std::string &labels_to_medoids_file = std::string("")); - -DISKANN_DLLEXPORT void extract_shard_labels(const std::string &in_label_file, const std::string &shard_ids_bin, - const std::string &shard_label_file); - -template -DISKANN_DLLEXPORT std::string preprocess_base_file(const std::string &infile, const std::string &indexPrefix, - diskann::Metric &distMetric); - -template -DISKANN_DLLEXPORT int build_merged_vamana_index(std::string base_file, diskann::Metric _compareMetric, uint32_t L, - uint32_t R, double sampling_rate, double ram_budget, - std::string mem_index_path, std::string medoids_file, - std::string centroids_file, size_t build_pq_bytes, bool use_opq, - uint32_t num_threads, bool use_filters = false, - const std::string &label_file = std::string(""), - const std::string &labels_to_medoids_file = std::string(""), - const std::string &universal_label = "", const uint32_t Lf = 0); - -template -DISKANN_DLLEXPORT uint32_t optimize_beamwidth(std::unique_ptr> &_pFlashIndex, - T *tuning_sample, uint64_t tuning_sample_num, - uint64_t tuning_sample_aligned_dim, uint32_t L, uint32_t nthreads, - uint32_t start_bw = 2); - -template -DISKANN_DLLEXPORT int build_disk_index( - const char *dataFilePath, const char *indexFilePath, const char *indexBuildParameters, - diskann::Metric _compareMetric, bool use_opq = false, - const std::string &codebook_prefix = "", // default is empty for no codebook pass in - bool use_filters = false, - const std::string &label_file = std::string(""), // default is empty string for no label_file - const std::string &universal_label = "", const uint32_t filter_threshold = 0, - const uint32_t Lf = 0); // default is empty string for no universal label - -template -DISKANN_DLLEXPORT void create_disk_layout(const std::string base_file, const std::string mem_index_file, - const std::string output_file, - const std::string reorder_data_file = std::string("")); - -} // namespace diskann diff --git a/packages/leann-backend-diskann/third_party/DiskANN/include/distance.h b/packages/leann-backend-diskann/third_party/DiskANN/include/distance.h deleted file mode 100644 index 7198308..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/include/distance.h +++ /dev/null @@ -1,236 +0,0 @@ -#pragma once -#include "windows_customizations.h" -#include -#include - -namespace diskann -{ -enum Metric -{ - L2 = 0, - INNER_PRODUCT = 1, - COSINE = 2, - FAST_L2 = 3 -}; - -template class Distance -{ - public: - DISKANN_DLLEXPORT Distance(diskann::Metric dist_metric) : _distance_metric(dist_metric) - { - } - - // distance comparison function - DISKANN_DLLEXPORT virtual float compare(const T *a, const T *b, uint32_t length) const = 0; - - // Needed only for COSINE-BYTE and INNER_PRODUCT-BYTE - DISKANN_DLLEXPORT virtual float compare(const T *a, const T *b, const float normA, const float normB, - uint32_t length) const; - - // For MIPS, normalization adds an extra dimension to the vectors. - // This function lets callers know if the normalization process - // changes the dimension. - DISKANN_DLLEXPORT virtual uint32_t post_normalization_dimension(uint32_t orig_dimension) const; - - DISKANN_DLLEXPORT virtual diskann::Metric get_metric() const; - - // This is for efficiency. If no normalization is required, the callers - // can simply ignore the normalize_data_for_build() function. - DISKANN_DLLEXPORT virtual bool preprocessing_required() const; - - // Check the preprocessing_required() function before calling this. - // Clients can call the function like this: - // - // if (metric->preprocessing_required()){ - // T* normalized_data_batch; - // Split data into batches of batch_size and for each, call: - // metric->preprocess_base_points(data_batch, batch_size); - // - // TODO: This does not take into account the case for SSD inner product - // where the dimensions change after normalization. - DISKANN_DLLEXPORT virtual void preprocess_base_points(T *original_data, const size_t orig_dim, - const size_t num_points); - - // Invokes normalization for a single vector during search. The scratch space - // has to be created by the caller keeping track of the fact that - // normalization might change the dimension of the query vector. - DISKANN_DLLEXPORT virtual void preprocess_query(const T *query_vec, const size_t query_dim, T *scratch_query); - - // If an algorithm has a requirement that some data be aligned to a certain - // boundary it can use this function to indicate that requirement. Currently, - // we are setting it to 8 because that works well for AVX2. If we have AVX512 - // implementations of distance algos, they might have to set this to 16 - // (depending on how they are implemented) - DISKANN_DLLEXPORT virtual size_t get_required_alignment() const; - - // Providing a default implementation for the virtual destructor because we - // don't expect most metric implementations to need it. - DISKANN_DLLEXPORT virtual ~Distance() = default; - - protected: - diskann::Metric _distance_metric; - size_t _alignment_factor = 8; -}; - -class DistanceCosineInt8 : public Distance -{ - public: - DistanceCosineInt8() : Distance(diskann::Metric::COSINE) - { - } - DISKANN_DLLEXPORT virtual float compare(const int8_t *a, const int8_t *b, uint32_t length) const; -}; - -class DistanceL2Int8 : public Distance -{ - public: - DistanceL2Int8() : Distance(diskann::Metric::L2) - { - } - DISKANN_DLLEXPORT virtual float compare(const int8_t *a, const int8_t *b, uint32_t size) const; -}; - -// AVX implementations. Borrowed from HNSW code. -class AVXDistanceL2Int8 : public Distance -{ - public: - AVXDistanceL2Int8() : Distance(diskann::Metric::L2) - { - } - DISKANN_DLLEXPORT virtual float compare(const int8_t *a, const int8_t *b, uint32_t length) const; -}; - -class DistanceCosineFloat : public Distance -{ - public: - DistanceCosineFloat() : Distance(diskann::Metric::COSINE) - { - } - DISKANN_DLLEXPORT virtual float compare(const float *a, const float *b, uint32_t length) const; -}; - -class DistanceL2Float : public Distance -{ - public: - DistanceL2Float() : Distance(diskann::Metric::L2) - { - } - -#ifdef _WINDOWS - DISKANN_DLLEXPORT virtual float compare(const float *a, const float *b, uint32_t size) const; -#else - DISKANN_DLLEXPORT virtual float compare(const float *a, const float *b, uint32_t size) const __attribute__((hot)); -#endif -}; - -class AVXDistanceL2Float : public Distance -{ - public: - AVXDistanceL2Float() : Distance(diskann::Metric::L2) - { - } - DISKANN_DLLEXPORT virtual float compare(const float *a, const float *b, uint32_t length) const; -}; - -template class SlowDistanceL2 : public Distance -{ - public: - SlowDistanceL2() : Distance(diskann::Metric::L2) - { - } - DISKANN_DLLEXPORT virtual float compare(const T *a, const T *b, uint32_t length) const; -}; - -class SlowDistanceCosineUInt8 : public Distance -{ - public: - SlowDistanceCosineUInt8() : Distance(diskann::Metric::COSINE) - { - } - DISKANN_DLLEXPORT virtual float compare(const uint8_t *a, const uint8_t *b, uint32_t length) const; -}; - -class DistanceL2UInt8 : public Distance -{ - public: - DistanceL2UInt8() : Distance(diskann::Metric::L2) - { - } - DISKANN_DLLEXPORT virtual float compare(const uint8_t *a, const uint8_t *b, uint32_t size) const; -}; - -template class DistanceInnerProduct : public Distance -{ - public: - DistanceInnerProduct() : Distance(diskann::Metric::INNER_PRODUCT) - { - } - - DistanceInnerProduct(diskann::Metric metric) : Distance(metric) - { - } - inline float inner_product(const T *a, const T *b, unsigned size) const; - - inline float compare(const T *a, const T *b, unsigned size) const - { - float result = inner_product(a, b, size); - // if (result < 0) - // return std::numeric_limits::max(); - // else - return -result; - } -}; - -template class DistanceFastL2 : public DistanceInnerProduct -{ - // currently defined only for float. - // templated for future use. - public: - DistanceFastL2() : DistanceInnerProduct(diskann::Metric::FAST_L2) - { - } - float norm(const T *a, unsigned size) const; - float compare(const T *a, const T *b, float norm, unsigned size) const; -}; - -class AVXDistanceInnerProductFloat : public Distance -{ - public: - AVXDistanceInnerProductFloat() : Distance(diskann::Metric::INNER_PRODUCT) - { - } - DISKANN_DLLEXPORT virtual float compare(const float *a, const float *b, uint32_t length) const; -}; - -class AVXNormalizedCosineDistanceFloat : public Distance -{ - private: - AVXDistanceInnerProductFloat _innerProduct; - - protected: - void normalize_and_copy(const float *a, uint32_t length, float *a_norm) const; - - public: - AVXNormalizedCosineDistanceFloat() : Distance(diskann::Metric::COSINE) - { - } - DISKANN_DLLEXPORT virtual float compare(const float *a, const float *b, uint32_t length) const override - { - // Inner product returns negative values to indicate distance. - // This will ensure that cosine is between -1 and 1. - return 1.0f + _innerProduct.compare(a, b, length); - } - DISKANN_DLLEXPORT virtual uint32_t post_normalization_dimension(uint32_t orig_dimension) const override; - - DISKANN_DLLEXPORT virtual bool preprocessing_required() const override; - - DISKANN_DLLEXPORT virtual void preprocess_base_points(float *original_data, const size_t orig_dim, - const size_t num_points) override; - - DISKANN_DLLEXPORT virtual void preprocess_query(const float *query_vec, const size_t query_dim, - float *scratch_query_vector) override; -}; - -template Distance *get_distance_function(Metric m); - -} // namespace diskann diff --git a/packages/leann-backend-diskann/third_party/DiskANN/include/embedding.pb.h b/packages/leann-backend-diskann/third_party/DiskANN/include/embedding.pb.h deleted file mode 100644 index 9f5c2b7..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/include/embedding.pb.h +++ /dev/null @@ -1,675 +0,0 @@ -// Generated by the protocol buffer compiler. DO NOT EDIT! -// source: embedding.proto - -#ifndef GOOGLE_PROTOBUF_INCLUDED_embedding_2eproto -#define GOOGLE_PROTOBUF_INCLUDED_embedding_2eproto - -#include -#include - -#include -#if PROTOBUF_VERSION < 3012000 -#error This file was generated by a newer version of protoc which is -#error incompatible with your Protocol Buffer headers. Please update -#error your headers. -#endif -#if 3012004 < PROTOBUF_MIN_PROTOC_VERSION -#error This file was generated by an older version of protoc which is -#error incompatible with your Protocol Buffer headers. Please -#error regenerate this file with a newer version of protoc. -#endif - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include // IWYU pragma: export -#include // IWYU pragma: export -#include -// @@protoc_insertion_point(includes) -#include -#define PROTOBUF_INTERNAL_EXPORT_embedding_2eproto -PROTOBUF_NAMESPACE_OPEN -namespace internal { -class AnyMetadata; -} // namespace internal -PROTOBUF_NAMESPACE_CLOSE - -// Internal implementation detail -- do not use these members. -struct TableStruct_embedding_2eproto { - static const ::PROTOBUF_NAMESPACE_ID::internal::ParseTableField entries[] - PROTOBUF_SECTION_VARIABLE(protodesc_cold); - static const ::PROTOBUF_NAMESPACE_ID::internal::AuxillaryParseTableField aux[] - PROTOBUF_SECTION_VARIABLE(protodesc_cold); - static const ::PROTOBUF_NAMESPACE_ID::internal::ParseTable schema[2] - PROTOBUF_SECTION_VARIABLE(protodesc_cold); - static const ::PROTOBUF_NAMESPACE_ID::internal::FieldMetadata field_metadata[]; - static const ::PROTOBUF_NAMESPACE_ID::internal::SerializationTable serialization_table[]; - static const ::PROTOBUF_NAMESPACE_ID::uint32 offsets[]; -}; -extern const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable descriptor_table_embedding_2eproto; -namespace protoembedding { -class NodeEmbeddingRequest; -class NodeEmbeddingRequestDefaultTypeInternal; -extern NodeEmbeddingRequestDefaultTypeInternal _NodeEmbeddingRequest_default_instance_; -class NodeEmbeddingResponse; -class NodeEmbeddingResponseDefaultTypeInternal; -extern NodeEmbeddingResponseDefaultTypeInternal _NodeEmbeddingResponse_default_instance_; -} // namespace protoembedding -PROTOBUF_NAMESPACE_OPEN -template<> ::protoembedding::NodeEmbeddingRequest* Arena::CreateMaybeMessage<::protoembedding::NodeEmbeddingRequest>(Arena*); -template<> ::protoembedding::NodeEmbeddingResponse* Arena::CreateMaybeMessage<::protoembedding::NodeEmbeddingResponse>(Arena*); -PROTOBUF_NAMESPACE_CLOSE -namespace protoembedding { - -// =================================================================== - -class NodeEmbeddingRequest PROTOBUF_FINAL : - public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:protoembedding.NodeEmbeddingRequest) */ { - public: - inline NodeEmbeddingRequest() : NodeEmbeddingRequest(nullptr) {}; - virtual ~NodeEmbeddingRequest(); - - NodeEmbeddingRequest(const NodeEmbeddingRequest& from); - NodeEmbeddingRequest(NodeEmbeddingRequest&& from) noexcept - : NodeEmbeddingRequest() { - *this = ::std::move(from); - } - - inline NodeEmbeddingRequest& operator=(const NodeEmbeddingRequest& from) { - CopyFrom(from); - return *this; - } - inline NodeEmbeddingRequest& operator=(NodeEmbeddingRequest&& from) noexcept { - if (GetArena() == from.GetArena()) { - if (this != &from) InternalSwap(&from); - } else { - CopyFrom(from); - } - return *this; - } - - static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() { - return GetDescriptor(); - } - static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() { - return GetMetadataStatic().descriptor; - } - static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() { - return GetMetadataStatic().reflection; - } - static const NodeEmbeddingRequest& default_instance(); - - static void InitAsDefaultInstance(); // FOR INTERNAL USE ONLY - static inline const NodeEmbeddingRequest* internal_default_instance() { - return reinterpret_cast( - &_NodeEmbeddingRequest_default_instance_); - } - static constexpr int kIndexInFileMessages = - 0; - - friend void swap(NodeEmbeddingRequest& a, NodeEmbeddingRequest& b) { - a.Swap(&b); - } - inline void Swap(NodeEmbeddingRequest* other) { - if (other == this) return; - if (GetArena() == other->GetArena()) { - InternalSwap(other); - } else { - ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other); - } - } - void UnsafeArenaSwap(NodeEmbeddingRequest* other) { - if (other == this) return; - GOOGLE_DCHECK(GetArena() == other->GetArena()); - InternalSwap(other); - } - - // implements Message ---------------------------------------------- - - inline NodeEmbeddingRequest* New() const final { - return CreateMaybeMessage(nullptr); - } - - NodeEmbeddingRequest* New(::PROTOBUF_NAMESPACE_ID::Arena* arena) const final { - return CreateMaybeMessage(arena); - } - void CopyFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) final; - void MergeFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) final; - void CopyFrom(const NodeEmbeddingRequest& from); - void MergeFrom(const NodeEmbeddingRequest& from); - PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final; - bool IsInitialized() const final; - - size_t ByteSizeLong() const final; - const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final; - ::PROTOBUF_NAMESPACE_ID::uint8* _InternalSerialize( - ::PROTOBUF_NAMESPACE_ID::uint8* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final; - int GetCachedSize() const final { return _cached_size_.Get(); } - - private: - inline void SharedCtor(); - inline void SharedDtor(); - void SetCachedSize(int size) const final; - void InternalSwap(NodeEmbeddingRequest* other); - friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata; - static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() { - return "protoembedding.NodeEmbeddingRequest"; - } - protected: - explicit NodeEmbeddingRequest(::PROTOBUF_NAMESPACE_ID::Arena* arena); - private: - static void ArenaDtor(void* object); - inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena); - public: - - ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final; - private: - static ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadataStatic() { - ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(&::descriptor_table_embedding_2eproto); - return ::descriptor_table_embedding_2eproto.file_level_metadata[kIndexInFileMessages]; - } - - public: - - // nested types ---------------------------------------------------- - - // accessors ------------------------------------------------------- - - enum : int { - kNodeIdsFieldNumber = 1, - }; - // repeated uint32 node_ids = 1; - int node_ids_size() const; - private: - int _internal_node_ids_size() const; - public: - void clear_node_ids(); - private: - ::PROTOBUF_NAMESPACE_ID::uint32 _internal_node_ids(int index) const; - const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::uint32 >& - _internal_node_ids() const; - void _internal_add_node_ids(::PROTOBUF_NAMESPACE_ID::uint32 value); - ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::uint32 >* - _internal_mutable_node_ids(); - public: - ::PROTOBUF_NAMESPACE_ID::uint32 node_ids(int index) const; - void set_node_ids(int index, ::PROTOBUF_NAMESPACE_ID::uint32 value); - void add_node_ids(::PROTOBUF_NAMESPACE_ID::uint32 value); - const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::uint32 >& - node_ids() const; - ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::uint32 >* - mutable_node_ids(); - - // @@protoc_insertion_point(class_scope:protoembedding.NodeEmbeddingRequest) - private: - class _Internal; - - template friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper; - typedef void InternalArenaConstructable_; - typedef void DestructorSkippable_; - ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::uint32 > node_ids_; - mutable std::atomic _node_ids_cached_byte_size_; - mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_; - friend struct ::TableStruct_embedding_2eproto; -}; -// ------------------------------------------------------------------- - -class NodeEmbeddingResponse PROTOBUF_FINAL : - public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:protoembedding.NodeEmbeddingResponse) */ { - public: - inline NodeEmbeddingResponse() : NodeEmbeddingResponse(nullptr) {}; - virtual ~NodeEmbeddingResponse(); - - NodeEmbeddingResponse(const NodeEmbeddingResponse& from); - NodeEmbeddingResponse(NodeEmbeddingResponse&& from) noexcept - : NodeEmbeddingResponse() { - *this = ::std::move(from); - } - - inline NodeEmbeddingResponse& operator=(const NodeEmbeddingResponse& from) { - CopyFrom(from); - return *this; - } - inline NodeEmbeddingResponse& operator=(NodeEmbeddingResponse&& from) noexcept { - if (GetArena() == from.GetArena()) { - if (this != &from) InternalSwap(&from); - } else { - CopyFrom(from); - } - return *this; - } - - static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() { - return GetDescriptor(); - } - static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() { - return GetMetadataStatic().descriptor; - } - static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() { - return GetMetadataStatic().reflection; - } - static const NodeEmbeddingResponse& default_instance(); - - static void InitAsDefaultInstance(); // FOR INTERNAL USE ONLY - static inline const NodeEmbeddingResponse* internal_default_instance() { - return reinterpret_cast( - &_NodeEmbeddingResponse_default_instance_); - } - static constexpr int kIndexInFileMessages = - 1; - - friend void swap(NodeEmbeddingResponse& a, NodeEmbeddingResponse& b) { - a.Swap(&b); - } - inline void Swap(NodeEmbeddingResponse* other) { - if (other == this) return; - if (GetArena() == other->GetArena()) { - InternalSwap(other); - } else { - ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other); - } - } - void UnsafeArenaSwap(NodeEmbeddingResponse* other) { - if (other == this) return; - GOOGLE_DCHECK(GetArena() == other->GetArena()); - InternalSwap(other); - } - - // implements Message ---------------------------------------------- - - inline NodeEmbeddingResponse* New() const final { - return CreateMaybeMessage(nullptr); - } - - NodeEmbeddingResponse* New(::PROTOBUF_NAMESPACE_ID::Arena* arena) const final { - return CreateMaybeMessage(arena); - } - void CopyFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) final; - void MergeFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) final; - void CopyFrom(const NodeEmbeddingResponse& from); - void MergeFrom(const NodeEmbeddingResponse& from); - PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final; - bool IsInitialized() const final; - - size_t ByteSizeLong() const final; - const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final; - ::PROTOBUF_NAMESPACE_ID::uint8* _InternalSerialize( - ::PROTOBUF_NAMESPACE_ID::uint8* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final; - int GetCachedSize() const final { return _cached_size_.Get(); } - - private: - inline void SharedCtor(); - inline void SharedDtor(); - void SetCachedSize(int size) const final; - void InternalSwap(NodeEmbeddingResponse* other); - friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata; - static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() { - return "protoembedding.NodeEmbeddingResponse"; - } - protected: - explicit NodeEmbeddingResponse(::PROTOBUF_NAMESPACE_ID::Arena* arena); - private: - static void ArenaDtor(void* object); - inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena); - public: - - ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final; - private: - static ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadataStatic() { - ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(&::descriptor_table_embedding_2eproto); - return ::descriptor_table_embedding_2eproto.file_level_metadata[kIndexInFileMessages]; - } - - public: - - // nested types ---------------------------------------------------- - - // accessors ------------------------------------------------------- - - enum : int { - kDimensionsFieldNumber = 2, - kMissingIdsFieldNumber = 3, - kEmbeddingsDataFieldNumber = 1, - }; - // repeated int32 dimensions = 2; - int dimensions_size() const; - private: - int _internal_dimensions_size() const; - public: - void clear_dimensions(); - private: - ::PROTOBUF_NAMESPACE_ID::int32 _internal_dimensions(int index) const; - const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >& - _internal_dimensions() const; - void _internal_add_dimensions(::PROTOBUF_NAMESPACE_ID::int32 value); - ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >* - _internal_mutable_dimensions(); - public: - ::PROTOBUF_NAMESPACE_ID::int32 dimensions(int index) const; - void set_dimensions(int index, ::PROTOBUF_NAMESPACE_ID::int32 value); - void add_dimensions(::PROTOBUF_NAMESPACE_ID::int32 value); - const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >& - dimensions() const; - ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >* - mutable_dimensions(); - - // repeated uint32 missing_ids = 3; - int missing_ids_size() const; - private: - int _internal_missing_ids_size() const; - public: - void clear_missing_ids(); - private: - ::PROTOBUF_NAMESPACE_ID::uint32 _internal_missing_ids(int index) const; - const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::uint32 >& - _internal_missing_ids() const; - void _internal_add_missing_ids(::PROTOBUF_NAMESPACE_ID::uint32 value); - ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::uint32 >* - _internal_mutable_missing_ids(); - public: - ::PROTOBUF_NAMESPACE_ID::uint32 missing_ids(int index) const; - void set_missing_ids(int index, ::PROTOBUF_NAMESPACE_ID::uint32 value); - void add_missing_ids(::PROTOBUF_NAMESPACE_ID::uint32 value); - const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::uint32 >& - missing_ids() const; - ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::uint32 >* - mutable_missing_ids(); - - // bytes embeddings_data = 1; - void clear_embeddings_data(); - const std::string& embeddings_data() const; - void set_embeddings_data(const std::string& value); - void set_embeddings_data(std::string&& value); - void set_embeddings_data(const char* value); - void set_embeddings_data(const void* value, size_t size); - std::string* mutable_embeddings_data(); - std::string* release_embeddings_data(); - void set_allocated_embeddings_data(std::string* embeddings_data); - GOOGLE_PROTOBUF_RUNTIME_DEPRECATED("The unsafe_arena_ accessors for" - " string fields are deprecated and will be removed in a" - " future release.") - std::string* unsafe_arena_release_embeddings_data(); - GOOGLE_PROTOBUF_RUNTIME_DEPRECATED("The unsafe_arena_ accessors for" - " string fields are deprecated and will be removed in a" - " future release.") - void unsafe_arena_set_allocated_embeddings_data( - std::string* embeddings_data); - private: - const std::string& _internal_embeddings_data() const; - void _internal_set_embeddings_data(const std::string& value); - std::string* _internal_mutable_embeddings_data(); - public: - - // @@protoc_insertion_point(class_scope:protoembedding.NodeEmbeddingResponse) - private: - class _Internal; - - template friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper; - typedef void InternalArenaConstructable_; - typedef void DestructorSkippable_; - ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 > dimensions_; - mutable std::atomic _dimensions_cached_byte_size_; - ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::uint32 > missing_ids_; - mutable std::atomic _missing_ids_cached_byte_size_; - ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr embeddings_data_; - mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_; - friend struct ::TableStruct_embedding_2eproto; -}; -// =================================================================== - - -// =================================================================== - -#ifdef __GNUC__ - #pragma GCC diagnostic push - #pragma GCC diagnostic ignored "-Wstrict-aliasing" -#endif // __GNUC__ -// NodeEmbeddingRequest - -// repeated uint32 node_ids = 1; -inline int NodeEmbeddingRequest::_internal_node_ids_size() const { - return node_ids_.size(); -} -inline int NodeEmbeddingRequest::node_ids_size() const { - return _internal_node_ids_size(); -} -inline void NodeEmbeddingRequest::clear_node_ids() { - node_ids_.Clear(); -} -inline ::PROTOBUF_NAMESPACE_ID::uint32 NodeEmbeddingRequest::_internal_node_ids(int index) const { - return node_ids_.Get(index); -} -inline ::PROTOBUF_NAMESPACE_ID::uint32 NodeEmbeddingRequest::node_ids(int index) const { - // @@protoc_insertion_point(field_get:protoembedding.NodeEmbeddingRequest.node_ids) - return _internal_node_ids(index); -} -inline void NodeEmbeddingRequest::set_node_ids(int index, ::PROTOBUF_NAMESPACE_ID::uint32 value) { - node_ids_.Set(index, value); - // @@protoc_insertion_point(field_set:protoembedding.NodeEmbeddingRequest.node_ids) -} -inline void NodeEmbeddingRequest::_internal_add_node_ids(::PROTOBUF_NAMESPACE_ID::uint32 value) { - node_ids_.Add(value); -} -inline void NodeEmbeddingRequest::add_node_ids(::PROTOBUF_NAMESPACE_ID::uint32 value) { - _internal_add_node_ids(value); - // @@protoc_insertion_point(field_add:protoembedding.NodeEmbeddingRequest.node_ids) -} -inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::uint32 >& -NodeEmbeddingRequest::_internal_node_ids() const { - return node_ids_; -} -inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::uint32 >& -NodeEmbeddingRequest::node_ids() const { - // @@protoc_insertion_point(field_list:protoembedding.NodeEmbeddingRequest.node_ids) - return _internal_node_ids(); -} -inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::uint32 >* -NodeEmbeddingRequest::_internal_mutable_node_ids() { - return &node_ids_; -} -inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::uint32 >* -NodeEmbeddingRequest::mutable_node_ids() { - // @@protoc_insertion_point(field_mutable_list:protoembedding.NodeEmbeddingRequest.node_ids) - return _internal_mutable_node_ids(); -} - -// ------------------------------------------------------------------- - -// NodeEmbeddingResponse - -// bytes embeddings_data = 1; -inline void NodeEmbeddingResponse::clear_embeddings_data() { - embeddings_data_.ClearToEmpty(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArena()); -} -inline const std::string& NodeEmbeddingResponse::embeddings_data() const { - // @@protoc_insertion_point(field_get:protoembedding.NodeEmbeddingResponse.embeddings_data) - return _internal_embeddings_data(); -} -inline void NodeEmbeddingResponse::set_embeddings_data(const std::string& value) { - _internal_set_embeddings_data(value); - // @@protoc_insertion_point(field_set:protoembedding.NodeEmbeddingResponse.embeddings_data) -} -inline std::string* NodeEmbeddingResponse::mutable_embeddings_data() { - // @@protoc_insertion_point(field_mutable:protoembedding.NodeEmbeddingResponse.embeddings_data) - return _internal_mutable_embeddings_data(); -} -inline const std::string& NodeEmbeddingResponse::_internal_embeddings_data() const { - return embeddings_data_.Get(); -} -inline void NodeEmbeddingResponse::_internal_set_embeddings_data(const std::string& value) { - - embeddings_data_.Set(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), value, GetArena()); -} -inline void NodeEmbeddingResponse::set_embeddings_data(std::string&& value) { - - embeddings_data_.Set( - &::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), ::std::move(value), GetArena()); - // @@protoc_insertion_point(field_set_rvalue:protoembedding.NodeEmbeddingResponse.embeddings_data) -} -inline void NodeEmbeddingResponse::set_embeddings_data(const char* value) { - GOOGLE_DCHECK(value != nullptr); - - embeddings_data_.Set(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), ::std::string(value), - GetArena()); - // @@protoc_insertion_point(field_set_char:protoembedding.NodeEmbeddingResponse.embeddings_data) -} -inline void NodeEmbeddingResponse::set_embeddings_data(const void* value, - size_t size) { - - embeddings_data_.Set(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), ::std::string( - reinterpret_cast(value), size), GetArena()); - // @@protoc_insertion_point(field_set_pointer:protoembedding.NodeEmbeddingResponse.embeddings_data) -} -inline std::string* NodeEmbeddingResponse::_internal_mutable_embeddings_data() { - - return embeddings_data_.Mutable(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArena()); -} -inline std::string* NodeEmbeddingResponse::release_embeddings_data() { - // @@protoc_insertion_point(field_release:protoembedding.NodeEmbeddingResponse.embeddings_data) - return embeddings_data_.Release(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArena()); -} -inline void NodeEmbeddingResponse::set_allocated_embeddings_data(std::string* embeddings_data) { - if (embeddings_data != nullptr) { - - } else { - - } - embeddings_data_.SetAllocated(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), embeddings_data, - GetArena()); - // @@protoc_insertion_point(field_set_allocated:protoembedding.NodeEmbeddingResponse.embeddings_data) -} -inline std::string* NodeEmbeddingResponse::unsafe_arena_release_embeddings_data() { - // @@protoc_insertion_point(field_unsafe_arena_release:protoembedding.NodeEmbeddingResponse.embeddings_data) - GOOGLE_DCHECK(GetArena() != nullptr); - - return embeddings_data_.UnsafeArenaRelease(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), - GetArena()); -} -inline void NodeEmbeddingResponse::unsafe_arena_set_allocated_embeddings_data( - std::string* embeddings_data) { - GOOGLE_DCHECK(GetArena() != nullptr); - if (embeddings_data != nullptr) { - - } else { - - } - embeddings_data_.UnsafeArenaSetAllocated(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), - embeddings_data, GetArena()); - // @@protoc_insertion_point(field_unsafe_arena_set_allocated:protoembedding.NodeEmbeddingResponse.embeddings_data) -} - -// repeated int32 dimensions = 2; -inline int NodeEmbeddingResponse::_internal_dimensions_size() const { - return dimensions_.size(); -} -inline int NodeEmbeddingResponse::dimensions_size() const { - return _internal_dimensions_size(); -} -inline void NodeEmbeddingResponse::clear_dimensions() { - dimensions_.Clear(); -} -inline ::PROTOBUF_NAMESPACE_ID::int32 NodeEmbeddingResponse::_internal_dimensions(int index) const { - return dimensions_.Get(index); -} -inline ::PROTOBUF_NAMESPACE_ID::int32 NodeEmbeddingResponse::dimensions(int index) const { - // @@protoc_insertion_point(field_get:protoembedding.NodeEmbeddingResponse.dimensions) - return _internal_dimensions(index); -} -inline void NodeEmbeddingResponse::set_dimensions(int index, ::PROTOBUF_NAMESPACE_ID::int32 value) { - dimensions_.Set(index, value); - // @@protoc_insertion_point(field_set:protoembedding.NodeEmbeddingResponse.dimensions) -} -inline void NodeEmbeddingResponse::_internal_add_dimensions(::PROTOBUF_NAMESPACE_ID::int32 value) { - dimensions_.Add(value); -} -inline void NodeEmbeddingResponse::add_dimensions(::PROTOBUF_NAMESPACE_ID::int32 value) { - _internal_add_dimensions(value); - // @@protoc_insertion_point(field_add:protoembedding.NodeEmbeddingResponse.dimensions) -} -inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >& -NodeEmbeddingResponse::_internal_dimensions() const { - return dimensions_; -} -inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >& -NodeEmbeddingResponse::dimensions() const { - // @@protoc_insertion_point(field_list:protoembedding.NodeEmbeddingResponse.dimensions) - return _internal_dimensions(); -} -inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >* -NodeEmbeddingResponse::_internal_mutable_dimensions() { - return &dimensions_; -} -inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >* -NodeEmbeddingResponse::mutable_dimensions() { - // @@protoc_insertion_point(field_mutable_list:protoembedding.NodeEmbeddingResponse.dimensions) - return _internal_mutable_dimensions(); -} - -// repeated uint32 missing_ids = 3; -inline int NodeEmbeddingResponse::_internal_missing_ids_size() const { - return missing_ids_.size(); -} -inline int NodeEmbeddingResponse::missing_ids_size() const { - return _internal_missing_ids_size(); -} -inline void NodeEmbeddingResponse::clear_missing_ids() { - missing_ids_.Clear(); -} -inline ::PROTOBUF_NAMESPACE_ID::uint32 NodeEmbeddingResponse::_internal_missing_ids(int index) const { - return missing_ids_.Get(index); -} -inline ::PROTOBUF_NAMESPACE_ID::uint32 NodeEmbeddingResponse::missing_ids(int index) const { - // @@protoc_insertion_point(field_get:protoembedding.NodeEmbeddingResponse.missing_ids) - return _internal_missing_ids(index); -} -inline void NodeEmbeddingResponse::set_missing_ids(int index, ::PROTOBUF_NAMESPACE_ID::uint32 value) { - missing_ids_.Set(index, value); - // @@protoc_insertion_point(field_set:protoembedding.NodeEmbeddingResponse.missing_ids) -} -inline void NodeEmbeddingResponse::_internal_add_missing_ids(::PROTOBUF_NAMESPACE_ID::uint32 value) { - missing_ids_.Add(value); -} -inline void NodeEmbeddingResponse::add_missing_ids(::PROTOBUF_NAMESPACE_ID::uint32 value) { - _internal_add_missing_ids(value); - // @@protoc_insertion_point(field_add:protoembedding.NodeEmbeddingResponse.missing_ids) -} -inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::uint32 >& -NodeEmbeddingResponse::_internal_missing_ids() const { - return missing_ids_; -} -inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::uint32 >& -NodeEmbeddingResponse::missing_ids() const { - // @@protoc_insertion_point(field_list:protoembedding.NodeEmbeddingResponse.missing_ids) - return _internal_missing_ids(); -} -inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::uint32 >* -NodeEmbeddingResponse::_internal_mutable_missing_ids() { - return &missing_ids_; -} -inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::uint32 >* -NodeEmbeddingResponse::mutable_missing_ids() { - // @@protoc_insertion_point(field_mutable_list:protoembedding.NodeEmbeddingResponse.missing_ids) - return _internal_mutable_missing_ids(); -} - -#ifdef __GNUC__ - #pragma GCC diagnostic pop -#endif // __GNUC__ -// ------------------------------------------------------------------- - - -// @@protoc_insertion_point(namespace_scope) - -} // namespace protoembedding - -// @@protoc_insertion_point(global_scope) - -#include -#endif // GOOGLE_PROTOBUF_INCLUDED_GOOGLE_PROTOBUF_INCLUDED_embedding_2eproto diff --git a/packages/leann-backend-diskann/third_party/DiskANN/include/embedding_compute.h b/packages/leann-backend-diskann/third_party/DiskANN/include/embedding_compute.h deleted file mode 100644 index 354c9c5..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/include/embedding_compute.h +++ /dev/null @@ -1,118 +0,0 @@ -#pragma once - -#include -#include - -#ifdef PYBIND11_EMBEDDED -#include -#else -#include -#endif -#include -#include - -namespace py = pybind11; - -namespace diskann -{ - -class PYBIND11_EXPORT EmbeddingComputer -{ - public: - static EmbeddingComputer &getInstance() - { - static EmbeddingComputer instance; - return instance; - } - - void initialize(const std::string &model_path) - { - try - { - py::module_ sys = py::module_::import("sys"); - py::module_ os = py::module_::import("os"); - - // Add the directory containing embedd_micro.py to Python path - std::string micro_dir = "micro"; - sys.attr("path").attr("append")(micro_dir); - - // Import our module - py::module_ embedd = py::module_::import("embedd_micro"); - - // Create benchmark config - py::object config = embedd.attr("BenchmarkConfig")(model_path, // model_path - py::list(), // empty batch_sizes - 256, // seq_length - 1, // num_runs - true, // use_fp16 - false, // use_cuda_graphs - false // use_flash_attention - ); - - // Create benchmark instance - benchmark = embedd.attr("Benchmark")(config); - } - catch (const std::exception &e) - { - throw std::runtime_error("Failed to initialize Python embedding computer: " + std::string(e.what())); - } - } - - template - std::vector computeEmbeddings(const std::vector &points, size_t dim, size_t batch_size = 32) - { - try - { - // Convert points to numpy array - std::vector flattened_points; - flattened_points.reserve(points.size() * dim); - - for (const auto &point : points) - { - flattened_points.insert(flattened_points.end(), point, point + dim); - } - - py::array_t points_array({static_cast(points.size()), static_cast(dim)}, - flattened_points.data()); - - // Call compute_embeddings - py::object result = benchmark.attr("compute_embeddings")(points_array, batch_size); - - // Convert result back to C++ - py::array_t np_result = result.cast>(); - py::buffer_info buf = np_result.request(); - float *ptr = static_cast(buf.ptr); - - return std::vector(ptr, ptr + buf.size); - } - catch (const std::exception &e) - { - throw std::runtime_error("Failed to compute embeddings: " + std::string(e.what())); - } - } - - private: - EmbeddingComputer() - { -#ifdef PYBIND11_EMBEDDED - if (!Py_IsInitialized()) - { - py::initialize_interpreter(); - } -#endif - } - - ~EmbeddingComputer() - { -#ifdef PYBIND11_EMBEDDED - if (Py_IsInitialized()) - { - py::finalize_interpreter(); - } -#endif - } - - py::object benchmark; -}; - -} // namespace diskann \ No newline at end of file diff --git a/packages/leann-backend-diskann/third_party/DiskANN/include/exceptions.h b/packages/leann-backend-diskann/third_party/DiskANN/include/exceptions.h deleted file mode 100644 index 99e4e73..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/include/exceptions.h +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT license. - -#pragma once -#include - -namespace diskann -{ - -class NotImplementedException : public std::logic_error -{ - public: - NotImplementedException() : std::logic_error("Function not yet implemented.") - { - } -}; -} // namespace diskann diff --git a/packages/leann-backend-diskann/third_party/DiskANN/include/filter_utils.h b/packages/leann-backend-diskann/third_party/DiskANN/include/filter_utils.h deleted file mode 100644 index 55f7aed..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/include/filter_utils.h +++ /dev/null @@ -1,221 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT license. - -#pragma once -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#ifdef __APPLE__ -#else -#include -#endif - -#ifdef _WINDOWS -#include -typedef HANDLE FileHandle; -#else -#include -typedef int FileHandle; -#endif - -#ifndef _WINDOWS -#include -#endif - -#include "cached_io.h" -#include "common_includes.h" -#include "memory_mapper.h" -#include "utils.h" -#include "windows_customizations.h" - -// custom types (for readability) -typedef tsl::robin_set label_set; -typedef std::string path; - -// structs for returning multiple items from a function -typedef std::tuple, tsl::robin_map, tsl::robin_set> - parse_label_file_return_values; -typedef std::tuple>, uint64_t> load_label_index_return_values; - -namespace diskann -{ -template -DISKANN_DLLEXPORT void generate_label_indices(path input_data_path, path final_index_path_prefix, label_set all_labels, - unsigned R, unsigned L, float alpha, unsigned num_threads); - -DISKANN_DLLEXPORT load_label_index_return_values load_label_index(path label_index_path, - uint32_t label_number_of_points); - -template -DISKANN_DLLEXPORT std::tuple>, tsl::robin_set> parse_formatted_label_file( - path label_file); - -DISKANN_DLLEXPORT parse_label_file_return_values parse_label_file(path label_data_path, std::string universal_label); - -template -DISKANN_DLLEXPORT tsl::robin_map> generate_label_specific_vector_files_compat( - path input_data_path, tsl::robin_map labels_to_number_of_points, - std::vector point_ids_to_labels, label_set all_labels); - -/* - * For each label, generates a file containing all vectors that have said label. - * Also copies data from original bin file to new dimension-aligned file. - * - * Utilizes POSIX functions mmap and writev in order to minimize memory - * overhead, so we include an STL version as well. - * - * Each data file is saved under the following format: - * input_data_path + "_" + label - */ -#ifndef _WINDOWS -template -inline tsl::robin_map> generate_label_specific_vector_files( - path input_data_path, tsl::robin_map labels_to_number_of_points, - std::vector point_ids_to_labels, label_set all_labels) -{ -#ifndef _WINDOWS - auto file_writing_timer = std::chrono::high_resolution_clock::now(); - diskann::MemoryMapper input_data(input_data_path); - char *input_start = input_data.getBuf(); - - uint32_t number_of_points, dimension; - std::memcpy(&number_of_points, input_start, sizeof(uint32_t)); - std::memcpy(&dimension, input_start + sizeof(uint32_t), sizeof(uint32_t)); - const uint32_t VECTOR_SIZE = dimension * sizeof(T); - const size_t METADATA = 2 * sizeof(uint32_t); - if (number_of_points != point_ids_to_labels.size()) - { - std::cerr << "Error: number of points in labels file and data file differ." << std::endl; - throw; - } - - tsl::robin_map label_to_iovec_map; - tsl::robin_map label_to_curr_iovec; - tsl::robin_map> label_id_to_orig_id; - - // setup iovec list for each label - for (const auto &lbl : all_labels) - { - iovec *label_iovecs = (iovec *)malloc(labels_to_number_of_points[lbl] * sizeof(iovec)); - if (label_iovecs == nullptr) - { - throw; - } - label_to_iovec_map[lbl] = label_iovecs; - label_to_curr_iovec[lbl] = 0; - label_id_to_orig_id[lbl].reserve(labels_to_number_of_points[lbl]); - } - - // each point added to corresponding per-label iovec list - for (uint32_t point_id = 0; point_id < number_of_points; point_id++) - { - char *curr_point = input_start + METADATA + (VECTOR_SIZE * point_id); - iovec curr_iovec; - - curr_iovec.iov_base = curr_point; - curr_iovec.iov_len = VECTOR_SIZE; - for (const auto &lbl : point_ids_to_labels[point_id]) - { - *(label_to_iovec_map[lbl] + label_to_curr_iovec[lbl]) = curr_iovec; - label_to_curr_iovec[lbl]++; - label_id_to_orig_id[lbl].push_back(point_id); - } - } - - // write each label iovec to resp. file - for (const auto &lbl : all_labels) - { - int label_input_data_fd; - path curr_label_input_data_path(input_data_path + "_" + lbl); - uint32_t curr_num_pts = labels_to_number_of_points[lbl]; - - label_input_data_fd = - open(curr_label_input_data_path.c_str(), O_CREAT | O_WRONLY | O_TRUNC | O_APPEND, (mode_t)0644); - if (label_input_data_fd == -1) - throw; - - // write metadata - uint32_t metadata[2] = {curr_num_pts, dimension}; - int return_value = write(label_input_data_fd, metadata, sizeof(uint32_t) * 2); - if (return_value == -1) - { - throw; - } - - // limits on number of iovec structs per writev means we need to perform - // multiple writevs - size_t i = 0; - while (curr_num_pts > IOV_MAX) - { - return_value = writev(label_input_data_fd, (label_to_iovec_map[lbl] + (IOV_MAX * i)), IOV_MAX); - if (return_value == -1) - { - close(label_input_data_fd); - throw; - } - curr_num_pts -= IOV_MAX; - i += 1; - } - return_value = writev(label_input_data_fd, (label_to_iovec_map[lbl] + (IOV_MAX * i)), curr_num_pts); - if (return_value == -1) - { - close(label_input_data_fd); - throw; - } - - free(label_to_iovec_map[lbl]); - close(label_input_data_fd); - } - - std::chrono::duration file_writing_time = std::chrono::high_resolution_clock::now() - file_writing_timer; - std::cout << "generated " << all_labels.size() << " label-specific vector files for index building in time " - << file_writing_time.count() << "\n" - << std::endl; - - return label_id_to_orig_id; -#endif -} -#endif - -inline std::vector loadTags(const std::string &tags_file, const std::string &base_file) -{ - const bool tags_enabled = tags_file.empty() ? false : true; - std::vector location_to_tag; - if (tags_enabled) - { - size_t tag_file_ndims, tag_file_npts; - std::uint32_t *tag_data; - diskann::load_bin(tags_file, tag_data, tag_file_npts, tag_file_ndims); - if (tag_file_ndims != 1) - { - diskann::cerr << "tags file error" << std::endl; - throw diskann::ANNException("tag file error", -1, __FUNCSIG__, __FILE__, __LINE__); - } - - // check if the point count match - size_t base_file_npts, base_file_ndims; - diskann::get_bin_metadata(base_file, base_file_npts, base_file_ndims); - if (base_file_npts != tag_file_npts) - { - diskann::cerr << "point num in tags file mismatch" << std::endl; - throw diskann::ANNException("point num in tags file mismatch", -1, __FUNCSIG__, __FILE__, __LINE__); - } - - location_to_tag.assign(tag_data, tag_data + tag_file_npts); - delete[] tag_data; - } - return location_to_tag; -} - -} // namespace diskann diff --git a/packages/leann-backend-diskann/third_party/DiskANN/include/in_mem_data_store.h b/packages/leann-backend-diskann/third_party/DiskANN/include/in_mem_data_store.h deleted file mode 100644 index 0a0a617..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/include/in_mem_data_store.h +++ /dev/null @@ -1,89 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT license. -#pragma once - -#include -#include - -#include "tsl/robin_map.h" -#include "tsl/robin_set.h" -#include "tsl/sparse_map.h" -// #include "boost/dynamic_bitset.hpp" - -#include "abstract_data_store.h" - -#include "distance.h" -#include "natural_number_map.h" -#include "natural_number_set.h" -#include "aligned_file_reader.h" - -namespace diskann -{ -template class InMemDataStore : public AbstractDataStore -{ - public: - InMemDataStore(const location_t capacity, const size_t dim, std::unique_ptr> distance_fn); - virtual ~InMemDataStore(); - - virtual location_t load(const std::string &filename) override; - virtual size_t save(const std::string &filename, const location_t num_points) override; - - virtual size_t get_aligned_dim() const override; - - // Populate internal data from unaligned data while doing alignment and any - // normalization that is required. - virtual void populate_data(const data_t *vectors, const location_t num_pts) override; - virtual void populate_data(const std::string &filename, const size_t offset) override; - - virtual void extract_data_to_bin(const std::string &filename, const location_t num_pts) override; - - virtual void get_vector(const location_t i, data_t *target) const override; - virtual void set_vector(const location_t i, const data_t *const vector) override; - virtual void prefetch_vector(const location_t loc) override; - - virtual void move_vectors(const location_t old_location_start, const location_t new_location_start, - const location_t num_points) override; - virtual void copy_vectors(const location_t from_loc, const location_t to_loc, const location_t num_points) override; - - virtual void preprocess_query(const data_t *query, AbstractScratch *query_scratch) const override; - - virtual float get_distance(const data_t *preprocessed_query, const location_t loc) const override; - virtual float get_distance(const location_t loc1, const location_t loc2) const override; - - virtual void get_distance(const data_t *preprocessed_query, const location_t *locations, - const uint32_t location_count, float *distances, - AbstractScratch *scratch) const override; - virtual void get_distance(const data_t *preprocessed_query, const std::vector &ids, - std::vector &distances, AbstractScratch *scratch_space) const override; - - virtual location_t calculate_medoid() const override; - - virtual Distance *get_dist_fn() const override; - - virtual size_t get_alignment_factor() const override; - - protected: - virtual location_t expand(const location_t new_size) override; - virtual location_t shrink(const location_t new_size) override; - - virtual location_t load_impl(const std::string &filename); -#ifdef EXEC_ENV_OLS - virtual location_t load_impl(AlignedFileReader &reader); -#endif - - private: - data_t *_data = nullptr; - - size_t _aligned_dim; - - // It may seem weird to put distance metric along with the data store class, - // but this gives us perf benefits as the datastore can do distance - // computations during search and compute norms of vectors internally without - // have to copy data back and forth. - std::unique_ptr> _distance_fn; - - // in case we need to save vector norms for optimization - std::shared_ptr _pre_computed_norms; -}; - -} // namespace diskann \ No newline at end of file diff --git a/packages/leann-backend-diskann/third_party/DiskANN/include/in_mem_graph_store.h b/packages/leann-backend-diskann/third_party/DiskANN/include/in_mem_graph_store.h deleted file mode 100644 index d0206a7..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/include/in_mem_graph_store.h +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT license. - -#pragma once - -#include "abstract_graph_store.h" - -namespace diskann -{ - -class InMemGraphStore : public AbstractGraphStore -{ - public: - InMemGraphStore(const size_t total_pts, const size_t reserve_graph_degree); - - // returns tuple of - virtual std::tuple load(const std::string &index_path_prefix, - const size_t num_points) override; - virtual int store(const std::string &index_path_prefix, const size_t num_points, const size_t num_frozen_points, - const uint32_t start) override; - - virtual const std::vector &get_neighbours(const location_t i) const override; - virtual void add_neighbour(const location_t i, location_t neighbour_id) override; - virtual void clear_neighbours(const location_t i) override; - virtual void swap_neighbours(const location_t a, location_t b) override; - - virtual void set_neighbours(const location_t i, std::vector &neighbors) override; - - virtual size_t resize_graph(const size_t new_size) override; - virtual void clear_graph() override; - - virtual size_t get_max_range_of_graph() override; - virtual uint32_t get_max_observed_degree() override; - - protected: - virtual std::tuple load_impl(const std::string &filename, size_t expected_num_points); -#ifdef EXEC_ENV_OLS - virtual std::tuple load_impl(AlignedFileReader &reader, size_t expected_num_points); -#endif - - int save_graph(const std::string &index_path_prefix, const size_t active_points, const size_t num_frozen_points, - const uint32_t start); - - private: - size_t _max_range_of_graph = 0; - uint32_t _max_observed_degree = 0; - - std::vector> _graph; -}; - -} // namespace diskann diff --git a/packages/leann-backend-diskann/third_party/DiskANN/include/index.h b/packages/leann-backend-diskann/third_party/DiskANN/include/index.h deleted file mode 100644 index c4303a1..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/include/index.h +++ /dev/null @@ -1,452 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT license. - -#pragma once - -#include "common_includes.h" - -#ifdef EXEC_ENV_OLS -#include "aligned_file_reader.h" -#endif - -#include "distance.h" -#include "locking.h" -#include "natural_number_map.h" -#include "natural_number_set.h" -#include "neighbor.h" -#include "parameters.h" -#include "utils.h" -#include "windows_customizations.h" -#include "scratch.h" -#include "in_mem_data_store.h" -#include "in_mem_graph_store.h" -#include "abstract_index.h" - -#include "quantized_distance.h" -#include "pq_data_store.h" - -#define OVERHEAD_FACTOR 1.1 -#define EXPAND_IF_FULL 0 -#define DEFAULT_MAXC 750 - -namespace diskann -{ - -inline double estimate_ram_usage(size_t size, uint32_t dim, uint32_t datasize, uint32_t degree) -{ - double size_of_data = ((double)size) * ROUND_UP(dim, 8) * datasize; - double size_of_graph = ((double)size) * degree * sizeof(uint32_t) * defaults::GRAPH_SLACK_FACTOR; - double size_of_locks = ((double)size) * sizeof(non_recursive_mutex); - double size_of_outer_vector = ((double)size) * sizeof(ptrdiff_t); - - return OVERHEAD_FACTOR * (size_of_data + size_of_graph + size_of_locks + size_of_outer_vector); -} - -template class Index : public AbstractIndex -{ - /************************************************************************** - * - * Public functions acquire one or more of _update_lock, _consolidate_lock, - * _tag_lock, _delete_lock before calling protected functions which DO NOT - * acquire these locks. They might acquire locks on _locks[i] - * - **************************************************************************/ - - public: - // Constructor for Bulk operations and for creating the index object solely - // for loading a prexisting index. - DISKANN_DLLEXPORT Index(const IndexConfig &index_config, std::shared_ptr> data_store, - std::unique_ptr graph_store, - std::shared_ptr> pq_data_store = nullptr); - - // Constructor for incremental index - DISKANN_DLLEXPORT Index(Metric m, const size_t dim, const size_t max_points, - const std::shared_ptr index_parameters, - const std::shared_ptr index_search_params, - const size_t num_frozen_pts = 0, const bool dynamic_index = false, - const bool enable_tags = false, const bool concurrent_consolidate = false, - const bool pq_dist_build = false, const size_t num_pq_chunks = 0, - const bool use_opq = false, const bool filtered_index = false); - - DISKANN_DLLEXPORT ~Index(); - - // Saves graph, data, metadata and associated tags. - DISKANN_DLLEXPORT void save(const char *filename, bool compact_before_save = false) override; - - // Load functions -#ifdef EXEC_ENV_OLS - DISKANN_DLLEXPORT void load(AlignedFileReader &reader, uint32_t num_threads, uint32_t search_l); -#else - // Reads the number of frozen points from graph's metadata file section. - DISKANN_DLLEXPORT static size_t get_graph_num_frozen_points(const std::string &graph_file); - - DISKANN_DLLEXPORT void load(const char *index_file, uint32_t num_threads, uint32_t search_l) override; -#endif - - // get some private variables - DISKANN_DLLEXPORT size_t get_num_points(); - DISKANN_DLLEXPORT size_t get_max_points(); - - DISKANN_DLLEXPORT bool detect_common_filters(uint32_t point_id, bool search_invocation, - const std::vector &incoming_labels); - - // Batch build from a file. Optionally pass tags vector. - DISKANN_DLLEXPORT void build(const char *filename, const size_t num_points_to_load, - const std::vector &tags = std::vector()); - - // Batch build from a file. Optionally pass tags file. - DISKANN_DLLEXPORT void build(const char *filename, const size_t num_points_to_load, const char *tag_filename); - - // Batch build from a data array, which must pad vectors to aligned_dim - DISKANN_DLLEXPORT void build(const T *data, const size_t num_points_to_load, const std::vector &tags); - - // Based on filter params builds a filtered or unfiltered index - DISKANN_DLLEXPORT void build(const std::string &data_file, const size_t num_points_to_load, - IndexFilterParams &filter_params) override; - - // Filtered Support - DISKANN_DLLEXPORT void build_filtered_index(const char *filename, const std::string &label_file, - const size_t num_points_to_load, - const std::vector &tags = std::vector()); - - DISKANN_DLLEXPORT void set_universal_label(const LabelT &label); - - // Get converted integer label from string to int map (_label_map) - DISKANN_DLLEXPORT LabelT get_converted_label(const std::string &raw_label); - - // Set starting point of an index before inserting any points incrementally. - // The data count should be equal to _num_frozen_pts * _aligned_dim. - DISKANN_DLLEXPORT void set_start_points(const T *data, size_t data_count); - // Set starting points to random points on a sphere of certain radius. - // A fixed random seed can be specified for scenarios where it's important - // to have higher consistency between index builds. - DISKANN_DLLEXPORT void set_start_points_at_random(T radius, uint32_t random_seed = 0); - - // For FastL2 search on a static index, we interleave the data with graph - DISKANN_DLLEXPORT void optimize_index_layout() override; - - // For FastL2 search on optimized layout - DISKANN_DLLEXPORT void search_with_optimized_layout(const T *query, size_t K, size_t L, uint32_t *indices); - - // Added search overload that takes L as parameter, so that we - // can customize L on a per-query basis without tampering with "Parameters" - template - DISKANN_DLLEXPORT std::pair search(const T *query, const size_t K, const uint32_t L, - IDType *indices, float *distances = nullptr); - - // Initialize space for res_vectors before calling. - DISKANN_DLLEXPORT size_t search_with_tags(const T *query, const uint64_t K, const uint32_t L, TagT *tags, - float *distances, std::vector &res_vectors, bool use_filters = false, - const std::string filter_label = ""); - - // Filter support search - template - DISKANN_DLLEXPORT std::pair search_with_filters(const T *query, const LabelT &filter_label, - const size_t K, const uint32_t L, - IndexType *indices, float *distances); - - // Will fail if tag already in the index or if tag=0. - DISKANN_DLLEXPORT int insert_point(const T *point, const TagT tag); - - // Will fail if tag already in the index or if tag=0. - DISKANN_DLLEXPORT int insert_point(const T *point, const TagT tag, const std::vector &label); - - // call this before issuing deletions to sets relevant flags - DISKANN_DLLEXPORT int enable_delete(); - - // Record deleted point now and restructure graph later. Return -1 if tag - // not found, 0 if OK. - DISKANN_DLLEXPORT int lazy_delete(const TagT &tag); - - // Record deleted points now and restructure graph later. Add to failed_tags - // if tag not found. - DISKANN_DLLEXPORT void lazy_delete(const std::vector &tags, std::vector &failed_tags); - - // Call after a series of lazy deletions - // Returns number of live points left after consolidation - // If _conc_consolidates is set in the ctor, then this call can be invoked - // alongside inserts and lazy deletes, else it acquires _update_lock - DISKANN_DLLEXPORT consolidation_report consolidate_deletes(const IndexWriteParameters ¶meters) override; - - DISKANN_DLLEXPORT void prune_all_neighbors(const uint32_t max_degree, const uint32_t max_occlusion, - const float alpha); - - DISKANN_DLLEXPORT bool is_index_saved(); - - // repositions frozen points to the end of _data - if they have been moved - // during deletion - DISKANN_DLLEXPORT void reposition_frozen_point_to_end(); - DISKANN_DLLEXPORT void reposition_points(uint32_t old_location_start, uint32_t new_location_start, - uint32_t num_locations); - - // DISKANN_DLLEXPORT void save_index_as_one_file(bool flag); - - DISKANN_DLLEXPORT void get_active_tags(tsl::robin_set &active_tags); - - // memory should be allocated for vec before calling this function - DISKANN_DLLEXPORT int get_vector_by_tag(TagT &tag, T *vec); - - DISKANN_DLLEXPORT void print_status(); - - DISKANN_DLLEXPORT void count_nodes_at_bfs_levels(); - - // This variable MUST be updated if the number of entries in the metadata - // change. - DISKANN_DLLEXPORT static const int METADATA_ROWS = 5; - - DISKANN_DLLEXPORT void get_degree_stats(size_t &max_deg, size_t &min_deg, size_t &avg_deg, size_t &cnt_deg); - - DISKANN_DLLEXPORT void dump_degree_stats(std::string filename); - - // ******************************** - // - // Internals of the library - // - // ******************************** - - protected: - // overload of abstract index virtual methods - virtual void _build(const DataType &data, const size_t num_points_to_load, TagVector &tags) override; - - virtual std::pair _search(const DataType &query, const size_t K, const uint32_t L, - std::any &indices, float *distances = nullptr) override; - virtual std::pair _search_with_filters(const DataType &query, - const std::string &filter_label_raw, const size_t K, - const uint32_t L, std::any &indices, - float *distances) override; - - virtual int _insert_point(const DataType &data_point, const TagType tag) override; - virtual int _insert_point(const DataType &data_point, const TagType tag, Labelvector &labels) override; - - virtual int _lazy_delete(const TagType &tag) override; - - virtual void _lazy_delete(TagVector &tags, TagVector &failed_tags) override; - - virtual void _get_active_tags(TagRobinSet &active_tags) override; - - virtual void _set_start_points_at_random(DataType radius, uint32_t random_seed = 0) override; - - virtual int _get_vector_by_tag(TagType &tag, DataType &vec) override; - - virtual void _search_with_optimized_layout(const DataType &query, size_t K, size_t L, uint32_t *indices) override; - - virtual size_t _search_with_tags(const DataType &query, const uint64_t K, const uint32_t L, const TagType &tags, - float *distances, DataVector &res_vectors, bool use_filters = false, - const std::string filter_label = "") override; - - virtual void _set_universal_label(const LabelType universal_label) override; - - // No copy/assign. - Index(const Index &) = delete; - Index &operator=(const Index &) = delete; - - // Use after _data and _nd have been populated - // Acquire exclusive _update_lock before calling - void build_with_data_populated(const std::vector &tags); - - // generates 1 frozen point that will never be deleted from the graph - // This is not visible to the user - void generate_frozen_point(); - - // determines navigating node of the graph by calculating medoid of datafopt - uint32_t calculate_entry_point(); - - void parse_label_file(const std::string &label_file, size_t &num_pts_labels); - - std::unordered_map load_label_map(const std::string &map_file); - - // Returns the locations of start point and frozen points suitable for use - // with iterate_to_fixed_point. - std::vector get_init_ids(); - - // The query to use is placed in scratch->aligned_query - std::pair iterate_to_fixed_point(InMemQueryScratch *scratch, const uint32_t Lindex, - const std::vector &init_ids, bool use_filter, - const std::vector &filters, bool search_invocation); - - void search_for_point_and_prune(int location, uint32_t Lindex, std::vector &pruned_list, - InMemQueryScratch *scratch, bool use_filter = false, - uint32_t filteredLindex = 0); - - void prune_neighbors(const uint32_t location, std::vector &pool, std::vector &pruned_list, - InMemQueryScratch *scratch); - - void prune_neighbors(const uint32_t location, std::vector &pool, const uint32_t range, - const uint32_t max_candidate_size, const float alpha, std::vector &pruned_list, - InMemQueryScratch *scratch); - - // Prunes candidates in @pool to a shorter list @result - // @pool must be sorted before calling - void occlude_list(const uint32_t location, std::vector &pool, const float alpha, const uint32_t degree, - const uint32_t maxc, std::vector &result, InMemQueryScratch *scratch, - const tsl::robin_set *const delete_set_ptr = nullptr); - - // add reverse links from all the visited nodes to node n. - void inter_insert(uint32_t n, std::vector &pruned_list, const uint32_t range, - InMemQueryScratch *scratch); - - void inter_insert(uint32_t n, std::vector &pruned_list, InMemQueryScratch *scratch); - - // Acquire exclusive _update_lock before calling - void link(); - - // Acquire exclusive _tag_lock and _delete_lock before calling - int reserve_location(); - - // Acquire exclusive _tag_lock before calling - size_t release_location(int location); - size_t release_locations(const tsl::robin_set &locations); - - // Resize the index when no slots are left for insertion. - // Acquire exclusive _update_lock and _tag_lock before calling. - void resize(size_t new_max_points); - - // Acquire unique lock on _update_lock, _consolidate_lock, _tag_lock - // and _delete_lock before calling these functions. - // Renumber nodes, update tag and location maps and compact the - // graph, mode = _consolidated_order in case of lazy deletion and - // _compacted_order in case of eager deletion - DISKANN_DLLEXPORT void compact_data(); - DISKANN_DLLEXPORT void compact_frozen_point(); - - // Remove deleted nodes from adjacency list of node loc - // Replace removed neighbors with second order neighbors. - // Also acquires _locks[i] for i = loc and out-neighbors of loc. - void process_delete(const tsl::robin_set &old_delete_set, size_t loc, const uint32_t range, - const uint32_t maxc, const float alpha, InMemQueryScratch *scratch); - - void initialize_query_scratch(uint32_t num_threads, uint32_t search_l, uint32_t indexing_l, uint32_t r, - uint32_t maxc, size_t dim); - - // Do not call without acquiring appropriate locks - // call public member functions save and load to invoke these. - DISKANN_DLLEXPORT size_t save_graph(std::string filename); - DISKANN_DLLEXPORT size_t save_data(std::string filename); - DISKANN_DLLEXPORT size_t save_tags(std::string filename); - DISKANN_DLLEXPORT size_t save_delete_list(const std::string &filename); -#ifdef EXEC_ENV_OLS - DISKANN_DLLEXPORT size_t load_graph(AlignedFileReader &reader, size_t expected_num_points); - DISKANN_DLLEXPORT size_t load_data(AlignedFileReader &reader); - DISKANN_DLLEXPORT size_t load_tags(AlignedFileReader &reader); - DISKANN_DLLEXPORT size_t load_delete_set(AlignedFileReader &reader); -#else - DISKANN_DLLEXPORT size_t load_graph(const std::string filename, size_t expected_num_points); - DISKANN_DLLEXPORT size_t load_data(std::string filename0); - DISKANN_DLLEXPORT size_t load_tags(const std::string tag_file_name); - DISKANN_DLLEXPORT size_t load_delete_set(const std::string &filename); -#endif - - private: - // Distance functions - Metric _dist_metric = diskann::L2; - - // Data - std::shared_ptr> _data_store; - - // Graph related data structures - std::unique_ptr _graph_store; - - char *_opt_graph = nullptr; - - // Dimensions - size_t _dim = 0; - size_t _nd = 0; // number of active points i.e. existing in the graph - size_t _max_points = 0; // total number of points in given data set - - // _num_frozen_pts is the number of points which are used as initial - // candidates when iterating to closest point(s). These are not visible - // externally and won't be returned by search. At least 1 frozen point is - // needed for a dynamic index. The frozen points have consecutive locations. - // See also _start below. - size_t _num_frozen_pts = 0; - size_t _frozen_pts_used = 0; - size_t _node_size; - size_t _data_len; - size_t _neighbor_len; - - // Start point of the search. When _num_frozen_pts is greater than zero, - // this is the location of the first frozen point. Otherwise, this is a - // location of one of the points in index. - uint32_t _start = 0; - - bool _has_built = false; - bool _saturate_graph = false; - bool _save_as_one_file = false; // plan to support in next version - bool _dynamic_index = false; - bool _enable_tags = false; - bool _normalize_vecs = false; // Using normalied L2 for cosine. - bool _deletes_enabled = false; - - // Filter Support - - bool _filtered_index = false; - // Location to label is only updated during insert_point(), all other reads are protected by - // default as a location can only be released at end of consolidate deletes - std::vector> _location_to_labels; - tsl::robin_set _labels; - std::string _labels_file; - std::unordered_map _label_to_start_id; - std::unordered_map _medoid_counts; - - bool _use_universal_label = false; - LabelT _universal_label = 0; - uint32_t _filterIndexingQueueSize; - std::unordered_map _label_map; - - // Indexing parameters - uint32_t _indexingQueueSize; - uint32_t _indexingRange; - uint32_t _indexingMaxC; - float _indexingAlpha; - uint32_t _indexingThreads; - - // Query scratch data structures - ConcurrentQueue *> _query_scratch; - - // Flags for PQ based distance calculation - bool _pq_dist = false; - bool _use_opq = false; - size_t _num_pq_chunks = 0; - // REFACTOR - // uint8_t *_pq_data = nullptr; - std::shared_ptr> _pq_distance_fn = nullptr; - std::shared_ptr> _pq_data_store = nullptr; - bool _pq_generated = false; - FixedChunkPQTable _pq_table; - - // - // Data structures, locks and flags for dynamic indexing and tags - // - - // lazy_delete removes entry from _location_to_tag and _tag_to_location. If - // _location_to_tag does not resolve a location, infer that it was deleted. - tsl::sparse_map _tag_to_location; - natural_number_map _location_to_tag; - - // _empty_slots has unallocated slots and those freed by consolidate_delete. - // _delete_set has locations marked deleted by lazy_delete. Will not be - // immediately available for insert. consolidate_delete will release these - // slots to _empty_slots. - natural_number_set _empty_slots; - std::unique_ptr> _delete_set; - - bool _data_compacted = true; // true if data has been compacted - bool _is_saved = false; // Checking if the index is already saved. - bool _conc_consolidate = false; // use _lock while searching - - // Acquire locks in the order below when acquiring multiple locks - std::shared_timed_mutex // RW mutex between save/load (exclusive lock) and - _update_lock; // search/inserts/deletes/consolidate (shared lock) - std::shared_timed_mutex // Ensure only one consolidate or compact_data is - _consolidate_lock; // ever active - std::shared_timed_mutex // RW lock for _tag_to_location, - _tag_lock; // _location_to_tag, _empty_slots, _nd, _max_points, _label_to_start_id - std::shared_timed_mutex // RW Lock on _delete_set and _data_compacted - _delete_lock; // variable - - // Per node lock, cardinality=_max_points + _num_frozen_points - std::vector _locks; - - static const float INDEX_GROWTH_FACTOR; -}; -} // namespace diskann diff --git a/packages/leann-backend-diskann/third_party/DiskANN/include/index_build_params.h b/packages/leann-backend-diskann/third_party/DiskANN/include/index_build_params.h deleted file mode 100644 index d4f4548..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/include/index_build_params.h +++ /dev/null @@ -1,73 +0,0 @@ -#pragma once - -#include "common_includes.h" -#include "parameters.h" - -namespace diskann -{ -struct IndexFilterParams -{ - public: - std::string save_path_prefix; - std::string label_file; - std::string tags_file; - std::string universal_label; - uint32_t filter_threshold = 0; - - private: - IndexFilterParams(const std::string &save_path_prefix, const std::string &label_file, - const std::string &universal_label, uint32_t filter_threshold) - : save_path_prefix(save_path_prefix), label_file(label_file), universal_label(universal_label), - filter_threshold(filter_threshold) - { - } - - friend class IndexFilterParamsBuilder; -}; -class IndexFilterParamsBuilder -{ - public: - IndexFilterParamsBuilder() = default; - - IndexFilterParamsBuilder &with_save_path_prefix(const std::string &save_path_prefix) - { - if (save_path_prefix.empty() || save_path_prefix == "") - throw ANNException("Error: save_path_prefix can't be empty", -1); - this->_save_path_prefix = save_path_prefix; - return *this; - } - - IndexFilterParamsBuilder &with_label_file(const std::string &label_file) - { - this->_label_file = label_file; - return *this; - } - - IndexFilterParamsBuilder &with_universal_label(const std::string &univeral_label) - { - this->_universal_label = univeral_label; - return *this; - } - - IndexFilterParamsBuilder &with_filter_threshold(const std::uint32_t &filter_threshold) - { - this->_filter_threshold = filter_threshold; - return *this; - } - - IndexFilterParams build() - { - return IndexFilterParams(_save_path_prefix, _label_file, _universal_label, _filter_threshold); - } - - IndexFilterParamsBuilder(const IndexFilterParamsBuilder &) = delete; - IndexFilterParamsBuilder &operator=(const IndexFilterParamsBuilder &) = delete; - - private: - std::string _save_path_prefix; - std::string _label_file; - std::string _tags_file; - std::string _universal_label; - uint32_t _filter_threshold = 0; -}; -} // namespace diskann diff --git a/packages/leann-backend-diskann/third_party/DiskANN/include/index_config.h b/packages/leann-backend-diskann/third_party/DiskANN/include/index_config.h deleted file mode 100644 index a8e64d0..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/include/index_config.h +++ /dev/null @@ -1,256 +0,0 @@ -#pragma once - -#include "common_includes.h" -#include "parameters.h" - -namespace diskann -{ -enum class DataStoreStrategy -{ - MEMORY -}; - -enum class GraphStoreStrategy -{ - MEMORY -}; - -struct IndexConfig -{ - DataStoreStrategy data_strategy; - GraphStoreStrategy graph_strategy; - - Metric metric; - size_t dimension; - size_t max_points; - - bool dynamic_index; - bool enable_tags; - bool pq_dist_build; - bool concurrent_consolidate; - bool use_opq; - bool filtered_index; - - size_t num_pq_chunks; - size_t num_frozen_pts; - - std::string label_type; - std::string tag_type; - std::string data_type; - - // Params for building index - std::shared_ptr index_write_params; - // Params for searching index - std::shared_ptr index_search_params; - - private: - IndexConfig(DataStoreStrategy data_strategy, GraphStoreStrategy graph_strategy, Metric metric, size_t dimension, - size_t max_points, size_t num_pq_chunks, size_t num_frozen_points, bool dynamic_index, bool enable_tags, - bool pq_dist_build, bool concurrent_consolidate, bool use_opq, bool filtered_index, - std::string &data_type, const std::string &tag_type, const std::string &label_type, - std::shared_ptr index_write_params, - std::shared_ptr index_search_params) - : data_strategy(data_strategy), graph_strategy(graph_strategy), metric(metric), dimension(dimension), - max_points(max_points), dynamic_index(dynamic_index), enable_tags(enable_tags), pq_dist_build(pq_dist_build), - concurrent_consolidate(concurrent_consolidate), use_opq(use_opq), filtered_index(filtered_index), - num_pq_chunks(num_pq_chunks), num_frozen_pts(num_frozen_points), label_type(label_type), tag_type(tag_type), - data_type(data_type), index_write_params(index_write_params), index_search_params(index_search_params) - { - } - - friend class IndexConfigBuilder; -}; - -class IndexConfigBuilder -{ - public: - IndexConfigBuilder() = default; - - IndexConfigBuilder &with_metric(Metric m) - { - this->_metric = m; - return *this; - } - - IndexConfigBuilder &with_graph_load_store_strategy(GraphStoreStrategy graph_strategy) - { - this->_graph_strategy = graph_strategy; - return *this; - } - - IndexConfigBuilder &with_data_load_store_strategy(DataStoreStrategy data_strategy) - { - this->_data_strategy = data_strategy; - return *this; - } - - IndexConfigBuilder &with_dimension(size_t dimension) - { - this->_dimension = dimension; - return *this; - } - - IndexConfigBuilder &with_max_points(size_t max_points) - { - this->_max_points = max_points; - return *this; - } - - IndexConfigBuilder &is_dynamic_index(bool dynamic_index) - { - this->_dynamic_index = dynamic_index; - return *this; - } - - IndexConfigBuilder &is_enable_tags(bool enable_tags) - { - this->_enable_tags = enable_tags; - return *this; - } - - IndexConfigBuilder &is_pq_dist_build(bool pq_dist_build) - { - this->_pq_dist_build = pq_dist_build; - return *this; - } - - IndexConfigBuilder &is_concurrent_consolidate(bool concurrent_consolidate) - { - this->_concurrent_consolidate = concurrent_consolidate; - return *this; - } - - IndexConfigBuilder &is_use_opq(bool use_opq) - { - this->_use_opq = use_opq; - return *this; - } - - IndexConfigBuilder &is_filtered(bool is_filtered) - { - this->_filtered_index = is_filtered; - return *this; - } - - IndexConfigBuilder &with_num_pq_chunks(size_t num_pq_chunks) - { - this->_num_pq_chunks = num_pq_chunks; - return *this; - } - - IndexConfigBuilder &with_num_frozen_pts(size_t num_frozen_pts) - { - this->_num_frozen_pts = num_frozen_pts; - return *this; - } - - IndexConfigBuilder &with_label_type(const std::string &label_type) - { - this->_label_type = label_type; - return *this; - } - - IndexConfigBuilder &with_tag_type(const std::string &tag_type) - { - this->_tag_type = tag_type; - return *this; - } - - IndexConfigBuilder &with_data_type(const std::string &data_type) - { - this->_data_type = data_type; - return *this; - } - - IndexConfigBuilder &with_index_write_params(IndexWriteParameters &index_write_params) - { - this->_index_write_params = std::make_shared(index_write_params); - return *this; - } - - IndexConfigBuilder &with_index_write_params(std::shared_ptr index_write_params_ptr) - { - if (index_write_params_ptr == nullptr) - { - diskann::cout << "Passed, empty build_params while creating index config" << std::endl; - return *this; - } - this->_index_write_params = index_write_params_ptr; - return *this; - } - - IndexConfigBuilder &with_index_search_params(IndexSearchParams &search_params) - { - this->_index_search_params = std::make_shared(search_params); - return *this; - } - - IndexConfigBuilder &with_index_search_params(std::shared_ptr search_params_ptr) - { - if (search_params_ptr == nullptr) - { - diskann::cout << "Passed, empty search_params while creating index config" << std::endl; - return *this; - } - this->_index_search_params = search_params_ptr; - return *this; - } - - IndexConfig build() - { - if (_data_type == "" || _data_type.empty()) - throw ANNException("Error: data_type can not be empty", -1); - - if (_dynamic_index && _num_frozen_pts == 0) - { - _num_frozen_pts = 1; - } - - if (_dynamic_index) - { - if (_index_search_params != nullptr && _index_search_params->initial_search_list_size == 0) - throw ANNException("Error: please pass initial_search_list_size for building dynamic index.", -1); - } - - // sanity check - if (_dynamic_index && _num_frozen_pts == 0) - { - diskann::cout << "_num_frozen_pts passed as 0 for dynamic_index. Setting it to 1 for safety." << std::endl; - _num_frozen_pts = 1; - } - - return IndexConfig(_data_strategy, _graph_strategy, _metric, _dimension, _max_points, _num_pq_chunks, - _num_frozen_pts, _dynamic_index, _enable_tags, _pq_dist_build, _concurrent_consolidate, - _use_opq, _filtered_index, _data_type, _tag_type, _label_type, _index_write_params, - _index_search_params); - } - - IndexConfigBuilder(const IndexConfigBuilder &) = delete; - IndexConfigBuilder &operator=(const IndexConfigBuilder &) = delete; - - private: - DataStoreStrategy _data_strategy; - GraphStoreStrategy _graph_strategy; - - Metric _metric; - size_t _dimension; - size_t _max_points; - - bool _dynamic_index = false; - bool _enable_tags = false; - bool _pq_dist_build = false; - bool _concurrent_consolidate = false; - bool _use_opq = false; - bool _filtered_index{defaults::HAS_LABELS}; - - size_t _num_pq_chunks = 0; - size_t _num_frozen_pts{defaults::NUM_FROZEN_POINTS_STATIC}; - - std::string _label_type{"uint32"}; - std::string _tag_type{"uint32"}; - std::string _data_type; - - std::shared_ptr _index_write_params; - std::shared_ptr _index_search_params; -}; -} // namespace diskann diff --git a/packages/leann-backend-diskann/third_party/DiskANN/include/index_factory.h b/packages/leann-backend-diskann/third_party/DiskANN/include/index_factory.h deleted file mode 100644 index 76fb0b9..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/include/index_factory.h +++ /dev/null @@ -1,51 +0,0 @@ -#pragma once - -#include "index.h" -#include "abstract_graph_store.h" -#include "in_mem_graph_store.h" -#include "pq_data_store.h" - -namespace diskann -{ -class IndexFactory -{ - public: - DISKANN_DLLEXPORT explicit IndexFactory(const IndexConfig &config); - DISKANN_DLLEXPORT std::unique_ptr create_instance(); - - DISKANN_DLLEXPORT static std::unique_ptr construct_graphstore( - const GraphStoreStrategy stratagy, const size_t size, const size_t reserve_graph_degree); - - template - DISKANN_DLLEXPORT static std::shared_ptr> construct_datastore(DataStoreStrategy stratagy, - size_t num_points, - size_t dimension, Metric m); - // For now PQDataStore incorporates within itself all variants of quantization that we support. In the - // future it may be necessary to introduce an AbstractPQDataStore class to spearate various quantization - // flavours. - template - DISKANN_DLLEXPORT static std::shared_ptr> construct_pq_datastore(DataStoreStrategy strategy, - size_t num_points, size_t dimension, - Metric m, size_t num_pq_chunks, - bool use_opq); - template static Distance *construct_inmem_distance_fn(Metric m); - - private: - void check_config(); - - template - std::unique_ptr create_instance(); - - std::unique_ptr create_instance(const std::string &data_type, const std::string &tag_type, - const std::string &label_type); - - template - std::unique_ptr create_instance(const std::string &tag_type, const std::string &label_type); - - template - std::unique_ptr create_instance(const std::string &label_type); - - std::unique_ptr _config; -}; - -} // namespace diskann diff --git a/packages/leann-backend-diskann/third_party/DiskANN/include/linux_aligned_file_reader.h b/packages/leann-backend-diskann/third_party/DiskANN/include/linux_aligned_file_reader.h deleted file mode 100644 index d1d1e74..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/include/linux_aligned_file_reader.h +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT license. - -#pragma once -#ifndef _WINDOWS -#ifndef __APPLE__ - -#include "aligned_file_reader.h" - -class LinuxAlignedFileReader : public AlignedFileReader -{ - private: - uint64_t file_sz; - FileHandle file_desc; - io_context_t bad_ctx = (io_context_t)-1; - - public: - LinuxAlignedFileReader(); - ~LinuxAlignedFileReader(); - - IOContext &get_ctx(); - - // register thread-id for a context - void register_thread(); - - // de-register thread-id for a context - void deregister_thread(); - void deregister_all_threads(); - - // Open & close ops - // Blocking calls - void open(const std::string &fname); - void close(); - - // process batch of aligned requests in parallel - // NOTE :: blocking call - void read(std::vector &read_reqs, IOContext &ctx, bool async = false); -}; - -#endif -#endif diff --git a/packages/leann-backend-diskann/third_party/DiskANN/include/locking.h b/packages/leann-backend-diskann/third_party/DiskANN/include/locking.h deleted file mode 100644 index 890c24a..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/include/locking.h +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT license. -#pragma once - -#include - -#ifdef _WINDOWS -#include "windows_slim_lock.h" -#endif - -namespace diskann -{ -#ifdef _WINDOWS -using non_recursive_mutex = windows_exclusive_slim_lock; -using LockGuard = windows_exclusive_slim_lock_guard; -#else -using non_recursive_mutex = std::mutex; -using LockGuard = std::lock_guard; -#endif -} // namespace diskann diff --git a/packages/leann-backend-diskann/third_party/DiskANN/include/logger.h b/packages/leann-backend-diskann/third_party/DiskANN/include/logger.h deleted file mode 100644 index 0b17807..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/include/logger.h +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT license. -#pragma once - -#include -#include -#include "windows_customizations.h" - -#ifdef EXEC_ENV_OLS -#ifndef ENABLE_CUSTOM_LOGGER -#define ENABLE_CUSTOM_LOGGER -#endif // !ENABLE_CUSTOM_LOGGER -#endif // EXEC_ENV_OLS - -namespace diskann -{ -#ifdef ENABLE_CUSTOM_LOGGER -DISKANN_DLLEXPORT extern std::basic_ostream cout; -DISKANN_DLLEXPORT extern std::basic_ostream cerr; -#else -using std::cerr; -using std::cout; -#endif - -enum class DISKANN_DLLEXPORT LogLevel -{ - LL_Info = 0, - LL_Error, - LL_Count -}; - -#ifdef ENABLE_CUSTOM_LOGGER -DISKANN_DLLEXPORT void SetCustomLogger(std::function logger); -#endif -} // namespace diskann diff --git a/packages/leann-backend-diskann/third_party/DiskANN/include/logger_impl.h b/packages/leann-backend-diskann/third_party/DiskANN/include/logger_impl.h deleted file mode 100644 index 03c65e0..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/include/logger_impl.h +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT license. - -#pragma once - -#include -#include - -#include "ann_exception.h" -#include "logger.h" - -namespace diskann -{ -#ifdef ENABLE_CUSTOM_LOGGER -class ANNStreamBuf : public std::basic_streambuf -{ - public: - DISKANN_DLLEXPORT explicit ANNStreamBuf(FILE *fp); - DISKANN_DLLEXPORT ~ANNStreamBuf(); - - DISKANN_DLLEXPORT bool is_open() const - { - return true; // because stdout and stderr are always open. - } - DISKANN_DLLEXPORT void close(); - DISKANN_DLLEXPORT virtual int underflow(); - DISKANN_DLLEXPORT virtual int overflow(int c); - DISKANN_DLLEXPORT virtual int sync(); - - private: - FILE *_fp; - char *_buf; - int _bufIndex; - std::mutex _mutex; - LogLevel _logLevel; - - int flush(); - void logImpl(char *str, int numchars); - - // Why the two buffer-sizes? If we are running normally, we are basically - // interacting with a character output system, so we short-circuit the - // output process by keeping an empty buffer and writing each character - // to stdout/stderr. But if we are running in OLS, we have to take all - // the text that is written to diskann::cout/diskann:cerr, consolidate it - // and push it out in one-shot, because the OLS infra does not give us - // character based output. Therefore, we use a larger buffer that is large - // enough to store the longest message, and continuously add characters - // to it. When the calling code outputs a std::endl or std::flush, sync() - // will be called and will output a log level, component name, and the text - // that has been collected. (sync() is also called if the buffer is full, so - // overflows/missing text are not a concern). - // This implies calling code _must_ either print std::endl or std::flush - // to ensure that the message is written immediately. - - static const int BUFFER_SIZE = 1024; - - ANNStreamBuf(const ANNStreamBuf &); - ANNStreamBuf &operator=(const ANNStreamBuf &); -}; -#endif -} // namespace diskann diff --git a/packages/leann-backend-diskann/third_party/DiskANN/include/math_utils.h b/packages/leann-backend-diskann/third_party/DiskANN/include/math_utils.h deleted file mode 100644 index 83d189f..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/include/math_utils.h +++ /dev/null @@ -1,87 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT license. - -#pragma once - -#include "common_includes.h" -#include "utils.h" - -namespace math_utils -{ - -float calc_distance(float *vec_1, float *vec_2, size_t dim); - -// compute l2-squared norms of data stored in row major num_points * dim, -// needs -// to be pre-allocated -void compute_vecs_l2sq(float *vecs_l2sq, float *data, const size_t num_points, const size_t dim); - -void rotate_data_randomly(float *data, size_t num_points, size_t dim, float *rot_mat, float *&new_mat, - bool transpose_rot = false); - -// calculate closest center to data of num_points * dim (row major) -// centers is num_centers * dim (row major) -// data_l2sq has pre-computed squared norms of data -// centers_l2sq has pre-computed squared norms of centers -// pre-allocated center_index will contain id of k nearest centers -// pre-allocated dist_matrix shound be num_points * num_centers and contain -// squared distances - -// Ideally used only by compute_closest_centers -void compute_closest_centers_in_block(const float *const data, const size_t num_points, const size_t dim, - const float *const centers, const size_t num_centers, - const float *const docs_l2sq, const float *const centers_l2sq, - uint32_t *center_index, float *const dist_matrix, size_t k = 1); - -// Given data in num_points * new_dim row major -// Pivots stored in full_pivot_data as k * new_dim row major -// Calculate the closest pivot for each point and store it in vector -// closest_centers_ivf (which needs to be allocated outside) -// Additionally, if inverted index is not null (and pre-allocated), it will -// return inverted index for each center Additionally, if pts_norms_squared is -// not null, then it will assume that point norms are pre-computed and use -// those -// values - -void compute_closest_centers(float *data, size_t num_points, size_t dim, float *pivot_data, size_t num_centers, - size_t k, uint32_t *closest_centers_ivf, std::vector *inverted_index = NULL, - float *pts_norms_squared = NULL); - -// if to_subtract is 1, will subtract nearest center from each row. Else will -// add. Output will be in data_load iself. -// Nearest centers need to be provided in closst_centers. - -void process_residuals(float *data_load, size_t num_points, size_t dim, float *cur_pivot_data, size_t num_centers, - uint32_t *closest_centers, bool to_subtract); - -} // namespace math_utils - -namespace kmeans -{ - -// run Lloyds one iteration -// Given data in row major num_points * dim, and centers in row major -// num_centers * dim -// And squared lengths of data points, output the closest center to each data -// point, update centers, and also return inverted index. -// If closest_centers == NULL, will allocate memory and return. -// Similarly, if closest_docs == NULL, will allocate memory and return. - -float lloyds_iter(float *data, size_t num_points, size_t dim, float *centers, size_t num_centers, float *docs_l2sq, - std::vector *closest_docs, uint32_t *&closest_center); - -// Run Lloyds until max_reps or stopping criterion -// If you pass NULL for closest_docs and closest_center, it will NOT return -// the results, else it will assume appriate allocation as closest_docs = new -// vector [num_centers], and closest_center = new size_t[num_points] -// Final centers are output in centers as row major num_centers * dim -// -float run_lloyds(float *data, size_t num_points, size_t dim, float *centers, const size_t num_centers, - const size_t max_reps, std::vector *closest_docs, uint32_t *closest_center); - -// assumes already memory allocated for pivot_data as new -// float[num_centers*dim] and select randomly num_centers points as pivots -void selecting_pivots(float *data, size_t num_points, size_t dim, float *pivot_data, size_t num_centers); - -void kmeanspp_selecting_pivots(float *data, size_t num_points, size_t dim, float *pivot_data, size_t num_centers); -} // namespace kmeans diff --git a/packages/leann-backend-diskann/third_party/DiskANN/include/memory_mapper.h b/packages/leann-backend-diskann/third_party/DiskANN/include/memory_mapper.h deleted file mode 100644 index 75faca1..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/include/memory_mapper.h +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT license. - -#pragma once - -#ifndef _WINDOWS -#include -#include -#include -#include -#include - -#else -#include -#endif -#include - -namespace diskann -{ -class MemoryMapper -{ - private: -#ifndef _WINDOWS - int _fd; -#else - HANDLE _bareFile; - HANDLE _fd; - -#endif - char *_buf; - size_t _fileSize; - const char *_fileName; - - public: - MemoryMapper(const char *filename); - MemoryMapper(const std::string &filename); - - char *getBuf(); - size_t getFileSize(); - - ~MemoryMapper(); -}; -} // namespace diskann diff --git a/packages/leann-backend-diskann/third_party/DiskANN/include/natural_number_map.h b/packages/leann-backend-diskann/third_party/DiskANN/include/natural_number_map.h deleted file mode 100644 index e846882..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/include/natural_number_map.h +++ /dev/null @@ -1,86 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT license. - -#pragma once - -#include -#include -#include - -#include - -namespace diskann -{ -// A map whose key is a natural number (from 0 onwards) and maps to a value. -// Made as both memory and performance efficient map for scenario such as -// DiskANN location-to-tag map. There, the pool of numbers is consecutive from -// zero to some max value, and it's expected that most if not all keys from 0 -// up to some current maximum will be present in the map. The memory usage of -// the map is determined by the largest inserted key since it uses vector as a -// backing store and bitset for presence indication. -// -// Thread-safety: this class is not thread-safe in general. -// Exception: multiple read-only operations are safe on the object only if -// there are no writers to it in parallel. -template class natural_number_map -{ - public: - static_assert(std::is_trivial::value, "Key must be a trivial type"); - - // Represents a reference to a element in the map. Used while iterating - // over map entries. - struct position - { - size_t _key; - // The number of keys that were enumerated when iterating through the - // map so far. Used to early-terminate enumeration when ithere are no - // more entries in the map. - size_t _keys_already_enumerated; - - // Returns whether it's valid to access the element at this position in - // the map. - bool is_valid() const; - }; - - natural_number_map(); - - void reserve(size_t count); - size_t size() const; - - void set(Key key, Value value); - void erase(Key key); - - bool contains(Key key) const; - bool try_get(Key key, Value &value) const; - - // Returns the value at the specified position. Prerequisite: position is - // valid. - Value get(const position &pos) const; - - // Finds the first element in the map, if any. Invalidated by changes in the - // map. - position find_first() const; - - // Finds the next element in the map after the specified position. - // Invalidated by changes in the map. - position find_next(const position &after_position) const; - - void clear(); - - private: - // Number of entries in the map. Not the same as size() of the - // _values_vector below. - size_t _size; - - // Array of values. The key is the index of the value. - std::vector _values_vector; - - // Values that are in the set have the corresponding bit index set - // to 1. - // - // Use a pointer here to allow for forward declaration of dynamic_bitset - // in public headers to avoid making boost a dependency for clients - // of DiskANN. - std::unique_ptr> _values_bitset; -}; -} // namespace diskann diff --git a/packages/leann-backend-diskann/third_party/DiskANN/include/natural_number_set.h b/packages/leann-backend-diskann/third_party/DiskANN/include/natural_number_set.h deleted file mode 100644 index ec5b827..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/include/natural_number_set.h +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT license. - -#pragma once - -#include -#include - -#include "boost_dynamic_bitset_fwd.h" - -namespace diskann -{ -// A set of natural numbers (from 0 onwards). Made for scenario where the -// pool of numbers is consecutive from zero to some max value and very -// efficient methods for "add to set", "get any value from set", "is in set" -// are needed. The memory usage of the set is determined by the largest -// number of inserted entries (uses a vector as a backing store) as well as -// the largest value to be placed in it (uses bitset as well). -// -// Thread-safety: this class is not thread-safe in general. -// Exception: multiple read-only operations (e.g. is_in_set, empty, size) are -// safe on the object only if there are no writers to it in parallel. -template class natural_number_set -{ - public: - static_assert(std::is_trivial::value, "Identifier must be a trivial type"); - - natural_number_set(); - - bool is_empty() const; - void reserve(size_t count); - void insert(T id); - T pop_any(); - void clear(); - size_t size() const; - bool is_in_set(T id) const; - - private: - // Values that are currently in set. - std::vector _values_vector; - - // Values that are in the set have the corresponding bit index set - // to 1. - // - // Use a pointer here to allow for forward declaration of dynamic_bitset - // in public headers to avoid making boost a dependency for clients - // of DiskANN. - std::unique_ptr> _values_bitset; -}; -} // namespace diskann diff --git a/packages/leann-backend-diskann/third_party/DiskANN/include/neighbor.h b/packages/leann-backend-diskann/third_party/DiskANN/include/neighbor.h deleted file mode 100644 index d7c0c25..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/include/neighbor.h +++ /dev/null @@ -1,152 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT license. - -#pragma once - -#include -#include -#include -#include "utils.h" - -namespace diskann -{ - -struct Neighbor -{ - unsigned id; - float distance; - bool expanded; - - Neighbor() = default; - - Neighbor(unsigned id, float distance) : id{id}, distance{distance}, expanded(false) - { - } - - inline bool operator<(const Neighbor &other) const - { - return distance < other.distance || (distance == other.distance && id < other.id); - } - - inline bool operator==(const Neighbor &other) const - { - return (id == other.id); - } -}; - -// Invariant: after every `insert` and `closest_unexpanded()`, `_cur` points to -// the first Neighbor which is unexpanded. -class NeighborPriorityQueue -{ - public: - NeighborPriorityQueue() : _size(0), _capacity(0), _cur(0) - { - } - - explicit NeighborPriorityQueue(size_t capacity) : _size(0), _capacity(capacity), _cur(0), _data(capacity + 1) - { - } - - // Inserts the item ordered into the set up to the sets capacity. - // The item will be dropped if it is the same id as an exiting - // set item or it has a greated distance than the final - // item in the set. The set cursor that is used to pop() the - // next item will be set to the lowest index of an uncheck item - void insert(const Neighbor &nbr) - { - if (_size == _capacity && _data[_size - 1] < nbr) - { - return; - } - - size_t lo = 0, hi = _size; - while (lo < hi) - { - size_t mid = (lo + hi) >> 1; - if (nbr < _data[mid]) - { - hi = mid; - // Make sure the same id isn't inserted into the set - } - else if (_data[mid].id == nbr.id) - { - return; - } - else - { - lo = mid + 1; - } - } - - if (lo < _capacity) - { - std::memmove(&_data[lo + 1], &_data[lo], (_size - lo) * sizeof(Neighbor)); - } - _data[lo] = {nbr.id, nbr.distance}; - if (_size < _capacity) - { - _size++; - } - if (lo < _cur) - { - _cur = lo; - } - } - - Neighbor closest_unexpanded() - { - _data[_cur].expanded = true; - size_t pre = _cur; - while (_cur < _size && _data[_cur].expanded) - { - _cur++; - } - return _data[pre]; - } - - bool has_unexpanded_node() const - { - return _cur < _size; - } - - size_t size() const - { - return _size; - } - - size_t capacity() const - { - return _capacity; - } - - void reserve(size_t capacity) - { - if (capacity + 1 > _data.size()) - { - _data.resize(capacity + 1); - } - _capacity = capacity; - } - - Neighbor &operator[](size_t i) - { - return _data[i]; - } - - Neighbor operator[](size_t i) const - { - return _data[i]; - } - - void clear() - { - _size = 0; - _cur = 0; - } - - private: - size_t _size, _capacity, _cur; - std::vector _data; -}; - -} // namespace diskann diff --git a/packages/leann-backend-diskann/third_party/DiskANN/include/parameters.h b/packages/leann-backend-diskann/third_party/DiskANN/include/parameters.h deleted file mode 100644 index 0206814..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/include/parameters.h +++ /dev/null @@ -1,119 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT license. - -#pragma once -#include -#include -#include - -#include "omp.h" -#include "defaults.h" - -namespace diskann -{ - -class IndexWriteParameters - -{ - public: - const uint32_t search_list_size; // L - const uint32_t max_degree; // R - const bool saturate_graph; - const uint32_t max_occlusion_size; // C - const float alpha; - const uint32_t num_threads; - const uint32_t filter_list_size; // Lf - - IndexWriteParameters(const uint32_t search_list_size, const uint32_t max_degree, const bool saturate_graph, - const uint32_t max_occlusion_size, const float alpha, const uint32_t num_threads, - const uint32_t filter_list_size) - : search_list_size(search_list_size), max_degree(max_degree), saturate_graph(saturate_graph), - max_occlusion_size(max_occlusion_size), alpha(alpha), num_threads(num_threads), - filter_list_size(filter_list_size) - { - } - - friend class IndexWriteParametersBuilder; -}; - -class IndexSearchParams -{ - public: - IndexSearchParams(const uint32_t initial_search_list_size, const uint32_t num_search_threads) - : initial_search_list_size(initial_search_list_size), num_search_threads(num_search_threads) - { - } - const uint32_t initial_search_list_size; // search L - const uint32_t num_search_threads; // search threads -}; - -class IndexWriteParametersBuilder -{ - /** - * Fluent builder pattern to keep track of the 7 non-default properties - * and their order. The basic ctor was getting unwieldy. - */ - public: - IndexWriteParametersBuilder(const uint32_t search_list_size, // L - const uint32_t max_degree // R - ) - : _search_list_size(search_list_size), _max_degree(max_degree) - { - } - - IndexWriteParametersBuilder &with_max_occlusion_size(const uint32_t max_occlusion_size) - { - _max_occlusion_size = max_occlusion_size; - return *this; - } - - IndexWriteParametersBuilder &with_saturate_graph(const bool saturate_graph) - { - _saturate_graph = saturate_graph; - return *this; - } - - IndexWriteParametersBuilder &with_alpha(const float alpha) - { - _alpha = alpha; - return *this; - } - - IndexWriteParametersBuilder &with_num_threads(const uint32_t num_threads) - { - _num_threads = num_threads == 0 ? omp_get_num_procs() : num_threads; - return *this; - } - - IndexWriteParametersBuilder &with_filter_list_size(const uint32_t filter_list_size) - { - _filter_list_size = filter_list_size == 0 ? _search_list_size : filter_list_size; - return *this; - } - - IndexWriteParameters build() const - { - return IndexWriteParameters(_search_list_size, _max_degree, _saturate_graph, _max_occlusion_size, _alpha, - _num_threads, _filter_list_size); - } - - IndexWriteParametersBuilder(const IndexWriteParameters &wp) - : _search_list_size(wp.search_list_size), _max_degree(wp.max_degree), - _max_occlusion_size(wp.max_occlusion_size), _saturate_graph(wp.saturate_graph), _alpha(wp.alpha), - _filter_list_size(wp.filter_list_size) - { - } - IndexWriteParametersBuilder(const IndexWriteParametersBuilder &) = delete; - IndexWriteParametersBuilder &operator=(const IndexWriteParametersBuilder &) = delete; - - private: - uint32_t _search_list_size{}; - uint32_t _max_degree{}; - uint32_t _max_occlusion_size{defaults::MAX_OCCLUSION_SIZE}; - bool _saturate_graph{defaults::SATURATE_GRAPH}; - float _alpha{defaults::ALPHA}; - uint32_t _num_threads{defaults::NUM_THREADS}; - uint32_t _filter_list_size{defaults::FILTER_LIST_SIZE}; -}; - -} // namespace diskann diff --git a/packages/leann-backend-diskann/third_party/DiskANN/include/partition.h b/packages/leann-backend-diskann/third_party/DiskANN/include/partition.h deleted file mode 100644 index c2c4c76..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/include/partition.h +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT license. - -#pragma once -#include -#include -#include -#include -#include - -#include "neighbor.h" -#include "parameters.h" -#include "tsl/robin_set.h" -#include "utils.h" - -#include "windows_customizations.h" - -template -void gen_random_slice(const std::string base_file, const std::string output_prefix, double sampling_rate); - -template -void gen_random_slice(const std::string data_file, double p_val, float *&sampled_data, size_t &slice_size, - size_t &ndims); - -template -void gen_random_slice(const T *inputdata, size_t npts, size_t ndims, double p_val, float *&sampled_data, - size_t &slice_size); - -int estimate_cluster_sizes(float *test_data_float, size_t num_test, float *pivots, const size_t num_centers, - const size_t dim, const size_t k_base, std::vector &cluster_sizes); - -template -int shard_data_into_clusters(const std::string data_file, float *pivots, const size_t num_centers, const size_t dim, - const size_t k_base, std::string prefix_path); - -template -int shard_data_into_clusters_only_ids(const std::string data_file, float *pivots, const size_t num_centers, - const size_t dim, const size_t k_base, std::string prefix_path); - -template -int retrieve_shard_data_from_ids(const std::string data_file, std::string idmap_filename, std::string data_filename); - -template -int partition(const std::string data_file, const float sampling_rate, size_t num_centers, size_t max_k_means_reps, - const std::string prefix_path, size_t k_base); - -template -int partition_with_ram_budget(const std::string data_file, const double sampling_rate, double ram_budget, - size_t graph_degree, const std::string prefix_path, size_t k_base); diff --git a/packages/leann-backend-diskann/third_party/DiskANN/include/percentile_stats.h b/packages/leann-backend-diskann/third_party/DiskANN/include/percentile_stats.h deleted file mode 100644 index 7932575..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/include/percentile_stats.h +++ /dev/null @@ -1,65 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT license. - -#pragma once - -#include -#include -#include -#include -#ifdef _WINDOWS -#include -#endif -#include -#include - -#include "distance.h" -#include "parameters.h" - -namespace diskann -{ -struct QueryStats -{ - float total_us = 0; // total time to process query in micros - float io_us = 0; // total time spent in IO - float cpu_us = 0; // total time spent in CPU - - unsigned n_4k = 0; // # of 4kB reads - unsigned n_8k = 0; // # of 8kB reads - unsigned n_12k = 0; // # of 12kB reads - unsigned n_ios = 0; // total # of IOs issued - unsigned read_size = 0; // total # of bytes read - unsigned n_cmps_saved = 0; // # cmps saved - unsigned n_cmps = 0; // # cmps - unsigned n_cache_hits = 0; // # cache_hits - unsigned n_hops = 0; // # search hops -}; - -template -inline T get_percentile_stats(QueryStats *stats, uint64_t len, float percentile, - const std::function &member_fn) -{ - std::vector vals(len); - for (uint64_t i = 0; i < len; i++) - { - vals[i] = member_fn(stats[i]); - } - - std::sort(vals.begin(), vals.end(), [](const T &left, const T &right) { return left < right; }); - - auto retval = vals[(uint64_t)(percentile * len)]; - vals.clear(); - return retval; -} - -template -inline double get_mean_stats(QueryStats *stats, uint64_t len, const std::function &member_fn) -{ - double avg = 0; - for (uint64_t i = 0; i < len; i++) - { - avg += (double)member_fn(stats[i]); - } - return avg / len; -} -} // namespace diskann diff --git a/packages/leann-backend-diskann/third_party/DiskANN/include/pq.h b/packages/leann-backend-diskann/third_party/DiskANN/include/pq.h deleted file mode 100644 index 3e6119f..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/include/pq.h +++ /dev/null @@ -1,93 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT license. - -#pragma once - -#include "utils.h" -#include "pq_common.h" - -namespace diskann -{ -class FixedChunkPQTable -{ - float *tables = nullptr; // pq_tables = float array of size [256 * ndims] - uint64_t ndims = 0; // ndims = true dimension of vectors - uint64_t n_chunks = 0; - bool use_rotation = false; - uint32_t *chunk_offsets = nullptr; - float *centroid = nullptr; - float *tables_tr = nullptr; // same as pq_tables, but col-major - float *rotmat_tr = nullptr; - - public: - FixedChunkPQTable(); - - virtual ~FixedChunkPQTable(); - -#ifdef EXEC_ENV_OLS - void load_pq_centroid_bin(MemoryMappedFiles &files, const char *pq_table_file, size_t num_chunks); -#else - void load_pq_centroid_bin(const char *pq_table_file, size_t num_chunks); -#endif - - uint32_t get_num_chunks(); - - void preprocess_query(float *query_vec); - - // assumes pre-processed query - void populate_chunk_distances(const float *query_vec, float *dist_vec); - - float l2_distance(const float *query_vec, uint8_t *base_vec); - - float inner_product(const float *query_vec, uint8_t *base_vec); - - // assumes no rotation is involved - void inflate_vector(uint8_t *base_vec, float *out_vec); - - void populate_chunk_inner_products(const float *query_vec, float *dist_vec); -}; - -void aggregate_coords(const std::vector &ids, const uint8_t *all_coords, const uint64_t ndims, uint8_t *out); - -void pq_dist_lookup(const uint8_t *pq_ids, const size_t n_pts, const size_t pq_nchunks, const float *pq_dists, - std::vector &dists_out); - -// Need to replace calls to these with calls to vector& based functions above -void aggregate_coords(const unsigned *ids, const uint64_t n_ids, const uint8_t *all_coords, const uint64_t ndims, - uint8_t *out); - -void pq_dist_lookup(const uint8_t *pq_ids, const size_t n_pts, const size_t pq_nchunks, const float *pq_dists, - float *dists_out); - -DISKANN_DLLEXPORT int generate_pq_pivots(const float *const train_data, size_t num_train, unsigned dim, - unsigned num_centers, unsigned num_pq_chunks, unsigned max_k_means_reps, - std::string pq_pivots_path, bool make_zero_mean = false); - -DISKANN_DLLEXPORT int generate_opq_pivots(const float *train_data, size_t num_train, unsigned dim, unsigned num_centers, - unsigned num_pq_chunks, std::string opq_pivots_path, - bool make_zero_mean = false); - -DISKANN_DLLEXPORT int generate_pq_pivots_simplified(const float *train_data, size_t num_train, size_t dim, - size_t num_pq_chunks, std::vector &pivot_data_vector); - -template -int generate_pq_data_from_pivots(const std::string &data_file, unsigned num_centers, unsigned num_pq_chunks, - const std::string &pq_pivots_path, const std::string &pq_compressed_vectors_path, - bool use_opq = false); - -DISKANN_DLLEXPORT int generate_pq_data_from_pivots_simplified(const float *data, const size_t num, - const float *pivot_data, const size_t pivots_num, - const size_t dim, const size_t num_pq_chunks, - std::vector &pq); - -template -void generate_disk_quantized_data(const std::string &data_file_to_use, const std::string &disk_pq_pivots_path, - const std::string &disk_pq_compressed_vectors_path, - const diskann::Metric compareMetric, const double p_val, size_t &disk_pq_dims); - -template -void generate_quantized_data(const std::string &data_file_to_use, const std::string &pq_pivots_path, - const std::string &pq_compressed_vectors_path, const diskann::Metric compareMetric, - const double p_val, const uint64_t num_pq_chunks, const bool use_opq, - const std::string &codebook_prefix = ""); -} // namespace diskann diff --git a/packages/leann-backend-diskann/third_party/DiskANN/include/pq_common.h b/packages/leann-backend-diskann/third_party/DiskANN/include/pq_common.h deleted file mode 100644 index c6a3a57..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/include/pq_common.h +++ /dev/null @@ -1,30 +0,0 @@ -#pragma once - -#include -#include - -#define NUM_PQ_BITS 8 -#define NUM_PQ_CENTROIDS (1 << NUM_PQ_BITS) -#define MAX_OPQ_ITERS 20 -#define NUM_KMEANS_REPS_PQ 12 -#define MAX_PQ_TRAINING_SET_SIZE 256000 -#define MAX_PQ_CHUNKS 512 - -namespace diskann -{ -inline std::string get_quantized_vectors_filename(const std::string &prefix, bool use_opq, uint32_t num_chunks) -{ - return prefix + (use_opq ? "_opq" : "pq") + std::to_string(num_chunks) + "_compressed.bin"; -} - -inline std::string get_pivot_data_filename(const std::string &prefix, bool use_opq, uint32_t num_chunks) -{ - return prefix + (use_opq ? "_opq" : "pq") + std::to_string(num_chunks) + "_pivots.bin"; -} - -inline std::string get_rotation_matrix_suffix(const std::string &pivot_data_filename) -{ - return pivot_data_filename + "_rotation_matrix.bin"; -} - -} // namespace diskann diff --git a/packages/leann-backend-diskann/third_party/DiskANN/include/pq_data_store.h b/packages/leann-backend-diskann/third_party/DiskANN/include/pq_data_store.h deleted file mode 100644 index 7c0cb5f..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/include/pq_data_store.h +++ /dev/null @@ -1,97 +0,0 @@ -#pragma once -#include -#include "distance.h" -#include "quantized_distance.h" -#include "pq.h" -#include "abstract_data_store.h" - -namespace diskann -{ -// REFACTOR TODO: By default, the PQDataStore is an in-memory datastore because both Vamana and -// DiskANN treat it the same way. But with DiskPQ, that may need to change. -template class PQDataStore : public AbstractDataStore -{ - - public: - PQDataStore(size_t dim, location_t num_points, size_t num_pq_chunks, std::unique_ptr> distance_fn, - std::unique_ptr> pq_distance_fn); - PQDataStore(const PQDataStore &) = delete; - PQDataStore &operator=(const PQDataStore &) = delete; - ~PQDataStore(); - - // Load quantized vectors from a set of files. Here filename is treated - // as a prefix and the files are assumed to be named with DiskANN - // conventions. - virtual location_t load(const std::string &file_prefix) override; - - // Save quantized vectors to a set of files whose names start with - // file_prefix. - // Currently, the plan is to save the quantized vectors to the quantized - // vectors file. - virtual size_t save(const std::string &file_prefix, const location_t num_points) override; - - // Since base class function is pure virtual, we need to declare it here, even though alignent concept is not needed - // for Quantized data stores. - virtual size_t get_aligned_dim() const override; - - // Populate quantized data from unaligned data using PQ functionality - virtual void populate_data(const data_t *vectors, const location_t num_pts) override; - virtual void populate_data(const std::string &filename, const size_t offset) override; - - virtual void extract_data_to_bin(const std::string &filename, const location_t num_pts) override; - - virtual void get_vector(const location_t i, data_t *target) const override; - virtual void set_vector(const location_t i, const data_t *const vector) override; - virtual void prefetch_vector(const location_t loc) override; - - virtual void move_vectors(const location_t old_location_start, const location_t new_location_start, - const location_t num_points) override; - virtual void copy_vectors(const location_t from_loc, const location_t to_loc, const location_t num_points) override; - - virtual void preprocess_query(const data_t *query, AbstractScratch *scratch) const override; - - virtual float get_distance(const data_t *query, const location_t loc) const override; - virtual float get_distance(const location_t loc1, const location_t loc2) const override; - - // NOTE: Caller must invoke "PQDistance->preprocess_query" ONCE before calling - // this function. - virtual void get_distance(const data_t *preprocessed_query, const location_t *locations, - const uint32_t location_count, float *distances, - AbstractScratch *scratch_space) const override; - - // NOTE: Caller must invoke "PQDistance->preprocess_query" ONCE before calling - // this function. - virtual void get_distance(const data_t *preprocessed_query, const std::vector &ids, - std::vector &distances, AbstractScratch *scratch_space) const override; - - // We are returning the distance function that is used for full precision - // vectors here, not the PQ distance function. This is because the callers - // all are expecting a Distance not QuantizedDistance. - virtual Distance *get_dist_fn() const override; - - virtual location_t calculate_medoid() const override; - - virtual size_t get_alignment_factor() const override; - - protected: - virtual location_t expand(const location_t new_size) override; - virtual location_t shrink(const location_t new_size) override; - - virtual location_t load_impl(const std::string &filename); -#ifdef EXEC_ENV_OLS - virtual location_t load_impl(AlignedFileReader &reader); -#endif - - private: - uint8_t *_quantized_data = nullptr; - size_t _num_chunks = 0; - - // REFACTOR TODO: Doing this temporarily before refactoring OPQ into - // its own class. Remove later. - bool _use_opq = false; - - Metric _distance_metric; - std::unique_ptr> _distance_fn = nullptr; - std::unique_ptr> _pq_distance_fn = nullptr; -}; -} // namespace diskann diff --git a/packages/leann-backend-diskann/third_party/DiskANN/include/pq_flash_index.h b/packages/leann-backend-diskann/third_party/DiskANN/include/pq_flash_index.h deleted file mode 100644 index 174df5c..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/include/pq_flash_index.h +++ /dev/null @@ -1,286 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT license. - -#pragma once -#include "common_includes.h" - -#include "aligned_file_reader.h" -#include "concurrent_queue.h" -#include "neighbor.h" -#include "parameters.h" -#include "percentile_stats.h" -#include "pq.h" -#include "utils.h" -#include "windows_customizations.h" -#include "scratch.h" -#include "tsl/robin_map.h" -#include "tsl/robin_set.h" - -#define FULL_PRECISION_REORDER_MULTIPLIER 3 - -namespace diskann -{ - -template class PQFlashIndex -{ - public: - DISKANN_DLLEXPORT PQFlashIndex(std::shared_ptr &fileReader, - std::shared_ptr &graphReader, - diskann::Metric metric = diskann::Metric::L2); - DISKANN_DLLEXPORT ~PQFlashIndex(); - -#ifdef EXEC_ENV_OLS - DISKANN_DLLEXPORT int load(diskann::MemoryMappedFiles &files, uint32_t num_threads, const char *index_prefix, - const char *pq_prefix = nullptr); -#else - // load compressed data, and obtains the handle to the disk-resident index - DISKANN_DLLEXPORT int load(uint32_t num_threads, const char *index_prefix, const char *pq_prefix = nullptr, - const char *partition_prefix = nullptr); -#endif - -#ifdef EXEC_ENV_OLS - DISKANN_DLLEXPORT int load_from_separate_paths(diskann::MemoryMappedFiles &files, uint32_t num_threads, - const char *index_filepath, const char *pivots_filepath, - const char *compressed_filepath, const char *graph_file); -#else - DISKANN_DLLEXPORT int load_from_separate_paths(uint32_t num_threads, const char *index_filepath, - const char *pivots_filepath, const char *compressed_filepath, - const char *graph_file, const char *partition_file); -#endif - - DISKANN_DLLEXPORT void load_cache_list(std::vector &node_list); - -#ifdef EXEC_ENV_OLS - DISKANN_DLLEXPORT void generate_cache_list_from_sample_queries(MemoryMappedFiles &files, std::string sample_bin, - uint64_t l_search, uint64_t beamwidth, - uint64_t num_nodes_to_cache, uint32_t nthreads, - std::vector &node_list); -#else - DISKANN_DLLEXPORT void generate_cache_list_from_sample_queries(std::string sample_bin, uint64_t l_search, - uint64_t beamwidth, uint64_t num_nodes_to_cache, - uint32_t num_threads, - std::vector &node_list); -#endif - - DISKANN_DLLEXPORT void cache_bfs_levels(uint64_t num_nodes_to_cache, std::vector &node_list, - const bool shuffle = false); - - DISKANN_DLLEXPORT void cached_beam_search(const T *query, const uint64_t k_search, const uint64_t l_search, - uint64_t *res_ids, float *res_dists, const uint64_t beam_width, - const bool use_reorder_data = false, QueryStats *stats = nullptr, - const bool USE_DEFERRED_FETCH = false, - const bool skip_search_reorder = false, - const bool recompute_beighbor_embeddings = false, - const bool dedup_node_dis = false, float prune_ratio = 0, - const bool batch_recompute = false, bool global_pruning = false); - - DISKANN_DLLEXPORT void cached_beam_search(const T *query, const uint64_t k_search, const uint64_t l_search, - uint64_t *res_ids, float *res_dists, const uint64_t beam_width, - const bool use_filter, const LabelT &filter_label, - const bool use_reorder_data = false, QueryStats *stats = nullptr, - const bool USE_DEFERRED_FETCH = false, - const bool skip_search_reorder = false, - const bool recompute_beighbor_embeddings = false, - const bool dedup_node_dis = false, float prune_ratio = 0, - const bool batch_recompute = false, bool global_pruning = false); - - DISKANN_DLLEXPORT void cached_beam_search(const T *query, const uint64_t k_search, const uint64_t l_search, - uint64_t *res_ids, float *res_dists, const uint64_t beam_width, - const uint32_t io_limit, const bool use_reorder_data = false, - QueryStats *stats = nullptr, const bool USE_DEFERRED_FETCH = false, - const bool skip_search_reorder = false, - const bool recompute_beighbor_embeddings = false, - const bool dedup_node_dis = false, float prune_ratio = 0, - const bool batch_recompute = false, bool global_pruning = false); - - DISKANN_DLLEXPORT void cached_beam_search(const T *query, const uint64_t k_search, const uint64_t l_search, - uint64_t *res_ids, float *res_dists, const uint64_t beam_width, - const bool use_filter, const LabelT &filter_label, - const uint32_t io_limit, const bool use_reorder_data = false, - QueryStats *stats = nullptr, const bool USE_DEFERRED_FETCH = false, - const bool skip_search_reorder = false, - const bool recompute_beighbor_embeddings = false, - const bool dedup_node_dis = false, float prune_ratio = 0, - const bool batch_recompute = false, bool global_pruning = false); - - DISKANN_DLLEXPORT LabelT get_converted_label(const std::string &filter_label); - - DISKANN_DLLEXPORT uint32_t range_search(const T *query1, const double range, const uint64_t min_l_search, - const uint64_t max_l_search, std::vector &indices, - std::vector &distances, const uint64_t min_beam_width, - QueryStats *stats = nullptr); - - DISKANN_DLLEXPORT uint64_t get_data_dim(); - - std::shared_ptr &reader; - - DISKANN_DLLEXPORT diskann::Metric get_metric(); - - // - // node_ids: input list of node_ids to be read - // coord_buffers: pointers to pre-allocated buffers that coords need to copied to. If null, dont copy. - // nbr_buffers: pre-allocated buffers to copy neighbors into - // - // returns a vector of bool one for each node_id: true if read is success, else false - // - DISKANN_DLLEXPORT std::vector read_nodes(const std::vector &node_ids, - std::vector &coord_buffers, - std::vector> &nbr_buffers); - - DISKANN_DLLEXPORT std::vector get_pq_vector(std::uint64_t vid); - DISKANN_DLLEXPORT uint64_t get_num_points(); - - protected: - DISKANN_DLLEXPORT void use_medoids_data_as_centroids(); - DISKANN_DLLEXPORT void setup_thread_data(uint64_t nthreads, uint64_t visited_reserve = 4096); - - DISKANN_DLLEXPORT void set_universal_label(const LabelT &label); - - private: - DISKANN_DLLEXPORT inline bool point_has_label(uint32_t point_id, LabelT label_id); - std::unordered_map load_label_map(std::basic_istream &infile); - DISKANN_DLLEXPORT void parse_label_file(std::basic_istream &infile, size_t &num_pts_labels); - DISKANN_DLLEXPORT void get_label_file_metadata(const std::string &fileContent, uint32_t &num_pts, - uint32_t &num_total_labels); - DISKANN_DLLEXPORT void generate_random_labels(std::vector &labels, const uint32_t num_labels, - const uint32_t nthreads); - void reset_stream_for_reading(std::basic_istream &infile); - - // sector # on disk where node_id is present with in the graph part - DISKANN_DLLEXPORT uint64_t get_node_sector(uint64_t node_id); - - // ptr to start of the node - DISKANN_DLLEXPORT char *offset_to_node(char *sector_buf, uint64_t node_id); - - // returns region of `node_buf` containing [NNBRS][NBR_ID(uint32_t)] - DISKANN_DLLEXPORT uint32_t *offset_to_node_nhood(char *node_buf); - - // returns region of `node_buf` containing [COORD(T)] - DISKANN_DLLEXPORT T *offset_to_node_coords(char *node_buf); - - DISKANN_DLLEXPORT int load_graph_index(const std::string &graph_index_file); - - DISKANN_DLLEXPORT int read_partition_info(const std::string &partition_bin); - - DISKANN_DLLEXPORT int read_neighbors(const std::string &graph_index_file, uint64_t target_node_id); - - // index info for multi-node sectors - // nhood of node `i` is in sector: [i / nnodes_per_sector] - // offset in sector: [(i % nnodes_per_sector) * max_node_len] - // - // index info for multi-sector nodes - // nhood of node `i` is in sector: [i * DIV_ROUND_UP(_max_node_len, SECTOR_LEN)] - // offset in sector: [0] - // - // Common info - // coords start at ofsset - // #nbrs of node `i`: *(unsigned*) (offset + disk_bytes_per_point) - // nbrs of node `i` : (unsigned*) (offset + disk_bytes_per_point + 1) - - uint64_t _max_node_len = 0; - uint64_t _nnodes_per_sector = 0; // 0 for multi-sector nodes, >0 for multi-node sectors - uint64_t _max_degree = 0; - uint64_t _C = 0; - // Data used for searching with re-order vectors - uint64_t _ndims_reorder_vecs = 0; - uint64_t _reorder_data_start_sector = 0; - uint64_t _nvecs_per_sector = 0; - - diskann::Metric metric = diskann::Metric::L2; - - // used only for inner product search to re-scale the result value - // (due to the pre-processing of base during index build) - float _max_base_norm = 0.0f; - - // data info - uint64_t _num_points = 0; - uint64_t _num_frozen_points = 0; - uint64_t _frozen_location = 0; - uint64_t _data_dim = 0; - uint64_t _aligned_dim = 0; - uint64_t _disk_bytes_per_point = 0; // Number of bytes - - std::string _disk_index_file; - std::vector> _node_visit_counter; - - // PQ data - // _n_chunks = # of chunks ndims is split into - // data: char * _n_chunks - // chunk_size = chunk size of each dimension chunk - // pq_tables = float* [[2^8 * [chunk_size]] * _n_chunks] - uint8_t *data = nullptr; - uint64_t _n_chunks; - FixedChunkPQTable _pq_table; - - // distance comparator - std::shared_ptr> _dist_cmp; - std::shared_ptr> _dist_cmp_float; - - // for very large datasets: we use PQ even for the disk resident index - bool _use_disk_index_pq = false; - uint64_t _disk_pq_n_chunks = 0; - FixedChunkPQTable _disk_pq_table; - - // medoid/start info - - // graph has one entry point by default, - // we can optionally have multiple starting points - uint32_t *_medoids = nullptr; - // defaults to 1 - size_t _num_medoids; - // by default, it is empty. If there are multiple - // centroids, we pick the medoid corresponding to the - // closest centroid as the starting point of search - float *_centroid_data = nullptr; - - // nhood_cache; the uint32_t in nhood_Cache are offsets into nhood_cache_buf - unsigned *_nhood_cache_buf = nullptr; - tsl::robin_map> _nhood_cache; - - // coord_cache; The T* in coord_cache are offsets into coord_cache_buf - T *_coord_cache_buf = nullptr; - tsl::robin_map _coord_cache; - - // thread-specific scratch - ConcurrentQueue *> _thread_data; - uint64_t _max_nthreads; - bool _load_flag = false; - bool _count_visited_nodes = false; - bool _reorder_data_exists = false; - uint64_t _reoreder_data_offset = 0; - - // filter support - uint32_t *_pts_to_label_offsets = nullptr; - uint32_t *_pts_to_label_counts = nullptr; - LabelT *_pts_to_labels = nullptr; - std::unordered_map> _filter_to_medoid_ids; - bool _use_universal_label = false; - LabelT _universal_filter_label; - tsl::robin_set _dummy_pts; - tsl::robin_set _has_dummy_pts; - tsl::robin_map _dummy_to_real_map; - tsl::robin_map> _real_to_dummy_map; - std::unordered_map _label_map; - - private: - bool _use_partition = false; - - std::shared_ptr graph_reader; // Graph file reader - std::string _graph_index_file; // Graph file path - uint64_t _graph_node_len; // Graph node length - uint64_t _emb_node_len; // Embedding node length - - // Partition related data structures - uint64_t _num_partitions; // Number of partitions - std::vector> _graph_partitions; // Partition information - std::vector _id2partition; // ID to partition mapping - -#ifdef EXEC_ENV_OLS - // Set to a larger value than the actual header to accommodate - // any additions we make to the header. This is an outer limit - // on how big the header can be. - static const int HEADER_SIZE = defaults::SECTOR_LEN; - char *getHeaderBytes(); -#endif -}; -} // namespace diskann diff --git a/packages/leann-backend-diskann/third_party/DiskANN/include/pq_l2_distance.h b/packages/leann-backend-diskann/third_party/DiskANN/include/pq_l2_distance.h deleted file mode 100644 index e6fc6e4..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/include/pq_l2_distance.h +++ /dev/null @@ -1,87 +0,0 @@ -#pragma once -#include "quantized_distance.h" - -namespace diskann -{ -template class PQL2Distance : public QuantizedDistance -{ - public: - // REFACTOR TODO: We could take a file prefix here and load the - // PQ pivots file, so that the distance object is initialized - // immediately after construction. But this would not work well - // with our data store concept where the store is created first - // and data populated after. - // REFACTOR TODO: Ideally, we should only read the num_chunks from - // the pivots file. However, we read the pivots file only later, but - // clients can call functions like get__filename without calling - // load_pivot_data. Hence this. The TODO is whether we should check - // that the num_chunks from the file is the same as this one. - - PQL2Distance(uint32_t num_chunks, bool use_opq = false); - - virtual ~PQL2Distance() override; - - virtual bool is_opq() const override; - - virtual std::string get_quantized_vectors_filename(const std::string &prefix) const override; - virtual std::string get_pivot_data_filename(const std::string &prefix) const override; - virtual std::string get_rotation_matrix_suffix(const std::string &pq_pivots_filename) const override; - -#ifdef EXEC_ENV_OLS - virtual void load_pivot_data(MemoryMappedFiles &files, const std::string &pq_table_file, - size_t num_chunks) override; -#else - virtual void load_pivot_data(const std::string &pq_table_file, size_t num_chunks) override; -#endif - - // Number of chunks in the PQ table. Depends on the compression level used. - // Has to be < ndim - virtual uint32_t get_num_chunks() const override; - - // Preprocess the query by computing chunk distances from the query vector to - // various centroids. Since we don't want this class to do scratch management, - // we will take a PQScratch object which can come either from Index class or - // PQFlashIndex class. - virtual void preprocess_query(const data_t *aligned_query, uint32_t original_dim, - PQScratch &pq_scratch) override; - - // Distance function used for graph traversal. This function must be called - // after - // preprocess_query. The reason we do not call preprocess ourselves is because - // that function has to be called once per query, while this function is - // called at each iteration of the graph walk. NOTE: This function expects - // 1. the query to be preprocessed using preprocess_query() - // 2. the scratch object to contain the quantized vectors corresponding to ids - // in aligned_pq_coord_scratch. Done by calling aggregate_coords() - // - virtual void preprocessed_distance(PQScratch &pq_scratch, const uint32_t id_count, - float *dists_out) override; - - // Same as above, but returns the distances in a vector instead of an array. - // Convenience function for index.cpp. - virtual void preprocessed_distance(PQScratch &pq_scratch, const uint32_t n_ids, - std::vector &dists_out) override; - - // Currently this function is required for DiskPQ. However, it too can be - // subsumed under preprocessed_distance if we add the appropriate scratch - // variables to PQScratch and initialize them in - // pq_flash_index.cpp::disk_iterate_to_fixed_point() - virtual float brute_force_distance(const float *query_vec, uint8_t *base_vec) override; - - protected: - // assumes pre-processed query - virtual void prepopulate_chunkwise_distances(const float *query_vec, float *dist_vec); - - // assumes no rotation is involved - // virtual void inflate_vector(uint8_t *base_vec, float *out_vec); - - float *_tables = nullptr; // pq_tables = float array of size [256 * ndims] - uint64_t _ndims = 0; // ndims = true dimension of vectors - uint64_t _num_chunks = 0; - bool _is_opq = false; - uint32_t *_chunk_offsets = nullptr; - float *_centroid = nullptr; - float *_tables_tr = nullptr; // same as pq_tables, but col-major - float *_rotmat_tr = nullptr; -}; -} // namespace diskann diff --git a/packages/leann-backend-diskann/third_party/DiskANN/include/pq_scratch.h b/packages/leann-backend-diskann/third_party/DiskANN/include/pq_scratch.h deleted file mode 100644 index 95f1b13..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/include/pq_scratch.h +++ /dev/null @@ -1,23 +0,0 @@ -#pragma once -#include -#include "pq_common.h" -#include "utils.h" - -namespace diskann -{ - -template class PQScratch -{ - public: - float *aligned_pqtable_dist_scratch = nullptr; // MUST BE AT LEAST [256 * NCHUNKS] - float *aligned_dist_scratch = nullptr; // MUST BE AT LEAST diskann MAX_DEGREE - uint8_t *aligned_pq_coord_scratch = nullptr; // AT LEAST [N_CHUNKS * MAX_DEGREE] - float *rotated_query = nullptr; - float *aligned_query_float = nullptr; - - PQScratch(size_t graph_degree, size_t aligned_dim); - void initialize(size_t dim, const T *query, const float norm = 1.0f); - virtual ~PQScratch(); -}; - -} // namespace diskann \ No newline at end of file diff --git a/packages/leann-backend-diskann/third_party/DiskANN/include/program_options_utils.hpp b/packages/leann-backend-diskann/third_party/DiskANN/include/program_options_utils.hpp deleted file mode 100644 index 2be6059..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/include/program_options_utils.hpp +++ /dev/null @@ -1,81 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT license. - -#pragma once - -#include - -namespace program_options_utils -{ -const std::string make_program_description(const char *executable_name, const char *description) -{ - return std::string("\n") - .append(description) - .append("\n\n") - .append("Usage: ") - .append(executable_name) - .append(" [OPTIONS]"); -} - -// Required parameters -const char *DATA_TYPE_DESCRIPTION = "data type, one of {int8, uint8, float} - float is single precision (32 bit)"; -const char *DISTANCE_FUNCTION_DESCRIPTION = - "distance function {l2, mips, fast_l2, cosine}. 'fast l2' and 'mips' only support data_type float"; -const char *INDEX_PATH_PREFIX_DESCRIPTION = "Path prefix to the index, e.g. '/mnt/data/my_ann_index'"; -const char *RESULT_PATH_DESCRIPTION = - "Path prefix for saving results of the queries, e.g. '/mnt/data/query_file_X.bin'"; -const char *QUERY_FILE_DESCRIPTION = "Query file in binary format, e.g. '/mnt/data/query_file_X.bin'"; -const char *NUMBER_OF_RESULTS_DESCRIPTION = "Number of neighbors to be returned (K in the DiskANN white paper)"; -const char *SEARCH_LIST_DESCRIPTION = - "Size of search list to use. This value is the number of neighbor/distance pairs to keep in memory at the same " - "time while performing a query. This can also be described as the size of the working set at query time. This " - "must be greater than or equal to the number of results/neighbors to return (K in the white paper). Corresponds " - "to L in the DiskANN white paper."; -const char *INPUT_DATA_PATH = "Input data file in bin format. This is the file you want to build the index over. " - "File format: Shape of the vector followed by the vector of embeddings as binary data."; - -// Optional parameters -const char *FILTER_LABEL_DESCRIPTION = - "Filter to use when running a query. 'filter_label' and 'query_filters_file' are mutually exclusive."; -const char *FILTERS_FILE_DESCRIPTION = - "Filter file for Queries for Filtered Search. File format is text with one filter per line. File must " - "have exactly one filter OR the same number of filters as there are queries in the 'query_file'."; -const char *LABEL_TYPE_DESCRIPTION = - "Storage type of Labels {uint/uint32, ushort/uint16}, default value is uint which will consume memory 4 bytes per " - "filter. 'uint' is an alias for 'uint32' and 'ushort' is an alias for 'uint16'."; -const char *GROUND_TRUTH_FILE_DESCRIPTION = - "ground truth file for the queryset"; // what's the format, what's the requirements? does it need to include an - // entry for every item or just a small subset? I have so many questions about - // this file -const char *NUMBER_THREADS_DESCRIPTION = "Number of threads used for building index. Defaults to number of logical " - "processor cores on your this machine returned by omp_get_num_procs()"; -const char *FAIL_IF_RECALL_BELOW = - "Value between 0 (inclusive) and 100 (exclusive) indicating the recall tolerance percentage threshold before " - "program fails with a non-zero exit code. The default value of 0 means that the program will complete " - "successfully with any recall value. A non-zero value indicates the floor for acceptable recall values. If the " - "calculated recall value is below this threshold then the program will write out the results but return a non-zero " - "exit code as a signal that the recall was not acceptable."; // does it continue running or die immediately? Will I - // still get my results even if the return code is -1? - -const char *NUMBER_OF_NODES_TO_CACHE = "Number of BFS nodes around medoid(s) to cache. Default value: 0"; -const char *BEAMWIDTH = "Beamwidth for search. Set 0 to optimize internally. Default value: 2"; -const char *MAX_BUILD_DEGREE = "Maximum graph degree"; -const char *GRAPH_BUILD_COMPLEXITY = - "Size of the search working set during build time. This is the numer of neighbor/distance pairs to keep in memory " - "while building the index. Higher value results in a higher quality graph but it will take more time to build the " - "graph."; -const char *GRAPH_BUILD_ALPHA = "Alpha controls density and diameter of graph, set 1 for sparse graph, 1.2 or 1.4 for " - "denser graphs with lower diameter"; -const char *BUIlD_GRAPH_PQ_BYTES = "Number of PQ bytes to build the index; 0 for full precision build"; -const char *USE_OPQ = "Use Optimized Product Quantization (OPQ)."; -const char *LABEL_FILE = "Input label file in txt format for Filtered Index build. The file should contain comma " - "separated filters for each node with each line corresponding to a graph node"; -const char *UNIVERSAL_LABEL = - "Universal label, Use only in conjunction with label file for filtered index build. If a " - "graph node has all the labels against it, we can assign a special universal filter to the " - "point instead of comma separated filters for that point. The universal label should be assigned to nodes " - "in the labels file instead of listing all labels for a node. DiskANN will not automatically assign a " - "universal label to a node."; -const char *FILTERED_LBUILD = "Build complexity for filtered points, higher value results in better graphs"; - -} // namespace program_options_utils diff --git a/packages/leann-backend-diskann/third_party/DiskANN/include/proto_embedding.h b/packages/leann-backend-diskann/third_party/DiskANN/include/proto_embedding.h deleted file mode 100644 index f17e225..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/include/proto_embedding.h +++ /dev/null @@ -1,9 +0,0 @@ -#pragma once - -#include "embedding.pb.h" - -// This header ensures that the protobuf files are included correctly -// and provides a namespace alias for convenience -namespace diskann { - namespace proto = protoembedding; -} diff --git a/packages/leann-backend-diskann/third_party/DiskANN/include/quantized_distance.h b/packages/leann-backend-diskann/third_party/DiskANN/include/quantized_distance.h deleted file mode 100644 index cc4aea9..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/include/quantized_distance.h +++ /dev/null @@ -1,56 +0,0 @@ -#pragma once -#include -#include -#include -#include "abstract_scratch.h" - -namespace diskann -{ -template class PQScratch; - -template class QuantizedDistance -{ - public: - QuantizedDistance() = default; - QuantizedDistance(const QuantizedDistance &) = delete; - QuantizedDistance &operator=(const QuantizedDistance &) = delete; - virtual ~QuantizedDistance() = default; - - virtual bool is_opq() const = 0; - virtual std::string get_quantized_vectors_filename(const std::string &prefix) const = 0; - virtual std::string get_pivot_data_filename(const std::string &prefix) const = 0; - virtual std::string get_rotation_matrix_suffix(const std::string &pq_pivots_filename) const = 0; - - // Loading the PQ centroid table need not be part of the abstract class. - // However, we want to indicate that this function will change once we have a - // file reader hierarchy, so leave it here as-is. -#ifdef EXEC_ENV_OLS - virtual void load_pivot_data(MemoryMappedFiles &files, const std::String &pq_table_file, size_t num_chunks) = 0; -#else - virtual void load_pivot_data(const std::string &pq_table_file, size_t num_chunks) = 0; -#endif - - // Number of chunks in the PQ table. Depends on the compression level used. - // Has to be < ndim - virtual uint32_t get_num_chunks() const = 0; - - // Preprocess the query by computing chunk distances from the query vector to - // various centroids. Since we don't want this class to do scratch management, - // we will take a PQScratch object which can come either from Index class or - // PQFlashIndex class. - virtual void preprocess_query(const data_t *query_vec, uint32_t query_dim, PQScratch &pq_scratch) = 0; - - // Workhorse - // This function must be called after preprocess_query - virtual void preprocessed_distance(PQScratch &pq_scratch, const uint32_t id_count, float *dists_out) = 0; - - // Same as above, but convenience function for index.cpp. - virtual void preprocessed_distance(PQScratch &pq_scratch, const uint32_t n_ids, - std::vector &dists_out) = 0; - - // Currently this function is required for DiskPQ. However, it too can be subsumed - // under preprocessed_distance if we add the appropriate scratch variables to - // PQScratch and initialize them in pq_flash_index.cpp::disk_iterate_to_fixed_point() - virtual float brute_force_distance(const float *query_vec, uint8_t *base_vec) = 0; -}; -} // namespace diskann diff --git a/packages/leann-backend-diskann/third_party/DiskANN/include/restapi/common.h b/packages/leann-backend-diskann/third_party/DiskANN/include/restapi/common.h deleted file mode 100644 index b833963..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/include/restapi/common.h +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT license. - -#pragma once - -#include -#include - -namespace diskann -{ -// Constants -static const std::string VECTOR_KEY = "query", K_KEY = "k", INDICES_KEY = "indices", DISTANCES_KEY = "distances", - TAGS_KEY = "tags", QUERY_ID_KEY = "query_id", ERROR_MESSAGE_KEY = "error", L_KEY = "Ls", - TIME_TAKEN_KEY = "time_taken_in_us", PARTITION_KEY = "partition", - UNKNOWN_ERROR = "unknown_error"; -const unsigned int DEFAULT_L = 100; - -} // namespace diskann \ No newline at end of file diff --git a/packages/leann-backend-diskann/third_party/DiskANN/include/restapi/search_wrapper.h b/packages/leann-backend-diskann/third_party/DiskANN/include/restapi/search_wrapper.h deleted file mode 100644 index ebd067d..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/include/restapi/search_wrapper.h +++ /dev/null @@ -1,140 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT license. - -#pragma once - -#include -#include -#include - -#include -#include - -namespace diskann -{ -class SearchResult -{ - public: - SearchResult(unsigned int K, unsigned int elapsed_time_in_ms, const unsigned *const indices, - const float *const distances, const std::string *const tags = nullptr, - const unsigned *const partitions = nullptr); - - const std::vector &get_indices() const - { - return _indices; - } - const std::vector &get_distances() const - { - return _distances; - } - bool tags_enabled() const - { - return _tags_enabled; - } - const std::vector &get_tags() const - { - return _tags; - } - bool partitions_enabled() const - { - return _partitions_enabled; - } - const std::vector &get_partitions() const - { - return _partitions; - } - unsigned get_time() const - { - return _search_time_in_ms; - } - - private: - unsigned int _K; - unsigned int _search_time_in_ms; - std::vector _indices; - std::vector _distances; - - bool _tags_enabled; - std::vector _tags; - - bool _partitions_enabled; - std::vector _partitions; -}; - -class SearchNotImplementedException : public std::logic_error -{ - private: - std::string _errormsg; - - public: - SearchNotImplementedException(const char *type) : std::logic_error("Not Implemented") - { - _errormsg = "Search with data type "; - _errormsg += std::string(type); - _errormsg += " not implemented : "; - _errormsg += __FUNCTION__; - } - - virtual const char *what() const throw() - { - return _errormsg.c_str(); - } -}; - -class BaseSearch -{ - public: - BaseSearch(const std::string &tagsFile = nullptr); - virtual SearchResult search(const float *query, const unsigned int dimensions, const unsigned int K, - const unsigned int Ls) - { - throw SearchNotImplementedException("float"); - } - virtual SearchResult search(const int8_t *query, const unsigned int dimensions, const unsigned int K, - const unsigned int Ls) - { - throw SearchNotImplementedException("int8_t"); - } - - virtual SearchResult search(const uint8_t *query, const unsigned int dimensions, const unsigned int K, - const unsigned int Ls) - { - throw SearchNotImplementedException("uint8_t"); - } - - void lookup_tags(const unsigned K, const unsigned *indices, std::string *ret_tags); - - protected: - bool _tags_enabled; - std::vector _tags_str; -}; - -template class InMemorySearch : public BaseSearch -{ - public: - InMemorySearch(const std::string &baseFile, const std::string &indexFile, const std::string &tagsFile, Metric m, - uint32_t num_threads, uint32_t search_l); - virtual ~InMemorySearch(); - - SearchResult search(const T *query, const unsigned int dimensions, const unsigned int K, const unsigned int Ls); - - private: - unsigned int _dimensions, _numPoints; - std::unique_ptr> _index; -}; - -template class PQFlashSearch : public BaseSearch -{ - public: - PQFlashSearch(const std::string &indexPrefix, const unsigned num_nodes_to_cache, const unsigned num_threads, - const std::string &tagsFile, Metric m); - virtual ~PQFlashSearch(); - - SearchResult search(const T *query, const unsigned int dimensions, const unsigned int K, const unsigned int Ls); - - private: - unsigned int _dimensions, _numPoints; - std::unique_ptr> _index; - std::shared_ptr reader; -}; -} // namespace diskann diff --git a/packages/leann-backend-diskann/third_party/DiskANN/include/restapi/server.h b/packages/leann-backend-diskann/third_party/DiskANN/include/restapi/server.h deleted file mode 100644 index 1d75847..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/include/restapi/server.h +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT license. - -#pragma once - -#include -#include - -namespace diskann -{ -class Server -{ - public: - Server(web::uri &url, std::vector> &multi_searcher, - const std::string &typestring); - virtual ~Server(); - - pplx::task open(); - pplx::task close(); - - protected: - template void handle_post(web::http::http_request message); - - template - web::json::value toJsonArray(const std::vector &v, std::function valConverter); - web::json::value prepareResponse(const int64_t &queryId, const int k); - - template - void parseJson(const utility::string_t &body, unsigned int &k, int64_t &queryId, T *&queryVector, - unsigned int &dimensions, unsigned &Ls); - - web::json::value idsToJsonArray(const diskann::SearchResult &result); - web::json::value distancesToJsonArray(const diskann::SearchResult &result); - web::json::value tagsToJsonArray(const diskann::SearchResult &result); - web::json::value partitionsToJsonArray(const diskann::SearchResult &result); - - SearchResult aggregate_results(const unsigned K, const std::vector &results); - - private: - bool _isDebug; - std::unique_ptr _listener; - const bool _multi_search; - std::vector> _multi_searcher; -}; -} // namespace diskann diff --git a/packages/leann-backend-diskann/third_party/DiskANN/include/scratch.h b/packages/leann-backend-diskann/third_party/DiskANN/include/scratch.h deleted file mode 100644 index 2f43e33..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/include/scratch.h +++ /dev/null @@ -1,216 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT license. - -#pragma once - -#include - -#include "boost_dynamic_bitset_fwd.h" -// #include "boost/dynamic_bitset.hpp" -#include "tsl/robin_set.h" -#include "tsl/robin_map.h" -#include "tsl/sparse_map.h" - -#include "aligned_file_reader.h" -#include "abstract_scratch.h" -#include "neighbor.h" -#include "defaults.h" -#include "concurrent_queue.h" - -namespace diskann -{ -template class PQScratch; - -// -// AbstractScratch space for in-memory index based search -// -template class InMemQueryScratch : public AbstractScratch -{ - public: - ~InMemQueryScratch(); - InMemQueryScratch(uint32_t search_l, uint32_t indexing_l, uint32_t r, uint32_t maxc, size_t dim, size_t aligned_dim, - size_t alignment_factor, bool init_pq_scratch = false); - void resize_for_new_L(uint32_t new_search_l); - void clear(); - - inline uint32_t get_L() - { - return _L; - } - inline uint32_t get_R() - { - return _R; - } - inline uint32_t get_maxc() - { - return _maxc; - } - inline T *aligned_query() - { - return this->_aligned_query_T; - } - inline PQScratch *pq_scratch() - { - return this->_pq_scratch; - } - inline std::vector &pool() - { - return _pool; - } - inline NeighborPriorityQueue &best_l_nodes() - { - return _best_l_nodes; - } - inline std::vector &occlude_factor() - { - return _occlude_factor; - } - inline tsl::robin_set &inserted_into_pool_rs() - { - return _inserted_into_pool_rs; - } - inline boost::dynamic_bitset<> &inserted_into_pool_bs() - { - return *_inserted_into_pool_bs; - } - inline std::vector &id_scratch() - { - return _id_scratch; - } - inline std::vector &dist_scratch() - { - return _dist_scratch; - } - inline tsl::robin_set &expanded_nodes_set() - { - return _expanded_nodes_set; - } - inline std::vector &expanded_nodes_vec() - { - return _expanded_nghrs_vec; - } - inline std::vector &occlude_list_output() - { - return _occlude_list_output; - } - - private: - uint32_t _L; - uint32_t _R; - uint32_t _maxc; - - // _pool stores all neighbors explored from best_L_nodes. - // Usually around L+R, but could be higher. - // Initialized to 3L+R for some slack, expands as needed. - std::vector _pool; - - // _best_l_nodes is reserved for storing best L entries - // Underlying storage is L+1 to support inserts - NeighborPriorityQueue _best_l_nodes; - - // _occlude_factor.size() >= pool.size() in occlude_list function - // _pool is clipped to maxc in occlude_list before affecting _occlude_factor - // _occlude_factor is initialized to maxc size - std::vector _occlude_factor; - - // Capacity initialized to 20L - tsl::robin_set _inserted_into_pool_rs; - - // Use a pointer here to allow for forward declaration of dynamic_bitset - // in public headers to avoid making boost a dependency for clients - // of DiskANN. - boost::dynamic_bitset<> *_inserted_into_pool_bs; - - // _id_scratch.size() must be > R*GRAPH_SLACK_FACTOR for iterate_to_fp - std::vector _id_scratch; - - // _dist_scratch must be > R*GRAPH_SLACK_FACTOR for iterate_to_fp - // _dist_scratch should be at least the size of id_scratch - std::vector _dist_scratch; - - // Buffers used in process delete, capacity increases as needed - tsl::robin_set _expanded_nodes_set; - std::vector _expanded_nghrs_vec; - std::vector _occlude_list_output; -}; - -// -// AbstractScratch space for SSD index based search -// - -template class SSDQueryScratch : public AbstractScratch -{ - public: - T *coord_scratch = nullptr; // MUST BE AT LEAST [sizeof(T) * data_dim] - - char *sector_scratch = nullptr; // MUST BE AT LEAST [MAX_N_SECTOR_READS * SECTOR_LEN] - size_t sector_idx = 0; // index of next [SECTOR_LEN] scratch to use - - tsl::robin_set visited; - NeighborPriorityQueue retset; - std::vector full_retset; - - SSDQueryScratch(size_t aligned_dim, size_t visited_reserve); - ~SSDQueryScratch(); - - void reset(); -}; - -template class SSDThreadData -{ - public: - SSDQueryScratch scratch; - IOContext ctx; - - SSDThreadData(size_t aligned_dim, size_t visited_reserve); - void clear(); -}; - -// -// Class to avoid the hassle of pushing and popping the query scratch. -// -template class ScratchStoreManager -{ - public: - ScratchStoreManager(ConcurrentQueue &query_scratch) : _scratch_pool(query_scratch) - { - _scratch = query_scratch.pop(); - while (_scratch == nullptr) - { - query_scratch.wait_for_push_notify(); - _scratch = query_scratch.pop(); - } - } - T *scratch_space() - { - return _scratch; - } - - ~ScratchStoreManager() - { - _scratch->clear(); - _scratch_pool.push(_scratch); - _scratch_pool.push_notify_all(); - } - - void destroy() - { - while (!_scratch_pool.empty()) - { - auto scratch = _scratch_pool.pop(); - while (scratch == nullptr) - { - _scratch_pool.wait_for_push_notify(); - scratch = _scratch_pool.pop(); - } - delete scratch; - } - } - - private: - T *_scratch; - ConcurrentQueue &_scratch_pool; - ScratchStoreManager(const ScratchStoreManager &); - ScratchStoreManager &operator=(const ScratchStoreManager &); -}; -} // namespace diskann diff --git a/packages/leann-backend-diskann/third_party/DiskANN/include/simd_utils.h b/packages/leann-backend-diskann/third_party/DiskANN/include/simd_utils.h deleted file mode 100644 index 4b07369..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/include/simd_utils.h +++ /dev/null @@ -1,106 +0,0 @@ -#pragma once - -#ifdef _WINDOWS -#include -#include -#include -#include -#else -#include -#endif - -namespace diskann -{ -static inline __m256 _mm256_mul_epi8(__m256i X) -{ - __m256i zero = _mm256_setzero_si256(); - - __m256i sign_x = _mm256_cmpgt_epi8(zero, X); - - __m256i xlo = _mm256_unpacklo_epi8(X, sign_x); - __m256i xhi = _mm256_unpackhi_epi8(X, sign_x); - - return _mm256_cvtepi32_ps(_mm256_add_epi32(_mm256_madd_epi16(xlo, xlo), _mm256_madd_epi16(xhi, xhi))); -} - -static inline __m128 _mm_mulhi_epi8(__m128i X) -{ - __m128i zero = _mm_setzero_si128(); - __m128i sign_x = _mm_cmplt_epi8(X, zero); - __m128i xhi = _mm_unpackhi_epi8(X, sign_x); - - return _mm_cvtepi32_ps(_mm_add_epi32(_mm_setzero_si128(), _mm_madd_epi16(xhi, xhi))); -} - -static inline __m128 _mm_mulhi_epi8_shift32(__m128i X) -{ - __m128i zero = _mm_setzero_si128(); - X = _mm_srli_epi64(X, 32); - __m128i sign_x = _mm_cmplt_epi8(X, zero); - __m128i xhi = _mm_unpackhi_epi8(X, sign_x); - - return _mm_cvtepi32_ps(_mm_add_epi32(_mm_setzero_si128(), _mm_madd_epi16(xhi, xhi))); -} -static inline __m128 _mm_mul_epi8(__m128i X, __m128i Y) -{ - __m128i zero = _mm_setzero_si128(); - - __m128i sign_x = _mm_cmplt_epi8(X, zero); - __m128i sign_y = _mm_cmplt_epi8(Y, zero); - - __m128i xlo = _mm_unpacklo_epi8(X, sign_x); - __m128i xhi = _mm_unpackhi_epi8(X, sign_x); - __m128i ylo = _mm_unpacklo_epi8(Y, sign_y); - __m128i yhi = _mm_unpackhi_epi8(Y, sign_y); - - return _mm_cvtepi32_ps(_mm_add_epi32(_mm_madd_epi16(xlo, ylo), _mm_madd_epi16(xhi, yhi))); -} -static inline __m128 _mm_mul_epi8(__m128i X) -{ - __m128i zero = _mm_setzero_si128(); - __m128i sign_x = _mm_cmplt_epi8(X, zero); - __m128i xlo = _mm_unpacklo_epi8(X, sign_x); - __m128i xhi = _mm_unpackhi_epi8(X, sign_x); - - return _mm_cvtepi32_ps(_mm_add_epi32(_mm_madd_epi16(xlo, xlo), _mm_madd_epi16(xhi, xhi))); -} - -static inline __m128 _mm_mul32_pi8(__m128i X, __m128i Y) -{ - __m128i xlo = _mm_cvtepi8_epi16(X), ylo = _mm_cvtepi8_epi16(Y); - return _mm_cvtepi32_ps(_mm_unpacklo_epi32(_mm_madd_epi16(xlo, ylo), _mm_setzero_si128())); -} - -static inline __m256 _mm256_mul_epi8(__m256i X, __m256i Y) -{ - __m256i zero = _mm256_setzero_si256(); - - __m256i sign_x = _mm256_cmpgt_epi8(zero, X); - __m256i sign_y = _mm256_cmpgt_epi8(zero, Y); - - __m256i xlo = _mm256_unpacklo_epi8(X, sign_x); - __m256i xhi = _mm256_unpackhi_epi8(X, sign_x); - __m256i ylo = _mm256_unpacklo_epi8(Y, sign_y); - __m256i yhi = _mm256_unpackhi_epi8(Y, sign_y); - - return _mm256_cvtepi32_ps(_mm256_add_epi32(_mm256_madd_epi16(xlo, ylo), _mm256_madd_epi16(xhi, yhi))); -} - -static inline __m256 _mm256_mul32_pi8(__m128i X, __m128i Y) -{ - __m256i xlo = _mm256_cvtepi8_epi16(X), ylo = _mm256_cvtepi8_epi16(Y); - return _mm256_blend_ps(_mm256_cvtepi32_ps(_mm256_madd_epi16(xlo, ylo)), _mm256_setzero_ps(), 252); -} - -static inline float _mm256_reduce_add_ps(__m256 x) -{ - /* ( x3+x7, x2+x6, x1+x5, x0+x4 ) */ - const __m128 x128 = _mm_add_ps(_mm256_extractf128_ps(x, 1), _mm256_castps256_ps128(x)); - /* ( -, -, x1+x3+x5+x7, x0+x2+x4+x6 ) */ - const __m128 x64 = _mm_add_ps(x128, _mm_movehl_ps(x128, x128)); - /* ( -, -, -, x0+x1+x2+x3+x4+x5+x6+x7 ) */ - const __m128 x32 = _mm_add_ss(x64, _mm_shuffle_ps(x64, x64, 0x55)); - /* Conversion to float is a no-op on x86-64 */ - return _mm_cvtss_f32(x32); -} -} // namespace diskann diff --git a/packages/leann-backend-diskann/third_party/DiskANN/include/tag_uint128.h b/packages/leann-backend-diskann/third_party/DiskANN/include/tag_uint128.h deleted file mode 100644 index 642de31..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/include/tag_uint128.h +++ /dev/null @@ -1,68 +0,0 @@ -#pragma once -#include -#include - -namespace diskann -{ -#pragma pack(push, 1) - -struct tag_uint128 -{ - std::uint64_t _data1 = 0; - std::uint64_t _data2 = 0; - - bool operator==(const tag_uint128 &other) const - { - return _data1 == other._data1 && _data2 == other._data2; - } - - bool operator==(std::uint64_t other) const - { - return _data1 == other && _data2 == 0; - } - - tag_uint128 &operator=(const tag_uint128 &other) - { - _data1 = other._data1; - _data2 = other._data2; - - return *this; - } - - tag_uint128 &operator=(std::uint64_t other) - { - _data1 = other; - _data2 = 0; - - return *this; - } -}; - -#pragma pack(pop) -} // namespace diskann - -namespace std -{ -// Hash 128 input bits down to 64 bits of output. -// This is intended to be a reasonably good hash function. -inline std::uint64_t Hash128to64(const std::uint64_t &low, const std::uint64_t &high) -{ - // Murmur-inspired hashing. - const std::uint64_t kMul = 0x9ddfea08eb382d69ULL; - std::uint64_t a = (low ^ high) * kMul; - a ^= (a >> 47); - std::uint64_t b = (high ^ a) * kMul; - b ^= (b >> 47); - b *= kMul; - return b; -} - -template <> struct hash -{ - size_t operator()(const diskann::tag_uint128 &key) const noexcept - { - return Hash128to64(key._data1, key._data2); // map -0 to 0 - } -}; - -} // namespace std \ No newline at end of file diff --git a/packages/leann-backend-diskann/third_party/DiskANN/include/timer.h b/packages/leann-backend-diskann/third_party/DiskANN/include/timer.h deleted file mode 100644 index 325edf3..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/include/timer.h +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT license. -#pragma once - -#include - -namespace diskann -{ -class Timer -{ - typedef std::chrono::high_resolution_clock _clock; - std::chrono::time_point<_clock> check_point; - - public: - Timer() : check_point(_clock::now()) - { - } - - void reset() - { - check_point = _clock::now(); - } - - long long elapsed() const - { - return std::chrono::duration_cast(_clock::now() - check_point).count(); - } - - float elapsed_seconds() const - { - return (float)elapsed() / 1000000.0f; - } - - std::string elapsed_seconds_for_step(const std::string &step) const - { - return std::string("Time for ") + step + std::string(": ") + std::to_string(elapsed_seconds()) + - std::string(" seconds"); - } -}; -} // namespace diskann diff --git a/packages/leann-backend-diskann/third_party/DiskANN/include/tsl/.clang-format b/packages/leann-backend-diskann/third_party/DiskANN/include/tsl/.clang-format deleted file mode 100644 index 9d15924..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/include/tsl/.clang-format +++ /dev/null @@ -1,2 +0,0 @@ -DisableFormat: true -SortIncludes: false diff --git a/packages/leann-backend-diskann/third_party/DiskANN/include/tsl/robin_growth_policy.h b/packages/leann-backend-diskann/third_party/DiskANN/include/tsl/robin_growth_policy.h deleted file mode 100644 index 6bfa9e5..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/include/tsl/robin_growth_policy.h +++ /dev/null @@ -1,330 +0,0 @@ -/** - * MIT License - * - * Copyright (c) 2017 Tessil - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ -#ifndef TSL_ROBIN_GROWTH_POLICY_H -#define TSL_ROBIN_GROWTH_POLICY_H - - -#include -#include -#include -#include -#include -#include -#include -#include -#include - - -#ifndef tsl_assert -# ifdef TSL_DEBUG -# define tsl_assert(expr) assert(expr) -# else -# define tsl_assert(expr) (static_cast(0)) -# endif -#endif - - -/** - * If exceptions are enabled, throw the exception passed in parameter, otherwise call std::terminate. - */ -#ifndef TSL_THROW_OR_TERMINATE -# if (defined(__cpp_exceptions) || defined(__EXCEPTIONS) || (defined (_MSC_VER) && defined (_CPPUNWIND))) && !defined(TSL_NO_EXCEPTIONS) -# define TSL_THROW_OR_TERMINATE(ex, msg) throw ex(msg) -# else -# ifdef NDEBUG -# define TSL_THROW_OR_TERMINATE(ex, msg) std::terminate() -# else -# include -# define TSL_THROW_OR_TERMINATE(ex, msg) do { std::fprintf(stderr, msg); std::terminate(); } while(0) -# endif -# endif -#endif - - -#ifndef TSL_LIKELY -# if defined(__GNUC__) || defined(__clang__) -# define TSL_LIKELY(exp) (__builtin_expect(!!(exp), true)) -# else -# define TSL_LIKELY(exp) (exp) -# endif -#endif - - -namespace tsl { -namespace rh { - -/** - * Grow the hash table by a factor of GrowthFactor keeping the bucket count to a power of two. It allows - * the table to use a mask operation instead of a modulo operation to map a hash to a bucket. - * - * GrowthFactor must be a power of two >= 2. - */ -template -class power_of_two_growth_policy { -public: - /** - * Called on the hash table creation and on rehash. The number of buckets for the table is passed in parameter. - * This number is a minimum, the policy may update this value with a higher value if needed (but not lower). - * - * If 0 is given, min_bucket_count_in_out must still be 0 after the policy creation and - * bucket_for_hash must always return 0 in this case. - */ - explicit power_of_two_growth_policy(std::size_t& min_bucket_count_in_out) { - if(min_bucket_count_in_out > max_bucket_count()) { - TSL_THROW_OR_TERMINATE(std::length_error, "The hash table exceeds its maxmimum size."); - } - - if(min_bucket_count_in_out > 0) { - min_bucket_count_in_out = round_up_to_power_of_two(min_bucket_count_in_out); - m_mask = min_bucket_count_in_out - 1; - } - else { - m_mask = 0; - } - } - - /** - * Return the bucket [0, bucket_count()) to which the hash belongs. - * If bucket_count() is 0, it must always return 0. - */ - std::size_t bucket_for_hash(std::size_t hash) const noexcept { - return hash & m_mask; - } - - /** - * Return the number of buckets that should be used on next growth. - */ - std::size_t next_bucket_count() const { - if((m_mask + 1) > max_bucket_count() / GrowthFactor) { - TSL_THROW_OR_TERMINATE(std::length_error, "The hash table exceeds its maxmimum size."); - } - - return (m_mask + 1) * GrowthFactor; - } - - /** - * Return the maximum number of buckets supported by the policy. - */ - std::size_t max_bucket_count() const { - // Largest power of two. - return ((std::numeric_limits::max)() / 2) + 1; - } - - /** - * Reset the growth policy as if it was created with a bucket count of 0. - * After a clear, the policy must always return 0 when bucket_for_hash is called. - */ - void clear() noexcept { - m_mask = 0; - } - -private: - static std::size_t round_up_to_power_of_two(std::size_t value) { - if(is_power_of_two(value)) { - return value; - } - - if(value == 0) { - return 1; - } - - --value; - for(std::size_t i = 1; i < sizeof(std::size_t) * CHAR_BIT; i *= 2) { - value |= value >> i; - } - - return value + 1; - } - - static constexpr bool is_power_of_two(std::size_t value) { - return value != 0 && (value & (value - 1)) == 0; - } - -protected: - static_assert(is_power_of_two(GrowthFactor) && GrowthFactor >= 2, "GrowthFactor must be a power of two >= 2."); - - std::size_t m_mask; -}; - - -/** - * Grow the hash table by GrowthFactor::num / GrowthFactor::den and use a modulo to map a hash - * to a bucket. Slower but it can be useful if you want a slower growth. - */ -template> -class mod_growth_policy { -public: - explicit mod_growth_policy(std::size_t& min_bucket_count_in_out) { - if(min_bucket_count_in_out > max_bucket_count()) { - TSL_THROW_OR_TERMINATE(std::length_error, "The hash table exceeds its maxmimum size."); - } - - if(min_bucket_count_in_out > 0) { - m_mod = min_bucket_count_in_out; - } - else { - m_mod = 1; - } - } - - std::size_t bucket_for_hash(std::size_t hash) const noexcept { - return hash % m_mod; - } - - std::size_t next_bucket_count() const { - if(m_mod == max_bucket_count()) { - TSL_THROW_OR_TERMINATE(std::length_error, "The hash table exceeds its maxmimum size."); - } - - const double next_bucket_count = std::ceil(double(m_mod) * REHASH_SIZE_MULTIPLICATION_FACTOR); - if(!std::isnormal(next_bucket_count)) { - TSL_THROW_OR_TERMINATE(std::length_error, "The hash table exceeds its maxmimum size."); - } - - if(next_bucket_count > double(max_bucket_count())) { - return max_bucket_count(); - } - else { - return std::size_t(next_bucket_count); - } - } - - std::size_t max_bucket_count() const { - return MAX_BUCKET_COUNT; - } - - void clear() noexcept { - m_mod = 1; - } - -private: - static constexpr double REHASH_SIZE_MULTIPLICATION_FACTOR = 1.0 * GrowthFactor::num / GrowthFactor::den; - static const std::size_t MAX_BUCKET_COUNT = - std::size_t(double( - (std::numeric_limits::max)() / REHASH_SIZE_MULTIPLICATION_FACTOR - )); - - static_assert(REHASH_SIZE_MULTIPLICATION_FACTOR >= 1.1, "Growth factor should be >= 1.1."); - - std::size_t m_mod; -}; - - - -namespace detail { - -static constexpr const std::array PRIMES = {{ - 1ul, 5ul, 17ul, 29ul, 37ul, 53ul, 67ul, 79ul, 97ul, 131ul, 193ul, 257ul, 389ul, 521ul, 769ul, 1031ul, - 1543ul, 2053ul, 3079ul, 6151ul, 12289ul, 24593ul, 49157ul, 98317ul, 196613ul, 393241ul, 786433ul, - 1572869ul, 3145739ul, 6291469ul, 12582917ul, 25165843ul, 50331653ul, 100663319ul, 201326611ul, - 402653189ul, 805306457ul, 1610612741ul, 3221225473ul, 4294967291ul -}}; - -template -static constexpr std::size_t mod(std::size_t hash) { return hash % PRIMES[IPrime]; } - -// MOD_PRIME[iprime](hash) returns hash % PRIMES[iprime]. This table allows for faster modulo as the -// compiler can optimize the modulo code better with a constant known at the compilation. -static constexpr const std::array MOD_PRIME = {{ - &mod<0>, &mod<1>, &mod<2>, &mod<3>, &mod<4>, &mod<5>, &mod<6>, &mod<7>, &mod<8>, &mod<9>, &mod<10>, - &mod<11>, &mod<12>, &mod<13>, &mod<14>, &mod<15>, &mod<16>, &mod<17>, &mod<18>, &mod<19>, &mod<20>, - &mod<21>, &mod<22>, &mod<23>, &mod<24>, &mod<25>, &mod<26>, &mod<27>, &mod<28>, &mod<29>, &mod<30>, - &mod<31>, &mod<32>, &mod<33>, &mod<34>, &mod<35>, &mod<36>, &mod<37> , &mod<38>, &mod<39> -}}; - -} - -/** - * Grow the hash table by using prime numbers as bucket count. Slower than tsl::rh::power_of_two_growth_policy in - * general but will probably distribute the values around better in the buckets with a poor hash function. - * - * To allow the compiler to optimize the modulo operation, a lookup table is used with constant primes numbers. - * - * With a switch the code would look like: - * \code - * switch(iprime) { // iprime is the current prime of the hash table - * case 0: hash % 5ul; - * break; - * case 1: hash % 17ul; - * break; - * case 2: hash % 29ul; - * break; - * ... - * } - * \endcode - * - * Due to the constant variable in the modulo the compiler is able to optimize the operation - * by a series of multiplications, substractions and shifts. - * - * The 'hash % 5' could become something like 'hash - (hash * 0xCCCCCCCD) >> 34) * 5' in a 64 bits environement. - */ -class prime_growth_policy { -public: - explicit prime_growth_policy(std::size_t& min_bucket_count_in_out) { - auto it_prime = std::lower_bound(detail::PRIMES.begin(), - detail::PRIMES.end(), min_bucket_count_in_out); - if(it_prime == detail::PRIMES.end()) { - TSL_THROW_OR_TERMINATE(std::length_error, "The hash table exceeds its maxmimum size."); - } - - m_iprime = static_cast(std::distance(detail::PRIMES.begin(), it_prime)); - if(min_bucket_count_in_out > 0) { - min_bucket_count_in_out = *it_prime; - } - else { - min_bucket_count_in_out = 0; - } - } - - std::size_t bucket_for_hash(std::size_t hash) const noexcept { - return detail::MOD_PRIME[m_iprime](hash); - } - - std::size_t next_bucket_count() const { - if(m_iprime + 1 >= detail::PRIMES.size()) { - TSL_THROW_OR_TERMINATE(std::length_error, "The hash table exceeds its maxmimum size."); - } - - return detail::PRIMES[m_iprime + 1]; - } - - std::size_t max_bucket_count() const { - return detail::PRIMES.back(); - } - - void clear() noexcept { - m_iprime = 0; - } - -private: - unsigned int m_iprime; - - static_assert((std::numeric_limits::max)() >= detail::PRIMES.size(), - "The type of m_iprime is not big enough."); -}; - -} -} - -#endif diff --git a/packages/leann-backend-diskann/third_party/DiskANN/include/tsl/robin_hash.h b/packages/leann-backend-diskann/third_party/DiskANN/include/tsl/robin_hash.h deleted file mode 100644 index 5ecc962..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/include/tsl/robin_hash.h +++ /dev/null @@ -1,1285 +0,0 @@ -/** - * MIT License - * - * Copyright (c) 2017 Tessil - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ -#ifndef TSL_ROBIN_HASH_H -#define TSL_ROBIN_HASH_H - - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "robin_growth_policy.h" - - -namespace tsl { - -namespace detail_robin_hash { - -template -struct make_void { - using type = void; -}; - -template -struct has_is_transparent: std::false_type { -}; - -template -struct has_is_transparent::type>: std::true_type { -}; - -template -struct is_power_of_two_policy: std::false_type { -}; - -template -struct is_power_of_two_policy>: std::true_type { -}; - - - -using truncated_hash_type = std::uint_least32_t; - -/** - * Helper class that store a truncated hash if StoreHash is true and nothing otherwise. - */ -template -class bucket_entry_hash { -public: - bool bucket_hash_equal(std::size_t /*hash*/) const noexcept { - return true; - } - - truncated_hash_type truncated_hash() const noexcept { - return 0; - } - -protected: - void set_hash(truncated_hash_type /*hash*/) noexcept { - } -}; - -template<> -class bucket_entry_hash { -public: - bool bucket_hash_equal(std::size_t hash) const noexcept { - return m_hash == truncated_hash_type(hash); - } - - truncated_hash_type truncated_hash() const noexcept { - return m_hash; - } - -protected: - void set_hash(truncated_hash_type hash) noexcept { - m_hash = truncated_hash_type(hash); - } - -private: - truncated_hash_type m_hash; -}; - - -/** - * Each bucket entry has: - * - A value of type `ValueType`. - * - An integer to store how far the value of the bucket, if any, is from its ideal bucket - * (ex: if the current bucket 5 has the value 'foo' and `hash('foo') % nb_buckets` == 3, - * `dist_from_ideal_bucket()` will return 2 as the current value of the bucket is two - * buckets away from its ideal bucket) - * If there is no value in the bucket (i.e. `empty()` is true) `dist_from_ideal_bucket()` will be < 0. - * - A marker which tells us if the bucket is the last bucket of the bucket array (useful for the - * iterator of the hash table). - * - If `StoreHash` is true, 32 bits of the hash of the value, if any, are also stored in the bucket. - * If the size of the hash is more than 32 bits, it is truncated. We don't store the full hash - * as storing the hash is a potential opportunity to use the unused space due to the alignement - * of the bucket_entry structure. We can thus potentially store the hash without any extra space - * (which would not be possible with 64 bits of the hash). - */ -template -class bucket_entry: public bucket_entry_hash { - using bucket_hash = bucket_entry_hash; - -public: - using value_type = ValueType; - using distance_type = std::int_least16_t; - - - bucket_entry() noexcept: bucket_hash(), m_dist_from_ideal_bucket(EMPTY_MARKER_DIST_FROM_IDEAL_BUCKET), - m_last_bucket(false) - { - tsl_assert(empty()); - } - - bucket_entry(bool last_bucket) noexcept: bucket_hash(), m_dist_from_ideal_bucket(EMPTY_MARKER_DIST_FROM_IDEAL_BUCKET), - m_last_bucket(last_bucket) - { - tsl_assert(empty()); - } - - bucket_entry(const bucket_entry& other) noexcept(std::is_nothrow_copy_constructible::value): - bucket_hash(other), - m_dist_from_ideal_bucket(EMPTY_MARKER_DIST_FROM_IDEAL_BUCKET), - m_last_bucket(other.m_last_bucket) - { - if(!other.empty()) { - ::new (static_cast(std::addressof(m_value))) value_type(other.value()); - m_dist_from_ideal_bucket = other.m_dist_from_ideal_bucket; - } - } - - /** - * Never really used, but still necessary as we must call resize on an empty `std::vector`. - * and we need to support move-only types. See robin_hash constructor for details. - */ - bucket_entry(bucket_entry&& other) noexcept(std::is_nothrow_move_constructible::value): - bucket_hash(std::move(other)), - m_dist_from_ideal_bucket(EMPTY_MARKER_DIST_FROM_IDEAL_BUCKET), - m_last_bucket(other.m_last_bucket) - { - if(!other.empty()) { - ::new (static_cast(std::addressof(m_value))) value_type(std::move(other.value())); - m_dist_from_ideal_bucket = other.m_dist_from_ideal_bucket; - } - } - - bucket_entry& operator=(const bucket_entry& other) - noexcept(std::is_nothrow_copy_constructible::value) - { - if(this != &other) { - clear(); - - bucket_hash::operator=(other); - if(!other.empty()) { - ::new (static_cast(std::addressof(m_value))) value_type(other.value()); - } - - m_dist_from_ideal_bucket = other.m_dist_from_ideal_bucket; - m_last_bucket = other.m_last_bucket; - } - - return *this; - } - - bucket_entry& operator=(bucket_entry&& ) = delete; - - ~bucket_entry() noexcept { - clear(); - } - - void clear() noexcept { - if(!empty()) { - destroy_value(); - m_dist_from_ideal_bucket = EMPTY_MARKER_DIST_FROM_IDEAL_BUCKET; - } - } - - bool empty() const noexcept { - return m_dist_from_ideal_bucket == EMPTY_MARKER_DIST_FROM_IDEAL_BUCKET; - } - - value_type& value() noexcept { - tsl_assert(!empty()); - return *reinterpret_cast(std::addressof(m_value)); - } - - const value_type& value() const noexcept { - tsl_assert(!empty()); - return *reinterpret_cast(std::addressof(m_value)); - } - - distance_type dist_from_ideal_bucket() const noexcept { - return m_dist_from_ideal_bucket; - } - - bool last_bucket() const noexcept { - return m_last_bucket; - } - - void set_as_last_bucket() noexcept { - m_last_bucket = true; - } - - template - void set_value_of_empty_bucket(distance_type dist_from_ideal_bucket, - truncated_hash_type hash, Args&&... value_type_args) - { - tsl_assert(dist_from_ideal_bucket >= 0); - tsl_assert(empty()); - - ::new (static_cast(std::addressof(m_value))) value_type(std::forward(value_type_args)...); - this->set_hash(hash); - m_dist_from_ideal_bucket = dist_from_ideal_bucket; - - tsl_assert(!empty()); - } - - void swap_with_value_in_bucket(distance_type& dist_from_ideal_bucket, - truncated_hash_type& hash, value_type& value) - { - tsl_assert(!empty()); - - using std::swap; - swap(value, this->value()); - swap(dist_from_ideal_bucket, m_dist_from_ideal_bucket); - - // Avoid warning of unused variable if StoreHash is false - (void) hash; - if(StoreHash) { - const truncated_hash_type tmp_hash = this->truncated_hash(); - this->set_hash(hash); - hash = tmp_hash; - } - } - - static truncated_hash_type truncate_hash(std::size_t hash) noexcept { - return truncated_hash_type(hash); - } - -private: - void destroy_value() noexcept { - tsl_assert(!empty()); - value().~value_type(); - } - -private: - using storage = typename std::aligned_storage::type; - - static const distance_type EMPTY_MARKER_DIST_FROM_IDEAL_BUCKET = -1; - - distance_type m_dist_from_ideal_bucket; - bool m_last_bucket; - storage m_value; -}; - - - -/** - * Internal common class used by `robin_map` and `robin_set`. - * - * ValueType is what will be stored by `robin_hash` (usually `std::pair` for map and `Key` for set). - * - * `KeySelect` should be a `FunctionObject` which takes a `ValueType` in parameter and returns a - * reference to the key. - * - * `ValueSelect` should be a `FunctionObject` which takes a `ValueType` in parameter and returns a - * reference to the value. `ValueSelect` should be void if there is no value (in a set for example). - * - * The strong exception guarantee only holds if the expression - * `std::is_nothrow_swappable::value && std::is_nothrow_move_constructible::value` is true. - * - * Behaviour is undefined if the destructor of `ValueType` throws. - */ -template -class robin_hash: private Hash, private KeyEqual, private GrowthPolicy { -private: - template - using has_mapped_type = typename std::integral_constant::value>; - - static_assert(noexcept(std::declval().bucket_for_hash(std::size_t(0))), "GrowthPolicy::bucket_for_hash must be noexcept."); - static_assert(noexcept(std::declval().clear()), "GrowthPolicy::clear must be noexcept."); - -public: - template - class robin_iterator; - - using key_type = typename KeySelect::key_type; - using value_type = ValueType; - using size_type = std::size_t; - using difference_type = std::ptrdiff_t; - using hasher = Hash; - using key_equal = KeyEqual; - using allocator_type = Allocator; - using reference = value_type&; - using const_reference = const value_type&; - using pointer = value_type*; - using const_pointer = const value_type*; - using iterator = robin_iterator; - using const_iterator = robin_iterator; - - -private: - /** - * Either store the hash because we are asked by the `StoreHash` template parameter - * or store the hash because it doesn't cost us anything in size and can be used to speed up rehash. - */ - static constexpr bool STORE_HASH = StoreHash || - ( - (sizeof(tsl::detail_robin_hash::bucket_entry) == - sizeof(tsl::detail_robin_hash::bucket_entry)) - && - (sizeof(std::size_t) == sizeof(truncated_hash_type) || - is_power_of_two_policy::value) - && - // Don't store the hash for primitive types with default hash. - (!std::is_arithmetic::value || - !std::is_same>::value) - ); - - /** - * Only use the stored hash on lookup if we are explictly asked. We are not sure how slow - * the KeyEqual operation is. An extra comparison may slow things down with a fast KeyEqual. - */ - static constexpr bool USE_STORED_HASH_ON_LOOKUP = StoreHash; - - /** - * We can only use the hash on rehash if the size of the hash type is the same as the stored one or - * if we use a power of two modulo. In the case of the power of two modulo, we just mask - * the least significant bytes, we just have to check that the truncated_hash_type didn't truncated - * more bytes. - */ - static bool USE_STORED_HASH_ON_REHASH(size_type bucket_count) { - (void) bucket_count; - if(STORE_HASH && sizeof(std::size_t) == sizeof(truncated_hash_type)) { - return true; - } - else if(STORE_HASH && is_power_of_two_policy::value) { - tsl_assert(bucket_count > 0); - return (bucket_count - 1) <= (std::numeric_limits::max)(); - } - else { - return false; - } - } - - using bucket_entry = tsl::detail_robin_hash::bucket_entry; - using distance_type = typename bucket_entry::distance_type; - - using buckets_allocator = typename std::allocator_traits::template rebind_alloc; - using buckets_container_type = std::vector; - - -public: - /** - * The 'operator*()' and 'operator->()' methods return a const reference and const pointer respectively to the - * stored value type. - * - * In case of a map, to get a mutable reference to the value associated to a key (the '.second' in the - * stored pair), you have to call 'value()'. - * - * The main reason for this is that if we returned a `std::pair&` instead - * of a `const std::pair&`, the user may modify the key which will put the map in a undefined state. - */ - template - class robin_iterator { - friend class robin_hash; - - private: - using iterator_bucket = typename std::conditional::type; - - - robin_iterator(iterator_bucket it) noexcept: m_iterator(it) { - } - - public: - using iterator_category = std::forward_iterator_tag; - using value_type = const typename robin_hash::value_type; - using difference_type = std::ptrdiff_t; - using reference = value_type&; - using pointer = value_type*; - - - robin_iterator() noexcept { - } - - robin_iterator(const robin_iterator& other) noexcept: m_iterator(other.m_iterator) { - } - - const typename robin_hash::key_type& key() const { - return KeySelect()(m_iterator->value()); - } - - template::value && IsConst>::type* = nullptr> - const typename U::value_type& value() const { - return U()(m_iterator->value()); - } - - template::value && !IsConst>::type* = nullptr> - typename U::value_type& value() { - return U()(m_iterator->value()); - } - - reference operator*() const { - return m_iterator->value(); - } - - pointer operator->() const { - return std::addressof(m_iterator->value()); - } - - robin_iterator& operator++() { - while(true) { - if(m_iterator->last_bucket()) { - ++m_iterator; - return *this; - } - - ++m_iterator; - if(!m_iterator->empty()) { - return *this; - } - } - } - - robin_iterator operator++(int) { - robin_iterator tmp(*this); - ++*this; - - return tmp; - } - - friend bool operator==(const robin_iterator& lhs, const robin_iterator& rhs) { - return lhs.m_iterator == rhs.m_iterator; - } - - friend bool operator!=(const robin_iterator& lhs, const robin_iterator& rhs) { - return !(lhs == rhs); - } - - private: - iterator_bucket m_iterator; - }; - - -public: - robin_hash(size_type bucket_count, - const Hash& hash, - const KeyEqual& equal, - const Allocator& alloc, - float max_load_factor): Hash(hash), - KeyEqual(equal), - GrowthPolicy(bucket_count), - m_buckets(alloc), - m_first_or_empty_bucket(static_empty_bucket_ptr()), - m_bucket_count(bucket_count), - m_nb_elements(0), - m_grow_on_next_insert(false) - { - if(bucket_count > max_bucket_count()) { - TSL_THROW_OR_TERMINATE(std::length_error, "The map exceeds its maxmimum size."); - } - - if(m_bucket_count > 0) { - /* - * We can't use the `vector(size_type count, const Allocator& alloc)` constructor - * as it's only available in C++14 and we need to support C++11. We thus must resize after using - * the `vector(const Allocator& alloc)` constructor. - * - * We can't use `vector(size_type count, const T& value, const Allocator& alloc)` as it requires the - * value T to be copyable. - */ - m_buckets.resize(m_bucket_count); - m_first_or_empty_bucket = m_buckets.data(); - - tsl_assert(!m_buckets.empty()); - m_buckets.back().set_as_last_bucket(); - } - - - this->max_load_factor(max_load_factor); - } - - robin_hash(const robin_hash& other): Hash(other), - KeyEqual(other), - GrowthPolicy(other), - m_buckets(other.m_buckets), - m_first_or_empty_bucket(m_buckets.empty()?static_empty_bucket_ptr():m_buckets.data()), - m_bucket_count(other.m_bucket_count), - m_nb_elements(other.m_nb_elements), - m_load_threshold(other.m_load_threshold), - m_max_load_factor(other.m_max_load_factor), - m_grow_on_next_insert(other.m_grow_on_next_insert) - { - } - - robin_hash(robin_hash&& other) noexcept(std::is_nothrow_move_constructible::value && - std::is_nothrow_move_constructible::value && - std::is_nothrow_move_constructible::value && - std::is_nothrow_move_constructible::value) - : Hash(std::move(static_cast(other))), - KeyEqual(std::move(static_cast(other))), - GrowthPolicy(std::move(static_cast(other))), - m_buckets(std::move(other.m_buckets)), - m_first_or_empty_bucket(m_buckets.empty()?static_empty_bucket_ptr():m_buckets.data()), - m_bucket_count(other.m_bucket_count), - m_nb_elements(other.m_nb_elements), - m_load_threshold(other.m_load_threshold), - m_max_load_factor(other.m_max_load_factor), - m_grow_on_next_insert(other.m_grow_on_next_insert) - { - other.GrowthPolicy::clear(); - other.m_buckets.clear(); - other.m_first_or_empty_bucket = static_empty_bucket_ptr(); - other.m_bucket_count = 0; - other.m_nb_elements = 0; - other.m_load_threshold = 0; - other.m_grow_on_next_insert = false; - } - - robin_hash& operator=(const robin_hash& other) { - if(&other != this) { - Hash::operator=(other); - KeyEqual::operator=(other); - GrowthPolicy::operator=(other); - - m_buckets = other.m_buckets; - m_first_or_empty_bucket = m_buckets.empty()?static_empty_bucket_ptr(): - m_buckets.data(); - m_bucket_count = other.m_bucket_count; - m_nb_elements = other.m_nb_elements; - m_load_threshold = other.m_load_threshold; - m_max_load_factor = other.m_max_load_factor; - m_grow_on_next_insert = other.m_grow_on_next_insert; - } - - return *this; - } - - robin_hash& operator=(robin_hash&& other) { - other.swap(*this); - other.clear(); - - return *this; - } - - allocator_type get_allocator() const { - return m_buckets.get_allocator(); - } - - - /* - * Iterators - */ - iterator begin() noexcept { - auto begin = m_buckets.begin(); - while(begin != m_buckets.end() && begin->empty()) { - ++begin; - } - - return iterator(begin); - } - - const_iterator begin() const noexcept { - return cbegin(); - } - - const_iterator cbegin() const noexcept { - auto begin = m_buckets.cbegin(); - while(begin != m_buckets.cend() && begin->empty()) { - ++begin; - } - - return const_iterator(begin); - } - - iterator end() noexcept { - return iterator(m_buckets.end()); - } - - const_iterator end() const noexcept { - return cend(); - } - - const_iterator cend() const noexcept { - return const_iterator(m_buckets.cend()); - } - - - /* - * Capacity - */ - bool empty() const noexcept { - return m_nb_elements == 0; - } - - size_type size() const noexcept { - return m_nb_elements; - } - - size_type max_size() const noexcept { - return m_buckets.max_size(); - } - - /* - * Modifiers - */ - void clear() noexcept { - for(auto& bucket: m_buckets) { - bucket.clear(); - } - - m_nb_elements = 0; - m_grow_on_next_insert = false; - } - - - - template - std::pair insert(P&& value) { - return insert_impl(KeySelect()(value), std::forward

(value)); - } - - template - iterator insert(const_iterator hint, P&& value) { - if(hint != cend() && compare_keys(KeySelect()(*hint), KeySelect()(value))) { - return mutable_iterator(hint); - } - - return insert(std::forward

(value)).first; - } - - template - void insert(InputIt first, InputIt last) { - if(std::is_base_of::iterator_category>::value) - { - const auto nb_elements_insert = std::distance(first, last); - const size_type nb_free_buckets = m_load_threshold - size(); - tsl_assert(m_load_threshold >= size()); - - if(nb_elements_insert > 0 && nb_free_buckets < size_type(nb_elements_insert)) { - reserve(size() + size_type(nb_elements_insert)); - } - } - - for(; first != last; ++first) { - insert(*first); - } - } - - - - template - std::pair insert_or_assign(K&& key, M&& obj) { - auto it = try_emplace(std::forward(key), std::forward(obj)); - if(!it.second) { - it.first.value() = std::forward(obj); - } - - return it; - } - - template - iterator insert_or_assign(const_iterator hint, K&& key, M&& obj) { - if(hint != cend() && compare_keys(KeySelect()(*hint), key)) { - auto it = mutable_iterator(hint); - it.value() = std::forward(obj); - - return it; - } - - return insert_or_assign(std::forward(key), std::forward(obj)).first; - } - - - template - std::pair emplace(Args&&... args) { - return insert(value_type(std::forward(args)...)); - } - - template - iterator emplace_hint(const_iterator hint, Args&&... args) { - return insert(hint, value_type(std::forward(args)...)); - } - - - - template - std::pair try_emplace(K&& key, Args&&... args) { - return insert_impl(key, std::piecewise_construct, - std::forward_as_tuple(std::forward(key)), - std::forward_as_tuple(std::forward(args)...)); - } - - template - iterator try_emplace(const_iterator hint, K&& key, Args&&... args) { - if(hint != cend() && compare_keys(KeySelect()(*hint), key)) { - return mutable_iterator(hint); - } - - return try_emplace(std::forward(key), std::forward(args)...).first; - } - - /** - * Here to avoid `template size_type erase(const K& key)` being used when - * we use an `iterator` instead of a `const_iterator`. - */ - iterator erase(iterator pos) { - erase_from_bucket(pos); - - /** - * Erase bucket used a backward shift after clearing the bucket. - * Check if there is a new value in the bucket, if not get the next non-empty. - */ - if(pos.m_iterator->empty()) { - ++pos; - } - - return pos; - } - - iterator erase(const_iterator pos) { - return erase(mutable_iterator(pos)); - } - - iterator erase(const_iterator first, const_iterator last) { - if(first == last) { - return mutable_iterator(first); - } - - auto first_mutable = mutable_iterator(first); - auto last_mutable = mutable_iterator(last); - for(auto it = first_mutable.m_iterator; it != last_mutable.m_iterator; ++it) { - if(!it->empty()) { - it->clear(); - m_nb_elements--; - } - } - - if(last_mutable == end()) { - return end(); - } - - - /* - * Backward shift on the values which come after the deleted values. - * We try to move the values closer to their ideal bucket. - */ - std::size_t icloser_bucket = std::size_t(std::distance(m_buckets.begin(), first_mutable.m_iterator)); - std::size_t ito_move_closer_value = std::size_t(std::distance(m_buckets.begin(), last_mutable.m_iterator)); - tsl_assert(ito_move_closer_value > icloser_bucket); - - const std::size_t ireturn_bucket = ito_move_closer_value - - (std::min)(ito_move_closer_value - icloser_bucket, - std::size_t(m_buckets[ito_move_closer_value].dist_from_ideal_bucket())); - - while(ito_move_closer_value < m_buckets.size() && m_buckets[ito_move_closer_value].dist_from_ideal_bucket() > 0) { - icloser_bucket = ito_move_closer_value - - (std::min)(ito_move_closer_value - icloser_bucket, - std::size_t(m_buckets[ito_move_closer_value].dist_from_ideal_bucket())); - - - tsl_assert(m_buckets[icloser_bucket].empty()); - const distance_type new_distance = distance_type(m_buckets[ito_move_closer_value].dist_from_ideal_bucket() - - (ito_move_closer_value - icloser_bucket)); - m_buckets[icloser_bucket].set_value_of_empty_bucket(new_distance, - m_buckets[ito_move_closer_value].truncated_hash(), - std::move(m_buckets[ito_move_closer_value].value())); - m_buckets[ito_move_closer_value].clear(); - - - ++icloser_bucket; - ++ito_move_closer_value; - } - - - return iterator(m_buckets.begin() + ireturn_bucket); - } - - - template - size_type erase(const K& key) { - return erase(key, hash_key(key)); - } - - template - size_type erase(const K& key, std::size_t hash) { - auto it = find(key, hash); - if(it != end()) { - erase_from_bucket(it); - - return 1; - } - else { - return 0; - } - } - - - - - - void swap(robin_hash& other) { - using std::swap; - - swap(static_cast(*this), static_cast(other)); - swap(static_cast(*this), static_cast(other)); - swap(static_cast(*this), static_cast(other)); - swap(m_buckets, other.m_buckets); - swap(m_first_or_empty_bucket, other.m_first_or_empty_bucket); - swap(m_bucket_count, other.m_bucket_count); - swap(m_nb_elements, other.m_nb_elements); - swap(m_load_threshold, other.m_load_threshold); - swap(m_max_load_factor, other.m_max_load_factor); - swap(m_grow_on_next_insert, other.m_grow_on_next_insert); - } - - - /* - * Lookup - */ - template::value>::type* = nullptr> - typename U::value_type& at(const K& key) { - return at(key, hash_key(key)); - } - - template::value>::type* = nullptr> - typename U::value_type& at(const K& key, std::size_t hash) { - return const_cast(static_cast(this)->at(key, hash)); - } - - - template::value>::type* = nullptr> - const typename U::value_type& at(const K& key) const { - return at(key, hash_key(key)); - } - - template::value>::type* = nullptr> - const typename U::value_type& at(const K& key, std::size_t hash) const { - auto it = find(key, hash); - if(it != cend()) { - return it.value(); - } - else { - TSL_THROW_OR_TERMINATE(std::out_of_range, "Couldn't find key."); - } - } - - template::value>::type* = nullptr> - typename U::value_type& operator[](K&& key) { - return try_emplace(std::forward(key)).first.value(); - } - - - template - size_type count(const K& key) const { - return count(key, hash_key(key)); - } - - template - size_type count(const K& key, std::size_t hash) const { - if(find(key, hash) != cend()) { - return 1; - } - else { - return 0; - } - } - - - template - iterator find(const K& key) { - return find_impl(key, hash_key(key)); - } - - template - iterator find(const K& key, std::size_t hash) { - return find_impl(key, hash); - } - - - template - const_iterator find(const K& key) const { - return find_impl(key, hash_key(key)); - } - - template - const_iterator find(const K& key, std::size_t hash) const { - return find_impl(key, hash); - } - - - template - std::pair equal_range(const K& key) { - return equal_range(key, hash_key(key)); - } - - template - std::pair equal_range(const K& key, std::size_t hash) { - iterator it = find(key, hash); - return std::make_pair(it, (it == end())?it:std::next(it)); - } - - - template - std::pair equal_range(const K& key) const { - return equal_range(key, hash_key(key)); - } - - template - std::pair equal_range(const K& key, std::size_t hash) const { - const_iterator it = find(key, hash); - return std::make_pair(it, (it == cend())?it:std::next(it)); - } - - /* - * Bucket interface - */ - size_type bucket_count() const { - return m_bucket_count; - } - - size_type max_bucket_count() const { - return (std::min)(GrowthPolicy::max_bucket_count(), m_buckets.max_size()); - } - - /* - * Hash policy - */ - float load_factor() const { - if(bucket_count() == 0) { - return 0; - } - - return float(m_nb_elements)/float(bucket_count()); - } - - float max_load_factor() const { - return m_max_load_factor; - } - - void max_load_factor(float ml) { - m_max_load_factor = (std::max)(0.1f, (std::min)(ml, 0.95f)); - m_load_threshold = size_type(float(bucket_count())*m_max_load_factor); - } - - void rehash(size_type count) { - count = (std::max)(count, size_type(std::ceil(float(size())/max_load_factor()))); - rehash_impl(count); - } - - void reserve(size_type count) { - rehash(size_type(std::ceil(float(count)/max_load_factor()))); - } - - /* - * Observers - */ - hasher hash_function() const { - return static_cast(*this); - } - - key_equal key_eq() const { - return static_cast(*this); - } - - - /* - * Other - */ - iterator mutable_iterator(const_iterator pos) { - return iterator(m_buckets.begin() + std::distance(m_buckets.cbegin(), pos.m_iterator)); - } - -private: - template - std::size_t hash_key(const K& key) const { - return Hash::operator()(key); - } - - template - bool compare_keys(const K1& key1, const K2& key2) const { - return KeyEqual::operator()(key1, key2); - } - - std::size_t bucket_for_hash(std::size_t hash) const { - const std::size_t bucket = GrowthPolicy::bucket_for_hash(hash); - tsl_assert(bucket < m_buckets.size() || (bucket == 0 && m_buckets.empty())); - - return bucket; - } - - template::value>::type* = nullptr> - std::size_t next_bucket(std::size_t index) const noexcept { - tsl_assert(index < bucket_count()); - - return (index + 1) & this->m_mask; - } - - template::value>::type* = nullptr> - std::size_t next_bucket(std::size_t index) const noexcept { - tsl_assert(index < bucket_count()); - - index++; - return (index != bucket_count())?index:0; - } - - - - template - iterator find_impl(const K& key, std::size_t hash) { - return mutable_iterator(static_cast(this)->find(key, hash)); - } - - template - const_iterator find_impl(const K& key, std::size_t hash) const { - std::size_t ibucket = bucket_for_hash(hash); - distance_type dist_from_ideal_bucket = 0; - - while(dist_from_ideal_bucket <= (m_first_or_empty_bucket + ibucket)->dist_from_ideal_bucket()) { - if(TSL_LIKELY((!USE_STORED_HASH_ON_LOOKUP || (m_first_or_empty_bucket + ibucket)->bucket_hash_equal(hash)) && - compare_keys(KeySelect()((m_first_or_empty_bucket + ibucket)->value()), key))) - { - return const_iterator(m_buckets.begin() + ibucket); - } - - ibucket = next_bucket(ibucket); - dist_from_ideal_bucket++; - } - - return cend(); - } - - void erase_from_bucket(iterator pos) { - pos.m_iterator->clear(); - m_nb_elements--; - - /** - * Backward shift, swap the empty bucket, previous_ibucket, with the values on its right, ibucket, - * until we cross another empty bucket or if the other bucket has a distance_from_ideal_bucket == 0. - * - * We try to move the values closer to their ideal bucket. - */ - std::size_t previous_ibucket = std::size_t(std::distance(m_buckets.begin(), pos.m_iterator)); - std::size_t ibucket = next_bucket(previous_ibucket); - - while(m_buckets[ibucket].dist_from_ideal_bucket() > 0) { - tsl_assert(m_buckets[previous_ibucket].empty()); - - const distance_type new_distance = distance_type(m_buckets[ibucket].dist_from_ideal_bucket() - 1); - m_buckets[previous_ibucket].set_value_of_empty_bucket(new_distance, m_buckets[ibucket].truncated_hash(), - std::move(m_buckets[ibucket].value())); - m_buckets[ibucket].clear(); - - previous_ibucket = ibucket; - ibucket = next_bucket(ibucket); - } - } - - template - std::pair insert_impl(const K& key, Args&&... value_type_args) { - const std::size_t hash = hash_key(key); - - std::size_t ibucket = bucket_for_hash(hash); - distance_type dist_from_ideal_bucket = 0; - - while(dist_from_ideal_bucket <= (m_first_or_empty_bucket + ibucket)->dist_from_ideal_bucket()) { - if((!USE_STORED_HASH_ON_LOOKUP || (m_first_or_empty_bucket + ibucket)->bucket_hash_equal(hash)) && - compare_keys(KeySelect()((m_first_or_empty_bucket + ibucket)->value()), key)) - { - return std::make_pair(iterator(m_buckets.begin() + ibucket), false); - } - - ibucket = next_bucket(ibucket); - dist_from_ideal_bucket++; - } - - if(grow_on_high_load()) { - ibucket = bucket_for_hash(hash); - dist_from_ideal_bucket = 0; - - while(dist_from_ideal_bucket <= (m_first_or_empty_bucket + ibucket)->dist_from_ideal_bucket()) { - ibucket = next_bucket(ibucket); - dist_from_ideal_bucket++; - } - } - - - if((m_first_or_empty_bucket + ibucket)->empty()) { - (m_first_or_empty_bucket + ibucket)->set_value_of_empty_bucket(dist_from_ideal_bucket, bucket_entry::truncate_hash(hash), - std::forward(value_type_args)...); - } - else { - insert_value(ibucket, dist_from_ideal_bucket, bucket_entry::truncate_hash(hash), - std::forward(value_type_args)...); - } - - - m_nb_elements++; - /* - * The value will be inserted in ibucket in any case, either because it was - * empty or by stealing the bucket (robin hood). - */ - return std::make_pair(iterator(m_buckets.begin() + ibucket), true); - } - - - template - void insert_value(std::size_t ibucket, distance_type dist_from_ideal_bucket, - truncated_hash_type hash, Args&&... value_type_args) - { - insert_value(ibucket, dist_from_ideal_bucket, hash, value_type(std::forward(value_type_args)...)); - } - - void insert_value(std::size_t ibucket, distance_type dist_from_ideal_bucket, - truncated_hash_type hash, value_type&& value) - { - m_buckets[ibucket].swap_with_value_in_bucket(dist_from_ideal_bucket, hash, value); - ibucket = next_bucket(ibucket); - dist_from_ideal_bucket++; - - while(!m_buckets[ibucket].empty()) { - if(dist_from_ideal_bucket > m_buckets[ibucket].dist_from_ideal_bucket()) { - if(dist_from_ideal_bucket >= REHASH_ON_HIGH_NB_PROBES__NPROBES && - load_factor() >= REHASH_ON_HIGH_NB_PROBES__MIN_LOAD_FACTOR) - { - /** - * The number of probes is really high, rehash the map on the next insert. - * Difficult to do now as rehash may throw an exception. - */ - m_grow_on_next_insert = true; - } - - m_buckets[ibucket].swap_with_value_in_bucket(dist_from_ideal_bucket, hash, value); - } - - ibucket = next_bucket(ibucket); - dist_from_ideal_bucket++; - } - - m_buckets[ibucket].set_value_of_empty_bucket(dist_from_ideal_bucket, hash, std::move(value)); - } - - - void rehash_impl(size_type count) { - robin_hash new_table(count, static_cast(*this), static_cast(*this), - get_allocator(), m_max_load_factor); - - const bool use_stored_hash = USE_STORED_HASH_ON_REHASH(new_table.bucket_count()); - for(auto& bucket: m_buckets) { - if(bucket.empty()) { - continue; - } - - const std::size_t hash = use_stored_hash?bucket.truncated_hash(): - new_table.hash_key(KeySelect()(bucket.value())); - - new_table.insert_value_on_rehash(new_table.bucket_for_hash(hash), 0, - bucket_entry::truncate_hash(hash), std::move(bucket.value())); - } - - new_table.m_nb_elements = m_nb_elements; - new_table.swap(*this); - } - - void insert_value_on_rehash(std::size_t ibucket, distance_type dist_from_ideal_bucket, - truncated_hash_type hash, value_type&& value) - { - while(true) { - if(dist_from_ideal_bucket > m_buckets[ibucket].dist_from_ideal_bucket()) { - if(m_buckets[ibucket].empty()) { - m_buckets[ibucket].set_value_of_empty_bucket(dist_from_ideal_bucket, hash, std::move(value)); - return; - } - else { - m_buckets[ibucket].swap_with_value_in_bucket(dist_from_ideal_bucket, hash, value); - } - } - - dist_from_ideal_bucket++; - ibucket = next_bucket(ibucket); - } - } - - - - /** - * Return true if the map has been rehashed. - */ - bool grow_on_high_load() { - if(m_grow_on_next_insert || size() >= m_load_threshold) { - rehash_impl(GrowthPolicy::next_bucket_count()); - m_grow_on_next_insert = false; - - return true; - } - - return false; - } - - -public: - static const size_type DEFAULT_INIT_BUCKETS_SIZE = 16; - static constexpr float DEFAULT_MAX_LOAD_FACTOR = 0.5f; - -private: - static const distance_type REHASH_ON_HIGH_NB_PROBES__NPROBES = 128; - static constexpr float REHASH_ON_HIGH_NB_PROBES__MIN_LOAD_FACTOR = 0.15f; - - - /** - * Return an always valid pointer to an static empty bucket_entry with last_bucket() == true. - */ - bucket_entry* static_empty_bucket_ptr() { - static bucket_entry empty_bucket(true); - return &empty_bucket; - } - -private: - buckets_container_type m_buckets; - - /** - * Points to m_buckets.data() if !m_buckets.empty() otherwise points to static_empty_bucket_ptr. - * This variable is useful to avoid the cost of checking if m_buckets is empty when trying - * to find an element. - */ - bucket_entry* m_first_or_empty_bucket; - - /** - * Used a lot in find, avoid the call to m_buckets.size() which is a bit slower. - */ - size_type m_bucket_count; - - size_type m_nb_elements; - - size_type m_load_threshold; - float m_max_load_factor; - - bool m_grow_on_next_insert; -}; - -} - -} - -#endif diff --git a/packages/leann-backend-diskann/third_party/DiskANN/include/tsl/robin_map.h b/packages/leann-backend-diskann/third_party/DiskANN/include/tsl/robin_map.h deleted file mode 100644 index 5958e70..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/include/tsl/robin_map.h +++ /dev/null @@ -1,668 +0,0 @@ -/** - * MIT License - * - * Copyright (c) 2017 Tessil - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ -#ifndef TSL_ROBIN_MAP_H -#define TSL_ROBIN_MAP_H - - -#include -#include -#include -#include -#include -#include -#include "robin_hash.h" - - -namespace tsl { - - -/** - * Implementation of a hash map using open-adressing and the robin hood hashing algorithm with backward shift deletion. - * - * For operations modifying the hash map (insert, erase, rehash, ...), the strong exception guarantee - * is only guaranteed when the expression `std::is_nothrow_swappable>::value && - * std::is_nothrow_move_constructible>::value` is true, otherwise if an exception - * is thrown during the swap or the move, the hash map may end up in a undefined state. Per the standard - * a `Key` or `T` with a noexcept copy constructor and no move constructor also satisfies the - * `std::is_nothrow_move_constructible>::value` criterion (and will thus guarantee the - * strong exception for the map). - * - * When `StoreHash` is true, 32 bits of the hash are stored alongside the values. It can improve - * the performance during lookups if the `KeyEqual` function takes time (if it engenders a cache-miss for example) - * as we then compare the stored hashes before comparing the keys. When `tsl::rh::power_of_two_growth_policy` is used - * as `GrowthPolicy`, it may also speed-up the rehash process as we can avoid to recalculate the hash. - * When it is detected that storing the hash will not incur any memory penality due to alignement (i.e. - * `sizeof(tsl::detail_robin_hash::bucket_entry) == - * sizeof(tsl::detail_robin_hash::bucket_entry)`) and `tsl::rh::power_of_two_growth_policy` is - * used, the hash will be stored even if `StoreHash` is false so that we can speed-up the rehash (but it will - * not be used on lookups unless `StoreHash` is true). - * - * `GrowthPolicy` defines how the map grows and consequently how a hash value is mapped to a bucket. - * By default the map uses `tsl::rh::power_of_two_growth_policy`. This policy keeps the number of buckets - * to a power of two and uses a mask to map the hash to a bucket instead of the slow modulo. - * Other growth policies are available and you may define your own growth policy, - * check `tsl::rh::power_of_two_growth_policy` for the interface. - * - * If the destructor of `Key` or `T` throws an exception, the behaviour of the class is undefined. - * - * Iterators invalidation: - * - clear, operator=, reserve, rehash: always invalidate the iterators. - * - insert, emplace, emplace_hint, operator[]: if there is an effective insert, invalidate the iterators. - * - erase: always invalidate the iterators. - */ -template, - class KeyEqual = std::equal_to, - class Allocator = std::allocator>, - bool StoreHash = false, - class GrowthPolicy = tsl::rh::power_of_two_growth_policy<2>> -class robin_map { -private: - template - using has_is_transparent = tsl::detail_robin_hash::has_is_transparent; - - class KeySelect { - public: - using key_type = Key; - - const key_type& operator()(const std::pair& key_value) const noexcept { - return key_value.first; - } - - key_type& operator()(std::pair& key_value) noexcept { - return key_value.first; - } - }; - - class ValueSelect { - public: - using value_type = T; - - const value_type& operator()(const std::pair& key_value) const noexcept { - return key_value.second; - } - - value_type& operator()(std::pair& key_value) noexcept { - return key_value.second; - } - }; - - using ht = detail_robin_hash::robin_hash, KeySelect, ValueSelect, - Hash, KeyEqual, Allocator, StoreHash, GrowthPolicy>; - -public: - using key_type = typename ht::key_type; - using mapped_type = T; - using value_type = typename ht::value_type; - using size_type = typename ht::size_type; - using difference_type = typename ht::difference_type; - using hasher = typename ht::hasher; - using key_equal = typename ht::key_equal; - using allocator_type = typename ht::allocator_type; - using reference = typename ht::reference; - using const_reference = typename ht::const_reference; - using pointer = typename ht::pointer; - using const_pointer = typename ht::const_pointer; - using iterator = typename ht::iterator; - using const_iterator = typename ht::const_iterator; - - -public: - /* - * Constructors - */ - robin_map(): robin_map(ht::DEFAULT_INIT_BUCKETS_SIZE) { - } - - explicit robin_map(size_type bucket_count, - const Hash& hash = Hash(), - const KeyEqual& equal = KeyEqual(), - const Allocator& alloc = Allocator()): - m_ht(bucket_count, hash, equal, alloc, ht::DEFAULT_MAX_LOAD_FACTOR) - { - } - - robin_map(size_type bucket_count, - const Allocator& alloc): robin_map(bucket_count, Hash(), KeyEqual(), alloc) - { - } - - robin_map(size_type bucket_count, - const Hash& hash, - const Allocator& alloc): robin_map(bucket_count, hash, KeyEqual(), alloc) - { - } - - explicit robin_map(const Allocator& alloc): robin_map(ht::DEFAULT_INIT_BUCKETS_SIZE, alloc) { - } - - template - robin_map(InputIt first, InputIt last, - size_type bucket_count = ht::DEFAULT_INIT_BUCKETS_SIZE, - const Hash& hash = Hash(), - const KeyEqual& equal = KeyEqual(), - const Allocator& alloc = Allocator()): robin_map(bucket_count, hash, equal, alloc) - { - insert(first, last); - } - - template - robin_map(InputIt first, InputIt last, - size_type bucket_count, - const Allocator& alloc): robin_map(first, last, bucket_count, Hash(), KeyEqual(), alloc) - { - } - - template - robin_map(InputIt first, InputIt last, - size_type bucket_count, - const Hash& hash, - const Allocator& alloc): robin_map(first, last, bucket_count, hash, KeyEqual(), alloc) - { - } - - robin_map(std::initializer_list init, - size_type bucket_count = ht::DEFAULT_INIT_BUCKETS_SIZE, - const Hash& hash = Hash(), - const KeyEqual& equal = KeyEqual(), - const Allocator& alloc = Allocator()): - robin_map(init.begin(), init.end(), bucket_count, hash, equal, alloc) - { - } - - robin_map(std::initializer_list init, - size_type bucket_count, - const Allocator& alloc): - robin_map(init.begin(), init.end(), bucket_count, Hash(), KeyEqual(), alloc) - { - } - - robin_map(std::initializer_list init, - size_type bucket_count, - const Hash& hash, - const Allocator& alloc): - robin_map(init.begin(), init.end(), bucket_count, hash, KeyEqual(), alloc) - { - } - - robin_map& operator=(std::initializer_list ilist) { - m_ht.clear(); - - m_ht.reserve(ilist.size()); - m_ht.insert(ilist.begin(), ilist.end()); - - return *this; - } - - allocator_type get_allocator() const { return m_ht.get_allocator(); } - - - /* - * Iterators - */ - iterator begin() noexcept { return m_ht.begin(); } - const_iterator begin() const noexcept { return m_ht.begin(); } - const_iterator cbegin() const noexcept { return m_ht.cbegin(); } - - iterator end() noexcept { return m_ht.end(); } - const_iterator end() const noexcept { return m_ht.end(); } - const_iterator cend() const noexcept { return m_ht.cend(); } - - - /* - * Capacity - */ - bool empty() const noexcept { return m_ht.empty(); } - size_type size() const noexcept { return m_ht.size(); } - size_type max_size() const noexcept { return m_ht.max_size(); } - - /* - * Modifiers - */ - void clear() noexcept { m_ht.clear(); } - - - - std::pair insert(const value_type& value) { - return m_ht.insert(value); - } - - template::value>::type* = nullptr> - std::pair insert(P&& value) { - return m_ht.emplace(std::forward

(value)); - } - - std::pair insert(value_type&& value) { - return m_ht.insert(std::move(value)); - } - - - iterator insert(const_iterator hint, const value_type& value) { - return m_ht.insert(hint, value); - } - - template::value>::type* = nullptr> - iterator insert(const_iterator hint, P&& value) { - return m_ht.emplace_hint(hint, std::forward

(value)); - } - - iterator insert(const_iterator hint, value_type&& value) { - return m_ht.insert(hint, std::move(value)); - } - - - template - void insert(InputIt first, InputIt last) { - m_ht.insert(first, last); - } - - void insert(std::initializer_list ilist) { - m_ht.insert(ilist.begin(), ilist.end()); - } - - - - - template - std::pair insert_or_assign(const key_type& k, M&& obj) { - return m_ht.insert_or_assign(k, std::forward(obj)); - } - - template - std::pair insert_or_assign(key_type&& k, M&& obj) { - return m_ht.insert_or_assign(std::move(k), std::forward(obj)); - } - - template - iterator insert_or_assign(const_iterator hint, const key_type& k, M&& obj) { - return m_ht.insert_or_assign(hint, k, std::forward(obj)); - } - - template - iterator insert_or_assign(const_iterator hint, key_type&& k, M&& obj) { - return m_ht.insert_or_assign(hint, std::move(k), std::forward(obj)); - } - - - - /** - * Due to the way elements are stored, emplace will need to move or copy the key-value once. - * The method is equivalent to insert(value_type(std::forward(args)...)); - * - * Mainly here for compatibility with the std::unordered_map interface. - */ - template - std::pair emplace(Args&&... args) { - return m_ht.emplace(std::forward(args)...); - } - - - - /** - * Due to the way elements are stored, emplace_hint will need to move or copy the key-value once. - * The method is equivalent to insert(hint, value_type(std::forward(args)...)); - * - * Mainly here for compatibility with the std::unordered_map interface. - */ - template - iterator emplace_hint(const_iterator hint, Args&&... args) { - return m_ht.emplace_hint(hint, std::forward(args)...); - } - - - - - template - std::pair try_emplace(const key_type& k, Args&&... args) { - return m_ht.try_emplace(k, std::forward(args)...); - } - - template - std::pair try_emplace(key_type&& k, Args&&... args) { - return m_ht.try_emplace(std::move(k), std::forward(args)...); - } - - template - iterator try_emplace(const_iterator hint, const key_type& k, Args&&... args) { - return m_ht.try_emplace(hint, k, std::forward(args)...); - } - - template - iterator try_emplace(const_iterator hint, key_type&& k, Args&&... args) { - return m_ht.try_emplace(hint, std::move(k), std::forward(args)...); - } - - - - - iterator erase(iterator pos) { return m_ht.erase(pos); } - iterator erase(const_iterator pos) { return m_ht.erase(pos); } - iterator erase(const_iterator first, const_iterator last) { return m_ht.erase(first, last); } - size_type erase(const key_type& key) { return m_ht.erase(key); } - - /** - * Use the hash value 'precalculated_hash' instead of hashing the key. The hash value should be the same - * as hash_function()(key). Usefull to speed-up the lookup to the value if you already have the hash. - */ - size_type erase(const key_type& key, std::size_t precalculated_hash) { - return m_ht.erase(key, precalculated_hash); - } - - /** - * This overload only participates in the overload resolution if the typedef KeyEqual::is_transparent exists. - * If so, K must be hashable and comparable to Key. - */ - template::value>::type* = nullptr> - size_type erase(const K& key) { return m_ht.erase(key); } - - /** - * @copydoc erase(const K& key) - * - * Use the hash value 'precalculated_hash' instead of hashing the key. The hash value should be the same - * as hash_function()(key). Usefull to speed-up the lookup to the value if you already have the hash. - */ - template::value>::type* = nullptr> - size_type erase(const K& key, std::size_t precalculated_hash) { - return m_ht.erase(key, precalculated_hash); - } - - - - void swap(robin_map& other) { other.m_ht.swap(m_ht); } - - - - /* - * Lookup - */ - T& at(const Key& key) { return m_ht.at(key); } - - /** - * Use the hash value 'precalculated_hash' instead of hashing the key. The hash value should be the same - * as hash_function()(key). Usefull to speed-up the lookup if you already have the hash. - */ - T& at(const Key& key, std::size_t precalculated_hash) { return m_ht.at(key, precalculated_hash); } - - - const T& at(const Key& key) const { return m_ht.at(key); } - - /** - * @copydoc at(const Key& key, std::size_t precalculated_hash) - */ - const T& at(const Key& key, std::size_t precalculated_hash) const { return m_ht.at(key, precalculated_hash); } - - - /** - * This overload only participates in the overload resolution if the typedef KeyEqual::is_transparent exists. - * If so, K must be hashable and comparable to Key. - */ - template::value>::type* = nullptr> - T& at(const K& key) { return m_ht.at(key); } - - /** - * @copydoc at(const K& key) - * - * Use the hash value 'precalculated_hash' instead of hashing the key. The hash value should be the same - * as hash_function()(key). Usefull to speed-up the lookup if you already have the hash. - */ - template::value>::type* = nullptr> - T& at(const K& key, std::size_t precalculated_hash) { return m_ht.at(key, precalculated_hash); } - - - /** - * @copydoc at(const K& key) - */ - template::value>::type* = nullptr> - const T& at(const K& key) const { return m_ht.at(key); } - - /** - * @copydoc at(const K& key, std::size_t precalculated_hash) - */ - template::value>::type* = nullptr> - const T& at(const K& key, std::size_t precalculated_hash) const { return m_ht.at(key, precalculated_hash); } - - - - - T& operator[](const Key& key) { return m_ht[key]; } - T& operator[](Key&& key) { return m_ht[std::move(key)]; } - - - - - size_type count(const Key& key) const { return m_ht.count(key); } - - /** - * Use the hash value 'precalculated_hash' instead of hashing the key. The hash value should be the same - * as hash_function()(key). Usefull to speed-up the lookup if you already have the hash. - */ - size_type count(const Key& key, std::size_t precalculated_hash) const { - return m_ht.count(key, precalculated_hash); - } - - /** - * This overload only participates in the overload resolution if the typedef KeyEqual::is_transparent exists. - * If so, K must be hashable and comparable to Key. - */ - template::value>::type* = nullptr> - size_type count(const K& key) const { return m_ht.count(key); } - - /** - * @copydoc count(const K& key) const - * - * Use the hash value 'precalculated_hash' instead of hashing the key. The hash value should be the same - * as hash_function()(key). Usefull to speed-up the lookup if you already have the hash. - */ - template::value>::type* = nullptr> - size_type count(const K& key, std::size_t precalculated_hash) const { return m_ht.count(key, precalculated_hash); } - - - - - iterator find(const Key& key) { return m_ht.find(key); } - - /** - * Use the hash value 'precalculated_hash' instead of hashing the key. The hash value should be the same - * as hash_function()(key). Usefull to speed-up the lookup if you already have the hash. - */ - iterator find(const Key& key, std::size_t precalculated_hash) { return m_ht.find(key, precalculated_hash); } - - const_iterator find(const Key& key) const { return m_ht.find(key); } - - /** - * @copydoc find(const Key& key, std::size_t precalculated_hash) - */ - const_iterator find(const Key& key, std::size_t precalculated_hash) const { - return m_ht.find(key, precalculated_hash); - } - - /** - * This overload only participates in the overload resolution if the typedef KeyEqual::is_transparent exists. - * If so, K must be hashable and comparable to Key. - */ - template::value>::type* = nullptr> - iterator find(const K& key) { return m_ht.find(key); } - - /** - * @copydoc find(const K& key) - * - * Use the hash value 'precalculated_hash' instead of hashing the key. The hash value should be the same - * as hash_function()(key). Usefull to speed-up the lookup if you already have the hash. - */ - template::value>::type* = nullptr> - iterator find(const K& key, std::size_t precalculated_hash) { return m_ht.find(key, precalculated_hash); } - - /** - * @copydoc find(const K& key) - */ - template::value>::type* = nullptr> - const_iterator find(const K& key) const { return m_ht.find(key); } - - /** - * @copydoc find(const K& key) - * - * Use the hash value 'precalculated_hash' instead of hashing the key. The hash value should be the same - * as hash_function()(key). Usefull to speed-up the lookup if you already have the hash. - */ - template::value>::type* = nullptr> - const_iterator find(const K& key, std::size_t precalculated_hash) const { - return m_ht.find(key, precalculated_hash); - } - - - - - std::pair equal_range(const Key& key) { return m_ht.equal_range(key); } - - /** - * Use the hash value 'precalculated_hash' instead of hashing the key. The hash value should be the same - * as hash_function()(key). Usefull to speed-up the lookup if you already have the hash. - */ - std::pair equal_range(const Key& key, std::size_t precalculated_hash) { - return m_ht.equal_range(key, precalculated_hash); - } - - std::pair equal_range(const Key& key) const { return m_ht.equal_range(key); } - - /** - * @copydoc equal_range(const Key& key, std::size_t precalculated_hash) - */ - std::pair equal_range(const Key& key, std::size_t precalculated_hash) const { - return m_ht.equal_range(key, precalculated_hash); - } - - /** - * This overload only participates in the overload resolution if the typedef KeyEqual::is_transparent exists. - * If so, K must be hashable and comparable to Key. - */ - template::value>::type* = nullptr> - std::pair equal_range(const K& key) { return m_ht.equal_range(key); } - - - /** - * @copydoc equal_range(const K& key) - * - * Use the hash value 'precalculated_hash' instead of hashing the key. The hash value should be the same - * as hash_function()(key). Usefull to speed-up the lookup if you already have the hash. - */ - template::value>::type* = nullptr> - std::pair equal_range(const K& key, std::size_t precalculated_hash) { - return m_ht.equal_range(key, precalculated_hash); - } - - /** - * @copydoc equal_range(const K& key) - */ - template::value>::type* = nullptr> - std::pair equal_range(const K& key) const { return m_ht.equal_range(key); } - - /** - * @copydoc equal_range(const K& key, std::size_t precalculated_hash) - */ - template::value>::type* = nullptr> - std::pair equal_range(const K& key, std::size_t precalculated_hash) const { - return m_ht.equal_range(key, precalculated_hash); - } - - - - - /* - * Bucket interface - */ - size_type bucket_count() const { return m_ht.bucket_count(); } - size_type max_bucket_count() const { return m_ht.max_bucket_count(); } - - - /* - * Hash policy - */ - float load_factor() const { return m_ht.load_factor(); } - float max_load_factor() const { return m_ht.max_load_factor(); } - void max_load_factor(float ml) { m_ht.max_load_factor(ml); } - - void rehash(size_type count) { m_ht.rehash(count); } - void reserve(size_type count) { m_ht.reserve(count); } - - - /* - * Observers - */ - hasher hash_function() const { return m_ht.hash_function(); } - key_equal key_eq() const { return m_ht.key_eq(); } - - /* - * Other - */ - - /** - * Convert a const_iterator to an iterator. - */ - iterator mutable_iterator(const_iterator pos) { - return m_ht.mutable_iterator(pos); - } - - friend bool operator==(const robin_map& lhs, const robin_map& rhs) { - if(lhs.size() != rhs.size()) { - return false; - } - - for(const auto& element_lhs: lhs) { - const auto it_element_rhs = rhs.find(element_lhs.first); - if(it_element_rhs == rhs.cend() || element_lhs.second != it_element_rhs->second) { - return false; - } - } - - return true; - } - - friend bool operator!=(const robin_map& lhs, const robin_map& rhs) { - return !operator==(lhs, rhs); - } - - friend void swap(robin_map& lhs, robin_map& rhs) { - lhs.swap(rhs); - } - -private: - ht m_ht; -}; - - -/** - * Same as `tsl::robin_map`. - */ -template, - class KeyEqual = std::equal_to, - class Allocator = std::allocator>, - bool StoreHash = false> -using robin_pg_map = robin_map; - -} // end namespace tsl - -#endif diff --git a/packages/leann-backend-diskann/third_party/DiskANN/include/tsl/robin_set.h b/packages/leann-backend-diskann/third_party/DiskANN/include/tsl/robin_set.h deleted file mode 100644 index 4e4667e..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/include/tsl/robin_set.h +++ /dev/null @@ -1,535 +0,0 @@ -/** - * MIT License - * - * Copyright (c) 2017 Tessil - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ -#ifndef TSL_ROBIN_SET_H -#define TSL_ROBIN_SET_H - - -#include -#include -#include -#include -#include -#include -#include "robin_hash.h" - - -namespace tsl { - - -/** - * Implementation of a hash set using open-adressing and the robin hood hashing algorithm with backward shift deletion. - * - * For operations modifying the hash set (insert, erase, rehash, ...), the strong exception guarantee - * is only guaranteed when the expression `std::is_nothrow_swappable::value && - * std::is_nothrow_move_constructible::value` is true, otherwise if an exception - * is thrown during the swap or the move, the hash set may end up in a undefined state. Per the standard - * a `Key` with a noexcept copy constructor and no move constructor also satisfies the - * `std::is_nothrow_move_constructible::value` criterion (and will thus guarantee the - * strong exception for the set). - * - * When `StoreHash` is true, 32 bits of the hash are stored alongside the values. It can improve - * the performance during lookups if the `KeyEqual` function takes time (or engenders a cache-miss for example) - * as we then compare the stored hashes before comparing the keys. When `tsl::rh::power_of_two_growth_policy` is used - * as `GrowthPolicy`, it may also speed-up the rehash process as we can avoid to recalculate the hash. - * When it is detected that storing the hash will not incur any memory penality due to alignement (i.e. - * `sizeof(tsl::detail_robin_hash::bucket_entry) == - * sizeof(tsl::detail_robin_hash::bucket_entry)`) and `tsl::rh::power_of_two_growth_policy` is - * used, the hash will be stored even if `StoreHash` is false so that we can speed-up the rehash (but it will - * not be used on lookups unless `StoreHash` is true). - * - * `GrowthPolicy` defines how the set grows and consequently how a hash value is mapped to a bucket. - * By default the set uses `tsl::rh::power_of_two_growth_policy`. This policy keeps the number of buckets - * to a power of two and uses a mask to set the hash to a bucket instead of the slow modulo. - * Other growth policies are available and you may define your own growth policy, - * check `tsl::rh::power_of_two_growth_policy` for the interface. - * - * If the destructor of `Key` throws an exception, the behaviour of the class is undefined. - * - * Iterators invalidation: - * - clear, operator=, reserve, rehash: always invalidate the iterators. - * - insert, emplace, emplace_hint, operator[]: if there is an effective insert, invalidate the iterators. - * - erase: always invalidate the iterators. - */ -template, - class KeyEqual = std::equal_to, - class Allocator = std::allocator, - bool StoreHash = false, - class GrowthPolicy = tsl::rh::power_of_two_growth_policy<2>> -class robin_set { -private: - template - using has_is_transparent = tsl::detail_robin_hash::has_is_transparent; - - class KeySelect { - public: - using key_type = Key; - - const key_type& operator()(const Key& key) const noexcept { - return key; - } - - key_type& operator()(Key& key) noexcept { - return key; - } - }; - - using ht = detail_robin_hash::robin_hash; - -public: - using key_type = typename ht::key_type; - using value_type = typename ht::value_type; - using size_type = typename ht::size_type; - using difference_type = typename ht::difference_type; - using hasher = typename ht::hasher; - using key_equal = typename ht::key_equal; - using allocator_type = typename ht::allocator_type; - using reference = typename ht::reference; - using const_reference = typename ht::const_reference; - using pointer = typename ht::pointer; - using const_pointer = typename ht::const_pointer; - using iterator = typename ht::iterator; - using const_iterator = typename ht::const_iterator; - - - /* - * Constructors - */ - robin_set(): robin_set(ht::DEFAULT_INIT_BUCKETS_SIZE) { - } - - explicit robin_set(size_type bucket_count, - const Hash& hash = Hash(), - const KeyEqual& equal = KeyEqual(), - const Allocator& alloc = Allocator()): - m_ht(bucket_count, hash, equal, alloc, ht::DEFAULT_MAX_LOAD_FACTOR) - { - } - - robin_set(size_type bucket_count, - const Allocator& alloc): robin_set(bucket_count, Hash(), KeyEqual(), alloc) - { - } - - robin_set(size_type bucket_count, - const Hash& hash, - const Allocator& alloc): robin_set(bucket_count, hash, KeyEqual(), alloc) - { - } - - explicit robin_set(const Allocator& alloc): robin_set(ht::DEFAULT_INIT_BUCKETS_SIZE, alloc) { - } - - template - robin_set(InputIt first, InputIt last, - size_type bucket_count = ht::DEFAULT_INIT_BUCKETS_SIZE, - const Hash& hash = Hash(), - const KeyEqual& equal = KeyEqual(), - const Allocator& alloc = Allocator()): robin_set(bucket_count, hash, equal, alloc) - { - insert(first, last); - } - - template - robin_set(InputIt first, InputIt last, - size_type bucket_count, - const Allocator& alloc): robin_set(first, last, bucket_count, Hash(), KeyEqual(), alloc) - { - } - - template - robin_set(InputIt first, InputIt last, - size_type bucket_count, - const Hash& hash, - const Allocator& alloc): robin_set(first, last, bucket_count, hash, KeyEqual(), alloc) - { - } - - robin_set(std::initializer_list init, - size_type bucket_count = ht::DEFAULT_INIT_BUCKETS_SIZE, - const Hash& hash = Hash(), - const KeyEqual& equal = KeyEqual(), - const Allocator& alloc = Allocator()): - robin_set(init.begin(), init.end(), bucket_count, hash, equal, alloc) - { - } - - robin_set(std::initializer_list init, - size_type bucket_count, - const Allocator& alloc): - robin_set(init.begin(), init.end(), bucket_count, Hash(), KeyEqual(), alloc) - { - } - - robin_set(std::initializer_list init, - size_type bucket_count, - const Hash& hash, - const Allocator& alloc): - robin_set(init.begin(), init.end(), bucket_count, hash, KeyEqual(), alloc) - { - } - - - robin_set& operator=(std::initializer_list ilist) { - m_ht.clear(); - - m_ht.reserve(ilist.size()); - m_ht.insert(ilist.begin(), ilist.end()); - - return *this; - } - - allocator_type get_allocator() const { return m_ht.get_allocator(); } - - - /* - * Iterators - */ - iterator begin() noexcept { return m_ht.begin(); } - const_iterator begin() const noexcept { return m_ht.begin(); } - const_iterator cbegin() const noexcept { return m_ht.cbegin(); } - - iterator end() noexcept { return m_ht.end(); } - const_iterator end() const noexcept { return m_ht.end(); } - const_iterator cend() const noexcept { return m_ht.cend(); } - - - /* - * Capacity - */ - bool empty() const noexcept { return m_ht.empty(); } - size_type size() const noexcept { return m_ht.size(); } - size_type max_size() const noexcept { return m_ht.max_size(); } - - /* - * Modifiers - */ - void clear() noexcept { m_ht.clear(); } - - - - - std::pair insert(const value_type& value) { - return m_ht.insert(value); - } - - std::pair insert(value_type&& value) { - return m_ht.insert(std::move(value)); - } - - iterator insert(const_iterator hint, const value_type& value) { - return m_ht.insert(hint, value); - } - - iterator insert(const_iterator hint, value_type&& value) { - return m_ht.insert(hint, std::move(value)); - } - - template - void insert(InputIt first, InputIt last) { - m_ht.insert(first, last); - } - - void insert(std::initializer_list ilist) { - m_ht.insert(ilist.begin(), ilist.end()); - } - - - - - /** - * Due to the way elements are stored, emplace will need to move or copy the key-value once. - * The method is equivalent to insert(value_type(std::forward(args)...)); - * - * Mainly here for compatibility with the std::unordered_map interface. - */ - template - std::pair emplace(Args&&... args) { - return m_ht.emplace(std::forward(args)...); - } - - - - /** - * Due to the way elements are stored, emplace_hint will need to move or copy the key-value once. - * The method is equivalent to insert(hint, value_type(std::forward(args)...)); - * - * Mainly here for compatibility with the std::unordered_map interface. - */ - template - iterator emplace_hint(const_iterator hint, Args&&... args) { - return m_ht.emplace_hint(hint, std::forward(args)...); - } - - - - iterator erase(iterator pos) { return m_ht.erase(pos); } - iterator erase(const_iterator pos) { return m_ht.erase(pos); } - iterator erase(const_iterator first, const_iterator last) { return m_ht.erase(first, last); } - size_type erase(const key_type& key) { return m_ht.erase(key); } - - /** - * Use the hash value 'precalculated_hash' instead of hashing the key. The hash value should be the same - * as hash_function()(key). Usefull to speed-up the lookup to the value if you already have the hash. - */ - size_type erase(const key_type& key, std::size_t precalculated_hash) { - return m_ht.erase(key, precalculated_hash); - } - - /** - * This overload only participates in the overload resolution if the typedef KeyEqual::is_transparent exists. - * If so, K must be hashable and comparable to Key. - */ - template::value>::type* = nullptr> - size_type erase(const K& key) { return m_ht.erase(key); } - - /** - * @copydoc erase(const K& key) - * - * Use the hash value 'precalculated_hash' instead of hashing the key. The hash value should be the same - * as hash_function()(key). Usefull to speed-up the lookup to the value if you already have the hash. - */ - template::value>::type* = nullptr> - size_type erase(const K& key, std::size_t precalculated_hash) { - return m_ht.erase(key, precalculated_hash); - } - - - - void swap(robin_set& other) { other.m_ht.swap(m_ht); } - - - - /* - * Lookup - */ - size_type count(const Key& key) const { return m_ht.count(key); } - - /** - * Use the hash value 'precalculated_hash' instead of hashing the key. The hash value should be the same - * as hash_function()(key). Usefull to speed-up the lookup if you already have the hash. - */ - size_type count(const Key& key, std::size_t precalculated_hash) const { return m_ht.count(key, precalculated_hash); } - - /** - * This overload only participates in the overload resolution if the typedef KeyEqual::is_transparent exists. - * If so, K must be hashable and comparable to Key. - */ - template::value>::type* = nullptr> - size_type count(const K& key) const { return m_ht.count(key); } - - /** - * @copydoc count(const K& key) const - * - * Use the hash value 'precalculated_hash' instead of hashing the key. The hash value should be the same - * as hash_function()(key). Usefull to speed-up the lookup if you already have the hash. - */ - template::value>::type* = nullptr> - size_type count(const K& key, std::size_t precalculated_hash) const { return m_ht.count(key, precalculated_hash); } - - - - - iterator find(const Key& key) { return m_ht.find(key); } - - /** - * Use the hash value 'precalculated_hash' instead of hashing the key. The hash value should be the same - * as hash_function()(key). Usefull to speed-up the lookup if you already have the hash. - */ - iterator find(const Key& key, std::size_t precalculated_hash) { return m_ht.find(key, precalculated_hash); } - - const_iterator find(const Key& key) const { return m_ht.find(key); } - - /** - * @copydoc find(const Key& key, std::size_t precalculated_hash) - */ - const_iterator find(const Key& key, std::size_t precalculated_hash) const { return m_ht.find(key, precalculated_hash); } - - /** - * This overload only participates in the overload resolution if the typedef KeyEqual::is_transparent exists. - * If so, K must be hashable and comparable to Key. - */ - template::value>::type* = nullptr> - iterator find(const K& key) { return m_ht.find(key); } - - /** - * @copydoc find(const K& key) - * - * Use the hash value 'precalculated_hash' instead of hashing the key. The hash value should be the same - * as hash_function()(key). Usefull to speed-up the lookup if you already have the hash. - */ - template::value>::type* = nullptr> - iterator find(const K& key, std::size_t precalculated_hash) { return m_ht.find(key, precalculated_hash); } - - /** - * @copydoc find(const K& key) - */ - template::value>::type* = nullptr> - const_iterator find(const K& key) const { return m_ht.find(key); } - - /** - * @copydoc find(const K& key) - * - * Use the hash value 'precalculated_hash' instead of hashing the key. The hash value should be the same - * as hash_function()(key). Usefull to speed-up the lookup if you already have the hash. - */ - template::value>::type* = nullptr> - const_iterator find(const K& key, std::size_t precalculated_hash) const { return m_ht.find(key, precalculated_hash); } - - - - - std::pair equal_range(const Key& key) { return m_ht.equal_range(key); } - - /** - * Use the hash value 'precalculated_hash' instead of hashing the key. The hash value should be the same - * as hash_function()(key). Usefull to speed-up the lookup if you already have the hash. - */ - std::pair equal_range(const Key& key, std::size_t precalculated_hash) { - return m_ht.equal_range(key, precalculated_hash); - } - - std::pair equal_range(const Key& key) const { return m_ht.equal_range(key); } - - /** - * @copydoc equal_range(const Key& key, std::size_t precalculated_hash) - */ - std::pair equal_range(const Key& key, std::size_t precalculated_hash) const { - return m_ht.equal_range(key, precalculated_hash); - } - - /** - * This overload only participates in the overload resolution if the typedef KeyEqual::is_transparent exists. - * If so, K must be hashable and comparable to Key. - */ - template::value>::type* = nullptr> - std::pair equal_range(const K& key) { return m_ht.equal_range(key); } - - /** - * @copydoc equal_range(const K& key) - * - * Use the hash value 'precalculated_hash' instead of hashing the key. The hash value should be the same - * as hash_function()(key). Usefull to speed-up the lookup if you already have the hash. - */ - template::value>::type* = nullptr> - std::pair equal_range(const K& key, std::size_t precalculated_hash) { - return m_ht.equal_range(key, precalculated_hash); - } - - /** - * @copydoc equal_range(const K& key) - */ - template::value>::type* = nullptr> - std::pair equal_range(const K& key) const { return m_ht.equal_range(key); } - - /** - * @copydoc equal_range(const K& key, std::size_t precalculated_hash) - */ - template::value>::type* = nullptr> - std::pair equal_range(const K& key, std::size_t precalculated_hash) const { - return m_ht.equal_range(key, precalculated_hash); - } - - - - - /* - * Bucket interface - */ - size_type bucket_count() const { return m_ht.bucket_count(); } - size_type max_bucket_count() const { return m_ht.max_bucket_count(); } - - - /* - * Hash policy - */ - float load_factor() const { return m_ht.load_factor(); } - float max_load_factor() const { return m_ht.max_load_factor(); } - void max_load_factor(float ml) { m_ht.max_load_factor(ml); } - - void rehash(size_type count) { m_ht.rehash(count); } - void reserve(size_type count) { m_ht.reserve(count); } - - - /* - * Observers - */ - hasher hash_function() const { return m_ht.hash_function(); } - key_equal key_eq() const { return m_ht.key_eq(); } - - - /* - * Other - */ - - /** - * Convert a const_iterator to an iterator. - */ - iterator mutable_iterator(const_iterator pos) { - return m_ht.mutable_iterator(pos); - } - - friend bool operator==(const robin_set& lhs, const robin_set& rhs) { - if(lhs.size() != rhs.size()) { - return false; - } - - for(const auto& element_lhs: lhs) { - const auto it_element_rhs = rhs.find(element_lhs); - if(it_element_rhs == rhs.cend()) { - return false; - } - } - - return true; - } - - friend bool operator!=(const robin_set& lhs, const robin_set& rhs) { - return !operator==(lhs, rhs); - } - - friend void swap(robin_set& lhs, robin_set& rhs) { - lhs.swap(rhs); - } - -private: - ht m_ht; -}; - - -/** - * Same as `tsl::robin_set`. - */ -template, - class KeyEqual = std::equal_to, - class Allocator = std::allocator, - bool StoreHash = false> -using robin_pg_set = robin_set; - -} // end namespace tsl - -#endif - diff --git a/packages/leann-backend-diskann/third_party/DiskANN/include/tsl/sparse_growth_policy.h b/packages/leann-backend-diskann/third_party/DiskANN/include/tsl/sparse_growth_policy.h deleted file mode 100644 index d73aaaf..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/include/tsl/sparse_growth_policy.h +++ /dev/null @@ -1,301 +0,0 @@ -/** - * MIT License - * - * Copyright (c) 2017 Thibaut Goetghebuer-Planchon - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ -#ifndef TSL_SPARSE_GROWTH_POLICY_H -#define TSL_SPARSE_GROWTH_POLICY_H - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -namespace tsl { -namespace sh { - -/** - * Grow the hash table by a factor of GrowthFactor keeping the bucket count to a - * power of two. It allows the table to use a mask operation instead of a modulo - * operation to map a hash to a bucket. - * - * GrowthFactor must be a power of two >= 2. - */ -template -class power_of_two_growth_policy { - public: - /** - * Called on the hash table creation and on rehash. The number of buckets for - * the table is passed in parameter. This number is a minimum, the policy may - * update this value with a higher value if needed (but not lower). - * - * If 0 is given, min_bucket_count_in_out must still be 0 after the policy - * creation and bucket_for_hash must always return 0 in this case. - */ - explicit power_of_two_growth_policy(std::size_t &min_bucket_count_in_out) { - if (min_bucket_count_in_out > max_bucket_count()) { - throw std::length_error("The hash table exceeds its maximum size."); - } - - if (min_bucket_count_in_out > 0) { - min_bucket_count_in_out = - round_up_to_power_of_two(min_bucket_count_in_out); - m_mask = min_bucket_count_in_out - 1; - } else { - m_mask = 0; - } - } - - /** - * Return the bucket [0, bucket_count()) to which the hash belongs. - * If bucket_count() is 0, it must always return 0. - */ - std::size_t bucket_for_hash(std::size_t hash) const noexcept { - return hash & m_mask; - } - - /** - * Return the number of buckets that should be used on next growth. - */ - std::size_t next_bucket_count() const { - if ((m_mask + 1) > max_bucket_count() / GrowthFactor) { - throw std::length_error("The hash table exceeds its maximum size."); - } - - return (m_mask + 1) * GrowthFactor; - } - - /** - * Return the maximum number of buckets supported by the policy. - */ - std::size_t max_bucket_count() const { - // Largest power of two. - return (std::numeric_limits::max() / 2) + 1; - } - - /** - * Reset the growth policy as if it was created with a bucket count of 0. - * After a clear, the policy must always return 0 when bucket_for_hash is - * called. - */ - void clear() noexcept { m_mask = 0; } - - private: - static std::size_t round_up_to_power_of_two(std::size_t value) { - if (is_power_of_two(value)) { - return value; - } - - if (value == 0) { - return 1; - } - - --value; - for (std::size_t i = 1; i < sizeof(std::size_t) * CHAR_BIT; i *= 2) { - value |= value >> i; - } - - return value + 1; - } - - static constexpr bool is_power_of_two(std::size_t value) { - return value != 0 && (value & (value - 1)) == 0; - } - - protected: - static_assert(is_power_of_two(GrowthFactor) && GrowthFactor >= 2, - "GrowthFactor must be a power of two >= 2."); - - std::size_t m_mask; -}; - -/** - * Grow the hash table by GrowthFactor::num / GrowthFactor::den and use a modulo - * to map a hash to a bucket. Slower but it can be useful if you want a slower - * growth. - */ -template > -class mod_growth_policy { - public: - explicit mod_growth_policy(std::size_t &min_bucket_count_in_out) { - if (min_bucket_count_in_out > max_bucket_count()) { - throw std::length_error("The hash table exceeds its maximum size."); - } - - if (min_bucket_count_in_out > 0) { - m_mod = min_bucket_count_in_out; - } else { - m_mod = 1; - } - } - - std::size_t bucket_for_hash(std::size_t hash) const noexcept { - return hash % m_mod; - } - - std::size_t next_bucket_count() const { - if (m_mod == max_bucket_count()) { - throw std::length_error("The hash table exceeds its maximum size."); - } - - const double next_bucket_count = - std::ceil(double(m_mod) * REHASH_SIZE_MULTIPLICATION_FACTOR); - if (!std::isnormal(next_bucket_count)) { - throw std::length_error("The hash table exceeds its maximum size."); - } - - if (next_bucket_count > double(max_bucket_count())) { - return max_bucket_count(); - } else { - return std::size_t(next_bucket_count); - } - } - - std::size_t max_bucket_count() const { return MAX_BUCKET_COUNT; } - - void clear() noexcept { m_mod = 1; } - - private: - static constexpr double REHASH_SIZE_MULTIPLICATION_FACTOR = - 1.0 * GrowthFactor::num / GrowthFactor::den; - static const std::size_t MAX_BUCKET_COUNT = - std::size_t(double(std::numeric_limits::max() / - REHASH_SIZE_MULTIPLICATION_FACTOR)); - - static_assert(REHASH_SIZE_MULTIPLICATION_FACTOR >= 1.1, - "Growth factor should be >= 1.1."); - - std::size_t m_mod; -}; - -/** - * Grow the hash table by using prime numbers as bucket count. Slower than - * tsl::sh::power_of_two_growth_policy in general but will probably distribute - * the values around better in the buckets with a poor hash function. - * - * To allow the compiler to optimize the modulo operation, a lookup table is - * used with constant primes numbers. - * - * With a switch the code would look like: - * \code - * switch(iprime) { // iprime is the current prime of the hash table - * case 0: hash % 5ul; - * break; - * case 1: hash % 17ul; - * break; - * case 2: hash % 29ul; - * break; - * ... - * } - * \endcode - * - * Due to the constant variable in the modulo the compiler is able to optimize - * the operation by a series of multiplications, substractions and shifts. - * - * The 'hash % 5' could become something like 'hash - (hash * 0xCCCCCCCD) >> 34) - * * 5' in a 64 bits environment. - */ -class prime_growth_policy { - public: - explicit prime_growth_policy(std::size_t &min_bucket_count_in_out) { - auto it_prime = std::lower_bound(primes().begin(), primes().end(), - min_bucket_count_in_out); - if (it_prime == primes().end()) { - throw std::length_error("The hash table exceeds its maximum size."); - } - - m_iprime = - static_cast(std::distance(primes().begin(), it_prime)); - if (min_bucket_count_in_out > 0) { - min_bucket_count_in_out = *it_prime; - } else { - min_bucket_count_in_out = 0; - } - } - - std::size_t bucket_for_hash(std::size_t hash) const noexcept { - return mod_prime()[m_iprime](hash); - } - - std::size_t next_bucket_count() const { - if (m_iprime + 1 >= primes().size()) { - throw std::length_error("The hash table exceeds its maximum size."); - } - - return primes()[m_iprime + 1]; - } - - std::size_t max_bucket_count() const { return primes().back(); } - - void clear() noexcept { m_iprime = 0; } - - private: - static const std::array &primes() { - static const std::array PRIMES = { - {1ul, 5ul, 17ul, 29ul, 37ul, - 53ul, 67ul, 79ul, 97ul, 131ul, - 193ul, 257ul, 389ul, 521ul, 769ul, - 1031ul, 1543ul, 2053ul, 3079ul, 6151ul, - 12289ul, 24593ul, 49157ul, 98317ul, 196613ul, - 393241ul, 786433ul, 1572869ul, 3145739ul, 6291469ul, - 12582917ul, 25165843ul, 50331653ul, 100663319ul, 201326611ul, - 402653189ul, 805306457ul, 1610612741ul, 3221225473ul, 4294967291ul}}; - - static_assert( - std::numeric_limits::max() >= PRIMES.size(), - "The type of m_iprime is not big enough."); - - return PRIMES; - } - - static const std::array &mod_prime() { - // MOD_PRIME[iprime](hash) returns hash % PRIMES[iprime]. This table allows - // for faster modulo as the compiler can optimize the modulo code better - // with a constant known at the compilation. - static const std::array MOD_PRIME = { - {&mod<0>, &mod<1>, &mod<2>, &mod<3>, &mod<4>, &mod<5>, &mod<6>, - &mod<7>, &mod<8>, &mod<9>, &mod<10>, &mod<11>, &mod<12>, &mod<13>, - &mod<14>, &mod<15>, &mod<16>, &mod<17>, &mod<18>, &mod<19>, &mod<20>, - &mod<21>, &mod<22>, &mod<23>, &mod<24>, &mod<25>, &mod<26>, &mod<27>, - &mod<28>, &mod<29>, &mod<30>, &mod<31>, &mod<32>, &mod<33>, &mod<34>, - &mod<35>, &mod<36>, &mod<37>, &mod<38>, &mod<39>}}; - - return MOD_PRIME; - } - - template - static std::size_t mod(std::size_t hash) { - return hash % primes()[IPrime]; - } - - private: - unsigned int m_iprime; -}; - -} // namespace sh -} // namespace tsl - -#endif diff --git a/packages/leann-backend-diskann/third_party/DiskANN/include/tsl/sparse_hash.h b/packages/leann-backend-diskann/third_party/DiskANN/include/tsl/sparse_hash.h deleted file mode 100644 index e2115b4..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/include/tsl/sparse_hash.h +++ /dev/null @@ -1,2215 +0,0 @@ -/** - * MIT License - * - * Copyright (c) 2017 Thibaut Goetghebuer-Planchon - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ -#ifndef TSL_SPARSE_HASH_H -#define TSL_SPARSE_HASH_H - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "sparse_growth_policy.h" - -#ifdef __INTEL_COMPILER -#include // For _popcnt32 and _popcnt64 -#endif - -#ifdef _MSC_VER -#include // For __cpuid, __popcnt and __popcnt64 -#endif - -#ifdef TSL_DEBUG -#define tsl_sh_assert(expr) assert(expr) -#else -#define tsl_sh_assert(expr) (static_cast(0)) -#endif - -namespace tsl { - -namespace sh { -enum class probing { linear, quadratic }; - -enum class exception_safety { basic, strong }; - -enum class sparsity { high, medium, low }; -} // namespace sh - -namespace detail_popcount { -/** - * Define the popcount(ll) methods and pick-up the best depending on the - * compiler. - */ - -// From Wikipedia: https://en.wikipedia.org/wiki/Hamming_weight -inline int fallback_popcountll(unsigned long long int x) { - static_assert( - sizeof(unsigned long long int) == sizeof(std::uint64_t), - "sizeof(unsigned long long int) must be equal to sizeof(std::uint64_t). " - "Open a feature request if you need support for a platform where it " - "isn't the case."); - - const std::uint64_t m1 = 0x5555555555555555ull; - const std::uint64_t m2 = 0x3333333333333333ull; - const std::uint64_t m4 = 0x0f0f0f0f0f0f0f0full; - const std::uint64_t h01 = 0x0101010101010101ull; - - x -= (x >> 1ull) & m1; - x = (x & m2) + ((x >> 2ull) & m2); - x = (x + (x >> 4ull)) & m4; - return static_cast((x * h01) >> (64ull - 8ull)); -} - -inline int fallback_popcount(unsigned int x) { - static_assert(sizeof(unsigned int) == sizeof(std::uint32_t) || - sizeof(unsigned int) == sizeof(std::uint64_t), - "sizeof(unsigned int) must be equal to sizeof(std::uint32_t) " - "or sizeof(std::uint64_t). " - "Open a feature request if you need support for a platform " - "where it isn't the case."); - - if (sizeof(unsigned int) == sizeof(std::uint32_t)) { - const std::uint32_t m1 = 0x55555555; - const std::uint32_t m2 = 0x33333333; - const std::uint32_t m4 = 0x0f0f0f0f; - const std::uint32_t h01 = 0x01010101; - - x -= (x >> 1) & m1; - x = (x & m2) + ((x >> 2) & m2); - x = (x + (x >> 4)) & m4; - return static_cast((x * h01) >> (32 - 8)); - } else { - return fallback_popcountll(x); - } -} - -#if defined(__clang__) || defined(__GNUC__) -inline int popcountll(unsigned long long int value) { - return __builtin_popcountll(value); -} - -inline int popcount(unsigned int value) { return __builtin_popcount(value); } - -#elif defined(_MSC_VER) -/** - * We need to check for popcount support at runtime on Windows with __cpuid - * See https://msdn.microsoft.com/en-us/library/bb385231.aspx - */ -inline bool has_popcount_support() { - int cpu_infos[4]; - __cpuid(cpu_infos, 1); - return (cpu_infos[2] & (1 << 23)) != 0; -} - -inline int popcountll(unsigned long long int value) { -#ifdef _WIN64 - static_assert( - sizeof(unsigned long long int) == sizeof(std::int64_t), - "sizeof(unsigned long long int) must be equal to sizeof(std::int64_t). "); - - static const bool has_popcount = has_popcount_support(); - return has_popcount - ? static_cast(__popcnt64(static_cast(value))) - : fallback_popcountll(value); -#else - return fallback_popcountll(value); -#endif -} - -inline int popcount(unsigned int value) { - static_assert(sizeof(unsigned int) == sizeof(std::int32_t), - "sizeof(unsigned int) must be equal to sizeof(std::int32_t). "); - - static const bool has_popcount = has_popcount_support(); - return has_popcount - ? static_cast(__popcnt(static_cast(value))) - : fallback_popcount(value); -} - -#elif defined(__INTEL_COMPILER) -inline int popcountll(unsigned long long int value) { - static_assert(sizeof(unsigned long long int) == sizeof(__int64), ""); - return _popcnt64(static_cast<__int64>(value)); -} - -inline int popcount(unsigned int value) { - return _popcnt32(static_cast(value)); -} - -#else -inline int popcountll(unsigned long long int x) { - return fallback_popcountll(x); -} - -inline int popcount(unsigned int x) { return fallback_popcount(x); } - -#endif -} // namespace detail_popcount - -namespace detail_sparse_hash { - -template -struct make_void { - using type = void; -}; - -template -struct has_is_transparent : std::false_type {}; - -template -struct has_is_transparent::type> - : std::true_type {}; - -template -struct is_power_of_two_policy : std::false_type {}; - -template -struct is_power_of_two_policy> - : std::true_type {}; - -inline constexpr bool is_power_of_two(std::size_t value) { - return value != 0 && (value & (value - 1)) == 0; -} - -inline std::size_t round_up_to_power_of_two(std::size_t value) { - if (is_power_of_two(value)) { - return value; - } - - if (value == 0) { - return 1; - } - - --value; - for (std::size_t i = 1; i < sizeof(std::size_t) * CHAR_BIT; i *= 2) { - value |= value >> i; - } - - return value + 1; -} - -template -static T numeric_cast(U value, - const char *error_message = "numeric_cast() failed.") { - T ret = static_cast(value); - if (static_cast(ret) != value) { - throw std::runtime_error(error_message); - } - - const bool is_same_signedness = - (std::is_unsigned::value && std::is_unsigned::value) || - (std::is_signed::value && std::is_signed::value); - if (!is_same_signedness && (ret < T{}) != (value < U{})) { - throw std::runtime_error(error_message); - } - - return ret; -} - -/** - * Fixed size type used to represent size_type values on serialization. Need to - * be big enough to represent a std::size_t on 32 and 64 bits platforms, and - * must be the same size on both platforms. - */ -using slz_size_type = std::uint64_t; -static_assert(std::numeric_limits::max() >= - std::numeric_limits::max(), - "slz_size_type must be >= std::size_t"); - -template -static T deserialize_value(Deserializer &deserializer) { - // MSVC < 2017 is not conformant, circumvent the problem by removing the - // template keyword -#if defined(_MSC_VER) && _MSC_VER < 1910 - return deserializer.Deserializer::operator()(); -#else - return deserializer.Deserializer::template operator()(); -#endif -} - -/** - * WARNING: the sparse_array class doesn't free the ressources allocated through - * the allocator passed in parameter in each method. You have to manually call - * `clear(Allocator&)` when you don't need a sparse_array object anymore. - * - * The reason is that the sparse_array doesn't store the allocator to avoid - * wasting space in each sparse_array when the allocator has a size > 0. It only - * allocates/deallocates objects with the allocator that is passed in parameter. - * - * - * - * Index denotes a value between [0, BITMAP_NB_BITS), it is an index similar to - * std::vector. Offset denotes the real position in `m_values` corresponding to - * an index. - * - * We are using raw pointers instead of std::vector to avoid loosing - * 2*sizeof(size_t) bytes to store the capacity and size of the vector in each - * sparse_array. We know we can only store up to BITMAP_NB_BITS elements in the - * array, we don't need such big types. - * - * - * T must be nothrow move constructible and/or copy constructible. - * Behaviour is undefined if the destructor of T throws an exception. - * - * See https://smerity.com/articles/2015/google_sparsehash.html for details on - * the idea behinds the implementation. - * - * TODO Check to use std::realloc and std::memmove when possible - */ -template -class sparse_array { - public: - using value_type = T; - using size_type = std::uint_least8_t; - using allocator_type = Allocator; - using iterator = value_type *; - using const_iterator = const value_type *; - - private: - static const size_type CAPACITY_GROWTH_STEP = - (Sparsity == tsl::sh::sparsity::high) ? 2 - : (Sparsity == tsl::sh::sparsity::medium) - ? 4 - : 8; // (Sparsity == tsl::sh::sparsity::low) - - /** - * Bitmap size configuration. - * Use 32 bits for the bitmap on 32-bits or less environnement as popcount on - * 64 bits numbers is slow on these environnement. Use 64 bits bitmap - * otherwise. - */ -#if SIZE_MAX <= UINT32_MAX - using bitmap_type = std::uint_least32_t; - static const std::size_t BITMAP_NB_BITS = 32; - static const std::size_t BUCKET_SHIFT = 5; -#else - using bitmap_type = std::uint_least64_t; - static const std::size_t BITMAP_NB_BITS = 64; - static const std::size_t BUCKET_SHIFT = 6; -#endif - - static const std::size_t BUCKET_MASK = BITMAP_NB_BITS - 1; - - static_assert(is_power_of_two(BITMAP_NB_BITS), - "BITMAP_NB_BITS must be a power of two."); - static_assert(std::numeric_limits::digits >= BITMAP_NB_BITS, - "bitmap_type must be able to hold at least BITMAP_NB_BITS."); - static_assert((std::size_t(1) << BUCKET_SHIFT) == BITMAP_NB_BITS, - "(1 << BUCKET_SHIFT) must be equal to BITMAP_NB_BITS."); - static_assert(std::numeric_limits::max() >= BITMAP_NB_BITS, - "size_type must be big enough to hold BITMAP_NB_BITS."); - static_assert(std::is_unsigned::value, - "bitmap_type must be unsigned."); - static_assert((std::numeric_limits::max() & BUCKET_MASK) == - BITMAP_NB_BITS - 1, - ""); - - public: - /** - * Map an ibucket [0, bucket_count) in the hash table to a sparse_ibucket - * (a sparse_array holds multiple buckets, so there is less sparse_array than - * bucket_count). - * - * The bucket ibucket is in - * m_sparse_buckets[sparse_ibucket(ibucket)][index_in_sparse_bucket(ibucket)] - * instead of something like m_buckets[ibucket] in a classical hash table. - */ - static std::size_t sparse_ibucket(std::size_t ibucket) { - return ibucket >> BUCKET_SHIFT; - } - - /** - * Map an ibucket [0, bucket_count) in the hash table to an index in the - * sparse_array which corresponds to the bucket. - * - * The bucket ibucket is in - * m_sparse_buckets[sparse_ibucket(ibucket)][index_in_sparse_bucket(ibucket)] - * instead of something like m_buckets[ibucket] in a classical hash table. - */ - static typename sparse_array::size_type index_in_sparse_bucket( - std::size_t ibucket) { - return static_cast( - ibucket & sparse_array::BUCKET_MASK); - } - - static std::size_t nb_sparse_buckets(std::size_t bucket_count) noexcept { - if (bucket_count == 0) { - return 0; - } - - return std::max( - 1, sparse_ibucket(tsl::detail_sparse_hash::round_up_to_power_of_two( - bucket_count))); - } - - public: - sparse_array() noexcept - : m_values(nullptr), - m_bitmap_vals(0), - m_bitmap_deleted_vals(0), - m_nb_elements(0), - m_capacity(0), - m_last_array(false) {} - - explicit sparse_array(bool last_bucket) noexcept - : m_values(nullptr), - m_bitmap_vals(0), - m_bitmap_deleted_vals(0), - m_nb_elements(0), - m_capacity(0), - m_last_array(last_bucket) {} - - sparse_array(size_type capacity, Allocator &alloc) - : m_values(nullptr), - m_bitmap_vals(0), - m_bitmap_deleted_vals(0), - m_nb_elements(0), - m_capacity(capacity), - m_last_array(false) { - if (m_capacity > 0) { - m_values = alloc.allocate(m_capacity); - tsl_sh_assert(m_values != - nullptr); // allocate should throw if there is a failure - } - } - - sparse_array(const sparse_array &other, Allocator &alloc) - : m_values(nullptr), - m_bitmap_vals(other.m_bitmap_vals), - m_bitmap_deleted_vals(other.m_bitmap_deleted_vals), - m_nb_elements(0), - m_capacity(other.m_capacity), - m_last_array(other.m_last_array) { - tsl_sh_assert(other.m_capacity >= other.m_nb_elements); - if (m_capacity == 0) { - return; - } - - m_values = alloc.allocate(m_capacity); - tsl_sh_assert(m_values != - nullptr); // allocate should throw if there is a failure - try { - for (size_type i = 0; i < other.m_nb_elements; i++) { - construct_value(alloc, m_values + i, other.m_values[i]); - m_nb_elements++; - } - } catch (...) { - clear(alloc); - throw; - } - } - - sparse_array(sparse_array &&other) noexcept - : m_values(other.m_values), - m_bitmap_vals(other.m_bitmap_vals), - m_bitmap_deleted_vals(other.m_bitmap_deleted_vals), - m_nb_elements(other.m_nb_elements), - m_capacity(other.m_capacity), - m_last_array(other.m_last_array) { - other.m_values = nullptr; - other.m_bitmap_vals = 0; - other.m_bitmap_deleted_vals = 0; - other.m_nb_elements = 0; - other.m_capacity = 0; - } - - sparse_array(sparse_array &&other, Allocator &alloc) - : m_values(nullptr), - m_bitmap_vals(other.m_bitmap_vals), - m_bitmap_deleted_vals(other.m_bitmap_deleted_vals), - m_nb_elements(0), - m_capacity(other.m_capacity), - m_last_array(other.m_last_array) { - tsl_sh_assert(other.m_capacity >= other.m_nb_elements); - if (m_capacity == 0) { - return; - } - - m_values = alloc.allocate(m_capacity); - tsl_sh_assert(m_values != - nullptr); // allocate should throw if there is a failure - try { - for (size_type i = 0; i < other.m_nb_elements; i++) { - construct_value(alloc, m_values + i, std::move(other.m_values[i])); - m_nb_elements++; - } - } catch (...) { - clear(alloc); - throw; - } - } - - sparse_array &operator=(const sparse_array &) = delete; - sparse_array &operator=(sparse_array &&) = delete; - - ~sparse_array() noexcept { - // The code that manages the sparse_array must have called clear before - // destruction. See documentation of sparse_array for more details. - tsl_sh_assert(m_capacity == 0 && m_nb_elements == 0 && m_values == nullptr); - } - - iterator begin() noexcept { return m_values; } - iterator end() noexcept { return m_values + m_nb_elements; } - const_iterator begin() const noexcept { return cbegin(); } - const_iterator end() const noexcept { return cend(); } - const_iterator cbegin() const noexcept { return m_values; } - const_iterator cend() const noexcept { return m_values + m_nb_elements; } - - bool empty() const noexcept { return m_nb_elements == 0; } - - size_type size() const noexcept { return m_nb_elements; } - - void clear(allocator_type &alloc) noexcept { - destroy_and_deallocate_values(alloc, m_values, m_nb_elements, m_capacity); - - m_values = nullptr; - m_bitmap_vals = 0; - m_bitmap_deleted_vals = 0; - m_nb_elements = 0; - m_capacity = 0; - } - - bool last() const noexcept { return m_last_array; } - - void set_as_last() noexcept { m_last_array = true; } - - bool has_value(size_type index) const noexcept { - tsl_sh_assert(index < BITMAP_NB_BITS); - return (m_bitmap_vals & (bitmap_type(1) << index)) != 0; - } - - bool has_deleted_value(size_type index) const noexcept { - tsl_sh_assert(index < BITMAP_NB_BITS); - return (m_bitmap_deleted_vals & (bitmap_type(1) << index)) != 0; - } - - iterator value(size_type index) noexcept { - tsl_sh_assert(has_value(index)); - return m_values + index_to_offset(index); - } - - const_iterator value(size_type index) const noexcept { - tsl_sh_assert(has_value(index)); - return m_values + index_to_offset(index); - } - - /** - * Return iterator to set value. - */ - template - iterator set(allocator_type &alloc, size_type index, Args &&...value_args) { - tsl_sh_assert(!has_value(index)); - - const size_type offset = index_to_offset(index); - insert_at_offset(alloc, offset, std::forward(value_args)...); - - m_bitmap_vals = (m_bitmap_vals | (bitmap_type(1) << index)); - m_bitmap_deleted_vals = - (m_bitmap_deleted_vals & ~(bitmap_type(1) << index)); - - m_nb_elements++; - - tsl_sh_assert(has_value(index)); - tsl_sh_assert(!has_deleted_value(index)); - - return m_values + offset; - } - - iterator erase(allocator_type &alloc, iterator position) { - const size_type offset = - static_cast(std::distance(begin(), position)); - return erase(alloc, position, offset_to_index(offset)); - } - - // Return the next value or end if no next value - iterator erase(allocator_type &alloc, iterator position, size_type index) { - tsl_sh_assert(has_value(index)); - tsl_sh_assert(!has_deleted_value(index)); - - const size_type offset = - static_cast(std::distance(begin(), position)); - erase_at_offset(alloc, offset); - - m_bitmap_vals = (m_bitmap_vals & ~(bitmap_type(1) << index)); - m_bitmap_deleted_vals = (m_bitmap_deleted_vals | (bitmap_type(1) << index)); - - m_nb_elements--; - - tsl_sh_assert(!has_value(index)); - tsl_sh_assert(has_deleted_value(index)); - - return m_values + offset; - } - - void swap(sparse_array &other) { - using std::swap; - - swap(m_values, other.m_values); - swap(m_bitmap_vals, other.m_bitmap_vals); - swap(m_bitmap_deleted_vals, other.m_bitmap_deleted_vals); - swap(m_nb_elements, other.m_nb_elements); - swap(m_capacity, other.m_capacity); - swap(m_last_array, other.m_last_array); - } - - static iterator mutable_iterator(const_iterator pos) { - return const_cast(pos); - } - - template - void serialize(Serializer &serializer) const { - const slz_size_type sparse_bucket_size = m_nb_elements; - serializer(sparse_bucket_size); - - const slz_size_type bitmap_vals = m_bitmap_vals; - serializer(bitmap_vals); - - const slz_size_type bitmap_deleted_vals = m_bitmap_deleted_vals; - serializer(bitmap_deleted_vals); - - for (const value_type &value : *this) { - serializer(value); - } - } - - template - static sparse_array deserialize_hash_compatible(Deserializer &deserializer, - Allocator &alloc) { - const slz_size_type sparse_bucket_size = - deserialize_value(deserializer); - const slz_size_type bitmap_vals = - deserialize_value(deserializer); - const slz_size_type bitmap_deleted_vals = - deserialize_value(deserializer); - - if (sparse_bucket_size > BITMAP_NB_BITS) { - throw std::runtime_error( - "Deserialized sparse_bucket_size is too big for the platform. " - "Maximum should be BITMAP_NB_BITS."); - } - - sparse_array sarray; - if (sparse_bucket_size == 0) { - return sarray; - } - - sarray.m_bitmap_vals = numeric_cast( - bitmap_vals, "Deserialized bitmap_vals is too big."); - sarray.m_bitmap_deleted_vals = numeric_cast( - bitmap_deleted_vals, "Deserialized bitmap_deleted_vals is too big."); - - sarray.m_capacity = numeric_cast( - sparse_bucket_size, "Deserialized sparse_bucket_size is too big."); - sarray.m_values = alloc.allocate(sarray.m_capacity); - - try { - for (size_type ivalue = 0; ivalue < sarray.m_capacity; ivalue++) { - construct_value(alloc, sarray.m_values + ivalue, - deserialize_value(deserializer)); - sarray.m_nb_elements++; - } - } catch (...) { - sarray.clear(alloc); - throw; - } - - return sarray; - } - - /** - * Deserialize the values of the bucket and insert them all in sparse_hash - * through sparse_hash.insert(...). - */ - template - static void deserialize_values_into_sparse_hash(Deserializer &deserializer, - SparseHash &sparse_hash) { - const slz_size_type sparse_bucket_size = - deserialize_value(deserializer); - - const slz_size_type bitmap_vals = - deserialize_value(deserializer); - static_cast(bitmap_vals); // Ignore, not needed - - const slz_size_type bitmap_deleted_vals = - deserialize_value(deserializer); - static_cast(bitmap_deleted_vals); // Ignore, not needed - - for (slz_size_type ivalue = 0; ivalue < sparse_bucket_size; ivalue++) { - sparse_hash.insert(deserialize_value(deserializer)); - } - } - - private: - template - static void construct_value(allocator_type &alloc, value_type *value, - Args &&...value_args) { - std::allocator_traits::construct( - alloc, value, std::forward(value_args)...); - } - - static void destroy_value(allocator_type &alloc, value_type *value) noexcept { - std::allocator_traits::destroy(alloc, value); - } - - static void destroy_and_deallocate_values( - allocator_type &alloc, value_type *values, size_type nb_values, - size_type capacity_values) noexcept { - for (size_type i = 0; i < nb_values; i++) { - destroy_value(alloc, values + i); - } - - alloc.deallocate(values, capacity_values); - } - - static size_type popcount(bitmap_type val) noexcept { - if (sizeof(bitmap_type) <= sizeof(unsigned int)) { - return static_cast( - tsl::detail_popcount::popcount(static_cast(val))); - } else { - return static_cast(tsl::detail_popcount::popcountll(val)); - } - } - - size_type index_to_offset(size_type index) const noexcept { - tsl_sh_assert(index < BITMAP_NB_BITS); - return popcount(m_bitmap_vals & - ((bitmap_type(1) << index) - bitmap_type(1))); - } - - // TODO optimize - size_type offset_to_index(size_type offset) const noexcept { - tsl_sh_assert(offset < m_nb_elements); - - bitmap_type bitmap_vals = m_bitmap_vals; - size_type index = 0; - size_type nb_ones = 0; - - while (bitmap_vals != 0) { - if ((bitmap_vals & 0x1) == 1) { - if (nb_ones == offset) { - break; - } - - nb_ones++; - } - - index++; - bitmap_vals = bitmap_vals >> 1; - } - - return index; - } - - size_type next_capacity() const noexcept { - return static_cast(m_capacity + CAPACITY_GROWTH_STEP); - } - - /** - * Insertion - * - * Two situations: - * - Either we are in a situation where - * std::is_nothrow_move_constructible::value is true. In this - * case, on insertion we just reallocate m_values when we reach its capacity - * (i.e. m_nb_elements == m_capacity), otherwise we just put the new value at - * its appropriate place. We can easily keep the strong exception guarantee as - * moving the values around is safe. - * - Otherwise we are in a situation where - * std::is_nothrow_move_constructible::value is false. In this - * case on EACH insertion we allocate a new area of m_nb_elements + 1 where we - * copy the values of m_values into it and put the new value there. On - * success, we set m_values to this new area. Even if slower, it's the only - * way to preserve to strong exception guarantee. - */ - template ::value>::type * = nullptr> - void insert_at_offset(allocator_type &alloc, size_type offset, - Args &&...value_args) { - if (m_nb_elements < m_capacity) { - insert_at_offset_no_realloc(alloc, offset, - std::forward(value_args)...); - } else { - insert_at_offset_realloc(alloc, offset, next_capacity(), - std::forward(value_args)...); - } - } - - template ::value>::type * = nullptr> - void insert_at_offset(allocator_type &alloc, size_type offset, - Args &&...value_args) { - insert_at_offset_realloc(alloc, offset, m_nb_elements + 1, - std::forward(value_args)...); - } - - template ::value>::type * = nullptr> - void insert_at_offset_no_realloc(allocator_type &alloc, size_type offset, - Args &&...value_args) { - tsl_sh_assert(offset <= m_nb_elements); - tsl_sh_assert(m_nb_elements < m_capacity); - - for (size_type i = m_nb_elements; i > offset; i--) { - construct_value(alloc, m_values + i, std::move(m_values[i - 1])); - destroy_value(alloc, m_values + i - 1); - } - - try { - construct_value(alloc, m_values + offset, - std::forward(value_args)...); - } catch (...) { - for (size_type i = offset; i < m_nb_elements; i++) { - construct_value(alloc, m_values + i, std::move(m_values[i + 1])); - destroy_value(alloc, m_values + i + 1); - } - throw; - } - } - - template ::value>::type * = nullptr> - void insert_at_offset_realloc(allocator_type &alloc, size_type offset, - size_type new_capacity, Args &&...value_args) { - tsl_sh_assert(new_capacity > m_nb_elements); - - value_type *new_values = alloc.allocate(new_capacity); - // Allocate should throw if there is a failure - tsl_sh_assert(new_values != nullptr); - - try { - construct_value(alloc, new_values + offset, - std::forward(value_args)...); - } catch (...) { - alloc.deallocate(new_values, new_capacity); - throw; - } - - // Should not throw from here - for (size_type i = 0; i < offset; i++) { - construct_value(alloc, new_values + i, std::move(m_values[i])); - } - - for (size_type i = offset; i < m_nb_elements; i++) { - construct_value(alloc, new_values + i + 1, std::move(m_values[i])); - } - - destroy_and_deallocate_values(alloc, m_values, m_nb_elements, m_capacity); - - m_values = new_values; - m_capacity = new_capacity; - } - - template ::value>::type * = nullptr> - void insert_at_offset_realloc(allocator_type &alloc, size_type offset, - size_type new_capacity, Args &&...value_args) { - tsl_sh_assert(new_capacity > m_nb_elements); - - value_type *new_values = alloc.allocate(new_capacity); - // Allocate should throw if there is a failure - tsl_sh_assert(new_values != nullptr); - - size_type nb_new_values = 0; - try { - for (size_type i = 0; i < offset; i++) { - construct_value(alloc, new_values + i, m_values[i]); - nb_new_values++; - } - - construct_value(alloc, new_values + offset, - std::forward(value_args)...); - nb_new_values++; - - for (size_type i = offset; i < m_nb_elements; i++) { - construct_value(alloc, new_values + i + 1, m_values[i]); - nb_new_values++; - } - } catch (...) { - destroy_and_deallocate_values(alloc, new_values, nb_new_values, - new_capacity); - throw; - } - - tsl_sh_assert(nb_new_values == m_nb_elements + 1); - - destroy_and_deallocate_values(alloc, m_values, m_nb_elements, m_capacity); - - m_values = new_values; - m_capacity = new_capacity; - } - - /** - * Erasure - * - * Two situations: - * - Either we are in a situation where - * std::is_nothrow_move_constructible::value is true. Simply - * destroy the value and left-shift move the value on the right of offset. - * - Otherwise we are in a situation where - * std::is_nothrow_move_constructible::value is false. Copy all - * the values except the one at offset into a new heap area. On success, we - * set m_values to this new area. Even if slower, it's the only way to - * preserve to strong exception guarantee. - */ - template ::value>::type * = nullptr> - void erase_at_offset(allocator_type &alloc, size_type offset) noexcept { - tsl_sh_assert(offset < m_nb_elements); - - destroy_value(alloc, m_values + offset); - - for (size_type i = offset + 1; i < m_nb_elements; i++) { - construct_value(alloc, m_values + i - 1, std::move(m_values[i])); - destroy_value(alloc, m_values + i); - } - } - - template ::value>::type * = nullptr> - void erase_at_offset(allocator_type &alloc, size_type offset) { - tsl_sh_assert(offset < m_nb_elements); - - // Erasing the last element, don't need to reallocate. We keep the capacity. - if (offset + 1 == m_nb_elements) { - destroy_value(alloc, m_values + offset); - return; - } - - tsl_sh_assert(m_nb_elements > 1); - const size_type new_capacity = m_nb_elements - 1; - - value_type *new_values = alloc.allocate(new_capacity); - // Allocate should throw if there is a failure - tsl_sh_assert(new_values != nullptr); - - size_type nb_new_values = 0; - try { - for (size_type i = 0; i < m_nb_elements; i++) { - if (i != offset) { - construct_value(alloc, new_values + nb_new_values, m_values[i]); - nb_new_values++; - } - } - } catch (...) { - destroy_and_deallocate_values(alloc, new_values, nb_new_values, - new_capacity); - throw; - } - - tsl_sh_assert(nb_new_values == m_nb_elements - 1); - - destroy_and_deallocate_values(alloc, m_values, m_nb_elements, m_capacity); - - m_values = new_values; - m_capacity = new_capacity; - } - - private: - value_type *m_values; - - bitmap_type m_bitmap_vals; - bitmap_type m_bitmap_deleted_vals; - - size_type m_nb_elements; - size_type m_capacity; - bool m_last_array; -}; - -/** - * Internal common class used by `sparse_map` and `sparse_set`. - * - * `ValueType` is what will be stored by `sparse_hash` (usually `std::pair` for map and `Key` for set). - * - * `KeySelect` should be a `FunctionObject` which takes a `ValueType` in - * parameter and returns a reference to the key. - * - * `ValueSelect` should be a `FunctionObject` which takes a `ValueType` in - * parameter and returns a reference to the value. `ValueSelect` should be void - * if there is no value (in a set for example). - * - * The strong exception guarantee only holds if `ExceptionSafety` is set to - * `tsl::sh::exception_safety::strong`. - * - * `ValueType` must be nothrow move constructible and/or copy constructible. - * Behaviour is undefined if the destructor of `ValueType` throws. - * - * - * The class holds its buckets in a 2-dimensional fashion. Instead of having a - * linear `std::vector` for [0, bucket_count) where each bucket stores - * one value, we have a `std::vector` (m_sparse_buckets_data) - * where each `sparse_array` stores multiple values (up to - * `sparse_array::BITMAP_NB_BITS`). To convert a one dimensional `ibucket` - * position to a position in `std::vector` and a position in - * `sparse_array`, use respectively the methods - * `sparse_array::sparse_ibucket(ibucket)` and - * `sparse_array::index_in_sparse_bucket(ibucket)`. - */ -template -class sparse_hash : private Allocator, - private Hash, - private KeyEqual, - private GrowthPolicy { - private: - template - using has_mapped_type = - typename std::integral_constant::value>; - - static_assert( - noexcept(std::declval().bucket_for_hash(std::size_t(0))), - "GrowthPolicy::bucket_for_hash must be noexcept."); - static_assert(noexcept(std::declval().clear()), - "GrowthPolicy::clear must be noexcept."); - - public: - template - class sparse_iterator; - - using key_type = typename KeySelect::key_type; - using value_type = ValueType; - using size_type = std::size_t; - using difference_type = std::ptrdiff_t; - using hasher = Hash; - using key_equal = KeyEqual; - using allocator_type = Allocator; - using reference = value_type &; - using const_reference = const value_type &; - using pointer = value_type *; - using const_pointer = const value_type *; - using iterator = sparse_iterator; - using const_iterator = sparse_iterator; - - private: - using sparse_array = - tsl::detail_sparse_hash::sparse_array; - - using sparse_buckets_allocator = typename std::allocator_traits< - allocator_type>::template rebind_alloc; - using sparse_buckets_container = - std::vector; - - public: - /** - * The `operator*()` and `operator->()` methods return a const reference and - * const pointer respectively to the stored value type (`Key` for a set, - * `std::pair` for a map). - * - * In case of a map, to get a mutable reference to the value `T` associated to - * a key (the `.second` in the stored pair), you have to call `value()`. - */ - template - class sparse_iterator { - friend class sparse_hash; - - private: - using sparse_bucket_iterator = typename std::conditional< - IsConst, typename sparse_buckets_container::const_iterator, - typename sparse_buckets_container::iterator>::type; - - using sparse_array_iterator = - typename std::conditional::type; - - /** - * sparse_array_it should be nullptr if sparse_bucket_it == - * m_sparse_buckets_data.end(). (TODO better way?) - */ - sparse_iterator(sparse_bucket_iterator sparse_bucket_it, - sparse_array_iterator sparse_array_it) - : m_sparse_buckets_it(sparse_bucket_it), - m_sparse_array_it(sparse_array_it) {} - - public: - using iterator_category = std::forward_iterator_tag; - using value_type = const typename sparse_hash::value_type; - using difference_type = std::ptrdiff_t; - using reference = value_type &; - using pointer = value_type *; - - sparse_iterator() noexcept {} - - // Copy constructor from iterator to const_iterator. - template ::type * = nullptr> - sparse_iterator(const sparse_iterator &other) noexcept - : m_sparse_buckets_it(other.m_sparse_buckets_it), - m_sparse_array_it(other.m_sparse_array_it) {} - - sparse_iterator(const sparse_iterator &other) = default; - sparse_iterator(sparse_iterator &&other) = default; - sparse_iterator &operator=(const sparse_iterator &other) = default; - sparse_iterator &operator=(sparse_iterator &&other) = default; - - const typename sparse_hash::key_type &key() const { - return KeySelect()(*m_sparse_array_it); - } - - template ::value && - IsConst>::type * = nullptr> - const typename U::value_type &value() const { - return U()(*m_sparse_array_it); - } - - template ::value && - !IsConst>::type * = nullptr> - typename U::value_type &value() { - return U()(*m_sparse_array_it); - } - - reference operator*() const { return *m_sparse_array_it; } - - pointer operator->() const { return std::addressof(*m_sparse_array_it); } - - sparse_iterator &operator++() { - tsl_sh_assert(m_sparse_array_it != nullptr); - ++m_sparse_array_it; - - if (m_sparse_array_it == m_sparse_buckets_it->end()) { - do { - if (m_sparse_buckets_it->last()) { - ++m_sparse_buckets_it; - m_sparse_array_it = nullptr; - return *this; - } - - ++m_sparse_buckets_it; - } while (m_sparse_buckets_it->empty()); - - m_sparse_array_it = m_sparse_buckets_it->begin(); - } - - return *this; - } - - sparse_iterator operator++(int) { - sparse_iterator tmp(*this); - ++*this; - - return tmp; - } - - friend bool operator==(const sparse_iterator &lhs, - const sparse_iterator &rhs) { - return lhs.m_sparse_buckets_it == rhs.m_sparse_buckets_it && - lhs.m_sparse_array_it == rhs.m_sparse_array_it; - } - - friend bool operator!=(const sparse_iterator &lhs, - const sparse_iterator &rhs) { - return !(lhs == rhs); - } - - private: - sparse_bucket_iterator m_sparse_buckets_it; - sparse_array_iterator m_sparse_array_it; - }; - - public: - sparse_hash(size_type bucket_count, const Hash &hash, const KeyEqual &equal, - const Allocator &alloc, float max_load_factor) - : Allocator(alloc), - Hash(hash), - KeyEqual(equal), - GrowthPolicy(bucket_count), - m_sparse_buckets_data(alloc), - m_sparse_buckets(static_empty_sparse_bucket_ptr()), - m_bucket_count(bucket_count), - m_nb_elements(0), - m_nb_deleted_buckets(0) { - if (m_bucket_count > max_bucket_count()) { - throw std::length_error("The map exceeds its maximum size."); - } - - if (m_bucket_count > 0) { - /* - * We can't use the `vector(size_type count, const Allocator& alloc)` - * constructor as it's only available in C++14 and we need to support - * C++11. We thus must resize after using the `vector(const Allocator& - * alloc)` constructor. - * - * We can't use `vector(size_type count, const T& value, const Allocator& - * alloc)` as it requires the value T to be copyable. - */ - m_sparse_buckets_data.resize( - sparse_array::nb_sparse_buckets(bucket_count)); - m_sparse_buckets = m_sparse_buckets_data.data(); - - tsl_sh_assert(!m_sparse_buckets_data.empty()); - m_sparse_buckets_data.back().set_as_last(); - } - - this->max_load_factor(max_load_factor); - - // Check in the constructor instead of outside of a function to avoid - // compilation issues when value_type is not complete. - static_assert(std::is_nothrow_move_constructible::value || - std::is_copy_constructible::value, - "Key, and T if present, must be nothrow move constructible " - "and/or copy constructible."); - } - - ~sparse_hash() { clear(); } - - sparse_hash(const sparse_hash &other) - : Allocator(std::allocator_traits< - Allocator>::select_on_container_copy_construction(other)), - Hash(other), - KeyEqual(other), - GrowthPolicy(other), - m_sparse_buckets_data( - std::allocator_traits< - Allocator>::select_on_container_copy_construction(other)), - m_bucket_count(other.m_bucket_count), - m_nb_elements(other.m_nb_elements), - m_nb_deleted_buckets(other.m_nb_deleted_buckets), - m_load_threshold_rehash(other.m_load_threshold_rehash), - m_load_threshold_clear_deleted(other.m_load_threshold_clear_deleted), - m_max_load_factor(other.m_max_load_factor) { - copy_buckets_from(other), - m_sparse_buckets = m_sparse_buckets_data.empty() - ? static_empty_sparse_bucket_ptr() - : m_sparse_buckets_data.data(); - } - - sparse_hash(sparse_hash &&other) noexcept( - std::is_nothrow_move_constructible::value - &&std::is_nothrow_move_constructible::value - &&std::is_nothrow_move_constructible::value - &&std::is_nothrow_move_constructible::value - &&std::is_nothrow_move_constructible< - sparse_buckets_container>::value) - : Allocator(std::move(other)), - Hash(std::move(other)), - KeyEqual(std::move(other)), - GrowthPolicy(std::move(other)), - m_sparse_buckets_data(std::move(other.m_sparse_buckets_data)), - m_sparse_buckets(m_sparse_buckets_data.empty() - ? static_empty_sparse_bucket_ptr() - : m_sparse_buckets_data.data()), - m_bucket_count(other.m_bucket_count), - m_nb_elements(other.m_nb_elements), - m_nb_deleted_buckets(other.m_nb_deleted_buckets), - m_load_threshold_rehash(other.m_load_threshold_rehash), - m_load_threshold_clear_deleted(other.m_load_threshold_clear_deleted), - m_max_load_factor(other.m_max_load_factor) { - other.GrowthPolicy::clear(); - other.m_sparse_buckets_data.clear(); - other.m_sparse_buckets = static_empty_sparse_bucket_ptr(); - other.m_bucket_count = 0; - other.m_nb_elements = 0; - other.m_nb_deleted_buckets = 0; - other.m_load_threshold_rehash = 0; - other.m_load_threshold_clear_deleted = 0; - } - - sparse_hash &operator=(const sparse_hash &other) { - if (this != &other) { - clear(); - - if (std::allocator_traits< - Allocator>::propagate_on_container_copy_assignment::value) { - Allocator::operator=(other); - } - - Hash::operator=(other); - KeyEqual::operator=(other); - GrowthPolicy::operator=(other); - - if (std::allocator_traits< - Allocator>::propagate_on_container_copy_assignment::value) { - m_sparse_buckets_data = - sparse_buckets_container(static_cast(other)); - } else { - if (m_sparse_buckets_data.size() != - other.m_sparse_buckets_data.size()) { - m_sparse_buckets_data = - sparse_buckets_container(static_cast(*this)); - } else { - m_sparse_buckets_data.clear(); - } - } - - copy_buckets_from(other); - m_sparse_buckets = m_sparse_buckets_data.empty() - ? static_empty_sparse_bucket_ptr() - : m_sparse_buckets_data.data(); - - m_bucket_count = other.m_bucket_count; - m_nb_elements = other.m_nb_elements; - m_nb_deleted_buckets = other.m_nb_deleted_buckets; - m_load_threshold_rehash = other.m_load_threshold_rehash; - m_load_threshold_clear_deleted = other.m_load_threshold_clear_deleted; - m_max_load_factor = other.m_max_load_factor; - } - - return *this; - } - - sparse_hash &operator=(sparse_hash &&other) { - clear(); - - if (std::allocator_traits< - Allocator>::propagate_on_container_move_assignment::value) { - static_cast(*this) = - std::move(static_cast(other)); - m_sparse_buckets_data = std::move(other.m_sparse_buckets_data); - } else if (static_cast(*this) != - static_cast(other)) { - move_buckets_from(std::move(other)); - } else { - static_cast(*this) = - std::move(static_cast(other)); - m_sparse_buckets_data = std::move(other.m_sparse_buckets_data); - } - - m_sparse_buckets = m_sparse_buckets_data.empty() - ? static_empty_sparse_bucket_ptr() - : m_sparse_buckets_data.data(); - - static_cast(*this) = std::move(static_cast(other)); - static_cast(*this) = std::move(static_cast(other)); - static_cast(*this) = - std::move(static_cast(other)); - m_bucket_count = other.m_bucket_count; - m_nb_elements = other.m_nb_elements; - m_nb_deleted_buckets = other.m_nb_deleted_buckets; - m_load_threshold_rehash = other.m_load_threshold_rehash; - m_load_threshold_clear_deleted = other.m_load_threshold_clear_deleted; - m_max_load_factor = other.m_max_load_factor; - - other.GrowthPolicy::clear(); - other.m_sparse_buckets_data.clear(); - other.m_sparse_buckets = static_empty_sparse_bucket_ptr(); - other.m_bucket_count = 0; - other.m_nb_elements = 0; - other.m_nb_deleted_buckets = 0; - other.m_load_threshold_rehash = 0; - other.m_load_threshold_clear_deleted = 0; - - return *this; - } - - allocator_type get_allocator() const { - return static_cast(*this); - } - - /* - * Iterators - */ - iterator begin() noexcept { - auto begin = m_sparse_buckets_data.begin(); - while (begin != m_sparse_buckets_data.end() && begin->empty()) { - ++begin; - } - - return iterator(begin, (begin != m_sparse_buckets_data.end()) - ? begin->begin() - : nullptr); - } - - const_iterator begin() const noexcept { return cbegin(); } - - const_iterator cbegin() const noexcept { - auto begin = m_sparse_buckets_data.cbegin(); - while (begin != m_sparse_buckets_data.cend() && begin->empty()) { - ++begin; - } - - return const_iterator(begin, (begin != m_sparse_buckets_data.cend()) - ? begin->cbegin() - : nullptr); - } - - iterator end() noexcept { - return iterator(m_sparse_buckets_data.end(), nullptr); - } - - const_iterator end() const noexcept { return cend(); } - - const_iterator cend() const noexcept { - return const_iterator(m_sparse_buckets_data.cend(), nullptr); - } - - /* - * Capacity - */ - bool empty() const noexcept { return m_nb_elements == 0; } - - size_type size() const noexcept { return m_nb_elements; } - - size_type max_size() const noexcept { - return std::min(std::allocator_traits::max_size(), - m_sparse_buckets_data.max_size()); - } - - /* - * Modifiers - */ - void clear() noexcept { - for (auto &bucket : m_sparse_buckets_data) { - bucket.clear(*this); - } - - m_nb_elements = 0; - m_nb_deleted_buckets = 0; - } - - template - std::pair insert(P &&value) { - return insert_impl(KeySelect()(value), std::forward

(value)); - } - - template - iterator insert_hint(const_iterator hint, P &&value) { - if (hint != cend() && - compare_keys(KeySelect()(*hint), KeySelect()(value))) { - return mutable_iterator(hint); - } - - return insert(std::forward

(value)).first; - } - - template - void insert(InputIt first, InputIt last) { - if (std::is_base_of< - std::forward_iterator_tag, - typename std::iterator_traits::iterator_category>::value) { - const auto nb_elements_insert = std::distance(first, last); - const size_type nb_free_buckets = m_load_threshold_rehash - size(); - tsl_sh_assert(m_load_threshold_rehash >= size()); - - if (nb_elements_insert > 0 && - nb_free_buckets < size_type(nb_elements_insert)) { - reserve(size() + size_type(nb_elements_insert)); - } - } - - for (; first != last; ++first) { - insert(*first); - } - } - - template - std::pair insert_or_assign(K &&key, M &&obj) { - auto it = try_emplace(std::forward(key), std::forward(obj)); - if (!it.second) { - it.first.value() = std::forward(obj); - } - - return it; - } - - template - iterator insert_or_assign(const_iterator hint, K &&key, M &&obj) { - if (hint != cend() && compare_keys(KeySelect()(*hint), key)) { - auto it = mutable_iterator(hint); - it.value() = std::forward(obj); - - return it; - } - - return insert_or_assign(std::forward(key), std::forward(obj)).first; - } - - template - std::pair emplace(Args &&...args) { - return insert(value_type(std::forward(args)...)); - } - - template - iterator emplace_hint(const_iterator hint, Args &&...args) { - return insert_hint(hint, value_type(std::forward(args)...)); - } - - template - std::pair try_emplace(K &&key, Args &&...args) { - return insert_impl(key, std::piecewise_construct, - std::forward_as_tuple(std::forward(key)), - std::forward_as_tuple(std::forward(args)...)); - } - - template - iterator try_emplace_hint(const_iterator hint, K &&key, Args &&...args) { - if (hint != cend() && compare_keys(KeySelect()(*hint), key)) { - return mutable_iterator(hint); - } - - return try_emplace(std::forward(key), std::forward(args)...).first; - } - - /** - * Here to avoid `template size_type erase(const K& key)` being used - * when we use an iterator instead of a const_iterator. - */ - iterator erase(iterator pos) { - tsl_sh_assert(pos != end() && m_nb_elements > 0); - auto it_sparse_array_next = - pos.m_sparse_buckets_it->erase(*this, pos.m_sparse_array_it); - m_nb_elements--; - m_nb_deleted_buckets++; - - if (it_sparse_array_next == pos.m_sparse_buckets_it->end()) { - auto it_sparse_buckets_next = pos.m_sparse_buckets_it; - do { - ++it_sparse_buckets_next; - } while (it_sparse_buckets_next != m_sparse_buckets_data.end() && - it_sparse_buckets_next->empty()); - - if (it_sparse_buckets_next == m_sparse_buckets_data.end()) { - return end(); - } else { - return iterator(it_sparse_buckets_next, - it_sparse_buckets_next->begin()); - } - } else { - return iterator(pos.m_sparse_buckets_it, it_sparse_array_next); - } - } - - iterator erase(const_iterator pos) { return erase(mutable_iterator(pos)); } - - iterator erase(const_iterator first, const_iterator last) { - if (first == last) { - return mutable_iterator(first); - } - - // TODO Optimize, could avoid the call to std::distance. - const size_type nb_elements_to_erase = - static_cast(std::distance(first, last)); - auto to_delete = mutable_iterator(first); - for (size_type i = 0; i < nb_elements_to_erase; i++) { - to_delete = erase(to_delete); - } - - return to_delete; - } - - template - size_type erase(const K &key) { - return erase(key, hash_key(key)); - } - - template - size_type erase(const K &key, std::size_t hash) { - return erase_impl(key, hash); - } - - void swap(sparse_hash &other) { - using std::swap; - - if (std::allocator_traits::propagate_on_container_swap::value) { - swap(static_cast(*this), static_cast(other)); - } else { - tsl_sh_assert(static_cast(*this) == - static_cast(other)); - } - - swap(static_cast(*this), static_cast(other)); - swap(static_cast(*this), static_cast(other)); - swap(static_cast(*this), - static_cast(other)); - swap(m_sparse_buckets_data, other.m_sparse_buckets_data); - swap(m_sparse_buckets, other.m_sparse_buckets); - swap(m_bucket_count, other.m_bucket_count); - swap(m_nb_elements, other.m_nb_elements); - swap(m_nb_deleted_buckets, other.m_nb_deleted_buckets); - swap(m_load_threshold_rehash, other.m_load_threshold_rehash); - swap(m_load_threshold_clear_deleted, other.m_load_threshold_clear_deleted); - swap(m_max_load_factor, other.m_max_load_factor); - } - - /* - * Lookup - */ - template < - class K, class U = ValueSelect, - typename std::enable_if::value>::type * = nullptr> - typename U::value_type &at(const K &key) { - return at(key, hash_key(key)); - } - - template < - class K, class U = ValueSelect, - typename std::enable_if::value>::type * = nullptr> - typename U::value_type &at(const K &key, std::size_t hash) { - return const_cast( - static_cast(this)->at(key, hash)); - } - - template < - class K, class U = ValueSelect, - typename std::enable_if::value>::type * = nullptr> - const typename U::value_type &at(const K &key) const { - return at(key, hash_key(key)); - } - - template < - class K, class U = ValueSelect, - typename std::enable_if::value>::type * = nullptr> - const typename U::value_type &at(const K &key, std::size_t hash) const { - auto it = find(key, hash); - if (it != cend()) { - return it.value(); - } else { - throw std::out_of_range("Couldn't find key."); - } - } - - template < - class K, class U = ValueSelect, - typename std::enable_if::value>::type * = nullptr> - typename U::value_type &operator[](K &&key) { - return try_emplace(std::forward(key)).first.value(); - } - - template - bool contains(const K &key) const { - return contains(key, hash_key(key)); - } - - template - bool contains(const K &key, std::size_t hash) const { - return count(key, hash) != 0; - } - - template - size_type count(const K &key) const { - return count(key, hash_key(key)); - } - - template - size_type count(const K &key, std::size_t hash) const { - if (find(key, hash) != cend()) { - return 1; - } else { - return 0; - } - } - - template - iterator find(const K &key) { - return find_impl(key, hash_key(key)); - } - - template - iterator find(const K &key, std::size_t hash) { - return find_impl(key, hash); - } - - template - const_iterator find(const K &key) const { - return find_impl(key, hash_key(key)); - } - - template - const_iterator find(const K &key, std::size_t hash) const { - return find_impl(key, hash); - } - - template - std::pair equal_range(const K &key) { - return equal_range(key, hash_key(key)); - } - - template - std::pair equal_range(const K &key, std::size_t hash) { - iterator it = find(key, hash); - return std::make_pair(it, (it == end()) ? it : std::next(it)); - } - - template - std::pair equal_range(const K &key) const { - return equal_range(key, hash_key(key)); - } - - template - std::pair equal_range( - const K &key, std::size_t hash) const { - const_iterator it = find(key, hash); - return std::make_pair(it, (it == cend()) ? it : std::next(it)); - } - - /* - * Bucket interface - */ - size_type bucket_count() const { return m_bucket_count; } - - size_type max_bucket_count() const { - return m_sparse_buckets_data.max_size(); - } - - /* - * Hash policy - */ - float load_factor() const { - if (bucket_count() == 0) { - return 0; - } - - return float(m_nb_elements) / float(bucket_count()); - } - - float max_load_factor() const { return m_max_load_factor; } - - void max_load_factor(float ml) { - m_max_load_factor = std::max(0.1f, std::min(ml, 0.8f)); - m_load_threshold_rehash = - size_type(float(bucket_count()) * m_max_load_factor); - - const float max_load_factor_with_deleted_buckets = - m_max_load_factor + 0.5f * (1.0f - m_max_load_factor); - tsl_sh_assert(max_load_factor_with_deleted_buckets > 0.0f && - max_load_factor_with_deleted_buckets <= 1.0f); - m_load_threshold_clear_deleted = - size_type(float(bucket_count()) * max_load_factor_with_deleted_buckets); - } - - void rehash(size_type count) { - count = std::max(count, - size_type(std::ceil(float(size()) / max_load_factor()))); - rehash_impl(count); - } - - void reserve(size_type count) { - rehash(size_type(std::ceil(float(count) / max_load_factor()))); - } - - /* - * Observers - */ - hasher hash_function() const { return static_cast(*this); } - - key_equal key_eq() const { return static_cast(*this); } - - /* - * Other - */ - iterator mutable_iterator(const_iterator pos) { - auto it_sparse_buckets = - m_sparse_buckets_data.begin() + - std::distance(m_sparse_buckets_data.cbegin(), pos.m_sparse_buckets_it); - - return iterator(it_sparse_buckets, - sparse_array::mutable_iterator(pos.m_sparse_array_it)); - } - - template - void serialize(Serializer &serializer) const { - serialize_impl(serializer); - } - - template - void deserialize(Deserializer &deserializer, bool hash_compatible) { - deserialize_impl(deserializer, hash_compatible); - } - - private: - template - std::size_t hash_key(const K &key) const { - return Hash::operator()(key); - } - - template - bool compare_keys(const K1 &key1, const K2 &key2) const { - return KeyEqual::operator()(key1, key2); - } - - size_type bucket_for_hash(std::size_t hash) const { - const std::size_t bucket = GrowthPolicy::bucket_for_hash(hash); - tsl_sh_assert(sparse_array::sparse_ibucket(bucket) < - m_sparse_buckets_data.size() || - (bucket == 0 && m_sparse_buckets_data.empty())); - - return bucket; - } - - template ::value>::type * = - nullptr> - size_type next_bucket(size_type ibucket, size_type iprobe) const { - (void)iprobe; - if (Probing == tsl::sh::probing::linear) { - return (ibucket + 1) & this->m_mask; - } else { - tsl_sh_assert(Probing == tsl::sh::probing::quadratic); - return (ibucket + iprobe) & this->m_mask; - } - } - - template ::value>::type * = - nullptr> - size_type next_bucket(size_type ibucket, size_type iprobe) const { - (void)iprobe; - if (Probing == tsl::sh::probing::linear) { - ibucket++; - return (ibucket != bucket_count()) ? ibucket : 0; - } else { - tsl_sh_assert(Probing == tsl::sh::probing::quadratic); - ibucket += iprobe; - return (ibucket < bucket_count()) ? ibucket : ibucket % bucket_count(); - } - } - - // TODO encapsulate m_sparse_buckets_data to avoid the managing the allocator - void copy_buckets_from(const sparse_hash &other) { - m_sparse_buckets_data.reserve(other.m_sparse_buckets_data.size()); - - try { - for (const auto &bucket : other.m_sparse_buckets_data) { - m_sparse_buckets_data.emplace_back(bucket, - static_cast(*this)); - } - } catch (...) { - clear(); - throw; - } - - tsl_sh_assert(m_sparse_buckets_data.empty() || - m_sparse_buckets_data.back().last()); - } - - void move_buckets_from(sparse_hash &&other) { - m_sparse_buckets_data.reserve(other.m_sparse_buckets_data.size()); - - try { - for (auto &&bucket : other.m_sparse_buckets_data) { - m_sparse_buckets_data.emplace_back(std::move(bucket), - static_cast(*this)); - } - } catch (...) { - clear(); - throw; - } - - tsl_sh_assert(m_sparse_buckets_data.empty() || - m_sparse_buckets_data.back().last()); - } - - template - std::pair insert_impl(const K &key, - Args &&...value_type_args) { - if (size() >= m_load_threshold_rehash) { - rehash_impl(GrowthPolicy::next_bucket_count()); - } else if (size() + m_nb_deleted_buckets >= - m_load_threshold_clear_deleted) { - clear_deleted_buckets(); - } - tsl_sh_assert(!m_sparse_buckets_data.empty()); - - /** - * We must insert the value in the first empty or deleted bucket we find. If - * we first find a deleted bucket, we still have to continue the search - * until we find an empty bucket or until we have searched all the buckets - * to be sure that the value is not in the hash table. We thus remember the - * position, if any, of the first deleted bucket we have encountered so we - * can insert it there if needed. - */ - bool found_first_deleted_bucket = false; - std::size_t sparse_ibucket_first_deleted = 0; - typename sparse_array::size_type index_in_sparse_bucket_first_deleted = 0; - - const std::size_t hash = hash_key(key); - std::size_t ibucket = bucket_for_hash(hash); - - std::size_t probe = 0; - while (true) { - std::size_t sparse_ibucket = sparse_array::sparse_ibucket(ibucket); - auto index_in_sparse_bucket = - sparse_array::index_in_sparse_bucket(ibucket); - - if (m_sparse_buckets[sparse_ibucket].has_value(index_in_sparse_bucket)) { - auto value_it = - m_sparse_buckets[sparse_ibucket].value(index_in_sparse_bucket); - if (compare_keys(key, KeySelect()(*value_it))) { - return std::make_pair( - iterator(m_sparse_buckets_data.begin() + sparse_ibucket, - value_it), - false); - } - } else if (m_sparse_buckets[sparse_ibucket].has_deleted_value( - index_in_sparse_bucket) && - probe < m_bucket_count) { - if (!found_first_deleted_bucket) { - found_first_deleted_bucket = true; - sparse_ibucket_first_deleted = sparse_ibucket; - index_in_sparse_bucket_first_deleted = index_in_sparse_bucket; - } - } else if (found_first_deleted_bucket) { - auto it = insert_in_bucket(sparse_ibucket_first_deleted, - index_in_sparse_bucket_first_deleted, - std::forward(value_type_args)...); - m_nb_deleted_buckets--; - - return it; - } else { - return insert_in_bucket(sparse_ibucket, index_in_sparse_bucket, - std::forward(value_type_args)...); - } - - probe++; - ibucket = next_bucket(ibucket, probe); - } - } - - template - std::pair insert_in_bucket( - std::size_t sparse_ibucket, - typename sparse_array::size_type index_in_sparse_bucket, - Args &&...value_type_args) { - auto value_it = m_sparse_buckets[sparse_ibucket].set( - *this, index_in_sparse_bucket, std::forward(value_type_args)...); - m_nb_elements++; - - return std::make_pair( - iterator(m_sparse_buckets_data.begin() + sparse_ibucket, value_it), - true); - } - - template - size_type erase_impl(const K &key, std::size_t hash) { - std::size_t ibucket = bucket_for_hash(hash); - - std::size_t probe = 0; - while (true) { - const std::size_t sparse_ibucket = sparse_array::sparse_ibucket(ibucket); - const auto index_in_sparse_bucket = - sparse_array::index_in_sparse_bucket(ibucket); - - if (m_sparse_buckets[sparse_ibucket].has_value(index_in_sparse_bucket)) { - auto value_it = - m_sparse_buckets[sparse_ibucket].value(index_in_sparse_bucket); - if (compare_keys(key, KeySelect()(*value_it))) { - m_sparse_buckets[sparse_ibucket].erase(*this, value_it, - index_in_sparse_bucket); - m_nb_elements--; - m_nb_deleted_buckets++; - - return 1; - } - } else if (!m_sparse_buckets[sparse_ibucket].has_deleted_value( - index_in_sparse_bucket) || - probe >= m_bucket_count) { - return 0; - } - - probe++; - ibucket = next_bucket(ibucket, probe); - } - } - - template - iterator find_impl(const K &key, std::size_t hash) { - return mutable_iterator( - static_cast(this)->find(key, hash)); - } - - template - const_iterator find_impl(const K &key, std::size_t hash) const { - std::size_t ibucket = bucket_for_hash(hash); - - std::size_t probe = 0; - while (true) { - const std::size_t sparse_ibucket = sparse_array::sparse_ibucket(ibucket); - const auto index_in_sparse_bucket = - sparse_array::index_in_sparse_bucket(ibucket); - - if (m_sparse_buckets[sparse_ibucket].has_value(index_in_sparse_bucket)) { - auto value_it = - m_sparse_buckets[sparse_ibucket].value(index_in_sparse_bucket); - if (compare_keys(key, KeySelect()(*value_it))) { - return const_iterator(m_sparse_buckets_data.cbegin() + sparse_ibucket, - value_it); - } - } else if (!m_sparse_buckets[sparse_ibucket].has_deleted_value( - index_in_sparse_bucket) || - probe >= m_bucket_count) { - return cend(); - } - - probe++; - ibucket = next_bucket(ibucket, probe); - } - } - - void clear_deleted_buckets() { - // TODO could be optimized, we could do it in-place instead of allocating a - // new bucket array. - rehash_impl(m_bucket_count); - tsl_sh_assert(m_nb_deleted_buckets == 0); - } - - template ::type - * = nullptr> - void rehash_impl(size_type count) { - sparse_hash new_table(count, static_cast(*this), - static_cast(*this), - static_cast(*this), m_max_load_factor); - - for (auto &bucket : m_sparse_buckets_data) { - for (auto &val : bucket) { - new_table.insert_on_rehash(std::move(val)); - } - - // TODO try to reuse some of the memory - bucket.clear(*this); - } - - new_table.swap(*this); - } - - /** - * TODO: For now we copy each element into the new map. We could move - * them if they are nothrow_move_constructible without triggering - * any exception if we reserve enough space in the sparse arrays beforehand. - */ - template ::type * = nullptr> - void rehash_impl(size_type count) { - sparse_hash new_table(count, static_cast(*this), - static_cast(*this), - static_cast(*this), m_max_load_factor); - - for (const auto &bucket : m_sparse_buckets_data) { - for (const auto &val : bucket) { - new_table.insert_on_rehash(val); - } - } - - new_table.swap(*this); - } - - template - void insert_on_rehash(K &&key_value) { - const key_type &key = KeySelect()(key_value); - - const std::size_t hash = hash_key(key); - std::size_t ibucket = bucket_for_hash(hash); - - std::size_t probe = 0; - while (true) { - std::size_t sparse_ibucket = sparse_array::sparse_ibucket(ibucket); - auto index_in_sparse_bucket = - sparse_array::index_in_sparse_bucket(ibucket); - - if (!m_sparse_buckets[sparse_ibucket].has_value(index_in_sparse_bucket)) { - m_sparse_buckets[sparse_ibucket].set(*this, index_in_sparse_bucket, - std::forward(key_value)); - m_nb_elements++; - - return; - } else { - tsl_sh_assert(!compare_keys( - key, KeySelect()(*m_sparse_buckets[sparse_ibucket].value( - index_in_sparse_bucket)))); - } - - probe++; - ibucket = next_bucket(ibucket, probe); - } - } - - template - void serialize_impl(Serializer &serializer) const { - const slz_size_type version = SERIALIZATION_PROTOCOL_VERSION; - serializer(version); - - const slz_size_type bucket_count = m_bucket_count; - serializer(bucket_count); - - const slz_size_type nb_sparse_buckets = m_sparse_buckets_data.size(); - serializer(nb_sparse_buckets); - - const slz_size_type nb_elements = m_nb_elements; - serializer(nb_elements); - - const slz_size_type nb_deleted_buckets = m_nb_deleted_buckets; - serializer(nb_deleted_buckets); - - const float max_load_factor = m_max_load_factor; - serializer(max_load_factor); - - for (const auto &bucket : m_sparse_buckets_data) { - bucket.serialize(serializer); - } - } - - template - void deserialize_impl(Deserializer &deserializer, bool hash_compatible) { - tsl_sh_assert( - m_bucket_count == 0 && - m_sparse_buckets_data.empty()); // Current hash table must be empty - - const slz_size_type version = - deserialize_value(deserializer); - // For now we only have one version of the serialization protocol. - // If it doesn't match there is a problem with the file. - if (version != SERIALIZATION_PROTOCOL_VERSION) { - throw std::runtime_error( - "Can't deserialize the sparse_map/set. The " - "protocol version header is invalid."); - } - - const slz_size_type bucket_count_ds = - deserialize_value(deserializer); - const slz_size_type nb_sparse_buckets = - deserialize_value(deserializer); - const slz_size_type nb_elements = - deserialize_value(deserializer); - const slz_size_type nb_deleted_buckets = - deserialize_value(deserializer); - const float max_load_factor = deserialize_value(deserializer); - - if (!hash_compatible) { - this->max_load_factor(max_load_factor); - reserve(numeric_cast(nb_elements, - "Deserialized nb_elements is too big.")); - for (slz_size_type ibucket = 0; ibucket < nb_sparse_buckets; ibucket++) { - sparse_array::deserialize_values_into_sparse_hash(deserializer, *this); - } - } else { - m_bucket_count = numeric_cast( - bucket_count_ds, "Deserialized bucket_count is too big."); - - GrowthPolicy::operator=(GrowthPolicy(m_bucket_count)); - // GrowthPolicy should not modify the bucket count we got from - // deserialization - if (m_bucket_count != bucket_count_ds) { - throw std::runtime_error( - "The GrowthPolicy is not the same even though " - "hash_compatible is true."); - } - - if (nb_sparse_buckets != - sparse_array::nb_sparse_buckets(m_bucket_count)) { - throw std::runtime_error("Deserialized nb_sparse_buckets is invalid."); - } - - m_nb_elements = numeric_cast( - nb_elements, "Deserialized nb_elements is too big."); - m_nb_deleted_buckets = numeric_cast( - nb_deleted_buckets, "Deserialized nb_deleted_buckets is too big."); - - m_sparse_buckets_data.reserve(numeric_cast( - nb_sparse_buckets, "Deserialized nb_sparse_buckets is too big.")); - for (slz_size_type ibucket = 0; ibucket < nb_sparse_buckets; ibucket++) { - m_sparse_buckets_data.emplace_back( - sparse_array::deserialize_hash_compatible( - deserializer, static_cast(*this))); - } - - if (!m_sparse_buckets_data.empty()) { - m_sparse_buckets_data.back().set_as_last(); - m_sparse_buckets = m_sparse_buckets_data.data(); - } - - this->max_load_factor(max_load_factor); - if (load_factor() > this->max_load_factor()) { - throw std::runtime_error( - "Invalid max_load_factor. Check that the serializer and " - "deserializer support " - "floats correctly as they can be converted implicitely to ints."); - } - } - } - - public: - static const size_type DEFAULT_INIT_BUCKET_COUNT = 0; - static constexpr float DEFAULT_MAX_LOAD_FACTOR = 0.5f; - - /** - * Protocol version currenlty used for serialization. - */ - static const slz_size_type SERIALIZATION_PROTOCOL_VERSION = 1; - - /** - * Return an always valid pointer to an static empty bucket_entry with - * last_bucket() == true. - */ - sparse_array *static_empty_sparse_bucket_ptr() { - static sparse_array empty_sparse_bucket(true); - return &empty_sparse_bucket; - } - - private: - sparse_buckets_container m_sparse_buckets_data; - - /** - * Points to m_sparse_buckets_data.data() if !m_sparse_buckets_data.empty() - * otherwise points to static_empty_sparse_bucket_ptr. This variable is useful - * to avoid the cost of checking if m_sparse_buckets_data is empty when trying - * to find an element. - * - * TODO Remove m_sparse_buckets_data and only use a pointer instead of a - * pointer+vector to save some space in the sparse_hash object. - */ - sparse_array *m_sparse_buckets; - - size_type m_bucket_count; - size_type m_nb_elements; - size_type m_nb_deleted_buckets; - - /** - * Maximum that m_nb_elements can reach before a rehash occurs automatically - * to grow the hash table. - */ - size_type m_load_threshold_rehash; - - /** - * Maximum that m_nb_elements + m_nb_deleted_buckets can reach before cleaning - * up the buckets marked as deleted. - */ - size_type m_load_threshold_clear_deleted; - float m_max_load_factor; -}; - -} // namespace detail_sparse_hash -} // namespace tsl - -#endif diff --git a/packages/leann-backend-diskann/third_party/DiskANN/include/tsl/sparse_map.h b/packages/leann-backend-diskann/third_party/DiskANN/include/tsl/sparse_map.h deleted file mode 100644 index 601742d..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/include/tsl/sparse_map.h +++ /dev/null @@ -1,800 +0,0 @@ -/** - * MIT License - * - * Copyright (c) 2017 Thibaut Goetghebuer-Planchon - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ -#ifndef TSL_SPARSE_MAP_H -#define TSL_SPARSE_MAP_H - -#include -#include -#include -#include -#include -#include - -#include "sparse_hash.h" - -namespace tsl { - -/** - * Implementation of a sparse hash map using open-addressing with quadratic - * probing. The goal on the hash map is to be the most memory efficient - * possible, even at low load factor, while keeping reasonable performances. - * - * `GrowthPolicy` defines how the map grows and consequently how a hash value is - * mapped to a bucket. By default the map uses - * `tsl::sh::power_of_two_growth_policy`. This policy keeps the number of - * buckets to a power of two and uses a mask to map the hash to a bucket instead - * of the slow modulo. Other growth policies are available and you may define - * your own growth policy, check `tsl::sh::power_of_two_growth_policy` for the - * interface. - * - * `ExceptionSafety` defines the exception guarantee provided by the class. By - * default only the basic exception safety is guaranteed which mean that all - * resources used by the hash map will be freed (no memory leaks) but the hash - * map may end-up in an undefined state if an exception is thrown (undefined - * here means that some elements may be missing). This can ONLY happen on rehash - * (either on insert or if `rehash` is called explicitly) and will occur if the - * Allocator can't allocate memory (`std::bad_alloc`) or if the copy constructor - * (when a nothrow move constructor is not available) throws an exception. This - * can be avoided by calling `reserve` beforehand. This basic guarantee is - * similar to the one of `google::sparse_hash_map` and `spp::sparse_hash_map`. - * It is possible to ask for the strong exception guarantee with - * `tsl::sh::exception_safety::strong`, the drawback is that the map will be - * slower on rehashes and will also need more memory on rehashes. - * - * `Sparsity` defines how much the hash set will compromise between insertion - * speed and memory usage. A high sparsity means less memory usage but longer - * insertion times, and vice-versa for low sparsity. The default - * `tsl::sh::sparsity::medium` sparsity offers a good compromise. It doesn't - * change the lookup speed. - * - * `Key` and `T` must be nothrow move constructible and/or copy constructible. - * - * If the destructor of `Key` or `T` throws an exception, the behaviour of the - * class is undefined. - * - * Iterators invalidation: - * - clear, operator=, reserve, rehash: always invalidate the iterators. - * - insert, emplace, emplace_hint, operator[]: if there is an effective - * insert, invalidate the iterators. - * - erase: always invalidate the iterators. - */ -template , - class KeyEqual = std::equal_to, - class Allocator = std::allocator>, - class GrowthPolicy = tsl::sh::power_of_two_growth_policy<2>, - tsl::sh::exception_safety ExceptionSafety = - tsl::sh::exception_safety::basic, - tsl::sh::sparsity Sparsity = tsl::sh::sparsity::medium> -class sparse_map { - private: - template - using has_is_transparent = tsl::detail_sparse_hash::has_is_transparent; - - class KeySelect { - public: - using key_type = Key; - - const key_type &operator()( - const std::pair &key_value) const noexcept { - return key_value.first; - } - - key_type &operator()(std::pair &key_value) noexcept { - return key_value.first; - } - }; - - class ValueSelect { - public: - using value_type = T; - - const value_type &operator()( - const std::pair &key_value) const noexcept { - return key_value.second; - } - - value_type &operator()(std::pair &key_value) noexcept { - return key_value.second; - } - }; - - using ht = detail_sparse_hash::sparse_hash< - std::pair, KeySelect, ValueSelect, Hash, KeyEqual, Allocator, - GrowthPolicy, ExceptionSafety, Sparsity, tsl::sh::probing::quadratic>; - - public: - using key_type = typename ht::key_type; - using mapped_type = T; - using value_type = typename ht::value_type; - using size_type = typename ht::size_type; - using difference_type = typename ht::difference_type; - using hasher = typename ht::hasher; - using key_equal = typename ht::key_equal; - using allocator_type = typename ht::allocator_type; - using reference = typename ht::reference; - using const_reference = typename ht::const_reference; - using pointer = typename ht::pointer; - using const_pointer = typename ht::const_pointer; - using iterator = typename ht::iterator; - using const_iterator = typename ht::const_iterator; - - public: - /* - * Constructors - */ - sparse_map() : sparse_map(ht::DEFAULT_INIT_BUCKET_COUNT) {} - - explicit sparse_map(size_type bucket_count, const Hash &hash = Hash(), - const KeyEqual &equal = KeyEqual(), - const Allocator &alloc = Allocator()) - : m_ht(bucket_count, hash, equal, alloc, ht::DEFAULT_MAX_LOAD_FACTOR) {} - - sparse_map(size_type bucket_count, const Allocator &alloc) - : sparse_map(bucket_count, Hash(), KeyEqual(), alloc) {} - - sparse_map(size_type bucket_count, const Hash &hash, const Allocator &alloc) - : sparse_map(bucket_count, hash, KeyEqual(), alloc) {} - - explicit sparse_map(const Allocator &alloc) - : sparse_map(ht::DEFAULT_INIT_BUCKET_COUNT, alloc) {} - - template - sparse_map(InputIt first, InputIt last, - size_type bucket_count = ht::DEFAULT_INIT_BUCKET_COUNT, - const Hash &hash = Hash(), const KeyEqual &equal = KeyEqual(), - const Allocator &alloc = Allocator()) - : sparse_map(bucket_count, hash, equal, alloc) { - insert(first, last); - } - - template - sparse_map(InputIt first, InputIt last, size_type bucket_count, - const Allocator &alloc) - : sparse_map(first, last, bucket_count, Hash(), KeyEqual(), alloc) {} - - template - sparse_map(InputIt first, InputIt last, size_type bucket_count, - const Hash &hash, const Allocator &alloc) - : sparse_map(first, last, bucket_count, hash, KeyEqual(), alloc) {} - - sparse_map(std::initializer_list init, - size_type bucket_count = ht::DEFAULT_INIT_BUCKET_COUNT, - const Hash &hash = Hash(), const KeyEqual &equal = KeyEqual(), - const Allocator &alloc = Allocator()) - : sparse_map(init.begin(), init.end(), bucket_count, hash, equal, alloc) { - } - - sparse_map(std::initializer_list init, size_type bucket_count, - const Allocator &alloc) - : sparse_map(init.begin(), init.end(), bucket_count, Hash(), KeyEqual(), - alloc) {} - - sparse_map(std::initializer_list init, size_type bucket_count, - const Hash &hash, const Allocator &alloc) - : sparse_map(init.begin(), init.end(), bucket_count, hash, KeyEqual(), - alloc) {} - - sparse_map &operator=(std::initializer_list ilist) { - m_ht.clear(); - - m_ht.reserve(ilist.size()); - m_ht.insert(ilist.begin(), ilist.end()); - - return *this; - } - - allocator_type get_allocator() const { return m_ht.get_allocator(); } - - /* - * Iterators - */ - iterator begin() noexcept { return m_ht.begin(); } - const_iterator begin() const noexcept { return m_ht.begin(); } - const_iterator cbegin() const noexcept { return m_ht.cbegin(); } - - iterator end() noexcept { return m_ht.end(); } - const_iterator end() const noexcept { return m_ht.end(); } - const_iterator cend() const noexcept { return m_ht.cend(); } - - /* - * Capacity - */ - bool empty() const noexcept { return m_ht.empty(); } - size_type size() const noexcept { return m_ht.size(); } - size_type max_size() const noexcept { return m_ht.max_size(); } - - /* - * Modifiers - */ - void clear() noexcept { m_ht.clear(); } - - std::pair insert(const value_type &value) { - return m_ht.insert(value); - } - - template ::value>::type * = nullptr> - std::pair insert(P &&value) { - return m_ht.emplace(std::forward

(value)); - } - - std::pair insert(value_type &&value) { - return m_ht.insert(std::move(value)); - } - - iterator insert(const_iterator hint, const value_type &value) { - return m_ht.insert_hint(hint, value); - } - - template ::value>::type * = nullptr> - iterator insert(const_iterator hint, P &&value) { - return m_ht.emplace_hint(hint, std::forward

(value)); - } - - iterator insert(const_iterator hint, value_type &&value) { - return m_ht.insert_hint(hint, std::move(value)); - } - - template - void insert(InputIt first, InputIt last) { - m_ht.insert(first, last); - } - - void insert(std::initializer_list ilist) { - m_ht.insert(ilist.begin(), ilist.end()); - } - - template - std::pair insert_or_assign(const key_type &k, M &&obj) { - return m_ht.insert_or_assign(k, std::forward(obj)); - } - - template - std::pair insert_or_assign(key_type &&k, M &&obj) { - return m_ht.insert_or_assign(std::move(k), std::forward(obj)); - } - - template - iterator insert_or_assign(const_iterator hint, const key_type &k, M &&obj) { - return m_ht.insert_or_assign(hint, k, std::forward(obj)); - } - - template - iterator insert_or_assign(const_iterator hint, key_type &&k, M &&obj) { - return m_ht.insert_or_assign(hint, std::move(k), std::forward(obj)); - } - - /** - * Due to the way elements are stored, emplace will need to move or copy the - * key-value once. The method is equivalent to - * `insert(value_type(std::forward(args)...));`. - * - * Mainly here for compatibility with the `std::unordered_map` interface. - */ - template - std::pair emplace(Args &&...args) { - return m_ht.emplace(std::forward(args)...); - } - - /** - * Due to the way elements are stored, emplace_hint will need to move or copy - * the key-value once. The method is equivalent to `insert(hint, - * value_type(std::forward(args)...));`. - * - * Mainly here for compatibility with the `std::unordered_map` interface. - */ - template - iterator emplace_hint(const_iterator hint, Args &&...args) { - return m_ht.emplace_hint(hint, std::forward(args)...); - } - - template - std::pair try_emplace(const key_type &k, Args &&...args) { - return m_ht.try_emplace(k, std::forward(args)...); - } - - template - std::pair try_emplace(key_type &&k, Args &&...args) { - return m_ht.try_emplace(std::move(k), std::forward(args)...); - } - - template - iterator try_emplace(const_iterator hint, const key_type &k, Args &&...args) { - return m_ht.try_emplace_hint(hint, k, std::forward(args)...); - } - - template - iterator try_emplace(const_iterator hint, key_type &&k, Args &&...args) { - return m_ht.try_emplace_hint(hint, std::move(k), - std::forward(args)...); - } - - iterator erase(iterator pos) { return m_ht.erase(pos); } - iterator erase(const_iterator pos) { return m_ht.erase(pos); } - iterator erase(const_iterator first, const_iterator last) { - return m_ht.erase(first, last); - } - size_type erase(const key_type &key) { return m_ht.erase(key); } - - /** - * Use the hash value `precalculated_hash` instead of hashing the key. The - * hash value should be the same as `hash_function()(key)`, otherwise the - * behaviour is undefined. Useful to speed-up the lookup if you already have - * the hash. - */ - size_type erase(const key_type &key, std::size_t precalculated_hash) { - return m_ht.erase(key, precalculated_hash); - } - - /** - * This overload only participates in the overload resolution if the typedef - * `KeyEqual::is_transparent` exists. If so, `K` must be hashable and - * comparable to `Key`. - */ - template < - class K, class KE = KeyEqual, - typename std::enable_if::value>::type * = nullptr> - size_type erase(const K &key) { - return m_ht.erase(key); - } - - /** - * @copydoc erase(const K& key) - * - * Use the hash value `precalculated_hash` instead of hashing the key. The - * hash value should be the same as `hash_function()(key)`, otherwise the - * behaviour is undefined. Useful to speed-up the lookup if you already have - * the hash. - */ - template < - class K, class KE = KeyEqual, - typename std::enable_if::value>::type * = nullptr> - size_type erase(const K &key, std::size_t precalculated_hash) { - return m_ht.erase(key, precalculated_hash); - } - - void swap(sparse_map &other) { other.m_ht.swap(m_ht); } - - /* - * Lookup - */ - T &at(const Key &key) { return m_ht.at(key); } - - /** - * Use the hash value `precalculated_hash` instead of hashing the key. The - * hash value should be the same as `hash_function()(key)`, otherwise the - * behaviour is undefined. Useful to speed-up the lookup if you already have - * the hash. - */ - T &at(const Key &key, std::size_t precalculated_hash) { - return m_ht.at(key, precalculated_hash); - } - - const T &at(const Key &key) const { return m_ht.at(key); } - - /** - * @copydoc at(const Key& key, std::size_t precalculated_hash) - */ - const T &at(const Key &key, std::size_t precalculated_hash) const { - return m_ht.at(key, precalculated_hash); - } - - /** - * This overload only participates in the overload resolution if the typedef - * `KeyEqual::is_transparent` exists. If so, `K` must be hashable and - * comparable to `Key`. - */ - template < - class K, class KE = KeyEqual, - typename std::enable_if::value>::type * = nullptr> - T &at(const K &key) { - return m_ht.at(key); - } - - /** - * @copydoc at(const K& key) - * - * Use the hash value `precalculated_hash` instead of hashing the key. The - * hash value should be the same as `hash_function()(key)`, otherwise the - * behaviour is undefined. Useful to speed-up the lookup if you already have - * the hash. - */ - template < - class K, class KE = KeyEqual, - typename std::enable_if::value>::type * = nullptr> - T &at(const K &key, std::size_t precalculated_hash) { - return m_ht.at(key, precalculated_hash); - } - - /** - * @copydoc at(const K& key) - */ - template < - class K, class KE = KeyEqual, - typename std::enable_if::value>::type * = nullptr> - const T &at(const K &key) const { - return m_ht.at(key); - } - - /** - * @copydoc at(const K& key, std::size_t precalculated_hash) - */ - template < - class K, class KE = KeyEqual, - typename std::enable_if::value>::type * = nullptr> - const T &at(const K &key, std::size_t precalculated_hash) const { - return m_ht.at(key, precalculated_hash); - } - - T &operator[](const Key &key) { return m_ht[key]; } - T &operator[](Key &&key) { return m_ht[std::move(key)]; } - - size_type count(const Key &key) const { return m_ht.count(key); } - - /** - * Use the hash value `precalculated_hash` instead of hashing the key. The - * hash value should be the same as `hash_function()(key)`, otherwise the - * behaviour is undefined. Useful to speed-up the lookup if you already have - * the hash. - */ - size_type count(const Key &key, std::size_t precalculated_hash) const { - return m_ht.count(key, precalculated_hash); - } - - /** - * This overload only participates in the overload resolution if the typedef - * `KeyEqual::is_transparent` exists. If so, `K` must be hashable and - * comparable to `Key`. - */ - template < - class K, class KE = KeyEqual, - typename std::enable_if::value>::type * = nullptr> - size_type count(const K &key) const { - return m_ht.count(key); - } - - /** - * @copydoc count(const K& key) const - * - * Use the hash value `precalculated_hash` instead of hashing the key. The - * hash value should be the same as `hash_function()(key)`, otherwise the - * behaviour is undefined. Useful to speed-up the lookup if you already have - * the hash. - */ - template < - class K, class KE = KeyEqual, - typename std::enable_if::value>::type * = nullptr> - size_type count(const K &key, std::size_t precalculated_hash) const { - return m_ht.count(key, precalculated_hash); - } - - iterator find(const Key &key) { return m_ht.find(key); } - - /** - * Use the hash value `precalculated_hash` instead of hashing the key. The - * hash value should be the same as `hash_function()(key)`, otherwise the - * behaviour is undefined. Useful to speed-up the lookup if you already have - * the hash. - */ - iterator find(const Key &key, std::size_t precalculated_hash) { - return m_ht.find(key, precalculated_hash); - } - - const_iterator find(const Key &key) const { return m_ht.find(key); } - - /** - * @copydoc find(const Key& key, std::size_t precalculated_hash) - */ - const_iterator find(const Key &key, std::size_t precalculated_hash) const { - return m_ht.find(key, precalculated_hash); - } - - /** - * This overload only participates in the overload resolution if the typedef - * `KeyEqual::is_transparent` exists. If so, `K` must be hashable and - * comparable to `Key`. - */ - template < - class K, class KE = KeyEqual, - typename std::enable_if::value>::type * = nullptr> - iterator find(const K &key) { - return m_ht.find(key); - } - - /** - * @copydoc find(const K& key) - * - * Use the hash value `precalculated_hash` instead of hashing the key. The - * hash value should be the same as `hash_function()(key)`, otherwise the - * behaviour is undefined. Useful to speed-up the lookup if you already have - * the hash. - */ - template < - class K, class KE = KeyEqual, - typename std::enable_if::value>::type * = nullptr> - iterator find(const K &key, std::size_t precalculated_hash) { - return m_ht.find(key, precalculated_hash); - } - - /** - * @copydoc find(const K& key) - */ - template < - class K, class KE = KeyEqual, - typename std::enable_if::value>::type * = nullptr> - const_iterator find(const K &key) const { - return m_ht.find(key); - } - - /** - * @copydoc find(const K& key) - * - * Use the hash value `precalculated_hash` instead of hashing the key. The - * hash value should be the same as `hash_function()(key)`, otherwise the - * behaviour is undefined. Useful to speed-up the lookup if you already have - * the hash. - */ - template < - class K, class KE = KeyEqual, - typename std::enable_if::value>::type * = nullptr> - const_iterator find(const K &key, std::size_t precalculated_hash) const { - return m_ht.find(key, precalculated_hash); - } - - bool contains(const Key &key) const { return m_ht.contains(key); } - - /** - * Use the hash value 'precalculated_hash' instead of hashing the key. The - * hash value should be the same as hash_function()(key). Useful to speed-up - * the lookup if you already have the hash. - */ - bool contains(const Key &key, std::size_t precalculated_hash) const { - return m_ht.contains(key, precalculated_hash); - } - - /** - * This overload only participates in the overload resolution if the typedef - * KeyEqual::is_transparent exists. If so, K must be hashable and comparable - * to Key. - */ - template < - class K, class KE = KeyEqual, - typename std::enable_if::value>::type * = nullptr> - bool contains(const K &key) const { - return m_ht.contains(key); - } - - /** - * @copydoc contains(const K& key) const - * - * Use the hash value 'precalculated_hash' instead of hashing the key. The - * hash value should be the same as hash_function()(key). Useful to speed-up - * the lookup if you already have the hash. - */ - template < - class K, class KE = KeyEqual, - typename std::enable_if::value>::type * = nullptr> - bool contains(const K &key, std::size_t precalculated_hash) const { - return m_ht.contains(key, precalculated_hash); - } - - std::pair equal_range(const Key &key) { - return m_ht.equal_range(key); - } - - /** - * Use the hash value `precalculated_hash` instead of hashing the key. The - * hash value should be the same as `hash_function()(key)`, otherwise the - * behaviour is undefined. Useful to speed-up the lookup if you already have - * the hash. - */ - std::pair equal_range(const Key &key, - std::size_t precalculated_hash) { - return m_ht.equal_range(key, precalculated_hash); - } - - std::pair equal_range(const Key &key) const { - return m_ht.equal_range(key); - } - - /** - * @copydoc equal_range(const Key& key, std::size_t precalculated_hash) - */ - std::pair equal_range( - const Key &key, std::size_t precalculated_hash) const { - return m_ht.equal_range(key, precalculated_hash); - } - - /** - * This overload only participates in the overload resolution if the typedef - * `KeyEqual::is_transparent` exists. If so, `K` must be hashable and - * comparable to `Key`. - */ - template < - class K, class KE = KeyEqual, - typename std::enable_if::value>::type * = nullptr> - std::pair equal_range(const K &key) { - return m_ht.equal_range(key); - } - - /** - * @copydoc equal_range(const K& key) - * - * Use the hash value `precalculated_hash` instead of hashing the key. The - * hash value should be the same as `hash_function()(key)`, otherwise the - * behaviour is undefined. Useful to speed-up the lookup if you already have - * the hash. - */ - template < - class K, class KE = KeyEqual, - typename std::enable_if::value>::type * = nullptr> - std::pair equal_range(const K &key, - std::size_t precalculated_hash) { - return m_ht.equal_range(key, precalculated_hash); - } - - /** - * @copydoc equal_range(const K& key) - */ - template < - class K, class KE = KeyEqual, - typename std::enable_if::value>::type * = nullptr> - std::pair equal_range(const K &key) const { - return m_ht.equal_range(key); - } - - /** - * @copydoc equal_range(const K& key, std::size_t precalculated_hash) - */ - template < - class K, class KE = KeyEqual, - typename std::enable_if::value>::type * = nullptr> - std::pair equal_range( - const K &key, std::size_t precalculated_hash) const { - return m_ht.equal_range(key, precalculated_hash); - } - - /* - * Bucket interface - */ - size_type bucket_count() const { return m_ht.bucket_count(); } - size_type max_bucket_count() const { return m_ht.max_bucket_count(); } - - /* - * Hash policy - */ - float load_factor() const { return m_ht.load_factor(); } - float max_load_factor() const { return m_ht.max_load_factor(); } - void max_load_factor(float ml) { m_ht.max_load_factor(ml); } - - void rehash(size_type count) { m_ht.rehash(count); } - void reserve(size_type count) { m_ht.reserve(count); } - - /* - * Observers - */ - hasher hash_function() const { return m_ht.hash_function(); } - key_equal key_eq() const { return m_ht.key_eq(); } - - /* - * Other - */ - - /** - * Convert a `const_iterator` to an `iterator`. - */ - iterator mutable_iterator(const_iterator pos) { - return m_ht.mutable_iterator(pos); - } - - /** - * Serialize the map through the `serializer` parameter. - * - * The `serializer` parameter must be a function object that supports the - * following call: - * - `template void operator()(const U& value);` where the types - * `std::uint64_t`, `float` and `std::pair` must be supported for U. - * - * The implementation leaves binary compatibility (endianness, IEEE 754 for - * floats, ...) of the types it serializes in the hands of the `Serializer` - * function object if compatibility is required. - */ - template - void serialize(Serializer &serializer) const { - m_ht.serialize(serializer); - } - - /** - * Deserialize a previously serialized map through the `deserializer` - * parameter. - * - * The `deserializer` parameter must be a function object that supports the - * following calls: - * - `template U operator()();` where the types `std::uint64_t`, - * `float` and `std::pair` must be supported for U. - * - * If the deserialized hash map type is hash compatible with the serialized - * map, the deserialization process can be sped up by setting - * `hash_compatible` to true. To be hash compatible, the Hash, KeyEqual and - * GrowthPolicy must behave the same way than the ones used on the serialized - * map. The `std::size_t` must also be of the same size as the one on the - * platform used to serialize the map. If these criteria are not met, the - * behaviour is undefined with `hash_compatible` sets to true. - * - * The behaviour is undefined if the type `Key` and `T` of the `sparse_map` - * are not the same as the types used during serialization. - * - * The implementation leaves binary compatibility (endianness, IEEE 754 for - * floats, size of int, ...) of the types it deserializes in the hands of the - * `Deserializer` function object if compatibility is required. - */ - template - static sparse_map deserialize(Deserializer &deserializer, - bool hash_compatible = false) { - sparse_map map(0); - map.m_ht.deserialize(deserializer, hash_compatible); - - return map; - } - - friend bool operator==(const sparse_map &lhs, const sparse_map &rhs) { - if (lhs.size() != rhs.size()) { - return false; - } - - for (const auto &element_lhs : lhs) { - const auto it_element_rhs = rhs.find(element_lhs.first); - if (it_element_rhs == rhs.cend() || - element_lhs.second != it_element_rhs->second) { - return false; - } - } - - return true; - } - - friend bool operator!=(const sparse_map &lhs, const sparse_map &rhs) { - return !operator==(lhs, rhs); - } - - friend void swap(sparse_map &lhs, sparse_map &rhs) { lhs.swap(rhs); } - - private: - ht m_ht; -}; - -/** - * Same as `tsl::sparse_map`. - */ -template , - class KeyEqual = std::equal_to, - class Allocator = std::allocator>> -using sparse_pg_map = - sparse_map; - -} // end namespace tsl - -#endif diff --git a/packages/leann-backend-diskann/third_party/DiskANN/include/tsl/sparse_set.h b/packages/leann-backend-diskann/third_party/DiskANN/include/tsl/sparse_set.h deleted file mode 100644 index 3ce6a58..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/include/tsl/sparse_set.h +++ /dev/null @@ -1,655 +0,0 @@ -/** - * MIT License - * - * Copyright (c) 2017 Thibaut Goetghebuer-Planchon - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ -#ifndef TSL_SPARSE_SET_H -#define TSL_SPARSE_SET_H - -#include -#include -#include -#include -#include -#include - -#include "sparse_hash.h" - -namespace tsl { - -/** - * Implementation of a sparse hash set using open-addressing with quadratic - * probing. The goal on the hash set is to be the most memory efficient - * possible, even at low load factor, while keeping reasonable performances. - * - * `GrowthPolicy` defines how the set grows and consequently how a hash value is - * mapped to a bucket. By default the set uses - * `tsl::sh::power_of_two_growth_policy`. This policy keeps the number of - * buckets to a power of two and uses a mask to map the hash to a bucket instead - * of the slow modulo. Other growth policies are available and you may define - * your own growth policy, check `tsl::sh::power_of_two_growth_policy` for the - * interface. - * - * `ExceptionSafety` defines the exception guarantee provided by the class. By - * default only the basic exception safety is guaranteed which mean that all - * resources used by the hash set will be freed (no memory leaks) but the hash - * set may end-up in an undefined state if an exception is thrown (undefined - * here means that some elements may be missing). This can ONLY happen on rehash - * (either on insert or if `rehash` is called explicitly) and will occur if the - * Allocator can't allocate memory (`std::bad_alloc`) or if the copy constructor - * (when a nothrow move constructor is not available) throws an exception. This - * can be avoided by calling `reserve` beforehand. This basic guarantee is - * similar to the one of `google::sparse_hash_map` and `spp::sparse_hash_map`. - * It is possible to ask for the strong exception guarantee with - * `tsl::sh::exception_safety::strong`, the drawback is that the set will be - * slower on rehashes and will also need more memory on rehashes. - * - * `Sparsity` defines how much the hash set will compromise between insertion - * speed and memory usage. A high sparsity means less memory usage but longer - * insertion times, and vice-versa for low sparsity. The default - * `tsl::sh::sparsity::medium` sparsity offers a good compromise. It doesn't - * change the lookup speed. - * - * `Key` must be nothrow move constructible and/or copy constructible. - * - * If the destructor of `Key` throws an exception, the behaviour of the class is - * undefined. - * - * Iterators invalidation: - * - clear, operator=, reserve, rehash: always invalidate the iterators. - * - insert, emplace, emplace_hint: if there is an effective insert, invalidate - * the iterators. - * - erase: always invalidate the iterators. - */ -template , - class KeyEqual = std::equal_to, - class Allocator = std::allocator, - class GrowthPolicy = tsl::sh::power_of_two_growth_policy<2>, - tsl::sh::exception_safety ExceptionSafety = - tsl::sh::exception_safety::basic, - tsl::sh::sparsity Sparsity = tsl::sh::sparsity::medium> -class sparse_set { - private: - template - using has_is_transparent = tsl::detail_sparse_hash::has_is_transparent; - - class KeySelect { - public: - using key_type = Key; - - const key_type &operator()(const Key &key) const noexcept { return key; } - - key_type &operator()(Key &key) noexcept { return key; } - }; - - using ht = - detail_sparse_hash::sparse_hash; - - public: - using key_type = typename ht::key_type; - using value_type = typename ht::value_type; - using size_type = typename ht::size_type; - using difference_type = typename ht::difference_type; - using hasher = typename ht::hasher; - using key_equal = typename ht::key_equal; - using allocator_type = typename ht::allocator_type; - using reference = typename ht::reference; - using const_reference = typename ht::const_reference; - using pointer = typename ht::pointer; - using const_pointer = typename ht::const_pointer; - using iterator = typename ht::iterator; - using const_iterator = typename ht::const_iterator; - - /* - * Constructors - */ - sparse_set() : sparse_set(ht::DEFAULT_INIT_BUCKET_COUNT) {} - - explicit sparse_set(size_type bucket_count, const Hash &hash = Hash(), - const KeyEqual &equal = KeyEqual(), - const Allocator &alloc = Allocator()) - : m_ht(bucket_count, hash, equal, alloc, ht::DEFAULT_MAX_LOAD_FACTOR) {} - - sparse_set(size_type bucket_count, const Allocator &alloc) - : sparse_set(bucket_count, Hash(), KeyEqual(), alloc) {} - - sparse_set(size_type bucket_count, const Hash &hash, const Allocator &alloc) - : sparse_set(bucket_count, hash, KeyEqual(), alloc) {} - - explicit sparse_set(const Allocator &alloc) - : sparse_set(ht::DEFAULT_INIT_BUCKET_COUNT, alloc) {} - - template - sparse_set(InputIt first, InputIt last, - size_type bucket_count = ht::DEFAULT_INIT_BUCKET_COUNT, - const Hash &hash = Hash(), const KeyEqual &equal = KeyEqual(), - const Allocator &alloc = Allocator()) - : sparse_set(bucket_count, hash, equal, alloc) { - insert(first, last); - } - - template - sparse_set(InputIt first, InputIt last, size_type bucket_count, - const Allocator &alloc) - : sparse_set(first, last, bucket_count, Hash(), KeyEqual(), alloc) {} - - template - sparse_set(InputIt first, InputIt last, size_type bucket_count, - const Hash &hash, const Allocator &alloc) - : sparse_set(first, last, bucket_count, hash, KeyEqual(), alloc) {} - - sparse_set(std::initializer_list init, - size_type bucket_count = ht::DEFAULT_INIT_BUCKET_COUNT, - const Hash &hash = Hash(), const KeyEqual &equal = KeyEqual(), - const Allocator &alloc = Allocator()) - : sparse_set(init.begin(), init.end(), bucket_count, hash, equal, alloc) { - } - - sparse_set(std::initializer_list init, size_type bucket_count, - const Allocator &alloc) - : sparse_set(init.begin(), init.end(), bucket_count, Hash(), KeyEqual(), - alloc) {} - - sparse_set(std::initializer_list init, size_type bucket_count, - const Hash &hash, const Allocator &alloc) - : sparse_set(init.begin(), init.end(), bucket_count, hash, KeyEqual(), - alloc) {} - - sparse_set &operator=(std::initializer_list ilist) { - m_ht.clear(); - - m_ht.reserve(ilist.size()); - m_ht.insert(ilist.begin(), ilist.end()); - - return *this; - } - - allocator_type get_allocator() const { return m_ht.get_allocator(); } - - /* - * Iterators - */ - iterator begin() noexcept { return m_ht.begin(); } - const_iterator begin() const noexcept { return m_ht.begin(); } - const_iterator cbegin() const noexcept { return m_ht.cbegin(); } - - iterator end() noexcept { return m_ht.end(); } - const_iterator end() const noexcept { return m_ht.end(); } - const_iterator cend() const noexcept { return m_ht.cend(); } - - /* - * Capacity - */ - bool empty() const noexcept { return m_ht.empty(); } - size_type size() const noexcept { return m_ht.size(); } - size_type max_size() const noexcept { return m_ht.max_size(); } - - /* - * Modifiers - */ - void clear() noexcept { m_ht.clear(); } - - std::pair insert(const value_type &value) { - return m_ht.insert(value); - } - - std::pair insert(value_type &&value) { - return m_ht.insert(std::move(value)); - } - - iterator insert(const_iterator hint, const value_type &value) { - return m_ht.insert_hint(hint, value); - } - - iterator insert(const_iterator hint, value_type &&value) { - return m_ht.insert_hint(hint, std::move(value)); - } - - template - void insert(InputIt first, InputIt last) { - m_ht.insert(first, last); - } - - void insert(std::initializer_list ilist) { - m_ht.insert(ilist.begin(), ilist.end()); - } - - /** - * Due to the way elements are stored, emplace will need to move or copy the - * key-value once. The method is equivalent to - * `insert(value_type(std::forward(args)...));`. - * - * Mainly here for compatibility with the `std::unordered_map` interface. - */ - template - std::pair emplace(Args &&...args) { - return m_ht.emplace(std::forward(args)...); - } - - /** - * Due to the way elements are stored, emplace_hint will need to move or copy - * the key-value once. The method is equivalent to `insert(hint, - * value_type(std::forward(args)...));`. - * - * Mainly here for compatibility with the `std::unordered_map` interface. - */ - template - iterator emplace_hint(const_iterator hint, Args &&...args) { - return m_ht.emplace_hint(hint, std::forward(args)...); - } - - iterator erase(iterator pos) { return m_ht.erase(pos); } - iterator erase(const_iterator pos) { return m_ht.erase(pos); } - iterator erase(const_iterator first, const_iterator last) { - return m_ht.erase(first, last); - } - size_type erase(const key_type &key) { return m_ht.erase(key); } - - /** - * Use the hash value `precalculated_hash` instead of hashing the key. The - * hash value should be the same as `hash_function()(key)`, otherwise the - * behaviour is undefined. Useful to speed-up the lookup if you already have - * the hash. - */ - size_type erase(const key_type &key, std::size_t precalculated_hash) { - return m_ht.erase(key, precalculated_hash); - } - - /** - * This overload only participates in the overload resolution if the typedef - * `KeyEqual::is_transparent` exists. If so, `K` must be hashable and - * comparable to `Key`. - */ - template < - class K, class KE = KeyEqual, - typename std::enable_if::value>::type * = nullptr> - size_type erase(const K &key) { - return m_ht.erase(key); - } - - /** - * @copydoc erase(const K& key) - * - * Use the hash value `precalculated_hash` instead of hashing the key. The - * hash value should be the same as `hash_function()(key)`, otherwise the - * behaviour is undefined. Useful to speed-up the lookup if you already have - * the hash. - */ - template < - class K, class KE = KeyEqual, - typename std::enable_if::value>::type * = nullptr> - size_type erase(const K &key, std::size_t precalculated_hash) { - return m_ht.erase(key, precalculated_hash); - } - - void swap(sparse_set &other) { other.m_ht.swap(m_ht); } - - /* - * Lookup - */ - size_type count(const Key &key) const { return m_ht.count(key); } - - /** - * Use the hash value `precalculated_hash` instead of hashing the key. The - * hash value should be the same as `hash_function()(key)`, otherwise the - * behaviour is undefined. Useful to speed-up the lookup if you already have - * the hash. - */ - size_type count(const Key &key, std::size_t precalculated_hash) const { - return m_ht.count(key, precalculated_hash); - } - - /** - * This overload only participates in the overload resolution if the typedef - * `KeyEqual::is_transparent` exists. If so, `K` must be hashable and - * comparable to `Key`. - */ - template < - class K, class KE = KeyEqual, - typename std::enable_if::value>::type * = nullptr> - size_type count(const K &key) const { - return m_ht.count(key); - } - - /** - * @copydoc count(const K& key) const - * - * Use the hash value `precalculated_hash` instead of hashing the key. The - * hash value should be the same as `hash_function()(key)`, otherwise the - * behaviour is undefined. Useful to speed-up the lookup if you already have - * the hash. - */ - template < - class K, class KE = KeyEqual, - typename std::enable_if::value>::type * = nullptr> - size_type count(const K &key, std::size_t precalculated_hash) const { - return m_ht.count(key, precalculated_hash); - } - - iterator find(const Key &key) { return m_ht.find(key); } - - /** - * Use the hash value `precalculated_hash` instead of hashing the key. The - * hash value should be the same as `hash_function()(key)`, otherwise the - * behaviour is undefined. Useful to speed-up the lookup if you already have - * the hash. - */ - iterator find(const Key &key, std::size_t precalculated_hash) { - return m_ht.find(key, precalculated_hash); - } - - const_iterator find(const Key &key) const { return m_ht.find(key); } - - /** - * @copydoc find(const Key& key, std::size_t precalculated_hash) - */ - const_iterator find(const Key &key, std::size_t precalculated_hash) const { - return m_ht.find(key, precalculated_hash); - } - - /** - * This overload only participates in the overload resolution if the typedef - * `KeyEqual::is_transparent` exists. If so, `K` must be hashable and - * comparable to `Key`. - */ - template < - class K, class KE = KeyEqual, - typename std::enable_if::value>::type * = nullptr> - iterator find(const K &key) { - return m_ht.find(key); - } - - /** - * @copydoc find(const K& key) - * - * Use the hash value `precalculated_hash` instead of hashing the key. The - * hash value should be the same as `hash_function()(key)`, otherwise the - * behaviour is undefined. Useful to speed-up the lookup if you already have - * the hash. - */ - template < - class K, class KE = KeyEqual, - typename std::enable_if::value>::type * = nullptr> - iterator find(const K &key, std::size_t precalculated_hash) { - return m_ht.find(key, precalculated_hash); - } - - /** - * @copydoc find(const K& key) - */ - template < - class K, class KE = KeyEqual, - typename std::enable_if::value>::type * = nullptr> - const_iterator find(const K &key) const { - return m_ht.find(key); - } - - /** - * @copydoc find(const K& key) - * - * Use the hash value `precalculated_hash` instead of hashing the key. The - * hash value should be the same as `hash_function()(key)`, otherwise the - * behaviour is undefined. Useful to speed-up the lookup if you already have - * the hash. - */ - template < - class K, class KE = KeyEqual, - typename std::enable_if::value>::type * = nullptr> - const_iterator find(const K &key, std::size_t precalculated_hash) const { - return m_ht.find(key, precalculated_hash); - } - - bool contains(const Key &key) const { return m_ht.contains(key); } - - /** - * Use the hash value 'precalculated_hash' instead of hashing the key. The - * hash value should be the same as hash_function()(key). Useful to speed-up - * the lookup if you already have the hash. - */ - bool contains(const Key &key, std::size_t precalculated_hash) const { - return m_ht.contains(key, precalculated_hash); - } - - /** - * This overload only participates in the overload resolution if the typedef - * KeyEqual::is_transparent exists. If so, K must be hashable and comparable - * to Key. - */ - template < - class K, class KE = KeyEqual, - typename std::enable_if::value>::type * = nullptr> - bool contains(const K &key) const { - return m_ht.contains(key); - } - - /** - * @copydoc contains(const K& key) const - * - * Use the hash value 'precalculated_hash' instead of hashing the key. The - * hash value should be the same as hash_function()(key). Useful to speed-up - * the lookup if you already have the hash. - */ - template < - class K, class KE = KeyEqual, - typename std::enable_if::value>::type * = nullptr> - bool contains(const K &key, std::size_t precalculated_hash) const { - return m_ht.contains(key, precalculated_hash); - } - - std::pair equal_range(const Key &key) { - return m_ht.equal_range(key); - } - - /** - * Use the hash value `precalculated_hash` instead of hashing the key. The - * hash value should be the same as `hash_function()(key)`, otherwise the - * behaviour is undefined. Useful to speed-up the lookup if you already have - * the hash. - */ - std::pair equal_range(const Key &key, - std::size_t precalculated_hash) { - return m_ht.equal_range(key, precalculated_hash); - } - - std::pair equal_range(const Key &key) const { - return m_ht.equal_range(key); - } - - /** - * @copydoc equal_range(const Key& key, std::size_t precalculated_hash) - */ - std::pair equal_range( - const Key &key, std::size_t precalculated_hash) const { - return m_ht.equal_range(key, precalculated_hash); - } - - /** - * This overload only participates in the overload resolution if the typedef - * `KeyEqual::is_transparent` exists. If so, `K` must be hashable and - * comparable to `Key`. - */ - template < - class K, class KE = KeyEqual, - typename std::enable_if::value>::type * = nullptr> - std::pair equal_range(const K &key) { - return m_ht.equal_range(key); - } - - /** - * @copydoc equal_range(const K& key) - * - * Use the hash value `precalculated_hash` instead of hashing the key. The - * hash value should be the same as `hash_function()(key)`, otherwise the - * behaviour is undefined. Useful to speed-up the lookup if you already have - * the hash. - */ - template < - class K, class KE = KeyEqual, - typename std::enable_if::value>::type * = nullptr> - std::pair equal_range(const K &key, - std::size_t precalculated_hash) { - return m_ht.equal_range(key, precalculated_hash); - } - - /** - * @copydoc equal_range(const K& key) - */ - template < - class K, class KE = KeyEqual, - typename std::enable_if::value>::type * = nullptr> - std::pair equal_range(const K &key) const { - return m_ht.equal_range(key); - } - - /** - * @copydoc equal_range(const K& key, std::size_t precalculated_hash) - */ - template < - class K, class KE = KeyEqual, - typename std::enable_if::value>::type * = nullptr> - std::pair equal_range( - const K &key, std::size_t precalculated_hash) const { - return m_ht.equal_range(key, precalculated_hash); - } - - /* - * Bucket interface - */ - size_type bucket_count() const { return m_ht.bucket_count(); } - size_type max_bucket_count() const { return m_ht.max_bucket_count(); } - - /* - * Hash policy - */ - float load_factor() const { return m_ht.load_factor(); } - float max_load_factor() const { return m_ht.max_load_factor(); } - void max_load_factor(float ml) { m_ht.max_load_factor(ml); } - - void rehash(size_type count) { m_ht.rehash(count); } - void reserve(size_type count) { m_ht.reserve(count); } - - /* - * Observers - */ - hasher hash_function() const { return m_ht.hash_function(); } - key_equal key_eq() const { return m_ht.key_eq(); } - - /* - * Other - */ - - /** - * Convert a `const_iterator` to an `iterator`. - */ - iterator mutable_iterator(const_iterator pos) { - return m_ht.mutable_iterator(pos); - } - - /** - * Serialize the set through the `serializer` parameter. - * - * The `serializer` parameter must be a function object that supports the - * following call: - * - `void operator()(const U& value);` where the types `std::uint64_t`, - * `float` and `Key` must be supported for U. - * - * The implementation leaves binary compatibility (endianness, IEEE 754 for - * floats, ...) of the types it serializes in the hands of the `Serializer` - * function object if compatibility is required. - */ - template - void serialize(Serializer &serializer) const { - m_ht.serialize(serializer); - } - - /** - * Deserialize a previously serialized set through the `deserializer` - * parameter. - * - * The `deserializer` parameter must be a function object that supports the - * following calls: - * - `template U operator()();` where the types `std::uint64_t`, - * `float` and `Key` must be supported for U. - * - * If the deserialized hash set type is hash compatible with the serialized - * set, the deserialization process can be sped up by setting - * `hash_compatible` to true. To be hash compatible, the Hash, KeyEqual and - * GrowthPolicy must behave the same way than the ones used on the serialized - * set. The `std::size_t` must also be of the same size as the one on the - * platform used to serialize the set. If these criteria are not met, the - * behaviour is undefined with `hash_compatible` sets to true. - * - * The behaviour is undefined if the type `Key` of the `sparse_set` is not the - * same as the type used during serialization. - * - * The implementation leaves binary compatibility (endianness, IEEE 754 for - * floats, size of int, ...) of the types it deserializes in the hands of the - * `Deserializer` function object if compatibility is required. - */ - template - static sparse_set deserialize(Deserializer &deserializer, - bool hash_compatible = false) { - sparse_set set(0); - set.m_ht.deserialize(deserializer, hash_compatible); - - return set; - } - - friend bool operator==(const sparse_set &lhs, const sparse_set &rhs) { - if (lhs.size() != rhs.size()) { - return false; - } - - for (const auto &element_lhs : lhs) { - const auto it_element_rhs = rhs.find(element_lhs); - if (it_element_rhs == rhs.cend()) { - return false; - } - } - - return true; - } - - friend bool operator!=(const sparse_set &lhs, const sparse_set &rhs) { - return !operator==(lhs, rhs); - } - - friend void swap(sparse_set &lhs, sparse_set &rhs) { lhs.swap(rhs); } - - private: - ht m_ht; -}; - -/** - * Same as `tsl::sparse_set`. - */ -template , - class KeyEqual = std::equal_to, - class Allocator = std::allocator> -using sparse_pg_set = - sparse_set; - -} // end namespace tsl - -#endif diff --git a/packages/leann-backend-diskann/third_party/DiskANN/include/types.h b/packages/leann-backend-diskann/third_party/DiskANN/include/types.h deleted file mode 100644 index 953d59a..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/include/types.h +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT license. - -#pragma once - -#include -#include -#include -#include "any_wrappers.h" - -namespace diskann -{ -typedef uint32_t location_t; - -using DataType = std::any; -using TagType = std::any; -using LabelType = std::any; -using TagVector = AnyWrapper::AnyVector; -using DataVector = AnyWrapper::AnyVector; -using Labelvector = AnyWrapper::AnyVector; -using TagRobinSet = AnyWrapper::AnyRobinSet; -} // namespace diskann diff --git a/packages/leann-backend-diskann/third_party/DiskANN/include/utils.h b/packages/leann-backend-diskann/third_party/DiskANN/include/utils.h deleted file mode 100644 index 355a613..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/include/utils.h +++ /dev/null @@ -1,1455 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT license. - -#pragma once - -#include - -#include "common_includes.h" - -#ifdef __APPLE__ -#include -#else -#include -#endif - -#ifdef _WINDOWS -#include -typedef HANDLE FileHandle; -#else -#include -typedef int FileHandle; -#endif - -#include "distance.h" -#include "logger.h" -#include "cached_io.h" -#include "ann_exception.h" -#include "windows_customizations.h" -#include "tsl/robin_set.h" -#include "types.h" -#include "tag_uint128.h" -#include - -#ifdef EXEC_ENV_OLS -#include "content_buf.h" -#include "memory_mapped_files.h" -#endif - -#ifdef __APPLE__ -#ifdef __arm64__ -#define _MM_HINT_T0 1 -#define _MM_HINT_T1 2 - -static inline __attribute__((always_inline)) void _mm_prefetch(char const *p, int i) -{ - switch (i) - { - case _MM_HINT_T0: - __builtin_prefetch(p, 0, 3); - break; - case _MM_HINT_T1: - __builtin_prefetch(p, 0, 2); - break; - } -} -#endif - -#define LAPACK_COL_MAJOR 1 -#define LAPACK_ROW_MAJOR 0 -#ifdef __APPLE__ -typedef int clp_int; -#else -typedef __CLPK_integer clp_int; -#endif - -inline void _sge_trans(int matrix_layout, clp_int m, clp_int n, const float *in, clp_int ldin, float *out, - clp_int ldout) -{ - clp_int i, j, x, y; - - if (matrix_layout == LAPACK_COL_MAJOR) - { - x = n; - y = m; - } - else - { - x = m; - y = n; - } - for (i = 0; i < MIN(y, ldin); i++) - { - for (j = 0; j < MIN(x, ldout); j++) - { - out[(size_t)i * ldout + j] = in[(size_t)j * ldin + i]; - } - } -} -inline clp_int sgesdd_rm_work(char jobz, clp_int m, clp_int n, float *a, clp_int lda, float *s, float *u, clp_int ldu, - float *vt, clp_int ldvt, float *work, clp_int lwork, clp_int *iwork) -{ - clp_int info = 0; - clp_int nrows_u = ((jobz == 'a') || (jobz == 's') || ((jobz == 'o') && m < n)) ? m : 1; - clp_int ncols_u = ((jobz == 'a') || ((jobz == 'o') && m < n)) ? m : ((jobz == 's') ? MIN(m, n) : 1); - clp_int nrows_vt = ((jobz == 'a') || ((jobz == 'o') && m >= n)) ? n : ((jobz == 's') ? MIN(m, n) : 1); - - clp_int lda_t = MAX(1, m); - clp_int ldu_t = MAX(1, nrows_u); - clp_int ldvt_t = MAX(1, nrows_vt); - float *a_t = NULL; - float *u_t = NULL; - float *vt_t = NULL; - - // check leading dimensions - if (lda < n) - { - info = -6; - return info; - } - if (ldu < ncols_u) - { - info = -9; - return info; - } - if (ldvt < n) - { - info = -11; - return info; - } - - // query for optimal work size if lwork = -1 - if (lwork == -1) - { - sgesdd_(&jobz, &m, &n, a, &lda_t, s, u, &ldu_t, vt, &ldvt_t, work, &lwork, iwork, &info); - return (info < 0) ? (info - 1) : info; - } - - // setup temp arrays - a_t = (float *)malloc(sizeof(float) * lda_t * MAX(1, n)); - if (a_t == NULL) - { - info = -1011; - return info; - } - if ((jobz == 'a') || (jobz == 's') || ((jobz == 'o') && (m < n))) - { - u_t = (float *)malloc(sizeof(float) * ldu_t * MAX(1, ncols_u)); - if (u_t == NULL) - { - info = -1011; - free(a_t); - return info; - } - } - if ((jobz == 'a') || (jobz == 's') || ((jobz == 'o') && (m >= n))) - { - vt_t = (float *)malloc(sizeof(float) * ldvt_t * MAX(1, n)); - if (vt_t == NULL) - { - info = -1011; - free(a_t); - if ((jobz == 'a') || (jobz == 's') || ((jobz == 'o') && (m < n))) - { - free(u_t); - } - return info; - } - } - - _sge_trans(LAPACK_ROW_MAJOR, m, n, a, lda, a_t, lda_t); - sgesdd_(&jobz, &m, &n, a_t, &lda_t, s, u_t, &ldu_t, vt_t, &ldvt_t, work, &lwork, iwork, &info); - - if (info < 0) - { - info = info - 1; - } - /* Transpose output matrices */ - _sge_trans(LAPACK_COL_MAJOR, m, n, a_t, lda_t, a, lda); - if ((jobz == 'a') || (jobz == 's') || ((jobz == 'o') && (m < n))) - { - _sge_trans(LAPACK_COL_MAJOR, nrows_u, ncols_u, u_t, ldu_t, u, ldu); - } - if ((jobz == 'a') || (jobz == 's') || ((jobz == 'o') && (m >= n))) - { - _sge_trans(LAPACK_COL_MAJOR, nrows_vt, n, vt_t, ldvt_t, vt, ldvt); - } - /* Release memory and exit */ - if ((jobz == 'a') || (jobz == 's') || ((jobz == 'o') && (m >= n))) - { - free(vt_t); - } - if ((jobz == 'a') || (jobz == 's') || ((jobz == 'o') && (m < n))) - { - free(u_t); - } - free(a_t); - return info; -} - -inline clp_int LAPACKE_sgesdd(int matrix_layout, char jobz, clp_int m, clp_int n, float *a, clp_int lda, float *s, - float *u, clp_int ldu, float *vt, clp_int ldvt) -{ - // internal SGESDD vars - clp_int info = 0; - clp_int lwork = -1; - clp_int *iwork = NULL; - float *work = NULL; - float work_query; - - // allocate space for iwork - iwork = (clp_int *)malloc(sizeof(clp_int) * MAX(1, 8 * MIN(m, n))); - if (iwork == NULL) - throw; - /* Query optimal working array(s) size */ - info = sgesdd_rm_work(jobz, m, n, a, lda, s, u, ldu, vt, ldvt, &work_query, lwork, iwork); - if (info != 0) - { - free(iwork); - info = -1010; - return info; - } - - lwork = (clp_int)work_query; - /* Allocate memory for work arrays */ - work = (float *)malloc(sizeof(float) * lwork); - if (work == NULL) - throw; - - /* Call middle-level interface */ - info = sgesdd_rm_work(jobz, m, n, a, lda, s, u, ldu, vt, ldvt, work, lwork, iwork); - /* Release memory and exit */ - free(work); - free(iwork); - return info; -} -#endif - -// taken from -// https://github.com/Microsoft/BLAS-on-flash/blob/master/include/utils.h -// round up X to the nearest multiple of Y -#define ROUND_UP(X, Y) ((((uint64_t)(X) / (Y)) + ((uint64_t)(X) % (Y) != 0)) * (Y)) - -#define DIV_ROUND_UP(X, Y) (((uint64_t)(X) / (Y)) + ((uint64_t)(X) % (Y) != 0)) - -// round down X to the nearest multiple of Y -#define ROUND_DOWN(X, Y) (((uint64_t)(X) / (Y)) * (Y)) - -// alignment tests -#define IS_ALIGNED(X, Y) ((uint64_t)(X) % (uint64_t)(Y) == 0) -#define IS_512_ALIGNED(X) IS_ALIGNED(X, 512) -#define IS_4096_ALIGNED(X) IS_ALIGNED(X, 4096) -#define METADATA_SIZE \ - 4096 // all metadata of individual sub-component files is written in first - // 4KB for unified files - -#define BUFFER_SIZE_FOR_CACHED_IO (size_t)1024 * (size_t)1048576 - -#define PBSTR "||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||" -#define PBWIDTH 60 - -inline bool file_exists_impl(const std::string &name, bool dirCheck = false) -{ - int val; -#ifndef _WINDOWS - struct stat buffer; - val = stat(name.c_str(), &buffer); -#else - // It is the 21st century but Windows API still thinks in 32-bit terms. - // Turns out calling stat() on a file > 4GB results in errno = 132 - // (OVERFLOW). How silly is this!? So calling _stat64() - struct _stat64 buffer; - val = _stat64(name.c_str(), &buffer); -#endif - - if (val != 0) - { - switch (errno) - { - case EINVAL: - diskann::cout << "Invalid argument passed to stat()" << std::endl; - break; - case ENOENT: - // file is not existing, not an issue, so we won't cout anything. - break; - default: - diskann::cout << "Unexpected error in stat():" << errno << std::endl; - break; - } - return false; - } - else - { - // the file entry exists. If reqd, check if this is a directory. - return dirCheck ? buffer.st_mode & S_IFDIR : true; - } -} - -inline bool file_exists(const std::string &name, bool dirCheck = false) -{ -#ifdef EXEC_ENV_OLS - bool exists = file_exists_impl(name, dirCheck); - if (exists) - { - return true; - } - if (!dirCheck) - { - // try with .enc extension - std::string enc_name = name + ENCRYPTED_EXTENSION; - return file_exists_impl(enc_name, dirCheck); - } - else - { - return exists; - } -#else - return file_exists_impl(name, dirCheck); -#endif -} - -inline void open_file_to_write(std::ofstream &writer, const std::string &filename) -{ - writer.exceptions(std::ofstream::failbit | std::ofstream::badbit); - if (!file_exists(filename)) - writer.open(filename, std::ios::binary | std::ios::out); - else - writer.open(filename, std::ios::binary | std::ios::in | std::ios::out); - - if (writer.fail()) - { - char buff[1024]; -#ifdef _WINDOWS - auto ret = std::to_string(strerror_s(buff, 1024, errno)); -#elif __APPLE__ - auto ret = std::to_string(strerror_r(errno, buff, 1024)); -#else - auto ret = std::string(strerror_r(errno, buff, 1024)); -#endif - auto message = std::string("Failed to open file") + filename + " for write because " + buff + ", ret=" + ret; - diskann::cerr << message << std::endl; - throw diskann::ANNException(message, -1); - } -} - -inline size_t get_file_size(const std::string &fname) -{ - std::ifstream reader(fname, std::ios::binary | std::ios::ate); - if (!reader.fail() && reader.is_open()) - { - size_t end_pos = reader.tellg(); - reader.close(); - return end_pos; - } - else - { - diskann::cerr << "Could not open file: " << fname << std::endl; - return 0; - } -} - -inline int delete_file(const std::string &fileName) -{ - if (file_exists(fileName)) - { - auto rc = ::remove(fileName.c_str()); - if (rc != 0) - { - diskann::cerr << "Could not delete file: " << fileName - << " even though it exists. This might indicate a permissions " - "issue. " - "If you see this message, please contact the diskann team." - << std::endl; - } - return rc; - } - else - { - return 0; - } -} - -// generates formatted_label and _labels_map file. -inline void convert_labels_string_to_int(const std::string &inFileName, const std::string &outFileName, - const std::string &mapFileName, const std::string &unv_label) -{ - std::unordered_map string_int_map; - std::ofstream label_writer(outFileName); - std::ifstream label_reader(inFileName); - if (unv_label != "") - string_int_map[unv_label] = 0; // if universal label is provided map it to 0 always - std::string line, token; - while (std::getline(label_reader, line)) - { - std::istringstream new_iss(line); - std::vector lbls; - while (getline(new_iss, token, ',')) - { - token.erase(std::remove(token.begin(), token.end(), '\n'), token.end()); - token.erase(std::remove(token.begin(), token.end(), '\r'), token.end()); - if (string_int_map.find(token) == string_int_map.end()) - { - uint32_t nextId = (uint32_t)string_int_map.size() + 1; - string_int_map[token] = nextId; // nextId can never be 0 - } - lbls.push_back(string_int_map[token]); - } - if (lbls.size() <= 0) - { - std::cout << "No label found"; - exit(-1); - } - for (size_t j = 0; j < lbls.size(); j++) - { - if (j != lbls.size() - 1) - label_writer << lbls[j] << ","; - else - label_writer << lbls[j] << std::endl; - } - } - label_writer.close(); - - std::ofstream map_writer(mapFileName); - for (auto mp : string_int_map) - { - map_writer << mp.first << "\t" << mp.second << std::endl; - } - map_writer.close(); -} - -#ifdef EXEC_ENV_OLS -class AlignedFileReader; -#endif - -namespace diskann -{ -static const size_t MAX_SIZE_OF_STREAMBUF = 2LL * 1024 * 1024 * 1024; - -inline void print_error_and_terminate(std::stringstream &error_stream) -{ - diskann::cerr << error_stream.str() << std::endl; - throw diskann::ANNException(error_stream.str(), -1, __FUNCSIG__, __FILE__, __LINE__); -} - -inline void report_memory_allocation_failure() -{ - std::stringstream stream; - stream << "Memory Allocation Failed."; - print_error_and_terminate(stream); -} - -inline void report_misalignment_of_requested_size(size_t align) -{ - std::stringstream stream; - stream << "Requested memory size is not a multiple of " << align << ". Can not be allocated."; - print_error_and_terminate(stream); -} - -inline void alloc_aligned(void **ptr, size_t size, size_t align) -{ - *ptr = nullptr; - if (IS_ALIGNED(size, align) == 0) - report_misalignment_of_requested_size(align); -#ifdef _WINDOWS - *ptr = ::_aligned_malloc(size, align); // note the swapped arguments! -#elif __APPLE__ - int err = posix_memalign(ptr, align, size); - if (err) - { - std::cout << err << std::endl; - throw; - } -#else - *ptr = ::aligned_alloc(align, size); -#endif - if (*ptr == nullptr) - report_memory_allocation_failure(); -} - -inline void realloc_aligned(void **ptr, size_t size, size_t align) -{ - if (IS_ALIGNED(size, align) == 0) - report_misalignment_of_requested_size(align); -#ifdef _WINDOWS - *ptr = ::_aligned_realloc(*ptr, size, align); -#else - diskann::cerr << "No aligned realloc on GCC. Must malloc and mem_align, " - "left it out for now." - << std::endl; -#endif - if (*ptr == nullptr) - report_memory_allocation_failure(); -} - -inline void check_stop(std::string arnd) -{ - int brnd; - diskann::cout << arnd << std::endl; - std::cin >> brnd; -} - -inline void aligned_free(void *ptr) -{ - // Gopal. Must have a check here if the pointer was actually allocated by - // _alloc_aligned - if (ptr == nullptr) - { - return; - } -#ifndef _WINDOWS - free(ptr); -#else - ::_aligned_free(ptr); -#endif -} - -inline void GenRandom(std::mt19937 &rng, unsigned *addr, unsigned size, unsigned N) -{ - for (unsigned i = 0; i < size; ++i) - { - addr[i] = rng() % (N - size); - } - - std::sort(addr, addr + size); - for (unsigned i = 1; i < size; ++i) - { - if (addr[i] <= addr[i - 1]) - { - addr[i] = addr[i - 1] + 1; - } - } - unsigned off = rng() % N; - for (unsigned i = 0; i < size; ++i) - { - addr[i] = (addr[i] + off) % N; - } -} - -// get_bin_metadata functions START -inline void get_bin_metadata_impl(std::basic_istream &reader, size_t &nrows, size_t &ncols, size_t offset = 0) -{ - int nrows_32, ncols_32; - reader.seekg(offset, reader.beg); - reader.read((char *)&nrows_32, sizeof(int)); - reader.read((char *)&ncols_32, sizeof(int)); - nrows = nrows_32; - ncols = ncols_32; -} - -#ifdef EXEC_ENV_OLS -inline void get_bin_metadata(MemoryMappedFiles &files, const std::string &bin_file, size_t &nrows, size_t &ncols, - size_t offset = 0) -{ - diskann::cout << "Getting metadata for file: " << bin_file << std::endl; - auto fc = files.getContent(bin_file); - // auto cb = ContentBuf((char*) fc._content, fc._size); - // std::basic_istream reader(&cb); - // get_bin_metadata_impl(reader, nrows, ncols, offset); - - int nrows_32, ncols_32; - int32_t *metadata_ptr = (int32_t *)((char *)fc._content + offset); - nrows_32 = *metadata_ptr; - ncols_32 = *(metadata_ptr + 1); - nrows = nrows_32; - ncols = ncols_32; -} -#endif - -inline void get_bin_metadata(const std::string &bin_file, size_t &nrows, size_t &ncols, size_t offset = 0) -{ - std::ifstream reader(bin_file.c_str(), std::ios::binary); - get_bin_metadata_impl(reader, nrows, ncols, offset); -} -// get_bin_metadata functions END - -#ifndef EXEC_ENV_OLS -inline size_t get_graph_num_frozen_points(const std::string &graph_file) -{ - size_t expected_file_size; - uint32_t max_observed_degree, start; - size_t file_frozen_pts; - - std::ifstream in; - in.exceptions(std::ios::badbit | std::ios::failbit); - - in.open(graph_file, std::ios::binary); - in.read((char *)&expected_file_size, sizeof(size_t)); - in.read((char *)&max_observed_degree, sizeof(uint32_t)); - in.read((char *)&start, sizeof(uint32_t)); - in.read((char *)&file_frozen_pts, sizeof(size_t)); - - return file_frozen_pts; -} -#endif - -template inline std::string getValues(T *data, size_t num) -{ - std::stringstream stream; - stream << "["; - for (size_t i = 0; i < num; i++) - { - stream << std::to_string(data[i]) << ","; - } - stream << "]" << std::endl; - - return stream.str(); -} - -// load_bin functions START -template -inline void load_bin_impl(std::basic_istream &reader, T *&data, size_t &npts, size_t &dim, size_t file_offset = 0) -{ - int npts_i32, dim_i32; - - reader.seekg(file_offset, reader.beg); - reader.read((char *)&npts_i32, sizeof(int)); - reader.read((char *)&dim_i32, sizeof(int)); - npts = (unsigned)npts_i32; - dim = (unsigned)dim_i32; - - std::cout << "Metadata: #pts = " << npts << ", #dims = " << dim << "..." << std::endl; - - data = new T[npts * dim]; - reader.read((char *)data, npts * dim * sizeof(T)); -} - -#ifdef EXEC_ENV_OLS -template -inline void load_bin(MemoryMappedFiles &files, const std::string &bin_file, T *&data, size_t &npts, size_t &dim, - size_t offset = 0) -{ - diskann::cout << "Reading bin file " << bin_file.c_str() << " at offset: " << offset << "..." << std::endl; - auto fc = files.getContent(bin_file); - - uint32_t t_npts, t_dim; - uint32_t *contentAsIntPtr = (uint32_t *)((char *)fc._content + offset); - t_npts = *(contentAsIntPtr); - t_dim = *(contentAsIntPtr + 1); - - npts = t_npts; - dim = t_dim; - - data = (T *)((char *)fc._content + offset + 2 * sizeof(uint32_t)); // No need to copy! -} - -DISKANN_DLLEXPORT void get_bin_metadata(AlignedFileReader &reader, size_t &npts, size_t &ndim, size_t offset = 0); -template -DISKANN_DLLEXPORT void load_bin(AlignedFileReader &reader, T *&data, size_t &npts, size_t &ndim, size_t offset = 0); -template -DISKANN_DLLEXPORT void load_bin(AlignedFileReader &reader, std::unique_ptr &data, size_t &npts, size_t &ndim, - size_t offset = 0); - -template -DISKANN_DLLEXPORT void copy_aligned_data_from_file(AlignedFileReader &reader, T *&data, size_t &npts, size_t &dim, - const size_t &rounded_dim, size_t offset = 0); - -// Unlike load_bin, assumes that data is already allocated 'size' entries -template -DISKANN_DLLEXPORT void read_array(AlignedFileReader &reader, T *data, size_t size, size_t offset = 0); - -template DISKANN_DLLEXPORT void read_value(AlignedFileReader &reader, T &value, size_t offset = 0); -#endif - -template -inline void load_bin(const std::string &bin_file, T *&data, size_t &npts, size_t &dim, size_t offset = 0) -{ - diskann::cout << "Reading bin file " << bin_file.c_str() << " ..." << std::endl; - std::ifstream reader; - reader.exceptions(std::ifstream::failbit | std::ifstream::badbit); - - try - { - diskann::cout << "Opening bin file " << bin_file.c_str() << "... " << std::endl; - reader.open(bin_file, std::ios::binary | std::ios::ate); - reader.seekg(0); - load_bin_impl(reader, data, npts, dim, offset); - } - catch (std::system_error &e) - { - throw FileException(bin_file, e, __FUNCSIG__, __FILE__, __LINE__); - } - diskann::cout << "done." << std::endl; -} - -inline void wait_for_keystroke() -{ - int a; - std::cout << "Press any number to continue.." << std::endl; - std::cin >> a; -} -// load_bin functions END - -inline void load_truthset(const std::string &bin_file, uint32_t *&ids, float *&dists, size_t &npts, size_t &dim) -{ - size_t read_blk_size = 64 * 1024 * 1024; - cached_ifstream reader(bin_file, read_blk_size); - diskann::cout << "Reading truthset file " << bin_file.c_str() << " ..." << std::endl; - size_t actual_file_size = reader.get_file_size(); - - int npts_i32, dim_i32; - reader.read((char *)&npts_i32, sizeof(int)); - reader.read((char *)&dim_i32, sizeof(int)); - npts = (unsigned)npts_i32; - dim = (unsigned)dim_i32; - - diskann::cout << "Metadata: #pts = " << npts << ", #dims = " << dim << "... " << std::endl; - - int truthset_type = -1; // 1 means truthset has ids and distances, 2 means - // only ids, -1 is error - size_t expected_file_size_with_dists = 2 * npts * dim * sizeof(uint32_t) + 2 * sizeof(uint32_t); - - if (actual_file_size == expected_file_size_with_dists) - truthset_type = 1; - - size_t expected_file_size_just_ids = npts * dim * sizeof(uint32_t) + 2 * sizeof(uint32_t); - - if (actual_file_size == expected_file_size_just_ids) - truthset_type = 2; - - if (truthset_type == -1) - { - std::stringstream stream; - stream << "Error. File size mismatch. File should have bin format, with " - "npts followed by ngt followed by npts*ngt ids and optionally " - "followed by npts*ngt distance values; actual size: " - << actual_file_size << ", expected: " << expected_file_size_with_dists << " or " - << expected_file_size_just_ids; - diskann::cout << stream.str(); - throw diskann::ANNException(stream.str(), -1, __FUNCSIG__, __FILE__, __LINE__); - } - - ids = new uint32_t[npts * dim]; - reader.read((char *)ids, npts * dim * sizeof(uint32_t)); - - if (truthset_type == 1) - { - dists = new float[npts * dim]; - reader.read((char *)dists, npts * dim * sizeof(float)); - } -} - -inline void prune_truthset_for_range(const std::string &bin_file, float range, - std::vector> &groundtruth, size_t &npts) -{ - size_t read_blk_size = 64 * 1024 * 1024; - cached_ifstream reader(bin_file, read_blk_size); - diskann::cout << "Reading truthset file " << bin_file.c_str() << "... " << std::endl; - size_t actual_file_size = reader.get_file_size(); - - int npts_i32, dim_i32; - reader.read((char *)&npts_i32, sizeof(int)); - reader.read((char *)&dim_i32, sizeof(int)); - npts = (unsigned)npts_i32; - uint64_t dim = (unsigned)dim_i32; - uint32_t *ids; - float *dists; - - diskann::cout << "Metadata: #pts = " << npts << ", #dims = " << dim << "... " << std::endl; - - int truthset_type = -1; // 1 means truthset has ids and distances, 2 means - // only ids, -1 is error - size_t expected_file_size_with_dists = 2 * npts * dim * sizeof(uint32_t) + 2 * sizeof(uint32_t); - - if (actual_file_size == expected_file_size_with_dists) - truthset_type = 1; - - if (truthset_type == -1) - { - std::stringstream stream; - stream << "Error. File size mismatch. File should have bin format, with " - "npts followed by ngt followed by npts*ngt ids and optionally " - "followed by npts*ngt distance values; actual size: " - << actual_file_size << ", expected: " << expected_file_size_with_dists; - diskann::cout << stream.str(); - throw diskann::ANNException(stream.str(), -1, __FUNCSIG__, __FILE__, __LINE__); - } - - ids = new uint32_t[npts * dim]; - reader.read((char *)ids, npts * dim * sizeof(uint32_t)); - - if (truthset_type == 1) - { - dists = new float[npts * dim]; - reader.read((char *)dists, npts * dim * sizeof(float)); - } - float min_dist = std::numeric_limits::max(); - float max_dist = 0; - groundtruth.resize(npts); - for (uint32_t i = 0; i < npts; i++) - { - groundtruth[i].clear(); - for (uint32_t j = 0; j < dim; j++) - { - if (dists[i * dim + j] <= range) - { - groundtruth[i].emplace_back(ids[i * dim + j]); - } - min_dist = min_dist > dists[i * dim + j] ? dists[i * dim + j] : min_dist; - max_dist = max_dist < dists[i * dim + j] ? dists[i * dim + j] : max_dist; - } - // std::cout<> &groundtruth, - size_t >_num) -{ - size_t read_blk_size = 64 * 1024 * 1024; - cached_ifstream reader(bin_file, read_blk_size); - diskann::cout << "Reading truthset file " << bin_file.c_str() << "... " << std::flush; - size_t actual_file_size = reader.get_file_size(); - - int nptsuint32_t, totaluint32_t; - reader.read((char *)&nptsuint32_t, sizeof(int)); - reader.read((char *)&totaluint32_t, sizeof(int)); - - gt_num = (uint64_t)nptsuint32_t; - uint64_t total_res = (uint64_t)totaluint32_t; - - diskann::cout << "Metadata: #pts = " << gt_num << ", #total_results = " << total_res << "..." << std::endl; - - size_t expected_file_size = 2 * sizeof(uint32_t) + gt_num * sizeof(uint32_t) + total_res * sizeof(uint32_t); - - if (actual_file_size != expected_file_size) - { - std::stringstream stream; - stream << "Error. File size mismatch in range truthset. actual size: " << actual_file_size - << ", expected: " << expected_file_size; - diskann::cout << stream.str(); - throw diskann::ANNException(stream.str(), -1, __FUNCSIG__, __FILE__, __LINE__); - } - groundtruth.clear(); - groundtruth.resize(gt_num); - std::vector gt_count(gt_num); - - reader.read((char *)gt_count.data(), sizeof(uint32_t) * gt_num); - - std::vector gt_stats(gt_count); - std::sort(gt_stats.begin(), gt_stats.end()); - - std::cout << "GT count percentiles:" << std::endl; - for (uint32_t p = 0; p < 100; p += 5) - std::cout << "percentile " << p << ": " << gt_stats[static_cast(std::floor((p / 100.0) * gt_num))] - << std::endl; - std::cout << "percentile 100" - << ": " << gt_stats[gt_num - 1] << std::endl; - - for (uint32_t i = 0; i < gt_num; i++) - { - groundtruth[i].clear(); - groundtruth[i].resize(gt_count[i]); - if (gt_count[i] != 0) - reader.read((char *)groundtruth[i].data(), sizeof(uint32_t) * gt_count[i]); - } -} - -#ifdef EXEC_ENV_OLS -template -inline void load_bin(MemoryMappedFiles &files, const std::string &bin_file, std::unique_ptr &data, size_t &npts, - size_t &dim, size_t offset = 0) -{ - T *ptr; - load_bin(files, bin_file, ptr, npts, dim, offset); - data.reset(ptr); -} -#endif - -inline void copy_file(std::string in_file, std::string out_file) -{ - std::ifstream source(in_file, std::ios::binary); - std::ofstream dest(out_file, std::ios::binary); - - std::istreambuf_iterator begin_source(source); - std::istreambuf_iterator end_source; - std::ostreambuf_iterator begin_dest(dest); - std::copy(begin_source, end_source, begin_dest); - - source.close(); - dest.close(); -} - -DISKANN_DLLEXPORT double calculate_recall(unsigned num_queries, unsigned *gold_std, float *gs_dist, unsigned dim_gs, - unsigned *our_results, unsigned dim_or, unsigned recall_at); - -DISKANN_DLLEXPORT double calculate_recall(unsigned num_queries, unsigned *gold_std, float *gs_dist, unsigned dim_gs, - unsigned *our_results, unsigned dim_or, unsigned recall_at, - const tsl::robin_set &active_tags); - -DISKANN_DLLEXPORT double calculate_range_search_recall(unsigned num_queries, - std::vector> &groundtruth, - std::vector> &our_results); - -template -inline void load_bin(const std::string &bin_file, std::unique_ptr &data, size_t &npts, size_t &dim, - size_t offset = 0) -{ - T *ptr; - load_bin(bin_file, ptr, npts, dim, offset); - data.reset(ptr); -} - -inline void open_file_to_write(std::ofstream &writer, const std::string &filename) -{ - writer.exceptions(std::ofstream::failbit | std::ofstream::badbit); - if (!file_exists(filename)) - writer.open(filename, std::ios::binary | std::ios::out); - else - writer.open(filename, std::ios::binary | std::ios::in | std::ios::out); - - if (writer.fail()) - { - char buff[1024]; -#ifdef _WINDOWS - auto ret = std::to_string(strerror_s(buff, 1024, errno)); -#elif __APPLE__ - auto ret = std::to_string(strerror_r(errno, buff, 1024)); -#else - auto ret = std::string(strerror_r(errno, buff, 1024)); -#endif - - std::string error_message = - std::string("Failed to open file") + filename + " for write because " + buff + ", ret=" + ret; - diskann::cerr << error_message << std::endl; - throw diskann::ANNException(error_message, -1); - } -} - -template -inline size_t save_bin(const std::string &filename, T *data, size_t npts, size_t ndims, size_t offset = 0) -{ - std::ofstream writer; - open_file_to_write(writer, filename); - - diskann::cout << "Writing bin: " << filename.c_str() << std::endl; - writer.seekp(offset, writer.beg); - int npts_i32 = (int)npts, ndims_i32 = (int)ndims; - size_t bytes_written = npts * ndims * sizeof(T) + 2 * sizeof(uint32_t); - writer.write((char *)&npts_i32, sizeof(int)); - writer.write((char *)&ndims_i32, sizeof(int)); - diskann::cout << "bin: #pts = " << npts << ", #dims = " << ndims << ", size = " << bytes_written << "B" - << std::endl; - - writer.write((char *)data, npts * ndims * sizeof(T)); - writer.close(); - diskann::cout << "Finished writing bin." << std::endl; - return bytes_written; -} - -inline void print_progress(double percentage) -{ - int val = (int)(percentage * 100); - int lpad = (int)(percentage * PBWIDTH); - int rpad = PBWIDTH - lpad; - printf("\r%3d%% [%.*s%*s]", val, lpad, PBSTR, rpad, ""); - fflush(stdout); -} - -// load_aligned_bin functions START - -template -inline void load_aligned_bin_impl(std::basic_istream &reader, size_t actual_file_size, T *&data, size_t &npts, - size_t &dim, size_t &rounded_dim) -{ - int npts_i32, dim_i32; - reader.read((char *)&npts_i32, sizeof(int)); - reader.read((char *)&dim_i32, sizeof(int)); - npts = (unsigned)npts_i32; - dim = (unsigned)dim_i32; - - size_t expected_actual_file_size = npts * dim * sizeof(T) + 2 * sizeof(uint32_t); - if (actual_file_size != expected_actual_file_size) - { - std::stringstream stream; - stream << "Error. File size mismatch. Actual size is " << actual_file_size << " while expected size is " - << expected_actual_file_size << " npts = " << npts << " dim = " << dim << " size of = " << sizeof(T) - << std::endl; - diskann::cout << stream.str() << std::endl; - throw diskann::ANNException(stream.str(), -1, __FUNCSIG__, __FILE__, __LINE__); - } - rounded_dim = ROUND_UP(dim, 8); - diskann::cout << "Metadata: #pts = " << npts << ", #dims = " << dim << ", aligned_dim = " << rounded_dim << "... " - << std::flush; - size_t allocSize = npts * rounded_dim * sizeof(T); - diskann::cout << "allocating aligned memory of " << allocSize << " bytes... " << std::flush; - alloc_aligned(((void **)&data), allocSize, 8 * sizeof(T)); - diskann::cout << "done. Copying data to mem_aligned buffer..." << std::flush; - - for (size_t i = 0; i < npts; i++) - { - reader.read((char *)(data + i * rounded_dim), dim * sizeof(T)); - memset(data + i * rounded_dim + dim, 0, (rounded_dim - dim) * sizeof(T)); - } - diskann::cout << " done." << std::endl; -} - -#ifdef EXEC_ENV_OLS -template -inline void load_aligned_bin(MemoryMappedFiles &files, const std::string &bin_file, T *&data, size_t &npts, size_t &dim, - size_t &rounded_dim) -{ - try - { - diskann::cout << "Opening bin file " << bin_file << " ..." << std::flush; - FileContent fc = files.getContent(bin_file); - ContentBuf buf((char *)fc._content, fc._size); - std::basic_istream reader(&buf); - - size_t actual_file_size = fc._size; - load_aligned_bin_impl(reader, actual_file_size, data, npts, dim, rounded_dim); - } - catch (std::system_error &e) - { - throw FileException(bin_file, e, __FUNCSIG__, __FILE__, __LINE__); - } -} -#endif - -template -inline void load_aligned_bin(const std::string &bin_file, T *&data, size_t &npts, size_t &dim, size_t &rounded_dim) -{ - std::ifstream reader; - reader.exceptions(std::ifstream::failbit | std::ifstream::badbit); - - try - { - diskann::cout << "Reading (with alignment) bin file " << bin_file << " ..." << std::flush; - reader.open(bin_file, std::ios::binary | std::ios::ate); - - uint64_t fsize = reader.tellg(); - reader.seekg(0); - load_aligned_bin_impl(reader, fsize, data, npts, dim, rounded_dim); - } - catch (std::system_error &e) - { - throw FileException(bin_file, e, __FUNCSIG__, __FILE__, __LINE__); - } -} - -template -void convert_types(const InType *srcmat, OutType *destmat, size_t npts, size_t dim) -{ -#pragma omp parallel for schedule(static, 65536) - for (int64_t i = 0; i < (int64_t)npts; i++) - { - for (uint64_t j = 0; j < dim; j++) - { - destmat[i * dim + j] = (OutType)srcmat[i * dim + j]; - } - } -} - -// this function will take in_file of n*d dimensions and save the output as a -// floating point matrix -// with n*(d+1) dimensions. All vectors are scaled by a large value M so that -// the norms are <=1 and the final coordinate is set so that the resulting -// norm (in d+1 coordinates) is equal to 1 this is a classical transformation -// from MIPS to L2 search from "On Symmetric and Asymmetric LSHs for Inner -// Product Search" by Neyshabur and Srebro - -template float prepare_base_for_inner_products(const std::string in_file, const std::string out_file) -{ - std::cout << "Pre-processing base file by adding extra coordinate" << std::endl; - std::ifstream in_reader(in_file.c_str(), std::ios::binary); - std::ofstream out_writer(out_file.c_str(), std::ios::binary); - uint64_t npts, in_dims, out_dims; - float max_norm = 0; - - uint32_t npts32, dims32; - in_reader.read((char *)&npts32, sizeof(uint32_t)); - in_reader.read((char *)&dims32, sizeof(uint32_t)); - - npts = npts32; - in_dims = dims32; - out_dims = in_dims + 1; - uint32_t outdims32 = (uint32_t)out_dims; - - out_writer.write((char *)&npts32, sizeof(uint32_t)); - out_writer.write((char *)&outdims32, sizeof(uint32_t)); - - size_t BLOCK_SIZE = 100000; - size_t block_size = npts <= BLOCK_SIZE ? npts : BLOCK_SIZE; - std::unique_ptr in_block_data = std::make_unique(block_size * in_dims); - std::unique_ptr out_block_data = std::make_unique(block_size * out_dims); - - std::memset(out_block_data.get(), 0, sizeof(float) * block_size * out_dims); - uint64_t num_blocks = DIV_ROUND_UP(npts, block_size); - - std::vector norms(npts, 0); - - for (uint64_t b = 0; b < num_blocks; b++) - { - uint64_t start_id = b * block_size; - uint64_t end_id = (b + 1) * block_size < npts ? (b + 1) * block_size : npts; - uint64_t block_pts = end_id - start_id; - in_reader.read((char *)in_block_data.get(), block_pts * in_dims * sizeof(T)); - for (uint64_t p = 0; p < block_pts; p++) - { - for (uint64_t j = 0; j < in_dims; j++) - { - norms[start_id + p] += in_block_data[p * in_dims + j] * in_block_data[p * in_dims + j]; - } - max_norm = max_norm > norms[start_id + p] ? max_norm : norms[start_id + p]; - } - } - - max_norm = std::sqrt(max_norm); - - in_reader.seekg(2 * sizeof(uint32_t), std::ios::beg); - for (uint64_t b = 0; b < num_blocks; b++) - { - uint64_t start_id = b * block_size; - uint64_t end_id = (b + 1) * block_size < npts ? (b + 1) * block_size : npts; - uint64_t block_pts = end_id - start_id; - in_reader.read((char *)in_block_data.get(), block_pts * in_dims * sizeof(T)); - for (uint64_t p = 0; p < block_pts; p++) - { - for (uint64_t j = 0; j < in_dims; j++) - { - out_block_data[p * out_dims + j] = in_block_data[p * in_dims + j] / max_norm; - } - float res = 1 - (norms[start_id + p] / (max_norm * max_norm)); - res = res <= 0 ? 0 : std::sqrt(res); - out_block_data[p * out_dims + out_dims - 1] = res; - } - out_writer.write((char *)out_block_data.get(), block_pts * out_dims * sizeof(float)); - } - out_writer.close(); - return max_norm; -} - -// plain saves data as npts X ndims array into filename -template void save_Tvecs(const char *filename, T *data, size_t npts, size_t ndims) -{ - std::string fname(filename); - - // create cached ofstream with 64MB cache - cached_ofstream writer(fname, 64 * 1048576); - - unsigned dims_u32 = (unsigned)ndims; - - // start writing - for (size_t i = 0; i < npts; i++) - { - // write dims in u32 - writer.write((char *)&dims_u32, sizeof(unsigned)); - - // get cur point in data - T *cur_pt = data + i * ndims; - writer.write((char *)cur_pt, ndims * sizeof(T)); - } -} -template -inline size_t save_data_in_base_dimensions(const std::string &filename, T *data, size_t npts, size_t ndims, - size_t aligned_dim, size_t offset = 0) -{ - std::ofstream writer; //(filename, std::ios::binary | std::ios::out); - open_file_to_write(writer, filename); - int npts_i32 = (int)npts, ndims_i32 = (int)ndims; - size_t bytes_written = 2 * sizeof(uint32_t) + npts * ndims * sizeof(T); - writer.seekp(offset, writer.beg); - writer.write((char *)&npts_i32, sizeof(int)); - writer.write((char *)&ndims_i32, sizeof(int)); - for (size_t i = 0; i < npts; i++) - { - writer.write((char *)(data + i * aligned_dim), ndims * sizeof(T)); - } - writer.close(); - return bytes_written; -} - -template -inline void copy_aligned_data_from_file(const char *bin_file, T *&data, size_t &npts, size_t &dim, - const size_t &rounded_dim, size_t offset = 0) -{ - if (data == nullptr) - { - diskann::cerr << "Memory was not allocated for " << data << " before calling the load function. Exiting..." - << std::endl; - throw diskann::ANNException("Null pointer passed to copy_aligned_data_from_file function", -1, __FUNCSIG__, - __FILE__, __LINE__); - } - std::ifstream reader; - reader.exceptions(std::ios::badbit | std::ios::failbit); - reader.open(bin_file, std::ios::binary); - reader.seekg(offset, reader.beg); - - int npts_i32, dim_i32; - reader.read((char *)&npts_i32, sizeof(int)); - reader.read((char *)&dim_i32, sizeof(int)); - npts = (unsigned)npts_i32; - dim = (unsigned)dim_i32; - - for (size_t i = 0; i < npts; i++) - { - reader.read((char *)(data + i * rounded_dim), dim * sizeof(T)); - memset(data + i * rounded_dim + dim, 0, (rounded_dim - dim) * sizeof(T)); - } -} - -// NOTE :: good efficiency when total_vec_size is integral multiple of 64 -inline void prefetch_vector(const char *vec, size_t vecsize) -{ - size_t max_prefetch_size = (vecsize / 64) * 64; - for (size_t d = 0; d < max_prefetch_size; d += 64) - _mm_prefetch((const char *)vec + d, _MM_HINT_T0); -} - -// NOTE :: good efficiency when total_vec_size is integral multiple of 64 -inline void prefetch_vector_l2(const char *vec, size_t vecsize) -{ - size_t max_prefetch_size = (vecsize / 64) * 64; - for (size_t d = 0; d < max_prefetch_size; d += 64) - _mm_prefetch((const char *)vec + d, _MM_HINT_T1); -} - -// NOTE: Implementation in utils.cpp. -void block_convert(std::ofstream &writr, std::ifstream &readr, float *read_buf, uint64_t npts, uint64_t ndims); - -DISKANN_DLLEXPORT void normalize_data_file(const std::string &inFileName, const std::string &outFileName); - -inline std::string get_tag_string(std::uint64_t tag) -{ - return std::to_string(tag); -} - -inline std::string get_tag_string(const tag_uint128 &tag) -{ - std::string str = std::to_string(tag._data2) + "_" + std::to_string(tag._data1); - return str; -} - -}; // namespace diskann - -struct PivotContainer -{ - PivotContainer() = default; - - PivotContainer(size_t pivo_id, float pivo_dist) : piv_id{pivo_id}, piv_dist{pivo_dist} - { - } - - bool operator<(const PivotContainer &p) const - { - return p.piv_dist < piv_dist; - } - - bool operator>(const PivotContainer &p) const - { - return p.piv_dist > piv_dist; - } - - size_t piv_id; - float piv_dist; -}; - -inline bool validate_index_file_size(std::ifstream &in) -{ - if (!in.is_open()) - throw diskann::ANNException("Index file size check called on unopened file stream", -1, __FUNCSIG__, __FILE__, - __LINE__); - in.seekg(0, in.end); - size_t actual_file_size = in.tellg(); - in.seekg(0, in.beg); - size_t expected_file_size; - in.read((char *)&expected_file_size, sizeof(uint64_t)); - in.seekg(0, in.beg); - if (actual_file_size != expected_file_size) - { - diskann::cerr << "Index file size error. Expected size (metadata): " << expected_file_size - << ", actual file size : " << actual_file_size << "." << std::endl; - return false; - } - return true; -} - -template inline float get_norm(T *arr, const size_t dim) -{ - float sum = 0.0f; - for (uint32_t i = 0; i < dim; i++) - { - sum += arr[i] * arr[i]; - } - return sqrt(sum); -} - -// This function is valid only for float data type. -template inline void normalize(T *arr, const size_t dim) -{ - float norm = get_norm(arr, dim); - for (uint32_t i = 0; i < dim; i++) - { - arr[i] = (T)(arr[i] / norm); - } -} - -inline std::vector read_file_to_vector_of_strings(const std::string &filename, bool unique = false) -{ - std::vector result; - std::set elementSet; - if (filename != "") - { - std::ifstream file(filename); - if (file.fail()) - { - throw diskann::ANNException(std::string("Failed to open file ") + filename, -1); - } - std::string line; - while (std::getline(file, line)) - { - if (line.empty()) - { - break; - } - if (line.find(',') != std::string::npos) - { - std::cerr << "Every query must have exactly one filter" << std::endl; - exit(-1); - } - if (!line.empty() && (line.back() == '\r' || line.back() == '\n')) - { - line.erase(line.size() - 1); - } - if (!elementSet.count(line)) - { - result.push_back(line); - } - if (unique) - { - elementSet.insert(line); - } - } - file.close(); - } - else - { - throw diskann::ANNException(std::string("Failed to open file. filename can not be blank"), -1); - } - return result; -} - -inline void clean_up_artifacts(tsl::robin_set paths_to_clean, tsl::robin_set path_suffixes) -{ - try - { - for (const auto &path : paths_to_clean) - { - for (const auto &suffix : path_suffixes) - { - std::string curr_path_to_clean(path + "_" + suffix); - if (std::remove(curr_path_to_clean.c_str()) != 0) - diskann::cout << "Warning: Unable to remove file :" << curr_path_to_clean << std::endl; - } - } - diskann::cout << "Cleaned all artifacts" << std::endl; - } - catch (const std::exception &e) - { - diskann::cout << "Warning: Unable to clean all artifacts " << e.what() << std::endl; - } -} - -template inline const char *diskann_type_to_name() = delete; -template <> inline const char *diskann_type_to_name() -{ - return "float"; -} -template <> inline const char *diskann_type_to_name() -{ - return "uint8"; -} -template <> inline const char *diskann_type_to_name() -{ - return "int8"; -} -template <> inline const char *diskann_type_to_name() -{ - return "uint16"; -} -template <> inline const char *diskann_type_to_name() -{ - return "int16"; -} -template <> inline const char *diskann_type_to_name() -{ - return "uint32"; -} -template <> inline const char *diskann_type_to_name() -{ - return "int32"; -} -template <> inline const char *diskann_type_to_name() -{ - return "uint64"; -} -template <> inline const char *diskann_type_to_name() -{ - return "int64"; -} - -#ifdef _WINDOWS -#include -#include - -extern bool AvxSupportedCPU; -extern bool Avx2SupportedCPU; - -inline size_t getMemoryUsage() -{ - PROCESS_MEMORY_COUNTERS_EX pmc; - GetProcessMemoryInfo(GetCurrentProcess(), (PROCESS_MEMORY_COUNTERS *)&pmc, sizeof(pmc)); - return pmc.PrivateUsage; -} - -inline std::string getWindowsErrorMessage(DWORD lastError) -{ - char *errorText; - FormatMessageA( - // use system message tables to retrieve error text - FORMAT_MESSAGE_FROM_SYSTEM - // allocate buffer on local heap for error text - | FORMAT_MESSAGE_ALLOCATE_BUFFER - // Important! will fail otherwise, since we're not - // (and CANNOT) pass insertion parameters - | FORMAT_MESSAGE_IGNORE_INSERTS, - NULL, // unused with FORMAT_MESSAGE_FROM_SYSTEM - lastError, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), - (LPSTR)&errorText, // output - 0, // minimum size for output buffer - NULL); // arguments - see note - - return errorText != nullptr ? std::string(errorText) : std::string(); -} - -inline void printProcessMemory(const char *message) -{ - PROCESS_MEMORY_COUNTERS counters; - HANDLE h = GetCurrentProcess(); - GetProcessMemoryInfo(h, &counters, sizeof(counters)); - diskann::cout << message - << " [Peaking Working Set size: " << counters.PeakWorkingSetSize * 1.0 / (1024.0 * 1024 * 1024) - << "GB Working set size: " << counters.WorkingSetSize * 1.0 / (1024.0 * 1024 * 1024) - << "GB Private bytes " << counters.PagefileUsage * 1.0 / (1024 * 1024 * 1024) << "GB]" << std::endl; -} -#else - -// need to check and change this -inline bool avx2Supported() -{ - return true; -} -inline void printProcessMemory(const char *) -{ -} - -inline size_t getMemoryUsage() -{ // for non-windows, we have not implemented this function - return 0; -} - -#endif - -extern bool AvxSupportedCPU; -extern bool Avx2SupportedCPU; diff --git a/packages/leann-backend-diskann/third_party/DiskANN/include/windows_aligned_file_reader.h b/packages/leann-backend-diskann/third_party/DiskANN/include/windows_aligned_file_reader.h deleted file mode 100644 index 0d9a317..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/include/windows_aligned_file_reader.h +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT license. - -#pragma once -#ifdef _WINDOWS -#ifndef USE_BING_INFRA -#include -#include -#include -#include - -#include -#include -#include -#include "aligned_file_reader.h" -#include "tsl/robin_map.h" -#include "utils.h" -#include "windows_customizations.h" - -class WindowsAlignedFileReader : public AlignedFileReader -{ - private: -#ifdef UNICODE - std::wstring m_filename; -#else - std::string m_filename; -#endif - - protected: - // virtual IOContext createContext(); - - public: - DISKANN_DLLEXPORT WindowsAlignedFileReader(){}; - DISKANN_DLLEXPORT virtual ~WindowsAlignedFileReader(){}; - - // Open & close ops - // Blocking calls - DISKANN_DLLEXPORT virtual void open(const std::string &fname) override; - DISKANN_DLLEXPORT virtual void close() override; - - DISKANN_DLLEXPORT virtual void register_thread() override; - DISKANN_DLLEXPORT virtual void deregister_thread() override - { - // TODO: Needs implementation. - } - DISKANN_DLLEXPORT virtual void deregister_all_threads() override - { - // TODO: Needs implementation. - } - DISKANN_DLLEXPORT virtual IOContext &get_ctx() override; - - // process batch of aligned requests in parallel - // NOTE :: blocking call for the calling thread, but can thread-safe - DISKANN_DLLEXPORT virtual void read(std::vector &read_reqs, IOContext &ctx, bool async) override; -}; -#endif // USE_BING_INFRA -#endif //_WINDOWS diff --git a/packages/leann-backend-diskann/third_party/DiskANN/include/windows_customizations.h b/packages/leann-backend-diskann/third_party/DiskANN/include/windows_customizations.h deleted file mode 100644 index e6c5846..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/include/windows_customizations.h +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT license. - -#pragma once - -#ifdef _WINDOWS - -#ifdef _WINDLL -#define DISKANN_DLLEXPORT __declspec(dllexport) -#else -#define DISKANN_DLLEXPORT __declspec(dllimport) -#endif - -#else -#define DISKANN_DLLEXPORT -#endif diff --git a/packages/leann-backend-diskann/third_party/DiskANN/include/windows_slim_lock.h b/packages/leann-backend-diskann/third_party/DiskANN/include/windows_slim_lock.h deleted file mode 100644 index 7fc09b8..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/include/windows_slim_lock.h +++ /dev/null @@ -1,73 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT license. -#pragma once - -#ifndef WIN32_LEAN_AND_MEAN -#define WIN32_LEAN_AND_MEAN -#endif -#include "Windows.h" - -namespace diskann -{ -// A thin C++ wrapper around Windows exclusive functionality of Windows -// SlimReaderWriterLock. -// -// The SlimReaderWriterLock is simpler/more lightweight than std::mutex -// (8 bytes vs 80 bytes), which is useful in the scenario where DiskANN has -// one lock per vector in the index. It does not support recursive locking and -// requires Windows Vista or later. -// -// Full documentation can be found at. -// https://msdn.microsoft.com/en-us/library/windows/desktop/aa904937(v=vs.85).aspx -class windows_exclusive_slim_lock -{ - public: - windows_exclusive_slim_lock() : _lock(SRWLOCK_INIT) - { - } - - // The lock is non-copyable. This also disables move constructor/operator=. - windows_exclusive_slim_lock(const windows_exclusive_slim_lock &) = delete; - windows_exclusive_slim_lock &operator=(const windows_exclusive_slim_lock &) = delete; - - void lock() - { - return AcquireSRWLockExclusive(&_lock); - } - - bool try_lock() - { - return TryAcquireSRWLockExclusive(&_lock) != FALSE; - } - - void unlock() - { - return ReleaseSRWLockExclusive(&_lock); - } - - private: - SRWLOCK _lock; -}; - -// An exclusive lock over a SlimReaderWriterLock. -class windows_exclusive_slim_lock_guard -{ - public: - windows_exclusive_slim_lock_guard(windows_exclusive_slim_lock &p_lock) : _lock(p_lock) - { - _lock.lock(); - } - - // The lock is non-copyable. This also disables move constructor/operator=. - windows_exclusive_slim_lock_guard(const windows_exclusive_slim_lock_guard &) = delete; - windows_exclusive_slim_lock_guard &operator=(const windows_exclusive_slim_lock_guard &) = delete; - - ~windows_exclusive_slim_lock_guard() - { - _lock.unlock(); - } - - private: - windows_exclusive_slim_lock &_lock; -}; -} // namespace diskann diff --git a/packages/leann-backend-diskann/third_party/DiskANN/pyproject.toml b/packages/leann-backend-diskann/third_party/DiskANN/pyproject.toml deleted file mode 100644 index 3871c71..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/pyproject.toml +++ /dev/null @@ -1,58 +0,0 @@ -[build-system] -requires = [ - "setuptools>=59.6", - "pybind11>=2.10.0", - "cmake>=3.22", - "numpy==1.25", # this is important to keep fixed. It also means anyone using something other than 1.25 won't be able to use this library - "wheel", - "ninja" -] -build-backend = "setuptools.build_meta" - -[project] -name = "diskannpy" -version = "0.7.1" - -description = "DiskANN Python extension module" -readme = "python/README.md" -requires-python = ">=3.9" -license = {text = "MIT License"} -dependencies = [ - "numpy==1.25" -] -authors = [ - {name = "Harsha Vardhan Simhadri", email = "harshasi@microsoft.com"}, - {name = "Dax Pryce", email = "daxpryce@microsoft.com"} -] - -[project.optional-dependencies] -dev = ["black", "isort", "mypy"] - -[tool.setuptools] -package-dir = {"" = "python/src"} - -[tool.isort] -profile = "black" -multi_line_output = 3 - -[tool.mypy] -plugins = "numpy.typing.mypy_plugin" - -[tool.cibuildwheel] -manylinux-x86_64-image = "manylinux_2_28" -test-requires = ["scikit-learn~=1.2"] -build-frontend = "build" -skip = ["pp*", "*-win32", "*-manylinux_i686", "*-musllinux*"] -test-command = "python -m unittest discover {project}/python/tests" - -[tool.cibuildwheel.linux] -before-build = [ - "rpm --import https://repo.almalinux.org/almalinux/RPM-GPG-KEY-AlmaLinux", - "dnf makecache --refresh", - "dnf upgrade -y almalinux-release", - "dnf install -y epel-release", - "dnf config-manager -y --add-repo https://yum.repos.intel.com/mkl/setup/intel-mkl.repo", - "rpm --import https://yum.repos.intel.com/intel-gpg-keys/GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB", - "dnf makecache --refresh -y", - "dnf install -y wget make cmake gcc-c++ libaio-devel gperftools-libs libunwind-devel clang-tools-extra boost-devel boost-program-options intel-mkl-2020.4-912" -] diff --git a/packages/leann-backend-diskann/third_party/DiskANN/python/CMakeLists.txt b/packages/leann-backend-diskann/third_party/DiskANN/python/CMakeLists.txt deleted file mode 100644 index 66a5ba3..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/python/CMakeLists.txt +++ /dev/null @@ -1,82 +0,0 @@ -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT license. - -cmake_minimum_required(VERSION 3.18...3.22) - -set(CMAKE_CXX_STANDARD 17) - -if (PYTHON_EXECUTABLE) - set(Python3_EXECUTABLE ${PYTHON_EXECUTABLE}) -endif() - -find_package(Python3 COMPONENTS Interpreter Development.Module NumPy REQUIRED) - -execute_process(COMMAND ${Python3_EXECUTABLE} -c "import pybind11; print(pybind11.get_cmake_dir())" - OUTPUT_VARIABLE _tmp_dir - OUTPUT_STRIP_TRAILING_WHITESPACE COMMAND_ECHO STDOUT) -list(APPEND CMAKE_PREFIX_PATH "${_tmp_dir}") - -# Now we can find pybind11 -find_package(pybind11 CONFIG REQUIRED) - -execute_process(COMMAND ${Python3_EXECUTABLE} -c "import numpy; print(numpy.get_include())" - OUTPUT_VARIABLE _numpy_include - OUTPUT_STRIP_TRAILING_WHITESPACE COMMAND_ECHO STDOUT) - -# pybind11_add_module(diskannpy MODULE src/diskann_bindings.cpp) -# the following is fairly synonymous with pybind11_add_module, but we need more target_link_libraries -# see https://pybind11.readthedocs.io/en/latest/compiling.html#advanced-interface-library-targets for more details -add_library(_diskannpy MODULE - src/module.cpp - src/builder.cpp - src/dynamic_memory_index.cpp - src/static_memory_index.cpp - src/static_disk_index.cpp -) - -target_include_directories(_diskannpy AFTER PRIVATE include) - -if (MSVC) - target_compile_options(_diskannpy PRIVATE /U_WINDLL) -endif() - -target_link_libraries( - _diskannpy - PRIVATE - pybind11::module - pybind11::lto - pybind11::windows_extras - ${PROJECT_NAME} - ${DISKANN_TOOLS_TCMALLOC_LINK_OPTIONS} - ${DISKANN_ASYNC_LIB} -) - -pybind11_extension(_diskannpy) -if(NOT MSVC AND NOT ${CMAKE_BUILD_TYPE} MATCHES Debug|RelWithDebInfo) - # Strip unnecessary sections of the binary on Linux/macOS - pybind11_strip(_diskannpy) -endif() - -set_target_properties(_diskannpy PROPERTIES CXX_VISIBILITY_PRESET "hidden" - CUDA_VISIBILITY_PRESET "hidden") - -# generally, the VERSION_INFO flag is set by pyproject.toml, by way of setup.py. -# attempts to locate the version within CMake fail because the version has to be available -# to pyproject.toml for the sdist to work after we build it. - -if(NOT VERSION_INFO) - set(VERSION_INFO "0.0.0dev") -endif() -target_compile_definitions(_diskannpy PRIVATE VERSION_INFO="${VERSION_INFO}") - -# Add a post-build command to automatically copy the compiled Python module -if(UPDATE_EDITABLE_INSTALL) -add_custom_command( -TARGET _diskannpy -POST_BUILD -COMMAND ${CMAKE_COMMAND} -E copy - ${CMAKE_CURRENT_BINARY_DIR}/_diskannpy.cpython-*.so - ${CMAKE_SOURCE_DIR}/python/src/ -COMMENT "Copying Python module to python/src directory" -) -endif() \ No newline at end of file diff --git a/packages/leann-backend-diskann/third_party/DiskANN/python/README.md b/packages/leann-backend-diskann/third_party/DiskANN/python/README.md deleted file mode 100644 index a0c9475..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/python/README.md +++ /dev/null @@ -1,55 +0,0 @@ -# diskannpy - -[![DiskANN Paper](https://img.shields.io/badge/Paper-NeurIPS%3A_DiskANN-blue)](https://papers.nips.cc/paper/9527-rand-nsg-fast-accurate-billion-point-nearest-neighbor-search-on-a-single-node.pdf) -[![DiskANN Paper](https://img.shields.io/badge/Paper-Arxiv%3A_Fresh--DiskANN-blue)](https://arxiv.org/abs/2105.09613) -[![DiskANN Paper](https://img.shields.io/badge/Paper-Filtered--DiskANN-blue)](https://harsha-simhadri.org/pubs/Filtered-DiskANN23.pdf) -[![DiskANN Main](https://github.com/microsoft/DiskANN/actions/workflows/push-test.yml/badge.svg?branch=main)](https://github.com/microsoft/DiskANN/actions/workflows/push-test.yml) -[![PyPI version](https://img.shields.io/pypi/v/diskannpy.svg)](https://pypi.org/project/diskannpy/) -[![Downloads shield](https://pepy.tech/badge/diskannpy)](https://pepy.tech/project/diskannpy) -[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) - -## Installation -Packages published to PyPI will always be built using the latest numpy major.minor release (at this time, 1.25). - -Conda distributions for versions 1.19-1.25 will be completed as a future effort. In the meantime, feel free to -clone this repository and build it yourself. - -## Local Build Instructions -Please see the [Project README](https://github.com/microsoft/DiskANN/blob/main/README.md) for system dependencies and requirements. - -After ensuring you've followed the directions to build the project library and executables, you will be ready to also -build `diskannpy` with these additional instructions. - -### Changing Numpy Version -In the root folder of DiskANN, there is a file `pyproject.toml`. You will need to edit the version of numpy in both the -`[build-system.requires]` section, as well as the `[project.dependencies]` section. The version numbers must match. - -#### Linux -```bash -python3.11 -m venv venv # versions from python3.9 and up should work -source venv/bin/activate -pip install build -python -m build -``` - -#### Windows -```powershell -py -3.11 -m venv venv # versions from python3.9 and up should work -venv\Scripts\Activate.ps1 -pip install build -python -m build -``` - -The built wheel will be placed in the `dist` directory in your DiskANN root. Install it using `pip install dist/.whl` - -## Citations -Please cite this software in your work as: -``` -@misc{diskann-github, - author = {Simhadri, Harsha Vardhan and Krishnaswamy, Ravishankar and Srinivasa, Gopal and Subramanya, Suhas Jayaram and Antonijevic, Andrija and Pryce, Dax and Kaczynski, David and Williams, Shane and Gollapudi, Siddarth and Sivashankar, Varun and Karia, Neel and Singh, Aditi and Jaiswal, Shikhar and Mahapatro, Neelam and Adams, Philip and Tower, Bryan and Patel, Yash}}, - title = {{DiskANN: Graph-structured Indices for Scalable, Fast, Fresh and Filtered Approximate Nearest Neighbor Search}}, - url = {https://github.com/Microsoft/DiskANN}, - version = {0.6.1}, - year = {2023} -} -``` diff --git a/packages/leann-backend-diskann/third_party/DiskANN/python/apps/cli/__main__.py b/packages/leann-backend-diskann/third_party/DiskANN/python/apps/cli/__main__.py deleted file mode 100644 index d2c9990..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/python/apps/cli/__main__.py +++ /dev/null @@ -1,152 +0,0 @@ -import diskannpy as dap -import numpy as np -import numpy.typing as npt - -import fire - -from contextlib import contextmanager -from time import perf_counter - -from typing import Tuple - - -def _basic_setup( - dtype: str, - query_vectors_file: str -) -> Tuple[dap.VectorDType, npt.NDArray[dap.VectorDType]]: - _dtype = dap.valid_dtype(dtype) - vectors_to_query = dap.vectors_from_binary(query_vectors_file, dtype=_dtype) - return _dtype, vectors_to_query - - -def dynamic( - dtype: str, - index_vectors_file: str, - query_vectors_file: str, - build_complexity: int, - graph_degree: int, - K: int, - search_complexity: int, - num_insert_threads: int, - num_search_threads: int, - gt_file: str = "", -): - _dtype, vectors_to_query = _basic_setup(dtype, query_vectors_file) - vectors_to_index = dap.vectors_from_binary(index_vectors_file, dtype=_dtype) - - npts, ndims = vectors_to_index.shape - index = dap.DynamicMemoryIndex( - "l2", _dtype, ndims, npts, build_complexity, graph_degree - ) - - tags = np.arange(1, npts+1, dtype=np.uintc) - timer = Timer() - - with timer.time("batch insert"): - index.batch_insert(vectors_to_index, tags, num_insert_threads) - - delete_tags = np.random.choice( - np.array(range(1, npts + 1, 1), dtype=np.uintc), - size=int(0.5 * npts), - replace=False - ) - with timer.time("mark deletion"): - for tag in delete_tags: - index.mark_deleted(tag) - - with timer.time("consolidation"): - index.consolidate_delete() - - deleted_data = vectors_to_index[delete_tags - 1, :] - - with timer.time("re-insertion"): - index.batch_insert(deleted_data, delete_tags, num_insert_threads) - - with timer.time("batch searched"): - tags, dists = index.batch_search(vectors_to_query, K, search_complexity, num_search_threads) - - # res_ids = tags - 1 - # if gt_file != "": - # recall = utils.calculate_recall_from_gt_file(K, res_ids, gt_file) - # print(f"recall@{K} is {recall}") - -def static( - dtype: str, - index_directory: str, - index_vectors_file: str, - query_vectors_file: str, - build_complexity: int, - graph_degree: int, - K: int, - search_complexity: int, - num_threads: int, - gt_file: str = "", - index_prefix: str = "ann" -): - _dtype, vectors_to_query = _basic_setup(dtype, query_vectors_file) - timer = Timer() - with timer.time("build static index"): - # build index - dap.build_memory_index( - data=index_vectors_file, - metric="l2", - vector_dtype=_dtype, - index_directory=index_directory, - complexity=build_complexity, - graph_degree=graph_degree, - num_threads=num_threads, - index_prefix=index_prefix, - alpha=1.2, - use_pq_build=False, - num_pq_bytes=8, - use_opq=False, - ) - - with timer.time("load static index"): - # ready search object - index = dap.StaticMemoryIndex( - metric="l2", - vector_dtype=_dtype, - data_path=index_vectors_file, - index_directory=index_directory, - num_threads=num_threads, # this can be different at search time if you would like - initial_search_complexity=search_complexity, - index_prefix=index_prefix - ) - - ids, dists = index.batch_search(vectors_to_query, K, search_complexity, num_threads) - - # if gt_file != "": - # recall = utils.calculate_recall_from_gt_file(K, ids, gt_file) - # print(f"recall@{K} is {recall}") - -def dynamic_clustered(): - pass - -def generate_clusters(): - pass - - -class Timer: - def __init__(self): - self._start = -1 - - @contextmanager - def time(self, message: str): - start = perf_counter() - if self._start == -1: - self._start = start - yield - now = perf_counter() - print(f"Operation {message} completed in {(now - start):.3f}s, total: {(now - self._start):.3f}s") - - - - -if __name__ == "__main__": - fire.Fire({ - "in-mem-dynamic": dynamic, - "in-mem-static": static, - "in-mem-dynamic-clustered": dynamic_clustered, - "generate-clusters": generate_clusters - }, name="cli") diff --git a/packages/leann-backend-diskann/third_party/DiskANN/python/apps/cluster.py b/packages/leann-backend-diskann/third_party/DiskANN/python/apps/cluster.py deleted file mode 100644 index 27a34bb..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/python/apps/cluster.py +++ /dev/null @@ -1,28 +0,0 @@ -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT license. - -import argparse -import utils - - -if __name__ == "__main__": - parser = argparse.ArgumentParser( - prog="cluster", description="kmeans cluster points in a file" - ) - - parser.add_argument("-d", "--data_type", required=True) - parser.add_argument("-i", "--indexdata_file", required=True) - parser.add_argument("-k", "--num_clusters", type=int, required=True) - args = parser.parse_args() - - npts, ndims = get_bin_metadata(indexdata_file) - - data = utils.bin_to_numpy(args.data_type, args.indexdata_file) - - offsets, permutation = utils.cluster_and_permute( - args.data_type, npts, ndims, data, args.num_clusters - ) - - permuted_data = data[permutation] - - utils.numpy_to_bin(permuted_data, args.indexdata_file + ".cluster") diff --git a/packages/leann-backend-diskann/third_party/DiskANN/python/apps/in-mem-dynamic.py b/packages/leann-backend-diskann/third_party/DiskANN/python/apps/in-mem-dynamic.py deleted file mode 100644 index f97e131..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/python/apps/in-mem-dynamic.py +++ /dev/null @@ -1,161 +0,0 @@ -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT license. - -import argparse - -import diskannpy -import numpy as np -import utils - -def insert_and_search( - dtype_str, - indexdata_file, - querydata_file, - Lb, - graph_degree, - K, - Ls, - num_insert_threads, - num_search_threads, - gt_file, -) -> dict[str, float]: - """ - - :param dtype_str: - :param indexdata_file: - :param querydata_file: - :param Lb: - :param graph_degree: - :param K: - :param Ls: - :param num_insert_threads: - :param num_search_threads: - :param gt_file: - :return: Dictionary of timings. Key is the event and value is the number of seconds the event took - """ - timer_results: dict[str, float] = {} - - method_timer: utils.Timer = utils.Timer() - - npts, ndims = utils.get_bin_metadata(indexdata_file) - - if dtype_str == "float": - dtype = np.float32 - elif dtype_str == "int8": - dtype = np.int8 - elif dtype_str == "uint8": - dtype = np.uint8 - else: - raise ValueError("data_type must be float, int8 or uint8") - - index = diskannpy.DynamicMemoryIndex( - distance_metric="l2", - vector_dtype=dtype, - dimensions=ndims, - max_vectors=npts, - complexity=Lb, - graph_degree=graph_degree - ) - queries = diskannpy.vectors_from_file(querydata_file, dtype) - data = diskannpy.vectors_from_file(indexdata_file, dtype) - - tags = np.zeros(npts, dtype=np.uintc) - timer = utils.Timer() - for i in range(npts): - tags[i] = i + 1 - index.batch_insert(data, tags, num_insert_threads) - compute_seconds = timer.elapsed() - print('batch_insert complete in', compute_seconds, 's') - timer_results["batch_insert_seconds"] = compute_seconds - - delete_tags = np.random.choice( - np.array(range(1, npts + 1, 1), dtype=np.uintc), - size=int(0.5 * npts), - replace=False - ) - - timer.reset() - for tag in delete_tags: - index.mark_deleted(tag) - compute_seconds = timer.elapsed() - timer_results['mark_deletion_seconds'] = compute_seconds - print('mark deletion completed in', compute_seconds, 's') - - timer.reset() - index.consolidate_delete() - compute_seconds = timer.elapsed() - print('consolidation completed in', compute_seconds, 's') - timer_results['consolidation_completed_seconds'] = compute_seconds - - deleted_data = data[delete_tags - 1, :] - - timer.reset() - index.batch_insert(deleted_data, delete_tags, num_insert_threads) - compute_seconds = timer.elapsed() - print('re-insertion completed in', compute_seconds, 's') - timer_results['re-insertion_seconds'] = compute_seconds - - timer.reset() - tags, dists = index.batch_search(queries, K, Ls, num_search_threads) - compute_seconds = timer.elapsed() - print('Batch searched', queries.shape[0], ' queries in ', compute_seconds, 's') - timer_results['batch_searched_seconds'] = compute_seconds - - res_ids = tags - 1 - if gt_file != "": - timer.reset() - recall = utils.calculate_recall_from_gt_file(K, res_ids, gt_file) - print(f"recall@{K} is {recall}") - timer_results['recall_computed_seconds'] = timer.elapsed() - - timer_results['total_time_seconds'] = method_timer.elapsed() - - return timer_results - - -if __name__ == "__main__": - parser = argparse.ArgumentParser( - prog="in-mem-dynamic", - description="Inserts points dynamically in a clustered order and search from vectors in a file.", - ) - - parser.add_argument("-d", "--data_type", required=True) - parser.add_argument("-i", "--indexdata_file", required=True) - parser.add_argument("-q", "--querydata_file", required=True) - parser.add_argument("-Lb", "--Lbuild", default=50, type=int) - parser.add_argument("-Ls", "--Lsearch", default=50, type=int) - parser.add_argument("-R", "--graph_degree", default=32, type=int) - parser.add_argument("-TI", "--num_insert_threads", default=8, type=int) - parser.add_argument("-TS", "--num_search_threads", default=8, type=int) - parser.add_argument("-K", default=10, type=int) - parser.add_argument("--gt_file", default="") - parser.add_argument("--json_timings_output", required=False, default=None, help="File to write out timings to as JSON. If not specified, timings will not be written out.") - args = parser.parse_args() - - timings = insert_and_search( - args.data_type, - args.indexdata_file, - args.querydata_file, - args.Lbuild, - args.graph_degree, # Build args - args.K, - args.Lsearch, - args.num_insert_threads, - args.num_search_threads, # search args - args.gt_file, - ) - - if args.json_timings_output is not None: - import json - timings['log_file'] = args.json_timings_output - with open(args.json_timings_output, "w") as f: - json.dump(timings, f) - -""" -An ingest optimized example with SIFT1M -source venv/bin/activate -python python/apps/in-mem-dynamic.py -d float \ --i "$HOME/data/sift/sift_base.fbin" -q "$HOME/data/sift/sift_query.fbin" --gt_file "$HOME/data/sift/gt100_base" \ --Lb 10 -R 30 -Ls 200 -""" - diff --git a/packages/leann-backend-diskann/third_party/DiskANN/python/apps/in-mem-static.py b/packages/leann-backend-diskann/third_party/DiskANN/python/apps/in-mem-static.py deleted file mode 100644 index 9fb9a2c..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/python/apps/in-mem-static.py +++ /dev/null @@ -1,149 +0,0 @@ -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT license. - -import argparse -from xml.dom.pulldom import default_bufsize - -import diskannpy -import numpy as np -import utils - -def build_and_search( - metric, - dtype_str, - index_directory, - indexdata_file, - querydata_file, - Lb, - graph_degree, - K, - Ls, - num_threads, - gt_file, - index_prefix, - search_only -) -> dict[str, float]: - """ - - :param metric: - :param dtype_str: - :param index_directory: - :param indexdata_file: - :param querydata_file: - :param Lb: - :param graph_degree: - :param K: - :param Ls: - :param num_threads: - :param gt_file: - :param index_prefix: - :param search_only: - :return: Dictionary of timings. Key is the event and value is the number of seconds the event took - in wall-clock-time. - """ - timer_results: dict[str, float] = {} - - method_timer: utils.Timer = utils.Timer() - - if dtype_str == "float": - dtype = np.single - elif dtype_str == "int8": - dtype = np.byte - elif dtype_str == "uint8": - dtype = np.ubyte - else: - raise ValueError("data_type must be float, int8 or uint8") - - # build index - if not search_only: - build_index_timer = utils.Timer() - diskannpy.build_memory_index( - data=indexdata_file, - distance_metric=metric, - vector_dtype=dtype, - index_directory=index_directory, - complexity=Lb, - graph_degree=graph_degree, - num_threads=num_threads, - index_prefix=index_prefix, - alpha=1.2, - use_pq_build=False, - num_pq_bytes=8, - use_opq=False, - ) - timer_results["build_index_seconds"] = build_index_timer.elapsed() - - # ready search object - load_index_timer = utils.Timer() - index = diskannpy.StaticMemoryIndex( - distance_metric=metric, - vector_dtype=dtype, - index_directory=index_directory, - num_threads=num_threads, # this can be different at search time if you would like - initial_search_complexity=Ls, - index_prefix=index_prefix - ) - timer_results["load_index_seconds"] = load_index_timer.elapsed() - - queries = utils.bin_to_numpy(dtype, querydata_file) - - query_timer = utils.Timer() - ids, dists = index.batch_search(queries, 10, Ls, num_threads) - query_time = query_timer.elapsed() - qps = round(queries.shape[0]/query_time, 1) - print('Batch searched', queries.shape[0], 'in', query_time, 's @', qps, 'QPS') - timer_results["query_seconds"] = query_time - - if gt_file != "": - recall_timer = utils.Timer() - recall = utils.calculate_recall_from_gt_file(K, ids, gt_file) - print(f"recall@{K} is {recall}") - timer_results["recall_seconds"] = recall_timer.elapsed() - - timer_results['total_time_seconds'] = method_timer.elapsed() - - return timer_results - -if __name__ == "__main__": - parser = argparse.ArgumentParser( - prog="in-mem-static", - description="Static in-memory build and search from vectors in a file", - ) - - parser.add_argument("-m", "--metric", required=False, default="l2") - parser.add_argument("-d", "--data_type", required=True) - parser.add_argument("-id", "--index_directory", required=False, default=".") - parser.add_argument("-i", "--indexdata_file", required=True) - parser.add_argument("-q", "--querydata_file", required=True) - parser.add_argument("-Lb", "--Lbuild", default=50, type=int) - parser.add_argument("-Ls", "--Lsearch", default=50, type=int) - parser.add_argument("-R", "--graph_degree", default=32, type=int) - parser.add_argument("-T", "--num_threads", default=8, type=int) - parser.add_argument("-K", default=10, type=int) - parser.add_argument("-G", "--gt_file", default="") - parser.add_argument("-ip", "--index_prefix", required=False, default="ann") - parser.add_argument("--search_only", required=False, default=False) - parser.add_argument("--json_timings_output", required=False, default=None, help="File to write out timings to as JSON. If not specified, timings will not be written out.") - args = parser.parse_args() - - timings: dict[str, float] = build_and_search( - args.metric, - args.data_type, - args.index_directory.strip(), - args.indexdata_file.strip(), - args.querydata_file.strip(), - args.Lbuild, - args.graph_degree, # Build args - args.K, - args.Lsearch, - args.num_threads, # search args - args.gt_file, - args.index_prefix, - args.search_only - ) - - if args.json_timings_output is not None: - import json - timings['log_file'] = args.json_timings_output - with open(args.json_timings_output, "w") as f: - json.dump(timings, f) diff --git a/packages/leann-backend-diskann/third_party/DiskANN/python/apps/insert-in-clustered-order.py b/packages/leann-backend-diskann/third_party/DiskANN/python/apps/insert-in-clustered-order.py deleted file mode 100644 index 25cb9d5..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/python/apps/insert-in-clustered-order.py +++ /dev/null @@ -1,103 +0,0 @@ -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT license. - -import argparse - -import diskannpy -import numpy as np -import utils - - -def insert_and_search( - dtype_str, - indexdata_file, - querydata_file, - Lb, - graph_degree, - num_clusters, - num_insert_threads, - K, - Ls, - num_search_threads, - gt_file, -): - npts, ndims = utils.get_bin_metadata(indexdata_file) - - if dtype_str == "float": - dtype = np.float32 - elif dtype_str == "int8": - dtype = np.int8 - elif dtype_str == "uint8": - dtype = np.uint8 - else: - raise ValueError("data_type must be float, int8 or uint8") - - index = diskannpy.DynamicMemoryIndex( - distance_metric="l2", - vector_dtype=dtype, - dimensions=ndims, - max_vectors=npts, - complexity=Lb, - graph_degree=graph_degree - ) - queries = diskannpy.vectors_from_file(querydata_file, dtype) - data = diskannpy.vectors_from_file(indexdata_file, dtype) - - offsets, permutation = utils.cluster_and_permute( - dtype_str, npts, ndims, data, num_clusters - ) - - i = 0 - timer = utils.Timer() - for c in range(num_clusters): - cluster_index_range = range(offsets[c], offsets[c + 1]) - cluster_indices = np.array(permutation[cluster_index_range], dtype=np.uint32) - cluster_data = data[cluster_indices, :] - index.batch_insert(cluster_data, cluster_indices + 1, num_insert_threads) - print('Inserted cluster', c, 'in', timer.elapsed(), 's') - tags, dists = index.batch_search(queries, K, Ls, num_search_threads) - print('Batch searched', queries.shape[0], 'queries in', timer.elapsed(), 's') - res_ids = tags - 1 - - if gt_file != "": - recall = utils.calculate_recall_from_gt_file(K, res_ids, gt_file) - print(f"recall@{K} is {recall}") - - -if __name__ == "__main__": - parser = argparse.ArgumentParser( - prog="in-mem-dynamic", - description="Inserts points dynamically in a clustered order and search from vectors in a file.", - ) - - parser.add_argument("-d", "--data_type", required=True) - parser.add_argument("-i", "--indexdata_file", required=True) - parser.add_argument("-q", "--querydata_file", required=True) - parser.add_argument("-Lb", "--Lbuild", default=50, type=int) - parser.add_argument("-Ls", "--Lsearch", default=50, type=int) - parser.add_argument("-R", "--graph_degree", default=32, type=int) - parser.add_argument("-TI", "--num_insert_threads", default=8, type=int) - parser.add_argument("-TS", "--num_search_threads", default=8, type=int) - parser.add_argument("-C", "--num_clusters", default=32, type=int) - parser.add_argument("-K", default=10, type=int) - parser.add_argument("--gt_file", default="") - args = parser.parse_args() - - insert_and_search( - args.data_type, - args.indexdata_file, - args.querydata_file, - args.Lbuild, - args.graph_degree, # Build args - args.num_clusters, - args.num_insert_threads, - args.K, - args.Lsearch, - args.num_search_threads, # search args - args.gt_file, - ) - -# An ingest optimized example with SIFT1M -# python3 ~/DiskANN/python/apps/insert-in-clustered-order.py -d float \ -# -i sift_base.fbin -q sift_query.fbin --gt_file gt100_base \ -# -Lb 10 -R 30 -Ls 200 -C 32 \ No newline at end of file diff --git a/packages/leann-backend-diskann/third_party/DiskANN/python/apps/utils.py b/packages/leann-backend-diskann/third_party/DiskANN/python/apps/utils.py deleted file mode 100644 index a526984..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/python/apps/utils.py +++ /dev/null @@ -1,120 +0,0 @@ -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT license. - -import numpy as np -from scipy.cluster.vq import vq, kmeans2 -from typing import Tuple -from time import perf_counter - - -def get_bin_metadata(bin_file) -> Tuple[int, int]: - array = np.fromfile(file=bin_file, dtype=np.uint32, count=2) - return array[0], array[1] - - -def bin_to_numpy(dtype, bin_file) -> np.ndarray: - npts, ndims = get_bin_metadata(bin_file) - return np.fromfile(file=bin_file, dtype=dtype, offset=8).reshape(npts, ndims) - - -class Timer: - last = perf_counter() - - def reset(self): - new = perf_counter() - self.last = new - - def elapsed(self, round_digit:int = 3): - new = perf_counter() - elapsed_time = new - self.last - self.last = new - return round(elapsed_time, round_digit) - - -def numpy_to_bin(array, out_file): - shape = np.shape(array) - npts = shape[0].astype(np.uint32) - ndims = shape[1].astype(np.uint32) - f = open(out_file, "wb") - f.write(npts.tobytes()) - f.write(ndims.tobytes()) - f.write(array.tobytes()) - f.close() - - -def read_gt_file(gt_file) -> Tuple[np.ndarray[int], np.ndarray[float]]: - """ - Return ids and distances to queries - """ - nq, K = get_bin_metadata(gt_file) - ids = np.fromfile(file=gt_file, dtype=np.uint32, offset=8, count=nq * K).reshape( - nq, K - ) - dists = np.fromfile( - file=gt_file, dtype=np.float32, offset=8 + nq * K * 4, count=nq * K - ).reshape(nq, K) - return ids, dists - - -def calculate_recall( - result_set_indices: np.ndarray[int], - truth_set_indices: np.ndarray[int], - recall_at: int = 5, -) -> float: - """ - result_set_indices and truth_set_indices correspond by row index. the columns in each row contain the indices of - the nearest neighbors, with result_set_indices being the approximate nearest neighbor results and truth_set_indices - being the brute force nearest neighbor calculation via sklearn's NearestNeighbor class. - :param result_set_indices: - :param truth_set_indices: - :param recall_at: - :return: - """ - found = 0 - for i in range(0, result_set_indices.shape[0]): - result_set_set = set(result_set_indices[i][0:recall_at]) - truth_set_set = set(truth_set_indices[i][0:recall_at]) - found += len(result_set_set.intersection(truth_set_set)) - return found / (result_set_indices.shape[0] * recall_at) - - -def calculate_recall_from_gt_file(K: int, ids: np.ndarray[int], gt_file: str) -> float: - """ - Calculate recall from ids returned from search and those read from file - """ - gt_ids, gt_dists = read_gt_file(gt_file) - return calculate_recall(ids, gt_ids, K) - - -def cluster_and_permute( - dtype_str, npts, ndims, data, num_clusters -) -> Tuple[np.ndarray[int], np.ndarray[int]]: - """ - Cluster the data and return permutation of row indices - that would group indices of the same cluster together - """ - sample_size = min(100000, npts) - sample_indices = np.random.choice(range(npts), size=sample_size, replace=False) - sampled_data = data[sample_indices, :] - centroids, sample_labels = kmeans2(sampled_data, num_clusters, minit="++", iter=10) - labels, dist = vq(data, centroids) - - count = np.zeros(num_clusters) - for i in range(npts): - count[labels[i]] += 1 - print("Cluster counts") - print(count) - - offsets = np.zeros(num_clusters + 1, dtype=int) - for i in range(0, num_clusters, 1): - offsets[i + 1] = offsets[i] + count[i] - - permutation = np.zeros(npts, dtype=int) - counters = np.zeros(num_clusters, dtype=int) - for i in range(npts): - label = labels[i] - row = offsets[label] + counters[label] - counters[label] += 1 - permutation[row] = i - - return offsets, permutation diff --git a/packages/leann-backend-diskann/third_party/DiskANN/python/include/builder.h b/packages/leann-backend-diskann/third_party/DiskANN/python/include/builder.h deleted file mode 100644 index 56677ac..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/python/include/builder.h +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT license. - -#pragma once - -#include -#include - -#include "common.h" -#include "distance.h" - -namespace diskannpy -{ -template -void build_disk_index(diskann::Metric metric, const std::string &data_file_path, const std::string &index_prefix_path, - uint32_t complexity, uint32_t graph_degree, double final_index_ram_limit, - double indexing_ram_budget, uint32_t num_threads, uint32_t pq_disk_bytes, - const std::string &codebook_prefix); - -template -void build_memory_index(diskann::Metric metric, const std::string &vector_bin_path, - const std::string &index_output_path, uint32_t graph_degree, uint32_t complexity, float alpha, - uint32_t num_threads, bool use_pq_build, size_t num_pq_bytes, bool use_opq, - bool use_tags = false, const std::string &filter_labels_file = "", - const std::string &universal_label = "", uint32_t filter_complexity = 0); - -} // namespace diskannpy diff --git a/packages/leann-backend-diskann/third_party/DiskANN/python/include/common.h b/packages/leann-backend-diskann/third_party/DiskANN/python/include/common.h deleted file mode 100644 index 7c63534..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/python/include/common.h +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT license. - -#pragma once - -#include -#include - -#include -#include - -namespace py = pybind11; - -namespace diskannpy -{ - -typedef uint32_t filterT; - -typedef uint32_t StaticIdType; -typedef uint32_t DynamicIdType; - -template using NeighborsAndDistances = std::pair, py::array_t>; - -}; // namespace diskannpy diff --git a/packages/leann-backend-diskann/third_party/DiskANN/python/include/dynamic_memory_index.h b/packages/leann-backend-diskann/third_party/DiskANN/python/include/dynamic_memory_index.h deleted file mode 100644 index 02d6b8c..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/python/include/dynamic_memory_index.h +++ /dev/null @@ -1,53 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT license. - -#pragma once - -#include -#include - -#include -#include - -#include "common.h" -#include "index.h" -#include "parameters.h" - -namespace py = pybind11; - -namespace diskannpy -{ - -template -class DynamicMemoryIndex -{ - public: - DynamicMemoryIndex(diskann::Metric m, size_t dimensions, size_t max_vectors, uint32_t complexity, - uint32_t graph_degree, bool saturate_graph, uint32_t max_occlusion_size, float alpha, - uint32_t num_threads, uint32_t filter_complexity, uint32_t num_frozen_points, - uint32_t initial_search_complexity, uint32_t initial_search_threads, - bool concurrent_consolidation); - - void load(const std::string &index_path); - int insert(const py::array_t &vector, DynamicIdType id); - py::array_t batch_insert(py::array_t &vectors, - py::array_t &ids, int32_t num_inserts, - int num_threads = 0); - int mark_deleted(DynamicIdType id); - void save(const std::string &save_path, bool compact_before_save = false); - NeighborsAndDistances search(py::array_t &query, uint64_t knn, - uint64_t complexity); - NeighborsAndDistances batch_search(py::array_t &queries, - uint64_t num_queries, uint64_t knn, uint64_t complexity, - uint32_t num_threads); - void consolidate_delete(); - size_t num_points(); - - - private: - const uint32_t _initial_search_complexity; - const diskann::IndexWriteParameters _write_parameters; - diskann::Index _index; -}; - -}; // namespace diskannpy \ No newline at end of file diff --git a/packages/leann-backend-diskann/third_party/DiskANN/python/include/static_disk_index.h b/packages/leann-backend-diskann/third_party/DiskANN/python/include/static_disk_index.h deleted file mode 100644 index a3b79c4..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/python/include/static_disk_index.h +++ /dev/null @@ -1,65 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT license. - -#pragma once - -#include -#include - -#include -#include - -#ifdef _WINDOWS -#include "windows_aligned_file_reader.h" -#elif __APPLE__ -#include "apple_aligned_file_reader.h" -#else -#include "linux_aligned_file_reader.h" -#endif - -#include "common.h" -#include "pq_flash_index.h" - -namespace py = pybind11; - -namespace diskannpy -{ - -#ifdef _WINDOWS -typedef WindowsAlignedFileReader PlatformSpecificAlignedFileReader; -#elif __APPLE__ -typedef AppleAlignedFileReader PlatformSpecificAlignedFileReader; -#else -typedef LinuxAlignedFileReader PlatformSpecificAlignedFileReader; -#endif - -template class StaticDiskIndex -{ - public: - StaticDiskIndex(diskann::Metric metric, const std::string &index_path_prefix, uint32_t num_threads, - size_t num_nodes_to_cache, uint32_t cache_mechanism, const std::string &pq_prefix, - const std::string &partition_prefix); - - void cache_bfs_levels(size_t num_nodes_to_cache); - - void cache_sample_paths(size_t num_nodes_to_cache, const std::string &warmup_query_file, uint32_t num_threads); - - NeighborsAndDistances search(py::array_t &query, - uint64_t knn, uint64_t complexity, uint64_t beam_width, - bool USE_DEFERRED_FETCH = false, bool skip_search_reorder = false, - bool recompute_beighbor_embeddings = false, bool dedup_node_dis = false, - float prune_ratio = 0, bool batch_recompute = false, - bool global_pruning = false); - - NeighborsAndDistances batch_search( - py::array_t &queries, uint64_t num_queries, uint64_t knn, - uint64_t complexity, uint64_t beam_width, uint32_t num_threads, bool USE_DEFERRED_FETCH = false, - bool skip_search_reorder = false, bool recompute_beighbor_embeddings = false, bool dedup_node_dis = false, - float prune_ratio = 0, bool batch_recompute = false, bool global_pruning = false); - - private: - std::shared_ptr _reader; - std::shared_ptr _graph_reader; - diskann::PQFlashIndex

_index; -}; -} // namespace diskannpy diff --git a/packages/leann-backend-diskann/third_party/DiskANN/python/include/static_memory_index.h b/packages/leann-backend-diskann/third_party/DiskANN/python/include/static_memory_index.h deleted file mode 100644 index 6ed5a08..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/python/include/static_memory_index.h +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT license. - -#pragma once - -#include -#include - -#include -#include - -#include "common.h" -#include "index.h" - -namespace py = pybind11; - -namespace diskannpy -{ - -template class StaticMemoryIndex -{ - public: - StaticMemoryIndex(diskann::Metric m, const std::string &index_prefix, size_t num_points, size_t dimensions, - uint32_t num_threads, uint32_t initial_search_complexity); - - NeighborsAndDistances search(py::array_t &query, - uint64_t knn, uint64_t complexity); - - NeighborsAndDistances search_with_filter( - py::array_t &query, uint64_t knn, uint64_t complexity, - filterT filter); - - NeighborsAndDistances batch_search( - py::array_t &queries, uint64_t num_queries, uint64_t knn, - uint64_t complexity, uint32_t num_threads); - - private: - diskann::Index _index; -}; -} // namespace diskannpy \ No newline at end of file diff --git a/packages/leann-backend-diskann/third_party/DiskANN/python/src/__init__.py b/packages/leann-backend-diskann/third_party/DiskANN/python/src/__init__.py deleted file mode 100644 index c2e1b07..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/python/src/__init__.py +++ /dev/null @@ -1,138 +0,0 @@ -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT license. - -""" -# Documentation Overview -`diskannpy` is mostly structured around 2 distinct processes: [Index Builder Functions](#index-builders) and [Search Classes](#search-classes) - -It also includes a few nascent [utilities](#utilities). - -And lastly, it makes substantial use of type hints, with various shorthand [type aliases](#parameter-and-response-type-aliases) documented. -When reading the `diskannpy` code we refer to the type aliases, though `pdoc` helpfully expands them. - -## Index Builders -- `build_disk_index` - To build an index that cannot fully fit into memory when searching -- `build_memory_index` - To build an index that can fully fit into memory when searching - -## Search Classes -- `StaticMemoryIndex` - for indices that can fully fit in memory and won't be changed during the search operations -- `StaticDiskIndex` - for indices that cannot fully fit in memory, thus relying on disk IO to search, and also won't be changed during search operations -- `DynamicMemoryIndex` - for indices that can fully fit in memory and will be mutated via insert/deletion operations as well as search operations - -## Parameter Defaults -- `diskannpy.defaults` - Default values exported from the C++ extension for Python users - -## Parameter and Response Type Aliases -- `DistanceMetric` - What distance metrics does `diskannpy` support? -- `VectorDType` - What vector datatypes does `diskannpy` support? -- `QueryResponse` - What can I expect as a response to my search? -- `QueryResponseBatch` - What can I expect as a response to my batch search? -- `VectorIdentifier` - What types do `diskannpy` support as vector identifiers? -- `VectorIdentifierBatch` - A batch of identifiers of the exact same type. The type can change, but they must **all** change. -- `VectorLike` - How does a vector look to `diskannpy`, to be inserted or searched with. -- `VectorLikeBatch` - A batch of those vectors, to be inserted or searched with. -- `Metadata` - DiskANN vector binary file metadata (num_points, vector_dim) - -## Utilities -- `vectors_to_file` - Turns a 2 dimensional `numpy.typing.NDArray[VectorDType]` with shape `(number_of_points, vector_dim)` into a DiskANN vector bin file. -- `vectors_from_file` - Reads a DiskANN vector bin file representing stored vectors into a numpy ndarray. -- `vectors_metadata_from_file` - Reads metadata stored in a DiskANN vector bin file without reading the entire file -- `tags_to_file` - Turns a 1 dimensional `numpy.typing.NDArray[VectorIdentifier]` into a DiskANN tags bin file. -- `tags_from_file` - Reads a DiskANN tags bin file representing stored tags into a numpy ndarray. -- `valid_dtype` - Checks if a given vector dtype is supported by `diskannpy` -""" - -from typing import Any, Literal, NamedTuple, Type, Union - -import numpy as np -from numpy import typing as npt - -DistanceMetric = Literal["l2", "mips", "cosine"] -""" Type alias for one of {"l2", "mips", "cosine"} """ -VectorDType = Union[Type[np.float32], Type[np.int8], Type[np.uint8]] -""" Type alias for one of {`numpy.float32`, `numpy.int8`, `numpy.uint8`} """ -VectorLike = npt.NDArray[VectorDType] -""" Type alias for something that can be treated as a vector """ -VectorLikeBatch = npt.NDArray[VectorDType] -""" Type alias for a batch of VectorLikes """ -VectorIdentifier = np.uint32 -""" -Type alias for a vector identifier, whether it be an implicit array index identifier from StaticMemoryIndex or -StaticDiskIndex, or an explicit tag identifier from DynamicMemoryIndex -""" -VectorIdentifierBatch = npt.NDArray[np.uint32] -""" Type alias for a batch of VectorIdentifiers """ - - -class QueryResponse(NamedTuple): - """ - Tuple with two values, identifiers and distances. Both are 1d arrays, positionally correspond, and will contain the - nearest neighbors from [0..k_neighbors) - """ - - identifiers: npt.NDArray[VectorIdentifier] - """ A `numpy.typing.NDArray[VectorIdentifier]` array of vector identifiers, 1 dimensional """ - distances: npt.NDArray[np.float32] - """ - A `numpy.typing.NDAarray[numpy.float32]` of distances as calculated by the distance metric function, 1 dimensional - """ - - -class QueryResponseBatch(NamedTuple): - """ - Tuple with two values, identifiers and distances. Both are 2d arrays, with dimensionality determined by the - rows corresponding to the number of queries made, and the columns corresponding to the k neighbors - requested. The two 2d arrays have an implicit, position-based relationship - """ - - identifiers: npt.NDArray[VectorIdentifier] - """ - A `numpy.typing.NDArray[VectorIdentifier]` array of vector identifiers, 2 dimensional. The row corresponds to index - of the query, and the column corresponds to the k neighbors requested - """ - distances: np.ndarray[np.float32] - """ - A `numpy.typing.NDAarray[numpy.float32]` of distances as calculated by the distance metric function, 2 dimensional. - The row corresponds to the index of the query, and the column corresponds to the distance of the query to the - *k-th* neighbor - """ - - -from . import defaults -from ._builder import build_disk_index, build_memory_index -from ._common import valid_dtype -from ._dynamic_memory_index import DynamicMemoryIndex -from ._files import ( - Metadata, - tags_from_file, - tags_to_file, - vectors_from_file, - vectors_metadata_from_file, - vectors_to_file, -) -from ._static_disk_index import StaticDiskIndex -from ._static_memory_index import StaticMemoryIndex - -__all__ = [ - "build_disk_index", - "build_memory_index", - "StaticDiskIndex", - "StaticMemoryIndex", - "DynamicMemoryIndex", - "defaults", - "DistanceMetric", - "VectorDType", - "QueryResponse", - "QueryResponseBatch", - "VectorIdentifier", - "VectorIdentifierBatch", - "VectorLike", - "VectorLikeBatch", - "Metadata", - "vectors_metadata_from_file", - "vectors_to_file", - "vectors_from_file", - "tags_to_file", - "tags_from_file", - "valid_dtype", -] diff --git a/packages/leann-backend-diskann/third_party/DiskANN/python/src/_builder.py b/packages/leann-backend-diskann/third_party/DiskANN/python/src/_builder.py deleted file mode 100644 index 6567020..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/python/src/_builder.py +++ /dev/null @@ -1,349 +0,0 @@ -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT license. - -import json -import os -import shutil -from pathlib import Path -from typing import Optional, Tuple, Union - -import numpy as np - -from . import DistanceMetric, VectorDType, VectorIdentifierBatch, VectorLikeBatch -from . import _diskannpy as _native_dap -from ._common import ( - _assert, - _assert_is_nonnegative_uint32, - _assert_is_positive_uint32, - _castable_dtype_or_raise, - _valid_metric, - _write_index_metadata, - valid_dtype, -) -from ._diskannpy import defaults -from ._files import tags_to_file, vectors_metadata_from_file, vectors_to_file - - -def _valid_path_and_dtype( - data: Union[str, VectorLikeBatch], - vector_dtype: VectorDType, - index_path: str, - index_prefix: str, -) -> Tuple[str, VectorDType]: - if isinstance(data, str): - vector_bin_path = data - _assert( - Path(data).exists() and Path(data).is_file(), - "if data is of type `str`, it must both exist and be a file", - ) - vector_dtype_actual = valid_dtype(vector_dtype) - else: - vector_bin_path = os.path.join(index_path, f"{index_prefix}_vectors.bin") - # if Path(vector_bin_path).exists(): - # raise ValueError( - # f"The path {vector_bin_path} already exists. Remove it and try again." - # ) - vector_dtype_actual = valid_dtype(data.dtype) - # vectors_to_file(vector_file=vector_bin_path, vectors=data) - - return vector_bin_path, vector_dtype_actual - - -def build_disk_index( - data: Union[str, VectorLikeBatch], - distance_metric: DistanceMetric, - index_directory: str, - complexity: int, - graph_degree: int, - search_memory_maximum: float, - build_memory_maximum: float, - num_threads: int, - pq_disk_bytes: int = defaults.PQ_DISK_BYTES, - vector_dtype: Optional[VectorDType] = None, - index_prefix: str = "ann", - codebook_prefix: str = "", -) -> None: - """ - This function will construct a DiskANN disk index. Disk indices are ideal for very large datasets that - are too large to fit in memory. Memory is still used, but it is primarily used to provide precise disk - locations for fast retrieval of smaller subsets of the index without compromising much on recall. - - If you provide a numpy array, it will save this array to disk in a temp location - in the format DiskANN's PQ Flash Index builder requires. This temp folder is deleted upon index creation completion - or error. - - ## Distance Metric and Vector Datatype Restrictions - | Metric \ Datatype | np.float32 | np.uint8 | np.int8 | - |-------------------|------------|----------|---------| - | L2 | ✅ | ✅ | ✅ | - | MIPS | ✅ | ❌ | ❌ | - | Cosine [^bug-in-disk-cosine] | ❌ | ❌ | ❌ | - - [^bug-in-disk-cosine]: For StaticDiskIndex, Cosine distances are not currently supported. - - ### Parameters - - **data**: Either a `str` representing a path to a DiskANN vector bin file, or a numpy.ndarray, - of a supported dtype, in 2 dimensions. Note that `vector_dtype` must be provided if data is a `str` - - **distance_metric**: A `str`, strictly one of {"l2", "mips", "cosine"}. `l2` and `cosine` are supported for all 3 - vector dtypes, but `mips` is only available for single precision floats. - - **index_directory**: The index files will be saved to this **existing** directory path - - **complexity**: The size of the candidate nearest neighbor list to use when building the index. Values between 75 - and 200 are typical. Larger values will take more time to build but result in indices that provide higher recall - for the same search complexity. Use a value that is at least as large as `graph_degree` unless you are prepared - to compromise on quality - - **graph_degree**: The degree of the graph index, typically between 60 and 150. A larger maximum degree will - result in larger indices and longer indexing times, but better search quality. - - **search_memory_maximum**: Build index with the expectation that the search will use at most - `search_memory_maximum`, in gb. - - **build_memory_maximum**: Build index using at most `build_memory_maximum` in gb. Building processes typically - require more memory, while search memory can be reduced. - - **num_threads**: Number of threads to use when creating this index. `0` is used to indicate all available - logical processors should be used. - - **pq_disk_bytes**: Use `0` to store uncompressed data on SSD. This allows the index to asymptote to 100% - recall. If your vectors are too large to store in SSD, this parameter provides the option to compress the - vectors using PQ for storing on SSD. This will trade off recall. You would also want this to be greater - than the number of bytes used for the PQ compressed data stored in-memory. Default is `0`. - - **vector_dtype**: Required if the provided `data` is of type `str`, else we use the `data.dtype` if np array. - - **index_prefix**: The prefix of the index files. Defaults to "ann". - """ - - _assert( - (isinstance(data, str) and vector_dtype is not None) - or isinstance(data, np.ndarray), - "vector_dtype is required if data is a str representing a path to the vector bin file", - ) - dap_metric = _valid_metric(distance_metric) - _assert_is_positive_uint32(complexity, "complexity") - _assert_is_positive_uint32(graph_degree, "graph_degree") - _assert(search_memory_maximum > 0, "search_memory_maximum must be larger than 0") - _assert(build_memory_maximum > 0, "build_memory_maximum must be larger than 0") - _assert_is_nonnegative_uint32(num_threads, "num_threads") - _assert_is_nonnegative_uint32(pq_disk_bytes, "pq_disk_bytes") - _assert(index_prefix != "", "index_prefix cannot be an empty string") - - index_path = Path(index_directory) - _assert( - index_path.exists() and index_path.is_dir(), - "index_directory must both exist and be a directory", - ) - - vector_bin_path, vector_dtype_actual = _valid_path_and_dtype( - data, vector_dtype, index_directory, index_prefix - ) - _assert(dap_metric != _native_dap.COSINE, "Cosine is currently not supported in StaticDiskIndex") - if dap_metric == _native_dap.INNER_PRODUCT: - _assert( - vector_dtype_actual == np.float32, - "Integral vector dtypes (np.uint8, np.int8) are not supported with distance metric mips" - ) - - num_points, dimensions = vectors_metadata_from_file(vector_bin_path) - - if vector_dtype_actual == np.uint8: - _builder = _native_dap.build_disk_uint8_index - elif vector_dtype_actual == np.int8: - _builder = _native_dap.build_disk_int8_index - else: - _builder = _native_dap.build_disk_float_index - - index_prefix_path = os.path.join(index_directory, index_prefix) - - _builder( - distance_metric=dap_metric, - data_file_path=vector_bin_path, - index_prefix_path=index_prefix_path, - complexity=complexity, - graph_degree=graph_degree, - final_index_ram_limit=search_memory_maximum, - indexing_ram_budget=build_memory_maximum, - num_threads=num_threads, - pq_disk_bytes=pq_disk_bytes, - codebook_prefix=codebook_prefix, - ) - _write_index_metadata( - index_prefix_path, vector_dtype_actual, dap_metric, num_points, dimensions - ) - - -def build_memory_index( - data: Union[str, VectorLikeBatch], - distance_metric: DistanceMetric, - index_directory: str, - complexity: int, - graph_degree: int, - num_threads: int, - alpha: float = defaults.ALPHA, - use_pq_build: bool = defaults.USE_PQ_BUILD, - num_pq_bytes: int = defaults.NUM_PQ_BYTES, - use_opq: bool = defaults.USE_OPQ, - vector_dtype: Optional[VectorDType] = None, - tags: Union[str, VectorIdentifierBatch] = "", - filter_labels: Optional[list[list[str]]] = None, - universal_label: str = "", - filter_complexity: int = defaults.FILTER_COMPLEXITY, - index_prefix: str = "ann", -) -> None: - """ - This function will construct a DiskANN memory index. Memory indices are ideal for smaller datasets whose - indices can fit into memory. Memory indices are faster than disk indices, but usually cannot scale to massive - sizes in an individual index on an individual machine. - - `diskannpy`'s memory indices take two forms: a `diskannpy.StaticMemoryIndex`, which will not be mutated, only - searched upon, and a `diskannpy.DynamicMemoryIndex`, which can be mutated AND searched upon in the same process. - - ## Important Note: - You **must** determine the type of index you are building for. If you are building for a - `diskannpy.DynamicMemoryIndex`, you **must** supply a valid value for the `tags` parameter. **Do not supply - tags if the index is intended to be `diskannpy.StaticMemoryIndex`**! - - ## Distance Metric and Vector Datatype Restrictions - - | Metric \ Datatype | np.float32 | np.uint8 | np.int8 | - |-------------------|------------|----------|---------| - | L2 | ✅ | ✅ | ✅ | - | MIPS | ✅ | ❌ | ❌ | - | Cosine | ✅ | ✅ | ✅ | - - ### Parameters - - - **data**: Either a `str` representing a path to an existing DiskANN vector bin file, or a numpy.ndarray of a - supported dtype in 2 dimensions. Note that `vector_dtype` must be provided if `data` is a `str`. - - **distance_metric**: A `str`, strictly one of {"l2", "mips", "cosine"}. `l2` and `cosine` are supported for all 3 - vector dtypes, but `mips` is only available for single precision floats. - - **index_directory**: The index files will be saved to this **existing** directory path - - **complexity**: The size of the candidate nearest neighbor list to use when building the index. Values between 75 - and 200 are typical. Larger values will take more time to build but result in indices that provide higher recall - for the same search complexity. Use a value that is at least as large as `graph_degree` unless you are prepared - to compromise on quality - - **graph_degree**: The degree of the graph index, typically between 60 and 150. A larger maximum degree will - result in larger indices and longer indexing times, but better search quality. - - **num_threads**: Number of threads to use when creating this index. `0` is used to indicate all available - logical processors should be used. - - **alpha**: The alpha parameter (>=1) is used to control the nature and number of points that are added to the - graph. A higher alpha value (e.g., 1.4) will result in fewer hops (and IOs) to convergence, but probably more - distance comparisons compared to a lower alpha value. - - **use_pq_build**: Use product quantization during build. Product quantization is a lossy compression technique - that can reduce the size of the index on disk. This will trade off recall. Default is `True`. - - **num_pq_bytes**: The number of bytes used to store the PQ compressed data in memory. This will trade off recall. - Default is `0`. - - **use_opq**: Use optimized product quantization during build. - - **vector_dtype**: Required if the provided `data` is of type `str`, else we use the `data.dtype` if np array. - - **tags**: Tags can be defined either as a path on disk to an existing .tags file, or provided as a np.array of - the same length as the number of vectors. Tags are used to identify vectors in the index via your *own* - numbering conventions, and is absolutely required for loading DynamicMemoryIndex indices `from_file`. - - **filter_labels**: An optional, but exhaustive list of categories for each vector. This is used to filter - search results by category. If provided, this must be a list of lists, where each inner list is a list of - categories for the corresponding vector. For example, if you have 3 vectors, and the first vector belongs to - categories "a" and "b", the second vector belongs to category "b", and the third vector belongs to no categories, - you would provide `filter_labels=[["a", "b"], ["b"], []]`. If you do not want to provide categories for a - particular vector, you can provide an empty list. If you do not want to provide categories for any vectors, - you can provide `None` for this parameter (which is the default) - - **universal_label**: An optional label that indicates that this vector should be included in *every* search - in which it also meets the knn search criteria. - - **filter_complexity**: Complexity to use when using filters. Default is 0. 0 is strictly invalid if you are - using filters. - - **index_prefix**: The prefix of the index files. Defaults to "ann". - """ - _assert( - (isinstance(data, str) and vector_dtype is not None) - or isinstance(data, np.ndarray), - "vector_dtype is required if data is a str representing a path to the vector bin file", - ) - dap_metric = _valid_metric(distance_metric) - _assert_is_positive_uint32(complexity, "complexity") - _assert_is_positive_uint32(graph_degree, "graph_degree") - _assert( - alpha >= 1, - "alpha must be >= 1, and realistically should be kept between [1.0, 2.0)", - ) - _assert_is_nonnegative_uint32(num_threads, "num_threads") - _assert_is_nonnegative_uint32(num_pq_bytes, "num_pq_bytes") - _assert_is_nonnegative_uint32(filter_complexity, "filter_complexity") - _assert(index_prefix != "", "index_prefix cannot be an empty string") - _assert( - filter_labels is None or filter_complexity > 0, - "if filter_labels is provided, filter_complexity must not be 0" - ) - - index_path = Path(index_directory) - _assert( - index_path.exists() and index_path.is_dir(), - "index_directory must both exist and be a directory", - ) - - vector_bin_path, vector_dtype_actual = _valid_path_and_dtype( - data, vector_dtype, index_directory, index_prefix - ) - if dap_metric == _native_dap.INNER_PRODUCT: - _assert( - vector_dtype_actual == np.float32, - "Integral vector dtypes (np.uint8, np.int8) are not supported with distance metric mips" - ) - - num_points, dimensions = vectors_metadata_from_file(vector_bin_path) - if filter_labels is not None: - _assert( - len(filter_labels) == num_points, - "filter_labels must be the same length as the number of points" - ) - - if vector_dtype_actual == np.uint8: - _builder = _native_dap.build_memory_uint8_index - elif vector_dtype_actual == np.int8: - _builder = _native_dap.build_memory_int8_index - else: - _builder = _native_dap.build_memory_float_index - - index_prefix_path = os.path.join(index_directory, index_prefix) - - filter_labels_file = "" - if filter_labels is not None: - label_counts = {} - filter_labels_file = f"{index_prefix_path}_pylabels.txt" - with open(filter_labels_file, "w") as labels_file: - for labels in filter_labels: - for label in labels: - label_counts[label] = 1 if label not in label_counts else label_counts[label] + 1 - if len(labels) == 0: - print("default", file=labels_file) - else: - print(",".join(labels), file=labels_file) - with open(f"{index_prefix_path}_label_metadata.json", "w") as label_metadata_file: - json.dump(label_counts, label_metadata_file, indent=True) - - if isinstance(tags, str) and tags != "": - use_tags = True - shutil.copy(tags, index_prefix_path + ".tags") - elif not isinstance(tags, str): - use_tags = True - tags_as_array = _castable_dtype_or_raise(tags, expected=np.uint32) - _assert(len(tags_as_array.shape) == 1, "Provided tags must be 1 dimensional") - _assert( - tags_as_array.shape[0] == num_points, - "Provided tags must contain an identical population to the number of points, " - f"{tags_as_array.shape[0]=}, {num_points=}", - ) - tags_to_file(index_prefix_path + ".tags", tags_as_array) - else: - use_tags = False - - _builder( - distance_metric=dap_metric, - data_file_path=vector_bin_path, - index_output_path=index_prefix_path, - complexity=complexity, - graph_degree=graph_degree, - alpha=alpha, - num_threads=num_threads, - use_pq_build=use_pq_build, - num_pq_bytes=num_pq_bytes, - use_opq=use_opq, - use_tags=use_tags, - filter_labels_file=filter_labels_file, - universal_label=universal_label, - filter_complexity=filter_complexity, - ) - - _write_index_metadata( - index_prefix_path, vector_dtype_actual, dap_metric, num_points, dimensions - ) diff --git a/packages/leann-backend-diskann/third_party/DiskANN/python/src/_builder.pyi b/packages/leann-backend-diskann/third_party/DiskANN/python/src/_builder.pyi deleted file mode 100644 index 223e6c9..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/python/src/_builder.pyi +++ /dev/null @@ -1,74 +0,0 @@ -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT license. - -from typing import BinaryIO, Optional, overload - -import numpy as np - -from . import DistanceMetric, VectorDType, VectorIdentifierBatch, VectorLikeBatch - -def numpy_to_diskann_file(vectors: np.ndarray, file_handler: BinaryIO): ... -@overload -def build_disk_index( - data: str, - distance_metric: DistanceMetric, - index_directory: str, - complexity: int, - graph_degree: int, - search_memory_maximum: float, - build_memory_maximum: float, - num_threads: int, - pq_disk_bytes: int, - vector_dtype: VectorDType, - index_prefix: str, -) -> None: ... -@overload -def build_disk_index( - data: VectorLikeBatch, - distance_metric: DistanceMetric, - index_directory: str, - complexity: int, - graph_degree: int, - search_memory_maximum: float, - build_memory_maximum: float, - num_threads: int, - pq_disk_bytes: int, - index_prefix: str, -) -> None: ... -@overload -def build_memory_index( - data: VectorLikeBatch, - distance_metric: DistanceMetric, - index_directory: str, - complexity: int, - graph_degree: int, - alpha: float, - num_threads: int, - use_pq_build: bool, - num_pq_bytes: int, - use_opq: bool, - tags: Union[str, VectorIdentifierBatch], - filter_labels: Optional[list[list[str]]], - universal_label: str, - filter_complexity: int, - index_prefix: str -) -> None: ... -@overload -def build_memory_index( - data: str, - distance_metric: DistanceMetric, - index_directory: str, - complexity: int, - graph_degree: int, - alpha: float, - num_threads: int, - use_pq_build: bool, - num_pq_bytes: int, - use_opq: bool, - vector_dtype: VectorDType, - tags: Union[str, VectorIdentifierBatch], - filter_labels_file: Optional[list[list[str]]], - universal_label: str, - filter_complexity: int, - index_prefix: str -) -> None: ... diff --git a/packages/leann-backend-diskann/third_party/DiskANN/python/src/_common.py b/packages/leann-backend-diskann/third_party/DiskANN/python/src/_common.py deleted file mode 100644 index 2b28802..0000000 --- a/packages/leann-backend-diskann/third_party/DiskANN/python/src/_common.py +++ /dev/null @@ -1,251 +0,0 @@ -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT license. - -import os -import warnings -from enum import Enum -from pathlib import Path -from typing import Literal, NamedTuple, Optional, Tuple, Type, Union - -import numpy as np - -from . import ( - DistanceMetric, - VectorDType, - VectorIdentifierBatch, - VectorLike, - VectorLikeBatch, -) -from . import _diskannpy as _native_dap - -__ALL__ = ["valid_dtype"] - -_VALID_DTYPES = [np.float32, np.int8, np.uint8] - - -def valid_dtype(dtype: Type) -> VectorDType: - """ - Utility method to determine whether the provided dtype is supported by `diskannpy`, and if so, the canonical - dtype we will use internally (e.g. np.single -> np.float32) - """ - _assert_dtype(dtype) - if dtype == np.uint8: - return np.uint8 - if dtype == np.int8: - return np.int8 - if dtype == np.float32: - return np.float32 - - -def _assert(statement_eval: bool, message: str): - if not statement_eval: - raise ValueError(message) - - -def _valid_metric(metric: str) -> _native_dap.Metric: - if not isinstance(metric, str): - raise ValueError("distance_metric must be a string") - if metric.lower() == "l2": - return _native_dap.L2 - elif metric.lower() == "mips": - return _native_dap.INNER_PRODUCT - elif metric.lower() == "cosine": - return _native_dap.COSINE - else: - raise ValueError("distance_metric must be one of 'l2', 'mips', or 'cosine'") - - -def _assert_dtype(dtype: Type): - _assert( - any(np.can_cast(dtype, _dtype) for _dtype in _VALID_DTYPES), - f"Vector dtype must be of one of type {{(np.single, np.float32), (np.byte, np.int8), (np.ubyte, np.uint8)}}", - ) - - -def _castable_dtype_or_raise( - data: Union[VectorLike, VectorLikeBatch, VectorIdentifierBatch], expected: np.dtype -) -> np.ndarray: - if isinstance(data, np.ndarray) and np.can_cast(data.dtype, expected): - return data.astype(expected, casting="safe") - else: - raise TypeError( - f"expecting a numpy ndarray of dtype {expected}, not a {type(data)}" - ) - - -def _assert_2d(vectors: np.ndarray, name: str): - _assert(len(vectors.shape) == 2, f"{name} must be 2d numpy array") - - -__MAX_UINT32_VAL = 4_294_967_295 - - -def _assert_is_positive_uint32(test_value: int, parameter: str): - _assert( - test_value is not None and 0 < test_value < __MAX_UINT32_VAL, - f"{parameter} must be a positive integer in the uint32 range", - ) - - -def _assert_is_nonnegative_uint32(test_value: int, parameter: str): - _assert( - test_value is not None and -1 < test_value < __MAX_UINT32_VAL, - f"{parameter} must be a non-negative integer in the uint32 range", - ) - - -def _assert_is_nonnegative_uint64(test_value: int, parameter: str): - _assert( - -1 < test_value, - f"{parameter} must be a non-negative integer in the uint64 range", - ) - - -def _assert_existing_directory(path: str, parameter: str): - _path = Path(path) - _assert( - _path.exists() and _path.is_dir(), f"{parameter} must be an existing directory" - ) - - -def _assert_existing_file(path: str, parameter: str): - _path = Path(path) - _assert(_path.exists() and _path.is_file(), f"{parameter} must be an existing file") - - -class _DataType(Enum): - FLOAT32 = 0 - INT8 = 1 - UINT8 = 2 - - @classmethod - def from_type(cls, vector_dtype: VectorDType) -> "DataType": - if vector_dtype == np.float32: - return cls.FLOAT32 - if vector_dtype == np.int8: - return cls.INT8 - if vector_dtype == np.uint8: - return cls.UINT8 - - def to_type(self) -> VectorDType: - if self is _DataType.FLOAT32: - return np.float32 - if self is _DataType.INT8: - return np.int8 - if self is _DataType.UINT8: - return np.uint8 - - -class _Metric(Enum): - L2 = 0 - MIPS = 1 - COSINE = 2 - - @classmethod - def from_native(cls, metric: _native_dap.Metric) -> "_Metric": - if metric == _native_dap.L2: - return cls.L2 - if metric == _native_dap.INNER_PRODUCT: - return cls.MIPS - if metric == _native_dap.COSINE: - return cls.COSINE - - def to_native(self) -> _native_dap.Metric: - if self is _Metric.L2: - return _native_dap.L2 - if self is _Metric.MIPS: - return _native_dap.INNER_PRODUCT - if self is _Metric.COSINE: - return _native_dap.COSINE - - def to_str(self) -> _native_dap.Metric: - if self is _Metric.L2: - return "l2" - if self is _Metric.MIPS: - return "mips" - if self is _Metric.COSINE: - return "cosine" - - -def _build_metadata_path(index_path_and_prefix: str) -> str: - return index_path_and_prefix + "_metadata.bin" - - -def _write_index_metadata( - index_path_and_prefix: str, - dtype: VectorDType, - metric: _native_dap.Metric, - num_points: int, - dimensions: int, -): - np.array( - [ - _DataType.from_type(dtype).value, - _Metric.from_native(metric).value, - num_points, - dimensions, - ], - dtype=np.uint64, - ).tofile(_build_metadata_path(index_path_and_prefix)) - - -def _read_index_metadata( - index_path_and_prefix: str, -) -> Optional[Tuple[VectorDType, str, np.uint64, np.uint64]]: - path = _build_metadata_path(index_path_and_prefix) - if not Path(path).exists(): - return None - else: - metadata = np.fromfile(path, dtype=np.uint64, count=-1) - return ( - _DataType(int(metadata[0])).to_type(), - _Metric(int(metadata[1])).to_str(), - metadata[2], - metadata[3], - ) - - -def _ensure_index_metadata( - index_path_and_prefix: str, - vector_dtype: Optional[VectorDType], - distance_metric: Optional[DistanceMetric], - max_vectors: int, - dimensions: Optional[int], - warn_size_exceeded: bool = False, -) -> Tuple[VectorDType, str, np.uint64, np.uint64]: - possible_metadata = _read_index_metadata(index_path_and_prefix) - if possible_metadata is None: - _assert( - all([vector_dtype, distance_metric, dimensions]), - "distance_metric, vector_dtype, and dimensions must provided if a corresponding metadata file has not " - "been built for this index, such as when an index was built via the CLI tools or prior to the addition " - "of a metadata file", - ) - _assert_dtype(vector_dtype) - _assert_is_positive_uint32(max_vectors, "max_vectors") - _assert_is_positive_uint32(dimensions, "dimensions") - return vector_dtype, distance_metric, max_vectors, dimensions # type: ignore - else: - vector_dtype, distance_metric, num_vectors, dimensions = possible_metadata - if warn_size_exceeded: - if max_vectors is not None and num_vectors > max_vectors: - warnings.warn( - "The number of vectors in the saved index exceeds the max_vectors parameter. " - "max_vectors is being adjusted to accommodate the dataset, but any insertions will fail." - ) - max_vectors = num_vectors - if num_vectors == max_vectors: - warnings.warn( - "The number of vectors in the saved index equals max_vectors parameter. Any insertions will fail." - ) - return possible_metadata - - -def _valid_index_prefix(index_directory: str, index_prefix: str) -> str: - _assert( - index_directory is not None and index_directory != "", - "index_directory cannot be None or empty", - ) - _assert_existing_directory(index_directory, "index_directory") - _assert(index_prefix != "", "index_prefix cannot be an empty string") - return os.path.join(index_directory, index_prefix) diff --git a/packages/leann-backend-diskann/third_party/DiskANN/python/src/_diskannpy.cpython-310-x86_64-linux-gnu.so.bak b/packages/leann-backend-diskann/third_party/DiskANN/python/src/_diskannpy.cpython-310-x86_64-linux-gnu.so.bak deleted file mode 100755 index 5741ecd7dd00337e060d91bb8b4cff466d2f082d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 33617584 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%0DGN06ChV-L>z@BSxXN*MF0mwg# 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 z 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

p^r6FkERzm#ertE`!K;1-0z1%{=M%Sccz}F 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≥kaUM!^b4_B0hGOb(qNI27agO`Le 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⪻rcP&5USd!^2Z4jQ zT>i@XTMV#6w(tw5X>$%D)iSc?{4JgtB9@=}^P94v;-aAGUoIAc$C>J0!ZS_Z$X2}K z?*wTf=uH7t-)|h(Bu01d*1sX8SwE$J*YfWX{M!rL(cukO2X+(^itnERCah(3%q)#% zO3VAlGNp^{*+s4yzKUCoXy}<|ppOG(?=rlS?A)hw@6P6i>;f*s^t&)&`@7(fI+&Q& zG|u+qNLhtZslpy)8K)yLvs@P_q$dFbspP@$%^XhWnNB}&4W2@~M}o{cn_Y4Rm%jQb zl@elNUND@Iy?Ph^UzqH;_?lLvaL&@rlZECa{m!MG1$s-jfA_~L)xz1_}hFTB>}na&6Yu)U0V z2{c@gMnU~aY(LoZI30OB&3J$`qhfBBi4$+)xbtRJiChdKi1ff^vx(H1pjOs@=Qnaw zj|13H7hc1>ij0@RlouV*aVa|j^WMhEZ+6@kX;1zIdqtDP7S%k0r}b7BVnKDbDb10~ ze)Rgxkn-+iV}q4x4mE|)XKL7&5$Zkf7A9G2emooK8^N_W3Ld}8>ZT}l0;>jWyHh+) zbLG)&APM}iN_}kWK?V^kMc!PzvC@aSOIFdSvv6gTk(5e#8>OK9dQc*wRp~b+(;Fpb zm(7x$#u2i7>ttm^k`v~NeG!ze|E~>XdZ5*y0~M6|b4WCe7hXo@GR(vzzPXRWT(-c4 z>x!zrr+$5be**Ik^N8~d*np{)BeN{%n$C7leOG>HxAbam*0#g5vk?WV^po8)hd1fo zae4XHFjdKJ>2>~oME-~F>5Ub$Xxa+Ok4XLl<2WC8aQ)puNAy*8rK$4vfTk9tNhT7K z)ym${--p2f(9!=fOe8xpF>)?v47uOaxqs*LLs3XQ?_P^i%qR3eadClLubY9QO)20z<}U0(`?RM8%TdfjKKe@j75!_78y9X^ zSR+CKHLDRY5e%6CcE2C3$>9(N?pwV6A?>S_JW!z};hW*#zb{8N>WD|56J#c><=>~u z-v))O|Hxl?mYxqVK9EUNookO_oK&YC5v1IEfHdKpUqAkqRVZ!q@LVaG>S!A)v{giC zt7x3IvKplT6FF&X70~v|ty&VMZL1J%H}Y_((Vna1Z%11lJ}QGrHtZQC{8xsty~Ox) zENz2dbF@tYhgE^*3Zp^hE@)C6C*6q_9&Q=UbRC{99fC>QpBmk(_2-q6KL`{@1?C_k zgI+FqG^gVyP$Q?~JENJd<4>^N4nwfSA9qTu<8Jvoo?5OQ|1b`}F%CV*vXOJCVbK?K ztuMD&b+3a+@l=`l(qh!pnZ1yQH|6M?;Z3=g_z5ebzI~z<@IG1};-GqI91O6cfwu~& zjETFKs@w4FG)BG4dqOeA=L66uEyzw$V4PN9H`xEB5%2^9XtK;P8mL4)qKY#t=GJxj zr~4GtZzB`DYq8vQd&d&(_R!pJ?-G5Mm}Ssy-~YASpWZ{a!SfIIw6rR7I`MZ-Zl*@k za@DCtu`KLG$@kzEIC8^^Q1GrO`DDt_HQaj4q_i=-z=e%;3V-A+l-bv?jl^?(tngp) zsuTVfc(@^a>9VM*0}f%-ALLGA!1euz7_he{=&hldDvRd3p1VrV5XP2C3ZvgG{cS^& zxcMv;_D8RHmJmC%-IwPx@mt!LzvA1dl{vpC%CfQwSriN<|3XI8dPCNZ8h%1Sgpr?d zXIt3IMMH~~?>akr`i)u=X7RYU0~Qx?6H!(qS$}i++Yx;hcJOo9efrgGFL6w7%kIBs zI(DDP;RKQAsupk}QzCDWC?`#+4kf)m6&X;sx+PR4I2tM|fveg>)#$OZk_&q{Z%=%QOQFqJ_IyZbPKv{V!$t5E0wx=IBzjadgr}y+9YF>+~E=n?ZM7Iug#0I<#a#nKaO z=9h5K@?5q`uv5St3lGI#KZF=uygD{JyI4!DNLQY(SBE7@=i($yC)%C*DPpzsiF=rg zCr@XG*m{@QE^WVJP(OvHHe|N(3?C^f~&+ExwiSNAD z6lnW5Z6%|qLweQn<%q4!?K~ST6(lpMs{}b?^@lSNHi(iDc+UbXc1*1PGH$^HR=?ky zP9n~x6Be3SyQNq7&&*$oVc1hD0Nw3*9@N;xX7abe1@`;rJT|d64g$yp4+u)nX-+&& zr|hA*OV1FhsWM9SZK4lvDAgly6eJJTIt_@Lg{d}rXXm;Y)jy;oRNuA0QGFr3ycpF} z=0&J3;W>3fbu0PXQGM~+JX8-D98leFs-yaB91}8*g5~G@BLW?mXSh7k$p$*9Tn@#%vGXTd7Qtp@Et-t+F<8R0S+?XJH zj4E9DZC+JSx9=YsfNyU@Pk{kAcb-#)zE^9Bof0TvPrn{fh2p~kRoF`Yc5-mePkB_K z*QJ3fobiHFh0{hW)t7V^ssjU%Y7(M)_&0f}{y!OjRoq1msJ?Tqqk5qDZNYkiR8O80 zp?Wv&B^m>;o&4>nzUaq1RG)uIK=rv(9Myeq&(XAbhvYE;lcSlguk}CV7=U7kO<-BFN&{g{CRt{bI*@?UP;o3 zKHZCW`R{)Yao#jgF@6b?Ix&AF$zL1doV|%Du3c{xH2!Ib^EmG5%iv2GaK&p*EMB@? zORSA%uxqnffdG^r7zn^1`P&7@Uarq0120{`_7absWM$yO=bQ|TA4Mv%e%;CZwIR-L z5h;z(_76jx15JROMYw}Y+{|6eipTTpW@eNKXBi>e{hVUZQ|A$7cx*7EYje6%*Cv^h{ zX-Qb4Cchj=-5&b|Qn$VQ?Z)C#tjieeituz`f3}x6{X{Eu+l+To*ZWpdfxC!Z_-i$) z`VXc;*5V&(RLdxB`vtV!2KOtjQ6J3+XgjH0K-yg8dCVtcYM&qlWq~WVG8X+aNnHct0HuZLH%fqkUj* z1=G)tX1b0a!$ktos6p|LcgWvyh3R-k3fzc|{zWVsIhU&QKh0n1ntqre8rQ4upwy!U z)uL$`P9~mIFnXqe+jCVX4HS%=4qv`kzx*;(&`;%eY(8Lv46O3F{%Q#uS zUGc^h&3g)~1G&in-LlT({aX+-J>7~&XQ>jIOgVq-JSS40`6y=r@g26x|7U0NUyoVcl8&Rt7<}hAhb=x0iAcCzCkq7^{=pKj!52+~K4m>tA~;f9=#)^9xg)`V4J< zr;{<-ilel3d&$w}iSrkYZ+|u=pzYK>0-Zcw{&uugf1QUmueZ=PypyHv=vqhHt=H$M z#;V;TTA)1qG@9u;+)X;f)VCbgKBAK~sF6oC{_3U7JQDsyOee36_Msj3k7l}#pZ>}i zgDc`4?~=dcl<9aDCVPK46CoueCc#>5a$`D(s9X=I5Vpq|b#GiF+jSt3h`h~`=)B%u zNk$H*n2qe+)Bj)seElrt-S708Aduf4&0ni*O%TvkfxMM!{`blzV1cq#aR(<*wj*A2 z0{Of6PEmnOP6`Ba=5B#NJ}-Ye4`tIAc?9zJGucyOMF%U8&yI5f`6Gkcplu7K%}ju8 z5vh&P_IJt_qiy^(5!#kacC@w0L)(z&1KPfB6VUd7{OxGlGaqejl(v64+TMA@(Y7sU zi^=@0XfkI4930Jb9lr3nk@*qu?jp+8mYC&EfOq#)X1SspJ8S6wQ_tbFfgL;(Cbiuz+z7F!E&-1(Q z9kwL|zIP}Aa!KeEq>)6=>0U`KB&K)1K0La(q=tA3n(`+Z6gmC<)Knn1{?1!%X28XD0FJ;nt80c+e@^Qw)xyomoflH*^H$%T>(a#BGTDKSkwx zU&*d9aB^l zI{tSw({;S!V`IvmhjSL`_`Lib&qrLI9shM5rtg=T2p*5Ovo}JoP^g=sW5bq)^?p6C zD3n1@@IAK~jHLg9QTv5<$=p*&Ux|11kX|1?C2$rx3GUQu6t{v0;}Nvy_iOQ$F#Lr3 zVbDI4xJ5*Phc^bxv4X6BjzoYMVUmi$ji16NNfhr9U1TcZs-1{FD52O?t->$0@RG)% zZH4c45bvPMD&aDPAFJ@bg_ktGM56Fr0u|^e@bcj_prP#vSm&2l;tG21$HeA7OCz8y zVU#Z0fhv;H{<8i|>}-M_MGVEKXtAP?_wh`z(23&xwOF~4^>32m*edM$Qz=1-i`rYI z+NZ`T)#W_lpzP)ovp9Cs4oMC+CFnpNs7gl$6BjmO-&QQDI$Ew!xbJ~Y7t5zfo)pd$ z54)ekA>(`W?;OEMlW-m(3g0}Y1(`(gbA*=6<_0>G*e=Liw}FtHt}LD@Y+6Z;CH_OM znLj7EX6CVmSA3A1Z4flJ<7S&3{uPh+q9AZLE}}fWF6_F$;?K zxr^jRB;o8}8rXgZ0Sd zg^Z!>3`{ES2qtxuZ1d&NbLb{1AzsC+uvh8SXvK`^dKC*KYfLzcA8^7OdEu-&$+|Dd zN+#sNJak$58SVj?`#$9ZEk)*{>o=dEP%hoH=SwMq@I)6c!#2Bkf|HkF zpZF|qs2jL$z13MOzY^@`Cv=SsM%OKP88JwXKT!sV28#oPv7&VFKm0i($gKD?C{QpT zYEXlU1M^i>u@6g zH6e#^iTdAamb}DKlc@(;f8Srxb($to2@%Wp!6TZ9*MUq0*vLPBVJ7!PXOQIo;k_Tl zf^XYcgyc!XfBN1}`8bQs@c}kh2{y!A`6zhrvu75186oeBp=1# zMBb3Ui@?D!EQ9Bk=ip=WF60y1yFz_codrrwtGA%l`bwyPb7RFav%-b34oggxQ)BrS z;d|eT61Hay&LVudzyaYy1>t4NBt^>-`>8lpIa{Hn)Ciz994>-?7!&por}aVAPpqR( zr)P2L7dOElpNKB8yDsQGaeLh0Rmv?%<{Dkj~x7R298zA=Zo|K2Jy$_CJth-xN;}B@F>COj?H zGRxCTq%6kM3rdBjr|oTd+VT#^(_S3^AR4k0{M$4dmPn|{#~u0t1S;S#cd?L(5@c{l zd%kCr$|V6=M(udqkLH!4^cFf+BVFD-twQeVC#FOJ(BuKP|-4c z612V(6wDc%vI-*jD_#Z*n@cOS$7VweUK9heoNjG^gwxN(fGo>@p3jzGcV@yv%ws5* z9Y?v$`a2H_FX{!kzOg1Pa<$T=#BlK*Qw+!=ccTFk$?K4OEHbkrpx6!F!Q2kmd}I%K=a~x7mt-yg;c{Z zS2YzVt%vjUnv_maI)82+KF>LZ9VedO-RkGi+njz*l|Xi?R*1;@y%8@14s|AZGLqR; z7o*S^U43P1j*ec@pN|Ic^iP&b#Wu0nKtuC3{8Tq@ z!>uV|J#WJ&scI>bBqe#xXZ+?ldqqctF`T#z(G@)@gxHoEG7MJ#F^vCoj?%rL`F5fi&|FQNa z;87My+;~t%5XHnJig(tNOGUf_cnnH(RM2=JpdxsnEP{&|6z^a%ZpL><;}I8Kk9e`@ zs^Ad}NHm;-*NP~L>lIwl8H0*9h|2f-Rdx4!%;0|C|M~kolIia1>guZM>gwu#yOYPE zxJ#hcdTv*V7a)Xyv+ps;$WM#~mY#CzV_rfzs=we*D1QBu9L|)=_8{Pg&PxBhv=mq+ zkx0+Wt59xpGTCZrc+=#z&9LNl4b(a*kKFE?Aa_>3KPI;t`2UF95}(|;xGK%pkDY$w zp1Ag}!E{sAP1u~^V6&QRU%?ipq!n5R@(GnNRblz|_N9Nud=eKKCl9>CaZ;S@OlQ?s z@fW^lN9o5Y6?lKK3?xu!*lT!>h|IXEuSN@I&}hKt9JT`q+q$x*IDR>=vE$IfAQn?Y zOcT!rsD;a9R~;qEHjzK(U@0vy;@=0i@_O~>8;sA;O&|~$os^6Jgi<`S#;Fqo%tCMs$ug6CNRx4syaUPH0%}n@ zEj7%X8nCf{k)43FATXr?`}|A`(Knb;r-s=0ih z0#ryLXj{O;P07}(?wD>q-+@c)`E&OcPcQbxWSxD|vC((&7w(XvW${~|p%^8egG-Hp z7@CjOMpAg^mZdMYf^->z)w(PdzTn0!=`39$UgL`men}&u@gcri#w#?qK-iJFt06OQ z56BNWjQuy|&FPTubFYG+2S^p!o~RmtLe@-lXr0U2iGIrx z#V5dzHct-8Lplb5eh92S;a`c!s8LG9Sv*@>t<$q3wn@Fq$}^jm<`Oa0zLc`kDyu$Z zies6iCY4;vKc23JQsxyc_eRakC#Xmo@Ce ztg7>>9LZ)h9#rF2tg82%{nV~RMOAw#KPcEIj!JO>E!uCWhOiX z5TIDF|EWo7A4>S`^D=VWwN+E4SO?N%1=a3j{jZ>U=j#Y9D-zp*_aCGz=<;G9J=U8o z$L`qH4x}@$bOY%gu(rB|(?Lj&u zb4-`bqE3Pd;u^nnh8?E5ZhYmT>hKC2p%%Fq^-`Lgr0Kk$iN8;A9GO$cw(kfC< z_i9xP3y$TjhN8I@jd(yL_Q8R8SP2h^v|6g2HUCN;1};fVUBIsx26OAIMGU%?qSrJU zs&HazJq(^i8^ypc2iA&KK6|nQO0~ycn!gQQd^t-M?5a;O^TC&+Btlc->7V^1*UZ`VuT-aG#Wbi-~$_E^2_Zw5X5~!Pvh#H1_`7 zPQBQ!e@P=zh`i*I#(E<3hs*8KF{~#)gq^3Igh`ve(UCs>z;00iwVga*Qs5NB1}HqYfz&qvzO}R zD_?Rq;?Gdz22J^J10+!_5ZB-&yeG@x#G-~h2K&t$U~VI}vUKNeKS zIpk?3`y_UItUS$r_@zDmKsFSu8WJwUdSAz&zQQr&n+_Qm?%LPuV zFn;d$t5{Xk+KN|9D6lo3gz4!2RlM7GQSr`D@$PV`6>pbYRJ_Y~{J$6P6FdKrc)!g4 zfp`aCuU*A!yK~R2=qc9CRC+5!VQwpyd;#$)_i%r4FX6e4S^JRRG}Z=h&gEtvE|k*| zWOJu;VP=?_*0Ew+zw|_(nSuF*dYOvMFUKAxmPY9)IKMmrh~WHU21i_o6JPrR%s{S} zne6@PP4s=y@7nj%)%FiJ-P@fpV7T`FdSI&^(cyjzuiy|qsI$s=vC6p5pRJ5fsZ$w$ zy#ra-AlUGo0FhcxTUP>KV8P+zo{0lhbiwFRbif=So<%0v9Z4{;sC_(eF@Y*dpor}r z_y!(=`L;*}B}E5LKoR13GK4VCEmV7O+XtJN=f-`6f*NU%Cpr{UCc6{p!l@26ZBGAO z5u743*~+$`M0568&mJ}i-D#Qpj7i>?5sctP1;w>1U@&s8;U5>qtEi?%o%D^3H0X(k zHg*{Kcl;}`FxfW(WOa3d0g@F;Q3R-rL<3VofUs3pyq-6rwuK0TvsJz~g^qYD{Kp7! zPkkLGE^bgZMDm3LK=BbgdYabJ25ti25@tv5{74;9UetM9>!@>hWCX}|v{r!7hm+ww z7U)COUfPEzPY#~Tu!HdMQ7p}i93EpT@%*G8)U-`rzJI|=T}-88Q7QWy*XdIiF_ID9 zD>Nr3I7#5GBZw4l9r0g%AU>5&Ac4dG9Jzy1OY4$H;zu;Dkv6L*9Z#yt&wfRX(<>&y zyOA${PEU!oji+=I&5s!`X0Q3tS+pw{)SJUSz(WaTC|8q_$)2*3Wf+4(9e4HyZp5XE zEhQ9SI=vQ%ap^VwO?dkFu|>V6^EfQD*Xs-7)Sj}h0fcj9xqs>*5E-%Qdh?2^YPAf~ zEk6g(6peYQh0jS_wLhl^O8py^uY1V><3{#sbWTZ4Op_q|d)ciX2Y|jr3#9d=6vQ-j z5;MI_2zR*~|0A&c;-UR)G$O@-&KxKCGZfkoUZfMeWa`#M$z}xO49zbj%t$}^S!DXC zdeGc^Hd)RVJZMx^D@rwz|UYx20VP8JIY02HiBY}C6GxZCys_mboKLfFn zes5^WCS{7Q19v7nc#X;w9VFA3^~t+p!ma+?y@FIkXUU)bEVuLaO6am?`g^jNg)~`BMk_|-Zas{pj3c&7rz)(x-s`>%Z zk#WmYq^R)7I8=J}|HsJKqTO)Or)AVT!iq*^ko*B7ULGsC6T`VbYVH)|+S}3v0u`o{ zqlGx<#B~iBgrlm$paT5-PGusZNEhJaaN(oBx(Ny6C|1V)GLeItA1L*70||AxB8>Y` zKu1e%OZS;@_S>W_lih_h`q{^s?30nLQ=-+qr-WDr9&OH+fRS5yWb1JZ5&4B@z5`XY zgB8(E-K}Xe)Gn{ZXz*KoV>yYDfTRETw(O7Lp)OXz31z7%J?fX)zsM_5Q-nv(ct?NL zW#0WEz)bd=iv_2&Xf2!&x-|(!oSI`Q-JpL=p9KB6EH{r0gxb9v1vO8xnGWW$>%2x^ zUxHruTWB1YW7vd^V&J|;o}0oU;|361Tq$z8q;=QS5(nTc8q%0DN+I1J!k9FR-7CH{wAA9ve7l|q!0C!X7 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

u6kQ&G0U@>)hCjx6ea&gHkQMBdu~p> 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%0AxuG`kCaCv_n6;rw}(0=qEw06Ak(svP7SMOQX4_ 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

    O>_-jAPs^^ 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⋘nFO>_&5<8EwBH!*-75UY3 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

    PSWv|^?Lwn9$(3Wrqc3~a3za!5h`uQxcd3k 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

    =Y9q8mpYhi*XS@U&u?0eWdH-Lmk-B{aks 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%0Dh2v^TLs{7>RGP*yJ&#Jckx2P;eQ-s&~rF? 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

    }}&Q6u5Jy`1F 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 h9$vIdJ-n+PP2l6HD|gMu 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 z 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

    $?V0e=Gd+@RQ8?-S-6u?}b;uKW}oLA-mj-@hJRT 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

    pBce(!d8?Z=DoX19FjZ=`kOefY8j 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

    _-6eQ{EpAE&uTl(b-tF)HAQ+}t63aNl=@ym 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