Source code for astropy.coordinates.errors
# Licensed under a 3-clause BSD style license - see LICENSE.rst
"""This module defines custom errors and exceptions used in astropy.coordinates."""
from __future__ import annotations
__all__ = [
"ConvertError",
"NonRotationTransformationError",
"NonRotationTransformationWarning",
"UnknownSiteException",
]
from typing import TYPE_CHECKING
from astropy.utils.exceptions import AstropyUserWarning
if TYPE_CHECKING:
from astropy.coordinates import BaseCoordinateFrame
# TODO: consider if this should be used to `units`?
class UnitsError(ValueError):
"""
Raised if units are missing or invalid.
"""
[docs]
class ConvertError(Exception):
"""
Raised if a coordinate system cannot be converted to another.
"""
[docs]
class NonRotationTransformationError(ValueError):
"""
Raised for transformations that are not simple rotations. Such
transformations can change the angular separation between coordinates
depending on its direction.
"""
def __init__(
self, frame_to: BaseCoordinateFrame, frame_from: BaseCoordinateFrame
) -> None:
self.frame_to = frame_to
self.frame_from = frame_from
def __str__(self) -> str:
return (
"refusing to transform other coordinates from "
f"{self.frame_from.replicate_without_data()} to "
f"{self.frame_to.replicate_without_data()} because angular separation "
"can depend on the direction of the transformation"
)
[docs]
class UnknownSiteException(KeyError):
def __init__(self, site, attribute, close_names=None):
self.site = site
self.attribute = attribute
self.close_names = close_names
def __str__(self) -> str:
msg = (
f"Site {self.site!r} not in database. Use {self.attribute} to see "
f"available sites. If {self.site!r} exists in the online astropy-data "
"repository, use the 'refresh_cache=True' option to download the latest "
"version."
)
if self.close_names:
msg += f" Did you mean one of: {', '.join(map(repr, self.close_names))}?"
return msg
[docs]
class NonRotationTransformationWarning(AstropyUserWarning):
"""
Emitted for transformations that are not simple rotations. Such
transformations can change the angular separation between coordinates
depending on its direction.
"""
def __init__(
self, frame_to: BaseCoordinateFrame, frame_from: BaseCoordinateFrame
) -> None:
self.frame_to = frame_to
self.frame_from = frame_from
def __str__(self) -> str:
return (
"transforming other coordinates from "
f"{self.frame_from.replicate_without_data()} to "
f"{self.frame_to.replicate_without_data()}. Angular separation can depend "
"on the direction of the transformation."
)