def test_select(): element_type = Type.f32 A = Parameter(Type.boolean, Shape([1, 2])) B = Parameter(element_type, Shape([1, 2])) C = Parameter(element_type, Shape([1, 2])) parameter_list = [A, B, C] function = Function([Select(A, B, C)], parameter_list, 'test') backend = Backend.create(test.BACKEND_NAME) a = backend.create_tensor(Type.boolean, Shape([1, 2])) b = backend.create_tensor(element_type, Shape([1, 2])) c = backend.create_tensor(element_type, Shape([1, 2])) result = backend.create_tensor(element_type, Shape([1, 2])) a.write(util.numpy_to_c(np.array([[True, False]], dtype=np.bool)), 2) b.write(util.numpy_to_c(np.array([[5, 6]], dtype=np.float32)), 8) c.write(util.numpy_to_c(np.array([[7, 8]], dtype=np.float32)), 8) result_arr = np.array([[0, 0]], dtype=np.float32) result.write(util.numpy_to_c(result_arr), 8) handle = backend.compile(function) handle.call([result], [a, b, c]) result.read(util.numpy_to_c(result_arr), 8) result_arr_ref = np.array([[5, 8]]) assert np.allclose(result_arr, result_arr_ref)
def test_select(): element_type = Type.f32 A = Parameter(Type.boolean, Shape([1, 2])) B = Parameter(element_type, Shape([1, 2])) C = Parameter(element_type, Shape([1, 2])) parameter_list = [A, B, C] function = Function(NodeVector([Select(A, B, C)]), parameter_list, 'test') backend, cf = make_backend_call_frame(function) a = backend.make_primary_tensor_view(Type.boolean, Shape([1, 2])) b = backend.make_primary_tensor_view(element_type, Shape([1, 2])) c = backend.make_primary_tensor_view(element_type, Shape([1, 2])) result = backend.make_primary_tensor_view(element_type, Shape([1, 2])) a.write(util.numpy_to_c(np.array([[True, False]], dtype=np.bool)), 0, 2) b.write(util.numpy_to_c(np.array([[5, 6]], dtype=np.float32)), 0, 8) c.write(util.numpy_to_c(np.array([[7, 8]], dtype=np.float32)), 0, 8) result_arr = np.array([[0, 0]], dtype=np.float32) result.write(util.numpy_to_c(result_arr), 0, 8) cf.call([result], [a, b, c]) result.read(util.numpy_to_c(result_arr), 0, 8) result_arr_ref = np.array([[5, 8]]) assert np.allclose(result_arr, result_arr_ref)
def test_select(): element_type = Type.f32 A = Parameter(Type.boolean, Shape([1, 2])) B = Parameter(element_type, Shape([1, 2])) C = Parameter(element_type, Shape([1, 2])) parameter_list = [A, B, C] function = Function(NodeVector([Select(A, B, C)]), parameter_list, 'test') backend = Backend.create(pytest.config.getoption('backend')) a = backend.create_tensor(Type.boolean, Shape([1, 2])) b = backend.create_tensor(element_type, Shape([1, 2])) c = backend.create_tensor(element_type, Shape([1, 2])) result = backend.create_tensor(element_type, Shape([1, 2])) a.write(util.numpy_to_c(np.array([[True, False]], dtype=np.bool)), 0, 2) b.write(util.numpy_to_c(np.array([[5, 6]], dtype=np.float32)), 0, 8) c.write(util.numpy_to_c(np.array([[7, 8]], dtype=np.float32)), 0, 8) result_arr = np.array([[0, 0]], dtype=np.float32) result.write(util.numpy_to_c(result_arr), 0, 8) backend.call(function, [result], [a, b, c]) result.read(util.numpy_to_c(result_arr), 0, 8) result_arr_ref = np.array([[5, 8]]) assert np.allclose(result_arr, result_arr_ref)
def select(selection_node, input_node1, input_node2, name=None): # type: (Node, Node, Node, str) -> Node """Perform an element-wise selection operation on input tensors. :param selection_node: The node providing selection values of `bool` type. :param input_node1: The node providing data to be selected if respective `selection_node` item value is `True`. :param input_node2: The node providing data to be selected if respective `selection_node` item value is `False`. :param name: The optional new name for output node. :return: The new node with values selected according to provided arguments. """ return Select(selection_node, input_node1, input_node2)