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

Reply via email to