From 360cc6f065a4a3ff3515ce3d243b3139f9ed767a Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 24 Mar 2026 17:40:55 +0000 Subject: [PATCH 1/3] Initial plan From 04f54eeb46c203086d770ef5580fa7fabb88be8c Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 24 Mar 2026 17:46:37 +0000 Subject: [PATCH 2/3] Add py.typed marker, __all__ exports, and improve module organization - Add PEP 561 py.typed marker for downstream type checking - Add __all__ to all modules (node, traversal, discrete, discrete_iterator) - Add __all__ to all utility modules (array_backend, quaternion_math, quaternion_utils) - Expose public utilities via spinstep/utils/__init__.py with re-exports - Improve type hint: batch_quaternion_angle xp parameter now uses ModuleType - Update MANIFEST.in to include py.typed in sdist - Enhanced utils/__init__.py docstring with sub-package overview Co-authored-by: VoxleOne <119956342+VoxleOne@users.noreply.github.com> Agent-Logs-Url: https://github.com/VoxleOne/SpinStep/sessions/7a270a04-9727-4a04-b894-590cff277144 --- MANIFEST.in | 1 + spinstep/discrete.py | 2 ++ spinstep/discrete_iterator.py | 2 ++ spinstep/node.py | 2 ++ spinstep/py.typed | 0 spinstep/traversal.py | 2 ++ spinstep/utils/__init__.py | 38 +++++++++++++++++++++++++++++- spinstep/utils/array_backend.py | 2 ++ spinstep/utils/quaternion_math.py | 5 +++- spinstep/utils/quaternion_utils.py | 12 ++++++++++ 10 files changed, 64 insertions(+), 2 deletions(-) create mode 100644 spinstep/py.typed diff --git a/MANIFEST.in b/MANIFEST.in index 2971d2a..1c827de 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -1,6 +1,7 @@ include README.md include LICENSE include CHANGELOG.md +include spinstep/py.typed recursive-exclude benchmark * recursive-exclude demos * recursive-exclude examples * diff --git a/spinstep/discrete.py b/spinstep/discrete.py index 48ab185..f84b07b 100644 --- a/spinstep/discrete.py +++ b/spinstep/discrete.py @@ -6,6 +6,8 @@ from __future__ import annotations +__all__ = ["DiscreteOrientationSet"] + from typing import Any import numpy as np diff --git a/spinstep/discrete_iterator.py b/spinstep/discrete_iterator.py index 0bc7075..5632a37 100644 --- a/spinstep/discrete_iterator.py +++ b/spinstep/discrete_iterator.py @@ -6,6 +6,8 @@ from __future__ import annotations +__all__ = ["DiscreteQuaternionIterator"] + from typing import Iterator, List, Set, Tuple import numpy as np diff --git a/spinstep/node.py b/spinstep/node.py index e4cbd6d..a98846d 100644 --- a/spinstep/node.py +++ b/spinstep/node.py @@ -6,6 +6,8 @@ from __future__ import annotations +__all__ = ["Node"] + from typing import List, Optional, Sequence import numpy as np diff --git a/spinstep/py.typed b/spinstep/py.typed new file mode 100644 index 0000000..e69de29 diff --git a/spinstep/traversal.py b/spinstep/traversal.py index bde9cf4..5a61851 100644 --- a/spinstep/traversal.py +++ b/spinstep/traversal.py @@ -6,6 +6,8 @@ from __future__ import annotations +__all__ = ["QuaternionDepthIterator"] + from typing import Iterator, List, Optional, Tuple import numpy as np diff --git a/spinstep/utils/__init__.py b/spinstep/utils/__init__.py index 4d602f2..7408523 100644 --- a/spinstep/utils/__init__.py +++ b/spinstep/utils/__init__.py @@ -2,4 +2,40 @@ # Author: Eraldo B. Marques — Created: 2025-05-14 # See LICENSE.txt for full terms. This header must be retained in redistributions. -"""Internal utilities for quaternion math and array backend selection.""" +"""Internal utilities for quaternion math and array backend selection. + +This sub-package provides: + +- :func:`~.array_backend.get_array_module` — NumPy / CuPy backend selection. +- :func:`~.quaternion_math.batch_quaternion_angle` — batch angular distances. +- Quaternion helpers in :mod:`~.quaternion_utils` (conversion, distance, + multiplication, etc.). +""" + +__all__ = [ + "get_array_module", + "batch_quaternion_angle", + "quaternion_from_euler", + "quaternion_distance", + "rotate_quaternion", + "is_within_angle_threshold", + "quaternion_conjugate", + "quaternion_multiply", + "rotation_matrix_to_quaternion", + "get_relative_spin", + "get_unique_relative_spins", +] + +from .array_backend import get_array_module +from .quaternion_math import batch_quaternion_angle +from .quaternion_utils import ( + get_relative_spin, + get_unique_relative_spins, + is_within_angle_threshold, + quaternion_conjugate, + quaternion_distance, + quaternion_from_euler, + quaternion_multiply, + rotate_quaternion, + rotation_matrix_to_quaternion, +) diff --git a/spinstep/utils/array_backend.py b/spinstep/utils/array_backend.py index cda0a84..cddace0 100644 --- a/spinstep/utils/array_backend.py +++ b/spinstep/utils/array_backend.py @@ -6,6 +6,8 @@ from __future__ import annotations +__all__ = ["get_array_module"] + from types import ModuleType diff --git a/spinstep/utils/quaternion_math.py b/spinstep/utils/quaternion_math.py index b4c0e81..fbba4bf 100644 --- a/spinstep/utils/quaternion_math.py +++ b/spinstep/utils/quaternion_math.py @@ -6,10 +6,13 @@ from __future__ import annotations +from types import ModuleType from typing import Any +__all__ = ["batch_quaternion_angle"] -def batch_quaternion_angle(qs1: Any, qs2: Any, xp: Any) -> Any: + +def batch_quaternion_angle(qs1: Any, qs2: Any, xp: ModuleType) -> Any: """Compute pairwise angular distances between two sets of quaternions. Parameters diff --git a/spinstep/utils/quaternion_utils.py b/spinstep/utils/quaternion_utils.py index 81a0c92..1d711c9 100644 --- a/spinstep/utils/quaternion_utils.py +++ b/spinstep/utils/quaternion_utils.py @@ -6,6 +6,18 @@ from __future__ import annotations +__all__ = [ + "quaternion_from_euler", + "quaternion_distance", + "rotate_quaternion", + "is_within_angle_threshold", + "quaternion_conjugate", + "quaternion_multiply", + "rotation_matrix_to_quaternion", + "get_relative_spin", + "get_unique_relative_spins", +] + from typing import List, Sequence import numpy as np From 5a00bfb9ccd63bdc4e4ce2daa382a25925e51399 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 24 Mar 2026 17:48:17 +0000 Subject: [PATCH 3/3] Update utils docstring to reflect public API status Co-authored-by: VoxleOne <119956342+VoxleOne@users.noreply.github.com> Agent-Logs-Url: https://github.com/VoxleOne/SpinStep/sessions/7a270a04-9727-4a04-b894-590cff277144 --- spinstep/utils/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spinstep/utils/__init__.py b/spinstep/utils/__init__.py index 7408523..2f41c50 100644 --- a/spinstep/utils/__init__.py +++ b/spinstep/utils/__init__.py @@ -2,7 +2,7 @@ # Author: Eraldo B. Marques — Created: 2025-05-14 # See LICENSE.txt for full terms. This header must be retained in redistributions. -"""Internal utilities for quaternion math and array backend selection. +"""Utilities for quaternion math and array backend selection. This sub-package provides: