def test_units(): nT = get_unit('nT') assert str(nT) == 'nanotesla' assert str(nT.abbrev) == 'nT' R_E = get_unit('R_E') assert str(R_E) == 'earth radii' assert str(R_E.abbrev) == 'R_E'
def test_unit_composition(): kamodo = Kamodo('m[kg] = x', verbose=True) kamodo['v[km/s]'] = 'y' kamodo['p(x,y)'] = 'm*v' try: assert get_unit(kamodo.signatures['p']['units']) == get_unit('kg*km/s') except: print(kamodo.signatures) raise
def test_compose_unit_add(): kamodo = Kamodo(verbose=True) @kamodofy(units='m', arg_units={'x': 'kg'}) def a(x): return x kamodo['a'] = a kamodo['b(y[cm])[km]'] = 'y' kamodo['c(x,y)[km]'] = '2*a + 3*b' assert kamodo.c.meta['arg_units']['x'] == str(get_abbrev(get_unit('kg'))) assert kamodo.c.meta['arg_units']['y'] == str(get_abbrev(get_unit('cm'))) result = 2*(3)/1000 + 3*(3) assert kamodo.c(3, 3) == result
def test_multi_unit_composition(): kamodo = Kamodo('a(x[s])[km] = x', verbose=True) kamodo['b(x[cm])[g]'] = 'x' kamodo['c'] = 'b(a)' print(kamodo.c.meta) assert kamodo.c.meta['units'] == 'g' assert kamodo.c.meta['arg_units']['x'] == str(get_abbrev(get_unit('s')))
def test_get_arg_units(): def assign_unit(symbol, **units): if isinstance(symbol, str): symbol = sympify(symbol) return symbol.subs(units) f_units = assign_unit('f(x,y)', x=get_unit('s'), y=get_unit('hour')) g_units = assign_unit('g(a,b,c)', a=get_unit('km'), b=get_unit('cm'), c=get_unit('m')) unit_registry = { sympify('f(x,y)'): f_units, f_units: get_unit('kg/m^3'), sympify('g(a,b,c)'): g_units, g_units: get_unit('m^2') } x, c = symbols('x c') result = get_arg_units(sympify('h(g(f(x,y)))'), unit_registry) assert result[x] == get_unit('s') result = get_arg_units(sympify('f(x,y)*g(a,b,c)'), unit_registry) assert result[c] == get_unit('m')
def test_get_unit_quantity(): from kamodo import get_unit mykm = get_unit_quantity('mykm', 'km', scale_factor=2) mygm = get_unit_quantity('mygm', 'gram', scale_factor=4) assert str(mykm.convert_to(get_unit('m'))) == '2000*meter' assert str(mygm.convert_to(get_unit('kg'))) == 'kilogram/250'
def test_get_unit(): assert get_unit('kg/m^3') == get_unit('kg/m**3')
def test_get_unit_quantity(): mykm = get_unit_quantity('mykm', 'km', scale_factor=2) mygm = get_unit_quantity('mygm', 'gram', scale_factor=4) assert str(convert_to(mykm, get_unit('m'))) == '2000*meter' assert str(convert_to(mygm, get_unit('kg'))) == 'kilogram/250'
def test_get_unit_fail(): with pytest.raises(NameError): get_unit('unregistered units$') with pytest.raises(NameError): get_unit('runregistered')
def test_frequency_units(): omega = get_unit('rad')/get_unit('s') freq = get_unit('deg')/get_unit('s') kamodo_units = get_kamodo_unit_system() convert_unit_to(omega, freq, kamodo_units)
def test_broken_unit(): k = Kamodo() k['f[N]'] = 'x' get_unit('newton') get_unit('N')