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