1from sympy.physics.units import DimensionSystem, joule, second, ampere 2from sympy.testing.pytest import warns_deprecated_sympy 3 4from sympy import Rational, S 5from sympy.physics.units.definitions import c, kg, m, s 6from sympy.physics.units.definitions.dimension_definitions import length, time 7from sympy.physics.units.quantities import Quantity 8from sympy.physics.units.unitsystem import UnitSystem 9 10 11def test_definition(): 12 # want to test if the system can have several units of the same dimension 13 dm = Quantity("dm") 14 base = (m, s) 15 # base_dim = (m.dimension, s.dimension) 16 ms = UnitSystem(base, (c, dm), "MS", "MS system") 17 ms.set_quantity_dimension(dm, length) 18 ms.set_quantity_scale_factor(dm, Rational(1, 10)) 19 20 assert set(ms._base_units) == set(base) 21 assert set(ms._units) == {m, s, c, dm} 22 # assert ms._units == DimensionSystem._sort_dims(base + (velocity,)) 23 assert ms.name == "MS" 24 assert ms.descr == "MS system" 25 26 27def test_str_repr(): 28 assert str(UnitSystem((m, s), name="MS")) == "MS" 29 assert str(UnitSystem((m, s))) == "UnitSystem((meter, second))" 30 31 assert repr(UnitSystem((m, s))) == "<UnitSystem: (%s, %s)>" % (m, s) 32 33 34def test_print_unit_base(): 35 A = Quantity("A") 36 A.set_global_relative_scale_factor(S.One, ampere) 37 38 Js = Quantity("Js") 39 Js.set_global_relative_scale_factor(S.One, joule*second) 40 41 mksa = UnitSystem((m, kg, s, A), (Js,)) 42 with warns_deprecated_sympy(): 43 assert mksa.print_unit_base(Js) == m**2*kg*s**-1/1000 44 45 46def test_extend(): 47 ms = UnitSystem((m, s), (c,)) 48 Js = Quantity("Js") 49 Js.set_global_relative_scale_factor(1, joule*second) 50 mks = ms.extend((kg,), (Js,)) 51 52 res = UnitSystem((m, s, kg), (c, Js)) 53 assert set(mks._base_units) == set(res._base_units) 54 assert set(mks._units) == set(res._units) 55 56 57def test_dim(): 58 dimsys = UnitSystem((m, kg, s), (c,)) 59 assert dimsys.dim == 3 60 61 62def test_is_consistent(): 63 dimension_system = DimensionSystem([length, time]) 64 us = UnitSystem([m, s], dimension_system=dimension_system) 65 assert us.is_consistent == True 66