tests/testthat/test_optonly.R

library(uwot)
context("optimization only")

# this mainly exists to hedge against rhub timing out during tests and to still
# exercise the main umap code even with RSpectra and other dependencies
# temporarily removed due to excessive compilation times. Filter on
# this in testthat.R:
#
# test_check("uwot", filter = "optonly")
#
init_coords <- matrix(c(
  -0.286003508982688, 0.205935933716443, 0.212672369696097,
  0.318264664390379, -0.290855854751177, -0.84524521577413, 0.10829983500751,
  -0.163970086771776, 0.611654891362094, 0.12924697210725, 0.0469197151280184,
  0.226976224751362, -0.0547582725501509, -0.0373386048885834,
  -0.0879982948022033, -0.0168061906596455, -0.269189585603006,
  0.0524409053485183, -0.0619916567707883, 0.201745760046477
), ncol = 2)

nn <- list(
  euclidean =
    list(
      idx = matrix(
        c(
          1L, 2L, 3L, 4L, 5L, 6L,
          7L, 8L, 9L, 10L, 5L, 10L, 4L, 3L, 1L, 5L, 3L, 1L, 4L, 2L, 8L,
          3L, 7L, 9L, 8L, 1L, 4L, 5L, 3L, 3L, 10L, 4L, 2L, 10L, 7L, 8L,
          8L, 10L, 2L, 4L
        ),
        ncol = 4
      ),
      dist = matrix(
        c(
          0,
          0, 0, 0, 0, 0, 0, 0, 0, 0, 0.141421356237309, 0.173205080756888,
          0.244948974278318, 0.244948974278318, 0.141421356237309, 0.616441400296898,
          0.264575131106459, 0.173205080756888, 0.3, 0.173205080756888,
          0.173205080756888, 0.3, 0.264575131106459, 0.3, 0.223606797749979,
          0.616441400296898, 0.33166247903554, 0.223606797749979, 0.435889894354067,
          0.316227766016838, 0.469041575982343, 0.331662479035541, 0.3,
          0.316227766016839, 0.458257569495584, 0.7, 0.424264068711929,
          0.33166247903554, 0.509901951359279, 0.316227766016839
        ),
        ncol = 4
      )
    )
)

res <- umap(iris10,
  n_neighbors = 4, n_epochs = 2, learning_rate = 0.5, min_dist = 0.001,
  init = init_coords, verbose = FALSE, n_threads = 0, nn_method = nn
)
expect_ok_matrix(res)

first_coords <- c()
test_callback <- function(epochs, n_epochs, coords) {
  first_coords <<- c(first_coords, coords[1, 1])
}
set.seed(42)
res <- umap(iris10,
  n_neighbors = 4, n_epochs = 10, learning_rate = 0.5, min_dist = 0.001,
  init = init_coords, verbose = FALSE, nn_method = nn,
  batch = TRUE, epoch_callback = test_callback, approx_pow = TRUE,
  n_threads = 2
)
expect_ok_matrix(res)
expect_equal(length(first_coords), 10)
jlmelville/uwot documentation built on April 25, 2024, 5:20 a.m.