From 19698c3d9f35bae3fa5e6a2c3fd719d7cb0c6535 Mon Sep 17 00:00:00 2001 From: Mark Keller <7525285+keller-mark@users.noreply.github.com> Date: Mon, 6 May 2024 16:25:16 -0400 Subject: [PATCH 01/25] WIP --- .gitignore | 4 + NAMESPACE | 2 + R/ZarrAnnData.R | 420 +++++++++++++ R/read_zarr.R | 46 ++ R/read_zarr_helpers.R | 499 ++++++++++++++++ R/write_zarr.R | 92 +++ R/write_zarr_helpers.R | 550 ++++++++++++++++++ inst/extdata/example.zarr/.zattrs | 4 + inst/extdata/example.zarr/.zgroup | 3 + inst/extdata/example.zarr/X/.zattrs | 8 + inst/extdata/example.zarr/X/.zgroup | 3 + inst/extdata/example.zarr/X/data/.zarray | 20 + inst/extdata/example.zarr/X/data/0 | Bin 0 -> 12849 bytes inst/extdata/example.zarr/X/indices/.zarray | 20 + inst/extdata/example.zarr/X/indices/0 | Bin 0 -> 2265 bytes inst/extdata/example.zarr/X/indptr/.zarray | 20 + inst/extdata/example.zarr/X/indptr/0 | Bin 0 -> 142 bytes inst/extdata/example.zarr/layers/.zattrs | 4 + inst/extdata/example.zarr/layers/.zgroup | 3 + .../example.zarr/layers/counts/.zattrs | 8 + .../example.zarr/layers/counts/.zgroup | 3 + .../example.zarr/layers/counts/data/.zarray | 20 + .../extdata/example.zarr/layers/counts/data/0 | Bin 0 -> 5545 bytes .../layers/counts/indices/.zarray | 20 + .../example.zarr/layers/counts/indices/0 | Bin 0 -> 2265 bytes .../example.zarr/layers/counts/indptr/.zarray | 20 + .../example.zarr/layers/counts/indptr/0 | Bin 0 -> 142 bytes .../example.zarr/layers/csc_counts/.zattrs | 8 + .../example.zarr/layers/csc_counts/.zgroup | 3 + .../layers/csc_counts/data/.zarray | 20 + .../example.zarr/layers/csc_counts/data/0 | Bin 0 -> 5587 bytes .../layers/csc_counts/indices/.zarray | 20 + .../example.zarr/layers/csc_counts/indices/0 | Bin 0 -> 2155 bytes .../layers/csc_counts/indptr/.zarray | 20 + .../example.zarr/layers/csc_counts/indptr/0 | Bin 0 -> 240 bytes .../example.zarr/layers/dense_X/.zarray | 22 + .../example.zarr/layers/dense_X/.zattrs | 4 + inst/extdata/example.zarr/layers/dense_X/0.0 | Bin 0 -> 15594 bytes .../example.zarr/layers/dense_counts/.zarray | 22 + .../example.zarr/layers/dense_counts/.zattrs | 4 + .../example.zarr/layers/dense_counts/0.0 | Bin 0 -> 4280 bytes inst/extdata/example.zarr/obs/.zattrs | 18 + inst/extdata/example.zarr/obs/.zgroup | 3 + inst/extdata/example.zarr/obs/Bool/.zattrs | 4 + inst/extdata/example.zarr/obs/Bool/.zgroup | 3 + .../example.zarr/obs/Bool/mask/.zarray | 20 + .../example.zarr/obs/Bool/mask/.zattrs | 4 + inst/extdata/example.zarr/obs/Bool/mask/0 | Bin 0 -> 66 bytes .../example.zarr/obs/Bool/values/.zarray | 20 + .../example.zarr/obs/Bool/values/.zattrs | 4 + inst/extdata/example.zarr/obs/Bool/values/0 | Bin 0 -> 66 bytes inst/extdata/example.zarr/obs/BoolNA/.zattrs | 4 + inst/extdata/example.zarr/obs/BoolNA/.zgroup | 3 + .../example.zarr/obs/BoolNA/mask/.zarray | 20 + .../example.zarr/obs/BoolNA/mask/.zattrs | 4 + inst/extdata/example.zarr/obs/BoolNA/mask/0 | Bin 0 -> 66 bytes .../example.zarr/obs/BoolNA/values/.zarray | 20 + .../example.zarr/obs/BoolNA/values/.zattrs | 4 + inst/extdata/example.zarr/obs/BoolNA/values/0 | Bin 0 -> 66 bytes inst/extdata/example.zarr/obs/Float/.zarray | 20 + inst/extdata/example.zarr/obs/Float/.zattrs | 4 + inst/extdata/example.zarr/obs/Float/0 | Bin 0 -> 70 bytes inst/extdata/example.zarr/obs/FloatNA/.zarray | 20 + inst/extdata/example.zarr/obs/FloatNA/.zattrs | 4 + inst/extdata/example.zarr/obs/FloatNA/0 | Bin 0 -> 78 bytes inst/extdata/example.zarr/obs/Int/.zarray | 20 + inst/extdata/example.zarr/obs/Int/.zattrs | 4 + inst/extdata/example.zarr/obs/Int/0 | Bin 0 -> 91 bytes inst/extdata/example.zarr/obs/IntNA/.zattrs | 4 + inst/extdata/example.zarr/obs/IntNA/.zgroup | 3 + .../example.zarr/obs/IntNA/mask/.zarray | 20 + .../example.zarr/obs/IntNA/mask/.zattrs | 4 + inst/extdata/example.zarr/obs/IntNA/mask/0 | Bin 0 -> 66 bytes .../example.zarr/obs/IntNA/values/.zarray | 20 + .../example.zarr/obs/IntNA/values/.zattrs | 4 + inst/extdata/example.zarr/obs/IntNA/values/0 | Bin 0 -> 42 bytes inst/extdata/example.zarr/obs/_index/.zarray | 24 + inst/extdata/example.zarr/obs/_index/.zattrs | 4 + inst/extdata/example.zarr/obs/_index/0 | Bin 0 -> 269 bytes inst/extdata/example.zarr/obs/leiden/.zattrs | 5 + inst/extdata/example.zarr/obs/leiden/.zgroup | 3 + .../obs/leiden/categories/.zarray | 24 + .../obs/leiden/categories/.zattrs | 4 + .../example.zarr/obs/leiden/categories/0 | Bin 0 -> 50 bytes .../example.zarr/obs/leiden/codes/.zarray | 20 + .../example.zarr/obs/leiden/codes/.zattrs | 4 + inst/extdata/example.zarr/obs/leiden/codes/0 | Bin 0 -> 66 bytes .../obs/log1p_n_genes_by_counts/.zarray | 20 + .../obs/log1p_n_genes_by_counts/.zattrs | 4 + .../obs/log1p_n_genes_by_counts/0 | Bin 0 -> 371 bytes .../obs/log1p_total_counts/.zarray | 20 + .../obs/log1p_total_counts/.zattrs | 4 + .../example.zarr/obs/log1p_total_counts/0 | Bin 0 -> 190 bytes .../obs/n_genes_by_counts/.zarray | 20 + .../obs/n_genes_by_counts/.zattrs | 4 + .../example.zarr/obs/n_genes_by_counts/0 | Bin 0 -> 90 bytes .../example.zarr/obs/total_counts/.zarray | 20 + .../example.zarr/obs/total_counts/.zattrs | 4 + inst/extdata/example.zarr/obs/total_counts/0 | Bin 0 -> 95 bytes inst/extdata/example.zarr/obsm/.zattrs | 4 + inst/extdata/example.zarr/obsm/.zgroup | 3 + inst/extdata/example.zarr/obsm/X_pca/.zarray | 22 + inst/extdata/example.zarr/obsm/X_pca/.zattrs | 4 + inst/extdata/example.zarr/obsm/X_pca/0.0 | Bin 0 -> 7572 bytes inst/extdata/example.zarr/obsm/X_umap/.zarray | 22 + inst/extdata/example.zarr/obsm/X_umap/.zattrs | 4 + inst/extdata/example.zarr/obsm/X_umap/0.0 | Bin 0 -> 416 bytes inst/extdata/example.zarr/obsp/.zattrs | 4 + inst/extdata/example.zarr/obsp/.zgroup | 3 + .../example.zarr/obsp/connectivities/.zattrs | 8 + .../example.zarr/obsp/connectivities/.zgroup | 3 + .../obsp/connectivities/data/.zarray | 20 + .../example.zarr/obsp/connectivities/data/0 | Bin 0 -> 3568 bytes .../obsp/connectivities/indices/.zarray | 20 + .../obsp/connectivities/indices/0 | Bin 0 -> 1040 bytes .../obsp/connectivities/indptr/.zarray | 20 + .../example.zarr/obsp/connectivities/indptr/0 | Bin 0 -> 109 bytes .../example.zarr/obsp/distances/.zattrs | 8 + .../example.zarr/obsp/distances/.zgroup | 3 + .../example.zarr/obsp/distances/data/.zarray | 20 + .../example.zarr/obsp/distances/data/0 | Bin 0 -> 2844 bytes .../obsp/distances/indices/.zarray | 20 + .../example.zarr/obsp/distances/indices/0 | Bin 0 -> 775 bytes .../obsp/distances/indptr/.zarray | 20 + .../example.zarr/obsp/distances/indptr/0 | Bin 0 -> 105 bytes inst/extdata/example.zarr/uns/.zattrs | 4 + inst/extdata/example.zarr/uns/.zgroup | 3 + inst/extdata/example.zarr/uns/Bool/.zarray | 20 + inst/extdata/example.zarr/uns/Bool/.zattrs | 4 + inst/extdata/example.zarr/uns/Bool/0 | Bin 0 -> 19 bytes inst/extdata/example.zarr/uns/BoolNA/.zattrs | 4 + inst/extdata/example.zarr/uns/BoolNA/.zgroup | 3 + .../example.zarr/uns/BoolNA/mask/.zarray | 20 + .../example.zarr/uns/BoolNA/mask/.zattrs | 4 + inst/extdata/example.zarr/uns/BoolNA/mask/0 | Bin 0 -> 19 bytes .../example.zarr/uns/BoolNA/values/.zarray | 20 + .../example.zarr/uns/BoolNA/values/.zattrs | 4 + inst/extdata/example.zarr/uns/BoolNA/values/0 | Bin 0 -> 19 bytes .../extdata/example.zarr/uns/Category/.zattrs | 5 + .../extdata/example.zarr/uns/Category/.zgroup | 3 + .../uns/Category/categories/.zarray | 24 + .../uns/Category/categories/.zattrs | 4 + .../example.zarr/uns/Category/categories/0 | Bin 0 -> 30 bytes .../example.zarr/uns/Category/codes/.zarray | 20 + .../example.zarr/uns/Category/codes/.zattrs | 4 + .../extdata/example.zarr/uns/Category/codes/0 | Bin 0 -> 19 bytes .../example.zarr/uns/DataFrameEmpty/.zattrs | 6 + .../example.zarr/uns/DataFrameEmpty/.zgroup | 3 + .../uns/DataFrameEmpty/_index/.zarray | 24 + .../uns/DataFrameEmpty/_index/.zattrs | 4 + .../example.zarr/uns/DataFrameEmpty/_index/0 | Bin 0 -> 269 bytes inst/extdata/example.zarr/uns/Int/.zarray | 20 + inst/extdata/example.zarr/uns/Int/.zattrs | 4 + inst/extdata/example.zarr/uns/Int/0 | Bin 0 -> 40 bytes inst/extdata/example.zarr/uns/IntNA/.zattrs | 4 + inst/extdata/example.zarr/uns/IntNA/.zgroup | 3 + .../example.zarr/uns/IntNA/mask/.zarray | 20 + .../example.zarr/uns/IntNA/mask/.zattrs | 4 + inst/extdata/example.zarr/uns/IntNA/mask/0 | Bin 0 -> 19 bytes .../example.zarr/uns/IntNA/values/.zarray | 20 + .../example.zarr/uns/IntNA/values/.zattrs | 4 + inst/extdata/example.zarr/uns/IntNA/values/0 | Bin 0 -> 40 bytes .../example.zarr/uns/IntScalar/.zarray | 10 + .../example.zarr/uns/IntScalar/.zattrs | 4 + inst/extdata/example.zarr/uns/IntScalar/0 | Bin 0 -> 8 bytes .../extdata/example.zarr/uns/Sparse1D/.zattrs | 8 + .../extdata/example.zarr/uns/Sparse1D/.zgroup | 3 + .../example.zarr/uns/Sparse1D/data/.zarray | 20 + inst/extdata/example.zarr/uns/Sparse1D/data/0 | Bin 0 -> 40 bytes .../example.zarr/uns/Sparse1D/indices/.zarray | 20 + .../example.zarr/uns/Sparse1D/indices/0 | Bin 0 -> 28 bytes .../example.zarr/uns/Sparse1D/indptr/.zarray | 20 + .../example.zarr/uns/Sparse1D/indptr/0 | Bin 0 -> 44 bytes inst/extdata/example.zarr/uns/String/.zarray | 24 + inst/extdata/example.zarr/uns/String/.zattrs | 4 + inst/extdata/example.zarr/uns/String/0 | Bin 0 -> 140 bytes .../extdata/example.zarr/uns/String2D/.zarray | 26 + .../extdata/example.zarr/uns/String2D/.zattrs | 4 + inst/extdata/example.zarr/uns/String2D/0.0 | Bin 0 -> 343 bytes .../example.zarr/uns/StringScalar/.zarray | 10 + .../example.zarr/uns/StringScalar/.zattrs | 4 + inst/extdata/example.zarr/uns/StringScalar/0 | Bin 0 -> 32 bytes inst/extdata/example.zarr/uns/hvg/.zattrs | 4 + inst/extdata/example.zarr/uns/hvg/.zgroup | 3 + .../example.zarr/uns/hvg/flavor/.zarray | 10 + .../example.zarr/uns/hvg/flavor/.zattrs | 4 + inst/extdata/example.zarr/uns/hvg/flavor/0 | Bin 0 -> 24 bytes inst/extdata/example.zarr/uns/leiden/.zattrs | 4 + inst/extdata/example.zarr/uns/leiden/.zgroup | 3 + .../example.zarr/uns/leiden/params/.zattrs | 4 + .../example.zarr/uns/leiden/params/.zgroup | 3 + .../uns/leiden/params/n_iterations/.zarray | 10 + .../uns/leiden/params/n_iterations/.zattrs | 4 + .../uns/leiden/params/n_iterations/0 | 1 + .../uns/leiden/params/random_state/.zarray | 10 + .../uns/leiden/params/random_state/.zattrs | 4 + .../uns/leiden/params/random_state/0 | Bin 0 -> 8 bytes .../uns/leiden/params/resolution/.zarray | 10 + .../uns/leiden/params/resolution/.zattrs | 4 + .../uns/leiden/params/resolution/0 | Bin 0 -> 8 bytes inst/extdata/example.zarr/uns/log1p/.zattrs | 4 + inst/extdata/example.zarr/uns/log1p/.zgroup | 3 + .../example.zarr/uns/neighbors/.zattrs | 4 + .../example.zarr/uns/neighbors/.zgroup | 3 + .../uns/neighbors/connectivities_key/.zarray | 10 + .../uns/neighbors/connectivities_key/.zattrs | 4 + .../uns/neighbors/connectivities_key/0 | Bin 0 -> 56 bytes .../uns/neighbors/distances_key/.zarray | 10 + .../uns/neighbors/distances_key/.zattrs | 4 + .../uns/neighbors/distances_key/0 | Bin 0 -> 36 bytes .../example.zarr/uns/neighbors/params/.zattrs | 4 + .../example.zarr/uns/neighbors/params/.zgroup | 3 + .../uns/neighbors/params/method/.zarray | 10 + .../uns/neighbors/params/method/.zattrs | 4 + .../uns/neighbors/params/method/0 | Bin 0 -> 16 bytes .../uns/neighbors/params/metric/.zarray | 10 + .../uns/neighbors/params/metric/.zattrs | 4 + .../uns/neighbors/params/metric/0 | Bin 0 -> 36 bytes .../uns/neighbors/params/n_neighbors/.zarray | 10 + .../uns/neighbors/params/n_neighbors/.zattrs | 4 + .../uns/neighbors/params/n_neighbors/0 | Bin 0 -> 8 bytes .../uns/neighbors/params/random_state/.zarray | 10 + .../uns/neighbors/params/random_state/.zattrs | 4 + .../uns/neighbors/params/random_state/0 | Bin 0 -> 8 bytes inst/extdata/example.zarr/uns/pca/.zattrs | 4 + inst/extdata/example.zarr/uns/pca/.zgroup | 3 + .../example.zarr/uns/pca/params/.zattrs | 4 + .../example.zarr/uns/pca/params/.zgroup | 3 + .../pca/params/use_highly_variable/.zarray | 10 + .../pca/params/use_highly_variable/.zattrs | 4 + .../uns/pca/params/use_highly_variable/0 | 1 + .../uns/pca/params/zero_center/.zarray | 10 + .../uns/pca/params/zero_center/.zattrs | 4 + .../example.zarr/uns/pca/params/zero_center/0 | 1 + .../example.zarr/uns/pca/variance/.zarray | 20 + .../example.zarr/uns/pca/variance/.zattrs | 4 + inst/extdata/example.zarr/uns/pca/variance/0 | Bin 0 -> 165 bytes .../uns/pca/variance_ratio/.zarray | 20 + .../uns/pca/variance_ratio/.zattrs | 4 + .../example.zarr/uns/pca/variance_ratio/0 | Bin 0 -> 164 bytes .../uns/rank_genes_groups/.zattrs | 4 + .../uns/rank_genes_groups/.zgroup | 3 + .../rank_genes_groups/logfoldchanges/.zarray | 45 ++ .../rank_genes_groups/logfoldchanges/.zattrs | 4 + .../uns/rank_genes_groups/logfoldchanges/0 | Bin 0 -> 2142 bytes .../uns/rank_genes_groups/names/.zarray | 45 ++ .../uns/rank_genes_groups/names/.zattrs | 4 + .../uns/rank_genes_groups/names/0 | Bin 0 -> 1465 bytes .../uns/rank_genes_groups/params/.zattrs | 4 + .../uns/rank_genes_groups/params/.zgroup | 3 + .../params/corr_method/.zarray | 10 + .../params/corr_method/.zattrs | 4 + .../rank_genes_groups/params/corr_method/0 | Bin 0 -> 72 bytes .../rank_genes_groups/params/groupby/.zarray | 10 + .../rank_genes_groups/params/groupby/.zattrs | 4 + .../uns/rank_genes_groups/params/groupby/0 | Bin 0 -> 24 bytes .../rank_genes_groups/params/method/.zarray | 10 + .../rank_genes_groups/params/method/.zattrs | 4 + .../uns/rank_genes_groups/params/method/0 | Bin 0 -> 24 bytes .../params/reference/.zarray | 10 + .../params/reference/.zattrs | 4 + .../uns/rank_genes_groups/params/reference/0 | Bin 0 -> 16 bytes .../rank_genes_groups/params/use_raw/.zarray | 10 + .../rank_genes_groups/params/use_raw/.zattrs | 4 + .../uns/rank_genes_groups/params/use_raw/0 | Bin 0 -> 1 bytes .../uns/rank_genes_groups/pvals/.zarray | 45 ++ .../uns/rank_genes_groups/pvals/.zattrs | 4 + .../uns/rank_genes_groups/pvals/0 | Bin 0 -> 4296 bytes .../uns/rank_genes_groups/pvals_adj/.zarray | 45 ++ .../uns/rank_genes_groups/pvals_adj/.zattrs | 4 + .../uns/rank_genes_groups/pvals_adj/0 | Bin 0 -> 3737 bytes .../uns/rank_genes_groups/scores/.zarray | 45 ++ .../uns/rank_genes_groups/scores/.zattrs | 4 + .../uns/rank_genes_groups/scores/0 | Bin 0 -> 2067 bytes inst/extdata/example.zarr/uns/umap/.zattrs | 4 + inst/extdata/example.zarr/uns/umap/.zgroup | 3 + .../example.zarr/uns/umap/params/.zattrs | 4 + .../example.zarr/uns/umap/params/.zgroup | 3 + .../example.zarr/uns/umap/params/a/.zarray | 10 + .../example.zarr/uns/umap/params/a/.zattrs | 4 + inst/extdata/example.zarr/uns/umap/params/a/0 | 1 + .../example.zarr/uns/umap/params/b/.zarray | 10 + .../example.zarr/uns/umap/params/b/.zattrs | 4 + inst/extdata/example.zarr/uns/umap/params/b/0 | 1 + inst/extdata/example.zarr/var/.zattrs | 18 + inst/extdata/example.zarr/var/.zgroup | 3 + inst/extdata/example.zarr/var/String/.zarray | 24 + inst/extdata/example.zarr/var/String/.zattrs | 4 + inst/extdata/example.zarr/var/String/0 | Bin 0 -> 470 bytes inst/extdata/example.zarr/var/_index/.zarray | 24 + inst/extdata/example.zarr/var/_index/.zattrs | 4 + inst/extdata/example.zarr/var/_index/0 | Bin 0 -> 469 bytes .../example.zarr/var/dispersions/.zarray | 20 + .../example.zarr/var/dispersions/.zattrs | 4 + inst/extdata/example.zarr/var/dispersions/0 | Bin 0 -> 803 bytes .../example.zarr/var/dispersions_norm/.zarray | 20 + .../example.zarr/var/dispersions_norm/.zattrs | 4 + .../example.zarr/var/dispersions_norm/0 | Bin 0 -> 416 bytes .../example.zarr/var/highly_variable/.zarray | 20 + .../example.zarr/var/highly_variable/.zattrs | 4 + .../example.zarr/var/highly_variable/0 | Bin 0 -> 116 bytes .../var/log1p_mean_counts/.zarray | 20 + .../var/log1p_mean_counts/.zattrs | 4 + .../example.zarr/var/log1p_mean_counts/0 | Bin 0 -> 341 bytes .../var/log1p_total_counts/.zarray | 20 + .../var/log1p_total_counts/.zattrs | 4 + .../example.zarr/var/log1p_total_counts/0 | Bin 0 -> 341 bytes .../example.zarr/var/mean_counts/.zarray | 20 + .../example.zarr/var/mean_counts/.zattrs | 4 + inst/extdata/example.zarr/var/mean_counts/0 | Bin 0 -> 407 bytes inst/extdata/example.zarr/var/means/.zarray | 20 + inst/extdata/example.zarr/var/means/.zattrs | 4 + inst/extdata/example.zarr/var/means/0 | Bin 0 -> 743 bytes .../var/n_cells_by_counts/.zarray | 20 + .../var/n_cells_by_counts/.zattrs | 4 + .../example.zarr/var/n_cells_by_counts/0 | Bin 0 -> 142 bytes .../var/pct_dropout_by_counts/.zarray | 20 + .../var/pct_dropout_by_counts/.zattrs | 4 + .../example.zarr/var/pct_dropout_by_counts/0 | Bin 0 -> 315 bytes .../example.zarr/var/total_counts/.zarray | 20 + .../example.zarr/var/total_counts/.zattrs | 4 + inst/extdata/example.zarr/var/total_counts/0 | Bin 0 -> 145 bytes inst/extdata/example.zarr/varm/.zattrs | 4 + inst/extdata/example.zarr/varm/.zgroup | 3 + inst/extdata/example.zarr/varm/PCs/.zarray | 22 + inst/extdata/example.zarr/varm/PCs/.zattrs | 4 + inst/extdata/example.zarr/varm/PCs/0.0 | Bin 0 -> 7702 bytes inst/extdata/example.zarr/varp/.zattrs | 4 + inst/extdata/example.zarr/varp/.zgroup | 3 + inst/scripts/example_h5ad.py | 1 + tests/testthat/test-Zarr-read.R | 31 + 331 files changed, 3998 insertions(+) create mode 100644 R/ZarrAnnData.R create mode 100644 R/read_zarr.R create mode 100644 R/read_zarr_helpers.R create mode 100644 R/write_zarr.R create mode 100644 R/write_zarr_helpers.R create mode 100644 inst/extdata/example.zarr/.zattrs create mode 100644 inst/extdata/example.zarr/.zgroup create mode 100644 inst/extdata/example.zarr/X/.zattrs create mode 100644 inst/extdata/example.zarr/X/.zgroup create mode 100644 inst/extdata/example.zarr/X/data/.zarray create mode 100644 inst/extdata/example.zarr/X/data/0 create mode 100644 inst/extdata/example.zarr/X/indices/.zarray create mode 100644 inst/extdata/example.zarr/X/indices/0 create mode 100644 inst/extdata/example.zarr/X/indptr/.zarray create mode 100644 inst/extdata/example.zarr/X/indptr/0 create mode 100644 inst/extdata/example.zarr/layers/.zattrs create mode 100644 inst/extdata/example.zarr/layers/.zgroup create mode 100644 inst/extdata/example.zarr/layers/counts/.zattrs create mode 100644 inst/extdata/example.zarr/layers/counts/.zgroup create mode 100644 inst/extdata/example.zarr/layers/counts/data/.zarray create mode 100644 inst/extdata/example.zarr/layers/counts/data/0 create mode 100644 inst/extdata/example.zarr/layers/counts/indices/.zarray create mode 100644 inst/extdata/example.zarr/layers/counts/indices/0 create mode 100644 inst/extdata/example.zarr/layers/counts/indptr/.zarray create mode 100644 inst/extdata/example.zarr/layers/counts/indptr/0 create mode 100644 inst/extdata/example.zarr/layers/csc_counts/.zattrs create mode 100644 inst/extdata/example.zarr/layers/csc_counts/.zgroup create mode 100644 inst/extdata/example.zarr/layers/csc_counts/data/.zarray create mode 100644 inst/extdata/example.zarr/layers/csc_counts/data/0 create mode 100644 inst/extdata/example.zarr/layers/csc_counts/indices/.zarray create mode 100644 inst/extdata/example.zarr/layers/csc_counts/indices/0 create mode 100644 inst/extdata/example.zarr/layers/csc_counts/indptr/.zarray create mode 100644 inst/extdata/example.zarr/layers/csc_counts/indptr/0 create mode 100644 inst/extdata/example.zarr/layers/dense_X/.zarray create mode 100644 inst/extdata/example.zarr/layers/dense_X/.zattrs create mode 100644 inst/extdata/example.zarr/layers/dense_X/0.0 create mode 100644 inst/extdata/example.zarr/layers/dense_counts/.zarray create mode 100644 inst/extdata/example.zarr/layers/dense_counts/.zattrs create mode 100644 inst/extdata/example.zarr/layers/dense_counts/0.0 create mode 100644 inst/extdata/example.zarr/obs/.zattrs create mode 100644 inst/extdata/example.zarr/obs/.zgroup create mode 100644 inst/extdata/example.zarr/obs/Bool/.zattrs create mode 100644 inst/extdata/example.zarr/obs/Bool/.zgroup create mode 100644 inst/extdata/example.zarr/obs/Bool/mask/.zarray create mode 100644 inst/extdata/example.zarr/obs/Bool/mask/.zattrs create mode 100644 inst/extdata/example.zarr/obs/Bool/mask/0 create mode 100644 inst/extdata/example.zarr/obs/Bool/values/.zarray create mode 100644 inst/extdata/example.zarr/obs/Bool/values/.zattrs create mode 100644 inst/extdata/example.zarr/obs/Bool/values/0 create mode 100644 inst/extdata/example.zarr/obs/BoolNA/.zattrs create mode 100644 inst/extdata/example.zarr/obs/BoolNA/.zgroup create mode 100644 inst/extdata/example.zarr/obs/BoolNA/mask/.zarray create mode 100644 inst/extdata/example.zarr/obs/BoolNA/mask/.zattrs create mode 100644 inst/extdata/example.zarr/obs/BoolNA/mask/0 create mode 100644 inst/extdata/example.zarr/obs/BoolNA/values/.zarray create mode 100644 inst/extdata/example.zarr/obs/BoolNA/values/.zattrs create mode 100644 inst/extdata/example.zarr/obs/BoolNA/values/0 create mode 100644 inst/extdata/example.zarr/obs/Float/.zarray create mode 100644 inst/extdata/example.zarr/obs/Float/.zattrs create mode 100644 inst/extdata/example.zarr/obs/Float/0 create mode 100644 inst/extdata/example.zarr/obs/FloatNA/.zarray create mode 100644 inst/extdata/example.zarr/obs/FloatNA/.zattrs create mode 100644 inst/extdata/example.zarr/obs/FloatNA/0 create mode 100644 inst/extdata/example.zarr/obs/Int/.zarray create mode 100644 inst/extdata/example.zarr/obs/Int/.zattrs create mode 100644 inst/extdata/example.zarr/obs/Int/0 create mode 100644 inst/extdata/example.zarr/obs/IntNA/.zattrs create mode 100644 inst/extdata/example.zarr/obs/IntNA/.zgroup create mode 100644 inst/extdata/example.zarr/obs/IntNA/mask/.zarray create mode 100644 inst/extdata/example.zarr/obs/IntNA/mask/.zattrs create mode 100644 inst/extdata/example.zarr/obs/IntNA/mask/0 create mode 100644 inst/extdata/example.zarr/obs/IntNA/values/.zarray create mode 100644 inst/extdata/example.zarr/obs/IntNA/values/.zattrs create mode 100644 inst/extdata/example.zarr/obs/IntNA/values/0 create mode 100644 inst/extdata/example.zarr/obs/_index/.zarray create mode 100644 inst/extdata/example.zarr/obs/_index/.zattrs create mode 100644 inst/extdata/example.zarr/obs/_index/0 create mode 100644 inst/extdata/example.zarr/obs/leiden/.zattrs create mode 100644 inst/extdata/example.zarr/obs/leiden/.zgroup create mode 100644 inst/extdata/example.zarr/obs/leiden/categories/.zarray create mode 100644 inst/extdata/example.zarr/obs/leiden/categories/.zattrs create mode 100644 inst/extdata/example.zarr/obs/leiden/categories/0 create mode 100644 inst/extdata/example.zarr/obs/leiden/codes/.zarray create mode 100644 inst/extdata/example.zarr/obs/leiden/codes/.zattrs create mode 100644 inst/extdata/example.zarr/obs/leiden/codes/0 create mode 100644 inst/extdata/example.zarr/obs/log1p_n_genes_by_counts/.zarray create mode 100644 inst/extdata/example.zarr/obs/log1p_n_genes_by_counts/.zattrs create mode 100644 inst/extdata/example.zarr/obs/log1p_n_genes_by_counts/0 create mode 100644 inst/extdata/example.zarr/obs/log1p_total_counts/.zarray create mode 100644 inst/extdata/example.zarr/obs/log1p_total_counts/.zattrs create mode 100644 inst/extdata/example.zarr/obs/log1p_total_counts/0 create mode 100644 inst/extdata/example.zarr/obs/n_genes_by_counts/.zarray create mode 100644 inst/extdata/example.zarr/obs/n_genes_by_counts/.zattrs create mode 100644 inst/extdata/example.zarr/obs/n_genes_by_counts/0 create mode 100644 inst/extdata/example.zarr/obs/total_counts/.zarray create mode 100644 inst/extdata/example.zarr/obs/total_counts/.zattrs create mode 100644 inst/extdata/example.zarr/obs/total_counts/0 create mode 100644 inst/extdata/example.zarr/obsm/.zattrs create mode 100644 inst/extdata/example.zarr/obsm/.zgroup create mode 100644 inst/extdata/example.zarr/obsm/X_pca/.zarray create mode 100644 inst/extdata/example.zarr/obsm/X_pca/.zattrs create mode 100644 inst/extdata/example.zarr/obsm/X_pca/0.0 create mode 100644 inst/extdata/example.zarr/obsm/X_umap/.zarray create mode 100644 inst/extdata/example.zarr/obsm/X_umap/.zattrs create mode 100644 inst/extdata/example.zarr/obsm/X_umap/0.0 create mode 100644 inst/extdata/example.zarr/obsp/.zattrs create mode 100644 inst/extdata/example.zarr/obsp/.zgroup create mode 100644 inst/extdata/example.zarr/obsp/connectivities/.zattrs create mode 100644 inst/extdata/example.zarr/obsp/connectivities/.zgroup create mode 100644 inst/extdata/example.zarr/obsp/connectivities/data/.zarray create mode 100644 inst/extdata/example.zarr/obsp/connectivities/data/0 create mode 100644 inst/extdata/example.zarr/obsp/connectivities/indices/.zarray create mode 100644 inst/extdata/example.zarr/obsp/connectivities/indices/0 create mode 100644 inst/extdata/example.zarr/obsp/connectivities/indptr/.zarray create mode 100644 inst/extdata/example.zarr/obsp/connectivities/indptr/0 create mode 100644 inst/extdata/example.zarr/obsp/distances/.zattrs create mode 100644 inst/extdata/example.zarr/obsp/distances/.zgroup create mode 100644 inst/extdata/example.zarr/obsp/distances/data/.zarray create mode 100644 inst/extdata/example.zarr/obsp/distances/data/0 create mode 100644 inst/extdata/example.zarr/obsp/distances/indices/.zarray create mode 100644 inst/extdata/example.zarr/obsp/distances/indices/0 create mode 100644 inst/extdata/example.zarr/obsp/distances/indptr/.zarray create mode 100644 inst/extdata/example.zarr/obsp/distances/indptr/0 create mode 100644 inst/extdata/example.zarr/uns/.zattrs create mode 100644 inst/extdata/example.zarr/uns/.zgroup create mode 100644 inst/extdata/example.zarr/uns/Bool/.zarray create mode 100644 inst/extdata/example.zarr/uns/Bool/.zattrs create mode 100644 inst/extdata/example.zarr/uns/Bool/0 create mode 100644 inst/extdata/example.zarr/uns/BoolNA/.zattrs create mode 100644 inst/extdata/example.zarr/uns/BoolNA/.zgroup create mode 100644 inst/extdata/example.zarr/uns/BoolNA/mask/.zarray create mode 100644 inst/extdata/example.zarr/uns/BoolNA/mask/.zattrs create mode 100644 inst/extdata/example.zarr/uns/BoolNA/mask/0 create mode 100644 inst/extdata/example.zarr/uns/BoolNA/values/.zarray create mode 100644 inst/extdata/example.zarr/uns/BoolNA/values/.zattrs create mode 100644 inst/extdata/example.zarr/uns/BoolNA/values/0 create mode 100644 inst/extdata/example.zarr/uns/Category/.zattrs create mode 100644 inst/extdata/example.zarr/uns/Category/.zgroup create mode 100644 inst/extdata/example.zarr/uns/Category/categories/.zarray create mode 100644 inst/extdata/example.zarr/uns/Category/categories/.zattrs create mode 100644 inst/extdata/example.zarr/uns/Category/categories/0 create mode 100644 inst/extdata/example.zarr/uns/Category/codes/.zarray create mode 100644 inst/extdata/example.zarr/uns/Category/codes/.zattrs create mode 100644 inst/extdata/example.zarr/uns/Category/codes/0 create mode 100644 inst/extdata/example.zarr/uns/DataFrameEmpty/.zattrs create mode 100644 inst/extdata/example.zarr/uns/DataFrameEmpty/.zgroup create mode 100644 inst/extdata/example.zarr/uns/DataFrameEmpty/_index/.zarray create mode 100644 inst/extdata/example.zarr/uns/DataFrameEmpty/_index/.zattrs create mode 100644 inst/extdata/example.zarr/uns/DataFrameEmpty/_index/0 create mode 100644 inst/extdata/example.zarr/uns/Int/.zarray create mode 100644 inst/extdata/example.zarr/uns/Int/.zattrs create mode 100644 inst/extdata/example.zarr/uns/Int/0 create mode 100644 inst/extdata/example.zarr/uns/IntNA/.zattrs create mode 100644 inst/extdata/example.zarr/uns/IntNA/.zgroup create mode 100644 inst/extdata/example.zarr/uns/IntNA/mask/.zarray create mode 100644 inst/extdata/example.zarr/uns/IntNA/mask/.zattrs create mode 100644 inst/extdata/example.zarr/uns/IntNA/mask/0 create mode 100644 inst/extdata/example.zarr/uns/IntNA/values/.zarray create mode 100644 inst/extdata/example.zarr/uns/IntNA/values/.zattrs create mode 100644 inst/extdata/example.zarr/uns/IntNA/values/0 create mode 100644 inst/extdata/example.zarr/uns/IntScalar/.zarray create mode 100644 inst/extdata/example.zarr/uns/IntScalar/.zattrs create mode 100644 inst/extdata/example.zarr/uns/IntScalar/0 create mode 100644 inst/extdata/example.zarr/uns/Sparse1D/.zattrs create mode 100644 inst/extdata/example.zarr/uns/Sparse1D/.zgroup create mode 100644 inst/extdata/example.zarr/uns/Sparse1D/data/.zarray create mode 100644 inst/extdata/example.zarr/uns/Sparse1D/data/0 create mode 100644 inst/extdata/example.zarr/uns/Sparse1D/indices/.zarray create mode 100644 inst/extdata/example.zarr/uns/Sparse1D/indices/0 create mode 100644 inst/extdata/example.zarr/uns/Sparse1D/indptr/.zarray create mode 100644 inst/extdata/example.zarr/uns/Sparse1D/indptr/0 create mode 100644 inst/extdata/example.zarr/uns/String/.zarray create mode 100644 inst/extdata/example.zarr/uns/String/.zattrs create mode 100644 inst/extdata/example.zarr/uns/String/0 create mode 100644 inst/extdata/example.zarr/uns/String2D/.zarray create mode 100644 inst/extdata/example.zarr/uns/String2D/.zattrs create mode 100644 inst/extdata/example.zarr/uns/String2D/0.0 create mode 100644 inst/extdata/example.zarr/uns/StringScalar/.zarray create mode 100644 inst/extdata/example.zarr/uns/StringScalar/.zattrs create mode 100644 inst/extdata/example.zarr/uns/StringScalar/0 create mode 100644 inst/extdata/example.zarr/uns/hvg/.zattrs create mode 100644 inst/extdata/example.zarr/uns/hvg/.zgroup create mode 100644 inst/extdata/example.zarr/uns/hvg/flavor/.zarray create mode 100644 inst/extdata/example.zarr/uns/hvg/flavor/.zattrs create mode 100644 inst/extdata/example.zarr/uns/hvg/flavor/0 create mode 100644 inst/extdata/example.zarr/uns/leiden/.zattrs create mode 100644 inst/extdata/example.zarr/uns/leiden/.zgroup create mode 100644 inst/extdata/example.zarr/uns/leiden/params/.zattrs create mode 100644 inst/extdata/example.zarr/uns/leiden/params/.zgroup create mode 100644 inst/extdata/example.zarr/uns/leiden/params/n_iterations/.zarray create mode 100644 inst/extdata/example.zarr/uns/leiden/params/n_iterations/.zattrs create mode 100644 inst/extdata/example.zarr/uns/leiden/params/n_iterations/0 create mode 100644 inst/extdata/example.zarr/uns/leiden/params/random_state/.zarray create mode 100644 inst/extdata/example.zarr/uns/leiden/params/random_state/.zattrs create mode 100644 inst/extdata/example.zarr/uns/leiden/params/random_state/0 create mode 100644 inst/extdata/example.zarr/uns/leiden/params/resolution/.zarray create mode 100644 inst/extdata/example.zarr/uns/leiden/params/resolution/.zattrs create mode 100644 inst/extdata/example.zarr/uns/leiden/params/resolution/0 create mode 100644 inst/extdata/example.zarr/uns/log1p/.zattrs create mode 100644 inst/extdata/example.zarr/uns/log1p/.zgroup create mode 100644 inst/extdata/example.zarr/uns/neighbors/.zattrs create mode 100644 inst/extdata/example.zarr/uns/neighbors/.zgroup create mode 100644 inst/extdata/example.zarr/uns/neighbors/connectivities_key/.zarray create mode 100644 inst/extdata/example.zarr/uns/neighbors/connectivities_key/.zattrs create mode 100644 inst/extdata/example.zarr/uns/neighbors/connectivities_key/0 create mode 100644 inst/extdata/example.zarr/uns/neighbors/distances_key/.zarray create mode 100644 inst/extdata/example.zarr/uns/neighbors/distances_key/.zattrs create mode 100644 inst/extdata/example.zarr/uns/neighbors/distances_key/0 create mode 100644 inst/extdata/example.zarr/uns/neighbors/params/.zattrs create mode 100644 inst/extdata/example.zarr/uns/neighbors/params/.zgroup create mode 100644 inst/extdata/example.zarr/uns/neighbors/params/method/.zarray create mode 100644 inst/extdata/example.zarr/uns/neighbors/params/method/.zattrs create mode 100644 inst/extdata/example.zarr/uns/neighbors/params/method/0 create mode 100644 inst/extdata/example.zarr/uns/neighbors/params/metric/.zarray create mode 100644 inst/extdata/example.zarr/uns/neighbors/params/metric/.zattrs create mode 100644 inst/extdata/example.zarr/uns/neighbors/params/metric/0 create mode 100644 inst/extdata/example.zarr/uns/neighbors/params/n_neighbors/.zarray create mode 100644 inst/extdata/example.zarr/uns/neighbors/params/n_neighbors/.zattrs create mode 100644 inst/extdata/example.zarr/uns/neighbors/params/n_neighbors/0 create mode 100644 inst/extdata/example.zarr/uns/neighbors/params/random_state/.zarray create mode 100644 inst/extdata/example.zarr/uns/neighbors/params/random_state/.zattrs create mode 100644 inst/extdata/example.zarr/uns/neighbors/params/random_state/0 create mode 100644 inst/extdata/example.zarr/uns/pca/.zattrs create mode 100644 inst/extdata/example.zarr/uns/pca/.zgroup create mode 100644 inst/extdata/example.zarr/uns/pca/params/.zattrs create mode 100644 inst/extdata/example.zarr/uns/pca/params/.zgroup create mode 100644 inst/extdata/example.zarr/uns/pca/params/use_highly_variable/.zarray create mode 100644 inst/extdata/example.zarr/uns/pca/params/use_highly_variable/.zattrs create mode 100644 inst/extdata/example.zarr/uns/pca/params/use_highly_variable/0 create mode 100644 inst/extdata/example.zarr/uns/pca/params/zero_center/.zarray create mode 100644 inst/extdata/example.zarr/uns/pca/params/zero_center/.zattrs create mode 100644 inst/extdata/example.zarr/uns/pca/params/zero_center/0 create mode 100644 inst/extdata/example.zarr/uns/pca/variance/.zarray create mode 100644 inst/extdata/example.zarr/uns/pca/variance/.zattrs create mode 100644 inst/extdata/example.zarr/uns/pca/variance/0 create mode 100644 inst/extdata/example.zarr/uns/pca/variance_ratio/.zarray create mode 100644 inst/extdata/example.zarr/uns/pca/variance_ratio/.zattrs create mode 100644 inst/extdata/example.zarr/uns/pca/variance_ratio/0 create mode 100644 inst/extdata/example.zarr/uns/rank_genes_groups/.zattrs create mode 100644 inst/extdata/example.zarr/uns/rank_genes_groups/.zgroup create mode 100644 inst/extdata/example.zarr/uns/rank_genes_groups/logfoldchanges/.zarray create mode 100644 inst/extdata/example.zarr/uns/rank_genes_groups/logfoldchanges/.zattrs create mode 100644 inst/extdata/example.zarr/uns/rank_genes_groups/logfoldchanges/0 create mode 100644 inst/extdata/example.zarr/uns/rank_genes_groups/names/.zarray create mode 100644 inst/extdata/example.zarr/uns/rank_genes_groups/names/.zattrs create mode 100644 inst/extdata/example.zarr/uns/rank_genes_groups/names/0 create mode 100644 inst/extdata/example.zarr/uns/rank_genes_groups/params/.zattrs create mode 100644 inst/extdata/example.zarr/uns/rank_genes_groups/params/.zgroup create mode 100644 inst/extdata/example.zarr/uns/rank_genes_groups/params/corr_method/.zarray create mode 100644 inst/extdata/example.zarr/uns/rank_genes_groups/params/corr_method/.zattrs create mode 100644 inst/extdata/example.zarr/uns/rank_genes_groups/params/corr_method/0 create mode 100644 inst/extdata/example.zarr/uns/rank_genes_groups/params/groupby/.zarray create mode 100644 inst/extdata/example.zarr/uns/rank_genes_groups/params/groupby/.zattrs create mode 100644 inst/extdata/example.zarr/uns/rank_genes_groups/params/groupby/0 create mode 100644 inst/extdata/example.zarr/uns/rank_genes_groups/params/method/.zarray create mode 100644 inst/extdata/example.zarr/uns/rank_genes_groups/params/method/.zattrs create mode 100644 inst/extdata/example.zarr/uns/rank_genes_groups/params/method/0 create mode 100644 inst/extdata/example.zarr/uns/rank_genes_groups/params/reference/.zarray create mode 100644 inst/extdata/example.zarr/uns/rank_genes_groups/params/reference/.zattrs create mode 100644 inst/extdata/example.zarr/uns/rank_genes_groups/params/reference/0 create mode 100644 inst/extdata/example.zarr/uns/rank_genes_groups/params/use_raw/.zarray create mode 100644 inst/extdata/example.zarr/uns/rank_genes_groups/params/use_raw/.zattrs create mode 100644 inst/extdata/example.zarr/uns/rank_genes_groups/params/use_raw/0 create mode 100644 inst/extdata/example.zarr/uns/rank_genes_groups/pvals/.zarray create mode 100644 inst/extdata/example.zarr/uns/rank_genes_groups/pvals/.zattrs create mode 100644 inst/extdata/example.zarr/uns/rank_genes_groups/pvals/0 create mode 100644 inst/extdata/example.zarr/uns/rank_genes_groups/pvals_adj/.zarray create mode 100644 inst/extdata/example.zarr/uns/rank_genes_groups/pvals_adj/.zattrs create mode 100644 inst/extdata/example.zarr/uns/rank_genes_groups/pvals_adj/0 create mode 100644 inst/extdata/example.zarr/uns/rank_genes_groups/scores/.zarray create mode 100644 inst/extdata/example.zarr/uns/rank_genes_groups/scores/.zattrs create mode 100644 inst/extdata/example.zarr/uns/rank_genes_groups/scores/0 create mode 100644 inst/extdata/example.zarr/uns/umap/.zattrs create mode 100644 inst/extdata/example.zarr/uns/umap/.zgroup create mode 100644 inst/extdata/example.zarr/uns/umap/params/.zattrs create mode 100644 inst/extdata/example.zarr/uns/umap/params/.zgroup create mode 100644 inst/extdata/example.zarr/uns/umap/params/a/.zarray create mode 100644 inst/extdata/example.zarr/uns/umap/params/a/.zattrs create mode 100644 inst/extdata/example.zarr/uns/umap/params/a/0 create mode 100644 inst/extdata/example.zarr/uns/umap/params/b/.zarray create mode 100644 inst/extdata/example.zarr/uns/umap/params/b/.zattrs create mode 100644 inst/extdata/example.zarr/uns/umap/params/b/0 create mode 100644 inst/extdata/example.zarr/var/.zattrs create mode 100644 inst/extdata/example.zarr/var/.zgroup create mode 100644 inst/extdata/example.zarr/var/String/.zarray create mode 100644 inst/extdata/example.zarr/var/String/.zattrs create mode 100644 inst/extdata/example.zarr/var/String/0 create mode 100644 inst/extdata/example.zarr/var/_index/.zarray create mode 100644 inst/extdata/example.zarr/var/_index/.zattrs create mode 100644 inst/extdata/example.zarr/var/_index/0 create mode 100644 inst/extdata/example.zarr/var/dispersions/.zarray create mode 100644 inst/extdata/example.zarr/var/dispersions/.zattrs create mode 100644 inst/extdata/example.zarr/var/dispersions/0 create mode 100644 inst/extdata/example.zarr/var/dispersions_norm/.zarray create mode 100644 inst/extdata/example.zarr/var/dispersions_norm/.zattrs create mode 100644 inst/extdata/example.zarr/var/dispersions_norm/0 create mode 100644 inst/extdata/example.zarr/var/highly_variable/.zarray create mode 100644 inst/extdata/example.zarr/var/highly_variable/.zattrs create mode 100644 inst/extdata/example.zarr/var/highly_variable/0 create mode 100644 inst/extdata/example.zarr/var/log1p_mean_counts/.zarray create mode 100644 inst/extdata/example.zarr/var/log1p_mean_counts/.zattrs create mode 100644 inst/extdata/example.zarr/var/log1p_mean_counts/0 create mode 100644 inst/extdata/example.zarr/var/log1p_total_counts/.zarray create mode 100644 inst/extdata/example.zarr/var/log1p_total_counts/.zattrs create mode 100644 inst/extdata/example.zarr/var/log1p_total_counts/0 create mode 100644 inst/extdata/example.zarr/var/mean_counts/.zarray create mode 100644 inst/extdata/example.zarr/var/mean_counts/.zattrs create mode 100644 inst/extdata/example.zarr/var/mean_counts/0 create mode 100644 inst/extdata/example.zarr/var/means/.zarray create mode 100644 inst/extdata/example.zarr/var/means/.zattrs create mode 100644 inst/extdata/example.zarr/var/means/0 create mode 100644 inst/extdata/example.zarr/var/n_cells_by_counts/.zarray create mode 100644 inst/extdata/example.zarr/var/n_cells_by_counts/.zattrs create mode 100644 inst/extdata/example.zarr/var/n_cells_by_counts/0 create mode 100644 inst/extdata/example.zarr/var/pct_dropout_by_counts/.zarray create mode 100644 inst/extdata/example.zarr/var/pct_dropout_by_counts/.zattrs create mode 100644 inst/extdata/example.zarr/var/pct_dropout_by_counts/0 create mode 100644 inst/extdata/example.zarr/var/total_counts/.zarray create mode 100644 inst/extdata/example.zarr/var/total_counts/.zattrs create mode 100644 inst/extdata/example.zarr/var/total_counts/0 create mode 100644 inst/extdata/example.zarr/varm/.zattrs create mode 100644 inst/extdata/example.zarr/varm/.zgroup create mode 100644 inst/extdata/example.zarr/varm/PCs/.zarray create mode 100644 inst/extdata/example.zarr/varm/PCs/.zattrs create mode 100644 inst/extdata/example.zarr/varm/PCs/0.0 create mode 100644 inst/extdata/example.zarr/varp/.zattrs create mode 100644 inst/extdata/example.zarr/varp/.zgroup create mode 100644 tests/testthat/test-Zarr-read.R diff --git a/.gitignore b/.gitignore index aaa7aaec..1f0278ca 100644 --- a/.gitignore +++ b/.gitignore @@ -52,3 +52,7 @@ po/*~ # RStudio Connect folder rsconnect/ + +.DS_Store +.ipynb_checkpoints/ +*.ipynb \ No newline at end of file diff --git a/NAMESPACE b/NAMESPACE index 672719b7..89eb3e4e 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -6,11 +6,13 @@ export(from_Seurat) export(from_SingleCellExperiment) export(generate_dataset) export(read_h5ad) +export(read_zarr) export(to_HDF5AnnData) export(to_InMemoryAnnData) export(to_Seurat) export(to_SingleCellExperiment) export(write_h5ad) +export(write_zarr) importFrom(Matrix,as.matrix) importFrom(Matrix,sparseMatrix) importFrom(Matrix,t) diff --git a/R/ZarrAnnData.R b/R/ZarrAnnData.R new file mode 100644 index 00000000..fcd7c12b --- /dev/null +++ b/R/ZarrAnnData.R @@ -0,0 +1,420 @@ +#' @title ZarrAnnData +#' +#' @description +#' Implementation of an in memory AnnData object. +ZarrAnnData <- R6::R6Class("ZarrAnnData", # nolint + inherit = AbstractAnnData, + private = list( + .h5obj = NULL, + .n_obs = NULL, + .n_vars = NULL, + .obs_names = NULL, + .var_names = NULL, + .compression = NULL + ), + active = list( + #' @field X The X slot + X = function(value) { + if (missing(value)) { + # trackstatus: class=HDF5AnnData, feature=get_X, status=done + read_zarr_element(private$.h5obj, "/X") + } else { + # trackstatus: class=HDF5AnnData, feature=set_X, status=done + value <- private$.validate_aligned_array( + value, + "X", + shape = c(self$n_obs(), self$n_vars()), + expected_rownames = rownames(self), + expected_colnames = colnames(self) + ) + write_h5ad_element(value, private$.h5obj, "/X", private$.compression) + } + }, + #' @field layers The layers slot. Must be NULL or a named list + #' with with all elements having the dimensions consistent with + #' `obs` and `var`. + layers = function(value) { + if (missing(value)) { + # trackstatus: class=HDF5AnnData, feature=get_layers, status=done + read_zarr_element(private$.h5obj, "layers") + } else { + # trackstatus: class=HDF5AnnData, feature=set_layers, status=done + value <- private$.validate_aligned_mapping( + value, + "layers", + c(self$n_obs(), self$n_vars()), + expected_rownames = rownames(self), + expected_colnames = colnames(self) + ) + write_h5ad_element(value, private$.h5obj, "/layers", private$.compression) + } + }, + #' @field obsm The obsm slot. Must be `NULL` or a named list with + #' with all elements having the same number of rows as `obs`. + obsm = function(value) { + if (missing(value)) { + # trackstatus: class=HDF5AnnData, feature=get_obsm, status=done + read_zarr_element(private$.h5obj, "obsm") + } else { + # trackstatus: class=HDF5AnnData, feature=set_obsm, status=done + value <- private$.validate_aligned_mapping( + value, + "obsm", + c(self$n_obs()), + expected_rownames = rownames(self) + ) + write_h5ad_element(value, private$.h5obj, "/obsm") + } + }, + #' @field varm The varm slot. Must be `NULL` or a named list with + #' with all elements having the same number of rows as `var`. + varm = function(value) { + if (missing(value)) { + # trackstatus: class=HDF5AnnData, feature=get_varm, status=done + read_zarr_element(private$.h5obj, "varm") + } else { + # trackstatus: class=HDF5AnnData, feature=set_varm, status=done + value <- private$.validate_aligned_mapping( + value, + "varm", + c(self$n_vars()), + expected_rownames = colnames(self) + ) + write_h5ad_element(value, private$.h5obj, "/varm") + } + }, + #' @field obsp The obsp slot. Must be `NULL` or a named list with + #' with all elements having the same number of rows and columns as `obs`. + obsp = function(value) { + if (missing(value)) { + # trackstatus: class=HDF5AnnData, feature=get_obsp, status=done + read_zarr_element(private$.h5obj, "obsp") + } else { + # trackstatus: class=HDF5AnnData, feature=set_obsp, status=done + value <- private$.validate_aligned_mapping( + value, + "obsp", + c(self$n_obs(), self$n_obs()), + expected_rownames = rownames(self), + expected_colnames = rownames(self) + ) + write_h5ad_element(value, private$.h5obj, "/obsp") + } + }, + #' @field varp The varp slot. Must be `NULL` or a named list with + #' with all elements having the same number of rows and columns as `var`. + varp = function(value) { + if (missing(value)) { + # trackstatus: class=HDF5AnnData, feature=get_varp, status=done + read_zarr_element(private$.h5obj, "varp") + } else { + # trackstatus: class=HDF5AnnData, feature=set_varp, status=done + value <- private$.validate_aligned_mapping( + value, + "varp", + c(self$n_vars(), self$n_vars()), + expected_rownames = colnames(self), + expected_colnames = colnames(self) + ) + write_h5ad_element(value, private$.h5obj, "/varp") + } + }, + + #' @field obs The obs slot + obs = function(value) { + if (missing(value)) { + # trackstatus: class=HDF5AnnData, feature=get_obs, status=done + read_zarr_element(private$.h5obj, "/obs", include_index = FALSE) + } else { + # trackstatus: class=HDF5AnnData, feature=set_obs, status=done + value <- private$.validate_obsvar_dataframe(value, "obs") + write_h5ad_element( + value, + private$.h5obj, + "/obs", + private$.compression, + index = self$obs_names + ) + } + }, + #' @field var The var slot + var = function(value) { + if (missing(value)) { + # trackstatus: class=HDF5AnnData, feature=get_var, status=done + read_zarr_element(private$.h5obj, "/var", include_index = FALSE) + } else { + # trackstatus: class=HDF5AnnData, feature=set_var, status=done + value <- private$.validate_obsvar_dataframe(value, "var") + write_h5ad_element( + value, + private$.h5obj, + "/var", + index = self$var_names + ) + } + }, + #' @field obs_names Names of observations + obs_names = function(value) { + if (missing(value)) { + # trackstatus: class=HDF5AnnData, feature=get_obs_names, status=done + # obs names are cached to avoid reading all of obs whenever they are + # accessed + if (is.null(private$.obs_names)) { + private$.obs_names <- read_zarr_data_frame_index(private$.h5obj, "obs") + } + private$.obs_names + } else { + # trackstatus: class=HDF5AnnData, feature=set_obs_names, status=done + value <- private$.validate_obsvar_names(value, "obs") + write_h5ad_data_frame_index(value, private$.h5obj, "obs", private$.compression, "_index") + private$.obs_names <- value + } + }, + #' @field var_names Names of variables + var_names = function(value) { + # TODO: directly write to and read from /var/_index + if (missing(value)) { + # trackstatus: class=HDF5AnnData, feature=get_var_names, status=done + # var names are cached to avoid reading all of var whenever they are + # accessed + if (is.null(private$.var_names)) { + private$.var_names <- read_zarr_data_frame_index(private$.h5obj, "var") + } + private$.var_names + } else { + # trackstatus: class=HDF5AnnData, feature=set_var_names, status=done + value <- private$.validate_obsvar_names(value, "var") + write_h5ad_data_frame_index(value, private$.h5obj, "var", private$.compression, "_index") + private$.var_names <- value + } + }, + #' @field uns The uns slot. Must be `NULL` or a named list. + uns = function(value) { + if (missing(value)) { + # trackstatus: class=HDF5AnnData, feature=get_uns, status=done + read_zarr_element(private$.h5obj, "uns") + } else { + # trackstatus: class=HDF5AnnData, feature=set_uns, status=done + value <- private$.validate_named_list(value, "uns") + write_h5ad_element(value, private$.h5obj, "/uns") + } + } + ), + public = list( + #' @description HDF5AnnData constructor + #' + #' @param file The filename (character) of the `.h5ad` file. If this + #' file does not exist yet, `obs_names` and `var_names` must be provided. + #' @param obs_names A vector of unique identifiers + #' used to identify each row of `obs` and to act as an index into the + #' observation dimension of the AnnData object. The length of `obs_names` + #' defines the observation dimension of the AnnData object. + #' @param var_names A vector of unique identifiers used to identify each row + #' of `var` and to act as an index into the variable dimension of the + #' AnnData object. The length of `var_names` defines the variable + #' dimension of the AnnData object. + #' @param X Either `NULL` or a observation × variable matrix with + #' dimensions consistent with `obs` and `var`. + #' @param layers Either `NULL` or a named list, where each element is an + #' observation × variable matrix with dimensions consistent with `obs` and + #' `var`. + #' @param obs Either `NULL` or a `data.frame` with columns containing + #' information about observations. If `NULL`, an `n_obs`×0 data frame will + #' automatically be generated. + #' @param var Either `NULL` or a `data.frame` with columns containing + #' information about variables. If `NULL`, an `n_vars`×0 data frame will + #' automatically be generated. + #' @param obsm The obsm slot is used to store multi-dimensional annotation + #' arrays. It must be either `NULL` or a named list, where each element is a + #' matrix with `n_obs` rows and an arbitrary number of columns. + #' @param varm The varm slot is used to store multi-dimensional annotation + #' arrays. It must be either `NULL` or a named list, where each element is a + #' matrix with `n_vars` rows and an arbitrary number of columns. + #' @param obsp The obsp slot is used to store sparse multi-dimensional + #' annotation arrays. It must be either `NULL` or a named list, where each + #' element is a sparse matrix where each dimension has length `n_obs`. + #' @param varp The varp slot is used to store sparse multi-dimensional + #' annotation arrays. It must be either `NULL` or a named list, where each + #' element is a sparse matrix where each dimension has length `n_vars`. + #' @param uns The uns slot is used to store unstructured annotation. It must + #' be either `NULL` or a named list. + #' @param compression The compression algorithm to use when writing the + #' HDF5 file. Can be one of `"none"`, `"gzip"` or `"lzf"`. Defaults to + #' `"none"`. + #' + #' @details + #' The constructor creates a new HDF5 AnnData interface object. This can + #' either be used to either connect to an existing `.h5ad` file or to + #' create a new one. To create a new file both `obs_names` and `var_names` + #' must be specified. In both cases, any additional slots provided will be + #' set on the created object. This will cause data to be overwritten if the + #' file already exists. + initialize = function(file, + obs_names = NULL, + var_names = NULL, + X = NULL, + obs = NULL, + var = NULL, + layers = NULL, + obsm = NULL, + varm = NULL, + obsp = NULL, + varp = NULL, + uns = NULL, + compression = c("none", "gzip", "lzf")) { + if (!requireNamespace("pizzarr", quietly = TRUE)) { + stop("The Zarr interface requires the 'pizzarr' package to be installed") + } + + compression <- match.arg(compression) + private$.compression <- compression + + if (!file.exists(file)) { + # Check obs_names and var_names have been provided + if (is.null(obs_names)) { + stop("When creating a new .h5ad file, `obs_names` must be defined.") + } + if (is.null(var_names)) { + stop("When creating a new .h5ad file, `var_names` must be defined.") + } + + # Create an empty H5AD using the provided obs/var names + write_empty_h5ad(file, obs_names, var_names, compression) + + # Set private object slots + private$.h5obj <- file + private$.n_obs <- length(obs_names) + private$.n_vars <- length(var_names) + private$.obs_names <- obs_names + private$.var_names <- var_names + } else { + # Check the file is a valid H5AD + attrs <- rhdf5::h5readAttributes(file, "/") + + if (!all(c("encoding-type", "encoding-version") %in% names(attrs))) { + stop( + "H5AD encoding information is missing. ", + "This file may have been created with Python anndata<0.8.0." + ) + } + + # Set the file path + private$.h5obj <- file + + # If obs or var names have been provided update those + if (!is.null(obs_names)) { + self$obs_names <- obs_names + } + + if (!is.null(var_names)) { + self$var_names <- var_names + } + } + + # Update remaining slots + if (!is.null(X)) { + self$X <- X + } + + if (!is.null(obs)) { + self$obs <- obs + } + + if (!is.null(var)) { + self$var <- var + } + + if (!is.null(layers)) { + self$layers <- layers + } + + if (!is.null(obsm)) { + self$obsm <- obsm + } + + if (!is.null(varm)) { + self$varm <- varm + } + + if (!is.null(obsp)) { + self$obsp <- obsp + } + + if (!is.null(varp)) { + self$varp <- varp + } + + if (!is.null(uns)) { + self$uns <- uns + } + }, + + #' @description Number of observations in the AnnData object + n_obs = function() { + if (is.null(private$.n_obs)) { + private$.n_obs <- length(self$obs_names) + } + private$.n_obs + }, + + #' @description Number of variables in the AnnData object + n_vars = function() { + if (is.null(private$.n_vars)) { + private$.n_vars <- length(self$var_names) + } + private$.n_vars + } + ) +) + +#' Convert an AnnData object to an HDF5AnnData object +#' +#' This function takes an AnnData object and converts it to an HDF5AnnData +#' object, loading all fields into memory. +#' +#' @param adata An AnnData object to be converted to HDF5AnnData. +#' @param file The filename (character) of the `.h5ad` file. +#' @param compression The compression algorithm to use when writing the +#' HDF5 file. Can be one of `"none"`, `"gzip"` or `"lzf"`. Defaults to +#' `"none"`. +#' +#' @return An HDF5AnnData object with the same data as the input AnnData +#' object. +#' +#' @export +#' +#' @examples +#' ad <- AnnData( +#' X = matrix(1:5, 3L, 5L), +#' layers = list( +#' A = matrix(5:1, 3L, 5L), +#' B = matrix(letters[1:5], 3L, 5L) +#' ), +#' obs = data.frame(cell = 1:3), +#' var = data.frame(gene = 1:5), +#' obs_names = LETTERS[1:3], +#' var_names = letters[1:5] +#' ) +#' to_HDF5AnnData(ad, "test.h5ad") +#' # remove file +#' file.remove("test.h5ad") +to_HDF5AnnData <- function(adata, file, compression = c("none", "gzip", "lzf")) { # nolint + stopifnot( + inherits(adata, "AbstractAnnData") + ) + HDF5AnnData$new( + file = file, + X = adata$X, + obs = adata$obs, + var = adata$var, + obsm = adata$obsm, + varm = adata$varm, + obs_names = adata$obs_names, + var_names = adata$var_names, + layers = adata$layers, + obsp = adata$obsp, + varp = adata$varp, + uns = adata$uns, + compression = compression + ) +} diff --git a/R/read_zarr.R b/R/read_zarr.R new file mode 100644 index 00000000..38e1e365 --- /dev/null +++ b/R/read_zarr.R @@ -0,0 +1,46 @@ +#' Read Zarr +#' +#' Read data from a Zarr store +#' +#' @param path Path to the H5AD file to read +#' @param to The type of object to return. Must be one of: "InMemoryAnnData", +#' "HDF5AnnData", "SingleCellExperiment", "Seurat" +#' @param ... Extra arguments provided to [to_SingleCellExperiment()] or +#' [to_Seurat()] +#' +#' @return The object specified by `to` +#' @export +#' +#' @examples +#' h5ad_file <- system.file("extdata", "example.h5ad", package = "anndataR") +#' +#' # Read the H5AD as a SingleCellExperiment object +#' if (requireNamespace("SingleCellExperiment", quietly = TRUE)) { +#' sce <- read_zarr(h5ad_file, to = "SingleCellExperiment") +#' } +#' +#' # Read the H5AD as a Seurat object +#' if (requireNamespace("SeuratObject", quietly = TRUE)) { +#' seurat <- read_zarr(h5ad_file, to = "Seurat") +#' } +read_zarr <- function( + path, + to = c("InMemoryAnnData", "ZarrAnnData", "SingleCellExperiment", "Seurat"), + ...) { + to <- match.arg(to) + + adata <- ZarrAnnData$new(path) + + fun <- switch(to, + "SingleCellExperiment" = to_SingleCellExperiment, + "Seurat" = to_Seurat, + "InMemoryAnnData" = to_InMemoryAnnData, + "ZarrAnnData" = NULL + ) + + if (!is.null(fun)) { + fun(adata, ...) + } else { + adata + } +} diff --git a/R/read_zarr_helpers.R b/R/read_zarr_helpers.R new file mode 100644 index 00000000..17eeb1f3 --- /dev/null +++ b/R/read_zarr_helpers.R @@ -0,0 +1,499 @@ +#' Read H5AD encoding +#' +#' Read the encoding and version of an element in a H5AD file +#' +#' @param file Path to a H5AD file or an open H5AD handle +#' @param name Name of the element within the H5AD file +#' +#' @return A named list with names type and version +#' +#' @noRd +read_zarr_encoding <- function(store, name) { + g <- pizzarr::zarr_open_group(store, path = name) + attrs <- g$get_attrs()$to_list() + + if (!all(c("encoding-type", "encoding-version") %in% names(attrs))) { + path <- "TODO: get path from store" + stop( + "Encoding attributes not found for element '", name, "' ", + "in '", path, "'" + ) + } + + list( + type = attrs[["encoding-type"]], + version = attrs[["encoding-version"]] + ) +} + +#' Read H5AD element +#' +#' Read an element from a H5AD file +#' +#' @param file Path to a H5AD file or an open H5AD handle +#' @param name Name of the element within the H5AD file +#' @param type The encoding type of the element to read +#' @param version The encoding version of the element to read +#' @param stop_on_error Whether to stop on error or generate a warning instead +#' @param ... Extra arguments passed to individual reading functions +#' +#' @details +#' Encoding is automatically determined from the element using +#' `read_zarr_encoding` and used to select the appropriate reading function. +#' +#' @return Value depending on the encoding +#' +#' @noRd +read_zarr_element <- function(file, name, type = NULL, version = NULL, stop_on_error = FALSE, ...) { + if (is.null(type)) { + encoding_list <- read_zarr_encoding(file, name) + type <- encoding_list$type + version <- encoding_list$version + } + + read_fun <- switch(type, + "array" = read_zarr_dense_array, + "rec-array" = read_zarr_rec_array, + "csr_matrix" = read_zarr_csr_matrix, + "csc_matrix" = read_zarr_csc_matrix, + "dataframe" = read_zarr_data_frame, + "dict" = read_zarr_mapping, + "string" = read_zarr_string_scalar, + "numeric-scalar" = read_zarr_numeric_scalar, + "categorical" = read_zarr_categorical, + "string-array" = read_zarr_string_array, + "nullable-integer" = read_zarr_nullable_integer, + "nullable-boolean" = read_zarr_nullable_boolean, + stop( + "No function for reading H5AD encoding '", type, + "' for element '", name, "'" + ) + ) + + tryCatch( + { + read_fun(file = file, name = name, version = version, ...) + }, + error = function(e) { + message <- paste0( + "Error reading element '", name, "' of type '", type, "':\n", + conditionMessage(e) + ) + if (stop_on_error) { + stop(message) + } else { + warning(message) + return(NULL) + } + } + ) +} + +read_zarr_array <- function(store, name) { + zarr_arr <- pizzarr::zarr_open_array(store, path = name) + nested_arr <- zarr_arr$get_item("...") + return(nested_arr$data) +} + +#' Read H5AD dense array +#' +#' Read a dense array from an H5AD file +#' +#' @param file Path to a H5AD file or an open H5AD handle +#' @param name Name of the element within the H5AD file +#' @param version Encoding version of the element to read +#' +#' @return a matrix or a vector if 1D +#' +#' @noRd +read_zarr_dense_array <- function(store, name, version = "0.2.0") { + version <- match.arg(version) + + # Extract the NestedArray contents as a base R array. + darr <- read_zarr_array(store, name) + + # TODO: ideally, native = TRUE should take care of the row order and column order, + # but it doesn't + # If the dense array is a 1D matrix, convert to vector + if (any(dim(darr) == 1)) { + darr <- as.vector(darr) + } + darr +} + +read_zarr_csr_matrix <- function(file, name, version) { + read_zarr_sparse_array( + file = file, + name = name, + version = version, + type = "csr_matrix" + ) +} + +read_zarr_csc_matrix <- function(file, name, version) { + read_zarr_sparse_array( + file = file, + name = name, + version = version, + type = "csc_matrix" + ) +} + +#' Read H5AD sparse array +#' +#' Read a sparse array from an H5AD file +#' +#' @param file Path to a H5AD file or an open H5AD handle +#' @param name Name of the element within the H5AD file +#' @param version Encoding version of the element to read +#' @param type Type of the sparse matrix, either "csr_matrix" or "csc_matrix" +#' +#' @return a sparse matrix/DelayedArray???, or a vector if 1D +#' @importFrom Matrix sparseMatrix +#' +#' @noRd +read_zarr_sparse_array <- function(store, name, version = "0.1.0", + type = c("csr_matrix", "csc_matrix")) { + version <- match.arg(version) + type <- match.arg(type) + + g <- pizzarr::zarr_open_group(store, path = name) + + data <- as.vector(read_zarr_array(store, paste0(name, "/data"))) + indices <- as.vector(read_zarr_array(store, paste0(name, "/indices"))) + indptr <- as.vector(read_zarr_array(store, paste0(name, "/indptr"))) + shape <- as.vector(unlist(g$get_attrs()$to_list()$shape, use.names = FALSE)) + + if (type == "csc_matrix") { + mtx <- Matrix::sparseMatrix( + i = indices, + p = indptr, + x = data, + dims = shape, + repr = "C", + index1 = FALSE + ) + } else if (type == "csr_matrix") { + mtx <- Matrix::sparseMatrix( + j = indices, + p = indptr, + x = data, + dims = shape, + repr = "R", + index1 = FALSE + ) + } + + mtx +} + +#' Read H5AD recarray +#' +#' Read a recarray from an H5AD file +#' +#' @param file Path to a H5AD file or an open H5AD handle +#' @param name Name of the element within the H5AD file +#' @param version Encoding version of the element to read +#' +#' @details +#' A "record array" (recarray) is a Python NumPy array type that contains +#' "fields" that can be indexed using attributes (similar to columns in a +#' spreadsheet). See https://numpy.org/doc/stable/reference/generated/numpy.recarray.html +#' for details. +#' +#' They are used by **scanpy** to score marker gene testing results. +#' +#' @return a named list of 1D arrays +#' +#' @noRd +read_zarr_rec_array <- function(file, name, version = "0.2.0") { + version <- match.arg(version) + + rhdf5::h5read(file, name, compoundAsDataFrame = FALSE) +} + +#' Read H5AD nullable boolean +#' +#' Read a nullable boolean from an H5AD file +#' +#' @param file Path to a H5AD file or an open H5AD handle +#' @param name Name of the element within the H5AD file +#' @param version Encoding version of the element to read +#' +#' @return a boolean vector +#' +#' @noRd +read_zarr_nullable_boolean <- function(file, name, version = "0.1.0") { + as.logical(read_zarr_nullable(file, name, version)) +} + +#' Read H5AD nullable integer +#' +#' Read a nullable integer from an H5AD file +#' +#' @param file Path to a H5AD file or an open H5AD handle +#' @param name Name of the element within the H5AD file +#' @param version Encoding version of the element to read +#' +#' @return an integer vector +#' +#' @noRd +read_zarr_nullable_integer <- function(file, name, version = "0.1.0") { + as.integer(read_zarr_nullable(file, name, version)) +} + +#' Read H5AD nullable +#' +#' Read a nullable vector (boolean or integer) from an H5AD file +#' +#' @param file Path to a H5AD file or an open H5AD handle +#' @param name Name of the element within the H5AD file +#' @param version Encoding version of the element to read +#' +#' @return a nullable vector +#' +#' @noRd +read_zarr_nullable <- function(file, name, version = "0.1.0") { + version <- match.arg(version) + + element <- rhdf5::h5read(file, name) + + # Some versions of rhdf5 automatically apply mask, in which case + # there is no 'mask' element + if (!is.null(names(element))) { + # Get mask and convert to Boolean + mask <- as.logical(element[["mask"]]) + # Get values and set missing + element <- as.vector(element[["values"]]) + element[mask] <- NA + } + + return(element) +} + +#' Read H5AD string array +#' +#' Read a string array from an H5AD file +#' +#' @param file Path to a H5AD file or an open H5AD handle +#' @param name Name of the element within the H5AD file +#' @param version Encoding version of the element to read +#' +#' @return a character vector/matrix +#' +#' @noRd +read_zarr_string_array <- function(file, name, version = "0.2.0") { + version <- match.arg(version) + # reads in transposed + string_array <- rhdf5::h5read(file, name) + if (is.matrix(string_array)) { + string_array <- t(string_array) + } + + # If the array is 1D, convert to vector + if (length(dim(string_array)) == 1) { + string_array <- as.vector(string_array) + } + + string_array +} + +#' Read H5AD categorical +#' +#' Read a categorical from an H5AD file +#' +#' @param file Path to a H5AD file or an open H5AD handle +#' @param name Name of the element within the H5AD file +#' @param version Encoding version of the element to read +#' +#' @return a factor +#' +#' @noRd +read_zarr_categorical <- function(file, name, version = "0.2.0") { + version <- match.arg(version) + + element <- rhdf5::h5read(file, name) + + # Get codes and convert to 1-based indexing + codes <- element[["codes"]] + 1 + + if (!length(dim(codes)) == 1) { + stop("There is currently no support for multidimensional categorical arrays") + } + + # Set missing values + codes[codes == 0] <- NA + + levels <- element[["categories"]] + + attributes <- rhdf5::h5readAttributes(file, name) + ordered <- attributes[["ordered"]] + if (is.null(ordered) || is.na(ordered)) { + # This version of {rhdf5} doesn't yet support ENUM type attributes so we + # can't tell if the categorical should be ordered, + # see https://github.com/grimbough/rhdf5/issues/125 + warning( + "Unable to determine if categorical '", name, + "' is ordered, assuming it isn't" + ) + + ordered <- FALSE + } + + factor(codes, labels = levels, ordered = ordered) +} + +#' Read H5AD string scalar +#' +#' Read a string scalar from an H5AD file +#' +#' @param file Path to a H5AD file or an open H5AD handle +#' @param name Name of the element within the H5AD file +#' @param version Encoding version of the element to read +#' +#' @return a character vector of length 1 +#' +#' @noRd +read_zarr_string_scalar <- function(file, name, version = "0.2.0") { + version <- match.arg(version) + rhdf5::h5read(file, name) +} + +#' Read H5AD numeric scalar +#' +#' Read a numeric scalar from an H5AD file +#' +#' @param file Path to a H5AD file or an open H5AD handle +#' @param name Name of the element within the H5AD file +#' @param version Encoding version of the element to read +#' +#' @return a numeric vector of length 1 +#' +#' @noRd +read_zarr_numeric_scalar <- function(file, name, version = "0.2.0") { + version <- match.arg(version) + scalar <- rhdf5::h5read(file, name) + + # If the numeric vector is Boolean it gets read as a factor by {rhdf5} + if (is.factor(scalar)) { + scalar <- as.logical(scalar) + } + + return(scalar) +} + +#' Read H5AD mapping +#' +#' Read a mapping from an H5AD file +#' +#' @param file Path to a H5AD file or an open H5AD handle +#' @param name Name of the element within the H5AD file +#' @param version Encoding version of the element to read +#' +#' @return a named list +#' +#' @noRd +read_zarr_mapping <- function(file, name, version = "0.1.0") { + version <- match.arg(version) + groupname <- paste0("/", name) + + file_structure <- rhdf5::h5ls(file, recursive = TRUE) + columns <- file_structure[file_structure$group == groupname, "name"] + + read_zarr_collection(file, name, columns) +} + +#' Read H5AD data frame +#' +#' Read a data frame from an H5AD file +#' +#' @param file Path to a H5AD file or an open H5AD handle +#' @param name Name of the element within the H5AD file +#' @param version Encoding version of the element to read +#' @param include_index Whether or not to include the index as a column +#' +#' @details +#' If `include_index == TRUE` the index stored in the HDF5 file is added as a +#' column to output `data.frame` using the defined index name as the column +#' name and this is set as an attribute. If `include_index == FALSE` the index +#' is not provided in the output. In either case row names are not set. +#' +#' @return a data.frame +#' +#' @noRd +read_zarr_data_frame <- function(file, name, include_index = FALSE, + version = "0.2.0") { + version <- match.arg(version) + + attributes <- rhdf5::h5readAttributes(file, name) + index_name <- attributes$`_index` + column_order <- attributes$`column-order` + + columns <- read_zarr_collection(file, name, column_order) + + if (length(columns) == 0) { + index <- read_zarr_data_frame_index(file, name) + df <- data.frame(row.names = seq_along(index)) + } else { + df <- data.frame(columns) + } + + if (isTRUE(include_index)) { + index <- read_zarr_data_frame_index(file, name) + df <- cbind(index, df) + + # The default index name is not allowed as a column name so adjust it + if (index_name == "_index") { + index_name <- ".index" + colnames(df)[1] <- index_name + } + + attr(df, "_index") <- index_name # nolint + } + + df +} + +#' Read H5AD data frame index +#' +#' Read the index of a data frame from an H5AD file +#' +#' @param file Path to a H5AD file or an open H5AD handle +#' @param name Name of the element within the H5AD file +#' @param version Encoding version of the element to read +#' +#' @return an object containing the index +#' +#' @noRd +read_zarr_data_frame_index <- function(file, name, version = "0.2.0") { + version <- match.arg(version) + + attributes <- rhdf5::h5readAttributes(file, name) + index_name <- attributes$`_index` + + read_zarr_element(file, file.path(name, index_name)) +} + +#' Read multiple H5AD datatypes +#' +#' @param file Path to a H5AD file or an open H5AD handle +#' @param name Name of the element within the H5AD file +#' @param column_order Vector of item names (in order) +#' +#' @return a named list +#' +#' @noRd +read_zarr_collection <- function(file, name, column_order) { + columns <- list() + for (col_name in column_order) { + new_name <- paste0(name, "/", col_name) + encoding <- read_zarr_encoding(file, new_name) + columns[[col_name]] <- read_zarr_element( + file = file, + name = new_name, + type = encoding$type, + version = encoding$version + ) + } + columns +} diff --git a/R/write_zarr.R b/R/write_zarr.R new file mode 100644 index 00000000..327c2bb9 --- /dev/null +++ b/R/write_zarr.R @@ -0,0 +1,92 @@ +#' Write Zarr +#' +#' Write a Zarr store +#' +#' @param object The object to write, either a "SingleCellExperiment" or a +#' "Seurat" object +#' @param path Path of the file to write to +#' @param compression The compression algorithm to use when writing the +#' HDF5 file. Can be one of `"none"`, `"gzip"` or `"lzf"`. Defaults to +#' `"none"`. +#' +#' @return `path` invisibly +#' @export +#' +#' @examples +#' adata <- AnnData( +#' X = matrix(1:15, 3L, 5L), +#' layers = list( +#' A = matrix(15:1, 3L, 5L), +#' B = matrix(letters[1:15], 3L, 5L) +#' ), +#' obs = data.frame(cell = 1:3), +#' var = data.frame(gene = 1:5), +#' obs_names = LETTERS[1:3], +#' var_names = letters[1:5] +#' ) +#' h5ad_file <- tempfile(fileext = ".h5ad") +#' write_zarr(adata, h5ad_file) +#' +#' # Write a SingleCellExperiment as an H5AD +#' if (requireNamespace("SingleCellExperiment", quietly = TRUE)) { +#' ncells <- 100 +#' counts <- matrix(rpois(20000, 5), ncol = ncells) +#' logcounts <- log2(counts + 1) +#' +#' pca <- matrix(runif(ncells * 5), ncells) +#' tsne <- matrix(rnorm(ncells * 2), ncells) +#' +#' sce <- SingleCellExperiment::SingleCellExperiment( +#' assays = list(counts = counts, logcounts = logcounts), +#' reducedDims = list(PCA = pca, tSNE = tsne) +#' ) +#' +#' h5ad_file <- tempfile(fileext = ".h5ad") +#' write_zarr(sce, h5ad_file) +#' } +#' +#' # Write a Seurat as a H5AD +#' if (requireNamespace("SeuratObject", quietly = TRUE)) { +#' # TODO: uncomment this code when the seurat converter is fixed +#' # counts <- matrix(1:15, 3L, 5L) +#' # dimnames(counts) <- list( +#' # letters[1:3], +#' # LETTERS[1:5] +#' # ) +#' # gene.metadata <- data.frame( +#' # row.names = LETTERS[1:5], +#' # gene = 1:5 +#' # ) +#' # obj <- SeuratObject::CreateSeuratObject(counts, meta.data = gene.metadata) +#' # cell.metadata <- data.frame( +#' # row.names = letters[1:3], +#' # cell = 1:3 +#' # ) +#' # obj <- SeuratObject::AddMetaData(obj, cell.metadata) +#' # +#' # h5ad_file <- tempfile(fileext = ".h5ad") +#' # write_zarr(obj, h5ad_file) +#' } +write_zarr <- function(object, path, compression = c("none", "gzip", "lzf")) { + if (inherits(object, "SingleCellExperiment")) { + from_SingleCellExperiment( + object, + output_class = "ZarrAnnData", + file = path, + compression = compression + ) + } else if (inherits(object, "Seurat")) { + from_Seurat( + object, + output_class = "ZarrAnnData", + file = path, + compression = compression + ) + } else if (inherits(object, "AbstractAnnData")) { + to_ZarrAnnData(object, path, compression = compression) + } else { + stop("Unable to write object of class: ", class(object)) + } + + invisible(path) +} diff --git a/R/write_zarr_helpers.R b/R/write_zarr_helpers.R new file mode 100644 index 00000000..d0384ccf --- /dev/null +++ b/R/write_zarr_helpers.R @@ -0,0 +1,550 @@ +#' Write H5AD element +#' +#' Write an element to an H5AD file +#' +#' @param value The value to write +#' @param file Path to a H5AD file or an open H5AD handle +#' @param name Name of the element within the H5AD file +#' @param compression The compression to use when writing the element. Can be +#' one of `"none"`, `"gzip"` or `"lzf"`. Defaults to `"none"`. +#' #' @param stop_on_error Whether to stop on error or generate a warning instead +#' @param ... Additional arguments passed to writing functions +#' +#' @noRd +#' +#' @details +#' `write_zarr_element()` should always be used instead of any of the specific +#' writing functions as it contains additional boilerplate to make sure +#' elements are written correctly. +write_zarr_element <- function(value, file, name, compression = c("none", "gzip", "lzf"), stop_on_error = FALSE, ...) { # nolint + compression <- match.arg(compression) + + # Delete the path if it already exists + if (hdf5_path_exists(file, name)) { + rhdf5::h5delete(file, name) + } + + # Sparse matrices + write_fun <- + if (inherits(value, "sparseMatrix")) { # Sparse matrices + write_zarr_sparse_array + } else if (is.factor(value)) { # Categoricals + write_zarr_categorical + } else if (is.list(value)) { # Lists and data frames + if (is.data.frame(value)) { + write_zarr_data_frame + } else { + write_zarr_mapping + } + } else if (is.character(value)) { # Character values + if (length(value) == 1 && !is.matrix(value)) { + write_zarr_string_scalar + } else { + write_zarr_string_array + } + } else if (is.numeric(value) || inherits(value, "denseMatrix")) { # Numeric values + if (length(value) == 1 && !is.matrix(value)) { + write_zarr_numeric_scalar + } else if (is.integer(value) && any(is.na(value))) { + write_zarr_nullable_integer + } else { + write_zarr_dense_array + } + } else if (is.logical(value)) { # Logical values + if (any(is.na(value))) { + write_zarr_nullable_boolean + } else if (length(value) == 1) { + # Single Booleans should be written as numeric scalars + write_zarr_numeric_scalar + } else { + write_zarr_dense_array + } + } else { # Fail if unknown + stop("Writing '", class(value), "' objects to H5AD files is not supported") + } + + tryCatch( + { + write_fun(value = value, file = file, name = name, compression = compression, ...) + }, + error = function(e) { + message <- paste0( + "Could not write element '", name, "' of type '", class(value), "':\n", + conditionMessage(e) + ) + if (stop_on_error) { + stop(message) + } else { + warning(message) + return(NULL) + } + } + ) +} + +#' Write H5AD encoding +#' +#' Write H5AD encoding attributes to an element in an H5AD file +#' +#' @noRd +#' +#' @param file Path to a H5AD file or an open H5AD handle +#' @param name Name of the element within the H5AD file +#' @param encoding The encoding type to set +#' @param version The encoding version to set +write_zarr_encoding <- function(file, name, encoding, version) { + h5file <- rhdf5::H5Fopen(file) + on.exit(rhdf5::H5Fclose(h5file)) + + oid <- rhdf5::H5Oopen(h5file, name) + type <- rhdf5::H5Iget_type(oid) + rhdf5::H5Oclose(oid) + + if (type == "H5I_GROUP") { + h5obj <- rhdf5::H5Gopen(h5file, name) + on.exit(rhdf5::H5Gclose(h5obj), add = TRUE) + } else { + h5obj <- rhdf5::H5Dopen(h5file, name) + on.exit(rhdf5::H5Dclose(h5obj), add = TRUE) + } + + rhdf5::h5writeAttribute(encoding, h5obj, "encoding-type", asScalar = TRUE) # nolint + rhdf5::h5writeAttribute(version, h5obj, "encoding-version", asScalar = TRUE) # nolint +} + +#' Write H5AD dense array +#' +#' Write a dense array to an H5AD file +#' +#' @param value Value to write +#' @param file Path to a H5AD file or an open H5AD handle +#' @param name Name of the element within the H5AD file +#' @param compression The compression to use when writing the element. Can be +#' one of `"none"`, `"gzip"` or `"lzf"`. Defaults to `"none"`. +#' @param version Encoding version of the element to write +#' +#' @noRd +write_zarr_dense_array <- function(value, file, name, compression, version = "0.2.0") { + version <- match.arg(version) + + if (!is.vector(value)) { + # Transpose the value because writing with native=TRUE does not + # seem to work as expected + value <- t(value) + } + + hdf5_write_compressed(file, name, value, compression) + + # Write attributes + write_zarr_encoding(file, name, "array", version) +} + +#' Write H5AD sparse array +#' +#' Write a sparse array to an H5AD file +#' +#' @noRd +#' +#' @param value Value to write +#' @param file Path to a H5AD file or an open H5AD handle +#' @param name Name of the element within the H5AD file +#' @param compression The compression to use when writing the element. Can be +#' one of `"none"`, `"gzip"` or `"lzf"`. Defaults to `"none"`. +#' @param version Encoding version of the element to write +write_zarr_sparse_array <- function(value, file, name, compression, version = "0.1.0") { + version <- match.arg(version) + + # check types + stopifnot(inherits(value, "sparseMatrix")) + + if (inherits(value, "RsparseMatrix")) { + type <- "csr_matrix" + indices_attr <- "j" + } else if (inherits(value, "CsparseMatrix")) { + type <- "csc_matrix" + indices_attr <- "i" + } else { + stop( + "Unsupported matrix format in ", name, ".", + "Supported formats are RsparseMatrix and CsparseMatrix", + "(and objects that inherit from those)." + ) + } + + # Write sparse matrix + rhdf5::h5createGroup(file, name) + hdf5_write_compressed(file, paste0(name, "/indices"), attr(value, indices_attr), compression) + hdf5_write_compressed(file, paste0(name, "/indptr"), value@p, compression) + hdf5_write_compressed(file, paste0(name, "/data"), value@x, compression) + + # Add encoding + write_zarr_encoding(file, name, type, version) + + # Write shape attribute + h5file <- rhdf5::H5Fopen(file) + on.exit(rhdf5::H5Fclose(h5file)) + + h5obj <- rhdf5::H5Gopen(h5file, name) + on.exit(rhdf5::H5Gclose(h5obj), add = TRUE) + + rhdf5::h5writeAttribute(dim(value), h5obj, "shape") +} + +#' Write H5AD nullable boolean +#' +#' Write a nullable boolean to an H5AD file +#' +#' @noRd +#' +#' @param value Value to write +#' @param file Path to a H5AD file or an open H5AD handle +#' @param name Name of the element within the H5AD file +#' @param compression The compression to use when writing the element. Can be +#' one of `"none"`, `"gzip"` or `"lzf"`. Defaults to `"none"`. +#' @param version Encoding version of the element to write +write_zarr_nullable_boolean <- function(value, file, name, compression, version = "0.1.0") { + # write mask and values + rhdf5::h5createGroup(file, name) + value_no_na <- value + value_no_na[is.na(value_no_na)] <- FALSE + + hdf5_write_compressed(file, paste0(name, "/values"), value_no_na, compression) + hdf5_write_compressed(file, paste0(name, "/mask"), is.na(value), compression) + + # Write attributes + write_zarr_encoding(file, name, "nullable-boolean", version) +} + +#' Write H5AD nullable integer +#' +#' Write a nullable integer to an H5AD file +#' +#' @noRd +#' +#' @param value Value to write +#' @param file Path to a H5AD file or an open H5AD handle +#' @param name Name of the element within the H5AD file +#' @param compression The compression to use when writing the element. Can be +#' one of `"none"`, `"gzip"` or `"lzf"`. Defaults to `"none"`. +#' @param version Encoding version of the element to write +write_zarr_nullable_integer <- function(value, file, name, compression, version = "0.1.0") { + # write mask and values + rhdf5::h5createGroup(file, name) + value_no_na <- value + value_no_na[is.na(value_no_na)] <- -1L + + hdf5_write_compressed(file, paste0(name, "/values"), value_no_na, compression) + hdf5_write_compressed(file, paste0(name, "/mask"), is.na(value), compression) + + # Write attributes + write_zarr_encoding(file, name, "nullable-integer", version) +} + +#' Write H5AD string array +#' +#' Write a string array to an H5AD file +#' +#' @noRd +#' +#' @param value Value to write +#' @param file Path to a H5AD file or an open H5AD handle +#' @param name Name of the element within the H5AD file +#' @param compression The compression to use when writing the element. Can be +#' one of `"none"`, `"gzip"` or `"lzf"`. Defaults to `"none"`. +#' @param version Encoding version of the element to write +write_zarr_string_array <- function(value, file, name, compression, version = "0.2.0") { + rhdf5::h5write( + value, + file, + name, + variableLengthString = TRUE, + encoding = "UTF-8" + ) + + write_zarr_encoding(file, name, "string-array", version) +} + +#' Write H5AD categorical +#' +#' Write a categorical to an H5AD file +#' +#' @noRd +#' +#' @param value Value to write +#' @param file Path to a H5AD file or an open H5AD handle +#' @param name Name of the element within the H5AD file +#' @param compression The compression to use when writing the element. Can be +#' one of `"none"`, `"gzip"` or `"lzf"`. Defaults to `"none"`. +#' @param version Encoding version of the element to write +write_zarr_categorical <- function(value, file, name, compression, version = "0.2.0") { + rhdf5::h5createGroup(file, name) + hdf5_write_compressed(file, paste0(name, "/categories"), as.integer(levels(value)), compression) + hdf5_write_compressed(file, paste0(name, "/codes"), as.integer(value), compression) + hdf5_write_compressed(file, paste0(name, "/ordered"), is.ordered(value), compression) + + write_zarr_encoding(file, name, "categorical", version) +} + +#' Write H5AD string scalar +#' +#' Write a string scalar to an H5AD file +#' +#' @noRd +#' +#' @param value Value to write +#' @param file Path to a H5AD file or an open H5AD handle +#' @param name Name of the element within the H5AD file +#' @param compression The compression to use when writing the element. Can be +#' one of `"none"`, `"gzip"` or `"lzf"`. Defaults to `"none"`. +#' @param version Encoding version of the element to write +write_zarr_string_scalar <- function(value, file, name, compression, version = "0.2.0") { + # Write scalar + rhdf5::h5write( + value, + file, + name, + variableLengthString = TRUE, + encoding = "UTF-8" + ) + + # Write attributes + write_zarr_encoding(file, name, "string", version) +} + +#' Write H5AD numeric scalar +#' +#' Write a numeric scalar to an H5AD file +#' +#' @noRd +#' +#' @param value Value to write +#' @param file Path to a H5AD file or an open H5AD handle +#' @param name Name of the element within the H5AD file +#' @param compression The compression to use when writing the element. Can be +#' one of `"none"`, `"gzip"` or `"lzf"`. Defaults to `"none"`. +#' @param version Encoding version of the element to write +write_zarr_numeric_scalar <- function(value, file, name, compression, version = "0.2.0") { + # Write scalar + + hdf5_write_compressed(file, name, value, compression) + + # Write attributes + write_zarr_encoding(file, name, "numeric-scalar", version) +} + +#' Write H5AD mapping +#' +#' Write a mapping to an H5AD file +#' +#' @noRd +#' +#' @param value Value to write +#' @param file Path to a H5AD file or an open H5AD handle +#' @param name Name of the element within the H5AD file +#' @param compression The compression to use when writing the element. Can be +#' one of `"none"`, `"gzip"` or `"lzf"`. Defaults to `"none"`. +#' @param version Encoding version of the element to write +write_zarr_mapping <- function(value, file, name, compression, version = "0.1.0") { + rhdf5::h5createGroup(file, name) + + # Write mapping elements + for (key in names(value)) { + write_zarr_element(value[[key]], file, paste0(name, "/", key), compression) + } + + write_zarr_encoding(file, name, "dict", version) +} + +#' Write H5AD data frame +#' +#' Write a data frame to an H5AD file +#' +#' @noRd +#' +#' @param value Value to write +#' @param file Path to a H5AD file or an open H5AD handle +#' @param name Name of the element within the H5AD file +#' @param compression The compression to use when writing the element. Can be +#' one of `"none"`, `"gzip"` or `"lzf"`. Defaults to `"none"`. +#' @param index The index to write. Can either be a vector of length equal to +#' the number of rows in `values` or a single character string giving the name +#' of a column in `values`. If `NULL` then `rownames(value)` is used. +#' @param version Encoding version of the element to write +write_zarr_data_frame <- function(value, file, name, compression, index = NULL, + version = "0.2.0") { + rhdf5::h5createGroup(file, name) + write_zarr_encoding(file, name, "dataframe", version) + + if (is.null(index)) { + index_name <- "_index" + index_value <- rownames(value) + } else if (length(index) == nrow(value)) { + index_name <- "_index" + index_value <- index + } else if (length(index) == 1 && index %in% colnames(value)) { + index_name <- index + index_value <- value[[index_name]] + value[[index_name]] <- NULL + } else { + stop( + "index must be a vector with length `nrow(value)` or a single character", + "string giving the name of a column in `value`" + ) + } + + # Write index + write_zarr_data_frame_index(index_value, file, name, compression, index_name) + + # Write data frame columns + for (col in colnames(value)) { + write_zarr_element(value[[col]], file, paste0(name, "/", col), compression) + } + + # Write additional data frame attributes + h5file <- rhdf5::H5Fopen(file) + on.exit(rhdf5::H5Fclose(h5file)) + + h5obj <- rhdf5::H5Gopen(h5file, name) + on.exit(rhdf5::H5Gclose(h5obj), add = TRUE) + + col_order <- colnames(value) + col_order <- col_order[col_order != index_name] + # If there are no columns other than the index we set column order to an + # empty numeric vector + if (length(col_order) == 0) { + col_order <- numeric() + } + rhdf5::h5writeAttribute(col_order, h5obj, "column-order") # nolint +} + +#' Write H5AD data frame index +#' +#' Write an for a data frame to an H5AD file +#' +#' @noRd +#' +#' @param value Value to write. Must be a vector to the same length as the data +#' frame. +#' @param file Path to a H5AD file or an open H5AD handle +#' @param name Name of the element within the H5AD file containing the data +#' frame +#' @param compression The compression to use when writing the element. Can be +#' one of `"none"`, `"gzip"` or `"lzf"`. Defaults to `"none"`. +#' @param index_name Name of the data frame column storing the index +write_zarr_data_frame_index <- function(value, file, name, compression, index_name) { + if (!hdf5_path_exists(file, name)) { + stop("The data frame '", name, "' does not exist in '", file, "'") + } + + encoding <- read_h5ad_encoding(file, name) + if (encoding$type != "dataframe") { + stop("'", name, "' in '", file, "' is not a data frame") + } + + # Write index columns + write_zarr_element(value, file, paste0(name, "/", index_name)) + + # Write data frame index attribute + h5file <- rhdf5::H5Fopen(file) + on.exit(rhdf5::H5Fclose(h5file)) + + h5obj <- rhdf5::H5Gopen(h5file, name) + on.exit(rhdf5::H5Gclose(h5obj), add = TRUE) + + rhdf5::h5writeAttribute(index_name, h5obj, "_index", asScalar = TRUE) +} + +#' Write empty H5AD +#' +#' Write a new empty H5AD file +#' +#' @noRd +#' +#' @param file Path to the H5AD file to write +#' @param obs_names Vector containing observation names +#' @param var_names Vector containing variable names +#' @param compression The compression to use when writing the element. Can be +#' one of `"none"`, `"gzip"` or `"lzf"`. Defaults to `"none"`. +#' @param version The H5AD version to write +write_empty_h5ad <- function(file, obs_names, var_names, compression, version = "0.1.0") { + h5file <- rhdf5::H5Fcreate(file) + rhdf5::H5Fclose(h5file) + + write_zarr_encoding(file, "/", "anndata", "0.1.0") + + write_zarr_element(data.frame(row.names = obs_names), file, "/obs", compression) + write_zarr_element(data.frame(row.names = var_names), file, "/var", compression) + + rhdf5::h5createGroup(file, "layers") + write_zarr_encoding(file, "/layers", "dict", "0.1.0") + + rhdf5::h5createGroup(file, "obsm") + write_zarr_encoding(file, "/obsm", "dict", "0.1.0") + + rhdf5::h5createGroup(file, "obsp") + write_zarr_encoding(file, "/obsp", "dict", "0.1.0") + + rhdf5::h5createGroup(file, "uns") + write_zarr_encoding(file, "/uns", "dict", "0.1.0") + + rhdf5::h5createGroup(file, "varm") + write_zarr_encoding(file, "/varm", "dict", "0.1.0") + + rhdf5::h5createGroup(file, "varp") + write_zarr_encoding(file, "/varp", "dict", "0.1.0") +} + +#' HDF5 path exists +#' +#' Check that a path in HDF5 exists +#' +#' @noRd +#' +#' @param file Path to a HDF5 file +#' @param target_path The path within the file to test for +#' +#' @return Whether the `path` exists in `file` +hdf5_path_exists <- function(file, target_path) { + if (substr(target_path, 1, 1) != "/") { + target_path <- paste0("/", target_path) + } + + content <- rhdf5::h5ls(file) + + paths <- file.path(content$group, content$name) + paths <- gsub("//", "/", paths) # Remove double slash for root paths + + target_path %in% paths +} + +#' HDF5 write compressed +#' +#' Write HDF5 dataset with chosen compression (can be none) +#' +#' @noRd +#' +#' @param file Path to a HDF5 file +#' @param name Name of the element within the H5AD file containing the data +#' frame +#' @param value Value to write. Must be a vector to the same length as the data +#' frame. +#' @param compression The compression to use when writing the element. Can be +#' one of `"none"`, `"gzip"` or `"lzf"`. Defaults to `"none"`. +#' +#' @return Whether the `path` exists in `file` +hdf5_write_compressed <- function(file, name, value, compression = c("none", "gzip", "lzf")) { + compression <- match.arg(compression) + if (!is.null(dim(value))) { + dims <- dim(value) + } else { + dims <- length(value) + } + rhdf5::h5createDataset( + file, + name, + dims, + storage.mode = storage.mode(value), + filter = toupper(compression) + ) + rhdf5::h5write(value, file, name) +} diff --git a/inst/extdata/example.zarr/.zattrs b/inst/extdata/example.zarr/.zattrs new file mode 100644 index 00000000..82ba51b8 --- /dev/null +++ b/inst/extdata/example.zarr/.zattrs @@ -0,0 +1,4 @@ +{ + "encoding-type": "anndata", + "encoding-version": "0.1.0" +} \ No newline at end of file diff --git a/inst/extdata/example.zarr/.zgroup b/inst/extdata/example.zarr/.zgroup new file mode 100644 index 00000000..3b7daf22 --- /dev/null +++ b/inst/extdata/example.zarr/.zgroup @@ -0,0 +1,3 @@ +{ + "zarr_format": 2 +} \ No newline at end of file diff --git a/inst/extdata/example.zarr/X/.zattrs b/inst/extdata/example.zarr/X/.zattrs new file mode 100644 index 00000000..3cd60a64 --- /dev/null +++ b/inst/extdata/example.zarr/X/.zattrs @@ -0,0 +1,8 @@ +{ + "encoding-type": "csr_matrix", + "encoding-version": "0.1.0", + "shape": [ + 50, + 100 + ] +} \ No newline at end of file diff --git a/inst/extdata/example.zarr/X/.zgroup b/inst/extdata/example.zarr/X/.zgroup new file mode 100644 index 00000000..3b7daf22 --- /dev/null +++ b/inst/extdata/example.zarr/X/.zgroup @@ -0,0 +1,3 @@ +{ + "zarr_format": 2 +} \ No newline at end of file diff --git a/inst/extdata/example.zarr/X/data/.zarray b/inst/extdata/example.zarr/X/data/.zarray new file mode 100644 index 00000000..57e92110 --- /dev/null +++ b/inst/extdata/example.zarr/X/data/.zarray @@ -0,0 +1,20 @@ +{ + "chunks": [ + 4317 + ], + "compressor": { + "blocksize": 0, + "clevel": 5, + "cname": "lz4", + "id": "blosc", + "shuffle": 1 + }, + "dtype": "fN>LP|)mbPXEi;Y1$c#E2Tztu@L;}=gh>D48 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 literal 0 HcmV?d00001 diff --git a/inst/extdata/example.zarr/X/indices/.zarray b/inst/extdata/example.zarr/X/indices/.zarray new file mode 100644 index 00000000..6c23a901 --- /dev/null +++ b/inst/extdata/example.zarr/X/indices/.zarray @@ -0,0 +1,20 @@ +{ + "chunks": [ + 4317 + ], + "compressor": { + "blocksize": 0, + "clevel": 5, + "cname": "lz4", + "id": "blosc", + "shuffle": 1 + }, + "dtype": "LJ}ztuG;VpDTVfT)0ba3>Y-Rk+?h1suj-)A>SCk;cX+6iDMU_LTsWFCr}9 zABS4n4!(@;#L3QAf;->ScVREK%m0ln{{nJyDu;N)khg+FlSAplhW^4qB;D_xex6kj zMFDkJiV&e5((TLiC=!hYI|tM>2*p|rH6K2*i0`Y9pE$Y4%1cs$pI^NEoD-rO%7*5k z47kcgBALq6)a_F)lnP~6$(;uqq6*@@8rP)?c#)()XC|j+@*rJV0!p;gd|;2ZH`=ud z|3>C*=Gor9fcssz3os+-)Dq6aiyNw{z#WD^N@9stX=Lb{K9hs7)TL!zrdZmOY<+{OW0X^`k1^JW z=0Pqedh$s3=Ml?qN>;@%HN6OLQf{SdYPAUa*O>~$70^0EsamJZSte+16_^5@)}*|vsE6T(Ox10~vRUvQwFBXxRF;BQ^Q^=l48$@zOBr2VFM1U|+aQ9m&)>!LCuf%NHt$FU;OIkystjV|uNjWj0IpgfupR}~L1!i7>J4((f4h&qr z&t{eU8$$JNBDF1u8+V#{f@oH%9$B*FO)x)kYRyA|P;KoPM|~E#$60k?{}m-ZBC4ZS zaJ8|s)_VqLQ+#E60dMv6UdU=;NQSgkvG*mK63J(X*WDqB+R$oX0_6jD<-ms*g(++j zMHS^^7mkQ9o`LoK&_>jAWr>dJmD=lxOCe#0oJ}^Pi0xk{r_txMqt{gCXv{!5R2Tio?t~Y9`T_nniT$uy%5U{qh5jPN38n@~Y$i|HY|4;a^pe;}kMcks^XbMGk!pZd01!nZ-= ztiC|PoYL-HXI)i$N0@^e2yGBWC9Hm()3yYghu(L)t9gsvwZIp#>>oqsYqsAw_?q1! z5Mdnk+ge)J$Z;rp=B&=sA3F4H2utv^U9Lc@u2$6%z{9{(Pm4j@%ul_>!3QFdn}RRk zfV704bar(IL%G1$dU{nofAF-SDesiAbid j7Z(>dH#ZLt4=*n-A0Hn-Kfi#008k4911p1P0GI&)8fzT= literal 0 HcmV?d00001 diff --git a/inst/extdata/example.zarr/layers/.zattrs b/inst/extdata/example.zarr/layers/.zattrs new file mode 100644 index 00000000..a204673f --- /dev/null +++ b/inst/extdata/example.zarr/layers/.zattrs @@ -0,0 +1,4 @@ +{ + "encoding-type": "dict", + "encoding-version": "0.1.0" +} \ No newline at end of file diff --git a/inst/extdata/example.zarr/layers/.zgroup b/inst/extdata/example.zarr/layers/.zgroup new file mode 100644 index 00000000..3b7daf22 --- /dev/null +++ b/inst/extdata/example.zarr/layers/.zgroup @@ -0,0 +1,3 @@ +{ + "zarr_format": 2 +} \ No newline at end of file diff --git a/inst/extdata/example.zarr/layers/counts/.zattrs b/inst/extdata/example.zarr/layers/counts/.zattrs new file mode 100644 index 00000000..3cd60a64 --- /dev/null +++ b/inst/extdata/example.zarr/layers/counts/.zattrs @@ -0,0 +1,8 @@ +{ + "encoding-type": "csr_matrix", + "encoding-version": "0.1.0", + "shape": [ + 50, + 100 + ] +} \ No newline at end of file diff --git a/inst/extdata/example.zarr/layers/counts/.zgroup b/inst/extdata/example.zarr/layers/counts/.zgroup new file mode 100644 index 00000000..3b7daf22 --- /dev/null +++ b/inst/extdata/example.zarr/layers/counts/.zgroup @@ -0,0 +1,3 @@ +{ + "zarr_format": 2 +} \ No newline at end of file diff --git a/inst/extdata/example.zarr/layers/counts/data/.zarray b/inst/extdata/example.zarr/layers/counts/data/.zarray new file mode 100644 index 00000000..57e92110 --- /dev/null +++ b/inst/extdata/example.zarr/layers/counts/data/.zarray @@ -0,0 +1,20 @@ +{ + "chunks": [ + 4317 + ], + "compressor": { + "blocksize": 0, + "clevel": 5, + "cname": "lz4", + "id": "blosc", + "shuffle": 1 + }, + "dtype": "V-=F_%qV)P;sk$1k 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 literal 0 HcmV?d00001 diff --git a/inst/extdata/example.zarr/layers/csc_counts/.zattrs b/inst/extdata/example.zarr/layers/csc_counts/.zattrs new file mode 100644 index 00000000..ee83d73f --- /dev/null +++ b/inst/extdata/example.zarr/layers/csc_counts/.zattrs @@ -0,0 +1,8 @@ +{ + "encoding-type": "csc_matrix", + "encoding-version": "0.1.0", + "shape": [ + 50, + 100 + ] +} \ No newline at end of file diff --git a/inst/extdata/example.zarr/layers/csc_counts/.zgroup b/inst/extdata/example.zarr/layers/csc_counts/.zgroup new file mode 100644 index 00000000..3b7daf22 --- /dev/null +++ b/inst/extdata/example.zarr/layers/csc_counts/.zgroup @@ -0,0 +1,3 @@ +{ + "zarr_format": 2 +} \ No newline at end of file diff --git a/inst/extdata/example.zarr/layers/csc_counts/data/.zarray b/inst/extdata/example.zarr/layers/csc_counts/data/.zarray new file mode 100644 index 00000000..57e92110 --- /dev/null +++ b/inst/extdata/example.zarr/layers/csc_counts/data/.zarray @@ -0,0 +1,20 @@ +{ + "chunks": [ + 4317 + ], + "compressor": { + "blocksize": 0, + "clevel": 5, + "cname": "lz4", + "id": "blosc", + "shuffle": 1 + }, + "dtype": "~6#XmoC8xv=TGBQ~fBVG0`k$`kz1+I@ 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 bT!NV08xp_KrMho%h#B?!VgPEZi9 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 literal 0 HcmV?d00001 diff --git a/inst/extdata/example.zarr/layers/dense_counts/.zarray b/inst/extdata/example.zarr/layers/dense_counts/.zarray new file mode 100644 index 00000000..5812a4fc --- /dev/null +++ b/inst/extdata/example.zarr/layers/dense_counts/.zarray @@ -0,0 +1,22 @@ +{ + "chunks": [ + 50, + 100 + ], + "compressor": { + "blocksize": 0, + "clevel": 5, + "cname": "lz4", + "id": "blosc", + "shuffle": 1 + }, + "dtype": "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 H96$g7YBmby literal 0 HcmV?d00001 diff --git a/inst/extdata/example.zarr/obs/Int/.zarray b/inst/extdata/example.zarr/obs/Int/.zarray new file mode 100644 index 00000000..052f7298 --- /dev/null +++ b/inst/extdata/example.zarr/obs/Int/.zarray @@ -0,0 +1,20 @@ +{ + "chunks": [ + 50 + ], + "compressor": { + "blocksize": 0, + "clevel": 5, + "cname": "lz4", + "id": "blosc", + "shuffle": 1 + }, + "dtype": "B0%g6#Q!xI7@3$^SlQS)IJvlac=`AR1cih}M8(7@Vxs_ KaJTV~et7^Q3@ds7 literal 0 HcmV?d00001 diff --git a/inst/extdata/example.zarr/obs/leiden/.zattrs b/inst/extdata/example.zarr/obs/leiden/.zattrs new file mode 100644 index 00000000..198a2dde --- /dev/null +++ b/inst/extdata/example.zarr/obs/leiden/.zattrs @@ -0,0 +1,5 @@ +{ + "encoding-type": "categorical", + "encoding-version": "0.2.0", + "ordered": false +} \ No newline at end of file diff --git a/inst/extdata/example.zarr/obs/leiden/.zgroup b/inst/extdata/example.zarr/obs/leiden/.zgroup new file mode 100644 index 00000000..3b7daf22 --- /dev/null +++ b/inst/extdata/example.zarr/obs/leiden/.zgroup @@ -0,0 +1,3 @@ +{ + "zarr_format": 2 +} \ No newline at end of file diff --git a/inst/extdata/example.zarr/obs/leiden/categories/.zarray b/inst/extdata/example.zarr/obs/leiden/categories/.zarray new file mode 100644 index 00000000..d8bb08a4 --- /dev/null +++ b/inst/extdata/example.zarr/obs/leiden/categories/.zarray @@ -0,0 +1,24 @@ +{ + "chunks": [ + 6 + ], + "compressor": { + "blocksize": 0, + "clevel": 5, + "cname": "lz4", + "id": "blosc", + "shuffle": 1 + }, + "dtype": "|O", + "fill_value": 0, + "filters": [ + { + "id": "vlen-utf8" + } + ], + "order": "C", + "shape": [ + 6 + ], + "zarr_format": 2 +} \ No newline at end of file diff --git a/inst/extdata/example.zarr/obs/leiden/categories/.zattrs b/inst/extdata/example.zarr/obs/leiden/categories/.zattrs new file mode 100644 index 00000000..6e14470f --- /dev/null +++ b/inst/extdata/example.zarr/obs/leiden/categories/.zattrs @@ -0,0 +1,4 @@ +{ + "encoding-type": "string-array", + "encoding-version": "0.2.0" +} \ No newline at end of file diff --git a/inst/extdata/example.zarr/obs/leiden/categories/0 b/inst/extdata/example.zarr/obs/leiden/categories/0 new file mode 100644 index 0000000000000000000000000000000000000000..17067cd3e2b813316e5afbd82d35a0db8421ba76 GIT binary patch literal 50 mcmZQ#G-gy{U|;}YBOqo2Vn!e~01<{D!U#kdg9sB4VF~~)dI9MG literal 0 HcmV?d00001 diff --git a/inst/extdata/example.zarr/obs/leiden/codes/.zarray b/inst/extdata/example.zarr/obs/leiden/codes/.zarray new file mode 100644 index 00000000..146ad9f9 --- /dev/null +++ b/inst/extdata/example.zarr/obs/leiden/codes/.zarray @@ -0,0 +1,20 @@ +{ + "chunks": [ + 50 + ], + "compressor": { + "blocksize": 0, + "clevel": 5, + "cname": "lz4", + "id": "blosc", + "shuffle": 1 + }, + "dtype": "|i1", + "fill_value": 0, + "filters": null, + "order": "C", + "shape": [ + 50 + ], + "zarr_format": 2 +} \ No newline at end of file diff --git a/inst/extdata/example.zarr/obs/leiden/codes/.zattrs b/inst/extdata/example.zarr/obs/leiden/codes/.zattrs new file mode 100644 index 00000000..2b8d6d97 --- /dev/null +++ b/inst/extdata/example.zarr/obs/leiden/codes/.zattrs @@ -0,0 +1,4 @@ +{ + "encoding-type": "array", + "encoding-version": "0.2.0" +} \ No newline at end of file diff --git a/inst/extdata/example.zarr/obs/leiden/codes/0 b/inst/extdata/example.zarr/obs/leiden/codes/0 new file mode 100644 index 0000000000000000000000000000000000000000..2058b1c761ca14ec5292f78c45c92f64d2600fe1 GIT binary patch literal 66 ycmWm3u@S&948uT>6c=(f$o@lFF8)x!`gDNjU)Yig-MTASOvdkKCJKnSjfPx2M*%(n literal 0 HcmV?d00001 diff --git a/inst/extdata/example.zarr/obs/log1p_n_genes_by_counts/.zarray b/inst/extdata/example.zarr/obs/log1p_n_genes_by_counts/.zarray new file mode 100644 index 00000000..ea552896 --- /dev/null +++ b/inst/extdata/example.zarr/obs/log1p_n_genes_by_counts/.zarray @@ -0,0 +1,20 @@ +{ + "chunks": [ + 50 + ], + "compressor": { + "blocksize": 0, + "clevel": 5, + "cname": "lz4", + "id": "blosc", + "shuffle": 1 + }, + "dtype": "?5hHNm#lJu=d&d>*xSm)bgfK|zwB5Q*2!{8;Kv z?ASq}z>5b#iEiCI=s6L=gDcnvKfY>(zy7EIa5g<@0sx**KbEYF!ip)_02P0iK@rY7i-#@S=dG`WE-D2hJdesxaR zKXT)}ZkpQIwjj6Bh6BM;)p^TnQr zklz*|%i^}*$37fB_`M-U$m@w>#J>4)a7f)ai0f{ANLO(gv|`sS>%n2YPV41sS{^zt tWvi3AZrloj)%vS!{6{xPK+#vAatSV);E8TDXqo_^3U0*;xao`M{s6zOq3{3z literal 0 HcmV?d00001 diff --git a/inst/extdata/example.zarr/obs/log1p_total_counts/.zarray b/inst/extdata/example.zarr/obs/log1p_total_counts/.zarray new file mode 100644 index 00000000..457c7f42 --- /dev/null +++ b/inst/extdata/example.zarr/obs/log1p_total_counts/.zarray @@ -0,0 +1,20 @@ +{ + "chunks": [ + 50 + ], + "compressor": { + "blocksize": 0, + "clevel": 5, + "cname": "lz4", + "id": "blosc", + "shuffle": 1 + }, + "dtype": "|_`l zvyNQ+D)%+TPFQk}-9fHRU+vN*-+G5Vv%UL8+SbW;PuLcr@6TB~l9t-)6mNOHH+74E z^q%M4=^E*KQn!UYN`0Ugke+HA<~nKBiWMtYtzNNu&GJ<%S1ew>YRSq~E0(QUwtUU< mWh+;&Sh8}(nib2JuU-Y@u3Ecd`HEFbS2%zGD}!hNm;nHhp;z$$ literal 0 HcmV?d00001 diff --git a/inst/extdata/example.zarr/obs/n_genes_by_counts/.zarray b/inst/extdata/example.zarr/obs/n_genes_by_counts/.zarray new file mode 100644 index 00000000..76958648 --- /dev/null +++ b/inst/extdata/example.zarr/obs/n_genes_by_counts/.zarray @@ -0,0 +1,20 @@ +{ + "chunks": [ + 50 + ], + "compressor": { + "blocksize": 0, + "clevel": 5, + "cname": "lz4", + "id": "blosc", + "shuffle": 1 + }, + "dtype": "*}*Q##28n?}&DWU{Xsi)-zFv4~G@dCCZ6-xjB literal 0 HcmV?d00001 diff --git a/inst/extdata/example.zarr/obs/total_counts/.zarray b/inst/extdata/example.zarr/obs/total_counts/.zarray new file mode 100644 index 00000000..457c7f42 --- /dev/null +++ b/inst/extdata/example.zarr/obs/total_counts/.zarray @@ -0,0 +1,20 @@ +{ + "chunks": [ + 50 + ], + "compressor": { + "blocksize": 0, + "clevel": 5, + "cname": "lz4", + "id": "blosc", + "shuffle": 1 + }, + "dtype": "W&%nqK@L$8n+1@iC&^{>A#>c}>-PTLX&ClLA%FH&# l%FHFuNyptG!okKW)F;-;+&jU+%HBuM(HR6-8AJoX3;=0~6mI|k literal 0 HcmV?d00001 diff --git a/inst/extdata/example.zarr/obsm/.zattrs b/inst/extdata/example.zarr/obsm/.zattrs new file mode 100644 index 00000000..a204673f --- /dev/null +++ b/inst/extdata/example.zarr/obsm/.zattrs @@ -0,0 +1,4 @@ +{ + "encoding-type": "dict", + "encoding-version": "0.1.0" +} \ No newline at end of file diff --git a/inst/extdata/example.zarr/obsm/.zgroup b/inst/extdata/example.zarr/obsm/.zgroup new file mode 100644 index 00000000..3b7daf22 --- /dev/null +++ b/inst/extdata/example.zarr/obsm/.zgroup @@ -0,0 +1,3 @@ +{ + "zarr_format": 2 +} \ No newline at end of file diff --git a/inst/extdata/example.zarr/obsm/X_pca/.zarray b/inst/extdata/example.zarr/obsm/X_pca/.zarray new file mode 100644 index 00000000..e9dc91a2 --- /dev/null +++ b/inst/extdata/example.zarr/obsm/X_pca/.zarray @@ -0,0 +1,22 @@ +{ + "chunks": [ + 50, + 38 + ], + "compressor": { + "blocksize": 0, + "clevel": 5, + "cname": "lz4", + "id": "blosc", + "shuffle": 1 + }, + "dtype": "UfE>NWbb+JMMab{$|xCythiPs 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 K^s~SA{qaDiUc%h~ literal 0 HcmV?d00001 diff --git a/inst/extdata/example.zarr/obsp/.zattrs b/inst/extdata/example.zarr/obsp/.zattrs new file mode 100644 index 00000000..a204673f --- /dev/null +++ b/inst/extdata/example.zarr/obsp/.zattrs @@ -0,0 +1,4 @@ +{ + "encoding-type": "dict", + "encoding-version": "0.1.0" +} \ No newline at end of file diff --git a/inst/extdata/example.zarr/obsp/.zgroup b/inst/extdata/example.zarr/obsp/.zgroup new file mode 100644 index 00000000..3b7daf22 --- /dev/null +++ b/inst/extdata/example.zarr/obsp/.zgroup @@ -0,0 +1,3 @@ +{ + "zarr_format": 2 +} \ No newline at end of file diff --git a/inst/extdata/example.zarr/obsp/connectivities/.zattrs b/inst/extdata/example.zarr/obsp/connectivities/.zattrs new file mode 100644 index 00000000..ad72404f --- /dev/null +++ b/inst/extdata/example.zarr/obsp/connectivities/.zattrs @@ -0,0 +1,8 @@ +{ + "encoding-type": "csr_matrix", + "encoding-version": "0.1.0", + "shape": [ + 50, + 50 + ] +} \ No newline at end of file diff --git a/inst/extdata/example.zarr/obsp/connectivities/.zgroup b/inst/extdata/example.zarr/obsp/connectivities/.zgroup new file mode 100644 index 00000000..3b7daf22 --- /dev/null +++ b/inst/extdata/example.zarr/obsp/connectivities/.zgroup @@ -0,0 +1,3 @@ +{ + "zarr_format": 2 +} \ No newline at end of file diff --git a/inst/extdata/example.zarr/obsp/connectivities/data/.zarray b/inst/extdata/example.zarr/obsp/connectivities/data/.zarray new file mode 100644 index 00000000..88b4ddf1 --- /dev/null +++ b/inst/extdata/example.zarr/obsp/connectivities/data/.zarray @@ -0,0 +1,20 @@ +{ + "chunks": [ + 964 + ], + "compressor": { + "blocksize": 0, + "clevel": 5, + "cname": "lz4", + "id": "blosc", + "shuffle": 1 + }, + "dtype": "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 K+9(mcG5-%9a*(_L literal 0 HcmV?d00001 diff --git a/inst/extdata/example.zarr/obsp/connectivities/indices/.zarray b/inst/extdata/example.zarr/obsp/connectivities/indices/.zarray new file mode 100644 index 00000000..81f30d84 --- /dev/null +++ b/inst/extdata/example.zarr/obsp/connectivities/indices/.zarray @@ -0,0 +1,20 @@ +{ + "chunks": [ + 964 + ], + "compressor": { + "blocksize": 0, + "clevel": 5, + "cname": "lz4", + "id": "blosc", + "shuffle": 1 + }, + "dtype": "ECI@bPTYm7@NbWsaSA9Cf~0CxH<;t5Szc64d!5() zcnBgjtP69zFp8V5zmL@aq)?kNu)eZA>nDAT6dOWxh z5HK&c7lb)H^f=xRXknQ!PU@z`cx(^P;07o*U?v$~W?lt;+pugF#Th0}u=yYwb%O}| zV4HE-2;}_)Zn}P$x2GgizP1BMTx_`SzyaT|fYGk!heg!`17G;yq$F8|s*NO)wB-5R zr;E@YS}FYbk>QFY?+mHvy8Ypfy<8$6wN{K;htJ+Bhmfl))E{ zumu>y!fn|O0%N*~92`8tLT8=0y^&`uRpfPC9JHdwZ%N^({j@xjopqUrpVOFl!d(}F$$q{*Bx xFPmZHWdec-?_dkCh{3ecT4XoeW=-cPP%(tIY&PEHnh50me*gS}?}Yr%$v;|FaK-=t literal 0 HcmV?d00001 diff --git a/inst/extdata/example.zarr/obsp/connectivities/indptr/.zarray b/inst/extdata/example.zarr/obsp/connectivities/indptr/.zarray new file mode 100644 index 00000000..fab71faf --- /dev/null +++ b/inst/extdata/example.zarr/obsp/connectivities/indptr/.zarray @@ -0,0 +1,20 @@ +{ + "chunks": [ + 51 + ], + "compressor": { + "blocksize": 0, + "clevel": 5, + "cname": "lz4", + "id": "blosc", + "shuffle": 1 + }, + "dtype": "unM literal 0 HcmV?d00001 diff --git a/inst/extdata/example.zarr/obsp/distances/.zattrs b/inst/extdata/example.zarr/obsp/distances/.zattrs new file mode 100644 index 00000000..ad72404f --- /dev/null +++ b/inst/extdata/example.zarr/obsp/distances/.zattrs @@ -0,0 +1,8 @@ +{ + "encoding-type": "csr_matrix", + "encoding-version": "0.1.0", + "shape": [ + 50, + 50 + ] +} \ No newline at end of file diff --git a/inst/extdata/example.zarr/obsp/distances/.zgroup b/inst/extdata/example.zarr/obsp/distances/.zgroup new file mode 100644 index 00000000..3b7daf22 --- /dev/null +++ b/inst/extdata/example.zarr/obsp/distances/.zgroup @@ -0,0 +1,3 @@ +{ + "zarr_format": 2 +} \ No newline at end of file diff --git a/inst/extdata/example.zarr/obsp/distances/data/.zarray b/inst/extdata/example.zarr/obsp/distances/data/.zarray new file mode 100644 index 00000000..d9961d3e --- /dev/null +++ b/inst/extdata/example.zarr/obsp/distances/data/.zarray @@ -0,0 +1,20 @@ +{ + "chunks": [ + 700 + ], + "compressor": { + "blocksize": 0, + "clevel": 5, + "cname": "lz4", + "id": "blosc", + "shuffle": 1 + }, + "dtype": "lp-o(?Zj>^mZV#lG=PyT^@rl)!4na}6_?U^5r73E+n zk3on`y&XcM5khL1A0rCAe_y-^mVafV+6o}Bh_Q?$%ppz^Wf3+c4$Cqp$fC?+UXT!y zI01{ifZ&ov9*LOac~KN4K@`bdgdJIyupmgXAYhCoj0G9q@&bni#A5-Fv4kW7jxi6- zz<@+S7T}%4@rXmbAVR;uLytiEd4xnx6ks9_^D^QQ6iX5YiJZUzEeF*i$O7?_1Z?m| z;y8jR2^>VI%^j1VRK!kYI?Q4B#Zd6o3>!z!f5< zu>>|bNyfm*3oJYW&IutXpifl9z2sRFyqaio?w1|T9t z1XY{>e4t+jBNFBWP>jJK0uq@6&l1o>Ey9uncpw(Eh`=Eu2@Db!u*b?^G8AwEbaFgM1e0Jy0<|0#p%;a}LcI}F-p(UsGs*~1C$T`1389eVvq1YW1wq$>Oqx;~g+?d$GnDSI)$5 zzrcq5JG%W$9jOy6W~r3geyN~i`U_Q@Rp{>C2NzS?&v&j{ef_?5l-9FmHC zolEP^q_wp)cw+uiW4W>9vq=4m2a)DylvlFhiuN0q#LO9~t(``Sar-LV zU=@F(#>FO1Q~&f`zlTGyDqTbz+J+Q#1BI{MwI(A$k}bi0dPS^<;fL>UsyD8SUOq~#tcc52 z`!Z{&5@<4d|c=tO| z1<9MHAN5|LsPI2rzW9Ri@SOC)n5w3`$T{5A*2&-JspX%Av2Gr$)9>XY7diGdd%xf7 zS#!kEbnRBxArIZd#U9o*N0wK-z4G_C_&ST_XtBY!wtT_mQ2+FC-^C5NR*Y~saZKH` z0-5d4EFKZ^$J|NoWj$@Pl_f#ELr7lnjSKp;=T>i41}{v!u=+@zqu1kR#f|vzQwx8X z`Sy?EC#hn~&h#$n`vr5KcsHcXjAUVXaYm_BxOI=gjgQch88UA~=DoO_;k zt2jBZ%4SfXd23REO~2o=lmNetirQrVva|+;I9pHO(OsN&b|i#w0)-SCSc=9Q`XM~{tN?nO)L-y}YDxgOZ=`_h!+pLz6xDYaSm z=iv6=g8dxxz19fu{l1*UGFn!vX5q%rT9##X+7E-=Sw_t;j0PqRe=Nf)VQI&*G#cE< zYFV9*VWCO~OO|0+D1v?%@YPH4huSlUfQr)2DB=5Ae|=K2mr0#fNEh)?9dt&%Y>nR44?#8LrMtEu%uyE zq!Uy!kN~6AX-N<)y9&j@f8zczV(n}w%rf^8!&V{8Xsjs*hPFbC+6GaHhzdb0Jq5)x z8Wp2r+35)BkV1h_7wWfyG>4f$E=v;{Uv!qGAq${Wv2-~aupydgS_gxL3sTg940bQ- z9}B^ep5fHgG(4#xXOIv2G$a>@m1X>p1fE!ibi*06A_o5IL<G^p=J4y^JQM2)8~L+2wjkz(wes8=6B zzY0zZKs3AZGWWYtv57OI3z0`pck|l`O>L5`S6bxG>jGz`;hJW^QAAa_7 GWc(lIusRU{ literal 0 HcmV?d00001 diff --git a/inst/extdata/example.zarr/obsp/distances/indices/.zarray b/inst/extdata/example.zarr/obsp/distances/indices/.zarray new file mode 100644 index 00000000..b59e1319 --- /dev/null +++ b/inst/extdata/example.zarr/obsp/distances/indices/.zarray @@ -0,0 +1,20 @@ +{ + "chunks": [ + 700 + ], + "compressor": { + "blocksize": 0, + "clevel": 5, + "cname": "lz4", + "id": "blosc", + "shuffle": 1 + }, + "dtype": "x^5QJs0K^Pe!Y!F~53Br#75hpjvC3A~C)ZQT5Xge=1 zX*)&|o!Xo^G@8hy*=fC401GmO(?+ZhbXy0!h=u2O^^0&H(pYwWPB4B@#%XJe=Bop~V# zC5yWK`GExDsxf8PV;b*>@KwJ)BlpJvF{ z5Ea@V(Y?^(tJ*$rA-JW1!SBl=S&ap5VMJ!sHZI$zN6U?6n&0s#9^evFV*{eohQZpJmH<-# literal 0 HcmV?d00001 diff --git a/inst/extdata/example.zarr/uns/BoolNA/.zattrs b/inst/extdata/example.zarr/uns/BoolNA/.zattrs new file mode 100644 index 00000000..a643cd9f --- /dev/null +++ b/inst/extdata/example.zarr/uns/BoolNA/.zattrs @@ -0,0 +1,4 @@ +{ + "encoding-type": "nullable-boolean", + "encoding-version": "0.1.0" +} \ No newline at end of file diff --git a/inst/extdata/example.zarr/uns/BoolNA/.zgroup b/inst/extdata/example.zarr/uns/BoolNA/.zgroup new file mode 100644 index 00000000..3b7daf22 --- /dev/null +++ b/inst/extdata/example.zarr/uns/BoolNA/.zgroup @@ -0,0 +1,3 @@ +{ + "zarr_format": 2 +} \ No newline at end of file diff --git a/inst/extdata/example.zarr/uns/BoolNA/mask/.zarray b/inst/extdata/example.zarr/uns/BoolNA/mask/.zarray new file mode 100644 index 00000000..96a710dd --- /dev/null +++ b/inst/extdata/example.zarr/uns/BoolNA/mask/.zarray @@ -0,0 +1,20 @@ +{ + "chunks": [ + 3 + ], + "compressor": { + "blocksize": 0, + "clevel": 5, + "cname": "lz4", + "id": "blosc", + "shuffle": 1 + }, + "dtype": "|b1", + "fill_value": false, + "filters": null, + "order": "C", + "shape": [ + 3 + ], + "zarr_format": 2 +} \ No newline at end of file diff --git a/inst/extdata/example.zarr/uns/BoolNA/mask/.zattrs b/inst/extdata/example.zarr/uns/BoolNA/mask/.zattrs new file mode 100644 index 00000000..2b8d6d97 --- /dev/null +++ b/inst/extdata/example.zarr/uns/BoolNA/mask/.zattrs @@ -0,0 +1,4 @@ +{ + "encoding-type": "array", + "encoding-version": "0.2.0" +} \ No newline at end of file diff --git a/inst/extdata/example.zarr/uns/BoolNA/mask/0 b/inst/extdata/example.zarr/uns/BoolNA/mask/0 new file mode 100644 index 0000000000000000000000000000000000000000..53a4fe78f4c83099c5f2a4caad8942829976b375 GIT binary patch literal 19 WcmZQ#G-hOGU|;}YVIXE;U<3dJk^oWw literal 0 HcmV?d00001 diff --git a/inst/extdata/example.zarr/uns/BoolNA/values/.zarray b/inst/extdata/example.zarr/uns/BoolNA/values/.zarray new file mode 100644 index 00000000..96a710dd --- /dev/null +++ b/inst/extdata/example.zarr/uns/BoolNA/values/.zarray @@ -0,0 +1,20 @@ +{ + "chunks": [ + 3 + ], + "compressor": { + "blocksize": 0, + "clevel": 5, + "cname": "lz4", + "id": "blosc", + "shuffle": 1 + }, + "dtype": "|b1", + "fill_value": false, + "filters": null, + "order": "C", + "shape": [ + 3 + ], + "zarr_format": 2 +} \ No newline at end of file diff --git a/inst/extdata/example.zarr/uns/BoolNA/values/.zattrs b/inst/extdata/example.zarr/uns/BoolNA/values/.zattrs new file mode 100644 index 00000000..2b8d6d97 --- /dev/null +++ b/inst/extdata/example.zarr/uns/BoolNA/values/.zattrs @@ -0,0 +1,4 @@ +{ + "encoding-type": "array", + "encoding-version": "0.2.0" +} \ No newline at end of file diff --git a/inst/extdata/example.zarr/uns/BoolNA/values/0 b/inst/extdata/example.zarr/uns/BoolNA/values/0 new file mode 100644 index 0000000000000000000000000000000000000000..06ea1a1dd09cb65062a75ced2707cc33f870e89b GIT binary patch literal 19 WcmZQ#G-hOGU|;}YVIXE?U;qFFlmJoy literal 0 HcmV?d00001 diff --git a/inst/extdata/example.zarr/uns/Category/.zattrs b/inst/extdata/example.zarr/uns/Category/.zattrs new file mode 100644 index 00000000..198a2dde --- /dev/null +++ b/inst/extdata/example.zarr/uns/Category/.zattrs @@ -0,0 +1,5 @@ +{ + "encoding-type": "categorical", + "encoding-version": "0.2.0", + "ordered": false +} \ No newline at end of file diff --git a/inst/extdata/example.zarr/uns/Category/.zgroup b/inst/extdata/example.zarr/uns/Category/.zgroup new file mode 100644 index 00000000..3b7daf22 --- /dev/null +++ b/inst/extdata/example.zarr/uns/Category/.zgroup @@ -0,0 +1,3 @@ +{ + "zarr_format": 2 +} \ No newline at end of file diff --git a/inst/extdata/example.zarr/uns/Category/categories/.zarray b/inst/extdata/example.zarr/uns/Category/categories/.zarray new file mode 100644 index 00000000..eca134e7 --- /dev/null +++ b/inst/extdata/example.zarr/uns/Category/categories/.zarray @@ -0,0 +1,24 @@ +{ + "chunks": [ + 2 + ], + "compressor": { + "blocksize": 0, + "clevel": 5, + "cname": "lz4", + "id": "blosc", + "shuffle": 1 + }, + "dtype": "|O", + "fill_value": 0, + "filters": [ + { + "id": "vlen-utf8" + } + ], + "order": "C", + "shape": [ + 2 + ], + "zarr_format": 2 +} \ No newline at end of file diff --git a/inst/extdata/example.zarr/uns/Category/categories/.zattrs b/inst/extdata/example.zarr/uns/Category/categories/.zattrs new file mode 100644 index 00000000..6e14470f --- /dev/null +++ b/inst/extdata/example.zarr/uns/Category/categories/.zattrs @@ -0,0 +1,4 @@ +{ + "encoding-type": "string-array", + "encoding-version": "0.2.0" +} \ No newline at end of file diff --git a/inst/extdata/example.zarr/uns/Category/categories/0 b/inst/extdata/example.zarr/uns/Category/categories/0 new file mode 100644 index 0000000000000000000000000000000000000000..ce7b8ec266513862d56663b31342eae07e7e8f06 GIT binary patch literal 30 bcmZQ#G-l*uU|;}YIUr^NVn!fN1QAI94YdI| literal 0 HcmV?d00001 diff --git a/inst/extdata/example.zarr/uns/Category/codes/.zarray b/inst/extdata/example.zarr/uns/Category/codes/.zarray new file mode 100644 index 00000000..65b4e12d --- /dev/null +++ b/inst/extdata/example.zarr/uns/Category/codes/.zarray @@ -0,0 +1,20 @@ +{ + "chunks": [ + 3 + ], + "compressor": { + "blocksize": 0, + "clevel": 5, + "cname": "lz4", + "id": "blosc", + "shuffle": 1 + }, + "dtype": "|i1", + "fill_value": 0, + "filters": null, + "order": "C", + "shape": [ + 3 + ], + "zarr_format": 2 +} \ No newline at end of file diff --git a/inst/extdata/example.zarr/uns/Category/codes/.zattrs b/inst/extdata/example.zarr/uns/Category/codes/.zattrs new file mode 100644 index 00000000..2b8d6d97 --- /dev/null +++ b/inst/extdata/example.zarr/uns/Category/codes/.zattrs @@ -0,0 +1,4 @@ +{ + "encoding-type": "array", + "encoding-version": "0.2.0" +} \ No newline at end of file diff --git a/inst/extdata/example.zarr/uns/Category/codes/0 b/inst/extdata/example.zarr/uns/Category/codes/0 new file mode 100644 index 0000000000000000000000000000000000000000..1b302c17be6ace8bead0fc224aa208126fb2958d GIT binary patch literal 19 WcmZQ#G-hOGU|;}YVIXE;{0{&Hk^xZw literal 0 HcmV?d00001 diff --git a/inst/extdata/example.zarr/uns/DataFrameEmpty/.zattrs b/inst/extdata/example.zarr/uns/DataFrameEmpty/.zattrs new file mode 100644 index 00000000..7c9c5f99 --- /dev/null +++ b/inst/extdata/example.zarr/uns/DataFrameEmpty/.zattrs @@ -0,0 +1,6 @@ +{ + "_index": "_index", + "column-order": [], + "encoding-type": "dataframe", + "encoding-version": "0.2.0" +} \ No newline at end of file diff --git a/inst/extdata/example.zarr/uns/DataFrameEmpty/.zgroup b/inst/extdata/example.zarr/uns/DataFrameEmpty/.zgroup new file mode 100644 index 00000000..3b7daf22 --- /dev/null +++ b/inst/extdata/example.zarr/uns/DataFrameEmpty/.zgroup @@ -0,0 +1,3 @@ +{ + "zarr_format": 2 +} \ No newline at end of file diff --git a/inst/extdata/example.zarr/uns/DataFrameEmpty/_index/.zarray b/inst/extdata/example.zarr/uns/DataFrameEmpty/_index/.zarray new file mode 100644 index 00000000..acb06ecc --- /dev/null +++ b/inst/extdata/example.zarr/uns/DataFrameEmpty/_index/.zarray @@ -0,0 +1,24 @@ +{ + "chunks": [ + 50 + ], + "compressor": { + "blocksize": 0, + "clevel": 5, + "cname": "lz4", + "id": "blosc", + "shuffle": 1 + }, + "dtype": "|O", + "fill_value": 0, + "filters": [ + { + "id": "vlen-utf8" + } + ], + "order": "C", + "shape": [ + 50 + ], + "zarr_format": 2 +} \ No newline at end of file diff --git a/inst/extdata/example.zarr/uns/DataFrameEmpty/_index/.zattrs b/inst/extdata/example.zarr/uns/DataFrameEmpty/_index/.zattrs new file mode 100644 index 00000000..6e14470f --- /dev/null +++ b/inst/extdata/example.zarr/uns/DataFrameEmpty/_index/.zattrs @@ -0,0 +1,4 @@ +{ + "encoding-type": "string-array", + "encoding-version": "0.2.0" +} \ No newline at end of file diff --git a/inst/extdata/example.zarr/uns/DataFrameEmpty/_index/0 b/inst/extdata/example.zarr/uns/DataFrameEmpty/_index/0 new file mode 100644 index 0000000000000000000000000000000000000000..1c53ad11b01ba20402350e4066fd78884c1f15c0 GIT binary patch literal 269 zcma*iD-M7#5CqUE0z`uX)?*L^(U$VlT!2g92)75#R5d{m#Ouyv*ECVJY7-#H6;J}W z=@Vxs_ KaJTV~et7^Q3@ds7 literal 0 HcmV?d00001 diff --git a/inst/extdata/example.zarr/uns/Int/.zarray b/inst/extdata/example.zarr/uns/Int/.zarray new file mode 100644 index 00000000..82cf9225 --- /dev/null +++ b/inst/extdata/example.zarr/uns/Int/.zarray @@ -0,0 +1,20 @@ +{ + "chunks": [ + 3 + ], + "compressor": { + "blocksize": 0, + "clevel": 5, + "cname": "lz4", + "id": "blosc", + "shuffle": 1 + }, + "dtype": "H;I;Bsi@p^1x|kf<}j66iq_0QGV$IRF3v literal 0 HcmV?d00001 diff --git a/inst/extdata/example.zarr/uns/StringScalar/.zarray b/inst/extdata/example.zarr/uns/StringScalar/.zarray new file mode 100644 index 00000000..79c2b483 --- /dev/null +++ b/inst/extdata/example.zarr/uns/StringScalar/.zarray @@ -0,0 +1,10 @@ +{ + "chunks": [], + "compressor": null, + "dtype": ")H;$k2!0pcPc&IIB-AWjEj05Gru`2YX_ literal 0 HcmV?d00001 diff --git a/inst/extdata/example.zarr/uns/hvg/.zattrs b/inst/extdata/example.zarr/uns/hvg/.zattrs new file mode 100644 index 00000000..a204673f --- /dev/null +++ b/inst/extdata/example.zarr/uns/hvg/.zattrs @@ -0,0 +1,4 @@ +{ + "encoding-type": "dict", + "encoding-version": "0.1.0" +} \ No newline at end of file diff --git a/inst/extdata/example.zarr/uns/hvg/.zgroup b/inst/extdata/example.zarr/uns/hvg/.zgroup new file mode 100644 index 00000000..3b7daf22 --- /dev/null +++ b/inst/extdata/example.zarr/uns/hvg/.zgroup @@ -0,0 +1,3 @@ +{ + "zarr_format": 2 +} \ No newline at end of file diff --git a/inst/extdata/example.zarr/uns/hvg/flavor/.zarray b/inst/extdata/example.zarr/uns/hvg/flavor/.zarray new file mode 100644 index 00000000..9082ffb5 --- /dev/null +++ b/inst/extdata/example.zarr/uns/hvg/flavor/.zarray @@ -0,0 +1,10 @@ +{ + "chunks": [], + "compressor": null, + "dtype": "iE;!+?k0^&p9 literal 0 HcmV?d00001 diff --git a/inst/extdata/example.zarr/uns/leiden/params/resolution/.zarray b/inst/extdata/example.zarr/uns/leiden/params/resolution/.zarray new file mode 100644 index 00000000..7dd3880a --- /dev/null +++ b/inst/extdata/example.zarr/uns/leiden/params/resolution/.zarray @@ -0,0 +1,10 @@ +{ + "chunks": [], + "compressor": null, + "dtype": "9 literal 0 HcmV?d00001 diff --git a/inst/extdata/example.zarr/uns/pca/.zattrs b/inst/extdata/example.zarr/uns/pca/.zattrs new file mode 100644 index 00000000..a204673f --- /dev/null +++ b/inst/extdata/example.zarr/uns/pca/.zattrs @@ -0,0 +1,4 @@ +{ + "encoding-type": "dict", + "encoding-version": "0.1.0" +} \ No newline at end of file diff --git a/inst/extdata/example.zarr/uns/pca/.zgroup b/inst/extdata/example.zarr/uns/pca/.zgroup new file mode 100644 index 00000000..3b7daf22 --- /dev/null +++ b/inst/extdata/example.zarr/uns/pca/.zgroup @@ -0,0 +1,3 @@ +{ + "zarr_format": 2 +} \ No newline at end of file diff --git a/inst/extdata/example.zarr/uns/pca/params/.zattrs b/inst/extdata/example.zarr/uns/pca/params/.zattrs new file mode 100644 index 00000000..a204673f --- /dev/null +++ b/inst/extdata/example.zarr/uns/pca/params/.zattrs @@ -0,0 +1,4 @@ +{ + "encoding-type": "dict", + "encoding-version": "0.1.0" +} \ No newline at end of file diff --git a/inst/extdata/example.zarr/uns/pca/params/.zgroup b/inst/extdata/example.zarr/uns/pca/params/.zgroup new file mode 100644 index 00000000..3b7daf22 --- /dev/null +++ b/inst/extdata/example.zarr/uns/pca/params/.zgroup @@ -0,0 +1,3 @@ +{ + "zarr_format": 2 +} \ No newline at end of file diff --git a/inst/extdata/example.zarr/uns/pca/params/use_highly_variable/.zarray b/inst/extdata/example.zarr/uns/pca/params/use_highly_variable/.zarray new file mode 100644 index 00000000..576a0ab7 --- /dev/null +++ b/inst/extdata/example.zarr/uns/pca/params/use_highly_variable/.zarray @@ -0,0 +1,10 @@ +{ + "chunks": [], + "compressor": null, + "dtype": "|b1", + "fill_value": false, + "filters": null, + "order": "C", + "shape": [], + "zarr_format": 2 +} \ No newline at end of file diff --git a/inst/extdata/example.zarr/uns/pca/params/use_highly_variable/.zattrs b/inst/extdata/example.zarr/uns/pca/params/use_highly_variable/.zattrs new file mode 100644 index 00000000..f7b936f0 --- /dev/null +++ b/inst/extdata/example.zarr/uns/pca/params/use_highly_variable/.zattrs @@ -0,0 +1,4 @@ +{ + "encoding-type": "numeric-scalar", + "encoding-version": "0.2.0" +} \ No newline at end of file diff --git a/inst/extdata/example.zarr/uns/pca/params/use_highly_variable/0 b/inst/extdata/example.zarr/uns/pca/params/use_highly_variable/0 new file mode 100644 index 00000000..6b2aaa76 --- /dev/null +++ b/inst/extdata/example.zarr/uns/pca/params/use_highly_variable/0 @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/inst/extdata/example.zarr/uns/pca/params/zero_center/.zarray b/inst/extdata/example.zarr/uns/pca/params/zero_center/.zarray new file mode 100644 index 00000000..576a0ab7 --- /dev/null +++ b/inst/extdata/example.zarr/uns/pca/params/zero_center/.zarray @@ -0,0 +1,10 @@ +{ + "chunks": [], + "compressor": null, + "dtype": "|b1", + "fill_value": false, + "filters": null, + "order": "C", + "shape": [], + "zarr_format": 2 +} \ No newline at end of file diff --git a/inst/extdata/example.zarr/uns/pca/params/zero_center/.zattrs b/inst/extdata/example.zarr/uns/pca/params/zero_center/.zattrs new file mode 100644 index 00000000..f7b936f0 --- /dev/null +++ b/inst/extdata/example.zarr/uns/pca/params/zero_center/.zattrs @@ -0,0 +1,4 @@ +{ + "encoding-type": "numeric-scalar", + "encoding-version": "0.2.0" +} \ No newline at end of file diff --git a/inst/extdata/example.zarr/uns/pca/params/zero_center/0 b/inst/extdata/example.zarr/uns/pca/params/zero_center/0 new file mode 100644 index 00000000..6b2aaa76 --- /dev/null +++ b/inst/extdata/example.zarr/uns/pca/params/zero_center/0 @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/inst/extdata/example.zarr/uns/pca/variance/.zarray b/inst/extdata/example.zarr/uns/pca/variance/.zarray new file mode 100644 index 00000000..406b0ed2 --- /dev/null +++ b/inst/extdata/example.zarr/uns/pca/variance/.zarray @@ -0,0 +1,20 @@ +{ + "chunks": [ + 38 + ], + "compressor": { + "blocksize": 0, + "clevel": 5, + "cname": "lz4", + "id": "blosc", + "shuffle": 1 + }, + "dtype": "lV(M+)@(eV{a_-_wI_tQ`&Mejeb2o;391g1$H37${=FP$Pi!y F0swV9Lo@&Y literal 0 HcmV?d00001 diff --git a/inst/extdata/example.zarr/uns/pca/variance_ratio/.zarray b/inst/extdata/example.zarr/uns/pca/variance_ratio/.zarray new file mode 100644 index 00000000..406b0ed2 --- /dev/null +++ b/inst/extdata/example.zarr/uns/pca/variance_ratio/.zarray @@ -0,0 +1,20 @@ +{ + "chunks": [ + 38 + ], + "compressor": { + "blocksize": 0, + "clevel": 5, + "cname": "lz4", + "id": "blosc", + "shuffle": 1 + }, + "dtype": "+G6#FZg>uXIkz7uKG30 zC-=5x#YVUrX)6fxe0g-^+|Je0`rB#(45i;ZJ-=t^;wpW4_RdIK5MX7Huwi64U=0UW FRsequMw9>m literal 0 HcmV?d00001 diff --git a/inst/extdata/example.zarr/uns/rank_genes_groups/.zattrs b/inst/extdata/example.zarr/uns/rank_genes_groups/.zattrs new file mode 100644 index 00000000..a204673f --- /dev/null +++ b/inst/extdata/example.zarr/uns/rank_genes_groups/.zattrs @@ -0,0 +1,4 @@ +{ + "encoding-type": "dict", + "encoding-version": "0.1.0" +} \ No newline at end of file diff --git a/inst/extdata/example.zarr/uns/rank_genes_groups/.zgroup b/inst/extdata/example.zarr/uns/rank_genes_groups/.zgroup new file mode 100644 index 00000000..3b7daf22 --- /dev/null +++ b/inst/extdata/example.zarr/uns/rank_genes_groups/.zgroup @@ -0,0 +1,3 @@ +{ + "zarr_format": 2 +} \ No newline at end of file diff --git a/inst/extdata/example.zarr/uns/rank_genes_groups/logfoldchanges/.zarray b/inst/extdata/example.zarr/uns/rank_genes_groups/logfoldchanges/.zarray new file mode 100644 index 00000000..bf8818a1 --- /dev/null +++ b/inst/extdata/example.zarr/uns/rank_genes_groups/logfoldchanges/.zarray @@ -0,0 +1,45 @@ +{ + "chunks": [ + 100 + ], + "compressor": { + "blocksize": 0, + "clevel": 5, + "cname": "lz4", + "id": "blosc", + "shuffle": 1 + }, + "dtype": [ + [ + "0", + "XcAfv&{&NP$)}`A+lsiBqJRp>&QM6A-jY$GPZ1K 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 literal 0 HcmV?d00001 diff --git a/inst/extdata/example.zarr/uns/rank_genes_groups/params/groupby/.zarray b/inst/extdata/example.zarr/uns/rank_genes_groups/params/groupby/.zarray new file mode 100644 index 00000000..9082ffb5 --- /dev/null +++ b/inst/extdata/example.zarr/uns/rank_genes_groups/params/groupby/.zarray @@ -0,0 +1,10 @@ +{ + "chunks": [], + "compressor": null, + "dtype": "iE;!Ge;fwJ>}Gyozz0&)NV literal 0 HcmV?d00001 diff --git a/inst/extdata/example.zarr/uns/rank_genes_groups/params/method/.zarray b/inst/extdata/example.zarr/uns/rank_genes_groups/params/method/.zarray new file mode 100644 index 00000000..9082ffb5 --- /dev/null +++ b/inst/extdata/example.zarr/uns/rank_genes_groups/params/method/.zarray @@ -0,0 +1,10 @@ +{ + "chunks": [], + "compressor": null, + "dtype": "#~T8vq~R0%8CF literal 0 HcmV?d00001 diff --git a/inst/extdata/example.zarr/uns/rank_genes_groups/params/reference/.zarray b/inst/extdata/example.zarr/uns/rank_genes_groups/params/reference/.zarray new file mode 100644 index 00000000..8ebe55b8 --- /dev/null +++ b/inst/extdata/example.zarr/uns/rank_genes_groups/params/reference/.zarray @@ -0,0 +1,10 @@ +{ + "chunks": [], + "compressor": null, + "dtype": "iE;$k2!0b&3VQ~|#L literal 0 HcmV?d00001 diff --git a/inst/extdata/example.zarr/uns/rank_genes_groups/params/use_raw/.zarray b/inst/extdata/example.zarr/uns/rank_genes_groups/params/use_raw/.zarray new file mode 100644 index 00000000..576a0ab7 --- /dev/null +++ b/inst/extdata/example.zarr/uns/rank_genes_groups/params/use_raw/.zarray @@ -0,0 +1,10 @@ +{ + "chunks": [], + "compressor": null, + "dtype": "|b1", + "fill_value": false, + "filters": null, + "order": "C", + "shape": [], + "zarr_format": 2 +} \ No newline at end of file diff --git a/inst/extdata/example.zarr/uns/rank_genes_groups/params/use_raw/.zattrs b/inst/extdata/example.zarr/uns/rank_genes_groups/params/use_raw/.zattrs new file mode 100644 index 00000000..f7b936f0 --- /dev/null +++ b/inst/extdata/example.zarr/uns/rank_genes_groups/params/use_raw/.zattrs @@ -0,0 +1,4 @@ +{ + "encoding-type": "numeric-scalar", + "encoding-version": "0.2.0" +} \ No newline at end of file diff --git a/inst/extdata/example.zarr/uns/rank_genes_groups/params/use_raw/0 b/inst/extdata/example.zarr/uns/rank_genes_groups/params/use_raw/0 new file mode 100644 index 0000000000000000000000000000000000000000..f76dd238ade08917e6712764a16a22005a50573d GIT binary patch literal 1 IcmZPo000310RR91 literal 0 HcmV?d00001 diff --git a/inst/extdata/example.zarr/uns/rank_genes_groups/pvals/.zarray b/inst/extdata/example.zarr/uns/rank_genes_groups/pvals/.zarray new file mode 100644 index 00000000..c277dff3 --- /dev/null +++ b/inst/extdata/example.zarr/uns/rank_genes_groups/pvals/.zarray @@ -0,0 +1,45 @@ +{ + "chunks": [ + 100 + ], + "compressor": { + "blocksize": 0, + "clevel": 5, + "cname": "lz4", + "id": "blosc", + "shuffle": 1 + }, + "dtype": [ + [ + "0", + "T2-r7>7cD$Rg@aFDYa_v+G^D%R%#_8tsRnB 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 KC3`fHHU9_8H4DN3 literal 0 HcmV?d00001 diff --git a/inst/extdata/example.zarr/uns/rank_genes_groups/scores/.zarray b/inst/extdata/example.zarr/uns/rank_genes_groups/scores/.zarray new file mode 100644 index 00000000..bf8818a1 --- /dev/null +++ b/inst/extdata/example.zarr/uns/rank_genes_groups/scores/.zarray @@ -0,0 +1,45 @@ +{ + "chunks": [ + 100 + ], + "compressor": { + "blocksize": 0, + "clevel": 5, + "cname": "lz4", + "id": "blosc", + "shuffle": 1 + }, + "dtype": [ + [ + "0", + "<|K2><{S2mk;S0002{2LJ&6|0W@e>3#_GI~1 zf`1$4g}oHgy|jW#Xr87zG`bSd5)jj9qp`asu6_+@5*BhqP z`T7C{1j+~^l&ei4!3J(w@Dr!JLKtMo1KtDe}KR*Qk96kX6{|Y@lJv_a=y}iD^ zzP`S`zP`S`zP`V|zrVi)00I)g0RaF1BWZQyGk3^ul_*J*Zd$TmM9pnYVX95kgy18oLI---0?NdN167?2v zt_I15(q@NNqwGbKx;#sljg*W?LmB(_@9pT-#>mi*Wc;{6)!qVXFxzeKtPKD0SN*C7Cr$03y}d2h5-Nv0ssP#0ssFViI)HUD-hcE zl`|9MWf4J=;Tt+oU~}mdCXV0f8TL?N?-lYm+(SyD6N@zWCjEOc$S4>PJ!~q$dkgfcKvLFn-0x)yd;IYe z9!Nq3?UNUR#-aj6zD&G$3Zgbr~~MMg;>>J_e$19+h6apUA^UxKVSd`7m*Xp z61Q#{?ZfZj$A}Lg+rdhy=t7kC;SbW2?ZjmHJyuWvS?5EFnKKe_heXjDxlcuRkZ@~e zSa=SJ?#vpHW@ zS^%KgYs>4?>G?`WIw>L<5)B9f`1J7Rhj(>#T3S;{JvK5b8Up6c zwXl$eg;YE4&ccqffB}Z6)7=SiiJ7Rq$IJ-~4iOqCDk>{VQGJ7zmz|!WvBS;J*V*Fo z{s<;4gs+YP0RjL4d;t#v00se#0RRF30FeQ4JUhL;y}iAQ0S~bR3J|}K0rLMJz?N>Z zZjy%tp&p-wfZ=6K2q8|LzmO573fqMfFHp`VOcMLd!vWZg&K=Dzkq9*w&&ANKj^`mm zw{CqffslqRT+srte4~A)o}@MHCq&WM>K)NcEWKS=V%R78;E;}JqQh& zr~fI7B|s_yT4;h(RiFnxl-V_VS#QWI$!&fjhNfWdAAw-!;5;8F+lXFIOGqmu8}r=L z%fi9Fy12HrshyIKifv$1N<}|BIyNvN7ZU~p_Ug2ejDtiB3B8;^Ms(BYQB`eqj+~>g zzro++_8TH5EHE@XQd@F+eSUt2jgOO;o1>(t%IW(14kkviKa2qnjsXo2KZ*eX0swJ6 zJw3a%YSgX;HX2|t0ixWkR+ zfh-prSD6Zvc1eEo-0-U)Y{GHW1$#CuRQH5`PgDqjeP_``hIPmShN(6JKoa{CneAUX za;Jboie(t0(BQr_M|y_#>L)p(n?3)d>@kXHza<2XY&z^`SLchK)fW6nKcF*w>FaM$ zB69jU)&Puo(BFcDbF;spFIm~v^OxV7q}LjaCNjR64y01q1j1_q4*Og=q5z0L;#0sst$0R;j8P`|&xz`)o5$=(0} literal 0 HcmV?d00001 diff --git a/inst/extdata/example.zarr/uns/umap/.zattrs b/inst/extdata/example.zarr/uns/umap/.zattrs new file mode 100644 index 00000000..a204673f --- /dev/null +++ b/inst/extdata/example.zarr/uns/umap/.zattrs @@ -0,0 +1,4 @@ +{ + "encoding-type": "dict", + "encoding-version": "0.1.0" +} \ No newline at end of file diff --git a/inst/extdata/example.zarr/uns/umap/.zgroup b/inst/extdata/example.zarr/uns/umap/.zgroup new file mode 100644 index 00000000..3b7daf22 --- /dev/null +++ b/inst/extdata/example.zarr/uns/umap/.zgroup @@ -0,0 +1,3 @@ +{ + "zarr_format": 2 +} \ No newline at end of file diff --git a/inst/extdata/example.zarr/uns/umap/params/.zattrs b/inst/extdata/example.zarr/uns/umap/params/.zattrs new file mode 100644 index 00000000..a204673f --- /dev/null +++ b/inst/extdata/example.zarr/uns/umap/params/.zattrs @@ -0,0 +1,4 @@ +{ + "encoding-type": "dict", + "encoding-version": "0.1.0" +} \ No newline at end of file diff --git a/inst/extdata/example.zarr/uns/umap/params/.zgroup b/inst/extdata/example.zarr/uns/umap/params/.zgroup new file mode 100644 index 00000000..3b7daf22 --- /dev/null +++ b/inst/extdata/example.zarr/uns/umap/params/.zgroup @@ -0,0 +1,3 @@ +{ + "zarr_format": 2 +} \ No newline at end of file diff --git a/inst/extdata/example.zarr/uns/umap/params/a/.zarray b/inst/extdata/example.zarr/uns/umap/params/a/.zarray new file mode 100644 index 00000000..6b8bc7b7 --- /dev/null +++ b/inst/extdata/example.zarr/uns/umap/params/a/.zarray @@ -0,0 +1,10 @@ +{ + "chunks": [], + "compressor": null, + "dtype": "6|nj#pabyb`#)W|YC6B3_s4B4)08=tY0GpG+7Hm7fsT|K9P<8xqZwQDh9?AU~4IOVY|0?GNO7m9t literal 0 HcmV?d00001 diff --git a/inst/extdata/example.zarr/var/_index/.zarray b/inst/extdata/example.zarr/var/_index/.zarray new file mode 100644 index 00000000..bfa845d9 --- /dev/null +++ b/inst/extdata/example.zarr/var/_index/.zarray @@ -0,0 +1,24 @@ +{ + "chunks": [ + 100 + ], + "compressor": { + "blocksize": 0, + "clevel": 5, + "cname": "lz4", + "id": "blosc", + "shuffle": 1 + }, + "dtype": "|O", + "fill_value": 0, + "filters": [ + { + "id": "vlen-utf8" + } + ], + "order": "C", + "shape": [ + 100 + ], + "zarr_format": 2 +} \ No newline at end of file diff --git a/inst/extdata/example.zarr/var/_index/.zattrs b/inst/extdata/example.zarr/var/_index/.zattrs new file mode 100644 index 00000000..6e14470f --- /dev/null +++ b/inst/extdata/example.zarr/var/_index/.zattrs @@ -0,0 +1,4 @@ +{ + "encoding-type": "string-array", + "encoding-version": "0.2.0" +} \ No newline at end of file diff --git a/inst/extdata/example.zarr/var/_index/0 b/inst/extdata/example.zarr/var/_index/0 new file mode 100644 index 0000000000000000000000000000000000000000..0e7d0ff437db0698e39d67a1750d4d565a4425e7 GIT binary patch literal 469 zcma*kArgZy6a>&shiOG*>Gzl_L=plaC%|$Du-uSi^eX5sDl-V?i#LCFvMvwPn7IN@ zKLgYNcHX01m|irk+v=Pv(U%xX>`IIY(l?O7LK2M@pKS5S{3cy8=b&MW>RuxoVO dX+-WcdhRp^?lcm28Y6canY$ZrzRmorod3aUQ3(J5 literal 0 HcmV?d00001 diff --git a/inst/extdata/example.zarr/var/dispersions/.zarray b/inst/extdata/example.zarr/var/dispersions/.zarray new file mode 100644 index 00000000..6f4beac3 --- /dev/null +++ b/inst/extdata/example.zarr/var/dispersions/.zarray @@ -0,0 +1,20 @@ +{ + "chunks": [ + 100 + ], + "compressor": { + "blocksize": 0, + "clevel": 5, + "cname": "lz4", + "id": "blosc", + "shuffle": 1 + }, + "dtype": "2-qe^HWnDgxEX5m*2to*9rontz-CGnAIr@A^Q_L_Kx~T;`4H@|~L0=GWy{ zEf^!+qQX)6_(g@Dv>m!CJ+SiM@PH;@QMnaj0-6s}5vZ-lFdNpaXS|0HqXw8Wq7IyN zL+xtSPt&0!*J6L1fao@oSI`Yck}g7$uYTwBQ3@wbii>O1TzEZg`~#)t`Iq^Y zbsHsiOOKs%Nccg0vni3(^=JYj)G-DR{nFkVAApm5 z8RvB5PVdO4JuYAT_k^^!oC=s7oPp}GmP6lpb`h5{%@d9>EsTbV=i~;5sf2SQX!h#7 zonp;fwz>x;sEJQ? zai8SYh+gL_o<0QkMRH<|I;si>G7ZRgMd}4I7C$l>FOfYaQ$VJQLA2*TXT|eb%sU@( zi_1K=xXd6+Fv7UMQu&s3eB9}?UXx5VVDU~<;5&AURXhyXuJDp)(EW2L)F|T+LXKbq zx*yt+Veent!}~MtbV?2Y(t{M6I)0qKVYY3lc#*U5?_3;wj%LdXqy9nD+3OJ??_0P- z{07ed#0AZcf&`sr`oUC2=EB4_PBy~V^a-{M5l{M=%t4NN@c%|(u1A^?GEzlkJdaOa z-be?~y6P*^_Yp|H#Mi{f&(hS}$e=mm&cCmh$IZ>Qx6;th*wN0(*Q&Ct$l$_<)3Kt? z+q%EDz?0S0#lqFcyQiDByKB3|%g)u)*SvMV+Oo9M&yu#o!pYM$v%{X!*4?_bz1E-7 zgUPzU!?V^uKR-V|zdygfzrR1fzdt{}zdt{}Kfgb}Kfgb}KR-Ve00JTa0|x*AGyoC5 h1ONdO000R91S|jm695oDEC2uz0D!+gzdygfzds|^jp+aY literal 0 HcmV?d00001 diff --git a/inst/extdata/example.zarr/var/dispersions_norm/.zarray b/inst/extdata/example.zarr/var/dispersions_norm/.zarray new file mode 100644 index 00000000..788682bc --- /dev/null +++ b/inst/extdata/example.zarr/var/dispersions_norm/.zarray @@ -0,0 +1,20 @@ +{ + "chunks": [ + 100 + ], + "compressor": { + "blocksize": 0, + "clevel": 5, + "cname": "lz4", + "id": "blosc", + "shuffle": 1 + }, + "dtype": "McLuO_o2u#3R369*;l4 zE^)uOBdNb!szJUoHi^F)(FH#x9s|JnCmg?qKY2d9IZHnP0DwPbVUEAkX?s6&WQ0HH z-@m>xF@U~ZzFWWZ1T{Zg3f;b6qpv>z0DwQlTIN52ZN9$zxXeG&us}bG{!~9P)?+{5 zNUgtHe8In~>uEoOw_m<0?pnX~XxqKI5 zhFibk{E@$+)mXorC=@^N=ioaR1iL@Y<$OI3+WNnZs82m+y%TB#A*|MJ!34h2z{w~r)vg9dV_ENBcZ8Rmz`(!DZCU3WMSm;yhh C>;anq literal 0 HcmV?d00001 diff --git a/inst/extdata/example.zarr/var/log1p_mean_counts/.zarray b/inst/extdata/example.zarr/var/log1p_mean_counts/.zarray new file mode 100644 index 00000000..788682bc --- /dev/null +++ b/inst/extdata/example.zarr/var/log1p_mean_counts/.zarray @@ -0,0 +1,20 @@ +{ + "chunks": [ + 100 + ], + "compressor": { + "blocksize": 0, + "clevel": 5, + "cname": "lz4", + "id": "blosc", + "shuffle": 1 + }, + "dtype": "h9cQXy0_8BB*Pb<(MWN?RIii?1(!MiUbgv?vuM z;3AO_+&jEQGr71HgyPo04243l+Jocn$am^*`v~IT^_#QDCvT{y*|SxgOO=hm1F zsxeLlaMCdj8ZtCX4G7r;mx5%H25oz}++8lZRLEQ? zBpp)y0a=5HNcUnh1ezsVjL`?*dyfZir*^mtYYg+pWyK!DFvnGv2FR6}z#DPz{^l!8 znk&A(hIdV48)c1576!5y7@=ftrpn@_n`-k?DWq4)KhT#7lXeOdv{Y4NJ&#p|d8w*b zx*2v-Ndo0OZS^}|q57WbtIBDgZTaT%{inY1wCVL@SNPO?P!=DB&Mx#+@)2!6~GZ*H!1tHz%tZoHC!A=$g!jV{l9cp|pt8 zA&77YB~Xzn0aJ=br&tS!_CGIS0YwU=);| zBUz9~D6W*0yi;fiZ3Ng21jfk@pjED}nS&;uHVSBbdrY|c{(wo5!pLQRDZ zSx%IzMJi-4poN^@F>hYzloCx6HA!r)*Vue(&AOAep#jZ$_z_pKvzQfzb!hgNb*<-0 z&Fe9sx+WcSZ5bH%5g5xaOZDnXnN>Y||N355=Hlt&`AzB8%WHeQud6=l?e;p~-Hw4P se>n6vZq|1E=5F{?lm8kX06GSY;mG&T0NQ{YXzu|G02%PGEpI-40cm%oasU7T literal 0 HcmV?d00001 diff --git a/inst/extdata/example.zarr/var/means/.zarray b/inst/extdata/example.zarr/var/means/.zarray new file mode 100644 index 00000000..6f4beac3 --- /dev/null +++ b/inst/extdata/example.zarr/var/means/.zarray @@ -0,0 +1,20 @@ +{ + "chunks": [ + 100 + ], + "compressor": { + "blocksize": 0, + "clevel": 5, + "cname": "lz4", + "id": "blosc", + "shuffle": 1 + }, + "dtype": "CVr_ z1H(<3LoU9O1?z^Rp{3mtTxFIxSQomT`arn56aj%dE~uS0f1Cvj2qcR0AQt4FOK?Y5b4nu*gYEL>#6=!@w; zSa^QAi4sTtnwSsQus%fj#xq>1rUPt0dkT^@H!h~g*nd?HEu4;LvB9{P&AcK*(F(I` zkiSa?MrvM9=iBeCgP%j}J4wzSQ<UH z$yqZq@~pHRDOUU%q?#}Xs}#+nKzAMQ&h&kRRbzsdop@SI#$8qKKCS@C=v8tTjtm@) zOb>i}P)Zqp9SB_2qMONzN#x_Nb2*i5ZYd{VSwa4mBJg$$)|My9v@;KyjE>dl%o~o% zg|akfhf8`v_Md_A@$&ES@bd2Q@$m8S@bdBO@$m2R@bK;N^7HcY@bU5S@bK{P@$T{Q z@$vKW^6~QV@$vHU@$vBR^6>KU@bL2R@$m2P@$m5S@a^#K@9^>Q?(gyK^6~KU@$&NW Z^6~QW@$v9KKR-V|KL!9sP(MFEKR@;gk_P|) literal 0 HcmV?d00001 diff --git a/inst/extdata/example.zarr/var/n_cells_by_counts/.zarray b/inst/extdata/example.zarr/var/n_cells_by_counts/.zarray new file mode 100644 index 00000000..2b1f74b6 --- /dev/null +++ b/inst/extdata/example.zarr/var/n_cells_by_counts/.zarray @@ -0,0 +1,20 @@ +{ + "chunks": [ + 100 + ], + "compressor": { + "blocksize": 0, + "clevel": 5, + "cname": "lz4", + "id": "blosc", + "shuffle": 1 + }, + "dtype": "PE(t0J5zqf-d>$Q9LfWOlXV I_&ome3*}iB#Q*>R literal 0 HcmV?d00001 diff --git a/inst/extdata/example.zarr/var/pct_dropout_by_counts/.zarray b/inst/extdata/example.zarr/var/pct_dropout_by_counts/.zarray new file mode 100644 index 00000000..6f4beac3 --- /dev/null +++ b/inst/extdata/example.zarr/var/pct_dropout_by_counts/.zarray @@ -0,0 +1,20 @@ +{ + "chunks": [ + 100 + ], + "compressor": { + "blocksize": 0, + "clevel": 5, + "cname": "lz4", + "id": "blosc", + "shuffle": 1 + }, + "dtype": "or*Yb&iEhrQR?~^PMBE%~Pr7mu+-|XVz|Bs7XA*SZYyWe}^E{R@G z=MFgfjet7<9QPB5@cZJs(>@T910G384h~Oy*q{MBGQ#DUlZPCT;m-J(+yf#<9tiPh zh!6M3V#`r}23>(Vq#h|F4WR3Tal+(1=o#G>bPt-55@jFWAN~M2uRNUq literal 0 HcmV?d00001 diff --git a/inst/extdata/example.zarr/var/total_counts/.zarray b/inst/extdata/example.zarr/var/total_counts/.zarray new file mode 100644 index 00000000..788682bc --- /dev/null +++ b/inst/extdata/example.zarr/var/total_counts/.zarray @@ -0,0 +1,20 @@ +{ + "chunks": [ + 100 + ], + "compressor": { + "blocksize": 0, + "clevel": 5, + "cname": "lz4", + "id": "blosc", + "shuffle": 1 + }, + "dtype": "-Hp xx?M;1ZM(8(&Zb3cHXJy&WYwj4PY!H*bn4!pHYX5ZWpEDwGXSbjRB!+Q literal 0 HcmV?d00001 diff --git a/inst/extdata/example.zarr/varm/.zattrs b/inst/extdata/example.zarr/varm/.zattrs new file mode 100644 index 00000000..a204673f --- /dev/null +++ b/inst/extdata/example.zarr/varm/.zattrs @@ -0,0 +1,4 @@ +{ + "encoding-type": "dict", + "encoding-version": "0.1.0" +} \ No newline at end of file diff --git a/inst/extdata/example.zarr/varm/.zgroup b/inst/extdata/example.zarr/varm/.zgroup new file mode 100644 index 00000000..3b7daf22 --- /dev/null +++ b/inst/extdata/example.zarr/varm/.zgroup @@ -0,0 +1,3 @@ +{ + "zarr_format": 2 +} \ No newline at end of file diff --git a/inst/extdata/example.zarr/varm/PCs/.zarray b/inst/extdata/example.zarr/varm/PCs/.zarray new file mode 100644 index 00000000..24b887b5 --- /dev/null +++ b/inst/extdata/example.zarr/varm/PCs/.zarray @@ -0,0 +1,22 @@ +{ + "chunks": [ + 100, + 38 + ], + "compressor": { + "blocksize": 0, + "clevel": 5, + "cname": "lz4", + "id": "blosc", + "shuffle": 1 + }, + "dtype": "}B19FMsGIWxG3BI99^ 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 literal 0 HcmV?d00001 diff --git a/inst/extdata/example.zarr/varp/.zattrs b/inst/extdata/example.zarr/varp/.zattrs new file mode 100644 index 00000000..a204673f --- /dev/null +++ b/inst/extdata/example.zarr/varp/.zattrs @@ -0,0 +1,4 @@ +{ + "encoding-type": "dict", + "encoding-version": "0.1.0" +} \ No newline at end of file diff --git a/inst/extdata/example.zarr/varp/.zgroup b/inst/extdata/example.zarr/varp/.zgroup new file mode 100644 index 00000000..3b7daf22 --- /dev/null +++ b/inst/extdata/example.zarr/varp/.zgroup @@ -0,0 +1,3 @@ +{ + "zarr_format": 2 +} \ No newline at end of file diff --git a/inst/scripts/example_h5ad.py b/inst/scripts/example_h5ad.py index 0559c94b..ebece9a8 100644 --- a/inst/scripts/example_h5ad.py +++ b/inst/scripts/example_h5ad.py @@ -85,3 +85,4 @@ # Write the H5AD file adata.write("example.h5ad") +adata.write_zarr("example.zarr") diff --git a/tests/testthat/test-Zarr-read.R b/tests/testthat/test-Zarr-read.R new file mode 100644 index 00000000..6f77ad55 --- /dev/null +++ b/tests/testthat/test-Zarr-read.R @@ -0,0 +1,31 @@ +skip_if_not_installed("pizzarr") + +file <- system.file("extdata", "example.zarr", package = "anndataR") +store <- pizzarr::DirectoryStore$new(file) + +test_that("reading encoding works", { + encoding <- read_zarr_encoding(store, "obs") + expect_equal(names(encoding), c("type", "version")) +}) + +test_that("reading dense matrices works", { + mat <- read_zarr_dense_array(store, "layers/dense_counts") + expect_true(is.matrix(mat)) + expect_type(mat, "integer") + expect_equal(dim(mat), c(50, 100)) + + mat <- read_zarr_dense_array(file, "layers/dense_X") + expect_true(is.matrix(mat)) + expect_type(mat, "double") + expect_equal(dim(mat), c(50, 100)) +}) + +test_that("reading sparse matrices works", { + mat <- read_zarr_sparse_array(file, "layers/csc_counts", type = "csc") + expect_s4_class(mat, "dgCMatrix") + expect_equal(dim(mat), c(50, 100)) + + mat <- read_zarr_sparse_array(file, "layers/counts", type = "csr") + expect_s4_class(mat, "dgRMatrix") + expect_equal(dim(mat), c(50, 100)) +}) From 5100a40e19c0294a1380ea86e0cf55730a745b79 Mon Sep 17 00:00:00 2001 From: Mark Keller <7525285+keller-mark@users.noreply.github.com> Date: Mon, 6 May 2024 17:38:54 -0400 Subject: [PATCH 02/25] More tests passing --- R/read_zarr_helpers.R | 122 ++++++++++++++++++-------------- tests/testthat/test-Zarr-read.R | 99 +++++++++++++++++++++++++- 2 files changed, 165 insertions(+), 56 deletions(-) diff --git a/R/read_zarr_helpers.R b/R/read_zarr_helpers.R index 17eeb1f3..1691ac5a 100644 --- a/R/read_zarr_helpers.R +++ b/R/read_zarr_helpers.R @@ -9,7 +9,14 @@ #' #' @noRd read_zarr_encoding <- function(store, name) { - g <- pizzarr::zarr_open_group(store, path = name) + + is_group <- store$contains_item(paste0(name, "/.zgroup")) + if(is_group) { + g <- pizzarr::zarr_open_group(store, path = name) + } else { + g <- pizzarr::zarr_open_array(store, path = name) + } + attrs <- g$get_attrs()$to_list() if (!all(c("encoding-type", "encoding-version") %in% names(attrs))) { @@ -44,9 +51,9 @@ read_zarr_encoding <- function(store, name) { #' @return Value depending on the encoding #' #' @noRd -read_zarr_element <- function(file, name, type = NULL, version = NULL, stop_on_error = FALSE, ...) { +read_zarr_element <- function(store, name, type = NULL, version = NULL, stop_on_error = FALSE, ...) { if (is.null(type)) { - encoding_list <- read_zarr_encoding(file, name) + encoding_list <- read_zarr_encoding(store, name) type <- encoding_list$type version <- encoding_list$version } @@ -72,7 +79,7 @@ read_zarr_element <- function(file, name, type = NULL, version = NULL, stop_on_e tryCatch( { - read_fun(file = file, name = name, version = version, ...) + read_fun(store = store, name = name, version = version, ...) }, error = function(e) { message <- paste0( @@ -95,6 +102,13 @@ read_zarr_array <- function(store, name) { return(nested_arr$data) } +# TODO: fix bug in pizzarr? +read_zarr_scalar <- function(store, name) { + zarr_arr <- pizzarr::zarr_open_array(store, path = name) + nested_arr <- zarr_arr$get_item("...") + return(nested_arr$data) +} + #' Read H5AD dense array #' #' Read a dense array from an H5AD file @@ -112,27 +126,28 @@ read_zarr_dense_array <- function(store, name, version = "0.2.0") { # Extract the NestedArray contents as a base R array. darr <- read_zarr_array(store, name) + # TODO: ideally, native = TRUE should take care of the row order and column order, # but it doesn't # If the dense array is a 1D matrix, convert to vector - if (any(dim(darr) == 1)) { + if (length(dim(darr)) == 1) { darr <- as.vector(darr) } darr } -read_zarr_csr_matrix <- function(file, name, version) { +read_zarr_csr_matrix <- function(store, name, version) { read_zarr_sparse_array( - file = file, + store = store, name = name, version = version, type = "csr_matrix" ) } -read_zarr_csc_matrix <- function(file, name, version) { +read_zarr_csc_matrix <- function(store, name, version) { read_zarr_sparse_array( - file = file, + store = store, name = name, version = version, type = "csc_matrix" @@ -206,10 +221,10 @@ read_zarr_sparse_array <- function(store, name, version = "0.1.0", #' @return a named list of 1D arrays #' #' @noRd -read_zarr_rec_array <- function(file, name, version = "0.2.0") { +read_zarr_rec_array <- function(store, name, version = "0.2.0") { version <- match.arg(version) - rhdf5::h5read(file, name, compoundAsDataFrame = FALSE) + stop("Reading recarrays is not yet implemented") } #' Read H5AD nullable boolean @@ -223,8 +238,8 @@ read_zarr_rec_array <- function(file, name, version = "0.2.0") { #' @return a boolean vector #' #' @noRd -read_zarr_nullable_boolean <- function(file, name, version = "0.1.0") { - as.logical(read_zarr_nullable(file, name, version)) +read_zarr_nullable_boolean <- function(store, name, version = "0.1.0") { + as.logical(read_zarr_nullable(store, name, version)) } #' Read H5AD nullable integer @@ -238,8 +253,8 @@ read_zarr_nullable_boolean <- function(file, name, version = "0.1.0") { #' @return an integer vector #' #' @noRd -read_zarr_nullable_integer <- function(file, name, version = "0.1.0") { - as.integer(read_zarr_nullable(file, name, version)) +read_zarr_nullable_integer <- function(store, name, version = "0.1.0") { + as.integer(read_zarr_nullable(store, name, version)) } #' Read H5AD nullable @@ -253,21 +268,16 @@ read_zarr_nullable_integer <- function(file, name, version = "0.1.0") { #' @return a nullable vector #' #' @noRd -read_zarr_nullable <- function(file, name, version = "0.1.0") { +read_zarr_nullable <- function(store, name, version = "0.1.0") { version <- match.arg(version) - element <- rhdf5::h5read(file, name) - - # Some versions of rhdf5 automatically apply mask, in which case - # there is no 'mask' element - if (!is.null(names(element))) { - # Get mask and convert to Boolean - mask <- as.logical(element[["mask"]]) - # Get values and set missing - element <- as.vector(element[["values"]]) - element[mask] <- NA - } - + mask <- read_zarr_array(store, paste0(name, "/mask")) + values <- read_zarr_array(store, paste0(name, "/values")) + + # Get values and set missing + element <- values + element[mask] <- NA + return(element) } @@ -282,13 +292,10 @@ read_zarr_nullable <- function(file, name, version = "0.1.0") { #' @return a character vector/matrix #' #' @noRd -read_zarr_string_array <- function(file, name, version = "0.2.0") { +read_zarr_string_array <- function(store, name, version = "0.2.0") { version <- match.arg(version) # reads in transposed - string_array <- rhdf5::h5read(file, name) - if (is.matrix(string_array)) { - string_array <- t(string_array) - } + string_array <- read_zarr_array(store, name) # If the array is 1D, convert to vector if (length(dim(string_array)) == 1) { @@ -309,13 +316,14 @@ read_zarr_string_array <- function(file, name, version = "0.2.0") { #' @return a factor #' #' @noRd -read_zarr_categorical <- function(file, name, version = "0.2.0") { +read_zarr_categorical <- function(store, name, version = "0.2.0") { version <- match.arg(version) - element <- rhdf5::h5read(file, name) + codes <- read_zarr_array(store, paste0(name, "/codes")) + categories <- read_zarr_array(store, paste0(name, "/categories")) # Get codes and convert to 1-based indexing - codes <- element[["codes"]] + 1 + codes <- codes + 1 if (!length(dim(codes)) == 1) { stop("There is currently no support for multidimensional categorical arrays") @@ -324,9 +332,11 @@ read_zarr_categorical <- function(file, name, version = "0.2.0") { # Set missing values codes[codes == 0] <- NA - levels <- element[["categories"]] + levels <- categories + + g <- pizzarr::zarr_open_group(store, path = name) - attributes <- rhdf5::h5readAttributes(file, name) + attributes <- g$get_attrs()$to_list() ordered <- attributes[["ordered"]] if (is.null(ordered) || is.na(ordered)) { # This version of {rhdf5} doesn't yet support ENUM type attributes so we @@ -354,9 +364,10 @@ read_zarr_categorical <- function(file, name, version = "0.2.0") { #' @return a character vector of length 1 #' #' @noRd -read_zarr_string_scalar <- function(file, name, version = "0.2.0") { +read_zarr_string_scalar <- function(store, name, version = "0.2.0") { version <- match.arg(version) - rhdf5::h5read(file, name) + scalar <- read_zarr_scalar(store, name) + scalar } #' Read H5AD numeric scalar @@ -370,9 +381,9 @@ read_zarr_string_scalar <- function(file, name, version = "0.2.0") { #' @return a numeric vector of length 1 #' #' @noRd -read_zarr_numeric_scalar <- function(file, name, version = "0.2.0") { +read_zarr_numeric_scalar <- function(store, name, version = "0.2.0") { version <- match.arg(version) - scalar <- rhdf5::h5read(file, name) + scalar <- read_zarr_scalar(store, name) # If the numeric vector is Boolean it gets read as a factor by {rhdf5} if (is.factor(scalar)) { @@ -393,7 +404,7 @@ read_zarr_numeric_scalar <- function(file, name, version = "0.2.0") { #' @return a named list #' #' @noRd -read_zarr_mapping <- function(file, name, version = "0.1.0") { +read_zarr_mapping <- function(store, name, version = "0.1.0") { version <- match.arg(version) groupname <- paste0("/", name) @@ -421,25 +432,27 @@ read_zarr_mapping <- function(file, name, version = "0.1.0") { #' @return a data.frame #' #' @noRd -read_zarr_data_frame <- function(file, name, include_index = FALSE, +read_zarr_data_frame <- function(store, name, include_index = FALSE, version = "0.2.0") { version <- match.arg(version) - attributes <- rhdf5::h5readAttributes(file, name) + g <- pizzarr::zarr_open_group(store, path = name) + + attributes <- g$get_attrs()$to_list() index_name <- attributes$`_index` column_order <- attributes$`column-order` - columns <- read_zarr_collection(file, name, column_order) + columns <- read_zarr_collection(store, name, column_order) if (length(columns) == 0) { - index <- read_zarr_data_frame_index(file, name) + index <- read_zarr_data_frame_index(store, name) df <- data.frame(row.names = seq_along(index)) } else { df <- data.frame(columns) } if (isTRUE(include_index)) { - index <- read_zarr_data_frame_index(file, name) + index <- read_zarr_data_frame_index(store, name) df <- cbind(index, df) # The default index name is not allowed as a column name so adjust it @@ -465,10 +478,13 @@ read_zarr_data_frame <- function(file, name, include_index = FALSE, #' @return an object containing the index #' #' @noRd -read_zarr_data_frame_index <- function(file, name, version = "0.2.0") { +read_zarr_data_frame_index <- function(store, name, version = "0.2.0") { version <- match.arg(version) - attributes <- rhdf5::h5readAttributes(file, name) + g <- pizzarr::zarr_open_group(store, path = name) + + + attributes <- g$get_attrs()$to_list() index_name <- attributes$`_index` read_zarr_element(file, file.path(name, index_name)) @@ -483,13 +499,13 @@ read_zarr_data_frame_index <- function(file, name, version = "0.2.0") { #' @return a named list #' #' @noRd -read_zarr_collection <- function(file, name, column_order) { +read_zarr_collection <- function(store, name, column_order) { columns <- list() for (col_name in column_order) { new_name <- paste0(name, "/", col_name) - encoding <- read_zarr_encoding(file, new_name) + encoding <- read_zarr_encoding(store, new_name) columns[[col_name]] <- read_zarr_element( - file = file, + store = store, name = new_name, type = encoding$type, version = encoding$version diff --git a/tests/testthat/test-Zarr-read.R b/tests/testthat/test-Zarr-read.R index 6f77ad55..5a57d6ee 100644 --- a/tests/testthat/test-Zarr-read.R +++ b/tests/testthat/test-Zarr-read.R @@ -14,18 +14,111 @@ test_that("reading dense matrices works", { expect_type(mat, "integer") expect_equal(dim(mat), c(50, 100)) - mat <- read_zarr_dense_array(file, "layers/dense_X") + mat <- read_zarr_dense_array(store, "layers/dense_X") expect_true(is.matrix(mat)) expect_type(mat, "double") expect_equal(dim(mat), c(50, 100)) }) test_that("reading sparse matrices works", { - mat <- read_zarr_sparse_array(file, "layers/csc_counts", type = "csc") + mat <- read_zarr_sparse_array(store, "layers/csc_counts", type = "csc") expect_s4_class(mat, "dgCMatrix") expect_equal(dim(mat), c(50, 100)) - mat <- read_zarr_sparse_array(file, "layers/counts", type = "csr") + mat <- read_zarr_sparse_array(store, "layers/counts", type = "csr") expect_s4_class(mat, "dgRMatrix") expect_equal(dim(mat), c(50, 100)) }) + + +test_that("reading recarrays works", { + f <- function() read_zarr_rec_array(store, "uns/rank_genes_groups/logfoldchanges") + expect_error(f()) +}) + +test_that("reading 1D numeric arrays works", { + array_1d <- read_zarr_dense_array(store, "obs/Int") + expect_vector(array_1d, ptype = integer(), size = 50) + + array_1d <- read_zarr_dense_array(store, "obs/Float") + expect_vector(array_1d, ptype = double(), size = 50) +}) + +test_that("reading 1D sparse numeric arrays works", { + array_1d <- read_zarr_sparse_array(store, "uns/Sparse1D", type = "csc") + expect_s4_class(array_1d, "dgCMatrix") + expect_equal(dim(array_1d), c(1, 6)) +}) + +test_that("reading 1D nullable arrays works", { + array_1d <- read_zarr_nullable_integer(store, "obs/IntNA") + expect_vector(array_1d, ptype = integer(), size = 50) + expect_true(any(is.na(array_1d))) + + array_1d <- read_zarr_dense_array(store, "obs/FloatNA") + expect_vector(array_1d, ptype = double(), size = 50) + expect_true(any(is.na(array_1d))) + + array_1d <- read_zarr_nullable_boolean(store, "obs/Bool") + expect_vector(array_1d, ptype = logical(), size = 50) + expect_false(any(is.na(array_1d))) + + array_1d <- read_zarr_nullable_boolean(store, "obs/BoolNA") + expect_vector(array_1d, ptype = logical(), size = 50) + expect_true(any(is.na(array_1d))) +}) + +test_that("reading string scalars works", { + scalar <- read_zarr_string_scalar(store, "uns/StringScalar") + expect_equal(scalar, "A string") +}) + +test_that("reading numeric scalars works", { + scalar <- read_zarr_numeric_scalar(store, "uns/IntScalar") + expect_equal(scalar, 1) +}) + +test_that("reading string arrays works", { + array <- read_zarr_string_array(store, "uns/String") + expect_vector(array, ptype = character(), size = 10) + expect_equal(array[3], "String 2") + + array <- read_zarr_string_array(store, "uns/String2D") + expect_true(is.matrix(array)) + expect_type(array, "character") + expect_equal(dim(array), c(5, 10)) +}) + +test_that("reading mappings works", { + mapping <- read_zarr_mapping(store, "uns") + expect_type(mapping, "list") + expect_type(names(mapping), "character") +}) + +test_that("reading dataframes works", { + df <- read_zarr_data_frame(store, "obs", include_index = TRUE) + expect_s3_class(df, "data.frame") + expect_equal( + colnames(df), + c( + ".index", "Float", "FloatNA", "Int", "IntNA", "Bool", "BoolNA", + "n_genes_by_counts", "log1p_n_genes_by_counts", "total_counts", + "log1p_total_counts", "leiden" + ) + ) +}) + +test_that("reading H5AD as SingleCellExperiment works", { + skip_if_not_installed("SingleCellExperiment") + + sce <- read_zarr(store, to = "SingleCellExperiment") + expect_s4_class(sce, "SingleCellExperiment") +}) + +test_that("reading H5AD as Seurat works", { + skip_if_not_installed("SeuratObject") + + # TODO: remove this suppression when the to_seurat, from_seurat functions are updated. + seurat <- suppressWarnings(read_zarr(store, to = "Seurat")) + expect_s4_class(seurat, "Seurat") +}) From 4c9d01f67c803529fb4a92fd6389319d98165ca0 Mon Sep 17 00:00:00 2001 From: Mark Keller <7525285+keller-mark@users.noreply.github.com> Date: Mon, 6 May 2024 17:41:48 -0400 Subject: [PATCH 03/25] Fix df read bug --- R/read_zarr_helpers.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/R/read_zarr_helpers.R b/R/read_zarr_helpers.R index 1691ac5a..bf573eaf 100644 --- a/R/read_zarr_helpers.R +++ b/R/read_zarr_helpers.R @@ -487,7 +487,7 @@ read_zarr_data_frame_index <- function(store, name, version = "0.2.0") { attributes <- g$get_attrs()$to_list() index_name <- attributes$`_index` - read_zarr_element(file, file.path(name, index_name)) + read_zarr_element(store, file.path(name, index_name)) } #' Read multiple H5AD datatypes From eb8b69c7be164c364e200cda2ad008033e3f724d Mon Sep 17 00:00:00 2001 From: Mark Keller <7525285+keller-mark@users.noreply.github.com> Date: Tue, 7 May 2024 10:18:34 -0400 Subject: [PATCH 04/25] More tests passing after fixing zero-dimensional get bug in pizzarr --- R/ZarrAnnData.R | 75 +++++++++++++++++++++++-------------------- R/read_zarr_helpers.R | 29 +++-------------- 2 files changed, 46 insertions(+), 58 deletions(-) diff --git a/R/ZarrAnnData.R b/R/ZarrAnnData.R index fcd7c12b..9f498ba5 100644 --- a/R/ZarrAnnData.R +++ b/R/ZarrAnnData.R @@ -5,7 +5,8 @@ ZarrAnnData <- R6::R6Class("ZarrAnnData", # nolint inherit = AbstractAnnData, private = list( - .h5obj = NULL, + zarr_store = NULL, + zarr_root = NULL, .n_obs = NULL, .n_vars = NULL, .obs_names = NULL, @@ -17,7 +18,7 @@ ZarrAnnData <- R6::R6Class("ZarrAnnData", # nolint X = function(value) { if (missing(value)) { # trackstatus: class=HDF5AnnData, feature=get_X, status=done - read_zarr_element(private$.h5obj, "/X") + read_zarr_element(private$zarr_store, "/X") } else { # trackstatus: class=HDF5AnnData, feature=set_X, status=done value <- private$.validate_aligned_array( @@ -27,7 +28,7 @@ ZarrAnnData <- R6::R6Class("ZarrAnnData", # nolint expected_rownames = rownames(self), expected_colnames = colnames(self) ) - write_h5ad_element(value, private$.h5obj, "/X", private$.compression) + write_zarr_element(value, private$zarr_store, "/X", private$.compression) } }, #' @field layers The layers slot. Must be NULL or a named list @@ -36,7 +37,7 @@ ZarrAnnData <- R6::R6Class("ZarrAnnData", # nolint layers = function(value) { if (missing(value)) { # trackstatus: class=HDF5AnnData, feature=get_layers, status=done - read_zarr_element(private$.h5obj, "layers") + read_zarr_element(private$zarr_store, "layers") } else { # trackstatus: class=HDF5AnnData, feature=set_layers, status=done value <- private$.validate_aligned_mapping( @@ -46,7 +47,7 @@ ZarrAnnData <- R6::R6Class("ZarrAnnData", # nolint expected_rownames = rownames(self), expected_colnames = colnames(self) ) - write_h5ad_element(value, private$.h5obj, "/layers", private$.compression) + write_zarr_element(value, private$zarr_store, "/layers", private$.compression) } }, #' @field obsm The obsm slot. Must be `NULL` or a named list with @@ -54,7 +55,7 @@ ZarrAnnData <- R6::R6Class("ZarrAnnData", # nolint obsm = function(value) { if (missing(value)) { # trackstatus: class=HDF5AnnData, feature=get_obsm, status=done - read_zarr_element(private$.h5obj, "obsm") + read_zarr_element(private$zarr_store, "obsm") } else { # trackstatus: class=HDF5AnnData, feature=set_obsm, status=done value <- private$.validate_aligned_mapping( @@ -63,7 +64,7 @@ ZarrAnnData <- R6::R6Class("ZarrAnnData", # nolint c(self$n_obs()), expected_rownames = rownames(self) ) - write_h5ad_element(value, private$.h5obj, "/obsm") + write_zarr_element(value, private$zarr_store, "/obsm") } }, #' @field varm The varm slot. Must be `NULL` or a named list with @@ -71,7 +72,7 @@ ZarrAnnData <- R6::R6Class("ZarrAnnData", # nolint varm = function(value) { if (missing(value)) { # trackstatus: class=HDF5AnnData, feature=get_varm, status=done - read_zarr_element(private$.h5obj, "varm") + read_zarr_element(private$zarr_store, "varm") } else { # trackstatus: class=HDF5AnnData, feature=set_varm, status=done value <- private$.validate_aligned_mapping( @@ -80,7 +81,7 @@ ZarrAnnData <- R6::R6Class("ZarrAnnData", # nolint c(self$n_vars()), expected_rownames = colnames(self) ) - write_h5ad_element(value, private$.h5obj, "/varm") + write_zarr_element(value, private$zarr_store, "/varm") } }, #' @field obsp The obsp slot. Must be `NULL` or a named list with @@ -88,7 +89,7 @@ ZarrAnnData <- R6::R6Class("ZarrAnnData", # nolint obsp = function(value) { if (missing(value)) { # trackstatus: class=HDF5AnnData, feature=get_obsp, status=done - read_zarr_element(private$.h5obj, "obsp") + read_zarr_element(private$zarr_store, "obsp") } else { # trackstatus: class=HDF5AnnData, feature=set_obsp, status=done value <- private$.validate_aligned_mapping( @@ -98,7 +99,7 @@ ZarrAnnData <- R6::R6Class("ZarrAnnData", # nolint expected_rownames = rownames(self), expected_colnames = rownames(self) ) - write_h5ad_element(value, private$.h5obj, "/obsp") + write_zarr_element(value, private$zarr_store, "/obsp") } }, #' @field varp The varp slot. Must be `NULL` or a named list with @@ -106,7 +107,7 @@ ZarrAnnData <- R6::R6Class("ZarrAnnData", # nolint varp = function(value) { if (missing(value)) { # trackstatus: class=HDF5AnnData, feature=get_varp, status=done - read_zarr_element(private$.h5obj, "varp") + read_zarr_element(private$zarr_store, "varp") } else { # trackstatus: class=HDF5AnnData, feature=set_varp, status=done value <- private$.validate_aligned_mapping( @@ -116,7 +117,7 @@ ZarrAnnData <- R6::R6Class("ZarrAnnData", # nolint expected_rownames = colnames(self), expected_colnames = colnames(self) ) - write_h5ad_element(value, private$.h5obj, "/varp") + write_zarr_element(value, private$zarr_store, "/varp") } }, @@ -124,13 +125,13 @@ ZarrAnnData <- R6::R6Class("ZarrAnnData", # nolint obs = function(value) { if (missing(value)) { # trackstatus: class=HDF5AnnData, feature=get_obs, status=done - read_zarr_element(private$.h5obj, "/obs", include_index = FALSE) + read_zarr_element(private$zarr_store, "/obs", include_index = FALSE) } else { # trackstatus: class=HDF5AnnData, feature=set_obs, status=done value <- private$.validate_obsvar_dataframe(value, "obs") - write_h5ad_element( + write_zarr_element( value, - private$.h5obj, + private$zarr_store, "/obs", private$.compression, index = self$obs_names @@ -141,13 +142,13 @@ ZarrAnnData <- R6::R6Class("ZarrAnnData", # nolint var = function(value) { if (missing(value)) { # trackstatus: class=HDF5AnnData, feature=get_var, status=done - read_zarr_element(private$.h5obj, "/var", include_index = FALSE) + read_zarr_element(private$zarr_store, "/var", include_index = FALSE) } else { # trackstatus: class=HDF5AnnData, feature=set_var, status=done value <- private$.validate_obsvar_dataframe(value, "var") - write_h5ad_element( + write_zarr_element( value, - private$.h5obj, + private$zarr_store, "/var", index = self$var_names ) @@ -160,13 +161,13 @@ ZarrAnnData <- R6::R6Class("ZarrAnnData", # nolint # obs names are cached to avoid reading all of obs whenever they are # accessed if (is.null(private$.obs_names)) { - private$.obs_names <- read_zarr_data_frame_index(private$.h5obj, "obs") + private$.obs_names <- read_zarr_data_frame_index(private$zarr_store, "obs") } private$.obs_names } else { # trackstatus: class=HDF5AnnData, feature=set_obs_names, status=done value <- private$.validate_obsvar_names(value, "obs") - write_h5ad_data_frame_index(value, private$.h5obj, "obs", private$.compression, "_index") + write_zarr_data_frame_index(value, private$zarr_store, "obs", private$.compression, "_index") private$.obs_names <- value } }, @@ -178,13 +179,13 @@ ZarrAnnData <- R6::R6Class("ZarrAnnData", # nolint # var names are cached to avoid reading all of var whenever they are # accessed if (is.null(private$.var_names)) { - private$.var_names <- read_zarr_data_frame_index(private$.h5obj, "var") + private$.var_names <- read_zarr_data_frame_index(private$zarr_store, "var") } private$.var_names } else { # trackstatus: class=HDF5AnnData, feature=set_var_names, status=done value <- private$.validate_obsvar_names(value, "var") - write_h5ad_data_frame_index(value, private$.h5obj, "var", private$.compression, "_index") + write_zarr_data_frame_index(value, private$zarr_store, "var", private$.compression, "_index") private$.var_names <- value } }, @@ -192,11 +193,11 @@ ZarrAnnData <- R6::R6Class("ZarrAnnData", # nolint uns = function(value) { if (missing(value)) { # trackstatus: class=HDF5AnnData, feature=get_uns, status=done - read_zarr_element(private$.h5obj, "uns") + read_zarr_element(private$zarr_store, "uns") } else { # trackstatus: class=HDF5AnnData, feature=set_uns, status=done value <- private$.validate_named_list(value, "uns") - write_h5ad_element(value, private$.h5obj, "/uns") + write_zarr_element(value, private$zarr_store, "/uns") } } ), @@ -249,7 +250,7 @@ ZarrAnnData <- R6::R6Class("ZarrAnnData", # nolint #' must be specified. In both cases, any additional slots provided will be #' set on the created object. This will cause data to be overwritten if the #' file already exists. - initialize = function(file, + initialize = function(store, obs_names = NULL, var_names = NULL, X = NULL, @@ -269,7 +270,11 @@ ZarrAnnData <- R6::R6Class("ZarrAnnData", # nolint compression <- match.arg(compression) private$.compression <- compression - if (!file.exists(file)) { + root <- pizzarr::zarr_open_group(store, path = "/") + + + #if (!file.exists(file)) {/ + if(FALSE) { # TODO: how to determine if the store has been initialized as an AnnData-Zarr store, vs. should be initialized here? # Check obs_names and var_names have been provided if (is.null(obs_names)) { stop("When creating a new .h5ad file, `obs_names` must be defined.") @@ -279,17 +284,18 @@ ZarrAnnData <- R6::R6Class("ZarrAnnData", # nolint } # Create an empty H5AD using the provided obs/var names - write_empty_h5ad(file, obs_names, var_names, compression) + write_empty_zarr(file, obs_names, var_names, compression) # Set private object slots - private$.h5obj <- file + private$zarr_store <- file private$.n_obs <- length(obs_names) private$.n_vars <- length(var_names) private$.obs_names <- obs_names private$.var_names <- var_names } else { # Check the file is a valid H5AD - attrs <- rhdf5::h5readAttributes(file, "/") + + attrs <- root$get_attrs()$to_list() if (!all(c("encoding-type", "encoding-version") %in% names(attrs))) { stop( @@ -299,7 +305,8 @@ ZarrAnnData <- R6::R6Class("ZarrAnnData", # nolint } # Set the file path - private$.h5obj <- file + private$zarr_store <- store + private$zarr_root <- root # If obs or var names have been provided update those if (!is.null(obs_names)) { @@ -398,12 +405,12 @@ ZarrAnnData <- R6::R6Class("ZarrAnnData", # nolint #' to_HDF5AnnData(ad, "test.h5ad") #' # remove file #' file.remove("test.h5ad") -to_HDF5AnnData <- function(adata, file, compression = c("none", "gzip", "lzf")) { # nolint +to_ZarrAnnData <- function(adata, store, compression = c("none", "gzip", "lzf")) { # nolint stopifnot( inherits(adata, "AbstractAnnData") ) - HDF5AnnData$new( - file = file, + ZarrAnnData$new( + store = store, X = adata$X, obs = adata$obs, var = adata$var, diff --git a/R/read_zarr_helpers.R b/R/read_zarr_helpers.R index bf573eaf..d815813d 100644 --- a/R/read_zarr_helpers.R +++ b/R/read_zarr_helpers.R @@ -9,14 +9,8 @@ #' #' @noRd read_zarr_encoding <- function(store, name) { - - is_group <- store$contains_item(paste0(name, "/.zgroup")) - if(is_group) { - g <- pizzarr::zarr_open_group(store, path = name) - } else { - g <- pizzarr::zarr_open_array(store, path = name) - } - + # Path can be to array or group + g <- pizzarr::zarr_open(store, path = name) attrs <- g$get_attrs()$to_list() if (!all(c("encoding-type", "encoding-version") %in% names(attrs))) { @@ -102,13 +96,6 @@ read_zarr_array <- function(store, name) { return(nested_arr$data) } -# TODO: fix bug in pizzarr? -read_zarr_scalar <- function(store, name) { - zarr_arr <- pizzarr::zarr_open_array(store, path = name) - nested_arr <- zarr_arr$get_item("...") - return(nested_arr$data) -} - #' Read H5AD dense array #' #' Read a dense array from an H5AD file @@ -366,8 +353,8 @@ read_zarr_categorical <- function(store, name, version = "0.2.0") { #' @noRd read_zarr_string_scalar <- function(store, name, version = "0.2.0") { version <- match.arg(version) - scalar <- read_zarr_scalar(store, name) - scalar + scalar <- as.character(read_zarr_array(store, name)) + return(scalar) } #' Read H5AD numeric scalar @@ -383,13 +370,7 @@ read_zarr_string_scalar <- function(store, name, version = "0.2.0") { #' @noRd read_zarr_numeric_scalar <- function(store, name, version = "0.2.0") { version <- match.arg(version) - scalar <- read_zarr_scalar(store, name) - - # If the numeric vector is Boolean it gets read as a factor by {rhdf5} - if (is.factor(scalar)) { - scalar <- as.logical(scalar) - } - + scalar <- as.numeric(read_zarr_array(store, name)) return(scalar) } From 58f5ce4e2b036860e8bb5c221253d4b732d0db5f Mon Sep 17 00:00:00 2001 From: Mark Keller <7525285+keller-mark@users.noreply.github.com> Date: Tue, 7 May 2024 13:51:32 -0400 Subject: [PATCH 05/25] WIP: writing --- R/ZarrAnnData.R | 7 +- R/read_zarr_helpers.R | 8 +- R/write_zarr_helpers.R | 302 +++++++++++++----------------- tests/testthat/test-Zarr-write.R | 231 +++++++++++++++++++++++ tests/testthat/test-ZarrAnnData.R | 195 +++++++++++++++++++ 5 files changed, 569 insertions(+), 174 deletions(-) create mode 100644 tests/testthat/test-Zarr-write.R create mode 100644 tests/testthat/test-ZarrAnnData.R diff --git a/R/ZarrAnnData.R b/R/ZarrAnnData.R index 9f498ba5..7cba6710 100644 --- a/R/ZarrAnnData.R +++ b/R/ZarrAnnData.R @@ -273,8 +273,7 @@ ZarrAnnData <- R6::R6Class("ZarrAnnData", # nolint root <- pizzarr::zarr_open_group(store, path = "/") - #if (!file.exists(file)) {/ - if(FALSE) { # TODO: how to determine if the store has been initialized as an AnnData-Zarr store, vs. should be initialized here? + if(length(root$get_attrs()$to_list()) == 0) { # Check obs_names and var_names have been provided if (is.null(obs_names)) { stop("When creating a new .h5ad file, `obs_names` must be defined.") @@ -284,10 +283,10 @@ ZarrAnnData <- R6::R6Class("ZarrAnnData", # nolint } # Create an empty H5AD using the provided obs/var names - write_empty_zarr(file, obs_names, var_names, compression) + write_empty_zarr(store, obs_names, var_names, compression) # Set private object slots - private$zarr_store <- file + private$zarr_store <- store private$.n_obs <- length(obs_names) private$.n_vars <- length(var_names) private$.obs_names <- obs_names diff --git a/R/read_zarr_helpers.R b/R/read_zarr_helpers.R index d815813d..d3bdc0a7 100644 --- a/R/read_zarr_helpers.R +++ b/R/read_zarr_helpers.R @@ -389,10 +389,12 @@ read_zarr_mapping <- function(store, name, version = "0.1.0") { version <- match.arg(version) groupname <- paste0("/", name) - file_structure <- rhdf5::h5ls(file, recursive = TRUE) - columns <- file_structure[file_structure$group == groupname, "name"] + stop("Reading mappings is not yet implemented for Zarr (and can only be implemented Stores that support listdir)") - read_zarr_collection(file, name, columns) + #file_structure <- rhdf5::h5ls(file, recursive = TRUE) + #columns <- file_structure[file_structure$group == groupname, "name"] + + #read_zarr_collection(file, name, columns) } #' Read H5AD data frame diff --git a/R/write_zarr_helpers.R b/R/write_zarr_helpers.R index d0384ccf..e2025655 100644 --- a/R/write_zarr_helpers.R +++ b/R/write_zarr_helpers.R @@ -16,13 +16,11 @@ #' `write_zarr_element()` should always be used instead of any of the specific #' writing functions as it contains additional boilerplate to make sure #' elements are written correctly. -write_zarr_element <- function(value, file, name, compression = c("none", "gzip", "lzf"), stop_on_error = FALSE, ...) { # nolint +write_zarr_element <- function(value, store, name, compression = c("none", "gzip", "lzf"), stop_on_error = FALSE, ...) { # nolint compression <- match.arg(compression) # Delete the path if it already exists - if (hdf5_path_exists(file, name)) { - rhdf5::h5delete(file, name) - } + # TODO: https://github.com/keller-mark/pizzarr/issues/69 # Sparse matrices write_fun <- @@ -63,23 +61,25 @@ write_zarr_element <- function(value, file, name, compression = c("none", "gzip" stop("Writing '", class(value), "' objects to H5AD files is not supported") } - tryCatch( - { - write_fun(value = value, file = file, name = name, compression = compression, ...) - }, - error = function(e) { - message <- paste0( - "Could not write element '", name, "' of type '", class(value), "':\n", - conditionMessage(e) - ) - if (stop_on_error) { - stop(message) - } else { - warning(message) - return(NULL) - } - } - ) + write_fun(value = value, store = store, name = name, compression = compression, ...) + + # tryCatch( + # { + # write_fun(value = value, store = store, name = name, compression = compression, ...) + # }, + # error = function(e) { + # message <- paste0( + # "Could not write element '", name, "' of type '", class(value), "':\n", + # conditionMessage(e) + # ) + # if (stop_on_error) { + # stop(message) + # } else { + # warning(message) + # return(NULL) + # } + # } + # ) } #' Write H5AD encoding @@ -92,24 +92,12 @@ write_zarr_element <- function(value, file, name, compression = c("none", "gzip" #' @param name Name of the element within the H5AD file #' @param encoding The encoding type to set #' @param version The encoding version to set -write_zarr_encoding <- function(file, name, encoding, version) { - h5file <- rhdf5::H5Fopen(file) - on.exit(rhdf5::H5Fclose(h5file)) - - oid <- rhdf5::H5Oopen(h5file, name) - type <- rhdf5::H5Iget_type(oid) - rhdf5::H5Oclose(oid) +write_zarr_encoding <- function(store, name, encoding, version) { + g <- pizzarr::zarr_open(store, path = name) + attrs <- g$get_attrs() - if (type == "H5I_GROUP") { - h5obj <- rhdf5::H5Gopen(h5file, name) - on.exit(rhdf5::H5Gclose(h5obj), add = TRUE) - } else { - h5obj <- rhdf5::H5Dopen(h5file, name) - on.exit(rhdf5::H5Dclose(h5obj), add = TRUE) - } - - rhdf5::h5writeAttribute(encoding, h5obj, "encoding-type", asScalar = TRUE) # nolint - rhdf5::h5writeAttribute(version, h5obj, "encoding-version", asScalar = TRUE) # nolint + attrs$set_item("encoding-type", encoding) + attrs$set_item("encoding-version", encoding) } #' Write H5AD dense array @@ -124,19 +112,13 @@ write_zarr_encoding <- function(file, name, encoding, version) { #' @param version Encoding version of the element to write #' #' @noRd -write_zarr_dense_array <- function(value, file, name, compression, version = "0.2.0") { +write_zarr_dense_array <- function(value, store, name, compression, version = "0.2.0") { version <- match.arg(version) - if (!is.vector(value)) { - # Transpose the value because writing with native=TRUE does not - # seem to work as expected - value <- t(value) - } - - hdf5_write_compressed(file, name, value, compression) + zarr_write_compressed(store, name, value, compression) # Write attributes - write_zarr_encoding(file, name, "array", version) + write_zarr_encoding(store, name, "array", version) } #' Write H5AD sparse array @@ -151,7 +133,7 @@ write_zarr_dense_array <- function(value, file, name, compression, version = "0. #' @param compression The compression to use when writing the element. Can be #' one of `"none"`, `"gzip"` or `"lzf"`. Defaults to `"none"`. #' @param version Encoding version of the element to write -write_zarr_sparse_array <- function(value, file, name, compression, version = "0.1.0") { +write_zarr_sparse_array <- function(value, store, name, compression, version = "0.1.0") { version <- match.arg(version) # check types @@ -171,23 +153,19 @@ write_zarr_sparse_array <- function(value, file, name, compression, version = "0 ) } + print(value) + # Write sparse matrix - rhdf5::h5createGroup(file, name) - hdf5_write_compressed(file, paste0(name, "/indices"), attr(value, indices_attr), compression) - hdf5_write_compressed(file, paste0(name, "/indptr"), value@p, compression) - hdf5_write_compressed(file, paste0(name, "/data"), value@x, compression) + g <- pizzarr::zarr_create_group(store, path = name) + zarr_write_compressed(store, paste0(name, "/indices"), attr(value, indices_attr), compression) + zarr_write_compressed(store, paste0(name, "/indptr"), value@p, compression) + zarr_write_compressed(store, paste0(name, "/data"), value@x, compression) # Add encoding - write_zarr_encoding(file, name, type, version) + write_zarr_encoding(store, name, type, version) # Write shape attribute - h5file <- rhdf5::H5Fopen(file) - on.exit(rhdf5::H5Fclose(h5file)) - - h5obj <- rhdf5::H5Gopen(h5file, name) - on.exit(rhdf5::H5Gclose(h5obj), add = TRUE) - - rhdf5::h5writeAttribute(dim(value), h5obj, "shape") + g$get_attrs()$set_item("shape", dim(value)) } #' Write H5AD nullable boolean @@ -202,17 +180,17 @@ write_zarr_sparse_array <- function(value, file, name, compression, version = "0 #' @param compression The compression to use when writing the element. Can be #' one of `"none"`, `"gzip"` or `"lzf"`. Defaults to `"none"`. #' @param version Encoding version of the element to write -write_zarr_nullable_boolean <- function(value, file, name, compression, version = "0.1.0") { +write_zarr_nullable_boolean <- function(value, store, name, compression, version = "0.1.0") { # write mask and values - rhdf5::h5createGroup(file, name) + g <- pizzarr::zarr_create_group(store, path = name) value_no_na <- value value_no_na[is.na(value_no_na)] <- FALSE - hdf5_write_compressed(file, paste0(name, "/values"), value_no_na, compression) - hdf5_write_compressed(file, paste0(name, "/mask"), is.na(value), compression) + zarr_write_compressed(store, paste0(name, "/values"), value_no_na, compression) + zarr_write_compressed(store, paste0(name, "/mask"), is.na(value), compression) # Write attributes - write_zarr_encoding(file, name, "nullable-boolean", version) + write_zarr_encoding(store, name, "nullable-boolean", version) } #' Write H5AD nullable integer @@ -227,17 +205,17 @@ write_zarr_nullable_boolean <- function(value, file, name, compression, version #' @param compression The compression to use when writing the element. Can be #' one of `"none"`, `"gzip"` or `"lzf"`. Defaults to `"none"`. #' @param version Encoding version of the element to write -write_zarr_nullable_integer <- function(value, file, name, compression, version = "0.1.0") { +write_zarr_nullable_integer <- function(value, store, name, compression, version = "0.1.0") { # write mask and values - rhdf5::h5createGroup(file, name) + g <- pizzarr::zarr_create_group(store, path = name) value_no_na <- value value_no_na[is.na(value_no_na)] <- -1L - hdf5_write_compressed(file, paste0(name, "/values"), value_no_na, compression) - hdf5_write_compressed(file, paste0(name, "/mask"), is.na(value), compression) + zarr_write_compressed(store, paste0(name, "/values"), value_no_na, compression) + zarr_write_compressed(store, paste0(name, "/mask"), is.na(value), compression) # Write attributes - write_zarr_encoding(file, name, "nullable-integer", version) + write_zarr_encoding(store, name, "nullable-integer", version) } #' Write H5AD string array @@ -252,16 +230,19 @@ write_zarr_nullable_integer <- function(value, file, name, compression, version #' @param compression The compression to use when writing the element. Can be #' one of `"none"`, `"gzip"` or `"lzf"`. Defaults to `"none"`. #' @param version Encoding version of the element to write -write_zarr_string_array <- function(value, file, name, compression, version = "0.2.0") { - rhdf5::h5write( - value, - file, - name, - variableLengthString = TRUE, - encoding = "UTF-8" - ) - - write_zarr_encoding(file, name, "string-array", version) +write_zarr_string_array <- function(value, store, name, compression, version = "0.2.0") { + + if (!is.null(dim(value))) { + dims <- dim(value) + } else { + dims <- length(value) + } + + object_codec = pizzarr::VLenUtf8Codec$new() + data <- array(data = value, dim = dims) + a <- pizzarr::zarr_create_array(data, store = store, path = name, dtype = "|O", object_codec = object_codec, shape = dims) + + write_zarr_encoding(store, name, "string-array", version) } #' Write H5AD categorical @@ -276,13 +257,13 @@ write_zarr_string_array <- function(value, file, name, compression, version = "0 #' @param compression The compression to use when writing the element. Can be #' one of `"none"`, `"gzip"` or `"lzf"`. Defaults to `"none"`. #' @param version Encoding version of the element to write -write_zarr_categorical <- function(value, file, name, compression, version = "0.2.0") { - rhdf5::h5createGroup(file, name) - hdf5_write_compressed(file, paste0(name, "/categories"), as.integer(levels(value)), compression) - hdf5_write_compressed(file, paste0(name, "/codes"), as.integer(value), compression) - hdf5_write_compressed(file, paste0(name, "/ordered"), is.ordered(value), compression) +write_zarr_categorical <- function(value, store, name, compression, version = "0.2.0") { + g <- pizzarr::zarr_create_group(store, path = name) + zarr_write_compressed(store, paste0(name, "/categories"), as.integer(levels(value)), compression) + zarr_write_compressed(store, paste0(name, "/codes"), as.integer(value), compression) + zarr_write_compressed(store, paste0(name, "/ordered"), is.ordered(value), compression) - write_zarr_encoding(file, name, "categorical", version) + write_zarr_encoding(store, name, "categorical", version) } #' Write H5AD string scalar @@ -297,18 +278,13 @@ write_zarr_categorical <- function(value, file, name, compression, version = "0. #' @param compression The compression to use when writing the element. Can be #' one of `"none"`, `"gzip"` or `"lzf"`. Defaults to `"none"`. #' @param version Encoding version of the element to write -write_zarr_string_scalar <- function(value, file, name, compression, version = "0.2.0") { +write_zarr_string_scalar <- function(value, store, name, compression, version = "0.2.0") { # Write scalar - rhdf5::h5write( - value, - file, - name, - variableLengthString = TRUE, - encoding = "UTF-8" - ) + object_codec = pizzarr::VLenUtf8Codec$new() + a <- pizzarr::zarr_create_array(value, store = store, path = name, dtype = "|O", object_codec = object_codec, shape = list()) # Write attributes - write_zarr_encoding(file, name, "string", version) + write_zarr_encoding(store, name, "string", version) } #' Write H5AD numeric scalar @@ -323,13 +299,12 @@ write_zarr_string_scalar <- function(value, file, name, compression, version = " #' @param compression The compression to use when writing the element. Can be #' one of `"none"`, `"gzip"` or `"lzf"`. Defaults to `"none"`. #' @param version Encoding version of the element to write -write_zarr_numeric_scalar <- function(value, file, name, compression, version = "0.2.0") { +write_zarr_numeric_scalar <- function(value, store, name, compression, version = "0.2.0") { # Write scalar - - hdf5_write_compressed(file, name, value, compression) + zarr_write_compressed(store, name, value, compression) # Write attributes - write_zarr_encoding(file, name, "numeric-scalar", version) + write_zarr_encoding(store, name, "numeric-scalar", version) } #' Write H5AD mapping @@ -344,15 +319,15 @@ write_zarr_numeric_scalar <- function(value, file, name, compression, version = #' @param compression The compression to use when writing the element. Can be #' one of `"none"`, `"gzip"` or `"lzf"`. Defaults to `"none"`. #' @param version Encoding version of the element to write -write_zarr_mapping <- function(value, file, name, compression, version = "0.1.0") { - rhdf5::h5createGroup(file, name) +write_zarr_mapping <- function(value, store, name, compression, version = "0.1.0") { + g <- pizzarr::zarr_create_group(store, path = name) # Write mapping elements for (key in names(value)) { - write_zarr_element(value[[key]], file, paste0(name, "/", key), compression) + write_zarr_element(value[[key]], store, paste0(name, "/", key), compression) } - write_zarr_encoding(file, name, "dict", version) + write_zarr_encoding(store, name, "dict", version) } #' Write H5AD data frame @@ -370,10 +345,10 @@ write_zarr_mapping <- function(value, file, name, compression, version = "0.1.0" #' the number of rows in `values` or a single character string giving the name #' of a column in `values`. If `NULL` then `rownames(value)` is used. #' @param version Encoding version of the element to write -write_zarr_data_frame <- function(value, file, name, compression, index = NULL, +write_zarr_data_frame <- function(value, store, name, compression, index = NULL, version = "0.2.0") { - rhdf5::h5createGroup(file, name) - write_zarr_encoding(file, name, "dataframe", version) + g <- pizzarr::zarr_create_group(store, path = name) + write_zarr_encoding(store, name, "dataframe", version) if (is.null(index)) { index_name <- "_index" @@ -393,20 +368,14 @@ write_zarr_data_frame <- function(value, file, name, compression, index = NULL, } # Write index - write_zarr_data_frame_index(index_value, file, name, compression, index_name) + write_zarr_data_frame_index(index_value, store, name, compression, index_name) # Write data frame columns for (col in colnames(value)) { - write_zarr_element(value[[col]], file, paste0(name, "/", col), compression) + write_zarr_element(value[[col]], store, paste0(name, "/", col), compression) } # Write additional data frame attributes - h5file <- rhdf5::H5Fopen(file) - on.exit(rhdf5::H5Fclose(h5file)) - - h5obj <- rhdf5::H5Gopen(h5file, name) - on.exit(rhdf5::H5Gclose(h5obj), add = TRUE) - col_order <- colnames(value) col_order <- col_order[col_order != index_name] # If there are no columns other than the index we set column order to an @@ -414,7 +383,8 @@ write_zarr_data_frame <- function(value, file, name, compression, index = NULL, if (length(col_order) == 0) { col_order <- numeric() } - rhdf5::h5writeAttribute(col_order, h5obj, "column-order") # nolint + + g$get_attrs()$set_item("column-order", col_order) } #' Write H5AD data frame index @@ -431,27 +401,22 @@ write_zarr_data_frame <- function(value, file, name, compression, index = NULL, #' @param compression The compression to use when writing the element. Can be #' one of `"none"`, `"gzip"` or `"lzf"`. Defaults to `"none"`. #' @param index_name Name of the data frame column storing the index -write_zarr_data_frame_index <- function(value, file, name, compression, index_name) { - if (!hdf5_path_exists(file, name)) { - stop("The data frame '", name, "' does not exist in '", file, "'") +write_zarr_data_frame_index <- function(value, store, name, compression, index_name) { + if (!zarr_path_exists(store, name)) { + stop("The data frame '", name, "' does not exist in store") } - encoding <- read_h5ad_encoding(file, name) + encoding <- read_zarr_encoding(store, name) if (encoding$type != "dataframe") { - stop("'", name, "' in '", file, "' is not a data frame") + stop("'", name, "' in '", store, "' is not a data frame") } # Write index columns - write_zarr_element(value, file, paste0(name, "/", index_name)) + write_zarr_element(value, store, paste0(name, "/", index_name)) # Write data frame index attribute - h5file <- rhdf5::H5Fopen(file) - on.exit(rhdf5::H5Fclose(h5file)) - - h5obj <- rhdf5::H5Gopen(h5file, name) - on.exit(rhdf5::H5Gclose(h5obj), add = TRUE) - - rhdf5::h5writeAttribute(index_name, h5obj, "_index", asScalar = TRUE) + g <- pizzarr::zarr_open_group(store, path = name) + g$get_attrs()$set_item("_index", index_name) } #' Write empty H5AD @@ -466,32 +431,29 @@ write_zarr_data_frame_index <- function(value, file, name, compression, index_na #' @param compression The compression to use when writing the element. Can be #' one of `"none"`, `"gzip"` or `"lzf"`. Defaults to `"none"`. #' @param version The H5AD version to write -write_empty_h5ad <- function(file, obs_names, var_names, compression, version = "0.1.0") { - h5file <- rhdf5::H5Fcreate(file) - rhdf5::H5Fclose(h5file) - - write_zarr_encoding(file, "/", "anndata", "0.1.0") +write_empty_zarr <- function(store, obs_names, var_names, compression, version = "0.1.0") { + write_zarr_encoding(store, "/", "anndata", "0.1.0") - write_zarr_element(data.frame(row.names = obs_names), file, "/obs", compression) - write_zarr_element(data.frame(row.names = var_names), file, "/var", compression) + write_zarr_element(data.frame(row.names = obs_names), store, "/obs", compression) + write_zarr_element(data.frame(row.names = var_names), store, "/var", compression) - rhdf5::h5createGroup(file, "layers") - write_zarr_encoding(file, "/layers", "dict", "0.1.0") + pizzarr::zarr_create_group(store, path = "layers") + write_zarr_encoding(store, "/layers", "dict", "0.1.0") - rhdf5::h5createGroup(file, "obsm") - write_zarr_encoding(file, "/obsm", "dict", "0.1.0") + pizzarr::zarr_create_group(store, path = "obsm") + write_zarr_encoding(store, "/obsm", "dict", "0.1.0") - rhdf5::h5createGroup(file, "obsp") - write_zarr_encoding(file, "/obsp", "dict", "0.1.0") + pizzarr::zarr_create_group(store, path = "obsp") + write_zarr_encoding(store, "/obsp", "dict", "0.1.0") - rhdf5::h5createGroup(file, "uns") - write_zarr_encoding(file, "/uns", "dict", "0.1.0") + pizzarr::zarr_create_group(store, path = "uns") + write_zarr_encoding(store, "/uns", "dict", "0.1.0") - rhdf5::h5createGroup(file, "varm") - write_zarr_encoding(file, "/varm", "dict", "0.1.0") + pizzarr::zarr_create_group(store, path = "varm") + write_zarr_encoding(store, "/varm", "dict", "0.1.0") - rhdf5::h5createGroup(file, "varp") - write_zarr_encoding(file, "/varp", "dict", "0.1.0") + pizzarr::zarr_create_group(store, path = "varp") + write_zarr_encoding(store, "/varp", "dict", "0.1.0") } #' HDF5 path exists @@ -504,17 +466,17 @@ write_empty_h5ad <- function(file, obs_names, var_names, compression, version = #' @param target_path The path within the file to test for #' #' @return Whether the `path` exists in `file` -hdf5_path_exists <- function(file, target_path) { - if (substr(target_path, 1, 1) != "/") { - target_path <- paste0("/", target_path) - } - - content <- rhdf5::h5ls(file) - - paths <- file.path(content$group, content$name) - paths <- gsub("//", "/", paths) # Remove double slash for root paths - - target_path %in% paths +zarr_path_exists <- function(store, target_path) { + result <- tryCatch({ + store$get_item(target_path) + return(TRUE) + }, error = function(cond) { + if(pizzarr::is_key_error(cond)) { + return(FALSE) + } + stop(cond) + }) + return(result) } #' HDF5 write compressed @@ -532,19 +494,25 @@ hdf5_path_exists <- function(file, target_path) { #' one of `"none"`, `"gzip"` or `"lzf"`. Defaults to `"none"`. #' #' @return Whether the `path` exists in `file` -hdf5_write_compressed <- function(file, name, value, compression = c("none", "gzip", "lzf")) { +zarr_write_compressed <- function(store, name, value, compression = c("none", "gzip", "lzf")) { compression <- match.arg(compression) if (!is.null(dim(value))) { dims <- dim(value) } else { dims <- length(value) } - rhdf5::h5createDataset( - file, - name, - dims, - storage.mode = storage.mode(value), - filter = toupper(compression) - ) - rhdf5::h5write(value, file, name) + + if(is.integer(value)) { + dtype <- " file.info(h5ad_file_gzip)$size) + # TODO: expect things +}) + +test_that("writing lzf compressed files works", { + dummy <- generate_dataset(100, 200) + non_random_X <- matrix(5, 100, 200) # nolint + + adata <- AnnData( + X = non_random_X, + obs = dummy$obs, + var = dummy$var, + obs_names = dummy$obs_names, + var_names = dummy$var_names + ) + + store_none <- pizzarr::MemoryStore$new() + store_lzf <- pizzarr::MemoryStore$new() + + write_zarr(adata, store_none, compression = "none") + write_zarr(adata, store_lzf, compression = "lzf") + + #expect_true(file.info(h5ad_file_none)$size > file.info(h5ad_file_lzf)$size) + # TODO: expect things +}) diff --git a/tests/testthat/test-ZarrAnnData.R b/tests/testthat/test-ZarrAnnData.R new file mode 100644 index 00000000..97e6a3f3 --- /dev/null +++ b/tests/testthat/test-ZarrAnnData.R @@ -0,0 +1,195 @@ +skip_if_not_installed("pizzarr") + +file <- system.file("extdata", "example.zarr", package = "anndataR") +store <- pizzarr::DirectoryStore$new(file) + +test_that("opening H5AD works", { + adata <- ZarrAnnData$new(store) + expect_true(inherits(adata, "ZarrAnnData")) +}) + +adata <- ZarrAnnData$new(store) + +# GETTERS ---------------------------------------------------------------- +# trackstatus: class=ZarrAnnData, feature=test_get_X, status=done +test_that("reading X works", { + X <- adata$X + expect_s4_class(X, "dgRMatrix") + expect_equal(dim(X), c(50, 100)) +}) + +# trackstatus: class=ZarrAnnData, feature=test_get_layers, status=done +# test_that("reading layers works", { +# layers <- adata$layers +# expect_true(is.list(layers), "list") +# expect_equal( +# names(layers), +# c("counts", "csc_counts", "dense_X", "dense_counts") +# ) +# }) + +# test_that("reading obsm works", { +# obsm <- adata$obsm +# expect_true(is.list(obsm), "list") +# expect_equal( +# names(obsm), +# c("X_pca", "X_umap") +# ) +# }) + +# test_that("reading varm works", { +# varm <- adata$varm +# expect_true(is.list(varm), "list") +# expect_equal( +# names(varm), +# c("PCs") +# ) +# }) + +test_that("obsm/ varm validation", { + N_OBS <- 5 + N_VAR <- 3 + + mtx <- matrix( + 0, + N_OBS, + N_VAR + ) + + adata <- AnnData( + X = mtx, + obs_names = as.character(1:N_OBS), + var_names = as.character(1:N_VAR) + ) + + adata$obsm <- list(PCA = matrix(0, N_OBS, 4)) + adata$varm <- list(PCs = matrix(0, N_VAR, 4)) + + expect_error(adata$obsm <- list(PCA = matrix(0, 4, 4))) + expect_error(adata$varm <- list(PCs = matrix(0, 4, 4))) +}) + +test_that("obsp/ varp validation", { + N_OBS <- 5 + N_VAR <- 3 + + adata <- AnnData( + obs_names = as.character(1:N_OBS), + var_names = as.character(1:N_VAR) + ) + + adata$obsp <- list(graph1 = matrix(0, N_OBS, N_OBS)) + adata$varp <- list(graph1 = matrix(0, N_VAR, N_VAR)) + + expect_error(adata$obsp <- list(graph1 = matrix(0, 4, 4))) + expect_error(adata$varp <- list(graph1 = matrix(0, 4, 4))) +}) + +# trackstatus: class=ZarrAnnData, feature=test_get_obs, status=done +test_that("reading obs works", { + obs <- adata$obs + expect_s3_class(obs, "data.frame") + expect_equal( + colnames(obs), + c( + "Float", "FloatNA", "Int", "IntNA", "Bool", "BoolNA", "n_genes_by_counts", + "log1p_n_genes_by_counts", "total_counts", "log1p_total_counts", "leiden" + ) + ) +}) + +# trackstatus: class=ZarrAnnData, feature=test_get_var, status=done +test_that("reading var works", { + var <- adata$var + expect_s3_class(var, "data.frame") + expect_equal( + colnames(var), + c( + "String", "n_cells_by_counts", "mean_counts", "log1p_mean_counts", + "pct_dropout_by_counts", "total_counts", "log1p_total_counts", + "highly_variable", "means", "dispersions", "dispersions_norm" + ) + ) +}) + +# trackstatus: class=ZarrAnnData, feature=test_get_obs_names, status=done +test_that("reading obs names works", { + obs_names <- adata$obs_names + expect_vector(obs_names, ptype = character(), size = 50) +}) + +# trackstatus: class=ZarrAnnData, feature=test_get_var_names, status=done +test_that("reading var names works", { + var_names <- adata$var_names + expect_vector(var_names, ptype = character(), size = 100) +}) + +# SETTERS ---------------------------------------------------------------- +test_that("creating empty H5AD works", { + empty_store <- pizzarr::MemoryStore() + expect_silent(ZarrAnnData$new(empty_store, obs_names = 1:10, var_names = 1:20)) +}) + +# trackstatus: class=ZarrAnnData, feature=test_set_X, status=done +test_that("writing X works", { + store <- pizzarr::MemoryStore() + h5ad <- ZarrAnnData$new(store, obs_names = 1:10, var_names = 1:20) + + X <- matrix(rnorm(10 * 20), nrow = 10, ncol = 20) + expect_silent(h5ad$X <- X) +}) + +# trackstatus: class=ZarrAnnData, feature=test_set_layers, status=done +test_that("writing layers works", { + store <- pizzarr::MemoryStore() + h5ad <- ZarrAnnData$new(store, obs_names = 1:10, var_names = 1:20) + + X <- matrix(rnorm(10 * 20), nrow = 10, ncol = 20) + expect_silent(h5ad$layers <- list(layer1 = X, layer2 = X)) +}) + +# trackstatus: class=ZarrAnnData, feature=test_set_obs, status=done +test_that("writing obs works", { + store <- pizzarr::MemoryStore() + h5ad <- ZarrAnnData$new(store, obs_names = 1:10, var_names = 1:20) + + obs <- data.frame( + Letters = LETTERS[1:10], + Numbers = 1:10, + row.names = paste0("Row", 1:10) + ) + expect_warning(h5ad$obs <- obs, "should not have any rownames") + expect_identical(h5ad$obs_names, 1:10) +}) + +# trackstatus: class=ZarrAnnData, feature=test_set_var, status=done +test_that("writing var works", { + store <- pizzarr::MemoryStore() + h5ad <- ZarrAnnData$new(store, obs_names = 1:10, var_names = 1:20) + + var <- data.frame( + Letters = LETTERS[1:20], + Numbers = 1:20, + row.names = paste0("Row", 1:20) + ) + expect_warning(h5ad$var <- var, "should not have any rownames") + expect_identical(h5ad$var_names, 1:20) +}) + +# trackstatus: class=ZarrAnnData, feature=test_set_obs_names, status=done +test_that("writing obs names works", { + store <- pizzarr::MemoryStore() + h5ad <- ZarrAnnData$new(store, obs_names = 1:10, var_names = 1:20) + + h5ad$obs_names <- LETTERS[1:10] + expect_identical(h5ad$obs_names, LETTERS[1:10]) +}) + +# trackstatus: class=ZarrAnnData, feature=test_set_var_names, status=done +test_that("writing var names works", { + store <- pizzarr::MemoryStore() + h5ad <- ZarrAnnData$new(store, obs_names = 1:10, var_names = 1:20) + + h5ad$var_names <- LETTERS[1:20] + expect_identical(h5ad$var_names, LETTERS[1:20]) +}) From a15513a77ff971b8450fa0af79b0a8e0904f3684 Mon Sep 17 00:00:00 2001 From: Mark Keller <7525285+keller-mark@users.noreply.github.com> Date: Tue, 7 May 2024 14:23:57 -0400 Subject: [PATCH 06/25] Fix more tests --- R/write_zarr_helpers.R | 4 +--- tests/testthat/test-Zarr-write.R | 4 ++-- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/R/write_zarr_helpers.R b/R/write_zarr_helpers.R index e2025655..aa37be8a 100644 --- a/R/write_zarr_helpers.R +++ b/R/write_zarr_helpers.R @@ -153,8 +153,6 @@ write_zarr_sparse_array <- function(value, store, name, compression, version = " ) } - print(value) - # Write sparse matrix g <- pizzarr::zarr_create_group(store, path = name) zarr_write_compressed(store, paste0(name, "/indices"), attr(value, indices_attr), compression) @@ -238,7 +236,7 @@ write_zarr_string_array <- function(value, store, name, compression, version = " dims <- length(value) } - object_codec = pizzarr::VLenUtf8Codec$new() + object_codec <- pizzarr::VLenUtf8Codec$new() data <- array(data = value, dim = dims) a <- pizzarr::zarr_create_array(data, store = store, path = name, dtype = "|O", object_codec = object_codec, shape = dims) diff --git a/tests/testthat/test-Zarr-write.R b/tests/testthat/test-Zarr-write.R index d0be2e33..75c1f8d9 100644 --- a/tests/testthat/test-Zarr-write.R +++ b/tests/testthat/test-Zarr-write.R @@ -17,7 +17,7 @@ test_that("Writing Zarr sparse arrays works", { array <- matrix(rnorm(20), nrow = 5, ncol = 4) csc_array <- as(array, "CsparseMatrix") - write_zarr_element(csc_array, store, "csc_array", compression = "none") + expect_silent(write_zarr_element(csc_array, store, "csc_array", compression = "none")) expect_true(zarr_path_exists(store, "csc_array")) expect_true(zarr_path_exists(store, "csc_array/data")) expect_true(zarr_path_exists(store, "csc_array/indices")) @@ -66,7 +66,7 @@ test_that("Writing H5AD nullable integers works", { test_that("Writing H5AD string arrays works", { string <- LETTERS[1:5] - expect_silent(write_zarr_element(string, store, "string_array")) + write_zarr_element(string, store, "string_array") expect_true(zarr_path_exists(store, "string_array")) g <- pizzarr::zarr_open(store, path = "string_array") attrs <- g$get_attrs()$to_list() From 1ef1be6d2fc16684ebee93f12598fc92b631f6d2 Mon Sep 17 00:00:00 2001 From: Mark Keller <7525285+keller-mark@users.noreply.github.com> Date: Tue, 7 May 2024 14:34:01 -0400 Subject: [PATCH 07/25] Zarr df writing --- R/write_zarr_helpers.R | 6 ++++-- tests/testthat/test-Zarr-write.R | 26 +++++++++++++------------- 2 files changed, 17 insertions(+), 15 deletions(-) diff --git a/R/write_zarr_helpers.R b/R/write_zarr_helpers.R index aa37be8a..0dca6d27 100644 --- a/R/write_zarr_helpers.R +++ b/R/write_zarr_helpers.R @@ -257,7 +257,7 @@ write_zarr_string_array <- function(value, store, name, compression, version = " #' @param version Encoding version of the element to write write_zarr_categorical <- function(value, store, name, compression, version = "0.2.0") { g <- pizzarr::zarr_create_group(store, path = name) - zarr_write_compressed(store, paste0(name, "/categories"), as.integer(levels(value)), compression) + zarr_write_compressed(store, paste0(name, "/categories"), levels(value), compression) zarr_write_compressed(store, paste0(name, "/codes"), as.integer(value), compression) zarr_write_compressed(store, paste0(name, "/ordered"), is.ordered(value), compression) @@ -500,6 +500,7 @@ zarr_write_compressed <- function(store, name, value, compression = c("none", "g dims <- length(value) } + object_codec <- NA if(is.integer(value)) { dtype <- " Date: Tue, 7 May 2024 14:58:42 -0400 Subject: [PATCH 08/25] WIP: ZarrAnnData class --- R/Seurat.R | 2 +- R/SingleCellExperiment.R | 2 +- R/ZarrAnnData.R | 2 +- R/anndata_constructors.R | 5 +++-- R/write_zarr.R | 10 ++++------ R/write_zarr_helpers.R | 29 +++++++++++++++-------------- tests/testthat/test-Zarr-write.R | 4 ++-- tests/testthat/test-ZarrAnnData.R | 14 +++++++------- 8 files changed, 34 insertions(+), 34 deletions(-) diff --git a/R/Seurat.R b/R/Seurat.R index 9bdc236a..2edcf68d 100644 --- a/R/Seurat.R +++ b/R/Seurat.R @@ -117,7 +117,7 @@ to_Seurat <- function(obj) { # nolint #' #' @export # TODO: add tests with Seurat objects not created by anndataR -from_Seurat <- function(seurat_obj, output_class = c("InMemoryAnnData", "HDF5AnnData"), assay = NULL, X = "counts", ...) { # nolint +from_Seurat <- function(seurat_obj, output_class = c("InMemoryAnnData", "HDF5AnnData", "ZarrAnnData"), assay = NULL, X = "counts", ...) { # nolint stopifnot(inherits(seurat_obj, "Seurat")) diff --git a/R/SingleCellExperiment.R b/R/SingleCellExperiment.R index 7c3a7d6a..3f4f6fff 100644 --- a/R/SingleCellExperiment.R +++ b/R/SingleCellExperiment.R @@ -112,7 +112,7 @@ to_SingleCellExperiment <- function(object) { # nolint #' from_SingleCellExperiment(sce, "InMemory") #' #' @export -from_SingleCellExperiment <- function(sce, output_class = c("InMemory", "HDF5AnnData"), ...) { # nolint +from_SingleCellExperiment <- function(sce, output_class = c("InMemory", "HDF5AnnData", "ZarrAnnData"), ...) { # nolint stopifnot( inherits(sce, "SingleCellExperiment") ) diff --git a/R/ZarrAnnData.R b/R/ZarrAnnData.R index 7cba6710..1de5ebca 100644 --- a/R/ZarrAnnData.R +++ b/R/ZarrAnnData.R @@ -269,7 +269,7 @@ ZarrAnnData <- R6::R6Class("ZarrAnnData", # nolint compression <- match.arg(compression) private$.compression <- compression - + root <- pizzarr::zarr_open_group(store, path = "/") diff --git a/R/anndata_constructors.R b/R/anndata_constructors.R index 54d21ec7..b5646ebf 100644 --- a/R/anndata_constructors.R +++ b/R/anndata_constructors.R @@ -4,7 +4,8 @@ anndata_constructors <- function() { list( "HDF5AnnData" = HDF5AnnData, - "InMemoryAnnData" = InMemoryAnnData + "InMemoryAnnData" = InMemoryAnnData, + "ZarrAnnData" = ZarrAnnData ) } @@ -14,7 +15,7 @@ anndata_constructors <- function() { #' or `"InMemoryAnnData"`. #' #' @noRd -get_anndata_constructor <- function(class = c("HDF5AnnData", "InMemoryAnnData")) { +get_anndata_constructor <- function(class = c("HDF5AnnData", "ZarrAnnData", "InMemoryAnnData")) { # TODO: also support directly passing the correct class? class <- match.arg(class) anndata_constructors()[[class]] diff --git a/R/write_zarr.R b/R/write_zarr.R index 327c2bb9..166fed90 100644 --- a/R/write_zarr.R +++ b/R/write_zarr.R @@ -67,26 +67,24 @@ #' # h5ad_file <- tempfile(fileext = ".h5ad") #' # write_zarr(obj, h5ad_file) #' } -write_zarr <- function(object, path, compression = c("none", "gzip", "lzf")) { +write_zarr <- function(object, store, compression = c("none", "gzip", "lzf")) { if (inherits(object, "SingleCellExperiment")) { from_SingleCellExperiment( object, output_class = "ZarrAnnData", - file = path, + store = store, compression = compression ) } else if (inherits(object, "Seurat")) { from_Seurat( object, output_class = "ZarrAnnData", - file = path, + store = store, compression = compression ) } else if (inherits(object, "AbstractAnnData")) { - to_ZarrAnnData(object, path, compression = compression) + to_ZarrAnnData(object, store, compression = compression) } else { stop("Unable to write object of class: ", class(object)) } - - invisible(path) } diff --git a/R/write_zarr_helpers.R b/R/write_zarr_helpers.R index 0dca6d27..4918d8e9 100644 --- a/R/write_zarr_helpers.R +++ b/R/write_zarr_helpers.R @@ -430,28 +430,29 @@ write_zarr_data_frame_index <- function(value, store, name, compression, index_n #' one of `"none"`, `"gzip"` or `"lzf"`. Defaults to `"none"`. #' @param version The H5AD version to write write_empty_zarr <- function(store, obs_names, var_names, compression, version = "0.1.0") { + pizzarr::zarr_create_group(store, path = "/") write_zarr_encoding(store, "/", "anndata", "0.1.0") - write_zarr_element(data.frame(row.names = obs_names), store, "/obs", compression) - write_zarr_element(data.frame(row.names = var_names), store, "/var", compression) + # write_zarr_element(data.frame(row.names = obs_names), store, "/obs", compression) + # write_zarr_element(data.frame(row.names = var_names), store, "/var", compression) - pizzarr::zarr_create_group(store, path = "layers") - write_zarr_encoding(store, "/layers", "dict", "0.1.0") + # pizzarr::zarr_create_group(store, path = "layers") + # write_zarr_encoding(store, "/layers", "dict", "0.1.0") - pizzarr::zarr_create_group(store, path = "obsm") - write_zarr_encoding(store, "/obsm", "dict", "0.1.0") + # pizzarr::zarr_create_group(store, path = "obsm") + # write_zarr_encoding(store, "/obsm", "dict", "0.1.0") - pizzarr::zarr_create_group(store, path = "obsp") - write_zarr_encoding(store, "/obsp", "dict", "0.1.0") + # pizzarr::zarr_create_group(store, path = "obsp") + # write_zarr_encoding(store, "/obsp", "dict", "0.1.0") - pizzarr::zarr_create_group(store, path = "uns") - write_zarr_encoding(store, "/uns", "dict", "0.1.0") + # pizzarr::zarr_create_group(store, path = "uns") + # write_zarr_encoding(store, "/uns", "dict", "0.1.0") - pizzarr::zarr_create_group(store, path = "varm") - write_zarr_encoding(store, "/varm", "dict", "0.1.0") + # pizzarr::zarr_create_group(store, path = "varm") + # write_zarr_encoding(store, "/varm", "dict", "0.1.0") - pizzarr::zarr_create_group(store, path = "varp") - write_zarr_encoding(store, "/varp", "dict", "0.1.0") + # pizzarr::zarr_create_group(store, path = "varp") + # write_zarr_encoding(store, "/varp", "dict", "0.1.0") } #' HDF5 path exists diff --git a/tests/testthat/test-Zarr-write.R b/tests/testthat/test-Zarr-write.R index 9d6ff24a..812c98d0 100644 --- a/tests/testthat/test-Zarr-write.R +++ b/tests/testthat/test-Zarr-write.R @@ -179,10 +179,10 @@ test_that("writing Zarr from Seurat works", { skip_if_not_installed("SeuratObject") skip("while Seurat converter is failing") - file <- withr::local_file("Seurat.h5ad") + store <- pizzarr::MemoryStore$new() seurat <- generate_dataset(format = "Seurat") - write_zarr(seurat, file) + write_zarr(seurat, store) expect_true(file.exists(file)) }) diff --git a/tests/testthat/test-ZarrAnnData.R b/tests/testthat/test-ZarrAnnData.R index 97e6a3f3..d0801b4b 100644 --- a/tests/testthat/test-ZarrAnnData.R +++ b/tests/testthat/test-ZarrAnnData.R @@ -126,13 +126,13 @@ test_that("reading var names works", { # SETTERS ---------------------------------------------------------------- test_that("creating empty H5AD works", { - empty_store <- pizzarr::MemoryStore() + empty_store <- pizzarr::MemoryStore$new() expect_silent(ZarrAnnData$new(empty_store, obs_names = 1:10, var_names = 1:20)) }) # trackstatus: class=ZarrAnnData, feature=test_set_X, status=done test_that("writing X works", { - store <- pizzarr::MemoryStore() + store <- pizzarr::MemoryStore$new() h5ad <- ZarrAnnData$new(store, obs_names = 1:10, var_names = 1:20) X <- matrix(rnorm(10 * 20), nrow = 10, ncol = 20) @@ -141,7 +141,7 @@ test_that("writing X works", { # trackstatus: class=ZarrAnnData, feature=test_set_layers, status=done test_that("writing layers works", { - store <- pizzarr::MemoryStore() + store <- pizzarr::MemoryStore$new() h5ad <- ZarrAnnData$new(store, obs_names = 1:10, var_names = 1:20) X <- matrix(rnorm(10 * 20), nrow = 10, ncol = 20) @@ -150,7 +150,7 @@ test_that("writing layers works", { # trackstatus: class=ZarrAnnData, feature=test_set_obs, status=done test_that("writing obs works", { - store <- pizzarr::MemoryStore() + store <- pizzarr::MemoryStore$new() h5ad <- ZarrAnnData$new(store, obs_names = 1:10, var_names = 1:20) obs <- data.frame( @@ -164,7 +164,7 @@ test_that("writing obs works", { # trackstatus: class=ZarrAnnData, feature=test_set_var, status=done test_that("writing var works", { - store <- pizzarr::MemoryStore() + store <- pizzarr::MemoryStore$new() h5ad <- ZarrAnnData$new(store, obs_names = 1:10, var_names = 1:20) var <- data.frame( @@ -178,7 +178,7 @@ test_that("writing var works", { # trackstatus: class=ZarrAnnData, feature=test_set_obs_names, status=done test_that("writing obs names works", { - store <- pizzarr::MemoryStore() + store <- pizzarr::MemoryStore$new() h5ad <- ZarrAnnData$new(store, obs_names = 1:10, var_names = 1:20) h5ad$obs_names <- LETTERS[1:10] @@ -187,7 +187,7 @@ test_that("writing obs names works", { # trackstatus: class=ZarrAnnData, feature=test_set_var_names, status=done test_that("writing var names works", { - store <- pizzarr::MemoryStore() + store <- pizzarr::MemoryStore$new() h5ad <- ZarrAnnData$new(store, obs_names = 1:10, var_names = 1:20) h5ad$var_names <- LETTERS[1:20] From 27ce6c1d5d215ae82e54ecde7ddacba3859b245c Mon Sep 17 00:00:00 2001 From: Mark Keller <7525285+keller-mark@users.noreply.github.com> Date: Tue, 7 May 2024 16:05:30 -0400 Subject: [PATCH 09/25] Tests passing --- R/ZarrAnnData.R | 1 + R/read_zarr_helpers.R | 25 +++++----- R/write_zarr_helpers.R | 83 ++++++++++++++++--------------- tests/testthat/test-Zarr-read.R | 4 +- tests/testthat/test-ZarrAnnData.R | 56 ++++++++++----------- 5 files changed, 86 insertions(+), 83 deletions(-) diff --git a/R/ZarrAnnData.R b/R/ZarrAnnData.R index 1de5ebca..07da16a4 100644 --- a/R/ZarrAnnData.R +++ b/R/ZarrAnnData.R @@ -270,6 +270,7 @@ ZarrAnnData <- R6::R6Class("ZarrAnnData", # nolint compression <- match.arg(compression) private$.compression <- compression + root <- pizzarr::zarr_open_group(store, path = "/") diff --git a/R/read_zarr_helpers.R b/R/read_zarr_helpers.R index d3bdc0a7..2d1ed76f 100644 --- a/R/read_zarr_helpers.R +++ b/R/read_zarr_helpers.R @@ -389,12 +389,9 @@ read_zarr_mapping <- function(store, name, version = "0.1.0") { version <- match.arg(version) groupname <- paste0("/", name) - stop("Reading mappings is not yet implemented for Zarr (and can only be implemented Stores that support listdir)") + columns <- store$listdir(name) - #file_structure <- rhdf5::h5ls(file, recursive = TRUE) - #columns <- file_structure[file_structure$group == groupname, "name"] - - #read_zarr_collection(file, name, columns) + read_zarr_collection(store, name, columns) } #' Read H5AD data frame @@ -486,13 +483,17 @@ read_zarr_collection <- function(store, name, column_order) { columns <- list() for (col_name in column_order) { new_name <- paste0(name, "/", col_name) - encoding <- read_zarr_encoding(store, new_name) - columns[[col_name]] <- read_zarr_element( - store = store, - name = new_name, - type = encoding$type, - version = encoding$version - ) + tryCatch({ + encoding <- read_zarr_encoding(store, new_name) + columns[[col_name]] <- read_zarr_element( + store = store, + name = new_name, + type = encoding$type, + version = encoding$version + ) + }, error = function(cond) { + warning("Not reading file '", new_name, "' in collection") + }) } columns } diff --git a/R/write_zarr_helpers.R b/R/write_zarr_helpers.R index 4918d8e9..f332115a 100644 --- a/R/write_zarr_helpers.R +++ b/R/write_zarr_helpers.R @@ -61,25 +61,24 @@ write_zarr_element <- function(value, store, name, compression = c("none", "gzip stop("Writing '", class(value), "' objects to H5AD files is not supported") } - write_fun(value = value, store = store, name = name, compression = compression, ...) - - # tryCatch( - # { - # write_fun(value = value, store = store, name = name, compression = compression, ...) - # }, - # error = function(e) { - # message <- paste0( - # "Could not write element '", name, "' of type '", class(value), "':\n", - # conditionMessage(e) - # ) - # if (stop_on_error) { - # stop(message) - # } else { - # warning(message) - # return(NULL) - # } - # } - # ) + + tryCatch( + { + write_fun(value = value, store = store, name = name, compression = compression, ...) + }, + error = function(e) { + message <- paste0( + "Could not write element '", name, "' of type '", class(value), "':\n", + conditionMessage(e) + ) + if (stop_on_error) { + stop(message) + } else { + warning(message) + return(NULL) + } + } + ) } #' Write H5AD encoding @@ -154,7 +153,7 @@ write_zarr_sparse_array <- function(value, store, name, compression, version = " } # Write sparse matrix - g <- pizzarr::zarr_create_group(store, path = name) + g <- pizzarr::zarr_open_group(store, path = name) zarr_write_compressed(store, paste0(name, "/indices"), attr(value, indices_attr), compression) zarr_write_compressed(store, paste0(name, "/indptr"), value@p, compression) zarr_write_compressed(store, paste0(name, "/data"), value@x, compression) @@ -180,7 +179,7 @@ write_zarr_sparse_array <- function(value, store, name, compression, version = " #' @param version Encoding version of the element to write write_zarr_nullable_boolean <- function(value, store, name, compression, version = "0.1.0") { # write mask and values - g <- pizzarr::zarr_create_group(store, path = name) + g <- pizzarr::zarr_open_group(store, path = name) value_no_na <- value value_no_na[is.na(value_no_na)] <- FALSE @@ -205,7 +204,7 @@ write_zarr_nullable_boolean <- function(value, store, name, compression, version #' @param version Encoding version of the element to write write_zarr_nullable_integer <- function(value, store, name, compression, version = "0.1.0") { # write mask and values - g <- pizzarr::zarr_create_group(store, path = name) + g <- pizzarr::zarr_open_group(store, path = name) value_no_na <- value value_no_na[is.na(value_no_na)] <- -1L @@ -256,7 +255,7 @@ write_zarr_string_array <- function(value, store, name, compression, version = " #' one of `"none"`, `"gzip"` or `"lzf"`. Defaults to `"none"`. #' @param version Encoding version of the element to write write_zarr_categorical <- function(value, store, name, compression, version = "0.2.0") { - g <- pizzarr::zarr_create_group(store, path = name) + g <- pizzarr::zarr_open_group(store, path = name) zarr_write_compressed(store, paste0(name, "/categories"), levels(value), compression) zarr_write_compressed(store, paste0(name, "/codes"), as.integer(value), compression) zarr_write_compressed(store, paste0(name, "/ordered"), is.ordered(value), compression) @@ -318,7 +317,7 @@ write_zarr_numeric_scalar <- function(value, store, name, compression, version = #' one of `"none"`, `"gzip"` or `"lzf"`. Defaults to `"none"`. #' @param version Encoding version of the element to write write_zarr_mapping <- function(value, store, name, compression, version = "0.1.0") { - g <- pizzarr::zarr_create_group(store, path = name) + g <- pizzarr::zarr_open_group(store, path = name) # Write mapping elements for (key in names(value)) { @@ -345,7 +344,7 @@ write_zarr_mapping <- function(value, store, name, compression, version = "0.1.0 #' @param version Encoding version of the element to write write_zarr_data_frame <- function(value, store, name, compression, index = NULL, version = "0.2.0") { - g <- pizzarr::zarr_create_group(store, path = name) + g <- pizzarr::zarr_open_group(store, path = name) write_zarr_encoding(store, name, "dataframe", version) if (is.null(index)) { @@ -401,7 +400,9 @@ write_zarr_data_frame <- function(value, store, name, compression, index = NULL, #' @param index_name Name of the data frame column storing the index write_zarr_data_frame_index <- function(value, store, name, compression, index_name) { if (!zarr_path_exists(store, name)) { - stop("The data frame '", name, "' does not exist in store") + warning("The data frame '", name, "' does not exist in store. Creating it.") + g <- pizzarr::zarr_open_group(store, path = name) + write_zarr_encoding(store, name, "dataframe", "0.2.0") } encoding <- read_zarr_encoding(store, name) @@ -430,29 +431,29 @@ write_zarr_data_frame_index <- function(value, store, name, compression, index_n #' one of `"none"`, `"gzip"` or `"lzf"`. Defaults to `"none"`. #' @param version The H5AD version to write write_empty_zarr <- function(store, obs_names, var_names, compression, version = "0.1.0") { - pizzarr::zarr_create_group(store, path = "/") + pizzarr::zarr_open_group(store, path = "/") write_zarr_encoding(store, "/", "anndata", "0.1.0") - # write_zarr_element(data.frame(row.names = obs_names), store, "/obs", compression) - # write_zarr_element(data.frame(row.names = var_names), store, "/var", compression) + write_zarr_element(data.frame(row.names = obs_names), store, "/obs", compression) + write_zarr_element(data.frame(row.names = var_names), store, "/var", compression) - # pizzarr::zarr_create_group(store, path = "layers") - # write_zarr_encoding(store, "/layers", "dict", "0.1.0") + pizzarr::zarr_open_group(store, path = "layers") + write_zarr_encoding(store, "/layers", "dict", "0.1.0") - # pizzarr::zarr_create_group(store, path = "obsm") - # write_zarr_encoding(store, "/obsm", "dict", "0.1.0") + pizzarr::zarr_open_group(store, path = "obsm") + write_zarr_encoding(store, "/obsm", "dict", "0.1.0") - # pizzarr::zarr_create_group(store, path = "obsp") - # write_zarr_encoding(store, "/obsp", "dict", "0.1.0") + pizzarr::zarr_open_group(store, path = "obsp") + write_zarr_encoding(store, "/obsp", "dict", "0.1.0") - # pizzarr::zarr_create_group(store, path = "uns") - # write_zarr_encoding(store, "/uns", "dict", "0.1.0") + pizzarr::zarr_open_group(store, path = "uns") + write_zarr_encoding(store, "/uns", "dict", "0.1.0") - # pizzarr::zarr_create_group(store, path = "varm") - # write_zarr_encoding(store, "/varm", "dict", "0.1.0") + pizzarr::zarr_open_group(store, path = "varm") + write_zarr_encoding(store, "/varm", "dict", "0.1.0") - # pizzarr::zarr_create_group(store, path = "varp") - # write_zarr_encoding(store, "/varp", "dict", "0.1.0") + pizzarr::zarr_open_group(store, path = "varp") + write_zarr_encoding(store, "/varp", "dict", "0.1.0") } #' HDF5 path exists diff --git a/tests/testthat/test-Zarr-read.R b/tests/testthat/test-Zarr-read.R index 5a57d6ee..319d38a3 100644 --- a/tests/testthat/test-Zarr-read.R +++ b/tests/testthat/test-Zarr-read.R @@ -108,14 +108,14 @@ test_that("reading dataframes works", { ) }) -test_that("reading H5AD as SingleCellExperiment works", { +test_that("reading Zarr as SingleCellExperiment works", { skip_if_not_installed("SingleCellExperiment") sce <- read_zarr(store, to = "SingleCellExperiment") expect_s4_class(sce, "SingleCellExperiment") }) -test_that("reading H5AD as Seurat works", { +test_that("reading Zarr as Seurat works", { skip_if_not_installed("SeuratObject") # TODO: remove this suppression when the to_seurat, from_seurat functions are updated. diff --git a/tests/testthat/test-ZarrAnnData.R b/tests/testthat/test-ZarrAnnData.R index d0801b4b..7e8a0892 100644 --- a/tests/testthat/test-ZarrAnnData.R +++ b/tests/testthat/test-ZarrAnnData.R @@ -19,32 +19,32 @@ test_that("reading X works", { }) # trackstatus: class=ZarrAnnData, feature=test_get_layers, status=done -# test_that("reading layers works", { -# layers <- adata$layers -# expect_true(is.list(layers), "list") -# expect_equal( -# names(layers), -# c("counts", "csc_counts", "dense_X", "dense_counts") -# ) -# }) - -# test_that("reading obsm works", { -# obsm <- adata$obsm -# expect_true(is.list(obsm), "list") -# expect_equal( -# names(obsm), -# c("X_pca", "X_umap") -# ) -# }) - -# test_that("reading varm works", { -# varm <- adata$varm -# expect_true(is.list(varm), "list") -# expect_equal( -# names(varm), -# c("PCs") -# ) -# }) +test_that("reading layers works", { + layers <- adata$layers + expect_true(is.list(layers), "list") + expect_equal( + names(layers), + c("counts", "csc_counts", "dense_X", "dense_counts") + ) +}) + +test_that("reading obsm works", { + obsm <- adata$obsm + expect_true(is.list(obsm), "list") + expect_equal( + names(obsm), + c("X_pca", "X_umap") + ) +}) + +test_that("reading varm works", { + varm <- adata$varm + expect_true(is.list(varm), "list") + expect_equal( + names(varm), + c("PCs") + ) +}) test_that("obsm/ varm validation", { N_OBS <- 5 @@ -125,9 +125,9 @@ test_that("reading var names works", { }) # SETTERS ---------------------------------------------------------------- -test_that("creating empty H5AD works", { +test_that("creating empty Zarr works", { empty_store <- pizzarr::MemoryStore$new() - expect_silent(ZarrAnnData$new(empty_store, obs_names = 1:10, var_names = 1:20)) + ZarrAnnData$new(empty_store, obs_names = 1:10, var_names = 1:20) }) # trackstatus: class=ZarrAnnData, feature=test_set_X, status=done From 87907159024d7c3152aedadb4a0196e373c6227a Mon Sep 17 00:00:00 2001 From: Mark Keller <7525285+keller-mark@users.noreply.github.com> Date: Wed, 8 May 2024 10:24:54 -0400 Subject: [PATCH 10/25] Tests that compare h5ad to zarr --- tests/testthat/test-h5ad-zarr.R | 123 ++++++++++++++++++++++++++++++++ 1 file changed, 123 insertions(+) create mode 100644 tests/testthat/test-h5ad-zarr.R diff --git a/tests/testthat/test-h5ad-zarr.R b/tests/testthat/test-h5ad-zarr.R new file mode 100644 index 00000000..9ea0e4e0 --- /dev/null +++ b/tests/testthat/test-h5ad-zarr.R @@ -0,0 +1,123 @@ +skip_if_not_installed("rhdf5") +skip_if_not_installed("pizzarr") + +file <- system.file("extdata", "example.h5ad", package = "anndataR") + +zarr_dir <- system.file("extdata", "example.zarr", package = "anndataR") +store <- pizzarr::DirectoryStore$new(zarr_dir) + +test_that("reading dense matrices is same for h5ad and zarr", { + mat_h5ad <- read_h5ad_dense_array(file, "layers/dense_counts") + mat_zarr <- read_zarr_dense_array(store, "layers/dense_counts") + expect_equal(mat_h5ad, mat_zarr) + + mat_h5ad <- read_h5ad_dense_array(file, "layers/dense_X") + mat_zarr <- read_zarr_dense_array(store, "layers/dense_X") + expect_equal(mat_h5ad, mat_zarr) +}) + +test_that("reading sparse matrices is same for h5ad and zarr", { + mat_h5ad <- read_h5ad_sparse_array(file, "layers/csc_counts", type = "csc") + mat_zarr <- read_zarr_sparse_array(store, "layers/csc_counts", type = "csc") + expect_equal(mat_h5ad, mat_zarr) + + mat_h5ad <- read_h5ad_sparse_array(file, "layers/counts", type = "csr") + mat_zarr <- read_zarr_sparse_array(store, "layers/counts", type = "csr") + expect_equal(mat_h5ad, mat_zarr) +}) + +# test_that("reading recarrays works", { +# array_list <- read_h5ad_rec_array( +# file, "uns/rank_genes_groups/logfoldchanges" +# ) +# expect_true(is.list(array_list)) +# expect_equal(names(array_list), c("0", "1", "2", "3", "4", "5")) +# for (array in array_list) { +# expect_true(is.array(array)) +# expect_type(array, "double") +# expect_equal(dim(array), 100) +# } +# }) + +test_that("reading 1D numeric arrays is same for h5ad and zarr", { + array_1d_h5ad <- read_h5ad_dense_array(file, "obs/Int") + array_1d_zarr <- read_zarr_dense_array(store, "obs/Int") + expect_equal(array_1d_h5ad, array_1d_zarr) + + array_1d_h5ad <- read_h5ad_dense_array(file, "obs/Float") + array_1d_zarr <- read_zarr_dense_array(store, "obs/Float") + expect_equal(array_1d_h5ad, array_1d_zarr) +}) + +test_that("reading 1D sparse numeric arrays is same for h5ad and zarr", { + array_1d_h5ad <- read_h5ad_sparse_array(file, "uns/Sparse1D", type = "csc") + array_1d_zarr <- read_zarr_sparse_array(store, "uns/Sparse1D", type = "csc") + expect_equal(array_1d_h5ad, array_1d_zarr) +}) + +test_that("reading 1D nullable arrays is same for h5ad and zarr", { + array_1d_h5ad <- read_h5ad_nullable_integer(file, "obs/IntNA") + array_1d_zarr <- read_zarr_nullable_integer(store, "obs/IntNA") + expect_equal(array_1d_h5ad, array_1d_zarr) + + array_1d_h5ad <- read_h5ad_dense_array(file, "obs/FloatNA") + array_1d_zarr <- read_zarr_dense_array(store, "obs/FloatNA") + expect_equal(array_1d_h5ad, array_1d_zarr) + + array_1d_h5ad <- read_h5ad_nullable_boolean(file, "obs/Bool") + array_1d_zarr <- read_zarr_nullable_boolean(store, "obs/Bool") + expect_equal(array_1d_h5ad, array_1d_zarr) + + array_1d_h5ad <- read_h5ad_nullable_boolean(file, "obs/BoolNA") + array_1d_zarr <- read_zarr_nullable_boolean(store, "obs/BoolNA") + expect_equal(array_1d_h5ad, array_1d_zarr) +}) + +test_that("reading string scalars is same for h5ad and zarr", { + scalar_h5ad <- read_h5ad_string_scalar(file, "uns/StringScalar") + scalar_zarr <- read_zarr_string_scalar(store, "uns/StringScalar") + expect_equal(scalar_h5ad, scalar_zarr) +}) + +test_that("reading numeric scalars is same for h5ad and zarr", { + scalar_h5ad <- read_h5ad_numeric_scalar(file, "uns/IntScalar") + scalar_zarr <- read_zarr_numeric_scalar(store, "uns/IntScalar") + expect_equal(scalar_h5ad, scalar_zarr) +}) + +test_that("reading string arrays is same for h5ad and zarr", { + array_h5ad <- read_h5ad_string_array(file, "uns/String") + array_zarr <- read_zarr_string_array(store, "uns/String") + expect_equal(array_h5ad, array_zarr) + + array_h5ad <- read_h5ad_string_array(file, "uns/String2D") + array_zarr <- read_zarr_string_array(store, "uns/String2D") + expect_equal(array_h5ad, array_zarr) +}) + +# test_that("reading mappings is same for h5ad and zarr", { +# mapping_h5ad <- read_h5ad_mapping(file, "uns") +# mapping_zarr <- read_zarr_mapping(store, "uns") + +# expect_equal(mapping_h5ad, mapping_zarr) +# }) + +test_that("reading dataframes works", { + df_h5ad <- read_h5ad_data_frame(file, "obs", include_index = TRUE) + df_zarr <- read_zarr_data_frame(store, "obs", include_index = TRUE) + + expect_equal(df_h5ad, df_zarr) +}) + +test_that("reading H5AD as SingleCellExperiment is same for h5ad and zarr", { + skip_if_not_installed("SingleCellExperiment") + + sce_h5ad <- read_h5ad(file, to = "SingleCellExperiment") + # h5ad reads this column as characters like 'TRUE', 'FALSE', while zarr reads as logical + sce_h5ad@rowRanges@elementMetadata@listData$highly_variable <- as.logical( + sce_h5ad@rowRanges@elementMetadata@listData$highly_variable + ) + sce_zarr <- read_zarr(store, to = "SingleCellExperiment") + + expect_equal(sce_h5ad, sce_zarr) +}) From bb0c6c779a2c0f7fa9ce43e309b2745ea8061420 Mon Sep 17 00:00:00 2001 From: Mark Keller <7525285+keller-mark@users.noreply.github.com> Date: Fri, 17 May 2024 13:50:54 -0400 Subject: [PATCH 11/25] Use Rarr to read full numeric arrays --- R/read_zarr_helpers.R | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/R/read_zarr_helpers.R b/R/read_zarr_helpers.R index 2d1ed76f..f7b668db 100644 --- a/R/read_zarr_helpers.R +++ b/R/read_zarr_helpers.R @@ -96,6 +96,18 @@ read_zarr_array <- function(store, name) { return(nested_arr$data) } +read_zarr_array_with_rarr <- function(store, name) { + if("DirectoryStore" %in% class(store)) { + store_root <- store$root + arr <- Rarr::read_zarr_array( + zarr_array_path = file.path(store_root, name), + ) + return(arr) + } + # Use pizzarr as a fallback + return(read_zarr_array(store, name)) +} + #' Read H5AD dense array #' #' Read a dense array from an H5AD file @@ -111,7 +123,7 @@ read_zarr_dense_array <- function(store, name, version = "0.2.0") { version <- match.arg(version) # Extract the NestedArray contents as a base R array. - darr <- read_zarr_array(store, name) + darr <- read_zarr_array_with_rarr(store, name) # TODO: ideally, native = TRUE should take care of the row order and column order, @@ -161,9 +173,9 @@ read_zarr_sparse_array <- function(store, name, version = "0.1.0", g <- pizzarr::zarr_open_group(store, path = name) - data <- as.vector(read_zarr_array(store, paste0(name, "/data"))) - indices <- as.vector(read_zarr_array(store, paste0(name, "/indices"))) - indptr <- as.vector(read_zarr_array(store, paste0(name, "/indptr"))) + data <- as.vector(read_zarr_array_with_rarr(store, paste0(name, "/data"))) + indices <- as.vector(read_zarr_array_with_rarr(store, paste0(name, "/indices"))) + indptr <- as.vector(read_zarr_array_with_rarr(store, paste0(name, "/indptr"))) shape <- as.vector(unlist(g$get_attrs()$to_list()$shape, use.names = FALSE)) if (type == "csc_matrix") { From 0456ecd7586cfa382fbdc10c35d072c07f1d1f87 Mon Sep 17 00:00:00 2001 From: Mark Keller <7525285+keller-mark@users.noreply.github.com> Date: Tue, 18 Jun 2024 12:12:38 -0400 Subject: [PATCH 12/25] Fix bugs. Add test for from_SingleCellExperiment with Zarr --- R/ZarrAnnData.R | 6 +-- R/read_zarr_helpers.R | 41 ++++++++++++++----- R/write_zarr_helpers.R | 12 ++++-- tests/testthat/test-SingleCellExperiment.R | 47 ++++++++++++++++++++++ 4 files changed, 89 insertions(+), 17 deletions(-) diff --git a/R/ZarrAnnData.R b/R/ZarrAnnData.R index 07da16a4..541c62e9 100644 --- a/R/ZarrAnnData.R +++ b/R/ZarrAnnData.R @@ -269,8 +269,8 @@ ZarrAnnData <- R6::R6Class("ZarrAnnData", # nolint compression <- match.arg(compression) private$.compression <- compression - - + + root <- pizzarr::zarr_open_group(store, path = "/") @@ -294,7 +294,7 @@ ZarrAnnData <- R6::R6Class("ZarrAnnData", # nolint private$.var_names <- var_names } else { # Check the file is a valid H5AD - + attrs <- root$get_attrs()$to_list() if (!all(c("encoding-type", "encoding-version") %in% names(attrs))) { diff --git a/R/read_zarr_helpers.R b/R/read_zarr_helpers.R index f7b668db..f53ed651 100644 --- a/R/read_zarr_helpers.R +++ b/R/read_zarr_helpers.R @@ -8,17 +8,20 @@ #' @return A named list with names type and version #' #' @noRd -read_zarr_encoding <- function(store, name) { +read_zarr_encoding <- function(store, name, stop_on_error = TRUE) { # Path can be to array or group g <- pizzarr::zarr_open(store, path = name) attrs <- g$get_attrs()$to_list() if (!all(c("encoding-type", "encoding-version") %in% names(attrs))) { - path <- "TODO: get path from store" - stop( - "Encoding attributes not found for element '", name, "' ", - "in '", path, "'" - ) + path <- name + if(stop_on_error) { + stop( + "Encoding attributes not found for element '", name, "' " + ) + } else { + return(NULL) + } } list( @@ -47,7 +50,15 @@ read_zarr_encoding <- function(store, name) { #' @noRd read_zarr_element <- function(store, name, type = NULL, version = NULL, stop_on_error = FALSE, ...) { if (is.null(type)) { - encoding_list <- read_zarr_encoding(store, name) + encoding_list <- read_zarr_encoding(store, name, stop_on_error = stop_on_error) + if(is.null(encoding_list)) { + if(stop_on_error) { + stop("No encoding info found for element '", name, "'") + } else { + warning("No encoding found for element '", name, "'") + return(NULL) + } + } type <- encoding_list$type version <- encoding_list$version } @@ -99,12 +110,17 @@ read_zarr_array <- function(store, name) { read_zarr_array_with_rarr <- function(store, name) { if("DirectoryStore" %in% class(store)) { store_root <- store$root - arr <- Rarr::read_zarr_array( - zarr_array_path = file.path(store_root, name), - ) + arr <- tryCatch({ + Rarr::read_zarr_array( + zarr_array_path = file.path(store_root, name), + ) + }, error = function(e) { + # Reading with Rarr failed; Try with Pizzarr. + read_zarr_array(store, name) + }) return(arr) } - # Use pizzarr as a fallback + # Not a DirectoryStore, so cannot use Rarr. return(read_zarr_array(store, name)) } @@ -403,6 +419,9 @@ read_zarr_mapping <- function(store, name, version = "0.1.0") { columns <- store$listdir(name) + # Omit Zarr metadata files from the list of columns. + columns <- columns[!columns %in% c(".zgroup", ".zattrs", ".zarray")] + read_zarr_collection(store, name, columns) } diff --git a/R/write_zarr_helpers.R b/R/write_zarr_helpers.R index f332115a..657b54ef 100644 --- a/R/write_zarr_helpers.R +++ b/R/write_zarr_helpers.R @@ -96,7 +96,7 @@ write_zarr_encoding <- function(store, name, encoding, version) { attrs <- g$get_attrs() attrs$set_item("encoding-type", encoding) - attrs$set_item("encoding-version", encoding) + attrs$set_item("encoding-version", version) } #' Write H5AD dense array @@ -234,7 +234,7 @@ write_zarr_string_array <- function(value, store, name, compression, version = " } else { dims <- length(value) } - + object_codec <- pizzarr::VLenUtf8Codec$new() data <- array(data = value, dim = dims) a <- pizzarr::zarr_create_array(data, store = store, path = name, dtype = "|O", object_codec = object_codec, shape = dims) @@ -468,6 +468,12 @@ write_empty_zarr <- function(store, obs_names, var_names, compression, version = #' @return Whether the `path` exists in `file` zarr_path_exists <- function(store, target_path) { result <- tryCatch({ + if(store$contains_item(target_path)) { + # This should work for DirectoryStore but not yet for MemoryStore. + return(TRUE) + } + # Fall back to use get_item. + # This should work for any store but can fail if DirectoryStore tries to read a directory as a file. store$get_item(target_path) return(TRUE) }, error = function(cond) { @@ -475,7 +481,7 @@ zarr_path_exists <- function(store, target_path) { return(FALSE) } stop(cond) - }) + }, warnings = function(w){}) return(result) } diff --git a/tests/testthat/test-SingleCellExperiment.R b/tests/testthat/test-SingleCellExperiment.R index 32ac2f6c..1b587ce6 100644 --- a/tests/testthat/test-SingleCellExperiment.R +++ b/tests/testthat/test-SingleCellExperiment.R @@ -95,3 +95,50 @@ test_that("from_SingleCellExperiment() works", { expect_identical(ad0$layers, layers0) expect_identical(ad$layers, layers) }) + +test_that("from_SingleCellExperiment() works with Zarr", { + ## 0-dimensioned + sce0 <- SingleCellExperiment::SingleCellExperiment() + dimnames(sce0) <- list(character(0), character(0)) + + ## complete + x <- matrix(1:15, 3, 5) + layers <- list(A = matrix(15:1, 3, 5), B = matrix(LETTERS[1:15], 3, 5)) + obs <- data.frame(cell = 1:3, row.names = LETTERS[1:3]) + var <- data.frame(gene = 1:5, row.names = letters[1:5]) + sce <- SingleCellExperiment::SingleCellExperiment( + assays = lapply(c(list(x), layers), t), + colData = obs, + rowData = var + ) + dimnames <- dimnames(sce) + + rownames(obs) <- NULL + rownames(var) <- NULL + + store0 <- pizzarr::MemoryStore$new() + store <- pizzarr::DirectoryStore$new("test.zarr") + + ad0 <- from_SingleCellExperiment(sce0, "ZarrAnnData", store = store0) + ad <- from_SingleCellExperiment(sce, "ZarrAnnData", store = store) + + # trackstatus: class=SingleCellExperiment, feature=test_set_X, status=done + expect_identical(ad0$X, NULL) + expect_identical(ad$X, x) + # trackstatus: class=SingleCellExperiment, feature=test_set_obs, status=done + expect_identical(ad0$obs, data.frame()) + expect_identical(ad$obs, obs) + # trackstatus: class=SingleCellExperiment, feature=test_set_var, status=done + expect_identical(ad0$var, data.frame()) + expect_identical(ad$var, var) + # trackstatus: class=SingleCellExperiment, feature=test_set_obs_names, status=done + expect_identical(ad0$obs_names, character(0)) + expect_identical(ad$obs_names, dimnames[[2]]) + # trackstatus: class=SingleCellExperiment, feature=test_set_var_names, status=done + expect_identical(ad0$var_names, character(0)) + expect_identical(ad$var_names, dimnames[[1]]) + # trackstatus: class=SingleCellExperiment, feature=test_set_layers, status=done + layers0 <- list() + expect_identical(ad0$layers, layers0) + expect_identical(ad$layers, layers) +}) From acac7721471f631c88348be610511712fefe9def Mon Sep 17 00:00:00 2001 From: Mark Keller <7525285+keller-mark@users.noreply.github.com> Date: Thu, 20 Jun 2024 14:39:45 -0400 Subject: [PATCH 13/25] Add a to_dense param to ZarrAnnData constructor. Add overwrite params internally. --- R/ZarrAnnData.R | 28 +++++++++++----- R/write_zarr_helpers.R | 73 +++++++++++++++++++++--------------------- 2 files changed, 56 insertions(+), 45 deletions(-) diff --git a/R/ZarrAnnData.R b/R/ZarrAnnData.R index 541c62e9..5f598d78 100644 --- a/R/ZarrAnnData.R +++ b/R/ZarrAnnData.R @@ -11,7 +11,8 @@ ZarrAnnData <- R6::R6Class("ZarrAnnData", # nolint .n_vars = NULL, .obs_names = NULL, .var_names = NULL, - .compression = NULL + .compression = NULL, + .to_dense = NULL ), active = list( #' @field X The X slot @@ -28,7 +29,13 @@ ZarrAnnData <- R6::R6Class("ZarrAnnData", # nolint expected_rownames = rownames(self), expected_colnames = colnames(self) ) - write_zarr_element(value, private$zarr_store, "/X", private$.compression) + if(private$.to_dense) { + value <- as.matrix(value) + result <- write_zarr_element(value, private$zarr_store, "/X", private$.compression, overwrite = TRUE) + } else { + result <- write_zarr_element(value, private$zarr_store, "/X", private$.compression, overwrite = TRUE, chunks = c(10, self$n_vars())) + } + return(result) } }, #' @field layers The layers slot. Must be NULL or a named list @@ -47,7 +54,7 @@ ZarrAnnData <- R6::R6Class("ZarrAnnData", # nolint expected_rownames = rownames(self), expected_colnames = colnames(self) ) - write_zarr_element(value, private$zarr_store, "/layers", private$.compression) + write_zarr_element(value, private$zarr_store, "/layers", private$.compression, overwrite = TRUE) } }, #' @field obsm The obsm slot. Must be `NULL` or a named list with @@ -134,7 +141,8 @@ ZarrAnnData <- R6::R6Class("ZarrAnnData", # nolint private$zarr_store, "/obs", private$.compression, - index = self$obs_names + index = self$obs_names, + overwrite = TRUE ) } }, @@ -150,7 +158,8 @@ ZarrAnnData <- R6::R6Class("ZarrAnnData", # nolint value, private$zarr_store, "/var", - index = self$var_names + index = self$var_names, + overwrite = TRUE ) } }, @@ -167,7 +176,7 @@ ZarrAnnData <- R6::R6Class("ZarrAnnData", # nolint } else { # trackstatus: class=HDF5AnnData, feature=set_obs_names, status=done value <- private$.validate_obsvar_names(value, "obs") - write_zarr_data_frame_index(value, private$zarr_store, "obs", private$.compression, "_index") + write_zarr_data_frame_index(value, private$zarr_store, "obs", private$.compression, "_index", overwrite = TRUE) private$.obs_names <- value } }, @@ -185,7 +194,7 @@ ZarrAnnData <- R6::R6Class("ZarrAnnData", # nolint } else { # trackstatus: class=HDF5AnnData, feature=set_var_names, status=done value <- private$.validate_obsvar_names(value, "var") - write_zarr_data_frame_index(value, private$zarr_store, "var", private$.compression, "_index") + write_zarr_data_frame_index(value, private$zarr_store, "var", private$.compression, "_index", overwrite = TRUE) private$.var_names <- value } }, @@ -262,13 +271,16 @@ ZarrAnnData <- R6::R6Class("ZarrAnnData", # nolint obsp = NULL, varp = NULL, uns = NULL, - compression = c("none", "gzip", "lzf")) { + compression = c("none", "gzip", "lzf"), + to_dense = FALSE + ) { if (!requireNamespace("pizzarr", quietly = TRUE)) { stop("The Zarr interface requires the 'pizzarr' package to be installed") } compression <- match.arg(compression) private$.compression <- compression + private$.to_dense <- to_dense root <- pizzarr::zarr_open_group(store, path = "/") diff --git a/R/write_zarr_helpers.R b/R/write_zarr_helpers.R index 657b54ef..138d4d4d 100644 --- a/R/write_zarr_helpers.R +++ b/R/write_zarr_helpers.R @@ -111,10 +111,10 @@ write_zarr_encoding <- function(store, name, encoding, version) { #' @param version Encoding version of the element to write #' #' @noRd -write_zarr_dense_array <- function(value, store, name, compression, version = "0.2.0") { +write_zarr_dense_array <- function(value, store, name, compression, version = "0.2.0", chunks = TRUE, overwrite = FALSE) { version <- match.arg(version) - zarr_write_compressed(store, name, value, compression) + zarr_write_compressed(store, name, value, compression, chunks = chunks, overwrite = overwrite) # Write attributes write_zarr_encoding(store, name, "array", version) @@ -132,7 +132,7 @@ write_zarr_dense_array <- function(value, store, name, compression, version = "0 #' @param compression The compression to use when writing the element. Can be #' one of `"none"`, `"gzip"` or `"lzf"`. Defaults to `"none"`. #' @param version Encoding version of the element to write -write_zarr_sparse_array <- function(value, store, name, compression, version = "0.1.0") { +write_zarr_sparse_array <- function(value, store, name, compression, version = "0.1.0", overwrite = FALSE) { version <- match.arg(version) # check types @@ -154,9 +154,9 @@ write_zarr_sparse_array <- function(value, store, name, compression, version = " # Write sparse matrix g <- pizzarr::zarr_open_group(store, path = name) - zarr_write_compressed(store, paste0(name, "/indices"), attr(value, indices_attr), compression) - zarr_write_compressed(store, paste0(name, "/indptr"), value@p, compression) - zarr_write_compressed(store, paste0(name, "/data"), value@x, compression) + zarr_write_compressed(store, paste0(name, "/indices"), attr(value, indices_attr), compression, overwrite = overwrite) + zarr_write_compressed(store, paste0(name, "/indptr"), value@p, compression, overwrite = overwrite) + zarr_write_compressed(store, paste0(name, "/data"), value@x, compression, overwrite = overwrite) # Add encoding write_zarr_encoding(store, name, type, version) @@ -177,14 +177,14 @@ write_zarr_sparse_array <- function(value, store, name, compression, version = " #' @param compression The compression to use when writing the element. Can be #' one of `"none"`, `"gzip"` or `"lzf"`. Defaults to `"none"`. #' @param version Encoding version of the element to write -write_zarr_nullable_boolean <- function(value, store, name, compression, version = "0.1.0") { +write_zarr_nullable_boolean <- function(value, store, name, compression, version = "0.1.0", overwrite = FALSE) { # write mask and values g <- pizzarr::zarr_open_group(store, path = name) value_no_na <- value value_no_na[is.na(value_no_na)] <- FALSE - zarr_write_compressed(store, paste0(name, "/values"), value_no_na, compression) - zarr_write_compressed(store, paste0(name, "/mask"), is.na(value), compression) + zarr_write_compressed(store, paste0(name, "/values"), value_no_na, compression, overwrite = overwrite) + zarr_write_compressed(store, paste0(name, "/mask"), is.na(value), compression, overwrite = overwrite) # Write attributes write_zarr_encoding(store, name, "nullable-boolean", version) @@ -202,14 +202,14 @@ write_zarr_nullable_boolean <- function(value, store, name, compression, version #' @param compression The compression to use when writing the element. Can be #' one of `"none"`, `"gzip"` or `"lzf"`. Defaults to `"none"`. #' @param version Encoding version of the element to write -write_zarr_nullable_integer <- function(value, store, name, compression, version = "0.1.0") { +write_zarr_nullable_integer <- function(value, store, name, compression, version = "0.1.0", overwrite = FALSE) { # write mask and values g <- pizzarr::zarr_open_group(store, path = name) value_no_na <- value value_no_na[is.na(value_no_na)] <- -1L - zarr_write_compressed(store, paste0(name, "/values"), value_no_na, compression) - zarr_write_compressed(store, paste0(name, "/mask"), is.na(value), compression) + zarr_write_compressed(store, paste0(name, "/values"), value_no_na, compression, overwrite = overwrite) + zarr_write_compressed(store, paste0(name, "/mask"), is.na(value), compression, overwrite = overwrite) # Write attributes write_zarr_encoding(store, name, "nullable-integer", version) @@ -227,7 +227,7 @@ write_zarr_nullable_integer <- function(value, store, name, compression, version #' @param compression The compression to use when writing the element. Can be #' one of `"none"`, `"gzip"` or `"lzf"`. Defaults to `"none"`. #' @param version Encoding version of the element to write -write_zarr_string_array <- function(value, store, name, compression, version = "0.2.0") { +write_zarr_string_array <- function(value, store, name, compression, version = "0.2.0", overwrite = FALSE) { if (!is.null(dim(value))) { dims <- dim(value) @@ -237,7 +237,7 @@ write_zarr_string_array <- function(value, store, name, compression, version = " object_codec <- pizzarr::VLenUtf8Codec$new() data <- array(data = value, dim = dims) - a <- pizzarr::zarr_create_array(data, store = store, path = name, dtype = "|O", object_codec = object_codec, shape = dims) + a <- pizzarr::zarr_create_array(data, store = store, path = name, dtype = "|O", object_codec = object_codec, shape = dims, overwrite = overwrite) write_zarr_encoding(store, name, "string-array", version) } @@ -254,11 +254,11 @@ write_zarr_string_array <- function(value, store, name, compression, version = " #' @param compression The compression to use when writing the element. Can be #' one of `"none"`, `"gzip"` or `"lzf"`. Defaults to `"none"`. #' @param version Encoding version of the element to write -write_zarr_categorical <- function(value, store, name, compression, version = "0.2.0") { +write_zarr_categorical <- function(value, store, name, compression, version = "0.2.0", overwrite = FALSE) { g <- pizzarr::zarr_open_group(store, path = name) - zarr_write_compressed(store, paste0(name, "/categories"), levels(value), compression) - zarr_write_compressed(store, paste0(name, "/codes"), as.integer(value), compression) - zarr_write_compressed(store, paste0(name, "/ordered"), is.ordered(value), compression) + zarr_write_compressed(store, paste0(name, "/categories"), levels(value), compression, overwrite = overwrite) + zarr_write_compressed(store, paste0(name, "/codes"), as.integer(value), compression, overwrite = overwrite) + zarr_write_compressed(store, paste0(name, "/ordered"), is.ordered(value), compression, overwrite = overwrite) write_zarr_encoding(store, name, "categorical", version) } @@ -275,10 +275,10 @@ write_zarr_categorical <- function(value, store, name, compression, version = "0 #' @param compression The compression to use when writing the element. Can be #' one of `"none"`, `"gzip"` or `"lzf"`. Defaults to `"none"`. #' @param version Encoding version of the element to write -write_zarr_string_scalar <- function(value, store, name, compression, version = "0.2.0") { +write_zarr_string_scalar <- function(value, store, name, compression, version = "0.2.0", overwrite = FALSE) { # Write scalar object_codec = pizzarr::VLenUtf8Codec$new() - a <- pizzarr::zarr_create_array(value, store = store, path = name, dtype = "|O", object_codec = object_codec, shape = list()) + a <- pizzarr::zarr_create_array(value, store = store, path = name, dtype = "|O", object_codec = object_codec, shape = list(), overwrite = overwrite) # Write attributes write_zarr_encoding(store, name, "string", version) @@ -296,9 +296,9 @@ write_zarr_string_scalar <- function(value, store, name, compression, version = #' @param compression The compression to use when writing the element. Can be #' one of `"none"`, `"gzip"` or `"lzf"`. Defaults to `"none"`. #' @param version Encoding version of the element to write -write_zarr_numeric_scalar <- function(value, store, name, compression, version = "0.2.0") { +write_zarr_numeric_scalar <- function(value, store, name, compression, version = "0.2.0", overwrite = FALSE) { # Write scalar - zarr_write_compressed(store, name, value, compression) + zarr_write_compressed(store, name, value, compression, overwrite = overwrite) # Write attributes write_zarr_encoding(store, name, "numeric-scalar", version) @@ -316,12 +316,12 @@ write_zarr_numeric_scalar <- function(value, store, name, compression, version = #' @param compression The compression to use when writing the element. Can be #' one of `"none"`, `"gzip"` or `"lzf"`. Defaults to `"none"`. #' @param version Encoding version of the element to write -write_zarr_mapping <- function(value, store, name, compression, version = "0.1.0") { +write_zarr_mapping <- function(value, store, name, compression, version = "0.1.0", overwrite = FALSE) { g <- pizzarr::zarr_open_group(store, path = name) # Write mapping elements for (key in names(value)) { - write_zarr_element(value[[key]], store, paste0(name, "/", key), compression) + write_zarr_element(value[[key]], store, paste0(name, "/", key), compression, overwrite = overwrite) } write_zarr_encoding(store, name, "dict", version) @@ -343,7 +343,7 @@ write_zarr_mapping <- function(value, store, name, compression, version = "0.1.0 #' of a column in `values`. If `NULL` then `rownames(value)` is used. #' @param version Encoding version of the element to write write_zarr_data_frame <- function(value, store, name, compression, index = NULL, - version = "0.2.0") { + version = "0.2.0", overwrite = FALSE) { g <- pizzarr::zarr_open_group(store, path = name) write_zarr_encoding(store, name, "dataframe", version) @@ -365,11 +365,11 @@ write_zarr_data_frame <- function(value, store, name, compression, index = NULL, } # Write index - write_zarr_data_frame_index(index_value, store, name, compression, index_name) + write_zarr_data_frame_index(index_value, store, name, compression, index_name, overwrite = overwrite) # Write data frame columns for (col in colnames(value)) { - write_zarr_element(value[[col]], store, paste0(name, "/", col), compression) + write_zarr_element(value[[col]], store, paste0(name, "/", col), compression, overwrite = overwrite) } # Write additional data frame attributes @@ -398,9 +398,8 @@ write_zarr_data_frame <- function(value, store, name, compression, index = NULL, #' @param compression The compression to use when writing the element. Can be #' one of `"none"`, `"gzip"` or `"lzf"`. Defaults to `"none"`. #' @param index_name Name of the data frame column storing the index -write_zarr_data_frame_index <- function(value, store, name, compression, index_name) { +write_zarr_data_frame_index <- function(value, store, name, compression, index_name, overwrite = FALSE) { if (!zarr_path_exists(store, name)) { - warning("The data frame '", name, "' does not exist in store. Creating it.") g <- pizzarr::zarr_open_group(store, path = name) write_zarr_encoding(store, name, "dataframe", "0.2.0") } @@ -411,7 +410,7 @@ write_zarr_data_frame_index <- function(value, store, name, compression, index_n } # Write index columns - write_zarr_element(value, store, paste0(name, "/", index_name)) + write_zarr_element(value, store, paste0(name, "/", index_name), overwrite = overwrite) # Write data frame index attribute g <- pizzarr::zarr_open_group(store, path = name) @@ -430,12 +429,12 @@ write_zarr_data_frame_index <- function(value, store, name, compression, index_n #' @param compression The compression to use when writing the element. Can be #' one of `"none"`, `"gzip"` or `"lzf"`. Defaults to `"none"`. #' @param version The H5AD version to write -write_empty_zarr <- function(store, obs_names, var_names, compression, version = "0.1.0") { +write_empty_zarr <- function(store, obs_names, var_names, compression, version = "0.1.0", overwrite = FALSE) { pizzarr::zarr_open_group(store, path = "/") write_zarr_encoding(store, "/", "anndata", "0.1.0") - write_zarr_element(data.frame(row.names = obs_names), store, "/obs", compression) - write_zarr_element(data.frame(row.names = var_names), store, "/var", compression) + write_zarr_element(data.frame(row.names = obs_names), store, "/obs", compression, overwrite = overwrite) + write_zarr_element(data.frame(row.names = var_names), store, "/var", compression, overwrite = overwrite) pizzarr::zarr_open_group(store, path = "layers") write_zarr_encoding(store, "/layers", "dict", "0.1.0") @@ -500,7 +499,7 @@ zarr_path_exists <- function(store, target_path) { #' one of `"none"`, `"gzip"` or `"lzf"`. Defaults to `"none"`. #' #' @return Whether the `path` exists in `file` -zarr_write_compressed <- function(store, name, value, compression = c("none", "gzip", "lzf")) { +zarr_write_compressed <- function(store, name, value, compression = c("none", "gzip", "lzf"), chunks = TRUE, overwrite = FALSE) { compression <- match.arg(compression) if (!is.null(dim(value))) { dims <- dim(value) @@ -510,9 +509,9 @@ zarr_write_compressed <- function(store, name, value, compression = c("none", "g object_codec <- NA if(is.integer(value)) { - dtype <- " Date: Thu, 20 Jun 2024 14:41:22 -0400 Subject: [PATCH 14/25] Update --- R/ZarrAnnData.R | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/R/ZarrAnnData.R b/R/ZarrAnnData.R index 5f598d78..36cf94c2 100644 --- a/R/ZarrAnnData.R +++ b/R/ZarrAnnData.R @@ -1,3 +1,5 @@ +VAR_CHUNK_SIZE <- 10 + #' @title ZarrAnnData #' #' @description @@ -33,7 +35,7 @@ ZarrAnnData <- R6::R6Class("ZarrAnnData", # nolint value <- as.matrix(value) result <- write_zarr_element(value, private$zarr_store, "/X", private$.compression, overwrite = TRUE) } else { - result <- write_zarr_element(value, private$zarr_store, "/X", private$.compression, overwrite = TRUE, chunks = c(10, self$n_vars())) + result <- write_zarr_element(value, private$zarr_store, "/X", private$.compression, overwrite = TRUE, chunks = c(self$n_obs(), VAR_CHUNK_SIZE)) } return(result) } From c6b4d890483ad5cde568bce463e535e40ff08e1a Mon Sep 17 00:00:00 2001 From: Mark Keller <7525285+keller-mark@users.noreply.github.com> Date: Thu, 20 Jun 2024 14:45:51 -0400 Subject: [PATCH 15/25] Backwards dense/sparse --- R/ZarrAnnData.R | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/R/ZarrAnnData.R b/R/ZarrAnnData.R index 36cf94c2..52c8259a 100644 --- a/R/ZarrAnnData.R +++ b/R/ZarrAnnData.R @@ -33,9 +33,9 @@ ZarrAnnData <- R6::R6Class("ZarrAnnData", # nolint ) if(private$.to_dense) { value <- as.matrix(value) - result <- write_zarr_element(value, private$zarr_store, "/X", private$.compression, overwrite = TRUE) - } else { result <- write_zarr_element(value, private$zarr_store, "/X", private$.compression, overwrite = TRUE, chunks = c(self$n_obs(), VAR_CHUNK_SIZE)) + } else { + result <- write_zarr_element(value, private$zarr_store, "/X", private$.compression, overwrite = TRUE) } return(result) } From 1afd6ebc8f17f81b7cdcdabe235e3768298c1067 Mon Sep 17 00:00:00 2001 From: Artur-man Date: Fri, 1 Nov 2024 22:38:13 +0100 Subject: [PATCH 16/25] Simplify how obs and var names handled in ZarrAnnData (similar to #171) --- R/ZarrAnnData.R | 260 +++++++++++++++++++++++++---------------- R/read_zarr_helpers.R | 18 +-- R/write_zarr.R | 18 ++- R/write_zarr_helpers.R | 21 ++-- 4 files changed, 197 insertions(+), 120 deletions(-) diff --git a/R/ZarrAnnData.R b/R/ZarrAnnData.R index 07da16a4..d37cf97e 100644 --- a/R/ZarrAnnData.R +++ b/R/ZarrAnnData.R @@ -2,15 +2,16 @@ #' #' @description #' Implementation of an in memory AnnData object. +#' @noRd ZarrAnnData <- R6::R6Class("ZarrAnnData", # nolint inherit = AbstractAnnData, private = list( zarr_store = NULL, zarr_root = NULL, - .n_obs = NULL, - .n_vars = NULL, - .obs_names = NULL, - .var_names = NULL, + # .n_obs = NULL, + # .n_vars = NULL, + # .obs_names = NULL, + # .var_names = NULL, .compression = NULL ), active = list( @@ -156,37 +157,51 @@ ZarrAnnData <- R6::R6Class("ZarrAnnData", # nolint }, #' @field obs_names Names of observations obs_names = function(value) { + # if (missing(value)) { + # # trackstatus: class=HDF5AnnData, feature=get_obs_names, status=done + # # obs names are cached to avoid reading all of obs whenever they are + # # accessed + # if (is.null(private$.obs_names)) { + # private$.obs_names <- read_zarr_data_frame_index(private$zarr_store, "obs") + # } + # private$.obs_names + # } else { + # # trackstatus: class=HDF5AnnData, feature=set_obs_names, status=done + # value <- private$.validate_obsvar_names(value, "obs") + # write_zarr_data_frame_index(value, private$zarr_store, "obs", private$.compression, "_index") + # private$.obs_names <- value + # } if (missing(value)) { # trackstatus: class=HDF5AnnData, feature=get_obs_names, status=done - # obs names are cached to avoid reading all of obs whenever they are - # accessed - if (is.null(private$.obs_names)) { - private$.obs_names <- read_zarr_data_frame_index(private$zarr_store, "obs") - } - private$.obs_names + rownames(self$obs) } else { # trackstatus: class=HDF5AnnData, feature=set_obs_names, status=done - value <- private$.validate_obsvar_names(value, "obs") - write_zarr_data_frame_index(value, private$zarr_store, "obs", private$.compression, "_index") - private$.obs_names <- value + rownames(self$obs) <- value } }, #' @field var_names Names of variables var_names = function(value) { # TODO: directly write to and read from /var/_index + # if (missing(value)) { + # # trackstatus: class=HDF5AnnData, feature=get_var_names, status=done + # # var names are cached to avoid reading all of var whenever they are + # # accessed + # if (is.null(private$.var_names)) { + # private$.var_names <- read_zarr_data_frame_index(private$zarr_store, "var") + # } + # private$.var_names + # } else { + # # trackstatus: class=HDF5AnnData, feature=set_var_names, status=done + # value <- private$.validate_obsvar_names(value, "var") + # write_zarr_data_frame_index(value, private$zarr_store, "var", private$.compression, "_index") + # private$.var_names <- value + # } if (missing(value)) { # trackstatus: class=HDF5AnnData, feature=get_var_names, status=done - # var names are cached to avoid reading all of var whenever they are - # accessed - if (is.null(private$.var_names)) { - private$.var_names <- read_zarr_data_frame_index(private$zarr_store, "var") - } - private$.var_names + rownames(self$var) } else { # trackstatus: class=HDF5AnnData, feature=set_var_names, status=done - value <- private$.validate_obsvar_names(value, "var") - write_zarr_data_frame_index(value, private$zarr_store, "var", private$.compression, "_index") - private$.var_names <- value + rownames(self$var) <- value } }, #' @field uns The uns slot. Must be `NULL` or a named list. @@ -251,8 +266,8 @@ ZarrAnnData <- R6::R6Class("ZarrAnnData", # nolint #' set on the created object. This will cause data to be overwritten if the #' file already exists. initialize = function(store, - obs_names = NULL, - var_names = NULL, + # obs_names = NULL, + # var_names = NULL, X = NULL, obs = NULL, var = NULL, @@ -262,39 +277,80 @@ ZarrAnnData <- R6::R6Class("ZarrAnnData", # nolint obsp = NULL, varp = NULL, uns = NULL, + shape = NULL, + mode = c("r", "r+", "a", "w", "w-", "x"), compression = c("none", "gzip", "lzf")) { if (!requireNamespace("pizzarr", quietly = TRUE)) { stop("The Zarr interface requires the 'pizzarr' package to be installed") } + # check arguments compression <- match.arg(compression) - private$.compression <- compression - - - root <- pizzarr::zarr_open_group(store, path = "/") + mode <- match.arg(mode) + # store compression for later use + private$.compression <- compression - if(length(root$get_attrs()$to_list()) == 0) { + # if(length(root$get_attrs()$to_list()) == 0) { + if (is.character(store) && !dir.exists(store)) { # Check obs_names and var_names have been provided - if (is.null(obs_names)) { - stop("When creating a new .h5ad file, `obs_names` must be defined.") + # if (is.null(obs_names)) { + # stop("When creating a new .h5ad file, `obs_names` must be defined.") + # } + # if (is.null(var_names)) { + # stop("When creating a new .h5ad file, `var_names` must be defined.") + # } + + # store private values + private$zarr_store <- store + # private$zarr_root <- root + + # Determine initial obs and var + shape <- get_shape(obs, var, X, shape) + obs <- get_initial_obs(obs, X, shape) + var <- get_initial_var(var, X, shape) + + # # Create an empty H5ad store using the provided obs/var names + # write_empty_zarr(store, obs_names, var_names, compression) + + # Create an empty Zarr + write_empty_zarr(store, obs, var, compression) + + # set other slots + if (!is.null(X)) { + self$X <- X } - if (is.null(var_names)) { - stop("When creating a new .h5ad file, `var_names` must be defined.") + if (!is.null(layers)) { + self$layers <- layers + } + if (!is.null(obsm)) { + self$obsm <- obsm + } + if (!is.null(varm)) { + self$varm <- varm + } + if (!is.null(obsp)) { + self$obsp <- obsp + } + if (!is.null(varp)) { + self$varp <- varp + } + if (!is.null(uns)) { + self$uns <- uns } - # Create an empty H5AD using the provided obs/var names - write_empty_zarr(store, obs_names, var_names, compression) - - # Set private object slots - private$zarr_store <- store - private$.n_obs <- length(obs_names) - private$.n_vars <- length(var_names) - private$.obs_names <- obs_names - private$.var_names <- var_names + # # Set private object slots + # private$zarr_store <- store + # private$.n_obs <- length(obs_names) + # private$.n_vars <- length(var_names) + # private$.obs_names <- obs_names + # private$.var_names <- var_names } else { + + # get root + root <- pizzarr::zarr_open_group(store, path = "/") + # Check the file is a valid H5AD - attrs <- root$get_attrs()$to_list() if (!all(c("encoding-type", "encoding-version") %in% names(attrs))) { @@ -309,67 +365,61 @@ ZarrAnnData <- R6::R6Class("ZarrAnnData", # nolint private$zarr_root <- root # If obs or var names have been provided update those - if (!is.null(obs_names)) { - self$obs_names <- obs_names - } + # if (!is.null(obs_names)) { + # self$obs_names <- obs_names + # } + # + # if (!is.null(var_names)) { + # self$var_names <- var_names + # } - if (!is.null(var_names)) { - self$var_names <- var_names + # assert other arguments are NULL + if (!is.null(obs)) { + stop("obs must be NULL when loading an existing zarr store") + } + if (!is.null(var)) { + stop("var must be NULL when loading an existing zarr store") + } + if (!is.null(X)) { + stop("X must be NULL when loading an existing zarr store") + } + if (!is.null(layers)) { + stop("layers must be NULL when loading an existing zarr store") + } + if (!is.null(obsm)) { + stop("obsm must be NULL when loading an existing zarr store") + } + if (!is.null(varm)) { + stop("varm must be NULL when loading an existing zarr store") + } + if (!is.null(obsp)) { + stop("obsp must be NULL when loading an existing zarr store") + } + if (!is.null(varp)) { + stop("varp must be NULL when loading an existing zarr store") + } + if (!is.null(uns)) { + stop("uns must be NULL when loading an existing zarr store") } - } - - # Update remaining slots - if (!is.null(X)) { - self$X <- X - } - - if (!is.null(obs)) { - self$obs <- obs - } - - if (!is.null(var)) { - self$var <- var - } - - if (!is.null(layers)) { - self$layers <- layers - } - - if (!is.null(obsm)) { - self$obsm <- obsm - } - - if (!is.null(varm)) { - self$varm <- varm - } - - if (!is.null(obsp)) { - self$obsp <- obsp - } - - if (!is.null(varp)) { - self$varp <- varp - } - - if (!is.null(uns)) { - self$uns <- uns } }, #' @description Number of observations in the AnnData object n_obs = function() { - if (is.null(private$.n_obs)) { - private$.n_obs <- length(self$obs_names) - } - private$.n_obs + # if (is.null(private$.n_obs)) { + # private$.n_obs <- length(self$obs_names) + # } + # private$.n_obs + nrow(self$obs) }, #' @description Number of variables in the AnnData object n_vars = function() { - if (is.null(private$.n_vars)) { - private$.n_vars <- length(self$var_names) - } - private$.n_vars + # if (is.null(private$.n_vars)) { + # private$.n_vars <- length(self$var_names) + # } + # private$.n_vars + nrow(self$var) } ) ) @@ -384,11 +434,18 @@ ZarrAnnData <- R6::R6Class("ZarrAnnData", # nolint #' @param compression The compression algorithm to use when writing the #' HDF5 file. Can be one of `"none"`, `"gzip"` or `"lzf"`. Defaults to #' `"none"`. +#' @param mode The mode to open the HDF5 file. +#' +#' * `a` creates a new file or opens an existing one for read/write. +#' * `r` opens an existing file for reading. +#' * `r+` opens an existing file for read/write. +#' * `w` creates a file, truncating any existing ones. +#' * `w-`/`x` are synonyms, creating a file and failing if it already exists. #' #' @return An HDF5AnnData object with the same data as the input AnnData #' object. #' -#' @export +#' @noRd #' #' @examples #' ad <- AnnData( @@ -405,7 +462,10 @@ ZarrAnnData <- R6::R6Class("ZarrAnnData", # nolint #' to_HDF5AnnData(ad, "test.h5ad") #' # remove file #' file.remove("test.h5ad") -to_ZarrAnnData <- function(adata, store, compression = c("none", "gzip", "lzf")) { # nolint +to_ZarrAnnData <- function(adata, + store, + compression = c("none", "gzip", "lzf"), + mode = c("w-", "r", "r+", "a", "w", "x")) { stopifnot( inherits(adata, "AbstractAnnData") ) @@ -416,12 +476,14 @@ to_ZarrAnnData <- function(adata, store, compression = c("none", "gzip", "lzf")) var = adata$var, obsm = adata$obsm, varm = adata$varm, - obs_names = adata$obs_names, - var_names = adata$var_names, + # obs_names = adata$obs_names, + # var_names = adata$var_names, layers = adata$layers, obsp = adata$obsp, varp = adata$varp, uns = adata$uns, - compression = compression + compression = compression, + shape = adata$shape(), + mode = mode ) -} +} \ No newline at end of file diff --git a/R/read_zarr_helpers.R b/R/read_zarr_helpers.R index 2d1ed76f..d952a98d 100644 --- a/R/read_zarr_helpers.R +++ b/R/read_zarr_helpers.R @@ -160,7 +160,7 @@ read_zarr_sparse_array <- function(store, name, version = "0.1.0", type <- match.arg(type) g <- pizzarr::zarr_open_group(store, path = name) - + data <- as.vector(read_zarr_array(store, paste0(name, "/data"))) indices <- as.vector(read_zarr_array(store, paste0(name, "/indices"))) indptr <- as.vector(read_zarr_array(store, paste0(name, "/indptr"))) @@ -260,11 +260,11 @@ read_zarr_nullable <- function(store, name, version = "0.1.0") { mask <- read_zarr_array(store, paste0(name, "/mask")) values <- read_zarr_array(store, paste0(name, "/values")) - + # Get values and set missing element <- values element[mask] <- NA - + return(element) } @@ -389,7 +389,9 @@ read_zarr_mapping <- function(store, name, version = "0.1.0") { version <- match.arg(version) groupname <- paste0("/", name) - columns <- store$listdir(name) + store <- pizzarr::zarr_open(store) + # columns <- store$listdir(name) + columns <- store$get_store()$listdir(name) read_zarr_collection(store, name, columns) } @@ -433,12 +435,13 @@ read_zarr_data_frame <- function(store, name, include_index = FALSE, if (isTRUE(include_index)) { index <- read_zarr_data_frame_index(store, name) - df <- cbind(index, df) + # df <- cbind(index, df) # The default index name is not allowed as a column name so adjust it if (index_name == "_index") { - index_name <- ".index" - colnames(df)[1] <- index_name + rownames(df) <- index + # index_name <- ".index" + # colnames(df)[1] <- index_name } attr(df, "_index") <- index_name # nolint @@ -463,7 +466,6 @@ read_zarr_data_frame_index <- function(store, name, version = "0.2.0") { g <- pizzarr::zarr_open_group(store, path = name) - attributes <- g$get_attrs()$to_list() index_name <- attributes$`_index` diff --git a/R/write_zarr.R b/R/write_zarr.R index 166fed90..7a7c8d3c 100644 --- a/R/write_zarr.R +++ b/R/write_zarr.R @@ -8,6 +8,12 @@ #' @param compression The compression algorithm to use when writing the #' HDF5 file. Can be one of `"none"`, `"gzip"` or `"lzf"`. Defaults to #' `"none"`. +#' @param mode The mode to open the HDF5 file. +#' +#' * `a` creates a new file or opens an existing one for read/write. +#' * `r+` opens an existing file for read/write. +#' * `w` creates a file, truncating any existing ones +#' * `w-`/`x` are synonyms creating a file and failing if it already exists. #' #' @return `path` invisibly #' @export @@ -67,23 +73,27 @@ #' # h5ad_file <- tempfile(fileext = ".h5ad") #' # write_zarr(obj, h5ad_file) #' } -write_zarr <- function(object, store, compression = c("none", "gzip", "lzf")) { +write_zarr <- function(object, store, compression = c("none", "gzip", "lzf"), + mode = c("w-", "r", "r+", "a", "w", "x")) { + mode <- match.arg(mode) if (inherits(object, "SingleCellExperiment")) { from_SingleCellExperiment( object, output_class = "ZarrAnnData", store = store, - compression = compression + compression = compression, + mode = mode ) } else if (inherits(object, "Seurat")) { from_Seurat( object, output_class = "ZarrAnnData", store = store, - compression = compression + compression = compression, + mode = mode ) } else if (inherits(object, "AbstractAnnData")) { - to_ZarrAnnData(object, store, compression = compression) + to_ZarrAnnData(object, store, compression = compression, mode = mode) } else { stop("Unable to write object of class: ", class(object)) } diff --git a/R/write_zarr_helpers.R b/R/write_zarr_helpers.R index f332115a..0f4ef9eb 100644 --- a/R/write_zarr_helpers.R +++ b/R/write_zarr_helpers.R @@ -96,7 +96,7 @@ write_zarr_encoding <- function(store, name, encoding, version) { attrs <- g$get_attrs() attrs$set_item("encoding-type", encoding) - attrs$set_item("encoding-version", encoding) + attrs$set_item("encoding-version", version) } #' Write H5AD dense array @@ -234,7 +234,7 @@ write_zarr_string_array <- function(value, store, name, compression, version = " } else { dims <- length(value) } - + object_codec <- pizzarr::VLenUtf8Codec$new() data <- array(data = value, dim = dims) a <- pizzarr::zarr_create_array(data, store = store, path = name, dtype = "|O", object_codec = object_codec, shape = dims) @@ -424,18 +424,20 @@ write_zarr_data_frame_index <- function(value, store, name, compression, index_n #' #' @noRd #' -#' @param file Path to the H5AD file to write -#' @param obs_names Vector containing observation names -#' @param var_names Vector containing variable names +#' @param file Path to the Zarr store to write +#' @param obs Data frame with observations +#' @param var Data frame with variables #' @param compression The compression to use when writing the element. Can be #' one of `"none"`, `"gzip"` or `"lzf"`. Defaults to `"none"`. #' @param version The H5AD version to write -write_empty_zarr <- function(store, obs_names, var_names, compression, version = "0.1.0") { +write_empty_zarr <- function(store, obs, var, compression, version = "0.1.0") { pizzarr::zarr_open_group(store, path = "/") write_zarr_encoding(store, "/", "anndata", "0.1.0") - write_zarr_element(data.frame(row.names = obs_names), store, "/obs", compression) - write_zarr_element(data.frame(row.names = var_names), store, "/var", compression) + # write_zarr_element(data.frame(row.names = obs_names), store, "/obs", compression) + # write_zarr_element(data.frame(row.names = var_names), store, "/var", compression) + write_zarr_element(obs, store, "/obs", compression) + write_zarr_element(var, store, "/var", compression) pizzarr::zarr_open_group(store, path = "layers") write_zarr_encoding(store, "/layers", "dict", "0.1.0") @@ -462,11 +464,12 @@ write_empty_zarr <- function(store, obs_names, var_names, compression, version = #' #' @noRd #' -#' @param file Path to a HDF5 file +#' @param store Path to a Zarr store #' @param target_path The path within the file to test for #' #' @return Whether the `path` exists in `file` zarr_path_exists <- function(store, target_path) { + store <- pizzarr::zarr_open(store, path = target_path) result <- tryCatch({ store$get_item(target_path) return(TRUE) From 7f53049e363cfdff8ee3aabee2d265a83cdee63e Mon Sep 17 00:00:00 2001 From: Artur-man Date: Fri, 1 Nov 2024 22:43:25 +0100 Subject: [PATCH 17/25] update extdata and documentation --- inst/extdata/example2.zarr/.zattrs | 1 + inst/extdata/example2.zarr/.zgroup | 1 + inst/extdata/example2.zarr/X/.zattrs | 1 + inst/extdata/example2.zarr/X/.zgroup | 1 + inst/extdata/example2.zarr/X/data/.zarray | 1 + inst/extdata/example2.zarr/X/data/0 | Bin 0 -> 4588 bytes inst/extdata/example2.zarr/X/indices/.zarray | 1 + inst/extdata/example2.zarr/X/indices/0 | Bin 0 -> 4737 bytes inst/extdata/example2.zarr/X/indptr/.zarray | 1 + inst/extdata/example2.zarr/X/indptr/0 | Bin 0 -> 157 bytes inst/extdata/example2.zarr/layers/.zattrs | 1 + inst/extdata/example2.zarr/layers/.zgroup | 1 + .../example2.zarr/layers/counts/.zattrs | 1 + .../example2.zarr/layers/counts/.zgroup | 1 + .../example2.zarr/layers/counts/data/.zarray | 1 + .../example2.zarr/layers/counts/data/0 | Bin 0 -> 3117 bytes .../layers/counts/indices/.zarray | 1 + .../example2.zarr/layers/counts/indices/0 | Bin 0 -> 4737 bytes .../layers/counts/indptr/.zarray | 1 + .../example2.zarr/layers/counts/indptr/0 | Bin 0 -> 157 bytes .../example2.zarr/layers/csc_counts/.zattrs | 1 + .../example2.zarr/layers/csc_counts/.zgroup | 1 + .../layers/csc_counts/data/.zarray | 1 + .../example2.zarr/layers/csc_counts/data/0 | Bin 0 -> 3132 bytes .../layers/csc_counts/indices/.zarray | 1 + .../example2.zarr/layers/csc_counts/indices/0 | Bin 0 -> 4185 bytes .../layers/csc_counts/indptr/.zarray | 1 + .../example2.zarr/layers/csc_counts/indptr/0 | Bin 0 -> 180 bytes .../example2.zarr/layers/dense_X/.zarray | 1 + .../example2.zarr/layers/dense_X/.zattrs | 1 + inst/extdata/example2.zarr/layers/dense_X/0.0 | Bin 0 -> 8394 bytes .../example2.zarr/layers/dense_counts/.zarray | 1 + .../example2.zarr/layers/dense_counts/.zattrs | 1 + .../example2.zarr/layers/dense_counts/0.0 | Bin 0 -> 2695 bytes inst/extdata/example2.zarr/obs/.zattrs | 1 + inst/extdata/example2.zarr/obs/.zgroup | 1 + inst/extdata/example2.zarr/obs/Bool/.zarray | 1 + inst/extdata/example2.zarr/obs/Bool/.zattrs | 1 + inst/extdata/example2.zarr/obs/Bool/0 | Bin 0 -> 17 bytes inst/extdata/example2.zarr/obs/BoolNA/.zattrs | 1 + inst/extdata/example2.zarr/obs/BoolNA/.zgroup | 1 + .../example2.zarr/obs/BoolNA/mask/.zarray | 1 + inst/extdata/example2.zarr/obs/BoolNA/mask/0 | Bin 0 -> 18 bytes .../example2.zarr/obs/BoolNA/values/.zarray | 1 + .../extdata/example2.zarr/obs/BoolNA/values/0 | Bin 0 -> 18 bytes inst/extdata/example2.zarr/obs/Float/.zarray | 1 + inst/extdata/example2.zarr/obs/Float/.zattrs | 1 + inst/extdata/example2.zarr/obs/Float/0 | Bin 0 -> 25 bytes .../extdata/example2.zarr/obs/FloatNA/.zarray | 1 + .../extdata/example2.zarr/obs/FloatNA/.zattrs | 1 + inst/extdata/example2.zarr/obs/FloatNA/0 | Bin 0 -> 33 bytes inst/extdata/example2.zarr/obs/Int/.zarray | 1 + inst/extdata/example2.zarr/obs/Int/.zattrs | 1 + inst/extdata/example2.zarr/obs/Int/0 | Bin 0 -> 81 bytes inst/extdata/example2.zarr/obs/IntNA/.zattrs | 1 + inst/extdata/example2.zarr/obs/IntNA/.zgroup | 1 + .../example2.zarr/obs/IntNA/mask/.zarray | 1 + inst/extdata/example2.zarr/obs/IntNA/mask/0 | Bin 0 -> 17 bytes .../example2.zarr/obs/IntNA/values/.zarray | 1 + inst/extdata/example2.zarr/obs/IntNA/values/0 | Bin 0 -> 48 bytes inst/extdata/example2.zarr/obs/_index/.zarray | 1 + inst/extdata/example2.zarr/obs/_index/.zattrs | 1 + inst/extdata/example2.zarr/obs/_index/0 | Bin 0 -> 126 bytes inst/extdata/example2.zarr/obs/leiden/.zattrs | 1 + inst/extdata/example2.zarr/obs/leiden/.zgroup | 1 + .../obs/leiden/categories/.zarray | 1 + .../example2.zarr/obs/leiden/categories/0 | Bin 0 -> 43 bytes .../example2.zarr/obs/leiden/codes/.zarray | 1 + inst/extdata/example2.zarr/obs/leiden/codes/0 | Bin 0 -> 53 bytes .../example2.zarr/obs/leiden/ordered/.zarray | 1 + .../example2.zarr/obs/leiden/ordered/0 | Bin 0 -> 10 bytes .../obs/log1p_n_genes_by_counts/.zarray | 1 + .../obs/log1p_n_genes_by_counts/.zattrs | 1 + .../obs/log1p_n_genes_by_counts/0 | Bin 0 -> 199 bytes .../obs/log1p_total_counts/.zarray | 1 + .../obs/log1p_total_counts/.zattrs | 1 + .../example2.zarr/obs/log1p_total_counts/0 | Bin 0 -> 220 bytes .../obs/n_genes_by_counts/.zarray | 1 + .../obs/n_genes_by_counts/.zattrs | 1 + .../example2.zarr/obs/n_genes_by_counts/0 | Bin 0 -> 72 bytes .../example2.zarr/obs/total_counts/.zarray | 1 + .../example2.zarr/obs/total_counts/.zattrs | 1 + inst/extdata/example2.zarr/obs/total_counts/0 | Bin 0 -> 153 bytes inst/extdata/example2.zarr/obsm/.zattrs | 1 + inst/extdata/example2.zarr/obsm/.zgroup | 1 + inst/extdata/example2.zarr/obsm/X_pca/.zarray | 1 + inst/extdata/example2.zarr/obsm/X_pca/.zattrs | 1 + inst/extdata/example2.zarr/obsm/X_pca/0.0 | Bin 0 -> 8460 bytes .../extdata/example2.zarr/obsm/X_umap/.zarray | 1 + .../extdata/example2.zarr/obsm/X_umap/.zattrs | 1 + inst/extdata/example2.zarr/obsm/X_umap/0.0 | Bin 0 -> 544 bytes inst/extdata/example2.zarr/obsp/.zattrs | 1 + inst/extdata/example2.zarr/obsp/.zgroup | 1 + .../example2.zarr/obsp/connectivities/.zattrs | 1 + .../example2.zarr/obsp/connectivities/.zgroup | 1 + .../obsp/connectivities/data/.zarray | 1 + .../example2.zarr/obsp/connectivities/data/0 | Bin 0 -> 3072 bytes .../obsp/connectivities/indices/.zarray | 1 + .../obsp/connectivities/indices/0 | Bin 0 -> 961 bytes .../obsp/connectivities/indptr/.zarray | 1 + .../obsp/connectivities/indptr/0 | Bin 0 -> 154 bytes .../example2.zarr/obsp/distances/.zattrs | 1 + .../example2.zarr/obsp/distances/.zgroup | 1 + .../example2.zarr/obsp/distances/data/.zarray | 1 + .../example2.zarr/obsp/distances/data/0 | Bin 0 -> 2406 bytes .../obsp/distances/indices/.zarray | 1 + .../example2.zarr/obsp/distances/indices/0 | Bin 0 -> 693 bytes .../obsp/distances/indptr/.zarray | 1 + .../example2.zarr/obsp/distances/indptr/0 | Bin 0 -> 159 bytes inst/extdata/example2.zarr/uns/.zattrs | 1 + inst/extdata/example2.zarr/uns/.zgroup | 1 + inst/extdata/example2.zarr/uns/Bool/.zarray | 1 + inst/extdata/example2.zarr/uns/Bool/.zattrs | 1 + inst/extdata/example2.zarr/uns/Bool/0 | Bin 0 -> 12 bytes inst/extdata/example2.zarr/uns/BoolNA/.zattrs | 1 + inst/extdata/example2.zarr/uns/BoolNA/.zgroup | 1 + .../example2.zarr/uns/BoolNA/mask/.zarray | 1 + inst/extdata/example2.zarr/uns/BoolNA/mask/0 | Bin 0 -> 12 bytes .../example2.zarr/uns/BoolNA/values/.zarray | 1 + .../extdata/example2.zarr/uns/BoolNA/values/0 | Bin 0 -> 12 bytes .../example2.zarr/uns/Category/.zattrs | 1 + .../example2.zarr/uns/Category/.zgroup | 1 + .../uns/Category/categories/.zarray | 1 + .../example2.zarr/uns/Category/categories/0 | Bin 0 -> 23 bytes .../example2.zarr/uns/Category/codes/.zarray | 1 + .../example2.zarr/uns/Category/codes/0 | Bin 0 -> 26 bytes .../uns/Category/ordered/.zarray | 1 + .../example2.zarr/uns/Category/ordered/0 | Bin 0 -> 10 bytes .../example2.zarr/uns/DataFrameEmpty/.zattrs | 1 + .../example2.zarr/uns/DataFrameEmpty/.zgroup | 1 + .../uns/DataFrameEmpty/_index/.zarray | 1 + .../uns/DataFrameEmpty/_index/.zattrs | 1 + .../example2.zarr/uns/DataFrameEmpty/_index/0 | Bin 0 -> 126 bytes inst/extdata/example2.zarr/uns/Int/.zarray | 1 + inst/extdata/example2.zarr/uns/Int/.zattrs | 1 + inst/extdata/example2.zarr/uns/Int/0 | Bin 0 -> 29 bytes inst/extdata/example2.zarr/uns/IntNA/.zattrs | 1 + inst/extdata/example2.zarr/uns/IntNA/.zgroup | 1 + .../example2.zarr/uns/IntNA/mask/.zarray | 1 + inst/extdata/example2.zarr/uns/IntNA/mask/0 | Bin 0 -> 12 bytes .../example2.zarr/uns/IntNA/values/.zarray | 1 + inst/extdata/example2.zarr/uns/IntNA/values/0 | Bin 0 -> 29 bytes .../example2.zarr/uns/IntScalar/.zarray | 1 + .../example2.zarr/uns/IntScalar/.zattrs | 1 + inst/extdata/example2.zarr/uns/IntScalar/0 | Bin 0 -> 17 bytes .../example2.zarr/uns/Sparse1D/.zattrs | 1 + .../example2.zarr/uns/Sparse1D/.zgroup | 1 + .../example2.zarr/uns/Sparse1D/data/.zarray | 1 + .../extdata/example2.zarr/uns/Sparse1D/data/0 | Bin 0 -> 33 bytes .../uns/Sparse1D/indices/.zarray | 1 + .../example2.zarr/uns/Sparse1D/indices/0 | Bin 0 -> 17 bytes .../example2.zarr/uns/Sparse1D/indptr/.zarray | 1 + .../example2.zarr/uns/Sparse1D/indptr/0 | Bin 0 -> 36 bytes inst/extdata/example2.zarr/uns/String/.zarray | 1 + inst/extdata/example2.zarr/uns/String/.zattrs | 1 + inst/extdata/example2.zarr/uns/String/0 | Bin 0 -> 50 bytes .../example2.zarr/uns/String2D/.zarray | 1 + .../example2.zarr/uns/String2D/.zattrs | 1 + inst/extdata/example2.zarr/uns/String2D/0.0 | Bin 0 -> 89 bytes .../example2.zarr/uns/StringScalar/.zarray | 1 + .../example2.zarr/uns/StringScalar/.zattrs | 1 + inst/extdata/example2.zarr/uns/StringScalar/0 | Bin 0 -> 25 bytes inst/extdata/example2.zarr/uns/hvg/.zattrs | 1 + inst/extdata/example2.zarr/uns/hvg/.zgroup | 1 + .../example2.zarr/uns/hvg/flavor/.zarray | 1 + .../example2.zarr/uns/hvg/flavor/.zattrs | 1 + inst/extdata/example2.zarr/uns/hvg/flavor/0 | Bin 0 -> 23 bytes inst/extdata/example2.zarr/uns/leiden/.zattrs | 1 + inst/extdata/example2.zarr/uns/leiden/.zgroup | 1 + .../example2.zarr/uns/leiden/params/.zattrs | 1 + .../example2.zarr/uns/leiden/params/.zgroup | 1 + .../uns/leiden/params/n_iterations/.zarray | 1 + .../uns/leiden/params/n_iterations/.zattrs | 1 + .../uns/leiden/params/n_iterations/0 | Bin 0 -> 17 bytes .../uns/leiden/params/random_state/.zarray | 1 + .../uns/leiden/params/random_state/.zattrs | 1 + .../uns/leiden/params/random_state/0 | Bin 0 -> 17 bytes .../uns/leiden/params/resolution/.zarray | 1 + .../uns/leiden/params/resolution/.zattrs | 1 + .../uns/leiden/params/resolution/0 | Bin 0 -> 17 bytes inst/extdata/example2.zarr/uns/log1p/.zattrs | 1 + inst/extdata/example2.zarr/uns/log1p/.zgroup | 1 + .../example2.zarr/uns/neighbors/.zattrs | 1 + .../example2.zarr/uns/neighbors/.zgroup | 1 + .../uns/neighbors/connectivities_key/.zarray | 1 + .../uns/neighbors/connectivities_key/.zattrs | 1 + .../uns/neighbors/connectivities_key/0 | Bin 0 -> 31 bytes .../uns/neighbors/distances_key/.zarray | 1 + .../uns/neighbors/distances_key/.zattrs | 1 + .../uns/neighbors/distances_key/0 | Bin 0 -> 26 bytes .../uns/neighbors/params/.zattrs | 1 + .../uns/neighbors/params/.zgroup | 1 + .../uns/neighbors/params/method/.zarray | 1 + .../uns/neighbors/params/method/.zattrs | 1 + .../uns/neighbors/params/method/0 | Bin 0 -> 21 bytes .../uns/neighbors/params/metric/.zarray | 1 + .../uns/neighbors/params/metric/.zattrs | 1 + .../uns/neighbors/params/metric/0 | Bin 0 -> 26 bytes .../uns/neighbors/params/n_neighbors/.zarray | 1 + .../uns/neighbors/params/n_neighbors/.zattrs | 1 + .../uns/neighbors/params/n_neighbors/0 | Bin 0 -> 17 bytes .../uns/neighbors/params/random_state/.zarray | 1 + .../uns/neighbors/params/random_state/.zattrs | 1 + .../uns/neighbors/params/random_state/0 | Bin 0 -> 17 bytes inst/extdata/example2.zarr/uns/pca/.zattrs | 1 + inst/extdata/example2.zarr/uns/pca/.zgroup | 1 + .../example2.zarr/uns/pca/params/.zattrs | 1 + .../example2.zarr/uns/pca/params/.zgroup | 1 + .../pca/params/use_highly_variable/.zarray | 1 + .../pca/params/use_highly_variable/.zattrs | 1 + .../uns/pca/params/use_highly_variable/0 | Bin 0 -> 10 bytes .../uns/pca/params/zero_center/.zarray | 1 + .../uns/pca/params/zero_center/.zattrs | 1 + .../uns/pca/params/zero_center/0 | Bin 0 -> 10 bytes .../example2.zarr/uns/pca/variance/.zarray | 1 + .../example2.zarr/uns/pca/variance/.zattrs | 1 + inst/extdata/example2.zarr/uns/pca/variance/0 | Bin 0 -> 246 bytes .../uns/pca/variance_ratio/.zarray | 1 + .../uns/pca/variance_ratio/.zattrs | 1 + .../example2.zarr/uns/pca/variance_ratio/0 | Bin 0 -> 239 bytes .../uns/rank_genes_groups/.zattrs | 1 + .../uns/rank_genes_groups/.zgroup | 1 + .../rank_genes_groups/logfoldchanges/.zattrs | 1 + .../rank_genes_groups/logfoldchanges/.zgroup | 1 + .../logfoldchanges/0/.zarray | 1 + .../logfoldchanges/0/.zattrs | 1 + .../uns/rank_genes_groups/logfoldchanges/0/0 | Bin 0 -> 494 bytes .../logfoldchanges/1/.zarray | 1 + .../logfoldchanges/1/.zattrs | 1 + .../uns/rank_genes_groups/logfoldchanges/1/0 | Bin 0 -> 518 bytes .../logfoldchanges/2/.zarray | 1 + .../logfoldchanges/2/.zattrs | 1 + .../uns/rank_genes_groups/logfoldchanges/2/0 | Bin 0 -> 512 bytes .../logfoldchanges/3/.zarray | 1 + .../logfoldchanges/3/.zattrs | 1 + .../uns/rank_genes_groups/logfoldchanges/3/0 | Bin 0 -> 499 bytes .../logfoldchanges/4/.zarray | 1 + .../logfoldchanges/4/.zattrs | 1 + .../uns/rank_genes_groups/logfoldchanges/4/0 | Bin 0 -> 503 bytes .../logfoldchanges/5/.zarray | 1 + .../logfoldchanges/5/.zattrs | 1 + .../uns/rank_genes_groups/logfoldchanges/5/0 | Bin 0 -> 511 bytes .../uns/rank_genes_groups/names/.zattrs | 1 + .../uns/rank_genes_groups/names/.zgroup | 1 + .../uns/rank_genes_groups/names/0/.zarray | 1 + .../uns/rank_genes_groups/names/0/.zattrs | 1 + .../uns/rank_genes_groups/names/0/0 | Bin 0 -> 155 bytes .../uns/rank_genes_groups/names/1/.zarray | 1 + .../uns/rank_genes_groups/names/1/.zattrs | 1 + .../uns/rank_genes_groups/names/1/0 | Bin 0 -> 154 bytes .../uns/rank_genes_groups/names/2/.zarray | 1 + .../uns/rank_genes_groups/names/2/.zattrs | 1 + .../uns/rank_genes_groups/names/2/0 | Bin 0 -> 156 bytes .../uns/rank_genes_groups/names/3/.zarray | 1 + .../uns/rank_genes_groups/names/3/.zattrs | 1 + .../uns/rank_genes_groups/names/3/0 | Bin 0 -> 155 bytes .../uns/rank_genes_groups/names/4/.zarray | 1 + .../uns/rank_genes_groups/names/4/.zattrs | 1 + .../uns/rank_genes_groups/names/4/0 | Bin 0 -> 155 bytes .../uns/rank_genes_groups/names/5/.zarray | 1 + .../uns/rank_genes_groups/names/5/.zattrs | 1 + .../uns/rank_genes_groups/names/5/0 | Bin 0 -> 154 bytes .../uns/rank_genes_groups/params/.zattrs | 1 + .../uns/rank_genes_groups/params/.zgroup | 1 + .../params/corr_method/.zarray | 1 + .../params/corr_method/.zattrs | 1 + .../rank_genes_groups/params/corr_method/0 | Bin 0 -> 35 bytes .../rank_genes_groups/params/groupby/.zarray | 1 + .../rank_genes_groups/params/groupby/.zattrs | 1 + .../uns/rank_genes_groups/params/groupby/0 | Bin 0 -> 23 bytes .../rank_genes_groups/params/method/.zarray | 1 + .../rank_genes_groups/params/method/.zattrs | 1 + .../uns/rank_genes_groups/params/method/0 | Bin 0 -> 23 bytes .../params/reference/.zarray | 1 + .../params/reference/.zattrs | 1 + .../uns/rank_genes_groups/params/reference/0 | Bin 0 -> 21 bytes .../rank_genes_groups/params/use_raw/.zarray | 1 + .../rank_genes_groups/params/use_raw/.zattrs | 1 + .../uns/rank_genes_groups/params/use_raw/0 | Bin 0 -> 10 bytes .../uns/rank_genes_groups/pvals/.zattrs | 1 + .../uns/rank_genes_groups/pvals/.zgroup | 1 + .../uns/rank_genes_groups/pvals/0/.zarray | 1 + .../uns/rank_genes_groups/pvals/0/.zattrs | 1 + .../uns/rank_genes_groups/pvals/0/0 | Bin 0 -> 810 bytes .../uns/rank_genes_groups/pvals/1/.zarray | 1 + .../uns/rank_genes_groups/pvals/1/.zattrs | 1 + .../uns/rank_genes_groups/pvals/1/0 | Bin 0 -> 810 bytes .../uns/rank_genes_groups/pvals/2/.zarray | 1 + .../uns/rank_genes_groups/pvals/2/.zattrs | 1 + .../uns/rank_genes_groups/pvals/2/0 | Bin 0 -> 810 bytes .../uns/rank_genes_groups/pvals/3/.zarray | 1 + .../uns/rank_genes_groups/pvals/3/.zattrs | 1 + .../uns/rank_genes_groups/pvals/3/0 | Bin 0 -> 810 bytes .../uns/rank_genes_groups/pvals/4/.zarray | 1 + .../uns/rank_genes_groups/pvals/4/.zattrs | 1 + .../uns/rank_genes_groups/pvals/4/0 | Bin 0 -> 810 bytes .../uns/rank_genes_groups/pvals/5/.zarray | 1 + .../uns/rank_genes_groups/pvals/5/.zattrs | 1 + .../uns/rank_genes_groups/pvals/5/0 | Bin 0 -> 810 bytes .../uns/rank_genes_groups/pvals_adj/.zattrs | 1 + .../uns/rank_genes_groups/pvals_adj/.zgroup | 1 + .../uns/rank_genes_groups/pvals_adj/0/.zarray | 1 + .../uns/rank_genes_groups/pvals_adj/0/.zattrs | 1 + .../uns/rank_genes_groups/pvals_adj/0/0 | Bin 0 -> 257 bytes .../uns/rank_genes_groups/pvals_adj/1/.zarray | 1 + .../uns/rank_genes_groups/pvals_adj/1/.zattrs | 1 + .../uns/rank_genes_groups/pvals_adj/1/0 | Bin 0 -> 338 bytes .../uns/rank_genes_groups/pvals_adj/2/.zarray | 1 + .../uns/rank_genes_groups/pvals_adj/2/.zattrs | 1 + .../uns/rank_genes_groups/pvals_adj/2/0 | Bin 0 -> 359 bytes .../uns/rank_genes_groups/pvals_adj/3/.zarray | 1 + .../uns/rank_genes_groups/pvals_adj/3/.zattrs | 1 + .../uns/rank_genes_groups/pvals_adj/3/0 | Bin 0 -> 395 bytes .../uns/rank_genes_groups/pvals_adj/4/.zarray | 1 + .../uns/rank_genes_groups/pvals_adj/4/.zattrs | 1 + .../uns/rank_genes_groups/pvals_adj/4/0 | Bin 0 -> 317 bytes .../uns/rank_genes_groups/pvals_adj/5/.zarray | 1 + .../uns/rank_genes_groups/pvals_adj/5/.zattrs | 1 + .../uns/rank_genes_groups/pvals_adj/5/0 | Bin 0 -> 273 bytes .../uns/rank_genes_groups/scores/.zattrs | 1 + .../uns/rank_genes_groups/scores/.zgroup | 1 + .../uns/rank_genes_groups/scores/0/.zarray | 1 + .../uns/rank_genes_groups/scores/0/.zattrs | 1 + .../uns/rank_genes_groups/scores/0/0 | Bin 0 -> 488 bytes .../uns/rank_genes_groups/scores/1/.zarray | 1 + .../uns/rank_genes_groups/scores/1/.zattrs | 1 + .../uns/rank_genes_groups/scores/1/0 | Bin 0 -> 492 bytes .../uns/rank_genes_groups/scores/2/.zarray | 1 + .../uns/rank_genes_groups/scores/2/.zattrs | 1 + .../uns/rank_genes_groups/scores/2/0 | Bin 0 -> 496 bytes .../uns/rank_genes_groups/scores/3/.zarray | 1 + .../uns/rank_genes_groups/scores/3/.zattrs | 1 + .../uns/rank_genes_groups/scores/3/0 | Bin 0 -> 492 bytes .../uns/rank_genes_groups/scores/4/.zarray | 1 + .../uns/rank_genes_groups/scores/4/.zattrs | 1 + .../uns/rank_genes_groups/scores/4/0 | Bin 0 -> 477 bytes .../uns/rank_genes_groups/scores/5/.zarray | 1 + .../uns/rank_genes_groups/scores/5/.zattrs | 1 + .../uns/rank_genes_groups/scores/5/0 | Bin 0 -> 477 bytes inst/extdata/example2.zarr/uns/umap/.zattrs | 1 + inst/extdata/example2.zarr/uns/umap/.zgroup | 1 + .../example2.zarr/uns/umap/params/.zattrs | 1 + .../example2.zarr/uns/umap/params/.zgroup | 1 + .../example2.zarr/uns/umap/params/a/.zarray | 1 + .../example2.zarr/uns/umap/params/a/.zattrs | 1 + .../extdata/example2.zarr/uns/umap/params/a/0 | Bin 0 -> 17 bytes .../example2.zarr/uns/umap/params/b/.zarray | 1 + .../example2.zarr/uns/umap/params/b/.zattrs | 1 + .../extdata/example2.zarr/uns/umap/params/b/0 | Bin 0 -> 17 bytes inst/extdata/example2.zarr/var/.zattrs | 1 + inst/extdata/example2.zarr/var/.zgroup | 1 + inst/extdata/example2.zarr/var/String/.zarray | 1 + inst/extdata/example2.zarr/var/String/.zattrs | 1 + inst/extdata/example2.zarr/var/String/0 | Bin 0 -> 127 bytes inst/extdata/example2.zarr/var/_index/.zarray | 1 + inst/extdata/example2.zarr/var/_index/.zattrs | 1 + inst/extdata/example2.zarr/var/_index/0 | Bin 0 -> 115 bytes .../example2.zarr/var/dispersions/.zarray | 1 + .../example2.zarr/var/dispersions/.zattrs | 1 + inst/extdata/example2.zarr/var/dispersions/0 | Bin 0 -> 810 bytes .../var/dispersions_norm/.zarray | 1 + .../var/dispersions_norm/.zattrs | 1 + .../example2.zarr/var/dispersions_norm/0 | Bin 0 -> 517 bytes .../example2.zarr/var/highly_variable/.zarray | 1 + .../example2.zarr/var/highly_variable/.zattrs | 1 + .../example2.zarr/var/highly_variable/0 | Bin 0 -> 70 bytes .../var/log1p_mean_counts/.zarray | 1 + .../var/log1p_mean_counts/.zattrs | 1 + .../example2.zarr/var/log1p_mean_counts/0 | Bin 0 -> 314 bytes .../var/log1p_total_counts/.zarray | 1 + .../var/log1p_total_counts/.zattrs | 1 + .../example2.zarr/var/log1p_total_counts/0 | Bin 0 -> 319 bytes .../example2.zarr/var/mean_counts/.zarray | 1 + .../example2.zarr/var/mean_counts/.zattrs | 1 + inst/extdata/example2.zarr/var/mean_counts/0 | Bin 0 -> 320 bytes inst/extdata/example2.zarr/var/means/.zarray | 1 + inst/extdata/example2.zarr/var/means/.zattrs | 1 + inst/extdata/example2.zarr/var/means/0 | Bin 0 -> 810 bytes .../var/n_cells_by_counts/.zarray | 1 + .../var/n_cells_by_counts/.zattrs | 1 + .../example2.zarr/var/n_cells_by_counts/0 | Bin 0 -> 103 bytes .../var/pct_dropout_by_counts/.zarray | 1 + .../var/pct_dropout_by_counts/.zattrs | 1 + .../example2.zarr/var/pct_dropout_by_counts/0 | Bin 0 -> 220 bytes .../example2.zarr/var/total_counts/.zarray | 1 + .../example2.zarr/var/total_counts/.zattrs | 1 + inst/extdata/example2.zarr/var/total_counts/0 | Bin 0 -> 169 bytes inst/extdata/example2.zarr/varm/.zattrs | 1 + inst/extdata/example2.zarr/varm/.zgroup | 1 + inst/extdata/example2.zarr/varm/PCs/.zarray | 1 + inst/extdata/example2.zarr/varm/PCs/.zattrs | 1 + inst/extdata/example2.zarr/varm/PCs/0.0 | Bin 0 -> 8528 bytes inst/extdata/example2.zarr/varp/.zattrs | 1 + inst/extdata/example2.zarr/varp/.zgroup | 1 + man/from_Seurat.Rd | 2 +- man/from_SingleCellExperiment.Rd | 2 +- man/read_zarr.Rd | 40 ++++++++ man/write_zarr.Rd | 93 ++++++++++++++++++ tests/testthat/test-h5ad-zarr.R | 13 ++- 399 files changed, 422 insertions(+), 6 deletions(-) create mode 100644 inst/extdata/example2.zarr/.zattrs create mode 100644 inst/extdata/example2.zarr/.zgroup create mode 100644 inst/extdata/example2.zarr/X/.zattrs create mode 100644 inst/extdata/example2.zarr/X/.zgroup create mode 100644 inst/extdata/example2.zarr/X/data/.zarray create mode 100644 inst/extdata/example2.zarr/X/data/0 create mode 100644 inst/extdata/example2.zarr/X/indices/.zarray create mode 100644 inst/extdata/example2.zarr/X/indices/0 create mode 100644 inst/extdata/example2.zarr/X/indptr/.zarray create mode 100644 inst/extdata/example2.zarr/X/indptr/0 create mode 100644 inst/extdata/example2.zarr/layers/.zattrs create mode 100644 inst/extdata/example2.zarr/layers/.zgroup create mode 100644 inst/extdata/example2.zarr/layers/counts/.zattrs create mode 100644 inst/extdata/example2.zarr/layers/counts/.zgroup create mode 100644 inst/extdata/example2.zarr/layers/counts/data/.zarray create mode 100644 inst/extdata/example2.zarr/layers/counts/data/0 create mode 100644 inst/extdata/example2.zarr/layers/counts/indices/.zarray create mode 100644 inst/extdata/example2.zarr/layers/counts/indices/0 create mode 100644 inst/extdata/example2.zarr/layers/counts/indptr/.zarray create mode 100644 inst/extdata/example2.zarr/layers/counts/indptr/0 create mode 100644 inst/extdata/example2.zarr/layers/csc_counts/.zattrs create mode 100644 inst/extdata/example2.zarr/layers/csc_counts/.zgroup create mode 100644 inst/extdata/example2.zarr/layers/csc_counts/data/.zarray create mode 100644 inst/extdata/example2.zarr/layers/csc_counts/data/0 create mode 100644 inst/extdata/example2.zarr/layers/csc_counts/indices/.zarray create mode 100644 inst/extdata/example2.zarr/layers/csc_counts/indices/0 create mode 100644 inst/extdata/example2.zarr/layers/csc_counts/indptr/.zarray create mode 100644 inst/extdata/example2.zarr/layers/csc_counts/indptr/0 create mode 100644 inst/extdata/example2.zarr/layers/dense_X/.zarray create mode 100644 inst/extdata/example2.zarr/layers/dense_X/.zattrs create mode 100644 inst/extdata/example2.zarr/layers/dense_X/0.0 create mode 100644 inst/extdata/example2.zarr/layers/dense_counts/.zarray create mode 100644 inst/extdata/example2.zarr/layers/dense_counts/.zattrs create mode 100644 inst/extdata/example2.zarr/layers/dense_counts/0.0 create mode 100644 inst/extdata/example2.zarr/obs/.zattrs create mode 100644 inst/extdata/example2.zarr/obs/.zgroup create mode 100644 inst/extdata/example2.zarr/obs/Bool/.zarray create mode 100644 inst/extdata/example2.zarr/obs/Bool/.zattrs create mode 100644 inst/extdata/example2.zarr/obs/Bool/0 create mode 100644 inst/extdata/example2.zarr/obs/BoolNA/.zattrs create mode 100644 inst/extdata/example2.zarr/obs/BoolNA/.zgroup create mode 100644 inst/extdata/example2.zarr/obs/BoolNA/mask/.zarray create mode 100644 inst/extdata/example2.zarr/obs/BoolNA/mask/0 create mode 100644 inst/extdata/example2.zarr/obs/BoolNA/values/.zarray create mode 100644 inst/extdata/example2.zarr/obs/BoolNA/values/0 create mode 100644 inst/extdata/example2.zarr/obs/Float/.zarray create mode 100644 inst/extdata/example2.zarr/obs/Float/.zattrs create mode 100644 inst/extdata/example2.zarr/obs/Float/0 create mode 100644 inst/extdata/example2.zarr/obs/FloatNA/.zarray create mode 100644 inst/extdata/example2.zarr/obs/FloatNA/.zattrs create mode 100644 inst/extdata/example2.zarr/obs/FloatNA/0 create mode 100644 inst/extdata/example2.zarr/obs/Int/.zarray create mode 100644 inst/extdata/example2.zarr/obs/Int/.zattrs create mode 100644 inst/extdata/example2.zarr/obs/Int/0 create mode 100644 inst/extdata/example2.zarr/obs/IntNA/.zattrs create mode 100644 inst/extdata/example2.zarr/obs/IntNA/.zgroup create mode 100644 inst/extdata/example2.zarr/obs/IntNA/mask/.zarray create mode 100644 inst/extdata/example2.zarr/obs/IntNA/mask/0 create mode 100644 inst/extdata/example2.zarr/obs/IntNA/values/.zarray create mode 100644 inst/extdata/example2.zarr/obs/IntNA/values/0 create mode 100644 inst/extdata/example2.zarr/obs/_index/.zarray create mode 100644 inst/extdata/example2.zarr/obs/_index/.zattrs create mode 100644 inst/extdata/example2.zarr/obs/_index/0 create mode 100644 inst/extdata/example2.zarr/obs/leiden/.zattrs create mode 100644 inst/extdata/example2.zarr/obs/leiden/.zgroup create mode 100644 inst/extdata/example2.zarr/obs/leiden/categories/.zarray create mode 100644 inst/extdata/example2.zarr/obs/leiden/categories/0 create mode 100644 inst/extdata/example2.zarr/obs/leiden/codes/.zarray create mode 100644 inst/extdata/example2.zarr/obs/leiden/codes/0 create mode 100644 inst/extdata/example2.zarr/obs/leiden/ordered/.zarray create mode 100644 inst/extdata/example2.zarr/obs/leiden/ordered/0 create mode 100644 inst/extdata/example2.zarr/obs/log1p_n_genes_by_counts/.zarray create mode 100644 inst/extdata/example2.zarr/obs/log1p_n_genes_by_counts/.zattrs create mode 100644 inst/extdata/example2.zarr/obs/log1p_n_genes_by_counts/0 create mode 100644 inst/extdata/example2.zarr/obs/log1p_total_counts/.zarray create mode 100644 inst/extdata/example2.zarr/obs/log1p_total_counts/.zattrs create mode 100644 inst/extdata/example2.zarr/obs/log1p_total_counts/0 create mode 100644 inst/extdata/example2.zarr/obs/n_genes_by_counts/.zarray create mode 100644 inst/extdata/example2.zarr/obs/n_genes_by_counts/.zattrs create mode 100644 inst/extdata/example2.zarr/obs/n_genes_by_counts/0 create mode 100644 inst/extdata/example2.zarr/obs/total_counts/.zarray create mode 100644 inst/extdata/example2.zarr/obs/total_counts/.zattrs create mode 100644 inst/extdata/example2.zarr/obs/total_counts/0 create mode 100644 inst/extdata/example2.zarr/obsm/.zattrs create mode 100644 inst/extdata/example2.zarr/obsm/.zgroup create mode 100644 inst/extdata/example2.zarr/obsm/X_pca/.zarray create mode 100644 inst/extdata/example2.zarr/obsm/X_pca/.zattrs create mode 100644 inst/extdata/example2.zarr/obsm/X_pca/0.0 create mode 100644 inst/extdata/example2.zarr/obsm/X_umap/.zarray create mode 100644 inst/extdata/example2.zarr/obsm/X_umap/.zattrs create mode 100644 inst/extdata/example2.zarr/obsm/X_umap/0.0 create mode 100644 inst/extdata/example2.zarr/obsp/.zattrs create mode 100644 inst/extdata/example2.zarr/obsp/.zgroup create mode 100644 inst/extdata/example2.zarr/obsp/connectivities/.zattrs create mode 100644 inst/extdata/example2.zarr/obsp/connectivities/.zgroup create mode 100644 inst/extdata/example2.zarr/obsp/connectivities/data/.zarray create mode 100644 inst/extdata/example2.zarr/obsp/connectivities/data/0 create mode 100644 inst/extdata/example2.zarr/obsp/connectivities/indices/.zarray create mode 100644 inst/extdata/example2.zarr/obsp/connectivities/indices/0 create mode 100644 inst/extdata/example2.zarr/obsp/connectivities/indptr/.zarray create mode 100644 inst/extdata/example2.zarr/obsp/connectivities/indptr/0 create mode 100644 inst/extdata/example2.zarr/obsp/distances/.zattrs create mode 100644 inst/extdata/example2.zarr/obsp/distances/.zgroup create mode 100644 inst/extdata/example2.zarr/obsp/distances/data/.zarray create mode 100644 inst/extdata/example2.zarr/obsp/distances/data/0 create mode 100644 inst/extdata/example2.zarr/obsp/distances/indices/.zarray create mode 100644 inst/extdata/example2.zarr/obsp/distances/indices/0 create mode 100644 inst/extdata/example2.zarr/obsp/distances/indptr/.zarray create mode 100644 inst/extdata/example2.zarr/obsp/distances/indptr/0 create mode 100644 inst/extdata/example2.zarr/uns/.zattrs create mode 100644 inst/extdata/example2.zarr/uns/.zgroup create mode 100644 inst/extdata/example2.zarr/uns/Bool/.zarray create mode 100644 inst/extdata/example2.zarr/uns/Bool/.zattrs create mode 100644 inst/extdata/example2.zarr/uns/Bool/0 create mode 100644 inst/extdata/example2.zarr/uns/BoolNA/.zattrs create mode 100644 inst/extdata/example2.zarr/uns/BoolNA/.zgroup create mode 100644 inst/extdata/example2.zarr/uns/BoolNA/mask/.zarray create mode 100644 inst/extdata/example2.zarr/uns/BoolNA/mask/0 create mode 100644 inst/extdata/example2.zarr/uns/BoolNA/values/.zarray create mode 100644 inst/extdata/example2.zarr/uns/BoolNA/values/0 create mode 100644 inst/extdata/example2.zarr/uns/Category/.zattrs create mode 100644 inst/extdata/example2.zarr/uns/Category/.zgroup create mode 100644 inst/extdata/example2.zarr/uns/Category/categories/.zarray create mode 100644 inst/extdata/example2.zarr/uns/Category/categories/0 create mode 100644 inst/extdata/example2.zarr/uns/Category/codes/.zarray create mode 100644 inst/extdata/example2.zarr/uns/Category/codes/0 create mode 100644 inst/extdata/example2.zarr/uns/Category/ordered/.zarray create mode 100644 inst/extdata/example2.zarr/uns/Category/ordered/0 create mode 100644 inst/extdata/example2.zarr/uns/DataFrameEmpty/.zattrs create mode 100644 inst/extdata/example2.zarr/uns/DataFrameEmpty/.zgroup create mode 100644 inst/extdata/example2.zarr/uns/DataFrameEmpty/_index/.zarray create mode 100644 inst/extdata/example2.zarr/uns/DataFrameEmpty/_index/.zattrs create mode 100644 inst/extdata/example2.zarr/uns/DataFrameEmpty/_index/0 create mode 100644 inst/extdata/example2.zarr/uns/Int/.zarray create mode 100644 inst/extdata/example2.zarr/uns/Int/.zattrs create mode 100644 inst/extdata/example2.zarr/uns/Int/0 create mode 100644 inst/extdata/example2.zarr/uns/IntNA/.zattrs create mode 100644 inst/extdata/example2.zarr/uns/IntNA/.zgroup create mode 100644 inst/extdata/example2.zarr/uns/IntNA/mask/.zarray create mode 100644 inst/extdata/example2.zarr/uns/IntNA/mask/0 create mode 100644 inst/extdata/example2.zarr/uns/IntNA/values/.zarray create mode 100644 inst/extdata/example2.zarr/uns/IntNA/values/0 create mode 100644 inst/extdata/example2.zarr/uns/IntScalar/.zarray create mode 100644 inst/extdata/example2.zarr/uns/IntScalar/.zattrs create mode 100644 inst/extdata/example2.zarr/uns/IntScalar/0 create mode 100644 inst/extdata/example2.zarr/uns/Sparse1D/.zattrs create mode 100644 inst/extdata/example2.zarr/uns/Sparse1D/.zgroup create mode 100644 inst/extdata/example2.zarr/uns/Sparse1D/data/.zarray create mode 100644 inst/extdata/example2.zarr/uns/Sparse1D/data/0 create mode 100644 inst/extdata/example2.zarr/uns/Sparse1D/indices/.zarray create mode 100644 inst/extdata/example2.zarr/uns/Sparse1D/indices/0 create mode 100644 inst/extdata/example2.zarr/uns/Sparse1D/indptr/.zarray create mode 100644 inst/extdata/example2.zarr/uns/Sparse1D/indptr/0 create mode 100644 inst/extdata/example2.zarr/uns/String/.zarray create mode 100644 inst/extdata/example2.zarr/uns/String/.zattrs create mode 100644 inst/extdata/example2.zarr/uns/String/0 create mode 100644 inst/extdata/example2.zarr/uns/String2D/.zarray create mode 100644 inst/extdata/example2.zarr/uns/String2D/.zattrs create mode 100644 inst/extdata/example2.zarr/uns/String2D/0.0 create mode 100644 inst/extdata/example2.zarr/uns/StringScalar/.zarray create mode 100644 inst/extdata/example2.zarr/uns/StringScalar/.zattrs create mode 100644 inst/extdata/example2.zarr/uns/StringScalar/0 create mode 100644 inst/extdata/example2.zarr/uns/hvg/.zattrs create mode 100644 inst/extdata/example2.zarr/uns/hvg/.zgroup create mode 100644 inst/extdata/example2.zarr/uns/hvg/flavor/.zarray create mode 100644 inst/extdata/example2.zarr/uns/hvg/flavor/.zattrs create mode 100644 inst/extdata/example2.zarr/uns/hvg/flavor/0 create mode 100644 inst/extdata/example2.zarr/uns/leiden/.zattrs create mode 100644 inst/extdata/example2.zarr/uns/leiden/.zgroup create mode 100644 inst/extdata/example2.zarr/uns/leiden/params/.zattrs create mode 100644 inst/extdata/example2.zarr/uns/leiden/params/.zgroup create mode 100644 inst/extdata/example2.zarr/uns/leiden/params/n_iterations/.zarray create mode 100644 inst/extdata/example2.zarr/uns/leiden/params/n_iterations/.zattrs create mode 100644 inst/extdata/example2.zarr/uns/leiden/params/n_iterations/0 create mode 100644 inst/extdata/example2.zarr/uns/leiden/params/random_state/.zarray create mode 100644 inst/extdata/example2.zarr/uns/leiden/params/random_state/.zattrs create mode 100644 inst/extdata/example2.zarr/uns/leiden/params/random_state/0 create mode 100644 inst/extdata/example2.zarr/uns/leiden/params/resolution/.zarray create mode 100644 inst/extdata/example2.zarr/uns/leiden/params/resolution/.zattrs create mode 100644 inst/extdata/example2.zarr/uns/leiden/params/resolution/0 create mode 100644 inst/extdata/example2.zarr/uns/log1p/.zattrs create mode 100644 inst/extdata/example2.zarr/uns/log1p/.zgroup create mode 100644 inst/extdata/example2.zarr/uns/neighbors/.zattrs create mode 100644 inst/extdata/example2.zarr/uns/neighbors/.zgroup create mode 100644 inst/extdata/example2.zarr/uns/neighbors/connectivities_key/.zarray create mode 100644 inst/extdata/example2.zarr/uns/neighbors/connectivities_key/.zattrs create mode 100644 inst/extdata/example2.zarr/uns/neighbors/connectivities_key/0 create mode 100644 inst/extdata/example2.zarr/uns/neighbors/distances_key/.zarray create mode 100644 inst/extdata/example2.zarr/uns/neighbors/distances_key/.zattrs create mode 100644 inst/extdata/example2.zarr/uns/neighbors/distances_key/0 create mode 100644 inst/extdata/example2.zarr/uns/neighbors/params/.zattrs create mode 100644 inst/extdata/example2.zarr/uns/neighbors/params/.zgroup create mode 100644 inst/extdata/example2.zarr/uns/neighbors/params/method/.zarray create mode 100644 inst/extdata/example2.zarr/uns/neighbors/params/method/.zattrs create mode 100644 inst/extdata/example2.zarr/uns/neighbors/params/method/0 create mode 100644 inst/extdata/example2.zarr/uns/neighbors/params/metric/.zarray create mode 100644 inst/extdata/example2.zarr/uns/neighbors/params/metric/.zattrs create mode 100644 inst/extdata/example2.zarr/uns/neighbors/params/metric/0 create mode 100644 inst/extdata/example2.zarr/uns/neighbors/params/n_neighbors/.zarray create mode 100644 inst/extdata/example2.zarr/uns/neighbors/params/n_neighbors/.zattrs create mode 100644 inst/extdata/example2.zarr/uns/neighbors/params/n_neighbors/0 create mode 100644 inst/extdata/example2.zarr/uns/neighbors/params/random_state/.zarray create mode 100644 inst/extdata/example2.zarr/uns/neighbors/params/random_state/.zattrs create mode 100644 inst/extdata/example2.zarr/uns/neighbors/params/random_state/0 create mode 100644 inst/extdata/example2.zarr/uns/pca/.zattrs create mode 100644 inst/extdata/example2.zarr/uns/pca/.zgroup create mode 100644 inst/extdata/example2.zarr/uns/pca/params/.zattrs create mode 100644 inst/extdata/example2.zarr/uns/pca/params/.zgroup create mode 100644 inst/extdata/example2.zarr/uns/pca/params/use_highly_variable/.zarray create mode 100644 inst/extdata/example2.zarr/uns/pca/params/use_highly_variable/.zattrs create mode 100644 inst/extdata/example2.zarr/uns/pca/params/use_highly_variable/0 create mode 100644 inst/extdata/example2.zarr/uns/pca/params/zero_center/.zarray create mode 100644 inst/extdata/example2.zarr/uns/pca/params/zero_center/.zattrs create mode 100644 inst/extdata/example2.zarr/uns/pca/params/zero_center/0 create mode 100644 inst/extdata/example2.zarr/uns/pca/variance/.zarray create mode 100644 inst/extdata/example2.zarr/uns/pca/variance/.zattrs create mode 100644 inst/extdata/example2.zarr/uns/pca/variance/0 create mode 100644 inst/extdata/example2.zarr/uns/pca/variance_ratio/.zarray create mode 100644 inst/extdata/example2.zarr/uns/pca/variance_ratio/.zattrs create mode 100644 inst/extdata/example2.zarr/uns/pca/variance_ratio/0 create mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/.zattrs create mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/.zgroup create mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/logfoldchanges/.zattrs create mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/logfoldchanges/.zgroup create mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/logfoldchanges/0/.zarray create mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/logfoldchanges/0/.zattrs create mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/logfoldchanges/0/0 create mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/logfoldchanges/1/.zarray create mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/logfoldchanges/1/.zattrs create mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/logfoldchanges/1/0 create mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/logfoldchanges/2/.zarray create mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/logfoldchanges/2/.zattrs create mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/logfoldchanges/2/0 create mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/logfoldchanges/3/.zarray create mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/logfoldchanges/3/.zattrs create mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/logfoldchanges/3/0 create mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/logfoldchanges/4/.zarray create mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/logfoldchanges/4/.zattrs create mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/logfoldchanges/4/0 create mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/logfoldchanges/5/.zarray create mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/logfoldchanges/5/.zattrs create mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/logfoldchanges/5/0 create mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/names/.zattrs create mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/names/.zgroup create mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/names/0/.zarray create mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/names/0/.zattrs create mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/names/0/0 create mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/names/1/.zarray create mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/names/1/.zattrs create mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/names/1/0 create mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/names/2/.zarray create mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/names/2/.zattrs create mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/names/2/0 create mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/names/3/.zarray create mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/names/3/.zattrs create mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/names/3/0 create mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/names/4/.zarray create mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/names/4/.zattrs create mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/names/4/0 create mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/names/5/.zarray create mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/names/5/.zattrs create mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/names/5/0 create mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/params/.zattrs create mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/params/.zgroup create mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/params/corr_method/.zarray create mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/params/corr_method/.zattrs create mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/params/corr_method/0 create mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/params/groupby/.zarray create mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/params/groupby/.zattrs create mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/params/groupby/0 create mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/params/method/.zarray create mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/params/method/.zattrs create mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/params/method/0 create mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/params/reference/.zarray create mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/params/reference/.zattrs create mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/params/reference/0 create mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/params/use_raw/.zarray create mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/params/use_raw/.zattrs create mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/params/use_raw/0 create mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/pvals/.zattrs create mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/pvals/.zgroup create mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/pvals/0/.zarray create mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/pvals/0/.zattrs create mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/pvals/0/0 create mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/pvals/1/.zarray create mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/pvals/1/.zattrs create mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/pvals/1/0 create mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/pvals/2/.zarray create mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/pvals/2/.zattrs create mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/pvals/2/0 create mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/pvals/3/.zarray create mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/pvals/3/.zattrs create mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/pvals/3/0 create mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/pvals/4/.zarray create mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/pvals/4/.zattrs create mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/pvals/4/0 create mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/pvals/5/.zarray create mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/pvals/5/.zattrs create mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/pvals/5/0 create mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/pvals_adj/.zattrs create mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/pvals_adj/.zgroup create mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/pvals_adj/0/.zarray create mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/pvals_adj/0/.zattrs create mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/pvals_adj/0/0 create mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/pvals_adj/1/.zarray create mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/pvals_adj/1/.zattrs create mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/pvals_adj/1/0 create mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/pvals_adj/2/.zarray create mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/pvals_adj/2/.zattrs create mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/pvals_adj/2/0 create mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/pvals_adj/3/.zarray create mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/pvals_adj/3/.zattrs create mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/pvals_adj/3/0 create mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/pvals_adj/4/.zarray create mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/pvals_adj/4/.zattrs create mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/pvals_adj/4/0 create mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/pvals_adj/5/.zarray create mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/pvals_adj/5/.zattrs create mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/pvals_adj/5/0 create mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/scores/.zattrs create mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/scores/.zgroup create mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/scores/0/.zarray create mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/scores/0/.zattrs create mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/scores/0/0 create mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/scores/1/.zarray create mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/scores/1/.zattrs create mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/scores/1/0 create mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/scores/2/.zarray create mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/scores/2/.zattrs create mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/scores/2/0 create mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/scores/3/.zarray create mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/scores/3/.zattrs create mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/scores/3/0 create mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/scores/4/.zarray create mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/scores/4/.zattrs create mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/scores/4/0 create mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/scores/5/.zarray create mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/scores/5/.zattrs create mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/scores/5/0 create mode 100644 inst/extdata/example2.zarr/uns/umap/.zattrs create mode 100644 inst/extdata/example2.zarr/uns/umap/.zgroup create mode 100644 inst/extdata/example2.zarr/uns/umap/params/.zattrs create mode 100644 inst/extdata/example2.zarr/uns/umap/params/.zgroup create mode 100644 inst/extdata/example2.zarr/uns/umap/params/a/.zarray create mode 100644 inst/extdata/example2.zarr/uns/umap/params/a/.zattrs create mode 100644 inst/extdata/example2.zarr/uns/umap/params/a/0 create mode 100644 inst/extdata/example2.zarr/uns/umap/params/b/.zarray create mode 100644 inst/extdata/example2.zarr/uns/umap/params/b/.zattrs create mode 100644 inst/extdata/example2.zarr/uns/umap/params/b/0 create mode 100644 inst/extdata/example2.zarr/var/.zattrs create mode 100644 inst/extdata/example2.zarr/var/.zgroup create mode 100644 inst/extdata/example2.zarr/var/String/.zarray create mode 100644 inst/extdata/example2.zarr/var/String/.zattrs create mode 100644 inst/extdata/example2.zarr/var/String/0 create mode 100644 inst/extdata/example2.zarr/var/_index/.zarray create mode 100644 inst/extdata/example2.zarr/var/_index/.zattrs create mode 100644 inst/extdata/example2.zarr/var/_index/0 create mode 100644 inst/extdata/example2.zarr/var/dispersions/.zarray create mode 100644 inst/extdata/example2.zarr/var/dispersions/.zattrs create mode 100644 inst/extdata/example2.zarr/var/dispersions/0 create mode 100644 inst/extdata/example2.zarr/var/dispersions_norm/.zarray create mode 100644 inst/extdata/example2.zarr/var/dispersions_norm/.zattrs create mode 100644 inst/extdata/example2.zarr/var/dispersions_norm/0 create mode 100644 inst/extdata/example2.zarr/var/highly_variable/.zarray create mode 100644 inst/extdata/example2.zarr/var/highly_variable/.zattrs create mode 100644 inst/extdata/example2.zarr/var/highly_variable/0 create mode 100644 inst/extdata/example2.zarr/var/log1p_mean_counts/.zarray create mode 100644 inst/extdata/example2.zarr/var/log1p_mean_counts/.zattrs create mode 100644 inst/extdata/example2.zarr/var/log1p_mean_counts/0 create mode 100644 inst/extdata/example2.zarr/var/log1p_total_counts/.zarray create mode 100644 inst/extdata/example2.zarr/var/log1p_total_counts/.zattrs create mode 100644 inst/extdata/example2.zarr/var/log1p_total_counts/0 create mode 100644 inst/extdata/example2.zarr/var/mean_counts/.zarray create mode 100644 inst/extdata/example2.zarr/var/mean_counts/.zattrs create mode 100644 inst/extdata/example2.zarr/var/mean_counts/0 create mode 100644 inst/extdata/example2.zarr/var/means/.zarray create mode 100644 inst/extdata/example2.zarr/var/means/.zattrs create mode 100644 inst/extdata/example2.zarr/var/means/0 create mode 100644 inst/extdata/example2.zarr/var/n_cells_by_counts/.zarray create mode 100644 inst/extdata/example2.zarr/var/n_cells_by_counts/.zattrs create mode 100644 inst/extdata/example2.zarr/var/n_cells_by_counts/0 create mode 100644 inst/extdata/example2.zarr/var/pct_dropout_by_counts/.zarray create mode 100644 inst/extdata/example2.zarr/var/pct_dropout_by_counts/.zattrs create mode 100644 inst/extdata/example2.zarr/var/pct_dropout_by_counts/0 create mode 100644 inst/extdata/example2.zarr/var/total_counts/.zarray create mode 100644 inst/extdata/example2.zarr/var/total_counts/.zattrs create mode 100644 inst/extdata/example2.zarr/var/total_counts/0 create mode 100644 inst/extdata/example2.zarr/varm/.zattrs create mode 100644 inst/extdata/example2.zarr/varm/.zgroup create mode 100644 inst/extdata/example2.zarr/varm/PCs/.zarray create mode 100644 inst/extdata/example2.zarr/varm/PCs/.zattrs create mode 100644 inst/extdata/example2.zarr/varm/PCs/0.0 create mode 100644 inst/extdata/example2.zarr/varp/.zattrs create mode 100644 inst/extdata/example2.zarr/varp/.zgroup create mode 100644 man/read_zarr.Rd create mode 100644 man/write_zarr.Rd diff --git a/inst/extdata/example2.zarr/.zattrs b/inst/extdata/example2.zarr/.zattrs new file mode 100644 index 00000000..55361a32 --- /dev/null +++ b/inst/extdata/example2.zarr/.zattrs @@ -0,0 +1 @@ +{"encoding-type":"anndata","encoding-version":"0.1.0"} \ No newline at end of file diff --git a/inst/extdata/example2.zarr/.zgroup b/inst/extdata/example2.zarr/.zgroup new file mode 100644 index 00000000..c71fe9d0 --- /dev/null +++ b/inst/extdata/example2.zarr/.zgroup @@ -0,0 +1 @@ +{"zarr_format":2} \ No newline at end of file diff --git a/inst/extdata/example2.zarr/X/.zattrs b/inst/extdata/example2.zarr/X/.zattrs new file mode 100644 index 00000000..018aaed3 --- /dev/null +++ b/inst/extdata/example2.zarr/X/.zattrs @@ -0,0 +1 @@ +{"encoding-type":"csr_matrix","encoding-version":"0.1.0","shape":[50,100]} \ No newline at end of file diff --git a/inst/extdata/example2.zarr/X/.zgroup b/inst/extdata/example2.zarr/X/.zgroup new file mode 100644 index 00000000..c71fe9d0 --- /dev/null +++ b/inst/extdata/example2.zarr/X/.zgroup @@ -0,0 +1 @@ +{"zarr_format":2} \ No newline at end of file diff --git a/inst/extdata/example2.zarr/X/data/.zarray b/inst/extdata/example2.zarr/X/data/.zarray new file mode 100644 index 00000000..7207923d --- /dev/null +++ b/inst/extdata/example2.zarr/X/data/.zarray @@ -0,0 +1 @@ +{"zarr_format":2,"shape":[4317],"chunks":[4317],"dtype":"x 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 WH%9?@M64&q9L#k>q)rTDv;G0i236ev literal 0 HcmV?d00001 diff --git a/inst/extdata/example2.zarr/X/indices/.zarray b/inst/extdata/example2.zarr/X/indices/.zarray new file mode 100644 index 00000000..cb6bf2dc --- /dev/null +++ b/inst/extdata/example2.zarr/X/indices/.zarray @@ -0,0 +1 @@ +{"zarr_format":2,"shape":[4317],"chunks":[4317],"dtype":"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
Qq6196zZockb2vc-!N(Yp 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 bf!>CTRu-3D=@t_Ajufr1{`W}56W;#-_@npo literal 0 HcmV?d00001 diff --git a/inst/extdata/example2.zarr/layers/csc_counts/indices/.zarray b/inst/extdata/example2.zarr/layers/csc_counts/indices/.zarray new file mode 100644 index 00000000..cb6bf2dc --- /dev/null +++ b/inst/extdata/example2.zarr/layers/csc_counts/indices/.zarray @@ -0,0 +1 @@ +{"zarr_format":2,"shape":[4317],"chunks":[4317],"dtype":"xD?y_*U=kons-n_Q+{{4P`&*gJ_Yzpn)2h^=!71P4AW91l=4kzxI zoSrr_zs`PVtG`?0@9Ur4Z2wr=@!3^xKab%yolV=ki;Y>ma`{RZ=b?^8w+0`0tqGs8 z;f#;g(`~$;WsjVyi6s*zxQ6x42yp7~w43q68}+r-4UrCoGfF)hk|H&gO?AU(Pw|>C z$|=#jy<6*+XEXNxuqWOB%2(xOdFq#Pw{F=yU_*9{pJUy+4i&Q>DkVxtwH8@YpA;NGP|hUGi82L0|)fUyXNi=^O)?= zu>uG3k$GgLCC0BSm}=RhTTXmc$%G58uIEF0-D^BnRho077V1x$e)-Ew9^s;X9*0?b ztbZKVPvuXIPR+aEKcH`)-g&$O@k!c2jI@DSUXQc-zV>t((8VY$Z^SU4F4>zlZixFn zwsQRWbMQ&$PA}o3Cv#FS-42{*e{5&c^?|i8xWcBo>mI?grqCYn!?XxmgI(079O^Yc zar?G}nunR+^hsKL>R?LTx1lzJt-E)M|D@GwSE>@G3`6#fPAxnv>b&MoV1eO0^Y#>A zQLuswULhva1LiWZ4}Q#DB6{2LA2AAvH&z zd+GrM%rC&EE_-fv@)BRiW2Gh7#*t}=M1Z1bWR%k&UUGZUc*WS_h482BWc&+&NMI<) zI*8DFf{-yChiO2{;3CU{ntRCQKr3W3)6cL;kQvw~?;8+|Q}2=u2(E-;3BFYXUs!jc zYTFM9y+THiHavB~dkK>Lkvl3(N)iTju3WBf=S)~%CM=>2=u;)*O;rHM7*v38>q(me zrGP~tKte(k{s7z(Y7QZP4$-3eHe(NJ6xIst(OYU~!#5yOdf-XY0%MActvs){OdxrX zAUSh_@q}aAlb*Ia6?A(T%eI?e?p9J-+)hCPN-asF{8i+{bI=!Fjz(+2lvo=hfDt8d zf#O0~l2i>p(aCEg^Y6jf~N#&+J!V48A zl9Zf{h};DV#QGG_7_|k=%;EByL*~CVSD*&Hp+Di<{bG)wmiG{2X?bcv(-|UxTWHV_ zaEBeVKb1EOMFRo*Ao^9Kcd*ui<T>*j(tfFk6Tp3Q9PC zu&pScl~hJHN|KsJh3Jeah$}uM$WWvPeT6s#6cT~OZd!C0Bp(Vsxfm`2t@i0MXaSo_ zR;>{BAb_TL2D1e#hER5L6iJIktWo$QQW7($Ty_D@1(U&T)!9sMG}C39Dgy!02`lV< z>!r{_a~!~A6HbNea{$0&gkZLj1ae0PLWBLU02Y)4@qYnAl0ZxldNt4nM9`E)kfu4G z9XcNBL|%$@_rA|@6CCvt16D28euy&-W`nNg?TsharH>DTdZ%bj9r4RKxa+72Omf&I@08QO z9B?9!%O(%ysc4@C(FzC1sl;(d5rvY0aw?GmKHdu?tLk`V0p?kPxY2d_p9H$~*a=3v zg3%+?DOok0A|Z9+8qiIZ?4VN8Xcm<}8kFf8p<~1s)PgJp8I}{TD?XfRh0sD0T&5_G z&_@cPXt@A2j&Bs`fs9$qMNC9q@|YBvBGX05XwEOXUu-0|Z6HRo&6G}V`H)HR9!OjO literal 0 HcmV?d00001 diff --git a/inst/extdata/example2.zarr/layers/dense_X/.zarray b/inst/extdata/example2.zarr/layers/dense_X/.zarray new file mode 100644 index 00000000..3b0e1b62 --- /dev/null +++ b/inst/extdata/example2.zarr/layers/dense_X/.zarray @@ -0,0 +1 @@ +{"zarr_format":2,"shape":[50,100],"chunks":[50,100],"dtype":"=OId0ZP6LJD%;kX~nNeE48!q>fM0t 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 literal 0 HcmV?d00001 diff --git a/inst/extdata/example2.zarr/obs/.zattrs b/inst/extdata/example2.zarr/obs/.zattrs new file mode 100644 index 00000000..ab5aef8e --- /dev/null +++ b/inst/extdata/example2.zarr/obs/.zattrs @@ -0,0 +1 @@ +{"encoding-type":"dataframe","encoding-version":"0.2.0","_index":"_index","column-order":["Float","FloatNA","Int","IntNA","Bool","BoolNA","n_genes_by_counts","log1p_n_genes_by_counts","total_counts","log1p_total_counts","leiden"]} \ No newline at end of file diff --git a/inst/extdata/example2.zarr/obs/.zgroup b/inst/extdata/example2.zarr/obs/.zgroup new file mode 100644 index 00000000..c71fe9d0 --- /dev/null +++ b/inst/extdata/example2.zarr/obs/.zgroup @@ -0,0 +1 @@ +{"zarr_format":2} \ No newline at end of file diff --git a/inst/extdata/example2.zarr/obs/Bool/.zarray b/inst/extdata/example2.zarr/obs/Bool/.zarray new file mode 100644 index 00000000..b3cb25af --- /dev/null +++ b/inst/extdata/example2.zarr/obs/Bool/.zarray @@ -0,0 +1 @@ +{"zarr_format":2,"shape":[50],"chunks":[50],"dtype":"|b1","compressor":{"id":"zstd","level":1},"fill_value":false,"order":"F","filters":null,"dimension_separator":"."} \ No newline at end of file diff --git a/inst/extdata/example2.zarr/obs/Bool/.zattrs b/inst/extdata/example2.zarr/obs/Bool/.zattrs new file mode 100644 index 00000000..c945ff39 --- /dev/null +++ b/inst/extdata/example2.zarr/obs/Bool/.zattrs @@ -0,0 +1 @@ +{"encoding-type":"array","encoding-version":"0.2.0"} \ No newline at end of file diff --git a/inst/extdata/example2.zarr/obs/Bool/0 b/inst/extdata/example2.zarr/obs/Bool/0 new file mode 100644 index 0000000000000000000000000000000000000000..d59dfcd5a38e5cc2cd07617549e5372ed6b30339 GIT binary patch literal 17 YcmdPcs{dEP$d!RXfPs;b!Igm<04DSU0{{R3 literal 0 HcmV?d00001 diff --git a/inst/extdata/example2.zarr/obs/BoolNA/.zattrs b/inst/extdata/example2.zarr/obs/BoolNA/.zattrs new file mode 100644 index 00000000..75fcc6b4 --- /dev/null +++ b/inst/extdata/example2.zarr/obs/BoolNA/.zattrs @@ -0,0 +1 @@ +{"encoding-type":"nullable-boolean","encoding-version":"0.1.0"} \ No newline at end of file diff --git a/inst/extdata/example2.zarr/obs/BoolNA/.zgroup b/inst/extdata/example2.zarr/obs/BoolNA/.zgroup new file mode 100644 index 00000000..c71fe9d0 --- /dev/null +++ b/inst/extdata/example2.zarr/obs/BoolNA/.zgroup @@ -0,0 +1 @@ +{"zarr_format":2} \ No newline at end of file diff --git a/inst/extdata/example2.zarr/obs/BoolNA/mask/.zarray b/inst/extdata/example2.zarr/obs/BoolNA/mask/.zarray new file mode 100644 index 00000000..b3cb25af --- /dev/null +++ b/inst/extdata/example2.zarr/obs/BoolNA/mask/.zarray @@ -0,0 +1 @@ +{"zarr_format":2,"shape":[50],"chunks":[50],"dtype":"|b1","compressor":{"id":"zstd","level":1},"fill_value":false,"order":"F","filters":null,"dimension_separator":"."} \ No newline at end of file diff --git a/inst/extdata/example2.zarr/obs/BoolNA/mask/0 b/inst/extdata/example2.zarr/obs/BoolNA/mask/0 new file mode 100644 index 0000000000000000000000000000000000000000..297ca40955da9a935dd2ca37740d48557e514a63 GIT binary patch literal 18 XcmdPcs{dEP$d`dZf`JhTT@p9|D+mK` literal 0 HcmV?d00001 diff --git a/inst/extdata/example2.zarr/obs/BoolNA/values/.zarray b/inst/extdata/example2.zarr/obs/BoolNA/values/.zarray new file mode 100644 index 00000000..b3cb25af --- /dev/null +++ b/inst/extdata/example2.zarr/obs/BoolNA/values/.zarray @@ -0,0 +1 @@ +{"zarr_format":2,"shape":[50],"chunks":[50],"dtype":"|b1","compressor":{"id":"zstd","level":1},"fill_value":false,"order":"F","filters":null,"dimension_separator":"."} \ No newline at end of file diff --git a/inst/extdata/example2.zarr/obs/BoolNA/values/0 b/inst/extdata/example2.zarr/obs/BoolNA/values/0 new file mode 100644 index 0000000000000000000000000000000000000000..83f150e0356b0261fcd97f6bb0e0d59e292fe3a2 GIT binary patch literal 18 ZcmdPcs{dEP$d`dZf`NgNk-;T_0{|-r18)ET literal 0 HcmV?d00001 diff --git a/inst/extdata/example2.zarr/obs/Float/.zarray b/inst/extdata/example2.zarr/obs/Float/.zarray new file mode 100644 index 00000000..47c667b8 --- /dev/null +++ b/inst/extdata/example2.zarr/obs/Float/.zarray @@ -0,0 +1 @@ +{"zarr_format":2,"shape":[50],"chunks":[50],"dtype":"fSgh6V;O_)-5&Bc}h5sjCAc!>?u2Q~|yI3y%N* literal 0 HcmV?d00001 diff --git a/inst/extdata/example2.zarr/obs/Int/.zarray b/inst/extdata/example2.zarr/obs/Int/.zarray new file mode 100644 index 00000000..50de36a3 --- /dev/null +++ b/inst/extdata/example2.zarr/obs/Int/.zarray @@ -0,0 +1 @@ +{"zarr_format":2,"shape":[50],"chunks":[50],"dtype":"pni3ja{hPtQ)yP0dWqOUp{iNy$ja nN5@9SMa4wKL&HMCLBT-4ueZzHYO~m@wMv~zqXRKi0ssR6`dlTc literal 0 HcmV?d00001 diff --git a/inst/extdata/example2.zarr/obs/IntNA/.zattrs b/inst/extdata/example2.zarr/obs/IntNA/.zattrs new file mode 100644 index 00000000..0372e0a7 --- /dev/null +++ b/inst/extdata/example2.zarr/obs/IntNA/.zattrs @@ -0,0 +1 @@ +{"encoding-type":"nullable-integer","encoding-version":"0.1.0"} \ No newline at end of file diff --git a/inst/extdata/example2.zarr/obs/IntNA/.zgroup b/inst/extdata/example2.zarr/obs/IntNA/.zgroup new file mode 100644 index 00000000..c71fe9d0 --- /dev/null +++ b/inst/extdata/example2.zarr/obs/IntNA/.zgroup @@ -0,0 +1 @@ +{"zarr_format":2} \ No newline at end of file diff --git a/inst/extdata/example2.zarr/obs/IntNA/mask/.zarray b/inst/extdata/example2.zarr/obs/IntNA/mask/.zarray new file mode 100644 index 00000000..b3cb25af --- /dev/null +++ b/inst/extdata/example2.zarr/obs/IntNA/mask/.zarray @@ -0,0 +1 @@ +{"zarr_format":2,"shape":[50],"chunks":[50],"dtype":"|b1","compressor":{"id":"zstd","level":1},"fill_value":false,"order":"F","filters":null,"dimension_separator":"."} \ No newline at end of file diff --git a/inst/extdata/example2.zarr/obs/IntNA/mask/0 b/inst/extdata/example2.zarr/obs/IntNA/mask/0 new file mode 100644 index 0000000000000000000000000000000000000000..bcf4d24c9d87fb9bb51bb6b6da71adc6e76b2f90 GIT binary patch literal 17 YcmdPcs{dEP$d!RXfRTZb!Igm<04DVV0{{R3 literal 0 HcmV?d00001 diff --git a/inst/extdata/example2.zarr/obs/IntNA/values/.zarray b/inst/extdata/example2.zarr/obs/IntNA/values/.zarray new file mode 100644 index 00000000..50de36a3 --- /dev/null +++ b/inst/extdata/example2.zarr/obs/IntNA/values/.zarray @@ -0,0 +1 @@ +{"zarr_format":2,"shape":[50],"chunks":[50],"dtype":"ygdvD90uja_!URN^0swIV1DOB- literal 0 HcmV?d00001 diff --git a/inst/extdata/example2.zarr/obs/leiden/codes/.zarray b/inst/extdata/example2.zarr/obs/leiden/codes/.zarray new file mode 100644 index 00000000..50de36a3 --- /dev/null +++ b/inst/extdata/example2.zarr/obs/leiden/codes/.zarray @@ -0,0 +1 @@ +{"zarr_format":2,"shape":[50],"chunks":[50],"dtype":"s literal 0 HcmV?d00001 diff --git a/inst/extdata/example2.zarr/obs/log1p_n_genes_by_counts/.zarray b/inst/extdata/example2.zarr/obs/log1p_n_genes_by_counts/.zarray new file mode 100644 index 00000000..47c667b8 --- /dev/null +++ b/inst/extdata/example2.zarr/obs/log1p_n_genes_by_counts/.zarray @@ -0,0 +1 @@ +{"zarr_format":2,"shape":[50],"chunks":[50],"dtype":"KavC&-4Q_cimn%3^btS` zqxfD%#SuWhTqVIC3lf6lVvXdi5G*kp&i{01r@l`X64Yh(2`IU9v9F0xdT`eB!eJp2 zKq*cm6h&=iou&eNpbwJ-f(kN}ki0OSV%001DvN)Z)0JxXHr|cjAA{9W57x3>Clwgi^py5h`He?8LSQ~}h WfHu>Ei;#hfV}%>qC5U?e!21Fv4wj^+%BuNUM0{4@HOq12UL$u zJt|_D`u0-^<3tvz BL_Gii literal 0 HcmV?d00001 diff --git a/inst/extdata/example2.zarr/obsm/.zattrs b/inst/extdata/example2.zarr/obsm/.zattrs new file mode 100644 index 00000000..468e470d --- /dev/null +++ b/inst/extdata/example2.zarr/obsm/.zattrs @@ -0,0 +1 @@ +{"encoding-type":"dict","encoding-version":"0.1.0"} \ No newline at end of file diff --git a/inst/extdata/example2.zarr/obsm/.zgroup b/inst/extdata/example2.zarr/obsm/.zgroup new file mode 100644 index 00000000..c71fe9d0 --- /dev/null +++ b/inst/extdata/example2.zarr/obsm/.zgroup @@ -0,0 +1 @@ +{"zarr_format":2} \ No newline at end of file diff --git a/inst/extdata/example2.zarr/obsm/X_pca/.zarray b/inst/extdata/example2.zarr/obsm/X_pca/.zarray new file mode 100644 index 00000000..7eb3a10b --- /dev/null +++ b/inst/extdata/example2.zarr/obsm/X_pca/.zarray @@ -0,0 +1 @@ +{"zarr_format":2,"shape":[50,38],"chunks":[50,38],"dtype":"@OWOa6(HfcJe{+ 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 literal 0 HcmV?d00001 diff --git a/inst/extdata/example2.zarr/obsm/X_umap/.zarray b/inst/extdata/example2.zarr/obsm/X_umap/.zarray new file mode 100644 index 00000000..1191f0a7 --- /dev/null +++ b/inst/extdata/example2.zarr/obsm/X_umap/.zarray @@ -0,0 +1 @@ +{"zarr_format":2,"shape":[50,2],"chunks":[50,2],"dtype":"MGdVd$?lg~h=D7=Y# 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 O?QoQypy*I81jtq##2XI) literal 0 HcmV?d00001 diff --git a/inst/extdata/example2.zarr/obsp/connectivities/indices/.zarray b/inst/extdata/example2.zarr/obsp/connectivities/indices/.zarray new file mode 100644 index 00000000..2f6c77a8 --- /dev/null +++ b/inst/extdata/example2.zarr/obsp/connectivities/indices/.zarray @@ -0,0 +1 @@ +{"zarr_format":2,"shape":[964],"chunks":[964],"dtype":"i&bubF(`SogMcDI<>%Il)FIwkyix!cQZB_!5y(P}uAdVV)GGchl<*sJ4W zqV=#^IE?~=etLd6xt7|>Ny$h^#YAf%bt)wc1pMS)YA3OaidE{AFfjVr`R#HkCnd4h zMn=WzR0_G*D~Y`(S`Vv+Q^CN{PR=dnrIs@Ckx|h~?euDP zx!Y_d<+V|9Dh2&|IXAbL*+}fwidZcq925)${Bm}=+HBx#^6IE)rA`AmH8Z=ITFOXB?A38m5vNkYC}1e4XXmD7mwTD5oQ#BgbZlf?Ohh!K zP6q`;J2^KmB_pqnjn?X5VCQC+yT#OIDIXmh7p;hfQ^7#M&#z{etIbkQLShpMqo1Cg zU(QXbQt#IF&}dU9P2e5_`2G8WKhUHMd$yNykL1;goPNFdFLJ?6r}RD)nw=b}hA)*z2NVq80J5kUEtT4hjZFLq9veo0(m1wo>vDdu3d-B2uSP z!a+e$O-yYhB=*|4sCZZ{q)rK=p`Bmv7V}b@os4|ME+!rZdU9rVx0YH;NXEme;dC(Y z>($I+ua1d_RYU4jIv5E0`SogYx0jaMY$fHSB;@0jQ8CeqST&?hrGuZH-tP9&GFwSG j3HgYo0%tFv;lI`=+-|S+VWHb5>?iRWpx-%I=vfwjE(+00Se12iGG%rA||gPXkd$ z51iTb}Ha>~dh@#{p)3n-2yX0Atxb AB>(^b literal 0 HcmV?d00001 diff --git a/inst/extdata/example2.zarr/obsp/distances/.zattrs b/inst/extdata/example2.zarr/obsp/distances/.zattrs new file mode 100644 index 00000000..fcbdbc4d --- /dev/null +++ b/inst/extdata/example2.zarr/obsp/distances/.zattrs @@ -0,0 +1 @@ +{"encoding-type":"csr_matrix","encoding-version":"0.1.0","shape":[50,50]} \ No newline at end of file diff --git a/inst/extdata/example2.zarr/obsp/distances/.zgroup b/inst/extdata/example2.zarr/obsp/distances/.zgroup new file mode 100644 index 00000000..c71fe9d0 --- /dev/null +++ b/inst/extdata/example2.zarr/obsp/distances/.zgroup @@ -0,0 +1 @@ +{"zarr_format":2} \ No newline at end of file diff --git a/inst/extdata/example2.zarr/obsp/distances/data/.zarray b/inst/extdata/example2.zarr/obsp/distances/data/.zarray new file mode 100644 index 00000000..3110581d --- /dev/null +++ b/inst/extdata/example2.zarr/obsp/distances/data/.zarray @@ -0,0 +1 @@ +{"zarr_format":2,"shape":[700],"chunks":[700],"dtype":"=87c(Fz>p+w*3@XWTOzgvkL$0C`P%VZfFkvVGbJY5-k?^fu=VChT+<_0V=WP%&&wh(a4%T;`@^h%@+YGDTIuyJV*Jfq+)w8bjx}T} zj!hr!c%C3w4RB*Inx|1ttXwK}NJ{tx5RcgR9bs}z;807U^d-}jK5e0iwvx&3HgNob z>*EDVJd-<~W^(a1jsNoeRkQYQp{$P$tu&uOKQWe5SFN~&i6{`5<@i>dm-d@NM^{^* zaTU#s|Kpg$JmM`%T`GDh8`pFYao@y4+AIo}akNx|&aBsMPQNp5{0)|-m=s#YxLw99 zcENet=E!2y?dV*=$40U(M8NV*vR_BB%eHo!vMl-$d?JMcT zRS1_GbJ5S0Sq2@Q?F4s@O8QJDK^tOGDUew#8KPq^zK`j^bqpoaPeYBe`6_E)Jg;#O zC?0S5)|vVE!32E4%T$88wRYc3M%r4tF)#D2wE-4i#o!o48Jz_H>4$@fR`?5{Qez8h z*I3V6X)6|#)Om!7p7~}GgBy0~pJf+31SI?pX!NO;=9uk=y_NKOif3ih4q6&Z7;INW zUo>16r$Ac|F?(4WmqrYDaE}=4J#x7NwZ}J1?5hXSa!n@4m605?eR*63x?;S%-GqzV zPb?5VK!-~ux3LWO+288aVC3H{iay42`)10lGcZf1dkEL2WE{V6fP4(-xNjuLeaT4j zW05_DlgD41L#J2}cr1nTt4%9@iVf_~QBqYp8XE%Bube`izaVkkRn|9&K=DJ;CGP{b zbAza^J`1dvuj2?p_LE5%X9Onj##wf!ra4~BO)HLhK7PKA-D&}n%?Gf2eBo}zl*}{+ zWM$(xHdfA7e?~z!4!IUrfGZ;8{^N+}u53PgvKi{PZZJ?qXML^$sB<0wj_rJL+@)#7 z>zUpAi`>jTD$c(B+w*VAZizNFWt_9(AX7f}p@L%%Yb%a}#_uLV{33RaT?pzZ zsH*n)E(KR=@a#v<;&Jj!=ZReuW3LFasC}#`M0>sHPi*8)Hg=AzvLUGf`_>3xt+iYI zinJMUd-aNlSD}g;Q4}s>!&b&re3yJU~pV8WQO|!~a_&fW4jUcw2X+qO0@iYg4s(>UZx@ zXVPn9JPw3u~aOSUj!;m2cXcy3G3uO=2>Q~vmm z#m{DwK1RFz7n(X(*xUDq-I_8;``C4yhQwk=I5rY9X08{`+mF-SPj2}K8zTo?2s3{3 z^3BUp^iDllJxvpLT2=TjhX>tIP9>E<+LCL^M=Bt%*&%~t~}y@WQbcevH6 ztZ}6zUP{MRqiFG&nZ*JZNYu^A*`oXu8Az8O1oY&XnOSvx;nwMxJ1wI4dLj?h#LyP=Lf{5#NQM_G|O z34NxidobvuGwzXnoUw^J=1v1H!83M0iloO8BhnTDN2;vAW)q}=gbvVHBW2V7n|^5H zq!Wc0foumT zK3uqvb+Xcq%m1x**J(Z4)qNMp*r&GOQIl)Oua5{fBig!e|CxfE1=W81Z4vW8PRF$) z`W^!^Oy?PEzqxd-{d(qRQVaHS&V&~+2kQ(TxMlo6PtbO8#f-g@S)SLkH!q?(mi_1u z>yy7u94>A75dNB2|Fg}a28O9K8^YSb+_xQVAaxPi;}DMVB5TiHZOc|9vz?EhK;$GW zcX&SEoYEaAHgVYxcSCaePg4z>_b_5KTEw8daWR(``+a82$cHaQ=G@)AaqE_O<`2<1 zbXX7F(`W`DrJB#PA!U zZMYM`7!V#Bj)PAu557t7dbhS)@^Y(9>=#OG2do;LrQ;97VEBBo=C-$>Yj~^i(v(4p zg}||^&d3SG0*9p}aE=4Lbhxi>PS7*4VU7+RJC`|$GFNZUVzhdap483?YNsikBE#ps zK(x;eyrE01EGeuE5|~4-xplq3Xx+QMIQN<+A)VJgp_MJ<1<2*z4AQh7P3oCrUGRRy Y|Adz*9kAtV(T(^{ZPL?P_(SKl0@C8L6aWAK literal 0 HcmV?d00001 diff --git a/inst/extdata/example2.zarr/obsp/distances/indices/.zarray b/inst/extdata/example2.zarr/obsp/distances/indices/.zarray new file mode 100644 index 00000000..cbbd003b --- /dev/null +++ b/inst/extdata/example2.zarr/obsp/distances/indices/.zarray @@ -0,0 +1 @@ +{"zarr_format":2,"shape":[700],"chunks":[700],"dtype":"1;9ykp^qtGT(+2wAv+3M4<`7V`&jabI3RdFhHHVfYXlL>Yo zu>~?-7Za&ZC$qafsLf)ni_(J6cgfv4Vi~Pdsnf8jBusL(*{d~?Dm82}UnP>;sKpw* zTB*}$lbJ+vw_3)lRWS-Je3wZicdNxRTB%bh^yw^QavvQJHeM5@(WjI7CLa$rYOje? zDHp5Msr30SkzGe^meE>8q(To3nQwyKM@L4*L}|33vq_ljYO~m@b&(o{It}0Cf!u@I z?A5whMVuZgkq2@gwFaxx=YUP-n?!cE+ANka5qjt}e3yjWtu~9jPNf9CO2Pn<2eny7 zgI8!{6IsZ*)bkohVPUK0_gQs{HQ zCi7JyyWB07@oKFmQm4?v5g literal 0 HcmV?d00001 diff --git a/inst/extdata/example2.zarr/obsp/distances/indptr/.zarray b/inst/extdata/example2.zarr/obsp/distances/indptr/.zarray new file mode 100644 index 00000000..cb92258e --- /dev/null +++ b/inst/extdata/example2.zarr/obsp/distances/indptr/.zarray @@ -0,0 +1 @@ +{"zarr_format":2,"shape":[51],"chunks":[51],"dtype":"s literal 0 HcmV?d00001 diff --git a/inst/extdata/example2.zarr/uns/DataFrameEmpty/.zattrs b/inst/extdata/example2.zarr/uns/DataFrameEmpty/.zattrs new file mode 100644 index 00000000..6d23c8ad --- /dev/null +++ b/inst/extdata/example2.zarr/uns/DataFrameEmpty/.zattrs @@ -0,0 +1 @@ +{"encoding-type":"dataframe","encoding-version":"0.2.0","_index":"_index","column-order":[]} \ No newline at end of file diff --git a/inst/extdata/example2.zarr/uns/DataFrameEmpty/.zgroup b/inst/extdata/example2.zarr/uns/DataFrameEmpty/.zgroup new file mode 100644 index 00000000..c71fe9d0 --- /dev/null +++ b/inst/extdata/example2.zarr/uns/DataFrameEmpty/.zgroup @@ -0,0 +1 @@ +{"zarr_format":2} \ No newline at end of file diff --git a/inst/extdata/example2.zarr/uns/DataFrameEmpty/_index/.zarray b/inst/extdata/example2.zarr/uns/DataFrameEmpty/_index/.zarray new file mode 100644 index 00000000..3d7af035 --- /dev/null +++ b/inst/extdata/example2.zarr/uns/DataFrameEmpty/_index/.zarray @@ -0,0 +1 @@ +{"zarr_format":2,"shape":[50],"chunks":[50],"dtype":"|O","compressor":{"id":"zstd","level":1},"fill_value":0,"order":"F","filters":[{"id":"vlen-utf8"}],"dimension_separator":"."} \ No newline at end of file diff --git a/inst/extdata/example2.zarr/uns/DataFrameEmpty/_index/.zattrs b/inst/extdata/example2.zarr/uns/DataFrameEmpty/_index/.zattrs new file mode 100644 index 00000000..5b014145 --- /dev/null +++ b/inst/extdata/example2.zarr/uns/DataFrameEmpty/_index/.zattrs @@ -0,0 +1 @@ +{"encoding-type":"string-array","encoding-version":"0.2.0"} \ No newline at end of file diff --git a/inst/extdata/example2.zarr/uns/DataFrameEmpty/_index/0 b/inst/extdata/example2.zarr/uns/DataFrameEmpty/_index/0 new file mode 100644 index 0000000000000000000000000000000000000000..af32753588a59f1b461518cc6886d9b01b4b20e7 GIT binary patch literal 126 zcmdPcs{c1Zi*YG4gOdvn|AD19*4@AAm{R`Tk4NU<@^n|_!tirlZjbWji1r@2J0D2I zf{43jEes7Q4xbne6&_rV{+7Ef^?q9Px4RKHrq#~Qy}AA7v|4kmoYVWxZhLbZNJ(?w a-ju&t_qW;YP4C@WA@Z|xEq{NS_6h(Op+cwt literal 0 HcmV?d00001 diff --git a/inst/extdata/example2.zarr/uns/Int/.zarray b/inst/extdata/example2.zarr/uns/Int/.zarray new file mode 100644 index 00000000..3bb1821d --- /dev/null +++ b/inst/extdata/example2.zarr/uns/Int/.zarray @@ -0,0 +1 @@ +{"zarr_format":2,"shape":[3],"chunks":[3],"dtype":"pF literal 0 HcmV?d00001 diff --git a/inst/extdata/example2.zarr/uns/Sparse1D/indptr/.zarray b/inst/extdata/example2.zarr/uns/Sparse1D/indptr/.zarray new file mode 100644 index 00000000..095926c2 --- /dev/null +++ b/inst/extdata/example2.zarr/uns/Sparse1D/indptr/.zarray @@ -0,0 +1 @@ +{"zarr_format":2,"shape":[7],"chunks":[7],"dtype":";5GDp@MgV=C1WNz_ literal 0 HcmV?d00001 diff --git a/inst/extdata/example2.zarr/uns/String/.zarray b/inst/extdata/example2.zarr/uns/String/.zarray new file mode 100644 index 00000000..e3dba627 --- /dev/null +++ b/inst/extdata/example2.zarr/uns/String/.zarray @@ -0,0 +1 @@ +{"zarr_format":2,"shape":[10],"chunks":[10],"dtype":"|O","compressor":{"id":"zstd","level":1},"fill_value":0,"order":"F","filters":[{"id":"vlen-utf8"}],"dimension_separator":"."} \ No newline at end of file diff --git a/inst/extdata/example2.zarr/uns/String/.zattrs b/inst/extdata/example2.zarr/uns/String/.zattrs new file mode 100644 index 00000000..5b014145 --- /dev/null +++ b/inst/extdata/example2.zarr/uns/String/.zattrs @@ -0,0 +1 @@ +{"encoding-type":"string-array","encoding-version":"0.2.0"} \ No newline at end of file diff --git a/inst/extdata/example2.zarr/uns/String/0 b/inst/extdata/example2.zarr/uns/String/0 new file mode 100644 index 0000000000000000000000000000000000000000..fc79f96daf8f30f28e64baa86037ccd3be6f2842 GIT binary patch literal 50 zcmdPcs{dD^#+Q-d1Q!DX0|yWXmlS2@r7IX18X23InweWzaP;e4U+S73=EBoO+eVx%-q7#5-4I4vLdniKktXB ph5`i>ca*Fs{BhxxyMKJy&mX6qv*m67-gwIXBR~E}g|_9yPyp3HA_4#a literal 0 HcmV?d00001 diff --git a/inst/extdata/example2.zarr/uns/StringScalar/.zarray b/inst/extdata/example2.zarr/uns/StringScalar/.zarray new file mode 100644 index 00000000..6d9d7eb3 --- /dev/null +++ b/inst/extdata/example2.zarr/uns/StringScalar/.zarray @@ -0,0 +1 @@ +{"zarr_format":2,"shape":[],"chunks":[],"dtype":"|O","compressor":{"id":"zstd","level":1},"fill_value":0,"order":"F","filters":[{"id":"vlen-utf8"}],"dimension_separator":"."} \ No newline at end of file diff --git a/inst/extdata/example2.zarr/uns/StringScalar/.zattrs b/inst/extdata/example2.zarr/uns/StringScalar/.zattrs new file mode 100644 index 00000000..dbc5f479 --- /dev/null +++ b/inst/extdata/example2.zarr/uns/StringScalar/.zattrs @@ -0,0 +1 @@ +{"encoding-type":"string","encoding-version":"0.2.0"} \ No newline at end of file diff --git a/inst/extdata/example2.zarr/uns/StringScalar/0 b/inst/extdata/example2.zarr/uns/StringScalar/0 new file mode 100644 index 0000000000000000000000000000000000000000..a48edc2c58a4cdfdf58dee5ed07f9f0dff4dd8ee GIT binary patch literal 25 ecmdPcs{dC(ppk)rk%57M1Be|Jic5+z^U?uG_XWHF literal 0 HcmV?d00001 diff --git a/inst/extdata/example2.zarr/uns/hvg/.zattrs b/inst/extdata/example2.zarr/uns/hvg/.zattrs new file mode 100644 index 00000000..468e470d --- /dev/null +++ b/inst/extdata/example2.zarr/uns/hvg/.zattrs @@ -0,0 +1 @@ +{"encoding-type":"dict","encoding-version":"0.1.0"} \ No newline at end of file diff --git a/inst/extdata/example2.zarr/uns/hvg/.zgroup b/inst/extdata/example2.zarr/uns/hvg/.zgroup new file mode 100644 index 00000000..c71fe9d0 --- /dev/null +++ b/inst/extdata/example2.zarr/uns/hvg/.zgroup @@ -0,0 +1 @@ +{"zarr_format":2} \ No newline at end of file diff --git a/inst/extdata/example2.zarr/uns/hvg/flavor/.zarray b/inst/extdata/example2.zarr/uns/hvg/flavor/.zarray new file mode 100644 index 00000000..6d9d7eb3 --- /dev/null +++ b/inst/extdata/example2.zarr/uns/hvg/flavor/.zarray @@ -0,0 +1 @@ +{"zarr_format":2,"shape":[],"chunks":[],"dtype":"|O","compressor":{"id":"zstd","level":1},"fill_value":0,"order":"F","filters":[{"id":"vlen-utf8"}],"dimension_separator":"."} \ No newline at end of file diff --git a/inst/extdata/example2.zarr/uns/hvg/flavor/.zattrs b/inst/extdata/example2.zarr/uns/hvg/flavor/.zattrs new file mode 100644 index 00000000..dbc5f479 --- /dev/null +++ b/inst/extdata/example2.zarr/uns/hvg/flavor/.zattrs @@ -0,0 +1 @@ +{"encoding-type":"string","encoding-version":"0.2.0"} \ No newline at end of file diff --git a/inst/extdata/example2.zarr/uns/hvg/flavor/0 b/inst/extdata/example2.zarr/uns/hvg/flavor/0 new file mode 100644 index 0000000000000000000000000000000000000000..89fc26e4fd6ad2e7c60f36747cb299f8fab20ada GIT binary patch literal 23 ccmdPcs{dDkuaJR(k%57M4Ty_VON$aq06z`|L;wH) literal 0 HcmV?d00001 diff --git a/inst/extdata/example2.zarr/uns/leiden/.zattrs b/inst/extdata/example2.zarr/uns/leiden/.zattrs new file mode 100644 index 00000000..468e470d --- /dev/null +++ b/inst/extdata/example2.zarr/uns/leiden/.zattrs @@ -0,0 +1 @@ +{"encoding-type":"dict","encoding-version":"0.1.0"} \ No newline at end of file diff --git a/inst/extdata/example2.zarr/uns/leiden/.zgroup b/inst/extdata/example2.zarr/uns/leiden/.zgroup new file mode 100644 index 00000000..c71fe9d0 --- /dev/null +++ b/inst/extdata/example2.zarr/uns/leiden/.zgroup @@ -0,0 +1 @@ +{"zarr_format":2} \ No newline at end of file diff --git a/inst/extdata/example2.zarr/uns/leiden/params/.zattrs b/inst/extdata/example2.zarr/uns/leiden/params/.zattrs new file mode 100644 index 00000000..468e470d --- /dev/null +++ b/inst/extdata/example2.zarr/uns/leiden/params/.zattrs @@ -0,0 +1 @@ +{"encoding-type":"dict","encoding-version":"0.1.0"} \ No newline at end of file diff --git a/inst/extdata/example2.zarr/uns/leiden/params/.zgroup b/inst/extdata/example2.zarr/uns/leiden/params/.zgroup new file mode 100644 index 00000000..c71fe9d0 --- /dev/null +++ b/inst/extdata/example2.zarr/uns/leiden/params/.zgroup @@ -0,0 +1 @@ +{"zarr_format":2} \ No newline at end of file diff --git a/inst/extdata/example2.zarr/uns/leiden/params/n_iterations/.zarray b/inst/extdata/example2.zarr/uns/leiden/params/n_iterations/.zarray new file mode 100644 index 00000000..e2f75040 --- /dev/null +++ b/inst/extdata/example2.zarr/uns/leiden/params/n_iterations/.zarray @@ -0,0 +1 @@ +{"zarr_format":2,"shape":[1],"chunks":[1],"dtype":"Y@mSmG(PrK)iP2{a-0yjYd2e__Wy>5J^Eby{^=B3`g3#X=@?e+a0AHj$M)V-m;Nh()n)0){X2RAN;vs iHccV<>9K%Z21#x6ZD#vfB(3v#uG&msJXe4FCkp^_c4qeg literal 0 HcmV?d00001 diff --git a/inst/extdata/example2.zarr/uns/pca/variance_ratio/.zarray b/inst/extdata/example2.zarr/uns/pca/variance_ratio/.zarray new file mode 100644 index 00000000..ca8e6716 --- /dev/null +++ b/inst/extdata/example2.zarr/uns/pca/variance_ratio/.zarray @@ -0,0 +1 @@ +{"zarr_format":2,"shape":[38],"chunks":[38],"dtype":"Ox}l_O6NpwQUbgYv#SI{4LR9ox5dA=9?`jZz zfRi!7@BIpg=fTSuLQ9q&n8&*0!P%-s4sBBwrp=o-J!}q-OV!$J89Ti&K}|45E| znDAOZ5M+YFd{b|GIR@^@hKA-2!W%dQ_7o+jOKTf#+qE$(nail`-i%efvXZO!8*VgP iroeoM;jF%D^0Q+tw;7xq1O!-E7#$r14)$huO8@}UlwU#s literal 0 HcmV?d00001 diff --git a/inst/extdata/example2.zarr/uns/rank_genes_groups/.zattrs b/inst/extdata/example2.zarr/uns/rank_genes_groups/.zattrs new file mode 100644 index 00000000..468e470d --- /dev/null +++ b/inst/extdata/example2.zarr/uns/rank_genes_groups/.zattrs @@ -0,0 +1 @@ +{"encoding-type":"dict","encoding-version":"0.1.0"} \ No newline at end of file diff --git a/inst/extdata/example2.zarr/uns/rank_genes_groups/.zgroup b/inst/extdata/example2.zarr/uns/rank_genes_groups/.zgroup new file mode 100644 index 00000000..c71fe9d0 --- /dev/null +++ b/inst/extdata/example2.zarr/uns/rank_genes_groups/.zgroup @@ -0,0 +1 @@ +{"zarr_format":2} \ No newline at end of file diff --git a/inst/extdata/example2.zarr/uns/rank_genes_groups/logfoldchanges/.zattrs b/inst/extdata/example2.zarr/uns/rank_genes_groups/logfoldchanges/.zattrs new file mode 100644 index 00000000..468e470d --- /dev/null +++ b/inst/extdata/example2.zarr/uns/rank_genes_groups/logfoldchanges/.zattrs @@ -0,0 +1 @@ +{"encoding-type":"dict","encoding-version":"0.1.0"} \ No newline at end of file diff --git a/inst/extdata/example2.zarr/uns/rank_genes_groups/logfoldchanges/.zgroup b/inst/extdata/example2.zarr/uns/rank_genes_groups/logfoldchanges/.zgroup new file mode 100644 index 00000000..c71fe9d0 --- /dev/null +++ b/inst/extdata/example2.zarr/uns/rank_genes_groups/logfoldchanges/.zgroup @@ -0,0 +1 @@ +{"zarr_format":2} \ No newline at end of file diff --git a/inst/extdata/example2.zarr/uns/rank_genes_groups/logfoldchanges/0/.zarray b/inst/extdata/example2.zarr/uns/rank_genes_groups/logfoldchanges/0/.zarray new file mode 100644 index 00000000..022fef30 --- /dev/null +++ b/inst/extdata/example2.zarr/uns/rank_genes_groups/logfoldchanges/0/.zarray @@ -0,0 +1 @@ +{"zarr_format":2,"shape":[100],"chunks":[100],"dtype":"VjB+qG;#aJmg(f>0#{NKL7v#Ku$N}9Twp~000000$SkES=m1T006+- z-PvLm+j-pAo=VxB)zqdVz}sn{a7f@%9n3%;_Rheo`N?2*hSOjfu+czzQOW?z&&i;N z#ljQ742j2}arwhwv?Rg+qv^rmfC{((S&OPm%$)MkHA0-*ScWrI>q2HKf!=Z%*f#9ZN`9R63_)^%>y#h zq}kyA^vM9CTGT-8?bg6LVA3GVxuD=;)j*Ms(ExK?psC^107N6$K%DN@AgkNmfKBk* zpx`mqAV_cGKE4tJs|Tu>b%7 literal 0 HcmV?d00001 diff --git a/inst/extdata/example2.zarr/uns/rank_genes_groups/logfoldchanges/1/.zarray b/inst/extdata/example2.zarr/uns/rank_genes_groups/logfoldchanges/1/.zarray new file mode 100644 index 00000000..022fef30 --- /dev/null +++ b/inst/extdata/example2.zarr/uns/rank_genes_groups/logfoldchanges/1/.zarray @@ -0,0 +1 @@ +{"zarr_format":2,"shape":[100],"chunks":[100],"dtype":"!4gH$P~|dUnsj_u{n$#tsh{o;%-l zSo-dILqqAsgv8x94@lg)r?BkFErpMT*AMMGFQIpJ=c3EpCda1TxCAok07vYB{oR)q zoH0MTK+ohX!`$j~41)ZZ7=C1)Iq-hPg$I4k#}jtCA4$;C+o_%g#nkR&7IP%IJJ8}(BOo||C2!Uf(hCSK=c92hLs?i zVeQVfbquRi%yxiy4vEFbK(s=y!SR;Qr)yJ==Tlm)p#J<$g4y*O z4&V0NWtjc-p~ACY_YW+7`uxF<$&VP=x4eANEc1*(CFJ>o!?FI3D?F#qzVA({2V zfq%(g57>r%KCtEUSFl5M8-MQ)Ss@r=QJJ^aDY@bDHfDhZcA;;RT4O&w3Ru`~eC*UK zA5#Wp{*`7QRSPE^nt0=)Sm91qmXhRU7Y|IiSN6n0d@S@~ zuEA4~fJ2P$llNcV9dd72Yx&?od$2+c$5V&COLqpT<1tB%WA_vHY)U>j`_t~ub=!WXY&}}JBU)q6r>k4$8*Kb*yE@_j z!qzJ@*n8%Se99CkyS@+Pyv;!i_Ja)f(_I3h52SZ)2hk2n%DX|dLhaQJF4GT`e>#}- z`q)|HogguW-z5){5AQv9>Rjzf5dXo}-xn+7j&G<`sJVE_Ve;4W4u7?-nTKDF2zaoo z{()_eQh&+`-?7v`1t^hs@$ z(k}n>q;Jka8|m{!S9CrV@}1^cykq~{+#6x{?0E9xwg`QZO$?VbHI_PFcVZbE0IvE5 A9smFU literal 0 HcmV?d00001 diff --git a/inst/extdata/example2.zarr/uns/rank_genes_groups/logfoldchanges/3/.zarray b/inst/extdata/example2.zarr/uns/rank_genes_groups/logfoldchanges/3/.zarray new file mode 100644 index 00000000..022fef30 --- /dev/null +++ b/inst/extdata/example2.zarr/uns/rank_genes_groups/logfoldchanges/3/.zarray @@ -0,0 +1 @@ +{"zarr_format":2,"shape":[100],"chunks":[100],"dtype":"fE~`-poY`npj;T?UfEdHj zVB}%Yz%CZkpyqtpAaaP+V0doQ;Q2Jpz&%CEVQR)EtiCWO!y2RjDRaVrHxOVoRk^@d zx07hIdVi%VPOR13nD-N@;J}xrz=D02VH<#gzW@LLAZU$}zW@LLpx<7o>nf|i0001h z5>TSQ0000$ROYpmJiemnvH)kozW@LL;FmSWzW@LL0L2l+9%0PC0002M)Hcq)0001B zSGvG9H_{x_&}$#np~_&~Cek1hi_ySC3(}xX-`fDjDd0dGQ{f!9RH;2>$C>Y(=h;(+Aq<=~ek=U}LH=s*Iz>7edR?m*E;p*wE{PnsrUgx0u1>69WPRw-tDptpWl;^iu!; literal 0 HcmV?d00001 diff --git a/inst/extdata/example2.zarr/uns/rank_genes_groups/logfoldchanges/4/.zarray b/inst/extdata/example2.zarr/uns/rank_genes_groups/logfoldchanges/4/.zarray new file mode 100644 index 00000000..022fef30 --- /dev/null +++ b/inst/extdata/example2.zarr/uns/rank_genes_groups/logfoldchanges/4/.zarray @@ -0,0 +1 @@ +{"zarr_format":2,"shape":[100],"chunks":[100],"dtype":"r1}?007`4WTn3V005xpj-kH*006)^NV31OzAxdw zzW@LLK=3`v*bJc2;>RGATF3z4|H%L?`^`XWxXhrVpwnQHVZ(sF=h$HDyV+pNBi8`d zF3KQ49oIn7{@6y~;;RS1mqy?~3iQ!_?%@tZ*4{zm-+tl%pVC8Z$z z%GV$*oY(Z&?R&ZN6?*MAOMA0--atvB^dMD@_Q1=p`+&{>1Hb?P0Kfw7<^VAB3%~#X z0H7b4KEPP05tKN3cJ>WW(~R2?kZ-}D4X?!}?B=_YOx0(CliNJ(tJv-j_`cU0c~QyZ tQrke=#Ee<(OhF(p2(Wx<*UM;q5V;TtqB!&}I8Wov#<7izyJee0qYB!=0(JlZ literal 0 HcmV?d00001 diff --git a/inst/extdata/example2.zarr/uns/rank_genes_groups/logfoldchanges/5/.zarray b/inst/extdata/example2.zarr/uns/rank_genes_groups/logfoldchanges/5/.zarray new file mode 100644 index 00000000..022fef30 --- /dev/null +++ b/inst/extdata/example2.zarr/uns/rank_genes_groups/logfoldchanges/5/.zarray @@ -0,0 +1 @@ +{"zarr_format":2,"shape":[100],"chunks":[100],"dtype":"A@Tf%dd`MF zVmli2_|7z}5;!ARc^V{<@bl8iJ^Rlm2Q6T*yZPYshhqzVYM*3?QoH03af`42^11ZK z0c&sUUVN+7&S7TSeTM(5NXe(~Vnn+FLUA0IQ^wtIIV@z*1VyHj6F|7#FG{A@u- z)|&;M_}KZrVN&e#hFRO*AF$GVt-$jC!vYVnhX)@2 z`RuTb@56#N6V?MDhwkj)IuN=-FvXxE?=??$!Q>OX0yFp*gvFngaOHpBJEv7L{P2SB zJ-&|v1>+f)ZcFz+onZM*^MP&G=b6`ho@}!`ebT}B*uFn@0ww0D{aL5}*~N4Fh1+3isVzkrn|K=}Xw literal 0 HcmV?d00001 diff --git a/inst/extdata/example2.zarr/uns/rank_genes_groups/names/1/.zarray b/inst/extdata/example2.zarr/uns/rank_genes_groups/names/1/.zarray new file mode 100644 index 00000000..574d27e3 --- /dev/null +++ b/inst/extdata/example2.zarr/uns/rank_genes_groups/names/1/.zarray @@ -0,0 +1 @@ +{"zarr_format":2,"shape":[100],"chunks":[100],"dtype":"|O","compressor":{"id":"zstd","level":1},"fill_value":0,"order":"F","filters":[{"id":"vlen-utf8"}],"dimension_separator":"."} \ No newline at end of file diff --git a/inst/extdata/example2.zarr/uns/rank_genes_groups/names/1/.zattrs b/inst/extdata/example2.zarr/uns/rank_genes_groups/names/1/.zattrs new file mode 100644 index 00000000..5b014145 --- /dev/null +++ b/inst/extdata/example2.zarr/uns/rank_genes_groups/names/1/.zattrs @@ -0,0 +1 @@ +{"encoding-type":"string-array","encoding-version":"0.2.0"} \ No newline at end of file diff --git a/inst/extdata/example2.zarr/uns/rank_genes_groups/names/1/0 b/inst/extdata/example2.zarr/uns/rank_genes_groups/names/1/0 new file mode 100644 index 0000000000000000000000000000000000000000..d6a7da831eef1b5044a2f880da1367bec6ce54fd GIT binary patch literal 154 zcmV;L0A>FuwJ-f(Py>Yo0D_Dg5}*~N4Fh1+3isU=*%kgDjeHBAm=QCz7CmZinU%*; zrwvId!FHpY=nI85rRZyC{h-gBic@pX&di$=2~w;qC$g3=dZNhCn`i}j_SO)&#;zJ3 z(bVRoB3SODB&qr|&05S|45}*~N4Fh1+3ip*=5!w77j(iKWV-6yA!<8g9;|Xzp z#8kpE^R%du)}=_(gIZCUx|~6?+e8wbT5D;^StG4?H>TjJ>W{E0L)l7micy^y#Yg;c zl_aM84wdU9&DmQ@R(mZN2m(R~03if{W2g`~zTW}h*ARAlOi8xK;smJxDDkyw0{YTN KOwy&DaY_NrO+{q@ literal 0 HcmV?d00001 diff --git a/inst/extdata/example2.zarr/uns/rank_genes_groups/names/3/.zarray b/inst/extdata/example2.zarr/uns/rank_genes_groups/names/3/.zarray new file mode 100644 index 00000000..574d27e3 --- /dev/null +++ b/inst/extdata/example2.zarr/uns/rank_genes_groups/names/3/.zarray @@ -0,0 +1 @@ +{"zarr_format":2,"shape":[100],"chunks":[100],"dtype":"|O","compressor":{"id":"zstd","level":1},"fill_value":0,"order":"F","filters":[{"id":"vlen-utf8"}],"dimension_separator":"."} \ No newline at end of file diff --git a/inst/extdata/example2.zarr/uns/rank_genes_groups/names/3/.zattrs b/inst/extdata/example2.zarr/uns/rank_genes_groups/names/3/.zattrs new file mode 100644 index 00000000..5b014145 --- /dev/null +++ b/inst/extdata/example2.zarr/uns/rank_genes_groups/names/3/.zattrs @@ -0,0 +1 @@ +{"encoding-type":"string-array","encoding-version":"0.2.0"} \ No newline at end of file diff --git a/inst/extdata/example2.zarr/uns/rank_genes_groups/names/3/0 b/inst/extdata/example2.zarr/uns/rank_genes_groups/names/3/0 new file mode 100644 index 0000000000000000000000000000000000000000..01973a3b6384718aefbdf6ec71deecea99644f06 GIT binary patch literal 155 zcmV;M0A&9twJ-f(Py>ww08&gF5}*~N4Fh1+3in-+-4*^HjeHA2bjzG6Njf5Hi&Aik zKCL&rJX&`*9>qAs?vIHSt)!b;51bM#v&JP7hUB5wp5^k(!Az zOww08&gF5}*~N4Fh1+3isXJ6%qa)jeHALK^K}xq~2qsIMZC> ztZ_-YN3nioGrL68ON)QRtuoCjC%R<9LR1y+X!Fxm%n&D}N`K)QNqfs!M4h6AnDbA= zXl<`aa7;2KsM>QjvO_l(3&@T(j^E!9%>WQ6G~ JaHY0pDFsQ0Le~HQ literal 0 HcmV?d00001 diff --git a/inst/extdata/example2.zarr/uns/rank_genes_groups/names/5/.zarray b/inst/extdata/example2.zarr/uns/rank_genes_groups/names/5/.zarray new file mode 100644 index 00000000..574d27e3 --- /dev/null +++ b/inst/extdata/example2.zarr/uns/rank_genes_groups/names/5/.zarray @@ -0,0 +1 @@ +{"zarr_format":2,"shape":[100],"chunks":[100],"dtype":"|O","compressor":{"id":"zstd","level":1},"fill_value":0,"order":"F","filters":[{"id":"vlen-utf8"}],"dimension_separator":"."} \ No newline at end of file diff --git a/inst/extdata/example2.zarr/uns/rank_genes_groups/names/5/.zattrs b/inst/extdata/example2.zarr/uns/rank_genes_groups/names/5/.zattrs new file mode 100644 index 00000000..5b014145 --- /dev/null +++ b/inst/extdata/example2.zarr/uns/rank_genes_groups/names/5/.zattrs @@ -0,0 +1 @@ +{"encoding-type":"string-array","encoding-version":"0.2.0"} \ No newline at end of file diff --git a/inst/extdata/example2.zarr/uns/rank_genes_groups/names/5/0 b/inst/extdata/example2.zarr/uns/rank_genes_groups/names/5/0 new file mode 100644 index 0000000000000000000000000000000000000000..37f22d8c4df2b15b99cf0d2f3d528921bcac83d4 GIT binary patch literal 154 zcmV;L0A>FuwJ-f(Py>Yo0K!Zh5}*~N4Fh1+3isVzkrnLLRJBLf425D+J&=4B=3X69w;X5=SlB&8Om0|2KJ3Pb<^ literal 0 HcmV?d00001 diff --git a/inst/extdata/example2.zarr/uns/rank_genes_groups/params/groupby/.zarray b/inst/extdata/example2.zarr/uns/rank_genes_groups/params/groupby/.zarray new file mode 100644 index 00000000..6d9d7eb3 --- /dev/null +++ b/inst/extdata/example2.zarr/uns/rank_genes_groups/params/groupby/.zarray @@ -0,0 +1 @@ +{"zarr_format":2,"shape":[],"chunks":[],"dtype":"|O","compressor":{"id":"zstd","level":1},"fill_value":0,"order":"F","filters":[{"id":"vlen-utf8"}],"dimension_separator":"."} \ No newline at end of file diff --git a/inst/extdata/example2.zarr/uns/rank_genes_groups/params/groupby/.zattrs b/inst/extdata/example2.zarr/uns/rank_genes_groups/params/groupby/.zattrs new file mode 100644 index 00000000..dbc5f479 --- /dev/null +++ b/inst/extdata/example2.zarr/uns/rank_genes_groups/params/groupby/.zattrs @@ -0,0 +1 @@ +{"encoding-type":"string","encoding-version":"0.2.0"} \ No newline at end of file diff --git a/inst/extdata/example2.zarr/uns/rank_genes_groups/params/groupby/0 b/inst/extdata/example2.zarr/uns/rank_genes_groups/params/groupby/0 new file mode 100644 index 0000000000000000000000000000000000000000..7657c9e6010b100e4d7bb6c32954c712c72dacaf GIT binary patch literal 23 ccmdPcs{dDkuaJR(k%57M4Ty76GgDIY06vTbApigX literal 0 HcmV?d00001 diff --git a/inst/extdata/example2.zarr/uns/rank_genes_groups/params/method/.zarray b/inst/extdata/example2.zarr/uns/rank_genes_groups/params/method/.zarray new file mode 100644 index 00000000..6d9d7eb3 --- /dev/null +++ b/inst/extdata/example2.zarr/uns/rank_genes_groups/params/method/.zarray @@ -0,0 +1 @@ +{"zarr_format":2,"shape":[],"chunks":[],"dtype":"|O","compressor":{"id":"zstd","level":1},"fill_value":0,"order":"F","filters":[{"id":"vlen-utf8"}],"dimension_separator":"."} \ No newline at end of file diff --git a/inst/extdata/example2.zarr/uns/rank_genes_groups/params/method/.zattrs b/inst/extdata/example2.zarr/uns/rank_genes_groups/params/method/.zattrs new file mode 100644 index 00000000..dbc5f479 --- /dev/null +++ b/inst/extdata/example2.zarr/uns/rank_genes_groups/params/method/.zattrs @@ -0,0 +1 @@ +{"encoding-type":"string","encoding-version":"0.2.0"} \ No newline at end of file diff --git a/inst/extdata/example2.zarr/uns/rank_genes_groups/params/method/0 b/inst/extdata/example2.zarr/uns/rank_genes_groups/params/method/0 new file mode 100644 index 0000000000000000000000000000000000000000..89a372db12f7108a182ec938a5ac4a0b6c76ef31 GIT binary patch literal 23 ccmdPcs{dDkuaJR(k%57M4Twv0OHzwV06p~u5dZ)H literal 0 HcmV?d00001 diff --git a/inst/extdata/example2.zarr/uns/rank_genes_groups/params/reference/.zarray b/inst/extdata/example2.zarr/uns/rank_genes_groups/params/reference/.zarray new file mode 100644 index 00000000..6d9d7eb3 --- /dev/null +++ b/inst/extdata/example2.zarr/uns/rank_genes_groups/params/reference/.zarray @@ -0,0 +1 @@ +{"zarr_format":2,"shape":[],"chunks":[],"dtype":"|O","compressor":{"id":"zstd","level":1},"fill_value":0,"order":"F","filters":[{"id":"vlen-utf8"}],"dimension_separator":"."} \ No newline at end of file diff --git a/inst/extdata/example2.zarr/uns/rank_genes_groups/params/reference/.zattrs b/inst/extdata/example2.zarr/uns/rank_genes_groups/params/reference/.zattrs new file mode 100644 index 00000000..dbc5f479 --- /dev/null +++ b/inst/extdata/example2.zarr/uns/rank_genes_groups/params/reference/.zattrs @@ -0,0 +1 @@ +{"encoding-type":"string","encoding-version":"0.2.0"} \ No newline at end of file diff --git a/inst/extdata/example2.zarr/uns/rank_genes_groups/params/reference/0 b/inst/extdata/example2.zarr/uns/rank_genes_groups/params/reference/0 new file mode 100644 index 0000000000000000000000000000000000000000..b825d22ea783595674c1d331aff6c0d1957841a0 GIT binary patch literal 21 acmdPcs{dDkCy{}Hk%57M1&E7Mi%S4A)C5`p literal 0 HcmV?d00001 diff --git a/inst/extdata/example2.zarr/uns/rank_genes_groups/params/use_raw/.zarray b/inst/extdata/example2.zarr/uns/rank_genes_groups/params/use_raw/.zarray new file mode 100644 index 00000000..15e93e4b --- /dev/null +++ b/inst/extdata/example2.zarr/uns/rank_genes_groups/params/use_raw/.zarray @@ -0,0 +1 @@ +{"zarr_format":2,"shape":[1],"chunks":[1],"dtype":"|b1","compressor":{"id":"zstd","level":1},"fill_value":false,"order":"F","filters":null,"dimension_separator":"."} \ No newline at end of file diff --git a/inst/extdata/example2.zarr/uns/rank_genes_groups/params/use_raw/.zattrs b/inst/extdata/example2.zarr/uns/rank_genes_groups/params/use_raw/.zattrs new file mode 100644 index 00000000..fc02c84a --- /dev/null +++ b/inst/extdata/example2.zarr/uns/rank_genes_groups/params/use_raw/.zattrs @@ -0,0 +1 @@ +{"encoding-type":"numeric-scalar","encoding-version":"0.2.0"} \ No newline at end of file diff --git a/inst/extdata/example2.zarr/uns/rank_genes_groups/params/use_raw/0 b/inst/extdata/example2.zarr/uns/rank_genes_groups/params/use_raw/0 new file mode 100644 index 0000000000000000000000000000000000000000..9263f8b471c085812467c474e547815d394fc076 GIT binary patch literal 10 RcmdPcs{dDkk&}Ue0RRz00yF>s literal 0 HcmV?d00001 diff --git a/inst/extdata/example2.zarr/uns/rank_genes_groups/pvals/.zattrs b/inst/extdata/example2.zarr/uns/rank_genes_groups/pvals/.zattrs new file mode 100644 index 00000000..468e470d --- /dev/null +++ b/inst/extdata/example2.zarr/uns/rank_genes_groups/pvals/.zattrs @@ -0,0 +1 @@ +{"encoding-type":"dict","encoding-version":"0.1.0"} \ No newline at end of file diff --git a/inst/extdata/example2.zarr/uns/rank_genes_groups/pvals/.zgroup b/inst/extdata/example2.zarr/uns/rank_genes_groups/pvals/.zgroup new file mode 100644 index 00000000..c71fe9d0 --- /dev/null +++ b/inst/extdata/example2.zarr/uns/rank_genes_groups/pvals/.zgroup @@ -0,0 +1 @@ +{"zarr_format":2} \ No newline at end of file diff --git a/inst/extdata/example2.zarr/uns/rank_genes_groups/pvals/0/.zarray b/inst/extdata/example2.zarr/uns/rank_genes_groups/pvals/0/.zarray new file mode 100644 index 00000000..022fef30 --- /dev/null +++ b/inst/extdata/example2.zarr/uns/rank_genes_groups/pvals/0/.zarray @@ -0,0 +1 @@ +{"zarr_format":2,"shape":[100],"chunks":[100],"dtype":"(00;0Ms$WPBm3byox-Q){S9$cUP;{MU%1GSM)f!#&pyNmpxw7I))caOPjX6|;} z2W#68*Mr!~Ig?EOJq>Ym-YO5rBFH%rL`r@I+&+C3#ar)yb)}YU@os@D=ZU20XDeba zuvchiJwR6LC_T*M0Vb6xkEPa%VMubi8ssOz*TIRn4^%hwD||+q2q{(#C%4_(Aw{k) zi)?W0g{kLMqpZ0XejQ#B8M{bKt!|GF=8_1vF_7_nBuuyCLbpUJP*&Z!*+HOyK^UjG zJFEb4@aA~@kOH##)j@|Isvw*m6@LA-3W1LoOcp8zkSgL;)<`rsttU77^M_Hmd~MZn zt`@PTG}#@Q7VCCK9J{bohex)%izkQZ;Fex&bc)nrc4bE2#2N}?Q_OgYs3h6{Ge55f=v37<8J&f=(l{cGkiAV zObi@VKVe&`61KIjKV*?kKNvu;Ka(~`I^ip{KjWxFe~DZT* zKh~`ww7?|7KX{P70&a=MKftvzWiaN+KbKQMNY)I?KYj53!f)BlKM0~JL(tvLKQz;4 zU~P=jKh*X;PogH%Kc4c(vS%&RKg8aL_n?i`KT5SSyzqY3KjeqcNdJ7-Kl&uPWeS(s zKO(awpXCzTKf=s$*?Jk;KZxW@k&A=cKgtyYmERWIKicGW>U&||KS*H*qH_-5KUgef zWv5o*KZPW)8FZQ9KUf}RELw=+KdA=sR|mJ@KL*$|{&B_OKV;}~BC+Vs(iGJeiKRx1+k-qlr zKki<&P7$K+KTF@hPIp@GKbRhJRFEX^KLMkA$$-Z0KavYU=9seWKTwfjPXc-EKiosG z9u~*!KSq?j#MXoCKV95Td&K7HKWgTx*4t(1Kf)JfAMV`dKaxsbavovjKc2pXTPB<2 zKWfqPwRL*rKWeldyaO)cKen5Ct0f}hKf2l{i=34BH1KWb@F za58V-KcsneRa17~Ke!-oVMcS^KSt9pIZ5N%Kg?gFi*@DMKYmPv;}$yDKeFyI=V(IL zKg1U&;r4vjKYZ$i<4~m4KccbiaC>LfKV_h%Py|raKMs)`0|D>TKfNo^>ilidKVk2q zRiHW1Kb#g;*eEg2KLcNJ#PQ6`Kc_8zI|>`eKTc&w4R`3nKf=xCPo-VKKX5=*?nT(Z zKXNLjQpKQv1c oqsQc-Ke;F@snSl1KdqY8&wAE_KR#Cc@im%vKUCUdskjtlKfffH$N&HU literal 0 HcmV?d00001 diff --git a/inst/extdata/example2.zarr/uns/rank_genes_groups/pvals/2/.zarray b/inst/extdata/example2.zarr/uns/rank_genes_groups/pvals/2/.zarray new file mode 100644 index 00000000..022fef30 --- /dev/null +++ b/inst/extdata/example2.zarr/uns/rank_genes_groups/pvals/2/.zarray @@ -0,0 +1 @@ +{"zarr_format":2,"shape":[100],"chunks":[100],"dtype":"xd0Z+%c;FL%1~H+2Qx<{nAP~MBC93fuzicN zX6jI0!dmP8Qi2cM#>#kl0~GQ04pIvl!V9nF3ua|V7OU@1t6H%tv)DzpOAd8|Hl8;x z#|6g8nB;GAsOIkWCC(|q%@u^CA6DV_-aqr4%1>Z2&PPj^eg?(6FEaAk7c{lIJV`j! zjfJ_42tRrcs(LFz)en1N$*!wDvgJFn)XvYYE$&AM7~WCc{fMwGv`EYy0GAz@T5(Jb z!`SxP%QeH$w{SLjw`fqhk;dNMsfEHXThSUi0@kZM=QETs(6;e1950O_Pv7j>_m052 z;&1_J$4?yaztS_K_z9!Uh}-jh2GF8O9g0Q+zN}1G{#t2(BWpU2<84H#ojdbB-3Xp= z;lXgC5gIwMBHG0Sn{qH}(oLXNS>4l;%m@~7zGZGTBehXi=vQw>8znd3;a;bi+JvSi$dE6jpY=Kv#O&96dZv*mN%qkrJyRO(pd>JGh!RH#2^{UUNikFr_*0}6a5)5+ zs{Oa6R06IyZ%1S&jln<5O1h|S6r&_hnu)JNSg!D|daDl2wQ)^BceQYk<(@9=*b1i^&zl2E-v#rK8Tov0&$SfAoASj z^A2bIfI`(COz^vLu)34S&F;e6)DxGhLOL<|rau3Lv;#NgyUoAGySoyxT4WhFl z$uzH4@K481`Blh3`Bl>~u93oRGGj}iZylcVXBS8>#4vQG*}NYYK{w+1wWU!EOE0>w leY+3=Yf8AWDNn$gw*40#6#@VCDJf|u(x7yRl|LdU;XfLCkOcq$ literal 0 HcmV?d00001 diff --git a/inst/extdata/example2.zarr/uns/rank_genes_groups/pvals/3/.zarray b/inst/extdata/example2.zarr/uns/rank_genes_groups/pvals/3/.zarray new file mode 100644 index 00000000..022fef30 --- /dev/null +++ b/inst/extdata/example2.zarr/uns/rank_genes_groups/pvals/3/.zarray @@ -0,0 +1 @@ +{"zarr_format":2,"shape":[100],"chunks":[100],"dtype":"KTHXFYpwf;Kjj-&P!KRb1D;%8LUKh`tX^s#Z)Ke(EOv%II)Khzbe54S1TKZ*q> zYMo@-Kf=*STACEvKTyBE+TsS=Kb*wTzpJ3!KPUsnz~H0aKj_MW<=>3oKd7>NLc|Z? zKiEQB2qUWCKbY}p))dg;KW%B}d701SKW$@04Rm&KYj}8cs`WrKT*PgUNzh5Ki)6F1X*b7Kb+y?8s{DD zKX&WDCQEhgKje4{A?T&;Km2aTE|^5_KPa2hO)zusKT2_?nl0z=KQS!N$Q3m2KY&<9 zCGS}7Km7R|`~dasKUrazoR@9wKLj?EA5Tf`KkgFrK~b>mKYitD6)ZIBKjlfPa=uvU zKL+eCDO|GXKX`iqlUe)cKYPIi)4BfUKiJ|c*>9TWKlbbL<=kNAKUfyqJ7+56KZs&2 z_XZf_Kc2+P`_A9uKmJ&0B_p`vKgNyOf@cEaKSAq*qo~N>KR5!jLAtu&Ke!gBap9!k zKh9s&{@#<|KNRPsH?O?hKY%Mx_n6b$Kk`ucv@(Ig;_GhKk9mEfavnU zKe;2lk)nFRKPZ;ebAal;KP*8w4cAV*KT{9|25F_dKV6$yA=4$cKkv*^J>WpIKZt_p o?kH@mKWuw+&i5#jKf`LyQxvO~KmU`H!e4e=KPc4=$SrsXKbnh|+yDRo literal 0 HcmV?d00001 diff --git a/inst/extdata/example2.zarr/uns/rank_genes_groups/pvals/4/.zarray b/inst/extdata/example2.zarr/uns/rank_genes_groups/pvals/4/.zarray new file mode 100644 index 00000000..022fef30 --- /dev/null +++ b/inst/extdata/example2.zarr/uns/rank_genes_groups/pvals/4/.zarray @@ -0,0 +1 @@ +{"zarr_format":2,"shape":[100],"chunks":[100],"dtype":"4|DcDEIKmFGN za=|agKlnzCK8z8_Ka3Y?;{P1ZKWQA`b}VesKiJsmhV0|gKirX0*_lVvKctinGissK zKSJ1(`<}?yKbolkZ?hWPKSwc|@bJjoKj{r!l#;jIKgus4D3zezKh$ql3ri2)KN=jB zM4e9GKi8rH4m=9rKl)63+n5{RKe+D9o*}g0KR*a5;&1WcKdkZjG!CKSKbADgKsc)6 zKbQY&&?yJxKi0!@G1oWbKRhF|>44tkKj2d>-`-B;KSV)dRt%TtKLZo${k$9LKd(Vr zj>~xIKL9O%F^1mhKkgf8{ES=cKjHf6Pt>&RKRMMeC>y=(KciG2lvl*>2P=NVKMB=2*Nt|^KUSo# zgc8!mKU`{C2se|+KNmZ{R{d?rKS{ftxpjTbKQVvT{D}0;Kf7RuGPG#XKgGYX*Qv_U zKLQPYwG&R$KTo1Fn5{079s-)$Kasre z!*xX5KfcbckoDT!KicOs+i9KNKju;a{4>#KS{{n_g1{)KZ;O2UJah* zKQ0D#Dx)XnKdy%sk4ft0KfL}u2smZuKY;5xg)`*mKUvzcVDA&@Km1aC!;0wXKXZ9z zt1C3>Ke`&%VLKn|Km1kvVu>5hisKSq@fi2m2$KR;l_O)R9~KM+&k8JiT~KjPBmu9*VhKg+42qqv9OKRiVI=J7$^ zKd8$Od|6}IKg5O&7lOgpKOS6#SA>$*KeBl5*~k*sKYro$Bb%VqKQO%D{%`lwKV^zO zS{cRDKf~9Ps1pj)KT)nvBj9S&KbgjnXy&QXKQCLpU>-xxKg$GyH$?i;KStLoi5VZ# zKZ8pw80NCdKjRKzgkONnKgKqRs}H5jKQuoo2$g}%KLHMbNvcN6KQS&L(L_MUKYC9& o{NZT0Kgj_eE+6*3KU%Loyr~_yKZyqZs?RWRKhVN}Y~vPTKNWkFivR!s literal 0 HcmV?d00001 diff --git a/inst/extdata/example2.zarr/uns/rank_genes_groups/pvals_adj/.zattrs b/inst/extdata/example2.zarr/uns/rank_genes_groups/pvals_adj/.zattrs new file mode 100644 index 00000000..468e470d --- /dev/null +++ b/inst/extdata/example2.zarr/uns/rank_genes_groups/pvals_adj/.zattrs @@ -0,0 +1 @@ +{"encoding-type":"dict","encoding-version":"0.1.0"} \ No newline at end of file diff --git a/inst/extdata/example2.zarr/uns/rank_genes_groups/pvals_adj/.zgroup b/inst/extdata/example2.zarr/uns/rank_genes_groups/pvals_adj/.zgroup new file mode 100644 index 00000000..c71fe9d0 --- /dev/null +++ b/inst/extdata/example2.zarr/uns/rank_genes_groups/pvals_adj/.zgroup @@ -0,0 +1 @@ +{"zarr_format":2} \ No newline at end of file diff --git a/inst/extdata/example2.zarr/uns/rank_genes_groups/pvals_adj/0/.zarray b/inst/extdata/example2.zarr/uns/rank_genes_groups/pvals_adj/0/.zarray new file mode 100644 index 00000000..022fef30 --- /dev/null +++ b/inst/extdata/example2.zarr/uns/rank_genes_groups/pvals_adj/0/.zarray @@ -0,0 +1 @@ +{"zarr_format":2,"shape":[100],"chunks":[100],"dtype":"k+&|6J28r`w-g)V!n)T)4KXj|7#q}%cKVpN-S7NeH$o}j4r0drP zVdrGp?fA`JFZ*8ZsV(FZqSE;`VV9ES?mycpgNL~l?>}-hBz_f{@31@nSwy7mKd0Aw zY;*zaINwh^TW{z;PQD>y?z!SW%lcy}ec|EvOvyrcCDsCK#4EbT!~hXawKU)ruowrEF)$gxYlGThwJ-f(AOb}S03;9$1yawhP<=lWb>)kI(2ze!W_p*VPP)OyWR$ZD(LXlu zAfYZm-<`-IUHUHIexKPJ>onm%)~zA5z$D^73p>>!NulIFz%oW6u2beesl|(tvWn(E zq5kl2NTA^^p6S^y=vCnlz!&+B{PuT;ed<3!p_snloa#SdPA0T%R_i}x`;WrqUhUqp z9Z1ln?LUn@g7c{8&k=hQmS*lh-DL>Pf28g|0HLDSTQ=`MOW(jwcUn)WK`EK>?y_Az zrzw=|W;1sT*uv`TTTa_>??G!5d2%Gvo9jO! zi0aFKCG0{nTn7#1->6dB8Fg)+Uj6Ec}4emd^Ok!-D0`6fg9x^X3}Q)lzF^2m&@{L|Jb&46y2m F5(nEmu1x>{ literal 0 HcmV?d00001 diff --git a/inst/extdata/example2.zarr/uns/rank_genes_groups/pvals_adj/3/.zarray b/inst/extdata/example2.zarr/uns/rank_genes_groups/pvals_adj/3/.zarray new file mode 100644 index 00000000..022fef30 --- /dev/null +++ b/inst/extdata/example2.zarr/uns/rank_genes_groups/pvals_adj/3/.zarray @@ -0,0 +1 @@ +{"zarr_format":2,"shape":[100],"chunks":[100],"dtype":"RAD{Xu2FgE{D{h)D=FUG~Tz$*0D$_q5 zyA)=RTh{-Lw|e)U+P_MEffaAwo0AO*-<{y9a#1JRDB?e~TH@QRDdgSp$SDiz~ti&*3#mKw%Y%gT(JYN^z!|E$6iyltMFjR@%Y$FZ%b|=vQt2 z>aU`fv;-_qeOj ze5TmyH%!RI^bG5vmHCwFdF%y%X92H}u>>C<7254Tp{L>yhWFQzDQoll?LU6>sHZg$ z?mr((q~qP@Dp*W9+X3%C*vSX7As6pIcchzco+|G@y-^_x;Ov3QRG_oEPg+&sm73`i zUr%GH7^1{%VP#t9PaGGma}VRu5{#Am8cIDSAh04U8R7vGNnjocSjJ*=0yYtWJuJ-b zYbCH?30N-zOptZUBrHTA1Wbd#ylWK#lLRaf!JL3YFpKMp2- z9UWopKXxygRFr7#)X!+n>&6+VtXyJw?mv+uxo&2-D~N!>h+HI`$ozucz&~X$iCM$5 zx<4HNGYMEF5C9+m1a<6%0TC001C_a0x&F005v;I|U>z zz>%8+01piS;9 z!yq`i6SWNxaDBQ#-PanooTg3Nw$6vz>Vaaf_!Rd+7}K!50Pcx&NJ=;aGZ0HQ ea~6ztPp2lJ9Wv_sH4X0#{lTLar=2tdUPV<%(&%9T literal 0 HcmV?d00001 diff --git a/inst/extdata/example2.zarr/uns/rank_genes_groups/scores/1/.zarray b/inst/extdata/example2.zarr/uns/rank_genes_groups/scores/1/.zarray new file mode 100644 index 00000000..022fef30 --- /dev/null +++ b/inst/extdata/example2.zarr/uns/rank_genes_groups/scores/1/.zarray @@ -0,0 +1 @@ +{"zarr_format":2,"shape":[100],"chunks":[100],"dtype":"dEe!lnJc4xBym!y()4+cfvD**Cs`HCcEN;WuN%0nIA6aqIsYm6Xc@L z#~-*n_tNz>9Ctth4u8e&)%GkXn*FFDWAA|&&c}+ePnNEEYSi}ZXZwR#_ZJCaQ(h^g zPkQ~}zu?<#dmZXuB}lD!{~$p1gF?)r1>5gATvYnRAmW#Bu=KOT9fvOutSi4M9RKir zf%B~&53c9@RQOwPYSn>^FTWCI{{6jRlgD3%vPldFfYvg2ZD&fD^_=xVsVBR_haygp zSi+u)>hW=b%ht=0L>Xf31r@&-J*&wSw+Mp*N++Y+M-oUNq;Gjcl;ozP3 zmQ&Rk5$LbyLL-NAtPfE6_}moj$kKucGw@iCh>&; literal 0 HcmV?d00001 diff --git a/inst/extdata/example2.zarr/uns/rank_genes_groups/scores/3/.zarray b/inst/extdata/example2.zarr/uns/rank_genes_groups/scores/3/.zarray new file mode 100644 index 00000000..022fef30 --- /dev/null +++ b/inst/extdata/example2.zarr/uns/rank_genes_groups/scores/3/.zarray @@ -0,0 +1 @@ +{"zarr_format":2,"shape":[100],"chunks":[100],"dtype":"NrvxE=pL0001>fSCRugbYAE-~3>= zhoHb}UMXVI;A8Nhr1B#4ATqJ@V4~lE`7ZQ8Vm9{R zHfQ+2?W_49!|I@2>-u0AAp77QRQv!uTmIm9&HnSDim007`&-2?z+ngw7xoe;nP z001C3{}sSks1bBXc~&dK8h{hE4G@rTh(eYJiCK8`SMebRd>)lN{Gv~fY|&b+o45;H iK?JbWck#Qqh*=$kMZ+sG7va>5AP8gnxUV|4x`FPP27a%ChL0?B~Rdfayd) z!q(zAY^a4U?>s2;I=2qzzw0Guc6HVMzhW!@YK-& z@}JYdFlE%BWf9hZtK`=p8YtL6K;_#YR)E}qPs`q56m8?6Pf+B*bjq`e(!a!(B0$yvJIz)BPO0wW literal 0 HcmV?d00001 diff --git a/inst/extdata/example2.zarr/uns/rank_genes_groups/scores/5/.zarray b/inst/extdata/example2.zarr/uns/rank_genes_groups/scores/5/.zarray new file mode 100644 index 00000000..022fef30 --- /dev/null +++ b/inst/extdata/example2.zarr/uns/rank_genes_groups/scores/5/.zarray @@ -0,0 +1 @@ +{"zarr_format":2,"shape":[100],"chunks":[100],"dtype":"1Ado-v;1($W_lNRe7?km#aYpdKoNwEKEv=pa*09{ z<6tr;;lR#%+#m@6+Q5&o*kC>{*MJ+k)d2pR(qL6E&;W$6&VX$W%0PH_#2^m)wSZbz zu%H0_s=ojL0AP>QtiXmxxPV2+xeD{WzW@LL;QnL4P!_`vxyI=w&nk=1zW@LL03jRG zzW@LLAkbRXzW@LLpl_bw>=M=>`ul)rliI+L6x*QgS^#;(Kmh#Qz!0w8Aa%^%z=r;R5tQ3Qu4@*@s6O3_W&a?^FS0? z0D55DvGvzj_9lklXooop1001CIcM-q<002PLaTCB=s1a0P zdn?Oku+yXi5Rh+cx1^)4IZltXPewmX;YsS!xV7efk#v;r>|RuJz|=LDW@6mLkvIqd T0l_&zcOWF3D58A)Y^13Hm`~_1 literal 0 HcmV?d00001 diff --git a/inst/extdata/example2.zarr/uns/umap/.zattrs b/inst/extdata/example2.zarr/uns/umap/.zattrs new file mode 100644 index 00000000..468e470d --- /dev/null +++ b/inst/extdata/example2.zarr/uns/umap/.zattrs @@ -0,0 +1 @@ +{"encoding-type":"dict","encoding-version":"0.1.0"} \ No newline at end of file diff --git a/inst/extdata/example2.zarr/uns/umap/.zgroup b/inst/extdata/example2.zarr/uns/umap/.zgroup new file mode 100644 index 00000000..c71fe9d0 --- /dev/null +++ b/inst/extdata/example2.zarr/uns/umap/.zgroup @@ -0,0 +1 @@ +{"zarr_format":2} \ No newline at end of file diff --git a/inst/extdata/example2.zarr/uns/umap/params/.zattrs b/inst/extdata/example2.zarr/uns/umap/params/.zattrs new file mode 100644 index 00000000..468e470d --- /dev/null +++ b/inst/extdata/example2.zarr/uns/umap/params/.zattrs @@ -0,0 +1 @@ +{"encoding-type":"dict","encoding-version":"0.1.0"} \ No newline at end of file diff --git a/inst/extdata/example2.zarr/uns/umap/params/.zgroup b/inst/extdata/example2.zarr/uns/umap/params/.zgroup new file mode 100644 index 00000000..c71fe9d0 --- /dev/null +++ b/inst/extdata/example2.zarr/uns/umap/params/.zgroup @@ -0,0 +1 @@ +{"zarr_format":2} \ No newline at end of file diff --git a/inst/extdata/example2.zarr/uns/umap/params/a/.zarray b/inst/extdata/example2.zarr/uns/umap/params/a/.zarray new file mode 100644 index 00000000..83389bad --- /dev/null +++ b/inst/extdata/example2.zarr/uns/umap/params/a/.zarray @@ -0,0 +1 @@ +{"zarr_format":2,"shape":[1],"chunks":[1],"dtype":"WnK{itD(SAp(~Cev5{L)_5l$e& z2t<6^ylAKQ$H+?Yw>QhT IeEJk703i%Cj{pDw literal 0 HcmV?d00001 diff --git a/inst/extdata/example2.zarr/var/dispersions/.zarray b/inst/extdata/example2.zarr/var/dispersions/.zarray new file mode 100644 index 00000000..022fef30 --- /dev/null +++ b/inst/extdata/example2.zarr/var/dispersions/.zarray @@ -0,0 +1 @@ +{"zarr_format":2,"shape":[100],"chunks":[100],"dtype":"lJk3~AqzwR5s80vn~KY`ZNl?9yCzj~}5A2Pn%zaD1?TNYu+zn{E9AwRaD zznO<=FEVX8Kim-Gh#9Hkzv!c&)h~F?zorJphLMrKKbM%Hp*^#&Kk73c5GL`LzhR;h z%Tw>izwZuD3P4=VKS`V&kft2XKZJCkx{7?ZzX(Gg%|VX0Kltr{6trg2zbR{zpXbZa zKMDeTI6n)|zkhrg@MojgKT&PxKE?jgzmlqS`tw1~KX@|a)mhWYzba2o{LIegJ0B6UKglGg32`8-KM~hG*^BSUzgS`}X3JaPzW{$<3p}{OKO>y{8n#1+ zKc0a1L%96YzZvL+K+FcQzmPVx^B~Tmzdw?gzm`Jk#g?7bKh~15`gLa2zwfV>|9twz zzxsYd;oQN(zd+~TX6aPbzs~e|xwA&cKSWV>*IwqkKRpT&Vw1wBKXxaV6->mNKL<@R zzcx0uzg&vVxnNGaKjw=Q0r56#KaFdS=1#)9KkC#mzf;%5zw%ryMd0+yKb?4t{5uKG zznVRU+jh3qztnAs{fi9KzvlesQdJSxzt;og7js6o zKlygN`Y2(;Kln?X(A2KNzeSH?8z@J~zlEL6CgYmZzn*hjIuH>xKeR};aY8b)za99x zpN>+)zq&yOy-Ke;ila{KDZzZC{} oVlykcKVlD}jqcLGzXJVhI&}BLzna;ps!9>FzYjYJ3JyrtKf`vY5dZ)H literal 0 HcmV?d00001 diff --git a/inst/extdata/example2.zarr/var/dispersions_norm/.zarray b/inst/extdata/example2.zarr/var/dispersions_norm/.zarray new file mode 100644 index 00000000..022fef30 --- /dev/null +++ b/inst/extdata/example2.zarr/var/dispersions_norm/.zarray @@ -0,0 +1 @@ +{"zarr_format":2,"shape":[100],"chunks":[100],"dtype":"hwPV005v5iG@gut6#A5)!0000W z|Agc4C(k!$=>PzrEX-g!ZSP=?i~#-n*FYu)(7ylx0HDiv>z<(IOQGAp0002sYxMPi zSj+sd&43@5`9A;v06-cR=+U3*#(L}=sbGsQ_+WKC?eO-?#a-(jZM%2;)*Wf!)Ij#V zw6Z_$U@hC=;KMxQK=1+fAWVYm!b+w>S1?Z2%P@xO>Z0N*#+;Io9;W)tuJz}WPl!~zKC05)Kr zpypXWU_k@`+5y@CCGo)HruYMp5ED+VqL@1{W&-8WS7p)Q%3zQ*@}QOi@Bjzp@jy~}@Bl=d z^1zIf?jSiD^0xorG$rwX>XY#yuRzJQKp)QRV0o7CpwEl%;FW^%fVJ%KV26|Kw*S6p zzuJZ4m0y0w*T=C31BMF@PL>g@L=y;@c@bx z?tt}M@BmZN?%7 ztv?gq@qpw(62P%*z+oXEUGxz$hhTRM6M$7L@WW3Qv1=X+0L$nRAZKBKP= zpb-EU-4TIIfaI(ZU_j9kfY16*7QWx0fVxV}z)uzuKwqfv0<-JP0T3gZneq@YYJ}H1 zgKUeshh_0{yk5v&xRo($Hte|;TOL+?%()vFT!%!X)H0ohy$p`=fR;d>;0L+2#ai99 zWOo{z-IO{ccUD6O)Q)0i=j4eq^!F=Dcx<9kY1S6M&(Ho-KaM@Rw73o&O4qW`jP<$1 RH-rn?s&;+QCaT0XVG6Cgj?e%A literal 0 HcmV?d00001 diff --git a/inst/extdata/example2.zarr/var/mean_counts/.zarray b/inst/extdata/example2.zarr/var/mean_counts/.zarray new file mode 100644 index 00000000..022fef30 --- /dev/null +++ b/inst/extdata/example2.zarr/var/mean_counts/.zarray @@ -0,0 +1 @@ +{"zarr_format":2,"shape":[100],"chunks":[100],"dtype":"2iQF+L#$;~|qA9vF1hj1Q7R#P@tQj(%qhqk!`zJeYYom1S@8T5AOy}Gg5AjZ~ zCTizrX^ysh$YF;UW5f99-m-VF8|`>TF;I^V_$!Wk7S1bPLN*VYit9xKF*~^dinV*0 Sn<)#&_-}V->FT`SIIaTb?vqsj literal 0 HcmV?d00001 diff --git a/inst/extdata/example2.zarr/var/means/.zarray b/inst/extdata/example2.zarr/var/means/.zarray new file mode 100644 index 00000000..022fef30 --- /dev/null +++ b/inst/extdata/example2.zarr/var/means/.zarray @@ -0,0 +1 @@ +{"zarr_format":2,"shape":[100],"chunks":[100],"dtype":"VPedgbH91fi`dX%M6igTNX?F7R5ua&~hWd!r^ z)lmgAI9g5X{EO@L$o?ql-*tr$_)2}m#f{-%w{*Gk2#57{(SvLo9pqKY+hux!Kyj!n zsezD?+_)~kpFw}rNjdL0p{29VHY1r3*Xym_En!#_>aB_nUN#c+DMjWaen=z>7h!Ul5ZPhSbsLhD$k`Qv;`cC9V z6JjO_Dw}5!E|mtSeam8KTjMp|#FSx^!{2o?tr?zu2p$n;G8~_0QP}KD_+3|(Kg&#q z-g6yhHt~cFf<3JYIpJIFvRh9!5!!pATz7aIe5=o`PPFVplSRuP-vo{r&FPx4HXI7o z1hI=TVW=xiDwlHnYc?r8+)OxA8&WdkG9fI#XG~KOVOvM;ez{?H>2np9q!T<8?(%jo zLf12eNo%j6*FbcR@GFDe;j2rND;P?hWzLB)91XI^i+WZtG+r?(vC8F;M815z`~bl_ z+OIA2Aj8Cp@d?KE3@a-eCFVkoq9o~*%ut3OA$uKe1`-;W;DVhy!`pOK)}IkQYFrLR zgyb=d(RJTmB_LEMJbrG=82qY44}4=83eH-bcQfVi{PeDVYYT(8Ca0<;Pm2_%^MZ0A z!|)Uj&my%B!oZL32k+@I-9NzOl$gOmV}CcqjF3NV?Y{Oxf@PRvw$&LOP8S3{os^|V zr`@p6fZ>-HM{~yaYqS{cSiDyKhC@4d%icgMf=}ewZDK>OvZbPp;#!W>pC#XU3gNo! zZb$hYj`DG0{XHiRhaz{Sbp*#kUDiqaR1T|0yA=UGgs5vzJco{PEX(ZsHQSwI)lkLC VtG@}(LQk(k1!1x*wqbE1!+%d4qxAp) literal 0 HcmV?d00001 diff --git a/inst/extdata/example2.zarr/var/n_cells_by_counts/.zarray b/inst/extdata/example2.zarr/var/n_cells_by_counts/.zarray new file mode 100644 index 00000000..5d06ede0 --- /dev/null +++ b/inst/extdata/example2.zarr/var/n_cells_by_counts/.zarray @@ -0,0 +1 @@ +{"zarr_format":2,"shape":[100],"chunks":[100],"dtype":" zl0lKqSx#}RG;q!uxLe2Ft-~!zI;15Pl60g?mb2~x)*X@+kj@>0R3vwWC0WaH?j(0o JV^jhF0|C}bD-i$y literal 0 HcmV?d00001 diff --git a/inst/extdata/example2.zarr/var/pct_dropout_by_counts/.zarray b/inst/extdata/example2.zarr/var/pct_dropout_by_counts/.zarray new file mode 100644 index 00000000..022fef30 --- /dev/null +++ b/inst/extdata/example2.zarr/var/pct_dropout_by_counts/.zarray @@ -0,0 +1 @@ +{"zarr_format":2,"shape":[100],"chunks":[100],"dtype":"wJ-f(AOe*J07AtO7{DbR!2kdM|Np-=c{h?cPZg=*c@Kn40XF~tyJ|EJ zo|-Io4QW&*!dO{Fx}Y|Ku>_Z=YJ)^z0X*Qm&kpU#)wXS1sNi^LGr$6wGS&eRATXkO z%D6Bba)FU(URLZp9TU=~+{_`HLin0Evybp~VU74Xn}i@St`C-F(I8M-fUFv`-)*=3 zRFfN8J-DbzI*1u<%Ta&HlHQ@Q(c=ZZY4@f{VDj2&nz&oGAL`W6D=t4eldXM)%i?$G Why$?qQCALqLXJTaMF3QK)=B|nB52+K literal 0 HcmV?d00001 diff --git a/inst/extdata/example2.zarr/var/total_counts/.zarray b/inst/extdata/example2.zarr/var/total_counts/.zarray new file mode 100644 index 00000000..022fef30 --- /dev/null +++ b/inst/extdata/example2.zarr/var/total_counts/.zarray @@ -0,0 +1 @@ +{"zarr_format":2,"shape":[100],"chunks":[100],"dtype":"$$0 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 literal 0 HcmV?d00001 diff --git a/inst/extdata/example2.zarr/varp/.zattrs b/inst/extdata/example2.zarr/varp/.zattrs new file mode 100644 index 00000000..468e470d --- /dev/null +++ b/inst/extdata/example2.zarr/varp/.zattrs @@ -0,0 +1 @@ +{"encoding-type":"dict","encoding-version":"0.1.0"} \ No newline at end of file diff --git a/inst/extdata/example2.zarr/varp/.zgroup b/inst/extdata/example2.zarr/varp/.zgroup new file mode 100644 index 00000000..c71fe9d0 --- /dev/null +++ b/inst/extdata/example2.zarr/varp/.zgroup @@ -0,0 +1 @@ +{"zarr_format":2} \ No newline at end of file diff --git a/man/from_Seurat.Rd b/man/from_Seurat.Rd index dc3cb954..41fbb2b0 100644 --- a/man/from_Seurat.Rd +++ b/man/from_Seurat.Rd @@ -6,7 +6,7 @@ \usage{ from_Seurat( seurat_obj, - output_class = c("InMemoryAnnData", "HDF5AnnData"), + output_class = c("InMemoryAnnData", "HDF5AnnData", "ZarrAnnData"), assay = NULL, X = "counts", ... diff --git a/man/from_SingleCellExperiment.Rd b/man/from_SingleCellExperiment.Rd index 13d7d0d9..5e11d585 100644 --- a/man/from_SingleCellExperiment.Rd +++ b/man/from_SingleCellExperiment.Rd @@ -6,7 +6,7 @@ \usage{ from_SingleCellExperiment( sce, - output_class = c("InMemory", "HDF5AnnData"), + output_class = c("InMemory", "HDF5AnnData", "ZarrAnnData"), ... ) } diff --git a/man/read_zarr.Rd b/man/read_zarr.Rd new file mode 100644 index 00000000..bd3afe23 --- /dev/null +++ b/man/read_zarr.Rd @@ -0,0 +1,40 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/read_zarr.R +\name{read_zarr} +\alias{read_zarr} +\title{Read Zarr} +\usage{ +read_zarr( + path, + to = c("InMemoryAnnData", "ZarrAnnData", "SingleCellExperiment", "Seurat"), + ... +) +} +\arguments{ +\item{path}{Path to the H5AD file to read} + +\item{to}{The type of object to return. Must be one of: "InMemoryAnnData", +"HDF5AnnData", "SingleCellExperiment", "Seurat"} + +\item{...}{Extra arguments provided to \code{\link[=to_SingleCellExperiment]{to_SingleCellExperiment()}} or +\code{\link[=to_Seurat]{to_Seurat()}}} +} +\value{ +The object specified by \code{to} +} +\description{ +Read data from a Zarr store +} +\examples{ +h5ad_file <- system.file("extdata", "example.h5ad", package = "anndataR") + +# Read the H5AD as a SingleCellExperiment object +if (requireNamespace("SingleCellExperiment", quietly = TRUE)) { + sce <- read_zarr(h5ad_file, to = "SingleCellExperiment") +} + +# Read the H5AD as a Seurat object +if (requireNamespace("SeuratObject", quietly = TRUE)) { + seurat <- read_zarr(h5ad_file, to = "Seurat") +} +} diff --git a/man/write_zarr.Rd b/man/write_zarr.Rd new file mode 100644 index 00000000..4730817d --- /dev/null +++ b/man/write_zarr.Rd @@ -0,0 +1,93 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/write_zarr.R +\name{write_zarr} +\alias{write_zarr} +\title{Write Zarr} +\usage{ +write_zarr( + object, + store, + compression = c("none", "gzip", "lzf"), + mode = c("w-", "r", "r+", "a", "w", "x") +) +} +\arguments{ +\item{object}{The object to write, either a "SingleCellExperiment" or a +"Seurat" object} + +\item{compression}{The compression algorithm to use when writing the +HDF5 file. Can be one of \code{"none"}, \code{"gzip"} or \code{"lzf"}. Defaults to +\code{"none"}.} + +\item{mode}{The mode to open the HDF5 file. +\itemize{ +\item \code{a} creates a new file or opens an existing one for read/write. +\item \verb{r+} opens an existing file for read/write. +\item \code{w} creates a file, truncating any existing ones +\item \verb{w-}/\code{x} are synonyms creating a file and failing if it already exists. +}} + +\item{path}{Path of the file to write to} +} +\value{ +\code{path} invisibly +} +\description{ +Write a Zarr store +} +\examples{ +adata <- AnnData( + X = matrix(1:15, 3L, 5L), + layers = list( + A = matrix(15:1, 3L, 5L), + B = matrix(letters[1:15], 3L, 5L) + ), + obs = data.frame(cell = 1:3), + var = data.frame(gene = 1:5), + obs_names = LETTERS[1:3], + var_names = letters[1:5] +) +h5ad_file <- tempfile(fileext = ".h5ad") +write_zarr(adata, h5ad_file) + +# Write a SingleCellExperiment as an H5AD +if (requireNamespace("SingleCellExperiment", quietly = TRUE)) { + ncells <- 100 + counts <- matrix(rpois(20000, 5), ncol = ncells) + logcounts <- log2(counts + 1) + + pca <- matrix(runif(ncells * 5), ncells) + tsne <- matrix(rnorm(ncells * 2), ncells) + + sce <- SingleCellExperiment::SingleCellExperiment( + assays = list(counts = counts, logcounts = logcounts), + reducedDims = list(PCA = pca, tSNE = tsne) + ) + + h5ad_file <- tempfile(fileext = ".h5ad") + write_zarr(sce, h5ad_file) +} + +# Write a Seurat as a H5AD +if (requireNamespace("SeuratObject", quietly = TRUE)) { + # TODO: uncomment this code when the seurat converter is fixed + # counts <- matrix(1:15, 3L, 5L) + # dimnames(counts) <- list( + # letters[1:3], + # LETTERS[1:5] + # ) + # gene.metadata <- data.frame( + # row.names = LETTERS[1:5], + # gene = 1:5 + # ) + # obj <- SeuratObject::CreateSeuratObject(counts, meta.data = gene.metadata) + # cell.metadata <- data.frame( + # row.names = letters[1:3], + # cell = 1:3 + # ) + # obj <- SeuratObject::AddMetaData(obj, cell.metadata) + # + # h5ad_file <- tempfile(fileext = ".h5ad") + # write_zarr(obj, h5ad_file) +} +} diff --git a/tests/testthat/test-h5ad-zarr.R b/tests/testthat/test-h5ad-zarr.R index 9ea0e4e0..04b0556e 100644 --- a/tests/testthat/test-h5ad-zarr.R +++ b/tests/testthat/test-h5ad-zarr.R @@ -1,9 +1,11 @@ skip_if_not_installed("rhdf5") skip_if_not_installed("pizzarr") -file <- system.file("extdata", "example.h5ad", package = "anndataR") +# file <- system.file("extdata", "example.h5ad", package = "anndataR") +file <- hdf5r::H5File$new(system.file("extdata", "example.h5ad", package = "anndataR"), mode = "r") -zarr_dir <- system.file("extdata", "example.zarr", package = "anndataR") +# zarr_dir <- system.file("extdata", "example.zarr", package = "anndataR") +zarr_dir <- system.file("extdata", "example2.zarr", package = "anndataR") store <- pizzarr::DirectoryStore$new(zarr_dir) test_that("reading dense matrices is same for h5ad and zarr", { @@ -64,8 +66,10 @@ test_that("reading 1D nullable arrays is same for h5ad and zarr", { array_1d_zarr <- read_zarr_dense_array(store, "obs/FloatNA") expect_equal(array_1d_h5ad, array_1d_zarr) + # TODO: check this test, zarr Bools are stored as dense array hence no mask is given array_1d_h5ad <- read_h5ad_nullable_boolean(file, "obs/Bool") - array_1d_zarr <- read_zarr_nullable_boolean(store, "obs/Bool") + # array_1d_zarr <- read_zarr_nullable_boolean(store, "obs/Bool") + array_1d_zarr <- read_zarr_dense_array(store, "obs/Bool") expect_equal(array_1d_h5ad, array_1d_zarr) array_1d_h5ad <- read_h5ad_nullable_boolean(file, "obs/BoolNA") @@ -103,7 +107,8 @@ test_that("reading string arrays is same for h5ad and zarr", { # }) test_that("reading dataframes works", { - df_h5ad <- read_h5ad_data_frame(file, "obs", include_index = TRUE) + # df_h5ad <- read_h5ad_data_frame(file, "obs", include_index = TRUE) + df_h5ad <- read_h5ad_data_frame(file, "obs") df_zarr <- read_zarr_data_frame(store, "obs", include_index = TRUE) expect_equal(df_h5ad, df_zarr) From 3800f38b70f50a0537197f161c96d0761d899f0c Mon Sep 17 00:00:00 2001 From: Artur-man Date: Sat, 2 Nov 2024 23:00:00 +0100 Subject: [PATCH 18/25] fix set/get zarr _index, update text example.zarr and update tests similar to HDF5AnnData --- R/ZarrAnnData.R | 43 +++----------- R/read_zarr_helpers.R | 11 +--- R/write_zarr_helpers.R | 8 ++- inst/extdata/example.zarr/.zattrs | 5 +- inst/extdata/example.zarr/.zgroup | 4 +- inst/extdata/example.zarr/X/.zattrs | 9 +-- inst/extdata/example.zarr/X/.zgroup | 4 +- inst/extdata/example.zarr/X/data/.zarray | 21 +------ inst/extdata/example.zarr/X/data/0 | Bin 12849 -> 4588 bytes inst/extdata/example.zarr/X/indices/.zarray | 21 +------ inst/extdata/example.zarr/X/indices/0 | Bin 2265 -> 4737 bytes inst/extdata/example.zarr/X/indptr/.zarray | 21 +------ inst/extdata/example.zarr/X/indptr/0 | Bin 142 -> 157 bytes inst/extdata/example.zarr/layers/.zattrs | 5 +- inst/extdata/example.zarr/layers/.zgroup | 4 +- .../example.zarr/layers/counts/.zattrs | 9 +-- .../example.zarr/layers/counts/.zgroup | 4 +- .../example.zarr/layers/counts/data/.zarray | 21 +------ .../extdata/example.zarr/layers/counts/data/0 | Bin 5545 -> 3117 bytes .../layers/counts/indices/.zarray | 21 +------ .../example.zarr/layers/counts/indices/0 | Bin 2265 -> 4737 bytes .../example.zarr/layers/counts/indptr/.zarray | 21 +------ .../example.zarr/layers/counts/indptr/0 | Bin 142 -> 157 bytes .../example.zarr/layers/csc_counts/.zattrs | 9 +-- .../example.zarr/layers/csc_counts/.zgroup | 4 +- .../layers/csc_counts/data/.zarray | 21 +------ .../example.zarr/layers/csc_counts/data/0 | Bin 5587 -> 3132 bytes .../layers/csc_counts/indices/.zarray | 21 +------ .../example.zarr/layers/csc_counts/indices/0 | Bin 2155 -> 4185 bytes .../layers/csc_counts/indptr/.zarray | 21 +------ .../example.zarr/layers/csc_counts/indptr/0 | Bin 240 -> 180 bytes .../example.zarr/layers/dense_X/.zarray | 23 +------- .../example.zarr/layers/dense_X/.zattrs | 5 +- inst/extdata/example.zarr/layers/dense_X/0.0 | Bin 15594 -> 8394 bytes .../example.zarr/layers/dense_counts/.zarray | 23 +------- .../example.zarr/layers/dense_counts/.zattrs | 5 +- .../example.zarr/layers/dense_counts/0.0 | Bin 4280 -> 2695 bytes inst/extdata/example.zarr/obs/.zattrs | 19 +----- inst/extdata/example.zarr/obs/.zgroup | 4 +- .../obs/Bool/.zarray | 0 inst/extdata/example.zarr/obs/Bool/.zattrs | 5 +- inst/extdata/example.zarr/obs/Bool/.zgroup | 3 - .../obs/Bool/0 | Bin .../example.zarr/obs/Bool/mask/.zarray | 20 ------- .../example.zarr/obs/Bool/mask/.zattrs | 4 -- inst/extdata/example.zarr/obs/Bool/mask/0 | Bin 66 -> 0 bytes .../example.zarr/obs/Bool/values/.zarray | 20 ------- .../example.zarr/obs/Bool/values/.zattrs | 4 -- inst/extdata/example.zarr/obs/Bool/values/0 | Bin 66 -> 0 bytes inst/extdata/example.zarr/obs/BoolNA/.zattrs | 5 +- inst/extdata/example.zarr/obs/BoolNA/.zgroup | 4 +- .../example.zarr/obs/BoolNA/mask/.zarray | 21 +------ .../example.zarr/obs/BoolNA/mask/.zattrs | 4 -- inst/extdata/example.zarr/obs/BoolNA/mask/0 | Bin 66 -> 18 bytes .../example.zarr/obs/BoolNA/values/.zarray | 21 +------ .../example.zarr/obs/BoolNA/values/.zattrs | 4 -- inst/extdata/example.zarr/obs/BoolNA/values/0 | Bin 66 -> 18 bytes inst/extdata/example.zarr/obs/Float/.zarray | 21 +------ inst/extdata/example.zarr/obs/Float/.zattrs | 5 +- inst/extdata/example.zarr/obs/Float/0 | Bin 70 -> 25 bytes inst/extdata/example.zarr/obs/FloatNA/.zarray | 21 +------ inst/extdata/example.zarr/obs/FloatNA/.zattrs | 5 +- inst/extdata/example.zarr/obs/FloatNA/0 | Bin 78 -> 33 bytes inst/extdata/example.zarr/obs/Int/.zarray | 21 +------ inst/extdata/example.zarr/obs/Int/.zattrs | 5 +- inst/extdata/example.zarr/obs/Int/0 | Bin 91 -> 81 bytes inst/extdata/example.zarr/obs/IntNA/.zattrs | 5 +- inst/extdata/example.zarr/obs/IntNA/.zgroup | 4 +- .../example.zarr/obs/IntNA/mask/.zarray | 21 +------ .../example.zarr/obs/IntNA/mask/.zattrs | 4 -- inst/extdata/example.zarr/obs/IntNA/mask/0 | Bin 66 -> 17 bytes .../example.zarr/obs/IntNA/values/.zarray | 21 +------ .../example.zarr/obs/IntNA/values/.zattrs | 4 -- inst/extdata/example.zarr/obs/IntNA/values/0 | Bin 42 -> 48 bytes inst/extdata/example.zarr/obs/_index/.zarray | 25 +------- inst/extdata/example.zarr/obs/_index/.zattrs | 5 +- inst/extdata/example.zarr/obs/_index/0 | Bin 269 -> 126 bytes inst/extdata/example.zarr/obs/leiden/.zattrs | 6 +- inst/extdata/example.zarr/obs/leiden/.zgroup | 4 +- .../obs/leiden/categories/.zarray | 25 +------- .../obs/leiden/categories/.zattrs | 4 -- .../example.zarr/obs/leiden/categories/0 | Bin 50 -> 43 bytes .../example.zarr/obs/leiden/codes/.zarray | 21 +------ .../example.zarr/obs/leiden/codes/.zattrs | 4 -- inst/extdata/example.zarr/obs/leiden/codes/0 | Bin 66 -> 53 bytes .../obs/leiden/ordered/.zarray | 0 .../obs/leiden/ordered/0 | Bin .../obs/log1p_n_genes_by_counts/.zarray | 21 +------ .../obs/log1p_n_genes_by_counts/.zattrs | 5 +- .../obs/log1p_n_genes_by_counts/0 | Bin 371 -> 199 bytes .../obs/log1p_total_counts/.zarray | 21 +------ .../obs/log1p_total_counts/.zattrs | 5 +- .../example.zarr/obs/log1p_total_counts/0 | Bin 190 -> 220 bytes .../obs/n_genes_by_counts/.zarray | 21 +------ .../obs/n_genes_by_counts/.zattrs | 5 +- .../example.zarr/obs/n_genes_by_counts/0 | Bin 90 -> 72 bytes .../example.zarr/obs/total_counts/.zarray | 21 +------ .../example.zarr/obs/total_counts/.zattrs | 5 +- inst/extdata/example.zarr/obs/total_counts/0 | Bin 95 -> 153 bytes inst/extdata/example.zarr/obsm/.zattrs | 5 +- inst/extdata/example.zarr/obsm/.zgroup | 4 +- inst/extdata/example.zarr/obsm/X_pca/.zarray | 23 +------- inst/extdata/example.zarr/obsm/X_pca/.zattrs | 5 +- inst/extdata/example.zarr/obsm/X_pca/0.0 | Bin 7572 -> 8460 bytes inst/extdata/example.zarr/obsm/X_umap/.zarray | 23 +------- inst/extdata/example.zarr/obsm/X_umap/.zattrs | 5 +- inst/extdata/example.zarr/obsm/X_umap/0.0 | Bin 416 -> 544 bytes inst/extdata/example.zarr/obsp/.zattrs | 5 +- inst/extdata/example.zarr/obsp/.zgroup | 4 +- .../example.zarr/obsp/connectivities/.zattrs | 9 +-- .../example.zarr/obsp/connectivities/.zgroup | 4 +- .../obsp/connectivities/data/.zarray | 21 +------ .../example.zarr/obsp/connectivities/data/0 | Bin 3568 -> 3072 bytes .../obsp/connectivities/indices/.zarray | 21 +------ .../obsp/connectivities/indices/0 | Bin 1040 -> 961 bytes .../obsp/connectivities/indptr/.zarray | 21 +------ .../example.zarr/obsp/connectivities/indptr/0 | Bin 109 -> 154 bytes .../example.zarr/obsp/distances/.zattrs | 9 +-- .../example.zarr/obsp/distances/.zgroup | 4 +- .../example.zarr/obsp/distances/data/.zarray | 21 +------ .../example.zarr/obsp/distances/data/0 | Bin 2844 -> 2406 bytes .../obsp/distances/indices/.zarray | 21 +------ .../example.zarr/obsp/distances/indices/0 | Bin 775 -> 693 bytes .../obsp/distances/indptr/.zarray | 21 +------ .../example.zarr/obsp/distances/indptr/0 | Bin 105 -> 159 bytes inst/extdata/example.zarr/uns/.zattrs | 5 +- inst/extdata/example.zarr/uns/.zgroup | 4 +- inst/extdata/example.zarr/uns/Bool/.zarray | 21 +------ inst/extdata/example.zarr/uns/Bool/.zattrs | 5 +- inst/extdata/example.zarr/uns/Bool/0 | Bin 19 -> 12 bytes inst/extdata/example.zarr/uns/BoolNA/.zattrs | 5 +- inst/extdata/example.zarr/uns/BoolNA/.zgroup | 4 +- .../example.zarr/uns/BoolNA/mask/.zarray | 21 +------ .../example.zarr/uns/BoolNA/mask/.zattrs | 4 -- inst/extdata/example.zarr/uns/BoolNA/mask/0 | Bin 19 -> 12 bytes .../example.zarr/uns/BoolNA/values/.zarray | 21 +------ .../example.zarr/uns/BoolNA/values/.zattrs | 4 -- inst/extdata/example.zarr/uns/BoolNA/values/0 | Bin 19 -> 12 bytes .../extdata/example.zarr/uns/Category/.zattrs | 6 +- .../extdata/example.zarr/uns/Category/.zgroup | 4 +- .../uns/Category/categories/.zarray | 25 +------- .../uns/Category/categories/.zattrs | 4 -- .../example.zarr/uns/Category/categories/0 | Bin 30 -> 23 bytes .../example.zarr/uns/Category/codes/.zarray | 21 +------ .../example.zarr/uns/Category/codes/.zattrs | 4 -- .../extdata/example.zarr/uns/Category/codes/0 | Bin 19 -> 26 bytes .../uns/Category/ordered/.zarray | 0 .../uns/Category/ordered/0 | Bin .../example.zarr/uns/DataFrameEmpty/.zattrs | 7 +-- .../example.zarr/uns/DataFrameEmpty/.zgroup | 4 +- .../uns/DataFrameEmpty/_index/.zarray | 25 +------- .../uns/DataFrameEmpty/_index/.zattrs | 5 +- .../example.zarr/uns/DataFrameEmpty/_index/0 | Bin 269 -> 126 bytes inst/extdata/example.zarr/uns/Int/.zarray | 21 +------ inst/extdata/example.zarr/uns/Int/.zattrs | 5 +- inst/extdata/example.zarr/uns/Int/0 | Bin 40 -> 29 bytes inst/extdata/example.zarr/uns/IntNA/.zattrs | 5 +- inst/extdata/example.zarr/uns/IntNA/.zgroup | 4 +- .../example.zarr/uns/IntNA/mask/.zarray | 21 +------ .../example.zarr/uns/IntNA/mask/.zattrs | 4 -- inst/extdata/example.zarr/uns/IntNA/mask/0 | Bin 19 -> 12 bytes .../example.zarr/uns/IntNA/values/.zarray | 21 +------ .../example.zarr/uns/IntNA/values/.zattrs | 4 -- inst/extdata/example.zarr/uns/IntNA/values/0 | Bin 40 -> 29 bytes .../example.zarr/uns/IntScalar/.zarray | 11 +--- .../example.zarr/uns/IntScalar/.zattrs | 5 +- inst/extdata/example.zarr/uns/IntScalar/0 | Bin 8 -> 17 bytes .../extdata/example.zarr/uns/Sparse1D/.zattrs | 9 +-- .../extdata/example.zarr/uns/Sparse1D/.zgroup | 4 +- .../example.zarr/uns/Sparse1D/data/.zarray | 21 +------ inst/extdata/example.zarr/uns/Sparse1D/data/0 | Bin 40 -> 33 bytes .../example.zarr/uns/Sparse1D/indices/.zarray | 21 +------ .../example.zarr/uns/Sparse1D/indices/0 | Bin 28 -> 17 bytes .../example.zarr/uns/Sparse1D/indptr/.zarray | 21 +------ .../example.zarr/uns/Sparse1D/indptr/0 | Bin 44 -> 36 bytes inst/extdata/example.zarr/uns/String/.zarray | 25 +------- inst/extdata/example.zarr/uns/String/.zattrs | 5 +- inst/extdata/example.zarr/uns/String/0 | Bin 140 -> 50 bytes .../extdata/example.zarr/uns/String2D/.zarray | 27 +-------- .../extdata/example.zarr/uns/String2D/.zattrs | 5 +- inst/extdata/example.zarr/uns/String2D/0.0 | Bin 343 -> 89 bytes .../example.zarr/uns/StringScalar/.zarray | 11 +--- .../example.zarr/uns/StringScalar/.zattrs | 5 +- inst/extdata/example.zarr/uns/StringScalar/0 | Bin 32 -> 25 bytes inst/extdata/example.zarr/uns/hvg/.zattrs | 5 +- inst/extdata/example.zarr/uns/hvg/.zgroup | 4 +- .../example.zarr/uns/hvg/flavor/.zarray | 11 +--- .../example.zarr/uns/hvg/flavor/.zattrs | 5 +- inst/extdata/example.zarr/uns/hvg/flavor/0 | Bin 24 -> 23 bytes inst/extdata/example.zarr/uns/leiden/.zattrs | 5 +- inst/extdata/example.zarr/uns/leiden/.zgroup | 4 +- .../example.zarr/uns/leiden/params/.zattrs | 5 +- .../example.zarr/uns/leiden/params/.zgroup | 4 +- .../uns/leiden/params/n_iterations/.zarray | 11 +--- .../uns/leiden/params/n_iterations/.zattrs | 5 +- .../uns/leiden/params/n_iterations/0 | Bin 8 -> 17 bytes .../uns/leiden/params/random_state/.zarray | 11 +--- .../uns/leiden/params/random_state/.zattrs | 5 +- .../uns/leiden/params/random_state/0 | Bin 8 -> 17 bytes .../uns/leiden/params/resolution/.zarray | 11 +--- .../uns/leiden/params/resolution/.zattrs | 5 +- .../uns/leiden/params/resolution/0 | Bin 8 -> 17 bytes inst/extdata/example.zarr/uns/log1p/.zattrs | 5 +- inst/extdata/example.zarr/uns/log1p/.zgroup | 4 +- .../example.zarr/uns/neighbors/.zattrs | 5 +- .../example.zarr/uns/neighbors/.zgroup | 4 +- .../uns/neighbors/connectivities_key/.zarray | 11 +--- .../uns/neighbors/connectivities_key/.zattrs | 5 +- .../uns/neighbors/connectivities_key/0 | Bin 56 -> 31 bytes .../uns/neighbors/distances_key/.zarray | 11 +--- .../uns/neighbors/distances_key/.zattrs | 5 +- .../uns/neighbors/distances_key/0 | Bin 36 -> 26 bytes .../example.zarr/uns/neighbors/params/.zattrs | 5 +- .../example.zarr/uns/neighbors/params/.zgroup | 4 +- .../uns/neighbors/params/method/.zarray | 11 +--- .../uns/neighbors/params/method/.zattrs | 5 +- .../uns/neighbors/params/method/0 | Bin 16 -> 21 bytes .../uns/neighbors/params/metric/.zarray | 11 +--- .../uns/neighbors/params/metric/.zattrs | 5 +- .../uns/neighbors/params/metric/0 | Bin 36 -> 26 bytes .../uns/neighbors/params/n_neighbors/.zarray | 11 +--- .../uns/neighbors/params/n_neighbors/.zattrs | 5 +- .../uns/neighbors/params/n_neighbors/0 | Bin 8 -> 17 bytes .../uns/neighbors/params/random_state/.zarray | 11 +--- .../uns/neighbors/params/random_state/.zattrs | 5 +- .../uns/neighbors/params/random_state/0 | Bin 8 -> 17 bytes inst/extdata/example.zarr/uns/pca/.zattrs | 5 +- inst/extdata/example.zarr/uns/pca/.zgroup | 4 +- .../example.zarr/uns/pca/params/.zattrs | 5 +- .../example.zarr/uns/pca/params/.zgroup | 4 +- .../pca/params/use_highly_variable/.zarray | 11 +--- .../pca/params/use_highly_variable/.zattrs | 5 +- .../uns/pca/params/use_highly_variable/0 | Bin 1 -> 10 bytes .../uns/pca/params/zero_center/.zarray | 11 +--- .../uns/pca/params/zero_center/.zattrs | 5 +- .../example.zarr/uns/pca/params/zero_center/0 | Bin 1 -> 10 bytes .../example.zarr/uns/pca/variance/.zarray | 21 +------ .../example.zarr/uns/pca/variance/.zattrs | 5 +- inst/extdata/example.zarr/uns/pca/variance/0 | Bin 165 -> 246 bytes .../uns/pca/variance_ratio/.zarray | 21 +------ .../uns/pca/variance_ratio/.zattrs | 5 +- .../example.zarr/uns/pca/variance_ratio/0 | Bin 164 -> 239 bytes .../uns/rank_genes_groups/.zattrs | 5 +- .../uns/rank_genes_groups/.zgroup | 4 +- .../rank_genes_groups/logfoldchanges/.zarray | 45 --------------- .../rank_genes_groups/logfoldchanges/.zattrs | 5 +- .../rank_genes_groups/logfoldchanges}/.zgroup | 0 .../uns/rank_genes_groups/logfoldchanges/0 | Bin 2142 -> 0 bytes .../logfoldchanges/0/.zarray | 0 .../logfoldchanges/0}/.zattrs | 0 .../uns/rank_genes_groups/logfoldchanges/0/0 | Bin .../logfoldchanges/1/.zarray | 0 .../logfoldchanges/1}/.zattrs | 0 .../uns/rank_genes_groups/logfoldchanges/1/0 | Bin .../logfoldchanges/2/.zarray | 0 .../logfoldchanges/2}/.zattrs | 0 .../uns/rank_genes_groups/logfoldchanges/2/0 | Bin .../logfoldchanges/3/.zarray | 0 .../logfoldchanges/3}/.zattrs | 0 .../uns/rank_genes_groups/logfoldchanges/3/0 | Bin .../logfoldchanges/4/.zarray | 0 .../logfoldchanges/4}/.zattrs | 0 .../uns/rank_genes_groups/logfoldchanges/4/0 | Bin .../logfoldchanges/5/.zarray | 0 .../logfoldchanges/5}/.zattrs | 0 .../uns/rank_genes_groups/logfoldchanges/5/0 | Bin .../uns/rank_genes_groups/names/.zarray | 45 --------------- .../uns/rank_genes_groups/names/.zattrs | 5 +- .../uns/rank_genes_groups/names}/.zgroup | 0 .../uns/rank_genes_groups/names/0 | Bin 1465 -> 0 bytes .../uns/rank_genes_groups/names/0/.zarray | 0 .../uns/rank_genes_groups/names/0}/.zattrs | 0 .../uns/rank_genes_groups/names/0/0 | Bin .../uns/rank_genes_groups/names/1/.zarray | 0 .../uns/rank_genes_groups/names/1}/.zattrs | 0 .../uns/rank_genes_groups/names/1/0 | Bin .../uns/rank_genes_groups/names/2/.zarray | 0 .../uns/rank_genes_groups/names/2}/.zattrs | 0 .../uns/rank_genes_groups/names/2/0 | Bin .../uns/rank_genes_groups/names/3/.zarray | 0 .../uns/rank_genes_groups/names/3}/.zattrs | 0 .../uns/rank_genes_groups/names/3/0 | Bin .../uns/rank_genes_groups/names/4/.zarray | 0 .../uns/rank_genes_groups/names/4}/.zattrs | 0 .../uns/rank_genes_groups/names/4/0 | Bin .../uns/rank_genes_groups/names/5/.zarray | 0 .../uns/rank_genes_groups/names/5}/.zattrs | 0 .../uns/rank_genes_groups/names/5/0 | Bin .../uns/rank_genes_groups/params/.zattrs | 5 +- .../uns/rank_genes_groups/params/.zgroup | 4 +- .../params/corr_method/.zarray | 11 +--- .../params/corr_method/.zattrs | 5 +- .../rank_genes_groups/params/corr_method/0 | Bin 72 -> 35 bytes .../rank_genes_groups/params/groupby/.zarray | 11 +--- .../rank_genes_groups/params/groupby/.zattrs | 5 +- .../uns/rank_genes_groups/params/groupby/0 | Bin 24 -> 23 bytes .../rank_genes_groups/params/method/.zarray | 11 +--- .../rank_genes_groups/params/method/.zattrs | 5 +- .../uns/rank_genes_groups/params/method/0 | Bin 24 -> 23 bytes .../params/reference/.zarray | 11 +--- .../params/reference/.zattrs | 5 +- .../uns/rank_genes_groups/params/reference/0 | Bin 16 -> 21 bytes .../rank_genes_groups/params/use_raw/.zarray | 11 +--- .../rank_genes_groups/params/use_raw/.zattrs | 5 +- .../uns/rank_genes_groups/params/use_raw/0 | Bin 1 -> 10 bytes .../uns/rank_genes_groups/pvals/.zarray | 45 --------------- .../uns/rank_genes_groups/pvals/.zattrs | 5 +- .../uns/rank_genes_groups/pvals}/.zgroup | 0 .../uns/rank_genes_groups/pvals/0 | Bin 4296 -> 0 bytes .../uns/rank_genes_groups/pvals/0/.zarray | 0 .../uns/rank_genes_groups/pvals/0}/.zattrs | 0 .../uns/rank_genes_groups/pvals/0/0 | Bin .../uns/rank_genes_groups/pvals/1/.zarray | 0 .../uns/rank_genes_groups/pvals/1}/.zattrs | 0 .../uns/rank_genes_groups/pvals/1/0 | Bin .../uns/rank_genes_groups/pvals/2/.zarray | 0 .../uns/rank_genes_groups/pvals/2}/.zattrs | 0 .../uns/rank_genes_groups/pvals/2/0 | Bin .../uns/rank_genes_groups/pvals/3/.zarray | 0 .../uns/rank_genes_groups/pvals/3}/.zattrs | 0 .../uns/rank_genes_groups/pvals/3/0 | Bin .../uns/rank_genes_groups/pvals/4/.zarray | 0 .../uns/rank_genes_groups/pvals/4}/.zattrs | 0 .../uns/rank_genes_groups/pvals/4/0 | Bin .../uns/rank_genes_groups/pvals/5/.zarray | 0 .../uns/rank_genes_groups/pvals/5}/.zattrs | 0 .../uns/rank_genes_groups/pvals/5/0 | Bin .../uns/rank_genes_groups/pvals_adj/.zarray | 45 --------------- .../uns/rank_genes_groups/pvals_adj/.zattrs | 5 +- .../uns/rank_genes_groups/pvals_adj}/.zgroup | 0 .../uns/rank_genes_groups/pvals_adj/0 | Bin 3737 -> 0 bytes .../uns/rank_genes_groups/pvals_adj/0/.zarray | 0 .../rank_genes_groups/pvals_adj/0}/.zattrs | 0 .../uns/rank_genes_groups/pvals_adj/0/0 | Bin .../uns/rank_genes_groups/pvals_adj/1/.zarray | 0 .../rank_genes_groups/pvals_adj/1}/.zattrs | 0 .../uns/rank_genes_groups/pvals_adj/1/0 | Bin .../uns/rank_genes_groups/pvals_adj/2/.zarray | 0 .../rank_genes_groups/pvals_adj/2}/.zattrs | 0 .../uns/rank_genes_groups/pvals_adj/2/0 | Bin .../uns/rank_genes_groups/pvals_adj/3/.zarray | 0 .../rank_genes_groups/pvals_adj/3}/.zattrs | 0 .../uns/rank_genes_groups/pvals_adj/3/0 | Bin .../uns/rank_genes_groups/pvals_adj/4/.zarray | 0 .../rank_genes_groups/pvals_adj/4}/.zattrs | 0 .../uns/rank_genes_groups/pvals_adj/4/0 | Bin .../uns/rank_genes_groups/pvals_adj/5/.zarray | 0 .../rank_genes_groups/pvals_adj/5}/.zattrs | 0 .../uns/rank_genes_groups/pvals_adj/5/0 | Bin .../uns/rank_genes_groups/scores/.zarray | 45 --------------- .../uns/rank_genes_groups/scores/.zattrs | 5 +- .../uns/rank_genes_groups/scores}/.zgroup | 0 .../uns/rank_genes_groups/scores/0 | Bin 2067 -> 0 bytes .../uns/rank_genes_groups/scores/0/.zarray | 0 .../uns/rank_genes_groups/scores/0}/.zattrs | 0 .../uns/rank_genes_groups/scores/0/0 | Bin .../uns/rank_genes_groups/scores/1/.zarray | 0 .../uns/rank_genes_groups/scores/1}/.zattrs | 0 .../uns/rank_genes_groups/scores/1/0 | Bin .../uns/rank_genes_groups/scores/2/.zarray | 0 .../uns/rank_genes_groups/scores/2}/.zattrs | 0 .../uns/rank_genes_groups/scores/2/0 | Bin .../uns/rank_genes_groups/scores/3/.zarray | 0 .../uns/rank_genes_groups/scores/3}/.zattrs | 0 .../uns/rank_genes_groups/scores/3/0 | Bin .../uns/rank_genes_groups/scores/4/.zarray | 0 .../uns/rank_genes_groups/scores/4}/.zattrs | 0 .../uns/rank_genes_groups/scores/4/0 | Bin .../uns/rank_genes_groups/scores/5/.zarray | 0 .../uns/rank_genes_groups/scores/5}/.zattrs | 0 .../uns/rank_genes_groups/scores/5/0 | Bin inst/extdata/example.zarr/uns/umap/.zattrs | 5 +- inst/extdata/example.zarr/uns/umap/.zgroup | 4 +- .../example.zarr/uns/umap/params/.zattrs | 5 +- .../example.zarr/uns/umap/params/.zgroup | 4 +- .../example.zarr/uns/umap/params/a/.zarray | 11 +--- .../example.zarr/uns/umap/params/a/.zattrs | 5 +- inst/extdata/example.zarr/uns/umap/params/a/0 | Bin 8 -> 17 bytes .../example.zarr/uns/umap/params/b/.zarray | 11 +--- .../example.zarr/uns/umap/params/b/.zattrs | 5 +- inst/extdata/example.zarr/uns/umap/params/b/0 | Bin 8 -> 17 bytes inst/extdata/example.zarr/var/.zattrs | 19 +----- inst/extdata/example.zarr/var/.zgroup | 4 +- inst/extdata/example.zarr/var/String/.zarray | 25 +------- inst/extdata/example.zarr/var/String/.zattrs | 5 +- inst/extdata/example.zarr/var/String/0 | Bin 470 -> 127 bytes inst/extdata/example.zarr/var/_index/.zarray | 25 +------- inst/extdata/example.zarr/var/_index/.zattrs | 5 +- inst/extdata/example.zarr/var/_index/0 | Bin 469 -> 115 bytes .../example.zarr/var/dispersions/.zarray | 21 +------ .../example.zarr/var/dispersions/.zattrs | 5 +- inst/extdata/example.zarr/var/dispersions/0 | Bin 803 -> 810 bytes .../example.zarr/var/dispersions_norm/.zarray | 21 +------ .../example.zarr/var/dispersions_norm/.zattrs | 5 +- .../example.zarr/var/dispersions_norm/0 | Bin 416 -> 517 bytes .../example.zarr/var/highly_variable/.zarray | 21 +------ .../example.zarr/var/highly_variable/.zattrs | 5 +- .../example.zarr/var/highly_variable/0 | Bin 116 -> 70 bytes .../var/log1p_mean_counts/.zarray | 21 +------ .../var/log1p_mean_counts/.zattrs | 5 +- .../example.zarr/var/log1p_mean_counts/0 | Bin 341 -> 314 bytes .../var/log1p_total_counts/.zarray | 21 +------ .../var/log1p_total_counts/.zattrs | 5 +- .../example.zarr/var/log1p_total_counts/0 | Bin 341 -> 319 bytes .../example.zarr/var/mean_counts/.zarray | 21 +------ .../example.zarr/var/mean_counts/.zattrs | 5 +- inst/extdata/example.zarr/var/mean_counts/0 | Bin 407 -> 320 bytes inst/extdata/example.zarr/var/means/.zarray | 21 +------ inst/extdata/example.zarr/var/means/.zattrs | 5 +- inst/extdata/example.zarr/var/means/0 | Bin 743 -> 810 bytes .../var/n_cells_by_counts/.zarray | 21 +------ .../var/n_cells_by_counts/.zattrs | 5 +- .../example.zarr/var/n_cells_by_counts/0 | Bin 142 -> 103 bytes .../var/pct_dropout_by_counts/.zarray | 21 +------ .../var/pct_dropout_by_counts/.zattrs | 5 +- .../example.zarr/var/pct_dropout_by_counts/0 | Bin 315 -> 220 bytes .../example.zarr/var/total_counts/.zarray | 21 +------ .../example.zarr/var/total_counts/.zattrs | 5 +- inst/extdata/example.zarr/var/total_counts/0 | Bin 145 -> 169 bytes inst/extdata/example.zarr/varm/.zattrs | 5 +- inst/extdata/example.zarr/varm/.zgroup | 4 +- inst/extdata/example.zarr/varm/PCs/.zarray | 23 +------- inst/extdata/example.zarr/varm/PCs/.zattrs | 5 +- inst/extdata/example.zarr/varm/PCs/0.0 | Bin 7702 -> 8528 bytes inst/extdata/example.zarr/varp/.zattrs | 5 +- inst/extdata/example.zarr/varp/.zgroup | 4 +- inst/extdata/example2.zarr/.zattrs | 1 - inst/extdata/example2.zarr/X/.zattrs | 1 - inst/extdata/example2.zarr/X/data/.zarray | 1 - inst/extdata/example2.zarr/X/data/0 | Bin 4588 -> 0 bytes inst/extdata/example2.zarr/X/indices/.zarray | 1 - inst/extdata/example2.zarr/X/indices/0 | Bin 4737 -> 0 bytes inst/extdata/example2.zarr/X/indptr/.zarray | 1 - inst/extdata/example2.zarr/X/indptr/0 | Bin 157 -> 0 bytes inst/extdata/example2.zarr/layers/.zattrs | 1 - .../example2.zarr/layers/counts/.zattrs | 1 - .../example2.zarr/layers/counts/data/.zarray | 1 - .../example2.zarr/layers/counts/data/0 | Bin 3117 -> 0 bytes .../layers/counts/indices/.zarray | 1 - .../example2.zarr/layers/counts/indices/0 | Bin 4737 -> 0 bytes .../layers/counts/indptr/.zarray | 1 - .../example2.zarr/layers/counts/indptr/0 | Bin 157 -> 0 bytes .../example2.zarr/layers/csc_counts/.zattrs | 1 - .../layers/csc_counts/data/.zarray | 1 - .../example2.zarr/layers/csc_counts/data/0 | Bin 3132 -> 0 bytes .../layers/csc_counts/indices/.zarray | 1 - .../example2.zarr/layers/csc_counts/indices/0 | Bin 4185 -> 0 bytes .../layers/csc_counts/indptr/.zarray | 1 - .../example2.zarr/layers/csc_counts/indptr/0 | Bin 180 -> 0 bytes .../example2.zarr/layers/dense_X/.zarray | 1 - inst/extdata/example2.zarr/layers/dense_X/0.0 | Bin 8394 -> 0 bytes .../example2.zarr/layers/dense_counts/.zarray | 1 - .../example2.zarr/layers/dense_counts/0.0 | Bin 2695 -> 0 bytes inst/extdata/example2.zarr/obs/.zattrs | 1 - inst/extdata/example2.zarr/obs/BoolNA/.zattrs | 1 - inst/extdata/example2.zarr/obs/BoolNA/.zgroup | 1 - .../example2.zarr/obs/BoolNA/mask/.zarray | 1 - inst/extdata/example2.zarr/obs/BoolNA/mask/0 | Bin 18 -> 0 bytes .../example2.zarr/obs/BoolNA/values/.zarray | 1 - .../extdata/example2.zarr/obs/BoolNA/values/0 | Bin 18 -> 0 bytes inst/extdata/example2.zarr/obs/Float/.zarray | 1 - inst/extdata/example2.zarr/obs/Float/0 | Bin 25 -> 0 bytes .../extdata/example2.zarr/obs/FloatNA/.zarray | 1 - inst/extdata/example2.zarr/obs/FloatNA/0 | Bin 33 -> 0 bytes inst/extdata/example2.zarr/obs/Int/.zarray | 1 - inst/extdata/example2.zarr/obs/Int/0 | Bin 81 -> 0 bytes inst/extdata/example2.zarr/obs/IntNA/.zattrs | 1 - inst/extdata/example2.zarr/obs/IntNA/.zgroup | 1 - .../example2.zarr/obs/IntNA/mask/.zarray | 1 - inst/extdata/example2.zarr/obs/IntNA/mask/0 | Bin 17 -> 0 bytes .../example2.zarr/obs/IntNA/values/.zarray | 1 - inst/extdata/example2.zarr/obs/IntNA/values/0 | Bin 48 -> 0 bytes inst/extdata/example2.zarr/obs/_index/.zarray | 1 - inst/extdata/example2.zarr/obs/_index/0 | Bin 126 -> 0 bytes inst/extdata/example2.zarr/obs/leiden/.zattrs | 1 - inst/extdata/example2.zarr/obs/leiden/.zgroup | 1 - .../obs/leiden/categories/.zarray | 1 - .../example2.zarr/obs/leiden/categories/0 | Bin 43 -> 0 bytes .../example2.zarr/obs/leiden/codes/.zarray | 1 - inst/extdata/example2.zarr/obs/leiden/codes/0 | Bin 53 -> 0 bytes .../obs/log1p_n_genes_by_counts/.zarray | 1 - .../obs/log1p_n_genes_by_counts/0 | Bin 199 -> 0 bytes .../obs/log1p_total_counts/.zarray | 1 - .../example2.zarr/obs/log1p_total_counts/0 | Bin 220 -> 0 bytes .../obs/n_genes_by_counts/.zarray | 1 - .../example2.zarr/obs/n_genes_by_counts/0 | Bin 72 -> 0 bytes .../example2.zarr/obs/total_counts/.zarray | 1 - inst/extdata/example2.zarr/obs/total_counts/0 | Bin 153 -> 0 bytes inst/extdata/example2.zarr/obsm/.zattrs | 1 - inst/extdata/example2.zarr/obsm/.zgroup | 1 - inst/extdata/example2.zarr/obsm/X_pca/.zarray | 1 - inst/extdata/example2.zarr/obsm/X_pca/0.0 | Bin 8460 -> 0 bytes .../extdata/example2.zarr/obsm/X_umap/.zarray | 1 - inst/extdata/example2.zarr/obsm/X_umap/0.0 | Bin 544 -> 0 bytes inst/extdata/example2.zarr/obsp/.zattrs | 1 - inst/extdata/example2.zarr/obsp/.zgroup | 1 - .../example2.zarr/obsp/connectivities/.zattrs | 1 - .../example2.zarr/obsp/connectivities/.zgroup | 1 - .../obsp/connectivities/data/.zarray | 1 - .../example2.zarr/obsp/connectivities/data/0 | Bin 3072 -> 0 bytes .../obsp/connectivities/indices/.zarray | 1 - .../obsp/connectivities/indices/0 | Bin 961 -> 0 bytes .../obsp/connectivities/indptr/.zarray | 1 - .../obsp/connectivities/indptr/0 | Bin 154 -> 0 bytes .../example2.zarr/obsp/distances/.zattrs | 1 - .../example2.zarr/obsp/distances/.zgroup | 1 - .../example2.zarr/obsp/distances/data/.zarray | 1 - .../example2.zarr/obsp/distances/data/0 | Bin 2406 -> 0 bytes .../obsp/distances/indices/.zarray | 1 - .../example2.zarr/obsp/distances/indices/0 | Bin 693 -> 0 bytes .../obsp/distances/indptr/.zarray | 1 - .../example2.zarr/obsp/distances/indptr/0 | Bin 159 -> 0 bytes inst/extdata/example2.zarr/uns/.zattrs | 1 - inst/extdata/example2.zarr/uns/.zgroup | 1 - inst/extdata/example2.zarr/uns/Bool/.zarray | 1 - inst/extdata/example2.zarr/uns/Bool/0 | Bin 12 -> 0 bytes inst/extdata/example2.zarr/uns/BoolNA/.zattrs | 1 - inst/extdata/example2.zarr/uns/BoolNA/.zgroup | 1 - .../example2.zarr/uns/BoolNA/mask/.zarray | 1 - inst/extdata/example2.zarr/uns/BoolNA/mask/0 | Bin 12 -> 0 bytes .../example2.zarr/uns/BoolNA/values/.zarray | 1 - .../extdata/example2.zarr/uns/BoolNA/values/0 | Bin 12 -> 0 bytes .../example2.zarr/uns/Category/.zattrs | 1 - .../example2.zarr/uns/Category/.zgroup | 1 - .../uns/Category/categories/.zarray | 1 - .../example2.zarr/uns/Category/categories/0 | Bin 23 -> 0 bytes .../example2.zarr/uns/Category/codes/.zarray | 1 - .../example2.zarr/uns/Category/codes/0 | Bin 26 -> 0 bytes .../example2.zarr/uns/DataFrameEmpty/.zattrs | 1 - .../example2.zarr/uns/DataFrameEmpty/.zgroup | 1 - .../uns/DataFrameEmpty/_index/.zarray | 1 - .../example2.zarr/uns/DataFrameEmpty/_index/0 | Bin 126 -> 0 bytes inst/extdata/example2.zarr/uns/Int/.zarray | 1 - inst/extdata/example2.zarr/uns/Int/0 | Bin 29 -> 0 bytes inst/extdata/example2.zarr/uns/IntNA/.zattrs | 1 - inst/extdata/example2.zarr/uns/IntNA/.zgroup | 1 - .../example2.zarr/uns/IntNA/mask/.zarray | 1 - inst/extdata/example2.zarr/uns/IntNA/mask/0 | Bin 12 -> 0 bytes .../example2.zarr/uns/IntNA/values/.zarray | 1 - inst/extdata/example2.zarr/uns/IntNA/values/0 | Bin 29 -> 0 bytes .../example2.zarr/uns/IntScalar/.zarray | 1 - .../example2.zarr/uns/IntScalar/.zattrs | 1 - inst/extdata/example2.zarr/uns/IntScalar/0 | Bin 17 -> 0 bytes .../example2.zarr/uns/Sparse1D/.zattrs | 1 - .../example2.zarr/uns/Sparse1D/.zgroup | 1 - .../example2.zarr/uns/Sparse1D/data/.zarray | 1 - .../extdata/example2.zarr/uns/Sparse1D/data/0 | Bin 33 -> 0 bytes .../uns/Sparse1D/indices/.zarray | 1 - .../example2.zarr/uns/Sparse1D/indices/0 | Bin 17 -> 0 bytes .../example2.zarr/uns/Sparse1D/indptr/.zarray | 1 - .../example2.zarr/uns/Sparse1D/indptr/0 | Bin 36 -> 0 bytes inst/extdata/example2.zarr/uns/String/.zarray | 1 - inst/extdata/example2.zarr/uns/String/0 | Bin 50 -> 0 bytes .../example2.zarr/uns/String2D/.zarray | 1 - inst/extdata/example2.zarr/uns/String2D/0.0 | Bin 89 -> 0 bytes .../example2.zarr/uns/StringScalar/.zarray | 1 - .../example2.zarr/uns/StringScalar/.zattrs | 1 - inst/extdata/example2.zarr/uns/StringScalar/0 | Bin 25 -> 0 bytes inst/extdata/example2.zarr/uns/hvg/.zattrs | 1 - inst/extdata/example2.zarr/uns/hvg/.zgroup | 1 - .../example2.zarr/uns/hvg/flavor/.zarray | 1 - .../example2.zarr/uns/hvg/flavor/.zattrs | 1 - inst/extdata/example2.zarr/uns/hvg/flavor/0 | Bin 23 -> 0 bytes inst/extdata/example2.zarr/uns/leiden/.zattrs | 1 - inst/extdata/example2.zarr/uns/leiden/.zgroup | 1 - .../example2.zarr/uns/leiden/params/.zattrs | 1 - .../example2.zarr/uns/leiden/params/.zgroup | 1 - .../uns/leiden/params/n_iterations/.zarray | 1 - .../uns/leiden/params/n_iterations/.zattrs | 1 - .../uns/leiden/params/n_iterations/0 | Bin 17 -> 0 bytes .../uns/leiden/params/random_state/.zarray | 1 - .../uns/leiden/params/random_state/.zattrs | 1 - .../uns/leiden/params/random_state/0 | Bin 17 -> 0 bytes .../uns/leiden/params/resolution/.zarray | 1 - .../uns/leiden/params/resolution/.zattrs | 1 - .../uns/leiden/params/resolution/0 | Bin 17 -> 0 bytes inst/extdata/example2.zarr/uns/log1p/.zattrs | 1 - inst/extdata/example2.zarr/uns/log1p/.zgroup | 1 - .../example2.zarr/uns/neighbors/.zattrs | 1 - .../example2.zarr/uns/neighbors/.zgroup | 1 - .../uns/neighbors/connectivities_key/.zarray | 1 - .../uns/neighbors/connectivities_key/.zattrs | 1 - .../uns/neighbors/connectivities_key/0 | Bin 31 -> 0 bytes .../uns/neighbors/distances_key/.zarray | 1 - .../uns/neighbors/distances_key/.zattrs | 1 - .../uns/neighbors/distances_key/0 | Bin 26 -> 0 bytes .../uns/neighbors/params/.zattrs | 1 - .../uns/neighbors/params/.zgroup | 1 - .../uns/neighbors/params/method/.zarray | 1 - .../uns/neighbors/params/method/.zattrs | 1 - .../uns/neighbors/params/method/0 | Bin 21 -> 0 bytes .../uns/neighbors/params/metric/.zarray | 1 - .../uns/neighbors/params/metric/.zattrs | 1 - .../uns/neighbors/params/metric/0 | Bin 26 -> 0 bytes .../uns/neighbors/params/n_neighbors/.zarray | 1 - .../uns/neighbors/params/n_neighbors/.zattrs | 1 - .../uns/neighbors/params/n_neighbors/0 | Bin 17 -> 0 bytes .../uns/neighbors/params/random_state/.zarray | 1 - .../uns/neighbors/params/random_state/.zattrs | 1 - .../uns/neighbors/params/random_state/0 | Bin 17 -> 0 bytes inst/extdata/example2.zarr/uns/pca/.zattrs | 1 - inst/extdata/example2.zarr/uns/pca/.zgroup | 1 - .../example2.zarr/uns/pca/params/.zattrs | 1 - .../example2.zarr/uns/pca/params/.zgroup | 1 - .../pca/params/use_highly_variable/.zarray | 1 - .../pca/params/use_highly_variable/.zattrs | 1 - .../uns/pca/params/use_highly_variable/0 | Bin 10 -> 0 bytes .../uns/pca/params/zero_center/.zarray | 1 - .../uns/pca/params/zero_center/.zattrs | 1 - .../uns/pca/params/zero_center/0 | Bin 10 -> 0 bytes .../example2.zarr/uns/pca/variance/.zarray | 1 - inst/extdata/example2.zarr/uns/pca/variance/0 | Bin 246 -> 0 bytes .../uns/pca/variance_ratio/.zarray | 1 - .../example2.zarr/uns/pca/variance_ratio/0 | Bin 239 -> 0 bytes .../uns/rank_genes_groups/.zattrs | 1 - .../uns/rank_genes_groups/.zgroup | 1 - .../rank_genes_groups/logfoldchanges/.zattrs | 1 - .../rank_genes_groups/logfoldchanges/.zgroup | 1 - .../uns/rank_genes_groups/names/.zattrs | 1 - .../uns/rank_genes_groups/names/.zgroup | 1 - .../uns/rank_genes_groups/names/2/.zattrs | 1 - .../uns/rank_genes_groups/names/3/.zattrs | 1 - .../uns/rank_genes_groups/names/4/.zattrs | 1 - .../uns/rank_genes_groups/names/5/.zattrs | 1 - .../uns/rank_genes_groups/params/.zattrs | 1 - .../uns/rank_genes_groups/params/.zgroup | 1 - .../params/corr_method/.zarray | 1 - .../params/corr_method/.zattrs | 1 - .../rank_genes_groups/params/corr_method/0 | Bin 35 -> 0 bytes .../rank_genes_groups/params/groupby/.zarray | 1 - .../rank_genes_groups/params/groupby/.zattrs | 1 - .../uns/rank_genes_groups/params/groupby/0 | Bin 23 -> 0 bytes .../rank_genes_groups/params/method/.zarray | 1 - .../rank_genes_groups/params/method/.zattrs | 1 - .../uns/rank_genes_groups/params/method/0 | Bin 23 -> 0 bytes .../params/reference/.zarray | 1 - .../params/reference/.zattrs | 1 - .../uns/rank_genes_groups/params/reference/0 | Bin 21 -> 0 bytes .../rank_genes_groups/params/use_raw/.zarray | 1 - .../rank_genes_groups/params/use_raw/.zattrs | 1 - .../uns/rank_genes_groups/params/use_raw/0 | Bin 10 -> 0 bytes .../uns/rank_genes_groups/pvals/.zattrs | 1 - .../uns/rank_genes_groups/pvals/.zgroup | 1 - .../uns/rank_genes_groups/pvals/2/.zattrs | 1 - .../uns/rank_genes_groups/pvals/3/.zattrs | 1 - .../uns/rank_genes_groups/pvals/4/.zattrs | 1 - .../uns/rank_genes_groups/pvals/5/.zattrs | 1 - .../uns/rank_genes_groups/pvals_adj/.zattrs | 1 - .../uns/rank_genes_groups/pvals_adj/.zgroup | 1 - .../uns/rank_genes_groups/pvals_adj/0/.zattrs | 1 - .../uns/rank_genes_groups/pvals_adj/1/.zattrs | 1 - .../uns/rank_genes_groups/pvals_adj/2/.zattrs | 1 - .../uns/rank_genes_groups/pvals_adj/3/.zattrs | 1 - .../uns/rank_genes_groups/pvals_adj/4/.zattrs | 1 - .../uns/rank_genes_groups/pvals_adj/5/.zattrs | 1 - .../uns/rank_genes_groups/scores/.zattrs | 1 - .../uns/rank_genes_groups/scores/.zgroup | 1 - .../uns/rank_genes_groups/scores/0/.zattrs | 1 - .../uns/rank_genes_groups/scores/1/.zattrs | 1 - .../uns/rank_genes_groups/scores/2/.zattrs | 1 - .../uns/rank_genes_groups/scores/3/.zattrs | 1 - .../uns/rank_genes_groups/scores/4/.zattrs | 1 - .../uns/rank_genes_groups/scores/5/.zattrs | 1 - inst/extdata/example2.zarr/uns/umap/.zattrs | 1 - inst/extdata/example2.zarr/uns/umap/.zgroup | 1 - .../example2.zarr/uns/umap/params/.zattrs | 1 - .../example2.zarr/uns/umap/params/.zgroup | 1 - .../example2.zarr/uns/umap/params/a/.zarray | 1 - .../example2.zarr/uns/umap/params/a/.zattrs | 1 - .../extdata/example2.zarr/uns/umap/params/a/0 | Bin 17 -> 0 bytes .../example2.zarr/uns/umap/params/b/.zarray | 1 - .../example2.zarr/uns/umap/params/b/.zattrs | 1 - .../extdata/example2.zarr/uns/umap/params/b/0 | Bin 17 -> 0 bytes inst/extdata/example2.zarr/var/.zattrs | 1 - inst/extdata/example2.zarr/var/.zgroup | 1 - inst/extdata/example2.zarr/var/String/.zarray | 1 - inst/extdata/example2.zarr/var/String/.zattrs | 1 - inst/extdata/example2.zarr/var/String/0 | Bin 127 -> 0 bytes inst/extdata/example2.zarr/var/_index/.zarray | 1 - inst/extdata/example2.zarr/var/_index/.zattrs | 1 - inst/extdata/example2.zarr/var/_index/0 | Bin 115 -> 0 bytes .../example2.zarr/var/dispersions/.zarray | 1 - .../example2.zarr/var/dispersions/.zattrs | 1 - inst/extdata/example2.zarr/var/dispersions/0 | Bin 810 -> 0 bytes .../var/dispersions_norm/.zarray | 1 - .../var/dispersions_norm/.zattrs | 1 - .../example2.zarr/var/dispersions_norm/0 | Bin 517 -> 0 bytes .../example2.zarr/var/highly_variable/.zarray | 1 - .../example2.zarr/var/highly_variable/.zattrs | 1 - .../example2.zarr/var/highly_variable/0 | Bin 70 -> 0 bytes .../var/log1p_mean_counts/.zarray | 1 - .../var/log1p_mean_counts/.zattrs | 1 - .../example2.zarr/var/log1p_mean_counts/0 | Bin 314 -> 0 bytes .../var/log1p_total_counts/.zarray | 1 - .../var/log1p_total_counts/.zattrs | 1 - .../example2.zarr/var/log1p_total_counts/0 | Bin 319 -> 0 bytes .../example2.zarr/var/mean_counts/.zarray | 1 - .../example2.zarr/var/mean_counts/.zattrs | 1 - inst/extdata/example2.zarr/var/mean_counts/0 | Bin 320 -> 0 bytes inst/extdata/example2.zarr/var/means/.zarray | 1 - inst/extdata/example2.zarr/var/means/.zattrs | 1 - inst/extdata/example2.zarr/var/means/0 | Bin 810 -> 0 bytes .../var/n_cells_by_counts/.zarray | 1 - .../var/n_cells_by_counts/.zattrs | 1 - .../example2.zarr/var/n_cells_by_counts/0 | Bin 103 -> 0 bytes .../var/pct_dropout_by_counts/.zarray | 1 - .../var/pct_dropout_by_counts/.zattrs | 1 - .../example2.zarr/var/pct_dropout_by_counts/0 | Bin 220 -> 0 bytes .../example2.zarr/var/total_counts/.zarray | 1 - .../example2.zarr/var/total_counts/.zattrs | 1 - inst/extdata/example2.zarr/var/total_counts/0 | Bin 169 -> 0 bytes inst/extdata/example2.zarr/varm/.zattrs | 1 - inst/extdata/example2.zarr/varm/.zgroup | 1 - inst/extdata/example2.zarr/varm/PCs/.zarray | 1 - inst/extdata/example2.zarr/varm/PCs/.zattrs | 1 - inst/extdata/example2.zarr/varm/PCs/0.0 | Bin 8528 -> 0 bytes inst/extdata/example2.zarr/varp/.zattrs | 1 - inst/extdata/example2.zarr/varp/.zgroup | 1 - tests/testthat/test-Zarr-read.R | 9 +-- tests/testthat/test-Zarr-write.R | 8 +-- tests/testthat/test-ZarrAnnData.R | 54 +++++++++++------- tests/testthat/test-h5ad-zarr.R | 9 ++- 722 files changed, 269 insertions(+), 2640 deletions(-) rename inst/extdata/{example2.zarr => example.zarr}/obs/Bool/.zarray (100%) delete mode 100644 inst/extdata/example.zarr/obs/Bool/.zgroup rename inst/extdata/{example2.zarr => example.zarr}/obs/Bool/0 (100%) delete mode 100644 inst/extdata/example.zarr/obs/Bool/mask/.zarray delete mode 100644 inst/extdata/example.zarr/obs/Bool/mask/.zattrs delete mode 100644 inst/extdata/example.zarr/obs/Bool/mask/0 delete mode 100644 inst/extdata/example.zarr/obs/Bool/values/.zarray delete mode 100644 inst/extdata/example.zarr/obs/Bool/values/.zattrs delete mode 100644 inst/extdata/example.zarr/obs/Bool/values/0 delete mode 100644 inst/extdata/example.zarr/obs/BoolNA/mask/.zattrs delete mode 100644 inst/extdata/example.zarr/obs/BoolNA/values/.zattrs delete mode 100644 inst/extdata/example.zarr/obs/IntNA/mask/.zattrs delete mode 100644 inst/extdata/example.zarr/obs/IntNA/values/.zattrs delete mode 100644 inst/extdata/example.zarr/obs/leiden/categories/.zattrs delete mode 100644 inst/extdata/example.zarr/obs/leiden/codes/.zattrs rename inst/extdata/{example2.zarr => example.zarr}/obs/leiden/ordered/.zarray (100%) rename inst/extdata/{example2.zarr => example.zarr}/obs/leiden/ordered/0 (100%) delete mode 100644 inst/extdata/example.zarr/uns/BoolNA/mask/.zattrs delete mode 100644 inst/extdata/example.zarr/uns/BoolNA/values/.zattrs delete mode 100644 inst/extdata/example.zarr/uns/Category/categories/.zattrs delete mode 100644 inst/extdata/example.zarr/uns/Category/codes/.zattrs rename inst/extdata/{example2.zarr => example.zarr}/uns/Category/ordered/.zarray (100%) rename inst/extdata/{example2.zarr => example.zarr}/uns/Category/ordered/0 (100%) delete mode 100644 inst/extdata/example.zarr/uns/IntNA/mask/.zattrs delete mode 100644 inst/extdata/example.zarr/uns/IntNA/values/.zattrs delete mode 100644 inst/extdata/example.zarr/uns/rank_genes_groups/logfoldchanges/.zarray rename inst/extdata/{example2.zarr/X => example.zarr/uns/rank_genes_groups/logfoldchanges}/.zgroup (100%) delete mode 100644 inst/extdata/example.zarr/uns/rank_genes_groups/logfoldchanges/0 rename inst/extdata/{example2.zarr => example.zarr}/uns/rank_genes_groups/logfoldchanges/0/.zarray (100%) rename inst/extdata/{example2.zarr/layers/dense_X => example.zarr/uns/rank_genes_groups/logfoldchanges/0}/.zattrs (100%) rename inst/extdata/{example2.zarr => example.zarr}/uns/rank_genes_groups/logfoldchanges/0/0 (100%) rename inst/extdata/{example2.zarr => example.zarr}/uns/rank_genes_groups/logfoldchanges/1/.zarray (100%) rename inst/extdata/{example2.zarr/layers/dense_counts => example.zarr/uns/rank_genes_groups/logfoldchanges/1}/.zattrs (100%) rename inst/extdata/{example2.zarr => example.zarr}/uns/rank_genes_groups/logfoldchanges/1/0 (100%) rename inst/extdata/{example2.zarr => example.zarr}/uns/rank_genes_groups/logfoldchanges/2/.zarray (100%) rename inst/extdata/{example2.zarr/obs/Bool => example.zarr/uns/rank_genes_groups/logfoldchanges/2}/.zattrs (100%) rename inst/extdata/{example2.zarr => example.zarr}/uns/rank_genes_groups/logfoldchanges/2/0 (100%) rename inst/extdata/{example2.zarr => example.zarr}/uns/rank_genes_groups/logfoldchanges/3/.zarray (100%) rename inst/extdata/{example2.zarr/obs/Float => example.zarr/uns/rank_genes_groups/logfoldchanges/3}/.zattrs (100%) rename inst/extdata/{example2.zarr => example.zarr}/uns/rank_genes_groups/logfoldchanges/3/0 (100%) rename inst/extdata/{example2.zarr => example.zarr}/uns/rank_genes_groups/logfoldchanges/4/.zarray (100%) rename inst/extdata/{example2.zarr/obs/FloatNA => example.zarr/uns/rank_genes_groups/logfoldchanges/4}/.zattrs (100%) rename inst/extdata/{example2.zarr => example.zarr}/uns/rank_genes_groups/logfoldchanges/4/0 (100%) rename inst/extdata/{example2.zarr => example.zarr}/uns/rank_genes_groups/logfoldchanges/5/.zarray (100%) rename inst/extdata/{example2.zarr/obs/Int => example.zarr/uns/rank_genes_groups/logfoldchanges/5}/.zattrs (100%) rename inst/extdata/{example2.zarr => example.zarr}/uns/rank_genes_groups/logfoldchanges/5/0 (100%) delete mode 100644 inst/extdata/example.zarr/uns/rank_genes_groups/names/.zarray rename inst/extdata/{example2.zarr/layers => example.zarr/uns/rank_genes_groups/names}/.zgroup (100%) delete mode 100644 inst/extdata/example.zarr/uns/rank_genes_groups/names/0 rename inst/extdata/{example2.zarr => example.zarr}/uns/rank_genes_groups/names/0/.zarray (100%) rename inst/extdata/{example2.zarr/obs/_index => example.zarr/uns/rank_genes_groups/names/0}/.zattrs (100%) rename inst/extdata/{example2.zarr => example.zarr}/uns/rank_genes_groups/names/0/0 (100%) rename inst/extdata/{example2.zarr => example.zarr}/uns/rank_genes_groups/names/1/.zarray (100%) rename inst/extdata/{example2.zarr/uns/DataFrameEmpty/_index => example.zarr/uns/rank_genes_groups/names/1}/.zattrs (100%) rename inst/extdata/{example2.zarr => example.zarr}/uns/rank_genes_groups/names/1/0 (100%) rename inst/extdata/{example2.zarr => example.zarr}/uns/rank_genes_groups/names/2/.zarray (100%) rename inst/extdata/{example2.zarr/uns/String => example.zarr/uns/rank_genes_groups/names/2}/.zattrs (100%) rename inst/extdata/{example2.zarr => example.zarr}/uns/rank_genes_groups/names/2/0 (100%) rename inst/extdata/{example2.zarr => example.zarr}/uns/rank_genes_groups/names/3/.zarray (100%) rename inst/extdata/{example2.zarr/uns/String2D => example.zarr/uns/rank_genes_groups/names/3}/.zattrs (100%) rename inst/extdata/{example2.zarr => example.zarr}/uns/rank_genes_groups/names/3/0 (100%) rename inst/extdata/{example2.zarr => example.zarr}/uns/rank_genes_groups/names/4/.zarray (100%) rename inst/extdata/{example2.zarr/uns/rank_genes_groups/names/0 => example.zarr/uns/rank_genes_groups/names/4}/.zattrs (100%) rename inst/extdata/{example2.zarr => example.zarr}/uns/rank_genes_groups/names/4/0 (100%) rename inst/extdata/{example2.zarr => example.zarr}/uns/rank_genes_groups/names/5/.zarray (100%) rename inst/extdata/{example2.zarr/uns/rank_genes_groups/names/1 => example.zarr/uns/rank_genes_groups/names/5}/.zattrs (100%) rename inst/extdata/{example2.zarr => example.zarr}/uns/rank_genes_groups/names/5/0 (100%) delete mode 100644 inst/extdata/example.zarr/uns/rank_genes_groups/pvals/.zarray rename inst/extdata/{example2.zarr/layers/counts => example.zarr/uns/rank_genes_groups/pvals}/.zgroup (100%) delete mode 100644 inst/extdata/example.zarr/uns/rank_genes_groups/pvals/0 rename inst/extdata/{example2.zarr => example.zarr}/uns/rank_genes_groups/pvals/0/.zarray (100%) rename inst/extdata/{example2.zarr/obs/log1p_n_genes_by_counts => example.zarr/uns/rank_genes_groups/pvals/0}/.zattrs (100%) rename inst/extdata/{example2.zarr => example.zarr}/uns/rank_genes_groups/pvals/0/0 (100%) rename inst/extdata/{example2.zarr => example.zarr}/uns/rank_genes_groups/pvals/1/.zarray (100%) rename inst/extdata/{example2.zarr/obs/log1p_total_counts => example.zarr/uns/rank_genes_groups/pvals/1}/.zattrs (100%) rename inst/extdata/{example2.zarr => example.zarr}/uns/rank_genes_groups/pvals/1/0 (100%) rename inst/extdata/{example2.zarr => example.zarr}/uns/rank_genes_groups/pvals/2/.zarray (100%) rename inst/extdata/{example2.zarr/obs/n_genes_by_counts => example.zarr/uns/rank_genes_groups/pvals/2}/.zattrs (100%) rename inst/extdata/{example2.zarr => example.zarr}/uns/rank_genes_groups/pvals/2/0 (100%) rename inst/extdata/{example2.zarr => example.zarr}/uns/rank_genes_groups/pvals/3/.zarray (100%) rename inst/extdata/{example2.zarr/obs/total_counts => example.zarr/uns/rank_genes_groups/pvals/3}/.zattrs (100%) rename inst/extdata/{example2.zarr => example.zarr}/uns/rank_genes_groups/pvals/3/0 (100%) rename inst/extdata/{example2.zarr => example.zarr}/uns/rank_genes_groups/pvals/4/.zarray (100%) rename inst/extdata/{example2.zarr/obsm/X_pca => example.zarr/uns/rank_genes_groups/pvals/4}/.zattrs (100%) rename inst/extdata/{example2.zarr => example.zarr}/uns/rank_genes_groups/pvals/4/0 (100%) rename inst/extdata/{example2.zarr => example.zarr}/uns/rank_genes_groups/pvals/5/.zarray (100%) rename inst/extdata/{example2.zarr/obsm/X_umap => example.zarr/uns/rank_genes_groups/pvals/5}/.zattrs (100%) rename inst/extdata/{example2.zarr => example.zarr}/uns/rank_genes_groups/pvals/5/0 (100%) delete mode 100644 inst/extdata/example.zarr/uns/rank_genes_groups/pvals_adj/.zarray rename inst/extdata/{example2.zarr/layers/csc_counts => example.zarr/uns/rank_genes_groups/pvals_adj}/.zgroup (100%) delete mode 100644 inst/extdata/example.zarr/uns/rank_genes_groups/pvals_adj/0 rename inst/extdata/{example2.zarr => example.zarr}/uns/rank_genes_groups/pvals_adj/0/.zarray (100%) rename inst/extdata/{example2.zarr/uns/Bool => example.zarr/uns/rank_genes_groups/pvals_adj/0}/.zattrs (100%) rename inst/extdata/{example2.zarr => example.zarr}/uns/rank_genes_groups/pvals_adj/0/0 (100%) rename inst/extdata/{example2.zarr => example.zarr}/uns/rank_genes_groups/pvals_adj/1/.zarray (100%) rename inst/extdata/{example2.zarr/uns/Int => example.zarr/uns/rank_genes_groups/pvals_adj/1}/.zattrs (100%) rename inst/extdata/{example2.zarr => example.zarr}/uns/rank_genes_groups/pvals_adj/1/0 (100%) rename inst/extdata/{example2.zarr => example.zarr}/uns/rank_genes_groups/pvals_adj/2/.zarray (100%) rename inst/extdata/{example2.zarr/uns/pca/variance => example.zarr/uns/rank_genes_groups/pvals_adj/2}/.zattrs (100%) rename inst/extdata/{example2.zarr => example.zarr}/uns/rank_genes_groups/pvals_adj/2/0 (100%) rename inst/extdata/{example2.zarr => example.zarr}/uns/rank_genes_groups/pvals_adj/3/.zarray (100%) rename inst/extdata/{example2.zarr/uns/pca/variance_ratio => example.zarr/uns/rank_genes_groups/pvals_adj/3}/.zattrs (100%) rename inst/extdata/{example2.zarr => example.zarr}/uns/rank_genes_groups/pvals_adj/3/0 (100%) rename inst/extdata/{example2.zarr => example.zarr}/uns/rank_genes_groups/pvals_adj/4/.zarray (100%) rename inst/extdata/{example2.zarr/uns/rank_genes_groups/logfoldchanges/0 => example.zarr/uns/rank_genes_groups/pvals_adj/4}/.zattrs (100%) rename inst/extdata/{example2.zarr => example.zarr}/uns/rank_genes_groups/pvals_adj/4/0 (100%) rename inst/extdata/{example2.zarr => example.zarr}/uns/rank_genes_groups/pvals_adj/5/.zarray (100%) rename inst/extdata/{example2.zarr/uns/rank_genes_groups/logfoldchanges/1 => example.zarr/uns/rank_genes_groups/pvals_adj/5}/.zattrs (100%) rename inst/extdata/{example2.zarr => example.zarr}/uns/rank_genes_groups/pvals_adj/5/0 (100%) delete mode 100644 inst/extdata/example.zarr/uns/rank_genes_groups/scores/.zarray rename inst/extdata/{example2.zarr/obs => example.zarr/uns/rank_genes_groups/scores}/.zgroup (100%) delete mode 100644 inst/extdata/example.zarr/uns/rank_genes_groups/scores/0 rename inst/extdata/{example2.zarr => example.zarr}/uns/rank_genes_groups/scores/0/.zarray (100%) rename inst/extdata/{example2.zarr/uns/rank_genes_groups/logfoldchanges/2 => example.zarr/uns/rank_genes_groups/scores/0}/.zattrs (100%) rename inst/extdata/{example2.zarr => example.zarr}/uns/rank_genes_groups/scores/0/0 (100%) rename inst/extdata/{example2.zarr => example.zarr}/uns/rank_genes_groups/scores/1/.zarray (100%) rename inst/extdata/{example2.zarr/uns/rank_genes_groups/logfoldchanges/3 => example.zarr/uns/rank_genes_groups/scores/1}/.zattrs (100%) rename inst/extdata/{example2.zarr => example.zarr}/uns/rank_genes_groups/scores/1/0 (100%) rename inst/extdata/{example2.zarr => example.zarr}/uns/rank_genes_groups/scores/2/.zarray (100%) rename inst/extdata/{example2.zarr/uns/rank_genes_groups/logfoldchanges/4 => example.zarr/uns/rank_genes_groups/scores/2}/.zattrs (100%) rename inst/extdata/{example2.zarr => example.zarr}/uns/rank_genes_groups/scores/2/0 (100%) rename inst/extdata/{example2.zarr => example.zarr}/uns/rank_genes_groups/scores/3/.zarray (100%) rename inst/extdata/{example2.zarr/uns/rank_genes_groups/logfoldchanges/5 => example.zarr/uns/rank_genes_groups/scores/3}/.zattrs (100%) rename inst/extdata/{example2.zarr => example.zarr}/uns/rank_genes_groups/scores/3/0 (100%) rename inst/extdata/{example2.zarr => example.zarr}/uns/rank_genes_groups/scores/4/.zarray (100%) rename inst/extdata/{example2.zarr/uns/rank_genes_groups/pvals/0 => example.zarr/uns/rank_genes_groups/scores/4}/.zattrs (100%) rename inst/extdata/{example2.zarr => example.zarr}/uns/rank_genes_groups/scores/4/0 (100%) rename inst/extdata/{example2.zarr => example.zarr}/uns/rank_genes_groups/scores/5/.zarray (100%) rename inst/extdata/{example2.zarr/uns/rank_genes_groups/pvals/1 => example.zarr/uns/rank_genes_groups/scores/5}/.zattrs (100%) rename inst/extdata/{example2.zarr => example.zarr}/uns/rank_genes_groups/scores/5/0 (100%) delete mode 100644 inst/extdata/example2.zarr/.zattrs delete mode 100644 inst/extdata/example2.zarr/X/.zattrs delete mode 100644 inst/extdata/example2.zarr/X/data/.zarray delete mode 100644 inst/extdata/example2.zarr/X/data/0 delete mode 100644 inst/extdata/example2.zarr/X/indices/.zarray delete mode 100644 inst/extdata/example2.zarr/X/indices/0 delete mode 100644 inst/extdata/example2.zarr/X/indptr/.zarray delete mode 100644 inst/extdata/example2.zarr/X/indptr/0 delete mode 100644 inst/extdata/example2.zarr/layers/.zattrs delete mode 100644 inst/extdata/example2.zarr/layers/counts/.zattrs delete mode 100644 inst/extdata/example2.zarr/layers/counts/data/.zarray delete mode 100644 inst/extdata/example2.zarr/layers/counts/data/0 delete mode 100644 inst/extdata/example2.zarr/layers/counts/indices/.zarray delete mode 100644 inst/extdata/example2.zarr/layers/counts/indices/0 delete mode 100644 inst/extdata/example2.zarr/layers/counts/indptr/.zarray delete mode 100644 inst/extdata/example2.zarr/layers/counts/indptr/0 delete mode 100644 inst/extdata/example2.zarr/layers/csc_counts/.zattrs delete mode 100644 inst/extdata/example2.zarr/layers/csc_counts/data/.zarray delete mode 100644 inst/extdata/example2.zarr/layers/csc_counts/data/0 delete mode 100644 inst/extdata/example2.zarr/layers/csc_counts/indices/.zarray delete mode 100644 inst/extdata/example2.zarr/layers/csc_counts/indices/0 delete mode 100644 inst/extdata/example2.zarr/layers/csc_counts/indptr/.zarray delete mode 100644 inst/extdata/example2.zarr/layers/csc_counts/indptr/0 delete mode 100644 inst/extdata/example2.zarr/layers/dense_X/.zarray delete mode 100644 inst/extdata/example2.zarr/layers/dense_X/0.0 delete mode 100644 inst/extdata/example2.zarr/layers/dense_counts/.zarray delete mode 100644 inst/extdata/example2.zarr/layers/dense_counts/0.0 delete mode 100644 inst/extdata/example2.zarr/obs/.zattrs delete mode 100644 inst/extdata/example2.zarr/obs/BoolNA/.zattrs delete mode 100644 inst/extdata/example2.zarr/obs/BoolNA/.zgroup delete mode 100644 inst/extdata/example2.zarr/obs/BoolNA/mask/.zarray delete mode 100644 inst/extdata/example2.zarr/obs/BoolNA/mask/0 delete mode 100644 inst/extdata/example2.zarr/obs/BoolNA/values/.zarray delete mode 100644 inst/extdata/example2.zarr/obs/BoolNA/values/0 delete mode 100644 inst/extdata/example2.zarr/obs/Float/.zarray delete mode 100644 inst/extdata/example2.zarr/obs/Float/0 delete mode 100644 inst/extdata/example2.zarr/obs/FloatNA/.zarray delete mode 100644 inst/extdata/example2.zarr/obs/FloatNA/0 delete mode 100644 inst/extdata/example2.zarr/obs/Int/.zarray delete mode 100644 inst/extdata/example2.zarr/obs/Int/0 delete mode 100644 inst/extdata/example2.zarr/obs/IntNA/.zattrs delete mode 100644 inst/extdata/example2.zarr/obs/IntNA/.zgroup delete mode 100644 inst/extdata/example2.zarr/obs/IntNA/mask/.zarray delete mode 100644 inst/extdata/example2.zarr/obs/IntNA/mask/0 delete mode 100644 inst/extdata/example2.zarr/obs/IntNA/values/.zarray delete mode 100644 inst/extdata/example2.zarr/obs/IntNA/values/0 delete mode 100644 inst/extdata/example2.zarr/obs/_index/.zarray delete mode 100644 inst/extdata/example2.zarr/obs/_index/0 delete mode 100644 inst/extdata/example2.zarr/obs/leiden/.zattrs delete mode 100644 inst/extdata/example2.zarr/obs/leiden/.zgroup delete mode 100644 inst/extdata/example2.zarr/obs/leiden/categories/.zarray delete mode 100644 inst/extdata/example2.zarr/obs/leiden/categories/0 delete mode 100644 inst/extdata/example2.zarr/obs/leiden/codes/.zarray delete mode 100644 inst/extdata/example2.zarr/obs/leiden/codes/0 delete mode 100644 inst/extdata/example2.zarr/obs/log1p_n_genes_by_counts/.zarray delete mode 100644 inst/extdata/example2.zarr/obs/log1p_n_genes_by_counts/0 delete mode 100644 inst/extdata/example2.zarr/obs/log1p_total_counts/.zarray delete mode 100644 inst/extdata/example2.zarr/obs/log1p_total_counts/0 delete mode 100644 inst/extdata/example2.zarr/obs/n_genes_by_counts/.zarray delete mode 100644 inst/extdata/example2.zarr/obs/n_genes_by_counts/0 delete mode 100644 inst/extdata/example2.zarr/obs/total_counts/.zarray delete mode 100644 inst/extdata/example2.zarr/obs/total_counts/0 delete mode 100644 inst/extdata/example2.zarr/obsm/.zattrs delete mode 100644 inst/extdata/example2.zarr/obsm/.zgroup delete mode 100644 inst/extdata/example2.zarr/obsm/X_pca/.zarray delete mode 100644 inst/extdata/example2.zarr/obsm/X_pca/0.0 delete mode 100644 inst/extdata/example2.zarr/obsm/X_umap/.zarray delete mode 100644 inst/extdata/example2.zarr/obsm/X_umap/0.0 delete mode 100644 inst/extdata/example2.zarr/obsp/.zattrs delete mode 100644 inst/extdata/example2.zarr/obsp/.zgroup delete mode 100644 inst/extdata/example2.zarr/obsp/connectivities/.zattrs delete mode 100644 inst/extdata/example2.zarr/obsp/connectivities/.zgroup delete mode 100644 inst/extdata/example2.zarr/obsp/connectivities/data/.zarray delete mode 100644 inst/extdata/example2.zarr/obsp/connectivities/data/0 delete mode 100644 inst/extdata/example2.zarr/obsp/connectivities/indices/.zarray delete mode 100644 inst/extdata/example2.zarr/obsp/connectivities/indices/0 delete mode 100644 inst/extdata/example2.zarr/obsp/connectivities/indptr/.zarray delete mode 100644 inst/extdata/example2.zarr/obsp/connectivities/indptr/0 delete mode 100644 inst/extdata/example2.zarr/obsp/distances/.zattrs delete mode 100644 inst/extdata/example2.zarr/obsp/distances/.zgroup delete mode 100644 inst/extdata/example2.zarr/obsp/distances/data/.zarray delete mode 100644 inst/extdata/example2.zarr/obsp/distances/data/0 delete mode 100644 inst/extdata/example2.zarr/obsp/distances/indices/.zarray delete mode 100644 inst/extdata/example2.zarr/obsp/distances/indices/0 delete mode 100644 inst/extdata/example2.zarr/obsp/distances/indptr/.zarray delete mode 100644 inst/extdata/example2.zarr/obsp/distances/indptr/0 delete mode 100644 inst/extdata/example2.zarr/uns/.zattrs delete mode 100644 inst/extdata/example2.zarr/uns/.zgroup delete mode 100644 inst/extdata/example2.zarr/uns/Bool/.zarray delete mode 100644 inst/extdata/example2.zarr/uns/Bool/0 delete mode 100644 inst/extdata/example2.zarr/uns/BoolNA/.zattrs delete mode 100644 inst/extdata/example2.zarr/uns/BoolNA/.zgroup delete mode 100644 inst/extdata/example2.zarr/uns/BoolNA/mask/.zarray delete mode 100644 inst/extdata/example2.zarr/uns/BoolNA/mask/0 delete mode 100644 inst/extdata/example2.zarr/uns/BoolNA/values/.zarray delete mode 100644 inst/extdata/example2.zarr/uns/BoolNA/values/0 delete mode 100644 inst/extdata/example2.zarr/uns/Category/.zattrs delete mode 100644 inst/extdata/example2.zarr/uns/Category/.zgroup delete mode 100644 inst/extdata/example2.zarr/uns/Category/categories/.zarray delete mode 100644 inst/extdata/example2.zarr/uns/Category/categories/0 delete mode 100644 inst/extdata/example2.zarr/uns/Category/codes/.zarray delete mode 100644 inst/extdata/example2.zarr/uns/Category/codes/0 delete mode 100644 inst/extdata/example2.zarr/uns/DataFrameEmpty/.zattrs delete mode 100644 inst/extdata/example2.zarr/uns/DataFrameEmpty/.zgroup delete mode 100644 inst/extdata/example2.zarr/uns/DataFrameEmpty/_index/.zarray delete mode 100644 inst/extdata/example2.zarr/uns/DataFrameEmpty/_index/0 delete mode 100644 inst/extdata/example2.zarr/uns/Int/.zarray delete mode 100644 inst/extdata/example2.zarr/uns/Int/0 delete mode 100644 inst/extdata/example2.zarr/uns/IntNA/.zattrs delete mode 100644 inst/extdata/example2.zarr/uns/IntNA/.zgroup delete mode 100644 inst/extdata/example2.zarr/uns/IntNA/mask/.zarray delete mode 100644 inst/extdata/example2.zarr/uns/IntNA/mask/0 delete mode 100644 inst/extdata/example2.zarr/uns/IntNA/values/.zarray delete mode 100644 inst/extdata/example2.zarr/uns/IntNA/values/0 delete mode 100644 inst/extdata/example2.zarr/uns/IntScalar/.zarray delete mode 100644 inst/extdata/example2.zarr/uns/IntScalar/.zattrs delete mode 100644 inst/extdata/example2.zarr/uns/IntScalar/0 delete mode 100644 inst/extdata/example2.zarr/uns/Sparse1D/.zattrs delete mode 100644 inst/extdata/example2.zarr/uns/Sparse1D/.zgroup delete mode 100644 inst/extdata/example2.zarr/uns/Sparse1D/data/.zarray delete mode 100644 inst/extdata/example2.zarr/uns/Sparse1D/data/0 delete mode 100644 inst/extdata/example2.zarr/uns/Sparse1D/indices/.zarray delete mode 100644 inst/extdata/example2.zarr/uns/Sparse1D/indices/0 delete mode 100644 inst/extdata/example2.zarr/uns/Sparse1D/indptr/.zarray delete mode 100644 inst/extdata/example2.zarr/uns/Sparse1D/indptr/0 delete mode 100644 inst/extdata/example2.zarr/uns/String/.zarray delete mode 100644 inst/extdata/example2.zarr/uns/String/0 delete mode 100644 inst/extdata/example2.zarr/uns/String2D/.zarray delete mode 100644 inst/extdata/example2.zarr/uns/String2D/0.0 delete mode 100644 inst/extdata/example2.zarr/uns/StringScalar/.zarray delete mode 100644 inst/extdata/example2.zarr/uns/StringScalar/.zattrs delete mode 100644 inst/extdata/example2.zarr/uns/StringScalar/0 delete mode 100644 inst/extdata/example2.zarr/uns/hvg/.zattrs delete mode 100644 inst/extdata/example2.zarr/uns/hvg/.zgroup delete mode 100644 inst/extdata/example2.zarr/uns/hvg/flavor/.zarray delete mode 100644 inst/extdata/example2.zarr/uns/hvg/flavor/.zattrs delete mode 100644 inst/extdata/example2.zarr/uns/hvg/flavor/0 delete mode 100644 inst/extdata/example2.zarr/uns/leiden/.zattrs delete mode 100644 inst/extdata/example2.zarr/uns/leiden/.zgroup delete mode 100644 inst/extdata/example2.zarr/uns/leiden/params/.zattrs delete mode 100644 inst/extdata/example2.zarr/uns/leiden/params/.zgroup delete mode 100644 inst/extdata/example2.zarr/uns/leiden/params/n_iterations/.zarray delete mode 100644 inst/extdata/example2.zarr/uns/leiden/params/n_iterations/.zattrs delete mode 100644 inst/extdata/example2.zarr/uns/leiden/params/n_iterations/0 delete mode 100644 inst/extdata/example2.zarr/uns/leiden/params/random_state/.zarray delete mode 100644 inst/extdata/example2.zarr/uns/leiden/params/random_state/.zattrs delete mode 100644 inst/extdata/example2.zarr/uns/leiden/params/random_state/0 delete mode 100644 inst/extdata/example2.zarr/uns/leiden/params/resolution/.zarray delete mode 100644 inst/extdata/example2.zarr/uns/leiden/params/resolution/.zattrs delete mode 100644 inst/extdata/example2.zarr/uns/leiden/params/resolution/0 delete mode 100644 inst/extdata/example2.zarr/uns/log1p/.zattrs delete mode 100644 inst/extdata/example2.zarr/uns/log1p/.zgroup delete mode 100644 inst/extdata/example2.zarr/uns/neighbors/.zattrs delete mode 100644 inst/extdata/example2.zarr/uns/neighbors/.zgroup delete mode 100644 inst/extdata/example2.zarr/uns/neighbors/connectivities_key/.zarray delete mode 100644 inst/extdata/example2.zarr/uns/neighbors/connectivities_key/.zattrs delete mode 100644 inst/extdata/example2.zarr/uns/neighbors/connectivities_key/0 delete mode 100644 inst/extdata/example2.zarr/uns/neighbors/distances_key/.zarray delete mode 100644 inst/extdata/example2.zarr/uns/neighbors/distances_key/.zattrs delete mode 100644 inst/extdata/example2.zarr/uns/neighbors/distances_key/0 delete mode 100644 inst/extdata/example2.zarr/uns/neighbors/params/.zattrs delete mode 100644 inst/extdata/example2.zarr/uns/neighbors/params/.zgroup delete mode 100644 inst/extdata/example2.zarr/uns/neighbors/params/method/.zarray delete mode 100644 inst/extdata/example2.zarr/uns/neighbors/params/method/.zattrs delete mode 100644 inst/extdata/example2.zarr/uns/neighbors/params/method/0 delete mode 100644 inst/extdata/example2.zarr/uns/neighbors/params/metric/.zarray delete mode 100644 inst/extdata/example2.zarr/uns/neighbors/params/metric/.zattrs delete mode 100644 inst/extdata/example2.zarr/uns/neighbors/params/metric/0 delete mode 100644 inst/extdata/example2.zarr/uns/neighbors/params/n_neighbors/.zarray delete mode 100644 inst/extdata/example2.zarr/uns/neighbors/params/n_neighbors/.zattrs delete mode 100644 inst/extdata/example2.zarr/uns/neighbors/params/n_neighbors/0 delete mode 100644 inst/extdata/example2.zarr/uns/neighbors/params/random_state/.zarray delete mode 100644 inst/extdata/example2.zarr/uns/neighbors/params/random_state/.zattrs delete mode 100644 inst/extdata/example2.zarr/uns/neighbors/params/random_state/0 delete mode 100644 inst/extdata/example2.zarr/uns/pca/.zattrs delete mode 100644 inst/extdata/example2.zarr/uns/pca/.zgroup delete mode 100644 inst/extdata/example2.zarr/uns/pca/params/.zattrs delete mode 100644 inst/extdata/example2.zarr/uns/pca/params/.zgroup delete mode 100644 inst/extdata/example2.zarr/uns/pca/params/use_highly_variable/.zarray delete mode 100644 inst/extdata/example2.zarr/uns/pca/params/use_highly_variable/.zattrs delete mode 100644 inst/extdata/example2.zarr/uns/pca/params/use_highly_variable/0 delete mode 100644 inst/extdata/example2.zarr/uns/pca/params/zero_center/.zarray delete mode 100644 inst/extdata/example2.zarr/uns/pca/params/zero_center/.zattrs delete mode 100644 inst/extdata/example2.zarr/uns/pca/params/zero_center/0 delete mode 100644 inst/extdata/example2.zarr/uns/pca/variance/.zarray delete mode 100644 inst/extdata/example2.zarr/uns/pca/variance/0 delete mode 100644 inst/extdata/example2.zarr/uns/pca/variance_ratio/.zarray delete mode 100644 inst/extdata/example2.zarr/uns/pca/variance_ratio/0 delete mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/.zattrs delete mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/.zgroup delete mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/logfoldchanges/.zattrs delete mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/logfoldchanges/.zgroup delete mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/names/.zattrs delete mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/names/.zgroup delete mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/names/2/.zattrs delete mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/names/3/.zattrs delete mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/names/4/.zattrs delete mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/names/5/.zattrs delete mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/params/.zattrs delete mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/params/.zgroup delete mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/params/corr_method/.zarray delete mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/params/corr_method/.zattrs delete mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/params/corr_method/0 delete mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/params/groupby/.zarray delete mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/params/groupby/.zattrs delete mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/params/groupby/0 delete mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/params/method/.zarray delete mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/params/method/.zattrs delete mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/params/method/0 delete mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/params/reference/.zarray delete mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/params/reference/.zattrs delete mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/params/reference/0 delete mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/params/use_raw/.zarray delete mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/params/use_raw/.zattrs delete mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/params/use_raw/0 delete mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/pvals/.zattrs delete mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/pvals/.zgroup delete mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/pvals/2/.zattrs delete mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/pvals/3/.zattrs delete mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/pvals/4/.zattrs delete mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/pvals/5/.zattrs delete mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/pvals_adj/.zattrs delete mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/pvals_adj/.zgroup delete mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/pvals_adj/0/.zattrs delete mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/pvals_adj/1/.zattrs delete mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/pvals_adj/2/.zattrs delete mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/pvals_adj/3/.zattrs delete mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/pvals_adj/4/.zattrs delete mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/pvals_adj/5/.zattrs delete mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/scores/.zattrs delete mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/scores/.zgroup delete mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/scores/0/.zattrs delete mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/scores/1/.zattrs delete mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/scores/2/.zattrs delete mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/scores/3/.zattrs delete mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/scores/4/.zattrs delete mode 100644 inst/extdata/example2.zarr/uns/rank_genes_groups/scores/5/.zattrs delete mode 100644 inst/extdata/example2.zarr/uns/umap/.zattrs delete mode 100644 inst/extdata/example2.zarr/uns/umap/.zgroup delete mode 100644 inst/extdata/example2.zarr/uns/umap/params/.zattrs delete mode 100644 inst/extdata/example2.zarr/uns/umap/params/.zgroup delete mode 100644 inst/extdata/example2.zarr/uns/umap/params/a/.zarray delete mode 100644 inst/extdata/example2.zarr/uns/umap/params/a/.zattrs delete mode 100644 inst/extdata/example2.zarr/uns/umap/params/a/0 delete mode 100644 inst/extdata/example2.zarr/uns/umap/params/b/.zarray delete mode 100644 inst/extdata/example2.zarr/uns/umap/params/b/.zattrs delete mode 100644 inst/extdata/example2.zarr/uns/umap/params/b/0 delete mode 100644 inst/extdata/example2.zarr/var/.zattrs delete mode 100644 inst/extdata/example2.zarr/var/.zgroup delete mode 100644 inst/extdata/example2.zarr/var/String/.zarray delete mode 100644 inst/extdata/example2.zarr/var/String/.zattrs delete mode 100644 inst/extdata/example2.zarr/var/String/0 delete mode 100644 inst/extdata/example2.zarr/var/_index/.zarray delete mode 100644 inst/extdata/example2.zarr/var/_index/.zattrs delete mode 100644 inst/extdata/example2.zarr/var/_index/0 delete mode 100644 inst/extdata/example2.zarr/var/dispersions/.zarray delete mode 100644 inst/extdata/example2.zarr/var/dispersions/.zattrs delete mode 100644 inst/extdata/example2.zarr/var/dispersions/0 delete mode 100644 inst/extdata/example2.zarr/var/dispersions_norm/.zarray delete mode 100644 inst/extdata/example2.zarr/var/dispersions_norm/.zattrs delete mode 100644 inst/extdata/example2.zarr/var/dispersions_norm/0 delete mode 100644 inst/extdata/example2.zarr/var/highly_variable/.zarray delete mode 100644 inst/extdata/example2.zarr/var/highly_variable/.zattrs delete mode 100644 inst/extdata/example2.zarr/var/highly_variable/0 delete mode 100644 inst/extdata/example2.zarr/var/log1p_mean_counts/.zarray delete mode 100644 inst/extdata/example2.zarr/var/log1p_mean_counts/.zattrs delete mode 100644 inst/extdata/example2.zarr/var/log1p_mean_counts/0 delete mode 100644 inst/extdata/example2.zarr/var/log1p_total_counts/.zarray delete mode 100644 inst/extdata/example2.zarr/var/log1p_total_counts/.zattrs delete mode 100644 inst/extdata/example2.zarr/var/log1p_total_counts/0 delete mode 100644 inst/extdata/example2.zarr/var/mean_counts/.zarray delete mode 100644 inst/extdata/example2.zarr/var/mean_counts/.zattrs delete mode 100644 inst/extdata/example2.zarr/var/mean_counts/0 delete mode 100644 inst/extdata/example2.zarr/var/means/.zarray delete mode 100644 inst/extdata/example2.zarr/var/means/.zattrs delete mode 100644 inst/extdata/example2.zarr/var/means/0 delete mode 100644 inst/extdata/example2.zarr/var/n_cells_by_counts/.zarray delete mode 100644 inst/extdata/example2.zarr/var/n_cells_by_counts/.zattrs delete mode 100644 inst/extdata/example2.zarr/var/n_cells_by_counts/0 delete mode 100644 inst/extdata/example2.zarr/var/pct_dropout_by_counts/.zarray delete mode 100644 inst/extdata/example2.zarr/var/pct_dropout_by_counts/.zattrs delete mode 100644 inst/extdata/example2.zarr/var/pct_dropout_by_counts/0 delete mode 100644 inst/extdata/example2.zarr/var/total_counts/.zarray delete mode 100644 inst/extdata/example2.zarr/var/total_counts/.zattrs delete mode 100644 inst/extdata/example2.zarr/var/total_counts/0 delete mode 100644 inst/extdata/example2.zarr/varm/.zattrs delete mode 100644 inst/extdata/example2.zarr/varm/.zgroup delete mode 100644 inst/extdata/example2.zarr/varm/PCs/.zarray delete mode 100644 inst/extdata/example2.zarr/varm/PCs/.zattrs delete mode 100644 inst/extdata/example2.zarr/varm/PCs/0.0 delete mode 100644 inst/extdata/example2.zarr/varp/.zattrs delete mode 100644 inst/extdata/example2.zarr/varp/.zgroup diff --git a/R/ZarrAnnData.R b/R/ZarrAnnData.R index d37cf97e..38c56e0b 100644 --- a/R/ZarrAnnData.R +++ b/R/ZarrAnnData.R @@ -126,7 +126,8 @@ ZarrAnnData <- R6::R6Class("ZarrAnnData", # nolint obs = function(value) { if (missing(value)) { # trackstatus: class=HDF5AnnData, feature=get_obs, status=done - read_zarr_element(private$zarr_store, "/obs", include_index = FALSE) + # TODO: shall we keep include_index = TRUE, or get rid of the argument ? + read_zarr_element(private$zarr_store, "/obs", include_index = TRUE) } else { # trackstatus: class=HDF5AnnData, feature=set_obs, status=done value <- private$.validate_obsvar_dataframe(value, "obs") @@ -134,8 +135,7 @@ ZarrAnnData <- R6::R6Class("ZarrAnnData", # nolint value, private$zarr_store, "/obs", - private$.compression, - index = self$obs_names + private$.compression ) } }, @@ -143,34 +143,20 @@ ZarrAnnData <- R6::R6Class("ZarrAnnData", # nolint var = function(value) { if (missing(value)) { # trackstatus: class=HDF5AnnData, feature=get_var, status=done - read_zarr_element(private$zarr_store, "/var", include_index = FALSE) + # TODO: shall we keep include_index = TRUE, or get rid of the argument ? + read_zarr_element(private$zarr_store, "/var", include_index = TRUE) } else { # trackstatus: class=HDF5AnnData, feature=set_var, status=done value <- private$.validate_obsvar_dataframe(value, "var") write_zarr_element( value, private$zarr_store, - "/var", - index = self$var_names + "/var" ) } }, #' @field obs_names Names of observations obs_names = function(value) { - # if (missing(value)) { - # # trackstatus: class=HDF5AnnData, feature=get_obs_names, status=done - # # obs names are cached to avoid reading all of obs whenever they are - # # accessed - # if (is.null(private$.obs_names)) { - # private$.obs_names <- read_zarr_data_frame_index(private$zarr_store, "obs") - # } - # private$.obs_names - # } else { - # # trackstatus: class=HDF5AnnData, feature=set_obs_names, status=done - # value <- private$.validate_obsvar_names(value, "obs") - # write_zarr_data_frame_index(value, private$zarr_store, "obs", private$.compression, "_index") - # private$.obs_names <- value - # } if (missing(value)) { # trackstatus: class=HDF5AnnData, feature=get_obs_names, status=done rownames(self$obs) @@ -181,21 +167,6 @@ ZarrAnnData <- R6::R6Class("ZarrAnnData", # nolint }, #' @field var_names Names of variables var_names = function(value) { - # TODO: directly write to and read from /var/_index - # if (missing(value)) { - # # trackstatus: class=HDF5AnnData, feature=get_var_names, status=done - # # var names are cached to avoid reading all of var whenever they are - # # accessed - # if (is.null(private$.var_names)) { - # private$.var_names <- read_zarr_data_frame_index(private$zarr_store, "var") - # } - # private$.var_names - # } else { - # # trackstatus: class=HDF5AnnData, feature=set_var_names, status=done - # value <- private$.validate_obsvar_names(value, "var") - # write_zarr_data_frame_index(value, private$zarr_store, "var", private$.compression, "_index") - # private$.var_names <- value - # } if (missing(value)) { # trackstatus: class=HDF5AnnData, feature=get_var_names, status=done rownames(self$var) @@ -292,7 +263,7 @@ ZarrAnnData <- R6::R6Class("ZarrAnnData", # nolint private$.compression <- compression # if(length(root$get_attrs()$to_list()) == 0) { - if (is.character(store) && !dir.exists(store)) { + if ((is.character(store) && !dir.exists(store)) || inherits(store, "MemoryStore")) { # Check obs_names and var_names have been provided # if (is.null(obs_names)) { # stop("When creating a new .h5ad file, `obs_names` must be defined.") diff --git a/R/read_zarr_helpers.R b/R/read_zarr_helpers.R index d952a98d..c22000a4 100644 --- a/R/read_zarr_helpers.R +++ b/R/read_zarr_helpers.R @@ -389,9 +389,8 @@ read_zarr_mapping <- function(store, name, version = "0.1.0") { version <- match.arg(version) groupname <- paste0("/", name) - store <- pizzarr::zarr_open(store) - # columns <- store$listdir(name) - columns <- store$get_store()$listdir(name) + g <- pizzarr::zarr_open(store) + columns <- g$get_store()$listdir(name) read_zarr_collection(store, name, columns) } @@ -414,7 +413,7 @@ read_zarr_mapping <- function(store, name, version = "0.1.0") { #' @return a data.frame #' #' @noRd -read_zarr_data_frame <- function(store, name, include_index = FALSE, +read_zarr_data_frame <- function(store, name, include_index = TRUE, version = "0.2.0") { version <- match.arg(version) @@ -435,16 +434,12 @@ read_zarr_data_frame <- function(store, name, include_index = FALSE, if (isTRUE(include_index)) { index <- read_zarr_data_frame_index(store, name) - # df <- cbind(index, df) # The default index name is not allowed as a column name so adjust it if (index_name == "_index") { rownames(df) <- index - # index_name <- ".index" - # colnames(df)[1] <- index_name } - attr(df, "_index") <- index_name # nolint } df diff --git a/R/write_zarr_helpers.R b/R/write_zarr_helpers.R index 0f4ef9eb..67ed8d67 100644 --- a/R/write_zarr_helpers.R +++ b/R/write_zarr_helpers.R @@ -237,7 +237,8 @@ write_zarr_string_array <- function(value, store, name, compression, version = " object_codec <- pizzarr::VLenUtf8Codec$new() data <- array(data = value, dim = dims) - a <- pizzarr::zarr_create_array(data, store = store, path = name, dtype = "|O", object_codec = object_codec, shape = dims) + # TODO: existing _index does not allow overwriting, so shall we keep overwrite=TRUE here ? + a <- pizzarr::zarr_create_array(data, store = store, path = name, dtype = "|O", object_codec = object_codec, shape = dims, overwrite = TRUE) write_zarr_encoding(store, name, "string-array", version) } @@ -278,7 +279,8 @@ write_zarr_categorical <- function(value, store, name, compression, version = "0 write_zarr_string_scalar <- function(value, store, name, compression, version = "0.2.0") { # Write scalar object_codec = pizzarr::VLenUtf8Codec$new() - a <- pizzarr::zarr_create_array(value, store = store, path = name, dtype = "|O", object_codec = object_codec, shape = list()) + value <- array(data = value, dim = 1) + a <- pizzarr::zarr_create_array(value, store = store, path = name, dtype = "|O", object_codec = object_codec, shape = 1) # Write attributes write_zarr_encoding(store, name, "string", version) @@ -469,7 +471,7 @@ write_empty_zarr <- function(store, obs, var, compression, version = "0.1.0") { #' #' @return Whether the `path` exists in `file` zarr_path_exists <- function(store, target_path) { - store <- pizzarr::zarr_open(store, path = target_path) + store <- pizzarr::zarr_open(store, path = "") result <- tryCatch({ store$get_item(target_path) return(TRUE) diff --git a/inst/extdata/example.zarr/.zattrs b/inst/extdata/example.zarr/.zattrs index 82ba51b8..55361a32 100644 --- a/inst/extdata/example.zarr/.zattrs +++ b/inst/extdata/example.zarr/.zattrs @@ -1,4 +1 @@ -{ - "encoding-type": "anndata", - "encoding-version": "0.1.0" -} \ No newline at end of file +{"encoding-type":"anndata","encoding-version":"0.1.0"} \ No newline at end of file diff --git a/inst/extdata/example.zarr/.zgroup b/inst/extdata/example.zarr/.zgroup index 3b7daf22..c71fe9d0 100644 --- a/inst/extdata/example.zarr/.zgroup +++ b/inst/extdata/example.zarr/.zgroup @@ -1,3 +1 @@ -{ - "zarr_format": 2 -} \ No newline at end of file +{"zarr_format":2} \ No newline at end of file diff --git a/inst/extdata/example.zarr/X/.zattrs b/inst/extdata/example.zarr/X/.zattrs index 3cd60a64..018aaed3 100644 --- a/inst/extdata/example.zarr/X/.zattrs +++ b/inst/extdata/example.zarr/X/.zattrs @@ -1,8 +1 @@ -{ - "encoding-type": "csr_matrix", - "encoding-version": "0.1.0", - "shape": [ - 50, - 100 - ] -} \ No newline at end of file +{"encoding-type":"csr_matrix","encoding-version":"0.1.0","shape":[50,100]} \ No newline at end of file diff --git a/inst/extdata/example.zarr/X/.zgroup b/inst/extdata/example.zarr/X/.zgroup index 3b7daf22..c71fe9d0 100644 --- a/inst/extdata/example.zarr/X/.zgroup +++ b/inst/extdata/example.zarr/X/.zgroup @@ -1,3 +1 @@ -{ - "zarr_format": 2 -} \ No newline at end of file +{"zarr_format":2} \ No newline at end of file diff --git a/inst/extdata/example.zarr/X/data/.zarray b/inst/extdata/example.zarr/X/data/.zarray index 57e92110..7207923d 100644 --- a/inst/extdata/example.zarr/X/data/.zarray +++ b/inst/extdata/example.zarr/X/data/.zarray @@ -1,20 +1 @@ -{ - "chunks": [ - 4317 - ], - "compressor": { - "blocksize": 0, - "clevel": 5, - "cname": "lz4", - "id": "blosc", - "shuffle": 1 - }, - "dtype": "x zrA$88u;`{!k<1gx&I+}4a_kAl-(W;fz1(awL?3*jwdri`D$bMUonsh(QrfdhxqRwz z;;Go%i$t57DW)`OXYDN4)Kx2dVX;b@O|rjHS6?XG>KYM^pG+vu*P@t^gDa%+SR?F? zX^sQL2$I_YF0ML7%|^kX!39&kJi>-Y1ZXsy!wafl0RAW{{{K6X1(^Q-T`DAU|9@8s zjrad|rj!8v{{u*S?*H$8RxR)|32&;FgrC43n2eL7MV+5*_878-Y`qGD?4no=wAowB zqMa@kG_s^@;TaYGsVz>g-2ROUPCil-bQG5xg4l(1U^C_RoV451)MCy(Oc&D%rZ{hZ*Tn6ep{E8;FJl^Qw;g zx`yi=sKLWGKyVMpk{mlV3=mes0AUVo8Z^);%aXPhoahrpn?2(E*M_JIwe)<7^t(Nu zs4;*H05bkFU|uO{XjZ0$y|yP2MA$$qqIdI!+3L^(ttC#}VM3Qi3@$1`c!yfKU>`O7 zTO!j}9WQP#cjoqr!(OX~VBQ_l!?-Sd8l7q27GWoKO?<_}=B77TZWb6%Cu5jrX2+9M z&fPZQX|=4}Le=@TD~3K_u=R9<1I^RQUGnMy2LdYUt(l;#qHQe|jFYI;JwVD<1N{M$ z6exqDv5f%Y1{8n^1O*|$egX&#K?o`eiO`r6A)yoyMgYjZ?szfJK#$&b%td4ov+pjq zX0>5!pF$3+Yo?UpfHGq=E@j-V^KSy@8M<7j5tnhP{71FNTJU2d}$L>4ou% z)l~pp#DcD8t#n%6`OX^7We}z^VuN-!3};!+lXm4J9JfQuu1A=f!LXGtG&|^yvxaf` z(tbPbsCsbr6`(0iv95jVY+?3oykt`wn#}*XCOdxUpJy$U@!$#`8||!4aft`44V#)V zRvn+5^@n--`6GRTEtonM-4=xX62@@Sr+#vuuElScwleyMZgH^OtF_t|mIX8A)WSKA zHM-N>nwgR9=GXk~ELL^$7}79x{gSn$ba=lvyn`@?apnDCE5!^egI3C>+bv9YmcVGw z&0*`xK^8}=hVHJRyKv|}HjUoq&DnX_(yrw6i*JSAu*Q`OW|!%KjRYfX?6?_g-3)4J zTtRGeY3&`yZ>_5lyg>Auj3={Pu3d~P12DAGmO1-gQ#7(#sOME&7`q|J(q_c3Nrn^K z#(0gU`($a!tz^YFb>m%kU!%{2uD#F=@0+W|J~TXIvIv@19{jeL#ZdEVD~o^uV{PLU zXG0m=hpVQtimrxpM)xM3@Ws@bu$iLM^?DPStY?z8@|fQ&4wuSitii#u_=dYf>_=aA zvFXcT{a8cNxm?OF8E3>CaWi4s$BPdS>m&^ z)&tF>*kCTr9d&3BCX(X#UccW3Da zr!7arv*9S?Bu{*w1*7sw-Ke>4c}Igq$Jr@etd+Jkk8RK)T-|nD@g}=A8ynU*CnNFr z`18PHafsF#}7qxDhTr7c^)i&R1F1>o;DfBmU z^)!DCgt_YayN^P&Wpt~Ph~d>h4gU`81xK74ul)F2^S?Z_CgfJ<>{NRUTy|(=#TJ`^ zcMQ*FyC|B-dmx#7H&n)1{o7h!?W1?v1-Gsvw5gMJ9zFA{c36UA@9<7-pcwIsAKmPa z60;m=iP0LXQ`3c2HxO;)!)g~gm~pnv%To2bDmim=2AYs?+1OYD0~-2i<|j!xe4%}{gu>6^8F;s3T~ z*>PIwc!PPpvnk)_(PcF=Mh#EzvklbQ{x)L;YnV z%~wtXwzbvBwT!GExw*AX2G)&zom`iX4?aV@aoeY~%aPIWn#HG0>&`Jtb_+KcZRjRk zRN$qX8;P&*_^Wr_E!QciD=?46HnM+or>AYK?EZFZT4_)-%_|v^fLQe~t$m(RKyz zHvgI9zzMoLbGq^WyuWcvvmD%~=AY#IAD_$UP0Mx;@VCxQrq_LBf7pgv=h9>PGmSpX z$Mu})0Bq$nY-BaHg9FWK#cNN;#4(ICY?POR917dqx8t8%vmg^k8jZ~nG&)6#bDhw{ zu}zs|tq*t5d|(&qw*xePwM9Cm7v<#HTsGREk$iUx5YvTQJ|gvtS$5yF5n}@H4%5u) zkWAao`D6x4odUPWD$aDp~<;2OGJJ}ksH*mVimhs(8?mh2(;#t|^a!p2t-5fGm zuyKpa#GcKD)&g)VMoEbYCB z;md3o%binnOgqAG#&v0Jmrnz)sOEu=?4r;e2rMSP1~Ky;O`7g@XwVmrvp$ga`pgJ5 zo8&=q|HiK@50)^Bp&g9D`hbNQ4ca$!$nMOe1(WP%PriHEj@dVzpT~+d*!#Gi^Qate z|8j=MGPcl7mYlp%%C!4)u$VP{(9*9tEpTl(!nPiP-5cVa`0u92j70W5OGe!q4>8TZ zpm}kyda#f!HTL*-_&ptG_8;j0-{G<;GZ-kF-naGQ4DQRj`(oDioy|?&QjqGR|*WIvZh~(6&9cfg?|QJl1Ru?mj#Eb>3u@*%xp;^`T^G)4S>z z?2s6!QoyJ+6HRI~*kiVa0p3>jsWUr~(OH%s?P@Y>vJfM!+Zt%S?8TDJ1?mDbj!3t_ z-CwOWv~(CtrcH1+cRgd~P?!S$@RcWk-U5pDoW-N0TX;6sJ$9Q7F>y>gx!sR)i*ccO zhT2CDn&rN)Z=7By15>(a$!oZ%JTJ5l`GjHg8M`kG>{gTAS4gb4Bbw?BiP;R(2QTBB z%$FLBJdBCC_qXWK=B1x>_}Q!NE~f36SDzFw&Zc}bbmQ0tjRQ-kEz+QuP4};A?S~{c z^q+4UzjVo_AsjF)^HVLyw~$ovr?Xc>H)e*N+k>;*ve%tU)@kS2jA`#?aNEXU+#YXj z*B_$e>uv+SukCEUfVnM#;qxZ<&#mNKm%p1K+wd_nnsX}_Jz%!Ug6U)K+a}%9#e!RP zVrOL2I~`dxSjy}CbV?gX4a0GQn9FvQQQgO&XwKQDTdu!DX|34TIr=1vlgrtol*0&&7iY!?)7 z&Fs8xxY4tgILu;YcI6R4gDpLAOS=uR>Wrp#d5FoG#ftEF*qRSyANP>FqH-jg>UAu7O2|d5in^TxSeKiZ3i%a zuytha4o!1EW_(c-wQ&bOv7M8BXU>&1z&mSAGMM$~oLcRHWxcb}O>i}g7=UTlgr3x4 zVf5VX>@DL0+|wEVd9wGdOFw?hVeaSI^=1a=IQFd7 zI%1-!^U$MMX>&dXpIpF<*@oAkD`wStabsnPdkf^--E)H>)>hkGwM=Ndx~@n(5sw_S zpIv?UfU#WE?ZAZw(u`M(e&}}B+=i?luUWLE=~g+dXWH;8ij7-t_^|YbZ?EP)QG=75 z!NU2sJz4DPcvibQ!p^gqsY4kf7Guh{>&4K5 z-83ZR)>HRmV`I-_md!hdW4WL;;aesRF*JrS0J%kfj(xx=+s#b}({{l0)wk;XFtf*_ zo2CP1S+#qc&K+yh?r}OXvV;vcl_y=U!>t(3EoiXO!R!S_$3QMHE(dXO3tdN8e}mG^ z27h?pYSL3~`xt?duc=vQ|3^=IYG=|!?hooglSj+Nv7!a?@KU@F_OZJtFXuttlt+Bc zS~))EuH5~UEN=5*y*Kosm4wEoZaMtrvL0@H&@^4_ne`cq@#xt>Y zI(B(z4eSpt6{*QD+^rYRjA4z?YwFmx;l=Mp-hORoLu>g0BXKuctin9gy?w4GqqUz} zda#AI+%Edk9o7UlJCZ$c?q1+j#ar3v z6vtUgKMf_47uMYJP0SuETt@m3EVPv7ToESD(DX9)w8x0}NzdWim$FJUyVb4qE(7Le zY7SR#+>_{KKQg-0VipWw-RX@X%pBZml!GWb3v}+FaCU-Q>8kAwn;(|7TW204?gcVI zU=v#Psvr@M-DDUuYqB*sW!M19 zdp(MbNY0z=m~=lG+Z&v`uPsF^N)EWi%8qBgGDT%tNdP zlVYveEKrF%Yvx$G?=?KsOuP-bln8Mbm>YUDCJNotC*5Yz!Qh*w;ll)Y17H^(TW5F* WH%9?@M64&q9L#k>q)rTDv;G0i236ev literal 12849 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 diff --git a/inst/extdata/example.zarr/X/indices/.zarray b/inst/extdata/example.zarr/X/indices/.zarray index 6c23a901..cb6bf2dc 100644 --- a/inst/extdata/example.zarr/X/indices/.zarray +++ b/inst/extdata/example.zarr/X/indices/.zarray @@ -1,20 +1 @@ -{ - "chunks": [ - 4317 - ], - "compressor": { - "blocksize": 0, - "clevel": 5, - "cname": "lz4", - "id": "blosc", - "shuffle": 1 - }, - "dtype": "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 diff --git a/inst/extdata/example.zarr/layers/.zattrs b/inst/extdata/example.zarr/layers/.zattrs index a204673f..468e470d 100644 --- a/inst/extdata/example.zarr/layers/.zattrs +++ b/inst/extdata/example.zarr/layers/.zattrs @@ -1,4 +1 @@ -{ - "encoding-type": "dict", - "encoding-version": "0.1.0" -} \ No newline at end of file +{"encoding-type":"dict","encoding-version":"0.1.0"} \ No newline at end of file diff --git a/inst/extdata/example.zarr/layers/.zgroup b/inst/extdata/example.zarr/layers/.zgroup index 3b7daf22..c71fe9d0 100644 --- a/inst/extdata/example.zarr/layers/.zgroup +++ b/inst/extdata/example.zarr/layers/.zgroup @@ -1,3 +1 @@ -{ - "zarr_format": 2 -} \ No newline at end of file +{"zarr_format":2} \ No newline at end of file diff --git a/inst/extdata/example.zarr/layers/counts/.zattrs b/inst/extdata/example.zarr/layers/counts/.zattrs index 3cd60a64..018aaed3 100644 --- a/inst/extdata/example.zarr/layers/counts/.zattrs +++ b/inst/extdata/example.zarr/layers/counts/.zattrs @@ -1,8 +1 @@ -{ - "encoding-type": "csr_matrix", - "encoding-version": "0.1.0", - "shape": [ - 50, - 100 - ] -} \ No newline at end of file +{"encoding-type":"csr_matrix","encoding-version":"0.1.0","shape":[50,100]} \ No newline at end of file diff --git a/inst/extdata/example.zarr/layers/counts/.zgroup b/inst/extdata/example.zarr/layers/counts/.zgroup index 3b7daf22..c71fe9d0 100644 --- a/inst/extdata/example.zarr/layers/counts/.zgroup +++ b/inst/extdata/example.zarr/layers/counts/.zgroup @@ -1,3 +1 @@ -{ - "zarr_format": 2 -} \ No newline at end of file +{"zarr_format":2} \ No newline at end of file diff --git a/inst/extdata/example.zarr/layers/counts/data/.zarray b/inst/extdata/example.zarr/layers/counts/data/.zarray index 57e92110..7207923d 100644 --- a/inst/extdata/example.zarr/layers/counts/data/.zarray +++ b/inst/extdata/example.zarr/layers/counts/data/.zarray @@ -1,20 +1 @@ -{ - "chunks": [ - 4317 - ], - "compressor": { - "blocksize": 0, - "clevel": 5, - "cname": "lz4", - "id": "blosc", - "shuffle": 1 - }, - "dtype": "O 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 MmxfF!_woGy0m1V-=F_%qV)P;sk$1k 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 diff --git a/inst/extdata/example.zarr/layers/csc_counts/.zattrs b/inst/extdata/example.zarr/layers/csc_counts/.zattrs index ee83d73f..468453a9 100644 --- a/inst/extdata/example.zarr/layers/csc_counts/.zattrs +++ b/inst/extdata/example.zarr/layers/csc_counts/.zattrs @@ -1,8 +1 @@ -{ - "encoding-type": "csc_matrix", - "encoding-version": "0.1.0", - "shape": [ - 50, - 100 - ] -} \ No newline at end of file +{"encoding-type":"csc_matrix","encoding-version":"0.1.0","shape":[50,100]} \ No newline at end of file diff --git a/inst/extdata/example.zarr/layers/csc_counts/.zgroup b/inst/extdata/example.zarr/layers/csc_counts/.zgroup index 3b7daf22..c71fe9d0 100644 --- a/inst/extdata/example.zarr/layers/csc_counts/.zgroup +++ b/inst/extdata/example.zarr/layers/csc_counts/.zgroup @@ -1,3 +1 @@ -{ - "zarr_format": 2 -} \ No newline at end of file +{"zarr_format":2} \ No newline at end of file diff --git a/inst/extdata/example.zarr/layers/csc_counts/data/.zarray b/inst/extdata/example.zarr/layers/csc_counts/data/.zarray index 57e92110..7207923d 100644 --- a/inst/extdata/example.zarr/layers/csc_counts/data/.zarray +++ b/inst/extdata/example.zarr/layers/csc_counts/data/.zarray @@ -1,20 +1 @@ -{ - "chunks": [ - 4317 - ], - "compressor": { - "blocksize": 0, - "clevel": 5, - "cname": "lz4", - "id": "blosc", - "shuffle": 1 - }, - "dtype": "E73N5w;6_9nN+EpMiB+-#eo3(bV75P$~hKlC&%&T}C%hmYM26I9Z5rq#Nc)0^
Qq6196zZockb2vc-!N(Yp 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 bf!>CTRu-3D=@t_Ajufr1{`W}56W;#-_@npo literal 5587 zcmai&d6ZpMmBzol&%N)}K#^A&Bq38($Vdht36+GYZbBjuB9KIafkX(z#G%1T01XoL z8j)zag(ZpuF7+{pEN}qQ(xN~=>~6#XmoC8xv=TGBQ~fBVG0`k$`kz1+I@ zoW1w?_P4*iZ`=lpYtEG7^SueucuAA_Oqc1e|L5oF3wZGVKK{2}=|!(uwCCHovM-WDs@(>HF}u_>h=Tb zul7re*g+ilKSNrr5iToM{zz945l^mV{V}o&r4uwVTH~iuuWXqfuS6_Fi?jNAwW|3V zkd{dAlszhYpX}Yza<%lZY(zw+LHT6aY1u~`OMRv{N(*#Fr>Z&YX6?dpn_x)J>!sI7 zXUhJf{`xfOJn2IwEdDlUaes*woi7k^i|tMjKr)7 z^0!K3We>(tbiVArbQg!s@z?DE*%}V#y#Y-Xv}G zmS&Q9(+A9+R(eW*Fp(OZafm>v!%>P`RICn+wO@9k=>^%@(kZ56%-#V0{jO8pUAjK< zrjDd9m^Mkjl727Ea-T2VE1zK7>UJBmL()1jQ>opq9+I9`bHK#@SIH*9htC>(DBj1_ z+@vqbj&VEBe6REl)7F3>)^=oP$vy=KI$O;)%J#UHN^4zD$?leU(8m63{q1jhYqT=4 zBau?uzMt)ERQ0qJ>eh8?y1d@Gbn}U#jyF`j-xs4+b z(?7~y8LZPpfe%cu1xc4k)1;e|{UI)ji%Kny3P+9lb(ne^C%a8{hv{zZB44#CxEAHq zlpUua&$)6l0?@(OXsdv;@EcW-AWC3`^nk+~yH@raW%odW-a*!90y~1C;A@O#2ahM6IU-$*-jzB&usj z{*2p1jca$ipBoaWe>c6oqzt!JREMeu5Q)wWQsER%-tNs+k$Wqe4-4MIaxZx^tDh9BGDCQ&nIn7N^boy@jf$FEODJA9VpRN z719*bTtyDKzQ{=rEv zx!e#H=7*)Zp*C9JIH#Xrk#gLo!Fu#Tcno~CLMqlMjNBOVAC^yy4xrm0poN5dP1|ZD zTlE=cbKKui==tvSv#wTqjoC`+M`qhi56ZejTTqe&=`N&>3hfM~3YGi^*?`K|n%`jt zOOKcRf}%(|WUbCZve^}srTk8lp+vtnIAbRUjP~YkgM74_-^n&7C=nw0bfH@f^$6Ko z#daYLvAx@Lm27d6H@E;Nr$yZ4y3aMib(iadEKWx4oof1`tVbGgpr!X|lq7<~bMo!d z(Q@i($Zd{vR;KBgq}K)%`bh$`U?G%!SD`y%FrkMETbl~x!S0kEcJ1%cB(te99--Ec zvCM^vACP`yfjk!vl{yH*hLQAAD5H`4B@(F2&hyRC5t?RKhCdQ7N`t%yNbrh^Zy}oQJ zAx#ob*W>_kiSG-oyflm4V#?8snd8r>AQ=gd1qs?%Xj7L@gU0(xT_F3uS~balnm0GJ z&k_D~Ui2Ir2s!u9mzraKD9X(Ud5&7GwJe1bZhNFL(o-(Vb~8FwsOhq{Ff4Oi9QKf`&F9*!FmWPQ1uDK$m`9He?V)C z@+pw*ALa#1K_W5>6!qO!hn>COyC+!@O4}q zjmCjT7?hX?0bzS|7H8SX`6g zO^L;gJb?Ghm|tKUI54601gE0I907#)BckF&bCd{)W$fAzs*I-cmSF6{RBvY7eig3{ zNiP^XhomZ3{?Y0t!a5*zHlD9MF=oPm=Y;U00ES`~vyc)6H2m|#n>H|~IHvoB}umLOydx6759D%QtX3qDu~qOx(k z8iYsTQ&-?~dd7i)VRepYN=A5PK0DoGP%2b_|F%f3&yJ}p%`;s4!k7x};7# zU6KzwO^qc{bm_u?q8w71ud-XtN~r#}05Gjn6FvV^Mu`KyTeeSjh8zwPDs+Wi%xFXo z2Ourp5#eKlX+%P@jN*bJ43sPYO!z=)|3-F>8hC-#%ml1lq%LHEM3CRZarVIc+)OzN zs>ro)Am{Nr0YXfLAUsw^1(gA856jL{T9zlE;SdDO#>*#U+YzM!@roI-K3*<}aI;ZL zlyLY$NO!8_6z~nffjnJGpvnOW^5pzxFivS&=DzOrS2pa1t^ViAn!Zr4p5-30pScc6A z;L==2IK=`a(;aPRSc)i$x3g^HzD>?#ZZ{F7t$64b0V-PH|j78V8|I;dH4=4)SE47R#I=vnr#(N)RJ{5<%er2-b346vwN$ zEVmCZ0iuTbSFX;pGsnX#L_9rnoeHFPB2}}q?<4XwJtI3Oixm0-j|m+gaaJVP{sTJn~98X+|71S}&PkOd}b)1ablDEFp@_U zKM>%W0z=UTLKGlSyyPHWE3$XUI+V}9Nagi%G-86%^l;Z&d8LX&fn3){HO`csl<_7T zeM%>&Ad{3kbjWf@mUJjw!hI)=lT{EXzUM`VCK*RCyLRs9S0wrSsiRz7~C<=k{uA%qm%6n%NK|wy@>`+z_qGj*(OxDtt bT!NV08xD?y_*U=kons-n_Q+{{4P`&*gJ_Yzpn)2h^=!71P4AW91l=4kzxI zoSrr_zs`PVtG`?0@9Ur4Z2wr=@!3^xKab%yolV=ki;Y>ma`{RZ=b?^8w+0`0tqGs8 z;f#;g(`~$;WsjVyi6s*zxQ6x42yp7~w43q68}+r-4UrCoGfF)hk|H&gO?AU(Pw|>C z$|=#jy<6*+XEXNxuqWOB%2(xOdFq#Pw{F=yU_*9{pJUy+4i&Q>DkVxtwH8@YpA;NGP|hUGi82L0|)fUyXNi=^O)?= zu>uG3k$GgLCC0BSm}=RhTTXmc$%G58uIEF0-D^BnRho077V1x$e)-Ew9^s;X9*0?b ztbZKVPvuXIPR+aEKcH`)-g&$O@k!c2jI@DSUXQc-zV>t((8VY$Z^SU4F4>zlZixFn zwsQRWbMQ&$PA}o3Cv#FS-42{*e{5&c^?|i8xWcBo>mI?grqCYn!?XxmgI(079O^Yc zar?G}nunR+^hsKL>R?LTx1lzJt-E)M|D@GwSE>@G3`6#fPAxnv>b&MoV1eO0^Y#>A zQLuswULhva1LiWZ4}Q#DB6{2LA2AAvH&z zd+GrM%rC&EE_-fv@)BRiW2Gh7#*t}=M1Z1bWR%k&UUGZUc*WS_h482BWc&+&NMI<) zI*8DFf{-yChiO2{;3CU{ntRCQKr3W3)6cL;kQvw~?;8+|Q}2=u2(E-;3BFYXUs!jc zYTFM9y+THiHavB~dkK>Lkvl3(N)iTju3WBf=S)~%CM=>2=u;)*O;rHM7*v38>q(me zrGP~tKte(k{s7z(Y7QZP4$-3eHe(NJ6xIst(OYU~!#5yOdf-XY0%MActvs){OdxrX zAUSh_@q}aAlb*Ia6?A(T%eI?e?p9J-+)hCPN-asF{8i+{bI=!Fjz(+2lvo=hfDt8d zf#O0~l2i>p(aCEg^Y6jf~N#&+J!V48A zl9Zf{h};DV#QGG_7_|k=%;EByL*~CVSD*&Hp+Di<{bG)wmiG{2X?bcv(-|UxTWHV_ zaEBeVKb1EOMFRo*Ao^9Kcd*ui<T>*j(tfFk6Tp3Q9PC zu&pScl~hJHN|KsJh3Jeah$}uM$WWvPeT6s#6cT~OZd!C0Bp(Vsxfm`2t@i0MXaSo_ zR;>{BAb_TL2D1e#hER5L6iJIktWo$QQW7($Ty_D@1(U&T)!9sMG}C39Dgy!02`lV< z>!r{_a~!~A6HbNea{$0&gkZLj1ae0PLWBLU02Y)4@qYnAl0ZxldNt4nM9`E)kfu4G z9XcNBL|%$@_rA|@6CCvt16D28euy&-W`nNg?TsharH>DTdZ%bj9r4RKxa+72Omf&I@08QO z9B?9!%O(%ysc4@C(FzC1sl;(d5rvY0aw?GmKHdu?tLk`V0p?kPxY2d_p9H$~*a=3v zg3%+?DOok0A|Z9+8qiIZ?4VN8Xcm<}8kFf8p<~1s)PgJp8I}{TD?XfRh0sD0T&5_G z&_@cPXt@A2j&Bs`fs9$qMNC9q@|YBvBGX05XwEOXUu-0|Zxp_KrMho%h#B?!VgPEZi9 z9ciS!wb$9}_J3;&yX}vz0pkA;1E2}OSsyqv0E)5B^TWFOWGYHGWSW{=mbJFEcXTfA z%60eju2|VWkS`PmOXW%x7fpk(E>XflrddtS%`o7|=wg;TVH5ycA9X_ru?~2dA8cywUIG1AA zkXqaIs-?&;+r|#p;hZE>aZF#Pr&jCHTdC%m4z~gY0zOY{*X0jseqfC2YP_x~=@NmM!+3M{{|Y;Wo$~dY0Z8&D)T@Z{->a0lHy`jV+4SQR@D7LXn+0^>-Gfi=NZ#2;x!z>xM^xDIi^4}Rx+H>!A;V&hh<%V)k4)!+_(uiTF=yQ_+5xzmzz5jb_ZFa+-h_L##;sb3 zH-Sw=mRv2+vxmVINH=VO{DS-e>>=*$8S3SF7DfarHH9wazMjL|N@dtEpP(e)bBQ!4KxDd=~| z85~9ZD9tSTY8r)Cq-f-OX-*Q0bdMrXRh_WzZER7Rii*-S@Dj9Xn54EetWX9KSO@L) z31U_@^{wd77Y0iMh{^(v5qppr)(iwWYYT!$fVFUkAtQpVi1Okk%X+Ml!uZ0HH8ZL& z$*t@krPZJ(;Ks=9v^x>a1Ke(96lR{b1ha!}g++%A68+m4uLAp1Fe3j%q$Rw=(@*>- zZEG-x)GY8WOoGuYtamjf^vu;Fdfzn69YR&?dvQMgG@@23Hbqo`Srs_=J%c&8yJ&yL z=x(ugKhR;k9q{JSkRL9fr!+I9+ly;$wni%8sK?0C$Tc@Zit?`Fz4 z^eemCum-!!hTlMITNOATm=ZGf7H|T=&DfmlUYdrxj9ZVyZ-QWg32og@M&H*7x*b{u z6+qZ-WFxtOGKWMF(KrNa1H8X9E)v9a9ZSe{bp9itnr#%b2>4`;cErOXR&@7l30GBX zydLS~Z^6~@QYM&Xw9Ye##A<_eM!ib68wxb%7~FzPZX2u({C>~8h446em2pSV?fjR4 zBajV7vo|lnUVwkQ)LFS#N0bhafj@{ST*t`XdLDv37w{qU7K(2m=lOrO<^kXngc~eA zp~=HOVeO2`wYF~#l~Rrvv;}y?1P=ycTq?4O-v5~|X6iP;yEo;)jfP{RE&(6WeS^|!jzDIHCs^l*YUB{&6tcO9>!I|*5( ze3APEJ1NJ70i#g_{*}}gt7eh(!f%R98zsoT167yVNS#;m7wR*jm>H#1x%hyp5gw3+ zW#17rNw@>eP?VmGgR7eW%b`3)mSMk5>_<3==$8Vss?NKM=3n4``1*jHO8D=BzsG55 f@BH%djVDUETI6HRo&6G}V`H)HR9!OjO literal 240 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 diff --git a/inst/extdata/example.zarr/layers/dense_counts/.zarray b/inst/extdata/example.zarr/layers/dense_counts/.zarray index 5812a4fc..efaafc37 100644 --- a/inst/extdata/example.zarr/layers/dense_counts/.zarray +++ b/inst/extdata/example.zarr/layers/dense_counts/.zarray @@ -1,22 +1 @@ -{ - "chunks": [ - 50, - 100 - ], - "compressor": { - "blocksize": 0, - "clevel": 5, - "cname": "lz4", - "id": "blosc", - "shuffle": 1 - }, - "dtype": " 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 literal 4280 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 literal 78 zcmZQ#G~}4T$iM)?ehdr@B0y{g#QF^17#U>s88pCT44CW(lZU{hDTw^x3L@(r7#So2 H96$g7YBmby diff --git a/inst/extdata/example.zarr/obs/Int/.zarray b/inst/extdata/example.zarr/obs/Int/.zarray index 052f7298..50de36a3 100644 --- a/inst/extdata/example.zarr/obs/Int/.zarray +++ b/inst/extdata/example.zarr/obs/Int/.zarray @@ -1,20 +1 @@ -{ - "chunks": [ - 50 - ], - "compressor": { - "blocksize": 0, - "clevel": 5, - "cname": "lz4", - "id": "blosc", - "shuffle": 1 - }, - "dtype": "pni3ja{hPtQ)yP0dWqOUp{iNy$ja nN5@9SMa4wKL&HMCLBT-4ueZzHYO~m@wMv~zqXRKi0ssR6`dlTc literal 91 zcmZQ#G~}4T$iM)?(F_a>B0%g6#Q!xI7@3$^SlQS)IJvlac=`AR1cih}M8(7@Vxs_ KaJTV~et7^Q3@ds7 diff --git a/inst/extdata/example.zarr/obs/leiden/.zattrs b/inst/extdata/example.zarr/obs/leiden/.zattrs index 198a2dde..d135bdf0 100644 --- a/inst/extdata/example.zarr/obs/leiden/.zattrs +++ b/inst/extdata/example.zarr/obs/leiden/.zattrs @@ -1,5 +1 @@ -{ - "encoding-type": "categorical", - "encoding-version": "0.2.0", - "ordered": false -} \ No newline at end of file +{"encoding-type":"categorical","encoding-version":"0.2.0"} \ No newline at end of file diff --git a/inst/extdata/example.zarr/obs/leiden/.zgroup b/inst/extdata/example.zarr/obs/leiden/.zgroup index 3b7daf22..c71fe9d0 100644 --- a/inst/extdata/example.zarr/obs/leiden/.zgroup +++ b/inst/extdata/example.zarr/obs/leiden/.zgroup @@ -1,3 +1 @@ -{ - "zarr_format": 2 -} \ No newline at end of file +{"zarr_format":2} \ No newline at end of file diff --git a/inst/extdata/example.zarr/obs/leiden/categories/.zarray b/inst/extdata/example.zarr/obs/leiden/categories/.zarray index d8bb08a4..76692866 100644 --- a/inst/extdata/example.zarr/obs/leiden/categories/.zarray +++ b/inst/extdata/example.zarr/obs/leiden/categories/.zarray @@ -1,24 +1 @@ -{ - "chunks": [ - 6 - ], - "compressor": { - "blocksize": 0, - "clevel": 5, - "cname": "lz4", - "id": "blosc", - "shuffle": 1 - }, - "dtype": "|O", - "fill_value": 0, - "filters": [ - { - "id": "vlen-utf8" - } - ], - "order": "C", - "shape": [ - 6 - ], - "zarr_format": 2 -} \ No newline at end of file +{"zarr_format":2,"shape":[6],"chunks":[6],"dtype":"|O","compressor":{"id":"zstd","level":1},"fill_value":0,"order":"F","filters":[{"id":"vlen-utf8"}],"dimension_separator":"."} \ No newline at end of file diff --git a/inst/extdata/example.zarr/obs/leiden/categories/.zattrs b/inst/extdata/example.zarr/obs/leiden/categories/.zattrs deleted file mode 100644 index 6e14470f..00000000 --- a/inst/extdata/example.zarr/obs/leiden/categories/.zattrs +++ /dev/null @@ -1,4 +0,0 @@ -{ - "encoding-type": "string-array", - "encoding-version": "0.2.0" -} \ No newline at end of file diff --git a/inst/extdata/example.zarr/obs/leiden/categories/0 b/inst/extdata/example.zarr/obs/leiden/categories/0 index 17067cd3e2b813316e5afbd82d35a0db8421ba76..891d5d6b5b12f0c20879e6512f3fcc62d5fbbdd6 100644 GIT binary patch delta 14 VcmXrg=Fr%x|5rgtkZ~fvG5{N^1BL(q literal 50 mcmZQ#G-gy{U|;}YBOqo2Vn!e~01<{D!U#kdg9sB4VF~~)dI9MG diff --git a/inst/extdata/example.zarr/obs/leiden/codes/.zarray b/inst/extdata/example.zarr/obs/leiden/codes/.zarray index 146ad9f9..50de36a3 100644 --- a/inst/extdata/example.zarr/obs/leiden/codes/.zarray +++ b/inst/extdata/example.zarr/obs/leiden/codes/.zarray @@ -1,20 +1 @@ -{ - "chunks": [ - 50 - ], - "compressor": { - "blocksize": 0, - "clevel": 5, - "cname": "lz4", - "id": "blosc", - "shuffle": 1 - }, - "dtype": "|i1", - "fill_value": 0, - "filters": null, - "order": "C", - "shape": [ - 50 - ], - "zarr_format": 2 -} \ No newline at end of file +{"zarr_format":2,"shape":[50],"chunks":[50],"dtype":"6c=(f$o@lFF8)x!`gDNjU)Yig-MTASOvdkKCJKnSjfPx2M*%(n diff --git a/inst/extdata/example2.zarr/obs/leiden/ordered/.zarray b/inst/extdata/example.zarr/obs/leiden/ordered/.zarray similarity index 100% rename from inst/extdata/example2.zarr/obs/leiden/ordered/.zarray rename to inst/extdata/example.zarr/obs/leiden/ordered/.zarray diff --git a/inst/extdata/example2.zarr/obs/leiden/ordered/0 b/inst/extdata/example.zarr/obs/leiden/ordered/0 similarity index 100% rename from inst/extdata/example2.zarr/obs/leiden/ordered/0 rename to inst/extdata/example.zarr/obs/leiden/ordered/0 diff --git a/inst/extdata/example.zarr/obs/log1p_n_genes_by_counts/.zarray b/inst/extdata/example.zarr/obs/log1p_n_genes_by_counts/.zarray index ea552896..47c667b8 100644 --- a/inst/extdata/example.zarr/obs/log1p_n_genes_by_counts/.zarray +++ b/inst/extdata/example.zarr/obs/log1p_n_genes_by_counts/.zarray @@ -1,20 +1 @@ -{ - "chunks": [ - 50 - ], - "compressor": { - "blocksize": 0, - "clevel": 5, - "cname": "lz4", - "id": "blosc", - "shuffle": 1 - }, - "dtype": "KavC&-4Q_cimn%3^btS` zqxfD%#SuWhTqVIC3lf6lVvXdi5G*kp&i{01r@l`X64Yh(2`IU9v9F0xdT`eB!eJp2 zKq*cm6h&=iou&eNpb?5hHNm#lJu=d&d>*xSm)bgfK|zwB5Q*2!{8;Kv z?ASq}z>5b#iEiCI=s6L=gDcnvKfY>(zy7EIa5g<@0sx**KbEYF!ip)_02P0iK@rY7i-#@S=dG`WE-D2hJdesxaR zKXT)}ZkpQIwjj6Bh6BM;)p^TnQr zklz*|%i^}*$37fB_`M-U$m@w>#J>4)a7f)ai0f{ANLO(gv|`sS>%n2YPV41sS{^zt tWvi3AZrloj)%vS!{6{xPK+#vAatSV);E8TDXqo_^3U0*;xao`M{s6zOq3{3z diff --git a/inst/extdata/example.zarr/obs/log1p_total_counts/.zarray b/inst/extdata/example.zarr/obs/log1p_total_counts/.zarray index 457c7f42..47c667b8 100644 --- a/inst/extdata/example.zarr/obs/log1p_total_counts/.zarray +++ b/inst/extdata/example.zarr/obs/log1p_total_counts/.zarray @@ -1,20 +1 @@ -{ - "chunks": [ - 50 - ], - "compressor": { - "blocksize": 0, - "clevel": 5, - "cname": "lz4", - "id": "blosc", - "shuffle": 1 - }, - "dtype": "wJ-f(kN}ki0OSV%001DvN)Z)0JxXHr|cjAA{9W57x3>Clwgi^py5h`He?8LSQ~}h WfHu>Ei;#hfV}%>qC|_`l zvyNQ+D)%+TPFQk}-9fHRU+vN*-+G5Vv%UL8+SbW;PuLcr@6TB~l9t-)6mNOHH+74E z^q%M4=^E*KQn!UYN`0Ugke+HA<~nKBiWMtYtzNNu&GJ<%S1ew>YRSq~E0(QUwtUU< mWh+;&Sh8}(nib2JuU-Y@u3Ecd`HEFbS2%zGD}!hNm;nHhp;z$$ diff --git a/inst/extdata/example.zarr/obs/n_genes_by_counts/.zarray b/inst/extdata/example.zarr/obs/n_genes_by_counts/.zarray index 76958648..50de36a3 100644 --- a/inst/extdata/example.zarr/obs/n_genes_by_counts/.zarray +++ b/inst/extdata/example.zarr/obs/n_genes_by_counts/.zarray @@ -1,20 +1 @@ -{ - "chunks": [ - 50 - ], - "compressor": { - "blocksize": 0, - "clevel": 5, - "cname": "lz4", - "id": "blosc", - "shuffle": 1 - }, - "dtype": "5U?e!21Fv4wj^+%BuNUM0{*}*Q##28n?}&DWU{Xsi)-zFv4~G@dCCZ6-xjB diff --git a/inst/extdata/example.zarr/obs/total_counts/.zarray b/inst/extdata/example.zarr/obs/total_counts/.zarray index 457c7f42..47c667b8 100644 --- a/inst/extdata/example.zarr/obs/total_counts/.zarray +++ b/inst/extdata/example.zarr/obs/total_counts/.zarray @@ -1,20 +1 @@ -{ - "chunks": [ - 50 - ], - "compressor": { - "blocksize": 0, - "clevel": 5, - "cname": "lz4", - "id": "blosc", - "shuffle": 1 - }, - "dtype": "4@HOq12UL$u zJt|_D`u0-^<3tvz BL_Gii literal 95 zcmZQ#G-Nr!z`y{)@jxsB#O^>W&%nqK@L$8n+1@iC&^{>A#>c}>-PTLX&ClLA%FH&# l%FHFuNyptG!okKW)F;-;+&jU+%HBuM(HR6-8AJoX3;=0~6mI|k diff --git a/inst/extdata/example.zarr/obsm/.zattrs b/inst/extdata/example.zarr/obsm/.zattrs index a204673f..468e470d 100644 --- a/inst/extdata/example.zarr/obsm/.zattrs +++ b/inst/extdata/example.zarr/obsm/.zattrs @@ -1,4 +1 @@ -{ - "encoding-type": "dict", - "encoding-version": "0.1.0" -} \ No newline at end of file +{"encoding-type":"dict","encoding-version":"0.1.0"} \ No newline at end of file diff --git a/inst/extdata/example.zarr/obsm/.zgroup b/inst/extdata/example.zarr/obsm/.zgroup index 3b7daf22..c71fe9d0 100644 --- a/inst/extdata/example.zarr/obsm/.zgroup +++ b/inst/extdata/example.zarr/obsm/.zgroup @@ -1,3 +1 @@ -{ - "zarr_format": 2 -} \ No newline at end of file +{"zarr_format":2} \ No newline at end of file diff --git a/inst/extdata/example.zarr/obsm/X_pca/.zarray b/inst/extdata/example.zarr/obsm/X_pca/.zarray index e9dc91a2..7eb3a10b 100644 --- a/inst/extdata/example.zarr/obsm/X_pca/.zarray +++ b/inst/extdata/example.zarr/obsm/X_pca/.zarray @@ -1,22 +1 @@ -{ - "chunks": [ - 50, - 38 - ], - "compressor": { - "blocksize": 0, - "clevel": 5, - "cname": "lz4", - "id": "blosc", - "shuffle": 1 - }, - "dtype": "@OWOa6(HfcJe{+ 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 literal 7572 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 K^s~SA{qaDiUc%h~ diff --git a/inst/extdata/example.zarr/obsp/.zattrs b/inst/extdata/example.zarr/obsp/.zattrs index a204673f..468e470d 100644 --- a/inst/extdata/example.zarr/obsp/.zattrs +++ b/inst/extdata/example.zarr/obsp/.zattrs @@ -1,4 +1 @@ -{ - "encoding-type": "dict", - "encoding-version": "0.1.0" -} \ No newline at end of file +{"encoding-type":"dict","encoding-version":"0.1.0"} \ No newline at end of file diff --git a/inst/extdata/example.zarr/obsp/.zgroup b/inst/extdata/example.zarr/obsp/.zgroup index 3b7daf22..c71fe9d0 100644 --- a/inst/extdata/example.zarr/obsp/.zgroup +++ b/inst/extdata/example.zarr/obsp/.zgroup @@ -1,3 +1 @@ -{ - "zarr_format": 2 -} \ No newline at end of file +{"zarr_format":2} \ No newline at end of file diff --git a/inst/extdata/example.zarr/obsp/connectivities/.zattrs b/inst/extdata/example.zarr/obsp/connectivities/.zattrs index ad72404f..fcbdbc4d 100644 --- a/inst/extdata/example.zarr/obsp/connectivities/.zattrs +++ b/inst/extdata/example.zarr/obsp/connectivities/.zattrs @@ -1,8 +1 @@ -{ - "encoding-type": "csr_matrix", - "encoding-version": "0.1.0", - "shape": [ - 50, - 50 - ] -} \ No newline at end of file +{"encoding-type":"csr_matrix","encoding-version":"0.1.0","shape":[50,50]} \ No newline at end of file diff --git a/inst/extdata/example.zarr/obsp/connectivities/.zgroup b/inst/extdata/example.zarr/obsp/connectivities/.zgroup index 3b7daf22..c71fe9d0 100644 --- a/inst/extdata/example.zarr/obsp/connectivities/.zgroup +++ b/inst/extdata/example.zarr/obsp/connectivities/.zgroup @@ -1,3 +1 @@ -{ - "zarr_format": 2 -} \ No newline at end of file +{"zarr_format":2} \ No newline at end of file diff --git a/inst/extdata/example.zarr/obsp/connectivities/data/.zarray b/inst/extdata/example.zarr/obsp/connectivities/data/.zarray index 88b4ddf1..a2eec99b 100644 --- a/inst/extdata/example.zarr/obsp/connectivities/data/.zarray +++ b/inst/extdata/example.zarr/obsp/connectivities/data/.zarray @@ -1,20 +1 @@ -{ - "chunks": [ - 964 - ], - "compressor": { - "blocksize": 0, - "clevel": 5, - "cname": "lz4", - "id": "blosc", - "shuffle": 1 - }, - "dtype": "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 O?QoQypy*I81jtq##2XI) literal 3568 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 K+9(mcG5-%9a*(_L diff --git a/inst/extdata/example.zarr/obsp/connectivities/indices/.zarray b/inst/extdata/example.zarr/obsp/connectivities/indices/.zarray index 81f30d84..2f6c77a8 100644 --- a/inst/extdata/example.zarr/obsp/connectivities/indices/.zarray +++ b/inst/extdata/example.zarr/obsp/connectivities/indices/.zarray @@ -1,20 +1 @@ -{ - "chunks": [ - 964 - ], - "compressor": { - "blocksize": 0, - "clevel": 5, - "cname": "lz4", - "id": "blosc", - "shuffle": 1 - }, - "dtype": "i&bubF(`SogMcDI<>%Il)FIwkyix!cQZB_!5y(P}uAdVV)GGchl<*sJ4W zqV=#^IE?~=etLd6xt7|>Ny$h^#YAf%bt)wc1pMS)YA3OaidE{AFfjVr`R#HkCnd4h zMn=WzR0_G*D~Y`(S`Vv+Q^CN{PR=dnrIs@Ckx|h~?euDP zx!Y_d<+V|9Dh2&|IXAbL*+}fwidZcq925)${Bm}=+HBx#^6IE)rA`AmH8Z=ITFOXB?A38m5vNkYC}1e4XXmD7mwTD5oQ#BgbZlf?Ohh!K zP6q`;J2^KmB_pqnjn?X5VCQC+yT#OIDIXmh7p;hfQ^7#M&#z{etIbkQLShpMqo1Cg zU(QXbQt#IF&}dU9P2e5_`2G8WKhUHMd$yNykL1;goPNFdFLJ?6r}RD)nw=b}hA)*z2NVq80J5kUEtT4hjZFLq9veo0(m1wo>vDdu3d-B2uSP z!a+e$O-yYhB=*|4sCZZ{q)rK=p`Bmv7V}b@os4|ME+!rZdU9rVx0YH;NXEme;dC(Y z>($I+ua1d_RYU4jIv5E0`SogYx0jaMY$fHSB;@0jQ8CeqST&?hrGuZH-tP9&GFwSG j3HgYECI@bPTYm7@NbWsaSA9Cf~0CxH<;t5Szc64d!5() zcnBgjtP69zFp8V5zmL@aq)?kNu)eZA>nDAT6dOWxh z5HK&c7lb)H^f=xRXknQ!PU@z`cx(^P;07o*U?v$~W?lt;+pugF#Th0}u=yYwb%O}| zV4HE-2;}_)Zn}P$x2GgizP1BMTx_`SzyaT|fYGk!heg!`17G;yq$F8|s*NO)wB-5R zr;E@YS}FYbk>QFY?+mHvy8Ypfy<8$6wN{K;htJ+Bhmfl))E{ zumu>y!fn|O0%N*~92`8tLT8=0y^&`uRpfPC9JHdwZ%N^({j@xjopqUrpVOFl!d(}F$$q{*Bx xFPmZHWdec-?_dkCh{3ecT4XoeW=-cPP%(tIY&PEHnh50me*gS}?}Yr%$v;|FaK-=t diff --git a/inst/extdata/example.zarr/obsp/connectivities/indptr/.zarray b/inst/extdata/example.zarr/obsp/connectivities/indptr/.zarray index fab71faf..cb92258e 100644 --- a/inst/extdata/example.zarr/obsp/connectivities/indptr/.zarray +++ b/inst/extdata/example.zarr/obsp/connectivities/indptr/.zarray @@ -1,20 +1 @@ -{ - "chunks": [ - 51 - ], - "compressor": { - "blocksize": 0, - "clevel": 5, - "cname": "lz4", - "id": "blosc", - "shuffle": 1 - }, - "dtype": "o0%tFv;lI`=+-|S+VWHb5>?iRWpx-%I=vfwjE(+00Se12iGG%rA||gPXkd$ z51iTb}Ha>~dh@#{p)3n-2yX0Atxb AB>(^b literal 109 zcmZQ#G-Nr$z`y{)xj-xe#Gyd^Rg*zL&eSs^qh|8fQ#W4z=an;ak143{TeSE3%U?V) zdiK8QZBtfkyYQSunM diff --git a/inst/extdata/example.zarr/obsp/distances/.zattrs b/inst/extdata/example.zarr/obsp/distances/.zattrs index ad72404f..fcbdbc4d 100644 --- a/inst/extdata/example.zarr/obsp/distances/.zattrs +++ b/inst/extdata/example.zarr/obsp/distances/.zattrs @@ -1,8 +1 @@ -{ - "encoding-type": "csr_matrix", - "encoding-version": "0.1.0", - "shape": [ - 50, - 50 - ] -} \ No newline at end of file +{"encoding-type":"csr_matrix","encoding-version":"0.1.0","shape":[50,50]} \ No newline at end of file diff --git a/inst/extdata/example.zarr/obsp/distances/.zgroup b/inst/extdata/example.zarr/obsp/distances/.zgroup index 3b7daf22..c71fe9d0 100644 --- a/inst/extdata/example.zarr/obsp/distances/.zgroup +++ b/inst/extdata/example.zarr/obsp/distances/.zgroup @@ -1,3 +1 @@ -{ - "zarr_format": 2 -} \ No newline at end of file +{"zarr_format":2} \ No newline at end of file diff --git a/inst/extdata/example.zarr/obsp/distances/data/.zarray b/inst/extdata/example.zarr/obsp/distances/data/.zarray index d9961d3e..3110581d 100644 --- a/inst/extdata/example.zarr/obsp/distances/data/.zarray +++ b/inst/extdata/example.zarr/obsp/distances/data/.zarray @@ -1,20 +1 @@ -{ - "chunks": [ - 700 - ], - "compressor": { - "blocksize": 0, - "clevel": 5, - "cname": "lz4", - "id": "blosc", - "shuffle": 1 - }, - "dtype": "=87c(Fz>p+w*3@XWTOzgvkL$0C`P%VZfFkvVGbJY5-k?^fu=VChT+<_0V=WP%&&wh(a4%T;`@^h%@+YGDTIuyJV*Jfq+)w8bjx}T} zj!hr!c%C3w4RB*Inx|1ttXwK}NJ{tx5RcgR9bs}z;807U^d-}jK5e0iwvx&3HgNob z>*EDVJd-<~W^(a1jsNoeRkQYQp{$P$tu&uOKQWe5SFN~&i6{`5<@i>dm-d@NM^{^* zaTU#s|Kpg$JmM`%T`GDh8`pFYao@y4+AIo}akNx|&aBsMPQNp5{0)|-m=s#YxLw99 zcENet=E!2y?dV*=$40U(M8NV*vR_BB%eHo!vMl-$d?JMcT zRS1_GbJ5S0Sq2@Q?F4s@O8QJDK^tOGDUew#8KPq^zK`j^bqpoaPeYBe`6_E)Jg;#O zC?0S5)|vVE!32E4%T$88wRYc3M%r4tF)#D2wE-4i#o!o48Jz_H>4$@fR`?5{Qez8h z*I3V6X)6|#)Om!7p7~}GgBy0~pJf+31SI?pX!NO;=9uk=y_NKOif3ih4q6&Z7;INW zUo>16r$Ac|F?(4WmqrYDaE}=4J#x7NwZ}J1?5hXSa!n@4m605?eR*63x?;S%-GqzV zPb?5VK!-~ux3LWO+288aVC3H{iay42`)10lGcZf1dkEL2WE{V6fP4(-xNjuLeaT4j zW05_DlgD41L#J2}cr1nTt4%9@iVf_~QBqYp8XE%Bube`izaVkkRn|9&K=DJ;CGP{b zbAza^J`1dvuj2?p_LE5%X9Onj##wf!ra4~BO)HLhK7PKA-D&}n%?Gf2eBo}zl*}{+ zWM$(xHdfA7e?~z!4!IUrfGZ;8{^N+}u53PgvKi{PZZJ?qXML^$sB<0wj_rJL+@)#7 z>zUpAi`>jTD$c(B+w*VAZizNFWt_9(AX7f}p@L%%Yb%a}#_uLV{33RaT?pzZ zsH*n)E(KR=@a#v<;&Jj!=ZReuW3LFasC}#`M0>sHPi*8)Hg=AzvLUGf`_>3xt+iYI zinJMUd-aNlSD}g;Q4}s>!&b&re3yJU~pV8WQO|!~a_&fW4jUcw2X+qO0@iYg4s(>UZx@ zXVPn9JPw3u~aOSUj!;m2cXcy3G3uO=2>Q~vmm z#m{DwK1RFz7n(X(*xUDq-I_8;``C4yhQwk=I5rY9X08{`+mF-SPj2}K8zTo?2s3{3 z^3BUp^iDllJxvpLT2=TjhX>tIP9>E<+LCL^M=Bt%*&%~t~}y@WQbcevH6 ztZ}6zUP{MRqiFG&nZ*JZNYu^A*`oXu8Az8O1oY&XnOSvx;nwMxJ1wI4dLj?h#LyP=Lf{5#NQM_G|O z34NxidobvuGwzXnoUw^J=1v1H!83M0iloO8BhnTDN2;vAW)q}=gbvVHBW2V7n|^5H zq!Wc0foumT zK3uqvb+Xcq%m1x**J(Z4)qNMp*r&GOQIl)Oua5{fBig!e|CxfE1=W81Z4vW8PRF$) z`W^!^Oy?PEzqxd-{d(qRQVaHS&V&~+2kQ(TxMlo6PtbO8#f-g@S)SLkH!q?(mi_1u z>yy7u94>A75dNB2|Fg}a28O9K8^YSb+_xQVAaxPi;}DMVB5TiHZOc|9vz?EhK;$GW zcX&SEoYEaAHgVYxcSCaePg4z>_b_5KTEw8daWR(``+a82$cHaQ=G@)AaqE_O<`2<1 zbXX7F(`W`DrJB#PA!U zZMYM`7!V#Bj)PAu557t7dbhS)@^Y(9>=#OG2do;LrQ;97VEBBo=C-$>Yj~^i(v(4p zg}||^&d3SG0*9p}aE=4Lbhxi>PS7*4VU7+RJC`|$GFNZUVzhdap483?YNsikBE#ps zK(x;eyrE01EGeuE5|~4-xplq3Xx+QMIQN<+A)VJgp_MJ<1<2*z4AQh7P3oCrUGRRy Y|Adz*9kAtV(T(^{ZPL?P_(SKl0@C8L6aWAK literal 2844 zcma)8|6dL19)Bh$<#f)OnR9$y=eAF^sJ8M-B6RIsx^?Xlp-o(?Zj>^mZV#lG=PyT^@rl)!4na}6_?U^5r73E+n zk3on`y&XcM5khL1A0rCAe_y-^mVafV+6o}Bh_Q?$%ppz^Wf3+c4$Cqp$fC?+UXT!y zI01{ifZ&ov9*LOac~KN4K@`bdgdJIyupmgXAYhCoj0G9q@&bni#A5-Fv4kW7jxi6- zz<@+S7T}%4@rXmbAVR;uLytiEd4xnx6ks9_^D^QQ6iX5YiJZUzEeF*i$O7?_1Z?m| z;y8jR2^>VI%^j1VRK!kYI?Q4B#Zd6o3>!z!f5< zu>>|bNyfm*3oJYW&IutXpifl9z2sRFyqaio?w1|T9t z1XY{>e4t+jBNFBWP>jJK0uq@6&l1o>Ey9uncpw(Eh`=Eu2@Db!u*b?^G8AwEbaFgM1e0Jy0<|0#p%;a}LcI}F-p(UsGs*~1C$T`1389eVvq1YW1wq$>Oqx;~g+?d$GnDSI)$5 zzrcq5JG%W$9jOy6W~r3geyN~i`U_Q@Rp{>C2NzS?&v&j{ef_?5l-9FmHC zolEP^q_wp)cw+uiW4W>9vq=4m2a)DylvlFhiuN0q#LO9~t(``Sar-LV zU=@F(#>FO1Q~&f`zlTGyDqTbz+J+Q#1BI{MwI(A$k}bi0dPS^<;fL>UsyD8SUOq~#tcc52 z`!Z{&5@<4d|c=tO| z1<9MHAN5|LsPI2rzW9Ri@SOC)n5w3`$T{5A*2&-JspX%Av2Gr$)9>XY7diGdd%xf7 zS#!kEbnRBxArIZd#U9o*N0wK-z4G_C_&ST_XtBY!wtT_mQ2+FC-^C5NR*Y~saZKH` z0-5d4EFKZ^$J|NoWj$@Pl_f#ELr7lnjSKp;=T>i41}{v!u=+@zqu1kR#f|vzQwx8X z`Sy?EC#hn~&h#$n`vr5KcsHcXjAUVXaYm_BxOI=gjgQch88UA~=DoO_;k zt2jBZ%4SfXd23REO~2o=lmNetirQrVva|+;I9pHO(OsN&b|i#w0)-SCSc=9Q`XM~{tN?nO)L-y}YDxgOZ=`_h!+pLz6xDYaSm z=iv6=g8dxxz19fu{l1*UGFn!vX5q%rT9##X+7E-=Sw_t;j0PqRe=Nf)VQI&*G#cE< zYFV9*VWCO~OO|0+D1v?%@YPH4huSlUfQr)2DB=5Ae|=K2mr0#fNEh)?9dt&%Y>nR44?#8LrMtEu%uyE zq!Uy!kN~6AX-N<)y9&j@f8zczV(n}w%rf^8!&V{8Xsjs*hPFbC+6GaHhzdb0Jq5)x z8Wp2r+35)BkV1h_7wWfyG>4f$E=v;{Uv!qGAq${Wv2-~aupydgS_gxL3sTg940bQ- z9}B^ep5fHgG(4#xXOIv2G$a>@m1X>p1fE!ibi*06A_o5IL<G^p=J4y^JQM2)8~L+2wjkz(wes8=6B zzY0zZKs3AZGWWYtv57OI3z0`pck|l`O>L5`S6bxG>jGz`;hJW^QAAa_7 GWc(lIusRU{ diff --git a/inst/extdata/example.zarr/obsp/distances/indices/.zarray b/inst/extdata/example.zarr/obsp/distances/indices/.zarray index b59e1319..cbbd003b 100644 --- a/inst/extdata/example.zarr/obsp/distances/indices/.zarray +++ b/inst/extdata/example.zarr/obsp/distances/indices/.zarray @@ -1,20 +1 @@ -{ - "chunks": [ - 700 - ], - "compressor": { - "blocksize": 0, - "clevel": 5, - "cname": "lz4", - "id": "blosc", - "shuffle": 1 - }, - "dtype": "1;9ykp^qtGT(+2wAv+3M4<`7V`&jabI3RdFhHHVfYXlL>Yo zu>~?-7Za&ZC$qafsLf)ni_(J6cgfv4Vi~Pdsnf8jBusL(*{d~?Dm82}UnP>;sKpw* zTB*}$lbJ+vw_3)lRWS-Je3wZicdNxRTB%bh^yw^QavvQJHeM5@(WjI7CLa$rYOje? zDHp5Msr30SkzGe^meE>8q(To3nQwyKM@L4*L}|33vq_ljYO~m@b&(o{It}0Cf!u@I z?A5whMVuZgkq2@gwFaxx=YUP-n?!cE+ANka5qjt}e3yjWtu~9jPNf9CO2Pn<2eny7 zgI8!{6IsZ*)bkohVPUK0_gQs{HQ zCi7JyyWB07@oKFmQm4?v5g literal 775 zcmaiyU2>x^5QJs0K^Pe!Y!F~53Br#75hpjvC3A~C)ZQT5Xge=1 zX*)&|o!Xo^G@8hy*=fC401GmO(?+ZhbXy0!h=u2O^^0&H(pYwWPB4B@#%XJe=Bop~V# zC5yWK`GExDsxf8PV;b*>@KwJ)BlpJvF{ z5Ea@V(Y?^(tJ*$rA-JW1!SBl=S&ap5VMJ!sHZI$zN6U?6n&0s#9^evFV*{eohQZpJmH<-# diff --git a/inst/extdata/example.zarr/uns/BoolNA/.zattrs b/inst/extdata/example.zarr/uns/BoolNA/.zattrs index a643cd9f..75fcc6b4 100644 --- a/inst/extdata/example.zarr/uns/BoolNA/.zattrs +++ b/inst/extdata/example.zarr/uns/BoolNA/.zattrs @@ -1,4 +1 @@ -{ - "encoding-type": "nullable-boolean", - "encoding-version": "0.1.0" -} \ No newline at end of file +{"encoding-type":"nullable-boolean","encoding-version":"0.1.0"} \ No newline at end of file diff --git a/inst/extdata/example.zarr/uns/BoolNA/.zgroup b/inst/extdata/example.zarr/uns/BoolNA/.zgroup index 3b7daf22..c71fe9d0 100644 --- a/inst/extdata/example.zarr/uns/BoolNA/.zgroup +++ b/inst/extdata/example.zarr/uns/BoolNA/.zgroup @@ -1,3 +1 @@ -{ - "zarr_format": 2 -} \ No newline at end of file +{"zarr_format":2} \ No newline at end of file diff --git a/inst/extdata/example.zarr/uns/BoolNA/mask/.zarray b/inst/extdata/example.zarr/uns/BoolNA/mask/.zarray index 96a710dd..119ba4b7 100644 --- a/inst/extdata/example.zarr/uns/BoolNA/mask/.zarray +++ b/inst/extdata/example.zarr/uns/BoolNA/mask/.zarray @@ -1,20 +1 @@ -{ - "chunks": [ - 3 - ], - "compressor": { - "blocksize": 0, - "clevel": 5, - "cname": "lz4", - "id": "blosc", - "shuffle": 1 - }, - "dtype": "|b1", - "fill_value": false, - "filters": null, - "order": "C", - "shape": [ - 3 - ], - "zarr_format": 2 -} \ No newline at end of file +{"zarr_format":2,"shape":[3],"chunks":[3],"dtype":"|b1","compressor":{"id":"zstd","level":1},"fill_value":false,"order":"F","filters":null,"dimension_separator":"."} \ No newline at end of file diff --git a/inst/extdata/example.zarr/uns/BoolNA/mask/.zattrs b/inst/extdata/example.zarr/uns/BoolNA/mask/.zattrs deleted file mode 100644 index 2b8d6d97..00000000 --- a/inst/extdata/example.zarr/uns/BoolNA/mask/.zattrs +++ /dev/null @@ -1,4 +0,0 @@ -{ - "encoding-type": "array", - "encoding-version": "0.2.0" -} \ No newline at end of file diff --git a/inst/extdata/example.zarr/uns/BoolNA/mask/0 b/inst/extdata/example.zarr/uns/BoolNA/mask/0 index 53a4fe78f4c83099c5f2a4caad8942829976b375..0fcc4407634763009403ae7a5b89dc7005d9cf92 100644 GIT binary patch literal 12 RcmdPcs{dDkS&{(=7y%X<0!IJ< literal 19 WcmZQ#G-hOGU|;}YVIXE;U<3dJk^oWw diff --git a/inst/extdata/example.zarr/uns/BoolNA/values/.zarray b/inst/extdata/example.zarr/uns/BoolNA/values/.zarray index 96a710dd..119ba4b7 100644 --- a/inst/extdata/example.zarr/uns/BoolNA/values/.zarray +++ b/inst/extdata/example.zarr/uns/BoolNA/values/.zarray @@ -1,20 +1 @@ -{ - "chunks": [ - 3 - ], - "compressor": { - "blocksize": 0, - "clevel": 5, - "cname": "lz4", - "id": "blosc", - "shuffle": 1 - }, - "dtype": "|b1", - "fill_value": false, - "filters": null, - "order": "C", - "shape": [ - 3 - ], - "zarr_format": 2 -} \ No newline at end of file +{"zarr_format":2,"shape":[3],"chunks":[3],"dtype":"|b1","compressor":{"id":"zstd","level":1},"fill_value":false,"order":"F","filters":null,"dimension_separator":"."} \ No newline at end of file diff --git a/inst/extdata/example.zarr/uns/BoolNA/values/.zattrs b/inst/extdata/example.zarr/uns/BoolNA/values/.zattrs deleted file mode 100644 index 2b8d6d97..00000000 --- a/inst/extdata/example.zarr/uns/BoolNA/values/.zattrs +++ /dev/null @@ -1,4 +0,0 @@ -{ - "encoding-type": "array", - "encoding-version": "0.2.0" -} \ No newline at end of file diff --git a/inst/extdata/example.zarr/uns/BoolNA/values/0 b/inst/extdata/example.zarr/uns/BoolNA/values/0 index 06ea1a1dd09cb65062a75ced2707cc33f870e89b..3b40250bae736d8511cbaef552ce0552425f5645 100644 GIT binary patch literal 12 TcmdPcs{dDkS(1T)k%0jK790Xc literal 19 WcmZQ#G-hOGU|;}YVIXE?U;qFFlmJoy diff --git a/inst/extdata/example.zarr/uns/Category/.zattrs b/inst/extdata/example.zarr/uns/Category/.zattrs index 198a2dde..d135bdf0 100644 --- a/inst/extdata/example.zarr/uns/Category/.zattrs +++ b/inst/extdata/example.zarr/uns/Category/.zattrs @@ -1,5 +1 @@ -{ - "encoding-type": "categorical", - "encoding-version": "0.2.0", - "ordered": false -} \ No newline at end of file +{"encoding-type":"categorical","encoding-version":"0.2.0"} \ No newline at end of file diff --git a/inst/extdata/example.zarr/uns/Category/.zgroup b/inst/extdata/example.zarr/uns/Category/.zgroup index 3b7daf22..c71fe9d0 100644 --- a/inst/extdata/example.zarr/uns/Category/.zgroup +++ b/inst/extdata/example.zarr/uns/Category/.zgroup @@ -1,3 +1 @@ -{ - "zarr_format": 2 -} \ No newline at end of file +{"zarr_format":2} \ No newline at end of file diff --git a/inst/extdata/example.zarr/uns/Category/categories/.zarray b/inst/extdata/example.zarr/uns/Category/categories/.zarray index eca134e7..a297241a 100644 --- a/inst/extdata/example.zarr/uns/Category/categories/.zarray +++ b/inst/extdata/example.zarr/uns/Category/categories/.zarray @@ -1,24 +1 @@ -{ - "chunks": [ - 2 - ], - "compressor": { - "blocksize": 0, - "clevel": 5, - "cname": "lz4", - "id": "blosc", - "shuffle": 1 - }, - "dtype": "|O", - "fill_value": 0, - "filters": [ - { - "id": "vlen-utf8" - } - ], - "order": "C", - "shape": [ - 2 - ], - "zarr_format": 2 -} \ No newline at end of file +{"zarr_format":2,"shape":[2],"chunks":[2],"dtype":"|O","compressor":{"id":"zstd","level":1},"fill_value":0,"order":"F","filters":[{"id":"vlen-utf8"}],"dimension_separator":"."} \ No newline at end of file diff --git a/inst/extdata/example.zarr/uns/Category/categories/.zattrs b/inst/extdata/example.zarr/uns/Category/categories/.zattrs deleted file mode 100644 index 6e14470f..00000000 --- a/inst/extdata/example.zarr/uns/Category/categories/.zattrs +++ /dev/null @@ -1,4 +0,0 @@ -{ - "encoding-type": "string-array", - "encoding-version": "0.2.0" -} \ No newline at end of file diff --git a/inst/extdata/example.zarr/uns/Category/categories/0 b/inst/extdata/example.zarr/uns/Category/categories/0 index ce7b8ec266513862d56663b31342eae07e7e8f06..871cdfdd8ed9eb2ac65be630149074759ccaeae7 100644 GIT binary patch literal 23 acmdPcs{dDkuaJR(iGhKE5r`8(L=pfvj0120 literal 30 bcmZQ#G-l*uU|;}YIUr^NVn!fN1QAI94YdI| diff --git a/inst/extdata/example.zarr/uns/Category/codes/.zarray b/inst/extdata/example.zarr/uns/Category/codes/.zarray index 65b4e12d..3bb1821d 100644 --- a/inst/extdata/example.zarr/uns/Category/codes/.zarray +++ b/inst/extdata/example.zarr/uns/Category/codes/.zarray @@ -1,20 +1 @@ -{ - "chunks": [ - 3 - ], - "compressor": { - "blocksize": 0, - "clevel": 5, - "cname": "lz4", - "id": "blosc", - "shuffle": 1 - }, - "dtype": "|i1", - "fill_value": 0, - "filters": null, - "order": "C", - "shape": [ - 3 - ], - "zarr_format": 2 -} \ No newline at end of file +{"zarr_format":2,"shape":[3],"chunks":[3],"dtype":"@Vxs_ KaJTV~et7^Q3@ds7 diff --git a/inst/extdata/example.zarr/uns/Int/.zarray b/inst/extdata/example.zarr/uns/Int/.zarray index 82cf9225..3bb1821d 100644 --- a/inst/extdata/example.zarr/uns/Int/.zarray +++ b/inst/extdata/example.zarr/uns/Int/.zarray @@ -1,20 +1 @@ -{ - "chunks": [ - 3 - ], - "compressor": { - "blocksize": 0, - "clevel": 5, - "cname": "lz4", - "id": "blosc", - "shuffle": 1 - }, - "dtype": "pF literal 28 UcmZQ#G-lypU|;}Y86ZXm0143mZvX%Q diff --git a/inst/extdata/example.zarr/uns/Sparse1D/indptr/.zarray b/inst/extdata/example.zarr/uns/Sparse1D/indptr/.zarray index 54ceff10..095926c2 100644 --- a/inst/extdata/example.zarr/uns/Sparse1D/indptr/.zarray +++ b/inst/extdata/example.zarr/uns/Sparse1D/indptr/.zarray @@ -1,20 +1 @@ -{ - "chunks": [ - 7 - ], - "compressor": { - "blocksize": 0, - "clevel": 5, - "cname": "lz4", - "id": "blosc", - "shuffle": 1 - }, - "dtype": ";5GDp@MgV=C1WNz_ literal 44 ccmZQ#G-i=uU|;}Y9Uuk)Mj&QF!^}WF02mbjs{jB1 diff --git a/inst/extdata/example.zarr/uns/String/.zarray b/inst/extdata/example.zarr/uns/String/.zarray index c72e14d0..e3dba627 100644 --- a/inst/extdata/example.zarr/uns/String/.zarray +++ b/inst/extdata/example.zarr/uns/String/.zarray @@ -1,24 +1 @@ -{ - "chunks": [ - 10 - ], - "compressor": { - "blocksize": 0, - "clevel": 5, - "cname": "lz4", - "id": "blosc", - "shuffle": 1 - }, - "dtype": "|O", - "fill_value": 0, - "filters": [ - { - "id": "vlen-utf8" - } - ], - "order": "C", - "shape": [ - 10 - ], - "zarr_format": 2 -} \ No newline at end of file +{"zarr_format":2,"shape":[10],"chunks":[10],"dtype":"|O","compressor":{"id":"zstd","level":1},"fill_value":0,"order":"F","filters":[{"id":"vlen-utf8"}],"dimension_separator":"."} \ No newline at end of file diff --git a/inst/extdata/example.zarr/uns/String/.zattrs b/inst/extdata/example.zarr/uns/String/.zattrs index 6e14470f..5b014145 100644 --- a/inst/extdata/example.zarr/uns/String/.zattrs +++ b/inst/extdata/example.zarr/uns/String/.zattrs @@ -1,4 +1 @@ -{ - "encoding-type": "string-array", - "encoding-version": "0.2.0" -} \ No newline at end of file +{"encoding-type":"string-array","encoding-version":"0.2.0"} \ No newline at end of file diff --git a/inst/extdata/example.zarr/uns/String/0 b/inst/extdata/example.zarr/uns/String/0 index 69e80e6fc2b5a929b17278acdd9796bc8cfb532f..fc79f96daf8f30f28e64baa86037ccd3be6f2842 100644 GIT binary patch literal 50 zcmdPcs{dD^#+Q-d1Q!DX0|yWXmlS2@r7IX18X23InweWzaP;e4U+S73=EBoO+eVx%-q7#5-4I4vLdniKktXB ph5`i>ca*Fs{BhxxyMKJy&mX6qv*m67-gwIXBR~E}g|_9yPyp3HA_4#a literal 343 zcmZQ#RAh`{VqgH_a7G3O5e5bZdm#PU&H;I;Bsi@p^1x|kf<}j66iq_0QGV$IRF3v diff --git a/inst/extdata/example.zarr/uns/StringScalar/.zarray b/inst/extdata/example.zarr/uns/StringScalar/.zarray index 79c2b483..05d304d2 100644 --- a/inst/extdata/example.zarr/uns/StringScalar/.zarray +++ b/inst/extdata/example.zarr/uns/StringScalar/.zarray @@ -1,10 +1 @@ -{ - "chunks": [], - "compressor": null, - "dtype": ")H;$k2!0pcPc&IIB-AWjEj05Gru`2YX_ diff --git a/inst/extdata/example.zarr/uns/hvg/.zattrs b/inst/extdata/example.zarr/uns/hvg/.zattrs index a204673f..468e470d 100644 --- a/inst/extdata/example.zarr/uns/hvg/.zattrs +++ b/inst/extdata/example.zarr/uns/hvg/.zattrs @@ -1,4 +1 @@ -{ - "encoding-type": "dict", - "encoding-version": "0.1.0" -} \ No newline at end of file +{"encoding-type":"dict","encoding-version":"0.1.0"} \ No newline at end of file diff --git a/inst/extdata/example.zarr/uns/hvg/.zgroup b/inst/extdata/example.zarr/uns/hvg/.zgroup index 3b7daf22..c71fe9d0 100644 --- a/inst/extdata/example.zarr/uns/hvg/.zgroup +++ b/inst/extdata/example.zarr/uns/hvg/.zgroup @@ -1,3 +1 @@ -{ - "zarr_format": 2 -} \ No newline at end of file +{"zarr_format":2} \ No newline at end of file diff --git a/inst/extdata/example.zarr/uns/hvg/flavor/.zarray b/inst/extdata/example.zarr/uns/hvg/flavor/.zarray index 9082ffb5..05d304d2 100644 --- a/inst/extdata/example.zarr/uns/hvg/flavor/.zarray +++ b/inst/extdata/example.zarr/uns/hvg/flavor/.zarray @@ -1,10 +1 @@ -{ - "chunks": [], - "compressor": null, - "dtype": "iE;!+?k0^&p9 diff --git a/inst/extdata/example.zarr/uns/leiden/params/resolution/.zarray b/inst/extdata/example.zarr/uns/leiden/params/resolution/.zarray index 7dd3880a..e2f75040 100644 --- a/inst/extdata/example.zarr/uns/leiden/params/resolution/.zarray +++ b/inst/extdata/example.zarr/uns/leiden/params/resolution/.zarray @@ -1,10 +1 @@ -{ - "chunks": [], - "compressor": null, - "dtype": "Y@mSm9 diff --git a/inst/extdata/example.zarr/uns/pca/.zattrs b/inst/extdata/example.zarr/uns/pca/.zattrs index a204673f..468e470d 100644 --- a/inst/extdata/example.zarr/uns/pca/.zattrs +++ b/inst/extdata/example.zarr/uns/pca/.zattrs @@ -1,4 +1 @@ -{ - "encoding-type": "dict", - "encoding-version": "0.1.0" -} \ No newline at end of file +{"encoding-type":"dict","encoding-version":"0.1.0"} \ No newline at end of file diff --git a/inst/extdata/example.zarr/uns/pca/.zgroup b/inst/extdata/example.zarr/uns/pca/.zgroup index 3b7daf22..c71fe9d0 100644 --- a/inst/extdata/example.zarr/uns/pca/.zgroup +++ b/inst/extdata/example.zarr/uns/pca/.zgroup @@ -1,3 +1 @@ -{ - "zarr_format": 2 -} \ No newline at end of file +{"zarr_format":2} \ No newline at end of file diff --git a/inst/extdata/example.zarr/uns/pca/params/.zattrs b/inst/extdata/example.zarr/uns/pca/params/.zattrs index a204673f..468e470d 100644 --- a/inst/extdata/example.zarr/uns/pca/params/.zattrs +++ b/inst/extdata/example.zarr/uns/pca/params/.zattrs @@ -1,4 +1 @@ -{ - "encoding-type": "dict", - "encoding-version": "0.1.0" -} \ No newline at end of file +{"encoding-type":"dict","encoding-version":"0.1.0"} \ No newline at end of file diff --git a/inst/extdata/example.zarr/uns/pca/params/.zgroup b/inst/extdata/example.zarr/uns/pca/params/.zgroup index 3b7daf22..c71fe9d0 100644 --- a/inst/extdata/example.zarr/uns/pca/params/.zgroup +++ b/inst/extdata/example.zarr/uns/pca/params/.zgroup @@ -1,3 +1 @@ -{ - "zarr_format": 2 -} \ No newline at end of file +{"zarr_format":2} \ No newline at end of file diff --git a/inst/extdata/example.zarr/uns/pca/params/use_highly_variable/.zarray b/inst/extdata/example.zarr/uns/pca/params/use_highly_variable/.zarray index 576a0ab7..15e93e4b 100644 --- a/inst/extdata/example.zarr/uns/pca/params/use_highly_variable/.zarray +++ b/inst/extdata/example.zarr/uns/pca/params/use_highly_variable/.zarray @@ -1,10 +1 @@ -{ - "chunks": [], - "compressor": null, - "dtype": "|b1", - "fill_value": false, - "filters": null, - "order": "C", - "shape": [], - "zarr_format": 2 -} \ No newline at end of file +{"zarr_format":2,"shape":[1],"chunks":[1],"dtype":"|b1","compressor":{"id":"zstd","level":1},"fill_value":false,"order":"F","filters":null,"dimension_separator":"."} \ No newline at end of file diff --git a/inst/extdata/example.zarr/uns/pca/params/use_highly_variable/.zattrs b/inst/extdata/example.zarr/uns/pca/params/use_highly_variable/.zattrs index f7b936f0..fc02c84a 100644 --- a/inst/extdata/example.zarr/uns/pca/params/use_highly_variable/.zattrs +++ b/inst/extdata/example.zarr/uns/pca/params/use_highly_variable/.zattrs @@ -1,4 +1 @@ -{ - "encoding-type": "numeric-scalar", - "encoding-version": "0.2.0" -} \ No newline at end of file +{"encoding-type":"numeric-scalar","encoding-version":"0.2.0"} \ No newline at end of file diff --git a/inst/extdata/example.zarr/uns/pca/params/use_highly_variable/0 b/inst/extdata/example.zarr/uns/pca/params/use_highly_variable/0 index 6b2aaa7640726588bcd3d57e1de4b1315b7f315e..8f2ab5261feef1436077eb43c8b427165c44aec6 100644 GIT binary patch literal 10 RcmdPcs{dDkk&}Ue5daZH0yO{t literal 1 IcmZPs000620ssI2 diff --git a/inst/extdata/example.zarr/uns/pca/params/zero_center/.zarray b/inst/extdata/example.zarr/uns/pca/params/zero_center/.zarray index 576a0ab7..15e93e4b 100644 --- a/inst/extdata/example.zarr/uns/pca/params/zero_center/.zarray +++ b/inst/extdata/example.zarr/uns/pca/params/zero_center/.zarray @@ -1,10 +1 @@ -{ - "chunks": [], - "compressor": null, - "dtype": "|b1", - "fill_value": false, - "filters": null, - "order": "C", - "shape": [], - "zarr_format": 2 -} \ No newline at end of file +{"zarr_format":2,"shape":[1],"chunks":[1],"dtype":"|b1","compressor":{"id":"zstd","level":1},"fill_value":false,"order":"F","filters":null,"dimension_separator":"."} \ No newline at end of file diff --git a/inst/extdata/example.zarr/uns/pca/params/zero_center/.zattrs b/inst/extdata/example.zarr/uns/pca/params/zero_center/.zattrs index f7b936f0..fc02c84a 100644 --- a/inst/extdata/example.zarr/uns/pca/params/zero_center/.zattrs +++ b/inst/extdata/example.zarr/uns/pca/params/zero_center/.zattrs @@ -1,4 +1 @@ -{ - "encoding-type": "numeric-scalar", - "encoding-version": "0.2.0" -} \ No newline at end of file +{"encoding-type":"numeric-scalar","encoding-version":"0.2.0"} \ No newline at end of file diff --git a/inst/extdata/example.zarr/uns/pca/params/zero_center/0 b/inst/extdata/example.zarr/uns/pca/params/zero_center/0 index 6b2aaa7640726588bcd3d57e1de4b1315b7f315e..8f2ab5261feef1436077eb43c8b427165c44aec6 100644 GIT binary patch literal 10 RcmdPcs{dDkk&}Ue5daZH0yO{t literal 1 IcmZPs000620ssI2 diff --git a/inst/extdata/example.zarr/uns/pca/variance/.zarray b/inst/extdata/example.zarr/uns/pca/variance/.zarray index 406b0ed2..ca8e6716 100644 --- a/inst/extdata/example.zarr/uns/pca/variance/.zarray +++ b/inst/extdata/example.zarr/uns/pca/variance/.zarray @@ -1,20 +1 @@ -{ - "chunks": [ - 38 - ], - "compressor": { - "blocksize": 0, - "clevel": 5, - "cname": "lz4", - "id": "blosc", - "shuffle": 1 - }, - "dtype": "G(PrK)iP2{a-0yjYd2e__Wy>5J^Eby{^=B3`g3#X=@?e+a0AHj$M)V-m;Nh()n)0){X2RAN;vs iHccV<>9K%Z21#x6ZD#vfB(3v#uG&msJXe4FCkp^_c4qeg literal 165 zcmZQ#G-R2lV(M+)@(eV{a_-_wI_tQ`&Mejeb2o;391g1$H37${=FP$Pi!y F0swV9Lo@&Y diff --git a/inst/extdata/example.zarr/uns/pca/variance_ratio/.zarray b/inst/extdata/example.zarr/uns/pca/variance_ratio/.zarray index 406b0ed2..ca8e6716 100644 --- a/inst/extdata/example.zarr/uns/pca/variance_ratio/.zarray +++ b/inst/extdata/example.zarr/uns/pca/variance_ratio/.zarray @@ -1,20 +1 @@ -{ - "chunks": [ - 38 - ], - "compressor": { - "blocksize": 0, - "clevel": 5, - "cname": "lz4", - "id": "blosc", - "shuffle": 1 - }, - "dtype": "Ox}l_O6NpwQUbgYv#SI{4LR9ox5dA=9?`jZz zfRi!7@BIpg=fTSuLQ9q&n8&*0!P%-s4sBBwrp=o-J!}q-OV!$J89Ti&K}|45E| znDAOZ5M+YFd{b|GIR@^@hKA-2!W%dQ_7o+jOKTf#+qE$(nail`-i%efvXZO!8*VgP iroeoM;jF%D^0Q+tw;7xq1O!-E7#$r14)$huO8@}UlwU#s literal 164 zcmZQ#G-R2+G6#FZg>uXIkz7uKG30 zC-=5x#YVUrX)6fxe0g-^+|Je0`rB#(45i;ZJ-=t^;wpW4_RdIK5MX7Huwi64U=0UW FRsequMw9>m diff --git a/inst/extdata/example.zarr/uns/rank_genes_groups/.zattrs b/inst/extdata/example.zarr/uns/rank_genes_groups/.zattrs index a204673f..468e470d 100644 --- a/inst/extdata/example.zarr/uns/rank_genes_groups/.zattrs +++ b/inst/extdata/example.zarr/uns/rank_genes_groups/.zattrs @@ -1,4 +1 @@ -{ - "encoding-type": "dict", - "encoding-version": "0.1.0" -} \ No newline at end of file +{"encoding-type":"dict","encoding-version":"0.1.0"} \ No newline at end of file diff --git a/inst/extdata/example.zarr/uns/rank_genes_groups/.zgroup b/inst/extdata/example.zarr/uns/rank_genes_groups/.zgroup index 3b7daf22..c71fe9d0 100644 --- a/inst/extdata/example.zarr/uns/rank_genes_groups/.zgroup +++ b/inst/extdata/example.zarr/uns/rank_genes_groups/.zgroup @@ -1,3 +1 @@ -{ - "zarr_format": 2 -} \ No newline at end of file +{"zarr_format":2} \ No newline at end of file diff --git a/inst/extdata/example.zarr/uns/rank_genes_groups/logfoldchanges/.zarray b/inst/extdata/example.zarr/uns/rank_genes_groups/logfoldchanges/.zarray deleted file mode 100644 index bf8818a1..00000000 --- a/inst/extdata/example.zarr/uns/rank_genes_groups/logfoldchanges/.zarray +++ /dev/null @@ -1,45 +0,0 @@ -{ - "chunks": [ - 100 - ], - "compressor": { - "blocksize": 0, - "clevel": 5, - "cname": "lz4", - "id": "blosc", - "shuffle": 1 - }, - "dtype": [ - [ - "0", - "XcAfv&{&NP$)}`A+lsiBqJRp>&QM6A-jY$GPZ1K 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 literal 72 xcmYddU|>iE;yfVE0^&p<&IRI3AO?wnXk8%A0OEWgPKL6RfHX*75fG;XF#rx%2OR(a diff --git a/inst/extdata/example.zarr/uns/rank_genes_groups/params/groupby/.zarray b/inst/extdata/example.zarr/uns/rank_genes_groups/params/groupby/.zarray index 9082ffb5..05d304d2 100644 --- a/inst/extdata/example.zarr/uns/rank_genes_groups/params/groupby/.zarray +++ b/inst/extdata/example.zarr/uns/rank_genes_groups/params/groupby/.zarray @@ -1,10 +1 @@ -{ - "chunks": [], - "compressor": null, - "dtype": "iE;!Ge;fwJ>}Gyozz0&)NV diff --git a/inst/extdata/example.zarr/uns/rank_genes_groups/params/method/.zarray b/inst/extdata/example.zarr/uns/rank_genes_groups/params/method/.zarray index 9082ffb5..05d304d2 100644 --- a/inst/extdata/example.zarr/uns/rank_genes_groups/params/method/.zarray +++ b/inst/extdata/example.zarr/uns/rank_genes_groups/params/method/.zarray @@ -1,10 +1 @@ -{ - "chunks": [], - "compressor": null, - "dtype": "#~T8vq~R0%8CF diff --git a/inst/extdata/example.zarr/uns/rank_genes_groups/params/reference/.zarray b/inst/extdata/example.zarr/uns/rank_genes_groups/params/reference/.zarray index 8ebe55b8..05d304d2 100644 --- a/inst/extdata/example.zarr/uns/rank_genes_groups/params/reference/.zarray +++ b/inst/extdata/example.zarr/uns/rank_genes_groups/params/reference/.zarray @@ -1,10 +1 @@ -{ - "chunks": [], - "compressor": null, - "dtype": "iE;$k2!0b&3VQ~|#L diff --git a/inst/extdata/example.zarr/uns/rank_genes_groups/params/use_raw/.zarray b/inst/extdata/example.zarr/uns/rank_genes_groups/params/use_raw/.zarray index 576a0ab7..15e93e4b 100644 --- a/inst/extdata/example.zarr/uns/rank_genes_groups/params/use_raw/.zarray +++ b/inst/extdata/example.zarr/uns/rank_genes_groups/params/use_raw/.zarray @@ -1,10 +1 @@ -{ - "chunks": [], - "compressor": null, - "dtype": "|b1", - "fill_value": false, - "filters": null, - "order": "C", - "shape": [], - "zarr_format": 2 -} \ No newline at end of file +{"zarr_format":2,"shape":[1],"chunks":[1],"dtype":"|b1","compressor":{"id":"zstd","level":1},"fill_value":false,"order":"F","filters":null,"dimension_separator":"."} \ No newline at end of file diff --git a/inst/extdata/example.zarr/uns/rank_genes_groups/params/use_raw/.zattrs b/inst/extdata/example.zarr/uns/rank_genes_groups/params/use_raw/.zattrs index f7b936f0..fc02c84a 100644 --- a/inst/extdata/example.zarr/uns/rank_genes_groups/params/use_raw/.zattrs +++ b/inst/extdata/example.zarr/uns/rank_genes_groups/params/use_raw/.zattrs @@ -1,4 +1 @@ -{ - "encoding-type": "numeric-scalar", - "encoding-version": "0.2.0" -} \ No newline at end of file +{"encoding-type":"numeric-scalar","encoding-version":"0.2.0"} \ No newline at end of file diff --git a/inst/extdata/example.zarr/uns/rank_genes_groups/params/use_raw/0 b/inst/extdata/example.zarr/uns/rank_genes_groups/params/use_raw/0 index f76dd238ade08917e6712764a16a22005a50573d..9263f8b471c085812467c474e547815d394fc076 100644 GIT binary patch literal 10 RcmdPcs{dDkk&}Ue0RRz00yF>s literal 1 IcmZPo000310RR91 diff --git a/inst/extdata/example.zarr/uns/rank_genes_groups/pvals/.zarray b/inst/extdata/example.zarr/uns/rank_genes_groups/pvals/.zarray deleted file mode 100644 index c277dff3..00000000 --- a/inst/extdata/example.zarr/uns/rank_genes_groups/pvals/.zarray +++ /dev/null @@ -1,45 +0,0 @@ -{ - "chunks": [ - 100 - ], - "compressor": { - "blocksize": 0, - "clevel": 5, - "cname": "lz4", - "id": "blosc", - "shuffle": 1 - }, - "dtype": [ - [ - "0", - "T2-r7>7cD$Rg@aFDYa_v+G^D%R%#_8tsRnB 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 KC3`fHHU9_8H4DN3 diff --git a/inst/extdata/example2.zarr/uns/rank_genes_groups/pvals_adj/0/.zarray b/inst/extdata/example.zarr/uns/rank_genes_groups/pvals_adj/0/.zarray similarity index 100% rename from inst/extdata/example2.zarr/uns/rank_genes_groups/pvals_adj/0/.zarray rename to inst/extdata/example.zarr/uns/rank_genes_groups/pvals_adj/0/.zarray diff --git a/inst/extdata/example2.zarr/uns/Bool/.zattrs b/inst/extdata/example.zarr/uns/rank_genes_groups/pvals_adj/0/.zattrs similarity index 100% rename from inst/extdata/example2.zarr/uns/Bool/.zattrs rename to inst/extdata/example.zarr/uns/rank_genes_groups/pvals_adj/0/.zattrs diff --git a/inst/extdata/example2.zarr/uns/rank_genes_groups/pvals_adj/0/0 b/inst/extdata/example.zarr/uns/rank_genes_groups/pvals_adj/0/0 similarity index 100% rename from inst/extdata/example2.zarr/uns/rank_genes_groups/pvals_adj/0/0 rename to inst/extdata/example.zarr/uns/rank_genes_groups/pvals_adj/0/0 diff --git a/inst/extdata/example2.zarr/uns/rank_genes_groups/pvals_adj/1/.zarray b/inst/extdata/example.zarr/uns/rank_genes_groups/pvals_adj/1/.zarray similarity index 100% rename from inst/extdata/example2.zarr/uns/rank_genes_groups/pvals_adj/1/.zarray rename to inst/extdata/example.zarr/uns/rank_genes_groups/pvals_adj/1/.zarray diff --git a/inst/extdata/example2.zarr/uns/Int/.zattrs b/inst/extdata/example.zarr/uns/rank_genes_groups/pvals_adj/1/.zattrs similarity index 100% rename from inst/extdata/example2.zarr/uns/Int/.zattrs rename to inst/extdata/example.zarr/uns/rank_genes_groups/pvals_adj/1/.zattrs diff --git a/inst/extdata/example2.zarr/uns/rank_genes_groups/pvals_adj/1/0 b/inst/extdata/example.zarr/uns/rank_genes_groups/pvals_adj/1/0 similarity index 100% rename from inst/extdata/example2.zarr/uns/rank_genes_groups/pvals_adj/1/0 rename to inst/extdata/example.zarr/uns/rank_genes_groups/pvals_adj/1/0 diff --git a/inst/extdata/example2.zarr/uns/rank_genes_groups/pvals_adj/2/.zarray b/inst/extdata/example.zarr/uns/rank_genes_groups/pvals_adj/2/.zarray similarity index 100% rename from inst/extdata/example2.zarr/uns/rank_genes_groups/pvals_adj/2/.zarray rename to inst/extdata/example.zarr/uns/rank_genes_groups/pvals_adj/2/.zarray diff --git a/inst/extdata/example2.zarr/uns/pca/variance/.zattrs b/inst/extdata/example.zarr/uns/rank_genes_groups/pvals_adj/2/.zattrs similarity index 100% rename from inst/extdata/example2.zarr/uns/pca/variance/.zattrs rename to inst/extdata/example.zarr/uns/rank_genes_groups/pvals_adj/2/.zattrs diff --git a/inst/extdata/example2.zarr/uns/rank_genes_groups/pvals_adj/2/0 b/inst/extdata/example.zarr/uns/rank_genes_groups/pvals_adj/2/0 similarity index 100% rename from inst/extdata/example2.zarr/uns/rank_genes_groups/pvals_adj/2/0 rename to inst/extdata/example.zarr/uns/rank_genes_groups/pvals_adj/2/0 diff --git a/inst/extdata/example2.zarr/uns/rank_genes_groups/pvals_adj/3/.zarray b/inst/extdata/example.zarr/uns/rank_genes_groups/pvals_adj/3/.zarray similarity index 100% rename from inst/extdata/example2.zarr/uns/rank_genes_groups/pvals_adj/3/.zarray rename to inst/extdata/example.zarr/uns/rank_genes_groups/pvals_adj/3/.zarray diff --git a/inst/extdata/example2.zarr/uns/pca/variance_ratio/.zattrs b/inst/extdata/example.zarr/uns/rank_genes_groups/pvals_adj/3/.zattrs similarity index 100% rename from inst/extdata/example2.zarr/uns/pca/variance_ratio/.zattrs rename to inst/extdata/example.zarr/uns/rank_genes_groups/pvals_adj/3/.zattrs diff --git a/inst/extdata/example2.zarr/uns/rank_genes_groups/pvals_adj/3/0 b/inst/extdata/example.zarr/uns/rank_genes_groups/pvals_adj/3/0 similarity index 100% rename from inst/extdata/example2.zarr/uns/rank_genes_groups/pvals_adj/3/0 rename to inst/extdata/example.zarr/uns/rank_genes_groups/pvals_adj/3/0 diff --git a/inst/extdata/example2.zarr/uns/rank_genes_groups/pvals_adj/4/.zarray b/inst/extdata/example.zarr/uns/rank_genes_groups/pvals_adj/4/.zarray similarity index 100% rename from inst/extdata/example2.zarr/uns/rank_genes_groups/pvals_adj/4/.zarray rename to inst/extdata/example.zarr/uns/rank_genes_groups/pvals_adj/4/.zarray diff --git a/inst/extdata/example2.zarr/uns/rank_genes_groups/logfoldchanges/0/.zattrs b/inst/extdata/example.zarr/uns/rank_genes_groups/pvals_adj/4/.zattrs similarity index 100% rename from inst/extdata/example2.zarr/uns/rank_genes_groups/logfoldchanges/0/.zattrs rename to inst/extdata/example.zarr/uns/rank_genes_groups/pvals_adj/4/.zattrs diff --git a/inst/extdata/example2.zarr/uns/rank_genes_groups/pvals_adj/4/0 b/inst/extdata/example.zarr/uns/rank_genes_groups/pvals_adj/4/0 similarity index 100% rename from inst/extdata/example2.zarr/uns/rank_genes_groups/pvals_adj/4/0 rename to inst/extdata/example.zarr/uns/rank_genes_groups/pvals_adj/4/0 diff --git a/inst/extdata/example2.zarr/uns/rank_genes_groups/pvals_adj/5/.zarray b/inst/extdata/example.zarr/uns/rank_genes_groups/pvals_adj/5/.zarray similarity index 100% rename from inst/extdata/example2.zarr/uns/rank_genes_groups/pvals_adj/5/.zarray rename to inst/extdata/example.zarr/uns/rank_genes_groups/pvals_adj/5/.zarray diff --git a/inst/extdata/example2.zarr/uns/rank_genes_groups/logfoldchanges/1/.zattrs b/inst/extdata/example.zarr/uns/rank_genes_groups/pvals_adj/5/.zattrs similarity index 100% rename from inst/extdata/example2.zarr/uns/rank_genes_groups/logfoldchanges/1/.zattrs rename to inst/extdata/example.zarr/uns/rank_genes_groups/pvals_adj/5/.zattrs diff --git a/inst/extdata/example2.zarr/uns/rank_genes_groups/pvals_adj/5/0 b/inst/extdata/example.zarr/uns/rank_genes_groups/pvals_adj/5/0 similarity index 100% rename from inst/extdata/example2.zarr/uns/rank_genes_groups/pvals_adj/5/0 rename to inst/extdata/example.zarr/uns/rank_genes_groups/pvals_adj/5/0 diff --git a/inst/extdata/example.zarr/uns/rank_genes_groups/scores/.zarray b/inst/extdata/example.zarr/uns/rank_genes_groups/scores/.zarray deleted file mode 100644 index bf8818a1..00000000 --- a/inst/extdata/example.zarr/uns/rank_genes_groups/scores/.zarray +++ /dev/null @@ -1,45 +0,0 @@ -{ - "chunks": [ - 100 - ], - "compressor": { - "blocksize": 0, - "clevel": 5, - "cname": "lz4", - "id": "blosc", - "shuffle": 1 - }, - "dtype": [ - [ - "0", - "<|K2><{S2mk;S0002{2LJ&6|0W@e>3#_GI~1 zf`1$4g}oHgy|jW#Xr87zG`bSd5)jj9qp`asu6_+@5*BhqP z`T7C{1j+~^l&ei4!3J(w@Dr!JLKtMo1KtDe}KR*Qk96kX6{|Y@lJv_a=y}iD^ zzP`S`zP`S`zP`V|zrVi)00I)g0RaF1BWZQyGk3^ul_*J*Zd$TmM9pnYVX95kgy18oLI---0?NdN167?2v zt_I15(q@NNqwGbKx;#sljg*W?LmB(_@9pT-#>mi*Wc;{6)!qVXFxzeKtPKD0SN*C7Cr$03y}d2h5-Nv0ssP#0ssFViI)HUD-hcE zl`|9MWf4J=;Tt+oU~}mdCXV0f8TL?N?-lYm+(SyD6N@zWCjEOc$S4>PJ!~q$dkgfcKvLFn-0x)yd;IYe z9!Nq3?UNUR#-aj6zD&G$3Zgbr~~MMg;>>J_e$19+h6apUA^UxKVSd`7m*Xp z61Q#{?ZfZj$A}Lg+rdhy=t7kC;SbW2?ZjmHJyuWvS?5EFnKKe_heXjDxlcuRkZ@~e zSa=SJ?#vpHW@ zS^%KgYs>4?>G?`WIw>L<5)B9f`1J7Rhj(>#T3S;{JvK5b8Up6c zwXl$eg;YE4&ccqffB}Z6)7=SiiJ7Rq$IJ-~4iOqCDk>{VQGJ7zmz|!WvBS;J*V*Fo z{s<;4gs+YP0RjL4d;t#v00se#0RRF30FeQ4JUhL;y}iAQ0S~bR3J|}K0rLMJz?N>Z zZjy%tp&p-wfZ=6K2q8|LzmO573fqMfFHp`VOcMLd!vWZg&K=Dzkq9*w&&ANKj^`mm zw{CqffslqRT+srte4~A)o}@MHCq&WM>K)NcEWKS=V%R78;E;}JqQh& zr~fI7B|s_yT4;h(RiFnxl-V_VS#QWI$!&fjhNfWdAAw-!;5;8F+lXFIOGqmu8}r=L z%fi9Fy12HrshyIKifv$1N<}|BIyNvN7ZU~p_Ug2ejDtiB3B8;^Ms(BYQB`eqj+~>g zzro++_8TH5EHE@XQd@F+eSUt2jgOO;o1>(t%IW(14kkviKa2qnjsXo2KZ*eX0swJ6 zJw3a%YSgX;HX2|t0ixWkR+ zfh-prSD6Zvc1eEo-0-U)Y{GHW1$#CuRQH5`PgDqjeP_``hIPmShN(6JKoa{CneAUX za;Jboie(t0(BQr_M|y_#>L)p(n?3)d>@kXHza<2XY&z^`SLchK)fW6nKcF*w>FaM$ zB69jU)&Puo(BFcDbF;spFIm~v^OxV7q}LjaCNjR64y01q1j1_q4*Og=q5z0L;#0sst$0R;j8P`|&xz`)o5$=(0} diff --git a/inst/extdata/example2.zarr/uns/rank_genes_groups/scores/0/.zarray b/inst/extdata/example.zarr/uns/rank_genes_groups/scores/0/.zarray similarity index 100% rename from inst/extdata/example2.zarr/uns/rank_genes_groups/scores/0/.zarray rename to inst/extdata/example.zarr/uns/rank_genes_groups/scores/0/.zarray diff --git a/inst/extdata/example2.zarr/uns/rank_genes_groups/logfoldchanges/2/.zattrs b/inst/extdata/example.zarr/uns/rank_genes_groups/scores/0/.zattrs similarity index 100% rename from inst/extdata/example2.zarr/uns/rank_genes_groups/logfoldchanges/2/.zattrs rename to inst/extdata/example.zarr/uns/rank_genes_groups/scores/0/.zattrs diff --git a/inst/extdata/example2.zarr/uns/rank_genes_groups/scores/0/0 b/inst/extdata/example.zarr/uns/rank_genes_groups/scores/0/0 similarity index 100% rename from inst/extdata/example2.zarr/uns/rank_genes_groups/scores/0/0 rename to inst/extdata/example.zarr/uns/rank_genes_groups/scores/0/0 diff --git a/inst/extdata/example2.zarr/uns/rank_genes_groups/scores/1/.zarray b/inst/extdata/example.zarr/uns/rank_genes_groups/scores/1/.zarray similarity index 100% rename from inst/extdata/example2.zarr/uns/rank_genes_groups/scores/1/.zarray rename to inst/extdata/example.zarr/uns/rank_genes_groups/scores/1/.zarray diff --git a/inst/extdata/example2.zarr/uns/rank_genes_groups/logfoldchanges/3/.zattrs b/inst/extdata/example.zarr/uns/rank_genes_groups/scores/1/.zattrs similarity index 100% rename from inst/extdata/example2.zarr/uns/rank_genes_groups/logfoldchanges/3/.zattrs rename to inst/extdata/example.zarr/uns/rank_genes_groups/scores/1/.zattrs diff --git a/inst/extdata/example2.zarr/uns/rank_genes_groups/scores/1/0 b/inst/extdata/example.zarr/uns/rank_genes_groups/scores/1/0 similarity index 100% rename from inst/extdata/example2.zarr/uns/rank_genes_groups/scores/1/0 rename to inst/extdata/example.zarr/uns/rank_genes_groups/scores/1/0 diff --git a/inst/extdata/example2.zarr/uns/rank_genes_groups/scores/2/.zarray b/inst/extdata/example.zarr/uns/rank_genes_groups/scores/2/.zarray similarity index 100% rename from inst/extdata/example2.zarr/uns/rank_genes_groups/scores/2/.zarray rename to inst/extdata/example.zarr/uns/rank_genes_groups/scores/2/.zarray diff --git a/inst/extdata/example2.zarr/uns/rank_genes_groups/logfoldchanges/4/.zattrs b/inst/extdata/example.zarr/uns/rank_genes_groups/scores/2/.zattrs similarity index 100% rename from inst/extdata/example2.zarr/uns/rank_genes_groups/logfoldchanges/4/.zattrs rename to inst/extdata/example.zarr/uns/rank_genes_groups/scores/2/.zattrs diff --git a/inst/extdata/example2.zarr/uns/rank_genes_groups/scores/2/0 b/inst/extdata/example.zarr/uns/rank_genes_groups/scores/2/0 similarity index 100% rename from inst/extdata/example2.zarr/uns/rank_genes_groups/scores/2/0 rename to inst/extdata/example.zarr/uns/rank_genes_groups/scores/2/0 diff --git a/inst/extdata/example2.zarr/uns/rank_genes_groups/scores/3/.zarray b/inst/extdata/example.zarr/uns/rank_genes_groups/scores/3/.zarray similarity index 100% rename from inst/extdata/example2.zarr/uns/rank_genes_groups/scores/3/.zarray rename to inst/extdata/example.zarr/uns/rank_genes_groups/scores/3/.zarray diff --git a/inst/extdata/example2.zarr/uns/rank_genes_groups/logfoldchanges/5/.zattrs b/inst/extdata/example.zarr/uns/rank_genes_groups/scores/3/.zattrs similarity index 100% rename from inst/extdata/example2.zarr/uns/rank_genes_groups/logfoldchanges/5/.zattrs rename to inst/extdata/example.zarr/uns/rank_genes_groups/scores/3/.zattrs diff --git a/inst/extdata/example2.zarr/uns/rank_genes_groups/scores/3/0 b/inst/extdata/example.zarr/uns/rank_genes_groups/scores/3/0 similarity index 100% rename from inst/extdata/example2.zarr/uns/rank_genes_groups/scores/3/0 rename to inst/extdata/example.zarr/uns/rank_genes_groups/scores/3/0 diff --git a/inst/extdata/example2.zarr/uns/rank_genes_groups/scores/4/.zarray b/inst/extdata/example.zarr/uns/rank_genes_groups/scores/4/.zarray similarity index 100% rename from inst/extdata/example2.zarr/uns/rank_genes_groups/scores/4/.zarray rename to inst/extdata/example.zarr/uns/rank_genes_groups/scores/4/.zarray diff --git a/inst/extdata/example2.zarr/uns/rank_genes_groups/pvals/0/.zattrs b/inst/extdata/example.zarr/uns/rank_genes_groups/scores/4/.zattrs similarity index 100% rename from inst/extdata/example2.zarr/uns/rank_genes_groups/pvals/0/.zattrs rename to inst/extdata/example.zarr/uns/rank_genes_groups/scores/4/.zattrs diff --git a/inst/extdata/example2.zarr/uns/rank_genes_groups/scores/4/0 b/inst/extdata/example.zarr/uns/rank_genes_groups/scores/4/0 similarity index 100% rename from inst/extdata/example2.zarr/uns/rank_genes_groups/scores/4/0 rename to inst/extdata/example.zarr/uns/rank_genes_groups/scores/4/0 diff --git a/inst/extdata/example2.zarr/uns/rank_genes_groups/scores/5/.zarray b/inst/extdata/example.zarr/uns/rank_genes_groups/scores/5/.zarray similarity index 100% rename from inst/extdata/example2.zarr/uns/rank_genes_groups/scores/5/.zarray rename to inst/extdata/example.zarr/uns/rank_genes_groups/scores/5/.zarray diff --git a/inst/extdata/example2.zarr/uns/rank_genes_groups/pvals/1/.zattrs b/inst/extdata/example.zarr/uns/rank_genes_groups/scores/5/.zattrs similarity index 100% rename from inst/extdata/example2.zarr/uns/rank_genes_groups/pvals/1/.zattrs rename to inst/extdata/example.zarr/uns/rank_genes_groups/scores/5/.zattrs diff --git a/inst/extdata/example2.zarr/uns/rank_genes_groups/scores/5/0 b/inst/extdata/example.zarr/uns/rank_genes_groups/scores/5/0 similarity index 100% rename from inst/extdata/example2.zarr/uns/rank_genes_groups/scores/5/0 rename to inst/extdata/example.zarr/uns/rank_genes_groups/scores/5/0 diff --git a/inst/extdata/example.zarr/uns/umap/.zattrs b/inst/extdata/example.zarr/uns/umap/.zattrs index a204673f..468e470d 100644 --- a/inst/extdata/example.zarr/uns/umap/.zattrs +++ b/inst/extdata/example.zarr/uns/umap/.zattrs @@ -1,4 +1 @@ -{ - "encoding-type": "dict", - "encoding-version": "0.1.0" -} \ No newline at end of file +{"encoding-type":"dict","encoding-version":"0.1.0"} \ No newline at end of file diff --git a/inst/extdata/example.zarr/uns/umap/.zgroup b/inst/extdata/example.zarr/uns/umap/.zgroup index 3b7daf22..c71fe9d0 100644 --- a/inst/extdata/example.zarr/uns/umap/.zgroup +++ b/inst/extdata/example.zarr/uns/umap/.zgroup @@ -1,3 +1 @@ -{ - "zarr_format": 2 -} \ No newline at end of file +{"zarr_format":2} \ No newline at end of file diff --git a/inst/extdata/example.zarr/uns/umap/params/.zattrs b/inst/extdata/example.zarr/uns/umap/params/.zattrs index a204673f..468e470d 100644 --- a/inst/extdata/example.zarr/uns/umap/params/.zattrs +++ b/inst/extdata/example.zarr/uns/umap/params/.zattrs @@ -1,4 +1 @@ -{ - "encoding-type": "dict", - "encoding-version": "0.1.0" -} \ No newline at end of file +{"encoding-type":"dict","encoding-version":"0.1.0"} \ No newline at end of file diff --git a/inst/extdata/example.zarr/uns/umap/params/.zgroup b/inst/extdata/example.zarr/uns/umap/params/.zgroup index 3b7daf22..c71fe9d0 100644 --- a/inst/extdata/example.zarr/uns/umap/params/.zgroup +++ b/inst/extdata/example.zarr/uns/umap/params/.zgroup @@ -1,3 +1 @@ -{ - "zarr_format": 2 -} \ No newline at end of file +{"zarr_format":2} \ No newline at end of file diff --git a/inst/extdata/example.zarr/uns/umap/params/a/.zarray b/inst/extdata/example.zarr/uns/umap/params/a/.zarray index 6b8bc7b7..83389bad 100644 --- a/inst/extdata/example.zarr/uns/umap/params/a/.zarray +++ b/inst/extdata/example.zarr/uns/umap/params/a/.zarray @@ -1,10 +1 @@ -{ - "chunks": [], - "compressor": null, - "dtype": "Gdux*3ibwVU6)Xgi diff --git a/inst/extdata/example.zarr/uns/umap/params/b/.zarray b/inst/extdata/example.zarr/uns/umap/params/b/.zarray index 6b8bc7b7..83389bad 100644 --- a/inst/extdata/example.zarr/uns/umap/params/b/.zarray +++ b/inst/extdata/example.zarr/uns/umap/params/b/.zarray @@ -1,10 +1 @@ -{ - "chunks": [], - "compressor": null, - "dtype": "WnK{itD(SAp(~Cev5{L)_5l$e& z2t<6^ylAKQ$H6|nj#pabyb`#)W|YC6B3_s4B4)08=tY0GpG+7Hm7fsT|K9P<8xqZwQDh9?AU~4IOVY|0?GNO7m9t diff --git a/inst/extdata/example.zarr/var/_index/.zarray b/inst/extdata/example.zarr/var/_index/.zarray index bfa845d9..574d27e3 100644 --- a/inst/extdata/example.zarr/var/_index/.zarray +++ b/inst/extdata/example.zarr/var/_index/.zarray @@ -1,24 +1 @@ -{ - "chunks": [ - 100 - ], - "compressor": { - "blocksize": 0, - "clevel": 5, - "cname": "lz4", - "id": "blosc", - "shuffle": 1 - }, - "dtype": "|O", - "fill_value": 0, - "filters": [ - { - "id": "vlen-utf8" - } - ], - "order": "C", - "shape": [ - 100 - ], - "zarr_format": 2 -} \ No newline at end of file +{"zarr_format":2,"shape":[100],"chunks":[100],"dtype":"|O","compressor":{"id":"zstd","level":1},"fill_value":0,"order":"F","filters":[{"id":"vlen-utf8"}],"dimension_separator":"."} \ No newline at end of file diff --git a/inst/extdata/example.zarr/var/_index/.zattrs b/inst/extdata/example.zarr/var/_index/.zattrs index 6e14470f..5b014145 100644 --- a/inst/extdata/example.zarr/var/_index/.zattrs +++ b/inst/extdata/example.zarr/var/_index/.zattrs @@ -1,4 +1 @@ -{ - "encoding-type": "string-array", - "encoding-version": "0.2.0" -} \ No newline at end of file +{"encoding-type":"string-array","encoding-version":"0.2.0"} \ No newline at end of file diff --git a/inst/extdata/example.zarr/var/_index/0 b/inst/extdata/example.zarr/var/_index/0 index 0e7d0ff437db0698e39d67a1750d4d565a4425e7..dd70d68f009f8e38e2b5b201028b133b1f69817e 100644 GIT binary patch literal 115 zcmdPcs{c13fZ3OsVbgITfditqzJFT%Fs1yvUuUDUgk-v_a(N|)$OI9QAi@(wSb_*m z5b<;KqKUh|L|!}*`)y6e6TOoL9E}|eE-eblD+FG=D}QiZU|P+a*`e97->+?Yw>QhT IeEJk703i%Cj{pDw literal 469 zcma*kArgZy6a>&shiOG*>Gzl_L=plaC%|$Du-uSi^eX5sDl-V?i#LCFvMvwPn7IN@ zKLgYNcHX01m|irk+v=Pv(U%xX>`IIY(l?O7LK2M@pKS5S{3cy8=b&MW>RuxoVO dX+-WcdhRp^?lcm28Y6canY$ZrzRmorod3aUQ3(J5 diff --git a/inst/extdata/example.zarr/var/dispersions/.zarray b/inst/extdata/example.zarr/var/dispersions/.zarray index 6f4beac3..022fef30 100644 --- a/inst/extdata/example.zarr/var/dispersions/.zarray +++ b/inst/extdata/example.zarr/var/dispersions/.zarray @@ -1,20 +1 @@ -{ - "chunks": [ - 100 - ], - "compressor": { - "blocksize": 0, - "clevel": 5, - "cname": "lz4", - "id": "blosc", - "shuffle": 1 - }, - "dtype": "lJk3~AqzwR5s80vn~KY`ZNl?9yCzj~}5A2Pn%zaD1?TNYu+zn{E9AwRaD zznO<=FEVX8Kim-Gh#9Hkzv!c&)h~F?zorJphLMrKKbM%Hp*^#&Kk73c5GL`LzhR;h z%Tw>izwZuD3P4=VKS`V&kft2XKZJCkx{7?ZzX(Gg%|VX0Kltr{6trg2zbR{zpXbZa zKMDeTI6n)|zkhrg@MojgKT&PxKE?jgzmlqS`tw1~KX@|a)mhWYzba2o{LIegJ0B6UKglGg32`8-KM~hG*^BSUzgS`}X3JaPzW{$<3p}{OKO>y{8n#1+ zKc0a1L%96YzZvL+K+FcQzmPVx^B~Tmzdw?gzm`Jk#g?7bKh~15`gLa2zwfV>|9twz zzxsYd;oQN(zd+~TX6aPbzs~e|xwA&cKSWV>*IwqkKRpT&Vw1wBKXxaV6->mNKL<@R zzcx0uzg&vVxnNGaKjw=Q0r56#KaFdS=1#)9KkC#mzf;%5zw%ryMd0+yKb?4t{5uKG zznVRU+jh3qztnAs{fi9KzvlesQdJSxzt;og7js6o zKlygN`Y2(;Kln?X(A2KNzeSH?8z@J~zlEL6CgYmZzn*hjIuH>xKeR};aY8b)za99x zpN>+)zq&yOy-Ke;ila{KDZzZC{} oVlykcKVlD}jqcLGzXJVhI&}BLzna;ps!9>FzYjYJ3JyrtKf`vY5dZ)H literal 803 zcmV+;1Kj)q0Wk<50{{RZ0{{Rc0{{RN0000B0{{T?|Nqb28wO$=W$uA`9-o=q=%$zI zVed(V2>2-qe^HWnDgxEX5m*2to*9rontz-CGnAIr@A^Q_L_Kx~T;`4H@|~L0=GWy{ zEf^!+qQX)6_(g@Dv>m!CJ+SiM@PH;@QMnaj0-6s}5vZ-lFdNpaXS|0HqXw8Wq7IyN zL+xtSPt&0!*J6L1fao@oSI`Yck}g7$uYTwBQ3@wbii>O1TzEZg`~#)t`Iq^Y zbsHsiOOKs%Nccg0vni3(^=JYj)G-DR{nFkVAApm5 z8RvB5PVdO4JuYAT_k^^!oC=s7oPp}GmP6lpb`h5{%@d9>EsTbV=i~;5sf2SQX!h#7 zonp;fwz>x;sEJQ? zai8SYh+gL_o<0QkMRH<|I;si>G7ZRgMd}4I7C$l>FOfYaQ$VJQLA2*TXT|eb%sU@( zi_1K=xXd6+Fv7UMQu&s3eB9}?UXx5VVDU~<;5&AURXhyXuJDp)(EW2L)F|T+LXKbq zx*yt+Veent!}~MtbV?2Y(t{M6I)0qKVYY3lc#*U5?_3;wj%LdXqy9nD+3OJ??_0P- z{07ed#0AZcf&`sr`oUC2=EB4_PBy~V^a-{M5l{M=%t4NN@c%|(u1A^?GEzlkJdaOa z-be?~y6P*^_Yp|H#Mi{f&(hS}$e=mm&cCmh$IZ>Qx6;th*wN0(*Q&Ct$l$_<)3Kt? z+q%EDz?0S0#lqFcyQiDByKB3|%g)u)*SvMV+Oo9M&yu#o!pYM$v%{X!*4?_bz1E-7 zgUPzU!?V^uKR-V|zdygfzrR1fzdt{}zdt{}Kfgb}Kfgb}KR-Ve00JTa0|x*AGyoC5 h1ONdO000R91S|jm695oDEC2uz0D!+gzdygfzds|^jp+aY diff --git a/inst/extdata/example.zarr/var/dispersions_norm/.zarray b/inst/extdata/example.zarr/var/dispersions_norm/.zarray index 788682bc..022fef30 100644 --- a/inst/extdata/example.zarr/var/dispersions_norm/.zarray +++ b/inst/extdata/example.zarr/var/dispersions_norm/.zarray @@ -1,20 +1 @@ -{ - "chunks": [ - 100 - ], - "compressor": { - "blocksize": 0, - "clevel": 5, - "cname": "lz4", - "id": "blosc", - "shuffle": 1 - }, - "dtype": "hwPV005v5iG@gut6#A5)!0000W z|Agc4C(k!$=>PzrEX-g!ZSP=?i~#-n*FYu)(7ylx0HDiv>z<(IOQGAp0002sYxMPi zSj+sd&43@5`9A;v06-cR=+U3*#(L}=sbGsQ_+WKC?eO-?#a-(jZM%2;)*Wf!)Ij#V zw6Z_$U@hC=;KMxQK=1+fAWVYm!b+w>S1?Z2%P@xO>Z0N*#+;Io9;W)tuJz}WPl!~zKC05)Kr zpypXWU_k@`+5y@CCGo)HruYMp5ED+VqL@1{W&-8WS7p)QMcLuO_o2u#3R369*;l4 zE^)uOBdNb!szJUoHi^F)(FH#x9s|JnCmg?qKY2d9IZHnP0DwPbVUEAkX?s6&WQ0HH z-@m>xF@U~ZzFWWZ1T{Zg3f;b6qpv>z0DwQlTIN52ZN9$zxXeG&us}bG{!~9P)?+{5 zNUgtHe8In~>uEoOw_m<0?pnX~XxqKI5 zhFibk{E@$+)mXorC=@^N=ioaR1iL@Y<$OI3+WNnZs82m+y%TB#A*|MJ!34h2z{w~r)vg9dV_ENBcZ8Rmz`(!DZCU3WMSm;yhh C>;anq diff --git a/inst/extdata/example.zarr/var/log1p_mean_counts/.zarray b/inst/extdata/example.zarr/var/log1p_mean_counts/.zarray index 788682bc..022fef30 100644 --- a/inst/extdata/example.zarr/var/log1p_mean_counts/.zarray +++ b/inst/extdata/example.zarr/var/log1p_mean_counts/.zarray @@ -1,20 +1 @@ -{ - "chunks": [ - 100 - ], - "compressor": { - "blocksize": 0, - "clevel": 5, - "cname": "lz4", - "id": "blosc", - "shuffle": 1 - }, - "dtype": "%3zQ*@}QOi@Bjzp@jy~}@Bl=d z^1zIf?jSiD^0xorG$rwX>XY#yuRzJQKp)QRV0o7CpwEl%;FW^%fVJ%KV26|Kw*S6p zzuJZ4m0y0w*T=C31BMF@PL>g@L=y;@c@bx z?tt}M@BmZN?%h9cQXy0_8BB*Pb<(MWN?RIii?1(!MiUbgv?vuM z;3AO_+&jEQGr71HgyPo04243l+Jocn$am^*`v~IT^_#QDCvT{y*|SxgOO=hm1F zsx7 ztv?gq@qpw(62P%*z+oXEUGxz$hhTRM6M$7L@WW3Qv1=X+0L$nRAZKBKP= zpb-EU-4TIIfaI(ZU_j9kfY16*7QWx0fVxV}z)uzuKwqfv0<-JP0T3gZneq@YYJ}H1 zgKUeshh_0{yk5v&xRo($Hte|;TOL+?%()vFT!%!X)H0ohy$p`=fR;d>;0L+2#ai99 zWOo{z-IO{ccUD6O)Q)0i=j4eq^!F=Dcx<9kY1S6M&(Ho-KaM@Rw73o&O4qW`jP<$1 RH-rn?s&;+QCaT0XVG6Cgj?e%A literal 341 zcmW-YF-yZh0EJU)p%6$ZxOXseLlaMCdj8ZtCX4G7r;mx5%H25oz}++8lZRLEQ? zBpp)y0a=5HNcUnh1ezsVjL`?*dyfZir*^mtYYg+pWyK!DFvnGv2FR6}z#DPz{^l!8 znk&A(hIdV48)c1576!5y7@=ftrpn@_n`-k?DWq4)KhT#7lXeOdv{Y4NJ&#p|d8w*b zx*2v-Ndo0OZS^}|q57WbtIBDgZTaT%{inY1wCVL@SNPO?P!=DB&Mx#+@)22iQF+L#$;~|qA9vF1hj1Q7R#P@tQj(%qhqk!`zJeYYom1S@8T5AOy}Gg5AjZ~ zCTizrX^ysh$YF;UW5f99-m-VF8|`>TF;I^V_$!Wk7S1bPLN*VYit9xKF*~^dinV*0 Sn<)#&_-}V->FT`SIIaTb?vqsj literal 407 zcmXYoF-XHe6o%hjO`~Zk6%Je^(XEb>!6~GZ*H!1tHz%tZoHC!A=$g!jV{l9cp|pt8 zA&77YB~Xzn0aJ=br&tS!_CGIS0YwU=);| zBUz9~D6W*0yi;fiZ3Ng21jfk@pjED}nS&;uHVSBbdrY|c{(wo5!pLQRDZ zSx%IzMJi-4poN^@F>hYzloCx6HA!r)*Vue(&AOAep#jZ$_z_pKvzQfzb!hgNb*<-0 z&Fe9sx+WcSZ5bH%5g5xaOZDnXnN>Y||N355=Hlt&`AzB8%WHeQud6=l?e;p~-Hw4P se>n6vZq|1E=5F{?lm8kX06GSY;mG&T0NQ{YXzu|G02%PGEpI-40cm%oasU7T diff --git a/inst/extdata/example.zarr/var/means/.zarray b/inst/extdata/example.zarr/var/means/.zarray index 6f4beac3..022fef30 100644 --- a/inst/extdata/example.zarr/var/means/.zarray +++ b/inst/extdata/example.zarr/var/means/.zarray @@ -1,20 +1 @@ -{ - "chunks": [ - 100 - ], - "compressor": { - "blocksize": 0, - "clevel": 5, - "cname": "lz4", - "id": "blosc", - "shuffle": 1 - }, - "dtype": "VPedgbH91fi`dX%M6igTNX?F7R5ua&~hWd!r^ z)lmgAI9g5X{EO@L$o?ql-*tr$_)2}m#f{-%w{*Gk2#57{(SvLo9pqKY+hux!Kyj!n zsezD?+_)~kpFw}rNjdL0p{29VHY1r3*Xym_En!#_>aB_nUN#c+DMjWaen=z>7h!Ul5ZPhSbsLhD$k`Qv;`cC9V z6JjO_Dw}5!E|mtSeam8KTjMp|#FSx^!{2o?tr?zu2p$n;G8~_0QP}KD_+3|(Kg&#q z-g6yhHt~cFf<3JYIpJIFvRh9!5!!pATz7aIe5=o`PPFVplSRuP-vo{r&FPx4HXI7o z1hI=TVW=xiDwlHnYc?r8+)OxA8&WdkG9fI#XG~KOVOvM;ez{?H>2np9q!T<8?(%jo zLf12eNo%j6*FbcR@GFDe;j2rND;P?hWzLB)91XI^i+WZtG+r?(vC8F;M815z`~bl_ z+OIA2Aj8Cp@d?KE3@a-eCFVkoq9o~*%ut3OA$uKe1`-;W;DVhy!`pOK)}IkQYFrLR zgyb=d(RJTmB_LEMJbrG=82qY44}4=83eH-bcQfVi{PeDVYYT(8Ca0<;Pm2_%^MZ0A z!|)Uj&my%B!oZL32k+@I-9NzOl$gOmV}CcqjF3NV?Y{Oxf@PRvw$&LOP8S3{os^|V zr`@p6fZ>-HM{~yaYqS{cSiDyKhC@4d%icgMf=}ewZDK>OvZbPp;#!W>pC#XU3gNo! zZb$hYj`DG0{XHiRhaz{Sbp*#kUDiqaR1T|0yA=UGgs5vzJco{PEX(ZsHQSwI)lkLC VtG@}(LQk(k1!1x*wqbE1!+%d4qxAp) literal 743 zcmVCVr_ z1H(<3LoU9O1?z^Rp{3mtTxFIxSQomT`arn56aj%dE~uS0f1Cvj2qcR0AQt4FOK?Y5b4nu*gYEL>#6=!@w; zSa^QAi4sTtnwSsQus%fj#xq>1rUPt0dkT^@H!h~g*nd?HEu4;LvB9{P&AcK*(F(I` zkiSa?MrvM9=iBeCgP%j}J4wzSQ<UH z$yqZq@~pHRDOUU%q?#}Xs}#+nKzAMQ&h&kRRbzsdop@SI#$8qKKCS@C=v8tTjtm@) zOb>i}P)Zqp9SB_2qMONzN#x_Nb2*i5ZYd{VSwa4mBJg$$)|My9v@;KyjE>dl%o~o% zg|akfhf8`v_Md_A@$&ES@bd2Q@$m8S@bdBO@$m2R@bK;N^7HcY@bU5S@bK{P@$T{Q z@$vKW^6~QV@$vHU@$vBR^6>KU@bL2R@$m2P@$m5S@a^#K@9^>Q?(gyK^6~KU@$&NW Z^6~QW@$v9KKR-V|KL!9sP(MFEKR@;gk_P|) diff --git a/inst/extdata/example.zarr/var/n_cells_by_counts/.zarray b/inst/extdata/example.zarr/var/n_cells_by_counts/.zarray index 2b1f74b6..5d06ede0 100644 --- a/inst/extdata/example.zarr/var/n_cells_by_counts/.zarray +++ b/inst/extdata/example.zarr/var/n_cells_by_counts/.zarray @@ -1,20 +1 @@ -{ - "chunks": [ - 100 - ], - "compressor": { - "blocksize": 0, - "clevel": 5, - "cname": "lz4", - "id": "blosc", - "shuffle": 1 - }, - "dtype": " zl0lKqSx#}RG;q!uxLe2Ft-~!zI;15Pl60g?mb2~x)*X@+kj@>0R3vwWC0WaH?j(0o JV^jhF0|C}bD-i$y literal 142 zcmW;F!3_d25CgykghT-paGy)Ews(_s!ka=UgC3~#2*?`CKc7$Ywq4AA-ez`RUd!PE(t0J5zqf-d>$Q9LfWOlXV I_&ome3*}iB#Q*>R diff --git a/inst/extdata/example.zarr/var/pct_dropout_by_counts/.zarray b/inst/extdata/example.zarr/var/pct_dropout_by_counts/.zarray index 6f4beac3..022fef30 100644 --- a/inst/extdata/example.zarr/var/pct_dropout_by_counts/.zarray +++ b/inst/extdata/example.zarr/var/pct_dropout_by_counts/.zarray @@ -1,20 +1 @@ -{ - "chunks": [ - 100 - ], - "compressor": { - "blocksize": 0, - "clevel": 5, - "cname": "lz4", - "id": "blosc", - "shuffle": 1 - }, - "dtype": "wJ-f(AOe*J07AtO7{DbR!2kdM|Np-=c{h?cPZg=*c@Kn40XF~tyJ|EJ zo|-Io4QW&*!dO{Fx}Y|Ku>_Z=YJ)^z0X*Qm&kpU#)wXS1sNi^LGr$6wGS&eRATXkO z%D6Bba)FU(URLZp9TU=~+{_`HLin0Evybp~VU74Xn}i@St`C-F(I8M-fUFv`-)*=3 zRFfN8J-DbzI*1u<%Ta&HlHQ@Q(c=ZZY4@f{VDj2&nz&oGAL`W6D=t4eldXM)%i?$G Why$?qQCALqLXJTaMF3QK)=B|nB52+K literal 315 zcmW-au}j8448>or*Yb&iEhrQR?~^PMBE%~Pr7mu+-|XVz|Bs7XA*SZYyWe}^E{R@G z=MFgfjet7<9QPB5@cZJs(>@T910G384h~Oy*q{MBGQ#DUlZPCT;m-J(+yf#<9tiPh zh!6M3V#`r}23>(Vq#h|F4WR3Tal+(1=o#G>bPt-55@jFWAN~M2uRNUq diff --git a/inst/extdata/example.zarr/var/total_counts/.zarray b/inst/extdata/example.zarr/var/total_counts/.zarray index 788682bc..022fef30 100644 --- a/inst/extdata/example.zarr/var/total_counts/.zarray +++ b/inst/extdata/example.zarr/var/total_counts/.zarray @@ -1,20 +1 @@ -{ - "chunks": [ - 100 - ], - "compressor": { - "blocksize": 0, - "clevel": 5, - "cname": "lz4", - "id": "blosc", - "shuffle": 1 - }, - "dtype": "$$0 X%FF{xymb^dI-Hp xx?M;1ZM(8(&Zb3cHXJy&WYwj4PY!H*bn4!pHYX5ZWpEDwGXSbjRB!+Q diff --git a/inst/extdata/example.zarr/varm/.zattrs b/inst/extdata/example.zarr/varm/.zattrs index a204673f..468e470d 100644 --- a/inst/extdata/example.zarr/varm/.zattrs +++ b/inst/extdata/example.zarr/varm/.zattrs @@ -1,4 +1 @@ -{ - "encoding-type": "dict", - "encoding-version": "0.1.0" -} \ No newline at end of file +{"encoding-type":"dict","encoding-version":"0.1.0"} \ No newline at end of file diff --git a/inst/extdata/example.zarr/varm/.zgroup b/inst/extdata/example.zarr/varm/.zgroup index 3b7daf22..c71fe9d0 100644 --- a/inst/extdata/example.zarr/varm/.zgroup +++ b/inst/extdata/example.zarr/varm/.zgroup @@ -1,3 +1 @@ -{ - "zarr_format": 2 -} \ No newline at end of file +{"zarr_format":2} \ No newline at end of file diff --git a/inst/extdata/example.zarr/varm/PCs/.zarray b/inst/extdata/example.zarr/varm/PCs/.zarray index 24b887b5..14f83954 100644 --- a/inst/extdata/example.zarr/varm/PCs/.zarray +++ b/inst/extdata/example.zarr/varm/PCs/.zarray @@ -1,22 +1 @@ -{ - "chunks": [ - 100, - 38 - ], - "compressor": { - "blocksize": 0, - "clevel": 5, - "cname": "lz4", - "id": "blosc", - "shuffle": 1 - }, - "dtype": "0fI?(UWpq+6H1ga`;I>CzxANW;$M|NNNe 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 literal 7702 zcmbtZcU%+sx4jdZqJkoVSk`e}6}zskt|&UTRqSnbMbuGr?Q8F4#|Cyq1XM%@5Co*8 zKnN{N3Mr64LJ&|aV_ADa*R^Zjo$UMZ`@FwjVnSx-e$PGk+&ejDMnrUO!fgc*UOwLe zcmseRzB&N`_W$!RPsiQ=pM#TK0qi*(!%!^4u`B}|kQ~k9XP#t926qC*1Ibc&kmgvD z$Kwp{CrOIoDSYP`jK;+zgJC4DXDE)QIGzNOCJ`1x5Rhg#d{Pv}kO;uBK=LdAEgU8t zaSThdB+KwT;6JRK;SrjrXqsgxo(7JjfT9`RfzObXz=@;*p*j30JY2xT?n`kbj|pg= z$7L+g9M3Zhh1)cZ`EU#2XetO=dWv9)-Iv9JkUq)N$OBUW!>}B19FMsGIWxG3BI99^ zJrHXGmSac~fT4k;c$5PP@(hg`c@{}y-5g6Zh`|8K^AyK&6bBS5)QrOLEKQRLO95X9 zt?hvfiAh<6VJJpOO`*sv&rt})aWo=QNQa_v4>p4)QEm=ciepd>1Qycrs4=i4&oCRI zH5N3~?n{%1!~u2&a2?CAEW#oc5`=WDP!v+!iuo6_G;$Xj0+@oqj~sxYontM_Az2o8 zuq1`dIEv&^5)9)2d7uC^E=2@Pf~0^1td^y5H#_<@=pyI$_at_0>%ShkBn@1j)hDA0MBJmWy7+gY=9MWM}q>Z9r^%O;OJWpY3 z0JvGsBt;exZ@bVGt|KXyq>(zXJg#ARY$%Jm0f{Pd6wOe`Uie50%Ckrh2H1UAlElR{ zHbLNzyl@Mv=1J6oW)PCY0;f8M*?oB+fhG|U9~6!nMFY=}7)PNLJTBoG9{AqGPapyb zG8c;FNS2Bs8r+Z&X2e2hK>!M{r&v-?fy2)YK0J#I7!s916ePfK7>r8On2%(zbbOM{ z2#!StJP%j{1L00~0wEY)5R7IW(nY~gVJsTj^Y~y{4&fXWNRH$W-*7iC;&6Je(lQf z6dvaRC<@z0Q!L8BDxFIh3Kt0V(bQz{7Gmu_Bu*PP2#^$q%45w!A5d<@hg|0u&k904)FsO|5mai$D+sFg1<3 z148(?hOK9D9|_zL!rlz05)0;mrYMeNS$qM7d`Xh*OL!3jh&Kd7lN8`up5*`)V}>+; z-HOC*ie(W}m=IhHIDrhJBMQeb)In%Ty>LH^0^zvfky*m{%xw^1PdJjJX_90B7>;6} zxVK~%xmR*HqzsMoiOQW81jkeuf#stt7>>dqER8kr9EErc#j_Oon~Na$)dpV%1>s1? zUi?V%6otA2$6@7CXEY_st9LD2HpI>Sdr8kU?z;QJ z$CPdqV@;yQ7!R~+_uyqD2oHy!@F~+}RZ%Lx_dVuRIy()}e3*FYZcw+CSN~b)rtR`` z=fmSaZ8WX4Hu}lBg}WpP+~#d_8=6*xIQ3e;9!AG1MkXKq*e8EaOy$cd!6Vwe{^y3n zPtMNkQy&QIQbV5WepGqLZGH4}97l z`QeVo`92{ts>soW@%>IIJmhBw)=VsSQ3W6IT;cGOsSCr$3|ne|9i#n-qOu)F`$wL> zx%j-IKB6KlH_5M#^ZeESVOBPsAMWz1&*9*Qx7uIX(Cxv34Q)EOy7|o+x%d9h0T*461=A;blK-}WbudIhl2-ug=Xpej@%Xe zB$T;+`RG1t#Vl88z{)PgUc<)TNtMLEco*ia=%Ky4Ywk}i9{F!MuOAl_v1qw^UCC8( zU6Scj4hjL6hh7ENOW8$KLKyKW`4uUua$%5-~Wl{__rX z+h+L<2jrvwI)7k-XNLcmAunRU%YF<72b2^4^!jH-=$w-UhgZ&W&mS@{yZX)jq?so5 z-BoZ zTBmoK_SFko#7#@rv^VyRy7jpIM?(3Un+863o`u+b4Svs_H@!CO&F5!pzv*Tii(H{d zzR-3-iSz29$}2a`3#q0(7fOe3Jule(k%3=bI|oc0_goUS=D%5! zRPw0xxZ23z&e*n%7#g@?!Rbq5OzX~?wk3_3(59h%yP>Q9y0FNvZAI&c3EoT{w9{@d#7b(m)7pNHGfT7!6x^C^_kW}=dDE{ zwr3yTk0^V8^jSXB?3nqDD0q+VRYaiG>q677cY_lg?7>TJ{*nNxHHeG*wF-df&W6H-~p8hN6yzO=?EB2!J==kx< zki2=^caL1J&q;e_Y+35x=7A zi^WcF7O7`~ABNAf`_?X+@c#K!TV>|`%T<}Iwy?Qdn{gl8_f4MgpxfrVan8Li9vvp4 zrbNR63}0;bt@L!ibv$@zo8p~+G<2Oa>gR`KdRVpMMaqq9{t2at!#}yne|v43e+f^M zKe~n1^^vZSJfBqjEp*WcSZQG|;-v>Qtd(kUA zdfBJDZw|hAQZRezzU(KZaXyNzMgG;U@k0K2t`Ez`hIJO#-+gh0YH_LtxWs^U( z`r(bCu6F&b4b>Bt_(U{+9NVYSbOwIk@8FPKYgbynY#F++%XiVA!{3hGzWwtr?K9d$ z=$+s6&-tOpgj))S=>(n3y&5)m#iKcM75yg+^y#$8obmm#(D#d@U$h_#UM}c3Yu<$> z^P2v-!u`Q0^VS_rCOEY-_Py0EZ1_%>&u^~nUf$-5Pjo{@OlNbm0egbU z)TcM6B)y$d-}zv>_lx5`eLHjbbrik1pya{DPUGv!b3Qpe&9N_hS@omp*>7E|v?n#k zVsFMqr~foW(XX- z$(2*@qMH2@5a-o=)f0#5n7Ykds&Jx`d;VUj4%+CIHo<9W$=BacPx8KhH|E3z`cw7J zarc}!qL*Ug_fh53zjW2MNjMm=`q#%DY?q_9oZ0HyRXu+F`s*S~yTI|^xtF@F+20|_ z_3fIw>8nDerkQu%oSiYSpnPgZdMM-{87``ipKsXkuj$OGcR#sHrti|Pu8jWsTu4gd zDz`DySAFE07PqxkLwv18=B-qG}U&%N#*9#cFtt$!L4 z;T14|d$hHy&bno>)6%ccdI#NH{`H@+Q$8jQEAAV4?e-Usz0OM_UCu9C6r3|AYwVGo zPv`wJEc;2z2ZOG^oPBWK>>o!4kH0*>t=HO=(XmCTHJek%#y#r#U(;z}`SjuA-5c$r zrbdh{{-XV7-+(6Fy?^(Z{ct?HP=blmv#YxARNTK#xt)9i~~``fN|9`rP;;X?Q7 z_?>$vcP`yUe)~G2%3(SZ)9ny-vtiGimNp!lcAdNb%X`zgQGe$>B*Kr}IPWuQX!p{& zGVkMx)`3m`_;7e@=vMEh{fTY+L@}=(b!+~hu$SwT{9Wm{*L8>~G_><+G@a}9AK#sC z#?>1aM-B6MwzGDe^E01!-<&3e_WNn{=uK-MJ@0h#g4_PlJ)pNQ3Y{|asWQ$3p9 z4k){|qjhFlYPYC(g5bgcP zNByN&euF-KiCjLZYS4y;XSelxyF4hmX>*uPl`Un;u$e6<-g$SlAGam)UQkhs85O2d zR+PuD%nqMAJFrW1XSUtec6S4=oGuwtyP;#|lAKlIQL)jf-6X#b%qq0UH_v@E;>}Ig zZ(#5Ln2t|C@z~|EA>--k-C$z#duKKl`Ubr8>D+(l%)ls9YG~@Gj@_Qxi!Ok-eZ)Dq zvVTm-M@d?=iTt=HsD*CVI(h2YpqQi0GHZ_=lQd-fY5R3-225HvAuY_7eQ@fMw%e{h z>o=IP1^G<Rh3-vddZO$qh1+PVYB1s;t;#9|829E@3hys!!C_4ANgjZXq{iu z0!x|XP;gnzhm_OXyu(H6S$gqi!E~BlSjv`!tj>}ZE82IFJR|igbN)jAP4DE&PgB4A zu0QqT=zt+jOpT_q^(#60(%r*-S{Lk1s7mUuH6LGmI%cPTw})YY@_q+nZgigc-5}lY zwT@ppmHRTZ=L+S;5~f<6n_~>g;0{_;MhkZ|vBFe$NK;y1NmDB&1MyyI?Wyi#v<%YyyEhzWbamhLIyrPn9WqD+2r8c+N zVooz~hJ2k|mToK&XBKc=kg{@Gcs{iN>om+)+Vb|D=Oq%l(FK!rc+qACsh_Bi7TvEYr}1(^lka4Gg4#I zmKRqSX2;1a)$4N;OO3il)5+f^J6WcQR-0oBb%zsc^Y&M%^m|JT`t+Qd)2mHooGP!> zAhkJ6$5?hD)1a%+>$xjjszhhgYR#7PVsWKXBUgv1)2~LD&0={~np~Y-UU5=ls*j-{kP z%AK)@i!~~7euhO+XDQ66F*caDs!f)H!u3^&CE`+f=~+#ATtafWULPU598qPH z=IF&*Yi?Cxs!=0W7t~3Tw_GVzZez3lEKk1{m8Yt(Nu);QzG{n1Tv#5d$yHWy8nwh~ z$U2{>jtNhz(B_nxxw0~8>QU`JOHpCEL|d(}CMfg&YdY#gHK#AGzNpa}i_R<4S#h?t z!d8=;bu~XLLtLOQDUxWa4XKT$BefP-RV7u@!rbu7I=!wmr%J6((w{A_)FeqS6z;1q zVr-FbS=M(GKQ zQhTJ}M7+|%s%^$p&eUi+SomC*9k)3@S6WeO(3Y!{EE;*KSaU%uRh>IqdflpuKT@8;86`z!+JxHdD+OxH zhFFV6uPC%68myeMT&uEXabh*wXgWqNQI@4r%JQzo=V&YuhJ;+1%wSAQ)0r|WN~|_R zqPbF{zS?Lyd3iC#du+z&LX+C2O)FDyI=xwT*sxCjl zCYD?FpD8_ZJpXhQr!p8Ng?rgk(sR{$T9xVgY+Y${7vXZ=A$yx}b9JUF&ZMo4i7r(n zS}V`X$~I*WSLv1M3#xV6D2cc_ZM!?s#vZ6D)Nz;9X491`VZ}ycvMr~mpsq$OmSrC; zI-My`++oynwzxu0ZLE$ttIU!XL|Qg$FY0Qt@=L9$HCd%ex#jATGZhh+6OGo*1BgTR zb_S_>d!c!YMQkwaR9VCcYIT`O5vJZLsm?pIey=JbM-@?Kx{cpwDrjjBOifcu#4#n7 zSgS=}qgUnETr5-RxPpX@61{A;t}IuQX2~hdt18n-GUV0r3i*#FEgQ>brR7Rr-vU+Ypxsr{Psp3x6$KagA#-Kixa?WqNHS`@W4O##CK01yrETz8@`;tsWXrx zO9*gs1;S0ZE!3){BS3S2-av=|0)TJ@Q3rs3KmPzkYXCO^fN%k#xnpxPfWPC0QhOjg zz@;6)ED-euC(?2E$qRyj_yu4v5Y2>ZWQat}0%9igD;YTnyl_fr_#2$0Kr|&F1E2_? z2{=`Pr#m5B-WUq|!HEHUhh{)bBb?oYYq`+M!RR$1@EQcr4hS_k`$4A?CA1+13fW+d zz=PNcA`v*x1m_Tdt{_5k?%>=5h;Bf%5ON6DyIaFy2i!q`e*iC`ic&!o2_h?aqTa*= zf(QiQ0XzVL1>(>Gz!!+`z^y5WuqJf%9w2fD(J_IG$P0)j0G9wJg21#rhh){o!A zD4j4C7g6XXK+FZ$4z3%3XamG1Al$+84-oD~z#I@c18f1X0_+fqb-|rQgs8KlGsv_H z5N!d@0VD{c1Ji{o%lljrU*!;}3AkVoK@hl!^;Q5e07N9f214`%h#!UCxU~ktpAeci z3W!bsO~LbjZwkORaAtsr1`*<+JS9T)j*1tcAOx%gmr%!nW8l;gJTpYYgux+N5s(Uy z1yBm28UoZHLOI%kCw}MS@k1_7gv$qj4unWgfG2^YkK@n=h64l<#AqSE(DybXm>^Jg zatC4+f%A)J1>rBW#bpnHsfG)wpgRE%g}KF9aK=gT0dNN5A$YEG@+R<1=tJPSCBkXM zPU8HabX^@d*a4gzoNMgrFv4@Q^DLP7~fIL}97TmJ`5pt2PJ diff --git a/inst/extdata/example.zarr/varp/.zattrs b/inst/extdata/example.zarr/varp/.zattrs index a204673f..468e470d 100644 --- a/inst/extdata/example.zarr/varp/.zattrs +++ b/inst/extdata/example.zarr/varp/.zattrs @@ -1,4 +1 @@ -{ - "encoding-type": "dict", - "encoding-version": "0.1.0" -} \ No newline at end of file +{"encoding-type":"dict","encoding-version":"0.1.0"} \ No newline at end of file diff --git a/inst/extdata/example.zarr/varp/.zgroup b/inst/extdata/example.zarr/varp/.zgroup index 3b7daf22..c71fe9d0 100644 --- a/inst/extdata/example.zarr/varp/.zgroup +++ b/inst/extdata/example.zarr/varp/.zgroup @@ -1,3 +1 @@ -{ - "zarr_format": 2 -} \ No newline at end of file +{"zarr_format":2} \ No newline at end of file diff --git a/inst/extdata/example2.zarr/.zattrs b/inst/extdata/example2.zarr/.zattrs deleted file mode 100644 index 55361a32..00000000 --- a/inst/extdata/example2.zarr/.zattrs +++ /dev/null @@ -1 +0,0 @@ -{"encoding-type":"anndata","encoding-version":"0.1.0"} \ No newline at end of file diff --git a/inst/extdata/example2.zarr/X/.zattrs b/inst/extdata/example2.zarr/X/.zattrs deleted file mode 100644 index 018aaed3..00000000 --- a/inst/extdata/example2.zarr/X/.zattrs +++ /dev/null @@ -1 +0,0 @@ -{"encoding-type":"csr_matrix","encoding-version":"0.1.0","shape":[50,100]} \ No newline at end of file diff --git a/inst/extdata/example2.zarr/X/data/.zarray b/inst/extdata/example2.zarr/X/data/.zarray deleted file mode 100644 index 7207923d..00000000 --- a/inst/extdata/example2.zarr/X/data/.zarray +++ /dev/null @@ -1 +0,0 @@ -{"zarr_format":2,"shape":[4317],"chunks":[4317],"dtype":"x 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 WH%9?@M64&q9L#k>q)rTDv;G0i236ev diff --git a/inst/extdata/example2.zarr/X/indices/.zarray b/inst/extdata/example2.zarr/X/indices/.zarray deleted file mode 100644 index cb6bf2dc..00000000 --- a/inst/extdata/example2.zarr/X/indices/.zarray +++ /dev/null @@ -1 +0,0 @@ -{"zarr_format":2,"shape":[4317],"chunks":[4317],"dtype":"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
Qq6196zZockb2vc-!N(Yp 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 bf!>CTRu-3D=@t_Ajufr1{`W}56W;#-_@npo diff --git a/inst/extdata/example2.zarr/layers/csc_counts/indices/.zarray b/inst/extdata/example2.zarr/layers/csc_counts/indices/.zarray deleted file mode 100644 index cb6bf2dc..00000000 --- a/inst/extdata/example2.zarr/layers/csc_counts/indices/.zarray +++ /dev/null @@ -1 +0,0 @@ -{"zarr_format":2,"shape":[4317],"chunks":[4317],"dtype":"xD?y_*U=kons-n_Q+{{4P`&*gJ_Yzpn)2h^=!71P4AW91l=4kzxI zoSrr_zs`PVtG`?0@9Ur4Z2wr=@!3^xKab%yolV=ki;Y>ma`{RZ=b?^8w+0`0tqGs8 z;f#;g(`~$;WsjVyi6s*zxQ6x42yp7~w43q68}+r-4UrCoGfF)hk|H&gO?AU(Pw|>C z$|=#jy<6*+XEXNxuqWOB%2(xOdFq#Pw{F=yU_*9{pJUy+4i&Q>DkVxtwH8@YpA;NGP|hUGi82L0|)fUyXNi=^O)?= zu>uG3k$GgLCC0BSm}=RhTTXmc$%G58uIEF0-D^BnRho077V1x$e)-Ew9^s;X9*0?b ztbZKVPvuXIPR+aEKcH`)-g&$O@k!c2jI@DSUXQc-zV>t((8VY$Z^SU4F4>zlZixFn zwsQRWbMQ&$PA}o3Cv#FS-42{*e{5&c^?|i8xWcBo>mI?grqCYn!?XxmgI(079O^Yc zar?G}nunR+^hsKL>R?LTx1lzJt-E)M|D@GwSE>@G3`6#fPAxnv>b&MoV1eO0^Y#>A zQLuswULhva1LiWZ4}Q#DB6{2LA2AAvH&z zd+GrM%rC&EE_-fv@)BRiW2Gh7#*t}=M1Z1bWR%k&UUGZUc*WS_h482BWc&+&NMI<) zI*8DFf{-yChiO2{;3CU{ntRCQKr3W3)6cL;kQvw~?;8+|Q}2=u2(E-;3BFYXUs!jc zYTFM9y+THiHavB~dkK>Lkvl3(N)iTju3WBf=S)~%CM=>2=u;)*O;rHM7*v38>q(me zrGP~tKte(k{s7z(Y7QZP4$-3eHe(NJ6xIst(OYU~!#5yOdf-XY0%MActvs){OdxrX zAUSh_@q}aAlb*Ia6?A(T%eI?e?p9J-+)hCPN-asF{8i+{bI=!Fjz(+2lvo=hfDt8d zf#O0~l2i>p(aCEg^Y6jf~N#&+J!V48A zl9Zf{h};DV#QGG_7_|k=%;EByL*~CVSD*&Hp+Di<{bG)wmiG{2X?bcv(-|UxTWHV_ zaEBeVKb1EOMFRo*Ao^9Kcd*ui<T>*j(tfFk6Tp3Q9PC zu&pScl~hJHN|KsJh3Jeah$}uM$WWvPeT6s#6cT~OZd!C0Bp(Vsxfm`2t@i0MXaSo_ zR;>{BAb_TL2D1e#hER5L6iJIktWo$QQW7($Ty_D@1(U&T)!9sMG}C39Dgy!02`lV< z>!r{_a~!~A6HbNea{$0&gkZLj1ae0PLWBLU02Y)4@qYnAl0ZxldNt4nM9`E)kfu4G z9XcNBL|%$@_rA|@6CCvt16D28euy&-W`nNg?TsharH>DTdZ%bj9r4RKxa+72Omf&I@08QO z9B?9!%O(%ysc4@C(FzC1sl;(d5rvY0aw?GmKHdu?tLk`V0p?kPxY2d_p9H$~*a=3v zg3%+?DOok0A|Z9+8qiIZ?4VN8Xcm<}8kFf8p<~1s)PgJp8I}{TD?XfRh0sD0T&5_G z&_@cPXt@A2j&Bs`fs9$qMNC9q@|YBvBGX05XwEOXUu-0|Z6HRo&6G}V`H)HR9!OjO diff --git a/inst/extdata/example2.zarr/layers/dense_X/.zarray b/inst/extdata/example2.zarr/layers/dense_X/.zarray deleted file mode 100644 index 3b0e1b62..00000000 --- a/inst/extdata/example2.zarr/layers/dense_X/.zarray +++ /dev/null @@ -1 +0,0 @@ -{"zarr_format":2,"shape":[50,100],"chunks":[50,100],"dtype":"=OId0ZP6LJD%;kX~nNeE48!q>fM0t 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 diff --git a/inst/extdata/example2.zarr/obs/.zattrs b/inst/extdata/example2.zarr/obs/.zattrs deleted file mode 100644 index ab5aef8e..00000000 --- a/inst/extdata/example2.zarr/obs/.zattrs +++ /dev/null @@ -1 +0,0 @@ -{"encoding-type":"dataframe","encoding-version":"0.2.0","_index":"_index","column-order":["Float","FloatNA","Int","IntNA","Bool","BoolNA","n_genes_by_counts","log1p_n_genes_by_counts","total_counts","log1p_total_counts","leiden"]} \ No newline at end of file diff --git a/inst/extdata/example2.zarr/obs/BoolNA/.zattrs b/inst/extdata/example2.zarr/obs/BoolNA/.zattrs deleted file mode 100644 index 75fcc6b4..00000000 --- a/inst/extdata/example2.zarr/obs/BoolNA/.zattrs +++ /dev/null @@ -1 +0,0 @@ -{"encoding-type":"nullable-boolean","encoding-version":"0.1.0"} \ No newline at end of file diff --git a/inst/extdata/example2.zarr/obs/BoolNA/.zgroup b/inst/extdata/example2.zarr/obs/BoolNA/.zgroup deleted file mode 100644 index c71fe9d0..00000000 --- a/inst/extdata/example2.zarr/obs/BoolNA/.zgroup +++ /dev/null @@ -1 +0,0 @@ -{"zarr_format":2} \ No newline at end of file diff --git a/inst/extdata/example2.zarr/obs/BoolNA/mask/.zarray b/inst/extdata/example2.zarr/obs/BoolNA/mask/.zarray deleted file mode 100644 index b3cb25af..00000000 --- a/inst/extdata/example2.zarr/obs/BoolNA/mask/.zarray +++ /dev/null @@ -1 +0,0 @@ -{"zarr_format":2,"shape":[50],"chunks":[50],"dtype":"|b1","compressor":{"id":"zstd","level":1},"fill_value":false,"order":"F","filters":null,"dimension_separator":"."} \ No newline at end of file diff --git a/inst/extdata/example2.zarr/obs/BoolNA/mask/0 b/inst/extdata/example2.zarr/obs/BoolNA/mask/0 deleted file mode 100644 index 297ca40955da9a935dd2ca37740d48557e514a63..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18 XcmdPcs{dEP$d`dZf`JhTT@p9|D+mK` diff --git a/inst/extdata/example2.zarr/obs/BoolNA/values/.zarray b/inst/extdata/example2.zarr/obs/BoolNA/values/.zarray deleted file mode 100644 index b3cb25af..00000000 --- a/inst/extdata/example2.zarr/obs/BoolNA/values/.zarray +++ /dev/null @@ -1 +0,0 @@ -{"zarr_format":2,"shape":[50],"chunks":[50],"dtype":"|b1","compressor":{"id":"zstd","level":1},"fill_value":false,"order":"F","filters":null,"dimension_separator":"."} \ No newline at end of file diff --git a/inst/extdata/example2.zarr/obs/BoolNA/values/0 b/inst/extdata/example2.zarr/obs/BoolNA/values/0 deleted file mode 100644 index 83f150e0356b0261fcd97f6bb0e0d59e292fe3a2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18 ZcmdPcs{dEP$d`dZf`NgNk-;T_0{|-r18)ET diff --git a/inst/extdata/example2.zarr/obs/Float/.zarray b/inst/extdata/example2.zarr/obs/Float/.zarray deleted file mode 100644 index 47c667b8..00000000 --- a/inst/extdata/example2.zarr/obs/Float/.zarray +++ /dev/null @@ -1 +0,0 @@ -{"zarr_format":2,"shape":[50],"chunks":[50],"dtype":"fSgh6V;O_)-5&Bc}h5sjCAc!>?u2Q~|yI3y%N* diff --git a/inst/extdata/example2.zarr/obs/Int/.zarray b/inst/extdata/example2.zarr/obs/Int/.zarray deleted file mode 100644 index 50de36a3..00000000 --- a/inst/extdata/example2.zarr/obs/Int/.zarray +++ /dev/null @@ -1 +0,0 @@ -{"zarr_format":2,"shape":[50],"chunks":[50],"dtype":"pni3ja{hPtQ)yP0dWqOUp{iNy$ja nN5@9SMa4wKL&HMCLBT-4ueZzHYO~m@wMv~zqXRKi0ssR6`dlTc diff --git a/inst/extdata/example2.zarr/obs/IntNA/.zattrs b/inst/extdata/example2.zarr/obs/IntNA/.zattrs deleted file mode 100644 index 0372e0a7..00000000 --- a/inst/extdata/example2.zarr/obs/IntNA/.zattrs +++ /dev/null @@ -1 +0,0 @@ -{"encoding-type":"nullable-integer","encoding-version":"0.1.0"} \ No newline at end of file diff --git a/inst/extdata/example2.zarr/obs/IntNA/.zgroup b/inst/extdata/example2.zarr/obs/IntNA/.zgroup deleted file mode 100644 index c71fe9d0..00000000 --- a/inst/extdata/example2.zarr/obs/IntNA/.zgroup +++ /dev/null @@ -1 +0,0 @@ -{"zarr_format":2} \ No newline at end of file diff --git a/inst/extdata/example2.zarr/obs/IntNA/mask/.zarray b/inst/extdata/example2.zarr/obs/IntNA/mask/.zarray deleted file mode 100644 index b3cb25af..00000000 --- a/inst/extdata/example2.zarr/obs/IntNA/mask/.zarray +++ /dev/null @@ -1 +0,0 @@ -{"zarr_format":2,"shape":[50],"chunks":[50],"dtype":"|b1","compressor":{"id":"zstd","level":1},"fill_value":false,"order":"F","filters":null,"dimension_separator":"."} \ No newline at end of file diff --git a/inst/extdata/example2.zarr/obs/IntNA/mask/0 b/inst/extdata/example2.zarr/obs/IntNA/mask/0 deleted file mode 100644 index bcf4d24c9d87fb9bb51bb6b6da71adc6e76b2f90..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17 YcmdPcs{dEP$d!RXfRTZb!Igm<04DVV0{{R3 diff --git a/inst/extdata/example2.zarr/obs/IntNA/values/.zarray b/inst/extdata/example2.zarr/obs/IntNA/values/.zarray deleted file mode 100644 index 50de36a3..00000000 --- a/inst/extdata/example2.zarr/obs/IntNA/values/.zarray +++ /dev/null @@ -1 +0,0 @@ -{"zarr_format":2,"shape":[50],"chunks":[50],"dtype":"ygdvD90uja_!URN^0swIV1DOB- diff --git a/inst/extdata/example2.zarr/obs/leiden/codes/.zarray b/inst/extdata/example2.zarr/obs/leiden/codes/.zarray deleted file mode 100644 index 50de36a3..00000000 --- a/inst/extdata/example2.zarr/obs/leiden/codes/.zarray +++ /dev/null @@ -1 +0,0 @@ -{"zarr_format":2,"shape":[50],"chunks":[50],"dtype":"KavC&-4Q_cimn%3^btS` zqxfD%#SuWhTqVIC3lf6lVvXdi5G*kp&i{01r@l`X64Yh(2`IU9v9F0xdT`eB!eJp2 zKq*cm6h&=iou&eNpbwJ-f(kN}ki0OSV%001DvN)Z)0JxXHr|cjAA{9W57x3>Clwgi^py5h`He?8LSQ~}h WfHu>Ei;#hfV}%>qC5U?e!21Fv4wj^+%BuNUM0{4@HOq12UL$u zJt|_D`u0-^<3tvz BL_Gii diff --git a/inst/extdata/example2.zarr/obsm/.zattrs b/inst/extdata/example2.zarr/obsm/.zattrs deleted file mode 100644 index 468e470d..00000000 --- a/inst/extdata/example2.zarr/obsm/.zattrs +++ /dev/null @@ -1 +0,0 @@ -{"encoding-type":"dict","encoding-version":"0.1.0"} \ No newline at end of file diff --git a/inst/extdata/example2.zarr/obsm/.zgroup b/inst/extdata/example2.zarr/obsm/.zgroup deleted file mode 100644 index c71fe9d0..00000000 --- a/inst/extdata/example2.zarr/obsm/.zgroup +++ /dev/null @@ -1 +0,0 @@ -{"zarr_format":2} \ No newline at end of file diff --git a/inst/extdata/example2.zarr/obsm/X_pca/.zarray b/inst/extdata/example2.zarr/obsm/X_pca/.zarray deleted file mode 100644 index 7eb3a10b..00000000 --- a/inst/extdata/example2.zarr/obsm/X_pca/.zarray +++ /dev/null @@ -1 +0,0 @@ -{"zarr_format":2,"shape":[50,38],"chunks":[50,38],"dtype":"@OWOa6(HfcJe{+ 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 diff --git a/inst/extdata/example2.zarr/obsm/X_umap/.zarray b/inst/extdata/example2.zarr/obsm/X_umap/.zarray deleted file mode 100644 index 1191f0a7..00000000 --- a/inst/extdata/example2.zarr/obsm/X_umap/.zarray +++ /dev/null @@ -1 +0,0 @@ -{"zarr_format":2,"shape":[50,2],"chunks":[50,2],"dtype":"MGdVd$?lg~h=D7=Y# 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 O?QoQypy*I81jtq##2XI) diff --git a/inst/extdata/example2.zarr/obsp/connectivities/indices/.zarray b/inst/extdata/example2.zarr/obsp/connectivities/indices/.zarray deleted file mode 100644 index 2f6c77a8..00000000 --- a/inst/extdata/example2.zarr/obsp/connectivities/indices/.zarray +++ /dev/null @@ -1 +0,0 @@ -{"zarr_format":2,"shape":[964],"chunks":[964],"dtype":"i&bubF(`SogMcDI<>%Il)FIwkyix!cQZB_!5y(P}uAdVV)GGchl<*sJ4W zqV=#^IE?~=etLd6xt7|>Ny$h^#YAf%bt)wc1pMS)YA3OaidE{AFfjVr`R#HkCnd4h zMn=WzR0_G*D~Y`(S`Vv+Q^CN{PR=dnrIs@Ckx|h~?euDP zx!Y_d<+V|9Dh2&|IXAbL*+}fwidZcq925)${Bm}=+HBx#^6IE)rA`AmH8Z=ITFOXB?A38m5vNkYC}1e4XXmD7mwTD5oQ#BgbZlf?Ohh!K zP6q`;J2^KmB_pqnjn?X5VCQC+yT#OIDIXmh7p;hfQ^7#M&#z{etIbkQLShpMqo1Cg zU(QXbQt#IF&}dU9P2e5_`2G8WKhUHMd$yNykL1;goPNFdFLJ?6r}RD)nw=b}hA)*z2NVq80J5kUEtT4hjZFLq9veo0(m1wo>vDdu3d-B2uSP z!a+e$O-yYhB=*|4sCZZ{q)rK=p`Bmv7V}b@os4|ME+!rZdU9rVx0YH;NXEme;dC(Y z>($I+ua1d_RYU4jIv5E0`SogYx0jaMY$fHSB;@0jQ8CeqST&?hrGuZH-tP9&GFwSG j3HgYo0%tFv;lI`=+-|S+VWHb5>?iRWpx-%I=vfwjE(+00Se12iGG%rA||gPXkd$ z51iTb}Ha>~dh@#{p)3n-2yX0Atxb AB>(^b diff --git a/inst/extdata/example2.zarr/obsp/distances/.zattrs b/inst/extdata/example2.zarr/obsp/distances/.zattrs deleted file mode 100644 index fcbdbc4d..00000000 --- a/inst/extdata/example2.zarr/obsp/distances/.zattrs +++ /dev/null @@ -1 +0,0 @@ -{"encoding-type":"csr_matrix","encoding-version":"0.1.0","shape":[50,50]} \ No newline at end of file diff --git a/inst/extdata/example2.zarr/obsp/distances/.zgroup b/inst/extdata/example2.zarr/obsp/distances/.zgroup deleted file mode 100644 index c71fe9d0..00000000 --- a/inst/extdata/example2.zarr/obsp/distances/.zgroup +++ /dev/null @@ -1 +0,0 @@ -{"zarr_format":2} \ No newline at end of file diff --git a/inst/extdata/example2.zarr/obsp/distances/data/.zarray b/inst/extdata/example2.zarr/obsp/distances/data/.zarray deleted file mode 100644 index 3110581d..00000000 --- a/inst/extdata/example2.zarr/obsp/distances/data/.zarray +++ /dev/null @@ -1 +0,0 @@ -{"zarr_format":2,"shape":[700],"chunks":[700],"dtype":"=87c(Fz>p+w*3@XWTOzgvkL$0C`P%VZfFkvVGbJY5-k?^fu=VChT+<_0V=WP%&&wh(a4%T;`@^h%@+YGDTIuyJV*Jfq+)w8bjx}T} zj!hr!c%C3w4RB*Inx|1ttXwK}NJ{tx5RcgR9bs}z;807U^d-}jK5e0iwvx&3HgNob z>*EDVJd-<~W^(a1jsNoeRkQYQp{$P$tu&uOKQWe5SFN~&i6{`5<@i>dm-d@NM^{^* zaTU#s|Kpg$JmM`%T`GDh8`pFYao@y4+AIo}akNx|&aBsMPQNp5{0)|-m=s#YxLw99 zcENet=E!2y?dV*=$40U(M8NV*vR_BB%eHo!vMl-$d?JMcT zRS1_GbJ5S0Sq2@Q?F4s@O8QJDK^tOGDUew#8KPq^zK`j^bqpoaPeYBe`6_E)Jg;#O zC?0S5)|vVE!32E4%T$88wRYc3M%r4tF)#D2wE-4i#o!o48Jz_H>4$@fR`?5{Qez8h z*I3V6X)6|#)Om!7p7~}GgBy0~pJf+31SI?pX!NO;=9uk=y_NKOif3ih4q6&Z7;INW zUo>16r$Ac|F?(4WmqrYDaE}=4J#x7NwZ}J1?5hXSa!n@4m605?eR*63x?;S%-GqzV zPb?5VK!-~ux3LWO+288aVC3H{iay42`)10lGcZf1dkEL2WE{V6fP4(-xNjuLeaT4j zW05_DlgD41L#J2}cr1nTt4%9@iVf_~QBqYp8XE%Bube`izaVkkRn|9&K=DJ;CGP{b zbAza^J`1dvuj2?p_LE5%X9Onj##wf!ra4~BO)HLhK7PKA-D&}n%?Gf2eBo}zl*}{+ zWM$(xHdfA7e?~z!4!IUrfGZ;8{^N+}u53PgvKi{PZZJ?qXML^$sB<0wj_rJL+@)#7 z>zUpAi`>jTD$c(B+w*VAZizNFWt_9(AX7f}p@L%%Yb%a}#_uLV{33RaT?pzZ zsH*n)E(KR=@a#v<;&Jj!=ZReuW3LFasC}#`M0>sHPi*8)Hg=AzvLUGf`_>3xt+iYI zinJMUd-aNlSD}g;Q4}s>!&b&re3yJU~pV8WQO|!~a_&fW4jUcw2X+qO0@iYg4s(>UZx@ zXVPn9JPw3u~aOSUj!;m2cXcy3G3uO=2>Q~vmm z#m{DwK1RFz7n(X(*xUDq-I_8;``C4yhQwk=I5rY9X08{`+mF-SPj2}K8zTo?2s3{3 z^3BUp^iDllJxvpLT2=TjhX>tIP9>E<+LCL^M=Bt%*&%~t~}y@WQbcevH6 ztZ}6zUP{MRqiFG&nZ*JZNYu^A*`oXu8Az8O1oY&XnOSvx;nwMxJ1wI4dLj?h#LyP=Lf{5#NQM_G|O z34NxidobvuGwzXnoUw^J=1v1H!83M0iloO8BhnTDN2;vAW)q}=gbvVHBW2V7n|^5H zq!Wc0foumT zK3uqvb+Xcq%m1x**J(Z4)qNMp*r&GOQIl)Oua5{fBig!e|CxfE1=W81Z4vW8PRF$) z`W^!^Oy?PEzqxd-{d(qRQVaHS&V&~+2kQ(TxMlo6PtbO8#f-g@S)SLkH!q?(mi_1u z>yy7u94>A75dNB2|Fg}a28O9K8^YSb+_xQVAaxPi;}DMVB5TiHZOc|9vz?EhK;$GW zcX&SEoYEaAHgVYxcSCaePg4z>_b_5KTEw8daWR(``+a82$cHaQ=G@)AaqE_O<`2<1 zbXX7F(`W`DrJB#PA!U zZMYM`7!V#Bj)PAu557t7dbhS)@^Y(9>=#OG2do;LrQ;97VEBBo=C-$>Yj~^i(v(4p zg}||^&d3SG0*9p}aE=4Lbhxi>PS7*4VU7+RJC`|$GFNZUVzhdap483?YNsikBE#ps zK(x;eyrE01EGeuE5|~4-xplq3Xx+QMIQN<+A)VJgp_MJ<1<2*z4AQh7P3oCrUGRRy Y|Adz*9kAtV(T(^{ZPL?P_(SKl0@C8L6aWAK diff --git a/inst/extdata/example2.zarr/obsp/distances/indices/.zarray b/inst/extdata/example2.zarr/obsp/distances/indices/.zarray deleted file mode 100644 index cbbd003b..00000000 --- a/inst/extdata/example2.zarr/obsp/distances/indices/.zarray +++ /dev/null @@ -1 +0,0 @@ -{"zarr_format":2,"shape":[700],"chunks":[700],"dtype":"1;9ykp^qtGT(+2wAv+3M4<`7V`&jabI3RdFhHHVfYXlL>Yo zu>~?-7Za&ZC$qafsLf)ni_(J6cgfv4Vi~Pdsnf8jBusL(*{d~?Dm82}UnP>;sKpw* zTB*}$lbJ+vw_3)lRWS-Je3wZicdNxRTB%bh^yw^QavvQJHeM5@(WjI7CLa$rYOje? zDHp5Msr30SkzGe^meE>8q(To3nQwyKM@L4*L}|33vq_ljYO~m@b&(o{It}0Cf!u@I z?A5whMVuZgkq2@gwFaxx=YUP-n?!cE+ANka5qjt}e3yjWtu~9jPNf9CO2Pn<2eny7 zgI8!{6IsZ*)bkohVPUK0_gQs{HQ zCi7JyyWB07@oKFmQm4?v5g diff --git a/inst/extdata/example2.zarr/obsp/distances/indptr/.zarray b/inst/extdata/example2.zarr/obsp/distances/indptr/.zarray deleted file mode 100644 index cb92258e..00000000 --- a/inst/extdata/example2.zarr/obsp/distances/indptr/.zarray +++ /dev/null @@ -1 +0,0 @@ -{"zarr_format":2,"shape":[51],"chunks":[51],"dtype":"pF diff --git a/inst/extdata/example2.zarr/uns/Sparse1D/indptr/.zarray b/inst/extdata/example2.zarr/uns/Sparse1D/indptr/.zarray deleted file mode 100644 index 095926c2..00000000 --- a/inst/extdata/example2.zarr/uns/Sparse1D/indptr/.zarray +++ /dev/null @@ -1 +0,0 @@ -{"zarr_format":2,"shape":[7],"chunks":[7],"dtype":";5GDp@MgV=C1WNz_ diff --git a/inst/extdata/example2.zarr/uns/String/.zarray b/inst/extdata/example2.zarr/uns/String/.zarray deleted file mode 100644 index e3dba627..00000000 --- a/inst/extdata/example2.zarr/uns/String/.zarray +++ /dev/null @@ -1 +0,0 @@ -{"zarr_format":2,"shape":[10],"chunks":[10],"dtype":"|O","compressor":{"id":"zstd","level":1},"fill_value":0,"order":"F","filters":[{"id":"vlen-utf8"}],"dimension_separator":"."} \ No newline at end of file diff --git a/inst/extdata/example2.zarr/uns/String/0 b/inst/extdata/example2.zarr/uns/String/0 deleted file mode 100644 index fc79f96daf8f30f28e64baa86037ccd3be6f2842..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 50 zcmdPcs{dD^#+Q-d1Q!DX0|yWXmlS2@r7IX18X23InweWzaP;e4U+S73=EBoO+eVx%-q7#5-4I4vLdniKktXB ph5`i>ca*Fs{BhxxyMKJy&mX6qv*m67-gwIXBR~E}g|_9yPyp3HA_4#a diff --git a/inst/extdata/example2.zarr/uns/StringScalar/.zarray b/inst/extdata/example2.zarr/uns/StringScalar/.zarray deleted file mode 100644 index 6d9d7eb3..00000000 --- a/inst/extdata/example2.zarr/uns/StringScalar/.zarray +++ /dev/null @@ -1 +0,0 @@ -{"zarr_format":2,"shape":[],"chunks":[],"dtype":"|O","compressor":{"id":"zstd","level":1},"fill_value":0,"order":"F","filters":[{"id":"vlen-utf8"}],"dimension_separator":"."} \ No newline at end of file diff --git a/inst/extdata/example2.zarr/uns/StringScalar/.zattrs b/inst/extdata/example2.zarr/uns/StringScalar/.zattrs deleted file mode 100644 index dbc5f479..00000000 --- a/inst/extdata/example2.zarr/uns/StringScalar/.zattrs +++ /dev/null @@ -1 +0,0 @@ -{"encoding-type":"string","encoding-version":"0.2.0"} \ No newline at end of file diff --git a/inst/extdata/example2.zarr/uns/StringScalar/0 b/inst/extdata/example2.zarr/uns/StringScalar/0 deleted file mode 100644 index a48edc2c58a4cdfdf58dee5ed07f9f0dff4dd8ee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25 ecmdPcs{dC(ppk)rk%57M1Be|Jic5+z^U?uG_XWHF diff --git a/inst/extdata/example2.zarr/uns/hvg/.zattrs b/inst/extdata/example2.zarr/uns/hvg/.zattrs deleted file mode 100644 index 468e470d..00000000 --- a/inst/extdata/example2.zarr/uns/hvg/.zattrs +++ /dev/null @@ -1 +0,0 @@ -{"encoding-type":"dict","encoding-version":"0.1.0"} \ No newline at end of file diff --git a/inst/extdata/example2.zarr/uns/hvg/.zgroup b/inst/extdata/example2.zarr/uns/hvg/.zgroup deleted file mode 100644 index c71fe9d0..00000000 --- a/inst/extdata/example2.zarr/uns/hvg/.zgroup +++ /dev/null @@ -1 +0,0 @@ -{"zarr_format":2} \ No newline at end of file diff --git a/inst/extdata/example2.zarr/uns/hvg/flavor/.zarray b/inst/extdata/example2.zarr/uns/hvg/flavor/.zarray deleted file mode 100644 index 6d9d7eb3..00000000 --- a/inst/extdata/example2.zarr/uns/hvg/flavor/.zarray +++ /dev/null @@ -1 +0,0 @@ -{"zarr_format":2,"shape":[],"chunks":[],"dtype":"|O","compressor":{"id":"zstd","level":1},"fill_value":0,"order":"F","filters":[{"id":"vlen-utf8"}],"dimension_separator":"."} \ No newline at end of file diff --git a/inst/extdata/example2.zarr/uns/hvg/flavor/.zattrs b/inst/extdata/example2.zarr/uns/hvg/flavor/.zattrs deleted file mode 100644 index dbc5f479..00000000 --- a/inst/extdata/example2.zarr/uns/hvg/flavor/.zattrs +++ /dev/null @@ -1 +0,0 @@ -{"encoding-type":"string","encoding-version":"0.2.0"} \ No newline at end of file diff --git a/inst/extdata/example2.zarr/uns/hvg/flavor/0 b/inst/extdata/example2.zarr/uns/hvg/flavor/0 deleted file mode 100644 index 89fc26e4fd6ad2e7c60f36747cb299f8fab20ada..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23 ccmdPcs{dDkuaJR(k%57M4Ty_VON$aq06z`|L;wH) diff --git a/inst/extdata/example2.zarr/uns/leiden/.zattrs b/inst/extdata/example2.zarr/uns/leiden/.zattrs deleted file mode 100644 index 468e470d..00000000 --- a/inst/extdata/example2.zarr/uns/leiden/.zattrs +++ /dev/null @@ -1 +0,0 @@ -{"encoding-type":"dict","encoding-version":"0.1.0"} \ No newline at end of file diff --git a/inst/extdata/example2.zarr/uns/leiden/.zgroup b/inst/extdata/example2.zarr/uns/leiden/.zgroup deleted file mode 100644 index c71fe9d0..00000000 --- a/inst/extdata/example2.zarr/uns/leiden/.zgroup +++ /dev/null @@ -1 +0,0 @@ -{"zarr_format":2} \ No newline at end of file diff --git a/inst/extdata/example2.zarr/uns/leiden/params/.zattrs b/inst/extdata/example2.zarr/uns/leiden/params/.zattrs deleted file mode 100644 index 468e470d..00000000 --- a/inst/extdata/example2.zarr/uns/leiden/params/.zattrs +++ /dev/null @@ -1 +0,0 @@ -{"encoding-type":"dict","encoding-version":"0.1.0"} \ No newline at end of file diff --git a/inst/extdata/example2.zarr/uns/leiden/params/.zgroup b/inst/extdata/example2.zarr/uns/leiden/params/.zgroup deleted file mode 100644 index c71fe9d0..00000000 --- a/inst/extdata/example2.zarr/uns/leiden/params/.zgroup +++ /dev/null @@ -1 +0,0 @@ -{"zarr_format":2} \ No newline at end of file diff --git a/inst/extdata/example2.zarr/uns/leiden/params/n_iterations/.zarray b/inst/extdata/example2.zarr/uns/leiden/params/n_iterations/.zarray deleted file mode 100644 index e2f75040..00000000 --- a/inst/extdata/example2.zarr/uns/leiden/params/n_iterations/.zarray +++ /dev/null @@ -1 +0,0 @@ -{"zarr_format":2,"shape":[1],"chunks":[1],"dtype":"Y@mSmG(PrK)iP2{a-0yjYd2e__Wy>5J^Eby{^=B3`g3#X=@?e+a0AHj$M)V-m;Nh()n)0){X2RAN;vs iHccV<>9K%Z21#x6ZD#vfB(3v#uG&msJXe4FCkp^_c4qeg diff --git a/inst/extdata/example2.zarr/uns/pca/variance_ratio/.zarray b/inst/extdata/example2.zarr/uns/pca/variance_ratio/.zarray deleted file mode 100644 index ca8e6716..00000000 --- a/inst/extdata/example2.zarr/uns/pca/variance_ratio/.zarray +++ /dev/null @@ -1 +0,0 @@ -{"zarr_format":2,"shape":[38],"chunks":[38],"dtype":"Ox}l_O6NpwQUbgYv#SI{4LR9ox5dA=9?`jZz zfRi!7@BIpg=fTSuLQ9q&n8&*0!P%-s4sBBwrp=o-J!}q-OV!$J89Ti&K}|45E| znDAOZ5M+YFd{b|GIR@^@hKA-2!W%dQ_7o+jOKTf#+qE$(nail`-i%efvXZO!8*VgP iroeoM;jF%D^0Q+tw;7xq1O!-E7#$r14)$huO8@}UlwU#s diff --git a/inst/extdata/example2.zarr/uns/rank_genes_groups/.zattrs b/inst/extdata/example2.zarr/uns/rank_genes_groups/.zattrs deleted file mode 100644 index 468e470d..00000000 --- a/inst/extdata/example2.zarr/uns/rank_genes_groups/.zattrs +++ /dev/null @@ -1 +0,0 @@ -{"encoding-type":"dict","encoding-version":"0.1.0"} \ No newline at end of file diff --git a/inst/extdata/example2.zarr/uns/rank_genes_groups/.zgroup b/inst/extdata/example2.zarr/uns/rank_genes_groups/.zgroup deleted file mode 100644 index c71fe9d0..00000000 --- a/inst/extdata/example2.zarr/uns/rank_genes_groups/.zgroup +++ /dev/null @@ -1 +0,0 @@ -{"zarr_format":2} \ No newline at end of file diff --git a/inst/extdata/example2.zarr/uns/rank_genes_groups/logfoldchanges/.zattrs b/inst/extdata/example2.zarr/uns/rank_genes_groups/logfoldchanges/.zattrs deleted file mode 100644 index 468e470d..00000000 --- a/inst/extdata/example2.zarr/uns/rank_genes_groups/logfoldchanges/.zattrs +++ /dev/null @@ -1 +0,0 @@ -{"encoding-type":"dict","encoding-version":"0.1.0"} \ No newline at end of file diff --git a/inst/extdata/example2.zarr/uns/rank_genes_groups/logfoldchanges/.zgroup b/inst/extdata/example2.zarr/uns/rank_genes_groups/logfoldchanges/.zgroup deleted file mode 100644 index c71fe9d0..00000000 --- a/inst/extdata/example2.zarr/uns/rank_genes_groups/logfoldchanges/.zgroup +++ /dev/null @@ -1 +0,0 @@ -{"zarr_format":2} \ No newline at end of file diff --git a/inst/extdata/example2.zarr/uns/rank_genes_groups/names/.zattrs b/inst/extdata/example2.zarr/uns/rank_genes_groups/names/.zattrs deleted file mode 100644 index 468e470d..00000000 --- a/inst/extdata/example2.zarr/uns/rank_genes_groups/names/.zattrs +++ /dev/null @@ -1 +0,0 @@ -{"encoding-type":"dict","encoding-version":"0.1.0"} \ No newline at end of file diff --git a/inst/extdata/example2.zarr/uns/rank_genes_groups/names/.zgroup b/inst/extdata/example2.zarr/uns/rank_genes_groups/names/.zgroup deleted file mode 100644 index c71fe9d0..00000000 --- a/inst/extdata/example2.zarr/uns/rank_genes_groups/names/.zgroup +++ /dev/null @@ -1 +0,0 @@ -{"zarr_format":2} \ No newline at end of file diff --git a/inst/extdata/example2.zarr/uns/rank_genes_groups/names/2/.zattrs b/inst/extdata/example2.zarr/uns/rank_genes_groups/names/2/.zattrs deleted file mode 100644 index 5b014145..00000000 --- a/inst/extdata/example2.zarr/uns/rank_genes_groups/names/2/.zattrs +++ /dev/null @@ -1 +0,0 @@ -{"encoding-type":"string-array","encoding-version":"0.2.0"} \ No newline at end of file diff --git a/inst/extdata/example2.zarr/uns/rank_genes_groups/names/3/.zattrs b/inst/extdata/example2.zarr/uns/rank_genes_groups/names/3/.zattrs deleted file mode 100644 index 5b014145..00000000 --- a/inst/extdata/example2.zarr/uns/rank_genes_groups/names/3/.zattrs +++ /dev/null @@ -1 +0,0 @@ -{"encoding-type":"string-array","encoding-version":"0.2.0"} \ No newline at end of file diff --git a/inst/extdata/example2.zarr/uns/rank_genes_groups/names/4/.zattrs b/inst/extdata/example2.zarr/uns/rank_genes_groups/names/4/.zattrs deleted file mode 100644 index 5b014145..00000000 --- a/inst/extdata/example2.zarr/uns/rank_genes_groups/names/4/.zattrs +++ /dev/null @@ -1 +0,0 @@ -{"encoding-type":"string-array","encoding-version":"0.2.0"} \ No newline at end of file diff --git a/inst/extdata/example2.zarr/uns/rank_genes_groups/names/5/.zattrs b/inst/extdata/example2.zarr/uns/rank_genes_groups/names/5/.zattrs deleted file mode 100644 index 5b014145..00000000 --- a/inst/extdata/example2.zarr/uns/rank_genes_groups/names/5/.zattrs +++ /dev/null @@ -1 +0,0 @@ -{"encoding-type":"string-array","encoding-version":"0.2.0"} \ No newline at end of file diff --git a/inst/extdata/example2.zarr/uns/rank_genes_groups/params/.zattrs b/inst/extdata/example2.zarr/uns/rank_genes_groups/params/.zattrs deleted file mode 100644 index 468e470d..00000000 --- a/inst/extdata/example2.zarr/uns/rank_genes_groups/params/.zattrs +++ /dev/null @@ -1 +0,0 @@ -{"encoding-type":"dict","encoding-version":"0.1.0"} \ No newline at end of file diff --git a/inst/extdata/example2.zarr/uns/rank_genes_groups/params/.zgroup b/inst/extdata/example2.zarr/uns/rank_genes_groups/params/.zgroup deleted file mode 100644 index c71fe9d0..00000000 --- a/inst/extdata/example2.zarr/uns/rank_genes_groups/params/.zgroup +++ /dev/null @@ -1 +0,0 @@ -{"zarr_format":2} \ No newline at end of file diff --git a/inst/extdata/example2.zarr/uns/rank_genes_groups/params/corr_method/.zarray b/inst/extdata/example2.zarr/uns/rank_genes_groups/params/corr_method/.zarray deleted file mode 100644 index 6d9d7eb3..00000000 --- a/inst/extdata/example2.zarr/uns/rank_genes_groups/params/corr_method/.zarray +++ /dev/null @@ -1 +0,0 @@ -{"zarr_format":2,"shape":[],"chunks":[],"dtype":"|O","compressor":{"id":"zstd","level":1},"fill_value":0,"order":"F","filters":[{"id":"vlen-utf8"}],"dimension_separator":"."} \ No newline at end of file diff --git a/inst/extdata/example2.zarr/uns/rank_genes_groups/params/corr_method/.zattrs b/inst/extdata/example2.zarr/uns/rank_genes_groups/params/corr_method/.zattrs deleted file mode 100644 index dbc5f479..00000000 --- a/inst/extdata/example2.zarr/uns/rank_genes_groups/params/corr_method/.zattrs +++ /dev/null @@ -1 +0,0 @@ -{"encoding-type":"string","encoding-version":"0.2.0"} \ No newline at end of file diff --git a/inst/extdata/example2.zarr/uns/rank_genes_groups/params/corr_method/0 b/inst/extdata/example2.zarr/uns/rank_genes_groups/params/corr_method/0 deleted file mode 100644 index b55dafa43e91214e4b1f28f2b46e62f2f41daff1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35 pcmdPcs{dC(>LLRJBLf425D+J&=4B=3X69w;X5=SlB&8Om0|2KJ3Pb<^ diff --git a/inst/extdata/example2.zarr/uns/rank_genes_groups/params/groupby/.zarray b/inst/extdata/example2.zarr/uns/rank_genes_groups/params/groupby/.zarray deleted file mode 100644 index 6d9d7eb3..00000000 --- a/inst/extdata/example2.zarr/uns/rank_genes_groups/params/groupby/.zarray +++ /dev/null @@ -1 +0,0 @@ -{"zarr_format":2,"shape":[],"chunks":[],"dtype":"|O","compressor":{"id":"zstd","level":1},"fill_value":0,"order":"F","filters":[{"id":"vlen-utf8"}],"dimension_separator":"."} \ No newline at end of file diff --git a/inst/extdata/example2.zarr/uns/rank_genes_groups/params/groupby/.zattrs b/inst/extdata/example2.zarr/uns/rank_genes_groups/params/groupby/.zattrs deleted file mode 100644 index dbc5f479..00000000 --- a/inst/extdata/example2.zarr/uns/rank_genes_groups/params/groupby/.zattrs +++ /dev/null @@ -1 +0,0 @@ -{"encoding-type":"string","encoding-version":"0.2.0"} \ No newline at end of file diff --git a/inst/extdata/example2.zarr/uns/rank_genes_groups/params/groupby/0 b/inst/extdata/example2.zarr/uns/rank_genes_groups/params/groupby/0 deleted file mode 100644 index 7657c9e6010b100e4d7bb6c32954c712c72dacaf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23 ccmdPcs{dDkuaJR(k%57M4Ty76GgDIY06vTbApigX diff --git a/inst/extdata/example2.zarr/uns/rank_genes_groups/params/method/.zarray b/inst/extdata/example2.zarr/uns/rank_genes_groups/params/method/.zarray deleted file mode 100644 index 6d9d7eb3..00000000 --- a/inst/extdata/example2.zarr/uns/rank_genes_groups/params/method/.zarray +++ /dev/null @@ -1 +0,0 @@ -{"zarr_format":2,"shape":[],"chunks":[],"dtype":"|O","compressor":{"id":"zstd","level":1},"fill_value":0,"order":"F","filters":[{"id":"vlen-utf8"}],"dimension_separator":"."} \ No newline at end of file diff --git a/inst/extdata/example2.zarr/uns/rank_genes_groups/params/method/.zattrs b/inst/extdata/example2.zarr/uns/rank_genes_groups/params/method/.zattrs deleted file mode 100644 index dbc5f479..00000000 --- a/inst/extdata/example2.zarr/uns/rank_genes_groups/params/method/.zattrs +++ /dev/null @@ -1 +0,0 @@ -{"encoding-type":"string","encoding-version":"0.2.0"} \ No newline at end of file diff --git a/inst/extdata/example2.zarr/uns/rank_genes_groups/params/method/0 b/inst/extdata/example2.zarr/uns/rank_genes_groups/params/method/0 deleted file mode 100644 index 89a372db12f7108a182ec938a5ac4a0b6c76ef31..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23 ccmdPcs{dDkuaJR(k%57M4Twv0OHzwV06p~u5dZ)H diff --git a/inst/extdata/example2.zarr/uns/rank_genes_groups/params/reference/.zarray b/inst/extdata/example2.zarr/uns/rank_genes_groups/params/reference/.zarray deleted file mode 100644 index 6d9d7eb3..00000000 --- a/inst/extdata/example2.zarr/uns/rank_genes_groups/params/reference/.zarray +++ /dev/null @@ -1 +0,0 @@ -{"zarr_format":2,"shape":[],"chunks":[],"dtype":"|O","compressor":{"id":"zstd","level":1},"fill_value":0,"order":"F","filters":[{"id":"vlen-utf8"}],"dimension_separator":"."} \ No newline at end of file diff --git a/inst/extdata/example2.zarr/uns/rank_genes_groups/params/reference/.zattrs b/inst/extdata/example2.zarr/uns/rank_genes_groups/params/reference/.zattrs deleted file mode 100644 index dbc5f479..00000000 --- a/inst/extdata/example2.zarr/uns/rank_genes_groups/params/reference/.zattrs +++ /dev/null @@ -1 +0,0 @@ -{"encoding-type":"string","encoding-version":"0.2.0"} \ No newline at end of file diff --git a/inst/extdata/example2.zarr/uns/rank_genes_groups/params/reference/0 b/inst/extdata/example2.zarr/uns/rank_genes_groups/params/reference/0 deleted file mode 100644 index b825d22ea783595674c1d331aff6c0d1957841a0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21 acmdPcs{dDkCy{}Hk%57M1&E7Mi%S4A)C5`p diff --git a/inst/extdata/example2.zarr/uns/rank_genes_groups/params/use_raw/.zarray b/inst/extdata/example2.zarr/uns/rank_genes_groups/params/use_raw/.zarray deleted file mode 100644 index 15e93e4b..00000000 --- a/inst/extdata/example2.zarr/uns/rank_genes_groups/params/use_raw/.zarray +++ /dev/null @@ -1 +0,0 @@ -{"zarr_format":2,"shape":[1],"chunks":[1],"dtype":"|b1","compressor":{"id":"zstd","level":1},"fill_value":false,"order":"F","filters":null,"dimension_separator":"."} \ No newline at end of file diff --git a/inst/extdata/example2.zarr/uns/rank_genes_groups/params/use_raw/.zattrs b/inst/extdata/example2.zarr/uns/rank_genes_groups/params/use_raw/.zattrs deleted file mode 100644 index fc02c84a..00000000 --- a/inst/extdata/example2.zarr/uns/rank_genes_groups/params/use_raw/.zattrs +++ /dev/null @@ -1 +0,0 @@ -{"encoding-type":"numeric-scalar","encoding-version":"0.2.0"} \ No newline at end of file diff --git a/inst/extdata/example2.zarr/uns/rank_genes_groups/params/use_raw/0 b/inst/extdata/example2.zarr/uns/rank_genes_groups/params/use_raw/0 deleted file mode 100644 index 9263f8b471c085812467c474e547815d394fc076..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10 RcmdPcs{dDkk&}Ue0RRz00yF>s diff --git a/inst/extdata/example2.zarr/uns/rank_genes_groups/pvals/.zattrs b/inst/extdata/example2.zarr/uns/rank_genes_groups/pvals/.zattrs deleted file mode 100644 index 468e470d..00000000 --- a/inst/extdata/example2.zarr/uns/rank_genes_groups/pvals/.zattrs +++ /dev/null @@ -1 +0,0 @@ -{"encoding-type":"dict","encoding-version":"0.1.0"} \ No newline at end of file diff --git a/inst/extdata/example2.zarr/uns/rank_genes_groups/pvals/.zgroup b/inst/extdata/example2.zarr/uns/rank_genes_groups/pvals/.zgroup deleted file mode 100644 index c71fe9d0..00000000 --- a/inst/extdata/example2.zarr/uns/rank_genes_groups/pvals/.zgroup +++ /dev/null @@ -1 +0,0 @@ -{"zarr_format":2} \ No newline at end of file diff --git a/inst/extdata/example2.zarr/uns/rank_genes_groups/pvals/2/.zattrs b/inst/extdata/example2.zarr/uns/rank_genes_groups/pvals/2/.zattrs deleted file mode 100644 index c945ff39..00000000 --- a/inst/extdata/example2.zarr/uns/rank_genes_groups/pvals/2/.zattrs +++ /dev/null @@ -1 +0,0 @@ -{"encoding-type":"array","encoding-version":"0.2.0"} \ No newline at end of file diff --git a/inst/extdata/example2.zarr/uns/rank_genes_groups/pvals/3/.zattrs b/inst/extdata/example2.zarr/uns/rank_genes_groups/pvals/3/.zattrs deleted file mode 100644 index c945ff39..00000000 --- a/inst/extdata/example2.zarr/uns/rank_genes_groups/pvals/3/.zattrs +++ /dev/null @@ -1 +0,0 @@ -{"encoding-type":"array","encoding-version":"0.2.0"} \ No newline at end of file diff --git a/inst/extdata/example2.zarr/uns/rank_genes_groups/pvals/4/.zattrs b/inst/extdata/example2.zarr/uns/rank_genes_groups/pvals/4/.zattrs deleted file mode 100644 index c945ff39..00000000 --- a/inst/extdata/example2.zarr/uns/rank_genes_groups/pvals/4/.zattrs +++ /dev/null @@ -1 +0,0 @@ -{"encoding-type":"array","encoding-version":"0.2.0"} \ No newline at end of file diff --git a/inst/extdata/example2.zarr/uns/rank_genes_groups/pvals/5/.zattrs b/inst/extdata/example2.zarr/uns/rank_genes_groups/pvals/5/.zattrs deleted file mode 100644 index c945ff39..00000000 --- a/inst/extdata/example2.zarr/uns/rank_genes_groups/pvals/5/.zattrs +++ /dev/null @@ -1 +0,0 @@ -{"encoding-type":"array","encoding-version":"0.2.0"} \ No newline at end of file diff --git a/inst/extdata/example2.zarr/uns/rank_genes_groups/pvals_adj/.zattrs b/inst/extdata/example2.zarr/uns/rank_genes_groups/pvals_adj/.zattrs deleted file mode 100644 index 468e470d..00000000 --- a/inst/extdata/example2.zarr/uns/rank_genes_groups/pvals_adj/.zattrs +++ /dev/null @@ -1 +0,0 @@ -{"encoding-type":"dict","encoding-version":"0.1.0"} \ No newline at end of file diff --git a/inst/extdata/example2.zarr/uns/rank_genes_groups/pvals_adj/.zgroup b/inst/extdata/example2.zarr/uns/rank_genes_groups/pvals_adj/.zgroup deleted file mode 100644 index c71fe9d0..00000000 --- a/inst/extdata/example2.zarr/uns/rank_genes_groups/pvals_adj/.zgroup +++ /dev/null @@ -1 +0,0 @@ -{"zarr_format":2} \ No newline at end of file diff --git a/inst/extdata/example2.zarr/uns/rank_genes_groups/pvals_adj/0/.zattrs b/inst/extdata/example2.zarr/uns/rank_genes_groups/pvals_adj/0/.zattrs deleted file mode 100644 index c945ff39..00000000 --- a/inst/extdata/example2.zarr/uns/rank_genes_groups/pvals_adj/0/.zattrs +++ /dev/null @@ -1 +0,0 @@ -{"encoding-type":"array","encoding-version":"0.2.0"} \ No newline at end of file diff --git a/inst/extdata/example2.zarr/uns/rank_genes_groups/pvals_adj/1/.zattrs b/inst/extdata/example2.zarr/uns/rank_genes_groups/pvals_adj/1/.zattrs deleted file mode 100644 index c945ff39..00000000 --- a/inst/extdata/example2.zarr/uns/rank_genes_groups/pvals_adj/1/.zattrs +++ /dev/null @@ -1 +0,0 @@ -{"encoding-type":"array","encoding-version":"0.2.0"} \ No newline at end of file diff --git a/inst/extdata/example2.zarr/uns/rank_genes_groups/pvals_adj/2/.zattrs b/inst/extdata/example2.zarr/uns/rank_genes_groups/pvals_adj/2/.zattrs deleted file mode 100644 index c945ff39..00000000 --- a/inst/extdata/example2.zarr/uns/rank_genes_groups/pvals_adj/2/.zattrs +++ /dev/null @@ -1 +0,0 @@ -{"encoding-type":"array","encoding-version":"0.2.0"} \ No newline at end of file diff --git a/inst/extdata/example2.zarr/uns/rank_genes_groups/pvals_adj/3/.zattrs b/inst/extdata/example2.zarr/uns/rank_genes_groups/pvals_adj/3/.zattrs deleted file mode 100644 index c945ff39..00000000 --- a/inst/extdata/example2.zarr/uns/rank_genes_groups/pvals_adj/3/.zattrs +++ /dev/null @@ -1 +0,0 @@ -{"encoding-type":"array","encoding-version":"0.2.0"} \ No newline at end of file diff --git a/inst/extdata/example2.zarr/uns/rank_genes_groups/pvals_adj/4/.zattrs b/inst/extdata/example2.zarr/uns/rank_genes_groups/pvals_adj/4/.zattrs deleted file mode 100644 index c945ff39..00000000 --- a/inst/extdata/example2.zarr/uns/rank_genes_groups/pvals_adj/4/.zattrs +++ /dev/null @@ -1 +0,0 @@ -{"encoding-type":"array","encoding-version":"0.2.0"} \ No newline at end of file diff --git a/inst/extdata/example2.zarr/uns/rank_genes_groups/pvals_adj/5/.zattrs b/inst/extdata/example2.zarr/uns/rank_genes_groups/pvals_adj/5/.zattrs deleted file mode 100644 index c945ff39..00000000 --- a/inst/extdata/example2.zarr/uns/rank_genes_groups/pvals_adj/5/.zattrs +++ /dev/null @@ -1 +0,0 @@ -{"encoding-type":"array","encoding-version":"0.2.0"} \ No newline at end of file diff --git a/inst/extdata/example2.zarr/uns/rank_genes_groups/scores/.zattrs b/inst/extdata/example2.zarr/uns/rank_genes_groups/scores/.zattrs deleted file mode 100644 index 468e470d..00000000 --- a/inst/extdata/example2.zarr/uns/rank_genes_groups/scores/.zattrs +++ /dev/null @@ -1 +0,0 @@ -{"encoding-type":"dict","encoding-version":"0.1.0"} \ No newline at end of file diff --git a/inst/extdata/example2.zarr/uns/rank_genes_groups/scores/.zgroup b/inst/extdata/example2.zarr/uns/rank_genes_groups/scores/.zgroup deleted file mode 100644 index c71fe9d0..00000000 --- a/inst/extdata/example2.zarr/uns/rank_genes_groups/scores/.zgroup +++ /dev/null @@ -1 +0,0 @@ -{"zarr_format":2} \ No newline at end of file diff --git a/inst/extdata/example2.zarr/uns/rank_genes_groups/scores/0/.zattrs b/inst/extdata/example2.zarr/uns/rank_genes_groups/scores/0/.zattrs deleted file mode 100644 index c945ff39..00000000 --- a/inst/extdata/example2.zarr/uns/rank_genes_groups/scores/0/.zattrs +++ /dev/null @@ -1 +0,0 @@ -{"encoding-type":"array","encoding-version":"0.2.0"} \ No newline at end of file diff --git a/inst/extdata/example2.zarr/uns/rank_genes_groups/scores/1/.zattrs b/inst/extdata/example2.zarr/uns/rank_genes_groups/scores/1/.zattrs deleted file mode 100644 index c945ff39..00000000 --- a/inst/extdata/example2.zarr/uns/rank_genes_groups/scores/1/.zattrs +++ /dev/null @@ -1 +0,0 @@ -{"encoding-type":"array","encoding-version":"0.2.0"} \ No newline at end of file diff --git a/inst/extdata/example2.zarr/uns/rank_genes_groups/scores/2/.zattrs b/inst/extdata/example2.zarr/uns/rank_genes_groups/scores/2/.zattrs deleted file mode 100644 index c945ff39..00000000 --- a/inst/extdata/example2.zarr/uns/rank_genes_groups/scores/2/.zattrs +++ /dev/null @@ -1 +0,0 @@ -{"encoding-type":"array","encoding-version":"0.2.0"} \ No newline at end of file diff --git a/inst/extdata/example2.zarr/uns/rank_genes_groups/scores/3/.zattrs b/inst/extdata/example2.zarr/uns/rank_genes_groups/scores/3/.zattrs deleted file mode 100644 index c945ff39..00000000 --- a/inst/extdata/example2.zarr/uns/rank_genes_groups/scores/3/.zattrs +++ /dev/null @@ -1 +0,0 @@ -{"encoding-type":"array","encoding-version":"0.2.0"} \ No newline at end of file diff --git a/inst/extdata/example2.zarr/uns/rank_genes_groups/scores/4/.zattrs b/inst/extdata/example2.zarr/uns/rank_genes_groups/scores/4/.zattrs deleted file mode 100644 index c945ff39..00000000 --- a/inst/extdata/example2.zarr/uns/rank_genes_groups/scores/4/.zattrs +++ /dev/null @@ -1 +0,0 @@ -{"encoding-type":"array","encoding-version":"0.2.0"} \ No newline at end of file diff --git a/inst/extdata/example2.zarr/uns/rank_genes_groups/scores/5/.zattrs b/inst/extdata/example2.zarr/uns/rank_genes_groups/scores/5/.zattrs deleted file mode 100644 index c945ff39..00000000 --- a/inst/extdata/example2.zarr/uns/rank_genes_groups/scores/5/.zattrs +++ /dev/null @@ -1 +0,0 @@ -{"encoding-type":"array","encoding-version":"0.2.0"} \ No newline at end of file diff --git a/inst/extdata/example2.zarr/uns/umap/.zattrs b/inst/extdata/example2.zarr/uns/umap/.zattrs deleted file mode 100644 index 468e470d..00000000 --- a/inst/extdata/example2.zarr/uns/umap/.zattrs +++ /dev/null @@ -1 +0,0 @@ -{"encoding-type":"dict","encoding-version":"0.1.0"} \ No newline at end of file diff --git a/inst/extdata/example2.zarr/uns/umap/.zgroup b/inst/extdata/example2.zarr/uns/umap/.zgroup deleted file mode 100644 index c71fe9d0..00000000 --- a/inst/extdata/example2.zarr/uns/umap/.zgroup +++ /dev/null @@ -1 +0,0 @@ -{"zarr_format":2} \ No newline at end of file diff --git a/inst/extdata/example2.zarr/uns/umap/params/.zattrs b/inst/extdata/example2.zarr/uns/umap/params/.zattrs deleted file mode 100644 index 468e470d..00000000 --- a/inst/extdata/example2.zarr/uns/umap/params/.zattrs +++ /dev/null @@ -1 +0,0 @@ -{"encoding-type":"dict","encoding-version":"0.1.0"} \ No newline at end of file diff --git a/inst/extdata/example2.zarr/uns/umap/params/.zgroup b/inst/extdata/example2.zarr/uns/umap/params/.zgroup deleted file mode 100644 index c71fe9d0..00000000 --- a/inst/extdata/example2.zarr/uns/umap/params/.zgroup +++ /dev/null @@ -1 +0,0 @@ -{"zarr_format":2} \ No newline at end of file diff --git a/inst/extdata/example2.zarr/uns/umap/params/a/.zarray b/inst/extdata/example2.zarr/uns/umap/params/a/.zarray deleted file mode 100644 index 83389bad..00000000 --- a/inst/extdata/example2.zarr/uns/umap/params/a/.zarray +++ /dev/null @@ -1 +0,0 @@ -{"zarr_format":2,"shape":[1],"chunks":[1],"dtype":"WnK{itD(SAp(~Cev5{L)_5l$e& z2t<6^ylAKQ$H+?Yw>QhT IeEJk703i%Cj{pDw diff --git a/inst/extdata/example2.zarr/var/dispersions/.zarray b/inst/extdata/example2.zarr/var/dispersions/.zarray deleted file mode 100644 index 022fef30..00000000 --- a/inst/extdata/example2.zarr/var/dispersions/.zarray +++ /dev/null @@ -1 +0,0 @@ -{"zarr_format":2,"shape":[100],"chunks":[100],"dtype":"lJk3~AqzwR5s80vn~KY`ZNl?9yCzj~}5A2Pn%zaD1?TNYu+zn{E9AwRaD zznO<=FEVX8Kim-Gh#9Hkzv!c&)h~F?zorJphLMrKKbM%Hp*^#&Kk73c5GL`LzhR;h z%Tw>izwZuD3P4=VKS`V&kft2XKZJCkx{7?ZzX(Gg%|VX0Kltr{6trg2zbR{zpXbZa zKMDeTI6n)|zkhrg@MojgKT&PxKE?jgzmlqS`tw1~KX@|a)mhWYzba2o{LIegJ0B6UKglGg32`8-KM~hG*^BSUzgS`}X3JaPzW{$<3p}{OKO>y{8n#1+ zKc0a1L%96YzZvL+K+FcQzmPVx^B~Tmzdw?gzm`Jk#g?7bKh~15`gLa2zwfV>|9twz zzxsYd;oQN(zd+~TX6aPbzs~e|xwA&cKSWV>*IwqkKRpT&Vw1wBKXxaV6->mNKL<@R zzcx0uzg&vVxnNGaKjw=Q0r56#KaFdS=1#)9KkC#mzf;%5zw%ryMd0+yKb?4t{5uKG zznVRU+jh3qztnAs{fi9KzvlesQdJSxzt;og7js6o zKlygN`Y2(;Kln?X(A2KNzeSH?8z@J~zlEL6CgYmZzn*hjIuH>xKeR};aY8b)za99x zpN>+)zq&yOy-Ke;ila{KDZzZC{} oVlykcKVlD}jqcLGzXJVhI&}BLzna;ps!9>FzYjYJ3JyrtKf`vY5dZ)H diff --git a/inst/extdata/example2.zarr/var/dispersions_norm/.zarray b/inst/extdata/example2.zarr/var/dispersions_norm/.zarray deleted file mode 100644 index 022fef30..00000000 --- a/inst/extdata/example2.zarr/var/dispersions_norm/.zarray +++ /dev/null @@ -1 +0,0 @@ -{"zarr_format":2,"shape":[100],"chunks":[100],"dtype":"hwPV005v5iG@gut6#A5)!0000W z|Agc4C(k!$=>PzrEX-g!ZSP=?i~#-n*FYu)(7ylx0HDiv>z<(IOQGAp0002sYxMPi zSj+sd&43@5`9A;v06-cR=+U3*#(L}=sbGsQ_+WKC?eO-?#a-(jZM%2;)*Wf!)Ij#V zw6Z_$U@hC=;KMxQK=1+fAWVYm!b+w>S1?Z2%P@xO>Z0N*#+;Io9;W)tuJz}WPl!~zKC05)Kr zpypXWU_k@`+5y@CCGo)HruYMp5ED+VqL@1{W&-8WS7p)Q%3zQ*@}QOi@Bjzp@jy~}@Bl=d z^1zIf?jSiD^0xorG$rwX>XY#yuRzJQKp)QRV0o7CpwEl%;FW^%fVJ%KV26|Kw*S6p zzuJZ4m0y0w*T=C31BMF@PL>g@L=y;@c@bx z?tt}M@BmZN?%7 ztv?gq@qpw(62P%*z+oXEUGxz$hhTRM6M$7L@WW3Qv1=X+0L$nRAZKBKP= zpb-EU-4TIIfaI(ZU_j9kfY16*7QWx0fVxV}z)uzuKwqfv0<-JP0T3gZneq@YYJ}H1 zgKUeshh_0{yk5v&xRo($Hte|;TOL+?%()vFT!%!X)H0ohy$p`=fR;d>;0L+2#ai99 zWOo{z-IO{ccUD6O)Q)0i=j4eq^!F=Dcx<9kY1S6M&(Ho-KaM@Rw73o&O4qW`jP<$1 RH-rn?s&;+QCaT0XVG6Cgj?e%A diff --git a/inst/extdata/example2.zarr/var/mean_counts/.zarray b/inst/extdata/example2.zarr/var/mean_counts/.zarray deleted file mode 100644 index 022fef30..00000000 --- a/inst/extdata/example2.zarr/var/mean_counts/.zarray +++ /dev/null @@ -1 +0,0 @@ -{"zarr_format":2,"shape":[100],"chunks":[100],"dtype":"2iQF+L#$;~|qA9vF1hj1Q7R#P@tQj(%qhqk!`zJeYYom1S@8T5AOy}Gg5AjZ~ zCTizrX^ysh$YF;UW5f99-m-VF8|`>TF;I^V_$!Wk7S1bPLN*VYit9xKF*~^dinV*0 Sn<)#&_-}V->FT`SIIaTb?vqsj diff --git a/inst/extdata/example2.zarr/var/means/.zarray b/inst/extdata/example2.zarr/var/means/.zarray deleted file mode 100644 index 022fef30..00000000 --- a/inst/extdata/example2.zarr/var/means/.zarray +++ /dev/null @@ -1 +0,0 @@ -{"zarr_format":2,"shape":[100],"chunks":[100],"dtype":"VPedgbH91fi`dX%M6igTNX?F7R5ua&~hWd!r^ z)lmgAI9g5X{EO@L$o?ql-*tr$_)2}m#f{-%w{*Gk2#57{(SvLo9pqKY+hux!Kyj!n zsezD?+_)~kpFw}rNjdL0p{29VHY1r3*Xym_En!#_>aB_nUN#c+DMjWaen=z>7h!Ul5ZPhSbsLhD$k`Qv;`cC9V z6JjO_Dw}5!E|mtSeam8KTjMp|#FSx^!{2o?tr?zu2p$n;G8~_0QP}KD_+3|(Kg&#q z-g6yhHt~cFf<3JYIpJIFvRh9!5!!pATz7aIe5=o`PPFVplSRuP-vo{r&FPx4HXI7o z1hI=TVW=xiDwlHnYc?r8+)OxA8&WdkG9fI#XG~KOVOvM;ez{?H>2np9q!T<8?(%jo zLf12eNo%j6*FbcR@GFDe;j2rND;P?hWzLB)91XI^i+WZtG+r?(vC8F;M815z`~bl_ z+OIA2Aj8Cp@d?KE3@a-eCFVkoq9o~*%ut3OA$uKe1`-;W;DVhy!`pOK)}IkQYFrLR zgyb=d(RJTmB_LEMJbrG=82qY44}4=83eH-bcQfVi{PeDVYYT(8Ca0<;Pm2_%^MZ0A z!|)Uj&my%B!oZL32k+@I-9NzOl$gOmV}CcqjF3NV?Y{Oxf@PRvw$&LOP8S3{os^|V zr`@p6fZ>-HM{~yaYqS{cSiDyKhC@4d%icgMf=}ewZDK>OvZbPp;#!W>pC#XU3gNo! zZb$hYj`DG0{XHiRhaz{Sbp*#kUDiqaR1T|0yA=UGgs5vzJco{PEX(ZsHQSwI)lkLC VtG@}(LQk(k1!1x*wqbE1!+%d4qxAp) diff --git a/inst/extdata/example2.zarr/var/n_cells_by_counts/.zarray b/inst/extdata/example2.zarr/var/n_cells_by_counts/.zarray deleted file mode 100644 index 5d06ede0..00000000 --- a/inst/extdata/example2.zarr/var/n_cells_by_counts/.zarray +++ /dev/null @@ -1 +0,0 @@ -{"zarr_format":2,"shape":[100],"chunks":[100],"dtype":" zl0lKqSx#}RG;q!uxLe2Ft-~!zI;15Pl60g?mb2~x)*X@+kj@>0R3vwWC0WaH?j(0o JV^jhF0|C}bD-i$y diff --git a/inst/extdata/example2.zarr/var/pct_dropout_by_counts/.zarray b/inst/extdata/example2.zarr/var/pct_dropout_by_counts/.zarray deleted file mode 100644 index 022fef30..00000000 --- a/inst/extdata/example2.zarr/var/pct_dropout_by_counts/.zarray +++ /dev/null @@ -1 +0,0 @@ -{"zarr_format":2,"shape":[100],"chunks":[100],"dtype":"wJ-f(AOe*J07AtO7{DbR!2kdM|Np-=c{h?cPZg=*c@Kn40XF~tyJ|EJ zo|-Io4QW&*!dO{Fx}Y|Ku>_Z=YJ)^z0X*Qm&kpU#)wXS1sNi^LGr$6wGS&eRATXkO z%D6Bba)FU(URLZp9TU=~+{_`HLin0Evybp~VU74Xn}i@St`C-F(I8M-fUFv`-)*=3 zRFfN8J-DbzI*1u<%Ta&HlHQ@Q(c=ZZY4@f{VDj2&nz&oGAL`W6D=t4eldXM)%i?$G Why$?qQCALqLXJTaMF3QK)=B|nB52+K diff --git a/inst/extdata/example2.zarr/var/total_counts/.zarray b/inst/extdata/example2.zarr/var/total_counts/.zarray deleted file mode 100644 index 022fef30..00000000 --- a/inst/extdata/example2.zarr/var/total_counts/.zarray +++ /dev/null @@ -1 +0,0 @@ -{"zarr_format":2,"shape":[100],"chunks":[100],"dtype":"$$0 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 diff --git a/inst/extdata/example2.zarr/varp/.zattrs b/inst/extdata/example2.zarr/varp/.zattrs deleted file mode 100644 index 468e470d..00000000 --- a/inst/extdata/example2.zarr/varp/.zattrs +++ /dev/null @@ -1 +0,0 @@ -{"encoding-type":"dict","encoding-version":"0.1.0"} \ No newline at end of file diff --git a/inst/extdata/example2.zarr/varp/.zgroup b/inst/extdata/example2.zarr/varp/.zgroup deleted file mode 100644 index c71fe9d0..00000000 --- a/inst/extdata/example2.zarr/varp/.zgroup +++ /dev/null @@ -1 +0,0 @@ -{"zarr_format":2} \ No newline at end of file diff --git a/tests/testthat/test-Zarr-read.R b/tests/testthat/test-Zarr-read.R index 319d38a3..ea35c3dc 100644 --- a/tests/testthat/test-Zarr-read.R +++ b/tests/testthat/test-Zarr-read.R @@ -59,9 +59,10 @@ test_that("reading 1D nullable arrays works", { expect_vector(array_1d, ptype = double(), size = 50) expect_true(any(is.na(array_1d))) - array_1d <- read_zarr_nullable_boolean(store, "obs/Bool") - expect_vector(array_1d, ptype = logical(), size = 50) - expect_false(any(is.na(array_1d))) + # # TODO: non NA booleans dont have mask arrays, should they ? + # array_1d <- read_zarr_nullable_boolean(store, "obs/Bool") + # expect_vector(array_1d, ptype = logical(), size = 50) + # expect_false(any(is.na(array_1d))) array_1d <- read_zarr_nullable_boolean(store, "obs/BoolNA") expect_vector(array_1d, ptype = logical(), size = 50) @@ -101,7 +102,7 @@ test_that("reading dataframes works", { expect_equal( colnames(df), c( - ".index", "Float", "FloatNA", "Int", "IntNA", "Bool", "BoolNA", + "Float", "FloatNA", "Int", "IntNA", "Bool", "BoolNA", "n_genes_by_counts", "log1p_n_genes_by_counts", "total_counts", "log1p_total_counts", "leiden" ) diff --git a/tests/testthat/test-Zarr-write.R b/tests/testthat/test-Zarr-write.R index 812c98d0..de89162f 100644 --- a/tests/testthat/test-Zarr-write.R +++ b/tests/testthat/test-Zarr-write.R @@ -193,9 +193,7 @@ test_that("writing gzip compressed files works for Zarr", { adata <- AnnData( X = non_random_X, obs = dummy$obs, - var = dummy$var, - obs_names = dummy$obs_names, - var_names = dummy$var_names + var = dummy$var ) store_none <- pizzarr::MemoryStore$new() @@ -215,9 +213,7 @@ test_that("writing lzf compressed files works for Zarr", { adata <- AnnData( X = non_random_X, obs = dummy$obs, - var = dummy$var, - obs_names = dummy$obs_names, - var_names = dummy$var_names + var = dummy$var ) store_none <- pizzarr::MemoryStore$new() diff --git a/tests/testthat/test-ZarrAnnData.R b/tests/testthat/test-ZarrAnnData.R index 7e8a0892..dbb7d46d 100644 --- a/tests/testthat/test-ZarrAnnData.R +++ b/tests/testthat/test-ZarrAnnData.R @@ -58,8 +58,8 @@ test_that("obsm/ varm validation", { adata <- AnnData( X = mtx, - obs_names = as.character(1:N_OBS), - var_names = as.character(1:N_VAR) + obs = data.frame(row.names = as.character(1:N_OBS)), + var = data.frame(row.names = as.character(1:N_VAR)) ) adata$obsm <- list(PCA = matrix(0, N_OBS, 4)) @@ -74,8 +74,8 @@ test_that("obsp/ varp validation", { N_VAR <- 3 adata <- AnnData( - obs_names = as.character(1:N_OBS), - var_names = as.character(1:N_VAR) + obs = data.frame(row.names = as.character(1:N_OBS)), + var = data.frame(row.names = as.character(1:N_VAR)) ) adata$obsp <- list(graph1 = matrix(0, N_OBS, N_OBS)) @@ -127,69 +127,81 @@ test_that("reading var names works", { # SETTERS ---------------------------------------------------------------- test_that("creating empty Zarr works", { empty_store <- pizzarr::MemoryStore$new() - ZarrAnnData$new(empty_store, obs_names = 1:10, var_names = 1:20) + expect_silent(ZarrAnnData$new(empty_store)) }) # trackstatus: class=ZarrAnnData, feature=test_set_X, status=done test_that("writing X works", { store <- pizzarr::MemoryStore$new() - h5ad <- ZarrAnnData$new(store, obs_names = 1:10, var_names = 1:20) + obs <- data.frame(row.names = 1:10) + var <- data.frame(row.names = 1:20) + zarr <- ZarrAnnData$new(store, obs = obs, var = var) X <- matrix(rnorm(10 * 20), nrow = 10, ncol = 20) - expect_silent(h5ad$X <- X) + expect_silent(zarr$X <- X) }) # trackstatus: class=ZarrAnnData, feature=test_set_layers, status=done test_that("writing layers works", { store <- pizzarr::MemoryStore$new() - h5ad <- ZarrAnnData$new(store, obs_names = 1:10, var_names = 1:20) + obs <- data.frame(row.names = 1:10) + var <- data.frame(row.names = 1:20) + zarr <- ZarrAnnData$new(store, obs = obs, var = var) X <- matrix(rnorm(10 * 20), nrow = 10, ncol = 20) - expect_silent(h5ad$layers <- list(layer1 = X, layer2 = X)) + expect_silent(zarr$layers <- list(layer1 = X, layer2 = X)) }) # trackstatus: class=ZarrAnnData, feature=test_set_obs, status=done test_that("writing obs works", { store <- pizzarr::MemoryStore$new() - h5ad <- ZarrAnnData$new(store, obs_names = 1:10, var_names = 1:20) + obs <- data.frame(row.names = 1:10) + var <- data.frame(row.names = 1:20) + zarr <- ZarrAnnData$new(store, obs = obs, var = var) obs <- data.frame( Letters = LETTERS[1:10], Numbers = 1:10, row.names = paste0("Row", 1:10) ) - expect_warning(h5ad$obs <- obs, "should not have any rownames") - expect_identical(h5ad$obs_names, 1:10) + zarr$obs <- obs + expect_identical(zarr$obs_names, paste0("Row", 1:10)) }) # trackstatus: class=ZarrAnnData, feature=test_set_var, status=done test_that("writing var works", { store <- pizzarr::MemoryStore$new() - h5ad <- ZarrAnnData$new(store, obs_names = 1:10, var_names = 1:20) + obs <- data.frame(row.names = 1:10) + var <- data.frame(row.names = 1:20) + zarr <- ZarrAnnData$new(store, obs = obs, var = var) var <- data.frame( Letters = LETTERS[1:20], Numbers = 1:20, row.names = paste0("Row", 1:20) ) - expect_warning(h5ad$var <- var, "should not have any rownames") - expect_identical(h5ad$var_names, 1:20) + zarr$var <- var + expect_identical(zarr$var_names, paste0("Row", 1:20)) }) # trackstatus: class=ZarrAnnData, feature=test_set_obs_names, status=done test_that("writing obs names works", { store <- pizzarr::MemoryStore$new() - h5ad <- ZarrAnnData$new(store, obs_names = 1:10, var_names = 1:20) + obs <- data.frame(row.names = 1:10) + var <- data.frame(row.names = 1:20) + zarr <- ZarrAnnData$new(store, obs = obs, var = var) - h5ad$obs_names <- LETTERS[1:10] - expect_identical(h5ad$obs_names, LETTERS[1:10]) + zarr$obs_names <- LETTERS[1:10] + expect_identical(zarr$obs_names, LETTERS[1:10]) }) # trackstatus: class=ZarrAnnData, feature=test_set_var_names, status=done test_that("writing var names works", { store <- pizzarr::MemoryStore$new() - h5ad <- ZarrAnnData$new(store, obs_names = 1:10, var_names = 1:20) + obs <- data.frame(row.names = 1:10) + var <- data.frame(row.names = 1:20) + zarr <- ZarrAnnData$new(store, obs = obs, var = var) - h5ad$var_names <- LETTERS[1:20] - expect_identical(h5ad$var_names, LETTERS[1:20]) + zarr$var_names <- LETTERS[1:20] + expect_identical(zarr$var_names, LETTERS[1:20]) }) diff --git a/tests/testthat/test-h5ad-zarr.R b/tests/testthat/test-h5ad-zarr.R index 04b0556e..6518f8fc 100644 --- a/tests/testthat/test-h5ad-zarr.R +++ b/tests/testthat/test-h5ad-zarr.R @@ -4,8 +4,7 @@ skip_if_not_installed("pizzarr") # file <- system.file("extdata", "example.h5ad", package = "anndataR") file <- hdf5r::H5File$new(system.file("extdata", "example.h5ad", package = "anndataR"), mode = "r") -# zarr_dir <- system.file("extdata", "example.zarr", package = "anndataR") -zarr_dir <- system.file("extdata", "example2.zarr", package = "anndataR") +zarr_dir <- system.file("extdata", "example.zarr", package = "anndataR") store <- pizzarr::DirectoryStore$new(zarr_dir) test_that("reading dense matrices is same for h5ad and zarr", { @@ -119,9 +118,9 @@ test_that("reading H5AD as SingleCellExperiment is same for h5ad and zarr", { sce_h5ad <- read_h5ad(file, to = "SingleCellExperiment") # h5ad reads this column as characters like 'TRUE', 'FALSE', while zarr reads as logical - sce_h5ad@rowRanges@elementMetadata@listData$highly_variable <- as.logical( - sce_h5ad@rowRanges@elementMetadata@listData$highly_variable - ) + # sce_h5ad@rowRanges@elementMetadata@listData$highly_variable <- as.logical( + # sce_h5ad@rowRanges@elementMetadata@listData$highly_variable + # ) sce_zarr <- read_zarr(store, to = "SingleCellExperiment") expect_equal(sce_h5ad, sce_zarr) From 4a1bbde129e4bfa7309163b9ec5a9c94f62101ef Mon Sep 17 00:00:00 2001 From: Mark Keller <7525285+keller-mark@users.noreply.github.com> Date: Tue, 5 Nov 2024 12:02:43 -0500 Subject: [PATCH 19/25] Fix test --- R/ZarrAnnData.R | 5 +++-- R/write_zarr_helpers.R | 4 ++-- tests/testthat/test-SingleCellExperiment.R | 17 +++++++---------- 3 files changed, 12 insertions(+), 14 deletions(-) diff --git a/R/ZarrAnnData.R b/R/ZarrAnnData.R index 3f4244c9..bfc29c62 100644 --- a/R/ZarrAnnData.R +++ b/R/ZarrAnnData.R @@ -275,8 +275,9 @@ ZarrAnnData <- R6::R6Class("ZarrAnnData", # nolint private$.compression <- compression private$.to_dense <- to_dense - # if(length(root$get_attrs()$to_list()) == 0) { - if ((is.character(store) && !dir.exists(store)) || inherits(store, "MemoryStore")) { + root <- pizzarr::zarr_open_group(store, path = "/") + if(length(root$get_attrs()$to_list()) == 0) { + #if ((is.character(store) && !dir.exists(store)) || inherits(store, "MemoryStore")) { # Check obs_names and var_names have been provided # if (is.null(obs_names)) { # stop("When creating a new .h5ad file, `obs_names` must be defined.") diff --git a/R/write_zarr_helpers.R b/R/write_zarr_helpers.R index c18e8db2..f29ff615 100644 --- a/R/write_zarr_helpers.R +++ b/R/write_zarr_helpers.R @@ -238,7 +238,7 @@ write_zarr_string_array <- function(value, store, name, compression, version = " object_codec <- pizzarr::VLenUtf8Codec$new() data <- array(data = value, dim = dims) # TODO: existing _index does not allow overwriting, so shall we keep overwrite=TRUE here ? - a <- pizzarr::zarr_create_array(data, store = store, path = name, dtype = "|O", object_codec = object_codec, shape = dims, overwrite = overwrite) + a <- pizzarr::zarr_create_array(data, store = store, path = name, dtype = "|O", object_codec = object_codec, shape = dims, overwrite = TRUE) write_zarr_encoding(store, name, "string-array", version) } @@ -431,7 +431,7 @@ write_zarr_data_frame_index <- function(value, store, name, compression, index_n #' @param compression The compression to use when writing the element. Can be #' one of `"none"`, `"gzip"` or `"lzf"`. Defaults to `"none"`. #' @param version The H5AD version to write -write_empty_zarr <- function(store, obs, var, compression, version = "0.1.0") { +write_empty_zarr <- function(store, obs, var, compression, version = "0.1.0", overwrite = FALSE) { pizzarr::zarr_open_group(store, path = "/") write_zarr_encoding(store, "/", "anndata", "0.1.0") diff --git a/tests/testthat/test-SingleCellExperiment.R b/tests/testthat/test-SingleCellExperiment.R index 6396f449..9127784e 100644 --- a/tests/testthat/test-SingleCellExperiment.R +++ b/tests/testthat/test-SingleCellExperiment.R @@ -104,11 +104,8 @@ test_that("from_SingleCellExperiment() works with Zarr", { ) dimnames <- dimnames(sce) - rownames(obs) <- NULL - rownames(var) <- NULL - store0 <- pizzarr::MemoryStore$new() - store <- pizzarr::DirectoryStore$new("test.zarr") + store <- pizzarr::MemoryStore$new() ad0 <- from_SingleCellExperiment(sce0, "ZarrAnnData", store = store0) ad <- from_SingleCellExperiment(sce, "ZarrAnnData", store = store) @@ -117,17 +114,17 @@ test_that("from_SingleCellExperiment() works with Zarr", { expect_identical(ad0$X, NULL) expect_identical(ad$X, x) # trackstatus: class=SingleCellExperiment, feature=test_set_obs, status=done - expect_identical(ad0$obs, data.frame()) + expect_identical(ad0$obs, data.frame(row.names = character(0))) expect_identical(ad$obs, obs) # trackstatus: class=SingleCellExperiment, feature=test_set_var, status=done - expect_identical(ad0$var, data.frame()) + expect_identical(ad0$var, data.frame(row.names = character(0))) expect_identical(ad$var, var) # trackstatus: class=SingleCellExperiment, feature=test_set_obs_names, status=done - expect_identical(ad0$obs_names, character(0)) - expect_identical(ad$obs_names, dimnames[[2]]) + expect_identical(rownames(ad0$obs), character(0)) + expect_identical(rownames(ad$obs), dimnames[[2]]) # trackstatus: class=SingleCellExperiment, feature=test_set_var_names, status=done - expect_identical(ad0$var_names, character(0)) - expect_identical(ad$var_names, dimnames[[1]]) + expect_identical(rownames(ad0$var), character(0)) + expect_identical(rownames(ad$var), dimnames[[1]]) # trackstatus: class=SingleCellExperiment, feature=test_set_layers, status=done layers0 <- list() expect_identical(ad0$layers, layers0) From 15dfbde2061ae6d68e4ba97deab8da5120cef239 Mon Sep 17 00:00:00 2001 From: Mark Keller <7525285+keller-mark@users.noreply.github.com> Date: Tue, 5 Nov 2024 12:15:01 -0500 Subject: [PATCH 20/25] Revert unnecessary changes --- R/ZarrAnnData.R | 16 +++------------- R/read_zarr_helpers.R | 25 ++++--------------------- 2 files changed, 7 insertions(+), 34 deletions(-) diff --git a/R/ZarrAnnData.R b/R/ZarrAnnData.R index bfc29c62..938b6e5f 100644 --- a/R/ZarrAnnData.R +++ b/R/ZarrAnnData.R @@ -1,5 +1,3 @@ -VAR_CHUNK_SIZE <- 10 - #' @title ZarrAnnData #' #' @description @@ -14,8 +12,7 @@ ZarrAnnData <- R6::R6Class("ZarrAnnData", # nolint # .n_vars = NULL, # .obs_names = NULL, # .var_names = NULL, - .compression = NULL, - .to_dense = NULL + .compression = NULL ), active = list( #' @field X The X slot @@ -32,12 +29,7 @@ ZarrAnnData <- R6::R6Class("ZarrAnnData", # nolint expected_rownames = rownames(self), expected_colnames = colnames(self) ) - if(private$.to_dense) { - value <- as.matrix(value) - result <- write_zarr_element(value, private$zarr_store, "/X", private$.compression, overwrite = TRUE, chunks = c(self$n_obs(), VAR_CHUNK_SIZE)) - } else { - result <- write_zarr_element(value, private$zarr_store, "/X", private$.compression, overwrite = TRUE) - } + result <- write_zarr_element(value, private$zarr_store, "/X", private$.compression, overwrite = TRUE) return(result) } }, @@ -261,8 +253,7 @@ ZarrAnnData <- R6::R6Class("ZarrAnnData", # nolint uns = NULL, shape = NULL, mode = c("r", "r+", "a", "w", "w-", "x"), - compression = c("none", "gzip", "lzf"), - to_dense = FALSE) { + compression = c("none", "gzip", "lzf")) { if (!requireNamespace("pizzarr", quietly = TRUE)) { stop("The Zarr interface requires the 'pizzarr' package to be installed") } @@ -273,7 +264,6 @@ ZarrAnnData <- R6::R6Class("ZarrAnnData", # nolint # store compression for later use private$.compression <- compression - private$.to_dense <- to_dense root <- pizzarr::zarr_open_group(store, path = "/") if(length(root$get_attrs()$to_list()) == 0) { diff --git a/R/read_zarr_helpers.R b/R/read_zarr_helpers.R index f90ccc0d..7df16d84 100644 --- a/R/read_zarr_helpers.R +++ b/R/read_zarr_helpers.R @@ -107,23 +107,6 @@ read_zarr_array <- function(store, name) { return(nested_arr$data) } -read_zarr_array_with_rarr <- function(store, name) { - if("DirectoryStore" %in% class(store)) { - store_root <- store$root - arr <- tryCatch({ - Rarr::read_zarr_array( - zarr_array_path = file.path(store_root, name), - ) - }, error = function(e) { - # Reading with Rarr failed; Try with Pizzarr. - read_zarr_array(store, name) - }) - return(arr) - } - # Not a DirectoryStore, so cannot use Rarr. - return(read_zarr_array(store, name)) -} - #' Read H5AD dense array #' #' Read a dense array from an H5AD file @@ -139,7 +122,7 @@ read_zarr_dense_array <- function(store, name, version = "0.2.0") { version <- match.arg(version) # Extract the NestedArray contents as a base R array. - darr <- read_zarr_array_with_rarr(store, name) + darr <- read_zarr_array(store, name) # TODO: ideally, native = TRUE should take care of the row order and column order, @@ -189,9 +172,9 @@ read_zarr_sparse_array <- function(store, name, version = "0.1.0", g <- pizzarr::zarr_open_group(store, path = name) - data <- as.vector(read_zarr_array_with_rarr(store, paste0(name, "/data"))) - indices <- as.vector(read_zarr_array_with_rarr(store, paste0(name, "/indices"))) - indptr <- as.vector(read_zarr_array_with_rarr(store, paste0(name, "/indptr"))) + data <- as.vector(read_zarr_array(store, paste0(name, "/data"))) + indices <- as.vector(read_zarr_array(store, paste0(name, "/indices"))) + indptr <- as.vector(read_zarr_array(store, paste0(name, "/indptr"))) shape <- as.vector(unlist(g$get_attrs()$to_list()$shape, use.names = FALSE)) if (type == "csc_matrix") { From 438809a03d6380de6b7f90b4b1153f24dd9e70e9 Mon Sep 17 00:00:00 2001 From: Mark Keller <7525285+keller-mark@users.noreply.github.com> Date: Tue, 5 Nov 2024 12:16:33 -0500 Subject: [PATCH 21/25] Formatting --- R/ZarrAnnData.R | 3 +-- R/read_zarr_helpers.R | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/R/ZarrAnnData.R b/R/ZarrAnnData.R index 938b6e5f..c627d8a7 100644 --- a/R/ZarrAnnData.R +++ b/R/ZarrAnnData.R @@ -29,8 +29,7 @@ ZarrAnnData <- R6::R6Class("ZarrAnnData", # nolint expected_rownames = rownames(self), expected_colnames = colnames(self) ) - result <- write_zarr_element(value, private$zarr_store, "/X", private$.compression, overwrite = TRUE) - return(result) + write_zarr_element(value, private$zarr_store, "/X", private$.compression, overwrite = TRUE) } }, #' @field layers The layers slot. Must be NULL or a named list diff --git a/R/read_zarr_helpers.R b/R/read_zarr_helpers.R index 7df16d84..dbb89ff7 100644 --- a/R/read_zarr_helpers.R +++ b/R/read_zarr_helpers.R @@ -171,7 +171,7 @@ read_zarr_sparse_array <- function(store, name, version = "0.1.0", type <- match.arg(type) g <- pizzarr::zarr_open_group(store, path = name) - + data <- as.vector(read_zarr_array(store, paste0(name, "/data"))) indices <- as.vector(read_zarr_array(store, paste0(name, "/indices"))) indptr <- as.vector(read_zarr_array(store, paste0(name, "/indptr"))) From 087ffb77f730488bfdb76c355b0f878eaf1db592 Mon Sep 17 00:00:00 2001 From: Mark Keller <7525285+keller-mark@users.noreply.github.com> Date: Tue, 5 Nov 2024 12:53:48 -0500 Subject: [PATCH 22/25] Add comments --- R/ZarrAnnData.R | 100 +++++++++++++------------------ R/read_zarr.R | 13 +++-- R/read_zarr_helpers.R | 128 ++++++++++++++++++++-------------------- R/write_zarr.R | 22 +++---- R/write_zarr_helpers.R | 130 ++++++++++++++++++++--------------------- 5 files changed, 189 insertions(+), 204 deletions(-) diff --git a/R/ZarrAnnData.R b/R/ZarrAnnData.R index c627d8a7..53089c7c 100644 --- a/R/ZarrAnnData.R +++ b/R/ZarrAnnData.R @@ -1,27 +1,23 @@ #' @title ZarrAnnData #' #' @description -#' Implementation of an in memory AnnData object. +#' Implementation of a Zarr-based AnnData object. #' @noRd ZarrAnnData <- R6::R6Class("ZarrAnnData", # nolint inherit = AbstractAnnData, private = list( zarr_store = NULL, zarr_root = NULL, - # .n_obs = NULL, - # .n_vars = NULL, - # .obs_names = NULL, - # .var_names = NULL, .compression = NULL ), active = list( #' @field X The X slot X = function(value) { if (missing(value)) { - # trackstatus: class=HDF5AnnData, feature=get_X, status=done + # trackstatus: class=ZarrAnnData, feature=get_X, status=done read_zarr_element(private$zarr_store, "/X") } else { - # trackstatus: class=HDF5AnnData, feature=set_X, status=done + # trackstatus: class=ZarrAnnData, feature=set_X, status=done value <- private$.validate_aligned_array( value, "X", @@ -37,10 +33,10 @@ ZarrAnnData <- R6::R6Class("ZarrAnnData", # nolint #' `obs` and `var`. layers = function(value) { if (missing(value)) { - # trackstatus: class=HDF5AnnData, feature=get_layers, status=done + # trackstatus: class=ZarrAnnData, feature=get_layers, status=done read_zarr_element(private$zarr_store, "layers") } else { - # trackstatus: class=HDF5AnnData, feature=set_layers, status=done + # trackstatus: class=ZarrAnnData, feature=set_layers, status=done value <- private$.validate_aligned_mapping( value, "layers", @@ -55,10 +51,10 @@ ZarrAnnData <- R6::R6Class("ZarrAnnData", # nolint #' with all elements having the same number of rows as `obs`. obsm = function(value) { if (missing(value)) { - # trackstatus: class=HDF5AnnData, feature=get_obsm, status=done + # trackstatus: class=ZarrAnnData, feature=get_obsm, status=done read_zarr_element(private$zarr_store, "obsm") } else { - # trackstatus: class=HDF5AnnData, feature=set_obsm, status=done + # trackstatus: class=ZarrAnnData, feature=set_obsm, status=done value <- private$.validate_aligned_mapping( value, "obsm", @@ -72,10 +68,10 @@ ZarrAnnData <- R6::R6Class("ZarrAnnData", # nolint #' with all elements having the same number of rows as `var`. varm = function(value) { if (missing(value)) { - # trackstatus: class=HDF5AnnData, feature=get_varm, status=done + # trackstatus: class=ZarrAnnData, feature=get_varm, status=done read_zarr_element(private$zarr_store, "varm") } else { - # trackstatus: class=HDF5AnnData, feature=set_varm, status=done + # trackstatus: class=ZarrAnnData, feature=set_varm, status=done value <- private$.validate_aligned_mapping( value, "varm", @@ -89,10 +85,10 @@ ZarrAnnData <- R6::R6Class("ZarrAnnData", # nolint #' with all elements having the same number of rows and columns as `obs`. obsp = function(value) { if (missing(value)) { - # trackstatus: class=HDF5AnnData, feature=get_obsp, status=done + # trackstatus: class=ZarrAnnData, feature=get_obsp, status=done read_zarr_element(private$zarr_store, "obsp") } else { - # trackstatus: class=HDF5AnnData, feature=set_obsp, status=done + # trackstatus: class=ZarrAnnData, feature=set_obsp, status=done value <- private$.validate_aligned_mapping( value, "obsp", @@ -107,10 +103,10 @@ ZarrAnnData <- R6::R6Class("ZarrAnnData", # nolint #' with all elements having the same number of rows and columns as `var`. varp = function(value) { if (missing(value)) { - # trackstatus: class=HDF5AnnData, feature=get_varp, status=done + # trackstatus: class=ZarrAnnData, feature=get_varp, status=done read_zarr_element(private$zarr_store, "varp") } else { - # trackstatus: class=HDF5AnnData, feature=set_varp, status=done + # trackstatus: class=ZarrAnnData, feature=set_varp, status=done value <- private$.validate_aligned_mapping( value, "varp", @@ -125,11 +121,11 @@ ZarrAnnData <- R6::R6Class("ZarrAnnData", # nolint #' @field obs The obs slot obs = function(value) { if (missing(value)) { - # trackstatus: class=HDF5AnnData, feature=get_obs, status=done + # trackstatus: class=ZarrAnnData, feature=get_obs, status=done # TODO: shall we keep include_index = TRUE, or get rid of the argument ? read_zarr_element(private$zarr_store, "/obs", include_index = TRUE) } else { - # trackstatus: class=HDF5AnnData, feature=set_obs, status=done + # trackstatus: class=ZarrAnnData, feature=set_obs, status=done value <- private$.validate_obsvar_dataframe(value, "obs") write_zarr_element( value, @@ -143,11 +139,11 @@ ZarrAnnData <- R6::R6Class("ZarrAnnData", # nolint #' @field var The var slot var = function(value) { if (missing(value)) { - # trackstatus: class=HDF5AnnData, feature=get_var, status=done + # trackstatus: class=ZarrAnnData, feature=get_var, status=done # TODO: shall we keep include_index = TRUE, or get rid of the argument ? read_zarr_element(private$zarr_store, "/var", include_index = TRUE) } else { - # trackstatus: class=HDF5AnnData, feature=set_var, status=done + # trackstatus: class=ZarrAnnData, feature=set_var, status=done value <- private$.validate_obsvar_dataframe(value, "var") write_zarr_element( value, @@ -160,48 +156,39 @@ ZarrAnnData <- R6::R6Class("ZarrAnnData", # nolint #' @field obs_names Names of observations obs_names = function(value) { if (missing(value)) { - # trackstatus: class=HDF5AnnData, feature=get_obs_names, status=done + # trackstatus: class=ZarrAnnData, feature=get_obs_names, status=done rownames(self$obs) } else { - # trackstatus: class=HDF5AnnData, feature=set_obs_names, status=done + # trackstatus: class=ZarrAnnData, feature=set_obs_names, status=done rownames(self$obs) <- value } }, #' @field var_names Names of variables var_names = function(value) { if (missing(value)) { - # trackstatus: class=HDF5AnnData, feature=get_var_names, status=done + # trackstatus: class=ZarrAnnData, feature=get_var_names, status=done rownames(self$var) } else { - # trackstatus: class=HDF5AnnData, feature=set_var_names, status=done + # trackstatus: class=ZarrAnnData, feature=set_var_names, status=done rownames(self$var) <- value } }, #' @field uns The uns slot. Must be `NULL` or a named list. uns = function(value) { if (missing(value)) { - # trackstatus: class=HDF5AnnData, feature=get_uns, status=done + # trackstatus: class=ZarrAnnData, feature=get_uns, status=done read_zarr_element(private$zarr_store, "uns") } else { - # trackstatus: class=HDF5AnnData, feature=set_uns, status=done + # trackstatus: class=ZarrAnnData, feature=set_uns, status=done value <- private$.validate_named_list(value, "uns") write_zarr_element(value, private$zarr_store, "/uns") } } ), public = list( - #' @description HDF5AnnData constructor + #' @description ZarrAnnData constructor #' - #' @param file The filename (character) of the `.h5ad` file. If this - #' file does not exist yet, `obs_names` and `var_names` must be provided. - #' @param obs_names A vector of unique identifiers - #' used to identify each row of `obs` and to act as an index into the - #' observation dimension of the AnnData object. The length of `obs_names` - #' defines the observation dimension of the AnnData object. - #' @param var_names A vector of unique identifiers used to identify each row - #' of `var` and to act as an index into the variable dimension of the - #' AnnData object. The length of `var_names` defines the variable - #' dimension of the AnnData object. + #' @param store The Zarr store instance. #' @param X Either `NULL` or a observation × variable matrix with #' dimensions consistent with `obs` and `var`. #' @param layers Either `NULL` or a named list, where each element is an @@ -227,20 +214,17 @@ ZarrAnnData <- R6::R6Class("ZarrAnnData", # nolint #' element is a sparse matrix where each dimension has length `n_vars`. #' @param uns The uns slot is used to store unstructured annotation. It must #' be either `NULL` or a named list. - #' @param compression The compression algorithm to use when writing the - #' HDF5 file. Can be one of `"none"`, `"gzip"` or `"lzf"`. Defaults to + #' @param compression The compression algorithm to use when writing + #' Zarr arrays. Can be one of `"none"`, `"gzip"` or `"lzf"`. Defaults to #' `"none"`. #' #' @details - #' The constructor creates a new HDF5 AnnData interface object. This can - #' either be used to either connect to an existing `.h5ad` file or to - #' create a new one. To create a new file both `obs_names` and `var_names` - #' must be specified. In both cases, any additional slots provided will be + #' The constructor creates a new Zarr AnnData interface object. This can + #' either be used to either connect to an existing `.zarr` store or to + #' populate an empty one. In both cases, any additional slots provided will be #' set on the created object. This will cause data to be overwritten if the #' file already exists. initialize = function(store, - # obs_names = NULL, - # var_names = NULL, X = NULL, obs = NULL, var = NULL, @@ -324,7 +308,7 @@ ZarrAnnData <- R6::R6Class("ZarrAnnData", # nolint # get root root <- pizzarr::zarr_open_group(store, path = "/") - # Check the file is a valid H5AD + # Check the file is a valid AnnData format attrs <- root$get_attrs()$to_list() if (!all(c("encoding-type", "encoding-version") %in% names(attrs))) { @@ -398,17 +382,17 @@ ZarrAnnData <- R6::R6Class("ZarrAnnData", # nolint ) ) -#' Convert an AnnData object to an HDF5AnnData object +#' Convert an AnnData object to a ZarrAnnData object #' -#' This function takes an AnnData object and converts it to an HDF5AnnData +#' This function takes an AnnData object and converts it to a ZarrAnnData #' object, loading all fields into memory. #' -#' @param adata An AnnData object to be converted to HDF5AnnData. -#' @param file The filename (character) of the `.h5ad` file. -#' @param compression The compression algorithm to use when writing the -#' HDF5 file. Can be one of `"none"`, `"gzip"` or `"lzf"`. Defaults to +#' @param adata An AnnData object to be converted to ZarrAnnData. +#' @param store The Zarr store. +#' @param compression The compression algorithm to use when writing +#' Zarr arrays. Can be one of `"none"`, `"gzip"` or `"lzf"`. Defaults to #' `"none"`. -#' @param mode The mode to open the HDF5 file. +#' @param mode The mode to open the Zarr store. #' #' * `a` creates a new file or opens an existing one for read/write. #' * `r` opens an existing file for reading. @@ -416,7 +400,7 @@ ZarrAnnData <- R6::R6Class("ZarrAnnData", # nolint #' * `w` creates a file, truncating any existing ones. #' * `w-`/`x` are synonyms, creating a file and failing if it already exists. #' -#' @return An HDF5AnnData object with the same data as the input AnnData +#' @return a ZarrAnnData object with the same data as the input AnnData #' object. #' #' @noRd @@ -433,9 +417,9 @@ ZarrAnnData <- R6::R6Class("ZarrAnnData", # nolint #' obs_names = LETTERS[1:3], #' var_names = letters[1:5] #' ) -#' to_HDF5AnnData(ad, "test.h5ad") -#' # remove file -#' file.remove("test.h5ad") +#' to_ZarrAnnData(ad, "test.zarr") +#' # remove store directory +#' unlink("test.zarr", recursive = TRUE) to_ZarrAnnData <- function(adata, store, compression = c("none", "gzip", "lzf"), diff --git a/R/read_zarr.R b/R/read_zarr.R index 38e1e365..e9ec48a0 100644 --- a/R/read_zarr.R +++ b/R/read_zarr.R @@ -2,7 +2,7 @@ #' #' Read data from a Zarr store #' -#' @param path Path to the H5AD file to read +#' @param path Path to the Zarr store to read #' @param to The type of object to return. Must be one of: "InMemoryAnnData", #' "HDF5AnnData", "SingleCellExperiment", "Seurat" #' @param ... Extra arguments provided to [to_SingleCellExperiment()] or @@ -12,16 +12,17 @@ #' @export #' #' @examples -#' h5ad_file <- system.file("extdata", "example.h5ad", package = "anndataR") +#' file <- system.file("extdata", "example.zarr", package = "anndataR") +#' store <- pizzarr::DirectoryStore$new(file) #' -#' # Read the H5AD as a SingleCellExperiment object +#' # Read the Zarr store as a SingleCellExperiment object #' if (requireNamespace("SingleCellExperiment", quietly = TRUE)) { -#' sce <- read_zarr(h5ad_file, to = "SingleCellExperiment") +#' sce <- read_zarr(store, to = "SingleCellExperiment") #' } #' -#' # Read the H5AD as a Seurat object +#' # Read the Zarr store as a Seurat object #' if (requireNamespace("SeuratObject", quietly = TRUE)) { -#' seurat <- read_zarr(h5ad_file, to = "Seurat") +#' seurat <- read_zarr(store, to = "Seurat") #' } read_zarr <- function( path, diff --git a/R/read_zarr_helpers.R b/R/read_zarr_helpers.R index dbb89ff7..1d45a133 100644 --- a/R/read_zarr_helpers.R +++ b/R/read_zarr_helpers.R @@ -1,9 +1,9 @@ -#' Read H5AD encoding +#' Read Zarr encoding #' -#' Read the encoding and version of an element in a H5AD file +#' Read the encoding and version of an element in a Zarr store #' -#' @param file Path to a H5AD file or an open H5AD handle -#' @param name Name of the element within the H5AD file +#' @param store A Zarr store instance +#' @param name Name of the element within the Zarr store #' #' @return A named list with names type and version #' @@ -30,12 +30,12 @@ read_zarr_encoding <- function(store, name, stop_on_error = TRUE) { ) } -#' Read H5AD element +#' Read Zarr element #' -#' Read an element from a H5AD file +#' Read an element from a Zarr store #' -#' @param file Path to a H5AD file or an open H5AD handle -#' @param name Name of the element within the H5AD file +#' @param store A Zarr store instance +#' @param name Name of the element within the Zarr store #' @param type The encoding type of the element to read #' @param version The encoding version of the element to read #' @param stop_on_error Whether to stop on error or generate a warning instead @@ -107,12 +107,12 @@ read_zarr_array <- function(store, name) { return(nested_arr$data) } -#' Read H5AD dense array +#' Read Zarr dense array #' -#' Read a dense array from an H5AD file +#' Read a dense array from a Zarr store #' -#' @param file Path to a H5AD file or an open H5AD handle -#' @param name Name of the element within the H5AD file +#' @param store A Zarr store instance +#' @param name Name of the element within the Zarr store #' @param version Encoding version of the element to read #' #' @return a matrix or a vector if 1D @@ -152,12 +152,12 @@ read_zarr_csc_matrix <- function(store, name, version) { ) } -#' Read H5AD sparse array +#' Read Zarr sparse array #' -#' Read a sparse array from an H5AD file +#' Read a sparse array from a Zarr store #' -#' @param file Path to a H5AD file or an open H5AD handle -#' @param name Name of the element within the H5AD file +#' @param store A Zarr store instance +#' @param name Name of the element within the Zarr store #' @param version Encoding version of the element to read #' @param type Type of the sparse matrix, either "csr_matrix" or "csc_matrix" #' @@ -200,12 +200,12 @@ read_zarr_sparse_array <- function(store, name, version = "0.1.0", mtx } -#' Read H5AD recarray +#' Read Zarr recarray #' -#' Read a recarray from an H5AD file +#' Read a recarray from a Zarr store #' -#' @param file Path to a H5AD file or an open H5AD handle -#' @param name Name of the element within the H5AD file +#' @param store A Zarr store instance +#' @param name Name of the element within the Zarr store #' @param version Encoding version of the element to read #' #' @details @@ -225,12 +225,12 @@ read_zarr_rec_array <- function(store, name, version = "0.2.0") { stop("Reading recarrays is not yet implemented") } -#' Read H5AD nullable boolean +#' Read Zarr nullable boolean #' -#' Read a nullable boolean from an H5AD file +#' Read a nullable boolean from a Zarr store #' -#' @param file Path to a H5AD file or an open H5AD handle -#' @param name Name of the element within the H5AD file +#' @param store A Zarr store instance +#' @param name Name of the element within the Zarr store #' @param version Encoding version of the element to read #' #' @return a boolean vector @@ -240,12 +240,12 @@ read_zarr_nullable_boolean <- function(store, name, version = "0.1.0") { as.logical(read_zarr_nullable(store, name, version)) } -#' Read H5AD nullable integer +#' Read Zarr nullable integer #' -#' Read a nullable integer from an H5AD file +#' Read a nullable integer from a Zarr store #' -#' @param file Path to a H5AD file or an open H5AD handle -#' @param name Name of the element within the H5AD file +#' @param store A Zarr store instance +#' @param name Name of the element within the Zarr store #' @param version Encoding version of the element to read #' #' @return an integer vector @@ -255,12 +255,12 @@ read_zarr_nullable_integer <- function(store, name, version = "0.1.0") { as.integer(read_zarr_nullable(store, name, version)) } -#' Read H5AD nullable +#' Read Zarr nullable #' -#' Read a nullable vector (boolean or integer) from an H5AD file +#' Read a nullable vector (boolean or integer) from a Zarr store #' -#' @param file Path to a H5AD file or an open H5AD handle -#' @param name Name of the element within the H5AD file +#' @param store A Zarr store instance +#' @param name Name of the element within the Zarr store #' @param version Encoding version of the element to read #' #' @return a nullable vector @@ -279,12 +279,12 @@ read_zarr_nullable <- function(store, name, version = "0.1.0") { return(element) } -#' Read H5AD string array +#' Read Zarr string array #' -#' Read a string array from an H5AD file +#' Read a string array from a Zarr store #' -#' @param file Path to a H5AD file or an open H5AD handle -#' @param name Name of the element within the H5AD file +#' @param store A Zarr store instance +#' @param name Name of the element within the Zarr store #' @param version Encoding version of the element to read #' #' @return a character vector/matrix @@ -303,12 +303,12 @@ read_zarr_string_array <- function(store, name, version = "0.2.0") { string_array } -#' Read H5AD categorical +#' Read Zarr categorical #' -#' Read a categorical from an H5AD file +#' Read a categorical from a Zarr store #' -#' @param file Path to a H5AD file or an open H5AD handle -#' @param name Name of the element within the H5AD file +#' @param store A Zarr store instance +#' @param name Name of the element within the Zarr store #' @param version Encoding version of the element to read #' #' @return a factor @@ -351,12 +351,12 @@ read_zarr_categorical <- function(store, name, version = "0.2.0") { factor(codes, labels = levels, ordered = ordered) } -#' Read H5AD string scalar +#' Read Zarr string scalar #' -#' Read a string scalar from an H5AD file +#' Read a string scalar from a Zarr store #' -#' @param file Path to a H5AD file or an open H5AD handle -#' @param name Name of the element within the H5AD file +#' @param store A Zarr store instance +#' @param name Name of the element within the Zarr store #' @param version Encoding version of the element to read #' #' @return a character vector of length 1 @@ -368,12 +368,12 @@ read_zarr_string_scalar <- function(store, name, version = "0.2.0") { return(scalar) } -#' Read H5AD numeric scalar +#' Read Zarr numeric scalar #' -#' Read a numeric scalar from an H5AD file +#' Read a numeric scalar from a Zarr store #' -#' @param file Path to a H5AD file or an open H5AD handle -#' @param name Name of the element within the H5AD file +#' @param store A Zarr store instance +#' @param name Name of the element within the Zarr store #' @param version Encoding version of the element to read #' #' @return a numeric vector of length 1 @@ -385,12 +385,12 @@ read_zarr_numeric_scalar <- function(store, name, version = "0.2.0") { return(scalar) } -#' Read H5AD mapping +#' Read Zarr mapping #' -#' Read a mapping from an H5AD file +#' Read a mapping from a Zarr store #' -#' @param file Path to a H5AD file or an open H5AD handle -#' @param name Name of the element within the H5AD file +#' @param store A Zarr store instance +#' @param name Name of the element within the Zarr store #' @param version Encoding version of the element to read #' #' @return a named list @@ -409,17 +409,17 @@ read_zarr_mapping <- function(store, name, version = "0.1.0") { read_zarr_collection(store, name, columns) } -#' Read H5AD data frame +#' Read Zarr data frame #' -#' Read a data frame from an H5AD file +#' Read a data frame from a Zarr store #' -#' @param file Path to a H5AD file or an open H5AD handle -#' @param name Name of the element within the H5AD file +#' @param store A Zarr store instance +#' @param name Name of the element within the Zarr store #' @param version Encoding version of the element to read #' @param include_index Whether or not to include the index as a column #' #' @details -#' If `include_index == TRUE` the index stored in the HDF5 file is added as a +#' If `include_index == TRUE` the index stored in the Zarr store is added as a #' column to output `data.frame` using the defined index name as the column #' name and this is set as an attribute. If `include_index == FALSE` the index #' is not provided in the output. In either case row names are not set. @@ -459,12 +459,12 @@ read_zarr_data_frame <- function(store, name, include_index = TRUE, df } -#' Read H5AD data frame index +#' Read Zarr data frame index #' -#' Read the index of a data frame from an H5AD file +#' Read the index of a data frame from a Zarr store #' -#' @param file Path to a H5AD file or an open H5AD handle -#' @param name Name of the element within the H5AD file +#' @param store A Zarr store instance +#' @param name Name of the element within the Zarr store #' @param version Encoding version of the element to read #' #' @return an object containing the index @@ -481,10 +481,10 @@ read_zarr_data_frame_index <- function(store, name, version = "0.2.0") { read_zarr_element(store, file.path(name, index_name)) } -#' Read multiple H5AD datatypes +#' Read multiple Zarr datatypes #' -#' @param file Path to a H5AD file or an open H5AD handle -#' @param name Name of the element within the H5AD file +#' @param store A Zarr store instance +#' @param name Name of the element within the Zarr store #' @param column_order Vector of item names (in order) #' #' @return a named list diff --git a/R/write_zarr.R b/R/write_zarr.R index 7a7c8d3c..d00ee26d 100644 --- a/R/write_zarr.R +++ b/R/write_zarr.R @@ -5,10 +5,10 @@ #' @param object The object to write, either a "SingleCellExperiment" or a #' "Seurat" object #' @param path Path of the file to write to -#' @param compression The compression algorithm to use when writing the -#' HDF5 file. Can be one of `"none"`, `"gzip"` or `"lzf"`. Defaults to +#' @param compression The compression algorithm to use when writing +#' Zarr arrays. Can be one of `"none"`, `"gzip"` or `"lzf"`. Defaults to #' `"none"`. -#' @param mode The mode to open the HDF5 file. +#' @param mode The mode to open the Zarr store. #' #' * `a` creates a new file or opens an existing one for read/write. #' * `r+` opens an existing file for read/write. @@ -30,10 +30,10 @@ #' obs_names = LETTERS[1:3], #' var_names = letters[1:5] #' ) -#' h5ad_file <- tempfile(fileext = ".h5ad") -#' write_zarr(adata, h5ad_file) +#' store <- pizzarr::MemoryStore$new() +#' write_zarr(adata, store) #' -#' # Write a SingleCellExperiment as an H5AD +#' # Write a SingleCellExperiment as a Zarr store #' if (requireNamespace("SingleCellExperiment", quietly = TRUE)) { #' ncells <- 100 #' counts <- matrix(rpois(20000, 5), ncol = ncells) @@ -47,11 +47,11 @@ #' reducedDims = list(PCA = pca, tSNE = tsne) #' ) #' -#' h5ad_file <- tempfile(fileext = ".h5ad") -#' write_zarr(sce, h5ad_file) +#' store <- pizzarr::MemoryStore$new() +#' write_zarr(sce, store) #' } #' -#' # Write a Seurat as a H5AD +#' # Write a Seurat as a Zarr store #' if (requireNamespace("SeuratObject", quietly = TRUE)) { #' # TODO: uncomment this code when the seurat converter is fixed #' # counts <- matrix(1:15, 3L, 5L) @@ -70,8 +70,8 @@ #' # ) #' # obj <- SeuratObject::AddMetaData(obj, cell.metadata) #' # -#' # h5ad_file <- tempfile(fileext = ".h5ad") -#' # write_zarr(obj, h5ad_file) +#' # store <- pizzarr::MemoryStore$new() +#' # write_zarr(obj, store) #' } write_zarr <- function(object, store, compression = c("none", "gzip", "lzf"), mode = c("w-", "r", "r+", "a", "w", "x")) { diff --git a/R/write_zarr_helpers.R b/R/write_zarr_helpers.R index f29ff615..a97a744d 100644 --- a/R/write_zarr_helpers.R +++ b/R/write_zarr_helpers.R @@ -1,10 +1,10 @@ -#' Write H5AD element +#' Write Zarr element #' -#' Write an element to an H5AD file +#' Write an element to a Zarr store #' #' @param value The value to write -#' @param file Path to a H5AD file or an open H5AD handle -#' @param name Name of the element within the H5AD file +#' @param store A Zarr store instance +#' @param name Name of the element within the Zarr store #' @param compression The compression to use when writing the element. Can be #' one of `"none"`, `"gzip"` or `"lzf"`. Defaults to `"none"`. #' #' @param stop_on_error Whether to stop on error or generate a warning instead @@ -58,7 +58,7 @@ write_zarr_element <- function(value, store, name, compression = c("none", "gzip write_zarr_dense_array } } else { # Fail if unknown - stop("Writing '", class(value), "' objects to H5AD files is not supported") + stop("Writing '", class(value), "' objects to Zarr stores is not supported") } @@ -81,14 +81,14 @@ write_zarr_element <- function(value, store, name, compression = c("none", "gzip ) } -#' Write H5AD encoding +#' Write Zarr encoding #' -#' Write H5AD encoding attributes to an element in an H5AD file +#' Write Zarr encoding attributes to an element in a Zarr store #' #' @noRd #' -#' @param file Path to a H5AD file or an open H5AD handle -#' @param name Name of the element within the H5AD file +#' @param store A Zarr store instance +#' @param name Name of the element within the Zarr store #' @param encoding The encoding type to set #' @param version The encoding version to set write_zarr_encoding <- function(store, name, encoding, version) { @@ -99,13 +99,13 @@ write_zarr_encoding <- function(store, name, encoding, version) { attrs$set_item("encoding-version", version) } -#' Write H5AD dense array +#' Write Zarr dense array #' -#' Write a dense array to an H5AD file +#' Write a dense array to a Zarr store #' #' @param value Value to write -#' @param file Path to a H5AD file or an open H5AD handle -#' @param name Name of the element within the H5AD file +#' @param store A Zarr store instance +#' @param name Name of the element within the Zarr store #' @param compression The compression to use when writing the element. Can be #' one of `"none"`, `"gzip"` or `"lzf"`. Defaults to `"none"`. #' @param version Encoding version of the element to write @@ -120,15 +120,15 @@ write_zarr_dense_array <- function(value, store, name, compression, version = "0 write_zarr_encoding(store, name, "array", version) } -#' Write H5AD sparse array +#' Write Zarr sparse array #' -#' Write a sparse array to an H5AD file +#' Write a sparse array to a Zarr store #' #' @noRd #' #' @param value Value to write -#' @param file Path to a H5AD file or an open H5AD handle -#' @param name Name of the element within the H5AD file +#' @param store A Zarr store instance +#' @param name Name of the element within the Zarr store #' @param compression The compression to use when writing the element. Can be #' one of `"none"`, `"gzip"` or `"lzf"`. Defaults to `"none"`. #' @param version Encoding version of the element to write @@ -165,15 +165,15 @@ write_zarr_sparse_array <- function(value, store, name, compression, version = " g$get_attrs()$set_item("shape", dim(value)) } -#' Write H5AD nullable boolean +#' Write Zarr nullable boolean #' -#' Write a nullable boolean to an H5AD file +#' Write a nullable boolean to a Zarr store #' #' @noRd #' #' @param value Value to write -#' @param file Path to a H5AD file or an open H5AD handle -#' @param name Name of the element within the H5AD file +#' @param store A Zarr store instance +#' @param name Name of the element within the Zarr store #' @param compression The compression to use when writing the element. Can be #' one of `"none"`, `"gzip"` or `"lzf"`. Defaults to `"none"`. #' @param version Encoding version of the element to write @@ -190,15 +190,15 @@ write_zarr_nullable_boolean <- function(value, store, name, compression, version write_zarr_encoding(store, name, "nullable-boolean", version) } -#' Write H5AD nullable integer +#' Write Zarr nullable integer #' -#' Write a nullable integer to an H5AD file +#' Write a nullable integer to a Zarr store #' #' @noRd #' #' @param value Value to write -#' @param file Path to a H5AD file or an open H5AD handle -#' @param name Name of the element within the H5AD file +#' @param store A Zarr store instance +#' @param name Name of the element within the Zarr store #' @param compression The compression to use when writing the element. Can be #' one of `"none"`, `"gzip"` or `"lzf"`. Defaults to `"none"`. #' @param version Encoding version of the element to write @@ -215,15 +215,15 @@ write_zarr_nullable_integer <- function(value, store, name, compression, version write_zarr_encoding(store, name, "nullable-integer", version) } -#' Write H5AD string array +#' Write Zarr string array #' -#' Write a string array to an H5AD file +#' Write a string array to a Zarr store #' #' @noRd #' #' @param value Value to write -#' @param file Path to a H5AD file or an open H5AD handle -#' @param name Name of the element within the H5AD file +#' @param store A Zarr store instance +#' @param name Name of the element within the Zarr store #' @param compression The compression to use when writing the element. Can be #' one of `"none"`, `"gzip"` or `"lzf"`. Defaults to `"none"`. #' @param version Encoding version of the element to write @@ -243,15 +243,15 @@ write_zarr_string_array <- function(value, store, name, compression, version = " write_zarr_encoding(store, name, "string-array", version) } -#' Write H5AD categorical +#' Write Zarr categorical #' -#' Write a categorical to an H5AD file +#' Write a categorical to a Zarr store #' #' @noRd #' #' @param value Value to write -#' @param file Path to a H5AD file or an open H5AD handle -#' @param name Name of the element within the H5AD file +#' @param store A Zarr store instance +#' @param name Name of the element within the Zarr store #' @param compression The compression to use when writing the element. Can be #' one of `"none"`, `"gzip"` or `"lzf"`. Defaults to `"none"`. #' @param version Encoding version of the element to write @@ -264,15 +264,15 @@ write_zarr_categorical <- function(value, store, name, compression, version = "0 write_zarr_encoding(store, name, "categorical", version) } -#' Write H5AD string scalar +#' Write Zarr string scalar #' -#' Write a string scalar to an H5AD file +#' Write a string scalar to a Zarr store #' #' @noRd #' #' @param value Value to write -#' @param file Path to a H5AD file or an open H5AD handle -#' @param name Name of the element within the H5AD file +#' @param store A Zarr store instance +#' @param name Name of the element within the Zarr store #' @param compression The compression to use when writing the element. Can be #' one of `"none"`, `"gzip"` or `"lzf"`. Defaults to `"none"`. #' @param version Encoding version of the element to write @@ -286,15 +286,15 @@ write_zarr_string_scalar <- function(value, store, name, compression, version = write_zarr_encoding(store, name, "string", version) } -#' Write H5AD numeric scalar +#' Write Zarr numeric scalar #' -#' Write a numeric scalar to an H5AD file +#' Write a numeric scalar to a Zarr store #' #' @noRd #' #' @param value Value to write -#' @param file Path to a H5AD file or an open H5AD handle -#' @param name Name of the element within the H5AD file +#' @param store A Zarr store instance +#' @param name Name of the element within the Zarr store #' @param compression The compression to use when writing the element. Can be #' one of `"none"`, `"gzip"` or `"lzf"`. Defaults to `"none"`. #' @param version Encoding version of the element to write @@ -306,15 +306,15 @@ write_zarr_numeric_scalar <- function(value, store, name, compression, version = write_zarr_encoding(store, name, "numeric-scalar", version) } -#' Write H5AD mapping +#' Write Zarr mapping #' -#' Write a mapping to an H5AD file +#' Write a mapping to a Zarr store #' #' @noRd #' #' @param value Value to write -#' @param file Path to a H5AD file or an open H5AD handle -#' @param name Name of the element within the H5AD file +#' @param store A Zarr store instance +#' @param name Name of the element within the Zarr store #' @param compression The compression to use when writing the element. Can be #' one of `"none"`, `"gzip"` or `"lzf"`. Defaults to `"none"`. #' @param version Encoding version of the element to write @@ -329,15 +329,15 @@ write_zarr_mapping <- function(value, store, name, compression, version = "0.1.0 write_zarr_encoding(store, name, "dict", version) } -#' Write H5AD data frame +#' Write Zarr data frame #' -#' Write a data frame to an H5AD file +#' Write a data frame to a Zarr store #' #' @noRd #' #' @param value Value to write -#' @param file Path to a H5AD file or an open H5AD handle -#' @param name Name of the element within the H5AD file +#' @param store A Zarr store instance +#' @param name Name of the element within the Zarr store #' @param compression The compression to use when writing the element. Can be #' one of `"none"`, `"gzip"` or `"lzf"`. Defaults to `"none"`. #' @param index The index to write. Can either be a vector of length equal to @@ -386,16 +386,16 @@ write_zarr_data_frame <- function(value, store, name, compression, index = NULL, g$get_attrs()$set_item("column-order", col_order) } -#' Write H5AD data frame index +#' Write Zarr data frame index #' -#' Write an for a data frame to an H5AD file +#' Write an for a data frame to a Zarr store #' #' @noRd #' #' @param value Value to write. Must be a vector to the same length as the data #' frame. -#' @param file Path to a H5AD file or an open H5AD handle -#' @param name Name of the element within the H5AD file containing the data +#' @param store A Zarr store instance +#' @param name Name of the element within the Zarr store containing the data #' frame #' @param compression The compression to use when writing the element. Can be #' one of `"none"`, `"gzip"` or `"lzf"`. Defaults to `"none"`. @@ -419,18 +419,18 @@ write_zarr_data_frame_index <- function(value, store, name, compression, index_n g$get_attrs()$set_item("_index", index_name) } -#' Write empty H5AD +#' Write empty Zarr #' -#' Write a new empty H5AD file +#' Write a new empty Zarr store #' #' @noRd #' -#' @param file Path to the Zarr store to write +#' @param store Path to the Zarr store to write #' @param obs Data frame with observations #' @param var Data frame with variables #' @param compression The compression to use when writing the element. Can be #' one of `"none"`, `"gzip"` or `"lzf"`. Defaults to `"none"`. -#' @param version The H5AD version to write +#' @param version The anndata on-disk format version to write write_empty_zarr <- function(store, obs, var, compression, version = "0.1.0", overwrite = FALSE) { pizzarr::zarr_open_group(store, path = "/") write_zarr_encoding(store, "/", "anndata", "0.1.0") @@ -459,16 +459,16 @@ write_empty_zarr <- function(store, obs, var, compression, version = "0.1.0", ov write_zarr_encoding(store, "/varp", "dict", "0.1.0") } -#' HDF5 path exists +#' Zarr path exists #' -#' Check that a path in HDF5 exists +#' Check that a path in Zarr exists #' #' @noRd #' #' @param store Path to a Zarr store -#' @param target_path The path within the file to test for +#' @param target_path The path within the store to test for #' -#' @return Whether the `path` exists in `file` +#' @return Whether the `target_path` exists in `store` zarr_path_exists <- function(store, target_path) { store <- pizzarr::zarr_open(store, path = "") result <- tryCatch({ @@ -489,14 +489,14 @@ zarr_path_exists <- function(store, target_path) { return(result) } -#' HDF5 write compressed +#' Zarr write compressed #' -#' Write HDF5 dataset with chosen compression (can be none) +#' Write Zarr dataset with chosen compression (can be none) #' #' @noRd #' -#' @param file Path to a HDF5 file -#' @param name Name of the element within the H5AD file containing the data +#' @param store Path to a Zarr store +#' @param name Name of the element within the Zarr store containing the data #' frame #' @param value Value to write. Must be a vector to the same length as the data #' frame. From 357a8d705d43bdf2688070f633b5d0358c8132a2 Mon Sep 17 00:00:00 2001 From: Artur-man Date: Wed, 6 Nov 2024 10:30:38 +0100 Subject: [PATCH 23/25] remove unnecessary example zarr store --- inst/extdata/example2.zarr/.zgroup | 1 - 1 file changed, 1 deletion(-) delete mode 100644 inst/extdata/example2.zarr/.zgroup diff --git a/inst/extdata/example2.zarr/.zgroup b/inst/extdata/example2.zarr/.zgroup deleted file mode 100644 index c71fe9d0..00000000 --- a/inst/extdata/example2.zarr/.zgroup +++ /dev/null @@ -1 +0,0 @@ -{"zarr_format":2} \ No newline at end of file From d192e68ed312f212476a5490c973619f08e7c8de Mon Sep 17 00:00:00 2001 From: Artur-man Date: Wed, 6 Nov 2024 17:10:28 +0100 Subject: [PATCH 24/25] lintr and R check for zarr related utilities and functions, updated some documentation --- R/ZarrAnnData.R | 53 +++-------------- R/read_zarr.R | 9 ++- R/read_zarr_helpers.R | 8 +-- R/write_zarr.R | 27 ++++----- R/write_zarr_helpers.R | 97 ++++++++++++++++++++++++-------- man/read_zarr.Rd | 22 +++++--- man/write_zarr.Rd | 40 +++++++------ tests/testthat/test-Zarr-read.R | 12 ++-- tests/testthat/test-Zarr-write.R | 3 - tests/testthat/test-h5ad-zarr.R | 45 +++++++-------- 10 files changed, 164 insertions(+), 152 deletions(-) diff --git a/R/ZarrAnnData.R b/R/ZarrAnnData.R index 53089c7c..0a1eb45c 100644 --- a/R/ZarrAnnData.R +++ b/R/ZarrAnnData.R @@ -249,28 +249,16 @@ ZarrAnnData <- R6::R6Class("ZarrAnnData", # nolint private$.compression <- compression root <- pizzarr::zarr_open_group(store, path = "/") - if(length(root$get_attrs()$to_list()) == 0) { - #if ((is.character(store) && !dir.exists(store)) || inherits(store, "MemoryStore")) { - # Check obs_names and var_names have been provided - # if (is.null(obs_names)) { - # stop("When creating a new .h5ad file, `obs_names` must be defined.") - # } - # if (is.null(var_names)) { - # stop("When creating a new .h5ad file, `var_names` must be defined.") - # } + if (length(root$get_attrs()$to_list()) == 0) { # store private values private$zarr_store <- store - # private$zarr_root <- root # Determine initial obs and var shape <- get_shape(obs, var, X, shape) obs <- get_initial_obs(obs, X, shape) var <- get_initial_var(var, X, shape) - # # Create an empty H5ad store using the provided obs/var names - # write_empty_zarr(store, obs_names, var_names, compression) - # Create an empty Zarr write_empty_zarr(store, obs, var, compression) @@ -296,13 +284,6 @@ ZarrAnnData <- R6::R6Class("ZarrAnnData", # nolint if (!is.null(uns)) { self$uns <- uns } - - # # Set private object slots - # private$zarr_store <- store - # private$.n_obs <- length(obs_names) - # private$.n_vars <- length(var_names) - # private$.obs_names <- obs_names - # private$.var_names <- var_names } else { # get root @@ -322,15 +303,6 @@ ZarrAnnData <- R6::R6Class("ZarrAnnData", # nolint private$zarr_store <- store private$zarr_root <- root - # If obs or var names have been provided update those - # if (!is.null(obs_names)) { - # self$obs_names <- obs_names - # } - # - # if (!is.null(var_names)) { - # self$var_names <- var_names - # } - # assert other arguments are NULL if (!is.null(obs)) { stop("obs must be NULL when loading an existing zarr store") @@ -364,19 +336,11 @@ ZarrAnnData <- R6::R6Class("ZarrAnnData", # nolint #' @description Number of observations in the AnnData object n_obs = function() { - # if (is.null(private$.n_obs)) { - # private$.n_obs <- length(self$obs_names) - # } - # private$.n_obs nrow(self$obs) }, #' @description Number of variables in the AnnData object n_vars = function() { - # if (is.null(private$.n_vars)) { - # private$.n_vars <- length(self$var_names) - # } - # private$.n_vars nrow(self$var) } ) @@ -420,10 +384,13 @@ ZarrAnnData <- R6::R6Class("ZarrAnnData", # nolint #' to_ZarrAnnData(ad, "test.zarr") #' # remove store directory #' unlink("test.zarr", recursive = TRUE) -to_ZarrAnnData <- function(adata, - store, - compression = c("none", "gzip", "lzf"), - mode = c("w-", "r", "r+", "a", "w", "x")) { +# nolint start: object_name_linter +to_ZarrAnnData <- function( + # nolint end: object_name_linter + adata, + store, + compression = c("none", "gzip", "lzf"), + mode = c("w-", "r", "r+", "a", "w", "x")) { stopifnot( inherits(adata, "AbstractAnnData") ) @@ -434,8 +401,6 @@ to_ZarrAnnData <- function(adata, var = adata$var, obsm = adata$obsm, varm = adata$varm, - # obs_names = adata$obs_names, - # var_names = adata$var_names, layers = adata$layers, obsp = adata$obsp, varp = adata$varp, @@ -444,4 +409,4 @@ to_ZarrAnnData <- function(adata, shape = adata$shape(), mode = mode ) -} \ No newline at end of file +} diff --git a/R/read_zarr.R b/R/read_zarr.R index e9ec48a0..825f4eda 100644 --- a/R/read_zarr.R +++ b/R/read_zarr.R @@ -5,8 +5,10 @@ #' @param path Path to the Zarr store to read #' @param to The type of object to return. Must be one of: "InMemoryAnnData", #' "HDF5AnnData", "SingleCellExperiment", "Seurat" -#' @param ... Extra arguments provided to [to_SingleCellExperiment()] or -#' [to_Seurat()] +#' @param ... Extra arguments provided to `adata$to_SingleCellExperiment()` or +#' `adata$to_Seurat()`. See [AnnData()] for more information on the arguments of +#' these functions. Note: update this documentation when +#' [`r-lib/roxygen2#955`](https://github.com/r-lib/roxygen2/issues/955) is resolved. #' #' @return The object specified by `to` #' @export @@ -26,7 +28,7 @@ #' } read_zarr <- function( path, - to = c("InMemoryAnnData", "ZarrAnnData", "SingleCellExperiment", "Seurat"), + to = c("InMemoryAnnData", "HDF5AnnData", "SingleCellExperiment", "Seurat", "ZarrAnnData"), ...) { to <- match.arg(to) @@ -36,6 +38,7 @@ read_zarr <- function( "SingleCellExperiment" = to_SingleCellExperiment, "Seurat" = to_Seurat, "InMemoryAnnData" = to_InMemoryAnnData, + "HDF5AnnData" = to_HDF5AnnData, "ZarrAnnData" = NULL ) diff --git a/R/read_zarr_helpers.R b/R/read_zarr_helpers.R index 1d45a133..b9ef85f0 100644 --- a/R/read_zarr_helpers.R +++ b/R/read_zarr_helpers.R @@ -14,8 +14,7 @@ read_zarr_encoding <- function(store, name, stop_on_error = TRUE) { attrs <- g$get_attrs()$to_list() if (!all(c("encoding-type", "encoding-version") %in% names(attrs))) { - path <- name - if(stop_on_error) { + if (stop_on_error) { stop( "Encoding attributes not found for element '", name, "' " ) @@ -51,8 +50,8 @@ read_zarr_encoding <- function(store, name, stop_on_error = TRUE) { read_zarr_element <- function(store, name, type = NULL, version = NULL, stop_on_error = FALSE, ...) { if (is.null(type)) { encoding_list <- read_zarr_encoding(store, name, stop_on_error = stop_on_error) - if(is.null(encoding_list)) { - if(stop_on_error) { + if (is.null(encoding_list)) { + if (stop_on_error) { stop("No encoding info found for element '", name, "'") } else { warning("No encoding found for element '", name, "'") @@ -398,7 +397,6 @@ read_zarr_numeric_scalar <- function(store, name, version = "0.2.0") { #' @noRd read_zarr_mapping <- function(store, name, version = "0.1.0") { version <- match.arg(version) - groupname <- paste0("/", name) g <- pizzarr::zarr_open(store) columns <- g$get_store()$listdir(name) diff --git a/R/write_zarr.R b/R/write_zarr.R index d00ee26d..667df8fb 100644 --- a/R/write_zarr.R +++ b/R/write_zarr.R @@ -4,7 +4,7 @@ #' #' @param object The object to write, either a "SingleCellExperiment" or a #' "Seurat" object -#' @param path Path of the file to write to +#' @param path Path of the file (or zarr store) to write to #' @param compression The compression algorithm to use when writing #' Zarr arrays. Can be one of `"none"`, `"gzip"` or `"lzf"`. Defaults to #' `"none"`. @@ -20,15 +20,13 @@ #' #' @examples #' adata <- AnnData( -#' X = matrix(1:15, 3L, 5L), +#' X = matrix(1:5, 3L, 5L), #' layers = list( -#' A = matrix(15:1, 3L, 5L), -#' B = matrix(letters[1:15], 3L, 5L) +#' A = matrix(5:1, 3L, 5L), +#' B = matrix(letters[1:5], 3L, 5L) #' ), -#' obs = data.frame(cell = 1:3), -#' var = data.frame(gene = 1:5), -#' obs_names = LETTERS[1:3], -#' var_names = letters[1:5] +#' obs = data.frame(row.names = LETTERS[1:3], cell = 1:3), +#' var = data.frame(row.names = letters[1:5], gene = 1:5) #' ) #' store <- pizzarr::MemoryStore$new() #' write_zarr(adata, store) @@ -73,14 +71,17 @@ #' # store <- pizzarr::MemoryStore$new() #' # write_zarr(obj, store) #' } -write_zarr <- function(object, store, compression = c("none", "gzip", "lzf"), - mode = c("w-", "r", "r+", "a", "w", "x")) { +write_zarr <- function( + object, + path, + compression = c("none", "gzip", "lzf"), + mode = c("w-", "r", "r+", "a", "w", "x")) { mode <- match.arg(mode) if (inherits(object, "SingleCellExperiment")) { from_SingleCellExperiment( object, output_class = "ZarrAnnData", - store = store, + store = path, compression = compression, mode = mode ) @@ -88,12 +89,12 @@ write_zarr <- function(object, store, compression = c("none", "gzip", "lzf"), from_Seurat( object, output_class = "ZarrAnnData", - store = store, + store = path, compression = compression, mode = mode ) } else if (inherits(object, "AbstractAnnData")) { - to_ZarrAnnData(object, store, compression = compression, mode = mode) + to_ZarrAnnData(object, path, compression = compression, mode = mode) } else { stop("Unable to write object of class: ", class(object)) } diff --git a/R/write_zarr_helpers.R b/R/write_zarr_helpers.R index a97a744d..a69135dc 100644 --- a/R/write_zarr_helpers.R +++ b/R/write_zarr_helpers.R @@ -111,7 +111,13 @@ write_zarr_encoding <- function(store, name, encoding, version) { #' @param version Encoding version of the element to write #' #' @noRd -write_zarr_dense_array <- function(value, store, name, compression, version = "0.2.0", chunks = TRUE, overwrite = FALSE) { +write_zarr_dense_array <- function(value, + store, + name, + compression, + version = "0.2.0", + chunks = TRUE, + overwrite = FALSE) { version <- match.arg(version) zarr_write_compressed(store, name, value, compression, chunks = chunks, overwrite = overwrite) @@ -132,7 +138,12 @@ write_zarr_dense_array <- function(value, store, name, compression, version = "0 #' @param compression The compression to use when writing the element. Can be #' one of `"none"`, `"gzip"` or `"lzf"`. Defaults to `"none"`. #' @param version Encoding version of the element to write -write_zarr_sparse_array <- function(value, store, name, compression, version = "0.1.0", overwrite = FALSE) { +write_zarr_sparse_array <- function(value, + store, + name, + compression, + version = "0.1.0", + overwrite = FALSE) { version <- match.arg(version) # check types @@ -179,7 +190,7 @@ write_zarr_sparse_array <- function(value, store, name, compression, version = " #' @param version Encoding version of the element to write write_zarr_nullable_boolean <- function(value, store, name, compression, version = "0.1.0", overwrite = FALSE) { # write mask and values - g <- pizzarr::zarr_open_group(store, path = name) + pizzarr::zarr_open_group(store, path = name) value_no_na <- value value_no_na[is.na(value_no_na)] <- FALSE @@ -204,7 +215,7 @@ write_zarr_nullable_boolean <- function(value, store, name, compression, version #' @param version Encoding version of the element to write write_zarr_nullable_integer <- function(value, store, name, compression, version = "0.1.0", overwrite = FALSE) { # write mask and values - g <- pizzarr::zarr_open_group(store, path = name) + pizzarr::zarr_open_group(store, path = name) value_no_na <- value value_no_na[is.na(value_no_na)] <- -1L @@ -227,7 +238,12 @@ write_zarr_nullable_integer <- function(value, store, name, compression, version #' @param compression The compression to use when writing the element. Can be #' one of `"none"`, `"gzip"` or `"lzf"`. Defaults to `"none"`. #' @param version Encoding version of the element to write -write_zarr_string_array <- function(value, store, name, compression, version = "0.2.0", overwrite = FALSE) { +write_zarr_string_array <- function(value, + store, + name, + compression, + version = "0.2.0", + overwrite = FALSE) { if (!is.null(dim(value))) { dims <- dim(value) @@ -238,7 +254,9 @@ write_zarr_string_array <- function(value, store, name, compression, version = " object_codec <- pizzarr::VLenUtf8Codec$new() data <- array(data = value, dim = dims) # TODO: existing _index does not allow overwriting, so shall we keep overwrite=TRUE here ? - a <- pizzarr::zarr_create_array(data, store = store, path = name, dtype = "|O", object_codec = object_codec, shape = dims, overwrite = TRUE) + pizzarr::zarr_create_array(data, + store = store, path = name, dtype = "|O", + object_codec = object_codec, shape = dims, overwrite = TRUE) write_zarr_encoding(store, name, "string-array", version) } @@ -255,8 +273,13 @@ write_zarr_string_array <- function(value, store, name, compression, version = " #' @param compression The compression to use when writing the element. Can be #' one of `"none"`, `"gzip"` or `"lzf"`. Defaults to `"none"`. #' @param version Encoding version of the element to write -write_zarr_categorical <- function(value, store, name, compression, version = "0.2.0", overwrite = FALSE) { - g <- pizzarr::zarr_open_group(store, path = name) +write_zarr_categorical <- function(value, + store, + name, + compression, + version = "0.2.0", + overwrite = FALSE) { + pizzarr::zarr_open_group(store, path = name) zarr_write_compressed(store, paste0(name, "/categories"), levels(value), compression, overwrite = overwrite) zarr_write_compressed(store, paste0(name, "/codes"), as.integer(value), compression, overwrite = overwrite) zarr_write_compressed(store, paste0(name, "/ordered"), is.ordered(value), compression, overwrite = overwrite) @@ -276,11 +299,22 @@ write_zarr_categorical <- function(value, store, name, compression, version = "0 #' @param compression The compression to use when writing the element. Can be #' one of `"none"`, `"gzip"` or `"lzf"`. Defaults to `"none"`. #' @param version Encoding version of the element to write -write_zarr_string_scalar <- function(value, store, name, compression, version = "0.2.0", overwrite = FALSE) { +write_zarr_string_scalar <- function(value, + store, + name, + compression, + version = "0.2.0", + overwrite = FALSE) { # Write scalar - object_codec = pizzarr::VLenUtf8Codec$new() + object_codec <- pizzarr::VLenUtf8Codec$new() value <- array(data = value, dim = 1) - a <- pizzarr::zarr_create_array(value, store = store, path = name, dtype = "|O", object_codec = object_codec, shape = 1, overwrite = overwrite) + pizzarr::zarr_create_array(value, + store = store, + path = name, + dtype = "|O", + object_codec = object_codec, + shape = 1, + overwrite = overwrite) # Write attributes write_zarr_encoding(store, name, "string", version) @@ -298,7 +332,12 @@ write_zarr_string_scalar <- function(value, store, name, compression, version = #' @param compression The compression to use when writing the element. Can be #' one of `"none"`, `"gzip"` or `"lzf"`. Defaults to `"none"`. #' @param version Encoding version of the element to write -write_zarr_numeric_scalar <- function(value, store, name, compression, version = "0.2.0", overwrite = FALSE) { +write_zarr_numeric_scalar <- function(value, + store, + name, + compression, + version = "0.2.0", + overwrite = FALSE) { # Write scalar zarr_write_compressed(store, name, value, compression, overwrite = overwrite) @@ -319,7 +358,7 @@ write_zarr_numeric_scalar <- function(value, store, name, compression, version = #' one of `"none"`, `"gzip"` or `"lzf"`. Defaults to `"none"`. #' @param version Encoding version of the element to write write_zarr_mapping <- function(value, store, name, compression, version = "0.1.0", overwrite = FALSE) { - g <- pizzarr::zarr_open_group(store, path = name) + pizzarr::zarr_open_group(store, path = name) # Write mapping elements for (key in names(value)) { @@ -435,8 +474,6 @@ write_empty_zarr <- function(store, obs, var, compression, version = "0.1.0", ov pizzarr::zarr_open_group(store, path = "/") write_zarr_encoding(store, "/", "anndata", "0.1.0") - # write_zarr_element(data.frame(row.names = obs_names), store, "/obs", compression) - # write_zarr_element(data.frame(row.names = var_names), store, "/var", compression) write_zarr_element(obs, store, "/obs", compression, overwrite = overwrite) write_zarr_element(var, store, "/var", compression, overwrite = overwrite) @@ -472,7 +509,7 @@ write_empty_zarr <- function(store, obs, var, compression, version = "0.1.0", ov zarr_path_exists <- function(store, target_path) { store <- pizzarr::zarr_open(store, path = "") result <- tryCatch({ - if(store$contains_item(target_path)) { + if (store$contains_item(target_path)) { # This should work for DirectoryStore but not yet for MemoryStore. return(TRUE) } @@ -481,11 +518,11 @@ zarr_path_exists <- function(store, target_path) { store$get_item(target_path) return(TRUE) }, error = function(cond) { - if(pizzarr::is_key_error(cond)) { + if (pizzarr::is_key_error(cond)) { return(FALSE) } stop(cond) - }, warnings = function(w){}) + }, warnings = function(w) {}) return(result) } @@ -504,7 +541,12 @@ zarr_path_exists <- function(store, target_path) { #' one of `"none"`, `"gzip"` or `"lzf"`. Defaults to `"none"`. #' #' @return Whether the `path` exists in `file` -zarr_write_compressed <- function(store, name, value, compression = c("none", "gzip", "lzf"), chunks = TRUE, overwrite = FALSE) { +zarr_write_compressed <- function(store, + name, + value, + compression = c("none", "gzip", "lzf"), + chunks = TRUE, + overwrite = FALSE) { compression <- match.arg(compression) if (!is.null(dim(value))) { dims <- dim(value) @@ -513,18 +555,25 @@ zarr_write_compressed <- function(store, name, value, compression = c("none", "g } object_codec <- NA - if(is.integer(value)) { + if (is.integer(value)) { dtype <- " file.info(h5ad_file_gzip)$size) # TODO: expect things }) @@ -222,6 +220,5 @@ test_that("writing lzf compressed files works for Zarr", { write_zarr(adata, store_none, compression = "none") write_zarr(adata, store_lzf, compression = "lzf") - #expect_true(file.info(h5ad_file_none)$size > file.info(h5ad_file_lzf)$size) # TODO: expect things }) diff --git a/tests/testthat/test-h5ad-zarr.R b/tests/testthat/test-h5ad-zarr.R index 6518f8fc..bdef8dc6 100644 --- a/tests/testthat/test-h5ad-zarr.R +++ b/tests/testthat/test-h5ad-zarr.R @@ -1,7 +1,6 @@ skip_if_not_installed("rhdf5") skip_if_not_installed("pizzarr") -# file <- system.file("extdata", "example.h5ad", package = "anndataR") file <- hdf5r::H5File$new(system.file("extdata", "example.h5ad", package = "anndataR"), mode = "r") zarr_dir <- system.file("extdata", "example.zarr", package = "anndataR") @@ -27,18 +26,19 @@ test_that("reading sparse matrices is same for h5ad and zarr", { expect_equal(mat_h5ad, mat_zarr) }) -# test_that("reading recarrays works", { -# array_list <- read_h5ad_rec_array( -# file, "uns/rank_genes_groups/logfoldchanges" -# ) -# expect_true(is.list(array_list)) -# expect_equal(names(array_list), c("0", "1", "2", "3", "4", "5")) -# for (array in array_list) { -# expect_true(is.array(array)) -# expect_type(array, "double") -# expect_equal(dim(array), 100) -# } -# }) +test_that("reading recarrays works", { + skip("read_zarr_rec_array is not implemented yet") + array_list <- read_zarr_rec_array( + file, "uns/rank_genes_groups/logfoldchanges" + ) + expect_true(is.list(array_list)) + expect_equal(names(array_list), c("0", "1", "2", "3", "4", "5")) + for (array in array_list) { + expect_true(is.array(array)) + expect_type(array, "double") + expect_equal(dim(array), 100) + } +}) test_that("reading 1D numeric arrays is same for h5ad and zarr", { array_1d_h5ad <- read_h5ad_dense_array(file, "obs/Int") @@ -67,8 +67,7 @@ test_that("reading 1D nullable arrays is same for h5ad and zarr", { # TODO: check this test, zarr Bools are stored as dense array hence no mask is given array_1d_h5ad <- read_h5ad_nullable_boolean(file, "obs/Bool") - # array_1d_zarr <- read_zarr_nullable_boolean(store, "obs/Bool") - array_1d_zarr <- read_zarr_dense_array(store, "obs/Bool") + array_1d_zarr <- read_zarr_dense_array(store, "obs/Bool") # TODO: read_zarr_nullable_boolean should be used instead ? expect_equal(array_1d_h5ad, array_1d_zarr) array_1d_h5ad <- read_h5ad_nullable_boolean(file, "obs/BoolNA") @@ -98,15 +97,15 @@ test_that("reading string arrays is same for h5ad and zarr", { expect_equal(array_h5ad, array_zarr) }) -# test_that("reading mappings is same for h5ad and zarr", { -# mapping_h5ad <- read_h5ad_mapping(file, "uns") -# mapping_zarr <- read_zarr_mapping(store, "uns") +test_that("reading mappings is same for h5ad and zarr", { + skip("read_zarr_mapping returns list in different order") + mapping_h5ad <- read_h5ad_mapping(file, "uns") + mapping_zarr <- read_zarr_mapping(store, "uns") -# expect_equal(mapping_h5ad, mapping_zarr) -# }) + expect_equal(mapping_h5ad, mapping_zarr) +}) test_that("reading dataframes works", { - # df_h5ad <- read_h5ad_data_frame(file, "obs", include_index = TRUE) df_h5ad <- read_h5ad_data_frame(file, "obs") df_zarr <- read_zarr_data_frame(store, "obs", include_index = TRUE) @@ -117,10 +116,6 @@ test_that("reading H5AD as SingleCellExperiment is same for h5ad and zarr", { skip_if_not_installed("SingleCellExperiment") sce_h5ad <- read_h5ad(file, to = "SingleCellExperiment") - # h5ad reads this column as characters like 'TRUE', 'FALSE', while zarr reads as logical - # sce_h5ad@rowRanges@elementMetadata@listData$highly_variable <- as.logical( - # sce_h5ad@rowRanges@elementMetadata@listData$highly_variable - # ) sce_zarr <- read_zarr(store, to = "SingleCellExperiment") expect_equal(sce_h5ad, sce_zarr) From 1e0e86827cbff33686d4cf2becfc5321d47037be Mon Sep 17 00:00:00 2001 From: Artur-man Date: Wed, 6 Nov 2024 23:11:49 +0100 Subject: [PATCH 25/25] add pizzarr to Suggests and README --- DESCRIPTION | 1 + README.md | 3 +++ 2 files changed, 4 insertions(+) diff --git a/DESCRIPTION b/DESCRIPTION index 6f410979..9dee7e14 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -69,6 +69,7 @@ Suggests: knitr, reticulate (>= 1.36.1), hdf5r (>= 1.3.11), + pizzarr, rmarkdown, S4Vectors, SeuratObject, diff --git a/README.md b/README.md index 0089d1b0..f6b1c211 100644 --- a/README.md +++ b/README.md @@ -45,6 +45,9 @@ the task you want to perform. - To read/write \*.h5ad files, you need to install [hdf5r](https://cran.r-project.org/package=hdf5r): `BiocManager::install("hdf5r")` +- To read/write \*.zarr files, you need to install + [zarr](https://github.com/keller-mark/pizzarr): + `devtools::install_github("keller-mark/pizzarr")` - To convert to/from `SingleCellExperiment` objects, you need to install [SingleCellExperiment](https://bioconductor.org/packages/release/bioc/html/SingleCellExperiment.html): `BiocManager::install("SingleCellExperiment")`