def check_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 check_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 check_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 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)) # Check boolean (should cast to integer) x = (arange(10) % 2).astype(bool) assert_equal(evaluate("prod(x,axis=0)"), prod(x, axis=0)) assert_equal(evaluate("sum(x,axis=0)"), sum(x, axis=0))
def check_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]")], )
def check_simple_expr(self): func = numexpr(E.a) x = arange(1e5) y = func(x) assert_array_equal(x, y)
def check_simple_expr_small_array(self): func = numexpr(E.a) x = arange(100.0) y = func(x) assert_array_equal(x, y)
def check_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 check_all_scalar(self): a = 3.0 b = 4.0 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 check_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.0, 2, 3]), array([4.0, 5, 6]), array([7.0, 8, 9])) assert_array_equal(x, array([86.0, 124.0, 168.0]))