def METHOD_NAME(self, draw):
    in_shape = draw(
        st.lists(
            st.integers(
                min_value=1, max_value=8), min_size=1, max_size=6))
    if self.get_target() == "Metal":
        in_shape = draw(
            st.lists(
                st.integers(
                    min_value=1, max_value=8),
                min_size=3,
                max_size=3))
        in_shape.insert(0, 1)
    in_shape = draw(st.sampled_from([in_shape, []]))
    data_type = draw(st.sampled_from(['float32', 'int32', 'int64']))
    def gen_input_data(*args, **kwargs):
        if kwargs['dtype'] == 'float32':
            return np.random.normal(0.0, 1.0,
                                    kwargs['shape']).astype(np.float32)
        elif kwargs['dtype'] == 'int32':
            return np.random.randint(1, 40,
                                     kwargs['shape']).astype(np.int32)
        elif kwargs['dtype'] == 'int64':
            return np.random.randint(1, 40,
                                     kwargs['shape']).astype(np.int64)
    equal_op = OpConfig(
        type="equal",
        inputs={"X": ["input_data_x"],
                "Y": ["input_data_y"]},
        outputs={"Out": ["output_data"]},
        attrs={})
    cast_op = OpConfig(
        type="cast",
        inputs={"X": ["output_data"]},
        outputs={"Out": ["cast_output_data"]},
        attrs={'in_dtype': 0,
               'out_dtype': 5})  # 0: bool , 5: float
    program_config = ProgramConfig(
        ops=[equal_op, cast_op],
        weights={},
        inputs={
            "input_data_x": TensorConfig(data_gen=partial(
                gen_input_data, dtype=data_type, shape=in_shape)),
            "input_data_y": TensorConfig(data_gen=partial(
                gen_input_data, dtype=data_type, shape=in_shape))
        },
        outputs=["cast_output_data"])
    return program_config