changeset 11:95777145cb92 draft

planemo upload for repository https://github.com/galaxyproject/tools-iuc/tree/master/tools/scanpy/ commit aba2a85f5da6e1094f382d1f0d94c4b8f2544a7d
author iuc
date Wed, 08 Nov 2023 14:47:20 +0000
parents aa0c474463c2
children 9b0cdb8cf6be
files macros.xml plot.xml test-data/blobs.h5ad test-data/krumsiek11.h5ad test-data/pbmc68k_reduced.h5ad test-data/pl.clustermap.krumsiek11.png test-data/pl.diffmap.neighbors_gauss_braycurtis.recipe_weinreb17.paul15_subsample.png test-data/pl.dotplot.krumsiek11.png test-data/pl.dpt_groups_pseudotime.dpt.diffmap.neighbors_gauss_braycurtis.recipe_weinreb17.paul15_subsample.png test-data/pl.dpt_timeseries.dpt.diffmap.neighbors_gauss_braycurtis.recipe_weinreb17.paul15_subsample.png test-data/pl.draw_graph.png test-data/pl.embedding_density.pbmc68k_reduced.png test-data/pl.heatmap.krumsiek11.png test-data/pl.highest_expr_genes.filter_genes_dispersion.krumsiek11-seurat.png test-data/pl.highly_variable_genes.seurat.blobs.png test-data/pl.matrixplot.krumsiek11.png test-data/pl.paga.paul15_gauss_braycurtis.png test-data/pl.paga_compare.paul15_gauss_braycurtis.png test-data/pl.pca.pbmc68k_reduced.CD3D_CD79A_components_2d.pdf test-data/pl.pca_loadings.pp.pca.krumsiek11.png test-data/pl.pca_overview.pp.pca.krumsiek11.png test-data/pl.pca_variance_ratio.pp.pca.krumsiek11.png test-data/pl.rank_genes_groups.rank_genes_groups.krumsiek11.png test-data/pl.rank_genes_groups_dotplot.rank_genes_groups.krumsiek11.png test-data/pl.rank_genes_groups_heatmap.rank_genes_groups.krumsiek11.png test-data/pl.rank_genes_groups_matrixplot.rank_genes_groups.krumsiek11.png test-data/pl.rank_genes_groups_stacked_violin.rank_genes_groups.krumsiek11.png test-data/pl.rank_genes_groups_violin.Ery.png test-data/pl.rank_genes_groups_violin.Mk.png test-data/pl.rank_genes_groups_violin.Mo.png test-data/pl.rank_genes_groups_violin.Neu.png test-data/pl.rank_genes_groups_violin.progenitor.png test-data/pl.scatter.krumsiek11.png test-data/pl.scatter.pbmc68k_reduced.png test-data/pl.scatter.umap.pbmc68k_reduced.png test-data/pl.stacked_violin.krumsiek11.png test-data/pl.tsne.krumsiek11.png test-data/pl.umap.neighbors_umap_euclidean.recipe_weinreb17.paul15_subsample.png test-data/pl.violin.pbmc68k_reduced_custom.png test-data/pp.calculate_qc_metrics.sparce_csr_matrix.h5ad test-data/pp.combat.blobs.h5ad test-data/pp.downsample_counts.random-randint.h5ad test-data/pp.filter_cells.krumsiek11-max_genes.h5ad test-data/pp.filter_cells.krumsiek11-min_counts.h5ad test-data/pp.filter_genes.krumsiek11-min_counts.h5ad test-data/pp.highly_variable_genes.krumsiek11-cell_ranger.h5ad test-data/pp.highly_variable_genes.seurat.blobs.h5ad test-data/pp.log1p.krumsiek11.h5ad test-data/pp.neighbors_gauss_braycurtis.recipe_weinreb17.paul15_subsample.h5ad test-data/pp.neighbors_umap_euclidean.recipe_weinreb17.paul15_subsample.h5ad test-data/pp.normalize_total.krumsiek11.h5ad test-data/pp.pca.krumsiek11.h5ad test-data/pp.pca.krumsiek11_chunk.h5ad test-data/pp.recipe_seurat.recipe_zheng17.h5ad test-data/pp.recipe_weinreb17.paul15_subsample.h5ad test-data/pp.recipe_weinreb17.paul15_subsample.updated.h5ad test-data/pp.recipe_zheng17.random-randint.h5ad test-data/pp.regress_out.krumsiek11.h5ad test-data/pp.scale.krumsiek11.h5ad test-data/pp.scale_max_value.krumsiek11.h5ad test-data/pp.sqrt.krumsiek11.h5ad test-data/pp.subsample.krumsiek11_fraction.h5ad test-data/pp.subsample.krumsiek11_n_obs.h5ad test-data/sparce_csr_matrix.h5ad test-data/tl.diffmap.neighbors_gauss_braycurtis.recipe_weinreb17.paul15_subsample.h5ad test-data/tl.dpt.diffmap.neighbors_gauss_braycurtis.recipe_weinreb17.paul15_subsample.h5ad test-data/tl.draw_graph.pp.neighbors_umap_euclidean.recipe_weinreb17.paul15_subsample.h5ad test-data/tl.embedding_density.umap.neighbors_umap_euclidean.recipe_weinreb17.paul15_subsample.h5ad test-data/tl.embedding_density.umap.pbmc68k_reduced.h5ad test-data/tl.leiden.neighbors_gauss_braycurtis.recipe_weinreb17.paul15_subsample.h5ad test-data/tl.louvain.neighbors_gauss_braycurtis.recipe_weinreb17.paul15_subsample.h5ad test-data/tl.paga.neighbors.paul15_gauss_braycurtis.h5ad test-data/tl.paga.neighbors_gauss_braycurtis.recipe_weinreb17.paul15_subsample.h5ad test-data/tl.pca.krumsiek11.h5ad test-data/tl.rank_genes_groups.krumsiek11.h5ad test-data/tl.rank_genes_groups.liblinear.krumsiek11.h5ad test-data/tl.rank_genes_groups.newton-cg.pbmc68k_reduced.h5ad test-data/tl.score_genes.krumsiek11.h5ad test-data/tl.score_genes_cell_cycle.krumsiek11.h5ad test-data/tl.tsne.krumsiek11.h5ad test-data/tl.umap.neighbors_umap_euclidean.recipe_weinreb17.paul15_subsample.h5ad
diffstat 81 files changed, 318 insertions(+), 132 deletions(-) [+]
line wrap: on
line diff
--- a/macros.xml	Wed Sep 22 21:13:39 2021 +0000
+++ b/macros.xml	Wed Nov 08 14:47:20 2023 +0000
@@ -1,12 +1,16 @@
 <macros>
-    <token name="@version@">1.7.1</token>
-    <token name="@profile@">19.01</token>
+    <token name="@version@">1.9.6</token>
+    <token name="@profile@">22.05</token>
     <token name="@galaxy_version@"><![CDATA[@version@+galaxy0]]></token>
     <xml name="requirements">
         <requirements>
             <requirement type="package" version="@version@">scanpy</requirement>
-            <requirement type="package" version="2.0.17">loompy</requirement>
-            <requirement type="package" version="0.8.3">leidenalg</requirement>
+            <requirement type="package" version="3.0.6">loompy</requirement>
+            <requirement type="package" version="0.10.1">leidenalg</requirement>
+            <requirement type="package" version="0.8.1">louvain</requirement>
+            <requirement type="package" version="1.5.3">pandas</requirement>
+            <requirement type="package" version="3.7">matplotlib</requirement>
+            <requirement type="package" version="0.12.2">seaborn</requirement>
             <yield />
         </requirements>
     </xml>
@@ -15,9 +19,15 @@
             <xref type="bio.tools">scanpy</xref>
         </xrefs>
     </xml>
+    <xml name="creators">
+        <creator>
+            <organization name="European Galaxy Team" url="https://galaxyproject.org/eu/" />
+        </creator>
+    </xml>
     <xml name="citations">
         <citations>
             <citation type="doi">10.1186/s13059-017-1382-0</citation>
+            <citation type="doi">10.1093/gigascience/giaa102</citation>
         </citations>
     </xml>
     <xml name="version_command">
@@ -56,7 +66,7 @@
         <param name="adata" type="data" format="h5ad" label="Annotated data matrix"/>
     </xml>
     <token name="@CMD_read_inputs@"><![CDATA[
-adata = sc.read('anndata.h5ad')
+adata = sc.read_h5ad('anndata.h5ad')
 ]]>
     </token>
     <xml name="inputs_common_advanced">
@@ -66,12 +76,12 @@
     </xml>
     <xml name="anndata_outputs">
         <data name="anndata_out" format="h5ad" from_work_dir="anndata.h5ad" label="${tool.name} (${method.method}) on ${on_string}: Annotated data matrix"/>
-        <data name="hidden_output" format="txt" label="Log file" >
+            <data name="hidden_output" format="txt" label="Log file" >
             <filter>advanced_common['show_log']</filter>
         </data>
     </xml>
     <token name="@CMD_anndata_write_outputs@"><![CDATA[
-adata.write('anndata.h5ad')
+adata.write_h5ad('anndata.h5ad')
 with open('anndata_info.txt','w', encoding='utf-8') as ainfo:
     print(adata, file=ainfo)
 ]]>
@@ -875,7 +885,7 @@
     </xml>
     <xml name="param_color_map">
         <param argument="color_map" type="select" label="Color map to use for continous variables" help="">
-            <option value="None">Default</option>
+            <option value="" >Default</option>
             <expand macro="matplotlib_pyplot_colormap"/>
         </param>
     </xml>
@@ -979,7 +989,7 @@
     @CMD_param_legend_fontsize@
     legend_fontweight='$method.plot.legend_fontweight',
     @CMD_param_size@
-    #if str($method.plot.color_map) != 'None'
+    #if str($method.plot.color_map) != ''
     color_map='$method.plot.color_map',
     #end if
     #if str($method.plot.palette) != ''
--- a/plot.xml	Wed Sep 22 21:13:39 2021 +0000
+++ b/plot.xml	Wed Nov 08 14:47:20 2023 +0000
@@ -1,9 +1,9 @@
-<tool id="scanpy_plot" name="Plot" version="1.7.1+galaxy1" profile="@profile@">
+<tool id="scanpy_plot" name="Plot" version="@galaxy_version@" profile="@profile@">
     <description> with scanpy</description>
-    <expand macro="bio_tools"/>
     <macros>
         <import>macros.xml</import>
     </macros>
+    <expand macro="bio_tools"/>
     <expand macro="requirements"/>
     <stdio>
         <regex match="... storing" source="stderr" level="warning"/>
@@ -21,11 +21,32 @@
 
 #if $method.method == 'pl.scatter'
 
+#if $method.type.type == 'xy':
+x_field='$method.type.x'
+y_field='$method.type.y'
+
+#if $method.type.log:
+if x_field in adata.obs or x_field in adata.var:
+    if x_field in adata.obs:
+        adata.obs[f"log_{x_field}"] = np.log10(adata.obs[x_field])
+    elif x_field in adata.var:
+        adata.var[f"log_{x_field}"] = np.log10(adata.var[x_field])
+    x_field=f"log_{x_field}"
+
+if y_field in adata.obs or y_field in adata.var:
+    if y_field in adata.obs:
+        adata.obs[f"log_{y_field}"] = np.log10(adata.obs[y_field])
+    elif y_field in adata.var:
+        adata.var[f"log_{y_field}"] = np.log10(adata.var[y_field])
+    y_field=f"log_{y_field}"
+#end if
+#end if
+
 sc.pl.scatter(
     @CMD_param_plot_inputs@
-    #if $method.type.type == 'xy'
-    x='$method.type.x',
-    y='$method.type.y',
+    #if $method.type.type == 'xy':
+    x=x_field,
+    y=y_field,
     #if str($method.type.color) != ''
     color='$method.type.color',
 	  #end if
@@ -265,6 +286,29 @@
     @CMD_pl_attribute_section@
     @CMD_params_matplotlib_pyplot_scatter@)
 
+#else if $method.method == 'pl.embedding_density'
+sc.pl.embedding_density(
+    @CMD_param_plot_inputs@
+    basis='$method.basis',
+    #if str($method.key) != ''
+    key='$method.key',
+    #end if
+    #if str($method.groupby) != ''
+    groupby='$method.groupby',
+    #end if
+    #if str($method.group) != ''
+    #set $group = ([x.strip() for x in str($method.group).split(',')])
+    group=$group,
+    #end if
+    #if str($method.color_map) != ''
+    color_map='$method.color_map',
+    #end if
+    bg_dotsize=$method.bg_dotsize,
+    fg_dotsize=$method.fg_dotsize,
+    ncols=$method.ncols,
+    wspace=$method.wspace,
+    hspace=$method.hspace)
+
 #else if $method.method == 'pl.dpt_groups_pseudotime'
 sc.pl.dpt_groups_pseudotime(
     @CMD_param_plot_inputs@
@@ -305,7 +349,7 @@
         #set $annotations=([x.strip() for x in str($method.annotations).split(',')])
     annotations=$annotations,
     #end if
-    #if str($method.color_map) != ''
+    #if str($method.color_map) != 'None'
     color_map='$method.color_map',
     #end if
     n_avg=$method.n_avg,
@@ -358,6 +402,9 @@
 sc.pl.rank_genes_groups_dotplot(
     @CMD_param_plot_inputs@
     @CMD_pl_rank_genes_groups_ext@
+    #if str($method.gene_symbols) != ''
+    gene_symbols='$method.gene_symbols',
+    #end if
     @CMD_params_plots@
     @CMD_pl_dotplot@)
 
@@ -366,6 +413,9 @@
     @CMD_param_plot_inputs@
     @CMD_pl_rank_genes_groups_ext@
     @CMD_params_plots@
+    #if str($method.gene_symbols) != ''
+    gene_symbols='$method.gene_symbols',
+    #end if
     @CMD_pl_heatmap@)
 
 #else if $method.method == 'pl.rank_genes_groups_matrixplot'
@@ -373,6 +423,9 @@
     @CMD_param_plot_inputs@
     @CMD_pl_rank_genes_groups_ext@
     @CMD_params_plots@
+    #if str($method.gene_symbols) != ''
+    gene_symbols='$method.gene_symbols',
+    #end if
     @CMD_pl_matrixplot@)
 
 #else if $method.method == 'pl.rank_genes_groups_stacked_violin'
@@ -380,6 +433,9 @@
     @CMD_param_plot_inputs@
     @CMD_pl_rank_genes_groups_ext@
     @CMD_params_plots@
+    #if str($method.gene_symbols) != ''
+    gene_symbols='$method.gene_symbols',
+    #end if
     @CMD_pl_stacked_violin@)
 
 #end if
@@ -397,7 +453,6 @@
                 <option value="pl.stacked_violin">Generic: Stacked violin plots, using 'pl.stacked_violin'</option>
                 <option value="pl.matrixplot">Generic: Heatmap of the mean expression values per cluster, using 'pl.matrixplot'</option>
                 <option value="pl.clustermap">Generic: Hierarchically-clustered heatmap, using 'pl.clustermap'</option>
-                <!--<option value="pl.ranking">Generic: </option>!-->
                 <option value="pl.highest_expr_genes">Preprocessing: Plot the fraction of counts assigned to each gene over all cells, using 'pl.highest_expr_genes'</option>
                 <!--<option value="pl.filter_genes_dispersion">Preprocessing: Plot dispersions versus means for genes, using 'pl.filter_genes_dispersion'</option>-->
                 <option value="pl.highly_variable_genes">Preprocessing: Plot dispersions versus means for genes, using 'pl.highly_variable_genes'</option>
@@ -409,15 +464,14 @@
                 <option value="pl.umap">Embeddings: Scatter plot in UMAP basis, using 'pl.umap'</option>
                 <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>
                 <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>
                 <option value="pl.paga_path">Branching trajectories and pseudotime, clustering: Gene expression and annotation changes along paths, using 'pl.paga_path'</option>
                 <option value="pl.rank_genes_groups">Marker genes: Plot ranking of genes using dotplot plot, using 'pl.rank_genes_groups'</option>
-                <!-- doesn't currenty work: https://github.com/galaxyproject/tools-iuc/pull/3485#issuecomment-800055967
                 <option value="pl.rank_genes_groups_violin">Marker genes: Plot ranking of genes as violin plot, using 'pl.rank_genes_groups_violin'</option>
-                -->
                 <option value="pl.rank_genes_groups_dotplot">Marker genes: Plot ranking of genes as dotplot plot, using 'pl.rank_genes_groups_dotplot'</option>
                 <option value="pl.rank_genes_groups_heatmap">Marker genes: Plot ranking of genes as heatmap plot, using 'pl.rank_genes_groups_heatmap'</option>
                 <option value="pl.rank_genes_groups_matrixplot">Marker genes: Plot ranking of genes as matrixplot plot, using 'pl.rank_genes_groups_matrixplot'</option>
@@ -436,6 +490,7 @@
                         <param argument="y" type="text" value="" label="y coordinate" help="Index or key from either '.obs' or '.var'">
                             <expand macro="sanitize_query" />
                         </param>
+                        <expand macro="param_log"/>
                         <param argument="color" type="text" value="" label="Color by" help="Color points by single variable in `.obs` or `.var`">
                             <expand macro="sanitize_query" />
                         </param>
@@ -666,6 +721,27 @@
                 <expand macro="pl_attribute_section"/>
                 <expand macro="section_matplotlib_pyplot_scatter"/>
             </when>
+            <when value="pl.embedding_density">
+                <param argument="basis" type="text" value="umap" label="The embedding over which the density was calculated." help="This embedded representation should be found in adata.obsm['X_[basis]']">
+                    <expand macro="sanitize_query" />
+                </param>
+                <param argument="key" type="text" optional="true" value="" label="Name of the .obs covariate that contains the density estimates" help="Alternatively, pass _groupby_.">
+                    <expand macro="sanitize_query" />
+                </param>
+                <param argument="groupby" type="text" optional="true" value="" label="Name of the condition used in tl.embedding_density" help="Alternatively, pass _key_.">
+                    <expand macro="sanitize_query" />
+                </param>
+                <param argument="group" type="text" optional="all" value="" label="The category in the categorical observation annotation to be plotted" 
+                    help="For example, 'G1' in the cell cycle 'phase' covariate. If multiple categories want to be plotted use a comma separated list">
+                    <expand macro="sanitize_query" />
+                </param>
+                <expand macro="param_color_map"/>
+                <param argument="bg_dotsize" type="integer" min="0" value="80" label="Dot size for background data points not in the group"/>
+                <param argument="fg_dotsize" type="integer" min="0" value="180" label="Dot size for foreground data points in the group"/>
+                <expand macro="param_ncols"/>
+                <expand macro="param_wspace"/>
+                <expand macro="param_hspace"/>
+            </when>
             <when value="pl.dpt_groups_pseudotime">
                 <expand macro="param_color_map"/>
             </when>
@@ -730,7 +806,7 @@
                     </when>
                     <when value="gene_names">
                         <param argument="gene_names" type="text" value="" label="List of genes to plot" help="A list of comma-separated names">
-                                <expand macro="sanitize_query" />
+                            <expand macro="sanitize_query" />
                         </param>
                     </when>
                 </conditional>
@@ -745,45 +821,49 @@
             <when value="pl.rank_genes_groups_dotplot">
                 <expand macro="pl_rank_genes_groups_ext"/>
                 <expand macro="params_plots"/>
+                <expand macro="gene_symbols"/>
                 <expand macro="pl_dotplot"/>
             </when>
             <when value="pl.rank_genes_groups_heatmap">
                 <expand macro="pl_rank_genes_groups_ext"/>
                 <expand macro="params_plots"/>
+                <expand macro="gene_symbols"/>
                 <expand macro="pl_heatmap"/>
             </when>
             <when value="pl.rank_genes_groups_matrixplot">
                 <expand macro="pl_rank_genes_groups_ext"/>
                 <expand macro="params_plots"/>
+                <expand macro="gene_symbols"/>
                 <expand macro="pl_matrixplot"/>
             </when>
             <when value="pl.rank_genes_groups_stacked_violin">
                 <expand macro="pl_rank_genes_groups_ext"/>
                 <expand macro="params_plots"/>
+                <expand macro="gene_symbols"/>
                 <expand macro="pl_stacked_violin"/>
             </when>
         </conditional>
         <expand macro="inputs_common_advanced"/>
     </inputs>
     <outputs>
-        <data name="out_png" format="png" from_work_dir="*.png" label="${tool.name} (${method.method}) on ${on_string}">
+        <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>
         </data>
-        <collection name="collection_png" type="list" label="${tool.name} (${method.method}) on ${on_string}">
+        <collection name="collection_png" type="list" label="PNG plots from ${tool.name} (${method.method}) on ${on_string}">
             <discover_datasets pattern="rank_genes_groups_(?P&lt;designation&gt;.*).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="${tool.name} (${method.method}) on ${on_string}">
-            <filter>format == 'pdf' and method['method'] != pl.rank_genes_groups_violin</filter>
+        <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>
         </data>
-        <collection name="collection_pdf" type="list" label="${tool.name} (${method.method}) on ${on_string}">
+        <collection name="collection_pdf" type="list" label="PDF plots from ${tool.name} (${method.method}) on ${on_string}">
             <discover_datasets pattern="rank_genes_groups_(?P&lt;designation&gt;.*).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="${tool.name} (${method.method}) on ${on_string}">
+        <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>
         </data>
-        <collection name="collection_svg" type="list" label="${tool.name} (${method.method}) on ${on_string}">
+        <collection name="collection_svg" type="list" label="SVG plots from ${tool.name} (${method.method}) on ${on_string}">
             <discover_datasets pattern="rank_genes_groups_(?P&lt;designation&gt;.*).svg" format="svg"/>
             <filter>format == 'svg' and method['method'] == 'pl.rank_genes_groups_violin'</filter>
         </collection>
@@ -792,8 +872,8 @@
         </data>
     </outputs>
     <tests>
-        <test>
-            <!-- test 0: pl.scatter !-->
+        <test expect_num_outputs="2">
+            <!-- test 1: pl.scatter -->
             <param name="adata" value="pbmc68k_reduced.h5ad" />
             <param name="format" value="png"/>
             <conditional name="method">
@@ -837,8 +917,8 @@
             </output>
             <output name="out_png" file="pl.scatter.umap.pbmc68k_reduced.png" ftype="png" compare="sim_size"/>
         </test>
-        <test>
-            <!-- test 1: pl.scatter !-->
+        <test expect_num_outputs="2">
+            <!-- test 2: pl.scatter -->
             <param name="adata" value="krumsiek11.h5ad" />
             <param name="format" value="png"/>
             <conditional name="method">
@@ -870,8 +950,8 @@
             <output name="hidden_output">
                 <assert_contents>
                     <has_text_matching expression="sc.pl.scatter"/>
-                    <has_text_matching expression="x='EKLF'" />
-                    <has_text_matching expression="y='Cebpa'"/>
+                    <has_text_matching expression="x_field='EKLF'" />
+                    <has_text_matching expression="y_field='Cebpa'"/>
                     <has_text_matching expression="use_raw=False"/>
                     <has_text_matching expression="sort_order=True"/>
                     <has_text_matching expression="projection='2d'"/>
@@ -885,8 +965,8 @@
             </output>
             <output name="out_png" file="pl.scatter.krumsiek11.png" ftype="png" compare="sim_size"/>
         </test>
-        <test>
-            <!-- test 2: pl.heatmap !-->
+        <test expect_num_outputs="2">
+            <!-- test 3: pl.heatmap -->
             <param name="adata" value="krumsiek11.h5ad" />
             <param name="format" value="png"/>
             <conditional name="method">
@@ -933,8 +1013,8 @@
             </output>
             <output name="out_png" file="pl.heatmap.krumsiek11.png" ftype="png" compare="sim_size"/>
         </test>
-        <test>
-          <!-- test 2.1: pl.heatmap with symbols !-->
+        <test expect_num_outputs="2">
+          <!-- test 4: pl.heatmap with symbols -->
           <param name="adata" value="pp.filter_genes_dispersion.krumsiek11-seurat.h5ad" />
           <param name="format" value="png"/>
           <conditional name="method">
@@ -983,8 +1063,8 @@
               </assert_contents>
           </output>
         </test>
-        <test>
-            <!-- test 3: pl.dotplot !-->
+        <test expect_num_outputs="2">
+            <!-- test 5: pl.dotplot -->
             <param name="adata" value="pbmc68k_reduced.h5ad" />
             <param name="format" value="png"/>
             <conditional name="method">
@@ -1042,8 +1122,8 @@
             </output>
             <output name="out_png" file="pl.dotplot.krumsiek11.png" ftype="png" compare="sim_size"/>
         </test>
-        <test>
-          <!-- test 3.1: pl.dotplot with symbols !-->
+        <test expect_num_outputs="2">
+          <!-- test 6: pl.dotplot with symbols -->
           <param name="adata" value="pp.filter_genes_dispersion.krumsiek11-seurat.h5ad" />
           <param name="format" value="png"/>
           <conditional name="method">
@@ -1080,8 +1160,8 @@
               </assert_contents>
           </output>
         </test>
-        <test>
-            <!-- test 4: pl.violin !-->
+        <test expect_num_outputs="2">
+            <!-- test 7: pl.violin -->
             <param name="adata" value="pbmc68k_reduced.h5ad" />
             <param name="format" value="png"/>
             <conditional name="method">
@@ -1137,8 +1217,8 @@
             </output>
             <output name="out_png" file="pl.violin.pbmc68k_reduced_custom.png" ftype="png" compare="sim_size"/>
         </test>
-        <test>
-            <!-- test 5: pl.stacked_violin !-->
+        <test expect_num_outputs="2">
+            <!-- test 8: pl.stacked_violin -->
             <param name="adata" value="krumsiek11.h5ad" />
             <param name="format" value="png"/>
             <conditional name="method">
@@ -1197,8 +1277,8 @@
             </output>
             <output name="out_png" file="pl.stacked_violin.krumsiek11.png" ftype="png" compare="sim_size"/>
         </test>
-        <test>
-          <!-- test 5.1: pl.stacked_violin with symbols !-->
+        <test expect_num_outputs="2">
+          <!-- test 9: pl.stacked_violin with symbols -->
           <param name="adata" value="pp.filter_genes_dispersion.krumsiek11-seurat.h5ad" />
           <param name="format" value="png"/>
           <conditional name="method">
@@ -1232,8 +1312,8 @@
               </assert_contents>
           </output>
         </test>
-        <test>
-            <!-- test 6: pl.matrixplot !-->
+        <test expect_num_outputs="2">
+            <!-- test 10: pl.matrixplot -->
             <param name="adata" value="krumsiek11.h5ad" />
             <param name="format" value="png"/>
             <conditional name="method">
@@ -1276,8 +1356,8 @@
             </output>
             <output name="out_png" file="pl.matrixplot.krumsiek11.png" ftype="png" compare="sim_size"/>
         </test>
-        <test>
-          <!-- test 6.1: pl.matrixplot with symbols !-->
+        <test expect_num_outputs="2">
+          <!-- test 11: pl.matrixplot with symbols -->
           <param name="adata" value="pp.filter_genes_dispersion.krumsiek11-seurat.h5ad" />
           <param name="format" value="png"/>
           <conditional name="method">
@@ -1316,8 +1396,8 @@
               </assert_contents>
           </output>
         </test>
-        <test>
-            <!-- test 7: pl.clustermap !-->
+        <test expect_num_outputs="2">
+            <!-- test 12: pl.clustermap -->
             <param name="adata" value="krumsiek11.h5ad" />
             <param name="format" value="png"/>
             <conditional name="method">
@@ -1348,8 +1428,8 @@
             </output>
             <output name="out_png" file="pl.clustermap.krumsiek11.png" ftype="png" compare="sim_size"/>
         </test>
-        <test>
-            <!-- test 8: pl.highest_expr_genes !-->
+        <test expect_num_outputs="2">
+            <!-- test 13: pl.highest_expr_genes -->
             <param name="adata" value="pp.filter_genes_dispersion.krumsiek11-seurat.h5ad" />
             <param name="format" value="png"/>
             <conditional name="method">
@@ -1375,8 +1455,8 @@
             </output>
             <output name="out_png" file="pl.highest_expr_genes.filter_genes_dispersion.krumsiek11-seurat.png" ftype="png" compare="sim_size"/>
         </test>
-        <test>
-            <!-- test 9: pl.highly_variable_genes !-->
+        <test expect_num_outputs="2">
+            <!-- test 14: pl.highly_variable_genes -->
             <param name="adata" value="pp.highly_variable_genes.seurat.blobs.h5ad" />
             <param name="format" value="png"/>
             <conditional name="method">
@@ -1397,8 +1477,8 @@
             </output>
             <output name="out_png" file="pl.highly_variable_genes.seurat.blobs.png" ftype="png" compare="sim_size"/>
         </test>
-        <test>
-            <!-- test 10: pl.pca !-->
+        <test expect_num_outputs="2">
+            <!-- test 15: pl.pca -->
             <param name="adata" value="pbmc68k_reduced.h5ad" />
             <param name="format" value="pdf"/>
             <conditional name="method">
@@ -1453,13 +1533,13 @@
                     <has_text_matching expression="wspace=0.1" />
                     <has_text_matching expression="hspace=0.25" />
                     <has_text_matching expression="linewidths=0.0" />
-                    <has_text_matching expression="edgecolors='face" />
+                    <has_text_matching expression="edgecolors='face'" />
                 </assert_contents>
             </output>
             <output name="out_pdf" file="pl.pca.pbmc68k_reduced.CD3D_CD79A_components_2d.pdf" ftype="pdf" compare="sim_size"/>
         </test>
-        <test>
-            <!-- test 11: pl.pca_loadings !-->
+        <test expect_num_outputs="2">
+            <!-- test 16: pl.pca_loadings -->
             <param name="adata" value="pp.pca.krumsiek11.h5ad" />
             <param name="format" value="png"/>
             <conditional name="method">
@@ -1477,8 +1557,8 @@
             </output>
             <output name="out_png" file="pl.pca_loadings.pp.pca.krumsiek11.png" compare="sim_size"/>
         </test>
-        <test>
-            <!-- test 12: pl.pca_variance_ratio !-->
+        <test expect_num_outputs="2">
+            <!-- test 17: pl.pca_variance_ratio -->
             <param name="adata" value="pp.pca.krumsiek11.h5ad" />
             <param name="format" value="png"/>
             <conditional name="method">
@@ -1498,8 +1578,8 @@
             </output>
             <output name="out_png" file="pl.pca_variance_ratio.pp.pca.krumsiek11.png" compare="sim_size"/>
         </test>
-        <test>
-            <!-- test 13: pl.pca_overview !-->
+        <test expect_num_outputs="2">
+            <!-- test 18: pl.pca_overview -->
             <param name="adata" value="pp.pca.krumsiek11.h5ad" />
             <param name="format" value="png"/>
             <conditional name="method">
@@ -1541,8 +1621,8 @@
             </output>
             <output name="out_png" file="pl.pca_overview.pp.pca.krumsiek11.png" compare="sim_size"/>
         </test>
-        <test>
-            <!-- test 14: pl.tsne !-->
+        <test expect_num_outputs="2">
+            <!-- test 19: pl.tsne -->
             <param name="adata" value="tl.tsne.krumsiek11.h5ad" />
             <param name="format" value="png"/>
             <conditional name="method">
@@ -1596,8 +1676,8 @@
             </output>
             <output name="out_png" file="pl.tsne.krumsiek11.png" ftype="png" compare="sim_size"/>
         </test>
-        <test>
-            <!-- test 15: pl.umap !-->
+        <test expect_num_outputs="2">
+            <!-- test 20: pl.umap -->
             <param name="adata" value="tl.umap.neighbors_umap_euclidean.recipe_weinreb17.paul15_subsample.h5ad" />
             <param name="format" value="png"/>
             <conditional name="method">
@@ -1656,8 +1736,8 @@
             </output>
             <output name="out_png" file="pl.umap.neighbors_umap_euclidean.recipe_weinreb17.paul15_subsample.png" ftype="png" compare="sim_size"/>
         </test>
-        <test>
-            <!-- test 16: pl.diffmap !-->
+        <test expect_num_outputs="2">
+            <!-- test 21: pl.diffmap -->
             <param name="adata" value="tl.diffmap.neighbors_gauss_braycurtis.recipe_weinreb17.paul15_subsample.h5ad" />
             <param name="format" value="png"/>
             <conditional name="method">
@@ -1707,8 +1787,8 @@
             </output>
             <output name="out_png" file="pl.diffmap.neighbors_gauss_braycurtis.recipe_weinreb17.paul15_subsample.png" ftype="png" compare="sim_size"/>
         </test>
-        <test>
-            <!-- test 17: pl.draw_graph !-->
+        <test expect_num_outputs="2">
+            <!-- test 22: pl.draw_graph -->
             <param name="adata" value="tl.draw_graph.pp.neighbors_umap_euclidean.recipe_weinreb17.paul15_subsample.h5ad" />
             <param name="format" value="png"/>
             <conditional name="method">
@@ -1763,22 +1843,48 @@
             </output>
             <output name="out_png" file="pl.draw_graph.png" ftype="png" compare="sim_size"/>
         </test>
-        <!--<test>
-            < test pl.dpt_groups_pseudotime >
+        <test expect_num_outputs="2">
+            <!-- test 23: pl.embedding_density -->
+            <param name="adata" value="tl.embedding_density.umap.pbmc68k_reduced.h5ad" />
+            <param name="format" value="png"/>
+            <conditional name="method">
+                <param name="method" value="pl.embedding_density"/>
+                <param name="basis" value="umap"/>
+                <param name="key" value="umap_density_bulk_labels"/>
+            </conditional>
+            <section name="advanced_common">
+                <param name="show_log" value="true" />
+            </section>
+            <output name="hidden_output">
+                <assert_contents>
+                    <has_text_matching expression="sc.pl.embedding_density"/>
+                    <has_text_matching expression="basis='umap'" />
+                    <has_text_matching expression="key='umap_density_bulk_labels'"/>
+                </assert_contents>
+            </output>
+            <output name="out_png" file="pl.embedding_density.pbmc68k_reduced.png" ftype="png" compare="sim_size"/>
+        </test>
+        <test expect_num_outputs="2">
+            <!-- test 24: pl.dpt_groups_pseudotime -->
             <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"/>
                 <param name="color_map" value="viridis"/>
             </conditional>
-            <assert_stdout>
-                <has_text_matching expression="sc.pl.dpt_groups_pseudotime"/>
-                <has_text_matching expression="color_map='viridis'"/>
-            </assert_stdout>
+            <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="sim_size"/>
-        </test>!-->
-        <test>
-            <!-- test 18: pl.dpt_timeseries !-->
+        </test>
+        <test expect_num_outputs="2">
+            <!-- test 25: pl.dpt_timeseries -->
             <param name="adata" value="tl.dpt.diffmap.neighbors_gauss_braycurtis.recipe_weinreb17.paul15_subsample.h5ad" />
             <param name="format" value="png"/>
             <conditional name="method">
@@ -1800,15 +1906,14 @@
             </output>
             <output name="out_png" file="pl.dpt_timeseries.dpt.diffmap.neighbors_gauss_braycurtis.recipe_weinreb17.paul15_subsample.png" ftype="png" compare="sim_size"/>
         </test>
-        <!--<test>
-             test pl.paga
+        <test expect_num_outputs="1">
+             <!-- test 26: pl.paga -->
             <param name="adata" value="tl.paga.neighbors.paul15_gauss_braycurtis.h5ad" />
             <param name="format" value="png"/>
             <conditional name="method">
                 <param name="method" value="pl.paga"/>
                 <param name="threshold" value="0.01"/>
-                <param name="color" value="paul15_clusters"/>
-                <param name="labels" value="label" />
+                <param name="color" value="louvain"/>
                 <param name="layout" value="fr"/>
                 <param name="random_state" value="0"/>
                 <param name="solid_edges" value="connectivities"/>
@@ -1823,19 +1928,40 @@
                 <param name="frameon" value="True"/>
             </conditional>
             <output name="out_png" file="pl.paga.paul15_gauss_braycurtis.png" ftype="png" compare="sim_size"/>
-        </test>!-->
-        <!--<test>
-             test pl.paga_compare
-        </test>!-->
-        <!--<test>
+        </test>
+        <test expect_num_outputs="1">
+             <!-- test 27: pl.paga_compare -->
+            <param name="adata" value="tl.paga.neighbors.paul15_gauss_braycurtis.h5ad" />
+            <param name="format" value="png"/>
+            <conditional name="method">
+                <param name="method" value="pl.paga_compare"/>
+                <param name="threshold" value="0.01"/>
+                <param name="color" value="louvain"/>
+                <param name="layout" value="fr"/>
+                <param name="random_state" value="0"/>
+                <param name="solid_edges" value="connectivities"/>
+                <param name="single_component" value="False"/>
+                <param name="fontsize" value="1"/>
+                <param name="node_size_scale" value="1.0"/>
+                <param name="node_size_power" value="0.5"/>
+                <param name="edge_width_scale" value="5"/>
+                <param name="arrowsize" value="30"/>
+                <param name="normalize_to_color" value="False"/>
+                <param name="cmap" value="viridis"/>
+                <param name="frameon" value="True"/>
+            </conditional>
+            <output name="out_png" file="pl.paga_compare.paul15_gauss_braycurtis.png" ftype="png" compare="sim_size"/>
+        </test>
+        <!--<test expect_num_outputs="2">
              test pl.paga_path
-        </test>!-->
-        <test>
-            <!-- test 19: pl.rank_genes_groups !-->
+        </test>-->
+        <test expect_num_outputs="2">
+            <!-- test 28: pl.rank_genes_groups -->
             <param name="adata" value="tl.rank_genes_groups.krumsiek11.h5ad" />
             <param name="format" value="png"/>
             <conditional name="method">
                 <param name="method" value="pl.rank_genes_groups"/>
+                <param name="gene_symbols" value="symbol"/>
                 <param name="n_genes" value="10"/>
                 <param name="fontsize" value="8"/>
                 <param name="ncols" value="4"/>
@@ -1855,8 +1981,8 @@
             </output>
             <output name="out_png" file="pl.rank_genes_groups.rank_genes_groups.krumsiek11.png" ftype="png" compare="sim_size"/>
         </test>
-        <!-- test 20: pl.rank_genes_groups_violin, currently broken
-        <test>
+        <test expect_num_outputs="2">
+            <!-- test 29: pl.rank_genes_groups_violin -->
             <param name="adata" value="tl.rank_genes_groups.krumsiek11.h5ad" />
             <param name="format" value="png"/>
             <conditional name="method">
@@ -1899,13 +2025,13 @@
                 <element name="cell_type_progenitor" file="pl.rank_genes_groups_violin.progenitor.png" ftype="png" compare="sim_size"/>
             </output_collection>
         </test>
-        -->
-        <test>
-            <!-- test 21: pl.rank_genes_groups_dotplot !-->
+        <test expect_num_outputs="2">
+            <!-- test 30: pl.rank_genes_groups_dotplot -->
             <param name="adata" value="tl.rank_genes_groups.krumsiek11.h5ad" />
             <param name="format" value="png"/>
             <conditional name="method">
                 <param name="method" value="pl.rank_genes_groups_dotplot"/>
+                <param name="gene_symbols" value="symbol"/>
                 <param name="n_genes" value="10"/>
                 <param name="log" value="False"/>
                 <param name="use_raw" value="False"/>
@@ -1933,12 +2059,13 @@
             </output>
             <output name="out_png" file="pl.rank_genes_groups_dotplot.rank_genes_groups.krumsiek11.png" ftype="png" compare="sim_size"/>
         </test>
-        <test>
-            <!-- test 22: pl.rank_genes_groups_heatmap !-->
+        <test expect_num_outputs="2">
+            <!-- test 31: pl.rank_genes_groups_heatmap -->
             <param name="adata" value="tl.rank_genes_groups.krumsiek11.h5ad" />
             <param name="format" value="png"/>
             <conditional name="method">
                 <param name="method" value="pl.rank_genes_groups_heatmap"/>
+                <param name="gene_symbols" value="symbol"/>
                 <param name="n_genes" value="10"/>
                 <param name="log" value="False"/>
                 <param name="use_raw" value="False"/>
@@ -1969,12 +2096,13 @@
             </output>
             <output name="out_png" file="pl.rank_genes_groups_heatmap.rank_genes_groups.krumsiek11.png" ftype="png" compare="sim_size"/>
         </test>
-        <test>
-            <!-- test 23: pl.rank_genes_groups_matrixplot !-->
+        <test expect_num_outputs="2">
+            <!-- test 32: pl.rank_genes_groups_matrixplot -->
             <param name="adata" value="tl.rank_genes_groups.krumsiek11.h5ad" />
             <param name="format" value="png"/>
             <conditional name="method">
                 <param name="method" value="pl.rank_genes_groups_matrixplot"/>
+                <param name="gene_symbols" value="symbol"/>
                 <param name="n_genes" value="10"/>
                 <param name="log" value="False"/>
                 <param name="use_raw" value="False"/>
@@ -2004,12 +2132,13 @@
             </output>
             <output name="out_png" file="pl.rank_genes_groups_matrixplot.rank_genes_groups.krumsiek11.png" ftype="png" compare="sim_size"/>
         </test>
-        <test>
-            <!-- test 24: pl.rank_genes_groups_stacked_violin !-->
+        <test expect_num_outputs="2">
+            <!-- test 33: pl.rank_genes_groups_stacked_violin -->
             <param name="adata" value="tl.rank_genes_groups.krumsiek11.h5ad" />
             <param name="format" value="png"/>
             <conditional name="method">
                 <param name="method" value="pl.rank_genes_groups_stacked_violin"/>
+                <param name="gene_symbols" value="symbol"/>
                 <param name="n_genes" value="10"/>
                 <param name="log" value="False"/>
                 <param name="use_raw" value="False"/>
@@ -2057,6 +2186,53 @@
             </output>
             <output name="out_png" file="pl.rank_genes_groups_stacked_violin.rank_genes_groups.krumsiek11.png" ftype="png" compare="sim_size"/>
         </test>
+        <test expect_num_outputs="2">
+            <!-- test 34: pl.scatter log !-->
+            <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="n_genes"/>
+                    <param name="y" value="n_counts"/>
+                    <param name="log" value="True"/>
+                    <conditional name="layers">
+                        <param name="use_layers" value="false"/>
+                    </conditional>
+                </conditional>
+                <param name="use_raw" value="False"/>
+                <param name="sort_order" value="True"/>
+                <section name="plot">
+                    <param name="projection" value="2d"/>
+                    <param name="legend_loc" value="right margin"/>
+                    <param name="legend_fontsize" value="1"/>
+                    <param name="legend_fontweight" value="normal"/>
+                    <param name="palette" value="bwr"/>
+                    <param name="frameon" value="False"/>
+                    <param name="size" value="1"/>
+                    <param name="title" value="A title"/>
+                </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.scatter"/>
+                    <has_text_matching expression="use_raw=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="frameon=False"/>
+                    <has_text_matching expression="size=1.0"/>
+                    <has_text_matching expression="title='A title'"/>
+                </assert_contents>
+            </output>
+            <output name="out_png" file="pl.scatter.pbmc68k_reduced.png" ftype="png" compare="sim_size"/>
+        </test>
     </tests>
     <help><![CDATA[
 Generic: Scatter plot along observations or variables axes (`pl.scatter`)
@@ -2066,7 +2242,7 @@
 (`.var`) or expression of genes (`.var_names`).
 
 More details on the `scanpy documentation
-<https://scanpy.readthedocs.io/en/latest/api/scanpy.pl.scatter.html>`__
+<https://scanpy.readthedocs.io/en/stable/api/scanpy.pl.scatter.html>`__
 
 Generic: Heatmap of the expression values of set of genes (`pl.heatmap`)
 ========================================================================
@@ -2078,7 +2254,7 @@
 specified in `num_categories`.
 
 More details on the `scanpy documentation
-<https://scanpy.readthedocs.io/en/latest/api/scanpy.pl.heatmap.html>`__
+<https://scanpy.readthedocs.io/en/stable/api/scanpy.pl.heatmap.html>`__
 
 Generic: Makes a dot plot of the expression values (`pl.dotplot`)
 =================================================================
@@ -2095,7 +2271,7 @@
 expressing the gene can be visualized for each cluster.
 
 More details on the `scanpy documentation
-<https://scanpy.readthedocs.io/en/latest/api/scanpy.pl.dotplot.html>`__
+<https://scanpy.readthedocs.io/en/stable/api/scanpy.pl.dotplot.html>`__
 
 Generic: Violin plot (`pl.violin`)
 ==================================
@@ -2103,7 +2279,7 @@
 Wraps `seaborn.violinplot` for `anndata.AnnData`.
 
 More details on the `scanpy documentation
-<https://scanpy.readthedocs.io/en/latest/api/scanpy.pl.violin.html>`__
+<https://scanpy.readthedocs.io/en/stable/api/scanpy.pl.violin.html>`__
 
 Generic: Stacked violin plots (`pl.stacked_violin`)
 ===================================================
@@ -2112,7 +2288,7 @@
 stacked on top of each other. Useful to visualize gene expression per cluster.
 
 More details on the `scanpy documentation
-<https://scanpy.readthedocs.io/en/latest/api/scanpy.pl.stacked_violin.html>`__
+<https://scanpy.readthedocs.io/en/stable/api/scanpy.pl.stacked_violin.html>`__
 
 Generic: Heatmap of the mean expression values per cluster (`pl.matrixplot`)
 ============================================================================
@@ -2123,7 +2299,7 @@
 category.
 
 More details on the `scanpy documentation
-<https://icb-scanpy.readthedocs-hosted.com/en/@version@/api/scanpy.pl.matrixplot.html>`__
+<https://icb-scanpy.readthedocs-hosted.com/en/stable/api/scanpy.pl.matrixplot.html>`__
 
 Generic: Hierarchically-clustered heatmap (`pl.clustermap`)
 ===========================================================
@@ -2141,7 +2317,7 @@
 Column indices, use: clustergrid.dendrogram_col.reordered_ind
 
 More details on the `scanpy documentation
-<https://icb-scanpy.readthedocs-hosted.com/en/@version@/api/scanpy.pl.clustermap.html>`__
+<https://icb-scanpy.readthedocs-hosted.com/en/stable/api/scanpy.pl.clustermap.html>`__
 
 Preprocessing: Plot the fraction of counts assigned to each gene over all cells (`pl.highest_expr_genes`)
 =========================================================================================================
@@ -2153,7 +2329,7 @@
 This plot is similar to the `scater` package function `plotHighestExprs(type= "highest-expression")`
 
 More details on the `scanpy documentation
-<https://icb-scanpy.readthedocs-hosted.com/en/@version@/api/scanpy.pl.highest_expr_genes.html>`__
+<https://icb-scanpy.readthedocs-hosted.com/en/stable/api/scanpy.pl.highest_expr_genes.html>`__
 
 Preprocessing: Plot dispersions versus means for genes (`pl.highly_variable_genes`)
 ===================================================================================
@@ -2161,25 +2337,25 @@
 It produces Supp. Fig. 5c of Zheng et al. (2017) and MeanVarPlot() of Seurat.
 
 More details on the `scanpy documentation
-<https://icb-scanpy.readthedocs-hosted.com/en/@version@/api/scanpy.pl.highly_variable_genes.html>`__
+<https://icb-scanpy.readthedocs-hosted.com/en/stable/api/scanpy.pl.highly_variable_genes.html>`__
 
 PCA: Scatter plot in PCA coordinates (`pl.pca`)
 ===============================================
 
 More details on the `scanpy documentation
-<https://icb-scanpy.readthedocs-hosted.com/en/@version@/api/scanpy.pl.pca.html>`__
+<https://icb-scanpy.readthedocs-hosted.com/en/stable/api/scanpy.pl.pca.html>`__
 
 PCA: Rank genes according to contributions to PCs (`pl.pca_loadings`)
 =====================================================================
 
 More details on the `scanpy documentation
-<https://icb-scanpy.readthedocs-hosted.com/en/@version@/api/scanpy.pl.pca_loadings.html>`__
+<https://icb-scanpy.readthedocs-hosted.com/en/stable/api/scanpy.pl.pca_loadings.html>`__
 
 PCA: Plot the variance ratio (`pl.pca_variance_ratio`)
 ======================================================
 
 More details on the `scanpy documentation
-<https://icb-scanpy.readthedocs-hosted.com/en/@version@/api/scanpy.pl.pca_variance_ratio.html>`__
+<https://icb-scanpy.readthedocs-hosted.com/en/stable/api/scanpy.pl.pca_variance_ratio.html>`__
 
 PCA: Plot PCA results (`pl.pca_overview`)
 =========================================
@@ -2188,37 +2364,37 @@
 if you want to change the default settings.
 
 More details on the `scanpy documentation
-<https://icb-scanpy.readthedocs-hosted.com/en/@version@/api/scanpy.pl.pca_overview.html>`__
+<https://icb-scanpy.readthedocs-hosted.com/en/stable/api/scanpy.pl.pca_overview.html>`__
 
 Embedding: Scatter plot in tSNE basis (`pl.tsne`)
 =================================================
 
 More details on the `scanpy documentation
-<https://icb-scanpy.readthedocs-hosted.com/en/@version@/api/scanpy.pl.tsne.html>`__
+<https://icb-scanpy.readthedocs-hosted.com/en/stable/api/scanpy.pl.tsne.html>`__
 
 Embeddings: Scatter plot in UMAP basis (`pl.umap`)
 ==================================================
 
 More details on the `scanpy documentation
-<https://icb-scanpy.readthedocs-hosted.com/en/@version@/api/scanpy.pl.umap.html>`__
+<https://icb-scanpy.readthedocs-hosted.com/en/stable/api/scanpy.pl.umap.html>`__
 
 Embeddings: Scatter plot in Diffusion Map basis (`pl.diffmap`)
 ==============================================================
 
 More details on the `scanpy documentation
-<https://icb-scanpy.readthedocs-hosted.com/en/@version@/api/scanpy.pl.diffmap.html>`__
+<https://icb-scanpy.readthedocs-hosted.com/en/stable/api/scanpy.pl.diffmap.html>`__
 
 Branching trajectories and pseudotime, clustering: Plot groups and pseudotime (`pl.dpt_groups_pseudotime`)
 ===========================================================================================================
 
 More details on the `scanpy documentation
-<https://icb-scanpy.readthedocs-hosted.com/en/@version@/api/scanpy.pl.dpt_groups_pseudotime.html>`__
+<https://icb-scanpy.readthedocs-hosted.com/en/stable/api/scanpy.pl.dpt_groups_pseudotime.html>`__
 
 Branching trajectories and pseudotime, clustering: Heatmap of pseudotime series (`pl.dpt_timeseries`)
 =====================================================================================================
 
 More details on the `scanpy documentation
-<https://icb-scanpy.readthedocs-hosted.com/en/@version@/api/scanpy.pl.dpt_timeseries.html>`__
+<https://icb-scanpy.readthedocs-hosted.com/en/stable/api/scanpy.pl.dpt_timeseries.html>`__
 
 
 Branching trajectories and pseudotime, clustering: Plot the abstracted graph through thresholding low-connectivity edges (`pl.paga`)
@@ -2231,56 +2407,56 @@
 `maxiter` parameter by 1 if the layout is flipped.
 
 More details on the `scanpy documentation
-<https://icb-scanpy.readthedocs-hosted.com/en/@version@/api/scanpy.pl.paga.html>`__
+<https://icb-scanpy.readthedocs-hosted.com/en/stable/api/scanpy.pl.paga.html>`__
 
 
 Branching trajectories and pseudotime, clustering: Scatter and PAGA graph side-by-side (`pl.paga_compare`)
 ==========================================================================================================
 
 More details on the `scanpy documentation
-<https://icb-scanpy.readthedocs-hosted.com/en/@version@/api/scanpy.pl.paga_compare.html>`__
+<https://icb-scanpy.readthedocs-hosted.com/en/stable/api/scanpy.pl.paga_compare.html>`__
 
 Branching trajectories and pseudotime, clustering: Gene expression and annotation changes along paths (`pl.paga_path`)
 ======================================================================================================================
 
 More details on the `scanpy documentation
-<https://icb-scanpy.readthedocs-hosted.com/en/@version@/api/scanpy.pl.paga_path.html>`__
+<https://icb-scanpy.readthedocs-hosted.com/en/stable/api/scanpy.pl.paga_path.html>`__
 
 Marker genes: Plot ranking of genes using dotplot plot (`pl.rank_genes_groups`)
 ===============================================================================
 
 More details on the `scanpy documentation
-<https://icb-scanpy.readthedocs-hosted.com/en/@version@/api/scanpy.pl.rank_genes_groups.html>`__
+<https://icb-scanpy.readthedocs-hosted.com/en/stable/api/scanpy.pl.rank_genes_groups.html>`__
 
 Marker genes: Plot ranking of genes as violin plot (`pl.rank_genes_groups_violin`)
 ==================================================================================
 
 More details on the `scanpy documentation
-<https://icb-scanpy.readthedocs-hosted.com/en/@version@/api/scanpy.pl.rank_genes_groups_violin.html>`__
+<https://icb-scanpy.readthedocs-hosted.com/en/stable/api/scanpy.pl.rank_genes_groups_violin.html>`__
 
 Marker genes: Plot ranking of genes as dotplot plot (`pl.rank_genes_groups_dotplot`)
 ====================================================================================
 
 More details on the `scanpy documentation
-<https://icb-scanpy.readthedocs-hosted.com/en/@version@/api/scanpy.pl.rank_genes_groups_dotplot.html>`__
+<https://icb-scanpy.readthedocs-hosted.com/en/stable/api/scanpy.pl.rank_genes_groups_dotplot.html>`__
 
 Marker genes: Plot ranking of genes as heatmap plot (`pl.rank_genes_groups_heatmap`)
 ====================================================================================
 
 More details on the `scanpy documentation
-<https://icb-scanpy.readthedocs-hosted.com/en/@version@/api/scanpy.pl.rank_genes_groups_heatmap.html>`__
+<https://icb-scanpy.readthedocs-hosted.com/en/stable/api/scanpy.pl.rank_genes_groups_heatmap.html>`__
 
 Marker genes: Plot ranking of genes as matrixplot plot (`pl.rank_genes_groups_matrixplot`)
 ==========================================================================================
 
 More details on the `scanpy documentation
-<https://icb-scanpy.readthedocs-hosted.com/en/@version@/api/scanpy.pl.rank_genes_groups_matrixplot.html>`__
+<https://icb-scanpy.readthedocs-hosted.com/en/stable/api/scanpy.pl.rank_genes_groups_matrixplot.html>`__
 
 Marker genes: Plot ranking of genes as stacked violin plot (`pl.rank_genes_groups_stacked_violin`)
 ==================================================================================================
 
 More details on the `scanpy documentation
-<https://icb-scanpy.readthedocs-hosted.com/en/@version@/api/scanpy.pl.rank_genes_groups_stacked_violin.html>`__
+<https://icb-scanpy.readthedocs-hosted.com/en/stable/api/scanpy.pl.rank_genes_groups_stacked_violin.html>`__
     ]]></help>
     <expand macro="citations"/>
 </tool>
Binary file test-data/blobs.h5ad has changed
Binary file test-data/krumsiek11.h5ad has changed
Binary file test-data/pbmc68k_reduced.h5ad has changed
Binary file test-data/pl.clustermap.krumsiek11.png has changed
Binary file test-data/pl.diffmap.neighbors_gauss_braycurtis.recipe_weinreb17.paul15_subsample.png has changed
Binary file test-data/pl.dotplot.krumsiek11.png has changed
Binary file test-data/pl.dpt_groups_pseudotime.dpt.diffmap.neighbors_gauss_braycurtis.recipe_weinreb17.paul15_subsample.png has changed
Binary file test-data/pl.dpt_timeseries.dpt.diffmap.neighbors_gauss_braycurtis.recipe_weinreb17.paul15_subsample.png has changed
Binary file test-data/pl.draw_graph.png has changed
Binary file test-data/pl.embedding_density.pbmc68k_reduced.png has changed
Binary file test-data/pl.heatmap.krumsiek11.png has changed
Binary file test-data/pl.highest_expr_genes.filter_genes_dispersion.krumsiek11-seurat.png has changed
Binary file test-data/pl.highly_variable_genes.seurat.blobs.png has changed
Binary file test-data/pl.matrixplot.krumsiek11.png has changed
Binary file test-data/pl.paga.paul15_gauss_braycurtis.png has changed
Binary file test-data/pl.paga_compare.paul15_gauss_braycurtis.png has changed
Binary file test-data/pl.pca.pbmc68k_reduced.CD3D_CD79A_components_2d.pdf has changed
Binary file test-data/pl.pca_loadings.pp.pca.krumsiek11.png has changed
Binary file test-data/pl.pca_overview.pp.pca.krumsiek11.png has changed
Binary file test-data/pl.pca_variance_ratio.pp.pca.krumsiek11.png has changed
Binary file test-data/pl.rank_genes_groups.rank_genes_groups.krumsiek11.png has changed
Binary file test-data/pl.rank_genes_groups_dotplot.rank_genes_groups.krumsiek11.png has changed
Binary file test-data/pl.rank_genes_groups_heatmap.rank_genes_groups.krumsiek11.png has changed
Binary file test-data/pl.rank_genes_groups_matrixplot.rank_genes_groups.krumsiek11.png has changed
Binary file test-data/pl.rank_genes_groups_stacked_violin.rank_genes_groups.krumsiek11.png has changed
Binary file test-data/pl.rank_genes_groups_violin.Ery.png has changed
Binary file test-data/pl.rank_genes_groups_violin.Mk.png has changed
Binary file test-data/pl.rank_genes_groups_violin.Mo.png has changed
Binary file test-data/pl.rank_genes_groups_violin.Neu.png has changed
Binary file test-data/pl.rank_genes_groups_violin.progenitor.png has changed
Binary file test-data/pl.scatter.krumsiek11.png has changed
Binary file test-data/pl.scatter.pbmc68k_reduced.png has changed
Binary file test-data/pl.scatter.umap.pbmc68k_reduced.png has changed
Binary file test-data/pl.stacked_violin.krumsiek11.png has changed
Binary file test-data/pl.tsne.krumsiek11.png has changed
Binary file test-data/pl.umap.neighbors_umap_euclidean.recipe_weinreb17.paul15_subsample.png has changed
Binary file test-data/pl.violin.pbmc68k_reduced_custom.png has changed
Binary file test-data/pp.calculate_qc_metrics.sparce_csr_matrix.h5ad has changed
Binary file test-data/pp.combat.blobs.h5ad has changed
Binary file test-data/pp.downsample_counts.random-randint.h5ad has changed
Binary file test-data/pp.filter_cells.krumsiek11-max_genes.h5ad has changed
Binary file test-data/pp.filter_cells.krumsiek11-min_counts.h5ad has changed
Binary file test-data/pp.filter_genes.krumsiek11-min_counts.h5ad has changed
Binary file test-data/pp.highly_variable_genes.krumsiek11-cell_ranger.h5ad has changed
Binary file test-data/pp.highly_variable_genes.seurat.blobs.h5ad has changed
Binary file test-data/pp.log1p.krumsiek11.h5ad has changed
Binary file test-data/pp.neighbors_gauss_braycurtis.recipe_weinreb17.paul15_subsample.h5ad has changed
Binary file test-data/pp.neighbors_umap_euclidean.recipe_weinreb17.paul15_subsample.h5ad has changed
Binary file test-data/pp.normalize_total.krumsiek11.h5ad has changed
Binary file test-data/pp.pca.krumsiek11.h5ad has changed
Binary file test-data/pp.pca.krumsiek11_chunk.h5ad has changed
Binary file test-data/pp.recipe_seurat.recipe_zheng17.h5ad has changed
Binary file test-data/pp.recipe_weinreb17.paul15_subsample.h5ad has changed
Binary file test-data/pp.recipe_weinreb17.paul15_subsample.updated.h5ad has changed
Binary file test-data/pp.recipe_zheng17.random-randint.h5ad has changed
Binary file test-data/pp.regress_out.krumsiek11.h5ad has changed
Binary file test-data/pp.scale.krumsiek11.h5ad has changed
Binary file test-data/pp.scale_max_value.krumsiek11.h5ad has changed
Binary file test-data/pp.sqrt.krumsiek11.h5ad has changed
Binary file test-data/pp.subsample.krumsiek11_fraction.h5ad has changed
Binary file test-data/pp.subsample.krumsiek11_n_obs.h5ad has changed
Binary file test-data/sparce_csr_matrix.h5ad has changed
Binary file test-data/tl.diffmap.neighbors_gauss_braycurtis.recipe_weinreb17.paul15_subsample.h5ad has changed
Binary file test-data/tl.dpt.diffmap.neighbors_gauss_braycurtis.recipe_weinreb17.paul15_subsample.h5ad has changed
Binary file test-data/tl.draw_graph.pp.neighbors_umap_euclidean.recipe_weinreb17.paul15_subsample.h5ad has changed
Binary file test-data/tl.embedding_density.umap.neighbors_umap_euclidean.recipe_weinreb17.paul15_subsample.h5ad has changed
Binary file test-data/tl.embedding_density.umap.pbmc68k_reduced.h5ad has changed
Binary file test-data/tl.leiden.neighbors_gauss_braycurtis.recipe_weinreb17.paul15_subsample.h5ad has changed
Binary file test-data/tl.louvain.neighbors_gauss_braycurtis.recipe_weinreb17.paul15_subsample.h5ad has changed
Binary file test-data/tl.paga.neighbors.paul15_gauss_braycurtis.h5ad has changed
Binary file test-data/tl.paga.neighbors_gauss_braycurtis.recipe_weinreb17.paul15_subsample.h5ad has changed
Binary file test-data/tl.pca.krumsiek11.h5ad has changed
Binary file test-data/tl.rank_genes_groups.krumsiek11.h5ad has changed
Binary file test-data/tl.rank_genes_groups.liblinear.krumsiek11.h5ad has changed
Binary file test-data/tl.rank_genes_groups.newton-cg.pbmc68k_reduced.h5ad has changed
Binary file test-data/tl.score_genes.krumsiek11.h5ad has changed
Binary file test-data/tl.score_genes_cell_cycle.krumsiek11.h5ad has changed
Binary file test-data/tl.tsne.krumsiek11.h5ad has changed
Binary file test-data/tl.umap.neighbors_umap_euclidean.recipe_weinreb17.paul15_subsample.h5ad has changed