hand
This commit is contained in:
@@ -0,0 +1,358 @@
|
||||
r"""
|
||||
==================================
|
||||
Constants (:mod:`scipy.constants`)
|
||||
==================================
|
||||
|
||||
.. currentmodule:: scipy.constants
|
||||
|
||||
Physical and mathematical constants and units.
|
||||
|
||||
|
||||
Mathematical constants
|
||||
======================
|
||||
|
||||
================ =================================================================
|
||||
``pi`` Pi
|
||||
``golden`` Golden ratio
|
||||
``golden_ratio`` Golden ratio
|
||||
================ =================================================================
|
||||
|
||||
|
||||
Physical constants
|
||||
==================
|
||||
The following physical constants are available as attributes of `scipy.constants`.
|
||||
All units are `SI <https://en.wikipedia.org/wiki/International_System_of_Units>`_.
|
||||
|
||||
=========================== ================================================================ ===============
|
||||
Attribute Quantity Units
|
||||
=========================== ================================================================ ===============
|
||||
``c`` speed of light in vacuum m s^-1
|
||||
``speed_of_light`` speed of light in vacuum m s^-1
|
||||
``mu_0`` the magnetic constant :math:`\mu_0` N A^-2
|
||||
``epsilon_0`` the electric constant (vacuum permittivity), :math:`\epsilon_0` F m^-1
|
||||
``h`` the Planck constant :math:`h` J Hz^-1
|
||||
``Planck`` the Planck constant :math:`h` J Hz^-1
|
||||
``hbar`` the reduced Planck constant, :math:`\hbar = h/(2\pi)` J s
|
||||
``G`` Newtonian constant of gravitation m^3 kg^-1 s^-2
|
||||
``gravitational_constant`` Newtonian constant of gravitation m^3 kg^-1 s^-2
|
||||
``g`` standard acceleration of gravity m s^-2
|
||||
``e`` elementary charge C
|
||||
``elementary_charge`` elementary charge C
|
||||
``R`` molar gas constant J mol^-1 K^-1
|
||||
``gas_constant`` molar gas constant J mol^-1 K^-1
|
||||
``alpha`` fine-structure constant (unitless)
|
||||
``fine_structure`` fine-structure constant (unitless)
|
||||
``N_A`` Avogadro constant mol^-1
|
||||
``Avogadro`` Avogadro constant mol^-1
|
||||
``k`` Boltzmann constant J K^-1
|
||||
``Boltzmann`` Boltzmann constant J K^-1
|
||||
``sigma`` Stefan-Boltzmann constant :math:`\sigma` W m^-2 K^-4
|
||||
``Stefan_Boltzmann`` Stefan-Boltzmann constant :math:`\sigma` W m^-2 K^-4
|
||||
``Wien`` Wien wavelength displacement law constant m K
|
||||
``Rydberg`` Rydberg constant m^-1
|
||||
``m_e`` electron mass kg
|
||||
``electron_mass`` electron mass kg
|
||||
``m_p`` proton mass kg
|
||||
``proton_mass`` proton mass kg
|
||||
``m_n`` neutron mass kg
|
||||
``neutron_mass`` neutron mass kg
|
||||
=========================== ================================================================ ===============
|
||||
|
||||
|
||||
Constants database
|
||||
------------------
|
||||
|
||||
In addition to the above variables, :mod:`scipy.constants` also contains the
|
||||
2022 CODATA recommended values [CODATA2022]_ database containing more physical
|
||||
constants.
|
||||
|
||||
.. autosummary::
|
||||
:toctree: generated/
|
||||
|
||||
value -- Value in physical_constants indexed by key
|
||||
unit -- Unit in physical_constants indexed by key
|
||||
precision -- Relative precision in physical_constants indexed by key
|
||||
find -- Return list of physical_constant keys with a given string
|
||||
ConstantWarning -- Constant sought not in newest CODATA data set
|
||||
|
||||
.. data:: physical_constants
|
||||
|
||||
Dictionary of physical constants, of the format
|
||||
``physical_constants[name] = (value, unit, uncertainty)``.
|
||||
The CODATA database uses ellipses to indicate that a value is defined
|
||||
(exactly) in terms of others but cannot be represented exactly with the
|
||||
allocated number of digits. In these cases, SciPy calculates the derived
|
||||
value and reports it to the full precision of a Python ``float``. Although
|
||||
``physical_constants`` lists the uncertainty as ``0.0`` to indicate that
|
||||
the CODATA value is exact, the value in ``physical_constants`` is still
|
||||
subject to the truncation error inherent in double-precision representation.
|
||||
|
||||
Available constants:
|
||||
|
||||
====================================================================== ====
|
||||
%(constant_names)s
|
||||
====================================================================== ====
|
||||
|
||||
|
||||
Units
|
||||
=====
|
||||
|
||||
SI prefixes
|
||||
-----------
|
||||
|
||||
============ =================================================================
|
||||
``quetta`` :math:`10^{30}`
|
||||
``ronna`` :math:`10^{27}`
|
||||
``yotta`` :math:`10^{24}`
|
||||
``zetta`` :math:`10^{21}`
|
||||
``exa`` :math:`10^{18}`
|
||||
``peta`` :math:`10^{15}`
|
||||
``tera`` :math:`10^{12}`
|
||||
``giga`` :math:`10^{9}`
|
||||
``mega`` :math:`10^{6}`
|
||||
``kilo`` :math:`10^{3}`
|
||||
``hecto`` :math:`10^{2}`
|
||||
``deka`` :math:`10^{1}`
|
||||
``deci`` :math:`10^{-1}`
|
||||
``centi`` :math:`10^{-2}`
|
||||
``milli`` :math:`10^{-3}`
|
||||
``micro`` :math:`10^{-6}`
|
||||
``nano`` :math:`10^{-9}`
|
||||
``pico`` :math:`10^{-12}`
|
||||
``femto`` :math:`10^{-15}`
|
||||
``atto`` :math:`10^{-18}`
|
||||
``zepto`` :math:`10^{-21}`
|
||||
``yocto`` :math:`10^{-24}`
|
||||
``ronto`` :math:`10^{-27}`
|
||||
``quecto`` :math:`10^{-30}`
|
||||
============ =================================================================
|
||||
|
||||
Binary prefixes
|
||||
---------------
|
||||
|
||||
============ =================================================================
|
||||
``kibi`` :math:`2^{10}`
|
||||
``mebi`` :math:`2^{20}`
|
||||
``gibi`` :math:`2^{30}`
|
||||
``tebi`` :math:`2^{40}`
|
||||
``pebi`` :math:`2^{50}`
|
||||
``exbi`` :math:`2^{60}`
|
||||
``zebi`` :math:`2^{70}`
|
||||
``yobi`` :math:`2^{80}`
|
||||
============ =================================================================
|
||||
|
||||
Mass
|
||||
----
|
||||
|
||||
================= ============================================================
|
||||
``gram`` :math:`10^{-3}` kg
|
||||
``metric_ton`` :math:`10^{3}` kg
|
||||
``grain`` one grain in kg
|
||||
``lb`` one pound (avoirdupous) in kg
|
||||
``pound`` one pound (avoirdupous) in kg
|
||||
``blob`` one inch version of a slug in kg (added in 1.0.0)
|
||||
``slinch`` one inch version of a slug in kg (added in 1.0.0)
|
||||
``slug`` one slug in kg (added in 1.0.0)
|
||||
``oz`` one ounce in kg
|
||||
``ounce`` one ounce in kg
|
||||
``stone`` one stone in kg
|
||||
``grain`` one grain in kg
|
||||
``long_ton`` one long ton in kg
|
||||
``short_ton`` one short ton in kg
|
||||
``troy_ounce`` one Troy ounce in kg
|
||||
``troy_pound`` one Troy pound in kg
|
||||
``carat`` one carat in kg
|
||||
``m_u`` atomic mass constant (in kg)
|
||||
``u`` atomic mass constant (in kg)
|
||||
``atomic_mass`` atomic mass constant (in kg)
|
||||
================= ============================================================
|
||||
|
||||
Angle
|
||||
-----
|
||||
|
||||
================= ============================================================
|
||||
``degree`` degree in radians
|
||||
``arcmin`` arc minute in radians
|
||||
``arcminute`` arc minute in radians
|
||||
``arcsec`` arc second in radians
|
||||
``arcsecond`` arc second in radians
|
||||
================= ============================================================
|
||||
|
||||
|
||||
Time
|
||||
----
|
||||
|
||||
================= ============================================================
|
||||
``minute`` one minute in seconds
|
||||
``hour`` one hour in seconds
|
||||
``day`` one day in seconds
|
||||
``week`` one week in seconds
|
||||
``year`` one year (365 days) in seconds
|
||||
``Julian_year`` one Julian year (365.25 days) in seconds
|
||||
================= ============================================================
|
||||
|
||||
|
||||
Length
|
||||
------
|
||||
|
||||
===================== ============================================================
|
||||
``inch`` one inch in meters
|
||||
``foot`` one foot in meters
|
||||
``yard`` one yard in meters
|
||||
``mile`` one mile in meters
|
||||
``mil`` one mil in meters
|
||||
``pt`` one point in meters
|
||||
``point`` one point in meters
|
||||
``survey_foot`` one survey foot in meters
|
||||
``survey_mile`` one survey mile in meters
|
||||
``nautical_mile`` one nautical mile in meters
|
||||
``fermi`` one Fermi in meters
|
||||
``angstrom`` one Angstrom in meters
|
||||
``micron`` one micron in meters
|
||||
``au`` one astronomical unit in meters
|
||||
``astronomical_unit`` one astronomical unit in meters
|
||||
``light_year`` one light year in meters
|
||||
``parsec`` one parsec in meters
|
||||
===================== ============================================================
|
||||
|
||||
Pressure
|
||||
--------
|
||||
|
||||
================= ============================================================
|
||||
``atm`` standard atmosphere in pascals
|
||||
``atmosphere`` standard atmosphere in pascals
|
||||
``bar`` one bar in pascals
|
||||
``torr`` one torr (mmHg) in pascals
|
||||
``mmHg`` one torr (mmHg) in pascals
|
||||
``psi`` one psi in pascals
|
||||
================= ============================================================
|
||||
|
||||
Area
|
||||
----
|
||||
|
||||
================= ============================================================
|
||||
``hectare`` one hectare in square meters
|
||||
``acre`` one acre in square meters
|
||||
================= ============================================================
|
||||
|
||||
|
||||
Volume
|
||||
------
|
||||
|
||||
=================== ========================================================
|
||||
``liter`` one liter in cubic meters
|
||||
``litre`` one liter in cubic meters
|
||||
``gallon`` one gallon (US) in cubic meters
|
||||
``gallon_US`` one gallon (US) in cubic meters
|
||||
``gallon_imp`` one gallon (UK) in cubic meters
|
||||
``fluid_ounce`` one fluid ounce (US) in cubic meters
|
||||
``fluid_ounce_US`` one fluid ounce (US) in cubic meters
|
||||
``fluid_ounce_imp`` one fluid ounce (UK) in cubic meters
|
||||
``bbl`` one barrel in cubic meters
|
||||
``barrel`` one barrel in cubic meters
|
||||
=================== ========================================================
|
||||
|
||||
Speed
|
||||
-----
|
||||
|
||||
================== ==========================================================
|
||||
``kmh`` kilometers per hour in meters per second
|
||||
``mph`` miles per hour in meters per second
|
||||
``mach`` one Mach (approx., at 15 C, 1 atm) in meters per second
|
||||
``speed_of_sound`` one Mach (approx., at 15 C, 1 atm) in meters per second
|
||||
``knot`` one knot in meters per second
|
||||
================== ==========================================================
|
||||
|
||||
|
||||
Temperature
|
||||
-----------
|
||||
|
||||
===================== =======================================================
|
||||
``zero_Celsius`` zero of Celsius scale in Kelvin
|
||||
``degree_Fahrenheit`` one Fahrenheit (only differences) in Kelvins
|
||||
===================== =======================================================
|
||||
|
||||
.. autosummary::
|
||||
:toctree: generated/
|
||||
|
||||
convert_temperature
|
||||
|
||||
Energy
|
||||
------
|
||||
|
||||
==================== =======================================================
|
||||
``eV`` one electron volt in Joules
|
||||
``electron_volt`` one electron volt in Joules
|
||||
``calorie`` one calorie (thermochemical) in Joules
|
||||
``calorie_th`` one calorie (thermochemical) in Joules
|
||||
``calorie_IT`` one calorie (International Steam Table calorie, 1956) in Joules
|
||||
``erg`` one erg in Joules
|
||||
``Btu`` one British thermal unit (International Steam Table) in Joules
|
||||
``Btu_IT`` one British thermal unit (International Steam Table) in Joules
|
||||
``Btu_th`` one British thermal unit (thermochemical) in Joules
|
||||
``ton_TNT`` one ton of TNT in Joules
|
||||
==================== =======================================================
|
||||
|
||||
Power
|
||||
-----
|
||||
|
||||
==================== =======================================================
|
||||
``hp`` one horsepower in watts
|
||||
``horsepower`` one horsepower in watts
|
||||
==================== =======================================================
|
||||
|
||||
Force
|
||||
-----
|
||||
|
||||
==================== =======================================================
|
||||
``dyn`` one dyne in newtons
|
||||
``dyne`` one dyne in newtons
|
||||
``lbf`` one pound force in newtons
|
||||
``pound_force`` one pound force in newtons
|
||||
``kgf`` one kilogram force in newtons
|
||||
``kilogram_force`` one kilogram force in newtons
|
||||
==================== =======================================================
|
||||
|
||||
Optics
|
||||
------
|
||||
|
||||
.. autosummary::
|
||||
:toctree: generated/
|
||||
|
||||
lambda2nu
|
||||
nu2lambda
|
||||
|
||||
References
|
||||
==========
|
||||
|
||||
.. [CODATA2022] CODATA Recommended Values of the Fundamental
|
||||
Physical Constants 2022.
|
||||
|
||||
https://physics.nist.gov/cuu/Constants/
|
||||
|
||||
""" # noqa: E501
|
||||
# Modules contributed by BasSw (wegwerp@gmail.com)
|
||||
from ._codata import *
|
||||
from ._constants import *
|
||||
from ._codata import _obsolete_constants, physical_constants
|
||||
|
||||
# Deprecated namespaces, to be removed in v2.0.0
|
||||
from . import codata, constants
|
||||
|
||||
_constant_names_list = [(_k.lower(), _k, _v)
|
||||
for _k, _v in physical_constants.items()
|
||||
if _k not in _obsolete_constants]
|
||||
_constant_names = "\n".join(["``{}``{} {} {}".format(_x[1], " "*(66-len(_x[1])),
|
||||
_x[2][0], _x[2][1])
|
||||
for _x in sorted(_constant_names_list)])
|
||||
if __doc__:
|
||||
__doc__ = __doc__ % dict(constant_names=_constant_names)
|
||||
|
||||
del _constant_names
|
||||
del _constant_names_list
|
||||
|
||||
__all__ = [s for s in dir() if not s.startswith('_')]
|
||||
|
||||
from scipy._lib._testutils import PytestTester
|
||||
test = PytestTester(__name__)
|
||||
del PytestTester
|
||||
BIN
Binary file not shown.
Binary file not shown.
BIN
Binary file not shown.
Binary file not shown.
BIN
Binary file not shown.
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,369 @@
|
||||
"""
|
||||
Collection of physical constants and conversion factors.
|
||||
|
||||
Most constants are in SI units, so you can do
|
||||
print '10 mile per minute is', 10*mile/minute, 'm/s or', 10*mile/(minute*knot), 'knots'
|
||||
|
||||
The list is not meant to be comprehensive, but just convenient for everyday use.
|
||||
"""
|
||||
|
||||
import math as _math
|
||||
from typing import TYPE_CHECKING, Any
|
||||
|
||||
from ._codata import value as _cd
|
||||
|
||||
if TYPE_CHECKING:
|
||||
import numpy.typing as npt
|
||||
|
||||
from scipy._lib._array_api import array_namespace, _asarray, xp_capabilities
|
||||
|
||||
|
||||
"""
|
||||
BasSw 2006
|
||||
physical constants: imported from CODATA
|
||||
unit conversion: see e.g., NIST special publication 811
|
||||
Use at own risk: double-check values before calculating your Mars orbit-insertion burn.
|
||||
Some constants exist in a few variants, which are marked with suffixes.
|
||||
The ones without any suffix should be the most common ones.
|
||||
"""
|
||||
|
||||
__all__ = [
|
||||
'Avogadro', 'Boltzmann', 'Btu', 'Btu_IT', 'Btu_th', 'G',
|
||||
'Julian_year', 'N_A', 'Planck', 'R', 'Rydberg',
|
||||
'Stefan_Boltzmann', 'Wien', 'acre', 'alpha',
|
||||
'angstrom', 'arcmin', 'arcminute', 'arcsec',
|
||||
'arcsecond', 'astronomical_unit', 'atm',
|
||||
'atmosphere', 'atomic_mass', 'atto', 'au', 'bar',
|
||||
'barrel', 'bbl', 'blob', 'c', 'calorie',
|
||||
'calorie_IT', 'calorie_th', 'carat', 'centi',
|
||||
'convert_temperature', 'day', 'deci', 'degree',
|
||||
'degree_Fahrenheit', 'deka', 'dyn', 'dyne', 'e',
|
||||
'eV', 'electron_mass', 'electron_volt',
|
||||
'elementary_charge', 'epsilon_0', 'erg',
|
||||
'exa', 'exbi', 'femto', 'fermi', 'fine_structure',
|
||||
'fluid_ounce', 'fluid_ounce_US', 'fluid_ounce_imp',
|
||||
'foot', 'g', 'gallon', 'gallon_US', 'gallon_imp',
|
||||
'gas_constant', 'gibi', 'giga', 'golden', 'golden_ratio',
|
||||
'grain', 'gram', 'gravitational_constant', 'h', 'hbar',
|
||||
'hectare', 'hecto', 'horsepower', 'hour', 'hp',
|
||||
'inch', 'k', 'kgf', 'kibi', 'kilo', 'kilogram_force',
|
||||
'kmh', 'knot', 'lambda2nu', 'lb', 'lbf',
|
||||
'light_year', 'liter', 'litre', 'long_ton', 'm_e',
|
||||
'm_n', 'm_p', 'm_u', 'mach', 'mebi', 'mega',
|
||||
'metric_ton', 'micro', 'micron', 'mil', 'mile',
|
||||
'milli', 'minute', 'mmHg', 'mph', 'mu_0', 'nano',
|
||||
'nautical_mile', 'neutron_mass', 'nu2lambda',
|
||||
'ounce', 'oz', 'parsec', 'pebi', 'peta',
|
||||
'pi', 'pico', 'point', 'pound', 'pound_force',
|
||||
'proton_mass', 'psi', 'pt', 'quecto', 'quetta', 'ronna', 'ronto',
|
||||
'short_ton', 'sigma', 'slinch', 'slug', 'speed_of_light',
|
||||
'speed_of_sound', 'stone', 'survey_foot',
|
||||
'survey_mile', 'tebi', 'tera', 'ton_TNT',
|
||||
'torr', 'troy_ounce', 'troy_pound', 'u',
|
||||
'week', 'yard', 'year', 'yobi', 'yocto',
|
||||
'yotta', 'zebi', 'zepto', 'zero_Celsius', 'zetta'
|
||||
]
|
||||
|
||||
|
||||
# mathematical constants
|
||||
pi = _math.pi
|
||||
golden = golden_ratio = (1 + _math.sqrt(5)) / 2
|
||||
|
||||
# SI prefixes
|
||||
quetta = 1e30
|
||||
ronna = 1e27
|
||||
yotta = 1e24
|
||||
zetta = 1e21
|
||||
exa = 1e18
|
||||
peta = 1e15
|
||||
tera = 1e12
|
||||
giga = 1e9
|
||||
mega = 1e6
|
||||
kilo = 1e3
|
||||
hecto = 1e2
|
||||
deka = 1e1
|
||||
deci = 1e-1
|
||||
centi = 1e-2
|
||||
milli = 1e-3
|
||||
micro = 1e-6
|
||||
nano = 1e-9
|
||||
pico = 1e-12
|
||||
femto = 1e-15
|
||||
atto = 1e-18
|
||||
zepto = 1e-21
|
||||
yocto = 1e-24
|
||||
ronto = 1e-27
|
||||
quecto = 1e-30
|
||||
|
||||
# binary prefixes
|
||||
kibi = 2**10
|
||||
mebi = 2**20
|
||||
gibi = 2**30
|
||||
tebi = 2**40
|
||||
pebi = 2**50
|
||||
exbi = 2**60
|
||||
zebi = 2**70
|
||||
yobi = 2**80
|
||||
|
||||
# physical constants
|
||||
c = speed_of_light = _cd('speed of light in vacuum')
|
||||
mu_0 = _cd('vacuum mag. permeability')
|
||||
epsilon_0 = _cd('vacuum electric permittivity')
|
||||
h = Planck = _cd('Planck constant')
|
||||
hbar = _cd('reduced Planck constant')
|
||||
G = gravitational_constant = _cd('Newtonian constant of gravitation')
|
||||
g = _cd('standard acceleration of gravity')
|
||||
e = elementary_charge = _cd('elementary charge')
|
||||
R = gas_constant = _cd('molar gas constant')
|
||||
alpha = fine_structure = _cd('fine-structure constant')
|
||||
N_A = Avogadro = _cd('Avogadro constant')
|
||||
k = Boltzmann = _cd('Boltzmann constant')
|
||||
sigma = Stefan_Boltzmann = _cd('Stefan-Boltzmann constant')
|
||||
Wien = _cd('Wien wavelength displacement law constant')
|
||||
Rydberg = _cd('Rydberg constant')
|
||||
|
||||
# mass in kg
|
||||
gram = 1e-3
|
||||
metric_ton = 1e3
|
||||
grain = 64.79891e-6
|
||||
lb = pound = 7000 * grain # avoirdupois
|
||||
blob = slinch = pound * g / 0.0254 # lbf*s**2/in (added in 1.0.0)
|
||||
slug = blob / 12 # lbf*s**2/foot (added in 1.0.0)
|
||||
oz = ounce = pound / 16
|
||||
stone = 14 * pound
|
||||
long_ton = 2240 * pound
|
||||
short_ton = 2000 * pound
|
||||
|
||||
troy_ounce = 480 * grain # only for metals / gems
|
||||
troy_pound = 12 * troy_ounce
|
||||
carat = 200e-6
|
||||
|
||||
m_e = electron_mass = _cd('electron mass')
|
||||
m_p = proton_mass = _cd('proton mass')
|
||||
m_n = neutron_mass = _cd('neutron mass')
|
||||
m_u = u = atomic_mass = _cd('atomic mass constant')
|
||||
|
||||
# angle in rad
|
||||
degree = pi / 180
|
||||
arcmin = arcminute = degree / 60
|
||||
arcsec = arcsecond = arcmin / 60
|
||||
|
||||
# time in second
|
||||
minute = 60.0
|
||||
hour = 60 * minute
|
||||
day = 24 * hour
|
||||
week = 7 * day
|
||||
year = 365 * day
|
||||
Julian_year = 365.25 * day
|
||||
|
||||
# length in meter
|
||||
inch = 0.0254
|
||||
foot = 12 * inch
|
||||
yard = 3 * foot
|
||||
mile = 1760 * yard
|
||||
mil = inch / 1000
|
||||
pt = point = inch / 72 # typography
|
||||
survey_foot = 1200.0 / 3937
|
||||
survey_mile = 5280 * survey_foot
|
||||
nautical_mile = 1852.0
|
||||
fermi = 1e-15
|
||||
angstrom = 1e-10
|
||||
micron = 1e-6
|
||||
au = astronomical_unit = 149597870700.0
|
||||
light_year = Julian_year * c
|
||||
parsec = au / arcsec
|
||||
|
||||
# pressure in pascal
|
||||
atm = atmosphere = _cd('standard atmosphere')
|
||||
bar = 1e5
|
||||
torr = mmHg = atm / 760
|
||||
psi = pound * g / (inch * inch)
|
||||
|
||||
# area in meter**2
|
||||
hectare = 1e4
|
||||
acre = 43560 * foot**2
|
||||
|
||||
# volume in meter**3
|
||||
litre = liter = 1e-3
|
||||
gallon = gallon_US = 231 * inch**3 # US
|
||||
# pint = gallon_US / 8
|
||||
fluid_ounce = fluid_ounce_US = gallon_US / 128
|
||||
bbl = barrel = 42 * gallon_US # for oil
|
||||
|
||||
gallon_imp = 4.54609e-3 # UK
|
||||
fluid_ounce_imp = gallon_imp / 160
|
||||
|
||||
# speed in meter per second
|
||||
kmh = 1e3 / hour
|
||||
mph = mile / hour
|
||||
# approx value of mach at 15 degrees in 1 atm. Is this a common value?
|
||||
mach = speed_of_sound = 340.5
|
||||
knot = nautical_mile / hour
|
||||
|
||||
# temperature in kelvin
|
||||
zero_Celsius = 273.15
|
||||
degree_Fahrenheit = 1/1.8 # only for differences
|
||||
|
||||
# energy in joule
|
||||
eV = electron_volt = elementary_charge # * 1 Volt
|
||||
calorie = calorie_th = 4.184
|
||||
calorie_IT = 4.1868
|
||||
erg = 1e-7
|
||||
Btu_th = pound * degree_Fahrenheit * calorie_th / gram
|
||||
Btu = Btu_IT = pound * degree_Fahrenheit * calorie_IT / gram
|
||||
ton_TNT = 1e9 * calorie_th
|
||||
# Wh = watt_hour
|
||||
|
||||
# power in watt
|
||||
hp = horsepower = 550 * foot * pound * g
|
||||
|
||||
# force in newton
|
||||
dyn = dyne = 1e-5
|
||||
lbf = pound_force = pound * g
|
||||
kgf = kilogram_force = g # * 1 kg
|
||||
|
||||
# functions for conversions that are not linear
|
||||
|
||||
|
||||
@xp_capabilities()
|
||||
def convert_temperature(
|
||||
val: "npt.ArrayLike",
|
||||
old_scale: str,
|
||||
new_scale: str,
|
||||
) -> Any:
|
||||
"""
|
||||
Convert from a temperature scale to another one among Celsius, Kelvin,
|
||||
Fahrenheit, and Rankine scales.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
val : array_like
|
||||
Value(s) of the temperature(s) to be converted expressed in the
|
||||
original scale.
|
||||
old_scale : str
|
||||
Specifies as a string the original scale from which the temperature
|
||||
value(s) will be converted. Supported scales are Celsius ('Celsius',
|
||||
'celsius', 'C' or 'c'), Kelvin ('Kelvin', 'kelvin', 'K', 'k'),
|
||||
Fahrenheit ('Fahrenheit', 'fahrenheit', 'F' or 'f'), and Rankine
|
||||
('Rankine', 'rankine', 'R', 'r').
|
||||
new_scale : str
|
||||
Specifies as a string the new scale to which the temperature
|
||||
value(s) will be converted. Supported scales are Celsius ('Celsius',
|
||||
'celsius', 'C' or 'c'), Kelvin ('Kelvin', 'kelvin', 'K', 'k'),
|
||||
Fahrenheit ('Fahrenheit', 'fahrenheit', 'F' or 'f'), and Rankine
|
||||
('Rankine', 'rankine', 'R', 'r').
|
||||
|
||||
Returns
|
||||
-------
|
||||
res : float or array of floats
|
||||
Value(s) of the converted temperature(s) expressed in the new scale.
|
||||
|
||||
Notes
|
||||
-----
|
||||
.. versionadded:: 0.18.0
|
||||
|
||||
Examples
|
||||
--------
|
||||
>>> from scipy.constants import convert_temperature
|
||||
>>> import numpy as np
|
||||
>>> convert_temperature(np.array([-40, 40]), 'Celsius', 'Kelvin')
|
||||
array([ 233.15, 313.15])
|
||||
|
||||
"""
|
||||
xp = array_namespace(val)
|
||||
_val = _asarray(val, xp=xp, subok=True)
|
||||
# Convert from `old_scale` to Kelvin
|
||||
if old_scale.lower() in ['celsius', 'c']:
|
||||
tempo = _val + zero_Celsius
|
||||
elif old_scale.lower() in ['kelvin', 'k']:
|
||||
tempo = _val
|
||||
elif old_scale.lower() in ['fahrenheit', 'f']:
|
||||
tempo = (_val - 32) * 5 / 9 + zero_Celsius
|
||||
elif old_scale.lower() in ['rankine', 'r']:
|
||||
tempo = _val * 5 / 9
|
||||
else:
|
||||
raise NotImplementedError(f"{old_scale=} is unsupported: supported scales "
|
||||
"are Celsius, Kelvin, Fahrenheit, and "
|
||||
"Rankine")
|
||||
# and from Kelvin to `new_scale`.
|
||||
if new_scale.lower() in ['celsius', 'c']:
|
||||
res = tempo - zero_Celsius
|
||||
elif new_scale.lower() in ['kelvin', 'k']:
|
||||
res = tempo
|
||||
elif new_scale.lower() in ['fahrenheit', 'f']:
|
||||
res = (tempo - zero_Celsius) * 9 / 5 + 32
|
||||
elif new_scale.lower() in ['rankine', 'r']:
|
||||
res = tempo * 9 / 5
|
||||
else:
|
||||
raise NotImplementedError(f"{new_scale=} is unsupported: supported "
|
||||
"scales are 'Celsius', 'Kelvin', "
|
||||
"'Fahrenheit', and 'Rankine'")
|
||||
|
||||
return res
|
||||
|
||||
|
||||
# optics
|
||||
|
||||
|
||||
@xp_capabilities()
|
||||
def lambda2nu(lambda_: "npt.ArrayLike") -> Any:
|
||||
"""
|
||||
Convert wavelength to optical frequency
|
||||
|
||||
Parameters
|
||||
----------
|
||||
lambda_ : array_like
|
||||
Wavelength(s) to be converted.
|
||||
|
||||
Returns
|
||||
-------
|
||||
nu : float or array of floats
|
||||
Equivalent optical frequency.
|
||||
|
||||
Notes
|
||||
-----
|
||||
Computes ``nu = c / lambda`` where c = 299792458.0, i.e., the
|
||||
(vacuum) speed of light in meters/second.
|
||||
|
||||
Examples
|
||||
--------
|
||||
>>> from scipy.constants import lambda2nu, speed_of_light
|
||||
>>> import numpy as np
|
||||
>>> lambda2nu(np.array((1, speed_of_light)))
|
||||
array([ 2.99792458e+08, 1.00000000e+00])
|
||||
|
||||
"""
|
||||
xp = array_namespace(lambda_)
|
||||
return c / _asarray(lambda_, xp=xp, subok=True)
|
||||
|
||||
|
||||
@xp_capabilities()
|
||||
def nu2lambda(nu: "npt.ArrayLike") -> Any:
|
||||
"""
|
||||
Convert optical frequency to wavelength.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
nu : array_like
|
||||
Optical frequency to be converted.
|
||||
|
||||
Returns
|
||||
-------
|
||||
lambda : float or array of floats
|
||||
Equivalent wavelength(s).
|
||||
|
||||
Notes
|
||||
-----
|
||||
Computes ``lambda = c / nu`` where c = 299792458.0, i.e., the
|
||||
(vacuum) speed of light in meters/second.
|
||||
|
||||
Examples
|
||||
--------
|
||||
>>> from scipy.constants import nu2lambda, speed_of_light
|
||||
>>> import numpy as np
|
||||
>>> nu2lambda(np.array((1, speed_of_light)))
|
||||
array([ 2.99792458e+08, 1.00000000e+00])
|
||||
|
||||
"""
|
||||
xp = array_namespace(nu)
|
||||
return c / _asarray(nu, xp=xp, subok=True)
|
||||
@@ -0,0 +1,21 @@
|
||||
# This file is not meant for public use and will be removed in SciPy v2.0.0.
|
||||
# Use the `scipy.constants` namespace for importing the functions
|
||||
# included below.
|
||||
|
||||
from scipy._lib.deprecation import _sub_module_deprecation
|
||||
|
||||
__all__ = [ # noqa: F822
|
||||
'physical_constants', 'value', 'unit', 'precision', 'find',
|
||||
'ConstantWarning', 'k', 'c',
|
||||
|
||||
]
|
||||
|
||||
|
||||
def __dir__():
|
||||
return __all__
|
||||
|
||||
|
||||
def __getattr__(name):
|
||||
return _sub_module_deprecation(sub_package="constants", module="codata",
|
||||
private_modules=["_codata"], all=__all__,
|
||||
attribute=name)
|
||||
@@ -0,0 +1,53 @@
|
||||
# This file is not meant for public use and will be removed in SciPy v2.0.0.
|
||||
# Use the `scipy.constants` namespace for importing the functions
|
||||
# included below.
|
||||
|
||||
from scipy._lib.deprecation import _sub_module_deprecation
|
||||
|
||||
|
||||
__all__ = [ # noqa: F822
|
||||
'Avogadro', 'Boltzmann', 'Btu', 'Btu_IT', 'Btu_th', 'G',
|
||||
'Julian_year', 'N_A', 'Planck', 'R', 'Rydberg',
|
||||
'Stefan_Boltzmann', 'Wien', 'acre', 'alpha',
|
||||
'angstrom', 'arcmin', 'arcminute', 'arcsec',
|
||||
'arcsecond', 'astronomical_unit', 'atm',
|
||||
'atmosphere', 'atomic_mass', 'atto', 'au', 'bar',
|
||||
'barrel', 'bbl', 'blob', 'c', 'calorie',
|
||||
'calorie_IT', 'calorie_th', 'carat', 'centi',
|
||||
'convert_temperature', 'day', 'deci', 'degree',
|
||||
'degree_Fahrenheit', 'deka', 'dyn', 'dyne', 'e',
|
||||
'eV', 'electron_mass', 'electron_volt',
|
||||
'elementary_charge', 'epsilon_0', 'erg',
|
||||
'exa', 'exbi', 'femto', 'fermi', 'fine_structure',
|
||||
'fluid_ounce', 'fluid_ounce_US', 'fluid_ounce_imp',
|
||||
'foot', 'g', 'gallon', 'gallon_US', 'gallon_imp',
|
||||
'gas_constant', 'gibi', 'giga', 'golden', 'golden_ratio',
|
||||
'grain', 'gram', 'gravitational_constant', 'h', 'hbar',
|
||||
'hectare', 'hecto', 'horsepower', 'hour', 'hp',
|
||||
'inch', 'k', 'kgf', 'kibi', 'kilo', 'kilogram_force',
|
||||
'kmh', 'knot', 'lambda2nu', 'lb', 'lbf',
|
||||
'light_year', 'liter', 'litre', 'long_ton', 'm_e',
|
||||
'm_n', 'm_p', 'm_u', 'mach', 'mebi', 'mega',
|
||||
'metric_ton', 'micro', 'micron', 'mil', 'mile',
|
||||
'milli', 'minute', 'mmHg', 'mph', 'mu_0', 'nano',
|
||||
'nautical_mile', 'neutron_mass', 'nu2lambda',
|
||||
'ounce', 'oz', 'parsec', 'pebi', 'peta',
|
||||
'pi', 'pico', 'point', 'pound', 'pound_force',
|
||||
'proton_mass', 'psi', 'pt', 'short_ton',
|
||||
'sigma', 'slinch', 'slug', 'speed_of_light',
|
||||
'speed_of_sound', 'stone', 'survey_foot',
|
||||
'survey_mile', 'tebi', 'tera', 'ton_TNT',
|
||||
'torr', 'troy_ounce', 'troy_pound', 'u',
|
||||
'week', 'yard', 'year', 'yobi', 'yocto',
|
||||
'yotta', 'zebi', 'zepto', 'zero_Celsius', 'zetta'
|
||||
]
|
||||
|
||||
|
||||
def __dir__():
|
||||
return __all__
|
||||
|
||||
|
||||
def __getattr__(name):
|
||||
return _sub_module_deprecation(sub_package="constants", module="constants",
|
||||
private_modules=["_constants"], all=__all__,
|
||||
attribute=name)
|
||||
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
@@ -0,0 +1,78 @@
|
||||
from scipy.constants import find, value, c, speed_of_light, precision
|
||||
from numpy.testing import assert_equal, assert_, assert_almost_equal
|
||||
import scipy.constants._codata as _cd
|
||||
from scipy import constants
|
||||
|
||||
|
||||
def test_find():
|
||||
keys = find('weak mixing', disp=False)
|
||||
assert_equal(keys, ['weak mixing angle'])
|
||||
|
||||
keys = find('qwertyuiop', disp=False)
|
||||
assert_equal(keys, [])
|
||||
|
||||
keys = find('natural unit', disp=False)
|
||||
assert_equal(keys, sorted(['natural unit of velocity',
|
||||
'natural unit of action',
|
||||
'natural unit of action in eV s',
|
||||
'natural unit of mass',
|
||||
'natural unit of energy',
|
||||
'natural unit of energy in MeV',
|
||||
'natural unit of momentum',
|
||||
'natural unit of momentum in MeV/c',
|
||||
'natural unit of length',
|
||||
'natural unit of time']))
|
||||
|
||||
|
||||
def test_basic_table_parse():
|
||||
c_s = 'speed of light in vacuum'
|
||||
assert_equal(value(c_s), c)
|
||||
assert_equal(value(c_s), speed_of_light)
|
||||
|
||||
|
||||
def test_basic_lookup():
|
||||
assert_equal('{} {}'.format(int(_cd.value('speed of light in vacuum')),
|
||||
_cd.unit('speed of light in vacuum')),
|
||||
'299792458 m s^-1')
|
||||
|
||||
|
||||
def test_find_all():
|
||||
assert_(len(find(disp=False)) > 300)
|
||||
|
||||
|
||||
def test_find_single():
|
||||
assert_equal(find('Wien freq', disp=False)[0],
|
||||
'Wien frequency displacement law constant')
|
||||
|
||||
|
||||
def test_2002_vs_2006():
|
||||
assert_almost_equal(value('magn. flux quantum'),
|
||||
value('mag. flux quantum'))
|
||||
|
||||
|
||||
def test_exact_values():
|
||||
# Check that updating stored values with exact ones worked.
|
||||
exact = dict((k, v[0]) for k, v in _cd._physical_constants_2018.items())
|
||||
replace = _cd.exact2018(exact)
|
||||
for key, val in replace.items():
|
||||
assert_equal(val, value(key))
|
||||
assert precision(key) == 0
|
||||
|
||||
|
||||
def test_gh11341():
|
||||
# gh-11341 noted that these three constants should exist (for backward
|
||||
# compatibility) and should always have the same value:
|
||||
a = constants.epsilon_0
|
||||
b = constants.physical_constants['electric constant'][0]
|
||||
c = constants.physical_constants['vacuum electric permittivity'][0]
|
||||
assert a == b == c
|
||||
|
||||
|
||||
def test_gh14467():
|
||||
# gh-14467 noted that some physical constants in CODATA are rounded
|
||||
# to only ten significant figures even though they are supposed to be
|
||||
# exact. Check that (at least) the case mentioned in the issue is resolved.
|
||||
res = constants.physical_constants['Boltzmann constant in eV/K'][0]
|
||||
ref = (constants.physical_constants['Boltzmann constant'][0]
|
||||
/ constants.physical_constants['elementary charge'][0])
|
||||
assert res == ref
|
||||
@@ -0,0 +1,83 @@
|
||||
import pytest
|
||||
|
||||
import scipy.constants as sc
|
||||
from scipy._lib._array_api_no_0d import xp_assert_equal, xp_assert_close
|
||||
from scipy._lib._array_api import make_xp_test_case
|
||||
|
||||
lazy_xp_modules = [sc]
|
||||
|
||||
|
||||
@make_xp_test_case(sc.convert_temperature)
|
||||
class TestConvertTemperature:
|
||||
def test_convert_temperature(self, xp):
|
||||
xp_assert_equal(sc.convert_temperature(xp.asarray(32.), 'f', 'Celsius'),
|
||||
xp.asarray(0.0))
|
||||
xp_assert_equal(sc.convert_temperature(xp.asarray([0., 0.]),
|
||||
'celsius', 'Kelvin'),
|
||||
xp.asarray([273.15, 273.15]))
|
||||
xp_assert_equal(sc.convert_temperature(xp.asarray([0., 0.]), 'kelvin', 'c'),
|
||||
xp.asarray([-273.15, -273.15]))
|
||||
xp_assert_equal(sc.convert_temperature(xp.asarray([32., 32.]), 'f', 'k'),
|
||||
xp.asarray([273.15, 273.15]))
|
||||
xp_assert_equal(sc.convert_temperature(xp.asarray([273.15, 273.15]),
|
||||
'kelvin', 'F'),
|
||||
xp.asarray([32., 32.]))
|
||||
xp_assert_equal(sc.convert_temperature(xp.asarray([0., 0.]), 'C', 'fahrenheit'),
|
||||
xp.asarray([32., 32.]))
|
||||
xp_assert_close(sc.convert_temperature(xp.asarray([0., 0.], dtype=xp.float64),
|
||||
'c', 'r'),
|
||||
xp.asarray([491.67, 491.67], dtype=xp.float64),
|
||||
rtol=0., atol=1e-13)
|
||||
xp_assert_close(sc.convert_temperature(xp.asarray([491.67, 491.67],
|
||||
dtype=xp.float64),
|
||||
'Rankine', 'C'),
|
||||
xp.asarray([0., 0.], dtype=xp.float64), rtol=0., atol=1e-13)
|
||||
xp_assert_close(sc.convert_temperature(xp.asarray([491.67, 491.67],
|
||||
dtype=xp.float64),
|
||||
'r', 'F'),
|
||||
xp.asarray([32., 32.], dtype=xp.float64), rtol=0., atol=1e-13)
|
||||
xp_assert_close(sc.convert_temperature(xp.asarray([32., 32.], dtype=xp.float64),
|
||||
'fahrenheit', 'R'),
|
||||
xp.asarray([491.67, 491.67], dtype=xp.float64),
|
||||
rtol=0., atol=1e-13)
|
||||
xp_assert_close(sc.convert_temperature(xp.asarray([273.15, 273.15],
|
||||
dtype=xp.float64),
|
||||
'K', 'R'),
|
||||
xp.asarray([491.67, 491.67], dtype=xp.float64),
|
||||
rtol=0., atol=1e-13)
|
||||
xp_assert_close(sc.convert_temperature(xp.asarray([491.67, 0.],
|
||||
dtype=xp.float64),
|
||||
'rankine', 'kelvin'),
|
||||
xp.asarray([273.15, 0.], dtype=xp.float64), rtol=0., atol=1e-13)
|
||||
|
||||
def test_convert_temperature_array_like(self):
|
||||
xp_assert_close(sc.convert_temperature([491.67, 0.], 'rankine', 'kelvin'),
|
||||
[273.15, 0.], rtol=0., atol=1e-13)
|
||||
|
||||
|
||||
def test_convert_temperature_errors(self):
|
||||
with pytest.raises(NotImplementedError, match="old_scale="):
|
||||
sc.convert_temperature(1, old_scale="cheddar", new_scale="kelvin")
|
||||
with pytest.raises(NotImplementedError, match="new_scale="):
|
||||
sc.convert_temperature(1, old_scale="kelvin", new_scale="brie")
|
||||
|
||||
|
||||
@make_xp_test_case(sc.lambda2nu)
|
||||
class TestLambdaToNu:
|
||||
def test_lambda_to_nu(self, xp):
|
||||
xp_assert_equal(sc.lambda2nu(xp.asarray([sc.speed_of_light, 1])),
|
||||
xp.asarray([1, sc.speed_of_light]))
|
||||
|
||||
|
||||
def test_lambda_to_nu_array_like(self):
|
||||
xp_assert_close(sc.lambda2nu([sc.speed_of_light, 1]), [1, sc.speed_of_light])
|
||||
|
||||
|
||||
@make_xp_test_case(sc.nu2lambda)
|
||||
class TestNuToLambda:
|
||||
def test_nu_to_lambda(self, xp):
|
||||
xp_assert_equal(sc.nu2lambda(xp.asarray([sc.speed_of_light, 1])),
|
||||
xp.asarray([1, sc.speed_of_light]))
|
||||
|
||||
def test_nu_to_lambda_array_like(self):
|
||||
xp_assert_close(sc.nu2lambda([sc.speed_of_light, 1]), [1, sc.speed_of_light])
|
||||
Reference in New Issue
Block a user