示例#1
0
def test_to_latex():
    kamodo = Kamodo(f='x**2', verbose=True)
    assert str(kamodo.to_latex()) == r'\begin{equation}f{\left(x \right)} = x^{2}\end{equation}'
    kamodo = Kamodo(g='x', verbose=True)
    assert str(kamodo.to_latex()) == r'\begin{equation}g{\left(x \right)} = x\end{equation}'
    kamodo['f(x[cm])[kg]'] = 'x**2'
    kamodo['g'] = kamodofy(lambda x: x**2, units='kg', arg_units=dict(x='cm'), equation='$x^2$')
    kamodo.to_latex()
示例#2
0
def test_Kamodo_ambiguous_expr():
    a, b, c, x, y, z = symbols('a b c x y z')
    with pytest.raises(NameError):
        kamodo = Kamodo()
        kamodo['a(b,c)'] = x ** 2 + y ** 2
    kamodo = Kamodo()
    kamodo['a(x, y)'] = x ** 2 + y ** 2
    assert kamodo.a(3, 4) == 3 ** 2 + 4 ** 2
示例#3
0
def test_kamodo_inline_merge():
    k1 = Kamodo(f='x**2')
    k2 = Kamodo(g=lambda y: y-1)

    # create a local namespace holding both kamodo objects
    ns = {'k1':k1, 'k2': k2}
    k3 = Kamodo(myf = sympify('k1.f(x) + k2.g(y)', locals=ns))
    assert k3.myf(x=3, y=4) == 3**2 + 4 - 1
示例#4
0
def test_unit_composition_registration():
    server = Kamodo(**{'M': kamodofy(lambda r=3: r, units='kg'),
                       'V[m^3]': (lambda r: r**3)}, verbose=True)
    user = Kamodo(mass=server.M, vol=server.V,
              **{'rho(r)[g/cm^3]':'mass/vol'}, verbose=True)

    result = (3/3**3)*(1000)*(1/10**6)
    assert np.isclose(user.rho(3), result)
示例#5
0
def test_compose():
    k1 = Kamodo(f='x')
    k2 = Kamodo(g='y**2', h = kamodofy(lambda x: x**3))
    k3 = compose(m1=k1, m2=k2)
    assert k3.f_m1(3) == 3
    assert k3.g_m2(3) == 3**2
    assert k3.h_m2(3) == 3**3
    k3['h(f_m1)'] = 'f_m1'
    assert k3.h(3) == 3
示例#6
0
def test_Kamodo_assign_by_callable():
    kamodo = Kamodo(f=lambda x: x ** 2, verbose=False)
    assert kamodo['f'](3) == 3 ** 2
    assert kamodo.f(3) == 3 ** 2
    Kamodo(f=lambda x, y: x + y)

    def rho(x, y):
        return x + y

    kamodo['g'] = rho
    assert kamodo.g(3, 4) == 3 + 4
示例#7
0
def test_symbol_key():
    f = symbols('f', cls=UndefinedFunction)
    x = Symbol('x')
    f_ = f(x)
    kamodo = Kamodo(verbose=True)
    kamodo[f_] = x ** 2
    assert kamodo.f(3) == 9
示例#8
0
def test_Kamodo_reassignment():
    a, b, c, x, y, z, r = symbols('a b c x y z r')
    kamodo = Kamodo('f(x) = 3*x+5', verbose=True)
    kamodo['r(x,y)'] = x + y
    kamodo['r(x,y)'] = "3*x + y"
    assert kamodo.r(1, 1) != 2
    assert kamodo.r(1, 1) == 4
示例#9
0
def test_simple_figure():
    @kamodofy(units='kg', hidden_args=['ions'])
    def f_N(x_N):
        return x_N**2

    kamodo = Kamodo(f_N=f_N,verbose=True)
    kamodo.plot(f_N=dict(x_N=np.linspace(-4, 3, 30)))
示例#10
0
def test_to_latex():
    warnings.simplefilter('error')
    kamodo = Kamodo(f='x**2', verbose=True)
    assert str(kamodo.to_latex(mode='inline')) == r'$f{\left(x \right)} = x^{2}$'
    kamodo = Kamodo(g='x', verbose=True)
    assert str(kamodo.to_latex(mode='inline')) == r'$g{\left(x \right)} = x$'
    kamodo['f(x[cm])[kg]'] = 'x**2'
    kamodo['g'] = kamodofy(lambda x: x**2, units='kg', arg_units=dict(x='cm'), equation='$x^2$')
    kamodo['h'] = kamodofy(lambda x: x**2, units='kg', arg_units=dict(x='cm'))
    
    @kamodofy(units = 'kg/m^3', citation = 'Bob et. al, 2018')
    def rho(x = np.array([3,4,5]), y = np.array([1,2,3])):
        """A function that computes density"""
        return x+y
    kamodo['rho'] = rho
    kamodo.to_latex()
示例#11
0
def test_unavailable_4d_plot_type():
    def g(x=np.array([1]), y=np.array([1]), z=np.array([1]), t=np.array([1])):
        return x**2 + y**2 + z**2 + t**2

    kamodo = Kamodo(g=g, verbose=True)
    with pytest.raises(KeyError):
        kamodo.plot('g')
示例#12
0
def test_compose_unit_raises():

    with pytest.raises(NameError):
        kamodo = Kamodo('a(x[kg])[m] = x', 'b(y[cm])[km] = y', verbose=True)

        # this should fail since x is registered with kg
        kamodo['c(x[cm],y[cm])[km]'] = '2*a + 3*b'
示例#13
0
def test_eval_no_defaults():
    kamodo = Kamodo(f='x', verbose=True)
    kamodo['g'] = lambda x=3: x
    kamodo['h'] = kamodofy(lambda x=[2,3,4]: (kamodofy(lambda x_=np.array([1]): x_**2) for x_ in x))
    assert kamodo.evaluate('f', x=3)['x'] == 3
    assert kamodo.evaluate('g')['x'] == 3
    assert kamodo.evaluate('h')['x_'][-2] == 1.
示例#14
0
def test_kamodofy_update_attribute():
    @kamodofy(units='cm', update='y')
    def f(x):
        return x # pragma: no cover

    kamodo = Kamodo(f=f)
    assert f.update == 'y'
示例#15
0
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')))
示例#16
0
def test_komodofy_register():
    @kamodofy(units='kg/cm^3')
    def my_density(x, y, z):
        return x + y + z

    kamodo = Kamodo(rho=my_density)
    assert kamodo.rho.meta['units'] == 'kg/cm^3'
示例#17
0
def test_tri_surface_plot():
    R = 1
    theta = np.linspace(.2 * np.pi, .8 * np.pi, 40)
    phi = np.linspace(0, 2 * np.pi, 50)
    theta_, phi_ = np.meshgrid(theta, phi)
    r = (R + .1 * (np.cos(10 * theta_) * np.sin(14 * phi_)))

    xx = r * np.sin(theta_) * np.cos(phi_)
    yy = r * np.sin(theta_) * np.sin(phi_)
    zz = r * np.cos(theta_)

    def tri_surface(x_NM=xx, y_NM=yy, z_NM=zz):
        return .1 * x_NM + x_NM ** 2 + y_NM ** 2 + z_NM ** 2

    title = '$\\operatorname{h_{NM}}{\\left(x_{NM},y_{NM},z_{NM} \\right)} = \\lambda{\\left(x_{NM},y_{NM},' \
            'z_{NM} \\right)}$ '
    kamodo = Kamodo(h_NM=tri_surface)

    results = kamodo.evaluate('h_NM')
    titles = dict(variable='h_NM', title=title)

    traces, chart_type, layout = tri_surface_plot(results, titles, True)

    assert chart_type == '3d-surface'
    assert layout['title']['text'] == title
示例#18
0
def test_Kamodo_expr():
    a, b, c, x, y, z = symbols('a b c x y z')
    kamodo = Kamodo(a=x ** 2, verbose=True)
    try:
        assert kamodo.a(3) == 3 ** 2
    except:
        print(kamodo.symbol_registry)
        raise
示例#19
0
def test_Kamodo_str():
    kamodo = Kamodo('f(a,x,b) = a*x+b')
    try:
        assert kamodo.f(3, 4, 5) == 3 * 4 + 5
    except:
        print(kamodo.signatures)
        print(list(kamodo.keys()))
        raise
示例#20
0
def test_unit_composition_conversion():
    kamodo = Kamodo('a(x[kg])[m] = x', verbose=True)
    kamodo['b(x[cm])[g]'] = 'x'
    kamodo['c'] = 'b(a)'

    assert kamodo.c.meta['units'] == 'g'
    assert kamodo.c.meta['arg_units']['x'] == 'kg'
    assert kamodo.c(3) == kamodo.b(100*kamodo.a(3))
示例#21
0
def test_Kamodo_get():
    kamodo = Kamodo('$f(a,x,b) = a^x+b $')
    try:
        assert kamodo['f'](3, 4, 5) == 3 ** 4 + 5
    except:
        print(kamodo.signatures)
        print(list(kamodo.keys()))
        raise
示例#22
0
def test_reserved_name():
    kamodo = Kamodo(verbose=True)
  
    @kamodofy
    def test(x, y):
        return x+y
    with pytest.raises(NotImplementedError):
        kamodo['test'] = test
示例#23
0
def test_vectorize():
    @np.vectorize
    @kamodofy(units='kg')
    def f(x, y):
        return x + y

    kamodo = Kamodo(f=f)
    kamodo.f([3, 4, 5], 5)
    kamodo.evaluate('f', x=3,y=2)
示例#24
0
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
示例#25
0
def test_default_forwarding():
    x = np.linspace(-5, 5, 12)
    
    def f(x=x):
        return x**2
    
    k = Kamodo(f=f)
    k['g'] = 'f+2'
    assert len(k.g()) == 12
示例#26
0
def test_image_plot():
    def img(i=np.arange(33),j=np.arange(35)):
        ii, jj, kk = np.meshgrid(i,j,[100, 200, 255], indexing='ij')
        return kk

    kamodo = Kamodo(img=img)
    results = kamodo.evaluate('img')
    titles = dict(variable='img', title='mytitle')
    [trace], chart_type, layout = image(results, titles, True)
示例#27
0
def test_unit_function_composition():
    kamodo = Kamodo('X[m] = x', verbose=True)

    @kamodofy(units='km/s', arg_units=dict(x = 'm'))
    def v(x):
        return x

    kamodo['v'] = v
    kamodo['speed'] = 'v(X)'
    assert kamodo.speed.meta['units'] == 'km/s'
示例#28
0
def test_contains():
    kamodo = Kamodo(f='x', verbose=True)
    assert 'f' in kamodo
    assert 'f( x )' in kamodo
    f, x = symbols('f x')
    assert f in kamodo # f is a symbo
    f = Function(f) # f is an Unefined Function
    assert f in kamodo
    assert f(x) in kamodo
    assert f('x') in kamodo
示例#29
0
def test_scatter_plot():
    title = 'test plot title'
    kamodo_obj = Kamodo(f='x**3')
    result = kamodo_obj.evaluate('f', x=np.random.random((100, 3)))
    titles = dict(variable='x', title=title)

    [trace], plot_type, layout = scatter_plot(result, titles, True)

    assert trace['mode'] == 'markers'
    assert layout['title']['text'] == title
    assert plot_type == '3d-scatter'
示例#30
0
def test_symbol_replace():
    k = Kamodo(f='x', verbose=True)

    f1, f2 = list(k.keys())
    print('\n|||||',f1, f2, '||||||')
    k[f1] = 'x**2'
    assert k.f(3) == 9
    print('\n|||||', *list(k.keys()), '|||||')
    k[f2] = 'x**3'
    print('\n|||||', *list(k.keys()), '|||||')
    assert k.f(3) == 27