Changeset: e58a61ddb5c2 for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=e58a61ddb5c2 Modified Files: sql/backends/monet5/gsl/73_gsl.mal sql/backends/monet5/gsl/Tests/gsl01.sql sql/backends/monet5/gsl/Tests/gsl01.stable.err sql/backends/monet5/gsl/Tests/gsl01.stable.out sql/backends/monet5/gsl/gsl.c sql/backends/monet5/gsl/gsl.mal Branch: default Log Message:
add bat aware versions of gsl statistical function diffs (truncated from 426 to 300 lines): diff --git a/sql/backends/monet5/gsl/73_gsl.mal b/sql/backends/monet5/gsl/73_gsl.mal --- a/sql/backends/monet5/gsl/73_gsl.mal +++ b/sql/backends/monet5/gsl/73_gsl.mal @@ -16,3 +16,4 @@ # All Rights Reserved. include gsl; +include batgsl; diff --git a/sql/backends/monet5/gsl/Tests/gsl01.sql b/sql/backends/monet5/gsl/Tests/gsl01.sql --- a/sql/backends/monet5/gsl/Tests/gsl01.sql +++ b/sql/backends/monet5/gsl/Tests/gsl01.sql @@ -1,1 +1,68 @@ -SELECT gsl.chi2prob(20.0,5.0); +SELECT gsl.chi2prob(20.0, 5.0); + +SELECT gsl.chi2prob(20.0, NULL); + +SELECT gsl.chi2prob(NULL, 5.0); + +SELECT gsl.chi2prob(-1, 5.0); + +SELECT gsl.chi2prob(20.0, 1.0); + +CREATE TABLE chi2(a double, b double); + +INSERT INTO chi2 VALUES (20.0, 5.0), + (22.0, 4.0), + (20.0, 6.0); + +SELECT chi2prob(a, b) FROM chi2; + +SELECT chi2prob(a, 6.0) FROM chi2; + +SELECT chi2prob(19.0, b) FROM chi2; + +INSERT INTO chi2 VALUES (20.0, NULL); + +SELECT chi2prob(a, b) FROM chi2; + +SELECT chi2prob(a, 6.0) FROM chi2; + +SELECT chi2prob(19.0, b) FROM chi2; + +DELETE FROM chi2; + +INSERT INTO chi2 VALUES (20.0, 5.0), + (22.0, 4.0), + (20.0, 6.0), + (NULL, 5.0); + +SELECT chi2prob(a, b) FROM chi2; + +SELECT chi2prob(a, 6.0) FROM chi2; + +SELECT chi2prob(19.0, b) FROM chi2; + +DELETE FROM chi2; + +INSERT INTO chi2 VALUES (20.0, 5.0), + (22.0, 4.0), + (20.0, 6.0), + (-1, 5.0); + +SELECT chi2prob(a, b) FROM chi2; + +SELECT chi2prob(a, 6.0) FROM chi2; + +SELECT chi2prob(19.0, b) FROM chi2; + +DELETE FROM chi2; + +INSERT INTO chi2 VALUES (20.0, 5.0), + (22.0, 4.0), + (20.0, 6.0), + (20.0, 1.0); + +SELECT chi2prob(a, b) FROM chi2; + +SELECT chi2prob(a, 6.0) FROM chi2; + +SELECT chi2prob(19.0, b) FROM chi2; diff --git a/sql/backends/monet5/gsl/Tests/gsl01.stable.err b/sql/backends/monet5/gsl/Tests/gsl01.stable.err --- a/sql/backends/monet5/gsl/Tests/gsl01.stable.err +++ b/sql/backends/monet5/gsl/Tests/gsl01.stable.err @@ -24,12 +24,48 @@ stderr of test 'gsl01` in directory 'sql # cmdline opt gdk_dbpath = /export/scratch2/rijke/monetdb/default/var/MonetDB/mTests_sql_backends_monet5_gsl # cmdline opt mal_listing = 0 -# 15:55:27 > -# 15:55:27 > "mclient" "-lsql" "-ftest" "-Eutf-8" "-i" "-e" "--host=/var/tmp/mtest-19131" "--port=36073" -# 15:55:27 > +# 15:57:56 > +# 15:57:56 > "mclient" "-lsql" "-ftest" "-Eutf-8" "-i" "-e" "--host=/var/tmp/mtest-16688" "--port=34082" +# 15:57:56 > +MAPI = (monetdb) /var/tmp/mtest-16688/.s.monetdb.34082 +QUERY = SELECT gsl.chi2prob(20.0, NULL); +ERROR = !Wrong value for datapoints +MAPI = (monetdb) /var/tmp/mtest-16688/.s.monetdb.34082 +QUERY = SELECT gsl.chi2prob(NULL, 5.0); +ERROR = !Wrong value for chi2 +MAPI = (monetdb) /var/tmp/mtest-16688/.s.monetdb.34082 +QUERY = SELECT gsl.chi2prob(-1, 5.0); +ERROR = !Wrong value for chi2 +MAPI = (monetdb) /var/tmp/mtest-16688/.s.monetdb.34082 +QUERY = SELECT gsl.chi2prob(20.0, 1.0); +ERROR = !Wrong value for datapoints +MAPI = (monetdb) /var/tmp/mtest-16688/.s.monetdb.34082 +QUERY = SELECT chi2prob(a, b) FROM chi2; +ERROR = !Wrong value for datapoints +MAPI = (monetdb) /var/tmp/mtest-16688/.s.monetdb.34082 +QUERY = SELECT chi2prob(19.0, b) FROM chi2; +ERROR = !Wrong value for datapoints +MAPI = (monetdb) /var/tmp/mtest-16688/.s.monetdb.34082 +QUERY = SELECT chi2prob(a, b) FROM chi2; +ERROR = !Wrong value for chi2 +MAPI = (monetdb) /var/tmp/mtest-16688/.s.monetdb.34082 +QUERY = SELECT chi2prob(a, 6.0) FROM chi2; +ERROR = !Wrong value for chi2 +MAPI = (monetdb) /var/tmp/mtest-16688/.s.monetdb.34082 +QUERY = SELECT chi2prob(a, b) FROM chi2; +ERROR = !Wrong value for chi2 +MAPI = (monetdb) /var/tmp/mtest-16688/.s.monetdb.34082 +QUERY = SELECT chi2prob(a, 6.0) FROM chi2; +ERROR = !Wrong value for chi2 +MAPI = (monetdb) /var/tmp/mtest-16688/.s.monetdb.34082 +QUERY = SELECT chi2prob(a, b) FROM chi2; +ERROR = !Wrong value for datapoints +MAPI = (monetdb) /var/tmp/mtest-16688/.s.monetdb.34082 +QUERY = SELECT chi2prob(19.0, b) FROM chi2; +ERROR = !Wrong value for datapoints -# 15:55:27 > -# 15:55:27 > "Done." -# 15:55:27 > +# 15:57:57 > +# 15:57:57 > "Done." +# 15:57:57 > diff --git a/sql/backends/monet5/gsl/Tests/gsl01.stable.out b/sql/backends/monet5/gsl/Tests/gsl01.stable.out --- a/sql/backends/monet5/gsl/Tests/gsl01.stable.out +++ b/sql/backends/monet5/gsl/Tests/gsl01.stable.out @@ -60,6 +60,96 @@ Ready. % double # type % 24 # length [ 0.001249730563 ] +#CREATE TABLE chi2(a double, b double); +#INSERT INTO chi2 VALUES (20.0, 5.0), +# (22.0, 4.0), +# (20.0, NULL), +# (NULL, 5.0), +# (20.0, 6.0); +[ 3 ] +#SELECT chi2prob(a, b) FROM chi2; +% sys.L # table_name +% chi2prob_a # name +% double # type +% 24 # length +[ 0.001249730563 ] +[ 0.0002004204095 ] +[ 0.002769395716 ] +#SELECT chi2prob(a, 6.0) FROM chi2; +% sys.L # table_name +% chi2prob_a # name +% double # type +% 24 # length +[ 0.002769395716 ] +[ 0.001210873307 ] +[ 0.002769395716 ] +#SELECT chi2prob(19.0, b) FROM chi2; +% .L # table_name +% chi2prob_single_value # name +% double # type +% 24 # length +[ 0.001922136821 ] +[ 0.0007859442138 ] +[ 0.004163633038 ] +#INSERT INTO chi2 VALUES (20.0, NULL); +[ 1 ] +#SELECT chi2prob(a, 6.0) FROM chi2; +% sys.L # table_name +% chi2prob_a # name +% double # type +% 24 # length +[ 0.002769395716 ] +[ 0.001210873307 ] +[ 0.002769395716 ] +[ 0.002769395716 ] +#DELETE FROM chi2; +[ 4 ] +#INSERT INTO chi2 VALUES (20.0, 5.0), +# (22.0, 4.0), +# (20.0, 6.0), +# (NULL, 5.0); +[ 4 ] +#SELECT chi2prob(19.0, b) FROM chi2; +% .L # table_name +% chi2prob_single_value # name +% double # type +% 24 # length +[ 0.001922136821 ] +[ 0.0007859442138 ] +[ 0.004163633038 ] +[ 0.001922136821 ] +#DELETE FROM chi2; +[ 4 ] +#INSERT INTO chi2 VALUES (20.0, 5.0), +# (22.0, 4.0), +# (20.0, 6.0), +# (-1, 5.0); +[ 4 ] +#SELECT chi2prob(19.0, b) FROM chi2; +% .L # table_name +% chi2prob_single_value # name +% double # type +% 24 # length +[ 0.001922136821 ] +[ 0.0007859442138 ] +[ 0.004163633038 ] +[ 0.001922136821 ] +#DELETE FROM chi2; +[ 4 ] +#INSERT INTO chi2 VALUES (20.0, 5.0), +# (22.0, 4.0), +# (20.0, 6.0), +# (20.0, 1.0); +[ 4 ] +#SELECT chi2prob(a, 6.0) FROM chi2; +% sys.L # table_name +% chi2prob_a # name +% double # type +% 24 # length +[ 0.002769395716 ] +[ 0.001210873307 ] +[ 0.002769395716 ] +[ 0.002769395716 ] # 15:55:27 > # 15:55:27 > "Done." diff --git a/sql/backends/monet5/gsl/gsl.c b/sql/backends/monet5/gsl/gsl.c --- a/sql/backends/monet5/gsl/gsl.c +++ b/sql/backends/monet5/gsl/gsl.c @@ -43,18 +43,134 @@ #endif gsl_export str GSLchisqProb(double *retval, double * chi2, double * datapoints); +gsl_export str GSLbat_chisqProb_cst(bat *retval, bat * chi2, double * datapoints); +gsl_export str GSLcst_chisqProb_bat(bat *retval, double * chi2, bat * datapoints); +gsl_export str GSLbat_chisqProb_bat(bat *retval, bat * chi2, bat * datapoints); static str gsl_chisqprob(double * retval, double chi2, double datapoints) { - if (chi2 < 0) + *retval = dbl_nil; + if ((chi2 == dbl_nil) || (chi2 < 0)) throw(MAL, "gsl.chi2prob", "Wrong value for chi2"); + if ((datapoints == dbl_nil) || (datapoints <= 1)) + throw(MAL, "gsl.chi2prob", "Wrong value for datapoints"); + *retval = gsl_cdf_chisq_Q(chi2, datapoints); + return MAL_SUCCEED; +} + +static str +gsl_bat_chisqprob_cst(bat * retval, bat chi2, double datapoints) +{ + BAT *b, *bn; + BATiter bi; + BUN p,q; + dbl r; + char *msg = NULL; + + if (datapoints == dbl_nil) { + throw(MAL, "GSLbat_chisqprob_cst", "Parameter datapoints should not be nil"); + } if (datapoints <= 1) throw(MAL, "gsl.chi2prob", "Wrong value for datapoints"); - *retval = gsl_cdf_chisq_Q(chi2, datapoints); + if ((b = BATdescriptor(chi2)) == NULL) { + throw(MAL, "chisqprob", "Cannot access descriptor"); + } + bi = bat_iterator(b); + bn = BATnew(b->htype, TYPE_dbl, BATcount(b)); + if (bn == NULL){ + BBPreleaseref(b->batCacheid); + throw(MAL, "gsl.chisqprob", MAL_MALLOC_FAIL); + } + BATseqbase(bn, b->hseqbase); + BATloop(b,p,q) { + dbl d = *(dbl*)BUNtail(bi,p); + if ((d == dbl_nil) || (d < 0)) + throw(MAL, "gsl.chi2prob", "Wrong value for chi2"); + r = gsl_cdf_chisq_Q(d, datapoints); + BUNins(bn, BUNhead(bi,p), &r, FALSE); + } + *retval = bn->batCacheid; + BBPkeepref(bn->batCacheid); + BBPunfix(b->batCacheid); + return msg; _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list