{"version":3,"sources":["helper.ts","const.ts","components/Models/PGlyph.ts","components/Models/ModelPainter.ts","components/Models/index.tsx","components/HypoStatus/HypoPainter.ts","components/HypoStatus/index.tsx","components/HypoInfo/index.tsx","dataService/index.ts","components/Header/index.tsx","components/InfoPanel/index.tsx","components/Overview/index.tsx","App.tsx","serviceWorker.ts","index.tsx"],"names":["getColor","d3","d3ScaleChromatic","getSTD","values","avg","average","avgSquareDiff","map","value","diff","Math","sqrt","data","reduce","sum","length","pairedT","a","b","side","item","idx","n","t","jstat","getText","name","includes","split","flg","percentile","p","m","std","r","log","supportIcon","rejectIcon","questionIcon","dummyIcon","conditionIcon","MODELS","HYPO","info","ANALYSIS","pair","large","support","reject","less","dependHypo","ifReject","ifQuestion","ifSupport","LABELS","THR","widthRatio","headerView","width","window","innerWidth","height","innerHeight","TitleView","margin","top","right","bottom","left","overView","HypoTextView","hypoMatrixView","modelView","pView","PGlyphPainter","viewParams","this","newParams","selector","g","xScale","domain","range","yScale","max","arr","d","line","x","y","append","datum","attr","style","i","from","to","text","toFixed","dir","mean","sd","pdf","push","NormalDist","OverViewPainter","params","details","hasDetails","selectAll","remove","join","enter","_","update","exit","models","detailLinks","detailedModels","filter","d3curve","curve","alpha","linkdata","modelData","compareData","xmin","min","xmax","accScale","modelGroup","err","points","drawDetailLinks","on","toggleDetails","labels","pValueScale","yScaleP","pGroup","pGlyphParams","thr","call","render","Overview","props","painter","ModelPainter","nextProps","painterUpdate","className","transform","React","Component","status","xBand","yBand","getIconPath","getIconColor","undefined","j","Hypothesis","HypoPainter","hypoStatus","anlyList","acc","curr","hypoInfo","hypo","fontWeight","fontSize","fill","textColor","slice","checkResponse","response","fallback","console","error","fetchJSON","filename","axios","get","Option","Select","Header","modelSelector","defaultValue","pSelector","step","onChange","changeTHR","type","position","overflow","backgroundColor","color","padding","darkSelectStyle","InfoPanel","dataset","concept","changeResults","bind","changeConcept","changeData","e","preventDefault","replace","featureSelector","size","datasetSelector","src","lineHeight","htmlType","shape","icon","onClick","METRIC","state","res","re","Array","keys","label","toString","l","modelA","modelB","samplesA","samplesB","results","if","forEach","anly","conclu","hypos","hypoIdx","comp","dependHypoStatus","total","getModeldata","getCompareData","setState","getResults","calculateStatus","App","Boolean","location","hostname","match","ReactDOM","document","getElementById","navigator","serviceWorker","ready","then","registration","unregister"],"mappings":"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","file":"static/js/main.2bd68598.chunk.js","sourcesContent":["import * as d3 from 'd3';\nimport * as d3ScaleChromatic from 'd3-scale-chromatic';\nimport * as jstat from 'jstat';\nimport {OneModel} from 'types'\n\nexport type getColorFunc = (i: number) => string;\n\n\nconst gColor = [\n '#3366cc',\n '#ff9900',\n '#109618',\n '#990099',\n '#dc3912',\n '#0099c6',\n '#dd4477',\n '#66aa00',\n '#b82e2e',\n '#316395',\n '#994499',\n '#22aa99',\n '#aaaa11',\n '#6633cc',\n '#e67300',\n '#8b0707',\n '#651067',\n '#329262',\n '#5574a6',\n '#3b3eac'\n];\n\nexport const getGoogleColor: getColorFunc = (n: number) => gColor[n % gColor.length];\n\nexport const getColor: getColorFunc = d3.scaleOrdinal(d3ScaleChromatic.schemeSet1 as string[]);\n\n\nexport const range = (from: number, to: number, step?: number) => {\n if (step == undefined) {\n step = from < to ? 1 : -1\n }\n let arr = [], curr = from\n while (curr < to) {\n arr.push(curr)\n curr += step\n }\n return arr\n}\n\nexport const curveMaker = (from: [number, number], to: [number, number])=>{\n var dx = Math.abs(from[0] - to[0]),\n dy = Math.abs(from[1] - to[1]),\n dr = Math.sqrt(dx * dx + dy * dy);\n\n return \"M\" + from[0] + \",\" + from[1] + \"A\" + dr + \",\" + dr + \" 0 0,1 \" + to[0] + \",\" + to[1];\n}\n\nexport const curve2Maker = (from: [number, number], to: [number, number])=>{\n var dx = Math.abs(from[0] - to[0]),\n dy = Math.abs(from[1] - to[1]),\n midx = from[0]+0.5*dx,\n midy = from[1]+0.5*dy\n\n return `M ${from[0]}, ${from[1]} C ${midx}, ${midy} M ${midx}, ${midy} C${from[0]}, ${from[1]}`\n}\n\n\n// statistic \n\nexport function getSTD(values: number[]) {\n var avg = average(values);\n\n var squareDiffs = values.map(function (value) {\n var diff = value - avg;\n var sqrDiff = diff * diff;\n return sqrDiff;\n });\n\n var avgSquareDiff = average(squareDiffs);\n\n var stdDev = Math.sqrt(avgSquareDiff);\n return stdDev;\n}\n\nexport function get95conf(values:number[]):number{\n let std = getSTD(values)\n\n return 1.96*std/Math.sqrt(values.length)\n}\n\nfunction average(data: number[]) {\n var sum = data.reduce(function (sum, value) {\n return sum + value;\n }, 0);\n\n var avg = sum / data.length;\n return avg;\n}\n\n\nexport const pairedT = (a:number[], b:number[], side:1|2):number=>{\n let diff = a.map((item,idx)=>item-b[idx]),\n n = diff.length,\n diffMean = average(diff),\n sd = getSTD(diff),\n se = sd/Math.sqrt(n),\n t= diffMean/se\n\n return jstat.ttest(t, n-1, side)\n\n}\n\n// ******************\n// \n// ******************\n\nexport function getText(name: string) {\n if (name.includes('_')){\n name = name.split('_')[1]\n }\n let flg = name.split('')\n return `R(${flg[0] == '0' ? \"M\" : \"M+\"}, ${flg[1] == '0' ? 'D' : \"D+\"})`\n\n}\n\n// *******************\n// \n// *******************\nexport function NormalDist(mean:number, sd:number):Array<[number, number]> {\n let data = [];\n for (var i = mean - 4 * sd; i < mean + 4 * sd; i += 0.1) {\n let q = i\n let p = jstat.normal.pdf(i, mean, sd);\n let arr: [number, number] = [q,p]\n data.push(arr);\n };\n return data;\n}\n\nexport function percentile(p:number, m:number, std:number):number {\n\n // P: [0, 0.5]\n // return: z so that pro(x>z) = p\n\n var a0= 2.5066282, a1=-18.6150006, a2= 41.3911977, a3=-25.4410605,\n b1=-8.4735109, b2= 23.0833674, b3=-21.0622410, b4= 3.1308291,\n c0=-2.7871893, c1= -2.2979648, c2= 4.8501413, c3= 2.3212128,\n d1= 3.5438892, d2= 1.6370678, r, z;\n\n if (p<0.08) {\n r=Math.sqrt(-Math.log(p));\n z=(((c3*r+c2)*r+c1)*r+c0)/((d2*r+d1)*r+1);\n } else {\n p = 0.5-p\n r=p*p;\n z=p*(((a3*r+a2)*r+a1)*r+a0)/((((b4*r+b3)*r+b2)*r+b1)*r+1);\n }\n\n return z*std+m\n}\n\n\n// *************\n// p value -> hypo reationship\n// **************\n// export function getHypo(ma:OneModel,mb:OneModel, p:number, th:number):{F:number|null, M:number|null, comb:'and'|'or'|null}{\n// let flgA = ma.name.split('_')[1], flgB = mb.name.split('_')[1]\n// let exp = [flgA, flgB].sort().reverse()\n// // swap\n// if (exp[0]===mb.name.split('_')[1]){\n// [ma, mb] = [mb, ma]\n// }\n// switch(exp.join('_')){\n// case '11_00':\n// if (p>th) return {F:0, M:1, comb:'or'}\n// else if (ma.avg>mb.avg) return {F:1, M:0, comb:'and'}\n// else if (ma.avgth) return {F:0, M:null, comb:null}\n// else if (ma.avg>mb.avg) return {F:1, M:null, comb:null}\n// else if (ma.avgth) return {F:0, M:null, comb:null}\n// else if (ma.avg>mb.avg) return {F:0, M:1, comb:'and'}\n// else if (ma.avgth) return {F:null, M:null, comb:null}\n// else if (ma.avg>mb.avg) return {F:null, M:null, comb:null}\n// else if (ma.avgth) return {F:0, M:1, comb:'or'}\n// else if (ma.avg>mb.avg) return {F:1, M:0, comb:'and'}\n// else if (ma.avgth) return {F:0, M:null, comb:null}\n// else if (ma.avg>mb.avg) return {F:0, M:1, comb:'and'}\n// else if (ma.avg{\n static m = 0; static std = 1\n static arr = NormalDist(PGlyphPainter.m, PGlyphPainter.std)\n private viewParams: ViewParams;\n constructor(viewParams: ViewParams) {\n this.viewParams = viewParams\n }\n update(newParams: Partial) {\n this.viewParams = { ...this.viewParams, ...newParams }\n return this\n }\n render(selector:d3.Selection|d3.Selection) {\n let {width, height, margin} = this.viewParams\n let {m, std} = PGlyphPainter\n \n\n width = width - margin.left-margin.right\n height = height-margin.top-margin.bottom\n\n let g = selector\n\n var xScale = d3.scaleLinear()\n .domain([m-4*std, m+4*std])\n .range([0, width]);\n\n var yScale = d3.scaleLinear()\n .domain([0, Math.max(...PGlyphPainter.arr.map(d=>d[1]))])\n .range([height, 0]);\n\n var line = d3.line()\n .x((d)=>xScale(d[0]))\n .y((d)=>yScale(d[1]))\n\n \n\n g.append('path')\n .datum(PGlyphPainter.arr)\n .attr(\"class\", \"dist\")\n .attr(\"d\", line)\n .style(\"fill\", \"cornflowerblue\")\n \n \n g.append(\"clipPath\") // define a clip path\n .attr(\"id\", (d,i)=>`${d.from}_${d.to}`) // give the clipPath an ID\n .append('rect')\n .attr('class', 'z')\n .attr('x', d=>xScale(percentile(d.p, m, std)))\n .attr('width', d=>width-xScale(percentile(d.p, m, std)))\n .attr('y', 0)\n .attr('height', height)\n .attr('fill','orange')\n .style(\"opacity\", \"0.8\");\n\n g.append('path')\n .attr(\"clip-path\", (d,i)=>`url(#${d.from}_${d.to})`)\n .datum(PGlyphPainter.arr)\n .attr(\"class\", \"dist\")\n .attr(\"d\", line)\n .style(\"fill\", \"orange\")\n\n let text = g.append('text')\n .attr('class', 'pValue')\n \n\n text.append('tspan')\n .text(d => d.p.toFixed(3))\n .attr(\"text-anchor\", 'middle')\n .attr('x', width/2)\n // .attr('x', d => (ratio.p+ratio.model)*width)\n .attr('y', 1.4*height)\n\n \n\n text.append('tspan')\n .text(d => {\n return `${getText(d.from)}${d.dir=='+'?'>':'<'}${getText(d.to)}`\n })\n .attr('x', width/2)\n // .attr('x', d => (ratio.p+ratio.model)*width)\n .attr('y', 15+1.4*height)\n .attr(\"text-anchor\", 'middle')\n\n\n\n return this\n }\n}","import * as d3 from 'd3'\nimport { Painter } from 'components/Painter'\n\nimport { ViewParams, CompareData, Results, Label, Metric, ModelData, OneModel, Ratio } from 'types'\nimport { curveMaker, pairedT, getColor, get95conf, getText } from 'helper'\nimport { LABELS } from 'const'\nimport PGlyphPainter from './PGlyph'\n\nexport interface Data {\n modelData:ModelData,\n compareData: CompareData,\n thr:number\n}\n\nexport interface Params extends Data {\n modelView: ViewParams,\n pView: ViewParams\n }\n\n\nexport default class OverViewPainter implements Painter{\n private params: Params; r: number = 8\n constructor(params: Params) {\n this.params = params\n }\n update(newParams: any) {\n this.params = { ...this.params, ...newParams }\n return this\n }\n \n\n // ************\n // view controllers\n // *************\n toggleDetails(d:OneModel, xScale:d3.ScaleLinear, yScale:d3.ScalePoint){\n let details = d3.select('g.details')\n\n if (d.hasDetails){\n details.selectAll(`circle.detail.R${d.name}`)\n .remove()\n\n d.hasDetails = false\n }else{\n details.selectAll(`circle.detail.R${d.name}`)\n .data(d.arr)\n .join(\n enter=>enter.append('circle')\n .attr('class', (_,i)=>`detail R${d.name} label_${i}`)\n .attr('cx', d=>xScale(d))\n .attr('cy', yScale(d.name)||0),\n \n update=>update\n .attr('cx', d=>xScale(d))\n .attr('cy', yScale(d.name)||0),\n\n exit=>exit.remove()\n )\n .attr('r', this.r*0.8)\n .attr('fill', (d,i)=>getColor(i))\n\n d.hasDetails = true\n } \n\n \n }\n drawDetailLinks(models:ModelData, xScale:d3.ScaleLinear, yScale:d3.ScalePoint){\n let detailLinks = d3.select('g.detailLinks')\n\n let detailedModels = models.filter(d=>d.hasDetails)\n // if (detailedModels.length<2) return\n\n let d3curve = d3.line()\n .curve(d3.curveCatmullRom.alpha(0.5))\n\n detailLinks.selectAll(`path.detailLink`)\n .data(LABELS)\n .join(\n enter=>enter.append('path')\n .attr('class', 'detailLink')\n .attr('d', (_, i)=>{\n let linkdata = detailedModels.map(m=>{return [xScale(m.arr[i]), yScale(m.name)||0] as [number, number]})\n return d3curve(linkdata)\n }),\n\n update => update\n .attr('d', (_, i)=>{\n let linkdata = detailedModels.map(m=>{return [xScale(m.arr[i]), yScale(m.name)||0] as [number, number]})\n return d3curve(linkdata)\n }),\n\n exit=> exit\n .remove()\n )\n .attr('stroke', (_, i)=>getColor(i))\n .attr('fill', 'none')\n .attr('stroke-width', 2)\n\n }\n\n // *********\n // render\n // *********\n render(selector: d3.Selection) {\n selector.selectAll('*').remove()\n\n let { modelView, pView, modelData, compareData } = this.params\n\n // ***********\n // draw model points\n // ***********\n\n\n\n // Set the ranges\n const xmin = Math.min(...modelData.map(d => Math.min(...d.arr))) || 0\n const xmax = Math.max(...modelData.map(d => Math.max(...d.arr))) || 1\n\n let accScale = d3.scaleLinear()\n .range([0, modelView.width-modelView.margin.left-modelView.margin.right])\n .domain([xmin, xmax])\n // .domain([0.7,1])\n\n\n let yScale = d3.scalePoint()\n .range([0, modelView.height])\n .domain(modelData.map(d => d.name))\n\n \n\n\n // **************************\n // models \n // **************************\n\n\n let modelGroup = selector.append('g')\n .attr('class', 'models')\n .attr(\"transform\", `translate(${pView.width+ modelView.margin.left},${pView.margin.top})`)\n\n // // append x axis\n // modelGroup.append(\"g\")\n // .attr(\"transform\", `translate(0,${height})`)\n // .call(d3.axisBottom(accScale))\n\n let std = modelGroup.append('g')\n .attr('class', 'std')\n\n std.selectAll('line.std')\n .data(modelData)\n .join(\n enter => enter.append('line')\n .attr('x1', (d) => accScale(d.avg - d.err))\n .attr('x2', (d) => accScale(d.avg + d.err))\n .attr('y1', (d) => yScale(d.name) || 0)\n .attr('y2', (d) => yScale(d.name) || 0),\n\n update => update\n .attr('x1', (d) => accScale(d.avg - d.err))\n .attr('x2', (d) => accScale(d.avg + d.err))\n .attr('y1', (d) => yScale(d.name) || 0)\n .attr('y2', (d) => yScale(d.name) || 0),\n\n exit=>exit.remove()\n )\n .style('stroke', \"black\")\n\n\n\n\n\n let points = modelGroup.append('g')\n .attr('class', 'points')\n\n d3.select('g.points')\n .append('g')\n .attr('class', 'details')\n\n d3.select('g.points')\n .append('g')\n .attr('class', 'detailLinks')\n\n this.drawDetailLinks(modelData, accScale, yScale)\n\n points.selectAll('circle.point')\n .data(modelData)\n .join(\n enter => enter.append(\"circle\")\n .attr('cx', (d) => accScale(d.avg))\n .attr('cy', (d) => yScale(d.name) || 0),\n\n update => update.attr('cx', (d) => accScale(d.avg))\n .attr('cy', (d) => yScale(d.name) || 0),\n\n exit => exit.remove()\n )\n .attr('class', 'point')\n .attr('r', this.r)\n .attr(\"stroke\", \"black\")\n .attr(\"fill\", \"white\")\n .on('click', (d)=>{\n this.toggleDetails(d, accScale, yScale)\n this.drawDetailLinks(modelData, accScale, yScale)\n })\n\n\n\n let labels = modelGroup.append('g')\n .attr('class', 'labels')\n \n labels.selectAll('.image')\n .data(modelData)\n .join(\n enter => enter.append(\"svg:image\")\n .attr('class', 'image')\n .attr(\"xlink:href\", (d)=>`../data/icon/${getText(d.name)}.png`)\n .attr(\"x\",10)\n .attr('y', (d) => (yScale(d.name) || 0)-2*this.r)\n .attr(\"width\", \"40\")\n .attr(\"height\", \"40\"),\n\n // update => update\n // .attr('x', 0)\n // .attr('y', (d) => (yScale(d.name) || 0)-2*this.r)\n // .text(d => getText(d.name)),\n\n exit => exit.remove()\n )\n .attr('text-anchor', 'start')\n\n labels.selectAll('text.point')\n .data(modelData)\n .join(\n enter => enter.append(\"text\")\n .attr('class', 'label')\n .attr('x', 0)\n // .attr('x',0)\n .attr('y', (d) => (yScale(d.name) || 0)-2*this.r)\n .text(d => getText(d.name)),\n\n update => update\n .attr('x', 0)\n .attr('y', (d) => (yScale(d.name) || 0)-2*this.r)\n .text(d => getText(d.name)),\n\n exit => exit.remove()\n )\n .attr('text-anchor', 'start')\n\n let pointValue = modelGroup.append('g')\n .attr('class', 'values')\n\n pointValue.selectAll('text.value')\n .data(modelData)\n .join(\n enter => enter.append(\"text\")\n .attr('class', 'value')\n .attr('x', (d) => accScale(d.avg) - this.r)\n .attr('y', (d) => (yScale(d.name) || 0) - 2 * this.r)\n .text((d) => d.avg.toFixed(4)),\n\n update => update\n .attr('x', (d) => accScale(d.avg) - this.r)\n .attr('y', (d) => (yScale(d.name) || 0) - 2 * this.r)\n .text((d) => d.avg.toFixed(4)),\n\n exit => exit.remove()\n )\n\n\n // *****************\n // draw p links\n // *******************\n let pValueScale = d3.scaleLinear()\n .domain([Math.min(...compareData.map(d=>d.p)), Math.max(...compareData.map(d=>d.p))])\n .range([2, 0.8])\n\n\n let yScaleP = d3.scaleLinear()\n .range([0, pView.height])\n .domain([0, compareData.length - 1])\n\n let pGroup = selector.append('g')\n .attr('class', 'pValues')\n .attr(\"transform\", `translate(${pView.margin.left},${pView.margin.top})`)\n \n let pGlyphParams = {\n width: yScaleP(1)*1.5,\n height: yScaleP(1)*0.5,\n margin:{top:1, bottom:1, left:1, right:1}\n }\n\n\n pGroup.selectAll('path.pValue')\n .data(compareData)\n .join(\n enter => enter.append('path')\n .attr('class', 'pValue')\n .attr('d', (d, i) => {return `M${pView.width} ${yScale(d.from) || 0} L${pGlyphParams.width*0.5} ${yScaleP(i) || 0}\n L${pView.width} ${yScale(d.to) || 0}`\n }),\n\n update=>update\n .attr('d', (d, i) => {return `M${pView.width} ${yScale(d.from) || 0} L${pGlyphParams.width*0.5} ${yScaleP(i) || 0}\n L${pView.width} ${yScale(d.to) || 0}`\n }),\n\n exit=>exit.remove()\n )\n .attr('fill', 'none')\n .attr('stroke', 'black')\n .attr(\"stroke-dasharray\", (d) => `8, ${d.p > this.params.thr ? 4 : 0}`)\n .attr('stroke-width', d => {\n return pValueScale(d.p)})\n\n // ********************************\n // draw the p value glyph\n // ********************************\n\n // pGroup.selectAll('g.pGlyph')\n // .data(compareData)\n // .join(\n // // enter=>enter.append('g')\n // // .attr('class', 'pGlyph')\n // // .attr('transform', (d,i)=>`translate(${0-pGlyphParams.width/2}, ${yScaleP(i)-pGlyphParams.height*0.8})`)\n // // .call(\n // // selector => new PGlyphPainter(pGlyphParams)\n // // .render(selector)\n // // ),\n // // exit=>exit.remove()\n // enter=>enter.append('circle')\n // .attr('cy', (d,i)=>yScaleP(i)-pGlyphParams.height*0.8+15*d.p)\n // .attr('cx', (d)=>15*d.p)\n // .attr('r', (d)=>15*Math.sqrt(d.p))\n // .attr('stroke', 'black')\n // )\n \n pGroup.selectAll('g.pGlyph')\n .data(compareData)\n .join(\n enter=>enter.append('g')\n .attr('class', 'pGlyph')\n .attr('transform', (d,i)=>`translate(${0-pGlyphParams.width/2}, ${yScaleP(i)-pGlyphParams.height*0.8})`)\n .call(\n selector => new PGlyphPainter(pGlyphParams)\n .render(selector)\n ),\n exit=>exit.remove()\n // enter=>enter.append('circle')\n // .attr('cy', (d,i)=>yScaleP(i)-pGlyphParams.height*0.8+15*d.p)\n // .attr('cx', (d)=>15*d.p)\n // .attr('r', (d)=>15)\n // .attr('stroke', 'black')\n // .attr('fill', 'none')\n )\n \n\n\n return this\n }\n}","import React from 'react';\nimport * as d3 from 'd3';\nimport ModelPainter, {Params} from '../Models/ModelPainter';\nimport {HypoTextView, modelView, pView} from 'const'\nimport {CompareData, ModelData} from 'types';\n\ninterface Props {\n modelData: ModelData,\n compareData: CompareData,\n thr:number\n}\n\n\nexport default class Overview extends React.Component{\n private painter:ModelPainter\n constructor(props:any){\n super(props)\n let params = {\n modelView,\n pView,\n ...this.props,\n }\n this.painter = new ModelPainter(params)\n }\n painterUpdate(newParams: Partial){\n this.painter.update(newParams)\n .render(d3.select('g.modelPainter'))\n }\n // componentDidMount(){\n // this.getJSON('data/results.json')\n\n // }\n shouldComponentUpdate(nextProps:Props){\n this.painterUpdate(nextProps)\n return false\n }\n render(){\n return \n }\n}","import * as d3 from 'd3'\nimport { Painter } from 'components/Painter'\nimport {ViewParams, StatuMatrix, STATUS} from 'types';\nimport { HYPO, questionIcon, rejectIcon, supportIcon, conditionIcon, dummyIcon, curveMaker, ANALYSIS} from 'helper';\n\nexport interface Data {\n status: StatuMatrix\n}\nexport interface Params extends ViewParams, Data {\n }\n\n\nexport default class PGlyphPainter implements Painter{\n private params: Params; r: number = 8\n constructor(params: Params) {\n this.params = params\n }\n\n update(newParams: Partial) {\n this.params = { ...this.params, ...newParams }\n return this\n }\n\n render(selector:d3.Selection) {\n let {status, height, width, margin} = this.params\n // height = height - margin.top - margin.bottom\n width = width - margin.left - margin.right\n\n\n // let yScale = d3.scaleLinear()\n // .domain([0, status.length+1])\n // .range([0, height])\n\n let xBand = width/(HYPO.length), yBand = height/(ANALYSIS.length-1)\n\n let hypoGroups = selector.selectAll('g.hypo')\n .data(status)\n .join(\n enter => enter.append('g')\n .attr('class', 'hypo')\n .attr('transform',(_,i)=>`translate(${xBand *i}, ${yBand*0.5})`),\n\n update =>update\n .attr('class', 'hypo')\n .attr('transform',(_,i)=>`translate(${xBand *i}, ${yBand*0.5})`)\n )\n\n\n \n\n // draw icon\n hypoGroups.selectAll('path.statusIcon')\n .data(d=>d)\n .join(\n enter => enter.append('path')\n .attr('class', 'statusIcon')\n .attr('d', d=>getIconPath(d))\n .attr('fill', d=>getIconColor(d))\n .attr('stroke', d=>(d.status==undefined)?'gray':'none')\n .attr('stroke-width', '2')\n .attr('transform', (_,j)=>`translate(${0}, ${yBand *j}) `),\n\n update=>update\n .attr('d', d=>getIconPath(d))\n .attr('fill', d=>getIconColor(d))\n .attr('stroke', d=>(d.status==undefined)?'gray':'none')\n .attr('stroke-width', '2')\n .attr('transform', (_,j)=>`translate(${0}, ${yBand*j}) `),\n\n exit => exit.remove()\n )\n\n // // draw dependent hypo\n // hypoGroups.selectAll('path.ifHypo')\n // .data((d, i)=>d.map((anly)=>{\n // return {anly, hypoIdx:i}\n // }))\n // .join(\n // enter=>enter.append('path')\n // .attr('class', 'ifHypo')\n // .attr('d', (d,j)=>{\n // let {anly, hypoIdx} = d\n // // return anly.if?`M${xBand*status[0].length} ${yBand*(anly.if-1-hypoIdx+0.5)+xBand*0.5} L${xBand*(j+0.5)} ${yBand*(0.5)}`:''\n // let dependHypoPos:[number, number] = [xBand*((anly.if||0)-1-hypoIdx), yBand*(status[0].length-0.5)],\n // currentAnalyPos:[number, number] = [0, yBand*(j+0.5)]\n // // if ((anly.if||0)hypoIdx) return curveMaker(dependHypoPos, currentAnalyPos) \n // else return curveMaker(currentAnalyPos, dependHypoPos)\n // }),\n\n // update=>update\n // .attr('d', (d,j)=>{\n // let {anly, hypoIdx} = d\n // // return anly.if?`M${xBand*status[0].length} ${yBand*(anly.if-1-hypoIdx+0.5)+xBand*0.5} L${xBand*(j+0.5)} ${yBand*(0.5)}`:''\n // let dependHypoPos:[number, number] = [xBand*((anly.if||0)-1-hypoIdx), yBand*(status[0].length-0.5)],\n // currentAnalyPos:[number, number] = [0, yBand*(j+0.5)]\n // // if ((anly.if||0)hypoIdx) return curveMaker(dependHypoPos, currentAnalyPos) \n // else return curveMaker(currentAnalyPos, dependHypoPos)\n // }),\n // exit => exit.remove()\n\n // )\n // .attr('stroke', 'black')\n // .attr('fill', 'none')\n\n\n return this\n }\n\n}\n\nfunction getIconPath(d: StatuMatrix[0][0]){\n switch (d.status){\n case 1: return supportIcon \n case 0: return questionIcon \n case -1: return rejectIcon\n case 'if': return conditionIcon\n default: return dummyIcon\n }\n}\n\nfunction getIconColor(d: StatuMatrix[0][0]){\n switch (d.status){\n case 1: return 'cornflowerblue'; \n case 0: return 'gray';\n case -1: return 'orange';\n case 'if': return 'black'\n default: return 'none';\n }\n}\n","import * as React from \"react\"\nimport * as d3 from 'd3'\nimport { CompareData, StatuMatrix } from 'types'\nimport { HYPO, ANALYSIS } from 'helper'\nimport { hypoMatrixView, HypoTextView} from 'const'\nimport \"./index.css\"\nimport HypoPainter, { Params } from './HypoPainter'\n\n\n\ninterface Props {\n status: StatuMatrix\n}\n// const THR = 0.02\n\nexport default class Hypothesis extends React.Component {\n private painter: HypoPainter\n constructor(props: any) {\n super(props)\n let { height, margin, width } = hypoMatrixView\n let { status} = this.props\n\n \n let params = {\n height,\n width,\n margin,\n status\n }\n this.painter = new HypoPainter(params)\n }\n painterUpdate(newParams: Partial) {\n this.painter.update(newParams)\n .render(d3.select('g.hypos'))\n }\n componentWillUpdate(nextProps: Props) {\n let params = { status: nextProps.status }\n this.painterUpdate(params)\n return false\n }\n componentDidMount() {\n this.painter.render(d3.select('g.hypos'))\n }\n render() {\n let { margin} = hypoMatrixView\n\n\n\n return \n }\n}","import * as React from \"react\"\nimport * as d3 from 'd3'\nimport { StatuMatrix } from 'types'\nimport { HYPO } from 'helper'\nimport { HypoTextView } from 'const'\n\n\n\ninterface Props {\n status: StatuMatrix\n}\n\n\nexport default class Hypothesis extends React.Component {\n\n textColor(status:number){\n // if (status==0) return 'grey';\n // else if(status>0) return 'cornflowerblue';\n // else if (status<0) return 'orange';\n\n if (status==0) return '#7a7a7a';\n else if(status>0) return '#000';\n else if (status<0) return '#c0c0c0';\n }\n\n render() {\n let { height, width, margin } = HypoTextView\n let {status} = this.props\n\n let hypoStatus = status.map(anlyList=>{\n return anlyList.filter(d=>typeof(d.status)=='number').reduce((acc, curr)=>acc+ (curr.status as number), 0)\n })\n\n width = width - margin.left - margin.right\n height = height - margin.top - margin.bottom\n\n let xScale = d3\n .scaleLinear()\n .domain([0, HYPO.length])\n .range([0, width])\n\n\n let hypoInfo = HYPO.map((hypo,i)=>{\n return \n \n {`H${i+1}`}\n \n \n {hypo.info.slice(0, hypo.info.length/2+1)}\n \n \n {hypo.info.slice(hypo.info.length/2+1)}\n \n \n })\n\n \n return \n {hypoInfo}\n \n }\n}","import axios, { AxiosResponse } from 'axios';\nimport {AccuracyData, Results} from 'types'\n\nfunction checkResponse(response: AxiosResponse, fallback: T): T {\n if (response.status === 200)\n return response.data;\n console.error(`Data fetching error: ${response.status}`);\n console.error(response);\n throw response;\n}\n\n\nexport async function fetchCSV(filename:string):Promise{\n const response = await axios.get(filename);\n if (response.status === 200){\n let res = response.data\n return res.split('\\n').map((line:string)=>{\n let v =line.split(',')\n return [v[0], parseFloat(v[1])||Math.random()*0.035+0.81]\n })\n }\n console.error(`Data fetching error: ${response.status}`);\n throw response;\n}\n\n\nexport async function fetchJSON(filename:string):Promise{\n const response = await axios.get(filename);\n return checkResponse(response, null);\n}","import * as React from \"react\"\nimport { Card, Select, Icon, InputNumber } from \"antd\"\nimport {StatuMatrix} from 'types'\nimport \"./index.css\"\nimport {headerView, widthRatio, HypoTextView, TitleView, THR} from 'const'\n\nconst { Option } = Select\n\ninterface Props{\n changeTHR:(thr:number|undefined)=>void\n}\n\n\n\nexport default class Header extends React.Component {\n render() {\n let {width, height} = headerView\n\n let modelSelector = \n\n let pSelector = \n\n \n let reject = false\n let checkIcon = \n\n return
\n\n \n\n\n
\n

Hypothesis

\n {/* Model Hypothesis} >\n The model M has learned the feature F from the original dataset D \n \n \n\n Feature Hypothesis} >\n The Feature F is helpful for the prediction.\n \n */}\n
\n\n
\n

P Values\n { pSelector}\n

\n
\n\n
\n

Models\n { modelSelector} \n

\n
\n\n \n\n \n
\n }\n}","import * as React from 'react';\nimport {Select, Button} from \"antd\";\nimport {TitleView} from 'const';\nimport './index.css';\n\nconst {Option} = Select\nlet {width, height} = TitleView\n\nconst style = {\n backgroundColor: 'black',\n color: 'white',\n width,\n height,\n padding: '10px 30px'\n}\n\nconst darkSelectStyle = {\n backgroundColor: 'black', color:\"white\"\n}\n\nexport interface Props{\n filename:string,\n changeResults:(filename:string)=>void\n}\n\n\nexport default class InfoPanel extends React.Component{\n private dataset:string; concept:string\n constructor(props:Props){\n super(props)\n this.dataset=''\n this.concept = ''\n this.changeResults=this.changeResults.bind(this)\n this.changeConcept=this.changeConcept.bind(this)\n this.changeData=this.changeData.bind(this)\n }\n changeResults(e:any){\n let {dataset, concept}=this\n e.preventDefault();\n this.props.changeResults(`${dataset}_${concept}.json`)\n }\n changeConcept(concept:any){\n this.concept=concept\n }\n changeData(dataset:any){\n this.dataset=dataset\n }\n render(){\n let {filename}=this.props\n let [dataset, concept] = filename.replace('.json','').split('_')\n this.dataset = dataset\n this.concept = concept\n let featureSelector = \n\n let datasetSelector = \n\n return
\n \n
\n HypoML\n
\n\n
\n { featureSelector } \n { datasetSelector } \n
\n\n
\n }\n}","import React from 'react';\nimport Models from 'components/Models';\nimport HypoStatus from 'components/HypoStatus';\nimport HypoInfo from 'components/HypoInfo';\nimport {CompareData, Results, ModelData, Label, Metric, StatuMatrix} from 'types';\nimport {fetchJSON} from 'dataService'\nimport {LABELS, overView, THR} from 'const'\nimport {get95conf, pairedT, ANALYSIS, HYPO, MODELS} from 'helper';\nimport Header from 'components/Header';\nimport InfoPanel from 'components/InfoPanel';\n\ninterface States {\n modelData: ModelData,\n compareData: CompareData,\n filename:string,\n thr:number\n}\n\nconst METRIC = 'precision'\n\nexport default class Overview extends React.Component<{}, States>{\n \n constructor(props:any){\n super(props)\n this.state={\n filename:'fashion_1.Rotating.json',\n modelData:[],\n compareData: [],\n thr:THR\n }\n this.changeResults=this.changeResults.bind(this)\n this.changeTHR = this.changeTHR.bind(this)\n \n }\n // **************\n // data transformers\n // ****************\n getModeldata(res: Results): ModelData {\n let modelData: ModelData = MODELS.map(name => {\n let re = res[name]\n let err = get95conf([...Array(10).keys()].map((d) => {\n let label = d.toString() as Label\n return re[label][METRIC]\n }))\n \n let avg = re['avg'][METRIC]\n return {\n name, avg, err,\n arr: LABELS.map(l => re[l][METRIC]),\n hasDetails: false\n }\n })\n\n return modelData\n\n }\n getCompareData(res: Results): CompareData {\n let compareData: CompareData = ANALYSIS.map(a=>{\n let pair = a.pair, modelA = pair[0], modelB = pair[1]\n let samplesA = LABELS.map(l => res[modelA][l][METRIC]),\n samplesB = LABELS.map(l => res[modelB][l][METRIC])\n\n return ({\n from: modelA,\n to: modelB,\n p: pairedT(samplesA, samplesB, 1),\n dir: res[modelA].avg[METRIC]>res[modelB].avg[METRIC]?'+':'-'\n })\n })\n return compareData\n }\n calculateStatus(compareData: CompareData): StatuMatrix {\n let results: StatuMatrix = HYPO.map(d => ANALYSIS.map(d => {\n return { status: undefined, if: undefined }\n }))\n\n // set status to 0 if analysis and hypo is related\n ANALYSIS.forEach((anly, j)=>{\n [anly.large, anly.less].forEach(res=>{\n if(res.dependHypo){\n [res.ifSupport, res.ifSupport, res.ifReject].forEach(conclu=>{\n [conclu.support, conclu.reject].forEach((hypos)=>{\n hypos.forEach(hypoIdx=>results[hypoIdx-1][j].status=0)\n })\n })\n }else{\n [res.support, res.reject].forEach((hypos)=>{\n if(hypos) hypos.forEach(hypoIdx=>results[hypoIdx-1][j].status=0)\n })\n }\n })\n })\n\n\n \n\n compareData.forEach((comp, j) => {\n\n if (comp.p < this.state.thr) {\n let res: any\n // significant larger\n if (comp.dir == '+') {\n res = ANALYSIS[j].large\n let dependHypo = res.dependHypo\n if (dependHypo) {\n let dependHypoStatus: number = results[res.dependHypo - 1]\n .filter(item => item.status != undefined)\n .reduce((total: number, item: any) => total + item.status, 0)\n if (dependHypoStatus > 0) {\n res = res.ifSupport\n\n } else if (dependHypoStatus == 0) {\n res = res.ifQuestion\n } else if (dependHypoStatus < 0) {\n res = res.ifReject\n }\n // res.support.forEach((hyIdx: number) => {\n // results[hyIdx-1][j].if = dependHypo\n // })\n // res.reject.forEach((hyIdx: number) => {\n // results[hyIdx-1][j].if = dependHypo\n // })\n }\n } else {\n // significant smaller\n res = ANALYSIS[j].less\n let dependHypo = res.dependHypo\n if (dependHypo) {\n let dependHypoStatus: number = results[res.dependHypo - 1]\n .filter(item => item.status != undefined)\n .reduce((total: number, item: any) => total + item.status, 0)\n\n if (dependHypoStatus > 0) {\n res = res.ifSupport\n } else if (dependHypoStatus == 0) {\n res = res.ifQuestion\n } else if (dependHypoStatus < 0) {\n res = res.ifReject\n }\n\n // res.support.forEach((hyIdx: number) => {\n // results[hyIdx-1][j].if = dependHypo\n // })\n\n // res.reject.forEach((hyIdx: number) => {\n // results[hyIdx-1][j].if = dependHypo\n // })\n }\n }\n // console.info(i,j,ANALYSIS[j], res)\n\n res.support.forEach((hypoIdx: number) => {\n results[hypoIdx - 1][j].status = 1\n })\n res.reject.forEach((hypoIdx: number) => {\n results[hypoIdx - 1][j].status = -1\n })\n }\n })\n\n // add if status\n\n // compareData.forEach((comp, j) => {\n \n // if (comp.dir == '+') {\n // var dependHypo = ANALYSIS[j].large.dependHypo\n // if(dependHypo){\n // results[dependHypo-1][j].status='if'\n // }\n // }else{\n // var dependHypo = ANALYSIS[j].less.dependHypo\n // if(dependHypo){\n // results[dependHypo-1][j].status='if'\n // }\n // }\n // })\n\n\n results[4][3].status='if'\n results[4][4].status='if'\n results[5][3].status='if'\n results[5][4].status='if'\n results[0][5].status='if'\n results[1][5].status='if'\n\n\n return results\n }\n async getResults(filename:string){\n let res = await fetchJSON('data/'+filename)\n let modelData = this.getModeldata(res)\n let compareData = this.getCompareData(res)\n this.setState({filename, modelData, compareData})\n }\n componentDidMount(){\n this.getResults(this.state.filename)\n }\n changeResults(filename:string){\n this.getResults(filename)\n }\n changeTHR(thr:number|undefined){\n if (typeof(thr)=='number') this.setState({thr})\n }\n render(){\n let {width, height, margin} = overView\n let {compareData} = this.state\n let status = this.calculateStatus(compareData)\n return
\n \n
\n \n \n \n \n \n
\n
\n
\n }\n}","import React from 'react';\nimport './App.css';\n\nimport Overview from 'components/Overview'\n\n\nconst App: React.FC = () => {\n\n return (\n
\n \n \n \n \n
\n );\n}\n\nexport default App;\n","// This optional code is used to register a service worker.\n// register() is not called by default.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on subsequent visits to a page, after all the\n// existing tabs open on the page have been closed, since previously cached\n// resources are updated in the background.\n\n// To learn more about the benefits of this model and instructions on how to\n// opt-in, read https://bit.ly/CRA-PWA\n\nconst isLocalhost = Boolean(\n window.location.hostname === 'localhost' ||\n // [::1] is the IPv6 localhost address.\n window.location.hostname === '[::1]' ||\n // 127.0.0.1/8 is considered localhost for IPv4.\n window.location.hostname.match(\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\n )\n);\n\ntype Config = {\n onSuccess?: (registration: ServiceWorkerRegistration) => void;\n onUpdate?: (registration: ServiceWorkerRegistration) => void;\n};\n\nexport function register(config?: Config) {\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\n // The URL constructor is available in all browsers that support SW.\n const publicUrl = new URL(\n (process as { env: { [key: string]: string } }).env.PUBLIC_URL,\n window.location.href\n );\n if (publicUrl.origin !== window.location.origin) {\n // Our service worker won't work if PUBLIC_URL is on a different origin\n // from what our page is served on. This might happen if a CDN is used to\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\n return;\n }\n\n window.addEventListener('load', () => {\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\n\n if (isLocalhost) {\n // This is running on localhost. Let's check if a service worker still exists or not.\n checkValidServiceWorker(swUrl, config);\n\n // Add some additional logging to localhost, pointing developers to the\n // service worker/PWA documentation.\n navigator.serviceWorker.ready.then(() => {\n console.log(\n 'This web app is being served cache-first by a service ' +\n 'worker. To learn more, visit https://bit.ly/CRA-PWA'\n );\n });\n } else {\n // Is not localhost. Just register service worker\n registerValidSW(swUrl, config);\n }\n });\n }\n}\n\nfunction registerValidSW(swUrl: string, config?: Config) {\n navigator.serviceWorker\n .register(swUrl)\n .then(registration => {\n registration.onupdatefound = () => {\n const installingWorker = registration.installing;\n if (installingWorker == null) {\n return;\n }\n installingWorker.onstatechange = () => {\n if (installingWorker.state === 'installed') {\n if (navigator.serviceWorker.controller) {\n // At this point, the updated precached content has been fetched,\n // but the previous service worker will still serve the older\n // content until all client tabs are closed.\n console.log(\n 'New content is available and will be used when all ' +\n 'tabs for this page are closed. See https://bit.ly/CRA-PWA.'\n );\n\n // Execute callback\n if (config && config.onUpdate) {\n config.onUpdate(registration);\n }\n } else {\n // At this point, everything has been precached.\n // It's the perfect time to display a\n // \"Content is cached for offline use.\" message.\n console.log('Content is cached for offline use.');\n\n // Execute callback\n if (config && config.onSuccess) {\n config.onSuccess(registration);\n }\n }\n }\n };\n };\n })\n .catch(error => {\n console.error('Error during service worker registration:', error);\n });\n}\n\nfunction checkValidServiceWorker(swUrl: string, config?: Config) {\n // Check if the service worker can be found. If it can't reload the page.\n fetch(swUrl)\n .then(response => {\n // Ensure service worker exists, and that we really are getting a JS file.\n const contentType = response.headers.get('content-type');\n if (\n response.status === 404 ||\n (contentType != null && contentType.indexOf('javascript') === -1)\n ) {\n // No service worker found. Probably a different app. Reload the page.\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister().then(() => {\n window.location.reload();\n });\n });\n } else {\n // Service worker found. Proceed as normal.\n registerValidSW(swUrl, config);\n }\n })\n .catch(() => {\n console.log(\n 'No internet connection found. App is running in offline mode.'\n );\n });\n}\n\nexport function unregister() {\n if ('serviceWorker' in navigator) {\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister();\n });\n }\n}\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport './index.css';\nimport App from './App';\nimport * as serviceWorker from './serviceWorker';\nimport 'antd/dist/antd.css';\n\nReactDOM.render(, document.getElementById('root'));\n\n// If you want your app to work offline and load faster, you can change\n// unregister() to register() below. Note this comes with some pitfalls.\n// Learn more about service workers: https://bit.ly/CRA-PWA\nserviceWorker.unregister();\n"],"sourceRoot":""}