CMSIS-DSP: Added missing functions to the Python wrapper

Changed the version of Jinja2 required by the wrapper to avoid warnings
when using google colab.
diff --git a/CMSIS/DSP/setup.py b/CMSIS/DSP/setup.py
index 1103cd8..8d7cca8 100644
--- a/CMSIS/DSP/setup.py
+++ b/CMSIS/DSP/setup.py
@@ -107,13 +107,27 @@
 except:
   pass
 
-#distance = glob.glob(os.path.join(ROOT,"Source","DistanceFunctions","*.c"))
-#distance.remove(os.path.join(ROOT,"Source","DistanceFunctions","DistanceFunctions.c"))
+distance = glob.glob(os.path.join(ROOT,"Source","DistanceFunctions","*.c"))
+try:
+  distance.remove(os.path.join(ROOT,"Source","DistanceFunctions","DistanceFunctions.c"))
+except:
+  pass
 
+bayes = glob.glob(os.path.join(ROOT,"Source","BayesFunctions","*.c"))
+try:
+  bayes.remove(os.path.join(ROOT,"Source","BayesFunctions","BayesFunctions.c"))
+except:
+  pass
+
+svm = glob.glob(os.path.join(ROOT,"Source","SVMFunctions","*.c"))
+try:
+  svm.remove(os.path.join(ROOT,"Source","SVMFunctions","SVMFunctions.c"))
+except:
+  pass
 
 # Add dependencies
 transformMod = transform + common + basic + complexf + fastmath + matrix + statistics
-statisticsMod = statistics + common + fastmath
+statisticsMod = statistics + common + fastmath + basic
 interpolationMod = interpolation + common
 filteringMod = filtering + common + support + fastmath
 controllerMod = controller + common
@@ -124,6 +138,9 @@
 basicMod = basic
 quaternionMod = quaternion
 fastmathMod = fastmath + common
+distanceMod = distance + common + basic + statistics + fastmath
+bayesMod = bayes + fastmath + common + statistics + basic
+svmMod = svm + fastmath + common
 
 
 filteringMod.append(os.path.join("PythonWrapper","cmsisdsp_pkg","src","cmsisdsp_filtering.c"))
@@ -137,104 +154,14 @@
 interpolationMod.append(os.path.join("PythonWrapper","cmsisdsp_pkg","src","cmsisdsp_interpolation.c"))
 quaternionMod.append(os.path.join("PythonWrapper","cmsisdsp_pkg","src","cmsisdsp_quaternion.c"))
 fastmathMod.append(os.path.join("PythonWrapper","cmsisdsp_pkg","src","cmsisdsp_fastmath.c"))
+distanceMod.append(os.path.join("PythonWrapper","cmsisdsp_pkg","src","cmsisdsp_distance.c"))
+bayesMod.append(os.path.join("PythonWrapper","cmsisdsp_pkg","src","cmsisdsp_bayes.c"))
+svmMod.append(os.path.join("PythonWrapper","cmsisdsp_pkg","src","cmsisdsp_svm.c"))
 
 
 
 
-missing=set(["arm_abs_f64"
-,"arm_absmax_f64"
-,"arm_absmax_no_idx_f32"
-,"arm_absmax_no_idx_f64"
-,"arm_absmin_f64"
-,"arm_absmin_no_idx_f32"
-,"arm_absmin_no_idx_f64"
-,"arm_add_f64"
-,"arm_barycenter_f32"
-,"arm_braycurtis_distance_f32"
-,"arm_canberra_distance_f32"
-,"arm_chebyshev_distance_f32"
-,"arm_chebyshev_distance_f64"
-,"arm_circularRead_f32"
-,"arm_cityblock_distance_f32"
-,"arm_cityblock_distance_f64"
-,"arm_cmplx_mag_f64"
-,"arm_cmplx_mag_squared_f64"
-,"arm_cmplx_mult_cmplx_f64"
-,"arm_copy_f64"
-,"arm_correlate_f64"
-,"arm_correlation_distance_f32"
-,"arm_cosine_distance_f32"
-,"arm_cosine_distance_f64"
-,"arm_dot_prod_f64"
-,"arm_entropy_f32"
-,"arm_entropy_f64"
-,"arm_euclidean_distance_f32"
-,"arm_euclidean_distance_f64"
-,"arm_exponent_f32"
-,"arm_fill_f64"
-,"arm_fir_f64"
-,"arm_fir_init_f64"
-,"arm_gaussian_naive_bayes_predict_f32"
-,"arm_jensenshannon_distance_f32"
-,"arm_kullback_leibler_f32"
-,"arm_kullback_leibler_f64"
-,"arm_logsumexp_dot_prod_f32"
-,"arm_logsumexp_f32"
-,"arm_mat_cholesky_f32"
-,"arm_mat_cholesky_f64"
-,"arm_mat_init_f32"
-,"arm_mat_ldlt_f32"
-,"arm_mat_ldlt_f64"
-,"arm_mat_mult_f64"
-,"arm_mat_solve_lower_triangular_f32"
-,"arm_mat_solve_lower_triangular_f64"
-,"arm_mat_solve_upper_triangular_f32"
-,"arm_mat_solve_upper_triangular_f64"
-,"arm_mat_sub_f64"
-,"arm_mat_trans_f64"
-,"arm_max_f64"
-,"arm_max_no_idx_f32"
-,"arm_max_no_idx_f64"
-,"arm_mean_f64"
-,"arm_merge_sort_f32"
-,"arm_merge_sort_init_f32"
-,"arm_min_f64"
-,"arm_min_no_idx_f32"
-,"arm_min_no_idx_f64"
-,"arm_minkowski_distance_f32"
-,"arm_mult_f64"
-,"arm_negate_f64"
-,"arm_offset_f64"
-,"arm_power_f64"
-,"arm_scale_f64"
-,"arm_sort_f32"
-,"arm_sort_init_f32"
-,"arm_spline_f32"
-,"arm_spline_init_f32"
-,"arm_std_f64"
-,"arm_sub_f64"
-,"arm_svm_linear_init_f32"
-,"arm_svm_linear_predict_f32"
-,"arm_svm_polynomial_init_f32"
-,"arm_svm_polynomial_predict_f32"
-,"arm_svm_rbf_init_f32"
-,"arm_svm_rbf_predict_f32"
-,"arm_svm_sigmoid_init_f32"
-,"arm_svm_sigmoid_predict_f32"
-,"arm_var_f64"
-,"arm_vexp_f32"
-,"arm_vexp_f64"
-,"arm_vlog_f64"
-,"arm_vsqrt_f32"
-,"arm_weighted_sum_f32"
-,"arm_circularRead_q15"
-,"arm_circularRead_q7"
-,"arm_div_q63_to_q31"
-,"arm_fir_sparse_q15"
-,"arm_fir_sparse_q31"
-,"arm_fir_sparse_q7"
-,"arm_mat_init_q15"
-,"arm_mat_init_q31"
+missing=set([
   ])
 
 def notf16(number):
@@ -264,31 +191,42 @@
 interpolation = list(filter(isnotmissing,list(filter(notf16, interpolationMod))))
 quaternion = list(filter(isnotmissing,list(filter(notf16, quaternionMod))))
 fastmath = list(filter(isnotmissing,list(filter(notf16, fastmathMod))))
+distance = list(filter(isnotmissing,list(filter(notf16, distanceMod))))
+bayes = list(filter(isnotmissing,list(filter(notf16, bayesMod))))
+svm = list(filter(isnotmissing,list(filter(notf16, svmMod))))
 
 #for l in filtering:
 #  print(os.path.basename(l))
 #quit()
 
-def mkModule(name,srcs):
+def mkModule(name,srcs,funcDir,newCflags=[]):
+  localinc = os.path.join(ROOT,"Source",funcDir)
   return(Extension(name,
                     sources = (srcs
                               )
                               ,
-                    include_dirs =  includes + [numpy.get_include()],
-                    extra_compile_args = cflags
+                    include_dirs =  [localinc] + includes + [numpy.get_include()],
+                    extra_compile_args = cflags + newCflags
                               ))
 
-moduleFiltering = mkModule('cmsisdsp_filtering',filtering)
-moduleMatrix = mkModule('cmsisdsp_matrix',matrix)
-moduleSupport = mkModule('cmsisdsp_support',support)
-moduleStatistics = mkModule('cmsisdsp_statistics',statistics)
-moduleComplexf= mkModule('cmsisdsp_complexf',complexf)
-moduleBasic = mkModule('cmsisdsp_basic',basic)
-moduleController = mkModule('cmsisdsp_controller',controller)
-moduleTransform = mkModule('cmsisdsp_transform',transform)
-moduleInterpolation = mkModule('cmsisdsp_interpolation',interpolation)
-moduleQuaternion = mkModule('cmsisdsp_quaternion',quaternion)
-moduleFastmath = mkModule('cmsisdsp_fastmath',fastmath)
+flagsForCommonWithoutFFT=["-DARM_DSP_CONFIG_TABLES", 
+    "-DARM_FAST_ALLOW_TABLES", 
+    "-DARM_ALL_FAST_TABLES"]
+
+moduleFiltering = mkModule('cmsisdsp_filtering',filtering,"FilteringFunctions",flagsForCommonWithoutFFT)
+moduleMatrix = mkModule('cmsisdsp_matrix',matrix,"MatrixFunctions")
+moduleSupport = mkModule('cmsisdsp_support',support,"SupportFunctions")
+moduleStatistics = mkModule('cmsisdsp_statistics',statistics,"StatisticsFunctions",flagsForCommonWithoutFFT)
+moduleComplexf= mkModule('cmsisdsp_complexf',complexf,"ComplexMathFunctions")
+moduleBasic = mkModule('cmsisdsp_basic',basic,"BasicMathFunctions")
+moduleController = mkModule('cmsisdsp_controller',controller,"ControllerFunctions",flagsForCommonWithoutFFT)
+moduleTransform = mkModule('cmsisdsp_transform',transform,"TransformFunctions")
+moduleInterpolation = mkModule('cmsisdsp_interpolation',interpolation,"InterpolationFunctions",flagsForCommonWithoutFFT)
+moduleQuaternion = mkModule('cmsisdsp_quaternion',quaternion,"QuaternionMathFunctions")
+moduleFastmath = mkModule('cmsisdsp_fastmath',fastmath,"FastMathFunctions",flagsForCommonWithoutFFT)
+moduleDistance = mkModule('cmsisdsp_distance',distance,"DistanceFunctions",flagsForCommonWithoutFFT)
+moduleBayes = mkModule('cmsisdsp_bayes',bayes,"BayesFunctions",flagsForCommonWithoutFFT)
+moduleSVM = mkModule('cmsisdsp_svm',svm,"SVMFunctions",flagsForCommonWithoutFFT)
 
 
 
@@ -319,7 +257,10 @@
                         moduleTransform,
                         moduleInterpolation, 
                         moduleQuaternion,
-                        moduleFastmath
+                        moduleFastmath,
+                        moduleDistance,
+                        moduleBayes,
+                        moduleSVM
                         ],
          include_package_data=True,
          author = 'Copyright (C) 2010-2022 ARM Limited or its affiliates. All rights reserved.',
@@ -343,8 +284,10 @@
           keywords=['development','dsp','cmsis','cmsis-dsp','Arm','signal processing','maths'],
           install_requires=['numpy>=1.19',
           'networkx>=2.5',
-          'jinja2>= 3.0',
-          'sympy>=1.6'],
+          'jinja2>= 2.0, <3.0',
+          'sympy>=1.6',
+          'markupsafe<2.1'
+          ],
           project_urls={  # Optional
              'Bug Reports': 'https://github.com/ARM-software/CMSIS_5/issues',
              'Source': 'https://github.com/ARM-software/CMSIS_5/tree/develop/CMSIS/DSP',