diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index a744834..6a0d1bd 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -17,7 +17,7 @@ jobs: - uses: actions/checkout@v4 - uses: actions/setup-python@v5 with: - python-version: '3.11' + python-version: "3.11" - name: Install Python dependencies run: | pip install sphinx myst-parser pydata-sphinx-theme sphinx-js diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml new file mode 100644 index 0000000..c3fd097 --- /dev/null +++ b/.github/workflows/test.yml @@ -0,0 +1,20 @@ +name: Run Tests + +on: + push: + branches: [main] + pull_request: + branches: [main] + +jobs: + test: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version: "20" + - name: Install dependencies + run: npm ci || npm install + - name: Run tests + run: node test_gs.mjs diff --git a/README.md b/README.md index 02c1690..cbda890 100644 --- a/README.md +++ b/README.md @@ -15,5 +15,3 @@ node bench.mjs dpsv.trx ## Documentation Full documentation is available at (GitHub Pages URL). - - diff --git a/bench.mjs b/bench.mjs index 4c51cee..9ea531d 100644 --- a/bench.mjs +++ b/bench.mjs @@ -7,70 +7,80 @@ import * as streamline from "./streamlineIO.mjs"; import * as fs from "fs"; async function main() { - let argv = process.argv.slice(2); - let argc = argv.length; - if (argc < 1) { - console.log("arguments required: 'node bench.mjs dpsv.trx'") - return - } - //check input filename - let fnm = argv[0]; - if (!fs.existsSync(fnm)) { - console.log("Unable to find NIfTI: " + fnm); - return - } - let re = /(?:\.([^.]+))?$/; - let ext = re.exec(fnm)[1]; + let argv = process.argv.slice(2); + let argc = argv.length; + if (argc < 1) { + console.log("arguments required: 'node bench.mjs dpsv.trx'"); + return; + } + //check input filename + let fnm = argv[0]; + if (!fs.existsSync(fnm)) { + console.log("Unable to find file: " + fnm); + return; + } + let re = /(?:\.([^.]+))?$/; + let ext = re.exec(fnm)[1]; + ext = ext.toUpperCase(); + if (ext === "GZ") { + ext = re.exec(fnm.slice(0, -3))[1]; // img.trk.gz -> img.trk ext = ext.toUpperCase(); - if (ext === 'GZ') { - ext = re.exec(fnm.slice(0, -3))[1]; // img.trk.gz -> img.trk - ext = ext.toUpperCase(); - } - let obj = []; - let d = Date.now(); - let nrepeats = 11; //11 iterations, ignore first - for (let i = 0; i < nrepeats; i++) { - if (i == 1) d = Date.now(); //ignore first run for interpretting/disk - if (ext === "FIB" || ext === "TT" ||ext === "VTK" || ext === "TCK" || ext === "TRK" || ext === "ZSTD" || ext === "ZST") { - const buf = fs.readFileSync(fnm); - if (ext === "TCK") - obj = streamline.readTCK(new Uint8Array(buf).buffer); - else if (ext === "TT") - obj = streamline.readTT(new Uint8Array(buf).buffer); - else if (ext === "FIB" || ext === "VTK") - obj = streamline.readVTK(new Uint8Array(buf).buffer); - else - obj = streamline.readTRK(new Uint8Array(buf).buffer); - } else { - obj = await streamline.readTRX(fnm, true); - } - } - let ms = Date.now() - d; - //find file size: - let dat = fs.readFileSync(fnm); - console.log(`${fnm}\tSize\t${dat.length}\tTime\t${ms}`); - console.log("Vertices:" + obj.pts.length / 3); - console.log(" First vertex (x,y,z):" + obj.pts[0] + ',' + obj.pts[1] + ',' + obj.pts[2]); - console.log("Streamlines: " + (obj.offsetPt0.length - 1)); //-1 due to fence post - console.log(" Vertices in first streamline: " + (obj.offsetPt0[1] - obj.offsetPt0[0])); - if (obj.hasOwnProperty("dpg")) { - console.log("dpg (data_per_group) items: " + obj.dpg.length); - for (let i = 0; i < obj.dpg.length; i++) - console.log(" '" + obj.dpg[i].id + "' items: " + obj.dpg[i].vals.length); - } - if (obj.hasOwnProperty("dps")) { - console.log("dps (data_per_streamline) items: " + obj.dps.length); - for (let i = 0; i < obj.dps.length; i++) - console.log(" '" + obj.dps[i].id + "' items: " + obj.dps[i].vals.length); - } - if (obj.hasOwnProperty("dpv")) { - console.log("dpv (data_per_vertex) items: " + obj.dpv.length); - for (let i = 0; i < obj.dpv.length; i++) - console.log(" '" + obj.dpv[i].id + "' items: " + obj.dpv[i].vals.length); - } - if (obj.hasOwnProperty("header")) { - console.log("Header (header.json):"); - console.log(obj.header); + } + let obj = []; + let d = Date.now(); + let nrepeats = 11; //11 iterations, ignore first + for (let i = 0; i < nrepeats; i++) { + if (i == 1) d = Date.now(); //ignore first run for interpretting/disk + if ( + ext === "FIB" || + ext === "TT" || + ext === "VTK" || + ext === "TCK" || + ext === "TRK" || + ext === "ZSTD" || + ext === "ZST" + ) { + const buf = fs.readFileSync(fnm); + if (ext === "TCK") obj = streamline.readTCK(new Uint8Array(buf).buffer); + else if (ext === "TT") + obj = streamline.readTT(new Uint8Array(buf).buffer); + else if (ext === "FIB" || ext === "VTK") + obj = streamline.readVTK(new Uint8Array(buf).buffer); + else obj = streamline.readTRK(new Uint8Array(buf).buffer); + } else { + obj = await streamline.readTRX(fnm, true); } + } + let ms = Date.now() - d; + //find file size: + let dat = fs.readFileSync(fnm); + console.log(`${fnm}\tSize\t${dat.length}\tTime\t${ms}`); + console.log("Vertices:" + obj.pts.length / 3); + console.log( + " First vertex (x,y,z):" + obj.pts[0] + "," + obj.pts[1] + "," + obj.pts[2], + ); + console.log("Streamlines: " + (obj.offsetPt0.length - 1)); //-1 due to fence post + console.log( + " Vertices in first streamline: " + (obj.offsetPt0[1] - obj.offsetPt0[0]), + ); + if (obj.hasOwnProperty("dpg")) { + console.log("dpg (data_per_group) items: " + obj.dpg.length); + for (let i = 0; i < obj.dpg.length; i++) + console.log(" '" + obj.dpg[i].id + "' items: " + obj.dpg[i].vals.length); + } + if (obj.hasOwnProperty("dps")) { + console.log("dps (data_per_streamline) items: " + obj.dps.length); + for (let i = 0; i < obj.dps.length; i++) + console.log(" '" + obj.dps[i].id + "' items: " + obj.dps[i].vals.length); + } + if (obj.hasOwnProperty("dpv")) { + console.log("dpv (data_per_vertex) items: " + obj.dpv.length); + for (let i = 0; i < obj.dpv.length; i++) + console.log(" '" + obj.dpv[i].id + "' items: " + obj.dpv[i].vals.length); + } + if (obj.hasOwnProperty("header")) { + console.log("Header (header.json):"); + console.log(obj.header); + } } -main().then(() => console.log('Done')) \ No newline at end of file +main().then(() => console.log("Done")); diff --git a/docs/_templates/sidebar-nav-global.html b/docs/_templates/sidebar-nav-global.html index b263742..ac150e6 100644 --- a/docs/_templates/sidebar-nav-global.html +++ b/docs/_templates/sidebar-nav-global.html @@ -1,16 +1,11 @@ -