Mercurial > repos > iuc > scanpy_plot
diff plot.xml @ 20:387671174a49 draft default tip
planemo upload for repository https://github.com/galaxyproject/tools-iuc/tree/main/tools/scanpy commit 732303de9670376c88e7afb2f23336ee1433e97d
| author | iuc |
|---|---|
| date | Thu, 26 Mar 2026 12:48:53 +0000 |
| parents | fc222791d03c |
| children |
line wrap: on
line diff
--- a/plot.xml Wed Dec 03 10:01:11 2025 +0000 +++ b/plot.xml Thu Mar 26 12:48:53 2026 +0000 @@ -4,9 +4,13 @@ </macros> <expand macro="bio_tools"/> <expand macro="requirements"> - <requirement type="package" version="3.9.1">matplotlib</requirement> - <requirement type="package" version="0.13.2">seaborn</requirement> + <requirement type="package" version="2.3.3">pandas</requirement> <requirement type="package" version="0.11.6">python-igraph</requirement> + <requirement type="package" version="0.0.9">easy_vitessce</requirement> + <requirement type="package" version="0.51.0">starlette</requirement> + <requirement type="package" version="0.2.7">kerchunk</requirement> + <requirement type="package" version="0.9.21">anywidget</requirement> + <requirement type="package" version="0.40.0">uvicorn</requirement> </expand> <stdio> <regex match="... storing" source="stderr" level="warning"/> @@ -22,6 +26,10 @@ sc.settings.figdir = '.' +#if str($method.method) in ['pl.pca', 'pl.umap', 'pl.tsne', 'pl.diffmap', 'pl.violin', 'pl.dotplot', 'pl.heatmap'] and $method.interactive_plot: +@VITESSCE_ACTIVATE@ +#end if + #if str($method.method) == 'pl.scatter': #if str($method.type.type) == 'xy': @@ -86,7 +94,11 @@ #else if str($method.method) == 'pl.heatmap': @CMD_VAR_NAMES_HEADER_CHECK@ + #if $method.interactive_plot: +vitessce_widget = sc.pl.heatmap( + #else: sc.pl.heatmap( + #end if @CMD_PARAM_PLOT_INPUTS@ @CMD_PARAMS_INPUTS@ @CMD_PARAM_GENE_SYMBOLS@ @@ -96,7 +108,11 @@ #else if str($method.method) == 'pl.dotplot': @CMD_VAR_NAMES_HEADER_CHECK@ + #if $method.interactive_plot: +vitessce_widget = sc.pl.dotplot( + #else: sc.pl.dotplot( + #end if @CMD_PARAM_PLOT_INPUTS@ @CMD_PARAMS_INPUTS@ @CMD_PARAM_GENE_SYMBOLS@ @@ -114,7 +130,11 @@ @CMD_SHOW_NONE@) #else if str($method.method) == 'pl.violin': + #if $method.interactive_plot: +vitessce_widget = sc.pl.violin( + #else: sc.pl.violin( + #end if @CMD_PARAM_PLOT_INPUTS@ #if str($method.key_variables.type) == 'var_names': #set $key_list = adata.var_names @@ -220,7 +240,11 @@ @CMD_SHOW_NONE@) #else if str($method.method) == 'pl.pca': + #if $method.interactive_plot: +vitessce_widget = sc.pl.pca( + #else: sc.pl.pca( + #end if @CMD_PARAM_PLOT_INPUTS@ @CMD_PARAM_COLOR@ @CMD_PARAM_GENE_SYMBOLS@ @@ -264,7 +288,11 @@ @CMD_SHOW_NONE@) #else if str($method.method) == 'pl.tsne': + #if $method.interactive_plot: +vitessce_widget = sc.pl.tsne( + #else: sc.pl.tsne( + #end if @CMD_PARAM_PLOT_INPUTS@ @CMD_PARAM_COLOR@ @CMD_PARAM_GENE_SYMBOLS@ @@ -278,9 +306,12 @@ @CMD_SECTION_MATPLOTLIB_PYPLOT_SCATTER@ @CMD_PARAM_LAYER@ @CMD_SHOW_NONE@) - #else if str($method.method) == 'pl.umap': + #if $method.interactive_plot: +vitessce_widget = sc.pl.umap( + #else: sc.pl.umap( + #end if @CMD_PARAM_PLOT_INPUTS@ @CMD_PARAM_COLOR@ @CMD_PARAM_GENE_SYMBOLS@ @@ -296,7 +327,11 @@ @CMD_SHOW_NONE@) #else if str($method.method) == 'pl.diffmap': + #if $method.interactive_plot: +vitessce_widget = sc.pl.diffmap( + #else: sc.pl.diffmap( + #end if @CMD_PARAM_PLOT_INPUTS@ @CMD_PARAM_COLOR@ @CMD_PARAM_GENE_SYMBOLS@ @@ -350,8 +385,6 @@ hspace=$method.hspace, @CMD_SHOW_NONE@) - - #else if str($method.method) == 'pl.dpt_timeseries': sc.pl.dpt_timeseries( @CMD_PARAM_PLOT_INPUTS@ @@ -504,10 +537,14 @@ #end if -#if $advanced_common.output_anndata: +#if $advanced_common.output_anndata or (str($method.method) in ['pl.umap', 'pl.tsne', 'pl.diffmap', 'pl.violin', 'pl.dotplot', 'pl.heatmap'] and $method.interactive_plot): @CMD_ANNDATA_WRITE_OUTPUTS@ #end if +#if str($method.method) in ['pl.pca', 'pl.umap', 'pl.tsne', 'pl.diffmap', 'pl.violin', 'pl.dotplot', 'pl.heatmap'] and $method.interactive_plot: +@VITESSCE_CONFIG@ +#end if + ]]></configfile> </configfiles> <inputs> @@ -535,8 +572,6 @@ <option value="pl.diffmap">Embeddings: Scatter plot in Diffusion Map basis, using 'pl.diffmap'</option> <option value="pl.draw_graph">Embeddings: Scatter plot in graph-drawing basis, using 'pl.draw_graph'</option> <option value="pl.embedding_density">Embeddings: Plot the density of cells in an embedding (per condition), using 'pl.embedding_density'</option> - <!-- This function is commented out because it is not compatible with pandas version. If the issue is not resolved in the next update, this should be removed. --> - <!-- <option value="pl.dpt_groups_pseudotime">Branching trajectories and pseudotime, clustering: Plot groups and pseudotime, using 'pl.dpt_groups_pseudotime'</option> --> <option value="pl.dpt_timeseries">Branching trajectories and pseudotime, clustering: Heatmap of pseudotime series, using 'pl.dpt_timeseries'</option> <option value="pl.paga">Branching trajectories and pseudotime, clustering: Plot the abstracted graph through thresholding low-connectivity edges, using 'pl.paga'</option> <option value="pl.paga_compare">Branching trajectories and pseudotime, clustering: Scatter and PAGA graph side-by-side, using 'pl.paga_compare'</option> @@ -614,12 +649,14 @@ </when> <when value="pl.heatmap"> <expand macro="params_inputs"/> + <expand macro="param_interactive_plot"/> <expand macro="param_gene_symbols"/> <expand macro="params_plots"/> <expand macro="params_pl_heatmap"/> </when> <when value="pl.dotplot"> <expand macro="params_inputs"/> + <expand macro="param_interactive_plot"/> <expand macro="param_gene_symbols"/> <expand macro="params_plots"/> <expand macro="params_pl_dotplot"/> @@ -630,6 +667,7 @@ <expand macro="params_plots"/> </when> <when value="pl.violin"> + <expand macro="param_interactive_plot"/> <conditional name="key_variables"> <param name="type" type="select" label="Keys for accessing variables"> <option value="var_names" selected="true">All variables in '.var_names'</option> @@ -746,6 +784,7 @@ <expand macro="pl_figsize"/> </when> <when value="pl.pca"> + <expand macro="param_interactive_plot"/> <expand macro="param_color"/> <expand macro="param_gene_symbols"/> <expand macro="param_use_raw"/> @@ -777,6 +816,7 @@ <expand macro="section_matplotlib_pyplot_scatter"/> </when> <when value="pl.tsne"> + <expand macro="param_interactive_plot"/> <expand macro="param_color"/> <expand macro="param_gene_symbols"/> <expand macro="param_use_raw"/> @@ -790,6 +830,7 @@ <expand macro="param_layer"/> </when> <when value="pl.umap"> + <expand macro="param_interactive_plot"/> <expand macro="param_color"/> <expand macro="param_gene_symbols"/> <expand macro="param_use_raw"/> @@ -803,6 +844,7 @@ <expand macro="param_layer"/> </when> <when value="pl.diffmap"> + <expand macro="param_interactive_plot"/> <expand macro="param_color"/> <expand macro="param_gene_symbols"/> <expand macro="param_use_raw"/> @@ -850,10 +892,6 @@ <expand macro="param_wspace"/> <expand macro="param_hspace"/> </when> - <!-- This function is commented out because it is not compatible with pandas version. If the issue is not resolved in the next update, this should be removed. --> - <!-- <when value="pl.dpt_groups_pseudotime"> - <expand macro="param_color_map"/> - </when> --> <when value="pl.dpt_timeseries"> <conditional name="heatmap"> <param argument="as_heatmap" type="select" label="Plot the timeseries as heatmap?"> @@ -984,21 +1022,21 @@ </inputs> <outputs> <data name="out_png" format="png" from_work_dir="*.png" label="PNG plot from ${tool.name} (${method.method}) on ${on_string}"> - <filter>format == 'png' and method['method'] != 'pl.rank_genes_groups_violin'</filter> + <filter>format == 'png' and method['method'] != 'pl.rank_genes_groups_violin' and not (method['method'] in ['pl.pca', 'pl.umap', 'pl.tsne', 'pl.diffmap', 'pl.violin', 'pl.dotplot', 'pl.heatmap'] and method['interactive_plot'])</filter> </data> <collection name="collection_png" type="list" label="PNG plots from ${tool.name} (${method.method}) on ${on_string}"> <discover_datasets pattern="rank_genes_groups_(?P<designation>.*).png" format="png"/> <filter>format == 'png' and method['method'] == 'pl.rank_genes_groups_violin'</filter> </collection> <data name="out_pdf" format="pdf" from_work_dir="*.pdf" label="PDF plot from ${tool.name} (${method.method}) on ${on_string}"> - <filter>format == 'pdf' and method['method'] != 'pl.rank_genes_groups_violin'</filter> + <filter>format == 'pdf' and method['method'] != 'pl.rank_genes_groups_violin' and not (method['method'] in ['pl.pca', 'pl.umap', 'pl.tsne', 'pl.diffmap', 'pl.violin', 'pl.dotplot', 'pl.heatmap'] and method['interactive_plot'])</filter> </data> <collection name="collection_pdf" type="list" label="PDF plots from ${tool.name} (${method.method}) on ${on_string}"> <discover_datasets pattern="rank_genes_groups_(?P<designation>.*).pdf" format="pdf"/> <filter>format == 'pdf' and method['method'] == 'pl.rank_genes_groups_violin'</filter> </collection> <data name="out_svg" format="svg" from_work_dir="*.svg" label="SVG plot from ${tool.name} (${method.method}) on ${on_string}"> - <filter>format == 'svg' and method['method'] != pl.rank_genes_groups_violin</filter> + <filter>format == 'svg' and method['method'] != 'pl.rank_genes_groups_violin' and not (method['method'] in ['pl.pca', 'pl.umap', 'pl.tsne', 'pl.diffmap', 'pl.violin', 'pl.dotplot', 'pl.heatmap'] and method['interactive_plot'])</filter> </data> <collection name="collection_svg" type="list" label="SVG plots from ${tool.name} (${method.method}) on ${on_string}"> <discover_datasets pattern="rank_genes_groups_(?P<designation>.*).svg" format="svg"/> @@ -1008,7 +1046,13 @@ <filter>advanced_common['show_log']</filter> </data> <data name="anndata_out" format="h5ad" from_work_dir="anndata.h5ad" label="${tool.name} (${method.method}) on ${on_string}: Annotated data matrix"> - <filter>advanced_common['output_anndata']</filter> + <filter>advanced_common['output_anndata'] or (method['method'] in ['pl.pca', 'pl.umap', 'pl.tsne', 'pl.diffmap', 'pl.violin', 'pl.dotplot', 'pl.heatmap'] and method['interactive_plot'])</filter> + </data> + <data name="vitessce_config" format="vitessce.json" from_work_dir="config.json" label="${tool.name} (${method.method}) on ${on_string}: Vitessce interactive visualization"> + <filter>method['method'] in ['pl.pca', 'pl.umap', 'pl.tsne', 'pl.diffmap', 'pl.violin', 'pl.dotplot', 'pl.heatmap'] and method['interactive_plot']</filter> + </data> + <data name="anndata_config" format="json" from_work_dir="anndata.ref.json" label="${tool.name} (${method.method}) on ${on_string}: Anndata configuration"> + <filter>method['method'] in ['pl.pca', 'pl.umap', 'pl.tsne', 'pl.diffmap', 'pl.violin', 'pl.dotplot', 'pl.heatmap'] and method['interactive_plot']</filter> </data> </outputs> <tests> @@ -1055,14 +1099,14 @@ <!-- test 2 --> <test expect_num_outputs="2"> - <param name="adata" value="krumsiek11.h5ad"/> + <param name="adata" value="pbmc68k_reduced.h5ad"/> <param name="format" value="png"/> <conditional name="method"> <param name="method" value="pl.scatter"/> <conditional name="type"> <param name="type" value="xy"/> - <param name="x" value="EKLF"/> - <param name="y" value="Cebpa"/> + <param name="x" value="FCGRT"/> + <param name="y" value="SAT1"/> </conditional> <section name="plot"> <param name="legend_fontsize" value="1"/> @@ -1078,8 +1122,8 @@ <output name="hidden_output"> <assert_contents> <has_text_matching expression="sc.pl.scatter"/> - <has_text_matching expression="x_field='EKLF'"/> - <has_text_matching expression="y_field='Cebpa'"/> + <has_text_matching expression="x_field='FCGRT'"/> + <has_text_matching expression="y_field='SAT1'"/> <has_text_matching expression="use_raw=None"/> <has_text_matching expression="sort_order=True"/> <has_text_matching expression="projection='2d'"/> @@ -1090,7 +1134,7 @@ <has_text_matching expression="title='A title'"/> </assert_contents> </output> - <output name="out_png" file="pl.scatter.krumsiek11.png" ftype="png" compare="image_diff"/> + <output name="out_png" file="pl.scatter.pbmc68k_reduced.png" ftype="png" compare="image_diff"/> </test> <!-- test 3 --> @@ -1128,7 +1172,7 @@ <has_text_matching expression="title='A title'"/> </assert_contents> </output> - <output name="out_png" file="pl.scatter.pbmc68k_reduced.png" ftype="png" compare="image_diff"/> + <output name="out_png" file="pl.scatter.pbmc68k_reduced_n_genes_n_counts.png" ftype="png" compare="image_diff"/> </test> <!-- test 4 --> @@ -1908,28 +1952,7 @@ <output name="out_png" file="pl.embedding_density.pbmc68k_reduced.png" ftype="png" compare="image_diff"/> </test> - <!-- This function is commented out because it is not compatible with pandas version. If the issue is not resolved in the next update, this should be removed. --> <!-- test 27 --> - <!-- <test expect_num_outputs="2"> - <param name="adata" value="tl.dpt.diffmap.neighbors_gauss_braycurtis.recipe_weinreb17.paul15_subsample.h5ad"/> - <param name="format" value="png"/> - <conditional name="method"> - <param name="method" value="pl.dpt_groups_pseudotime"/> - - </conditional> - <section name="advanced_common"> - <param name="show_log" value="true"/> - </section> - <output name="hidden_output"> - <assert_contents> - <has_text_matching expression="sc.pl.dpt_groups_pseudotime"/> - <has_text_matching expression="color_map='viridis'"/> - </assert_contents> - </output> - <output name="out_png" file="pl.dpt_groups_pseudotime.dpt.diffmap.neighbors_gauss_braycurtis.recipe_weinreb17.paul15_subsample.png" ftype="png" compare="image_diff"/> - </test> --> - - <!-- test 28 --> <test expect_num_outputs="2"> <param name="adata" value="tl.dpt.diffmap.neighbors_gauss_braycurtis.recipe_weinreb17.paul15_subsample.h5ad"/> <param name="format" value="png"/> @@ -1948,7 +1971,7 @@ <output name="out_png" file="pl.dpt_timeseries.dpt.diffmap.neighbors_gauss_braycurtis.recipe_weinreb17.paul15_subsample.png" ftype="png" compare="image_diff"/> </test> - <!-- test 29 --> + <!-- test 28 --> <test expect_num_outputs="2"> <param name="adata" value="tl.paga.neighbors.paul15_gauss_braycurtis.h5ad"/> <param name="format" value="png"/> @@ -1971,7 +1994,7 @@ </output> </test> - <!-- test 30 --> + <!-- test 29 --> <test expect_num_outputs="1"> <param name="adata" value="tl.paga.neighbors.paul15_gauss_braycurtis.h5ad"/> <param name="format" value="png"/> @@ -1986,12 +2009,12 @@ <output name="out_png" file="pl.paga_compare.paul15_gauss_braycurtis.png" ftype="png" compare="image_diff"/> </test> - <!-- test 31 --> + <!-- test 30 --> <!-- <test expect_num_outputs="2"> test pl.paga_path </test> --> - <!-- test 32 --> + <!-- test 30 --> <test expect_num_outputs="2"> <param name="adata" value="tl.rank_genes_groups.krumsiek11.h5ad"/> <param name="format" value="png"/> @@ -2013,7 +2036,7 @@ <output name="out_png" file="pl.rank_genes_groups.rank_genes_groups.krumsiek11.png" ftype="png" compare="image_diff"/> </test> - <!-- test 33 --> + <!-- test 31 --> <test expect_num_outputs="2"> <param name="adata" value="tl.rank_genes_groups.krumsiek11.h5ad"/> <param name="format" value="png"/> @@ -2048,7 +2071,7 @@ </output_collection> </test> - <!-- test 34 --> + <!-- test 32 --> <test expect_num_outputs="2"> <param name="adata" value="tl.rank_genes_groups.krumsiek11.h5ad"/> <param name="format" value="png"/> @@ -2090,7 +2113,7 @@ <output name="out_png" file="pl.rank_genes_groups_stacked_violin.rank_genes_groups.krumsiek11.png" ftype="png" compare="image_diff" eps="1.5"/> </test> - <!-- test 35 --> + <!-- test 33 --> <test expect_num_outputs="2"> <param name="adata" value="tl.rank_genes_groups.krumsiek11.h5ad"/> <param name="format" value="png"/> @@ -2116,7 +2139,7 @@ <output name="out_png" file="pl.rank_genes_groups_heatmap.rank_genes_groups.krumsiek11.png" ftype="png" compare="image_diff"/> </test> - <!-- test 36 --> + <!-- test 34 --> <test expect_num_outputs="2"> <param name="adata" value="tl.rank_genes_groups.krumsiek11.h5ad"/> <param name="format" value="png"/> @@ -2139,7 +2162,7 @@ <output name="out_png" file="pl.rank_genes_groups_dotplot.rank_genes_groups.krumsiek11.png" ftype="png" compare="image_diff"/> </test> - <!-- test 37 --> + <!-- test 35 --> <test expect_num_outputs="2"> <param name="adata" value="tl.rank_genes_groups.krumsiek11.h5ad"/> <param name="format" value="png"/> @@ -2164,7 +2187,7 @@ <output name="out_png" file="pl.rank_genes_groups_matrixplot.rank_genes_groups.krumsiek11.png" ftype="png" compare="image_diff"/> </test> - <!-- test 38 pl.rank_genes_groups_dotplot with marker list--> + <!-- test 36 pl.rank_genes_groups_dotplot with marker list--> <test expect_num_outputs="2"> <param name="adata" value="cosg.rank_genes_groups.newton-cg.pbmc68k_highly_reduced_1.h5ad" /> <param name="format" value="png"/> @@ -2189,7 +2212,7 @@ <output name="out_png" file="pl.rank_genes_groups.newton-cg.pbmc68k_highly_reduced_marker_1.png" ftype="png" compare="image_diff"/> </test> - <!-- test 39: pl.rank_genes_groups_dotplot with marker list --> + <!-- test 37: pl.rank_genes_groups_dotplot with marker list --> <test expect_num_outputs="2"> <param name="adata" value="cosg.rank_genes_groups.newton-cg.pbmc68k_highly_reduced_1.h5ad" /> <param name="format" value="png"/> @@ -2214,7 +2237,7 @@ <output name="out_png" file="pl.rank_genes_groups.newton-cg.pbmc68k_highly_reduced_marker_filtered_1.png" ftype="png" compare="image_diff"/> </test> - <!-- test 40 --> + <!-- test 38 --> <test expect_num_outputs="2"> <param name="adata" value="cosg.rank_genes_groups.newton-cg.pbmc68k_highly_reduced_1.h5ad" /> <param name="format" value="png"/> @@ -2231,6 +2254,112 @@ </output> <output name="out_png" file="pl.rank_genes_groups_tracksplot.newton-cg.pbmc68k_highly_reduced_marker_filtered_1.png" ftype="png" compare="image_diff"/> </test> + + <!-- test 39 --> + <test expect_num_outputs="4"> + <param name="adata" value="tl.umap.neighbors_umap_euclidean.recipe_weinreb17.paul15_subsample.h5ad"/> + <param name="format" value="png"/> + <conditional name="method"> + <param name="method" value="pl.umap"/> + <param name="interactive_plot" value="true"/> + <param name="color" value="paul15_clusters"/> + <param name="gene_symbols" value="symbol"/> + <conditional name="edges"> + <param name="edges" value="True"/> + </conditional> + <section name="plot"> + <param name="legend_fontsize" value="1"/> + <param name="legend_fontweight" value="normal"/> + <param name="size" value="1"/> + </section> + </conditional> + <section name="advanced_common"> + <param name="show_log" value="true"/> + </section> + <output name="hidden_output"> + <assert_contents> + <has_text_matching expression="sc.pl.umap"/> + <has_text_matching expression="color=\['paul15_clusters'\]"/> + <has_text_matching expression="use_raw=False"/> + <has_text_matching expression="edges=True"/> + <has_text_matching expression="edges_width=0.1"/> + <has_text_matching expression="arrows=False"/> + <has_text_matching expression="sort_order=True"/> + <has_text_matching expression="projection='2d'"/> + <has_text_matching expression="legend_loc='right margin'"/> + <has_text_matching expression="legend_fontsize=1"/> + <has_text_matching expression="legend_fontweight='normal'"/> + <has_text_matching expression="size=1.0"/> + <has_text_matching expression="frameon=True"/> + <has_text_matching expression="ncols=4"/> + <has_text_matching expression="wspace=0.1"/> + <has_text_matching expression="hspace=0.25"/> + <has_text_matching expression="gene_symbols='symbol'"/> + </assert_contents> + </output> + <output name="vitessce_config"> + <assert_contents> + <has_n_lines n="93" /> + <has_text_matching expression="sc.pl.embedding for UMAP"/> + <has_text_matching expression="anndata.h5ad"/> + <has_text_matching expression="scatterplot"/> + </assert_contents> + </output> + <output name="anndata_config"> + <assert_contents> + <has_n_lines n="1" /> + <has_size value="29779" delta="100" /> + <has_text_matching expression="\\"zarr_format\\":2"/> + </assert_contents> + </output> + </test> + + <!-- test 40 --> + <test expect_num_outputs="4"> + <param name="adata" value="pp.filter_genes_dispersion.krumsiek11-seurat.h5ad"/> + <param name="format" value="png"/> + <conditional name="method"> + <param name="method" value="pl.dotplot"/> + <param name="interactive_plot" value="true"/> + <conditional name="var_names"> + <param name="type" value="custom"/> + <param name="var_names" value="Fog1,EKLF,SCL"/> + </conditional> + <param name="gene_symbols" value="symbol"/> + <param name="groupby" value="cell_type"/> + <param name="dendrogram" value="True"/> + <param name="color_map" value="YlGnBu"/> + </conditional> + <section name="advanced_common"> + <param name="show_log" value="true"/> + </section> + <output name="hidden_output"> + <assert_contents> + <has_text_matching expression="sc.pl.dotplot"/> + <has_text_matching expression="gene_symbols='symbol'"/> + <has_text_matching expression="var_names=\['Fog1', 'EKLF', 'SCL'\]"/> + <has_text_matching expression="groupby='cell_type'"/> + <has_text_matching expression="log=False"/> + <has_text_matching expression="use_raw=None"/> + <has_text_matching expression="num_categories=7"/> + <has_text_matching expression="dendrogram=True"/> + </assert_contents> + </output> + <output name="vitessce_config"> + <assert_contents> + <has_n_lines n="98" /> + <has_text_matching expression="sc.pl.dotplot"/> + <has_text_matching expression="anndata.h5ad"/> + </assert_contents> + </output> + <output name="anndata_config"> + <assert_contents> + <has_n_lines n="1" /> + <has_size value="12217" delta="100" /> + <has_text_matching expression="\\"zarr_format\\":2"/> + </assert_contents> + </output> + </test> </tests> <help><