def METHOD_NAME(self, draw):
    in_shape = draw(
        st.lists(
            st.integers(
                min_value=1, max_value=16), min_size=2, max_size=4))
    padding_weights = draw(st.sampled_from([False, True]))
    # OpenCL dose not support this attribute
    if (self.get_target() == 'OpenCL'):
        padding_weights = False
    start_axis = draw(
        st.integers(
            min_value=0, max_value=len(in_shape) - 1))
    in_num_col_dims = draw(
        st.integers(
            min_value=1, max_value=len(in_shape) - 1))
    assume(in_num_col_dims < start_axis + 1)
    stop_axis = draw(
        st.integers(
            min_value=start_axis, max_value=len(in_shape) - 1))
    in_mat_dims_1 = GetWeightShape0(in_shape, start_axis, stop_axis,
                                    in_num_col_dims)
    weights_1 = draw(st.integers(min_value=1, max_value=32))
    weights_0 = in_mat_dims_1
    weights_0 = in_mat_dims_1 + 4 if padding_weights else in_mat_dims_1
    bias_shape0 = weights_1 - 4 if padding_weights else weights_1
    assume(weights_0 > 0 and bias_shape0 > 0)
    weights_shape = [weights_0, weights_1]
    bias_shape = [bias_shape0]
    flatten_op = OpConfig(
        type='flatten_contiguous_range',
        inputs={"X": ["input_data_x"]},
        outputs={
            "Out": ["flatten_output_data"],
            "XShape": ["xshape_data"]
        },
        attrs={
            "data_format": 'nchw',
            "start_axis": start_axis,
            "stop_axis": stop_axis
        })
    fc_inputs = {}
    program_inputs = {}
    def generate_weights(*args, **kwargs):
        return (
            np.random.random(weights_shape).astype(np.float32) - 0.5) * 2
    def generate_bias(*args, **kwargs):
        return (np.random.random(bias_shape).astype(np.float32) - 0.5) * 2
    with_bias = draw(st.sampled_from(
        [True]))  #pass require with_bias as True
    act_type = ""
    if (with_bias and np.random.random() > 0.5):
        act_type = "relu"
    if (with_bias):
        fc_inputs = {
            "Input": ["flatten_output_data"],
            "W": ["weights_data"],
            "Bias": ["bias_data"]
        }
        program_inputs = {
            "input_data_x": TensorConfig(shape=in_shape),
            "weights_data":
            TensorConfig(data_gen=partial(generate_weights)),
            "bias_data": TensorConfig(data_gen=partial(generate_bias))
        }
    else:
        fc_inputs = {
            "Input": ["flatten_output_data"],
            "W": ["weights_data"]
        }
        program_inputs = {
            "input_data_x": TensorConfig(shape=in_shape),
            "weights_data":
            TensorConfig(data_gen=partial(generate_weights))
        }
    fc_op = OpConfig(
        type='fc',
        inputs=fc_inputs,
        outputs={"Out": ["output_data"]},
        attrs={
            "in_num_col_dims": in_num_col_dims,
            "padding_weights": padding_weights,
            "activation_type": act_type,
            "use_mkldnn": False,
            #int8 parameters
            "use_quantizer": False,
            "Scale_in": float(1),
            "Scale_weights": [float(1)],
            "Scale_out": float(1)
        })
    ops = [flatten_op, fc_op]
    program_config = ProgramConfig(
        ops=ops,
        weights={"xshape_data": TensorConfig(shape=in_shape)},
        inputs=program_inputs,
        outputs=["output_data"])
    return program_config