update wfa module and index search
This commit is contained in:
1 parent
68fafc1e37
commit
7c53cf5efe
3 files changed
+8
-5
No files matched your search
+1
-1
@@ -1 +1 @@
|
|||||||
class WavefrontComponent {constructor () {this.lo = [0]; this.hi = [0]; this.W = []; this.A = []; }getVal (score, k) {if (this.W[score] !== undefined && this.W[score][k] !== undefined) {return this.W[score][k];}else {return NaN;}}setVal (score, k, val) {if (this.W[score]) {this.W[score][k] = val;}else {this.W[score] = [];this.W[score][k] = val;}}getTraceback (score, k) {if (this.A[score] !== undefined && this.A[score][k] !== undefined) {return this.A[score][k];}else {return undefined;}}setTraceback (score, k, traceback) {if (this.A[score]) {this.A[score][k] = traceback;}else {this.A[score] = [];this.A[score][k] = traceback;}}getHi (score) {const hi = this.hi[score];return isNaN(hi) ? 0 : hi;}setHi (score, hi) {this.hi[score] = hi;}getLo (score) {const lo = this.lo[score];return isNaN(lo) ? 0 : lo;}setLo (score, lo) {this.lo[score] = lo;}toString () {const traceback_str = ["OI", "EI", "OD", "ED", "SB", "IN", "DL", "EN"];let s = "<";let min_lo = Infinity;let max_hi = -Infinity;for (let i = 0; i < this.W.length; i++) {const lo = this.lo[i];const hi = this.hi[i];if (lo < min_lo) {min_lo = lo;}if (hi > max_hi) {max_hi = hi;}}for (let k = min_lo; k <= max_hi; k++) {s += FormatNumberLength(k, 2);if (k < max_hi) {s += "|";}}s += ">\t<";for (let k = min_lo; k <= max_hi; k++) {s += FormatNumberLength(k, 2);if (k < max_hi) {s += "|";}}s += ">\n";for (let i = 0; i < this.W.length; i++) {s += "[";const lo = this.lo[i];const hi = this.hi[i];for (let k = min_lo; k <= max_hi; k++) {if (this.W[i] !== undefined && this.W[i][k] !== undefined && !isNaN(this.W[i][k])) {s += FormatNumberLength(this.W[i][k], 2);}else if (k < lo || k > hi) {s += "--";}else {s += " ";}if (k < max_hi) {s += "|";}}s += "]\t[";for (let k = min_lo; k <= max_hi; k++) {if (this.A[i] !== undefined && this.A[i][k] !== undefined) {s += traceback_str[this.A[i][k].toString()];}else if (k < lo || k > hi) {s += "--";}else {s += " ";}if (k < max_hi) {s += "|";}}s += "]\n";}return s;}}const traceback = {OpenIns: 0,ExtdIns: 1,OpenDel: 2,ExtdDel: 3,Sub: 4,Ins: 5,Del: 6,End: 7};function FormatNumberLength (num, length) {let r = "" + num;while (r.length < length) {r = " " + r;}return r;}function min (args) {args.forEach((el, idx, arr) => {arr[idx] = isNaN(el) ? Infinity : el;});const min = Math.min.apply(Math, args);return min === Infinity ? NaN : min;}function max (args) {args.forEach((el, idx, arr) => {arr[idx] = isNaN(el) ? -Infinity : el;});const max = Math.max.apply(Math, args);return max === -Infinity ? NaN : max;}function argmax (args) {const val = max(args);return args.indexOf(val);}export default function wfAlign (s1, s2, penalties, doCIGAR = false) {const n = s1.length;const m = s2.length;const A_k = m - n;const A_offset = m;let score = 0;const M = new WavefrontComponent();M.setVal(0, 0, 0);M.setHi(0, 0);M.setLo(0, 0);M.setTraceback(0, 0, traceback.End);const I = new WavefrontComponent();const D = new WavefrontComponent();while (true) {wfExtend(M, s1, n, s2, m, score);if (M.getVal(score, A_k) >= A_offset) {break;}score++;wfNext(M, I, D, score, penalties);}let CIGAR = null;if (doCIGAR) {CIGAR = wfBacktrace(M, I, D, score, penalties, A_k, s1, s2);}return { score, CIGAR };}function wfExtend (M, s1, n, s2, m, score) {const lo = M.getLo(score);const hi = M.getHi(score);for (let k = lo; k <= hi; k++) {let v = M.getVal(score, k) - k;let h = M.getVal(score, k);if (isNaN(v) || isNaN(h)) {continue;}while (s1[v] === s2[h]) {M.setVal(score, k, M.getVal(score, k) + 1);v++;h++;if (v > n || h > m) {break;}}}}function wfNext (M, I, D, score, penalties, do_traceback) {const x = penalties.x;const o = penalties.o;const e = penalties.e;const lo = min([M.getLo(score - x), M.getLo(score - o - e), I.getLo(score - e), D.getLo(score - e)]) - 1;const hi = max([M.getHi(score - x), M.getHi(score - o - e), I.getHi(score - e), D.getHi(score - e)]) + 1;M.setHi(score, hi);I.setHi(score, hi);D.setHi(score, hi);M.setLo(score, lo);I.setLo(score, lo);D.setLo(score, lo);for (let k = lo; k <= hi; k++) {I.setVal(score, k, max([M.getVal(score - o - e, k - 1),I.getVal(score - e, k - 1)]) + 1);I.setTraceback(score, k, [traceback.OpenIns, traceback.ExtdIns][argmax([M.getVal(score - o - e, k - 1),I.getVal(score - e, k - 1)])]);D.setVal(score, k, max([M.getVal(score - o - e, k + 1),D.getVal(score - e, k + 1)]));D.setTraceback(score, k, [traceback.OpenDel, traceback.ExtdDel][argmax([M.getVal(score - o - e, k + 1),D.getVal(score - e, k + 1)])]);M.setVal(score, k, max([M.getVal(score - x, k) + 1,I.getVal(score, k),D.getVal(score, k)]));M.setTraceback(score, k, [traceback.Sub, traceback.Ins, traceback.Del][argmax([M.getVal(score - x, k) + 1,I.getVal(score, k),D.getVal(score, k)])]);}}function wfBacktrace (M, I, D, score, penalties, A_k, s1, s2) {const traceback_CIGAR = ["I", "I", "D", "D", "X", "", "", ""];const x = penalties.x;const o = penalties.o;const e = penalties.e;let CIGAR_rev = ""; let tb_s = score; let tb_k = A_k; let current_traceback = M.getTraceback(tb_s, tb_k);let done = false;while (!donLine truncated
|
var A=a=>typeof a==='number';(()=>{if(typeof global!=='undefined'){}else if(typeof window!=='undefined')window.global=window;else if(typeof self!=='undefined')self.global=self;else throw Error('cannot export Go (neither global, window nor self is defined)');(!global.require&&typeof require!=='undefined')&&(global.require=require);(!global.fs&&global.require)&&(global.fs=require('node:fs'));var B=()=>{const _a=Error('not implemented');_a.code='ENOSYS';return _a},F=[];if(!global.fs){let D='';global.fs={constants:{O_WRONLY:-1,O_RDWR:-1,O_CREAT:-1,O_TRUNC:-1,O_APPEND:-1,O_EXCL:-1},writeSync(_A,_b){D+=d.decode(_b);var _C=D.lastIndexOf('\n');_C!=-1&&(console.log(D.substr(0,_C)),D=D.substr(_C+1));return _b.length},write(E,_B,aA,_d,_e,_f){if(aA!==0||_d!==_B.length||_e!==null){_f(B());return}_f(null,this.writeSync(E,_B))},chmod(aB,aC,aD){aD(B())},chown(aE,aF,aG,_D){_D(B())},close(aH,aI){aI(B())},fchmod(aJ,aK,aL){aL(B())},fchown(aM,aN,aO,aP){aP(B())},fstat(aQ,aR){aR(B())},fsync(aS,aT){aT(null)},ftruncate(aU,aV,aW){aW(B())},lchown(aX,aY,aZ,bA){bA(B())},link(bB,bC,bD){bD(B())},lstat(bE,bF){bF(B())},mkdir(bG,bH,bI){bI(B())},open(bJ,bK,bL,bM){bM(B())},read(bN,bO,bP,bQ,_E,_F){_F(B())},readdir(bR,bS){bS(B())},readlink(bT,bU){bU(B())},rename(bV,bW,bX){bX(B())},rmdir(bY,bZ){bZ(B())},stat(cA,cB){cB(B())},symlink(cC,cD,cE){cE(B())},truncate(cF,cG,cH){cH(B())},unlink(cI,cJ){cJ(B())},utimes(cK,cL,cM,cN){cN(B())}}}!global.process&&(global.process={getuid(){return -1},getgid(){return -1},geteuid(){return -1},getegid(){return -1},getgroups(){throw B()},pid:-1,ppid:-1,umask(){throw B()},cwd(){throw B()},chdir(){throw B()}});if(!global.crypto){var C=require('node:crypto');global.crypto={getRandomValues(b){C.randomFillSync(b)}}}!global.performance&&(global.performance={now(){const[cO,cP]=process.hrtime();return cO*1000+cP/1000000}});!global.TextEncoder&&(global.TextEncoder=require('node:util').TextEncoder);!global.TextDecoder&&(global.TextDecoder=require('node:util').TextDecoder);var _c=new TextEncoder('utf-8');var d=new TextDecoder('utf-8');let e=new DataView(new ArrayBuffer(8));global.Go=class{constructor(){this._callbackTimeouts=new Map();this._nextCallbackTimeoutID=1;var cQ=()=>new DataView(this._inst.exports.memory.buffer),cR=cW=>{e.setBigInt64(0,cW,!0);const f=e.getFloat64(0,!0);if(f===0)return;if(!isNaN(f))return f;const cX=cW&0xffffffffn;return this._values[cX]},cS=cY=>{return cR(cQ().getBigUint64(cY,!0))},cT=v=>{const cZ=0x7FF80000n;if(A(v)){if(isNaN(v))return cZ<<32n;if(v===0)return (cZ<<32n)|1n;e.setFloat64(0,v,!0);return e.getBigInt64(0,!0)}switch(v) {case void 0:return 0n;case null:return (cZ<<32n)|2n;case !0:return (cZ<<32n)|3n;case !1:return (cZ<<32n)|4n}let dA=this._ids.get(v);if(dA===void 0){dA=this._idPool.pop();dA===void 0&&(dA=BigInt(this._values.length));this._values[dA]=v;this._goRefCounts[dA]=0;this._ids.set(v,dA)}this._goRefCounts[dA]++;let dB=1n;switch(typeof v) {case 'string':dB=2n;break;case 'symbol':dB=3n;break;case 'function':dB=4n;break}return dA|((cZ|dB)<<32n)},cU=(dC,v)=>{cQ().setBigUint64(dC,cT(v),!0)},cV=(dD,dE,dF)=>new Uint8Array(this._inst.exports.memory.buffer, dD, dE),G=(dG,dH,dI)=>{const a=Array(dH);for(let i=0;i<dH;i++)a[i]=cS(dG+i*8);return a},h=(dJ,dK)=>d.decode(new DataView(this._inst.exports.memory.buffer, dJ, dK)),I=Date.now()-performance.now();this.importObject={wasi_snapshot_preview1:{fd_write:function(dL,dM,dN,dO){let dP=0;if(dL==1)for(let dQ=0;dQ<dN;dQ++){let dR=dM+dQ*8;let dS=cQ().getUint32(dR+0,!0);let dT=cQ().getUint32(dR+4,!0);dP+=dT;for(let i=0;i<dT;i++){let c=cQ().getUint8(dS+i);if(c==13){}else if(c==10){F=[];console.log(d.decode(new Uint8Array(F)))}else F.push(c)}}else console.error('invalid file descriptor:',dL);cQ().setUint32(dO,dP,!0);return 0},fd_close:()=>0,fd_fdstat_get:()=>0,fd_seek:()=>0,'proc_exit':dU=>{if(global.process)process.exit(dU);else throw `trying to exit with code ${dU}`},random_get:(dV,dW)=>(crypto.getRandomValues(cV(dV,dW)),0)},gojs:{'runtime.ticks':()=>I+performance.now(),'runtime.sleepTicks':dX=>setTimeout(this._inst.exports.go_scheduler,dX),'syscall/js.finalizeRef':dY=>{var dZ=cQ().getUint32(cR(dY),!0);this._goRefCounts[dZ]--;if(this._goRefCounts[dZ]===0){var v=this._values[dZ];this._values[dZ]=null;this._ids.delete(v);this._idPool.push(dZ)}},'syscall/js.stringVal':(eA,eB)=>{return cT(h(eA,eB))},'syscall/js.valueGet':(eC,eD,eE)=>{return cT(Reflect.get(cR(eC),h(eD,eE)))},'syscall/js.valueSet':(eF,eG,eH,eI)=>{Reflect.set(cR(eF),h(eG,eH),cR(eI))},'syscall/js.valueDelete':(eJ,eK,eL)=>{Reflect.deleteProperty(cR(eJ),h(eK,eL))},'syscall/js.valueIndex':(eM,i)=>cT(Reflect.get(cR(eM),i)),'syscall/js.valueSetIndex':(eN,i,eO)=>Reflect.set(cR(eN),i,cR(eO)),'syscall/js.valueCall':(eP,eQ,eR,eS,eT,eU,_g)=>{var v=cR(eQ),_i=h(eR,eS),j=G(eT,eU,_g);try{var m=Reflect.get(v,_i);cU(eP,Reflect.apply(m,v,j));cQ().setUint8(eP+8,1)}catch(eV){cU(eP,eV);cQ().setUint8(eP+8,0)}},'syscall/js.valueInvoke':(eW,eX,eY,eZ,fA)=>{try{var v=cR(eX),_G=G(eY,eZ,fA);cU(eW,Reflect.apply(v,void 0,_G)Line truncated
|
||||||
Binary file not shown.
+7
-4
@@ -1,7 +1,7 @@
|
|||||||
import { requestPVE, requestAPI, goToPage, setTitleAndHeader, setAppearance, getSearchSettings, goToURL, instancesConfig, nodesConfig, setSVGSrc, setSVGAlt } from "./utils.js";
|
import { requestPVE, requestAPI, goToPage, setTitleAndHeader, setAppearance, getSearchSettings, goToURL, instancesConfig, nodesConfig, setSVGSrc, setSVGAlt } from "./utils.js";
|
||||||
import { alert, dialog } from "./dialog.js";
|
import { alert, dialog } from "./dialog.js";
|
||||||
import { setupClientSync } from "./clientsync.js";
|
import { setupClientSync } from "./clientsync.js";
|
||||||
import wfAlign from "../modules/wfa.js";
|
import wfaInit from "../modules/wfa.js";
|
||||||
import { PVE } from "../vars.js";
|
import { PVE } from "../vars.js";
|
||||||
|
|
||||||
class InstanceCard extends HTMLElement {
|
class InstanceCard extends HTMLElement {
|
||||||
@@ -212,7 +212,7 @@ class InstanceCard extends HTMLElement {
|
|||||||
|
|
||||||
handleConfigButton () {
|
handleConfigButton () {
|
||||||
if (!this.actionLock && this.status === "stopped") { // if the action lock is false, and the node is stopped, then navigate to the config page with the node info in the search query
|
if (!this.actionLock && this.status === "stopped") { // if the action lock is false, and the node is stopped, then navigate to the config page with the node info in the search query
|
||||||
goToPage("config.html", { node: this.node.name, type: this.type, vmid: this.vmid });
|
goToPage("instance.html", { node: this.node.name, type: this.type, vmid: this.vmid });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -271,6 +271,8 @@ async function init () {
|
|||||||
goToPage("login.html");
|
goToPage("login.html");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
wfaInit("modules/wfa.wasm");
|
||||||
|
|
||||||
document.querySelector("#instance-add").addEventListener("click", handleInstanceAdd);
|
document.querySelector("#instance-add").addEventListener("click", handleInstanceAdd);
|
||||||
document.querySelector("#vm-search").addEventListener("input", populateInstances);
|
document.querySelector("#vm-search").addEventListener("input", populateInstances);
|
||||||
|
|
||||||
@@ -329,8 +331,9 @@ async function populateInstances () {
|
|||||||
};
|
};
|
||||||
criteria = (item, query) => {
|
criteria = (item, query) => {
|
||||||
// lower is better
|
// lower is better
|
||||||
const { score, CIGAR } = wfAlign(query, item, penalties, true);
|
const { score, CIGAR } = global.wfAlign(query, item, penalties, true);
|
||||||
return { score: score / item.length, alignment: CIGAR };
|
const alignment = global.DecodeCIGAR(CIGAR)
|
||||||
|
return { score: score / item.length, alignment: alignment };
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
sortInstances(criteria, searchQuery);
|
sortInstances(criteria, searchQuery);
|
||||||
|
|||||||
Reference in new issue
Block a user