 }
 
 
-void update_state_using_previous_layers_sparse(elina_manager_t* man, fppoly_t* fp, const size_t layerno, const bool use_area_heuristic)
+void update_state_using_previous_layers_sparse(elina_manager_t* man, fppoly_t* fp, const size_t layerno, const bool use_area_heuristic, const bool retain_training_data)
 {
     const size_t num_chunks = predict_size(fp, layerno);
 
     for(size_t chunk_counter = 0; chunk_counter < num_chunks; chunk_counter++)
     {
-        update_state_using_previous_layers_sparse(man, fp, fp->numlayers - 1, num_chunks, chunk_counter, use_area_heuristic);
+        update_state_using_previous_layers_sparse(man, fp, fp->numlayers - 1, num_chunks, chunk_counter, use_area_heuristic, retain_training_data);
     }
 }
 

        layer_compute_bounds_from_exprs_conv<<<dim3(fp->layers[0]->output_size[0], fp->layers[0]->output_size[1], fp->layers[0]->output_size[2]), 1>>>(fp->layers[0]->filter_weights, fp->layers[0]->filter_bias, fp->layers[0]->lb_array, fp->layers[0]->ub_array, fp->input_inf, fp->input_sup, fp->layers[0]->output_size[0], fp->layers[0]->output_size[1], fp->layers[0]->output_size[2], fp->layers[0]->input_size[0], fp->layers[0]->input_size[1], fp->layers[0]->input_size[2], fp->layers[0]->filter_size[0], fp->layers[0]->filter_size[1], fp->layers[0]->strides[0], fp->layers[0]->strides[1], fp->layers[0]->pad[0], fp->layers[0]->pad[1]);
    }

    if(retain_bounds)
    {
        const int num_out_neurons_0_layer = fp->layers[0]->num_out_neurons;


const size_t maximum_backstep = 2;

const size_t num_threads = 256;

#define FULL_MASK 0xffffffff

