From fad32de9c3df04a8fb032f9c604c79c89d062154 Mon Sep 17 00:00:00 2001
From: siddhu8990
Date: Tue, 20 Jun 2017 15:26:40 +0530
Subject: Bug fixed for GSL library
---
macros/ASTManagement/lib | 4 +-
macros/CCodeGeneration/C_GenerateMakefile.sci | 19 +
macros/CCodeGeneration/lib | 2 +-
.../ToolInitialization/INIT_FillSCI2LibCDirs.sci | 25 +-
macros/ToolInitialization/lib | 2 +-
macros/findDeps/getAllHeaders.sci | 4 +
macros/findDeps/lib | 2 +-
src/c/CACSD/includes/lqr.h | 2 +-
src/c/CACSD/interfaces/int_lqr.h | 9 +-
src/c/CACSD/lqe/dlqea.c | 2 +-
src/c/CACSD/lqr/dlqra.c | 42 +-
thirdparty/includes/GSL/gsl/gsl_blas.h | 602 +++++++++++++++++++
thirdparty/includes/GSL/gsl/gsl_blas_types.h | 54 ++
thirdparty/includes/GSL/gsl/gsl_block.h | 24 +
thirdparty/includes/GSL/gsl/gsl_block_char.h | 65 +++
.../includes/GSL/gsl/gsl_block_complex_double.h | 65 +++
.../includes/GSL/gsl/gsl_block_complex_float.h | 65 +++
.../GSL/gsl/gsl_block_complex_long_double.h | 65 +++
thirdparty/includes/GSL/gsl/gsl_block_double.h | 65 +++
thirdparty/includes/GSL/gsl/gsl_block_float.h | 65 +++
thirdparty/includes/GSL/gsl/gsl_block_int.h | 65 +++
thirdparty/includes/GSL/gsl/gsl_block_long.h | 65 +++
.../includes/GSL/gsl/gsl_block_long_double.h | 65 +++
thirdparty/includes/GSL/gsl/gsl_block_short.h | 65 +++
thirdparty/includes/GSL/gsl/gsl_block_uchar.h | 65 +++
thirdparty/includes/GSL/gsl/gsl_block_uint.h | 65 +++
thirdparty/includes/GSL/gsl/gsl_block_ulong.h | 65 +++
thirdparty/includes/GSL/gsl/gsl_block_ushort.h | 65 +++
thirdparty/includes/GSL/gsl/gsl_bspline.h | 122 ++++
thirdparty/includes/GSL/gsl/gsl_cblas.h | 606 +++++++++++++++++++
thirdparty/includes/GSL/gsl/gsl_cdf.h | 170 ++++++
thirdparty/includes/GSL/gsl/gsl_chebyshev.h | 133 +++++
thirdparty/includes/GSL/gsl/gsl_check_range.h | 57 ++
thirdparty/includes/GSL/gsl/gsl_combination.h | 92 +++
thirdparty/includes/GSL/gsl/gsl_complex.h | 103 ++++
thirdparty/includes/GSL/gsl/gsl_complex_math.h | 142 +++++
thirdparty/includes/GSL/gsl/gsl_const.h | 31 +
thirdparty/includes/GSL/gsl/gsl_const_cgs.h | 116 ++++
thirdparty/includes/GSL/gsl/gsl_const_cgsm.h | 122 ++++
thirdparty/includes/GSL/gsl/gsl_const_mks.h | 126 ++++
thirdparty/includes/GSL/gsl/gsl_const_mksa.h | 126 ++++
thirdparty/includes/GSL/gsl/gsl_const_num.h | 43 ++
thirdparty/includes/GSL/gsl/gsl_deriv.h | 50 ++
thirdparty/includes/GSL/gsl/gsl_dft_complex.h | 55 ++
.../includes/GSL/gsl/gsl_dft_complex_float.h | 55 ++
thirdparty/includes/GSL/gsl/gsl_dht.h | 87 +++
thirdparty/includes/GSL/gsl/gsl_diff.h | 52 ++
thirdparty/includes/GSL/gsl/gsl_eigen.h | 347 +++++++++++
thirdparty/includes/GSL/gsl/gsl_errno.h | 154 +++++
thirdparty/includes/GSL/gsl/gsl_fft.h | 51 ++
thirdparty/includes/GSL/gsl/gsl_fft_complex.h | 136 +++++
.../includes/GSL/gsl/gsl_fft_complex_float.h | 139 +++++
thirdparty/includes/GSL/gsl/gsl_fft_halfcomplex.h | 86 +++
.../includes/GSL/gsl/gsl_fft_halfcomplex_float.h | 86 +++
thirdparty/includes/GSL/gsl/gsl_fft_real.h | 80 +++
thirdparty/includes/GSL/gsl/gsl_fft_real_float.h | 79 +++
thirdparty/includes/GSL/gsl/gsl_fit.h | 85 +++
thirdparty/includes/GSL/gsl/gsl_heapsort.h | 44 ++
thirdparty/includes/GSL/gsl/gsl_histogram.h | 134 +++++
thirdparty/includes/GSL/gsl/gsl_histogram2d.h | 172 ++++++
thirdparty/includes/GSL/gsl/gsl_ieee_utils.h | 99 ++++
thirdparty/includes/GSL/gsl/gsl_inline.h | 67 +++
thirdparty/includes/GSL/gsl/gsl_integration.h | 323 ++++++++++
thirdparty/includes/GSL/gsl/gsl_interp.h | 225 +++++++
thirdparty/includes/GSL/gsl/gsl_interp2d.h | 160 +++++
thirdparty/includes/GSL/gsl/gsl_linalg.h | 650 +++++++++++++++++++++
thirdparty/includes/GSL/gsl/gsl_machine.h | 104 ++++
thirdparty/includes/GSL/gsl/gsl_math.h | 164 ++++++
thirdparty/includes/GSL/gsl/gsl_matrix.h | 25 +
thirdparty/includes/GSL/gsl/gsl_matrix_char.h | 350 +++++++++++
.../includes/GSL/gsl/gsl_matrix_complex_double.h | 351 +++++++++++
.../includes/GSL/gsl/gsl_matrix_complex_float.h | 351 +++++++++++
.../GSL/gsl/gsl_matrix_complex_long_double.h | 351 +++++++++++
thirdparty/includes/GSL/gsl/gsl_matrix_double.h | 350 +++++++++++
thirdparty/includes/GSL/gsl/gsl_matrix_float.h | 350 +++++++++++
thirdparty/includes/GSL/gsl/gsl_matrix_int.h | 350 +++++++++++
thirdparty/includes/GSL/gsl/gsl_matrix_long.h | 350 +++++++++++
.../includes/GSL/gsl/gsl_matrix_long_double.h | 350 +++++++++++
thirdparty/includes/GSL/gsl/gsl_matrix_short.h | 350 +++++++++++
thirdparty/includes/GSL/gsl/gsl_matrix_uchar.h | 350 +++++++++++
thirdparty/includes/GSL/gsl/gsl_matrix_uint.h | 350 +++++++++++
thirdparty/includes/GSL/gsl/gsl_matrix_ulong.h | 350 +++++++++++
thirdparty/includes/GSL/gsl/gsl_matrix_ushort.h | 350 +++++++++++
thirdparty/includes/GSL/gsl/gsl_message.h | 80 +++
thirdparty/includes/GSL/gsl/gsl_min.h | 111 ++++
thirdparty/includes/GSL/gsl/gsl_minmax.h | 102 ++++
thirdparty/includes/GSL/gsl/gsl_mode.h | 88 +++
thirdparty/includes/GSL/gsl/gsl_monte.h | 55 ++
thirdparty/includes/GSL/gsl/gsl_monte_miser.h | 97 +++
thirdparty/includes/GSL/gsl/gsl_monte_plain.h | 65 +++
thirdparty/includes/GSL/gsl/gsl_monte_vegas.h | 125 ++++
thirdparty/includes/GSL/gsl/gsl_multifit.h | 319 ++++++++++
thirdparty/includes/GSL/gsl/gsl_multifit_nlin.h | 275 +++++++++
thirdparty/includes/GSL/gsl/gsl_multilarge.h | 141 +++++
thirdparty/includes/GSL/gsl/gsl_multimin.h | 226 +++++++
thirdparty/includes/GSL/gsl/gsl_multiroots.h | 177 ++++++
thirdparty/includes/GSL/gsl/gsl_multiset.h | 93 +++
thirdparty/includes/GSL/gsl/gsl_nan.h | 45 ++
thirdparty/includes/GSL/gsl/gsl_ntuple.h | 82 +++
thirdparty/includes/GSL/gsl/gsl_odeiv.h | 230 ++++++++
thirdparty/includes/GSL/gsl/gsl_odeiv2.h | 333 +++++++++++
thirdparty/includes/GSL/gsl/gsl_permutation.h | 100 ++++
thirdparty/includes/GSL/gsl/gsl_permute.h | 24 +
thirdparty/includes/GSL/gsl/gsl_permute_char.h | 44 ++
.../includes/GSL/gsl/gsl_permute_complex_double.h | 45 ++
.../includes/GSL/gsl/gsl_permute_complex_float.h | 45 ++
.../GSL/gsl/gsl_permute_complex_long_double.h | 45 ++
thirdparty/includes/GSL/gsl/gsl_permute_double.h | 44 ++
thirdparty/includes/GSL/gsl/gsl_permute_float.h | 44 ++
thirdparty/includes/GSL/gsl/gsl_permute_int.h | 44 ++
thirdparty/includes/GSL/gsl/gsl_permute_long.h | 44 ++
.../includes/GSL/gsl/gsl_permute_long_double.h | 44 ++
thirdparty/includes/GSL/gsl/gsl_permute_short.h | 44 ++
thirdparty/includes/GSL/gsl/gsl_permute_uchar.h | 44 ++
thirdparty/includes/GSL/gsl/gsl_permute_uint.h | 44 ++
thirdparty/includes/GSL/gsl/gsl_permute_ulong.h | 44 ++
thirdparty/includes/GSL/gsl/gsl_permute_ushort.h | 44 ++
thirdparty/includes/GSL/gsl/gsl_permute_vector.h | 24 +
.../includes/GSL/gsl/gsl_permute_vector_char.h | 45 ++
.../GSL/gsl/gsl_permute_vector_complex_double.h | 45 ++
.../GSL/gsl/gsl_permute_vector_complex_float.h | 45 ++
.../gsl/gsl_permute_vector_complex_long_double.h | 45 ++
.../includes/GSL/gsl/gsl_permute_vector_double.h | 45 ++
.../includes/GSL/gsl/gsl_permute_vector_float.h | 45 ++
.../includes/GSL/gsl/gsl_permute_vector_int.h | 45 ++
.../includes/GSL/gsl/gsl_permute_vector_long.h | 45 ++
.../GSL/gsl/gsl_permute_vector_long_double.h | 45 ++
.../includes/GSL/gsl/gsl_permute_vector_short.h | 45 ++
.../includes/GSL/gsl/gsl_permute_vector_uchar.h | 45 ++
.../includes/GSL/gsl/gsl_permute_vector_uint.h | 45 ++
.../includes/GSL/gsl/gsl_permute_vector_ulong.h | 45 ++
.../includes/GSL/gsl/gsl_permute_vector_ushort.h | 45 ++
thirdparty/includes/GSL/gsl/gsl_poly.h | 183 ++++++
thirdparty/includes/GSL/gsl/gsl_pow_int.h | 61 ++
thirdparty/includes/GSL/gsl/gsl_precision.h | 66 +++
thirdparty/includes/GSL/gsl/gsl_qrng.h | 111 ++++
thirdparty/includes/GSL/gsl/gsl_randist.h | 185 ++++++
thirdparty/includes/GSL/gsl/gsl_rng.h | 217 +++++++
thirdparty/includes/GSL/gsl/gsl_roots.h | 127 ++++
thirdparty/includes/GSL/gsl/gsl_rstat.h | 79 +++
thirdparty/includes/GSL/gsl/gsl_sf.h | 39 ++
thirdparty/includes/GSL/gsl/gsl_sf_airy.h | 139 +++++
thirdparty/includes/GSL/gsl/gsl_sf_bessel.h | 549 +++++++++++++++++
thirdparty/includes/GSL/gsl/gsl_sf_clausen.h | 52 ++
thirdparty/includes/GSL/gsl/gsl_sf_coulomb.h | 128 ++++
thirdparty/includes/GSL/gsl/gsl_sf_coupling.h | 125 ++++
thirdparty/includes/GSL/gsl/gsl_sf_dawson.h | 52 ++
thirdparty/includes/GSL/gsl/gsl_sf_debye.h | 91 +++
thirdparty/includes/GSL/gsl/gsl_sf_dilog.h | 130 +++++
thirdparty/includes/GSL/gsl/gsl_sf_elementary.h | 57 ++
thirdparty/includes/GSL/gsl/gsl_sf_ellint.h | 112 ++++
thirdparty/includes/GSL/gsl/gsl_sf_elljac.h | 48 ++
thirdparty/includes/GSL/gsl/gsl_sf_erf.h | 91 +++
thirdparty/includes/GSL/gsl/gsl_sf_exp.h | 134 +++++
thirdparty/includes/GSL/gsl/gsl_sf_expint.h | 167 ++++++
thirdparty/includes/GSL/gsl/gsl_sf_fermi_dirac.h | 126 ++++
thirdparty/includes/GSL/gsl/gsl_sf_gamma.h | 293 ++++++++++
thirdparty/includes/GSL/gsl/gsl_sf_gegenbauer.h | 73 +++
thirdparty/includes/GSL/gsl/gsl_sf_hyperg.h | 154 +++++
thirdparty/includes/GSL/gsl/gsl_sf_laguerre.h | 68 +++
thirdparty/includes/GSL/gsl/gsl_sf_lambert.h | 69 +++
thirdparty/includes/GSL/gsl/gsl_sf_legendre.h | 375 ++++++++++++
thirdparty/includes/GSL/gsl/gsl_sf_log.h | 82 +++
thirdparty/includes/GSL/gsl/gsl_sf_mathieu.h | 113 ++++
thirdparty/includes/GSL/gsl/gsl_sf_pow_int.h | 49 ++
thirdparty/includes/GSL/gsl/gsl_sf_psi.h | 113 ++++
thirdparty/includes/GSL/gsl/gsl_sf_result.h | 59 ++
thirdparty/includes/GSL/gsl/gsl_sf_synchrotron.h | 60 ++
thirdparty/includes/GSL/gsl/gsl_sf_transport.h | 78 +++
thirdparty/includes/GSL/gsl/gsl_sf_trig.h | 152 +++++
thirdparty/includes/GSL/gsl/gsl_sf_zeta.h | 112 ++++
thirdparty/includes/GSL/gsl/gsl_siman.h | 82 +++
thirdparty/includes/GSL/gsl/gsl_sort.h | 20 +
thirdparty/includes/GSL/gsl/gsl_sort_char.h | 51 ++
thirdparty/includes/GSL/gsl/gsl_sort_double.h | 51 ++
thirdparty/includes/GSL/gsl/gsl_sort_float.h | 51 ++
thirdparty/includes/GSL/gsl/gsl_sort_int.h | 51 ++
thirdparty/includes/GSL/gsl/gsl_sort_long.h | 51 ++
thirdparty/includes/GSL/gsl/gsl_sort_long_double.h | 51 ++
thirdparty/includes/GSL/gsl/gsl_sort_short.h | 51 ++
thirdparty/includes/GSL/gsl/gsl_sort_uchar.h | 51 ++
thirdparty/includes/GSL/gsl/gsl_sort_uint.h | 51 ++
thirdparty/includes/GSL/gsl/gsl_sort_ulong.h | 51 ++
thirdparty/includes/GSL/gsl/gsl_sort_ushort.h | 51 ++
thirdparty/includes/GSL/gsl/gsl_sort_vector.h | 20 +
thirdparty/includes/GSL/gsl/gsl_sort_vector_char.h | 52 ++
.../includes/GSL/gsl/gsl_sort_vector_double.h | 52 ++
.../includes/GSL/gsl/gsl_sort_vector_float.h | 52 ++
thirdparty/includes/GSL/gsl/gsl_sort_vector_int.h | 52 ++
thirdparty/includes/GSL/gsl/gsl_sort_vector_long.h | 52 ++
.../includes/GSL/gsl/gsl_sort_vector_long_double.h | 52 ++
.../includes/GSL/gsl/gsl_sort_vector_short.h | 52 ++
.../includes/GSL/gsl/gsl_sort_vector_uchar.h | 52 ++
thirdparty/includes/GSL/gsl/gsl_sort_vector_uint.h | 52 ++
.../includes/GSL/gsl/gsl_sort_vector_ulong.h | 52 ++
.../includes/GSL/gsl/gsl_sort_vector_ushort.h | 52 ++
thirdparty/includes/GSL/gsl/gsl_spblas.h | 58 ++
thirdparty/includes/GSL/gsl/gsl_specfunc.h | 10 +
thirdparty/includes/GSL/gsl/gsl_splinalg.h | 79 +++
thirdparty/includes/GSL/gsl/gsl_spline.h | 101 ++++
thirdparty/includes/GSL/gsl/gsl_spline2d.h | 113 ++++
thirdparty/includes/GSL/gsl/gsl_spmatrix.h | 150 +++++
thirdparty/includes/GSL/gsl/gsl_statistics.h | 20 +
thirdparty/includes/GSL/gsl/gsl_statistics_char.h | 80 +++
.../includes/GSL/gsl/gsl_statistics_double.h | 100 ++++
thirdparty/includes/GSL/gsl/gsl_statistics_float.h | 100 ++++
thirdparty/includes/GSL/gsl/gsl_statistics_int.h | 80 +++
thirdparty/includes/GSL/gsl/gsl_statistics_long.h | 80 +++
.../includes/GSL/gsl/gsl_statistics_long_double.h | 100 ++++
thirdparty/includes/GSL/gsl/gsl_statistics_short.h | 80 +++
thirdparty/includes/GSL/gsl/gsl_statistics_uchar.h | 80 +++
thirdparty/includes/GSL/gsl/gsl_statistics_uint.h | 80 +++
thirdparty/includes/GSL/gsl/gsl_statistics_ulong.h | 80 +++
.../includes/GSL/gsl/gsl_statistics_ushort.h | 80 +++
thirdparty/includes/GSL/gsl/gsl_sum.h | 162 +++++
thirdparty/includes/GSL/gsl/gsl_sys.h | 63 ++
thirdparty/includes/GSL/gsl/gsl_test.h | 66 +++
thirdparty/includes/GSL/gsl/gsl_types.h | 41 ++
thirdparty/includes/GSL/gsl/gsl_vector.h | 25 +
thirdparty/includes/GSL/gsl/gsl_vector_char.h | 230 ++++++++
thirdparty/includes/GSL/gsl/gsl_vector_complex.h | 17 +
.../includes/GSL/gsl/gsl_vector_complex_double.h | 251 ++++++++
.../includes/GSL/gsl/gsl_vector_complex_float.h | 251 ++++++++
.../GSL/gsl/gsl_vector_complex_long_double.h | 251 ++++++++
thirdparty/includes/GSL/gsl/gsl_vector_double.h | 230 ++++++++
thirdparty/includes/GSL/gsl/gsl_vector_float.h | 230 ++++++++
thirdparty/includes/GSL/gsl/gsl_vector_int.h | 230 ++++++++
thirdparty/includes/GSL/gsl/gsl_vector_long.h | 230 ++++++++
.../includes/GSL/gsl/gsl_vector_long_double.h | 230 ++++++++
thirdparty/includes/GSL/gsl/gsl_vector_short.h | 230 ++++++++
thirdparty/includes/GSL/gsl/gsl_vector_uchar.h | 230 ++++++++
thirdparty/includes/GSL/gsl/gsl_vector_uint.h | 230 ++++++++
thirdparty/includes/GSL/gsl/gsl_vector_ulong.h | 230 ++++++++
thirdparty/includes/GSL/gsl/gsl_vector_ushort.h | 230 ++++++++
thirdparty/includes/GSL/gsl/gsl_version.h | 26 +
thirdparty/includes/GSL/gsl/gsl_wavelet.h | 100 ++++
thirdparty/includes/GSL/gsl/gsl_wavelet2d.h | 107 ++++
237 files changed, 27853 insertions(+), 27 deletions(-)
create mode 100644 thirdparty/includes/GSL/gsl/gsl_blas.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_blas_types.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_block.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_block_char.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_block_complex_double.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_block_complex_float.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_block_complex_long_double.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_block_double.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_block_float.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_block_int.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_block_long.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_block_long_double.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_block_short.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_block_uchar.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_block_uint.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_block_ulong.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_block_ushort.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_bspline.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_cblas.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_cdf.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_chebyshev.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_check_range.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_combination.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_complex.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_complex_math.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_const.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_const_cgs.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_const_cgsm.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_const_mks.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_const_mksa.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_const_num.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_deriv.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_dft_complex.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_dft_complex_float.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_dht.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_diff.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_eigen.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_errno.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_fft.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_fft_complex.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_fft_complex_float.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_fft_halfcomplex.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_fft_halfcomplex_float.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_fft_real.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_fft_real_float.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_fit.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_heapsort.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_histogram.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_histogram2d.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_ieee_utils.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_inline.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_integration.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_interp.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_interp2d.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_linalg.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_machine.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_math.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_matrix.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_matrix_char.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_matrix_complex_double.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_matrix_complex_float.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_matrix_complex_long_double.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_matrix_double.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_matrix_float.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_matrix_int.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_matrix_long.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_matrix_long_double.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_matrix_short.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_matrix_uchar.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_matrix_uint.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_matrix_ulong.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_matrix_ushort.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_message.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_min.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_minmax.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_mode.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_monte.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_monte_miser.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_monte_plain.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_monte_vegas.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_multifit.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_multifit_nlin.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_multilarge.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_multimin.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_multiroots.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_multiset.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_nan.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_ntuple.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_odeiv.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_odeiv2.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_permutation.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_permute.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_permute_char.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_permute_complex_double.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_permute_complex_float.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_permute_complex_long_double.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_permute_double.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_permute_float.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_permute_int.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_permute_long.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_permute_long_double.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_permute_short.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_permute_uchar.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_permute_uint.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_permute_ulong.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_permute_ushort.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_permute_vector.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_permute_vector_char.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_permute_vector_complex_double.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_permute_vector_complex_float.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_permute_vector_complex_long_double.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_permute_vector_double.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_permute_vector_float.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_permute_vector_int.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_permute_vector_long.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_permute_vector_long_double.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_permute_vector_short.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_permute_vector_uchar.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_permute_vector_uint.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_permute_vector_ulong.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_permute_vector_ushort.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_poly.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_pow_int.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_precision.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_qrng.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_randist.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_rng.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_roots.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_rstat.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_sf.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_sf_airy.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_sf_bessel.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_sf_clausen.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_sf_coulomb.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_sf_coupling.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_sf_dawson.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_sf_debye.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_sf_dilog.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_sf_elementary.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_sf_ellint.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_sf_elljac.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_sf_erf.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_sf_exp.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_sf_expint.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_sf_fermi_dirac.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_sf_gamma.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_sf_gegenbauer.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_sf_hyperg.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_sf_laguerre.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_sf_lambert.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_sf_legendre.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_sf_log.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_sf_mathieu.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_sf_pow_int.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_sf_psi.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_sf_result.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_sf_synchrotron.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_sf_transport.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_sf_trig.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_sf_zeta.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_siman.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_sort.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_sort_char.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_sort_double.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_sort_float.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_sort_int.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_sort_long.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_sort_long_double.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_sort_short.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_sort_uchar.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_sort_uint.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_sort_ulong.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_sort_ushort.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_sort_vector.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_sort_vector_char.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_sort_vector_double.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_sort_vector_float.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_sort_vector_int.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_sort_vector_long.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_sort_vector_long_double.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_sort_vector_short.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_sort_vector_uchar.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_sort_vector_uint.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_sort_vector_ulong.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_sort_vector_ushort.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_spblas.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_specfunc.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_splinalg.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_spline.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_spline2d.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_spmatrix.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_statistics.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_statistics_char.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_statistics_double.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_statistics_float.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_statistics_int.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_statistics_long.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_statistics_long_double.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_statistics_short.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_statistics_uchar.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_statistics_uint.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_statistics_ulong.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_statistics_ushort.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_sum.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_sys.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_test.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_types.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_vector.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_vector_char.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_vector_complex.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_vector_complex_double.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_vector_complex_float.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_vector_complex_long_double.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_vector_double.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_vector_float.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_vector_int.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_vector_long.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_vector_long_double.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_vector_short.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_vector_uchar.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_vector_uint.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_vector_ulong.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_vector_ushort.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_version.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_wavelet.h
create mode 100644 thirdparty/includes/GSL/gsl/gsl_wavelet2d.h
diff --git a/macros/ASTManagement/lib b/macros/ASTManagement/lib
index 67ea09b..8b5224b 100644
--- a/macros/ASTManagement/lib
+++ b/macros/ASTManagement/lib
@@ -13,7 +13,7 @@
-
+
@@ -23,7 +23,7 @@
-
+
diff --git a/macros/CCodeGeneration/C_GenerateMakefile.sci b/macros/CCodeGeneration/C_GenerateMakefile.sci
index 7dfb4da..893ec93 100644
--- a/macros/CCodeGeneration/C_GenerateMakefile.sci
+++ b/macros/CCodeGeneration/C_GenerateMakefile.sci
@@ -78,6 +78,25 @@ else
PrintStringInfo('CXXFLAGS = -Wall -pedantic -g -I $(HSRCDIR) -I $(ISRCDIR) -L $(LIBDIR)',FileInfo.MakefileFilename,'file','y','y');
PrintStringInfo('LDFLAGS = -lblas -llapack -lm ',FileInfo.MakefileFilename,'file','y','y');
end
+
+ //If ode function is used, add libgsl.
+ if(size(SharedInfo.Includelist) <> 0)
+ if((mtlb_strcmp(part(SharedInfo.Includelist(1),1:5),'odefn') == %T))
+ if(target == 'RPi')
+ PrintStringInfo('LDFLAGS = -lgsl -lcblas',FileInfo.MakefileFilename,'file','y','y');
+ else
+ PrintStringInfo('LDFLAGS = -lgsl',FileInfo.MakefileFilename,'file','y','y');
+ end
+
+ end
+ end
+
+ if (target == 'RPi')
+ PrintStringInfo('LDFLAGS += -llapack -lrefblas -lgfortran -lwiringPi',FileInfo.MakefileFilename,'file','y','y');
+ else
+ PrintStringInfo('LDFLAGS += -lblas -llapack -lm ',FileInfo.MakefileFilename,'file','y','y');
+ end
+
if(SharedInfo.OpenCVUsed == %T)
PrintStringInfo('LDFLAGS += -lopencv_calib3d -lopencv_contrib -lopencv_features2d -lopencv_flann -lopencv_gpu',FileInfo.MakefileFilename,'file','y','y');
PrintStringInfo('LDFLAGS += -lopencv_highgui -lopencv_imgproc -lopencv_legacy -lopencv_ml -lopencv_nonfree',FileInfo.MakefileFilename,'file','y','y');
diff --git a/macros/CCodeGeneration/lib b/macros/CCodeGeneration/lib
index 2db4b8c..28e3346 100644
--- a/macros/CCodeGeneration/lib
+++ b/macros/CCodeGeneration/lib
@@ -6,7 +6,7 @@
-
+
diff --git a/macros/ToolInitialization/INIT_FillSCI2LibCDirs.sci b/macros/ToolInitialization/INIT_FillSCI2LibCDirs.sci
index f0a8360..009ff53 100644
--- a/macros/ToolInitialization/INIT_FillSCI2LibCDirs.sci
+++ b/macros/ToolInitialization/INIT_FillSCI2LibCDirs.sci
@@ -6527,15 +6527,34 @@ ClassFileName = fullfile(SCI2CLibCAnnClsDir,ClassName+ExtensionCAnnCls);
PrintStringInfo('NIN= 1',ClassFileName,'file','y');
PrintStringInfo('NOUT= 2',ClassFileName,'file','y');
PrintStringInfo('OUT(1).TP= ''d''',ClassFileName,'file','y');
-PrintStringInfo('OUT(1).SZ(1)= FA_SZ_1(FA_SZ_LQR(IN(1).VAL))',ClassFileName,'file','y');
+PrintStringInfo('OUT(1).SZ(1)= FA_SZ_2(FA_SZ_LQR(IN(1).VAL))',ClassFileName,'file','y');
PrintStringInfo('OUT(1).SZ(2)= FA_SZ_1(FA_SZ_LQR(IN(1).VAL))',ClassFileName,'file','y');
PrintStringInfo('OUT(2).TP= ''d''',ClassFileName,'file','y');
-PrintStringInfo('OUT(2).SZ(1)= FA_SZ_2(FA_SZ_LQR(IN(1).VAL))',ClassFileName,'file','y');
+PrintStringInfo('OUT(2).SZ(1)= FA_SZ_1(FA_SZ_LQR(IN(1).VAL))',ClassFileName,'file','y');
+PrintStringInfo('OUT(2).SZ(2)= FA_SZ_1(FA_SZ_LQR(IN(1).VAL))',ClassFileName,'file','y');
+
+PrintStringInfo('NIN= 3',ClassFileName,'file','y');
+PrintStringInfo('NOUT= 2',ClassFileName,'file','y');
+PrintStringInfo('OUT(1).TP= ''d''',ClassFileName,'file','y');
+PrintStringInfo('OUT(1).SZ(1)= FA_SZ_2(FA_SZ_LQR(IN(1).VAL))',ClassFileName,'file','y');
+PrintStringInfo('OUT(1).SZ(2)= FA_SZ_1(FA_SZ_LQR(IN(1).VAL))',ClassFileName,'file','y');
+PrintStringInfo('OUT(2).TP= ''d''',ClassFileName,'file','y');
+PrintStringInfo('OUT(2).SZ(1)= FA_SZ_1(FA_SZ_LQR(IN(1).VAL))',ClassFileName,'file','y');
+PrintStringInfo('OUT(2).SZ(2)= FA_SZ_1(FA_SZ_LQR(IN(1).VAL))',ClassFileName,'file','y');
+
+PrintStringInfo('NIN= 4',ClassFileName,'file','y');
+PrintStringInfo('NOUT= 2',ClassFileName,'file','y');
+PrintStringInfo('OUT(1).TP= ''d''',ClassFileName,'file','y');
+PrintStringInfo('OUT(1).SZ(1)= FA_SZ_2(FA_SZ_LQR(IN(1).VAL))',ClassFileName,'file','y');
+PrintStringInfo('OUT(1).SZ(2)= FA_SZ_1(FA_SZ_LQR(IN(1).VAL))',ClassFileName,'file','y');
+PrintStringInfo('OUT(2).TP= ''d''',ClassFileName,'file','y');
+PrintStringInfo('OUT(2).SZ(1)= FA_SZ_1(FA_SZ_LQR(IN(1).VAL))',ClassFileName,'file','y');
PrintStringInfo('OUT(2).SZ(2)= FA_SZ_1(FA_SZ_LQR(IN(1).VAL))',ClassFileName,'file','y');
ClassFileName = fullfile(SCI2CLibCFLClsDir,ClassName+ExtensionCFuncListCls);
PrintStringInfo('ss2'+ArgSeparator+'d2d2',ClassFileName,'file','y');
-
+PrintStringInfo('ss2d2d2'+ArgSeparator+'d2d2',ClassFileName,'file','y');
+PrintStringInfo('ss2d2d2d2'+ArgSeparator+'d2d2',ClassFileName,'file','y');
// --- Annotation Function And Function List Function. ---
FunctionName = 'lqr';
PrintStringInfo(' Adding Function: '+FunctionName+'.',GeneralReport,'file','y');
diff --git a/macros/ToolInitialization/lib b/macros/ToolInitialization/lib
index 4d03bdc..f92adcd 100644
--- a/macros/ToolInitialization/lib
+++ b/macros/ToolInitialization/lib
@@ -1,7 +1,7 @@
-
+
diff --git a/macros/findDeps/getAllHeaders.sci b/macros/findDeps/getAllHeaders.sci
index b7f26b3..dd8b7e1 100644
--- a/macros/findDeps/getAllHeaders.sci
+++ b/macros/findDeps/getAllHeaders.sci
@@ -247,4 +247,8 @@ function allHeaders = getAllHeaders(SharedInfo)
allHeaders = cat(1,allHeaders,OpenCV_headers);
end
+ if((mtlb_strcmp(part(SharedInfo.Includelist(1),1:5),'odefn') == %T))
+ allHeaders = cat(1,allHeaders,"thirdparty/includes/GSL");
+ end
+
endfunction
diff --git a/macros/findDeps/lib b/macros/findDeps/lib
index a49dc79..d426d8c 100644
--- a/macros/findDeps/lib
+++ b/macros/findDeps/lib
@@ -1,7 +1,7 @@
-
+
diff --git a/src/c/CACSD/includes/lqr.h b/src/c/CACSD/includes/lqr.h
index 062d6e4..5b20ee8 100644
--- a/src/c/CACSD/includes/lqr.h
+++ b/src/c/CACSD/includes/lqr.h
@@ -17,7 +17,7 @@
extern "C" {
#endif
-void dlqra(double* sys, int sys_rows, int sys_cols, double* X, double* K);
+void dlqra(double* sys, int sys_rows, int sys_cols, double* Q, double* R, double* S, double* X, double* K);
#ifdef __cplusplus
} /* extern "C" */
diff --git a/src/c/CACSD/interfaces/int_lqr.h b/src/c/CACSD/interfaces/int_lqr.h
index e6f534f..8deba90 100644
--- a/src/c/CACSD/interfaces/int_lqr.h
+++ b/src/c/CACSD/interfaces/int_lqr.h
@@ -16,7 +16,14 @@
extern "C" {
#endif
-#define ss2lqrd2d2(in1,size1,out1,out2) dlqra(in1,size1[0],size1[1],out1,out2);
+#define ss2lqrd2d2(in1,size1,out1,out2) dlqra(in1,size1[0],size1[1],NULL,\
+ NULL,NULL,out1,out2);
+
+#define ss2d2d2lqrd2d2(in1,size1,in2,size2,in3,size3,out1,out2) dlqra(in1,\
+ size1[0],size1[1],in2,in3,NULL,out1,out2);
+
+#define ss2d2d2d2lqrd2d2(in1,size1,in2,size2,in3,size3,in4,size4,out1,out2) \
+ dlqra(in1,size1[0],size1[1],in2,in3,in4,out1,out2);
#ifdef __cplusplus
} /* extern "C" */
diff --git a/src/c/CACSD/lqe/dlqea.c b/src/c/CACSD/lqe/dlqea.c
index 63f8d62..e0be5b3 100644
--- a/src/c/CACSD/lqe/dlqea.c
+++ b/src/c/CACSD/lqe/dlqea.c
@@ -54,7 +54,7 @@ void dlqea(double* sys, int sys_rows, int sys_cols, double* X, double* K)
/*Calculate LQR gain*/
K_lqr = (double*) malloc(no_of_ip*no_of_st*sizeof(double));
- dlqra(sys_lqr,sys_lqr_rows,sys_lqr_cols,X,K_lqr);
+ dlqra(sys_lqr,sys_lqr_rows,sys_lqr_cols,NULL,NULL,NULL,X,K_lqr);
dtransposea(K_lqr,sys_rows - no_of_st,no_of_st,K);
}
\ No newline at end of file
diff --git a/src/c/CACSD/lqr/dlqra.c b/src/c/CACSD/lqr/dlqra.c
index 02ac150..1440c3a 100644
--- a/src/c/CACSD/lqr/dlqra.c
+++ b/src/c/CACSD/lqr/dlqra.c
@@ -22,7 +22,8 @@
#include "schur.h"
#include "matrixDivision.h"
-void dlqra(double* sys, int sys_rows, int sys_cols, double* X, double* K)
+void dlqra(double* sys, int sys_rows, int sys_cols, double* Q, double* R, \
+ double* S, double* K, double* X)
{
int no_of_states, no_of_inputs, no_of_outputs, dom = 1;
int row,col;
@@ -32,7 +33,7 @@ void dlqra(double* sys, int sys_rows, int sys_cols, double* X, double* K)
double *A, *B, *C, *D;
double *B_t, *C_t, *D_t;
- double *Q, *R, *S;
+ //double *Q, *R, *S;
double *Ri, *LA, *LE;
double *BRi, *StRi, *S_t;
double *buf1, *buf2, *buf3, *buf4, *buf5, *buf6;
@@ -90,20 +91,29 @@ void dlqra(double* sys, int sys_rows, int sys_cols, double* X, double* K)
dom = (int)sys[(sys_rows*(sys_cols-2)) + no_of_states];
- Q = (double*) malloc (no_of_states*no_of_states*sizeof(double));
- R = (double*) malloc (no_of_inputs*no_of_inputs*sizeof(double));
- S = (double*) malloc (no_of_inputs*no_of_states*sizeof(double));
-
dtransposea(B,no_of_states,no_of_inputs,B_t);
dtransposea(C,no_of_outputs,no_of_states,C_t);
dtransposea(D,no_of_outputs,no_of_inputs,D_t);
- dmulma(C_t,no_of_states,no_of_outputs,C,no_of_outputs,no_of_states,Q);
- dmulma(D_t,no_of_inputs,no_of_outputs,D,no_of_outputs,no_of_inputs,R);
- dmulma(D_t,no_of_inputs,no_of_outputs,C,no_of_outputs,no_of_states,S);
+ if(Q == NULL)
+ {/*If Q is not provided*/
+ Q = (double*) malloc (no_of_states*no_of_states*sizeof(double));
+ dmulma(C_t,no_of_states,no_of_outputs,C,no_of_outputs,no_of_states,Q);
+ }
+
+ if(R == NULL)
+ {/*If R is not provided*/
+ R = (double*) malloc (no_of_inputs*no_of_inputs*sizeof(double));
+ dmulma(D_t,no_of_inputs,no_of_outputs,D,no_of_outputs,no_of_inputs,R);
+ }
- /*Free up unwanted variables*/
+ if(S == NULL)
+ {/*If Q is not provided*/
+ S = (double*) malloc (no_of_inputs*no_of_states*sizeof(double));
+ dmulma(D_t,no_of_inputs,no_of_outputs,C,no_of_outputs,no_of_states,S);
+ }
+ /*Free up unwanted variables*/
free(C);
free(C_t);
free(D);
@@ -177,8 +187,8 @@ void dlqra(double* sys, int sys_rows, int sys_cols, double* X, double* K)
/*Freeup umwanted variables*/
free(A);
- free(Q);
- free(R);
+ //free(Q);
+ //free(R);
free(BRi);
free(S_t);
free(StRi);
@@ -278,7 +288,7 @@ void dlqra(double* sys, int sys_rows, int sys_cols, double* X, double* K)
}
- free(Q);
+ //free(Q);
free(BRi);
free(S_t);
free(StRi);
@@ -316,7 +326,7 @@ void dlqra(double* sys, int sys_rows, int sys_cols, double* X, double* K)
/*inv(B'XB+R)*/
dmulma(B_t,no_of_inputs,no_of_states,X,no_of_states,no_of_states,buf3);
- dmulma(buf3,no_of_inputs,no_of_states,B_t,no_of_states,no_of_inputs,buf6);
+ dmulma(buf3,no_of_inputs,no_of_states,B,no_of_states,no_of_inputs,buf6);
dadda(buf6,no_of_inputs*no_of_inputs,R,no_of_inputs*no_of_inputs,buf5);
dinverma(buf5,buf6,no_of_inputs);
/*B'XA+S*/
@@ -333,14 +343,14 @@ void dlqra(double* sys, int sys_rows, int sys_cols, double* X, double* K)
free(A);
free(B);
- free(R);
+ //free(R);
free(buf5);
free(buf6);
}
free(B_t);
- free(S);
+ //free(S);
free(wsmall);
free(X12);
free(phi12);
diff --git a/thirdparty/includes/GSL/gsl/gsl_blas.h b/thirdparty/includes/GSL/gsl/gsl_blas.h
new file mode 100644
index 0000000..7c42714
--- /dev/null
+++ b/thirdparty/includes/GSL/gsl/gsl_blas.h
@@ -0,0 +1,602 @@
+/* blas/gsl_blas.h
+ *
+ * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/*
+ * Author: G. Jungman
+ */
+#ifndef __GSL_BLAS_H__
+#define __GSL_BLAS_H__
+
+#include
+#include
+
+#include
+
+
+#undef __BEGIN_DECLS
+#undef __END_DECLS
+#ifdef __cplusplus
+# define __BEGIN_DECLS extern "C" {
+# define __END_DECLS }
+#else
+# define __BEGIN_DECLS /* empty */
+# define __END_DECLS /* empty */
+#endif
+
+__BEGIN_DECLS
+
+
+/* ========================================================================
+ * Level 1
+ * ========================================================================
+ */
+
+int gsl_blas_sdsdot (float alpha,
+ const gsl_vector_float * X,
+ const gsl_vector_float * Y,
+ float * result
+ );
+
+int gsl_blas_dsdot (const gsl_vector_float * X,
+ const gsl_vector_float * Y,
+ double * result
+ );
+
+int gsl_blas_sdot (const gsl_vector_float * X,
+ const gsl_vector_float * Y,
+ float * result
+ );
+
+int gsl_blas_ddot (const gsl_vector * X,
+ const gsl_vector * Y,
+ double * result
+ );
+
+
+int gsl_blas_cdotu (const gsl_vector_complex_float * X,
+ const gsl_vector_complex_float * Y,
+ gsl_complex_float * dotu);
+
+int gsl_blas_cdotc (const gsl_vector_complex_float * X,
+ const gsl_vector_complex_float * Y,
+ gsl_complex_float * dotc);
+
+int gsl_blas_zdotu (const gsl_vector_complex * X,
+ const gsl_vector_complex * Y,
+ gsl_complex * dotu);
+
+int gsl_blas_zdotc (const gsl_vector_complex * X,
+ const gsl_vector_complex * Y,
+ gsl_complex * dotc);
+
+
+float gsl_blas_snrm2 (const gsl_vector_float * X);
+float gsl_blas_sasum (const gsl_vector_float * X);
+double gsl_blas_dnrm2 (const gsl_vector * X);
+double gsl_blas_dasum (const gsl_vector * X);
+float gsl_blas_scnrm2 (const gsl_vector_complex_float * X);
+float gsl_blas_scasum (const gsl_vector_complex_float * X);
+double gsl_blas_dznrm2 (const gsl_vector_complex * X);
+double gsl_blas_dzasum (const gsl_vector_complex * X);
+
+
+CBLAS_INDEX_t gsl_blas_isamax (const gsl_vector_float * X);
+CBLAS_INDEX_t gsl_blas_idamax (const gsl_vector * X);
+CBLAS_INDEX_t gsl_blas_icamax (const gsl_vector_complex_float * X);
+CBLAS_INDEX_t gsl_blas_izamax (const gsl_vector_complex * X);
+
+
+int gsl_blas_sswap (gsl_vector_float * X,
+ gsl_vector_float * Y);
+
+int gsl_blas_scopy (const gsl_vector_float * X,
+ gsl_vector_float * Y);
+
+int gsl_blas_saxpy (float alpha,
+ const gsl_vector_float * X,
+ gsl_vector_float * Y);
+
+int gsl_blas_dswap (gsl_vector * X,
+ gsl_vector * Y);
+
+int gsl_blas_dcopy (const gsl_vector * X,
+ gsl_vector * Y);
+
+int gsl_blas_daxpy (double alpha,
+ const gsl_vector * X,
+ gsl_vector * Y);
+
+int gsl_blas_cswap (gsl_vector_complex_float * X,
+ gsl_vector_complex_float * Y);
+
+int gsl_blas_ccopy (const gsl_vector_complex_float * X,
+ gsl_vector_complex_float * Y);
+
+int gsl_blas_caxpy (const gsl_complex_float alpha,
+ const gsl_vector_complex_float * X,
+ gsl_vector_complex_float * Y);
+
+int gsl_blas_zswap (gsl_vector_complex * X,
+ gsl_vector_complex * Y);
+
+int gsl_blas_zcopy (const gsl_vector_complex * X,
+ gsl_vector_complex * Y);
+
+int gsl_blas_zaxpy (const gsl_complex alpha,
+ const gsl_vector_complex * X,
+ gsl_vector_complex * Y);
+
+
+int gsl_blas_srotg (float a[], float b[], float c[], float s[]);
+
+int gsl_blas_srotmg (float d1[], float d2[], float b1[], float b2, float P[]);
+
+int gsl_blas_srot (gsl_vector_float * X,
+ gsl_vector_float * Y,
+ float c, float s);
+
+int gsl_blas_srotm (gsl_vector_float * X,
+ gsl_vector_float * Y,
+ const float P[]);
+
+int gsl_blas_drotg (double a[], double b[], double c[], double s[]);
+
+int gsl_blas_drotmg (double d1[], double d2[], double b1[],
+ double b2, double P[]);
+
+int gsl_blas_drot (gsl_vector * X,
+ gsl_vector * Y,
+ const double c, const double s);
+
+int gsl_blas_drotm (gsl_vector * X,
+ gsl_vector * Y,
+ const double P[]);
+
+
+void gsl_blas_sscal (float alpha, gsl_vector_float * X);
+void gsl_blas_dscal (double alpha, gsl_vector * X);
+void gsl_blas_cscal (const gsl_complex_float alpha, gsl_vector_complex_float * X);
+void gsl_blas_zscal (const gsl_complex alpha, gsl_vector_complex * X);
+void gsl_blas_csscal (float alpha, gsl_vector_complex_float * X);
+void gsl_blas_zdscal (double alpha, gsl_vector_complex * X);
+
+
+/* ===========================================================================
+ * Level 2
+ * ===========================================================================
+ */
+
+/*
+ * Routines with standard 4 prefixes (S, D, C, Z)
+ */
+int gsl_blas_sgemv (CBLAS_TRANSPOSE_t TransA,
+ float alpha,
+ const gsl_matrix_float * A,
+ const gsl_vector_float * X,
+ float beta,
+ gsl_vector_float * Y);
+
+int gsl_blas_strmv (CBLAS_UPLO_t Uplo,
+ CBLAS_TRANSPOSE_t TransA, CBLAS_DIAG_t Diag,
+ const gsl_matrix_float * A,
+ gsl_vector_float * X);
+
+int gsl_blas_strsv (CBLAS_UPLO_t Uplo,
+ CBLAS_TRANSPOSE_t TransA, CBLAS_DIAG_t Diag,
+ const gsl_matrix_float * A,
+ gsl_vector_float * X);
+
+int gsl_blas_dgemv (CBLAS_TRANSPOSE_t TransA,
+ double alpha,
+ const gsl_matrix * A,
+ const gsl_vector * X,
+ double beta,
+ gsl_vector * Y);
+
+int gsl_blas_dtrmv (CBLAS_UPLO_t Uplo,
+ CBLAS_TRANSPOSE_t TransA, CBLAS_DIAG_t Diag,
+ const gsl_matrix * A,
+ gsl_vector * X);
+
+int gsl_blas_dtrsv (CBLAS_UPLO_t Uplo,
+ CBLAS_TRANSPOSE_t TransA, CBLAS_DIAG_t Diag,
+ const gsl_matrix * A,
+ gsl_vector * X);
+
+int gsl_blas_cgemv (CBLAS_TRANSPOSE_t TransA,
+ const gsl_complex_float alpha,
+ const gsl_matrix_complex_float * A,
+ const gsl_vector_complex_float * X,
+ const gsl_complex_float beta,
+ gsl_vector_complex_float * Y);
+
+int gsl_blas_ctrmv (CBLAS_UPLO_t Uplo,
+ CBLAS_TRANSPOSE_t TransA, CBLAS_DIAG_t Diag,
+ const gsl_matrix_complex_float * A,
+ gsl_vector_complex_float * X);
+
+int gsl_blas_ctrsv (CBLAS_UPLO_t Uplo,
+ CBLAS_TRANSPOSE_t TransA, CBLAS_DIAG_t Diag,
+ const gsl_matrix_complex_float * A,
+ gsl_vector_complex_float * X);
+
+int gsl_blas_zgemv (CBLAS_TRANSPOSE_t TransA,
+ const gsl_complex alpha,
+ const gsl_matrix_complex * A,
+ const gsl_vector_complex * X,
+ const gsl_complex beta,
+ gsl_vector_complex * Y);
+
+int gsl_blas_ztrmv (CBLAS_UPLO_t Uplo,
+ CBLAS_TRANSPOSE_t TransA, CBLAS_DIAG_t Diag,
+ const gsl_matrix_complex * A,
+ gsl_vector_complex * X);
+
+int gsl_blas_ztrsv (CBLAS_UPLO_t Uplo,
+ CBLAS_TRANSPOSE_t TransA, CBLAS_DIAG_t Diag,
+ const gsl_matrix_complex * A,
+ gsl_vector_complex *X);
+
+/*
+ * Routines with S and D prefixes only
+ */
+int gsl_blas_ssymv (CBLAS_UPLO_t Uplo,
+ float alpha,
+ const gsl_matrix_float * A,
+ const gsl_vector_float * X,
+ float beta,
+ gsl_vector_float * Y);
+
+int gsl_blas_sger (float alpha,
+ const gsl_vector_float * X,
+ const gsl_vector_float * Y,
+ gsl_matrix_float * A);
+
+int gsl_blas_ssyr (CBLAS_UPLO_t Uplo,
+ float alpha,
+ const gsl_vector_float * X,
+ gsl_matrix_float * A);
+
+int gsl_blas_ssyr2 (CBLAS_UPLO_t Uplo,
+ float alpha,
+ const gsl_vector_float * X,
+ const gsl_vector_float * Y,
+ gsl_matrix_float * A);
+
+int gsl_blas_dsymv (CBLAS_UPLO_t Uplo,
+ double alpha,
+ const gsl_matrix * A,
+ const gsl_vector * X,
+ double beta,
+ gsl_vector * Y);
+int gsl_blas_dger (double alpha,
+ const gsl_vector * X,
+ const gsl_vector * Y,
+ gsl_matrix * A);
+
+int gsl_blas_dsyr (CBLAS_UPLO_t Uplo,
+ double alpha,
+ const gsl_vector * X,
+ gsl_matrix * A);
+
+int gsl_blas_dsyr2 (CBLAS_UPLO_t Uplo,
+ double alpha,
+ const gsl_vector * X,
+ const gsl_vector * Y,
+ gsl_matrix * A);
+
+/*
+ * Routines with C and Z prefixes only
+ */
+
+int gsl_blas_chemv (CBLAS_UPLO_t Uplo,
+ const gsl_complex_float alpha,
+ const gsl_matrix_complex_float * A,
+ const gsl_vector_complex_float * X,
+ const gsl_complex_float beta,
+ gsl_vector_complex_float * Y);
+
+int gsl_blas_cgeru (const gsl_complex_float alpha,
+ const gsl_vector_complex_float * X,
+ const gsl_vector_complex_float * Y,
+ gsl_matrix_complex_float * A);
+
+int gsl_blas_cgerc (const gsl_complex_float alpha,
+ const gsl_vector_complex_float * X,
+ const gsl_vector_complex_float * Y,
+ gsl_matrix_complex_float * A);
+
+int gsl_blas_cher (CBLAS_UPLO_t Uplo,
+ float alpha,
+ const gsl_vector_complex_float * X,
+ gsl_matrix_complex_float * A);
+
+int gsl_blas_cher2 (CBLAS_UPLO_t Uplo,
+ const gsl_complex_float alpha,
+ const gsl_vector_complex_float * X,
+ const gsl_vector_complex_float * Y,
+ gsl_matrix_complex_float * A);
+
+int gsl_blas_zhemv (CBLAS_UPLO_t Uplo,
+ const gsl_complex alpha,
+ const gsl_matrix_complex * A,
+ const gsl_vector_complex * X,
+ const gsl_complex beta,
+ gsl_vector_complex * Y);
+
+int gsl_blas_zgeru (const gsl_complex alpha,
+ const gsl_vector_complex * X,
+ const gsl_vector_complex * Y,
+ gsl_matrix_complex * A);
+
+int gsl_blas_zgerc (const gsl_complex alpha,
+ const gsl_vector_complex * X,
+ const gsl_vector_complex * Y,
+ gsl_matrix_complex * A);
+
+int gsl_blas_zher (CBLAS_UPLO_t Uplo,
+ double alpha,
+ const gsl_vector_complex * X,
+ gsl_matrix_complex * A);
+
+int gsl_blas_zher2 (CBLAS_UPLO_t Uplo,
+ const gsl_complex alpha,
+ const gsl_vector_complex * X,
+ const gsl_vector_complex * Y,
+ gsl_matrix_complex * A);
+
+/*
+ * ===========================================================================
+ * Prototypes for level 3 BLAS
+ * ===========================================================================
+ */
+
+/*
+ * Routines with standard 4 prefixes (S, D, C, Z)
+ */
+int gsl_blas_sgemm (CBLAS_TRANSPOSE_t TransA,
+ CBLAS_TRANSPOSE_t TransB,
+ float alpha,
+ const gsl_matrix_float * A,
+ const gsl_matrix_float * B,
+ float beta,
+ gsl_matrix_float * C);
+
+int gsl_blas_ssymm (CBLAS_SIDE_t Side, CBLAS_UPLO_t Uplo,
+ float alpha,
+ const gsl_matrix_float * A,
+ const gsl_matrix_float * B,
+ float beta,
+ gsl_matrix_float * C);
+
+int gsl_blas_ssyrk (CBLAS_UPLO_t Uplo, CBLAS_TRANSPOSE_t Trans,
+ float alpha,
+ const gsl_matrix_float * A,
+ float beta,
+ gsl_matrix_float * C);
+
+int gsl_blas_ssyr2k (CBLAS_UPLO_t Uplo, CBLAS_TRANSPOSE_t Trans,
+ float alpha,
+ const gsl_matrix_float * A,
+ const gsl_matrix_float * B,
+ float beta,
+ gsl_matrix_float * C);
+
+int gsl_blas_strmm (CBLAS_SIDE_t Side,
+ CBLAS_UPLO_t Uplo, CBLAS_TRANSPOSE_t TransA,
+ CBLAS_DIAG_t Diag,
+ float alpha,
+ const gsl_matrix_float * A,
+ gsl_matrix_float * B);
+
+int gsl_blas_strsm (CBLAS_SIDE_t Side,
+ CBLAS_UPLO_t Uplo, CBLAS_TRANSPOSE_t TransA,
+ CBLAS_DIAG_t Diag,
+ float alpha,
+ const gsl_matrix_float * A,
+ gsl_matrix_float * B);
+
+int gsl_blas_dgemm (CBLAS_TRANSPOSE_t TransA,
+ CBLAS_TRANSPOSE_t TransB,
+ double alpha,
+ const gsl_matrix * A,
+ const gsl_matrix * B,
+ double beta,
+ gsl_matrix * C);
+
+int gsl_blas_dsymm (CBLAS_SIDE_t Side,
+ CBLAS_UPLO_t Uplo,
+ double alpha,
+ const gsl_matrix * A,
+ const gsl_matrix * B,
+ double beta,
+ gsl_matrix * C);
+
+int gsl_blas_dsyrk (CBLAS_UPLO_t Uplo,
+ CBLAS_TRANSPOSE_t Trans,
+ double alpha,
+ const gsl_matrix * A,
+ double beta,
+ gsl_matrix * C);
+
+int gsl_blas_dsyr2k (CBLAS_UPLO_t Uplo,
+ CBLAS_TRANSPOSE_t Trans,
+ double alpha,
+ const gsl_matrix * A,
+ const gsl_matrix * B,
+ double beta,
+ gsl_matrix * C);
+
+int gsl_blas_dtrmm (CBLAS_SIDE_t Side,
+ CBLAS_UPLO_t Uplo, CBLAS_TRANSPOSE_t TransA,
+ CBLAS_DIAG_t Diag,
+ double alpha,
+ const gsl_matrix * A,
+ gsl_matrix * B);
+
+int gsl_blas_dtrsm (CBLAS_SIDE_t Side,
+ CBLAS_UPLO_t Uplo, CBLAS_TRANSPOSE_t TransA,
+ CBLAS_DIAG_t Diag,
+ double alpha,
+ const gsl_matrix * A,
+ gsl_matrix * B);
+
+int gsl_blas_cgemm (CBLAS_TRANSPOSE_t TransA,
+ CBLAS_TRANSPOSE_t TransB,
+ const gsl_complex_float alpha,
+ const gsl_matrix_complex_float * A,
+ const gsl_matrix_complex_float * B,
+ const gsl_complex_float beta,
+ gsl_matrix_complex_float * C);
+
+int gsl_blas_csymm (CBLAS_SIDE_t Side,
+ CBLAS_UPLO_t Uplo,
+ const gsl_complex_float alpha,
+ const gsl_matrix_complex_float * A,
+ const gsl_matrix_complex_float * B,
+ const gsl_complex_float beta,
+ gsl_matrix_complex_float * C);
+
+int gsl_blas_csyrk (CBLAS_UPLO_t Uplo,
+ CBLAS_TRANSPOSE_t Trans,
+ const gsl_complex_float alpha,
+ const gsl_matrix_complex_float * A,
+ const gsl_complex_float beta,
+ gsl_matrix_complex_float * C);
+
+int gsl_blas_csyr2k (CBLAS_UPLO_t Uplo,
+ CBLAS_TRANSPOSE_t Trans,
+ const gsl_complex_float alpha,
+ const gsl_matrix_complex_float * A,
+ const gsl_matrix_complex_float * B,
+ const gsl_complex_float beta,
+ gsl_matrix_complex_float * C);
+
+int gsl_blas_ctrmm (CBLAS_SIDE_t Side,
+ CBLAS_UPLO_t Uplo, CBLAS_TRANSPOSE_t TransA,
+ CBLAS_DIAG_t Diag,
+ const gsl_complex_float alpha,
+ const gsl_matrix_complex_float * A,
+ gsl_matrix_complex_float * B);
+
+int gsl_blas_ctrsm (CBLAS_SIDE_t Side,
+ CBLAS_UPLO_t Uplo, CBLAS_TRANSPOSE_t TransA,
+ CBLAS_DIAG_t Diag,
+ const gsl_complex_float alpha,
+ const gsl_matrix_complex_float * A,
+ gsl_matrix_complex_float * B);
+
+int gsl_blas_zgemm (CBLAS_TRANSPOSE_t TransA,
+ CBLAS_TRANSPOSE_t TransB,
+ const gsl_complex alpha,
+ const gsl_matrix_complex * A,
+ const gsl_matrix_complex * B,
+ const gsl_complex beta,
+ gsl_matrix_complex * C);
+
+int gsl_blas_zsymm (CBLAS_SIDE_t Side,
+ CBLAS_UPLO_t Uplo,
+ const gsl_complex alpha,
+ const gsl_matrix_complex * A,
+ const gsl_matrix_complex * B,
+ const gsl_complex beta,
+ gsl_matrix_complex * C);
+
+int gsl_blas_zsyrk (CBLAS_UPLO_t Uplo,
+ CBLAS_TRANSPOSE_t Trans,
+ const gsl_complex alpha,
+ const gsl_matrix_complex * A,
+ const gsl_complex beta,
+ gsl_matrix_complex * C);
+
+int gsl_blas_zsyr2k (CBLAS_UPLO_t Uplo,
+ CBLAS_TRANSPOSE_t Trans,
+ const gsl_complex alpha,
+ const gsl_matrix_complex * A,
+ const gsl_matrix_complex * B,
+ const gsl_complex beta,
+ gsl_matrix_complex *C);
+
+int gsl_blas_ztrmm (CBLAS_SIDE_t Side,
+ CBLAS_UPLO_t Uplo, CBLAS_TRANSPOSE_t TransA,
+ CBLAS_DIAG_t Diag,
+ const gsl_complex alpha,
+ const gsl_matrix_complex * A,
+ gsl_matrix_complex * B);
+
+int gsl_blas_ztrsm (CBLAS_SIDE_t Side,
+ CBLAS_UPLO_t Uplo, CBLAS_TRANSPOSE_t TransA,
+ CBLAS_DIAG_t Diag,
+ const gsl_complex alpha,
+ const gsl_matrix_complex * A,
+ gsl_matrix_complex * B);
+
+/*
+ * Routines with prefixes C and Z only
+ */
+int gsl_blas_chemm (CBLAS_SIDE_t Side,
+ CBLAS_UPLO_t Uplo,
+ const gsl_complex_float alpha,
+ const gsl_matrix_complex_float * A,
+ const gsl_matrix_complex_float * B,
+ const gsl_complex_float beta,
+ gsl_matrix_complex_float * C);
+
+int gsl_blas_cherk (CBLAS_UPLO_t Uplo,
+ CBLAS_TRANSPOSE_t Trans,
+ float alpha,
+ const gsl_matrix_complex_float * A,
+ float beta,
+ gsl_matrix_complex_float * C);
+
+int gsl_blas_cher2k (CBLAS_UPLO_t Uplo,
+ CBLAS_TRANSPOSE_t Trans,
+ const gsl_complex_float alpha,
+ const gsl_matrix_complex_float * A,
+ const gsl_matrix_complex_float * B,
+ float beta,
+ gsl_matrix_complex_float * C);
+
+int gsl_blas_zhemm (CBLAS_SIDE_t Side,
+ CBLAS_UPLO_t Uplo,
+ const gsl_complex alpha,
+ const gsl_matrix_complex * A,
+ const gsl_matrix_complex * B,
+ const gsl_complex beta,
+ gsl_matrix_complex * C);
+
+int gsl_blas_zherk (CBLAS_UPLO_t Uplo,
+ CBLAS_TRANSPOSE_t Trans,
+ double alpha,
+ const gsl_matrix_complex * A,
+ double beta,
+ gsl_matrix_complex * C);
+
+int gsl_blas_zher2k (CBLAS_UPLO_t Uplo,
+ CBLAS_TRANSPOSE_t Trans,
+ const gsl_complex alpha,
+ const gsl_matrix_complex * A,
+ const gsl_matrix_complex * B,
+ double beta,
+ gsl_matrix_complex * C);
+
+
+__END_DECLS
+
+#endif /* __GSL_BLAS_H__ */
diff --git a/thirdparty/includes/GSL/gsl/gsl_blas_types.h b/thirdparty/includes/GSL/gsl/gsl_blas_types.h
new file mode 100644
index 0000000..923edb3
--- /dev/null
+++ b/thirdparty/includes/GSL/gsl/gsl_blas_types.h
@@ -0,0 +1,54 @@
+/* blas/gsl_blas_types.h
+ *
+ * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/*
+ * Author: G. Jungman
+ */
+/* Based on draft BLAST C interface specification [Jul 7 1998]
+ */
+#ifndef __GSL_BLAS_TYPES_H__
+#define __GSL_BLAS_TYPES_H__
+
+#include
+
+#undef __BEGIN_DECLS
+#undef __END_DECLS
+#ifdef __cplusplus
+# define __BEGIN_DECLS extern "C" {
+# define __END_DECLS }
+#else
+# define __BEGIN_DECLS /* empty */
+# define __END_DECLS /* empty */
+#endif
+
+__BEGIN_DECLS
+
+typedef CBLAS_INDEX CBLAS_INDEX_t;
+typedef enum CBLAS_ORDER CBLAS_ORDER_t;
+typedef enum CBLAS_TRANSPOSE CBLAS_TRANSPOSE_t;
+typedef enum CBLAS_UPLO CBLAS_UPLO_t;
+typedef enum CBLAS_DIAG CBLAS_DIAG_t;
+typedef enum CBLAS_SIDE CBLAS_SIDE_t;
+
+/* typedef gsl_complex COMPLEX; */
+
+__END_DECLS
+
+
+#endif /* __GSL_BLAS_TYPES_H__ */
diff --git a/thirdparty/includes/GSL/gsl/gsl_block.h b/thirdparty/includes/GSL/gsl/gsl_block.h
new file mode 100644
index 0000000..f1f9ef8
--- /dev/null
+++ b/thirdparty/includes/GSL/gsl/gsl_block.h
@@ -0,0 +1,24 @@
+#ifndef __GSL_BLOCK_H__
+#define __GSL_BLOCK_H__
+
+#include
+#include
+#include
+
+#include
+#include
+#include
+
+#include
+#include
+
+#include
+#include
+
+#include
+#include
+
+#include
+#include
+
+#endif /* __GSL_BLOCK_H__ */
diff --git a/thirdparty/includes/GSL/gsl/gsl_block_char.h b/thirdparty/includes/GSL/gsl/gsl_block_char.h
new file mode 100644
index 0000000..70bf969
--- /dev/null
+++ b/thirdparty/includes/GSL/gsl/gsl_block_char.h
@@ -0,0 +1,65 @@
+/* block/gsl_block_char.h
+ *
+ * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Gerard Jungman, Brian Gough
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GSL_BLOCK_CHAR_H__
+#define __GSL_BLOCK_CHAR_H__
+
+#include
+#include
+
+#undef __BEGIN_DECLS
+#undef __END_DECLS
+#ifdef __cplusplus
+# define __BEGIN_DECLS extern "C" {
+# define __END_DECLS }
+#else
+# define __BEGIN_DECLS /* empty */
+# define __END_DECLS /* empty */
+#endif
+
+__BEGIN_DECLS
+
+struct gsl_block_char_struct
+{
+ size_t size;
+ char *data;
+};
+
+typedef struct gsl_block_char_struct gsl_block_char;
+
+gsl_block_char *gsl_block_char_alloc (const size_t n);
+gsl_block_char *gsl_block_char_calloc (const size_t n);
+void gsl_block_char_free (gsl_block_char * b);
+
+int gsl_block_char_fread (FILE * stream, gsl_block_char * b);
+int gsl_block_char_fwrite (FILE * stream, const gsl_block_char * b);
+int gsl_block_char_fscanf (FILE * stream, gsl_block_char * b);
+int gsl_block_char_fprintf (FILE * stream, const gsl_block_char * b, const char *format);
+
+int gsl_block_char_raw_fread (FILE * stream, char * b, const size_t n, const size_t stride);
+int gsl_block_char_raw_fwrite (FILE * stream, const char * b, const size_t n, const size_t stride);
+int gsl_block_char_raw_fscanf (FILE * stream, char * b, const size_t n, const size_t stride);
+int gsl_block_char_raw_fprintf (FILE * stream, const char * b, const size_t n, const size_t stride, const char *format);
+
+size_t gsl_block_char_size (const gsl_block_char * b);
+char * gsl_block_char_data (const gsl_block_char * b);
+
+__END_DECLS
+
+#endif /* __GSL_BLOCK_CHAR_H__ */
diff --git a/thirdparty/includes/GSL/gsl/gsl_block_complex_double.h b/thirdparty/includes/GSL/gsl/gsl_block_complex_double.h
new file mode 100644
index 0000000..bcf66c0
--- /dev/null
+++ b/thirdparty/includes/GSL/gsl/gsl_block_complex_double.h
@@ -0,0 +1,65 @@
+/* block/gsl_block_complex_double.h
+ *
+ * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Gerard Jungman, Brian Gough
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GSL_BLOCK_COMPLEX_DOUBLE_H__
+#define __GSL_BLOCK_COMPLEX_DOUBLE_H__
+
+#include
+#include
+
+#undef __BEGIN_DECLS
+#undef __END_DECLS
+#ifdef __cplusplus
+# define __BEGIN_DECLS extern "C" {
+# define __END_DECLS }
+#else
+# define __BEGIN_DECLS /* empty */
+# define __END_DECLS /* empty */
+#endif
+
+__BEGIN_DECLS
+
+struct gsl_block_complex_struct
+{
+ size_t size;
+ double *data;
+};
+
+typedef struct gsl_block_complex_struct gsl_block_complex;
+
+gsl_block_complex *gsl_block_complex_alloc (const size_t n);
+gsl_block_complex *gsl_block_complex_calloc (const size_t n);
+void gsl_block_complex_free (gsl_block_complex * b);
+
+int gsl_block_complex_fread (FILE * stream, gsl_block_complex * b);
+int gsl_block_complex_fwrite (FILE * stream, const gsl_block_complex * b);
+int gsl_block_complex_fscanf (FILE * stream, gsl_block_complex * b);
+int gsl_block_complex_fprintf (FILE * stream, const gsl_block_complex * b, const char *format);
+
+int gsl_block_complex_raw_fread (FILE * stream, double * b, const size_t n, const size_t stride);
+int gsl_block_complex_raw_fwrite (FILE * stream, const double * b, const size_t n, const size_t stride);
+int gsl_block_complex_raw_fscanf (FILE * stream, double * b, const size_t n, const size_t stride);
+int gsl_block_complex_raw_fprintf (FILE * stream, const double * b, const size_t n, const size_t stride, const char *format);
+
+size_t gsl_block_complex_size (const gsl_block_complex * b);
+double * gsl_block_complex_data (const gsl_block_complex * b);
+
+__END_DECLS
+
+#endif /* __GSL_BLOCK_COMPLEX_DOUBLE_H__ */
diff --git a/thirdparty/includes/GSL/gsl/gsl_block_complex_float.h b/thirdparty/includes/GSL/gsl/gsl_block_complex_float.h
new file mode 100644
index 0000000..03595dc
--- /dev/null
+++ b/thirdparty/includes/GSL/gsl/gsl_block_complex_float.h
@@ -0,0 +1,65 @@
+/* block/gsl_block_complex_float.h
+ *
+ * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Gerard Jungman, Brian Gough
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GSL_BLOCK_COMPLEX_FLOAT_H__
+#define __GSL_BLOCK_COMPLEX_FLOAT_H__
+
+#include
+#include
+
+#undef __BEGIN_DECLS
+#undef __END_DECLS
+#ifdef __cplusplus
+# define __BEGIN_DECLS extern "C" {
+# define __END_DECLS }
+#else
+# define __BEGIN_DECLS /* empty */
+# define __END_DECLS /* empty */
+#endif
+
+__BEGIN_DECLS
+
+struct gsl_block_complex_float_struct
+{
+ size_t size;
+ float *data;
+};
+
+typedef struct gsl_block_complex_float_struct gsl_block_complex_float;
+
+gsl_block_complex_float *gsl_block_complex_float_alloc (const size_t n);
+gsl_block_complex_float *gsl_block_complex_float_calloc (const size_t n);
+void gsl_block_complex_float_free (gsl_block_complex_float * b);
+
+int gsl_block_complex_float_fread (FILE * stream, gsl_block_complex_float * b);
+int gsl_block_complex_float_fwrite (FILE * stream, const gsl_block_complex_float * b);
+int gsl_block_complex_float_fscanf (FILE * stream, gsl_block_complex_float * b);
+int gsl_block_complex_float_fprintf (FILE * stream, const gsl_block_complex_float * b, const char *format);
+
+int gsl_block_complex_float_raw_fread (FILE * stream, float * b, const size_t n, const size_t stride);
+int gsl_block_complex_float_raw_fwrite (FILE * stream, const float * b, const size_t n, const size_t stride);
+int gsl_block_complex_float_raw_fscanf (FILE * stream, float * b, const size_t n, const size_t stride);
+int gsl_block_complex_float_raw_fprintf (FILE * stream, const float * b, const size_t n, const size_t stride, const char *format);
+
+size_t gsl_block_complex_float_size (const gsl_block_complex_float * b);
+float * gsl_block_complex_float_data (const gsl_block_complex_float * b);
+
+__END_DECLS
+
+#endif /* __GSL_BLOCK_COMPLEX_FLOAT_H__ */
diff --git a/thirdparty/includes/GSL/gsl/gsl_block_complex_long_double.h b/thirdparty/includes/GSL/gsl/gsl_block_complex_long_double.h
new file mode 100644
index 0000000..eb0c605
--- /dev/null
+++ b/thirdparty/includes/GSL/gsl/gsl_block_complex_long_double.h
@@ -0,0 +1,65 @@
+/* block/gsl_block_complex_long_double.h
+ *
+ * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Gerard Jungman, Brian Gough
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GSL_BLOCK_COMPLEX_LONG_DOUBLE_H__
+#define __GSL_BLOCK_COMPLEX_LONG_DOUBLE_H__
+
+#include
+#include
+
+#undef __BEGIN_DECLS
+#undef __END_DECLS
+#ifdef __cplusplus
+# define __BEGIN_DECLS extern "C" {
+# define __END_DECLS }
+#else
+# define __BEGIN_DECLS /* empty */
+# define __END_DECLS /* empty */
+#endif
+
+__BEGIN_DECLS
+
+struct gsl_block_complex_long_double_struct
+{
+ size_t size;
+ long double *data;
+};
+
+typedef struct gsl_block_complex_long_double_struct gsl_block_complex_long_double;
+
+gsl_block_complex_long_double *gsl_block_complex_long_double_alloc (const size_t n);
+gsl_block_complex_long_double *gsl_block_complex_long_double_calloc (const size_t n);
+void gsl_block_complex_long_double_free (gsl_block_complex_long_double * b);
+
+int gsl_block_complex_long_double_fread (FILE * stream, gsl_block_complex_long_double * b);
+int gsl_block_complex_long_double_fwrite (FILE * stream, const gsl_block_complex_long_double * b);
+int gsl_block_complex_long_double_fscanf (FILE * stream, gsl_block_complex_long_double * b);
+int gsl_block_complex_long_double_fprintf (FILE * stream, const gsl_block_complex_long_double * b, const char *format);
+
+int gsl_block_complex_long_double_raw_fread (FILE * stream, long double * b, const size_t n, const size_t stride);
+int gsl_block_complex_long_double_raw_fwrite (FILE * stream, const long double * b, const size_t n, const size_t stride);
+int gsl_block_complex_long_double_raw_fscanf (FILE * stream, long double * b, const size_t n, const size_t stride);
+int gsl_block_complex_long_double_raw_fprintf (FILE * stream, const long double * b, const size_t n, const size_t stride, const char *format);
+
+size_t gsl_block_complex_long_double_size (const gsl_block_complex_long_double * b);
+long double * gsl_block_complex_long_double_data (const gsl_block_complex_long_double * b);
+
+__END_DECLS
+
+#endif /* __GSL_BLOCK_COMPLEX_LONG_DOUBLE_H__ */
diff --git a/thirdparty/includes/GSL/gsl/gsl_block_double.h b/thirdparty/includes/GSL/gsl/gsl_block_double.h
new file mode 100644
index 0000000..3a95f4d
--- /dev/null
+++ b/thirdparty/includes/GSL/gsl/gsl_block_double.h
@@ -0,0 +1,65 @@
+/* block/gsl_block_double.h
+ *
+ * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Gerard Jungman, Brian Gough
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GSL_BLOCK_DOUBLE_H__
+#define __GSL_BLOCK_DOUBLE_H__
+
+#include
+#include
+
+#undef __BEGIN_DECLS
+#undef __END_DECLS
+#ifdef __cplusplus
+# define __BEGIN_DECLS extern "C" {
+# define __END_DECLS }
+#else
+# define __BEGIN_DECLS /* empty */
+# define __END_DECLS /* empty */
+#endif
+
+__BEGIN_DECLS
+
+struct gsl_block_struct
+{
+ size_t size;
+ double *data;
+};
+
+typedef struct gsl_block_struct gsl_block;
+
+gsl_block *gsl_block_alloc (const size_t n);
+gsl_block *gsl_block_calloc (const size_t n);
+void gsl_block_free (gsl_block * b);
+
+int gsl_block_fread (FILE * stream, gsl_block * b);
+int gsl_block_fwrite (FILE * stream, const gsl_block * b);
+int gsl_block_fscanf (FILE * stream, gsl_block * b);
+int gsl_block_fprintf (FILE * stream, const gsl_block * b, const char *format);
+
+int gsl_block_raw_fread (FILE * stream, double * b, const size_t n, const size_t stride);
+int gsl_block_raw_fwrite (FILE * stream, const double * b, const size_t n, const size_t stride);
+int gsl_block_raw_fscanf (FILE * stream, double * b, const size_t n, const size_t stride);
+int gsl_block_raw_fprintf (FILE * stream, const double * b, const size_t n, const size_t stride, const char *format);
+
+size_t gsl_block_size (const gsl_block * b);
+double * gsl_block_data (const gsl_block * b);
+
+__END_DECLS
+
+#endif /* __GSL_BLOCK_DOUBLE_H__ */
diff --git a/thirdparty/includes/GSL/gsl/gsl_block_float.h b/thirdparty/includes/GSL/gsl/gsl_block_float.h
new file mode 100644
index 0000000..f1c3fb3
--- /dev/null
+++ b/thirdparty/includes/GSL/gsl/gsl_block_float.h
@@ -0,0 +1,65 @@
+/* block/gsl_block_float.h
+ *
+ * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Gerard Jungman, Brian Gough
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GSL_BLOCK_FLOAT_H__
+#define __GSL_BLOCK_FLOAT_H__
+
+#include
+#include
+
+#undef __BEGIN_DECLS
+#undef __END_DECLS
+#ifdef __cplusplus
+# define __BEGIN_DECLS extern "C" {
+# define __END_DECLS }
+#else
+# define __BEGIN_DECLS /* empty */
+# define __END_DECLS /* empty */
+#endif
+
+__BEGIN_DECLS
+
+struct gsl_block_float_struct
+{
+ size_t size;
+ float *data;
+};
+
+typedef struct gsl_block_float_struct gsl_block_float;
+
+gsl_block_float *gsl_block_float_alloc (const size_t n);
+gsl_block_float *gsl_block_float_calloc (const size_t n);
+void gsl_block_float_free (gsl_block_float * b);
+
+int gsl_block_float_fread (FILE * stream, gsl_block_float * b);
+int gsl_block_float_fwrite (FILE * stream, const gsl_block_float * b);
+int gsl_block_float_fscanf (FILE * stream, gsl_block_float * b);
+int gsl_block_float_fprintf (FILE * stream, const gsl_block_float * b, const char *format);
+
+int gsl_block_float_raw_fread (FILE * stream, float * b, const size_t n, const size_t stride);
+int gsl_block_float_raw_fwrite (FILE * stream, const float * b, const size_t n, const size_t stride);
+int gsl_block_float_raw_fscanf (FILE * stream, float * b, const size_t n, const size_t stride);
+int gsl_block_float_raw_fprintf (FILE * stream, const float * b, const size_t n, const size_t stride, const char *format);
+
+size_t gsl_block_float_size (const gsl_block_float * b);
+float * gsl_block_float_data (const gsl_block_float * b);
+
+__END_DECLS
+
+#endif /* __GSL_BLOCK_FLOAT_H__ */
diff --git a/thirdparty/includes/GSL/gsl/gsl_block_int.h b/thirdparty/includes/GSL/gsl/gsl_block_int.h
new file mode 100644
index 0000000..2213f47
--- /dev/null
+++ b/thirdparty/includes/GSL/gsl/gsl_block_int.h
@@ -0,0 +1,65 @@
+/* block/gsl_block_int.h
+ *
+ * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Gerard Jungman, Brian Gough
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GSL_BLOCK_INT_H__
+#define __GSL_BLOCK_INT_H__
+
+#include
+#include
+
+#undef __BEGIN_DECLS
+#undef __END_DECLS
+#ifdef __cplusplus
+# define __BEGIN_DECLS extern "C" {
+# define __END_DECLS }
+#else
+# define __BEGIN_DECLS /* empty */
+# define __END_DECLS /* empty */
+#endif
+
+__BEGIN_DECLS
+
+struct gsl_block_int_struct
+{
+ size_t size;
+ int *data;
+};
+
+typedef struct gsl_block_int_struct gsl_block_int;
+
+gsl_block_int *gsl_block_int_alloc (const size_t n);
+gsl_block_int *gsl_block_int_calloc (const size_t n);
+void gsl_block_int_free (gsl_block_int * b);
+
+int gsl_block_int_fread (FILE * stream, gsl_block_int * b);
+int gsl_block_int_fwrite (FILE * stream, const gsl_block_int * b);
+int gsl_block_int_fscanf (FILE * stream, gsl_block_int * b);
+int gsl_block_int_fprintf (FILE * stream, const gsl_block_int * b, const char *format);
+
+int gsl_block_int_raw_fread (FILE * stream, int * b, const size_t n, const size_t stride);
+int gsl_block_int_raw_fwrite (FILE * stream, const int * b, const size_t n, const size_t stride);
+int gsl_block_int_raw_fscanf (FILE * stream, int * b, const size_t n, const size_t stride);
+int gsl_block_int_raw_fprintf (FILE * stream, const int * b, const size_t n, const size_t stride, const char *format);
+
+size_t gsl_block_int_size (const gsl_block_int * b);
+int * gsl_block_int_data (const gsl_block_int * b);
+
+__END_DECLS
+
+#endif /* __GSL_BLOCK_INT_H__ */
diff --git a/thirdparty/includes/GSL/gsl/gsl_block_long.h b/thirdparty/includes/GSL/gsl/gsl_block_long.h
new file mode 100644
index 0000000..0c30aa5
--- /dev/null
+++ b/thirdparty/includes/GSL/gsl/gsl_block_long.h
@@ -0,0 +1,65 @@
+/* block/gsl_block_long.h
+ *
+ * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Gerard Jungman, Brian Gough
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GSL_BLOCK_LONG_H__
+#define __GSL_BLOCK_LONG_H__
+
+#include
+#include
+
+#undef __BEGIN_DECLS
+#undef __END_DECLS
+#ifdef __cplusplus
+# define __BEGIN_DECLS extern "C" {
+# define __END_DECLS }
+#else
+# define __BEGIN_DECLS /* empty */
+# define __END_DECLS /* empty */
+#endif
+
+__BEGIN_DECLS
+
+struct gsl_block_long_struct
+{
+ size_t size;
+ long *data;
+};
+
+typedef struct gsl_block_long_struct gsl_block_long;
+
+gsl_block_long *gsl_block_long_alloc (const size_t n);
+gsl_block_long *gsl_block_long_calloc (const size_t n);
+void gsl_block_long_free (gsl_block_long * b);
+
+int gsl_block_long_fread (FILE * stream, gsl_block_long * b);
+int gsl_block_long_fwrite (FILE * stream, const gsl_block_long * b);
+int gsl_block_long_fscanf (FILE * stream, gsl_block_long * b);
+int gsl_block_long_fprintf (FILE * stream, const gsl_block_long * b, const char *format);
+
+int gsl_block_long_raw_fread (FILE * stream, long * b, const size_t n, const size_t stride);
+int gsl_block_long_raw_fwrite (FILE * stream, const long * b, const size_t n, const size_t stride);
+int gsl_block_long_raw_fscanf (FILE * stream, long * b, const size_t n, const size_t stride);
+int gsl_block_long_raw_fprintf (FILE * stream, const long * b, const size_t n, const size_t stride, const char *format);
+
+size_t gsl_block_long_size (const gsl_block_long * b);
+long * gsl_block_long_data (const gsl_block_long * b);
+
+__END_DECLS
+
+#endif /* __GSL_BLOCK_LONG_H__ */
diff --git a/thirdparty/includes/GSL/gsl/gsl_block_long_double.h b/thirdparty/includes/GSL/gsl/gsl_block_long_double.h
new file mode 100644
index 0000000..639cd81
--- /dev/null
+++ b/thirdparty/includes/GSL/gsl/gsl_block_long_double.h
@@ -0,0 +1,65 @@
+/* block/gsl_block_long_double.h
+ *
+ * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Gerard Jungman, Brian Gough
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GSL_BLOCK_LONG_DOUBLE_H__
+#define __GSL_BLOCK_LONG_DOUBLE_H__
+
+#include
+#include
+
+#undef __BEGIN_DECLS
+#undef __END_DECLS
+#ifdef __cplusplus
+# define __BEGIN_DECLS extern "C" {
+# define __END_DECLS }
+#else
+# define __BEGIN_DECLS /* empty */
+# define __END_DECLS /* empty */
+#endif
+
+__BEGIN_DECLS
+
+struct gsl_block_long_double_struct
+{
+ size_t size;
+ long double *data;
+};
+
+typedef struct gsl_block_long_double_struct gsl_block_long_double;
+
+gsl_block_long_double *gsl_block_long_double_alloc (const size_t n);
+gsl_block_long_double *gsl_block_long_double_calloc (const size_t n);
+void gsl_block_long_double_free (gsl_block_long_double * b);
+
+int gsl_block_long_double_fread (FILE * stream, gsl_block_long_double * b);
+int gsl_block_long_double_fwrite (FILE * stream, const gsl_block_long_double * b);
+int gsl_block_long_double_fscanf (FILE * stream, gsl_block_long_double * b);
+int gsl_block_long_double_fprintf (FILE * stream, const gsl_block_long_double * b, const char *format);
+
+int gsl_block_long_double_raw_fread (FILE * stream, long double * b, const size_t n, const size_t stride);
+int gsl_block_long_double_raw_fwrite (FILE * stream, const long double * b, const size_t n, const size_t stride);
+int gsl_block_long_double_raw_fscanf (FILE * stream, long double * b, const size_t n, const size_t stride);
+int gsl_block_long_double_raw_fprintf (FILE * stream, const long double * b, const size_t n, const size_t stride, const char *format);
+
+size_t gsl_block_long_double_size (const gsl_block_long_double * b);
+long double * gsl_block_long_double_data (const gsl_block_long_double * b);
+
+__END_DECLS
+
+#endif /* __GSL_BLOCK_LONG_DOUBLE_H__ */
diff --git a/thirdparty/includes/GSL/gsl/gsl_block_short.h b/thirdparty/includes/GSL/gsl/gsl_block_short.h
new file mode 100644
index 0000000..9744775
--- /dev/null
+++ b/thirdparty/includes/GSL/gsl/gsl_block_short.h
@@ -0,0 +1,65 @@
+/* block/gsl_block_short.h
+ *
+ * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Gerard Jungman, Brian Gough
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GSL_BLOCK_SHORT_H__
+#define __GSL_BLOCK_SHORT_H__
+
+#include
+#include
+
+#undef __BEGIN_DECLS
+#undef __END_DECLS
+#ifdef __cplusplus
+# define __BEGIN_DECLS extern "C" {
+# define __END_DECLS }
+#else
+# define __BEGIN_DECLS /* empty */
+# define __END_DECLS /* empty */
+#endif
+
+__BEGIN_DECLS
+
+struct gsl_block_short_struct
+{
+ size_t size;
+ short *data;
+};
+
+typedef struct gsl_block_short_struct gsl_block_short;
+
+gsl_block_short *gsl_block_short_alloc (const size_t n);
+gsl_block_short *gsl_block_short_calloc (const size_t n);
+void gsl_block_short_free (gsl_block_short * b);
+
+int gsl_block_short_fread (FILE * stream, gsl_block_short * b);
+int gsl_block_short_fwrite (FILE * stream, const gsl_block_short * b);
+int gsl_block_short_fscanf (FILE * stream, gsl_block_short * b);
+int gsl_block_short_fprintf (FILE * stream, const gsl_block_short * b, const char *format);
+
+int gsl_block_short_raw_fread (FILE * stream, short * b, const size_t n, const size_t stride);
+int gsl_block_short_raw_fwrite (FILE * stream, const short * b, const size_t n, const size_t stride);
+int gsl_block_short_raw_fscanf (FILE * stream, short * b, const size_t n, const size_t stride);
+int gsl_block_short_raw_fprintf (FILE * stream, const short * b, const size_t n, const size_t stride, const char *format);
+
+size_t gsl_block_short_size (const gsl_block_short * b);
+short * gsl_block_short_data (const gsl_block_short * b);
+
+__END_DECLS
+
+#endif /* __GSL_BLOCK_SHORT_H__ */
diff --git a/thirdparty/includes/GSL/gsl/gsl_block_uchar.h b/thirdparty/includes/GSL/gsl/gsl_block_uchar.h
new file mode 100644
index 0000000..58cf789
--- /dev/null
+++ b/thirdparty/includes/GSL/gsl/gsl_block_uchar.h
@@ -0,0 +1,65 @@
+/* block/gsl_block_uchar.h
+ *
+ * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Gerard Jungman, Brian Gough
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GSL_BLOCK_UCHAR_H__
+#define __GSL_BLOCK_UCHAR_H__
+
+#include
+#include
+
+#undef __BEGIN_DECLS
+#undef __END_DECLS
+#ifdef __cplusplus
+# define __BEGIN_DECLS extern "C" {
+# define __END_DECLS }
+#else
+# define __BEGIN_DECLS /* empty */
+# define __END_DECLS /* empty */
+#endif
+
+__BEGIN_DECLS
+
+struct gsl_block_uchar_struct
+{
+ size_t size;
+ unsigned char *data;
+};
+
+typedef struct gsl_block_uchar_struct gsl_block_uchar;
+
+gsl_block_uchar *gsl_block_uchar_alloc (const size_t n);
+gsl_block_uchar *gsl_block_uchar_calloc (const size_t n);
+void gsl_block_uchar_free (gsl_block_uchar * b);
+
+int gsl_block_uchar_fread (FILE * stream, gsl_block_uchar * b);
+int gsl_block_uchar_fwrite (FILE * stream, const gsl_block_uchar * b);
+int gsl_block_uchar_fscanf (FILE * stream, gsl_block_uchar * b);
+int gsl_block_uchar_fprintf (FILE * stream, const gsl_block_uchar * b, const char *format);
+
+int gsl_block_uchar_raw_fread (FILE * stream, unsigned char * b, const size_t n, const size_t stride);
+int gsl_block_uchar_raw_fwrite (FILE * stream, const unsigned char * b, const size_t n, const size_t stride);
+int gsl_block_uchar_raw_fscanf (FILE * stream, unsigned char * b, const size_t n, const size_t stride);
+int gsl_block_uchar_raw_fprintf (FILE * stream, const unsigned char * b, const size_t n, const size_t stride, const char *format);
+
+size_t gsl_block_uchar_size (const gsl_block_uchar * b);
+unsigned char * gsl_block_uchar_data (const gsl_block_uchar * b);
+
+__END_DECLS
+
+#endif /* __GSL_BLOCK_UCHAR_H__ */
diff --git a/thirdparty/includes/GSL/gsl/gsl_block_uint.h b/thirdparty/includes/GSL/gsl/gsl_block_uint.h
new file mode 100644
index 0000000..52cf2cb
--- /dev/null
+++ b/thirdparty/includes/GSL/gsl/gsl_block_uint.h
@@ -0,0 +1,65 @@
+/* block/gsl_block_uint.h
+ *
+ * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Gerard Jungman, Brian Gough
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GSL_BLOCK_UINT_H__
+#define __GSL_BLOCK_UINT_H__
+
+#include
+#include
+
+#undef __BEGIN_DECLS
+#undef __END_DECLS
+#ifdef __cplusplus
+# define __BEGIN_DECLS extern "C" {
+# define __END_DECLS }
+#else
+# define __BEGIN_DECLS /* empty */
+# define __END_DECLS /* empty */
+#endif
+
+__BEGIN_DECLS
+
+struct gsl_block_uint_struct
+{
+ size_t size;
+ unsigned int *data;
+};
+
+typedef struct gsl_block_uint_struct gsl_block_uint;
+
+gsl_block_uint *gsl_block_uint_alloc (const size_t n);
+gsl_block_uint *gsl_block_uint_calloc (const size_t n);
+void gsl_block_uint_free (gsl_block_uint * b);
+
+int gsl_block_uint_fread (FILE * stream, gsl_block_uint * b);
+int gsl_block_uint_fwrite (FILE * stream, const gsl_block_uint * b);
+int gsl_block_uint_fscanf (FILE * stream, gsl_block_uint * b);
+int gsl_block_uint_fprintf (FILE * stream, const gsl_block_uint * b, const char *format);
+
+int gsl_block_uint_raw_fread (FILE * stream, unsigned int * b, const size_t n, const size_t stride);
+int gsl_block_uint_raw_fwrite (FILE * stream, const unsigned int * b, const size_t n, const size_t stride);
+int gsl_block_uint_raw_fscanf (FILE * stream, unsigned int * b, const size_t n, const size_t stride);
+int gsl_block_uint_raw_fprintf (FILE * stream, const unsigned int * b, const size_t n, const size_t stride, const char *format);
+
+size_t gsl_block_uint_size (const gsl_block_uint * b);
+unsigned int * gsl_block_uint_data (const gsl_block_uint * b);
+
+__END_DECLS
+
+#endif /* __GSL_BLOCK_UINT_H__ */
diff --git a/thirdparty/includes/GSL/gsl/gsl_block_ulong.h b/thirdparty/includes/GSL/gsl/gsl_block_ulong.h
new file mode 100644
index 0000000..863ff47
--- /dev/null
+++ b/thirdparty/includes/GSL/gsl/gsl_block_ulong.h
@@ -0,0 +1,65 @@
+/* block/gsl_block_ulong.h
+ *
+ * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Gerard Jungman, Brian Gough
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GSL_BLOCK_ULONG_H__
+#define __GSL_BLOCK_ULONG_H__
+
+#include
+#include
+
+#undef __BEGIN_DECLS
+#undef __END_DECLS
+#ifdef __cplusplus
+# define __BEGIN_DECLS extern "C" {
+# define __END_DECLS }
+#else
+# define __BEGIN_DECLS /* empty */
+# define __END_DECLS /* empty */
+#endif
+
+__BEGIN_DECLS
+
+struct gsl_block_ulong_struct
+{
+ size_t size;
+ unsigned long *data;
+};
+
+typedef struct gsl_block_ulong_struct gsl_block_ulong;
+
+gsl_block_ulong *gsl_block_ulong_alloc (const size_t n);
+gsl_block_ulong *gsl_block_ulong_calloc (const size_t n);
+void gsl_block_ulong_free (gsl_block_ulong * b);
+
+int gsl_block_ulong_fread (FILE * stream, gsl_block_ulong * b);
+int gsl_block_ulong_fwrite (FILE * stream, const gsl_block_ulong * b);
+int gsl_block_ulong_fscanf (FILE * stream, gsl_block_ulong * b);
+int gsl_block_ulong_fprintf (FILE * stream, const gsl_block_ulong * b, const char *format);
+
+int gsl_block_ulong_raw_fread (FILE * stream, unsigned long * b, const size_t n, const size_t stride);
+int gsl_block_ulong_raw_fwrite (FILE * stream, const unsigned long * b, const size_t n, const size_t stride);
+int gsl_block_ulong_raw_fscanf (FILE * stream, unsigned long * b, const size_t n, const size_t stride);
+int gsl_block_ulong_raw_fprintf (FILE * stream, const unsigned long * b, const size_t n, const size_t stride, const char *format);
+
+size_t gsl_block_ulong_size (const gsl_block_ulong * b);
+unsigned long * gsl_block_ulong_data (const gsl_block_ulong * b);
+
+__END_DECLS
+
+#endif /* __GSL_BLOCK_ULONG_H__ */
diff --git a/thirdparty/includes/GSL/gsl/gsl_block_ushort.h b/thirdparty/includes/GSL/gsl/gsl_block_ushort.h
new file mode 100644
index 0000000..24ad7db
--- /dev/null
+++ b/thirdparty/includes/GSL/gsl/gsl_block_ushort.h
@@ -0,0 +1,65 @@
+/* block/gsl_block_ushort.h
+ *
+ * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Gerard Jungman, Brian Gough
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GSL_BLOCK_USHORT_H__
+#define __GSL_BLOCK_USHORT_H__
+
+#include
+#include
+
+#undef __BEGIN_DECLS
+#undef __END_DECLS
+#ifdef __cplusplus
+# define __BEGIN_DECLS extern "C" {
+# define __END_DECLS }
+#else
+# define __BEGIN_DECLS /* empty */
+# define __END_DECLS /* empty */
+#endif
+
+__BEGIN_DECLS
+
+struct gsl_block_ushort_struct
+{
+ size_t size;
+ unsigned short *data;
+};
+
+typedef struct gsl_block_ushort_struct gsl_block_ushort;
+
+gsl_block_ushort *gsl_block_ushort_alloc (const size_t n);
+gsl_block_ushort *gsl_block_ushort_calloc (const size_t n);
+void gsl_block_ushort_free (gsl_block_ushort * b);
+
+int gsl_block_ushort_fread (FILE * stream, gsl_block_ushort * b);
+int gsl_block_ushort_fwrite (FILE * stream, const gsl_block_ushort * b);
+int gsl_block_ushort_fscanf (FILE * stream, gsl_block_ushort * b);
+int gsl_block_ushort_fprintf (FILE * stream, const gsl_block_ushort * b, const char *format);
+
+int gsl_block_ushort_raw_fread (FILE * stream, unsigned short * b, const size_t n, const size_t stride);
+int gsl_block_ushort_raw_fwrite (FILE * stream, const unsigned short * b, const size_t n, const size_t stride);
+int gsl_block_ushort_raw_fscanf (FILE * stream, unsigned short * b, const size_t n, const size_t stride);
+int gsl_block_ushort_raw_fprintf (FILE * stream, const unsigned short * b, const size_t n, const size_t stride, const char *format);
+
+size_t gsl_block_ushort_size (const gsl_block_ushort * b);
+unsigned short * gsl_block_ushort_data (const gsl_block_ushort * b);
+
+__END_DECLS
+
+#endif /* __GSL_BLOCK_USHORT_H__ */
diff --git a/thirdparty/includes/GSL/gsl/gsl_bspline.h b/thirdparty/includes/GSL/gsl/gsl_bspline.h
new file mode 100644
index 0000000..ac81377
--- /dev/null
+++ b/thirdparty/includes/GSL/gsl/gsl_bspline.h
@@ -0,0 +1,122 @@
+/* bspline/gsl_bspline.h
+ *
+ * Copyright (C) 2006 Patrick Alken
+ * Copyright (C) 2008 Rhys Ulerich
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GSL_BSPLINE_H__
+#define __GSL_BSPLINE_H__
+
+#include
+#include
+#include
+#include
+
+#undef __BEGIN_DECLS
+#undef __END_DECLS
+#ifdef __cplusplus
+# define __BEGIN_DECLS extern "C" {
+# define __END_DECLS }
+#else
+# define __BEGIN_DECLS /* empty */
+# define __END_DECLS /* empty */
+#endif
+
+__BEGIN_DECLS
+
+typedef struct
+{
+ size_t k; /* spline order */
+ size_t km1; /* k - 1 (polynomial order) */
+ size_t l; /* number of polynomial pieces on interval */
+ size_t nbreak; /* number of breakpoints (l + 1) */
+ size_t n; /* number of bspline basis functions (l + k - 1) */
+
+ gsl_vector *knots; /* knots vector */
+ gsl_vector *deltal; /* left delta */
+ gsl_vector *deltar; /* right delta */
+ gsl_vector *B; /* temporary spline results */
+
+ /* bspline derivative parameters */
+ gsl_matrix *A; /* work matrix */
+ gsl_matrix *dB; /* temporary derivative results */
+} gsl_bspline_workspace;
+
+#ifndef GSL_DISABLE_DEPRECATED
+
+typedef struct
+{
+ size_t k; /* spline order */
+ gsl_matrix *A; /* work matrix */
+ gsl_matrix *dB; /* temporary derivative results */
+} gsl_bspline_deriv_workspace;
+
+gsl_bspline_deriv_workspace *gsl_bspline_deriv_alloc(const size_t k);
+void gsl_bspline_deriv_free(gsl_bspline_deriv_workspace *w);
+
+#endif /* !GSL_DISABLE_DEPRECATED */
+
+gsl_bspline_workspace *
+gsl_bspline_alloc(const size_t k, const size_t nbreak);
+
+void gsl_bspline_free(gsl_bspline_workspace *w);
+
+size_t gsl_bspline_ncoeffs(gsl_bspline_workspace * w);
+size_t gsl_bspline_order(gsl_bspline_workspace * w);
+size_t gsl_bspline_nbreak(gsl_bspline_workspace * w);
+double gsl_bspline_breakpoint(size_t i, gsl_bspline_workspace * w);
+double gsl_bspline_greville_abscissa(size_t i, gsl_bspline_workspace *w);
+
+int
+gsl_bspline_knots(const gsl_vector *breakpts, gsl_bspline_workspace *w);
+
+int gsl_bspline_knots_uniform(const double a, const double b,
+ gsl_bspline_workspace *w);
+
+int
+gsl_bspline_knots_greville(const gsl_vector *abscissae,
+ gsl_bspline_workspace *w,
+ double *abserr);
+
+int
+gsl_bspline_eval(const double x, gsl_vector *B,
+ gsl_bspline_workspace *w);
+
+int
+gsl_bspline_eval_nonzero(const double x,
+ gsl_vector *Bk,
+ size_t *istart,
+ size_t *iend,
+ gsl_bspline_workspace *w);
+
+int
+gsl_bspline_deriv_eval(const double x,
+ const size_t nderiv,
+ gsl_matrix *dB,
+ gsl_bspline_workspace *w);
+
+int
+gsl_bspline_deriv_eval_nonzero(const double x,
+ const size_t nderiv,
+ gsl_matrix *dB,
+ size_t *istart,
+ size_t *iend,
+ gsl_bspline_workspace *w);
+
+__END_DECLS
+
+#endif /* __GSL_BSPLINE_H__ */
diff --git a/thirdparty/includes/GSL/gsl/gsl_cblas.h b/thirdparty/includes/GSL/gsl/gsl_cblas.h
new file mode 100644
index 0000000..e90e3b0
--- /dev/null
+++ b/thirdparty/includes/GSL/gsl/gsl_cblas.h
@@ -0,0 +1,606 @@
+/* blas/gsl_cblas.h
+ *
+ * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* This is a copy of the CBLAS standard header.
+ * We carry this around so we do not have to
+ * break our model for flexible BLAS functionality.
+ */
+
+#ifndef __GSL_CBLAS_H__
+#define __GSL_CBLAS_H__
+#include
+
+#undef __BEGIN_DECLS
+#undef __END_DECLS
+#ifdef __cplusplus
+#define __BEGIN_DECLS extern "C" {
+#define __END_DECLS }
+#else
+#define __BEGIN_DECLS /* empty */
+#define __END_DECLS /* empty */
+#endif
+
+__BEGIN_DECLS
+
+/*
+ * Enumerated and derived types
+ */
+#define CBLAS_INDEX size_t /* this may vary between platforms */
+
+enum CBLAS_ORDER {CblasRowMajor=101, CblasColMajor=102};
+enum CBLAS_TRANSPOSE {CblasNoTrans=111, CblasTrans=112, CblasConjTrans=113};
+enum CBLAS_UPLO {CblasUpper=121, CblasLower=122};
+enum CBLAS_DIAG {CblasNonUnit=131, CblasUnit=132};
+enum CBLAS_SIDE {CblasLeft=141, CblasRight=142};
+
+/*
+ * ===========================================================================
+ * Prototypes for level 1 BLAS functions (complex are recast as routines)
+ * ===========================================================================
+ */
+float cblas_sdsdot(const int N, const float alpha, const float *X,
+ const int incX, const float *Y, const int incY);
+double cblas_dsdot(const int N, const float *X, const int incX, const float *Y,
+ const int incY);
+float cblas_sdot(const int N, const float *X, const int incX,
+ const float *Y, const int incY);
+double cblas_ddot(const int N, const double *X, const int incX,
+ const double *Y, const int incY);
+
+/*
+ * Functions having prefixes Z and C only
+ */
+void cblas_cdotu_sub(const int N, const void *X, const int incX,
+ const void *Y, const int incY, void *dotu);
+void cblas_cdotc_sub(const int N, const void *X, const int incX,
+ const void *Y, const int incY, void *dotc);
+
+void cblas_zdotu_sub(const int N, const void *X, const int incX,
+ const void *Y, const int incY, void *dotu);
+void cblas_zdotc_sub(const int N, const void *X, const int incX,
+ const void *Y, const int incY, void *dotc);
+
+
+/*
+ * Functions having prefixes S D SC DZ
+ */
+float cblas_snrm2(const int N, const float *X, const int incX);
+float cblas_sasum(const int N, const float *X, const int incX);
+
+double cblas_dnrm2(const int N, const double *X, const int incX);
+double cblas_dasum(const int N, const double *X, const int incX);
+
+float cblas_scnrm2(const int N, const void *X, const int incX);
+float cblas_scasum(const int N, const void *X, const int incX);
+
+double cblas_dznrm2(const int N, const void *X, const int incX);
+double cblas_dzasum(const int N, const void *X, const int incX);
+
+
+/*
+ * Functions having standard 4 prefixes (S D C Z)
+ */
+CBLAS_INDEX cblas_isamax(const int N, const float *X, const int incX);
+CBLAS_INDEX cblas_idamax(const int N, const double *X, const int incX);
+CBLAS_INDEX cblas_icamax(const int N, const void *X, const int incX);
+CBLAS_INDEX cblas_izamax(const int N, const void *X, const int incX);
+
+/*
+ * ===========================================================================
+ * Prototypes for level 1 BLAS routines
+ * ===========================================================================
+ */
+
+/*
+ * Routines with standard 4 prefixes (s, d, c, z)
+ */
+void cblas_sswap(const int N, float *X, const int incX,
+ float *Y, const int incY);
+void cblas_scopy(const int N, const float *X, const int incX,
+ float *Y, const int incY);
+void cblas_saxpy(const int N, const float alpha, const float *X,
+ const int incX, float *Y, const int incY);
+
+void cblas_dswap(const int N, double *X, const int incX,
+ double *Y, const int incY);
+void cblas_dcopy(const int N, const double *X, const int incX,
+ double *Y, const int incY);
+void cblas_daxpy(const int N, const double alpha, const double *X,
+ const int incX, double *Y, const int incY);
+
+void cblas_cswap(const int N, void *X, const int incX,
+ void *Y, const int incY);
+void cblas_ccopy(const int N, const void *X, const int incX,
+ void *Y, const int incY);
+void cblas_caxpy(const int N, const void *alpha, const void *X,
+ const int incX, void *Y, const int incY);
+
+void cblas_zswap(const int N, void *X, const int incX,
+ void *Y, const int incY);
+void cblas_zcopy(const int N, const void *X, const int incX,
+ void *Y, const int incY);
+void cblas_zaxpy(const int N, const void *alpha, const void *X,
+ const int incX, void *Y, const int incY);
+
+
+/*
+ * Routines with S and D prefix only
+ */
+void cblas_srotg(float *a, float *b, float *c, float *s);
+void cblas_srotmg(float *d1, float *d2, float *b1, const float b2, float *P);
+void cblas_srot(const int N, float *X, const int incX,
+ float *Y, const int incY, const float c, const float s);
+void cblas_srotm(const int N, float *X, const int incX,
+ float *Y, const int incY, const float *P);
+
+void cblas_drotg(double *a, double *b, double *c, double *s);
+void cblas_drotmg(double *d1, double *d2, double *b1, const double b2, double *P);
+void cblas_drot(const int N, double *X, const int incX,
+ double *Y, const int incY, const double c, const double s);
+void cblas_drotm(const int N, double *X, const int incX,
+ double *Y, const int incY, const double *P);
+
+
+/*
+ * Routines with S D C Z CS and ZD prefixes
+ */
+void cblas_sscal(const int N, const float alpha, float *X, const int incX);
+void cblas_dscal(const int N, const double alpha, double *X, const int incX);
+void cblas_cscal(const int N, const void *alpha, void *X, const int incX);
+void cblas_zscal(const int N, const void *alpha, void *X, const int incX);
+void cblas_csscal(const int N, const float alpha, void *X, const int incX);
+void cblas_zdscal(const int N, const double alpha, void *X, const int incX);
+
+/*
+ * ===========================================================================
+ * Prototypes for level 2 BLAS
+ * ===========================================================================
+ */
+
+/*
+ * Routines with standard 4 prefixes (S, D, C, Z)
+ */
+void cblas_sgemv(const enum CBLAS_ORDER order,
+ const enum CBLAS_TRANSPOSE TransA, const int M, const int N,
+ const float alpha, const float *A, const int lda,
+ const float *X, const int incX, const float beta,
+ float *Y, const int incY);
+void cblas_sgbmv(const enum CBLAS_ORDER order,
+ const enum CBLAS_TRANSPOSE TransA, const int M, const int N,
+ const int KL, const int KU, const float alpha,
+ const float *A, const int lda, const float *X,
+ const int incX, const float beta, float *Y, const int incY);
+void cblas_strmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
+ const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag,
+ const int N, const float *A, const int lda,
+ float *X, const int incX);
+void cblas_stbmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
+ const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag,
+ const int N, const int K, const float *A, const int lda,
+ float *X, const int incX);
+void cblas_stpmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
+ const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag,
+ const int N, const float *Ap, float *X, const int incX);
+void cblas_strsv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
+ const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag,
+ const int N, const float *A, const int lda, float *X,
+ const int incX);
+void cblas_stbsv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
+ const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag,
+ const int N, const int K, const float *A, const int lda,
+ float *X, const int incX);
+void cblas_stpsv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
+ const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag,
+ const int N, const float *Ap, float *X, const int incX);
+
+void cblas_dgemv(const enum CBLAS_ORDER order,
+ const enum CBLAS_TRANSPOSE TransA, const int M, const int N,
+ const double alpha, const double *A, const int lda,
+ const double *X, const int incX, const double beta,
+ double *Y, const int incY);
+void cblas_dgbmv(const enum CBLAS_ORDER order,
+ const enum CBLAS_TRANSPOSE TransA, const int M, const int N,
+ const int KL, const int KU, const double alpha,
+ const double *A, const int lda, const double *X,
+ const int incX, const double beta, double *Y, const int incY);
+void cblas_dtrmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
+ const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag,
+ const int N, const double *A, const int lda,
+ double *X, const int incX);
+void cblas_dtbmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
+ const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag,
+ const int N, const int K, const double *A, const int lda,
+ double *X, const int incX);
+void cblas_dtpmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
+ const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag,
+ const int N, const double *Ap, double *X, const int incX);
+void cblas_dtrsv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
+ const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag,
+ const int N, const double *A, const int lda, double *X,
+ const int incX);
+void cblas_dtbsv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
+ const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag,
+ const int N, const int K, const double *A, const int lda,
+ double *X, const int incX);
+void cblas_dtpsv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
+ const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag,
+ const int N, const double *Ap, double *X, const int incX);
+
+void cblas_cgemv(const enum CBLAS_ORDER order,
+ const enum CBLAS_TRANSPOSE TransA, const int M, const int N,
+ const void *alpha, const void *A, const int lda,
+ const void *X, const int incX, const void *beta,
+ void *Y, const int incY);
+void cblas_cgbmv(const enum CBLAS_ORDER order,
+ const enum CBLAS_TRANSPOSE TransA, const int M, const int N,
+ const int KL, const int KU, const void *alpha,
+ const void *A, const int lda, const void *X,
+ const int incX, const void *beta, void *Y, const int incY);
+void cblas_ctrmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
+ const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag,
+ const int N, const void *A, const int lda,
+ void *X, const int incX);
+void cblas_ctbmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
+ const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag,
+ const int N, const int K, const void *A, const int lda,
+ void *X, const int incX);
+void cblas_ctpmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
+ const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag,
+ const int N, const void *Ap, void *X, const int incX);
+void cblas_ctrsv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
+ const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag,
+ const int N, const void *A, const int lda, void *X,
+ const int incX);
+void cblas_ctbsv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
+ const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag,
+ const int N, const int K, const void *A, const int lda,
+ void *X, const int incX);
+void cblas_ctpsv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
+ const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag,
+ const int N, const void *Ap, void *X, const int incX);
+
+void cblas_zgemv(const enum CBLAS_ORDER order,
+ const enum CBLAS_TRANSPOSE TransA, const int M, const int N,
+ const void *alpha, const void *A, const int lda,
+ const void *X, const int incX, const void *beta,
+ void *Y, const int incY);
+void cblas_zgbmv(const enum CBLAS_ORDER order,
+ const enum CBLAS_TRANSPOSE TransA, const int M, const int N,
+ const int KL, const int KU, const void *alpha,
+ const void *A, const int lda, const void *X,
+ const int incX, const void *beta, void *Y, const int incY);
+void cblas_ztrmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
+ const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag,
+ const int N, const void *A, const int lda,
+ void *X, const int incX);
+void cblas_ztbmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
+ const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag,
+ const int N, const int K, const void *A, const int lda,
+ void *X, const int incX);
+void cblas_ztpmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
+ const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag,
+ const int N, const void *Ap, void *X, const int incX);
+void cblas_ztrsv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
+ const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag,
+ const int N, const void *A, const int lda, void *X,
+ const int incX);
+void cblas_ztbsv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
+ const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag,
+ const int N, const int K, const void *A, const int lda,
+ void *X, const int incX);
+void cblas_ztpsv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
+ const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag,
+ const int N, const void *Ap, void *X, const int incX);
+
+
+/*
+ * Routines with S and D prefixes only
+ */
+void cblas_ssymv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
+ const int N, const float alpha, const float *A,
+ const int lda, const float *X, const int incX,
+ const float beta, float *Y, const int incY);
+void cblas_ssbmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
+ const int N, const int K, const float alpha, const float *A,
+ const int lda, const float *X, const int incX,
+ const float beta, float *Y, const int incY);
+void cblas_sspmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
+ const int N, const float alpha, const float *Ap,
+ const float *X, const int incX,
+ const float beta, float *Y, const int incY);
+void cblas_sger(const enum CBLAS_ORDER order, const int M, const int N,
+ const float alpha, const float *X, const int incX,
+ const float *Y, const int incY, float *A, const int lda);
+void cblas_ssyr(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
+ const int N, const float alpha, const float *X,
+ const int incX, float *A, const int lda);
+void cblas_sspr(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
+ const int N, const float alpha, const float *X,
+ const int incX, float *Ap);
+void cblas_ssyr2(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
+ const int N, const float alpha, const float *X,
+ const int incX, const float *Y, const int incY, float *A,
+ const int lda);
+void cblas_sspr2(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
+ const int N, const float alpha, const float *X,
+ const int incX, const float *Y, const int incY, float *A);
+
+void cblas_dsymv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
+ const int N, const double alpha, const double *A,
+ const int lda, const double *X, const int incX,
+ const double beta, double *Y, const int incY);
+void cblas_dsbmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
+ const int N, const int K, const double alpha, const double *A,
+ const int lda, const double *X, const int incX,
+ const double beta, double *Y, const int incY);
+void cblas_dspmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
+ const int N, const double alpha, const double *Ap,
+ const double *X, const int incX,
+ const double beta, double *Y, const int incY);
+void cblas_dger(const enum CBLAS_ORDER order, const int M, const int N,
+ const double alpha, const double *X, const int incX,
+ const double *Y, const int incY, double *A, const int lda);
+void cblas_dsyr(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
+ const int N, const double alpha, const double *X,
+ const int incX, double *A, const int lda);
+void cblas_dspr(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
+ const int N, const double alpha, const double *X,
+ const int incX, double *Ap);
+void cblas_dsyr2(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
+ const int N, const double alpha, const double *X,
+ const int incX, const double *Y, const int incY, double *A,
+ const int lda);
+void cblas_dspr2(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
+ const int N, const double alpha, const double *X,
+ const int incX, const double *Y, const int incY, double *A);
+
+
+/*
+ * Routines with C and Z prefixes only
+ */
+void cblas_chemv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
+ const int N, const void *alpha, const void *A,
+ const int lda, const void *X, const int incX,
+ const void *beta, void *Y, const int incY);
+void cblas_chbmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
+ const int N, const int K, const void *alpha, const void *A,
+ const int lda, const void *X, const int incX,
+ const void *beta, void *Y, const int incY);
+void cblas_chpmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
+ const int N, const void *alpha, const void *Ap,
+ const void *X, const int incX,
+ const void *beta, void *Y, const int incY);
+void cblas_cgeru(const enum CBLAS_ORDER order, const int M, const int N,
+ const void *alpha, const void *X, const int incX,
+ const void *Y, const int incY, void *A, const int lda);
+void cblas_cgerc(const enum CBLAS_ORDER order, const int M, const int N,
+ const void *alpha, const void *X, const int incX,
+ const void *Y, const int incY, void *A, const int lda);
+void cblas_cher(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
+ const int N, const float alpha, const void *X, const int incX,
+ void *A, const int lda);
+void cblas_chpr(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
+ const int N, const float alpha, const void *X,
+ const int incX, void *A);
+void cblas_cher2(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const int N,
+ const void *alpha, const void *X, const int incX,
+ const void *Y, const int incY, void *A, const int lda);
+void cblas_chpr2(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const int N,
+ const void *alpha, const void *X, const int incX,
+ const void *Y, const int incY, void *Ap);
+
+void cblas_zhemv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
+ const int N, const void *alpha, const void *A,
+ const int lda, const void *X, const int incX,
+ const void *beta, void *Y, const int incY);
+void cblas_zhbmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
+ const int N, const int K, const void *alpha, const void *A,
+ const int lda, const void *X, const int incX,
+ const void *beta, void *Y, const int incY);
+void cblas_zhpmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
+ const int N, const void *alpha, const void *Ap,
+ const void *X, const int incX,
+ const void *beta, void *Y, const int incY);
+void cblas_zgeru(const enum CBLAS_ORDER order, const int M, const int N,
+ const void *alpha, const void *X, const int incX,
+ const void *Y, const int incY, void *A, const int lda);
+void cblas_zgerc(const enum CBLAS_ORDER order, const int M, const int N,
+ const void *alpha, const void *X, const int incX,
+ const void *Y, const int incY, void *A, const int lda);
+void cblas_zher(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
+ const int N, const double alpha, const void *X, const int incX,
+ void *A, const int lda);
+void cblas_zhpr(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
+ const int N, const double alpha, const void *X,
+ const int incX, void *A);
+void cblas_zher2(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const int N,
+ const void *alpha, const void *X, const int incX,
+ const void *Y, const int incY, void *A, const int lda);
+void cblas_zhpr2(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const int N,
+ const void *alpha, const void *X, const int incX,
+ const void *Y, const int incY, void *Ap);
+
+/*
+ * ===========================================================================
+ * Prototypes for level 3 BLAS
+ * ===========================================================================
+ */
+
+/*
+ * Routines with standard 4 prefixes (S, D, C, Z)
+ */
+void cblas_sgemm(const enum CBLAS_ORDER Order, const enum CBLAS_TRANSPOSE TransA,
+ const enum CBLAS_TRANSPOSE TransB, const int M, const int N,
+ const int K, const float alpha, const float *A,
+ const int lda, const float *B, const int ldb,
+ const float beta, float *C, const int ldc);
+void cblas_ssymm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side,
+ const enum CBLAS_UPLO Uplo, const int M, const int N,
+ const float alpha, const float *A, const int lda,
+ const float *B, const int ldb, const float beta,
+ float *C, const int ldc);
+void cblas_ssyrk(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo,
+ const enum CBLAS_TRANSPOSE Trans, const int N, const int K,
+ const float alpha, const float *A, const int lda,
+ const float beta, float *C, const int ldc);
+void cblas_ssyr2k(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo,
+ const enum CBLAS_TRANSPOSE Trans, const int N, const int K,
+ const float alpha, const float *A, const int lda,
+ const float *B, const int ldb, const float beta,
+ float *C, const int ldc);
+void cblas_strmm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side,
+ const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA,
+ const enum CBLAS_DIAG Diag, const int M, const int N,
+ const float alpha, const float *A, const int lda,
+ float *B, const int ldb);
+void cblas_strsm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side,
+ const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA,
+ const enum CBLAS_DIAG Diag, const int M, const int N,
+ const float alpha, const float *A, const int lda,
+ float *B, const int ldb);
+
+void cblas_dgemm(const enum CBLAS_ORDER Order, const enum CBLAS_TRANSPOSE TransA,
+ const enum CBLAS_TRANSPOSE TransB, const int M, const int N,
+ const int K, const double alpha, const double *A,
+ const int lda, const double *B, const int ldb,
+ const double beta, double *C, const int ldc);
+void cblas_dsymm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side,
+ const enum CBLAS_UPLO Uplo, const int M, const int N,
+ const double alpha, const double *A, const int lda,
+ const double *B, const int ldb, const double beta,
+ double *C, const int ldc);
+void cblas_dsyrk(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo,
+ const enum CBLAS_TRANSPOSE Trans, const int N, const int K,
+ const double alpha, const double *A, const int lda,
+ const double beta, double *C, const int ldc);
+void cblas_dsyr2k(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo,
+ const enum CBLAS_TRANSPOSE Trans, const int N, const int K,
+ const double alpha, const double *A, const int lda,
+ const double *B, const int ldb, const double beta,
+ double *C, const int ldc);
+void cblas_dtrmm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side,
+ const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA,
+ const enum CBLAS_DIAG Diag, const int M, const int N,
+ const double alpha, const double *A, const int lda,
+ double *B, const int ldb);
+void cblas_dtrsm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side,
+ const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA,
+ const enum CBLAS_DIAG Diag, const int M, const int N,
+ const double alpha, const double *A, const int lda,
+ double *B, const int ldb);
+
+void cblas_cgemm(const enum CBLAS_ORDER Order, const enum CBLAS_TRANSPOSE TransA,
+ const enum CBLAS_TRANSPOSE TransB, const int M, const int N,
+ const int K, const void *alpha, const void *A,
+ const int lda, const void *B, const int ldb,
+ const void *beta, void *C, const int ldc);
+void cblas_csymm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side,
+ const enum CBLAS_UPLO Uplo, const int M, const int N,
+ const void *alpha, const void *A, const int lda,
+ const void *B, const int ldb, const void *beta,
+ void *C, const int ldc);
+void cblas_csyrk(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo,
+ const enum CBLAS_TRANSPOSE Trans, const int N, const int K,
+ const void *alpha, const void *A, const int lda,
+ const void *beta, void *C, const int ldc);
+void cblas_csyr2k(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo,
+ const enum CBLAS_TRANSPOSE Trans, const int N, const int K,
+ const void *alpha, const void *A, const int lda,
+ const void *B, const int ldb, const void *beta,
+ void *C, const int ldc);
+void cblas_ctrmm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side,
+ const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA,
+ const enum CBLAS_DIAG Diag, const int M, const int N,
+ const void *alpha, const void *A, const int lda,
+ void *B, const int ldb);
+void cblas_ctrsm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side,
+ const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA,
+ const enum CBLAS_DIAG Diag, const int M, const int N,
+ const void *alpha, const void *A, const int lda,
+ void *B, const int ldb);
+
+void cblas_zgemm(const enum CBLAS_ORDER Order, const enum CBLAS_TRANSPOSE TransA,
+ const enum CBLAS_TRANSPOSE TransB, const int M, const int N,
+ const int K, const void *alpha, const void *A,
+ const int lda, const void *B, const int ldb,
+ const void *beta, void *C, const int ldc);
+void cblas_zsymm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side,
+ const enum CBLAS_UPLO Uplo, const int M, const int N,
+ const void *alpha, const void *A, const int lda,
+ const void *B, const int ldb, const void *beta,
+ void *C, const int ldc);
+void cblas_zsyrk(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo,
+ const enum CBLAS_TRANSPOSE Trans, const int N, const int K,
+ const void *alpha, const void *A, const int lda,
+ const void *beta, void *C, const int ldc);
+void cblas_zsyr2k(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo,
+ const enum CBLAS_TRANSPOSE Trans, const int N, const int K,
+ const void *alpha, const void *A, const int lda,
+ const void *B, const int ldb, const void *beta,
+ void *C, const int ldc);
+void cblas_ztrmm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side,
+ const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA,
+ const enum CBLAS_DIAG Diag, const int M, const int N,
+ const void *alpha, const void *A, const int lda,
+ void *B, const int ldb);
+void cblas_ztrsm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side,
+ const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA,
+ const enum CBLAS_DIAG Diag, const int M, const int N,
+ const void *alpha, const void *A, const int lda,
+ void *B, const int ldb);
+
+
+/*
+ * Routines with prefixes C and Z only
+ */
+void cblas_chemm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side,
+ const enum CBLAS_UPLO Uplo, const int M, const int N,
+ const void *alpha, const void *A, const int lda,
+ const void *B, const int ldb, const void *beta,
+ void *C, const int ldc);
+void cblas_cherk(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo,
+ const enum CBLAS_TRANSPOSE Trans, const int N, const int K,
+ const float alpha, const void *A, const int lda,
+ const float beta, void *C, const int ldc);
+void cblas_cher2k(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo,
+ const enum CBLAS_TRANSPOSE Trans, const int N, const int K,
+ const void *alpha, const void *A, const int lda,
+ const void *B, const int ldb, const float beta,
+ void *C, const int ldc);
+
+void cblas_zhemm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side,
+ const enum CBLAS_UPLO Uplo, const int M, const int N,
+ const void *alpha, const void *A, const int lda,
+ const void *B, const int ldb, const void *beta,
+ void *C, const int ldc);
+void cblas_zherk(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo,
+ const enum CBLAS_TRANSPOSE Trans, const int N, const int K,
+ const double alpha, const void *A, const int lda,
+ const double beta, void *C, const int ldc);
+void cblas_zher2k(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo,
+ const enum CBLAS_TRANSPOSE Trans, const int N, const int K,
+ const void *alpha, const void *A, const int lda,
+ const void *B, const int ldb, const double beta,
+ void *C, const int ldc);
+
+void cblas_xerbla(int p, const char *rout, const char *form, ...);
+
+__END_DECLS
+
+#endif /* __GSL_CBLAS_H__ */
diff --git a/thirdparty/includes/GSL/gsl/gsl_cdf.h b/thirdparty/includes/GSL/gsl/gsl_cdf.h
new file mode 100644
index 0000000..2bc3fed
--- /dev/null
+++ b/thirdparty/includes/GSL/gsl/gsl_cdf.h
@@ -0,0 +1,170 @@
+/* cdf/gsl_cdf.h
+ *
+ * Copyright (C) 2002 Jason H. Stover.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* Author: J. Stover */
+
+#ifndef __GSL_CDF_H__
+#define __GSL_CDF_H__
+
+#undef __BEGIN_DECLS
+#undef __END_DECLS
+#ifdef __cplusplus
+# define __BEGIN_DECLS extern "C" {
+# define __END_DECLS }
+#else
+# define __BEGIN_DECLS /* empty */
+# define __END_DECLS /* empty */
+#endif
+
+__BEGIN_DECLS
+
+double gsl_cdf_ugaussian_P (const double x);
+double gsl_cdf_ugaussian_Q (const double x);
+
+double gsl_cdf_ugaussian_Pinv (const double P);
+double gsl_cdf_ugaussian_Qinv (const double Q);
+
+double gsl_cdf_gaussian_P (const double x, const double sigma);
+double gsl_cdf_gaussian_Q (const double x, const double sigma);
+
+double gsl_cdf_gaussian_Pinv (const double P, const double sigma);
+double gsl_cdf_gaussian_Qinv (const double Q, const double sigma);
+
+double gsl_cdf_gamma_P (const double x, const double a, const double b);
+double gsl_cdf_gamma_Q (const double x, const double a, const double b);
+
+double gsl_cdf_gamma_Pinv (const double P, const double a, const double b);
+double gsl_cdf_gamma_Qinv (const double Q, const double a, const double b);
+
+double gsl_cdf_cauchy_P (const double x, const double a);
+double gsl_cdf_cauchy_Q (const double x, const double a);
+
+double gsl_cdf_cauchy_Pinv (const double P, const double a);
+double gsl_cdf_cauchy_Qinv (const double Q, const double a);
+
+double gsl_cdf_laplace_P (const double x, const double a);
+double gsl_cdf_laplace_Q (const double x, const double a);
+
+double gsl_cdf_laplace_Pinv (const double P, const double a);
+double gsl_cdf_laplace_Qinv (const double Q, const double a);
+
+double gsl_cdf_rayleigh_P (const double x, const double sigma);
+double gsl_cdf_rayleigh_Q (const double x, const double sigma);
+
+double gsl_cdf_rayleigh_Pinv (const double P, const double sigma);
+double gsl_cdf_rayleigh_Qinv (const double Q, const double sigma);
+
+double gsl_cdf_chisq_P (const double x, const double nu);
+double gsl_cdf_chisq_Q (const double x, const double nu);
+
+double gsl_cdf_chisq_Pinv (const double P, const double nu);
+double gsl_cdf_chisq_Qinv (const double Q, const double nu);
+
+double gsl_cdf_exponential_P (const double x, const double mu);
+double gsl_cdf_exponential_Q (const double x, const double mu);
+
+double gsl_cdf_exponential_Pinv (const double P, const double mu);
+double gsl_cdf_exponential_Qinv (const double Q, const double mu);
+
+double gsl_cdf_exppow_P (const double x, const double a, const double b);
+double gsl_cdf_exppow_Q (const double x, const double a, const double b);
+
+double gsl_cdf_tdist_P (const double x, const double nu);
+double gsl_cdf_tdist_Q (const double x, const double nu);
+
+double gsl_cdf_tdist_Pinv (const double P, const double nu);
+double gsl_cdf_tdist_Qinv (const double Q, const double nu);
+
+double gsl_cdf_fdist_P (const double x, const double nu1, const double nu2);
+double gsl_cdf_fdist_Q (const double x, const double nu1, const double nu2);
+
+double gsl_cdf_fdist_Pinv (const double P, const double nu1, const double nu2);
+double gsl_cdf_fdist_Qinv (const double Q, const double nu1, const double nu2);
+
+double gsl_cdf_beta_P (const double x, const double a, const double b);
+double gsl_cdf_beta_Q (const double x, const double a, const double b);
+
+double gsl_cdf_beta_Pinv (const double P, const double a, const double b);
+double gsl_cdf_beta_Qinv (const double Q, const double a, const double b);
+
+double gsl_cdf_flat_P (const double x, const double a, const double b);
+double gsl_cdf_flat_Q (const double x, const double a, const double b);
+
+double gsl_cdf_flat_Pinv (const double P, const double a, const double b);
+double gsl_cdf_flat_Qinv (const double Q, const double a, const double b);
+
+double gsl_cdf_lognormal_P (const double x, const double zeta, const double sigma);
+double gsl_cdf_lognormal_Q (const double x, const double zeta, const double sigma);
+
+double gsl_cdf_lognormal_Pinv (const double P, const double zeta, const double sigma);
+double gsl_cdf_lognormal_Qinv (const double Q, const double zeta, const double sigma);
+
+double gsl_cdf_gumbel1_P (const double x, const double a, const double b);
+double gsl_cdf_gumbel1_Q (const double x, const double a, const double b);
+
+double gsl_cdf_gumbel1_Pinv (const double P, const double a, const double b);
+double gsl_cdf_gumbel1_Qinv (const double Q, const double a, const double b);
+
+double gsl_cdf_gumbel2_P (const double x, const double a, const double b);
+double gsl_cdf_gumbel2_Q (const double x, const double a, const double b);
+
+double gsl_cdf_gumbel2_Pinv (const double P, const double a, const double b);
+double gsl_cdf_gumbel2_Qinv (const double Q, const double a, const double b);
+
+double gsl_cdf_weibull_P (const double x, const double a, const double b);
+double gsl_cdf_weibull_Q (const double x, const double a, const double b);
+
+double gsl_cdf_weibull_Pinv (const double P, const double a, const double b);
+double gsl_cdf_weibull_Qinv (const double Q, const double a, const double b);
+
+double gsl_cdf_pareto_P (const double x, const double a, const double b);
+double gsl_cdf_pareto_Q (const double x, const double a, const double b);
+
+double gsl_cdf_pareto_Pinv (const double P, const double a, const double b);
+double gsl_cdf_pareto_Qinv (const double Q, const double a, const double b);
+
+double gsl_cdf_logistic_P (const double x, const double a);
+double gsl_cdf_logistic_Q (const double x, const double a);
+
+double gsl_cdf_logistic_Pinv (const double P, const double a);
+double gsl_cdf_logistic_Qinv (const double Q, const double a);
+
+double gsl_cdf_binomial_P (const unsigned int k, const double p, const unsigned int n);
+double gsl_cdf_binomial_Q (const unsigned int k, const double p, const unsigned int n);
+
+double gsl_cdf_poisson_P (const unsigned int k, const double mu);
+double gsl_cdf_poisson_Q (const unsigned int k, const double mu);
+
+double gsl_cdf_geometric_P (const unsigned int k, const double p);
+double gsl_cdf_geometric_Q (const unsigned int k, const double p);
+
+double gsl_cdf_negative_binomial_P (const unsigned int k, const double p, const double n);
+double gsl_cdf_negative_binomial_Q (const unsigned int k, const double p, const double n);
+
+double gsl_cdf_pascal_P (const unsigned int k, const double p, const unsigned int n);
+double gsl_cdf_pascal_Q (const unsigned int k, const double p, const unsigned int n);
+
+double gsl_cdf_hypergeometric_P (const unsigned int k, const unsigned int n1,
+ const unsigned int n2, const unsigned int t);
+double gsl_cdf_hypergeometric_Q (const unsigned int k, const unsigned int n1,
+ const unsigned int n2, const unsigned int t);
+
+__END_DECLS
+
+#endif /* __GSL_CDF_H__ */
diff --git a/thirdparty/includes/GSL/gsl/gsl_chebyshev.h b/thirdparty/includes/GSL/gsl/gsl_chebyshev.h
new file mode 100644
index 0000000..858048e
--- /dev/null
+++ b/thirdparty/includes/GSL/gsl/gsl_chebyshev.h
@@ -0,0 +1,133 @@
+/* cheb/gsl_chebyshev.h
+ *
+ * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GSL_CHEBYSHEV_H__
+#define __GSL_CHEBYSHEV_H__
+
+#include
+#include
+
+#undef __BEGIN_DECLS
+#undef __END_DECLS
+#ifdef __cplusplus
+# define __BEGIN_DECLS extern "C" {
+# define __END_DECLS }
+#else
+# define __BEGIN_DECLS /* empty */
+# define __END_DECLS /* empty */
+#endif
+
+__BEGIN_DECLS
+
+
+/* data for a Chebyshev series over a given interval */
+
+struct gsl_cheb_series_struct {
+
+ double * c; /* coefficients */
+ size_t order; /* order of expansion */
+ double a; /* lower interval point */
+ double b; /* upper interval point */
+
+ /* The following exists (mostly) for the benefit
+ * of the implementation. It is an effective single
+ * precision order, for use in single precision
+ * evaluation. Users can use it if they like, but
+ * only they know how to calculate it, since it is
+ * specific to the approximated function. By default,
+ * order_sp = order.
+ * It is used explicitly only by the gsl_cheb_eval_mode
+ * functions, which are not meant for casual use.
+ */
+ size_t order_sp;
+
+ /* Additional elements not used by specfunc */
+
+ double * f; /* function evaluated at chebyschev points */
+};
+typedef struct gsl_cheb_series_struct gsl_cheb_series;
+
+
+/* Calculate a Chebyshev series of specified order over
+ * a specified interval, for a given function.
+ * Return 0 on failure.
+ */
+gsl_cheb_series * gsl_cheb_alloc(const size_t order);
+
+/* Free a Chebyshev series previously calculated with gsl_cheb_alloc().
+ */
+void gsl_cheb_free(gsl_cheb_series * cs);
+
+/* Calculate a Chebyshev series using the storage provided.
+ * Uses the interval (a,b) and the order with which it
+ * was initially created.
+ *
+ */
+int gsl_cheb_init(gsl_cheb_series * cs, const gsl_function * func,
+ const double a, const double b);
+
+/* Return the order, size of coefficient array and coefficient array ptr */
+size_t gsl_cheb_order (const gsl_cheb_series * cs);
+size_t gsl_cheb_size (const gsl_cheb_series * cs);
+double *gsl_cheb_coeffs (const gsl_cheb_series * cs);
+
+/* Evaluate a Chebyshev series at a given point.
+ * No errors can occur for a struct obtained from gsl_cheb_new().
+ */
+double gsl_cheb_eval(const gsl_cheb_series * cs, const double x);
+int gsl_cheb_eval_err(const gsl_cheb_series * cs, const double x,
+ double * result, double * abserr);
+
+
+/* Evaluate a Chebyshev series at a given point, to (at most) the given order.
+ * No errors can occur for a struct obtained from gsl_cheb_new().
+ */
+double gsl_cheb_eval_n(const gsl_cheb_series * cs, const size_t order,
+ const double x);
+int gsl_cheb_eval_n_err(const gsl_cheb_series * cs, const size_t order,
+ const double x, double * result, double * abserr);
+
+
+/* Evaluate a Chebyshev series at a given point, using the default
+ * order for double precision mode(s) and the single precision
+ * order for other modes.
+ * No errors can occur for a struct obtained from gsl_cheb_new().
+ */
+double gsl_cheb_eval_mode(const gsl_cheb_series * cs, const double x, gsl_mode_t mode);
+int gsl_cheb_eval_mode_e(const gsl_cheb_series * cs, const double x, gsl_mode_t mode, double * result, double * abserr);
+
+
+
+/* Compute the derivative of a Chebyshev series.
+ */
+int gsl_cheb_calc_deriv(gsl_cheb_series * deriv, const gsl_cheb_series * cs);
+
+/* Compute the integral of a Chebyshev series. The
+ * integral is fixed by the condition that it equals zero at
+ * the left end-point, ie it is precisely
+ * Integrate[cs(t; a,b), {t, a, x}]
+ */
+int gsl_cheb_calc_integ(gsl_cheb_series * integ, const gsl_cheb_series * cs);
+
+
+
+
+__END_DECLS
+
+#endif /* __GSL_CHEBYSHEV_H__ */
diff --git a/thirdparty/includes/GSL/gsl/gsl_check_range.h b/thirdparty/includes/GSL/gsl/gsl_check_range.h
new file mode 100644
index 0000000..d110b6b
--- /dev/null
+++ b/thirdparty/includes/GSL/gsl/gsl_check_range.h
@@ -0,0 +1,57 @@
+/* vector/gsl_check_range.h
+ *
+ * Copyright (C) 2003, 2004, 2007 Brian Gough
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GSL_CHECK_RANGE_H__
+#define __GSL_CHECK_RANGE_H__
+
+#include
+#include
+
+#undef __BEGIN_DECLS
+#undef __END_DECLS
+#ifdef __cplusplus
+# define __BEGIN_DECLS extern "C" {
+# define __END_DECLS }
+#else
+# define __BEGIN_DECLS /* empty */
+# define __END_DECLS /* empty */
+#endif
+
+__BEGIN_DECLS
+
+GSL_VAR int gsl_check_range;
+
+/* Turn range checking on by default, unless the user defines
+ GSL_RANGE_CHECK_OFF, or defines GSL_RANGE_CHECK to 0 explicitly */
+
+#ifdef GSL_RANGE_CHECK_OFF
+# ifndef GSL_RANGE_CHECK
+# define GSL_RANGE_CHECK 0
+# else
+# error "cannot set both GSL_RANGE_CHECK and GSL_RANGE_CHECK_OFF"
+# endif
+#else
+# ifndef GSL_RANGE_CHECK
+# define GSL_RANGE_CHECK 1
+# endif
+#endif
+
+__END_DECLS
+
+#endif /* __GSL_CHECK_RANGE_H__ */
diff --git a/thirdparty/includes/GSL/gsl/gsl_combination.h b/thirdparty/includes/GSL/gsl/gsl_combination.h
new file mode 100644
index 0000000..69de7cf
--- /dev/null
+++ b/thirdparty/includes/GSL/gsl/gsl_combination.h
@@ -0,0 +1,92 @@
+/* combination/gsl_combination.h
+ * based on permutation/gsl_permutation.h by Brian Gough
+ *
+ * Copyright (C) 2001 Szymon Jaroszewicz
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GSL_COMBINATION_H__
+#define __GSL_COMBINATION_H__
+
+#include
+#include
+#include
+#include
+#include
+
+#undef __BEGIN_DECLS
+#undef __END_DECLS
+#ifdef __cplusplus
+# define __BEGIN_DECLS extern "C" {
+# define __END_DECLS }
+#else
+# define __BEGIN_DECLS /* empty */
+# define __END_DECLS /* empty */
+#endif
+
+__BEGIN_DECLS
+
+struct gsl_combination_struct
+{
+ size_t n;
+ size_t k;
+ size_t *data;
+};
+
+typedef struct gsl_combination_struct gsl_combination;
+
+gsl_combination *gsl_combination_alloc (const size_t n, const size_t k);
+gsl_combination *gsl_combination_calloc (const size_t n, const size_t k);
+void gsl_combination_init_first (gsl_combination * c);
+void gsl_combination_init_last (gsl_combination * c);
+void gsl_combination_free (gsl_combination * c);
+int gsl_combination_memcpy (gsl_combination * dest, const gsl_combination * src);
+
+int gsl_combination_fread (FILE * stream, gsl_combination * c);
+int gsl_combination_fwrite (FILE * stream, const gsl_combination * c);
+int gsl_combination_fscanf (FILE * stream, gsl_combination * c);
+int gsl_combination_fprintf (FILE * stream, const gsl_combination * c, const char *format);
+
+size_t gsl_combination_n (const gsl_combination * c);
+size_t gsl_combination_k (const gsl_combination * c);
+size_t * gsl_combination_data (const gsl_combination * c);
+
+int gsl_combination_valid (gsl_combination * c);
+int gsl_combination_next (gsl_combination * c);
+int gsl_combination_prev (gsl_combination * c);
+
+INLINE_DECL size_t gsl_combination_get (const gsl_combination * c, const size_t i);
+
+#ifdef HAVE_INLINE
+
+INLINE_FUN
+size_t
+gsl_combination_get (const gsl_combination * c, const size_t i)
+{
+#if GSL_RANGE_CHECK
+ if (GSL_RANGE_COND(i >= c->k)) /* size_t is unsigned, can't be negative */
+ {
+ GSL_ERROR_VAL ("index out of range", GSL_EINVAL, 0);
+ }
+#endif
+ return c->data[i];
+}
+
+#endif /* HAVE_INLINE */
+
+__END_DECLS
+
+#endif /* __GSL_COMBINATION_H__ */
diff --git a/thirdparty/includes/GSL/gsl/gsl_complex.h b/thirdparty/includes/GSL/gsl/gsl_complex.h
new file mode 100644
index 0000000..e77b770
--- /dev/null
+++ b/thirdparty/includes/GSL/gsl/gsl_complex.h
@@ -0,0 +1,103 @@
+/* complex/gsl_complex.h
+ *
+ * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Gerard Jungman, Brian Gough
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GSL_COMPLEX_H__
+#define __GSL_COMPLEX_H__
+
+#undef __BEGIN_DECLS
+#undef __END_DECLS
+#ifdef __cplusplus
+# define __BEGIN_DECLS extern "C" {
+# define __END_DECLS }
+#else
+# define __BEGIN_DECLS /* empty */
+# define __END_DECLS /* empty */
+#endif
+
+__BEGIN_DECLS
+
+
+/* two consecutive built-in types as a complex number */
+typedef double * gsl_complex_packed ;
+typedef float * gsl_complex_packed_float ;
+typedef long double * gsl_complex_packed_long_double ;
+
+typedef const double * gsl_const_complex_packed ;
+typedef const float * gsl_const_complex_packed_float ;
+typedef const long double * gsl_const_complex_packed_long_double ;
+
+
+/* 2N consecutive built-in types as N complex numbers */
+typedef double * gsl_complex_packed_array ;
+typedef float * gsl_complex_packed_array_float ;
+typedef long double * gsl_complex_packed_array_long_double ;
+
+typedef const double * gsl_const_complex_packed_array ;
+typedef const float * gsl_const_complex_packed_array_float ;
+typedef const long double * gsl_const_complex_packed_array_long_double ;
+
+
+/* Yes... this seems weird. Trust us. The point is just that
+ sometimes you want to make it obvious that something is
+ an output value. The fact that it lacks a 'const' may not
+ be enough of a clue for people in some contexts.
+ */
+typedef double * gsl_complex_packed_ptr ;
+typedef float * gsl_complex_packed_float_ptr ;
+typedef long double * gsl_complex_packed_long_double_ptr ;
+
+typedef const double * gsl_const_complex_packed_ptr ;
+typedef const float * gsl_const_complex_packed_float_ptr ;
+typedef const long double * gsl_const_complex_packed_long_double_ptr ;
+
+
+typedef struct
+ {
+ long double dat[2];
+ }
+gsl_complex_long_double;
+
+typedef struct
+ {
+ double dat[2];
+ }
+gsl_complex;
+
+typedef struct
+ {
+ float dat[2];
+ }
+gsl_complex_float;
+
+#define GSL_REAL(z) ((z).dat[0])
+#define GSL_IMAG(z) ((z).dat[1])
+#define GSL_COMPLEX_P(zp) ((zp)->dat)
+#define GSL_COMPLEX_P_REAL(zp) ((zp)->dat[0])
+#define GSL_COMPLEX_P_IMAG(zp) ((zp)->dat[1])
+#define GSL_COMPLEX_EQ(z1,z2) (((z1).dat[0] == (z2).dat[0]) && ((z1).dat[1] == (z2).dat[1]))
+
+#define GSL_SET_COMPLEX(zp,x,y) do {(zp)->dat[0]=(x); (zp)->dat[1]=(y);} while(0)
+#define GSL_SET_REAL(zp,x) do {(zp)->dat[0]=(x);} while(0)
+#define GSL_SET_IMAG(zp,y) do {(zp)->dat[1]=(y);} while(0)
+
+#define GSL_SET_COMPLEX_PACKED(zp,n,x,y) do {*((zp)+2*(n))=(x); *((zp)+(2*(n)+1))=(y);} while(0)
+
+__END_DECLS
+
+#endif /* __GSL_COMPLEX_H__ */
diff --git a/thirdparty/includes/GSL/gsl/gsl_complex_math.h b/thirdparty/includes/GSL/gsl/gsl_complex_math.h
new file mode 100644
index 0000000..ad8d076
--- /dev/null
+++ b/thirdparty/includes/GSL/gsl/gsl_complex_math.h
@@ -0,0 +1,142 @@
+/* complex/gsl_complex_math.h
+ *
+ * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2004, 2007 Jorma Olavi Tähtinen, Brian Gough
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GSL_COMPLEX_MATH_H__
+#define __GSL_COMPLEX_MATH_H__
+#include
+#include
+
+#undef __BEGIN_DECLS
+#undef __END_DECLS
+#ifdef __cplusplus
+#define __BEGIN_DECLS extern "C" {
+#define __END_DECLS }
+#else
+#define __BEGIN_DECLS /* empty */
+#define __END_DECLS /* empty */
+#endif
+
+__BEGIN_DECLS
+
+/* Complex numbers */
+
+gsl_complex gsl_complex_polar (double r, double theta); /* r= r e^(i theta) */
+
+INLINE_DECL gsl_complex gsl_complex_rect (double x, double y); /* r= real+i*imag */
+
+#ifdef HAVE_INLINE
+INLINE_FUN gsl_complex
+gsl_complex_rect (double x, double y)
+{ /* return z = x + i y */
+ gsl_complex z;
+ GSL_SET_COMPLEX (&z, x, y);
+ return z;
+}
+#endif
+
+#define GSL_COMPLEX_ONE (gsl_complex_rect(1.0,0.0))
+#define GSL_COMPLEX_ZERO (gsl_complex_rect(0.0,0.0))
+#define GSL_COMPLEX_NEGONE (gsl_complex_rect(-1.0,0.0))
+
+/* Properties of complex numbers */
+
+double gsl_complex_arg (gsl_complex z); /* return arg(z), -pi< arg(z) <=+pi */
+double gsl_complex_abs (gsl_complex z); /* return |z| */
+double gsl_complex_abs2 (gsl_complex z); /* return |z|^2 */
+double gsl_complex_logabs (gsl_complex z); /* return log|z| */
+
+/* Complex arithmetic operators */
+
+gsl_complex gsl_complex_add (gsl_complex a, gsl_complex b); /* r=a+b */
+gsl_complex gsl_complex_sub (gsl_complex a, gsl_complex b); /* r=a-b */
+gsl_complex gsl_complex_mul (gsl_complex a, gsl_complex b); /* r=a*b */
+gsl_complex gsl_complex_div (gsl_complex a, gsl_complex b); /* r=a/b */
+
+gsl_complex gsl_complex_add_real (gsl_complex a, double x); /* r=a+x */
+gsl_complex gsl_complex_sub_real (gsl_complex a, double x); /* r=a-x */
+gsl_complex gsl_complex_mul_real (gsl_complex a, double x); /* r=a*x */
+gsl_complex gsl_complex_div_real (gsl_complex a, double x); /* r=a/x */
+
+gsl_complex gsl_complex_add_imag (gsl_complex a, double y); /* r=a+iy */
+gsl_complex gsl_complex_sub_imag (gsl_complex a, double y); /* r=a-iy */
+gsl_complex gsl_complex_mul_imag (gsl_complex a, double y); /* r=a*iy */
+gsl_complex gsl_complex_div_imag (gsl_complex a, double y); /* r=a/iy */
+
+gsl_complex gsl_complex_conjugate (gsl_complex z); /* r=conj(z) */
+gsl_complex gsl_complex_inverse (gsl_complex a); /* r=1/a */
+gsl_complex gsl_complex_negative (gsl_complex a); /* r=-a */
+
+/* Elementary Complex Functions */
+
+gsl_complex gsl_complex_sqrt (gsl_complex z); /* r=sqrt(z) */
+gsl_complex gsl_complex_sqrt_real (double x); /* r=sqrt(x) (x<0 ok) */
+
+gsl_complex gsl_complex_pow (gsl_complex a, gsl_complex b); /* r=a^b */
+gsl_complex gsl_complex_pow_real (gsl_complex a, double b); /* r=a^b */
+
+gsl_complex gsl_complex_exp (gsl_complex a); /* r=exp(a) */
+gsl_complex gsl_complex_log (gsl_complex a); /* r=log(a) (base e) */
+gsl_complex gsl_complex_log10 (gsl_complex a); /* r=log10(a) (base 10) */
+gsl_complex gsl_complex_log_b (gsl_complex a, gsl_complex b); /* r=log_b(a) (base=b) */
+
+/* Complex Trigonometric Functions */
+
+gsl_complex gsl_complex_sin (gsl_complex a); /* r=sin(a) */
+gsl_complex gsl_complex_cos (gsl_complex a); /* r=cos(a) */
+gsl_complex gsl_complex_sec (gsl_complex a); /* r=sec(a) */
+gsl_complex gsl_complex_csc (gsl_complex a); /* r=csc(a) */
+gsl_complex gsl_complex_tan (gsl_complex a); /* r=tan(a) */
+gsl_complex gsl_complex_cot (gsl_complex a); /* r=cot(a) */
+
+/* Inverse Complex Trigonometric Functions */
+
+gsl_complex gsl_complex_arcsin (gsl_complex a); /* r=arcsin(a) */
+gsl_complex gsl_complex_arcsin_real (double a); /* r=arcsin(a) */
+gsl_complex gsl_complex_arccos (gsl_complex a); /* r=arccos(a) */
+gsl_complex gsl_complex_arccos_real (double a); /* r=arccos(a) */
+gsl_complex gsl_complex_arcsec (gsl_complex a); /* r=arcsec(a) */
+gsl_complex gsl_complex_arcsec_real (double a); /* r=arcsec(a) */
+gsl_complex gsl_complex_arccsc (gsl_complex a); /* r=arccsc(a) */
+gsl_complex gsl_complex_arccsc_real (double a); /* r=arccsc(a) */
+gsl_complex gsl_complex_arctan (gsl_complex a); /* r=arctan(a) */
+gsl_complex gsl_complex_arccot (gsl_complex a); /* r=arccot(a) */
+
+/* Complex Hyperbolic Functions */
+
+gsl_complex gsl_complex_sinh (gsl_complex a); /* r=sinh(a) */
+gsl_complex gsl_complex_cosh (gsl_complex a); /* r=coshh(a) */
+gsl_complex gsl_complex_sech (gsl_complex a); /* r=sech(a) */
+gsl_complex gsl_complex_csch (gsl_complex a); /* r=csch(a) */
+gsl_complex gsl_complex_tanh (gsl_complex a); /* r=tanh(a) */
+gsl_complex gsl_complex_coth (gsl_complex a); /* r=coth(a) */
+
+/* Inverse Complex Hyperbolic Functions */
+
+gsl_complex gsl_complex_arcsinh (gsl_complex a); /* r=arcsinh(a) */
+gsl_complex gsl_complex_arccosh (gsl_complex a); /* r=arccosh(a) */
+gsl_complex gsl_complex_arccosh_real (double a); /* r=arccosh(a) */
+gsl_complex gsl_complex_arcsech (gsl_complex a); /* r=arcsech(a) */
+gsl_complex gsl_complex_arccsch (gsl_complex a); /* r=arccsch(a) */
+gsl_complex gsl_complex_arctanh (gsl_complex a); /* r=arctanh(a) */
+gsl_complex gsl_complex_arctanh_real (double a); /* r=arctanh(a) */
+gsl_complex gsl_complex_arccoth (gsl_complex a); /* r=arccoth(a) */
+
+__END_DECLS
+
+#endif /* __GSL_COMPLEX_MATH_H__ */
diff --git a/thirdparty/includes/GSL/gsl/gsl_const.h b/thirdparty/includes/GSL/gsl/gsl_const.h
new file mode 100644
index 0000000..5d749dc
--- /dev/null
+++ b/thirdparty/includes/GSL/gsl/gsl_const.h
@@ -0,0 +1,31 @@
+/* const/gsl_const.h
+ *
+ * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2004, 2007 Brian Gough
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GSL_CONST__
+#define __GSL_CONST__
+
+#include
+
+#include
+#include
+
+#include
+#include
+
+#endif /* __GSL_CONST__ */
diff --git a/thirdparty/includes/GSL/gsl/gsl_const_cgs.h b/thirdparty/includes/GSL/gsl/gsl_const_cgs.h
new file mode 100644
index 0000000..ab95b7b
--- /dev/null
+++ b/thirdparty/includes/GSL/gsl/gsl_const_cgs.h
@@ -0,0 +1,116 @@
+/* const/gsl_const_cgs.h
+ *
+ * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
+ * 2006, 2007, 2008, 2009 Brian Gough
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GSL_CONST_CGS__
+#define __GSL_CONST_CGS__
+
+#define GSL_CONST_CGS_SPEED_OF_LIGHT (2.99792458e10) /* cm / s */
+#define GSL_CONST_CGS_GRAVITATIONAL_CONSTANT (6.673e-8) /* cm^3 / g s^2 */
+#define GSL_CONST_CGS_PLANCKS_CONSTANT_H (6.62606896e-27) /* g cm^2 / s */
+#define GSL_CONST_CGS_PLANCKS_CONSTANT_HBAR (1.05457162825e-27) /* g cm^2 / s */
+#define GSL_CONST_CGS_ASTRONOMICAL_UNIT (1.49597870691e13) /* cm */
+#define GSL_CONST_CGS_LIGHT_YEAR (9.46053620707e17) /* cm */
+#define GSL_CONST_CGS_PARSEC (3.08567758135e18) /* cm */
+#define GSL_CONST_CGS_GRAV_ACCEL (9.80665e2) /* cm / s^2 */
+#define GSL_CONST_CGS_ELECTRON_VOLT (1.602176487e-12) /* g cm^2 / s^2 */
+#define GSL_CONST_CGS_MASS_ELECTRON (9.10938188e-28) /* g */
+#define GSL_CONST_CGS_MASS_MUON (1.88353109e-25) /* g */
+#define GSL_CONST_CGS_MASS_PROTON (1.67262158e-24) /* g */
+#define GSL_CONST_CGS_MASS_NEUTRON (1.67492716e-24) /* g */
+#define GSL_CONST_CGS_RYDBERG (2.17987196968e-11) /* g cm^2 / s^2 */
+#define GSL_CONST_CGS_BOLTZMANN (1.3806504e-16) /* g cm^2 / K s^2 */
+#define GSL_CONST_CGS_MOLAR_GAS (8.314472e7) /* g cm^2 / K mol s^2 */
+#define GSL_CONST_CGS_STANDARD_GAS_VOLUME (2.2710981e4) /* cm^3 / mol */
+#define GSL_CONST_CGS_MINUTE (6e1) /* s */
+#define GSL_CONST_CGS_HOUR (3.6e3) /* s */
+#define GSL_CONST_CGS_DAY (8.64e4) /* s */
+#define GSL_CONST_CGS_WEEK (6.048e5) /* s */
+#define GSL_CONST_CGS_INCH (2.54e0) /* cm */
+#define GSL_CONST_CGS_FOOT (3.048e1) /* cm */
+#define GSL_CONST_CGS_YARD (9.144e1) /* cm */
+#define GSL_CONST_CGS_MILE (1.609344e5) /* cm */
+#define GSL_CONST_CGS_NAUTICAL_MILE (1.852e5) /* cm */
+#define GSL_CONST_CGS_FATHOM (1.8288e2) /* cm */
+#define GSL_CONST_CGS_MIL (2.54e-3) /* cm */
+#define GSL_CONST_CGS_POINT (3.52777777778e-2) /* cm */
+#define GSL_CONST_CGS_TEXPOINT (3.51459803515e-2) /* cm */
+#define GSL_CONST_CGS_MICRON (1e-4) /* cm */
+#define GSL_CONST_CGS_ANGSTROM (1e-8) /* cm */
+#define GSL_CONST_CGS_HECTARE (1e8) /* cm^2 */
+#define GSL_CONST_CGS_ACRE (4.04685642241e7) /* cm^2 */
+#define GSL_CONST_CGS_BARN (1e-24) /* cm^2 */
+#define GSL_CONST_CGS_LITER (1e3) /* cm^3 */
+#define GSL_CONST_CGS_US_GALLON (3.78541178402e3) /* cm^3 */
+#define GSL_CONST_CGS_QUART (9.46352946004e2) /* cm^3 */
+#define GSL_CONST_CGS_PINT (4.73176473002e2) /* cm^3 */
+#define GSL_CONST_CGS_CUP (2.36588236501e2) /* cm^3 */
+#define GSL_CONST_CGS_FLUID_OUNCE (2.95735295626e1) /* cm^3 */
+#define GSL_CONST_CGS_TABLESPOON (1.47867647813e1) /* cm^3 */
+#define GSL_CONST_CGS_TEASPOON (4.92892159375e0) /* cm^3 */
+#define GSL_CONST_CGS_CANADIAN_GALLON (4.54609e3) /* cm^3 */
+#define GSL_CONST_CGS_UK_GALLON (4.546092e3) /* cm^3 */
+#define GSL_CONST_CGS_MILES_PER_HOUR (4.4704e1) /* cm / s */
+#define GSL_CONST_CGS_KILOMETERS_PER_HOUR (2.77777777778e1) /* cm / s */
+#define GSL_CONST_CGS_KNOT (5.14444444444e1) /* cm / s */
+#define GSL_CONST_CGS_POUND_MASS (4.5359237e2) /* g */
+#define GSL_CONST_CGS_OUNCE_MASS (2.8349523125e1) /* g */
+#define GSL_CONST_CGS_TON (9.0718474e5) /* g */
+#define GSL_CONST_CGS_METRIC_TON (1e6) /* g */
+#define GSL_CONST_CGS_UK_TON (1.0160469088e6) /* g */
+#define GSL_CONST_CGS_TROY_OUNCE (3.1103475e1) /* g */
+#define GSL_CONST_CGS_CARAT (2e-1) /* g */
+#define GSL_CONST_CGS_UNIFIED_ATOMIC_MASS (1.660538782e-24) /* g */
+#define GSL_CONST_CGS_GRAM_FORCE (9.80665e2) /* cm g / s^2 */
+#define GSL_CONST_CGS_POUND_FORCE (4.44822161526e5) /* cm g / s^2 */
+#define GSL_CONST_CGS_KILOPOUND_FORCE (4.44822161526e8) /* cm g / s^2 */
+#define GSL_CONST_CGS_POUNDAL (1.38255e4) /* cm g / s^2 */
+#define GSL_CONST_CGS_CALORIE (4.1868e7) /* g cm^2 / s^2 */
+#define GSL_CONST_CGS_BTU (1.05505585262e10) /* g cm^2 / s^2 */
+#define GSL_CONST_CGS_THERM (1.05506e15) /* g cm^2 / s^2 */
+#define GSL_CONST_CGS_HORSEPOWER (7.457e9) /* g cm^2 / s^3 */
+#define GSL_CONST_CGS_BAR (1e6) /* g / cm s^2 */
+#define GSL_CONST_CGS_STD_ATMOSPHERE (1.01325e6) /* g / cm s^2 */
+#define GSL_CONST_CGS_TORR (1.33322368421e3) /* g / cm s^2 */
+#define GSL_CONST_CGS_METER_OF_MERCURY (1.33322368421e6) /* g / cm s^2 */
+#define GSL_CONST_CGS_INCH_OF_MERCURY (3.38638815789e4) /* g / cm s^2 */
+#define GSL_CONST_CGS_INCH_OF_WATER (2.490889e3) /* g / cm s^2 */
+#define GSL_CONST_CGS_PSI (6.89475729317e4) /* g / cm s^2 */
+#define GSL_CONST_CGS_POISE (1e0) /* g / cm s */
+#define GSL_CONST_CGS_STOKES (1e0) /* cm^2 / s */
+#define GSL_CONST_CGS_STILB (1e0) /* cd / cm^2 */
+#define GSL_CONST_CGS_LUMEN (1e0) /* cd sr */
+#define GSL_CONST_CGS_LUX (1e-4) /* cd sr / cm^2 */
+#define GSL_CONST_CGS_PHOT (1e0) /* cd sr / cm^2 */
+#define GSL_CONST_CGS_FOOTCANDLE (1.076e-3) /* cd sr / cm^2 */
+#define GSL_CONST_CGS_LAMBERT (1e0) /* cd sr / cm^2 */
+#define GSL_CONST_CGS_FOOTLAMBERT (1.07639104e-3) /* cd sr / cm^2 */
+#define GSL_CONST_CGS_CURIE (3.7e10) /* 1 / s */
+#define GSL_CONST_CGS_ROENTGEN (2.58e-7) /* A s / g */
+#define GSL_CONST_CGS_RAD (1e2) /* cm^2 / s^2 */
+#define GSL_CONST_CGS_SOLAR_MASS (1.98892e33) /* g */
+#define GSL_CONST_CGS_BOHR_RADIUS (5.291772083e-9) /* cm */
+#define GSL_CONST_CGS_NEWTON (1e5) /* cm g / s^2 */
+#define GSL_CONST_CGS_DYNE (1e0) /* cm g / s^2 */
+#define GSL_CONST_CGS_JOULE (1e7) /* g cm^2 / s^2 */
+#define GSL_CONST_CGS_ERG (1e0) /* g cm^2 / s^2 */
+#define GSL_CONST_CGS_STEFAN_BOLTZMANN_CONSTANT (5.67040047374e-5) /* g / K^4 s^3 */
+#define GSL_CONST_CGS_THOMSON_CROSS_SECTION (6.65245893699e-25) /* cm^2 */
+
+#endif /* __GSL_CONST_CGS__ */
diff --git a/thirdparty/includes/GSL/gsl/gsl_const_cgsm.h b/thirdparty/includes/GSL/gsl/gsl_const_cgsm.h
new file mode 100644
index 0000000..2047e5e
--- /dev/null
+++ b/thirdparty/includes/GSL/gsl/gsl_const_cgsm.h
@@ -0,0 +1,122 @@
+/* const/gsl_const_cgsm.h
+ *
+ * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
+ * 2006, 2007, 2008, 2009 Brian Gough
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GSL_CONST_CGSM__
+#define __GSL_CONST_CGSM__
+
+#define GSL_CONST_CGSM_SPEED_OF_LIGHT (2.99792458e10) /* cm / s */
+#define GSL_CONST_CGSM_GRAVITATIONAL_CONSTANT (6.673e-8) /* cm^3 / g s^2 */
+#define GSL_CONST_CGSM_PLANCKS_CONSTANT_H (6.62606896e-27) /* g cm^2 / s */
+#define GSL_CONST_CGSM_PLANCKS_CONSTANT_HBAR (1.05457162825e-27) /* g cm^2 / s */
+#define GSL_CONST_CGSM_ASTRONOMICAL_UNIT (1.49597870691e13) /* cm */
+#define GSL_CONST_CGSM_LIGHT_YEAR (9.46053620707e17) /* cm */
+#define GSL_CONST_CGSM_PARSEC (3.08567758135e18) /* cm */
+#define GSL_CONST_CGSM_GRAV_ACCEL (9.80665e2) /* cm / s^2 */
+#define GSL_CONST_CGSM_ELECTRON_VOLT (1.602176487e-12) /* g cm^2 / s^2 */
+#define GSL_CONST_CGSM_MASS_ELECTRON (9.10938188e-28) /* g */
+#define GSL_CONST_CGSM_MASS_MUON (1.88353109e-25) /* g */
+#define GSL_CONST_CGSM_MASS_PROTON (1.67262158e-24) /* g */
+#define GSL_CONST_CGSM_MASS_NEUTRON (1.67492716e-24) /* g */
+#define GSL_CONST_CGSM_RYDBERG (2.17987196968e-11) /* g cm^2 / s^2 */
+#define GSL_CONST_CGSM_BOLTZMANN (1.3806504e-16) /* g cm^2 / K s^2 */
+#define GSL_CONST_CGSM_MOLAR_GAS (8.314472e7) /* g cm^2 / K mol s^2 */
+#define GSL_CONST_CGSM_STANDARD_GAS_VOLUME (2.2710981e4) /* cm^3 / mol */
+#define GSL_CONST_CGSM_MINUTE (6e1) /* s */
+#define GSL_CONST_CGSM_HOUR (3.6e3) /* s */
+#define GSL_CONST_CGSM_DAY (8.64e4) /* s */
+#define GSL_CONST_CGSM_WEEK (6.048e5) /* s */
+#define GSL_CONST_CGSM_INCH (2.54e0) /* cm */
+#define GSL_CONST_CGSM_FOOT (3.048e1) /* cm */
+#define GSL_CONST_CGSM_YARD (9.144e1) /* cm */
+#define GSL_CONST_CGSM_MILE (1.609344e5) /* cm */
+#define GSL_CONST_CGSM_NAUTICAL_MILE (1.852e5) /* cm */
+#define GSL_CONST_CGSM_FATHOM (1.8288e2) /* cm */
+#define GSL_CONST_CGSM_MIL (2.54e-3) /* cm */
+#define GSL_CONST_CGSM_POINT (3.52777777778e-2) /* cm */
+#define GSL_CONST_CGSM_TEXPOINT (3.51459803515e-2) /* cm */
+#define GSL_CONST_CGSM_MICRON (1e-4) /* cm */
+#define GSL_CONST_CGSM_ANGSTROM (1e-8) /* cm */
+#define GSL_CONST_CGSM_HECTARE (1e8) /* cm^2 */
+#define GSL_CONST_CGSM_ACRE (4.04685642241e7) /* cm^2 */
+#define GSL_CONST_CGSM_BARN (1e-24) /* cm^2 */
+#define GSL_CONST_CGSM_LITER (1e3) /* cm^3 */
+#define GSL_CONST_CGSM_US_GALLON (3.78541178402e3) /* cm^3 */
+#define GSL_CONST_CGSM_QUART (9.46352946004e2) /* cm^3 */
+#define GSL_CONST_CGSM_PINT (4.73176473002e2) /* cm^3 */
+#define GSL_CONST_CGSM_CUP (2.36588236501e2) /* cm^3 */
+#define GSL_CONST_CGSM_FLUID_OUNCE (2.95735295626e1) /* cm^3 */
+#define GSL_CONST_CGSM_TABLESPOON (1.47867647813e1) /* cm^3 */
+#define GSL_CONST_CGSM_TEASPOON (4.92892159375e0) /* cm^3 */
+#define GSL_CONST_CGSM_CANADIAN_GALLON (4.54609e3) /* cm^3 */
+#define GSL_CONST_CGSM_UK_GALLON (4.546092e3) /* cm^3 */
+#define GSL_CONST_CGSM_MILES_PER_HOUR (4.4704e1) /* cm / s */
+#define GSL_CONST_CGSM_KILOMETERS_PER_HOUR (2.77777777778e1) /* cm / s */
+#define GSL_CONST_CGSM_KNOT (5.14444444444e1) /* cm / s */
+#define GSL_CONST_CGSM_POUND_MASS (4.5359237e2) /* g */
+#define GSL_CONST_CGSM_OUNCE_MASS (2.8349523125e1) /* g */
+#define GSL_CONST_CGSM_TON (9.0718474e5) /* g */
+#define GSL_CONST_CGSM_METRIC_TON (1e6) /* g */
+#define GSL_CONST_CGSM_UK_TON (1.0160469088e6) /* g */
+#define GSL_CONST_CGSM_TROY_OUNCE (3.1103475e1) /* g */
+#define GSL_CONST_CGSM_CARAT (2e-1) /* g */
+#define GSL_CONST_CGSM_UNIFIED_ATOMIC_MASS (1.660538782e-24) /* g */
+#define GSL_CONST_CGSM_GRAM_FORCE (9.80665e2) /* cm g / s^2 */
+#define GSL_CONST_CGSM_POUND_FORCE (4.44822161526e5) /* cm g / s^2 */
+#define GSL_CONST_CGSM_KILOPOUND_FORCE (4.44822161526e8) /* cm g / s^2 */
+#define GSL_CONST_CGSM_POUNDAL (1.38255e4) /* cm g / s^2 */
+#define GSL_CONST_CGSM_CALORIE (4.1868e7) /* g cm^2 / s^2 */
+#define GSL_CONST_CGSM_BTU (1.05505585262e10) /* g cm^2 / s^2 */
+#define GSL_CONST_CGSM_THERM (1.05506e15) /* g cm^2 / s^2 */
+#define GSL_CONST_CGSM_HORSEPOWER (7.457e9) /* g cm^2 / s^3 */
+#define GSL_CONST_CGSM_BAR (1e6) /* g / cm s^2 */
+#define GSL_CONST_CGSM_STD_ATMOSPHERE (1.01325e6) /* g / cm s^2 */
+#define GSL_CONST_CGSM_TORR (1.33322368421e3) /* g / cm s^2 */
+#define GSL_CONST_CGSM_METER_OF_MERCURY (1.33322368421e6) /* g / cm s^2 */
+#define GSL_CONST_CGSM_INCH_OF_MERCURY (3.38638815789e4) /* g / cm s^2 */
+#define GSL_CONST_CGSM_INCH_OF_WATER (2.490889e3) /* g / cm s^2 */
+#define GSL_CONST_CGSM_PSI (6.89475729317e4) /* g / cm s^2 */
+#define GSL_CONST_CGSM_POISE (1e0) /* g / cm s */
+#define GSL_CONST_CGSM_STOKES (1e0) /* cm^2 / s */
+#define GSL_CONST_CGSM_STILB (1e0) /* cd / cm^2 */
+#define GSL_CONST_CGSM_LUMEN (1e0) /* cd sr */
+#define GSL_CONST_CGSM_LUX (1e-4) /* cd sr / cm^2 */
+#define GSL_CONST_CGSM_PHOT (1e0) /* cd sr / cm^2 */
+#define GSL_CONST_CGSM_FOOTCANDLE (1.076e-3) /* cd sr / cm^2 */
+#define GSL_CONST_CGSM_LAMBERT (1e0) /* cd sr / cm^2 */
+#define GSL_CONST_CGSM_FOOTLAMBERT (1.07639104e-3) /* cd sr / cm^2 */
+#define GSL_CONST_CGSM_CURIE (3.7e10) /* 1 / s */
+#define GSL_CONST_CGSM_ROENTGEN (2.58e-8) /* abamp s / g */
+#define GSL_CONST_CGSM_RAD (1e2) /* cm^2 / s^2 */
+#define GSL_CONST_CGSM_SOLAR_MASS (1.98892e33) /* g */
+#define GSL_CONST_CGSM_BOHR_RADIUS (5.291772083e-9) /* cm */
+#define GSL_CONST_CGSM_NEWTON (1e5) /* cm g / s^2 */
+#define GSL_CONST_CGSM_DYNE (1e0) /* cm g / s^2 */
+#define GSL_CONST_CGSM_JOULE (1e7) /* g cm^2 / s^2 */
+#define GSL_CONST_CGSM_ERG (1e0) /* g cm^2 / s^2 */
+#define GSL_CONST_CGSM_STEFAN_BOLTZMANN_CONSTANT (5.67040047374e-5) /* g / K^4 s^3 */
+#define GSL_CONST_CGSM_THOMSON_CROSS_SECTION (6.65245893699e-25) /* cm^2 */
+#define GSL_CONST_CGSM_BOHR_MAGNETON (9.27400899e-21) /* abamp cm^2 */
+#define GSL_CONST_CGSM_NUCLEAR_MAGNETON (5.05078317e-24) /* abamp cm^2 */
+#define GSL_CONST_CGSM_ELECTRON_MAGNETIC_MOMENT (9.28476362e-21) /* abamp cm^2 */
+#define GSL_CONST_CGSM_PROTON_MAGNETIC_MOMENT (1.410606633e-23) /* abamp cm^2 */
+#define GSL_CONST_CGSM_FARADAY (9.64853429775e3) /* abamp s / mol */
+#define GSL_CONST_CGSM_ELECTRON_CHARGE (1.602176487e-20) /* abamp s */
+
+#endif /* __GSL_CONST_CGSM__ */
diff --git a/thirdparty/includes/GSL/gsl/gsl_const_mks.h b/thirdparty/includes/GSL/gsl/gsl_const_mks.h
new file mode 100644
index 0000000..bc60e2a
--- /dev/null
+++ b/thirdparty/includes/GSL/gsl/gsl_const_mks.h
@@ -0,0 +1,126 @@
+/* const/gsl_const_mks.h
+ *
+ * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
+ * 2006, 2007, 2008, 2009 Brian Gough
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GSL_CONST_MKS__
+#define __GSL_CONST_MKS__
+
+#define GSL_CONST_MKS_SPEED_OF_LIGHT (2.99792458e8) /* m / s */
+#define GSL_CONST_MKS_GRAVITATIONAL_CONSTANT (6.673e-11) /* m^3 / kg s^2 */
+#define GSL_CONST_MKS_PLANCKS_CONSTANT_H (6.62606896e-34) /* kg m^2 / s */
+#define GSL_CONST_MKS_PLANCKS_CONSTANT_HBAR (1.05457162825e-34) /* kg m^2 / s */
+#define GSL_CONST_MKS_ASTRONOMICAL_UNIT (1.49597870691e11) /* m */
+#define GSL_CONST_MKS_LIGHT_YEAR (9.46053620707e15) /* m */
+#define GSL_CONST_MKS_PARSEC (3.08567758135e16) /* m */
+#define GSL_CONST_MKS_GRAV_ACCEL (9.80665e0) /* m / s^2 */
+#define GSL_CONST_MKS_ELECTRON_VOLT (1.602176487e-19) /* kg m^2 / s^2 */
+#define GSL_CONST_MKS_MASS_ELECTRON (9.10938188e-31) /* kg */
+#define GSL_CONST_MKS_MASS_MUON (1.88353109e-28) /* kg */
+#define GSL_CONST_MKS_MASS_PROTON (1.67262158e-27) /* kg */
+#define GSL_CONST_MKS_MASS_NEUTRON (1.67492716e-27) /* kg */
+#define GSL_CONST_MKS_RYDBERG (2.17987196968e-18) /* kg m^2 / s^2 */
+#define GSL_CONST_MKS_BOLTZMANN (1.3806504e-23) /* kg m^2 / K s^2 */
+#define GSL_CONST_MKS_MOLAR_GAS (8.314472e0) /* kg m^2 / K mol s^2 */
+#define GSL_CONST_MKS_STANDARD_GAS_VOLUME (2.2710981e-2) /* m^3 / mol */
+#define GSL_CONST_MKS_MINUTE (6e1) /* s */
+#define GSL_CONST_MKS_HOUR (3.6e3) /* s */
+#define GSL_CONST_MKS_DAY (8.64e4) /* s */
+#define GSL_CONST_MKS_WEEK (6.048e5) /* s */
+#define GSL_CONST_MKS_INCH (2.54e-2) /* m */
+#define GSL_CONST_MKS_FOOT (3.048e-1) /* m */
+#define GSL_CONST_MKS_YARD (9.144e-1) /* m */
+#define GSL_CONST_MKS_MILE (1.609344e3) /* m */
+#define GSL_CONST_MKS_NAUTICAL_MILE (1.852e3) /* m */
+#define GSL_CONST_MKS_FATHOM (1.8288e0) /* m */
+#define GSL_CONST_MKS_MIL (2.54e-5) /* m */
+#define GSL_CONST_MKS_POINT (3.52777777778e-4) /* m */
+#define GSL_CONST_MKS_TEXPOINT (3.51459803515e-4) /* m */
+#define GSL_CONST_MKS_MICRON (1e-6) /* m */
+#define GSL_CONST_MKS_ANGSTROM (1e-10) /* m */
+#define GSL_CONST_MKS_HECTARE (1e4) /* m^2 */
+#define GSL_CONST_MKS_ACRE (4.04685642241e3) /* m^2 */
+#define GSL_CONST_MKS_BARN (1e-28) /* m^2 */
+#define GSL_CONST_MKS_LITER (1e-3) /* m^3 */
+#define GSL_CONST_MKS_US_GALLON (3.78541178402e-3) /* m^3 */
+#define GSL_CONST_MKS_QUART (9.46352946004e-4) /* m^3 */
+#define GSL_CONST_MKS_PINT (4.73176473002e-4) /* m^3 */
+#define GSL_CONST_MKS_CUP (2.36588236501e-4) /* m^3 */
+#define GSL_CONST_MKS_FLUID_OUNCE (2.95735295626e-5) /* m^3 */
+#define GSL_CONST_MKS_TABLESPOON (1.47867647813e-5) /* m^3 */
+#define GSL_CONST_MKS_TEASPOON (4.92892159375e-6) /* m^3 */
+#define GSL_CONST_MKS_CANADIAN_GALLON (4.54609e-3) /* m^3 */
+#define GSL_CONST_MKS_UK_GALLON (4.546092e-3) /* m^3 */
+#define GSL_CONST_MKS_MILES_PER_HOUR (4.4704e-1) /* m / s */
+#define GSL_CONST_MKS_KILOMETERS_PER_HOUR (2.77777777778e-1) /* m / s */
+#define GSL_CONST_MKS_KNOT (5.14444444444e-1) /* m / s */
+#define GSL_CONST_MKS_POUND_MASS (4.5359237e-1) /* kg */
+#define GSL_CONST_MKS_OUNCE_MASS (2.8349523125e-2) /* kg */
+#define GSL_CONST_MKS_TON (9.0718474e2) /* kg */
+#define GSL_CONST_MKS_METRIC_TON (1e3) /* kg */
+#define GSL_CONST_MKS_UK_TON (1.0160469088e3) /* kg */
+#define GSL_CONST_MKS_TROY_OUNCE (3.1103475e-2) /* kg */
+#define GSL_CONST_MKS_CARAT (2e-4) /* kg */
+#define GSL_CONST_MKS_UNIFIED_ATOMIC_MASS (1.660538782e-27) /* kg */
+#define GSL_CONST_MKS_GRAM_FORCE (9.80665e-3) /* kg m / s^2 */
+#define GSL_CONST_MKS_POUND_FORCE (4.44822161526e0) /* kg m / s^2 */
+#define GSL_CONST_MKS_KILOPOUND_FORCE (4.44822161526e3) /* kg m / s^2 */
+#define GSL_CONST_MKS_POUNDAL (1.38255e-1) /* kg m / s^2 */
+#define GSL_CONST_MKS_CALORIE (4.1868e0) /* kg m^2 / s^2 */
+#define GSL_CONST_MKS_BTU (1.05505585262e3) /* kg m^2 / s^2 */
+#define GSL_CONST_MKS_THERM (1.05506e8) /* kg m^2 / s^2 */
+#define GSL_CONST_MKS_HORSEPOWER (7.457e2) /* kg m^2 / s^3 */
+#define GSL_CONST_MKS_BAR (1e5) /* kg / m s^2 */
+#define GSL_CONST_MKS_STD_ATMOSPHERE (1.01325e5) /* kg / m s^2 */
+#define GSL_CONST_MKS_TORR (1.33322368421e2) /* kg / m s^2 */
+#define GSL_CONST_MKS_METER_OF_MERCURY (1.33322368421e5) /* kg / m s^2 */
+#define GSL_CONST_MKS_INCH_OF_MERCURY (3.38638815789e3) /* kg / m s^2 */
+#define GSL_CONST_MKS_INCH_OF_WATER (2.490889e2) /* kg / m s^2 */
+#define GSL_CONST_MKS_PSI (6.89475729317e3) /* kg / m s^2 */
+#define GSL_CONST_MKS_POISE (1e-1) /* kg m^-1 s^-1 */
+#define GSL_CONST_MKS_STOKES (1e-4) /* m^2 / s */
+#define GSL_CONST_MKS_STILB (1e4) /* cd / m^2 */
+#define GSL_CONST_MKS_LUMEN (1e0) /* cd sr */
+#define GSL_CONST_MKS_LUX (1e0) /* cd sr / m^2 */
+#define GSL_CONST_MKS_PHOT (1e4) /* cd sr / m^2 */
+#define GSL_CONST_MKS_FOOTCANDLE (1.076e1) /* cd sr / m^2 */
+#define GSL_CONST_MKS_LAMBERT (1e4) /* cd sr / m^2 */
+#define GSL_CONST_MKS_FOOTLAMBERT (1.07639104e1) /* cd sr / m^2 */
+#define GSL_CONST_MKS_CURIE (3.7e10) /* 1 / s */
+#define GSL_CONST_MKS_ROENTGEN (2.58e-4) /* A s / kg */
+#define GSL_CONST_MKS_RAD (1e-2) /* m^2 / s^2 */
+#define GSL_CONST_MKS_SOLAR_MASS (1.98892e30) /* kg */
+#define GSL_CONST_MKS_BOHR_RADIUS (5.291772083e-11) /* m */
+#define GSL_CONST_MKS_NEWTON (1e0) /* kg m / s^2 */
+#define GSL_CONST_MKS_DYNE (1e-5) /* kg m / s^2 */
+#define GSL_CONST_MKS_JOULE (1e0) /* kg m^2 / s^2 */
+#define GSL_CONST_MKS_ERG (1e-7) /* kg m^2 / s^2 */
+#define GSL_CONST_MKS_STEFAN_BOLTZMANN_CONSTANT (5.67040047374e-8) /* kg / K^4 s^3 */
+#define GSL_CONST_MKS_THOMSON_CROSS_SECTION (6.65245893699e-29) /* m^2 */
+#define GSL_CONST_MKS_BOHR_MAGNETON (9.27400899e-24) /* A m^2 */
+#define GSL_CONST_MKS_NUCLEAR_MAGNETON (5.05078317e-27) /* A m^2 */
+#define GSL_CONST_MKS_ELECTRON_MAGNETIC_MOMENT (9.28476362e-24) /* A m^2 */
+#define GSL_CONST_MKS_PROTON_MAGNETIC_MOMENT (1.410606633e-26) /* A m^2 */
+#define GSL_CONST_MKS_FARADAY (9.64853429775e4) /* A s / mol */
+#define GSL_CONST_MKS_ELECTRON_CHARGE (1.602176487e-19) /* A s */
+#define GSL_CONST_MKS_VACUUM_PERMITTIVITY (8.854187817e-12) /* A^2 s^4 / kg m^3 */
+#define GSL_CONST_MKS_VACUUM_PERMEABILITY (1.25663706144e-6) /* kg m / A^2 s^2 */
+#define GSL_CONST_MKS_DEBYE (3.33564095198e-30) /* A s^2 / m^2 */
+#define GSL_CONST_MKS_GAUSS (1e-4) /* kg / A s^2 */
+
+#endif /* __GSL_CONST_MKS__ */
diff --git a/thirdparty/includes/GSL/gsl/gsl_const_mksa.h b/thirdparty/includes/GSL/gsl/gsl_const_mksa.h
new file mode 100644
index 0000000..5d91d1c
--- /dev/null
+++ b/thirdparty/includes/GSL/gsl/gsl_const_mksa.h
@@ -0,0 +1,126 @@
+/* const/gsl_const_mksa.h
+ *
+ * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
+ * 2006, 2007, 2008, 2009 Brian Gough
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GSL_CONST_MKSA__
+#define __GSL_CONST_MKSA__
+
+#define GSL_CONST_MKSA_SPEED_OF_LIGHT (2.99792458e8) /* m / s */
+#define GSL_CONST_MKSA_GRAVITATIONAL_CONSTANT (6.673e-11) /* m^3 / kg s^2 */
+#define GSL_CONST_MKSA_PLANCKS_CONSTANT_H (6.62606896e-34) /* kg m^2 / s */
+#define GSL_CONST_MKSA_PLANCKS_CONSTANT_HBAR (1.05457162825e-34) /* kg m^2 / s */
+#define GSL_CONST_MKSA_ASTRONOMICAL_UNIT (1.49597870691e11) /* m */
+#define GSL_CONST_MKSA_LIGHT_YEAR (9.46053620707e15) /* m */
+#define GSL_CONST_MKSA_PARSEC (3.08567758135e16) /* m */
+#define GSL_CONST_MKSA_GRAV_ACCEL (9.80665e0) /* m / s^2 */
+#define GSL_CONST_MKSA_ELECTRON_VOLT (1.602176487e-19) /* kg m^2 / s^2 */
+#define GSL_CONST_MKSA_MASS_ELECTRON (9.10938188e-31) /* kg */
+#define GSL_CONST_MKSA_MASS_MUON (1.88353109e-28) /* kg */
+#define GSL_CONST_MKSA_MASS_PROTON (1.67262158e-27) /* kg */
+#define GSL_CONST_MKSA_MASS_NEUTRON (1.67492716e-27) /* kg */
+#define GSL_CONST_MKSA_RYDBERG (2.17987196968e-18) /* kg m^2 / s^2 */
+#define GSL_CONST_MKSA_BOLTZMANN (1.3806504e-23) /* kg m^2 / K s^2 */
+#define GSL_CONST_MKSA_MOLAR_GAS (8.314472e0) /* kg m^2 / K mol s^2 */
+#define GSL_CONST_MKSA_STANDARD_GAS_VOLUME (2.2710981e-2) /* m^3 / mol */
+#define GSL_CONST_MKSA_MINUTE (6e1) /* s */
+#define GSL_CONST_MKSA_HOUR (3.6e3) /* s */
+#define GSL_CONST_MKSA_DAY (8.64e4) /* s */
+#define GSL_CONST_MKSA_WEEK (6.048e5) /* s */
+#define GSL_CONST_MKSA_INCH (2.54e-2) /* m */
+#define GSL_CONST_MKSA_FOOT (3.048e-1) /* m */
+#define GSL_CONST_MKSA_YARD (9.144e-1) /* m */
+#define GSL_CONST_MKSA_MILE (1.609344e3) /* m */
+#define GSL_CONST_MKSA_NAUTICAL_MILE (1.852e3) /* m */
+#define GSL_CONST_MKSA_FATHOM (1.8288e0) /* m */
+#define GSL_CONST_MKSA_MIL (2.54e-5) /* m */
+#define GSL_CONST_MKSA_POINT (3.52777777778e-4) /* m */
+#define GSL_CONST_MKSA_TEXPOINT (3.51459803515e-4) /* m */
+#define GSL_CONST_MKSA_MICRON (1e-6) /* m */
+#define GSL_CONST_MKSA_ANGSTROM (1e-10) /* m */
+#define GSL_CONST_MKSA_HECTARE (1e4) /* m^2 */
+#define GSL_CONST_MKSA_ACRE (4.04685642241e3) /* m^2 */
+#define GSL_CONST_MKSA_BARN (1e-28) /* m^2 */
+#define GSL_CONST_MKSA_LITER (1e-3) /* m^3 */
+#define GSL_CONST_MKSA_US_GALLON (3.78541178402e-3) /* m^3 */
+#define GSL_CONST_MKSA_QUART (9.46352946004e-4) /* m^3 */
+#define GSL_CONST_MKSA_PINT (4.73176473002e-4) /* m^3 */
+#define GSL_CONST_MKSA_CUP (2.36588236501e-4) /* m^3 */
+#define GSL_CONST_MKSA_FLUID_OUNCE (2.95735295626e-5) /* m^3 */
+#define GSL_CONST_MKSA_TABLESPOON (1.47867647813e-5) /* m^3 */
+#define GSL_CONST_MKSA_TEASPOON (4.92892159375e-6) /* m^3 */
+#define GSL_CONST_MKSA_CANADIAN_GALLON (4.54609e-3) /* m^3 */
+#define GSL_CONST_MKSA_UK_GALLON (4.546092e-3) /* m^3 */
+#define GSL_CONST_MKSA_MILES_PER_HOUR (4.4704e-1) /* m / s */
+#define GSL_CONST_MKSA_KILOMETERS_PER_HOUR (2.77777777778e-1) /* m / s */
+#define GSL_CONST_MKSA_KNOT (5.14444444444e-1) /* m / s */
+#define GSL_CONST_MKSA_POUND_MASS (4.5359237e-1) /* kg */
+#define GSL_CONST_MKSA_OUNCE_MASS (2.8349523125e-2) /* kg */
+#define GSL_CONST_MKSA_TON (9.0718474e2) /* kg */
+#define GSL_CONST_MKSA_METRIC_TON (1e3) /* kg */
+#define GSL_CONST_MKSA_UK_TON (1.0160469088e3) /* kg */
+#define GSL_CONST_MKSA_TROY_OUNCE (3.1103475e-2) /* kg */
+#define GSL_CONST_MKSA_CARAT (2e-4) /* kg */
+#define GSL_CONST_MKSA_UNIFIED_ATOMIC_MASS (1.660538782e-27) /* kg */
+#define GSL_CONST_MKSA_GRAM_FORCE (9.80665e-3) /* kg m / s^2 */
+#define GSL_CONST_MKSA_POUND_FORCE (4.44822161526e0) /* kg m / s^2 */
+#define GSL_CONST_MKSA_KILOPOUND_FORCE (4.44822161526e3) /* kg m / s^2 */
+#define GSL_CONST_MKSA_POUNDAL (1.38255e-1) /* kg m / s^2 */
+#define GSL_CONST_MKSA_CALORIE (4.1868e0) /* kg m^2 / s^2 */
+#define GSL_CONST_MKSA_BTU (1.05505585262e3) /* kg m^2 / s^2 */
+#define GSL_CONST_MKSA_THERM (1.05506e8) /* kg m^2 / s^2 */
+#define GSL_CONST_MKSA_HORSEPOWER (7.457e2) /* kg m^2 / s^3 */
+#define GSL_CONST_MKSA_BAR (1e5) /* kg / m s^2 */
+#define GSL_CONST_MKSA_STD_ATMOSPHERE (1.01325e5) /* kg / m s^2 */
+#define GSL_CONST_MKSA_TORR (1.33322368421e2) /* kg / m s^2 */
+#define GSL_CONST_MKSA_METER_OF_MERCURY (1.33322368421e5) /* kg / m s^2 */
+#define GSL_CONST_MKSA_INCH_OF_MERCURY (3.38638815789e3) /* kg / m s^2 */
+#define GSL_CONST_MKSA_INCH_OF_WATER (2.490889e2) /* kg / m s^2 */
+#define GSL_CONST_MKSA_PSI (6.89475729317e3) /* kg / m s^2 */
+#define GSL_CONST_MKSA_POISE (1e-1) /* kg m^-1 s^-1 */
+#define GSL_CONST_MKSA_STOKES (1e-4) /* m^2 / s */
+#define GSL_CONST_MKSA_STILB (1e4) /* cd / m^2 */
+#define GSL_CONST_MKSA_LUMEN (1e0) /* cd sr */
+#define GSL_CONST_MKSA_LUX (1e0) /* cd sr / m^2 */
+#define GSL_CONST_MKSA_PHOT (1e4) /* cd sr / m^2 */
+#define GSL_CONST_MKSA_FOOTCANDLE (1.076e1) /* cd sr / m^2 */
+#define GSL_CONST_MKSA_LAMBERT (1e4) /* cd sr / m^2 */
+#define GSL_CONST_MKSA_FOOTLAMBERT (1.07639104e1) /* cd sr / m^2 */
+#define GSL_CONST_MKSA_CURIE (3.7e10) /* 1 / s */
+#define GSL_CONST_MKSA_ROENTGEN (2.58e-4) /* A s / kg */
+#define GSL_CONST_MKSA_RAD (1e-2) /* m^2 / s^2 */
+#define GSL_CONST_MKSA_SOLAR_MASS (1.98892e30) /* kg */
+#define GSL_CONST_MKSA_BOHR_RADIUS (5.291772083e-11) /* m */
+#define GSL_CONST_MKSA_NEWTON (1e0) /* kg m / s^2 */
+#define GSL_CONST_MKSA_DYNE (1e-5) /* kg m / s^2 */
+#define GSL_CONST_MKSA_JOULE (1e0) /* kg m^2 / s^2 */
+#define GSL_CONST_MKSA_ERG (1e-7) /* kg m^2 / s^2 */
+#define GSL_CONST_MKSA_STEFAN_BOLTZMANN_CONSTANT (5.67040047374e-8) /* kg / K^4 s^3 */
+#define GSL_CONST_MKSA_THOMSON_CROSS_SECTION (6.65245893699e-29) /* m^2 */
+#define GSL_CONST_MKSA_BOHR_MAGNETON (9.27400899e-24) /* A m^2 */
+#define GSL_CONST_MKSA_NUCLEAR_MAGNETON (5.05078317e-27) /* A m^2 */
+#define GSL_CONST_MKSA_ELECTRON_MAGNETIC_MOMENT (9.28476362e-24) /* A m^2 */
+#define GSL_CONST_MKSA_PROTON_MAGNETIC_MOMENT (1.410606633e-26) /* A m^2 */
+#define GSL_CONST_MKSA_FARADAY (9.64853429775e4) /* A s / mol */
+#define GSL_CONST_MKSA_ELECTRON_CHARGE (1.602176487e-19) /* A s */
+#define GSL_CONST_MKSA_VACUUM_PERMITTIVITY (8.854187817e-12) /* A^2 s^4 / kg m^3 */
+#define GSL_CONST_MKSA_VACUUM_PERMEABILITY (1.25663706144e-6) /* kg m / A^2 s^2 */
+#define GSL_CONST_MKSA_DEBYE (3.33564095198e-30) /* A s^2 / m^2 */
+#define GSL_CONST_MKSA_GAUSS (1e-4) /* kg / A s^2 */
+
+#endif /* __GSL_CONST_MKSA__ */
diff --git a/thirdparty/includes/GSL/gsl/gsl_const_num.h b/thirdparty/includes/GSL/gsl/gsl_const_num.h
new file mode 100644
index 0000000..385a660
--- /dev/null
+++ b/thirdparty/includes/GSL/gsl/gsl_const_num.h
@@ -0,0 +1,43 @@
+/* const/gsl_const_num.h
+ *
+ * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
+ * 2006, 2007, 2008, 2009 Brian Gough
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GSL_CONST_NUM__
+#define __GSL_CONST_NUM__
+
+#define GSL_CONST_NUM_FINE_STRUCTURE (7.297352533e-3) /* 1 */
+#define GSL_CONST_NUM_AVOGADRO (6.02214199e23) /* 1 / mol */
+#define GSL_CONST_NUM_YOTTA (1e24) /* 1 */
+#define GSL_CONST_NUM_ZETTA (1e21) /* 1 */
+#define GSL_CONST_NUM_EXA (1e18) /* 1 */
+#define GSL_CONST_NUM_PETA (1e15) /* 1 */
+#define GSL_CONST_NUM_TERA (1e12) /* 1 */
+#define GSL_CONST_NUM_GIGA (1e9) /* 1 */
+#define GSL_CONST_NUM_MEGA (1e6) /* 1 */
+#define GSL_CONST_NUM_KILO (1e3) /* 1 */
+#define GSL_CONST_NUM_MILLI (1e-3) /* 1 */
+#define GSL_CONST_NUM_MICRO (1e-6) /* 1 */
+#define GSL_CONST_NUM_NANO (1e-9) /* 1 */
+#define GSL_CONST_NUM_PICO (1e-12) /* 1 */
+#define GSL_CONST_NUM_FEMTO (1e-15) /* 1 */
+#define GSL_CONST_NUM_ATTO (1e-18) /* 1 */
+#define GSL_CONST_NUM_ZEPTO (1e-21) /* 1 */
+#define GSL_CONST_NUM_YOCTO (1e-24) /* 1 */
+
+#endif /* __GSL_CONST_NUM__ */
diff --git a/thirdparty/includes/GSL/gsl/gsl_deriv.h b/thirdparty/includes/GSL/gsl/gsl_deriv.h
new file mode 100644
index 0000000..7f4694f
--- /dev/null
+++ b/thirdparty/includes/GSL/gsl/gsl_deriv.h
@@ -0,0 +1,50 @@
+/* deriv/gsl_deriv.h
+ *
+ * Copyright (C) 2000 David Morrison
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GSL_DERIV_H__
+#define __GSL_DERIV_H__
+#include
+
+#undef __BEGIN_DECLS
+#undef __END_DECLS
+#ifdef __cplusplus
+# define __BEGIN_DECLS extern "C" {
+# define __END_DECLS }
+#else
+# define __BEGIN_DECLS /* empty */
+# define __END_DECLS /* empty */
+#endif
+
+__BEGIN_DECLS
+
+int gsl_deriv_central (const gsl_function *f,
+ double x, double h,
+ double *result, double *abserr);
+
+int gsl_deriv_backward (const gsl_function *f,
+ double x, double h,
+ double *result, double *abserr);
+
+int gsl_deriv_forward (const gsl_function *f,
+ double x, double h,
+ double *result, double *abserr);
+
+__END_DECLS
+
+#endif /* __GSL_DERIV_H__ */
diff --git a/thirdparty/includes/GSL/gsl/gsl_dft_complex.h b/thirdparty/includes/GSL/gsl/gsl_dft_complex.h
new file mode 100644
index 0000000..cb4d088
--- /dev/null
+++ b/thirdparty/includes/GSL/gsl/gsl_dft_complex.h
@@ -0,0 +1,55 @@
+/* fft/gsl_dft_complex.h
+ *
+ * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GSL_DFT_COMPLEX_H__
+#define __GSL_DFT_COMPLEX_H__
+
+#include
+
+#include
+#include
+#include
+
+#undef __BEGIN_DECLS
+#undef __END_DECLS
+#ifdef __cplusplus
+# define __BEGIN_DECLS extern "C" {
+# define __END_DECLS }
+#else
+# define __BEGIN_DECLS /* empty */
+# define __END_DECLS /* empty */
+#endif
+
+__BEGIN_DECLS
+
+int gsl_dft_complex_forward (const double data[], const size_t stride, const size_t n,
+ double result[]);
+
+int gsl_dft_complex_backward (const double data[], const size_t stride, const size_t n,
+ double result[]);
+
+int gsl_dft_complex_inverse (const double data[], const size_t stride, const size_t n,
+ double result[]);
+
+int gsl_dft_complex_transform (const double data[], const size_t stride, const size_t n,
+ double result[], const gsl_fft_direction sign);
+
+__END_DECLS
+
+#endif /* __GSL_DFT_COMPLEX_H__ */
diff --git a/thirdparty/includes/GSL/gsl/gsl_dft_complex_float.h b/thirdparty/includes/GSL/gsl/gsl_dft_complex_float.h
new file mode 100644
index 0000000..c511ac0
--- /dev/null
+++ b/thirdparty/includes/GSL/gsl/gsl_dft_complex_float.h
@@ -0,0 +1,55 @@
+/* fft/gsl_dft_complex_float.h
+ *
+ * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GSL_DFT_COMPLEX_FLOAT_H__
+#define __GSL_DFT_COMPLEX_FLOAT_H__
+
+#include
+
+#include
+#include
+#include
+
+#undef __BEGIN_DECLS
+#undef __END_DECLS
+#ifdef __cplusplus
+# define __BEGIN_DECLS extern "C" {
+# define __END_DECLS }
+#else
+# define __BEGIN_DECLS /* empty */
+# define __END_DECLS /* empty */
+#endif
+
+__BEGIN_DECLS
+
+int gsl_dft_complex_float_forward (const float data[], const size_t stride, const size_t n,
+ float result[]);
+
+int gsl_dft_complex_float_backward (const float data[], const size_t stride, const size_t n,
+ float result[]);
+
+int gsl_dft_complex_float_inverse (const float data[], const size_t stride, const size_t n,
+ float result[]);
+
+int gsl_dft_complex_float_transform (const float data[], const size_t stride, const size_t n,
+ float result[], const gsl_fft_direction sign);
+
+__END_DECLS
+
+#endif /* __GSL_DFT_COMPLEX_FLOAT_H__ */
diff --git a/thirdparty/includes/GSL/gsl/gsl_dht.h b/thirdparty/includes/GSL/gsl/gsl_dht.h
new file mode 100644
index 0000000..bfc4b2f
--- /dev/null
+++ b/thirdparty/includes/GSL/gsl/gsl_dht.h
@@ -0,0 +1,87 @@
+/* dht/gsl_dht.h
+ *
+ * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* Author: G. Jungman
+ */
+#ifndef __GSL_DHT_H__
+#define __GSL_DHT_H__
+
+#undef __BEGIN_DECLS
+#undef __END_DECLS
+#ifdef __cplusplus
+# define __BEGIN_DECLS extern "C" {
+# define __END_DECLS }
+#else
+# define __BEGIN_DECLS /* empty */
+# define __END_DECLS /* empty */
+#endif
+
+__BEGIN_DECLS
+
+
+struct gsl_dht_struct {
+ size_t size; /* size of the sample arrays to be transformed */
+ double nu; /* Bessel function order */
+ double xmax; /* the upper limit to the x-sampling domain */
+ double kmax; /* the upper limit to the k-sampling domain */
+ double * j; /* array of computed J_nu zeros, j_{nu,s} = j[s] */
+ double * Jjj; /* transform numerator, J_nu(j_i j_m / j_N) */
+ double * J2; /* transform denominator, J_{nu+1}^2(j_m) */
+};
+typedef struct gsl_dht_struct gsl_dht;
+
+
+/* Create a new transform object for a given size
+ * sampling array on the domain [0, xmax].
+ */
+gsl_dht * gsl_dht_alloc(size_t size);
+gsl_dht * gsl_dht_new(size_t size, double nu, double xmax);
+
+/* Recalculate a transform object for given values of nu, xmax.
+ * You cannot change the size of the object since the internal
+ * allocation is reused.
+ */
+int gsl_dht_init(gsl_dht * t, double nu, double xmax);
+
+/* The n'th computed x sample point for a given transform.
+ * 0 <= n <= size-1
+ */
+double gsl_dht_x_sample(const gsl_dht * t, int n);
+
+
+/* The n'th computed k sample point for a given transform.
+ * 0 <= n <= size-1
+ */
+double gsl_dht_k_sample(const gsl_dht * t, int n);
+
+
+/* Free a transform object.
+ */
+void gsl_dht_free(gsl_dht * t);
+
+
+/* Perform a transform on a sampled array.
+ * f_in[0] ... f_in[size-1] and similarly for f_out[]
+ */
+int gsl_dht_apply(const gsl_dht * t, double * f_in, double * f_out);
+
+
+__END_DECLS
+
+#endif /* __GSL_DHT_H__ */
diff --git a/thirdparty/includes/GSL/gsl/gsl_diff.h b/thirdparty/includes/GSL/gsl/gsl_diff.h
new file mode 100644
index 0000000..a145894
--- /dev/null
+++ b/thirdparty/includes/GSL/gsl/gsl_diff.h
@@ -0,0 +1,52 @@
+/* diff/gsl_diff.h
+ *
+ * Copyright (C) 2000 David Morrison
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GSL_DIFF_H__
+#define __GSL_DIFF_H__
+#include
+
+#undef __BEGIN_DECLS
+#undef __END_DECLS
+#ifdef __cplusplus
+# define __BEGIN_DECLS extern "C" {
+# define __END_DECLS }
+#else
+# define __BEGIN_DECLS /* empty */
+# define __END_DECLS /* empty */
+#endif
+
+__BEGIN_DECLS
+
+#ifndef GSL_DISABLE_DEPRECATED
+int gsl_diff_central (const gsl_function *f,
+ double x,
+ double *result, double *abserr);
+
+int gsl_diff_backward (const gsl_function *f,
+ double x,
+ double *result, double *abserr);
+
+int gsl_diff_forward (const gsl_function *f,
+ double x,
+ double *result, double *abserr);
+#endif
+
+__END_DECLS
+
+#endif /* __GSL_DIFF_H__ */
diff --git a/thirdparty/includes/GSL/gsl/gsl_eigen.h b/thirdparty/includes/GSL/gsl/gsl_eigen.h
new file mode 100644
index 0000000..6de8dba
--- /dev/null
+++ b/thirdparty/includes/GSL/gsl/gsl_eigen.h
@@ -0,0 +1,347 @@
+/* eigen/gsl_eigen.h
+ *
+ * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2006, 2007 Gerard Jungman, Brian Gough, Patrick Alken
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GSL_EIGEN_H__
+#define __GSL_EIGEN_H__
+
+#include
+#include
+
+#undef __BEGIN_DECLS
+#undef __END_DECLS
+#ifdef __cplusplus
+# define __BEGIN_DECLS extern "C" {
+# define __END_DECLS }
+#else
+# define __BEGIN_DECLS /* empty */
+# define __END_DECLS /* empty */
+#endif
+
+__BEGIN_DECLS
+
+typedef struct {
+ size_t size;
+ double * d;
+ double * sd;
+} gsl_eigen_symm_workspace;
+
+gsl_eigen_symm_workspace * gsl_eigen_symm_alloc (const size_t n);
+void gsl_eigen_symm_free (gsl_eigen_symm_workspace * w);
+int gsl_eigen_symm (gsl_matrix * A, gsl_vector * eval, gsl_eigen_symm_workspace * w);
+
+typedef struct {
+ size_t size;
+ double * d;
+ double * sd;
+ double * gc;
+ double * gs;
+} gsl_eigen_symmv_workspace;
+
+gsl_eigen_symmv_workspace * gsl_eigen_symmv_alloc (const size_t n);
+void gsl_eigen_symmv_free (gsl_eigen_symmv_workspace * w);
+int gsl_eigen_symmv (gsl_matrix * A, gsl_vector * eval, gsl_matrix * evec, gsl_eigen_symmv_workspace * w);
+
+typedef struct {
+ size_t size;
+ double * d;
+ double * sd;
+ double * tau;
+} gsl_eigen_herm_workspace;
+
+gsl_eigen_herm_workspace * gsl_eigen_herm_alloc (const size_t n);
+void gsl_eigen_herm_free (gsl_eigen_herm_workspace * w);
+int gsl_eigen_herm (gsl_matrix_complex * A, gsl_vector * eval,
+ gsl_eigen_herm_workspace * w);
+
+typedef struct {
+ size_t size;
+ double * d;
+ double * sd;
+ double * tau;
+ double * gc;
+ double * gs;
+} gsl_eigen_hermv_workspace;
+
+gsl_eigen_hermv_workspace * gsl_eigen_hermv_alloc (const size_t n);
+void gsl_eigen_hermv_free (gsl_eigen_hermv_workspace * w);
+int gsl_eigen_hermv (gsl_matrix_complex * A, gsl_vector * eval,
+ gsl_matrix_complex * evec,
+ gsl_eigen_hermv_workspace * w);
+
+typedef struct {
+ size_t size; /* matrix size */
+ size_t max_iterations; /* max iterations since last eigenvalue found */
+ size_t n_iter; /* number of iterations since last eigenvalue found */
+ size_t n_evals; /* number of eigenvalues found so far */
+
+ int compute_t; /* compute Schur form T = Z^t A Z */
+
+ gsl_matrix *H; /* pointer to Hessenberg matrix */
+ gsl_matrix *Z; /* pointer to Schur vector matrix */
+} gsl_eigen_francis_workspace;
+
+gsl_eigen_francis_workspace * gsl_eigen_francis_alloc (void);
+void gsl_eigen_francis_free (gsl_eigen_francis_workspace * w);
+void gsl_eigen_francis_T (const int compute_t,
+ gsl_eigen_francis_workspace * w);
+int gsl_eigen_francis (gsl_matrix * H, gsl_vector_complex * eval,
+ gsl_eigen_francis_workspace * w);
+int gsl_eigen_francis_Z (gsl_matrix * H, gsl_vector_complex * eval,
+ gsl_matrix * Z,
+ gsl_eigen_francis_workspace * w);
+
+typedef struct {
+ size_t size; /* size of matrices */
+ gsl_vector *diag; /* diagonal matrix elements from balancing */
+ gsl_vector *tau; /* Householder coefficients */
+ gsl_matrix *Z; /* pointer to Z matrix */
+ int do_balance; /* perform balancing transformation? */
+ size_t n_evals; /* number of eigenvalues found */
+
+ gsl_eigen_francis_workspace *francis_workspace_p;
+} gsl_eigen_nonsymm_workspace;
+
+gsl_eigen_nonsymm_workspace * gsl_eigen_nonsymm_alloc (const size_t n);
+void gsl_eigen_nonsymm_free (gsl_eigen_nonsymm_workspace * w);
+void gsl_eigen_nonsymm_params (const int compute_t, const int balance,
+ gsl_eigen_nonsymm_workspace *w);
+int gsl_eigen_nonsymm (gsl_matrix * A, gsl_vector_complex * eval,
+ gsl_eigen_nonsymm_workspace * w);
+int gsl_eigen_nonsymm_Z (gsl_matrix * A, gsl_vector_complex * eval,
+ gsl_matrix * Z, gsl_eigen_nonsymm_workspace * w);
+
+typedef struct {
+ size_t size; /* size of matrices */
+ gsl_vector *work; /* scratch workspace */
+ gsl_vector *work2; /* scratch workspace */
+ gsl_vector *work3; /* scratch workspace */
+
+ gsl_matrix *Z; /* pointer to Schur vectors */
+
+ gsl_eigen_nonsymm_workspace *nonsymm_workspace_p;
+} gsl_eigen_nonsymmv_workspace;
+
+gsl_eigen_nonsymmv_workspace * gsl_eigen_nonsymmv_alloc (const size_t n);
+void gsl_eigen_nonsymmv_free (gsl_eigen_nonsymmv_workspace * w);
+void gsl_eigen_nonsymmv_params (const int balance,
+ gsl_eigen_nonsymmv_workspace *w);
+int gsl_eigen_nonsymmv (gsl_matrix * A, gsl_vector_complex * eval,
+ gsl_matrix_complex * evec,
+ gsl_eigen_nonsymmv_workspace * w);
+int gsl_eigen_nonsymmv_Z (gsl_matrix * A, gsl_vector_complex * eval,
+ gsl_matrix_complex * evec, gsl_matrix * Z,
+ gsl_eigen_nonsymmv_workspace * w);
+
+typedef struct {
+ size_t size; /* size of matrices */
+ gsl_eigen_symm_workspace *symm_workspace_p;
+} gsl_eigen_gensymm_workspace;
+
+gsl_eigen_gensymm_workspace * gsl_eigen_gensymm_alloc (const size_t n);
+void gsl_eigen_gensymm_free (gsl_eigen_gensymm_workspace * w);
+int gsl_eigen_gensymm (gsl_matrix * A, gsl_matrix * B,
+ gsl_vector * eval, gsl_eigen_gensymm_workspace * w);
+int gsl_eigen_gensymm_standardize (gsl_matrix * A, const gsl_matrix * B);
+
+typedef struct {
+ size_t size; /* size of matrices */
+ gsl_eigen_symmv_workspace *symmv_workspace_p;
+} gsl_eigen_gensymmv_workspace;
+
+gsl_eigen_gensymmv_workspace * gsl_eigen_gensymmv_alloc (const size_t n);
+void gsl_eigen_gensymmv_free (gsl_eigen_gensymmv_workspace * w);
+int gsl_eigen_gensymmv (gsl_matrix * A, gsl_matrix * B,
+ gsl_vector * eval, gsl_matrix * evec,
+ gsl_eigen_gensymmv_workspace * w);
+
+typedef struct {
+ size_t size; /* size of matrices */
+ gsl_eigen_herm_workspace *herm_workspace_p;
+} gsl_eigen_genherm_workspace;
+
+gsl_eigen_genherm_workspace * gsl_eigen_genherm_alloc (const size_t n);
+void gsl_eigen_genherm_free (gsl_eigen_genherm_workspace * w);
+int gsl_eigen_genherm (gsl_matrix_complex * A, gsl_matrix_complex * B,
+ gsl_vector * eval, gsl_eigen_genherm_workspace * w);
+int gsl_eigen_genherm_standardize (gsl_matrix_complex * A,
+ const gsl_matrix_complex * B);
+
+typedef struct {
+ size_t size; /* size of matrices */
+ gsl_eigen_hermv_workspace *hermv_workspace_p;
+} gsl_eigen_genhermv_workspace;
+
+gsl_eigen_genhermv_workspace * gsl_eigen_genhermv_alloc (const size_t n);
+void gsl_eigen_genhermv_free (gsl_eigen_genhermv_workspace * w);
+int gsl_eigen_genhermv (gsl_matrix_complex * A, gsl_matrix_complex * B,
+ gsl_vector * eval, gsl_matrix_complex * evec,
+ gsl_eigen_genhermv_workspace * w);
+
+typedef struct {
+ size_t size; /* size of matrices */
+ gsl_vector *work; /* scratch workspace */
+
+ size_t n_evals; /* number of eigenvalues found */
+ size_t max_iterations; /* maximum QZ iterations allowed */
+ size_t n_iter; /* number of iterations since last eigenvalue found */
+ double eshift; /* exceptional shift counter */
+
+ int needtop; /* need to compute top index? */
+
+ double atol; /* tolerance for splitting A matrix */
+ double btol; /* tolerance for splitting B matrix */
+
+ double ascale; /* scaling factor for shifts */
+ double bscale; /* scaling factor for shifts */
+
+ gsl_matrix *H; /* pointer to hessenberg matrix */
+ gsl_matrix *R; /* pointer to upper triangular matrix */
+
+ int compute_s; /* compute generalized Schur form S */
+ int compute_t; /* compute generalized Schur form T */
+
+ gsl_matrix *Q; /* pointer to left Schur vectors */
+ gsl_matrix *Z; /* pointer to right Schur vectors */
+} gsl_eigen_gen_workspace;
+
+gsl_eigen_gen_workspace * gsl_eigen_gen_alloc (const size_t n);
+void gsl_eigen_gen_free (gsl_eigen_gen_workspace * w);
+void gsl_eigen_gen_params (const int compute_s, const int compute_t,
+ const int balance, gsl_eigen_gen_workspace * w);
+int gsl_eigen_gen (gsl_matrix * A, gsl_matrix * B,
+ gsl_vector_complex * alpha, gsl_vector * beta,
+ gsl_eigen_gen_workspace * w);
+int gsl_eigen_gen_QZ (gsl_matrix * A, gsl_matrix * B,
+ gsl_vector_complex * alpha, gsl_vector * beta,
+ gsl_matrix * Q, gsl_matrix * Z,
+ gsl_eigen_gen_workspace * w);
+
+typedef struct {
+ size_t size; /* size of matrices */
+
+ gsl_vector *work1; /* 1-norm of columns of A */
+ gsl_vector *work2; /* 1-norm of columns of B */
+ gsl_vector *work3; /* real part of eigenvector */
+ gsl_vector *work4; /* imag part of eigenvector */
+ gsl_vector *work5; /* real part of back-transformed eigenvector */
+ gsl_vector *work6; /* imag part of back-transformed eigenvector */
+
+ gsl_matrix *Q; /* pointer to left Schur vectors */
+ gsl_matrix *Z; /* pointer to right Schur vectors */
+
+ gsl_eigen_gen_workspace *gen_workspace_p;
+} gsl_eigen_genv_workspace;
+
+gsl_eigen_genv_workspace * gsl_eigen_genv_alloc (const size_t n);
+void gsl_eigen_genv_free (gsl_eigen_genv_workspace * w);
+int gsl_eigen_genv (gsl_matrix * A, gsl_matrix * B,
+ gsl_vector_complex * alpha, gsl_vector * beta,
+ gsl_matrix_complex * evec,
+ gsl_eigen_genv_workspace * w);
+int gsl_eigen_genv_QZ (gsl_matrix * A, gsl_matrix * B,
+ gsl_vector_complex * alpha, gsl_vector * beta,
+ gsl_matrix_complex * evec,
+ gsl_matrix * Q, gsl_matrix * Z,
+ gsl_eigen_genv_workspace * w);
+
+
+
+typedef enum {
+ GSL_EIGEN_SORT_VAL_ASC,
+ GSL_EIGEN_SORT_VAL_DESC,
+ GSL_EIGEN_SORT_ABS_ASC,
+ GSL_EIGEN_SORT_ABS_DESC
+}
+gsl_eigen_sort_t;
+
+/* Sort eigensystem results based on eigenvalues.
+ * Sorts in order of increasing value or increasing
+ * absolute value.
+ *
+ * exceptions: GSL_EBADLEN
+ */
+
+int gsl_eigen_symmv_sort(gsl_vector * eval, gsl_matrix * evec,
+ gsl_eigen_sort_t sort_type);
+
+int gsl_eigen_hermv_sort(gsl_vector * eval, gsl_matrix_complex * evec,
+ gsl_eigen_sort_t sort_type);
+
+int gsl_eigen_nonsymmv_sort(gsl_vector_complex * eval,
+ gsl_matrix_complex * evec,
+ gsl_eigen_sort_t sort_type);
+
+int gsl_eigen_gensymmv_sort (gsl_vector * eval, gsl_matrix * evec,
+ gsl_eigen_sort_t sort_type);
+
+int gsl_eigen_genhermv_sort (gsl_vector * eval, gsl_matrix_complex * evec,
+ gsl_eigen_sort_t sort_type);
+
+int gsl_eigen_genv_sort (gsl_vector_complex * alpha, gsl_vector * beta,
+ gsl_matrix_complex * evec,
+ gsl_eigen_sort_t sort_type);
+
+/* Prototypes for the schur module */
+
+int gsl_schur_gen_eigvals(const gsl_matrix *A, const gsl_matrix *B,
+ double *wr1, double *wr2, double *wi,
+ double *scale1, double *scale2);
+
+int gsl_schur_solve_equation(double ca, const gsl_matrix *A, double z,
+ double d1, double d2, const gsl_vector *b,
+ gsl_vector *x, double *s, double *xnorm,
+ double smin);
+
+int gsl_schur_solve_equation_z(double ca, const gsl_matrix *A,
+ gsl_complex *z, double d1, double d2,
+ const gsl_vector_complex *b,
+ gsl_vector_complex *x, double *s,
+ double *xnorm, double smin);
+
+
+/* The following functions are obsolete: */
+
+/* Eigensolve by Jacobi Method
+ *
+ * The data in the matrix input is destroyed.
+ *
+ * exceptions:
+ */
+int
+gsl_eigen_jacobi(gsl_matrix * matrix,
+ gsl_vector * eval,
+ gsl_matrix * evec,
+ unsigned int max_rot,
+ unsigned int * nrot);
+
+
+/* Invert by Jacobi Method
+ *
+ * exceptions:
+ */
+int
+gsl_eigen_invert_jacobi(const gsl_matrix * matrix,
+ gsl_matrix * ainv,
+ unsigned int max_rot);
+
+
+
+__END_DECLS
+
+#endif /* __GSL_EIGEN_H__ */
diff --git a/thirdparty/includes/GSL/gsl/gsl_errno.h b/thirdparty/includes/GSL/gsl/gsl_errno.h
new file mode 100644
index 0000000..b8e99b4
--- /dev/null
+++ b/thirdparty/includes/GSL/gsl/gsl_errno.h
@@ -0,0 +1,154 @@
+/* err/gsl_errno.h
+ *
+ * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Gerard Jungman, Brian Gough
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GSL_ERRNO_H__
+#define __GSL_ERRNO_H__
+
+#include
+#include
+#include
+
+#undef __BEGIN_DECLS
+#undef __END_DECLS
+#ifdef __cplusplus
+# define __BEGIN_DECLS extern "C" {
+# define __END_DECLS }
+#else
+# define __BEGIN_DECLS /* empty */
+# define __END_DECLS /* empty */
+#endif
+
+__BEGIN_DECLS
+
+enum {
+ GSL_SUCCESS = 0,
+ GSL_FAILURE = -1,
+ GSL_CONTINUE = -2, /* iteration has not converged */
+ GSL_EDOM = 1, /* input domain error, e.g sqrt(-1) */
+ GSL_ERANGE = 2, /* output range error, e.g. exp(1e100) */
+ GSL_EFAULT = 3, /* invalid pointer */
+ GSL_EINVAL = 4, /* invalid argument supplied by user */
+ GSL_EFAILED = 5, /* generic failure */
+ GSL_EFACTOR = 6, /* factorization failed */
+ GSL_ESANITY = 7, /* sanity check failed - shouldn't happen */
+ GSL_ENOMEM = 8, /* malloc failed */
+ GSL_EBADFUNC = 9, /* problem with user-supplied function */
+ GSL_ERUNAWAY = 10, /* iterative process is out of control */
+ GSL_EMAXITER = 11, /* exceeded max number of iterations */
+ GSL_EZERODIV = 12, /* tried to divide by zero */
+ GSL_EBADTOL = 13, /* user specified an invalid tolerance */
+ GSL_ETOL = 14, /* failed to reach the specified tolerance */
+ GSL_EUNDRFLW = 15, /* underflow */
+ GSL_EOVRFLW = 16, /* overflow */
+ GSL_ELOSS = 17, /* loss of accuracy */
+ GSL_EROUND = 18, /* failed because of roundoff error */
+ GSL_EBADLEN = 19, /* matrix, vector lengths are not conformant */
+ GSL_ENOTSQR = 20, /* matrix not square */
+ GSL_ESING = 21, /* apparent singularity detected */
+ GSL_EDIVERGE = 22, /* integral or series is divergent */
+ GSL_EUNSUP = 23, /* requested feature is not supported by the hardware */
+ GSL_EUNIMPL = 24, /* requested feature not (yet) implemented */
+ GSL_ECACHE = 25, /* cache limit exceeded */
+ GSL_ETABLE = 26, /* table limit exceeded */
+ GSL_ENOPROG = 27, /* iteration is not making progress towards solution */
+ GSL_ENOPROGJ = 28, /* jacobian evaluations are not improving the solution */
+ GSL_ETOLF = 29, /* cannot reach the specified tolerance in F */
+ GSL_ETOLX = 30, /* cannot reach the specified tolerance in X */
+ GSL_ETOLG = 31, /* cannot reach the specified tolerance in gradient */
+ GSL_EOF = 32 /* end of file */
+} ;
+
+void gsl_error (const char * reason, const char * file, int line,
+ int gsl_errno);
+
+void gsl_stream_printf (const char *label, const char *file,
+ int line, const char *reason);
+
+const char * gsl_strerror (const int gsl_errno);
+
+typedef void gsl_error_handler_t (const char * reason, const char * file,
+ int line, int gsl_errno);
+
+typedef void gsl_stream_handler_t (const char * label, const char * file,
+ int line, const char * reason);
+
+gsl_error_handler_t *
+gsl_set_error_handler (gsl_error_handler_t * new_handler);
+
+gsl_error_handler_t *
+gsl_set_error_handler_off (void);
+
+gsl_stream_handler_t *
+gsl_set_stream_handler (gsl_stream_handler_t * new_handler);
+
+FILE * gsl_set_stream (FILE * new_stream);
+
+/* GSL_ERROR: call the error handler, and return the error code */
+
+#define GSL_ERROR(reason, gsl_errno) \
+ do { \
+ gsl_error (reason, __FILE__, __LINE__, gsl_errno) ; \
+ return gsl_errno ; \
+ } while (0)
+
+/* GSL_ERROR_VAL: call the error handler, and return the given value */
+
+#define GSL_ERROR_VAL(reason, gsl_errno, value) \
+ do { \
+ gsl_error (reason, __FILE__, __LINE__, gsl_errno) ; \
+ return value ; \
+ } while (0)
+
+/* GSL_ERROR_VOID: call the error handler, and then return
+ (for void functions which still need to generate an error) */
+
+#define GSL_ERROR_VOID(reason, gsl_errno) \
+ do { \
+ gsl_error (reason, __FILE__, __LINE__, gsl_errno) ; \
+ return ; \
+ } while (0)
+
+/* GSL_ERROR_NULL suitable for out-of-memory conditions */
+
+#define GSL_ERROR_NULL(reason, gsl_errno) GSL_ERROR_VAL(reason, gsl_errno, 0)
+
+/* Sometimes you have several status results returned from
+ * function calls and you want to combine them in some sensible
+ * way. You cannot produce a "total" status condition, but you can
+ * pick one from a set of conditions based on an implied hierarchy.
+ *
+ * In other words:
+ * you have: status_a, status_b, ...
+ * you want: status = (status_a if it is bad, or status_b if it is bad,...)
+ *
+ * In this example you consider status_a to be more important and
+ * it is checked first, followed by the others in the order specified.
+ *
+ * Here are some dumb macros to do this.
+ */
+#define GSL_ERROR_SELECT_2(a,b) ((a) != GSL_SUCCESS ? (a) : ((b) != GSL_SUCCESS ? (b) : GSL_SUCCESS))
+#define GSL_ERROR_SELECT_3(a,b,c) ((a) != GSL_SUCCESS ? (a) : GSL_ERROR_SELECT_2(b,c))
+#define GSL_ERROR_SELECT_4(a,b,c,d) ((a) != GSL_SUCCESS ? (a) : GSL_ERROR_SELECT_3(b,c,d))
+#define GSL_ERROR_SELECT_5(a,b,c,d,e) ((a) != GSL_SUCCESS ? (a) : GSL_ERROR_SELECT_4(b,c,d,e))
+
+#define GSL_STATUS_UPDATE(sp, s) do { if ((s) != GSL_SUCCESS) *(sp) = (s);} while(0)
+
+__END_DECLS
+
+#endif /* __GSL_ERRNO_H__ */
diff --git a/thirdparty/includes/GSL/gsl/gsl_fft.h b/thirdparty/includes/GSL/gsl/gsl_fft.h
new file mode 100644
index 0000000..8870a88
--- /dev/null
+++ b/thirdparty/includes/GSL/gsl/gsl_fft.h
@@ -0,0 +1,51 @@
+/* fft/gsl_fft.h
+ *
+ * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GSL_FFT_H__
+#define __GSL_FFT_H__
+
+#include
+
+#undef __BEGIN_DECLS
+#undef __END_DECLS
+#ifdef __cplusplus
+# define __BEGIN_DECLS extern "C" {
+# define __END_DECLS }
+#else
+# define __BEGIN_DECLS /* empty */
+# define __END_DECLS /* empty */
+#endif
+
+__BEGIN_DECLS
+
+typedef enum
+ {
+ gsl_fft_forward = -1, gsl_fft_backward = +1
+ }
+gsl_fft_direction;
+
+/* this gives the sign in the formula
+
+ h(f) = \sum x(t) exp(+/- 2 pi i f t)
+
+ where - is the forward transform direction and + the inverse direction */
+
+__END_DECLS
+
+#endif /* __GSL_FFT_H__ */
diff --git a/thirdparty/includes/GSL/gsl/gsl_fft_complex.h b/thirdparty/includes/GSL/gsl/gsl_fft_complex.h
new file mode 100644
index 0000000..c13f7ea
--- /dev/null
+++ b/thirdparty/includes/GSL/gsl/gsl_fft_complex.h
@@ -0,0 +1,136 @@
+/* fft/gsl_fft_complex.h
+ *
+ * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GSL_FFT_COMPLEX_H__
+#define __GSL_FFT_COMPLEX_H__
+
+#include
+
+#include
+#include
+#include
+
+#undef __BEGIN_DECLS
+#undef __END_DECLS
+#ifdef __cplusplus
+# define __BEGIN_DECLS extern "C" {
+# define __END_DECLS }
+#else
+# define __BEGIN_DECLS /* empty */
+# define __END_DECLS /* empty */
+#endif
+
+__BEGIN_DECLS
+
+/* Power of 2 routines */
+
+
+int gsl_fft_complex_radix2_forward (gsl_complex_packed_array data,
+ const size_t stride,
+ const size_t n);
+
+int gsl_fft_complex_radix2_backward (gsl_complex_packed_array data,
+ const size_t stride,
+ const size_t n);
+
+int gsl_fft_complex_radix2_inverse (gsl_complex_packed_array data,
+ const size_t stride,
+ const size_t n);
+
+int gsl_fft_complex_radix2_transform (gsl_complex_packed_array data,
+ const size_t stride,
+ const size_t n,
+ const gsl_fft_direction sign);
+
+int gsl_fft_complex_radix2_dif_forward (gsl_complex_packed_array data,
+ const size_t stride,
+ const size_t n);
+
+int gsl_fft_complex_radix2_dif_backward (gsl_complex_packed_array data,
+ const size_t stride,
+ const size_t n);
+
+int gsl_fft_complex_radix2_dif_inverse (gsl_complex_packed_array data,
+ const size_t stride,
+ const size_t n);
+
+int gsl_fft_complex_radix2_dif_transform (gsl_complex_packed_array data,
+ const size_t stride,
+ const size_t n,
+ const gsl_fft_direction sign);
+
+/* Mixed Radix general-N routines */
+
+typedef struct
+ {
+ size_t n;
+ size_t nf;
+ size_t factor[64];
+ gsl_complex *twiddle[64];
+ gsl_complex *trig;
+ }
+gsl_fft_complex_wavetable;
+
+typedef struct
+{
+ size_t n;
+ double *scratch;
+}
+gsl_fft_complex_workspace;
+
+
+gsl_fft_complex_wavetable *gsl_fft_complex_wavetable_alloc (size_t n);
+
+void gsl_fft_complex_wavetable_free (gsl_fft_complex_wavetable * wavetable);
+
+gsl_fft_complex_workspace *gsl_fft_complex_workspace_alloc (size_t n);
+
+void gsl_fft_complex_workspace_free (gsl_fft_complex_workspace * workspace);
+
+int gsl_fft_complex_memcpy (gsl_fft_complex_wavetable * dest,
+ gsl_fft_complex_wavetable * src);
+
+
+int gsl_fft_complex_forward (gsl_complex_packed_array data,
+ const size_t stride,
+ const size_t n,
+ const gsl_fft_complex_wavetable * wavetable,
+ gsl_fft_complex_workspace * work);
+
+int gsl_fft_complex_backward (gsl_complex_packed_array data,
+ const size_t stride,
+ const size_t n,
+ const gsl_fft_complex_wavetable * wavetable,
+ gsl_fft_complex_workspace * work);
+
+int gsl_fft_complex_inverse (gsl_complex_packed_array data,
+ const size_t stride,
+ const size_t n,
+ const gsl_fft_complex_wavetable * wavetable,
+ gsl_fft_complex_workspace * work);
+
+int gsl_fft_complex_transform (gsl_complex_packed_array data,
+ const size_t stride, const size_t n,
+ const gsl_fft_complex_wavetable * wavetable,
+ gsl_fft_complex_workspace * work,
+ const gsl_fft_direction sign);
+
+__END_DECLS
+
+#endif /* __GSL_FFT_COMPLEX_H__ */
diff --git a/thirdparty/includes/GSL/gsl/gsl_fft_complex_float.h b/thirdparty/includes/GSL/gsl/gsl_fft_complex_float.h
new file mode 100644
index 0000000..d3ff395
--- /dev/null
+++ b/thirdparty/includes/GSL/gsl/gsl_fft_complex_float.h
@@ -0,0 +1,139 @@
+/* fft/gsl_fft_complex_float.h
+ *
+ * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GSL_FFT_COMPLEX_FLOAT_H__
+#define __GSL_FFT_COMPLEX_FLOAT_H__
+
+#include
+
+#include
+#include
+#include
+
+#undef __BEGIN_DECLS
+#undef __END_DECLS
+#ifdef __cplusplus
+# define __BEGIN_DECLS extern "C" {
+# define __END_DECLS }
+#else
+# define __BEGIN_DECLS /* empty */
+# define __END_DECLS /* empty */
+#endif
+
+__BEGIN_DECLS
+
+/* Power of 2 routines */
+
+
+int gsl_fft_complex_float_radix2_forward (gsl_complex_packed_array_float data,
+ const size_t stride,
+ const size_t n);
+
+int gsl_fft_complex_float_radix2_backward (gsl_complex_packed_array_float data,
+ const size_t stride,
+ const size_t n);
+
+int gsl_fft_complex_float_radix2_inverse (gsl_complex_packed_array_float data,
+ const size_t stride,
+ const size_t n);
+
+int gsl_fft_complex_float_radix2_transform (gsl_complex_packed_array_float data,
+ const size_t stride,
+ const size_t n,
+ const gsl_fft_direction sign);
+
+int gsl_fft_complex_float_radix2_dif_forward (gsl_complex_packed_array_float data,
+ const size_t stride,
+ const size_t n);
+
+int gsl_fft_complex_float_radix2_dif_backward (gsl_complex_packed_array_float data,
+ const size_t stride,
+ const size_t n);
+
+int gsl_fft_complex_float_radix2_dif_inverse (gsl_complex_packed_array_float data,
+ const size_t stride,
+ const size_t n);
+
+int gsl_fft_complex_float_radix2_dif_transform (gsl_complex_packed_array_float data,
+ const size_t stride,
+ const size_t n,
+ const gsl_fft_direction sign);
+
+/* Mixed Radix general-N routines */
+
+typedef struct
+ {
+ size_t n;
+ size_t nf;
+ size_t factor[64];
+ gsl_complex_float *twiddle[64];
+ gsl_complex_float *trig;
+ }
+gsl_fft_complex_wavetable_float;
+
+typedef struct
+{
+ size_t n;
+ float *scratch;
+}
+gsl_fft_complex_workspace_float;
+
+
+gsl_fft_complex_wavetable_float *gsl_fft_complex_wavetable_float_alloc (size_t n);
+
+void gsl_fft_complex_wavetable_float_free (gsl_fft_complex_wavetable_float * wavetable);
+
+gsl_fft_complex_workspace_float *gsl_fft_complex_workspace_float_alloc (size_t n);
+
+void gsl_fft_complex_workspace_float_free (gsl_fft_complex_workspace_float * workspace);
+
+
+int gsl_fft_complex_float_memcpy (gsl_fft_complex_wavetable_float * dest,
+ gsl_fft_complex_wavetable_float * src);
+
+
+int gsl_fft_complex_float_forward (gsl_complex_packed_array_float data,
+ const size_t stride,
+ const size_t n,
+ const gsl_fft_complex_wavetable_float * wavetable,
+ gsl_fft_complex_workspace_float * work);
+
+int gsl_fft_complex_float_backward (gsl_complex_packed_array_float data,
+ const size_t stride,
+ const size_t n,
+ const gsl_fft_complex_wavetable_float * wavetable,
+ gsl_fft_complex_workspace_float * work);
+
+int gsl_fft_complex_float_inverse (gsl_complex_packed_array_float data,
+ const size_t stride,
+ const size_t n,
+ const gsl_fft_complex_wavetable_float * wavetable,
+ gsl_fft_complex_workspace_float * work);
+
+int gsl_fft_complex_float_transform (gsl_complex_packed_array_float data,
+ const size_t stride, const size_t n,
+ const gsl_fft_complex_wavetable_float * wavetable,
+ gsl_fft_complex_workspace_float * work,
+ const gsl_fft_direction sign);
+
+__END_DECLS
+
+#endif /* __GSL_FFT_COMPLEX_FLOAT_H__ */
+
+
diff --git a/thirdparty/includes/GSL/gsl/gsl_fft_halfcomplex.h b/thirdparty/includes/GSL/gsl/gsl_fft_halfcomplex.h
new file mode 100644
index 0000000..6751e47
--- /dev/null
+++ b/thirdparty/includes/GSL/gsl/gsl_fft_halfcomplex.h
@@ -0,0 +1,86 @@
+/* fft/gsl_fft_halfcomplex.h
+ *
+ * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GSL_FFT_HALFCOMPLEX_H__
+#define __GSL_FFT_HALFCOMPLEX_H__
+
+#include
+
+#include
+#include
+#include
+#include
+
+#undef __BEGIN_DECLS
+#undef __END_DECLS
+#ifdef __cplusplus
+# define __BEGIN_DECLS extern "C" {
+# define __END_DECLS }
+#else
+# define __BEGIN_DECLS /* empty */
+# define __END_DECLS /* empty */
+#endif
+
+__BEGIN_DECLS
+
+int gsl_fft_halfcomplex_radix2_backward (double data[], const size_t stride, const size_t n);
+int gsl_fft_halfcomplex_radix2_inverse (double data[], const size_t stride, const size_t n);
+int gsl_fft_halfcomplex_radix2_transform (double data[], const size_t stride, const size_t n);
+
+typedef struct
+ {
+ size_t n;
+ size_t nf;
+ size_t factor[64];
+ gsl_complex *twiddle[64];
+ gsl_complex *trig;
+ }
+gsl_fft_halfcomplex_wavetable;
+
+gsl_fft_halfcomplex_wavetable * gsl_fft_halfcomplex_wavetable_alloc (size_t n);
+
+void
+gsl_fft_halfcomplex_wavetable_free (gsl_fft_halfcomplex_wavetable * wavetable);
+
+
+int gsl_fft_halfcomplex_backward (double data[], const size_t stride, const size_t n,
+ const gsl_fft_halfcomplex_wavetable * wavetable,
+ gsl_fft_real_workspace * work);
+
+int gsl_fft_halfcomplex_inverse (double data[], const size_t stride, const size_t n,
+ const gsl_fft_halfcomplex_wavetable * wavetable,
+ gsl_fft_real_workspace * work);
+
+int gsl_fft_halfcomplex_transform (double data[], const size_t stride, const size_t n,
+ const gsl_fft_halfcomplex_wavetable * wavetable,
+ gsl_fft_real_workspace * work);
+
+int
+gsl_fft_halfcomplex_unpack (const double halfcomplex_coefficient[],
+ double complex_coefficient[],
+ const size_t stride, const size_t n);
+
+int
+gsl_fft_halfcomplex_radix2_unpack (const double halfcomplex_coefficient[],
+ double complex_coefficient[],
+ const size_t stride, const size_t n);
+
+__END_DECLS
+
+#endif /* __GSL_FFT_HALFCOMPLEX_H__ */
diff --git a/thirdparty/includes/GSL/gsl/gsl_fft_halfcomplex_float.h b/thirdparty/includes/GSL/gsl/gsl_fft_halfcomplex_float.h
new file mode 100644
index 0000000..e318367
--- /dev/null
+++ b/thirdparty/includes/GSL/gsl/gsl_fft_halfcomplex_float.h
@@ -0,0 +1,86 @@
+/* fft/gsl_fft_halfcomplex_float.h
+ *
+ * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GSL_FFT_HALFCOMPLEX_FLOAT_H__
+#define __GSL_FFT_HALFCOMPLEX_FLOAT_H__
+
+#include
+
+#include
+#include
+#include
+#include
+
+#undef __BEGIN_DECLS
+#undef __END_DECLS
+#ifdef __cplusplus
+# define __BEGIN_DECLS extern "C" {
+# define __END_DECLS }
+#else
+# define __BEGIN_DECLS /* empty */
+# define __END_DECLS /* empty */
+#endif
+
+__BEGIN_DECLS
+
+int gsl_fft_halfcomplex_float_radix2_backward (float data[], const size_t stride, const size_t n);
+int gsl_fft_halfcomplex_float_radix2_inverse (float data[], const size_t stride, const size_t n);
+int gsl_fft_halfcomplex_float_radix2_transform (float data[], const size_t stride, const size_t n);
+
+typedef struct
+ {
+ size_t n;
+ size_t nf;
+ size_t factor[64];
+ gsl_complex_float *twiddle[64];
+ gsl_complex_float *trig;
+ }
+gsl_fft_halfcomplex_wavetable_float;
+
+
+gsl_fft_halfcomplex_wavetable_float * gsl_fft_halfcomplex_wavetable_float_alloc (size_t n);
+
+void
+gsl_fft_halfcomplex_wavetable_float_free (gsl_fft_halfcomplex_wavetable_float * wavetable);
+
+int gsl_fft_halfcomplex_float_backward (float data[], const size_t stride, const size_t n,
+ const gsl_fft_halfcomplex_wavetable_float * wavetable,
+ gsl_fft_real_workspace_float * work);
+
+int gsl_fft_halfcomplex_float_inverse (float data[], const size_t stride, const size_t n,
+ const gsl_fft_halfcomplex_wavetable_float * wavetable,
+ gsl_fft_real_workspace_float * work);
+
+int gsl_fft_halfcomplex_float_transform (float data[], const size_t stride, const size_t n,
+ const gsl_fft_halfcomplex_wavetable_float * wavetable,
+ gsl_fft_real_workspace_float * work);
+
+int
+gsl_fft_halfcomplex_float_unpack (const float halfcomplex_coefficient[],
+ float complex_coefficient[],
+ const size_t stride, const size_t n);
+
+int
+gsl_fft_halfcomplex_float_radix2_unpack (const float halfcomplex_coefficient[],
+ float complex_coefficient[],
+ const size_t stride, const size_t n);
+
+__END_DECLS
+
+#endif /* __GSL_FFT_HALFCOMPLEX_FLOAT_H__ */
diff --git a/thirdparty/includes/GSL/gsl/gsl_fft_real.h b/thirdparty/includes/GSL/gsl/gsl_fft_real.h
new file mode 100644
index 0000000..e07a604
--- /dev/null
+++ b/thirdparty/includes/GSL/gsl/gsl_fft_real.h
@@ -0,0 +1,80 @@
+/* fft/gsl_fft_real.h
+ *
+ * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GSL_FFT_REAL_H__
+#define __GSL_FFT_REAL_H__
+
+#include
+
+#include
+#include
+#include
+
+#undef __BEGIN_DECLS
+#undef __END_DECLS
+#ifdef __cplusplus
+# define __BEGIN_DECLS extern "C" {
+# define __END_DECLS }
+#else
+# define __BEGIN_DECLS /* empty */
+# define __END_DECLS /* empty */
+#endif
+
+__BEGIN_DECLS
+
+int gsl_fft_real_radix2_transform (double data[], const size_t stride, const size_t n) ;
+
+typedef struct
+ {
+ size_t n;
+ size_t nf;
+ size_t factor[64];
+ gsl_complex *twiddle[64];
+ gsl_complex *trig;
+ }
+gsl_fft_real_wavetable;
+
+typedef struct
+ {
+ size_t n;
+ double *scratch;
+ }
+gsl_fft_real_workspace;
+
+gsl_fft_real_wavetable * gsl_fft_real_wavetable_alloc (size_t n);
+
+void gsl_fft_real_wavetable_free (gsl_fft_real_wavetable * wavetable);
+
+gsl_fft_real_workspace * gsl_fft_real_workspace_alloc (size_t n);
+
+void gsl_fft_real_workspace_free (gsl_fft_real_workspace * workspace);
+
+
+int gsl_fft_real_transform (double data[], const size_t stride, const size_t n,
+ const gsl_fft_real_wavetable * wavetable,
+ gsl_fft_real_workspace * work);
+
+
+int gsl_fft_real_unpack (const double real_coefficient[],
+ double complex_coefficient[],
+ const size_t stride, const size_t n);
+
+__END_DECLS
+
+#endif /* __GSL_FFT_REAL_H__ */
diff --git a/thirdparty/includes/GSL/gsl/gsl_fft_real_float.h b/thirdparty/includes/GSL/gsl/gsl_fft_real_float.h
new file mode 100644
index 0000000..7a7732f
--- /dev/null
+++ b/thirdparty/includes/GSL/gsl/gsl_fft_real_float.h
@@ -0,0 +1,79 @@
+/* fft/gsl_fft_real_float.h
+ *
+ * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GSL_FFT_REAL_FLOAT_H__
+#define __GSL_FFT_REAL_FLOAT_H__
+
+#include
+
+#include
+#include
+#include
+
+#undef __BEGIN_DECLS
+#undef __END_DECLS
+#ifdef __cplusplus
+# define __BEGIN_DECLS extern "C" {
+# define __END_DECLS }
+#else
+# define __BEGIN_DECLS /* empty */
+# define __END_DECLS /* empty */
+#endif
+
+__BEGIN_DECLS
+
+int gsl_fft_real_float_radix2_transform (float data[], const size_t stride, const size_t n) ;
+
+typedef struct
+ {
+ size_t n;
+ size_t nf;
+ size_t factor[64];
+ gsl_complex_float *twiddle[64];
+ gsl_complex_float *trig;
+ }
+gsl_fft_real_wavetable_float;
+
+typedef struct
+ {
+ size_t n;
+ float *scratch;
+ }
+gsl_fft_real_workspace_float;
+
+gsl_fft_real_wavetable_float * gsl_fft_real_wavetable_float_alloc (size_t n);
+
+void gsl_fft_real_wavetable_float_free (gsl_fft_real_wavetable_float * wavetable);
+
+gsl_fft_real_workspace_float * gsl_fft_real_workspace_float_alloc (size_t n);
+
+void gsl_fft_real_workspace_float_free (gsl_fft_real_workspace_float * workspace);
+
+int gsl_fft_real_float_transform (float data[], const size_t stride, const size_t n,
+ const gsl_fft_real_wavetable_float * wavetable,
+ gsl_fft_real_workspace_float * work);
+
+
+int gsl_fft_real_float_unpack (const float real_float_coefficient[],
+ float complex_coefficient[],
+ const size_t stride, const size_t n);
+
+__END_DECLS
+
+#endif /* __GSL_FFT_REAL_FLOAT_H__ */
diff --git a/thirdparty/includes/GSL/gsl/gsl_fit.h b/thirdparty/includes/GSL/gsl/gsl_fit.h
new file mode 100644
index 0000000..de83a41
--- /dev/null
+++ b/thirdparty/includes/GSL/gsl/gsl_fit.h
@@ -0,0 +1,85 @@
+/* fit/gsl_fit.h
+ *
+ * Copyright (C) 2000, 2007 Brian Gough
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GSL_FIT_H__
+#define __GSL_FIT_H__
+
+#include
+#include
+
+#undef __BEGIN_DECLS
+#undef __END_DECLS
+#ifdef __cplusplus
+# define __BEGIN_DECLS extern "C" {
+# define __END_DECLS }
+#else
+# define __BEGIN_DECLS /* empty */
+# define __END_DECLS /* empty */
+#endif
+
+__BEGIN_DECLS
+
+int gsl_fit_linear (const double * x, const size_t xstride,
+ const double * y, const size_t ystride,
+ const size_t n,
+ double * c0, double * c1,
+ double * cov00, double * cov01, double * cov11,
+ double * sumsq);
+
+
+int gsl_fit_wlinear (const double * x, const size_t xstride,
+ const double * w, const size_t wstride,
+ const double * y, const size_t ystride,
+ const size_t n,
+ double * c0, double * c1,
+ double * cov00, double * cov01, double * cov11,
+ double * chisq);
+
+int
+gsl_fit_linear_est (const double x,
+ const double c0, const double c1,
+ const double cov00, const double cov01, const double cov11,
+ double *y, double *y_err);
+
+
+int gsl_fit_mul (const double * x, const size_t xstride,
+ const double * y, const size_t ystride,
+ const size_t n,
+ double * c1,
+ double * cov11,
+ double * sumsq);
+
+int gsl_fit_wmul (const double * x, const size_t xstride,
+ const double * w, const size_t wstride,
+ const double * y, const size_t ystride,
+ const size_t n,
+ double * c1,
+ double * cov11,
+ double * sumsq);
+
+
+int
+gsl_fit_mul_est (const double x,
+ const double c1,
+ const double cov11,
+ double *y, double *y_err);
+
+__END_DECLS
+
+#endif /* __GSL_FIT_H__ */
diff --git a/thirdparty/includes/GSL/gsl/gsl_heapsort.h b/thirdparty/includes/GSL/gsl/gsl_heapsort.h
new file mode 100644
index 0000000..213fae1
--- /dev/null
+++ b/thirdparty/includes/GSL/gsl/gsl_heapsort.h
@@ -0,0 +1,44 @@
+/* sort/gsl_heapsort.h
+ *
+ * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Thomas Walter, Brian Gough
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GSL_HEAPSORT_H__
+#define __GSL_HEAPSORT_H__
+
+#include
+
+#undef __BEGIN_DECLS
+#undef __END_DECLS
+#ifdef __cplusplus
+# define __BEGIN_DECLS extern "C" {
+# define __END_DECLS }
+#else
+# define __BEGIN_DECLS /* empty */
+# define __END_DECLS /* empty */
+#endif
+
+__BEGIN_DECLS
+
+typedef int (*gsl_comparison_fn_t) (const void *, const void *);
+
+void gsl_heapsort (void * array, size_t count, size_t size, gsl_comparison_fn_t compare);
+int gsl_heapsort_index (size_t * p, const void * array, size_t count, size_t size, gsl_comparison_fn_t compare);
+
+__END_DECLS
+
+#endif /* __GSL_HEAPSORT_H__ */
diff --git a/thirdparty/includes/GSL/gsl/gsl_histogram.h b/thirdparty/includes/GSL/gsl/gsl_histogram.h
new file mode 100644
index 0000000..e8375c6
--- /dev/null
+++ b/thirdparty/includes/GSL/gsl/gsl_histogram.h
@@ -0,0 +1,134 @@
+/* histogram/gsl_histogram.h
+ *
+ * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GSL_HISTOGRAM_H__
+#define __GSL_HISTOGRAM_H__
+
+#include
+#include
+
+#undef __BEGIN_DECLS
+#undef __END_DECLS
+#ifdef __cplusplus
+# define __BEGIN_DECLS extern "C" {
+# define __END_DECLS }
+#else
+# define __BEGIN_DECLS /* empty */
+# define __END_DECLS /* empty */
+#endif
+
+__BEGIN_DECLS
+
+typedef struct {
+ size_t n ;
+ double * range ;
+ double * bin ;
+} gsl_histogram ;
+
+typedef struct {
+ size_t n ;
+ double * range ;
+ double * sum ;
+} gsl_histogram_pdf ;
+
+gsl_histogram * gsl_histogram_alloc (size_t n);
+
+gsl_histogram * gsl_histogram_calloc (size_t n);
+gsl_histogram * gsl_histogram_calloc_uniform (const size_t n, const double xmin, const double xmax);
+void gsl_histogram_free (gsl_histogram * h);
+int gsl_histogram_increment (gsl_histogram * h, double x);
+int gsl_histogram_accumulate (gsl_histogram * h, double x, double weight);
+int gsl_histogram_find (const gsl_histogram * h,
+ const double x, size_t * i);
+
+double gsl_histogram_get (const gsl_histogram * h, size_t i);
+int gsl_histogram_get_range (const gsl_histogram * h, size_t i,
+ double * lower, double * upper);
+
+double gsl_histogram_max (const gsl_histogram * h);
+double gsl_histogram_min (const gsl_histogram * h);
+size_t gsl_histogram_bins (const gsl_histogram * h);
+
+void gsl_histogram_reset (gsl_histogram * h);
+
+gsl_histogram * gsl_histogram_calloc_range(size_t n, double * range);
+
+int
+gsl_histogram_set_ranges (gsl_histogram * h, const double range[], size_t size);
+int
+gsl_histogram_set_ranges_uniform (gsl_histogram * h, double xmin, double xmax);
+
+
+
+int
+gsl_histogram_memcpy(gsl_histogram * dest, const gsl_histogram * source);
+
+gsl_histogram *
+gsl_histogram_clone(const gsl_histogram * source);
+
+double gsl_histogram_max_val (const gsl_histogram * h);
+
+size_t gsl_histogram_max_bin (const gsl_histogram * h);
+
+double gsl_histogram_min_val (const gsl_histogram * h);
+
+size_t gsl_histogram_min_bin (const gsl_histogram * h);
+
+int
+gsl_histogram_equal_bins_p(const gsl_histogram *h1, const gsl_histogram *h2);
+
+int
+gsl_histogram_add(gsl_histogram *h1, const gsl_histogram *h2);
+
+int
+gsl_histogram_sub(gsl_histogram *h1, const gsl_histogram *h2);
+
+int
+gsl_histogram_mul(gsl_histogram *h1, const gsl_histogram *h2);
+
+int
+gsl_histogram_div(gsl_histogram *h1, const gsl_histogram *h2);
+
+int
+gsl_histogram_scale(gsl_histogram *h, double scale);
+
+int
+gsl_histogram_shift (gsl_histogram * h, double shift);
+
+
+double gsl_histogram_sigma (const gsl_histogram * h);
+
+double gsl_histogram_mean (const gsl_histogram * h);
+
+double gsl_histogram_sum (const gsl_histogram * h);
+
+int gsl_histogram_fwrite (FILE * stream, const gsl_histogram * h) ;
+int gsl_histogram_fread (FILE * stream, gsl_histogram * h);
+int gsl_histogram_fprintf (FILE * stream, const gsl_histogram * h,
+ const char * range_format, const char * bin_format);
+int gsl_histogram_fscanf (FILE * stream, gsl_histogram * h);
+
+gsl_histogram_pdf * gsl_histogram_pdf_alloc (const size_t n);
+int gsl_histogram_pdf_init (gsl_histogram_pdf * p, const gsl_histogram * h);
+void gsl_histogram_pdf_free (gsl_histogram_pdf * p);
+double gsl_histogram_pdf_sample (const gsl_histogram_pdf * p, double r);
+
+__END_DECLS
+
+#endif /* __GSL_HISTOGRAM_H__ */
diff --git a/thirdparty/includes/GSL/gsl/gsl_histogram2d.h b/thirdparty/includes/GSL/gsl/gsl_histogram2d.h
new file mode 100644
index 0000000..90065ac
--- /dev/null
+++ b/thirdparty/includes/GSL/gsl/gsl_histogram2d.h
@@ -0,0 +1,172 @@
+/* histogram/gsl_histogram2d.h
+ *
+ * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GSL_HISTOGRAM2D_H__
+#define __GSL_HISTOGRAM2D_H__
+
+#include
+#include
+
+#undef __BEGIN_DECLS
+#undef __END_DECLS
+#ifdef __cplusplus
+# define __BEGIN_DECLS extern "C" {
+# define __END_DECLS }
+#else
+# define __BEGIN_DECLS /* empty */
+# define __END_DECLS /* empty */
+#endif
+
+__BEGIN_DECLS
+
+typedef struct {
+ size_t nx, ny ;
+ double * xrange ;
+ double * yrange ;
+ double * bin ;
+} gsl_histogram2d ;
+
+typedef struct {
+ size_t nx, ny ;
+ double * xrange ;
+ double * yrange ;
+ double * sum ;
+} gsl_histogram2d_pdf ;
+
+gsl_histogram2d * gsl_histogram2d_alloc (const size_t nx, const size_t ny);
+gsl_histogram2d * gsl_histogram2d_calloc (const size_t nx, const size_t ny);
+gsl_histogram2d * gsl_histogram2d_calloc_uniform (const size_t nx, const size_t ny,
+ const double xmin, const double xmax,
+ const double ymin, const double ymax);
+
+void gsl_histogram2d_free (gsl_histogram2d * h);
+
+int gsl_histogram2d_increment (gsl_histogram2d * h, double x, double y);
+int gsl_histogram2d_accumulate (gsl_histogram2d * h,
+ double x, double y, double weight);
+int gsl_histogram2d_find (const gsl_histogram2d * h,
+ const double x, const double y, size_t * i, size_t * j);
+
+double gsl_histogram2d_get (const gsl_histogram2d * h, const size_t i, const size_t j);
+int gsl_histogram2d_get_xrange (const gsl_histogram2d * h, const size_t i,
+ double * xlower, double * xupper);
+int gsl_histogram2d_get_yrange (const gsl_histogram2d * h, const size_t j,
+ double * ylower, double * yupper);
+
+
+double gsl_histogram2d_xmax (const gsl_histogram2d * h);
+double gsl_histogram2d_xmin (const gsl_histogram2d * h);
+size_t gsl_histogram2d_nx (const gsl_histogram2d * h);
+
+double gsl_histogram2d_ymax (const gsl_histogram2d * h);
+double gsl_histogram2d_ymin (const gsl_histogram2d * h);
+size_t gsl_histogram2d_ny (const gsl_histogram2d * h);
+
+void gsl_histogram2d_reset (gsl_histogram2d * h);
+
+gsl_histogram2d *
+gsl_histogram2d_calloc_range(size_t nx, size_t ny,
+ double *xrange, double *yrange);
+
+int
+gsl_histogram2d_set_ranges_uniform (gsl_histogram2d * h,
+ double xmin, double xmax,
+ double ymin, double ymax);
+
+int
+gsl_histogram2d_set_ranges (gsl_histogram2d * h,
+ const double xrange[], size_t xsize,
+ const double yrange[], size_t ysize);
+
+int
+gsl_histogram2d_memcpy(gsl_histogram2d *dest, const gsl_histogram2d *source);
+
+gsl_histogram2d *
+gsl_histogram2d_clone(const gsl_histogram2d * source);
+
+double
+gsl_histogram2d_max_val(const gsl_histogram2d *h);
+
+void
+gsl_histogram2d_max_bin (const gsl_histogram2d *h, size_t *i, size_t *j);
+
+double
+gsl_histogram2d_min_val(const gsl_histogram2d *h);
+
+void
+gsl_histogram2d_min_bin (const gsl_histogram2d *h, size_t *i, size_t *j);
+
+double
+gsl_histogram2d_xmean (const gsl_histogram2d * h);
+
+double
+gsl_histogram2d_ymean (const gsl_histogram2d * h);
+
+double
+gsl_histogram2d_xsigma (const gsl_histogram2d * h);
+
+double
+gsl_histogram2d_ysigma (const gsl_histogram2d * h);
+
+double
+gsl_histogram2d_cov (const gsl_histogram2d * h);
+
+double
+gsl_histogram2d_sum (const gsl_histogram2d *h);
+
+int
+gsl_histogram2d_equal_bins_p(const gsl_histogram2d *h1,
+ const gsl_histogram2d *h2) ;
+
+int
+gsl_histogram2d_add(gsl_histogram2d *h1, const gsl_histogram2d *h2);
+
+int
+gsl_histogram2d_sub(gsl_histogram2d *h1, const gsl_histogram2d *h2);
+
+int
+gsl_histogram2d_mul(gsl_histogram2d *h1, const gsl_histogram2d *h2);
+
+int
+gsl_histogram2d_div(gsl_histogram2d *h1, const gsl_histogram2d *h2);
+
+int
+gsl_histogram2d_scale(gsl_histogram2d *h, double scale);
+
+int
+gsl_histogram2d_shift(gsl_histogram2d *h, double shift);
+
+int gsl_histogram2d_fwrite (FILE * stream, const gsl_histogram2d * h) ;
+int gsl_histogram2d_fread (FILE * stream, gsl_histogram2d * h);
+int gsl_histogram2d_fprintf (FILE * stream, const gsl_histogram2d * h,
+ const char * range_format,
+ const char * bin_format);
+int gsl_histogram2d_fscanf (FILE * stream, gsl_histogram2d * h);
+
+gsl_histogram2d_pdf * gsl_histogram2d_pdf_alloc (const size_t nx, const size_t ny);
+int gsl_histogram2d_pdf_init (gsl_histogram2d_pdf * p, const gsl_histogram2d * h);
+void gsl_histogram2d_pdf_free (gsl_histogram2d_pdf * p);
+int gsl_histogram2d_pdf_sample (const gsl_histogram2d_pdf * p,
+ double r1, double r2,
+ double * x, double * y);
+
+__END_DECLS
+
+#endif /* __GSL_HISTOGRAM2D_H__ */
+
diff --git a/thirdparty/includes/GSL/gsl/gsl_ieee_utils.h b/thirdparty/includes/GSL/gsl/gsl_ieee_utils.h
new file mode 100644
index 0000000..a961220
--- /dev/null
+++ b/thirdparty/includes/GSL/gsl/gsl_ieee_utils.h
@@ -0,0 +1,99 @@
+/* ieee-utils/gsl_ieee_utils.h
+ *
+ * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GSL_IEEE_UTILS_H__
+#define __GSL_IEEE_UTILS_H__
+#include
+
+#undef __BEGIN_DECLS
+#undef __END_DECLS
+#ifdef __cplusplus
+# define __BEGIN_DECLS extern "C" {
+# define __END_DECLS }
+#else
+# define __BEGIN_DECLS /* empty */
+# define __END_DECLS /* empty */
+#endif
+
+__BEGIN_DECLS
+
+enum {
+ GSL_IEEE_TYPE_NAN = 1,
+ GSL_IEEE_TYPE_INF = 2,
+ GSL_IEEE_TYPE_NORMAL = 3,
+ GSL_IEEE_TYPE_DENORMAL = 4,
+ GSL_IEEE_TYPE_ZERO = 5
+} ;
+
+typedef struct {
+ int sign ;
+ char mantissa[24] ; /* Actual bits are 0..22, element 23 is \0 */
+ int exponent ;
+ int type ;
+} gsl_ieee_float_rep ;
+
+typedef struct {
+ int sign ;
+ char mantissa[53] ; /* Actual bits are 0..51, element 52 is \0 */
+ int exponent ;
+ int type ;
+} gsl_ieee_double_rep ;
+
+
+void gsl_ieee_printf_float (const float * x) ;
+void gsl_ieee_printf_double (const double * x) ;
+
+void gsl_ieee_fprintf_float (FILE * stream, const float * x) ;
+void gsl_ieee_fprintf_double (FILE * stream, const double * x) ;
+
+void gsl_ieee_float_to_rep (const float * x, gsl_ieee_float_rep * r) ;
+void gsl_ieee_double_to_rep (const double * x, gsl_ieee_double_rep * r) ;
+
+enum {
+ GSL_IEEE_SINGLE_PRECISION = 1,
+ GSL_IEEE_DOUBLE_PRECISION = 2,
+ GSL_IEEE_EXTENDED_PRECISION = 3
+} ;
+
+enum {
+ GSL_IEEE_ROUND_TO_NEAREST = 1,
+ GSL_IEEE_ROUND_DOWN = 2,
+ GSL_IEEE_ROUND_UP = 3,
+ GSL_IEEE_ROUND_TO_ZERO = 4
+} ;
+
+enum {
+ GSL_IEEE_MASK_INVALID = 1,
+ GSL_IEEE_MASK_DENORMALIZED = 2,
+ GSL_IEEE_MASK_DIVISION_BY_ZERO = 4,
+ GSL_IEEE_MASK_OVERFLOW = 8,
+ GSL_IEEE_MASK_UNDERFLOW = 16,
+ GSL_IEEE_MASK_ALL = 31,
+ GSL_IEEE_TRAP_INEXACT = 32
+} ;
+
+void gsl_ieee_env_setup (void) ;
+int gsl_ieee_read_mode_string (const char * description, int * precision,
+ int * rounding, int * exception_mask) ;
+int gsl_ieee_set_mode (int precision, int rounding, int exception_mask) ;
+
+__END_DECLS
+
+#endif /* __GSL_IEEE_UTILS_H__ */
+
diff --git a/thirdparty/includes/GSL/gsl/gsl_inline.h b/thirdparty/includes/GSL/gsl/gsl_inline.h
new file mode 100644
index 0000000..2172201
--- /dev/null
+++ b/thirdparty/includes/GSL/gsl/gsl_inline.h
@@ -0,0 +1,67 @@
+/* gsl_inline.h
+ *
+ * Copyright (C) 2008, 2009 Brian Gough
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GSL_INLINE_H__
+#define __GSL_INLINE_H__
+
+/* In recent versiions of GCC, the inline keyword has two different
+ forms: GNU and C99.
+
+ In GNU mode we can use 'extern inline' to make inline functions
+ work like macros. The function is only inlined--it is never output
+ as a definition in an object file.
+
+ In the new C99 mode 'extern inline' has a different meaning--it
+ causes the definition of the function to be output in each object
+ file where it is used. This will result in multiple-definition
+ errors on linking. The 'inline' keyword on its own (without
+ extern) has the same behavior as the original GNU 'extern inline'.
+
+ The C99 style is the default with -std=c99 in GCC 4.3.
+
+ This header file allows either form of inline to be used by
+ redefining the macros INLINE_DECL and INLINE_FUN. These are used
+ in the public header files as
+
+ INLINE_DECL double gsl_foo (double x);
+ #ifdef HAVE_INLINE
+ INLINE_FUN double gsl_foo (double x) { return x+1.0; } ;
+ #endif
+
+*/
+
+#ifdef HAVE_INLINE
+# if defined(__GNUC_STDC_INLINE__) || defined(GSL_C99_INLINE) || defined(HAVE_C99_INLINE)
+# define INLINE_DECL inline /* use C99 inline */
+# define INLINE_FUN inline
+# else
+# define INLINE_DECL /* use GNU extern inline */
+# define INLINE_FUN extern inline
+# endif
+#else
+# define INLINE_DECL /* */
+#endif
+
+/* Range checking conditions in headers do not require any run-time
+ tests of the global variable gsl_check_range. They are enabled or
+ disabled in user code at compile time with GSL_RANGE_CHECK macro.
+ See also build.h. */
+#define GSL_RANGE_COND(x) (x)
+
+#endif /* __GSL_INLINE_H__ */
diff --git a/thirdparty/includes/GSL/gsl/gsl_integration.h b/thirdparty/includes/GSL/gsl/gsl_integration.h
new file mode 100644
index 0000000..5972f49
--- /dev/null
+++ b/thirdparty/includes/GSL/gsl/gsl_integration.h
@@ -0,0 +1,323 @@
+/* integration/gsl_integration.h
+ *
+ * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GSL_INTEGRATION_H__
+#define __GSL_INTEGRATION_H__
+#include
+#include
+
+#undef __BEGIN_DECLS
+#undef __END_DECLS
+#ifdef __cplusplus
+# define __BEGIN_DECLS extern "C" {
+# define __END_DECLS }
+#else
+# define __BEGIN_DECLS /* empty */
+# define __END_DECLS /* empty */
+#endif
+
+__BEGIN_DECLS
+
+/* Workspace for adaptive integrators */
+
+typedef struct
+ {
+ size_t limit;
+ size_t size;
+ size_t nrmax;
+ size_t i;
+ size_t maximum_level;
+ double *alist;
+ double *blist;
+ double *rlist;
+ double *elist;
+ size_t *order;
+ size_t *level;
+ }
+gsl_integration_workspace;
+
+gsl_integration_workspace *
+ gsl_integration_workspace_alloc (const size_t n);
+
+void
+ gsl_integration_workspace_free (gsl_integration_workspace * w);
+
+
+/* Workspace for QAWS integrator */
+
+typedef struct
+{
+ double alpha;
+ double beta;
+ int mu;
+ int nu;
+ double ri[25];
+ double rj[25];
+ double rg[25];
+ double rh[25];
+}
+gsl_integration_qaws_table;
+
+gsl_integration_qaws_table *
+gsl_integration_qaws_table_alloc (double alpha, double beta, int mu, int nu);
+
+int
+gsl_integration_qaws_table_set (gsl_integration_qaws_table * t,
+ double alpha, double beta, int mu, int nu);
+
+void
+gsl_integration_qaws_table_free (gsl_integration_qaws_table * t);
+
+/* Workspace for QAWO integrator */
+
+enum gsl_integration_qawo_enum { GSL_INTEG_COSINE, GSL_INTEG_SINE };
+
+typedef struct
+{
+ size_t n;
+ double omega;
+ double L;
+ double par;
+ enum gsl_integration_qawo_enum sine;
+ double *chebmo;
+}
+gsl_integration_qawo_table;
+
+gsl_integration_qawo_table *
+gsl_integration_qawo_table_alloc (double omega, double L,
+ enum gsl_integration_qawo_enum sine,
+ size_t n);
+
+int
+gsl_integration_qawo_table_set (gsl_integration_qawo_table * t,
+ double omega, double L,
+ enum gsl_integration_qawo_enum sine);
+
+int
+gsl_integration_qawo_table_set_length (gsl_integration_qawo_table * t,
+ double L);
+
+void
+gsl_integration_qawo_table_free (gsl_integration_qawo_table * t);
+
+
+/* Definition of an integration rule */
+
+typedef void gsl_integration_rule (const gsl_function * f,
+ double a, double b,
+ double *result, double *abserr,
+ double *defabs, double *resabs);
+
+void gsl_integration_qk15 (const gsl_function * f, double a, double b,
+ double *result, double *abserr,
+ double *resabs, double *resasc);
+
+void gsl_integration_qk21 (const gsl_function * f, double a, double b,
+ double *result, double *abserr,
+ double *resabs, double *resasc);
+
+void gsl_integration_qk31 (const gsl_function * f, double a, double b,
+ double *result, double *abserr,
+ double *resabs, double *resasc);
+
+void gsl_integration_qk41 (const gsl_function * f, double a, double b,
+ double *result, double *abserr,
+ double *resabs, double *resasc);
+
+void gsl_integration_qk51 (const gsl_function * f, double a, double b,
+ double *result, double *abserr,
+ double *resabs, double *resasc);
+
+void gsl_integration_qk61 (const gsl_function * f, double a, double b,
+ double *result, double *abserr,
+ double *resabs, double *resasc);
+
+void gsl_integration_qcheb (gsl_function * f, double a, double b,
+ double *cheb12, double *cheb24);
+
+/* The low-level integration rules in QUADPACK are identified by small
+ integers (1-6). We'll use symbolic constants to refer to them. */
+
+enum
+ {
+ GSL_INTEG_GAUSS15 = 1, /* 15 point Gauss-Kronrod rule */
+ GSL_INTEG_GAUSS21 = 2, /* 21 point Gauss-Kronrod rule */
+ GSL_INTEG_GAUSS31 = 3, /* 31 point Gauss-Kronrod rule */
+ GSL_INTEG_GAUSS41 = 4, /* 41 point Gauss-Kronrod rule */
+ GSL_INTEG_GAUSS51 = 5, /* 51 point Gauss-Kronrod rule */
+ GSL_INTEG_GAUSS61 = 6 /* 61 point Gauss-Kronrod rule */
+ };
+
+void
+gsl_integration_qk (const int n, const double xgk[],
+ const double wg[], const double wgk[],
+ double fv1[], double fv2[],
+ const gsl_function *f, double a, double b,
+ double * result, double * abserr,
+ double * resabs, double * resasc);
+
+
+int gsl_integration_qng (const gsl_function * f,
+ double a, double b,
+ double epsabs, double epsrel,
+ double *result, double *abserr,
+ size_t * neval);
+
+int gsl_integration_qag (const gsl_function * f,
+ double a, double b,
+ double epsabs, double epsrel, size_t limit,
+ int key,
+ gsl_integration_workspace * workspace,
+ double *result, double *abserr);
+
+int gsl_integration_qagi (gsl_function * f,
+ double epsabs, double epsrel, size_t limit,
+ gsl_integration_workspace * workspace,
+ double *result, double *abserr);
+
+int gsl_integration_qagiu (gsl_function * f,
+ double a,
+ double epsabs, double epsrel, size_t limit,
+ gsl_integration_workspace * workspace,
+ double *result, double *abserr);
+
+int gsl_integration_qagil (gsl_function * f,
+ double b,
+ double epsabs, double epsrel, size_t limit,
+ gsl_integration_workspace * workspace,
+ double *result, double *abserr);
+
+
+int gsl_integration_qags (const gsl_function * f,
+ double a, double b,
+ double epsabs, double epsrel, size_t limit,
+ gsl_integration_workspace * workspace,
+ double *result, double *abserr);
+
+int gsl_integration_qagp (const gsl_function * f,
+ double *pts, size_t npts,
+ double epsabs, double epsrel, size_t limit,
+ gsl_integration_workspace * workspace,
+ double *result, double *abserr);
+
+int gsl_integration_qawc (gsl_function *f,
+ const double a, const double b, const double c,
+ const double epsabs, const double epsrel, const size_t limit,
+ gsl_integration_workspace * workspace,
+ double * result, double * abserr);
+
+int gsl_integration_qaws (gsl_function * f,
+ const double a, const double b,
+ gsl_integration_qaws_table * t,
+ const double epsabs, const double epsrel,
+ const size_t limit,
+ gsl_integration_workspace * workspace,
+ double *result, double *abserr);
+
+int gsl_integration_qawo (gsl_function * f,
+ const double a,
+ const double epsabs, const double epsrel,
+ const size_t limit,
+ gsl_integration_workspace * workspace,
+ gsl_integration_qawo_table * wf,
+ double *result, double *abserr);
+
+int gsl_integration_qawf (gsl_function * f,
+ const double a,
+ const double epsabs,
+ const size_t limit,
+ gsl_integration_workspace * workspace,
+ gsl_integration_workspace * cycle_workspace,
+ gsl_integration_qawo_table * wf,
+ double *result, double *abserr);
+
+/* Workspace for fixed-order Gauss-Legendre integration */
+
+typedef struct
+ {
+ size_t n; /* number of points */
+ double *x; /* Gauss abscissae/points */
+ double *w; /* Gauss weights for each abscissae */
+ int precomputed; /* high precision abscissae/weights precomputed? */
+ }
+gsl_integration_glfixed_table;
+
+
+gsl_integration_glfixed_table *
+ gsl_integration_glfixed_table_alloc (size_t n);
+
+void
+ gsl_integration_glfixed_table_free (gsl_integration_glfixed_table * t);
+
+/* Routine for fixed-order Gauss-Legendre integration */
+
+double
+ gsl_integration_glfixed (const gsl_function *f,
+ double a,
+ double b,
+ const gsl_integration_glfixed_table * t);
+
+/* Routine to retrieve the i-th Gauss-Legendre point and weight from t */
+
+int
+ gsl_integration_glfixed_point (double a,
+ double b,
+ size_t i,
+ double *xi,
+ double *wi,
+ const gsl_integration_glfixed_table * t);
+
+
+/* Cquad integration - Pedro Gonnet */
+
+/* Data of a single interval */
+typedef struct
+{
+ double a, b;
+ double c[64];
+ double fx[33];
+ double igral, err;
+ int depth, rdepth, ndiv;
+} gsl_integration_cquad_ival;
+
+
+/* The workspace is just a collection of intervals */
+typedef struct
+{
+ size_t size;
+ gsl_integration_cquad_ival *ivals;
+ size_t *heap;
+} gsl_integration_cquad_workspace;
+
+gsl_integration_cquad_workspace *
+gsl_integration_cquad_workspace_alloc (const size_t n);
+
+void
+gsl_integration_cquad_workspace_free (gsl_integration_cquad_workspace * w);
+
+int
+gsl_integration_cquad (const gsl_function * f, double a, double b,
+ double epsabs, double epsrel,
+ gsl_integration_cquad_workspace * ws,
+ double *result, double *abserr, size_t * nevals);
+
+
+__END_DECLS
+
+#endif /* __GSL_INTEGRATION_H__ */
diff --git a/thirdparty/includes/GSL/gsl/gsl_interp.h b/thirdparty/includes/GSL/gsl/gsl_interp.h
new file mode 100644
index 0000000..8321224
--- /dev/null
+++ b/thirdparty/includes/GSL/gsl/gsl_interp.h
@@ -0,0 +1,225 @@
+/* interpolation/gsl_interp.h
+ *
+ * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2004 Gerard Jungman
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* Author: G. Jungman
+ */
+#ifndef __GSL_INTERP_H__
+#define __GSL_INTERP_H__
+#include
+#include
+#include
+
+#undef __BEGIN_DECLS
+#undef __END_DECLS
+#ifdef __cplusplus
+# define __BEGIN_DECLS extern "C" {
+# define __END_DECLS }
+#else
+# define __BEGIN_DECLS /* empty */
+# define __END_DECLS /* empty */
+#endif
+
+__BEGIN_DECLS
+
+/* evaluation accelerator */
+typedef struct {
+ size_t cache; /* cache of index */
+ size_t miss_count; /* keep statistics */
+ size_t hit_count;
+}
+gsl_interp_accel;
+
+
+/* interpolation object type */
+typedef struct {
+ const char * name;
+ unsigned int min_size;
+ void * (*alloc) (size_t size);
+ int (*init) (void *, const double xa[], const double ya[], size_t size);
+ int (*eval) (const void *, const double xa[], const double ya[], size_t size, double x, gsl_interp_accel *, double * y);
+ int (*eval_deriv) (const void *, const double xa[], const double ya[], size_t size, double x, gsl_interp_accel *, double * y_p);
+ int (*eval_deriv2) (const void *, const double xa[], const double ya[], size_t size, double x, gsl_interp_accel *, double * y_pp);
+ int (*eval_integ) (const void *, const double xa[], const double ya[], size_t size, gsl_interp_accel *, double a, double b, double * result);
+ void (*free) (void *);
+
+} gsl_interp_type;
+
+
+/* general interpolation object */
+typedef struct {
+ const gsl_interp_type * type;
+ double xmin;
+ double xmax;
+ size_t size;
+ void * state;
+} gsl_interp;
+
+
+/* available types */
+GSL_VAR const gsl_interp_type * gsl_interp_linear;
+GSL_VAR const gsl_interp_type * gsl_interp_polynomial;
+GSL_VAR const gsl_interp_type * gsl_interp_cspline;
+GSL_VAR const gsl_interp_type * gsl_interp_cspline_periodic;
+GSL_VAR const gsl_interp_type * gsl_interp_akima;
+GSL_VAR const gsl_interp_type * gsl_interp_akima_periodic;
+GSL_VAR const gsl_interp_type * gsl_interp_steffen;
+
+gsl_interp_accel *
+gsl_interp_accel_alloc(void);
+
+int
+gsl_interp_accel_reset (gsl_interp_accel * a);
+
+void
+gsl_interp_accel_free(gsl_interp_accel * a);
+
+gsl_interp *
+gsl_interp_alloc(const gsl_interp_type * T, size_t n);
+
+int
+gsl_interp_init(gsl_interp * obj, const double xa[], const double ya[], size_t size);
+
+const char * gsl_interp_name(const gsl_interp * interp);
+unsigned int gsl_interp_min_size(const gsl_interp * interp);
+unsigned int gsl_interp_type_min_size(const gsl_interp_type * T);
+
+
+int
+gsl_interp_eval_e(const gsl_interp * obj,
+ const double xa[], const double ya[], double x,
+ gsl_interp_accel * a, double * y);
+
+double
+gsl_interp_eval(const gsl_interp * obj,
+ const double xa[], const double ya[], double x,
+ gsl_interp_accel * a);
+
+int
+gsl_interp_eval_deriv_e(const gsl_interp * obj,
+ const double xa[], const double ya[], double x,
+ gsl_interp_accel * a,
+ double * d);
+
+double
+gsl_interp_eval_deriv(const gsl_interp * obj,
+ const double xa[], const double ya[], double x,
+ gsl_interp_accel * a);
+
+int
+gsl_interp_eval_deriv2_e(const gsl_interp * obj,
+ const double xa[], const double ya[], double x,
+ gsl_interp_accel * a,
+ double * d2);
+
+double
+gsl_interp_eval_deriv2(const gsl_interp * obj,
+ const double xa[], const double ya[], double x,
+ gsl_interp_accel * a);
+
+int
+gsl_interp_eval_integ_e(const gsl_interp * obj,
+ const double xa[], const double ya[],
+ double a, double b,
+ gsl_interp_accel * acc,
+ double * result);
+
+double
+gsl_interp_eval_integ(const gsl_interp * obj,
+ const double xa[], const double ya[],
+ double a, double b,
+ gsl_interp_accel * acc);
+
+void
+gsl_interp_free(gsl_interp * interp);
+
+INLINE_DECL size_t
+gsl_interp_bsearch(const double x_array[], double x,
+ size_t index_lo, size_t index_hi);
+
+#ifdef HAVE_INLINE
+
+/* Perform a binary search of an array of values.
+ *
+ * The parameters index_lo and index_hi provide an initial bracket,
+ * and it is assumed that index_lo < index_hi. The resulting index
+ * is guaranteed to be strictly less than index_hi and greater than
+ * or equal to index_lo, so that the implicit bracket [index, index+1]
+ * always corresponds to a region within the implicit value range of
+ * the value array.
+ *
+ * Note that this means the relationship of 'x' to x_array[index]
+ * and x_array[index+1] depends on the result region, i.e. the
+ * behaviour at the boundaries may not correspond to what you
+ * expect. We have the following complete specification of the
+ * behaviour.
+ * Suppose the input is x_array[] = { x0, x1, ..., xN }
+ * if ( x == x0 ) then index == 0
+ * if ( x > x0 && x <= x1 ) then index == 0, and sim. for other interior pts
+ * if ( x == xN ) then index == N-1
+ * if ( x > xN ) then index == N-1
+ * if ( x < x0 ) then index == 0
+ */
+
+INLINE_FUN size_t
+gsl_interp_bsearch(const double x_array[], double x,
+ size_t index_lo, size_t index_hi)
+{
+ size_t ilo = index_lo;
+ size_t ihi = index_hi;
+ while(ihi > ilo + 1) {
+ size_t i = (ihi + ilo)/2;
+ if(x_array[i] > x)
+ ihi = i;
+ else
+ ilo = i;
+ }
+
+ return ilo;
+}
+#endif
+
+INLINE_DECL size_t
+gsl_interp_accel_find(gsl_interp_accel * a, const double x_array[], size_t size, double x);
+
+#ifdef HAVE_INLINE
+INLINE_FUN size_t
+gsl_interp_accel_find(gsl_interp_accel * a, const double xa[], size_t len, double x)
+{
+ size_t x_index = a->cache;
+
+ if(x < xa[x_index]) {
+ a->miss_count++;
+ a->cache = gsl_interp_bsearch(xa, x, 0, x_index);
+ }
+ else if(x >= xa[x_index + 1]) {
+ a->miss_count++;
+ a->cache = gsl_interp_bsearch(xa, x, x_index, len-1);
+ }
+ else {
+ a->hit_count++;
+ }
+
+ return a->cache;
+}
+#endif /* HAVE_INLINE */
+
+
+__END_DECLS
+
+#endif /* __GSL_INTERP_H__ */
diff --git a/thirdparty/includes/GSL/gsl/gsl_interp2d.h b/thirdparty/includes/GSL/gsl/gsl_interp2d.h
new file mode 100644
index 0000000..e105fa3
--- /dev/null
+++ b/thirdparty/includes/GSL/gsl/gsl_interp2d.h
@@ -0,0 +1,160 @@
+/* interpolation/gsl_interp2d.h
+ *
+ * Copyright 2012 David Zaslavsky
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GSL_INTERP2D_H__
+#define __GSL_INTERP2D_H__
+
+#include
+
+#undef __BEGIN_DECLS
+#undef __END_DECLS
+#ifdef __cplusplus
+# define __BEGIN_DECLS extern "C" {
+# define __END_DECLS }
+#else
+# define __BEGIN_DECLS /* empty */
+# define __END_DECLS /* empty */
+#endif
+
+__BEGIN_DECLS
+
+typedef struct {
+ const char* name;
+ unsigned int min_size;
+ void * (*alloc)(size_t xsize, size_t ysize);
+ int (*init)(void *, const double xa[], const double ya[], const double za[], size_t xsize, size_t ysize);
+ int (*eval)(const void *, const double xa[], const double ya[], const double za[], size_t xsize, size_t ysize, double x, double y, gsl_interp_accel*, gsl_interp_accel*, double* z);
+ int (*eval_deriv_x) (const void *, const double xa[], const double ya[], const double za[], size_t xsize, size_t ysize, double x, double y, gsl_interp_accel*, gsl_interp_accel*, double* z_p);
+ int (*eval_deriv_y) (const void *, const double xa[], const double ya[], const double za[], size_t xsize, size_t ysize, double x, double y, gsl_interp_accel*, gsl_interp_accel*, double* z_p);
+ int (*eval_deriv_xx) (const void *, const double xa[], const double ya[], const double za[], size_t xsize, size_t ysize, double x, double y, gsl_interp_accel*, gsl_interp_accel*, double* z_pp);
+ int (*eval_deriv_xy) (const void *, const double xa[], const double ya[], const double za[], size_t xsize, size_t ysize, double x, double y, gsl_interp_accel*, gsl_interp_accel*, double* z_pp);
+ int (*eval_deriv_yy) (const void *, const double xa[], const double ya[], const double za[], size_t xsize, size_t ysize, double x, double y, gsl_interp_accel*, gsl_interp_accel*, double* z_pp);
+ void (*free)(void *);
+} gsl_interp2d_type;
+
+typedef struct {
+ const gsl_interp2d_type * type; /* interpolation type */
+ double xmin; /* minimum value of x for which data have been provided */
+ double xmax; /* maximum value of x for which data have been provided */
+ double ymin; /* minimum value of y for which data have been provided */
+ double ymax; /* maximum value of y for which data have been provided */
+ size_t xsize; /* number of x values provided */
+ size_t ysize; /* number of y values provided */
+ void * state; /* internal state object specific to the interpolation type */
+} gsl_interp2d;
+
+/* available types */
+GSL_VAR const gsl_interp2d_type * gsl_interp2d_bilinear;
+GSL_VAR const gsl_interp2d_type * gsl_interp2d_bicubic;
+
+gsl_interp2d * gsl_interp2d_alloc(const gsl_interp2d_type * T, const size_t xsize,
+ const size_t ysize);
+
+const char * gsl_interp2d_name(const gsl_interp2d * interp);
+size_t gsl_interp2d_min_size(const gsl_interp2d * interp);
+size_t gsl_interp2d_type_min_size(const gsl_interp2d_type * T);
+int gsl_interp2d_set(const gsl_interp2d * interp, double zarr[],
+ const size_t i, const size_t j, const double z);
+double gsl_interp2d_get(const gsl_interp2d * interp, const double zarr[],
+ const size_t i, const size_t j);
+size_t gsl_interp2d_idx(const gsl_interp2d * interp,
+ const size_t i, const size_t j);
+int gsl_interp2d_init(gsl_interp2d * interp, const double xa[], const double ya[],
+ const double za[], const size_t xsize, const size_t ysize);
+void gsl_interp2d_free(gsl_interp2d * interp);
+
+double gsl_interp2d_eval(const gsl_interp2d * interp, const double xarr[],
+ const double yarr[], const double zarr[], const double x,
+ const double y, gsl_interp_accel * xa, gsl_interp_accel * ya);
+
+double gsl_interp2d_eval_extrap(const gsl_interp2d * interp,
+ const double xarr[], const double yarr[],
+ const double zarr[], const double x,
+ const double y, gsl_interp_accel * xa,
+ gsl_interp_accel * ya);
+
+int gsl_interp2d_eval_e(const gsl_interp2d * interp, const double xarr[],
+ const double yarr[], const double zarr[],
+ const double x, const double y, gsl_interp_accel* xa,
+ gsl_interp_accel* ya, double * z);
+
+int gsl_interp2d_eval_e_extrap(const gsl_interp2d * interp,
+ const double xarr[],
+ const double yarr[],
+ const double zarr[],
+ const double x,
+ const double y,
+ gsl_interp_accel * xa,
+ gsl_interp_accel * ya,
+ double * z);
+
+double gsl_interp2d_eval_deriv_x(const gsl_interp2d * interp, const double xarr[],
+ const double yarr[], const double zarr[],
+ const double x, const double y, gsl_interp_accel * xa,
+ gsl_interp_accel * ya);
+
+int gsl_interp2d_eval_deriv_x_e(const gsl_interp2d * interp, const double xarr[],
+ const double yarr[], const double zarr[],
+ const double x, const double y,
+ gsl_interp_accel * xa, gsl_interp_accel * ya, double * z);
+
+double gsl_interp2d_eval_deriv_y(const gsl_interp2d * interp, const double xarr[],
+ const double yarr[], const double zarr[],
+ const double x, const double y,
+ gsl_interp_accel* xa, gsl_interp_accel* ya);
+
+int gsl_interp2d_eval_deriv_y_e(const gsl_interp2d * interp, const double xarr[],
+ const double yarr[], const double zarr[],
+ const double x, const double y,
+ gsl_interp_accel * xa, gsl_interp_accel * ya, double * z);
+
+double gsl_interp2d_eval_deriv_xx(const gsl_interp2d * interp, const double xarr[],
+ const double yarr[], const double zarr[],
+ const double x, const double y,
+ gsl_interp_accel * xa, gsl_interp_accel * ya);
+
+int gsl_interp2d_eval_deriv_xx_e(const gsl_interp2d * interp, const double xarr[],
+ const double yarr[], const double zarr[],
+ const double x, const double y,
+ gsl_interp_accel * xa, gsl_interp_accel * ya, double * z);
+
+double gsl_interp2d_eval_deriv_yy(const gsl_interp2d * interp, const double xarr[],
+ const double yarr[], const double zarr[],
+ const double x, const double y,
+ gsl_interp_accel * xa, gsl_interp_accel * ya);
+
+int gsl_interp2d_eval_deriv_yy_e(const gsl_interp2d * interp, const double xarr[],
+ const double yarr[], const double zarr[],
+ const double x, const double y,
+ gsl_interp_accel * xa, gsl_interp_accel * ya, double * z);
+
+double gsl_interp2d_eval_deriv_xy(const gsl_interp2d * interp, const double xarr[],
+ const double yarr[], const double zarr[],
+ const double x, const double y,
+ gsl_interp_accel * xa, gsl_interp_accel * ya);
+
+int gsl_interp2d_eval_deriv_xy_e(const gsl_interp2d * interp, const double xarr[],
+ const double yarr[], const double zarr[],
+ const double x, const double y,
+ gsl_interp_accel * xa, gsl_interp_accel * ya, double * z);
+
+
+__END_DECLS
+
+#endif /* __GSL_INTERP2D_H__ */
diff --git a/thirdparty/includes/GSL/gsl/gsl_linalg.h b/thirdparty/includes/GSL/gsl/gsl_linalg.h
new file mode 100644
index 0000000..ac3e643
--- /dev/null
+++ b/thirdparty/includes/GSL/gsl/gsl_linalg.h
@@ -0,0 +1,650 @@
+/* linalg/gsl_linalg.h
+ *
+ * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2006, 2007 Gerard Jungman, Brian Gough, Patrick Alken
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GSL_LINALG_H__
+#define __GSL_LINALG_H__
+
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+#undef __BEGIN_DECLS
+#undef __END_DECLS
+#ifdef __cplusplus
+#define __BEGIN_DECLS extern "C" {
+#define __END_DECLS }
+#else
+#define __BEGIN_DECLS /* empty */
+#define __END_DECLS /* empty */
+#endif
+
+__BEGIN_DECLS
+
+typedef enum
+ {
+ GSL_LINALG_MOD_NONE = 0,
+ GSL_LINALG_MOD_TRANSPOSE = 1,
+ GSL_LINALG_MOD_CONJUGATE = 2
+ }
+gsl_linalg_matrix_mod_t;
+
+
+/* Note: You can now use the gsl_blas_dgemm function instead of matmult */
+
+/* Simple implementation of matrix multiply.
+ * Calculates C = A.B
+ *
+ * exceptions: GSL_EBADLEN
+ */
+int gsl_linalg_matmult (const gsl_matrix * A,
+ const gsl_matrix * B,
+ gsl_matrix * C);
+
+
+/* Simple implementation of matrix multiply.
+ * Allows transposition of either matrix, so it
+ * can compute A.B or Trans(A).B or A.Trans(B) or Trans(A).Trans(B)
+ *
+ * exceptions: GSL_EBADLEN
+ */
+int gsl_linalg_matmult_mod (const gsl_matrix * A,
+ gsl_linalg_matrix_mod_t modA,
+ const gsl_matrix * B,
+ gsl_linalg_matrix_mod_t modB,
+ gsl_matrix * C);
+
+/* Calculate the matrix exponential by the scaling and
+ * squaring method described in Moler + Van Loan,
+ * SIAM Rev 20, 801 (1978). The mode argument allows
+ * choosing an optimal strategy, from the table
+ * given in the paper, for a given precision.
+ *
+ * exceptions: GSL_ENOTSQR, GSL_EBADLEN
+ */
+int gsl_linalg_exponential_ss(
+ const gsl_matrix * A,
+ gsl_matrix * eA,
+ gsl_mode_t mode
+ );
+
+
+/* Householder Transformations */
+
+double gsl_linalg_householder_transform (gsl_vector * v);
+gsl_complex gsl_linalg_complex_householder_transform (gsl_vector_complex * v);
+
+int gsl_linalg_householder_hm (double tau,
+ const gsl_vector * v,
+ gsl_matrix * A);
+
+int gsl_linalg_householder_mh (double tau,
+ const gsl_vector * v,
+ gsl_matrix * A);
+
+int gsl_linalg_householder_hv (double tau,
+ const gsl_vector * v,
+ gsl_vector * w);
+
+int gsl_linalg_householder_hm1 (double tau,
+ gsl_matrix * A);
+
+int gsl_linalg_complex_householder_hm (gsl_complex tau,
+ const gsl_vector_complex * v,
+ gsl_matrix_complex * A);
+
+int gsl_linalg_complex_householder_mh (gsl_complex tau,
+ const gsl_vector_complex * v,
+ gsl_matrix_complex * A);
+
+int gsl_linalg_complex_householder_hv (gsl_complex tau,
+ const gsl_vector_complex * v,
+ gsl_vector_complex * w);
+
+/* Hessenberg reduction */
+
+int gsl_linalg_hessenberg_decomp(gsl_matrix *A, gsl_vector *tau);
+int gsl_linalg_hessenberg_unpack(gsl_matrix * H, gsl_vector * tau,
+ gsl_matrix * U);
+int gsl_linalg_hessenberg_unpack_accum(gsl_matrix * H, gsl_vector * tau,
+ gsl_matrix * U);
+int gsl_linalg_hessenberg_set_zero(gsl_matrix * H);
+int gsl_linalg_hessenberg_submatrix(gsl_matrix *M, gsl_matrix *A,
+ size_t top, gsl_vector *tau);
+
+/* To support gsl-1.9 interface: DEPRECATED */
+int gsl_linalg_hessenberg(gsl_matrix *A, gsl_vector *tau);
+
+
+/* Hessenberg-Triangular reduction */
+
+int gsl_linalg_hesstri_decomp(gsl_matrix * A, gsl_matrix * B,
+ gsl_matrix * U, gsl_matrix * V,
+ gsl_vector * work);
+
+/* Singular Value Decomposition
+
+ * exceptions:
+ */
+
+int
+gsl_linalg_SV_decomp (gsl_matrix * A,
+ gsl_matrix * V,
+ gsl_vector * S,
+ gsl_vector * work);
+
+int
+gsl_linalg_SV_decomp_mod (gsl_matrix * A,
+ gsl_matrix * X,
+ gsl_matrix * V,
+ gsl_vector * S,
+ gsl_vector * work);
+
+int gsl_linalg_SV_decomp_jacobi (gsl_matrix * A,
+ gsl_matrix * Q,
+ gsl_vector * S);
+
+int
+gsl_linalg_SV_solve (const gsl_matrix * U,
+ const gsl_matrix * Q,
+ const gsl_vector * S,
+ const gsl_vector * b,
+ gsl_vector * x);
+
+int gsl_linalg_SV_leverage(const gsl_matrix *U, gsl_vector *h);
+
+
+/* LU Decomposition, Gaussian elimination with partial pivoting
+ */
+
+int gsl_linalg_LU_decomp (gsl_matrix * A, gsl_permutation * p, int *signum);
+
+int gsl_linalg_LU_solve (const gsl_matrix * LU,
+ const gsl_permutation * p,
+ const gsl_vector * b,
+ gsl_vector * x);
+
+int gsl_linalg_LU_svx (const gsl_matrix * LU,
+ const gsl_permutation * p,
+ gsl_vector * x);
+
+int gsl_linalg_LU_refine (const gsl_matrix * A,
+ const gsl_matrix * LU,
+ const gsl_permutation * p,
+ const gsl_vector * b,
+ gsl_vector * x,
+ gsl_vector * residual);
+
+int gsl_linalg_LU_invert (const gsl_matrix * LU,
+ const gsl_permutation * p,
+ gsl_matrix * inverse);
+
+double gsl_linalg_LU_det (gsl_matrix * LU, int signum);
+double gsl_linalg_LU_lndet (gsl_matrix * LU);
+int gsl_linalg_LU_sgndet (gsl_matrix * lu, int signum);
+
+/* Complex LU Decomposition */
+
+int gsl_linalg_complex_LU_decomp (gsl_matrix_complex * A,
+ gsl_permutation * p,
+ int *signum);
+
+int gsl_linalg_complex_LU_solve (const gsl_matrix_complex * LU,
+ const gsl_permutation * p,
+ const gsl_vector_complex * b,
+ gsl_vector_complex * x);
+
+int gsl_linalg_complex_LU_svx (const gsl_matrix_complex * LU,
+ const gsl_permutation * p,
+ gsl_vector_complex * x);
+
+int gsl_linalg_complex_LU_refine (const gsl_matrix_complex * A,
+ const gsl_matrix_complex * LU,
+ const gsl_permutation * p,
+ const gsl_vector_complex * b,
+ gsl_vector_complex * x,
+ gsl_vector_complex * residual);
+
+int gsl_linalg_complex_LU_invert (const gsl_matrix_complex * LU,
+ const gsl_permutation * p,
+ gsl_matrix_complex * inverse);
+
+gsl_complex gsl_linalg_complex_LU_det (gsl_matrix_complex * LU,
+ int signum);
+
+double gsl_linalg_complex_LU_lndet (gsl_matrix_complex * LU);
+
+gsl_complex gsl_linalg_complex_LU_sgndet (gsl_matrix_complex * LU,
+ int signum);
+
+/* QR decomposition */
+
+int gsl_linalg_QR_decomp (gsl_matrix * A,
+ gsl_vector * tau);
+
+int gsl_linalg_QR_solve (const gsl_matrix * QR,
+ const gsl_vector * tau,
+ const gsl_vector * b,
+ gsl_vector * x);
+
+int gsl_linalg_QR_svx (const gsl_matrix * QR,
+ const gsl_vector * tau,
+ gsl_vector * x);
+
+int gsl_linalg_QR_lssolve (const gsl_matrix * QR,
+ const gsl_vector * tau,
+ const gsl_vector * b,
+ gsl_vector * x,
+ gsl_vector * residual);
+
+
+int gsl_linalg_QR_QRsolve (gsl_matrix * Q,
+ gsl_matrix * R,
+ const gsl_vector * b,
+ gsl_vector * x);
+
+int gsl_linalg_QR_Rsolve (const gsl_matrix * QR,
+ const gsl_vector * b,
+ gsl_vector * x);
+
+int gsl_linalg_QR_Rsvx (const gsl_matrix * QR,
+ gsl_vector * x);
+
+int gsl_linalg_QR_update (gsl_matrix * Q,
+ gsl_matrix * R,
+ gsl_vector * w,
+ const gsl_vector * v);
+
+int gsl_linalg_QR_QTvec (const gsl_matrix * QR,
+ const gsl_vector * tau,
+ gsl_vector * v);
+
+int gsl_linalg_QR_Qvec (const gsl_matrix * QR,
+ const gsl_vector * tau,
+ gsl_vector * v);
+
+int gsl_linalg_QR_QTmat (const gsl_matrix * QR,
+ const gsl_vector * tau,
+ gsl_matrix * A);
+
+int gsl_linalg_QR_matQ (const gsl_matrix * QR,
+ const gsl_vector * tau,
+ gsl_matrix * A);
+
+int gsl_linalg_QR_unpack (const gsl_matrix * QR,
+ const gsl_vector * tau,
+ gsl_matrix * Q,
+ gsl_matrix * R);
+
+int gsl_linalg_R_solve (const gsl_matrix * R,
+ const gsl_vector * b,
+ gsl_vector * x);
+
+int gsl_linalg_R_svx (const gsl_matrix * R,
+ gsl_vector * x);
+
+
+/* Q R P^T decomposition */
+
+int gsl_linalg_QRPT_decomp (gsl_matrix * A,
+ gsl_vector * tau,
+ gsl_permutation * p,
+ int *signum,
+ gsl_vector * norm);
+
+int gsl_linalg_QRPT_decomp2 (const gsl_matrix * A,
+ gsl_matrix * q, gsl_matrix * r,
+ gsl_vector * tau,
+ gsl_permutation * p,
+ int *signum,
+ gsl_vector * norm);
+
+int gsl_linalg_QRPT_solve (const gsl_matrix * QR,
+ const gsl_vector * tau,
+ const gsl_permutation * p,
+ const gsl_vector * b,
+ gsl_vector * x);
+
+
+int gsl_linalg_QRPT_svx (const gsl_matrix * QR,
+ const gsl_vector * tau,
+ const gsl_permutation * p,
+ gsl_vector * x);
+
+int gsl_linalg_QRPT_QRsolve (const gsl_matrix * Q,
+ const gsl_matrix * R,
+ const gsl_permutation * p,
+ const gsl_vector * b,
+ gsl_vector * x);
+
+int gsl_linalg_QRPT_Rsolve (const gsl_matrix * QR,
+ const gsl_permutation * p,
+ const gsl_vector * b,
+ gsl_vector * x);
+
+int gsl_linalg_QRPT_Rsvx (const gsl_matrix * QR,
+ const gsl_permutation * p,
+ gsl_vector * x);
+
+int gsl_linalg_QRPT_update (gsl_matrix * Q,
+ gsl_matrix * R,
+ const gsl_permutation * p,
+ gsl_vector * u,
+ const gsl_vector * v);
+
+/* LQ decomposition */
+
+int gsl_linalg_LQ_decomp (gsl_matrix * A, gsl_vector * tau);
+
+int gsl_linalg_LQ_solve_T (const gsl_matrix * LQ, const gsl_vector * tau,
+ const gsl_vector * b, gsl_vector * x);
+
+int gsl_linalg_LQ_svx_T (const gsl_matrix * LQ, const gsl_vector * tau,
+ gsl_vector * x);
+
+int gsl_linalg_LQ_lssolve_T (const gsl_matrix * LQ, const gsl_vector * tau,
+ const gsl_vector * b, gsl_vector * x,
+ gsl_vector * residual);
+
+int gsl_linalg_LQ_Lsolve_T (const gsl_matrix * LQ, const gsl_vector * b,
+ gsl_vector * x);
+
+int gsl_linalg_LQ_Lsvx_T (const gsl_matrix * LQ, gsl_vector * x);
+
+int gsl_linalg_L_solve_T (const gsl_matrix * L, const gsl_vector * b,
+ gsl_vector * x);
+
+int gsl_linalg_LQ_vecQ (const gsl_matrix * LQ, const gsl_vector * tau,
+ gsl_vector * v);
+
+int gsl_linalg_LQ_vecQT (const gsl_matrix * LQ, const gsl_vector * tau,
+ gsl_vector * v);
+
+int gsl_linalg_LQ_unpack (const gsl_matrix * LQ, const gsl_vector * tau,
+ gsl_matrix * Q, gsl_matrix * L);
+
+int gsl_linalg_LQ_update (gsl_matrix * Q, gsl_matrix * R,
+ const gsl_vector * v, gsl_vector * w);
+int gsl_linalg_LQ_LQsolve (gsl_matrix * Q, gsl_matrix * L,
+ const gsl_vector * b, gsl_vector * x);
+
+/* P^T L Q decomposition */
+
+int gsl_linalg_PTLQ_decomp (gsl_matrix * A, gsl_vector * tau,
+ gsl_permutation * p, int *signum,
+ gsl_vector * norm);
+
+int gsl_linalg_PTLQ_decomp2 (const gsl_matrix * A, gsl_matrix * q,
+ gsl_matrix * r, gsl_vector * tau,
+ gsl_permutation * p, int *signum,
+ gsl_vector * norm);
+
+int gsl_linalg_PTLQ_solve_T (const gsl_matrix * QR,
+ const gsl_vector * tau,
+ const gsl_permutation * p,
+ const gsl_vector * b,
+ gsl_vector * x);
+
+int gsl_linalg_PTLQ_svx_T (const gsl_matrix * LQ,
+ const gsl_vector * tau,
+ const gsl_permutation * p,
+ gsl_vector * x);
+
+int gsl_linalg_PTLQ_LQsolve_T (const gsl_matrix * Q, const gsl_matrix * L,
+ const gsl_permutation * p,
+ const gsl_vector * b,
+ gsl_vector * x);
+
+int gsl_linalg_PTLQ_Lsolve_T (const gsl_matrix * LQ,
+ const gsl_permutation * p,
+ const gsl_vector * b,
+ gsl_vector * x);
+
+int gsl_linalg_PTLQ_Lsvx_T (const gsl_matrix * LQ,
+ const gsl_permutation * p,
+ gsl_vector * x);
+
+int gsl_linalg_PTLQ_update (gsl_matrix * Q, gsl_matrix * L,
+ const gsl_permutation * p,
+ const gsl_vector * v, gsl_vector * w);
+
+/* Cholesky Decomposition */
+
+int gsl_linalg_cholesky_decomp (gsl_matrix * A);
+
+int gsl_linalg_cholesky_solve (const gsl_matrix * cholesky,
+ const gsl_vector * b,
+ gsl_vector * x);
+
+int gsl_linalg_cholesky_svx (const gsl_matrix * cholesky,
+ gsl_vector * x);
+
+int gsl_linalg_cholesky_invert(gsl_matrix * cholesky);
+
+/* Cholesky decomposition with unit-diagonal triangular parts.
+ * A = L D L^T, where diag(L) = (1,1,...,1).
+ * Upon exit, A contains L and L^T as for Cholesky, and
+ * the diagonal of A is (1,1,...,1). The vector Dis set
+ * to the diagonal elements of the diagonal matrix D.
+ */
+int gsl_linalg_cholesky_decomp_unit(gsl_matrix * A, gsl_vector * D);
+
+/* Complex Cholesky Decomposition */
+
+int gsl_linalg_complex_cholesky_decomp (gsl_matrix_complex * A);
+
+int gsl_linalg_complex_cholesky_solve (const gsl_matrix_complex * cholesky,
+ const gsl_vector_complex * b,
+ gsl_vector_complex * x);
+
+int gsl_linalg_complex_cholesky_svx (const gsl_matrix_complex * cholesky,
+ gsl_vector_complex * x);
+
+int gsl_linalg_complex_cholesky_invert(gsl_matrix_complex * cholesky);
+
+
+/* Symmetric to symmetric tridiagonal decomposition */
+
+int gsl_linalg_symmtd_decomp (gsl_matrix * A,
+ gsl_vector * tau);
+
+int gsl_linalg_symmtd_unpack (const gsl_matrix * A,
+ const gsl_vector * tau,
+ gsl_matrix * Q,
+ gsl_vector * diag,
+ gsl_vector * subdiag);
+
+int gsl_linalg_symmtd_unpack_T (const gsl_matrix * A,
+ gsl_vector * diag,
+ gsl_vector * subdiag);
+
+/* Hermitian to symmetric tridiagonal decomposition */
+
+int gsl_linalg_hermtd_decomp (gsl_matrix_complex * A,
+ gsl_vector_complex * tau);
+
+int gsl_linalg_hermtd_unpack (const gsl_matrix_complex * A,
+ const gsl_vector_complex * tau,
+ gsl_matrix_complex * U,
+ gsl_vector * diag,
+ gsl_vector * sudiag);
+
+int gsl_linalg_hermtd_unpack_T (const gsl_matrix_complex * A,
+ gsl_vector * diag,
+ gsl_vector * subdiag);
+
+/* Linear Solve Using Householder Transformations
+
+ * exceptions:
+ */
+
+int gsl_linalg_HH_solve (gsl_matrix * A, const gsl_vector * b, gsl_vector * x);
+int gsl_linalg_HH_svx (gsl_matrix * A, gsl_vector * x);
+
+/* Linear solve for a symmetric tridiagonal system.
+
+ * The input vectors represent the NxN matrix as follows:
+ *
+ * diag[0] offdiag[0] 0 ...
+ * offdiag[0] diag[1] offdiag[1] ...
+ * 0 offdiag[1] diag[2] ...
+ * 0 0 offdiag[2] ...
+ * ... ... ... ...
+ */
+int gsl_linalg_solve_symm_tridiag (const gsl_vector * diag,
+ const gsl_vector * offdiag,
+ const gsl_vector * b,
+ gsl_vector * x);
+
+/* Linear solve for a nonsymmetric tridiagonal system.
+
+ * The input vectors represent the NxN matrix as follows:
+ *
+ * diag[0] abovediag[0] 0 ...
+ * belowdiag[0] diag[1] abovediag[1] ...
+ * 0 belowdiag[1] diag[2] ...
+ * 0 0 belowdiag[2] ...
+ * ... ... ... ...
+ */
+int gsl_linalg_solve_tridiag (const gsl_vector * diag,
+ const gsl_vector * abovediag,
+ const gsl_vector * belowdiag,
+ const gsl_vector * b,
+ gsl_vector * x);
+
+
+/* Linear solve for a symmetric cyclic tridiagonal system.
+
+ * The input vectors represent the NxN matrix as follows:
+ *
+ * diag[0] offdiag[0] 0 ..... offdiag[N-1]
+ * offdiag[0] diag[1] offdiag[1] .....
+ * 0 offdiag[1] diag[2] .....
+ * 0 0 offdiag[2] .....
+ * ... ...
+ * offdiag[N-1] ...
+ */
+int gsl_linalg_solve_symm_cyc_tridiag (const gsl_vector * diag,
+ const gsl_vector * offdiag,
+ const gsl_vector * b,
+ gsl_vector * x);
+
+/* Linear solve for a nonsymmetric cyclic tridiagonal system.
+
+ * The input vectors represent the NxN matrix as follows:
+ *
+ * diag[0] abovediag[0] 0 ..... belowdiag[N-1]
+ * belowdiag[0] diag[1] abovediag[1] .....
+ * 0 belowdiag[1] diag[2]
+ * 0 0 belowdiag[2] .....
+ * ... ...
+ * abovediag[N-1] ...
+ */
+int gsl_linalg_solve_cyc_tridiag (const gsl_vector * diag,
+ const gsl_vector * abovediag,
+ const gsl_vector * belowdiag,
+ const gsl_vector * b,
+ gsl_vector * x);
+
+
+/* Bidiagonal decomposition */
+
+int gsl_linalg_bidiag_decomp (gsl_matrix * A,
+ gsl_vector * tau_U,
+ gsl_vector * tau_V);
+
+int gsl_linalg_bidiag_unpack (const gsl_matrix * A,
+ const gsl_vector * tau_U,
+ gsl_matrix * U,
+ const gsl_vector * tau_V,
+ gsl_matrix * V,
+ gsl_vector * diag,
+ gsl_vector * superdiag);
+
+int gsl_linalg_bidiag_unpack2 (gsl_matrix * A,
+ gsl_vector * tau_U,
+ gsl_vector * tau_V,
+ gsl_matrix * V);
+
+int gsl_linalg_bidiag_unpack_B (const gsl_matrix * A,
+ gsl_vector * diag,
+ gsl_vector * superdiag);
+
+/* Balancing */
+
+int gsl_linalg_balance_matrix (gsl_matrix * A, gsl_vector * D);
+int gsl_linalg_balance_accum (gsl_matrix * A, gsl_vector * D);
+int gsl_linalg_balance_columns (gsl_matrix * A, gsl_vector * D);
+
+INLINE_DECL void gsl_linalg_givens (const double a, const double b,
+ double *c, double *s);
+INLINE_DECL void gsl_linalg_givens_gv (gsl_vector * v, const size_t i,
+ const size_t j, const double c,
+ const double s);
+
+#ifdef HAVE_INLINE
+
+/* Generate a Givens rotation (cos,sin) which takes v=(x,y) to (|v|,0)
+ From Golub and Van Loan, "Matrix Computations", Section 5.1.8 */
+INLINE_FUN
+void
+gsl_linalg_givens (const double a, const double b, double *c, double *s)
+{
+ if (b == 0)
+ {
+ *c = 1;
+ *s = 0;
+ }
+ else if (fabs (b) > fabs (a))
+ {
+ double t = -a / b;
+ double s1 = 1.0 / sqrt (1 + t * t);
+ *s = s1;
+ *c = s1 * t;
+ }
+ else
+ {
+ double t = -b / a;
+ double c1 = 1.0 / sqrt (1 + t * t);
+ *c = c1;
+ *s = c1 * t;
+ }
+} /* gsl_linalg_givens() */
+
+INLINE_FUN
+void
+gsl_linalg_givens_gv (gsl_vector * v, const size_t i, const size_t j,
+ const double c, const double s)
+{
+ /* Apply rotation to vector v' = G^T v */
+
+ double vi = gsl_vector_get (v, i);
+ double vj = gsl_vector_get (v, j);
+ gsl_vector_set (v, i, c * vi - s * vj);
+ gsl_vector_set (v, j, s * vi + c * vj);
+}
+
+#endif /* HAVE_INLINE */
+
+__END_DECLS
+
+#endif /* __GSL_LINALG_H__ */
diff --git a/thirdparty/includes/GSL/gsl/gsl_machine.h b/thirdparty/includes/GSL/gsl/gsl_machine.h
new file mode 100644
index 0000000..c44ffc2
--- /dev/null
+++ b/thirdparty/includes/GSL/gsl/gsl_machine.h
@@ -0,0 +1,104 @@
+/* Author: B. Gough and G. Jungman */
+#ifndef __GSL_MACHINE_H__
+#define __GSL_MACHINE_H__
+
+#include
+#include
+
+/* magic constants; mostly for the benefit of the implementation */
+
+/* -*-MACHINE CONSTANTS-*-
+ *
+ * PLATFORM: Whiz-O-Matic 9000
+ * FP_PLATFORM: IEEE-Virtual
+ * HOSTNAME: nnn.lanl.gov
+ * DATE: Fri Nov 20 17:53:26 MST 1998
+ */
+#define GSL_DBL_EPSILON 2.2204460492503131e-16
+#define GSL_SQRT_DBL_EPSILON 1.4901161193847656e-08
+#define GSL_ROOT3_DBL_EPSILON 6.0554544523933429e-06
+#define GSL_ROOT4_DBL_EPSILON 1.2207031250000000e-04
+#define GSL_ROOT5_DBL_EPSILON 7.4009597974140505e-04
+#define GSL_ROOT6_DBL_EPSILON 2.4607833005759251e-03
+#define GSL_LOG_DBL_EPSILON (-3.6043653389117154e+01)
+
+#define GSL_DBL_MIN 2.2250738585072014e-308
+#define GSL_SQRT_DBL_MIN 1.4916681462400413e-154
+#define GSL_ROOT3_DBL_MIN 2.8126442852362996e-103
+#define GSL_ROOT4_DBL_MIN 1.2213386697554620e-77
+#define GSL_ROOT5_DBL_MIN 2.9476022969691763e-62
+#define GSL_ROOT6_DBL_MIN 5.3034368905798218e-52
+#define GSL_LOG_DBL_MIN (-7.0839641853226408e+02)
+
+#define GSL_DBL_MAX 1.7976931348623157e+308
+#define GSL_SQRT_DBL_MAX 1.3407807929942596e+154
+#define GSL_ROOT3_DBL_MAX 5.6438030941222897e+102
+#define GSL_ROOT4_DBL_MAX 1.1579208923731620e+77
+#define GSL_ROOT5_DBL_MAX 4.4765466227572707e+61
+#define GSL_ROOT6_DBL_MAX 2.3756689782295612e+51
+#define GSL_LOG_DBL_MAX 7.0978271289338397e+02
+
+#define GSL_FLT_EPSILON 1.1920928955078125e-07
+#define GSL_SQRT_FLT_EPSILON 3.4526698300124393e-04
+#define GSL_ROOT3_FLT_EPSILON 4.9215666011518501e-03
+#define GSL_ROOT4_FLT_EPSILON 1.8581361171917516e-02
+#define GSL_ROOT5_FLT_EPSILON 4.1234622211652937e-02
+#define GSL_ROOT6_FLT_EPSILON 7.0153878019335827e-02
+#define GSL_LOG_FLT_EPSILON (-1.5942385152878742e+01)
+
+#define GSL_FLT_MIN 1.1754943508222875e-38
+#define GSL_SQRT_FLT_MIN 1.0842021724855044e-19
+#define GSL_ROOT3_FLT_MIN 2.2737367544323241e-13
+#define GSL_ROOT4_FLT_MIN 3.2927225399135965e-10
+#define GSL_ROOT5_FLT_MIN 2.5944428542140822e-08
+#define GSL_ROOT6_FLT_MIN 4.7683715820312542e-07
+#define GSL_LOG_FLT_MIN (-8.7336544750553102e+01)
+
+#define GSL_FLT_MAX 3.4028234663852886e+38
+#define GSL_SQRT_FLT_MAX 1.8446743523953730e+19
+#define GSL_ROOT3_FLT_MAX 6.9814635196223242e+12
+#define GSL_ROOT4_FLT_MAX 4.2949672319999986e+09
+#define GSL_ROOT5_FLT_MAX 5.0859007855960041e+07
+#define GSL_ROOT6_FLT_MAX 2.6422459233807749e+06
+#define GSL_LOG_FLT_MAX 8.8722839052068352e+01
+
+#define GSL_SFLT_EPSILON 4.8828125000000000e-04
+#define GSL_SQRT_SFLT_EPSILON 2.2097086912079612e-02
+#define GSL_ROOT3_SFLT_EPSILON 7.8745065618429588e-02
+#define GSL_ROOT4_SFLT_EPSILON 1.4865088937534013e-01
+#define GSL_ROOT5_SFLT_EPSILON 2.1763764082403100e-01
+#define GSL_ROOT6_SFLT_EPSILON 2.8061551207734325e-01
+#define GSL_LOG_SFLT_EPSILON (-7.6246189861593985e+00)
+
+/* !MACHINE CONSTANTS! */
+
+
+/* a little internal backwards compatibility */
+#define GSL_MACH_EPS GSL_DBL_EPSILON
+
+
+
+/* Here are the constants related to or derived from
+ * machine constants. These are not to be confused with
+ * the constants that define various precision levels
+ * for the precision/error system.
+ *
+ * This information is determined at configure time
+ * and is platform dependent. Edit at your own risk.
+ *
+ * PLATFORM: WHIZ-O-MATIC
+ * CONFIG-DATE: Thu Nov 19 19:27:18 MST 1998
+ * CONFIG-HOST: nnn.lanl.gov
+ */
+
+/* machine precision constants */
+/* #define GSL_MACH_EPS 1.0e-15 */
+#define GSL_SQRT_MACH_EPS 3.2e-08
+#define GSL_ROOT3_MACH_EPS 1.0e-05
+#define GSL_ROOT4_MACH_EPS 0.000178
+#define GSL_ROOT5_MACH_EPS 0.00100
+#define GSL_ROOT6_MACH_EPS 0.00316
+#define GSL_LOG_MACH_EPS (-34.54)
+
+
+#endif /* __GSL_MACHINE_H__ */
diff --git a/thirdparty/includes/GSL/gsl/gsl_math.h b/thirdparty/includes/GSL/gsl/gsl_math.h
new file mode 100644
index 0000000..2d09df1
--- /dev/null
+++ b/thirdparty/includes/GSL/gsl/gsl_math.h
@@ -0,0 +1,164 @@
+/* gsl_math.h
+ *
+ * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2004, 2007 Gerard Jungman, Brian Gough
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GSL_MATH_H__
+#define __GSL_MATH_H__
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+#ifndef M_E
+#define M_E 2.71828182845904523536028747135 /* e */
+#endif
+
+#ifndef M_LOG2E
+#define M_LOG2E 1.44269504088896340735992468100 /* log_2 (e) */
+#endif
+
+#ifndef M_LOG10E
+#define M_LOG10E 0.43429448190325182765112891892 /* log_10 (e) */
+#endif
+
+#ifndef M_SQRT2
+#define M_SQRT2 1.41421356237309504880168872421 /* sqrt(2) */
+#endif
+
+#ifndef M_SQRT1_2
+#define M_SQRT1_2 0.70710678118654752440084436210 /* sqrt(1/2) */
+#endif
+
+
+#ifndef M_SQRT3
+#define M_SQRT3 1.73205080756887729352744634151 /* sqrt(3) */
+#endif
+
+#ifndef M_PI
+#define M_PI 3.14159265358979323846264338328 /* pi */
+#endif
+
+#ifndef M_PI_2
+#define M_PI_2 1.57079632679489661923132169164 /* pi/2 */
+#endif
+
+#ifndef M_PI_4
+#define M_PI_4 0.78539816339744830961566084582 /* pi/4 */
+#endif
+
+#ifndef M_SQRTPI
+#define M_SQRTPI 1.77245385090551602729816748334 /* sqrt(pi) */
+#endif
+
+#ifndef M_2_SQRTPI
+#define M_2_SQRTPI 1.12837916709551257389615890312 /* 2/sqrt(pi) */
+#endif
+
+#ifndef M_1_PI
+#define M_1_PI 0.31830988618379067153776752675 /* 1/pi */
+#endif
+
+#ifndef M_2_PI
+#define M_2_PI 0.63661977236758134307553505349 /* 2/pi */
+#endif
+
+#ifndef M_LN10
+#define M_LN10 2.30258509299404568401799145468 /* ln(10) */
+#endif
+
+#ifndef M_LN2
+#define M_LN2 0.69314718055994530941723212146 /* ln(2) */
+#endif
+
+#ifndef M_LNPI
+#define M_LNPI 1.14472988584940017414342735135 /* ln(pi) */
+#endif
+
+#ifndef M_EULER
+#define M_EULER 0.57721566490153286060651209008 /* Euler constant */
+#endif
+
+#undef __BEGIN_DECLS
+#undef __END_DECLS
+#ifdef __cplusplus
+# define __BEGIN_DECLS extern "C" {
+# define __END_DECLS }
+#else
+# define __BEGIN_DECLS /* empty */
+# define __END_DECLS /* empty */
+#endif
+
+__BEGIN_DECLS
+
+/* other needlessly compulsive abstractions */
+
+#define GSL_IS_ODD(n) ((n) & 1)
+#define GSL_IS_EVEN(n) (!(GSL_IS_ODD(n)))
+#define GSL_SIGN(x) ((x) >= 0.0 ? 1 : -1)
+
+/* Return nonzero if x is a real number, i.e. non NaN or infinite. */
+#define GSL_IS_REAL(x) (gsl_finite(x))
+
+/* Definition of an arbitrary function with parameters */
+
+struct gsl_function_struct
+{
+ double (* function) (double x, void * params);
+ void * params;
+};
+
+typedef struct gsl_function_struct gsl_function ;
+
+#define GSL_FN_EVAL(F,x) (*((F)->function))(x,(F)->params)
+
+/* Definition of an arbitrary function returning two values, r1, r2 */
+
+struct gsl_function_fdf_struct
+{
+ double (* f) (double x, void * params);
+ double (* df) (double x, void * params);
+ void (* fdf) (double x, void * params, double * f, double * df);
+ void * params;
+};
+
+typedef struct gsl_function_fdf_struct gsl_function_fdf ;
+
+#define GSL_FN_FDF_EVAL_F(FDF,x) (*((FDF)->f))(x,(FDF)->params)
+#define GSL_FN_FDF_EVAL_DF(FDF,x) (*((FDF)->df))(x,(FDF)->params)
+#define GSL_FN_FDF_EVAL_F_DF(FDF,x,y,dy) (*((FDF)->fdf))(x,(FDF)->params,(y),(dy))
+
+
+/* Definition of an arbitrary vector-valued function with parameters */
+
+struct gsl_function_vec_struct
+{
+ int (* function) (double x, double y[], void * params);
+ void * params;
+};
+
+typedef struct gsl_function_vec_struct gsl_function_vec ;
+
+#define GSL_FN_VEC_EVAL(F,x,y) (*((F)->function))(x,y,(F)->params)
+
+__END_DECLS
+
+#endif /* __GSL_MATH_H__ */
diff --git a/thirdparty/includes/GSL/gsl/gsl_matrix.h b/thirdparty/includes/GSL/gsl/gsl_matrix.h
new file mode 100644
index 0000000..9b7ed76
--- /dev/null
+++ b/thirdparty/includes/GSL/gsl/gsl_matrix.h
@@ -0,0 +1,25 @@
+#ifndef __GSL_MATRIX_H__
+#define __GSL_MATRIX_H__
+
+#include
+#include
+#include
+
+#include
+#include
+#include
+
+#include
+#include
+
+#include
+#include
+
+#include
+#include
+
+#include
+#include
+
+
+#endif /* __GSL_MATRIX_H__ */
diff --git a/thirdparty/includes/GSL/gsl/gsl_matrix_char.h b/thirdparty/includes/GSL/gsl/gsl_matrix_char.h
new file mode 100644
index 0000000..1e6234a
--- /dev/null
+++ b/thirdparty/includes/GSL/gsl/gsl_matrix_char.h
@@ -0,0 +1,350 @@
+/* matrix/gsl_matrix_char.h
+ *
+ * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Gerard Jungman, Brian Gough
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GSL_MATRIX_CHAR_H__
+#define __GSL_MATRIX_CHAR_H__
+
+#include
+#include
+#include
+#include
+#include
+#include
+
+#undef __BEGIN_DECLS
+#undef __END_DECLS
+#ifdef __cplusplus
+# define __BEGIN_DECLS extern "C" {
+# define __END_DECLS }
+#else
+# define __BEGIN_DECLS /* empty */
+# define __END_DECLS /* empty */
+#endif
+
+__BEGIN_DECLS
+
+typedef struct
+{
+ size_t size1;
+ size_t size2;
+ size_t tda;
+ char * data;
+ gsl_block_char * block;
+ int owner;
+} gsl_matrix_char;
+
+typedef struct
+{
+ gsl_matrix_char matrix;
+} _gsl_matrix_char_view;
+
+typedef _gsl_matrix_char_view gsl_matrix_char_view;
+
+typedef struct
+{
+ gsl_matrix_char matrix;
+} _gsl_matrix_char_const_view;
+
+typedef const _gsl_matrix_char_const_view gsl_matrix_char_const_view;
+
+/* Allocation */
+
+gsl_matrix_char *
+gsl_matrix_char_alloc (const size_t n1, const size_t n2);
+
+gsl_matrix_char *
+gsl_matrix_char_calloc (const size_t n1, const size_t n2);
+
+gsl_matrix_char *
+gsl_matrix_char_alloc_from_block (gsl_block_char * b,
+ const size_t offset,
+ const size_t n1,
+ const size_t n2,
+ const size_t d2);
+
+gsl_matrix_char *
+gsl_matrix_char_alloc_from_matrix (gsl_matrix_char * m,
+ const size_t k1,
+ const size_t k2,
+ const size_t n1,
+ const size_t n2);
+
+gsl_vector_char *
+gsl_vector_char_alloc_row_from_matrix (gsl_matrix_char * m,
+ const size_t i);
+
+gsl_vector_char *
+gsl_vector_char_alloc_col_from_matrix (gsl_matrix_char * m,
+ const size_t j);
+
+void gsl_matrix_char_free (gsl_matrix_char * m);
+
+/* Views */
+
+_gsl_matrix_char_view
+gsl_matrix_char_submatrix (gsl_matrix_char * m,
+ const size_t i, const size_t j,
+ const size_t n1, const size_t n2);
+
+_gsl_vector_char_view
+gsl_matrix_char_row (gsl_matrix_char * m, const size_t i);
+
+_gsl_vector_char_view
+gsl_matrix_char_column (gsl_matrix_char * m, const size_t j);
+
+_gsl_vector_char_view
+gsl_matrix_char_diagonal (gsl_matrix_char * m);
+
+_gsl_vector_char_view
+gsl_matrix_char_subdiagonal (gsl_matrix_char * m, const size_t k);
+
+_gsl_vector_char_view
+gsl_matrix_char_superdiagonal (gsl_matrix_char * m, const size_t k);
+
+_gsl_vector_char_view
+gsl_matrix_char_subrow (gsl_matrix_char * m, const size_t i,
+ const size_t offset, const size_t n);
+
+_gsl_vector_char_view
+gsl_matrix_char_subcolumn (gsl_matrix_char * m, const size_t j,
+ const size_t offset, const size_t n);
+
+_gsl_matrix_char_view
+gsl_matrix_char_view_array (char * base,
+ const size_t n1,
+ const size_t n2);
+
+_gsl_matrix_char_view
+gsl_matrix_char_view_array_with_tda (char * base,
+ const size_t n1,
+ const size_t n2,
+ const size_t tda);
+
+
+_gsl_matrix_char_view
+gsl_matrix_char_view_vector (gsl_vector_char * v,
+ const size_t n1,
+ const size_t n2);
+
+_gsl_matrix_char_view
+gsl_matrix_char_view_vector_with_tda (gsl_vector_char * v,
+ const size_t n1,
+ const size_t n2,
+ const size_t tda);
+
+
+_gsl_matrix_char_const_view
+gsl_matrix_char_const_submatrix (const gsl_matrix_char * m,
+ const size_t i, const size_t j,
+ const size_t n1, const size_t n2);
+
+_gsl_vector_char_const_view
+gsl_matrix_char_const_row (const gsl_matrix_char * m,
+ const size_t i);
+
+_gsl_vector_char_const_view
+gsl_matrix_char_const_column (const gsl_matrix_char * m,
+ const size_t j);
+
+_gsl_vector_char_const_view
+gsl_matrix_char_const_diagonal (const gsl_matrix_char * m);
+
+_gsl_vector_char_const_view
+gsl_matrix_char_const_subdiagonal (const gsl_matrix_char * m,
+ const size_t k);
+
+_gsl_vector_char_const_view
+gsl_matrix_char_const_superdiagonal (const gsl_matrix_char * m,
+ const size_t k);
+
+_gsl_vector_char_const_view
+gsl_matrix_char_const_subrow (const gsl_matrix_char * m, const size_t i,
+ const size_t offset, const size_t n);
+
+_gsl_vector_char_const_view
+gsl_matrix_char_const_subcolumn (const gsl_matrix_char * m, const size_t j,
+ const size_t offset, const size_t n);
+
+_gsl_matrix_char_const_view
+gsl_matrix_char_const_view_array (const char * base,
+ const size_t n1,
+ const size_t n2);
+
+_gsl_matrix_char_const_view
+gsl_matrix_char_const_view_array_with_tda (const char * base,
+ const size_t n1,
+ const size_t n2,
+ const size_t tda);
+
+_gsl_matrix_char_const_view
+gsl_matrix_char_const_view_vector (const gsl_vector_char * v,
+ const size_t n1,
+ const size_t n2);
+
+_gsl_matrix_char_const_view
+gsl_matrix_char_const_view_vector_with_tda (const gsl_vector_char * v,
+ const size_t n1,
+ const size_t n2,
+ const size_t tda);
+
+/* Operations */
+
+void gsl_matrix_char_set_zero (gsl_matrix_char * m);
+void gsl_matrix_char_set_identity (gsl_matrix_char * m);
+void gsl_matrix_char_set_all (gsl_matrix_char * m, char x);
+
+int gsl_matrix_char_fread (FILE * stream, gsl_matrix_char * m) ;
+int gsl_matrix_char_fwrite (FILE * stream, const gsl_matrix_char * m) ;
+int gsl_matrix_char_fscanf (FILE * stream, gsl_matrix_char * m);
+int gsl_matrix_char_fprintf (FILE * stream, const gsl_matrix_char * m, const char * format);
+
+int gsl_matrix_char_memcpy(gsl_matrix_char * dest, const gsl_matrix_char * src);
+int gsl_matrix_char_swap(gsl_matrix_char * m1, gsl_matrix_char * m2);
+
+int gsl_matrix_char_swap_rows(gsl_matrix_char * m, const size_t i, const size_t j);
+int gsl_matrix_char_swap_columns(gsl_matrix_char * m, const size_t i, const size_t j);
+int gsl_matrix_char_swap_rowcol(gsl_matrix_char * m, const size_t i, const size_t j);
+int gsl_matrix_char_transpose (gsl_matrix_char * m);
+int gsl_matrix_char_transpose_memcpy (gsl_matrix_char * dest, const gsl_matrix_char * src);
+
+char gsl_matrix_char_max (const gsl_matrix_char * m);
+char gsl_matrix_char_min (const gsl_matrix_char * m);
+void gsl_matrix_char_minmax (const gsl_matrix_char * m, char * min_out, char * max_out);
+
+void gsl_matrix_char_max_index (const gsl_matrix_char * m, size_t * imax, size_t *jmax);
+void gsl_matrix_char_min_index (const gsl_matrix_char * m, size_t * imin, size_t *jmin);
+void gsl_matrix_char_minmax_index (const gsl_matrix_char * m, size_t * imin, size_t * jmin, size_t * imax, size_t * jmax);
+
+int gsl_matrix_char_equal (const gsl_matrix_char * a, const gsl_matrix_char * b);
+
+int gsl_matrix_char_isnull (const gsl_matrix_char * m);
+int gsl_matrix_char_ispos (const gsl_matrix_char * m);
+int gsl_matrix_char_isneg (const gsl_matrix_char * m);
+int gsl_matrix_char_isnonneg (const gsl_matrix_char * m);
+
+int gsl_matrix_char_add (gsl_matrix_char * a, const gsl_matrix_char * b);
+int gsl_matrix_char_sub (gsl_matrix_char * a, const gsl_matrix_char * b);
+int gsl_matrix_char_mul_elements (gsl_matrix_char * a, const gsl_matrix_char * b);
+int gsl_matrix_char_div_elements (gsl_matrix_char * a, const gsl_matrix_char * b);
+int gsl_matrix_char_scale (gsl_matrix_char * a, const double x);
+int gsl_matrix_char_add_constant (gsl_matrix_char * a, const double x);
+int gsl_matrix_char_add_diagonal (gsl_matrix_char * a, const double x);
+
+/***********************************************************************/
+/* The functions below are obsolete */
+/***********************************************************************/
+int gsl_matrix_char_get_row(gsl_vector_char * v, const gsl_matrix_char * m, const size_t i);
+int gsl_matrix_char_get_col(gsl_vector_char * v, const gsl_matrix_char * m, const size_t j);
+int gsl_matrix_char_set_row(gsl_matrix_char * m, const size_t i, const gsl_vector_char * v);
+int gsl_matrix_char_set_col(gsl_matrix_char * m, const size_t j, const gsl_vector_char * v);
+/***********************************************************************/
+
+/* inline functions if you are using GCC */
+
+INLINE_DECL char gsl_matrix_char_get(const gsl_matrix_char * m, const size_t i, const size_t j);
+INLINE_DECL void gsl_matrix_char_set(gsl_matrix_char * m, const size_t i, const size_t j, const char x);
+INLINE_DECL char * gsl_matrix_char_ptr(gsl_matrix_char * m, const size_t i, const size_t j);
+INLINE_DECL const char * gsl_matrix_char_const_ptr(const gsl_matrix_char * m, const size_t i, const size_t j);
+
+#ifdef HAVE_INLINE
+INLINE_FUN
+char
+gsl_matrix_char_get(const gsl_matrix_char * m, const size_t i, const size_t j)
+{
+#if GSL_RANGE_CHECK
+ if (GSL_RANGE_COND(1))
+ {
+ if (i >= m->size1)
+ {
+ GSL_ERROR_VAL("first index out of range", GSL_EINVAL, 0) ;
+ }
+ else if (j >= m->size2)
+ {
+ GSL_ERROR_VAL("second index out of range", GSL_EINVAL, 0) ;
+ }
+ }
+#endif
+ return m->data[i * m->tda + j] ;
+}
+
+INLINE_FUN
+void
+gsl_matrix_char_set(gsl_matrix_char * m, const size_t i, const size_t j, const char x)
+{
+#if GSL_RANGE_CHECK
+ if (GSL_RANGE_COND(1))
+ {
+ if (i >= m->size1)
+ {
+ GSL_ERROR_VOID("first index out of range", GSL_EINVAL) ;
+ }
+ else if (j >= m->size2)
+ {
+ GSL_ERROR_VOID("second index out of range", GSL_EINVAL) ;
+ }
+ }
+#endif
+ m->data[i * m->tda + j] = x ;
+}
+
+INLINE_FUN
+char *
+gsl_matrix_char_ptr(gsl_matrix_char * m, const size_t i, const size_t j)
+{
+#if GSL_RANGE_CHECK
+ if (GSL_RANGE_COND(1))
+ {
+ if (i >= m->size1)
+ {
+ GSL_ERROR_NULL("first index out of range", GSL_EINVAL) ;
+ }
+ else if (j >= m->size2)
+ {
+ GSL_ERROR_NULL("second index out of range", GSL_EINVAL) ;
+ }
+ }
+#endif
+ return (char *) (m->data + (i * m->tda + j)) ;
+}
+
+INLINE_FUN
+const char *
+gsl_matrix_char_const_ptr(const gsl_matrix_char * m, const size_t i, const size_t j)
+{
+#if GSL_RANGE_CHECK
+ if (GSL_RANGE_COND(1))
+ {
+ if (i >= m->size1)
+ {
+ GSL_ERROR_NULL("first index out of range", GSL_EINVAL) ;
+ }
+ else if (j >= m->size2)
+ {
+ GSL_ERROR_NULL("second index out of range", GSL_EINVAL) ;
+ }
+ }
+#endif
+ return (const char *) (m->data + (i * m->tda + j)) ;
+}
+
+#endif
+
+__END_DECLS
+
+#endif /* __GSL_MATRIX_CHAR_H__ */
diff --git a/thirdparty/includes/GSL/gsl/gsl_matrix_complex_double.h b/thirdparty/includes/GSL/gsl/gsl_matrix_complex_double.h
new file mode 100644
index 0000000..1564f7c
--- /dev/null
+++ b/thirdparty/includes/GSL/gsl/gsl_matrix_complex_double.h
@@ -0,0 +1,351 @@
+/* matrix/gsl_matrix_complex_double.h
+ *
+ * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Gerard Jungman, Brian Gough
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GSL_MATRIX_COMPLEX_DOUBLE_H__
+#define __GSL_MATRIX_COMPLEX_DOUBLE_H__
+
+#include
+#include
+#include
+#include
+#include
+#include
+
+#undef __BEGIN_DECLS
+#undef __END_DECLS
+#ifdef __cplusplus
+# define __BEGIN_DECLS extern "C" {
+# define __END_DECLS }
+#else
+# define __BEGIN_DECLS /* empty */
+# define __END_DECLS /* empty */
+#endif
+
+__BEGIN_DECLS
+
+typedef struct
+{
+ size_t size1;
+ size_t size2;
+ size_t tda;
+ double * data;
+ gsl_block_complex * block;
+ int owner;
+} gsl_matrix_complex ;
+
+typedef struct
+{
+ gsl_matrix_complex matrix;
+} _gsl_matrix_complex_view;
+
+typedef _gsl_matrix_complex_view gsl_matrix_complex_view;
+
+typedef struct
+{
+ gsl_matrix_complex matrix;
+} _gsl_matrix_complex_const_view;
+
+typedef const _gsl_matrix_complex_const_view gsl_matrix_complex_const_view;
+
+
+/* Allocation */
+
+gsl_matrix_complex *
+gsl_matrix_complex_alloc (const size_t n1, const size_t n2);
+
+gsl_matrix_complex *
+gsl_matrix_complex_calloc (const size_t n1, const size_t n2);
+
+gsl_matrix_complex *
+gsl_matrix_complex_alloc_from_block (gsl_block_complex * b,
+ const size_t offset,
+ const size_t n1, const size_t n2, const size_t d2);
+
+gsl_matrix_complex *
+gsl_matrix_complex_alloc_from_matrix (gsl_matrix_complex * b,
+ const size_t k1, const size_t k2,
+ const size_t n1, const size_t n2);
+
+gsl_vector_complex *
+gsl_vector_complex_alloc_row_from_matrix (gsl_matrix_complex * m,
+ const size_t i);
+
+gsl_vector_complex *
+gsl_vector_complex_alloc_col_from_matrix (gsl_matrix_complex * m,
+ const size_t j);
+
+void gsl_matrix_complex_free (gsl_matrix_complex * m);
+
+/* Views */
+
+_gsl_matrix_complex_view
+gsl_matrix_complex_submatrix (gsl_matrix_complex * m,
+ const size_t i, const size_t j,
+ const size_t n1, const size_t n2);
+
+_gsl_vector_complex_view
+gsl_matrix_complex_row (gsl_matrix_complex * m, const size_t i);
+
+_gsl_vector_complex_view
+gsl_matrix_complex_column (gsl_matrix_complex * m, const size_t j);
+
+_gsl_vector_complex_view
+gsl_matrix_complex_diagonal (gsl_matrix_complex * m);
+
+_gsl_vector_complex_view
+gsl_matrix_complex_subdiagonal (gsl_matrix_complex * m, const size_t k);
+
+_gsl_vector_complex_view
+gsl_matrix_complex_superdiagonal (gsl_matrix_complex * m, const size_t k);
+
+_gsl_vector_complex_view
+gsl_matrix_complex_subrow (gsl_matrix_complex * m,
+ const size_t i, const size_t offset,
+ const size_t n);
+
+_gsl_vector_complex_view
+gsl_matrix_complex_subcolumn (gsl_matrix_complex * m,
+ const size_t j, const size_t offset,
+ const size_t n);
+
+_gsl_matrix_complex_view
+gsl_matrix_complex_view_array (double * base,
+ const size_t n1,
+ const size_t n2);
+
+_gsl_matrix_complex_view
+gsl_matrix_complex_view_array_with_tda (double * base,
+ const size_t n1,
+ const size_t n2,
+ const size_t tda);
+
+_gsl_matrix_complex_view
+gsl_matrix_complex_view_vector (gsl_vector_complex * v,
+ const size_t n1,
+ const size_t n2);
+
+_gsl_matrix_complex_view
+gsl_matrix_complex_view_vector_with_tda (gsl_vector_complex * v,
+ const size_t n1,
+ const size_t n2,
+ const size_t tda);
+
+
+_gsl_matrix_complex_const_view
+gsl_matrix_complex_const_submatrix (const gsl_matrix_complex * m,
+ const size_t i, const size_t j,
+ const size_t n1, const size_t n2);
+
+_gsl_vector_complex_const_view
+gsl_matrix_complex_const_row (const gsl_matrix_complex * m,
+ const size_t i);
+
+_gsl_vector_complex_const_view
+gsl_matrix_complex_const_column (const gsl_matrix_complex * m,
+ const size_t j);
+
+_gsl_vector_complex_const_view
+gsl_matrix_complex_const_diagonal (const gsl_matrix_complex * m);
+
+_gsl_vector_complex_const_view
+gsl_matrix_complex_const_subdiagonal (const gsl_matrix_complex * m,
+ const size_t k);
+
+_gsl_vector_complex_const_view
+gsl_matrix_complex_const_superdiagonal (const gsl_matrix_complex * m,
+ const size_t k);
+
+_gsl_vector_complex_const_view
+gsl_matrix_complex_const_subrow (const gsl_matrix_complex * m,
+ const size_t i, const size_t offset,
+ const size_t n);
+
+_gsl_vector_complex_const_view
+gsl_matrix_complex_const_subcolumn (const gsl_matrix_complex * m,
+ const size_t j, const size_t offset,
+ const size_t n);
+
+_gsl_matrix_complex_const_view
+gsl_matrix_complex_const_view_array (const double * base,
+ const size_t n1,
+ const size_t n2);
+
+_gsl_matrix_complex_const_view
+gsl_matrix_complex_const_view_array_with_tda (const double * base,
+ const size_t n1,
+ const size_t n2,
+ const size_t tda);
+
+_gsl_matrix_complex_const_view
+gsl_matrix_complex_const_view_vector (const gsl_vector_complex * v,
+ const size_t n1,
+ const size_t n2);
+
+_gsl_matrix_complex_const_view
+gsl_matrix_complex_const_view_vector_with_tda (const gsl_vector_complex * v,
+ const size_t n1,
+ const size_t n2,
+ const size_t tda);
+
+/* Operations */
+
+void gsl_matrix_complex_set_zero (gsl_matrix_complex * m);
+void gsl_matrix_complex_set_identity (gsl_matrix_complex * m);
+void gsl_matrix_complex_set_all (gsl_matrix_complex * m, gsl_complex x);
+
+int gsl_matrix_complex_fread (FILE * stream, gsl_matrix_complex * m) ;
+int gsl_matrix_complex_fwrite (FILE * stream, const gsl_matrix_complex * m) ;
+int gsl_matrix_complex_fscanf (FILE * stream, gsl_matrix_complex * m);
+int gsl_matrix_complex_fprintf (FILE * stream, const gsl_matrix_complex * m, const char * format);
+
+int gsl_matrix_complex_memcpy(gsl_matrix_complex * dest, const gsl_matrix_complex * src);
+int gsl_matrix_complex_swap(gsl_matrix_complex * m1, gsl_matrix_complex * m2);
+
+int gsl_matrix_complex_swap_rows(gsl_matrix_complex * m, const size_t i, const size_t j);
+int gsl_matrix_complex_swap_columns(gsl_matrix_complex * m, const size_t i, const size_t j);
+int gsl_matrix_complex_swap_rowcol(gsl_matrix_complex * m, const size_t i, const size_t j);
+
+int gsl_matrix_complex_transpose (gsl_matrix_complex * m);
+int gsl_matrix_complex_transpose_memcpy (gsl_matrix_complex * dest, const gsl_matrix_complex * src);
+
+int gsl_matrix_complex_equal (const gsl_matrix_complex * a, const gsl_matrix_complex * b);
+
+int gsl_matrix_complex_isnull (const gsl_matrix_complex * m);
+int gsl_matrix_complex_ispos (const gsl_matrix_complex * m);
+int gsl_matrix_complex_isneg (const gsl_matrix_complex * m);
+int gsl_matrix_complex_isnonneg (const gsl_matrix_complex * m);
+
+int gsl_matrix_complex_add (gsl_matrix_complex * a, const gsl_matrix_complex * b);
+int gsl_matrix_complex_sub (gsl_matrix_complex * a, const gsl_matrix_complex * b);
+int gsl_matrix_complex_mul_elements (gsl_matrix_complex * a, const gsl_matrix_complex * b);
+int gsl_matrix_complex_div_elements (gsl_matrix_complex * a, const gsl_matrix_complex * b);
+int gsl_matrix_complex_scale (gsl_matrix_complex * a, const gsl_complex x);
+int gsl_matrix_complex_add_constant (gsl_matrix_complex * a, const gsl_complex x);
+int gsl_matrix_complex_add_diagonal (gsl_matrix_complex * a, const gsl_complex x);
+
+/***********************************************************************/
+/* The functions below are obsolete */
+/***********************************************************************/
+int gsl_matrix_complex_get_row(gsl_vector_complex * v, const gsl_matrix_complex * m, const size_t i);
+int gsl_matrix_complex_get_col(gsl_vector_complex * v, const gsl_matrix_complex * m, const size_t j);
+int gsl_matrix_complex_set_row(gsl_matrix_complex * m, const size_t i, const gsl_vector_complex * v);
+int gsl_matrix_complex_set_col(gsl_matrix_complex * m, const size_t j, const gsl_vector_complex * v);
+/***********************************************************************/
+
+/* inline functions if you are using GCC */
+
+INLINE_DECL gsl_complex gsl_matrix_complex_get(const gsl_matrix_complex * m, const size_t i, const size_t j);
+INLINE_DECL void gsl_matrix_complex_set(gsl_matrix_complex * m, const size_t i, const size_t j, const gsl_complex x);
+
+INLINE_DECL gsl_complex * gsl_matrix_complex_ptr(gsl_matrix_complex * m, const size_t i, const size_t j);
+INLINE_DECL const gsl_complex * gsl_matrix_complex_const_ptr(const gsl_matrix_complex * m, const size_t i, const size_t j);
+
+#ifdef HAVE_INLINE
+
+INLINE_FUN
+gsl_complex
+gsl_matrix_complex_get(const gsl_matrix_complex * m,
+ const size_t i, const size_t j)
+{
+#if GSL_RANGE_CHECK
+ if (GSL_RANGE_COND(1))
+ {
+ gsl_complex zero = {{0,0}};
+
+ if (i >= m->size1)
+ {
+ GSL_ERROR_VAL("first index out of range", GSL_EINVAL, zero) ;
+ }
+ else if (j >= m->size2)
+ {
+ GSL_ERROR_VAL("second index out of range", GSL_EINVAL, zero) ;
+ }
+ }
+#endif
+ return *(gsl_complex *)(m->data + 2*(i * m->tda + j)) ;
+}
+
+INLINE_FUN
+void
+gsl_matrix_complex_set(gsl_matrix_complex * m,
+ const size_t i, const size_t j, const gsl_complex x)
+{
+#if GSL_RANGE_CHECK
+ if (GSL_RANGE_COND(1))
+ {
+ if (i >= m->size1)
+ {
+ GSL_ERROR_VOID("first index out of range", GSL_EINVAL) ;
+ }
+ else if (j >= m->size2)
+ {
+ GSL_ERROR_VOID("second index out of range", GSL_EINVAL) ;
+ }
+ }
+#endif
+ *(gsl_complex *)(m->data + 2*(i * m->tda + j)) = x ;
+}
+
+INLINE_FUN
+gsl_complex *
+gsl_matrix_complex_ptr(gsl_matrix_complex * m,
+ const size_t i, const size_t j)
+{
+#if GSL_RANGE_CHECK
+ if (GSL_RANGE_COND(1))
+ {
+ if (i >= m->size1)
+ {
+ GSL_ERROR_NULL("first index out of range", GSL_EINVAL) ;
+ }
+ else if (j >= m->size2)
+ {
+ GSL_ERROR_NULL("second index out of range", GSL_EINVAL) ;
+ }
+ }
+#endif
+ return (gsl_complex *)(m->data + 2*(i * m->tda + j)) ;
+}
+
+INLINE_FUN
+const gsl_complex *
+gsl_matrix_complex_const_ptr(const gsl_matrix_complex * m,
+ const size_t i, const size_t j)
+{
+#if GSL_RANGE_CHECK
+ if (GSL_RANGE_COND(1))
+ {
+ if (i >= m->size1)
+ {
+ GSL_ERROR_NULL("first index out of range", GSL_EINVAL) ;
+ }
+ else if (j >= m->size2)
+ {
+ GSL_ERROR_NULL("second index out of range", GSL_EINVAL) ;
+ }
+ }
+#endif
+ return (const gsl_complex *)(m->data + 2*(i * m->tda + j)) ;
+}
+
+#endif /* HAVE_INLINE */
+
+__END_DECLS
+
+#endif /* __GSL_MATRIX_COMPLEX_DOUBLE_H__ */
diff --git a/thirdparty/includes/GSL/gsl/gsl_matrix_complex_float.h b/thirdparty/includes/GSL/gsl/gsl_matrix_complex_float.h
new file mode 100644
index 0000000..807ace4
--- /dev/null
+++ b/thirdparty/includes/GSL/gsl/gsl_matrix_complex_float.h
@@ -0,0 +1,351 @@
+/* matrix/gsl_matrix_complex_float.h
+ *
+ * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Gerard Jungman, Brian Gough
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GSL_MATRIX_COMPLEX_FLOAT_H__
+#define __GSL_MATRIX_COMPLEX_FLOAT_H__
+
+#include
+#include
+#include
+#include
+#include
+#include
+
+#undef __BEGIN_DECLS
+#undef __END_DECLS
+#ifdef __cplusplus
+# define __BEGIN_DECLS extern "C" {
+# define __END_DECLS }
+#else
+# define __BEGIN_DECLS /* empty */
+# define __END_DECLS /* empty */
+#endif
+
+__BEGIN_DECLS
+
+typedef struct
+{
+ size_t size1;
+ size_t size2;
+ size_t tda;
+ float * data;
+ gsl_block_complex_float * block;
+ int owner;
+} gsl_matrix_complex_float ;
+
+typedef struct
+{
+ gsl_matrix_complex_float matrix;
+} _gsl_matrix_complex_float_view;
+
+typedef _gsl_matrix_complex_float_view gsl_matrix_complex_float_view;
+
+typedef struct
+{
+ gsl_matrix_complex_float matrix;
+} _gsl_matrix_complex_float_const_view;
+
+typedef const _gsl_matrix_complex_float_const_view gsl_matrix_complex_float_const_view;
+
+
+/* Allocation */
+
+gsl_matrix_complex_float *
+gsl_matrix_complex_float_alloc (const size_t n1, const size_t n2);
+
+gsl_matrix_complex_float *
+gsl_matrix_complex_float_calloc (const size_t n1, const size_t n2);
+
+gsl_matrix_complex_float *
+gsl_matrix_complex_float_alloc_from_block (gsl_block_complex_float * b,
+ const size_t offset,
+ const size_t n1, const size_t n2, const size_t d2);
+
+gsl_matrix_complex_float *
+gsl_matrix_complex_float_alloc_from_matrix (gsl_matrix_complex_float * b,
+ const size_t k1, const size_t k2,
+ const size_t n1, const size_t n2);
+
+gsl_vector_complex_float *
+gsl_vector_complex_float_alloc_row_from_matrix (gsl_matrix_complex_float * m,
+ const size_t i);
+
+gsl_vector_complex_float *
+gsl_vector_complex_float_alloc_col_from_matrix (gsl_matrix_complex_float * m,
+ const size_t j);
+
+void gsl_matrix_complex_float_free (gsl_matrix_complex_float * m);
+
+/* Views */
+
+_gsl_matrix_complex_float_view
+gsl_matrix_complex_float_submatrix (gsl_matrix_complex_float * m,
+ const size_t i, const size_t j,
+ const size_t n1, const size_t n2);
+
+_gsl_vector_complex_float_view
+gsl_matrix_complex_float_row (gsl_matrix_complex_float * m, const size_t i);
+
+_gsl_vector_complex_float_view
+gsl_matrix_complex_float_column (gsl_matrix_complex_float * m, const size_t j);
+
+_gsl_vector_complex_float_view
+gsl_matrix_complex_float_diagonal (gsl_matrix_complex_float * m);
+
+_gsl_vector_complex_float_view
+gsl_matrix_complex_float_subdiagonal (gsl_matrix_complex_float * m, const size_t k);
+
+_gsl_vector_complex_float_view
+gsl_matrix_complex_float_superdiagonal (gsl_matrix_complex_float * m, const size_t k);
+
+_gsl_vector_complex_float_view
+gsl_matrix_complex_float_subrow (gsl_matrix_complex_float * m,
+ const size_t i, const size_t offset,
+ const size_t n);
+
+_gsl_vector_complex_float_view
+gsl_matrix_complex_float_subcolumn (gsl_matrix_complex_float * m,
+ const size_t j, const size_t offset,
+ const size_t n);
+
+_gsl_matrix_complex_float_view
+gsl_matrix_complex_float_view_array (float * base,
+ const size_t n1,
+ const size_t n2);
+
+_gsl_matrix_complex_float_view
+gsl_matrix_complex_float_view_array_with_tda (float * base,
+ const size_t n1,
+ const size_t n2,
+ const size_t tda);
+
+_gsl_matrix_complex_float_view
+gsl_matrix_complex_float_view_vector (gsl_vector_complex_float * v,
+ const size_t n1,
+ const size_t n2);
+
+_gsl_matrix_complex_float_view
+gsl_matrix_complex_float_view_vector_with_tda (gsl_vector_complex_float * v,
+ const size_t n1,
+ const size_t n2,
+ const size_t tda);
+
+
+_gsl_matrix_complex_float_const_view
+gsl_matrix_complex_float_const_submatrix (const gsl_matrix_complex_float * m,
+ const size_t i, const size_t j,
+ const size_t n1, const size_t n2);
+
+_gsl_vector_complex_float_const_view
+gsl_matrix_complex_float_const_row (const gsl_matrix_complex_float * m,
+ const size_t i);
+
+_gsl_vector_complex_float_const_view
+gsl_matrix_complex_float_const_column (const gsl_matrix_complex_float * m,
+ const size_t j);
+
+_gsl_vector_complex_float_const_view
+gsl_matrix_complex_float_const_diagonal (const gsl_matrix_complex_float * m);
+
+_gsl_vector_complex_float_const_view
+gsl_matrix_complex_float_const_subdiagonal (const gsl_matrix_complex_float * m,
+ const size_t k);
+
+_gsl_vector_complex_float_const_view
+gsl_matrix_complex_float_const_superdiagonal (const gsl_matrix_complex_float * m,
+ const size_t k);
+
+_gsl_vector_complex_float_const_view
+gsl_matrix_complex_float_const_subrow (const gsl_matrix_complex_float * m,
+ const size_t i, const size_t offset,
+ const size_t n);
+
+_gsl_vector_complex_float_const_view
+gsl_matrix_complex_float_const_subcolumn (const gsl_matrix_complex_float * m,
+ const size_t j, const size_t offset,
+ const size_t n);
+
+_gsl_matrix_complex_float_const_view
+gsl_matrix_complex_float_const_view_array (const float * base,
+ const size_t n1,
+ const size_t n2);
+
+_gsl_matrix_complex_float_const_view
+gsl_matrix_complex_float_const_view_array_with_tda (const float * base,
+ const size_t n1,
+ const size_t n2,
+ const size_t tda);
+
+_gsl_matrix_complex_float_const_view
+gsl_matrix_complex_float_const_view_vector (const gsl_vector_complex_float * v,
+ const size_t n1,
+ const size_t n2);
+
+_gsl_matrix_complex_float_const_view
+gsl_matrix_complex_float_const_view_vector_with_tda (const gsl_vector_complex_float * v,
+ const size_t n1,
+ const size_t n2,
+ const size_t tda);
+
+/* Operations */
+
+void gsl_matrix_complex_float_set_zero (gsl_matrix_complex_float * m);
+void gsl_matrix_complex_float_set_identity (gsl_matrix_complex_float * m);
+void gsl_matrix_complex_float_set_all (gsl_matrix_complex_float * m, gsl_complex_float x);
+
+int gsl_matrix_complex_float_fread (FILE * stream, gsl_matrix_complex_float * m) ;
+int gsl_matrix_complex_float_fwrite (FILE * stream, const gsl_matrix_complex_float * m) ;
+int gsl_matrix_complex_float_fscanf (FILE * stream, gsl_matrix_complex_float * m);
+int gsl_matrix_complex_float_fprintf (FILE * stream, const gsl_matrix_complex_float * m, const char * format);
+
+int gsl_matrix_complex_float_memcpy(gsl_matrix_complex_float * dest, const gsl_matrix_complex_float * src);
+int gsl_matrix_complex_float_swap(gsl_matrix_complex_float * m1, gsl_matrix_complex_float * m2);
+
+int gsl_matrix_complex_float_swap_rows(gsl_matrix_complex_float * m, const size_t i, const size_t j);
+int gsl_matrix_complex_float_swap_columns(gsl_matrix_complex_float * m, const size_t i, const size_t j);
+int gsl_matrix_complex_float_swap_rowcol(gsl_matrix_complex_float * m, const size_t i, const size_t j);
+
+int gsl_matrix_complex_float_transpose (gsl_matrix_complex_float * m);
+int gsl_matrix_complex_float_transpose_memcpy (gsl_matrix_complex_float * dest, const gsl_matrix_complex_float * src);
+
+int gsl_matrix_complex_float_equal (const gsl_matrix_complex_float * a, const gsl_matrix_complex_float * b);
+
+int gsl_matrix_complex_float_isnull (const gsl_matrix_complex_float * m);
+int gsl_matrix_complex_float_ispos (const gsl_matrix_complex_float * m);
+int gsl_matrix_complex_float_isneg (const gsl_matrix_complex_float * m);
+int gsl_matrix_complex_float_isnonneg (const gsl_matrix_complex_float * m);
+
+int gsl_matrix_complex_float_add (gsl_matrix_complex_float * a, const gsl_matrix_complex_float * b);
+int gsl_matrix_complex_float_sub (gsl_matrix_complex_float * a, const gsl_matrix_complex_float * b);
+int gsl_matrix_complex_float_mul_elements (gsl_matrix_complex_float * a, const gsl_matrix_complex_float * b);
+int gsl_matrix_complex_float_div_elements (gsl_matrix_complex_float * a, const gsl_matrix_complex_float * b);
+int gsl_matrix_complex_float_scale (gsl_matrix_complex_float * a, const gsl_complex_float x);
+int gsl_matrix_complex_float_add_constant (gsl_matrix_complex_float * a, const gsl_complex_float x);
+int gsl_matrix_complex_float_add_diagonal (gsl_matrix_complex_float * a, const gsl_complex_float x);
+
+/***********************************************************************/
+/* The functions below are obsolete */
+/***********************************************************************/
+int gsl_matrix_complex_float_get_row(gsl_vector_complex_float * v, const gsl_matrix_complex_float * m, const size_t i);
+int gsl_matrix_complex_float_get_col(gsl_vector_complex_float * v, const gsl_matrix_complex_float * m, const size_t j);
+int gsl_matrix_complex_float_set_row(gsl_matrix_complex_float * m, const size_t i, const gsl_vector_complex_float * v);
+int gsl_matrix_complex_float_set_col(gsl_matrix_complex_float * m, const size_t j, const gsl_vector_complex_float * v);
+/***********************************************************************/
+
+/* inline functions if you are using GCC */
+
+INLINE_DECL gsl_complex_float gsl_matrix_complex_float_get(const gsl_matrix_complex_float * m, const size_t i, const size_t j);
+INLINE_DECL void gsl_matrix_complex_float_set(gsl_matrix_complex_float * m, const size_t i, const size_t j, const gsl_complex_float x);
+
+INLINE_DECL gsl_complex_float * gsl_matrix_complex_float_ptr(gsl_matrix_complex_float * m, const size_t i, const size_t j);
+INLINE_DECL const gsl_complex_float * gsl_matrix_complex_float_const_ptr(const gsl_matrix_complex_float * m, const size_t i, const size_t j);
+
+#ifdef HAVE_INLINE
+
+INLINE_FUN
+gsl_complex_float
+gsl_matrix_complex_float_get(const gsl_matrix_complex_float * m,
+ const size_t i, const size_t j)
+{
+#if GSL_RANGE_CHECK
+ if (GSL_RANGE_COND(1))
+ {
+ gsl_complex_float zero = {{0,0}};
+
+ if (i >= m->size1)
+ {
+ GSL_ERROR_VAL("first index out of range", GSL_EINVAL, zero) ;
+ }
+ else if (j >= m->size2)
+ {
+ GSL_ERROR_VAL("second index out of range", GSL_EINVAL, zero) ;
+ }
+ }
+#endif
+ return *(gsl_complex_float *)(m->data + 2*(i * m->tda + j)) ;
+}
+
+INLINE_FUN
+void
+gsl_matrix_complex_float_set(gsl_matrix_complex_float * m,
+ const size_t i, const size_t j, const gsl_complex_float x)
+{
+#if GSL_RANGE_CHECK
+ if (GSL_RANGE_COND(1))
+ {
+ if (i >= m->size1)
+ {
+ GSL_ERROR_VOID("first index out of range", GSL_EINVAL) ;
+ }
+ else if (j >= m->size2)
+ {
+ GSL_ERROR_VOID("second index out of range", GSL_EINVAL) ;
+ }
+ }
+#endif
+ *(gsl_complex_float *)(m->data + 2*(i * m->tda + j)) = x ;
+}
+
+INLINE_FUN
+gsl_complex_float *
+gsl_matrix_complex_float_ptr(gsl_matrix_complex_float * m,
+ const size_t i, const size_t j)
+{
+#if GSL_RANGE_CHECK
+ if (GSL_RANGE_COND(1))
+ {
+ if (i >= m->size1)
+ {
+ GSL_ERROR_NULL("first index out of range", GSL_EINVAL) ;
+ }
+ else if (j >= m->size2)
+ {
+ GSL_ERROR_NULL("second index out of range", GSL_EINVAL) ;
+ }
+ }
+#endif
+ return (gsl_complex_float *)(m->data + 2*(i * m->tda + j)) ;
+}
+
+INLINE_FUN
+const gsl_complex_float *
+gsl_matrix_complex_float_const_ptr(const gsl_matrix_complex_float * m,
+ const size_t i, const size_t j)
+{
+#if GSL_RANGE_CHECK
+ if (GSL_RANGE_COND(1))
+ {
+ if (i >= m->size1)
+ {
+ GSL_ERROR_NULL("first index out of range", GSL_EINVAL) ;
+ }
+ else if (j >= m->size2)
+ {
+ GSL_ERROR_NULL("second index out of range", GSL_EINVAL) ;
+ }
+ }
+#endif
+ return (const gsl_complex_float *)(m->data + 2*(i * m->tda + j)) ;
+}
+
+#endif /* HAVE_INLINE */
+
+__END_DECLS
+
+#endif /* __GSL_MATRIX_COMPLEX_FLOAT_H__ */
diff --git a/thirdparty/includes/GSL/gsl/gsl_matrix_complex_long_double.h b/thirdparty/includes/GSL/gsl/gsl_matrix_complex_long_double.h
new file mode 100644
index 0000000..b68ccb6
--- /dev/null
+++ b/thirdparty/includes/GSL/gsl/gsl_matrix_complex_long_double.h
@@ -0,0 +1,351 @@
+/* matrix/gsl_matrix_complex_long_double.h
+ *
+ * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Gerard Jungman, Brian Gough
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GSL_MATRIX_COMPLEX_LONG_DOUBLE_H__
+#define __GSL_MATRIX_COMPLEX_LONG_DOUBLE_H__
+
+#include
+#include
+#include
+#include
+#include
+#include
+
+#undef __BEGIN_DECLS
+#undef __END_DECLS
+#ifdef __cplusplus
+# define __BEGIN_DECLS extern "C" {
+# define __END_DECLS }
+#else
+# define __BEGIN_DECLS /* empty */
+# define __END_DECLS /* empty */
+#endif
+
+__BEGIN_DECLS
+
+typedef struct
+{
+ size_t size1;
+ size_t size2;
+ size_t tda;
+ long double * data;
+ gsl_block_complex_long_double * block;
+ int owner;
+} gsl_matrix_complex_long_double ;
+
+typedef struct
+{
+ gsl_matrix_complex_long_double matrix;
+} _gsl_matrix_complex_long_double_view;
+
+typedef _gsl_matrix_complex_long_double_view gsl_matrix_complex_long_double_view;
+
+typedef struct
+{
+ gsl_matrix_complex_long_double matrix;
+} _gsl_matrix_complex_long_double_const_view;
+
+typedef const _gsl_matrix_complex_long_double_const_view gsl_matrix_complex_long_double_const_view;
+
+
+/* Allocation */
+
+gsl_matrix_complex_long_double *
+gsl_matrix_complex_long_double_alloc (const size_t n1, const size_t n2);
+
+gsl_matrix_complex_long_double *
+gsl_matrix_complex_long_double_calloc (const size_t n1, const size_t n2);
+
+gsl_matrix_complex_long_double *
+gsl_matrix_complex_long_double_alloc_from_block (gsl_block_complex_long_double * b,
+ const size_t offset,
+ const size_t n1, const size_t n2, const size_t d2);
+
+gsl_matrix_complex_long_double *
+gsl_matrix_complex_long_double_alloc_from_matrix (gsl_matrix_complex_long_double * b,
+ const size_t k1, const size_t k2,
+ const size_t n1, const size_t n2);
+
+gsl_vector_complex_long_double *
+gsl_vector_complex_long_double_alloc_row_from_matrix (gsl_matrix_complex_long_double * m,
+ const size_t i);
+
+gsl_vector_complex_long_double *
+gsl_vector_complex_long_double_alloc_col_from_matrix (gsl_matrix_complex_long_double * m,
+ const size_t j);
+
+void gsl_matrix_complex_long_double_free (gsl_matrix_complex_long_double * m);
+
+/* Views */
+
+_gsl_matrix_complex_long_double_view
+gsl_matrix_complex_long_double_submatrix (gsl_matrix_complex_long_double * m,
+ const size_t i, const size_t j,
+ const size_t n1, const size_t n2);
+
+_gsl_vector_complex_long_double_view
+gsl_matrix_complex_long_double_row (gsl_matrix_complex_long_double * m, const size_t i);
+
+_gsl_vector_complex_long_double_view
+gsl_matrix_complex_long_double_column (gsl_matrix_complex_long_double * m, const size_t j);
+
+_gsl_vector_complex_long_double_view
+gsl_matrix_complex_long_double_diagonal (gsl_matrix_complex_long_double * m);
+
+_gsl_vector_complex_long_double_view
+gsl_matrix_complex_long_double_subdiagonal (gsl_matrix_complex_long_double * m, const size_t k);
+
+_gsl_vector_complex_long_double_view
+gsl_matrix_complex_long_double_superdiagonal (gsl_matrix_complex_long_double * m, const size_t k);
+
+_gsl_vector_complex_long_double_view
+gsl_matrix_complex_long_double_subrow (gsl_matrix_complex_long_double * m,
+ const size_t i, const size_t offset,
+ const size_t n);
+
+_gsl_vector_complex_long_double_view
+gsl_matrix_complex_long_double_subcolumn (gsl_matrix_complex_long_double * m,
+ const size_t j, const size_t offset,
+ const size_t n);
+
+_gsl_matrix_complex_long_double_view
+gsl_matrix_complex_long_double_view_array (long double * base,
+ const size_t n1,
+ const size_t n2);
+
+_gsl_matrix_complex_long_double_view
+gsl_matrix_complex_long_double_view_array_with_tda (long double * base,
+ const size_t n1,
+ const size_t n2,
+ const size_t tda);
+
+_gsl_matrix_complex_long_double_view
+gsl_matrix_complex_long_double_view_vector (gsl_vector_complex_long_double * v,
+ const size_t n1,
+ const size_t n2);
+
+_gsl_matrix_complex_long_double_view
+gsl_matrix_complex_long_double_view_vector_with_tda (gsl_vector_complex_long_double * v,
+ const size_t n1,
+ const size_t n2,
+ const size_t tda);
+
+
+_gsl_matrix_complex_long_double_const_view
+gsl_matrix_complex_long_double_const_submatrix (const gsl_matrix_complex_long_double * m,
+ const size_t i, const size_t j,
+ const size_t n1, const size_t n2);
+
+_gsl_vector_complex_long_double_const_view
+gsl_matrix_complex_long_double_const_row (const gsl_matrix_complex_long_double * m,
+ const size_t i);
+
+_gsl_vector_complex_long_double_const_view
+gsl_matrix_complex_long_double_const_column (const gsl_matrix_complex_long_double * m,
+ const size_t j);
+
+_gsl_vector_complex_long_double_const_view
+gsl_matrix_complex_long_double_const_diagonal (const gsl_matrix_complex_long_double * m);
+
+_gsl_vector_complex_long_double_const_view
+gsl_matrix_complex_long_double_const_subdiagonal (const gsl_matrix_complex_long_double * m,
+ const size_t k);
+
+_gsl_vector_complex_long_double_const_view
+gsl_matrix_complex_long_double_const_superdiagonal (const gsl_matrix_complex_long_double * m,
+ const size_t k);
+
+_gsl_vector_complex_long_double_const_view
+gsl_matrix_complex_long_double_const_subrow (const gsl_matrix_complex_long_double * m,
+ const size_t i, const size_t offset,
+ const size_t n);
+
+_gsl_vector_complex_long_double_const_view
+gsl_matrix_complex_long_double_const_subcolumn (const gsl_matrix_complex_long_double * m,
+ const size_t j, const size_t offset,
+ const size_t n);
+
+_gsl_matrix_complex_long_double_const_view
+gsl_matrix_complex_long_double_const_view_array (const long double * base,
+ const size_t n1,
+ const size_t n2);
+
+_gsl_matrix_complex_long_double_const_view
+gsl_matrix_complex_long_double_const_view_array_with_tda (const long double * base,
+ const size_t n1,
+ const size_t n2,
+ const size_t tda);
+
+_gsl_matrix_complex_long_double_const_view
+gsl_matrix_complex_long_double_const_view_vector (const gsl_vector_complex_long_double * v,
+ const size_t n1,
+ const size_t n2);
+
+_gsl_matrix_complex_long_double_const_view
+gsl_matrix_complex_long_double_const_view_vector_with_tda (const gsl_vector_complex_long_double * v,
+ const size_t n1,
+ const size_t n2,
+ const size_t tda);
+
+/* Operations */
+
+void gsl_matrix_complex_long_double_set_zero (gsl_matrix_complex_long_double * m);
+void gsl_matrix_complex_long_double_set_identity (gsl_matrix_complex_long_double * m);
+void gsl_matrix_complex_long_double_set_all (gsl_matrix_complex_long_double * m, gsl_complex_long_double x);
+
+int gsl_matrix_complex_long_double_fread (FILE * stream, gsl_matrix_complex_long_double * m) ;
+int gsl_matrix_complex_long_double_fwrite (FILE * stream, const gsl_matrix_complex_long_double * m) ;
+int gsl_matrix_complex_long_double_fscanf (FILE * stream, gsl_matrix_complex_long_double * m);
+int gsl_matrix_complex_long_double_fprintf (FILE * stream, const gsl_matrix_complex_long_double * m, const char * format);
+
+int gsl_matrix_complex_long_double_memcpy(gsl_matrix_complex_long_double * dest, const gsl_matrix_complex_long_double * src);
+int gsl_matrix_complex_long_double_swap(gsl_matrix_complex_long_double * m1, gsl_matrix_complex_long_double * m2);
+
+int gsl_matrix_complex_long_double_swap_rows(gsl_matrix_complex_long_double * m, const size_t i, const size_t j);
+int gsl_matrix_complex_long_double_swap_columns(gsl_matrix_complex_long_double * m, const size_t i, const size_t j);
+int gsl_matrix_complex_long_double_swap_rowcol(gsl_matrix_complex_long_double * m, const size_t i, const size_t j);
+
+int gsl_matrix_complex_long_double_transpose (gsl_matrix_complex_long_double * m);
+int gsl_matrix_complex_long_double_transpose_memcpy (gsl_matrix_complex_long_double * dest, const gsl_matrix_complex_long_double * src);
+
+int gsl_matrix_complex_long_double_equal (const gsl_matrix_complex_long_double * a, const gsl_matrix_complex_long_double * b);
+
+int gsl_matrix_complex_long_double_isnull (const gsl_matrix_complex_long_double * m);
+int gsl_matrix_complex_long_double_ispos (const gsl_matrix_complex_long_double * m);
+int gsl_matrix_complex_long_double_isneg (const gsl_matrix_complex_long_double * m);
+int gsl_matrix_complex_long_double_isnonneg (const gsl_matrix_complex_long_double * m);
+
+int gsl_matrix_complex_long_double_add (gsl_matrix_complex_long_double * a, const gsl_matrix_complex_long_double * b);
+int gsl_matrix_complex_long_double_sub (gsl_matrix_complex_long_double * a, const gsl_matrix_complex_long_double * b);
+int gsl_matrix_complex_long_double_mul_elements (gsl_matrix_complex_long_double * a, const gsl_matrix_complex_long_double * b);
+int gsl_matrix_complex_long_double_div_elements (gsl_matrix_complex_long_double * a, const gsl_matrix_complex_long_double * b);
+int gsl_matrix_complex_long_double_scale (gsl_matrix_complex_long_double * a, const gsl_complex_long_double x);
+int gsl_matrix_complex_long_double_add_constant (gsl_matrix_complex_long_double * a, const gsl_complex_long_double x);
+int gsl_matrix_complex_long_double_add_diagonal (gsl_matrix_complex_long_double * a, const gsl_complex_long_double x);
+
+/***********************************************************************/
+/* The functions below are obsolete */
+/***********************************************************************/
+int gsl_matrix_complex_long_double_get_row(gsl_vector_complex_long_double * v, const gsl_matrix_complex_long_double * m, const size_t i);
+int gsl_matrix_complex_long_double_get_col(gsl_vector_complex_long_double * v, const gsl_matrix_complex_long_double * m, const size_t j);
+int gsl_matrix_complex_long_double_set_row(gsl_matrix_complex_long_double * m, const size_t i, const gsl_vector_complex_long_double * v);
+int gsl_matrix_complex_long_double_set_col(gsl_matrix_complex_long_double * m, const size_t j, const gsl_vector_complex_long_double * v);
+/***********************************************************************/
+
+/* inline functions if you are using GCC */
+
+INLINE_DECL gsl_complex_long_double gsl_matrix_complex_long_double_get(const gsl_matrix_complex_long_double * m, const size_t i, const size_t j);
+INLINE_DECL void gsl_matrix_complex_long_double_set(gsl_matrix_complex_long_double * m, const size_t i, const size_t j, const gsl_complex_long_double x);
+
+INLINE_DECL gsl_complex_long_double * gsl_matrix_complex_long_double_ptr(gsl_matrix_complex_long_double * m, const size_t i, const size_t j);
+INLINE_DECL const gsl_complex_long_double * gsl_matrix_complex_long_double_const_ptr(const gsl_matrix_complex_long_double * m, const size_t i, const size_t j);
+
+#ifdef HAVE_INLINE
+
+INLINE_FUN
+gsl_complex_long_double
+gsl_matrix_complex_long_double_get(const gsl_matrix_complex_long_double * m,
+ const size_t i, const size_t j)
+{
+#if GSL_RANGE_CHECK
+ if (GSL_RANGE_COND(1))
+ {
+ gsl_complex_long_double zero = {{0,0}};
+
+ if (i >= m->size1)
+ {
+ GSL_ERROR_VAL("first index out of range", GSL_EINVAL, zero) ;
+ }
+ else if (j >= m->size2)
+ {
+ GSL_ERROR_VAL("second index out of range", GSL_EINVAL, zero) ;
+ }
+ }
+#endif
+ return *(gsl_complex_long_double *)(m->data + 2*(i * m->tda + j)) ;
+}
+
+INLINE_FUN
+void
+gsl_matrix_complex_long_double_set(gsl_matrix_complex_long_double * m,
+ const size_t i, const size_t j, const gsl_complex_long_double x)
+{
+#if GSL_RANGE_CHECK
+ if (GSL_RANGE_COND(1))
+ {
+ if (i >= m->size1)
+ {
+ GSL_ERROR_VOID("first index out of range", GSL_EINVAL) ;
+ }
+ else if (j >= m->size2)
+ {
+ GSL_ERROR_VOID("second index out of range", GSL_EINVAL) ;
+ }
+ }
+#endif
+ *(gsl_complex_long_double *)(m->data + 2*(i * m->tda + j)) = x ;
+}
+
+INLINE_FUN
+gsl_complex_long_double *
+gsl_matrix_complex_long_double_ptr(gsl_matrix_complex_long_double * m,
+ const size_t i, const size_t j)
+{
+#if GSL_RANGE_CHECK
+ if (GSL_RANGE_COND(1))
+ {
+ if (i >= m->size1)
+ {
+ GSL_ERROR_NULL("first index out of range", GSL_EINVAL) ;
+ }
+ else if (j >= m->size2)
+ {
+ GSL_ERROR_NULL("second index out of range", GSL_EINVAL) ;
+ }
+ }
+#endif
+ return (gsl_complex_long_double *)(m->data + 2*(i * m->tda + j)) ;
+}
+
+INLINE_FUN
+const gsl_complex_long_double *
+gsl_matrix_complex_long_double_const_ptr(const gsl_matrix_complex_long_double * m,
+ const size_t i, const size_t j)
+{
+#if GSL_RANGE_CHECK
+ if (GSL_RANGE_COND(1))
+ {
+ if (i >= m->size1)
+ {
+ GSL_ERROR_NULL("first index out of range", GSL_EINVAL) ;
+ }
+ else if (j >= m->size2)
+ {
+ GSL_ERROR_NULL("second index out of range", GSL_EINVAL) ;
+ }
+ }
+#endif
+ return (const gsl_complex_long_double *)(m->data + 2*(i * m->tda + j)) ;
+}
+
+#endif /* HAVE_INLINE */
+
+__END_DECLS
+
+#endif /* __GSL_MATRIX_COMPLEX_LONG_DOUBLE_H__ */
diff --git a/thirdparty/includes/GSL/gsl/gsl_matrix_double.h b/thirdparty/includes/GSL/gsl/gsl_matrix_double.h
new file mode 100644
index 0000000..6356695
--- /dev/null
+++ b/thirdparty/includes/GSL/gsl/gsl_matrix_double.h
@@ -0,0 +1,350 @@
+/* matrix/gsl_matrix_double.h
+ *
+ * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Gerard Jungman, Brian Gough
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GSL_MATRIX_DOUBLE_H__
+#define __GSL_MATRIX_DOUBLE_H__
+
+#include
+#include
+#include
+#include
+#include
+#include
+
+#undef __BEGIN_DECLS
+#undef __END_DECLS
+#ifdef __cplusplus
+# define __BEGIN_DECLS extern "C" {
+# define __END_DECLS }
+#else
+# define __BEGIN_DECLS /* empty */
+# define __END_DECLS /* empty */
+#endif
+
+__BEGIN_DECLS
+
+typedef struct
+{
+ size_t size1;
+ size_t size2;
+ size_t tda;
+ double * data;
+ gsl_block * block;
+ int owner;
+} gsl_matrix;
+
+typedef struct
+{
+ gsl_matrix matrix;
+} _gsl_matrix_view;
+
+typedef _gsl_matrix_view gsl_matrix_view;
+
+typedef struct
+{
+ gsl_matrix matrix;
+} _gsl_matrix_const_view;
+
+typedef const _gsl_matrix_const_view gsl_matrix_const_view;
+
+/* Allocation */
+
+gsl_matrix *
+gsl_matrix_alloc (const size_t n1, const size_t n2);
+
+gsl_matrix *
+gsl_matrix_calloc (const size_t n1, const size_t n2);
+
+gsl_matrix *
+gsl_matrix_alloc_from_block (gsl_block * b,
+ const size_t offset,
+ const size_t n1,
+ const size_t n2,
+ const size_t d2);
+
+gsl_matrix *
+gsl_matrix_alloc_from_matrix (gsl_matrix * m,
+ const size_t k1,
+ const size_t k2,
+ const size_t n1,
+ const size_t n2);
+
+gsl_vector *
+gsl_vector_alloc_row_from_matrix (gsl_matrix * m,
+ const size_t i);
+
+gsl_vector *
+gsl_vector_alloc_col_from_matrix (gsl_matrix * m,
+ const size_t j);
+
+void gsl_matrix_free (gsl_matrix * m);
+
+/* Views */
+
+_gsl_matrix_view
+gsl_matrix_submatrix (gsl_matrix * m,
+ const size_t i, const size_t j,
+ const size_t n1, const size_t n2);
+
+_gsl_vector_view
+gsl_matrix_row (gsl_matrix * m, const size_t i);
+
+_gsl_vector_view
+gsl_matrix_column (gsl_matrix * m, const size_t j);
+
+_gsl_vector_view
+gsl_matrix_diagonal (gsl_matrix * m);
+
+_gsl_vector_view
+gsl_matrix_subdiagonal (gsl_matrix * m, const size_t k);
+
+_gsl_vector_view
+gsl_matrix_superdiagonal (gsl_matrix * m, const size_t k);
+
+_gsl_vector_view
+gsl_matrix_subrow (gsl_matrix * m, const size_t i,
+ const size_t offset, const size_t n);
+
+_gsl_vector_view
+gsl_matrix_subcolumn (gsl_matrix * m, const size_t j,
+ const size_t offset, const size_t n);
+
+_gsl_matrix_view
+gsl_matrix_view_array (double * base,
+ const size_t n1,
+ const size_t n2);
+
+_gsl_matrix_view
+gsl_matrix_view_array_with_tda (double * base,
+ const size_t n1,
+ const size_t n2,
+ const size_t tda);
+
+
+_gsl_matrix_view
+gsl_matrix_view_vector (gsl_vector * v,
+ const size_t n1,
+ const size_t n2);
+
+_gsl_matrix_view
+gsl_matrix_view_vector_with_tda (gsl_vector * v,
+ const size_t n1,
+ const size_t n2,
+ const size_t tda);
+
+
+_gsl_matrix_const_view
+gsl_matrix_const_submatrix (const gsl_matrix * m,
+ const size_t i, const size_t j,
+ const size_t n1, const size_t n2);
+
+_gsl_vector_const_view
+gsl_matrix_const_row (const gsl_matrix * m,
+ const size_t i);
+
+_gsl_vector_const_view
+gsl_matrix_const_column (const gsl_matrix * m,
+ const size_t j);
+
+_gsl_vector_const_view
+gsl_matrix_const_diagonal (const gsl_matrix * m);
+
+_gsl_vector_const_view
+gsl_matrix_const_subdiagonal (const gsl_matrix * m,
+ const size_t k);
+
+_gsl_vector_const_view
+gsl_matrix_const_superdiagonal (const gsl_matrix * m,
+ const size_t k);
+
+_gsl_vector_const_view
+gsl_matrix_const_subrow (const gsl_matrix * m, const size_t i,
+ const size_t offset, const size_t n);
+
+_gsl_vector_const_view
+gsl_matrix_const_subcolumn (const gsl_matrix * m, const size_t j,
+ const size_t offset, const size_t n);
+
+_gsl_matrix_const_view
+gsl_matrix_const_view_array (const double * base,
+ const size_t n1,
+ const size_t n2);
+
+_gsl_matrix_const_view
+gsl_matrix_const_view_array_with_tda (const double * base,
+ const size_t n1,
+ const size_t n2,
+ const size_t tda);
+
+_gsl_matrix_const_view
+gsl_matrix_const_view_vector (const gsl_vector * v,
+ const size_t n1,
+ const size_t n2);
+
+_gsl_matrix_const_view
+gsl_matrix_const_view_vector_with_tda (const gsl_vector * v,
+ const size_t n1,
+ const size_t n2,
+ const size_t tda);
+
+/* Operations */
+
+void gsl_matrix_set_zero (gsl_matrix * m);
+void gsl_matrix_set_identity (gsl_matrix * m);
+void gsl_matrix_set_all (gsl_matrix * m, double x);
+
+int gsl_matrix_fread (FILE * stream, gsl_matrix * m) ;
+int gsl_matrix_fwrite (FILE * stream, const gsl_matrix * m) ;
+int gsl_matrix_fscanf (FILE * stream, gsl_matrix * m);
+int gsl_matrix_fprintf (FILE * stream, const gsl_matrix * m, const char * format);
+
+int gsl_matrix_memcpy(gsl_matrix * dest, const gsl_matrix * src);
+int gsl_matrix_swap(gsl_matrix * m1, gsl_matrix * m2);
+
+int gsl_matrix_swap_rows(gsl_matrix * m, const size_t i, const size_t j);
+int gsl_matrix_swap_columns(gsl_matrix * m, const size_t i, const size_t j);
+int gsl_matrix_swap_rowcol(gsl_matrix * m, const size_t i, const size_t j);
+int gsl_matrix_transpose (gsl_matrix * m);
+int gsl_matrix_transpose_memcpy (gsl_matrix * dest, const gsl_matrix * src);
+
+double gsl_matrix_max (const gsl_matrix * m);
+double gsl_matrix_min (const gsl_matrix * m);
+void gsl_matrix_minmax (const gsl_matrix * m, double * min_out, double * max_out);
+
+void gsl_matrix_max_index (const gsl_matrix * m, size_t * imax, size_t *jmax);
+void gsl_matrix_min_index (const gsl_matrix * m, size_t * imin, size_t *jmin);
+void gsl_matrix_minmax_index (const gsl_matrix * m, size_t * imin, size_t * jmin, size_t * imax, size_t * jmax);
+
+int gsl_matrix_equal (const gsl_matrix * a, const gsl_matrix * b);
+
+int gsl_matrix_isnull (const gsl_matrix * m);
+int gsl_matrix_ispos (const gsl_matrix * m);
+int gsl_matrix_isneg (const gsl_matrix * m);
+int gsl_matrix_isnonneg (const gsl_matrix * m);
+
+int gsl_matrix_add (gsl_matrix * a, const gsl_matrix * b);
+int gsl_matrix_sub (gsl_matrix * a, const gsl_matrix * b);
+int gsl_matrix_mul_elements (gsl_matrix * a, const gsl_matrix * b);
+int gsl_matrix_div_elements (gsl_matrix * a, const gsl_matrix * b);
+int gsl_matrix_scale (gsl_matrix * a, const double x);
+int gsl_matrix_add_constant (gsl_matrix * a, const double x);
+int gsl_matrix_add_diagonal (gsl_matrix * a, const double x);
+
+/***********************************************************************/
+/* The functions below are obsolete */
+/***********************************************************************/
+int gsl_matrix_get_row(gsl_vector * v, const gsl_matrix * m, const size_t i);
+int gsl_matrix_get_col(gsl_vector * v, const gsl_matrix * m, const size_t j);
+int gsl_matrix_set_row(gsl_matrix * m, const size_t i, const gsl_vector * v);
+int gsl_matrix_set_col(gsl_matrix * m, const size_t j, const gsl_vector * v);
+/***********************************************************************/
+
+/* inline functions if you are using GCC */
+
+INLINE_DECL double gsl_matrix_get(const gsl_matrix * m, const size_t i, const size_t j);
+INLINE_DECL void gsl_matrix_set(gsl_matrix * m, const size_t i, const size_t j, const double x);
+INLINE_DECL double * gsl_matrix_ptr(gsl_matrix * m, const size_t i, const size_t j);
+INLINE_DECL const double * gsl_matrix_const_ptr(const gsl_matrix * m, const size_t i, const size_t j);
+
+#ifdef HAVE_INLINE
+INLINE_FUN
+double
+gsl_matrix_get(const gsl_matrix * m, const size_t i, const size_t j)
+{
+#if GSL_RANGE_CHECK
+ if (GSL_RANGE_COND(1))
+ {
+ if (i >= m->size1)
+ {
+ GSL_ERROR_VAL("first index out of range", GSL_EINVAL, 0) ;
+ }
+ else if (j >= m->size2)
+ {
+ GSL_ERROR_VAL("second index out of range", GSL_EINVAL, 0) ;
+ }
+ }
+#endif
+ return m->data[i * m->tda + j] ;
+}
+
+INLINE_FUN
+void
+gsl_matrix_set(gsl_matrix * m, const size_t i, const size_t j, const double x)
+{
+#if GSL_RANGE_CHECK
+ if (GSL_RANGE_COND(1))
+ {
+ if (i >= m->size1)
+ {
+ GSL_ERROR_VOID("first index out of range", GSL_EINVAL) ;
+ }
+ else if (j >= m->size2)
+ {
+ GSL_ERROR_VOID("second index out of range", GSL_EINVAL) ;
+ }
+ }
+#endif
+ m->data[i * m->tda + j] = x ;
+}
+
+INLINE_FUN
+double *
+gsl_matrix_ptr(gsl_matrix * m, const size_t i, const size_t j)
+{
+#if GSL_RANGE_CHECK
+ if (GSL_RANGE_COND(1))
+ {
+ if (i >= m->size1)
+ {
+ GSL_ERROR_NULL("first index out of range", GSL_EINVAL) ;
+ }
+ else if (j >= m->size2)
+ {
+ GSL_ERROR_NULL("second index out of range", GSL_EINVAL) ;
+ }
+ }
+#endif
+ return (double *) (m->data + (i * m->tda + j)) ;
+}
+
+INLINE_FUN
+const double *
+gsl_matrix_const_ptr(const gsl_matrix * m, const size_t i, const size_t j)
+{
+#if GSL_RANGE_CHECK
+ if (GSL_RANGE_COND(1))
+ {
+ if (i >= m->size1)
+ {
+ GSL_ERROR_NULL("first index out of range", GSL_EINVAL) ;
+ }
+ else if (j >= m->size2)
+ {
+ GSL_ERROR_NULL("second index out of range", GSL_EINVAL) ;
+ }
+ }
+#endif
+ return (const double *) (m->data + (i * m->tda + j)) ;
+}
+
+#endif
+
+__END_DECLS
+
+#endif /* __GSL_MATRIX_DOUBLE_H__ */
diff --git a/thirdparty/includes/GSL/gsl/gsl_matrix_float.h b/thirdparty/includes/GSL/gsl/gsl_matrix_float.h
new file mode 100644
index 0000000..a91114c
--- /dev/null
+++ b/thirdparty/includes/GSL/gsl/gsl_matrix_float.h
@@ -0,0 +1,350 @@
+/* matrix/gsl_matrix_float.h
+ *
+ * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Gerard Jungman, Brian Gough
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GSL_MATRIX_FLOAT_H__
+#define __GSL_MATRIX_FLOAT_H__
+
+#include
+#include
+#include
+#include
+#include
+#include
+
+#undef __BEGIN_DECLS
+#undef __END_DECLS
+#ifdef __cplusplus
+# define __BEGIN_DECLS extern "C" {
+# define __END_DECLS }
+#else
+# define __BEGIN_DECLS /* empty */
+# define __END_DECLS /* empty */
+#endif
+
+__BEGIN_DECLS
+
+typedef struct
+{
+ size_t size1;
+ size_t size2;
+ size_t tda;
+ float * data;
+ gsl_block_float * block;
+ int owner;
+} gsl_matrix_float;
+
+typedef struct
+{
+ gsl_matrix_float matrix;
+} _gsl_matrix_float_view;
+
+typedef _gsl_matrix_float_view gsl_matrix_float_view;
+
+typedef struct
+{
+ gsl_matrix_float matrix;
+} _gsl_matrix_float_const_view;
+
+typedef const _gsl_matrix_float_const_view gsl_matrix_float_const_view;
+
+/* Allocation */
+
+gsl_matrix_float *
+gsl_matrix_float_alloc (const size_t n1, const size_t n2);
+
+gsl_matrix_float *
+gsl_matrix_float_calloc (const size_t n1, const size_t n2);
+
+gsl_matrix_float *
+gsl_matrix_float_alloc_from_block (gsl_block_float * b,
+ const size_t offset,
+ const size_t n1,
+ const size_t n2,
+ const size_t d2);
+
+gsl_matrix_float *
+gsl_matrix_float_alloc_from_matrix (gsl_matrix_float * m,
+ const size_t k1,
+ const size_t k2,
+ const size_t n1,
+ const size_t n2);
+
+gsl_vector_float *
+gsl_vector_float_alloc_row_from_matrix (gsl_matrix_float * m,
+ const size_t i);
+
+gsl_vector_float *
+gsl_vector_float_alloc_col_from_matrix (gsl_matrix_float * m,
+ const size_t j);
+
+void gsl_matrix_float_free (gsl_matrix_float * m);
+
+/* Views */
+
+_gsl_matrix_float_view
+gsl_matrix_float_submatrix (gsl_matrix_float * m,
+ const size_t i, const size_t j,
+ const size_t n1, const size_t n2);
+
+_gsl_vector_float_view
+gsl_matrix_float_row (gsl_matrix_float * m, const size_t i);
+
+_gsl_vector_float_view
+gsl_matrix_float_column (gsl_matrix_float * m, const size_t j);
+
+_gsl_vector_float_view
+gsl_matrix_float_diagonal (gsl_matrix_float * m);
+
+_gsl_vector_float_view
+gsl_matrix_float_subdiagonal (gsl_matrix_float * m, const size_t k);
+
+_gsl_vector_float_view
+gsl_matrix_float_superdiagonal (gsl_matrix_float * m, const size_t k);
+
+_gsl_vector_float_view
+gsl_matrix_float_subrow (gsl_matrix_float * m, const size_t i,
+ const size_t offset, const size_t n);
+
+_gsl_vector_float_view
+gsl_matrix_float_subcolumn (gsl_matrix_float * m, const size_t j,
+ const size_t offset, const size_t n);
+
+_gsl_matrix_float_view
+gsl_matrix_float_view_array (float * base,
+ const size_t n1,
+ const size_t n2);
+
+_gsl_matrix_float_view
+gsl_matrix_float_view_array_with_tda (float * base,
+ const size_t n1,
+ const size_t n2,
+ const size_t tda);
+
+
+_gsl_matrix_float_view
+gsl_matrix_float_view_vector (gsl_vector_float * v,
+ const size_t n1,
+ const size_t n2);
+
+_gsl_matrix_float_view
+gsl_matrix_float_view_vector_with_tda (gsl_vector_float * v,
+ const size_t n1,
+ const size_t n2,
+ const size_t tda);
+
+
+_gsl_matrix_float_const_view
+gsl_matrix_float_const_submatrix (const gsl_matrix_float * m,
+ const size_t i, const size_t j,
+ const size_t n1, const size_t n2);
+
+_gsl_vector_float_const_view
+gsl_matrix_float_const_row (const gsl_matrix_float * m,
+ const size_t i);
+
+_gsl_vector_float_const_view
+gsl_matrix_float_const_column (const gsl_matrix_float * m,
+ const size_t j);
+
+_gsl_vector_float_const_view
+gsl_matrix_float_const_diagonal (const gsl_matrix_float * m);
+
+_gsl_vector_float_const_view
+gsl_matrix_float_const_subdiagonal (const gsl_matrix_float * m,
+ const size_t k);
+
+_gsl_vector_float_const_view
+gsl_matrix_float_const_superdiagonal (const gsl_matrix_float * m,
+ const size_t k);
+
+_gsl_vector_float_const_view
+gsl_matrix_float_const_subrow (const gsl_matrix_float * m, const size_t i,
+ const size_t offset, const size_t n);
+
+_gsl_vector_float_const_view
+gsl_matrix_float_const_subcolumn (const gsl_matrix_float * m, const size_t j,
+ const size_t offset, const size_t n);
+
+_gsl_matrix_float_const_view
+gsl_matrix_float_const_view_array (const float * base,
+ const size_t n1,
+ const size_t n2);
+
+_gsl_matrix_float_const_view
+gsl_matrix_float_const_view_array_with_tda (const float * base,
+ const size_t n1,
+ const size_t n2,
+ const size_t tda);
+
+_gsl_matrix_float_const_view
+gsl_matrix_float_const_view_vector (const gsl_vector_float * v,
+ const size_t n1,
+ const size_t n2);
+
+_gsl_matrix_float_const_view
+gsl_matrix_float_const_view_vector_with_tda (const gsl_vector_float * v,
+ const size_t n1,
+ const size_t n2,
+ const size_t tda);
+
+/* Operations */
+
+void gsl_matrix_float_set_zero (gsl_matrix_float * m);
+void gsl_matrix_float_set_identity (gsl_matrix_float * m);
+void gsl_matrix_float_set_all (gsl_matrix_float * m, float x);
+
+int gsl_matrix_float_fread (FILE * stream, gsl_matrix_float * m) ;
+int gsl_matrix_float_fwrite (FILE * stream, const gsl_matrix_float * m) ;
+int gsl_matrix_float_fscanf (FILE * stream, gsl_matrix_float * m);
+int gsl_matrix_float_fprintf (FILE * stream, const gsl_matrix_float * m, const char * format);
+
+int gsl_matrix_float_memcpy(gsl_matrix_float * dest, const gsl_matrix_float * src);
+int gsl_matrix_float_swap(gsl_matrix_float * m1, gsl_matrix_float * m2);
+
+int gsl_matrix_float_swap_rows(gsl_matrix_float * m, const size_t i, const size_t j);
+int gsl_matrix_float_swap_columns(gsl_matrix_float * m, const size_t i, const size_t j);
+int gsl_matrix_float_swap_rowcol(gsl_matrix_float * m, const size_t i, const size_t j);
+int gsl_matrix_float_transpose (gsl_matrix_float * m);
+int gsl_matrix_float_transpose_memcpy (gsl_matrix_float * dest, const gsl_matrix_float * src);
+
+float gsl_matrix_float_max (const gsl_matrix_float * m);
+float gsl_matrix_float_min (const gsl_matrix_float * m);
+void gsl_matrix_float_minmax (const gsl_matrix_float * m, float * min_out, float * max_out);
+
+void gsl_matrix_float_max_index (const gsl_matrix_float * m, size_t * imax, size_t *jmax);
+void gsl_matrix_float_min_index (const gsl_matrix_float * m, size_t * imin, size_t *jmin);
+void gsl_matrix_float_minmax_index (const gsl_matrix_float * m, size_t * imin, size_t * jmin, size_t * imax, size_t * jmax);
+
+int gsl_matrix_float_equal (const gsl_matrix_float * a, const gsl_matrix_float * b);
+
+int gsl_matrix_float_isnull (const gsl_matrix_float * m);
+int gsl_matrix_float_ispos (const gsl_matrix_float * m);
+int gsl_matrix_float_isneg (const gsl_matrix_float * m);
+int gsl_matrix_float_isnonneg (const gsl_matrix_float * m);
+
+int gsl_matrix_float_add (gsl_matrix_float * a, const gsl_matrix_float * b);
+int gsl_matrix_float_sub (gsl_matrix_float * a, const gsl_matrix_float * b);
+int gsl_matrix_float_mul_elements (gsl_matrix_float * a, const gsl_matrix_float * b);
+int gsl_matrix_float_div_elements (gsl_matrix_float * a, const gsl_matrix_float * b);
+int gsl_matrix_float_scale (gsl_matrix_float * a, const double x);
+int gsl_matrix_float_add_constant (gsl_matrix_float * a, const double x);
+int gsl_matrix_float_add_diagonal (gsl_matrix_float * a, const double x);
+
+/***********************************************************************/
+/* The functions below are obsolete */
+/***********************************************************************/
+int gsl_matrix_float_get_row(gsl_vector_float * v, const gsl_matrix_float * m, const size_t i);
+int gsl_matrix_float_get_col(gsl_vector_float * v, const gsl_matrix_float * m, const size_t j);
+int gsl_matrix_float_set_row(gsl_matrix_float * m, const size_t i, const gsl_vector_float * v);
+int gsl_matrix_float_set_col(gsl_matrix_float * m, const size_t j, const gsl_vector_float * v);
+/***********************************************************************/
+
+/* inline functions if you are using GCC */
+
+INLINE_DECL float gsl_matrix_float_get(const gsl_matrix_float * m, const size_t i, const size_t j);
+INLINE_DECL void gsl_matrix_float_set(gsl_matrix_float * m, const size_t i, const size_t j, const float x);
+INLINE_DECL float * gsl_matrix_float_ptr(gsl_matrix_float * m, const size_t i, const size_t j);
+INLINE_DECL const float * gsl_matrix_float_const_ptr(const gsl_matrix_float * m, const size_t i, const size_t j);
+
+#ifdef HAVE_INLINE
+INLINE_FUN
+float
+gsl_matrix_float_get(const gsl_matrix_float * m, const size_t i, const size_t j)
+{
+#if GSL_RANGE_CHECK
+ if (GSL_RANGE_COND(1))
+ {
+ if (i >= m->size1)
+ {
+ GSL_ERROR_VAL("first index out of range", GSL_EINVAL, 0) ;
+ }
+ else if (j >= m->size2)
+ {
+ GSL_ERROR_VAL("second index out of range", GSL_EINVAL, 0) ;
+ }
+ }
+#endif
+ return m->data[i * m->tda + j] ;
+}
+
+INLINE_FUN
+void
+gsl_matrix_float_set(gsl_matrix_float * m, const size_t i, const size_t j, const float x)
+{
+#if GSL_RANGE_CHECK
+ if (GSL_RANGE_COND(1))
+ {
+ if (i >= m->size1)
+ {
+ GSL_ERROR_VOID("first index out of range", GSL_EINVAL) ;
+ }
+ else if (j >= m->size2)
+ {
+ GSL_ERROR_VOID("second index out of range", GSL_EINVAL) ;
+ }
+ }
+#endif
+ m->data[i * m->tda + j] = x ;
+}
+
+INLINE_FUN
+float *
+gsl_matrix_float_ptr(gsl_matrix_float * m, const size_t i, const size_t j)
+{
+#if GSL_RANGE_CHECK
+ if (GSL_RANGE_COND(1))
+ {
+ if (i >= m->size1)
+ {
+ GSL_ERROR_NULL("first index out of range", GSL_EINVAL) ;
+ }
+ else if (j >= m->size2)
+ {
+ GSL_ERROR_NULL("second index out of range", GSL_EINVAL) ;
+ }
+ }
+#endif
+ return (float *) (m->data + (i * m->tda + j)) ;
+}
+
+INLINE_FUN
+const float *
+gsl_matrix_float_const_ptr(const gsl_matrix_float * m, const size_t i, const size_t j)
+{
+#if GSL_RANGE_CHECK
+ if (GSL_RANGE_COND(1))
+ {
+ if (i >= m->size1)
+ {
+ GSL_ERROR_NULL("first index out of range", GSL_EINVAL) ;
+ }
+ else if (j >= m->size2)
+ {
+ GSL_ERROR_NULL("second index out of range", GSL_EINVAL) ;
+ }
+ }
+#endif
+ return (const float *) (m->data + (i * m->tda + j)) ;
+}
+
+#endif
+
+__END_DECLS
+
+#endif /* __GSL_MATRIX_FLOAT_H__ */
diff --git a/thirdparty/includes/GSL/gsl/gsl_matrix_int.h b/thirdparty/includes/GSL/gsl/gsl_matrix_int.h
new file mode 100644
index 0000000..a9b04c1
--- /dev/null
+++ b/thirdparty/includes/GSL/gsl/gsl_matrix_int.h
@@ -0,0 +1,350 @@
+/* matrix/gsl_matrix_int.h
+ *
+ * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Gerard Jungman, Brian Gough
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GSL_MATRIX_INT_H__
+#define __GSL_MATRIX_INT_H__
+
+#include
+#include
+#include
+#include
+#include
+#include
+
+#undef __BEGIN_DECLS
+#undef __END_DECLS
+#ifdef __cplusplus
+# define __BEGIN_DECLS extern "C" {
+# define __END_DECLS }
+#else
+# define __BEGIN_DECLS /* empty */
+# define __END_DECLS /* empty */
+#endif
+
+__BEGIN_DECLS
+
+typedef struct
+{
+ size_t size1;
+ size_t size2;
+ size_t tda;
+ int * data;
+ gsl_block_int * block;
+ int owner;
+} gsl_matrix_int;
+
+typedef struct
+{
+ gsl_matrix_int matrix;
+} _gsl_matrix_int_view;
+
+typedef _gsl_matrix_int_view gsl_matrix_int_view;
+
+typedef struct
+{
+ gsl_matrix_int matrix;
+} _gsl_matrix_int_const_view;
+
+typedef const _gsl_matrix_int_const_view gsl_matrix_int_const_view;
+
+/* Allocation */
+
+gsl_matrix_int *
+gsl_matrix_int_alloc (const size_t n1, const size_t n2);
+
+gsl_matrix_int *
+gsl_matrix_int_calloc (const size_t n1, const size_t n2);
+
+gsl_matrix_int *
+gsl_matrix_int_alloc_from_block (gsl_block_int * b,
+ const size_t offset,
+ const size_t n1,
+ const size_t n2,
+ const size_t d2);
+
+gsl_matrix_int *
+gsl_matrix_int_alloc_from_matrix (gsl_matrix_int * m,
+ const size_t k1,
+ const size_t k2,
+ const size_t n1,
+ const size_t n2);
+
+gsl_vector_int *
+gsl_vector_int_alloc_row_from_matrix (gsl_matrix_int * m,
+ const size_t i);
+
+gsl_vector_int *
+gsl_vector_int_alloc_col_from_matrix (gsl_matrix_int * m,
+ const size_t j);
+
+void gsl_matrix_int_free (gsl_matrix_int * m);
+
+/* Views */
+
+_gsl_matrix_int_view
+gsl_matrix_int_submatrix (gsl_matrix_int * m,
+ const size_t i, const size_t j,
+ const size_t n1, const size_t n2);
+
+_gsl_vector_int_view
+gsl_matrix_int_row (gsl_matrix_int * m, const size_t i);
+
+_gsl_vector_int_view
+gsl_matrix_int_column (gsl_matrix_int * m, const size_t j);
+
+_gsl_vector_int_view
+gsl_matrix_int_diagonal (gsl_matrix_int * m);
+
+_gsl_vector_int_view
+gsl_matrix_int_subdiagonal (gsl_matrix_int * m, const size_t k);
+
+_gsl_vector_int_view
+gsl_matrix_int_superdiagonal (gsl_matrix_int * m, const size_t k);
+
+_gsl_vector_int_view
+gsl_matrix_int_subrow (gsl_matrix_int * m, const size_t i,
+ const size_t offset, const size_t n);
+
+_gsl_vector_int_view
+gsl_matrix_int_subcolumn (gsl_matrix_int * m, const size_t j,
+ const size_t offset, const size_t n);
+
+_gsl_matrix_int_view
+gsl_matrix_int_view_array (int * base,
+ const size_t n1,
+ const size_t n2);
+
+_gsl_matrix_int_view
+gsl_matrix_int_view_array_with_tda (int * base,
+ const size_t n1,
+ const size_t n2,
+ const size_t tda);
+
+
+_gsl_matrix_int_view
+gsl_matrix_int_view_vector (gsl_vector_int * v,
+ const size_t n1,
+ const size_t n2);
+
+_gsl_matrix_int_view
+gsl_matrix_int_view_vector_with_tda (gsl_vector_int * v,
+ const size_t n1,
+ const size_t n2,
+ const size_t tda);
+
+
+_gsl_matrix_int_const_view
+gsl_matrix_int_const_submatrix (const gsl_matrix_int * m,
+ const size_t i, const size_t j,
+ const size_t n1, const size_t n2);
+
+_gsl_vector_int_const_view
+gsl_matrix_int_const_row (const gsl_matrix_int * m,
+ const size_t i);
+
+_gsl_vector_int_const_view
+gsl_matrix_int_const_column (const gsl_matrix_int * m,
+ const size_t j);
+
+_gsl_vector_int_const_view
+gsl_matrix_int_const_diagonal (const gsl_matrix_int * m);
+
+_gsl_vector_int_const_view
+gsl_matrix_int_const_subdiagonal (const gsl_matrix_int * m,
+ const size_t k);
+
+_gsl_vector_int_const_view
+gsl_matrix_int_const_superdiagonal (const gsl_matrix_int * m,
+ const size_t k);
+
+_gsl_vector_int_const_view
+gsl_matrix_int_const_subrow (const gsl_matrix_int * m, const size_t i,
+ const size_t offset, const size_t n);
+
+_gsl_vector_int_const_view
+gsl_matrix_int_const_subcolumn (const gsl_matrix_int * m, const size_t j,
+ const size_t offset, const size_t n);
+
+_gsl_matrix_int_const_view
+gsl_matrix_int_const_view_array (const int * base,
+ const size_t n1,
+ const size_t n2);
+
+_gsl_matrix_int_const_view
+gsl_matrix_int_const_view_array_with_tda (const int * base,
+ const size_t n1,
+ const size_t n2,
+ const size_t tda);
+
+_gsl_matrix_int_const_view
+gsl_matrix_int_const_view_vector (const gsl_vector_int * v,
+ const size_t n1,
+ const size_t n2);
+
+_gsl_matrix_int_const_view
+gsl_matrix_int_const_view_vector_with_tda (const gsl_vector_int * v,
+ const size_t n1,
+ const size_t n2,
+ const size_t tda);
+
+/* Operations */
+
+void gsl_matrix_int_set_zero (gsl_matrix_int * m);
+void gsl_matrix_int_set_identity (gsl_matrix_int * m);
+void gsl_matrix_int_set_all (gsl_matrix_int * m, int x);
+
+int gsl_matrix_int_fread (FILE * stream, gsl_matrix_int * m) ;
+int gsl_matrix_int_fwrite (FILE * stream, const gsl_matrix_int * m) ;
+int gsl_matrix_int_fscanf (FILE * stream, gsl_matrix_int * m);
+int gsl_matrix_int_fprintf (FILE * stream, const gsl_matrix_int * m, const char * format);
+
+int gsl_matrix_int_memcpy(gsl_matrix_int * dest, const gsl_matrix_int * src);
+int gsl_matrix_int_swap(gsl_matrix_int * m1, gsl_matrix_int * m2);
+
+int gsl_matrix_int_swap_rows(gsl_matrix_int * m, const size_t i, const size_t j);
+int gsl_matrix_int_swap_columns(gsl_matrix_int * m, const size_t i, const size_t j);
+int gsl_matrix_int_swap_rowcol(gsl_matrix_int * m, const size_t i, const size_t j);
+int gsl_matrix_int_transpose (gsl_matrix_int * m);
+int gsl_matrix_int_transpose_memcpy (gsl_matrix_int * dest, const gsl_matrix_int * src);
+
+int gsl_matrix_int_max (const gsl_matrix_int * m);
+int gsl_matrix_int_min (const gsl_matrix_int * m);
+void gsl_matrix_int_minmax (const gsl_matrix_int * m, int * min_out, int * max_out);
+
+void gsl_matrix_int_max_index (const gsl_matrix_int * m, size_t * imax, size_t *jmax);
+void gsl_matrix_int_min_index (const gsl_matrix_int * m, size_t * imin, size_t *jmin);
+void gsl_matrix_int_minmax_index (const gsl_matrix_int * m, size_t * imin, size_t * jmin, size_t * imax, size_t * jmax);
+
+int gsl_matrix_int_equal (const gsl_matrix_int * a, const gsl_matrix_int * b);
+
+int gsl_matrix_int_isnull (const gsl_matrix_int * m);
+int gsl_matrix_int_ispos (const gsl_matrix_int * m);
+int gsl_matrix_int_isneg (const gsl_matrix_int * m);
+int gsl_matrix_int_isnonneg (const gsl_matrix_int * m);
+
+int gsl_matrix_int_add (gsl_matrix_int * a, const gsl_matrix_int * b);
+int gsl_matrix_int_sub (gsl_matrix_int * a, const gsl_matrix_int * b);
+int gsl_matrix_int_mul_elements (gsl_matrix_int * a, const gsl_matrix_int * b);
+int gsl_matrix_int_div_elements (gsl_matrix_int * a, const gsl_matrix_int * b);
+int gsl_matrix_int_scale (gsl_matrix_int * a, const double x);
+int gsl_matrix_int_add_constant (gsl_matrix_int * a, const double x);
+int gsl_matrix_int_add_diagonal (gsl_matrix_int * a, const double x);
+
+/***********************************************************************/
+/* The functions below are obsolete */
+/***********************************************************************/
+int gsl_matrix_int_get_row(gsl_vector_int * v, const gsl_matrix_int * m, const size_t i);
+int gsl_matrix_int_get_col(gsl_vector_int * v, const gsl_matrix_int * m, const size_t j);
+int gsl_matrix_int_set_row(gsl_matrix_int * m, const size_t i, const gsl_vector_int * v);
+int gsl_matrix_int_set_col(gsl_matrix_int * m, const size_t j, const gsl_vector_int * v);
+/***********************************************************************/
+
+/* inline functions if you are using GCC */
+
+INLINE_DECL int gsl_matrix_int_get(const gsl_matrix_int * m, const size_t i, const size_t j);
+INLINE_DECL void gsl_matrix_int_set(gsl_matrix_int * m, const size_t i, const size_t j, const int x);
+INLINE_DECL int * gsl_matrix_int_ptr(gsl_matrix_int * m, const size_t i, const size_t j);
+INLINE_DECL const int * gsl_matrix_int_const_ptr(const gsl_matrix_int * m, const size_t i, const size_t j);
+
+#ifdef HAVE_INLINE
+INLINE_FUN
+int
+gsl_matrix_int_get(const gsl_matrix_int * m, const size_t i, const size_t j)
+{
+#if GSL_RANGE_CHECK
+ if (GSL_RANGE_COND(1))
+ {
+ if (i >= m->size1)
+ {
+ GSL_ERROR_VAL("first index out of range", GSL_EINVAL, 0) ;
+ }
+ else if (j >= m->size2)
+ {
+ GSL_ERROR_VAL("second index out of range", GSL_EINVAL, 0) ;
+ }
+ }
+#endif
+ return m->data[i * m->tda + j] ;
+}
+
+INLINE_FUN
+void
+gsl_matrix_int_set(gsl_matrix_int * m, const size_t i, const size_t j, const int x)
+{
+#if GSL_RANGE_CHECK
+ if (GSL_RANGE_COND(1))
+ {
+ if (i >= m->size1)
+ {
+ GSL_ERROR_VOID("first index out of range", GSL_EINVAL) ;
+ }
+ else if (j >= m->size2)
+ {
+ GSL_ERROR_VOID("second index out of range", GSL_EINVAL) ;
+ }
+ }
+#endif
+ m->data[i * m->tda + j] = x ;
+}
+
+INLINE_FUN
+int *
+gsl_matrix_int_ptr(gsl_matrix_int * m, const size_t i, const size_t j)
+{
+#if GSL_RANGE_CHECK
+ if (GSL_RANGE_COND(1))
+ {
+ if (i >= m->size1)
+ {
+ GSL_ERROR_NULL("first index out of range", GSL_EINVAL) ;
+ }
+ else if (j >= m->size2)
+ {
+ GSL_ERROR_NULL("second index out of range", GSL_EINVAL) ;
+ }
+ }
+#endif
+ return (int *) (m->data + (i * m->tda + j)) ;
+}
+
+INLINE_FUN
+const int *
+gsl_matrix_int_const_ptr(const gsl_matrix_int * m, const size_t i, const size_t j)
+{
+#if GSL_RANGE_CHECK
+ if (GSL_RANGE_COND(1))
+ {
+ if (i >= m->size1)
+ {
+ GSL_ERROR_NULL("first index out of range", GSL_EINVAL) ;
+ }
+ else if (j >= m->size2)
+ {
+ GSL_ERROR_NULL("second index out of range", GSL_EINVAL) ;
+ }
+ }
+#endif
+ return (const int *) (m->data + (i * m->tda + j)) ;
+}
+
+#endif
+
+__END_DECLS
+
+#endif /* __GSL_MATRIX_INT_H__ */
diff --git a/thirdparty/includes/GSL/gsl/gsl_matrix_long.h b/thirdparty/includes/GSL/gsl/gsl_matrix_long.h
new file mode 100644
index 0000000..ff85a18
--- /dev/null
+++ b/thirdparty/includes/GSL/gsl/gsl_matrix_long.h
@@ -0,0 +1,350 @@
+/* matrix/gsl_matrix_long.h
+ *
+ * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Gerard Jungman, Brian Gough
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GSL_MATRIX_LONG_H__
+#define __GSL_MATRIX_LONG_H__
+
+#include
+#include
+#include
+#include
+#include
+#include
+
+#undef __BEGIN_DECLS
+#undef __END_DECLS
+#ifdef __cplusplus
+# define __BEGIN_DECLS extern "C" {
+# define __END_DECLS }
+#else
+# define __BEGIN_DECLS /* empty */
+# define __END_DECLS /* empty */
+#endif
+
+__BEGIN_DECLS
+
+typedef struct
+{
+ size_t size1;
+ size_t size2;
+ size_t tda;
+ long * data;
+ gsl_block_long * block;
+ int owner;
+} gsl_matrix_long;
+
+typedef struct
+{
+ gsl_matrix_long matrix;
+} _gsl_matrix_long_view;
+
+typedef _gsl_matrix_long_view gsl_matrix_long_view;
+
+typedef struct
+{
+ gsl_matrix_long matrix;
+} _gsl_matrix_long_const_view;
+
+typedef const _gsl_matrix_long_const_view gsl_matrix_long_const_view;
+
+/* Allocation */
+
+gsl_matrix_long *
+gsl_matrix_long_alloc (const size_t n1, const size_t n2);
+
+gsl_matrix_long *
+gsl_matrix_long_calloc (const size_t n1, const size_t n2);
+
+gsl_matrix_long *
+gsl_matrix_long_alloc_from_block (gsl_block_long * b,
+ const size_t offset,
+ const size_t n1,
+ const size_t n2,
+ const size_t d2);
+
+gsl_matrix_long *
+gsl_matrix_long_alloc_from_matrix (gsl_matrix_long * m,
+ const size_t k1,
+ const size_t k2,
+ const size_t n1,
+ const size_t n2);
+
+gsl_vector_long *
+gsl_vector_long_alloc_row_from_matrix (gsl_matrix_long * m,
+ const size_t i);
+
+gsl_vector_long *
+gsl_vector_long_alloc_col_from_matrix (gsl_matrix_long * m,
+ const size_t j);
+
+void gsl_matrix_long_free (gsl_matrix_long * m);
+
+/* Views */
+
+_gsl_matrix_long_view
+gsl_matrix_long_submatrix (gsl_matrix_long * m,
+ const size_t i, const size_t j,
+ const size_t n1, const size_t n2);
+
+_gsl_vector_long_view
+gsl_matrix_long_row (gsl_matrix_long * m, const size_t i);
+
+_gsl_vector_long_view
+gsl_matrix_long_column (gsl_matrix_long * m, const size_t j);
+
+_gsl_vector_long_view
+gsl_matrix_long_diagonal (gsl_matrix_long * m);
+
+_gsl_vector_long_view
+gsl_matrix_long_subdiagonal (gsl_matrix_long * m, const size_t k);
+
+_gsl_vector_long_view
+gsl_matrix_long_superdiagonal (gsl_matrix_long * m, const size_t k);
+
+_gsl_vector_long_view
+gsl_matrix_long_subrow (gsl_matrix_long * m, const size_t i,
+ const size_t offset, const size_t n);
+
+_gsl_vector_long_view
+gsl_matrix_long_subcolumn (gsl_matrix_long * m, const size_t j,
+ const size_t offset, const size_t n);
+
+_gsl_matrix_long_view
+gsl_matrix_long_view_array (long * base,
+ const size_t n1,
+ const size_t n2);
+
+_gsl_matrix_long_view
+gsl_matrix_long_view_array_with_tda (long * base,
+ const size_t n1,
+ const size_t n2,
+ const size_t tda);
+
+
+_gsl_matrix_long_view
+gsl_matrix_long_view_vector (gsl_vector_long * v,
+ const size_t n1,
+ const size_t n2);
+
+_gsl_matrix_long_view
+gsl_matrix_long_view_vector_with_tda (gsl_vector_long * v,
+ const size_t n1,
+ const size_t n2,
+ const size_t tda);
+
+
+_gsl_matrix_long_const_view
+gsl_matrix_long_const_submatrix (const gsl_matrix_long * m,
+ const size_t i, const size_t j,
+ const size_t n1, const size_t n2);
+
+_gsl_vector_long_const_view
+gsl_matrix_long_const_row (const gsl_matrix_long * m,
+ const size_t i);
+
+_gsl_vector_long_const_view
+gsl_matrix_long_const_column (const gsl_matrix_long * m,
+ const size_t j);
+
+_gsl_vector_long_const_view
+gsl_matrix_long_const_diagonal (const gsl_matrix_long * m);
+
+_gsl_vector_long_const_view
+gsl_matrix_long_const_subdiagonal (const gsl_matrix_long * m,
+ const size_t k);
+
+_gsl_vector_long_const_view
+gsl_matrix_long_const_superdiagonal (const gsl_matrix_long * m,
+ const size_t k);
+
+_gsl_vector_long_const_view
+gsl_matrix_long_const_subrow (const gsl_matrix_long * m, const size_t i,
+ const size_t offset, const size_t n);
+
+_gsl_vector_long_const_view
+gsl_matrix_long_const_subcolumn (const gsl_matrix_long * m, const size_t j,
+ const size_t offset, const size_t n);
+
+_gsl_matrix_long_const_view
+gsl_matrix_long_const_view_array (const long * base,
+ const size_t n1,
+ const size_t n2);
+
+_gsl_matrix_long_const_view
+gsl_matrix_long_const_view_array_with_tda (const long * base,
+ const size_t n1,
+ const size_t n2,
+ const size_t tda);
+
+_gsl_matrix_long_const_view
+gsl_matrix_long_const_view_vector (const gsl_vector_long * v,
+ const size_t n1,
+ const size_t n2);
+
+_gsl_matrix_long_const_view
+gsl_matrix_long_const_view_vector_with_tda (const gsl_vector_long * v,
+ const size_t n1,
+ const size_t n2,
+ const size_t tda);
+
+/* Operations */
+
+void gsl_matrix_long_set_zero (gsl_matrix_long * m);
+void gsl_matrix_long_set_identity (gsl_matrix_long * m);
+void gsl_matrix_long_set_all (gsl_matrix_long * m, long x);
+
+int gsl_matrix_long_fread (FILE * stream, gsl_matrix_long * m) ;
+int gsl_matrix_long_fwrite (FILE * stream, const gsl_matrix_long * m) ;
+int gsl_matrix_long_fscanf (FILE * stream, gsl_matrix_long * m);
+int gsl_matrix_long_fprintf (FILE * stream, const gsl_matrix_long * m, const char * format);
+
+int gsl_matrix_long_memcpy(gsl_matrix_long * dest, const gsl_matrix_long * src);
+int gsl_matrix_long_swap(gsl_matrix_long * m1, gsl_matrix_long * m2);
+
+int gsl_matrix_long_swap_rows(gsl_matrix_long * m, const size_t i, const size_t j);
+int gsl_matrix_long_swap_columns(gsl_matrix_long * m, const size_t i, const size_t j);
+int gsl_matrix_long_swap_rowcol(gsl_matrix_long * m, const size_t i, const size_t j);
+int gsl_matrix_long_transpose (gsl_matrix_long * m);
+int gsl_matrix_long_transpose_memcpy (gsl_matrix_long * dest, const gsl_matrix_long * src);
+
+long gsl_matrix_long_max (const gsl_matrix_long * m);
+long gsl_matrix_long_min (const gsl_matrix_long * m);
+void gsl_matrix_long_minmax (const gsl_matrix_long * m, long * min_out, long * max_out);
+
+void gsl_matrix_long_max_index (const gsl_matrix_long * m, size_t * imax, size_t *jmax);
+void gsl_matrix_long_min_index (const gsl_matrix_long * m, size_t * imin, size_t *jmin);
+void gsl_matrix_long_minmax_index (const gsl_matrix_long * m, size_t * imin, size_t * jmin, size_t * imax, size_t * jmax);
+
+int gsl_matrix_long_equal (const gsl_matrix_long * a, const gsl_matrix_long * b);
+
+int gsl_matrix_long_isnull (const gsl_matrix_long * m);
+int gsl_matrix_long_ispos (const gsl_matrix_long * m);
+int gsl_matrix_long_isneg (const gsl_matrix_long * m);
+int gsl_matrix_long_isnonneg (const gsl_matrix_long * m);
+
+int gsl_matrix_long_add (gsl_matrix_long * a, const gsl_matrix_long * b);
+int gsl_matrix_long_sub (gsl_matrix_long * a, const gsl_matrix_long * b);
+int gsl_matrix_long_mul_elements (gsl_matrix_long * a, const gsl_matrix_long * b);
+int gsl_matrix_long_div_elements (gsl_matrix_long * a, const gsl_matrix_long * b);
+int gsl_matrix_long_scale (gsl_matrix_long * a, const double x);
+int gsl_matrix_long_add_constant (gsl_matrix_long * a, const double x);
+int gsl_matrix_long_add_diagonal (gsl_matrix_long * a, const double x);
+
+/***********************************************************************/
+/* The functions below are obsolete */
+/***********************************************************************/
+int gsl_matrix_long_get_row(gsl_vector_long * v, const gsl_matrix_long * m, const size_t i);
+int gsl_matrix_long_get_col(gsl_vector_long * v, const gsl_matrix_long * m, const size_t j);
+int gsl_matrix_long_set_row(gsl_matrix_long * m, const size_t i, const gsl_vector_long * v);
+int gsl_matrix_long_set_col(gsl_matrix_long * m, const size_t j, const gsl_vector_long * v);
+/***********************************************************************/
+
+/* inline functions if you are using GCC */
+
+INLINE_DECL long gsl_matrix_long_get(const gsl_matrix_long * m, const size_t i, const size_t j);
+INLINE_DECL void gsl_matrix_long_set(gsl_matrix_long * m, const size_t i, const size_t j, const long x);
+INLINE_DECL long * gsl_matrix_long_ptr(gsl_matrix_long * m, const size_t i, const size_t j);
+INLINE_DECL const long * gsl_matrix_long_const_ptr(const gsl_matrix_long * m, const size_t i, const size_t j);
+
+#ifdef HAVE_INLINE
+INLINE_FUN
+long
+gsl_matrix_long_get(const gsl_matrix_long * m, const size_t i, const size_t j)
+{
+#if GSL_RANGE_CHECK
+ if (GSL_RANGE_COND(1))
+ {
+ if (i >= m->size1)
+ {
+ GSL_ERROR_VAL("first index out of range", GSL_EINVAL, 0) ;
+ }
+ else if (j >= m->size2)
+ {
+ GSL_ERROR_VAL("second index out of range", GSL_EINVAL, 0) ;
+ }
+ }
+#endif
+ return m->data[i * m->tda + j] ;
+}
+
+INLINE_FUN
+void
+gsl_matrix_long_set(gsl_matrix_long * m, const size_t i, const size_t j, const long x)
+{
+#if GSL_RANGE_CHECK
+ if (GSL_RANGE_COND(1))
+ {
+ if (i >= m->size1)
+ {
+ GSL_ERROR_VOID("first index out of range", GSL_EINVAL) ;
+ }
+ else if (j >= m->size2)
+ {
+ GSL_ERROR_VOID("second index out of range", GSL_EINVAL) ;
+ }
+ }
+#endif
+ m->data[i * m->tda + j] = x ;
+}
+
+INLINE_FUN
+long *
+gsl_matrix_long_ptr(gsl_matrix_long * m, const size_t i, const size_t j)
+{
+#if GSL_RANGE_CHECK
+ if (GSL_RANGE_COND(1))
+ {
+ if (i >= m->size1)
+ {
+ GSL_ERROR_NULL("first index out of range", GSL_EINVAL) ;
+ }
+ else if (j >= m->size2)
+ {
+ GSL_ERROR_NULL("second index out of range", GSL_EINVAL) ;
+ }
+ }
+#endif
+ return (long *) (m->data + (i * m->tda + j)) ;
+}
+
+INLINE_FUN
+const long *
+gsl_matrix_long_const_ptr(const gsl_matrix_long * m, const size_t i, const size_t j)
+{
+#if GSL_RANGE_CHECK
+ if (GSL_RANGE_COND(1))
+ {
+ if (i >= m->size1)
+ {
+ GSL_ERROR_NULL("first index out of range", GSL_EINVAL) ;
+ }
+ else if (j >= m->size2)
+ {
+ GSL_ERROR_NULL("second index out of range", GSL_EINVAL) ;
+ }
+ }
+#endif
+ return (const long *) (m->data + (i * m->tda + j)) ;
+}
+
+#endif
+
+__END_DECLS
+
+#endif /* __GSL_MATRIX_LONG_H__ */
diff --git a/thirdparty/includes/GSL/gsl/gsl_matrix_long_double.h b/thirdparty/includes/GSL/gsl/gsl_matrix_long_double.h
new file mode 100644
index 0000000..910091f
--- /dev/null
+++ b/thirdparty/includes/GSL/gsl/gsl_matrix_long_double.h
@@ -0,0 +1,350 @@
+/* matrix/gsl_matrix_long_double.h
+ *
+ * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Gerard Jungman, Brian Gough
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GSL_MATRIX_LONG_DOUBLE_H__
+#define __GSL_MATRIX_LONG_DOUBLE_H__
+
+#include
+#include
+#include
+#include
+#include
+#include
+
+#undef __BEGIN_DECLS
+#undef __END_DECLS
+#ifdef __cplusplus
+# define __BEGIN_DECLS extern "C" {
+# define __END_DECLS }
+#else
+# define __BEGIN_DECLS /* empty */
+# define __END_DECLS /* empty */
+#endif
+
+__BEGIN_DECLS
+
+typedef struct
+{
+ size_t size1;
+ size_t size2;
+ size_t tda;
+ long double * data;
+ gsl_block_long_double * block;
+ int owner;
+} gsl_matrix_long_double;
+
+typedef struct
+{
+ gsl_matrix_long_double matrix;
+} _gsl_matrix_long_double_view;
+
+typedef _gsl_matrix_long_double_view gsl_matrix_long_double_view;
+
+typedef struct
+{
+ gsl_matrix_long_double matrix;
+} _gsl_matrix_long_double_const_view;
+
+typedef const _gsl_matrix_long_double_const_view gsl_matrix_long_double_const_view;
+
+/* Allocation */
+
+gsl_matrix_long_double *
+gsl_matrix_long_double_alloc (const size_t n1, const size_t n2);
+
+gsl_matrix_long_double *
+gsl_matrix_long_double_calloc (const size_t n1, const size_t n2);
+
+gsl_matrix_long_double *
+gsl_matrix_long_double_alloc_from_block (gsl_block_long_double * b,
+ const size_t offset,
+ const size_t n1,
+ const size_t n2,
+ const size_t d2);
+
+gsl_matrix_long_double *
+gsl_matrix_long_double_alloc_from_matrix (gsl_matrix_long_double * m,
+ const size_t k1,
+ const size_t k2,
+ const size_t n1,
+ const size_t n2);
+
+gsl_vector_long_double *
+gsl_vector_long_double_alloc_row_from_matrix (gsl_matrix_long_double * m,
+ const size_t i);
+
+gsl_vector_long_double *
+gsl_vector_long_double_alloc_col_from_matrix (gsl_matrix_long_double * m,
+ const size_t j);
+
+void gsl_matrix_long_double_free (gsl_matrix_long_double * m);
+
+/* Views */
+
+_gsl_matrix_long_double_view
+gsl_matrix_long_double_submatrix (gsl_matrix_long_double * m,
+ const size_t i, const size_t j,
+ const size_t n1, const size_t n2);
+
+_gsl_vector_long_double_view
+gsl_matrix_long_double_row (gsl_matrix_long_double * m, const size_t i);
+
+_gsl_vector_long_double_view
+gsl_matrix_long_double_column (gsl_matrix_long_double * m, const size_t j);
+
+_gsl_vector_long_double_view
+gsl_matrix_long_double_diagonal (gsl_matrix_long_double * m);
+
+_gsl_vector_long_double_view
+gsl_matrix_long_double_subdiagonal (gsl_matrix_long_double * m, const size_t k);
+
+_gsl_vector_long_double_view
+gsl_matrix_long_double_superdiagonal (gsl_matrix_long_double * m, const size_t k);
+
+_gsl_vector_long_double_view
+gsl_matrix_long_double_subrow (gsl_matrix_long_double * m, const size_t i,
+ const size_t offset, const size_t n);
+
+_gsl_vector_long_double_view
+gsl_matrix_long_double_subcolumn (gsl_matrix_long_double * m, const size_t j,
+ const size_t offset, const size_t n);
+
+_gsl_matrix_long_double_view
+gsl_matrix_long_double_view_array (long double * base,
+ const size_t n1,
+ const size_t n2);
+
+_gsl_matrix_long_double_view
+gsl_matrix_long_double_view_array_with_tda (long double * base,
+ const size_t n1,
+ const size_t n2,
+ const size_t tda);
+
+
+_gsl_matrix_long_double_view
+gsl_matrix_long_double_view_vector (gsl_vector_long_double * v,
+ const size_t n1,
+ const size_t n2);
+
+_gsl_matrix_long_double_view
+gsl_matrix_long_double_view_vector_with_tda (gsl_vector_long_double * v,
+ const size_t n1,
+ const size_t n2,
+ const size_t tda);
+
+
+_gsl_matrix_long_double_const_view
+gsl_matrix_long_double_const_submatrix (const gsl_matrix_long_double * m,
+ const size_t i, const size_t j,
+ const size_t n1, const size_t n2);
+
+_gsl_vector_long_double_const_view
+gsl_matrix_long_double_const_row (const gsl_matrix_long_double * m,
+ const size_t i);
+
+_gsl_vector_long_double_const_view
+gsl_matrix_long_double_const_column (const gsl_matrix_long_double * m,
+ const size_t j);
+
+_gsl_vector_long_double_const_view
+gsl_matrix_long_double_const_diagonal (const gsl_matrix_long_double * m);
+
+_gsl_vector_long_double_const_view
+gsl_matrix_long_double_const_subdiagonal (const gsl_matrix_long_double * m,
+ const size_t k);
+
+_gsl_vector_long_double_const_view
+gsl_matrix_long_double_const_superdiagonal (const gsl_matrix_long_double * m,
+ const size_t k);
+
+_gsl_vector_long_double_const_view
+gsl_matrix_long_double_const_subrow (const gsl_matrix_long_double * m, const size_t i,
+ const size_t offset, const size_t n);
+
+_gsl_vector_long_double_const_view
+gsl_matrix_long_double_const_subcolumn (const gsl_matrix_long_double * m, const size_t j,
+ const size_t offset, const size_t n);
+
+_gsl_matrix_long_double_const_view
+gsl_matrix_long_double_const_view_array (const long double * base,
+ const size_t n1,
+ const size_t n2);
+
+_gsl_matrix_long_double_const_view
+gsl_matrix_long_double_const_view_array_with_tda (const long double * base,
+ const size_t n1,
+ const size_t n2,
+ const size_t tda);
+
+_gsl_matrix_long_double_const_view
+gsl_matrix_long_double_const_view_vector (const gsl_vector_long_double * v,
+ const size_t n1,
+ const size_t n2);
+
+_gsl_matrix_long_double_const_view
+gsl_matrix_long_double_const_view_vector_with_tda (const gsl_vector_long_double * v,
+ const size_t n1,
+ const size_t n2,
+ const size_t tda);
+
+/* Operations */
+
+void gsl_matrix_long_double_set_zero (gsl_matrix_long_double * m);
+void gsl_matrix_long_double_set_identity (gsl_matrix_long_double * m);
+void gsl_matrix_long_double_set_all (gsl_matrix_long_double * m, long double x);
+
+int gsl_matrix_long_double_fread (FILE * stream, gsl_matrix_long_double * m) ;
+int gsl_matrix_long_double_fwrite (FILE * stream, const gsl_matrix_long_double * m) ;
+int gsl_matrix_long_double_fscanf (FILE * stream, gsl_matrix_long_double * m);
+int gsl_matrix_long_double_fprintf (FILE * stream, const gsl_matrix_long_double * m, const char * format);
+
+int gsl_matrix_long_double_memcpy(gsl_matrix_long_double * dest, const gsl_matrix_long_double * src);
+int gsl_matrix_long_double_swap(gsl_matrix_long_double * m1, gsl_matrix_long_double * m2);
+
+int gsl_matrix_long_double_swap_rows(gsl_matrix_long_double * m, const size_t i, const size_t j);
+int gsl_matrix_long_double_swap_columns(gsl_matrix_long_double * m, const size_t i, const size_t j);
+int gsl_matrix_long_double_swap_rowcol(gsl_matrix_long_double * m, const size_t i, const size_t j);
+int gsl_matrix_long_double_transpose (gsl_matrix_long_double * m);
+int gsl_matrix_long_double_transpose_memcpy (gsl_matrix_long_double * dest, const gsl_matrix_long_double * src);
+
+long double gsl_matrix_long_double_max (const gsl_matrix_long_double * m);
+long double gsl_matrix_long_double_min (const gsl_matrix_long_double * m);
+void gsl_matrix_long_double_minmax (const gsl_matrix_long_double * m, long double * min_out, long double * max_out);
+
+void gsl_matrix_long_double_max_index (const gsl_matrix_long_double * m, size_t * imax, size_t *jmax);
+void gsl_matrix_long_double_min_index (const gsl_matrix_long_double * m, size_t * imin, size_t *jmin);
+void gsl_matrix_long_double_minmax_index (const gsl_matrix_long_double * m, size_t * imin, size_t * jmin, size_t * imax, size_t * jmax);
+
+int gsl_matrix_long_double_equal (const gsl_matrix_long_double * a, const gsl_matrix_long_double * b);
+
+int gsl_matrix_long_double_isnull (const gsl_matrix_long_double * m);
+int gsl_matrix_long_double_ispos (const gsl_matrix_long_double * m);
+int gsl_matrix_long_double_isneg (const gsl_matrix_long_double * m);
+int gsl_matrix_long_double_isnonneg (const gsl_matrix_long_double * m);
+
+int gsl_matrix_long_double_add (gsl_matrix_long_double * a, const gsl_matrix_long_double * b);
+int gsl_matrix_long_double_sub (gsl_matrix_long_double * a, const gsl_matrix_long_double * b);
+int gsl_matrix_long_double_mul_elements (gsl_matrix_long_double * a, const gsl_matrix_long_double * b);
+int gsl_matrix_long_double_div_elements (gsl_matrix_long_double * a, const gsl_matrix_long_double * b);
+int gsl_matrix_long_double_scale (gsl_matrix_long_double * a, const double x);
+int gsl_matrix_long_double_add_constant (gsl_matrix_long_double * a, const double x);
+int gsl_matrix_long_double_add_diagonal (gsl_matrix_long_double * a, const double x);
+
+/***********************************************************************/
+/* The functions below are obsolete */
+/***********************************************************************/
+int gsl_matrix_long_double_get_row(gsl_vector_long_double * v, const gsl_matrix_long_double * m, const size_t i);
+int gsl_matrix_long_double_get_col(gsl_vector_long_double * v, const gsl_matrix_long_double * m, const size_t j);
+int gsl_matrix_long_double_set_row(gsl_matrix_long_double * m, const size_t i, const gsl_vector_long_double * v);
+int gsl_matrix_long_double_set_col(gsl_matrix_long_double * m, const size_t j, const gsl_vector_long_double * v);
+/***********************************************************************/
+
+/* inline functions if you are using GCC */
+
+INLINE_DECL long double gsl_matrix_long_double_get(const gsl_matrix_long_double * m, const size_t i, const size_t j);
+INLINE_DECL void gsl_matrix_long_double_set(gsl_matrix_long_double * m, const size_t i, const size_t j, const long double x);
+INLINE_DECL long double * gsl_matrix_long_double_ptr(gsl_matrix_long_double * m, const size_t i, const size_t j);
+INLINE_DECL const long double * gsl_matrix_long_double_const_ptr(const gsl_matrix_long_double * m, const size_t i, const size_t j);
+
+#ifdef HAVE_INLINE
+INLINE_FUN
+long double
+gsl_matrix_long_double_get(const gsl_matrix_long_double * m, const size_t i, const size_t j)
+{
+#if GSL_RANGE_CHECK
+ if (GSL_RANGE_COND(1))
+ {
+ if (i >= m->size1)
+ {
+ GSL_ERROR_VAL("first index out of range", GSL_EINVAL, 0) ;
+ }
+ else if (j >= m->size2)
+ {
+ GSL_ERROR_VAL("second index out of range", GSL_EINVAL, 0) ;
+ }
+ }
+#endif
+ return m->data[i * m->tda + j] ;
+}
+
+INLINE_FUN
+void
+gsl_matrix_long_double_set(gsl_matrix_long_double * m, const size_t i, const size_t j, const long double x)
+{
+#if GSL_RANGE_CHECK
+ if (GSL_RANGE_COND(1))
+ {
+ if (i >= m->size1)
+ {
+ GSL_ERROR_VOID("first index out of range", GSL_EINVAL) ;
+ }
+ else if (j >= m->size2)
+ {
+ GSL_ERROR_VOID("second index out of range", GSL_EINVAL) ;
+ }
+ }
+#endif
+ m->data[i * m->tda + j] = x ;
+}
+
+INLINE_FUN
+long double *
+gsl_matrix_long_double_ptr(gsl_matrix_long_double * m, const size_t i, const size_t j)
+{
+#if GSL_RANGE_CHECK
+ if (GSL_RANGE_COND(1))
+ {
+ if (i >= m->size1)
+ {
+ GSL_ERROR_NULL("first index out of range", GSL_EINVAL) ;
+ }
+ else if (j >= m->size2)
+ {
+ GSL_ERROR_NULL("second index out of range", GSL_EINVAL) ;
+ }
+ }
+#endif
+ return (long double *) (m->data + (i * m->tda + j)) ;
+}
+
+INLINE_FUN
+const long double *
+gsl_matrix_long_double_const_ptr(const gsl_matrix_long_double * m, const size_t i, const size_t j)
+{
+#if GSL_RANGE_CHECK
+ if (GSL_RANGE_COND(1))
+ {
+ if (i >= m->size1)
+ {
+ GSL_ERROR_NULL("first index out of range", GSL_EINVAL) ;
+ }
+ else if (j >= m->size2)
+ {
+ GSL_ERROR_NULL("second index out of range", GSL_EINVAL) ;
+ }
+ }
+#endif
+ return (const long double *) (m->data + (i * m->tda + j)) ;
+}
+
+#endif
+
+__END_DECLS
+
+#endif /* __GSL_MATRIX_LONG_DOUBLE_H__ */
diff --git a/thirdparty/includes/GSL/gsl/gsl_matrix_short.h b/thirdparty/includes/GSL/gsl/gsl_matrix_short.h
new file mode 100644
index 0000000..53e89e6
--- /dev/null
+++ b/thirdparty/includes/GSL/gsl/gsl_matrix_short.h
@@ -0,0 +1,350 @@
+/* matrix/gsl_matrix_short.h
+ *
+ * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Gerard Jungman, Brian Gough
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GSL_MATRIX_SHORT_H__
+#define __GSL_MATRIX_SHORT_H__
+
+#include
+#include
+#include
+#include
+#include
+#include
+
+#undef __BEGIN_DECLS
+#undef __END_DECLS
+#ifdef __cplusplus
+# define __BEGIN_DECLS extern "C" {
+# define __END_DECLS }
+#else
+# define __BEGIN_DECLS /* empty */
+# define __END_DECLS /* empty */
+#endif
+
+__BEGIN_DECLS
+
+typedef struct
+{
+ size_t size1;
+ size_t size2;
+ size_t tda;
+ short * data;
+ gsl_block_short * block;
+ int owner;
+} gsl_matrix_short;
+
+typedef struct
+{
+ gsl_matrix_short matrix;
+} _gsl_matrix_short_view;
+
+typedef _gsl_matrix_short_view gsl_matrix_short_view;
+
+typedef struct
+{
+ gsl_matrix_short matrix;
+} _gsl_matrix_short_const_view;
+
+typedef const _gsl_matrix_short_const_view gsl_matrix_short_const_view;
+
+/* Allocation */
+
+gsl_matrix_short *
+gsl_matrix_short_alloc (const size_t n1, const size_t n2);
+
+gsl_matrix_short *
+gsl_matrix_short_calloc (const size_t n1, const size_t n2);
+
+gsl_matrix_short *
+gsl_matrix_short_alloc_from_block (gsl_block_short * b,
+ const size_t offset,
+ const size_t n1,
+ const size_t n2,
+ const size_t d2);
+
+gsl_matrix_short *
+gsl_matrix_short_alloc_from_matrix (gsl_matrix_short * m,
+ const size_t k1,
+ const size_t k2,
+ const size_t n1,
+ const size_t n2);
+
+gsl_vector_short *
+gsl_vector_short_alloc_row_from_matrix (gsl_matrix_short * m,
+ const size_t i);
+
+gsl_vector_short *
+gsl_vector_short_alloc_col_from_matrix (gsl_matrix_short * m,
+ const size_t j);
+
+void gsl_matrix_short_free (gsl_matrix_short * m);
+
+/* Views */
+
+_gsl_matrix_short_view
+gsl_matrix_short_submatrix (gsl_matrix_short * m,
+ const size_t i, const size_t j,
+ const size_t n1, const size_t n2);
+
+_gsl_vector_short_view
+gsl_matrix_short_row (gsl_matrix_short * m, const size_t i);
+
+_gsl_vector_short_view
+gsl_matrix_short_column (gsl_matrix_short * m, const size_t j);
+
+_gsl_vector_short_view
+gsl_matrix_short_diagonal (gsl_matrix_short * m);
+
+_gsl_vector_short_view
+gsl_matrix_short_subdiagonal (gsl_matrix_short * m, const size_t k);
+
+_gsl_vector_short_view
+gsl_matrix_short_superdiagonal (gsl_matrix_short * m, const size_t k);
+
+_gsl_vector_short_view
+gsl_matrix_short_subrow (gsl_matrix_short * m, const size_t i,
+ const size_t offset, const size_t n);
+
+_gsl_vector_short_view
+gsl_matrix_short_subcolumn (gsl_matrix_short * m, const size_t j,
+ const size_t offset, const size_t n);
+
+_gsl_matrix_short_view
+gsl_matrix_short_view_array (short * base,
+ const size_t n1,
+ const size_t n2);
+
+_gsl_matrix_short_view
+gsl_matrix_short_view_array_with_tda (short * base,
+ const size_t n1,
+ const size_t n2,
+ const size_t tda);
+
+
+_gsl_matrix_short_view
+gsl_matrix_short_view_vector (gsl_vector_short * v,
+ const size_t n1,
+ const size_t n2);
+
+_gsl_matrix_short_view
+gsl_matrix_short_view_vector_with_tda (gsl_vector_short * v,
+ const size_t n1,
+ const size_t n2,
+ const size_t tda);
+
+
+_gsl_matrix_short_const_view
+gsl_matrix_short_const_submatrix (const gsl_matrix_short * m,
+ const size_t i, const size_t j,
+ const size_t n1, const size_t n2);
+
+_gsl_vector_short_const_view
+gsl_matrix_short_const_row (const gsl_matrix_short * m,
+ const size_t i);
+
+_gsl_vector_short_const_view
+gsl_matrix_short_const_column (const gsl_matrix_short * m,
+ const size_t j);
+
+_gsl_vector_short_const_view
+gsl_matrix_short_const_diagonal (const gsl_matrix_short * m);
+
+_gsl_vector_short_const_view
+gsl_matrix_short_const_subdiagonal (const gsl_matrix_short * m,
+ const size_t k);
+
+_gsl_vector_short_const_view
+gsl_matrix_short_const_superdiagonal (const gsl_matrix_short * m,
+ const size_t k);
+
+_gsl_vector_short_const_view
+gsl_matrix_short_const_subrow (const gsl_matrix_short * m, const size_t i,
+ const size_t offset, const size_t n);
+
+_gsl_vector_short_const_view
+gsl_matrix_short_const_subcolumn (const gsl_matrix_short * m, const size_t j,
+ const size_t offset, const size_t n);
+
+_gsl_matrix_short_const_view
+gsl_matrix_short_const_view_array (const short * base,
+ const size_t n1,
+ const size_t n2);
+
+_gsl_matrix_short_const_view
+gsl_matrix_short_const_view_array_with_tda (const short * base,
+ const size_t n1,
+ const size_t n2,
+ const size_t tda);
+
+_gsl_matrix_short_const_view
+gsl_matrix_short_const_view_vector (const gsl_vector_short * v,
+ const size_t n1,
+ const size_t n2);
+
+_gsl_matrix_short_const_view
+gsl_matrix_short_const_view_vector_with_tda (const gsl_vector_short * v,
+ const size_t n1,
+ const size_t n2,
+ const size_t tda);
+
+/* Operations */
+
+void gsl_matrix_short_set_zero (gsl_matrix_short * m);
+void gsl_matrix_short_set_identity (gsl_matrix_short * m);
+void gsl_matrix_short_set_all (gsl_matrix_short * m, short x);
+
+int gsl_matrix_short_fread (FILE * stream, gsl_matrix_short * m) ;
+int gsl_matrix_short_fwrite (FILE * stream, const gsl_matrix_short * m) ;
+int gsl_matrix_short_fscanf (FILE * stream, gsl_matrix_short * m);
+int gsl_matrix_short_fprintf (FILE * stream, const gsl_matrix_short * m, const char * format);
+
+int gsl_matrix_short_memcpy(gsl_matrix_short * dest, const gsl_matrix_short * src);
+int gsl_matrix_short_swap(gsl_matrix_short * m1, gsl_matrix_short * m2);
+
+int gsl_matrix_short_swap_rows(gsl_matrix_short * m, const size_t i, const size_t j);
+int gsl_matrix_short_swap_columns(gsl_matrix_short * m, const size_t i, const size_t j);
+int gsl_matrix_short_swap_rowcol(gsl_matrix_short * m, const size_t i, const size_t j);
+int gsl_matrix_short_transpose (gsl_matrix_short * m);
+int gsl_matrix_short_transpose_memcpy (gsl_matrix_short * dest, const gsl_matrix_short * src);
+
+short gsl_matrix_short_max (const gsl_matrix_short * m);
+short gsl_matrix_short_min (const gsl_matrix_short * m);
+void gsl_matrix_short_minmax (const gsl_matrix_short * m, short * min_out, short * max_out);
+
+void gsl_matrix_short_max_index (const gsl_matrix_short * m, size_t * imax, size_t *jmax);
+void gsl_matrix_short_min_index (const gsl_matrix_short * m, size_t * imin, size_t *jmin);
+void gsl_matrix_short_minmax_index (const gsl_matrix_short * m, size_t * imin, size_t * jmin, size_t * imax, size_t * jmax);
+
+int gsl_matrix_short_equal (const gsl_matrix_short * a, const gsl_matrix_short * b);
+
+int gsl_matrix_short_isnull (const gsl_matrix_short * m);
+int gsl_matrix_short_ispos (const gsl_matrix_short * m);
+int gsl_matrix_short_isneg (const gsl_matrix_short * m);
+int gsl_matrix_short_isnonneg (const gsl_matrix_short * m);
+
+int gsl_matrix_short_add (gsl_matrix_short * a, const gsl_matrix_short * b);
+int gsl_matrix_short_sub (gsl_matrix_short * a, const gsl_matrix_short * b);
+int gsl_matrix_short_mul_elements (gsl_matrix_short * a, const gsl_matrix_short * b);
+int gsl_matrix_short_div_elements (gsl_matrix_short * a, const gsl_matrix_short * b);
+int gsl_matrix_short_scale (gsl_matrix_short * a, const double x);
+int gsl_matrix_short_add_constant (gsl_matrix_short * a, const double x);
+int gsl_matrix_short_add_diagonal (gsl_matrix_short * a, const double x);
+
+/***********************************************************************/
+/* The functions below are obsolete */
+/***********************************************************************/
+int gsl_matrix_short_get_row(gsl_vector_short * v, const gsl_matrix_short * m, const size_t i);
+int gsl_matrix_short_get_col(gsl_vector_short * v, const gsl_matrix_short * m, const size_t j);
+int gsl_matrix_short_set_row(gsl_matrix_short * m, const size_t i, const gsl_vector_short * v);
+int gsl_matrix_short_set_col(gsl_matrix_short * m, const size_t j, const gsl_vector_short * v);
+/***********************************************************************/
+
+/* inline functions if you are using GCC */
+
+INLINE_DECL short gsl_matrix_short_get(const gsl_matrix_short * m, const size_t i, const size_t j);
+INLINE_DECL void gsl_matrix_short_set(gsl_matrix_short * m, const size_t i, const size_t j, const short x);
+INLINE_DECL short * gsl_matrix_short_ptr(gsl_matrix_short * m, const size_t i, const size_t j);
+INLINE_DECL const short * gsl_matrix_short_const_ptr(const gsl_matrix_short * m, const size_t i, const size_t j);
+
+#ifdef HAVE_INLINE
+INLINE_FUN
+short
+gsl_matrix_short_get(const gsl_matrix_short * m, const size_t i, const size_t j)
+{
+#if GSL_RANGE_CHECK
+ if (GSL_RANGE_COND(1))
+ {
+ if (i >= m->size1)
+ {
+ GSL_ERROR_VAL("first index out of range", GSL_EINVAL, 0) ;
+ }
+ else if (j >= m->size2)
+ {
+ GSL_ERROR_VAL("second index out of range", GSL_EINVAL, 0) ;
+ }
+ }
+#endif
+ return m->data[i * m->tda + j] ;
+}
+
+INLINE_FUN
+void
+gsl_matrix_short_set(gsl_matrix_short * m, const size_t i, const size_t j, const short x)
+{
+#if GSL_RANGE_CHECK
+ if (GSL_RANGE_COND(1))
+ {
+ if (i >= m->size1)
+ {
+ GSL_ERROR_VOID("first index out of range", GSL_EINVAL) ;
+ }
+ else if (j >= m->size2)
+ {
+ GSL_ERROR_VOID("second index out of range", GSL_EINVAL) ;
+ }
+ }
+#endif
+ m->data[i * m->tda + j] = x ;
+}
+
+INLINE_FUN
+short *
+gsl_matrix_short_ptr(gsl_matrix_short * m, const size_t i, const size_t j)
+{
+#if GSL_RANGE_CHECK
+ if (GSL_RANGE_COND(1))
+ {
+ if (i >= m->size1)
+ {
+ GSL_ERROR_NULL("first index out of range", GSL_EINVAL) ;
+ }
+ else if (j >= m->size2)
+ {
+ GSL_ERROR_NULL("second index out of range", GSL_EINVAL) ;
+ }
+ }
+#endif
+ return (short *) (m->data + (i * m->tda + j)) ;
+}
+
+INLINE_FUN
+const short *
+gsl_matrix_short_const_ptr(const gsl_matrix_short * m, const size_t i, const size_t j)
+{
+#if GSL_RANGE_CHECK
+ if (GSL_RANGE_COND(1))
+ {
+ if (i >= m->size1)
+ {
+ GSL_ERROR_NULL("first index out of range", GSL_EINVAL) ;
+ }
+ else if (j >= m->size2)
+ {
+ GSL_ERROR_NULL("second index out of range", GSL_EINVAL) ;
+ }
+ }
+#endif
+ return (const short *) (m->data + (i * m->tda + j)) ;
+}
+
+#endif
+
+__END_DECLS
+
+#endif /* __GSL_MATRIX_SHORT_H__ */
diff --git a/thirdparty/includes/GSL/gsl/gsl_matrix_uchar.h b/thirdparty/includes/GSL/gsl/gsl_matrix_uchar.h
new file mode 100644
index 0000000..0ab540f
--- /dev/null
+++ b/thirdparty/includes/GSL/gsl/gsl_matrix_uchar.h
@@ -0,0 +1,350 @@
+/* matrix/gsl_matrix_uchar.h
+ *
+ * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Gerard Jungman, Brian Gough
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GSL_MATRIX_UCHAR_H__
+#define __GSL_MATRIX_UCHAR_H__
+
+#include
+#include
+#include
+#include
+#include
+#include
+
+#undef __BEGIN_DECLS
+#undef __END_DECLS
+#ifdef __cplusplus
+# define __BEGIN_DECLS extern "C" {
+# define __END_DECLS }
+#else
+# define __BEGIN_DECLS /* empty */
+# define __END_DECLS /* empty */
+#endif
+
+__BEGIN_DECLS
+
+typedef struct
+{
+ size_t size1;
+ size_t size2;
+ size_t tda;
+ unsigned char * data;
+ gsl_block_uchar * block;
+ int owner;
+} gsl_matrix_uchar;
+
+typedef struct
+{
+ gsl_matrix_uchar matrix;
+} _gsl_matrix_uchar_view;
+
+typedef _gsl_matrix_uchar_view gsl_matrix_uchar_view;
+
+typedef struct
+{
+ gsl_matrix_uchar matrix;
+} _gsl_matrix_uchar_const_view;
+
+typedef const _gsl_matrix_uchar_const_view gsl_matrix_uchar_const_view;
+
+/* Allocation */
+
+gsl_matrix_uchar *
+gsl_matrix_uchar_alloc (const size_t n1, const size_t n2);
+
+gsl_matrix_uchar *
+gsl_matrix_uchar_calloc (const size_t n1, const size_t n2);
+
+gsl_matrix_uchar *
+gsl_matrix_uchar_alloc_from_block (gsl_block_uchar * b,
+ const size_t offset,
+ const size_t n1,
+ const size_t n2,
+ const size_t d2);
+
+gsl_matrix_uchar *
+gsl_matrix_uchar_alloc_from_matrix (gsl_matrix_uchar * m,
+ const size_t k1,
+ const size_t k2,
+ const size_t n1,
+ const size_t n2);
+
+gsl_vector_uchar *
+gsl_vector_uchar_alloc_row_from_matrix (gsl_matrix_uchar * m,
+ const size_t i);
+
+gsl_vector_uchar *
+gsl_vector_uchar_alloc_col_from_matrix (gsl_matrix_uchar * m,
+ const size_t j);
+
+void gsl_matrix_uchar_free (gsl_matrix_uchar * m);
+
+/* Views */
+
+_gsl_matrix_uchar_view
+gsl_matrix_uchar_submatrix (gsl_matrix_uchar * m,
+ const size_t i, const size_t j,
+ const size_t n1, const size_t n2);
+
+_gsl_vector_uchar_view
+gsl_matrix_uchar_row (gsl_matrix_uchar * m, const size_t i);
+
+_gsl_vector_uchar_view
+gsl_matrix_uchar_column (gsl_matrix_uchar * m, const size_t j);
+
+_gsl_vector_uchar_view
+gsl_matrix_uchar_diagonal (gsl_matrix_uchar * m);
+
+_gsl_vector_uchar_view
+gsl_matrix_uchar_subdiagonal (gsl_matrix_uchar * m, const size_t k);
+
+_gsl_vector_uchar_view
+gsl_matrix_uchar_superdiagonal (gsl_matrix_uchar * m, const size_t k);
+
+_gsl_vector_uchar_view
+gsl_matrix_uchar_subrow (gsl_matrix_uchar * m, const size_t i,
+ const size_t offset, const size_t n);
+
+_gsl_vector_uchar_view
+gsl_matrix_uchar_subcolumn (gsl_matrix_uchar * m, const size_t j,
+ const size_t offset, const size_t n);
+
+_gsl_matrix_uchar_view
+gsl_matrix_uchar_view_array (unsigned char * base,
+ const size_t n1,
+ const size_t n2);
+
+_gsl_matrix_uchar_view
+gsl_matrix_uchar_view_array_with_tda (unsigned char * base,
+ const size_t n1,
+ const size_t n2,
+ const size_t tda);
+
+
+_gsl_matrix_uchar_view
+gsl_matrix_uchar_view_vector (gsl_vector_uchar * v,
+ const size_t n1,
+ const size_t n2);
+
+_gsl_matrix_uchar_view
+gsl_matrix_uchar_view_vector_with_tda (gsl_vector_uchar * v,
+ const size_t n1,
+ const size_t n2,
+ const size_t tda);
+
+
+_gsl_matrix_uchar_const_view
+gsl_matrix_uchar_const_submatrix (const gsl_matrix_uchar * m,
+ const size_t i, const size_t j,
+ const size_t n1, const size_t n2);
+
+_gsl_vector_uchar_const_view
+gsl_matrix_uchar_const_row (const gsl_matrix_uchar * m,
+ const size_t i);
+
+_gsl_vector_uchar_const_view
+gsl_matrix_uchar_const_column (const gsl_matrix_uchar * m,
+ const size_t j);
+
+_gsl_vector_uchar_const_view
+gsl_matrix_uchar_const_diagonal (const gsl_matrix_uchar * m);
+
+_gsl_vector_uchar_const_view
+gsl_matrix_uchar_const_subdiagonal (const gsl_matrix_uchar * m,
+ const size_t k);
+
+_gsl_vector_uchar_const_view
+gsl_matrix_uchar_const_superdiagonal (const gsl_matrix_uchar * m,
+ const size_t k);
+
+_gsl_vector_uchar_const_view
+gsl_matrix_uchar_const_subrow (const gsl_matrix_uchar * m, const size_t i,
+ const size_t offset, const size_t n);
+
+_gsl_vector_uchar_const_view
+gsl_matrix_uchar_const_subcolumn (const gsl_matrix_uchar * m, const size_t j,
+ const size_t offset, const size_t n);
+
+_gsl_matrix_uchar_const_view
+gsl_matrix_uchar_const_view_array (const unsigned char * base,
+ const size_t n1,
+ const size_t n2);
+
+_gsl_matrix_uchar_const_view
+gsl_matrix_uchar_const_view_array_with_tda (const unsigned char * base,
+ const size_t n1,
+ const size_t n2,
+ const size_t tda);
+
+_gsl_matrix_uchar_const_view
+gsl_matrix_uchar_const_view_vector (const gsl_vector_uchar * v,
+ const size_t n1,
+ const size_t n2);
+
+_gsl_matrix_uchar_const_view
+gsl_matrix_uchar_const_view_vector_with_tda (const gsl_vector_uchar * v,
+ const size_t n1,
+ const size_t n2,
+ const size_t tda);
+
+/* Operations */
+
+void gsl_matrix_uchar_set_zero (gsl_matrix_uchar * m);
+void gsl_matrix_uchar_set_identity (gsl_matrix_uchar * m);
+void gsl_matrix_uchar_set_all (gsl_matrix_uchar * m, unsigned char x);
+
+int gsl_matrix_uchar_fread (FILE * stream, gsl_matrix_uchar * m) ;
+int gsl_matrix_uchar_fwrite (FILE * stream, const gsl_matrix_uchar * m) ;
+int gsl_matrix_uchar_fscanf (FILE * stream, gsl_matrix_uchar * m);
+int gsl_matrix_uchar_fprintf (FILE * stream, const gsl_matrix_uchar * m, const char * format);
+
+int gsl_matrix_uchar_memcpy(gsl_matrix_uchar * dest, const gsl_matrix_uchar * src);
+int gsl_matrix_uchar_swap(gsl_matrix_uchar * m1, gsl_matrix_uchar * m2);
+
+int gsl_matrix_uchar_swap_rows(gsl_matrix_uchar * m, const size_t i, const size_t j);
+int gsl_matrix_uchar_swap_columns(gsl_matrix_uchar * m, const size_t i, const size_t j);
+int gsl_matrix_uchar_swap_rowcol(gsl_matrix_uchar * m, const size_t i, const size_t j);
+int gsl_matrix_uchar_transpose (gsl_matrix_uchar * m);
+int gsl_matrix_uchar_transpose_memcpy (gsl_matrix_uchar * dest, const gsl_matrix_uchar * src);
+
+unsigned char gsl_matrix_uchar_max (const gsl_matrix_uchar * m);
+unsigned char gsl_matrix_uchar_min (const gsl_matrix_uchar * m);
+void gsl_matrix_uchar_minmax (const gsl_matrix_uchar * m, unsigned char * min_out, unsigned char * max_out);
+
+void gsl_matrix_uchar_max_index (const gsl_matrix_uchar * m, size_t * imax, size_t *jmax);
+void gsl_matrix_uchar_min_index (const gsl_matrix_uchar * m, size_t * imin, size_t *jmin);
+void gsl_matrix_uchar_minmax_index (const gsl_matrix_uchar * m, size_t * imin, size_t * jmin, size_t * imax, size_t * jmax);
+
+int gsl_matrix_uchar_equal (const gsl_matrix_uchar * a, const gsl_matrix_uchar * b);
+
+int gsl_matrix_uchar_isnull (const gsl_matrix_uchar * m);
+int gsl_matrix_uchar_ispos (const gsl_matrix_uchar * m);
+int gsl_matrix_uchar_isneg (const gsl_matrix_uchar * m);
+int gsl_matrix_uchar_isnonneg (const gsl_matrix_uchar * m);
+
+int gsl_matrix_uchar_add (gsl_matrix_uchar * a, const gsl_matrix_uchar * b);
+int gsl_matrix_uchar_sub (gsl_matrix_uchar * a, const gsl_matrix_uchar * b);
+int gsl_matrix_uchar_mul_elements (gsl_matrix_uchar * a, const gsl_matrix_uchar * b);
+int gsl_matrix_uchar_div_elements (gsl_matrix_uchar * a, const gsl_matrix_uchar * b);
+int gsl_matrix_uchar_scale (gsl_matrix_uchar * a, const double x);
+int gsl_matrix_uchar_add_constant (gsl_matrix_uchar * a, const double x);
+int gsl_matrix_uchar_add_diagonal (gsl_matrix_uchar * a, const double x);
+
+/***********************************************************************/
+/* The functions below are obsolete */
+/***********************************************************************/
+int gsl_matrix_uchar_get_row(gsl_vector_uchar * v, const gsl_matrix_uchar * m, const size_t i);
+int gsl_matrix_uchar_get_col(gsl_vector_uchar * v, const gsl_matrix_uchar * m, const size_t j);
+int gsl_matrix_uchar_set_row(gsl_matrix_uchar * m, const size_t i, const gsl_vector_uchar * v);
+int gsl_matrix_uchar_set_col(gsl_matrix_uchar * m, const size_t j, const gsl_vector_uchar * v);
+/***********************************************************************/
+
+/* inline functions if you are using GCC */
+
+INLINE_DECL unsigned char gsl_matrix_uchar_get(const gsl_matrix_uchar * m, const size_t i, const size_t j);
+INLINE_DECL void gsl_matrix_uchar_set(gsl_matrix_uchar * m, const size_t i, const size_t j, const unsigned char x);
+INLINE_DECL unsigned char * gsl_matrix_uchar_ptr(gsl_matrix_uchar * m, const size_t i, const size_t j);
+INLINE_DECL const unsigned char * gsl_matrix_uchar_const_ptr(const gsl_matrix_uchar * m, const size_t i, const size_t j);
+
+#ifdef HAVE_INLINE
+INLINE_FUN
+unsigned char
+gsl_matrix_uchar_get(const gsl_matrix_uchar * m, const size_t i, const size_t j)
+{
+#if GSL_RANGE_CHECK
+ if (GSL_RANGE_COND(1))
+ {
+ if (i >= m->size1)
+ {
+ GSL_ERROR_VAL("first index out of range", GSL_EINVAL, 0) ;
+ }
+ else if (j >= m->size2)
+ {
+ GSL_ERROR_VAL("second index out of range", GSL_EINVAL, 0) ;
+ }
+ }
+#endif
+ return m->data[i * m->tda + j] ;
+}
+
+INLINE_FUN
+void
+gsl_matrix_uchar_set(gsl_matrix_uchar * m, const size_t i, const size_t j, const unsigned char x)
+{
+#if GSL_RANGE_CHECK
+ if (GSL_RANGE_COND(1))
+ {
+ if (i >= m->size1)
+ {
+ GSL_ERROR_VOID("first index out of range", GSL_EINVAL) ;
+ }
+ else if (j >= m->size2)
+ {
+ GSL_ERROR_VOID("second index out of range", GSL_EINVAL) ;
+ }
+ }
+#endif
+ m->data[i * m->tda + j] = x ;
+}
+
+INLINE_FUN
+unsigned char *
+gsl_matrix_uchar_ptr(gsl_matrix_uchar * m, const size_t i, const size_t j)
+{
+#if GSL_RANGE_CHECK
+ if (GSL_RANGE_COND(1))
+ {
+ if (i >= m->size1)
+ {
+ GSL_ERROR_NULL("first index out of range", GSL_EINVAL) ;
+ }
+ else if (j >= m->size2)
+ {
+ GSL_ERROR_NULL("second index out of range", GSL_EINVAL) ;
+ }
+ }
+#endif
+ return (unsigned char *) (m->data + (i * m->tda + j)) ;
+}
+
+INLINE_FUN
+const unsigned char *
+gsl_matrix_uchar_const_ptr(const gsl_matrix_uchar * m, const size_t i, const size_t j)
+{
+#if GSL_RANGE_CHECK
+ if (GSL_RANGE_COND(1))
+ {
+ if (i >= m->size1)
+ {
+ GSL_ERROR_NULL("first index out of range", GSL_EINVAL) ;
+ }
+ else if (j >= m->size2)
+ {
+ GSL_ERROR_NULL("second index out of range", GSL_EINVAL) ;
+ }
+ }
+#endif
+ return (const unsigned char *) (m->data + (i * m->tda + j)) ;
+}
+
+#endif
+
+__END_DECLS
+
+#endif /* __GSL_MATRIX_UCHAR_H__ */
diff --git a/thirdparty/includes/GSL/gsl/gsl_matrix_uint.h b/thirdparty/includes/GSL/gsl/gsl_matrix_uint.h
new file mode 100644
index 0000000..abb2670
--- /dev/null
+++ b/thirdparty/includes/GSL/gsl/gsl_matrix_uint.h
@@ -0,0 +1,350 @@
+/* matrix/gsl_matrix_uint.h
+ *
+ * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Gerard Jungman, Brian Gough
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GSL_MATRIX_UINT_H__
+#define __GSL_MATRIX_UINT_H__
+
+#include
+#include
+#include
+#include
+#include
+#include
+
+#undef __BEGIN_DECLS
+#undef __END_DECLS
+#ifdef __cplusplus
+# define __BEGIN_DECLS extern "C" {
+# define __END_DECLS }
+#else
+# define __BEGIN_DECLS /* empty */
+# define __END_DECLS /* empty */
+#endif
+
+__BEGIN_DECLS
+
+typedef struct
+{
+ size_t size1;
+ size_t size2;
+ size_t tda;
+ unsigned int * data;
+ gsl_block_uint * block;
+ int owner;
+} gsl_matrix_uint;
+
+typedef struct
+{
+ gsl_matrix_uint matrix;
+} _gsl_matrix_uint_view;
+
+typedef _gsl_matrix_uint_view gsl_matrix_uint_view;
+
+typedef struct
+{
+ gsl_matrix_uint matrix;
+} _gsl_matrix_uint_const_view;
+
+typedef const _gsl_matrix_uint_const_view gsl_matrix_uint_const_view;
+
+/* Allocation */
+
+gsl_matrix_uint *
+gsl_matrix_uint_alloc (const size_t n1, const size_t n2);
+
+gsl_matrix_uint *
+gsl_matrix_uint_calloc (const size_t n1, const size_t n2);
+
+gsl_matrix_uint *
+gsl_matrix_uint_alloc_from_block (gsl_block_uint * b,
+ const size_t offset,
+ const size_t n1,
+ const size_t n2,
+ const size_t d2);
+
+gsl_matrix_uint *
+gsl_matrix_uint_alloc_from_matrix (gsl_matrix_uint * m,
+ const size_t k1,
+ const size_t k2,
+ const size_t n1,
+ const size_t n2);
+
+gsl_vector_uint *
+gsl_vector_uint_alloc_row_from_matrix (gsl_matrix_uint * m,
+ const size_t i);
+
+gsl_vector_uint *
+gsl_vector_uint_alloc_col_from_matrix (gsl_matrix_uint * m,
+ const size_t j);
+
+void gsl_matrix_uint_free (gsl_matrix_uint * m);
+
+/* Views */
+
+_gsl_matrix_uint_view
+gsl_matrix_uint_submatrix (gsl_matrix_uint * m,
+ const size_t i, const size_t j,
+ const size_t n1, const size_t n2);
+
+_gsl_vector_uint_view
+gsl_matrix_uint_row (gsl_matrix_uint * m, const size_t i);
+
+_gsl_vector_uint_view
+gsl_matrix_uint_column (gsl_matrix_uint * m, const size_t j);
+
+_gsl_vector_uint_view
+gsl_matrix_uint_diagonal (gsl_matrix_uint * m);
+
+_gsl_vector_uint_view
+gsl_matrix_uint_subdiagonal (gsl_matrix_uint * m, const size_t k);
+
+_gsl_vector_uint_view
+gsl_matrix_uint_superdiagonal (gsl_matrix_uint * m, const size_t k);
+
+_gsl_vector_uint_view
+gsl_matrix_uint_subrow (gsl_matrix_uint * m, const size_t i,
+ const size_t offset, const size_t n);
+
+_gsl_vector_uint_view
+gsl_matrix_uint_subcolumn (gsl_matrix_uint * m, const size_t j,
+ const size_t offset, const size_t n);
+
+_gsl_matrix_uint_view
+gsl_matrix_uint_view_array (unsigned int * base,
+ const size_t n1,
+ const size_t n2);
+
+_gsl_matrix_uint_view
+gsl_matrix_uint_view_array_with_tda (unsigned int * base,
+ const size_t n1,
+ const size_t n2,
+ const size_t tda);
+
+
+_gsl_matrix_uint_view
+gsl_matrix_uint_view_vector (gsl_vector_uint * v,
+ const size_t n1,
+ const size_t n2);
+
+_gsl_matrix_uint_view
+gsl_matrix_uint_view_vector_with_tda (gsl_vector_uint * v,
+ const size_t n1,
+ const size_t n2,
+ const size_t tda);
+
+
+_gsl_matrix_uint_const_view
+gsl_matrix_uint_const_submatrix (const gsl_matrix_uint * m,
+ const size_t i, const size_t j,
+ const size_t n1, const size_t n2);
+
+_gsl_vector_uint_const_view
+gsl_matrix_uint_const_row (const gsl_matrix_uint * m,
+ const size_t i);
+
+_gsl_vector_uint_const_view
+gsl_matrix_uint_const_column (const gsl_matrix_uint * m,
+ const size_t j);
+
+_gsl_vector_uint_const_view
+gsl_matrix_uint_const_diagonal (const gsl_matrix_uint * m);
+
+_gsl_vector_uint_const_view
+gsl_matrix_uint_const_subdiagonal (const gsl_matrix_uint * m,
+ const size_t k);
+
+_gsl_vector_uint_const_view
+gsl_matrix_uint_const_superdiagonal (const gsl_matrix_uint * m,
+ const size_t k);
+
+_gsl_vector_uint_const_view
+gsl_matrix_uint_const_subrow (const gsl_matrix_uint * m, const size_t i,
+ const size_t offset, const size_t n);
+
+_gsl_vector_uint_const_view
+gsl_matrix_uint_const_subcolumn (const gsl_matrix_uint * m, const size_t j,
+ const size_t offset, const size_t n);
+
+_gsl_matrix_uint_const_view
+gsl_matrix_uint_const_view_array (const unsigned int * base,
+ const size_t n1,
+ const size_t n2);
+
+_gsl_matrix_uint_const_view
+gsl_matrix_uint_const_view_array_with_tda (const unsigned int * base,
+ const size_t n1,
+ const size_t n2,
+ const size_t tda);
+
+_gsl_matrix_uint_const_view
+gsl_matrix_uint_const_view_vector (const gsl_vector_uint * v,
+ const size_t n1,
+ const size_t n2);
+
+_gsl_matrix_uint_const_view
+gsl_matrix_uint_const_view_vector_with_tda (const gsl_vector_uint * v,
+ const size_t n1,
+ const size_t n2,
+ const size_t tda);
+
+/* Operations */
+
+void gsl_matrix_uint_set_zero (gsl_matrix_uint * m);
+void gsl_matrix_uint_set_identity (gsl_matrix_uint * m);
+void gsl_matrix_uint_set_all (gsl_matrix_uint * m, unsigned int x);
+
+int gsl_matrix_uint_fread (FILE * stream, gsl_matrix_uint * m) ;
+int gsl_matrix_uint_fwrite (FILE * stream, const gsl_matrix_uint * m) ;
+int gsl_matrix_uint_fscanf (FILE * stream, gsl_matrix_uint * m);
+int gsl_matrix_uint_fprintf (FILE * stream, const gsl_matrix_uint * m, const char * format);
+
+int gsl_matrix_uint_memcpy(gsl_matrix_uint * dest, const gsl_matrix_uint * src);
+int gsl_matrix_uint_swap(gsl_matrix_uint * m1, gsl_matrix_uint * m2);
+
+int gsl_matrix_uint_swap_rows(gsl_matrix_uint * m, const size_t i, const size_t j);
+int gsl_matrix_uint_swap_columns(gsl_matrix_uint * m, const size_t i, const size_t j);
+int gsl_matrix_uint_swap_rowcol(gsl_matrix_uint * m, const size_t i, const size_t j);
+int gsl_matrix_uint_transpose (gsl_matrix_uint * m);
+int gsl_matrix_uint_transpose_memcpy (gsl_matrix_uint * dest, const gsl_matrix_uint * src);
+
+unsigned int gsl_matrix_uint_max (const gsl_matrix_uint * m);
+unsigned int gsl_matrix_uint_min (const gsl_matrix_uint * m);
+void gsl_matrix_uint_minmax (const gsl_matrix_uint * m, unsigned int * min_out, unsigned int * max_out);
+
+void gsl_matrix_uint_max_index (const gsl_matrix_uint * m, size_t * imax, size_t *jmax);
+void gsl_matrix_uint_min_index (const gsl_matrix_uint * m, size_t * imin, size_t *jmin);
+void gsl_matrix_uint_minmax_index (const gsl_matrix_uint * m, size_t * imin, size_t * jmin, size_t * imax, size_t * jmax);
+
+int gsl_matrix_uint_equal (const gsl_matrix_uint * a, const gsl_matrix_uint * b);
+
+int gsl_matrix_uint_isnull (const gsl_matrix_uint * m);
+int gsl_matrix_uint_ispos (const gsl_matrix_uint * m);
+int gsl_matrix_uint_isneg (const gsl_matrix_uint * m);
+int gsl_matrix_uint_isnonneg (const gsl_matrix_uint * m);
+
+int gsl_matrix_uint_add (gsl_matrix_uint * a, const gsl_matrix_uint * b);
+int gsl_matrix_uint_sub (gsl_matrix_uint * a, const gsl_matrix_uint * b);
+int gsl_matrix_uint_mul_elements (gsl_matrix_uint * a, const gsl_matrix_uint * b);
+int gsl_matrix_uint_div_elements (gsl_matrix_uint * a, const gsl_matrix_uint * b);
+int gsl_matrix_uint_scale (gsl_matrix_uint * a, const double x);
+int gsl_matrix_uint_add_constant (gsl_matrix_uint * a, const double x);
+int gsl_matrix_uint_add_diagonal (gsl_matrix_uint * a, const double x);
+
+/***********************************************************************/
+/* The functions below are obsolete */
+/***********************************************************************/
+int gsl_matrix_uint_get_row(gsl_vector_uint * v, const gsl_matrix_uint * m, const size_t i);
+int gsl_matrix_uint_get_col(gsl_vector_uint * v, const gsl_matrix_uint * m, const size_t j);
+int gsl_matrix_uint_set_row(gsl_matrix_uint * m, const size_t i, const gsl_vector_uint * v);
+int gsl_matrix_uint_set_col(gsl_matrix_uint * m, const size_t j, const gsl_vector_uint * v);
+/***********************************************************************/
+
+/* inline functions if you are using GCC */
+
+INLINE_DECL unsigned int gsl_matrix_uint_get(const gsl_matrix_uint * m, const size_t i, const size_t j);
+INLINE_DECL void gsl_matrix_uint_set(gsl_matrix_uint * m, const size_t i, const size_t j, const unsigned int x);
+INLINE_DECL unsigned int * gsl_matrix_uint_ptr(gsl_matrix_uint * m, const size_t i, const size_t j);
+INLINE_DECL const unsigned int * gsl_matrix_uint_const_ptr(const gsl_matrix_uint * m, const size_t i, const size_t j);
+
+#ifdef HAVE_INLINE
+INLINE_FUN
+unsigned int
+gsl_matrix_uint_get(const gsl_matrix_uint * m, const size_t i, const size_t j)
+{
+#if GSL_RANGE_CHECK
+ if (GSL_RANGE_COND(1))
+ {
+ if (i >= m->size1)
+ {
+ GSL_ERROR_VAL("first index out of range", GSL_EINVAL, 0) ;
+ }
+ else if (j >= m->size2)
+ {
+ GSL_ERROR_VAL("second index out of range", GSL_EINVAL, 0) ;
+ }
+ }
+#endif
+ return m->data[i * m->tda + j] ;
+}
+
+INLINE_FUN
+void
+gsl_matrix_uint_set(gsl_matrix_uint * m, const size_t i, const size_t j, const unsigned int x)
+{
+#if GSL_RANGE_CHECK
+ if (GSL_RANGE_COND(1))
+ {
+ if (i >= m->size1)
+ {
+ GSL_ERROR_VOID("first index out of range", GSL_EINVAL) ;
+ }
+ else if (j >= m->size2)
+ {
+ GSL_ERROR_VOID("second index out of range", GSL_EINVAL) ;
+ }
+ }
+#endif
+ m->data[i * m->tda + j] = x ;
+}
+
+INLINE_FUN
+unsigned int *
+gsl_matrix_uint_ptr(gsl_matrix_uint * m, const size_t i, const size_t j)
+{
+#if GSL_RANGE_CHECK
+ if (GSL_RANGE_COND(1))
+ {
+ if (i >= m->size1)
+ {
+ GSL_ERROR_NULL("first index out of range", GSL_EINVAL) ;
+ }
+ else if (j >= m->size2)
+ {
+ GSL_ERROR_NULL("second index out of range", GSL_EINVAL) ;
+ }
+ }
+#endif
+ return (unsigned int *) (m->data + (i * m->tda + j)) ;
+}
+
+INLINE_FUN
+const unsigned int *
+gsl_matrix_uint_const_ptr(const gsl_matrix_uint * m, const size_t i, const size_t j)
+{
+#if GSL_RANGE_CHECK
+ if (GSL_RANGE_COND(1))
+ {
+ if (i >= m->size1)
+ {
+ GSL_ERROR_NULL("first index out of range", GSL_EINVAL) ;
+ }
+ else if (j >= m->size2)
+ {
+ GSL_ERROR_NULL("second index out of range", GSL_EINVAL) ;
+ }
+ }
+#endif
+ return (const unsigned int *) (m->data + (i * m->tda + j)) ;
+}
+
+#endif
+
+__END_DECLS
+
+#endif /* __GSL_MATRIX_UINT_H__ */
diff --git a/thirdparty/includes/GSL/gsl/gsl_matrix_ulong.h b/thirdparty/includes/GSL/gsl/gsl_matrix_ulong.h
new file mode 100644
index 0000000..2424068
--- /dev/null
+++ b/thirdparty/includes/GSL/gsl/gsl_matrix_ulong.h
@@ -0,0 +1,350 @@
+/* matrix/gsl_matrix_ulong.h
+ *
+ * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Gerard Jungman, Brian Gough
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GSL_MATRIX_ULONG_H__
+#define __GSL_MATRIX_ULONG_H__
+
+#include
+#include
+#include
+#include
+#include
+#include
+
+#undef __BEGIN_DECLS
+#undef __END_DECLS
+#ifdef __cplusplus
+# define __BEGIN_DECLS extern "C" {
+# define __END_DECLS }
+#else
+# define __BEGIN_DECLS /* empty */
+# define __END_DECLS /* empty */
+#endif
+
+__BEGIN_DECLS
+
+typedef struct
+{
+ size_t size1;
+ size_t size2;
+ size_t tda;
+ unsigned long * data;
+ gsl_block_ulong * block;
+ int owner;
+} gsl_matrix_ulong;
+
+typedef struct
+{
+ gsl_matrix_ulong matrix;
+} _gsl_matrix_ulong_view;
+
+typedef _gsl_matrix_ulong_view gsl_matrix_ulong_view;
+
+typedef struct
+{
+ gsl_matrix_ulong matrix;
+} _gsl_matrix_ulong_const_view;
+
+typedef const _gsl_matrix_ulong_const_view gsl_matrix_ulong_const_view;
+
+/* Allocation */
+
+gsl_matrix_ulong *
+gsl_matrix_ulong_alloc (const size_t n1, const size_t n2);
+
+gsl_matrix_ulong *
+gsl_matrix_ulong_calloc (const size_t n1, const size_t n2);
+
+gsl_matrix_ulong *
+gsl_matrix_ulong_alloc_from_block (gsl_block_ulong * b,
+ const size_t offset,
+ const size_t n1,
+ const size_t n2,
+ const size_t d2);
+
+gsl_matrix_ulong *
+gsl_matrix_ulong_alloc_from_matrix (gsl_matrix_ulong * m,
+ const size_t k1,
+ const size_t k2,
+ const size_t n1,
+ const size_t n2);
+
+gsl_vector_ulong *
+gsl_vector_ulong_alloc_row_from_matrix (gsl_matrix_ulong * m,
+ const size_t i);
+
+gsl_vector_ulong *
+gsl_vector_ulong_alloc_col_from_matrix (gsl_matrix_ulong * m,
+ const size_t j);
+
+void gsl_matrix_ulong_free (gsl_matrix_ulong * m);
+
+/* Views */
+
+_gsl_matrix_ulong_view
+gsl_matrix_ulong_submatrix (gsl_matrix_ulong * m,
+ const size_t i, const size_t j,
+ const size_t n1, const size_t n2);
+
+_gsl_vector_ulong_view
+gsl_matrix_ulong_row (gsl_matrix_ulong * m, const size_t i);
+
+_gsl_vector_ulong_view
+gsl_matrix_ulong_column (gsl_matrix_ulong * m, const size_t j);
+
+_gsl_vector_ulong_view
+gsl_matrix_ulong_diagonal (gsl_matrix_ulong * m);
+
+_gsl_vector_ulong_view
+gsl_matrix_ulong_subdiagonal (gsl_matrix_ulong * m, const size_t k);
+
+_gsl_vector_ulong_view
+gsl_matrix_ulong_superdiagonal (gsl_matrix_ulong * m, const size_t k);
+
+_gsl_vector_ulong_view
+gsl_matrix_ulong_subrow (gsl_matrix_ulong * m, const size_t i,
+ const size_t offset, const size_t n);
+
+_gsl_vector_ulong_view
+gsl_matrix_ulong_subcolumn (gsl_matrix_ulong * m, const size_t j,
+ const size_t offset, const size_t n);
+
+_gsl_matrix_ulong_view
+gsl_matrix_ulong_view_array (unsigned long * base,
+ const size_t n1,
+ const size_t n2);
+
+_gsl_matrix_ulong_view
+gsl_matrix_ulong_view_array_with_tda (unsigned long * base,
+ const size_t n1,
+ const size_t n2,
+ const size_t tda);
+
+
+_gsl_matrix_ulong_view
+gsl_matrix_ulong_view_vector (gsl_vector_ulong * v,
+ const size_t n1,
+ const size_t n2);
+
+_gsl_matrix_ulong_view
+gsl_matrix_ulong_view_vector_with_tda (gsl_vector_ulong * v,
+ const size_t n1,
+ const size_t n2,
+ const size_t tda);
+
+
+_gsl_matrix_ulong_const_view
+gsl_matrix_ulong_const_submatrix (const gsl_matrix_ulong * m,
+ const size_t i, const size_t j,
+ const size_t n1, const size_t n2);
+
+_gsl_vector_ulong_const_view
+gsl_matrix_ulong_const_row (const gsl_matrix_ulong * m,
+ const size_t i);
+
+_gsl_vector_ulong_const_view
+gsl_matrix_ulong_const_column (const gsl_matrix_ulong * m,
+ const size_t j);
+
+_gsl_vector_ulong_const_view
+gsl_matrix_ulong_const_diagonal (const gsl_matrix_ulong * m);
+
+_gsl_vector_ulong_const_view
+gsl_matrix_ulong_const_subdiagonal (const gsl_matrix_ulong * m,
+ const size_t k);
+
+_gsl_vector_ulong_const_view
+gsl_matrix_ulong_const_superdiagonal (const gsl_matrix_ulong * m,
+ const size_t k);
+
+_gsl_vector_ulong_const_view
+gsl_matrix_ulong_const_subrow (const gsl_matrix_ulong * m, const size_t i,
+ const size_t offset, const size_t n);
+
+_gsl_vector_ulong_const_view
+gsl_matrix_ulong_const_subcolumn (const gsl_matrix_ulong * m, const size_t j,
+ const size_t offset, const size_t n);
+
+_gsl_matrix_ulong_const_view
+gsl_matrix_ulong_const_view_array (const unsigned long * base,
+ const size_t n1,
+ const size_t n2);
+
+_gsl_matrix_ulong_const_view
+gsl_matrix_ulong_const_view_array_with_tda (const unsigned long * base,
+ const size_t n1,
+ const size_t n2,
+ const size_t tda);
+
+_gsl_matrix_ulong_const_view
+gsl_matrix_ulong_const_view_vector (const gsl_vector_ulong * v,
+ const size_t n1,
+ const size_t n2);
+
+_gsl_matrix_ulong_const_view
+gsl_matrix_ulong_const_view_vector_with_tda (const gsl_vector_ulong * v,
+ const size_t n1,
+ const size_t n2,
+ const size_t tda);
+
+/* Operations */
+
+void gsl_matrix_ulong_set_zero (gsl_matrix_ulong * m);
+void gsl_matrix_ulong_set_identity (gsl_matrix_ulong * m);
+void gsl_matrix_ulong_set_all (gsl_matrix_ulong * m, unsigned long x);
+
+int gsl_matrix_ulong_fread (FILE * stream, gsl_matrix_ulong * m) ;
+int gsl_matrix_ulong_fwrite (FILE * stream, const gsl_matrix_ulong * m) ;
+int gsl_matrix_ulong_fscanf (FILE * stream, gsl_matrix_ulong * m);
+int gsl_matrix_ulong_fprintf (FILE * stream, const gsl_matrix_ulong * m, const char * format);
+
+int gsl_matrix_ulong_memcpy(gsl_matrix_ulong * dest, const gsl_matrix_ulong * src);
+int gsl_matrix_ulong_swap(gsl_matrix_ulong * m1, gsl_matrix_ulong * m2);
+
+int gsl_matrix_ulong_swap_rows(gsl_matrix_ulong * m, const size_t i, const size_t j);
+int gsl_matrix_ulong_swap_columns(gsl_matrix_ulong * m, const size_t i, const size_t j);
+int gsl_matrix_ulong_swap_rowcol(gsl_matrix_ulong * m, const size_t i, const size_t j);
+int gsl_matrix_ulong_transpose (gsl_matrix_ulong * m);
+int gsl_matrix_ulong_transpose_memcpy (gsl_matrix_ulong * dest, const gsl_matrix_ulong * src);
+
+unsigned long gsl_matrix_ulong_max (const gsl_matrix_ulong * m);
+unsigned long gsl_matrix_ulong_min (const gsl_matrix_ulong * m);
+void gsl_matrix_ulong_minmax (const gsl_matrix_ulong * m, unsigned long * min_out, unsigned long * max_out);
+
+void gsl_matrix_ulong_max_index (const gsl_matrix_ulong * m, size_t * imax, size_t *jmax);
+void gsl_matrix_ulong_min_index (const gsl_matrix_ulong * m, size_t * imin, size_t *jmin);
+void gsl_matrix_ulong_minmax_index (const gsl_matrix_ulong * m, size_t * imin, size_t * jmin, size_t * imax, size_t * jmax);
+
+int gsl_matrix_ulong_equal (const gsl_matrix_ulong * a, const gsl_matrix_ulong * b);
+
+int gsl_matrix_ulong_isnull (const gsl_matrix_ulong * m);
+int gsl_matrix_ulong_ispos (const gsl_matrix_ulong * m);
+int gsl_matrix_ulong_isneg (const gsl_matrix_ulong * m);
+int gsl_matrix_ulong_isnonneg (const gsl_matrix_ulong * m);
+
+int gsl_matrix_ulong_add (gsl_matrix_ulong * a, const gsl_matrix_ulong * b);
+int gsl_matrix_ulong_sub (gsl_matrix_ulong * a, const gsl_matrix_ulong * b);
+int gsl_matrix_ulong_mul_elements (gsl_matrix_ulong * a, const gsl_matrix_ulong * b);
+int gsl_matrix_ulong_div_elements (gsl_matrix_ulong * a, const gsl_matrix_ulong * b);
+int gsl_matrix_ulong_scale (gsl_matrix_ulong * a, const double x);
+int gsl_matrix_ulong_add_constant (gsl_matrix_ulong * a, const double x);
+int gsl_matrix_ulong_add_diagonal (gsl_matrix_ulong * a, const double x);
+
+/***********************************************************************/
+/* The functions below are obsolete */
+/***********************************************************************/
+int gsl_matrix_ulong_get_row(gsl_vector_ulong * v, const gsl_matrix_ulong * m, const size_t i);
+int gsl_matrix_ulong_get_col(gsl_vector_ulong * v, const gsl_matrix_ulong * m, const size_t j);
+int gsl_matrix_ulong_set_row(gsl_matrix_ulong * m, const size_t i, const gsl_vector_ulong * v);
+int gsl_matrix_ulong_set_col(gsl_matrix_ulong * m, const size_t j, const gsl_vector_ulong * v);
+/***********************************************************************/
+
+/* inline functions if you are using GCC */
+
+INLINE_DECL unsigned long gsl_matrix_ulong_get(const gsl_matrix_ulong * m, const size_t i, const size_t j);
+INLINE_DECL void gsl_matrix_ulong_set(gsl_matrix_ulong * m, const size_t i, const size_t j, const unsigned long x);
+INLINE_DECL unsigned long * gsl_matrix_ulong_ptr(gsl_matrix_ulong * m, const size_t i, const size_t j);
+INLINE_DECL const unsigned long * gsl_matrix_ulong_const_ptr(const gsl_matrix_ulong * m, const size_t i, const size_t j);
+
+#ifdef HAVE_INLINE
+INLINE_FUN
+unsigned long
+gsl_matrix_ulong_get(const gsl_matrix_ulong * m, const size_t i, const size_t j)
+{
+#if GSL_RANGE_CHECK
+ if (GSL_RANGE_COND(1))
+ {
+ if (i >= m->size1)
+ {
+ GSL_ERROR_VAL("first index out of range", GSL_EINVAL, 0) ;
+ }
+ else if (j >= m->size2)
+ {
+ GSL_ERROR_VAL("second index out of range", GSL_EINVAL, 0) ;
+ }
+ }
+#endif
+ return m->data[i * m->tda + j] ;
+}
+
+INLINE_FUN
+void
+gsl_matrix_ulong_set(gsl_matrix_ulong * m, const size_t i, const size_t j, const unsigned long x)
+{
+#if GSL_RANGE_CHECK
+ if (GSL_RANGE_COND(1))
+ {
+ if (i >= m->size1)
+ {
+ GSL_ERROR_VOID("first index out of range", GSL_EINVAL) ;
+ }
+ else if (j >= m->size2)
+ {
+ GSL_ERROR_VOID("second index out of range", GSL_EINVAL) ;
+ }
+ }
+#endif
+ m->data[i * m->tda + j] = x ;
+}
+
+INLINE_FUN
+unsigned long *
+gsl_matrix_ulong_ptr(gsl_matrix_ulong * m, const size_t i, const size_t j)
+{
+#if GSL_RANGE_CHECK
+ if (GSL_RANGE_COND(1))
+ {
+ if (i >= m->size1)
+ {
+ GSL_ERROR_NULL("first index out of range", GSL_EINVAL) ;
+ }
+ else if (j >= m->size2)
+ {
+ GSL_ERROR_NULL("second index out of range", GSL_EINVAL) ;
+ }
+ }
+#endif
+ return (unsigned long *) (m->data + (i * m->tda + j)) ;
+}
+
+INLINE_FUN
+const unsigned long *
+gsl_matrix_ulong_const_ptr(const gsl_matrix_ulong * m, const size_t i, const size_t j)
+{
+#if GSL_RANGE_CHECK
+ if (GSL_RANGE_COND(1))
+ {
+ if (i >= m->size1)
+ {
+ GSL_ERROR_NULL("first index out of range", GSL_EINVAL) ;
+ }
+ else if (j >= m->size2)
+ {
+ GSL_ERROR_NULL("second index out of range", GSL_EINVAL) ;
+ }
+ }
+#endif
+ return (const unsigned long *) (m->data + (i * m->tda + j)) ;
+}
+
+#endif
+
+__END_DECLS
+
+#endif /* __GSL_MATRIX_ULONG_H__ */
diff --git a/thirdparty/includes/GSL/gsl/gsl_matrix_ushort.h b/thirdparty/includes/GSL/gsl/gsl_matrix_ushort.h
new file mode 100644
index 0000000..422b394
--- /dev/null
+++ b/thirdparty/includes/GSL/gsl/gsl_matrix_ushort.h
@@ -0,0 +1,350 @@
+/* matrix/gsl_matrix_ushort.h
+ *
+ * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Gerard Jungman, Brian Gough
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GSL_MATRIX_USHORT_H__
+#define __GSL_MATRIX_USHORT_H__
+
+#include
+#include
+#include
+#include
+#include
+#include
+
+#undef __BEGIN_DECLS
+#undef __END_DECLS
+#ifdef __cplusplus
+# define __BEGIN_DECLS extern "C" {
+# define __END_DECLS }
+#else
+# define __BEGIN_DECLS /* empty */
+# define __END_DECLS /* empty */
+#endif
+
+__BEGIN_DECLS
+
+typedef struct
+{
+ size_t size1;
+ size_t size2;
+ size_t tda;
+ unsigned short * data;
+ gsl_block_ushort * block;
+ int owner;
+} gsl_matrix_ushort;
+
+typedef struct
+{
+ gsl_matrix_ushort matrix;
+} _gsl_matrix_ushort_view;
+
+typedef _gsl_matrix_ushort_view gsl_matrix_ushort_view;
+
+typedef struct
+{
+ gsl_matrix_ushort matrix;
+} _gsl_matrix_ushort_const_view;
+
+typedef const _gsl_matrix_ushort_const_view gsl_matrix_ushort_const_view;
+
+/* Allocation */
+
+gsl_matrix_ushort *
+gsl_matrix_ushort_alloc (const size_t n1, const size_t n2);
+
+gsl_matrix_ushort *
+gsl_matrix_ushort_calloc (const size_t n1, const size_t n2);
+
+gsl_matrix_ushort *
+gsl_matrix_ushort_alloc_from_block (gsl_block_ushort * b,
+ const size_t offset,
+ const size_t n1,
+ const size_t n2,
+ const size_t d2);
+
+gsl_matrix_ushort *
+gsl_matrix_ushort_alloc_from_matrix (gsl_matrix_ushort * m,
+ const size_t k1,
+ const size_t k2,
+ const size_t n1,
+ const size_t n2);
+
+gsl_vector_ushort *
+gsl_vector_ushort_alloc_row_from_matrix (gsl_matrix_ushort * m,
+ const size_t i);
+
+gsl_vector_ushort *
+gsl_vector_ushort_alloc_col_from_matrix (gsl_matrix_ushort * m,
+ const size_t j);
+
+void gsl_matrix_ushort_free (gsl_matrix_ushort * m);
+
+/* Views */
+
+_gsl_matrix_ushort_view
+gsl_matrix_ushort_submatrix (gsl_matrix_ushort * m,
+ const size_t i, const size_t j,
+ const size_t n1, const size_t n2);
+
+_gsl_vector_ushort_view
+gsl_matrix_ushort_row (gsl_matrix_ushort * m, const size_t i);
+
+_gsl_vector_ushort_view
+gsl_matrix_ushort_column (gsl_matrix_ushort * m, const size_t j);
+
+_gsl_vector_ushort_view
+gsl_matrix_ushort_diagonal (gsl_matrix_ushort * m);
+
+_gsl_vector_ushort_view
+gsl_matrix_ushort_subdiagonal (gsl_matrix_ushort * m, const size_t k);
+
+_gsl_vector_ushort_view
+gsl_matrix_ushort_superdiagonal (gsl_matrix_ushort * m, const size_t k);
+
+_gsl_vector_ushort_view
+gsl_matrix_ushort_subrow (gsl_matrix_ushort * m, const size_t i,
+ const size_t offset, const size_t n);
+
+_gsl_vector_ushort_view
+gsl_matrix_ushort_subcolumn (gsl_matrix_ushort * m, const size_t j,
+ const size_t offset, const size_t n);
+
+_gsl_matrix_ushort_view
+gsl_matrix_ushort_view_array (unsigned short * base,
+ const size_t n1,
+ const size_t n2);
+
+_gsl_matrix_ushort_view
+gsl_matrix_ushort_view_array_with_tda (unsigned short * base,
+ const size_t n1,
+ const size_t n2,
+ const size_t tda);
+
+
+_gsl_matrix_ushort_view
+gsl_matrix_ushort_view_vector (gsl_vector_ushort * v,
+ const size_t n1,
+ const size_t n2);
+
+_gsl_matrix_ushort_view
+gsl_matrix_ushort_view_vector_with_tda (gsl_vector_ushort * v,
+ const size_t n1,
+ const size_t n2,
+ const size_t tda);
+
+
+_gsl_matrix_ushort_const_view
+gsl_matrix_ushort_const_submatrix (const gsl_matrix_ushort * m,
+ const size_t i, const size_t j,
+ const size_t n1, const size_t n2);
+
+_gsl_vector_ushort_const_view
+gsl_matrix_ushort_const_row (const gsl_matrix_ushort * m,
+ const size_t i);
+
+_gsl_vector_ushort_const_view
+gsl_matrix_ushort_const_column (const gsl_matrix_ushort * m,
+ const size_t j);
+
+_gsl_vector_ushort_const_view
+gsl_matrix_ushort_const_diagonal (const gsl_matrix_ushort * m);
+
+_gsl_vector_ushort_const_view
+gsl_matrix_ushort_const_subdiagonal (const gsl_matrix_ushort * m,
+ const size_t k);
+
+_gsl_vector_ushort_const_view
+gsl_matrix_ushort_const_superdiagonal (const gsl_matrix_ushort * m,
+ const size_t k);
+
+_gsl_vector_ushort_const_view
+gsl_matrix_ushort_const_subrow (const gsl_matrix_ushort * m, const size_t i,
+ const size_t offset, const size_t n);
+
+_gsl_vector_ushort_const_view
+gsl_matrix_ushort_const_subcolumn (const gsl_matrix_ushort * m, const size_t j,
+ const size_t offset, const size_t n);
+
+_gsl_matrix_ushort_const_view
+gsl_matrix_ushort_const_view_array (const unsigned short * base,
+ const size_t n1,
+ const size_t n2);
+
+_gsl_matrix_ushort_const_view
+gsl_matrix_ushort_const_view_array_with_tda (const unsigned short * base,
+ const size_t n1,
+ const size_t n2,
+ const size_t tda);
+
+_gsl_matrix_ushort_const_view
+gsl_matrix_ushort_const_view_vector (const gsl_vector_ushort * v,
+ const size_t n1,
+ const size_t n2);
+
+_gsl_matrix_ushort_const_view
+gsl_matrix_ushort_const_view_vector_with_tda (const gsl_vector_ushort * v,
+ const size_t n1,
+ const size_t n2,
+ const size_t tda);
+
+/* Operations */
+
+void gsl_matrix_ushort_set_zero (gsl_matrix_ushort * m);
+void gsl_matrix_ushort_set_identity (gsl_matrix_ushort * m);
+void gsl_matrix_ushort_set_all (gsl_matrix_ushort * m, unsigned short x);
+
+int gsl_matrix_ushort_fread (FILE * stream, gsl_matrix_ushort * m) ;
+int gsl_matrix_ushort_fwrite (FILE * stream, const gsl_matrix_ushort * m) ;
+int gsl_matrix_ushort_fscanf (FILE * stream, gsl_matrix_ushort * m);
+int gsl_matrix_ushort_fprintf (FILE * stream, const gsl_matrix_ushort * m, const char * format);
+
+int gsl_matrix_ushort_memcpy(gsl_matrix_ushort * dest, const gsl_matrix_ushort * src);
+int gsl_matrix_ushort_swap(gsl_matrix_ushort * m1, gsl_matrix_ushort * m2);
+
+int gsl_matrix_ushort_swap_rows(gsl_matrix_ushort * m, const size_t i, const size_t j);
+int gsl_matrix_ushort_swap_columns(gsl_matrix_ushort * m, const size_t i, const size_t j);
+int gsl_matrix_ushort_swap_rowcol(gsl_matrix_ushort * m, const size_t i, const size_t j);
+int gsl_matrix_ushort_transpose (gsl_matrix_ushort * m);
+int gsl_matrix_ushort_transpose_memcpy (gsl_matrix_ushort * dest, const gsl_matrix_ushort * src);
+
+unsigned short gsl_matrix_ushort_max (const gsl_matrix_ushort * m);
+unsigned short gsl_matrix_ushort_min (const gsl_matrix_ushort * m);
+void gsl_matrix_ushort_minmax (const gsl_matrix_ushort * m, unsigned short * min_out, unsigned short * max_out);
+
+void gsl_matrix_ushort_max_index (const gsl_matrix_ushort * m, size_t * imax, size_t *jmax);
+void gsl_matrix_ushort_min_index (const gsl_matrix_ushort * m, size_t * imin, size_t *jmin);
+void gsl_matrix_ushort_minmax_index (const gsl_matrix_ushort * m, size_t * imin, size_t * jmin, size_t * imax, size_t * jmax);
+
+int gsl_matrix_ushort_equal (const gsl_matrix_ushort * a, const gsl_matrix_ushort * b);
+
+int gsl_matrix_ushort_isnull (const gsl_matrix_ushort * m);
+int gsl_matrix_ushort_ispos (const gsl_matrix_ushort * m);
+int gsl_matrix_ushort_isneg (const gsl_matrix_ushort * m);
+int gsl_matrix_ushort_isnonneg (const gsl_matrix_ushort * m);
+
+int gsl_matrix_ushort_add (gsl_matrix_ushort * a, const gsl_matrix_ushort * b);
+int gsl_matrix_ushort_sub (gsl_matrix_ushort * a, const gsl_matrix_ushort * b);
+int gsl_matrix_ushort_mul_elements (gsl_matrix_ushort * a, const gsl_matrix_ushort * b);
+int gsl_matrix_ushort_div_elements (gsl_matrix_ushort * a, const gsl_matrix_ushort * b);
+int gsl_matrix_ushort_scale (gsl_matrix_ushort * a, const double x);
+int gsl_matrix_ushort_add_constant (gsl_matrix_ushort * a, const double x);
+int gsl_matrix_ushort_add_diagonal (gsl_matrix_ushort * a, const double x);
+
+/***********************************************************************/
+/* The functions below are obsolete */
+/***********************************************************************/
+int gsl_matrix_ushort_get_row(gsl_vector_ushort * v, const gsl_matrix_ushort * m, const size_t i);
+int gsl_matrix_ushort_get_col(gsl_vector_ushort * v, const gsl_matrix_ushort * m, const size_t j);
+int gsl_matrix_ushort_set_row(gsl_matrix_ushort * m, const size_t i, const gsl_vector_ushort * v);
+int gsl_matrix_ushort_set_col(gsl_matrix_ushort * m, const size_t j, const gsl_vector_ushort * v);
+/***********************************************************************/
+
+/* inline functions if you are using GCC */
+
+INLINE_DECL unsigned short gsl_matrix_ushort_get(const gsl_matrix_ushort * m, const size_t i, const size_t j);
+INLINE_DECL void gsl_matrix_ushort_set(gsl_matrix_ushort * m, const size_t i, const size_t j, const unsigned short x);
+INLINE_DECL unsigned short * gsl_matrix_ushort_ptr(gsl_matrix_ushort * m, const size_t i, const size_t j);
+INLINE_DECL const unsigned short * gsl_matrix_ushort_const_ptr(const gsl_matrix_ushort * m, const size_t i, const size_t j);
+
+#ifdef HAVE_INLINE
+INLINE_FUN
+unsigned short
+gsl_matrix_ushort_get(const gsl_matrix_ushort * m, const size_t i, const size_t j)
+{
+#if GSL_RANGE_CHECK
+ if (GSL_RANGE_COND(1))
+ {
+ if (i >= m->size1)
+ {
+ GSL_ERROR_VAL("first index out of range", GSL_EINVAL, 0) ;
+ }
+ else if (j >= m->size2)
+ {
+ GSL_ERROR_VAL("second index out of range", GSL_EINVAL, 0) ;
+ }
+ }
+#endif
+ return m->data[i * m->tda + j] ;
+}
+
+INLINE_FUN
+void
+gsl_matrix_ushort_set(gsl_matrix_ushort * m, const size_t i, const size_t j, const unsigned short x)
+{
+#if GSL_RANGE_CHECK
+ if (GSL_RANGE_COND(1))
+ {
+ if (i >= m->size1)
+ {
+ GSL_ERROR_VOID("first index out of range", GSL_EINVAL) ;
+ }
+ else if (j >= m->size2)
+ {
+ GSL_ERROR_VOID("second index out of range", GSL_EINVAL) ;
+ }
+ }
+#endif
+ m->data[i * m->tda + j] = x ;
+}
+
+INLINE_FUN
+unsigned short *
+gsl_matrix_ushort_ptr(gsl_matrix_ushort * m, const size_t i, const size_t j)
+{
+#if GSL_RANGE_CHECK
+ if (GSL_RANGE_COND(1))
+ {
+ if (i >= m->size1)
+ {
+ GSL_ERROR_NULL("first index out of range", GSL_EINVAL) ;
+ }
+ else if (j >= m->size2)
+ {
+ GSL_ERROR_NULL("second index out of range", GSL_EINVAL) ;
+ }
+ }
+#endif
+ return (unsigned short *) (m->data + (i * m->tda + j)) ;
+}
+
+INLINE_FUN
+const unsigned short *
+gsl_matrix_ushort_const_ptr(const gsl_matrix_ushort * m, const size_t i, const size_t j)
+{
+#if GSL_RANGE_CHECK
+ if (GSL_RANGE_COND(1))
+ {
+ if (i >= m->size1)
+ {
+ GSL_ERROR_NULL("first index out of range", GSL_EINVAL) ;
+ }
+ else if (j >= m->size2)
+ {
+ GSL_ERROR_NULL("second index out of range", GSL_EINVAL) ;
+ }
+ }
+#endif
+ return (const unsigned short *) (m->data + (i * m->tda + j)) ;
+}
+
+#endif
+
+__END_DECLS
+
+#endif /* __GSL_MATRIX_USHORT_H__ */
diff --git a/thirdparty/includes/GSL/gsl/gsl_message.h b/thirdparty/includes/GSL/gsl/gsl_message.h
new file mode 100644
index 0000000..166ff9d
--- /dev/null
+++ b/thirdparty/includes/GSL/gsl/gsl_message.h
@@ -0,0 +1,80 @@
+/* err/gsl_message.h
+ *
+ * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Gerard Jungman, Brian Gough
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GSL_MESSAGE_H__
+#define __GSL_MESSAGE_H__
+#include
+
+#undef __BEGIN_DECLS
+#undef __END_DECLS
+#ifdef __cplusplus
+# define __BEGIN_DECLS extern "C" {
+# define __END_DECLS }
+#else
+# define __BEGIN_DECLS /* empty */
+# define __END_DECLS /* empty */
+#endif
+
+__BEGIN_DECLS
+
+/* Provide a general messaging service for client use. Messages can
+ * be selectively turned off at compile time by defining an
+ * appropriate message mask. Client code which uses the GSL_MESSAGE()
+ * macro must provide a mask which is or'ed with the GSL_MESSAGE_MASK.
+ *
+ * The messaging service can be completely turned off
+ * by defining GSL_MESSAGING_OFF. */
+
+void gsl_message(const char * message, const char * file, int line,
+ unsigned int mask);
+
+#ifndef GSL_MESSAGE_MASK
+#define GSL_MESSAGE_MASK 0xffffffffu /* default all messages allowed */
+#endif
+
+GSL_VAR unsigned int gsl_message_mask ;
+
+/* Provide some symolic masks for client ease of use. */
+
+enum {
+ GSL_MESSAGE_MASK_A = 1,
+ GSL_MESSAGE_MASK_B = 2,
+ GSL_MESSAGE_MASK_C = 4,
+ GSL_MESSAGE_MASK_D = 8,
+ GSL_MESSAGE_MASK_E = 16,
+ GSL_MESSAGE_MASK_F = 32,
+ GSL_MESSAGE_MASK_G = 64,
+ GSL_MESSAGE_MASK_H = 128
+} ;
+
+#ifdef GSL_MESSAGING_OFF /* throw away messages */
+#define GSL_MESSAGE(message, mask) do { } while(0)
+#else /* output all messages */
+#define GSL_MESSAGE(message, mask) \
+ do { \
+ if (mask & GSL_MESSAGE_MASK) \
+ gsl_message (message, __FILE__, __LINE__, mask) ; \
+ } while (0)
+#endif
+
+__END_DECLS
+
+#endif /* __GSL_MESSAGE_H__ */
+
+
diff --git a/thirdparty/includes/GSL/gsl/gsl_min.h b/thirdparty/includes/GSL/gsl/gsl_min.h
new file mode 100644
index 0000000..c179572
--- /dev/null
+++ b/thirdparty/includes/GSL/gsl/gsl_min.h
@@ -0,0 +1,111 @@
+/* min/gsl_min.h
+ *
+ * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007, 2009 Brian Gough
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GSL_MIN_H__
+#define __GSL_MIN_H__
+
+#include
+#include
+#include
+
+#undef __BEGIN_DECLS
+#undef __END_DECLS
+#ifdef __cplusplus
+# define __BEGIN_DECLS extern "C" {
+# define __END_DECLS }
+#else
+# define __BEGIN_DECLS /* empty */
+# define __END_DECLS /* empty */
+#endif
+
+__BEGIN_DECLS
+
+typedef struct
+ {
+ const char *name;
+ size_t size;
+ int (*set) (void *state, gsl_function * f, double x_minimum, double f_minimum, double x_lower, double f_lower, double x_upper, double f_upper);
+ int (*iterate) (void *state, gsl_function * f, double * x_minimum, double * f_minimum, double * x_lower, double * f_lower, double * x_upper, double * f_upper);
+ }
+gsl_min_fminimizer_type;
+
+typedef struct
+ {
+ const gsl_min_fminimizer_type * type;
+ gsl_function * function ;
+ double x_minimum ;
+ double x_lower ;
+ double x_upper ;
+ double f_minimum, f_lower, f_upper;
+ void *state;
+ }
+gsl_min_fminimizer;
+
+gsl_min_fminimizer *
+gsl_min_fminimizer_alloc (const gsl_min_fminimizer_type * T) ;
+
+void gsl_min_fminimizer_free (gsl_min_fminimizer * s);
+
+int gsl_min_fminimizer_set (gsl_min_fminimizer * s,
+ gsl_function * f, double x_minimum,
+ double x_lower, double x_upper);
+
+int gsl_min_fminimizer_set_with_values (gsl_min_fminimizer * s,
+ gsl_function * f,
+ double x_minimum, double f_minimum,
+ double x_lower, double f_lower,
+ double x_upper, double f_upper);
+
+int gsl_min_fminimizer_iterate (gsl_min_fminimizer * s);
+
+const char * gsl_min_fminimizer_name (const gsl_min_fminimizer * s);
+
+double gsl_min_fminimizer_x_minimum (const gsl_min_fminimizer * s);
+double gsl_min_fminimizer_x_lower (const gsl_min_fminimizer * s);
+double gsl_min_fminimizer_x_upper (const gsl_min_fminimizer * s);
+double gsl_min_fminimizer_f_minimum (const gsl_min_fminimizer * s);
+double gsl_min_fminimizer_f_lower (const gsl_min_fminimizer * s);
+double gsl_min_fminimizer_f_upper (const gsl_min_fminimizer * s);
+
+/* Deprecated, use x_minimum instead */
+double gsl_min_fminimizer_minimum (const gsl_min_fminimizer * s);
+
+int
+gsl_min_test_interval (double x_lower, double x_upper, double epsabs, double epsrel);
+
+GSL_VAR const gsl_min_fminimizer_type * gsl_min_fminimizer_goldensection;
+GSL_VAR const gsl_min_fminimizer_type * gsl_min_fminimizer_brent;
+GSL_VAR const gsl_min_fminimizer_type * gsl_min_fminimizer_quad_golden;
+
+typedef
+int (*gsl_min_bracketing_function)(gsl_function *f,
+ double *x_minimum,double * f_minimum,
+ double *x_lower, double * f_lower,
+ double *x_upper, double * f_upper,
+ size_t eval_max);
+
+int
+gsl_min_find_bracket(gsl_function *f,double *x_minimum,double * f_minimum,
+ double *x_lower, double * f_lower,
+ double *x_upper, double * f_upper,
+ size_t eval_max);
+
+__END_DECLS
+
+#endif /* __GSL_MIN_H__ */
diff --git a/thirdparty/includes/GSL/gsl/gsl_minmax.h b/thirdparty/includes/GSL/gsl/gsl_minmax.h
new file mode 100644
index 0000000..0d9a836
--- /dev/null
+++ b/thirdparty/includes/GSL/gsl/gsl_minmax.h
@@ -0,0 +1,102 @@
+/* gsl_minmax.h
+ *
+ * Copyright (C) 2008 Gerard Jungman, Brian Gough
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GSL_MINMAX_H__
+#define __GSL_MINMAX_H__
+#include
+
+#undef __BEGIN_DECLS
+#undef __END_DECLS
+#ifdef __cplusplus
+# define __BEGIN_DECLS extern "C" {
+# define __END_DECLS }
+#else
+# define __BEGIN_DECLS /* empty */
+# define __END_DECLS /* empty */
+#endif
+
+__BEGIN_DECLS
+
+/* Define MAX and MIN macros/functions if they don't exist. */
+
+/* plain old macros for general use */
+#define GSL_MAX(a,b) ((a) > (b) ? (a) : (b))
+#define GSL_MIN(a,b) ((a) < (b) ? (a) : (b))
+
+/* function versions of the above, in case they are needed */
+double gsl_max (double a, double b);
+double gsl_min (double a, double b);
+
+/* inline-friendly strongly typed versions */
+#ifdef HAVE_INLINE
+
+INLINE_FUN int GSL_MAX_INT (int a, int b);
+INLINE_FUN int GSL_MIN_INT (int a, int b);
+INLINE_FUN double GSL_MAX_DBL (double a, double b);
+INLINE_FUN double GSL_MIN_DBL (double a, double b);
+INLINE_FUN long double GSL_MAX_LDBL (long double a, long double b);
+INLINE_FUN long double GSL_MIN_LDBL (long double a, long double b);
+
+INLINE_FUN int
+GSL_MAX_INT (int a, int b)
+{
+ return GSL_MAX (a, b);
+}
+
+INLINE_FUN int
+GSL_MIN_INT (int a, int b)
+{
+ return GSL_MIN (a, b);
+}
+
+INLINE_FUN double
+GSL_MAX_DBL (double a, double b)
+{
+ return GSL_MAX (a, b);
+}
+
+INLINE_FUN double
+GSL_MIN_DBL (double a, double b)
+{
+ return GSL_MIN (a, b);
+}
+
+INLINE_FUN long double
+GSL_MAX_LDBL (long double a, long double b)
+{
+ return GSL_MAX (a, b);
+}
+
+INLINE_FUN long double
+GSL_MIN_LDBL (long double a, long double b)
+{
+ return GSL_MIN (a, b);
+}
+#else
+#define GSL_MAX_INT(a,b) GSL_MAX(a,b)
+#define GSL_MIN_INT(a,b) GSL_MIN(a,b)
+#define GSL_MAX_DBL(a,b) GSL_MAX(a,b)
+#define GSL_MIN_DBL(a,b) GSL_MIN(a,b)
+#define GSL_MAX_LDBL(a,b) GSL_MAX(a,b)
+#define GSL_MIN_LDBL(a,b) GSL_MIN(a,b)
+#endif /* HAVE_INLINE */
+
+__END_DECLS
+
+#endif /* __GSL_POW_INT_H__ */
diff --git a/thirdparty/includes/GSL/gsl/gsl_mode.h b/thirdparty/includes/GSL/gsl/gsl_mode.h
new file mode 100644
index 0000000..c8e5d55
--- /dev/null
+++ b/thirdparty/includes/GSL/gsl/gsl_mode.h
@@ -0,0 +1,88 @@
+/* gsl_mode.h
+ *
+ * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2004 Gerard Jungman
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* Author: B. Gough and G. Jungman */
+
+#ifndef __GSL_MODE_H__
+#define __GSL_MODE_H__
+#include
+
+#undef __BEGIN_DECLS
+#undef __END_DECLS
+#ifdef __cplusplus
+# define __BEGIN_DECLS extern "C" {
+# define __END_DECLS }
+#else
+# define __BEGIN_DECLS /* empty */
+# define __END_DECLS /* empty */
+#endif
+
+__BEGIN_DECLS
+
+
+/* Some functions can take a mode argument. This
+ * is a rough method to do things like control
+ * the precision of the algorithm. This mainly
+ * occurs in special functions, but we figured
+ * it was ok to have a general facility.
+ *
+ * The mode type is 32-bit field. Most of
+ * the fields are currently unused. Users
+ * '|' various predefined constants to get
+ * a desired mode.
+ */
+typedef unsigned int gsl_mode_t;
+
+
+/* Here are the predefined constants.
+ * Note that the precision constants
+ * are special because they are used
+ * to index arrays, so do not change
+ * them. The precision information is
+ * in the low order 3 bits of gsl_mode_t
+ * (the third bit is currently unused).
+ */
+
+/* Note that "0" is double precision,
+ * so that you get that by default if
+ * you forget a flag.
+ */
+#define GSL_PREC_DOUBLE 0
+#define GSL_PREC_SINGLE 1
+#define GSL_PREC_APPROX 2
+
+#ifdef HAVE_INLINE
+INLINE_FUN unsigned int GSL_MODE_PREC(gsl_mode_t mt);
+
+INLINE_FUN unsigned int
+GSL_MODE_PREC(gsl_mode_t mt)
+{ return (mt & (unsigned int)7); }
+#else /* HAVE_INLINE */
+#define GSL_MODE_PREC(mt) ((mt) & (unsigned int)7)
+#endif /* HAVE_INLINE */
+
+
+/* Here are some predefined generic modes.
+ */
+#define GSL_MODE_DEFAULT 0
+
+
+__END_DECLS
+
+#endif /* __GSL_MODE_H__ */
diff --git a/thirdparty/includes/GSL/gsl/gsl_monte.h b/thirdparty/includes/GSL/gsl/gsl_monte.h
new file mode 100644
index 0000000..4d1d88e
--- /dev/null
+++ b/thirdparty/includes/GSL/gsl/gsl_monte.h
@@ -0,0 +1,55 @@
+/* monte/gsl_monte.h
+ *
+ * Copyright (C) 1996, 1997, 1998, 1999, 2000 Michael Booth
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* Some things common to all the Monte-Carlo implementations */
+/* Author: MJB */
+
+#ifndef __GSL_MONTE_H__
+#define __GSL_MONTE_H__
+
+#undef __BEGIN_DECLS
+#undef __END_DECLS
+#ifdef __cplusplus
+# define __BEGIN_DECLS extern "C" {
+# define __END_DECLS }
+#else
+# define __BEGIN_DECLS /* empty */
+# define __END_DECLS /* empty */
+#endif
+
+__BEGIN_DECLS
+
+/* Hide the function type in a typedef so that we can use it in all our
+ integration functions, and make it easy to change things.
+*/
+
+struct gsl_monte_function_struct {
+ double (*f)(double * x_array, size_t dim, void * params);
+ size_t dim;
+ void * params;
+};
+
+typedef struct gsl_monte_function_struct gsl_monte_function;
+
+#define GSL_MONTE_FN_EVAL(F,x) (*((F)->f))(x,(F)->dim,(F)->params)
+
+
+__END_DECLS
+
+#endif /* __GSL_MONTE_H__ */
diff --git a/thirdparty/includes/GSL/gsl/gsl_monte_miser.h b/thirdparty/includes/GSL/gsl/gsl_monte_miser.h
new file mode 100644
index 0000000..5940396
--- /dev/null
+++ b/thirdparty/includes/GSL/gsl/gsl_monte_miser.h
@@ -0,0 +1,97 @@
+/* monte/gsl_monte_miser.h
+ *
+ * Copyright (C) 1996, 1997, 1998, 1999, 2000 Michael Booth
+ * Copyright (C) 2009 Brian Gough
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* Author: MJB */
+
+#ifndef __GSL_MONTE_MISER_H__
+#define __GSL_MONTE_MISER_H__
+
+#include
+#include
+#include
+
+#undef __BEGIN_DECLS
+#undef __END_DECLS
+#ifdef __cplusplus
+# define __BEGIN_DECLS extern "C" {
+# define __END_DECLS }
+#else
+# define __BEGIN_DECLS /* empty */
+# define __END_DECLS /* empty */
+#endif
+
+__BEGIN_DECLS
+
+typedef struct {
+ size_t min_calls;
+ size_t min_calls_per_bisection;
+ double dither;
+ double estimate_frac;
+ double alpha;
+ size_t dim;
+ int estimate_style;
+ int depth;
+ int verbose;
+ double * x;
+ double * xmid;
+ double * sigma_l;
+ double * sigma_r;
+ double * fmax_l;
+ double * fmax_r;
+ double * fmin_l;
+ double * fmin_r;
+ double * fsum_l;
+ double * fsum_r;
+ double * fsum2_l;
+ double * fsum2_r;
+ size_t * hits_l;
+ size_t * hits_r;
+} gsl_monte_miser_state;
+
+int gsl_monte_miser_integrate(gsl_monte_function * f,
+ const double xl[], const double xh[],
+ size_t dim, size_t calls,
+ gsl_rng *r,
+ gsl_monte_miser_state* state,
+ double *result, double *abserr);
+
+gsl_monte_miser_state* gsl_monte_miser_alloc(size_t dim);
+
+int gsl_monte_miser_init(gsl_monte_miser_state* state);
+
+void gsl_monte_miser_free(gsl_monte_miser_state* state);
+
+typedef struct {
+ double estimate_frac;
+ size_t min_calls;
+ size_t min_calls_per_bisection;
+ double alpha;
+ double dither;
+} gsl_monte_miser_params;
+
+void gsl_monte_miser_params_get (const gsl_monte_miser_state * state,
+ gsl_monte_miser_params * params);
+
+void gsl_monte_miser_params_set (gsl_monte_miser_state * state,
+ const gsl_monte_miser_params * params);
+
+__END_DECLS
+
+#endif /* __GSL_MONTE_MISER_H__ */
diff --git a/thirdparty/includes/GSL/gsl/gsl_monte_plain.h b/thirdparty/includes/GSL/gsl/gsl_monte_plain.h
new file mode 100644
index 0000000..c4745b9
--- /dev/null
+++ b/thirdparty/includes/GSL/gsl/gsl_monte_plain.h
@@ -0,0 +1,65 @@
+/* monte/gsl_monte_plain.h
+ *
+ * Copyright (C) 1996, 1997, 1998, 1999, 2000 Michael Booth
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* Plain Monte-Carlo. */
+
+/* Author: MJB */
+
+#ifndef __GSL_MONTE_PLAIN_H__
+#define __GSL_MONTE_PLAIN_H__
+
+#include
+#include
+#include
+
+#undef __BEGIN_DECLS
+#undef __END_DECLS
+#ifdef __cplusplus
+# define __BEGIN_DECLS extern "C" {
+# define __END_DECLS }
+#else
+# define __BEGIN_DECLS /* empty */
+# define __END_DECLS /* empty */
+#endif
+
+__BEGIN_DECLS
+
+typedef struct {
+ size_t dim;
+ double *x;
+} gsl_monte_plain_state;
+
+int
+gsl_monte_plain_integrate (const gsl_monte_function * f,
+ const double xl[], const double xu[],
+ const size_t dim,
+ const size_t calls,
+ gsl_rng * r,
+ gsl_monte_plain_state * state,
+ double *result, double *abserr);
+
+gsl_monte_plain_state* gsl_monte_plain_alloc(size_t dim);
+
+int gsl_monte_plain_init(gsl_monte_plain_state* state);
+
+void gsl_monte_plain_free (gsl_monte_plain_state* state);
+
+__END_DECLS
+
+#endif /* __GSL_MONTE_PLAIN_H__ */
diff --git a/thirdparty/includes/GSL/gsl/gsl_monte_vegas.h b/thirdparty/includes/GSL/gsl/gsl_monte_vegas.h
new file mode 100644
index 0000000..0942c04
--- /dev/null
+++ b/thirdparty/includes/GSL/gsl/gsl_monte_vegas.h
@@ -0,0 +1,125 @@
+/* monte/gsl_monte_vegas.h
+ *
+ * Copyright (C) 1996, 1997, 1998, 1999, 2000 Michael Booth
+ * Copyright (C) 2009 Brian Gough
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* header for the gsl "vegas" routines. Mike Booth, May 1998 */
+
+#ifndef __GSL_MONTE_VEGAS_H__
+#define __GSL_MONTE_VEGAS_H__
+
+#include
+#include
+#include