Source code for pycsamt.airborne.navigation

# Author: LKouadio <etanoyau@gmail.com>
# License: LGPL-3.0

"""Navigation and attitude containers for airborne EM surveys."""

from __future__ import annotations

from dataclasses import dataclass, field
from typing import Any

import numpy as np

from ..core.base import CoreObject
from ..metadata import BBox
from .validation import normalize_numeric_vector, normalize_object_vector

__all__ = ["NavigationTrack"]


def _normalize_sample_ids(values: Any) -> tuple[str, ...]:
    if values is None:
        raise ValueError("sample_ids must be provided")
    out = tuple(str(value).strip() for value in values)
    if not out:
        raise ValueError("sample_ids must be non-empty")
    if any(not value for value in out):
        raise ValueError("sample_ids must not contain empty identifiers")
    if len(out) != len(set(out)):
        raise ValueError("sample_ids must be unique")
    return out