1/* gsl.vapi
2 *
3 * Copyright (C) 2008  Matias De la Puente
4 *
5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Lesser General Public
7 * License as published by the Free Software Foundation; either
8 * version 2.1 of the License, or (at your option) any later version.
9
10 * This library is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13 * Lesser General Public License for more details.
14
15 * You should have received a copy of the GNU Lesser General Public
16 * License along with this library; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA
18 *
19 * Author:
20 * 	Matias De la Puente <mfpuente.ar@gmail.com>
21 */
22
23namespace Gsl
24{
25	/*
26	 * Physical Constants
27	 */
28	[CCode (cprefix="GSL_CONST_NUM_", cheader_filename="gsl/gsl_const_num.h", has_type_id = false)]
29	public enum ConstNum
30	{
31		FINE_STRUCTURE,
32		AVOGADRO,
33		YOTTA,
34		ZETTA,
35		EXA,
36		PETA,
37		TERA,
38		GIGA,
39		MEGA,
40		KILO,
41		MILLI,
42		MICRO,
43		NANO,
44		PICO,
45		FEMTO,
46		ATTO,
47		ZEPTO,
48		YOCTO
49	}
50
51	[CCode (cprefix="GSL_CONST_CGS_", cheader_filename="gsl/gsl_const_cgs.h", has_type_id = false)]
52	public enum ConstCGS
53	{
54		SPEED_OF_LIGHT,
55		GRAVITATIONAL_CONSTANT,
56		PLANCKS_CONSTANT_H,
57		PLANCKS_CONSTANT_HBAR,
58		ASTRONOMICAL_UNIT,
59		LIGHT_YEAR,
60		PARSEC,
61		GRAV_ACCEL,
62		ELECTRON_VOLT,
63		MASS_ELECTRON,
64		MASS_MUON,
65		MASS_PROTON,
66		MASS_NEUTRON,
67		RYDBERG,
68		BOLTZMANN,
69		MOLAR_GAS,
70		STANDARD_GAS_VOLUME,
71		MINUTE,
72		HOUR,
73		DAY,
74		WEEK,
75		INCH,
76		FOOT,
77		YARD,
78		MILE,
79		NAUTICAL_MILE,
80		FATHOM,
81		MIL,
82		POINT,
83		TEXPOINT,
84		MICRON,
85		ANGSTROM,
86		HECTARE,
87		ACRE,
88		BARN,
89		LITER,
90		US_GALLON,
91		QUART,
92		PINT,
93		CUP,
94		FLUID_OUNCE,
95		TABLESPOON,
96		TEASPOON,
97		CANADIAN_GALLON,
98		UK_GALLON,
99		MILES_PER_HOUR,
100		KILOMETERS_PER_HOUR,
101		KNOT,
102		POUND_MASS,
103		OUNCE_MASS,
104		TON,
105		METRIC_TON,
106		UK_TON,
107		TROY_OUNCE,
108		CARAT,
109		UNIFIED_ATOMIC_MASS,
110		GRAM_FORCE,
111		POUND_FORCE,
112		KILOPOUND_FORCE,
113		POUNDAL,
114		CALORIE,
115		BTU,
116		THERM,
117		HORSEPOWER,
118		BAR,
119		STD_ATMOSPHERE,
120		TORR,
121		METER_OF_MERCURY,
122		INCH_OF_MERCURY,
123		INCH_OF_WATER,
124		PSI,
125		POISE,
126		STOKES,
127		STILB,
128		LUMEN,
129		LUX,
130		PHOT,
131		FOOTCANDLE,
132		LAMBERT,
133		FOOTLAMBERT,
134		CURIE,
135		ROENTGEN,
136		RAD,
137		SOLAR_MASS,
138		BOHR_RADIUS,
139		NEWTON,
140		DYNE,
141		JOULE,
142		ERG,
143		STEFAN_BOLTZMANN_CONSTANT,
144		THOMSON_CROSS_SECTION
145	}
146
147	[CCode (cprefix="GSL_CONST_CGSM_", cheader_filename="gsl/gsl_const_cgsm.h", has_type_id = false)]
148	public enum ConstCGSM
149	{
150		SPEED_OF_LIGHT,
151		GRAVITATIONAL_CONSTANT,
152		PLANCKS_CONSTANT_H,
153		PLANCKS_CONSTANT_HBAR,
154		ASTRONOMICAL_UNIT,
155		LIGHT_YEAR,
156		PARSEC,
157		GRAV_ACCEL,
158		ELECTRON_VOLT,
159		MASS_ELECTRON,
160		MASS_MUON,
161		MASS_PROTON,
162		MASS_NEUTRON,
163		RYDBERG,
164		BOLTZMANN,
165		MOLAR_GAS,
166		STANDARD_GAS_VOLUME,
167		MINUTE,
168		HOUR,
169		DAY,
170		WEEK,
171		INCH,
172		FOOT,
173		YARD,
174		MILE,
175		NAUTICAL_MILE,
176		FATHOM,
177		MIL,
178		POINT,
179		TEXPOINT,
180		MICRON,
181		ANGSTROM,
182		HECTARE,
183		ACRE,
184		BARN,
185		LITER,
186		US_GALLON,
187		QUART,
188		PINT,
189		CUP,
190		FLUID_OUNCE,
191		TABLESPOON,
192		TEASPOON,
193		CANADIAN_GALLON,
194		UK_GALLON,
195		MILES_PER_HOUR,
196		KILOMETERS_PER_HOUR,
197		KNOT,
198		POUND_MASS,
199		OUNCE_MASS,
200		TON,
201		METRIC_TON,
202		UK_TON,
203		TROY_OUNCE,
204		CARAT,
205		UNIFIED_ATOMIC_MASS,
206		GRAM_FORCE,
207		POUND_FORCE,
208		KILOPOUND_FORCE,
209		POUNDAL,
210		CALORIE,
211		BTU,
212		THERM,
213		HORSEPOWER,
214		BAR,
215		STD_ATMOSPHERE,
216		TORR,
217		METER_OF_MERCURY,
218		INCH_OF_MERCURY,
219		INCH_OF_WATER,
220		PSI,
221		POISE,
222		STOKES,
223		STILB,
224		LUMEN,
225		LUX,
226		PHOT,
227		FOOTCANDLE,
228		LAMBERT,
229		FOOTLAMBERT,
230		CURIE,
231		ROENTGEN,
232		RAD,
233		SOLAR_MASS,
234		BOHR_RADIUS,
235		NEWTON,
236		DYNE,
237		JOULE,
238		ERG,
239		STEFAN_BOLTZMANN_CONSTANT,
240		THOMSON_CROSS_SECTION,
241		BOHR_MAGNETON,
242		NUCLEAR_MAGNETON,
243		ELECTRON_MAGNETIC_MOMENT,
244		PROTON_MAGNETIC_MOMENT,
245		FARADAY,
246		ELECTRON_CHARGE
247	}
248
249	[CCode (cprefix="GSL_CONST_MKS_", cheader_filename="gsl/gsl_const_mks.h", has_type_id = false)]
250	public enum ConstMKS
251	{
252		SPEED_OF_LIGHT,
253		GRAVITATIONAL_CONSTANT,
254		PLANCKS_CONSTANT_H,
255		PLANCKS_CONSTANT_HBAR,
256		ASTRONOMICAL_UNIT,
257		LIGHT_YEAR,
258		PARSEC,
259		GRAV_ACCEL,
260		ELECTRON_VOLT,
261		MASS_ELECTRON,
262		MASS_MUON,
263		MASS_PROTON,
264		MASS_NEUTRON,
265		RYDBERG,
266		BOLTZMANN,
267		MOLAR_GAS,
268		STANDARD_GAS_VOLUME,
269		MINUTE,
270		HOUR,
271		DAY,
272		WEEK,
273		INCH,
274		FOOT,
275		YARD,
276		MILE,
277		NAUTICAL_MILE,
278		FATHOM,
279		MIL,
280		POINT,
281		TEXPOINT,
282		MICRON,
283		ANGSTROM,
284		HECTARE,
285		ACRE,
286		BARN,
287		LITER,
288		US_GALLON,
289		QUART,
290		PINT,
291		CUP,
292		FLUID_OUNCE,
293		TABLESPOON,
294		TEASPOON,
295		CANADIAN_GALLON,
296		UK_GALLON,
297		MILES_PER_HOUR,
298		KILOMETERS_PER_HOUR,
299		KNOT,
300		POUND_MASS,
301		OUNCE_MASS,
302		TON,
303		METRIC_TON,
304		UK_TON,
305		TROY_OUNCE,
306		CARAT,
307		UNIFIED_ATOMIC_MASS,
308		GRAM_FORCE,
309		POUND_FORCE,
310		KILOPOUND_FORCE,
311		POUNDAL,
312		CALORIE,
313		BTU,
314		THERM,
315		HORSEPOWER,
316		BAR,
317		STD_ATMOSPHERE,
318		TORR,
319		METER_OF_MERCURY,
320		INCH_OF_MERCURY,
321		INCH_OF_WATER,
322		PSI,
323		POISE,
324		STOKES,
325		STILB,
326		LUMEN,
327		LUX,
328		PHOT,
329		FOOTCANDLE,
330		LAMBERT,
331		FOOTLAMBERT,
332		CURIE,
333		ROENTGEN,
334		RAD,
335		SOLAR_MASS,
336		BOHR_RADIUS,
337		NEWTON,
338		DYNE,
339		JOULE,
340		ERG,
341		BOHR_MAGNETON,
342		NUCLEAR_MAGNETON,
343		ELECTRON_MAGNETIC_MOMENT,
344		PROTON_MAGNETIC_MOMENT,
345		STEFAN_BOLTZMANN_CONSTANT,
346		THOMSON_CROSS_SECTION,
347		FARADAY,
348		ELECTRON_CHARGE,
349		VACUUM_PERMITTIVITY,
350		VACUUM_PERMEABILITY,
351		DEBYE,
352		GAUSS
353	}
354
355	[CCode (cprefix="GSL_CONST_MKSA_", cheader_filename="gsl/gsl_const_mksa.h", has_type_id = false)]
356	public enum ConstMKSA
357	{
358		SPEED_OF_LIGHT,
359		GRAVITATIONAL_CONSTANT,
360		PLANCKS_CONSTANT_H,
361		PLANCKS_CONSTANT_HBAR,
362		ASTRONOMICAL_UNIT,
363		LIGHT_YEAR,
364		PARSEC,
365		GRAV_ACCEL,
366		ELECTRON_VOLT,
367		MASS_ELECTRON,
368		MASS_MUON,
369		MASS_PROTON,
370		MASS_NEUTRON,
371		RYDBERG,
372		BOLTZMANN,
373		MOLAR_GAS,
374		STANDARD_GAS_VOLUME,
375		MINUTE,
376		HOUR,
377		DAY,
378		WEEK,
379		INCH,
380		FOOT,
381		YARD,
382		MILE,
383		NAUTICAL_MILE,
384		FATHOM,
385		MIL,
386		POINT,
387		TEXPOINT,
388		MICRON,
389		ANGSTROM,
390		HECTARE,
391		ACRE,
392		BARN,
393		LITER,
394		US_GALLON,
395		QUART,
396		PINT,
397		CUP,
398		FLUID_OUNCE,
399		TABLESPOON,
400		TEASPOON,
401		CANADIAN_GALLON,
402		UK_GALLON,
403		MILES_PER_HOUR,
404		KILOMETERS_PER_HOUR,
405		KNOT,
406		POUND_MASS,
407		OUNCE_MASS,
408		TON,
409		METRIC_TON,
410		UK_TON,
411		TROY_OUNCE,
412		CARAT,
413		UNIFIED_ATOMIC_MASS,
414		GRAM_FORCE,
415		POUND_FORCE,
416		KILOPOUND_FORCE,
417		POUNDAL,
418		CALORIE,
419		BTU,
420		THERM,
421		HORSEPOWER,
422		BAR,
423		STD_ATMOSPHERE,
424		TORR,
425		METER_OF_MERCURY,
426		INCH_OF_MERCURY,
427		INCH_OF_WATER,
428		PSI,
429		POISE,
430		STOKES,
431		STILB,
432		LUMEN,
433		LUX,
434		PHOT,
435		FOOTCANDLE,
436		LAMBERT,
437		FOOTLAMBERT,
438		CURIE,
439		ROENTGEN,
440		RAD,
441		SOLAR_MASS,
442		BOHR_RADIUS,
443		NEWTON,
444		DYNE,
445		JOULE,
446		ERG,
447		STEFAN_BOLTZMANN_CONSTANT,
448		THOMSON_CROSS_SECTION,
449		BOHR_MAGNETON,
450		NUCLEAR_MAGNETON,
451		ELECTRON_MAGNETIC_MOMENT,
452		PROTON_MAGNETIC_MOMENT,
453		FARADAY,
454		ELECTRON_CHARGE,
455		VACUUM_PERMITTIVITY,
456		VACUUM_PERMEABILITY,
457		DEBYE,
458		GAUSS
459	}
460
461
462	/*
463	 * Error Handling
464	 */
465	[CCode (cprefix="GSL_", cheader_filename="gsl/gsl_errno.h", has_type_id = false)]
466	public enum Status
467	{
468		SUCCESS,
469		FAILURE,
470		CONTINUE,
471		EDOM,
472		ERANGE,
473		EFAULT,
474		EINVAL,
475		EFAILED,
476		EFACTOR,
477		ESANITY,
478		ENOMEM,
479		EBADFUNC,
480		ERUNAWAY,
481		EMAXITER,
482		EZERODIV,
483		EBADTOL,
484		ETOL,
485		EUNDRFLW,
486		EOVRFLW,
487		ELOSS,
488		EROUND,
489		EBADLEN,
490		ENOTSQR,
491		ESING,
492		EDIVERGE,
493		EUNSUP,
494		EUNIMPL,
495		ECACHE,
496		ETABLE,
497		ENOPROG,
498		ENOPROGJ,
499		ETOLF,
500		ETOLX,
501		ETOLG,
502		EOF
503	}
504
505	[CCode (cprefix="GSL_PREC_", cheader_filename="gsl/gsl_mode.h", has_type_id = false)]
506	public enum Mode
507	{
508		DOUBLE,
509		SINGLE,
510		APPROX
511	}
512
513	[CCode (cname = "gsl_error_handler_t*", has_target = false)]
514	public delegate void ErrorHandler (string reason, string file, int line, int errno);
515	[CCode (cname = "gsl_stream_handler_t*", has_target = false)]
516	public delegate void StreamHandler (string label, string file, int line, string reason);
517
518	[CCode (lower_case_cprefix="gsl_", cheader_filename="gsl/gsl_errno.h")]
519	namespace Error
520	{
521		public static void error (string reason, string file, int line, int errno);
522		public static unowned string strerror (int errno);
523		public static ErrorHandler set_error_handler (ErrorHandler? new_handler);
524		public static ErrorHandler set_error_handler_off ();
525	}
526
527	[CCode (lower_case_cprefix="gsl_", cheader_filename="gsl/gsl_errno.h")]
528	namespace Stream
529	{
530		[CCode (cname="gsl_stream_printf")]
531		public static void printf (string label, string file, int line, string reason);
532		public static StreamHandler set_stream_handler (StreamHandler new_handler);
533		public static GLib.FileStream set_stream (GLib.FileStream new_stream);
534	}
535
536
537	/*
538	 * Mathematical Functions
539	 */
540	[CCode (cprefix="", cheader_filename="gsl/gsl_math.h", has_type_id = false)]
541	public enum MathConst
542	{
543		M_E,
544		M_LOG2E,
545		M_LOG10E,
546		M_SQRT2,
547		M_SQRT1_2,
548		M_SQRT3,
549		M_PI,
550		M_PI_2,
551		M_PI_4,
552		M_2_SQRTPI,
553		M_1_PI,
554		M_2_PI,
555		M_LN10,
556		M_LN2,
557		M_LNPI,
558		M_EULER
559	}
560
561	/* The isnan, isinf and finite are define in the double type. The elementary functions are in GLib.Math */
562
563	[CCode (has_target = false, has_typedef = false)]
564	public delegate double _Function (double x, void* params);
565	[CCode (has_target = false, has_typedef = false)]
566	public delegate void _FunctionFdf (double x, void* params, out double f, out double df);
567
568	[SimpleType]
569	[CCode (cname="gsl_function", cheader_filename="gsl/gsl_math.h", has_type_id = false)]
570	public struct Function
571	{
572		public _Function function;
573		public void* params;
574	}
575
576	[SimpleType]
577	[CCode (cname="gsl_function_fdf", cheader_filename="gsl/gsl_math.h", has_type_id = false)]
578	public struct FunctionFdf
579	{
580		public _Function f;
581		public _Function df;
582		public _FunctionFdf fdf;
583		public void* params;
584	}
585
586
587	/*
588	 * Complex Numbers
589	 */
590	[SimpleType]
591	[CCode (cname="gsl_complex", cheader_filename="gsl/gsl_complex.h,gsl/gsl_complex_math.h", has_type_id = false)]
592	public struct Complex
593	{
594		[CCode (cname="dat[0]")]
595		public double real;
596		[CCode (cname="dat[1]")]
597		public double imag;
598		public static Complex rect (double x, double y);
599		public static Complex polar (double r, double theta);
600
601		public static double arg (Complex z);
602		public static double abs (Complex z);
603		public static double abs2 (Complex z);
604		public static double logabs (Complex z);
605
606		public static Complex add (Complex a, Complex b);
607		public static Complex sub (Complex a, Complex b);
608		public static Complex mul (Complex a, Complex b);
609		public static Complex div (Complex a, Complex b);
610		public static Complex add_real (Complex a, double x);
611		public static Complex sub_real (Complex a, double x);
612		public static Complex mul_real (Complex a, double x);
613		public static Complex div_real (Complex a, double x);
614		public static Complex add_imag (Complex a, double y);
615		public static Complex sub_imag (Complex a, double y);
616		public static Complex mul_imag (Complex a, double y);
617		public static Complex div_imag (Complex a, double y);
618		public static Complex conjugate (Complex z);
619		public static Complex inverse (Complex z);
620		public static Complex negative (Complex z);
621
622		public static Complex sqrt (Complex z);
623		public static Complex sqrt_real (double x);
624		public static Complex pow (Complex z, Complex a);
625		public static Complex pow_real (Complex z, double x);
626		public static Complex exp (Complex z);
627		public static Complex log (Complex z);
628		public static Complex log10 (Complex z);
629		public static Complex log_b (Complex z, Complex b);
630
631		public static Complex sin (Complex z);
632		public static Complex cos (Complex z);
633		public static Complex tan (Complex z);
634		public static Complex sec (Complex z);
635		public static Complex csc (Complex z);
636		public static Complex cot (Complex z);
637
638		public static Complex arcsin (Complex z);
639		public static Complex arcsin_real (double z);
640		public static Complex arccos (Complex z);
641		public static Complex arccos_real (double z);
642		public static Complex arctan (Complex z);
643		public static Complex arcsec (Complex z);
644		public static Complex arcsec_real (double z);
645		public static Complex arccsc (Complex z);
646		public static Complex arccsc_real (double z);
647		public static Complex arccot (Complex z);
648
649		public static Complex sinh (Complex z);
650		public static Complex cosh (Complex z);
651		public static Complex tanh (Complex z);
652		public static Complex sech (Complex z);
653		public static Complex csch (Complex z);
654		public static Complex coth (Complex z);
655
656		public static Complex arcsinh (Complex z);
657		public static Complex arccosh (Complex z);
658		public static Complex arccosh_real (double z);
659		public static Complex arctanh (Complex z);
660		public static Complex arctanh_real (double z);
661		public static Complex arcsech (Complex z);
662		public static Complex arccsch (Complex z);
663		public static Complex arccoth (Complex z);
664	}
665
666
667	/*
668	 * Polynomials
669	 */
670	[CCode (lower_case_cprefix="gsl_poly_", cheader_filename="gsl/gsl_poly.h")]
671	namespace Poly
672	{
673		public static double eval (double[] c, double x);
674		public static Complex complex_eval (double[] c, Complex z);
675		[CCode (cname="gsl_complex_poly_complex_eval")]
676		public static Complex poly_complex_eval (Complex[] c, Complex z);
677
678		public static int dd_init ([CCode (array_length = false)] double[] dd, [CCode (array_length = false)] double[] xa, [CCode (array_length = false)] double[] ya, size_t size);
679		public static double dd_eval ([CCode (array_length = false)] double[] dd, [CCode (array_length = false)] double[] xa, size_t size, double x);
680		public static int dd_taylor ([CCode (array_length = false)] double[] c, double xp, [CCode (array_length = false)] double[] dd, [CCode (array_length = false)] double[] xa, size_t size, [CCode (array_length = false)] double[] w);
681
682		public static int solve_quadratic (double a, double b, double c, out double x0, out double x1);
683		public static int complex_solve_quadratic (double a, double b, double c, out Complex z0, out Complex z1);
684
685		public static int solve_cubic (double a, double b, double c, out double x0, out double x1, out double x2);
686		public static int complex_solve_cubic (double a, double b, double c, out Complex z0, out Complex z1, out Complex z2);
687	}
688
689	[Compact]
690	[CCode (cname="gsl_poly_complex_workspace", cheader_filename="gsl/gsl_poly.h")]
691	public class PolyComplexWorkspace
692	{
693		public size_t nc;
694		public double* matrix;
695
696		[CCode (cname="gsl_poly_complex_workspace_alloc")]
697		public PolyComplexWorkspace (size_t n);
698		[CCode (cname="gsl_poly_complex_solve")]
699		public static int solve (double[]a, PolyComplexWorkspace w, out double z);
700	}
701
702
703	/*
704	 * Special Functions
705	 */
706	[SimpleType]
707	[CCode (cname="gsl_sf_result", cheader_filename="gsl/gsl_sf_result.h", has_type_id = false)]
708	public struct Result
709	{
710		public double val;
711		public double err;
712	}
713
714	[SimpleType]
715	[CCode (cname="gsl_sf_result_e10", cheader_filename="gsl/gsl_sf_result.h", has_type_id = false)]
716	public struct ResultE10
717	{
718		public double val;
719		public double err;
720		public int e10;
721	}
722
723	[CCode (lower_case_cprefix="gsl_sf_airy_", cheader_filename="gsl/gsl_sf_airy.h")]
724	namespace Airy
725	{
726		public static double Ai (double x, Mode mode);
727		public static int Ai_e (double x, Mode mode, out Result result);
728		public static double Bi (double x, Mode mode);
729		public static int Bi_e (double x, Mode mode, out Result result);
730		public static double Ai_scaled (double x, Mode mode);
731		public static int Ai_scaled_e (double x, Mode mode, out Result result);
732		public static double Bi_scaled (double x, Mode mode);
733		public static int Bi_scaled_e (double x, Mode mode, out Result result);
734
735		public static double Ai_deriv (double x, Mode mode);
736		public static int Ai_deriv_e (double x, Mode mode, out Result result);
737		public static double Bi_deriv (double x, Mode mode);
738		public static int Bi_deriv_e (double x, Mode mode, out Result result);
739		public static double Ai_deriv_scaled (double x, Mode mode);
740		public static int Ai_deriv_scaled_e (double x, Mode mode, out Result result);
741		public static double Bi_deriv_scaled (double x, Mode mode);
742		public static int Bi_deriv_scaled_e (double x, Mode mode, out Result result);
743
744		public static double zero_Ai (uint s);
745		public static int zero_Ai_e (uint s, out Result result);
746		public static double zero_Bi (uint s);
747		public static int zero_Bi_e (uint s, out Result result);
748
749		public static double zero_Ai_deriv (uint s);
750		public static int zero_Ai_deriv_e (uint s, out Result result);
751		public static double zero_Bi_deriv (uint s);
752		public static int zero_Bi_deriv_e (uint s, out Result result);
753	}
754
755	[CCode (lower_case_cprefix="gsl_sf_bessel_", cheader_filename="gsl/gsl_sf_bessel.h")]
756	namespace Bessel
757	{
758		public static double J0 (double x);
759		public static int J0_e (double x, out Result result);
760		public static double J1 (double x);
761		public static int J1_e (double x, out Result result);
762		public static double Jn (int n, double x);
763		public static int Jn_e (int n, double x, out Result result);
764		public static int Jn_array (int nmin, int nmax, double x, [CCode (array_length = false)] double[] result_array);
765
766		public static double Y0 (double x);
767		public static int Y0_e (double x, out Result result);
768		public static double Y1 (double x);
769		public static int Y1_e (double x, out Result result);
770		public static double Yn (int n, double x);
771		public static int Yn_e (int n, double x, out Result result);
772		public static int Yn_array (int nmin, int nmax, double x, [CCode (array_length = false)] double[] result_array);
773
774		public static double I0 (double x);
775		public static int I0_e (double x, out Result result);
776		public static double I1 (double x);
777		public static int I1_e (double x, out Result result);
778		public static double In (int n, double x);
779		public static int In_e (int n, double x, out Result result);
780		public static int In_array (int nmin, int nmax, double x, [CCode (array_length = false)] double[] result_array);
781		public static double I0_scaled (double x);
782		public static int I0_scaled_e (double x, out Result result);
783		public static double I1_scaled (double x);
784		public static int I1_scaled_e (double x, out Result result);
785		public static double In_scaled (int n, double x);
786		public static int In_scaled_e (int n, double x, out Result result);
787		public static int In_scaled_array (int nmin, int nmax, double x, [CCode (array_length = false)] double[] result_array);
788
789		public static double K0 (double x);
790		public static int K0_e (double x, out Result result);
791		public static double K1 (double x);
792		public static int K1_e (double x, out Result result);
793		public static double Kn (int n, double x);
794		public static int Kn_e (int n, double x, out Result result);
795		public static int Kn_array (int nmin, int nmax, double x, [CCode (array_length = false)] double[] result_array);
796		public static double K0_scaled (double x);
797		public static int K0_scaled_e (double x, out Result result);
798		public static double K1_scaled (double x);
799		public static int K1_scaled_e (double x, out Result result);
800		public static double Kn_scaled (int n, double x);
801		public static int Kn_scaled_e (int n, double x, out Result result);
802		public static int Kn_scaled_array (int nmin, int nmax, double x, [CCode (array_length = false)] double[] result_array);
803
804		public static double j0 (double x);
805		public static int j0_e (double x, out Result result);
806		public static double j1 (double x);
807		public static int j1_e (double x, out Result result);
808		public static double j2 (double x);
809		public static int j2_e (double x, out Result result);
810		public static double jl (int l, double x);
811		public static int jl_e (int l, double x, out Result result);
812		public static int jl_array (int lmax, double x, [CCode (array_length = false)] double[] result_array);
813		public static int jl_steed_array (int lmax, double x, [CCode (array_length = false)] double[] jl_x_array);
814
815		public static double y0 (double x);
816		public static int y0_e (double x, out Result result);
817		public static double y1 (double x);
818		public static int y1_e (double x, out Result result);
819		public static double y2 (double x);
820		public static int y2_e (double x, out Result result);
821		public static double yl (int l, double x);
822		public static int yl_e (int l, double x, out Result result);
823		public static int yl_array (int lmax, double x, [CCode (array_length = false)] double[] result_array);
824
825		public static double i0_scaled (double x);
826		public static int i0_scaled_e (double x, out Result result);
827		public static double i1_scaled (double x);
828		public static int i1_scaled_e (double x, out Result result);
829		public static double i2_scaled (double x);
830		public static int i2_scaled_e (double x, out Result result);
831		public static double il_scaled (int l, double x);
832		public static int il_scaled_e (int l, double x, out Result result);
833		public static int il_scaled_array (int lmax, double x, [CCode (array_length = false)] double[] result_array);
834
835		public static double k0_scaled (double x);
836		public static int k0_scaled_e (double x, out Result result);
837		public static double k1_scaled (double x);
838		public static int k1_scaled_e (double x, out Result result);
839		public static double k2_scaled (double x);
840		public static int k2_scaled_e (double x, out Result result);
841		public static double kl_scaled (int l, double x);
842		public static int kl_scaled_e (int l, double x, out Result result);
843		public static int kl_scaled_array (int lmax, double x, [CCode (array_length = false)] double[] result_array);
844
845		public static double Jnu (double nu, double x);
846		public static int Jnu_e (double nu, double x, out Result result);
847		public static int sequence_Jnu_e (double nu, Mode mode, size_t size, [CCode (array_length = false)] double[] v);
848
849		public static double Ynu (double nu, double x);
850		public static int Ynu_e (double nu, double x, out Result result);
851
852		public static double Inu (double nu, double x);
853		public static int Inu_e (double nu, double x, out Result result);
854		public static double Inu_scaled (double nu, double x);
855		public static int Inu_scaled_e (double nu, double x, out Result result);
856
857		public static double Knu (double nu, double x);
858		public static int Knu_e (double nu, double x, out Result result);
859		public static double lnKnu (double nu, double x);
860		public static int lnKnu_e (double nu, double x, out Result result);
861		public static double Knu_scaled (double nu, double x);
862		public static int Knu_scaled_e (double nu, double x, out Result result);
863
864		public static double zero_J0 (uint s);
865		public static int zero_J0_e (uint s, out Result result);
866		public static double zero_J1 (uint s);
867		public static int zero_J1_e (uint s, out Result result);
868		public static double zero_Jnu (double nu, uint s);
869		public static int zero_Jnu_e (double nu, uint s, out Result result);
870	}
871
872	[CCode (lower_case_cprefix="gsl_sf_", cheader_filename="gsl/gsl_sf_clausen.h")]
873	namespace Clausen
874	{
875		public static double clausen (double x);
876		public static int clausen_e (double x, out Result result);
877	}
878
879	[CCode (lower_case_cprefix="gsl_sf_", cheader_filename="gsl/gsl_sf_coulomb.h")]
880	namespace Hydrogenic
881	{
882		public static double hydrogenicR_1 (double z, double r);
883		public static int hydrogenicR_1_e (double z, double r, out Result result);
884		public static double hydrogenicR (int n, int l, double z, double r);
885		public static int hydrogenicR_e (int n, int l, double z, double r, out Result result);
886	}
887
888	[CCode (lower_case_cprefix="gsl_sf_coulomb_wave_", cheader_filename="gsl/gsl_sf_coulomb.h")]
889	namespace CoulombWave
890	{
891		public static int FG_e (double eta, double x, double l_f, int k, out Result f, out Result fp, out Result g, out Result gp, out double exp_f, out double exp_g);
892		public static int F_array (double l_min, int kmax, double eta, double x, [CCode (array_length = false)] double[] fc_array, out double f_exponent);
893		public static int FG_array (double l_min, int kmax, double eta, double x, [CCode (array_length = false)] double[] fc_array, [CCode (array_length = false)] double[] gc_array, out double f_exponent, out double g_exponent);
894		public static int FGp_array (double l_min, int kmax, double eta, double x, [CCode (array_length = false)] double[] fc_array, [CCode (array_length = false)] double[] fcp_array, [CCode (array_length = false)] double[] gc_array, [CCode (array_length = false)] double[] gcp_array, out double f_exponent, out double g_exponent);
895		public static int sphF_array (double l_min, int kmax, double eta, double x, [CCode (array_length = false)] double[] fc_array, [CCode (array_length = false)] double[] f_exponent);
896	}
897
898	[CCode (lower_case_cprefix="gsl_sf_coulomb_", cheader_filename="gsl/gsl_sf_coulomb.h")]
899	namespace Coulomb
900	{
901		public static int CL_e (double l, double eta, out Result result);
902		public static int CL_array (double lmin, int kmax, double eta, [CCode (array_length = false)] double[] cl);
903	}
904
905	[CCode (lower_case_cprefix="gsl_sf_coupling_", cheader_filename="gsl/gsl_sf_coupling.h")]
906	namespace Coupling
907	{
908		public static double 3j (int two_ja, int two_jb, int two_jc, int two_ma, int two_mb, int two_mc);
909		public static int 3j_e (int two_ja, int two_jb, int two_jc, int two_ma, int two_mb, int two_mc, out Result result);
910
911		public static double 6j (int two_ja, int two_jb, int two_jc, int two_jd, int two_je, int two_jf);
912		public static int 6j_e (int two_ja, int two_jb, int two_jc, int two_jd, int two_je, int two_jf, out Result result);
913
914		public static double 9j (int two_ja, int two_jb, int two_jc, int two_jd, int two_je, int two_jf, int two_jg, int two_jh, int two_ji);
915		public static int 9j_e (int two_ja, int two_jb, int two_jc, int two_jd, int two_je, int two_jf, int two_jg, int two_jh, int two_ji, out Result result);
916	}
917
918	[CCode (lower_case_cprefix="gsl_sf_", cheader_filename="gsl/gsl_sf_dawson.h")]
919	namespace Dawson
920	{
921		public static double dawson (double x);
922		public static int dawson_e (double x, out Result result);
923	}
924
925	[CCode (cheader_filename="gsl/gsl_sf_debye.h")]
926	namespace Debye
927	{
928		[CCode (cname="gsl_sf_debye_1")]
929		public static double D1 (double x);
930		[CCode (cname="gsl_sf_debye_1_e")]
931		public static int D1_e (double x, out Result result);
932		[CCode (cname="gsl_sf_debye_2")]
933		public static double D2 (double x);
934		[CCode (cname="gsl_sf_debye_2_e")]
935		public static int D2_e (double x, out Result result);
936		[CCode (cname="gsl_sf_debye_3")]
937		public static double D3 (double x);
938		[CCode (cname="gsl_sf_debye_3_e")]
939		public static int D3_e (double x, out Result result);
940		[CCode (cname="gsl_sf_debye_4")]
941		public static double D4 (double x);
942		[CCode (cname="gsl_sf_debye_4_e")]
943		public static int D4_e (double x, out Result result);
944		[CCode (cname="gsl_sf_debye_5")]
945		public static double D5 (double x);
946		[CCode (cname="gsl_sf_debye_5_e")]
947		public static int D5_e (double x, out Result result);
948		[CCode (cname="gsl_sf_debye_6")]
949		public static double D6 (double x);
950		[CCode (cname="gsl_sf_debye_6_e")]
951		public static int D6_e (double x, out Result result);
952	}
953
954	[CCode (lower_case_cprefix="gsl_sf_", cheader_filename="gsl/gsl_sf_dilog.h")]
955	namespace Dilog
956	{
957		public static double dilog (double x);
958		public static int dilog_e (double x, out Result result);
959		public static int complex_dilog_e (double r, double theta, out Result result_re, out Result result_im);
960	}
961
962	[CCode (lower_case_cprefix="gsl_sf_multiply_", cheader_filename="gsl/gsl_sf_elementary.h")]
963	namespace Multiply
964	{
965		public static int e (double x, double y, out Result result);
966		public static int err_e (double x, double dx, double y, double dy, out Result result);
967	}
968
969	[CCode (lower_case_cprefix="gsl_sf_ellint_", cheader_filename="gsl/gsl_sf_ellint.h")]
970	namespace EllInt
971	{
972		public static double Kcomp (double k, Mode mode);
973		public static int Kcomp_e (double k, Mode mode, out Result result);
974		public static double Ecomp (double k, Mode mode);
975		public static int Ecomp_e (double k, Mode mode, out Result result);
976		public static double Pcomp (double k, double n, Mode mode);
977		public static int Pcomp_e (double k, double n, Mode mode, out Result result);
978
979		public static double F (double phi, double k, Mode mode);
980		public static int F_e (double phi, double k, Mode mode, out Result result);
981		public static double E (double phi, double k, Mode mode);
982		public static int E_e (double phi, double k, Mode mode, out Result result);
983		public static double P (double phi, double k, double n, Mode mode);
984		public static int P_e (double phi, double k, double n, Mode mode, out Result result);
985		public static double D (double phi, double k, Mode mode);
986		public static int D_e (double phi, double k, Mode mode, out Result result);
987
988		public static double RC (double x, double y, Mode mode);
989		public static int RC_e (double x, double y, Mode mode, out Result result);
990		public static double RD (double x, double y, double z, Mode mode);
991		public static int RD_e (double x, double y, double z, Mode mode, out Result result);
992		public static double RF (double x, double y, double z, Mode mode);
993		public static int RF_e (double x, double y, double z, Mode mode, out Result result);
994		public static double RJ (double x, double y, double z, double p, Mode mode);
995		public static int RJ_e (double x, double y, double z, double p, Mode mode, out Result result);
996	}
997
998	[CCode (lower_case_cprefix="gsl_sf_elljac_", cheader_filename="gsl/gsl_sf_elljac.h")]
999	namespace EllJac
1000	{
1001		public static int e (double u, double m, out double sn, out double cn, out double dn);
1002	}
1003
1004	[CCode (lower_case_cprefix="gsl_sf_", cheader_filename="gsl/gsl_sf_erf.h")]
1005	namespace Erf
1006	{
1007		public static double erf (double x);
1008		public static int erf_e (double x, out Result result);
1009		public static double erf_Z (double x);
1010		public static int erf_Z_e (double x, out Result result);
1011		public static double erf_Q (double x);
1012		public static int erf_Q_e (double x, out Result result);
1013		public static double erfc (double x);
1014		public static int erfc_e (double x, out Result result);
1015		public static double log_erfc (double x);
1016		public static int log_erfc_e (double x, out Result result);
1017		public static double hazard (double x);
1018		public static int hazard_e (double x, out Result result);
1019	}
1020
1021	[CCode (lower_case_cprefix="gsl_sf_", cheader_filename="gsl/gsl_sf_exp.h")]
1022	namespace Exp
1023	{
1024		public static double exp (double x);
1025		public static int exp_e (double x, out Result result);
1026		public static int exp_e10_e (double x, out ResultE10 result);
1027		public static double exp_mult (double x, double y);
1028		public static int exp_mult_e (double x, double y, out Result result);
1029		public static int exp_mult_e10_e (double x, double y, out ResultE10 result);
1030		public static int exp_err_e (double x, double dx, out Result result);
1031		public static int exp_err_e10_e (double x, double dx, out ResultE10 result);
1032		public static int exp_mult_err_e (double x, double dx, double y, double dy, out Result result);
1033		public static int exp_mult_err_e10_e (double x, double dx, double y, double dy, out ResultE10 result);
1034		public static double expm1 (double x);
1035		public static int expm1_e (double x, out Result result);
1036		public static double exprel (double x);
1037		public static int exprel_e (double x, out Result result);
1038		public static double exprel_2 (double x);
1039		public static int exprel_2_e (double x, out Result result);
1040		public static double exprel_n (int n, double x);
1041		public static int exprel_n_e (int n, double x, out Result result);
1042	}
1043
1044	[CCode (lower_case_cprefix="gsl_sf_", cheader_filename="gsl/gsl_sf_expint.h")]
1045	namespace Expint
1046	{
1047		public static double expint_E1 (double x);
1048		public static int expint_E1_e (double x, out Result result);
1049		public static double expint_E2 (double x);
1050		public static int expint_E2_e (double x, out Result result);
1051		public static double expint_En (int n, double x);
1052		public static int expint_En_e (int n, double x, out Result result);
1053		public static double expint_Ei (double x);
1054		public static int expint_Ei_e (double x, out Result result);
1055		public static double expint_3 (double x);
1056		public static int expint_3_e (double x, out Result result);
1057		public static double Shi (double x);
1058		public static int Shi_e (double x, out Result result);
1059		public static double Chi (double x);
1060		public static int Chi_e (double x, out Result result);
1061		public static double Si (double x);
1062		public static int Si_e (double x, out Result result);
1063		public static double Ci (double x);
1064		public static int Ci_e (double x, out Result result);
1065		public static double atanint (double x);
1066		public static double atanint_e (double x, out Result result);
1067	}
1068
1069	[CCode (lower_case_cprefix="gsl_sf_fermi_dirac_", cheader_filename="gsl/gsl_sf_fermi_dirac.h")]
1070	namespace FermiDirac
1071	{
1072		public static double m1 (double x);
1073		public static int m1_e (double x, out Result result);
1074		[CCode (cname="gsl_sf_fermi_dirac_0")]
1075		public static double F0 (double x);
1076		[CCode (cname="gsl_sf_fermi_dirac_0_e")]
1077		public static int F0_e (double x, out Result result);
1078		[CCode (cname="gsl_sf_fermi_dirac_1")]
1079		public static double F1 (double x);
1080		[CCode (cname="gsl_sf_fermi_dirac_1_e")]
1081		public static int F1_e (double x, out Result result);
1082		[CCode (cname="gsl_sf_fermi_dirac_2")]
1083		public static double F2 (double x);
1084		[CCode (cname="gsl_sf_fermi_dirac_2_e")]
1085		public static int F2_e (double x, out Result result);
1086		[CCode (cname="gsl_sf_fermi_dirac_int")]
1087		public static double Fint (int j, double x);
1088		[CCode (cname="gsl_sf_fermi_dirac_int_e")]
1089		public static int Fint_e (int j, double x, out Result result);
1090		public static double mhalf (double x);
1091		public static int mhalf_e (double x, out Result result);
1092		public static double half (double x);
1093		public static int half_e (double x, out Result result);
1094		public static double 3half (double x);
1095		public static int 3half_e (double x, out Result result);
1096		public static double inc_0 (double x, double b);
1097		public static int inc_0_e (double x, double b, out Result result);
1098	}
1099
1100	[CCode (lower_case_cprefix="gsl_sf_", cheader_filename="gsl/gsl_sf_gamma.h")]
1101	namespace GammaBeta
1102	{
1103		public static double gamma (double x);
1104		public static int gamma_e (double x, out Result result);
1105		public static double lngamma (double x);
1106		public static int lngamma_e (double x, out Result result);
1107		public static int lngamma_sgn_e (double x, out Result result, out double sgn);
1108		public static double gammastar (double x);
1109		public static int gammastar_e (double x, out Result result);
1110		public static double gammainv (double x);
1111		public static int gammainv_e (double x, out Result result);
1112		public static int lngamma_complex_e (double zr, double zi, out Result lnr, out Result arg);
1113
1114		public static double fact (uint n);
1115		public static int fact_e (uint n, out Result result);
1116		public static double doublefact (uint n);
1117		public static int doublefact_e (uint n, out Result result);
1118		public static double lnfact (uint n);
1119		public static int lnfact_e (uint n, out Result result);
1120		public static double lndoublefact (uint n);
1121		public static int lndoublefact_e (uint n, out Result result);
1122		public static double choose (uint n, uint m);
1123		public static int choose_e (uint n, uint m, out Result result);
1124		public static double lnchoose (uint n, uint m);
1125		public static int lnchoose_e (uint n, uint m, out Result result);
1126		public static double taylorcoeff (int n, double x);
1127		public static int taylorcoeff_e (int n, double x, out Result result);
1128
1129		public static double poch (double a, double x);
1130		public static int poch_e (double a, double x, out Result result);
1131		public static double lnpoch (double a, double x);
1132		public static int lnpoch_e (double a, double x, out Result result);
1133		public static int lnpoch_sgn_e (double a, double x, out Result result, out double sgn);
1134		public static double pochrel (double a, double x);
1135		public static int pochrel_e (double a, double x, out Result result);
1136
1137		public static double gamma_inc (double a, double x);
1138		public static int gamma_inc_e (double a, double x, out Result result);
1139		public static double gamma_inc_Q (double a, double x);
1140		public static int gamma_inc_Q_e (double a, double x, out Result result);
1141		public static double gamma_inc_P (double a, double x);
1142		public static int gamma_inc_P_e (double a, double x, out Result result);
1143
1144		public static double beta (double a, double b);
1145		public static int beta_e (double a, double b, out Result result);
1146		public static double lnbeta (double a, double b);
1147		public static int lnbeta_e (double a, double b, out Result result);
1148
1149		public static double beta_inc (double a, double b, double x);
1150		public static int beta_inc_e (double a, double b, double x, out Result result);
1151	}
1152
1153	[CCode (lower_case_cprefix="gsl_sf_gegenpoly_", cheader_filename="gsl/gsl_sf_gegenbauer.h")]
1154	namespace GegenPoly
1155	{
1156		[CCode (cname="gsl_sf_gegenpoly_1")]
1157		public static double C1 (double lambda, double x);
1158		[CCode (cname="gsl_sf_gegenpoly_1_e")]
1159		public static double C1_e (double lambda, double x, out Result result);
1160		[CCode (cname="gsl_sf_gegenpoly_2")]
1161		public static double C2 (double lambda, double x);
1162		[CCode (cname="gsl_sf_gegenpoly_2_e")]
1163		public static double C2_e (double lambda, double x, out Result result);
1164		[CCode (cname="gsl_sf_gegenpoly_3")]
1165		public static double C3 (double lambda, double x);
1166		[CCode (cname="gsl_sf_gegenpoly_3_e")]
1167		public static double C3_e (double lambda, double x, out Result result);
1168		[CCode (cname="gsl_sf_gegenpoly_n")]
1169		public static double Cn (int n, double lambda, double x);
1170		[CCode (cname="gsl_sf_gegenpoly_n_e")]
1171		public static double Cn_e (int n, double lambda, double x, out Result result);
1172		public static int array (int nmax, double lambda, double x, [CCode (array_length = false)] double[] result_array);
1173	}
1174
1175	[CCode (lower_case_cprefix="gsl_sf_hyperg_", cheader_filename="gsl/gsl_sf_hyperg.h")]
1176	namespace Hyperg
1177	{
1178		public static double 0F1 (double c, double x);
1179		public static int 0F1_e (double c, double x, out Result result);
1180		public static double 1F1_int (int m, int n, double x);
1181		public static int 1F1_int_e (int m, int n, double x, out Result result);
1182		public static double 1F1 (double a, double b, double x);
1183		public static int 1F1_e (double a, double b, double x, out Result result);
1184		public static double U_int (int m, int n, double x);
1185		public static int U_int_e (int m, int n, double x, out Result result);
1186		public static int U_int_e10_e (int m, int n, double x, out ResultE10 result);
1187		public static double U (double a, double b, double x);
1188		public static int U_e (double a, double b, double x, out Result result);
1189		public static int U_e10_e (double a, double b, double x, out ResultE10 result);
1190		public static double 2F1 (double a, double b, double c, double x);
1191		public static int 2F1_e (double a, double b, double c, double x, out Result result);
1192		public static double 2F1_conj (double aR, double aI, double c, double x);
1193		public static int 2F1_conj_e (double aR, double aI, double c, double x, out Result result);
1194		public static double 2F1_renorm (double a, double b, double c, double x);
1195		public static int 2F1_renorm_e (double a, double b, double c, double x, out Result result);
1196		public static double 2F1_conj_renorm (double aR, double aI, double c, double x);
1197		public static int 2F1_conj_renorm_e (double aR, double aI, double c, double x, out Result result);
1198		public static double 2F0 (double a, double b, double x);
1199		public static int 2F0_e (double a, double b, double x, out Result result);
1200	}
1201
1202	[CCode (cheader_filename="gsl/gsl_sf_laguerre.h")]
1203	namespace Laguerre
1204	{
1205		[CCode (cname="gsl_sf_laguerre_1")]
1206		public static double L1 (double a, double x);
1207		[CCode (cname="gsl_sf_laguerre_1_e")]
1208		public static double L1_e (double a, double x, out Result result);
1209		[CCode (cname="gsl_sf_laguerre_2")]
1210		public static double L2 (double a, double x);
1211		[CCode (cname="gsl_sf_laguerre_2_e")]
1212		public static double L2_e (double a, double x, out Result result);
1213		[CCode (cname="gsl_sf_laguerre_3")]
1214		public static double L3 (double a, double x);
1215		[CCode (cname="gsl_sf_laguerre_3_e")]
1216		public static double L3_e (double a, double x, out Result result);
1217		[CCode (cname="gsl_sf_laguerre_n")]
1218		public static double Ln (int n, double a, double x);
1219		[CCode (cname="gsl_sf_laguerre_n_e")]
1220		public static double Ln_e (int n, double a, double x, out Result result);
1221	}
1222
1223	[CCode (lower_case_cprefix="gsl_sf_lambert_", cheader_filename="gsl/gsl_sf_lambert.h")]
1224	namespace Lambert
1225	{
1226		public static double W0 (double x);
1227		public static int W0_e (double x, out Result result);
1228		public static double Wm1 (double x);
1229		public static int Wm1_e (double x, out Result result);
1230	}
1231
1232	[CCode (lower_case_cprefix="gsl_sf_legendre_", cheader_filename="gsl/gsl_sf_legendre.h")]
1233	namespace LegendrePoly
1234	{
1235		public static double P1 (double x);
1236		public static int P1_e (double x, out Result result);
1237		public static double P2 (double x);
1238		public static int P2_e (double x, out Result result);
1239		public static double P3 (double x);
1240		public static int P3_e (double x, out Result result);
1241		public static double Pl (int l, double x);
1242		public static int Pl_e (int l, double x, out Result result);
1243		public static int Pl_array (int lmax, double x, [CCode (array_length = false)] double[] result_array);
1244		public static int Pl_deriv_array (int lmax, double x, [CCode (array_length = false)] double[] result_array, [CCode (array_length = false)] double[] result_deriv_array);
1245		public static double Q0 (double x);
1246		public static int Q0_e (double x, out Result result);
1247		public static double Q1 (double x);
1248		public static int Q1_e (double x, out Result result);
1249		public static double Ql (int l, double x);
1250		public static int Ql_e (int l, double x, out Result result);
1251
1252		public static double Plm (int l, int m, double x);
1253		public static int Plm_e (int l, int m, double x, out Result result);
1254		public static int Plm_array (int lmax, int m, double x, [CCode (array_length = false)] double[] result_array);
1255		public static int Plm_deriv_array (int lmax, int m, double x, [CCode (array_length = false)] double[] result_array, [CCode (array_length = false)] double[] result_deriv_array);
1256		public static double sphPlm (int l, int m, double x);
1257		public static int sphPlm_e (int l, int m, double x, out Result result);
1258		public static int sphPlm_array (int lmax, int m, double x, [CCode (array_length = false)] double[] result_array);
1259		public static int sphPlm_deriv_array (int lmax, int m, double x, [CCode (array_length = false)] double[] result_array, [CCode (array_length = false)] double[] result_deriv_array);
1260		public static int array_size (int lmax, int m);
1261
1262		[CCode (cname="gsl_sf_conicalP_half")]
1263		public static double conicalP_half (double lambda, double x);
1264		[CCode (cname="gsl_sf_conicalP_half_e")]
1265		public static int conicalP_half_e (double lambda, double x, out Result result);
1266		[CCode (cname="gsl_sf_conicalP_mhalf")]
1267		public static double conicalP_mhalf (double lambda, double x);
1268		[CCode (cname="gsl_sf_conicalP_mhalf_e")]
1269		public static int conicalP_mhalf_e (double lambda, double x, out Result result);
1270		[CCode (cname="gsl_sf_conicalP_0")]
1271		public static double conicalP_0 (double lambda, double x);
1272		[CCode (cname="gsl_sf_conicalP_0_e")]
1273		public static int conicalP_0_e (double lambda, double x, out Result result);
1274		[CCode (cname="gsl_sf_conicalP_1")]
1275		public static double conicalP_1 (double lambda, double x);
1276		[CCode (cname="gsl_sf_conicalP_1_e")]
1277		public static int conicalP_1_e (double lambda, double x, out Result result);
1278		[CCode (cname="gsl_sf_conicalP_sph_reg")]
1279		public static double conicalP_sph_reg (int l, double lambda, double x);
1280		[CCode (cname="gsl_sf_conicalP_sph_reg_e")]
1281		public static int conicalP_sph_reg_e (int l, double lambda, double x, out Result result);
1282		[CCode (cname="gsl_sf_conicalP_cyl_reg")]
1283		public static double conicalP_cyl_reg (int m, double lambda, double x);
1284		[CCode (cname="gsl_sf_conicalP_cyl_reg_e")]
1285		public static int conicalP_cyl_reg_e (int m, double lambda, double x, out Result result);
1286
1287		public static double H3d_0 (double lambda, double eta);
1288		public static int H3d_0_e (double lambda, double eta, out Result result);
1289		public static double H3d_1 (double lambda, double eta);
1290		public static int H3d_1_e (double lambda, double eta, out Result result);
1291		public static double H3d (int l, double lambda, double eta);
1292		public static int H3d_e (int l, double lambda, double eta, out Result result);
1293		public static int H3d_array (int lmax, double lambda, double eta, [CCode (array_length = false)] double[] result_array);
1294	}
1295
1296	[CCode (lower_case_cprefix="gsl_sf_", cheader_filename="gsl/gsl_sf_log.h")]
1297	namespace Log
1298	{
1299		public static double log (double x);
1300		public static int log_e (double x, out Result result);
1301		public static double log_abs (double x);
1302		public static int log_abs_e (double x, out Result result);
1303		public static int complex_log_e (double zr, double zi, out Result result, out Result theta);
1304		public static double log_1plusx (double x);
1305		public static int log_1plusx_e (double x, out Result result);
1306		public static double log_1plusx_mx (double x);
1307		public static int log_1plusx_mx_e (double x, out Result result);
1308	}
1309
1310	[Compact]
1311	[CCode (cname="gsl_sf_mathieu_workspace", cprefix="gsl_sf_mathieu_", cheader_filename="gsl/gsl_sf_mathieu.h")]
1312	public class MathieuWorkspace
1313	{
1314		public size_t size;
1315		public size_t even_order;
1316		public size_t odd_order;
1317		public int extra_values;
1318		public double qa;
1319		public double qb;
1320		public double* aa;
1321		public double* bb;
1322		public double* dd;
1323		public double* ee;
1324		public double* tt;
1325		public double* e2;
1326		public double* zz;
1327		public Vector eval;
1328		public Matrix evec;
1329		public EigenSymmvWorkspace wmat;
1330
1331		public static int a_array (int order_min, int order_max, double qq, MathieuWorkspace work, [CCode (array_length = false)] double[] result_array);
1332		public static int b_array (int order_min, int order_max, double qq, MathieuWorkspace work, [CCode (array_length = false)] double[] result_array);
1333		public static int a (int order, double qq);
1334		public static int b (int order, double qq);
1335		public static int a_coeff (int order, double qq, double aa, [CCode (array_length = false)] double[] coeff);
1336		public static int b_coeff (int order, double qq, double aa, [CCode (array_length = false)] double[] coeff);
1337
1338		[CCode (cname="gsl_sf_mathieu_alloc")]
1339		public MathieuWorkspace (size_t nn, double qq);
1340
1341		public static int ce (int order, double qq, double zz);
1342		public static int se (int order, double qq, double zz);
1343		public static int ce_array (int nmin, int nmax, double qq, double zz, MathieuWorkspace work, [CCode (array_length = false)] double[] result_array);
1344		public static int se_array (int nmin, int nmax, double qq, double zz, MathieuWorkspace work, [CCode (array_length = false)] double[] result_array);
1345
1346		public static int Mc (int kind, int order, double qq, double zz);
1347		public static int Ms (int kind, int order, double qq, double zz);
1348		public static int Mc_array (int kind, int nmin, int nmax, double qq, double zz, MathieuWorkspace work, [CCode (array_length = false)] double[] result_array);
1349		public static int Ms_array (int kind, int nmin, int nmax, double qq, double zz, MathieuWorkspace work, [CCode (array_length = false)] double[] result_array);
1350	}
1351
1352	[CCode (lower_case_cprefix="gsl_sf_", cheader_filename="gsl/gsl_sf_pow_int.h")]
1353	namespace Pow
1354	{
1355		public static double pow_int (double x, int n);
1356		public static int pow_int_e (double x, int n, out Result result);
1357	}
1358
1359	[CCode (lower_case_cprefix="gsl_sf_", cheader_filename="gsl/gsl_sf_psi.h")]
1360	namespace Psi
1361	{
1362		public static double psi_int (int n);
1363		public static int psi_int_e (int n, out Result result);
1364		public static double psi (double x);
1365		public static int psi_e (double x, out Result result);
1366		public static double psi_1piy (double y);
1367		public static int psi_1piy_e (double y, out Result result);
1368
1369		public static double psi_1_int (int n);
1370		public static int psi_1_int_e (int n, out Result result);
1371		public static double psi_1 (double x);
1372		public static int psi_1_e (double x, out Result result);
1373
1374		public static double psi_n (int n, double x);
1375		public static int psi_n_e (int n, double x, out Result result);
1376	}
1377
1378	[CCode (lower_case_cprefix="gsl_sf_", cheader_filename="gsl/gsl_sf_synchrotron.h")]
1379	namespace Synchrotron
1380	{
1381		public static double synchrotron_1 (double x);
1382		public static int synchrotron_1_e (double x, out Result result);
1383		public static double synchrotron_2 (double x);
1384		public static double synchrotron_2_e (double x, out Result result);
1385	}
1386
1387	[CCode (lower_case_cprefix="gsl_sf_", cheader_filename="gsl/gsl_sf_transport.h")]
1388	namespace Transport
1389	{
1390		public static double transport_2 (double x);
1391		public static int transport_2_e (double x, out Result result);
1392		public static double transport_3 (double x);
1393		public static int transport_3_e (double x, out Result result);
1394		public static double transport_4 (double x);
1395		public static int transport_4_e (double x, out Result result);
1396		public static double transport_5 (double x);
1397		public static int transport_5_e (double x, out Result result);
1398	}
1399
1400	[CCode (lower_case_cprefix="gsl_sf_", cheader_filename="gsl/gsl_sf_trig.h")]
1401	namespace Trig
1402	{
1403		public static double sin (double x);
1404		public static int sin_e (double x, out Result result);
1405		public static double cos (double x);
1406		public static int cos_e (double x, out Result result);
1407		public static double hypot (double x, double y);
1408		public static int hypot_e (double x, double y, out Result result);
1409		public static double sinc (double x);
1410		public static int sinc_e (double x, out Result result);
1411		public static double complex_sin_e (double zr, double zi, out Result szr, out Result szi);
1412		public static double complex_cos_e (double zr, double zi, out Result czr, out Result czi);
1413		public static double complex_logsin_e (double zr, double zi, out Result lszr, out Result lszi);
1414		public static double lnsinh (double x);
1415		public static int lnsinh_e (double x, out Result result);
1416		public static double lncosh (double x);
1417		public static int lncosh_e (double x, out Result result);
1418		public static int polar_to_rect (double r, double theta, out Result x, out Result y);
1419		public static int rect_to_polar (double x, double y, out Result r, out Result theta);
1420		public static double angle_restrict_symm (double theta);
1421		public static int angle_restrict_symm_e (out double theta);
1422		public static double angle_restrict_pos (double theta);
1423		public static int angle_restrict_pos_e (out double theta);
1424		public static int sin_err_e (double x, double dx, out Result result);
1425		public static int cos_err_e (double x, double dx, out Result result);
1426	}
1427
1428	[CCode (lower_case_cprefix="gsl_sf_", cheader_filename="gsl/gsl_sf_zeta.h")]
1429	namespace Zeta
1430	{
1431		public static double zeta_int (int n);
1432		public static int zeta_int_e (int n, out Result result);
1433		public static double zeta (double s);
1434		public static int zeta_e (double s, out Result result);
1435		public static double zetam1_int (int n);
1436		public static int zetam1_int_e (int n, out Result result);
1437		public static double zetam1 (double s);
1438		public static int zetam1_e (double s, out Result result);
1439		public static double hzeta (double s, double q);
1440		public static int hzeta_e (double s, double q, out Result result);
1441		public static double eta_int (int n);
1442		public static int eta_int_e (int n, out Result result);
1443		public static double eta (double s);
1444		public static int eta_e (double s, out Result result);
1445	}
1446
1447
1448	/*
1449	 * Blocks, Vectors and Matrices
1450	 */
1451	[Compact]
1452	[CCode (cname="gsl_block", cheader_filename="gsl/gsl_block_double.h")]
1453	public class Block
1454	{
1455		public size_t size;
1456		public double* data;
1457
1458		[CCode (cname="gsl_block_alloc")]
1459		public Block (size_t n);
1460		[CCode (cname="gsl_block_calloc")]
1461		public Block.with_zeros (size_t n);
1462
1463		[CCode (instance_pos=-1)]
1464		public int fwrite (GLib.FileStream stream);
1465		[CCode (instance_pos=-1)]
1466		public int fread (GLib.FileStream stream);
1467		public static int fprintf (GLib.FileStream stream, Block b, string format);
1468		[CCode (instance_pos=-1)]
1469		public int fscanf (GLib.FileStream stream);
1470	}
1471
1472	[Compact]
1473	[CCode (cname="gsl_block_complex", cheader_filename="gsl/gsl_block_complex_double.h")]
1474	public class BlockComplex
1475	{
1476		public size_t size;
1477		public double* data;
1478
1479		[CCode (cname="gsl_block_complex_alloc")]
1480		public BlockComplex (size_t n);
1481		[CCode (cname="gsl_block_complex_calloc")]
1482		public BlockComplex.with_zeros (size_t n);
1483
1484		[CCode (instance_pos=-1)]
1485		public int fwrite (GLib.FileStream stream);
1486		[CCode (instance_pos=-1)]
1487		public int fread (GLib.FileStream stream);
1488		public static int fprintf (GLib.FileStream stream, BlockComplex b, string format);
1489		[CCode (instance_pos=-1)]
1490		public int fscanf (GLib.FileStream stream);
1491	}
1492
1493	[SimpleType]
1494	[CCode (cname="gsl_vector_view", cheader_filename="gsl/gsl_vector_double.h", has_type_id = false)]
1495	public struct VectorView
1496	{
1497		public unowned Vector vector;
1498
1499		public static VectorView array (double[] v);
1500		public static VectorView array_with_stride ([CCode (array_length = false)] double[] v, size_t stride, size_t n);
1501	}
1502
1503	[Compact]
1504	[CCode (cname="gsl_vector", cheader_filename="gsl/gsl_vector_double.h")]
1505	public class Vector
1506	{
1507		public size_t size;
1508		public size_t stride;
1509		public double* data;
1510		public Block block;
1511		public int owner;
1512
1513		[CCode (cname="gsl_vector_alloc")]
1514		public Vector (size_t n);
1515		[CCode (cname="gsl_vector_calloc")]
1516		public Vector.with_zeros (size_t n);
1517		[CCode (cname="gsl_vector_alloc_from_block")]
1518		public Vector.from_block (Block b, size_t offset, size_t n, size_t stride);
1519		[CCode (cname="gsl_vector_alloc_from_vector")]
1520		public Vector.from_vector (Vector v, size_t offset, size_t n, size_t stride);
1521
1522		public double @get (size_t i);
1523		public void @set (size_t i, double x);
1524		public double* ptr (size_t i);
1525
1526		public void set_all (double x);
1527		public void set_zero ();
1528		public void set_basis (size_t i);
1529
1530		[CCode (instance_pos=-1)]
1531		public int fwrite (GLib.FileStream stream);
1532		[CCode (instance_pos=-1)]
1533		public int fread (GLib.FileStream stream);
1534		public static int fprintf (GLib.FileStream stream, Vector v, string format);
1535		[CCode (instance_pos=-1)]
1536		public int fscanf (GLib.FileStream stream);
1537
1538		public VectorView subvector (size_t offset, size_t n);
1539		public VectorView subvector_with_stride (size_t offset, size_t stride, size_t n);
1540
1541		public int memcpy (Vector src);
1542		public int swap (Vector w);
1543
1544		public int swap_elements (size_t i, size_t j);
1545		public int reverse ();
1546
1547		public int add (Vector b);
1548		public int sub (Vector b);
1549		public int mul (Vector b);
1550		public int div (Vector b);
1551		public int scale (double x);
1552		public int add_constant (double x);
1553
1554		public double max ();
1555		public double min ();
1556		public void minmax (out double min_out, out double max_out);
1557		public size_t max_index ();
1558		public size_t min_index ();
1559		public void minmax_index (out size_t imin, out size_t imax);
1560
1561		public bool isnull ();
1562		public bool ispos ();
1563		public bool isneg ();
1564		public bool isnonneg ();
1565	}
1566
1567	[SimpleType]
1568	[CCode (cname="gsl_vector_complex_view", cheader_filename="gsl/gsl_vector_complex_double.h", has_type_id = false)]
1569	public struct VectorComplexView
1570	{
1571		public unowned VectorComplex vector;
1572
1573		public static VectorComplexView array (double[] v);
1574		public static VectorComplexView array_with_stride ([CCode (array_length = false)] double[] v, size_t stride, size_t n);
1575	}
1576
1577	[Compact]
1578	[CCode (cname="gsl_vector_complex", cheader_filename="gsl/gsl_vector_complex_double.h")]
1579	public class VectorComplex
1580	{
1581		public size_t size;
1582		public size_t stride;
1583		public double* data;
1584		public BlockComplex block;
1585		public int owner;
1586
1587		[CCode (cname="gsl_vector_complex_alloc")]
1588		public VectorComplex (size_t n);
1589		[CCode (cname="gsl_vector_complex_calloc")]
1590		public VectorComplex.with_zeros (size_t n);
1591		[CCode (cname="gsl_vector_complex_alloc_from_block")]
1592		public VectorComplex.from_block (BlockComplex b, size_t offset, size_t n, size_t stride);
1593		[CCode (cname="gsl_vector_complex_alloc_from_vector")]
1594		public VectorComplex.from_vector (VectorComplex v, size_t offset, size_t n, size_t stride);
1595
1596		public Complex @get (size_t i);
1597		public void @set (size_t i, Complex x);
1598		public Complex* ptr (size_t i);
1599
1600		public void set_all (Complex x);
1601		public void set_zero ();
1602		public void set_basis (size_t i);
1603
1604		[CCode (instance_pos=-1)]
1605		public int fwrite (GLib.FileStream stream);
1606		[CCode (instance_pos=-1)]
1607		public int fread (GLib.FileStream stream);
1608		public static int fprintf (GLib.FileStream stream, VectorComplex v, string format);
1609		[CCode (instance_pos=-1)]
1610		public int fscanf (GLib.FileStream stream);
1611
1612		public VectorComplexView subvector (size_t i, size_t n);
1613		public VectorComplexView subvector_with_stride (size_t i, size_t stride, size_t n);
1614		public VectorView const_real ();
1615		public VectorView const_imag ();
1616
1617		public int memcpy (VectorComplex src);
1618		public int swap (VectorComplex w);
1619
1620		public int swap_elements (size_t i, size_t j);
1621		public int reverse ();
1622
1623		public int add (VectorComplex b);
1624		public int sub (VectorComplex b);
1625		public int mul (VectorComplex b);
1626		public int div (VectorComplex b);
1627		public int scale (Complex x);
1628		public int add_constant (Complex x);
1629
1630		public bool isnull ();
1631		public bool ispos ();
1632		public bool isneg ();
1633		public bool isnonneg ();
1634	}
1635
1636	[SimpleType]
1637	[CCode (cname="gsl_matrix_view", cheader_filename="gsl/gsl_matrix_double.h", has_type_id = false)]
1638	public struct MatrixView
1639	{
1640		public unowned Matrix matrix;
1641
1642		public static MatrixView array ([CCode (array_length = false)] double[] v, size_t n1, size_t n2);
1643		public static MatrixView array_with_tda ([CCode (array_length = false)] double[] v, size_t n1, size_t n2, size_t tda);
1644		public static MatrixView vector (Vector v, size_t n1, size_t n2);
1645		public static MatrixView vector_with_tda (Vector v, size_t n1, size_t n2, size_t tda);
1646	}
1647
1648	[Compact]
1649	[CCode (cname="gsl_matrix", cheader_filename="gsl/gsl_matrix_double.h")]
1650	public class Matrix
1651	{
1652		public size_t size1;
1653		public size_t size2;
1654		public size_t tda;
1655		public double* data;
1656		public Block block;
1657		public int owner;
1658
1659		[CCode (cname="gsl_matrix_alloc")]
1660		public Matrix (size_t n1, size_t n2);
1661		[CCode (cname="gsl_matrix_calloc")]
1662		public Matrix.with_zeros (size_t n1, size_t n2);
1663		[CCode (cname="gsl_matrix_alloc_from_block")]
1664		public Matrix.from_block (Block b, size_t offset, size_t n1, size_t n2, size_t d2);
1665		[CCode (cname="gsl_matrix_alloc_from_matrix")]
1666		public Matrix.from_matrix (Matrix m, size_t k1, size_t k2, size_t n1, size_t n2);
1667
1668		[CCode (cname="gsl_vector_alloc_row_from_matrix")]
1669		public Vector alloc_row_from_matrix (size_t i);
1670		[CCode (cname="gsl_vector_alloc_col_from_matrix")]
1671		public Vector alloc_col_from_matrix (size_t j);
1672
1673		public double @get (size_t i, size_t j);
1674		public void @set (size_t i, size_t j, double x);
1675		public double* ptr (size_t i, size_t j);
1676
1677		public void set_all (double x);
1678		public void set_zero ();
1679		public void set_identity ();
1680
1681		[CCode (instance_pos=-1)]
1682		public int fwrite (GLib.FileStream stream);
1683		[CCode (instance_pos=-1)]
1684		public int fread (GLib.FileStream stream);
1685		public static int fprintf (GLib.FileStream stream, Matrix m, string format);
1686		[CCode (instance_pos=-1)]
1687		public int fscanf (GLib.FileStream stream);
1688
1689		public MatrixView submatrix (size_t k, size_t k2, size_t n1, size_t n2);
1690		public VectorView row (size_t i);
1691		public VectorView column (size_t j);
1692		public VectorView subrow (size_t i, size_t offset, size_t n);
1693		public VectorView subcolumn (size_t i, size_t offset, size_t n);
1694		public VectorView diagonal ();
1695		public VectorView subdiagonal (size_t k);
1696		public VectorView superdiagonal (size_t k);
1697
1698		public int memcpy (Matrix src);
1699		public int swap (Matrix m2);
1700
1701		public static int get_row (Vector v, Matrix m, size_t i);
1702		public static int get_col (Vector v, Matrix m, size_t j);
1703		public int set_row (size_t i, Vector v);
1704		public int set_col (size_t j, Vector v);
1705
1706		public int swap_rows (size_t i, size_t j);
1707		public int swap_columns (size_t i, size_t j);
1708		public int swap_rowcol (size_t i, size_t j);
1709		public int transpose_memcpy (Matrix src);
1710		public int transpose ();
1711
1712		public int add (Matrix b);
1713		public int sub (Matrix b);
1714		public int mul_elements (Matrix b);
1715		public int div_elements (Matrix b);
1716		public int scale (double x);
1717		public int add_constant (double x);
1718		public int add_diagonal (double x);
1719
1720		public double max ();
1721		public double min ();
1722		public void minmax (out double min_out, out double max_out);
1723		public void max_index (out size_t imax, out size_t jmax);
1724		public void min_index (out size_t imin, out size_t jmin);
1725		public void minmax_index (out size_t imin, out size_t jmin, out size_t imax, out size_t jmax);
1726
1727		public bool isnull ();
1728		public bool ispos ();
1729		public bool isneg ();
1730		public bool isnonneg ();
1731	}
1732
1733	[SimpleType]
1734	[CCode (cname="gsl_matrix_complex_view", cheader_filename="gsl/gsl_matrix_complex_double.h", has_type_id = false)]
1735	public struct MatrixComplexView
1736	{
1737		public unowned MatrixComplex matrix;
1738
1739		public static MatrixComplexView array ([CCode (array_length = false)] double[] v, size_t n1, size_t n2);
1740		public static MatrixComplexView array_with_tda ([CCode (array_length = false)] double[] v, size_t n1, size_t n2, size_t tda);
1741		public static MatrixComplexView vector (VectorComplex v, size_t n1, size_t n2);
1742		public static MatrixComplexView vector_with_tda (VectorComplex v, size_t n1, size_t n2, size_t tda);
1743	}
1744
1745	[Compact]
1746	[CCode (cname="gsl_matrix_complex", cheader_filename="gsl/gsl_matrix_complex_double.h")]
1747	public class MatrixComplex
1748	{
1749		public size_t size1;
1750		public size_t size2;
1751		public size_t tda;
1752		public double* data;
1753		public BlockComplex block;
1754		public int owner;
1755
1756		[CCode (cname="gsl_matrix_complex_alloc")]
1757		public MatrixComplex (size_t n1, size_t n2);
1758		[CCode (cname="gsl_matrix_complex_calloc")]
1759		public MatrixComplex.with_zeros (size_t n1, size_t n2);
1760		[CCode (cname="gsl_matrix_complex_alloc_from_block")]
1761		public MatrixComplex.from_block (BlockComplex b, size_t offset, size_t n1, size_t n2, size_t d2);
1762		[CCode (cname="gsl_matrix_complex_alloc_from_matrix")]
1763		public MatrixComplex.from_matrix (MatrixComplex m, size_t k1, size_t k2, size_t n1, size_t n2);
1764
1765		[CCode (cname="gsl_vector_complex_alloc_row_from_matrix")]
1766		public VectorComplex alloc_row_from_matrix (size_t i);
1767		[CCode (cname="gsl_vector_complex_alloc_col_from_matrix")]
1768		public VectorComplex alloc_col_from_matrix (size_t j);
1769
1770		public Complex @get (size_t i, size_t j);
1771		public void @set (size_t i, size_t j, Complex x);
1772		public Complex* ptr (size_t i, size_t j);
1773
1774		public void set_all (Complex x);
1775		public void set_zero ();
1776		public void set_identity ();
1777
1778		[CCode (instance_pos=-1)]
1779		public int fwrite (GLib.FileStream stream);
1780		[CCode (instance_pos=-1)]
1781		public int fread (GLib.FileStream stream);
1782		public static int fprintf (GLib.FileStream stream, MatrixComplex m, string format);
1783		[CCode (instance_pos=-1)]
1784		public int fscanf (GLib.FileStream stream);
1785
1786		public MatrixComplexView submatrix (size_t k, size_t k2, size_t n1, size_t n2);
1787		public VectorComplexView row (size_t i);
1788		public VectorComplexView column (size_t j);
1789		public VectorComplexView subrow (size_t i, size_t offset, size_t n);
1790		public VectorComplexView subcolumn (size_t i, size_t offset, size_t n);
1791		public VectorComplexView diagonal ();
1792		public VectorComplexView subdiagonal (size_t k);
1793		public VectorComplexView superdiagonal (size_t k);
1794
1795		public int memcpy (MatrixComplex src);
1796		public int swap (MatrixComplex m2);
1797
1798		public static int get_row (VectorComplex v, MatrixComplex m, size_t i);
1799		public static int get_col (VectorComplex v, MatrixComplex m, size_t j);
1800		public int set_row (size_t i, VectorComplex v);
1801		public int set_col (size_t j, VectorComplex v);
1802
1803		public int swap_rows (size_t i, size_t j);
1804		public int swap_columns (size_t i, size_t j);
1805		public int swap_rowcol (size_t i, size_t j);
1806		public int transpose_memcpy (MatrixComplex src);
1807		public int transpose ();
1808
1809		public int add (MatrixComplex b);
1810		public int sub (MatrixComplex b);
1811		public int mul_elements (MatrixComplex b);
1812		public int div_elements (MatrixComplex b);
1813		public int scale (Complex x);
1814		public int add_constant (Complex x);
1815		public int add_diagonal (Complex x);
1816
1817		public bool isnull ();
1818		public bool ispos ();
1819		public bool isneg ();
1820		public bool isnonneg ();
1821	}
1822
1823
1824	/*
1825	 * Permutations
1826	 */
1827	[Compact]
1828	[CCode (cname="gsl_permutation", cheader_filename="gsl/gsl_permutation.h")]
1829	public class Permutation
1830	{
1831		public size_t size;
1832		public size_t* data;
1833
1834		[CCode (cname="gsl_permutation_alloc")]
1835		public Permutation (size_t n);
1836		[CCode (cname="gsl_permutation_calloc")]
1837		public Permutation.with_zeros (size_t n);
1838
1839		public void init ();
1840		public int memcpy (Permutation src);
1841
1842		public size_t @get (size_t i);
1843		public int swap (size_t i, size_t j);
1844
1845		public int valid ();
1846
1847		public void reverse ();
1848		public int inverse (Permutation p);
1849		public int next ();
1850		public int prev ();
1851
1852		public int mul (Permutation pa, Permutation pb);
1853
1854		[CCode (instance_pos=-1)]
1855		public int fwrite (GLib.FileStream stream);
1856		[CCode (instance_pos=-1)]
1857		public int fread (GLib.FileStream stream);
1858		public static int fprintf (GLib.FileStream stream, Permutation p, string format);
1859		[CCode (instance_pos=-1)]
1860		public int fscanf (GLib.FileStream stream);
1861
1862		public int linear_to_canonical (Permutation p);
1863		public int canonical_to_linear (Permutation q);
1864		public size_t inversions ();
1865		public size_t linear_cycles ();
1866		public size_t canonical_cycles ();
1867	}
1868
1869	[CCode (lower_case_cprefix="gsl_", cheader_filename="gsl/gsl_permute_double.h")]
1870	namespace Permute
1871	{
1872		public static int permute (size_t* p, [CCode (array_length = false)] double[] data, size_t stride, size_t n);
1873		public static int permute_inverse (size_t* p, [CCode (array_length = false)] double[] data, size_t stride, size_t n);
1874	}
1875
1876	[CCode (cheader_filename="gsl/gsl_permute_complex_double.h")]
1877	namespace PermuteComplex
1878	{
1879		[CCode (cname="gsl_permute_complex")]
1880		public static int permute (size_t* p, [CCode (array_length = false)] double[] data, size_t stride, size_t n);
1881		[CCode (cname="gsl_permute_complex_inverse")]
1882		public static int permute_inverse (size_t* p, [CCode (array_length = false)] double[] data, size_t stride, size_t n);
1883	}
1884
1885	[CCode (cheader_filename="gsl/gsl_permute_vector_double.h")]
1886	namespace PermuteVector
1887	{
1888		[CCode (cname="gsl_permute_vector")]
1889		public static int permute (Permutation p, Vector v);
1890		[CCode (cname="gsl_permute_vector_inverse")]
1891		public static int permute_inverse (Permutation p, Vector v);
1892	}
1893
1894	[CCode (cheader_filename="gsl/gsl_permute_vector_complex_double.h")]
1895	namespace PermuteVectorComplex
1896	{
1897		[CCode (cname="gsl_permute_vector_complex")]
1898		public static int permute (Permutation p, VectorComplex v);
1899		[CCode (cname="gsl_permute_vector_complex_inverse")]
1900		public static int permute_inverse (Permutation p, VectorComplex v);
1901	}
1902
1903
1904	/*
1905	 * Combinations
1906	 */
1907	[Compact]
1908	[CCode (cname="gsl_combination", cheader_filename="gsl/gsl_combination.h")]
1909	public class Combination
1910	{
1911		public size_t n;
1912		public size_t k;
1913		public size_t* data;
1914
1915		[CCode (cname="gsl_combination_alloc")]
1916		public Combination (size_t n, size_t k);
1917		[CCode (cname="gsl_combination_calloc")]
1918		public Combination.with_zeros (size_t n, size_t k);
1919
1920		public void init_first ();
1921		public void init_last ();
1922		public int memcpy (Combination src);
1923
1924		public size_t @get (size_t i);
1925
1926		public int valid ();
1927
1928		public int next ();
1929		public int prev ();
1930
1931		[CCode (instance_pos=-1)]
1932		public int fwrite (GLib.FileStream stream);
1933		[CCode (instance_pos=-1)]
1934		public int fread (GLib.FileStream stream);
1935		public static int fprintf (GLib.FileStream stream, Combination c, string format);
1936		[CCode (instance_pos=-1)]
1937		public int fscanf (GLib.FileStream stream);
1938	}
1939
1940
1941	/*
1942	 * Sorting
1943	 */
1944	[CCode (lower_case_cprefix="gsl_sort_", cheader_filename="gsl/gsl_sort_double.h")]
1945	namespace Sort
1946	{
1947		[CCode (cname="gsl_sort")]
1948		public static void sort ([CCode (array_length = false)] double[] data, size_t stride, size_t n);
1949		[CCode (cname="gsl_sort_index")]
1950		public static void sort_index ([CCode (array_length = false)] size_t[] p, [CCode (array_length = false)] double[] data, size_t stride, size_t n);
1951		public static int smallest ([CCode (array_length = false)] double[] dest, size_t k, [CCode (array_length = false)] double[] src, size_t stride, size_t n);
1952		public static int smallest_index ([CCode (array_length = false)] size_t[] p, size_t k, [CCode (array_length = false)] double[] src, size_t stride, size_t n);
1953		public static int largest ([CCode (array_length = false)] double[] dest, size_t k, [CCode (array_length = false)] double[] src, size_t stride, size_t n);
1954		public static int largest_index ([CCode (array_length = false)] size_t[] p, size_t k, [CCode (array_length = false)] double[] src, size_t stride, size_t n);
1955	}
1956
1957	[CCode (lower_case_cprefix="gsl_sort_vector_", cheader_filename="gsl/gsl_sort_vector_double.h")]
1958	namespace SortVector
1959	{
1960		[CCode (cname="gsl_sort_vector")]
1961		public static void sort (Vector v);
1962		[CCode (cname="gsl_sort_vector_index")]
1963		public static int sort_index (Permutation p, Vector v);
1964		public static int smallest ([CCode (array_length = false)] double[] dest, size_t k, Vector v);
1965		public static int smallest_index ([CCode (array_length = false)] size_t[] p, size_t k, Vector v);
1966		public static int largest ([CCode (array_length = false)] double[] dest, size_t k, Vector v);
1967		public static int largest_index ([CCode (array_length = false)] size_t[] p, size_t k, Vector v);
1968	}
1969
1970
1971	/*
1972	 * Linear Algebra
1973	 */
1974	[CCode (lower_case_cprefix="gsl_linalg_", cheader_filename="gsl/gsl_linalg.h")]
1975	namespace LinAlg
1976	{
1977		public static int LU_decomp (Matrix A, Permutation p, out int signum);
1978		public static int complex_LU_decomp (MatrixComplex A, Permutation p, out int signum);
1979		public static int LU_solve (Matrix LU, Permutation p, Vector b, Vector x);
1980		public static int complex_LU_solve (MatrixComplex LU, Permutation p, VectorComplex b, VectorComplex x);
1981		public static int LU_svx (Matrix LU, Permutation p, Vector x);
1982		public static int complex_LU_svx (MatrixComplex LU, Permutation p, VectorComplex x);
1983		public static int LU_refine (Matrix A, Matrix LU, Permutation p, Vector b, Vector x, Vector residual);
1984		public static int complex_LU_refine (MatrixComplex A, MatrixComplex LU, Permutation p, VectorComplex b, VectorComplex x, VectorComplex residual);
1985		public static int LU_invert (Matrix LU, Permutation p, Matrix inverse);
1986		public static int complex_LU_invert (MatrixComplex LU, Permutation p, MatrixComplex inverse);
1987		public static double LU_det (Matrix LU, int signum);
1988		public static Complex complex_LU_det (MatrixComplex LU, int signum);
1989		public static double LU_lndet (Matrix LU);
1990		public static double complex_LU_lndet (MatrixComplex LU);
1991		public static int LU_sgndet (Matrix LU, int signum);
1992		public static Complex complex_LU_sgndet (MatrixComplex LU, int signum);
1993
1994		public static int QR_decomp (Matrix A, Vector tau);
1995		public static int QR_solve (Matrix QR, Vector tau, Vector b, Vector x);
1996		public static int QR_svx (Matrix QR, Vector tau, Vector x);
1997		public static int QR_lssolve (Matrix QR, Vector tau, Vector b, Vector x, Vector residual);
1998		public static int QR_QTvec (Matrix QR, Vector tau, Vector v);
1999		public static int QR_Qvec (Matrix QR, Vector tau, Vector v);
2000		public static int QR_QTmat (Matrix QR, Vector tau, Matrix A);
2001		public static int QR_Rsolve (Matrix QR, Vector b, Vector x);
2002		public static int QR_Rsvx (Matrix QR, Vector x);
2003		public static int QR_unpack (Matrix QR, Vector tau, Matrix Q, Matrix R);
2004		public static int QR_QRsolve (Matrix Q, Matrix R, Vector b, Vector x);
2005		public static int QR_update (Matrix Q, Matrix R, Vector w, Vector v);
2006		public static int R_solve (Matrix R, Vector b, Vector x);
2007		public static int R_svx (Matrix R, Vector x);
2008
2009		public static int QRPT_decomp (Matrix A, Vector tau, Permutation p, out int signum, Vector norm);
2010		public static int QRPT_decomp2 (Matrix A, Matrix q, Matrix r, Vector tau, Permutation p, out int signum, Vector norm);
2011		public static int QRPT_solve (Matrix QR, Vector tau, Permutation p, Vector b, Vector x);
2012		public static int QRPT_svx (Matrix QR, Vector tau, Permutation p, Vector x);
2013		public static int QRPT_QRsolve (Matrix Q, Matrix R, Permutation p, Vector b, Vector x);
2014		public static int QRPT_update (Matrix Q, Matrix R, Permutation p, Vector u, Vector v);
2015		public static int QRPT_Rsolve (Matrix QR, Permutation p, Vector b, Vector x);
2016		public static int QRPT_Rsvx (Matrix QR, Permutation p, Vector x);
2017
2018		public static int SV_decomp (Matrix A, Matrix V, Vector S, Vector work);
2019		public static int SV_decomp_mod (Matrix A, Matrix X, Matrix V, Vector S, Vector work);
2020		public static int SV_decomp_jacobi (Matrix A, Matrix V, Vector S);
2021		public static int SV_solve (Matrix U, Matrix V, Vector S, Vector b, Vector x);
2022
2023		public static int cholesky_decomp (Matrix A);
2024		public static int complex_cholesky_decomp (MatrixComplex A);
2025		public static int cholesky_solve (Matrix cholesky, Vector b, Vector x);
2026		public static int complex_cholesky_solve (MatrixComplex cholesky, VectorComplex b, VectorComplex x);
2027		public static int cholesky_svx (Matrix cholesky, Vector x);
2028		public static int complex_cholesky_svx (MatrixComplex cholesky, VectorComplex x);
2029
2030		public static int symmtd_decomp (Matrix A, Vector tau);
2031		public static int symmtd_unpack (Matrix A, Vector tau, Matrix Q, Vector diag, Vector subdiag);
2032		public static int symmtd_unpack_T (Matrix A, Vector diag, Vector subdiag);
2033
2034		public static int hermtd_decomp (MatrixComplex A, VectorComplex tau);
2035		public static int hermtd_unpack (MatrixComplex A, VectorComplex tau, MatrixComplex Q, Vector diag, Vector subdiag);
2036		public static int hermtd_unpack_T (MatrixComplex A, Vector diag, Vector subdiag);
2037
2038		public static int hessenberg_decomp (Matrix A, Vector tau);
2039		public static int hessenberg_unpack (Matrix H, Vector tau, Matrix U);
2040		public static int hessenberg_unpack_accum (Matrix H, Vector tau, Matrix V);
2041		public static int hessenberg_set_zero (Matrix H);
2042
2043		public static int hesstri_decomp (Matrix A, Matrix B, Matrix U, Matrix V, Vector work);
2044
2045		public static int bidiag_decomp (Matrix A, Vector tau_U, Vector tau_V);
2046		public static int bidiag_unpack (Matrix A, Vector tau_U, Matrix U, Vector tau_V, Matrix V, Vector diag, Vector superdiag);
2047		public static int bidiag_unpack2 (Matrix A, Vector tau_U, Vector tau_V, Matrix V);
2048		public static int bidiag_unpack_B (Matrix A, Vector diag, Vector superdiag);
2049
2050		public static int householder_transform (Vector v);
2051		public static Complex complex_householder_transform (VectorComplex V);
2052		public static int householder_hm (double tau, Vector v, Matrix A);
2053		public static int complex_householder_hm (Complex tau, VectorComplex V, MatrixComplex A);
2054		public static int householder_mh (double tau, Vector v, Matrix A);
2055		public static int complex_householder_mh (Complex tau, VectorComplex V, MatrixComplex A);
2056		public static int householder_hv (double tau, Vector v, Vector w);
2057		public static int complex_householder_hv (Complex tau, VectorComplex V, VectorComplex w);
2058
2059		public static int HH_solve (Matrix A, Vector b, Vector x);
2060		public static int HH_svx (Matrix A, Vector x);
2061
2062		public static int solve_tridiag (Vector diag, Vector e, Vector f, Vector b, Vector x);
2063		public static int solve_symm_tridiag (Vector diag, Vector e, Vector b, Vector x);
2064		public static int solve_cyc_tridiag (Vector diag, Vector e, Vector f, Vector b, Vector x);
2065		public static int solve_symm_cyc_tridiag (Vector diag, Vector e, Vector b, Vector x);
2066
2067		public static int balance_matrix (Matrix A, Vector D);
2068	}
2069
2070
2071	/*
2072	 * Eigensystems
2073	 */
2074	[CCode (cname="gsl_eigen_sort_t", cprefix="GSL_EIGEN_SORT_", cheader_filename="gsl/gsl_eigen.h", has_type_id = false)]
2075	public enum EigenSortType
2076	{
2077		VAL_ASC,
2078		VAL_DESC,
2079		ABS_ASC,
2080		ABS_DESC
2081	}
2082
2083	[Compact]
2084	[CCode (cname="gsl_eigen_symm_workspace", free_function="gsl_eigen_symm_free", cheader_filename="gsl/gsl_eigen.h")]
2085	public class EigenSymmWorkspace
2086	{
2087		public size_t size;
2088		public double* d;
2089		public double* sd;
2090
2091		[CCode (cname="gsl_eigen_symm_alloc")]
2092		public EigenSymmWorkspace (size_t n);
2093		[CCode (cname="gsl_eigen_symm", instance_pos=-1)]
2094		public int init (Matrix A, Vector eval);
2095	}
2096
2097	[Compact]
2098	[CCode (cname="gsl_eigen_symmv_workspace", free_function="gsl_eigen_symmv_free", cheader_filename="gsl/gsl_eigen.h")]
2099	public class EigenSymmvWorkspace
2100	{
2101		public size_t size;
2102		public double* d;
2103		public double* sd;
2104		public double* gc;
2105		public double* gs;
2106
2107		[CCode (cname="gsl_eigen_symmv_alloc")]
2108		public EigenSymmvWorkspace (size_t n);
2109		[CCode (cname="gsl_eigen_symmv", instance_pos=-1)]
2110		public int init (Matrix A, Vector eval, Matrix evec);
2111	}
2112
2113	[Compact]
2114	[CCode (cname="gsl_eigen_herm_workspace", free_function="gsl_eigen_herm_free", cheader_filename="gsl/gsl_eigen.h")]
2115	public class EigenHermWorkspace
2116	{
2117		public size_t size;
2118		public double* d;
2119		public double* sd;
2120		public double* tau;
2121
2122		[CCode (cname="gsl_eigen_herm_alloc")]
2123		public EigenHermWorkspace (size_t n);
2124		[CCode (cname="gsl_eigen_herm", instance_pos=-1)]
2125		public int init (MatrixComplex A, Vector eval);
2126	}
2127
2128	[Compact]
2129	[CCode (cname="gsl_eigen_hermv_workspace", free_function="gsl_eigen_hermv_free", cheader_filename="gsl/gsl_eigen.h")]
2130	public class EigenHermvWorkspace
2131	{
2132		public size_t size;
2133		public double* d;
2134		public double* sd;
2135		public double* tau;
2136		public double* gc;
2137		public double* gs;
2138
2139		[CCode (cname="gsl_eigen_hermv_alloc")]
2140		public EigenHermvWorkspace (size_t n);
2141		[CCode (cname="gsl_eigen_hermv", instance_pos=-1)]
2142		public int init (MatrixComplex A, Vector eval, MatrixComplex evec);
2143	}
2144
2145	[Compact]
2146	[CCode (cname="gsl_eigen_nonsymm_workspace", free_function="gsl_eigen_nonsymm_free", cheader_filename="gsl/gsl_eigen.h")]
2147	public class EigenNonsymmWorkspace
2148	{
2149		public size_t size;
2150		public Vector diag;
2151		public Vector tau;
2152		public Matrix Z;
2153		public int do_balance;
2154		size_t n_evals;
2155
2156		[CCode (cname="gsl_eigen_nonsymm_alloc")]
2157		public EigenNonsymmWorkspace (size_t n);
2158		[CCode (cname="gsl_eigen_nonsymm_params", instance_pos=-1)]
2159		public void params (int compute_t, int balance);
2160		[CCode (cname="gsl_eigen_nonsymm", instance_pos=-1)]
2161		public int init (Matrix A, VectorComplex eval);
2162		[CCode (cname="gsl_eigen_nonsymm_Z", instance_pos=-1)]
2163		public int init_Z (Matrix A, VectorComplex eval, Matrix Z);
2164	}
2165
2166	[Compact]
2167	[CCode (cname="gsl_eigen_nonsymmv_workspace", free_function="gsl_eigen_nonsymmv_free", cheader_filename="gsl/gsl_eigen.h")]
2168	public class EigenNonsymmvWorkspace
2169	{
2170		public size_t size;
2171		public Vector work;
2172		public Vector work2;
2173		public Vector work3;
2174		public Matrix Z;
2175		public EigenNonsymmWorkspace nonsymm_workspace_p;
2176
2177		[CCode (cname="gsl_eigen_nonsymmv_alloc")]
2178		public EigenNonsymmvWorkspace (size_t n);
2179		[CCode (cname="gsl_eigen_nonsymmv", instance_pos=-1)]
2180		public int init (Matrix A, VectorComplex eval, MatrixComplex evec);
2181		[CCode (cname="gsl_eigen_nonsymmv_Z", instance_pos=-1)]
2182		public int init_Z (Matrix A, VectorComplex eval, MatrixComplex evec, Matrix Z);
2183	}
2184
2185	[Compact]
2186	[CCode (cname="gsl_eigen_gensymm_workspace", free_function="gsl_eigen_gensymm_free", cheader_filename="gsl/gsl_eigen.h")]
2187	public class EigenGensymmWorkspace
2188	{
2189		public size_t size;
2190		public EigenSymmWorkspace symm_workspace_p;
2191
2192		[CCode (cname="gsl_eigen_gensymm_alloc")]
2193		public EigenGensymmWorkspace (size_t n);
2194		[CCode (cname="gsl_eigen_gensymm", instance_pos=-1)]
2195		public int init (Matrix A, Matrix B, Vector eval);
2196	}
2197
2198	[Compact]
2199	[CCode (cname="gsl_eigen_gensymmv_workspace", free_function="gsl_eigen_gensymmv_free", cheader_filename="gsl/gsl_eigen.h")]
2200	public class EigenGensymmvWorkspace
2201	{
2202		public size_t size;
2203		public EigenSymmvWorkspace symmv_workspace_p;
2204
2205		[CCode (cname="gsl_eigen_gensymmv_alloc")]
2206		public EigenGensymmvWorkspace (size_t n);
2207		[CCode (cname="gsl_eigen_gensymmv", instance_pos=-1)]
2208		public int init (Matrix A, Matrix B, Vector eval, Matrix evec);
2209	}
2210
2211	[Compact]
2212	[CCode (cname="gsl_eigen_genherm_workspace", free_function="gsl_eigen_genherm_free", cheader_filename="gsl/gsl_eigen.h")]
2213	public class EigenGenhermWorkspace
2214	{
2215		public size_t size;
2216		public EigenHermWorkspace herm_workspace_p;
2217
2218		[CCode (cname="gsl_eigen_genherm_alloc")]
2219		public EigenGenhermWorkspace (size_t n);
2220		[CCode (cname="gsl_eigen_genherm", instance_pos=-1)]
2221		public int init (MatrixComplex A, MatrixComplex B, Vector eval);
2222	}
2223
2224	[Compact]
2225	[CCode (cname="gsl_eigen_genhermv_workspace", free_function="gsl_eigen_genhermv_free", cheader_filename="gsl/gsl_eigen.h")]
2226	public class EigenGenhermvWorkspace
2227	{
2228		public size_t size;
2229		public EigenHermvWorkspace hermv_workspace_p;
2230
2231		[CCode (cname="gsl_eigen_genhermv_alloc")]
2232		public EigenGenhermvWorkspace (size_t n);
2233		[CCode (cname="gsl_eigen_genhermv", instance_pos=-1)]
2234		public int init (MatrixComplex A, MatrixComplex B, Vector eval, MatrixComplex evec);
2235	}
2236
2237	[Compact]
2238	[CCode (cname="gsl_eigen_gen_workspace", free_function="gsl_eigen_gen_free", cheader_filename="gsl/gsl_eigen.h")]
2239	public class EigenGenWorkspace
2240	{
2241		public size_t size;
2242		public Vector work;
2243		public size_t n_evals;
2244		public size_t max_iterations;
2245		public size_t n_iter;
2246		public double eshift;
2247		public int needtop;
2248		public double atol;
2249		public double btol;
2250		public double ascale;
2251		public double bscale;
2252		public Matrix H;
2253		public Matrix R;
2254		public int compute_s;
2255		public int compute_t;
2256		public Matrix Q;
2257		public Matrix Z;
2258
2259		[CCode (cname="gsl_eigen_gen_alloc")]
2260		public EigenGenWorkspace (size_t n);
2261		[CCode (cname="gsl_eigen_gen_params", instance_pos=-1)]
2262		public void params (int compute_s, int compute_t, int balance);
2263		[CCode (cname="gsl_eigen_gen", instance_pos=-1)]
2264		public int init (Matrix A, Matrix B, VectorComplex alpha, Vector beta);
2265		[CCode (cname="gsl_eigen_gen_QZ", instance_pos=-1)]
2266		public int init_QZ (Matrix A, Matrix B, VectorComplex alpha, Vector beta, Matrix Q, Matrix Z);
2267	}
2268
2269	[Compact]
2270	[CCode (cname="gsl_eigen_genv_workspace", free_function="gsl_eigen_genv_free", cheader_filename="gsl/gsl_eigen.h")]
2271	public class EigenGenvWorkspace
2272	{
2273		public size_t size;
2274		public Vector work1;
2275		public Vector work2;
2276		public Vector work3;
2277		public Vector work4;
2278		public Vector work5;
2279		public Vector work6;
2280		public Matrix Q;
2281		public Matrix Z;
2282		public EigenGenWorkspace gen_workspace_p;
2283
2284		[CCode (cname="gsl_eigen_genv_alloc")]
2285		public EigenGenvWorkspace (size_t n);
2286		[CCode (cname="gsl_eigen_genv", instance_pos=-1)]
2287		public int init (Matrix A, Matrix B, VectorComplex alpha, Vector beta, MatrixComplex evec);
2288		[CCode (cname="gsl_eigen_genv_QZ", instance_pos=-1)]
2289		public int init_QZ (Matrix A, Matrix B, VectorComplex alpha, Vector beta, MatrixComplex evec, Matrix Q, Matrix Z);
2290	}
2291
2292	[CCode (lower_case_cprefix="gsl_eigen_", cheader_filename="gsl/gsl_eigen.h")]
2293	namespace EigenSort
2294	{
2295		public static int symmv_sort (Vector eval, Matrix evec, EigenSortType sort_type);
2296		public static int hermv_sort (Vector eval, MatrixComplex evec, EigenSortType sort_type);
2297		public static int nonsymmv_sort (VectorComplex eval, MatrixComplex evec, EigenSortType sort_type);
2298		public static int gensymmv_sort (Vector eval, Matrix evec, EigenSortType sort_type);
2299		public static int genhermv_sort (Vector eval, MatrixComplex evec, EigenSortType sort_type);
2300		public static int genv_sort (VectorComplex alpha, Vector beta, MatrixComplex evec, EigenSortType sort_type);
2301	}
2302
2303
2304	/*
2305	 * Fast Fourier Transforms (FFTs)
2306	 */
2307	[CCode (cname="gsl_fft_direction", cprefix = "gsl_fft_", cheader_filename="gsl/gsl_fft.h", has_type_id = false)]
2308	public enum FFTDirection
2309	{
2310		forward = -1,
2311		backward = 1
2312	}
2313
2314	[Compact]
2315	[CCode (cname="gsl_fft_complex_wavetable", cheader_filename="gsl/gsl_fft_complex.h")]
2316	public class FFTComplexWavetable
2317	{
2318		public size_t n;
2319		public size_t nf;
2320		public size_t factor[64];
2321		public Complex* twiddle[64];
2322		public Complex* trig;
2323
2324		[CCode (cname="gsl_fft_complex_wavetable_alloc")]
2325		public FFTComplexWavetable (size_t n);
2326		[CCode (cname="gsl_fft_complex_memcpy")]
2327		public int memcpy (FFTComplexWavetable src);
2328	}
2329
2330	[Compact]
2331	[CCode (cname="gsl_fft_complex_workspace", cheader_filename="gsl/gsl_fft_complex.h")]
2332	public class FFTComplexWorkspace
2333	{
2334		size_t n;
2335		double *scratch;
2336
2337		[CCode (cname="gsl_fft_complex_workspace_alloc")]
2338		public FFTComplexWorkspace (size_t n);
2339	}
2340
2341	[CCode (lower_case_cprefix="gsl_fft_complex_", cheader_filename="gsl/gsl_fft_complex.h")]
2342	namespace FFTComplex
2343	{
2344		public static int radix2_forward ([CCode (array_length = false)] double[] data, size_t stride, size_t n);
2345		public static int radix2_transform ([CCode (array_length = false)] double[] data, size_t stride, size_t n, FFTDirection sign);
2346		public static int radix2_backward ([CCode (array_length = false)] double[] data, size_t stride, size_t n);
2347		public static int radix2_inverse ([CCode (array_length = false)] double[] data, size_t stride, size_t n);
2348		public static int radix2_dif_forward ([CCode (array_length = false)] double[] data, size_t stride, size_t n);
2349		public static int radix2_dif_transform ([CCode (array_length = false)] double[] data, size_t stride, size_t n, FFTDirection sign);
2350		public static int radix2_dif_backward ([CCode (array_length = false)] double[] data, size_t stride, size_t n);
2351		public static int radix2_dif_inverse ([CCode (array_length = false)] double[] data, size_t stride, size_t n);
2352
2353		public static int forward ([CCode (array_length = false)] double[] data, size_t stride, size_t n, FFTComplexWavetable wavetable, FFTComplexWorkspace work);
2354		public static int transform ([CCode (array_length = false)] double[] data, size_t stride, size_t n, FFTComplexWavetable wavetable, FFTComplexWorkspace work, FFTDirection sign);
2355		public static int backward ([CCode (array_length = false)] double[] data, size_t stride, size_t n, FFTComplexWavetable wavetable, FFTComplexWorkspace work);
2356		public static int inverse ([CCode (array_length = false)] double[] data, size_t stride, size_t n, FFTComplexWavetable wavetable, FFTComplexWorkspace work);
2357	}
2358
2359	[Compact]
2360	[CCode (cname="gsl_fft_real_wavetable", cheader_filename="gsl/gsl_fft_real.h")]
2361	public class FFTRealWavetable
2362	{
2363		public size_t n;
2364		public size_t nf;
2365		public size_t factor[64];
2366		public Complex* twiddle[64];
2367		public Complex* trig;
2368
2369		[CCode (cname="gsl_fft_real_wavetable_alloc")]
2370		public FFTRealWavetable (size_t n);
2371	}
2372
2373	[Compact]
2374	[CCode (cname="gsl_fft_real_workspace", cheader_filename="gsl/gsl_fft_real.h")]
2375	public class FFTRealWorkspace
2376	{
2377		size_t n;
2378		double *scratch;
2379
2380		[CCode (cname="gsl_fft_real_workspace_alloc")]
2381		public FFTRealWorkspace (size_t n);
2382	}
2383
2384	[CCode (lower_case_cprefix="gsl_fft_real_", cheader_filename="gsl/gsl_fft_real.h")]
2385	namespace FFTReal
2386	{
2387		public static int radix2_transform ([CCode (array_length = false)] double[] data, size_t stride, size_t n);
2388		public static int transform ([CCode (array_length = false)] double[] data, size_t stride, size_t n, FFTRealWavetable wavetable, FFTRealWorkspace work);
2389		public static int unpack ([CCode (array_length = false)] double[] real_coefficient, [CCode (array_length = false)] double[] complex_coeficient, size_t stride, size_t n);
2390	}
2391
2392	[Compact]
2393	[CCode (cname="gsl_fft_halfcomplex_wavetable", cheader_filename="gsl/gsl_fft_halfcomplex.h")]
2394	public class FFTHalfcomplexWavetable
2395	{
2396		public size_t n;
2397		public size_t nf;
2398		public size_t factor[64];
2399		public Complex* twiddle[64];
2400		public Complex* trig;
2401
2402		[CCode (cname="gsl_fft_halfcomplex_wavetable_alloc")]
2403		public FFTHalfcomplexWavetable (size_t n);
2404	}
2405
2406	[CCode (lower_case_cprefix="gsl_fft_halfcomplex_", cheader_filename="gsl/gsl_fft_halfcomplex.h")]
2407	namespace FFTHalfcomplex
2408	{
2409		public static int radix2_inverse ([CCode (array_length = false)] double[] data, size_t stride, size_t n);
2410		public static int radix2_backward ([CCode (array_length = false)] double[] data, size_t stride, size_t n);
2411		public static int radix2_transform ([CCode (array_length = false)] double[] data, size_t stride, size_t n);
2412		public static int backward ([CCode (array_length = false)] double[] data, size_t stride, size_t n, FFTHalfcomplexWavetable wavetable, FFTRealWorkspace work);
2413		public static int inverse ([CCode (array_length = false)] double[] data, size_t stride, size_t n, FFTHalfcomplexWavetable wavetable, FFTRealWorkspace work);
2414		public static int transform ([CCode (array_length = false)] double[] data, size_t stride, size_t n, FFTHalfcomplexWavetable wavetable, FFTRealWorkspace work);
2415		public static int unpack ([CCode (array_length = false)] double[] halfcomplex_coefficient, [CCode (array_length = false)] double[] complex_coefficient, size_t stride, size_t n);
2416		public static int radix2_unpack ([CCode (array_length = false)] double[] halfcomplex_coefficient, [CCode (array_length = false)] double[] complex_coefficient, size_t stride, size_t n);
2417	}
2418
2419
2420	/*
2421	 * Numerical Integration
2422	 */
2423	[CCode (cname = "enum gsl_integration_qawo_enum", cprefix="GSL_INTEG_", cheader_filename="gsl/gsl_integration.h", has_type_id = false)]
2424	public enum QAWO
2425	{
2426		COSINE,
2427		SINE
2428	}
2429
2430	[CCode (cprefix="GSL_INTEG_", cheader_filename="gsl/gsl_integration.h", has_type_id = false)]
2431	public enum GaussRules
2432	{
2433		GAUSS15,
2434		GAUSS21,
2435		GAUSS31,
2436		GAUSS41,
2437		GAUSS51,
2438		GAUSS61
2439	}
2440
2441	[Compact]
2442	[CCode (cname="gsl_integration_workspace", cheader_filename="gsl/gsl_integration.h")]
2443	public class IntegrationWorkspace
2444	{
2445		public size_t limit;
2446		public size_t size;
2447		public size_t nrmax;
2448		public size_t i;
2449		public size_t maximum_level;
2450		public double* alist;
2451		public double* blist;
2452		public double* rlist;
2453		public double* elist;
2454		public size_t* order;
2455		public size_t* level;
2456
2457		[CCode (cname="gsl_integration_workspace_alloc")]
2458		public IntegrationWorkspace (size_t n);
2459	}
2460
2461	[Compact]
2462	[CCode (cname="gsl_integration_qaws_table", cheader_filename="gsl/gsl_integration.h")]
2463	public class IntegrationQAWSTable
2464	{
2465		public double alpha;
2466		public double beta;
2467		public int mu;
2468		public int nu;
2469		public double ri[25];
2470		public double rj[25];
2471		public double rg[25];
2472		public double rh[25];
2473
2474		[CCode (cname="gsl_integration_qaws_table_alloc")]
2475		public IntegrationQAWSTable (double alpha, double beta, int mu, int nu);
2476		public int @set (double alpha, double beta, int mu, int nu);
2477	}
2478
2479	[Compact]
2480	[CCode (cname="gsl_integration_qawo_table", free_function="gsl_integration_qawo_table_free", cheader_filename="gsl/gsl_integration.h")]
2481	public class IntegrationQAWOTable
2482	{
2483		public size_t n;
2484		public double omega;
2485		public double L;
2486		public double par;
2487		public QAWO sine;
2488		public double* chebmo;
2489
2490		[CCode (cname="gsl_integration_qawo_table_alloc")]
2491		public IntegrationQAWOTable (double omega, double L, QAWO sine, size_t n);
2492		public int @set (double omega, double L, QAWO sine);
2493		public int set_length (double L);
2494	}
2495
2496	[CCode (cname="gsl_integration", cheader_filename="gsl/gsl_integration.h")]
2497	namespace Integration
2498	{
2499		public static void qk15 (Function* f, double a, double b, out double result, out double abserr, out double resabs, out double resasc);
2500		public static void qk21 (Function* f, double a, double b, out double result, out double abserr, out double resabs, out double resasc);
2501		public static void qk31 (Function* f, double a, double b, out double result, out double abserr, out double resabs, out double resasc);
2502		public static void qk41 (Function* f, double a, double b, out double result, out double abserr, out double resabs, out double resasc);
2503		public static void qk51 (Function* f, double a, double b, out double result, out double abserr, out double resabs, out double resasc);
2504		public static void qk61 (Function* f, double a, double b, out double result, out double abserr, out double resabs, out double resasc);
2505		public static void qcheb (Function* f, double a, double b, out double cheb12, out double cheb24);
2506
2507		public static void qk (int n, [CCode (array_length = false)] double[] xgk, [CCode (array_length = false)] double[] wg, [CCode (array_length = false)] double[] wgk, [CCode (array_length = false)] double[] fv1, [CCode (array_length = false)] double[] fv2, Function* f, double a, double b, out double result, out double abserr, out double resabs, out double resasc);
2508		public static int qng (Function* f, double a, double b, double epsabs, double epsrel, out double result, out double abserr, out size_t neval);
2509		public static int qag (Function* f, double a, double b, double epsabs, double epsrel, size_t limit, int key, IntegrationWorkspace workspace, out double result, out double abserr);
2510		public static int qagi (Function* f, double epsabs, double epsrel, size_t limit, IntegrationWorkspace workspace, out double result, out double abserr);
2511		public static int qagiu (Function* f, double a, double epsabs, double epsrel, size_t limit, IntegrationWorkspace workspace, out double result, out double abserr);
2512		public static int qagil (Function* f, double b, double epsabs, double epsrel, size_t limit, IntegrationWorkspace workspace, out double result, out double abserr);
2513		public static int qags (Function* f, double a, double b, double epsabs, double epsrel, size_t limit, IntegrationWorkspace workspace, out double result, out double abserr);
2514		public static int qagp (Function* f, [CCode (array_length = false)] double[] pts, size_t npts, double epsabs, double epsrel, size_t limit, IntegrationWorkspace workspace, out double result, out double abserr);
2515		public static int qawc (Function* f, double a, double b, double c, double epsabs, double epsrel, size_t limit, IntegrationWorkspace workspace, out double result, out double abserr);
2516		public static int qaws (Function* f, double a, double b, IntegrationQAWSTable t, double epsabs, double epsrel, size_t limit, IntegrationWorkspace workspace, out double result, out double abserr);
2517		public static int qawo (Function* f, double a, double epsabs, double epsrel, size_t limit, IntegrationWorkspace workspace, IntegrationQAWOTable wf, out double result, out double abserr);
2518		public static int qawf (Function* f, double a, double epsabs, size_t limit, IntegrationWorkspace workspace, IntegrationWorkspace cycle_workspace, IntegrationQAWOTable wf, out double result, out double abserr);
2519	}
2520
2521
2522	/*
2523	 * Random Number Generation
2524	 */
2525	[CCode (has_target = false, has_typedef = false)]
2526	public delegate void RNGSetState (void *state, ulong seed);
2527	[CCode (has_target = false, has_typedef = false)]
2528	public delegate ulong RNGGetState (void* state);
2529	[CCode (has_target = false, has_typedef = false)]
2530	public delegate double RNGGetDouble (void* state);
2531
2532	[SimpleType]
2533	[CCode (cname="gsl_rng_type", cheader_filename="gsl/gsl_rng.h", has_type_id = false)]
2534	public struct RNGType
2535	{
2536		public unowned string name;
2537		public ulong max;
2538		public ulong min;
2539		public size_t size;
2540		public RNGSetState @set;
2541		public RNGGetState @get;
2542		public RNGGetDouble get_double;
2543	}
2544
2545	[CCode (lower_case_cprefix="gsl_rng_", cheader_filename="gsl/gsl_rng.h")]
2546	namespace RNGTypes
2547	{
2548		public static RNGType* borosh13;
2549		public static RNGType* coveyou;
2550		public static RNGType* cmrg;
2551		public static RNGType* fishman18;
2552		public static RNGType* fishman20;
2553		public static RNGType* fishman2x;
2554		public static RNGType* gfsr4;
2555		public static RNGType* knuthran;
2556		public static RNGType* knuthran2;
2557		public static RNGType* knuthran2002;
2558		public static RNGType* lecuyer21;
2559		public static RNGType* minstd;
2560		public static RNGType* mrg;
2561		public static RNGType* mt19937;
2562		public static RNGType* mt19937_1999;
2563		public static RNGType* mt19937_1998;
2564		public static RNGType* r250;
2565		public static RNGType* ran0;
2566		public static RNGType* ran1;
2567		public static RNGType* ran2;
2568		public static RNGType* ran3;
2569		public static RNGType* rand;
2570		public static RNGType* rand48;
2571		public static RNGType* random128_bsd;
2572		public static RNGType* random128_glibc2;
2573		public static RNGType* random128_libc5;
2574		public static RNGType* random256_bsd;
2575		public static RNGType* random256_glibc2;
2576		public static RNGType* random256_libc5;
2577		public static RNGType* random32_bsd;
2578		public static RNGType* random32_glibc2;
2579		public static RNGType* random32_libc5;
2580		public static RNGType* random64_bsd;
2581		public static RNGType* random64_glibc2;
2582		public static RNGType* random64_libc5;
2583		public static RNGType* random8_bsd;
2584		public static RNGType* random8_glibc2;
2585		public static RNGType* random8_libc5;
2586		public static RNGType* random_bsd;
2587		public static RNGType* random_glibc2;
2588		public static RNGType* random_libc5;
2589		public static RNGType* randu;
2590		public static RNGType* ranf;
2591		public static RNGType* ranlux;
2592		public static RNGType* ranlux389;
2593		public static RNGType* ranlxd1;
2594		public static RNGType* ranlxd2;
2595		public static RNGType* ranlxs0;
2596		public static RNGType* ranlxs1;
2597		public static RNGType* ranlxs2;
2598		public static RNGType* ranmar;
2599		public static RNGType* slatec;
2600		public static RNGType* taus;
2601		public static RNGType* taus2;
2602		public static RNGType* taus113;
2603		public static RNGType* transputer;
2604		public static RNGType* tt800;
2605		public static RNGType* uni;
2606		public static RNGType* uni32;
2607		public static RNGType* vax;
2608		public static RNGType* waterman14;
2609		public static RNGType* zuf;
2610		public static RNGType* @default;
2611		public static ulong default_seed;
2612	}
2613
2614	[Compact]
2615	[CCode (cname="gsl_rng", cheader_filename="gsl/gsl_rng.h")]
2616	public class RNG
2617	{
2618		public RNGType* type;
2619		public void* state;
2620
2621		[CCode (cname="gsl_rng_alloc")]
2622		public RNG (RNGType* T);
2623		public void @set (ulong s);
2624		public ulong @get ();
2625		public double uniform ();
2626		public double uniform_pos ();
2627		public ulong uniform_int (ulong n);
2628		public string name ();
2629		public ulong max ();
2630		public ulong min ();
2631		public size_t size ();
2632		public static RNGType* env_setup ();
2633		public int memcpy (RNG src);
2634		public RNG clone ();
2635
2636		[CCode (instance_pos=-1)]
2637		public int fwrite (GLib.FileStream stream);
2638		[CCode (instance_pos=-1)]
2639		public int fread (GLib.FileStream stream);
2640
2641		public void print_state ();
2642	}
2643
2644	[CCode (lower_case_cprefix="gsl_cdf_", cheader_filename="gsl/gsl_cdf.h")]
2645	namespace CDF
2646	{
2647		public static double ugaussian_P (double x);
2648		public static double ugaussian_Q (double x);
2649
2650		public static double ugaussian_Pinv (double P);
2651		public static double ugaussian_Qinv (double Q);
2652
2653		public static double gaussian_P (double x, double sigma);
2654		public static double gaussian_Q (double x, double sigma);
2655
2656		public static double gaussian_Pinv (double P, double sigma);
2657		public static double gaussian_Qinv (double Q, double sigma);
2658
2659		public static double gamma_P (double x, double a, double b);
2660		public static double gamma_Q (double x, double a, double b);
2661
2662		public static double gamma_Pinv (double P, double a, double b);
2663		public static double gamma_Qinv (double Q, double a, double b);
2664
2665		public static double cauchy_P (double x, double a);
2666		public static double cauchy_Q (double x, double a);
2667
2668		public static double cauchy_Pinv (double P, double a);
2669		public static double cauchy_Qinv (double Q, double a);
2670
2671		public static double laplace_P (double x, double a);
2672		public static double laplace_Q (double x, double a);
2673
2674		public static double laplace_Pinv (double P, double a);
2675		public static double laplace_Qinv (double Q, double a);
2676
2677		public static double rayleigh_P (double x, double sigma);
2678		public static double rayleigh_Q (double x, double sigma);
2679
2680		public static double rayleigh_Pinv (double P, double sigma);
2681		public static double rayleigh_Qinv (double Q, double sigma);
2682
2683		public static double chisq_P (double x, double nu);
2684		public static double chisq_Q (double x, double nu);
2685
2686		public static double chisq_Pinv (double P, double nu);
2687		public static double chisq_Qinv (double Q, double nu);
2688
2689		public static double exponential_P (double x, double mu);
2690		public static double exponential_Q (double x, double mu);
2691
2692		public static double exponential_Pinv (double P, double mu);
2693		public static double exponential_Qinv (double Q, double mu);
2694
2695		public static double exppow_P (double x, double a, double b);
2696		public static double exppow_Q (double x, double a, double b);
2697
2698		public static double tdist_P (double x, double nu);
2699		public static double tdist_Q (double x, double nu);
2700
2701		public static double tdist_Pinv (double P, double nu);
2702		public static double tdist_Qinv (double Q, double nu);
2703
2704		public static double fdist_P (double x, double nu1, double nu2);
2705		public static double fdist_Q (double x, double nu1, double nu2);
2706
2707		public static double fdist_Pinv (double P, double nu1, double nu2);
2708		public static double fdist_Qinv (double Q, double nu1, double nu2);
2709
2710		public static double beta_P (double x, double a, double b);
2711		public static double beta_Q (double x, double a, double b);
2712
2713		public static double beta_Pinv (double P, double a, double b);
2714		public static double beta_Qinv (double Q, double a, double b);
2715
2716		public static double flat_P (double x, double a, double b);
2717		public static double flat_Q (double x, double a, double b);
2718
2719		public static double flat_Pinv (double P, double a, double b);
2720		public static double flat_Qinv (double Q, double a, double b);
2721
2722		public static double lognormal_P (double x, double zeta, double sigma);
2723		public static double lognormal_Q (double x, double zeta, double sigma);
2724
2725		public static double lognormal_Pinv (double P, double zeta, double sigma);
2726		public static double lognormal_Qinv (double Q, double zeta, double sigma);
2727
2728		public static double gumbel1_P (double x, double a, double b);
2729		public static double gumbel1_Q (double x, double a, double b);
2730
2731		public static double gumbel1_Pinv (double P, double a, double b);
2732		public static double gumbel1_Qinv (double Q, double a, double b);
2733
2734		public static double gumbel2_P (double x, double a, double b);
2735		public static double gumbel2_Q (double x, double a, double b);
2736
2737		public static double gumbel2_Pinv (double P, double a, double b);
2738		public static double gumbel2_Qinv (double Q, double a, double b);
2739
2740		public static double weibull_P (double x, double a, double b);
2741		public static double weibull_Q (double x, double a, double b);
2742
2743		public static double weibull_Pinv (double P, double a, double b);
2744		public static double weibull_Qinv (double Q, double a, double b);
2745
2746		public static double pareto_P (double x, double a, double b);
2747		public static double pareto_Q (double x, double a, double b);
2748
2749		public static double pareto_Pinv (double P, double a, double b);
2750		public static double pareto_Qinv (double Q, double a, double b);
2751
2752		public static double logistic_P (double x, double a);
2753		public static double logistic_Q (double x, double a);
2754
2755		public static double logistic_Pinv (double P, double a);
2756		public static double logistic_Qinv (double Q, double a);
2757
2758		public static double binomial_P (uint k, double p, uint n);
2759		public static double binomial_Q (uint k, double p, uint n);
2760
2761		public static double poisson_P (uint k, double mu);
2762		public static double poisson_Q (uint k, double mu);
2763
2764		public static double geometric_P (uint k, double p);
2765		public static double geometric_Q (uint k, double p);
2766
2767		public static double negative_binomial_P (uint k, double p, double n);
2768		public static double negative_binomial_Q (uint k, double p, double n);
2769
2770		public static double pascal_P (uint k, double p, uint n);
2771		public static double pascal_Q (uint k, double p, uint n);
2772
2773		public static double hypergeometric_P (uint k, uint n1, uint n2, uint t);
2774		public static double hypergeometric_Q (uint k, uint n1, uint n2, uint t);
2775	}
2776
2777
2778	/*
2779	 * Quasi-Random Sequences
2780	 */
2781	[CCode (has_target = false, has_typedef = false)]
2782	public delegate size_t QRNGStateSize (uint dimension);
2783	[CCode (has_target = false, has_typedef = false)]
2784	public delegate int QRNGInitState (void* state, uint dimension);
2785	[CCode (has_target = false, has_typedef = false)]
2786	public delegate int QRNGGetState2 (void* state, uint dimension, out double x);
2787
2788	[SimpleType]
2789	[CCode (cname="gsl_qrng_type", cheader_filename="gsl/gsl_qrng.h", has_type_id = false)]
2790	public struct QRNGType
2791	{
2792  		public unowned string name;
2793  		public uint max_dimension;
2794  		public QRNGStateSize state_size;
2795  		public QRNGInitState init_state;
2796  		public QRNGGetState2 @get;
2797  	}
2798
2799	[CCode (lower_case_cprefix="gsl_qrng_", cheader_filename="gsl/gsl_qrng.h")]
2800	namespace QRNGAlgorithms
2801	{
2802		public static QRNGType* niederreiter_2;
2803		public static QRNGType* sobol;
2804		public static QRNGType* halton;
2805		public static QRNGType* reversehalton;
2806	}
2807
2808  	[Compact]
2809	[CCode (cname="gsl_qrng", cheader_filename="gsl/gsl_qrng.h")]
2810  	public class QRNG
2811  	{
2812  		public QRNGType* type;
2813  		public uint dimension;
2814  		size_t state_size;
2815  		void* state;
2816
2817  		[CCode (cname="gsl_qrng_alloc")]
2818		public QRNG (QRNGType* T, uint d);
2819  		public void init ();
2820  		public int memcpy (QRNG src);
2821  		public QRNG clone ();
2822  		public string name ();
2823  		public size_t size ();
2824  		public int @get ([CCode (array_length = false)] double[] x);
2825  	}
2826
2827
2828  	/*
2829  	 * Random Number Distributions
2830  	 */
2831  	[CCode (lower_case_cprefix="gsl_ran_", cheader_filename="gsl/gsl_randist.h")]
2832	namespace Randist
2833	{
2834		public static uint bernoulli (RNG r, double p);
2835		public static double bernoulli_pdf (uint k, double p);
2836
2837		public static double beta (RNG r, double a, double b);
2838		public static double beta_pdf (double x, double a, double b);
2839
2840		public static uint binomial (RNG r, double p, uint n);
2841		public static uint binomial_knuth (RNG r, double p, uint n);
2842		public static uint binomial_tpe (RNG r, double p, uint n);
2843		public static double binomial_pdf (uint k, double p, uint n);
2844
2845		public static double exponential (RNG r, double mu);
2846		public static double exponential_pdf (double x, double mu);
2847
2848		public static double exppow (RNG r, double a, double b);
2849		public static double exppow_pdf (double x, double a, double b);
2850
2851		public static double cauchy (RNG r, double a);
2852		public static double cauchy_pdf (double x, double a);
2853
2854		public static double chisq (RNG r, double nu);
2855		public static double chisq_pdf (double x, double nu);
2856
2857		public static void dirichlet (RNG r, size_t K, out double alpha, out double theta);
2858		public static double dirichlet_pdf (size_t K, out double alpha, out double theta);
2859		public static double dirichlet_lnpdf (size_t K, out double alpha, out double theta);
2860
2861		public static double erlang (RNG r, double a, double n);
2862		public static double erlang_pdf (double x, double a, double n);
2863
2864		public static double fdist (RNG r, double nu1, double nu2);
2865		public static double fdist_pdf (double x, double nu1, double nu2);
2866
2867		public static double flat (RNG r, double a, double b);
2868		public static double flat_pdf (double x, double a, double b);
2869
2870		public static double gamma (RNG r, double a, double b);
2871		public static double gamma_int (RNG r, uint a);
2872		public static double gamma_pdf (double x, double a, double b);
2873		public static double gamma_mt (RNG r, double a, double b);
2874		public static double gamma_knuth (RNG r, double a, double b);
2875
2876		public static double gaussian (RNG r, double sigma);
2877		public static double gaussian_ratio_method (RNG r, double sigma);
2878		public static double gaussian_ziggurat (RNG r, double sigma);
2879		public static double gaussian_pdf (double x, double sigma);
2880
2881		public static double ugaussian (RNG r);
2882		public static double ugaussian_ratio_method (RNG r);
2883		public static double ugaussian_pdf (double x);
2884
2885		public static double gaussian_tail (RNG r, double a, double sigma);
2886		public static double gaussian_tail_pdf (double x, double a, double sigma);
2887
2888		public static double ugaussian_tail (RNG r, double a);
2889		public static double ugaussian_tail_pdf (double x, double a);
2890
2891		public static void bivariate_gaussian (RNG r, double sigma_x, double sigma_y, double rho, out double x, out double y);
2892		public static double bivariate_gaussian_pdf (double x, double y, double sigma_x, double sigma_y, double rho);
2893
2894		public static double landau (RNG r);
2895		public static double landau_pdf (double x);
2896
2897		public static uint geometric (RNG r, double p);
2898		public static double geometric_pdf (uint k, double p);
2899
2900		public static uint hypergeometric (RNG r, uint n1, uint n2, uint t);
2901		public static double hypergeometric_pdf (uint k, uint n1, uint n2, uint t);
2902
2903		public static double gumbel1 (RNG r, double a, double b);
2904		public static double gumbel1_pdf (double x, double a, double b);
2905
2906		public static double gumbel2 (RNG r, double a, double b);
2907		public static double gumbel2_pdf (double x, double a, double b);
2908
2909		public static double logistic (RNG r, double a);
2910		public static double logistic_pdf (double x, double a);
2911
2912		public static double lognormal (RNG r, double zeta, double sigma);
2913		public static double lognormal_pdf (double x, double zeta, double sigma);
2914
2915		public static uint logarithmic (RNG r, double p);
2916		public static double logarithmic_pdf (uint k, double p);
2917
2918		public static void multinomial (RNG r, size_t K, uint N, [CCode (array_length = false)] double[] p, [CCode (array_length = false)] uint[] n);
2919		public static double multinomial_pdf (size_t K, [CCode (array_length = false)] double[] p, [CCode (array_length = false)] uint[] n);
2920		public static double multinomial_lnpdf (size_t K, [CCode (array_length = false)] double[] p, [CCode (array_length = false)] uint[] n);
2921
2922		public static uint negative_binomial (RNG r, double p, double n);
2923		public static double negative_binomial_pdf (uint k, double p, double n);
2924
2925		public static uint pascal (RNG r, double p, uint n);
2926		public static double pascal_pdf (uint k, double p, uint n);
2927
2928		public static double pareto (RNG r, double a, double b);
2929		public static double pareto_pdf (double x, double a, double b);
2930
2931		public static uint poisson (RNG r, double mu);
2932		public static void poisson_array (RNG r, size_t n, [CCode (array_length = false)] uint[] array, double mu);
2933		public static double poisson_pdf (uint k, double mu);
2934
2935		public static double rayleigh (RNG r, double sigma);
2936		public static double rayleigh_pdf (double x, double sigma);
2937
2938		public static double rayleigh_tail (RNG r, double a, double sigma);
2939		public static double rayleigh_tail_pdf (double x, double a, double sigma);
2940
2941		public static double tdist (RNG r, double nu);
2942		public static double tdist_pdf (double x, double nu);
2943
2944		public static double laplace (RNG r, double a);
2945		public static double laplace_pdf (double x, double a);
2946
2947		public static double levy (RNG r, double c, double alpha);
2948		public static double levy_skew (RNG r, double c, double alpha, double beta);
2949
2950		public static double weibull (RNG r, double a, double b);
2951		public static double weibull_pdf (double x, double a, double b);
2952
2953		public static void dir_2d (RNG r, out double x, out double y);
2954		public static void dir_2d_trig_method (RNG r, out double x, out double y);
2955		public static void dir_3d (RNG r, out double x, out double y, out double z);
2956		public static void dir_nd (RNG r, size_t n, out double x);
2957
2958		public static void shuffle (RNG r, void* b, size_t nmembm, size_t size);
2959		public static int choose (RNG r, void* dest, size_t k, void* src, size_t n, size_t size);
2960		public static void sample (RNG r, void* dest, size_t k, void* src, size_t n, size_t size);
2961	}
2962
2963	[Compact]
2964	[CCode (cname="gsl_ran_discrete_t", cprefix="gsl_ran_discrete_", cheader_filename="gsl/gsl_randist.h")]
2965	public class RanDiscrete
2966	{
2967		public size_t K;
2968		public size_t* A;
2969		public double* F;
2970
2971		[CCode (cname="gsl_ran_discrete_preproc")]
2972		public RanDiscrete (size_t K, double* P);
2973		[CCode (cname="gsl_ran_discrete", instance_pos = -1)]
2974		public size_t discrete (RNG g);
2975		[CCode (instance_pos=-1)]
2976		public double pdf (size_t k);
2977	}
2978
2979
2980	/*
2981	 * Statistics
2982	 */
2983	[CCode (lower_case_cprefix="gsl_stats_", cheader_filename="gsl/gsl_statistics.h")]
2984	namespace Stats
2985	{
2986		public static double mean ([CCode (array_length = false)] double[] data, size_t stride, size_t n);
2987		public static double variance ([CCode (array_length = false)] double[] data, size_t stride, size_t n);
2988		public static double variance_m ([CCode (array_length = false)] double[] data, size_t stride, size_t n, double mean);
2989		public static double sd ([CCode (array_length = false)] double[] data, size_t stride, size_t n);
2990		public static double sd_m ([CCode (array_length = false)] double[] data, size_t stride, size_t n, double mean);
2991		public static double tss ([CCode (array_length = false)] double[] data, size_t stride, size_t n);
2992		public static double tss_m ([CCode (array_length = false)] double[] data, size_t stride, size_t n, double mean);
2993		public static double variance_with_fixed_mean ([CCode (array_length = false)] double[] data, size_t stride, size_t n, double mean);
2994		public static double sd_with_fixed_mean ([CCode (array_length = false)] double[] data, size_t stride, size_t n, double mean);
2995		public static double absdev ([CCode (array_length = false)] double[] data, size_t stride, size_t n);
2996		public static double absdev_m ([CCode (array_length = false)] double[] data, size_t stride, size_t n, double mean);
2997		public static double skew ([CCode (array_length = false)] double[] data, size_t stride, size_t n);
2998		public static double skew_m_sd ([CCode (array_length = false)] double[] data, size_t stride, size_t n, double mean, double sd);
2999		public static double kurtosis ([CCode (array_length = false)] double[] data, size_t stride, size_t n);
3000		public static double kurtosis_m_sd ([CCode (array_length = false)] double[] data, size_t stride, size_t n, double mean, double sd);
3001		public static double lag1_autocorrelation ([CCode (array_length = false)] double[] data, size_t stride, size_t n);
3002		public static double lag1_autocorrelation_m ([CCode (array_length = false)] double[] data, size_t stride, size_t n, double mean);
3003		public static double covariance ([CCode (array_length = false)] double[] data1, size_t stride1, [CCode (array_length = false)] double[] data2, size_t stride2, size_t n);
3004		public static double covariance_m ([CCode (array_length = false)] double[] data1, size_t stride1, [CCode (array_length = false)] double[] data2, size_t stride2, size_t n, double mean1, double mean2);
3005		public static double correlation ([CCode (array_length = false)] double[] data1, size_t stride1, [CCode (array_length = false)] double[] data2, size_t stride2, size_t n);
3006
3007		public static double wmean ([CCode (array_length = false)] double[] w, size_t wstride, [CCode (array_length = false)] double[] data, size_t stride, size_t n);
3008		public static double wvariance ([CCode (array_length = false)] double[] w, size_t wstride, [CCode (array_length = false)] double[] data, size_t stride, size_t n);
3009		public static double wvariance_m ([CCode (array_length = false)] double[] w, size_t wstride, [CCode (array_length = false)] double[] data, size_t stride, size_t n, double wmean);
3010		public static double wsd ([CCode (array_length = false)] double[] w, size_t wstride, [CCode (array_length = false)] double[] data, size_t stride, size_t n);
3011		public static double wsd_m ([CCode (array_length = false)] double[] w, size_t wstride, [CCode (array_length = false)] double[] data, size_t stride, size_t n, double wmean);
3012		public static double wtss ([CCode (array_length = false)] double[] w, size_t wstride, [CCode (array_length = false)] double[] data, size_t stride, size_t n);
3013		public static double wtss_m ([CCode (array_length = false)] double[] w, size_t wstride, [CCode (array_length = false)] double[] data, size_t stride, size_t n, double mean);
3014		public static double wvariance_with_fixed_mean ([CCode (array_length = false)] double[] w, size_t wstride, [CCode (array_length = false)] double[] data, size_t stride, size_t n, double wmean);
3015		public static double wsd_with_fixed_mean ([CCode (array_length = false)] double[] w, size_t wstride, [CCode (array_length = false)] double[] data, size_t stride, size_t n, double wmean);
3016		public static double wabsdev ([CCode (array_length = false)] double[] w, size_t wstride, [CCode (array_length = false)] double[] data, size_t stride, size_t n);
3017		public static double wabsdev_m ([CCode (array_length = false)] double[] w, size_t wstride, [CCode (array_length = false)] double[] data, size_t stride, size_t n, double wmean);
3018		public static double wskew ([CCode (array_length = false)] double[] w, size_t wstride, [CCode (array_length = false)] double[] data, size_t stride, size_t n);
3019		public static double wskew_m_sd ([CCode (array_length = false)] double[] w, size_t wstride, [CCode (array_length = false)] double[] data, size_t stride, size_t n, double wmean, double wsd);
3020		public static double wkurtosis ([CCode (array_length = false)] double[] w, size_t wstride, [CCode (array_length = false)] double[] data, size_t stride, size_t n);
3021		public static double wkurtosis_m_sd ([CCode (array_length = false)] double[] w, size_t wstride, [CCode (array_length = false)] double[] data, size_t stride, size_t n, double wmean, double wsd);
3022
3023		public static double max ([CCode (array_length = false)] double[] data, size_t stride, size_t n);
3024		public static double min ([CCode (array_length = false)] double[] data, size_t stride, size_t n);
3025		public static void minmax (out double min, out double max, [CCode (array_length = false)] double[] data, size_t stride, size_t n);
3026		public static size_t max_index ([CCode (array_length = false)] double[] data, size_t stride, size_t n);
3027		public static size_t min_index ([CCode (array_length = false)] double[] data, size_t stride, size_t n);
3028		public static void minmax_index (out size_t min, out size_t max, [CCode (array_length = false)] double[] data, size_t stride, size_t n);
3029
3030		public static double median_from_sorted_data ([CCode (array_length = false)] double[] sorted_data, size_t stride, size_t n);
3031		public static double quantile_from_sorted_data ([CCode (array_length = false)] double[] sorted_data, size_t stride, size_t n, double f);
3032	}
3033
3034
3035	/*
3036	 * Histograms
3037	 */
3038	[Compact]
3039	[CCode (cname="gsl_histogram", cheader_filename="gsl/gsl_histogram.h")]
3040	public class Histogram
3041	{
3042		public size_t n;
3043		public double* range;
3044		public double* bin;
3045
3046		[CCode (cname="gsl_histogram_alloc")]
3047		public Histogram (size_t n);
3048		[CCode (cname="gsl_histogram_calloc")]
3049		public Histogram.with_zeros (size_t n);
3050		[CCode (cname="gsl_histogram_calloc_uniform")]
3051		public Histogram.uniform (size_t n, double xmin, double xmax);
3052		[CCode (cname="gsl_histogram_calloc_range")]
3053		public Histogram.with_range (size_t n, [CCode (array_length = false)] double[] range);
3054
3055		public int increment (double x);
3056		public int accumulate (double x, double weight);
3057		public int find (double x, out size_t i);
3058		public double @get (size_t i);
3059		public int get_range (size_t i, out double lower, out double upper);
3060		public double max ();
3061		public double min ();
3062		public size_t bins ();
3063
3064		public void reset ();
3065
3066		public int set_ranges (double[] range);
3067		public int set_ranges_uniform (double xmin, double xmax);
3068
3069		public int memcpy (Histogram source);
3070		public Histogram clone();
3071
3072		public double max_val ();
3073		public size_t max_bin ();
3074		public double min_val ();
3075		public size_t min_bin ();
3076
3077		public int equal_bins_p (Histogram h2);
3078		public int add (Histogram h2);
3079		public int sub (Histogram h2);
3080		public int mul (Histogram h2);
3081		public int div (Histogram h2);
3082		public int scale (double scale);
3083		public int shift (double shift);
3084
3085		public double sigma ();
3086		public double mean ();
3087		public double sum ();
3088
3089		[CCode (instance_pos=-1)]
3090		public int fwrite (GLib.FileStream stream);
3091		[CCode (instance_pos=-1)]
3092		public int fread (GLib.FileStream stream);
3093		public static int fprintf (GLib.FileStream stream, Histogram h, string range_format, string bin_format);
3094		[CCode (instance_pos=-1)]
3095		public int fscanf (GLib.FileStream stream);
3096	}
3097
3098	[Compact]
3099	[CCode (cname="gsl_histogram_pdf", cheader_filename="gsl/gsl_histogram.h")]
3100	public class HistogramPDF
3101	{
3102		public size_t n;
3103		public double* range;
3104		public double* sum ;
3105
3106		[CCode (cname="gsl_histogram_pdf_alloc")]
3107		public HistogramPDF (size_t n);
3108		public int init (Histogram h);
3109		public double sample (double r);
3110	}
3111
3112	[Compact]
3113	[CCode (cname="gsl_histogram2d", cheader_filename="gsl/gsl_histogram2d.h")]
3114	public class Histogram2d
3115	{
3116		public size_t nx;
3117		public size_t ny;
3118		public double* xrange;
3119		public double* yrange;
3120		public double* bin;
3121
3122		[CCode (cname="gsl_histogram2d_alloc")]
3123		public Histogram2d (size_t nx, size_t ny);
3124		[CCode (cname="gsl_histogram2d_calloc")]
3125		public Histogram2d.with_zeros (size_t nx, size_t ny);
3126		[CCode (cname="gsl_histogram2d_calloc_uniform")]
3127		public Histogram2d.uniform (size_t nx, size_t ny, double xmin, double xmax, double ymin, double ymax);
3128		[CCode (cname="gsl_histogram2d_calloc_range")]
3129		public Histogram2d.range (size_t nx, size_t ny, out double xrange, out double yrange);
3130
3131		public int increment (double x, double y);
3132		public int accumulate (double x, double y, double weight);
3133		public int find (double x, double y, out size_t i, out size_t j);
3134		public double @get (size_t i, size_t j);
3135		public int get_xrange (size_t i, out double xlower, out double xupper);
3136		public int get_yrange (size_t j, out double ylower, out double yupper);
3137
3138		public double xmax ();
3139		public double xmin ();
3140		public double ymax ();
3141		public double ymin ();
3142
3143		public void reset ();
3144
3145		public int set_ranges_uniform (double xmin, double xmax, double ymin, double ymax);
3146		public int set_ranges (double[] xrange, double[] yrange);
3147
3148		public int memcpy (Histogram2d source);
3149		public Histogram2d clone ();
3150
3151		public double max_val();
3152		public void max_bin (out size_t i, out size_t j);
3153		public double min_val();
3154		public void min_bin (out size_t i, out size_t j);
3155
3156		public double xmean ();
3157		public double ymean ();
3158		public double xsigma ();
3159		public double ysigma ();
3160		public double cov ();
3161
3162		public double sum ();
3163		public int equal_bins_p (Histogram2d h2);
3164		public int add (Histogram2d h2);
3165		public int sub (Histogram2d h2);
3166		public int mul (Histogram2d h2);
3167		public int div (Histogram2d h2);
3168		public int scale (double scale);
3169		public int shift (double shift);
3170
3171		[CCode (instance_pos=-1)]
3172		public int fwrite (GLib.FileStream stream);
3173		[CCode (instance_pos=-1)]
3174		public int fread (GLib.FileStream stream);
3175		public static int fprintf (GLib.FileStream stream, Histogram2d h, string range_format, string bin_format);
3176		[CCode (instance_pos=-1)]
3177		public int fscanf (GLib.FileStream stream);
3178	}
3179
3180	[Compact]
3181	[CCode (cname="gsl_histogram2d_pdf", cheader_filename="gsl/gsl_histogram2d.h")]
3182	public class Histogram2dPDF
3183	{
3184		public size_t nx;
3185		public size_t ny;
3186		public double* xrange;
3187		public double* yrange;
3188		public double* sum;
3189
3190		[CCode (cname="gsl_histogram2d_pdf_alloc")]
3191		public Histogram2dPDF (size_t nx, size_t ny);
3192		public int init (Histogram2d h);
3193		public int sample (double r1, double r2, out double x, out double y);
3194	}
3195
3196
3197	/*
3198	 * N-Tuples
3199	 */
3200	[CCode (has_target = false, has_typedef = false)]
3201	public delegate int NTupleSelectFunc (void* ntuple_data, void* params);
3202	[CCode (has_target = false, has_typedef = false)]
3203	public delegate double NTupleValueFunc (void* ntuple_data, void* params);
3204
3205	[SimpleType]
3206	[CCode (cname="gsl_ntuple_select_fn", cheader_filename="gsl/gsl_ntuple.h", has_type_id = false)]
3207	public struct NTupleSelectFn
3208	{
3209		public NTupleSelectFunc function;
3210		public void* params;
3211	}
3212
3213	[SimpleType]
3214	[CCode (cname="gsl_ntuple_value_fn", cheader_filename="gsl/gsl_ntuple.h", has_type_id = false)]
3215	public struct NTupleValueFn
3216	{
3217		public NTupleValueFunc function;
3218		public void* params;
3219	}
3220
3221	[Compact]
3222	[CCode (cname="gsl_ntuple", free_function="gsl_ntuple_close", cheader_filename="gsl/gsl_ntuple.h")]
3223	public class NTuple
3224	{
3225		public GLib.FileStream file;
3226		public void* ntuple_data;
3227		public size_t size;
3228
3229		public static NTuple open (string filename, void* ntuple_data, size_t size);
3230		public static NTuple create (string filename, void* ntuple_data, size_t size);
3231		public int write ();
3232		public int read ();
3233		public int bookdata ();
3234
3235		public static int project (Histogram h, NTuple ntuple, NTupleValueFn* value_func, NTupleSelectFn* select_func);
3236	}
3237
3238
3239	/*
3240	 * Monte Carlo Integration
3241	 */
3242	[CCode (cprefix="GSL_VEGAS_MODE_", cheader_filename="gsl/gsl_monte_vegas.h", has_type_id = false)]
3243	public enum MonteVegasMode
3244	{
3245		IMPORTANCE,
3246		IMPORTANCE_ONLY,
3247		STRATIFIED
3248	}
3249
3250	[CCode (has_target = false, has_typedef = false)]
3251	public delegate double MonteFunc ([CCode (array_length = false)] double[] x_array, size_t dim, void* params);
3252
3253	[SimpleType]
3254	[CCode (cname="gsl_monte_function", cheader_filename="gsl/gsl_monte.h", has_type_id = false)]
3255	public struct MonteFunction
3256	{
3257		public MonteFunc f;
3258		public size_t dim;
3259		public void* params;
3260	}
3261
3262	[Compact]
3263	[CCode (cname="gsl_monte_plain_state", cprefix="gsl_monte_plain_", cheader_filename="gsl/gsl_monte_plain.h")]
3264	public class MontePlainState
3265	{
3266		public size_t dim;
3267		public double* x;
3268
3269		[CCode (cname="gsl_monte_plain_alloc")]
3270		public MontePlainState (size_t dim);
3271		public int init ();
3272		public static int integrate (MonteFunction* f, [CCode (array_length = false)] double[] xl, [CCode (array_length = false)] double[] xu, size_t dim, size_t calls,  RNG r, MontePlainState state, out double result, out double abserr);
3273	}
3274
3275	[Compact]
3276	[CCode (cname="gsl_monte_miser_state", cprefix="gsl_monte_miser_", cheader_filename="gsl/gsl_monte_miser.h")]
3277	public class MonteMiserState
3278	{
3279		public size_t min_calls;
3280		public size_t min_calls_per_bisection;
3281		public double dither;
3282		public double estimate_frac;
3283		public double alpha;
3284		public size_t dim;
3285		public int estimate_style;
3286		public int depth;
3287		public int verbose;
3288		public double* x;
3289		public double* xmid;
3290		public double* sigma_l;
3291		public double* sigma_r;
3292		public double* fmax_l;
3293		public double* fmax_r;
3294		public double* fmin_l;
3295		public double* fmin_r;
3296		public double* fsum_l;
3297		public double* fsum_r;
3298		public double* fsum2_l;
3299		public double* fsum2_r;
3300		public size_t* hits_l;
3301		public size_t* hits_r;
3302
3303		[CCode (cname="gsl_monte_miser_alloc")]
3304		public MonteMiserState (size_t dim);
3305		public int init ();
3306		public static int integrate (MonteFunction* f, [CCode (array_length = false)] double[] xl, [CCode (array_length = false)] double[] xh, size_t dim, size_t calls, RNG r, MonteMiserState state, out double result, out double abserr);
3307	}
3308
3309	[Compact]
3310	[CCode (cname="gsl_monte_vegas_state", cprefix="gsl_monte_vegas_", cheader_filename="gsl/gsl_monte_vegas.h")]
3311	public class MonteVegasState
3312	{
3313		public size_t dim;
3314		public size_t bins_max;
3315		public uint bins;
3316		public uint boxes;
3317		public double* xi;
3318		public double* xin;
3319		public double* delx;
3320		public double* weight;
3321		public double vol;
3322		public double* x;
3323		public int* bin;
3324		public int* box;
3325		public double* d;
3326		public double alpha;
3327		public int mode;
3328		public int verbose;
3329		public uint iterations;
3330		public int stage;
3331		public double jac;
3332		public double wtd_int_sum;
3333		public double sum_wgts;
3334		public double chi_sum;
3335		public double chisq;
3336		public double result;
3337		public double sigma;
3338		public uint it_start;
3339		public uint it_num;
3340		public uint samples;
3341		public uint calls_per_box;
3342		public GLib.FileStream ostream;
3343
3344		[CCode (cname="gsl_monte_vegas_alloc")]
3345		public MonteVegasState (size_t dim);
3346		public int init ();
3347		public static int integrate (MonteFunction* f, [CCode (array_length = false)] double[] xl, [CCode (array_length = false)] double[] xu, size_t dim, size_t calls, RNG r, MonteVegasState state, out double result, out double abserr);
3348	}
3349
3350
3351	/*
3352	 * Simulated Annealing
3353	 */
3354	[SimpleType]
3355	[CCode (cname="gsl_siman_params_t", cheader_filename="gsl/gsl_siman.h", has_type_id = false)]
3356	public struct SimanParams
3357	{
3358		public int n_tries;
3359		public int iters_fixed_T;
3360		public double step_size;
3361		public double k;
3362		public double t_initial;
3363		public double mu_t;
3364		public double t_min;
3365	}
3366
3367	[CCode (lower_case_cprefix="gsl_siman_", cheader_filename="gsl/gsl_siman.h", has_type_id = false)]
3368	namespace Siman
3369	{
3370		[CCode (cname = "gsl_siman_Efunc_t", has_target = false)]
3371		public delegate double Efunc_t (void *xp);
3372		[CCode (cname = "gsl_siman_step_t", has_target = false)]
3373		public delegate void step_t (RNG r, void *xp, double step_size);
3374		[CCode (cname = "gsl_siman_metric_t", has_target = false)]
3375		public delegate double metric_t (void *xp, void* yp);
3376		[CCode (cname = "gsl_siman_print_t", has_target = false)]
3377		public delegate void print_t (void* xp);
3378		[CCode (cname = "gsl_siman_copy_t", has_target = false)]
3379		public delegate void copy_t (void* source, void* dest);
3380		[CCode (cname = "gsl_siman_copy_construct_t", has_target = false)]
3381		public delegate void copy_construct_t (void* xp);
3382		[CCode (cname = "gsl_siman_destroy_t", has_target = false)]
3383		public delegate void destroy_t (void* xp);
3384
3385		public static void solve(RNG r, void *x0_p, Efunc_t Ef, step_t take_step, metric_t distance, print_t print_position, copy_t copyfunc, copy_construct_t copy_constructor, destroy_t destructor, size_t element_size, SimanParams params);
3386		public static void solve_many (RNG r, void *x0_p, Efunc_t Ef, step_t take_step, metric_t distance, print_t print_position, size_t element_size, SimanParams params);
3387	}
3388
3389
3390	/*
3391	 * Ordinary Differential Equations
3392	 */
3393	[CCode (cprefix="GSL_ODEIV_HADJ_", cheader_filename="gsl/gsl_odeiv.h", has_type_id = false)]
3394	public enum OdeivHadjustTypes
3395	{
3396		INC,
3397		NIL,
3398		DEC
3399	}
3400
3401	[CCode (has_target = false, has_typedef = false)]
3402	public delegate int OdeivFunction (double t, [CCode (array_length = false)] double[] y, [CCode (array_length = false)] double[] dydt, void* params);
3403	[CCode (has_target = false, has_typedef = false)]
3404	public delegate int OdeivJacobian (double t, [CCode (array_length = false)] double[] y, [CCode (array_length = false)] double[] dfdy, [CCode (array_length = false)] double[] dfdt, void* params);
3405	[CCode (has_target = false, has_typedef = false)]
3406	public delegate void* OdeivStepAlloc (size_t dim);
3407	[CCode (has_target = false, has_typedef = false)]
3408	public delegate int OdeivStepApply (void* state, size_t dim, double t, double h, [CCode (array_length = false)] double[] y, [CCode (array_length = false)] double[] yerr, [CCode (array_length = false)] double[] dydt_in, [CCode (array_length = false)] double[] dydt_out, OdeivSystem* dydt);
3409	[CCode (has_target = false, has_typedef = false)]
3410	public delegate int OdeivStepReset (void* state, size_t dim);
3411	[CCode (has_target = false, has_typedef = false)]
3412	public delegate uint OdeivStepOrder (void* state);
3413	[CCode (has_target = false, has_typedef = false)]
3414	public delegate void OdeivStepFree (void* state);
3415	[CCode (has_target = false, has_typedef = false)]
3416	public delegate void* OdeivControlAlloc ();
3417	[CCode (has_target = false, has_typedef = false)]
3418	public delegate int OdeivControlInit (void* state, double eps_abs, double eps_rel, double a_y, double a_dydt);
3419	[CCode (has_target = false, has_typedef = false)]
3420	public delegate int OdeivControlHadjust (void* state, size_t dim, uint ord, [CCode (array_length = false)] double[] y, [CCode (array_length = false)] double[] yerr, [CCode (array_length = false)] double[] yp, [CCode (array_length = false)] double[] h);
3421	[CCode (has_target = false, has_typedef = false)]
3422	public delegate void OdeivControlFree (void* state);
3423
3424	[SimpleType]
3425	[CCode (cname="gsl_odeiv_system", cheader_filename="gsl/gsl_odeiv.h", has_type_id = false)]
3426	public struct OdeivSystem
3427	{
3428		public OdeivFunction function;
3429		public OdeivJacobian jacobian;
3430		public size_t dimension;
3431		public void* params;
3432	}
3433
3434	[SimpleType]
3435	[CCode (cname="gsl_odeiv_step_type", cheader_filename="gsl/gsl_odeiv.h", has_type_id = false)]
3436	public struct OdeivStepType
3437	{
3438		public unowned string name;
3439		public int can_use_dydt_in;
3440		public int gives_exact_dydt_out;
3441		public OdeivStepAlloc alloc;
3442		public OdeivStepApply apply;
3443		public OdeivStepReset reset;
3444		public OdeivStepOrder order;
3445		public OdeivStepFree free;
3446	}
3447
3448	[CCode (lower_case_cprefix="gsl_odeiv_step_", cheader_filename="gsl/gsl_odeiv.h")]
3449	namespace OdeivStepTypes
3450	{
3451		public static OdeivStepType* rk2;
3452		public static OdeivStepType* rk4;
3453		public static OdeivStepType* rkf45;
3454		public static OdeivStepType* rkck;
3455		public static OdeivStepType* rk8pd;
3456		public static OdeivStepType* rk2imp;
3457		public static OdeivStepType* rk2simp;
3458		public static OdeivStepType* rk4imp;
3459		public static OdeivStepType* bsimp;
3460		public static OdeivStepType* gear1;
3461		public static OdeivStepType* gear2;
3462	}
3463
3464	[Compact]
3465	[CCode (cname="gsl_odeiv_step", cheader_filename="gsl/gsl_odeiv.h")]
3466	public class OdeivStep
3467	{
3468		public OdeivStepType* type;
3469		public size_t dimension;
3470		public void* state;
3471
3472		[CCode (cname="gsl_odeiv_step_alloc")]
3473		public OdeivStep (OdeivStepType* T, size_t dim);
3474		public int reset ();
3475		public string name ();
3476		public uint order ();
3477
3478		public int apply (double t, double h, [CCode (array_length = false)] double[] y, [CCode (array_length = false)] double[] yerr, [CCode (array_length = false)] double[] dydt_in, [CCode (array_length = false)] double[] dydt_out, OdeivSystem* dydt);
3479	}
3480
3481	[SimpleType]
3482	[CCode (cname="gsl_odeiv_control_type", cheader_filename="gsl/gsl_odeiv.h", has_type_id = false)]
3483	public struct OdeivControlType
3484	{
3485		public unowned string name;
3486		public OdeivControlAlloc alloc;
3487		public OdeivControlInit init;
3488		public OdeivControlHadjust hadjust;
3489		public OdeivControlFree free;
3490	}
3491
3492	[Compact]
3493	[CCode (cname="gsl_odeiv_control", cheader_filename="gsl/gsl_odeiv.h")]
3494	public class OdeivControl
3495	{
3496		public OdeivControlType* type;
3497		public void* state;
3498
3499		[CCode (cname="gsl_odeiv_control_alloc")]
3500		public OdeivControl (OdeivControlType* T);
3501		[CCode (cname="gsl_odeiv_control_standard_new")]
3502		public OdeivControl.standard (double eps_abs, double eps_rel, double a_y, double a_dydt);
3503		[CCode (cname="gsl_odeiv_control_y_new")]
3504		public OdeivControl.y (double eps_abs, double eps_rel);
3505		[CCode (cname="gsl_odeiv_control_yp_new")]
3506		public OdeivControl.yp (double eps_abs, double eps_rel);
3507		[CCode (cname="gsl_odeiv_control_scaled_new")]
3508		public OdeivControl.scaled (double eps_abs, double eps_rel, double a_y, double a_dydt, double[] scale_abs);
3509
3510		public int init (double eps_abs, double eps_rel, double a_y, double a_dydt);
3511		public int hadjust (OdeivStep s, out double y, out double yerr, out double dydt, out double h);
3512		public string name ();
3513	}
3514
3515	[Compact]
3516	[CCode (cname="gsl_odeiv_evolve", cheader_filename="gsl/gsl_odeiv.h")]
3517	public class OdeivEvolve
3518	{
3519		public size_t dimension;
3520		public double* y0;
3521		public double* yerr;
3522		public double* dydt_in;
3523		public double* dydt_out;
3524		public double last_step;
3525		public ulong count;
3526		public ulong failed_steps;
3527
3528		[CCode (cname="gsl_odeiv_evolve_alloc")]
3529		public OdeivEvolve (size_t dim);
3530		public int apply (OdeivControl con, OdeivStep step, OdeivSystem* dydt, [CCode (array_length = false)] double[] t, double t1, [CCode (array_length = false)] double[] h, [CCode (array_length = false)] double[] y);
3531		public int reset ();
3532	}
3533
3534
3535	/*
3536	 * Interpolation
3537	 */
3538	[CCode (has_target = false, has_typedef = false)]
3539	public delegate void* InterpAlloc (size_t size);
3540	[CCode (has_target = false, has_typedef = false)]
3541	public delegate int InterpInit (void* t, [CCode (array_length = false)] double[] xa, [CCode (array_length = false)] double[] ya, size_t size);
3542	[CCode (has_target = false, has_typedef = false)]
3543	public delegate int InterpEval (void* t, [CCode (array_length = false)] double[] xa, [CCode (array_length = false)] double[] ya, size_t size, double x, InterpAccel* i, out double y);
3544	[CCode (has_target = false, has_typedef = false)]
3545	public delegate int InterpEvalDeriv (void* t, [CCode (array_length = false)] double[] xa, [CCode (array_length = false)] double[] ya, size_t size, double x, InterpAccel* i, out double y_p);
3546	[CCode (has_target = false, has_typedef = false)]
3547	public delegate int InterpEvalDeriv2 (void* t, [CCode (array_length = false)] double[] xa, [CCode (array_length = false)] double[] ya, size_t size, double x, InterpAccel* i, out double y_pp);
3548	[CCode (has_target = false, has_typedef = false)]
3549	public delegate int InterpEvalInteg (void* t, [CCode (array_length = false)] double[] xa, [CCode (array_length = false)] double[] ya, size_t size, InterpAccel* i, double a, double b, out double result);
3550	[CCode (has_target = false, has_typedef = false)]
3551	public delegate void InterpFree (void* t);
3552
3553	[Compact]
3554	[CCode (cname="gsl_interp_accel", cheader_filename="gsl/gsl_interp.h")]
3555	public class InterpAccel
3556	{
3557		public size_t cache;
3558		public size_t miss_count;
3559		public size_t hit_count;
3560
3561		[CCode (cname="gsl_interp_accel_alloc")]
3562		public InterpAccel ();
3563		public size_t find (double[] x_array, double x);
3564		public int reset ();
3565	}
3566
3567	[SimpleType]
3568	[CCode (cname="gsl_interp_type", cheader_filename="gsl/gsl_interp.h", has_type_id = false)]
3569	public struct InterpType
3570	{
3571		public unowned string name;
3572		public uint min_size;
3573		public InterpAlloc alloc;
3574		public InterpInit init;
3575		public InterpEval eval;
3576		public InterpEvalDeriv eval_deriv;
3577		public InterpEvalDeriv2 eval_deriv2;
3578		public InterpEvalInteg eval_integ;
3579		public InterpFree free;
3580	}
3581
3582	[CCode (lower_case_cprefix="gsl_interp_", cheader_filename="gsl/gsl_interp.h")]
3583	namespace InterpTypes
3584	{
3585		public static InterpType* linear;
3586		public static InterpType* polynomial;
3587		public static InterpType* cspline;
3588		public static InterpType* cspline_periodic;
3589		public static InterpType* akima;
3590		public static InterpType* akima_periodic;
3591	}
3592
3593	[Compact]
3594	[CCode (cname="gsl_interp", cheader_filename="gsl/gsl_interp.h")]
3595	public class Interp
3596	{
3597		InterpType* type;
3598		public double xmin;
3599		public double xmax;
3600		public size_t size;
3601		public void* state;
3602
3603		[CCode (cname="gsl_interp_alloc")]
3604		public Interp (InterpType* T, size_t n);
3605		public int init ([CCode (array_length = false)] double[] xa, [CCode (array_length = false)] double[] ya, size_t size);
3606		public string name ();
3607		public uint min_size ();
3608		public int eval_e ([CCode (array_length = false)] double[] xa, [CCode (array_length = false)] double[] ya, double x, InterpAccel a, out double y);
3609		public double eval ([CCode (array_length = false)] double[] xa, [CCode (array_length = false)] double[] ya, double x, InterpAccel a);
3610		public int eval_deriv_e ([CCode (array_length = false)] double[] xa, [CCode (array_length = false)] double[] ya, double x, InterpAccel a, out double d);
3611		public double eval_deriv ([CCode (array_length = false)] double[] xa, [CCode (array_length = false)] double[] ya, double x, InterpAccel a);
3612		public int eval_deriv2_e ([CCode (array_length = false)] double[] xa, [CCode (array_length = false)] double[] ya, double x, InterpAccel a, out double d2);
3613		public double eval_deriv2 ([CCode (array_length = false)] double[] xa, [CCode (array_length = false)] double[] ya, double x, InterpAccel a);
3614		public int eval_integ_e ([CCode (array_length = false)] double[] xa, [CCode (array_length = false)] double[] ya, double a, double b, InterpAccel acc, out double result);
3615		public double eval_integ ([CCode (array_length = false)] double[] xa, [CCode (array_length = false)] double[] ya, double a, double b, InterpAccel acc);
3616		public static size_t bsearch([CCode (array_length = false)] double[] x_array, double x, size_t index_lo, size_t index_hi);
3617	}
3618
3619	[Compact]
3620	[CCode (cname="gsl_spline", cheader_filename="gsl/gsl_spline.h")]
3621	public class Spline
3622	{
3623		public Interp interp;
3624		public double* x;
3625		public double* y;
3626		public size_t size;
3627
3628		[CCode (cname="gsl_spline_alloc")]
3629		public Spline (InterpType* T, size_t size);
3630		public int init ([CCode (array_length = false)] double[] xa, [CCode (array_length = false)] double[] ya, size_t size);
3631		public string name ();
3632		public uint min_size ();
3633		public int eval_e (double x, InterpAccel a, out double y);
3634		public double eval (double x, InterpAccel a);
3635		public int eval_deriv_e (double x, InterpAccel a, out double y);
3636		public double eval_deriv (double x, InterpAccel a);
3637		public int eval_deriv2_e (double x, InterpAccel a, out double y);
3638		public double eval_deriv2 (double x, InterpAccel a);
3639		public int eval_integ_e (double a, double b, InterpAccel acc, out double y);
3640		public double eval_integ (double a, double b, InterpAccel acc);
3641	}
3642
3643	/*
3644	 * Numerical Differentiation
3645	 */
3646	[CCode (lower_case_cprefix="gsl_deriv_", cheader_filename="gsl/gsl_deriv.h")]
3647	namespace Deriv
3648	{
3649		public static int central (Function* f, double x, double h, out double result, out double abserr);
3650		public static int backward (Function* f, double x, double h, out double result, out double abserr);
3651		public static int forward (Function* f, double x, double h, out double result, out double abserr);
3652	}
3653
3654
3655	/*
3656	 * Chebyshev Approximations
3657	 */
3658	[Compact]
3659	[CCode (cname="gsl_cheb_series", cprefix="gsl_cheb_", cheader_filename="gsl/gsl_chebyshev.h")]
3660	public class ChebSeries
3661	{
3662		public double* c;
3663		public size_t order;
3664		public double a;
3665		public double b;
3666		public size_t order_sp;
3667		public double *f;
3668
3669		[CCode (cname="gsl_cheb_alloc")]
3670		public ChebSeries (size_t order);
3671		public int init (Function* func, double a, double b);
3672		public double eval (double x);
3673		public int eval_err (double x, out double result, out double abserr);
3674		public double eval_n (size_t order, double x);
3675		public int eval_n_err (size_t order, double x, out double result, out double abserr);
3676		public double eval_mode (double x, Mode mode);
3677		public int eval_mode_e (double x, Mode mode, out double result, out double abserr);
3678		public int calc_deriv (ChebSeries cs);
3679		public int calc_integ (ChebSeries cs);
3680	}
3681
3682
3683	/*
3684	 * Series Acceleration
3685	 */
3686	[Compact]
3687	[CCode (cname="gsl_sum_levin_u_workspace", free_function="gsl_sum_levin_u_free", cheader_filename="gsl/gsl_sum.h")]
3688	public class SumLevinUWorkspace
3689	{
3690		public size_t size;
3691		public size_t i;
3692		public size_t terms_used;
3693		public double sum_plain;
3694		public double* q_num;
3695		public double* q_den;
3696		public double* dq_num;
3697		public double* dq_den;
3698		public double* dsum;
3699
3700		[CCode (cname="gsl_sum_levin_u_alloc")]
3701		public SumLevinUWorkspace (size_t n);
3702	}
3703
3704	[CCode (lower_case_cprefix="gsl_sum_levin_u_", cheader_filename="gsl/gsl_sum.h")]
3705	namespace SumLevinU
3706	{
3707		public static int accel (double[] array, SumLevinUWorkspace w, out double sum_accel, out double abserr);
3708		public static int minmax (double[] array, size_t min_terms, size_t max_terms, SumLevinUWorkspace w, out double sum_accel, out double abserr);
3709		public static int step (double term, size_t n, size_t nmax, SumLevinUWorkspace w, out double sum_accel);
3710	}
3711
3712	[Compact]
3713	[CCode (cname="gsl_sum_levin_utrunc_workspace", free_function="gsl_sum_levin_utrunc_free", cheader_filename="gsl/gsl_sum.h")]
3714	public class SumLevinUtruncWorkspace
3715	{
3716		public size_t size;
3717		public size_t i;
3718		public size_t terms_used;
3719		public double sum_plain;
3720		public double* q_num;
3721		public double* q_den;
3722		public double* dsum;
3723
3724		[CCode (cname="gsl_sum_levin_utrunc_alloc")]
3725		public SumLevinUtruncWorkspace (size_t n);
3726	}
3727
3728	[CCode (lower_case_cprefix="gsl_sum_levin_utrunc_", cheader_filename="gsl/gsl_sum.h")]
3729	namespace SumLevinUtrunc
3730	{
3731		public static int accel (double[] array, SumLevinUtruncWorkspace w, out double sum_accel, out double abserr_trunc);
3732		public static int minmax (double[] array, size_t min_terms, size_t max_terms, SumLevinUtruncWorkspace w, out double sum_accel, out double abserr_trunc);
3733		public static int step (double term, size_t n, SumLevinUtruncWorkspace w, out double sum_accel);
3734	}
3735
3736
3737	/*
3738	 * Wavelet Transforms
3739	 */
3740	[CCode (cname = "gsl_wavelet_direction", cprefix = "gsl_wavelet_", has_type_id = false)]
3741	public enum WaveletDirection
3742	{
3743		forward = 1,
3744		backward = -1
3745	}
3746
3747	[CCode (has_target = false, has_typedef = false)]
3748	public delegate int WaveletInit (double** h1, double** g1, double** h2, double** g2, size_t* nc, size_t* offset, size_t member);
3749
3750	[SimpleType]
3751	[CCode (cname="gsl_wavelet_type", cheader_filename="gsl/gsl_wavelet.h", has_type_id = false)]
3752	public struct WaveletType
3753	{
3754		public unowned string name;
3755		public WaveletInit init;
3756	}
3757
3758	[CCode (lower_case_cprefix="gsl_wavelet_", cheader_filename="gsl/gsl_wavelet.h")]
3759	namespace WaveletTypes
3760	{
3761		public static WaveletType* daubechies;
3762		public static WaveletType* daubechies_centered;
3763		public static WaveletType* haar;
3764		public static WaveletType* haar_centered;
3765		public static WaveletType* bspline;
3766		public static WaveletType* bspline_centered;
3767	}
3768
3769	[Compact]
3770	[CCode (cname="gsl_wavelet_workspace", cheader_filename="gsl/gsl_wavelet.h")]
3771	public class WaveletWorkspace
3772	{
3773		public double* scratch;
3774		public size_t n;
3775
3776		[CCode (cname="gsl_wavelet_workspace_alloc")]
3777		public WaveletWorkspace (size_t n);
3778	}
3779
3780	[Compact]
3781	[CCode (cname="gsl_wavelet", cheader_filename="gsl/gsl_wavelet.h,gsl/gsl_wavelet2d.h")]
3782	public class Wavelet
3783	{
3784		public WaveletType* type;
3785		public double* h1;
3786		public double* g1;
3787		public double* h2;
3788		public double* g2;
3789		public size_t nc;
3790		public size_t offset;
3791
3792		[CCode (cname="gsl_wavelet_alloc")]
3793		public Wavelet (WaveletType* T, size_t k);
3794		public string name ();
3795		public int transform ([CCode (array_length = false)] double[] data, size_t stride, size_t n, WaveletDirection dir, WaveletWorkspace work);
3796		public int transform_forward ([CCode (array_length = false)] double[] data, size_t stride, size_t n, WaveletWorkspace work);
3797		public int transform_inverse ([CCode (array_length = false)] double[] data, size_t stride, size_t n, WaveletWorkspace work);
3798
3799		[CCode (cname="gsl_wavelet2d_transform")]
3800		public int transform_2d ([CCode (array_length = false)] double[] data, size_t tda, size_t size1, size_t size2, WaveletDirection dir, WaveletWorkspace work);
3801		[CCode (cname="gsl_wavelet2d_transform_forward")]
3802		public int transform_forward_2d ([CCode (array_length = false)] double[] data, size_t tda, size_t size1, size_t size2, WaveletWorkspace work);
3803		[CCode (cname="gsl_wavelet2d_transform_inverse")]
3804		public int transform_inverse_2d ([CCode (array_length = false)] double[] data, size_t tda, size_t size1, size_t size2, WaveletWorkspace work);
3805		[CCode (cname="gsl_wavelet2d_nstransform")]
3806		public int nstransform ([CCode (array_length = false)] double[] data, size_t tda, size_t size1, size_t size2, WaveletDirection dir,WaveletWorkspace work);
3807		[CCode (cname="gsl_wavelet2d_nstransform_forward")]
3808		public int nstransform_forward ([CCode (array_length = false)] double[] data, size_t tda, size_t size1, size_t size2, WaveletWorkspace work);
3809		[CCode (cname="gsl_wavelet2d_nstransform_inverse")]
3810		public int nstransform_inverse ([CCode (array_length = false)] double[] data, size_t tda, size_t size1, size_t size2, WaveletWorkspace * work);
3811		[CCode (cname="gsl_wavelet2d_transform_matrix")]
3812		public int transform_matrix (Matrix a, WaveletDirection dir, WaveletWorkspace work);
3813		[CCode (cname="gsl_wavelet2d_transform_matrix_forward")]
3814		public int transform_matrix_forward (Matrix a, WaveletWorkspace work);
3815		[CCode (cname="gsl_wavelet2d_transform_matrix_inverse")]
3816		public int transform_matrix_inverse (Matrix a, WaveletWorkspace work);
3817		[CCode (cname="gsl_wavelet2d_nstransform_matrix")]
3818		public int nstransform_matrix (Matrix a, WaveletDirection dir, WaveletWorkspace work);
3819		[CCode (cname="gsl_wavelet2d_nstransform_matrix_forward")]
3820		public int nstransform_matrix_forward (Matrix a, WaveletWorkspace work);
3821		[CCode (cname="gsl_wavelet2d_nstransform_matrix_inverse")]
3822		public int nstransform_matrix_inverse (Matrix a, WaveletWorkspace work);
3823	}
3824
3825
3826	/*
3827	 * Discrete Hankel Transforms
3828	 */
3829	[Compact]
3830	[CCode (cname="gsl_dht", cheader_filename="gsl/gsl_dht.h")]
3831	public class DHT
3832	{
3833		public size_t size;
3834		public double nu;
3835		public double xmax;
3836		public double kmax;
3837		public double* j;
3838		public double* Jjj;
3839		public double* J2;
3840
3841		[CCode (cname="gsl_dht_alloc")]
3842		public DHT (size_t size);
3843		[CCode (cname="gsl_dht_new")]
3844		public DHT.recalc (size_t size, double nu, double xmax);
3845		public int init (double nu, double xmax);
3846		public double x_sample (int n);
3847		public double k_sample (int n);
3848		public int apply ([CCode (array_length = false)] double[] f_in, [CCode (array_length = false)] double[] f_out);
3849	}
3850
3851
3852	/*
3853	 * One dimensional Root-Finding
3854	 */
3855	[CCode (has_target = false, has_typedef = false)]
3856	public delegate int RootFsolverSet (void* state, Function* f, double* root, double x_lower, double x_upper);
3857	[CCode (has_target = false, has_typedef = false)]
3858	public delegate int RootFsolverIterate (void* state, Function* f, double* root, double* x_lower, double* x_upper);
3859	[CCode (has_target = false, has_typedef = false)]
3860	public delegate int RootFdfsolverSet (void* state, FunctionFdf* f, double* root);
3861	[CCode (has_target = false, has_typedef = false)]
3862	public delegate int RootFdfsolverIterate (void* state, FunctionFdf* d, double* root);
3863
3864	[SimpleType]
3865	[CCode (cname="gsl_root_fsolver_type", cheader_filename="gsl/gsl_roots.h", has_type_id = false)]
3866	public struct RootFsolverType
3867	{
3868		public unowned string name;
3869		public size_t size;
3870		public RootFsolverSet @set;
3871		public RootFsolverIterate iterate;
3872	}
3873
3874	[Compact]
3875	[CCode (cname="gsl_root_fsolver", cheader_filename="gsl/gsl_roots.h")]
3876	public class RootFsolver
3877	{
3878		public RootFsolverType* type;
3879		public Function* function;
3880		public double root;
3881		public double x_lower;
3882		public double x_upper;
3883		public void* state;
3884
3885		[CCode (cname="gsl_root_fsolver_alloc")]
3886		public RootFsolver (RootFsolverType* T);
3887		public int @set (Function* f, double x_lower, double x_upper);
3888		public int iterate ();
3889		public unowned string name ();
3890	}
3891
3892	[SimpleType]
3893	[CCode (cname="gsl_root_fdfsolver_type", cheader_filename="gsl/gsl_roots.h", has_type_id = false)]
3894	public struct RootFdfsolverType
3895	{
3896		public unowned string name;
3897		public size_t size;
3898		public RootFdfsolverSet @set;
3899		public RootFdfsolverIterate iterate;
3900	}
3901
3902	[Compact]
3903	[CCode (cname="gsl_root_fdfsolver", cheader_filename="gsl/gsl_roots.h")]
3904	public class RootFdfsolver
3905	{
3906		public RootFdfsolverType* type;
3907		public FunctionFdf* fdf;
3908		public double root;
3909		public void* state;
3910
3911		[CCode (cname="gsl_root_fdfsolver_alloc")]
3912		public RootFdfsolver (RootFdfsolverType* T);
3913		public int @set (FunctionFdf* fdf, double root);
3914		public int iterate ();
3915		public unowned string name ();
3916	}
3917
3918	[CCode (lower_case_cprefix="gsl_root_test_", cheader_filename="gsl/gsl_roots.h")]
3919	namespace RootTest
3920	{
3921		public static int interval (double x_lower, double x_upper, double epsabs, double epsrel);
3922		public static int residual (double f, double epsabs);
3923		public static int delta (double x1, double x0, double epsabs, double epsrel);
3924	}
3925
3926	[CCode (lower_case_cprefix="gsl_root_fsolver_", cheader_filename="gsl/gsl_roots.h")]
3927	namespace RootFsolverTypes
3928	{
3929		public static RootFsolverType* bisection;
3930		public static RootFsolverType* brent;
3931		public static RootFsolverType* falsepos;
3932	}
3933
3934	[CCode (lower_case_cprefix="gsl_root_fdfsolver_", cheader_filename="gsl/gsl_roots.h")]
3935	namespace RootFdfsolverTypes
3936	{
3937		public static RootFdfsolverType* newton;
3938		public static RootFdfsolverType* secant;
3939		public static RootFdfsolverType* steffenson;
3940	}
3941
3942
3943	/*
3944	 * One dimensional Minimization
3945	 */
3946	[CCode (has_target = false, has_typedef = false)]
3947	public delegate int MinSet (void* state, Function* f, double xminimun, double f_minimum, double x_lower, double f_lower, double x_upper, double f_upper);
3948	[CCode (has_target = false, has_typedef = false)]
3949	public delegate int MinIterate (void *state, Function* f, double* x_minimum, double* f_minimum, double* x_lower, double* f_lower, double* x_upper, double* f_upper);
3950	[CCode (has_target = false, has_typedef = false)]
3951	public delegate int MinBracketingFunction (Function* f, double* x_minimum, double* f_minimum, double* x_lower, double* f_lower, double* x_upper, double* f_upper, size_t eval_max);
3952
3953	[SimpleType]
3954	[CCode (cname="gsl_min_fminimizer_type", cheader_filename="gsl/gsl_min.h", has_type_id = false)]
3955	public struct MinFminimizerType
3956	{
3957		public unowned string name;
3958		public size_t size;
3959		public MinSet @set;
3960		public MinIterate iterate;
3961	}
3962
3963	[Compact]
3964	[CCode (cname="gsl_min_fminimizer", cheader_filename="gsl/gsl_min.h")]
3965	public class MinFminimizer
3966	{
3967		public MinFminimizerType* type;
3968		public Function* function;
3969		public double x_minimum;
3970		public double x_lower;
3971		public double x_upper;
3972		public double f_minimum;
3973		public double f_lower;
3974		public double f_upper;
3975		public void* state;
3976
3977		[CCode (cname="gsl_min_fminimizer_alloc")]
3978		public MinFminimizer (MinFminimizerType* T) ;
3979		public int @set (Function* f, double x_minimum, double x_lower, double x_upper);
3980		public int set_with_values (Function* f, double x_minimum, double f_minimum, double x_lower, double f_lower, double x_upper, double f_upper);
3981		public int iterate ();
3982		public unowned string name ();
3983	}
3984
3985	[CCode (lower_case_cprefix="gsl_min_test_", cheader_filename="gsl/gsl_min.h")]
3986	namespace MinTest
3987	{
3988		public static int interval (double x_lower, double x_upper, double epsabs, double epsrel);
3989	}
3990
3991	[CCode (lower_case_cprefix="gsl_min_fminimizer_", cheader_filename="gsl/gsl_min.h")]
3992	namespace MinFminimizerTypes
3993	{
3994		public static MinFminimizerType* goldensection;
3995		public static MinFminimizerType* brent;
3996	}
3997
3998	[CCode (cname="gsl_min_find_bracket", cheader_filename="gsl/gsl_min.h")]
3999	public static int find_bracket (Function* f, double* x_minimum, double* f_minimum, double* x_lower, double* f_lower, double* x_upper, double* f_upper, size_t eval_max);
4000
4001
4002	/*
4003	 * Multidimensional Root-Finding
4004	 */
4005	[CCode (has_target = false, has_typedef = false)]
4006	public delegate int MultirootF (Vector x, void* params, Vector f);
4007	[CCode (has_target = false, has_typedef = false)]
4008	public delegate int MultirootFAlloc (void* state, size_t n);
4009	[CCode (has_target = false, has_typedef = false)]
4010	public delegate int MultirootFSet (void* state, MultirootFunction* function, Vector x, Vector f, Vector dx);
4011	[CCode (has_target = false, has_typedef = false)]
4012	public delegate int MultirootFIterate (void* state, MultirootFunction* function, Vector x, Vector f, Vector dx);
4013	[CCode (has_target = false, has_typedef = false)]
4014	public delegate void MultirootFFree (void* state);
4015	[CCode (has_target = false, has_typedef = false)]
4016	public delegate int MultirootDF (Vector x, void* params, Matrix df);
4017	[CCode (has_target = false, has_typedef = false)]
4018	public delegate int MultirootFDF (Vector x, void* params, Vector f, Matrix df);
4019	[CCode (has_target = false, has_typedef = false)]
4020	public delegate int MultirootFdfAlloc (void* state, size_t n);
4021	[CCode (has_target = false, has_typedef = false)]
4022	public delegate int MultirootFdfSet (void* state, MultirootFunctionFdf* fdf, Vector x, Vector f, Matrix J, Vector dx);
4023	[CCode (has_target = false, has_typedef = false)]
4024	public delegate int MultirootFdfIterate (void* state, MultirootFunctionFdf* fdf, Vector x, Vector f, Matrix J, Vector dx);
4025	[CCode (has_target = false, has_typedef = false)]
4026	public delegate int MultirootFdfFree (void* state);
4027
4028	[SimpleType]
4029	[CCode (cname="gsl_multiroot_function", cheader_filename="gsl/gsl_multiroots.h", has_type_id = false)]
4030	public struct MultirootFunction
4031	{
4032		public MultirootF f;
4033		public size_t n;
4034		public void* params;
4035	}
4036
4037	[CCode (cname="gsl_multiroot_fdjacobian", cheader_filename="gsl/gsl_multiroots.h")]
4038	public static int multiroot_fdjacobian (MultirootFunction* F, Vector x, Vector f, double epsrel, Matrix jacobian);
4039
4040	[SimpleType]
4041	[CCode (cname="gsl_multiroot_fsolver_type", cheader_filename="gsl/gsl_multiroots.h", has_type_id = false)]
4042	public struct MultirootFsolverType
4043	{
4044		public unowned string name;
4045		public size_t size;
4046		public MultirootFAlloc alloc;
4047		public MultirootFSet @set;
4048		public MultirootFIterate iterate;
4049		public MultirootFFree free;
4050	}
4051
4052	[Compact]
4053	[CCode (cname="gsl_multiroot_fsolver", cheader_filename="gsl/gsl_multiroots.h")]
4054	public class MultirootFsolver
4055	{
4056		public MultirootFsolverType* type;
4057		public MultirootFunction* function;
4058		public Vector x;
4059		public Vector f;
4060		public Vector dx;
4061		public void* state;
4062
4063		[CCode (cname="gsl_multiroot_fsolver_alloc")]
4064		public MultirootFsolver (MultirootFsolverType* T, size_t n);
4065		public int @set (MultirootFunction* f, Vector x);
4066		public int iterate ();
4067		public unowned string name ();
4068		public Vector root ();
4069	}
4070
4071	[SimpleType]
4072	[CCode (cname="gsl_multiroot_function_fdf", cheader_filename="gsl/gsl_multiroots.h", has_type_id = false)]
4073	public struct MultirootFunctionFdf
4074	{
4075		public MultirootF f;
4076		public MultirootDF df;
4077		public MultirootFDF fdf;
4078		public size_t n;
4079		public void* params;
4080	}
4081
4082	[SimpleType]
4083	[CCode (cname="gsl_multiroot_fdfsolver_type", cheader_filename="gsl/gsl_multiroots.h", has_type_id = false)]
4084	public struct MultirootFdfsolverType
4085	{
4086		public unowned string name;
4087		public size_t size;
4088		public MultirootFdfAlloc alloc;
4089		public MultirootFdfSet @set;
4090		public MultirootFdfIterate iterate;
4091		public MultirootFdfFree free;
4092	}
4093
4094	[Compact]
4095	[CCode (cname="gsl_multiroot_fdfsolver", cheader_filename="gsl/gsl_multiroots.h")]
4096	public class MultirootFdfsolver
4097	{
4098		public MultirootFdfsolverType* type;
4099		public MultirootFunctionFdf* fdf;
4100		public Vector x;
4101		public Vector f;
4102		public Matrix J;
4103		public Vector dx;
4104		public void* state;
4105
4106		[CCode (cname="gsl_multiroot_fdfsolver_alloc")]
4107		public MultirootFdfsolver (MultirootFdfsolverType* T, size_t n);
4108		public int @set (MultirootFunctionFdf* fdf, Vector x);
4109		public int iterate ();
4110		public unowned string name ();
4111		public Vector root ();
4112	}
4113
4114	[CCode (lower_case_cprefix="gsl_multiroot_test_", cheader_filename="gsl/gsl_multiroots.h")]
4115	namespace MultirootTest
4116	{
4117		public static int delta (Vector dx, Vector x, double epsabs, double epsrel);
4118		public static int residual (Vector f, double epsabs);
4119	}
4120
4121	[CCode (lower_case_cprefix="gsl_multiroot_fsolver_", cheader_filename="gsl/gsl_multiroots.h")]
4122	namespace MultirootFsolverTypes
4123	{
4124		public static MultirootFsolverType* dnewton;
4125		public static MultirootFsolverType* broyden;
4126		public static MultirootFsolverType* hybrid;
4127		public static MultirootFsolverType* hybrids;
4128	}
4129
4130	[CCode (lower_case_cprefix="gsl_multiroot_fdfsolver_", cheader_filename="gsl/gsl_multiroots.h")]
4131	namespace MultirootFdfsolverTypes
4132	{
4133		public static MultirootFdfsolverType* newton;
4134		public static MultirootFdfsolverType* gnewton;
4135		public static MultirootFdfsolverType* hybridj;
4136		public static MultirootFdfsolverType* hybridsj;
4137	}
4138
4139
4140	/*
4141	 * Multidimensional Minimization
4142	 */
4143	[CCode (has_target = false, has_typedef = false)]
4144	public delegate double MultiminF (Vector x, void* params);
4145	[CCode (has_target = false, has_typedef = false)]
4146	public delegate void MultiminDf (Vector x, void* params, Vector df);
4147	[CCode (has_target = false, has_typedef = false)]
4148	public delegate void MultiminFdf (Vector x, void* params, double* f, Vector df);
4149	[CCode (has_target = false, has_typedef = false)]
4150	public delegate int MultiminFAlloc (void *state, size_t n);
4151	[CCode (has_target = false, has_typedef = false)]
4152	public delegate int MultiminFSet (void* state, MultiminFunction* f, Vector x, double* size);
4153	[CCode (has_target = false, has_typedef = false)]
4154	public delegate int MultiminFIterate (void* state, MultiminFunction* f, Vector x, double* size, double* fval);
4155	[CCode (has_target = false, has_typedef = false)]
4156	public delegate int MultiminFFree (void* state);
4157
4158	[SimpleType]
4159	[CCode (cname="gsl_multimin_function", cheader_filename="gsl/gsl_multimin.h", has_type_id = false)]
4160	public struct MultiminFunction
4161	{
4162		public MultiminF f;
4163		public size_t n;
4164		public void* params;
4165	}
4166
4167	[SimpleType]
4168	[CCode (cname="gsl_multimin_function_fdf", cheader_filename="gsl/gsl_multimin.h", has_type_id = false)]
4169	public struct MultiminFunctionFdf
4170	{
4171		public MultiminF f;
4172		public MultiminDf df;
4173		public MultiminFdf fdf;
4174		public size_t n;
4175		public void* params;
4176	}
4177
4178	[CCode (cname="gsl_multimin_diff", cheader_filename="gsl/gsl_multimin.h")]
4179	public static int multimin_diff (MultiminFunction* f, Vector x, Vector g);
4180
4181	[SimpleType]
4182	[CCode (cname="gsl_multimin_fminimizer_type", cheader_filename="gsl/gsl_multimin.h", has_type_id = false)]
4183	public struct MultiminFminimizerType
4184	{
4185		public unowned string name;
4186		public size_t size;
4187		public MultiminFAlloc alloc;
4188		public MultiminFSet @set;
4189		public MultiminFIterate iterate;
4190		public MultiminFFree free;
4191	}
4192
4193	[Compact]
4194	[CCode (cname="gsl_multimin_fminimizer", cheader_filename="gsl/gsl_multimin.h")]
4195	public class MultiminFminimizer
4196	{
4197		public MultiminFminimizerType* type;
4198		public MultiminFunction* f;
4199		public double fval;
4200		public Vector x;
4201		public double size;
4202		public void* state;
4203
4204		[CCode (cname="gsl_multimin_fminimizer_alloc")]
4205		public MultiminFminimizer (MultiminFminimizerType* T, size_t n);
4206		public int @set (MultiminFunction* f, Vector x, Vector step_size);
4207		public unowned string name ();
4208		public int iterate ();
4209		public double minimum ();
4210	}
4211
4212	[CCode (lower_case_cprefix="gsl_multimin_test_", cheader_filename="gsl/gsl_multimin.h")]
4213	namespace MultiminTest
4214	{
4215		public static int gradient(Vector g, double epsabs);
4216		public static int size (double size, double epsabs);
4217	}
4218
4219	[CCode (has_target = false, has_typedef = false)]
4220	public delegate int MultiminFdfAlloc (void *state, size_t n);
4221	[CCode (has_target = false, has_typedef = false)]
4222	public delegate int MultiminFdfSet (void* state, MultiminFunctionFdf* fdf, Vector x, double* f, Vector gradient, double step_size, double tol);
4223	[CCode (has_target = false, has_typedef = false)]
4224	public delegate int MultiminFdfIterate (void* state, MultiminFunctionFdf* fdf, Vector x, double* f, Vector gradient, Vector dx);
4225	[CCode (has_target = false, has_typedef = false)]
4226	public delegate int MultiminFdfRestart (void* state);
4227	[CCode (has_target = false, has_typedef = false)]
4228	public delegate int MultiminFdfFree (void* state);
4229
4230	[SimpleType]
4231	[CCode (cname="gsl_multimin_fdfminimizer_type", cheader_filename="gsl/gsl_multimin.h", has_type_id = false)]
4232	public struct MultiminFdfminimizerType
4233	{
4234		public unowned string name;
4235		public size_t size;
4236		public MultiminFdfAlloc alloc;
4237		public MultiminFdfSet @set;
4238		public MultiminFdfIterate iterate;
4239		public MultiminFdfRestart restart;
4240		public MultiminFdfFree free;
4241	}
4242
4243	[Compact]
4244	[CCode (cname="gsl_multimin_fdfminimizer", cheader_filename="gsl/gsl_multimin.h")]
4245	public class MultiminFdfminimizer
4246	{
4247		public MultiminFdfminimizerType* type;
4248		public MultiminFunctionFdf* fdf;
4249		public double f;
4250		public Vector x;
4251		public Vector gradient;
4252		public Vector dx;
4253		public void* state;
4254
4255		[CCode (cname="gsl_multimin_fdfminimizer_alloc")]
4256		public MultiminFdfminimizer (MultiminFdfminimizerType* T, size_t n);
4257		public int @set (MultiminFunctionFdf* fdf, Vector x, double step_size, double tol);
4258		public unowned string name ();
4259		public int iterate ();
4260		public int restart ();
4261		public double minimum ();
4262	}
4263
4264	[CCode (lower_case_cprefix="gsl_multimin_fdfminimizer_", cheader_filename="gsl/gsl_multimin.h")]
4265	namespace MultiminFdfminimizerTypes
4266	{
4267		public static MultiminFdfminimizerType* steepest_descent;
4268		public static MultiminFdfminimizerType* conjugate_pr;
4269		public static MultiminFdfminimizerType* conjugate_fr;
4270		public static MultiminFdfminimizerType* vector_bfgs;
4271		public static MultiminFdfminimizerType* vector_bfgs2;
4272	}
4273
4274	[CCode (lower_case_cprefix="gsl_multimin_fminimizer_", cheader_filename="gsl/gsl_multimin.h")]
4275	namespace MultiminFminimizerTypes
4276	{
4277		public static MultiminFminimizerType* nmsimplex;
4278	}
4279
4280
4281	/*
4282	 * Least-Squares Fitting
4283	 */
4284	[CCode (lower_case_cprefix="gsl_fit_", cheader_filename="gsl/gsl_fit.h")]
4285	namespace Fit
4286	{
4287		public static int linear ([CCode (array_length = false)] double[] x, size_t xstride, [CCode (array_length = false)] double[] y, size_t ystride, size_t n, out double c0, out double c1, out double cov00, out double cov01, out double cov11, out double sumsq);
4288		public static int wlinear ([CCode (array_length = false)] double[] x, size_t xstride, [CCode (array_length = false)] double[] w, size_t wstride, [CCode (array_length = false)] double[] y, size_t ystride, size_t n, out double c0, out double c1, out double cov00, out double cov01, out double cov11, out double chisq);
4289		public static int linear_est (double x, double c0, double c1, double cov00, double cov01, double cov11, out double y, out double y_err);
4290		public static int mul ([CCode (array_length = false)] double[] x, size_t xstride, [CCode (array_length = false)] double[] y, size_t ystride, size_t n, out double c1, out double cov11, out double sumsq);
4291		public static int wmul ([CCode (array_length = false)] double[] x, size_t xstride, [CCode (array_length = false)] double[] w, size_t wstride, [CCode (array_length = false)] double[] y, size_t ystride, size_t n, out double c1, out double cov11, out double sumsq);
4292		public static int mul_est (double x, double c1, double cov11, out double y, out double y_err);
4293	}
4294
4295	[Compact]
4296	[CCode (cname="gsl_multifit_linear_workspace", free_function="gsl_multifit_linear_free", cheader_filename="gsl/gsl_multifit.h")]
4297	public class MultifitLinearWorkspace
4298	{
4299		public size_t n;
4300		public size_t p;
4301		public Matrix A;
4302		public Matrix Q;
4303		public Matrix QSI;
4304		public Vector S;
4305		public Vector t;
4306		public Vector xt;
4307		public Vector D;
4308
4309		[CCode (cname="gsl_multifit_linear_alloc")]
4310		public MultifitLinearWorkspace (size_t n, size_t p);
4311	}
4312
4313	[CCode (lower_case_cprefix="gsl_multifit_", cheader_filename="gsl/gsl_multifit.h")]
4314	namespace Multifit
4315	{
4316		public static int linear (Matrix X, Vector y, Vector c, Matrix cov, out double chisq, MultifitLinearWorkspace work);
4317		public static int linear_svd (Matrix X, MultifitLinearWorkspace work);
4318		public static int wlinear (Matrix X, Vector w, Vector y, Vector c, Matrix cov, out double chisq, MultifitLinearWorkspace work);
4319		public static int wlinear_svd (Matrix X, Vector w, Vector y, double tol, out size_t rank, Vector c, Matrix cov, out double chisq, MultifitLinearWorkspace work);
4320		public static int linear_est (Vector x, Vector c, Matrix cov, out double y, out double y_err);
4321		public int linear_residuals (Matrix X, Vector y, Vector c, Vector r);
4322	}
4323
4324
4325	/*
4326	 * Nonlinear Least-Squares Fitting
4327	 */
4328	[CCode (has_target = false, has_typedef = false)]
4329	public delegate int MultifitF (Vector x, void* params, Vector f);
4330	[CCode (has_target = false, has_typedef = false)]
4331	public delegate int MultifitFAlloc (void* state, size_t n, size_t p);
4332	[CCode (has_target = false, has_typedef = false)]
4333	public delegate int MultifitFSet (void* state, MultifitFunction* function, Vector x, Vector f, Vector dx);
4334	[CCode (has_target = false, has_typedef = false)]
4335	public delegate int MultifitFIterate (void* state, MultifitFunction* function, Vector x, Vector f, Vector dx);
4336	[CCode (has_target = false, has_typedef = false)]
4337	public delegate void MultifitFFree (void* state);
4338	[CCode (has_target = false, has_typedef = false)]
4339	public delegate int MultifitDf (Vector x, void* params, Matrix df);
4340	[CCode (has_target = false, has_typedef = false)]
4341	public delegate int MultifitFdf (Vector x, void* params, Vector f, Matrix df);
4342	[CCode (has_target = false, has_typedef = false)]
4343	public delegate int MultifitFdfAlloc (void* state, size_t n, size_t p);
4344	[CCode (has_target = false, has_typedef = false)]
4345	public delegate int MultifitFdfSet (void* state, MultifitFunctionFdf fdf, Vector x, Vector f, Matrix J, Vector dx);
4346	[CCode (has_target = false, has_typedef = false)]
4347	public delegate int MultifitFdfIterate (void* state, MultifitFunctionFdf fdf, Vector x, Vector f, Matrix J, Vector dx);
4348	[CCode (has_target = false, has_typedef = false)]
4349	public delegate void MultifitFdfFree (void* state);
4350
4351	[CCode (lower_case_cprefix="gsl_multifit_", cheader_filename="gsl/gsl_multifit_nlin.h")]
4352	namespace Multifit
4353	{
4354		public static int gradient (Matrix J, Vector f, Vector g);
4355		public static int covar (Matrix J, double epsrel, Matrix covar);
4356	}
4357
4358	[SimpleType]
4359	[CCode (cname="gsl_multifit_function", cheader_filename="gsl/gsl_multifit_nlin.h", has_type_id = false)]
4360	public struct MultifitFunction
4361	{
4362		public MultifitF f;
4363		public size_t n;
4364		public size_t p;
4365		public void* params;
4366	}
4367
4368	[SimpleType]
4369	[CCode (cname="gsl_multifit_fsolver_type", cheader_filename="gsl/gsl_multifit_nlin.h", has_type_id = false)]
4370	public struct MultifitFsolverType
4371	{
4372		public unowned string name;
4373		public size_t size;
4374		public MultifitFAlloc alloc;
4375		public MultifitFSet @set;
4376		public MultifitFIterate iterate;
4377		public MultifitFFree free;
4378	}
4379
4380	[Compact]
4381	[CCode (cname="gsl_multifit_fsolver", cheader_filename="gsl/gsl_multifit_nlin.h")]
4382	public class MultifitFsolver
4383	{
4384		public MultifitFsolverType* type;
4385		public MultifitFunction* function;
4386		public Vector x;
4387		public Vector f;
4388		public Vector dx;
4389		public void* state;
4390
4391		[CCode (cname="gsl_multifit_fsolver_alloc")]
4392		public MultifitFsolver (MultifitFsolverType* T,  size_t n, size_t p);
4393		public int @set (MultifitFunction* f, Vector x);
4394		public int iterate ();
4395		public unowned string name ();
4396		public Vector position ();
4397	}
4398
4399	[SimpleType]
4400	[CCode (cname="gsl_multifit_function_fdf", cheader_filename="gsl/gsl_multifit_nlin.h", has_type_id = false)]
4401	public struct MultifitFunctionFdf
4402	{
4403		public MultifitF f;
4404		public MultifitDf df;
4405		public MultifitFdf fdf;
4406		public size_t n;
4407		public size_t p;
4408		public void* params;
4409	}
4410
4411	[SimpleType]
4412	[CCode (cname="gsl_multifit_fdfsolver_type", cheader_filename="gsl/gsl_multifit_nlin.h", has_type_id = false)]
4413	public struct MultifitFdfsolverType
4414	{
4415		public unowned string name;
4416		public size_t size;
4417		public MultifitFdfAlloc alloc;
4418		public MultifitFdfSet @set;
4419		public MultifitFdfIterate iterate;
4420		public MultifitFdfFree free;
4421	}
4422
4423	[Compact]
4424	[CCode (cname="gsl_multifit_fdfsolver", cheader_filename="gsl/gsl_multifit_nlin.h")]
4425	public class MultifitFdfsolver
4426	{
4427		public MultifitFdfsolverType* type;
4428		public MultifitFunctionFdf* fdf;
4429		public Vector x;
4430		public Vector f;
4431		public Vector dx;
4432		public Vector g;
4433		public Vector sqrt_wts;
4434		public size_t niter;
4435		public void* state;
4436
4437		[CCode (cname="gsl_multifit_fdfsolver_alloc")]
4438		public MultifitFdfsolver (MultifitFdfsolverType* T, size_t n, size_t p);
4439		public int @set (MultifitFunctionFdf* fdf, Vector x);
4440		public int iterate ();
4441		public unowned string name ();
4442		public Vector position ();
4443	}
4444
4445	[CCode (lower_case_cprefix="gsl_multifit_test_", cheader_filename="gsl/gsl_multifit_nlin.h")]
4446	namespace MultifitTest
4447	{
4448		public static int delta (Vector dx, Vector x, double epsabs, double epsrel);
4449		public static int gradient (Vector g, double epsabs);
4450	}
4451
4452	[CCode (lower_case_cprefix="gsl_multifit_fdfsolver_", cheader_filename="gsl/gsl_multifit_nlin.h")]
4453	namespace MultifitFdfsolverTypes
4454	{
4455		public static MultifitFdfsolverType* lmder;
4456		public static MultifitFdfsolverType* lmsder;
4457	}
4458
4459
4460	/*
4461	 * Basis Splines
4462	 */
4463	[Compact]
4464	[CCode (cname="gsl_bspline_workspace", cprefix="gsl_bspline_", cheader_filename="gsl/gsl_bspline.h")]
4465	public class BsplineWorkspace
4466	{
4467		public size_t k;
4468		public size_t km1;
4469		public size_t l;
4470		public size_t nbreak;
4471		public size_t n;
4472		public Vector knots;
4473		public Vector deltal;
4474		public Vector deltar;
4475		public Vector B;
4476
4477		[CCode (cname="gsl_bspline_alloc")]
4478		public BsplineWorkspace (size_t k, size_t nbreak);
4479		public size_t ncoeffs ();
4480		public size_t order ();
4481		[CCode (instance_pos=-1)]
4482		public double breakpoint (size_t i);
4483		[CCode (instance_pos=-1)]
4484		public int knots_uniform (double a, double b);
4485		[CCode (instance_pos=-1)]
4486		public int eval (double x, Vector B);
4487	}
4488}
4489
4490