test_prefixes.py 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. from sympy.core.mul import Mul
  2. from sympy.core.numbers import Rational
  3. from sympy.core.singleton import S
  4. from sympy.core.symbol import (Symbol, symbols)
  5. from sympy.physics.units import Quantity, length, meter, W
  6. from sympy.physics.units.prefixes import PREFIXES, Prefix, prefix_unit, kilo, \
  7. kibi
  8. from sympy.physics.units.systems import SI
  9. x = Symbol('x')
  10. def test_prefix_operations():
  11. m = PREFIXES['m']
  12. k = PREFIXES['k']
  13. M = PREFIXES['M']
  14. dodeca = Prefix('dodeca', 'dd', 1, base=12)
  15. assert m * k is S.One
  16. assert m * W == W / 1000
  17. assert k * k == M
  18. assert 1 / m == k
  19. assert k / m == M
  20. assert dodeca * dodeca == 144
  21. assert 1 / dodeca == S.One / 12
  22. assert k / dodeca == S(1000) / 12
  23. assert dodeca / dodeca is S.One
  24. m = Quantity("fake_meter")
  25. SI.set_quantity_dimension(m, S.One)
  26. SI.set_quantity_scale_factor(m, S.One)
  27. assert dodeca * m == 12 * m
  28. assert dodeca / m == 12 / m
  29. expr1 = kilo * 3
  30. assert isinstance(expr1, Mul)
  31. assert expr1.args == (3, kilo)
  32. expr2 = kilo * x
  33. assert isinstance(expr2, Mul)
  34. assert expr2.args == (x, kilo)
  35. expr3 = kilo / 3
  36. assert isinstance(expr3, Mul)
  37. assert expr3.args == (Rational(1, 3), kilo)
  38. assert expr3.args == (S.One/3, kilo)
  39. expr4 = kilo / x
  40. assert isinstance(expr4, Mul)
  41. assert expr4.args == (1/x, kilo)
  42. def test_prefix_unit():
  43. m = Quantity("fake_meter", abbrev="m")
  44. m.set_global_relative_scale_factor(1, meter)
  45. pref = {"m": PREFIXES["m"], "c": PREFIXES["c"], "d": PREFIXES["d"]}
  46. q1 = Quantity("millifake_meter", abbrev="mm")
  47. q2 = Quantity("centifake_meter", abbrev="cm")
  48. q3 = Quantity("decifake_meter", abbrev="dm")
  49. SI.set_quantity_dimension(q1, length)
  50. SI.set_quantity_scale_factor(q1, PREFIXES["m"])
  51. SI.set_quantity_scale_factor(q1, PREFIXES["c"])
  52. SI.set_quantity_scale_factor(q1, PREFIXES["d"])
  53. res = [q1, q2, q3]
  54. prefs = prefix_unit(m, pref)
  55. assert set(prefs) == set(res)
  56. assert {v.abbrev for v in prefs} == set(symbols("mm,cm,dm"))
  57. def test_bases():
  58. assert kilo.base == 10
  59. assert kibi.base == 2
  60. def test_repr():
  61. assert eval(repr(kilo)) == kilo
  62. assert eval(repr(kibi)) == kibi