group Root {
    class = Root

    group DSP Benchmarks {
        class = DSPBenchmarks
        folder = DSP

        group Statistics Benchmarks {
           class = Stats
           folder = Stats

           suite Statistics Benchmarks F16 {
              class = StatsF16
              folder = StatsF16

              ParamList {
                  NB
                  Summary NB
                  Names "NB Samples"
                  Formula "NB"
              }

              Pattern INPUT1_F16_ID : InputBench1_f16.txt 
              Pattern INPUT2_F16_ID : InputBench2_f16.txt 
              
              Output  OUT_F16_ID : Output
              Output  OUT_S16_ID : Index
              Output  TMP_F16_ID : Temp

              Params PARAM1_ID = {
                  A = [16,32,64,128,256]
              }

              Functions {
                Vector maximum:test_max_f16
                Vector average:test_mean_f16
                Vector minimum:test_min_f16
                Vector energy:test_power_f16
                Vector root mean square:test_rms_f16
                Vector standard deviation:test_std_f16
                Vector variance:test_var_f16
                Entropy:test_entropy_f16
                Vector logsumexp:test_logsumexp_f16
                Kullback Leibler divergence:test_kullback_leibler_f16
                Vector logsumexp dot product:test_logsumexp_dot_prod_f16
                Vector max with no index:test_max_no_idx_f16
                Vector absolute maximum:test_absmax_f16
                Vector absolute minimum:test_absmin_f16
              } -> PARAM1_ID

           }

        }

        group Basic Maths {
           class = BasicBenchmarks
           folder = BasicMaths

           suite Basic Maths Benchmarks F16 {
              class = BasicMathsBenchmarksF16
              folder = BasicMathsF16
  
              ParamList {
                  NB
                  Summary NB
                  Names "NB Samples"
                  Formula "NB"
              }
  
              Pattern INPUT1_F16_ID : Input1_f16.txt 
              Pattern INPUT2_F16_ID : Input2_f16.txt 
              Output  OUT_SAMPLES_F16_ID : Output
              Params PARAM1_ID = {
                  A = [16,32,64,128,256]
              }
  
              Functions {
                 Elementwise multiplication:vec_mult_f16
                 Vector addition:vec_add_f16
                 Vector substraction:vec_sub_f16
                 Elementwise absolute value:vec_abs_f16
                 Elementwise negation:vec_negate_f16
                 Elementwise offset:vec_offset_f16
                 Vector scaling:vec_scale_f16
                 Dot product:vec_dot_f16
              } -> PARAM1_ID
           }

        }

        group Complex Maths {
           class = ComplexBenchmarks
           folder = ComplexMaths

           suite ComplexMaths Benchmarks F16 {
              class = ComplexMathsBenchmarksF16
              folder = ComplexMathsF16
  
              ParamList {
                  NB
                  Summary NB
                  Names "NB Samples"
                  Formula "NB"
              }
  
              Pattern INPUT1_F16_ID : Input1_f16.txt 
              Pattern INPUT2_F16_ID : Input2_f16.txt 
              Pattern INPUT3_F16_ID : Input3_f16.txt 
              Output  OUT_SAMPLES_F16_ID : Output
              Params PARAM1_ID = {
                  A = [16,32,64,128,256]
              }
  
              Functions {
                 Elementwise conjugate:vec_conj_f16
                 Complex dot product:vec_dot_prod_f16
                 Elementwise modulus:vec_mag_f16
                 Elementwise modulus squared:vec_mag_squared_f16
                 Elementwise complex multiplication:vec_mult_cmplx_f16
                 Vector scaling by real number:vec_mult_real_f16
              } -> PARAM1_ID
           }

        }

        group Filtering {
           class = DSPFiltering 
           folder = Filtering 

           group FIR {
             class = FIR 
             folder = FIR

             suite FIR F16 {
                class = FIRF16 
                folder = FIRF16

                ParamList {
                  NumTaps, NB
                  Summary NumTaps, NB
                  Names "Number of taps","Number of samples"
                  Formula "NumTaps * NB"
                }

                Pattern SAMPLES1_F16_ID : Samples1_f16.txt 
                Pattern REFS1_F16_ID : Refs1_f16.txt 
                Pattern COEFS1_F16_ID : Coefs1_f16.txt 

                Output  OUT_SAMPLES_F16_ID : Output
                Output  STATE_F16_ID : State
                Output  ERR_F16_ID : Err

                Params PARAM1_ID = {
                  NumTaps = [16,32,64]
                  NB = [64,128,256]
                }

                Functions {
                   FIR Filter:test_fir_f16
                } -> PARAM1_ID
             }

           }

           group Convolutions / Correlations {
             class = MISC 
             folder = MISC

             suite Convolutions / Correlations F16 {
                class = MISCF16 
                folder = MISCF16

                ParamList {
                  NBA, NBB
                  Summary NBA, NBB
                  Names "Number of samples A,Number of samples B"
                  Formula "NBA * NBB"
                }

                Pattern INPUTSA1_F16_ID : InputsA1_f16.txt 
                Pattern INPUTSB1_F16_ID : InputsB1_f16.txt 

                Output  OUT_SAMPLES_F16_ID : Output

                Params PARAM1_ID = {
                  NBA = [9,16,64]
                  NBB = [9,16,128]
                }

                Functions {
                   disabled{Convolution:test_conv_f16}
                   Correlation:test_correlate_f16
                } -> PARAM1_ID
              }


           }


           group BiQuads {
             class = BIQUAD 
             folder = BIQUAD

             suite BiQuads F16 {
                class = BIQUADF16 
                folder = BIQUADF16

                ParamList {
                  NumStages, NB
                  Summary NumStages, NB
                  Names "Number of stages","Number of samples"
                  Formula "NumStages * NB"
                }

                Pattern SAMPLES1_F16_ID : Samples1_f16.txt 
                Pattern COEFS1_F16_ID : Coefs1_f16.txt 

                Output  OUT_SAMPLES_F16_ID : Output
                Output  STATE_F16_ID : State
                Output  NEON_COEFS_F16_ID : NeonCoefs

                Params PARAM1_ID = {
                  NumStages = [1,2,4]
                  NB = [16,128,256]
                }

                Functions {
                   Cascaded BiQuad Filter DF1:test_biquad_cascade_df1_f16
                   Cascaded BiQuad Filter DF2T:test_biquad_cascade_df2T_f16
                   Cascaded BiQuad Filter Stereo DF2T:test_biquad_cascade_stereo_df2T_f16
                } -> PARAM1_ID
              }

           }
        }

        group Fast Maths {
           class = FastMath 
           folder = FastMath 

           suite Fast Maths F16 {
                class = FastMathF16 
                folder = FastMathF16

                ParamList {
                  NB
                  Summary NB
                  Names "Number of samples"
                  Formula "NB"
                }

                Pattern SAMPLES_F16_ID : Samples1_f16.txt 
                Output  OUT_SAMPLES_F16_ID : Output

                Params PARAM1_ID = {
                  NB = [64,128,256]
                }

                Functions {
                   disabled{Cosine:test_cos_f16}
                   disabled{Sine:test_sin_f16}
                   Square Root:test_sqrt_f16
                } -> PARAM1_ID
             }

        }

        group Bayes{
           class = Bayes
           folder = Bayes 

           suite Bayes F16 {
              class = BayesF16
              folder = BayesF16

              ParamList {
                  VECDIM,NBCLASSES
                  Summary VECDIM,NBCLASSES
                  Names "Vector dimension","Number of classes"
                  Formula "VECDIM*NBCLASSES"
                }

              Pattern DIMS2_S16_ID : DimsBench2_s16.txt 
              Pattern INPUTS2_F16_ID : Inputs2_f16.txt 
              Pattern PARAMS2_F16_ID : Params2_f16.txt 
              Pattern PREDICTS2_S16_ID : Predicts2_s16.txt

              Output  OUT_PROBA_F16_ID : Probas
              Output  OUT_PREDICT_S16_ID : Predicts

              // Must be consistent with the Python script
              Params PARAM1_ID = {
                  VECDIM = [12,14,20]
                  NBCLASSES = [3,5,4]
                }

              Functions {
                 Naive Gaussian Bayes Predictor:test_gaussian_naive_bayes_predict_f16
              } -> PARAM1_ID
           }
        }

        group Distance  {
           class = Distance
           folder = Distance

           suite Distance F16 {
              class = DistanceF16
              folder = DistanceF16

              ParamList {
                  NB
                  Summary NB
                  Names "NB Samples"
                  Formula "NB"
              }
              
              Pattern INPUTA_F16_ID : InputBenchA1_f16.txt
              Pattern INPUTB_F16_ID : InputBenchB1_f16.txt

              Pattern INPUTA_PROBA_F16_ID : InputBenchProbaA1_f16.txt
              Pattern INPUTB_PROBA_F16_ID : InputBenchProbaB1_f16.txt

              Output  TMPA_F16_ID : TmpA
              Output  TMPB_F16_ID : TmpB

              Params PARAM1_ID = {
                  NB = [16,32,64,128,256]
              }

              Functions {
                 Bray Curtis distance:test_braycurtis_distance_f16
                 Canberra distance:test_canberra_distance_f16
                 Chebyshev distance:test_chebyshev_distance_f16
                 Cityblock distance:test_cityblock_distance_f16
                 Correlation distance:test_correlation_distance_f16
                 Cosine distance:test_cosine_distance_f16
                 Euclidean distance:test_euclidean_distance_f16
                 Jensen Shannon distance:test_jensenshannon_distance_f16
                 Minkowski distance:test_minkowski_distance_f16
              } -> PARAM1_ID
           }

        }

        group SVM  {
           class = SVM
           folder = SVM 

           suite SVM F16 {
              class = SVMF16
              folder = SVMF16

              ParamList {
                  VECDIM,NBVECS
                  Summary VECDIM,NBVECS
                  Names "Vector dimension","Number of suppot vectors"
                  Formula "VECDIM*NBVECS"
              }

              Pattern INPUT_F16_ID : InputsBench6_f16.txt 
              
              Pattern DIMS_LINEAR_S16_ID : DimsLinear6_s16.txt 
              Pattern PARAMS_LINEAR_F16_ID : ParamsLinear6_f16.txt

              Pattern DIMS_POLY_S16_ID : DimsPoly6_s16.txt 
              Pattern PARAMS_POLY_F16_ID : ParamsPoly6_f16.txt

              Pattern DIMS_RBF_S16_ID : DimsRBF6_s16.txt 
              Pattern PARAMS_RBF_F16_ID : ParamsRBF6_f16.txt

              Pattern DIMS_SIGMOID_S16_ID : DimsSigmoid6_s16.txt 
              Pattern PARAMS_SIGMOID_F16_ID : ParamsSigmoid6_f16.txt

              Output  OUT_S32_ID : Output

              // Must be consistent with the Python script
              Params PARAM1_ID = {
                  VECDIM = [16,32,64]
                  NBVECS = [8,16,32]
                }

              Functions {
                 Linear SVM:test_svm_linear_predict_f16
                 Polynomial SVM:test_svm_polynomial_predict_f16
                 RBF SVM:test_svm_rbf_predict_f16
                 Sigmoid SVM:test_svm_sigmoid_predict_f16
              } -> PARAM1_ID
           }
        }

        group Barycenter {
           class = Barycenter 
           
           suite Barycenter {
                class = SupportBarF16 
                folder = SupportBarF16

                ParamList {
                  NB,VECDIM
                  Summary NB,VECDIM
                  Names "Number of samples","Vector dimension"
                  Formula "NB*VECDIM"
                }

                Pattern SAMPLES_F16_ID : Samples1_f16.txt 
                Pattern COEFS_F16_ID : Coefs1_f16.txt 
                Output  OUT_SAMPLES_F16_ID : Output

                Params PARAM1_ID = {
                  NB = [16,64,128]
                  VECDIM = [5,10,15]
                }

                Functions {
                   Barycenter:test_barycenter_f16
                } -> PARAM1_ID
   
           }

        }

        group Support Functions {
           class = Support 
           folder = Support 

           suite Support Functions F16 {
                class = SupportF16 
                folder = SupportF16

                ParamList {
                  NB
                  Summary NB
                  Names "Number of samples"
                  Formula "NB"
                }

                Pattern SAMPLES_F32_ID : Samples1_f32.txt 
                Pattern SAMPLES_F16_ID : Samples11_f16.txt 
                Pattern SAMPLES_Q15_ID : Samples3_q15.txt 

                Pattern INPUTS6_F16_ID : Inputs6_f16.txt 
                Pattern WEIGHTS6_F16_ID : Weights6_f16.txt 
                Pattern REF6_F16_ID : Ref6_f16.txt

                Output  OUT_SAMPLES_F16_ID : Output

                Params PARAM1_ID = {
                  NB = [64,128,256]
                }

                Functions {
                   Vector Copy:test_copy_f16
                   Vector Filling:test_fill_f16
                   Elementwise q15 to f16:test_q15_to_f16
                   Elementwise f32 to f16:test_f32_to_f16
                   Weighted sum:test_weighted_sum_f16
                } -> PARAM1_ID
             }

        }

        group Matrix {
           class = Matrix 
           folder = Matrix 

           group Matrix Operators with one matrix size {
              class = Unary 
              folder = Unary 

              suite Unary Matrix Operators F16 {
                class = UnaryF16 
                folder = UnaryF16

                ParamList {
                  NBR,NBC
                  Summary NBR,NBC
                  Names "Number of rows","Number of columns"
                  Formula "NBR*NBC"
                }

                Pattern INPUTA_F16_ID : InputA1_f16.txt 
                Pattern INPUTAC_F16_ID : InputAC1_f16.txt 
                Pattern INPUTVEC1_F16_ID : InputVec1_f16.txt 

                Pattern DIMSCHOLESKY1_DPO_S16_ID : DimsCholeskyDPO1_s16.txt 
                Pattern DIMSCHOLESKY1_SDPO_S16_ID : DimsCholeskySDPO1_s16.txt 
                Pattern INPUTSCHOLESKY1_DPO_F16_ID : InputCholeskyDPO1_f16.txt 
                Pattern INPUTSCHOLESKY1_SDPO_F16_ID : InputCholeskySDPO1_f16.txt 

                Pattern REFCHOLESKY1_DPO_F16_ID : RefCholeskyDPO1_f16.txt

                Pattern REFLDLT_D_DPO1_F16_ID : RefLDLT_D_DPO1_f16.txt
                Pattern REFLDLT_LL_DPO1_F16_ID : RefLDLT_LL_DPO1_f16.txt
                Pattern REFLDLT_PERM_DPO1_F16_ID : RefLDLT_PERM_DPO1_s16.txt

                Pattern REFLDLT_D_SDPO1_F16_ID : RefLDLT_D_SDPO1_f16.txt
                Pattern REFLDLT_LL_SDPO1_F16_ID : RefLDLT_LL_SDPO1_f16.txt
                Pattern REFLDLT_PERM_SDPO1_F16_ID : RefLDLT_PERM_SDPO1_s16.txt

                Pattern INPUT_UT_DPO_F16_ID : InputUTDPO1_f16.txt
                Pattern INPUT_LT_DPO_F16_ID : InputLTDPO1_f16.txt
                Pattern INPUT_RNDA_DPO_F16_ID : InputRNDA1_f16.txt
            
                Pattern REF_UTINV_DPO_F16_ID : Ref_UTINV_DPO1_f16.txt
                Pattern REF_LTINV_DPO_F16_ID : Ref_LTINV_DPO1_f16.txt
                Pattern REF_CHOLINV_DPO_F16_ID : Ref_CHOLINV_DPO1_f16.txt

                Output  TMPA_F16_ID : TempA
                Output  TMPB_F16_ID : TempB
                Output  OUT_F16_ID : Output

                Params PARAM1_ID = {
                  NBR = [5,10,40]
                  NBC = [5,10,40]
                }

                Params PARAM_CHOLESKY_ID : ParamsCholesky1.txt

                Functions {
                   Matrix Scaling:test_mat_scale_f16
                   Matrix Inversion:test_mat_inverse_f16
                   Matrix Transpose:test_mat_trans_f16
                   Matrix Addition:test_mat_add_f16
                   Matrix Substraction:test_mat_sub_f16
                   Matrix Vector Multiplication:test_mat_vec_mult_f16
                   Matrix Complex Transpose:test_mat_cmplx_trans_f16
                   Cholesky decomposition:test_mat_cholesky_dpo_f16 -> PARAM_CHOLESKY_ID
                   Backward substitution:test_solve_upper_triangular_f16 -> PARAM_CHOLESKY_ID
                   Foward substitution:test_solve_lower_triangular_f16 -> PARAM_CHOLESKY_ID
                } -> PARAM1_ID
              }

           }

           group Matrix Operators with two matrix sizes {
              class = Binary 
              folder = Binary 

             suite Binary Matrix Operators F16 {
                class = BinaryF16 
                folder = BinaryF16

                ParamList {
                  NBR,NBI,NBC
                  Summary NBR,NBI,NBC
                  Names "Number of rows","Inner dimensions","Number of columns"
                  Formula "NBR*NBI*NBC"
                }

                Pattern INPUTA_F16_ID : InputA1_f16.txt 
                Pattern INPUTB_F16_ID : InputB1_f16.txt 

                Pattern INPUTAC_F16_ID : InputAC1_f16.txt 
                Pattern INPUTBC_F16_ID : InputBC1_f16.txt 
                Output  OUT_F16_ID : Output

                Params PARAM1_ID = {
                  NBR = [5,10,40]
                  NBI = [5,10,40]
                  NBC = [5,10,40]
                }


                Functions {
                   Matrix Multiplication:test_mat_mult_f16
                   Complex Matrix Multiplication:test_mat_cmplx_mult_f16
                } -> PARAM1_ID
             }
           }
        }

        group Spectral Transformations {
           class = Transform 
           folder = Transform 

           suite Spectral Transformations F16 {
                class = TransformF16 
                folder = TransformF16

                ParamList {
                  NB,IFFT,BITREV
                  Summary NB
                  Names "Number of samples,Inverse FFT, Bit Reversal"
                  Formula "I(NB*log2(NB))"
                }

                Pattern INPUTR_F16_ID : RealInputSamples19_f16.txt 
                Pattern INPUTC_F16_ID : ComplexInputSamples_Noisy_512_6_f16.txt 
                
                Output  OUT_F16_ID : Temp
                Output  TMP_F16_ID : Output
                Output  STATE_F16_ID : Output

                
                Params CFFT_PARAM_ID = {
                  NB = [64,128,256]
                  IFFT = [0,1]
                  REV = [0,1]
                }
 
                Params CFFT4_PARAM_ID = {
                  NB = [16,64,256]
                  IFFT = [0,1]
                  REV = [0,1]
                }

                Params RFFT_PARAM_ID = {
                  NB = [64,128,256]
                  IFFT = [0,1]
                  REV = [1]
                }

   

                Functions {
                   Complex FFT:test_cfft_f16 -> CFFT_PARAM_ID
                   Real FFT:test_rfft_f16 -> RFFT_PARAM_ID
                   Scalar Radix 4 Complex FFT:test_cfft_radix4_f16 -> CFFT4_PARAM_ID
                   Scalar Radix 2 Complex FFT:test_cfft_radix2_f16 -> CFFT_PARAM_ID
                }
           }

        }

    }


}
