Changeset: 9ca75bb19142 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/9ca75bb19142
Modified Files:
        clients/Tests/MAL-signatures.stable.out
        clients/Tests/MAL-signatures.stable.out.int128
        clients/Tests/exports.stable.out
        gdk/gdk_aggr.c
        gdk/gdk_calc.h
        monetdb5/modules/kernel/algebra.c
Branch: pushcands
Log Message:

aggr.{corr,covariance,covariancep} now have optional candidate lists.


diffs (truncated from 487 to 300 lines):

diff --git a/clients/Tests/MAL-signatures.stable.out 
b/clients/Tests/MAL-signatures.stable.out
--- a/clients/Tests/MAL-signatures.stable.out
+++ b/clients/Tests/MAL-signatures.stable.out
@@ -110,6 +110,7 @@ stdout of test 'MAL-signatures` in direc
 [ "aggr",      "corr", "command aggr.corr(X_0:bat[:int], X_1:bat[:int], 
X_2:bat[:oid], X_3:bat[:any_1]):bat[:dbl] ",   "AGGRcorr;",    ""      ]
 [ "aggr",      "corr", "command aggr.corr(X_0:bat[:lng], X_1:bat[:lng], 
X_2:bat[:oid], X_3:bat[:any_1]):bat[:dbl] ",   "AGGRcorr;",    ""      ]
 [ "aggr",      "corr", "command aggr.corr(X_0:bat[:sht], X_1:bat[:sht], 
X_2:bat[:oid], X_3:bat[:any_1]):bat[:dbl] ",   "AGGRcorr;",    ""      ]
+[ "aggr",      "corr", "command aggr.corr(X_0:bat[:any_2], X_1:bat[:any_2], 
X_2:bat[:oid], X_3:bat[:oid]):dbl ",       "ALGcorr2;",    ""      ]
 [ "aggr",      "corr", "command aggr.corr(X_0:bat[:any_2], 
X_1:bat[:any_2]):dbl ",     "ALGcorr;",     ""      ]
 [ "aggr",      "count",        "command aggr.count(X_0:bat[:any_1], 
X_1:bat[:oid], X_2:bat[:any_2], X_3:bit):bat[:lng] ",      "AGGRcount3;",  ""   
   ]
 [ "aggr",      "count",        "command aggr.count(X_0:bat[:any_1], 
X_1:bat[:oid], X_2:bat[:any_2]):bat[:lng] ",       "AGGRcount3nils;",      ""   
   ]
@@ -126,6 +127,7 @@ stdout of test 'MAL-signatures` in direc
 [ "aggr",      "covariance",   "command aggr.covariance(X_0:bat[:int], 
X_1:bat[:int], X_2:bat[:oid], X_3:bat[:any_1]):bat[:dbl] ",     
"AGGRcovariance;",      ""      ]
 [ "aggr",      "covariance",   "command aggr.covariance(X_0:bat[:lng], 
X_1:bat[:lng], X_2:bat[:oid], X_3:bat[:any_1]):bat[:dbl] ",     
"AGGRcovariance;",      ""      ]
 [ "aggr",      "covariance",   "command aggr.covariance(X_0:bat[:sht], 
X_1:bat[:sht], X_2:bat[:oid], X_3:bat[:any_1]):bat[:dbl] ",     
"AGGRcovariance;",      ""      ]
+[ "aggr",      "covariance",   "command aggr.covariance(X_0:bat[:any_2], 
X_1:bat[:any_2], X_2:bat[:oid], X_3:bat[:oid]):dbl ", "ALGcovariance2;",      
""      ]
 [ "aggr",      "covariance",   "command aggr.covariance(X_0:bat[:any_2], 
X_1:bat[:any_2]):dbl ",       "ALGcovariance;",       ""      ]
 [ "aggr",      "covariancep",  "command aggr.covariancep(X_0:bat[:bte], 
X_1:bat[:bte], X_2:bat[:oid], X_3:bat[:any_1]):bat[:dbl] ",    
"AGGRcovariancep;",     ""      ]
 [ "aggr",      "covariancep",  "command aggr.covariancep(X_0:bat[:dbl], 
X_1:bat[:dbl], X_2:bat[:oid], X_3:bat[:any_1]):bat[:dbl] ",    
"AGGRcovariancep;",     ""      ]
@@ -133,6 +135,7 @@ stdout of test 'MAL-signatures` in direc
 [ "aggr",      "covariancep",  "command aggr.covariancep(X_0:bat[:int], 
X_1:bat[:int], X_2:bat[:oid], X_3:bat[:any_1]):bat[:dbl] ",    
"AGGRcovariancep;",     ""      ]
 [ "aggr",      "covariancep",  "command aggr.covariancep(X_0:bat[:lng], 
X_1:bat[:lng], X_2:bat[:oid], X_3:bat[:any_1]):bat[:dbl] ",    
"AGGRcovariancep;",     ""      ]
 [ "aggr",      "covariancep",  "command aggr.covariancep(X_0:bat[:sht], 
X_1:bat[:sht], X_2:bat[:oid], X_3:bat[:any_1]):bat[:dbl] ",    
"AGGRcovariancep;",     ""      ]
+[ "aggr",      "covariancep",  "command aggr.covariancep(X_0:bat[:any_2], 
X_1:bat[:any_2], X_2:bat[:oid], X_3:bat[:oid]):dbl ",        
"ALGcovariancep2;",     ""      ]
 [ "aggr",      "covariancep",  "command aggr.covariancep(X_0:bat[:any_2], 
X_1:bat[:any_2]):dbl ",      "ALGcovariancep;",      ""      ]
 [ "aggr",      "exist",        "command aggr.exist(X_0:bat[:any_2], 
X_1:any_1):bit ",  "ALGexist;",    ""      ]
 [ "aggr",      "exist",        "pattern aggr.exist(X_0:any_1):bit ",   
"SQLexist;",    ""      ]
@@ -329,12 +332,12 @@ stdout of test 'MAL-signatures` in direc
 [ "aggr",      "subcorr",      "command aggr.subcorr(X_0:bat[:int], 
X_1:bat[:int], X_2:bat[:oid], X_3:bat[:any_1], X_4:bit, X_5:bit):bat[:dbl] ",   
   "AGGRsubcorr;", ""      ]
 [ "aggr",      "subcorr",      "command aggr.subcorr(X_0:bat[:lng], 
X_1:bat[:lng], X_2:bat[:oid], X_3:bat[:any_1], X_4:bit, X_5:bit):bat[:dbl] ",   
   "AGGRsubcorr;", ""      ]
 [ "aggr",      "subcorr",      "command aggr.subcorr(X_0:bat[:sht], 
X_1:bat[:sht], X_2:bat[:oid], X_3:bat[:any_1], X_4:bit, X_5:bit):bat[:dbl] ",   
   "AGGRsubcorr;", ""      ]
-[ "aggr",      "subcorr",      "command aggr.subcorr(X_0:bat[:bte], 
X_1:bat[:bte], X_2:bat[:oid], X_3:bat[:any_1], X_4:bat[:oid], X_5:bit, 
X_6:bit):bat[:dbl] ",       "AGGRsubcorrcand;",     ""      ]
-[ "aggr",      "subcorr",      "command aggr.subcorr(X_0:bat[:dbl], 
X_1:bat[:dbl], X_2:bat[:oid], X_3:bat[:any_1], X_4:bat[:oid], X_5:bit, 
X_6:bit):bat[:dbl] ",       "AGGRsubcorrcand;",     ""      ]
-[ "aggr",      "subcorr",      "command aggr.subcorr(X_0:bat[:flt], 
X_1:bat[:flt], X_2:bat[:oid], X_3:bat[:any_1], X_4:bat[:oid], X_5:bit, 
X_6:bit):bat[:dbl] ",       "AGGRsubcorrcand;",     ""      ]
-[ "aggr",      "subcorr",      "command aggr.subcorr(X_0:bat[:int], 
X_1:bat[:int], X_2:bat[:oid], X_3:bat[:any_1], X_4:bat[:oid], X_5:bit, 
X_6:bit):bat[:dbl] ",       "AGGRsubcorrcand;",     ""      ]
-[ "aggr",      "subcorr",      "command aggr.subcorr(X_0:bat[:lng], 
X_1:bat[:lng], X_2:bat[:oid], X_3:bat[:any_1], X_4:bat[:oid], X_5:bit, 
X_6:bit):bat[:dbl] ",       "AGGRsubcorrcand;",     ""      ]
-[ "aggr",      "subcorr",      "command aggr.subcorr(X_0:bat[:sht], 
X_1:bat[:sht], X_2:bat[:oid], X_3:bat[:any_1], X_4:bat[:oid], X_5:bit, 
X_6:bit):bat[:dbl] ",       "AGGRsubcorrcand;",     ""      ]
+[ "aggr",      "subcorr",      "command aggr.subcorr(X_0:bat[:bte], 
X_1:bat[:bte], X_2:bat[:oid], X_3:bat[:any_1], X_4:bat[:oid], X_5:bat[:oid], 
X_6:bit, X_7:bit):bat[:dbl] ",        "AGGRsubcorrcand;",     ""      ]
+[ "aggr",      "subcorr",      "command aggr.subcorr(X_0:bat[:dbl], 
X_1:bat[:dbl], X_2:bat[:oid], X_3:bat[:any_1], X_4:bat[:oid], X_5:bat[:oid], 
X_6:bit, X_7:bit):bat[:dbl] ",        "AGGRsubcorrcand;",     ""      ]
+[ "aggr",      "subcorr",      "command aggr.subcorr(X_0:bat[:flt], 
X_1:bat[:flt], X_2:bat[:oid], X_3:bat[:any_1], X_4:bat[:oid], X_5:bat[:oid], 
X_6:bit, X_7:bit):bat[:dbl] ",        "AGGRsubcorrcand;",     ""      ]
+[ "aggr",      "subcorr",      "command aggr.subcorr(X_0:bat[:int], 
X_1:bat[:int], X_2:bat[:oid], X_3:bat[:any_1], X_4:bat[:oid], X_5:bat[:oid], 
X_6:bit, X_7:bit):bat[:dbl] ",        "AGGRsubcorrcand;",     ""      ]
+[ "aggr",      "subcorr",      "command aggr.subcorr(X_0:bat[:lng], 
X_1:bat[:lng], X_2:bat[:oid], X_3:bat[:any_1], X_4:bat[:oid], X_5:bat[:oid], 
X_6:bit, X_7:bit):bat[:dbl] ",        "AGGRsubcorrcand;",     ""      ]
+[ "aggr",      "subcorr",      "command aggr.subcorr(X_0:bat[:sht], 
X_1:bat[:sht], X_2:bat[:oid], X_3:bat[:any_1], X_4:bat[:oid], X_5:bat[:oid], 
X_6:bit, X_7:bit):bat[:dbl] ",        "AGGRsubcorrcand;",     ""      ]
 [ "aggr",      "subcount",     "command aggr.subcount(X_0:bat[:any_1], 
X_1:bat[:oid], X_2:bat[:any_2], X_3:bit):bat[:lng] ",   "AGGRsubcount;",        
""      ]
 [ "aggr",      "subcount",     "command aggr.subcount(X_0:bat[:any_1], 
X_1:bat[:oid], X_2:bat[:any_2], X_3:bat[:oid], X_4:bit):bat[:lng] ",    
"AGGRsubcountcand;",    ""      ]
 [ "aggr",      "subcovariance",        "command 
aggr.subcovariance(X_0:bat[:bte], X_1:bat[:bte], X_2:bat[:oid], 
X_3:bat[:any_1], X_4:bit, X_5:bit):bat[:dbl] ",        "AGGRsubcovariance;",   
""      ]
@@ -343,24 +346,24 @@ stdout of test 'MAL-signatures` in direc
 [ "aggr",      "subcovariance",        "command 
aggr.subcovariance(X_0:bat[:int], X_1:bat[:int], X_2:bat[:oid], 
X_3:bat[:any_1], X_4:bit, X_5:bit):bat[:dbl] ",        "AGGRsubcovariance;",   
""      ]
 [ "aggr",      "subcovariance",        "command 
aggr.subcovariance(X_0:bat[:lng], X_1:bat[:lng], X_2:bat[:oid], 
X_3:bat[:any_1], X_4:bit, X_5:bit):bat[:dbl] ",        "AGGRsubcovariance;",   
""      ]
 [ "aggr",      "subcovariance",        "command 
aggr.subcovariance(X_0:bat[:sht], X_1:bat[:sht], X_2:bat[:oid], 
X_3:bat[:any_1], X_4:bit, X_5:bit):bat[:dbl] ",        "AGGRsubcovariance;",   
""      ]
-[ "aggr",      "subcovariance",        "command 
aggr.subcovariance(X_0:bat[:bte], X_1:bat[:bte], X_2:bat[:oid], 
X_3:bat[:any_1], X_4:bat[:oid], X_5:bit, X_6:bit):bat[:dbl] ", 
"AGGRsubcovariancecand;",       ""      ]
-[ "aggr",      "subcovariance",        "command 
aggr.subcovariance(X_0:bat[:dbl], X_1:bat[:dbl], X_2:bat[:oid], 
X_3:bat[:any_1], X_4:bat[:oid], X_5:bit, X_6:bit):bat[:dbl] ", 
"AGGRsubcovariancecand;",       ""      ]
-[ "aggr",      "subcovariance",        "command 
aggr.subcovariance(X_0:bat[:flt], X_1:bat[:flt], X_2:bat[:oid], 
X_3:bat[:any_1], X_4:bat[:oid], X_5:bit, X_6:bit):bat[:dbl] ", 
"AGGRsubcovariancecand;",       ""      ]
-[ "aggr",      "subcovariance",        "command 
aggr.subcovariance(X_0:bat[:int], X_1:bat[:int], X_2:bat[:oid], 
X_3:bat[:any_1], X_4:bat[:oid], X_5:bit, X_6:bit):bat[:dbl] ", 
"AGGRsubcovariancecand;",       ""      ]
-[ "aggr",      "subcovariance",        "command 
aggr.subcovariance(X_0:bat[:lng], X_1:bat[:lng], X_2:bat[:oid], 
X_3:bat[:any_1], X_4:bat[:oid], X_5:bit, X_6:bit):bat[:dbl] ", 
"AGGRsubcovariancecand;",       ""      ]
-[ "aggr",      "subcovariance",        "command 
aggr.subcovariance(X_0:bat[:sht], X_1:bat[:sht], X_2:bat[:oid], 
X_3:bat[:any_1], X_4:bat[:oid], X_5:bit, X_6:bit):bat[:dbl] ", 
"AGGRsubcovariancecand;",       ""      ]
+[ "aggr",      "subcovariance",        "command 
aggr.subcovariance(X_0:bat[:bte], X_1:bat[:bte], X_2:bat[:oid], 
X_3:bat[:any_1], X_4:bat[:oid], X_5:bat[:oid], X_6:bit, X_7:bit):bat[:dbl] ",  
"AGGRsubcovariancecand;",       ""      ]
+[ "aggr",      "subcovariance",        "command 
aggr.subcovariance(X_0:bat[:dbl], X_1:bat[:dbl], X_2:bat[:oid], 
X_3:bat[:any_1], X_4:bat[:oid], X_5:bat[:oid], X_6:bit, X_7:bit):bat[:dbl] ",  
"AGGRsubcovariancecand;",       ""      ]
+[ "aggr",      "subcovariance",        "command 
aggr.subcovariance(X_0:bat[:flt], X_1:bat[:flt], X_2:bat[:oid], 
X_3:bat[:any_1], X_4:bat[:oid], X_5:bat[:oid], X_6:bit, X_7:bit):bat[:dbl] ",  
"AGGRsubcovariancecand;",       ""      ]
+[ "aggr",      "subcovariance",        "command 
aggr.subcovariance(X_0:bat[:int], X_1:bat[:int], X_2:bat[:oid], 
X_3:bat[:any_1], X_4:bat[:oid], X_5:bat[:oid], X_6:bit, X_7:bit):bat[:dbl] ",  
"AGGRsubcovariancecand;",       ""      ]
+[ "aggr",      "subcovariance",        "command 
aggr.subcovariance(X_0:bat[:lng], X_1:bat[:lng], X_2:bat[:oid], 
X_3:bat[:any_1], X_4:bat[:oid], X_5:bat[:oid], X_6:bit, X_7:bit):bat[:dbl] ",  
"AGGRsubcovariancecand;",       ""      ]
+[ "aggr",      "subcovariance",        "command 
aggr.subcovariance(X_0:bat[:sht], X_1:bat[:sht], X_2:bat[:oid], 
X_3:bat[:any_1], X_4:bat[:oid], X_5:bat[:oid], X_6:bit, X_7:bit):bat[:dbl] ",  
"AGGRsubcovariancecand;",       ""      ]
 [ "aggr",      "subcovariancep",       "command 
aggr.subcovariancep(X_0:bat[:bte], X_1:bat[:bte], X_2:bat[:oid], 
X_3:bat[:any_1], X_4:bit, X_5:bit):bat[:dbl] ",       "AGGRsubcovariancep;",  
""      ]
 [ "aggr",      "subcovariancep",       "command 
aggr.subcovariancep(X_0:bat[:dbl], X_1:bat[:dbl], X_2:bat[:oid], 
X_3:bat[:any_1], X_4:bit, X_5:bit):bat[:dbl] ",       "AGGRsubcovariancep;",  
""      ]
 [ "aggr",      "subcovariancep",       "command 
aggr.subcovariancep(X_0:bat[:flt], X_1:bat[:flt], X_2:bat[:oid], 
X_3:bat[:any_1], X_4:bit, X_5:bit):bat[:dbl] ",       "AGGRsubcovariancep;",  
""      ]
 [ "aggr",      "subcovariancep",       "command 
aggr.subcovariancep(X_0:bat[:int], X_1:bat[:int], X_2:bat[:oid], 
X_3:bat[:any_1], X_4:bit, X_5:bit):bat[:dbl] ",       "AGGRsubcovariancep;",  
""      ]
 [ "aggr",      "subcovariancep",       "command 
aggr.subcovariancep(X_0:bat[:lng], X_1:bat[:lng], X_2:bat[:oid], 
X_3:bat[:any_1], X_4:bit, X_5:bit):bat[:dbl] ",       "AGGRsubcovariancep;",  
""      ]
 [ "aggr",      "subcovariancep",       "command 
aggr.subcovariancep(X_0:bat[:sht], X_1:bat[:sht], X_2:bat[:oid], 
X_3:bat[:any_1], X_4:bit, X_5:bit):bat[:dbl] ",       "AGGRsubcovariancep;",  
""      ]
-[ "aggr",      "subcovariancep",       "command 
aggr.subcovariancep(X_0:bat[:bte], X_1:bat[:bte], X_2:bat[:oid], 
X_3:bat[:any_1], X_4:bat[:oid], X_5:bit, X_6:bit):bat[:dbl] ",        
"AGGRsubcovariancepcand;",      ""      ]
-[ "aggr",      "subcovariancep",       "command 
aggr.subcovariancep(X_0:bat[:dbl], X_1:bat[:dbl], X_2:bat[:oid], 
X_3:bat[:any_1], X_4:bat[:oid], X_5:bit, X_6:bit):bat[:dbl] ",        
"AGGRsubcovariancepcand;",      ""      ]
-[ "aggr",      "subcovariancep",       "command 
aggr.subcovariancep(X_0:bat[:flt], X_1:bat[:flt], X_2:bat[:oid], 
X_3:bat[:any_1], X_4:bat[:oid], X_5:bit, X_6:bit):bat[:dbl] ",        
"AGGRsubcovariancepcand;",      ""      ]
-[ "aggr",      "subcovariancep",       "command 
aggr.subcovariancep(X_0:bat[:int], X_1:bat[:int], X_2:bat[:oid], 
X_3:bat[:any_1], X_4:bat[:oid], X_5:bit, X_6:bit):bat[:dbl] ",        
"AGGRsubcovariancepcand;",      ""      ]
-[ "aggr",      "subcovariancep",       "command 
aggr.subcovariancep(X_0:bat[:lng], X_1:bat[:lng], X_2:bat[:oid], 
X_3:bat[:any_1], X_4:bat[:oid], X_5:bit, X_6:bit):bat[:dbl] ",        
"AGGRsubcovariancepcand;",      ""      ]
-[ "aggr",      "subcovariancep",       "command 
aggr.subcovariancep(X_0:bat[:sht], X_1:bat[:sht], X_2:bat[:oid], 
X_3:bat[:any_1], X_4:bat[:oid], X_5:bit, X_6:bit):bat[:dbl] ",        
"AGGRsubcovariancepcand;",      ""      ]
+[ "aggr",      "subcovariancep",       "command 
aggr.subcovariancep(X_0:bat[:bte], X_1:bat[:bte], X_2:bat[:oid], 
X_3:bat[:any_1], X_4:bat[:oid], X_5:bat[:oid], X_6:bit, X_7:bit):bat[:dbl] ", 
"AGGRsubcovariancepcand;",      ""      ]
+[ "aggr",      "subcovariancep",       "command 
aggr.subcovariancep(X_0:bat[:dbl], X_1:bat[:dbl], X_2:bat[:oid], 
X_3:bat[:any_1], X_4:bat[:oid], X_5:bat[:oid], X_6:bit, X_7:bit):bat[:dbl] ", 
"AGGRsubcovariancepcand;",      ""      ]
+[ "aggr",      "subcovariancep",       "command 
aggr.subcovariancep(X_0:bat[:flt], X_1:bat[:flt], X_2:bat[:oid], 
X_3:bat[:any_1], X_4:bat[:oid], X_5:bat[:oid], X_6:bit, X_7:bit):bat[:dbl] ", 
"AGGRsubcovariancepcand;",      ""      ]
+[ "aggr",      "subcovariancep",       "command 
aggr.subcovariancep(X_0:bat[:int], X_1:bat[:int], X_2:bat[:oid], 
X_3:bat[:any_1], X_4:bat[:oid], X_5:bat[:oid], X_6:bit, X_7:bit):bat[:dbl] ", 
"AGGRsubcovariancepcand;",      ""      ]
+[ "aggr",      "subcovariancep",       "command 
aggr.subcovariancep(X_0:bat[:lng], X_1:bat[:lng], X_2:bat[:oid], 
X_3:bat[:any_1], X_4:bat[:oid], X_5:bat[:oid], X_6:bit, X_7:bit):bat[:dbl] ", 
"AGGRsubcovariancepcand;",      ""      ]
+[ "aggr",      "subcovariancep",       "command 
aggr.subcovariancep(X_0:bat[:sht], X_1:bat[:sht], X_2:bat[:oid], 
X_3:bat[:any_1], X_4:bat[:oid], X_5:bat[:oid], X_6:bit, X_7:bit):bat[:dbl] ", 
"AGGRsubcovariancepcand;",      ""      ]
 [ "aggr",      "subexist",     "pattern aggr.subexist(X_0:bat[:any], 
X_1:bat[:oid], X_2:bat[:oid], X_3:bat[:oid], X_4:bit):bat[:bit] ",        
"SQLsubexist;", ""      ]
 [ "aggr",      "subexist",     "pattern aggr.subexist(X_0:bat[:any], 
X_1:bat[:oid], X_2:bat[:oid], X_3:bit):bat[:bit] ",       "SQLsubexist;", ""    
  ]
 [ "aggr",      "subjsonaggr",  "command aggr.subjsonaggr(X_0:bat[:dbl], 
X_1:bat[:oid], X_2:bat[:any_1], X_3:bit):bat[:str] ",  "JSONsubjson;", ""      ]
diff --git a/clients/Tests/MAL-signatures.stable.out.int128 
b/clients/Tests/MAL-signatures.stable.out.int128
--- a/clients/Tests/MAL-signatures.stable.out.int128
+++ b/clients/Tests/MAL-signatures.stable.out.int128
@@ -119,6 +119,7 @@ stdout of test 'MAL-signatures` in direc
 [ "aggr",      "corr", "command aggr.corr(X_0:bat[:int], X_1:bat[:int], 
X_2:bat[:oid], X_3:bat[:any_1]):bat[:dbl] ",   "AGGRcorr;",    ""      ]
 [ "aggr",      "corr", "command aggr.corr(X_0:bat[:lng], X_1:bat[:lng], 
X_2:bat[:oid], X_3:bat[:any_1]):bat[:dbl] ",   "AGGRcorr;",    ""      ]
 [ "aggr",      "corr", "command aggr.corr(X_0:bat[:sht], X_1:bat[:sht], 
X_2:bat[:oid], X_3:bat[:any_1]):bat[:dbl] ",   "AGGRcorr;",    ""      ]
+[ "aggr",      "corr", "command aggr.corr(X_0:bat[:any_2], X_1:bat[:any_2], 
X_2:bat[:oid], X_3:bat[:oid]):dbl ",       "ALGcorr2;",    ""      ]
 [ "aggr",      "corr", "command aggr.corr(X_0:bat[:any_2], 
X_1:bat[:any_2]):dbl ",     "ALGcorr;",     ""      ]
 [ "aggr",      "count",        "command aggr.count(X_0:bat[:any_1], 
X_1:bat[:oid], X_2:bat[:any_2], X_3:bit):bat[:lng] ",      "AGGRcount3;",  ""   
   ]
 [ "aggr",      "count",        "command aggr.count(X_0:bat[:any_1], 
X_1:bat[:oid], X_2:bat[:any_2]):bat[:lng] ",       "AGGRcount3nils;",      ""   
   ]
@@ -136,6 +137,7 @@ stdout of test 'MAL-signatures` in direc
 [ "aggr",      "covariance",   "command aggr.covariance(X_0:bat[:int], 
X_1:bat[:int], X_2:bat[:oid], X_3:bat[:any_1]):bat[:dbl] ",     
"AGGRcovariance;",      ""      ]
 [ "aggr",      "covariance",   "command aggr.covariance(X_0:bat[:lng], 
X_1:bat[:lng], X_2:bat[:oid], X_3:bat[:any_1]):bat[:dbl] ",     
"AGGRcovariance;",      ""      ]
 [ "aggr",      "covariance",   "command aggr.covariance(X_0:bat[:sht], 
X_1:bat[:sht], X_2:bat[:oid], X_3:bat[:any_1]):bat[:dbl] ",     
"AGGRcovariance;",      ""      ]
+[ "aggr",      "covariance",   "command aggr.covariance(X_0:bat[:any_2], 
X_1:bat[:any_2], X_2:bat[:oid], X_3:bat[:oid]):dbl ", "ALGcovariance2;",      
""      ]
 [ "aggr",      "covariance",   "command aggr.covariance(X_0:bat[:any_2], 
X_1:bat[:any_2]):dbl ",       "ALGcovariance;",       ""      ]
 [ "aggr",      "covariancep",  "command aggr.covariancep(X_0:bat[:bte], 
X_1:bat[:bte], X_2:bat[:oid], X_3:bat[:any_1]):bat[:dbl] ",    
"AGGRcovariancep;",     ""      ]
 [ "aggr",      "covariancep",  "command aggr.covariancep(X_0:bat[:dbl], 
X_1:bat[:dbl], X_2:bat[:oid], X_3:bat[:any_1]):bat[:dbl] ",    
"AGGRcovariancep;",     ""      ]
@@ -144,6 +146,7 @@ stdout of test 'MAL-signatures` in direc
 [ "aggr",      "covariancep",  "command aggr.covariancep(X_0:bat[:int], 
X_1:bat[:int], X_2:bat[:oid], X_3:bat[:any_1]):bat[:dbl] ",    
"AGGRcovariancep;",     ""      ]
 [ "aggr",      "covariancep",  "command aggr.covariancep(X_0:bat[:lng], 
X_1:bat[:lng], X_2:bat[:oid], X_3:bat[:any_1]):bat[:dbl] ",    
"AGGRcovariancep;",     ""      ]
 [ "aggr",      "covariancep",  "command aggr.covariancep(X_0:bat[:sht], 
X_1:bat[:sht], X_2:bat[:oid], X_3:bat[:any_1]):bat[:dbl] ",    
"AGGRcovariancep;",     ""      ]
+[ "aggr",      "covariancep",  "command aggr.covariancep(X_0:bat[:any_2], 
X_1:bat[:any_2], X_2:bat[:oid], X_3:bat[:oid]):dbl ",        
"ALGcovariancep2;",     ""      ]
 [ "aggr",      "covariancep",  "command aggr.covariancep(X_0:bat[:any_2], 
X_1:bat[:any_2]):dbl ",      "ALGcovariancep;",      ""      ]
 [ "aggr",      "exist",        "command aggr.exist(X_0:bat[:any_2], 
X_1:any_1):bit ",  "ALGexist;",    ""      ]
 [ "aggr",      "exist",        "pattern aggr.exist(X_0:any_1):bit ",   
"SQLexist;",    ""      ]
@@ -378,13 +381,13 @@ stdout of test 'MAL-signatures` in direc
 [ "aggr",      "subcorr",      "command aggr.subcorr(X_0:bat[:int], 
X_1:bat[:int], X_2:bat[:oid], X_3:bat[:any_1], X_4:bit, X_5:bit):bat[:dbl] ",   
   "AGGRsubcorr;", ""      ]
 [ "aggr",      "subcorr",      "command aggr.subcorr(X_0:bat[:lng], 
X_1:bat[:lng], X_2:bat[:oid], X_3:bat[:any_1], X_4:bit, X_5:bit):bat[:dbl] ",   
   "AGGRsubcorr;", ""      ]
 [ "aggr",      "subcorr",      "command aggr.subcorr(X_0:bat[:sht], 
X_1:bat[:sht], X_2:bat[:oid], X_3:bat[:any_1], X_4:bit, X_5:bit):bat[:dbl] ",   
   "AGGRsubcorr;", ""      ]
-[ "aggr",      "subcorr",      "command aggr.subcorr(X_0:bat[:bte], 
X_1:bat[:bte], X_2:bat[:oid], X_3:bat[:any_1], X_4:bat[:oid], X_5:bit, 
X_6:bit):bat[:dbl] ",       "AGGRsubcorrcand;",     ""      ]
-[ "aggr",      "subcorr",      "command aggr.subcorr(X_0:bat[:dbl], 
X_1:bat[:dbl], X_2:bat[:oid], X_3:bat[:any_1], X_4:bat[:oid], X_5:bit, 
X_6:bit):bat[:dbl] ",       "AGGRsubcorrcand;",     ""      ]
-[ "aggr",      "subcorr",      "command aggr.subcorr(X_0:bat[:flt], 
X_1:bat[:flt], X_2:bat[:oid], X_3:bat[:any_1], X_4:bat[:oid], X_5:bit, 
X_6:bit):bat[:dbl] ",       "AGGRsubcorrcand;",     ""      ]
-[ "aggr",      "subcorr",      "command aggr.subcorr(X_0:bat[:hge], 
X_1:bat[:hge], X_2:bat[:oid], X_3:bat[:any_1], X_4:bat[:oid], X_5:bit, 
X_6:bit):bat[:dbl] ",       "AGGRsubcorrcand;",     ""      ]
-[ "aggr",      "subcorr",      "command aggr.subcorr(X_0:bat[:int], 
X_1:bat[:int], X_2:bat[:oid], X_3:bat[:any_1], X_4:bat[:oid], X_5:bit, 
X_6:bit):bat[:dbl] ",       "AGGRsubcorrcand;",     ""      ]
-[ "aggr",      "subcorr",      "command aggr.subcorr(X_0:bat[:lng], 
X_1:bat[:lng], X_2:bat[:oid], X_3:bat[:any_1], X_4:bat[:oid], X_5:bit, 
X_6:bit):bat[:dbl] ",       "AGGRsubcorrcand;",     ""      ]
-[ "aggr",      "subcorr",      "command aggr.subcorr(X_0:bat[:sht], 
X_1:bat[:sht], X_2:bat[:oid], X_3:bat[:any_1], X_4:bat[:oid], X_5:bit, 
X_6:bit):bat[:dbl] ",       "AGGRsubcorrcand;",     ""      ]
+[ "aggr",      "subcorr",      "command aggr.subcorr(X_0:bat[:bte], 
X_1:bat[:bte], X_2:bat[:oid], X_3:bat[:any_1], X_4:bat[:oid], X_5:bat[:oid], 
X_6:bit, X_7:bit):bat[:dbl] ",        "AGGRsubcorrcand;",     ""      ]
+[ "aggr",      "subcorr",      "command aggr.subcorr(X_0:bat[:dbl], 
X_1:bat[:dbl], X_2:bat[:oid], X_3:bat[:any_1], X_4:bat[:oid], X_5:bat[:oid], 
X_6:bit, X_7:bit):bat[:dbl] ",        "AGGRsubcorrcand;",     ""      ]
+[ "aggr",      "subcorr",      "command aggr.subcorr(X_0:bat[:flt], 
X_1:bat[:flt], X_2:bat[:oid], X_3:bat[:any_1], X_4:bat[:oid], X_5:bat[:oid], 
X_6:bit, X_7:bit):bat[:dbl] ",        "AGGRsubcorrcand;",     ""      ]
+[ "aggr",      "subcorr",      "command aggr.subcorr(X_0:bat[:hge], 
X_1:bat[:hge], X_2:bat[:oid], X_3:bat[:any_1], X_4:bat[:oid], X_5:bat[:oid], 
X_6:bit, X_7:bit):bat[:dbl] ",        "AGGRsubcorrcand;",     ""      ]
+[ "aggr",      "subcorr",      "command aggr.subcorr(X_0:bat[:int], 
X_1:bat[:int], X_2:bat[:oid], X_3:bat[:any_1], X_4:bat[:oid], X_5:bat[:oid], 
X_6:bit, X_7:bit):bat[:dbl] ",        "AGGRsubcorrcand;",     ""      ]
+[ "aggr",      "subcorr",      "command aggr.subcorr(X_0:bat[:lng], 
X_1:bat[:lng], X_2:bat[:oid], X_3:bat[:any_1], X_4:bat[:oid], X_5:bat[:oid], 
X_6:bit, X_7:bit):bat[:dbl] ",        "AGGRsubcorrcand;",     ""      ]
+[ "aggr",      "subcorr",      "command aggr.subcorr(X_0:bat[:sht], 
X_1:bat[:sht], X_2:bat[:oid], X_3:bat[:any_1], X_4:bat[:oid], X_5:bat[:oid], 
X_6:bit, X_7:bit):bat[:dbl] ",        "AGGRsubcorrcand;",     ""      ]
 [ "aggr",      "subcount",     "command aggr.subcount(X_0:bat[:any_1], 
X_1:bat[:oid], X_2:bat[:any_2], X_3:bit):bat[:lng] ",   "AGGRsubcount;",        
""      ]
 [ "aggr",      "subcount",     "command aggr.subcount(X_0:bat[:any_1], 
X_1:bat[:oid], X_2:bat[:any_2], X_3:bat[:oid], X_4:bit):bat[:lng] ",    
"AGGRsubcountcand;",    ""      ]
 [ "aggr",      "subcovariance",        "command 
aggr.subcovariance(X_0:bat[:bte], X_1:bat[:bte], X_2:bat[:oid], 
X_3:bat[:any_1], X_4:bit, X_5:bit):bat[:dbl] ",        "AGGRsubcovariance;",   
""      ]
@@ -394,13 +397,13 @@ stdout of test 'MAL-signatures` in direc
 [ "aggr",      "subcovariance",        "command 
aggr.subcovariance(X_0:bat[:int], X_1:bat[:int], X_2:bat[:oid], 
X_3:bat[:any_1], X_4:bit, X_5:bit):bat[:dbl] ",        "AGGRsubcovariance;",   
""      ]
 [ "aggr",      "subcovariance",        "command 
aggr.subcovariance(X_0:bat[:lng], X_1:bat[:lng], X_2:bat[:oid], 
X_3:bat[:any_1], X_4:bit, X_5:bit):bat[:dbl] ",        "AGGRsubcovariance;",   
""      ]
 [ "aggr",      "subcovariance",        "command 
aggr.subcovariance(X_0:bat[:sht], X_1:bat[:sht], X_2:bat[:oid], 
X_3:bat[:any_1], X_4:bit, X_5:bit):bat[:dbl] ",        "AGGRsubcovariance;",   
""      ]
-[ "aggr",      "subcovariance",        "command 
aggr.subcovariance(X_0:bat[:bte], X_1:bat[:bte], X_2:bat[:oid], 
X_3:bat[:any_1], X_4:bat[:oid], X_5:bit, X_6:bit):bat[:dbl] ", 
"AGGRsubcovariancecand;",       ""      ]
-[ "aggr",      "subcovariance",        "command 
aggr.subcovariance(X_0:bat[:dbl], X_1:bat[:dbl], X_2:bat[:oid], 
X_3:bat[:any_1], X_4:bat[:oid], X_5:bit, X_6:bit):bat[:dbl] ", 
"AGGRsubcovariancecand;",       ""      ]
-[ "aggr",      "subcovariance",        "command 
aggr.subcovariance(X_0:bat[:flt], X_1:bat[:flt], X_2:bat[:oid], 
X_3:bat[:any_1], X_4:bat[:oid], X_5:bit, X_6:bit):bat[:dbl] ", 
"AGGRsubcovariancecand;",       ""      ]
-[ "aggr",      "subcovariance",        "command 
aggr.subcovariance(X_0:bat[:hge], X_1:bat[:hge], X_2:bat[:oid], 
X_3:bat[:any_1], X_4:bat[:oid], X_5:bit, X_6:bit):bat[:dbl] ", 
"AGGRsubcovariancecand;",       ""      ]
-[ "aggr",      "subcovariance",        "command 
aggr.subcovariance(X_0:bat[:int], X_1:bat[:int], X_2:bat[:oid], 
X_3:bat[:any_1], X_4:bat[:oid], X_5:bit, X_6:bit):bat[:dbl] ", 
"AGGRsubcovariancecand;",       ""      ]
-[ "aggr",      "subcovariance",        "command 
aggr.subcovariance(X_0:bat[:lng], X_1:bat[:lng], X_2:bat[:oid], 
X_3:bat[:any_1], X_4:bat[:oid], X_5:bit, X_6:bit):bat[:dbl] ", 
"AGGRsubcovariancecand;",       ""      ]
-[ "aggr",      "subcovariance",        "command 
aggr.subcovariance(X_0:bat[:sht], X_1:bat[:sht], X_2:bat[:oid], 
X_3:bat[:any_1], X_4:bat[:oid], X_5:bit, X_6:bit):bat[:dbl] ", 
"AGGRsubcovariancecand;",       ""      ]
+[ "aggr",      "subcovariance",        "command 
aggr.subcovariance(X_0:bat[:bte], X_1:bat[:bte], X_2:bat[:oid], 
X_3:bat[:any_1], X_4:bat[:oid], X_5:bat[:oid], X_6:bit, X_7:bit):bat[:dbl] ",  
"AGGRsubcovariancecand;",       ""      ]
+[ "aggr",      "subcovariance",        "command 
aggr.subcovariance(X_0:bat[:dbl], X_1:bat[:dbl], X_2:bat[:oid], 
X_3:bat[:any_1], X_4:bat[:oid], X_5:bat[:oid], X_6:bit, X_7:bit):bat[:dbl] ",  
"AGGRsubcovariancecand;",       ""      ]
+[ "aggr",      "subcovariance",        "command 
aggr.subcovariance(X_0:bat[:flt], X_1:bat[:flt], X_2:bat[:oid], 
X_3:bat[:any_1], X_4:bat[:oid], X_5:bat[:oid], X_6:bit, X_7:bit):bat[:dbl] ",  
"AGGRsubcovariancecand;",       ""      ]
+[ "aggr",      "subcovariance",        "command 
aggr.subcovariance(X_0:bat[:hge], X_1:bat[:hge], X_2:bat[:oid], 
X_3:bat[:any_1], X_4:bat[:oid], X_5:bat[:oid], X_6:bit, X_7:bit):bat[:dbl] ",  
"AGGRsubcovariancecand;",       ""      ]
+[ "aggr",      "subcovariance",        "command 
aggr.subcovariance(X_0:bat[:int], X_1:bat[:int], X_2:bat[:oid], 
X_3:bat[:any_1], X_4:bat[:oid], X_5:bat[:oid], X_6:bit, X_7:bit):bat[:dbl] ",  
"AGGRsubcovariancecand;",       ""      ]
+[ "aggr",      "subcovariance",        "command 
aggr.subcovariance(X_0:bat[:lng], X_1:bat[:lng], X_2:bat[:oid], 
X_3:bat[:any_1], X_4:bat[:oid], X_5:bat[:oid], X_6:bit, X_7:bit):bat[:dbl] ",  
"AGGRsubcovariancecand;",       ""      ]
+[ "aggr",      "subcovariance",        "command 
aggr.subcovariance(X_0:bat[:sht], X_1:bat[:sht], X_2:bat[:oid], 
X_3:bat[:any_1], X_4:bat[:oid], X_5:bat[:oid], X_6:bit, X_7:bit):bat[:dbl] ",  
"AGGRsubcovariancecand;",       ""      ]
 [ "aggr",      "subcovariancep",       "command 
aggr.subcovariancep(X_0:bat[:bte], X_1:bat[:bte], X_2:bat[:oid], 
X_3:bat[:any_1], X_4:bit, X_5:bit):bat[:dbl] ",       "AGGRsubcovariancep;",  
""      ]
 [ "aggr",      "subcovariancep",       "command 
aggr.subcovariancep(X_0:bat[:dbl], X_1:bat[:dbl], X_2:bat[:oid], 
X_3:bat[:any_1], X_4:bit, X_5:bit):bat[:dbl] ",       "AGGRsubcovariancep;",  
""      ]
 [ "aggr",      "subcovariancep",       "command 
aggr.subcovariancep(X_0:bat[:flt], X_1:bat[:flt], X_2:bat[:oid], 
X_3:bat[:any_1], X_4:bit, X_5:bit):bat[:dbl] ",       "AGGRsubcovariancep;",  
""      ]
@@ -408,13 +411,13 @@ stdout of test 'MAL-signatures` in direc
 [ "aggr",      "subcovariancep",       "command 
aggr.subcovariancep(X_0:bat[:int], X_1:bat[:int], X_2:bat[:oid], 
X_3:bat[:any_1], X_4:bit, X_5:bit):bat[:dbl] ",       "AGGRsubcovariancep;",  
""      ]
 [ "aggr",      "subcovariancep",       "command 
aggr.subcovariancep(X_0:bat[:lng], X_1:bat[:lng], X_2:bat[:oid], 
X_3:bat[:any_1], X_4:bit, X_5:bit):bat[:dbl] ",       "AGGRsubcovariancep;",  
""      ]
 [ "aggr",      "subcovariancep",       "command 
aggr.subcovariancep(X_0:bat[:sht], X_1:bat[:sht], X_2:bat[:oid], 
X_3:bat[:any_1], X_4:bit, X_5:bit):bat[:dbl] ",       "AGGRsubcovariancep;",  
""      ]
-[ "aggr",      "subcovariancep",       "command 
aggr.subcovariancep(X_0:bat[:bte], X_1:bat[:bte], X_2:bat[:oid], 
X_3:bat[:any_1], X_4:bat[:oid], X_5:bit, X_6:bit):bat[:dbl] ",        
"AGGRsubcovariancepcand;",      ""      ]
-[ "aggr",      "subcovariancep",       "command 
aggr.subcovariancep(X_0:bat[:dbl], X_1:bat[:dbl], X_2:bat[:oid], 
X_3:bat[:any_1], X_4:bat[:oid], X_5:bit, X_6:bit):bat[:dbl] ",        
"AGGRsubcovariancepcand;",      ""      ]
-[ "aggr",      "subcovariancep",       "command 
aggr.subcovariancep(X_0:bat[:flt], X_1:bat[:flt], X_2:bat[:oid], 
X_3:bat[:any_1], X_4:bat[:oid], X_5:bit, X_6:bit):bat[:dbl] ",        
"AGGRsubcovariancepcand;",      ""      ]
-[ "aggr",      "subcovariancep",       "command 
aggr.subcovariancep(X_0:bat[:hge], X_1:bat[:hge], X_2:bat[:oid], 
X_3:bat[:any_1], X_4:bat[:oid], X_5:bit, X_6:bit):bat[:dbl] ",        
"AGGRsubcovariancepcand;",      ""      ]
-[ "aggr",      "subcovariancep",       "command 
aggr.subcovariancep(X_0:bat[:int], X_1:bat[:int], X_2:bat[:oid], 
X_3:bat[:any_1], X_4:bat[:oid], X_5:bit, X_6:bit):bat[:dbl] ",        
"AGGRsubcovariancepcand;",      ""      ]
-[ "aggr",      "subcovariancep",       "command 
aggr.subcovariancep(X_0:bat[:lng], X_1:bat[:lng], X_2:bat[:oid], 
X_3:bat[:any_1], X_4:bat[:oid], X_5:bit, X_6:bit):bat[:dbl] ",        
"AGGRsubcovariancepcand;",      ""      ]
-[ "aggr",      "subcovariancep",       "command 
aggr.subcovariancep(X_0:bat[:sht], X_1:bat[:sht], X_2:bat[:oid], 
X_3:bat[:any_1], X_4:bat[:oid], X_5:bit, X_6:bit):bat[:dbl] ",        
"AGGRsubcovariancepcand;",      ""      ]
+[ "aggr",      "subcovariancep",       "command 
aggr.subcovariancep(X_0:bat[:bte], X_1:bat[:bte], X_2:bat[:oid], 
X_3:bat[:any_1], X_4:bat[:oid], X_5:bat[:oid], X_6:bit, X_7:bit):bat[:dbl] ", 
"AGGRsubcovariancepcand;",      ""      ]
+[ "aggr",      "subcovariancep",       "command 
aggr.subcovariancep(X_0:bat[:dbl], X_1:bat[:dbl], X_2:bat[:oid], 
X_3:bat[:any_1], X_4:bat[:oid], X_5:bat[:oid], X_6:bit, X_7:bit):bat[:dbl] ", 
"AGGRsubcovariancepcand;",      ""      ]
+[ "aggr",      "subcovariancep",       "command 
aggr.subcovariancep(X_0:bat[:flt], X_1:bat[:flt], X_2:bat[:oid], 
X_3:bat[:any_1], X_4:bat[:oid], X_5:bat[:oid], X_6:bit, X_7:bit):bat[:dbl] ", 
"AGGRsubcovariancepcand;",      ""      ]
+[ "aggr",      "subcovariancep",       "command 
aggr.subcovariancep(X_0:bat[:hge], X_1:bat[:hge], X_2:bat[:oid], 
X_3:bat[:any_1], X_4:bat[:oid], X_5:bat[:oid], X_6:bit, X_7:bit):bat[:dbl] ", 
"AGGRsubcovariancepcand;",      ""      ]
+[ "aggr",      "subcovariancep",       "command 
aggr.subcovariancep(X_0:bat[:int], X_1:bat[:int], X_2:bat[:oid], 
X_3:bat[:any_1], X_4:bat[:oid], X_5:bat[:oid], X_6:bit, X_7:bit):bat[:dbl] ", 
"AGGRsubcovariancepcand;",      ""      ]
+[ "aggr",      "subcovariancep",       "command 
aggr.subcovariancep(X_0:bat[:lng], X_1:bat[:lng], X_2:bat[:oid], 
X_3:bat[:any_1], X_4:bat[:oid], X_5:bat[:oid], X_6:bit, X_7:bit):bat[:dbl] ", 
"AGGRsubcovariancepcand;",      ""      ]
+[ "aggr",      "subcovariancep",       "command 
aggr.subcovariancep(X_0:bat[:sht], X_1:bat[:sht], X_2:bat[:oid], 
X_3:bat[:any_1], X_4:bat[:oid], X_5:bat[:oid], X_6:bit, X_7:bit):bat[:dbl] ", 
"AGGRsubcovariancepcand;",      ""      ]
 [ "aggr",      "subexist",     "pattern aggr.subexist(X_0:bat[:any], 
X_1:bat[:oid], X_2:bat[:oid], X_3:bat[:oid], X_4:bit):bat[:bit] ",        
"SQLsubexist;", ""      ]
 [ "aggr",      "subexist",     "pattern aggr.subexist(X_0:bat[:any], 
X_1:bat[:oid], X_2:bat[:oid], X_3:bit):bat[:bit] ",       "SQLsubexist;", ""    
  ]
 [ "aggr",      "subjsonaggr",  "command aggr.subjsonaggr(X_0:bat[:dbl], 
X_1:bat[:oid], X_2:bat[:any_1], X_3:bit):bat[:str] ",  "JSONsubjson;", ""      ]
@@ -10958,7 +10961,7 @@ stdout of test 'MAL-signatures` in direc
 [ "sql",       "ms_trunc",     "command sql.ms_trunc(X_0:dbl, X_1:int):dbl ",  
"dbl_trunc_wrap;",      ""      ]
 [ "sql",       "ms_trunc",     "command sql.ms_trunc(X_0:flt, X_1:int):flt ",  
"flt_trunc_wrap;",      ""      ]
 [ "sql",       "mvc",  "pattern sql.mvc():int ",       "SQLmvc;",      ""      
]
-[ "sql",       "next_value",   "unsafe pattern sql.next_value(X_0:str, 
X_1:str):lng ", "mvc_next_value;",      ""      ]
+[ "sql",       "next_value",   "pattern sql.next_value(X_0:str, X_1:str):lng 
",        "mvc_next_value;",      ""      ]
 [ "sql",       "nth_value",    "pattern sql.nth_value(X_0:any_1, X_1:lng, 
X_2:bit, X_3:bit, X_4:int, X_5:oid, X_6:oid):any_1 ",        "SQLnth_value;",   
     ""      ]
 [ "sql",       "ntile",        "pattern sql.ntile(X_0:any, X_1:any_1, X_2:bit, 
X_3:bit):any_1 ",       "SQLntile;",    ""      ]
 [ "sql",       "optimizer_updates",    "pattern sql.optimizer_updates():void 
",        "SQLoptimizersUpdate;", ""      ]
diff --git a/clients/Tests/exports.stable.out b/clients/Tests/exports.stable.out
--- a/clients/Tests/exports.stable.out
+++ b/clients/Tests/exports.stable.out
@@ -31,9 +31,9 @@ BAT *BATcalcbetweencstbat(BAT *b, const 
 BAT *BATcalcbetweencstcst(BAT *b, const ValRecord *lo, const ValRecord *hi, 
BAT *s, bool symmetric, bool linc, bool hinc, bool nils_false, bool anti);
 BAT *BATcalccmp(BAT *b1, BAT *b2, BAT *s1, BAT *s2);
 BAT *BATcalccmpcst(BAT *b, const ValRecord *v, BAT *s);
-dbl BATcalccorrelation(BAT *b1, BAT *b2);
-dbl BATcalccovariance_population(BAT *b1, BAT *b2);
-dbl BATcalccovariance_sample(BAT *b1, BAT *b2);
+dbl BATcalccorrelation(BAT *b1, BAT *b2, BAT *s1, BAT *s2);
+dbl BATcalccovariance_population(BAT *b1, BAT *b2, BAT *s1, BAT *s2);
+dbl BATcalccovariance_sample(BAT *b1, BAT *b2, BAT *s1, BAT *s2);
 BAT *BATcalccstadd(const ValRecord *v, BAT *b, BAT *s, int tp, bool 
abort_on_error);
 BAT *BATcalccstand(const ValRecord *v, BAT *b, BAT *s);
 BAT *BATcalccstcmp(const ValRecord *v, BAT *b, BAT *s);
diff --git a/gdk/gdk_aggr.c b/gdk/gdk_aggr.c
--- a/gdk/gdk_aggr.c
+++ b/gdk/gdk_aggr.c
@@ -4218,9 +4218,11 @@ BATcalcvariance_sample(dbl *avgp, BAT *b
 #define AGGR_COVARIANCE_SINGLE(TYPE)                                   \
        do {                                                            \
                TYPE x, y;                                              \
-               for (i = 0; i < cnt; i++) {                             \
-                       x = ((const TYPE *) v1)[i];                     \
-                       y = ((const TYPE *) v2)[i];                     \
+               for (i = 0; i < ci1->ncand; i++) {                      \
+                       oid i1 = canditer_next(ci1) - ci1->hseq;        \
+                       oid i2 = canditer_next(ci2) - ci2->hseq;        \
+                       x = ((const TYPE *) v1)[i1];                    \
+                       y = ((const TYPE *) v2)[i2];                    \
                        if (is_##TYPE##_nil(x) || is_##TYPE##_nil(y))   \
                                continue;                               \
                        n++;                                            \
@@ -4229,13 +4231,14 @@ BATcalcvariance_sample(dbl *avgp, BAT *b
                        delta2 = (dbl) y - mean2;                       \
                        mean2 += delta2 / n;                            \
                        m2 += delta1 * ((dbl) y - mean2);               \
-                       if (isinf(m2))                  \
-                               goto overflow;          \
+                       if (isinf(m2))                                  \
+                               goto overflow;                          \
                }                                                       \
        } while (0)
 
 static dbl
-calccovariance(const void *v1, const void *v2, BUN cnt, int tp, bool issample)
+calccovariance(const void *v1, const void *v2, struct canditer *ci1,
+              struct canditer *ci2, int tp, bool issample)
 {
        BUN n = 0, i;
        dbl mean1 = 0, mean2 = 0, m2 = 0, delta1, delta2;
@@ -4277,26 +4280,40 @@ calccovariance(const void *v1, const voi
 }
 
 dbl
-BATcalccovariance_population(BAT *b1, BAT *b2)
+BATcalccovariance_population(BAT *b1, BAT *b2, BAT *s1, BAT *s2)
 {
        lng t0 = 0;
+       struct canditer ci1, ci2;
 
        TRC_DEBUG_IF(ALGO) t0 = GDKusec();
-       dbl v = calccovariance(Tloc(b1, 0), Tloc(b2, 0),
-                              BATcount(b1), b1->ttype, false);
+       canditer_init(&ci1, b1, s1);
+       canditer_init(&ci2, b2, s2);
+       if (ci1.ncand != ci2.ncand) {
+               GDKerror("bats must be aligned\n");
+               return dbl_nil;
+       }
+       dbl v = calccovariance(Tloc(b1, 0), Tloc(b2, 0), &ci1, &ci2,
+                              b1->ttype, false);
        TRC_DEBUG(ALGO, "b1=" ALGOBATFMT ",b2=" ALGOBATFMT " (" LLFMT " 
usec)\n",
                  ALGOBATPAR(b1), ALGOBATPAR(b2), GDKusec() - t0);
        return v;
 }
 
 dbl
-BATcalccovariance_sample(BAT *b1, BAT *b2)
+BATcalccovariance_sample(BAT *b1, BAT *b2, BAT *s1, BAT *s2)
 {
        lng t0 = 0;
+       struct canditer ci1, ci2;
 
        TRC_DEBUG_IF(ALGO) t0 = GDKusec();
-       dbl v = calccovariance(Tloc(b1, 0), Tloc(b2, 0),
-                             BATcount(b1), b1->ttype, true);
+       canditer_init(&ci1, b1, s1);
+       canditer_init(&ci2, b2, s2);
+       if (ci1.ncand != ci2.ncand) {
+               GDKerror("bats must be aligned\n");
+               return dbl_nil;
+       }
+       dbl v = calccovariance(Tloc(b1, 0), Tloc(b2, 0), &ci1, &ci2,
+                             b1->ttype, true);
        TRC_DEBUG(ALGO, "b1=" ALGOBATFMT ",b2=" ALGOBATFMT " (" LLFMT " 
usec)\n",
                  ALGOBATPAR(b1), ALGOBATPAR(b2), GDKusec() - t0);
        return v;
@@ -4306,8 +4323,10 @@ BATcalccovariance_sample(BAT *b1, BAT *b
        do {                                                            \
                TYPE x, y;                                              \
                for (i = 0; i < cnt; i++) {                             \
-                       x = ((const TYPE *) v1)[i];                     \
-                       y = ((const TYPE *) v2)[i];                     \
+                       oid o1 = canditer_next(&ci1) - b1->hseqbase;    \
+                       oid o2 = canditer_next(&ci2) - b2->hseqbase;    \
+                       x = ((const TYPE *) v1)[o1];                    \
+                       y = ((const TYPE *) v2)[o2];                    \
                        if (is_##TYPE##_nil(x) || is_##TYPE##_nil(y))   \
                                continue;                               \
                        n++;                                            \
@@ -4319,19 +4338,26 @@ BATcalccovariance_sample(BAT *b1, BAT *b
                        up += delta1 * aux;                             \
                        down1 += delta1 * ((dbl) x - mean1);            \
                        down2 += delta2 * aux;                          \
-                       if (isinf(up) || isinf(down1) || isinf(down2))          
\
-                               goto overflow;          \
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to