def METHOD_NAME(self, draw):
    dim = draw(st.sampled_from([0, 2, 3, 4]))
    transpose_type = draw(st.sampled_from(["transpose", "transpose2"]))
    transpose1_input_shape = draw(
        st.lists(
            st.integers(
                min_value=1, max_value=64), min_size=4, max_size=4))
    transpose1_axis = draw(
        st.lists(
            st.integers(
                min_value=0, max_value=3), min_size=4, max_size=4))
    assume(sorted(transpose1_axis) == [0, 1, 2, 3])
    transpose2_axis = [
        transpose1_axis.index(0), transpose1_axis.index(1),
        transpose1_axis.index(2), transpose1_axis.index(3)
    ]
    if dim == 0:
        transpose1_input_shape = []
        transpose1_axis = []
        transpose2_axis = []
    elif dim == 2:
        transpose1_input_shape = draw(
            st.lists(
                st.integers(
                    min_value=1, max_value=64),
                min_size=2,
                max_size=2))
        transpose1_axis = draw(
            st.lists(
                st.integers(
                    min_value=0, max_value=1),
                min_size=2,
                max_size=2))
        assume(sorted(transpose1_axis) == [0, 1])
        transpose2_axis = [
            transpose1_axis.index(0), transpose1_axis.index(1)
        ]
    elif dim == 3:
        transpose1_input_shape = draw(
            st.lists(
                st.integers(
                    min_value=1, max_value=64),
                min_size=3,
                max_size=3))
        transpose1_axis = draw(
            st.lists(
                st.integers(
                    min_value=0, max_value=2),
                min_size=3,
                max_size=3))
        assume(sorted(transpose1_axis) == [0, 1, 2])
        transpose2_axis = [
            transpose1_axis.index(0), transpose1_axis.index(1),
            transpose1_axis.index(2)
        ]
    if transpose_type == "transpose":
        transpose1_op = OpConfig(
            type="transpose",
            inputs={"X": ["transpose1_input_x"]},
            outputs={"Out": ["transpose1_output"]},
            attrs={"axis": transpose1_axis})
        softmax_op = OpConfig(
            type="softmax",
            inputs={"X": ["transpose1_output"]},
            outputs={"Out": ["softmax_output"]},
            attrs={"axis": -1})
        transpose2_op = OpConfig(
            type="transpose",
            inputs={"X": ["softmax_output"]},
            outputs={"Out": ["output_data"]},
            attrs={"axis": transpose2_axis})
    elif transpose_type == "transpose2":
        transpose1_op = OpConfig(
            type="transpose2",
            inputs={"X": ["transpose1_input_x"]},
            outputs={
                "Out": ["transpose1_output"],
                "XShape": ["transpose1_XShape"]
            },
            attrs={"axis": transpose1_axis})
        softmax_op = OpConfig(
            type="softmax",
            inputs={"X": ["transpose1_output"]},
            outputs={"Out": ["softmax_output"]},
            attrs={"axis": -1})
        transpose2_op = OpConfig(
            type="transpose2",
            inputs={"X": ["softmax_output"]},
            outputs={
                "Out": ["output_data"],
                "XShape": ["transpose2_XShape"]
            },
            attrs={"axis": transpose2_axis})
    ops = [transpose1_op, softmax_op, transpose2_op]
    program_config = ProgramConfig(
        ops=ops,
        weights={},
        inputs={
            "transpose1_input_x":
            TensorConfig(shape=transpose1_input_shape)
        },
        outputs=["output_data"])
    return program_config