Changeset: 0d1343df9283 for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=0d1343df9283 Modified Files: sql/backends/monet5/gsl/Tests/gsl01.stable.err sql/backends/monet5/gsl/Tests/gsl01.stable.out sql/backends/monet5/gsl/gsl.c Branch: default Log Message:
apply patch from niels to gsl bat -> bat function diffs (184 lines): 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 @@ -28,42 +28,33 @@ stderr of test 'gsl01` in directory 'sql # 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 +MAPI = (monetdb) /var/tmp/mtest-28608/.s.monetdb.36472 QUERY = SELECT gsl.chi2prob(20.0, NULL); ERROR = !Wrong value for datapoints -MAPI = (monetdb) /var/tmp/mtest-16688/.s.monetdb.34082 +MAPI = (monetdb) /var/tmp/mtest-28608/.s.monetdb.36472 QUERY = SELECT gsl.chi2prob(NULL, 5.0); ERROR = !Wrong value for chi2 -MAPI = (monetdb) /var/tmp/mtest-16688/.s.monetdb.34082 +MAPI = (monetdb) /var/tmp/mtest-28608/.s.monetdb.36472 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 +MAPI = (monetdb) /var/tmp/mtest-28608/.s.monetdb.36472 QUERY = SELECT chi2prob(a, b) FROM chi2; ERROR = !Wrong value for datapoints -MAPI = (monetdb) /var/tmp/mtest-16688/.s.monetdb.34082 +MAPI = (monetdb) /var/tmp/mtest-28608/.s.monetdb.36472 QUERY = SELECT chi2prob(19.0, b) FROM chi2; ERROR = !Wrong value for datapoints -MAPI = (monetdb) /var/tmp/mtest-16688/.s.monetdb.34082 +MAPI = (monetdb) /var/tmp/mtest-28608/.s.monetdb.36472 QUERY = SELECT chi2prob(a, b) FROM chi2; ERROR = !Wrong value for chi2 -MAPI = (monetdb) /var/tmp/mtest-16688/.s.monetdb.34082 +MAPI = (monetdb) /var/tmp/mtest-28608/.s.monetdb.36472 QUERY = SELECT chi2prob(a, 6.0) FROM chi2; ERROR = !Wrong value for chi2 -MAPI = (monetdb) /var/tmp/mtest-16688/.s.monetdb.34082 +MAPI = (monetdb) /var/tmp/mtest-28608/.s.monetdb.36472 QUERY = SELECT chi2prob(a, b) FROM chi2; ERROR = !Wrong value for chi2 -MAPI = (monetdb) /var/tmp/mtest-16688/.s.monetdb.34082 +MAPI = (monetdb) /var/tmp/mtest-28608/.s.monetdb.36472 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:57:57 > # 15:57:57 > "Done." 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,12 @@ Ready. % double # type % 24 # length [ 0.001249730563 ] +#SELECT gsl.chi2prob(20.0, 1.0); +% .L # table_name +% chi2prob_single_value # name +% double # type +% 24 # length +[ 7.744216431e-06 ] #CREATE TABLE chi2(a double, b double); #INSERT INTO chi2 VALUES (20.0, 5.0), # (22.0, 4.0), @@ -141,6 +147,15 @@ Ready. # (20.0, 6.0), # (20.0, 1.0); [ 4 ] +#SELECT chi2prob(a, b) FROM chi2; +% sys.L # table_name +% chi2prob_a # name +% double # type +% 24 # length +[ 0.001249730563 ] +[ 0.0002004204095 ] +[ 0.002769395716 ] +[ 7.744216431e-06 ] #SELECT chi2prob(a, 6.0) FROM chi2; % sys.L # table_name % chi2prob_a # name @@ -150,6 +165,15 @@ Ready. [ 0.001210873307 ] [ 0.002769395716 ] [ 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 ] +[ 1.307184537e-05 ] # 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 @@ -53,7 +53,7 @@ gsl_chisqprob(double * retval, double ch *retval = dbl_nil; if ((chi2 == dbl_nil) || (chi2 < 0)) throw(MAL, "gsl.chi2prob", "Wrong value for chi2"); - if ((datapoints == dbl_nil) || (datapoints <= 1)) + if ((datapoints == dbl_nil) || (datapoints < 0)) throw(MAL, "gsl.chi2prob", "Wrong value for datapoints"); *retval = gsl_cdf_chisq_Q(chi2, datapoints); return MAL_SUCCEED; @@ -71,7 +71,7 @@ gsl_bat_chisqprob_cst(bat * retval, bat if (datapoints == dbl_nil) { throw(MAL, "GSLbat_chisqprob_cst", "Parameter datapoints should not be nil"); } - if (datapoints <= 1) + if (datapoints < 0) throw(MAL, "gsl.chi2prob", "Wrong value for datapoints"); if ((b = BATdescriptor(chi2)) == NULL) { @@ -124,7 +124,7 @@ gsl_cst_chisqprob_bat(bat * retval, doub BATloop(b,p,q) { dbl datapoints = *(dbl*)BUNtail(bi,p); - if ((datapoints == dbl_nil) || (datapoints <= 1)) + if ((datapoints == dbl_nil) || (datapoints < 0)) throw(MAL, "gsl.chi2prob", "Wrong value for datapoints"); r = gsl_cdf_chisq_Q(chi2, datapoints); BUNins(bn, BUNhead(bi,p), &r, FALSE); @@ -138,10 +138,9 @@ static str gsl_bat_chisqprob_bat(bat * retval, bat chi2, bat datapoints) { BAT *b, *c, *bn; - BATiter bi, ci; - BUN p,q; - dbl r; + dbl r, *chi2p, *datapointsp; char *msg = NULL; + size_t cnt = 0, i; if( (b = BATdescriptor(chi2)) == NULL) { throw(MAL, "chisqprob", "Cannot access descriptor chi2"); @@ -149,27 +148,26 @@ gsl_bat_chisqprob_bat(bat * retval, bat if( (c = BATdescriptor(datapoints)) == NULL) { throw(MAL, "chisqprob", "Cannot access descriptor datapoints"); } - bi = bat_iterator(b); - ci = bat_iterator(c); - bn = BATnew(b->htype, TYPE_dbl, BATcount(b)); + assert(b->htype == TYPE_void); + bn = BATnew(TYPE_void, TYPE_dbl, cnt = BATcount(b)); if( bn == NULL) { BBPreleaseref(b->batCacheid); throw(MAL, "gsl.chisqprob", MAL_MALLOC_FAIL); } + chi2p = (dbl*)Tloc(b, 0); + datapointsp = (dbl*)Tloc(c, 0); BATseqbase(bn, b->hseqbase); - BATloop(b,p,q) { - dbl chi2 = *(dbl*)BUNtail(bi,p); - dbl datapoints = *(dbl*)BUNtail(ci,p); - - if ((chi2 == dbl_nil) || (chi2 < 0)) + for(i = 0; i<cnt; i++) { + if ((chi2p[i] == dbl_nil) || (chi2p[i] < 0)) throw(MAL, "gsl.chi2prob", "Wrong value for chi2"); - if ((datapoints == dbl_nil) || (datapoints <= 1)) + if ((datapointsp[i] == dbl_nil) || (datapointsp[i] < 0)) throw(MAL, "gsl.chi2prob", "Wrong value for datapoints"); - r = gsl_cdf_chisq_Q(chi2, datapoints); - BUNins(bn, BUNhead(bi,p), &r, FALSE); + r = gsl_cdf_chisq_Q(chi2p[i], datapointsp[i]); + BUNappend(bn, &r, FALSE); } BBPkeepref( *retval = bn->batCacheid); BBPunfix(b->batCacheid); + BBPunfix(c->batCacheid); return msg; } _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list