"""Mapping errors."""
from typing import Any, Set
[docs]class MappingError(ValueError):
"""Something failed to map."""
def __init__(self, msg: str) -> None:
super().__init__(
msg + "\n\nFor help, please refer to the "
"https://rics.readthedocs.io/en/stable/documentation/mapping-primer.html page."
)
[docs]class ScoringDisabledError(MappingError):
"""Indicates that the scoring logic has been disabled. Raised by :func:`.score_functions.disabled`."""
def __init__(self, value: Any, candidates: Any, context: Any) -> None:
super().__init__(
"Scoring disabled; the Mapper is working in override-only mode. Please add an override "
f"for {value=} in {context=} in order to map it to an appropriate candidate."
)
self.value = value
self.candidates = candidates
self.context = context
[docs]class AmbiguousScoreError(MappingError):
"""Indicates that the scoring logic has produces ambiguous scores."""
def __init__(self, kind: str, key: Any, match0: Any, match1: Any, cardinality: str, scores: str) -> None:
hint = f"\n{scores}\nInspect the matrix above for details. You may wish to use a different scoring method."
super().__init__(
f"Ambiguous mapping of {kind}={key!r}; matches ({match0}) and ({match1}) "
f"are in conflict since {cardinality=}.{hint}"
)
[docs]class UserMappingError(MappingError):
"""A user-defined mapping function did something forbidden."""
def __init__(self, msg: str, value: Any, candidates: Set[Any]) -> None:
super().__init__(msg)
self.value = value
self.candidates = candidates
[docs]class CardinalityError(MappingError):
"""Base class for cardinality issues."""
[docs]class MappingWarning(UserWarning):
"""Something failed to map."""
[docs]class UserMappingWarning(MappingWarning):
"""A user-defined mapping function did something strange."""
[docs]class BadFilterError(MappingError):
"""Invalid filter."""