# Path: src/astrodynamics/utils/helper.py
# def read_only_property(name, docstring=None):
#     """Return property for accessing attribute with name `name`
# 
#     Parameters:
#         name: Attribute name
#         docstring: Optional docstring for getter.
# 
#     Example:
#         .. code-block:: python
# 
#             class Circle:
#                 def __init__(self, radius):
#                     self._radius = radius
# 
#                 radius = read_only_property('_radius')
#     """
#     def fget(self):
#         return getattr(self, name)
# 
#     fget.__doc__ = docstring
#     return property(fget)


import numpy as np
from astropy.units import Quantity, Unit
from astropy.utils import lazyproperty
from represent import ReprHelperMixin
from ..utils import read_only_property
        inst._value = value
        inst._unit_string = unit
        inst._uncertainty = uncertainty
        inst._reference = reference

        return inst

    def _repr_helper_(self, r):
        r.keyword_from_attr('name')
        r.keyword_from_attr('value')
        r.keyword_with_value('unit', str(self.unit))
        r.keyword_from_attr('uncertainty')
        r.keyword_from_attr('reference')

    def __quantity_subclass__(self, unit):
        return super(Constant, self).__quantity_subclass__(unit)[0], False

    def copy(self):
        """
        Return a copy of this `Constant` instance.  Since they are by
        definition immutable, this merely returns another reference to
        ``self``.
        """
        return self

    __copy__ = copy

    def __deepcopy__(self, memo):
        return self.copy()


# Path: src/astrodynamics/utils/helper.py
# def read_only_property(name, docstring=None):
#     """Return property for accessing attribute with name `name`
# 
#     Parameters:
#         name: Attribute name
#         docstring: Optional docstring for getter.
# 
#     Example:
#         .. code-block:: python
# 
#             class Circle:
#                 def __init__(self, radius):
#                     self._radius = radius
# 
#                 radius = read_only_property('_radius')
#     """
#     def fget(self):
#         return getattr(self, name)
# 
#     fget.__doc__ = docstring
#     return property(fget)


# Path: src/astrodynamics/constants/constant.py
import numpy as np
from astropy.units import Quantity, Unit
from astropy.utils import lazyproperty
from represent import ReprHelperMixin
from ..utils import read_only_property

        inst._value = value
        inst._unit_string = unit
        inst._uncertainty = uncertainty
        inst._reference = reference

        return inst

    def _repr_helper_(self, r):
        r.keyword_from_attr('name')
        r.keyword_from_attr('value')
        r.keyword_with_value('unit', str(self.unit))
        r.keyword_from_attr('uncertainty')
        r.keyword_from_attr('reference')

    def __quantity_subclass__(self, unit):
        return super(Constant, self).__quantity_subclass__(unit)[0], False

    def copy(self):
        """
        Return a copy of this `Constant` instance.  Since they are by
        definition immutable, this merely returns another reference to
        ``self``.
        """
        return self

    __copy__ = copy

    def __deepcopy__(self, memo):
        return self.copy()


    name = read_only_property('_name', 'The full name of the constant.')