test_constants.py 4.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. import pytest
  2. import scipy.constants as sc
  3. from scipy._lib._array_api_no_0d import xp_assert_equal, xp_assert_close
  4. from scipy._lib._array_api import make_xp_test_case
  5. lazy_xp_modules = [sc]
  6. @make_xp_test_case(sc.convert_temperature)
  7. class TestConvertTemperature:
  8. def test_convert_temperature(self, xp):
  9. xp_assert_equal(sc.convert_temperature(xp.asarray(32.), 'f', 'Celsius'),
  10. xp.asarray(0.0))
  11. xp_assert_equal(sc.convert_temperature(xp.asarray([0., 0.]),
  12. 'celsius', 'Kelvin'),
  13. xp.asarray([273.15, 273.15]))
  14. xp_assert_equal(sc.convert_temperature(xp.asarray([0., 0.]), 'kelvin', 'c'),
  15. xp.asarray([-273.15, -273.15]))
  16. xp_assert_equal(sc.convert_temperature(xp.asarray([32., 32.]), 'f', 'k'),
  17. xp.asarray([273.15, 273.15]))
  18. xp_assert_equal(sc.convert_temperature(xp.asarray([273.15, 273.15]),
  19. 'kelvin', 'F'),
  20. xp.asarray([32., 32.]))
  21. xp_assert_equal(sc.convert_temperature(xp.asarray([0., 0.]), 'C', 'fahrenheit'),
  22. xp.asarray([32., 32.]))
  23. xp_assert_close(sc.convert_temperature(xp.asarray([0., 0.], dtype=xp.float64),
  24. 'c', 'r'),
  25. xp.asarray([491.67, 491.67], dtype=xp.float64),
  26. rtol=0., atol=1e-13)
  27. xp_assert_close(sc.convert_temperature(xp.asarray([491.67, 491.67],
  28. dtype=xp.float64),
  29. 'Rankine', 'C'),
  30. xp.asarray([0., 0.], dtype=xp.float64), rtol=0., atol=1e-13)
  31. xp_assert_close(sc.convert_temperature(xp.asarray([491.67, 491.67],
  32. dtype=xp.float64),
  33. 'r', 'F'),
  34. xp.asarray([32., 32.], dtype=xp.float64), rtol=0., atol=1e-13)
  35. xp_assert_close(sc.convert_temperature(xp.asarray([32., 32.], dtype=xp.float64),
  36. 'fahrenheit', 'R'),
  37. xp.asarray([491.67, 491.67], dtype=xp.float64),
  38. rtol=0., atol=1e-13)
  39. xp_assert_close(sc.convert_temperature(xp.asarray([273.15, 273.15],
  40. dtype=xp.float64),
  41. 'K', 'R'),
  42. xp.asarray([491.67, 491.67], dtype=xp.float64),
  43. rtol=0., atol=1e-13)
  44. xp_assert_close(sc.convert_temperature(xp.asarray([491.67, 0.],
  45. dtype=xp.float64),
  46. 'rankine', 'kelvin'),
  47. xp.asarray([273.15, 0.], dtype=xp.float64), rtol=0., atol=1e-13)
  48. def test_convert_temperature_array_like(self):
  49. xp_assert_close(sc.convert_temperature([491.67, 0.], 'rankine', 'kelvin'),
  50. [273.15, 0.], rtol=0., atol=1e-13)
  51. def test_convert_temperature_errors(self):
  52. with pytest.raises(NotImplementedError, match="old_scale="):
  53. sc.convert_temperature(1, old_scale="cheddar", new_scale="kelvin")
  54. with pytest.raises(NotImplementedError, match="new_scale="):
  55. sc.convert_temperature(1, old_scale="kelvin", new_scale="brie")
  56. @make_xp_test_case(sc.lambda2nu)
  57. class TestLambdaToNu:
  58. def test_lambda_to_nu(self, xp):
  59. xp_assert_equal(sc.lambda2nu(xp.asarray([sc.speed_of_light, 1])),
  60. xp.asarray([1, sc.speed_of_light]))
  61. def test_lambda_to_nu_array_like(self):
  62. xp_assert_close(sc.lambda2nu([sc.speed_of_light, 1]), [1, sc.speed_of_light])
  63. @make_xp_test_case(sc.nu2lambda)
  64. class TestNuToLambda:
  65. def test_nu_to_lambda(self, xp):
  66. xp_assert_equal(sc.nu2lambda(xp.asarray([sc.speed_of_light, 1])),
  67. xp.asarray([1, sc.speed_of_light]))
  68. def test_nu_to_lambda_array_like(self):
  69. xp_assert_close(sc.nu2lambda([sc.speed_of_light, 1]), [1, sc.speed_of_light])