tests/testthat/test-backed_sparse.R

context("testing backed mode")

skip_if_no_anndata()


test_that("backed indexing", {
  tmp_path <- tempfile()
  dir.create(tmp_path, recursive = TRUE)
  on.exit(unlink(tmp_path, recursive = TRUE))

  csr_path <- paste0(tmp_path, "/csr.h5ad")
  csc_path <- paste0(tmp_path, "/csc.h5ad")
  dense_path <- paste0(tmp_path, "/dense.h5ad")

  m <- Matrix::rsparsematrix(50, 50, density = 0.1)
  dimnames(m) <- list(paste0("cell", seq_len(nrow(m))), paste0("gene", seq_len(ncol(m))))

  csc_mem <- AnnData(X = m)
  csr_mem <- AnnData(X = as(as(as(m, "dMatrix"), "generalMatrix"), "RsparseMatrix"))

  csr_mem$write_h5ad(csr_path)
  csc_mem$write_h5ad(csc_path)
  csc_mem$write_h5ad(dense_path, as_dense = "X")

  csr_disk <- read_h5ad(csr_path, backed = "r")
  csc_disk <- read_h5ad(csc_path, backed = "r")
  dense_disk <- read_h5ad(dense_path, backed = "r")

  obs_idx <- csc_mem$obs_names # ??
  var_idx <- csc_mem$var_names # ??

  expect_equivalent(csc_mem$X, csc_disk$X) # extra test added by me
  expect_equivalent(as.matrix(csc_mem$X), dense_disk$X) # extra test added by me
  expect_equivalent(csc_mem[obs_idx, var_idx]$X, csr_disk[obs_idx, var_idx]$X)
  expect_equivalent(csc_mem[obs_idx, var_idx]$X, csc_disk[obs_idx, var_idx]$X)
  expect_equivalent(as.matrix(csc_mem[, var_idx]$X), dense_disk[, var_idx]$X)
  expect_equivalent(as.matrix(csc_mem[obs_idx, ]$X), dense_disk[obs_idx, ]$X) # why does dense disk only allow one idx?
})
#
# adpy <- csc_disk$.__enclos_env__$private$.anndata
# adpy$X %>% class
# adpy %>% class
#
# adpy$X

# adpy2 <- dense_disk$.__enclos_env__$private$.anndata
# adpy2$X %>% class
# adpy2 %>% class

# private <- list(self = csc_disk$.__enclos_env__$private$.anndata$X)

Try the anndata package in your browser

Any scripts or data that you put into this service are public.

anndata documentation built on March 31, 2023, 10:02 p.m.