## ----include = FALSE----------------------------------------------------------
# Set up reticulate and check for required Python packages.
reticulate::py_require("mudata")
reticulate::py_require("scanpy")

# Check if required Python packages are available.
python_available <- reticulate::py_module_available("scanpy") &&
  reticulate::py_module_available("mudata")

# On CI, fail the vignette build if Python packages are not available
if (!python_available && nzchar(Sys.getenv("CI"))) {
  conf <- reticulate::py_config()
  conf_str <- paste(capture.output(print(conf)), collapse = "\n")
  stop(
    "Python packages scanpy/mudata are not available. ",
    "The usage_python vignette cannot be rendered on CI without them.",
    "\n\nPython configuration:\n", conf_str
  )
}

knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>",
  # Set eval based on Python package availability
  eval = python_available
)

## ----python_unavailable, eval=!python_available-------------------------------
# message(
#   "Python packages scanpy and mudata are required to run this vignette. Code chunks will not be evaluated."
# )

## ----python_setup, eval=FALSE-------------------------------------------------
# reticulate::py_require("scanpy")

## ----load_libraries-----------------------------------------------------------
library(anndataR)
library(reticulate)
sc <- import("scanpy")

## ----load_python_data---------------------------------------------------------
adata <- sc$datasets$pbmc3k_processed()
adata

## ----apply_python_functions---------------------------------------------------
sc$pp$filter_cells(adata, min_genes = 200L)
sc$pp$normalize_total(adata, target_sum = 1e4)
sc$pp$log1p(adata)

## ----convert_to_sce-----------------------------------------------------------
sce_obj <- adata$as_SingleCellExperiment()
sce_obj

## ----convert_to_seurat--------------------------------------------------------
seurat_obj <- adata$as_Seurat()
seurat_obj

## ----mudata_setup, eval=FALSE-------------------------------------------------
# reticulate::py_install("mudata")

## ----load_mudata--------------------------------------------------------------
md <- import("mudata")

## ----load_mudata_example, eval = python_available && requireNamespace("BiocFileCache", quietly = TRUE)----
cache <- BiocFileCache::BiocFileCache(ask = FALSE)
h5mu_file <- BiocFileCache::bfcrpath(
  cache,
  "https://github.com/gtca/h5xx-datasets/raw/b1177ac8877c89d8bb355b072164384b4e9cc81d/datasets/minipbcite.h5mu"
)

mdata <- md$read_h5mu(h5mu_file)

## ----access_modalities--------------------------------------------------------
rna_mod <- mdata$mod[["rna"]]

rna_seurat <- rna_mod$as_Seurat()
print(rna_seurat)

rna_sce <- rna_mod$as_SingleCellExperiment()
print(rna_sce)

## ----r-sessioninfo------------------------------------------------------------
sessionInfo()

## ----python-sessioninfo-------------------------------------------------------
reticulate::py_config()

reticulate::py_list_packages()

