knitr::opts_chunk$set( collapse = TRUE, comment = "#>" ) options(bigANNOY.progress = FALSE) set.seed(20260326) library(bigANNOY) library(bigmemory) share_dir <- tempfile("bigannoy-share-") dir.create(share_dir, recursive = TRUE, showWarnings = FALSE) ref_dense <- matrix( c( 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0, 1.0 ), ncol = 2, byrow = TRUE ) ref_big <- as.big.matrix(ref_dense) index_path <- file.path(share_dir, "ref.ann") index <- annoy_build_bigmatrix( ref_big, path = index_path, n_trees = 20L, metric = "euclidean", seed = 77L, load_mode = "lazy" ) index metadata <- read.dcf(index$metadata_path) metadata[, c( "metadata_version", "package_version", "annoy_version", "index_id", "metric", "n_dim", "n_ref", "n_trees", "build_seed", "build_threads", "build_backend", "file_size", "file_mtime", "file_md5", "load_mode", "index_file" )] validation <- annoy_validate_index( index, strict = TRUE, load = TRUE ) validation$valid validation$checks[, c("check", "passed", "severity")] reopened <- annoy_open_index( path = index$path, load_mode = "lazy" ) annoy_is_loaded(reopened) annoy_validate_index(reopened, strict = TRUE, load = TRUE)$valid annoy_is_loaded(reopened) shared_dir <- tempfile("bigannoy-shared-copy-") dir.create(shared_dir, recursive = TRUE, showWarnings = FALSE) shared_index_path <- file.path(shared_dir, basename(index$path)) shared_metadata_path <- file.path(shared_dir, basename(index$metadata_path)) file.copy(index$path, shared_index_path, overwrite = TRUE) file.copy(index$metadata_path, shared_metadata_path, overwrite = TRUE) shared <- annoy_open_index( path = shared_index_path, load_mode = "lazy" ) shared_report <- annoy_validate_index( shared, strict = TRUE, load = TRUE ) shared_report$valid bad_metadata <- read.dcf(shared_metadata_path) bad_metadata[1L, "file_md5"] <- "corrupted" write.dcf(as.data.frame(bad_metadata, stringsAsFactors = FALSE), file = shared_metadata_path) shared_bad <- annoy_open_index(shared_index_path, load_mode = "lazy") bad_report <- annoy_validate_index( shared_bad, strict = FALSE, load = FALSE ) bad_report$valid bad_report$checks[, c("check", "passed", "severity")] strict_error <- tryCatch( { annoy_validate_index(shared_bad, strict = TRUE, load = FALSE) NULL }, error = function(e) conditionMessage(e) ) strict_error renamed_path <- file.path(shared_dir, "renamed.ann") file.copy(shared_index_path, renamed_path, overwrite = TRUE) rename_error <- tryCatch( { annoy_open_index(renamed_path, metadata_path = shared_metadata_path) NULL }, error = function(e) conditionMessage(e) ) rename_error