changeset 12:1f380e8a6aec draft

planemo upload for repository https://github.com/galaxyproject/tools-iuc/tree/master/tools/scanpy/ commit c21958f44b81d740191999fb6015d5ae69538ee0
author iuc
date Wed, 31 Jul 2024 18:07:15 +0000
parents 69a12ab93cdd
children 084c74890a1f
files macros.xml plot.xml test-data/blobs.h5ad test-data/cosg.rank_genes_groups.newton-cg.pbmc68k_highly_reduced_1.h5ad test-data/external.pp.magic.all_genes.krumsiek11.h5ad test-data/external.pp.magic.pca_only.krumsiek11.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_highly_reduced_marker_1.tsv test-data/tl.rank_genes_groups.newton-cg.pbmc68k_highly_reduced_marker_filtered_1.tsv 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 86 files changed, 454 insertions(+), 232 deletions(-) [+]
line wrap: on
line diff
--- a/macros.xml	Wed Sep 22 21:07:11 2021 +0000
+++ b/macros.xml	Wed Jul 31 18:07:15 2024 +0000
@@ -1,12 +1,17 @@
 <macros>
-    <token name="@version@">1.7.1</token>
-    <token name="@profile@">19.01</token>
-    <token name="@galaxy_version@"><![CDATA[@version@+galaxy0]]></token>
+    <token name="@TOOL_VERSION@">1.9.6</token>
+    <token name="@VERSION_SUFFIX@">4</token>
+    <token name="@profile@">21.09</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="@TOOL_VERSION@">scanpy</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>
+            <requirement type="package" version="3.0.0">magic-impute</requirement>
             <yield />
         </requirements>
     </xml>
@@ -15,9 +20,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 +67,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 +77,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)
 ]]>
@@ -414,6 +425,7 @@
             <param name="type" type="select" label="Variables to plot (columns of the heatmaps)" >
                 <option value="all">All variables in 'adata.var_names'</option>
                 <option value="custom">Subset of variables in 'adata.var_names'</option>
+                <option value="customfile">Subset of variables as a tabular file</option>
             </param>
             <when value="all"/>
             <when value="custom">
@@ -421,6 +433,9 @@
                     <expand macro="sanitize_query" />
                 </param>
             </when>
+            <when value="customfile">
+                <param argument="var_names" type="data" format="tabular" label="List of variables to plot" help="This should be a tsv where row = group (e.g. celltypes) and columns = variables."></param>
+            </when>
         </conditional>
     </xml>
     <xml name="param_num_categories">
@@ -457,15 +472,17 @@
         <expand macro="param_num_categories"/>
     </xml>
     <token name="@CMD_params_inputs@"><![CDATA[
-    #if $method.var_names.type == 'all'
-    var_names=adata.var_names,
-#else
+    #if $method.var_names.type == 'custom'
     #set $var_names = ([x.strip() for x in str($method.var_names.var_names).split(',')])
     var_names=$var_names,
-#end if
-#if str($method.groupby) != ''
+    #else if $method.var_names.type == 'customfile'
+    var_names={key: [v for v in list(value.values()) if pd.notna(v)] for key, value in pd.read_csv('$var_names', sep='\t', index_col=0).to_dict(orient='index').items()},
+    #else
+    var_names=adata.var_names,
+    #end if
+    #if $method.groupby
     groupby='$method.groupby',
-#end if
+    #end if
     num_categories=$method.num_categories,
     ]]></token>
     <xml name="params_plots">
@@ -491,15 +508,15 @@
     var_group_positions=$var_group_positions,
     var_group_labels=$var_group_labels,
     #end if
-#if $method.var_group_rotation
-    var_group_rotation=$method.var_group_rotation,
-#end if
-#if $method.figsize.test == 'yes'
-    figsize=($method.figsize.width, $method.figsize.height),
-#end if
-#if $method.layer != ''
-    layer='$method.layer',
-#end if
+    #if str($method.var_group_rotation) != ''
+        var_group_rotation=$method.var_group_rotation,
+    #end if
+    #if $method.figsize.test == 'yes'
+        figsize=($method.figsize.width, $method.figsize.height),
+    #end if
+    #if $method.layer
+        layer='$method.layer',
+    #end if
     ]]></token>
     <xml name="matplotlib_color">
         <option value="AliceBlue">AliceBlue</option>
@@ -652,9 +669,8 @@
         <option value="YellowGreen">YellowGreen</option>
     </xml>
     <xml name="param_matplotlib_pyplot_edgecolors">
-        <param argument="edgecolors" type="select" label="Edge color of the marker" help="">
+        <param argument="edgecolors" type="select" optional="true" label="Edge color of the marker" help="">
             <option value="face">The edge color will always be the same as the face color</option>
-            <option value="none">No patch boundary will be drawn</option>
             <expand macro="matplotlib_color"/>
         </param>
     </xml>
@@ -692,17 +708,19 @@
         </section>
     </xml>
     <token name="@CMD_params_matplotlib_pyplot_scatter@"><![CDATA[
-    #if $method.matplotlib_pyplot_scatter.vmin
+    #if str($method.matplotlib_pyplot_scatter.vmin) != ''
     vmin=$method.matplotlib_pyplot_scatter.vmin,
     #end if
-    #if $method.matplotlib_pyplot_scatter.vmax
+    #if str($method.matplotlib_pyplot_scatter.vmax) != ''
     vmax=$method.matplotlib_pyplot_scatter.vmax,
     #end if
-    #if $method.matplotlib_pyplot_scatter.alpha
+    #if str($method.matplotlib_pyplot_scatter.alpha) != ''
     alpha=$method.matplotlib_pyplot_scatter.alpha,
     #end if
-    linewidths=$method.matplotlib_pyplot_scatter.linewidths,
-    edgecolors='$method.matplotlib_pyplot_scatter.edgecolors'
+    lw=$method.matplotlib_pyplot_scatter.linewidths,
+    #if $method.matplotlib_pyplot_scatter.edgecolors
+    ec='$method.matplotlib_pyplot_scatter.edgecolors'
+    #end if
     ]]></token>
     <xml name="conditional_stripplot">
         <conditional name="stripplot">
@@ -742,13 +760,7 @@
         </param>
     </xml>
     <token name="@CMD_params_violin_plots@"><![CDATA[
-    stripplot=$method.violin_plot.stripplot.stripplot,
-#if $method.violin_plot.stripplot.stripplot == "True"
-    jitter=$method.violin_plot.stripplot.jitter.jitter,
-    #if $method.violin_plot.stripplot.jitter.jitter == "True"
-    size=$method.violin_plot.stripplot.jitter.size,
-    #end if
-#end if
+    @CMD_conditional_stripplot@
     multi_panel=$method.violin_plot.multi_panel.multi_panel,
 #if $method.multi_panel.violin_plot.multi_panel == "True" and str($method.violin_plot.multi_panel.width) != '' and str($method.violin_plot.multi_panel.height) != ''
     figsize=($method.violin_plot.multi_panel.width, $method.violin_plot.multi_panel.height)
@@ -766,7 +778,7 @@
                 <option value="h">horizontal</option>
             </param>
             <param argument="linewidth" type="float" value="0" label="Width of the gray lines that frame the plot elements" help=""/>
-            <param argument="color" type="select" label="Color for all of the elements" help="">
+            <param argument="color" type="select" optional="true" label="Color for all of the elements" help="">
                 <expand macro="matplotlib_color"/>
             </param>
             <param argument="saturation" type="float" value="0.75" min="0" max="1" label="Proportion of the original saturation to draw colors at" help=""/>
@@ -778,7 +790,9 @@
     orient='$method.seaborn_violinplot.orient',
 #end if
     linewidth=$method.seaborn_violinplot.linewidth,
+    #if $method.seaborn_violinplot.color
     color='$method.seaborn_violinplot.color',
+    #end if
     saturation=$method.seaborn_violinplot.saturation
     ]]></token>
     <xml name="param_color">
@@ -787,7 +801,7 @@
         </param>
     </xml>
     <token name="@CMD_param_color@"><![CDATA[
-#if str($method.color) != ''
+#if $method.color
     #set $color = ([x.strip() for x in str($method.color).split(',')])
     color=$color,
 #end if
@@ -798,7 +812,7 @@
         </param>
     </xml>
     <token name="@CMD_params_groups@"><![CDATA[
-#if str($method.groups) != ''
+#if $method.groups
     #set $groups=([x.strip() for x in str($method.groups).split(',')])
     groups=$groups,
 #end if
@@ -868,14 +882,12 @@
         </param>
     </xml>
     <xml name="param_palette">
-        <param argument="palette" type="select" label="Colors to use for plotting categorical annotation groups" help="">
-            <option value="default">Default</option>
+        <param argument="palette" type="select" optional="true" label="Colors to use for plotting categorical annotation groups" help="">
             <expand macro="matplotlib_pyplot_colormap"/>
         </param>
     </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>
+        <param argument="color_map" type="select" optional="true" label="Color map to use for continous variables" help="">
             <expand macro="matplotlib_pyplot_colormap"/>
         </param>
     </xml>
@@ -931,7 +943,7 @@
             </param>
             <when value="True">
                 <param argument="edges_width" type="float" min="0" value="0.1" label="Width of edges"/>
-                <param argument="edges_color" type="select" label="Color of edges">
+                <param argument="edges_color" type="select" optional="true" label="Color of edges">
                     <expand macro="matplotlib_color"/>
                 </param>
             </when>
@@ -942,7 +954,9 @@
 #if str($method.edges.edges) == 'True'
     edges=True,
     edges_width=$method.edges.edges_width,
+    #if $method.edges.edges_color
     edges_color='$method.edges.edges_color',
+    #end if
 #else
     edges=False,
 #end if
@@ -952,7 +966,7 @@
         <param argument="arrows" type="boolean" truevalue="True" falsevalue="False" checked="false" label="Show arrows?" help="It requires to run 'tl.rna_velocity' before."/>
     </xml>
     <xml name="param_cmap">
-        <param argument="cmap" type="select" label="Colors to use for plotting categorical annotation groups" help="">
+        <param argument="cmap" type="select" optional="true" label="Colors to use for plotting categorical annotation groups" help="">
             <expand macro="matplotlib_pyplot_colormap"/>
         </param>
     </xml>
@@ -979,10 +993,10 @@
     @CMD_param_legend_fontsize@
     legend_fontweight='$method.plot.legend_fontweight',
     @CMD_param_size@
-    #if str($method.plot.color_map) != 'None'
+    #if $method.plot.color_map
     color_map='$method.plot.color_map',
     #end if
-    #if str($method.plot.palette) != ''
+    #if $method.plot.palette
     palette='$method.plot.palette',
     #end if
     frameon=$method.plot.frameon,
@@ -1052,18 +1066,18 @@
     </xml>
     <token name="@CMD_params_pl_paga@"><![CDATA[
     threshold=$method.threshold,
-#if str($method.groups) != ''
+#if $method.groups
     #set $groups=([x.strip() for x in str($method.groups).split(',')])
     groups=$groups,
 #end if
-#if str($method.color) != ''
+#if $method.color
     #set $color=([x.strip() for x in str($method.color).split(',')])
     color=$color,
 #end if
 #if $method.pos
     pos=np.fromfile($method.pos, dtype=dt),
 #end if
-#if str($method.labels) != ''
+#if $method.labels
     #set $labels=([x.strip() for x in str($method.labels).split(',')])
     labels=$labels,
 #end if
@@ -1072,7 +1086,7 @@
     init_pos=np.fromfile($method.init_pos, dtype=dt),
 #end if
     random_state=$method.random_state,
-#if str($method.root) != ''
+#if $method.root
     #set $root=([int(x.strip()) for x in str($method.root).split(',')])
     root=$root,
 #end if
@@ -1088,15 +1102,17 @@
     node_size_scale=$method.node_size_scale,
     node_size_power=$method.node_size_power,
     edge_width_scale=$method.edge_width_scale,
-#if $method.min_edge_width
+#if str($method.min_edge_width) != ''
     min_edge_width=$method.min_edge_width,
 #end if
-#if $method.max_edge_width
+#if str($method.max_edge_width) != ''
     max_edge_width=$method.max_edge_width,
 #end if
     arrowsize=$method.arrowsize,
     normalize_to_color=$method.normalize_to_color,
+    #if $method.cmap
     cmap='$method.cmap',
+    #end if
 #if $method.title
     title='$method.title',
 #end if
@@ -1112,10 +1128,10 @@
         </param>
     </xml>
     <xml name="param_n_genes">
-        <param argument="n_genes" type="integer" min="0" value="10" label="Number of genes to show" help=""/>
+        <param argument="n_genes" type="integer" min="0" value="10" label="Number of genes to show" help="It is only used if you are not specifying certain variable names"/>
     </xml>
     <xml name="pl_dotplot">
-        <param argument="color_map" type="select" label="Color palette">
+        <param argument="color_map" type="select" optional="true" label="Color palette">
             <expand macro="matplotlib_pyplot_colormap"/>
         </param>
         <param argument="dot_max" type="float" value="" min="0" max="1" optional="true" label="Maximum dot size" help="If none, the maximum dot size is set to the maximum fraction value found (e.g. 0.6). If given, the value should be a number between 0 and 1. All fractions larger than dot_max are clipped to this value."/>
@@ -1123,7 +1139,9 @@
         <expand macro="section_matplotlib_pyplot_scatter"/>
     </xml>
     <token name="@CMD_pl_dotplot@"><![CDATA[
+    #if $method.color_map
     color_map='$method.color_map',
+    #end if
     #if str($method.dot_max) != ''
     dot_max=$method.dot_max,
     #end if
@@ -1174,17 +1192,19 @@
     <token name="@CMD_pl_heatmap@"><![CDATA[
     swap_axes=$method.swap_axes,
     show_gene_labels=$method.show_gene_labels,
+    #if $method.matplotlib_pyplot_imshow.cmap
     cmap='$method.matplotlib_pyplot_imshow.cmap',
+    #end if
     #if str($method.matplotlib_pyplot_imshow.interpolation) != 'None'
     interpolation='$method.matplotlib_pyplot_imshow.interpolation',
     #end if
-    #if $method.matplotlib_pyplot_imshow.alpha
+    #if str($method.matplotlib_pyplot_imshow.alpha) != ''
     alpha=$method.matplotlib_pyplot_imshow.alpha,
     #end if
-    #if $method.matplotlib_pyplot_imshow.vmin
+    #if str($method.matplotlib_pyplot_imshow.vmin) != ''
     vmin=$method.matplotlib_pyplot_imshow.vmin,
     #end if
-    #if $method.matplotlib_pyplot_imshow.vmax
+    #if str($method.matplotlib_pyplot_imshow.vmax) != ''
     vmax=$method.matplotlib_pyplot_imshow.vmax,
     #end if
     origin='$method.matplotlib_pyplot_imshow.origin'
@@ -1197,10 +1217,8 @@
     </xml>
     <token name="@CMD_pl_rank_genes_groups_ext@"><![CDATA[
     @CMD_params_groups@
-    #if str($method.n_genes) != ''
     n_genes=$method.n_genes,
-    #end if
-    #if str($method.key) != ''
+    #if $method.key
     key='$method.key',
     #end if
     ]]>
@@ -1208,7 +1226,7 @@
     <xml name="pl_matrixplot">
         <expand macro="param_swap_axes"/>
         <section name="matplotlib_pyplot_pcolor" title="Parameters for matplotlib.pyplot.pcolor">
-            <param argument="cmap" type="select" label="Color palette">
+            <param argument="cmap" type="select" optional="true" label="Color palette">
                 <expand macro="seaborn_color_palette_options"/>
             </param>
             <param argument="vmin" type="float" value="" optional="true" label="Minimum value to anchor the colormap" help=""/>
@@ -1220,15 +1238,19 @@
     </xml>
     <token name="@CMD_pl_matrixplot@"><![CDATA[
     swap_axes=$method.swap_axes,
+    #if $method.matplotlib_pyplot_pcolor.cmap
     cmap='$method.matplotlib_pyplot_pcolor.cmap',
-    #if $method.matplotlib_pyplot_pcolor.vmin
+    #end if
+    #if str($method.matplotlib_pyplot_pcolor.vmin) != ''
     vmin=$method.matplotlib_pyplot_pcolor.vmin,
     #end if
-    #if $method.matplotlib_pyplot_pcolor.vmax
+    #if str($method.matplotlib_pyplot_pcolor.vmax) != ''
     vmax=$method.matplotlib_pyplot_pcolor.vmax,
     #end if
-    edgecolors='$method.matplotlib_pyplot_pcolor.edgecolors',
-    #if $method.matplotlib_pyplot_pcolor.alpha
+    #if $method.matplotlib_pyplot_pcolor.edgecolors
+    ec='$method.matplotlib_pyplot_pcolor.edgecolors',
+    #end if
+    #if str($method.matplotlib_pyplot_pcolor.alpha) != ''
     alpha=$method.matplotlib_pyplot_pcolor.alpha,
     #end if
     snap=$method.matplotlib_pyplot_pcolor.snap
@@ -1240,7 +1262,7 @@
             <expand macro="conditional_stripplot"/>
             <expand macro="param_scale"/>
         </section>
-        <param argument="row_palette" type="select" label="Colors to use in each of the stacked violin plots">
+        <param argument="row_palette" type="select" optional="true" label="Colors to use in each of the stacked violin plots">
             <option value="muted">muted</option>
             <expand macro="seaborn_color_palette_options"/>
         </param>
@@ -1255,7 +1277,9 @@
     swap_axes=$method.swap_axes,
     @CMD_conditional_stripplot@
     scale='$method.violin_plot.scale',
+    #if $method.row_palette
     row_palette='$method.row_palette',
+    #end if
     #if str($method.standard_scale) != 'None'
     standard_scale='$method.standard_scale',
     #end if
--- a/plot.xml	Wed Sep 22 21:07:11 2021 +0000
+++ b/plot.xml	Wed Jul 31 18:07:15 2024 +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="@TOOL_VERSION@+galaxy@VERSION_SUFFIX@" 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,23 +21,44 @@
 
 #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 str($method.type.color) != ''
+    #if $method.type.type == 'xy':
+    x=x_field,
+    y=y_field,
+    #if $method.type.color
     color='$method.type.color',
-	  #end if
-        #if str('$method.type.layers.use_layers') == 'true'
+    #end if
+    #if str('$method.type.layers.use_layers') == 'true'
     layers=('$method.type.layers.layer_x', '$method.type.layers.layer_y', '$method.type.layers.layer_color'),
-        #end if
+    #end if
     #else
     basis='$method.type.basis',
-        #if str($method.type.color) != ''
-            #set $color = ([x.strip() for x in str($method.type.color).split(',')])
+    #if $method.type.color
+        #set $color = ([x.strip() for x in str($method.type.color).split(',')])
     color=$color,
-        #end if
+    #end if
     #end if
     use_raw=$method.use_raw,
     sort_order=$method.sort_order,
@@ -45,10 +66,10 @@
     @CMD_params_pl_components@
     projection='$method.plot.projection',
     legend_loc='$method.plot.legend_loc',
-    #if $method.plot.palette != 'default'
+    #if $method.plot.palette
     palette=['$method.plot.palette'],
     #end if
-    #if $method.plot.color_map != 'None'
+    #if $method.plot.color_map
     color_map='$method.plot.color_map',
     #end if
     @CMD_param_legend_fontsize@
@@ -60,7 +81,7 @@
 #else if $method.method == 'pl.heatmap'
 sc.pl.heatmap(
     @CMD_param_plot_inputs@
-    #if str($method.gene_symbols) != ''
+    #if $method.gene_symbols
     gene_symbols='$method.gene_symbols',
     #end if
     @CMD_params_inputs@
@@ -70,7 +91,7 @@
 #else if $method.method == 'pl.dotplot'
 sc.pl.dotplot(
     @CMD_param_plot_inputs@
-    #if str($method.gene_symbols) != ''
+    #if $method.gene_symbols
     gene_symbols='$method.gene_symbols',
     #end if
     @CMD_params_inputs@
@@ -102,7 +123,7 @@
     #if $method.xlabel
     xlabel='$method.xlabel',
     #end if
-    #if $method.rotation
+    #if str($method.rotation) != ''
     rotation=$method.rotation,
     #end if
     @CMD_params_seaborn_violinplot@)
@@ -110,7 +131,7 @@
 #else if $method.method == 'pl.stacked_violin'
 sc.pl.stacked_violin(
     @CMD_param_plot_inputs@
-    #if str($method.gene_symbols) != ''
+    #if $method.gene_symbols
     gene_symbols='$method.gene_symbols',
     #end if
     @CMD_params_inputs@
@@ -120,7 +141,7 @@
 #else if $method.method == 'pl.matrixplot'
 sc.pl.matrixplot(
     @CMD_param_plot_inputs@
-    #if str($method.gene_symbols) != ''
+    #if $method.gene_symbols
     gene_symbols='$method.gene_symbols',
     #end if
     @CMD_params_inputs@
@@ -135,7 +156,7 @@
     adata=adata,
     #end if
     show=False,
-    #if str($method.obs_keys) != ''
+    #if $method.obs_keys
     obs_keys='$method.obs_keys',
     #end if
     use_raw=$method.use_raw,
@@ -154,13 +175,13 @@
 sc.pl.highest_expr_genes(
     @CMD_param_plot_inputs@
     n_top=$method.n_top,
-    #if str($method.gene_symbols) != ''
+    #if $method.gene_symbols
     gene_symbols='$method.gene_symbols',
     #end if
-    #if str($method.setseaborn_boxplot.color) != ''
+    #if $method.setseaborn_boxplot.color
     color='$method.setseaborn_boxplot.color',
     #end if
-    #if str($method.setseaborn_boxplot.palette) != 'None'
+    #if $method.setseaborn_boxplot.palette
     palette='$method.setseaborn_boxplot.palette',
     #end if
     saturation=$method.setseaborn_boxplot.saturation)
@@ -248,7 +269,7 @@
 sc.pl.draw_graph(
     @CMD_param_plot_inputs@
     @CMD_param_color@
-    #if str($method.gene_symbols) != ''
+    #if $method.gene_symbols
     gene_symbols='$method.gene_symbols',
     #end if
     use_raw=$method.use_raw,
@@ -265,10 +286,33 @@
     @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 $method.key
+    key='$method.key',
+    #end if
+    #if $method.groupby
+    groupby='$method.groupby',
+    #end if
+    #if $method.group
+    #set $group = ([x.strip() for x in str($method.group).split(',')])
+    group=$group,
+    #end if
+    #if $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@
-    #if str($method.color_map) != ''
+    #if $method.color_map
     color_map='$method.color_map'
     #end if
     )
@@ -277,7 +321,7 @@
 sc.pl.dpt_timeseries(
     @CMD_param_plot_inputs@
     #if $method.heatmap.as_heatmap == "True"
-        #if str($method.heatmap.color_map) != ''
+        #if $method.heatmap.color_map
     color_map='$method.heatmap.color_map',
         #end if
     #end if
@@ -301,15 +345,15 @@
     #set $keys=([x.strip() for x in str($method.keys).split(',')])
     keys=$keys,
     use_raw=$method.use_raw,
-    #if str($method.annotations) != ''
+    #if $method.annotations
         #set $annotations=([x.strip() for x in str($method.annotations).split(',')])
     annotations=$annotations,
     #end if
-    #if str($method.color_map) != ''
+    #if $method.color_map
     color_map='$method.color_map',
     #end if
     n_avg=$method.n_avg,
-    #if str($method.annotations) != ''
+    #if $method.annotations
     groups_key='$method.groups_key',
     #end if
     as_heatmap=$method.as_heatmap,
@@ -323,7 +367,7 @@
     @CMD_param_plot_inputs@
     @CMD_params_groups@
     n_genes=$method.n_genes,
-    #if str($method.gene_symbols) != ''
+    #if $method.gene_symbols
     gene_symbols='$method.gene_symbols',
     #end if
     fontsize=$method.fontsize,
@@ -340,7 +384,7 @@
         #set $gene_names = ([x.strip() for x in str($method.genes.gene_names).split(',')])
     gene_names=$gene_names,
     #end if
-    #if str($method.gene_symbols) != ''
+    #if $method.gene_symbols
     gene_symbols='$method.gene_symbols',
     #end if
     use_raw=$method.use_raw,
@@ -358,6 +402,9 @@
 sc.pl.rank_genes_groups_dotplot(
     @CMD_param_plot_inputs@
     @CMD_pl_rank_genes_groups_ext@
+    #if $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 $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 $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 $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">
@@ -1036,14 +1116,14 @@
                     <has_text_matching expression="color_map='hot'"/>
                     <has_text_matching expression="dot_max=0.7"/>
                     <has_text_matching expression="dot_min=0.1"/>
-                    <has_text_matching expression="linewidths=0.0"/>
-                    <has_text_matching expression="edgecolors='face'"/>
+                    <has_text_matching expression="lw=0.0"/>
+                    <has_text_matching expression="ec='face'"/>
                 </assert_contents>
             </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">
@@ -1270,14 +1350,14 @@
                     <has_text_matching expression="dendrogram=True"/>
                     <has_text_matching expression="swap_axes=True"/>
                     <has_text_matching expression="cmap='viridis'"/>
-                    <has_text_matching expression="edgecolors='face'"/>
+                    <has_text_matching expression="ec='face'"/>
                     <has_text_matching expression="snap=False"/>
                 </assert_contents>
             </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">
@@ -1452,14 +1532,14 @@
                     <has_text_matching expression="ncols=2" />
                     <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="lw=0.0" />
+                    <has_text_matching expression="ec='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">
@@ -1590,14 +1670,14 @@
                     <has_text_matching expression="ncols=4"/>
                     <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="lw=0.0"/>
+                    <has_text_matching expression="ec='face'"/>
                 </assert_contents>
             </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">
@@ -1650,14 +1730,14 @@
                     <has_text_matching expression="ncols=4"/>
                     <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="lw=0.0"/>
+                    <has_text_matching expression="ec='face'"/>
                 </assert_contents>
             </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">
@@ -1701,14 +1781,14 @@
                     <has_text_matching expression="ncols=4"/>
                     <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="lw=0.0"/>
+                    <has_text_matching expression="ec='face'"/>
                 </assert_contents>
             </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">
@@ -1757,28 +1837,54 @@
                     <has_text_matching expression="ncols=4"/>
                     <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="lw=0.0"/>
+                    <has_text_matching expression="ec='face"/>
                 </assert_contents>
             </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"/>
@@ -1927,18 +2053,19 @@
                     <has_text_matching expression="use_raw=False"/>
                     <has_text_matching expression="dendrogram=False"/>
                     <has_text_matching expression="color_map='viridis'"/>
-                    <has_text_matching expression="linewidths=0.0"/>
-                    <has_text_matching expression="edgecolors='face'"/>
+                    <has_text_matching expression="lw=0.0"/>
+                    <has_text_matching expression="ec='face'"/>
                 </assert_contents>
             </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"/>
@@ -1998,18 +2126,19 @@
                     <has_text_matching expression="dendrogram=False"/>
                     <has_text_matching expression="swap_axes=False"/>
                     <has_text_matching expression="cmap='viridis'"/>
-                    <has_text_matching expression="edgecolors='face'"/>
+                    <has_text_matching expression="ec='face'"/>
                     <has_text_matching expression="snap=False"/>
                 </assert_contents>
             </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://scanpy.readthedocs.io/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://scanpy.readthedocs.io/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://scanpy.readthedocs.io/en/stable/api/generated/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://scanpy.readthedocs.io/en/stable/api/generated/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://scanpy.readthedocs.io/en/stable/api/generated/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://scanpy.readthedocs.io/en/stable/api/generated/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://scanpy.readthedocs.io/en/stable/api/generated/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://scanpy.readthedocs.io/en/stable/api/generated/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://scanpy.readthedocs.io/en/stable/api/generated/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://scanpy.readthedocs.io/en/stable/api/generated/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://scanpy.readthedocs.io/en/stable/api/generated/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://scanpy.readthedocs.io/en/stable/api/generated/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://scanpy.readthedocs.io/en/stable/api/generated/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://scanpy.readthedocs.io/en/stable/api/generated/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://scanpy.readthedocs.io/en/stable/api/generated/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://scanpy.readthedocs.io/en/stable/api/generated/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://scanpy.readthedocs.io/en/stable/api/generated/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://scanpy.readthedocs.io/en/stable/api/generated/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://scanpy.readthedocs.io/en/stable/api/generated/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://scanpy.readthedocs.io/en/stable/api/generated/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://scanpy.readthedocs.io/en/stable/api/generated/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://scanpy.readthedocs.io/en/stable/api/generated/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/cosg.rank_genes_groups.newton-cg.pbmc68k_highly_reduced_1.h5ad has changed
Binary file test-data/external.pp.magic.all_genes.krumsiek11.h5ad has changed
Binary file test-data/external.pp.magic.pca_only.krumsiek11.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
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/tl.rank_genes_groups.newton-cg.pbmc68k_highly_reduced_marker_1.tsv	Wed Jul 31 18:07:15 2024 +0000
@@ -0,0 +1,11 @@
+	0	1	2	3	4	5	6	7	8	9	10	11	12	13	14	15	16	17	18	19	20	21	22	23	24	25	26	27	28	29	30	31	32	33	34	35	36	37	38	39	40	41	42	43	44	45	46	47	48	49
+CD14+ Monocyte	PILRA	PSAP	CD68	TMEM176B	FTL	NPC2	LST1	FCGR3A	FCER1G	CEBPB	FCN1	SERPINA1	OAZ1	CFD	FTH1	HCK	AIF1	SAT1	CTSS	S100A11	MS4A7	TYROBP	COTL1	STXBP2	RP11-290F20.3	S100A4	IFITM2	SPI1	DUSP1	SESN2	IFITM3	MPP1	GALE	CORO1B	RP11-390E23.6	VIMP	RSBN1L-AS1	CHD4	CFP	GSTP1	PFN1	FCGRT	ADTRP	ARHGDIB	AMICA1	HLA-DRB5	CST3	GRN	HLA-DPA1	SSR3
+CD19+ B	TNFRSF13B	CD79B	SMARCB1	PNOC	CCDC50	AL928768.3	BANK1	MS4A1	CD79A	ISG20	IGLL5	TNFRSF17	KIAA0125	TPD52	PEBP1	FKBP11	CCDC132	SUB1	POU2AF1	MZB1	PTPRCAP	UBE2J1	BLK	SPIB	DERL3	FAM63B	MPHOSPH9	IGJ	FCRLA	XBP1	NCF1	SSR3	CD52	TSHZ2	PDLIM1	VIMP	SSR4	S1PR4	SELL	HMGA1	NUCB2	JUN	CD27	ARHGDIB	GYPC	CALR	ADTRP	BTG1	EXOG	RARRES3
+CD34+	PRSS57	C19orf77	SPINK2	RP11-620J15.3	SNHG7	CYTL1	EGFL7	NGFRAP1	SOX4	NFE2	EGR1	RP3-467N11.1	H1FX	CDK6	SERPINB1	SPINT2	HMGA1	IL1B	NUCB2	RPLP0	IGFBP7	RPLP1	ATXN7L3B	RPS3	C1orf228	KIAA0125	RPL3	SYPL1	CD63	LDHB	SEPT1	JUN	FAM101B	PRKCQ-AS1	MATK	PEBP1	SELL	ITM2A	SSR3	SPON2	XBP1	UBE2J1	VIMP	GYPC	STK17A	STMN1	VIM	MZB1	HOPX	CD99
+CD4+/CD25 T Reg	IL32	SPOCK2	ACTG1	CD2	CD3D	GPR171	ARHGDIB	ACOX1	MAL	SIT1	GIMAP4	AES	CD52	SEPT1	TMSB10	LAT	STMN1	LINC00402	CD27	TSHZ2	S1PR4	CD3E	PFN1	CD99	AQP3	PTPRCAP	CD3G	LY9	LCK	CD247	S100A4	CCR7	TTC39C	CORO1B	MPHOSPH9	FYB	RPSA	FLT3LG	B2M	GIMAP7	PRKCQ-AS1	SELL	BTG1	CCDC132	GYPC	DENND2D	LDHB	IL7R	ITM2A	RPLP0
+CD4+/CD45RA+/CD25- Naive T	EAF2	GNG7	SSR4	CALR	DERL3	MANF	IGJ	XBP1	ATXN7L3B	SSR3	UBE2J1	CD79A	MZB1	RP3-467N11.1	TNFRSF17	NCF1	CDK6	SUB1	POU2AF1	AL928768.3	FKBP11	VIMP	GYPC	JUN	CD27	PEBP1	SMARCB1	FLT3LG	RPLP1	RPLP0	CCDC50	ISG20	IGLL5	HCST	GSTP1	GPX1	CD52	VIM	PTPRCAP	FCGRT	CD74	B2M	RPL3	CYTL1	SPINK2	PRSS57	C19orf77	RP11-620J15.3	FAM101B	CCDC132
+CD4+/CD45RO+ Memory	RNF138	NOSIP	IFITM1	LCK	RARRES3	ALOX5AP	FAM63B	RAB3IP	GZMK	CD3G	SEPT1	LDHB	SELL	CD3D	EXOG	RPSA	CD247	AES	CD52	TMSB10	NUCB2	DENND2D	RPL3	RPLP1	ACTG1	FYB	GIMAP7	CORO1B	LY9	CD7	PFN1	RPS3	GYPC	CD2	ARHGDIB	IL32	RPLP0	CD99	CD3E	GIMAP4	HCST	B2M	LAT	ISG20	ITM2A	FKBP11	SERPINB1	STK17A	CCR7	PTPRCAP
+CD56+ NK	CST7	SPON2	HOPX	GNLY	NKG7	CTSW	KLRC2	CD7	MATK	PCIF1	CLIC3	FGFBP2	SYPL1	GZMB	C9orf142	PRF1	CD247	HCST	GZMA	GZMH	STMN1	ALOX5AP	CD63	CD99	IGFBP7	GZMM	CCL5	B2M	DENND2D	GIMAP7	RARRES3	SIT1	IFITM1	PFN1	EXOG	XBP1	IFITM2	GIMAP4	VIMP	STK17A	LCK	GZMK	SEPT1	SSR3	CD8A	CD3G	SPOCK2	RPS3	LDHB	IL32
+CD8+ Cytotoxic T	FAM101B	ADTRP	GZMK	HCST	LAT	EGR1	CD8B	CCL5	RPL3	LINC00402	FGFBP2	GZMM	RPS3	CD3E	GYPC	DENND2D	C9orf142	GZMA	SEPT1	JUN	FYB	CD8A	SELL	ALOX5AP	CD3G	STK17A	AQP3	C1orf228	CD3D	HOPX	NKG7	CD2	NGFRAP1	RPLP1	RPSA	CCR7	IL7R	SPON2	PRF1	RARRES3	PRKCQ-AS1	FKBP11	MANF	CTSW	GNLY	CD27	LDHB	MAL	LTB	RPLP0
+CD8+/CD45RA+ Naive Cytotoxic	RP11-291B21.2	CD8A	CD8B	RSBN1L-AS1	GIMAP5	GZMM	GALE	CCR7	STK17A	RAB3IP	GZMH	GIMAP7	CD3E	C1orf228	LCK	CCL5	PEBP1	CD27	GYPC	LDHB	RNF34	CD99	CD3G	PFN1	IL7R	CD2	C9orf142	TMSB10	NGFRAP1	S1PR4	ITM2A	CD7	RPS3	IL32	FYB	IFITM1	CD52	LAT	GIMAP4	MAL	STMN1	NOSIP	RARRES3	SPOCK2	ACTG1	PRF1	CD3D	RPLP1	SELL	GZMA
+Dendritic	HLA-DQB1	CST3	HLA-DRB1	HLA-DQA2	HLA-DQA1	LYZ	HLA-DPB1	HLA-DPA1	HLA-DMA	HLA-DRA	VIM	CD74	ALDH2	FCER1A	GPX1	HLA-DRB5	LGALS2	MNDA	FCGRT	GRN	HLA-DMB	FOS	CPVL	CLEC10A	AMICA1	CFP	LY86	GSTP1	RP11-473M20.7	IL1B	GSN	SPINT2	CCDC163P	IGFBP7	EXOG	DUSP1	CD63	COTL1	FTH1	SPI1	TYROBP	SPIB	S100A11	OAZ1	CTSS	CCDC50	AIF1	SERPINB1	TMSB10	PCIF1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/tl.rank_genes_groups.newton-cg.pbmc68k_highly_reduced_marker_filtered_1.tsv	Wed Jul 31 18:07:15 2024 +0000
@@ -0,0 +1,11 @@
+	0	1	2	3	4	5	6	7	8	9	10	11	12	13	14	15	16	17	18	19	20	21	22	23	24	25	26	27	28	29	30	31	32	33
+CD14+ Monocyte	PILRA	PSAP	CD68	TMEM176B	FTL	NPC2	LST1	FCGR3A	FCER1G	CEBPB	FCN1	SERPINA1	OAZ1	CFD	FTH1	HCK	AIF1	SAT1	CTSS	S100A11	TYROBP	COTL1	S100A4	SPI1	DUSP1									
+CD19+ B	TNFRSF13B	CD79B	SMARCB1	PNOC	CCDC50	AL928768.3	BANK1	MS4A1	CD79A	ISG20	IGLL5	TNFRSF17	KIAA0125	TPD52	PEBP1	FKBP11	SUB1	POU2AF1	MZB1	PTPRCAP	DERL3	XBP1	CD52											
+CD34+	PRSS57	C19orf77	SPINK2	RP11-620J15.3	SNHG7	CYTL1	EGFL7	NGFRAP1	SOX4	NFE2	EGR1	RP3-467N11.1	H1FX	CDK6	SERPINB1	SPINT2	HMGA1	IL1B	NUCB2	RPLP0	IGFBP7	RPLP1	ATXN7L3B	RPS3	KIAA0125	RPL3	SYPL1	LDHB	SEPT1	FAM101B				
+CD4+/CD25 T Reg	IL32	SPOCK2	ACTG1	CD2	CD3D	ARHGDIB	GIMAP4	AES	CD52	SEPT1	TMSB10	LAT	STMN1	CD27	CD3E	PFN1	CD99	PTPRCAP	CD3G	LCK	CD247													
+CD4+/CD45RA+/CD25- Naive T																																		
+CD4+/CD45RO+ Memory	RNF138	NOSIP	IFITM1	LCK	RARRES3	ALOX5AP	RAB3IP	GZMK	CD3G	SEPT1	LDHB	SELL	CD3D	EXOG	RPSA	CD247	AES	CD52	TMSB10	RPL3														
+CD56+ NK	CST7	SPON2	HOPX	GNLY	NKG7	CTSW	KLRC2	CD7	MATK	PCIF1	CLIC3	FGFBP2	SYPL1	GZMB	C9orf142	PRF1	CD247	HCST	GZMA	GZMH	STMN1	ALOX5AP	CD63	CD99	IGFBP7	GZMM	CCL5	B2M	DENND2D	GIMAP7	RARRES3	SIT1	PFN1	XBP1
+CD8+ Cytotoxic T	FAM101B	ADTRP	GZMK	HCST	LAT	EGR1	CD8B	CCL5	RPL3	LINC00402	FGFBP2	GZMM	RPS3	CD3E	GYPC	C9orf142	SEPT1	SELL	CD3G	CD3D	HOPX	NGFRAP1												
+CD8+/CD45RA+ Naive Cytotoxic	RP11-291B21.2	CD8A	CD8B	RSBN1L-AS1	GIMAP5	GZMM	GALE	CCR7	STK17A	RAB3IP	GIMAP7	CD3E	LCK	PEBP1	CD27	LDHB	CD99	CD3G	C9orf142	NGFRAP1	IL32													
+Dendritic	HLA-DQB1	CST3	HLA-DRB1	HLA-DQA2	HLA-DQA1	HLA-DPB1	HLA-DPA1	HLA-DRA	CD74																									
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