def METHOD_NAME(k, axis, ret_type, is_ascend, dtype, in_dtype="float32"):
    shape = (20, 100)
    x = relay.var("x", relay.TensorType(shape, in_dtype))
    out = relay.topk(x, k, axis, ret_type, is_ascend, dtype)
    if isinstance(out, relay.expr.TupleWrapper):
        out = out.astuple()
    func = relay.Function([x], out)
    np_data = np.random.uniform(size=shape).astype(in_dtype)
    if is_ascend:
        np_indices = np.argsort(np_data, axis=axis, kind="stable")
    else:
        np_indices = np.argsort(-np_data, axis=axis, kind="stable")
    kk = k if k >= 1 else shape[axis]
    if axis == 0:
        np_indices = np_indices[:kk, :]
        np_values = np.zeros(np_indices.shape).astype(in_dtype)
        for i in range(shape[1]):
            np_values[:, i] = np_data[np_indices[:, i], i]
    else:
        np_indices = np_indices[:, :kk]
        np_values = np.zeros(np_indices.shape).astype(in_dtype)
        for i in range(shape[0]):
            np_values[i, :] = np_data[i, np_indices[i, :]]
    np_indices = np_indices.astype(dtype)
    for target, dev in tvm.testing.enabled_targets():
        op_res = relay.create_executor(executor_kind, device=dev, target=target).evaluate(func)(
            np_data
        )
        if ret_type == "both":
            tvm.testing.assert_allclose(op_res[0].numpy(), np_values)
            tvm.testing.assert_allclose(op_res[1].numpy(), np_indices)
        elif ret_type == "values":
            tvm.testing.assert_allclose(op_res.numpy(), np_values)
        else:
            tvm.testing.assert_allclose(op_res.numpy(), np_indices)