コード例 #1
0
def test_udf_runtime_params_reset():
    def myFunction(variable, x):
        return variable + x

    U = UserDefinedFunction(custom_function=myFunction, x=0)
    assert U.function(0) == 0
    assert U.function(0, params={'x': 1}) == 1
    assert U.function(0) == 0
コード例 #2
0
    def test_user_def_func_boolop(self, op, bin_execute, benchmark):
        if op == "AND":

            def myFunction(variable):
                var1 = True
                var2 = False
                # compiled UDFs don't support python bool type outputs
                if var1 and var2:
                    return 0.0
                else:
                    return 1.0
        elif op == "OR":

            def myFunction(variable):
                var1 = True
                var2 = False
                # compiled UDFs don't support python bool type outputs
                if var1 or var2:
                    return 1.0
                else:
                    return 0.0

        U = UserDefinedFunction(custom_function=myFunction,
                                default_variable=[0])
        if bin_execute == 'LLVM':
            e = pnlvm.execution.FuncExecution(U).execute
        elif bin_execute == 'PTX':
            e = pnlvm.execution.FuncExecution(U).cuda_execute
        else:
            e = U
        val = benchmark(e, [0])
        assert val == 1.0
コード例 #3
0
def test_user_def_func_numpy(op, variable, expected, func_mode, benchmark):
    if op == "TANH":
        def myFunction(variable):
            return np.tanh(variable)
    elif op == "EXP":
        def myFunction(variable):
            return np.exp(variable)
    elif op == "SHAPE":
        def myFunction(variable):
            return variable.shape
    elif op == "ASTYPE_FLOAT":
        def myFunction(variable):
            return variable.astype(float)
    elif op == "ASTYPE_INT":
        # return types cannot be integers, so we cast back to float and check for truncation
        def myFunction(variable):
            return variable.astype(int).astype(float)
    elif op == "NP_MAX":
        def myFunction(variable):
            return np.max(variable)
    elif op == "FLATTEN":
        def myFunction(variable):
            return variable.flatten()

    U = UserDefinedFunction(custom_function=myFunction, default_variable=variable)
    e = pytest.helpers.get_func_execution(U, func_mode)

    val = benchmark(e, variable)
    assert np.allclose(val, expected, equal_nan=True)
コード例 #4
0
def test_user_def_bin_arith(param1, param2, func, func_mode, benchmark):

    U = UserDefinedFunction(custom_function=func, param1=param1, param2=param2)
    e = pytest.helpers.get_func_execution(U, func_mode)

    val = benchmark(e, 0)
    assert np.allclose(val, func(0, param1=param1, param2=param2))
コード例 #5
0
def test_user_def_func_branching(func, var, expected, func_mode, benchmark):

    U = UserDefinedFunction(custom_function=func, default_variable=var, param2=3)
    e = pytest.helpers.get_func_execution(U, func_mode)

    val = benchmark(e, var)
    assert np.allclose(val, expected)
コード例 #6
0
def test_user_def_func_cmpop_numpy(op, var1, var2, expected, func_mode, benchmark):
    # we explicitly use np here to ensure that the result is castable to float in the scalar-scalar case
    if op == "Eq":
        def myFunction(variable, var1, var2):
            return np.equal(var1, var2).astype(float)
    elif op == "NotEq":
        def myFunction(variable, var1, var2):
            return np.not_equal(var1, var2).astype(float)
    elif op == "Lt":
        def myFunction(variable, var1, var2):
            return np.less(var1, var2).astype(float)
    elif op == "LtE":
        def myFunction(variable, var1, var2):
            return np.less_equal(var1, var2).astype(float)
    elif op == "Gt":
        def myFunction(variable, var1, var2):
            return np.greater(var1, var2).astype(float)
    elif op == "GtE":
        def myFunction(variable, var1, var2):
            return np.greater_equal(var1, var2).astype(float)

    U = UserDefinedFunction(custom_function=myFunction, default_variable=[0], var1=var1, var2=var2)
    e = pytest.helpers.get_func_execution(U, func_mode)

    val = benchmark(e, [0])
    assert np.allclose(expected, val)
コード例 #7
0
def test_user_def_reward_func(func_mode, benchmark):
    variable = [[1,2,3,4]]
    def myFunction(x,t0=0.48):
        return (x[0][0]>0).astype(float) * (x[0][2]>0).astype(float) / (np.max([x[0][1],x[0][3]]) + t0)
    U = UserDefinedFunction(custom_function=myFunction, default_variable=variable, param=variable)
    e = pytest.helpers.get_func_execution(U, func_mode)

    val = benchmark(e, variable)
    assert np.allclose(val, 0.2232142857142857)
コード例 #8
0
def test_user_def_func_variable_index(func_mode, benchmark):
    def myFunction(variable):
        variable[0][0] = variable[0][0] + 5
        variable[0][1] = variable[0][1] + 7
        return variable

    U = UserDefinedFunction(custom_function=myFunction, default_variable=[[0, 0]])
    e = pytest.helpers.get_func_execution(U, func_mode)

    val = benchmark(e, [[1, 3]])
    assert np.allclose(val, [[6, 10]])
コード例 #9
0
    def test_user_def_func_numpy(self, op, expected, bin_execute, benchmark):
        variable = [[1, 3]]
        if op == "TANH":

            def myFunction(variable):
                return np.tanh(variable)
        elif op == "EXP":

            def myFunction(variable):
                return np.exp(variable)

        U = UserDefinedFunction(custom_function=myFunction,
                                default_variable=[[0, 0]])
        if bin_execute == 'LLVM':
            e = pnlvm.execution.FuncExecution(U).execute
        elif bin_execute == 'PTX':
            e = pnlvm.execution.FuncExecution(U).cuda_execute
        else:
            e = U
        val = benchmark(e, variable)
        assert np.allclose(val, expected)
コード例 #10
0
def test_user_def_func_return(dtype, expected, func_mode, benchmark):
    if dtype == "SCALAR_VAR":
        def myFunction(variable):
            var = 1.0
            return var
    elif dtype == "VECTOR_VAR":
        def myFunction(variable):
            var = [1,2]
            return var
    elif dtype == "MATRIX_VAR":
        def myFunction(variable):
            var = [[1,2],[3,4]]
            return var
    elif dtype == "BOOL_VAR":
        def myFunction(variable):
            var = True
            return 1.0
    elif dtype == "TUPLE_VAR":
        def myFunction(variable):
            var = (1, 2, 3, 4)
            return var
    elif dtype == "SCALAR_LIT":
        def myFunction(variable):
            return 1.0
    elif dtype == "VECTOR_LIT":
        def myFunction(variable):
            return [1,2]
    elif dtype == "MATRIX_LIT":
        def myFunction(variable):
            return [[1,2],[3,4]]
    elif dtype == "TUPLE_LIT":
        def myFunction(variable):
            return (1, 2, 3, 4)

    U = UserDefinedFunction(custom_function=myFunction, default_variable=0)
    e = pytest.helpers.get_func_execution(U, func_mode)

    val = benchmark(e, 0)
    assert np.allclose(val, expected)
コード例 #11
0
def test_user_def_func_builtin(op, variable, expected, func_mode, benchmark):
    if op == "SUM":
        def myFunction(var):
            return sum(var) + sum((var[0], var[1])) + sum([var[0], var[1]])
    elif op == "LEN":
        def myFunction(var):
            return len(var) + len((var[0], var[1])) + len([var[0], var[1]]) + len((1.0, (1,2)))
    elif op == "MAX":
        def myFunction(variable):
            return max(variable)
    elif op == "MAX_MULTI":
        # special cased, since passing in multiple variables without a closure is hard
        def myFunction(variable):
            return max(variable[0], variable[1], variable[2], -5, 6)
    elif op == "MAX_TUPLE":
        def myFunction(variable):
            return max((variable[0], variable[1], variable[2], -5, 6))

    U = UserDefinedFunction(custom_function=myFunction, default_variable=variable)
    e = pytest.helpers.get_func_execution(U, func_mode)

    val = benchmark(e, variable)
    assert np.allclose(val, expected)
コード例 #12
0
    def test_user_def_func_cmpop(self, op, bin_execute, benchmark):
        if op == "Eq":

            def myFunction(variable):
                var1 = 1.0
                var2 = 1.0
                if var1 == var2:
                    return 1.0
                else:
                    return 0.0
        elif op == "NotEq":

            def myFunction(variable):
                var1 = 1.0
                var2 = 2.0
                if var1 != var2:
                    return 1.0
                else:
                    return 0.0
        elif op == "Lt":

            def myFunction(variable):
                var1 = 1.0
                var2 = 2.0
                if var1 < var2:
                    return 1.0
                else:
                    return 0.0
        elif op == "LtE":

            def myFunction(variable):
                var1 = 1.0
                var2 = 2.0
                var3 = 1.0
                if var1 <= var2 and var1 <= var3:
                    return 1.0
                else:
                    return 0.0
        elif op == "Gt":

            def myFunction(variable):
                var1 = 2.0
                var2 = 1.0
                if var1 > var2:
                    return 1.0
                else:
                    return 0.0
        elif op == "GtE":

            def myFunction(variable):
                var1 = 3.0
                var2 = 2.0
                var3 = 3.0
                if var1 >= var2 and var1 >= var3:
                    return 1.0
                else:
                    return 0.0

        U = UserDefinedFunction(custom_function=myFunction,
                                default_variable=[0])
        if bin_execute == 'LLVM':
            e = pnlvm.execution.FuncExecution(U).execute
        elif bin_execute == 'PTX':
            e = pnlvm.execution.FuncExecution(U).cuda_execute
        else:
            e = U
        val = benchmark(e, [0])
        assert val == 1.0
コード例 #13
0
def test_user_def_func_builtin_direct(func, args, expected, benchmark):
    func = UserDefinedFunction(func)

    val = benchmark(func, *args)
    assert np.allclose(val, expected)
コード例 #14
0
def test_user_def_func_unary(func, variable, func_mode, benchmark):
    U = UserDefinedFunction(custom_function=func, default_variable=variable, param=variable)
    e = pytest.helpers.get_func_execution(U, func_mode)

    val = benchmark(e, variable)
    assert np.allclose(val, func(variable, param=variable))
コード例 #15
0
def test_user_def_func_cmpop(func, var1, var2, expected, func_mode, benchmark):
    U = UserDefinedFunction(custom_function=func, default_variable=[0], var1=var1, var2=var2)
    e = pytest.helpers.get_func_execution(U, func_mode)

    val = benchmark(e, [0])
    assert np.allclose(expected, val)
コード例 #16
0
def test_user_def_func_boolop(op, var, expected, func_mode, benchmark):
    U = UserDefinedFunction(custom_function=op, default_variable=var)
    e = pytest.helpers.get_func_execution(U, func_mode)

    val = benchmark(e, var)
    assert val == expected