From 1f327fea63165327613cbb8711b4c0e97c183b9f Mon Sep 17 00:00:00 2001 From: jdhenaos Date: Wed, 8 Jul 2026 00:02:38 +0200 Subject: [PATCH] I/O fixed --- demo.ipynb | 263 ++++++++++++++++++++++++++++----------- src/omicslog/__init__.py | 2 +- src/omicslog/core.py | 36 +++++- test_omicslog.h5ad | Bin 0 -> 117048 bytes 4 files changed, 223 insertions(+), 78 deletions(-) create mode 100644 test_omicslog.h5ad diff --git a/demo.ipynb b/demo.ipynb index 9cf0481..1516484 100644 --- a/demo.ipynb +++ b/demo.ipynb @@ -12,7 +12,7 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 1, "id": "14411cbf", "metadata": {}, "outputs": [], @@ -37,7 +37,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 2, "id": "c285a9b4", "metadata": {}, "outputs": [ @@ -52,7 +52,7 @@ " uns: '_omicslog'\n", "\n", "Operation log:\n", - "[2026-05-20 13:49:41] obs: 'cell_type' added\n" + "[2026-07-03 18:08:13] obs: 'cell_type' added\n" ] }, { @@ -84,7 +84,7 @@ " \n", " \n", " 0\n", - " 2026-05-20 13:49:41\n", + " 2026-07-03 18:08:13\n", " obs\n", " 'cell_type' added\n", " \n", @@ -94,10 +94,10 @@ ], "text/plain": [ " Time Operation Message\n", - "0 2026-05-20 13:49:41 obs 'cell_type' added" + "0 2026-07-03 18:08:13 obs 'cell_type' added" ] }, - "execution_count": 14, + "execution_count": 2, "metadata": {}, "output_type": "execute_result" } @@ -128,7 +128,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 3, "id": "b88b1e3a", "metadata": {}, "outputs": [ @@ -136,13 +136,13 @@ "name": "stdout", "output_type": "stream", "text": [ - "AnnData object with n_obs × n_vars = 27 × 2000\n", + "AnnData object with n_obs × n_vars = 28 × 2000\n", " obs: 'cell_type'\n", " uns: '_omicslog'\n", "\n", "Operation log:\n", - "[2026-05-20 13:49:41] obs: 'cell_type' added\n", - "[2026-05-20 13:49:43] subset: removed 73 samples (73%), 27 samples remaining\n" + "[2026-07-03 18:08:13] obs: 'cell_type' added\n", + "[2026-07-03 18:08:15] subset: removed 72 samples (72%), 28 samples remaining\n" ] }, { @@ -174,15 +174,15 @@ " \n", " \n", " 0\n", - " 2026-05-20 13:49:41\n", + " 2026-07-03 18:08:13\n", " obs\n", " 'cell_type' added\n", " \n", " \n", " 1\n", - " 2026-05-20 13:49:43\n", + " 2026-07-03 18:08:15\n", " subset\n", - " removed 73 samples (73%), 27 samples remaining\n", + " removed 72 samples (72%), 28 samples remaining\n", " \n", " \n", "\n", @@ -190,15 +190,15 @@ ], "text/plain": [ " Time Operation \\\n", - "0 2026-05-20 13:49:41 obs \n", - "1 2026-05-20 13:49:43 subset \n", + "0 2026-07-03 18:08:13 obs \n", + "1 2026-07-03 18:08:15 subset \n", "\n", " Message \n", "0 'cell_type' added \n", - "1 removed 73 samples (73%), 27 samples remaining " + "1 removed 72 samples (72%), 28 samples remaining " ] }, - "execution_count": 15, + "execution_count": 3, "metadata": {}, "output_type": "execute_result" } @@ -219,7 +219,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 4, "id": "8f7ed85f", "metadata": {}, "outputs": [ @@ -227,14 +227,14 @@ "name": "stdout", "output_type": "stream", "text": [ - "AnnData object with n_obs × n_vars = 27 × 200\n", + "AnnData object with n_obs × n_vars = 28 × 200\n", " obs: 'cell_type'\n", " uns: '_omicslog'\n", "\n", "Operation log:\n", - "[2026-05-20 13:49:41] obs: 'cell_type' added\n", - "[2026-05-20 13:49:43] subset: removed 73 samples (73%), 27 samples remaining\n", - "[2026-05-20 13:49:46] subset: removed 1800 genes (90%), 200 genes remaining\n" + "[2026-07-03 18:08:13] obs: 'cell_type' added\n", + "[2026-07-03 18:08:15] subset: removed 72 samples (72%), 28 samples remaining\n", + "[2026-07-03 18:08:17] subset: removed 1800 genes (90%), 200 genes remaining\n" ] }, { @@ -266,19 +266,19 @@ " \n", " \n", " 0\n", - " 2026-05-20 13:49:41\n", + " 2026-07-03 18:08:13\n", " obs\n", " 'cell_type' added\n", " \n", " \n", " 1\n", - " 2026-05-20 13:49:43\n", + " 2026-07-03 18:08:15\n", " subset\n", - " removed 73 samples (73%), 27 samples remaining\n", + " removed 72 samples (72%), 28 samples remaining\n", " \n", " \n", " 2\n", - " 2026-05-20 13:49:46\n", + " 2026-07-03 18:08:17\n", " subset\n", " removed 1800 genes (90%), 200 genes remaining\n", " \n", @@ -288,17 +288,17 @@ ], "text/plain": [ " Time Operation \\\n", - "0 2026-05-20 13:49:41 obs \n", - "1 2026-05-20 13:49:43 subset \n", - "2 2026-05-20 13:49:46 subset \n", + "0 2026-07-03 18:08:13 obs \n", + "1 2026-07-03 18:08:15 subset \n", + "2 2026-07-03 18:08:17 subset \n", "\n", " Message \n", "0 'cell_type' added \n", - "1 removed 73 samples (73%), 27 samples remaining \n", + "1 removed 72 samples (72%), 28 samples remaining \n", "2 removed 1800 genes (90%), 200 genes remaining " ] }, - "execution_count": 16, + "execution_count": 4, "metadata": {}, "output_type": "execute_result" } @@ -319,7 +319,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 5, "id": "0fb2c8b9", "metadata": {}, "outputs": [ @@ -327,18 +327,18 @@ "name": "stdout", "output_type": "stream", "text": [ - "AnnData object with n_obs × n_vars = 27 × 200\n", + "AnnData object with n_obs × n_vars = 28 × 200\n", " obs: 'cell_type'\n", " uns: '_omicslog'\n", " obsm: 'X_umap'\n", " varm: 'gene_stuff'\n", "\n", "Operation log:\n", - "[2026-05-20 13:49:41] obs: 'cell_type' added\n", - "[2026-05-20 13:49:43] subset: removed 73 samples (73%), 27 samples remaining\n", - "[2026-05-20 13:49:46] subset: removed 1800 genes (90%), 200 genes remaining\n", - "[2026-05-20 13:49:48] obsm: 'X_umap' added\n", - "[2026-05-20 13:49:48] varm: 'gene_stuff' added\n" + "[2026-07-03 18:08:13] obs: 'cell_type' added\n", + "[2026-07-03 18:08:15] subset: removed 72 samples (72%), 28 samples remaining\n", + "[2026-07-03 18:08:17] subset: removed 1800 genes (90%), 200 genes remaining\n", + "[2026-07-03 18:08:19] obsm: 'X_umap' added\n", + "[2026-07-03 18:08:19] varm: 'gene_stuff' added\n" ] }, { @@ -370,31 +370,31 @@ " \n", " \n", " 0\n", - " 2026-05-20 13:49:41\n", + " 2026-07-03 18:08:13\n", " obs\n", " 'cell_type' added\n", " \n", " \n", " 1\n", - " 2026-05-20 13:49:43\n", + " 2026-07-03 18:08:15\n", " subset\n", - " removed 73 samples (73%), 27 samples remaining\n", + " removed 72 samples (72%), 28 samples remaining\n", " \n", " \n", " 2\n", - " 2026-05-20 13:49:46\n", + " 2026-07-03 18:08:17\n", " subset\n", " removed 1800 genes (90%), 200 genes remaining\n", " \n", " \n", " 3\n", - " 2026-05-20 13:49:48\n", + " 2026-07-03 18:08:19\n", " obsm\n", " 'X_umap' added\n", " \n", " \n", " 4\n", - " 2026-05-20 13:49:48\n", + " 2026-07-03 18:08:19\n", " varm\n", " 'gene_stuff' added\n", " \n", @@ -404,21 +404,21 @@ ], "text/plain": [ " Time Operation \\\n", - "0 2026-05-20 13:49:41 obs \n", - "1 2026-05-20 13:49:43 subset \n", - "2 2026-05-20 13:49:46 subset \n", - "3 2026-05-20 13:49:48 obsm \n", - "4 2026-05-20 13:49:48 varm \n", + "0 2026-07-03 18:08:13 obs \n", + "1 2026-07-03 18:08:15 subset \n", + "2 2026-07-03 18:08:17 subset \n", + "3 2026-07-03 18:08:19 obsm \n", + "4 2026-07-03 18:08:19 varm \n", "\n", " Message \n", "0 'cell_type' added \n", - "1 removed 73 samples (73%), 27 samples remaining \n", + "1 removed 72 samples (72%), 28 samples remaining \n", "2 removed 1800 genes (90%), 200 genes remaining \n", "3 'X_umap' added \n", "4 'gene_stuff' added " ] }, - "execution_count": 17, + "execution_count": 5, "metadata": {}, "output_type": "execute_result" } @@ -440,7 +440,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 6, "id": "a8c41222", "metadata": {}, "outputs": [ @@ -448,7 +448,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "AnnData object with n_obs × n_vars = 27 × 200\n", + "AnnData object with n_obs × n_vars = 28 × 200\n", " obs: 'cell_type'\n", " uns: '_omicslog'\n", " obsm: 'X_umap'\n", @@ -456,12 +456,12 @@ " layers: 'log_transformed'\n", "\n", "Operation log:\n", - "[2026-05-20 13:49:41] obs: 'cell_type' added\n", - "[2026-05-20 13:49:43] subset: removed 73 samples (73%), 27 samples remaining\n", - "[2026-05-20 13:49:46] subset: removed 1800 genes (90%), 200 genes remaining\n", - "[2026-05-20 13:49:48] obsm: 'X_umap' added\n", - "[2026-05-20 13:49:48] varm: 'gene_stuff' added\n", - "[2026-05-20 13:49:50] layers: 'log_transformed' added\n" + "[2026-07-03 18:08:13] obs: 'cell_type' added\n", + "[2026-07-03 18:08:15] subset: removed 72 samples (72%), 28 samples remaining\n", + "[2026-07-03 18:08:17] subset: removed 1800 genes (90%), 200 genes remaining\n", + "[2026-07-03 18:08:19] obsm: 'X_umap' added\n", + "[2026-07-03 18:08:19] varm: 'gene_stuff' added\n", + "[2026-07-03 18:08:22] layers: 'log_transformed' added\n" ] }, { @@ -493,37 +493,37 @@ " \n", " \n", " 0\n", - " 2026-05-20 13:49:41\n", + " 2026-07-03 18:08:13\n", " obs\n", " 'cell_type' added\n", " \n", " \n", " 1\n", - " 2026-05-20 13:49:43\n", + " 2026-07-03 18:08:15\n", " subset\n", - " removed 73 samples (73%), 27 samples remaining\n", + " removed 72 samples (72%), 28 samples remaining\n", " \n", " \n", " 2\n", - " 2026-05-20 13:49:46\n", + " 2026-07-03 18:08:17\n", " subset\n", " removed 1800 genes (90%), 200 genes remaining\n", " \n", " \n", " 3\n", - " 2026-05-20 13:49:48\n", + " 2026-07-03 18:08:19\n", " obsm\n", " 'X_umap' added\n", " \n", " \n", " 4\n", - " 2026-05-20 13:49:48\n", + " 2026-07-03 18:08:19\n", " varm\n", " 'gene_stuff' added\n", " \n", " \n", " 5\n", - " 2026-05-20 13:49:50\n", + " 2026-07-03 18:08:22\n", " layers\n", " 'log_transformed' added\n", " \n", @@ -533,23 +533,23 @@ ], "text/plain": [ " Time Operation \\\n", - "0 2026-05-20 13:49:41 obs \n", - "1 2026-05-20 13:49:43 subset \n", - "2 2026-05-20 13:49:46 subset \n", - "3 2026-05-20 13:49:48 obsm \n", - "4 2026-05-20 13:49:48 varm \n", - "5 2026-05-20 13:49:50 layers \n", + "0 2026-07-03 18:08:13 obs \n", + "1 2026-07-03 18:08:15 subset \n", + "2 2026-07-03 18:08:17 subset \n", + "3 2026-07-03 18:08:19 obsm \n", + "4 2026-07-03 18:08:19 varm \n", + "5 2026-07-03 18:08:22 layers \n", "\n", " Message \n", "0 'cell_type' added \n", - "1 removed 73 samples (73%), 27 samples remaining \n", + "1 removed 72 samples (72%), 28 samples remaining \n", "2 removed 1800 genes (90%), 200 genes remaining \n", "3 'X_umap' added \n", "4 'gene_stuff' added \n", "5 'log_transformed' added " ] }, - "execution_count": 18, + "execution_count": 6, "metadata": {}, "output_type": "execute_result" } @@ -559,11 +559,122 @@ "print(logdata)\n", "logdata.uns[\"_omicslog\"]" ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "11c1abb4", + "metadata": {}, + "outputs": [], + "source": [ + "logdata.write(\"test_omicslog.h5ad\")" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "06e22f91", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
TimeOperationMessage
02026-07-03 18:08:13obs'cell_type' added
12026-07-03 18:08:15subsetremoved 72 samples (72%), 28 samples remaining
22026-07-03 18:08:17subsetremoved 1800 genes (90%), 200 genes remaining
32026-07-03 18:08:19obsm'X_umap' added
42026-07-03 18:08:19varm'gene_stuff' added
52026-07-03 18:08:22layers'log_transformed' added
\n", + "
" + ], + "text/plain": [ + " Time Operation \\\n", + "0 2026-07-03 18:08:13 obs \n", + "1 2026-07-03 18:08:15 subset \n", + "2 2026-07-03 18:08:17 subset \n", + "3 2026-07-03 18:08:19 obsm \n", + "4 2026-07-03 18:08:19 varm \n", + "5 2026-07-03 18:08:22 layers \n", + "\n", + " Message \n", + "0 'cell_type' added \n", + "1 removed 72 samples (72%), 28 samples remaining \n", + "2 removed 1800 genes (90%), 200 genes remaining \n", + "3 'X_umap' added \n", + "4 'gene_stuff' added \n", + "5 'log_transformed' added " + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "new_adata = ad.read_h5ad(\"test_omicslog.h5ad\")\n", + "new_adata.uns[\"_omicslog\"]" + ] } ], "metadata": { "kernelspec": { - "display_name": ".venv", + "display_name": "omicslog", "language": "python", "name": "python3" }, @@ -577,7 +688,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.11.14" + "version": "3.14.6" } }, "nbformat": 4, diff --git a/src/omicslog/__init__.py b/src/omicslog/__init__.py index 71c626b..88c3a48 100644 --- a/src/omicslog/__init__.py +++ b/src/omicslog/__init__.py @@ -1,7 +1,7 @@ from omicslog.core import ( LoggedAnnDataStandalone, AnnDataSnapshot, - log_start, + log_start ) __all__ = ["LoggedAnnDataStandalone", "AnnDataSnapshot", "log_start"] diff --git a/src/omicslog/core.py b/src/omicslog/core.py index 40db784..0ad120d 100644 --- a/src/omicslog/core.py +++ b/src/omicslog/core.py @@ -284,6 +284,39 @@ def var(self): def var(self, value): ad.AnnData.var.fset(self, value) + def _unwrap(self) -> ad.AnnData: + """Plain AnnData view of the real underlying data, without the logging proxies. + + anndata's writers use `type(elem)` to look up a serializer, and don't + recognize `_LoggingProxy`, so the proxies must be unwrapped before writing. + """ + return ad.AnnData( + X=super().X, + obs=super().obs, + var=super().var, + uns=self.uns, + obsm=dict(super().obsm), + varm=dict(super().varm), + layers=dict(super().layers), + obsp=dict(super().obsp), + varp=dict(super().varp), + raw=self.raw, + ) + + def write_h5ad(self, filename=None, **kwargs): + return self._unwrap().write_h5ad(filename, **kwargs) + + write = write_h5ad + + def write_loom(self, filename, **kwargs): + return self._unwrap().write_loom(filename, **kwargs) + + def write_zarr(self, store, **kwargs): + return self._unwrap().write_zarr(store, **kwargs) + + def write_csvs(self, dirname, **kwargs): + return self._unwrap().write_csvs(dirname, **kwargs) + # --- snapshot & subsetting --- def _snapshot(self) -> AnnDataSnapshot: @@ -324,4 +357,5 @@ def operation_log(self) -> list[str]: def log_start(adata: ad.AnnData) -> LoggedAnnDataStandalone: - return LoggedAnnDataStandalone.from_anndata(adata) \ No newline at end of file + return LoggedAnnDataStandalone.from_anndata(adata) + diff --git a/test_omicslog.h5ad b/test_omicslog.h5ad new file mode 100644 index 0000000000000000000000000000000000000000..65cfad65e9036672004726d7a7381159e33ea2cd GIT binary patch literal 117048 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