def METHOD_NAME(self, draw):
    in_shape = draw(
        st.lists(
            st.integers(
                min_value=1, max_value=10), min_size=1, max_size=4))
    in_shape = draw(st.sampled_from([in_shape, []]))
    keep_dim = draw(st.booleans())
    axis_list = [
        draw(st.integers(
            min_value=-1, max_value=len(in_shape) - 1))
    ]
    if len(in_shape) == 2:
        axis_list = draw(st.sampled_from([[0], [1]]))
    elif len(in_shape) == 3:
        axis_list = draw(st.sampled_from([[0], [1], [2]]))
    elif len(in_shape) == 4:
        axis_list = draw(
            st.sampled_from([[0], [1], [2], [3], [0, 1], [1, 2], [2, 3]]))
    reduce_all_data = True if len(
        in_shape) == 0 or axis_list == None or axis_list == [] else False
    if len(in_shape) == 0:
        axis_list = draw(st.sampled_from([[-1], []]))
    def generate_input(*args, **kwargs):
        return np.random.random(in_shape).astype(np.float32)
    build_ops = OpConfig(
        type="reduce_max",
        inputs={"X": ["input_data"], },
        outputs={"Out": ["output_data"], },
        attrs={
            "dim": axis_list,
            "keep_dim": keep_dim,
            "reduce_all": reduce_all_data,
        })
    program_config = ProgramConfig(
        ops=[build_ops],
        weights={},
        inputs={
            "input_data": TensorConfig(data_gen=partial(generate_input)),
        },
        outputs=["output_data"])
    return program_config