{"ast":null,"code":"import _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\n\nfunction _createForOfIteratorHelper(o) { if (typeof Symbol === \"undefined\" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (o = _unsupportedIterableToArray(o))) { var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } 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 it, normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it[\"return\"] != null) it[\"return\"](); } finally { if (didErr) throw err; } } }; }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(n); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nimport { NodeType } from './types';\nvar OP_NODE_PREFIX = 'opNode_';\n/* misc */\n\nvar genNodeUID = function genNodeUID(type, id) {\n  switch (type) {\n    case NodeType.Op:\n      return \"\".concat(OP_NODE_PREFIX).concat(id);\n\n    case NodeType.Input:\n    case NodeType.Output:\n      return \"\".concat(id);\n  }\n};\n\nvar assignNodeUID = function assignNodeUID(type, node) {\n  var process = function process(node, i) {\n    var uid = genNodeUID(type, i);\n    return _objectSpread({}, node, {\n      uid: uid\n    });\n  };\n\n  return node.map(process);\n};\n\nvar createNodeFinder = function createNodeFinder(graph) {\n  if (!graph) {\n    return function () {\n      return undefined;\n    };\n  }\n\n  var reverseInputIdx = graph.input.reduce(function (memo, input, i) {\n    memo[genNodeUID(NodeType.Input, input.name)] = i;\n    return memo;\n  }, {});\n  var reverseOutputIdx = graph.output.reduce(function (memo, input, i) {\n    memo[genNodeUID(NodeType.Output, input.name)] = i;\n    return memo;\n  }, {});\n  return function (type, nodeUID) {\n    switch (type) {\n      case NodeType.Input:\n        {\n          var idx = reverseInputIdx[nodeUID];\n          return idx == undefined ? undefined : graph.input[idx];\n        }\n\n      case NodeType.Output:\n        {\n          var _idx = reverseOutputIdx[nodeUID];\n          return _idx == undefined ? undefined : graph.output[_idx];\n        }\n\n      case NodeType.Op:\n        {\n          var _idx2 = +nodeUID.replace(OP_NODE_PREFIX, '');\n\n          return graph.node[_idx2];\n        }\n    }\n  };\n};\n\nvar relationPush = function relationPush(nodeRelationMapping, nodeUID, key, value) {\n  var leaf = nodeRelationMapping[nodeUID] || {\n    input: [],\n    output: []\n  };\n  leaf[key].push(value);\n  nodeRelationMapping[nodeUID] = leaf;\n};\n\nvar traverseRelation = function traverseRelation(nodeMapping, process) {\n  var _loop = function _loop() {\n    var _Object$entries$_i = _slicedToArray(_Object$entries[_i], 2),\n        nodeUID = _Object$entries$_i[0],\n        relations = _Object$entries$_i[1];\n\n    var input = relations.input,\n        output = relations.output;\n    input.forEach(function (inputTo) {\n      output.forEach(function (outputTo) {\n        process(nodeUID, inputTo, outputTo);\n      });\n    });\n  };\n\n  for (var _i = 0, _Object$entries = Object.entries(nodeMapping); _i < _Object$entries.length; _i++) {\n    _loop();\n  }\n};\n\nvar buildNodeRelationMapping = function buildNodeRelationMapping(nodeList) {\n  return nodeList.reduce(function (memo, node) {\n    var uid = node.uid; // reverse\n\n    (node.output || []).forEach(function (v) {\n      return relationPush(memo, v, 'input', uid);\n    });\n    (node.input || []).forEach(function (v) {\n      return relationPush(memo, v, 'output', uid);\n    });\n    return memo;\n  }, {});\n};\n\nvar expandRelations = function expandRelations(nodeMapping) {\n  var briefLayer = {\n    nodes: [],\n    edges: []\n  }; // a tmp node the middle man between input & output\n\n  var detailLayer = {\n    nodes: [],\n    edges: []\n  };\n  traverseRelation(nodeMapping, function (bridge, inputTo, outputTo) {\n    detailLayer.nodes.push({\n      key: bridge,\n      label: bridge,\n      shape: 'diamond',\n      \"class\": 'output',\n      type: NodeType.Output\n    });\n    detailLayer.edges.push([inputTo, bridge]);\n    detailLayer.edges.push([bridge, outputTo]);\n    briefLayer.edges.push([inputTo, outputTo]);\n  });\n  return {\n    briefLayer: briefLayer,\n    detailLayer: detailLayer\n  };\n};\n\nvar extractInputLayer = function extractInputLayer(nodeRelationMapping, findNode) {\n  var nodes = [];\n  var edges = [];\n\n  var _loop2 = function _loop2() {\n    var _Object$entries2$_i = _slicedToArray(_Object$entries2[_i2], 2),\n        nodeUID = _Object$entries2$_i[0],\n        relations = _Object$entries2$_i[1];\n\n    if (relations.input.length !== 0) {\n      return \"continue\";\n    }\n\n    var sepIdx = nodeUID.indexOf('@');\n    var inputNodeUID = sepIdx > 0 ? nodeUID.slice(0, sepIdx) : nodeUID;\n    var inputNode = findNode(NodeType.Input, inputNodeUID);\n    nodes.push({\n      key: inputNodeUID,\n      type: NodeType.Input,\n      label: \"\\nid: \".concat(inputNode.name, \"\\ntype: \").concat(inputNode.data_type, \"\\ndims: \").concat(inputNode.shape.join(' × '), \"\\n\"),\n      shape: 'rect',\n      \"class\": 'input'\n    });\n    relations.output.forEach(function (o) {\n      return edges.push([inputNodeUID, o]);\n    });\n  };\n\n  for (var _i2 = 0, _Object$entries2 = Object.entries(nodeRelationMapping); _i2 < _Object$entries2.length; _i2++) {\n    var _ret = _loop2();\n\n    if (_ret === \"continue\") continue;\n  }\n\n  return {\n    nodes: nodes,\n    edges: edges\n  };\n};\n\nvar extractOutputLayer = function extractOutputLayer(nodeRelationMapping) {\n  var nodes = [];\n  var edges = [];\n\n  for (var _i3 = 0, _Object$entries3 = Object.entries(nodeRelationMapping); _i3 < _Object$entries3.length; _i3++) {\n    var _Object$entries3$_i = _slicedToArray(_Object$entries3[_i3], 2),\n        _nodeUID = _Object$entries3$_i[0],\n        relations = _Object$entries3$_i[1];\n\n    if (relations.output.length !== 0) {\n      continue;\n    }\n\n    nodes.push({\n      key: _nodeUID,\n      type: NodeType.Output,\n      label: _nodeUID,\n      shape: 'diamond',\n      \"class\": 'output'\n    });\n\n    var _iterator = _createForOfIteratorHelper(relations.input),\n        _step;\n\n    try {\n      for (_iterator.s(); !(_step = _iterator.n()).done;) {\n        var inputNode = _step.value;\n        edges.push([_nodeUID, inputNode]);\n      }\n    } catch (err) {\n      _iterator.e(err);\n    } finally {\n      _iterator.f();\n    }\n  }\n\n  return {\n    nodes: nodes,\n    edges: edges\n  };\n};\n\nexport var collectDagFacts = function collectDagFacts(graph) {\n  var findNode = createNodeFinder(graph);\n  var nodeList = assignNodeUID(NodeType.Op, graph ? graph.node : []);\n  var nodeRelationMapping = buildNodeRelationMapping(nodeList);\n  var inputLayer = extractInputLayer(nodeRelationMapping, findNode);\n  var outputLayer = extractOutputLayer(nodeRelationMapping);\n  var backboneNodes = nodeList.map(function (n) {\n    return {\n      key: n.uid,\n      type: NodeType.Op,\n      label: n.opType,\n      shape: 'rect',\n      \"class\": 'operator'\n    };\n  });\n\n  var _expandRelations = expandRelations(nodeRelationMapping),\n      bl = _expandRelations.briefLayer,\n      dl = _expandRelations.detailLayer;\n\n  var briefLayer = {\n    nodes: backboneNodes,\n    edges: bl.edges\n  };\n  var detailLayer = {\n    nodes: briefLayer.nodes.concat(dl.nodes),\n    edges: dl.edges\n  };\n  return {\n    briefLayer: briefLayer,\n    detailLayer: detailLayer,\n    inputLayer: inputLayer,\n    outputLayer: outputLayer,\n    findNode: findNode\n  };\n};","map":null,"metadata":{},"sourceType":"module"}