def METHOD_NAME(self, draw):
    def judge_update_shape(ref_shape, index_shape):
        update_shape = []
        for i in range(len(index_shape) - 1):
            update_shape.append(index_shape[i])
        for i in range(index_shape[-1], len(ref_shape), 1):
            update_shape.append(ref_shape[i])
        return update_shape
    input_type = draw(st.sampled_from(["int32", "int64", "float32"]))
    index_type = draw(st.sampled_from(["int32", "int64"]))
    out_dtype_dict = {
        "int32": np.int32,
        "int64": np.int64,
        "float32": np.float32
    }
    in_shape = draw(
        st.lists(
            st.integers(
                min_value=2, max_value=8), min_size=3, max_size=7))
    index_np = np.vstack(
        [np.random.randint(
            0, s, size=100) for s in in_shape]).T.astype(index_type)
    test_update_0d = draw(st.sampled_from([True, False]))
    if test_update_0d:
        in_shape = draw(
            st.lists(
                st.integers(
                    min_value=2, max_value=8),
                min_size=1,
                max_size=1))
        index_np = np.array([1]).reshape([1]).astype(index_type)
    update_shape = judge_update_shape(in_shape, index_np.shape)
    if test_update_0d == False:
        assume(index_np.shape[-1] <= len(in_shape))
    def generate_data(*args, **kwargs):
        if kwargs["type"] == "int32":
            return np.random.randint(kwargs["low"], kwargs["high"],
                                     kwargs["shape"]).astype(np.int32)
        elif kwargs["type"] == "int64":
            return np.random.randint(kwargs["low"], kwargs["high"],
                                     kwargs["shape"]).astype(np.int64)
        elif kwargs["type"] == "float32":
            return np.random.random(kwargs["shape"]).astype(np.float32)
    def generate_index_data(*args, **kwargs):
        return index_np
    scatter_nd_add_op = OpConfig(
        type="scatter_nd_add",
        inputs={
            "X": ["input_data"],
            "Index": ["index"],
            "Updates": ["updates"]
        },
        outputs={"Out": ["output_data"]},
        outputs_dtype={"output_data": out_dtype_dict[input_type]},
        attrs={})
    program_config = ProgramConfig(
        ops=[scatter_nd_add_op],
        weights={},
        inputs={
            "input_data": TensorConfig(data_gen=partial(
                generate_data,
                type=input_type,
                low=-10,
                high=10,
                shape=in_shape)),
            "index": TensorConfig(data_gen=partial(generate_index_data)),
            "updates": TensorConfig(data_gen=partial(
                generate_data,
                type=input_type,
                low=-10,
                high=10,
                shape=update_shape)),
        },
        outputs=["output_data"])
    return program_config