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.
114 lines
2.9 KiB
114 lines
2.9 KiB
4 years ago
|
// (c) Copyright 2016, Sean Connelly (@voidqk), http://syntheti.cc
|
||
|
// MIT License
|
||
|
// Project Home: https://github.com/voidqk/polybooljs
|
||
|
|
||
|
//
|
||
|
// used strictly for logging the processing of the algorithm... only useful if you intend on
|
||
|
// looking under the covers (for pretty UI's or debugging)
|
||
|
//
|
||
|
|
||
|
function BuildLog(){
|
||
|
var my;
|
||
|
var nextSegmentId = 0;
|
||
|
var curVert = false;
|
||
|
|
||
|
function push(type, data){
|
||
|
my.list.push({
|
||
|
type: type,
|
||
|
data: data ? JSON.parse(JSON.stringify(data)) : void 0
|
||
|
});
|
||
|
return my;
|
||
|
}
|
||
|
|
||
|
my = {
|
||
|
list: [],
|
||
|
segmentId: function(){
|
||
|
return nextSegmentId++;
|
||
|
},
|
||
|
checkIntersection: function(seg1, seg2){
|
||
|
return push('check', { seg1: seg1, seg2: seg2 });
|
||
|
},
|
||
|
segmentChop: function(seg, end){
|
||
|
push('div_seg', { seg: seg, pt: end });
|
||
|
return push('chop', { seg: seg, pt: end });
|
||
|
},
|
||
|
statusRemove: function(seg){
|
||
|
return push('pop_seg', { seg: seg });
|
||
|
},
|
||
|
segmentUpdate: function(seg){
|
||
|
return push('seg_update', { seg: seg });
|
||
|
},
|
||
|
segmentNew: function(seg, primary){
|
||
|
return push('new_seg', { seg: seg, primary: primary });
|
||
|
},
|
||
|
segmentRemove: function(seg){
|
||
|
return push('rem_seg', { seg: seg });
|
||
|
},
|
||
|
tempStatus: function(seg, above, below){
|
||
|
return push('temp_status', { seg: seg, above: above, below: below });
|
||
|
},
|
||
|
rewind: function(seg){
|
||
|
return push('rewind', { seg: seg });
|
||
|
},
|
||
|
status: function(seg, above, below){
|
||
|
return push('status', { seg: seg, above: above, below: below });
|
||
|
},
|
||
|
vert: function(x){
|
||
|
if (x === curVert)
|
||
|
return my;
|
||
|
curVert = x;
|
||
|
return push('vert', { x: x });
|
||
|
},
|
||
|
log: function(data){
|
||
|
if (typeof data !== 'string')
|
||
|
data = JSON.stringify(data, false, ' ');
|
||
|
return push('log', { txt: data });
|
||
|
},
|
||
|
reset: function(){
|
||
|
return push('reset');
|
||
|
},
|
||
|
selected: function(segs){
|
||
|
return push('selected', { segs: segs });
|
||
|
},
|
||
|
chainStart: function(seg){
|
||
|
return push('chain_start', { seg: seg });
|
||
|
},
|
||
|
chainRemoveHead: function(index, pt){
|
||
|
return push('chain_rem_head', { index: index, pt: pt });
|
||
|
},
|
||
|
chainRemoveTail: function(index, pt){
|
||
|
return push('chain_rem_tail', { index: index, pt: pt });
|
||
|
},
|
||
|
chainNew: function(pt1, pt2){
|
||
|
return push('chain_new', { pt1: pt1, pt2: pt2 });
|
||
|
},
|
||
|
chainMatch: function(index){
|
||
|
return push('chain_match', { index: index });
|
||
|
},
|
||
|
chainClose: function(index){
|
||
|
return push('chain_close', { index: index });
|
||
|
},
|
||
|
chainAddHead: function(index, pt){
|
||
|
return push('chain_add_head', { index: index, pt: pt });
|
||
|
},
|
||
|
chainAddTail: function(index, pt){
|
||
|
return push('chain_add_tail', { index: index, pt: pt, });
|
||
|
},
|
||
|
chainConnect: function(index1, index2){
|
||
|
return push('chain_con', { index1: index1, index2: index2 });
|
||
|
},
|
||
|
chainReverse: function(index){
|
||
|
return push('chain_rev', { index: index });
|
||
|
},
|
||
|
chainJoin: function(index1, index2){
|
||
|
return push('chain_join', { index1: index1, index2: index2 });
|
||
|
},
|
||
|
done: function(){
|
||
|
return push('done');
|
||
|
}
|
||
|
};
|
||
|
return my;
|
||
|
}
|
||
|
|
||
|
module.exports = BuildLog;
|