knitr::opts_chunk$set( collapse = TRUE, comment = "#>" ) options(bigANNOY.progress = FALSE) set.seed(20260326) library(bigANNOY) library(bigmemory) artifact_dir <- file.path(tempdir(), "bigannoy-lifecycle") dir.create(artifact_dir, recursive = TRUE, showWarnings = FALSE) ref_dense <- matrix( c( 0.0, 0.1, 0.2, 0.1, 0.0, 0.1, 0.2, 0.1, 0.0, 1.0, 1.1, 1.2, 1.1, 1.0, 1.1, 1.2, 1.1, 1.0 ), ncol = 3, byrow = TRUE ) ref_big <- as.big.matrix(ref_dense) index_path <- file.path(artifact_dir, "ref.ann") metadata_path <- paste0(index_path, ".meta") index <- annoy_build_bigmatrix( ref_big, path = index_path, n_trees = 25L, metric = "euclidean", seed = 123L, load_mode = "lazy" ) index annoy_is_loaded(index) file.exists(index$path) file.exists(index$metadata_path) metadata <- read.dcf(index$metadata_path) metadata[, c( "index_id", "metric", "n_dim", "n_ref", "n_trees", "build_seed", "build_backend", "file_size", "file_md5" )] annoy_is_loaded(index) first_result <- annoy_search_bigmatrix(index, k = 2L, search_k = 100L) annoy_is_loaded(index) first_result$index round(first_result$distance, 3) second_result <- annoy_search_bigmatrix(index, k = 2L, search_k = 100L) identical(first_result$index, second_result$index) all.equal(first_result$distance, second_result$distance) annoy_close_index(index) annoy_is_loaded(index) validation_no_load <- annoy_validate_index( index, strict = TRUE, load = FALSE ) validation_no_load$valid validation_no_load$checks[, c("check", "passed", "severity")] annoy_is_loaded(index) validation_with_load <- annoy_validate_index( index, strict = TRUE, load = TRUE ) validation_with_load$valid tail(validation_with_load$checks[, c("check", "passed", "severity")], 2L) annoy_is_loaded(index) annoy_close_index(index) annoy_is_loaded(index) reload_result <- annoy_search_bigmatrix(index, k = 2L, search_k = 100L) annoy_is_loaded(index) reload_result$index reopened_lazy <- annoy_open_index( path = index$path, load_mode = "lazy" ) reopened_eager <- annoy_load_bigmatrix( path = index$path, load_mode = "eager" ) annoy_is_loaded(reopened_lazy) annoy_is_loaded(reopened_eager) reopened_result <- annoy_search_bigmatrix( reopened_lazy, k = 2L, search_k = 100L ) annoy_is_loaded(reopened_lazy) reopened_result$index annoy_close_index(reopened_lazy) c( original = annoy_is_loaded(index), reopened_lazy = annoy_is_loaded(reopened_lazy), reopened_eager = annoy_is_loaded(reopened_eager) ) report <- annoy_validate_index( reopened_eager, strict = FALSE, load = FALSE ) report$valid report$checks[, c("check", "passed", "severity")]