def test_reductions(self): # Check that they compile OK. assert_equal( disassemble(NumExpr("sum(x**2+2, axis=None)", [('x', double)])), [(b'mul_ddd', b't3', b'r1[x]', b'r1[x]'), (b'add_ddd', b't3', b't3', b'c2[2.0]'), (b'sum_ddn', b'r0', b't3', None)]) assert_equal( disassemble(NumExpr("sum(x**2+2, axis=1)", [('x', double)])), [(b'mul_ddd', b't3', b'r1[x]', b'r1[x]'), (b'add_ddd', b't3', b't3', b'c2[2.0]'), (b'sum_ddn', b'r0', b't3', 1)]) assert_equal( disassemble(NumExpr("prod(x**2+2, axis=2)", [('x', double)])), [(b'mul_ddd', b't3', b'r1[x]', b'r1[x]'), (b'add_ddd', b't3', b't3', b'c2[2.0]'), (b'prod_ddn', b'r0', b't3', 2)]) # Check that full reductions work. x = zeros(1e5) + .01 # checks issue #41 assert_allclose(evaluate("sum(x+2,axis=None)"), sum(x + 2, axis=None)) assert_allclose(evaluate("sum(x+2,axis=0)"), sum(x + 2, axis=0)) assert_allclose(evaluate("prod(x,axis=0)"), prod(x, axis=0)) x = arange(10.0) assert_allclose(evaluate("sum(x**2+2,axis=0)"), sum(x**2 + 2, axis=0)) assert_allclose(evaluate("prod(x**2+2,axis=0)"), prod(x**2 + 2, axis=0)) x = arange(100.0) assert_allclose(evaluate("sum(x**2+2,axis=0)"), sum(x**2 + 2, axis=0)) assert_allclose(evaluate("prod(x-1,axis=0)"), prod(x - 1, axis=0)) x = linspace(0.1, 1.0, 2000) assert_allclose(evaluate("sum(x**2+2,axis=0)"), sum(x**2 + 2, axis=0)) assert_allclose(evaluate("prod(x-1,axis=0)"), prod(x - 1, axis=0)) # Check that reductions along an axis work y = arange(9.0).reshape(3, 3) assert_allclose(evaluate("sum(y**2, axis=1)"), sum(y**2, axis=1)) assert_allclose(evaluate("sum(y**2, axis=0)"), sum(y**2, axis=0)) assert_allclose(evaluate("sum(y**2, axis=None)"), sum(y**2, axis=None)) assert_allclose(evaluate("prod(y**2, axis=1)"), prod(y**2, axis=1)) assert_allclose(evaluate("prod(y**2, axis=0)"), prod(y**2, axis=0)) assert_allclose(evaluate("prod(y**2, axis=None)"), prod(y**2, axis=None)) # Check integers x = arange(10.) x = x.astype(int) assert_allclose(evaluate("sum(x**2+2,axis=0)"), sum(x**2 + 2, axis=0)) assert_allclose(evaluate("prod(x**2+2,axis=0)"), prod(x**2 + 2, axis=0)) # Check longs x = x.astype(long) assert_allclose(evaluate("sum(x**2+2,axis=0)"), sum(x**2 + 2, axis=0)) assert_allclose(evaluate("prod(x**2+2,axis=0)"), prod(x**2 + 2, axis=0)) # Check complex x = x + .1j assert_allclose(evaluate("sum(x**2+2,axis=0)"), sum(x**2 + 2, axis=0)) assert_allclose(evaluate("prod(x-1,axis=0)"), prod(x - 1, axis=0))
def test_reductions(self): # Check that they compile OK. assert_equal(disassemble( NumExpr("sum(x**2+2, axis=None)", [('x', double)])), [(b'mul_ddd', b't3', b'r1[x]', b'r1[x]'), (b'add_ddd', b't3', b't3', b'c2[2.0]'), (b'sum_ddn', b'r0', b't3', None)]) assert_equal(disassemble( NumExpr("sum(x**2+2, axis=1)", [('x', double)])), [(b'mul_ddd', b't3', b'r1[x]', b'r1[x]'), (b'add_ddd', b't3', b't3', b'c2[2.0]'), (b'sum_ddn', b'r0', b't3', 1)]) assert_equal(disassemble( NumExpr("prod(x**2+2, axis=2)", [('x', double)])), [(b'mul_ddd', b't3', b'r1[x]', b'r1[x]'), (b'add_ddd', b't3', b't3', b'c2[2.0]'), (b'prod_ddn', b'r0', b't3', 2)]) # Check that full reductions work. x = zeros(1e5)+.01 # checks issue #41 assert_allclose(evaluate("sum(x+2,axis=None)"), sum(x+2,axis=None)) assert_allclose(evaluate("sum(x+2,axis=0)"), sum(x+2,axis=0)) assert_allclose(evaluate("prod(x,axis=0)"), prod(x,axis=0)) x = arange(10.0) assert_allclose(evaluate("sum(x**2+2,axis=0)"), sum(x**2+2,axis=0)) assert_allclose(evaluate("prod(x**2+2,axis=0)"), prod(x**2+2,axis=0)) x = arange(100.0) assert_allclose(evaluate("sum(x**2+2,axis=0)"), sum(x**2+2,axis=0)) assert_allclose(evaluate("prod(x-1,axis=0)"), prod(x-1,axis=0)) x = linspace(0.1,1.0,2000) assert_allclose(evaluate("sum(x**2+2,axis=0)"), sum(x**2+2,axis=0)) assert_allclose(evaluate("prod(x-1,axis=0)"), prod(x-1,axis=0)) # Check that reductions along an axis work y = arange(9.0).reshape(3,3) assert_allclose(evaluate("sum(y**2, axis=1)"), sum(y**2, axis=1)) assert_allclose(evaluate("sum(y**2, axis=0)"), sum(y**2, axis=0)) assert_allclose(evaluate("sum(y**2, axis=None)"), sum(y**2, axis=None)) assert_allclose(evaluate("prod(y**2, axis=1)"), prod(y**2, axis=1)) assert_allclose(evaluate("prod(y**2, axis=0)"), prod(y**2, axis=0)) assert_allclose(evaluate("prod(y**2, axis=None)"), prod(y**2, axis=None)) # Check integers x = arange(10.) x = x.astype(int) assert_allclose(evaluate("sum(x**2+2,axis=0)"), sum(x**2+2,axis=0)) assert_allclose(evaluate("prod(x**2+2,axis=0)"), prod(x**2+2,axis=0)) # Check longs x = x.astype(long) assert_allclose(evaluate("sum(x**2+2,axis=0)"), sum(x**2+2,axis=0)) assert_allclose(evaluate("prod(x**2+2,axis=0)"), prod(x**2+2,axis=0)) # Check complex x = x + .1j assert_allclose(evaluate("sum(x**2+2,axis=0)"), sum(x**2+2,axis=0)) assert_allclose(evaluate("prod(x-1,axis=0)"), prod(x-1,axis=0))
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 test_r0_reuse(self): assert_equal(disassemble(NumExpr("x * x + 2", [('x', double)])), [(b'mul_ddd', b'r0', b'r1[x]', b'r1[x]'), (b'add_ddd', b'r0', b'r0', b'c2[2.0]')])
def test_r0_reuse(self): assert_equal( disassemble(NumExpr("x * x + 2", [("x", double)])), [(b"mul_ddd", b"r0", b"r1[x]", b"r1[x]"), (b"add_ddd", b"r0", b"r0", b"c2[2.0]")], )
def test_reductions(self): # Check that they compile OK. assert_equal( disassemble(NumExpr("sum(x**2+2, axis=None)", [("x", double)])), [ (b"mul_ddd", b"t3", b"r1[x]", b"r1[x]"), (b"add_ddd", b"t3", b"t3", b"c2[2.0]"), (b"sum_ddn", b"r0", b"t3", None), ], ) assert_equal( disassemble(NumExpr("sum(x**2+2, axis=1)", [("x", double)])), [ (b"mul_ddd", b"t3", b"r1[x]", b"r1[x]"), (b"add_ddd", b"t3", b"t3", b"c2[2.0]"), (b"sum_ddn", b"r0", b"t3", 1), ], ) assert_equal( disassemble(NumExpr("prod(x**2+2, axis=2)", [("x", double)])), [ (b"mul_ddd", b"t3", b"r1[x]", b"r1[x]"), (b"add_ddd", b"t3", b"t3", b"c2[2.0]"), (b"prod_ddn", b"r0", b"t3", 2), ], ) # Check that full reductions work. x = zeros(1e5) + 0.01 # checks issue #41 assert_allclose(evaluate("sum(x+2,axis=None)"), sum(x + 2, axis=None)) assert_allclose(evaluate("sum(x+2,axis=0)"), sum(x + 2, axis=0)) assert_allclose(evaluate("prod(x,axis=0)"), prod(x, axis=0)) x = arange(10.0) assert_allclose(evaluate("sum(x**2+2,axis=0)"), sum(x ** 2 + 2, axis=0)) assert_allclose(evaluate("prod(x**2+2,axis=0)"), prod(x ** 2 + 2, axis=0)) x = arange(100.0) assert_allclose(evaluate("sum(x**2+2,axis=0)"), sum(x ** 2 + 2, axis=0)) assert_allclose(evaluate("prod(x-1,axis=0)"), prod(x - 1, axis=0)) x = linspace(0.1, 1.0, 2000) assert_allclose(evaluate("sum(x**2+2,axis=0)"), sum(x ** 2 + 2, axis=0)) assert_allclose(evaluate("prod(x-1,axis=0)"), prod(x - 1, axis=0)) # Check that reductions along an axis work y = arange(9.0).reshape(3, 3) assert_allclose(evaluate("sum(y**2, axis=1)"), sum(y ** 2, axis=1)) assert_allclose(evaluate("sum(y**2, axis=0)"), sum(y ** 2, axis=0)) assert_allclose(evaluate("sum(y**2, axis=None)"), sum(y ** 2, axis=None)) assert_allclose(evaluate("prod(y**2, axis=1)"), prod(y ** 2, axis=1)) assert_allclose(evaluate("prod(y**2, axis=0)"), prod(y ** 2, axis=0)) assert_allclose(evaluate("prod(y**2, axis=None)"), prod(y ** 2, axis=None)) # Check integers x = arange(10.0) x = x.astype(int) assert_allclose(evaluate("sum(x**2+2,axis=0)"), sum(x ** 2 + 2, axis=0)) assert_allclose(evaluate("prod(x**2+2,axis=0)"), prod(x ** 2 + 2, axis=0)) # Check longs x = x.astype(long) assert_allclose(evaluate("sum(x**2+2,axis=0)"), sum(x ** 2 + 2, axis=0)) assert_allclose(evaluate("prod(x**2+2,axis=0)"), prod(x ** 2 + 2, axis=0)) # Check complex x = x + 0.1j assert_allclose(evaluate("sum(x**2+2,axis=0)"), sum(x ** 2 + 2, axis=0)) assert_allclose(evaluate("prod(x-1,axis=0)"), prod(x - 1, 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]")], )