This commit is contained in:
2024-11-29 18:15:30 +00:00
parent 40aade2d8e
commit bc9415586e
5298 changed files with 1938676 additions and 80 deletions

View File

@ -0,0 +1,57 @@
from scipy.constants import find, value, ConstantWarning, c, speed_of_light
from numpy.testing import (assert_equal, assert_, assert_almost_equal,
suppress_warnings)
import scipy.constants._codata as _cd
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('%d %s' % (_cd.c, _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.
with suppress_warnings() as sup:
sup.filter(ConstantWarning)
for key in _cd.exact_values:
assert_((_cd.exact_values[key][0] - value(key)) / value(key) == 0)

View File

@ -0,0 +1,89 @@
import pytest
import scipy.constants as sc
from scipy.conftest import array_api_compatible
from scipy._lib._array_api import xp_assert_equal, xp_assert_close
pytestmark = [array_api_compatible, pytest.mark.usefixtures("skip_xp_backends")]
skip_xp_backends = pytest.mark.skip_xp_backends
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)
@skip_xp_backends(np_only=True, reasons=['Python list input uses NumPy backend'])
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)
@skip_xp_backends(np_only=True, reasons=['Python int input uses NumPy backend'])
def test_convert_temperature_errors(self, xp):
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")
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]))
@skip_xp_backends(np_only=True, reasons=['Python list input uses NumPy backend'])
def test_lambda_to_nu_array_like(self, xp):
xp_assert_equal(sc.lambda2nu([sc.speed_of_light, 1]),
[1, sc.speed_of_light])
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]))
@skip_xp_backends(np_only=True, reasons=['Python list input uses NumPy backend'])
def test_nu_to_lambda_array_like(self, xp):
xp_assert_equal(sc.nu2lambda([sc.speed_of_light, 1]),
[1, sc.speed_of_light])