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
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list