def generate_filter_code_for_feature(feature, search_time=2):
    goal, scaling = generate_centre_goal_for_feature(feature)

    program, program_length, sol_stats = generate(
        goal,
        search_time,
        available_regs=['C', 'D', 'E'],
        out_format='CSIM',
        start_reg='A',
        target_reg='C',
        verbose=0,
        approx_depth=20,
        max_approx_coeffs=1)
    return program, scaling
#################################################
# Generate the 3 convolutions (first and only layer)
# with all registers as available (outputs during computations)
#################################################
# Generate CSIM code, with all registers available
start_register = ['A', 'A', 'A']
available_registers = [['B', 'C', 'D', 'E'], ['B', 'C', 'D', 'E'],
                       ['B', 'C', 'D', 'E']]
filename_prefix = '_out_conv_'

for k in range(3):
    csimProgram, _, _ = generate(kernels[k],
                                 search_time,
                                 start_reg=start_register[k],
                                 target_reg=start_register[k],
                                 available_regs=[start_register[k]] +
                                 available_registers[k],
                                 verbose=0,
                                 out_format='CSIM',
                                 approx_depth=approx_depth,
                                 pair_props=pair_props)
    scamp5Program = csim_to_scamp5(csimProgram)

    # Output to files
    with open(filename_prefix + str(k + 1) + '.txt', 'w') as f:
        for l in scamp5Program:
            f.write(l + '\n')

#################################################
# Generate the 3 convolutions with incrementally less registers
#################################################
# Generate CSIM code, with all registers available
#     [0.513, 0.131, 0.634]
# ])

# filter = np.array([
#     [0.25, 0.0, 0.5],
#     [0.75, 0.0, 0.5],
#     [0.5, 0.25, 0.75]
# ])


start_reg = 'A'
target_reg = 'A'
available_regs = ['A', 'B', 'C']

search_time = 3
approx_depth = 4

# the format can be any of
# APRON: A modified format for the APRON simulator.
# CSIM: A C format for the cpa-sim simulator

# set verbosity to 10 to output filter graph representations. Requires pygraphviz.
program, program_length, sol_stats = generate(filter, search_time,
                          start_reg=start_reg,
                          target_reg=target_reg,
                          available_regs=available_regs,
                          verbose=9,
                          out_format='APRON',
                          approx_depth=approx_depth,
                          pair_props=pair_props)