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

Reply via email to