def test_rational_expr(self): func = numexpr((E.a + 2.0 * E.b) / (1 + E.a + 4 * E.b * E.b)) a = arange(1e5) b = arange(1e5) * 0.1 x = (a + 2 * b) / (1 + a + 4 * b * b) y = func(a, b) assert_array_equal(x, y)
def test_rational_expr(self): func = numexpr((E.a + 2.0*E.b) / (1 + E.a + 4*E.b*E.b)) a = arange(1e5) b = arange(1e5) * 0.1 x = (a + 2*b) / (1 + a + 4*b*b) y = func(a, b) assert_array_equal(x, y)
def test_broadcasting(self): a = arange(100).reshape(10,10)[::2] c = arange(10) d = arange(5).reshape(5,1) assert_array_equal(evaluate("a+c"), a+c) assert_array_equal(evaluate("a+d"), a+d) expr = numexpr("2.0*a+3.0*c",[('a',float),('c', float)]) assert_array_equal(expr(a,c), 2.0*a+3.0*c)
def test_broadcasting(self): a = arange(100).reshape(10, 10)[::2] c = arange(10) d = arange(5).reshape(5, 1) assert_array_equal(evaluate("a+c"), a + c) assert_array_equal(evaluate("a+d"), a + d) expr = numexpr("2.0*a+3.0*c", [('a', float), ('c', float)]) assert_array_equal(expr(a, c), 2.0 * a + 3.0 * c)
def test_reductions(self): # Check that they compile OK. assert_equal(disassemble( numexpr("sum(x**2+2, axis=None)", [('x', float)])), [('mul_fff', 't3', 'r1[x]', 'r1[x]'), ('add_fff', 't3', 't3', 'c2[2.0]'), ('sum_ffn', 'r0', 't3', None)]) assert_equal(disassemble( numexpr("sum(x**2+2, axis=1)", [('x', float)])), [('mul_fff', 't3', 'r1[x]', 'r1[x]'), ('add_fff', 't3', 't3', 'c2[2.0]'), ('sum_ffn', 'r0', 't3', 1)]) assert_equal(disassemble( numexpr("prod(x**2+2, axis=2)", [('x', float)])), [('mul_fff', 't3', 'r1[x]', 'r1[x]'), ('add_fff', 't3', 't3', 'c2[2.0]'), ('prod_ffn', 'r0', 't3', 2)]) # Check that full reductions work. x = arange(10.0) assert_equal(evaluate("sum(x**2+2,axis=0)"), sum(x**2+2,axis=0)) assert_equal(evaluate("prod(x**2+2,axis=0)"), prod(x**2+2,axis=0)) # Check that reductions along an axis work y = arange(9.0).reshape(3,3) assert_equal(evaluate("sum(y**2, axis=1)"), sum(y**2, axis=1)) assert_equal(evaluate("sum(y**2, axis=0)"), sum(y**2, axis=0)) assert_equal(evaluate("sum(y**2, axis=None)"), sum(y**2, axis=None)) assert_equal(evaluate("prod(y**2, axis=1)"), prod(y**2, axis=1)) assert_equal(evaluate("prod(y**2, axis=0)"), prod(y**2, axis=0)) assert_equal(evaluate("prod(y**2, axis=None)"), prod(y**2, axis=None)) # Check integers x = x.astype(int) assert_equal(evaluate("sum(x**2+2,axis=0)"), sum(x**2+2,axis=0)) assert_equal(evaluate("prod(x**2+2,axis=0)"), prod(x**2+2,axis=0)) # Check longs x = x.astype(long) assert_equal(evaluate("sum(x**2+2,axis=0)"), sum(x**2+2,axis=0)) assert_equal(evaluate("prod(x**2+2,axis=0)"), prod(x**2+2,axis=0)) # Check complex x = x + 5j assert_equal(evaluate("sum(x**2+2,axis=0)"), sum(x**2+2,axis=0)) assert_equal(evaluate("prod(x**2+2,axis=0)"), prod(x**2+2,axis=0))
def test_reductions(self): # Check that they compile OK. assert_equal( disassemble(numexpr("sum(x**2+2, axis=None)", [('x', float)])), [('mul_fff', 't3', 'r1[x]', 'r1[x]'), ('add_fff', 't3', 't3', 'c2[2.0]'), ('sum_ffn', 'r0', 't3', None)]) assert_equal( disassemble(numexpr("sum(x**2+2, axis=1)", [('x', float)])), [('mul_fff', 't3', 'r1[x]', 'r1[x]'), ('add_fff', 't3', 't3', 'c2[2.0]'), ('sum_ffn', 'r0', 't3', 1)]) assert_equal( disassemble(numexpr("prod(x**2+2, axis=2)", [('x', float)])), [('mul_fff', 't3', 'r1[x]', 'r1[x]'), ('add_fff', 't3', 't3', 'c2[2.0]'), ('prod_ffn', 'r0', 't3', 2)]) # Check that full reductions work. x = arange(10.0) assert_equal(evaluate("sum(x**2+2,axis=0)"), sum(x**2 + 2, axis=0)) assert_equal(evaluate("prod(x**2+2,axis=0)"), prod(x**2 + 2, axis=0)) # Check that reductions along an axis work y = arange(9.0).reshape(3, 3) assert_equal(evaluate("sum(y**2, axis=1)"), sum(y**2, axis=1)) assert_equal(evaluate("sum(y**2, axis=0)"), sum(y**2, axis=0)) assert_equal(evaluate("sum(y**2, axis=None)"), sum(y**2, axis=None)) assert_equal(evaluate("prod(y**2, axis=1)"), prod(y**2, axis=1)) assert_equal(evaluate("prod(y**2, axis=0)"), prod(y**2, axis=0)) assert_equal(evaluate("prod(y**2, axis=None)"), prod(y**2, axis=None)) # Check integers x = x.astype(int) assert_equal(evaluate("sum(x**2+2,axis=0)"), sum(x**2 + 2, axis=0)) assert_equal(evaluate("prod(x**2+2,axis=0)"), prod(x**2 + 2, axis=0)) # Check longs x = x.astype(long) assert_equal(evaluate("sum(x**2+2,axis=0)"), sum(x**2 + 2, axis=0)) assert_equal(evaluate("prod(x**2+2,axis=0)"), prod(x**2 + 2, axis=0)) # Check complex x = x + 5j assert_equal(evaluate("sum(x**2+2,axis=0)"), sum(x**2 + 2, axis=0)) assert_equal(evaluate("prod(x**2+2,axis=0)"), prod(x**2 + 2, axis=0))
def test_simple_expr(self): func = numexpr(E.a) x = arange(1e5) y = func(x) assert_array_equal(x, y)
def test_simple_expr_small_array(self): func = numexpr(E.a) x = arange(100.0) y = func(x) assert_array_equal(x, y)
def test_simple(self): ex = 2.0 * E.a + 3.0 * E.b * E.c func = numexpr(ex, signature=[('a', float), ('b', float), ('c', float)]) x = func(array([1., 2, 3]), array([4., 5, 6]), array([7., 8, 9])) assert_array_equal(x, array([ 86., 124., 168.]))
def test_run(self): a = arange(100).reshape(10,10)[::2] b = arange(10) expr = numexpr("2*a+3*b",[('a',float),('b', float)]) assert_array_equal(expr(a,b), expr.run(a,b))
def test_all_scalar(self): a = 3. b = 4. assert_equal(evaluate("a+b"), a+b) expr = numexpr("2*a+3*b",[('a',float),('b', float)]) assert_equal(expr(a,b), 2*a+3*b)
def test_simple(self): ex = 2.0 * E.a + 3.0 * E.b * E.c func = numexpr(ex, signature=[('a', float), ('b', float), ('c', float)]) x = func(array([1., 2, 3]), array([4., 5, 6]), array([7., 8, 9])) assert_array_equal(x, array([86., 124., 168.]))
def test_run(self): a = arange(100).reshape(10, 10)[::2] b = arange(10) expr = numexpr("2*a+3*b", [('a', float), ('b', float)]) assert_array_equal(expr(a, b), expr.run(a, b))
def test_all_scalar(self): a = 3. b = 4. assert_equal(evaluate("a+b"), a + b) expr = numexpr("2*a+3*b", [('a', float), ('b', float)]) assert_equal(expr(a, b), 2 * a + 3 * b)
def test_r0_reuse(self): assert_equal(disassemble(numexpr("x**2+2", [('x', float)])), [('mul_fff', 'r0', 'r1[x]', 'r1[x]'), ('add_fff', 'r0', 'r0', 'c2[2.0]')])