Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 10 additions & 3 deletions src/napari_spatialdata/_widgets.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,14 +18,21 @@
from napari.viewer import Viewer
from qtpy import QtCore, QtWidgets
from qtpy.QtCore import Qt, Signal
from scanpy.plotting._utils import _set_colors_for_categorical_obs
from sklearn.preprocessing import MinMaxScaler
from spatialdata._types import ArrayLike
from superqt import QRangeSlider
from vispy import scene
from vispy.color.colormap import Colormap, MatplotlibColormap
from vispy.scene.widgets import ColorBarWidget

# See https://github.com/scverse/squidpy/issues/1061 for more details.
# Scanpy 0.11.x-0.12.x renamed set_default_colors_for_categorical_obs to _set_default_colors_for_categorical_obs
# and then changed it back. Try underscore version first, fall back to non-underscore.
try:
from scanpy.plotting._utils import _set_colors_for_categorical_obs as set_colors_for_categorical_obs
except ImportError:
from scanpy.plotting._utils import set_colors_for_categorical_obs

from napari_spatialdata._model import DataModel
from napari_spatialdata.utils._utils import _min_max_norm, get_napari_version

Expand Down Expand Up @@ -213,7 +220,7 @@ def _(self, vec: pd.Series, **kwargs: Any) -> dict[str, Any]:
if self._attr != "columns_df":
if vec_color_name not in self.model.adata.uns:
colorer = AnnData(shape=(len(vec), 0), obs=pd.DataFrame(index=vec.index, data={"vec": vec}))
_set_colors_for_categorical_obs(colorer, "vec", palette="tab20")
set_colors_for_categorical_obs(colorer, "vec", palette="tab20")
colors = colorer.uns["vec_colors"]
color_dict = dict(zip(vec.cat.categories, colors, strict=False))
color_dict.update({np.nan: "#808080ff"})
Expand All @@ -224,7 +231,7 @@ def _(self, vec: pd.Series, **kwargs: Any) -> dict[str, Any]:
df = layer.metadata["_columns_df"]
if vec_color_name not in df.columns:
colorer = AnnData(shape=(len(vec), 0), obs=pd.DataFrame(index=vec.index, data={"vec": vec}))
_set_colors_for_categorical_obs(colorer, "vec", palette="tab20")
set_colors_for_categorical_obs(colorer, "vec", palette="tab20")
colors = colorer.uns["vec_colors"]
color_dict = dict(zip(vec.cat.categories, colors, strict=False))
color_dict.update({np.nan: "#808080ff"})
Expand Down
9 changes: 9 additions & 0 deletions tests/conftest.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,15 @@
from __future__ import annotations

# MUST set environment variables BEFORE any Qt/napari/vispy imports
# to enable headless mode in CI environments (Ubuntu/Linux without display)
import os
import sys

# Only use offscreen on Linux - macOS doesn't support the offscreen Qt platform plugin
if sys.platform == "linux":
os.environ.setdefault("QT_QPA_PLATFORM", "offscreen")

os.environ.setdefault("NAPARI_HEADLESS", "1")
import random
import string
from abc import ABC, ABCMeta
Expand Down
Loading