# sites/ai_mouse/ai_mouse/_utils.py
"""Shared utility functions used by both _generator.py and _trainer.py."""
from __future__ import annotations

import numpy as np


def resample_arc(xy: np.ndarray, n_points: int) -> np.ndarray:
    """Resample a 2-D polyline to exactly n_points via arc-length interpolation.

    Args:
        xy: (M, 2) array of (x, y) coordinates.
        n_points: desired number of output points.

    Returns:
        (n_points, 2) array uniformly spaced along cumulative arc length.
    """
    arc = np.concatenate(
        [[0], np.cumsum(np.linalg.norm(np.diff(xy, axis=0), axis=1))]
    )
    s_new = np.linspace(0, arc[-1], n_points)
    return np.stack(
        [np.interp(s_new, arc, xy[:, 0]), np.interp(s_new, arc, xy[:, 1])],
        axis=1,
    )
