-
-
Notifications
You must be signed in to change notification settings - Fork 19
Expand file tree
/
Copy pathbench_write.R
More file actions
106 lines (92 loc) · 2.98 KB
/
bench_write.R
File metadata and controls
106 lines (92 loc) · 2.98 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
# =============================================================================
# Benchmark suite: write_h5ad
# =============================================================================
# Benchmarks writing AnnData objects to H5AD files from both backends,
# with different compression settings and X matrix types.
# =============================================================================
bench_write <- function(h5ad_paths, iterations, x_types, zarr_paths) {
results <- list()
compressions <- c("none", "gzip")
for (xt in x_types) {
path <- h5ad_paths[[xt]]
for (compression in compressions) {
# Write from InMemoryAnnData
env <- new.env(parent = globalenv())
env$.ad <- read_h5ad(path, as = "InMemoryAnnData")
env$.compression <- compression
results <- c(
results,
run_one_benchmark(
name = paste0("write_InMemory_", xt, "_", compression),
expr = quote({
.tmp <- tempfile(fileext = ".h5ad")
.ad$write_h5ad(.tmp, compression = .compression)
unlink(.tmp)
}),
iterations = iterations,
env = env
)
)
# Write from HDF5AnnData
env2 <- new.env(parent = globalenv())
env2$.ad <- read_h5ad(path, as = "HDF5AnnData")
env2$.compression <- compression
results <- c(
results,
run_one_benchmark(
name = paste0("write_HDF5_", xt, "_", compression),
expr = quote({
.tmp <- tempfile(fileext = ".h5ad")
.ad$write_h5ad(.tmp, compression = .compression)
unlink(.tmp)
}),
iterations = iterations,
env = env2
)
)
# Close HDF5 handle
env2$.ad$close()
}
}
# Write to Zarr store
for (xt in x_types) {
path <- zarr_paths[[xt]]
for (compression in compressions) {
# Write from InMemoryAnnData → Zarr
env <- new.env(parent = globalenv())
env$.ad <- read_zarr(path, as = "InMemoryAnnData")
env$.compression <- compression
results <- c(
results,
run_one_benchmark(
name = paste0("write_zarr_InMemory_", xt, "_", compression),
expr = quote({
.tmp <- tempfile()
.ad$as_ZarrAnnData(.tmp, compression = .compression)
unlink(.tmp, recursive = TRUE)
}),
iterations = iterations,
env = env
)
)
# Write from ZarrAnnData → Zarr
env2 <- new.env(parent = globalenv())
env2$.ad <- read_zarr(path, as = "ZarrAnnData")
env2$.compression <- compression
results <- c(
results,
run_one_benchmark(
name = paste0("write_zarr_Zarr_", xt, "_", compression),
expr = quote({
.tmp <- tempfile()
.ad$as_ZarrAnnData(.tmp, compression = .compression)
unlink(.tmp, recursive = TRUE)
}),
iterations = iterations,
env = env2
)
)
}
}
results
}