From c6c74e8baf475a52c20fe4d07f503c6be9c4a10f Mon Sep 17 00:00:00 2001 From: Stan Wohlwend Date: Thu, 26 Aug 2021 00:00:49 +0100 Subject: [PATCH 1/4] Pixi renderer! This commit adds the Pixi renderer. It also contains the new layouter (#34), however that one will land in a different PR. --- .babelrc | 3 +- .eslintrc.js | 53 +- .gitignore | 2 + README.md | 7 +- dist/306.js | 2 - dist/306.js.map | 1 - dist/626.js | 2 - dist/626.js.map | 1 - dist/641.js | 2 - dist/641.js.map | 1 - dist/689.js | 2 - dist/689.js.map | 1 - dist/764.js | 2 - dist/764.js.map | 1 - dist/main.js | 3 - dist/main.js.LICENSE.txt | 14 - dist/main.js.map | 1 - dist/sdfv.js | 3 - dist/sdfv.js.LICENSE.txt | 14 - dist/sdfv.js.map | 1 - package-lock.json | 24919 ++++++---------- package.json | 12 +- sdfv.css | 13 +- sdfv.html | 2 +- src/layouting/bench/bench.ts | 60 + src/layouting/bench/layoutAnalysis.ts | 302 + src/layouting/bench/performanceAnalysis.ts | 33 + src/layouting/geometry/box.ts | 84 + src/layouting/geometry/segment.ts | 72 + src/layouting/geometry/size.ts | 4 + src/layouting/geometry/vector.ts | 90 + src/layouting/graph/component.ts | 98 + src/layouting/graph/edge.ts | 31 + src/layouting/graph/graph.ts | 480 + src/layouting/graph/node.ts | 39 + src/layouting/layoutGraph/layoutBundle.ts | 17 + src/layouting/layoutGraph/layoutConnector.ts | 72 + src/layouting/layoutGraph/layoutEdge.ts | 84 + src/layouting/layoutGraph/layoutGraph.ts | 144 + src/layouting/layoutGraph/layoutNode.ts | 189 + src/layouting/layoutLib.ts | 8 + src/layouting/layouter/dagreLayouter.ts | 80 + src/layouting/layouter/layouter.ts | 454 + .../layouter/magneticSpringLayouter.ts | 118 + src/layouting/layouter/recursiveLayouter.ts | 53 + src/layouting/layouter/sugiyamaLayouter.ts | 1596 + src/layouting/levelGraph/levelGraph.ts | 92 + src/layouting/levelGraph/levelNode.ts | 23 + src/layouting/order/crossCount.ts | 161 + src/layouting/order/orderGraph.ts | 1416 + src/layouting/order/orderGroup.ts | 56 + src/layouting/order/orderNode.ts | 18 + src/layouting/order/orderRank.ts | 43 + src/layouting/parse/loader.ts | 10 + src/layouting/parse/parser.ts | 82 + src/layouting/rank/rankGraph.ts | 139 + src/layouting/rank/rankNode.ts | 7 + src/layouting/renderGraph/accessNode.ts | 5 + src/layouting/renderGraph/entryNode.ts | 5 + src/layouting/renderGraph/exitNode.ts | 5 + .../renderGraph/genericContainerNode.ts | 5 + src/layouting/renderGraph/genericNode.ts | 5 + src/layouting/renderGraph/interstateEdge.ts | 7 + src/layouting/renderGraph/libraryNode.ts | 5 + src/layouting/renderGraph/mapEntry.ts | 5 + src/layouting/renderGraph/mapExit.ts | 5 + src/layouting/renderGraph/memlet.ts | 20 + src/layouting/renderGraph/nestedSdfg.ts | 5 + src/layouting/renderGraph/renderConnector.ts | 19 + src/layouting/renderGraph/renderEdge.ts | 131 + src/layouting/renderGraph/renderGraph.ts | 43 + src/layouting/renderGraph/renderNode.ts | 82 + src/layouting/renderGraph/scopeNode.ts | 6 + src/layouting/renderGraph/sdfgState.ts | 7 + src/layouting/renderGraph/tasklet.ts | 5 + src/layouting/renderLib.js | 7 + src/layouting/renderer/color.ts | 25 + src/layouting/renderer/renderer.ts | 420 + src/layouting/shapes/downwardTrapezoid.ts | 12 + src/layouting/shapes/edgeShape.ts | 79 + src/layouting/shapes/ellipse.ts | 24 + src/layouting/shapes/foldedCornerRectangle.ts | 41 + src/layouting/shapes/octagon.ts | 17 + src/layouting/shapes/polygon.ts | 24 + src/layouting/shapes/rectangle.ts | 30 + src/layouting/shapes/shape.ts | 39 + src/layouting/shapes/simpleShape.ts | 25 + src/layouting/shapes/text.ts | 27 + src/layouting/shapes/upwardTrapezoid.ts | 12 + src/layouting/util/assert.ts | 33 + src/layouting/util/serializer.ts | 32 + src/layouting/util/shuffle.ts | 26 + src/layouting/util/timer.ts | 66 + src/overlay_manager.js | 197 +- src/overlays/memory_volume_overlay.js | 132 +- src/overlays/runtime_micro_seconds_overlay.js | 101 +- src/overlays/static_flops_overlay.js | 6 +- src/renderer/pixi/layouting/README.md | 1 + src/renderer/pixi/layouting/layout.ts | 90 + .../complex_layouter/complex_layouter.ts | 281 + .../layouters/complex_layouter/utils.js | 271 + .../layouting/layouters/dummy_layouter.ts | 58 + .../layouting/layouters/example_layouter.ts | 154 + .../pixi/layouting/layouters/layouter.ts | 8 + .../pixi/layouting/render_layout_element.ts | 445 + src/renderer/pixi/pixi_renderer.ts | 1397 + src/renderer/pixi/toolbar.ts | 198 + src/renderer/renderer.js | 785 +- src/renderer/renderer_elements.js | 182 +- src/sdfv.js | 185 +- src/sdfv_ui_handlers.js | 36 +- src/utils/bounding_box.js | 8 +- src/utils/colors.ts | 79 + src/utils/constants.ts | 6 + src/utils/context_menu.js | 9 +- src/utils/loading_spinner.ts | 86 + src/utils/pdf.ts | 142 + src/utils/sanitization.ts | 2 +- src/utils/sdfg/display.js | 2 +- src/utils/sdfg/sdfg_utils.js | 4 +- src/utils/sdfg/traversal.js | 29 +- src/utils/sdfg/types.ts | 37 + src/utils/symbol_resolver.js | 194 + src/utils/utils.ts | 14 +- webpack.config.js | 11 +- 125 files changed, 20763 insertions(+), 16908 deletions(-) delete mode 100755 dist/306.js delete mode 100755 dist/306.js.map delete mode 100755 dist/626.js delete mode 100755 dist/626.js.map delete mode 100755 dist/641.js delete mode 100755 dist/641.js.map delete mode 100755 dist/689.js delete mode 100755 dist/689.js.map delete mode 100755 dist/764.js delete mode 100755 dist/764.js.map delete mode 100755 dist/main.js delete mode 100755 dist/main.js.LICENSE.txt delete mode 100755 dist/main.js.map delete mode 100755 dist/sdfv.js delete mode 100755 dist/sdfv.js.LICENSE.txt delete mode 100755 dist/sdfv.js.map mode change 100755 => 100644 package-lock.json create mode 100644 src/layouting/bench/bench.ts create mode 100644 src/layouting/bench/layoutAnalysis.ts create mode 100644 src/layouting/bench/performanceAnalysis.ts create mode 100644 src/layouting/geometry/box.ts create mode 100644 src/layouting/geometry/segment.ts create mode 100644 src/layouting/geometry/size.ts create mode 100644 src/layouting/geometry/vector.ts create mode 100644 src/layouting/graph/component.ts create mode 100644 src/layouting/graph/edge.ts create mode 100644 src/layouting/graph/graph.ts create mode 100644 src/layouting/graph/node.ts create mode 100644 src/layouting/layoutGraph/layoutBundle.ts create mode 100644 src/layouting/layoutGraph/layoutConnector.ts create mode 100644 src/layouting/layoutGraph/layoutEdge.ts create mode 100644 src/layouting/layoutGraph/layoutGraph.ts create mode 100644 src/layouting/layoutGraph/layoutNode.ts create mode 100644 src/layouting/layoutLib.ts create mode 100644 src/layouting/layouter/dagreLayouter.ts create mode 100644 src/layouting/layouter/layouter.ts create mode 100644 src/layouting/layouter/magneticSpringLayouter.ts create mode 100644 src/layouting/layouter/recursiveLayouter.ts create mode 100644 src/layouting/layouter/sugiyamaLayouter.ts create mode 100644 src/layouting/levelGraph/levelGraph.ts create mode 100644 src/layouting/levelGraph/levelNode.ts create mode 100644 src/layouting/order/crossCount.ts create mode 100644 src/layouting/order/orderGraph.ts create mode 100644 src/layouting/order/orderGroup.ts create mode 100644 src/layouting/order/orderNode.ts create mode 100644 src/layouting/order/orderRank.ts create mode 100644 src/layouting/parse/loader.ts create mode 100644 src/layouting/parse/parser.ts create mode 100644 src/layouting/rank/rankGraph.ts create mode 100644 src/layouting/rank/rankNode.ts create mode 100644 src/layouting/renderGraph/accessNode.ts create mode 100644 src/layouting/renderGraph/entryNode.ts create mode 100644 src/layouting/renderGraph/exitNode.ts create mode 100644 src/layouting/renderGraph/genericContainerNode.ts create mode 100644 src/layouting/renderGraph/genericNode.ts create mode 100644 src/layouting/renderGraph/interstateEdge.ts create mode 100644 src/layouting/renderGraph/libraryNode.ts create mode 100644 src/layouting/renderGraph/mapEntry.ts create mode 100644 src/layouting/renderGraph/mapExit.ts create mode 100644 src/layouting/renderGraph/memlet.ts create mode 100644 src/layouting/renderGraph/nestedSdfg.ts create mode 100644 src/layouting/renderGraph/renderConnector.ts create mode 100644 src/layouting/renderGraph/renderEdge.ts create mode 100644 src/layouting/renderGraph/renderGraph.ts create mode 100644 src/layouting/renderGraph/renderNode.ts create mode 100644 src/layouting/renderGraph/scopeNode.ts create mode 100644 src/layouting/renderGraph/sdfgState.ts create mode 100644 src/layouting/renderGraph/tasklet.ts create mode 100644 src/layouting/renderLib.js create mode 100644 src/layouting/renderer/color.ts create mode 100644 src/layouting/renderer/renderer.ts create mode 100644 src/layouting/shapes/downwardTrapezoid.ts create mode 100644 src/layouting/shapes/edgeShape.ts create mode 100644 src/layouting/shapes/ellipse.ts create mode 100644 src/layouting/shapes/foldedCornerRectangle.ts create mode 100644 src/layouting/shapes/octagon.ts create mode 100644 src/layouting/shapes/polygon.ts create mode 100644 src/layouting/shapes/rectangle.ts create mode 100644 src/layouting/shapes/shape.ts create mode 100644 src/layouting/shapes/simpleShape.ts create mode 100644 src/layouting/shapes/text.ts create mode 100644 src/layouting/shapes/upwardTrapezoid.ts create mode 100644 src/layouting/util/assert.ts create mode 100644 src/layouting/util/serializer.ts create mode 100644 src/layouting/util/shuffle.ts create mode 100644 src/layouting/util/timer.ts create mode 100644 src/renderer/pixi/layouting/README.md create mode 100644 src/renderer/pixi/layouting/layout.ts create mode 100644 src/renderer/pixi/layouting/layouters/complex_layouter/complex_layouter.ts create mode 100644 src/renderer/pixi/layouting/layouters/complex_layouter/utils.js create mode 100644 src/renderer/pixi/layouting/layouters/dummy_layouter.ts create mode 100644 src/renderer/pixi/layouting/layouters/example_layouter.ts create mode 100644 src/renderer/pixi/layouting/layouters/layouter.ts create mode 100644 src/renderer/pixi/layouting/render_layout_element.ts create mode 100644 src/renderer/pixi/pixi_renderer.ts create mode 100644 src/renderer/pixi/toolbar.ts create mode 100644 src/utils/colors.ts create mode 100644 src/utils/constants.ts create mode 100644 src/utils/loading_spinner.ts create mode 100644 src/utils/pdf.ts create mode 100644 src/utils/sdfg/types.ts create mode 100644 src/utils/symbol_resolver.js diff --git a/.babelrc b/.babelrc index 6c335cd5..43349505 100644 --- a/.babelrc +++ b/.babelrc @@ -4,6 +4,7 @@ "@babel/preset-typescript" ], "plugins": [ - "@babel/plugin-transform-runtime" + "@babel/plugin-transform-runtime", + "@babel/plugin-proposal-class-properties" ] } diff --git a/.eslintrc.js b/.eslintrc.js index 8646d3ae..71613a54 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -1,24 +1,47 @@ module.exports = { - "env": { - "browser": true, - "es2021": true + 'env': { + 'browser': true, + 'es2021': true }, - "extends": [ - "eslint:recommended", - "plugin:@typescript-eslint/recommended" + 'extends': [ + 'eslint:recommended', + 'plugin:@typescript-eslint/recommended' ], - "parser": "@typescript-eslint/parser", - "parserOptions": { - "ecmaVersion": 12, - "sourceType": "module" + 'parser': '@typescript-eslint/parser', + 'parserOptions': { + 'ecmaVersion': 12, + 'sourceType': 'module' }, - "plugins": [ - "@typescript-eslint" + 'plugins': [ + '@typescript-eslint' ], - "ignorePatterns": ["**/*.js"], - "rules": { - "@typescript-eslint/no-explicit-any": "off", + 'ignorePatterns': ['**/*.js'], + 'rules': { + '@typescript-eslint/no-explicit-any': 'off', "@typescript-eslint/no-non-null-assertion": "off", "prefer-arrow-callback": "error", + 'indent': [ + 'error', + 4, + { + 'SwitchCase': 1, + } + ], + 'linebreak-style': [ + 'error', + 'unix' + ], + 'quotes': [ + 'error', + 'single' + ], + 'semi': [ + 'error', + 'always' + ], + 'prefer-arrow-callback': 'error', + '@typescript-eslint/no-non-null-assertion': 'off', + 'camelcase': 'error', + '@typescript-eslint/ban-ts-comment': 'off', } }; diff --git a/.gitignore b/.gitignore index 0527d98d..f578d6ff 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,5 @@ +.DS_Store + # Logs logs *.log diff --git a/README.md b/README.md index 46cbc627..0b6ef835 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,6 @@ npm install npm run watch ``` -Before committing your changes, run `npm install && npm run build-prod` to build -a production bundle. GitHub Actions will fail if the production bundle in your -commit is not up-to-date. If the CI is failing, make sure that you run -`npm install` before building as the dependencies might've changed. +To launch a local server with hot reloading, replace the second command with `npm run serve`. + +Before committing your changes, run `npm install && npm run build-prod` to build a production bundle. GitHub Actions will fail if the production bundle in your commit is not up-to-date. If the CI is failing, make sure that you run `npm install` before building as the dependencies might've changed. diff --git a/dist/306.js b/dist/306.js deleted file mode 100755 index 68f78e53..00000000 --- a/dist/306.js +++ /dev/null @@ -1,2 +0,0 @@ -(self.webpackChunk_spcl_sdfv=self.webpackChunk_spcl_sdfv||[]).push([[306],{3725:(A,C,I)=>{"use strict";I.r(C),I.d(C,{MemoryOpButton:()=>a,AutoSuperSectionMemoryOpAnalysis:()=>w});var Q=I(2137),E=I(5991),B=I(7329),g=I(6610),e=I(379),i=I(6070),n=I(7608),t=I(7757),h=I.n(t),k=I(4286),s=I(1318);function D(A){var C=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(A){return!1}}();return function(){var I,Q=(0,n.Z)(A);if(C){var E=(0,n.Z)(this).constructor;I=Reflect.construct(Q,arguments,E)}else I=Q.apply(this,arguments);return(0,i.Z)(this,I)}}var a=function(A){(0,e.Z)(I,A);var C=D(I);function I(A,Q,E){var e;(0,g.Z)(this,I),(e=C.call(this,A)).supersection_all_vec_analyses=Q;var i="data:image/png;base64,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";e._display_image={1:i,"-1":i};var n={},t=s.Vw.majority([1]);e.setButtonImage(e._display_image[t]),e.dataparams=[Q,E];var h=new k.Layout(e.button_subwindow);h.setRect("Title",new k.Pos(0,0),new k.Pos(100,10),new k.RU_DataViewText);var D=new k.RU_DataViewBarGraph({type:"bar",yAxes:[{type:"linear",display:!0,position:"left",id:"axis-1"}]}).setDataAnalysisFunction((function(A){var C=[],I=[],E=[];null!=A&&(C=A.data.map((function(A){return A.data.write_stall})),I=A.data.map((function(A){return A.data.load_ins})),E=A.data.map((function(A){return A.data.store_ins})));var g=k.RU_DataViewBarGraph.colorList().slice(0,C.length+1),e=[],i=Q.repcount;if(all_analyses_global){var n=C.length/i;C=s.tV.createChunks(C,n,s.Vw.sumArray),I=s.tV.createChunks(I,n,s.Vw.sumArray),E=s.tV.createChunks(E,n,s.Vw.sumArray)}return e.push({label:"Cycles stalled on writes",yAxisID:"axis-1",data:C[0],backgroundColor:g[0]}),e.push({label:"Load ins",yAxisID:"axis-1",data:I[0],backgroundColor:g[1]}),e.push({label:"Store ins",yAxisID:"axis-1",data:E[0],backgroundColor:g[2]}),{labels:(0,B.Z)(Array(C[0].length).keys()),datasets:e}})).linkMouse(h._layout_clickable).changeGraphOptions((function(A){A.options.title.text="Memory operations per thread",A.options.scales.yAxes.find((function(A){return"axis-1"==A.id})).scaleLabel={labelString:"Operations",display:!0},A.options.scales.yAxes.find((function(A){return"axis-1"==A.id})).ticks.beginAtZero=!0,A.options.scales.xAxes=[{scaleLabel:{labelString:"Thread",display:!0}}]}));return h.setRect("Graph",new k.Pos(0,10),new k.Pos(70,50),D),n.Title=new k.DataBlock({fontsize:32,text:"Memory operations",color:"black",align:"center"},"Text"),n.Graph=Q,h.setDataBinding(n),e.button_subwindow.setLayout(h),e.setOnEnterHover((function(A){e.color="#FF0000",e.button_subwindow_state="open"})),e.setOnLeaveHover((function(A){e.color="orange",e.is_locked_open||(e.button_subwindow_state="collapsed")})),e.setOnClick((function(A,C){e.is_locked_open=!e.is_locked_open})),e.setDefaultDblClick(),e}return I}(k.Button),o=function(){function A(C,I,Q,E){(0,g.Z)(this,A),this.section=C,this.critical_path_analysis=E,this.for_node=I,this.for_state=Q,this.analysis_result=null,65535!=Q&&65535!=Q&&s.tV.assert("for_node defined",null!=this.for_node&&NaN!=new Number(this.for_node))}return(0,E.Z)(A,[{key:"judgement",value:function(){var A=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;return null==A&&(A=this.analysis_result),-1}},{key:"analyze",value:function(){s.tV.assert("Not available over old interface",!1)}}]),A}(),S=function(A){(0,e.Z)(B,A);var C,I=D(B);function B(A,C,Q,E,e){var i;return(0,g.Z)(this,B),(i=I.call(this,C,Q,E,e,null)).communicator=A,i}return(0,E.Z)(B,[{key:"analyze",value:(C=(0,Q.Z)(h().mark((function A(){var C,I,Q,E;return h().wrap((function(A){for(;;)switch(A.prev=A.next){case 0:return C=this.section.toSection(this.for_node,this.for_state),A.next=3,C;case 3:if(void 0!==(C=A.sent)){A.next=6;break}return A.abrupt("return",void 0);case 6:return A.next=8,this.communicator.runAnalysis("MemoryOpAnalysis",[new Number(C.unified_id),new Number(C.supersection_id)]).get();case 8:return I=A.sent,Q=I,E=new k.DataBlock(Q,"MemoryOp"),this.analysis_result=E,E.judgement=this.judgement(),A.abrupt("return",E);case 14:case"end":return A.stop()}}),A,this)}))),function(){return C.apply(this,arguments)})}]),B}(o);function w(A,C,I,Q,E){return C instanceof LazySuperSection?new S(A,C,I,Q):(s.tV.assert("Do not use",!1),new o(C,I,Q,E))}}}]); -//# sourceMappingURL=306.js.map \ No newline at end of file diff --git a/dist/306.js.map b/dist/306.js.map deleted file mode 100755 index e66bcfc3..00000000 --- a/dist/306.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["webpack://@spcl/sdfv/./renderer_dir/memop_button.js"],"names":["MemoryOpButton","ctx","supersection_all_vec_analyses","path_analysis","baseimgstr","_display_image","databinding","majority","MathHelper","setButtonImage","dataparams","layout","Layout","button_subwindow","setRect","Pos","RU_DataViewText","thread_graph","RU_DataViewBarGraph","type","yAxes","display","position","id","setDataAnalysisFunction","x","write_stall","load_ins","store_ins","data","map","colors","slice","length","datasets","repcount","all_analyses_global","chunksize","ObjectHelper","push","label","yAxisID","backgroundColor","labels","Array","keys","linkMouse","_layout_clickable","changeGraphOptions","options","title","text","scales","find","scaleLabel","labelString","ticks","beginAtZero","xAxes","DataBlock","fontsize","color","align","setDataBinding","setLayout","setOnEnterHover","p","button_subwindow_state","setOnLeaveHover","is_locked_open","setOnClick","mb","setDefaultDblClick","Button","SuperSectionMemoryOpAnalysis","section","nodeid","stateid","critical_path_analysis","this","for_node","for_state","analysis_result","undefined","NaN","Number","analysis","LazySuperSectionMemoryOpAnalysis","communicator","toSection","runAnalysis","unified_id","supersection_id","get","tmp","ret","judgement","AutoSuperSectionMemoryOpAnalysis","LazySuperSection"],"mappings":"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","file":"306.js","sourcesContent":["// Copyright 2019-2021 ETH Zurich and the DaCe authors. All rights reserved.\nimport { Button, Layout, Pos, RU_DataViewText, RU_DataViewFormLayout, RU_DataViewNumberBlock, RU_DataViewBarGraph, DataBlock } from \"./renderer_util.js\";\nimport { MathHelper, ObjectHelper } from \"./datahelper.js\";\n\n\nclass MemoryOpButton extends Button {\n constructor(ctx, supersection_all_vec_analyses, path_analysis) {\n super(ctx);\n\n this.supersection_all_vec_analyses = supersection_all_vec_analyses;\n\n const baseimgstr = \"data:image/png;base64,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\";\n this._display_image = {\n \"1\": baseimgstr,\n \"-1\": baseimgstr\n };\n\n let databinding = {};\n\n // This is not really easy to judge because of machine-dependent measures\n // TODO: Find a way to create a judgement value\n let judgements = [1];\n let majority = MathHelper.majority(judgements);\n this.setButtonImage(this._display_image[majority]);\n\n this.dataparams = [supersection_all_vec_analyses, path_analysis]; // Fill in parameters\n\n let layout = new Layout(this.button_subwindow);\n layout.setRect(\"Title\", new Pos(0, 0), new Pos(100, 10), new RU_DataViewText());\n\n \n let thread_graph = new RU_DataViewBarGraph({\n type: 'bar',\n yAxes: [{\n type: \"linear\",\n display: true,\n position: 'left',\n id: 'axis-1'\n }\n ]\n }).setDataAnalysisFunction(x => {\n \n let write_stall = [];\n let load_ins = [];\n let store_ins = [];\n if (x != null) {\n write_stall = x.data.map(x => x.data.write_stall);\n load_ins = x.data.map(x => x.data.load_ins);\n store_ins = x.data.map(x => x.data.store_ins);\n }\n\n\n let colors = RU_DataViewBarGraph.colorList().slice(0, write_stall.length + 1);\n\n let datasets = [];\n // So now we have a mapping of thread -> cycles.\n\n let repcount = supersection_all_vec_analyses.repcount;\n if(all_analyses_global) {\n // We need to group and add\n let chunksize = write_stall.length / repcount;\n\n write_stall = ObjectHelper.createChunks(write_stall, chunksize, MathHelper.sumArray);\n load_ins = ObjectHelper.createChunks(load_ins, chunksize, MathHelper.sumArray);\n store_ins = ObjectHelper.createChunks(store_ins, chunksize, MathHelper.sumArray);\n }\n\n\n // All runs should be identical, so we take the first element from each set\n datasets.push({ label: \"Cycles stalled on writes\", yAxisID: \"axis-1\", data: write_stall[0], backgroundColor: colors[0] });\n datasets.push({ label: \"Load ins\", yAxisID: \"axis-1\", data: load_ins[0], backgroundColor: colors[1] });\n datasets.push({ label: \"Store ins\", yAxisID: \"axis-1\", data: store_ins[0], backgroundColor: colors[2] });\n\n let chartData = {\n labels: [...Array(write_stall[0].length).keys()],\n \"datasets\": datasets,\n\n };\n return chartData;\n }).linkMouse(layout._layout_clickable).changeGraphOptions(x => {\n x.options.title.text = \"Memory operations per thread\";\n x.options.scales.yAxes.find(x => x.id == 'axis-1').scaleLabel = { labelString: \"Operations\", display: true };\n x.options.scales.yAxes.find(x => x.id == 'axis-1').ticks.beginAtZero = true;\n x.options.scales.xAxes = [{ scaleLabel: { labelString: \"Thread\", display: true } }];\n });\n\n layout.setRect(\"Graph\", new Pos(0, 10), new Pos(70, 50), thread_graph);\n\n \n\n databinding[\"Title\"] = new DataBlock({ fontsize: 32, text: \"Memory operations\", color: \"black\", align: \"center\" }, \"Text\");\n databinding['Graph'] = supersection_all_vec_analyses;\n\n layout.setDataBinding(databinding);\n this.button_subwindow.setLayout(layout);\n\n this.setOnEnterHover(p => { this.color = \"#FF0000\"; this.button_subwindow_state = 'open'; })\n this.setOnLeaveHover(p => { this.color = \"orange\"; if (!this.is_locked_open) this.button_subwindow_state = 'collapsed'; })\n this.setOnClick((p, mb) => { this.is_locked_open = !this.is_locked_open; });\n\n this.setDefaultDblClick();\n }\n\n\n\n}\n// Specialized version of the class in datahelper\nclass SuperSectionMemoryOpAnalysis {\n constructor(section, nodeid, stateid, critical_path_analysis) {\n this.section = section;\n this.critical_path_analysis = critical_path_analysis;\n this.for_node = nodeid;\n this.for_state = stateid;\n this.analysis_result = null;\n\n if(!(stateid == 0xFFFF || stateid == 65535))\n ObjectHelper.assert(\"for_node defined\", this.for_node != undefined && new Number(this.for_node) != NaN);\n }\n\n judgement(analysis = null) {\n if (analysis == null) analysis = this.analysis_result;\n\n // TODO: Find a good judgement variable\n return -1;\n }\n\n analyze() {\n ObjectHelper.assert(\"Not available over old interface\", false);\n }\n}\n\nclass LazySuperSectionMemoryOpAnalysis extends SuperSectionMemoryOpAnalysis {\n\n constructor(communicator, section, nodeid, stateid, critical_path_analysis) {\n super(section, nodeid, stateid, critical_path_analysis, null);\n this.communicator = communicator;\n }\n\n async analyze() {\n // We differ from the eager analysis here: We let the python/sql-side do the hard work\n\n // Project to a section from the supersection.\n let section = this.section.toSection(this.for_node, this.for_state);\n section = await section;\n if(section === undefined) {\n return undefined;\n }\n let tmp = await this.communicator.runAnalysis(\"MemoryOpAnalysis\", [new Number(section.unified_id), new Number(section.supersection_id)]).get();\n\n let data = tmp;\n\n let ret = new DataBlock(data, \"MemoryOp\");\n this.analysis_result = ret;\n ret.judgement = this.judgement();\n return ret;\n }\n}\n\nfunction AutoSuperSectionMemoryOpAnalysis(communicator, section, nodeid, stateid, critical_path_analysis) {\n if(section instanceof LazySuperSection) {\n return new LazySuperSectionMemoryOpAnalysis(communicator, section, nodeid, stateid);\n }\n else {\n ObjectHelper.assert(\"Do not use\", false);\n return new SuperSectionMemoryOpAnalysis(section, nodeid, stateid, critical_path_analysis);\n }\n}\n\nexport { MemoryOpButton, AutoSuperSectionMemoryOpAnalysis };"],"sourceRoot":""} \ No newline at end of file diff --git a/dist/626.js b/dist/626.js deleted file mode 100755 index 2a7c650e..00000000 --- a/dist/626.js +++ /dev/null @@ -1,2 +0,0 @@ -(self.webpackChunk_spcl_sdfv=self.webpackChunk_spcl_sdfv||[]).push([[626],{6626:(A,g,Q)=>{"use strict";Q.r(g),Q.d(g,{MemoryButton:()=>o});var I=Q(7329),E=Q(6610),C=Q(3349),B=Q(379),t=Q(6070),e=Q(7608),a=Q(4286),n=Q(1318);function i(A,g){var Q;if("undefined"==typeof Symbol||null==A[Symbol.iterator]){if(Array.isArray(A)||(Q=function(A,g){if(A){if("string"==typeof A)return r(A,g);var Q=Object.prototype.toString.call(A).slice(8,-1);return"Object"===Q&&A.constructor&&(Q=A.constructor.name),"Map"===Q||"Set"===Q?Array.from(A):"Arguments"===Q||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(Q)?r(A,g):void 0}}(A))||g&&A&&"number"==typeof A.length){Q&&(A=Q);var I=0,E=function(){};return{s:E,n:function(){return I>=A.length?{done:!0}:{done:!1,value:A[I++]}},e:function(A){throw A},f:E}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var C,B=!0,t=!1;return{s:function(){Q=A[Symbol.iterator]()},n:function(){var A=Q.next();return B=A.done,A},e:function(A){t=!0,C=A},f:function(){try{B||null==Q.return||Q.return()}finally{if(t)throw C}}}}function r(A,g){(null==g||g>A.length)&&(g=A.length);for(var Q=0,I=new Array(g);Q0),B.Memory_Target_Bandwidth=new Number(Q),B._display_image={1:"data:image/png;base64,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tftm2QMEEEBy6uWyBwgggGTViZIHCCCA5HWUNVHuAAEEkLxad7VPH5Pd7jQEBJCc2tznUdaeUUAAaUM7+zrKOjYKCCDtaH8fPi6NAQJIWzpe3gABBJAMj7LOlzZAAKki1x/U3NorZQ0Q1x8kkQt0ej3KulHSAHGBThKNeOR7bMfNcgYIIIDk2b5yBggggGTasTIGCCCAZHuUdS7m4+IYIIC0sfHQUdaNDaOAANLKNkYuRtg1CgggLW377EdZR0cBAaS1zXrXwYUxQABpcd8acIAAAkjWfWXAAQIIIHn/UtaAAwQQQPLuzGADBBBA8m7bYAMEEEAy7/xAAwQQQDJvw2QXH0dGAQFEo199uI9vjgECiD5s/8P+//TzUR+AAJL9z5AHhZwaHwUEEH3cpvt+831ybw//MCCA5N/uz3xk76sH144CAojuPc16+eTEtasTZw/tXNPbPwgIIAIEEAECiAABRIAAAggggAACCCCAAAIIIIAAAggggDTyS/KcApIREBfoZJQLdMrPFWw55Qo2QAQIIAIEEAECiAABBBBAAAEEEEAAAQQQQAABBBBAAAFEgAAiQAARIIAIEEAECCCAAAIIIIAAAggggAACCCCAAAIIIAIEEAECiAABRIAAAggggAACCCCAAAIIIIAAAggggAAiQKrL9QcZ5fqDBHKBTn25QCeBRjyngAACCCCAAAIIIIAAAggggAACCCCAACJAABEggAgQQAQIIIAAAggggAACCCCAAAIIIIAAAgggAgQQAQKIAAFEgAAiQAABBBBAAAEEEEAAAQQQQAABBBBAABEggAgQQAQIIAIEEEAAASTyJXlOAckIiAt0MsoFOuXnCraccgUbIAIEEAECiAABRIAAAggggAACCCCAAAIIIIAAAggggAAiQAARIIAIEEAECCACBBBAAAEEEEAAAQQQQAABBBBAAAEEEAECiAABRIAAIkAAAQQQQAABBBBAAAEEEEAAAQQQQAARINXl+oOMcv1BArlAp75coJNAI55TQAABBBBAAAEEEEAAAQQQQAABBBBAABEggAgQQAQIIAIEEEAAAQQQQAABBBBAAAEEEEAAAQQQAQKIAAFEgAAiQAARIIAAAggggAACCCCAAAIIIIAAAggggAgQQAQIIAIEEAECCCCAABL5kjyngGQExAU6gADyiFzBBggggAACCCCAAAKIAAFEgAAiQAARIIAAAggggAACCCCAAAIIIIAAAggggOgzvVn2b55+AAggOVX29/J9QAABBBBAAAEEEAECiAABRIAAIkAAESCAAAIIIIAAAggggAACCCCAAAIIIIAIEEAECCACBBABkhYQ1x9klL9RmEAu0Kkvfyc9gUY8p4AAAggggAACCCCAAAIIIIAAAggggAAiQAARIIAIEEAECCCAAAIIIIAAAggggAACCCCAAAIIIPq0EUAAESCACBBABAggAgQQQAABBBBAAAEEEEAAAQQQQAABBBABktiX5DmtrccAKT0fXp1R7/rw6tJz/UFGzbj+ABABAogAAUSAACJAAAEEEEAAAQQQQAABBBBAAAEEEEAAESCACBBABAggAgQQAQIIIIAAAggggAACCCCAAAIIIIAAAogAAUSAACJAABEggAACCCCAAAIIIIAAAggggAACCCCACJDqcv1BRrn+IIFcoFNfLtBJoBHPaW25gg0QAQKIAAFEgAAiQAABBBBAAAEEEEAAAQQQQAABBBBAABEggAgQQAQIIAIEEAECCCCAAAIIIIAAAggggAACCCCAAAKIAAFEgAAiQAARIIAAAggggAACCCCAAFLll+Q5rS2fzVt+Pt09o3y6e/m5HySj3A8CiAABRIAAIkAAESCAAAIIIIAAAggggAACCCCAAAIIIIAIEEAECCACBBABAogAAQQQQAABBBBAAAEEEEAAAQQQQAABRIAAIkAAESCACBBAAAEEEEAAAQQQQAABBBBAAAEEEEAESIW5/iCjXH+QQC7QqS8X6CTQiOe0tlzBBogAAUSAACJAABEggAACCCCAAAIIIIAAAggggAACCCCACBBABAggAgQQAQKIAAEEEEAAAQQQQAABBBBAAAEEEEAAAUSAACJAABEggAgQQAABBJDYl+Q5rS2frFh+Pps3o3w2b/n5dPeM8unugAgQQAQIIAIEEAECCCCAAAIIIIAAAggggAACCCCAAAKIAAFEgAAiQAARIIAIEEAAAQQQQAABBBBAAAEEEEAAAQQQQAQIIAIEEAECiAABBBBAAAEEEEAAAQQQQAABBBBAAAFEgFSY6w8yyvUHCeQCnfpygU4CjXhOa8sVbIAIEEAECCACBBABAggggAACCCCAAAIIIIAAAggggAACiAABRIAAIkAAESCACBBAAAEEEEAAAQQQQAABBBBAAAEEkKb39MjI81/S8Ht+ZORpQKQ2BYgEiASIBIgEiASIBIgEiASIBIgkQCRAJEAkQCRAJEAkQCRAJEAkQCQBIgEiASIBIgEiASIBIgEiASIJEAkQCRAJEAkQCRAJEAkQCRAJEEmASIBIgEiASIBIgEiASIBIgEgCRAJEAkQCRAJEAkQCRAJEAkQCRBIgEiASIBIgEiASIBIgEiASIJIAkQCRAJEAkQCRAJEAkQCRAJEAkQSIBIgEiASIBIgEiASIBIgEiCRAJEAkQCRAJEAkQCRAJEAkQCRAJAEiASIBIgEiASIBIgEiASIBIrW8/wGZ0JDqvSQHhgAAAABJRU5ErkJggg==","-1":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAyAAAAMgCAMAAADsrvZaAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAOwgAADsIBFShKgAAAABh0RVh0U29mdHdhcmUAcGFpbnQubmV0IDQuMS41ZEdYUgAAAlJQTFRF8Q0N8dbW/8bG/8DA/7u7/729/7W1/7Ky/7Cw/6ys/6mp9q+v/6am/6Ojz8/P/6Cg/56e/5qampqa/9fX/9ra/5eX/8/P/9PT/9XV/93d/9/f/+Li/+Xl/+fn+e7u/8bG/8nJ/8zM/+jo/+zsqysr/5WV/8TE/+7uw8PD/5GR/8HB/+/v+pSU+/j4/7q6/729//Hx//Pz/4yM/7e3//T0yCkpyYyM/4uL/7Oz/6+v/4iI/6ys/4WF/6iog4OD/YWF/6Wlg4ODhIOD/Sgo/4ODwICA0YCA4ycn/6KiAAAABAAACAAADAAAEAAAFAAAGAAAHAAAIAAAJAAAKAAALAAAMAAANAAAOAAAPAAAQAAARAAASAAATAAAUAAAVAAAWAAAXAAAYAAAZAAAaAAAbAAAcAAAdAAAeAAAfAAAgAAAgICAgX19gwAAg3t7hXl5hwAAh3d3iXV1iwAAi3NzjXFxjwAAj29vkW1tkpKSkwAAlWlplwAAl2dnmWVlmwAAnWFhnwAAn19foV1dowAAo4GBpVlZpwAAp1dXqVVVqwAAq1NTrVFRrwAAr09PswAAs0tLtwAAt0dHuwAAu0NDvwAAvz8/v7+/wT4+wwAAxTo6xwAAxzg4ywAAyzQ0zLCwzTIyzs7OzwAAzzAw0wAA0yws1wAA2SYm2wAA3wAA3yAg4ERE4wAA5Roa5ZiY5wAA5xgY6RYW6wAA6xQU7RIS7wAA7xAQ8Q4O8wAA8wwM9wAA9wgI+QAA+QYG+wAA+wQE+4KC/QIC/wAA/yYm/39//56e////55zYuAAAAEl0Uk5T3+Dh4uPj5ebn6Onq6uvt7e7v8PDw8fHx8fHx8fHx8vLy8vLy8/Pz8/T09PT19fX19fX29vb39/f3+Pn6+/v8/Pz9/f39/v7+/oME4UMAACOBSURBVHja7d3/f1fVfcDxTjurGaIGEYFkYFgSNRvfZIuG6OiWbtxPAggRDIkRQogsimWzZZPR0VhWOtp0szR1LEs3U2qTLh2WyZamM673Xu//NTCofMmX+/mc9/l6X6+ffPgQH+RzP8+cc+6384WMiBbsC3wERAChvG2764v3Xqtq5bXq0+vVX//Hquv/8ot3bQMIFa8tv33vg3MY0jSJFyu58V/VP3jv3VsAQoFXc1/90igWxVJ/Xw1AKLjqlrVULmMeJy3L6gBCIdR0z1YhGXc62XpPE0DI22of0ELjdiYP1AKEfGt1s24btyhpXg0Q8mVSVdVmDsdNSNqqmgBCbrdtmXkbtyhZtg0g5Ghrmy3i+BxJ81qAkHOtTx3Q4f9AApAQq9nqjo7PB5IagJALOlpcw/GZkZYagBA6QjICEHRgBCAFqNYHHZ8ZqQMImazBGx2fGmkACJkaPFo94zFHpLUWIMTg4fcwAhAGD7vDyFqAkK7We63jUyPrAEI62hgAjzkiTwOEhGtqDoTHjZlWI0BIrjVt4ej41MhqgJBMj6Sh8Zgjsh4gpN66IHnMEdkEEIKHT6e0AMLkCiIACaNVwfOYI7IKIFR+jxaCh2tEAOJJqwvDw62TvgDxosa2IvH4hEhbI0AoZ9uLxuMTItsBQnlqSIvow5G74QHieg8XlMcckYcBQou1ua24POaWIpsBQgv2TLF5fELkGYDQ/K1K8WH7qghA3G0HPG4Q2QEQur11DB8u3KAFEBbnLNYB4lsb4XEHkY0AoblqmV3NO8+qBQhxbtetM74Aca1Gho9FBpFGgBS8BngsSuRJgBQ6rn0sJWQnQIrbCqZXOaZZjwKE1Tk5slYHCKtzDweROoCwOqdFiGwCSMHajo+yhDwLkEL1MT7KnWZtBghnr2gRIo8CpCBxa2JlQp4CSCHi4mClQnYAJPw2ML1y+XwvQCz3GDyUiDwGkKB7Ch9uL0QAYrVnExfnLQvn4l/3WYAE287ELRYtK6u+dFfTIn/hpru+VLWyxS0qeu/vBYjFXLg6+AmMJ6ru3lLm333L3VVPOAIlSbcAJMBqbH+5rtt4SHUfjtUPOaAkWQOQ4FqV2LXRsmyD3KnqZa12lSSPACSwnkws4qjX8Rt3Tb1FJNpu7wWInZ5OLOFou1/new8a72+zhETXU1QAKczp3Wsjx8oNBn62DSutjCSaTvcCpBg+krR1hcEfcEWreSN6TvcCxEKmL38kaX2T8R+yqd60ES1CABK6Dys67BjRIQQgxjN5eTBJt9ZZ/WHrtpo0knwMEHyUoaOlzoEfuLbFnBF5IQAxPOsw9mVJ0vXO/NTrDf7UTQDx2Udi6nvS3OjUD97YbMpI0gQQfCzFY5WDP7ypLUllhQAkOB9Ja52jP39da+KdEIAYLDUyt9rm8CewzchJrRQgnL9agMdG5z+FTfqJSJ7LAkg4PixullxWj2knIigEIKbSff3cFx5G1uty19QBEoYPn3hcb51mImJCAGImvffvJmmDd5+IZiJSQgDiv48k1fA43ceLvPznYx+ICD0fAhATaX1+MHlax185NXEa9SmdRJLtAPEknc+fJ6163nljBIjeF3cnGwHixzmbROPsarWmv7QhINlajYOIxIt7AaK9msTHtbkpIFpv9U1WA8T9tN1gonU7ZHNAdC7RkkaAuJ6uC+hJWpsFAkTjHikpQBxP1wXCRPNdV0aBZNkmXR/TToA4naYLIEmb7j1eDQPJNrdp+qSeBYjD6dkfx8R9JaaBaLtuqHiZCCA607O/mom9Ky0A0XVRJGkAiKNt0HPAN2WBAtG0EklqAFKcE7xJujYLFoimy4YpQJxMx4zByPTKHhA9ZzVUTmUBRFsbE9fm0z4AyRoSpxbqANHVikTD9Ko2Cx5IVqthmlX5DlQA8WcBonnDY1eAaJlmVXzPCUA0JX+HSdKQFQRIti5xZqEOED1tTzyeXlkHouHmrEqHX4D4sdI0Or2yD0TDNKvCy0cA0VFj4vX0ygUg2Xrxz7AGIIEu0JO0LiscEPmdIlKAONIzskdWw75JPgARf1Sgorc4AEQ+4SsgenZv9QGI9L0IySqAhDfBMr48dwiI9FI9BYgDyf7a0/PWK1+ACD+uXsFgDBDpZM/wJk9lhQYi/E6x5EmAWK7R8gENDYj0L5xGgAS0AKn8HrtwgGSPJDaXIQCRTfQMb7I6A0iWrRH9TJ8BiMVqRY9lbQaQ69VZ/FQB4uoEK0k3ZwCZa4vkRfUUINYSfIjQyuVzV4GIPj1Q3iv3ACLYZsGjuDMDyM0J3naSbAaIndrC8eEcEEkhbQCxktxzcLbnVy4CEZxlJesA4vcKPc0A4sjnCxCx5O7BSjYDROsSr4y3iwFEKrmN1qxe/3AYiOBVpvw3vgPEuQmAzevnbgPJVifGJ1kAEUrsHhOL9185D0Tuvqzcd5wAxLH5sb37d30AInf3e9IEEJNJXQKx9vyHJ0DktiRqA4jBHhY6bLaeH/QHiNgzhskKgHi3Qrf0/LlXQMSeU08BYiyhp97s32DiAxCpm07yvWoRIO4MIA7cYOIFEKmbTlKAGGq7wQMGELlfSNsBYiSh9zQkdQDJmdAl9Ty3LABEPZlTvObfT+0vEKlFXwoQA8nc/+DQCSwPgAidyspxSxZAHJkQpxlAXPzUAaLao4mp6TBAxJchSw8hAHHiV5ljCxAPgAgtQ1KAaE7kMRDXFiA+AJFZhiz59C1AXBhA0gwgjn70AFFL5AEF5xYgfgCpNTGEAMT+bzH3FiB+AJF5OCQFiMYk3vRTxhsEAHJrEu/JWGIIAYj1ASTNAOLu5w8Q6wPIWoBU3FrtQwhALP8Cy/dUAkAWaFOieQgBiN1TWG4uQPwBIrEMSR4DiLMDSJoBxOmDAJDKE9garJzXKANE1zpwsVf1AaTyBJ4DacsA4vZhAEjFNQn86toMEOUE3tm3yObQAKm4ZvXjsjEDiHoCG9+1AsTF1WGaAcT1IwEQe7+3XLxH0Usg6nctLvxGS4BY+7VV7pb2AFkw9VfrpwARbn0S8gTLMyACv62eBIhrh6QBIGI1aPt1BRBb0940A4hLv6/WAESyVp1XbwFSduovJ2sDiFO/sVozgDj1GysFiEtz3mQLQETbkuhZpgPEygDizk5SoQBR33kqBYg7S/Q0A4hzv7TWAsSVCa+rjxF6DUT54cJWgLjyyyrNAOLJUQGIhSW649cIfQWi5bAAhAEkFCBajgtAzC/R3X3O1nMgqk/fzrcJHkDKr6UAA4iXQJSHkBaAOHAYvBhA/ASiOoSkABGoJinAAOInEOXfXTUAsT7D8mMA8RSI6hDSAhDrv6XSDCAeHZwAgTxeXf3cl/X1Z4q/pP78T77sQV9Z7KdMvjLvn3muuvpx2wdf8U0Bd86xAgRSHemsfVrxTMlA5EODi/4Mgwv9sWrfh5AWgCjWq+jjajtAdNYsPMcCSJmdVQRyPAKIzrYJz7EAYnaGNbMHIHprlZ1jAcTsDOtMBBC91SWicyyAmJ1hdQLE7WX67XMsgJTXFTUfIxFAdLdKbQjZChCFXlQcQA4DxPUhJAWItu9NKOd4PQfSDBBrQMbUgJyKAKK/RqU5VrIeIBW3R3GG9QJAfJtjAaSc+tR8jEUAMZHam/cBUnnn1ID0A8SDIeTW92MBpIxKV5V8THcAxExqj+w0A6TCuopxFd1/ILVycyyAlNFxNSDdAPFjjrUNIDZO8l4pAcRUW5WO1DKA2DjJ69MMy3cgdWJzLIAYu5O3GyCezLEAUlknlXxMRQAxV73SIqQJIJU0qgTkJEAM1qQ0x6oCSAW1zyoB6QKIN3OsNoAYvwri1wzLfyD1QosQgOTuWIFmWP4DUZpjAaSShotzDisAIEpzrJs2sQ8QyHJN3xmlG7Fm2gsBZLk7XwOlt5s0OwTk3XeEe1PPV6ZTaQB5OyoEkDelD+a7FX+vVsjMsewDeedV6fR8ZY4oATlaDCDix/IdO3MsgJTfUCFe9wOQuUVILUDK7ZKKj8kIIKaBrFQ5YA8ApNzLhEoDyGmAGAeyQWQRApCcHVAC8hJAjAORWYQAJGdK72uY7QCIeSBtADEIROlW3vEIIOaB3C9xQy9AcvZ2MV4YFxIQpRfI3QOQ8lJ6a/UhgFgAorQI2QqQstqttEbfCxDfgKQAKavuAt3qHgyQeoAYAzKgAuQ8QKwAWZMAxBSQMypABgBiBYjKHCupA0g5Kb0S6wBAvAPy6cuxAJIvlc1tp0sAsQNE5ZmQFoCU0V6VAWQsAogdIMvUV+kAydXBQt2pGAyQDQlAzABRuhPrKEAsAVFZhABE7vsS1BuxAAKQ8jurAqQDIB4CSWoAkr+LCj4mIoDYAvKQwnG7DyD5m1L4oIcBYg3IaoVVej1AcldSmWENAsQaEPVFCEDypPROrF4fgSy+n+85gADk5npUgOzzj8f+kSV+ppH9AAHI5/WrAGn3jUfpxNIbPcyeKAEEIJ92QsHHZd987BvP95z9Ph+APKFwnncLQPJ2XgHIqGc+Xsp7X+b0Sx4AqVI4cncDJG8jCh/zOb98HMm/j9bsEfeB3K1w5O4FSN7eU/iYT3jlo7wnJwecB7JF4ULIg24A8WH7A5XrhP1ejR+KP5xD2x+or9Lr3QAinoYNdFROYvX4tP4od5/S2dvWIcud+zaonsZiC7Yc7VIB4tHGB/vKf27yf08N3twfAaSIQJSeJ/TnMkhpPFYtSSvtY4D4C0RlA+hpfwaQE7HFUk3fhhaA6AeicqeJP1vn7J8NEchKgOgHovLArT/XCUfiEIFUAUQ/kGMKB/6CLz564yCBfAkg+oEcVzjwQ74AGQ8TyF0KZxy2ASRfKhvcnvTER08cJpAmhUvpdwEkX8MFeJ5wOFAgKud5vwgQ/cvXI3742DMLkHnvVgSIZiCebC41EAMEIDaAHPQDyAWAAAQgC9Y+AxCAVNxo8EC6YoDcWRVA8jWpcOD3sQTxFshKgOgH4scGt6cBAhCAuHofFkAA4ngTAAFI5U0FD+QqQOapHiD5UjnwflwGiQGywN8JIAABCEAAAhCAAIQ1CEAAoqNJgACEs1hcB+EsFtdBKuoMQLgOApCFewUgAAHIwh0ECEAAwvMgAMl4HqSieKKQ50HsnOPxBAjPpM8TTxQC5NN4qwlA7ADx5K0m0dsAAYgNIJ68F8v2q3kBYi75LdiK8GZFpY1KAwXixpsVPdjEswjv5o0O2QWSaNrE0/9383qwDXQh3u4ejdkVomcb6ADe7u4BkELsDxJ1zYYIxP/9QTwA0qdw3P3ZYSo6FSKQKoDoB1KMPQqj9vcCBLISIPqBFGSX22h/+fukz56+ZZ/0H1WeJiAtANEPpCD7pFdyJuvwrf8D8WOpDCQFiH4gu1SAdHoEpOxbsgYigABE7aH0Hp+ARH+hdhUUIMUEovJQer9XQMoaQwaioIHUA8TEbRgn/AISHc777NTM4ch9IFsULqQ/CBATdyue8wxItD/fm6wn9kceALlb4cjdC5C8nS/GlcIbdZxa+pr67KmOyAcgCtcJ47sBkrcTCh/z5ci/upa6L2usa/4/6ByQJxRuxdoCkLz1F+VCyKeVDi82z5o4XIo8AaJ6Egsg2u818WSXwjvqXeg9Dhd6F/5DACkmkE4VIL2Rpz0/cOH2xcjshYHnF/sjACkmkJIKkMHI3zq6XzkzMnn9Fq3pyZEzr3R3LPHfA6SYQJSuFA5Hxck1IKsVLoPUAyR/FxWATADEGpCHFI7bfQDJ31mVOVYHQGwBUZhhJTUAyd+gCpAugHgI5MZrVgCSK5WHbuOjAAFI4ECUtgc4DRBLQDYkADEDROmZwjGAWAKyLAaIGSDRtMJHPV0CiB0grQpHrQUg5aT0VrUDALEDRGEJEi8DSDkp7XI5ABDvgCR1ACknpQ1mzgPECpA16mt0gOSsWwXIFECsAKmPAWIKyG6ltwbuBYgNIGkQQDzY/uB6V1SAHCoKkDelD+a7toBsdQaIeMu1HHqlLcpOFQXIcpe+CI0KS5D4nnCBVGs59CdVgIwXBUi1S1+E+xWOWNIEEIN3Y812AMR8bQJLEIDk7YDSKv0lgJgvBYhBIO1KQE4DxHgqdyoCpPwuqQCZBIjxVqocsAcAUm5DSkNIJ0B8mmEltQAptyNKQI4CxMslCEByp/RurPhtgBhuRQIQo0CiqypAZtoBYjaVZ0HiZoCU37DSENINEI+WIKsBUn7HlICcBIjRmmRmWADJX5cSkCmAGE3lVneAVHapcFZJSBdAfJlhxW0AqaRR5ljeAFGaYcVVAKmkk8yxvAGiNMP67FZegJRVb8x5LF+ApEJLEICU0R41IGcAYqy6BCDmgai9HCu+UgKIqbYqHallAKms48yxPAGiNMNKtgHExpWQIsyxHAFSKzbDAkg5lZRux4qnOwBiphal49QMkEo7pzaE9APEhxnWWoBUWp8akDGAGGm93AwLICZP9MYvAMT5AQQg9k70hv8COSeAKL0w7taTvAAxe6L3ajtA9Ncci53kBYjZE73xYYD4NcMCiNETvfEIQLS3KpE7yQuQcjurOIR0AsTtASSpAYhKinf0hn413QEgavcp3j7DYvuDMmufVgMysydoIA5sf9CqdoBanAPiyQY6UnOs40EDsb+BzrZEdIbFFmym51hXgj7Ta38LNrUb3e+YYQHE9Bwr7JeQ2geSys6wAGJ8jjVRAog+IJuEZ1gAMT7HinsBog9IKjzDAoj5OdYoQLQBeSwRnmEBxPwcKz4IEF1AFAeQO2dYALEwxxoBiCYgineZzDPDAoiFOVbAb2+wDERxAJlnhgWQChpSBTIOEC1A1ikOIEkdQCR6MeZElpNAVAeQeWZYAKmkSwwhLgJRHkAaACLTUYYQF4HoGEAAUkm7ZhhC3AOiOoDErQBxZpke6rO3NoGoDiC3vg8LIHaX6VPtAJEF8lSiY4YFEEvL9HgQILJAlAeQjQCR6xVlIDPPA0QSyA49AwhAKmu38jI9PgcQQSBrVX3cvHEnQNQ7pwwkyG1vrQFRnWDFycMAkeygOpAxgIgBWa88gCwwwwJIpY2rC+kDiBQQ9QFkE0Bk61MHcnkXQGSAPK1tAAFIpbVfVhdyGiAiQDYo+7j9haMAUe+YOpDwni20A0R5gnX7K90B4sQNWXE80Q4QdSCb1AeQ1gwg4p0SGELeAIgykM3qPuZ7Ugogqu0TADK7HyCqQNrUD0OaAURDwwJCxksAUQOyTmAAeRggjl4sjONjAFEDkmodQACi0pgAkJn9AFEBskNgAFnnNBDPtj+4uUMSQ8hER0BAjG9/IHAGa9EBhA10VCpNSAgJ6bZe0xvorBXwseBdJqECqTb3feiTABLSPVmmt2ATWIAsPoAAxPoti3E8/QJAKutZiQHkSYDoq1dkCLnUAZBKaki0DyAAcWEIiYcAUkG1Ej4WPYUFEOV6RIAE8xYgo0AkFiBLDSAAUW1EBMj0PoDYWIAsOYAAxInL6XE83g6Q8lqXmBhAAOLIEBLIw1PmgGwQ8ZGsAojuDsgAiQ8BxPgCZOkBBCDqDcsAmd4LEMMLkBwDCEDU65yVETJWAkje1ieGBhCACHRKaJJ1EiA5a5LxkdQCxES7rgoJ6QeIyQVIsj0DiJH6hYDMvgyQPO00NsECiEilS0JCZroAsnQ7hCZYmwBiqm4hIPH0foCYOYGVcwABiEz/KCXkcidAFu9pIR/JCoCYa9+slJD39gBksZ4U8rHQfiAA0dMbUkD8fjhEO5AGKR9JE0CMnuq9IibkYjtAFuoRMR/PZADx8lTvtc6XADJ/a6R85FyhA0SwETkhZwAyb3ViPnLchAUQ6VuyZuSEnADIPG2R87EjA4jxjskBiQcAousGk7ImWACRvJ4+LijkEEBu72O5AWQdQGz04qwcEE9vy9IIZKeYj7yXQADi7sWQa0IOAUSTj2QzQOzUMRkXfB1S7f78Kk42ZgCxVI8kEB/3Z9MEZEsq56OcFTpApBsSFTJUAojs9Y+cjxGGDWS5xS/I7iuiQoZ9uy9Ly/YHa0R9PJN5BsTjDXTm6SVRIPHFXX4B0bGBziOSPsqcYLEFm3inZIV4dve7hi3YGkR9JBsAYhdI+3uyQqY6Cw3k739f1semDCB2gUT7Z2WFXO4qMJBv/Er0s0x2ZgCxDSR6RRZIPN1TWCDf/FD2o0wzgNgHEl0QFuLRRXXZA/kPH8l+kMkjAHEByPNXhIX4c1Fd9Dj+02+EfTybAcQFINHL0kDiMx2FA/Lav0p/iGkGEDeARGfEhVx6oWBA/voX0h9hsgYgrgDpmBAXMt1XKCDf/VDcx1MZQFwBEr0wLS4kHuooDJDXfyz+6ZXxlC1AvFyGeDHNkjmAf/O+/IeXZgBxCYjow1P+TLNEjt/3PpT/6JI6gLgFpHRBgxDnp1kCR++rP9HwuSXrM4C4BSTaPaVDyKX9gQP521/q8PF0BhDXgEQHZnQImekPGsj3P9ThY2cGEPeARH2xls51BAvkqz/V8omlGUBcBKLheuEnTewPFMg3PtDyeSU1AHETSGlUj5CZY6UAgbz2w4/0+GjIAOImkGjPlB4h8fiLwQH5xvt6PiqFBTpAvLyiPncL/BsdQQF5/V9+o8nHsxlA3AUS9cxqEhJP9gQE5K0PNH1KyccZQFwGEh2JtTW0OxAgf/ljbZ9RmgHEbSDRCX1CrvSXQgDy/V9p+4TKfokJQMx3Xp+Q+FK390C++Qt9H0/OrZ4BYrX2ixqFxMP7vAby9Z9q/GzUTvACxNjJ3gmdQmZO7PIWyOs/+kinj6czgPgAJOq8olNIfPlIyU8g3/sfnR+L6glegJira1qrkHiir+QfkO+8r/UzUblDESCm657VKyS+1OsZEM08pHwAxFAv6xYSj/d6BORbmnmI+WD7g3CEuEAkz/YHb7761s91fxTKF9AdAiLecieBRAOx/sYPWV6L5NlA57e+EPvjgy3YwhISTw602/wZc2zBtinR/ymkGUD8AxINmhASXz2+x10g27amBnyUtc8zQNzppBEh8cyZTjeB1LUmJn7+pCkDiJdATAmJ45HD7c4BWZUa4SHrAyBGKxkTEl899YJLQBqbDfEQ9gGQUMeQa431dzgCZL0pHeI+ABLmSv1G02e6S9aB1LYY5JFuzgDiNRAzZ3tveqjqTLdNIHVbzekQvf4BEHtCZs0SiadOdtkB0lRvUocWHwAJ866TO410txsGYlqH4P1XACmekDieeftopzEgK1pN69DkAyB27n6fjq00efqlDu1ANqxMzevQ5QMgduq6GltqdvzUob2afqq9h37v/jYbOMSeHwSIK3VOxhabOj9wQPb8b+nAwPkpiz+RyPPnAHGoPaOx3abHTh/tkphw7eo6enpsxu4PI/H+EoC4Vcdw7EATw4O9+yo9wdXe2Ts4POHATyHw/iuAuHdj1qnYlS6PnjvR39PZnhtGT/+Jc6OXHfnbJ+mGDCDhAbFwyXDJadfk6IWhk4NHDh08eHDf3mvNrb2vd+3fHDoyeHLowujktFt/aR2XBwHiyAURx75rPqbr9BVAXOjFy3zDHT19BRAn2neJ77ibp68A4sjJrLN8yxWW5zUZQMIG4uBS3R8fO/V/mwDiwH0nLEScXH4AxJmr6hf5tlfgY30GkGIAcemaoT/Lj7oMIEUBEkWHuSJSno8dhr5NAHGk/RN868vw8VQGkGIB4XxvOdOrNRlAigYkil6+ynffgZtLggey3Fcg0fMjfPtzDB+PZIUCUpANdPKdzXqFi4YOXBx0C0gxtmDLvVZ/DwOL+tiUAaTIQKIOLoksNr3akAGk2ECi6KUrSFjAxzPmv54Aca/dQ1iYd/iozQACkOv1TOLhDh8brXw9AeLmSuQNTmfdyqNtcwYQgNz0MO44Km6aXa2z9fUEiLPXRI7NIMPwnYkA8apOLqzPDR+rMoAAZL76OeNr5dwuQHxp18miL9b/tCkDCEAWmWe9XWgf//EHGUAAsviV9eI+SvXBt9/JAAKQJc9nFfNBkV//8LVXAQKQHO0p4s0nP/natWMJEIDk6kDRTvn+/O8+OZYAAUjODhaJyM/funEsAQKQ3HUX5e6T97/z2bEECEDKqHe8WDwAAhCI3Np/feeWYwkQgEDkpgsf33/tVYAARJHIaKiTq+++dvuxBAhAKqhrOMBbtH721jzHEiAAqah9p8J6WuSjf//beY8lQABSYbsHw9l359f//LUFjiVAAFJx7UfCeMvcBz94fcFjCRCAqNRz3vfFyG9+9u3XFjmWAAGI4n2Mx3y+G/6/f/j1xY8lQACifpfWOT8X7B/99FtLHkuAAERiwX70knc8fvmDv8pxLAHC9gcyvTjk0S6Hyf/957/lO5jvAkS85VExa+8964ORJP3j3/ldf75NbMGGEaM6Wmr8+jYBBCPoAEjRjFxxUEdzjY/fJoAEumYfHHMJR7psm6ffJoCEewmx79xVN4aOtR5/mwAScqWu42MMHQAByGIDSe/J0VkrNtqqmvz/NgGkEMv2rmPDV43iaF4dyLcJIIWp88jQJRM20gdqA/o2AaRYQ8mBvpNv6zsHfOUPm0L7NgGkgO3uHjgzJns5cXrszED37qg6AwhAAmnvwb7BsxenFGVMXTw72Hfw+Rv/T4AAJLhTwZ09/SfOj7xXnpSp90bOnejv6Szd+j8DCEDCbdferp6+Y8eHhkeuNTp5rTk0U9f/cfT6vxweOn6sr6dr766F/hcAAQgtEkAAQgABCAEEIAQQgBBAAAIQgAAEIAABCEAAAhCAAAQgAAEIQABCAAEIASSclvM9tdZygIjHy6sD6k3pg8nLq9n+IKTEjyXbHwAEIAABCEAAAhACCEAIIAAhgACEAAIQAghAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAggACGAAIQAAhACCEAIIAABCEAAAhCAAAQgAAEIQAACEIAABCAAIYAAhAACEAIIQAggAAEIQAACEIAABCAAAcjnsf1BQLH9gQexgY692EDHg9iCzV5swQYQAghACCAAIYAAhAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhACCEAIIAAhgACEAAIQAghAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAggACGAAIQAAhACCEAAAhCAAAQgAAEIQACiMd7Nay/ezSsfb3cPKN7uLh/7gwQU+4MAhAACEAIIQAggACGAAAQgAAEIQAACEIAABCAAAQhAAAIQgACEAAIQAghACCAAIYAAhAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhACCEAIIAAhgACEAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEAKIxtj+IKDY/sCD2EDHXmyg40FswWYvtmADCAEEIAQQgBBAAEIAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIAQQgBBCAEEAAQgABCAEEIAABCEAAAhCAAAQgAAEIQAACEIAABCAEEIAQQABCAAEIAQQgAAEIQHLFmxXtxZsV5ePdvAHFu3nl4+3uAcXb3QFCAAEIAQQgBBCAEEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAEIAAQgBBCAEEIAQQABCAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCAEEIAQQgBBAAEIAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIAURjbH8QUGx/4EFsoGMvNtDxILZgsxdbsAGEAAIQAghACCAAIYAABCAAAQhAAAIQgAAEIAABCEAAAhCAAIQAAhACCEAIIAAhgACEAAIQgAAEIAABCEAAAhCAAAQgAAEIQADieo9XVz/3ZTLfc9XVjwOEqEgBhAggRAAhAggRQIgAQgQQIoAQAYQIIEQEECKAEAGECCBEACECCBFAiABCBBAigBARQIgAQgQQIoAQAYQIIEQAIQIIEUCICCBEACECCBFAiABCBBAigBABhAggRAAhIoAQAYQIIEQAIQIIEUCIAEIEECKAEBFAiABCBBAigBABhAggRAAhAggRQIgAQkQAIQIIEUCIAEIEECKAEAGECCBEACEigBABhAggRAAhAggRQIgAQgQQIoAQAYSIAEIEECKAEAGECCBEACECCBFAiABCRAAhAggRQIgAQgQQIoAQAYQIIEQAIQIIEQGECCBEACECCBFAiABCBBAigBABhKjg/T8gQhtNiqIiFAAAAABJRU5ErkJggg=="};var t={},e=g.data.map((function(A){return A.judgement})),s=n.Vw.majority(e);B.setButtonImage(B._display_image[s]),B.dataparams=[g,Q],g.repcount;var w=new a.Layout(B.button_subwindow);w.setRect("Title",new a.Pos(0,0),new a.Pos(100,10),new a.RU_DataViewText),w.setRect("PercentBandwidth",new a.Pos(70,60),new a.Pos(30,20),(new a.RU_DataViewNumberBlock).setTitle("PercentBandwidth").setOptions({display_title:!1,text_align:"left",draw_bar:["left"],padding:{left:10}}).setDataAnalysisFunction((function(A){var g=A,Q=g.data.map((function(A){return A.data.expected_bandwidth})),I=g.data[0].data.Memory_Target_Bandwidth,E=void 0;return toplevel_use_mean?E=Math.round(100*n.Vw.mean(Q)/I):toplevel_use_median?E=Math.round(100*n.Vw.median(Q)/I):n.tV.assert("Undefined mode",!1),n.tV.assert("is number",E instanceof Number||"number"==typeof E),E})).setColorScaling((function(A){return 100-A})));var d=(0,C.Z)(B);return n.tV.assert("Valid bandwidth",B.Memory_Target_Bandwidth>0),w.setRect("Bandwidth",new a.Pos(0,60),new a.Pos(70,20),(new a.RU_DataViewFormLayout).setTitle("Bandwidth").setDataAnalysisFunction((function(A){var Q=A,I=Q.data.map((function(A){return A.data.expected_bandwidth})),E=Q.data.map((function(A){return A.data.datasize})),C=Q.data.map((function(A){return A.data.input_datasize})),B=Q.data.map((function(A){return A.data.bytes_from_l3})).map((function(A){return n.Vw.sum(A)})),t=Q.data.map((function(A){return A.data.bytes_from_mem})).map((function(A){return n.Vw.sum(A)})),e=g.repcount;if(all_analyses_global){var a=E.length/e;E=n.tV.createChunks(E,a,n.Vw.sum),C=n.tV.createChunks(C,a,n.Vw.sum),E=n.tV.createChunks(E,a,n.Vw.sum),B=n.tV.createChunks(B,a,n.Vw.sum),t=n.tV.createChunks(t,a,n.Vw.sum)}var i={};return toplevel_use_mean?i={title:"Bandwidth",value:n.tV.valueToSensibleString(n.Vw.mean(I),"programmer","B/c")}:toplevel_use_median?i={title:"Bandwidth",value:n.tV.valueToSensibleString(n.Vw.median(I),"programmer","B/c")}:n.tV.assert("Undefined mode",!1),{fontsize:16,rows:[i,{title:"Target Bandwidth",value:n.tV.valueToSensibleString(d.Memory_Target_Bandwidth,"programmer","B/c")},{title:"Bytes processed (SA)",value:n.tV.valueToSensibleString(n.Vw.median(E),"programmer","B")},{title:"Bytes imported into scope (SA)",value:n.tV.valueToSensibleString(n.Vw.median(C),"programmer","B")},{title:"Bytes requested from L3",value:n.tV.valueToSensibleString(n.Vw.median(B),"programmer","B")},{title:"Bytes requested from memory",value:n.tV.valueToSensibleString(n.Vw.median(t),"programmer","B")}],padding:{left:10,right:10,top:0,bottom:0},rawdata:A}}))),w.setRect("Graph",new a.Pos(0,10),new a.Pos(70,50),new a.RU_DataViewBarGraph({type:"horizontalBar",xAxes:[{type:"linear",display:!0,position:"bottom",id:"data-axis",gridLines:{display:!1},ticks:{beginAtZero:!0},scaleLabel:{labelString:"Misses",display:!0}},{type:"linear",display:!1,ticks:{max:1,min:-1},id:"corr-axis",position:"top",gridLines:{display:!1},scaleLabel:{labelString:"Correlation",display:!0}}],yAxes:[{display:!1,position:"left",id:"thread-axis",gridLines:{display:!0},scaleLabel:{labelString:"Thread",display:!0}}]}).setDataAnalysisFunction((function(A){if(null!=A){for(var g=A.data.map((function(A){return A.data.L2_TCM})),Q=A.data.map((function(A){return A.data.L3_TCM})),E=A.data.map((function(A){return A.data.TOT_CYC})),C=(A.data.map((function(A){return A.data.mem_bandwidth})),A.data.map((function(A){return A.data.l3_bandwidth})),a.RU_DataViewBarGraph.colorList().slice(0,g[0].length+1+2)),B=[],t=function(A){var Q,I=[],E=i(g[0]);try{for(E.s();!(Q=E.n()).done;)Q.value,I.push([])}catch(A){E.e(A)}finally{E.f()}var C,B=i(A);try{for(B.s();!(C=B.n()).done;)for(var t=C.value,e=t[0],a=t[1],n=0;n 0.0);\n this.Memory_Target_Bandwidth = new Number(target_bw);\n\n this._display_image = {\n \"1\": \"data:image/png;base64,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tftm2QMEEEBy6uWyBwgggGTViZIHCCCA5HWUNVHuAAEEkLxad7VPH5Pd7jQEBJCc2tznUdaeUUAAaUM7+zrKOjYKCCDtaH8fPi6NAQJIWzpe3gABBJAMj7LOlzZAAKki1x/U3NorZQ0Q1x8kkQt0ej3KulHSAHGBThKNeOR7bMfNcgYIIIDk2b5yBggggGTasTIGCCCAZHuUdS7m4+IYIIC0sfHQUdaNDaOAANLKNkYuRtg1CgggLW377EdZR0cBAaS1zXrXwYUxQABpcd8acIAAAkjWfWXAAQIIIHn/UtaAAwQQQPLuzGADBBBA8m7bYAMEEEAy7/xAAwQQQDJvw2QXH0dGAQFEo199uI9vjgECiD5s/8P+//TzUR+AAJL9z5AHhZwaHwUEEH3cpvt+831ybw//MCCA5N/uz3xk76sH144CAojuPc16+eTEtasTZw/tXNPbPwgIIAIEEAECiAABRIAAAggggAACCCCAAAIIIIAAAggggDTyS/KcApIREBfoZJQLdMrPFWw55Qo2QAQIIAIEEAECiAABBBBAAAEEEEAAAQQQQAABBBBAAAFEgAAiQAARIIAIEEAECCCAAAIIIIAAAggggAACCCCAAAIIIAIEEAECiAABRIAAAggggAACCCCAAAIIIIAAAggggAAiQKrL9QcZ5fqDBHKBTn25QCeBRjyngAACCCCAAAIIIIAAAggggAACCCCAACJAABEggAgQQAQIIIAAAggggAACCCCAAAIIIIAAAgggAgQQAQKIAAFEgAAiQAABBBBAAAEEEEAAAQQQQAABBBBAABEggAgQQAQIIAIEEEAAASTyJXlOAckIiAt0MsoFOuXnCraccgUbIAIEEAECiAABRIAAAggggAACCCCAAAIIIIAAAggggAAiQAARIIAIEEAECCACBBBAAAEEEEAAAQQQQAABBBBAAAEEEAECiAABRIAAIkAAAQQQQAABBBBAAAEEEEAAAQQQQAARINXl+oOMcv1BArlAp75coJNAI55TQAABBBBAAAEEEEAAAQQQQAABBBBAABEggAgQQAQIIAIEEEAAAQQQQAABBBBAAAEEEEAAAQQQAQKIAAFEgAAiQAARIIAAAggggAACCCCAAAIIIIAAAggggAgQQAQIIAIEEAECCCCAABL5kjyngGQExAU6gADyiFzBBggggAACCCCAAAKIAAFEgAAiQAARIIAAAggggAACCCCAAAIIIIAAAggggOgzvVn2b55+AAggOVX29/J9QAABBBBAAAEEEAECiAABRIAAIkAAESCAAAIIIIAAAggggAACCCCAAAIIIIAIEEAECCACBBABkhYQ1x9klL9RmEAu0Kkvfyc9gUY8p4AAAggggAACCCCAAAIIIIAAAggggAAiQAARIIAIEEAECCCAAAIIIIAAAggggAACCCCAAAIIIPq0EUAAESCACBBABAggAgQQQAABBBBAAAEEEEAAAQQQQAABBBABktiX5DmtrccAKT0fXp1R7/rw6tJz/UFGzbj+ABABAogAAUSAACJAAAEEEEAAAQQQQAABBBBAAAEEEEAAESCACBBABAggAgQQAQIIIIAAAggggAACCCCAAAIIIIAAAogAAUSAACJAABEggAACCCCAAAIIIIAAAggggAACCCCACJDqcv1BRrn+IIFcoFNfLtBJoBHPaW25gg0QAQKIAAFEgAAiQAABBBBAAAEEEEAAAQQQQAABBBBAABEggAgQQAQIIAIEEAECCCCAAAIIIIAAAggggAACCCCAAAKIAAFEgAAiQAARIIAAAggggAACCCCAAFLll+Q5rS2fzVt+Pt09o3y6e/m5HySj3A8CiAABRIAAIkAAESCAAAIIIIAAAggggAACCCCAAAIIIIAIEEAECCACBBABAogAAQQQQAABBBBAAAEEEEAAAQQQQAABRIAAIkAAESCACBBAAAEEEEAAAQQQQAABBBBAAAEEEEAESIW5/iCjXH+QQC7QqS8X6CTQiOe0tlzBBogAAUSAACJAABEggAACCCCAAAIIIIAAAggggAACCCCACBBABAggAgQQAQKIAAEEEEAAAQQQQAABBBBAAAEEEEAAAUSAACJAABEggAgQQAABBJDYl+Q5rS2frFh+Pps3o3w2b/n5dPeM8unugAgQQAQIIAIEEAECCCCAAAIIIIAAAggggAACCCCAAAKIAAFEgAAiQAARIIAIEEAAAQQQQAABBBBAAAEEEEAAAQQQQAQIIAIEEAECiAABBBBAAAEEEEAAAQQQQAABBBBAAAFEgFSY6w8yyvUHCeQCnfpygU4CjXhOa8sVbIAIEEAECCACBBABAggggAACCCCAAAIIIIAAAggggAACiAABRIAAIkAAESCACBBAAAEEEEAAAQQQQAABBBBAAAEEkKb39MjI81/S8Ht+ZORpQKQ2BYgEiASIBIgEiASIBIgEiASIBIgkQCRAJEAkQCRAJEAkQCRAJEAkQCQBIgEiASIBIgEiASIBIgEiASIJEAkQCRAJEAkQCRAJEAkQCRAJEEmASIBIgEiASIBIgEiASIBIgEgCRAJEAkQCRAJEAkQCRAJEAkQCRBIgEiASIBIgEiASIBIgEiASIJIAkQCRAJEAkQCRAJEAkQCRAJEAkQSIBIgEiASIBIgEiASIBIgEiCRAJEAkQCRAJEAkQCRAJEAkQCRAJAEiASIBIgEiASIBIgEiASIBIrW8/wGZ0JDqvSQHhgAAAABJRU5ErkJggg==\",\n \"-1\": \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAyAAAAMgCAMAAADsrvZaAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAOwgAADsIBFShKgAAAABh0RVh0U29mdHdhcmUAcGFpbnQubmV0IDQuMS41ZEdYUgAAAlJQTFRF8Q0N8dbW/8bG/8DA/7u7/729/7W1/7Ky/7Cw/6ys/6mp9q+v/6am/6Ojz8/P/6Cg/56e/5qampqa/9fX/9ra/5eX/8/P/9PT/9XV/93d/9/f/+Li/+Xl/+fn+e7u/8bG/8nJ/8zM/+jo/+zsqysr/5WV/8TE/+7uw8PD/5GR/8HB/+/v+pSU+/j4/7q6/729//Hx//Pz/4yM/7e3//T0yCkpyYyM/4uL/7Oz/6+v/4iI/6ys/4WF/6iog4OD/YWF/6Wlg4ODhIOD/Sgo/4ODwICA0YCA4ycn/6KiAAAABAAACAAADAAAEAAAFAAAGAAAHAAAIAAAJAAAKAAALAAAMAAANAAAOAAAPAAAQAAARAAASAAATAAAUAAAVAAAWAAAXAAAYAAAZAAAaAAAbAAAcAAAdAAAeAAAfAAAgAAAgICAgX19gwAAg3t7hXl5hwAAh3d3iXV1iwAAi3NzjXFxjwAAj29vkW1tkpKSkwAAlWlplwAAl2dnmWVlmwAAnWFhnwAAn19foV1dowAAo4GBpVlZpwAAp1dXqVVVqwAAq1NTrVFRrwAAr09PswAAs0tLtwAAt0dHuwAAu0NDvwAAvz8/v7+/wT4+wwAAxTo6xwAAxzg4ywAAyzQ0zLCwzTIyzs7OzwAAzzAw0wAA0yws1wAA2SYm2wAA3wAA3yAg4ERE4wAA5Roa5ZiY5wAA5xgY6RYW6wAA6xQU7RIS7wAA7xAQ8Q4O8wAA8wwM9wAA9wgI+QAA+QYG+wAA+wQE+4KC/QIC/wAA/yYm/39//56e////55zYuAAAAEl0Uk5T3+Dh4uPj5ebn6Onq6uvt7e7v8PDw8fHx8fHx8fHx8vLy8vLy8/Pz8/T09PT19fX19fX29vb39/f3+Pn6+/v8/Pz9/f39/v7+/oME4UMAACOBSURBVHja7d3/f1fVfcDxTjurGaIGEYFkYFgSNRvfZIuG6OiWbtxPAggRDIkRQogsimWzZZPR0VhWOtp0szR1LEs3U2qTLh2WyZamM673Xu//NTCofMmX+/mc9/l6X6+ffPgQH+RzP8+cc+6384WMiBbsC3wERAChvG2764v3Xqtq5bXq0+vVX//Hquv/8ot3bQMIFa8tv33vg3MY0jSJFyu58V/VP3jv3VsAQoFXc1/90igWxVJ/Xw1AKLjqlrVULmMeJy3L6gBCIdR0z1YhGXc62XpPE0DI22of0ELjdiYP1AKEfGt1s24btyhpXg0Q8mVSVdVmDsdNSNqqmgBCbrdtmXkbtyhZtg0g5Ghrmy3i+BxJ81qAkHOtTx3Q4f9AApAQq9nqjo7PB5IagJALOlpcw/GZkZYagBA6QjICEHRgBCAFqNYHHZ8ZqQMImazBGx2fGmkACJkaPFo94zFHpLUWIMTg4fcwAhAGD7vDyFqAkK7We63jUyPrAEI62hgAjzkiTwOEhGtqDoTHjZlWI0BIrjVt4ej41MhqgJBMj6Sh8Zgjsh4gpN66IHnMEdkEEIKHT6e0AMLkCiIACaNVwfOYI7IKIFR+jxaCh2tEAOJJqwvDw62TvgDxosa2IvH4hEhbI0AoZ9uLxuMTItsBQnlqSIvow5G74QHieg8XlMcckYcBQou1ua24POaWIpsBQgv2TLF5fELkGYDQ/K1K8WH7qghA3G0HPG4Q2QEQur11DB8u3KAFEBbnLNYB4lsb4XEHkY0AoblqmV3NO8+qBQhxbtetM74Aca1Gho9FBpFGgBS8BngsSuRJgBQ6rn0sJWQnQIrbCqZXOaZZjwKE1Tk5slYHCKtzDweROoCwOqdFiGwCSMHajo+yhDwLkEL1MT7KnWZtBghnr2gRIo8CpCBxa2JlQp4CSCHi4mClQnYAJPw2ML1y+XwvQCz3GDyUiDwGkKB7Ch9uL0QAYrVnExfnLQvn4l/3WYAE287ELRYtK6u+dFfTIn/hpru+VLWyxS0qeu/vBYjFXLg6+AmMJ6ru3lLm333L3VVPOAIlSbcAJMBqbH+5rtt4SHUfjtUPOaAkWQOQ4FqV2LXRsmyD3KnqZa12lSSPACSwnkws4qjX8Rt3Tb1FJNpu7wWInZ5OLOFou1/new8a72+zhETXU1QAKczp3Wsjx8oNBn62DSutjCSaTvcCpBg+krR1hcEfcEWreSN6TvcCxEKmL38kaX2T8R+yqd60ES1CABK6Dys67BjRIQQgxjN5eTBJt9ZZ/WHrtpo0knwMEHyUoaOlzoEfuLbFnBF5IQAxPOsw9mVJ0vXO/NTrDf7UTQDx2Udi6nvS3OjUD97YbMpI0gQQfCzFY5WDP7ypLUllhQAkOB9Ja52jP39da+KdEIAYLDUyt9rm8CewzchJrRQgnL9agMdG5z+FTfqJSJ7LAkg4PixullxWj2knIigEIKbSff3cFx5G1uty19QBEoYPn3hcb51mImJCAGImvffvJmmDd5+IZiJSQgDiv48k1fA43ceLvPznYx+ICD0fAhATaX1+MHlax185NXEa9SmdRJLtAPEknc+fJ6163nljBIjeF3cnGwHixzmbROPsarWmv7QhINlajYOIxIt7AaK9msTHtbkpIFpv9U1WA8T9tN1gonU7ZHNAdC7RkkaAuJ6uC+hJWpsFAkTjHikpQBxP1wXCRPNdV0aBZNkmXR/TToA4naYLIEmb7j1eDQPJNrdp+qSeBYjD6dkfx8R9JaaBaLtuqHiZCCA607O/mom9Ky0A0XVRJGkAiKNt0HPAN2WBAtG0EklqAFKcE7xJujYLFoimy4YpQJxMx4zByPTKHhA9ZzVUTmUBRFsbE9fm0z4AyRoSpxbqANHVikTD9Ko2Cx5IVqthmlX5DlQA8WcBonnDY1eAaJlmVXzPCUA0JX+HSdKQFQRIti5xZqEOED1tTzyeXlkHouHmrEqHX4D4sdI0Or2yD0TDNKvCy0cA0VFj4vX0ygUg2Xrxz7AGIIEu0JO0LiscEPmdIlKAONIzskdWw75JPgARf1Sgorc4AEQ+4SsgenZv9QGI9L0IySqAhDfBMr48dwiI9FI9BYgDyf7a0/PWK1+ACD+uXsFgDBDpZM/wJk9lhQYi/E6x5EmAWK7R8gENDYj0L5xGgAS0AKn8HrtwgGSPJDaXIQCRTfQMb7I6A0iWrRH9TJ8BiMVqRY9lbQaQ69VZ/FQB4uoEK0k3ZwCZa4vkRfUUINYSfIjQyuVzV4GIPj1Q3iv3ACLYZsGjuDMDyM0J3naSbAaIndrC8eEcEEkhbQCxktxzcLbnVy4CEZxlJesA4vcKPc0A4sjnCxCx5O7BSjYDROsSr4y3iwFEKrmN1qxe/3AYiOBVpvw3vgPEuQmAzevnbgPJVifGJ1kAEUrsHhOL9185D0Tuvqzcd5wAxLH5sb37d30AInf3e9IEEJNJXQKx9vyHJ0DktiRqA4jBHhY6bLaeH/QHiNgzhskKgHi3Qrf0/LlXQMSeU08BYiyhp97s32DiAxCpm07yvWoRIO4MIA7cYOIFEKmbTlKAGGq7wQMGELlfSNsBYiSh9zQkdQDJmdAl9Ty3LABEPZlTvObfT+0vEKlFXwoQA8nc/+DQCSwPgAidyspxSxZAHJkQpxlAXPzUAaLao4mp6TBAxJchSw8hAHHiV5ljCxAPgAgtQ1KAaE7kMRDXFiA+AJFZhiz59C1AXBhA0gwgjn70AFFL5AEF5xYgfgCpNTGEAMT+bzH3FiB+AJF5OCQFiMYk3vRTxhsEAHJrEu/JWGIIAYj1ASTNAOLu5w8Q6wPIWoBU3FrtQwhALP8Cy/dUAkAWaFOieQgBiN1TWG4uQPwBIrEMSR4DiLMDSJoBxOmDAJDKE9garJzXKANE1zpwsVf1AaTyBJ4DacsA4vZhAEjFNQn86toMEOUE3tm3yObQAKm4ZvXjsjEDiHoCG9+1AsTF1WGaAcT1IwEQe7+3XLxH0Usg6nctLvxGS4BY+7VV7pb2AFkw9VfrpwARbn0S8gTLMyACv62eBIhrh6QBIGI1aPt1BRBb0940A4hLv6/WAESyVp1XbwFSduovJ2sDiFO/sVozgDj1GysFiEtz3mQLQETbkuhZpgPEygDizk5SoQBR33kqBYg7S/Q0A4hzv7TWAsSVCa+rjxF6DUT54cJWgLjyyyrNAOLJUQGIhSW649cIfQWi5bAAhAEkFCBajgtAzC/R3X3O1nMgqk/fzrcJHkDKr6UAA4iXQJSHkBaAOHAYvBhA/ASiOoSkABGoJinAAOInEOXfXTUAsT7D8mMA8RSI6hDSAhDrv6XSDCAeHZwAgTxeXf3cl/X1Z4q/pP78T77sQV9Z7KdMvjLvn3muuvpx2wdf8U0Bd86xAgRSHemsfVrxTMlA5EODi/4Mgwv9sWrfh5AWgCjWq+jjajtAdNYsPMcCSJmdVQRyPAKIzrYJz7EAYnaGNbMHIHprlZ1jAcTsDOtMBBC91SWicyyAmJ1hdQLE7WX67XMsgJTXFTUfIxFAdLdKbQjZChCFXlQcQA4DxPUhJAWItu9NKOd4PQfSDBBrQMbUgJyKAKK/RqU5VrIeIBW3R3GG9QJAfJtjAaSc+tR8jEUAMZHam/cBUnnn1ID0A8SDIeTW92MBpIxKV5V8THcAxExqj+w0A6TCuopxFd1/ILVycyyAlNFxNSDdAPFjjrUNIDZO8l4pAcRUW5WO1DKA2DjJ69MMy3cgdWJzLIAYu5O3GyCezLEAUlknlXxMRQAxV73SIqQJIJU0qgTkJEAM1qQ0x6oCSAW1zyoB6QKIN3OsNoAYvwri1wzLfyD1QosQgOTuWIFmWP4DUZpjAaSShotzDisAIEpzrJs2sQ8QyHJN3xmlG7Fm2gsBZLk7XwOlt5s0OwTk3XeEe1PPV6ZTaQB5OyoEkDelD+a7FX+vVsjMsewDeedV6fR8ZY4oATlaDCDix/IdO3MsgJTfUCFe9wOQuUVILUDK7ZKKj8kIIKaBrFQ5YA8ApNzLhEoDyGmAGAeyQWQRApCcHVAC8hJAjAORWYQAJGdK72uY7QCIeSBtADEIROlW3vEIIOaB3C9xQy9AcvZ2MV4YFxIQpRfI3QOQ8lJ6a/UhgFgAorQI2QqQstqttEbfCxDfgKQAKavuAt3qHgyQeoAYAzKgAuQ8QKwAWZMAxBSQMypABgBiBYjKHCupA0g5Kb0S6wBAvAPy6cuxAJIvlc1tp0sAsQNE5ZmQFoCU0V6VAWQsAogdIMvUV+kAydXBQt2pGAyQDQlAzABRuhPrKEAsAVFZhABE7vsS1BuxAAKQ8jurAqQDIB4CSWoAkr+LCj4mIoDYAvKQwnG7DyD5m1L4oIcBYg3IaoVVej1AcldSmWENAsQaEPVFCEDypPROrF4fgSy+n+85gADk5npUgOzzj8f+kSV+ppH9AAHI5/WrAGn3jUfpxNIbPcyeKAEEIJ92QsHHZd987BvP95z9Ph+APKFwnncLQPJ2XgHIqGc+Xsp7X+b0Sx4AqVI4cncDJG8jCh/zOb98HMm/j9bsEfeB3K1w5O4FSN7eU/iYT3jlo7wnJwecB7JF4ULIg24A8WH7A5XrhP1ejR+KP5xD2x+or9Lr3QAinoYNdFROYvX4tP4od5/S2dvWIcud+zaonsZiC7Yc7VIB4tHGB/vKf27yf08N3twfAaSIQJSeJ/TnMkhpPFYtSSvtY4D4C0RlA+hpfwaQE7HFUk3fhhaA6AeicqeJP1vn7J8NEchKgOgHovLArT/XCUfiEIFUAUQ/kGMKB/6CLz564yCBfAkg+oEcVzjwQ74AGQ8TyF0KZxy2ASRfKhvcnvTER08cJpAmhUvpdwEkX8MFeJ5wOFAgKud5vwgQ/cvXI3742DMLkHnvVgSIZiCebC41EAMEIDaAHPQDyAWAAAQgC9Y+AxCAVNxo8EC6YoDcWRVA8jWpcOD3sQTxFshKgOgH4scGt6cBAhCAuHofFkAA4ngTAAFI5U0FD+QqQOapHiD5UjnwflwGiQGywN8JIAABCEAAAhCAAIQ1CEAAoqNJgACEs1hcB+EsFtdBKuoMQLgOApCFewUgAAHIwh0ECEAAwvMgAMl4HqSieKKQ50HsnOPxBAjPpM8TTxQC5NN4qwlA7ADx5K0m0dsAAYgNIJ68F8v2q3kBYi75LdiK8GZFpY1KAwXixpsVPdjEswjv5o0O2QWSaNrE0/9383qwDXQh3u4ejdkVomcb6ADe7u4BkELsDxJ1zYYIxP/9QTwA0qdw3P3ZYSo6FSKQKoDoB1KMPQqj9vcCBLISIPqBFGSX22h/+fukz56+ZZ/0H1WeJiAtANEPpCD7pFdyJuvwrf8D8WOpDCQFiH4gu1SAdHoEpOxbsgYigABE7aH0Hp+ARH+hdhUUIMUEovJQer9XQMoaQwaioIHUA8TEbRgn/AISHc777NTM4ch9IFsULqQ/CBATdyue8wxItD/fm6wn9kceALlb4cjdC5C8nS/GlcIbdZxa+pr67KmOyAcgCtcJ47sBkrcTCh/z5ci/upa6L2usa/4/6ByQJxRuxdoCkLz1F+VCyKeVDi82z5o4XIo8AaJ6Egsg2u818WSXwjvqXeg9Dhd6F/5DACkmkE4VIL2Rpz0/cOH2xcjshYHnF/sjACkmkJIKkMHI3zq6XzkzMnn9Fq3pyZEzr3R3LPHfA6SYQJSuFA5Hxck1IKsVLoPUAyR/FxWATADEGpCHFI7bfQDJ31mVOVYHQGwBUZhhJTUAyd+gCpAugHgI5MZrVgCSK5WHbuOjAAFI4ECUtgc4DRBLQDYkADEDROmZwjGAWAKyLAaIGSDRtMJHPV0CiB0grQpHrQUg5aT0VrUDALEDRGEJEi8DSDkp7XI5ABDvgCR1ACknpQ1mzgPECpA16mt0gOSsWwXIFECsAKmPAWIKyG6ltwbuBYgNIGkQQDzY/uB6V1SAHCoKkDelD+a7toBsdQaIeMu1HHqlLcpOFQXIcpe+CI0KS5D4nnCBVGs59CdVgIwXBUi1S1+E+xWOWNIEEIN3Y812AMR8bQJLEIDk7YDSKv0lgJgvBYhBIO1KQE4DxHgqdyoCpPwuqQCZBIjxVqocsAcAUm5DSkNIJ0B8mmEltQAptyNKQI4CxMslCEByp/RurPhtgBhuRQIQo0CiqypAZtoBYjaVZ0HiZoCU37DSENINEI+WIKsBUn7HlICcBIjRmmRmWADJX5cSkCmAGE3lVneAVHapcFZJSBdAfJlhxW0AqaRR5ljeAFGaYcVVAKmkk8yxvAGiNMP67FZegJRVb8x5LF+ApEJLEICU0R41IGcAYqy6BCDmgai9HCu+UgKIqbYqHallAKms48yxPAGiNMNKtgHExpWQIsyxHAFSKzbDAkg5lZRux4qnOwBiphal49QMkEo7pzaE9APEhxnWWoBUWp8akDGAGGm93AwLICZP9MYvAMT5AQQg9k70hv8COSeAKL0w7taTvAAxe6L3ajtA9Ncci53kBYjZE73xYYD4NcMCiNETvfEIQLS3KpE7yQuQcjurOIR0AsTtASSpAYhKinf0hn413QEgavcp3j7DYvuDMmufVgMysydoIA5sf9CqdoBanAPiyQY6UnOs40EDsb+BzrZEdIbFFmym51hXgj7Ta38LNrUb3e+YYQHE9Bwr7JeQ2geSys6wAGJ8jjVRAog+IJuEZ1gAMT7HinsBog9IKjzDAoj5OdYoQLQBeSwRnmEBxPwcKz4IEF1AFAeQO2dYALEwxxoBiCYgineZzDPDAoiFOVbAb2+wDERxAJlnhgWQChpSBTIOEC1A1ikOIEkdQCR6MeZElpNAVAeQeWZYAKmkSwwhLgJRHkAaACLTUYYQF4HoGEAAUkm7ZhhC3AOiOoDErQBxZpke6rO3NoGoDiC3vg8LIHaX6VPtAJEF8lSiY4YFEEvL9HgQILJAlAeQjQCR6xVlIDPPA0QSyA49AwhAKmu38jI9PgcQQSBrVX3cvHEnQNQ7pwwkyG1vrQFRnWDFycMAkeygOpAxgIgBWa88gCwwwwJIpY2rC+kDiBQQ9QFkE0Bk61MHcnkXQGSAPK1tAAFIpbVfVhdyGiAiQDYo+7j9haMAUe+YOpDwni20A0R5gnX7K90B4sQNWXE80Q4QdSCb1AeQ1gwg4p0SGELeAIgykM3qPuZ7Ugogqu0TADK7HyCqQNrUD0OaAURDwwJCxksAUQOyTmAAeRggjl4sjONjAFEDkmodQACi0pgAkJn9AFEBskNgAFnnNBDPtj+4uUMSQ8hER0BAjG9/IHAGa9EBhA10VCpNSAgJ6bZe0xvorBXwseBdJqECqTb3feiTABLSPVmmt2ATWIAsPoAAxPoti3E8/QJAKutZiQHkSYDoq1dkCLnUAZBKaki0DyAAcWEIiYcAUkG1Ej4WPYUFEOV6RIAE8xYgo0AkFiBLDSAAUW1EBMj0PoDYWIAsOYAAxInL6XE83g6Q8lqXmBhAAOLIEBLIw1PmgGwQ8ZGsAojuDsgAiQ8BxPgCZOkBBCDqDcsAmd4LEMMLkBwDCEDU65yVETJWAkje1ieGBhCACHRKaJJ1EiA5a5LxkdQCxES7rgoJ6QeIyQVIsj0DiJH6hYDMvgyQPO00NsECiEilS0JCZroAsnQ7hCZYmwBiqm4hIPH0foCYOYGVcwABiEz/KCXkcidAFu9pIR/JCoCYa9+slJD39gBksZ4U8rHQfiAA0dMbUkD8fjhEO5AGKR9JE0CMnuq9IibkYjtAFuoRMR/PZADx8lTvtc6XADJ/a6R85FyhA0SwETkhZwAyb3ViPnLchAUQ6VuyZuSEnADIPG2R87EjA4jxjskBiQcAousGk7ImWACRvJ4+LijkEEBu72O5AWQdQGz04qwcEE9vy9IIZKeYj7yXQADi7sWQa0IOAUSTj2QzQOzUMRkXfB1S7f78Kk42ZgCxVI8kEB/3Z9MEZEsq56OcFTpApBsSFTJUAojs9Y+cjxGGDWS5xS/I7iuiQoZ9uy9Ly/YHa0R9PJN5BsTjDXTm6SVRIPHFXX4B0bGBziOSPsqcYLEFm3inZIV4dve7hi3YGkR9JBsAYhdI+3uyQqY6Cw3k739f1semDCB2gUT7Z2WFXO4qMJBv/Er0s0x2ZgCxDSR6RRZIPN1TWCDf/FD2o0wzgNgHEl0QFuLRRXXZA/kPH8l+kMkjAHEByPNXhIX4c1Fd9Dj+02+EfTybAcQFINHL0kDiMx2FA/Lav0p/iGkGEDeARGfEhVx6oWBA/voX0h9hsgYgrgDpmBAXMt1XKCDf/VDcx1MZQFwBEr0wLS4kHuooDJDXfyz+6ZXxlC1AvFyGeDHNkjmAf/O+/IeXZgBxCYjow1P+TLNEjt/3PpT/6JI6gLgFpHRBgxDnp1kCR++rP9HwuSXrM4C4BSTaPaVDyKX9gQP521/q8PF0BhDXgEQHZnQImekPGsj3P9ThY2cGEPeARH2xls51BAvkqz/V8omlGUBcBKLheuEnTewPFMg3PtDyeSU1AHETSGlUj5CZY6UAgbz2w4/0+GjIAOImkGjPlB4h8fiLwQH5xvt6PiqFBTpAvLyiPncL/BsdQQF5/V9+o8nHsxlA3AUS9cxqEhJP9gQE5K0PNH1KyccZQFwGEh2JtTW0OxAgf/ljbZ9RmgHEbSDRCX1CrvSXQgDy/V9p+4TKfokJQMx3Xp+Q+FK390C++Qt9H0/OrZ4BYrX2ixqFxMP7vAby9Z9q/GzUTvACxNjJ3gmdQmZO7PIWyOs/+kinj6czgPgAJOq8olNIfPlIyU8g3/sfnR+L6glegJira1qrkHiir+QfkO+8r/UzUblDESCm657VKyS+1OsZEM08pHwAxFAv6xYSj/d6BORbmnmI+WD7g3CEuEAkz/YHb7761s91fxTKF9AdAiLecieBRAOx/sYPWV6L5NlA57e+EPvjgy3YwhISTw602/wZc2zBtinR/ymkGUD8AxINmhASXz2+x10g27amBnyUtc8zQNzppBEh8cyZTjeB1LUmJn7+pCkDiJdATAmJ45HD7c4BWZUa4SHrAyBGKxkTEl899YJLQBqbDfEQ9gGQUMeQa431dzgCZL0pHeI+ABLmSv1G02e6S9aB1LYY5JFuzgDiNRAzZ3tveqjqTLdNIHVbzekQvf4BEHtCZs0SiadOdtkB0lRvUocWHwAJ866TO410txsGYlqH4P1XACmekDieeftopzEgK1pN69DkAyB27n6fjq00efqlDu1ANqxMzevQ5QMgduq6GltqdvzUob2afqq9h37v/jYbOMSeHwSIK3VOxhabOj9wQPb8b+nAwPkpiz+RyPPnAHGoPaOx3abHTh/tkphw7eo6enpsxu4PI/H+EoC4Vcdw7EATw4O9+yo9wdXe2Ts4POHATyHw/iuAuHdj1qnYlS6PnjvR39PZnhtGT/+Jc6OXHfnbJ+mGDCDhAbFwyXDJadfk6IWhk4NHDh08eHDf3mvNrb2vd+3fHDoyeHLowujktFt/aR2XBwHiyAURx75rPqbr9BVAXOjFy3zDHT19BRAn2neJ77ibp68A4sjJrLN8yxWW5zUZQMIG4uBS3R8fO/V/mwDiwH0nLEScXH4AxJmr6hf5tlfgY30GkGIAcemaoT/Lj7oMIEUBEkWHuSJSno8dhr5NAHGk/RN868vw8VQGkGIB4XxvOdOrNRlAigYkil6+ynffgZtLggey3Fcg0fMjfPtzDB+PZIUCUpANdPKdzXqFi4YOXBx0C0gxtmDLvVZ/DwOL+tiUAaTIQKIOLoksNr3akAGk2ECi6KUrSFjAxzPmv54Aca/dQ1iYd/iozQACkOv1TOLhDh8brXw9AeLmSuQNTmfdyqNtcwYQgNz0MO44Km6aXa2z9fUEiLPXRI7NIMPwnYkA8apOLqzPDR+rMoAAZL76OeNr5dwuQHxp18miL9b/tCkDCEAWmWe9XWgf//EHGUAAsviV9eI+SvXBt9/JAAKQJc9nFfNBkV//8LVXAQKQHO0p4s0nP/natWMJEIDk6kDRTvn+/O8+OZYAAUjODhaJyM/funEsAQKQ3HUX5e6T97/z2bEECEDKqHe8WDwAAhCI3Np/feeWYwkQgEDkpgsf33/tVYAARJHIaKiTq+++dvuxBAhAKqhrOMBbtH721jzHEiAAqah9p8J6WuSjf//beY8lQABSYbsHw9l359f//LUFjiVAAFJx7UfCeMvcBz94fcFjCRCAqNRz3vfFyG9+9u3XFjmWAAGI4n2Mx3y+G/6/f/j1xY8lQACifpfWOT8X7B/99FtLHkuAAERiwX70knc8fvmDv8pxLAHC9gcyvTjk0S6Hyf/957/lO5jvAkS85VExa+8964ORJP3j3/ldf75NbMGGEaM6Wmr8+jYBBCPoAEjRjFxxUEdzjY/fJoAEumYfHHMJR7psm6ffJoCEewmx79xVN4aOtR5/mwAScqWu42MMHQAByGIDSe/J0VkrNtqqmvz/NgGkEMv2rmPDV43iaF4dyLcJIIWp88jQJRM20gdqA/o2AaRYQ8mBvpNv6zsHfOUPm0L7NgGkgO3uHjgzJns5cXrszED37qg6AwhAAmnvwb7BsxenFGVMXTw72Hfw+Rv/T4AAJLhTwZ09/SfOj7xXnpSp90bOnejv6Szd+j8DCEDCbdferp6+Y8eHhkeuNTp5rTk0U9f/cfT6vxweOn6sr6dr766F/hcAAQgtEkAAQgABCAEEIAQQgBBAAAIQgAAEIAABCEAAAhCAAAQgAAEIQABCAAEIASSclvM9tdZygIjHy6sD6k3pg8nLq9n+IKTEjyXbHwAEIAABCEAAAhACCEAIIAAhgACEAAIQAghAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAggACGAAIQAAhACCEAIIAABCEAAAhCAAAQgAAEIQAACEIAABCAAIYAAhAACEAIIQAggAAEIQAACEIAABCAAAcjnsf1BQLH9gQexgY692EDHg9iCzV5swQYQAghACCAAIYAAhAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhACCEAIIAAhgACEAAIQAghAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAggACGAAIQAAhACCEAAAhCAAAQgAAEIQACiMd7Nay/ezSsfb3cPKN7uLh/7gwQU+4MAhAACEAIIQAggACGAAAQgAAEIQAACEIAABCAAAQhAAAIQgACEAAIQAghACCAAIYAAhAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhACCEAIIAAhgACEAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEAKIxtj+IKDY/sCD2EDHXmyg40FswWYvtmADCAEEIAQQgBBAAEIAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIAQQgBBCAEEAAQgABCAEEIAABCEAAAhCAAAQgAAEIQAACEIAABCAEEIAQQABCAAEIAQQgAAEIQHLFmxXtxZsV5ePdvAHFu3nl4+3uAcXb3QFCAAEIAQQgBBCAEEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAEIAAQgBBCAEEIAQQABCAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCAEEIAQQgBBAAEIAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIAURjbH8QUGx/4EFsoGMvNtDxILZgsxdbsAGEAAIQAghACCAAIYAABCAAAQhAAAIQgAAEIAABCEAAAhCAAIQAAhACCEAIIAAhgACEAAIQgAAEIAABCEAAAhCAAAQgAAEIQADieo9XVz/3ZTLfc9XVjwOEqEgBhAggRAAhAggRQIgAQgQQIoAQAYQIIEQEECKAEAGECCBEACECCBFAiABCBBAigBARQIgAQgQQIoAQAYQIIEQAIQIIEUCICCBEACECCBFAiABCBBAigBABhAggRAAhIoAQAYQIIEQAIQIIEUCIAEIEECKAEBFAiABCBBAigBABhAggRAAhAggRQIgAQkQAIQIIEUCIAEIEECKAEAGECCBEACEigBABhAggRAAhAggRQIgAQgQQIoAQAYSIAEIEECKAEAGECCBEACECCBFAiABCRAAhAggRQIgAQgQQIoAQAYQIIEQAIQIIEQGECCBEACECCBFAiABCBBAigBABhKjg/T8gQhtNiqIiFAAAAABJRU5ErkJggg==\"\n };\n\n let databinding = {};\n\n let judgements = all_mem_analyses.data.map(x => x.judgement);\n let majority = MathHelper.majority(judgements);\n this.setButtonImage(this._display_image[majority]);\n\n this.dataparams = [all_mem_analyses, target_bw];\n\n let repcount = all_mem_analyses.repcount;\n\n\n let layout = new Layout(this.button_subwindow);\n layout.setRect(\"Title\", new Pos(0, 0), new Pos(100, 10), new RU_DataViewText());\n layout.setRect(\"PercentBandwidth\", new Pos(70, 60), new Pos(30, 20), new RU_DataViewNumberBlock().setTitle(\"PercentBandwidth\").setOptions({\n display_title: false,\n text_align: \"left\",\n draw_bar: [\"left\"],\n padding: { left: 10 },\n }).setDataAnalysisFunction(d => {\n let x = d;\n \n let expected_bandwidth = x.data.map(x => x.data.expected_bandwidth);\n let target_bw = x.data[0].data.Memory_Target_Bandwidth;\n\n let ret = undefined;\n\n if(toplevel_use_mean)\n ret = Math.round(MathHelper.mean(expected_bandwidth) * 100. / target_bw);\n else if(toplevel_use_median)\n ret = Math.round(MathHelper.median(expected_bandwidth) * 100. / target_bw);\n else ObjectHelper.assert(\"Undefined mode\", false);\n\n ObjectHelper.assert(\"is number\", ret instanceof Number || typeof ret == \"number\");\n\n return ret;\n }).setColorScaling(x => 100 - x));\n let transthis = this;\n ObjectHelper.assert(\"Valid bandwidth\", this.Memory_Target_Bandwidth > 0.0);\n layout.setRect(\"Bandwidth\", new Pos(0, 60), new Pos(70, 20), new RU_DataViewFormLayout().setTitle(\"Bandwidth\").setDataAnalysisFunction(d => {\n let x = d;\n\n let expected_bandwidth = x.data.map(x => x.data.expected_bandwidth);\n let datasize = x.data.map(x => x.data.datasize);\n let input_datasize = x.data.map(x => x.data.input_datasize);\n\n let bytes_from_l3 = x.data.map(x => x.data.bytes_from_l3).map(x => MathHelper.sum(x));\n let bytes_from_mem = x.data.map(x => x.data.bytes_from_mem).map(x => MathHelper.sum(x));\n\n\n // Differentiate between global and local analysis here\n let repcount = all_mem_analyses.repcount;\n if(all_analyses_global) {\n let chunksize = datasize.length / repcount;\n datasize = ObjectHelper.createChunks(datasize, chunksize, MathHelper.sum);\n input_datasize = ObjectHelper.createChunks(input_datasize, chunksize, MathHelper.sum);\n datasize = ObjectHelper.createChunks(datasize, chunksize, MathHelper.sum);\n\n bytes_from_l3 = ObjectHelper.createChunks(bytes_from_l3, chunksize, MathHelper.sum);\n bytes_from_mem = ObjectHelper.createChunks(bytes_from_mem, chunksize, MathHelper.sum);\n }\n\n let val = {};\n\n if(toplevel_use_mean) {\n val = { title: \"Bandwidth\", value: ObjectHelper.valueToSensibleString(MathHelper.mean(expected_bandwidth), \"programmer\", \"B/c\") };\n }\n else if(toplevel_use_median) {\n val = { title: \"Bandwidth\", value: ObjectHelper.valueToSensibleString(MathHelper.median(expected_bandwidth), \"programmer\", \"B/c\") };\n }\n else ObjectHelper.assert(\"Undefined mode\", false);\n return {\n fontsize: 16,\n rows: [\n val,\n { title: \"Target Bandwidth\", value: ObjectHelper.valueToSensibleString(transthis.Memory_Target_Bandwidth, \"programmer\", \"B/c\") },\n { title: \"Bytes processed (SA)\", value: ObjectHelper.valueToSensibleString(MathHelper.median(datasize), \"programmer\", \"B\")},\n { title: \"Bytes imported into scope (SA)\", value: ObjectHelper.valueToSensibleString(MathHelper.median(input_datasize), \"programmer\", \"B\")},\n { title: \"Bytes requested from L3\", value: ObjectHelper.valueToSensibleString(MathHelper.median(bytes_from_l3), \"programmer\", \"B\")},\n { title: \"Bytes requested from memory\", value: ObjectHelper.valueToSensibleString(MathHelper.median(bytes_from_mem), \"programmer\", \"B\")},\n \n ],\n padding: {left: 10, right: 10, top: 0, bottom: 0 },\n rawdata: d\n };\n }));\n\n layout.setRect(\"Graph\", new Pos(0, 10), new Pos(70, 50), new RU_DataViewBarGraph(\n {\n type: \"horizontalBar\",\n xAxes: [{\n type: 'linear',\n display: true,\n position: 'bottom',\n id: 'data-axis',\n gridLines: {\n display: false\n },\n ticks: { \n beginAtZero: true\n },\n scaleLabel: { labelString: \"Misses\", display: true }\n }, {\n type: 'linear',\n display: false,\n ticks: {\n max: 1,\n min: -1,\n },\n id: 'corr-axis',\n position: 'top',\n gridLines: {\n display: false\n },\n scaleLabel: { labelString: \"Correlation\", display: true }\n }\n ],\n yAxes: [{\n display: false,\n position: 'left',\n id: 'thread-axis',\n gridLines: {\n display: true\n },\n scaleLabel: { labelString: \"Thread\", display: true }\n }\n ],\n }).setDataAnalysisFunction(x => {\n if (x == null) return ;\n let l2misses = x.data.map(x => x.data.L2_TCM);\n let l3misses = x.data.map(x => x.data.L3_TCM);\n let tot_cyc = x.data.map(x => x.data.TOT_CYC);\n let bw_mem = x.data.map(x => x.data.mem_bandwidth);\n let bw_l3 = x.data.map(x => x.data.l3_bandwidth);\n\n let colors = RU_DataViewBarGraph.colorList().slice(0, l2misses[0].length + 1 + 2);\n\n let datasets = [];\n\n let thread_group_func = z1 => {\n let thread_grouped_z1 = [];\n for(let x of l2misses[0]) {\n thread_grouped_z1.push([]);\n }\n for(let run_tuple of z1) {\n let l2ms_per_thread = run_tuple[0];\n let cycs_per_thread = run_tuple[1];\n\n for(let i = 0; i < l2ms_per_thread.length; ++i) {\n thread_grouped_z1[i].push([l2ms_per_thread[i], cycs_per_thread[i]]);\n }\n }\n return thread_grouped_z1;\n };\n\n let z1 = MathHelper.zip(l2misses, tot_cyc);\n let thread_grouped_z1 = thread_group_func(z1);\n\n\n let l2corr = thread_grouped_z1.map(x => MathHelper.sample_corr(x[0], x[1]));\n \n let thread_grouped_z2 = thread_group_func(MathHelper.zip(l3misses, tot_cyc));\n let l3corr = thread_grouped_z2.map(x => MathHelper.sample_corr(x[0], x[1]));\n\n // Now we average the correlations\n let avg_l2_corr = MathHelper.mean(l2corr);\n let avg_l3_corr = MathHelper.mean(l3corr);\n\n let i = 0;\n for (let tcm of [l2misses, l3misses]) {\n let labelstr = \"[Unknown]\";\n if(tcm == l2misses) labelstr = \"L2_TCM\";\n if(tcm == l3misses) labelstr = \"L3_TCM\";\n\n let tmp = 0;\n\n if(toplevel_use_mean)\n tmp = MathHelper.zip2d(tcm).map(x => MathHelper.mean(x));\n else if(toplevel_use_median)\n tmp = MathHelper.zip2d(tcm).map(x => MathHelper.median(x));\n else ObjectHelper.assert(\"Undefined mode\", false);\n\n datasets.push({ label: labelstr, xAxisID: \"data-axis\", yAxisID: \"thread-axis\", data: tmp, backgroundColor: colors[i] });\n i++;\n }\n\n let rho_col1 = colors[i];\n let rho_col2 = colors[i + 1];\n\n if(display_memory_correlation) {\n datasets.push({ label: \"L2 corr.\", xAxisID: \"corr-axis\",/* yAxisID: \"corr-y-axis\",*/ data: l2corr, backgroundColor: colors[i], hidden: true });\n datasets.push({ label: \"L3 corr.\", xAxisID: \"corr-axis\", /*yAxisID: \"corr-y-axis\",*/ data: l3corr, backgroundColor: colors[i + 1], hidden: true });\n }\n\n let chartData = {\n labels: [...(Array(l2misses[0].length).keys())].map(x => \"Thread \" + x.toString()),\n \"datasets\": datasets,\n\n };\n\n return chartData;\n }).linkMouse(this.button_subwindow).changeGraphOptions(x => {\n x.options.title.text = \"Cache misses (mean over all runs)\";\n x.options.title.display = false;\n x.options.legend = {\n position: 'top',\n display: true\n };\n }));\n\n \n databinding[\"PercentBandwidth\"] = all_mem_analyses;\n databinding[\"Title\"] = new DataBlock({ fontsize: 32, text: \"Memory performance\", color: \"black\", align: \"center\" }, \"Text\");\n databinding['Graph'] = all_mem_analyses;\n databinding['Bandwidth'] = all_mem_analyses;\n\n layout.setDataBinding(databinding);\n\n\n this.button_subwindow.setLayout(layout);\n\n this.setOnEnterHover(p => { this.color = \"#FF0000\"; this.button_subwindow_state = 'open'; })\n this.setOnLeaveHover(p => { this.color = \"orange\"; if (!this.is_locked_open) this.button_subwindow_state = 'collapsed'; })\n this.setOnClick((p, mb) => { this.is_locked_open = !this.is_locked_open; });\n\n this.setDefaultDblClick();\n }\n\n\n\n}\n\nexport { MemoryButton };"],"sourceRoot":""} \ No newline at end of file diff --git a/dist/641.js b/dist/641.js deleted file mode 100755 index fdba63cd..00000000 --- a/dist/641.js +++ /dev/null @@ -1,2 +0,0 @@ -(self.webpackChunk_spcl_sdfv=self.webpackChunk_spcl_sdfv||[]).push([[641],{1641:(A,t,a)=>{"use strict";a.r(t),a.d(t,{VectorizationButton:()=>U,AutoSuperSectionVectorizationAnalysis:()=>T,SuperSectionVectorizationAnalysis:()=>M});var e=a(2137),n=a(5991),r=a(7329),o=a(6610),p=a(379),s=a(6070),u=a(7608),i=a(7757),l=a.n(i),d=a(4286),m=a(1318);function c(A){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(A){return!1}}();return function(){var a,e=(0,u.Z)(A);if(t){var n=(0,u.Z)(this).constructor;a=Reflect.construct(e,arguments,n)}else a=e.apply(this,arguments);return(0,s.Z)(this,a)}}var U=function(A){(0,p.Z)(a,A);var t=c(a);function a(A,e,n){var p;(0,o.Z)(this,a),(p=t.call(this,A)).supersection_all_vec_analyses=e,p._display_image={1:"null","-1":"null"},p._display_image={1:"data:image/png;base64,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","-1":"data:image/jpeg;base64,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"};var s={},u=e.data.map((function(A){return A.judgement})),i=m.Vw.majority(u);p.setButtonImage(p._display_image[i]),p.dataparams=[e,n];var l=new d.Layout(p.button_subwindow);l.setRect("Title",new d.Pos(0,0),new d.Pos(100,10),new d.RU_DataViewText);var c=(new d.RU_DataViewSuggestedActionBlock).setDataAnalysisFunction((function(A){var t=[];return A.data,-1==i&&t.push("JudgementNegative"),t})).linkMouse(l._layout_clickable);c.setHint("JudgementNegative","Vectorization"),l.setRect("SuggestedAction",new d.Pos(70,70),new d.Pos(30,20),c);var U=new d.RU_DataViewBarGraph({type:"bar",yAxes:[{type:"linear",display:!0,position:"left",id:"axis-1"}]}).setDataAnalysisFunction((function(A){var t=[],a=[],n=[],o=[],p=[],s=[],u=[],i=[];null!=A&&(t=A.data.map((function(A){return A.data.sp_ops_scalar})),a=A.data.map((function(A){return A.data.sp_ops_128b})),n=A.data.map((function(A){return A.data.sp_ops_256b})),o=A.data.map((function(A){return A.data.sp_ops_512b})),p=A.data.map((function(A){return A.data.dp_ops_scalar})),s=A.data.map((function(A){return A.data.dp_ops_128b})),u=A.data.map((function(A){return A.data.dp_ops_256b})),i=A.data.map((function(A){return A.data.dp_ops_512b})));var l=d.RU_DataViewBarGraph.colorList(),c=[],U=e.repcount;if(all_analyses_global){var M=t.length/U;t=ObjectHelper.createChunks(t,M,m.Vw.sumArray),a=ObjectHelper.createChunks(a,M,m.Vw.sumArray),n=ObjectHelper.createChunks(n,M,m.Vw.sumArray),o=ObjectHelper.createChunks(o,M,m.Vw.sumArray),p=ObjectHelper.createChunks(p,M,m.Vw.sumArray),s=ObjectHelper.createChunks(s,M,m.Vw.sumArray),u=ObjectHelper.createChunks(u,M,m.Vw.sumArray),i=ObjectHelper.createChunks(i,M,m.Vw.sumArray)}return c.push({label:"SP_1",yAxisID:"axis-1",data:t[0],backgroundColor:l[0]}),c.push({label:"SP_4",yAxisID:"axis-1",data:a[0],backgroundColor:l[1]}),c.push({label:"SP_8",yAxisID:"axis-1",data:n[0],backgroundColor:l[2]}),c.push({label:"SP_16",yAxisID:"axis-1",data:o[0],backgroundColor:l[4]}),c.push({label:"DP_1",yAxisID:"axis-1",data:p[0],backgroundColor:l[5]}),c.push({label:"DP_2",yAxisID:"axis-1",data:s[0],backgroundColor:l[6]}),c.push({label:"DP_4",yAxisID:"axis-1",data:u[0],backgroundColor:l[7]}),c.push({label:"DP_8",yAxisID:"axis-1",data:i[0],backgroundColor:l[8]}),{labels:(0,r.Z)(Array(t[0].length).keys()),datasets:c}})).linkMouse(l._layout_clickable).changeGraphOptions((function(A){A.options.title.text="FLINS per thread",A.options.scales.yAxes.find((function(A){return"axis-1"==A.id})).scaleLabel={labelString:"Instructions",display:!0},A.options.scales.yAxes.find((function(A){return"axis-1"==A.id})).ticks.beginAtZero=!0,A.options.scales.xAxes=[{scaleLabel:{labelString:"Thread",display:!0}}]}));return l.setRect("Graph",new d.Pos(0,10),new d.Pos(70,50),U),l.setRect("FLOP/C",new d.Pos(70,20),new d.Pos(30,20),(new d.RU_DataViewNumberBlock).setTitle("FLOP/C").setOptions({draw_bar:["left"],padding:{left:10},display_title:!0,text_align:"center"}).setDataAnalysisFunction((function(A){A.data[0].data.sp_flops_per_cycle_parallel;var t=A.data[0].data.dp_flops_per_cycle_parallel;return Math.round(100*t/(target_dp_flops_per_cycle_per_thread*A.data[0].data.sp_flops_per_cycle.length))})).setColorScaling((function(A){return 100-A}))),s.Title=new d.DataBlock({fontsize:32,text:"Vectorization",color:"black",align:"center"},"Text"),s.Graph=e,s.SuggestedAction=e,s["FLOP/C"]=e,l.setDataBinding(s),p.button_subwindow.setLayout(l),p.setOnEnterHover((function(A){p.color="#FF0000",p.button_subwindow_state="open"})),p.setOnLeaveHover((function(A){p.color="orange",p.is_locked_open||(p.button_subwindow_state="collapsed")})),p.setOnClick((function(A,t){p.is_locked_open=!p.is_locked_open})),p.setDefaultDblClick(),p}return a}(d.Button),M=function(){function A(t,a,e,n){(0,o.Z)(this,A),this.section=t,this.critical_path_analysis=n,this.for_node=a,this.for_state=e,this.analysis_result=null,65535!=e&&65535!=e&&ObjectHelper.assert("for_node defined",null!=this.for_node&&NaN!=new Number(this.for_node))}return(0,n.Z)(A,[{key:"judgement",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;return null==t&&(t=this.analysis_result.data),A.sjudgement(t)}},{key:"analyze",value:function(){var A=this.section;if(ObjectHelper.assert("section is SuperSection",A instanceof SuperSection),null==(A=A.toSection(this.for_node,this.for_state)))return null;if(null==A._entries)return null;var t={},a=Number(A.get_max_thread_num()),e=Number(A.get_min_thread_num());if(null!=a&&null!=e){for(var n,r,o=[],p=[],s=[],u=[],i=[],l=[],c=[],U=[],M=[],V=[],T=[],O=e;O x.judgement);\n let majority = MathHelper.majority(judgements);\n this.setButtonImage(this._display_image[majority]);\n\n this.dataparams = [supersection_all_vec_analyses, path_analysis]; // Fill in parameters\n\n let layout = new Layout(this.button_subwindow);\n layout.setRect(\"Title\", new Pos(0, 0), new Pos(100, 10), new RU_DataViewText());\n\n let suggested_action = new RU_DataViewSuggestedActionBlock().setDataAnalysisFunction(x => {\n \n let returnarr = [];\n let data = x.data;\n\n // We reuse the judgement here.\n if(majority == -1) {\n\n returnarr.push(\"JudgementNegative\");\n }\n\n \n return returnarr;\n }).linkMouse(layout._layout_clickable);\n suggested_action.setHint(\"JudgementNegative\", \"Vectorization\");\n\n layout.setRect(\"SuggestedAction\", new Pos(70, 70), new Pos(30, 20), suggested_action);\n \n let thread_graph = new RU_DataViewBarGraph({\n type: 'bar',\n yAxes: [{\n type: \"linear\",\n display: true,\n position: 'left',\n id: 'axis-1'\n }\n ]\n }).setDataAnalysisFunction(x => {\n \n let sp_s1 = [];\n let sp_p4 = [];\n let sp_p8 = [];\n let sp_p16 = [];\n\n let dp_s1 = [];\n let dp_p2 = [];\n let dp_p4 = [];\n let dp_p8 = [];\n if (x != null) {\n sp_s1 = x.data.map(x => x.data.sp_ops_scalar);\n sp_p4 = x.data.map(x => x.data.sp_ops_128b);\n sp_p8 = x.data.map(x => x.data.sp_ops_256b);\n sp_p16 = x.data.map(x => x.data.sp_ops_512b);\n\n dp_s1 = x.data.map(x => x.data.dp_ops_scalar);\n dp_p2 = x.data.map(x => x.data.dp_ops_128b);\n dp_p4 = x.data.map(x => x.data.dp_ops_256b);\n dp_p8 = x.data.map(x => x.data.dp_ops_512b);\n }\n\n let colors = RU_DataViewBarGraph.colorList();\n\n let datasets = [];\n // So now we have a mapping of thread -> cycles.\n\n let repcount = supersection_all_vec_analyses.repcount;\n if(all_analyses_global) {\n // We need to group and add\n let chunksize = sp_s1.length / repcount;\n sp_s1 = ObjectHelper.createChunks(sp_s1, chunksize, MathHelper.sumArray);\n sp_p4 = ObjectHelper.createChunks(sp_p4, chunksize, MathHelper.sumArray);\n sp_p8 = ObjectHelper.createChunks(sp_p8, chunksize, MathHelper.sumArray);\n sp_p16 = ObjectHelper.createChunks(sp_p16, chunksize, MathHelper.sumArray);\n\n\n dp_s1 = ObjectHelper.createChunks(dp_s1, chunksize, MathHelper.sumArray);\n dp_p2 = ObjectHelper.createChunks(dp_p2, chunksize, MathHelper.sumArray);\n dp_p4 = ObjectHelper.createChunks(dp_p4, chunksize, MathHelper.sumArray);\n dp_p8 = ObjectHelper.createChunks(dp_p8, chunksize, MathHelper.sumArray);\n\n }\n\n\n // We don't really care about runs (since they should all be identical, or we'll have a problem anyways)\n // Therefore, we only take the first element from each set\n datasets.push({ label: \"SP_1\", yAxisID: \"axis-1\", data: sp_s1[0], backgroundColor: colors[0] });\n datasets.push({ label: \"SP_4\", yAxisID: \"axis-1\", data: sp_p4[0], backgroundColor: colors[1] });\n datasets.push({ label: \"SP_8\", yAxisID: \"axis-1\", data: sp_p8[0], backgroundColor: colors[2] });\n datasets.push({ label: \"SP_16\", yAxisID: \"axis-1\", data: sp_p16[0], backgroundColor: colors[4] });\n\n datasets.push({ label: \"DP_1\", yAxisID: \"axis-1\", data: dp_s1[0], backgroundColor: colors[5] });\n datasets.push({ label: \"DP_2\", yAxisID: \"axis-1\", data: dp_p2[0], backgroundColor: colors[6] });\n datasets.push({ label: \"DP_4\", yAxisID: \"axis-1\", data: dp_p4[0], backgroundColor: colors[7] });\n datasets.push({ label: \"DP_8\", yAxisID: \"axis-1\", data: dp_p8[0], backgroundColor: colors[8] });\n\n let chartData = {\n labels: [...Array(sp_s1[0].length).keys()],\n \"datasets\": datasets,\n\n };\n\n return chartData;\n }).linkMouse(layout._layout_clickable).changeGraphOptions(x => {\n x.options.title.text = \"FLINS per thread\";\n x.options.scales.yAxes.find(x => x.id == 'axis-1').scaleLabel = { labelString: \"Instructions\", display: true };\n x.options.scales.yAxes.find(x => x.id == 'axis-1').ticks.beginAtZero = true;\n x.options.scales.xAxes = [{ scaleLabel: { labelString: \"Thread\", display: true } }];\n });\n\n layout.setRect(\"Graph\", new Pos(0, 10), new Pos(70, 50), thread_graph);\n\n layout.setRect(\"FLOP/C\", new Pos(70, 20), new Pos(30, 20), new RU_DataViewNumberBlock().setTitle(\"FLOP/C\").setOptions({\n draw_bar: [\"left\"],\n padding: { left: 10 },\n display_title: true,\n text_align: \"center\",\n }).setDataAnalysisFunction(x => {\n // Select an arbitrary run, i.e. 0 (all should be identical)\n let sp_flop_per_c = x.data[0].data.sp_flops_per_cycle_parallel;\n let dp_flop_per_c = x.data[0].data.dp_flops_per_cycle_parallel;\n \n return Math.round(dp_flop_per_c * 100.0 / (target_dp_flops_per_cycle_per_thread * x.data[0].data.sp_flops_per_cycle.length));\n }).setColorScaling(x => 100 - x));\n \n\n databinding[\"Title\"] = new DataBlock({ fontsize: 32, text: \"Vectorization\", color: \"black\", align: \"center\" }, \"Text\");\n databinding['Graph'] = supersection_all_vec_analyses;\n databinding['SuggestedAction'] = supersection_all_vec_analyses;\n databinding['FLOP/C'] = supersection_all_vec_analyses;\n\n layout.setDataBinding(databinding);\n this.button_subwindow.setLayout(layout);\n\n this.setOnEnterHover(p => { this.color = \"#FF0000\"; this.button_subwindow_state = 'open'; })\n this.setOnLeaveHover(p => { this.color = \"orange\"; if (!this.is_locked_open) this.button_subwindow_state = 'collapsed'; })\n this.setOnClick((p, mb) => { this.is_locked_open = !this.is_locked_open; });\n\n this.setDefaultDblClick();\n }\n\n\n\n}\n\n// Old counters: ['PAPI_VEC_SP', 'PAPI_VEC_DP', 'PAPI_SP_OPS', 'PAPI_DP_OPS']\n// New counters (Split out): VEC_SP: ['0x40000025' (SCALAR_SINGLE), '0x40000026' (128B_PACKED_SINGLE), '0x40000027' (256B_PACKED_SINGLE), '0x40000028' (512B_PACKED_SINGLE)], ['0x40000025', '0x40000026', '0x40000027', '0x40000028']\n// New counters (Split out): VEC_DP: ['0x40000021' (SCALAR_DOUBLE), '0x40000022' (128B_PACKED_DOUBLE), '0x40000023' (256B_PACKED_DOUBLE), '0x40000024' (512B_PACKED_DOUBLE)], ['0x40000021', '0x40000022', '0x40000023', '0x40000024']\n// Merged: ['0x40000025', '0x40000026', '0x40000027', '0x40000028', '0x40000021', '0x40000022', '0x40000023', '0x40000024']\n\nclass SuperSectionVectorizationAnalysis {\n constructor(section, nodeid, stateid, critical_path_analysis) {\n this.section = section;\n this.critical_path_analysis = critical_path_analysis;\n this.for_node = nodeid;\n this.for_state = stateid;\n this.analysis_result = null;\n\n if(!(stateid == 0xFFFF || stateid == 65535))\n ObjectHelper.assert(\"for_node defined\", this.for_node != undefined && new Number(this.for_node) != NaN);\n }\n\n judgement(analysis = null) {\n if (analysis == null) analysis = this.analysis_result.data;\n\n return SuperSectionVectorizationAnalysis.sjudgement(analysis);\n }\n\n static sjudgement(analysis) {\n\n // What's a good definition for vectorized operation?\n // Let's just take that the amount of vector instructions must exceed the amount of scalar operations.\n // Rationale: Even vectorized segments might have some scalar elements, and one vector instruction does not imply complete and good vectorization.\n // With # vec ops > # scalar ops, we get an approximation that works everywhere except in very large and diverse sections and very small sections.\n\n let sp_vec_op_count = MathHelper.sum(analysis.sp_ops_128b) + MathHelper.sum(analysis.sp_ops_256b) + MathHelper.sum(analysis.sp_ops_512b);\n let dp_vec_op_count = MathHelper.sum(analysis.dp_ops_128b) + MathHelper.sum(analysis.dp_ops_256b) + MathHelper.sum(analysis.dp_ops_512b);\n\n let sp_scalar_op_count = MathHelper.sum(analysis.sp_ops_scalar);\n let dp_scalar_op_count = MathHelper.sum(analysis.dp_ops_scalar);\n\n if(sp_scalar_op_count + dp_scalar_op_count < sp_vec_op_count + dp_vec_op_count)\n return 1;\n else\n return -1;\n }\n\n analyze() {\n let section = this.section;\n\n ObjectHelper.assert(\"section is SuperSection\", section instanceof SuperSection);\n\n section = section.toSection(this.for_node, this.for_state);\n if(section == undefined) {\n return null;\n }\n if(section['_entries'] == undefined) {\n return null;\n }\n\n let b_print_analysis = false; // Set to true to debug.\n\n let data = {};\n\n let max_thread_num = Number(section.get_max_thread_num());\n let min_thread_num = Number(section.get_min_thread_num());\n\n if(max_thread_num == undefined || min_thread_num == undefined) {\n // We got one of those cases where we have an empty section - usually due to empty tasklets or empty states\n return undefined;\n }\n if (b_print_analysis)\n console.log(\"max_thread_num: \" + max_thread_num);\n \n let sp_ops = [];\n let dp_ops = [];\n\n\n let sp_flops = [];\n let dp_flops = [];\n let sp_ops_scalar_single = [];\n let sp_ops_128b_single = [];\n let sp_ops_256b_single = [];\n let sp_ops_512b_single = [];\n\n let sp_ops_scalar_double = [];\n let sp_ops_128b_double = [];\n let sp_ops_256b_double = [];\n let sp_ops_512b_double = [];\n\n let tot_cycles = [];\n\n for (let t = min_thread_num; t < max_thread_num + 1; t++) {\n let ts = section.select_thread(t);\n let tc = ts.select_event('-2147483589'); // PAPI_TOT_CYC\n tot_cycles.push(MathHelper.sum(tc));\n let t_sp = ts.select_event('-2147483545', true); // PAPI_SP_OPS\n let tmp_single = ts.select_event('1073741861'); sp_ops_scalar_single.push(MathHelper.sum(tmp_single));\n tmp_single = ts.select_event('1073741862'); sp_ops_128b_single.push(MathHelper.sum(tmp_single));\n tmp_single = ts.select_event('1073741863'); sp_ops_256b_single.push(MathHelper.sum(tmp_single));\n tmp_single = ts.select_event('1073741864'); sp_ops_512b_single.push(MathHelper.sum(tmp_single));\n\n let t_sp_sum = MathHelper.sum(t_sp);\n sp_ops.push(t_sp_sum);\n\n // =====================================\n\n let t_dp = ts.select_event('-2147483544', true); // PAPI_DP_OPS\n let tmp_double = ts.select_event('1073741857'); sp_ops_scalar_double.push(MathHelper.sum(tmp_double));\n tmp_double = ts.select_event('1073741858'); sp_ops_128b_double.push(MathHelper.sum(tmp_double));\n tmp_double = ts.select_event('1073741859'); sp_ops_256b_double.push(MathHelper.sum(tmp_double));\n tmp_double = ts.select_event('1073741860'); sp_ops_512b_double.push(MathHelper.sum(tmp_double));\n let t_dp_sum = MathHelper.sum(t_dp);\n dp_ops.push(t_dp_sum);\n }\n\n if(sp_ops.length == 0)\n sp_ops = MathHelper.sum(sp_ops_scalar_single) + MathHelper.sum(sp_ops_128b_single) + MathHelper.sum(sp_ops_256b_single) + MathHelper.sum(sp_ops_512b_single);\n if(dp_ops.length == 0) \n dp_ops = MathHelper.sum(sp_ops_scalar_double) + MathHelper.sum(sp_ops_128b_double) + MathHelper.sum(sp_ops_256b_double) + MathHelper.sum(sp_ops_512b_double);\n\n ObjectHelper.logObject(\"sp_ops\", sp_ops);\n ObjectHelper.logObject(\"dp_ops\", dp_ops);\n\n // This is in _FL_oating point _OP_eration_S_. Nothing with time.\n //sp_flops = MathHelper.sum(sp_ops_scalar_single) * 1 + MathHelper.sum(sp_ops_128b_single) * 4 + MathHelper.sum(sp_ops_256b_single) * 8 + MathHelper.sum(sp_ops_512b_single) * 16;\n //dp_flops = MathHelper.sum(sp_ops_scalar_double) * 1 + MathHelper.sum(sp_ops_128b_double) * 2 + MathHelper.sum(sp_ops_256b_double) * 4 + MathHelper.sum(sp_ops_512b_double) * 8;\n\n let flop_each_thread = x => {\n // We have in x: [[scalar_t1, scalar_t2, ...], [packed1_t1, packed1_t2, ...], ...]\n // We want to add these inner arrays together.\n let zipped = MathHelper.zip2d(x);\n // Now we can map each element of zipped to its sum to get flop per thread\n let summed = zipped.map(x => MathHelper.sum(x));\n return summed;\n };\n sp_flops = flop_each_thread([sp_ops_scalar_single.map(x => x * 1), sp_ops_128b_single.map(x => x * 4), sp_ops_256b_single.map(x => x * 8), sp_ops_512b_single.map(x => x * 16)]);\n dp_flops = flop_each_thread([sp_ops_scalar_double.map(x => x * 1), sp_ops_128b_double.map(x => x * 2), sp_ops_256b_double.map(x => x * 4), sp_ops_512b_double.map(x => x * 8)]);\n\n ObjectHelper.logObject(\"sp_flops\", sp_flops);\n ObjectHelper.logObject(\"dp_flops\", dp_flops);\n\n data.sp_flops = sp_flops; // Number of floating point operations\n data.dp_flops = dp_flops;\n\n ObjectHelper.logObject(\"tot_cycles\", tot_cycles);\n\n data.sp_flops_per_cycle = MathHelper.zip(data.sp_flops, tot_cycles).map(x => x[0] / x[1]); // FLOPC (Flops per Cycle)\n data.dp_flops_per_cycle = MathHelper.zip(data.dp_flops, tot_cycles).map(x => x[0] / x[1]);\n\n // Get the median of all critical paths for the maximum amount of threads\n let crit_path = MathHelper.median(max_func_obj(this.critical_path_analysis.data.critical_paths, x => x.thread_num, x => x.value));\n data.sp_flops_per_cycle_parallel = MathHelper.sum(data.sp_flops) / crit_path; // FLOPC (Flops per Cycle) added over all threads\n data.dp_flops_per_cycle_parallel = MathHelper.sum(data.dp_flops) / crit_path;\n\n data.sp_ops = sp_ops; // Number of instructions\n data.dp_ops = dp_ops;\n\n data.sp_ops_scalar = sp_ops_scalar_single;\n data.sp_ops_128b = sp_ops_128b_single;\n data.sp_ops_256b = sp_ops_256b_single;\n data.sp_ops_512b = sp_ops_512b_single;\n\n data.dp_ops_scalar = sp_ops_scalar_double;\n data.dp_ops_128b = sp_ops_128b_double;\n data.dp_ops_256b = sp_ops_256b_double;\n data.dp_ops_512b = sp_ops_512b_double;\n\n ObjectHelper.logObject(\"data\", data);\n\n if(sp_ops.length == 0) {\n return undefined;\n }\n \n let ret = new DataBlock(data, \"vectorized\");\n this.analysis_result = ret;\n ret.judgement = this.judgement();\n return ret;\n }\n}\n\nclass LazySuperSectionVectorizationAnalysis extends SuperSectionVectorizationAnalysis {\n\n constructor(communicator, section, nodeid, stateid, critical_path_analysis) {\n super(section, nodeid, stateid, critical_path_analysis, null);\n this.communicator = communicator;\n }\n\n async analyze() {\n // We differ from the eager analysis here: We let the python/sql-side do the hard work\n\n let section = this.section.toSection(this.for_node, this.for_state);\n section = await section;\n if(section === undefined) {\n return undefined;\n }\n let tmp = await this.communicator.runAnalysis(\"VectorizationAnalysis\", [new Number(section.unified_id), new Number(section.supersection_id)]).get();\n\n let data = tmp;\n\n let ret = new DataBlock(data, \"vectorization\");\n this.analysis_result = ret;\n ret.judgement = this.judgement();\n return ret;\n }\n}\n\nfunction AutoSuperSectionVectorizationAnalysis(communicator, section, nodeid, stateid, critical_path_analysis) {\n if(section instanceof LazySuperSection) {\n return new LazySuperSectionVectorizationAnalysis(communicator, section, nodeid, stateid);\n }\n else {\n return new SuperSectionVectorizationAnalysis(section, nodeid, stateid, critical_path_analysis);\n }\n}\n\n\nexport { VectorizationButton, AutoSuperSectionVectorizationAnalysis, SuperSectionVectorizationAnalysis};"],"sourceRoot":""} \ No newline at end of file diff --git a/dist/689.js b/dist/689.js deleted file mode 100755 index 243b065a..00000000 --- a/dist/689.js +++ /dev/null @@ -1,2 +0,0 @@ -(self.webpackChunk_spcl_sdfv=self.webpackChunk_spcl_sdfv||[]).push([[689],{689:(A,o,t)=>{"use strict";t.r(o),t.d(o,{CacheOpButton:()=>c,AutoSuperSectionCacheOpAnalysis:()=>M});var a=t(2137),e=t(5991),i=t(7329),g=t(6610),s=t(379),B=t(6070),n=t(7608),r=t(7757),Q=t.n(r),C=t(4286),Y=t(1318);function h(A){var o=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(A){return!1}}();return function(){var t,a=(0,n.Z)(A);if(o){var e=(0,n.Z)(this).constructor;t=Reflect.construct(a,arguments,e)}else t=a.apply(this,arguments);return(0,B.Z)(this,t)}}var c=function(A){(0,s.Z)(t,A);var o=h(t);function t(A,a,e){var s;(0,g.Z)(this,t),(s=o.call(this,A)).supersection_all_vec_analyses=a;var B="data:image/png;base64,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";s._display_image={1:B,"-1":B};var n={},r=Y.Vw.majority([1]);s.setButtonImage(s._display_image[r]),s.dataparams=[a,e];var Q=new C.Layout(s.button_subwindow);Q.setRect("Title",new C.Pos(0,0),new C.Pos(100,10),new C.RU_DataViewText);var h=new C.RU_DataViewBarGraph({type:"bar",yAxes:[{type:"linear",display:!0,position:"left",id:"axis-1"}]}).setDataAnalysisFunction((function(A){var o=[],t=[],e=[],g=[];null!=A&&(o=A.data.map((function(A){return A.data.cache_snoop})),t=A.data.map((function(A){return A.data.cache_shr2ex})),e=A.data.map((function(A){return A.data.cache_cln2ex})),g=A.data.map((function(A){return A.data.cache_intervention})));var s=C.RU_DataViewBarGraph.colorList().slice(0,o.length+1),B=[],n=a.repcount;if(all_analyses_global){var r=o.length/n;o=Y.tV.createChunks(o,r,Y.Vw.sumArray),t=Y.tV.createChunks(t,r,Y.Vw.sumArray),e=Y.tV.createChunks(e,r,Y.Vw.sumArray),g=Y.tV.createChunks(g,r,Y.Vw.sumArray)}return B.push({label:"Snoop",yAxisID:"axis-1",data:o[0],backgroundColor:s[0]}),B.push({label:"Shared to Exclusive",yAxisID:"axis-1",data:t[0],backgroundColor:s[1]}),B.push({label:"Clean to Exclusive",yAxisID:"axis-1",data:e[0],backgroundColor:s[2]}),B.push({label:"Intervention",yAxisID:"axis-1",data:g[0],backgroundColor:s[4]}),{labels:(0,i.Z)(Array(o[0].length).keys()),datasets:B}})).linkMouse(Q._layout_clickable).changeGraphOptions((function(A){A.options.title.text="Cache operations per thread",A.options.scales.yAxes.find((function(A){return"axis-1"==A.id})).scaleLabel={labelString:"Operations",display:!0},A.options.scales.yAxes.find((function(A){return"axis-1"==A.id})).ticks.beginAtZero=!0,A.options.scales.xAxes=[{scaleLabel:{labelString:"Thread",display:!0}}]}));return Q.setRect("Graph",new C.Pos(0,10),new C.Pos(70,50),h),n.Title=new C.DataBlock({fontsize:32,text:"Cache operations",color:"black",align:"center"},"Text"),n.Graph=a,Q.setDataBinding(n),s.button_subwindow.setLayout(Q),s.setOnEnterHover((function(A){s.color="#FF0000",s.button_subwindow_state="open"})),s.setOnLeaveHover((function(A){s.color="orange",s.is_locked_open||(s.button_subwindow_state="collapsed")})),s.setOnClick((function(A,o){s.is_locked_open=!s.is_locked_open})),s.setDefaultDblClick(),s}return t}(C.Button),m=function(){function A(o,t,a,e){(0,g.Z)(this,A),this.section=o,this.critical_path_analysis=e,this.for_node=t,this.for_state=a,this.analysis_result=null,65535!=a&&65535!=a&&Y.tV.assert("for_node defined",null!=this.for_node&&NaN!=new Number(this.for_node))}return(0,e.Z)(A,[{key:"judgement",value:function(){var A=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;return null==A&&(A=this.analysis_result),-1}},{key:"analyze",value:function(){Y.tV.assert("Not available over old interface",!1)}}]),A}(),D=function(A){(0,s.Z)(i,A);var o,t=h(i);function i(A,o,a,e,s){var B;return(0,g.Z)(this,i),(B=t.call(this,o,a,e,s,null)).communicator=A,B}return(0,e.Z)(i,[{key:"analyze",value:(o=(0,a.Z)(Q().mark((function A(){var o,t,a,e;return Q().wrap((function(A){for(;;)switch(A.prev=A.next){case 0:return o=this.section.toSection(this.for_node,this.for_state),A.next=3,o;case 3:if(void 0!==(o=A.sent)){A.next=6;break}return A.abrupt("return",void 0);case 6:return A.next=8,this.communicator.runAnalysis("CacheOpAnalysis",[new Number(o.unified_id),new Number(o.supersection_id)]).get();case 8:return t=A.sent,a=t,e=new C.DataBlock(a,"CacheOp"),this.analysis_result=e,e.judgement=this.judgement(),A.abrupt("return",e);case 14:case"end":return A.stop()}}),A,this)}))),function(){return o.apply(this,arguments)})}]),i}(m);function M(A,o,t,a,e){return o instanceof LazySuperSection?new D(A,o,t,a):new m(o,t,a,e)}}}]); -//# sourceMappingURL=689.js.map \ No newline at end of file diff --git a/dist/689.js.map b/dist/689.js.map deleted file mode 100755 index c284035c..00000000 --- a/dist/689.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["webpack://@spcl/sdfv/./renderer_dir/cache_button.js"],"names":["CacheOpButton","ctx","supersection_all_vec_analyses","path_analysis","baseimgstr","_display_image","databinding","majority","MathHelper","setButtonImage","dataparams","layout","Layout","button_subwindow","setRect","Pos","RU_DataViewText","thread_graph","RU_DataViewBarGraph","type","yAxes","display","position","id","setDataAnalysisFunction","x","cache_snoop","cache_shr2ex","cache_cln2ex","cache_intervention","data","map","colors","slice","length","datasets","repcount","all_analyses_global","chunksize","ObjectHelper","push","label","yAxisID","backgroundColor","labels","Array","keys","linkMouse","_layout_clickable","changeGraphOptions","options","title","text","scales","find","scaleLabel","labelString","ticks","beginAtZero","xAxes","DataBlock","fontsize","color","align","setDataBinding","setLayout","setOnEnterHover","p","button_subwindow_state","setOnLeaveHover","is_locked_open","setOnClick","mb","setDefaultDblClick","Button","SuperSectionCacheOpAnalysis","section","nodeid","stateid","critical_path_analysis","this","for_node","for_state","analysis_result","undefined","NaN","Number","analysis","LazySuperSectionCacheOpAnalysis","communicator","toSection","runAnalysis","unified_id","supersection_id","get","tmp","ret","judgement","AutoSuperSectionCacheOpAnalysis","LazySuperSection"],"mappings":"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","file":"689.js","sourcesContent":["// Copyright 2019-2021 ETH Zurich and the DaCe authors. All rights reserved.\nimport { Button, Layout, Pos, RU_DataViewText, RU_DataViewFormLayout, RU_DataViewNumberBlock, RU_DataViewBarGraph, DataBlock } from \"./renderer_util.js\";\nimport { MathHelper, ObjectHelper } from \"./datahelper.js\";\n\n\nclass CacheOpButton extends Button {\n constructor(ctx, supersection_all_vec_analyses, path_analysis) {\n super(ctx);\n\n this.supersection_all_vec_analyses = supersection_all_vec_analyses;\n\n const baseimgstr = \"data:image/png;base64,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\";\n this._display_image = {\n \"1\": baseimgstr,\n \"-1\": baseimgstr\n };\n\n let databinding = {};\n\n // TODO: Since the results are hard to analyze, try to find a better way to visualze\n let judgements = [1];\n let majority = MathHelper.majority(judgements);\n this.setButtonImage(this._display_image[majority]);\n\n this.dataparams = [supersection_all_vec_analyses, path_analysis]; // Fill in parameters\n\n let layout = new Layout(this.button_subwindow);\n layout.setRect(\"Title\", new Pos(0, 0), new Pos(100, 10), new RU_DataViewText());\n\n \n let thread_graph = new RU_DataViewBarGraph({\n type: 'bar',\n yAxes: [{\n type: \"linear\",\n display: true,\n position: 'left',\n id: 'axis-1'\n }\n ]\n }).setDataAnalysisFunction(x => {\n \n let cache_snoop = [];\n let cache_shr2ex = [];\n let cache_cln2ex = [];\n let cache_intervention = [];\n if (x != null) {\n cache_snoop = x.data.map(x => x.data.cache_snoop);\n cache_shr2ex = x.data.map(x => x.data.cache_shr2ex);\n cache_cln2ex = x.data.map(x => x.data.cache_cln2ex);\n cache_intervention = x.data.map(x => x.data.cache_intervention);\n }\n\n\n let colors = RU_DataViewBarGraph.colorList().slice(0, cache_snoop.length + 1);\n\n let datasets = [];\n // mapping of thread -> cycles.\n\n let repcount = supersection_all_vec_analyses.repcount;\n if(all_analyses_global) {\n // We need to group and add\n let chunksize = cache_snoop.length / repcount;\n\n cache_snoop = ObjectHelper.createChunks(cache_snoop, chunksize, MathHelper.sumArray);\n cache_shr2ex = ObjectHelper.createChunks(cache_shr2ex, chunksize, MathHelper.sumArray);\n cache_cln2ex = ObjectHelper.createChunks(cache_cln2ex, chunksize, MathHelper.sumArray);\n cache_intervention = ObjectHelper.createChunks(cache_intervention, chunksize, MathHelper.sumArray);\n }\n\n // We only take the first element from each set since they should all be equivalent\n datasets.push({ label: \"Snoop\", yAxisID: \"axis-1\", data: cache_snoop[0], backgroundColor: colors[0] });\n datasets.push({ label: \"Shared to Exclusive\", yAxisID: \"axis-1\", data: cache_shr2ex[0], backgroundColor: colors[1] });\n datasets.push({ label: \"Clean to Exclusive\", yAxisID: \"axis-1\", data: cache_cln2ex[0], backgroundColor: colors[2] });\n datasets.push({ label: \"Intervention\", yAxisID: \"axis-1\", data: cache_intervention[0], backgroundColor: colors[4] });\n\n let chartData = {\n labels: [...Array(cache_snoop[0].length).keys()],\n \"datasets\": datasets,\n\n };\n\n return chartData;\n }).linkMouse(layout._layout_clickable).changeGraphOptions(x => {\n x.options.title.text = \"Cache operations per thread\";\n x.options.scales.yAxes.find(x => x.id == 'axis-1').scaleLabel = { labelString: \"Operations\", display: true };\n x.options.scales.yAxes.find(x => x.id == 'axis-1').ticks.beginAtZero = true;\n x.options.scales.xAxes = [{ scaleLabel: { labelString: \"Thread\", display: true } }];\n });\n\n layout.setRect(\"Graph\", new Pos(0, 10), new Pos(70, 50), thread_graph);\n\n \n\n databinding[\"Title\"] = new DataBlock({ fontsize: 32, text: \"Cache operations\", color: \"black\", align: \"center\" }, \"Text\");\n databinding['Graph'] = supersection_all_vec_analyses;\n\n layout.setDataBinding(databinding);\n this.button_subwindow.setLayout(layout);\n\n this.setOnEnterHover(p => { this.color = \"#FF0000\"; this.button_subwindow_state = 'open'; })\n this.setOnLeaveHover(p => { this.color = \"orange\"; if (!this.is_locked_open) this.button_subwindow_state = 'collapsed'; })\n this.setOnClick((p, mb) => { this.is_locked_open = !this.is_locked_open; });\n\n this.setDefaultDblClick();\n }\n\n\n\n}\n// Specialized version of class in datahelper.\nclass SuperSectionCacheOpAnalysis {\n constructor(section, nodeid, stateid, critical_path_analysis) {\n this.section = section;\n this.critical_path_analysis = critical_path_analysis;\n this.for_node = nodeid;\n this.for_state = stateid;\n this.analysis_result = null;\n\n if(!(stateid == 0xFFFF || stateid == 65535))\n ObjectHelper.assert(\"for_node defined\", this.for_node != undefined && new Number(this.for_node) != NaN);\n }\n\n judgement(analysis = null) {\n if (analysis == null) analysis = this.analysis_result;\n\n // TODO: Find a good judgement variable\n return -1;\n }\n\n analyze() {\n ObjectHelper.assert(\"Not available over old interface\", false);\n }\n}\n\nclass LazySuperSectionCacheOpAnalysis extends SuperSectionCacheOpAnalysis {\n\n constructor(communicator, section, nodeid, stateid, critical_path_analysis) {\n super(section, nodeid, stateid, critical_path_analysis, null);\n this.communicator = communicator;\n }\n\n async analyze() {\n // We differ from the eager analysis here: We let the python/sql-side do the hard work\n let section = this.section.toSection(this.for_node, this.for_state);\n section = await section;\n if(section === undefined) {\n return undefined;\n }\n let tmp = await this.communicator.runAnalysis(\"CacheOpAnalysis\", [new Number(section.unified_id), new Number(section.supersection_id)]).get();\n\n let data = tmp;\n\n let ret = new DataBlock(data, \"CacheOp\");\n this.analysis_result = ret;\n ret.judgement = this.judgement();\n return ret;\n }\n}\n\nfunction AutoSuperSectionCacheOpAnalysis(communicator, section, nodeid, stateid, critical_path_analysis) {\n if(section instanceof LazySuperSection) {\n return new LazySuperSectionCacheOpAnalysis(communicator, section, nodeid, stateid);\n }\n else {\n return new SuperSectionCacheOpAnalysis(section, nodeid, stateid, critical_path_analysis);\n }\n}\n\nexport { CacheOpButton, AutoSuperSectionCacheOpAnalysis };"],"sourceRoot":""} \ No newline at end of file diff --git a/dist/764.js b/dist/764.js deleted file mode 100755 index 7c72183a..00000000 --- a/dist/764.js +++ /dev/null @@ -1,2 +0,0 @@ -(self.webpackChunk_spcl_sdfv=self.webpackChunk_spcl_sdfv||[]).push([[764],{6764:(A,e,g)=>{"use strict";g.r(e),g.d(e,{ParallelizationButton:()=>i});var t=g(7329),B=g(6610),n=g(379),I=g(6070),C=g(7608),Q=g(4286),a=g(1318);function E(A,e){(null==e||e>A.length)&&(e=A.length);for(var g=0,t=new Array(e);g=A.length?{done:!0}:{done:!1,value:A[t++]}},e:function(A){throw A},f:B}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var n,I=!0,C=!1;return{s:function(){g=A[Symbol.iterator]()},n:function(){var A=g.next();return I=A.done,A},e:function(A){C=!0,n=A},f:function(){try{I||null==g.return||g.return()}finally{if(C)throw n}}}}(e);try{for(r.s();!(C=r.n()).done;){var o=C.value;n.push({label:"run "+i.toString(),yAxisID:"axis-1",data:o,backgroundColor:B[i]}),i++}}catch(A){r.e(A)}finally{r.f()}return{labels:(0,t.Z)(Array(e[0].length).keys()),datasets:n}})).linkMouse(l._layout_clickable).changeGraphOptions((function(A){A.options.title.text="PAPI_TOT_CYC per thread",A.options.scales.yAxes.find((function(A){return"axis-1"==A.id})).scaleLabel={labelString:"Cycles",display:!0},A.options.scales.yAxes.find((function(A){return"axis-1"==A.id})).ticks.beginAtZero=!0,A.options.scales.xAxes=[{scaleLabel:{labelString:"Thread",display:!0}}]})),c=new Q.RU_DataViewBarGraph({type:"line",yAxes:[{type:"linear",display:!0,position:"left",id:"axis-1"},{type:"linear",display:!0,position:"right",id:"axis-2"}]}).setDataAnalysisFunction((function(A){var e=[];null!=A&&(e=A.data.critical_paths);var g=[];null!=A&&(g=A.data.speedup);var t=[];null!=A&&(t=A.data.efficiency);var B=Q.RU_DataViewBarGraph.colorList().slice(0,4),n=[],I=0;toplevel_use_mean?I=e.map((function(A){return a.Vw.mean(A.value)})):toplevel_use_median?I=e.map((function(A){return a.Vw.median(A.value)})):a.tV.assert("Unknown mode",!1),n.push({label:"Critical path",fill:!1,yAxisID:"axis-1",data:I,backgroundColor:B[0],borderColor:B[0]});var C=void 0;return toplevel_use_mean?C=function(A){return a.Vw.mean(A)}:toplevel_use_median?C=function(A){return a.Vw.median(A)}:a.tV.assert("undefined mode",!1),n.push({label:"Speedup",fill:!1,yAxisID:"axis-2",data:g.map((function(A){return C(A.value)})),backgroundColor:B[1],borderColor:B[1]}),n.push({label:"Efficiency",fill:!1,yAxisID:"axis-2",data:t.map((function(A){return C(A.value)})),backgroundColor:B[2],borderColor:B[2]}),{labels:e.map((function(A){return A.thread_num})),datasets:n}})).linkMouse(l._layout_clickable).changeGraphOptions((function(A){A.options.title.text="Parallel efficiency",A.options.scales.yAxes.find((function(A){return"axis-1"==A.id})).scaleLabel={labelString:"Cycles",display:!0},A.options.scales.yAxes.find((function(A){return"axis-1"==A.id})).ticks.beginAtZero=!0,A.options.scales.yAxes.find((function(A){return"axis-2"==A.id})).scaleLabel={labelString:"Relative Perf.",display:!0},A.options.scales.yAxes.find((function(A){return"axis-2"==A.id})).ticks.beginAtZero=!0,A.options.scales.xAxes=[{scaleLabel:{labelString:"OMP_NUM_THREADS",display:!0}}]})).setInformationFilePath("optimization_hints/efficiency.html");return l.setMultiviewRect("Graph",new Q.Pos(0,50),new Q.Pos(70,50),[u,c]),o.Imbalance=e,o.SuggestedAction=n,o.Efficiency=n,o.Title=new Q.DataBlock({fontsize:32,text:"Parallelization results",color:"black",align:"center"},"Text"),o.Graph=[g,n],o.PathInfo=n,C.dataparams=[e,g,n],l.setDataBinding(o),C.button_subwindow.setLayout(l),C.setOnEnterHover((function(A){C.color="#00FF00",C.button_subwindow_state="open"})),C.setOnLeaveHover((function(A){C.color="orange",C.is_locked_open||(C.button_subwindow_state="collapsed")})),C.setOnClick((function(A,e){C.is_locked_open=!C.is_locked_open})),C.setDefaultDblClick(),C}return r}(Q.Button)}}]); -//# sourceMappingURL=764.js.map \ No newline at end of file diff --git a/dist/764.js.map b/dist/764.js.map deleted file mode 100755 index d2babd19..00000000 --- a/dist/764.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["webpack://@spcl/sdfv/./renderer_dir/parallelization_button.js"],"names":["ParallelizationButton","ctx","targetsection_analysis","all_analyses","critical_path_analysis","communicator","_display_image","setButtonImage","judgement","databinding","layout","Layout","button_subwindow","setRect","Pos","RU_DataViewText","RU_DataViewFormLayout","setTitle","setDataAnalysisFunction","d","x","efficiencies","data","efficiency","target_thread_num","max_func","y","thread_num","path_1_thread","toplevel_use_mean","MathHelper","critical_paths","find","value","toplevel_use_median","ObjectHelper","path_max_thread","descstr_1","descstr_max","fontsize","rows","title","padding","left","right","top","bottom","rawdata","RU_DataViewNumberBlock","balance_max","Math","round","setColorScaling","min","pow","suggested_action","RU_DataViewSuggestedActionBlock","returnarr","speedup","max_thread_num","min_thread_num","min_func","max_speedup","abs","push","linkMouse","_layout_clickable","setHint","setOptions","draw_bar","display_title","text_align","setInformationFilePath","thread_graph","RU_DataViewBarGraph","type","yAxes","display","position","id","tcs","map","cycles_per_thread","colors","slice","length","datasets","all_analyses_global","chunksize","repcount","i","tc","label","toString","yAxisID","backgroundColor","labels","Array","keys","changeGraphOptions","options","text","scales","scaleLabel","labelString","ticks","beginAtZero","xAxes","efficiency_graph","graphcp","cp","fill","borderColor","agg_func","undefined","sp","setMultiviewRect","DataBlock","color","align","dataparams","setDataBinding","setLayout","setOnEnterHover","p","button_subwindow_state","setOnLeaveHover","is_locked_open","setOnClick","mb","setDefaultDblClick","Button"],"mappings":"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","file":"764.js","sourcesContent":["// Copyright 2019-2021 ETH Zurich and the DaCe authors. All rights reserved.\nimport { Button, Layout, Pos, max_func, max_func_obj, min_func, DataBlock,\n RU_DataViewText, RU_DataViewSuggestedActionBlock, RU_DataViewNumberBlock, RU_DataViewBarGraph, RU_DataViewFormLayout, } from \"./renderer_util.js\";\nimport { MathHelper, ObjectHelper } from \"./datahelper.js\";\n\n\nclass ParallelizationButton extends Button {\n constructor(ctx, targetsection_analysis, all_analyses, critical_path_analysis, communicator) {\n super(ctx);\n this.communicator = communicator;\n\n this._display_image = {\n \"1\": \"data:image/png;base64,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CAgEBAICAYGAQACBgEBAICAQEAgIBAQCAgGBgEAAgYBAQCAgEBAICAQEAgIBgYBAAIGAQEAgIBAQCAgEBAICAYEAAgGBgEBAICAQEAgIBAQCAgGBAAIBgYBAQCAgEBAICAQEAgIBBAICAYGAQEAgIBAQCAgEBAICAQQCAgGBgEBAICAQEAgIBAQCCAQEAgIBgYBAQCAgEBAICAQEAggEBAICAYGAQEAgIBAQCAgEEAgIBAQCAgGBgEBAICAQEAgIBBAIzOj8AK7x3IUsj+oSBRLD0pJLxEssEAgIBAQCAgGBgEBAIIBAQCAgEBAICAQEAgIBgYBAQCCAQEAgIBAQCAgEBAICAYGAQACBgEBAICAQEAgIBAQCAgGBgEAAgYBAQCAgEBAICAQEAgIBgQACAYGAQEAgIBAQCAgEBAICAYEAAgGBgEBAICAQEAgIBAQCAgEEAgIBgYBAQCAgEBAICAQEAgIBBAICAYGAQEAgIBAQCAgEBAIIBAQCAgGBgEBAICAQEAgIBAQCCAQEAgIBgYBAQCAgEBAICAQEAggEBAICAYGAQEAgIBAQCAgEEAgIBAQCAgGBgEBAICAQEAgIBBAICAQEAgIBgYBAQCAgEBAIIBAQCAgEBAICAYGAQEAgIBAQCCAQEAgIBAQCAoFy/QOsBSVilqJCrgAAAABJRU5ErkJggg==\",\n \"-1\": \"data:image/png;base64,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\"\n };\n\n this.setButtonImage(this._display_image[critical_path_analysis.judgement]);\n\n let databinding = {};\n\n let layout = new Layout(this.button_subwindow);\n layout.setRect(\"Title\", new Pos(0, 0), new Pos(100, 10), new RU_DataViewText());\n layout.setRect(\"PathInfo\", new Pos(0, 20), new Pos(70, 30), new RU_DataViewFormLayout().setTitle(\"PathInfo\").setDataAnalysisFunction(d => {\n let x = d;\n\n let efficiencies = x.data.efficiency;\n let target_thread_num = max_func(efficiencies, y => y.thread_num);\n\n let path_1_thread = 0;\n if(toplevel_use_mean)\n path_1_thread = MathHelper.mean(x.data.critical_paths.find(x => x.thread_num == 1).value);\n else if(toplevel_use_median)\n path_1_thread = MathHelper.median(x.data.critical_paths.find(x => x.thread_num == 1).value);\n else ObjectHelper.assert(\"Undefined mode\", false);\n\n let path_max_thread = 0;\n if(toplevel_use_mean)\n path_max_thread = MathHelper.mean(x.data.critical_paths.find(x => x.thread_num == target_thread_num).value);\n else if(toplevel_use_median)\n path_max_thread = MathHelper.median(x.data.critical_paths.find(x => x.thread_num == target_thread_num).value);\n else ObjectHelper.assert(\"Undefined mode\", false);\n \n let descstr_1 = \"unknown\";\n let descstr_max = \"unknown\";\n if(toplevel_use_mean) {\n descstr_1 = \"mean\";\n descstr_max = \"mean\";\n }\n else if(toplevel_use_median) {\n descstr_1 = \"median\";\n descstr_max = \"median\";\n }\n\n return {\n fontsize: 16,\n rows: [\n { title: \"Threads\", value: target_thread_num },\n { title: \"Serial Path (\" + descstr_1 + \")\", value: ObjectHelper.valueToSensibleString(path_1_thread) + \" cycles\" },\n { title: \"Critical Path (\" + descstr_max + \")\", value: ObjectHelper.valueToSensibleString(path_max_thread) + \" cycles\" }\n ],\n padding: {left: 10, right: 10, top: 0, bottom: 0 },\n rawdata: d\n };\n }));\n layout.setRect(\"Imbalance\", new Pos(70, 50), new Pos(30, 20), new RU_DataViewNumberBlock().setTitle(\"Imbalance\").setDataAnalysisFunction(x => {\n let balance_max = x.data.balance_max * 100.0;\n let p = Math.round(balance_max);\n return p;\n }).setColorScaling(x => Math.min(Math.pow(x, 2.) / 10, 100.)));\n\n let suggested_action = new RU_DataViewSuggestedActionBlock().setDataAnalysisFunction(x => {\n \n let returnarr = [];\n let data = x.data;\n\n let speedup = data.speedup;\n let max_thread_num = max_func(speedup, y => y.thread_num);\n let min_thread_num = min_func(speedup, y => y.thread_num);\n \n let max_speedup = 0;\n let min_speedup = 0;\n if(toplevel_use_mean)\n min_speedup = MathHelper.mean(speedup.find(y => y.thread_num == min_thread_num).value);\n else if(toplevel_use_median)\n min_speedup = MathHelper.median(speedup.find(y => y.thread_num == min_thread_num).value);\n else ObjectHelper.assert(\"Unknown mode\", false);\n \n if(toplevel_use_mean)\n max_speedup = MathHelper.mean(speedup.find(y => y.thread_num == max_thread_num).value);\n else if(toplevel_use_median)\n max_speedup = MathHelper.median(speedup.find(y => y.thread_num == max_thread_num).value);\n else ObjectHelper.assert(\"Unknown mode\", false);\n\n\n if(Math.abs(max_speedup - 1.0) < 0.1) {\n returnarr.push(\"SpeedupHigherThanOne\");\n }\n\n \n return returnarr;\n }).linkMouse(layout._layout_clickable);\n suggested_action.setHint(\"SpeedupHigherThanOne\", \"MapTiling\");\n\n layout.setRect(\"SuggestedAction\", new Pos(70, 70), new Pos(30, 20), suggested_action);\n\n layout.setRect(\"Efficiency\", new Pos(70, 20), new Pos(30, 20), new RU_DataViewNumberBlock().setTitle(\"Efficiency\").setOptions({\n draw_bar: [\"left\"],\n padding: { left: 10 },\n display_title: true,\n text_align: \"center\",\n }).setDataAnalysisFunction(x => {\n let efficiencies = x.data.efficiency;\n let target_thread_num = max_func(efficiencies, y => y.thread_num);\n \n let efficiency = 0;\n \n if(toplevel_use_mean)\n efficiency = MathHelper.mean(efficiencies.find(y => y.thread_num == target_thread_num).value);\n else if(toplevel_use_median)\n efficiency = MathHelper.median(efficiencies.find(y => y.thread_num == target_thread_num).value);\n else ObjectHelper.assert(\"Unknown mode\", false);\n\n return Math.round(100. * efficiency);\n }).setColorScaling(x => 100 - x).setInformationFilePath(\"optimization_hints/efficiency.html\"));\n\n let thread_graph = new RU_DataViewBarGraph({\n type: 'bar',\n yAxes: [{\n type: \"linear\",\n display: true,\n position: 'left',\n id: 'axis-1'\n }\n ]\n }).setDataAnalysisFunction(x => {\n let tcs = [];\n if (x != null) {\n tcs = x.data.map(x => x.data.cycles_per_thread);\n }\n\n let colors = RU_DataViewBarGraph.colorList().slice(0, tcs.length + 1);\n\n let datasets = [];\n // So now we have a mapping of thread -> cycles.\n \n if(all_analyses_global) {\n let chunksize = Math.round(tcs.length / all_analyses.repcount);\n\n // Just reset and it should be fine already\n tcs = ObjectHelper.createChunks(tcs, chunksize, MathHelper.sumArray);\n }\n\n let i = 0;\n for (let tc of tcs) {\n datasets.push({ label: \"run \" + i.toString(), yAxisID: \"axis-1\", data: tc, backgroundColor: colors[i] });\n i++;\n }\n\n let chartData = {\n labels: [...Array(tcs[0].length).keys()],\n \"datasets\": datasets,\n\n };\n\n return chartData;\n }).linkMouse(layout._layout_clickable).changeGraphOptions(x => {\n x.options.title.text = \"PAPI_TOT_CYC per thread\";\n x.options.scales.yAxes.find(x => x.id == 'axis-1').scaleLabel = { labelString: \"Cycles\", display: true };\n x.options.scales.yAxes.find(x => x.id == 'axis-1').ticks.beginAtZero = true;\n x.options.scales.xAxes = [{ scaleLabel: { labelString: \"Thread\", display: true } }];\n });\n\n let efficiency_graph = new RU_DataViewBarGraph({\n type: 'line',\n yAxes: [{\n type: \"linear\",\n display: true,\n position: 'left',\n id: 'axis-1'\n }, {\n type: \"linear\",\n display: true,\n position: 'right',\n id: 'axis-2'\n }\n ]\n }).setDataAnalysisFunction(x => {\n let critical_paths = [];\n if (x != null) {\n critical_paths = x.data.critical_paths;\n }\n\n let speedup = [];\n if (x != null) {\n speedup = x.data.speedup;\n }\n\n let efficiency = [];\n if (x != null) {\n efficiency = x.data.efficiency;\n }\n\n let colors = RU_DataViewBarGraph.colorList().slice(0, 4);\n\n let datasets = [];\n\n let graphcp = 0;\n if(toplevel_use_mean) {\n graphcp = critical_paths.map(cp => MathHelper.mean(cp.value));\n }\n else if(toplevel_use_median) {\n graphcp = critical_paths.map(cp => MathHelper.median(cp.value));\n }\n else ObjectHelper.assert(\"Unknown mode\", false);\n\n let i = 0;\n // Add the critical paths\n datasets.push({ label: \"Critical path\", fill: false, yAxisID: \"axis-1\", data: graphcp, backgroundColor: colors[0], borderColor: colors[0] });\n \n let agg_func = undefined;\n if(toplevel_use_mean)\n agg_func = x => MathHelper.mean(x);\n else if(toplevel_use_median)\n agg_func = x => MathHelper.median(x);\n else\n ObjectHelper.assert(\"undefined mode\", false);\n\n // Add the speedup\n datasets.push({ label: \"Speedup\", fill: false, yAxisID: \"axis-2\", data: speedup.map(sp => agg_func(sp.value)), backgroundColor: colors[1], borderColor: colors[1] });\n\n datasets.push({ label: \"Efficiency\", fill: false, yAxisID: \"axis-2\", data: efficiency.map(sp => agg_func(sp.value)), backgroundColor: colors[2], borderColor: colors[2] });\n\n let chartData = {\n labels: critical_paths.map(x => x.thread_num),\n \"datasets\": datasets,\n\n };\n\n return chartData;\n }).linkMouse(layout._layout_clickable).changeGraphOptions(x => {\n x.options.title.text = \"Parallel efficiency\";\n x.options.scales.yAxes.find(x => x.id == 'axis-1').scaleLabel = { labelString: \"Cycles\", display: true };\n x.options.scales.yAxes.find(x => x.id == 'axis-1').ticks.beginAtZero = true;\n x.options.scales.yAxes.find(x => x.id == 'axis-2').scaleLabel = { labelString: \"Relative Perf.\", display: true };\n x.options.scales.yAxes.find(x => x.id == 'axis-2').ticks.beginAtZero = true;\n x.options.scales.xAxes = [{ scaleLabel: { labelString: \"OMP_NUM_THREADS\", display: true } }];\n }).setInformationFilePath(\"optimization_hints/efficiency.html\");\n\n\n layout.setMultiviewRect(\"Graph\", new Pos(0, 50), new Pos(70, 50), [thread_graph, efficiency_graph]);\n\n databinding[\"Imbalance\"] = targetsection_analysis;\n databinding[\"SuggestedAction\"] = critical_path_analysis;\n databinding[\"Efficiency\"] = critical_path_analysis;\n databinding[\"Title\"] = new DataBlock({ fontsize: 32, text: \"Parallelization results\", color: \"black\", align: \"center\" }, \"Text\");\n\n databinding['Graph'] = [all_analyses, critical_path_analysis];\n databinding['PathInfo'] = critical_path_analysis;\n\n this.dataparams = [targetsection_analysis, all_analyses, critical_path_analysis];\n layout.setDataBinding(databinding);\n\n\n this.button_subwindow.setLayout(layout);\n\n this.setOnEnterHover(p => { this.color = \"#00FF00\"; this.button_subwindow_state = 'open'; })\n this.setOnLeaveHover(p => { this.color = \"orange\"; if (!this.is_locked_open) this.button_subwindow_state = 'collapsed'; })\n this.setOnClick((p, mb) => { this.is_locked_open = !this.is_locked_open; });\n\n this.setDefaultDblClick();\n }\n}\n\nexport { ParallelizationButton };"],"sourceRoot":""} \ No newline at end of file diff --git a/dist/main.js b/dist/main.js deleted file mode 100755 index af66fdc6..00000000 --- a/dist/main.js +++ /dev/null @@ -1,3 +0,0 @@ -/*! For license information please see main.js.LICENSE.txt */ -(()=>{var __webpack_modules__={676:(e,t,n)=>{"use strict";function r(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);nr})},3349:(e,t,n)=>{"use strict";function r(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}n.d(t,{Z:()=>r})},2137:(e,t,n)=>{"use strict";function r(e,t,n,r,i,a,o){try{var s=e[a](o),u=s.value}catch(e){return void n(e)}s.done?t(u):Promise.resolve(u).then(r,i)}function i(e){return function(){var t=this,n=arguments;return new Promise((function(i,a){var o=e.apply(t,n);function s(e){r(o,i,a,s,u,"next",e)}function u(e){r(o,i,a,s,u,"throw",e)}s(void 0)}))}}n.d(t,{Z:()=>i})},6610:(e,t,n)=>{"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}n.d(t,{Z:()=>r})},3894:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=n(4665);function i(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}function a(e,t,n){return(a=i()?Reflect.construct:function(e,t,n){var i=[null];i.push.apply(i,t);var a=new(Function.bind.apply(e,i));return n&&(0,r.Z)(a,n.prototype),a}).apply(null,arguments)}},5991:(e,t,n)=>{"use strict";function r(e,t){for(var n=0;ni})},6156:(e,t,n)=>{"use strict";function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}n.d(t,{Z:()=>r})},6213:(e,t,n)=>{"use strict";n.d(t,{Z:()=>i});var r=n(7608);function i(e,t,n){return(i="undefined"!=typeof Reflect&&Reflect.get?Reflect.get:function(e,t,n){var i=function(e,t){for(;!Object.prototype.hasOwnProperty.call(e,t)&&null!==(e=(0,r.Z)(e)););return e}(e,t);if(i){var a=Object.getOwnPropertyDescriptor(i,t);return a.get?a.get.call(n):a.value}})(e,t,n||e)}},7608:(e,t,n)=>{"use strict";function r(e){return(r=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}n.d(t,{Z:()=>r})},379:(e,t,n)=>{"use strict";n.d(t,{Z:()=>i});var r=n(4665);function i(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&(0,r.Z)(e,t)}},6070:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=n(484),i=n(3349);function a(e,t){return!t||"object"!==(0,r.Z)(t)&&"function"!=typeof t?(0,i.Z)(e):t}},4665:(e,t,n)=>{"use strict";function r(e,t){return(r=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}n.d(t,{Z:()=>r})},4699:(e,t,n)=>{"use strict";n.d(t,{Z:()=>i});var r=n(2961);function i(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){if("undefined"!=typeof Symbol&&Symbol.iterator in Object(e)){var n=[],r=!0,i=!1,a=void 0;try{for(var o,s=e[Symbol.iterator]();!(r=(o=s.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{r||null==s.return||s.return()}finally{if(i)throw a}}return n}}(e,t)||(0,r.Z)(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}},2465:(e,t,n)=>{"use strict";function r(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}n.d(t,{Z:()=>r})},7329:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=n(676),i=n(2961);function a(e){return function(e){if(Array.isArray(e))return(0,r.Z)(e)}(e)||function(e){if("undefined"!=typeof Symbol&&Symbol.iterator in Object(e))return Array.from(e)}(e)||(0,i.Z)(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}},484:(e,t,n)=>{"use strict";function r(e){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}n.d(t,{Z:()=>r})},2961:(e,t,n)=>{"use strict";n.d(t,{Z:()=>i});var r=n(676);function i(e,t){if(e){if("string"==typeof e)return(0,r.Z)(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?(0,r.Z)(e,t):void 0}}},7757:(e,t,n)=>{e.exports=n(5666)},1318:(e,t,n)=>{"use strict";n.d(t,{Vw:()=>p,tV:()=>h});var r=n(484),i=n(7329),a=n(2137),o=n(6610),s=n(5991),u=n(7757),l=n.n(u),c=n(4286);function f(e,t){var n;if("undefined"==typeof Symbol||null==e[Symbol.iterator]){if(Array.isArray(e)||(n=function(e,t){if(e){if("string"==typeof e)return d(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?d(e,t):void 0}}(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var r=0,i=function(){};return{s:i,n:function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,o=!0,s=!1;return{s:function(){n=e[Symbol.iterator]()},n:function(){var e=n.next();return o=e.done,e},e:function(e){s=!0,a=e},f:function(){try{o||null==n.return||n.return()}finally{if(s)throw a}}}}function d(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0&&e<=255);var t=(255*e).toString(16).toUpperCase();return h.assert("Correct Length",1==t.length||2==t.length),2==t.length?t:"0"+t}},{key:"majority",value:function(e){h.assert("array valid",null!=e&&null!=e.length);var t,n={},r=f(e);try{for(r.s();!(t=r.n()).done;){var i=t.value;null==n[i]&&(n[i]=0),n[i]++}}catch(e){r.e(e)}finally{r.f()}for(var a=[],o=0,s=Object.keys(n);o0),(0,c.max_func_obj)(a,(function(e){return e[1]}),(function(e){return e[0]}))}},{key:"corr",value:function(e,t){return this.cov(e,t)/(this.stdev(e)*this.stdev(t))}},{key:"sample_corr",value:function(e,t){var n=this.mean(e),r=this.mean(t);return this.sum(this.zip(e,t).map((function(e){return(e[0]-n)*(e[1]-r)})))/Math.sqrt(this.sum(e.map((function(e){return(e-n)*(e-n)})))*this.sum(t.map((function(e){return(e-r)*(e-r)}))))}},{key:"cov",value:function(e,t){for(var n=e.length,r=0;r2&&void 0!==arguments[2]?arguments[2]:void 0;e.assert("chunksize valid",!isNaN(n)&&0!=n&&null!=n);var i=[];void 0===r&&(r=function(e){return e});for(var a=0;a0;r=~~(r/10))n=t[Math.round(r)%10]+n;return n}},{key:"toUnicodeSubscript",value:function(e){var t=["₀","₁","₂","₃","₄","₅","₆","₇","₈","₉"],n="";0==(e=new Number(e))&&(n=t[0]);for(var r=parseInt(e.toFixed(0));r>0;r=~~(r/10))n=t[Math.round(r)%10]+n;return n}},{key:"valueToSensibleString",value:function(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"scientific",r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"",i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:4;t=new Number(t);var a=0,o={0:"",1:"Ki",2:"Mi",3:"Gi",4:"Ti",5:"Pi"},s="";if("programmer"==n){for(;t>=1024;)t/=1024,++a;s=t.toFixed(i-1),s+=" "+o[a]+r}else if("scientific"==n){for(;t>=10;)t/=10,++a;s=t.toFixed(i-1),a.toString(),s+=" ⋅ 10"+e.toUnicodeSuperscript(a)}else if("fraction"==n){for(var u=1e-5,l=new Number(t),c=1;Math.abs(Math.round(l)-l)>u;)l*=10,c*=10;var f=function(e,t){if(e=Math.abs(Math.round(e)),(t=Math.abs(Math.round(t)))>e){var n=e;e=t,t=n}for(;e>=0&&t>=0;){if(0==t)return e;if(0==(e%=t))return t;t%=e}return 1},d=f(l,c);l/=d,c/=d;var p=e.toUnicodeSuperscript(l.toString()),h=e.toUnicodeSubscript(c.toString());s=p+"/"+h}else e.assert("unknown mode",!1);return s}},{key:"modifyingMapRecursive",value:function(t,n,r){if(!(null==t||null==t||t instanceof String||"string"==typeof t))if(t instanceof Array){var i,a=f(t);try{for(a.s();!(i=a.n()).done;){var o=i.value;e.modifyingMapRecursive(o,n,r)}}catch(e){a.e(e)}finally{a.f()}}else{var s=e.listKeys(t);if(null!=s){var u,l=f(s);try{for(l.s();!(u=l.n()).done;){var c=u.value;c==n?t[c]=r(t[c]):e.modifyingMapRecursive(t[c],n,r)}}catch(e){l.e(e)}finally{l.f()}}}}},{key:"valueFromPromise",value:(u=(0,a.Z)(l().mark((function e(t){var n;return l().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(null==t.then){e.next=7;break}return e.next=3,t;case 3:return n=e.sent,e.abrupt("return",n);case 7:return e.abrupt("return",t);case 8:case"end":return e.stop()}}),e)}))),function(e){return u.apply(this,arguments)})},{key:"valueFromPromiseFull",value:(n=(0,a.Z)(l().mark((function t(n){var r;return l().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(null==n.then){t.next=9;break}return t.next=3,n;case 3:return r=t.sent,t.next=6,e.valueFromPromiseFull(r);case 6:return t.abrupt("return",t.sent);case 9:return t.abrupt("return",n);case 10:case"end":return t.stop()}}),t)}))),function(e){return n.apply(this,arguments)})},{key:"waitArray",value:(t=(0,a.Z)(l().mark((function t(n){var r;return l().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:r=0;case 1:if(!(r1&&void 0!==arguments[1]?arguments[1]:{};if(0==e.length)return[];var n,r=this.listKeys(e[0]),a={},o=f(r);try{for(o.s();!(n=o.n()).done;){var s=n.value;a[s]=void 0}}catch(e){o.e(e)}finally{o.f()}var u,l=f(e);try{for(l.s();!(u=l.n()).done;){var c,d=u.value,p=f(r);try{for(p.s();!(c=p.n()).done;){var h=c.value,m=d[h];if(m instanceof Array){var v;null==a[h]&&(a[h]=[]),(v=a[h]).push.apply(v,(0,i.Z)(m))}else{if(null==a[h]&&(a[h]=m),a[h]!=m&&(console.log("Different elements for key "+h+": "+a[h]+" vs "+m),null!=t[h])){a[h]=t[h](a[h],m);continue}this.assert("Same primitive values",a[h]==m)}}}catch(e){p.e(e)}finally{p.f()}}}catch(e){l.e(e)}finally{l.f()}return a}},{key:"mergeRecursive",value:function(t,n){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(null==t||null==t)return n;if(null==n||null==n)return t;if("string"==typeof t)return t;if(("array"==typeof t||t instanceof Array)&&("array"==typeof n||n instanceof Array))return n.every((function(e){return t.includes(e)}))?t:[].concat((0,i.Z)(t),(0,i.Z)(n));var a,o=t,s=e.listKeys(n),u=f(s);try{for(u.s();!(a=u.n()).done;){var l=a.value,c=n[l];if(null==r[l]){var d=o[l];o[l]=null==d?c:e.mergeRecursive(o[l],c)}else{var p=r[l];o[l]=p(o[l],c,r)}}}catch(e){u.e(e)}finally{u.f()}return o}},{key:"flatten",value:function(e){return[].concat.apply([],e)}},{key:"logObject",value:function(e,t){return null==t&&(t=e,e="(anon)"),console.log(e+": "+JSON.stringify(t))}},{key:"groupBy",value:function(t,n){var r,i={},a=f(t);try{for(a.s();!(r=a.n()).done;){var o=r.value;e.assert("key not undefined",void 0!==n(o)),e.listKeys(i).includes(n(o))?i[n(o)].push(o):i[n(o)]=[o]}}catch(e){a.e(e)}finally{a.f()}return Object.values(i)}},{key:"assert",value:function(e,t){if(!t)throw console.log('Assertion "'+e+'" failed'),console.trace(),window.alert("Assertion failed. Check console"),new Error}},{key:"stringify_circular",value:function(e){var t;return JSON.stringify(e,(t=new WeakSet,function(e,n){if("object"===(0,r.Z)(n)&&null!==n){if(t.has(n))return;t.add(n)}return n}))}}]),e}()},4286:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{CanvasDrawManager:()=>CanvasDrawManager,Bracket:()=>Bracket,Button:()=>Button,Layout:()=>Layout,Pos:()=>Pos,min_func:()=>min_func,max_func:()=>max_func,max_func_obj:()=>max_func_obj,RU_DataView:()=>RU_DataView,RU_DataViewBarGraph:()=>RU_DataViewBarGraph,RU_DataViewFormLayout:()=>RU_DataViewFormLayout,RU_DataViewNumberBlock:()=>RU_DataViewNumberBlock,RU_DataViewSuggestedActionBlock:()=>RU_DataViewSuggestedActionBlock,RU_DataViewText:()=>RU_DataViewText,createImageDownload:()=>createImageDownload,DataBlock:()=>DataBlock});var _babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_9__=__webpack_require__(3349),_babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_10__=__webpack_require__(6213),_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_8__=__webpack_require__(379),_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(6070),_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(7608),_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_6__=__webpack_require__(6610),_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_7__=__webpack_require__(5991),_babel_runtime_helpers_construct__WEBPACK_IMPORTED_MODULE_4__=__webpack_require__(3894),_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_5__=__webpack_require__(7329),_datahelper_js__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__(1318),_windowing_js__WEBPACK_IMPORTED_MODULE_3__=__webpack_require__(2238);function _createSuper(e){var t=_isNativeReflectConstruct();return function(){var n,r=(0,_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_0__.Z)(e);if(t){var i=(0,_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_0__.Z)(this).constructor;n=Reflect.construct(r,arguments,i)}else n=r.apply(this,arguments);return(0,_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_1__.Z)(this,n)}}function _isNativeReflectConstruct(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}function _createForOfIteratorHelper(e,t){var n;if("undefined"==typeof Symbol||null==e[Symbol.iterator]){if(Array.isArray(e)||(n=_unsupportedIterableToArray(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var r=0,i=function(){};return{s:i,n:function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,o=!0,s=!1;return{s:function(){n=e[Symbol.iterator]()},n:function(){var e=n.next();return o=e.done,e},e:function(e){s=!0,a=e},f:function(){try{o||null==n.return||n.return()}finally{if(s)throw a}}}}function _unsupportedIterableToArray(e,t){if(e){if("string"==typeof e)return _arrayLikeToArray(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?_arrayLikeToArray(e,t):void 0}}function _arrayLikeToArray(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n1&&void 0!==arguments[1]?arguments[1]:"canvas_element",n=(e.constructor.name,document.createElement("canvas")),r=n.getContext("2d");n.width=e.button_subwindow.targetwidth,n.height=e.button_subwindow.targetheight;var i=(0,_babel_runtime_helpers_construct__WEBPACK_IMPORTED_MODULE_4__.Z)(e.constructor,[r].concat((0,_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_5__.Z)(e.dataparams)));i.button_subwindow_state="open",i.is_locked_open=!0,i.setFullyOpen();var a=new Bracket(r);a.setupEventListeners(),a.addButton(i),a.drawEx(new Pos(-20,0),new Pos(0,0),0,0,!0);var o=n.toDataURL("image/jpeg");return"canvas_element"===t?n:o}function createImageDownload(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=document.createElement("canvas"),r=n.getContext("2d"),i=700,a=500,o=0,s=0;n.height=Object.entries(e).length*a;var u=Object.entries(e)[0][1];n.width=(1+u.buttons.length)*i,r.save(),r.fillStyle="white",r.fillRect(0,0,n.width,n.height),r.restore();for(var l=0,c=Object.entries(e);l>16&65535,v=65535&h;r.fillText("Affected node "+m.toString()+"|"+v.toString(),i/2,o+a/2),r.restore();var y,g=i,_=_createForOfIteratorHelper(p.buttons);try{for(_.s();!(y=_.n()).done;){var b=y.value,x=render_button_to_graphic(b);r.drawImage(x,g,o),g+=i}}catch(e){_.e(e)}finally{_.f()}s=Math.max(s,g),o+=a,g=0}var w=n.toDataURL("image/jpeg"),E=document.createElement("a");E.setAttribute("href",w),E.setAttribute("download",t+"buttons.jpg"),E.style.display="none",document.body.appendChild(E),E.click(),document.body.removeChild(E)}function max_func(e,t){null==e&&console.trace("undefined parameter"),_datahelper_js__WEBPACK_IMPORTED_MODULE_2__.tV.assert("Array is non-empty",e.length>0);var n,r=t(e[0]),i=_createForOfIteratorHelper(e);try{for(i.s();!(n=i.n()).done;){var a=n.value,o=t(a);o>r&&(r=o)}}catch(e){i.e(e)}finally{i.f()}return r}function max_func_obj(e,t,n){if(0==e.length)return null;var r,i=n(e[0]),a=t(e[0]),o=_createForOfIteratorHelper(e);try{for(o.s();!(r=o.n()).done;){var s=r.value,u=t(s);u>a&&(a=u,i=n(s))}}catch(e){o.e(e)}finally{o.f()}return i}function min_func(e,t){var n,r=t(e[0]),i=_createForOfIteratorHelper(e);try{for(i.s();!(n=i.n()).done;){var a=n.value,o=t(a);ot.x||this.y>t.y)}}]),e}(),Clickable=function(){function e(){(0,_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_6__.Z)(this,e),this.children=Array(),this.onEnterHover=function(){return!1},this.onLeaveHover=function(){return!1},this.onClick=function(){return!1},this.onDoubleClick=function(){return!1},this.onMouseMove=function(){return!1},this.clickable_state="not_hovered",this.enable_func=function(){return!0}}return(0,_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_7__.Z)(e,[{key:"destroy",value:function(){this.children=[]}},{key:"addChild",value:function(e){this.children.push(e)}},{key:"addVIPChild",value:function(e){this.children.unshift(e)}},{key:"setEnableFunc",value:function(e){this.enable_func=e}},{key:"onUpdateDoubleClick",value:function(e,t){if(!this.enable_func())return!1;if(this.is_inside(e)&&this.onDoubleClick())return!0;var n,r=_createForOfIteratorHelper(this.children);try{for(r.s();!(n=r.n()).done;)if(n.value.onUpdateDoubleClick(e,t))return!0}catch(e){r.e(e)}finally{r.f()}return!1}},{key:"onUpdateClick",value:function(e,t){if(!this.enable_func())return!1;if(this.is_inside(e)&&this.onClick())return!0;var n,r=_createForOfIteratorHelper(this.children);try{for(r.s();!(n=r.n()).done;)if(n.value.onUpdateClick(e,t))return!0}catch(e){r.e(e)}finally{r.f()}return!1}},{key:"onUpdateMove",value:function(e){if(!this.enable_func())return!1;if(this.is_inside(e)){if(this.onMouseMove(e),"not_hovered"==this.clickable_state&&(this.clickable_state="hovered",this.onEnterHover(e)))return!0}else if("hovered"==this.clickable_state&&(this.clickable_state="not_hovered",this.onLeaveHover()))return!0;var t,n=_createForOfIteratorHelper(this.children);try{for(n.s();!(t=n.n()).done;)if(t.value.onUpdateMove(e))return!0}catch(e){n.e(e)}finally{n.f()}return!1}},{key:"is_inside",value:function(e){return console.log("Abstract function called (is_inside)"),!1}},{key:"setOnEnterHover",value:function(e){this.onEnterHover=e}},{key:"setOnLeaveHover",value:function(e){this.onLeaveHover=e}},{key:"setOnClick",value:function(e){this.onClick=e}},{key:"setOnDoubleClick",value:function(e){this.onDoubleClick=e}},{key:"setOnMouseMove",value:function(e){this.onMouseMove=e}}]),e}(),SubWindow=function(e){(0,_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_8__.Z)(n,e);var t=_createSuper(n);function n(e,r,i,a,o){var s;return(0,_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_6__.Z)(this,n),(s=t.call(this)).ctx=e,s.topleft=new Pos(r,i),s.targetwidth=a,s.targetheight=o,s._sizetrans=0,s.subwindow_trans_change=10,s.subwindow_popped_out=!1,s.layout=null,s.background_color="white",s}return(0,_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_7__.Z)(n,[{key:"setLayout",value:function(e){return this.layout=e,this}},{key:"width",value:function(){return this.targetwidth*this._sizetrans/100}},{key:"height",value:function(){return this.targetheight*this._sizetrans/100}},{key:"draw",value:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;null!=e&&(this.topleft=e);var r=this.ctx;n&&(r=n),r.save(),r.beginPath(),r.strokeStyle="black",r.lineWidth=2;var i=r.fillStyle;r.fillStyle=this.background_color,r.rect(this.topleft.x,this.topleft.y,this.width(),this.height()),r.fill(),r.stroke(),r.fillStyle=i,"open"==t?(this._sizetrans+=this.subwindow_trans_change,this._sizetrans>100&&(this._sizetrans=100)):"collapsed"==t&&(this._sizetrans-=this.subwindow_trans_change,this._sizetrans<0&&(this._sizetrans=0)),null!=this.layout&&0!=this._sizetrans&&this.layout.draw(r),r.restore()}},{key:"is_inside",value:function(e){var t=e.minus(this.topleft);return!(t.x<0||t.y<0||t.x>this.width()||this.height())}}]),n}(Clickable),Button=function(e){(0,_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_8__.Z)(n,e);var t=_createSuper(n);function n(e){var r;return(0,_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_6__.Z)(this,n),(r=t.call(this)).ctx=e,r.state=0,r.update=0,r.color="orange",r.button_subwindow_state="collapsed",r.button_subwindow=new SubWindow(e,0,0,600,400),r.addChild(r.button_subwindow),r.is_locked_open=!1,r.topleft=new Pos(0,0),r.size=new Pos(0,0),r.button_image=null,r}return(0,_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_7__.Z)(n,[{key:"setDefaultDblClick",value:function(){var e=this;this.setOnDoubleClick((function(t){var n=new _windowing_js__WEBPACK_IMPORTED_MODULE_3__.a(window);return n.setSenderData({className:e.constructor.name,dataParams:e.dataparams}),n.open("renderer_dir/subwindow.html","_blank")||(console.log("Failed to open subwindow"),alert("failed to open subwindow")),!0}))}},{key:"setFullyOpen",value:function(){this.button_subwindow_state="open",this.button_subwindow._sizetrans=100,this.is_locked_open=!0}},{key:"setButtonImage",value:function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:100;if(null==e)return this;this.button_image=new Image,this.button_image.src=e,this.button_image.onload=function(){var e=document.createElement("canvas"),r=e.getContext("2d");e.width=n,e.height=n,r.drawImage(t.button_image,0,0,n,n),t.button_image.src=e.toDataURL()}}},{key:"is_inside",value:function(e){var t=e.minus(this.topleft);return!(t.x<0||t.y<0||t.x>this.size.x||t.y>this.size.y)}},{key:"draw",value:function(e,t){this.update++;var n=new Date,r=this.ctx;if(this.topleft=e,this.size=t,this.button_subwindow.draw(e,this.button_subwindow_state),r.save(),r.beginPath(),null==this.button_image){if(0==this.state){var i=2*Math.PI/1e3,a=t.x/2,o=n.getMilliseconds(),s=Math.cos(i*o)*a,u=Math.sin(i*o)*a,l=r.createLinearGradient(e.x+a+s,e.y+a+u,e.x+a-s,e.y+a-u);l.addColorStop(0,this.color),l.addColorStop(1,"white"),r.fillStyle=l}r.strokeStyle="#000000",r.lineWidth=2,r.rect(e.x,e.y,t.x,t.y),r.stroke(),0==this.state&&r.fill()}else r.drawImage(this.button_image,e.x,e.y,t.x,t.y),r.strokeStyle="#000000",r.lineWidth=2,r.rect(e.x,e.y,t.x,t.y),r.stroke();r.restore(),e=null,t=null,n=null}}]),n}(Clickable),Layout=function(){function e(t){var n=this;(0,_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_6__.Z)(this,e),this.parent=t,this._layout={},this.databinding=null;var r=this;this._layout_clickable=new(function(e){(0,_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_8__.Z)(n,e);var t=_createSuper(n);function n(){return(0,_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_6__.Z)(this,n),t.apply(this,arguments)}return(0,_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_7__.Z)(n,[{key:"is_inside",value:function(e){for(var t=0,n=Object.keys(r._layout);ta.x&&o.information_button_pos.y+o.information_button_size.y>a.y)return console.log("Information Button clicked!"),o.showOptimizationHints(),!0;var s=i.x+r.x-20,u=i.x+r.x,l=i.y,c=i.y+20;return!!(t.is_multiview&&s1&&void 0!==arguments[1]?arguments[1]:1;this.information_overlay_age>=0&&(++this.information_overlay_age,this.information_overlay_age>1&&(this.information_overlay_alpha-=.05,this.information_overlay_alpha<0&&(this.information_overlay_alpha=0),this.information_overlay_age=0));var n=.9;n*=this.information_overlay_alpha;var r=1;r*=this.information_overlay_alpha;var i="🛈",a=18;e.save(),e.beginPath(),e.textAlign="center",e.textBaseline="top",e.font=Math.round(a*t)+"px sans-serif";var o=e.measureText(i).width,s=o;e.fillStyle="rgba(128, 128, 128, "+n+")",e.strokeStyle="rgba(128, 128, 128, "+r+")",this.information_button_pos=new Pos(this.topleft.x+(this.size.x-o)*t/2-o,this.topleft.y),this.information_button_size=new Pos(3*o,1.1*s),e.rect(this.information_button_pos.x,this.information_button_pos.y,this.information_button_size.x,this.information_button_size.y),e.fill(),e.stroke(),e.beginPath(),n=3*this.information_overlay_alpha,e.fillStyle="rgba(0, 0, 255, "+n+")";var u=this.topleft.x+this.size.x*t/2;e.fillText(i,u,this.topleft.y),e.restore()}},{key:"getSettingsDict",value:function(){return{analysis_func:{type:"code",value:this.analyze.toString(),description:"#TODO"}}}},{key:"setSettingsDict",value:function setSettingsDict(dict){var func=eval(dict.analysis_func.value.toString());_datahelper_js__WEBPACK_IMPORTED_MODULE_2__.tV.assert("Object type function",func instanceof Function),this.setDataAnalysisFunction(func),this.update_data=!0}},{key:"setInformationHTMLString",value:function(e){return this.information_html_string=e,this}},{key:"getInformationHTMLString",value:function(){return this.information_html_string}},{key:"openSettingsWindow",value:function(){var e=this,t=new _windowing_js__WEBPACK_IMPORTED_MODULE_3__.a(window);t.setCallback((function(n){"ClientOpened"==n.type?t.reply(n.source,n.origin,{type:"settings-data",data:e.getSettingsDict()}):"save-settings"==n.type?(e.setSettingsDict(n.data),console.log("Applied new settings")):console.log("Undefined operation reached! "+JSON.stringify(n))})),t.open("DataViewSettings.html","_blank")||alert("Failed to open child window...")}},{key:"setTitle",value:function(e){return this}},{key:"draw",value:function(e,t,n){console.log("Abstract function called")}},{key:"getSendableObject",value:function(){return this}},{key:"fromSendableObject",value:function(e){return console.log("Abstract function fromSendableObject() called"),this}},{key:"setDataAnalysisFunction",value:function(e){return this.analyze=e,this}},{key:"setRect",value:function(e,t){return this.topleft=e,this.size=t,this}},{key:"drawRect",value:function(e){e.beginPath(),e.rect(this.topleft.x,this.topleft.y,this.size.x,this.size.y),e.stroke()}}]),RU_DataView}(),RU_DataViewText=function(e){(0,_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_8__.Z)(n,e);var t=_createSuper(n);function n(){return(0,_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_6__.Z)(this,n),t.call(this)}return(0,_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_7__.Z)(n,[{key:"fromSendableObject",value:function(e){return this}},{key:"draw",value:function(e,t,n){if(0!=n){e.save(),e.beginPath(),e.font=Math.round(n*t.data.fontsize).toString()+"px sans-serif",e.fillStyle=t.data.color,e.textAlign=t.data.align;var r=e.measureText("M").width;e.fillText(t.data.text,this.topleft.x+this.size.x/2,this.topleft.y+r),e.restore()}}}]),n}(RU_DataView),RU_DataViewBarGraph=function(e){(0,_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_8__.Z)(n,e);var t=_createSuper(n);function n(){var e,r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;(0,_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_6__.Z)(this,n);var i="bar",a=void 0,o=void 0;(e=t.call(this)).dvbg_chart_data=null,null!=r&&(null!=r.type&&(i=r.type),null!=r.xAxes&&(a=r.xAxes),null!=r.yAxes&&(o=r.yAxes)),e.dvbg_canvas_scaler=document.createElement("div"),e.dvbg_canvas=document.createElement("canvas"),e.dvbg_ctx=e.dvbg_canvas.getContext("2d"),e.dvbg_canvas_scaler.appendChild(e.dvbg_canvas),document.body.appendChild(e.dvbg_canvas_scaler);var s={type:i,data:e.analyze(null),options:{responsive:!0,title:{display:!0,text:"Chart test..."},tooltips:{mode:"index",intersect:!0},scales:{}}};null!=a&&(s.options.scales.xAxes=a),null!=o&&(s.options.scales.yAxes=o),e.dvbg_chart=new Chart(e.dvbg_ctx,s),e.dvbg_canvas_scaler.style.visibility="hidden",e.dvbg_canvas_scaler.style.position="fixed";var u=(0,_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_9__.Z)(e);return e.dvbg_clickable=new(function(e){(0,_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_8__.Z)(n,e);var t=_createSuper(n);function n(){return(0,_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_6__.Z)(this,n),t.call(this)}return(0,_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_7__.Z)(n,[{key:"is_inside",value:function(e){return null!=u.topleft&&u.topleft.xi)return-1;if(s<0||s>a)return-1;var u=r.textheight+r.heightpadding;return Math.floor(s/u)}},{key:"onUpdateMove",value:function(e){if(!this.enable_func())return!1;if(!this.is_inside(e))return r.dvsa_button_hovered=-1,!1;var t=this.getButtonIndex(e);return r.buttonHovered(t),!0}},{key:"onUpdateClick",value:function(e){return!!this.enable_func()&&!!this.is_inside(e)}}]),n}(Clickable)),e.hints={},e.dvsab_cached_data=[],e.heightpadding=20,e}return(0,_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_7__.Z)(n,[{key:"buttonHovered",value:function(e){this.dvsa_button_hovered=e}},{key:"setTitle",value:function(e){return this.title=e,this}},{key:"setHint",value:function(e,t){return this.hints[e]=t,this}},{key:"setOptions",value:function(e){return this.opt=e,this}},{key:"setStringFormatter",value:function(e){this.stringformatter=e}},{key:"linkMouse",value:function(e){return e.addChild(this.dvsa_clickable),this}},{key:"draw",value:function(e,t,n){if(this.update_data&&(this.dvsab_cached_data=this.analyze(t),_datahelper_js__WEBPACK_IMPORTED_MODULE_2__.tV.assert("Data evaluated to undefined",null!=this.dvsab_cached_data),this.update_data=!1),0!=n){e.save(),e.textAlign="center",e.textBaseline="middle",e.strokeStyle="black",e.lineWidth=3,e.font=Math.round(12*n).toString()+"px sans-serif";var r=e.measureText("M").width;this.textheight=r;var i,a=this.topleft.x+this.size.x/2,o=this.topleft.y+r,s=0,u=_createForOfIteratorHelper(this.dvsab_cached_data);try{for(u.s();!(i=u.n()).done;){var l=i.value,c=this.hints[l];e.beginPath(),s==this.dvsa_button_hovered?e.strokeStyle="red":e.strokeStyle="black",e.fillText(c,a,o),e.ellipse(a,o,this.size.x/2,(r+this.heightpadding/2)/2,0,0,2*Math.PI),e.stroke(),o+=(r+this.heightpadding)*n,++s}}catch(e){u.e(e)}finally{u.f()}this.drawOverlay(e,n),e.restore()}}}]),n}(RU_DataView),RU_DataViewFormLayout=function(e){(0,_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_8__.Z)(n,e);var t=_createSuper(n);function n(){return(0,_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_6__.Z)(this,n),t.call(this)}return(0,_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_7__.Z)(n,[{key:"draw",value:function(e,t,n){if(0!=n){e.save(),e.beginPath();var r=this.analyze(t),i=r.fontsize,a=r.rows,o=r.padding,s=Math.round(i*n);e.font=s+"px sans-serif",max_func(a.map((function(e){return e.title})),(function(t){return e.measureText(t+": ").width}));var u,l=e.measureText("M").width,c=(max_func(a.map((function(e){return e.val})),(function(t){return e.measureText(t).width})),0),f=_createForOfIteratorHelper(a);try{for(f.s();!(u=f.n()).done;){var d=u.value,p=d.title,h=d.value;e.beginPath(),e.textAlign="left",e.fillText(p,this.topleft.x+o.left*n,this.topleft.y+o.top+(c+1)*(l+10)),e.beginPath(),e.textAlign="right",e.fillText(h,this.topleft.x+(this.size.x-o.right)*n,this.topleft.y+o.top+(c+1)*(l+10)),c++}}catch(e){f.e(e)}finally{f.f()}e.restore()}}}]),n}(RU_DataView),Bracket=function(e){(0,_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_8__.Z)(n,e);var t=_createSuper(n);function n(e){var r;return(0,_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_6__.Z)(this,n),(r=t.call(this)).ctx=e,r.buttons=[],r.start=new Pos(0,0),r.end=new Pos(0,0),r.offset=0,r.startoffset=0,r.listeners=[],r.button_alpha=1,r.bracket_alpha=1,r}return(0,_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_7__.Z)(n,[{key:"hide",value:function(){this.button_alpha=0,this.bracket_alpha=0}},{key:"show",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1;this.button_alpha=e,this.bracket_alpha=e}},{key:"setupEventListeners",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:void 0,n=(this.ctx.canvas,function(e){return e}),r=function(e){return e};null!=window.get_zoom&&(n=function(e){return e/window.get_zoom()},r=function(e){return e/window.get_zoom()}),null!=t&&(n=function(e){return t.mapPixelToCoordsX(e)},r=function(e){return t.mapPixelToCoordsY(e)});var i=function(t){e.onUpdateMove(new Pos(n(t.offsetX),r(t.offsetY)))},a=function(t){e.onUpdateClick(new Pos(n(t.offsetX),r(t.offsetY)),t.button)},o=function(t){e.onUpdateDoubleClick(new Pos(n(t.offsetX),r(t.offsetY)),t.button)};this.listeners.push(["mousemove",i]),this.listeners.push(["click",a]),this.listeners.push(["dblclick",o]);var s,u=this.ctx,l=_createForOfIteratorHelper(this.listeners);try{for(l.s();!(s=l.n()).done;){var c,f=s.value;(c=u.canvas).addEventListener.apply(c,(0,_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_5__.Z)(f))}}catch(e){l.e(e)}finally{l.f()}}},{key:"destroy",value:function(){(0,_babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_10__.Z)((0,_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_0__.Z)(n.prototype),"destroy",this).call(this);var e,t=_createForOfIteratorHelper(this.listeners);try{for(t.s();!(e=t.n()).done;){var r,i=e.value;(r=this.ctx.canvas).removeEventListener.apply(r,(0,_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_5__.Z)(i))}}catch(e){t.e(e)}finally{t.f()}this.buttons=null,this.start=null,this.end=null,this.ctx=null}},{key:"drawEx",value:function(e,t,n,r,i,a){this.start=e,this.end=t,this.offset=n,this.startoffset=r,this.animate=i,this.updatefunc=a,this.draw()}},{key:"is_inside_buttons",value:function(e){if(0==this.button_alpha)return!1;var t,n=0,r=0,i=_createForOfIteratorHelper(this.buttons);try{for(i.s();!(t=i.n()).done;){var a=t.value;null==a?console.log("Undefined button!"):null==a.topleft&&console.log("Undefined topleft"),n=Math.max(a.topleft.x+a.size.x,n),r=Math.max(a.topleft.y+a.size.y,r)}}catch(e){i.e(e)}finally{i.f()}return!!e.inRect(this.start,new Pos(n,r))}},{key:"bracket_clicked",value:function(){0==this.button_alpha?this.button_alpha=1:this.button_alpha=0}},{key:"is_inside_bracket",value:function(e){return!(e.xthis.start.x+this.offset+5||(e.ythis.end.y+5)&&(console.log("outside y"),1))}},{key:"is_inside",value:function(e){return this.is_inside_buttons(e)}},{key:"onUpdateClick",value:function(e,t){return this.is_inside_bracket(e,t)?(this.bracket_clicked(),!0):0!=this.button_alpha&&(0,_babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_10__.Z)((0,_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_0__.Z)(n.prototype),"onUpdateClick",this).call(this,e,t)}},{key:"onUpdateDoubleClick",value:function(e,t){return this.is_inside_bracket(e,t)?(this.bracket_clicked(),!0):0!=this.button_alpha&&(0,_babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_10__.Z)((0,_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_0__.Z)(n.prototype),"onUpdateDoubleClick",this).call(this,e,t)}},{key:"draw",value:function(){var e=this,t=this.start,n=this.end,r=this.offset,i=this.startoffset,a=this.ctx;this.animate&&null==this.updatefunc&&a.clearRect(0,0,a.canvas.width,a.canvas.height),a.save(),a.beginPath(),a.lineWidth=5,a.strokeStyle="rgba(0,0,255,"+this.bracket_alpha.toString()+")",a.moveTo(t.x+i,t.y),a.lineTo(t.x+r,t.y),a.stroke(),a.lineTo(t.x+r,n.y),a.stroke(),a.lineTo(n.x+i,n.y),a.stroke(),a.restore();var o=a.globalAlpha;if(a.globalAlpha=this.button_alpha,this.button_alpha>0&&this.drawButtons(new Pos(t.x+r+20,t.y)),a.globalAlpha=o,this.animate){var s=this;window.requestAnimationFrame((function(){null==e.updatefunc?s.draw():e.updatefunc()}))}}},{key:"drawButtons",value:function(e){var t=e.x,n=e.y;e=null;var r,i,a=0,o=_createForOfIteratorHelper(this.buttons);try{for(o.s();!(i=o.n()).done;){r=i.value;new Pos(t,n);var s,u=new Pos(t,n+a);"open"==r.button_subwindow_state&&(a-=35),s=u,r.draw(s,new Pos(30,30),this.ctx),t+=40}}catch(e){o.e(e)}finally{o.f()}}},{key:"addButton",value:function(e){this.buttons.push(e),this.addChild(e)}}]),n}(Clickable),_canvas_manager_counter=0,CanvasDrawManager=function(){function e(t,n){(0,_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_6__.Z)(this,e),this.ctx=t,this.anim_id=null,this.drawables=[],this.ref_global_state=n,this.indices=[],this.request_scale=!1,this.scale_factor={x:1,y:1},this.last_scale_factor={x:1,y:1},this._destroying=!1,this.scale_origin={x:0,y:0},this.contention=0,this._svg=document.createElementNS("http://www.w3.org/2000/svg","svg"),this.user_transform=this._svg.createSVGMatrix(),this.addCtxTransformTracking()}return(0,_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_7__.Z)(e,[{key:"svgPoint",value:function(e,t){var n=this._svg.createSVGPoint();return n.x=e,n.y=t,n}},{key:"applyUserTransform",value:function(){var e=this.user_transform;this.ctx.setTransform(e.a,e.b,e.c,e.d,e.e,e.f)}},{key:"translation",get:function(){return{x:this.user_transform.e,y:this.user_transform.f}}},{key:"addCtxTransformTracking",value:function(){var e=this,t=document.createElementNS("http://www.w3.org/2000/svg","svg");this.ctx._custom_transform_matrix=t.createSVGMatrix();var n=function(){console.assert(!isNaN(e.ctx._custom_transform_matrix.f))},r=this.ctx,i=r.scale;r.scale=function(e,t){return r._custom_transform_matrix=r._custom_transform_matrix.scaleNonUniform(e,t),n(),i.call(r,e,t)};var a=r.translate;r.translate=function(e,t){return r._custom_transform_matrix=r._custom_transform_matrix.translate(e,t),n(),a.call(r,e,t)};var o=r.rotate;r.rotate=function(e){return r._custom_transform_matrix=r._custom_transform_matrix.rotate(180*e/Math.PI),n(),o.call(r,e)};var s=r.scale;r.transform=function(e,i,a,o,u,l){var c=t.createSVGMatrix();return c.a=e,c.b=i,c.c=a,c.d=o,c.e=u,c.f=l,r._custom_transform_matrix=r._custom_transform_matrix.multiply(c),n(),s.call(r,e,i,a,o,u,l)};var u=r.setTransform;r.setTransform=function(e,t,i,a,o,s){return r._custom_transform_matrix.a=e,r._custom_transform_matrix.b=t,r._custom_transform_matrix.c=i,r._custom_transform_matrix.d=a,r._custom_transform_matrix.e=o,r._custom_transform_matrix.f=s,n(),u.call(r,e,t,i,a,o,s)},r.custom_inverseTransformMultiply=function(e,i){var a=t.createSVGPoint();return a.x=e,a.y=i,n(),a.matrixTransform(r._custom_transform_matrix.inverse())}}},{key:"destroy",value:function(){this._destroying=!0,this.clearDrawables()}},{key:"addDrawable",value:function(t){this.drawables.push(t),this.indices.push({c:e.counter(),d:t})}},{key:"removeDrawable",value:function(e){this.drawables=this.drawables.filter((function(t){return t!=e}))}},{key:"clearDrawables",value:function(){var e,t=_createForOfIteratorHelper(this.drawables);try{for(t.s();!(e=t.n()).done;)e.value.destroy()}catch(e){t.e(e)}finally{t.f()}this.drawables=[],this.indices=[]}},{key:"scale",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0;if(this.request_scale||Math.abs(e)<1e-4||this.contention>0)console.log("Blocking potential race");else{this.contention++,this.request_scale=!0,this.scale_origin.x=t,this.scale_origin.y=n,this.scale_factor.x+=e,this.scale_factor.y+=e,this.scale_factor.x=Math.max(.001,this.scale_factor.x),this.scale_factor.y=Math.max(.001,this.scale_factor.y);var r=e<0?.9:1.1,i=this.svgPoint(this.scale_origin.x,this.scale_origin.y).matrixTransform(this.user_transform.inverse());this.user_transform=this.user_transform.translate(i.x,i.y),this.user_transform=this.user_transform.scale(r,r,1,0,0,0),this.user_transform=this.user_transform.translate(-i.x,-i.y),this.contention--}}},{key:"translate",value:function(e,t){this.user_transform=this.user_transform.translate(e/this.user_transform.a,t/this.user_transform.d)}},{key:"mapPixelToCoordsX",value:function(e){return this.svgPoint(e,0).matrixTransform(this.user_transform.inverse()).x}},{key:"mapPixelToCoordsY",value:function(e){return this.svgPoint(0,e).matrixTransform(this.user_transform.inverse()).y}},{key:"getScale",value:function(){return _datahelper_js__WEBPACK_IMPORTED_MODULE_2__.tV.assert("Uniform scale",this.scale_factor.x==this.scale_factor.y),this.noJitter(this.scale_factor.x)}},{key:"getLastScale",value:function(){return this.noJitter(this.last_scale_factor.x)}},{key:"noJitter",value:function(e){return e=parseFloat(e.toFixed(3)),Math.round(100*e)/100}},{key:"draw",value:function(){if(!(this._destroying||this.contention>0)){this.contention+=1;var e=this.ctx;e.save(),e.setTransform(1,0,0,1,0,0),e.clearRect(0,0,e.canvas.width,e.canvas.height),e.restore(),this.request_scale&&1==this.contention?(this.mapPixelToCoordsX(this.scale_origin.x),this.mapPixelToCoordsY(this.scale_origin.y),this.applyUserTransform(),this.request_scale=!1):(this.mapPixelToCoordsX(this.scale_origin.x),this.mapPixelToCoordsY(this.scale_origin.y)),this.applyUserTransform(),this.ref_global_state.drawSDFG();var t,n=_createForOfIteratorHelper(this.drawables);try{for(n.s();!(t=n.n()).done;)t.value.draw()}catch(e){n.e(e)}finally{n.f()}this.contention-=1}}},{key:"draw_async",value:function(){var e=this;this.anim_id=window.requestAnimationFrame((function(){return e.draw()}))}}],[{key:"counter",value:function(){return _canvas_manager_counter++}}]),e}()},2238:(e,t,n)=>{"use strict";n.d(t,{a:()=>u});var r=n(6610),i=n(5991),a=n(1318);function o(e,t){var n;if("undefined"==typeof Symbol||null==e[Symbol.iterator]){if(Array.isArray(e)||(n=function(e,t){if(e){if("string"==typeof e)return s(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?s(e,t):void 0}}(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var r=0,i=function(){};return{s:i,n:function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,o=!0,u=!1;return{s:function(){n=e[Symbol.iterator]()},n:function(){var e=n.next();return o=e.done,e},e:function(e){u=!0,a=e},f:function(){try{o||null==n.return||n.return()}finally{if(u)throw a}}}}function s(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"",r=arguments.length>3&&void 0!==arguments[3]&&arguments[3];return this.window=parent.open(e,t,n+"width=800,height=600",r),this.window,this.window}},{key:"setCallback",value:function(e){this.message_userdef=e}},{key:"passMessage",value:function(e){return this.window.postMessage(e,"*")}},{key:"reply",value:function(e,t,n){return e!=this.window&&null!=this.window&&console.log("We do not talk to strangers"),this.passMessage(n)}},{key:"setSenderData",value:function(e){this.window_data=e}},{key:"destroy",value:function(){this.parent.removeEventListener("message",this._msg_func)}},{key:"serialize_dataview",value:function(e){return e.getSendableObject()}},{key:"serialize_array",value:function(e){var t,n=[],r=o(e);try{for(r.s();!(t=r.n()).done;){var i=t.value;n.push(this.serialize(i))}}catch(e){r.e(e)}finally{r.f()}return n}},{key:"serialize_function",value:function(e){return e.toString()}},{key:"serialize_default",value:function(e){if(null==e)return"";var t,n={},r=o(a.tV.listKeys(e));try{for(r.s();!(t=r.n()).done;){var i=t.value,s=e[i];n[i]=this.serialize(s)}}catch(e){r.e(e)}finally{r.f()}return n}},{key:"serialize",value:function(e){return e instanceof RU_DataView?this.serialize_dataview(e):e instanceof Array?this.serialize_array(e):e instanceof Object?this.serialize_default(e):"function"==typeof e?this.serialize_function(e):e}},{key:"message",value:function(e){var t=e.data;if(e.source==this.window)if("ClientOpened"==t.type)if(null==this.message_userdef){var n={type:"DisplayData",data:this.window_data};this.reply(e.source,e.origin,n)}else this.message_userdef(t);else"close"==t.type?(console.log("Parent received close message"),this.window.close(),this.destroy()):null!=this.message_userdef?this.message_userdef(t):console.log("Unknown type "+JSON.stringify(t))}}]),e}()},1154:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";__webpack_require__.d(__webpack_exports__,{C:()=>DIODE});var _babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_9__=__webpack_require__(484),_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_8__=__webpack_require__(7329),_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(6156),_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__(6610),_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_5__=__webpack_require__(5991),_main__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(4316),_diode_appearance__WEBPACK_IMPORTED_MODULE_4__=__webpack_require__(816),_utils_sdfg_sdfg_parser__WEBPACK_IMPORTED_MODULE_7__=__webpack_require__(728),_utils_sdfg_json_serializer__WEBPACK_IMPORTED_MODULE_10__=__webpack_require__(9018),_table__WEBPACK_IMPORTED_MODULE_6__=__webpack_require__(982),_diode_settings__WEBPACK_IMPORTED_MODULE_3__=__webpack_require__(5490),_diode_project__WEBPACK_IMPORTED_MODULE_11__=__webpack_require__(2992);function ownKeys(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function _objectSpread(e){for(var t=1;t=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,o=!0,s=!1;return{s:function(){n=e[Symbol.iterator]()},n:function(){var e=n.next();return o=e.done,e},e:function(e){s=!0,a=e},f:function(){try{o||null==n.return||n.return()}finally{if(s)throw a}}}}function _unsupportedIterableToArray(e,t){if(e){if("string"==typeof e)return _arrayLikeToArray(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?_arrayLikeToArray(e,t):void 0}}function _arrayLikeToArray(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n0&&void 0!==arguments[0]?arguments[0]:void 0,t=localStorage.getItem("diode_run_configs");if(t=null!=t?JSON.parse(t):[{"Configuration name":"default",Host:"localhost","Use SSH":!0,"SSH Key":this.pubSSH(),"SSH Key override":"",Instrumentation:"off","Number of threads":"[0]"}],null!=e){var n=t.filter((function(t){return t["Configuration name"]==e}));if(0!=n.length)return n[0];console.error("Could not find a configuration with that name",e)}return t}},{key:"addToRunConfigs",value:function(e){delete e["SSH Key"];var t,n=this.getRunConfigs(),r=0,i=_createForOfIteratorHelper(n);try{for(i.s();!(t=i.n()).done;){if(t.value["Configuration name"]==e["Configuration name"]){n[r]=e;break}++r}}catch(e){i.e(e)}finally{i.f()}r>=n.length&&n.push(e),n.sort((function(e,t){return e["Configuration name"].localeCompare(t["Configuration name"])})),localStorage.setItem("diode_run_configs",JSON.stringify(n))}},{key:"setCurrentRunConfig",value:function(e){sessionStorage.setItem("diode_current_run_config",e)}},{key:"getCurrentRunConfigName",value:function(){var e=sessionStorage.getItem("diode_current_run_config");return null==e?"default":e}},{key:"getCurrentRunConfig",value:function(){return this.getRunConfigs(this.getCurrentRunConfigName())}},{key:"applyCurrentRunConfig",value:function(){var e=this,t=this.getCurrentRunConfig(),n={};if(n=_objectSpread(_objectSpread({},n),{"execution/general/host":t.Host}),t["Use SSH"]){var r=/\S/.test(t["SSH Key override"])?" -i "+t["SSH Key override"]+" ":" ";n=_objectSpread(_objectSpread({},n),{"execution/general/execcmd":"ssh -oBatchMode=yes"+r+"${host} ${command}","execution/general/copycmd_r2l":"scp -B"+r+" ${host}:${srcfile} ${dstfile}","execution/general/copycmd_l2r":"scp -B"+r+" ${srcfile} ${host}:${dstfile}"})}else n=_objectSpread(_objectSpread({},n),{"execution/general/execcmd":"${command}","execution/general/copycmd_r2l":"cp ${srcfile} ${dstfile}","execution/general/copycmd_l2r":"cp ${srcfile} ${dstfile}"});return new Promise((function(r,i){var a=_objectSpread({client_id:e.getClientID()},n);(0,_main__WEBPACK_IMPORTED_MODULE_1__.LS)("/dace/api/v1.0/preferences/set",a,(function(e){4===e.readyState&&200===e.status?r(t):0===e.status||(e.status+"_").startsWith("2")||i()}))}))}},{key:"pubSSH",value:function(){var e=localStorage.getItem("diode_pubSSH");if(null!=e)return e;(0,_main__WEBPACK_IMPORTED_MODULE_1__.LS)("/dace/api/v1.0/getPubSSH/",void 0,(function(e){if(4===e.readyState&&200===e.status){var t=JSON.parse(e.response);if(null==t.error){var n=t.pubkey;localStorage.setItem("diode_pubSSH",n)}else alert(t.error)}}),"GET")}},{key:"hint",value:function(e){var t=function(e,t){var n=JSON.parse(e);$(t).w2overlay("

Help for category "+n.type+"

"+n.name+"
")},n=e.target,r=n.getAttribute("data-hint");if(null!=r)t(r,n),e.stopPropagation(),e.preventDefault(),console.log("Got hint data",r);else{if(!e.composed)return;var i,a=_createForOfIteratorHelper(e.composedPath());try{for(a.s();!(i=a.n()).done;){var o=i.value;if(null!=(r=null!=o.getAttribute?o.getAttribute("data-hint"):null)){t(r,o),e.stopPropagation(),e.preventDefault();break}}}catch(e){a.e(e)}finally{a.f()}}}},{key:"openUploader",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";w2popup.open({title:"Upload a code file",body:'\n
\n \n \n
\n',buttons:"",showMax:!0});var n=$("#upload_box");if(0==n.length)throw"Error: Element not available";n=n[0];var r=function(n){"code-python"==t&&e.newFile(n)};(0,_main__WEBPACK_IMPORTED_MODULE_1__.Wj)(n,(function(e,t){console.log("upload mime",e),r(t),w2popup.close()}),null,{readMode:"text"});var i=$("#file-select");if(0==i.length)throw"Error: Element not available";(i=i[0]).style.opacity=0,i.addEventListener("change",(function(e){var t=i.files[0],n=new FileReader;n.onload=function(e){r(e.target.result),w2popup.close()},n.readAsText(t)}))}},{key:"getClientID",value:function(){return this._client_id}},{key:"initEnums",value:function(){this.getEnum("ScheduleType"),this.getEnum("StorageType"),this.getEnum("AccessType"),this.getEnum("Language")}},{key:"closeAll",value:function(){this.goldenlayout.root&&(this.goldenlayout.root.getItemsByFilter((function(e){return"component"==e.config.type})).forEach((function(e){return e.close()})),this.project().clearClosedWindowsList())}},{key:"addContentItem",value:function(e){if(e.componentName){var t=this.project()._closed_windows;this.project().setClosedWindowsList(t.filter((function(t){return t[0]!=e.componentName})))}var n=this.goldenlayout.root;if(n)if(0===n.contentItems.length)n.addChild({type:"row",content:[]}),this.addContentItem(e);else if(this.goldenlayout.isSubWindow)this.goldenlayout.eventHub.emit("create-window-in-main",JSON.stringify(e));else{var r,i=_createForOfIteratorHelper(n.contentItems);try{for(i.s();!(r=i.n()).done;){var a=r.value;if("stack"!=a.config.type)return void a.addChild(e)}}catch(e){i.e(e)}finally{i.f()}var o=n.contentItems[0].contentItems.map((function(e){return e.config}));n.contentItems[0].remove();var s,u=_createForOfIteratorHelper(o);try{for(u.s();!(s=u.n()).done;){var l=s.value;this.addContentItem(l)}}catch(e){u.e(e)}finally{u.f()}this.addContentItem(e)}}},{key:"newFile",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";this.closeAll(),this.createNewProject();var t=this.getPseudorandom();"{"==e[0]&&1==e.split("\n").length&&(e=JSON.stringify(JSON.parse(e),null,2));var n={title:"Source Code",type:"component",componentName:"CodeInComponent",componentState:{created:t,code_content:e}};this.addContentItem(n),this.gatherProjectElementsAndCompile(this,{},{sdfg_over_code:!0})}},{key:"open_diode_settings",value:function(){var e={title:"Settings",type:"component",componentName:"SettingsComponent",componentState:{created:this.getPseudorandom()}};this.addContentItem(e)}},{key:"open_runqueue",value:function(){var e={title:"Run Queue",type:"component",componentName:"RunqueueComponent",componentState:{created:this.getPseudorandom()}};this.addContentItem(e)}},{key:"getEnum",value:function(e){var t=localStorage.getItem("Enumeration:"+e);return null==t||null==t?((0,_main__WEBPACK_IMPORTED_MODULE_1__.LS)("/dace/api/v1.0/getEnum/"+e,void 0,(function(t){if(4===t.readyState&&200===t.status){console.log(e,t.response);var n=JSON.parse(t.response);"Language"==e&&n.enum.push("NoCode"),localStorage.setItem("Enumeration:"+e,JSON.stringify(n))}}),"GET"),null):JSON.parse(t).enum}},{key:"renderProperties",value:function(e,t,n,r){var i=this,a=arguments.length>4&&void 0!==arguments[4]?arguments[4]:void 0;if(null!=n){if(!Array.isArray(n)){var o=n,s=Object.keys(n).filter((function(e){return!e.startsWith("_meta_")})),u=(s=s.filter((function(e){return Object.keys(n).includes("_meta_"+e)}))).map((function(e){var r=JSON.parse(JSON.stringify(n["_meta_"+e]));return r.name=e,r.value=n[e],{property:r,category:r.category,element:o,data:t.data}}));n=u}if("string"==typeof e){var l=e;e={propertyChanged:function(e,t,n){i.project().request(["property-changed-"+l],(function(e){}),{timeout:200,params:{element:e,name:t,value:n,type:a?a.type:a}}),a&&"transformation"===a.type||i.refreshSDFG()},applyTransformation:function(){i.project().request(["apply-adv-transformation-"+l],(function(e){}),{timeout:200,params:null==a?void 0:a.apply_params})},locateTransformation:function(e,t,n){i.project().request(["locate-transformation-"+a.sdfg_name],(function(e){}),{timeout:200,params:JSON.stringify([e,t,n])})},project:function(){return i.project()}}}var c,f=new _table__WEBPACK_IMPORTED_MODULE_6__.i,d=f,p=null,h={},m=_createForOfIteratorHelper(n);try{for(m.s();!(c=m.n()).done;){var v=c.value,y=v.category;null==h[y]&&(h[y]=[]),h[y].push(v)}}catch(e){m.e(e)}finally{m.f()}DIODE.debugDevMode()||delete h["(Debug)"];for(var g=0,_=Object.entries(h);g<_.length;g++){var b=_[g],x=b[0],w=b[1].sort((function(e,t){return e.property.name.localeCompare(t.property.name)}));d=f;var E=document.createElement("span");E.innerText=x;var N=d.addRow(E);N.childNodes[0].colSpan="2",p=new _table__WEBPACK_IMPORTED_MODULE_6__.F(d,N);var S,M=_createForOfIteratorHelper(w);try{for(M.s();!(S=M.n()).done;){var k=S.value,O=document.createElement("span"),C=k.property;O.innerText=C.name,O.title=C.desc;var A=diode.getMatchingInput(e,C,k),T=d.addRow(O,A);null!=p&&p.addContentRow(T)}}catch(e){M.e(e)}finally{M.f()}}if(f.setCSSClass("diode_property_table"),a&&"transformation"==a.type){var I=document.createElement("span");I.classList="",I.innerText=a.opt_name,r.appendChild(I);var D=document.createElement("span");D.innerText="location_on",D.classList="material-icons",D.style="cursor: pointer;",D.addEventListener("click",(function(){e.locateTransformation(a.opt_name,a.pos,a.apply_params[0].affects)})),r.appendChild(D)}if(f.createIn(r),a&&"transformation"==a.type){var P=document.createElement("button");P.innerText="Apply advanced transformation",P.addEventListener("click",(function(e){P.disabled=!0,i.project().request(["apply-adv-transformation-"+a.sdfg_name],(function(e){}),{params:JSON.stringify(a.apply_params)})})),r.appendChild(P)}}else console.warn("renderProperties as nothing to render")}},{key:"create_visual_access_representation",value:function create_visual_access_representation(elems,data){var __access_indices=elems[0],__ranges=elems[1],__user_input=elems[2],__additional_defines={Min:"(...x) => Math.min(...x)",int_ceil:"(a,b) => Math.ceil(a/b)"},_iterator7=_createForOfIteratorHelper(__user_input),_step7;try{for(_iterator7.s();!(_step7=_iterator7.n()).done;){var x=_step7.value,_r=window.prompt("Enter a value for symbol "+x);if(null==_r)break;__additional_defines[x]=_r}}catch(e){_iterator7.e(e)}finally{_iterator7.f()}console.log("data",data),"Array"!=data.type&&console.warn("Non-Array accessed",data);var __mem_dims=data.attributes.shape;console.assert(null!=__mem_dims);var __eval_func=function __eval_func(){var __defs=Object.keys(__additional_defines).map((function(e){return"let "+e+" = "+__additional_defines[e]})).join(";")+";";__mem_dims=__mem_dims.map((function(x){return eval(__defs+x)}))};__eval_func();var __tbl_container=document.createElement("div"),__tbl_hor=document.createElement("div");__tbl_hor.classList="flex_row",__tbl_hor.style="flex-wrap: nowrap; justify-content: flex-start;";var __axis_x_info=document.createElement("div");__axis_x_info.classList="flex_row",__axis_x_info.style="justify-content: space-between;";for(var __i=0;__i<2;++__i){var __tmp=document.createElement("div");try{__tmp.innerText=0==__i?"0":__mem_dims[1]}catch(e){__tmp.innerText=0==__i?"Start":"End"}__axis_x_info.appendChild(__tmp)}var __axis_y_info=document.createElement("div");__axis_y_info.classList="flex_column",__axis_y_info.style="justify-content: space-between;";for(var _i2=0;_i2<2;++_i2){var _tmp=document.createElement("div");try{_tmp.innerText=0==_i2?"0":__mem_dims[0]}catch(e){_tmp.innerText=0==_i2?"Start":"End"}__axis_y_info.appendChild(_tmp)}var __tbl_vert=document.createElement("div");__tbl_vert.classList="flex_col",null!=data&&(__tbl_vert.appendChild(__axis_x_info),__tbl_hor.appendChild(__axis_y_info));var __size=10;__mem_dims.some((function(e){return e>128}))&&(__size=5),__mem_dims.length<2&&__mem_dims.push(1),console.log("access indices",__access_indices),console.log("ranges",__ranges);var __fixed_rngs=__ranges.map((function(e){return e})).sort((function(e,t){return e.depth-t.depth})).slice(1).reverse(),__var_rng=__ranges[0],__rng_inputs=[],__create_func=function(){return null},__main=function(e){return null!=e.main?e.main:e};return function(){var input_cont=document.createElement("div"),__defs=Object.keys(__additional_defines).map((function(e){return"let "+e+" = "+__additional_defines[e]})).join(";")+";",__global_slider=document.createElement("input");__global_slider.type="range",__global_slider.min="0",__global_slider.value="0",__global_slider.step="1",input_cont.appendChild(__global_slider);var __total_rng_count=1,__locked_range=!1;input_cont.classList="flex_column";var _iterator8=_createForOfIteratorHelper(__fixed_rngs),_step8;try{for(_iterator8.s();!(_step8=_iterator8.n()).done;){var __r=_step8.value,_lbl2=document.createElement("label"),_in2=document.createElement("input");_in2.type="number",_in2.min="0",_in2.step="1",_in2.addEventListener("change",(function(e){var t,n=0,r=1,i=_createForOfIteratorHelper(__rng_inputs.map((function(e){return e})).reverse());try{for(i.s();!(t=i.n()).done;){var a=t.value,o=parseInt(a.max)-parseInt(a.min)+1,s=a.value;n+=parseInt(s)*r,r*=parseInt(o)}}catch(e){i.e(e)}finally{i.f()}__global_slider.value=n,__create_func()}));try{_in2.min=eval(__defs+__main(__r.val.start))}catch(e){console.warn("Got error when resolving expression",e)}try{_in2.max=eval(__defs+__main(__r.val.end))}catch(e){console.warn("Got error when resolving expression",e)}try{_in2.value=eval(__defs+__main(__r.val.start))}catch(e){console.warn("Got error when resolving expression",e)}__defs+="let "+__r.var+" = "+__main(__r.val.start)+";",_lbl2.innerText="Range iterator "+__r.var+" over ["+__main(__r.val.start)+", "+__main(__r.val.end)+"] in steps of "+__main(__r.val.step),_in2.setAttribute("data-rname",__r.var),_lbl2.appendChild(_in2),__rng_inputs.push(_in2),input_cont.appendChild(_lbl2),0==__total_rng_count&&(__total_rng_count=1);var __e_size=function(__x){return eval(__defs+"("+__main(__x.val.end)+" - "+__main(__x.val.start)+"+1) / "+__main(__x.val.step))}(__r);0==__e_size||__locked_range?__locked_range=!0:__total_rng_count*=__e_size}}catch(e){_iterator8.e(e)}finally{_iterator8.f()}console.log("__total_rng_count",__total_rng_count),__global_slider.max=__total_rng_count-1,__global_slider.addEventListener("input",(function(e){var t,n=parseInt(__global_slider.value),r=_createForOfIteratorHelper(__rng_inputs.map((function(e){return e})).reverse());try{for(r.s();!(t=r.n()).done;){var i=t.value,a=parseInt(i.max)-parseInt(i.min)+1,o=n%a;i.value=o,n=Math.floor(n/a)}}catch(e){r.e(e)}finally{r.f()}}));var r=__var_rng,_lbl=document.createElement("label"),_in=document.createElement("span");__global_slider.addEventListener("input",(function(e){__create_func()})),_in.innerText="(whole range)",_lbl.innerText="Range iterator "+r.var+" over ["+__main(r.val.start)+", "+__main(r.val.end)+"] in steps of "+__main(r.val.step),_lbl.appendChild(_in),input_cont.appendChild(_lbl),__tbl_container.appendChild(input_cont)}(),__create_func=function __create_func(){__tbl_vert.innerHTML="",__tbl_vert.appendChild(__axis_x_info);var __all_fixed={};Object.assign(__all_fixed,__additional_defines);var _iterator11=_createForOfIteratorHelper(__rng_inputs),_step11;try{for(_iterator11.s();!(_step11=_iterator11.n()).done;){var i=_step11.value,rname=i.getAttribute("data-rname"),val=i.value;__all_fixed[rname]=val}}catch(e){_iterator11.e(e)}finally{_iterator11.f()}var __defstring=Object.keys(__all_fixed).map((function(e){return"let "+e+" = "+__all_fixed[e]+";"})).join(""),__ellision_thresh_y=64,__ellision_thresh_x=128,__mark_cells={};(function(){for(var feval=function feval(x){return eval(__defstring+x)},__it=__var_rng.var,__r_s=__main(__var_rng.val.start),__r_e=__main(__var_rng.val.end),__r_step=__main(__var_rng.val.step),_loop=function(e){var t=__access_indices.map((function(e,t){return[e,t]})).sort((function(e,t){return e[1]-t[1]})).map((function(e){return e[0]}));t=t.map((function(t){return feval("let "+__it+" = "+e+";"+t.var)})),null==__mark_cells[t[1]]&&(__mark_cells[t[1]]=[]),__mark_cells[t[1]].push(t[0])},__x=feval(__r_s);__x<=feval(__r_e);__x+=feval(__r_step))_loop(__x)})();for(var __dim_2=0;__dim_2<__mem_dims[0];++__dim_2)if(__mem_dims[0]>__ellision_thresh_y&&__dim_2>__ellision_thresh_y/2&&__dim_2<__mem_dims[0]-__ellision_thresh_y/2){if(__dim_2-1==__ellision_thresh_y/2){var _row=document.createElement("div");_row.classList="flex_row",_row.style="justify-content: flex-start;flex-wrap: nowrap;",_row.innerText="...",__tbl_vert.appendChild(_row)}}else{var __row=document.createElement("div");__row.classList="flex_row",__row.style="justify-content: flex-start;flex-wrap: nowrap;";for(var _i3=0;_i3<__mem_dims[1];++_i3)if(__mem_dims[1]>__ellision_thresh_x&&_i3>__ellision_thresh_x/2&&_i3<__mem_dims[1]-__ellision_thresh_x/2){if(_i3-1==__ellision_thresh_x/2){var _cell=document.createElement("div");_cell.style="line-height: 1px;",_cell.innerText="...",__row.appendChild(_cell)}}else{var __set_marking=!1,_tmp2=__mark_cells[__dim_2];null!=_tmp2&&_tmp2.includes(_i3)&&(__set_marking=!0);var __cell=document.createElement("div"),__colorstr="background: white;";__set_marking&&(__colorstr="background: red;"),__cell.style="min-width: "+__size+"px; min-height: "+__size+"px;border: 1px solid darkgray;"+__colorstr,__row.appendChild(__cell)}__tbl_vert.appendChild(__row)}__tbl_hor.appendChild(__tbl_vert)},__tbl_container.appendChild(__tbl_hor),__create_func(),__tbl_container}},{key:"create_visual_range_representation",value:function create_visual_range_representation(__starts,__ends,__steps,__tiles){var __mayfail=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],__data=arguments.length>5&&void 0!==arguments[5]?arguments[5]:null,__obj_to_arr=function(e){return e instanceof Array?e:[e]};__starts=__obj_to_arr(__starts),__ends=__obj_to_arr(__ends),__steps=__obj_to_arr(__steps),__tiles=__obj_to_arr(__tiles);for(var __symbols={},__e_starts=[],__e_ends=[],__e_steps=[],__e_tiles=[],__e_sizes=[],__r_it=0;__r_it<__starts.length;++__r_it){for(var __start=__starts[__r_it],__end=__ends[__r_it],__step=__steps[__r_it],__tile=__tiles[__r_it],__e_start=null,__e_end=null,_e_step=null,_e_tile=null,_mem_dims=[];;){var __failed=!1,__symbol_setter=Object.entries(__symbols).map((function(e){return"let "+e[0]+"="+e[1]+";"})).join("");try{var Min=function(){return Math.min.apply(Math,arguments)},int_ceil=function(e,t){return Math.ceil(e/t)};if(__e_start=eval(__symbol_setter+__start),__e_end=eval(__symbol_setter+__end)+1,_e_step=eval(__symbol_setter+__step),_e_tile=eval(__symbol_setter+__tile),null!=__data){var __shapedims=__data.attributes.shape.length;_mem_dims=[];for(var __s=0;__s<__shapedims;++__s)_mem_dims.push(eval(__symbol_setter+__data.attributes.shape[__s]))}}catch(e){if(!(e instanceof ReferenceError))throw e;if(__mayfail){__failed=!0;break}var __sym_name=e.message.split(" ")[0],__ret=window.prompt("Enter a value for Symbol `"+__sym_name+"`");if(null==__ret)throw e;__symbols[__sym_name]=parseInt(__ret),__failed=!0}if(!__failed)break}var _e_size=__e_end-__e_start;__e_starts.push(__e_start),__e_ends.push(__e_end),__e_steps.push(_e_step),__e_tiles.push(_e_tile),__e_sizes.push(_e_size)}var __tbl_container=document.createElement("div"),__tbl_hor=document.createElement("div");__tbl_hor.classList="flex_row",__tbl_hor.style="flex-wrap: nowrap;";var __axis_x_info=document.createElement("div");__axis_x_info.classList="flex_row",__axis_x_info.style="justify-content: space-between;";for(var __i=0;__i<2;++__i){var __tmp=document.createElement("div");try{__tmp.innerText=0==__i?"0":__mem_dims[1]}catch(e){__tmp.innerText=0==__i?"Start":"End"}__axis_x_info.appendChild(__tmp)}var __axis_y_info=document.createElement("div");__axis_y_info.classList="flex_column",__axis_y_info.style="justify-content: space-between;";for(var _i4=0;_i4<2;++_i4){var _tmp3=document.createElement("div");try{_tmp3.innerText=0==_i4?"0":__mem_dims[0]}catch(e){_tmp3.innerText=0==_i4?"Start":"End"}__axis_y_info.appendChild(_tmp3)}null!=__data&&(__tbl_container.appendChild(__axis_x_info),__tbl_hor.appendChild(__axis_y_info));var __row=document.createElement("div");__row.classList="flex_row",__row.style="justify-content: flex-start;flex-wrap: nowrap;";var __size=10,__e_size=__e_sizes[0],__e_step=__e_steps[0],__e_tile=__e_tiles[0];__e_size>512&&(__size=5);for(var _i5=0;_i5<__e_size;++_i5){var __cell=document.createElement("div"),__colorstr="background: white;";Math.floor(_i5/__e_step)%2==0?_i5%__e_step<__e_tile&&(__colorstr="background: SpringGreen;"):_i5%__e_step<__e_tile&&(__colorstr="background: Darkorange;"),__cell.style="min-width: "+__size+"px; min-height: "+__size+"px;border: 1px solid black;"+__colorstr,__row.appendChild(__cell)}return __tbl_hor.appendChild(__row),__tbl_container.appendChild(__tbl_hor),__tbl_container}},{key:"getMatchingInput",value:function getMatchingInput(transthis,x,node){var _this5=this,create_language_input=function(e,t){null==e&&(e=x.value),null==t&&(t=function(e){transthis.propertyChanged(node,x.name,e.value)});var n=_this5.getEnum("Language"),r=e;return n.includes(r)||(r="Language."+r),_main__WEBPACK_IMPORTED_MODULE_1__.qu.createSelectInput("prop_"+x.name,t,n,r)},__resolve_initials=function __resolve_initials(__initials,__syms){delete window.i,__initials=__initials.filter((function(e){return isNaN(e.var)}));for(var __merger=function(e,t){var n,r=e.map((function(e){return e})),i=_createForOfIteratorHelper(t);try{var a=function(){var e=n.value;if(r.filter((function(t){return t==e||null!=t.var&&JSON.stringify(t.var)==JSON.stringify(e.var)})).length>0)return"continue";r.push(e)};for(i.s();!(n=i.n()).done;)a()}catch(e){i.e(e)}finally{i.f()}return r},__needed_defs=[],__placeholder_defines=[],__user_input_needed=[];;){var __retry=!1,__placeholder_def_str=__placeholder_defines.map((function(e){return"let "+e+" = 1"})).join(";");__placeholder_def_str+=";let Min = (...e) => Math.min(...e); let int_ceil = (a, b) => Math.ceil(a/b);";var _iterator13=_createForOfIteratorHelper(__initials),_step13;try{for(_iterator13.s();!(_step13=_iterator13.n()).done;){var __i=_step13.value;try{var __test=eval(__placeholder_def_str+__i.var)}catch(e){if(!(e instanceof ReferenceError))throw e;var _ret2=function(){var t=e.message.split(" ")[0],n=__syms.filter((function(e){return e.var==t&&null!=e.val}));if(n.length>0){__placeholder_defines.push(t),__needed_defs=__merger(__needed_defs,[n[0]]);for(var r=0;r<__syms.length&&JSON.stringify(__syms[r])!=JSON.stringify(n[0]);++r);var i=function(e){return null!=e.main?e.main:e};if(null!=n[0].val&&null!=n[0].val.start){var a=__resolve_initials([{var:i(n[0].val.start),val:null}],__syms.slice(r));__needed_defs=__merger(__needed_defs,a[1]),__user_input_needed=__merger(__user_input_needed,a[2]),a=__resolve_initials([{var:i(n[0].val.end),val:null}],__syms.slice(r)),__needed_defs=__merger(__needed_defs,a[1]),__user_input_needed=__merger(__user_input_needed,a[2]),a=__resolve_initials([{var:i(n[0].val.step),val:null}],__syms.slice(r)),__needed_defs=__merger(__needed_defs,a[1]),__user_input_needed=__merger(__user_input_needed,a[2]),a=__resolve_initials([{var:i(n[0].val.tile),val:null}],__syms.slice(r)),__needed_defs=__merger(__needed_defs,a[1]),__user_input_needed=__merger(__user_input_needed,a[2])}else{var o=__resolve_initials([{var:i(n[0].val),val:null}],__syms.slice(r));console.log("rec",o),__needed_defs=__merger(__needed_defs,o[1]),__user_input_needed=__merger(__user_input_needed,o[2])}}else __user_input_needed.push(t),__placeholder_defines.push(t);return __retry=!0,"break"}();if("break"===_ret2)break}if(__retry)break}}catch(e){_iterator13.e(e)}finally{_iterator13.f()}if(!__retry)break}return[__initials,__needed_defs,__user_input_needed]},create_index_subset_input=function(e,t,n){var r=document.createElement("div");if(void 0===n.data)return $(r);var i,a="[",o=_createForOfIteratorHelper(t.value.indices);try{for(o.s();!(i=o.n()).done;)a+=i.value+", "}catch(e){o.e(e)}finally{o.f()}a=a.slice(0,-2)+"]",r.innerText=a+" ";var s=document.createElement("button");return s.style.float="right",s.innerText="Edit",r.appendChild(s),s.addEventListener("click",(function(r){_this5.project().request(["sdfg_object"],(function(r){for(var i=r.sdfg_object,a=[],o=0,s=Object.values(i);o0&&(m=v[0]);var b=document.createElement("div"),x=document.createElement("div"),w=document.createElement("input");w.type="text",w.value=JSON.stringify(t.value);var E=_this5.create_visual_access_representation(h,m),N=document.createElement("button");N.innerText="Apply changes",N.addEventListener("click",(function(r){e.propertyChanged(n,t.name,JSON.parse(w.value)),w2popup.close()})),x.appendChild(w),x.appendChild(E),b.appendChild(x),w2popup.open({title:"Data access / Indices property",body:b,buttons:N,width:1280,height:800})}),{})})),$(r)},create_range_input=function(e,t,n){var r=null;if(null!=n.data){var i=n.data().props.filter((function(e){return"data"==e.name}));i.length>0&&(r=i[0])}var a,o=document.createElement("div"),s=t.value.ranges,u=document.createElement("div"),l="[",c=_createForOfIteratorHelper(s);try{for(c.s();!(a=c.n()).done;){var f=a.value;l+=f.start+".."+f.end,1!=f.step?(l+=":"+f.step,1!=f.tile&&(l+=":"+f.tile)):1!=f.tile&&(l+="::"+f.tile),l+=", "}}catch(e){c.e(e)}finally{c.f()}l=l.slice(0,-2)+"]",o.innerText=l+" ";var d=document.createElement("button");d.style.float="right",d.innerText="Edit",o.appendChild(d);var p,h=document.createElement("div"),m=[],v=_createForOfIteratorHelper(s);try{for(v.s();!(p=v.n()).done;){var y=p.value,g=document.createElement("div");g.classList="flex_row",g.style="flex-wrap: nowrap;","string"!=typeof y.start&&(y.start=y.start.main),"string"!=typeof y.end&&(y.end=y.end.main),"string"!=typeof y.step&&(y.step=y.step.main),"string"!=typeof y.tile&&(y.tile=y.tile.main),function(){for(var e=[],t=0;t<4;++t){var n=document.createElement("label"),i=document.createElement("input");switch(i.style="width:100px;",i.type="text",t){case 0:i.value=y.start,n.textContent="Start";break;case 1:i.value=y.end,n.textContent="End";break;case 2:i.value=y.step,n.textContent="Step";break;case 3:i.value=y.tile,n.textContent="Tile"}e.push(i),n.appendChild(i),g.appendChild(n)}m.push(e);var a=document.createElement("div");a.style="min-width: 200px; min-height: 1rem;flex-grow: 1;display: flex;",a.addEventListener("click",(function(){if(null!=r)_this5.project().request(["sdfg_object"],(function(t){t="object"===(0,_babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_9__.Z)(t.sdfg_object)?t.sdfg_object:JSON.parse(t.sdfg_object),console.log("got sdfg object",t);for(var n=[],i=0,o=Object.values(t);i0&&(r=n[0]);var u=_this5.create_visual_range_representation.apply(_this5,(0,_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_8__.Z)(e.map((function(e){return e.value}))).concat([!1,r]));a.innerHTML="",a.appendChild(u)}),{});else{var t=_this5.create_visual_range_representation.apply(_this5,(0,_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_8__.Z)(e.map((function(e){return e.value}))).concat([!1,r]));a.innerHTML="",a.appendChild(t)}})),a.innerText="Click here for visual representation",g.appendChild(a)}(),h.appendChild(g)}}catch(e){v.e(e)}finally{v.f()}u.appendChild(h);var _=document.createElement("button");return _.innerText="Apply",_.addEventListener("click",(function(){var r,i={ranges:[],type:t.value.type},a=_createForOfIteratorHelper(m);try{for(a.s();!(r=a.n()).done;){var o=r.value;i.ranges.push({start:o[0].value,end:o[1].value,step:o[2].value,tile:o[3].value})}}catch(e){a.e(e)}finally{a.f()}e.propertyChanged(n,t.name,i),w2popup.close()})),d.onclick=function(){w2popup.open({title:"Range property",body:u,buttons:_,width:1280,height:800})},$(o)},elem=document.createElement("div");if("bool"==x.metatype){var val=x.value;"string"==typeof val&&(val="True"==val),elem=_main__WEBPACK_IMPORTED_MODULE_1__.qu.createToggleSwitch("prop_"+x.name,(function(e){transthis.propertyChanged(node,x.name,e.checked)}),val)}else if("str"==x.metatype||"float"==x.metatype||"LambdaProperty"==x.metatype||"Property"==x.metatype)elem=_main__WEBPACK_IMPORTED_MODULE_1__.qu.createTextInput("prop_"+x.name,(function(e){transthis.propertyChanged(node,x.name,e.value)}),x.value);else if("tuple"==x.metatype||"dict"==x.metatype||"list"==x.metatype||"set"==x.metatype)elem=_main__WEBPACK_IMPORTED_MODULE_1__.qu.createTextInput("prop_"+x.name,(function(e){var t=e.value;try{t=JSON.parse(e.value)}catch(n){t=e.value}transthis.propertyChanged(node,x.name,t)}),JSON.stringify(x.value));else if("Range"==x.metatype)elem=create_range_input(transthis,x,node);else if("DataProperty"==x.metatype){elem=document.createElement("span"),elem.innerText=x.value,elem=$(elem);var cb=function(e){var t=node.sdfg.attributes._arrays,n=Object.keys(t),r=_main__WEBPACK_IMPORTED_MODULE_1__.qu.createComboboxInput("prop_"+x.name,(function(e){transthis.propertyChanged(node,x.name,e.value)}),n,x.value);elem[0].parentNode.replaceChild(r[0],elem[0])};this.project().request(["sdfg_object"],cb,{on_timeout:cb,timeout:300})}else if("LibraryImplementationProperty"==x.metatype)elem=document.createElement("span"),elem.innerText=x.value,elem=$(elem),$.getJSON("/dace/api/v1.0/getLibImpl/"+node.element.classpath,(function(e){var t=function(t){var n=_main__WEBPACK_IMPORTED_MODULE_1__.qu.createComboboxInput("prop_"+x.name,(function(e){transthis.propertyChanged(node,x.name,e.value)}),e,x.value),r=_main__WEBPACK_IMPORTED_MODULE_1__.qu.createButton("prop_"+x.name+"_expand",(function(e){(0,_main__WEBPACK_IMPORTED_MODULE_1__.LS)("/dace/api/v1.0/expand/",{sdfg:node.sdfg,nodeid:[node.sdfg.sdfg_list_id,node.element.parent_id,node.element.id]},(function(e){if(4===e.readyState&&200===e.status){var t=(0,_utils_sdfg_json_serializer__WEBPACK_IMPORTED_MODULE_10__.a)(e.response);void 0!==t.error&&_this5.handleErrors(_this5,t),_this5.project().request(["append-history"],(function(e){}),{params:{new_sdfg:t.sdfg,item_name:"Expand "+node.element.label}})}}))}),"Expand");elem[0].parentNode.replaceChild(n[0],elem[0]),n[0].parentNode.appendChild(r[0])};_this5.project().request(["sdfg_object"],t,{on_timeout:t,timeout:300})}));else{if("CodeProperty"==x.metatype||"CodeBlock"==x.metatype){var codeelem=null,langelem=null,onchange=function(e){transthis.propertyChanged(node,x.name,{string_data:codeelem[0].value,language:langelem[0].value})};return null==x.value&&(x.value={},x.value.language="NoCode",x.value.string_data=""),codeelem=_main__WEBPACK_IMPORTED_MODULE_1__.qu.createLongTextInput("prop_"+x.name,onchange,x.value.string_data),elem.appendChild(codeelem[0]),langelem=create_language_input(x.value.language,onchange),elem.appendChild(langelem[0]),elem.classList.add("flex_column"),elem}if("int"==x.metatype)elem=_main__WEBPACK_IMPORTED_MODULE_1__.qu.createIntInput("prop_"+x.name,(function(e){transthis.propertyChanged(node,x.name,parseInt(e.value))}),x.value);else if("ScheduleType"==x.metatype){var schedule_types=this.getEnum("ScheduleType"),qualified=x.value;schedule_types.includes(qualified)||(qualified="ScheduleType."+qualified),elem=_main__WEBPACK_IMPORTED_MODULE_1__.qu.createSelectInput("prop_"+x.name,(function(e){transthis.propertyChanged(node,x.name,e.value)}),schedule_types,qualified)}else if("AllocationLifetime"==x.metatype){var types=this.getEnum("AllocationLifetime"),_qualified=x.value;types.includes(_qualified)||(_qualified="AllocationLifetime."+_qualified),elem=_main__WEBPACK_IMPORTED_MODULE_1__.qu.createSelectInput("prop_"+x.name,(function(e){transthis.propertyChanged(node,x.name,e.value)}),types,_qualified)}else if("AccessType"==x.metatype){var access_types=this.getEnum("AccessType"),_qualified2=x.value;access_types.includes(_qualified2)||(_qualified2="AccessType."+_qualified2),elem=_main__WEBPACK_IMPORTED_MODULE_1__.qu.createSelectInput("prop_"+x.name,(function(e){transthis.propertyChanged(node,x.name,e.value)}),access_types,_qualified2)}else if("Language"==x.metatype)elem=create_language_input();else{if("None"==x.metatype)return console.log("Property with type 'None' ignored",x),elem;if("object"==x.metatype&&"identity"==x.name)return elem;if("OrderedDiGraph"==x.metatype)elem=_main__WEBPACK_IMPORTED_MODULE_1__.qu.createTextInput("prop_"+x.name,(function(e){transthis.propertyChanged(node,x.name,e.value)}),x.value);else if("DebugInfo"==x.metatype){var info_obj=x.value;"string"==typeof info_obj&&(info_obj=JSON.parse(info_obj)),elem=_main__WEBPACK_IMPORTED_MODULE_1__.qu.createCodeReference("prop_"+x.name,(function(e){transthis.project().request(["highlight-code"],(function(e){}),{params:info_obj})}),info_obj)}else if("ListProperty"==x.metatype)elem=_main__WEBPACK_IMPORTED_MODULE_1__.qu.createTextInput("prop_"+x.name,(function(e){var t=e.value;try{t=JSON.parse(e.value)}catch(n){t=e.value}transthis.propertyChanged(node,x.name,t)}),JSON.stringify(x.value));else if("StorageType"==x.metatype){var storage_types=this.getEnum("StorageType"),_qualified3=x.value;storage_types.includes(_qualified3)||(_qualified3="StorageType."+_qualified3),elem=_main__WEBPACK_IMPORTED_MODULE_1__.qu.createSelectInput("prop_"+x.name,(function(e){transthis.propertyChanged(node,x.name,e.value)}),storage_types,_qualified3)}else if("InstrumentationType"==x.metatype){var _storage_types=this.getEnum("InstrumentationType"),_qualified4=x.value;_storage_types.includes(_qualified4)||(_qualified4="InstrumentationType."+_qualified4),elem=_main__WEBPACK_IMPORTED_MODULE_1__.qu.createSelectInput("prop_"+x.name,(function(e){transthis.propertyChanged(node,x.name,e.value)}),_storage_types,_qualified4)}else if("typeclass"==x.metatype)elem=_main__WEBPACK_IMPORTED_MODULE_1__.qu.createTextInput("prop_"+x.name,(function(e){transthis.propertyChanged(node,x.name,e.value)}),x.value);else if("hosttype"==x.metatype)elem=_main__WEBPACK_IMPORTED_MODULE_1__.qu.createHostInput("prop_"+x.name,(function(e){transthis.propertyChanged(node,x.name,e.value)}),DIODE.getHostList(),x.value);else if("selectinput"==x.metatype)elem=_main__WEBPACK_IMPORTED_MODULE_1__.qu.createSelectInput("prop_"+x.name,(function(e){transthis.propertyChanged(node,x.name,e.value)}),x.options,x.value);else if("combobox"==x.metatype)elem=_main__WEBPACK_IMPORTED_MODULE_1__.qu.createComboboxInput("prop_"+x.name,(function(e){transthis.propertyChanged(node,x.name,e.value)}),x.options,x.value);else{if("font"==x.metatype)return console.warn("Ignoring property type ",x.metatype),elem;if("SDFGReferenceProperty"==x.metatype)return elem;if("SubsetProperty"==x.metatype)elem=null==x.value?_main__WEBPACK_IMPORTED_MODULE_1__.qu.createTextInput("prop_"+x.name,(function(e){transthis.propertyChanged(node,x.name,JSON.parse(e.value))}),JSON.stringify(x.value)):"subsets.Indices"==x.value.type||"Indices"==x.value.type?create_index_subset_input(transthis,x,node):create_range_input(transthis,x,node);else{if("SymbolicProperty"!=x.metatype)return console.log("Unimplemented property type: ",x),elem;elem=_main__WEBPACK_IMPORTED_MODULE_1__.qu.createTextInput("prop_"+x.name,(function(e){transthis.propertyChanged(node,x.name,JSON.parse(e.value))}),JSON.stringify(x.value))}}}}return elem[0]}},{key:"renderPropertiesInWindow",value:function(e,t,n,r){var i=this,a={transthis:"string"==typeof e?e:e.created,node:t,params:n,options:r};this.replaceOrCreate(["display-properties"],"PropWinComponent",a,(function(){var e={type:"component",componentName:"PropWinComponent",componentState:{created:i.getPseudorandom(),params:a}};i.addContentItem(e)}))}},{key:"showStaleDataButton",value:function(){this.project().request(["show_stale_data_button"],(function(e){}),{})}},{key:"removeStaleDataButton",value:function(){this.project().request(["remove_stale_data_button"],(function(e){}),{})}},{key:"refreshSDFG",value:function(){this.gatherProjectElementsAndCompile(diode,{},{sdfg_over_code:!0})}},{key:"__impl_showStaleDataButton",value:function(){var e=this;if(DIODE.recompileOnPropertyChange())this.gatherProjectElementsAndCompile(this,{},{sdfg_over_code:!0});else if(null==this._stale_data_button){var t=document.createElement("div");t.classList="stale_data_button",t.innerHTML="Stale project data. Click here or press Alt-R to synchronize",t.addEventListener("click",(function(t){e.gatherProjectElementsAndCompile(diode,{},{sdfg_over_code:!0})})),document.body.appendChild(t),this._stale_data_button=t}}},{key:"__impl_removeStaleDataButton",value:function(){null!=this._stale_data_button&&(this._stale_data_button.parentNode.removeChild(this._stale_data_button),this._stale_data_button=null)}},{key:"showIndeterminateLoading",value:function(){this.project().request(["show_loading"],(function(e){}),{})}},{key:"hideIndeterminateLoading",value:function(){this.project().request(["hide_loading"],(function(e){}),{})}},{key:"__impl_showIndeterminateLoading",value:function(){$("#loading_indicator").show()}},{key:"__impl_hideIndeterminateLoading",value:function(){$("#loading_indicator").hide()}},{key:"groupSDFGs",value:function(){this.generic_group((function(e){return"component"==e.config.type&&"SDFGComponent"==e.componentName}))}},{key:"groupCodeOuts",value:function(){this.generic_group((function(e){return"component"==e.config.type&&"CodeOutComponent"==e.componentName}))}},{key:"groupOptGraph",value:function(){this.generic_group((function(e){return"component"==e.config.type&&"OptGraphComponent"==e.componentName}))}},{key:"groupSDFGsAndCodeOutsTogether",value:function(){var e,t=this,n=this.goldenlayout.root.getItemsByFilter((function(e){return"component"==e.config.type&&"SDFGComponent"==e.componentName})),r=[],i=_createForOfIteratorHelper(n);try{for(i.s();!(e=i.n()).done;){var a=e.value;r.push(a.config.componentState.sdfg_name)}}catch(e){i.e(e)}finally{i.f()}for(var o=function(){var e=u[s];t.generic_group((function(t){return"component"==t.config.type&&("SDFGComponent"==t.componentName||"CodeOutComponent"==t.componentName)&&t.config.componentState.sdfg_name==e}))},s=0,u=r;s2&&void 0!==arguments[2])||arguments[2],r=arguments.length>3&&void 0!==arguments[3]&&arguments[3],i=(0,_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_8__.Z)(e),a={alt:n,ctrl:r,func:t,state:0,expect:i.slice(1)};void 0===this._shortcut_functions[i[0]]?this._shortcut_functions[i[0]]=[a]:this._shortcut_functions[i[0]].push(a)}},{key:"onKeyUp",value:function(e){if(0==e.altKey&&"Alt"==e.key)for(var t=0,n=Object.values(this._shortcut_functions);t0&&a.expect[a.state-1]==e.key&&(a.state+=1,a.state>a.expect.length))return a.func(),e.stopPropagation(),e.preventDefault(),void this.onKeyUp({altKey:!1,key:"Alt"})}else a.state=0}}catch(e){i.e(e)}finally{i.f()}}var o=this._shortcut_functions[e.key];if(void 0!==o){var s,u=0,l=_createForOfIteratorHelper(o);try{for(l.s();!(s=l.n()).done;){var c=s.value;if(c.alt==e.altKey&&c.ctrl==e.ctrlKey){if(c.expect.length>0){c.state+=1,console.log("dict value: ",this._shortcut_functions[e.key][u]),++u;continue}c.func(),e.stopPropagation(),e.preventDefault(),this.onKeyUp({altKey:!1,key:"Alt"})}++u}}catch(e){l.e(e)}finally{l.f()}}}},{key:"createNewProject",value:function(){this._current_project=new _diode_project__WEBPACK_IMPORTED_MODULE_11__.T(this),this._current_project.clearTransformationHistory(),sessionStorage.clear(),window.sessionStorage.setItem("diode_project",this._current_project._project_id),this.setupEvents()}},{key:"getProject",value:function(){var e=window.sessionStorage.getItem("diode_project");this._current_project=new _diode_project__WEBPACK_IMPORTED_MODULE_11__.T(this,e),null!=e&&null!=e||(window.sessionStorage.setItem("diode_project",this.getCurrentProject()._project_id),this.setupEvents())}},{key:"project",value:function(){return this.getCurrentProject()}},{key:"getCurrentProject",value:function(){return this._current_project}},{key:"setLayout",value:function(e){this.goldenlayout=e}},{key:"settings",value:function(){return this._settings}},{key:"getPseudorandom",value:function(){var e=(new Date).getTime().toString()+Math.random().toFixed(10).toString()+this._creation_counter.toString();return++this._creation_counter,console.assert(void 0!==e,"Millis well-defined"),e}},{key:"multiple_SDFGs_available",value:function(e){for(var t="string"==typeof e?(0,_utils_sdfg_json_serializer__WEBPACK_IMPORTED_MODULE_10__.a)(e):e,n=0,r=Object.keys(t.compounds);n1&&void 0!==arguments[1]?arguments[1]:"sdfg",r=function(){return t.getPseudorandom()};e.sdfg_name=n;var i=function(){var i={title:n,type:"component",componentName:"SDFGComponent",componentState:{created:r(),sdfg_data:e,sdfg_name:n}};t.addContentItem(i)};this.replaceOrCreate(["new-sdfg"],"SDFGComponent",JSON.stringify(e),i);var a=function(){var i={title:"Generated Code",type:"component",componentName:"CodeOutComponent",componentState:{created:r(),code:e,sdfg_name:n}};t.addContentItem(i)};null!=e.generated_code&&(console.log("requesting using ID",this.project()),this.replaceOrCreate(["new-codeout"],"CodeOutComponent",e,a))}},{key:"Error_available",value:function(e){var t=this;this.replaceOrCreate(["new-error"],"ErrorComponent",e,(function(){var n={title:"Error",type:"component",componentName:"ErrorComponent",componentState:{error:e}};t.addContentItem(n)}))}},{key:"OptGraph_available",value:function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";"string"!=typeof e&&(e=JSON.stringify(e));var r=this.getPseudorandom(),i=function(){var i={type:"column",content:[{title:""==n?"Transformations":"Transformations for `"+n+"`",type:"component",componentName:"AvailableTransformationsComponent",componentState:{created:r,for_sdfg:n,optgraph_data:e}}]};t.addContentItem(i)};this.replaceOrCreate(["new-optgraph-"+n],"AvailableTransformationsComponent",e,i);var a=function(){var e={type:"column",content:[{title:"History",type:"component",componentName:"TransformationHistoryComponent",componentState:{created:r,for_sdfg:n}}]};t.addContentItem(e)};this.replaceOrCreate(["new-history-"+n],"TransformationHistoryComponent",e,a)}},{key:"OptGraphs_available",value:function(e){var t=e;"string"==typeof t&&(t=JSON.parse(e));for(var n=0,r=Object.keys(t);n1&&void 0!==arguments[1]?arguments[1]:{},r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:void 0,a=arguments.length>4&&void 0!==arguments[4]?arguments[4]:void 0,o=n.code,s=n.sdfg_props,u=n.optpath,l=[];void 0===o&&(r.sdfg_over_code&&l.push("sdfg_object"),l.push("input_code")),void 0===u&&l.push("optpath");var c=function(n){if(null!=o&&(n.input_code=o),null!=s&&(n.sdfg_props=s),null!=u&&(n.optpath=u),null!=r.collect_cb&&r.collect_cb(n),!0!==r.dry_run){var l=null!=n.sdfg_object,c=n.input_code;if(!l&&"{"==c[0]){var f=(0,_utils_sdfg_json_serializer__WEBPACK_IMPORTED_MODULE_10__.a)(c);n.sdfg_object={},n.sdfg_object[f.attributes.name]=c,l=!0}if(l&&"string"==typeof(c=n.sdfg_object)&&(c=(0,_utils_sdfg_json_serializer__WEBPACK_IMPORTED_MODULE_10__.a)(c)),e.project().request(["clear-errors"],(function(){})),!0===r.run){var d={};r.perfmodes&&(d.perfmodes=r.perfmodes),d.repetitions=5,d.code_is_sdfg=l,d.runnercode=n.input_code,t.compile_and_run(e,r.term_id,c,n.optpath,n.sdfg_props,d,i,a)}else{var p=function(e){t.replaceOrCreate(["extend-optgraph"],"AvailableTransformationsComponent",e,(function(n){t.OptGraphs_available(e)}))};!0===r.no_optgraph&&(p=void 0),t.compile(e,c,n.optpath,n.sdfg_props,{optpath_cb:p,code_is_sdfg:l},i,a)}}};e.project().request(l,c,{timeout:500,on_timeout:c})}},{key:"compile",value:function(e,t){var n=this,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0,i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:void 0,a=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{},o=arguments.length>5&&void 0!==arguments[5]?arguments[5]:void 0,s=arguments.length>6&&void 0!==arguments[6]?arguments[6]:void 0,u={};!0===a.code_is_sdfg?(u={sdfg:(0,_utils_sdfg_json_serializer__WEBPACK_IMPORTED_MODULE_10__.n)(t)}).code=a.runnercode:u={code:t},null!=r&&(u.optpath=r),null!=i&&(u.sdfg_props=i),u.client_id=this.getClientID();var l="1.0";(0,_main__WEBPACK_IMPORTED_MODULE_1__.LS)("/dace/api/v"+l+"/compile/dace",u,(function(t){if(4===t.readyState&&200===t.status){var r=(0,_utils_sdfg_json_serializer__WEBPACK_IMPORTED_MODULE_10__.a)(t.response);if(null!=r.error)n.handleErrors(e,r),void 0!==s&&s();else{n.removeStaleDataButton();var i=(0,_utils_sdfg_json_serializer__WEBPACK_IMPORTED_MODULE_10__.a)(t.response);n.multiple_SDFGs_available(t.response),void 0===a.optpath_cb?n.OptGraphs_available(i.compounds):a.optpath_cb(i.compounds),void 0!==o&&o()}}}))}},{key:"handleErrors",value:function(e,t){var n=t.error;if("traceback"in t&&(n+="\n\n"+t.traceback),this.Error_available(n),"string"!=typeof n){var r,i=_createForOfIteratorHelper(n);try{for(i.s();!(r=i.n()).done;){var a=r.value;"SyntaxError"===a.type?e.project().request(["new_error"],(function(e){}),{params:a,timeout:100}):console.warn("Error: ",a)}}catch(e){i.e(e)}finally{i.f()}}else console.warn("Error: ",n)}},{key:"ui_compile_and_run",value:function(e){var t=this.getPseudorandom(),n="terminal_"+t,r={title:"Terminal",type:"component",componentName:"TerminalComponent",componentState:{created:t}};this.addContentItem(r),this.gatherProjectElementsAndCompile(this,{},{run:!0,term_id:n,sdfg_over_code:!0})}},{key:"load_perfdata",value:function(){var e=this;this.showIndeterminateLoading();var t={client_id:this.getClientID()};(0,_main__WEBPACK_IMPORTED_MODULE_1__.LS)("/dace/api/v1.0/perfdata/get/",t,(function(t){if(4===t.readyState&&200===t.status){var n=JSON.parse(t.response);console.log("Got result",n);var r=function(){e.hideIndeterminateLoading()};e.project().request(["draw-perfinfo"],(function(e){r()}),{params:n,on_timeout:r})}}))}},{key:"show_exec_times",value:function(){this.addContentItem({type:"component",componentName:"PerfTimesComponent",componentState:{},title:"Execution times"})}},{key:"show_run_options",value:function(e){this.addContentItem({type:"component",componentName:"RunConfigComponent",title:"Run Configuration"})}},{key:"show_inst_options",value:function(e){this.addContentItem({type:"component",componentName:"InstControlComponent",title:"Instrumentation control"})}},{key:"show_roofline",value:function(e){this.addContentItem({type:"component",componentName:"RooflineComponent",title:"Roofline"})}},{key:"compile_and_run",value:function(e,t,n){var r=this,i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:void 0,a=arguments.length>4&&void 0!==arguments[4]?arguments[4]:void 0,o=arguments.length>5&&void 0!==arguments[5]?arguments[5]:{},s=arguments.length>6&&void 0!==arguments[6]?arguments[6]:void 0,u=arguments.length>7&&void 0!==arguments[7]?arguments[7]:void 0,l={};!0===o.code_is_sdfg?(l={sdfg:(0,_utils_sdfg_json_serializer__WEBPACK_IMPORTED_MODULE_10__.n)(n)}).code=o.runnercode:l={code:n},null!=i&&(l.optpath=i),null!=a&&(l.sdfg_props=a),this.applyCurrentRunConfig().then((function(n){var i=r.getClientID();if(l.client_id=i,"off"==n.Instrumentation)l.perfmodes=void 0;else if("minimal"==n.Instrumentation)l.perfmodes=["default"];else{if("full"!=n.Instrumentation)return alert("Error! Check console"),console.error("Unknown instrumentation mode",n.Instrumentation),void(void 0!==u&&u());l.perfmodes=["default","vectorize","memop","cacheop"]}var a=n["Number of threads"];"string"==typeof a&&(a=JSON.parse(a)),l.corecounts=a.map((function(e){return parseInt(e)})),l.repetitions=5,(0,_main__WEBPACK_IMPORTED_MODULE_1__.LS)("/dace/api/v1.0/run/",l,(function(n){if(4===n.readyState&&200===n.status){var a=n.response;"string"==typeof a&&(a=JSON.parse(a)),a.error?(r.display_current_execution_status(e,t,i),void 0!==u&&u()):void 0!==s&&s()}}))}))}},{key:"display_current_execution_status",value:function(e,t,n){var r=this,i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:void 0,a={};a.client_id=n,a.perf_mode=i;var o="1.0";(0,_main__WEBPACK_IMPORTED_MODULE_1__.LS)("/dace/api/v"+o+"/run/status/",a,(function(e){if(4===e.readyState&&200===e.status){e.response.endsWith(" 0")?r.toast("Execution ended","Run ended successfully","info"):r.toast("Execution ended","Run failed","error");var n=e.response.substr(e.seenBytes);r.goldenlayout.eventHub.emit(t,n),e.seenBytes=e.responseText.length}if(3===e.readyState){var i=e.response.substr(e.seenBytes);r.goldenlayout.eventHub.emit(t,i),e.seenBytes=e.responseText.length}}))}},{key:"toast",value:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"info",r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:1e4,i=arguments.length>4&&void 0!==arguments[4]?arguments[4]:void 0,a=arguments.length>5&&void 0!==arguments[5]?arguments[5]:void 0,o=VanillaToasts.create({title:e,text:t,type:n,icon:i,timeout:r,callback:a});VanillaToasts.setTimeout(o.id,1.1*r)}},{key:"optimize",value:function(e,t){void 0===t&&(t=[]);var n=this;e.project().request(["input_code","sdfg_object"],(function(r){var i=!0;null!=r.sdfg_object?(i=!1,r=r.sdfg_object,r=JSON.parse(r)):r=r.input_code,function(r,i,a){var o;o=r;n.compile(e,o,t,undefined,{optpath_cb:function(e){n.replaceOrCreate(["extend-optgraph"],"AvailableTransformationsComponent",e,(function(t){n.OptGraphs_available(e)}))},code_is_sdfg:!a})}(r,0,i)}))}},{key:"replaceOrCreate",value:function(e,t,n,r){var i=null;this.goldenlayout.root&&(i=this.goldenlayout.root.getItemsByFilter((function(e){return"component"==e.config.type&&e.componentName==t}))),i&&i.length>0?this.getCurrentProject().request(e,(function(e,t){}),{timeout:null,params:n,timeout_id:null}):r(n)}},{key:"debounce",value:function(e,t,n){if(void 0===this._debouncing)return t;var r=this;return function(){void 0!==r._debouncing[e]&&clearTimeout(r._debouncing[e]),r._debouncing[e]=setTimeout(t,n)}}}],[{key:"getHostList",value:function(){var e=localStorage.getItem("diode_host_list");return null==e?["localhost"]:JSON.parse(e)}},{key:"setHostList",value:function(e){localStorage.setItem("diode_host_list",JSON.stringify(e))}},{key:"hash",value:function(e){return btoa(crypto.subtle.digest("SHA-256",Uint8Array.from(e)))}},{key:"filterComponentTree",value:function(e){var t,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:function(e){return e},r=[],i=_createForOfIteratorHelper(e.contentItems);try{for(i.s();!(t=i.n()).done;){var a=t.value;r.push.apply(r,(0,_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_8__.Z)(this.filterComponentTree(a,n)))}}catch(e){i.e(e)}finally{i.f()}return r.filter(n)}},{key:"filterComponentTreeByCname",value:function(e,t){return e.getItemsByFilter((function(e){return"component"==e.config.type&&e.componentName==t}))}},{key:"editorTheme",value:function(){var e=localStorage.getItem("diode_ace_editor_theme");return null===e?"github":e}},{key:"themeString",value:function(){return"ace/theme/"+DIODE.editorTheme()}},{key:"loadTheme",value:function(){return $.getScript("external_lib/ace/theme-"+DIODE.editorTheme()+".js")}},{key:"setTheme",value:function(e){localStorage.setItem("diode_ace_editor_theme",e)}},{key:"recompileOnPropertyChange",value:function(){return"true"==localStorage.getItem("diode_recompile_on_prop_change")}},{key:"setRecompileOnPropertyChange",value:function(e){e?localStorage.setItem("diode_recompile_on_prop_change","true"):localStorage.setItem("diode_recompile_on_prop_change","false")}},{key:"setDebugDevMode",value:function(e){e?localStorage.setItem("diode_DebugDevMode","true"):localStorage.setItem("diode_DebugDevMode","false")}},{key:"debugDevMode",value:function(){return"true"===localStorage.getItem("diode_DebugDevMode")}}]),DIODE}()},816:(e,t,n)=>{"use strict";n.d(t,{u:()=>a});var r=n(6610),i=n(5991),a=function(){function e(t){(0,r.Z)(this,e),null===t&&((t={}).style=e.default()),"string"==typeof t&&(t=JSON.parse(t)),this._change_callback=null,this._config=t,this.insertStylesheet(t.style),this._constructor_values={},null!=t.vals&&(this._constructor_values=t.vals)}return(0,i.Z)(e,[{key:"setOnChange",value:function(e){this._change_callback=e}},{key:"setChanged",value:function(){null!=this._change_callback&&this._change_callback(this)}},{key:"apply",value:function(){this.insertStylesheet(this.getCSS())}},{key:"insertStylesheet",value:function(e){var t=document.getElementById("appearance-stylesheet"),n=!0;null!=t&&null!=t||(n=!1,(t=document.createElement("style")).id="appearance-stylesheet",t.type="text/css"),t.innerText=e,n||document.head.appendChild(t),this.setChanged()}},{key:"setValue",value:function(e,t){return this._constructor_values[e]=t,this}},{key:"setFont",value:function(t){var n=e.font(t);return this._constructor_values["font-family"]=n,this}},{key:"toString",value:function(){return JSON.stringify(this._config)}},{key:"getCSS",value:function(){for(var e="",t=0,n=Object.entries(this._constructor_values);t{"use strict";n.d(t,{T:()=>u});var r=n(7329),i=n(6610),a=n(5991);function o(e,t){var n;if("undefined"==typeof Symbol||null==e[Symbol.iterator]){if(Array.isArray(e)||(n=function(e,t){if(e){if("string"==typeof e)return s(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?s(e,t):void 0}}(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var r=0,i=function(){};return{s:i,n:function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,o=!0,u=!1;return{s:function(){n=e[Symbol.iterator]()},n:function(){var e=n.next();return o=e.done,e},e:function(e){u=!0,a=e},f:function(){try{o||null==n.return||n.return()}finally{if(u)throw a}}}}function s(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n1&&void 0!==arguments[1]?arguments[1]:void 0;(0,i.Z)(this,e),this._diode=t,this._project_id=null==n?t.getPseudorandom():n,this.setup(),this._callback=null,this._rcvbuf={},this._waiter={},this._listeners={},this._closed_windows=[],this._blob=null}return(0,a.Z)(e,[{key:"clearTransformationHistory",value:function(){sessionStorage.removeItem("transformation_snapshots")}},{key:"getTransformationSnapshots",value:function(){var e=sessionStorage.getItem("transformation_snapshots");return null==e?[]:JSON.parse(e)}},{key:"getTransformationHistory",value:function(){return this.getTransformationSnapshots().map((function(e){return e[0]}))}},{key:"discardTransformationsAfter",value:function(e){var t=this.getTransformationSnapshots();sessionStorage.setItem("transformation_snapshots",JSON.stringify(t.slice(0,e))),this.request(["update-tfh"],(function(e){return e}),{})}},{key:"saveSnapshot",value:function(e,t){var n=this.getTransformationSnapshots();n.push([t,e]),sessionStorage.setItem("transformation_snapshots",JSON.stringify(n))}},{key:"reopenClosedWindow",value:function(e){var t=this.getConfigForClosedWindow(e,!0);this._diode.addContentItem(t),this._diode.goldenlayout.eventHub.emit("window-reopened-"+e)}},{key:"getConfigForClosedWindow",value:function(e){var t,n=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],r=this.getClosedWindowsList(),i=[],a=[],s=o(r);try{for(s.s();!(t=s.n()).done;){var u=t.value,l=u[0],c=u[1];c.created===e?(a.push([l,c]),n||i.push([l,c])):i.push([l,c])}}catch(e){s.e(e)}finally{s.f()}this.setClosedWindowsList(i),console.assert(1===a.length,"Expected only 1 match!");var f=a[0],d={type:"component",componentName:f[0],componentState:f[1]};return d}},{key:"setClosedWindowsList",value:function(e){this._closed_windows=e,sessionStorage.setItem(this._project_id+"-closed-window-list",JSON.stringify(this._closed_windows))}},{key:"clearClosedWindowsList",value:function(){this._closed_windows=[],sessionStorage.setItem(this._project_id+"-closed-window-list",JSON.stringify(this._closed_windows))}},{key:"addToClosedWindowsList",value:function(e,t){this._closed_windows=this.getClosedWindowsList(),this._closed_windows.push([e,t]);try{sessionStorage.setItem(this._project_id+"-closed-window-list",JSON.stringify(this._closed_windows))}catch(e){console.error("Error when adding to closed windows list!",e),sessionStorage.clear()}}},{key:"getClosedWindowsList",value:function(){var e=sessionStorage.getItem(this._project_id+"-closed-window-list");return"string"==typeof e&&(e=JSON.parse(e)),null===e?[]:e}},{key:"eventString",value:function(e){return console.assert(null!=this._project_id,"project id valid"),this._project_id+e}},{key:"startListening",value:function(e,t){var n=this._diode.goldenlayout.eventHub,r=this,i=[this.eventString(e),function(n){var i=r._rcvbuf[t][e];i instanceof Array?r._rcvbuf[t][e].push(n):i instanceof Object?Object.assign(r._rcvbuf[t][e],n):r._rcvbuf[t][e]=n},this];n.on.apply(n,i),this._listeners[t].push(i)}},{key:"stopListening",value:function(e){var t,n=this._diode.goldenlayout.eventHub,i=o(this._listeners[e]);try{for(i.s();!(t=i.n()).done;){var a=t.value;n.unbind.apply(n,(0,r.Z)(a))}}catch(e){i.e(e)}finally{i.f()}delete this._listeners[e]}},{key:"setup",value:function(){}},{key:"createblob",value:function(e){var t=new Blob([e],{type:"text/plain"});return null!==this._blob&&window.URL.revokeObjectURL(this._blob),this._blob=window.URL.createObjectURL(t),this._blob}},{key:"save",value:function(){var e=this;this.request(["sdfg_object"],(function(t){var n=t.sdfg_object,r=null;"string"!=typeof n?(r=Object.keys(t.sdfg_object)[0],n=stringify_sdfg(Object.values(t.sdfg_object)[0])):r=parse_sdfg(n).attributes.name,r+=".sdfg";var i=document.createElement("a");i.setAttribute("download",r),i.href=e.createblob(n),document.body.appendChild(i),window.requestAnimationFrame((function(){var e=new MouseEvent("click");i.dispatchEvent(e),document.body.removeChild(i)}))}))}},{key:"request",value:function(t,n){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},i=new e(this._diode,this._project_id);return i.__impl_request(t,n,r)}},{key:"__impl_request",value:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};this._callback=t;var r=n.params,i="id"+this._diode.getPseudorandom();this._rcvbuf[i]={},this._listeners[i]=[];var a,s=o(e);try{for(s.s();!(a=s.n()).done;){var u=a.value;this.startListening(u,i),this._diode.goldenlayout.eventHub.emit(this.eventString("-req-"+u),r,this)}}catch(e){s.e(e)}finally{s.f()}var l=this,c=100,f=n.timeout;this._waiter[i]=setInterval((function(){var t,r=!1,a=o(e);try{for(a.s();!(t=a.n()).done;)if(!(t.value in l._rcvbuf[i])){r=!0;break}}catch(e){a.e(e)}finally{a.f()}if(!r){clearInterval(l._waiter[i]),l.stopListening(i),l._waiter[i]=null;var s=l._rcvbuf[i];return delete l._rcvbuf[i],l._callback(s,n.timeout_id)}null!==f&&(f-=c)<=0&&(clearInterval(l._waiter[i]),l.stopListening(i),null!=n.on_timeout&&n.on_timeout(l._rcvbuf[i]),l._waiter[i]=null,delete l._rcvbuf[i])}),c)}}],[{key:"load",value:function(t,n){var r=e.getProjectData(n),i=new e(t,r.project_id);return t.goldenlayout.destroy(),sessionStorage.setItem("savedState",JSON.stringify(r.data)),sessionStorage.setItem("diode_project",i._project_id),sessionStorage.setItem("transformation_snapshots",JSON.stringify(r.snapshots)),window.location.reload(),i}},{key:"getProjectData",value:function(e){var t=localStorage.getItem("project_"+e);if(null==t)throw"Project must exist";return JSON.parse(t)}},{key:"getSavedProjects",value:function(){var e=localStorage.getItem("saved_projects");return null==e?[]:JSON.parse(e)}}]),e}()},5490:(e,t,n)=>{"use strict";n.d(t,{y:()=>a});var r=n(6610),i=n(5991),a=function(){function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};(0,r.Z)(this,e),this.settings_values=t,this.changed={}}return(0,i.Z)(e,[{key:"load",value:function(){this.settings_values=window.localStorage.getItem("DIODE/Settings/confirmed"),this.changed=window.localStorage.getItem("DIODE/Settings/changed")}},{key:"store",value:function(){window.localStorage.setItem("DIODE/Settings/confirmed",this.settings_values),window.localStorage.setItem("DIODE/Settings/changed",this.changed)}},{key:"change",value:function(e,t){this.changed[e.join("/")]=t}},{key:"hasChanged",value:function(){return this.changed!={}}},{key:"changedValues",value:function(){return this.changed}},{key:"clearChanged",value:function(){this.changed={}}},{key:"values",value:function(){return this.settings_values}}]),e}()},982:(e,t,n)=>{"use strict";n.d(t,{F:()=>s,i:()=>u});var r=n(6610),i=n(5991);function a(e,t){var n;if("undefined"==typeof Symbol||null==e[Symbol.iterator]){if(Array.isArray(e)||(n=function(e,t){if(e){if("string"==typeof e)return o(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?o(e,t):void 0}}(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var r=0,i=function(){};return{s:i,n:function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,s=!0,u=!1;return{s:function(){n=e[Symbol.iterator]()},n:function(){var e=n.next();return s=e.done,e},e:function(e){u=!0,a=e},f:function(){try{s||null==n.return||n.return()}finally{if(u)throw a}}}}function o(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n{"use strict";n.d(t,{qu:()=>Ue,LS:()=>Be,Wj:()=>Le});var r=n(6610),i=n(5991),a=n(1154),o=n(6156),s=n(7329),u=n(4699),l=n(379),c=n(6070),f=n(7608),d=n(982),p=n(5490);function h(e,t){var n;if("undefined"==typeof Symbol||null==e[Symbol.iterator]){if(Array.isArray(e)||(n=function(e,t){if(e){if("string"==typeof e)return m(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?m(e,t):void 0}}(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var r=0,i=function(){};return{s:i,n:function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,o=!0,s=!1;return{s:function(){n=e[Symbol.iterator]()},n:function(){var e=n.next();return o=e.done,e},e:function(e){s=!0,a=e},f:function(){try{o||null==n.return||n.return()}finally{if(s)throw a}}}}function m(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n1&&void 0!==arguments[1]?arguments[1]:null;(0,r.Z)(this,e),this._label=t,this._prev=null,this._data=n,this._children=[],this._on_activate=null,this._representative=null}return(0,i.Z)(e,[{key:"label",value:function(){return this._label}},{key:"setPathLabel",value:function(e){this._path_label=e}},{key:"pathLabel",value:function(){return void 0===this._path_label?this.label():this._path_label}},{key:"data",value:function(){return this._data}},{key:"children",value:function(){return this._children}},{key:"parent",value:function(){return this._prev}},{key:"getChild",value:function(e){var t,n=h(this.children());try{for(n.s();!(t=n.n()).done;){var r=t.value;if(e(r))return r;var i=r.getChild(e);if(null!=i)return i}}catch(e){n.e(e)}finally{n.f()}return null}},{key:"clearChildren",value:function(){this._children=[]}},{key:"head",value:function(){for(var e=this;null!=e._prev;)e=e._prev;return e}},{key:"allLabelsInTree",value:function(){return this.head().asPreOrderArray((function(e){return e.pathLabel()}))}},{key:"asPreOrderArray",value:function(){var e,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:function(e){return e},n=[t(this)],r=h(this.children());try{for(r.s();!(e=r.n()).done;){var i=e.value;n.push.apply(n,(0,s.Z)(i.asPreOrderArray(t)))}}catch(e){r.e(e)}finally{r.f()}return n}},{key:"path",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:void 0,t=[];void 0===e&&(e=function(e){return{name:e.pathLabel(),params:e.data()}});for(var n=this;null!=n._prev;){var r=e(n);" "!=r.name&&(t=[r].concat((0,s.Z)(t))),n=n._prev}return t}},{key:"addNode",value:function(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},i=new e(t,n);return i._prev=this,null!=r.LabelConflictSameLevel&&(i=r.LabelConflictSameLevel(i,this.children().map((function(e){return e.label()})))),null!=r.LabelConflictGlobal&&(i=r.LabelConflictGlobal(i,this.allLabelsInTree())),i._prev=this,this._children.push(i),i}},{key:"setHandler",value:function(e,t){"activate"==e?this._on_activate=t:console.assert(!1,"type "+e+" is unknown")}},{key:"setRepresentative",value:function(e){this._representative=e}},{key:"representative",value:function(){return this._representative}},{key:"activate",value:function(e){null!=this._on_activate&&this._on_activate(this,e)}}]),e}(),y=function(){function e(t){(0,r.Z)(this,e),this._tree=t,this._debouncing=null}return(0,i.Z)(e,[{key:"setDebouncing",value:function(e){this._debouncing=e}},{key:"create_html_in",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0,r=void 0===n?this._tree:n,i=document.createElement("li"),a=document.createElement("span");a.innerText=r.label(),i.append(a);var o=document.createElement("ul");o.classList.add("tree_view"),o.classList.add("collapsed_sublist");var s=function(){o.classList.toggle("collapsed_sublist"),r.activate(1)},u=function(){r.activate(2)},l=s,c=s;null!=this._debouncing&&(l=this._debouncing.debounce("treeview-click",s,100),c=this._debouncing.debounce("treeview-click",u,10)),i.addEventListener("click",l),i.addEventListener("mouseenter",(function(){r.activate(0)})),i.addEventListener("mouseleave",(function(){r.activate(-1)})),i.addEventListener("dblclick",c),r.setRepresentative(i),o.append(i);var f=r.children();if(0==f.length);else{var d,p=h(f);try{for(p.s();!(d=p.n()).done;){var m=d.value;this.create_html_in(o,t+1,m)}}catch(e){p.e(e)}finally{p.f()}}e.append(o)}}]),e}(),g=n(2992);function _(e,t){var n;if("undefined"==typeof Symbol||null==e[Symbol.iterator]){if(Array.isArray(e)||(n=function(e,t){if(e){if("string"==typeof e)return b(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?b(e,t):void 0}}(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var r=0,i=function(){};return{s:i,n:function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,o=!0,s=!1;return{s:function(){n=e[Symbol.iterator]()},n:function(){var e=n.next();return o=e.done,e},e:function(e){s=!0,a=e},f:function(){try{o||null==n.return||n.return()}finally{if(s)throw a}}}}function b(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n2&&void 0!==arguments[2]&&arguments[2],r=this.diode.goldenlayout.eventHub,i=[e,t];r.on.apply(r,i),this._event_listeners.push(i),n&&this.closed_on(e,(function(e){return t(e)}))}},{key:"closed_on",value:function(e,t){var n=[e,t];this._event_listeners_closed.push(n)}},{key:"removeClosedWindowEvents",value:function(){var e,t=this.diode.goldenlayout.eventHub,n=_(this._event_listeners_closed);try{for(n.s();!(e=n.n()).done;){var r=e.value;t.unbind.apply(t,(0,s.Z)(r))}}catch(e){n.e(e)}finally{n.f()}this._event_listeners_closed=[]}},{key:"destroy",value:function(){console.log("destroying",this);var e,t=this.diode.goldenlayout.eventHub,n=_(this._event_listeners);try{for(n.s();!(e=n.n()).done;){var r=e.value;t.unbind.apply(t,(0,s.Z)(r))}}catch(e){n.e(e)}finally{n.f()}this._event_listeners=[]}},{key:"close",value:function(){console.log("closing",this),this.project().addToClosedWindowsList(this.container._config.componentName,this.getState());var e,t=this.diode.goldenlayout.eventHub,n=_(this._event_listeners_closed);try{for(n.s();!(e=n.n()).done;){var r=e.value;t.on.apply(t,(0,s.Z)(r))}}catch(e){n.e(e)}finally{n.f()}}},{key:"setupEvents",value:function(e){var t=this;null==this._project&&(this._project=e),this.container.extendState({project_id:this._project.eventString("")}),this.on("destroy-"+this.getState().created,(function(e){t._no_user_destroy||t.close(),t.destroy()})),this.on("enter-programmatic-destroy",(function(e){t._no_user_destroy=!0,console.log("Entering programmatic reordering",t)})),this.on("leave-programmatic-destroy",(function(e){t._no_user_destroy=!1,console.log("Leaving programmatic reordering",t)})),this.closed_on("window-reopened-"+this.getState().created,(function(e){t.removeClosedWindowEvents()}))}},{key:"getState",value:function(){return this.container.getState()}},{key:"saveToState",value:function(e){this.container.extendState(e)}},{key:"resetState",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.container.setState(e)}},{key:"saveToPersistentState",value:function(e,t){localStorage.setItem(e,t)}},{key:"getPersistentState",value:function(e){return localStorage.getItem(e)}}]),e}();function w(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function E(e){for(var t=1;t=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,o=!0,s=!1;return{s:function(){n=e[Symbol.iterator]()},n:function(){var e=n.next();return o=e.done,e},e:function(e){s=!0,a=e},f:function(){try{o||null==n.return||n.return()}finally{if(s)throw a}}}}function S(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n1&&void 0!==arguments[1]?arguments[1]:void 0,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[],i=!1;void 0===n&&(n=new v("Settings",null),i=!0);var o=[],l=[];Object.entries(e).forEach((function(e){var t=(0,u.Z)(e,2),n=t[0],r=t[1],i=r.meta;r.value,"dict"==i.type?o.push([n,r]):l.push([n,r])}));var c={},f=new d.i,p=JSON.parse(JSON.stringify(l));p=p.map((function(e){var t=e[0],n=(e=e[1]).meta;return n.value=e.value,n.name=n.title,n.category="General",n.key=t,n}));var h,m=f,g=null,_={},b=N(p);try{for(b.s();!(h=b.n()).done;){var x=h.value,w=x.category;null==_[w]&&(_[w]=[]),_[w].push(x)}}catch(e){b.e(e)}finally{b.f()}a.C.debugDevMode()||delete _["(Debug)"];for(var S={propertyChanged:function(e,n,r){console.log("PropertyChanged",e,n,r),t.settings_change_callback(void 0,e,r)}},k=0,O=Object.entries(_);k=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,o=!0,s=!1;return{s:function(){n=e[Symbol.iterator]()},n:function(){var e=n.next();return o=e.done,e},e:function(e){s=!0,a=e},f:function(){try{o||null==n.return||n.return()}finally{if(s)throw a}}}}function I(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);ne.length)&&(t=e.length);for(var n=0,r=new Array(t);n=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,o=!0,s=!1;return{s:function(){n=e[Symbol.iterator]()},n:function(){var e=n.next();return o=e.done,e},e:function(e){s=!0,a=e},f:function(){try{o||null==n.return||n.return()}finally{if(s)throw a}}}}((0,s.Z)(r.matchAll(/~#~#([^\n]+)/gm)));try{for(i.s();!(n=i.n()).done;){var a=n.value;console.log("Got match",a);var o=a[1];o=o.replace(/\'/g,""),(o=JSON.parse(o)).sort((function(e,t){return e-t}));var u=o[Math.floor(o.length/2)];console.log("Got median execution time",u),this.project().request(["new-time"],(function(){}),{params:{time:u}})}}catch(e){i.e(e)}finally{i.f()}this.container.extendState({current_value:r}),this.editor.clearSelection()}}]),o}(x);function R(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,o=!0,s=!1;return{s:function(){n=e[Symbol.iterator]()},n:function(){var e=n.next();return o=e.done,e},e:function(e){s=!0,a=e},f:function(){try{o||null==n.return||n.return()}finally{if(s)throw a}}}}(e.generated_code);try{for(r.s();!(n=r.n()).done;){var i=n.value;e.generated_code.length>1&&(i="\n\n\n######### NEXT CODE FILE ############\n\n\n"+i);var a=this.editor.getSession();a.insert({row:a.getLength(),column:0},this.cleanCode(i)),this.editor.clearSelection()}}catch(e){r.e(e)}finally{r.f()}}this.saveToState({code:t})}},{key:"setEditorReference",value:function(e){var t=this;this.editor=e,this.container.getElement()[0].addEventListener("resize",(function(e){t.editor.resize()}))}}]),o}(x),B=n(728),U=n(6310),q=n(9018),z=n(3371),F=n(8560);function H(e,t){var n;if("undefined"==typeof Symbol||null==e[Symbol.iterator]){if(Array.isArray(e)||(n=function(e,t){if(e){if("string"==typeof e)return Z(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Z(e,t):void 0}}(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var r=0,i=function(){};return{s:i,n:function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,o=!0,s=!1;return{s:function(){n=e[Symbol.iterator]()},n:function(){var e=n.next();return o=e.done,e},e:function(e){s=!0,a=e},f:function(){try{o||null==n.return||n.return()}finally{if(s)throw a}}}}function Z(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n>16&65535}));if("getnodes"==e)return this._analysis_values.map((function(e){return 65535&e.forUnifiedID}));if("all_vec_analyses"==e)return this._analysis_values.filter((function(e){return"VectorizationAnalysis"==e.AnalysisName})).filter((function(e){return e.forUnifiedID==n}));if("CriticalPathAnalysis"==e)return this._analysis_values.filter((function(e){return"CriticalPathAnalysis"==e.AnalysisName})).filter((function(e){return e.forUnifiedID==n}));if("ParallelizationAnalysis"==e)return this._analysis_values.filter((function(e){return"ThreadAnalysis"==e.AnalysisName})).filter((function(e){return e.forUnifiedID==n}));if("MemoryAnalysis"==e)return this._analysis_values.filter((function(e){return"MemoryAnalysis"==e.AnalysisName})).filter((function(e){return e.forUnifiedID==n}));if("MemOpAnalysis"==e)return this._analysis_values.filter((function(e){return"MemoryOpAnalysis"==e.AnalysisName})).filter((function(e){return e.forUnifiedID==n}));if("CacheOpAnalysis"==e)return this._analysis_values.filter((function(e){return"CacheOpAnalysis"==e.AnalysisName})).filter((function(e){return e.forUnifiedID==n}));if("defaultRun"==e)return function(e){var t=e.map((function(e){var t=[];return e.runopts.replace(/OMP_NUM_THREADS=(\d+)/gm,(function(e,n){return t.push(n)})),t})),n=Math.max.apply(Math,(0,s.Z)(t.map((function(e){return parseInt(e)}))));return e.filter((function(e){return e.runopts=="# ;export OMP_NUM_THREADS="+n+"; Running in multirun config"}))};throw"#TODO"}},{key:"message_handler_filter",value:function(e){if((e=JSON.parse(e)).sdfg_name==this.getState().sdfg_name&&("clear-highlights"==e.type&&(this.highlighted_elements&&this.highlighted_elements.forEach((function(e){e&&(e.highlighted=!1)})),this.highlighted_elements=[],this.renderer_pane.draw_async()),"highlight-elements"==e.type)){this.highlighted_elements&&this.highlighted_elements.forEach((function(e){e&&(e.highlighted=!1)})),this.highlighted_elements=[];var t,n=H(e.elements);try{for(n.s();!(t=n.n()).done;){var r=t.value,i=r[0],a=r[1],o=r[2],s=null,u=null;if(void 0!==(u=i>=0?this.renderer_pane.sdfg_list[i]:this.renderer_pane.graph)){if(-1==a)s=u.node(o);else{var l=u.node(a);if(void 0===l)continue;s=l.data.graph.node(o)}void 0!==s&&this.highlighted_elements.push(s)}}}catch(e){n.e(e)}finally{n.f()}this.highlighted_elements.forEach((function(e){e&&(e.highlighted=!0)})),this.renderer_pane.draw_async()}}},{key:"has_component",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;if(t||(t=this.diode.goldenlayout.root),"componentName"in t&&t.componentName===e)return t;if("contentItems"in t){var n,r=H(t.contentItems);try{for(r.s();!(n=r.n()).done;){var i=n.value,a=this.has_component(e,i);if(a)return a}}catch(e){r.e(e)}finally{r.f()}}return null}},{key:"render_free_variables",value:function(e){var t=this,n=this.getSDFGDataFromState();"SDFG"!=n.type&&(n=n.sdfg),this.diode.replaceOrCreate(["render-free-vars"],"PropWinComponent",{data:n,calling_context:this.created},(function(){console.log("Calling recreation function"),t.diode.addContentItem({type:"component",componentName:"PropWinComponent",componentState:{}}),setTimeout((function(){return t.render_free_variables(e)}),1)}))}},{key:"merge_properties",value:function(e,t,n,r){var i,a=B.f4.getAttributeNames(e),o=B.f4.getAttributeNames(n),s={},u=H(a);try{for(u.s();!(i=u.n()).done;){var l=i.value,c=B.f4.getMetaFor(e,l);if(c.indirected)s["_meta_"+l]=c,s[l]=e.attributes[l];else{var f=JSON.parse(JSON.stringify(c));f.category=e.type+" - "+f.category,s["_meta_"+t+l]=f,s[t+l]=e.attributes[l]}}}catch(e){u.e(e)}finally{u.f()}var d,p=H(o);try{for(p.s();!(d=p.n()).done;){var h=d.value,m=B.f4.getMetaFor(n,h);if(!m.indirected){var v=JSON.parse(JSON.stringify(m));v.category=n.type+" - "+v.category,v._noderef=n.node_id,s["_meta_"+r+h]=v,s[r+h]=n.attributes[h]}}}catch(e){p.e(e)}finally{p.f()}var y=JSON.parse(JSON.stringify(e));return y.attributes=s,y}},{key:"getSDFGPropertiesFromState",value:function(){return this.getSDFGDataFromState().sdfg_props}},{key:"getSDFGDataFromState",value:function(){var e=this.getState(),t=null;for("string"==typeof(t=null!=e.sdfg?e:e.sdfg_data)&&(t=JSON.parse(t));"string"==typeof t.sdfg;)t.sdfg=(0,q.a)(t.sdfg);return t}},{key:"renderProperties",value:function(e){var t=e.data;this.diode.renderPropertiesInWindow(this,e,t)}},{key:"getSDFGElementReference",value:function(e,t){return null!=e&&e.constructor==Object?this.getEdgeReference(e,t):this.getNodeReference(e,t)}},{key:"getEdgeReference",value:function(e,t){var n=this.getSDFGDataFromState().sdfg;if(null==t){var r,i=H(n.edges);try{for(i.s();!(r=i.n()).done;){var a=r.value;if(a.src==e.src&&a.dst==e.dst)return[a.attributes.data,n]}}catch(e){i.e(e)}finally{i.f()}}var o,s=H(n.nodes);try{for(s.s();!(o=s.n()).done;){var u=o.value;if(u.id==t){var l,c=H(u.edges);try{for(c.s();!(l=c.n()).done;){var f=l.value;if(f.src==e.src&&f.dst==e.dst)return[f.attributes.data,n]}}catch(e){c.e(e)}finally{c.f()}break}}}catch(e){s.e(e)}finally{s.f()}}},{key:"getNodeReference",value:function(e,t){var n,r=this.getSDFGDataFromState().sdfg,i=H(r.nodes);try{for(i.s();!(n=i.n()).done;){var a=n.value;if(a.id==t){if(null==e)return[a,r];var o,s=H(a.nodes);try{for(s.s();!(o=s.n()).done;){var u=o.value;if(u.id==e)return[u,r]}}catch(e){s.e(e)}finally{s.f()}break}}}catch(e){i.e(e)}finally{i.f()}}},{key:"symbolPropertyChanged",value:function(e,t,n){console.log("symbolPropertyChanged",t,n);for(var r=this.getSDFGDataFromState().sdfg,i=!1,a=e.data(),o=0,s=Object.keys(r.attributes._arrays);o0&&void 0!==arguments[0]?arguments[0]:void 0;null==t&&(t=this.getState().sdfg_data);var n=t;n="string"==typeof n?(0,q.a)(t):"sdfg"in t?t:{sdfg:t},console.assert(void 0===n.sdfg_props);var r=this.getState();if(console.assert(null!=r.sdfg_data),delete r.sdfg_data,this.resetState(r),this.saveToState({sdfg_data:n}),null!==this.renderer_pane)this.renderer_pane.set_sdfg(n.sdfg);else{var i=new F.U(n.sdfg,this.container.getElement()[0],(function(t,n,r,i,a,o,s){return e.on_renderer_mouse_event(t,n,r,i,a,o,s)}),null,!1,"white");this.renderer_pane=i}this.render_free_variables(!0)}},{key:"on_renderer_mouse_event",value:function(e,t,n,r,i,a,o){var s=this,u=r.states,l=r.nodes,c=r.edges,f=r.isedges,d=r.connectors,p=u.length+l.length+c.length+f.length+d.length,h=null;if(a.length>0?h=a[0]:p=0,"click"!==e&&"doubleclick"!==e&&"mousedown"!==e&&"contextmenu"!==e&&"wheel"!==e||this.contextmenu&&(this.contextmenu.destroy(),this.contextmenu=null),0==p&&"click"===e)return this.highlighted_elements&&this.highlighted_elements.forEach((function(e){e&&(e.stroke_color=null)})),this.render_free_variables(!1),!0;if(0==p&&"contextmenu"===e){var m=new z.x;return m.addOption("SDFG Properties",(function(e){s.render_free_variables(!0)})),m.show(t.x,t.y),this.contextmenu=m,!1}l.length+c.length+f.length===0&&u.length;var v=null,y=null;if(u.length>0&&(v=u[0].id),f.length>0&&(y=f[0].id),l.length>0?y=l[0].id:c.length>0&&(y=c[0].id),"contextmenu"===e){var g={x:t.x,y:t.y},_=i.sdfg.attributes.name,b=new z.x,x=h?h.sdfg:null,w=null;return h instanceof State?w=h.data.state:h instanceof SDFGNode?(w=h.data.node).type.endsWith("Exit")&&(w=x.nodes[h.parent_id].nodes[w.scope_entry]):w=null,w&&"is_collapsed"in w.attributes&&b.addOption(w.attributes.is_collapsed?"Expand":"Collapse",(function(e){w.attributes.is_collapsed=!w.attributes.is_collapsed,s.renderer_pane.relayout(),s.renderer_pane.draw_async()})),b.addOption("Show transformations",(function(e){console.log("'Show transformations' was clicked"),s.project().request(["highlight-transformations-"+_],(function(e){}),{params:{state_id:v,node_id:y}})})),b.addOption("Apply transformation ▶",(function(e){console.log("'Apply transformation' was clicked"),s.project().request(["get-transformations-"+_],(function(e){console.log("get-transformations response: ",e);var t,n=Object.values(e)[0],r=new z.x,i=H(n);try{var a=function(){var e=t.value;r.addOption(e.opt_name,(function(t){s.project().request(["apply-transformation-"+_],(function(e){}),{params:e.id_name})}))};for(i.s();!(t=i.n()).done;)a()}catch(e){i.e(e)}finally{i.f()}r.show(g.x+b.width(),g.y)}),{params:{state_id:v,node_id:y}}),e.preventDefault(),e.stopPropagation()})),b.addOption("Show Source Code",(function(e){console.log("go to source code")})),b.addOption("Show Generated Code",(function(e){console.log("go to generated code")})),b.addOption("Properties",(function(e){console.log("Force-open property pane")})),b.show(g.x,g.y),this.contextmenu=b,!1}return"click"!==e||(this.highlighted_elements&&this.highlighted_elements.forEach((function(e){e&&(e.stroke_color=null)})),this.highlighted_elements=a,setTimeout((function(){console.log("sdfg",h.sdfg),h instanceof Edge&&null!==h.parent_id&&h.sdfg.nodes[v].edges[h.id].dst;var e=function(e){var t=[];e.forEach((function(e){var n,r=e.attributes,i=H(Object.keys(r).filter((function(e){return!e.startsWith("_meta_")})));try{for(i.s();!(n=i.n()).done;){var a=n.value,o=r[a],s=r["_meta_"+a];if(null!=s){var u=JSON.parse(JSON.stringify(s));u.value=o,u.name=a,t.push({property:u,element:e,sdfg:h.sdfg,category:e.type+" - "+u.category})}}}catch(e){i.e(e)}finally{i.f()}})),s.renderProperties({data:t})};if(h instanceof Edge)e([h.data]);else if(h instanceof SDFGNode){var t=h.data.node;t.parent_id=h.parent_id;var n=h.sdfg.nodes[h.parent_id];if(t.type.endsWith("Entry")){var r=(0,U.GS)(n.nodes,t),a=i.sdfg_list[h.sdfg.sdfg_list_id].node(h.parent_id).data.graph.node(r.id);s.highlighted_elements.push(a),e([t,r])}else if(t.type.endsWith("Exit")){var o=parseInt(t.scope_entry),u=n.nodes[o],l=i.sdfg_list[h.sdfg.sdfg_list_id].node(h.parent_id).data.graph.node(u.id);s.highlighted_elements.push(l),e([u,t])}else"AccessNode"===t.type?e([t,h.sdfg.attributes._arrays[t.attributes.data]]):e([t])}else h instanceof State&&e([h.data.state]);s.highlighted_elements.forEach((function(e){e&&(e.stroke_color="red")})),i.draw_async()}),0)),!1}}]),o}(x);function G(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,o=!0,s=!1;return{s:function(){n=e[Symbol.iterator]()},n:function(){var e=n.next();return o=e.done,e},e:function(e){s=!0,a=e},f:function(){try{o||null==n.return||n.return()}finally{if(s)throw a}}}}(i);try{var l=function(){var e=o.value;if("SwitchToArrays"==e)return r.addRow("Arrays").childNodes.forEach((function(e){e.colSpan=4,e.style="text-align:center;"})),"continue";if("null"==e[0]||null==e[1]||"string"==typeof e||e instanceof String)return"continue";var t=document.createElement("button");t.addEventListener("click",(function(t){n.renderDataSymbolProperties(a,e)})),t.innerText="Edit";var i=document.createElement("button");i.addEventListener("click",(function(t){n.removeDataSymbol(a,e[0])})),i.innerText="Delete";var s=document.createElement("div");s.appendChild(t),s.appendChild(i),r.addRow(e[0],e[1].type,e[1].attributes.dtype+"["+e[1].attributes.shape+"]",s)};for(u.s();!(o=u.n()).done;)l()}catch(e){u.e(e)}finally{u.f()}r.addRow("Add data symbols").childNodes.forEach((function(e){e.colSpan=4,e.style="text-align:center;"}));var c=document.createElement("input");c.type="text",c.placeholder="Symbol name";var f=document.createElement("button");f.innerText="Add Scalar",f.addEventListener("click",(function(){n.addDataSymbol(a,"Scalar",c.value)}));var p=document.createElement("button");p.addEventListener("click",(function(){n.addDataSymbol(a,"Array",c.value)})),p.innerText="Add Array";var h=document.createElement("div");h.appendChild(f),h.appendChild(p),r.addRow(c,h).childNodes.forEach((function(e){e.colSpan=2,e.style="text-align:center;"}));var m=document.createElement("div"),v=document.createElement("button");v.addEventListener("click",(function(){Be("/dace/api/v1.0/expand/",{sdfg:t},(function(e){if(4===e.readyState&&200===e.status){var t=(0,q.a)(e.response);void 0!==t.error&&n.diode.handleErrors(n,t),n.project().request(["append-history"],(function(e){}),{params:{new_sdfg:t.sdfg,item_name:"Expand library nodes"}})}}))})),v.innerText="Expand all library nodes",m.appendChild(v),r.addRow(m),this.getHTMLContainer().innerHTML="",r.setCSSClass("free_symbol_table"),r.createIn(this.getHTMLContainer())}else console.warn("Data has not been set - creating empty window")}},{key:"getHTMLContainer",value:function(){return J(this.container.getElement()).children(".sdfgpropdiv")[0]}},{key:"createFromState",value:function(){this.getHTMLContainer().setAttribute("data-hint",'{"type": "DIODE", "name": "Property_Window"}');var e=this.getState();if(null!=e.params&&null!=e.params.params){var t=e.params;this.diode.renderProperties(t.transthis,t.node,JSON.parse(t.params),this.getHTMLContainer())}}}]),o}(x);function V(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,o=!0,s=!1;return{s:function(){n=e[Symbol.iterator]()},n:function(){var e=n.next();return o=e.done,e},e:function(e){s=!0,a=e},f:function(){try{o||null==n.return||n.return()}finally{if(s)throw a}}}}(e.elements);try{var c=function(){var e=s.value,n=e.options;"string"==typeof n||(null==n?null!=e.output&&"orphan"==e.type&&((n=document.createElement("button")).onclick=function(n){t.diode.addContentItem({type:"component",componentName:"TerminalComponent",componentState:{current_value:e.output},title:"Output"})},n.innerText="Output"):(null==n.type&&(n=n.perfopts),n=n.mode+", coresets "+n.core_counts));var r=[e.index,e.client_id,e.state,n],i=document.createElement("tr");r.map((function(e){var t=document.createElement("td");return"string"==typeof e||"number"==typeof e?t.innerText=e:t.appendChild(e),t})).forEach((function(e){return i.appendChild(e)})),u.appendChild(i)};for(l.s();!(s=l.n()).done;)c()}catch(e){l.e(e)}finally{l.f()}i.appendChild(u),r.appendChild(i),n.appendChild(r),K(i).DataTable()}},{key:"create",value:function(){var e=this;this._autorefresher=setInterval((function(t){e.getCurrentQueue()}),2e3),K(this.container.getElement()).css("overflow","auto"),this.refreshUI({})}},{key:"getCurrentQueue",value:function(){var e=this;Be("/dace/api/v1.0/dispatcher/list/",{},(function(t){4===t.readyState&&200===t.status&&e.refreshUI(t.response)}))}}]),o}(x);function X(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n';t="data:image/svg+xml;base64,"+btoa(t),this.container.setTitle("Start Page");var n=Q(this.container.getElement())[0],r=document.createElement("h1");r.id="startpage_header",r.innerText="DIODE",n.appendChild(r);var i=document.createElement("div");i.id="startpage_container",i.classList="flex_row",i.style="width: 100%;height:100%;";var a=document.createElement("div");a.id="startpage_recent";var o=document.createElement("div");o.innerText="New",o.classList="startpage_title",a.appendChild(o),a.appendChild(this.createStartpageListElement("Create a new Project",null,null,t,(function(t){e.container.close(),e.diode.openUploader("code-python")})));var s=document.createElement("div");s.innerText="Recent",s.classList="startpage_title",a.appendChild(s);var u=document.createElement("div");u.id="additional_resources";var l=document.createElement("div");l.innerText="Resources",l.classList="startpage_title",u.appendChild(l);var c,f=function(e,t){var n;if("undefined"==typeof Symbol||null==e[Symbol.iterator]){if(Array.isArray(e)||(n=function(e,t){if(e){if("string"==typeof e)return X(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?X(e,t):void 0}}(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var r=0,i=function(){};return{s:i,n:function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,o=!0,s=!1;return{s:function(){n=e[Symbol.iterator]()},n:function(){var e=n.next();return o=e.done,e},e:function(e){s=!0,a=e},f:function(){try{o||null==n.return||n.return()}finally{if(s)throw a}}}}(g.T.getSavedProjects());try{var d=function(){var t=c.value;console.log("p",t);var n=g.T.getProjectData(t);a.appendChild(e.createStartpageListElement(t,n.last_saved,n.description,void 0,(function(n){g.T.load(e.diode,t)})))};for(f.s();!(c=f.n()).done;)d()}catch(e){f.e(e)}finally{f.f()}var p='\n \n \n \n \n \n \n \n \n \n \n \n \n ';p="data:image/svg+xml;base64,"+btoa(p),u.appendChild(this.createStartpageListElement("Visit DaCe on GitHub",null,null,"external_lib/GitHub-Mark.png",(function(e){window.open("https://github.com/spcl/dace","_blank")}))),u.appendChild(this.createStartpageListElement("Visit project page",null,null,p,(function(e){window.open("https://spcl.inf.ethz.ch/Research/DAPP/","_blank")}))),i.appendChild(a),i.appendChild(u),n.appendChild(i)}},{key:"createStartpageListElement",value:function(e,t,n){var r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:void 0,i=arguments.length>4&&void 0!==arguments[4]?arguments[4]:function(e){return e},a='';null==r&&(r="data:image/svg+xml;base64,"+btoa(a));var o=document.createElement("div");o.classList="startpage_list_element";var s=document.createElement("div");s.classList="flex_row";var u=document.createElement("img");u.src=r,u.width="50",u.height="50",s.appendChild(u);var l=document.createElement("div");l.classList="flex_column";var c=document.createElement("span");c.innerText=e;var f=document.createElement("span");f.innerText=n,l.appendChild(c),null!=n?l.appendChild(f):(c.style.fontSize="1.2rem",l.style.justifyContent="center"),s.appendChild(l);var d=document.createElement("div");d.classList="flex_column";var p=document.createElement("span");p.innerText=t;var h=document.createElement("span");return null!=p&&(d.appendChild(p),d.appendChild(h)),s.appendChild(d),o.appendChild(s),o.addEventListener("click",i),o}}]),o}(x);function te(e,t){var n;if("undefined"==typeof Symbol||null==e[Symbol.iterator]){if(Array.isArray(e)||(n=function(e,t){if(e){if("string"==typeof e)return ne(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?ne(e,t):void 0}}(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var r=0,i=function(){};return{s:i,n:function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,o=!0,s=!1;return{s:function(){n=e[Symbol.iterator]()},n:function(){var e=n.next();return o=e.done,e},e:function(e){s=!0,a=e},f:function(){try{o||null==n.return||n.return()}finally{if(s)throw a}}}}function ne(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n0&&void 0!==arguments[0]?arguments[0]:[],t=this.container.getElement();re(t).css("overflow","auto"),re(t)[0].setAttribute("data-hint",'{"type": "DIODE_Element", "name": "TransformationHistory"}'),(t=re(t)[0]).innerHTML="";var n=document.createElement("div");n.classList="transformation_history_base";var r=document.createElement("div");r.classList="transformation_history_list",this._history_scroll_div=r,n.appendChild(r),t.innerHTML="",t.appendChild(n);var i,a=0,o=te(e);try{for(o.s();!(i=o.n()).done;){var s=i.value;this.addElementToHistory(s,a),++a}}catch(e){o.e(e)}finally{o.f()}}},{key:"addElementToHistory",value:function(e,t){var n=this,r=this._history_scroll_div,i=document.createElement("div");i.classList="transformation_history_list_element";var a=document.createElement("div");a.classList="transformation_history_list_element_title",a.innerText=Object.values(e)[0][0].name;var o=document.createElement("div");o.classList="flex_row transformation_history_list_element_control";var s=document.createElement("div");s.classList="revert-button",s.title="revert",s.innerHTML="undo",re(s).hover((function(){i.classList.add("revert-hovered")}),(function(){i.classList.remove("revert-hovered")})),s.addEventListener("click",(function(e){var r=n.project().getTransformationSnapshots()[t];n.diode.multiple_SDFGs_available({compounds:r[1]}),n.project().discardTransformationsAfter(t),n.diode.gatherProjectElementsAndCompile(n,{},{sdfg_over_code:!0})})),o.appendChild(s),i.appendChild(a),i.appendChild(o),r.appendChild(i)}}]),o}(x);function ae(e,t){var n;if("undefined"==typeof Symbol||null==e[Symbol.iterator]){if(Array.isArray(e)||(n=function(e,t){if(e){if("string"==typeof e)return oe(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?oe(e,t):void 0}}(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var r=0,i=function(){};return{s:i,n:function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,o=!0,s=!1;return{s:function(){n=e[Symbol.iterator]()},n:function(){var e=n.next();return o=e.done,e},e:function(e){s=!0,a=e},f:function(){try{o||null==n.return||n.return()}finally{if(s)throw a}}}}function oe(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n1&&function(){(g=document.createElement("div")).classList="flex_column";var e=document.createElement("div"),t=document.createElement("span");t.innerText=m,e.classList="at_group_header",e.appendChild(t),e.addEventListener("click",(function(t){e.classList.toggle("at_collapse")})),g.appendChild(e),n._transformation_list.appendChild(g)}();var _,b=ae(v);try{for(b.s();!(_=b.n()).done;){var x=_.value;this.addNode(x,y,g),++y}}catch(e){b.e(e)}finally{b.f()}}}catch(e){p.e(e)}finally{p.f()}var w=this.getState();w.optstruct=r,this.saveToState(w)}},{key:"locateTransformation",value:function(e,t,n){var r=this;console.log("locateTransformation",arguments),this.sendHighlightRequest(n);var i=this.getState(),a=i.optstruct[e][t].representative;se(a).css("background","green"),setTimeout((function(){r.sendClearHighlightRequest(),se(a).css("background","")}),1e3)}},{key:"applyTransformation",value:function(e,t,n){var r=this;if(!this.operation_running){this.operation_running=!0;var i=this.getState().optstruct,a={},o=JSON.parse(JSON.stringify(i[e.opt_name][t]));a[this.getState().for_sdfg]=[{name:n,params:{props:o.opt_params}}];var s=function(e){r.diode.gatherProjectElementsAndCompile(r,{optpath:a},{sdfg_over_code:!0},(function(){r.project().saveSnapshot(e.sdfg_object,a),r.project().request(["update-tfh"],(function(e){r.operation_running=!1}),{on_timeout:function(){r.operation_running=!1}})}),(function(){r.operation_running=!1}))};this.project().request(["sdfg_object"],(function(e){console.log("Got snapshot",e),"string"==typeof e.sdfg_object&&(e.sdfg_object=JSON.parse(e.sdfg_object)),setTimeout(s,10,e)}),{})}}},{key:"appendHistoryItem",value:function(e,t){var n=this;if(!this.operation_running){this.operation_running=!0;var r={};r[this.getState().for_sdfg]=[{name:t,params:{}}];var i=function(){n.diode.gatherProjectElementsAndCompile(n,{code:(0,q.n)(e)},{})};this.project().request(["sdfg_object"],(function(e){console.log("Got snapshot",e),"string"==typeof e.sdfg_object&&(e.sdfg_object=JSON.parse(e.sdfg_object)),n.project().saveSnapshot(e.sdfg_object,r),n.project().request(["update-tfh"],(function(e){n.operation_running=!1}),{on_timeout:function(){n.operation_running=!1}}),setTimeout(i,10)}),{})}}},{key:"addNode",value:function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0,i=e.opt_name;0!=n&&(i+="$"+n),e.id_name=i;var a=void 0===r?this._transformation_list:r,o=document.createElement("div");o.classList="flex_row at_element";var s=document.createElement("div");s.innerText=i,s.addEventListener("mouseenter",(function(n){t.sendHighlightRequest(e.affects)})),s.addEventListener("mouseleave",(function(e){t.sendClearHighlightRequest()})),s.addEventListener("click",(function(r){t.applyTransformation(e,n,i)})),s.setAttribute("data-hint",'{"type": "transformation", "name": "'+e.opt_name+'"}'),e.representative=s;var u=document.createElement("div"),l=document.createElement("b");l.classList="",l.innerText="...",l.addEventListener("click",(function(r){t.renderProperties(e,n,[e,n,i])})),u.appendChild(l),o.appendChild(s),o.appendChild(u),a.appendChild(o)}},{key:"create",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:void 0;if(null!=e){var t=this.getState();Object.assign(t,e),this.resetState(t)}var n=this.getState();"string"==typeof n&&(n=JSON.parse(n));var r=void 0;if(null!=n.matching_opts)r=n.matching_opts;else if(null!=n.optgraph_data){var i=JSON.parse(n.optgraph_data);r=i.matching_opts}var a=this.container.getElement()[0];a.innerHTML="";var o=document.createElement("div");o.classList="at_container";var s=document.createElement("div");this._transformation_list=s,o.appendChild(s),a.appendChild(o),null!=r&&this.addNodes(r)}}]),o}(x);function le(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,o=!0,s=!1;return{s:function(){n=e[Symbol.iterator]()},n:function(){var e=n.next();return o=e.done,e},e:function(e){s=!0,a=e},f:function(){try{o||null==n.return||n.return()}finally{if(s)throw a}}}}(e);try{for(r.s();!(n=r.n()).done;){var i=n.value;null!=i.msg&&(t+=i.msg),console.log("Error element",i)}}catch(e){r.e(e)}finally{r.f()}this.editor.setValue(t)}this.saveToState({error:e})}},{key:"setEditorReference",value:function(e){var t=this;this.editor=e,this.container.getElement()[0].addEventListener("resize",(function(e){t.editor.resize()}))}}]),o}(x);var fe=function(e){(0,l.Z)(o,e);var t,n,a=(t=o,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,r=(0,f.Z)(t);if(n){var i=(0,f.Z)(this).constructor;e=Reflect.construct(r,arguments,i)}else e=r.apply(this,arguments);return(0,c.Z)(this,e)});function o(e,t,n){var i;return(0,r.Z)(this,o),(i=a.call(this,e,t,n))._settings_container=null,i}return(0,i.Z)(o,[{key:"create",value:function(){var e=this,t=this.container.getElement()[0],n=document.createElement("div"),r=document.createElement("div"),i={"Configuration name":"",Host:"localhost","Use SSH":!0,"SSH Key":this.diode.pubSSH(),"SSH Key override":"",Instrumentation:"off","Number of threads":"[0]"},a=[],o=null;o={propertyChanged:function(t,n,s){if("Configuration name"==n&&e.diode.getRunConfigs().map((function(e){return e["Configuration name"]})).includes(s)){for(var u=e.diode.getRunConfigs(s),l=function(){var e=f[c],t=u[e];a.find((function(t){return t.name==e})).value=t},c=0,f=Object.keys(u);ce.length)&&(t=e.length);for(var n=0,r=new Array(t);n=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,o=!0,s=!1;return{s:function(){n=e[Symbol.iterator]()},n:function(){var e=n.next();return o=e.done,e},e:function(e){s=!0,a=e},f:function(){try{o||null==n.return||n.return()}finally{if(s)throw a}}}}(JSON.parse(e.response).elements);try{for(a.s();!(r=a.n()).done;){var o=r.value.options;"string"==typeof o&&(console.log("o is ",o),"endgroup"==o&&(i=!1,n=!0))}}catch(e){a.e(e)}finally{a.f()}n&&i&&(n=!1,t.diode.load_perfdata())}}))}),2e3)}},{key:"close",value:function(){clearInterval(this._update_timeout),this._update_timeout=null,(0,A.Z)((0,f.Z)(o.prototype),"close",this).call(this)}},{key:"destroy",value:function(){(0,A.Z)((0,f.Z)(o.prototype),"destroy",this).call(this)}},{key:"create",value:function(){var e=this,t=this.container.getElement()[0];t.innerHTML="

Instrumentation control

Do not close this window while instrumented programs are running

";var n=document.createElement("a");n.innerText="Download perfdata database",n.href=base_url+"/dace/api/v1.0/perfdata/download/"+this.diode.getClientID()+"/",n.download="perfdata.sqlite3";var r=document.createElement("a");r.innerText="Download CAN",r.href=base_url+"/dace/api/v1.0/can/download/"+this.diode.getClientID()+"/",r.download="current.sqlite3";var i=document.createElement("button");i.innerText="Delete remote database",i.addEventListener("click",(function(){Be("/dace/api/v1.0/perfdata/reset/",{client_id:e.diode.getClientID()},(function(e){}))}));var a=document.createElement("button");a.innerText="Delete remote CAN",a.addEventListener("click",(function(){Be("/dace/api/v1.0/can/reset/",{client_id:e.diode.getClientID()},(function(e){}))}));var o=document.createElement("button");o.innerText="Display instrumentation results",o.addEventListener("click",(function(){e.diode.load_perfdata()}));var s=document.createElement("button");s.innerText="Show roofline",s.addEventListener("click",(function(){e.diode.show_roofline()}));var u=document.createElement("div");u.classList="flex_column",u.appendChild(n),u.appendChild(r),u.appendChild(i),u.appendChild(a),u.appendChild(o),u.appendChild(s),t.appendChild(u)}}]),o}(x),me=n(1318);function ve(e,t){var n;if("undefined"==typeof Symbol||null==e[Symbol.iterator]){if(Array.isArray(e)||(n=function(e,t){if(e){if("string"==typeof e)return ye(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?ye(e,t):void 0}}(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var r=0,i=function(){};return{s:i,n:function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,o=!0,s=!1;return{s:function(){n=e[Symbol.iterator]()},n:function(){var e=n.next();return o=e.done,e},e:function(e){s=!0,a=e},f:function(){try{o||null==n.return||n.return()}finally{if(s)throw a}}}}function ye(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n4&&void 0!==arguments[4]?arguments[4]:"hard",a=function(){return e.canvas.width},o=function(){return e.canvas.height};e.save(),"soft"===i?e.setLineDash([15,15]):e.setLineDash([]),e.beginPath(),e.strokeStyle="black",e.lineWidth=3;var s=o()-t.top-t.bottom,u=s/n.steps,l=n.inv_step_value_func(r),c=o()-t.bottom-u*l;e.moveTo(t.left,c),e.lineTo(a()-t.right,c),e.stroke(),e.beginPath(),e.font="25px Arial",e.fillStyle="black",e.textAlign="right",e.textBaseline="bottom",e.fillText(r.toString()+" FLOP/c",a()-t.right,c),e.restore()}function be(e){return e.step_value_func((e.steps-0)*e.value_per_step)}function xe(e,t,n,r){var i=function(){return e.canvas.height},a=(i()-n.top-n.bottom)/t.steps,o=t.inv_step_value_func(r);return i()-n.bottom-a*o}function we(e,t,n,r){var i=(e.canvas.width-n.left-n.right)/t.steps,a=t.inv_step_value_func(r);return n.left+i*a}function Ee(e,t,n,r,i){var a=function(){return e.canvas.height};e.save(),e.strokeStyle="black",e.lineWidth=3;var o,s=(a()-t.top-t.bottom)/r.steps,u=(e.canvas.width-t.left-t.right)/n.steps,l=be(r),c=be(n),f=i*c;f=Math.min(f,l),o=Math.min(f/i,c);var d=r.inv_step_value_func(n.step_value_func(0)*i),p=a()-t.bottom-s*d,h=r.inv_step_value_func(f),m=a()-t.bottom-s*h,v=n.inv_step_value_func(o),y=t.left+u*v;e.moveTo(t.left,p),e.lineTo(y,m),e.stroke(),e.translate(y,-m+t.top+t.bottom);var g=Math.atan2(m-p,y-t.left);e.rotate(g),e.font="25px Arial",e.fillStyle="black",e.textAlign="right",e.textBaseline="bottom",e.fillText(i.toString()+" B/c",0,0),e.restore()}var Ne=[],Se=[],Me=[];function ke(e,t){e.clearRect(0,0,e.canvas.width,e.canvas.height),t.drawAxes(),t.drawComputeBounds(),t.drawBandwidthBounds(),t.connectDots(),t.drawDots()}function Oe(e,t,n,r,i,a){var o=arguments.length>6&&void 0!==arguments[6]?arguments[6]:5;e.save();var s=we(e,t,r,a),u=xe(e,n,r,i),l=o;e.fillStyle="red",e.fillRect(s-l,u-l,2*l,2*l),e.restore()}function Ce(e,t,n,r,i,a,o){var s=we(e,t,r,a),u=xe(e,n,r,i);Ne.push({x:s,y:u,floppercyc:i,flopperbyte:a,highlight:!1,id:o})}function Ae(e,t,n,r){var i=arguments.length>4&&void 0!==arguments[4]?arguments[4]:void 0,a=20,o=t-r,s=t+r,u=n-a,l=u-r;e.save(),e.fillStyle="cyan",e.moveTo(t,n),e.beginPath(),e.lineTo(t-a,u),e.lineTo(o,u),e.lineTo(o,l),e.lineTo(s,l),e.lineTo(s,u),e.lineTo(t+a,u),e.lineTo(t,n),e.closePath(),e.stroke(),e.fill(),e.fillStyle="black",e.font="40px Arial",e.textBaseline="top",void 0!==i&&e.fillText("id: "+i,o+a,l+a),e.restore()}var Te=function(){function e(t,n,i,a){(0,r.Z)(this,e),this.ctx=t,this.margin=n,this.xoptions=i,this.yoptions=a}return(0,i.Z)(e,[{key:"drawAxes",value:function(){var e=this.ctx,t=this.margin,n=function(){return e.canvas.height};e.strokeStyle="black",e.lineWidth=2,e.beginPath(),e.moveTo(t().left,n()-t().bottom),e.lineTo(t().left,t().top),e.stroke(),e.closePath(),e.beginPath(),e.moveTo(t().left,n()-t().bottom),e.lineTo(e.canvas.width-t().right,n()-t().bottom),e.stroke(),e.closePath(),function(e,t,n){var r=function(){return e.canvas.width},i=function(){return e.canvas.height},a=n.steps,o=n.step_value_func,s=(r()-t.left-t.right)/a,u=t.left,l=i()-t.bottom;e.save();for(var c=1;c0&&void 0!==arguments[0]?arguments[0]:void 0,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0;null==e&&(e=document.getElementById("myCanvas"));var n=e.getContext("2d"),r=function(){return{top:100,bottom:100,left:200,right:100}},i={steps:20,value_per_step:1,step_value_func:function(e){return Math.pow(2,-6+e)},inv_step_value_func:function(e){return 6+Math.log2(e)}},a={steps:15,value_per_step:1,step_value_func:function(e){return Math.pow(2,-8+e)},inv_step_value_func:function(e){return 8+Math.log2(e)}},o=new Te(n,r,i,a);e.addEventListener("mousemove",(function(t){var s,u=e.getBoundingClientRect(),l=(t.clientX-u.left)/(u.right-u.left)*e.width,c=(t.clientY-u.top)/(u.bottom-u.top)*e.height,f=function(e){return e*e},d=ve(Ne);try{for(d.s();!(s=d.n()).done;){var p=s.value;p.x=we(n,i,r(),p.flopperbyte),p.y=xe(n,a,r(),p.floppercyc),f(p.x-l)+f(p.y-c)<=f(15)?p.highlight=!0:p.highlight=!1}}catch(e){d.e(e)}finally{d.f()}ke(n,o)})),e.addEventListener("click",(function(t){var n,r=e.getBoundingClientRect(),i=(t.clientX-r.left)/(r.right-r.left)*e.width,a=(t.clientY-r.top)/(r.bottom-r.top)*e.height,o=function(e){return e*e},s=ve(Ne);try{for(s.s();!(n=s.n()).done;){var u=n.value;if(o(u.x-i)+o(u.y-a)<=o(15))return void ge.send(JSON.stringify({msg_type:"roofline",command:"select-program",programID:u.id}))}}catch(e){s.e(e)}finally{s.f()}})),_e(n,r(),a,8),Ee(n,r(),i,a,8),Se.push(64,8),Me.push(8),Ce(n,i,a,r(),1,1,1),Ce(n,i,a,r(),2,3,2),Ce(n,i,a,r(),4,6,3),Ce(n,i,a,r(),7,7,4),Ce(n,i,a,r(),8,8,5),ke(n,o);var s=function(e){if("roofline-data"==e.msg_type){Ne=[];var t,o=ve(e.data);try{for(o.s();!(t=o.n()).done;){var s=t.value,u=s.ProgramID,l=s.FLOP_C,c=(s.INPUT_B_C,s.PROC_B_C,l/s.MEM_B_C);Ce(n,i,a,r(),l,c,u)}}catch(e){o.e(e)}finally{o.f()}}},u=function(){(ge=new WebSocket("ws://localhost:8024/")).onopen=function(e){ge.send(JSON.stringify({msg_type:"roofline",command:"connected"}))},ge.onmessage=function(e){msg=JSON.parse(e.data),s(msg)},ge.onclose=function(e){console.log("ERROR: Connection closed!")},ge.onerror=function(e){console.log("ERROR: There was an error with the connection.")}};return null==t?u():t(s),function(){return ke(n,o)}}(n,(function(t){e._proc_func=t})),i=function(){console.log("Resizing"),n.width=parseInt(t.style.width)-20,n.height=parseInt(t.style.height)-20,r()};t.addEventListener("resize",i),window.ResizeObserver?new ResizeObserver(i).observe(t):console.warn("ResizeObserver not available"),t.appendChild(n),Be("/dace/api/v1.0/perfdata/roofline/",{client_id:this.diode.getClientID()},(function(t){4===t.readyState&&200===t.status&&e._proc_func(JSON.parse(t.response))}))}}]),o}(x);function De(e,t){var n;if("undefined"==typeof Symbol||null==e[Symbol.iterator]){if(Array.isArray(e)||(n=function(e,t){if(e){if("string"==typeof e)return Pe(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Pe(e,t):void 0}}(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var r=0,i=function(){};return{s:i,n:function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,o=!0,s=!1;return{s:function(){n=e[Symbol.iterator]()},n:function(){var e=n.next();return o=e.done,e},e:function(e){s=!0,a=e},f:function(){try{o||null==n.return||n.return()}finally{if(s)throw a}}}}function Pe(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n3&&void 0!==arguments[3]?arguments[3]:{readMode:"text",condition:function(e){return!0}},i=function(t){r.condition(e)&&(t.stopPropagation(),t.preventDefault())},a=function(t){r.condition(e)&&(t.stopPropagation(),t.preventDefault())},o=function(n){if(r.condition(e)){var i=Array.from(n.dataTransfer.files);if(1!==i.length)throw i.length>1?(n.stopPropagation(),n.preventDefault(),alert("Cannot handle more than 1 input file at this point"),"Previous alert caused here"):(alert("Can only drop files at this point - everything else is user-agent-specific!"),"Previous alert caused here");n.stopPropagation(),n.preventDefault();var a=i[0],o=a.type,s=new FileReader;if(s.onload=function(e){t(o,e.target.result)},"text"==r.readMode)s.readAsText(a);else{if("binary"!=r.readMode)throw"Unimplemented read mode "+r.readMode;s.readAsArrayBuffer(a)}}};e.addEventListener("dragenter",i,!1),e.addEventListener("dragover",a,!1),e.addEventListener("drop",o,!1)}function Be(e,t,n){var r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"POST",i=new XMLHttpRequest,a=je+e;if(i.open(r,a,!0),i.setRequestHeader("Content-Type","application/json"),i.onreadystatechange=function(){n(i)},i.onerror=function(e){console.warn("Connection error",e),alert("Connection error")},null!=t){var o=JSON.stringify(t);i.send(o)}else i.send()}!function(){var e=new a.C;window.diode=e,e.initEnums(),e.pubSSH(!0),Re("#toolbar").w2toolbar({name:"toolbar",items:[{type:"menu",id:"file-menu",caption:"File",icon:"material-icons-outlined gmat-folder",items:[{text:"Start",icon:"material-icons-outlined gmat-new_folder",id:"start"},{text:"Open",icon:"material-icons-outlined gmat-open",id:"open-file"},{text:"Save",icon:"material-icons-outlined gmat-save",id:"save"}]},{type:"break",id:"break0"},{type:"menu",id:"settings-menu",caption:"Settings",icon:"material-icons-outlined gmat-settings",items:[{text:"DACE settings",icon:"material-icons-outlined gmat-settings-cloud",id:"diode-settings"},{text:"DIODE settings",icon:"material-icons-outlined gmat-settings-application",id:"diode-settings"},{text:"Run Configurations",icon:"material-icons-outlined gmat-playlist_play",id:"runoptions"},{text:"Runqueue",icon:"material-icons-outlined gmat-view_list",id:"runqueue"},{text:"Perfdata",id:"perfdata"},{text:"Perftimes",id:"perftimes"}]},{type:"menu",icon:"material-icons-outlined gmat-build",id:"compile-menu",caption:"Compile",items:[{text:"Compile",id:"compile",icon:"material-icons-outlined gmat-gavel"},{text:"Run",id:"run",icon:"material-icons-outlined gmat-play"},{text:"Discard changes and compile source",id:"compile-clean",icon:"material-icons-outlined gmat-clear"}]},{type:"menu-radio",id:"runconfig",text:function(t){var n="string"==typeof t.selected?t.selected:t.selected(),r=this.get("runconfig:"+n);return"Config: "+(null==r?e.getCurrentRunConfigName():r.text)},selected:function(t){return e.getCurrentRunConfigName()},items:[{id:"default",text:"default"}]},{type:"menu",id:"transformation-menu",caption:"Transformations",items:[{text:"History",id:"history"},{text:"Available Transformations",id:"available"}]},{type:"menu",id:"group-menu",caption:"Group",icon:"material-icons-outlined gmat-apps",items:[{text:"Group default",id:"group-diode1"}]},{type:"menu",id:"closed-windows",caption:"Closed windows",icon:"material-icons-outlined gmat-reopen",items:[]}],onClick:function(t){if("file-menu:open-file"===t.target&&e.openUploader("code-python"),"file-menu:start"===t.target&&(e.closeAll(),e.addContentItem({type:"component",componentName:"StartPageComponent",componentState:{}})),"file-menu:save"===t.target&&e.project().save(),"settings-menu:diode-settings"==t.target&&e.open_diode_settings(),"settings-menu:runqueue"==t.target&&e.open_runqueue(),"settings-menu:perfdata"==t.target&&e.show_inst_options(),"settings-menu:perftimes"==t.target&&e.show_exec_times(),"group-menu:group-sdfgs"==t.target&&(e.groupOptGraph(),e.groupSDFGsAndCodeOutsTogether()),"group-menu:group-diode1"==t.target&&e.groupLikeDIODE1(),"runconfig"==t.target){var n=this.get(t.target),r=e.getRunConfigs();n.items=[];var i,a=De(r);try{for(a.s();!(i=a.n()).done;){var o=i.value["Configuration name"];n.items.push({id:o,text:o})}}catch(e){a.e(e)}finally{a.f()}}if(t.target.startsWith("runconfig:")){var s=t.target.substr("runconfig:".length);e.setCurrentRunConfig(s)}if("transformation-menu:history"==t.target&&e.addContentItem({type:"component",componentName:"TransformationHistoryComponent",title:"Transformation History",componentState:{}}),"transformation-menu:available"==t.target&&e.addContentItem({type:"component",componentName:"AvailableTransformationsComponent",componentState:{}}),"compile-menu:compile"==t.target&&e.gatherProjectElementsAndCompile(e,{},{sdfg_over_code:!0}),"compile-menu:compile-clean"==t.target&&(e.project().request(["clear-errors"],(function(){})),e.project().discardTransformationsAfter(0),e.project().request(["input_code"],(function(t){e.compile(e,t.input_code)}),{timeout:300,on_timeout:function(){return alert("No input code found, open a new file")}})),"settings-menu:runoptions"==t.target&&e.show_run_options(e),"compile-menu:run"==t.target&&e.ui_compile_and_run(e),"closed-windows"==t.target){var u=this.get(t.target);u.items=[],u.items.push({text:"Clear all",id:"clear-closed-windows",icon:"material-icons-outlined gmat-clear"});var l,c=De(e.project().getClosedWindowsList());try{for(c.s();!(l=c.n()).done;){var f=l.value,d=f[0];u.items.push({text:d,id:"open-closed-"+f[1].created})}}catch(e){c.e(e)}finally{c.f()}this.refresh()}if("closed-windows:clear-closed-windows"==t.target&&e.project().clearClosedWindowsList(),t.target.startsWith("closed-windows:open-closed-")){var p=t.target;p=p.substr("closed-windows:open-closed-".length),e.project().reopenClosedWindow(p)}}});var t=sessionStorage.getItem("savedState"),n=null;(n=null!==t?new GoldenLayout(JSON.parse(t),Re("#diode_gl_container")):new GoldenLayout({content:[{type:"row",content:[{type:"component",componentName:"StartPageComponent",componentState:{}}]}]},Re("#diode_gl_container"))).on("stateChanged",e.debounce("stateChanged",(function(){if(n.isInitialised&&n.openPopouts.every((function(e){return e.isInitialised}))&&!n.isSubWindow){var e=n.toConfig(),t=JSON.stringify(e);sessionStorage.setItem("savedState",t)}}),500)),n.isSubWindow||n.eventHub.on("create-window-in-main",(function(t){var n=JSON.parse(t);e.addContentItem(n)})),n.registerComponent("testComponent",(function(e,t){e.getElement().html("

"+t.label+"

")})),n.registerComponent("SettingsComponent",(function(t,n){var r=new k(e,t,n);Re(t.getElement()).load("settings_view.html",(function(){r.get_settings()}))})),n.registerComponent("PerfTimesComponent",(function(t,n){var r=new de(e,t,n);r.setupEvents(e.getCurrentProject()),r.create()})),n.registerComponent("InstControlComponent",(function(t,n){var r=new he(e,t,n);r.setupEvents(e.getCurrentProject()),r.create()})),n.registerComponent("RooflineComponent",(function(t,n){var r=new Ie(e,t,n);r.setupEvents(e.getCurrentProject()),r.create()})),n.registerComponent("SDFGComponent",(function(t,n){var r=new W(e,t,n);r.create_renderer_pane(n.sdfg_data),r.setupEvents(e.getCurrentProject())})),n.registerComponent("TransformationHistoryComponent",(function(t,n){var r=new ie(e,t,n);r.setupEvents(e.getCurrentProject());var i=r.project().getTransformationHistory();r.create(i)})),n.registerComponent("AvailableTransformationsComponent",(function(t,n){var r=new ue(e,t,n);r.setupEvents(e.getCurrentProject()),r.create()})),n.registerComponent("CodeInComponent",(function(t,n){var r=new D(e,t,n),i="code_in_"+r.created,o=Re(t.getElement()),s=Re("
");o.append(s),o.hide().show(0),function(){var o=s;o.attr("id",i),o.text(n.code_content),o.hide().show(0);var u=ace.edit(s[0]);u.setTheme(a.C.themeString()),u.session.setMode("ace/mode/python"),u.getSession().on("change",(function(){t.extendState({code_content:u.getValue()})})),Le(s[0],(function(e,t){console.log("File dropped",e,t),u.setValue(t),u.clearSelection()})),u.resize(),u.commands.addCommand({name:"Compile",bindKey:{win:"Ctrl-P",mac:"Command-P"},exec:function(e){alert("Compile pressed"),r.compile(e.getValue())},readOnly:!0}),u.commands.addCommand({name:"Compile and Run",bindKey:{win:"Alt-R",mac:"Alt-R"},exec:function(e){alert("Compile & Run pressed"),r.compile_and_run(e.getValue())},readOnly:!0}),r.setEditorReference(u),r.setupEvents(e.getCurrentProject())}()})),n.registerComponent("CodeOutComponent",(function(t,n){var r=new L(e,t,n),i="code_out_"+r.created,o=Re(t.getElement()),s=Re("
");o.append(s),o.hide().show(0),function(){var t=s;t.attr("id",i),t.hide().show(0);var n=ace.edit(s[0]);n.setTheme(a.C.themeString()),n.session.setMode("ace/mode/c_cpp"),n.setReadOnly(!0),r.setEditorReference(n),r.setupEvents(e.getCurrentProject());var o=r.getState().code;r.setCode(o),n.resize()}()})),n.registerComponent("ErrorComponent",(function(t,n){var r=new ce(e,t,n),i="error_"+r.created,o=Re(t.getElement()),s=Re("
");o.append(s),o.hide().show(0),function(){var t=s;t.attr("id",i),t.hide().show(0);var n=ace.edit(s[0]);n.setTheme(a.C.themeString()),n.session.setMode("ace/mode/python"),r.setEditorReference(n),r.setupEvents(e.getCurrentProject());var o=r.getState().error;r.setError(o),n.resize()}()})),n.registerComponent("TerminalComponent",(function(t,r){var i=new j(e,t,r),o="terminal_"+i.created,s=Re(t.getElement()),u=Re("
");s.append(u),s.hide().show(0),u.hide().show(0);var l=ace.edit(u[0]);l.setTheme(a.C.themeString()),l.session.setMode("ace/mode/sh"),l.setReadOnly(!0);var c=i.getState().current_value;void 0!==c&&l.setValue(c),l.clearSelection(),i.setEditorReference(l),console.log("Client listening to",o),n.eventHub.on(o,(function(e){i.append(e)})),i.setupEvents(e.getCurrentProject())})),n.registerComponent("DIODESettingsComponent",(function(t,n){var r=new C(e,t,n),i="diode_settings"+r.created,a=Re(t.getElement()),o=Re("
");o.append("

DIODE settings

"),r.setContainer(o),a.append(o)})),n.registerComponent("RunConfigComponent",(function(t,n){var r=new fe(e,t,n);r.setupEvents(e.getCurrentProject()),r.create()})),n.registerComponent("PropWinComponent",(function(t,n){var r=new $(e,t,n),i=document.createElement("div");i.classList.add("sdfgpropdiv"),i.style="width: 100%; height: 100%",Re(t.getElement()).append(i),r.setupEvents(e.getCurrentProject()),r.createFromState()})),n.registerComponent("StartPageComponent",(function(t,n){var r=new ee(e,t,n);r.setupEvents(e.getCurrentProject()),r.create()})),n.registerComponent("RunqueueComponent",(function(t,n){var r=new Y(e,t,n);r.setupEvents(e.getCurrentProject()),r.create()})),n.on("itemDestroyed",(function(e){if(void 0!==e.config.componentState){var t=e.config.componentState.created;n.eventHub.emit("destroy-"+t),console.log("itemDestroyed",e)}})),e.setLayout(n),e.getProject(),n.init(),window.addEventListener("resize",(function(e){n.updateSize()})),document.body.addEventListener("keydown",(function(t){e.onKeyDown(t)})),document.body.addEventListener("keyup",(function(t){e.onKeyUp(t)})),e.addKeyShortcut("gg",(function(){e.groupOptGraph(),e.groupSDFGsAndCodeOutsTogether()})),e.addKeyShortcut("gd",(function(){e.groupLikeDIODE1()})),e.addKeyShortcut("0",(function(){e.open_diode_settings()})),e.addKeyShortcut("r",(function(){e.gatherProjectElementsAndCompile(e,{},{sdfg_over_code:!0})})),e.addKeyShortcut("s",(function(){e.project().save()}),!1,!0),e.setupEvents(),Le(Re("#diode_gl_container")[0].firstChild,(function(t,n){console.log("File dropped",t,n);var r={type:"component",componentName:"CodeInComponent",componentState:{code_content:n}};e.addContentItem(r)}),void 0,{readMode:"text",condition:function(e){return 0==e.childNodes.length}})}();var Ue=function(){function e(){(0,r.Z)(this,e)}return(0,i.Z)(e,null,[{key:"createContainer",value:function(e){var t=document.createElement("div");return t.id=e,t.classList="settings_key_value",Re(t)}},{key:"createHostInput",value:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:["localhost"],r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"localhost",i=document.createElement("input");i.type="list",i.id=e;var a=document.getElementById("hosttype-dlist");a||((a=document.createElement("datalist")).id="hosttype-dlist",document.body.appendChild(a)),Re(i).attr("list","hosttype-dlist"),a.innerHTML="";var o,s=De(n);try{for(s.s();!(o=s.n()).done;){var u=o.value;a.innerHTML+='