Source code for sunpy.sun.constants

"""
This module provides fundamental solar physical constants.
"""
import io

from astropy.table import Table
from astropy.time import Time

from sunpy.sun import _constants as _con

__all__ = [
    'get', 'find', 'print_all', 'spectral_classification', 'au', 'mass', 'equatorial_radius',
    'volume', 'surface_area', 'average_density', 'equatorial_surface_gravity',
    'effective_temperature', 'luminosity', 'mass_conversion_rate', 'escape_velocity', 'sfu',
    'average_angular_size', 'sidereal_rotation_rate', 'first_carrington_rotation',
    'mean_synodic_period'
]

constants = _con.physical_constants


[docs] def get(key): """ Retrieve a constant by key. This is just a short cut into a dictionary. Parameters ---------- key : `str` Key in dictionary in ``constants``. Returns ------- constant : `~astropy.constants.Constant` See Also -------- `~sunpy.sun.constants` : Contains the description of ``constants``, which, as a dictionary literal object, does not itself possess a docstring. Examples -------- >>> from sunpy.sun import constants >>> constants.get('mass') <<class 'astropy.constants.iau2015.IAU2015'> name='Solar mass' value=1.9884754153381438e+30 uncertainty=9.236140093538353e+25 unit='kg' reference='IAU 2015 Resolution B 3 + CODATA 2014'> """ ret = constants[key] ret.__doc__ = ret.name return ret
[docs] def find(sub=None): """ Return list of constants keys containing a given string. Parameters ---------- sub : `str`, optional Sub-string to search keys for. By default set to `None` and returns all keys. Returns ------- `None`, `list` The matching keys. See Also -------- `~sunpy.sun.constants` : Contains the description of ``constants``, which, as a dictionary literal object, does not itself possess a docstring. """ if sub is None: result = list(constants.keys()) else: result = [key for key in constants if sub.lower() in key.lower()] result.sort() return result
def _build_docstring(): """Build docstring containing RST-formatted table of constants.""" lines = ['The following constants are available:\n'] rows = [] for key, const in constants.items(): rows.append([key, const.value, const._unit_string, const.name]) table = Table(rows=rows, names=('Name', 'Value', 'Unit', 'Description')) table['Value'].info.format = '14.9g' f = io.StringIO() table.write(f, format='ascii.rst') lines.append(f.getvalue()) return '\n'.join(lines) # Add a table of constants to the docs if __doc__ is not None: __doc__ += _build_docstring() # Spectral class is not included in physical constants since it is not a number #: Spectral classification spectral_classification = 'G2V' au = astronomical_unit = get('mean distance') # The following variables from _gets are brought out by making them # accessible through a call such as sun.volume mass = get('mass') equatorial_radius = radius = get('radius') volume = get('volume') surface_area = get('surface area') average_density = density = get('average density') equatorial_surface_gravity = surface_gravity = get('surface gravity') effective_temperature = get('effective temperature') luminosity = get('luminosity') mass_conversion_rate = get('mass conversion rate') escape_velocity = get('escape velocity') sfu = get('solar flux unit') # Observable parameters average_angular_size = get('average angular size') sidereal_rotation_rate = get('sidereal rotation rate') #: Time of the start of the first Carrington rotation first_carrington_rotation = Time(get('first Carrington rotation (JD TT)'), format='jd', scale='tt') mean_synodic_period = get('mean synodic period')