def test_duallinker_mismatch(): if not theano.config.cxx: raise SkipTest("G++ not available, so we need to skip this test.") 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 try: # 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) raise Exception("An exception should have been raised here!") except MyExc as e: pass
def test_0(self): nodes = [] def wrap(i, node, th): nodes.append(node.op) x, y, z = inputs() e = mul(add(x, y), div(x, y)) fn, i, o = wrap_linker(FunctionGraph([x, y, z], [e]), [PerformLinker(allow_gc=False)], wrap).make_thunk() i[0].data = 1 i[1].data = 2 fn() assert nodes == [div, add, mul] assert o[0].data is None
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_duallinker_mismatch(): x, y, z = inputs() e = sub(mul(x, y), mul(y, z)) # sub is correct in C but erroneous in Python g = Env([x, y, z], [e]) lnk = DualLinker(checker=_my_checker).accept(g) fn = lnk.make_function() 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 # good assert PerformLinker().accept(g).make_function()( 1.0, 2.0, 3.0) == -10.0 # (purposely) wrong try: # this runs OpWiseCLinker and PerformLinker in parallel and feeds # variables of matching operations to _my_checker to verify that they # are the same. res = fn(1.0, 2.0, 3.0) raise Exception("An exception should have been raised here!") except MyExc, e: pass
def perform_linker(fgraph): lnk = PerformLinker().accept(fgraph) return lnk