1# -*- coding: utf-8 -*- 2# Licensed under a 3-clause BSD style license - see LICENSE.rst 3""" 4This package defines the SI units. They are also available in the 5`astropy.units` namespace. 6 7""" 8 9from astropy.constants import si as _si 10from .core import UnitBase, Unit, def_unit 11 12import numpy as _numpy 13 14_ns = globals() 15 16 17########################################################################### 18# DIMENSIONLESS 19 20def_unit(['percent', 'pct'], Unit(0.01), namespace=_ns, prefixes=False, 21 doc="percent: one hundredth of unity, factor 0.01", 22 format={'generic': '%', 'console': '%', 'cds': '%', 23 'latex': r'\%', 'unicode': '%'}) 24 25########################################################################### 26# LENGTH 27 28def_unit(['m', 'meter'], namespace=_ns, prefixes=True, 29 doc="meter: base unit of length in SI") 30 31def_unit(['micron'], um, namespace=_ns, 32 doc="micron: alias for micrometer (um)", 33 format={'latex': r'\mu m', 'unicode': '\N{MICRO SIGN}m'}) 34 35def_unit(['Angstrom', 'AA', 'angstrom'], 0.1 * nm, namespace=_ns, 36 doc="ångström: 10 ** -10 m", 37 prefixes=[(['m', 'milli'], ['milli', 'm'], 1.e-3)], 38 format={'latex': r'\mathring{A}', 'unicode': 'Å', 39 'vounit': 'Angstrom'}) 40 41 42########################################################################### 43# VOLUMES 44 45def_unit((['l', 'L'], ['liter']), 1000 * cm ** 3.0, namespace=_ns, prefixes=True, 46 format={'latex': r'\mathcal{l}', 'unicode': 'ℓ'}, 47 doc="liter: metric unit of volume") 48 49 50########################################################################### 51# ANGULAR MEASUREMENTS 52 53def_unit(['rad', 'radian'], namespace=_ns, prefixes=True, 54 doc="radian: angular measurement of the ratio between the length " 55 "on an arc and its radius") 56def_unit(['deg', 'degree'], _numpy.pi / 180.0 * rad, namespace=_ns, 57 prefixes=True, 58 doc="degree: angular measurement 1/360 of full rotation", 59 format={'latex': r'{}^{\circ}', 'unicode': '°'}) 60def_unit(['hourangle'], 15.0 * deg, namespace=_ns, prefixes=False, 61 doc="hour angle: angular measurement with 24 in a full circle", 62 format={'latex': r'{}^{h}', 'unicode': 'ʰ'}) 63def_unit(['arcmin', 'arcminute'], 1.0 / 60.0 * deg, namespace=_ns, 64 prefixes=True, 65 doc="arc minute: angular measurement", 66 format={'latex': r'{}^{\prime}', 'unicode': '′'}) 67def_unit(['arcsec', 'arcsecond'], 1.0 / 3600.0 * deg, namespace=_ns, 68 prefixes=True, 69 doc="arc second: angular measurement") 70# These special formats should only be used for the non-prefix versions 71arcsec._format = {'latex': r'{}^{\prime\prime}', 'unicode': '″'} 72def_unit(['mas'], 0.001 * arcsec, namespace=_ns, 73 doc="milli arc second: angular measurement") 74def_unit(['uas'], 0.000001 * arcsec, namespace=_ns, 75 doc="micro arc second: angular measurement", 76 format={'latex': r'\mu as', 'unicode': 'μas'}) 77 78def_unit(['sr', 'steradian'], rad ** 2, namespace=_ns, prefixes=True, 79 doc="steradian: unit of solid angle in SI") 80 81 82########################################################################### 83# TIME 84 85def_unit(['s', 'second'], namespace=_ns, prefixes=True, 86 exclude_prefixes=['a'], 87 doc="second: base unit of time in SI.") 88 89def_unit(['min', 'minute'], 60 * s, prefixes=True, namespace=_ns) 90def_unit(['h', 'hour', 'hr'], 3600 * s, namespace=_ns, prefixes=True, 91 exclude_prefixes=['p']) 92def_unit(['d', 'day'], 24 * h, namespace=_ns, prefixes=True, 93 exclude_prefixes=['c', 'y']) 94def_unit(['sday'], 86164.09053 * s, namespace=_ns, 95 doc="Sidereal day (sday) is the time of one rotation of the Earth.") 96def_unit(['wk', 'week'], 7 * day, namespace=_ns) 97def_unit(['fortnight'], 2 * wk, namespace=_ns) 98 99def_unit(['a', 'annum'], 365.25 * d, namespace=_ns, prefixes=True, 100 exclude_prefixes=['P']) 101def_unit(['yr', 'year'], 365.25 * d, namespace=_ns, prefixes=True) 102 103 104########################################################################### 105# FREQUENCY 106 107def_unit(['Hz', 'Hertz', 'hertz'], 1 / s, namespace=_ns, prefixes=True, 108 doc="Frequency") 109 110 111########################################################################### 112# MASS 113 114def_unit(['kg', 'kilogram'], namespace=_ns, 115 doc="kilogram: base unit of mass in SI.") 116def_unit(['g', 'gram'], 1.0e-3 * kg, namespace=_ns, prefixes=True, 117 exclude_prefixes=['k', 'kilo']) 118 119def_unit(['t', 'tonne'], 1000 * kg, namespace=_ns, 120 doc="Metric tonne") 121 122 123########################################################################### 124# AMOUNT OF SUBSTANCE 125 126def_unit(['mol', 'mole'], namespace=_ns, prefixes=True, 127 doc="mole: amount of a chemical substance in SI.") 128 129 130########################################################################### 131# TEMPERATURE 132 133def_unit( 134 ['K', 'Kelvin'], namespace=_ns, prefixes=True, 135 doc="Kelvin: temperature with a null point at absolute zero.") 136def_unit( 137 ['deg_C', 'Celsius'], namespace=_ns, doc='Degrees Celsius', 138 format={'latex': r'{}^{\circ}C', 'unicode': '°C'}) 139 140 141########################################################################### 142# FORCE 143 144def_unit(['N', 'Newton', 'newton'], kg * m * s ** -2, namespace=_ns, 145 prefixes=True, doc="Newton: force") 146 147 148########################################################################## 149# ENERGY 150 151def_unit(['J', 'Joule', 'joule'], N * m, namespace=_ns, prefixes=True, 152 doc="Joule: energy") 153def_unit(['eV', 'electronvolt'], _si.e.value * J, namespace=_ns, prefixes=True, 154 doc="Electron Volt") 155 156 157########################################################################## 158# PRESSURE 159 160def_unit(['Pa', 'Pascal', 'pascal'], J * m ** -3, namespace=_ns, prefixes=True, 161 doc="Pascal: pressure") 162 163 164########################################################################### 165# POWER 166 167def_unit(['W', 'Watt', 'watt'], J / s, namespace=_ns, prefixes=True, 168 doc="Watt: power") 169 170 171########################################################################### 172# ELECTRICAL 173 174def_unit(['A', 'ampere', 'amp'], namespace=_ns, prefixes=True, 175 doc="ampere: base unit of electric current in SI") 176def_unit(['C', 'coulomb'], A * s, namespace=_ns, prefixes=True, 177 doc="coulomb: electric charge") 178def_unit(['V', 'Volt', 'volt'], J * C ** -1, namespace=_ns, prefixes=True, 179 doc="Volt: electric potential or electromotive force") 180def_unit((['Ohm', 'ohm'], ['Ohm']), V * A ** -1, namespace=_ns, prefixes=True, 181 doc="Ohm: electrical resistance", 182 format={'latex': r'\Omega', 'unicode': 'Ω'}) 183def_unit(['S', 'Siemens', 'siemens'], A * V ** -1, namespace=_ns, 184 prefixes=True, doc="Siemens: electrical conductance") 185def_unit(['F', 'Farad', 'farad'], C * V ** -1, namespace=_ns, prefixes=True, 186 doc="Farad: electrical capacitance") 187 188 189########################################################################### 190# MAGNETIC 191 192def_unit(['Wb', 'Weber', 'weber'], V * s, namespace=_ns, prefixes=True, 193 doc="Weber: magnetic flux") 194def_unit(['T', 'Tesla', 'tesla'], Wb * m ** -2, namespace=_ns, prefixes=True, 195 doc="Tesla: magnetic flux density") 196def_unit(['H', 'Henry', 'henry'], Wb * A ** -1, namespace=_ns, prefixes=True, 197 doc="Henry: inductance") 198 199 200########################################################################### 201# ILLUMINATION 202 203def_unit(['cd', 'candela'], namespace=_ns, prefixes=True, 204 doc="candela: base unit of luminous intensity in SI") 205def_unit(['lm', 'lumen'], cd * sr, namespace=_ns, prefixes=True, 206 doc="lumen: luminous flux") 207def_unit(['lx', 'lux'], lm * m ** -2, namespace=_ns, prefixes=True, 208 doc="lux: luminous emittance") 209 210########################################################################### 211# RADIOACTIVITY 212 213def_unit(['Bq', 'becquerel'], 1 / s, namespace=_ns, prefixes=False, 214 doc="becquerel: unit of radioactivity") 215def_unit(['Ci', 'curie'], Bq * 3.7e10, namespace=_ns, prefixes=False, 216 doc="curie: unit of radioactivity") 217 218 219########################################################################### 220# BASES 221 222bases = set([m, s, kg, A, cd, rad, K, mol]) 223 224 225########################################################################### 226# CLEANUP 227 228del UnitBase 229del Unit 230del def_unit 231 232 233########################################################################### 234# DOCSTRING 235 236# This generates a docstring for this module that describes all of the 237# standard units defined here. 238from .utils import generate_unit_summary as _generate_unit_summary 239if __doc__ is not None: 240 __doc__ += _generate_unit_summary(globals()) 241