Skip to content
Open
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
6 changes: 6 additions & 0 deletions movement/__init__.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
from importlib.metadata import PackageNotFoundError, version

from movement.io.load import load_dataset, load_multiview_dataset
Copy link

Copilot AI Mar 3, 2026

Choose a reason for hiding this comment

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

Re-exporting from movement.io.load means importing movement does not trigger movement.io.__init__ (which imports load_poses/load_bboxes to populate _LOADER_REGISTRY). As a result, movement.load_dataset(...) will raise ValueError("Unsupported source software") because the registry is empty. Re-export from movement.io instead, or ensure loader modules are imported (e.g., lazy-import load_poses/load_bboxes inside load_dataset when the registry is empty).

Suggested change
from movement.io.load import load_dataset, load_multiview_dataset
from movement.io import load_dataset, load_multiview_dataset

Copilot uses AI. Check for mistakes.
from movement.utils.logging import logger

try:
Expand All @@ -15,3 +16,8 @@

# Configure logging to stderr and a file
logger.configure()

__all__ = [
"load_dataset",
"load_multiview_dataset",
]
33 changes: 33 additions & 0 deletions tests/test_unit/test_top_level_imports.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
"""Tests for top-level imports from the movement package."""


def test_load_dataset_importable_from_top_level():
"""Test that load_dataset can be imported from movement directly."""
from movement import load_dataset

assert callable(load_dataset)


def test_load_multiview_dataset_importable_from_top_level():
"""Test that load_multiview_dataset can be imported from movement."""
from movement import load_multiview_dataset

assert callable(load_multiview_dataset)


def test_top_level_load_dataset_is_same_as_io():
"""Top-level load_dataset is the same object as movement.io.load's."""
from movement import load_dataset
from movement.io.load import load_dataset as io_load_dataset

assert load_dataset is io_load_dataset
Comment on lines +4 to +23
Copy link

Copilot AI Mar 3, 2026

Choose a reason for hiding this comment

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

These tests only check importability/object identity, but they don’t verify that the new public API actually works when used as intended (import movement as mvt; mvt.load_dataset(...)) without separately importing movement.io to register loaders. Add a test that calls the top-level function (e.g., by patching movement.io.load._LOADER_REGISTRY and asserting delegation) so this regression is caught.

Copilot uses AI. Check for mistakes.


def test_top_level_load_multiview_dataset_is_same_as_io():
"""Top-level load_multiview_dataset is the same as movement.io.load's."""
from movement import load_multiview_dataset
from movement.io.load import (
load_multiview_dataset as io_load_multiview_dataset,
)

assert load_multiview_dataset is io_load_multiview_dataset
Loading