feat(itl-473): split spikeinterface into orcapod-extension-spikeinterface#220
Conversation
…ension, not extensions
…n() (ITL-473) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…ter_extension (ITL-473) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…L-473) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…se check (ITL-473)
Codecov Report❌ Patch coverage is
📢 Thoughts on this report? Let us know! |
There was a problem hiding this comment.
Pull request overview
This PR decouples SpikeInterface support from core orcapod by removing SI-specific wiring/dependencies and introducing a small, normalized extension registration surface (OrcapodExtension + register_extension) so SI support can live in a separate package.
Changes:
- Added
orcapod.extensionswithOrcapodExtension(runtime-checkable protocol) andregister_extension(); re-exported viaorcapod.__init__. - Removed SpikeInterface integration from core (
v0.1.jsonoptional entries,extension_typesre-export block, SI module + tests) and removed SI deps/extras + regenerateduv.lock. - Added design/plan documentation describing the split into
orcapod-extension-spikeinterface.
Reviewed changes
Copilot reviewed 16 out of 17 changed files in this pull request and generated 2 comments.
Show a summary per file
| File | Description |
|---|---|
src/orcapod/extensions.py |
New normalized extension registration API. |
src/orcapod/__init__.py |
Re-exports OrcapodExtension and register_extension on the public API. |
src/orcapod/extension_types/__init__.py |
Removes conditional SpikeInterface re-export block. |
src/orcapod/contexts/data/v0.1.json |
Removes SpikeInterface _optional logical type + handler registrations from the default context spec. |
src/orcapod/extension_types/spikeinterface_types.py |
Deleted (SpikeInterface implementation removed from core). |
tests/test_extensions.py |
New tests covering register_extension() behavior. |
tests/test_utils/test_object_spec.py |
Removes tests tied to SI auto-registration in the default context. |
tests/test_extension_types/test_spikeinterface_types.py |
Deleted (SI tests moved out of core). |
pyproject.toml |
Removes spikeinterface extra and drops it from all + dev dependency group. |
.github/workflows/_license-check.yml |
Removes --ignore-packages quantities from license check. |
uv.lock |
Lockfile regenerated to remove SI and its transitive deps. |
superpowers/specs/2026-07-09-itl-473-orcapod-extension-spikeinterface-split-design.md |
New design spec documenting the split and extension API. |
superpowers/specs/2026-07-01-spikeinterface-baserecording-design.md |
Deleted (moved to the new extension package per design). |
superpowers/specs/2026-07-02-si-sorting-logical-type-design.md |
Deleted (moved to the new extension package per design). |
superpowers/specs/2026-07-02-spikeinterface-motion-design.md |
Deleted (moved to the new extension package per design). |
superpowers/specs/2026-07-03-sorting-analyzer-logical-type-design.md |
Deleted (moved to the new extension package per design). |
superpowers/plans/2026-07-09-itl-473-orcapod-extension-spikeinterface.md |
New implementation plan document for the split. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| from orcapod.contexts import get_default_context | ||
|
|
||
| if context is None: | ||
| context = get_default_context() | ||
| extension.register(context) |
| "_class": "orcapod.extension_types.numpy_type.LogicalNumpyArray", | ||
| "_config": {} | ||
| }, | ||
| { | ||
| "_class": "orcapod.extension_types.spikeinterface_types.LogicalSIRecording", | ||
| "_config": {}, | ||
| "_optional": true | ||
| }, | ||
| { | ||
| "_class": "orcapod.extension_types.spikeinterface_types.LogicalSISorting", | ||
| "_config": {}, | ||
| "_optional": true | ||
| }, | ||
| { | ||
| "_class": "orcapod.extension_types.spikeinterface_types.LogicalSIMotion", | ||
| "_config": {}, | ||
| "_optional": true | ||
| }, | ||
| { | ||
| "_class": "orcapod.extension_types.spikeinterface_types.LogicalSISortingAnalyzer", | ||
| "_config": {}, | ||
| "_optional": true | ||
| }, | ||
| { | ||
| "_class": "orcapod.extension_types.pandas_type.LogicalPandasDataFrame", |
…tension, update v0.1 changelog (ITL-473)
Review response — Copilot commentsBoth comments addressed in commit Comment 1:
|
Summary
OrcapodExtensionprotocol andop.register_extension()for normalized extension registration (ITL-473)spikeinterface_types.py,v0.1.jsonentries,extension_types/__init__.pyre-export, optional deps, and license check exclusionuv.lockwithout spikeinterface transitive depsnauticalab/orcapod-extension-spikeinterfacepackageTest plan
uv run pytest -m "not postgres")import orcapod as op; op.register_extensionis accessiblefrom orcapod.contexts import get_default_context; get_default_context()works (no SI import errors)--ignore-packages quantitiesCloses ITL-473