1from sympy.concrete.tests.test_sums_products import NS
2
3from sympy import sqrt, S
4from sympy.physics.units import convert_to, coulomb_constant, elementary_charge, gravitational_constant, planck
5from sympy.physics.units.definitions.unit_definitions import statcoulomb, coulomb, second, gram, centimeter, erg, \
6    newton, joule, dyne, speed_of_light, meter
7from sympy.physics.units.systems import SI
8from sympy.physics.units.systems.cgs import cgs_gauss
9
10
11def test_conversion_to_from_si():
12
13    assert convert_to(statcoulomb, coulomb, cgs_gauss) == 5*coulomb/149896229
14    assert convert_to(coulomb, statcoulomb, cgs_gauss) == 149896229*statcoulomb/5
15    assert convert_to(statcoulomb, sqrt(gram*centimeter**3)/second, cgs_gauss) == centimeter**(S(3)/2)*sqrt(gram)/second
16    assert convert_to(coulomb, sqrt(gram*centimeter**3)/second, cgs_gauss) == 149896229*centimeter**(S(3)/2)*sqrt(gram)/(5*second)
17
18    # SI units have an additional base unit, no conversion in case of electromagnetism:
19    assert convert_to(coulomb, statcoulomb, SI) == coulomb
20    assert convert_to(statcoulomb, coulomb, SI) == statcoulomb
21
22    # SI without electromagnetism:
23    assert convert_to(erg, joule, SI) == joule/10**7
24    assert convert_to(erg, joule, cgs_gauss) == joule/10**7
25    assert convert_to(joule, erg, SI) == 10**7*erg
26    assert convert_to(joule, erg, cgs_gauss) == 10**7*erg
27
28    assert convert_to(dyne, newton, SI) == newton/10**5
29    assert convert_to(dyne, newton, cgs_gauss) == newton/10**5
30    assert convert_to(newton, dyne, SI) == 10**5*dyne
31    assert convert_to(newton, dyne, cgs_gauss) == 10**5*dyne
32
33
34def test_cgs_gauss_convert_constants():
35
36    assert convert_to(speed_of_light, centimeter/second, cgs_gauss) == 29979245800*centimeter/second
37
38    assert convert_to(coulomb_constant, 1, cgs_gauss) == 1
39    assert convert_to(coulomb_constant, newton*meter**2/coulomb**2, cgs_gauss) == 22468879468420441*meter**2*newton/(25000000000*coulomb**2)
40    assert convert_to(coulomb_constant, newton*meter**2/coulomb**2, SI) == 22468879468420441*meter**2*newton/(2500000*coulomb**2)
41    assert convert_to(coulomb_constant, dyne*centimeter**2/statcoulomb**2, cgs_gauss) == centimeter**2*dyne/statcoulomb**2
42    assert convert_to(coulomb_constant, 1, SI) == coulomb_constant
43    assert NS(convert_to(coulomb_constant, newton*meter**2/coulomb**2, SI)) == '8987551787.36818*meter**2*newton/coulomb**2'
44
45    assert convert_to(elementary_charge, statcoulomb, cgs_gauss)
46    assert convert_to(gravitational_constant, dyne*centimeter**2/gram**2, cgs_gauss)
47    assert NS(convert_to(planck, erg*second, cgs_gauss)) == '6.62607015e-27*erg*second'
48