|
25 | 25 | _from_fixed_length_strings,
|
26 | 26 | )
|
27 | 27 | from ..experimental import read_dispatched
|
28 |
| -from .specs import write_elem |
29 | 28 | from .specs.methods import sync_async_to_async
|
30 |
| -from .specs.registry import IOSpec, read_elem_async, write_spec |
| 29 | +from .specs.registry import IOSpec, read_elem_async, write_elem_async, write_spec |
31 | 30 | from .utils import (
|
32 | 31 | H5PY_V3,
|
33 | 32 | _read_legacy_raw,
|
@@ -83,39 +82,76 @@ def write_h5ad(
|
83 | 82 | f = f["/"]
|
84 | 83 | f.attrs.setdefault("encoding-type", "anndata")
|
85 | 84 | f.attrs.setdefault("encoding-version", "0.1.0")
|
86 |
| - |
87 | 85 | if "X" in as_dense and isinstance(
|
88 | 86 | adata.X, CSMatrix | BaseCompressedSparseDataset
|
89 | 87 | ):
|
90 |
| - write_sparse_as_dense(f, "X", adata.X, dataset_kwargs=dataset_kwargs) |
| 88 | + asyncio.run( |
| 89 | + write_sparse_as_dense(f, "X", adata.X, dataset_kwargs=dataset_kwargs) |
| 90 | + ) |
91 | 91 | elif not (adata.isbacked and Path(adata.filename) == Path(filepath)):
|
92 | 92 | # If adata.isbacked, X should already be up to date
|
93 |
| - write_elem(f, "X", adata.X, dataset_kwargs=dataset_kwargs) |
| 93 | + asyncio.run( |
| 94 | + write_elem_async(f, "X", adata.X, dataset_kwargs=dataset_kwargs) |
| 95 | + ) |
94 | 96 | if "raw/X" in as_dense and isinstance(
|
95 | 97 | adata.raw.X, CSMatrix | BaseCompressedSparseDataset
|
96 | 98 | ):
|
97 |
| - write_sparse_as_dense( |
98 |
| - f, "raw/X", adata.raw.X, dataset_kwargs=dataset_kwargs |
| 99 | + asyncio.run( |
| 100 | + write_sparse_as_dense( |
| 101 | + f, "raw/X", adata.raw.X, dataset_kwargs=dataset_kwargs |
| 102 | + ) |
99 | 103 | )
|
100 |
| - write_elem(f, "raw/var", adata.raw.var, dataset_kwargs=dataset_kwargs) |
101 |
| - write_elem( |
102 |
| - f, "raw/varm", dict(adata.raw.varm), dataset_kwargs=dataset_kwargs |
| 104 | + asyncio.run( |
| 105 | + write_elem_async( |
| 106 | + f, "raw/var", adata.raw.var, dataset_kwargs=dataset_kwargs |
| 107 | + ) |
| 108 | + ) |
| 109 | + asyncio.run( |
| 110 | + write_elem_async( |
| 111 | + f, "raw/varm", dict(adata.raw.varm), dataset_kwargs=dataset_kwargs |
| 112 | + ) |
103 | 113 | )
|
104 | 114 | elif adata.raw is not None:
|
105 |
| - write_elem(f, "raw", adata.raw, dataset_kwargs=dataset_kwargs) |
106 |
| - write_elem(f, "obs", adata.obs, dataset_kwargs=dataset_kwargs) |
107 |
| - write_elem(f, "var", adata.var, dataset_kwargs=dataset_kwargs) |
108 |
| - write_elem(f, "obsm", dict(adata.obsm), dataset_kwargs=dataset_kwargs) |
109 |
| - write_elem(f, "varm", dict(adata.varm), dataset_kwargs=dataset_kwargs) |
110 |
| - write_elem(f, "obsp", dict(adata.obsp), dataset_kwargs=dataset_kwargs) |
111 |
| - write_elem(f, "varp", dict(adata.varp), dataset_kwargs=dataset_kwargs) |
112 |
| - write_elem(f, "layers", dict(adata.layers), dataset_kwargs=dataset_kwargs) |
113 |
| - write_elem(f, "uns", dict(adata.uns), dataset_kwargs=dataset_kwargs) |
| 115 | + asyncio.run( |
| 116 | + write_elem_async(f, "raw", adata.raw, dataset_kwargs=dataset_kwargs) |
| 117 | + ) |
| 118 | + |
| 119 | + async def gather(): |
| 120 | + await asyncio.gather( |
| 121 | + *[ |
| 122 | + write_elem_async( |
| 123 | + f, "obs", adata.obs, dataset_kwargs=dataset_kwargs |
| 124 | + ), |
| 125 | + write_elem_async( |
| 126 | + f, "var", adata.var, dataset_kwargs=dataset_kwargs |
| 127 | + ), |
| 128 | + write_elem_async( |
| 129 | + f, "obsm", dict(adata.obsm), dataset_kwargs=dataset_kwargs |
| 130 | + ), |
| 131 | + write_elem_async( |
| 132 | + f, "varm", dict(adata.varm), dataset_kwargs=dataset_kwargs |
| 133 | + ), |
| 134 | + write_elem_async( |
| 135 | + f, "obsp", dict(adata.obsp), dataset_kwargs=dataset_kwargs |
| 136 | + ), |
| 137 | + write_elem_async( |
| 138 | + f, "varp", dict(adata.varp), dataset_kwargs=dataset_kwargs |
| 139 | + ), |
| 140 | + write_elem_async( |
| 141 | + f, "layers", dict(adata.layers), dataset_kwargs=dataset_kwargs |
| 142 | + ), |
| 143 | + write_elem_async( |
| 144 | + f, "uns", dict(adata.uns), dataset_kwargs=dataset_kwargs |
| 145 | + ), |
| 146 | + ] |
| 147 | + ) |
| 148 | + |
| 149 | + asyncio.run(gather()) |
114 | 150 |
|
115 | 151 |
|
116 | 152 | @report_write_key_on_error
|
117 | 153 | @write_spec(IOSpec("array", "0.2.0"))
|
118 |
| -def write_sparse_as_dense( |
| 154 | +async def write_sparse_as_dense( |
119 | 155 | f: h5py.Group,
|
120 | 156 | key: str,
|
121 | 157 | value: CSMatrix | BaseCompressedSparseDataset,
|
|
0 commit comments