"""Exceptions for the Music DNA Builder.

All exceptions raised during Music DNA construction inherit from
:class:`~music_dna.exceptions.MusicDNAError`.
"""

from __future__ import annotations

from core.exceptions import AIMusiMuseError


class MusicDNAError(AIMusiMuseError):
    """Base exception for all Music DNA Builder errors."""


class MissingFeatureError(MusicDNAError):
    """Raised when a required feature is missing from the input."""


class UnknownFeatureError(MusicDNAError):
    """Raised when a feature identifier is not in the FeatureRegistry."""


class DuplicateFeatureError(MusicDNAError):
    """Raised when the same feature identifier appears twice in the input."""


class InvalidValueError(MusicDNAError):
    """Raised when a feature value is None or has an invalid type."""


class NormalizationError(MusicDNAError):
    """Raised when an unsupported normalization strategy is encountered."""
