StackGenVis: Alignment of Data, Algorithms, and Models for Stacking Ensemble Learning Using Performance Metrics https://doi.org/10.1109/TVCG.2020.3030352
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
StackGenVis/frontend/node_modules/robust-linear-solve/linsolve.js

71 lines
1.7 KiB

4 years ago
"use strict"
var determinant = require("robust-determinant")
var NUM_EXPAND = 6
function generateSolver(n) {
var funcName = "robustLinearSolve" + n + "d"
var code = ["function ", funcName, "(A,b){return ["]
for(var i=0; i<n; ++i) {
code.push("det([")
for(var j=0; j<n; ++j) {
if(j > 0) {
code.push(",")
}
code.push("[")
for(var k=0; k<n; ++k) {
if(k > 0) {
code.push(",")
}
if(k === i) {
code.push("+b[", j, "]")
} else {
code.push("+A[", j, "][", k, "]")
}
}
code.push("]")
}
code.push("]),")
}
code.push("det(A)]}return ", funcName)
var proc = new Function("det", code.join(""))
if(n < 6) {
return proc(determinant[n])
}
return proc(determinant)
}
function robustLinearSolve0d() {
return [ 0 ]
}
function robustLinearSolve1d(A, b) {
return [ [ b[0] ], [ A[0][0] ] ]
}
var CACHE = [
robustLinearSolve0d,
robustLinearSolve1d
]
function generateDispatch() {
while(CACHE.length < NUM_EXPAND) {
CACHE.push(generateSolver(CACHE.length))
}
var procArgs = []
var code = ["function dispatchLinearSolve(A,b){switch(A.length){"]
for(var i=0; i<NUM_EXPAND; ++i) {
procArgs.push("s" + i)
code.push("case ", i, ":return s", i, "(A,b);")
}
code.push("}var s=CACHE[A.length];if(!s)s=CACHE[A.length]=g(A.length);return s(A,b)}return dispatchLinearSolve")
procArgs.push("CACHE", "g", code.join(""))
var proc = Function.apply(undefined, procArgs)
module.exports = proc.apply(undefined, CACHE.concat([CACHE, generateSolver]))
for(var i=0; i<NUM_EXPAND; ++i) {
module.exports[i] = CACHE[i]
}
}
generateDispatch()