diff --git a/docs/notebooks b/docs/notebooks index 5fa07d4b6..6d7c9bf03 160000 --- a/docs/notebooks +++ b/docs/notebooks @@ -1 +1 @@ -Subproject commit 5fa07d4b68f14ee9a26506fb56d87cba4f25f505 +Subproject commit 6d7c9bf032fa395880ea8032c866143fe7dccb19 diff --git a/pyproject.toml b/pyproject.toml index 71373bdca..8b2d1a50c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -89,6 +89,7 @@ test = [ "pytest-cov>=6", "pytest-mock>=3.14", "pytest-xdist", + "scvelo>=0.3", ] docs = [ "furo>=2024.8.6", @@ -246,5 +247,7 @@ ignore_roles = [ ] [tool.uv] +# Include test deps in `uv sync` so local dev has them (e.g. adjusttext, pytest) +default-groups = [ "dev", "test" ] # pygpcca 1.0.4 incorrectly pins jinja2==3.0.3; override until next release override-dependencies = [ "jinja2>=3.1" ] diff --git a/src/cellrank/_settings.py b/src/cellrank/_settings.py index 5103e96d0..b238a6733 100644 --- a/src/cellrank/_settings.py +++ b/src/cellrank/_settings.py @@ -19,7 +19,7 @@ def _setup_logger() -> logging.Logger: """Set up the ``"cellrank"`` logger with a :class:`~rich.logging.RichHandler`.""" root = logging.getLogger(_LOGGER_NAME) if not root.handlers: - console = Console(stderr=True, force_terminal=True) + console = Console(stderr=False) if console.is_jupyter: console.is_jupyter = False handler = RichHandler( @@ -32,6 +32,7 @@ def _setup_logger() -> logging.Logger: ) root.addHandler(handler) root.setLevel(logging.INFO) + root.propagate = False return root diff --git a/src/cellrank/estimators/mixins/_fate_probabilities.py b/src/cellrank/estimators/mixins/_fate_probabilities.py index 4e8aab7a7..31be9e671 100644 --- a/src/cellrank/estimators/mixins/_fate_probabilities.py +++ b/src/cellrank/estimators/mixins/_fate_probabilities.py @@ -243,6 +243,7 @@ def plot_fate_probabilities( color: str | None = None, mode: Literal["embedding", "time"] = PlotMode.EMBEDDING, time_key: str | None = None, + basis: str = "umap", same_plot: bool = True, title: str | Sequence[str] | None = None, cmap: str = "viridis", @@ -260,6 +261,8 @@ def plot_fate_probabilities( Whether to plot the probabilities in an embedding or along the pseudotime. time_key Key in :attr:`~anndata.AnnData.obs` where pseudotime is stored. Only used when ``mode = 'time'``. + basis + Key in :attr:`~anndata.AnnData.obsm` for the embedding to use, e.g. ``'umap'`` or ``'tsne'``. title Title of the plot. same_plot @@ -268,7 +271,7 @@ def plot_fate_probabilities( cmap Colormap for continuous annotations. kwargs - Keyword arguments for :func:`~scvelo.pl.scatter`. + Keyword arguments for :func:`~scanpy.pl.embedding`. Returns ------- @@ -285,6 +288,7 @@ def plot_fate_probabilities( color=color, mode=mode, time_key=time_key, + basis=basis, same_plot=same_plot, title=title, cmap=cmap, diff --git a/src/cellrank/estimators/mixins/_lineage_drivers.py b/src/cellrank/estimators/mixins/_lineage_drivers.py index e2f3bbcbe..c063457c0 100644 --- a/src/cellrank/estimators/mixins/_lineage_drivers.py +++ b/src/cellrank/estimators/mixins/_lineage_drivers.py @@ -10,7 +10,6 @@ import numpy as np import pandas as pd import scanpy as sc -import scvelo as scv from anndata import AnnData, Raw from matplotlib import patheffects, rc_context from matplotlib.axes import Axes @@ -235,7 +234,7 @@ def plot_lineage_drivers( with the actual values. %(plotting)s kwargs - Keyword arguments for :func:`~scvelo.pl.scatter`. + Keyword arguments for :func:`~scanpy.pl.embedding`. Returns ------- @@ -286,13 +285,17 @@ def prepare_format( ) axes = np.ravel([axes]) + basis = kwargs.pop("basis", "umap") + # scvelo compat: "right" means "right margin" in scanpy + if kwargs.get("legend_loc") == "right": + kwargs["legend_loc"] = "right margin" _i = 0 for _i, (gene, ax) in enumerate(zip(genes.index, axes)): data = genes.loc[gene] - scv.pl.scatter( + sc.pl.embedding( self.adata, + basis=basis, color=gene, - ncols=ncols, use_raw=use_raw, ax=ax, show=False, diff --git a/src/cellrank/estimators/terminal_states/_term_states_estimator.py b/src/cellrank/estimators/terminal_states/_term_states_estimator.py index 72511e842..b63de011b 100644 --- a/src/cellrank/estimators/terminal_states/_term_states_estimator.py +++ b/src/cellrank/estimators/terminal_states/_term_states_estimator.py @@ -4,10 +4,11 @@ from collections.abc import Sequence from typing import Any, Literal +import matplotlib.pyplot as plt import numpy as np import pandas as pd +import scanpy as sc import scipy.sparse as sp -import scvelo as scv from anndata import AnnData from matplotlib.colors import to_hex from pandas.api.types import infer_dtype @@ -25,6 +26,7 @@ _convert_to_categorical_series, _merge_categorical_series, _unique_order_preserving, + save_fig, ) from cellrank.estimators._base_estimator import BaseEstimator from cellrank.estimators.mixins._utils import ( @@ -35,6 +37,7 @@ shadow, ) from cellrank.kernels._base_kernel import KernelExpression +from cellrank.pl._utils import _plot_color_gradients, _plot_time_scatter logger = logging.getLogger(__name__) __all__ = ["TermStatesEstimator"] @@ -306,6 +309,7 @@ def plot_macrostates( discrete: bool = True, mode: Literal["embedding", "time"] = PlotMode.EMBEDDING, time_key: str = "latent_time", + basis: str = "umap", same_plot: bool = True, title: str | Sequence[str] | None = None, cmap: str = "viridis", @@ -332,6 +336,8 @@ def plot_macrostates( Whether to plot the probabilities in an embedding or along the pseudotime. time_key Key in :attr:`~anndata.AnnData.obs` where pseudotime is stored. Only used when ``mode = {m.TIME!r}``. + basis + Key in :attr:`~anndata.AnnData.obsm` for the embedding to use, e.g. ``'umap'`` or ``'tsne'``. title Title of the plot. same_plot @@ -340,7 +346,7 @@ def plot_macrostates( cmap Colormap for continuous annotations. kwargs - Keyword arguments for :func:`~scvelo.pl.scatter`. + Keyword arguments for :func:`~scanpy.pl.embedding`. Returns ------- @@ -377,6 +383,7 @@ def plot_macrostates( _title=name, states=states, color=color, + basis=basis, same_plot=same_plot, title=title, cmap=cmap, @@ -390,6 +397,7 @@ def plot_macrostates( color=color, mode=mode, time_key=time_key, + basis=basis, same_plot=same_plot, title=title, cmap=cmap, @@ -403,6 +411,7 @@ def _plot_discrete( _title: str | None = None, states: str | Sequence[str] | None = None, color: str | None = None, + basis: str = "umap", title: str | Sequence[str] | None = None, same_plot: bool = True, cmap: str = "viridis", @@ -434,20 +443,24 @@ def _plot_discrete( same_plot = same_plot or len(names) == 1 kwargs.setdefault("legend_loc", "on data") - kwargs["color_map"] = cmap + # scvelo compat: "right" means "right margin" in scanpy + if kwargs.get("legend_loc") == "right": + kwargs["legend_loc"] = "right margin" + kwargs.pop("color_map", None) + kwargs.pop("dpi", None) # handled at figure level, not by sc.pl.embedding + save = kwargs.pop("save", None) + show = kwargs.pop("show", None) + kwargs["cmap"] = cmap + basis = kwargs.pop("basis", basis) + size = kwargs.get("size", 120_000 / self.adata.n_obs) # fmt: off with RandomKeys(self.adata, n=1 if same_plot else len(states), where="obs") as keys: if same_plot: - outline = _data.cat.categories.to_list() - _data = _data.cat.add_categories(["nan"]).fillna("nan") - states.append("nan") - color_mapper["nan"] = "#dedede" self.adata.obs[keys[0]] = _data self.adata.uns[f"{keys[0]}_colors"] = [color_mapper[name] for name in states] title = _title if title is None else title else: - outline = None for key, cat in zip(keys, states): self.adata.obs[key] = _data.cat.set_categories([cat]) self.adata.uns[f"{key}_colors"] = [color_mapper[cat]] @@ -456,13 +469,43 @@ def _plot_discrete( if isinstance(title, str): title = [title] - scv.pl.scatter( + kwargs.setdefault("na_color", "#dedede") + kwargs.setdefault("na_in_legend", False) + axes = sc.pl.embedding( self.adata, + basis=basis, color=color + keys, title=color + title, - add_outline=outline, + show=False, + return_fig=False, **kwargs, ) + + # Overlay state cells with outlines so they appear on top of NaN cells + if same_plot: + axes_list = [axes] if not isinstance(axes, list | np.ndarray) else list(np.ravel(axes)) + mask = _data.notna() + if mask.any(): + adata_sub = self.adata[mask].copy() + for ax, key in zip(axes_list[len(color):], keys): + ax_title = ax.get_title() + sc.pl.embedding( + adata_sub, + basis=basis, + color=key, + add_outline=True, + show=False, + return_fig=False, + ax=ax, + legend_loc="none", + size=size, + ) + ax.set_title(ax_title) + + if save is not None: + save_fig(plt.gcf(), save) + if show is True or (show is None and save is None): + plt.show() # fmt: on def _plot_continuous( @@ -474,6 +517,7 @@ def _plot_continuous( color: str | None = None, mode: Literal["embedding", "time"] = PlotMode.EMBEDDING, time_key: str = "latent_time", + basis: str = "umap", title: str | Sequence[str] | None = None, same_plot: bool = True, cmap: str = "viridis", @@ -487,7 +531,6 @@ def _plot_continuous( states = _data.names if not len(states): raise ValueError("No lineages have been selected.") - is_singleton = _data.shape[1] == 1 _data = _data[states].copy() if mode == "time" and same_plot: @@ -510,6 +553,10 @@ def _plot_continuous( # fmt: off color = [] if color is None else (color,) if isinstance(color, str) else color color = _unique_order_preserving(color) + basis = kwargs.pop("basis", basis) + kwargs.pop("color_map", None) + save = kwargs.pop("save", None) + show = kwargs.pop("show", None) if mode == PlotMode.TIME: kwargs.setdefault("legend_loc", "best") @@ -525,41 +572,47 @@ def _plot_continuous( if len(color) and len(color) not in (1, _data_X.shape[1]): raise ValueError(f"Expected `color` to be of length `1` or `{_data_X.shape[1]}`, " f"found `{len(color)}`.") - kwargs["x"] = self.adata.obs[time_key] - kwargs["y"] = list(_data_X.T) - kwargs["color"] = color if len(color) else None - kwargs["xlabel"] = [time_key] * len(states) - kwargs["ylabel"] = ["probability"] * len(states) + _plot_time_scatter( + self.adata, self.adata.obs[time_key].values, list(_data_X.T), + color=color if len(color) else None, + title=title, xlabel=time_key, ylabel="probability", cmap=cmap, + save=save, show=show, **kwargs, + ) elif mode == PlotMode.EMBEDDING: kwargs.setdefault("legend_loc", "on data") + # scvelo compat: "right" means "right margin" in scanpy + if kwargs.get("legend_loc") == "right": + kwargs["legend_loc"] = "right margin" + if same_plot: if color: # https://github.com/theislab/scvelo/issues/673 logger.warning("Ignoring `color` when `mode='embedding'` and `same_plot=True`") title = [_title] if title is None else title - kwargs["color_gradients"] = _data + _plot_color_gradients(self.adata, _data, basis=basis, title=title, + save=save, show=show, **kwargs) else: + kwargs.pop("dpi", None) # handled at figure level, not by sc.pl.embedding title = [f"{_title} {state}" for state in states] if title is None else title if isinstance(title, str): title = [title] title = color + title - kwargs["color"] = color + list(_data_X.T) + # Store probability arrays as temp obs columns (scanpy requires column names) + with RandomKeys(self.adata, n=_data_X.shape[1], where="obs") as prob_keys: + for key, col in zip(prob_keys, _data_X.T): + self.adata.obs[key] = col + sc.pl.embedding( + self.adata, basis=basis, color=color + list(prob_keys), + title=title, cmap=cmap, show=False, **kwargs, + ) + if save is not None: + save_fig(plt.gcf(), save) + if show is True or (show is None and save is None): + plt.show() else: raise NotImplementedError(f"Mode `{mode}` is not yet implemented.") # fmt: on - # e.g. a stationary distribution - if is_singleton and not np.allclose(_data_X, 1.0): - kwargs.setdefault("perc", [0, 95]) - _ = kwargs.pop("color_gradients", None) - - scv.pl.scatter( - self.adata, - title=title, - color_map=cmap, - **kwargs, - ) - def _set_categorical_labels( self, categories: pd.Series | dict[str, Any], diff --git a/src/cellrank/kernels/_cytotrace_kernel.py b/src/cellrank/kernels/_cytotrace_kernel.py index 852594f84..37599c888 100644 --- a/src/cellrank/kernels/_cytotrace_kernel.py +++ b/src/cellrank/kernels/_cytotrace_kernel.py @@ -57,8 +57,9 @@ class CytoTRACEKernel(PseudotimeKernel): -------- .. code-block:: - import scvelo as scv + import scanpy as sc import cellrank as cr + from cellmapper import CellMapper adata = cr.datasets.pancreas() @@ -66,18 +67,16 @@ class CytoTRACEKernel(PseudotimeKernel): sc.pp.normalize_total(adata) sc.pp.log1p(adata) sc.pp.highly_variable_genes(adata) + sc.pp.pca(adata) + sc.pp.neighbors(adata) - # CytoTRACE by default uses imputed data - a simple way to compute - # k-NN imputed data is to use scVelo's moments function. - # However, note that this function expects `spliced` counts because - # it's designed for RNA velocity, so we're using a simple hack here: - if 'spliced' not in adata.layers or 'unspliced' not in adata.layers: - adata.layers['spliced'] = adata.X - adata.layers['unspliced'] = adata.X - scv.pp.moments(adata) + # CytoTRACE by default uses imputed data. + adata.layers["imputed"] = ( + CellMapper(adata).map(layer_key="X", use_rep="X_pca").query_imputed.X.copy() + ) ctk = cr.kernels.CytoTRACEKernel(adata) - ckt = ctk.compute_cytotrace().compute_transition_matrix() + ctk = ctk.compute_cytotrace().compute_transition_matrix() """ def __init__( @@ -111,7 +110,7 @@ def _read_from_adata( @inject_docs(ct=CytoTRACEAggregation) def compute_cytotrace( self, - layer: str | None = "Ms", + layer: str | None = "imputed", aggregation: Literal["mean", "median", "hmean", "gmean"] = CytoTRACEAggregation.MEAN, use_raw: bool = False, n_genes: int = 200, diff --git a/src/cellrank/kernels/_velocity_kernel.py b/src/cellrank/kernels/_velocity_kernel.py index 6d748ffef..593261db6 100644 --- a/src/cellrank/kernels/_velocity_kernel.py +++ b/src/cellrank/kernels/_velocity_kernel.py @@ -103,7 +103,7 @@ def _read_from_adata( if np.any(nans): self._xdata = self._xdata[:, ~nans] self._vdata = self._vdata[:, ~nans] - W = _row_normalize_connectivities(self.adata) + W = _row_normalize_connectivities(self.connectivities) self._vexp, self._vvar = _knn_moments(W, self._vdata) self._vexp = self._vexp.astype(np.float64, copy=False) self._vvar = self._vvar.astype(np.float64, copy=False) diff --git a/src/cellrank/kernels/utils/_moments.py b/src/cellrank/kernels/utils/_moments.py index b14dee9dc..0488e47c4 100644 --- a/src/cellrank/kernels/utils/_moments.py +++ b/src/cellrank/kernels/utils/_moments.py @@ -1,14 +1,9 @@ """k-NN moment computation formerly imported from scVelo.""" -from __future__ import annotations - import warnings import numpy as np import scipy.sparse as sp -from anndata import AnnData - -__all__: list[str] = [] def _knn_moments( @@ -35,8 +30,8 @@ def _knn_moments( return mean, var -def _row_normalize_connectivities(adata: AnnData) -> sp.csr_matrix: - """Build a row-normalized binary connectivities matrix from *adata*. +def _row_normalize_connectivities(conn: sp.spmatrix) -> sp.csr_matrix: + """Build a row-normalized binary connectivities matrix. The transformation mirrors scVelo's ``get_connectivities``: binarize the graph, set the diagonal to 1 (self-loop), then @@ -44,14 +39,14 @@ def _row_normalize_connectivities(adata: AnnData) -> sp.csr_matrix: Parameters ---------- - adata - Must contain a neighbor graph in ``adata.obsp["connectivities"]``. + conn + Sparse connectivities matrix of shape ``(n_cells, n_cells)``. Returns ------- Row-normalized sparse matrix of shape ``(n_cells, n_cells)``. """ - C = adata.obsp["connectivities"].copy() + C = conn.copy() # binarize C = (C > 0).astype(np.float32) diff --git a/src/cellrank/kernels/utils/_plot_utils.py b/src/cellrank/kernels/utils/_plot_utils.py index 8fb31401e..8011b8fb8 100644 --- a/src/cellrank/kernels/utils/_plot_utils.py +++ b/src/cellrank/kernels/utils/_plot_utils.py @@ -1,7 +1,5 @@ """Private plotting utilities formerly imported from scVelo.""" -from __future__ import annotations - from typing import Any import matplotlib.pyplot as plt @@ -66,15 +64,19 @@ def _plot_outline( y: np.ndarray, *, outline_color: tuple[str, str] = ("black", "white"), + outline_width: tuple[float, float] = (0.3, 0.05), kwargs: dict[str, Any] | None = None, ax: Axes | None = None, **scatter_kwargs: Any, ) -> None: """Draw outlined scatter points using a double-scatter technique. - Draws three layers: a large background scatter (``outline_color[0]``), - a medium gap scatter (``outline_color[1]``), and optionally the caller - adds the actual data scatter on top. + Draws two layers: a large background scatter (``outline_color[0]``) and + a medium gap scatter (``outline_color[1]``). The caller typically draws + the actual data scatter on top. + + The outline sizes are computed from the base ``s`` value following scVelo's + quadratic formula so that ``outline_width`` controls the visual thickness. Parameters ---------- @@ -84,8 +86,10 @@ def _plot_outline( Y coordinates. outline_color Tuple of ``(background_color, gap_color)``. + outline_width + ``(bg_frac, gap_frac)`` relative to the dot radius. kwargs - Base keyword arguments for all three scatter calls (e.g. ``s``, ``alpha``). + Base keyword arguments for all scatter calls (e.g. ``s``, ``alpha``). ax Matplotlib axes to draw on. If :obj:`None`, uses current axes. **scatter_kwargs @@ -97,13 +101,14 @@ def _plot_outline( kwargs = {} bg_color, gap_color = outline_color + bg_frac, gap_frac = outline_width + + s = kwargs.pop("s", 20) + point = np.sqrt(s) + gap_size = (2 * point * gap_frac + point) ** 2 + bg_size = (2 * point * bg_frac + np.sqrt(gap_size)) ** 2 - # background layer (larger points) - bg_kwargs = {**kwargs, **scatter_kwargs, "color": bg_color} - bg_kwargs["s"] = bg_kwargs.get("s", 20) * 1.4 - ax.scatter(x, y, **bg_kwargs) + base = {**kwargs, **scatter_kwargs, "edgecolors": "none", "marker": "."} - # gap layer (medium points) - gap_kwargs = {**kwargs, **scatter_kwargs, "color": gap_color} - gap_kwargs["s"] = gap_kwargs.get("s", 20) * 1.1 - ax.scatter(x, y, **gap_kwargs) + ax.scatter(x, y, s=bg_size, color=bg_color, **base) + ax.scatter(x, y, s=gap_size, color=gap_color, **base) diff --git a/src/cellrank/kernels/utils/_random_walk.py b/src/cellrank/kernels/utils/_random_walk.py index b94455729..aaafd7737 100644 --- a/src/cellrank/kernels/utils/_random_walk.py +++ b/src/cellrank/kernels/utils/_random_walk.py @@ -239,6 +239,9 @@ def plot( # scVelo accepted color="none" to skip coloring; scanpy does not. if kwargs.get("color") == "none": kwargs.pop("color") + # scvelo compat: "right" means "right margin" in scanpy + if kwargs.get("legend_loc") == "right": + kwargs["legend_loc"] = "right margin" sc.pl.embedding(self._adata, basis=basis, show=False, ax=ax, **kwargs) logger.info("Plotting random walks") diff --git a/src/cellrank/models/_pygam_model.py b/src/cellrank/models/_pygam_model.py index c86bc3550..125009619 100644 --- a/src/cellrank/models/_pygam_model.py +++ b/src/cellrank/models/_pygam_model.py @@ -1,9 +1,10 @@ import collections +import contextlib import copy import enum +import io import logging import types -import warnings from collections.abc import Mapping from typing import Any, Literal @@ -144,6 +145,7 @@ def __init__( **_filter_kwargs(gam.__init__, **filtered_kwargs), ) super().__init__(adata, model=model) + self._converged: bool = True if grid is None: self._grid = None @@ -174,16 +176,11 @@ def fit( """ # noqa: D400 super().fit(x, y, w, **kwargs) - with warnings.catch_warnings(): - warnings.filterwarnings( - "ignore", - category=DeprecationWarning, - message=".* is a deprecated alias for the builtin", - ) - if self._grid is not None: - # use default search - grid = {} if not isinstance(self._grid, dict) else self._grid - try: + if self._grid is not None: + # use default search + grid = {} if not isinstance(self._grid, dict) else self._grid + try: + with contextlib.redirect_stdout(io.StringIO()): self.model.gridsearch( self.x, self.y, @@ -193,20 +190,24 @@ def fit( **grid, **kwargs, ) - return self - except Exception as e: # noqa: BLE001 - # workaround for: https://github.com/dswah/pyGAM/issues/273 + return self + except Exception as e: # noqa: BLE001 + # workaround for: https://github.com/dswah/pyGAM/issues/273 + with contextlib.redirect_stdout(io.StringIO()): self.model.fit(self.x, self.y, weights=self.w, **kwargs) - logger.error("Grid search failed, reason: `%s`. Fitting with default values", e) + logger.error("Grid search failed, reason: `%s`. Fitting with default values", e) - try: + try: + buf = io.StringIO() + with contextlib.redirect_stdout(buf): self.model.fit(self.x, self.y, weights=self.w, **kwargs) - return self - except Exception as e: # noqa: BLE001 - raise RuntimeError( - f"Unable to fit `{type(self).__name__}` for gene " - f"`{self._gene!r}` in lineage `{self._lineage!r}`. Reason: `{e}`" - ) from e + self._converged = "did not converge" not in buf.getvalue() + return self + except Exception as e: # noqa: BLE001 + raise RuntimeError( + f"Unable to fit `{type(self).__name__}` for gene " + f"`{self._gene!r}` in lineage `{self._lineage!r}`. Reason: `{e}`" + ) from e @d.dedent def predict( @@ -227,13 +228,7 @@ def predict( """ # noqa: D400 x_test = self._check(key_added, x_test) - with warnings.catch_warnings(): - warnings.filterwarnings( - "ignore", - category=DeprecationWarning, - message=".* is a deprecated alias for the builtin", - ) - self._y_test = self.model.predict(x_test, **kwargs) + self._y_test = self.model.predict(x_test, **kwargs) self._y_test = np.squeeze(self._y_test).astype(self._dtype) return self.y_test @@ -251,13 +246,7 @@ def confidence_interval(self, x_test: np.ndarray | None = None, **kwargs: Any) - %(base_model_ci.returns)s """ # noqa: D400 x_test = self._check("_x_test", x_test) - with warnings.catch_warnings(): - warnings.filterwarnings( - "ignore", - category=DeprecationWarning, - message=".* is a deprecated alias for the builtin", - ) - self._conf_int = self.model.confidence_intervals(x_test, **kwargs).astype(self._dtype) + self._conf_int = self.model.confidence_intervals(x_test, **kwargs).astype(self._dtype) return self.conf_int diff --git a/src/cellrank/pl/_aggregate_fate_probs.py b/src/cellrank/pl/_aggregate_fate_probs.py index b9df6eb14..698cf22d1 100644 --- a/src/cellrank/pl/_aggregate_fate_probs.py +++ b/src/cellrank/pl/_aggregate_fate_probs.py @@ -11,12 +11,12 @@ import matplotlib.pyplot as plt import numpy as np import pandas as pd +import scanpy as sc import scipy.sparse as sp import seaborn as sns from anndata import AnnData from matplotlib import cm, colors from scanpy.plotting import violin -from scvelo.plotting import paga from cellrank._utils import Lineage from cellrank._utils._docs import d, inject_docs @@ -77,8 +77,8 @@ def aggregate_fate_probabilities( Type of plot to show. Valid options are: - ``{m.BAR!r}`` - barplot, one panel per cluster. The whiskers correspond to the standard error of the mean. - - ``{m.PAGA!r}`` - :func:`~scvelo.pl.paga`, one per %(initial_or_terminal)s state, colored in by fate. - - ``{m.PAGA_PIE!r}`` - :func:`~scvelo.pl.paga` with pie charts indicating aggregated fates. + - ``{m.PAGA!r}`` - :func:`~scanpy.pl.paga`, one per %(initial_or_terminal)s state, colored in by fate. + - ``{m.PAGA_PIE!r}`` - :func:`~scanpy.pl.paga` with pie charts indicating aggregated fates. - ``{m.VIOLIN!r}`` - violin plots, one per %(initial_or_terminal)s state. - ``{m.HEATMAP!r}`` - a heatmap, showing average fates per cluster. - ``{m.CLUSTERMAP!r}`` - same as a heatmap, but with a dendrogram. @@ -109,12 +109,21 @@ def aggregate_fate_probabilities( fate probabilities legend. %(plotting)s kwargs - Keyword arguments for :func:`~scvelo.pl.paga`, :func:`~scanpy.pl.violin` or + Keyword arguments for :func:`~scanpy.pl.paga`, :func:`~scanpy.pl.violin` or :func:`~matplotlib.pyplot.bar`, depending on the ``mode``. Returns ------- %(just_plots)s + + Notes + ----- + For ``mode = 'paga_pie'``, directed edges are shown only when + ``adata.uns['paga']['transitions_confidence']`` is present. This key is + produced by scVelo's PAGA extension (:func:`~scvelo.tl.paga`), which + augments the standard scanpy PAGA graph with directed transition + confidences. When only scanpy's :func:`~scanpy.tl.paga` has been run, + edges are undirected. """ @valuedispatch @@ -178,21 +187,30 @@ def _(): axes = [axes] if not isinstance(axes, np.ndarray) else np.ravel(axes) vmin, vmax = np.inf, -np.inf - if basis is not None: - kwargs["basis"] = basis - kwargs["scatter_flag"] = True - kwargs["color"] = cluster_key + # scanpy's paga doesn't support scatter_flag/legend_loc; draw scatter separately + kwargs.pop("legend_loc", None) for i, (ax, lineage_name) in enumerate(zip(axes, probs.names)): cols = [v[0][i] for v in d.values()] + + if basis is not None: + sc.pl.embedding( + adata, + basis=basis, + color=cluster_key, + ax=ax, + show=False, + legend_loc="none", + ) + kwargs["ax"] = ax - kwargs["colors"] = tuple(cols) + kwargs["color"] = tuple(cols) kwargs["title"] = f"{direction} {lineage_name}" vmin = np.min(cols + [vmin]) vmax = np.max(cols + [vmax]) - paga(adata, **kwargs) + sc.pl.paga(adata, **kwargs) if cbar: norm = colors.Normalize(vmin=vmin, vmax=vmax) @@ -220,26 +238,34 @@ def _(): kwargs["ax"] = ax kwargs["show"] = False kwargs["colorbar"] = False # has to be disabled - kwargs["show"] = False - - kwargs["node_colors"] = colors kwargs.pop("save", None) # we will handle saving - kwargs["transitions"] = kwargs.get("transitions", "transitions_confidence") - if "legend_loc" in kwargs: - orig_ll = kwargs["legend_loc"] - if orig_ll != "on data": - kwargs["legend_loc"] = "none" # we will handle legend - else: - orig_ll = None - kwargs["legend_loc"] = "on data" + # Show directed edges when scVelo's PAGA has been run, which stores + # directed transition confidences in adata.uns["paga"]. Standard + # scanpy PAGA only has undirected connectivities. + if "transitions" not in kwargs: + paga_uns = adata.uns.get("paga", {}) + if "transitions_confidence" in paga_uns: + kwargs["transitions"] = "transitions_confidence" + + # Handle legend_loc separately (scanpy's paga doesn't accept it) + orig_ll = kwargs.pop("legend_loc") if "legend_loc" in kwargs else None + # Draw scatter background separately (scanpy's paga doesn't support scatter_flag) if basis is not None: - kwargs["basis"] = basis - kwargs["scatter_flag"] = True - kwargs["color"] = cluster_key + sc.pl.embedding( + adata, + basis=basis, + color=cluster_key, + ax=ax, + show=False, + legend_loc="on data" if orig_ll in (None, "on data") else "none", + ) + + # Use color for pie chart data (scanpy's paga accepts dict-of-dicts) + kwargs["color"] = colors - ax = paga(adata, **kwargs) + ax = sc.pl.paga(adata, **kwargs) ax.set_title(kwargs.get("title", cluster_key)) if basis is not None and orig_ll not in ("none", "on data", None): @@ -259,7 +285,7 @@ def _(): fig.add_artist(first_legend) if legend_kwargs.get("loc", None) not in ("none", "on data", None): - # we need to use these, because scvelo can have its own handles and + # we need to use these, because paga can have its own handles and # they would be plotted here handles = [] for lineage_name, color in zip(probs.names, colors[0].keys()): @@ -465,7 +491,7 @@ def _(): use_clustermap = True mode = mode.HEATMAP elif mode in (AggregationMode.PAGA, AggregationMode.PAGA_PIE) and "paga" not in adata.uns: - raise KeyError("Compute PAGA first as `scvelo.tl.paga()` or `scanpy.tl.paga()`.") + raise KeyError("Compute PAGA first as `scanpy.tl.paga()`.") fig = plot_violin_no_cluster_key() if mode == AggregationMode.VIOLIN and cluster_key is None else plot(mode) diff --git a/src/cellrank/pl/_circular_projection.py b/src/cellrank/pl/_circular_projection.py index 02976ad2d..7d83a40df 100644 --- a/src/cellrank/pl/_circular_projection.py +++ b/src/cellrank/pl/_circular_projection.py @@ -8,7 +8,7 @@ import matplotlib.pyplot as plt import numpy as np import pandas as pd -import scvelo as scv +import scanpy as sc from anndata import AnnData from matplotlib.collections import LineCollection from matplotlib.colors import LinearSegmentedColormap, LogNorm @@ -148,7 +148,7 @@ def circular_projection( ``'X_fate_simplex_{fwd,bwd}'``, based on the ``backward``. %(plotting)s kwargs - Keyword arguments for :func:`~scvelo.pl.scatter`. + Keyword arguments for :func:`~scanpy.pl.embedding`. Returns ------- @@ -222,6 +222,11 @@ def circular_projection( y = np.sum(X * angle_vec_cos, axis=1) adata.obsm[key_added] = np.c_[x, y] + # scvelo's "right" placed the legend outside the axes; scanpy calls + # that "right margin". Remap so existing user code keeps working. + if kwargs.get("legend_loc") == "right": + kwargs["legend_loc"] = "right margin" + nrows = int(np.ceil(len(keys) / ncols)) fig, ax = plt.subplots( nrows=nrows, @@ -250,7 +255,7 @@ def circular_projection( # TODO(michalk8): parse the exception pass - scv.pl.scatter( + sc.pl.embedding( adata, basis=key_added, color=k, @@ -258,7 +263,7 @@ def circular_projection( ax=ax, use_raw=use_raw, norm=LogNorm() if set_lognorm else None, - colorbar=colorbar, + colorbar_loc="right" if colorbar else None, **kwargs, ) if colorbar and set_lognorm: diff --git a/src/cellrank/pl/_utils.py b/src/cellrank/pl/_utils.py index 688ea2d1a..20b5afa71 100644 --- a/src/cellrank/pl/_utils.py +++ b/src/cellrank/pl/_utils.py @@ -13,6 +13,7 @@ import pandas as pd from anndata import AnnData from matplotlib import cm, colors +from matplotlib.colors import to_rgba from mpl_toolkits.axes_grid1 import make_axes_locatable from pandas.api.types import infer_dtype from sklearn.svm import SVR @@ -230,8 +231,8 @@ def _fit_bulk_helper[Queue]( res[gene][ln] = model if return_models else BulkRes(model.x_test, model.y_test) - if queue is not None: - queue.put(1) + if queue is not None: + queue.put(1) if queue is not None: queue.put(None) @@ -297,6 +298,8 @@ def _fit_bulk( raise ValueError(f"Expected time ranges to be of length `{len(lineages)}`, found `{len(time_range)}`.") n_jobs = parallel_kwargs.pop("n_jobs", 1) + backend = parallel_kwargs.pop("backend", DEFAULT_BACKEND) + show_progress_bar = parallel_kwargs.pop("show_progress_bar", True) _start = _time.perf_counter() logger.info("Computing trends using %d core(s)", n_jobs) @@ -305,6 +308,8 @@ def _fit_bulk( genes, unit="gene" if kwargs.get("data_key", "gene") != "obs" else "obs", n_jobs=n_jobs, + backend=backend, + show_progress_bar=show_progress_bar, extractor=lambda modelss: {k: v for m in modelss for k, v in m.items()}, )( models=models, @@ -316,6 +321,12 @@ def _fit_bulk( ) logger.info(" Finish (%.2fs)", _time.perf_counter() - _start) + n_failed = sum( + 1 for gene_models in models.values() for m in gene_models.values() if getattr(m, "_converged", True) is False + ) + if n_failed: + logger.warning("%d/%d GAM fit(s) did not converge", n_failed, sum(len(v) for v in models.values())) + return _filter_models(models, return_models=return_models, filter_all_failed=filter_all_failed) @@ -1023,3 +1034,237 @@ def _get_sorted_colors( res.append(np.asarray(adata.obs[ck])[order]) return res + + +def _plot_time_scatter( + adata: AnnData, + x: np.ndarray, + ys: list[np.ndarray], + *, + color: list[str] | None = None, + title: list[str] | None = None, + xlabel: str = "", + ylabel: str = "probability", + cmap: str = "viridis", + **kwargs: Any, +) -> None: + """Plot fate probability vs pseudotime as multi-panel scatter. + + Parameters + ---------- + adata + Annotated data matrix. + x + X-axis values (e.g. pseudotime). + ys + List of arrays, one per panel, for the y-axis. + color + Column names in ``adata.obs`` to color by, one per panel or one shared. + title + Title for each panel. + xlabel + X-axis label. + ylabel + Y-axis label. + cmap + Colormap for continuous color values. + kwargs + Additional keyword arguments (``figsize``, ``dpi``, ``size``, ``show`` + are extracted; the rest is ignored). + """ + n_panels = len(ys) + ncols = min(4, n_panels) + nrows = int(np.ceil(n_panels / ncols)) + + figsize = kwargs.pop("figsize", (6 * ncols, 4 * nrows)) + dpi = kwargs.pop("dpi", None) + s = kwargs.pop("size", kwargs.pop("s", 1)) + show = kwargs.pop("show", None) + _save = kwargs.pop("save", None) + legend_loc = kwargs.pop("legend_loc", "best") + + fig, axes = plt.subplots(nrows=nrows, ncols=ncols, figsize=figsize, dpi=dpi, squeeze=False) + axes_flat = axes.ravel() + + color_per = None + if color is not None: + color_per = color * n_panels if len(color) == 1 else list(color) + + for i, (y, ax) in enumerate(zip(ys, axes_flat)): + c = color_per[i] if color_per else None + if c is not None and c in adata.obs: + obs_data = adata.obs[c] + if isinstance(obs_data.dtype, pd.CategoricalDtype): + palette = adata.uns.get(f"{c}_colors", None) + for j, cat in enumerate(obs_data.cat.categories): + mask = (obs_data == cat).values + kw = {"c": palette[j]} if palette is not None and j < len(palette) else {} + ax.scatter(x[mask], y[mask], s=s, alpha=0.8, label=cat, edgecolors="none", **kw) + if legend_loc not in (None, "none", "None", False): + legend_kw: dict[str, Any] = {"fontsize": "x-small", "frameon": False} + if legend_loc in ("right", "right margin"): + legend_kw.update(loc="center left", bbox_to_anchor=(1.0, 0.5)) + else: + legend_kw["loc"] = legend_loc + ax.legend(**legend_kw) + else: + scatter = ax.scatter(x, y, c=obs_data.values, cmap=cmap, s=s, alpha=0.8, edgecolors="none") + plt.colorbar(scatter, ax=ax) + else: + scatter = ax.scatter(x, y, c=y, cmap=cmap, s=s, alpha=0.8, edgecolors="none") + plt.colorbar(scatter, ax=ax) + + ax.set_xlabel(xlabel) + ax.set_ylabel(ylabel) + if title and i < len(title): + ax.set_title(title[i]) + + for j in range(n_panels, len(axes_flat)): + axes_flat[j].remove() + + plt.tight_layout() + if _save is not None: + save_fig(fig, _save) + if show is True or (show is None and _save is None): + plt.show() + + +def _plot_color_gradients( + adata: AnnData, + data: Any, + *, + basis: str = "umap", + title: list[str] | None = None, + **kwargs: Any, +) -> None: + """Plot fate probabilities as overlapping color gradients on an embedding. + + Uses the same pairwise diverging-colormap technique as scvelo: for each + pair of lineages, cells are colored on a diverging scale from + ``color_A → transparent → color_B``. Uncertain cells (low probability + for both lineages) become transparent and let the grey background show + through. Only cells whose two dominant lineages match the current pair + are drawn, so each cell is plotted at most once per pair. + + Parameters + ---------- + adata + Annotated data matrix. + data + A :class:`~cellrank._utils._lineage.Lineage` with fate probabilities. + basis + Key in ``adata.obsm`` for the 2-D coordinates. + title + Plot title (list with a single element or string). + kwargs + Additional keyword arguments (``figsize``, ``dpi``, ``size``, + ``legend_loc``, ``show``, ``save`` are extracted; the rest is + ignored). + """ + coords = adata.obsm[f"X_{basis}"] + + figsize = kwargs.pop("figsize", None) + dpi = kwargs.pop("dpi", None) + s = kwargs.pop("size", kwargs.pop("s", None)) + if s is None: + s = (120_000 / adata.n_obs + 20) / 2 + show = kwargs.pop("show", None) + _save = kwargs.pop("save", None) + legend_loc = kwargs.pop("legend_loc", "right") + + fig, ax = plt.subplots(figsize=figsize, dpi=dpi) + + # Probability matrix: cells × lineages, clipped to [0, ∞) + vals = np.clip(data.X, 0, None) + names = list(data.names) + lin_colors = list(data.colors) + n_lineages = len(names) + + # Background: all cells in light grey, very faint + ax.scatter(coords[:, 0], coords[:, 1], c="lightgrey", s=s, alpha=0.2, marker=".", edgecolors="none") + + # For each cell, find its top-2 lineage indices + sorted_idx = np.argsort(vals, axis=1)[:, ::-1][:, :2] # (n_cells, 2) + + # Pairwise diverging colormap layers (scvelo approach) + for id0 in range(n_lineages): + for id1 in range(id0 + 1, n_lineages): + # Only cells whose top-2 lineages include this pair + cell_mask = np.array( + [(id0 in row and id1 in row) for row in sorted_idx], + dtype=bool, + ) + if np.sum(cell_mask) < 2: + continue + + # Diverging value: positive → id1, negative → id0 + c_vals = vals[cell_mask, id1] - vals[cell_mask, id0] + c_coords = coords[cell_mask] + + # Build diverging colormap: color_A → transparent white → color_B + rgba_a = np.array(to_rgba(lin_colors[id0])) + rgba_b = np.array(to_rgba(lin_colors[id1])) + cmap_colors = [ + (*rgba_a[:3], 1.0), # fully opaque color A + (1.0, 1.0, 1.0, 0.0), # transparent white in the middle + (*rgba_b[:3], 1.0), # fully opaque color B + ] + cmap = colors.LinearSegmentedColormap.from_list(f"_cr_{id0}_{id1}", cmap_colors, N=256) + + # Normalise to [-1, 1] symmetric range, then map to [0, 1] for cmap + abs_max = np.max(np.abs(c_vals)) if np.max(np.abs(c_vals)) > 0 else 1.0 + c_normed = (c_vals / abs_max + 1) / 2 # map [-1,1] → [0,1] + + # Sort so high-magnitude cells are on top + order = np.argsort(np.abs(c_vals)) + ax.scatter( + c_coords[order, 0], + c_coords[order, 1], + c=c_normed[order], + cmap=cmap, + vmin=0, + vmax=1, + s=s, + marker=".", + edgecolors="none", + ) + + # Legend + handles = [ + plt.Line2D( + [0], + [0], + marker="o", + color="w", + markerfacecolor=c, + label=n, + markersize=8, + ) + for n, c in zip(names, lin_colors) + ] + if legend_loc not in (None, "none", "None", False): + if legend_loc == "right": + ax.legend(handles=handles, frameon=False, loc="center left", bbox_to_anchor=(1.0, 0.5)) + elif legend_loc == "right margin": + ax.legend(handles=handles, frameon=False, loc="center left", bbox_to_anchor=(1.04, 0.5)) + elif legend_loc == "on data": + # Place labels at centroid of high-probability cells + for name in data.names: + col = data[:, name].X.ravel() + top_mask = col > np.percentile(col, 90) + if top_mask.any(): + cx, cy = coords[top_mask, 0].mean(), coords[top_mask, 1].mean() + ax.text(cx, cy, name, fontsize=8, fontweight="bold", ha="center", va="center") + else: + ax.legend(handles=handles, frameon=False, loc=legend_loc) + if title: + ax.set_title(title[0] if isinstance(title, list) else title) + ax.set_xticks([]) + ax.set_yticks([]) + for spine in ax.spines.values(): + spine.set_visible(False) + + if _save is not None: + save_fig(fig, _save) + if show is True or (show is None and _save is None): + plt.show() diff --git a/tests/_ground_truth_figures/all_models_for_1_gene_failed.png b/tests/_ground_truth_figures/all_models_for_1_gene_failed.png index 3ac087d3e..56a22e5de 100644 Binary files a/tests/_ground_truth_figures/all_models_for_1_gene_failed.png and b/tests/_ground_truth_figures/all_models_for_1_gene_failed.png differ diff --git a/tests/_ground_truth_figures/all_models_for_1_gene_failed_same_plot.png b/tests/_ground_truth_figures/all_models_for_1_gene_failed_same_plot.png index 919fe84c5..1f8a78bce 100644 Binary files a/tests/_ground_truth_figures/all_models_for_1_gene_failed_same_plot.png and b/tests/_ground_truth_figures/all_models_for_1_gene_failed_same_plot.png differ diff --git a/tests/_ground_truth_figures/all_models_for_1_lineage_failed.png b/tests/_ground_truth_figures/all_models_for_1_lineage_failed.png index 5cbe30401..89099185c 100644 Binary files a/tests/_ground_truth_figures/all_models_for_1_lineage_failed.png and b/tests/_ground_truth_figures/all_models_for_1_lineage_failed.png differ diff --git a/tests/_ground_truth_figures/bar.png b/tests/_ground_truth_figures/bar.png index 7d40b52c0..2a8d6d4f6 100644 Binary files a/tests/_ground_truth_figures/bar.png and b/tests/_ground_truth_figures/bar.png differ diff --git a/tests/_ground_truth_figures/bar_bwd.png b/tests/_ground_truth_figures/bar_bwd.png index 045280570..9b1a95111 100644 Binary files a/tests/_ground_truth_figures/bar_bwd.png and b/tests/_ground_truth_figures/bar_bwd.png differ diff --git a/tests/_ground_truth_figures/bar_cluster_subset.png b/tests/_ground_truth_figures/bar_cluster_subset.png index 1b0d407fe..7da4ee8d0 100644 Binary files a/tests/_ground_truth_figures/bar_cluster_subset.png and b/tests/_ground_truth_figures/bar_cluster_subset.png differ diff --git a/tests/_ground_truth_figures/bar_cluster_subset_violin.png b/tests/_ground_truth_figures/bar_cluster_subset_violin.png index 39ccfe6f4..d4a19a51f 100644 Binary files a/tests/_ground_truth_figures/bar_cluster_subset_violin.png and b/tests/_ground_truth_figures/bar_cluster_subset_violin.png differ diff --git a/tests/_ground_truth_figures/bar_lineage_subset.png b/tests/_ground_truth_figures/bar_lineage_subset.png index c1f78854b..682e3e0b3 100644 Binary files a/tests/_ground_truth_figures/bar_lineage_subset.png and b/tests/_ground_truth_figures/bar_lineage_subset.png differ diff --git a/tests/_ground_truth_figures/cluster_lineage.png b/tests/_ground_truth_figures/cluster_lineage.png index b762bc2ec..4502b2cc5 100644 Binary files a/tests/_ground_truth_figures/cluster_lineage.png and b/tests/_ground_truth_figures/cluster_lineage.png differ diff --git a/tests/_ground_truth_figures/cluster_lineage_2_failed_genes.png b/tests/_ground_truth_figures/cluster_lineage_2_failed_genes.png index 2d464997e..16a23d52c 100644 Binary files a/tests/_ground_truth_figures/cluster_lineage_2_failed_genes.png and b/tests/_ground_truth_figures/cluster_lineage_2_failed_genes.png differ diff --git a/tests/_ground_truth_figures/cluster_lineage_bwd.png b/tests/_ground_truth_figures/cluster_lineage_bwd.png index 197133a42..b98f9962f 100644 Binary files a/tests/_ground_truth_figures/cluster_lineage_bwd.png and b/tests/_ground_truth_figures/cluster_lineage_bwd.png differ diff --git a/tests/_ground_truth_figures/cluster_lineage_covariates.png b/tests/_ground_truth_figures/cluster_lineage_covariates.png index e7f5afc1a..04befdb75 100644 Binary files a/tests/_ground_truth_figures/cluster_lineage_covariates.png and b/tests/_ground_truth_figures/cluster_lineage_covariates.png differ diff --git a/tests/_ground_truth_figures/cluster_lineage_covariates_cmap.png b/tests/_ground_truth_figures/cluster_lineage_covariates_cmap.png index d8c3c44a0..74d7b8b5b 100644 Binary files a/tests/_ground_truth_figures/cluster_lineage_covariates_cmap.png and b/tests/_ground_truth_figures/cluster_lineage_covariates_cmap.png differ diff --git a/tests/_ground_truth_figures/cluster_lineage_covariates_ratio.png b/tests/_ground_truth_figures/cluster_lineage_covariates_ratio.png index 5aa99952d..9fbf57c67 100644 Binary files a/tests/_ground_truth_figures/cluster_lineage_covariates_ratio.png and b/tests/_ground_truth_figures/cluster_lineage_covariates_ratio.png differ diff --git a/tests/_ground_truth_figures/cluster_lineage_data_key.png b/tests/_ground_truth_figures/cluster_lineage_data_key.png index 8f6ed48f7..f768565f6 100644 Binary files a/tests/_ground_truth_figures/cluster_lineage_data_key.png and b/tests/_ground_truth_figures/cluster_lineage_data_key.png differ diff --git a/tests/_ground_truth_figures/cluster_lineage_gene_symbols.png b/tests/_ground_truth_figures/cluster_lineage_gene_symbols.png index b762bc2ec..4502b2cc5 100644 Binary files a/tests/_ground_truth_figures/cluster_lineage_gene_symbols.png and b/tests/_ground_truth_figures/cluster_lineage_gene_symbols.png differ diff --git a/tests/_ground_truth_figures/cluster_lineage_leiden.png b/tests/_ground_truth_figures/cluster_lineage_leiden.png index b762bc2ec..4502b2cc5 100644 Binary files a/tests/_ground_truth_figures/cluster_lineage_leiden.png and b/tests/_ground_truth_figures/cluster_lineage_leiden.png differ diff --git a/tests/_ground_truth_figures/cluster_lineage_no_norm.png b/tests/_ground_truth_figures/cluster_lineage_no_norm.png index 81da5d7fa..7c737351a 100644 Binary files a/tests/_ground_truth_figures/cluster_lineage_no_norm.png and b/tests/_ground_truth_figures/cluster_lineage_no_norm.png differ diff --git a/tests/_ground_truth_figures/cluster_lineage_random_state.png b/tests/_ground_truth_figures/cluster_lineage_random_state.png index b762bc2ec..4502b2cc5 100644 Binary files a/tests/_ground_truth_figures/cluster_lineage_random_state.png and b/tests/_ground_truth_figures/cluster_lineage_random_state.png differ diff --git a/tests/_ground_truth_figures/cluster_lineage_raw.png b/tests/_ground_truth_figures/cluster_lineage_raw.png index 318f038cf..ddb3efb5c 100644 Binary files a/tests/_ground_truth_figures/cluster_lineage_raw.png and b/tests/_ground_truth_figures/cluster_lineage_raw.png differ diff --git a/tests/_ground_truth_figures/composition.png b/tests/_ground_truth_figures/composition.png index dc45a57ee..19349edae 100644 Binary files a/tests/_ground_truth_figures/composition.png and b/tests/_ground_truth_figures/composition.png differ diff --git a/tests/_ground_truth_figures/composition_kwargs_autopct.png b/tests/_ground_truth_figures/composition_kwargs_autopct.png index b5cfb4a3c..a498f818b 100644 Binary files a/tests/_ground_truth_figures/composition_kwargs_autopct.png and b/tests/_ground_truth_figures/composition_kwargs_autopct.png differ diff --git a/tests/_ground_truth_figures/driver_corr.png b/tests/_ground_truth_figures/driver_corr.png index f02566806..d5e09ba6f 100644 Binary files a/tests/_ground_truth_figures/driver_corr.png and b/tests/_ground_truth_figures/driver_corr.png differ diff --git a/tests/_ground_truth_figures/driver_corr_adjust_text.png b/tests/_ground_truth_figures/driver_corr_adjust_text.png index 68b597917..d4a16c4b7 100644 Binary files a/tests/_ground_truth_figures/driver_corr_adjust_text.png and b/tests/_ground_truth_figures/driver_corr_adjust_text.png differ diff --git a/tests/_ground_truth_figures/driver_corr_cmap.png b/tests/_ground_truth_figures/driver_corr_cmap.png index 0ce31701c..c6050c0b1 100644 Binary files a/tests/_ground_truth_figures/driver_corr_cmap.png and b/tests/_ground_truth_figures/driver_corr_cmap.png differ diff --git a/tests/_ground_truth_figures/driver_corr_color.png b/tests/_ground_truth_figures/driver_corr_color.png index 81ec9f24a..0454a5dcf 100644 Binary files a/tests/_ground_truth_figures/driver_corr_color.png and b/tests/_ground_truth_figures/driver_corr_color.png differ diff --git a/tests/_ground_truth_figures/driver_corr_fontsize.png b/tests/_ground_truth_figures/driver_corr_fontsize.png index 8bd39c266..add8da22b 100644 Binary files a/tests/_ground_truth_figures/driver_corr_fontsize.png and b/tests/_ground_truth_figures/driver_corr_fontsize.png differ diff --git a/tests/_ground_truth_figures/driver_corr_gene_sets.png b/tests/_ground_truth_figures/driver_corr_gene_sets.png index 66883a8ee..200c698fd 100644 Binary files a/tests/_ground_truth_figures/driver_corr_gene_sets.png and b/tests/_ground_truth_figures/driver_corr_gene_sets.png differ diff --git a/tests/_ground_truth_figures/driver_corr_gene_sets_colors.png b/tests/_ground_truth_figures/driver_corr_gene_sets_colors.png index bb9fee2fc..5524e6f2a 100644 Binary files a/tests/_ground_truth_figures/driver_corr_gene_sets_colors.png and b/tests/_ground_truth_figures/driver_corr_gene_sets_colors.png differ diff --git a/tests/_ground_truth_figures/driver_corr_legend_loc.png b/tests/_ground_truth_figures/driver_corr_legend_loc.png index f8704e1b8..777c8db4c 100644 Binary files a/tests/_ground_truth_figures/driver_corr_legend_loc.png and b/tests/_ground_truth_figures/driver_corr_legend_loc.png differ diff --git a/tests/_ground_truth_figures/driver_corr_return_ax.png b/tests/_ground_truth_figures/driver_corr_return_ax.png index ec6289388..b903d3a73 100644 Binary files a/tests/_ground_truth_figures/driver_corr_return_ax.png and b/tests/_ground_truth_figures/driver_corr_return_ax.png differ diff --git a/tests/_ground_truth_figures/driver_corr_use_raw.png b/tests/_ground_truth_figures/driver_corr_use_raw.png index c9c394d43..cc9592153 100644 Binary files a/tests/_ground_truth_figures/driver_corr_use_raw.png and b/tests/_ground_truth_figures/driver_corr_use_raw.png differ diff --git a/tests/_ground_truth_figures/drivers_ascending.png b/tests/_ground_truth_figures/drivers_ascending.png index 0e7d62740..c5a774adb 100644 Binary files a/tests/_ground_truth_figures/drivers_ascending.png and b/tests/_ground_truth_figures/drivers_ascending.png differ diff --git a/tests/_ground_truth_figures/drivers_backward.png b/tests/_ground_truth_figures/drivers_backward.png index 248f0ed17..8e80e9786 100644 Binary files a/tests/_ground_truth_figures/drivers_backward.png and b/tests/_ground_truth_figures/drivers_backward.png differ diff --git a/tests/_ground_truth_figures/drivers_cmap.png b/tests/_ground_truth_figures/drivers_cmap.png index 1efb8d0d6..f9c587994 100644 Binary files a/tests/_ground_truth_figures/drivers_cmap.png and b/tests/_ground_truth_figures/drivers_cmap.png differ diff --git a/tests/_ground_truth_figures/drivers_n_genes.png b/tests/_ground_truth_figures/drivers_n_genes.png index a9f363525..4df384b3b 100644 Binary files a/tests/_ground_truth_figures/drivers_n_genes.png and b/tests/_ground_truth_figures/drivers_n_genes.png differ diff --git a/tests/_ground_truth_figures/drivers_title_fmt.png b/tests/_ground_truth_figures/drivers_title_fmt.png index b1499d6a8..faa31cf3e 100644 Binary files a/tests/_ground_truth_figures/drivers_title_fmt.png and b/tests/_ground_truth_figures/drivers_title_fmt.png differ diff --git a/tests/_ground_truth_figures/failed_only_main_diagonal.png b/tests/_ground_truth_figures/failed_only_main_diagonal.png index 4830c908e..9d9ae265c 100644 Binary files a/tests/_ground_truth_figures/failed_only_main_diagonal.png and b/tests/_ground_truth_figures/failed_only_main_diagonal.png differ diff --git a/tests/_ground_truth_figures/failed_only_off_diagonal.png b/tests/_ground_truth_figures/failed_only_off_diagonal.png index ea350f39a..206e9a535 100644 Binary files a/tests/_ground_truth_figures/failed_only_off_diagonal.png and b/tests/_ground_truth_figures/failed_only_off_diagonal.png differ diff --git a/tests/_ground_truth_figures/final_states.png b/tests/_ground_truth_figures/final_states.png new file mode 100644 index 000000000..9bec2db47 Binary files /dev/null and b/tests/_ground_truth_figures/final_states.png differ diff --git a/tests/_ground_truth_figures/final_states_clusters.png b/tests/_ground_truth_figures/final_states_clusters.png new file mode 100644 index 000000000..e70581173 Binary files /dev/null and b/tests/_ground_truth_figures/final_states_clusters.png differ diff --git a/tests/_ground_truth_figures/fitted_cluster_fates.png b/tests/_ground_truth_figures/fitted_cluster_fates.png index 0f3e80e3a..7732e3a48 100644 Binary files a/tests/_ground_truth_figures/fitted_cluster_fates.png and b/tests/_ground_truth_figures/fitted_cluster_fates.png differ diff --git a/tests/_ground_truth_figures/fitted_empty_model.png b/tests/_ground_truth_figures/fitted_empty_model.png index adf950b78..b579a9cb6 100644 Binary files a/tests/_ground_truth_figures/fitted_empty_model.png and b/tests/_ground_truth_figures/fitted_empty_model.png differ diff --git a/tests/_ground_truth_figures/fitted_gene_trends.png b/tests/_ground_truth_figures/fitted_gene_trends.png index 3df98e202..26953066b 100644 Binary files a/tests/_ground_truth_figures/fitted_gene_trends.png and b/tests/_ground_truth_figures/fitted_gene_trends.png differ diff --git a/tests/_ground_truth_figures/fitted_heatmap/lineage_0.png b/tests/_ground_truth_figures/fitted_heatmap/lineage_0.png index 54d0d376b..515260376 100644 Binary files a/tests/_ground_truth_figures/fitted_heatmap/lineage_0.png and b/tests/_ground_truth_figures/fitted_heatmap/lineage_0.png differ diff --git a/tests/_ground_truth_figures/fitted_heatmap/lineage_1.png b/tests/_ground_truth_figures/fitted_heatmap/lineage_1.png index e55b68e45..2fc4f5a2e 100644 Binary files a/tests/_ground_truth_figures/fitted_heatmap/lineage_1.png and b/tests/_ground_truth_figures/fitted_heatmap/lineage_1.png differ diff --git a/tests/_ground_truth_figures/fitted_heatmap/lineage_2.png b/tests/_ground_truth_figures/fitted_heatmap/lineage_2.png index 9daae28a5..07f7f5818 100644 Binary files a/tests/_ground_truth_figures/fitted_heatmap/lineage_2.png and b/tests/_ground_truth_figures/fitted_heatmap/lineage_2.png differ diff --git a/tests/_ground_truth_figures/fitted_ignore_plot_smoothed_lineage.png b/tests/_ground_truth_figures/fitted_ignore_plot_smoothed_lineage.png index 430afea59..2eaeca461 100644 Binary files a/tests/_ground_truth_figures/fitted_ignore_plot_smoothed_lineage.png and b/tests/_ground_truth_figures/fitted_ignore_plot_smoothed_lineage.png differ diff --git a/tests/_ground_truth_figures/fitted_model_cells_with_weights.png b/tests/_ground_truth_figures/fitted_model_cells_with_weights.png index 60023c9de..6708539b2 100644 Binary files a/tests/_ground_truth_figures/fitted_model_cells_with_weights.png and b/tests/_ground_truth_figures/fitted_model_cells_with_weights.png differ diff --git a/tests/_ground_truth_figures/fitted_model_conf_int.png b/tests/_ground_truth_figures/fitted_model_conf_int.png index ee6059851..fe610e821 100644 Binary files a/tests/_ground_truth_figures/fitted_model_conf_int.png and b/tests/_ground_truth_figures/fitted_model_conf_int.png differ diff --git a/tests/_ground_truth_figures/fitted_model_conf_int_no_conf_int_computed.png b/tests/_ground_truth_figures/fitted_model_conf_int_no_conf_int_computed.png index c539fa041..193096134 100644 Binary files a/tests/_ground_truth_figures/fitted_model_conf_int_no_conf_int_computed.png and b/tests/_ground_truth_figures/fitted_model_conf_int_no_conf_int_computed.png differ diff --git a/tests/_ground_truth_figures/fitted_model_weights.png b/tests/_ground_truth_figures/fitted_model_weights.png index 12381d49d..7711cc0bc 100644 Binary files a/tests/_ground_truth_figures/fitted_model_weights.png and b/tests/_ground_truth_figures/fitted_model_weights.png differ diff --git a/tests/_ground_truth_figures/flow_alpha.png b/tests/_ground_truth_figures/flow_alpha.png index 6858e6f1b..6d71ba2b2 100644 Binary files a/tests/_ground_truth_figures/flow_alpha.png and b/tests/_ground_truth_figures/flow_alpha.png differ diff --git a/tests/_ground_truth_figures/flow_cluster_ascending.png b/tests/_ground_truth_figures/flow_cluster_ascending.png index 4493ea38a..f243cff31 100644 Binary files a/tests/_ground_truth_figures/flow_cluster_ascending.png and b/tests/_ground_truth_figures/flow_cluster_ascending.png differ diff --git a/tests/_ground_truth_figures/flow_cluster_descending.png b/tests/_ground_truth_figures/flow_cluster_descending.png index ecb15f4da..41a17f082 100644 Binary files a/tests/_ground_truth_figures/flow_cluster_descending.png and b/tests/_ground_truth_figures/flow_cluster_descending.png differ diff --git a/tests/_ground_truth_figures/flow_clusters_subset.png b/tests/_ground_truth_figures/flow_clusters_subset.png index 781477469..db1aba979 100644 Binary files a/tests/_ground_truth_figures/flow_clusters_subset.png and b/tests/_ground_truth_figures/flow_clusters_subset.png differ diff --git a/tests/_ground_truth_figures/flow_explicit_cluster_order.png b/tests/_ground_truth_figures/flow_explicit_cluster_order.png index 9830ec7c1..656e45911 100644 Binary files a/tests/_ground_truth_figures/flow_explicit_cluster_order.png and b/tests/_ground_truth_figures/flow_explicit_cluster_order.png differ diff --git a/tests/_ground_truth_figures/flow_legend_loc.png b/tests/_ground_truth_figures/flow_legend_loc.png index 54f5baf33..dc758f08d 100644 Binary files a/tests/_ground_truth_figures/flow_legend_loc.png and b/tests/_ground_truth_figures/flow_legend_loc.png differ diff --git a/tests/_ground_truth_figures/flow_min_flow_keep_empty_clusters.png b/tests/_ground_truth_figures/flow_min_flow_keep_empty_clusters.png index b48fba5bc..178e470ee 100644 Binary files a/tests/_ground_truth_figures/flow_min_flow_keep_empty_clusters.png and b/tests/_ground_truth_figures/flow_min_flow_keep_empty_clusters.png differ diff --git a/tests/_ground_truth_figures/flow_min_flow_remove_empty_clusters.png b/tests/_ground_truth_figures/flow_min_flow_remove_empty_clusters.png index 4e53f8ae2..db7247b52 100644 Binary files a/tests/_ground_truth_figures/flow_min_flow_remove_empty_clusters.png and b/tests/_ground_truth_figures/flow_min_flow_remove_empty_clusters.png differ diff --git a/tests/_ground_truth_figures/flow_no_xticks.png b/tests/_ground_truth_figures/flow_no_xticks.png index 9af572e45..419b8f4e5 100644 Binary files a/tests/_ground_truth_figures/flow_no_xticks.png and b/tests/_ground_truth_figures/flow_no_xticks.png differ diff --git a/tests/_ground_truth_figures/flow_return_ax.png b/tests/_ground_truth_figures/flow_return_ax.png index ecb15f4da..41a17f082 100644 Binary files a/tests/_ground_truth_figures/flow_return_ax.png and b/tests/_ground_truth_figures/flow_return_ax.png differ diff --git a/tests/_ground_truth_figures/flow_source_clusters.png b/tests/_ground_truth_figures/flow_source_clusters.png index 1b97911b2..2d3b18d3a 100644 Binary files a/tests/_ground_truth_figures/flow_source_clusters.png and b/tests/_ground_truth_figures/flow_source_clusters.png differ diff --git a/tests/_ground_truth_figures/flow_time_categories_too_close.png b/tests/_ground_truth_figures/flow_time_categories_too_close.png index b1dd21335..f421ade3c 100644 Binary files a/tests/_ground_truth_figures/flow_time_categories_too_close.png and b/tests/_ground_truth_figures/flow_time_categories_too_close.png differ diff --git a/tests/_ground_truth_figures/gpcca_coarse_T.png b/tests/_ground_truth_figures/gpcca_coarse_T.png index 705d1dd2c..5eed36413 100644 Binary files a/tests/_ground_truth_figures/gpcca_coarse_T.png and b/tests/_ground_truth_figures/gpcca_coarse_T.png differ diff --git a/tests/_ground_truth_figures/gpcca_coarse_T_cmap.png b/tests/_ground_truth_figures/gpcca_coarse_T_cmap.png index d859a2af3..c5d41ba3c 100644 Binary files a/tests/_ground_truth_figures/gpcca_coarse_T_cmap.png and b/tests/_ground_truth_figures/gpcca_coarse_T_cmap.png differ diff --git a/tests/_ground_truth_figures/gpcca_coarse_T_init_dist.png b/tests/_ground_truth_figures/gpcca_coarse_T_init_dist.png index dc0d7e181..9f7b2a8cd 100644 Binary files a/tests/_ground_truth_figures/gpcca_coarse_T_init_dist.png and b/tests/_ground_truth_figures/gpcca_coarse_T_init_dist.png differ diff --git a/tests/_ground_truth_figures/gpcca_coarse_T_no_annot.png b/tests/_ground_truth_figures/gpcca_coarse_T_no_annot.png index 8f3e30177..52bba4a17 100644 Binary files a/tests/_ground_truth_figures/gpcca_coarse_T_no_annot.png and b/tests/_ground_truth_figures/gpcca_coarse_T_no_annot.png differ diff --git a/tests/_ground_truth_figures/gpcca_coarse_T_no_cbar.png b/tests/_ground_truth_figures/gpcca_coarse_T_no_cbar.png index a60b066b1..669c6e1b1 100644 Binary files a/tests/_ground_truth_figures/gpcca_coarse_T_no_cbar.png and b/tests/_ground_truth_figures/gpcca_coarse_T_no_cbar.png differ diff --git a/tests/_ground_truth_figures/gpcca_coarse_T_no_order.png b/tests/_ground_truth_figures/gpcca_coarse_T_no_order.png index ca9531e0f..67b72feed 100644 Binary files a/tests/_ground_truth_figures/gpcca_coarse_T_no_order.png and b/tests/_ground_truth_figures/gpcca_coarse_T_no_order.png differ diff --git a/tests/_ground_truth_figures/gpcca_coarse_T_stat_dist.png b/tests/_ground_truth_figures/gpcca_coarse_T_stat_dist.png index ca9531e0f..67b72feed 100644 Binary files a/tests/_ground_truth_figures/gpcca_coarse_T_stat_dist.png and b/tests/_ground_truth_figures/gpcca_coarse_T_stat_dist.png differ diff --git a/tests/_ground_truth_figures/gpcca_coarse_T_stat_init_dist.png b/tests/_ground_truth_figures/gpcca_coarse_T_stat_init_dist.png index 3610ee765..13a5056c8 100644 Binary files a/tests/_ground_truth_figures/gpcca_coarse_T_stat_init_dist.png and b/tests/_ground_truth_figures/gpcca_coarse_T_stat_init_dist.png differ diff --git a/tests/_ground_truth_figures/gpcca_coarse_T_xtick_rot.png b/tests/_ground_truth_figures/gpcca_coarse_T_xtick_rot.png index cfc2052b2..b38095bee 100644 Binary files a/tests/_ground_truth_figures/gpcca_coarse_T_xtick_rot.png and b/tests/_ground_truth_figures/gpcca_coarse_T_xtick_rot.png differ diff --git a/tests/_ground_truth_figures/gpcca_complex_spectrum.png b/tests/_ground_truth_figures/gpcca_complex_spectrum.png index 298be848d..4377182a2 100644 Binary files a/tests/_ground_truth_figures/gpcca_complex_spectrum.png and b/tests/_ground_truth_figures/gpcca_complex_spectrum.png differ diff --git a/tests/_ground_truth_figures/gpcca_fate_probs_cont_not_same.png b/tests/_ground_truth_figures/gpcca_fate_probs_cont_not_same.png new file mode 100644 index 000000000..b357d4361 Binary files /dev/null and b/tests/_ground_truth_figures/gpcca_fate_probs_cont_not_same.png differ diff --git a/tests/_ground_truth_figures/gpcca_fate_probs_cont_same_clusters.png b/tests/_ground_truth_figures/gpcca_fate_probs_cont_same_clusters.png new file mode 100644 index 000000000..bfc7a9bcb Binary files /dev/null and b/tests/_ground_truth_figures/gpcca_fate_probs_cont_same_clusters.png differ diff --git a/tests/_ground_truth_figures/gpcca_fate_probs_cont_same_no_clusters.png b/tests/_ground_truth_figures/gpcca_fate_probs_cont_same_no_clusters.png new file mode 100644 index 000000000..bfc7a9bcb Binary files /dev/null and b/tests/_ground_truth_figures/gpcca_fate_probs_cont_same_no_clusters.png differ diff --git a/tests/_ground_truth_figures/gpcca_final_states.png b/tests/_ground_truth_figures/gpcca_final_states.png new file mode 100644 index 000000000..c756b29ad Binary files /dev/null and b/tests/_ground_truth_figures/gpcca_final_states.png differ diff --git a/tests/_ground_truth_figures/gpcca_final_states_cluster_key.png b/tests/_ground_truth_figures/gpcca_final_states_cluster_key.png new file mode 100644 index 000000000..002e8274b Binary files /dev/null and b/tests/_ground_truth_figures/gpcca_final_states_cluster_key.png differ diff --git a/tests/_ground_truth_figures/gpcca_final_states_cmap.png b/tests/_ground_truth_figures/gpcca_final_states_cmap.png new file mode 100644 index 000000000..5bf9b4020 Binary files /dev/null and b/tests/_ground_truth_figures/gpcca_final_states_cmap.png differ diff --git a/tests/_ground_truth_figures/gpcca_final_states_discrete.png b/tests/_ground_truth_figures/gpcca_final_states_discrete.png new file mode 100644 index 000000000..c756b29ad Binary files /dev/null and b/tests/_ground_truth_figures/gpcca_final_states_discrete.png differ diff --git a/tests/_ground_truth_figures/gpcca_final_states_lineages.png b/tests/_ground_truth_figures/gpcca_final_states_lineages.png new file mode 100644 index 000000000..8d7b24f3e Binary files /dev/null and b/tests/_ground_truth_figures/gpcca_final_states_lineages.png differ diff --git a/tests/_ground_truth_figures/gpcca_final_states_no_same_plot.png b/tests/_ground_truth_figures/gpcca_final_states_no_same_plot.png new file mode 100644 index 000000000..5bf9b4020 Binary files /dev/null and b/tests/_ground_truth_figures/gpcca_final_states_no_same_plot.png differ diff --git a/tests/_ground_truth_figures/gpcca_final_states_time.png b/tests/_ground_truth_figures/gpcca_final_states_time.png new file mode 100644 index 000000000..c756b29ad Binary files /dev/null and b/tests/_ground_truth_figures/gpcca_final_states_time.png differ diff --git a/tests/_ground_truth_figures/gpcca_final_states_title.png b/tests/_ground_truth_figures/gpcca_final_states_title.png new file mode 100644 index 000000000..a49217656 Binary files /dev/null and b/tests/_ground_truth_figures/gpcca_final_states_title.png differ diff --git a/tests/_ground_truth_figures/gpcca_meta_states.png b/tests/_ground_truth_figures/gpcca_meta_states.png new file mode 100644 index 000000000..3d19e4553 Binary files /dev/null and b/tests/_ground_truth_figures/gpcca_meta_states.png differ diff --git a/tests/_ground_truth_figures/gpcca_meta_states_cluster_key.png b/tests/_ground_truth_figures/gpcca_meta_states_cluster_key.png new file mode 100644 index 000000000..be27b18c9 Binary files /dev/null and b/tests/_ground_truth_figures/gpcca_meta_states_cluster_key.png differ diff --git a/tests/_ground_truth_figures/gpcca_meta_states_cmap.png b/tests/_ground_truth_figures/gpcca_meta_states_cmap.png new file mode 100644 index 000000000..944a520a7 Binary files /dev/null and b/tests/_ground_truth_figures/gpcca_meta_states_cmap.png differ diff --git a/tests/_ground_truth_figures/gpcca_meta_states_discrete.png b/tests/_ground_truth_figures/gpcca_meta_states_discrete.png new file mode 100644 index 000000000..3d19e4553 Binary files /dev/null and b/tests/_ground_truth_figures/gpcca_meta_states_discrete.png differ diff --git a/tests/_ground_truth_figures/gpcca_meta_states_lineages.png b/tests/_ground_truth_figures/gpcca_meta_states_lineages.png new file mode 100644 index 000000000..0812e25ea Binary files /dev/null and b/tests/_ground_truth_figures/gpcca_meta_states_lineages.png differ diff --git a/tests/_ground_truth_figures/gpcca_meta_states_no_same_plot.png b/tests/_ground_truth_figures/gpcca_meta_states_no_same_plot.png new file mode 100644 index 000000000..944a520a7 Binary files /dev/null and b/tests/_ground_truth_figures/gpcca_meta_states_no_same_plot.png differ diff --git a/tests/_ground_truth_figures/gpcca_meta_states_time.png b/tests/_ground_truth_figures/gpcca_meta_states_time.png new file mode 100644 index 000000000..3d19e4553 Binary files /dev/null and b/tests/_ground_truth_figures/gpcca_meta_states_time.png differ diff --git a/tests/_ground_truth_figures/gpcca_meta_states_title.png b/tests/_ground_truth_figures/gpcca_meta_states_title.png new file mode 100644 index 000000000..a49217656 Binary files /dev/null and b/tests/_ground_truth_figures/gpcca_meta_states_title.png differ diff --git a/tests/_ground_truth_figures/gpcca_real_spectrum.png b/tests/_ground_truth_figures/gpcca_real_spectrum.png index 0ba696b12..37b05a503 100644 Binary files a/tests/_ground_truth_figures/gpcca_real_spectrum.png and b/tests/_ground_truth_figures/gpcca_real_spectrum.png differ diff --git a/tests/_ground_truth_figures/gpcca_real_spectrum_hide_eigengap.png b/tests/_ground_truth_figures/gpcca_real_spectrum_hide_eigengap.png index 38db2e21b..218d31f9f 100644 Binary files a/tests/_ground_truth_figures/gpcca_real_spectrum_hide_eigengap.png and b/tests/_ground_truth_figures/gpcca_real_spectrum_hide_eigengap.png differ diff --git a/tests/_ground_truth_figures/gpcca_schur_matrix.png b/tests/_ground_truth_figures/gpcca_schur_matrix.png index 749880946..7fe655aa3 100644 Binary files a/tests/_ground_truth_figures/gpcca_schur_matrix.png and b/tests/_ground_truth_figures/gpcca_schur_matrix.png differ diff --git a/tests/_ground_truth_figures/gpcca_schur_matrix_cmap.png b/tests/_ground_truth_figures/gpcca_schur_matrix_cmap.png index 72a76a43f..d38ebcd84 100644 Binary files a/tests/_ground_truth_figures/gpcca_schur_matrix_cmap.png and b/tests/_ground_truth_figures/gpcca_schur_matrix_cmap.png differ diff --git a/tests/_ground_truth_figures/gpcca_schur_matrix_title.png b/tests/_ground_truth_figures/gpcca_schur_matrix_title.png index 7995f02f6..6988d9cdd 100644 Binary files a/tests/_ground_truth_figures/gpcca_schur_matrix_title.png and b/tests/_ground_truth_figures/gpcca_schur_matrix_title.png differ diff --git a/tests/_ground_truth_figures/gpcca_spectrum_evals.png b/tests/_ground_truth_figures/gpcca_spectrum_evals.png index 05e1f3f75..a86b1f123 100644 Binary files a/tests/_ground_truth_figures/gpcca_spectrum_evals.png and b/tests/_ground_truth_figures/gpcca_spectrum_evals.png differ diff --git a/tests/_ground_truth_figures/gpcca_spectrum_evals_complex.png b/tests/_ground_truth_figures/gpcca_spectrum_evals_complex.png index 054bbd82b..0d238e343 100644 Binary files a/tests/_ground_truth_figures/gpcca_spectrum_evals_complex.png and b/tests/_ground_truth_figures/gpcca_spectrum_evals_complex.png differ diff --git a/tests/_ground_truth_figures/gpcca_spectrum_title.png b/tests/_ground_truth_figures/gpcca_spectrum_title.png index 420756f70..c7e506011 100644 Binary files a/tests/_ground_truth_figures/gpcca_spectrum_title.png and b/tests/_ground_truth_figures/gpcca_spectrum_title.png differ diff --git a/tests/_ground_truth_figures/heatmap_cluster_genes.png b/tests/_ground_truth_figures/heatmap_cluster_genes.png index ec80b3405..838a4573a 100644 Binary files a/tests/_ground_truth_figures/heatmap_cluster_genes.png and b/tests/_ground_truth_figures/heatmap_cluster_genes.png differ diff --git a/tests/_ground_truth_figures/heatmap_cluster_key_fate_probs/lineage_0.png b/tests/_ground_truth_figures/heatmap_cluster_key_fate_probs/lineage_0.png index 678030743..81d55297c 100644 Binary files a/tests/_ground_truth_figures/heatmap_cluster_key_fate_probs/lineage_0.png and b/tests/_ground_truth_figures/heatmap_cluster_key_fate_probs/lineage_0.png differ diff --git a/tests/_ground_truth_figures/heatmap_cluster_key_fate_probs/lineage_1.png b/tests/_ground_truth_figures/heatmap_cluster_key_fate_probs/lineage_1.png index fa308138e..605e046bf 100644 Binary files a/tests/_ground_truth_figures/heatmap_cluster_key_fate_probs/lineage_1.png and b/tests/_ground_truth_figures/heatmap_cluster_key_fate_probs/lineage_1.png differ diff --git a/tests/_ground_truth_figures/heatmap_cluster_key_fate_probs/lineage_2.png b/tests/_ground_truth_figures/heatmap_cluster_key_fate_probs/lineage_2.png index bc4d73ce3..91f2c58c9 100644 Binary files a/tests/_ground_truth_figures/heatmap_cluster_key_fate_probs/lineage_2.png and b/tests/_ground_truth_figures/heatmap_cluster_key_fate_probs/lineage_2.png differ diff --git a/tests/_ground_truth_figures/heatmap_cluster_key_no_fate_probs/lineage_0.png b/tests/_ground_truth_figures/heatmap_cluster_key_no_fate_probs/lineage_0.png index 433688400..8c3a41a96 100644 Binary files a/tests/_ground_truth_figures/heatmap_cluster_key_no_fate_probs/lineage_0.png and b/tests/_ground_truth_figures/heatmap_cluster_key_no_fate_probs/lineage_0.png differ diff --git a/tests/_ground_truth_figures/heatmap_cluster_key_no_fate_probs/lineage_1.png b/tests/_ground_truth_figures/heatmap_cluster_key_no_fate_probs/lineage_1.png index 58788305e..814db34e7 100644 Binary files a/tests/_ground_truth_figures/heatmap_cluster_key_no_fate_probs/lineage_1.png and b/tests/_ground_truth_figures/heatmap_cluster_key_no_fate_probs/lineage_1.png differ diff --git a/tests/_ground_truth_figures/heatmap_cluster_key_no_fate_probs/lineage_2.png b/tests/_ground_truth_figures/heatmap_cluster_key_no_fate_probs/lineage_2.png index 1b0d84c6d..e795f8d72 100644 Binary files a/tests/_ground_truth_figures/heatmap_cluster_key_no_fate_probs/lineage_2.png and b/tests/_ground_truth_figures/heatmap_cluster_key_no_fate_probs/lineage_2.png differ diff --git a/tests/_ground_truth_figures/heatmap_cluster_no_scale.png b/tests/_ground_truth_figures/heatmap_cluster_no_scale.png index 58fb80c44..5dd69799f 100644 Binary files a/tests/_ground_truth_figures/heatmap_cluster_no_scale.png and b/tests/_ground_truth_figures/heatmap_cluster_no_scale.png differ diff --git a/tests/_ground_truth_figures/heatmap_cmap.png b/tests/_ground_truth_figures/heatmap_cmap.png index 88093ec76..d47f0858c 100644 Binary files a/tests/_ground_truth_figures/heatmap_cmap.png and b/tests/_ground_truth_figures/heatmap_cmap.png differ diff --git a/tests/_ground_truth_figures/heatmap_fate_probs_genes.png b/tests/_ground_truth_figures/heatmap_fate_probs_genes.png index 2b0f88f08..5c3ce454e 100644 Binary files a/tests/_ground_truth_figures/heatmap_fate_probs_genes.png and b/tests/_ground_truth_figures/heatmap_fate_probs_genes.png differ diff --git a/tests/_ground_truth_figures/heatmap_fate_probs_lineages/lineage_0.png b/tests/_ground_truth_figures/heatmap_fate_probs_lineages/lineage_0.png index 28870a43e..e3d9d1607 100644 Binary files a/tests/_ground_truth_figures/heatmap_fate_probs_lineages/lineage_0.png and b/tests/_ground_truth_figures/heatmap_fate_probs_lineages/lineage_0.png differ diff --git a/tests/_ground_truth_figures/heatmap_fate_probs_lineages/lineage_1.png b/tests/_ground_truth_figures/heatmap_fate_probs_lineages/lineage_1.png index b58c499dd..3cb8e03cd 100644 Binary files a/tests/_ground_truth_figures/heatmap_fate_probs_lineages/lineage_1.png and b/tests/_ground_truth_figures/heatmap_fate_probs_lineages/lineage_1.png differ diff --git a/tests/_ground_truth_figures/heatmap_fate_probs_lineages/lineage_2.png b/tests/_ground_truth_figures/heatmap_fate_probs_lineages/lineage_2.png index dfc372838..81125bae4 100644 Binary files a/tests/_ground_truth_figures/heatmap_fate_probs_lineages/lineage_2.png and b/tests/_ground_truth_figures/heatmap_fate_probs_lineages/lineage_2.png differ diff --git a/tests/_ground_truth_figures/heatmap_gene_symbols/lineage_0.png b/tests/_ground_truth_figures/heatmap_gene_symbols/lineage_0.png index 5be19cbb4..b8a552687 100644 Binary files a/tests/_ground_truth_figures/heatmap_gene_symbols/lineage_0.png and b/tests/_ground_truth_figures/heatmap_gene_symbols/lineage_0.png differ diff --git a/tests/_ground_truth_figures/heatmap_gene_symbols/lineage_1.png b/tests/_ground_truth_figures/heatmap_gene_symbols/lineage_1.png index 7be4324df..e278223db 100644 Binary files a/tests/_ground_truth_figures/heatmap_gene_symbols/lineage_1.png and b/tests/_ground_truth_figures/heatmap_gene_symbols/lineage_1.png differ diff --git a/tests/_ground_truth_figures/heatmap_gene_symbols/lineage_2.png b/tests/_ground_truth_figures/heatmap_gene_symbols/lineage_2.png index 45fa79272..f8e78b54f 100644 Binary files a/tests/_ground_truth_figures/heatmap_gene_symbols/lineage_2.png and b/tests/_ground_truth_figures/heatmap_gene_symbols/lineage_2.png differ diff --git a/tests/_ground_truth_figures/heatmap_genes.png b/tests/_ground_truth_figures/heatmap_genes.png index e38fec718..f94cd55b3 100644 Binary files a/tests/_ground_truth_figures/heatmap_genes.png and b/tests/_ground_truth_figures/heatmap_genes.png differ diff --git a/tests/_ground_truth_figures/heatmap_genes_1_gene_failed.png b/tests/_ground_truth_figures/heatmap_genes_1_gene_failed.png index 603c180d5..021f68a71 100644 Binary files a/tests/_ground_truth_figures/heatmap_genes_1_gene_failed.png and b/tests/_ground_truth_figures/heatmap_genes_1_gene_failed.png differ diff --git a/tests/_ground_truth_figures/heatmap_keep_gene_order/lineage_0.png b/tests/_ground_truth_figures/heatmap_keep_gene_order/lineage_0.png index 2ffa4db9a..1796eae9d 100644 Binary files a/tests/_ground_truth_figures/heatmap_keep_gene_order/lineage_0.png and b/tests/_ground_truth_figures/heatmap_keep_gene_order/lineage_0.png differ diff --git a/tests/_ground_truth_figures/heatmap_keep_gene_order/lineage_1.png b/tests/_ground_truth_figures/heatmap_keep_gene_order/lineage_1.png index 82f63c615..564d1c399 100644 Binary files a/tests/_ground_truth_figures/heatmap_keep_gene_order/lineage_1.png and b/tests/_ground_truth_figures/heatmap_keep_gene_order/lineage_1.png differ diff --git a/tests/_ground_truth_figures/heatmap_keep_gene_order/lineage_2.png b/tests/_ground_truth_figures/heatmap_keep_gene_order/lineage_2.png index 525386011..79f870d45 100644 Binary files a/tests/_ground_truth_figures/heatmap_keep_gene_order/lineage_2.png and b/tests/_ground_truth_figures/heatmap_keep_gene_order/lineage_2.png differ diff --git a/tests/_ground_truth_figures/heatmap_lineage_height/lineage_0.png b/tests/_ground_truth_figures/heatmap_lineage_height/lineage_0.png index 2ffa4db9a..1796eae9d 100644 Binary files a/tests/_ground_truth_figures/heatmap_lineage_height/lineage_0.png and b/tests/_ground_truth_figures/heatmap_lineage_height/lineage_0.png differ diff --git a/tests/_ground_truth_figures/heatmap_lineage_height/lineage_1.png b/tests/_ground_truth_figures/heatmap_lineage_height/lineage_1.png index 8dc73eddf..9a15d2fd9 100644 Binary files a/tests/_ground_truth_figures/heatmap_lineage_height/lineage_1.png and b/tests/_ground_truth_figures/heatmap_lineage_height/lineage_1.png differ diff --git a/tests/_ground_truth_figures/heatmap_lineage_height/lineage_2.png b/tests/_ground_truth_figures/heatmap_lineage_height/lineage_2.png index 121e9a2f1..d673571fd 100644 Binary files a/tests/_ground_truth_figures/heatmap_lineage_height/lineage_2.png and b/tests/_ground_truth_figures/heatmap_lineage_height/lineage_2.png differ diff --git a/tests/_ground_truth_figures/heatmap_lineages/lineage_0.png b/tests/_ground_truth_figures/heatmap_lineages/lineage_0.png index 2ffa4db9a..1796eae9d 100644 Binary files a/tests/_ground_truth_figures/heatmap_lineages/lineage_0.png and b/tests/_ground_truth_figures/heatmap_lineages/lineage_0.png differ diff --git a/tests/_ground_truth_figures/heatmap_lineages/lineage_1.png b/tests/_ground_truth_figures/heatmap_lineages/lineage_1.png index 8dc73eddf..9a15d2fd9 100644 Binary files a/tests/_ground_truth_figures/heatmap_lineages/lineage_1.png and b/tests/_ground_truth_figures/heatmap_lineages/lineage_1.png differ diff --git a/tests/_ground_truth_figures/heatmap_lineages/lineage_2.png b/tests/_ground_truth_figures/heatmap_lineages/lineage_2.png index 121e9a2f1..d673571fd 100644 Binary files a/tests/_ground_truth_figures/heatmap_lineages/lineage_2.png and b/tests/_ground_truth_figures/heatmap_lineages/lineage_2.png differ diff --git a/tests/_ground_truth_figures/heatmap_lineages_1_lineage_failed/lineage_1.png b/tests/_ground_truth_figures/heatmap_lineages_1_lineage_failed/lineage_1.png index 7f02e6b94..9a15d2fd9 100644 Binary files a/tests/_ground_truth_figures/heatmap_lineages_1_lineage_failed/lineage_1.png and b/tests/_ground_truth_figures/heatmap_lineages_1_lineage_failed/lineage_1.png differ diff --git a/tests/_ground_truth_figures/heatmap_lineages_1_lineage_failed/lineage_2.png b/tests/_ground_truth_figures/heatmap_lineages_1_lineage_failed/lineage_2.png index 121e9a2f1..d673571fd 100644 Binary files a/tests/_ground_truth_figures/heatmap_lineages_1_lineage_failed/lineage_2.png and b/tests/_ground_truth_figures/heatmap_lineages_1_lineage_failed/lineage_2.png differ diff --git a/tests/_ground_truth_figures/heatmap_lineages_bwd/lineage_0.png b/tests/_ground_truth_figures/heatmap_lineages_bwd/lineage_0.png index 1d1ceecb1..676823c9d 100644 Binary files a/tests/_ground_truth_figures/heatmap_lineages_bwd/lineage_0.png and b/tests/_ground_truth_figures/heatmap_lineages_bwd/lineage_0.png differ diff --git a/tests/_ground_truth_figures/heatmap_lineages_bwd/lineage_1.png b/tests/_ground_truth_figures/heatmap_lineages_bwd/lineage_1.png index 112b3158f..3631f2e68 100644 Binary files a/tests/_ground_truth_figures/heatmap_lineages_bwd/lineage_1.png and b/tests/_ground_truth_figures/heatmap_lineages_bwd/lineage_1.png differ diff --git a/tests/_ground_truth_figures/heatmap_lineages_raw/lineage_0.png b/tests/_ground_truth_figures/heatmap_lineages_raw/lineage_0.png index 5d6e19093..d0849459f 100644 Binary files a/tests/_ground_truth_figures/heatmap_lineages_raw/lineage_0.png and b/tests/_ground_truth_figures/heatmap_lineages_raw/lineage_0.png differ diff --git a/tests/_ground_truth_figures/heatmap_lineages_raw/lineage_1.png b/tests/_ground_truth_figures/heatmap_lineages_raw/lineage_1.png index 107423fc4..1638862dd 100644 Binary files a/tests/_ground_truth_figures/heatmap_lineages_raw/lineage_1.png and b/tests/_ground_truth_figures/heatmap_lineages_raw/lineage_1.png differ diff --git a/tests/_ground_truth_figures/heatmap_lineages_raw/lineage_2.png b/tests/_ground_truth_figures/heatmap_lineages_raw/lineage_2.png index a78f1e2f9..6a104ba6c 100644 Binary files a/tests/_ground_truth_figures/heatmap_lineages_raw/lineage_2.png and b/tests/_ground_truth_figures/heatmap_lineages_raw/lineage_2.png differ diff --git a/tests/_ground_truth_figures/heatmap_multiple_cluster_keys/lineage_0.png b/tests/_ground_truth_figures/heatmap_multiple_cluster_keys/lineage_0.png index 8900b470d..dc7b2282a 100644 Binary files a/tests/_ground_truth_figures/heatmap_multiple_cluster_keys/lineage_0.png and b/tests/_ground_truth_figures/heatmap_multiple_cluster_keys/lineage_0.png differ diff --git a/tests/_ground_truth_figures/heatmap_multiple_cluster_keys/lineage_1.png b/tests/_ground_truth_figures/heatmap_multiple_cluster_keys/lineage_1.png index dc32fbd86..9dba631d9 100644 Binary files a/tests/_ground_truth_figures/heatmap_multiple_cluster_keys/lineage_1.png and b/tests/_ground_truth_figures/heatmap_multiple_cluster_keys/lineage_1.png differ diff --git a/tests/_ground_truth_figures/heatmap_multiple_cluster_keys/lineage_2.png b/tests/_ground_truth_figures/heatmap_multiple_cluster_keys/lineage_2.png index e4ffe9594..9be61e7eb 100644 Binary files a/tests/_ground_truth_figures/heatmap_multiple_cluster_keys/lineage_2.png and b/tests/_ground_truth_figures/heatmap_multiple_cluster_keys/lineage_2.png differ diff --git a/tests/_ground_truth_figures/heatmap_multiple_cluster_keys_show_all_genes/lineage_0.png b/tests/_ground_truth_figures/heatmap_multiple_cluster_keys_show_all_genes/lineage_0.png index 2ffa4db9a..1796eae9d 100644 Binary files a/tests/_ground_truth_figures/heatmap_multiple_cluster_keys_show_all_genes/lineage_0.png and b/tests/_ground_truth_figures/heatmap_multiple_cluster_keys_show_all_genes/lineage_0.png differ diff --git a/tests/_ground_truth_figures/heatmap_multiple_cluster_keys_show_all_genes/lineage_1.png b/tests/_ground_truth_figures/heatmap_multiple_cluster_keys_show_all_genes/lineage_1.png index 8dc73eddf..9a15d2fd9 100644 Binary files a/tests/_ground_truth_figures/heatmap_multiple_cluster_keys_show_all_genes/lineage_1.png and b/tests/_ground_truth_figures/heatmap_multiple_cluster_keys_show_all_genes/lineage_1.png differ diff --git a/tests/_ground_truth_figures/heatmap_multiple_cluster_keys_show_all_genes/lineage_2.png b/tests/_ground_truth_figures/heatmap_multiple_cluster_keys_show_all_genes/lineage_2.png index 121e9a2f1..d673571fd 100644 Binary files a/tests/_ground_truth_figures/heatmap_multiple_cluster_keys_show_all_genes/lineage_2.png and b/tests/_ground_truth_figures/heatmap_multiple_cluster_keys_show_all_genes/lineage_2.png differ diff --git a/tests/_ground_truth_figures/heatmap_no_cbar_genes.png b/tests/_ground_truth_figures/heatmap_no_cbar_genes.png index c1787c617..50ef37188 100644 Binary files a/tests/_ground_truth_figures/heatmap_no_cbar_genes.png and b/tests/_ground_truth_figures/heatmap_no_cbar_genes.png differ diff --git a/tests/_ground_truth_figures/heatmap_no_cbar_lineages/lineage_0.png b/tests/_ground_truth_figures/heatmap_no_cbar_lineages/lineage_0.png index 2bdaaa352..8c884aeca 100644 Binary files a/tests/_ground_truth_figures/heatmap_no_cbar_lineages/lineage_0.png and b/tests/_ground_truth_figures/heatmap_no_cbar_lineages/lineage_0.png differ diff --git a/tests/_ground_truth_figures/heatmap_no_cbar_lineages/lineage_1.png b/tests/_ground_truth_figures/heatmap_no_cbar_lineages/lineage_1.png index 990f04a42..9cd4b8a83 100644 Binary files a/tests/_ground_truth_figures/heatmap_no_cbar_lineages/lineage_1.png and b/tests/_ground_truth_figures/heatmap_no_cbar_lineages/lineage_1.png differ diff --git a/tests/_ground_truth_figures/heatmap_no_cbar_lineages/lineage_2.png b/tests/_ground_truth_figures/heatmap_no_cbar_lineages/lineage_2.png index ee1664a85..bee13b33e 100644 Binary files a/tests/_ground_truth_figures/heatmap_no_cbar_lineages/lineage_2.png and b/tests/_ground_truth_figures/heatmap_no_cbar_lineages/lineage_2.png differ diff --git a/tests/_ground_truth_figures/heatmap_no_cluster/lineage_0.png b/tests/_ground_truth_figures/heatmap_no_cluster/lineage_0.png index d05be698f..83ebae62e 100644 Binary files a/tests/_ground_truth_figures/heatmap_no_cluster/lineage_0.png and b/tests/_ground_truth_figures/heatmap_no_cluster/lineage_0.png differ diff --git a/tests/_ground_truth_figures/heatmap_no_cluster/lineage_1.png b/tests/_ground_truth_figures/heatmap_no_cluster/lineage_1.png index a2202da4e..9f116bc8a 100644 Binary files a/tests/_ground_truth_figures/heatmap_no_cluster/lineage_1.png and b/tests/_ground_truth_figures/heatmap_no_cluster/lineage_1.png differ diff --git a/tests/_ground_truth_figures/heatmap_no_cluster/lineage_2.png b/tests/_ground_truth_figures/heatmap_no_cluster/lineage_2.png index e3af37fb2..5dd849fd2 100644 Binary files a/tests/_ground_truth_figures/heatmap_no_cluster/lineage_2.png and b/tests/_ground_truth_figures/heatmap_no_cluster/lineage_2.png differ diff --git a/tests/_ground_truth_figures/heatmap_no_cluster_genes/lineage_0.png b/tests/_ground_truth_figures/heatmap_no_cluster_genes/lineage_0.png index 2ffa4db9a..1796eae9d 100644 Binary files a/tests/_ground_truth_figures/heatmap_no_cluster_genes/lineage_0.png and b/tests/_ground_truth_figures/heatmap_no_cluster_genes/lineage_0.png differ diff --git a/tests/_ground_truth_figures/heatmap_no_cluster_genes/lineage_1.png b/tests/_ground_truth_figures/heatmap_no_cluster_genes/lineage_1.png index 8dc73eddf..9a15d2fd9 100644 Binary files a/tests/_ground_truth_figures/heatmap_no_cluster_genes/lineage_1.png and b/tests/_ground_truth_figures/heatmap_no_cluster_genes/lineage_1.png differ diff --git a/tests/_ground_truth_figures/heatmap_no_cluster_genes/lineage_2.png b/tests/_ground_truth_figures/heatmap_no_cluster_genes/lineage_2.png index 121e9a2f1..d673571fd 100644 Binary files a/tests/_ground_truth_figures/heatmap_no_cluster_genes/lineage_2.png and b/tests/_ground_truth_figures/heatmap_no_cluster_genes/lineage_2.png differ diff --git a/tests/_ground_truth_figures/heatmap_no_convolve/lineage_0.png b/tests/_ground_truth_figures/heatmap_no_convolve/lineage_0.png index d05be698f..83ebae62e 100644 Binary files a/tests/_ground_truth_figures/heatmap_no_convolve/lineage_0.png and b/tests/_ground_truth_figures/heatmap_no_convolve/lineage_0.png differ diff --git a/tests/_ground_truth_figures/heatmap_no_convolve/lineage_1.png b/tests/_ground_truth_figures/heatmap_no_convolve/lineage_1.png index a2202da4e..9f116bc8a 100644 Binary files a/tests/_ground_truth_figures/heatmap_no_convolve/lineage_1.png and b/tests/_ground_truth_figures/heatmap_no_convolve/lineage_1.png differ diff --git a/tests/_ground_truth_figures/heatmap_no_convolve/lineage_2.png b/tests/_ground_truth_figures/heatmap_no_convolve/lineage_2.png index e3af37fb2..5dd849fd2 100644 Binary files a/tests/_ground_truth_figures/heatmap_no_convolve/lineage_2.png and b/tests/_ground_truth_figures/heatmap_no_convolve/lineage_2.png differ diff --git a/tests/_ground_truth_figures/heatmap_no_scale_genes.png b/tests/_ground_truth_figures/heatmap_no_scale_genes.png index a673dca23..d1d3242b1 100644 Binary files a/tests/_ground_truth_figures/heatmap_no_scale_genes.png and b/tests/_ground_truth_figures/heatmap_no_scale_genes.png differ diff --git a/tests/_ground_truth_figures/heatmap_no_scale_lineages/lineage_0.png b/tests/_ground_truth_figures/heatmap_no_scale_lineages/lineage_0.png index a783146f0..14a66d18e 100644 Binary files a/tests/_ground_truth_figures/heatmap_no_scale_lineages/lineage_0.png and b/tests/_ground_truth_figures/heatmap_no_scale_lineages/lineage_0.png differ diff --git a/tests/_ground_truth_figures/heatmap_no_scale_lineages/lineage_1.png b/tests/_ground_truth_figures/heatmap_no_scale_lineages/lineage_1.png index afe2fe4ed..5741ad512 100644 Binary files a/tests/_ground_truth_figures/heatmap_no_scale_lineages/lineage_1.png and b/tests/_ground_truth_figures/heatmap_no_scale_lineages/lineage_1.png differ diff --git a/tests/_ground_truth_figures/heatmap_no_scale_lineages/lineage_2.png b/tests/_ground_truth_figures/heatmap_no_scale_lineages/lineage_2.png index ac9cadf80..5d0bc55b1 100644 Binary files a/tests/_ground_truth_figures/heatmap_no_scale_lineages/lineage_2.png and b/tests/_ground_truth_figures/heatmap_no_scale_lineages/lineage_2.png differ diff --git a/tests/_ground_truth_figures/heatmap_show_dendrogram.png b/tests/_ground_truth_figures/heatmap_show_dendrogram.png index ec80b3405..838a4573a 100644 Binary files a/tests/_ground_truth_figures/heatmap_show_dendrogram.png and b/tests/_ground_truth_figures/heatmap_show_dendrogram.png differ diff --git a/tests/_ground_truth_figures/heatmap_time_range/lineage_0.png b/tests/_ground_truth_figures/heatmap_time_range/lineage_0.png index f9147fd10..4fef75570 100644 Binary files a/tests/_ground_truth_figures/heatmap_time_range/lineage_0.png and b/tests/_ground_truth_figures/heatmap_time_range/lineage_0.png differ diff --git a/tests/_ground_truth_figures/heatmap_time_range/lineage_1.png b/tests/_ground_truth_figures/heatmap_time_range/lineage_1.png index a1a50878e..a455e3792 100644 Binary files a/tests/_ground_truth_figures/heatmap_time_range/lineage_1.png and b/tests/_ground_truth_figures/heatmap_time_range/lineage_1.png differ diff --git a/tests/_ground_truth_figures/heatmap_time_range/lineage_2.png b/tests/_ground_truth_figures/heatmap_time_range/lineage_2.png index fd742fc70..f692dae43 100644 Binary files a/tests/_ground_truth_figures/heatmap_time_range/lineage_2.png and b/tests/_ground_truth_figures/heatmap_time_range/lineage_2.png differ diff --git a/tests/_ground_truth_figures/kernel_random_walk_basis.png b/tests/_ground_truth_figures/kernel_random_walk_basis.png index 2b267b4aa..6bde510c6 100644 Binary files a/tests/_ground_truth_figures/kernel_random_walk_basis.png and b/tests/_ground_truth_figures/kernel_random_walk_basis.png differ diff --git a/tests/_ground_truth_figures/kernel_random_walk_cmap.png b/tests/_ground_truth_figures/kernel_random_walk_cmap.png index fafe9906f..533e620bd 100644 Binary files a/tests/_ground_truth_figures/kernel_random_walk_cmap.png and b/tests/_ground_truth_figures/kernel_random_walk_cmap.png differ diff --git a/tests/_ground_truth_figures/kernel_random_walk_ixs_legend_loc.png b/tests/_ground_truth_figures/kernel_random_walk_ixs_legend_loc.png index 63f6c52a4..fb735998e 100644 Binary files a/tests/_ground_truth_figures/kernel_random_walk_ixs_legend_loc.png and b/tests/_ground_truth_figures/kernel_random_walk_ixs_legend_loc.png differ diff --git a/tests/_ground_truth_figures/kernel_random_walk_kwargs.png b/tests/_ground_truth_figures/kernel_random_walk_kwargs.png index d9732e114..b8de896af 100644 Binary files a/tests/_ground_truth_figures/kernel_random_walk_kwargs.png and b/tests/_ground_truth_figures/kernel_random_walk_kwargs.png differ diff --git a/tests/_ground_truth_figures/kernel_random_walk_line_alpha.png b/tests/_ground_truth_figures/kernel_random_walk_line_alpha.png index aab843f37..14b6e3017 100644 Binary files a/tests/_ground_truth_figures/kernel_random_walk_line_alpha.png and b/tests/_ground_truth_figures/kernel_random_walk_line_alpha.png differ diff --git a/tests/_ground_truth_figures/kernel_random_walk_line_width.png b/tests/_ground_truth_figures/kernel_random_walk_line_width.png index 65caaaa82..e7dc86882 100644 Binary files a/tests/_ground_truth_figures/kernel_random_walk_line_width.png and b/tests/_ground_truth_figures/kernel_random_walk_line_width.png differ diff --git a/tests/_ground_truth_figures/kernel_random_walk_params.png b/tests/_ground_truth_figures/kernel_random_walk_params.png index a731ee7c4..fdace1389 100644 Binary files a/tests/_ground_truth_figures/kernel_random_walk_params.png and b/tests/_ground_truth_figures/kernel_random_walk_params.png differ diff --git a/tests/_ground_truth_figures/kernel_random_walk_start_ixs_range.png b/tests/_ground_truth_figures/kernel_random_walk_start_ixs_range.png index ccdd4d5fa..929752960 100644 Binary files a/tests/_ground_truth_figures/kernel_random_walk_start_ixs_range.png and b/tests/_ground_truth_figures/kernel_random_walk_start_ixs_range.png differ diff --git a/tests/_ground_truth_figures/lin_probs.png b/tests/_ground_truth_figures/lin_probs.png new file mode 100644 index 000000000..d8122c594 Binary files /dev/null and b/tests/_ground_truth_figures/lin_probs.png differ diff --git a/tests/_ground_truth_figures/lin_probs_clusters.png b/tests/_ground_truth_figures/lin_probs_clusters.png new file mode 100644 index 000000000..d8122c594 Binary files /dev/null and b/tests/_ground_truth_figures/lin_probs_clusters.png differ diff --git a/tests/_ground_truth_figures/lin_probs_cmap.png b/tests/_ground_truth_figures/lin_probs_cmap.png new file mode 100644 index 000000000..d8122c594 Binary files /dev/null and b/tests/_ground_truth_figures/lin_probs_cmap.png differ diff --git a/tests/_ground_truth_figures/lin_probs_lineages.png b/tests/_ground_truth_figures/lin_probs_lineages.png new file mode 100644 index 000000000..a550958cf Binary files /dev/null and b/tests/_ground_truth_figures/lin_probs_lineages.png differ diff --git a/tests/_ground_truth_figures/lin_probs_time.png b/tests/_ground_truth_figures/lin_probs_time.png new file mode 100644 index 000000000..7d170ce09 Binary files /dev/null and b/tests/_ground_truth_figures/lin_probs_time.png differ diff --git a/tests/_ground_truth_figures/log_odds.png b/tests/_ground_truth_figures/log_odds.png index f8f31350b..f3b9aa4c7 100644 Binary files a/tests/_ground_truth_figures/log_odds.png and b/tests/_ground_truth_figures/log_odds.png differ diff --git a/tests/_ground_truth_figures/log_odds_alpha.png b/tests/_ground_truth_figures/log_odds_alpha.png index 07d1574ca..00cd267a4 100644 Binary files a/tests/_ground_truth_figures/log_odds_alpha.png and b/tests/_ground_truth_figures/log_odds_alpha.png differ diff --git a/tests/_ground_truth_figures/log_odds_bwd.png b/tests/_ground_truth_figures/log_odds_bwd.png index 8fe7c2d07..cfce8011b 100644 Binary files a/tests/_ground_truth_figures/log_odds_bwd.png and b/tests/_ground_truth_figures/log_odds_bwd.png differ diff --git a/tests/_ground_truth_figures/log_odds_categorical_keys.png b/tests/_ground_truth_figures/log_odds_categorical_keys.png index 625f41b1a..4f1c7f7c6 100644 Binary files a/tests/_ground_truth_figures/log_odds_categorical_keys.png and b/tests/_ground_truth_figures/log_odds_categorical_keys.png differ diff --git a/tests/_ground_truth_figures/log_odds_cmap.png b/tests/_ground_truth_figures/log_odds_cmap.png index 9011414ff..16d84c8c9 100644 Binary files a/tests/_ground_truth_figures/log_odds_cmap.png and b/tests/_ground_truth_figures/log_odds_cmap.png differ diff --git a/tests/_ground_truth_figures/log_odds_continuous_keys.png b/tests/_ground_truth_figures/log_odds_continuous_keys.png index d188cd7a6..9dc4f4a82 100644 Binary files a/tests/_ground_truth_figures/log_odds_continuous_keys.png and b/tests/_ground_truth_figures/log_odds_continuous_keys.png differ diff --git a/tests/_ground_truth_figures/log_odds_fontsize.png b/tests/_ground_truth_figures/log_odds_fontsize.png index 4aba70934..e421ff73e 100644 Binary files a/tests/_ground_truth_figures/log_odds_fontsize.png and b/tests/_ground_truth_figures/log_odds_fontsize.png differ diff --git a/tests/_ground_truth_figures/log_odds_jitter.png b/tests/_ground_truth_figures/log_odds_jitter.png index 67a0dae94..829fd579e 100644 Binary files a/tests/_ground_truth_figures/log_odds_jitter.png and b/tests/_ground_truth_figures/log_odds_jitter.png differ diff --git a/tests/_ground_truth_figures/log_odds_kwargs.png b/tests/_ground_truth_figures/log_odds_kwargs.png index 1c5507068..7c9b8a5b0 100644 Binary files a/tests/_ground_truth_figures/log_odds_kwargs.png and b/tests/_ground_truth_figures/log_odds_kwargs.png differ diff --git a/tests/_ground_truth_figures/log_odds_kwargs_return_ax.png b/tests/_ground_truth_figures/log_odds_kwargs_return_ax.png index dd8405547..a74796375 100644 Binary files a/tests/_ground_truth_figures/log_odds_kwargs_return_ax.png and b/tests/_ground_truth_figures/log_odds_kwargs_return_ax.png differ diff --git a/tests/_ground_truth_figures/log_odds_kwargs_return_axes.png b/tests/_ground_truth_figures/log_odds_kwargs_return_axes.png index e38229624..a9c8204b4 100644 Binary files a/tests/_ground_truth_figures/log_odds_kwargs_return_axes.png and b/tests/_ground_truth_figures/log_odds_kwargs_return_axes.png differ diff --git a/tests/_ground_truth_figures/log_odds_layer.png b/tests/_ground_truth_figures/log_odds_layer.png index 08e5c3db8..c08c68a8f 100644 Binary files a/tests/_ground_truth_figures/log_odds_layer.png and b/tests/_ground_truth_figures/log_odds_layer.png differ diff --git a/tests/_ground_truth_figures/log_odds_legend_loc.png b/tests/_ground_truth_figures/log_odds_legend_loc.png index c6cd2fb27..9c6668e99 100644 Binary files a/tests/_ground_truth_figures/log_odds_legend_loc.png and b/tests/_ground_truth_figures/log_odds_legend_loc.png differ diff --git a/tests/_ground_truth_figures/log_odds_multiple_threshold.png b/tests/_ground_truth_figures/log_odds_multiple_threshold.png index 914914f81..fb4b5cce0 100644 Binary files a/tests/_ground_truth_figures/log_odds_multiple_threshold.png and b/tests/_ground_truth_figures/log_odds_multiple_threshold.png differ diff --git a/tests/_ground_truth_figures/log_odds_ncols.png b/tests/_ground_truth_figures/log_odds_ncols.png index e9da637fd..80ab95b6f 100644 Binary files a/tests/_ground_truth_figures/log_odds_ncols.png and b/tests/_ground_truth_figures/log_odds_ncols.png differ diff --git a/tests/_ground_truth_figures/log_odds_rest.png b/tests/_ground_truth_figures/log_odds_rest.png index 7b2ce3e1a..91e6c8b0e 100644 Binary files a/tests/_ground_truth_figures/log_odds_rest.png and b/tests/_ground_truth_figures/log_odds_rest.png differ diff --git a/tests/_ground_truth_figures/log_odds_size.png b/tests/_ground_truth_figures/log_odds_size.png index ca63f1ff0..917b6fcbe 100644 Binary files a/tests/_ground_truth_figures/log_odds_size.png and b/tests/_ground_truth_figures/log_odds_size.png differ diff --git a/tests/_ground_truth_figures/log_odds_threshold.png b/tests/_ground_truth_figures/log_odds_threshold.png index c1f1e06fd..13348243a 100644 Binary files a/tests/_ground_truth_figures/log_odds_threshold.png and b/tests/_ground_truth_figures/log_odds_threshold.png differ diff --git a/tests/_ground_truth_figures/log_odds_threshold_color.png b/tests/_ground_truth_figures/log_odds_threshold_color.png index 919f6437d..0e929d803 100644 Binary files a/tests/_ground_truth_figures/log_odds_threshold_color.png and b/tests/_ground_truth_figures/log_odds_threshold_color.png differ diff --git a/tests/_ground_truth_figures/log_odds_use_raw.png b/tests/_ground_truth_figures/log_odds_use_raw.png index 42a1fac06..f188aeaad 100644 Binary files a/tests/_ground_truth_figures/log_odds_use_raw.png and b/tests/_ground_truth_figures/log_odds_use_raw.png differ diff --git a/tests/_ground_truth_figures/log_odds_xticks_steps_size.png b/tests/_ground_truth_figures/log_odds_xticks_steps_size.png index f439f8535..60fb82d4d 100644 Binary files a/tests/_ground_truth_figures/log_odds_xticks_steps_size.png and b/tests/_ground_truth_figures/log_odds_xticks_steps_size.png differ diff --git a/tests/_ground_truth_figures/mc_complex_spectrum.png b/tests/_ground_truth_figures/mc_complex_spectrum.png index 298be848d..4377182a2 100644 Binary files a/tests/_ground_truth_figures/mc_complex_spectrum.png and b/tests/_ground_truth_figures/mc_complex_spectrum.png differ diff --git a/tests/_ground_truth_figures/mc_kwargs_linewidths.png b/tests/_ground_truth_figures/mc_kwargs_linewidths.png index 41741a0b6..9638d7856 100644 Binary files a/tests/_ground_truth_figures/mc_kwargs_linewidths.png and b/tests/_ground_truth_figures/mc_kwargs_linewidths.png differ diff --git a/tests/_ground_truth_figures/mc_marker.png b/tests/_ground_truth_figures/mc_marker.png index 6bc9f08f5..38adf2717 100644 Binary files a/tests/_ground_truth_figures/mc_marker.png and b/tests/_ground_truth_figures/mc_marker.png differ diff --git a/tests/_ground_truth_figures/mc_real_spectrum.png b/tests/_ground_truth_figures/mc_real_spectrum.png index 0ba696b12..37b05a503 100644 Binary files a/tests/_ground_truth_figures/mc_real_spectrum.png and b/tests/_ground_truth_figures/mc_real_spectrum.png differ diff --git a/tests/_ground_truth_figures/mc_real_spectrum_hide_eigengap.png b/tests/_ground_truth_figures/mc_real_spectrum_hide_eigengap.png index 38db2e21b..218d31f9f 100644 Binary files a/tests/_ground_truth_figures/mc_real_spectrum_hide_eigengap.png and b/tests/_ground_truth_figures/mc_real_spectrum_hide_eigengap.png differ diff --git a/tests/_ground_truth_figures/mc_real_spectrum_hide_xticks.png b/tests/_ground_truth_figures/mc_real_spectrum_hide_xticks.png index f6e24d03f..b5c33423b 100644 Binary files a/tests/_ground_truth_figures/mc_real_spectrum_hide_xticks.png and b/tests/_ground_truth_figures/mc_real_spectrum_hide_xticks.png differ diff --git a/tests/_ground_truth_figures/mc_spectrum.png b/tests/_ground_truth_figures/mc_spectrum.png index 0ba696b12..37b05a503 100644 Binary files a/tests/_ground_truth_figures/mc_spectrum.png and b/tests/_ground_truth_figures/mc_spectrum.png differ diff --git a/tests/_ground_truth_figures/mc_spectrum_evals.png b/tests/_ground_truth_figures/mc_spectrum_evals.png index 05e1f3f75..a86b1f123 100644 Binary files a/tests/_ground_truth_figures/mc_spectrum_evals.png and b/tests/_ground_truth_figures/mc_spectrum_evals.png differ diff --git a/tests/_ground_truth_figures/mc_spectrum_evals_complex.png b/tests/_ground_truth_figures/mc_spectrum_evals_complex.png index 054bbd82b..0d238e343 100644 Binary files a/tests/_ground_truth_figures/mc_spectrum_evals_complex.png and b/tests/_ground_truth_figures/mc_spectrum_evals_complex.png differ diff --git a/tests/_ground_truth_figures/mc_spectrum_title.png b/tests/_ground_truth_figures/mc_spectrum_title.png index 4b76a14ec..d0d271ede 100644 Binary files a/tests/_ground_truth_figures/mc_spectrum_title.png and b/tests/_ground_truth_figures/mc_spectrum_title.png differ diff --git a/tests/_ground_truth_figures/mode_clustermap.png b/tests/_ground_truth_figures/mode_clustermap.png index 299204ee0..ee2c7a3b2 100644 Binary files a/tests/_ground_truth_figures/mode_clustermap.png and b/tests/_ground_truth_figures/mode_clustermap.png differ diff --git a/tests/_ground_truth_figures/mode_clustermap_format.png b/tests/_ground_truth_figures/mode_clustermap_format.png index f74dcd6f2..6df710b44 100644 Binary files a/tests/_ground_truth_figures/mode_clustermap_format.png and b/tests/_ground_truth_figures/mode_clustermap_format.png differ diff --git a/tests/_ground_truth_figures/mode_heatmap.png b/tests/_ground_truth_figures/mode_heatmap.png index ed20b55c9..dbcfb767e 100644 Binary files a/tests/_ground_truth_figures/mode_heatmap.png and b/tests/_ground_truth_figures/mode_heatmap.png differ diff --git a/tests/_ground_truth_figures/mode_heatmap_clusters.png b/tests/_ground_truth_figures/mode_heatmap_clusters.png index a4e49c1d6..f910b9cbd 100644 Binary files a/tests/_ground_truth_figures/mode_heatmap_clusters.png and b/tests/_ground_truth_figures/mode_heatmap_clusters.png differ diff --git a/tests/_ground_truth_figures/mode_heatmap_cmap.png b/tests/_ground_truth_figures/mode_heatmap_cmap.png index cbe3931ad..50e0f7655 100644 Binary files a/tests/_ground_truth_figures/mode_heatmap_cmap.png and b/tests/_ground_truth_figures/mode_heatmap_cmap.png differ diff --git a/tests/_ground_truth_figures/mode_heatmap_format.png b/tests/_ground_truth_figures/mode_heatmap_format.png index f87504aaa..bde615a63 100644 Binary files a/tests/_ground_truth_figures/mode_heatmap_format.png and b/tests/_ground_truth_figures/mode_heatmap_format.png differ diff --git a/tests/_ground_truth_figures/mode_heatmap_lineages.png b/tests/_ground_truth_figures/mode_heatmap_lineages.png index 64d2e2bc9..2a9aa86bc 100644 Binary files a/tests/_ground_truth_figures/mode_heatmap_lineages.png and b/tests/_ground_truth_figures/mode_heatmap_lineages.png differ diff --git a/tests/_ground_truth_figures/mode_heatmap_title.png b/tests/_ground_truth_figures/mode_heatmap_title.png index b6ba542bf..de296e2d5 100644 Binary files a/tests/_ground_truth_figures/mode_heatmap_title.png and b/tests/_ground_truth_figures/mode_heatmap_title.png differ diff --git a/tests/_ground_truth_figures/mode_heatmap_xticks_rotation.png b/tests/_ground_truth_figures/mode_heatmap_xticks_rotation.png index f8aea0f82..42754a20d 100644 Binary files a/tests/_ground_truth_figures/mode_heatmap_xticks_rotation.png and b/tests/_ground_truth_figures/mode_heatmap_xticks_rotation.png differ diff --git a/tests/_ground_truth_figures/model_1_lineage.png b/tests/_ground_truth_figures/model_1_lineage.png index 94445bb33..17e26f8e3 100644 Binary files a/tests/_ground_truth_figures/model_1_lineage.png and b/tests/_ground_truth_figures/model_1_lineage.png differ diff --git a/tests/_ground_truth_figures/model_default.png b/tests/_ground_truth_figures/model_default.png index b9c3b5692..a8fcf0f18 100644 Binary files a/tests/_ground_truth_figures/model_default.png and b/tests/_ground_truth_figures/model_default.png differ diff --git a/tests/_ground_truth_figures/model_default_bwd.png b/tests/_ground_truth_figures/model_default_bwd.png index 0ba919678..b9c4b1c96 100644 Binary files a/tests/_ground_truth_figures/model_default_bwd.png and b/tests/_ground_truth_figures/model_default_bwd.png differ diff --git a/tests/_ground_truth_figures/model_no_legend.png b/tests/_ground_truth_figures/model_no_legend.png index b9c3b5692..a8fcf0f18 100644 Binary files a/tests/_ground_truth_figures/model_no_legend.png and b/tests/_ground_truth_figures/model_no_legend.png differ diff --git a/tests/_ground_truth_figures/model_no_lineage.png b/tests/_ground_truth_figures/model_no_lineage.png index be558463c..acbb4d5d6 100644 Binary files a/tests/_ground_truth_figures/model_no_lineage.png and b/tests/_ground_truth_figures/model_no_lineage.png differ diff --git a/tests/_ground_truth_figures/model_no_lineage_show_lin_probs.png b/tests/_ground_truth_figures/model_no_lineage_show_lin_probs.png index 94835a96c..f0452b546 100644 Binary files a/tests/_ground_truth_figures/model_no_lineage_show_lin_probs.png and b/tests/_ground_truth_figures/model_no_lineage_show_lin_probs.png differ diff --git a/tests/_ground_truth_figures/model_obs_data_key.png b/tests/_ground_truth_figures/model_obs_data_key.png index 92b37b0ef..a046b6f3f 100644 Binary files a/tests/_ground_truth_figures/model_obs_data_key.png and b/tests/_ground_truth_figures/model_obs_data_key.png differ diff --git a/tests/_ground_truth_figures/model_show_lin_prob_cells_ci.png b/tests/_ground_truth_figures/model_show_lin_prob_cells_ci.png index 4cafe2561..2070f5457 100644 Binary files a/tests/_ground_truth_figures/model_show_lin_prob_cells_ci.png and b/tests/_ground_truth_figures/model_show_lin_prob_cells_ci.png differ diff --git a/tests/_ground_truth_figures/model_show_lin_prob_cells_lineage_ci.png b/tests/_ground_truth_figures/model_show_lin_prob_cells_lineage_ci.png index 766036c5e..1b9713a5c 100644 Binary files a/tests/_ground_truth_figures/model_show_lin_prob_cells_lineage_ci.png and b/tests/_ground_truth_figures/model_show_lin_prob_cells_lineage_ci.png differ diff --git a/tests/_ground_truth_figures/msc_default.png b/tests/_ground_truth_figures/msc_default.png index d7a937689..59b9d8c80 100644 Binary files a/tests/_ground_truth_figures/msc_default.png and b/tests/_ground_truth_figures/msc_default.png differ diff --git a/tests/_ground_truth_figures/msc_labelrot.png b/tests/_ground_truth_figures/msc_labelrot.png index e621075fb..ee9563e00 100644 Binary files a/tests/_ground_truth_figures/msc_labelrot.png and b/tests/_ground_truth_figures/msc_labelrot.png differ diff --git a/tests/_ground_truth_figures/msc_legend_loc.png b/tests/_ground_truth_figures/msc_legend_loc.png index d0a1b06d3..497462d84 100644 Binary files a/tests/_ground_truth_figures/msc_legend_loc.png and b/tests/_ground_truth_figures/msc_legend_loc.png differ diff --git a/tests/_ground_truth_figures/msc_title.png b/tests/_ground_truth_figures/msc_title.png index 935c52fd8..7443f95e9 100644 Binary files a/tests/_ground_truth_figures/msc_title.png and b/tests/_ground_truth_figures/msc_title.png differ diff --git a/tests/_ground_truth_figures/msc_width.png b/tests/_ground_truth_figures/msc_width.png index 4edafe16a..46259f2f9 100644 Binary files a/tests/_ground_truth_figures/msc_width.png and b/tests/_ground_truth_figures/msc_width.png differ diff --git a/tests/_ground_truth_figures/paga.png b/tests/_ground_truth_figures/paga.png index d776a4164..4e49839d8 100644 Binary files a/tests/_ground_truth_figures/paga.png and b/tests/_ground_truth_figures/paga.png differ diff --git a/tests/_ground_truth_figures/paga_lineage_subset.png b/tests/_ground_truth_figures/paga_lineage_subset.png index add86f5e7..8cc6aca10 100644 Binary files a/tests/_ground_truth_figures/paga_lineage_subset.png and b/tests/_ground_truth_figures/paga_lineage_subset.png differ diff --git a/tests/_ground_truth_figures/paga_pie.png b/tests/_ground_truth_figures/paga_pie.png index 3f11f67bf..3ed2a3da2 100644 Binary files a/tests/_ground_truth_figures/paga_pie.png and b/tests/_ground_truth_figures/paga_pie.png differ diff --git a/tests/_ground_truth_figures/paga_pie_embedding.png b/tests/_ground_truth_figures/paga_pie_embedding.png index 1d9793f1a..a48b65f3b 100644 Binary files a/tests/_ground_truth_figures/paga_pie_embedding.png and b/tests/_ground_truth_figures/paga_pie_embedding.png differ diff --git a/tests/_ground_truth_figures/paga_pie_legend_position.png b/tests/_ground_truth_figures/paga_pie_legend_position.png index 61efb69ce..f765590f9 100644 Binary files a/tests/_ground_truth_figures/paga_pie_legend_position.png and b/tests/_ground_truth_figures/paga_pie_legend_position.png differ diff --git a/tests/_ground_truth_figures/paga_pie_legend_position_out.png b/tests/_ground_truth_figures/paga_pie_legend_position_out.png index 1cdaea9a1..3c9d6fe4a 100644 Binary files a/tests/_ground_truth_figures/paga_pie_legend_position_out.png and b/tests/_ground_truth_figures/paga_pie_legend_position_out.png differ diff --git a/tests/_ground_truth_figures/paga_pie_legend_simple.png b/tests/_ground_truth_figures/paga_pie_legend_simple.png index 15995f433..e1465e1cd 100644 Binary files a/tests/_ground_truth_figures/paga_pie_legend_simple.png and b/tests/_ground_truth_figures/paga_pie_legend_simple.png differ diff --git a/tests/_ground_truth_figures/paga_pie_no_legend.png b/tests/_ground_truth_figures/paga_pie_no_legend.png index 8c33af2c1..c69b71d1f 100644 Binary files a/tests/_ground_truth_figures/paga_pie_no_legend.png and b/tests/_ground_truth_figures/paga_pie_no_legend.png differ diff --git a/tests/_ground_truth_figures/paga_pie_only_clusters.png b/tests/_ground_truth_figures/paga_pie_only_clusters.png index 904a676ed..c69b71d1f 100644 Binary files a/tests/_ground_truth_figures/paga_pie_only_clusters.png and b/tests/_ground_truth_figures/paga_pie_only_clusters.png differ diff --git a/tests/_ground_truth_figures/paga_pie_only_fate_prob.png b/tests/_ground_truth_figures/paga_pie_only_fate_prob.png index 71eee1063..0401432c6 100644 Binary files a/tests/_ground_truth_figures/paga_pie_only_fate_prob.png and b/tests/_ground_truth_figures/paga_pie_only_fate_prob.png differ diff --git a/tests/_ground_truth_figures/paga_pie_title.png b/tests/_ground_truth_figures/paga_pie_title.png index bf5a27cfc..3fd4a946e 100644 Binary files a/tests/_ground_truth_figures/paga_pie_title.png and b/tests/_ground_truth_figures/paga_pie_title.png differ diff --git a/tests/_ground_truth_figures/pie.png b/tests/_ground_truth_figures/pie.png index d598854aa..af8d40326 100644 Binary files a/tests/_ground_truth_figures/pie.png and b/tests/_ground_truth_figures/pie.png differ diff --git a/tests/_ground_truth_figures/pie_autopct_none.png b/tests/_ground_truth_figures/pie_autopct_none.png index 341be25d4..108fc2b72 100644 Binary files a/tests/_ground_truth_figures/pie_autopct_none.png and b/tests/_ground_truth_figures/pie_autopct_none.png differ diff --git a/tests/_ground_truth_figures/pie_legend_kwargs.png b/tests/_ground_truth_figures/pie_legend_kwargs.png index 5f2338f3b..451dd0b76 100644 Binary files a/tests/_ground_truth_figures/pie_legend_kwargs.png and b/tests/_ground_truth_figures/pie_legend_kwargs.png differ diff --git a/tests/_ground_truth_figures/pie_legend_loc.png b/tests/_ground_truth_figures/pie_legend_loc.png index 0773b8940..6a53b4166 100644 Binary files a/tests/_ground_truth_figures/pie_legend_loc.png and b/tests/_ground_truth_figures/pie_legend_loc.png differ diff --git a/tests/_ground_truth_figures/pie_legend_loc_one.png b/tests/_ground_truth_figures/pie_legend_loc_one.png index c2bd138c8..c9eda8535 100644 Binary files a/tests/_ground_truth_figures/pie_legend_loc_one.png and b/tests/_ground_truth_figures/pie_legend_loc_one.png differ diff --git a/tests/_ground_truth_figures/pie_reduction.png b/tests/_ground_truth_figures/pie_reduction.png index 1fdf65b18..f79034771 100644 Binary files a/tests/_ground_truth_figures/pie_reduction.png and b/tests/_ground_truth_figures/pie_reduction.png differ diff --git a/tests/_ground_truth_figures/pie_t.png b/tests/_ground_truth_figures/pie_t.png index d598854aa..af8d40326 100644 Binary files a/tests/_ground_truth_figures/pie_t.png and b/tests/_ground_truth_figures/pie_t.png differ diff --git a/tests/_ground_truth_figures/pie_title.png b/tests/_ground_truth_figures/pie_title.png index 342658cbb..bd508c106 100644 Binary files a/tests/_ground_truth_figures/pie_title.png and b/tests/_ground_truth_figures/pie_title.png differ diff --git a/tests/_ground_truth_figures/plot_tsi.png b/tests/_ground_truth_figures/plot_tsi.png index 071a5d684..7acb831f7 100644 Binary files a/tests/_ground_truth_figures/plot_tsi.png and b/tests/_ground_truth_figures/plot_tsi.png differ diff --git a/tests/_ground_truth_figures/proj_default_ordering.png b/tests/_ground_truth_figures/proj_default_ordering.png index 9f108bdd9..039288e56 100644 Binary files a/tests/_ground_truth_figures/proj_default_ordering.png and b/tests/_ground_truth_figures/proj_default_ordering.png differ diff --git a/tests/_ground_truth_figures/proj_dont_normalize_by_mean.png b/tests/_ground_truth_figures/proj_dont_normalize_by_mean.png index 953c14b06..72c6db0f9 100644 Binary files a/tests/_ground_truth_figures/proj_dont_normalize_by_mean.png and b/tests/_ground_truth_figures/proj_dont_normalize_by_mean.png differ diff --git a/tests/_ground_truth_figures/proj_duplicate_keys.png b/tests/_ground_truth_figures/proj_duplicate_keys.png index 9f108bdd9..039288e56 100644 Binary files a/tests/_ground_truth_figures/proj_duplicate_keys.png and b/tests/_ground_truth_figures/proj_duplicate_keys.png differ diff --git a/tests/_ground_truth_figures/proj_extra_keys.png b/tests/_ground_truth_figures/proj_extra_keys.png index 14ac0903a..666ff98cf 100644 Binary files a/tests/_ground_truth_figures/proj_extra_keys.png and b/tests/_ground_truth_figures/proj_extra_keys.png differ diff --git a/tests/_ground_truth_figures/proj_hide_edges.png b/tests/_ground_truth_figures/proj_hide_edges.png index 4cc962db9..4501b485a 100644 Binary files a/tests/_ground_truth_figures/proj_hide_edges.png and b/tests/_ground_truth_figures/proj_hide_edges.png differ diff --git a/tests/_ground_truth_figures/proj_key_added.png b/tests/_ground_truth_figures/proj_key_added.png index 1578075b6..fa4e6e287 100644 Binary files a/tests/_ground_truth_figures/proj_key_added.png and b/tests/_ground_truth_figures/proj_key_added.png differ diff --git a/tests/_ground_truth_figures/proj_labeldistance.png b/tests/_ground_truth_figures/proj_labeldistance.png index 26af27b1a..a83b31d16 100644 Binary files a/tests/_ground_truth_figures/proj_labeldistance.png and b/tests/_ground_truth_figures/proj_labeldistance.png differ diff --git a/tests/_ground_truth_figures/proj_labelrot.png b/tests/_ground_truth_figures/proj_labelrot.png index 4343bb536..8a374d10e 100644 Binary files a/tests/_ground_truth_figures/proj_labelrot.png and b/tests/_ground_truth_figures/proj_labelrot.png differ diff --git a/tests/_ground_truth_figures/proj_legend_loc.png b/tests/_ground_truth_figures/proj_legend_loc.png new file mode 100644 index 000000000..e432706f0 Binary files /dev/null and b/tests/_ground_truth_figures/proj_legend_loc.png differ diff --git a/tests/_ground_truth_figures/proj_ncols.png b/tests/_ground_truth_figures/proj_ncols.png index 549d7ad01..f5137d521 100644 Binary files a/tests/_ground_truth_figures/proj_ncols.png and b/tests/_ground_truth_figures/proj_ncols.png differ diff --git a/tests/_ground_truth_figures/proj_no_cbar.png b/tests/_ground_truth_figures/proj_no_cbar.png index 469b06019..25b4c8c54 100644 Binary files a/tests/_ground_truth_figures/proj_no_cbar.png and b/tests/_ground_truth_figures/proj_no_cbar.png differ diff --git a/tests/_ground_truth_figures/proj_scvelo_kwargs.png b/tests/_ground_truth_figures/proj_scvelo_kwargs.png deleted file mode 100644 index fb42237c7..000000000 Binary files a/tests/_ground_truth_figures/proj_scvelo_kwargs.png and /dev/null differ diff --git a/tests/_ground_truth_figures/proj_text_kwargs.png b/tests/_ground_truth_figures/proj_text_kwargs.png index 9023d4744..58e31b350 100644 Binary files a/tests/_ground_truth_figures/proj_text_kwargs.png and b/tests/_ground_truth_figures/proj_text_kwargs.png differ diff --git a/tests/_ground_truth_figures/proj_use_raw.png b/tests/_ground_truth_figures/proj_use_raw.png index 1d227edcf..38424c901 100644 Binary files a/tests/_ground_truth_figures/proj_use_raw.png and b/tests/_ground_truth_figures/proj_use_raw.png differ diff --git a/tests/_ground_truth_figures/scvelo_connectivity_kernel_emb_stream.png b/tests/_ground_truth_figures/scvelo_connectivity_kernel_emb_stream.png index 214f2e73d..f574d44eb 100644 Binary files a/tests/_ground_truth_figures/scvelo_connectivity_kernel_emb_stream.png and b/tests/_ground_truth_figures/scvelo_connectivity_kernel_emb_stream.png differ diff --git a/tests/_ground_truth_figures/scvelo_final_states.png b/tests/_ground_truth_figures/scvelo_final_states.png deleted file mode 100644 index 5082460eb..000000000 Binary files a/tests/_ground_truth_figures/scvelo_final_states.png and /dev/null differ diff --git a/tests/_ground_truth_figures/scvelo_final_states_clusters.png b/tests/_ground_truth_figures/scvelo_final_states_clusters.png deleted file mode 100644 index 317ecf928..000000000 Binary files a/tests/_ground_truth_figures/scvelo_final_states_clusters.png and /dev/null differ diff --git a/tests/_ground_truth_figures/scvelo_gpcca_fate_probs_cont_not_same.png b/tests/_ground_truth_figures/scvelo_gpcca_fate_probs_cont_not_same.png deleted file mode 100644 index 17866be6b..000000000 Binary files a/tests/_ground_truth_figures/scvelo_gpcca_fate_probs_cont_not_same.png and /dev/null differ diff --git a/tests/_ground_truth_figures/scvelo_gpcca_fate_probs_cont_same_clusters.png b/tests/_ground_truth_figures/scvelo_gpcca_fate_probs_cont_same_clusters.png deleted file mode 100644 index 861fdb6b6..000000000 Binary files a/tests/_ground_truth_figures/scvelo_gpcca_fate_probs_cont_same_clusters.png and /dev/null differ diff --git a/tests/_ground_truth_figures/scvelo_gpcca_fate_probs_cont_same_no_clusters.png b/tests/_ground_truth_figures/scvelo_gpcca_fate_probs_cont_same_no_clusters.png deleted file mode 100644 index 861fdb6b6..000000000 Binary files a/tests/_ground_truth_figures/scvelo_gpcca_fate_probs_cont_same_no_clusters.png and /dev/null differ diff --git a/tests/_ground_truth_figures/scvelo_gpcca_final_states.png b/tests/_ground_truth_figures/scvelo_gpcca_final_states.png deleted file mode 100644 index 5b94dcd93..000000000 Binary files a/tests/_ground_truth_figures/scvelo_gpcca_final_states.png and /dev/null differ diff --git a/tests/_ground_truth_figures/scvelo_gpcca_final_states_cluster_key.png b/tests/_ground_truth_figures/scvelo_gpcca_final_states_cluster_key.png deleted file mode 100644 index c44d3fe08..000000000 Binary files a/tests/_ground_truth_figures/scvelo_gpcca_final_states_cluster_key.png and /dev/null differ diff --git a/tests/_ground_truth_figures/scvelo_gpcca_final_states_cmap.png b/tests/_ground_truth_figures/scvelo_gpcca_final_states_cmap.png deleted file mode 100644 index 9da1721af..000000000 Binary files a/tests/_ground_truth_figures/scvelo_gpcca_final_states_cmap.png and /dev/null differ diff --git a/tests/_ground_truth_figures/scvelo_gpcca_final_states_discrete.png b/tests/_ground_truth_figures/scvelo_gpcca_final_states_discrete.png deleted file mode 100644 index 5b94dcd93..000000000 Binary files a/tests/_ground_truth_figures/scvelo_gpcca_final_states_discrete.png and /dev/null differ diff --git a/tests/_ground_truth_figures/scvelo_gpcca_final_states_lineages.png b/tests/_ground_truth_figures/scvelo_gpcca_final_states_lineages.png deleted file mode 100644 index f977611e1..000000000 Binary files a/tests/_ground_truth_figures/scvelo_gpcca_final_states_lineages.png and /dev/null differ diff --git a/tests/_ground_truth_figures/scvelo_gpcca_final_states_no_same_plot.png b/tests/_ground_truth_figures/scvelo_gpcca_final_states_no_same_plot.png deleted file mode 100644 index 9da1721af..000000000 Binary files a/tests/_ground_truth_figures/scvelo_gpcca_final_states_no_same_plot.png and /dev/null differ diff --git a/tests/_ground_truth_figures/scvelo_gpcca_final_states_time.png b/tests/_ground_truth_figures/scvelo_gpcca_final_states_time.png deleted file mode 100644 index 5b94dcd93..000000000 Binary files a/tests/_ground_truth_figures/scvelo_gpcca_final_states_time.png and /dev/null differ diff --git a/tests/_ground_truth_figures/scvelo_gpcca_final_states_title.png b/tests/_ground_truth_figures/scvelo_gpcca_final_states_title.png deleted file mode 100644 index 223edbab6..000000000 Binary files a/tests/_ground_truth_figures/scvelo_gpcca_final_states_title.png and /dev/null differ diff --git a/tests/_ground_truth_figures/scvelo_gpcca_meta_states.png b/tests/_ground_truth_figures/scvelo_gpcca_meta_states.png deleted file mode 100644 index 2da215e5f..000000000 Binary files a/tests/_ground_truth_figures/scvelo_gpcca_meta_states.png and /dev/null differ diff --git a/tests/_ground_truth_figures/scvelo_gpcca_meta_states_cluster_key.png b/tests/_ground_truth_figures/scvelo_gpcca_meta_states_cluster_key.png deleted file mode 100644 index bb938d897..000000000 Binary files a/tests/_ground_truth_figures/scvelo_gpcca_meta_states_cluster_key.png and /dev/null differ diff --git a/tests/_ground_truth_figures/scvelo_gpcca_meta_states_cmap.png b/tests/_ground_truth_figures/scvelo_gpcca_meta_states_cmap.png deleted file mode 100644 index f2f3a915e..000000000 Binary files a/tests/_ground_truth_figures/scvelo_gpcca_meta_states_cmap.png and /dev/null differ diff --git a/tests/_ground_truth_figures/scvelo_gpcca_meta_states_discrete.png b/tests/_ground_truth_figures/scvelo_gpcca_meta_states_discrete.png deleted file mode 100644 index 2da215e5f..000000000 Binary files a/tests/_ground_truth_figures/scvelo_gpcca_meta_states_discrete.png and /dev/null differ diff --git a/tests/_ground_truth_figures/scvelo_gpcca_meta_states_lineages.png b/tests/_ground_truth_figures/scvelo_gpcca_meta_states_lineages.png deleted file mode 100644 index ec3c56f37..000000000 Binary files a/tests/_ground_truth_figures/scvelo_gpcca_meta_states_lineages.png and /dev/null differ diff --git a/tests/_ground_truth_figures/scvelo_gpcca_meta_states_no_same_plot.png b/tests/_ground_truth_figures/scvelo_gpcca_meta_states_no_same_plot.png deleted file mode 100644 index f2f3a915e..000000000 Binary files a/tests/_ground_truth_figures/scvelo_gpcca_meta_states_no_same_plot.png and /dev/null differ diff --git a/tests/_ground_truth_figures/scvelo_gpcca_meta_states_time.png b/tests/_ground_truth_figures/scvelo_gpcca_meta_states_time.png deleted file mode 100644 index 2da215e5f..000000000 Binary files a/tests/_ground_truth_figures/scvelo_gpcca_meta_states_time.png and /dev/null differ diff --git a/tests/_ground_truth_figures/scvelo_gpcca_meta_states_title.png b/tests/_ground_truth_figures/scvelo_gpcca_meta_states_title.png deleted file mode 100644 index 223edbab6..000000000 Binary files a/tests/_ground_truth_figures/scvelo_gpcca_meta_states_title.png and /dev/null differ diff --git a/tests/_ground_truth_figures/scvelo_lin_probs.png b/tests/_ground_truth_figures/scvelo_lin_probs.png deleted file mode 100644 index 0782be146..000000000 Binary files a/tests/_ground_truth_figures/scvelo_lin_probs.png and /dev/null differ diff --git a/tests/_ground_truth_figures/scvelo_lin_probs_clusters.png b/tests/_ground_truth_figures/scvelo_lin_probs_clusters.png deleted file mode 100644 index 0782be146..000000000 Binary files a/tests/_ground_truth_figures/scvelo_lin_probs_clusters.png and /dev/null differ diff --git a/tests/_ground_truth_figures/scvelo_lin_probs_cmap.png b/tests/_ground_truth_figures/scvelo_lin_probs_cmap.png deleted file mode 100644 index 0782be146..000000000 Binary files a/tests/_ground_truth_figures/scvelo_lin_probs_cmap.png and /dev/null differ diff --git a/tests/_ground_truth_figures/scvelo_lin_probs_lineages.png b/tests/_ground_truth_figures/scvelo_lin_probs_lineages.png deleted file mode 100644 index b5beb475c..000000000 Binary files a/tests/_ground_truth_figures/scvelo_lin_probs_lineages.png and /dev/null differ diff --git a/tests/_ground_truth_figures/scvelo_lin_probs_time.png b/tests/_ground_truth_figures/scvelo_lin_probs_time.png deleted file mode 100644 index ff5ba8785..000000000 Binary files a/tests/_ground_truth_figures/scvelo_lin_probs_time.png and /dev/null differ diff --git a/tests/_ground_truth_figures/scvelo_pseudotime_kernel_hard_threshold_emb_stream.png b/tests/_ground_truth_figures/scvelo_pseudotime_kernel_hard_threshold_emb_stream.png index 214f2e73d..539b580bc 100644 Binary files a/tests/_ground_truth_figures/scvelo_pseudotime_kernel_hard_threshold_emb_stream.png and b/tests/_ground_truth_figures/scvelo_pseudotime_kernel_hard_threshold_emb_stream.png differ diff --git a/tests/_ground_truth_figures/scvelo_pseudotime_kernel_soft_threshold_emb_stream.png b/tests/_ground_truth_figures/scvelo_pseudotime_kernel_soft_threshold_emb_stream.png index 214f2e73d..539b580bc 100644 Binary files a/tests/_ground_truth_figures/scvelo_pseudotime_kernel_soft_threshold_emb_stream.png and b/tests/_ground_truth_figures/scvelo_pseudotime_kernel_soft_threshold_emb_stream.png differ diff --git a/tests/_ground_truth_figures/scvelo_transition_matrix_projection.png b/tests/_ground_truth_figures/scvelo_transition_matrix_projection.png index 9e59ff2f6..b5a44a851 100644 Binary files a/tests/_ground_truth_figures/scvelo_transition_matrix_projection.png and b/tests/_ground_truth_figures/scvelo_transition_matrix_projection.png differ diff --git a/tests/_ground_truth_figures/scvelo_velocity_kernel_emb_stream.png b/tests/_ground_truth_figures/scvelo_velocity_kernel_emb_stream.png index 214f2e73d..539b580bc 100644 Binary files a/tests/_ground_truth_figures/scvelo_velocity_kernel_emb_stream.png and b/tests/_ground_truth_figures/scvelo_velocity_kernel_emb_stream.png differ diff --git a/tests/_ground_truth_figures/transpose.png b/tests/_ground_truth_figures/transpose.png index f402d69bc..714b7fecb 100644 Binary files a/tests/_ground_truth_figures/transpose.png and b/tests/_ground_truth_figures/transpose.png differ diff --git a/tests/_ground_truth_figures/transpose_all_models_for_1_gene_failed.png b/tests/_ground_truth_figures/transpose_all_models_for_1_gene_failed.png index 0b622954c..a78aba084 100644 Binary files a/tests/_ground_truth_figures/transpose_all_models_for_1_gene_failed.png and b/tests/_ground_truth_figures/transpose_all_models_for_1_gene_failed.png differ diff --git a/tests/_ground_truth_figures/transpose_all_models_for_1_lineage_failed.png b/tests/_ground_truth_figures/transpose_all_models_for_1_lineage_failed.png index 7c513190e..e6c367733 100644 Binary files a/tests/_ground_truth_figures/transpose_all_models_for_1_lineage_failed.png and b/tests/_ground_truth_figures/transpose_all_models_for_1_lineage_failed.png differ diff --git a/tests/_ground_truth_figures/transpose_all_models_for_1_lineage_failed_same_plot.png b/tests/_ground_truth_figures/transpose_all_models_for_1_lineage_failed_same_plot.png index 4d83215a8..7df2ec4a0 100644 Binary files a/tests/_ground_truth_figures/transpose_all_models_for_1_lineage_failed_same_plot.png and b/tests/_ground_truth_figures/transpose_all_models_for_1_lineage_failed_same_plot.png differ diff --git a/tests/_ground_truth_figures/transpose_failed_only_off_diagonal.png b/tests/_ground_truth_figures/transpose_failed_only_off_diagonal.png index b94540cb9..35c1c81fc 100644 Binary files a/tests/_ground_truth_figures/transpose_failed_only_off_diagonal.png and b/tests/_ground_truth_figures/transpose_failed_only_off_diagonal.png differ diff --git a/tests/_ground_truth_figures/transpose_same_plot.png b/tests/_ground_truth_figures/transpose_same_plot.png index 01fb55e06..1d9f49f16 100644 Binary files a/tests/_ground_truth_figures/transpose_same_plot.png and b/tests/_ground_truth_figures/transpose_same_plot.png differ diff --git a/tests/_ground_truth_figures/trends.png b/tests/_ground_truth_figures/trends.png index d22febf20..bcc2ffeaa 100644 Binary files a/tests/_ground_truth_figures/trends.png and b/tests/_ground_truth_figures/trends.png differ diff --git a/tests/_ground_truth_figures/trends_bwd.png b/tests/_ground_truth_figures/trends_bwd.png index 49e5c33b8..ea647c253 100644 Binary files a/tests/_ground_truth_figures/trends_bwd.png and b/tests/_ground_truth_figures/trends_bwd.png differ diff --git a/tests/_ground_truth_figures/trends_cell_alpha.png b/tests/_ground_truth_figures/trends_cell_alpha.png index bbd1a364a..565ab7d8a 100644 Binary files a/tests/_ground_truth_figures/trends_cell_alpha.png and b/tests/_ground_truth_figures/trends_cell_alpha.png differ diff --git a/tests/_ground_truth_figures/trends_conf_int.png b/tests/_ground_truth_figures/trends_conf_int.png index 19ba5ea8e..a42a0c3b9 100644 Binary files a/tests/_ground_truth_figures/trends_conf_int.png and b/tests/_ground_truth_figures/trends_conf_int.png differ diff --git a/tests/_ground_truth_figures/trends_fate_prob_cmap.png b/tests/_ground_truth_figures/trends_fate_prob_cmap.png index 60dbdb1dd..157c72909 100644 Binary files a/tests/_ground_truth_figures/trends_fate_prob_cmap.png and b/tests/_ground_truth_figures/trends_fate_prob_cmap.png differ diff --git a/tests/_ground_truth_figures/trends_gene_as_title.png b/tests/_ground_truth_figures/trends_gene_as_title.png index 2738175ff..cac208223 100644 Binary files a/tests/_ground_truth_figures/trends_gene_as_title.png and b/tests/_ground_truth_figures/trends_gene_as_title.png differ diff --git a/tests/_ground_truth_figures/trends_gene_legend_out.png b/tests/_ground_truth_figures/trends_gene_legend_out.png index 0993fc657..e3703a849 100644 Binary files a/tests/_ground_truth_figures/trends_gene_legend_out.png and b/tests/_ground_truth_figures/trends_gene_legend_out.png differ diff --git a/tests/_ground_truth_figures/trends_gene_no_legend.png b/tests/_ground_truth_figures/trends_gene_no_legend.png index c0b570297..2dc52b164 100644 Binary files a/tests/_ground_truth_figures/trends_gene_no_legend.png and b/tests/_ground_truth_figures/trends_gene_no_legend.png differ diff --git a/tests/_ground_truth_figures/trends_gene_symbols.png b/tests/_ground_truth_figures/trends_gene_symbols.png index 5a8d529e1..9743ce520 100644 Binary files a/tests/_ground_truth_figures/trends_gene_symbols.png and b/tests/_ground_truth_figures/trends_gene_symbols.png differ diff --git a/tests/_ground_truth_figures/trends_hide_cells.png b/tests/_ground_truth_figures/trends_hide_cells.png index f2613a2f8..f99b92f7c 100644 Binary files a/tests/_ground_truth_figures/trends_hide_cells.png and b/tests/_ground_truth_figures/trends_hide_cells.png differ diff --git a/tests/_ground_truth_figures/trends_lineage_alpha.png b/tests/_ground_truth_figures/trends_lineage_alpha.png index 1a793999f..07e81097c 100644 Binary files a/tests/_ground_truth_figures/trends_lineage_alpha.png and b/tests/_ground_truth_figures/trends_lineage_alpha.png differ diff --git a/tests/_ground_truth_figures/trends_lineage_cell_color.png b/tests/_ground_truth_figures/trends_lineage_cell_color.png index cda2c8f7e..3ed433024 100644 Binary files a/tests/_ground_truth_figures/trends_lineage_cell_color.png and b/tests/_ground_truth_figures/trends_lineage_cell_color.png differ diff --git a/tests/_ground_truth_figures/trends_lineage_cell_color_clusters.png b/tests/_ground_truth_figures/trends_lineage_cell_color_clusters.png index 2f07111bc..731712e91 100644 Binary files a/tests/_ground_truth_figures/trends_lineage_cell_color_clusters.png and b/tests/_ground_truth_figures/trends_lineage_cell_color_clusters.png differ diff --git a/tests/_ground_truth_figures/trends_lineage_cell_color_clusters_obs_legend_loc.png b/tests/_ground_truth_figures/trends_lineage_cell_color_clusters_obs_legend_loc.png index 27fa7aed5..e4a158e79 100644 Binary files a/tests/_ground_truth_figures/trends_lineage_cell_color_clusters_obs_legend_loc.png and b/tests/_ground_truth_figures/trends_lineage_cell_color_clusters_obs_legend_loc.png differ diff --git a/tests/_ground_truth_figures/trends_lineage_cell_color_gene.png b/tests/_ground_truth_figures/trends_lineage_cell_color_gene.png index f41f21519..689434a1c 100644 Binary files a/tests/_ground_truth_figures/trends_lineage_cell_color_gene.png and b/tests/_ground_truth_figures/trends_lineage_cell_color_gene.png differ diff --git a/tests/_ground_truth_figures/trends_lineage_cmap.png b/tests/_ground_truth_figures/trends_lineage_cmap.png index fe24d9c71..5e2b23733 100644 Binary files a/tests/_ground_truth_figures/trends_lineage_cmap.png and b/tests/_ground_truth_figures/trends_lineage_cmap.png differ diff --git a/tests/_ground_truth_figures/trends_lw.png b/tests/_ground_truth_figures/trends_lw.png index c797eda16..315ead66e 100644 Binary files a/tests/_ground_truth_figures/trends_lw.png and b/tests/_ground_truth_figures/trends_lw.png differ diff --git a/tests/_ground_truth_figures/trends_margins.png b/tests/_ground_truth_figures/trends_margins.png index 15805dbab..0370b2022 100644 Binary files a/tests/_ground_truth_figures/trends_margins.png and b/tests/_ground_truth_figures/trends_margins.png differ diff --git a/tests/_ground_truth_figures/trends_no_cbar.png b/tests/_ground_truth_figures/trends_no_cbar.png index 914377d56..3b339cd5e 100644 Binary files a/tests/_ground_truth_figures/trends_no_cbar.png and b/tests/_ground_truth_figures/trends_no_cbar.png differ diff --git a/tests/_ground_truth_figures/trends_perc.png b/tests/_ground_truth_figures/trends_perc.png index c0b570297..2dc52b164 100644 Binary files a/tests/_ground_truth_figures/trends_perc.png and b/tests/_ground_truth_figures/trends_perc.png differ diff --git a/tests/_ground_truth_figures/trends_perc_per_lineage.png b/tests/_ground_truth_figures/trends_perc_per_lineage.png index b9c814b88..cf6e0983c 100644 Binary files a/tests/_ground_truth_figures/trends_perc_per_lineage.png and b/tests/_ground_truth_figures/trends_perc_per_lineage.png differ diff --git a/tests/_ground_truth_figures/trends_raw.png b/tests/_ground_truth_figures/trends_raw.png index cee447b2f..ffb3b4b6f 100644 Binary files a/tests/_ground_truth_figures/trends_raw.png and b/tests/_ground_truth_figures/trends_raw.png differ diff --git a/tests/_ground_truth_figures/trends_same_plot.png b/tests/_ground_truth_figures/trends_same_plot.png index e28b2fa0d..5744b7030 100644 Binary files a/tests/_ground_truth_figures/trends_same_plot.png and b/tests/_ground_truth_figures/trends_same_plot.png differ diff --git a/tests/_ground_truth_figures/trends_sharex.png b/tests/_ground_truth_figures/trends_sharex.png index c0b570297..2dc52b164 100644 Binary files a/tests/_ground_truth_figures/trends_sharex.png and b/tests/_ground_truth_figures/trends_sharex.png differ diff --git a/tests/_ground_truth_figures/trends_sharey.png b/tests/_ground_truth_figures/trends_sharey.png index d22febf20..bcc2ffeaa 100644 Binary files a/tests/_ground_truth_figures/trends_sharey.png and b/tests/_ground_truth_figures/trends_sharey.png differ diff --git a/tests/_ground_truth_figures/trends_show_lineage_ci.png b/tests/_ground_truth_figures/trends_show_lineage_ci.png index 986b9f128..f56181a4c 100644 Binary files a/tests/_ground_truth_figures/trends_show_lineage_ci.png and b/tests/_ground_truth_figures/trends_show_lineage_ci.png differ diff --git a/tests/_ground_truth_figures/trends_show_lineage_diff_plot.png b/tests/_ground_truth_figures/trends_show_lineage_diff_plot.png index 45399591e..39305f59a 100644 Binary files a/tests/_ground_truth_figures/trends_show_lineage_diff_plot.png and b/tests/_ground_truth_figures/trends_show_lineage_diff_plot.png differ diff --git a/tests/_ground_truth_figures/trends_show_lineage_ignores_no_transpose.png b/tests/_ground_truth_figures/trends_show_lineage_ignores_no_transpose.png index 255f39e20..ff974a50e 100644 Binary files a/tests/_ground_truth_figures/trends_show_lineage_ignores_no_transpose.png and b/tests/_ground_truth_figures/trends_show_lineage_ignores_no_transpose.png differ diff --git a/tests/_ground_truth_figures/trends_show_lineage_same_plot.png b/tests/_ground_truth_figures/trends_show_lineage_same_plot.png index fcaeb6bd2..94b3e30c4 100644 Binary files a/tests/_ground_truth_figures/trends_show_lineage_same_plot.png and b/tests/_ground_truth_figures/trends_show_lineage_same_plot.png differ diff --git a/tests/_ground_truth_figures/trends_size.png b/tests/_ground_truth_figures/trends_size.png index 369158dfe..94c23e2ca 100644 Binary files a/tests/_ground_truth_figures/trends_size.png and b/tests/_ground_truth_figures/trends_size.png differ diff --git a/tests/_ground_truth_figures/trends_suptitle.png b/tests/_ground_truth_figures/trends_suptitle.png index 97caad028..e6ffe2af3 100644 Binary files a/tests/_ground_truth_figures/trends_suptitle.png and b/tests/_ground_truth_figures/trends_suptitle.png differ diff --git a/tests/_ground_truth_figures/trends_time_key.png b/tests/_ground_truth_figures/trends_time_key.png index 355849276..a9a30a162 100644 Binary files a/tests/_ground_truth_figures/trends_time_key.png and b/tests/_ground_truth_figures/trends_time_key.png differ diff --git a/tests/_ground_truth_figures/trends_time_key_del_latent_time.png b/tests/_ground_truth_figures/trends_time_key_del_latent_time.png index 355849276..a9a30a162 100644 Binary files a/tests/_ground_truth_figures/trends_time_key_del_latent_time.png and b/tests/_ground_truth_figures/trends_time_key_del_latent_time.png differ diff --git a/tests/_ground_truth_figures/trends_time_range.png b/tests/_ground_truth_figures/trends_time_range.png index d82a7bff6..13246e1b3 100644 Binary files a/tests/_ground_truth_figures/trends_time_range.png and b/tests/_ground_truth_figures/trends_time_range.png differ diff --git a/tests/_ground_truth_figures/violin.png b/tests/_ground_truth_figures/violin.png index 1b60f8cb6..6c6e95e3e 100644 Binary files a/tests/_ground_truth_figures/violin.png and b/tests/_ground_truth_figures/violin.png differ diff --git a/tests/_ground_truth_figures/violin_cluster_subset.png b/tests/_ground_truth_figures/violin_cluster_subset.png index baeb6e69a..5ae2e0675 100644 Binary files a/tests/_ground_truth_figures/violin_cluster_subset.png and b/tests/_ground_truth_figures/violin_cluster_subset.png differ diff --git a/tests/_ground_truth_figures/violin_lineage_subset.png b/tests/_ground_truth_figures/violin_lineage_subset.png index 03d420969..db6bccbca 100644 Binary files a/tests/_ground_truth_figures/violin_lineage_subset.png and b/tests/_ground_truth_figures/violin_lineage_subset.png differ diff --git a/tests/_ground_truth_figures/violin_no_cluster_key.png b/tests/_ground_truth_figures/violin_no_cluster_key.png index 390691c2a..1a08604e4 100644 Binary files a/tests/_ground_truth_figures/violin_no_cluster_key.png and b/tests/_ground_truth_figures/violin_no_cluster_key.png differ diff --git a/tests/conftest.py b/tests/conftest.py index eeeb16d1f..b2c91bcdc 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -22,8 +22,19 @@ def pytest_sessionstart(session: pytest.Session) -> None: matplotlib.use("Agg") matplotlib.rcParams["figure.max_open_warning"] = 0 + matplotlib.rcParams["savefig.transparent"] = True np.random.seed(42) # noqa: NPY002 + _figdir = pathlib.Path(__file__).parent / "figures" + cr.settings.figdir = _figdir + sc.settings.figdir = _figdir + try: + import scvelo as scv + + scv.settings.figdir = str(_figdir) + except ImportError: + pass + # https://github.com/theislab/cellrank/issues/683 warnings.simplefilter("ignore", NumbaPerformanceWarning) diff --git a/tests/test_gpcca.py b/tests/test_gpcca.py index 5a78cc994..b13bea163 100644 --- a/tests/test_gpcca.py +++ b/tests/test_gpcca.py @@ -1,5 +1,6 @@ import copy import enum +import logging import os from collections.abc import Sequence from typing import Optional @@ -1156,7 +1157,19 @@ def test_compute_schur_verbosity(self, adata_large: AnnData, verbose: bool | Non vk = VelocityKernel(adata_large).compute_transition_matrix(softmax_scale=4.0) g = cr.estimators.GPCCA(vk) - g.compute_schur(n_components=10, method="krylov", verbose=verbose) + # Flush any stdout captured so far (e.g. CellRank INFO logs from + # compute_transition_matrix, which go to stdout via RichHandler). + capsys.readouterr() + + # Silence CellRank's own log output so we only capture SLEPc's + # iteration details, which verbose=False should suppress. + cr_logger = logging.getLogger("cellrank") + prev_level = cr_logger.level + cr_logger.setLevel(logging.WARNING) + try: + g.compute_schur(n_components=10, method="krylov", verbose=verbose) + finally: + cr_logger.setLevel(prev_level) out, _ = capsys.readouterr() assert not len(out) diff --git a/tests/test_kernels.py b/tests/test_kernels.py index 411520ca5..8aa4b581e 100644 --- a/tests/test_kernels.py +++ b/tests/test_kernels.py @@ -379,8 +379,6 @@ class TestKernel: ) @pytest.mark.parametrize("key_added", [None, "foo"]) def test_kernel_reads_correct_connectivities(self, adata: AnnData, key_added: str | None, clazz: type): - if clazz is VelocityKernel and key_added == "foo": - pytest.skip("`get_moments` in scVelo doesn't support specifying key") del adata.uns["neighbors"] del adata.obsp["connectivities"] del adata.obsp["distances"] @@ -1053,12 +1051,12 @@ def test_layer(self, adata: AnnData, layer: str): @pytest.mark.parametrize("agg", list(CytoTRACEAggregation)) def test_aggregation(self, adata: AnnData, agg: CytoTRACEAggregation): - _ = CytoTRACEKernel(adata).compute_cytotrace(aggregation=agg) + _ = CytoTRACEKernel(adata).compute_cytotrace(aggregation=agg, layer="Ms") assert adata.uns[Key.cytotrace("params")]["aggregation"] == agg @pytest.mark.parametrize("use_raw", [False, True]) def test_raw(self, adata: AnnData, use_raw: bool): - _ = CytoTRACEKernel(adata).compute_cytotrace(use_raw=use_raw) + _ = CytoTRACEKernel(adata).compute_cytotrace(use_raw=use_raw, layer="Ms") assert adata.uns[Key.cytotrace("params")]["use_raw"] == use_raw @pytest.mark.parametrize("copy", [False, True]) @@ -1096,7 +1094,7 @@ def test_writes_params(self, adata: AnnData): def test_raw_less_genes(self, adata: AnnData): adata.raw = adata.raw.to_adata()[:, :20] - _ = CytoTRACEKernel(adata).compute_cytotrace(use_raw=True, n_genes=31) + _ = CytoTRACEKernel(adata).compute_cytotrace(use_raw=True, n_genes=31, layer="Ms") assert adata.uns[Key.cytotrace("params")] == { "layer": "Ms", "aggregation": "mean", @@ -1110,9 +1108,9 @@ def test_n_top_genes(self, adata: AnnData, use_raw: bool, n_genes: int): n_genes = min(adata.raw.n_vars if use_raw else adata.n_vars, n_genes) if n_genes <= 0: with pytest.raises(ValueError, match=r"Expected .* genes to be positive"): - _ = CytoTRACEKernel(adata).compute_cytotrace(use_raw=use_raw, n_genes=n_genes) + _ = CytoTRACEKernel(adata).compute_cytotrace(use_raw=use_raw, n_genes=n_genes, layer="Ms") else: - _ = CytoTRACEKernel(adata).compute_cytotrace(use_raw=use_raw, n_genes=n_genes) + _ = CytoTRACEKernel(adata).compute_cytotrace(use_raw=use_raw, n_genes=n_genes, layer="Ms") assert adata.var[Key.cytotrace("correlates")].sum() == n_genes assert adata.uns[Key.cytotrace("params")]["n_genes"] == n_genes @@ -1528,7 +1526,7 @@ def test_from_adata(self, adata: AnnData, clazz: type[Kernel]): k1 = clazz(adata, **kwargs) if isinstance(k1, CytoTRACEKernel): - k1 = k1.compute_cytotrace() + k1 = k1.compute_cytotrace(layer="Ms") k1 = k1.compute_transition_matrix() k1.write_to_adata(key=key) diff --git a/tests/test_plotting.py b/tests/test_plotting.py index b54bbab17..c46b90435 100644 --- a/tests/test_plotting.py +++ b/tests/test_plotting.py @@ -9,7 +9,6 @@ import pandas as pd import pytest import scipy.sparse as sp -import scvelo as scv from anndata import AnnData from matplotlib.testing import setup from matplotlib.testing.compare import compare_images @@ -61,11 +60,6 @@ "Cdh9", ] -# TODO(michalk8): move to sessionstart -cr.settings.figdir = FIGS -scv.settings.figdir = str(FIGS) -scv.set_figure_params(transparent=True) - def compare( *, @@ -78,11 +72,9 @@ def _compare_images(expected_path: str | pathlib.Path, actual_path: str | pathli res = compare_images(expected_path, actual_path, tol=tol) assert res is None, res - # TODO: refactor (we can remove the prefix from scvelo def _prepare_fname(func: Callable) -> tuple[str, str]: fpath = f"{func.__name__.replace('test_', '')}" - # scvelo saves figures as pdf - return fpath, str(fpath[7:] + ".png" if fpath.startswith("scvelo_") else fpath) + return fpath, fpath def _assert_equal(fpath: str) -> None: if not fpath.endswith(".png"): @@ -2084,31 +2076,31 @@ def test_mc_spectrum_evals_complex(self, mc: CFLARE, fpath: str): mc.plot_spectrum(2, real_only=False, dpi=DPI, save=fpath) @compare(kind="cflare") - def test_scvelo_final_states(self, mc: CFLARE, fpath: str): + def test_final_states(self, mc: CFLARE, fpath: str): mc.plot_macrostates(which="terminal", dpi=DPI, save=fpath) @compare(kind="cflare") - def test_scvelo_final_states_clusters(self, mc: CFLARE, fpath: str): + def test_final_states_clusters(self, mc: CFLARE, fpath: str): mc.plot_macrostates(which="terminal", color="clusters", dpi=DPI, save=fpath) @compare(kind="cflare") - def test_scvelo_lin_probs(self, mc: CFLARE, fpath: str): + def test_lin_probs(self, mc: CFLARE, fpath: str): mc.plot_fate_probabilities(dpi=DPI, save=fpath) @compare(kind="cflare") - def test_scvelo_lin_probs_clusters(self, mc: CFLARE, fpath: str): + def test_lin_probs_clusters(self, mc: CFLARE, fpath: str): mc.plot_fate_probabilities(color="clusters", dpi=DPI, save=fpath) @compare(kind="cflare") - def test_scvelo_lin_probs_cmap(self, mc: CFLARE, fpath: str): + def test_lin_probs_cmap(self, mc: CFLARE, fpath: str): mc.plot_fate_probabilities(cmap=cm.inferno, dpi=DPI, save=fpath) @compare(kind="cflare") - def test_scvelo_lin_probs_lineages(self, mc: CFLARE, fpath: str): + def test_lin_probs_lineages(self, mc: CFLARE, fpath: str): mc.plot_fate_probabilities(states=["0"], dpi=DPI, save=fpath) @compare(kind="cflare") - def test_scvelo_lin_probs_time(self, mc: CFLARE, fpath: str): + def test_lin_probs_time(self, mc: CFLARE, fpath: str): mc.plot_fate_probabilities(mode="time", time_key="latent_time", dpi=DPI, save=fpath) @@ -2186,79 +2178,79 @@ def test_gpcca_coarse_T_no_order(self, mc: GPCCA, fpath: str): mc.plot_coarse_T(order=None, dpi=DPI, save=fpath) @compare(kind="gpcca") - def test_scvelo_gpcca_meta_states(self, mc: GPCCA, fpath: str): + def test_gpcca_meta_states(self, mc: GPCCA, fpath: str): mc.plot_macrostates(which="all", dpi=DPI, save=fpath) @compare(kind="gpcca") - def test_scvelo_gpcca_meta_states_lineages(self, mc: GPCCA, fpath: str): + def test_gpcca_meta_states_lineages(self, mc: GPCCA, fpath: str): mc.plot_macrostates(which="all", states=["0"], dpi=DPI, save=fpath) @compare(kind="gpcca") - def test_scvelo_gpcca_meta_states_discrete(self, mc: GPCCA, fpath: str): + def test_gpcca_meta_states_discrete(self, mc: GPCCA, fpath: str): mc.plot_macrostates(which="all", discrete=True, dpi=DPI, save=fpath) @compare(kind="gpcca") - def test_scvelo_gpcca_meta_states_cluster_key(self, mc: GPCCA, fpath: str): + def test_gpcca_meta_states_cluster_key(self, mc: GPCCA, fpath: str): mc.plot_macrostates(which="all", color="clusters", dpi=DPI, save=fpath) @compare(kind="gpcca") - def test_scvelo_gpcca_meta_states_no_same_plot(self, mc: GPCCA, fpath: str): + def test_gpcca_meta_states_no_same_plot(self, mc: GPCCA, fpath: str): mc.plot_macrostates(which="all", same_plot=False, dpi=DPI, save=fpath) @compare(kind="gpcca") - def test_scvelo_gpcca_meta_states_cmap(self, mc: GPCCA, fpath: str): + def test_gpcca_meta_states_cmap(self, mc: GPCCA, fpath: str): mc.plot_macrostates(which="all", cmap=cm.inferno, same_plot=False, dpi=DPI, save=fpath) @compare(kind="gpcca") - def test_scvelo_gpcca_meta_states_title(self, mc: GPCCA, fpath: str): + def test_gpcca_meta_states_title(self, mc: GPCCA, fpath: str): mc.plot_macrostates(which="all", title="foobar", dpi=DPI, save=fpath) @compare(kind="gpcca") - def test_scvelo_gpcca_meta_states_time(self, mc: GPCCA, fpath: str): + def test_gpcca_meta_states_time(self, mc: GPCCA, fpath: str): mc.plot_macrostates(which="all", mode="time", dpi=DPI, save=fpath) @compare(kind="gpcca") - def test_scvelo_gpcca_final_states(self, mc: GPCCA, fpath: str): + def test_gpcca_final_states(self, mc: GPCCA, fpath: str): mc.plot_macrostates(which="terminal", dpi=DPI, save=fpath) @compare(kind="gpcca") - def test_scvelo_gpcca_final_states_lineages(self, mc: GPCCA, fpath: str): + def test_gpcca_final_states_lineages(self, mc: GPCCA, fpath: str): mc.plot_macrostates(which="terminal", states=["0"], dpi=DPI, save=fpath) @compare(kind="gpcca") - def test_scvelo_gpcca_final_states_discrete(self, mc: GPCCA, fpath: str): + def test_gpcca_final_states_discrete(self, mc: GPCCA, fpath: str): mc.plot_macrostates(which="terminal", discrete=True, dpi=DPI, save=fpath) @compare(kind="gpcca") - def test_scvelo_gpcca_final_states_cluster_key(self, mc: GPCCA, fpath: str): + def test_gpcca_final_states_cluster_key(self, mc: GPCCA, fpath: str): mc.plot_macrostates(which="terminal", color="clusters", dpi=DPI, save=fpath) @compare(kind="gpcca") - def test_scvelo_gpcca_final_states_no_same_plot(self, mc: GPCCA, fpath: str): + def test_gpcca_final_states_no_same_plot(self, mc: GPCCA, fpath: str): mc.plot_macrostates(which="terminal", same_plot=False, dpi=DPI, save=fpath) @compare(kind="gpcca") - def test_scvelo_gpcca_final_states_cmap(self, mc: GPCCA, fpath: str): + def test_gpcca_final_states_cmap(self, mc: GPCCA, fpath: str): mc.plot_macrostates(which="terminal", cmap=cm.inferno, same_plot=False, dpi=DPI, save=fpath) @compare(kind="gpcca") - def test_scvelo_gpcca_final_states_title(self, mc: GPCCA, fpath: str): + def test_gpcca_final_states_title(self, mc: GPCCA, fpath: str): mc.plot_macrostates(which="terminal", title="foobar", dpi=DPI, save=fpath) @compare(kind="gpcca") - def test_scvelo_gpcca_final_states_time(self, mc: GPCCA, fpath: str): + def test_gpcca_final_states_time(self, mc: GPCCA, fpath: str): mc.plot_macrostates(which="terminal", mode="time", dpi=DPI, save=fpath) @compare(kind="gpcca") - def test_scvelo_gpcca_fate_probs_cont_same_no_clusters(self, mc: GPCCA, fpath: str): + def test_gpcca_fate_probs_cont_same_no_clusters(self, mc: GPCCA, fpath: str): mc.plot_fate_probabilities(same_plot=True, dpi=DPI, save=fpath) @compare(kind="gpcca") - def test_scvelo_gpcca_fate_probs_cont_same_clusters(self, mc: GPCCA, fpath: str): + def test_gpcca_fate_probs_cont_same_clusters(self, mc: GPCCA, fpath: str): mc.plot_fate_probabilities(color="clusters", same_plot=True, dpi=DPI, save=fpath) @compare(kind="gpcca") - def test_scvelo_gpcca_fate_probs_cont_not_same(self, mc: GPCCA, fpath: str): + def test_gpcca_fate_probs_cont_not_same(self, mc: GPCCA, fpath: str): mc.plot_fate_probabilities(color="clusters", same_plot=False, dpi=DPI, save=fpath) @compare(kind="gpcca") @@ -2269,7 +2261,7 @@ def test_scvelo_transition_matrix_projection(self, mc: GPCCA, fpath: str): arrow_length=6, arrow_size=6, dpi=DPI, - save=fpath, + save=fpath.removeprefix("scvelo_") + ".png", ) @compare(kind="gpcca") @@ -2735,7 +2727,7 @@ def test_proj_extra_keys(self, adata: AnnData, fpath: str): assert f"{apk}_entropy" in adata.obs @compare() - def test_proj_scvelo_kwargs(self, adata: AnnData, fpath: str): + def test_proj_legend_loc(self, adata: AnnData, fpath: str): cr.pl.circular_projection(adata, keys="clusters", legend_loc="upper right", dpi=DPI, save=fpath) @compare() @@ -3348,22 +3340,22 @@ class TestProjectionEmbedding: def test_scvelo_connectivity_kernel_emb_stream(self, adata: AnnData, fpath: str): ck = ConnectivityKernel(adata) ck.compute_transition_matrix() - ck.plot_projection(dpi=DPI, save=fpath) + ck.plot_projection(dpi=DPI, save=fpath.removeprefix("scvelo_") + ".png") @compare() def test_scvelo_pseudotime_kernel_hard_threshold_emb_stream(self, adata: AnnData, fpath: str): ptk = PseudotimeKernel(adata, time_key="dpt_pseudotime") ptk.compute_transition_matrix(threshold_scheme="hard", frac_to_keep=0.3) - ptk.plot_projection(dpi=DPI, save=fpath) + ptk.plot_projection(dpi=DPI, save=fpath.removeprefix("scvelo_") + ".png") @compare() def test_scvelo_pseudotime_kernel_soft_threshold_emb_stream(self, adata: AnnData, fpath: str): ptk = PseudotimeKernel(adata, time_key="dpt_pseudotime") ptk.compute_transition_matrix(threshold_scheme="soft", frac_to_keep=0.3) - ptk.plot_projection(dpi=DPI, save=fpath) + ptk.plot_projection(dpi=DPI, save=fpath.removeprefix("scvelo_") + ".png") @compare() def test_scvelo_velocity_kernel_emb_stream(self, adata: AnnData, fpath: str): vk = VelocityKernel(adata) vk.compute_transition_matrix() - vk.plot_projection(dpi=DPI, save=fpath) + vk.plot_projection(dpi=DPI, save=fpath.removeprefix("scvelo_") + ".png")