## ----setup, include=FALSE-----------------------------------------------------
knitr::opts_chunk$set(collapse = TRUE, comment = "#>", eval = FALSE)

## ----dense--------------------------------------------------------------------
# library(cudaverse)
# cuda_select_device("cuda")
# 
# set.seed(1)
# x <- matrix(rnorm(10000 * 100), nrow = 10000)
# x_gpu <- cuda_tensor(x, device = "cuda", dtype = "float32")
# 
# product_gpu <- tensor_matmul(t(x_gpu), x_gpu)
# reduced_gpu <- tensor_sum(product_gpu, dim = 1)
# pca <- cuda_pca(x_gpu, n_components = 20, device = "cuda")
# neighbors <- cuda_knn(pca$x, k = 15, device = "cuda")
# 
# tensor_device(reduced_gpu)
# cuda_provenance(neighbors)

## ----sparse-------------------------------------------------------------------
# counts <- Matrix::rsparsematrix(10000, 100, density = 0.03)
# counts@x <- abs(counts@x)
# 
# counts_gpu <- cuda_sparse(counts, device = "cuda")
# normalized_gpu <- sparse_normalize(
#   counts_gpu,
#   margin = "rows",
#   scale_factor = 10000,
#   log1p = TRUE
# )
# feature_totals_gpu <- sparse_row_sums(t(normalized_gpu))
# sparse_pca <- cuda_pca(normalized_gpu, n_components = 20, device = "cuda")
# sparse_neighbors <- cuda_knn(
#   sparse_pca$x,
#   k = 15,
#   device = "cuda"
# )
# 
# sparse_info(normalized_gpu)
# cuda_provenance(sparse_neighbors)

## ----graph-embedding----------------------------------------------------------
# pca <- cuda_pca(x, n_components = 20, device = "cuda")
# neighbors <- cuda_knn(pca$x, k = 15, device = "cuda")
# 
# graph <- cuda_knn_graph(neighbors)
# communities <- cuda_leiden(graph)
# embedding <- cuda_umap(pca$x)
# 
# cuda_provenance(communities)
# cuda_provenance(embedding)

## ----backend-check------------------------------------------------------------
# diagnostics <- cuda_diagnostics()
# diagnostics$selected_backend
# diagnostics$backend_status

