{"version":3,"file":"948-a72eac494ce65a7ee317.js","mappings":"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","sources":["webpack:///./node_modules/lodash-es/findIndex.js","webpack:///./node_modules/lodash-es/find.js","webpack:///./node_modules/lodash-es/_createFind.js","webpack:///./node_modules/lodash-es/uniqueId.js","webpack:///./node_modules/lodash-es/_baseRange.js","webpack:///./node_modules/lodash-es/range.js","webpack:///./node_modules/lodash-es/_createRange.js","webpack:///./node_modules/dagre-d3-es/src/dagre/data/list.js","webpack:///./node_modules/dagre-d3-es/src/dagre/greedy-fas.js","webpack:///./node_modules/dagre-d3-es/src/dagre/acyclic.js","webpack:///./node_modules/lodash-es/pick.js","webpack:///./node_modules/lodash-es/_flatRest.js","webpack:///./node_modules/lodash-es/_basePick.js","webpack:///./node_modules/lodash-es/_baseGt.js","webpack:///./node_modules/lodash-es/max.js","webpack:///./node_modules/lodash-es/mapValues.js","webpack:///./node_modules/lodash-es/now.js","webpack:///./node_modules/dagre-d3-es/src/dagre/util.js","webpack:///./node_modules/dagre-d3-es/src/dagre/add-border-segments.js","webpack:///./node_modules/dagre-d3-es/src/dagre/coordinate-system.js","webpack:///./node_modules/lodash-es/minBy.js","webpack:///./node_modules/dagre-d3-es/src/dagre/rank/util.js","webpack:///./node_modules/dagre-d3-es/src/dagre/rank/feasible-tree.js","webpack:///./node_modules/dagre-d3-es/src/graphlib/alg/dijkstra.js","webpack:///./node_modules/dagre-d3-es/src/graphlib/alg/floyd-warshall.js","webpack:///./node_modules/lodash-es/_asciiSize.js","webpack:///./node_modules/lodash-es/_hasUnicode.js","webpack:///./node_modules/lodash-es/_unicodeSize.js","webpack:///./node_modules/dagre-d3-es/src/graphlib/alg/topsort.js","webpack:///./node_modules/dagre-d3-es/src/graphlib/alg/dfs.js","webpack:///./node_modules/dagre-d3-es/src/dagre/rank/network-simplex.js","webpack:///./node_modules/dagre-d3-es/src/graphlib/alg/postorder.js","webpack:///./node_modules/dagre-d3-es/src/graphlib/alg/preorder.js","webpack:///./node_modules/dagre-d3-es/src/dagre/rank/index.js","webpack:///./node_modules/dagre-d3-es/src/dagre/nesting-graph.js","webpack:///./node_modules/lodash-es/cloneDeep.js","webpack:///./node_modules/lodash-es/_baseZipObject.js","webpack:///./node_modules/lodash-es/zipObject.js","webpack:///./node_modules/lodash-es/_compareAscending.js","webpack:///./node_modules/lodash-es/_baseOrderBy.js","webpack:///./node_modules/lodash-es/_baseSortBy.js","webpack:///./node_modules/lodash-es/_compareMultiple.js","webpack:///./node_modules/lodash-es/sortBy.js","webpack:///./node_modules/dagre-d3-es/src/dagre/order/cross-count.js","webpack:///./node_modules/dagre-d3-es/src/dagre/order/sort.js","webpack:///./node_modules/dagre-d3-es/src/dagre/order/sort-subgraph.js","webpack:///./node_modules/dagre-d3-es/src/dagre/order/barycenter.js","webpack:///./node_modules/dagre-d3-es/src/dagre/order/resolve-conflicts.js","webpack:///./node_modules/dagre-d3-es/src/dagre/order/index.js","webpack:///./node_modules/dagre-d3-es/src/dagre/order/build-layer-graph.js","webpack:///./node_modules/dagre-d3-es/src/dagre/order/add-subgraph-constraints.js","webpack:///./node_modules/lodash-es/forOwn.js","webpack:///./node_modules/lodash-es/forIn.js","webpack:///./node_modules/dagre-d3-es/src/dagre/position/bk.js","webpack:///./node_modules/dagre-d3-es/src/dagre/layout.js","webpack:///./node_modules/dagre-d3-es/src/dagre/normalize.js","webpack:///./node_modules/dagre-d3-es/src/dagre/parent-dummy-chains.js","webpack:///./node_modules/dagre-d3-es/src/dagre/order/init-order.js","webpack:///./node_modules/dagre-d3-es/src/dagre/position/index.js","webpack:///./node_modules/lodash-es/union.js","webpack:///./node_modules/dagre-d3-es/src/graphlib/graph.js","webpack:///./node_modules/lodash-es/_baseExtremum.js","webpack:///./node_modules/lodash-es/_baseMap.js","webpack:///./node_modules/lodash-es/defaults.js","webpack:///./node_modules/lodash-es/_trimmedEndIndex.js","webpack:///./node_modules/lodash-es/_baseTrim.js","webpack:///./node_modules/lodash-es/toNumber.js","webpack:///./node_modules/lodash-es/toFinite.js","webpack:///./node_modules/lodash-es/flatten.js","webpack:///./node_modules/lodash-es/map.js","webpack:///./node_modules/lodash-es/_baseSet.js","webpack:///./node_modules/lodash-es/_basePickBy.js","webpack:///./node_modules/lodash-es/_baseLt.js","webpack:///./node_modules/lodash-es/min.js","webpack:///./node_modules/lodash-es/last.js","webpack:///./node_modules/lodash-es/toInteger.js","webpack:///./node_modules/lodash-es/_baseHas.js","webpack:///./node_modules/lodash-es/has.js","webpack:///./node_modules/lodash-es/isString.js"],"sourcesContent":["import baseFindIndex from './_baseFindIndex.js';\nimport baseIteratee from './_baseIteratee.js';\nimport toInteger from './toInteger.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * This method is like `_.find` except that it returns the index of the first\n * element `predicate` returns truthy for instead of the element itself.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {number} Returns the index of the found element, else `-1`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': false },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.findIndex(users, function(o) { return o.user == 'barney'; });\n * // => 0\n *\n * // The `_.matches` iteratee shorthand.\n * _.findIndex(users, { 'user': 'fred', 'active': false });\n * // => 1\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findIndex(users, ['active', false]);\n * // => 0\n *\n * // The `_.property` iteratee shorthand.\n * _.findIndex(users, 'active');\n * // => 2\n */\nfunction findIndex(array, predicate, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = fromIndex == null ? 0 : toInteger(fromIndex);\n if (index < 0) {\n index = nativeMax(length + index, 0);\n }\n return baseFindIndex(array, baseIteratee(predicate, 3), index);\n}\n\nexport default findIndex;\n","import createFind from './_createFind.js';\nimport findIndex from './findIndex.js';\n\n/**\n * Iterates over elements of `collection`, returning the first element\n * `predicate` returns truthy for. The predicate is invoked with three\n * arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {*} Returns the matched element, else `undefined`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': true },\n * { 'user': 'fred', 'age': 40, 'active': false },\n * { 'user': 'pebbles', 'age': 1, 'active': true }\n * ];\n *\n * _.find(users, function(o) { return o.age < 40; });\n * // => object for 'barney'\n *\n * // The `_.matches` iteratee shorthand.\n * _.find(users, { 'age': 1, 'active': true });\n * // => object for 'pebbles'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.find(users, ['active', false]);\n * // => object for 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.find(users, 'active');\n * // => object for 'barney'\n */\nvar find = createFind(findIndex);\n\nexport default find;\n","import baseIteratee from './_baseIteratee.js';\nimport isArrayLike from './isArrayLike.js';\nimport keys from './keys.js';\n\n/**\n * Creates a `_.find` or `_.findLast` function.\n *\n * @private\n * @param {Function} findIndexFunc The function to find the collection index.\n * @returns {Function} Returns the new find function.\n */\nfunction createFind(findIndexFunc) {\n return function(collection, predicate, fromIndex) {\n var iterable = Object(collection);\n if (!isArrayLike(collection)) {\n var iteratee = baseIteratee(predicate, 3);\n collection = keys(collection);\n predicate = function(key) { return iteratee(iterable[key], key, iterable); };\n }\n var index = findIndexFunc(collection, predicate, fromIndex);\n return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined;\n };\n}\n\nexport default createFind;\n","import toString from './toString.js';\n\n/** Used to generate unique IDs. */\nvar idCounter = 0;\n\n/**\n * Generates a unique ID. If `prefix` is given, the ID is appended to it.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {string} [prefix=''] The value to prefix the ID with.\n * @returns {string} Returns the unique ID.\n * @example\n *\n * _.uniqueId('contact_');\n * // => 'contact_104'\n *\n * _.uniqueId();\n * // => '105'\n */\nfunction uniqueId(prefix) {\n var id = ++idCounter;\n return toString(prefix) + id;\n}\n\nexport default uniqueId;\n","/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeCeil = Math.ceil,\n nativeMax = Math.max;\n\n/**\n * The base implementation of `_.range` and `_.rangeRight` which doesn't\n * coerce arguments.\n *\n * @private\n * @param {number} start The start of the range.\n * @param {number} end The end of the range.\n * @param {number} step The value to increment or decrement by.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Array} Returns the range of numbers.\n */\nfunction baseRange(start, end, step, fromRight) {\n var index = -1,\n length = nativeMax(nativeCeil((end - start) / (step || 1)), 0),\n result = Array(length);\n\n while (length--) {\n result[fromRight ? length : ++index] = start;\n start += step;\n }\n return result;\n}\n\nexport default baseRange;\n","import createRange from './_createRange.js';\n\n/**\n * Creates an array of numbers (positive and/or negative) progressing from\n * `start` up to, but not including, `end`. A step of `-1` is used if a negative\n * `start` is specified without an `end` or `step`. If `end` is not specified,\n * it's set to `start` with `start` then set to `0`.\n *\n * **Note:** JavaScript follows the IEEE-754 standard for resolving\n * floating-point values which can produce unexpected results.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {number} [start=0] The start of the range.\n * @param {number} end The end of the range.\n * @param {number} [step=1] The value to increment or decrement by.\n * @returns {Array} Returns the range of numbers.\n * @see _.inRange, _.rangeRight\n * @example\n *\n * _.range(4);\n * // => [0, 1, 2, 3]\n *\n * _.range(-4);\n * // => [0, -1, -2, -3]\n *\n * _.range(1, 5);\n * // => [1, 2, 3, 4]\n *\n * _.range(0, 20, 5);\n * // => [0, 5, 10, 15]\n *\n * _.range(0, -4, -1);\n * // => [0, -1, -2, -3]\n *\n * _.range(1, 4, 0);\n * // => [1, 1, 1]\n *\n * _.range(0);\n * // => []\n */\nvar range = createRange();\n\nexport default range;\n","import baseRange from './_baseRange.js';\nimport isIterateeCall from './_isIterateeCall.js';\nimport toFinite from './toFinite.js';\n\n/**\n * Creates a `_.range` or `_.rangeRight` function.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new range function.\n */\nfunction createRange(fromRight) {\n return function(start, end, step) {\n if (step && typeof step != 'number' && isIterateeCall(start, end, step)) {\n end = step = undefined;\n }\n // Ensure the sign of `-0` is preserved.\n start = toFinite(start);\n if (end === undefined) {\n end = start;\n start = 0;\n } else {\n end = toFinite(end);\n }\n step = step === undefined ? (start < end ? 1 : -1) : toFinite(step);\n return baseRange(start, end, step, fromRight);\n };\n}\n\nexport default createRange;\n","/*\n * Simple doubly linked list implementation derived from Cormen, et al.,\n * \"Introduction to Algorithms\".\n */\n\nexport { List };\n\nclass List {\n constructor() {\n var sentinel = {};\n sentinel._next = sentinel._prev = sentinel;\n this._sentinel = sentinel;\n }\n dequeue() {\n var sentinel = this._sentinel;\n var entry = sentinel._prev;\n if (entry !== sentinel) {\n unlink(entry);\n return entry;\n }\n }\n enqueue(entry) {\n var sentinel = this._sentinel;\n if (entry._prev && entry._next) {\n unlink(entry);\n }\n entry._next = sentinel._next;\n sentinel._next._prev = entry;\n sentinel._next = entry;\n entry._prev = sentinel;\n }\n toString() {\n var strs = [];\n var sentinel = this._sentinel;\n var curr = sentinel._prev;\n while (curr !== sentinel) {\n strs.push(JSON.stringify(curr, filterOutLinks));\n curr = curr._prev;\n }\n return '[' + strs.join(', ') + ']';\n }\n}\n\nfunction unlink(entry) {\n entry._prev._next = entry._next;\n entry._next._prev = entry._prev;\n delete entry._next;\n delete entry._prev;\n}\n\nfunction filterOutLinks(k, v) {\n if (k !== '_next' && k !== '_prev') {\n return v;\n }\n}\n","import * as _ from 'lodash-es';\nimport { Graph } from '../graphlib/index.js';\nimport { List } from './data/list.js';\n\n/*\n * A greedy heuristic for finding a feedback arc set for a graph. A feedback\n * arc set is a set of edges that can be removed to make a graph acyclic.\n * The algorithm comes from: P. Eades, X. Lin, and W. F. Smyth, \"A fast and\n * effective heuristic for the feedback arc set problem.\" This implementation\n * adjusts that from the paper to allow for weighted edges.\n */\nexport { greedyFAS };\n\nvar DEFAULT_WEIGHT_FN = _.constant(1);\n\nfunction greedyFAS(g, weightFn) {\n if (g.nodeCount() <= 1) {\n return [];\n }\n var state = buildState(g, weightFn || DEFAULT_WEIGHT_FN);\n var results = doGreedyFAS(state.graph, state.buckets, state.zeroIdx);\n\n // Expand multi-edges\n return _.flatten(\n _.map(results, function (e) {\n return g.outEdges(e.v, e.w);\n }),\n );\n}\n\nfunction doGreedyFAS(g, buckets, zeroIdx) {\n var results = [];\n var sources = buckets[buckets.length - 1];\n var sinks = buckets[0];\n\n var entry;\n while (g.nodeCount()) {\n while ((entry = sinks.dequeue())) {\n removeNode(g, buckets, zeroIdx, entry);\n }\n while ((entry = sources.dequeue())) {\n removeNode(g, buckets, zeroIdx, entry);\n }\n if (g.nodeCount()) {\n for (var i = buckets.length - 2; i > 0; --i) {\n entry = buckets[i].dequeue();\n if (entry) {\n results = results.concat(removeNode(g, buckets, zeroIdx, entry, true));\n break;\n }\n }\n }\n }\n\n return results;\n}\n\nfunction removeNode(g, buckets, zeroIdx, entry, collectPredecessors) {\n var results = collectPredecessors ? [] : undefined;\n\n _.forEach(g.inEdges(entry.v), function (edge) {\n var weight = g.edge(edge);\n var uEntry = g.node(edge.v);\n\n if (collectPredecessors) {\n results.push({ v: edge.v, w: edge.w });\n }\n\n uEntry.out -= weight;\n assignBucket(buckets, zeroIdx, uEntry);\n });\n\n _.forEach(g.outEdges(entry.v), function (edge) {\n var weight = g.edge(edge);\n var w = edge.w;\n var wEntry = g.node(w);\n wEntry['in'] -= weight;\n assignBucket(buckets, zeroIdx, wEntry);\n });\n\n g.removeNode(entry.v);\n\n return results;\n}\n\nfunction buildState(g, weightFn) {\n var fasGraph = new Graph();\n var maxIn = 0;\n var maxOut = 0;\n\n _.forEach(g.nodes(), function (v) {\n fasGraph.setNode(v, { v: v, in: 0, out: 0 });\n });\n\n // Aggregate weights on nodes, but also sum the weights across multi-edges\n // into a single edge for the fasGraph.\n _.forEach(g.edges(), function (e) {\n var prevWeight = fasGraph.edge(e.v, e.w) || 0;\n var weight = weightFn(e);\n var edgeWeight = prevWeight + weight;\n fasGraph.setEdge(e.v, e.w, edgeWeight);\n maxOut = Math.max(maxOut, (fasGraph.node(e.v).out += weight));\n maxIn = Math.max(maxIn, (fasGraph.node(e.w)['in'] += weight));\n });\n\n var buckets = _.range(maxOut + maxIn + 3).map(function () {\n return new List();\n });\n var zeroIdx = maxIn + 1;\n\n _.forEach(fasGraph.nodes(), function (v) {\n assignBucket(buckets, zeroIdx, fasGraph.node(v));\n });\n\n return { graph: fasGraph, buckets: buckets, zeroIdx: zeroIdx };\n}\n\nfunction assignBucket(buckets, zeroIdx, entry) {\n if (!entry.out) {\n buckets[0].enqueue(entry);\n } else if (!entry['in']) {\n buckets[buckets.length - 1].enqueue(entry);\n } else {\n buckets[entry.out - entry['in'] + zeroIdx].enqueue(entry);\n }\n}\n","import * as _ from 'lodash-es';\nimport { greedyFAS } from './greedy-fas.js';\n\nexport { run, undo };\n\nfunction run(g) {\n var fas = g.graph().acyclicer === 'greedy' ? greedyFAS(g, weightFn(g)) : dfsFAS(g);\n _.forEach(fas, function (e) {\n var label = g.edge(e);\n g.removeEdge(e);\n label.forwardName = e.name;\n label.reversed = true;\n g.setEdge(e.w, e.v, label, _.uniqueId('rev'));\n });\n\n function weightFn(g) {\n return function (e) {\n return g.edge(e).weight;\n };\n }\n}\n\nfunction dfsFAS(g) {\n var fas = [];\n var stack = {};\n var visited = {};\n\n function dfs(v) {\n if (Object.prototype.hasOwnProperty.call(visited, v)) {\n return;\n }\n visited[v] = true;\n stack[v] = true;\n _.forEach(g.outEdges(v), function (e) {\n if (Object.prototype.hasOwnProperty.call(stack, e.w)) {\n fas.push(e);\n } else {\n dfs(e.w);\n }\n });\n delete stack[v];\n }\n\n _.forEach(g.nodes(), dfs);\n return fas;\n}\n\nfunction undo(g) {\n _.forEach(g.edges(), function (e) {\n var label = g.edge(e);\n if (label.reversed) {\n g.removeEdge(e);\n\n var forwardName = label.forwardName;\n delete label.reversed;\n delete label.forwardName;\n g.setEdge(e.w, e.v, label, forwardName);\n }\n });\n}\n","import basePick from './_basePick.js';\nimport flatRest from './_flatRest.js';\n\n/**\n * Creates an object composed of the picked `object` properties.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The source object.\n * @param {...(string|string[])} [paths] The property paths to pick.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.pick(object, ['a', 'c']);\n * // => { 'a': 1, 'c': 3 }\n */\nvar pick = flatRest(function(object, paths) {\n return object == null ? {} : basePick(object, paths);\n});\n\nexport default pick;\n","import flatten from './flatten.js';\nimport overRest from './_overRest.js';\nimport setToString from './_setToString.js';\n\n/**\n * A specialized version of `baseRest` which flattens the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @returns {Function} Returns the new function.\n */\nfunction flatRest(func) {\n return setToString(overRest(func, undefined, flatten), func + '');\n}\n\nexport default flatRest;\n","import basePickBy from './_basePickBy.js';\nimport hasIn from './hasIn.js';\n\n/**\n * The base implementation of `_.pick` without support for individual\n * property identifiers.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} paths The property paths to pick.\n * @returns {Object} Returns the new object.\n */\nfunction basePick(object, paths) {\n return basePickBy(object, paths, function(value, path) {\n return hasIn(object, path);\n });\n}\n\nexport default basePick;\n","/**\n * The base implementation of `_.gt` which doesn't coerce arguments.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is greater than `other`,\n * else `false`.\n */\nfunction baseGt(value, other) {\n return value > other;\n}\n\nexport default baseGt;\n","import baseExtremum from './_baseExtremum.js';\nimport baseGt from './_baseGt.js';\nimport identity from './identity.js';\n\n/**\n * Computes the maximum value of `array`. If `array` is empty or falsey,\n * `undefined` is returned.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Math\n * @param {Array} array The array to iterate over.\n * @returns {*} Returns the maximum value.\n * @example\n *\n * _.max([4, 2, 8, 6]);\n * // => 8\n *\n * _.max([]);\n * // => undefined\n */\nfunction max(array) {\n return (array && array.length)\n ? baseExtremum(array, identity, baseGt)\n : undefined;\n}\n\nexport default max;\n","import baseAssignValue from './_baseAssignValue.js';\nimport baseForOwn from './_baseForOwn.js';\nimport baseIteratee from './_baseIteratee.js';\n\n/**\n * Creates an object with the same keys as `object` and values generated\n * by running each own enumerable string keyed property of `object` thru\n * `iteratee`. The iteratee is invoked with three arguments:\n * (value, key, object).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns the new mapped object.\n * @see _.mapKeys\n * @example\n *\n * var users = {\n * 'fred': { 'user': 'fred', 'age': 40 },\n * 'pebbles': { 'user': 'pebbles', 'age': 1 }\n * };\n *\n * _.mapValues(users, function(o) { return o.age; });\n * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n *\n * // The `_.property` iteratee shorthand.\n * _.mapValues(users, 'age');\n * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n */\nfunction mapValues(object, iteratee) {\n var result = {};\n iteratee = baseIteratee(iteratee, 3);\n\n baseForOwn(object, function(value, key, object) {\n baseAssignValue(result, key, iteratee(value, key, object));\n });\n return result;\n}\n\nexport default mapValues;\n","import root from './_root.js';\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\nexport default now;\n","import * as _ from 'lodash-es';\nimport { Graph } from '../graphlib/index.js';\n\nexport {\n addDummyNode,\n simplify,\n asNonCompoundGraph,\n successorWeights,\n predecessorWeights,\n intersectRect,\n buildLayerMatrix,\n normalizeRanks,\n removeEmptyRanks,\n addBorderNode,\n maxRank,\n partition,\n time,\n notime,\n};\n\n/*\n * Adds a dummy node to the graph and return v.\n */\nfunction addDummyNode(g, type, attrs, name) {\n var v;\n do {\n v = _.uniqueId(name);\n } while (g.hasNode(v));\n\n attrs.dummy = type;\n g.setNode(v, attrs);\n return v;\n}\n\n/*\n * Returns a new graph with only simple edges. Handles aggregation of data\n * associated with multi-edges.\n */\nfunction simplify(g) {\n var simplified = new Graph().setGraph(g.graph());\n _.forEach(g.nodes(), function (v) {\n simplified.setNode(v, g.node(v));\n });\n _.forEach(g.edges(), function (e) {\n var simpleLabel = simplified.edge(e.v, e.w) || { weight: 0, minlen: 1 };\n var label = g.edge(e);\n simplified.setEdge(e.v, e.w, {\n weight: simpleLabel.weight + label.weight,\n minlen: Math.max(simpleLabel.minlen, label.minlen),\n });\n });\n return simplified;\n}\n\nfunction asNonCompoundGraph(g) {\n var simplified = new Graph({ multigraph: g.isMultigraph() }).setGraph(g.graph());\n _.forEach(g.nodes(), function (v) {\n if (!g.children(v).length) {\n simplified.setNode(v, g.node(v));\n }\n });\n _.forEach(g.edges(), function (e) {\n simplified.setEdge(e, g.edge(e));\n });\n return simplified;\n}\n\nfunction successorWeights(g) {\n var weightMap = _.map(g.nodes(), function (v) {\n var sucs = {};\n _.forEach(g.outEdges(v), function (e) {\n sucs[e.w] = (sucs[e.w] || 0) + g.edge(e).weight;\n });\n return sucs;\n });\n return _.zipObject(g.nodes(), weightMap);\n}\n\nfunction predecessorWeights(g) {\n var weightMap = _.map(g.nodes(), function (v) {\n var preds = {};\n _.forEach(g.inEdges(v), function (e) {\n preds[e.v] = (preds[e.v] || 0) + g.edge(e).weight;\n });\n return preds;\n });\n return _.zipObject(g.nodes(), weightMap);\n}\n\n/*\n * Finds where a line starting at point ({x, y}) would intersect a rectangle\n * ({x, y, width, height}) if it were pointing at the rectangle's center.\n */\nfunction intersectRect(rect, point) {\n var x = rect.x;\n var y = rect.y;\n\n // Rectangle intersection algorithm from:\n // http://math.stackexchange.com/questions/108113/find-edge-between-two-boxes\n var dx = point.x - x;\n var dy = point.y - y;\n var w = rect.width / 2;\n var h = rect.height / 2;\n\n if (!dx && !dy) {\n throw new Error('Not possible to find intersection inside of the rectangle');\n }\n\n var sx, sy;\n if (Math.abs(dy) * w > Math.abs(dx) * h) {\n // Intersection is top or bottom of rect.\n if (dy < 0) {\n h = -h;\n }\n sx = (h * dx) / dy;\n sy = h;\n } else {\n // Intersection is left or right of rect.\n if (dx < 0) {\n w = -w;\n }\n sx = w;\n sy = (w * dy) / dx;\n }\n\n return { x: x + sx, y: y + sy };\n}\n\n/*\n * Given a DAG with each node assigned \"rank\" and \"order\" properties, this\n * function will produce a matrix with the ids of each node.\n */\nfunction buildLayerMatrix(g) {\n var layering = _.map(_.range(maxRank(g) + 1), function () {\n return [];\n });\n _.forEach(g.nodes(), function (v) {\n var node = g.node(v);\n var rank = node.rank;\n if (!_.isUndefined(rank)) {\n layering[rank][node.order] = v;\n }\n });\n return layering;\n}\n\n/*\n * Adjusts the ranks for all nodes in the graph such that all nodes v have\n * rank(v) >= 0 and at least one node w has rank(w) = 0.\n */\nfunction normalizeRanks(g) {\n var min = _.min(\n _.map(g.nodes(), function (v) {\n return g.node(v).rank;\n }),\n );\n _.forEach(g.nodes(), function (v) {\n var node = g.node(v);\n if (_.has(node, 'rank')) {\n node.rank -= min;\n }\n });\n}\n\nfunction removeEmptyRanks(g) {\n // Ranks may not start at 0, so we need to offset them\n var offset = _.min(\n _.map(g.nodes(), function (v) {\n return g.node(v).rank;\n }),\n );\n\n var layers = [];\n _.forEach(g.nodes(), function (v) {\n var rank = g.node(v).rank - offset;\n if (!layers[rank]) {\n layers[rank] = [];\n }\n layers[rank].push(v);\n });\n\n var delta = 0;\n var nodeRankFactor = g.graph().nodeRankFactor;\n _.forEach(layers, function (vs, i) {\n if (_.isUndefined(vs) && i % nodeRankFactor !== 0) {\n --delta;\n } else if (delta) {\n _.forEach(vs, function (v) {\n g.node(v).rank += delta;\n });\n }\n });\n}\n\nfunction addBorderNode(g, prefix, rank, order) {\n var node = {\n width: 0,\n height: 0,\n };\n if (arguments.length >= 4) {\n node.rank = rank;\n node.order = order;\n }\n return addDummyNode(g, 'border', node, prefix);\n}\n\nfunction maxRank(g) {\n return _.max(\n _.map(g.nodes(), function (v) {\n var rank = g.node(v).rank;\n if (!_.isUndefined(rank)) {\n return rank;\n }\n }),\n );\n}\n\n/*\n * Partition a collection into two groups: `lhs` and `rhs`. If the supplied\n * function returns true for an entry it goes into `lhs`. Otherwise it goes\n * into `rhs.\n */\nfunction partition(collection, fn) {\n var result = { lhs: [], rhs: [] };\n _.forEach(collection, function (value) {\n if (fn(value)) {\n result.lhs.push(value);\n } else {\n result.rhs.push(value);\n }\n });\n return result;\n}\n\n/*\n * Returns a new function that wraps `fn` with a timer. The wrapper logs the\n * time it takes to execute the function.\n */\nfunction time(name, fn) {\n var start = _.now();\n try {\n return fn();\n } finally {\n console.log(name + ' time: ' + (_.now() - start) + 'ms');\n }\n}\n\nfunction notime(name, fn) {\n return fn();\n}\n","import * as _ from 'lodash-es';\nimport * as util from './util.js';\n\nexport { addBorderSegments };\n\nfunction addBorderSegments(g) {\n function dfs(v) {\n var children = g.children(v);\n var node = g.node(v);\n if (children.length) {\n _.forEach(children, dfs);\n }\n\n if (Object.prototype.hasOwnProperty.call(node, 'minRank')) {\n node.borderLeft = [];\n node.borderRight = [];\n for (var rank = node.minRank, maxRank = node.maxRank + 1; rank < maxRank; ++rank) {\n addBorderNode(g, 'borderLeft', '_bl', v, node, rank);\n addBorderNode(g, 'borderRight', '_br', v, node, rank);\n }\n }\n }\n\n _.forEach(g.children(), dfs);\n}\n\nfunction addBorderNode(g, prop, prefix, sg, sgNode, rank) {\n var label = { width: 0, height: 0, rank: rank, borderType: prop };\n var prev = sgNode[prop][rank - 1];\n var curr = util.addDummyNode(g, 'border', label, prefix);\n sgNode[prop][rank] = curr;\n g.setParent(curr, sg);\n if (prev) {\n g.setEdge(prev, curr, { weight: 1 });\n }\n}\n","import * as _ from 'lodash-es';\n\nexport { adjust, undo };\n\nfunction adjust(g) {\n var rankDir = g.graph().rankdir.toLowerCase();\n if (rankDir === 'lr' || rankDir === 'rl') {\n swapWidthHeight(g);\n }\n}\n\nfunction undo(g) {\n var rankDir = g.graph().rankdir.toLowerCase();\n if (rankDir === 'bt' || rankDir === 'rl') {\n reverseY(g);\n }\n\n if (rankDir === 'lr' || rankDir === 'rl') {\n swapXY(g);\n swapWidthHeight(g);\n }\n}\n\nfunction swapWidthHeight(g) {\n _.forEach(g.nodes(), function (v) {\n swapWidthHeightOne(g.node(v));\n });\n _.forEach(g.edges(), function (e) {\n swapWidthHeightOne(g.edge(e));\n });\n}\n\nfunction swapWidthHeightOne(attrs) {\n var w = attrs.width;\n attrs.width = attrs.height;\n attrs.height = w;\n}\n\nfunction reverseY(g) {\n _.forEach(g.nodes(), function (v) {\n reverseYOne(g.node(v));\n });\n\n _.forEach(g.edges(), function (e) {\n var edge = g.edge(e);\n _.forEach(edge.points, reverseYOne);\n if (Object.prototype.hasOwnProperty.call(edge, 'y')) {\n reverseYOne(edge);\n }\n });\n}\n\nfunction reverseYOne(attrs) {\n attrs.y = -attrs.y;\n}\n\nfunction swapXY(g) {\n _.forEach(g.nodes(), function (v) {\n swapXYOne(g.node(v));\n });\n\n _.forEach(g.edges(), function (e) {\n var edge = g.edge(e);\n _.forEach(edge.points, swapXYOne);\n if (Object.prototype.hasOwnProperty.call(edge, 'x')) {\n swapXYOne(edge);\n }\n });\n}\n\nfunction swapXYOne(attrs) {\n var x = attrs.x;\n attrs.x = attrs.y;\n attrs.y = x;\n}\n","import baseExtremum from './_baseExtremum.js';\nimport baseIteratee from './_baseIteratee.js';\nimport baseLt from './_baseLt.js';\n\n/**\n * This method is like `_.min` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the criterion by which\n * the value is ranked. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Math\n * @param {Array} array The array to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {*} Returns the minimum value.\n * @example\n *\n * var objects = [{ 'n': 1 }, { 'n': 2 }];\n *\n * _.minBy(objects, function(o) { return o.n; });\n * // => { 'n': 1 }\n *\n * // The `_.property` iteratee shorthand.\n * _.minBy(objects, 'n');\n * // => { 'n': 1 }\n */\nfunction minBy(array, iteratee) {\n return (array && array.length)\n ? baseExtremum(array, baseIteratee(iteratee, 2), baseLt)\n : undefined;\n}\n\nexport default minBy;\n","import * as _ from 'lodash-es';\n\nexport { longestPath, slack };\n\n/*\n * Initializes ranks for the input graph using the longest path algorithm. This\n * algorithm scales well and is fast in practice, it yields rather poor\n * solutions. Nodes are pushed to the lowest layer possible, leaving the bottom\n * ranks wide and leaving edges longer than necessary. However, due to its\n * speed, this algorithm is good for getting an initial ranking that can be fed\n * into other algorithms.\n *\n * This algorithm does not normalize layers because it will be used by other\n * algorithms in most cases. If using this algorithm directly, be sure to\n * run normalize at the end.\n *\n * Pre-conditions:\n *\n * 1. Input graph is a DAG.\n * 2. Input graph node labels can be assigned properties.\n *\n * Post-conditions:\n *\n * 1. Each node will be assign an (unnormalized) \"rank\" property.\n */\nfunction longestPath(g) {\n var visited = {};\n\n function dfs(v) {\n var label = g.node(v);\n if (Object.prototype.hasOwnProperty.call(visited, v)) {\n return label.rank;\n }\n visited[v] = true;\n\n var rank = _.min(\n _.map(g.outEdges(v), function (e) {\n return dfs(e.w) - g.edge(e).minlen;\n }),\n );\n\n if (\n rank === Number.POSITIVE_INFINITY || // return value of _.map([]) for Lodash 3\n rank === undefined || // return value of _.map([]) for Lodash 4\n rank === null\n ) {\n // return value of _.map([null])\n rank = 0;\n }\n\n return (label.rank = rank);\n }\n\n _.forEach(g.sources(), dfs);\n}\n\n/*\n * Returns the amount of slack for the given edge. The slack is defined as the\n * difference between the length of the edge and its minimum length.\n */\nfunction slack(g, e) {\n return g.node(e.w).rank - g.node(e.v).rank - g.edge(e).minlen;\n}\n","import * as _ from 'lodash-es';\nimport { Graph } from '../../graphlib/index.js';\nimport { slack } from './util.js';\n\nexport { feasibleTree };\n\n/*\n * Constructs a spanning tree with tight edges and adjusted the input node's\n * ranks to achieve this. A tight edge is one that is has a length that matches\n * its \"minlen\" attribute.\n *\n * The basic structure for this function is derived from Gansner, et al., \"A\n * Technique for Drawing Directed Graphs.\"\n *\n * Pre-conditions:\n *\n * 1. Graph must be a DAG.\n * 2. Graph must be connected.\n * 3. Graph must have at least one node.\n * 5. Graph nodes must have been previously assigned a \"rank\" property that\n * respects the \"minlen\" property of incident edges.\n * 6. Graph edges must have a \"minlen\" property.\n *\n * Post-conditions:\n *\n * - Graph nodes will have their rank adjusted to ensure that all edges are\n * tight.\n *\n * Returns a tree (undirected graph) that is constructed using only \"tight\"\n * edges.\n */\nfunction feasibleTree(g) {\n var t = new Graph({ directed: false });\n\n // Choose arbitrary node from which to start our tree\n var start = g.nodes()[0];\n var size = g.nodeCount();\n t.setNode(start, {});\n\n var edge, delta;\n while (tightTree(t, g) < size) {\n edge = findMinSlackEdge(t, g);\n delta = t.hasNode(edge.v) ? slack(g, edge) : -slack(g, edge);\n shiftRanks(t, g, delta);\n }\n\n return t;\n}\n\n/*\n * Finds a maximal tree of tight edges and returns the number of nodes in the\n * tree.\n */\nfunction tightTree(t, g) {\n function dfs(v) {\n _.forEach(g.nodeEdges(v), function (e) {\n var edgeV = e.v,\n w = v === edgeV ? e.w : edgeV;\n if (!t.hasNode(w) && !slack(g, e)) {\n t.setNode(w, {});\n t.setEdge(v, w, {});\n dfs(w);\n }\n });\n }\n\n _.forEach(t.nodes(), dfs);\n return t.nodeCount();\n}\n\n/*\n * Finds the edge with the smallest slack that is incident on tree and returns\n * it.\n */\nfunction findMinSlackEdge(t, g) {\n return _.minBy(g.edges(), function (e) {\n if (t.hasNode(e.v) !== t.hasNode(e.w)) {\n return slack(g, e);\n }\n });\n}\n\nfunction shiftRanks(t, g, delta) {\n _.forEach(t.nodes(), function (v) {\n g.node(v).rank += delta;\n });\n}\n","import * as _ from 'lodash-es';\nimport { PriorityQueue } from '../data/priority-queue.js';\n\nexport { dijkstra };\n\nvar DEFAULT_WEIGHT_FUNC = _.constant(1);\n\nfunction dijkstra(g, source, weightFn, edgeFn) {\n return runDijkstra(\n g,\n String(source),\n weightFn || DEFAULT_WEIGHT_FUNC,\n edgeFn ||\n function (v) {\n return g.outEdges(v);\n },\n );\n}\n\nfunction runDijkstra(g, source, weightFn, edgeFn) {\n var results = {};\n var pq = new PriorityQueue();\n var v, vEntry;\n\n var updateNeighbors = function (edge) {\n var w = edge.v !== v ? edge.v : edge.w;\n var wEntry = results[w];\n var weight = weightFn(edge);\n var distance = vEntry.distance + weight;\n\n if (weight < 0) {\n throw new Error(\n 'dijkstra does not allow negative edge weights. ' +\n 'Bad edge: ' +\n edge +\n ' Weight: ' +\n weight,\n );\n }\n\n if (distance < wEntry.distance) {\n wEntry.distance = distance;\n wEntry.predecessor = v;\n pq.decrease(w, distance);\n }\n };\n\n g.nodes().forEach(function (v) {\n var distance = v === source ? 0 : Number.POSITIVE_INFINITY;\n results[v] = { distance: distance };\n pq.add(v, distance);\n });\n\n while (pq.size() > 0) {\n v = pq.removeMin();\n vEntry = results[v];\n if (vEntry.distance === Number.POSITIVE_INFINITY) {\n break;\n }\n\n edgeFn(v).forEach(updateNeighbors);\n }\n\n return results;\n}\n","import * as _ from 'lodash-es';\n\nexport { floydWarshall };\n\nvar DEFAULT_WEIGHT_FUNC = _.constant(1);\n\nfunction floydWarshall(g, weightFn, edgeFn) {\n return runFloydWarshall(\n g,\n weightFn || DEFAULT_WEIGHT_FUNC,\n edgeFn ||\n function (v) {\n return g.outEdges(v);\n },\n );\n}\n\nfunction runFloydWarshall(g, weightFn, edgeFn) {\n var results = {};\n var nodes = g.nodes();\n\n nodes.forEach(function (v) {\n results[v] = {};\n results[v][v] = { distance: 0 };\n nodes.forEach(function (w) {\n if (v !== w) {\n results[v][w] = { distance: Number.POSITIVE_INFINITY };\n }\n });\n edgeFn(v).forEach(function (edge) {\n var w = edge.v === v ? edge.w : edge.v;\n var d = weightFn(edge);\n results[v][w] = { distance: d, predecessor: v };\n });\n });\n\n nodes.forEach(function (k) {\n var rowK = results[k];\n nodes.forEach(function (i) {\n var rowI = results[i];\n nodes.forEach(function (j) {\n var ik = rowI[k];\n var kj = rowK[j];\n var ij = rowI[j];\n var altDistance = ik.distance + kj.distance;\n if (altDistance < ij.distance) {\n ij.distance = altDistance;\n ij.predecessor = kj.predecessor;\n }\n });\n });\n });\n\n return results;\n}\n","import baseProperty from './_baseProperty.js';\n\n/**\n * Gets the size of an ASCII `string`.\n *\n * @private\n * @param {string} string The string inspect.\n * @returns {number} Returns the string size.\n */\nvar asciiSize = baseProperty('length');\n\nexport default asciiSize;\n","/** Used to compose unicode character classes. */\nvar rsAstralRange = '\\\\ud800-\\\\udfff',\n rsComboMarksRange = '\\\\u0300-\\\\u036f',\n reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n rsVarRange = '\\\\ufe0e\\\\ufe0f';\n\n/** Used to compose unicode capture groups. */\nvar rsZWJ = '\\\\u200d';\n\n/** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */\nvar reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']');\n\n/**\n * Checks if `string` contains Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a symbol is found, else `false`.\n */\nfunction hasUnicode(string) {\n return reHasUnicode.test(string);\n}\n\nexport default hasUnicode;\n","/** Used to compose unicode character classes. */\nvar rsAstralRange = '\\\\ud800-\\\\udfff',\n rsComboMarksRange = '\\\\u0300-\\\\u036f',\n reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n rsVarRange = '\\\\ufe0e\\\\ufe0f';\n\n/** Used to compose unicode capture groups. */\nvar rsAstral = '[' + rsAstralRange + ']',\n rsCombo = '[' + rsComboRange + ']',\n rsFitz = '\\\\ud83c[\\\\udffb-\\\\udfff]',\n rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',\n rsNonAstral = '[^' + rsAstralRange + ']',\n rsRegional = '(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}',\n rsSurrPair = '[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]',\n rsZWJ = '\\\\u200d';\n\n/** Used to compose unicode regexes. */\nvar reOptMod = rsModifier + '?',\n rsOptVar = '[' + rsVarRange + ']?',\n rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',\n rsSeq = rsOptVar + reOptMod + rsOptJoin,\n rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';\n\n/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */\nvar reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');\n\n/**\n * Gets the size of a Unicode `string`.\n *\n * @private\n * @param {string} string The string inspect.\n * @returns {number} Returns the string size.\n */\nfunction unicodeSize(string) {\n var result = reUnicode.lastIndex = 0;\n while (reUnicode.test(string)) {\n ++result;\n }\n return result;\n}\n\nexport default unicodeSize;\n","import * as _ from 'lodash-es';\n\nexport { topsort, CycleException };\n\ntopsort.CycleException = CycleException;\n\nfunction topsort(g) {\n var visited = {};\n var stack = {};\n var results = [];\n\n function visit(node) {\n if (Object.prototype.hasOwnProperty.call(stack, node)) {\n throw new CycleException();\n }\n\n if (!Object.prototype.hasOwnProperty.call(visited, node)) {\n stack[node] = true;\n visited[node] = true;\n _.each(g.predecessors(node), visit);\n delete stack[node];\n results.push(node);\n }\n }\n\n _.each(g.sinks(), visit);\n\n if (_.size(visited) !== g.nodeCount()) {\n throw new CycleException();\n }\n\n return results;\n}\n\nfunction CycleException() {}\nCycleException.prototype = new Error(); // must be an instance of Error to pass testing\n","import * as _ from 'lodash-es';\n\nexport { dfs };\n\n/*\n * A helper that preforms a pre- or post-order traversal on the input graph\n * and returns the nodes in the order they were visited. If the graph is\n * undirected then this algorithm will navigate using neighbors. If the graph\n * is directed then this algorithm will navigate using successors.\n *\n * Order must be one of \"pre\" or \"post\".\n */\nfunction dfs(g, vs, order) {\n if (!_.isArray(vs)) {\n vs = [vs];\n }\n\n var navigation = (g.isDirected() ? g.successors : g.neighbors).bind(g);\n\n var acc = [];\n var visited = {};\n _.each(vs, function (v) {\n if (!g.hasNode(v)) {\n throw new Error('Graph does not have node: ' + v);\n }\n\n doDfs(g, v, order === 'post', visited, navigation, acc);\n });\n return acc;\n}\n\nfunction doDfs(g, v, postorder, visited, navigation, acc) {\n if (!Object.prototype.hasOwnProperty.call(visited, v)) {\n visited[v] = true;\n\n if (!postorder) {\n acc.push(v);\n }\n _.each(navigation(v), function (w) {\n doDfs(g, w, postorder, visited, navigation, acc);\n });\n if (postorder) {\n acc.push(v);\n }\n }\n}\n","import * as _ from 'lodash-es';\nimport * as alg from '../../graphlib/alg/index.js';\nimport { simplify } from '../util.js';\nimport { feasibleTree } from './feasible-tree.js';\nimport { longestPath, slack } from './util.js';\n\nexport { networkSimplex };\n\n// Expose some internals for testing purposes\nnetworkSimplex.initLowLimValues = initLowLimValues;\nnetworkSimplex.initCutValues = initCutValues;\nnetworkSimplex.calcCutValue = calcCutValue;\nnetworkSimplex.leaveEdge = leaveEdge;\nnetworkSimplex.enterEdge = enterEdge;\nnetworkSimplex.exchangeEdges = exchangeEdges;\n\n/*\n * The network simplex algorithm assigns ranks to each node in the input graph\n * and iteratively improves the ranking to reduce the length of edges.\n *\n * Preconditions:\n *\n * 1. The input graph must be a DAG.\n * 2. All nodes in the graph must have an object value.\n * 3. All edges in the graph must have \"minlen\" and \"weight\" attributes.\n *\n * Postconditions:\n *\n * 1. All nodes in the graph will have an assigned \"rank\" attribute that has\n * been optimized by the network simplex algorithm. Ranks start at 0.\n *\n *\n * A rough sketch of the algorithm is as follows:\n *\n * 1. Assign initial ranks to each node. We use the longest path algorithm,\n * which assigns ranks to the lowest position possible. In general this\n * leads to very wide bottom ranks and unnecessarily long edges.\n * 2. Construct a feasible tight tree. A tight tree is one such that all\n * edges in the tree have no slack (difference between length of edge\n * and minlen for the edge). This by itself greatly improves the assigned\n * rankings by shorting edges.\n * 3. Iteratively find edges that have negative cut values. Generally a\n * negative cut value indicates that the edge could be removed and a new\n * tree edge could be added to produce a more compact graph.\n *\n * Much of the algorithms here are derived from Gansner, et al., \"A Technique\n * for Drawing Directed Graphs.\" The structure of the file roughly follows the\n * structure of the overall algorithm.\n */\nfunction networkSimplex(g) {\n g = simplify(g);\n longestPath(g);\n var t = feasibleTree(g);\n initLowLimValues(t);\n initCutValues(t, g);\n\n var e, f;\n while ((e = leaveEdge(t))) {\n f = enterEdge(t, g, e);\n exchangeEdges(t, g, e, f);\n }\n}\n\n/*\n * Initializes cut values for all edges in the tree.\n */\nfunction initCutValues(t, g) {\n var vs = alg.postorder(t, t.nodes());\n vs = vs.slice(0, vs.length - 1);\n _.forEach(vs, function (v) {\n assignCutValue(t, g, v);\n });\n}\n\nfunction assignCutValue(t, g, child) {\n var childLab = t.node(child);\n var parent = childLab.parent;\n t.edge(child, parent).cutvalue = calcCutValue(t, g, child);\n}\n\n/*\n * Given the tight tree, its graph, and a child in the graph calculate and\n * return the cut value for the edge between the child and its parent.\n */\nfunction calcCutValue(t, g, child) {\n var childLab = t.node(child);\n var parent = childLab.parent;\n // True if the child is on the tail end of the edge in the directed graph\n var childIsTail = true;\n // The graph's view of the tree edge we're inspecting\n var graphEdge = g.edge(child, parent);\n // The accumulated cut value for the edge between this node and its parent\n var cutValue = 0;\n\n if (!graphEdge) {\n childIsTail = false;\n graphEdge = g.edge(parent, child);\n }\n\n cutValue = graphEdge.weight;\n\n _.forEach(g.nodeEdges(child), function (e) {\n var isOutEdge = e.v === child,\n other = isOutEdge ? e.w : e.v;\n\n if (other !== parent) {\n var pointsToHead = isOutEdge === childIsTail,\n otherWeight = g.edge(e).weight;\n\n cutValue += pointsToHead ? otherWeight : -otherWeight;\n if (isTreeEdge(t, child, other)) {\n var otherCutValue = t.edge(child, other).cutvalue;\n cutValue += pointsToHead ? -otherCutValue : otherCutValue;\n }\n }\n });\n\n return cutValue;\n}\n\nfunction initLowLimValues(tree, root) {\n if (arguments.length < 2) {\n root = tree.nodes()[0];\n }\n dfsAssignLowLim(tree, {}, 1, root);\n}\n\nfunction dfsAssignLowLim(tree, visited, nextLim, v, parent) {\n var low = nextLim;\n var label = tree.node(v);\n\n visited[v] = true;\n _.forEach(tree.neighbors(v), function (w) {\n if (!Object.prototype.hasOwnProperty.call(visited, w)) {\n nextLim = dfsAssignLowLim(tree, visited, nextLim, w, v);\n }\n });\n\n label.low = low;\n label.lim = nextLim++;\n if (parent) {\n label.parent = parent;\n } else {\n // TODO should be able to remove this when we incrementally update low lim\n delete label.parent;\n }\n\n return nextLim;\n}\n\nfunction leaveEdge(tree) {\n return _.find(tree.edges(), function (e) {\n return tree.edge(e).cutvalue < 0;\n });\n}\n\nfunction enterEdge(t, g, edge) {\n var v = edge.v;\n var w = edge.w;\n\n // For the rest of this function we assume that v is the tail and w is the\n // head, so if we don't have this edge in the graph we should flip it to\n // match the correct orientation.\n if (!g.hasEdge(v, w)) {\n v = edge.w;\n w = edge.v;\n }\n\n var vLabel = t.node(v);\n var wLabel = t.node(w);\n var tailLabel = vLabel;\n var flip = false;\n\n // If the root is in the tail of the edge then we need to flip the logic that\n // checks for the head and tail nodes in the candidates function below.\n if (vLabel.lim > wLabel.lim) {\n tailLabel = wLabel;\n flip = true;\n }\n\n var candidates = _.filter(g.edges(), function (edge) {\n return (\n flip === isDescendant(t, t.node(edge.v), tailLabel) &&\n flip !== isDescendant(t, t.node(edge.w), tailLabel)\n );\n });\n\n return _.minBy(candidates, function (edge) {\n return slack(g, edge);\n });\n}\n\nfunction exchangeEdges(t, g, e, f) {\n var v = e.v;\n var w = e.w;\n t.removeEdge(v, w);\n t.setEdge(f.v, f.w, {});\n initLowLimValues(t);\n initCutValues(t, g);\n updateRanks(t, g);\n}\n\nfunction updateRanks(t, g) {\n var root = _.find(t.nodes(), function (v) {\n return !g.node(v).parent;\n });\n var vs = alg.preorder(t, root);\n vs = vs.slice(1);\n _.forEach(vs, function (v) {\n var parent = t.node(v).parent,\n edge = g.edge(v, parent),\n flipped = false;\n\n if (!edge) {\n edge = g.edge(parent, v);\n flipped = true;\n }\n\n g.node(v).rank = g.node(parent).rank + (flipped ? edge.minlen : -edge.minlen);\n });\n}\n\n/*\n * Returns true if the edge is in the tree.\n */\nfunction isTreeEdge(tree, u, v) {\n return tree.hasEdge(u, v);\n}\n\n/*\n * Returns true if the specified node is descendant of the root node per the\n * assigned low and lim attributes in the tree.\n */\nfunction isDescendant(tree, vLabel, rootLabel) {\n return rootLabel.low <= vLabel.lim && vLabel.lim <= rootLabel.lim;\n}\n","import { dfs } from './dfs.js';\n\nexport { postorder };\n\nfunction postorder(g, vs) {\n return dfs(g, vs, 'post');\n}\n","import { dfs } from './dfs.js';\n\nexport { preorder };\n\nfunction preorder(g, vs) {\n return dfs(g, vs, 'pre');\n}\n","import { feasibleTree } from './feasible-tree.js';\nimport { networkSimplex } from './network-simplex.js';\nimport { longestPath } from './util.js';\n\nexport { rank };\n\n/*\n * Assigns a rank to each node in the input graph that respects the \"minlen\"\n * constraint specified on edges between nodes.\n *\n * This basic structure is derived from Gansner, et al., \"A Technique for\n * Drawing Directed Graphs.\"\n *\n * Pre-conditions:\n *\n * 1. Graph must be a connected DAG\n * 2. Graph nodes must be objects\n * 3. Graph edges must have \"weight\" and \"minlen\" attributes\n *\n * Post-conditions:\n *\n * 1. Graph nodes will have a \"rank\" attribute based on the results of the\n * algorithm. Ranks can start at any index (including negative), we'll\n * fix them up later.\n */\nfunction rank(g) {\n switch (g.graph().ranker) {\n case 'network-simplex':\n networkSimplexRanker(g);\n break;\n case 'tight-tree':\n tightTreeRanker(g);\n break;\n case 'longest-path':\n longestPathRanker(g);\n break;\n default:\n networkSimplexRanker(g);\n }\n}\n\n// A fast and simple ranker, but results are far from optimal.\nvar longestPathRanker = longestPath;\n\nfunction tightTreeRanker(g) {\n longestPath(g);\n feasibleTree(g);\n}\n\nfunction networkSimplexRanker(g) {\n networkSimplex(g);\n}\n","import * as _ from 'lodash-es';\nimport * as util from './util.js';\n\nexport { run, cleanup };\n\n/*\n * A nesting graph creates dummy nodes for the tops and bottoms of subgraphs,\n * adds appropriate edges to ensure that all cluster nodes are placed between\n * these boundries, and ensures that the graph is connected.\n *\n * In addition we ensure, through the use of the minlen property, that nodes\n * and subgraph border nodes to not end up on the same rank.\n *\n * Preconditions:\n *\n * 1. Input graph is a DAG\n * 2. Nodes in the input graph has a minlen attribute\n *\n * Postconditions:\n *\n * 1. Input graph is connected.\n * 2. Dummy nodes are added for the tops and bottoms of subgraphs.\n * 3. The minlen attribute for nodes is adjusted to ensure nodes do not\n * get placed on the same rank as subgraph border nodes.\n *\n * The nesting graph idea comes from Sander, \"Layout of Compound Directed\n * Graphs.\"\n */\nfunction run(g) {\n var root = util.addDummyNode(g, 'root', {}, '_root');\n var depths = treeDepths(g);\n var height = _.max(_.values(depths)) - 1; // Note: depths is an Object not an array\n var nodeSep = 2 * height + 1;\n\n g.graph().nestingRoot = root;\n\n // Multiply minlen by nodeSep to align nodes on non-border ranks.\n _.forEach(g.edges(), function (e) {\n g.edge(e).minlen *= nodeSep;\n });\n\n // Calculate a weight that is sufficient to keep subgraphs vertically compact\n var weight = sumWeights(g) + 1;\n\n // Create border nodes and link them up\n _.forEach(g.children(), function (child) {\n dfs(g, root, nodeSep, weight, height, depths, child);\n });\n\n // Save the multiplier for node layers for later removal of empty border\n // layers.\n g.graph().nodeRankFactor = nodeSep;\n}\n\nfunction dfs(g, root, nodeSep, weight, height, depths, v) {\n var children = g.children(v);\n if (!children.length) {\n if (v !== root) {\n g.setEdge(root, v, { weight: 0, minlen: nodeSep });\n }\n return;\n }\n\n var top = util.addBorderNode(g, '_bt');\n var bottom = util.addBorderNode(g, '_bb');\n var label = g.node(v);\n\n g.setParent(top, v);\n label.borderTop = top;\n g.setParent(bottom, v);\n label.borderBottom = bottom;\n\n _.forEach(children, function (child) {\n dfs(g, root, nodeSep, weight, height, depths, child);\n\n var childNode = g.node(child);\n var childTop = childNode.borderTop ? childNode.borderTop : child;\n var childBottom = childNode.borderBottom ? childNode.borderBottom : child;\n var thisWeight = childNode.borderTop ? weight : 2 * weight;\n var minlen = childTop !== childBottom ? 1 : height - depths[v] + 1;\n\n g.setEdge(top, childTop, {\n weight: thisWeight,\n minlen: minlen,\n nestingEdge: true,\n });\n\n g.setEdge(childBottom, bottom, {\n weight: thisWeight,\n minlen: minlen,\n nestingEdge: true,\n });\n });\n\n if (!g.parent(v)) {\n g.setEdge(root, top, { weight: 0, minlen: height + depths[v] });\n }\n}\n\nfunction treeDepths(g) {\n var depths = {};\n function dfs(v, depth) {\n var children = g.children(v);\n if (children && children.length) {\n _.forEach(children, function (child) {\n dfs(child, depth + 1);\n });\n }\n depths[v] = depth;\n }\n _.forEach(g.children(), function (v) {\n dfs(v, 1);\n });\n return depths;\n}\n\nfunction sumWeights(g) {\n return _.reduce(\n g.edges(),\n function (acc, e) {\n return acc + g.edge(e).weight;\n },\n 0,\n );\n}\n\nfunction cleanup(g) {\n var graphLabel = g.graph();\n g.removeNode(graphLabel.nestingRoot);\n delete graphLabel.nestingRoot;\n _.forEach(g.edges(), function (e) {\n var edge = g.edge(e);\n if (edge.nestingEdge) {\n g.removeEdge(e);\n }\n });\n}\n","import baseClone from './_baseClone.js';\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1,\n CLONE_SYMBOLS_FLAG = 4;\n\n/**\n * This method is like `_.clone` except that it recursively clones `value`.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Lang\n * @param {*} value The value to recursively clone.\n * @returns {*} Returns the deep cloned value.\n * @see _.clone\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var deep = _.cloneDeep(objects);\n * console.log(deep[0] === objects[0]);\n * // => false\n */\nfunction cloneDeep(value) {\n return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);\n}\n\nexport default cloneDeep;\n","/**\n * This base implementation of `_.zipObject` which assigns values using `assignFunc`.\n *\n * @private\n * @param {Array} props The property identifiers.\n * @param {Array} values The property values.\n * @param {Function} assignFunc The function to assign values.\n * @returns {Object} Returns the new object.\n */\nfunction baseZipObject(props, values, assignFunc) {\n var index = -1,\n length = props.length,\n valsLength = values.length,\n result = {};\n\n while (++index < length) {\n var value = index < valsLength ? values[index] : undefined;\n assignFunc(result, props[index], value);\n }\n return result;\n}\n\nexport default baseZipObject;\n","import assignValue from './_assignValue.js';\nimport baseZipObject from './_baseZipObject.js';\n\n/**\n * This method is like `_.fromPairs` except that it accepts two arrays,\n * one of property identifiers and one of corresponding values.\n *\n * @static\n * @memberOf _\n * @since 0.4.0\n * @category Array\n * @param {Array} [props=[]] The property identifiers.\n * @param {Array} [values=[]] The property values.\n * @returns {Object} Returns the new object.\n * @example\n *\n * _.zipObject(['a', 'b'], [1, 2]);\n * // => { 'a': 1, 'b': 2 }\n */\nfunction zipObject(props, values) {\n return baseZipObject(props || [], values || [], assignValue);\n}\n\nexport default zipObject;\n","import isSymbol from './isSymbol.js';\n\n/**\n * Compares values to sort them in ascending order.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {number} Returns the sort order indicator for `value`.\n */\nfunction compareAscending(value, other) {\n if (value !== other) {\n var valIsDefined = value !== undefined,\n valIsNull = value === null,\n valIsReflexive = value === value,\n valIsSymbol = isSymbol(value);\n\n var othIsDefined = other !== undefined,\n othIsNull = other === null,\n othIsReflexive = other === other,\n othIsSymbol = isSymbol(other);\n\n if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) ||\n (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) ||\n (valIsNull && othIsDefined && othIsReflexive) ||\n (!valIsDefined && othIsReflexive) ||\n !valIsReflexive) {\n return 1;\n }\n if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) ||\n (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) ||\n (othIsNull && valIsDefined && valIsReflexive) ||\n (!othIsDefined && valIsReflexive) ||\n !othIsReflexive) {\n return -1;\n }\n }\n return 0;\n}\n\nexport default compareAscending;\n","import arrayMap from './_arrayMap.js';\nimport baseGet from './_baseGet.js';\nimport baseIteratee from './_baseIteratee.js';\nimport baseMap from './_baseMap.js';\nimport baseSortBy from './_baseSortBy.js';\nimport baseUnary from './_baseUnary.js';\nimport compareMultiple from './_compareMultiple.js';\nimport identity from './identity.js';\nimport isArray from './isArray.js';\n\n/**\n * The base implementation of `_.orderBy` without param guards.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by.\n * @param {string[]} orders The sort orders of `iteratees`.\n * @returns {Array} Returns the new sorted array.\n */\nfunction baseOrderBy(collection, iteratees, orders) {\n if (iteratees.length) {\n iteratees = arrayMap(iteratees, function(iteratee) {\n if (isArray(iteratee)) {\n return function(value) {\n return baseGet(value, iteratee.length === 1 ? iteratee[0] : iteratee);\n }\n }\n return iteratee;\n });\n } else {\n iteratees = [identity];\n }\n\n var index = -1;\n iteratees = arrayMap(iteratees, baseUnary(baseIteratee));\n\n var result = baseMap(collection, function(value, key, collection) {\n var criteria = arrayMap(iteratees, function(iteratee) {\n return iteratee(value);\n });\n return { 'criteria': criteria, 'index': ++index, 'value': value };\n });\n\n return baseSortBy(result, function(object, other) {\n return compareMultiple(object, other, orders);\n });\n}\n\nexport default baseOrderBy;\n","/**\n * The base implementation of `_.sortBy` which uses `comparer` to define the\n * sort order of `array` and replaces criteria objects with their corresponding\n * values.\n *\n * @private\n * @param {Array} array The array to sort.\n * @param {Function} comparer The function to define sort order.\n * @returns {Array} Returns `array`.\n */\nfunction baseSortBy(array, comparer) {\n var length = array.length;\n\n array.sort(comparer);\n while (length--) {\n array[length] = array[length].value;\n }\n return array;\n}\n\nexport default baseSortBy;\n","import compareAscending from './_compareAscending.js';\n\n/**\n * Used by `_.orderBy` to compare multiple properties of a value to another\n * and stable sort them.\n *\n * If `orders` is unspecified, all values are sorted in ascending order. Otherwise,\n * specify an order of \"desc\" for descending or \"asc\" for ascending sort order\n * of corresponding values.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {boolean[]|string[]} orders The order to sort by for each property.\n * @returns {number} Returns the sort order indicator for `object`.\n */\nfunction compareMultiple(object, other, orders) {\n var index = -1,\n objCriteria = object.criteria,\n othCriteria = other.criteria,\n length = objCriteria.length,\n ordersLength = orders.length;\n\n while (++index < length) {\n var result = compareAscending(objCriteria[index], othCriteria[index]);\n if (result) {\n if (index >= ordersLength) {\n return result;\n }\n var order = orders[index];\n return result * (order == 'desc' ? -1 : 1);\n }\n }\n // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications\n // that causes it, under certain circumstances, to provide the same value for\n // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247\n // for more details.\n //\n // This also ensures a stable sort in V8 and other engines.\n // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details.\n return object.index - other.index;\n}\n\nexport default compareMultiple;\n","import baseFlatten from './_baseFlatten.js';\nimport baseOrderBy from './_baseOrderBy.js';\nimport baseRest from './_baseRest.js';\nimport isIterateeCall from './_isIterateeCall.js';\n\n/**\n * Creates an array of elements, sorted in ascending order by the results of\n * running each element in a collection thru each iteratee. This method\n * performs a stable sort, that is, it preserves the original sort order of\n * equal elements. The iteratees are invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {...(Function|Function[])} [iteratees=[_.identity]]\n * The iteratees to sort by.\n * @returns {Array} Returns the new sorted array.\n * @example\n *\n * var users = [\n * { 'user': 'fred', 'age': 48 },\n * { 'user': 'barney', 'age': 36 },\n * { 'user': 'fred', 'age': 30 },\n * { 'user': 'barney', 'age': 34 }\n * ];\n *\n * _.sortBy(users, [function(o) { return o.user; }]);\n * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 30]]\n *\n * _.sortBy(users, ['user', 'age']);\n * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['fred', 48]]\n */\nvar sortBy = baseRest(function(collection, iteratees) {\n if (collection == null) {\n return [];\n }\n var length = iteratees.length;\n if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) {\n iteratees = [];\n } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) {\n iteratees = [iteratees[0]];\n }\n return baseOrderBy(collection, baseFlatten(iteratees, 1), []);\n});\n\nexport default sortBy;\n","import * as _ from 'lodash-es';\n\nexport { crossCount };\n\n/*\n * A function that takes a layering (an array of layers, each with an array of\n * ordererd nodes) and a graph and returns a weighted crossing count.\n *\n * Pre-conditions:\n *\n * 1. Input graph must be simple (not a multigraph), directed, and include\n * only simple edges.\n * 2. Edges in the input graph must have assigned weights.\n *\n * Post-conditions:\n *\n * 1. The graph and layering matrix are left unchanged.\n *\n * This algorithm is derived from Barth, et al., \"Bilayer Cross Counting.\"\n */\nfunction crossCount(g, layering) {\n var cc = 0;\n for (var i = 1; i < layering.length; ++i) {\n cc += twoLayerCrossCount(g, layering[i - 1], layering[i]);\n }\n return cc;\n}\n\nfunction twoLayerCrossCount(g, northLayer, southLayer) {\n // Sort all of the edges between the north and south layers by their position\n // in the north layer and then the south. Map these edges to the position of\n // their head in the south layer.\n var southPos = _.zipObject(\n southLayer,\n _.map(southLayer, function (v, i) {\n return i;\n }),\n );\n var southEntries = _.flatten(\n _.map(northLayer, function (v) {\n return _.sortBy(\n _.map(g.outEdges(v), function (e) {\n return { pos: southPos[e.w], weight: g.edge(e).weight };\n }),\n 'pos',\n );\n }),\n );\n\n // Build the accumulator tree\n var firstIndex = 1;\n while (firstIndex < southLayer.length) firstIndex <<= 1;\n var treeSize = 2 * firstIndex - 1;\n firstIndex -= 1;\n var tree = _.map(new Array(treeSize), function () {\n return 0;\n });\n\n // Calculate the weighted crossings\n var cc = 0;\n _.forEach(\n // @ts-expect-error\n southEntries.forEach(function (entry) {\n var index = entry.pos + firstIndex;\n tree[index] += entry.weight;\n var weightSum = 0;\n // @ts-expect-error\n while (index > 0) {\n // @ts-expect-error\n if (index % 2) {\n weightSum += tree[index + 1];\n }\n // @ts-expect-error\n index = (index - 1) >> 1;\n tree[index] += entry.weight;\n }\n cc += entry.weight * weightSum;\n }),\n );\n\n return cc;\n}\n","import * as _ from 'lodash-es';\nimport * as util from '../util.js';\n\nexport { sort };\n\nfunction sort(entries, biasRight) {\n var parts = util.partition(entries, function (entry) {\n return Object.prototype.hasOwnProperty.call(entry, 'barycenter');\n });\n var sortable = parts.lhs,\n unsortable = _.sortBy(parts.rhs, function (entry) {\n return -entry.i;\n }),\n vs = [],\n sum = 0,\n weight = 0,\n vsIndex = 0;\n\n sortable.sort(compareWithBias(!!biasRight));\n\n vsIndex = consumeUnsortable(vs, unsortable, vsIndex);\n\n _.forEach(sortable, function (entry) {\n vsIndex += entry.vs.length;\n vs.push(entry.vs);\n sum += entry.barycenter * entry.weight;\n weight += entry.weight;\n vsIndex = consumeUnsortable(vs, unsortable, vsIndex);\n });\n\n var result = { vs: _.flatten(vs) };\n if (weight) {\n result.barycenter = sum / weight;\n result.weight = weight;\n }\n return result;\n}\n\nfunction consumeUnsortable(vs, unsortable, index) {\n var last;\n while (unsortable.length && (last = _.last(unsortable)).i <= index) {\n unsortable.pop();\n vs.push(last.vs);\n index++;\n }\n return index;\n}\n\nfunction compareWithBias(bias) {\n return function (entryV, entryW) {\n if (entryV.barycenter < entryW.barycenter) {\n return -1;\n } else if (entryV.barycenter > entryW.barycenter) {\n return 1;\n }\n\n return !bias ? entryV.i - entryW.i : entryW.i - entryV.i;\n };\n}\n","import * as _ from 'lodash-es';\nimport { barycenter } from './barycenter.js';\nimport { resolveConflicts } from './resolve-conflicts.js';\nimport { sort } from './sort.js';\n\nexport { sortSubgraph };\n\nfunction sortSubgraph(g, v, cg, biasRight) {\n var movable = g.children(v);\n var node = g.node(v);\n var bl = node ? node.borderLeft : undefined;\n var br = node ? node.borderRight : undefined;\n var subgraphs = {};\n\n if (bl) {\n movable = _.filter(movable, function (w) {\n return w !== bl && w !== br;\n });\n }\n\n var barycenters = barycenter(g, movable);\n _.forEach(barycenters, function (entry) {\n if (g.children(entry.v).length) {\n var subgraphResult = sortSubgraph(g, entry.v, cg, biasRight);\n subgraphs[entry.v] = subgraphResult;\n if (Object.prototype.hasOwnProperty.call(subgraphResult, 'barycenter')) {\n mergeBarycenters(entry, subgraphResult);\n }\n }\n });\n\n var entries = resolveConflicts(barycenters, cg);\n expandSubgraphs(entries, subgraphs);\n\n var result = sort(entries, biasRight);\n\n if (bl) {\n result.vs = _.flatten([bl, result.vs, br]);\n if (g.predecessors(bl).length) {\n var blPred = g.node(g.predecessors(bl)[0]),\n brPred = g.node(g.predecessors(br)[0]);\n if (!Object.prototype.hasOwnProperty.call(result, 'barycenter')) {\n result.barycenter = 0;\n result.weight = 0;\n }\n result.barycenter =\n (result.barycenter * result.weight + blPred.order + brPred.order) / (result.weight + 2);\n result.weight += 2;\n }\n }\n\n return result;\n}\n\nfunction expandSubgraphs(entries, subgraphs) {\n _.forEach(entries, function (entry) {\n entry.vs = _.flatten(\n entry.vs.map(function (v) {\n if (subgraphs[v]) {\n return subgraphs[v].vs;\n }\n return v;\n }),\n );\n });\n}\n\nfunction mergeBarycenters(target, other) {\n if (!_.isUndefined(target.barycenter)) {\n target.barycenter =\n (target.barycenter * target.weight + other.barycenter * other.weight) /\n (target.weight + other.weight);\n target.weight += other.weight;\n } else {\n target.barycenter = other.barycenter;\n target.weight = other.weight;\n }\n}\n","import * as _ from 'lodash-es';\n\nexport { barycenter };\n\nfunction barycenter(g, movable) {\n return _.map(movable, function (v) {\n var inV = g.inEdges(v);\n if (!inV.length) {\n return { v: v };\n } else {\n var result = _.reduce(\n inV,\n function (acc, e) {\n var edge = g.edge(e),\n nodeU = g.node(e.v);\n return {\n sum: acc.sum + edge.weight * nodeU.order,\n weight: acc.weight + edge.weight,\n };\n },\n { sum: 0, weight: 0 },\n );\n\n return {\n v: v,\n barycenter: result.sum / result.weight,\n weight: result.weight,\n };\n }\n });\n}\n","import * as _ from 'lodash-es';\n\nexport { resolveConflicts };\n\n/*\n * Given a list of entries of the form {v, barycenter, weight} and a\n * constraint graph this function will resolve any conflicts between the\n * constraint graph and the barycenters for the entries. If the barycenters for\n * an entry would violate a constraint in the constraint graph then we coalesce\n * the nodes in the conflict into a new node that respects the contraint and\n * aggregates barycenter and weight information.\n *\n * This implementation is based on the description in Forster, \"A Fast and\n * Simple Hueristic for Constrained Two-Level Crossing Reduction,\" thought it\n * differs in some specific details.\n *\n * Pre-conditions:\n *\n * 1. Each entry has the form {v, barycenter, weight}, or if the node has\n * no barycenter, then {v}.\n *\n * Returns:\n *\n * A new list of entries of the form {vs, i, barycenter, weight}. The list\n * `vs` may either be a singleton or it may be an aggregation of nodes\n * ordered such that they do not violate constraints from the constraint\n * graph. The property `i` is the lowest original index of any of the\n * elements in `vs`.\n */\nfunction resolveConflicts(entries, cg) {\n var mappedEntries = {};\n _.forEach(entries, function (entry, i) {\n var tmp = (mappedEntries[entry.v] = {\n indegree: 0,\n in: [],\n out: [],\n vs: [entry.v],\n i: i,\n });\n if (!_.isUndefined(entry.barycenter)) {\n // @ts-expect-error\n tmp.barycenter = entry.barycenter;\n // @ts-expect-error\n tmp.weight = entry.weight;\n }\n });\n\n _.forEach(cg.edges(), function (e) {\n var entryV = mappedEntries[e.v];\n var entryW = mappedEntries[e.w];\n if (!_.isUndefined(entryV) && !_.isUndefined(entryW)) {\n entryW.indegree++;\n entryV.out.push(mappedEntries[e.w]);\n }\n });\n\n var sourceSet = _.filter(mappedEntries, function (entry) {\n // @ts-expect-error\n return !entry.indegree;\n });\n\n return doResolveConflicts(sourceSet);\n}\n\nfunction doResolveConflicts(sourceSet) {\n var entries = [];\n\n function handleIn(vEntry) {\n return function (uEntry) {\n if (uEntry.merged) {\n return;\n }\n if (\n _.isUndefined(uEntry.barycenter) ||\n _.isUndefined(vEntry.barycenter) ||\n uEntry.barycenter >= vEntry.barycenter\n ) {\n mergeEntries(vEntry, uEntry);\n }\n };\n }\n\n function handleOut(vEntry) {\n return function (wEntry) {\n wEntry['in'].push(vEntry);\n if (--wEntry.indegree === 0) {\n sourceSet.push(wEntry);\n }\n };\n }\n\n while (sourceSet.length) {\n var entry = sourceSet.pop();\n entries.push(entry);\n _.forEach(entry['in'].reverse(), handleIn(entry));\n _.forEach(entry.out, handleOut(entry));\n }\n\n return _.map(\n _.filter(entries, function (entry) {\n return !entry.merged;\n }),\n function (entry) {\n return _.pick(entry, ['vs', 'i', 'barycenter', 'weight']);\n },\n );\n}\n\nfunction mergeEntries(target, source) {\n var sum = 0;\n var weight = 0;\n\n if (target.weight) {\n sum += target.barycenter * target.weight;\n weight += target.weight;\n }\n\n if (source.weight) {\n sum += source.barycenter * source.weight;\n weight += source.weight;\n }\n\n target.vs = source.vs.concat(target.vs);\n target.barycenter = sum / weight;\n target.weight = weight;\n target.i = Math.min(source.i, target.i);\n source.merged = true;\n}\n","import * as _ from 'lodash-es';\nimport { Graph } from '../../graphlib/index.js';\nimport * as util from '../util.js';\nimport { addSubgraphConstraints } from './add-subgraph-constraints.js';\nimport { buildLayerGraph } from './build-layer-graph.js';\nimport { crossCount } from './cross-count.js';\nimport { initOrder } from './init-order.js';\nimport { sortSubgraph } from './sort-subgraph.js';\n\nexport { order };\n\n/*\n * Applies heuristics to minimize edge crossings in the graph and sets the best\n * order solution as an order attribute on each node.\n *\n * Pre-conditions:\n *\n * 1. Graph must be DAG\n * 2. Graph nodes must be objects with a \"rank\" attribute\n * 3. Graph edges must have the \"weight\" attribute\n *\n * Post-conditions:\n *\n * 1. Graph nodes will have an \"order\" attribute based on the results of the\n * algorithm.\n */\nfunction order(g) {\n var maxRank = util.maxRank(g),\n downLayerGraphs = buildLayerGraphs(g, _.range(1, maxRank + 1), 'inEdges'),\n upLayerGraphs = buildLayerGraphs(g, _.range(maxRank - 1, -1, -1), 'outEdges');\n\n var layering = initOrder(g);\n assignOrder(g, layering);\n\n var bestCC = Number.POSITIVE_INFINITY,\n best;\n\n for (var i = 0, lastBest = 0; lastBest < 4; ++i, ++lastBest) {\n sweepLayerGraphs(i % 2 ? downLayerGraphs : upLayerGraphs, i % 4 >= 2);\n\n layering = util.buildLayerMatrix(g);\n var cc = crossCount(g, layering);\n if (cc < bestCC) {\n lastBest = 0;\n best = _.cloneDeep(layering);\n bestCC = cc;\n }\n }\n\n assignOrder(g, best);\n}\n\nfunction buildLayerGraphs(g, ranks, relationship) {\n return _.map(ranks, function (rank) {\n return buildLayerGraph(g, rank, relationship);\n });\n}\n\nfunction sweepLayerGraphs(layerGraphs, biasRight) {\n var cg = new Graph();\n _.forEach(layerGraphs, function (lg) {\n var root = lg.graph().root;\n var sorted = sortSubgraph(lg, root, cg, biasRight);\n _.forEach(sorted.vs, function (v, i) {\n lg.node(v).order = i;\n });\n addSubgraphConstraints(lg, cg, sorted.vs);\n });\n}\n\nfunction assignOrder(g, layering) {\n _.forEach(layering, function (layer) {\n _.forEach(layer, function (v, i) {\n g.node(v).order = i;\n });\n });\n}\n","import * as _ from 'lodash-es';\nimport { Graph } from '../../graphlib/index.js';\n\nexport { buildLayerGraph };\n\n/*\n * Constructs a graph that can be used to sort a layer of nodes. The graph will\n * contain all base and subgraph nodes from the request layer in their original\n * hierarchy and any edges that are incident on these nodes and are of the type\n * requested by the \"relationship\" parameter.\n *\n * Nodes from the requested rank that do not have parents are assigned a root\n * node in the output graph, which is set in the root graph attribute. This\n * makes it easy to walk the hierarchy of movable nodes during ordering.\n *\n * Pre-conditions:\n *\n * 1. Input graph is a DAG\n * 2. Base nodes in the input graph have a rank attribute\n * 3. Subgraph nodes in the input graph has minRank and maxRank attributes\n * 4. Edges have an assigned weight\n *\n * Post-conditions:\n *\n * 1. Output graph has all nodes in the movable rank with preserved\n * hierarchy.\n * 2. Root nodes in the movable layer are made children of the node\n * indicated by the root attribute of the graph.\n * 3. Non-movable nodes incident on movable nodes, selected by the\n * relationship parameter, are included in the graph (without hierarchy).\n * 4. Edges incident on movable nodes, selected by the relationship\n * parameter, are added to the output graph.\n * 5. The weights for copied edges are aggregated as need, since the output\n * graph is not a multi-graph.\n */\nfunction buildLayerGraph(g, rank, relationship) {\n var root = createRootNode(g),\n result = new Graph({ compound: true })\n .setGraph({ root: root })\n .setDefaultNodeLabel(function (v) {\n return g.node(v);\n });\n\n _.forEach(g.nodes(), function (v) {\n var node = g.node(v),\n parent = g.parent(v);\n\n if (node.rank === rank || (node.minRank <= rank && rank <= node.maxRank)) {\n result.setNode(v);\n result.setParent(v, parent || root);\n\n // This assumes we have only short edges!\n _.forEach(g[relationship](v), function (e) {\n var u = e.v === v ? e.w : e.v,\n edge = result.edge(u, v),\n weight = !_.isUndefined(edge) ? edge.weight : 0;\n result.setEdge(u, v, { weight: g.edge(e).weight + weight });\n });\n\n if (Object.prototype.hasOwnProperty.call(node, 'minRank')) {\n result.setNode(v, {\n borderLeft: node.borderLeft[rank],\n borderRight: node.borderRight[rank],\n });\n }\n }\n });\n\n return result;\n}\n\nfunction createRootNode(g) {\n var v;\n while (g.hasNode((v = _.uniqueId('_root'))));\n return v;\n}\n","import * as _ from 'lodash-es';\n\nexport { addSubgraphConstraints };\n\nfunction addSubgraphConstraints(g, cg, vs) {\n var prev = {},\n rootPrev;\n\n _.forEach(vs, function (v) {\n var child = g.parent(v),\n parent,\n prevChild;\n while (child) {\n parent = g.parent(child);\n if (parent) {\n prevChild = prev[parent];\n prev[parent] = child;\n } else {\n prevChild = rootPrev;\n rootPrev = child;\n }\n if (prevChild && prevChild !== child) {\n cg.setEdge(prevChild, child);\n return;\n }\n child = parent;\n }\n });\n\n /*\n function dfs(v) {\n var children = v ? g.children(v) : g.children();\n if (children.length) {\n var min = Number.POSITIVE_INFINITY,\n subgraphs = [];\n _.each(children, function(child) {\n var childMin = dfs(child);\n if (g.children(child).length) {\n subgraphs.push({ v: child, order: childMin });\n }\n min = Math.min(min, childMin);\n });\n _.reduce(_.sortBy(subgraphs, \"order\"), function(prev, curr) {\n cg.setEdge(prev.v, curr.v);\n return curr;\n });\n return min;\n }\n return g.node(v).order;\n }\n dfs(undefined);\n */\n}\n","import baseForOwn from './_baseForOwn.js';\nimport castFunction from './_castFunction.js';\n\n/**\n * Iterates over own enumerable string keyed properties of an object and\n * invokes `iteratee` for each property. The iteratee is invoked with three\n * arguments: (value, key, object). Iteratee functions may exit iteration\n * early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 0.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forOwnRight\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forOwn(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n */\nfunction forOwn(object, iteratee) {\n return object && baseForOwn(object, castFunction(iteratee));\n}\n\nexport default forOwn;\n","import baseFor from './_baseFor.js';\nimport castFunction from './_castFunction.js';\nimport keysIn from './keysIn.js';\n\n/**\n * Iterates over own and inherited enumerable string keyed properties of an\n * object and invokes `iteratee` for each property. The iteratee is invoked\n * with three arguments: (value, key, object). Iteratee functions may exit\n * iteration early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 0.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forInRight\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forIn(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed).\n */\nfunction forIn(object, iteratee) {\n return object == null\n ? object\n : baseFor(object, castFunction(iteratee), keysIn);\n}\n\nexport default forIn;\n","import * as _ from 'lodash-es';\nimport { Graph } from '../../graphlib/index.js';\nimport * as util from '../util.js';\n\n/*\n * This module provides coordinate assignment based on Brandes and Köpf, \"Fast\n * and Simple Horizontal Coordinate Assignment.\"\n */\n\nexport {\n positionX,\n findType1Conflicts,\n findType2Conflicts,\n addConflict,\n hasConflict,\n verticalAlignment,\n horizontalCompaction,\n alignCoordinates,\n findSmallestWidthAlignment,\n balance,\n};\n\n/*\n * Marks all edges in the graph with a type-1 conflict with the \"type1Conflict\"\n * property. A type-1 conflict is one where a non-inner segment crosses an\n * inner segment. An inner segment is an edge with both incident nodes marked\n * with the \"dummy\" property.\n *\n * This algorithm scans layer by layer, starting with the second, for type-1\n * conflicts between the current layer and the previous layer. For each layer\n * it scans the nodes from left to right until it reaches one that is incident\n * on an inner segment. It then scans predecessors to determine if they have\n * edges that cross that inner segment. At the end a final scan is done for all\n * nodes on the current rank to see if they cross the last visited inner\n * segment.\n *\n * This algorithm (safely) assumes that a dummy node will only be incident on a\n * single node in the layers being scanned.\n */\nfunction findType1Conflicts(g, layering) {\n var conflicts = {};\n\n function visitLayer(prevLayer, layer) {\n var // last visited node in the previous layer that is incident on an inner\n // segment.\n k0 = 0,\n // Tracks the last node in this layer scanned for crossings with a type-1\n // segment.\n scanPos = 0,\n prevLayerLength = prevLayer.length,\n lastNode = _.last(layer);\n\n _.forEach(layer, function (v, i) {\n var w = findOtherInnerSegmentNode(g, v),\n k1 = w ? g.node(w).order : prevLayerLength;\n\n if (w || v === lastNode) {\n _.forEach(layer.slice(scanPos, i + 1), function (scanNode) {\n _.forEach(g.predecessors(scanNode), function (u) {\n var uLabel = g.node(u),\n uPos = uLabel.order;\n if ((uPos < k0 || k1 < uPos) && !(uLabel.dummy && g.node(scanNode).dummy)) {\n addConflict(conflicts, u, scanNode);\n }\n });\n });\n // @ts-expect-error\n scanPos = i + 1;\n k0 = k1;\n }\n });\n\n return layer;\n }\n\n _.reduce(layering, visitLayer);\n return conflicts;\n}\n\nfunction findType2Conflicts(g, layering) {\n var conflicts = {};\n\n function scan(south, southPos, southEnd, prevNorthBorder, nextNorthBorder) {\n var v;\n _.forEach(_.range(southPos, southEnd), function (i) {\n v = south[i];\n if (g.node(v).dummy) {\n _.forEach(g.predecessors(v), function (u) {\n var uNode = g.node(u);\n if (uNode.dummy && (uNode.order < prevNorthBorder || uNode.order > nextNorthBorder)) {\n addConflict(conflicts, u, v);\n }\n });\n }\n });\n }\n\n function visitLayer(north, south) {\n var prevNorthPos = -1,\n nextNorthPos,\n southPos = 0;\n\n _.forEach(south, function (v, southLookahead) {\n if (g.node(v).dummy === 'border') {\n var predecessors = g.predecessors(v);\n if (predecessors.length) {\n nextNorthPos = g.node(predecessors[0]).order;\n scan(south, southPos, southLookahead, prevNorthPos, nextNorthPos);\n // @ts-expect-error\n southPos = southLookahead;\n prevNorthPos = nextNorthPos;\n }\n }\n scan(south, southPos, south.length, nextNorthPos, north.length);\n });\n\n return south;\n }\n\n _.reduce(layering, visitLayer);\n return conflicts;\n}\n\nfunction findOtherInnerSegmentNode(g, v) {\n if (g.node(v).dummy) {\n return _.find(g.predecessors(v), function (u) {\n return g.node(u).dummy;\n });\n }\n}\n\nfunction addConflict(conflicts, v, w) {\n if (v > w) {\n var tmp = v;\n v = w;\n w = tmp;\n }\n\n var conflictsV = conflicts[v];\n if (!conflictsV) {\n conflicts[v] = conflictsV = {};\n }\n conflictsV[w] = true;\n}\n\nfunction hasConflict(conflicts, v, w) {\n if (v > w) {\n var tmp = v;\n v = w;\n w = tmp;\n }\n return !!conflicts[v] && Object.prototype.hasOwnProperty.call(conflicts[v], w);\n}\n\n/*\n * Try to align nodes into vertical \"blocks\" where possible. This algorithm\n * attempts to align a node with one of its median neighbors. If the edge\n * connecting a neighbor is a type-1 conflict then we ignore that possibility.\n * If a previous node has already formed a block with a node after the node\n * we're trying to form a block with, we also ignore that possibility - our\n * blocks would be split in that scenario.\n */\nfunction verticalAlignment(g, layering, conflicts, neighborFn) {\n var root = {},\n align = {},\n pos = {};\n\n // We cache the position here based on the layering because the graph and\n // layering may be out of sync. The layering matrix is manipulated to\n // generate different extreme alignments.\n _.forEach(layering, function (layer) {\n _.forEach(layer, function (v, order) {\n root[v] = v;\n align[v] = v;\n pos[v] = order;\n });\n });\n\n _.forEach(layering, function (layer) {\n var prevIdx = -1;\n _.forEach(layer, function (v) {\n var ws = neighborFn(v);\n if (ws.length) {\n ws = _.sortBy(ws, function (w) {\n return pos[w];\n });\n var mp = (ws.length - 1) / 2;\n for (var i = Math.floor(mp), il = Math.ceil(mp); i <= il; ++i) {\n var w = ws[i];\n if (align[v] === v && prevIdx < pos[w] && !hasConflict(conflicts, v, w)) {\n align[w] = v;\n align[v] = root[v] = root[w];\n prevIdx = pos[w];\n }\n }\n }\n });\n });\n\n return { root: root, align: align };\n}\n\nfunction horizontalCompaction(g, layering, root, align, reverseSep) {\n // This portion of the algorithm differs from BK due to a number of problems.\n // Instead of their algorithm we construct a new block graph and do two\n // sweeps. The first sweep places blocks with the smallest possible\n // coordinates. The second sweep removes unused space by moving blocks to the\n // greatest coordinates without violating separation.\n var xs = {},\n blockG = buildBlockGraph(g, layering, root, reverseSep),\n borderType = reverseSep ? 'borderLeft' : 'borderRight';\n\n function iterate(setXsFunc, nextNodesFunc) {\n var stack = blockG.nodes();\n var elem = stack.pop();\n var visited = {};\n while (elem) {\n if (visited[elem]) {\n setXsFunc(elem);\n } else {\n visited[elem] = true;\n stack.push(elem);\n stack = stack.concat(nextNodesFunc(elem));\n }\n\n elem = stack.pop();\n }\n }\n\n // First pass, assign smallest coordinates\n function pass1(elem) {\n xs[elem] = blockG.inEdges(elem).reduce(function (acc, e) {\n return Math.max(acc, xs[e.v] + blockG.edge(e));\n }, 0);\n }\n\n // Second pass, assign greatest coordinates\n function pass2(elem) {\n var min = blockG.outEdges(elem).reduce(function (acc, e) {\n return Math.min(acc, xs[e.w] - blockG.edge(e));\n }, Number.POSITIVE_INFINITY);\n\n var node = g.node(elem);\n if (min !== Number.POSITIVE_INFINITY && node.borderType !== borderType) {\n xs[elem] = Math.max(xs[elem], min);\n }\n }\n\n iterate(pass1, blockG.predecessors.bind(blockG));\n iterate(pass2, blockG.successors.bind(blockG));\n\n // Assign x coordinates to all nodes\n _.forEach(align, function (v) {\n xs[v] = xs[root[v]];\n });\n\n return xs;\n}\n\nfunction buildBlockGraph(g, layering, root, reverseSep) {\n var blockGraph = new Graph(),\n graphLabel = g.graph(),\n sepFn = sep(graphLabel.nodesep, graphLabel.edgesep, reverseSep);\n\n _.forEach(layering, function (layer) {\n var u;\n _.forEach(layer, function (v) {\n var vRoot = root[v];\n blockGraph.setNode(vRoot);\n if (u) {\n var uRoot = root[u],\n prevMax = blockGraph.edge(uRoot, vRoot);\n blockGraph.setEdge(uRoot, vRoot, Math.max(sepFn(g, v, u), prevMax || 0));\n }\n u = v;\n });\n });\n\n return blockGraph;\n}\n\n/*\n * Returns the alignment that has the smallest width of the given alignments.\n */\nfunction findSmallestWidthAlignment(g, xss) {\n return _.minBy(_.values(xss), function (xs) {\n var max = Number.NEGATIVE_INFINITY;\n var min = Number.POSITIVE_INFINITY;\n\n _.forIn(xs, function (x, v) {\n var halfWidth = width(g, v) / 2;\n\n max = Math.max(x + halfWidth, max);\n min = Math.min(x - halfWidth, min);\n });\n\n return max - min;\n });\n}\n\n/*\n * Align the coordinates of each of the layout alignments such that\n * left-biased alignments have their minimum coordinate at the same point as\n * the minimum coordinate of the smallest width alignment and right-biased\n * alignments have their maximum coordinate at the same point as the maximum\n * coordinate of the smallest width alignment.\n */\nfunction alignCoordinates(xss, alignTo) {\n var alignToVals = _.values(alignTo),\n alignToMin = _.min(alignToVals),\n alignToMax = _.max(alignToVals);\n\n _.forEach(['u', 'd'], function (vert) {\n _.forEach(['l', 'r'], function (horiz) {\n var alignment = vert + horiz,\n xs = xss[alignment],\n delta;\n if (xs === alignTo) return;\n\n var xsVals = _.values(xs);\n delta = horiz === 'l' ? alignToMin - _.min(xsVals) : alignToMax - _.max(xsVals);\n\n if (delta) {\n xss[alignment] = _.mapValues(xs, function (x) {\n return x + delta;\n });\n }\n });\n });\n}\n\nfunction balance(xss, align) {\n return _.mapValues(xss.ul, function (ignore, v) {\n if (align) {\n return xss[align.toLowerCase()][v];\n } else {\n var xs = _.sortBy(_.map(xss, v));\n return (xs[1] + xs[2]) / 2;\n }\n });\n}\n\nfunction positionX(g) {\n var layering = util.buildLayerMatrix(g);\n var conflicts = _.merge(findType1Conflicts(g, layering), findType2Conflicts(g, layering));\n\n var xss = {};\n var adjustedLayering;\n _.forEach(['u', 'd'], function (vert) {\n adjustedLayering = vert === 'u' ? layering : _.values(layering).reverse();\n _.forEach(['l', 'r'], function (horiz) {\n if (horiz === 'r') {\n adjustedLayering = _.map(adjustedLayering, function (inner) {\n return _.values(inner).reverse();\n });\n }\n\n var neighborFn = (vert === 'u' ? g.predecessors : g.successors).bind(g);\n var align = verticalAlignment(g, adjustedLayering, conflicts, neighborFn);\n var xs = horizontalCompaction(g, adjustedLayering, align.root, align.align, horiz === 'r');\n if (horiz === 'r') {\n xs = _.mapValues(xs, function (x) {\n return -x;\n });\n }\n xss[vert + horiz] = xs;\n });\n });\n\n var smallestWidth = findSmallestWidthAlignment(g, xss);\n alignCoordinates(xss, smallestWidth);\n return balance(xss, g.graph().align);\n}\n\nfunction sep(nodeSep, edgeSep, reverseSep) {\n return function (g, v, w) {\n var vLabel = g.node(v);\n var wLabel = g.node(w);\n var sum = 0;\n var delta;\n\n sum += vLabel.width / 2;\n if (Object.prototype.hasOwnProperty.call(vLabel, 'labelpos')) {\n switch (vLabel.labelpos.toLowerCase()) {\n case 'l':\n delta = -vLabel.width / 2;\n break;\n case 'r':\n delta = vLabel.width / 2;\n break;\n }\n }\n if (delta) {\n sum += reverseSep ? delta : -delta;\n }\n delta = 0;\n\n sum += (vLabel.dummy ? edgeSep : nodeSep) / 2;\n sum += (wLabel.dummy ? edgeSep : nodeSep) / 2;\n\n sum += wLabel.width / 2;\n if (Object.prototype.hasOwnProperty.call(wLabel, 'labelpos')) {\n switch (wLabel.labelpos.toLowerCase()) {\n case 'l':\n delta = wLabel.width / 2;\n break;\n case 'r':\n delta = -wLabel.width / 2;\n break;\n }\n }\n if (delta) {\n sum += reverseSep ? delta : -delta;\n }\n delta = 0;\n\n return sum;\n };\n}\n\nfunction width(g, v) {\n return g.node(v).width;\n}\n","import * as _ from 'lodash-es';\nimport { Graph } from '../graphlib/index.js';\nimport { addBorderSegments } from './add-border-segments.js';\nimport * as coordinateSystem from './coordinate-system.js';\nimport * as acyclic from './acyclic.js';\nimport * as normalize from './normalize.js';\nimport { rank } from './rank/index.js';\nimport * as nestingGraph from './nesting-graph.js';\nimport { order } from './order/index.js';\nimport { parentDummyChains } from './parent-dummy-chains.js';\nimport { position } from './position/index.js';\nimport * as util from './util.js';\n\nexport { layout };\n\nfunction layout(g, opts) {\n var time = opts && opts.debugTiming ? util.time : util.notime;\n time('layout', () => {\n var layoutGraph = time(' buildLayoutGraph', () => buildLayoutGraph(g));\n time(' runLayout', () => runLayout(layoutGraph, time));\n time(' updateInputGraph', () => updateInputGraph(g, layoutGraph));\n });\n}\n\nfunction runLayout(g, time) {\n time(' makeSpaceForEdgeLabels', () => makeSpaceForEdgeLabels(g));\n time(' removeSelfEdges', () => removeSelfEdges(g));\n time(' acyclic', () => acyclic.run(g));\n time(' nestingGraph.run', () => nestingGraph.run(g));\n time(' rank', () => rank(util.asNonCompoundGraph(g)));\n time(' injectEdgeLabelProxies', () => injectEdgeLabelProxies(g));\n time(' removeEmptyRanks', () => util.removeEmptyRanks(g));\n time(' nestingGraph.cleanup', () => nestingGraph.cleanup(g));\n time(' normalizeRanks', () => util.normalizeRanks(g));\n time(' assignRankMinMax', () => assignRankMinMax(g));\n time(' removeEdgeLabelProxies', () => removeEdgeLabelProxies(g));\n time(' normalize.run', () => normalize.run(g));\n time(' parentDummyChains', () => parentDummyChains(g));\n time(' addBorderSegments', () => addBorderSegments(g));\n time(' order', () => order(g));\n time(' insertSelfEdges', () => insertSelfEdges(g));\n time(' adjustCoordinateSystem', () => coordinateSystem.adjust(g));\n time(' position', () => position(g));\n time(' positionSelfEdges', () => positionSelfEdges(g));\n time(' removeBorderNodes', () => removeBorderNodes(g));\n time(' normalize.undo', () => normalize.undo(g));\n time(' fixupEdgeLabelCoords', () => fixupEdgeLabelCoords(g));\n time(' undoCoordinateSystem', () => coordinateSystem.undo(g));\n time(' translateGraph', () => translateGraph(g));\n time(' assignNodeIntersects', () => assignNodeIntersects(g));\n time(' reversePoints', () => reversePointsForReversedEdges(g));\n time(' acyclic.undo', () => acyclic.undo(g));\n}\n\n/*\n * Copies final layout information from the layout graph back to the input\n * graph. This process only copies whitelisted attributes from the layout graph\n * to the input graph, so it serves as a good place to determine what\n * attributes can influence layout.\n */\nfunction updateInputGraph(inputGraph, layoutGraph) {\n _.forEach(inputGraph.nodes(), function (v) {\n var inputLabel = inputGraph.node(v);\n var layoutLabel = layoutGraph.node(v);\n\n if (inputLabel) {\n inputLabel.x = layoutLabel.x;\n inputLabel.y = layoutLabel.y;\n\n if (layoutGraph.children(v).length) {\n inputLabel.width = layoutLabel.width;\n inputLabel.height = layoutLabel.height;\n }\n }\n });\n\n _.forEach(inputGraph.edges(), function (e) {\n var inputLabel = inputGraph.edge(e);\n var layoutLabel = layoutGraph.edge(e);\n\n inputLabel.points = layoutLabel.points;\n if (Object.prototype.hasOwnProperty.call(layoutLabel, 'x')) {\n inputLabel.x = layoutLabel.x;\n inputLabel.y = layoutLabel.y;\n }\n });\n\n inputGraph.graph().width = layoutGraph.graph().width;\n inputGraph.graph().height = layoutGraph.graph().height;\n}\n\nvar graphNumAttrs = ['nodesep', 'edgesep', 'ranksep', 'marginx', 'marginy'];\nvar graphDefaults = { ranksep: 50, edgesep: 20, nodesep: 50, rankdir: 'tb' };\nvar graphAttrs = ['acyclicer', 'ranker', 'rankdir', 'align'];\nvar nodeNumAttrs = ['width', 'height'];\nvar nodeDefaults = { width: 0, height: 0 };\nvar edgeNumAttrs = ['minlen', 'weight', 'width', 'height', 'labeloffset'];\nvar edgeDefaults = {\n minlen: 1,\n weight: 1,\n width: 0,\n height: 0,\n labeloffset: 10,\n labelpos: 'r',\n};\nvar edgeAttrs = ['labelpos'];\n\n/*\n * Constructs a new graph from the input graph, which can be used for layout.\n * This process copies only whitelisted attributes from the input graph to the\n * layout graph. Thus this function serves as a good place to determine what\n * attributes can influence layout.\n */\nfunction buildLayoutGraph(inputGraph) {\n var g = new Graph({ multigraph: true, compound: true });\n var graph = canonicalize(inputGraph.graph());\n\n g.setGraph(\n _.merge({}, graphDefaults, selectNumberAttrs(graph, graphNumAttrs), _.pick(graph, graphAttrs)),\n );\n\n _.forEach(inputGraph.nodes(), function (v) {\n var node = canonicalize(inputGraph.node(v));\n g.setNode(v, _.defaults(selectNumberAttrs(node, nodeNumAttrs), nodeDefaults));\n g.setParent(v, inputGraph.parent(v));\n });\n\n _.forEach(inputGraph.edges(), function (e) {\n var edge = canonicalize(inputGraph.edge(e));\n g.setEdge(\n e,\n _.merge({}, edgeDefaults, selectNumberAttrs(edge, edgeNumAttrs), _.pick(edge, edgeAttrs)),\n );\n });\n\n return g;\n}\n\n/*\n * This idea comes from the Gansner paper: to account for edge labels in our\n * layout we split each rank in half by doubling minlen and halving ranksep.\n * Then we can place labels at these mid-points between nodes.\n *\n * We also add some minimal padding to the width to push the label for the edge\n * away from the edge itself a bit.\n */\nfunction makeSpaceForEdgeLabels(g) {\n var graph = g.graph();\n graph.ranksep /= 2;\n _.forEach(g.edges(), function (e) {\n var edge = g.edge(e);\n edge.minlen *= 2;\n if (edge.labelpos.toLowerCase() !== 'c') {\n if (graph.rankdir === 'TB' || graph.rankdir === 'BT') {\n edge.width += edge.labeloffset;\n } else {\n edge.height += edge.labeloffset;\n }\n }\n });\n}\n\n/*\n * Creates temporary dummy nodes that capture the rank in which each edge's\n * label is going to, if it has one of non-zero width and height. We do this\n * so that we can safely remove empty ranks while preserving balance for the\n * label's position.\n */\nfunction injectEdgeLabelProxies(g) {\n _.forEach(g.edges(), function (e) {\n var edge = g.edge(e);\n if (edge.width && edge.height) {\n var v = g.node(e.v);\n var w = g.node(e.w);\n var label = { rank: (w.rank - v.rank) / 2 + v.rank, e: e };\n util.addDummyNode(g, 'edge-proxy', label, '_ep');\n }\n });\n}\n\nfunction assignRankMinMax(g) {\n var maxRank = 0;\n _.forEach(g.nodes(), function (v) {\n var node = g.node(v);\n if (node.borderTop) {\n node.minRank = g.node(node.borderTop).rank;\n node.maxRank = g.node(node.borderBottom).rank;\n // @ts-expect-error\n maxRank = _.max(maxRank, node.maxRank);\n }\n });\n g.graph().maxRank = maxRank;\n}\n\nfunction removeEdgeLabelProxies(g) {\n _.forEach(g.nodes(), function (v) {\n var node = g.node(v);\n if (node.dummy === 'edge-proxy') {\n g.edge(node.e).labelRank = node.rank;\n g.removeNode(v);\n }\n });\n}\n\nfunction translateGraph(g) {\n var minX = Number.POSITIVE_INFINITY;\n var maxX = 0;\n var minY = Number.POSITIVE_INFINITY;\n var maxY = 0;\n var graphLabel = g.graph();\n var marginX = graphLabel.marginx || 0;\n var marginY = graphLabel.marginy || 0;\n\n function getExtremes(attrs) {\n var x = attrs.x;\n var y = attrs.y;\n var w = attrs.width;\n var h = attrs.height;\n minX = Math.min(minX, x - w / 2);\n maxX = Math.max(maxX, x + w / 2);\n minY = Math.min(minY, y - h / 2);\n maxY = Math.max(maxY, y + h / 2);\n }\n\n _.forEach(g.nodes(), function (v) {\n getExtremes(g.node(v));\n });\n _.forEach(g.edges(), function (e) {\n var edge = g.edge(e);\n if (Object.prototype.hasOwnProperty.call(edge, 'x')) {\n getExtremes(edge);\n }\n });\n\n minX -= marginX;\n minY -= marginY;\n\n _.forEach(g.nodes(), function (v) {\n var node = g.node(v);\n node.x -= minX;\n node.y -= minY;\n });\n\n _.forEach(g.edges(), function (e) {\n var edge = g.edge(e);\n _.forEach(edge.points, function (p) {\n p.x -= minX;\n p.y -= minY;\n });\n if (Object.prototype.hasOwnProperty.call(edge, 'x')) {\n edge.x -= minX;\n }\n if (Object.prototype.hasOwnProperty.call(edge, 'y')) {\n edge.y -= minY;\n }\n });\n\n graphLabel.width = maxX - minX + marginX;\n graphLabel.height = maxY - minY + marginY;\n}\n\nfunction assignNodeIntersects(g) {\n _.forEach(g.edges(), function (e) {\n var edge = g.edge(e);\n var nodeV = g.node(e.v);\n var nodeW = g.node(e.w);\n var p1, p2;\n if (!edge.points) {\n edge.points = [];\n p1 = nodeW;\n p2 = nodeV;\n } else {\n p1 = edge.points[0];\n p2 = edge.points[edge.points.length - 1];\n }\n edge.points.unshift(util.intersectRect(nodeV, p1));\n edge.points.push(util.intersectRect(nodeW, p2));\n });\n}\n\nfunction fixupEdgeLabelCoords(g) {\n _.forEach(g.edges(), function (e) {\n var edge = g.edge(e);\n if (Object.prototype.hasOwnProperty.call(edge, 'x')) {\n if (edge.labelpos === 'l' || edge.labelpos === 'r') {\n edge.width -= edge.labeloffset;\n }\n switch (edge.labelpos) {\n case 'l':\n edge.x -= edge.width / 2 + edge.labeloffset;\n break;\n case 'r':\n edge.x += edge.width / 2 + edge.labeloffset;\n break;\n }\n }\n });\n}\n\nfunction reversePointsForReversedEdges(g) {\n _.forEach(g.edges(), function (e) {\n var edge = g.edge(e);\n if (edge.reversed) {\n edge.points.reverse();\n }\n });\n}\n\nfunction removeBorderNodes(g) {\n _.forEach(g.nodes(), function (v) {\n if (g.children(v).length) {\n var node = g.node(v);\n var t = g.node(node.borderTop);\n var b = g.node(node.borderBottom);\n var l = g.node(_.last(node.borderLeft));\n var r = g.node(_.last(node.borderRight));\n\n node.width = Math.abs(r.x - l.x);\n node.height = Math.abs(b.y - t.y);\n node.x = l.x + node.width / 2;\n node.y = t.y + node.height / 2;\n }\n });\n\n _.forEach(g.nodes(), function (v) {\n if (g.node(v).dummy === 'border') {\n g.removeNode(v);\n }\n });\n}\n\nfunction removeSelfEdges(g) {\n _.forEach(g.edges(), function (e) {\n if (e.v === e.w) {\n var node = g.node(e.v);\n if (!node.selfEdges) {\n node.selfEdges = [];\n }\n node.selfEdges.push({ e: e, label: g.edge(e) });\n g.removeEdge(e);\n }\n });\n}\n\nfunction insertSelfEdges(g) {\n var layers = util.buildLayerMatrix(g);\n _.forEach(layers, function (layer) {\n var orderShift = 0;\n _.forEach(layer, function (v, i) {\n var node = g.node(v);\n node.order = i + orderShift;\n _.forEach(node.selfEdges, function (selfEdge) {\n util.addDummyNode(\n g,\n 'selfedge',\n {\n width: selfEdge.label.width,\n height: selfEdge.label.height,\n rank: node.rank,\n order: i + ++orderShift,\n e: selfEdge.e,\n label: selfEdge.label,\n },\n '_se',\n );\n });\n delete node.selfEdges;\n });\n });\n}\n\nfunction positionSelfEdges(g) {\n _.forEach(g.nodes(), function (v) {\n var node = g.node(v);\n if (node.dummy === 'selfedge') {\n var selfNode = g.node(node.e.v);\n var x = selfNode.x + selfNode.width / 2;\n var y = selfNode.y;\n var dx = node.x - x;\n var dy = selfNode.height / 2;\n g.setEdge(node.e, node.label);\n g.removeNode(v);\n node.label.points = [\n { x: x + (2 * dx) / 3, y: y - dy },\n { x: x + (5 * dx) / 6, y: y - dy },\n { x: x + dx, y: y },\n { x: x + (5 * dx) / 6, y: y + dy },\n { x: x + (2 * dx) / 3, y: y + dy },\n ];\n node.label.x = node.x;\n node.label.y = node.y;\n }\n });\n}\n\nfunction selectNumberAttrs(obj, attrs) {\n return _.mapValues(_.pick(obj, attrs), Number);\n}\n\nfunction canonicalize(attrs) {\n var newAttrs = {};\n _.forEach(attrs, function (v, k) {\n newAttrs[k.toLowerCase()] = v;\n });\n return newAttrs;\n}\n","/**\n * TypeScript type imports:\n *\n * @import { Graph } from '../graphlib/graph.js';\n */\nimport * as _ from 'lodash-es';\nimport * as util from './util.js';\n\nexport { run, undo };\n\n/*\n * Breaks any long edges in the graph into short segments that span 1 layer\n * each. This operation is undoable with the denormalize function.\n *\n * Pre-conditions:\n *\n * 1. The input graph is a DAG.\n * 2. Each node in the graph has a \"rank\" property.\n *\n * Post-condition:\n *\n * 1. All edges in the graph have a length of 1.\n * 2. Dummy nodes are added where edges have been split into segments.\n * 3. The graph is augmented with a \"dummyChains\" attribute which contains\n * the first dummy in each chain of dummy nodes produced.\n */\nfunction run(g) {\n g.graph().dummyChains = [];\n _.forEach(g.edges(), function (edge) {\n normalizeEdge(g, edge);\n });\n}\n\n/**\n * @param {Graph} g\n */\nfunction normalizeEdge(g, e) {\n var v = e.v;\n var vRank = g.node(v).rank;\n var w = e.w;\n var wRank = g.node(w).rank;\n var name = e.name;\n var edgeLabel = g.edge(e);\n var labelRank = edgeLabel.labelRank;\n\n if (wRank === vRank + 1) return;\n\n g.removeEdge(e);\n\n /**\n * @typedef {Object} Attrs\n * @property {number} width\n * @property {number} height\n * @property {ReturnType} edgeLabel\n * @property {any} edgeObj\n * @property {ReturnType[\"rank\"]} rank\n * @property {string} [dummy]\n * @property {ReturnType[\"labelpos\"]} [labelpos]\n */\n\n /** @type {Attrs | undefined} */\n var attrs = undefined;\n var dummy, i;\n for (i = 0, ++vRank; vRank < wRank; ++i, ++vRank) {\n edgeLabel.points = [];\n attrs = {\n width: 0,\n height: 0,\n edgeLabel: edgeLabel,\n edgeObj: e,\n rank: vRank,\n };\n dummy = util.addDummyNode(g, 'edge', attrs, '_d');\n if (vRank === labelRank) {\n attrs.width = edgeLabel.width;\n attrs.height = edgeLabel.height;\n attrs.dummy = 'edge-label';\n attrs.labelpos = edgeLabel.labelpos;\n }\n g.setEdge(v, dummy, { weight: edgeLabel.weight }, name);\n if (i === 0) {\n g.graph().dummyChains.push(dummy);\n }\n v = dummy;\n }\n\n g.setEdge(v, w, { weight: edgeLabel.weight }, name);\n}\n\nfunction undo(g) {\n _.forEach(g.graph().dummyChains, function (v) {\n var node = g.node(v);\n var origLabel = node.edgeLabel;\n var w;\n g.setEdge(node.edgeObj, origLabel);\n while (node.dummy) {\n w = g.successors(v)[0];\n g.removeNode(v);\n origLabel.points.push({ x: node.x, y: node.y });\n if (node.dummy === 'edge-label') {\n origLabel.x = node.x;\n origLabel.y = node.y;\n origLabel.width = node.width;\n origLabel.height = node.height;\n }\n v = w;\n node = g.node(v);\n }\n });\n}\n","import * as _ from 'lodash-es';\n\nexport { parentDummyChains };\n\nfunction parentDummyChains(g) {\n var postorderNums = postorder(g);\n\n _.forEach(g.graph().dummyChains, function (v) {\n var node = g.node(v);\n var edgeObj = node.edgeObj;\n var pathData = findPath(g, postorderNums, edgeObj.v, edgeObj.w);\n var path = pathData.path;\n var lca = pathData.lca;\n var pathIdx = 0;\n var pathV = path[pathIdx];\n var ascending = true;\n\n while (v !== edgeObj.w) {\n node = g.node(v);\n\n if (ascending) {\n while ((pathV = path[pathIdx]) !== lca && g.node(pathV).maxRank < node.rank) {\n pathIdx++;\n }\n\n if (pathV === lca) {\n ascending = false;\n }\n }\n\n if (!ascending) {\n while (\n pathIdx < path.length - 1 &&\n g.node((pathV = path[pathIdx + 1])).minRank <= node.rank\n ) {\n pathIdx++;\n }\n pathV = path[pathIdx];\n }\n\n g.setParent(v, pathV);\n v = g.successors(v)[0];\n }\n });\n}\n\n// Find a path from v to w through the lowest common ancestor (LCA). Return the\n// full path and the LCA.\nfunction findPath(g, postorderNums, v, w) {\n var vPath = [];\n var wPath = [];\n var low = Math.min(postorderNums[v].low, postorderNums[w].low);\n var lim = Math.max(postorderNums[v].lim, postorderNums[w].lim);\n var parent;\n var lca;\n\n // Traverse up from v to find the LCA\n parent = v;\n do {\n parent = g.parent(parent);\n vPath.push(parent);\n } while (parent && (postorderNums[parent].low > low || lim > postorderNums[parent].lim));\n lca = parent;\n\n // Traverse from w to LCA\n parent = w;\n while ((parent = g.parent(parent)) !== lca) {\n wPath.push(parent);\n }\n\n return { path: vPath.concat(wPath.reverse()), lca: lca };\n}\n\nfunction postorder(g) {\n var result = {};\n var lim = 0;\n\n function dfs(v) {\n var low = lim;\n _.forEach(g.children(v), dfs);\n result[v] = { low: low, lim: lim++ };\n }\n _.forEach(g.children(), dfs);\n\n return result;\n}\n","import * as _ from 'lodash-es';\n\n/*\n * Assigns an initial order value for each node by performing a DFS search\n * starting from nodes in the first rank. Nodes are assigned an order in their\n * rank as they are first visited.\n *\n * This approach comes from Gansner, et al., \"A Technique for Drawing Directed\n * Graphs.\"\n *\n * Returns a layering matrix with an array per layer and each layer sorted by\n * the order of its nodes.\n */\nexport function initOrder(g) {\n var visited = {};\n var simpleNodes = _.filter(g.nodes(), function (v) {\n return !g.children(v).length;\n });\n var maxRank = _.max(\n _.map(simpleNodes, function (v) {\n return g.node(v).rank;\n }),\n );\n var layers = _.map(_.range(maxRank + 1), function () {\n return [];\n });\n\n function dfs(v) {\n if (_.has(visited, v)) return;\n visited[v] = true;\n var node = g.node(v);\n layers[node.rank].push(v);\n _.forEach(g.successors(v), dfs);\n }\n\n var orderedVs = _.sortBy(simpleNodes, function (v) {\n return g.node(v).rank;\n });\n _.forEach(orderedVs, dfs);\n\n return layers;\n}\n","import * as _ from 'lodash-es';\nimport * as util from '../util.js';\nimport { positionX } from './bk.js';\n\nexport { position };\n\nfunction position(g) {\n g = util.asNonCompoundGraph(g);\n\n positionY(g);\n _.forOwn(positionX(g), function (x, v) {\n g.node(v).x = x;\n });\n}\n\nfunction positionY(g) {\n var layering = util.buildLayerMatrix(g);\n var rankSep = g.graph().ranksep;\n var prevY = 0;\n _.forEach(layering, function (layer) {\n var maxHeight = _.max(\n _.map(layer, function (v) {\n return g.node(v).height;\n }),\n );\n _.forEach(layer, function (v) {\n g.node(v).y = prevY + maxHeight / 2;\n });\n prevY += maxHeight + rankSep;\n });\n}\n","import baseFlatten from './_baseFlatten.js';\nimport baseRest from './_baseRest.js';\nimport baseUniq from './_baseUniq.js';\nimport isArrayLikeObject from './isArrayLikeObject.js';\n\n/**\n * Creates an array of unique values, in order, from all given arrays using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @returns {Array} Returns the new array of combined values.\n * @example\n *\n * _.union([2], [1, 2]);\n * // => [2, 1]\n */\nvar union = baseRest(function(arrays) {\n return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true));\n});\n\nexport default union;\n","import * as _ from 'lodash-es';\n\nvar DEFAULT_EDGE_NAME = '\\x00';\nvar GRAPH_NODE = '\\x00';\nvar EDGE_KEY_DELIM = '\\x01';\n\n// Implementation notes:\n//\n// * Node id query functions should return string ids for the nodes\n// * Edge id query functions should return an \"edgeObj\", edge object, that is\n// composed of enough information to uniquely identify an edge: {v, w, name}.\n// * Internally we use an \"edgeId\", a stringified form of the edgeObj, to\n// reference edges. This is because we need a performant way to look these\n// edges up and, object properties, which have string keys, are the closest\n// we're going to get to a performant hashtable in JavaScript.\n\n// Implementation notes:\n//\n// * Node id query functions should return string ids for the nodes\n// * Edge id query functions should return an \"edgeObj\", edge object, that is\n// composed of enough information to uniquely identify an edge: {v, w, name}.\n// * Internally we use an \"edgeId\", a stringified form of the edgeObj, to\n// reference edges. This is because we need a performant way to look these\n// edges up and, object properties, which have string keys, are the closest\n// we're going to get to a performant hashtable in JavaScript.\nexport class Graph {\n constructor(opts = {}) {\n this._isDirected = Object.prototype.hasOwnProperty.call(opts, 'directed')\n ? opts.directed\n : true;\n this._isMultigraph = Object.prototype.hasOwnProperty.call(opts, 'multigraph')\n ? opts.multigraph\n : false;\n this._isCompound = Object.prototype.hasOwnProperty.call(opts, 'compound')\n ? opts.compound\n : false;\n\n // Label for the graph itself\n this._label = undefined;\n\n // Defaults to be set when creating a new node\n this._defaultNodeLabelFn = _.constant(undefined);\n\n // Defaults to be set when creating a new edge\n this._defaultEdgeLabelFn = _.constant(undefined);\n\n // v -> label\n this._nodes = {};\n\n if (this._isCompound) {\n // v -> parent\n this._parent = {};\n\n // v -> children\n this._children = {};\n this._children[GRAPH_NODE] = {};\n }\n\n // v -> edgeObj\n this._in = {};\n\n // u -> v -> Number\n this._preds = {};\n\n // v -> edgeObj\n this._out = {};\n\n // v -> w -> Number\n this._sucs = {};\n\n // e -> edgeObj\n this._edgeObjs = {};\n\n // e -> label\n this._edgeLabels = {};\n }\n /* === Graph functions ========= */\n isDirected() {\n return this._isDirected;\n }\n isMultigraph() {\n return this._isMultigraph;\n }\n isCompound() {\n return this._isCompound;\n }\n setGraph(label) {\n this._label = label;\n return this;\n }\n graph() {\n return this._label;\n }\n /* === Node functions ========== */\n setDefaultNodeLabel(newDefault) {\n if (!_.isFunction(newDefault)) {\n newDefault = _.constant(newDefault);\n }\n this._defaultNodeLabelFn = newDefault;\n return this;\n }\n nodeCount() {\n return this._nodeCount;\n }\n nodes() {\n return _.keys(this._nodes);\n }\n sources() {\n var self = this;\n return _.filter(this.nodes(), function (v) {\n return _.isEmpty(self._in[v]);\n });\n }\n sinks() {\n var self = this;\n return _.filter(this.nodes(), function (v) {\n return _.isEmpty(self._out[v]);\n });\n }\n setNodes(vs, value) {\n var args = arguments;\n var self = this;\n _.each(vs, function (v) {\n if (args.length > 1) {\n self.setNode(v, value);\n } else {\n self.setNode(v);\n }\n });\n return this;\n }\n setNode(v, value) {\n if (Object.prototype.hasOwnProperty.call(this._nodes, v)) {\n if (arguments.length > 1) {\n this._nodes[v] = value;\n }\n return this;\n }\n\n // @ts-expect-error\n this._nodes[v] = arguments.length > 1 ? value : this._defaultNodeLabelFn(v);\n if (this._isCompound) {\n this._parent[v] = GRAPH_NODE;\n this._children[v] = {};\n this._children[GRAPH_NODE][v] = true;\n }\n this._in[v] = {};\n this._preds[v] = {};\n this._out[v] = {};\n this._sucs[v] = {};\n ++this._nodeCount;\n return this;\n }\n node(v) {\n return this._nodes[v];\n }\n hasNode(v) {\n return Object.prototype.hasOwnProperty.call(this._nodes, v);\n }\n removeNode(v) {\n if (Object.prototype.hasOwnProperty.call(this._nodes, v)) {\n var removeEdge = (e) => this.removeEdge(this._edgeObjs[e]);\n delete this._nodes[v];\n if (this._isCompound) {\n this._removeFromParentsChildList(v);\n delete this._parent[v];\n _.each(this.children(v), (child) => {\n this.setParent(child);\n });\n delete this._children[v];\n }\n _.each(_.keys(this._in[v]), removeEdge);\n delete this._in[v];\n delete this._preds[v];\n _.each(_.keys(this._out[v]), removeEdge);\n delete this._out[v];\n delete this._sucs[v];\n --this._nodeCount;\n }\n return this;\n }\n setParent(v, parent) {\n if (!this._isCompound) {\n throw new Error('Cannot set parent in a non-compound graph');\n }\n\n if (_.isUndefined(parent)) {\n parent = GRAPH_NODE;\n } else {\n // Coerce parent to string\n parent += '';\n for (var ancestor = parent; !_.isUndefined(ancestor); ancestor = this.parent(ancestor)) {\n if (ancestor === v) {\n throw new Error('Setting ' + parent + ' as parent of ' + v + ' would create a cycle');\n }\n }\n\n this.setNode(parent);\n }\n\n this.setNode(v);\n this._removeFromParentsChildList(v);\n this._parent[v] = parent;\n this._children[parent][v] = true;\n return this;\n }\n _removeFromParentsChildList(v) {\n delete this._children[this._parent[v]][v];\n }\n parent(v) {\n if (this._isCompound) {\n var parent = this._parent[v];\n if (parent !== GRAPH_NODE) {\n return parent;\n }\n }\n }\n children(v) {\n if (_.isUndefined(v)) {\n v = GRAPH_NODE;\n }\n\n if (this._isCompound) {\n var children = this._children[v];\n if (children) {\n return _.keys(children);\n }\n } else if (v === GRAPH_NODE) {\n return this.nodes();\n } else if (this.hasNode(v)) {\n return [];\n }\n }\n predecessors(v) {\n var predsV = this._preds[v];\n if (predsV) {\n return _.keys(predsV);\n }\n }\n successors(v) {\n var sucsV = this._sucs[v];\n if (sucsV) {\n return _.keys(sucsV);\n }\n }\n neighbors(v) {\n var preds = this.predecessors(v);\n if (preds) {\n return _.union(preds, this.successors(v));\n }\n }\n isLeaf(v) {\n var neighbors;\n if (this.isDirected()) {\n neighbors = this.successors(v);\n } else {\n neighbors = this.neighbors(v);\n }\n return neighbors.length === 0;\n }\n filterNodes(filter) {\n // @ts-expect-error\n var copy = new this.constructor({\n directed: this._isDirected,\n multigraph: this._isMultigraph,\n compound: this._isCompound,\n });\n\n copy.setGraph(this.graph());\n\n var self = this;\n _.each(this._nodes, function (value, v) {\n if (filter(v)) {\n copy.setNode(v, value);\n }\n });\n\n _.each(this._edgeObjs, function (e) {\n // @ts-expect-error\n if (copy.hasNode(e.v) && copy.hasNode(e.w)) {\n copy.setEdge(e, self.edge(e));\n }\n });\n\n var parents = {};\n function findParent(v) {\n var parent = self.parent(v);\n if (parent === undefined || copy.hasNode(parent)) {\n parents[v] = parent;\n return parent;\n } else if (parent in parents) {\n return parents[parent];\n } else {\n return findParent(parent);\n }\n }\n\n if (this._isCompound) {\n _.each(copy.nodes(), function (v) {\n copy.setParent(v, findParent(v));\n });\n }\n\n return copy;\n }\n /* === Edge functions ========== */\n setDefaultEdgeLabel(newDefault) {\n if (!_.isFunction(newDefault)) {\n newDefault = _.constant(newDefault);\n }\n this._defaultEdgeLabelFn = newDefault;\n return this;\n }\n edgeCount() {\n return this._edgeCount;\n }\n edges() {\n return _.values(this._edgeObjs);\n }\n setPath(vs, value) {\n var self = this;\n var args = arguments;\n _.reduce(vs, function (v, w) {\n if (args.length > 1) {\n self.setEdge(v, w, value);\n } else {\n self.setEdge(v, w);\n }\n return w;\n });\n return this;\n }\n /*\n * setEdge(v, w, [value, [name]])\n * setEdge({ v, w, [name] }, [value])\n */\n setEdge() {\n var v, w, name, value;\n var valueSpecified = false;\n var arg0 = arguments[0];\n\n if (typeof arg0 === 'object' && arg0 !== null && 'v' in arg0) {\n v = arg0.v;\n w = arg0.w;\n name = arg0.name;\n if (arguments.length === 2) {\n value = arguments[1];\n valueSpecified = true;\n }\n } else {\n v = arg0;\n w = arguments[1];\n name = arguments[3];\n if (arguments.length > 2) {\n value = arguments[2];\n valueSpecified = true;\n }\n }\n\n v = '' + v;\n w = '' + w;\n if (!_.isUndefined(name)) {\n name = '' + name;\n }\n\n var e = edgeArgsToId(this._isDirected, v, w, name);\n if (Object.prototype.hasOwnProperty.call(this._edgeLabels, e)) {\n if (valueSpecified) {\n this._edgeLabels[e] = value;\n }\n return this;\n }\n\n if (!_.isUndefined(name) && !this._isMultigraph) {\n throw new Error('Cannot set a named edge when isMultigraph = false');\n }\n\n // It didn't exist, so we need to create it.\n // First ensure the nodes exist.\n this.setNode(v);\n this.setNode(w);\n\n // @ts-expect-error\n this._edgeLabels[e] = valueSpecified ? value : this._defaultEdgeLabelFn(v, w, name);\n\n var edgeObj = edgeArgsToObj(this._isDirected, v, w, name);\n // Ensure we add undirected edges in a consistent way.\n v = edgeObj.v;\n w = edgeObj.w;\n\n Object.freeze(edgeObj);\n this._edgeObjs[e] = edgeObj;\n incrementOrInitEntry(this._preds[w], v);\n incrementOrInitEntry(this._sucs[v], w);\n this._in[w][e] = edgeObj;\n this._out[v][e] = edgeObj;\n this._edgeCount++;\n return this;\n }\n edge(v, w, name) {\n var e =\n arguments.length === 1\n ? edgeObjToId(this._isDirected, arguments[0])\n : edgeArgsToId(this._isDirected, v, w, name);\n return this._edgeLabels[e];\n }\n hasEdge(v, w, name) {\n var e =\n arguments.length === 1\n ? edgeObjToId(this._isDirected, arguments[0])\n : edgeArgsToId(this._isDirected, v, w, name);\n return Object.prototype.hasOwnProperty.call(this._edgeLabels, e);\n }\n removeEdge(v, w, name) {\n var e =\n arguments.length === 1\n ? edgeObjToId(this._isDirected, arguments[0])\n : edgeArgsToId(this._isDirected, v, w, name);\n var edge = this._edgeObjs[e];\n if (edge) {\n v = edge.v;\n w = edge.w;\n delete this._edgeLabels[e];\n delete this._edgeObjs[e];\n decrementOrRemoveEntry(this._preds[w], v);\n decrementOrRemoveEntry(this._sucs[v], w);\n delete this._in[w][e];\n delete this._out[v][e];\n this._edgeCount--;\n }\n return this;\n }\n inEdges(v, u) {\n var inV = this._in[v];\n if (inV) {\n var edges = _.values(inV);\n if (!u) {\n return edges;\n }\n return _.filter(edges, function (edge) {\n return edge.v === u;\n });\n }\n }\n outEdges(v, w) {\n var outV = this._out[v];\n if (outV) {\n var edges = _.values(outV);\n if (!w) {\n return edges;\n }\n return _.filter(edges, function (edge) {\n return edge.w === w;\n });\n }\n }\n nodeEdges(v, w) {\n var inEdges = this.inEdges(v, w);\n if (inEdges) {\n return inEdges.concat(this.outEdges(v, w));\n }\n }\n}\n\n/* Number of nodes in the graph. Should only be changed by the implementation. */\nGraph.prototype._nodeCount = 0;\n\n/* Number of edges in the graph. Should only be changed by the implementation. */\nGraph.prototype._edgeCount = 0;\n\nfunction incrementOrInitEntry(map, k) {\n if (map[k]) {\n map[k]++;\n } else {\n map[k] = 1;\n }\n}\n\nfunction decrementOrRemoveEntry(map, k) {\n if (!--map[k]) {\n delete map[k];\n }\n}\n\nfunction edgeArgsToId(isDirected, v_, w_, name) {\n var v = '' + v_;\n var w = '' + w_;\n if (!isDirected && v > w) {\n var tmp = v;\n v = w;\n w = tmp;\n }\n return v + EDGE_KEY_DELIM + w + EDGE_KEY_DELIM + (_.isUndefined(name) ? DEFAULT_EDGE_NAME : name);\n}\n\nfunction edgeArgsToObj(isDirected, v_, w_, name) {\n var v = '' + v_;\n var w = '' + w_;\n if (!isDirected && v > w) {\n var tmp = v;\n v = w;\n w = tmp;\n }\n var edgeObj = { v: v, w: w };\n if (name) {\n edgeObj.name = name;\n }\n return edgeObj;\n}\n\nfunction edgeObjToId(isDirected, edgeObj) {\n return edgeArgsToId(isDirected, edgeObj.v, edgeObj.w, edgeObj.name);\n}\n","import isSymbol from './isSymbol.js';\n\n/**\n * The base implementation of methods like `_.max` and `_.min` which accepts a\n * `comparator` to determine the extremum value.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The iteratee invoked per iteration.\n * @param {Function} comparator The comparator used to compare values.\n * @returns {*} Returns the extremum value.\n */\nfunction baseExtremum(array, iteratee, comparator) {\n var index = -1,\n length = array.length;\n\n while (++index < length) {\n var value = array[index],\n current = iteratee(value);\n\n if (current != null && (computed === undefined\n ? (current === current && !isSymbol(current))\n : comparator(current, computed)\n )) {\n var computed = current,\n result = value;\n }\n }\n return result;\n}\n\nexport default baseExtremum;\n","import baseEach from './_baseEach.js';\nimport isArrayLike from './isArrayLike.js';\n\n/**\n * The base implementation of `_.map` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction baseMap(collection, iteratee) {\n var index = -1,\n result = isArrayLike(collection) ? Array(collection.length) : [];\n\n baseEach(collection, function(value, key, collection) {\n result[++index] = iteratee(value, key, collection);\n });\n return result;\n}\n\nexport default baseMap;\n","import baseRest from './_baseRest.js';\nimport eq from './eq.js';\nimport isIterateeCall from './_isIterateeCall.js';\nimport keysIn from './keysIn.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Assigns own and inherited enumerable string keyed properties of source\n * objects to the destination object for all destination properties that\n * resolve to `undefined`. Source objects are applied from left to right.\n * Once a property is set, additional values of the same property are ignored.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.defaultsDeep\n * @example\n *\n * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\nvar defaults = baseRest(function(object, sources) {\n object = Object(object);\n\n var index = -1;\n var length = sources.length;\n var guard = length > 2 ? sources[2] : undefined;\n\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n length = 1;\n }\n\n while (++index < length) {\n var source = sources[index];\n var props = keysIn(source);\n var propsIndex = -1;\n var propsLength = props.length;\n\n while (++propsIndex < propsLength) {\n var key = props[propsIndex];\n var value = object[key];\n\n if (value === undefined ||\n (eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n object[key] = source[key];\n }\n }\n }\n\n return object;\n});\n\nexport default defaults;\n","/** Used to match a single whitespace character. */\nvar reWhitespace = /\\s/;\n\n/**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\nfunction trimmedEndIndex(string) {\n var index = string.length;\n\n while (index-- && reWhitespace.test(string.charAt(index))) {}\n return index;\n}\n\nexport default trimmedEndIndex;\n","import trimmedEndIndex from './_trimmedEndIndex.js';\n\n/** Used to match leading whitespace. */\nvar reTrimStart = /^\\s+/;\n\n/**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\nfunction baseTrim(string) {\n return string\n ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n : string;\n}\n\nexport default baseTrim;\n","import baseTrim from './_baseTrim.js';\nimport isObject from './isObject.js';\nimport isSymbol from './isSymbol.js';\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = baseTrim(value);\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nexport default toNumber;\n","import toNumber from './toNumber.js';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0,\n MAX_INTEGER = 1.7976931348623157e+308;\n\n/**\n * Converts `value` to a finite number.\n *\n * @static\n * @memberOf _\n * @since 4.12.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted number.\n * @example\n *\n * _.toFinite(3.2);\n * // => 3.2\n *\n * _.toFinite(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toFinite(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toFinite('3.2');\n * // => 3.2\n */\nfunction toFinite(value) {\n if (!value) {\n return value === 0 ? value : 0;\n }\n value = toNumber(value);\n if (value === INFINITY || value === -INFINITY) {\n var sign = (value < 0 ? -1 : 1);\n return sign * MAX_INTEGER;\n }\n return value === value ? value : 0;\n}\n\nexport default toFinite;\n","import baseFlatten from './_baseFlatten.js';\n\n/**\n * Flattens `array` a single level deep.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * _.flatten([1, [2, [3, [4]], 5]]);\n * // => [1, 2, [3, [4]], 5]\n */\nfunction flatten(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseFlatten(array, 1) : [];\n}\n\nexport default flatten;\n","import arrayMap from './_arrayMap.js';\nimport baseIteratee from './_baseIteratee.js';\nimport baseMap from './_baseMap.js';\nimport isArray from './isArray.js';\n\n/**\n * Creates an array of values by running each element in `collection` thru\n * `iteratee`. The iteratee is invoked with three arguments:\n * (value, index|key, collection).\n *\n * Many lodash methods are guarded to work as iteratees for methods like\n * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`.\n *\n * The guarded methods are:\n * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`,\n * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`,\n * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`,\n * `template`, `trim`, `trimEnd`, `trimStart`, and `words`\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * _.map([4, 8], square);\n * // => [16, 64]\n *\n * _.map({ 'a': 4, 'b': 8 }, square);\n * // => [16, 64] (iteration order is not guaranteed)\n *\n * var users = [\n * { 'user': 'barney' },\n * { 'user': 'fred' }\n * ];\n *\n * // The `_.property` iteratee shorthand.\n * _.map(users, 'user');\n * // => ['barney', 'fred']\n */\nfunction map(collection, iteratee) {\n var func = isArray(collection) ? arrayMap : baseMap;\n return func(collection, baseIteratee(iteratee, 3));\n}\n\nexport default map;\n","import assignValue from './_assignValue.js';\nimport castPath from './_castPath.js';\nimport isIndex from './_isIndex.js';\nimport isObject from './isObject.js';\nimport toKey from './_toKey.js';\n\n/**\n * The base implementation of `_.set`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @param {Function} [customizer] The function to customize path creation.\n * @returns {Object} Returns `object`.\n */\nfunction baseSet(object, path, value, customizer) {\n if (!isObject(object)) {\n return object;\n }\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n lastIndex = length - 1,\n nested = object;\n\n while (nested != null && ++index < length) {\n var key = toKey(path[index]),\n newValue = value;\n\n if (key === '__proto__' || key === 'constructor' || key === 'prototype') {\n return object;\n }\n\n if (index != lastIndex) {\n var objValue = nested[key];\n newValue = customizer ? customizer(objValue, key, nested) : undefined;\n if (newValue === undefined) {\n newValue = isObject(objValue)\n ? objValue\n : (isIndex(path[index + 1]) ? [] : {});\n }\n }\n assignValue(nested, key, newValue);\n nested = nested[key];\n }\n return object;\n}\n\nexport default baseSet;\n","import baseGet from './_baseGet.js';\nimport baseSet from './_baseSet.js';\nimport castPath from './_castPath.js';\n\n/**\n * The base implementation of `_.pickBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} paths The property paths to pick.\n * @param {Function} predicate The function invoked per property.\n * @returns {Object} Returns the new object.\n */\nfunction basePickBy(object, paths, predicate) {\n var index = -1,\n length = paths.length,\n result = {};\n\n while (++index < length) {\n var path = paths[index],\n value = baseGet(object, path);\n\n if (predicate(value, path)) {\n baseSet(result, castPath(path, object), value);\n }\n }\n return result;\n}\n\nexport default basePickBy;\n","/**\n * The base implementation of `_.lt` which doesn't coerce arguments.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is less than `other`,\n * else `false`.\n */\nfunction baseLt(value, other) {\n return value < other;\n}\n\nexport default baseLt;\n","import baseExtremum from './_baseExtremum.js';\nimport baseLt from './_baseLt.js';\nimport identity from './identity.js';\n\n/**\n * Computes the minimum value of `array`. If `array` is empty or falsey,\n * `undefined` is returned.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Math\n * @param {Array} array The array to iterate over.\n * @returns {*} Returns the minimum value.\n * @example\n *\n * _.min([4, 2, 8, 6]);\n * // => 2\n *\n * _.min([]);\n * // => undefined\n */\nfunction min(array) {\n return (array && array.length)\n ? baseExtremum(array, identity, baseLt)\n : undefined;\n}\n\nexport default min;\n","/**\n * Gets the last element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the last element of `array`.\n * @example\n *\n * _.last([1, 2, 3]);\n * // => 3\n */\nfunction last(array) {\n var length = array == null ? 0 : array.length;\n return length ? array[length - 1] : undefined;\n}\n\nexport default last;\n","import toFinite from './toFinite.js';\n\n/**\n * Converts `value` to an integer.\n *\n * **Note:** This method is loosely based on\n * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toInteger(3.2);\n * // => 3\n *\n * _.toInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toInteger(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toInteger('3.2');\n * // => 3\n */\nfunction toInteger(value) {\n var result = toFinite(value),\n remainder = result % 1;\n\n return result === result ? (remainder ? result - remainder : result) : 0;\n}\n\nexport default toInteger;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.has` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\nfunction baseHas(object, key) {\n return object != null && hasOwnProperty.call(object, key);\n}\n\nexport default baseHas;\n","import baseHas from './_baseHas.js';\nimport hasPath from './_hasPath.js';\n\n/**\n * Checks if `path` is a direct property of `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = { 'a': { 'b': 2 } };\n * var other = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.has(object, 'a');\n * // => true\n *\n * _.has(object, 'a.b');\n * // => true\n *\n * _.has(object, ['a', 'b']);\n * // => true\n *\n * _.has(other, 'a');\n * // => false\n */\nfunction has(object, path) {\n return object != null && hasPath(object, path, baseHas);\n}\n\nexport default has;\n","import baseGetTag from './_baseGetTag.js';\nimport isArray from './isArray.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar stringTag = '[object String]';\n\n/**\n * Checks if `value` is classified as a `String` primitive or object.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a string, else `false`.\n * @example\n *\n * _.isString('abc');\n * // => true\n *\n * _.isString(1);\n * // => false\n */\nfunction isString(value) {\n return typeof value == 'string' ||\n (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag);\n}\n\nexport default isString;\n"],"names":["nativeMax","Math","max","findIndexFunc","array","predicate","fromIndex","length","index","toInteger","collection","iterable","Object","isArrayLike","iteratee","keys","key","undefined","idCounter","prefix","id","nativeCeil","ceil","start","end","step","toFinite","fromRight","result","Array","List","constructor","sentinel","_next","_prev","this","_sentinel","dequeue","entry","unlink","enqueue","toString","strs","curr","push","JSON","stringify","filterOutLinks","join","k","v","DEFAULT_WEIGHT_FN","removeNode","g","buckets","zeroIdx","collectPredecessors","results","inEdges","edge","weight","uEntry","node","w","out","assignBucket","outEdges","wEntry","run","fas","graph","acyclicer","weightFn","nodeCount","state","fasGraph","maxIn","maxOut","nodes","setNode","in","edges","e","prevWeight","edgeWeight","setEdge","map","buildState","sources","sinks","i","concat","doGreedyFAS","greedyFAS","stack","visited","dfs","prototype","hasOwnProperty","call","dfsFAS","label","removeEdge","forwardName","name","reversed","func","object","paths","value","path","hasIn","flatten","other","identity","Date","now","addDummyNode","type","attrs","hasNode","dummy","asNonCompoundGraph","simplified","multigraph","isMultigraph","setGraph","children","intersectRect","rect","point","sx","sy","x","y","dx","dy","width","h","height","Error","abs","buildLayerMatrix","layering","rank","order","addBorderNode","arguments","fn","console","log","notime","prop","sg","sgNode","borderType","prev","setParent","swapWidthHeight","swapWidthHeightOne","reverseYOne","swapXYOne","longestPath","minlen","Number","POSITIVE_INFINITY","slack","feasibleTree","delta","t","directed","size","tightTree","findMinSlackEdge","shiftRanks","nodeEdges","edgeV","RegExp","rsAstral","rsCombo","rsFitz","rsNonAstral","rsRegional","rsSurrPair","reOptMod","rsModifier","rsOptVar","rsSeq","rsSymbol","vs","navigation","isDirected","successors","neighbors","bind","acc","doDfs","postorder","networkSimplex","simpleLabel","simplify","initLowLimValues","initCutValues","leaveEdge","exchangeEdges","enterEdge","slice","child","parent","cutvalue","calcCutValue","assignCutValue","childIsTail","graphEdge","cutValue","u","isOutEdge","pointsToHead","otherWeight","hasEdge","otherCutValue","tree","root","dfsAssignLowLim","nextLim","low","lim","vLabel","wLabel","tailLabel","flip","candidates","isDescendant","f","flipped","updateRanks","rootLabel","ranker","networkSimplexRanker","tightTreeRanker","longestPathRanker","depths","depth","treeDepths","nodeSep","nestingRoot","sumWeights","nodeRankFactor","top","bottom","borderTop","borderBottom","childNode","childTop","childBottom","thisWeight","nestingEdge","CLONE_DEEP_FLAG","props","values","assignFunc","valsLength","valIsDefined","valIsNull","valIsReflexive","valIsSymbol","isSymbol","othIsDefined","othIsNull","othIsReflexive","othIsSymbol","iteratees","orders","isArray","comparer","sort","objCriteria","criteria","othCriteria","ordersLength","crossCount","cc","twoLayerCrossCount","northLayer","southLayer","southPos","southEntries","pos","firstIndex","treeSize","forEach","weightSum","entries","biasRight","bias","parts","lhs","rhs","sortable","unsortable","sum","vsIndex","entryV","entryW","barycenter","consumeUnsortable","last","pop","sortSubgraph","cg","movable","bl","borderLeft","br","borderRight","subgraphs","barycenters","inV","nodeU","subgraphResult","target","mappedEntries","tmp","indegree","sourceSet","handleIn","vEntry","source","merged","min","handleOut","reverse","doResolveConflicts","resolveConflicts","expandSubgraphs","predecessors","blPred","brPred","buildLayerGraphs","ranks","relationship","createRootNode","compound","setDefaultNodeLabel","minRank","maxRank","buildLayerGraph","sweepLayerGraphs","layerGraphs","lg","sorted","rootPrev","prevChild","addSubgraphConstraints","assignOrder","layer","keysIn","addConflict","conflicts","conflictsV","hasConflict","positionX","adjustedLayering","prevLayer","k0","scanPos","prevLayerLength","lastNode","findOtherInnerSegmentNode","k1","scanNode","uLabel","uPos","findType1Conflicts","scan","south","southEnd","prevNorthBorder","nextNorthBorder","uNode","north","nextNorthPos","prevNorthPos","southLookahead","findType2Conflicts","xss","vert","horiz","inner","neighborFn","align","prevIdx","ws","mp","floor","il","verticalAlignment","xs","reverseSep","blockG","blockGraph","graphLabel","sepFn","edgeSep","labelpos","toLowerCase","sep","nodesep","edgesep","vRoot","uRoot","prevMax","buildBlockGraph","iterate","setXsFunc","nextNodesFunc","elem","reduce","horizontalCompaction","smallestWidth","NEGATIVE_INFINITY","halfWidth","findSmallestWidthAlignment","alignTo","alignToVals","alignToMin","alignToMax","alignment","xsVals","alignCoordinates","ul","ignore","balance","layout","opts","time","debugTiming","layoutGraph","inputGraph","canonicalize","graphDefaults","selectNumberAttrs","graphNumAttrs","graphAttrs","nodeNumAttrs","nodeDefaults","edgeDefaults","edgeNumAttrs","edgeAttrs","buildLayoutGraph","ranksep","rankdir","labeloffset","makeSpaceForEdgeLabels","selfEdges","removeSelfEdges","injectEdgeLabelProxies","offset","layers","assignRankMinMax","labelRank","removeEdgeLabelProxies","dummyChains","vRank","wRank","edgeLabel","points","edgeObj","normalizeEdge","postorderNums","pathData","lca","vPath","wPath","findPath","pathIdx","pathV","ascending","parentDummyChains","addBorderSegments","downLayerGraphs","upLayerGraphs","simpleNodes","orderedVs","initOrder","best","bestCC","lastBest","orderShift","selfEdge","insertSelfEdges","rankDir","rankSep","prevY","maxHeight","positionY","position","selfNode","positionSelfEdges","b","l","r","removeBorderNodes","origLabel","fixupEdgeLabelCoords","reverseY","swapXY","minX","maxX","minY","maxY","marginX","marginx","marginY","marginy","getExtremes","p","translateGraph","p1","p2","nodeV","nodeW","unshift","assignNodeIntersects","reversePointsForReversedEdges","runLayout","inputLabel","layoutLabel","updateInputGraph","obj","newAttrs","arrays","isArrayLikeObject","GRAPH_NODE","Graph","_isDirected","_isMultigraph","_isCompound","_label","_defaultNodeLabelFn","_defaultEdgeLabelFn","_nodes","_parent","_children","_in","_preds","_out","_sucs","_edgeObjs","_edgeLabels","isCompound","newDefault","_nodeCount","self","setNodes","args","_removeFromParentsChildList","ancestor","predsV","sucsV","preds","isLeaf","filterNodes","filter","copy","parents","findParent","setDefaultEdgeLabel","edgeCount","_edgeCount","setPath","valueSpecified","arg0","edgeArgsToId","v_","w_","edgeArgsToObj","freeze","incrementOrInitEntry","edgeObjToId","decrementOrRemoveEntry","outV","comparator","current","computed","objectProto","guard","propsIndex","propsLength","reWhitespace","reTrimStart","string","test","charAt","replace","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","parseInt","INFINITY","isObject","valueOf","isBinary","customizer","lastIndex","nested","newValue","objValue","remainder"],"sourceRoot":""}