def test_clinker_dups_inner(): # Testing that duplicates are allowed inside the graph x, y, z = inputs() e = add(mul(y, y), add(x, z)) lnk = CLinker().accept(Env([x, y, z], [e])) fn = lnk.make_function() assert fn(1.0, 2.0, 3.0) == 8.0
def test_clinker_not_used_inputs(): # Testing that unused inputs are allowed. x, y, z = inputs() e = add(x, y) lnk = CLinker().accept(Env([x, y, z], [e])) fn = lnk.make_function() assert fn(2.0, 1.5, 1.0) == 3.5
def test_clinker_dups(): # Testing that duplicate inputs are allowed. x, y, z = inputs() e = add(x, x) lnk = CLinker().accept(Env([x, x], [e])) fn = lnk.make_function() assert fn(2.0, 2.0) == 4
def test_clinker_literal_inlining(): x, y, z = inputs() z = Constant(tdouble, 4.12345678) e = add(mul(add(x, y), div(x, y)), bad_sub(bad_sub(x, y), z)) lnk = CLinker().accept(Env([x, y], [e])) fn = lnk.make_function() assert abs(fn(2.0, 2.0) + 0.12345678) < 1e-9 code = lnk.code_gen() # print "=== Code generated ===" # print code assert "4.12345678" in code # we expect the number to be inlined
def test_duallinker_mismatch(): x, y, z = inputs() # bad_sub is correct in C but erroneous in Python e = bad_sub(mul(x, y), mul(y, z)) g = Env([x, y, z], [e]) lnk = DualLinker(checker=_my_checker).accept(g) fn = lnk.make_function() # good assert CLinker().accept(g).make_function()(1.0, 2.0, 3.0) == -4.0 # good assert OpWiseCLinker().accept(g).make_function()(1.0, 2.0, 3.0) == -4.0 # (purposely) wrong assert PerformLinker().accept(g).make_function()(1.0, 2.0, 3.0) == -10.0 with pytest.raises(MyExc): # this runs OpWiseCLinker and PerformLinker in parallel and feeds # variables of matching operations to _my_checker to verify that they # are the same. fn(1.0, 2.0, 3.0)
def test_clinker_single_node(): x, y, z = inputs() node = add.make_node(x, y) lnk = CLinker().accept(Env(node.inputs, node.outputs)) fn = lnk.make_function() assert fn(2.0, 7.0) == 9
def test_clinker_straightforward(): x, y, z = inputs() e = add(mul(add(x, y), div(x, y)), bad_sub(bad_sub(x, y), z)) lnk = CLinker().accept(Env([x, y, z], [e])) fn = lnk.make_function() assert fn(2.0, 2.0, 2.0) == 2.0