def test_opwiseclinker_constant(): x, y, z = inputs() x = Constant(tdouble, 7.2, name='x') e = add(mul(x, y), mul(y, z)) lnk = OpWiseCLinker().accept(Env([y, z], [e])) fn = lnk.make_function() res = fn(1.5, 3.0) assert res == 15.3
def test_c_fail_error(): x, y, z = inputs() x = Constant(tdouble, 7.2, name="x") e = add_fail(mul(x, y), mul(y, z)) lnk = OpWiseCLinker().accept(Env([y, z], [e])) fn = lnk.make_function() with pytest.raises(RuntimeError): fn(1.5, 3.0)
def test_opwiseclinker_straightforward(): x, y, z = inputs() e = add(mul(add(x, y), div(x, y)), bad_sub(bad_sub(x, y), z)) lnk = OpWiseCLinker().accept(Env([x, y, z], [e])) fn = lnk.make_function() if theano.config.cxx: assert fn(2.0, 2.0, 2.0) == 2.0 else: # The python version of bad_sub always return -10. assert fn(2.0, 2.0, 2.0) == -6
def test_c_fail_error(): if not theano.config.cxx: pytest.skip("G++ not available, so we need to skip this test.") x, y, z = inputs() x = Constant(tdouble, 7.2, name="x") e = add_fail(mul(x, y), mul(y, z)) lnk = OpWiseCLinker().accept(Env([y, z], [e])) fn = lnk.make_function() with pytest.raises(RuntimeError): fn(1.5, 3.0)
def test_c_fail_error(): if not theano.config.cxx: raise SkipTest("G++ not available, so we need to skip this test.") x, y, z = inputs() x = Constant(tdouble, 7.2, name='x') e = add_fail(mul(x, y), mul(y, z)) lnk = OpWiseCLinker().accept(Env([y, z], [e])) fn = lnk.make_function() try: fn(1.5, 3.0) except RuntimeError: print('Yay, TEST PASSED') return # test passed assert 0 # test failed
def test_c_fail_error(): if not theano.config.cxx: raise SkipTest("G++ not available, so we need to skip this test.") x, y, z = inputs() x = Constant(tdouble, 7.2, name='x') e = add_fail(mul(x, y), mul(y, z)) lnk = OpWiseCLinker().accept(Env([y, z], [e])) fn = lnk.make_function() try: res = fn(1.5, 3.0) except RuntimeError: print 'Yay, TEST PASSED' return # test passed assert 0 # test failed
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_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)