test_prefixes.py 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  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
  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 == 1
  16. assert k * k == M
  17. assert 1 / m == k
  18. assert k / m == M
  19. assert dodeca * dodeca == 144
  20. assert 1 / dodeca == S.One / 12
  21. assert k / dodeca == S(1000) / 12
  22. assert dodeca / dodeca == 1
  23. m = Quantity("fake_meter")
  24. SI.set_quantity_dimension(m, S.One)
  25. SI.set_quantity_scale_factor(m, S.One)
  26. assert dodeca * m == 12 * m
  27. assert dodeca / m == 12 / m
  28. expr1 = kilo * 3
  29. assert isinstance(expr1, Mul)
  30. assert expr1.args == (3, kilo)
  31. expr2 = kilo * x
  32. assert isinstance(expr2, Mul)
  33. assert expr2.args == (x, kilo)
  34. expr3 = kilo / 3
  35. assert isinstance(expr3, Mul)
  36. assert expr3.args == (Rational(1, 3), kilo)
  37. assert expr3.args == (S.One/3, kilo)
  38. expr4 = kilo / x
  39. assert isinstance(expr4, Mul)
  40. assert expr4.args == (1/x, kilo)
  41. def test_prefix_unit():
  42. m = Quantity("fake_meter", abbrev="m")
  43. m.set_global_relative_scale_factor(1, meter)
  44. pref = {"m": PREFIXES["m"], "c": PREFIXES["c"], "d": PREFIXES["d"]}
  45. q1 = Quantity("millifake_meter", abbrev="mm")
  46. q2 = Quantity("centifake_meter", abbrev="cm")
  47. q3 = Quantity("decifake_meter", abbrev="dm")
  48. SI.set_quantity_dimension(q1, length)
  49. SI.set_quantity_scale_factor(q1, PREFIXES["m"])
  50. SI.set_quantity_scale_factor(q1, PREFIXES["c"])
  51. SI.set_quantity_scale_factor(q1, PREFIXES["d"])
  52. res = [q1, q2, q3]
  53. prefs = prefix_unit(m, pref)
  54. assert set(prefs) == set(res)
  55. assert {v.abbrev for v in prefs} == set(symbols("mm,cm,dm"))
  56. def test_bases():
  57. assert kilo.base == 10
  58. assert kibi.base == 2
  59. def test_repr():
  60. assert eval(repr(kilo)) == kilo
  61. assert eval(repr(kibi)) == kibi