Skip to content

feat: align scverse backend adapters - #628

Draft
Intron7 wants to merge 13 commits into
mainfrom
add-squidpy-backend
Draft

feat: align scverse backend adapters#628
Intron7 wants to merge 13 commits into
mainfrom
add-squidpy-backend

Conversation

@Intron7

@Intron7 Intron7 commented Apr 7, 2026

Copy link
Copy Markdown
Member

Summary

  • Registers the canonical rapids-singlecell entry point for both scanpy.backends and squidpy.backends.
  • Supports the shared selectors cuda, rapids, and rapids_singlecell.
  • Exposes RSC's Scanpy-compatible preprocessing, tools, and get.aggregate implementations.
  • Exposes the Squidpy GPU implementations for spatial_autocorr, co_occurrence, ligrec, and calculate_niche.
  • Adapts Squidpy's calculate_niche(data=..., inplace=...) API to RSC's GPU adata/copy convention, and rejects unsupported semantics explicitly.
  • Keeps the user-facing docs and conformance/smoke tests aligned with Scanpy #4108 and Squidpy #1151.

Validation

  • All pre-commit hooks passed.
  • ruff check --preview and ruff format --check passed for the adapters and backend tests.
  • Verified the Squidpy adapter has the exact host routing signature and maps inplace=False to copy=True.

Comment on lines +1 to +30
"""Squidpy backend adapter for rapids_singlecell.

The dispatch decorator introspects the real RSC function signatures
(lazily imported on first access), so no need to duplicate them here.
"""

from __future__ import annotations

import importlib


class RscSquidpyBackend:
"""Backend adapter exposing rapids_singlecell GPU implementations to squidpy."""

name = "rapids_singlecell"
aliases = ["rapids-singlecell", "rsc", "cuda", "gpu"]

# squidpy function name -> module that implements it
_functions = {
"spatial_autocorr": "rapids_singlecell.squidpy_gpu",
"co_occurrence": "rapids_singlecell.squidpy_gpu",
"ligrec": "rapids_singlecell.squidpy_gpu",
}

def __getattr__(self, name: str):
if name in self._functions:
func = getattr(importlib.import_module(self._functions[name]), name)
setattr(self, name, func) # cache on instance
return func
raise AttributeError(f"{type(self).__name__!r} has no attribute {name!r}")

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

why the separate class? couldn't it just be a module that lazy re-exports the relevant functions?

@Intron7 Intron7 changed the title add squidpy backend feat: align scverse backend adapters Jul 31, 2026
@codecov-commenter

Copy link
Copy Markdown

⚠️ JUnit XML file not found

The CLI was unable to find any JUnit XML files to upload.
For more help, visit our troubleshooting guide.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants