# Licensed under a 3-clause BSD style license - see LICENSE.rst
"""
Astronomical and physics constants for Astropy v4.0.
See :mod:`astropy.constants` for a complete listing of constants defined
in Astropy.
"""
import warnings

from astropy.utils import find_current_module

from . import codata2018, iau2015
from . import utils as _utils

codata = codata2018
iaudata = iau2015

_utils._set_c(codata, iaudata, find_current_module())

# Overwrite the following for consistency.
# https://github.com/astropy/astropy/issues/8920
with warnings.catch_warnings():
    warnings.filterwarnings('ignore', 'Constant .*already has a definition')

    # Solar mass (derived from mass parameter and gravitational constant)
    M_sun = iau2015.IAU2015(
        'M_sun', "Solar mass", iau2015.GM_sun.value / codata2018.G.value,
        'kg', ((codata2018.G.uncertainty / codata2018.G.value) *
               (iau2015.GM_sun.value / codata2018.G.value)),
        f"IAU 2015 Resolution B 3 + {codata2018.G.reference}", system='si')

    # Jupiter mass (derived from mass parameter and gravitational constant)
    M_jup = iau2015.IAU2015(
        'M_jup', "Jupiter mass", iau2015.GM_jup.value / codata2018.G.value,
        'kg', ((codata2018.G.uncertainty / codata2018.G.value) *
               (iau2015.GM_jup.value / codata2018.G.value)),
        f"IAU 2015 Resolution B 3 + {codata2018.G.reference}", system='si')

    # Earth mass (derived from mass parameter and gravitational constant)
    M_earth = iau2015.IAU2015(
        'M_earth', "Earth mass",
        iau2015.GM_earth.value / codata2018.G.value,
        'kg', ((codata2018.G.uncertainty / codata2018.G.value) *
               (iau2015.GM_earth.value / codata2018.G.value)),
        f"IAU 2015 Resolution B 3 + {codata2018.G.reference}", system='si')

# Clean up namespace
del warnings
del find_current_module
del _utils
