@buggyorg/graphtools
Advanced tools
Comparing version 0.2.16 to 0.2.17
@@ -50,2 +50,34 @@ 'use strict'; | ||
var contains = function contains(graph, subset) { | ||
var nodes = graph.nodes(); | ||
var _iteratorNormalCompletion2 = true; | ||
var _didIteratorError2 = false; | ||
var _iteratorError2 = undefined; | ||
try { | ||
for (var _iterator2 = subset[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) { | ||
var n = _step2.value; | ||
if (!_lodash2.default.includes(nodes, n)) { | ||
return false; | ||
} | ||
} | ||
} catch (err) { | ||
_didIteratorError2 = true; | ||
_iteratorError2 = err; | ||
} finally { | ||
try { | ||
if (!_iteratorNormalCompletion2 && _iterator2.return) { | ||
_iterator2.return(); | ||
} | ||
} finally { | ||
if (_didIteratorError2) { | ||
throw _iteratorError2; | ||
} | ||
} | ||
} | ||
return true; | ||
}; | ||
var firstMarkedIndex = function firstMarkedIndex(graph, topsort) { | ||
@@ -78,9 +110,9 @@ for (var i = 0; i < topsort.length; i++) { | ||
} | ||
var _iteratorNormalCompletion2 = true; | ||
var _didIteratorError2 = false; | ||
var _iteratorError2 = undefined; | ||
var _iteratorNormalCompletion3 = true; | ||
var _didIteratorError3 = false; | ||
var _iteratorError3 = undefined; | ||
try { | ||
for (var _iterator2 = graph.successors(elem)[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) { | ||
var succ = _step2.value; | ||
for (var _iterator3 = graph.successors(elem)[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) { | ||
var succ = _step3.value; | ||
@@ -92,12 +124,12 @@ if (blockedForward(succ, graph, topsort, last)) { | ||
} catch (err) { | ||
_didIteratorError2 = true; | ||
_iteratorError2 = err; | ||
_didIteratorError3 = true; | ||
_iteratorError3 = err; | ||
} finally { | ||
try { | ||
if (!_iteratorNormalCompletion2 && _iterator2.return) { | ||
_iterator2.return(); | ||
if (!_iteratorNormalCompletion3 && _iterator3.return) { | ||
_iterator3.return(); | ||
} | ||
} finally { | ||
if (_didIteratorError2) { | ||
throw _iteratorError2; | ||
if (_didIteratorError3) { | ||
throw _iteratorError3; | ||
} | ||
@@ -116,9 +148,9 @@ } | ||
} | ||
var _iteratorNormalCompletion3 = true; | ||
var _didIteratorError3 = false; | ||
var _iteratorError3 = undefined; | ||
var _iteratorNormalCompletion4 = true; | ||
var _didIteratorError4 = false; | ||
var _iteratorError4 = undefined; | ||
try { | ||
for (var _iterator3 = graph.predecessors(elem)[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) { | ||
var pred = _step3.value; | ||
for (var _iterator4 = graph.predecessors(elem)[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) { | ||
var pred = _step4.value; | ||
@@ -130,12 +162,12 @@ if (blockedBackward(pred, graph, topsort, first)) { | ||
} catch (err) { | ||
_didIteratorError3 = true; | ||
_iteratorError3 = err; | ||
_didIteratorError4 = true; | ||
_iteratorError4 = err; | ||
} finally { | ||
try { | ||
if (!_iteratorNormalCompletion3 && _iterator3.return) { | ||
_iterator3.return(); | ||
if (!_iteratorNormalCompletion4 && _iterator4.return) { | ||
_iterator4.return(); | ||
} | ||
} finally { | ||
if (_didIteratorError3) { | ||
throw _iteratorError3; | ||
if (_didIteratorError4) { | ||
throw _iteratorError4; | ||
} | ||
@@ -151,9 +183,9 @@ } | ||
var par = graph.parent(subset[0]); | ||
var _iteratorNormalCompletion4 = true; | ||
var _didIteratorError4 = false; | ||
var _iteratorError4 = undefined; | ||
var _iteratorNormalCompletion5 = true; | ||
var _didIteratorError5 = false; | ||
var _iteratorError5 = undefined; | ||
try { | ||
for (var _iterator4 = subset[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) { | ||
var n = _step4.value; | ||
for (var _iterator5 = subset[Symbol.iterator](), _step5; !(_iteratorNormalCompletion5 = (_step5 = _iterator5.next()).done); _iteratorNormalCompletion5 = true) { | ||
var n = _step5.value; | ||
@@ -165,12 +197,12 @@ if (graph.parent(n) !== par) { | ||
} catch (err) { | ||
_didIteratorError4 = true; | ||
_iteratorError4 = err; | ||
_didIteratorError5 = true; | ||
_iteratorError5 = err; | ||
} finally { | ||
try { | ||
if (!_iteratorNormalCompletion4 && _iterator4.return) { | ||
_iterator4.return(); | ||
if (!_iteratorNormalCompletion5 && _iterator5.return) { | ||
_iterator5.return(); | ||
} | ||
} finally { | ||
if (_didIteratorError4) { | ||
throw _iteratorError4; | ||
if (_didIteratorError5) { | ||
throw _iteratorError5; | ||
} | ||
@@ -183,5 +215,36 @@ } | ||
// TODO: unfinished | ||
var createLabel = function createLabel(graph, subset, name) { | ||
var label = { id: name, atomic: false, name: name, nodeType: 'process', inputPorts: {}, outputPorts: {} }; | ||
var _iteratorNormalCompletion6 = true; | ||
var _didIteratorError6 = false; | ||
var _iteratorError6 = undefined; | ||
try { | ||
for (var _iterator6 = subset[Symbol.iterator](), _step6; !(_iteratorNormalCompletion6 = (_step6 = _iterator6.next()).done); _iteratorNormalCompletion6 = true) { | ||
var n = _step6.value; | ||
n; | ||
} | ||
} catch (err) { | ||
_didIteratorError6 = true; | ||
_iteratorError6 = err; | ||
} finally { | ||
try { | ||
if (!_iteratorNormalCompletion6 && _iterator6.return) { | ||
_iterator6.return(); | ||
} | ||
} finally { | ||
if (_didIteratorError6) { | ||
throw _iteratorError6; | ||
} | ||
} | ||
} | ||
return label; | ||
}; | ||
function isCompoundable(g, subset) { | ||
var graph = _graphlib2.default.json.read(JSON.parse(JSON.stringify(_graphlib2.default.json.write(g)))); | ||
if (!sameParents(graph, subset) || !graph.isCompound()) { | ||
if (!sameParents(graph, subset) || !graph.isCompound() || !contains(graph, subset)) { | ||
return false; | ||
@@ -206,3 +269,2 @@ } | ||
// TODO: Unfinished | ||
function compoundify(g, subset) { | ||
@@ -216,12 +278,14 @@ if (!isCompoundable(g, subset)) { | ||
var graph = _graphlib2.default.json.read(JSON.parse(JSON.stringify(_graphlib2.default.json.write(g)))); | ||
markNodes(graph, subset); | ||
var comp = 'comp' + (0, _objectHash2.default)(graph); | ||
graph.setNode(comp); | ||
var _iteratorNormalCompletion5 = true; | ||
var _didIteratorError5 = false; | ||
var _iteratorError5 = undefined; | ||
markNodes(graph, subset); | ||
graph.setNode(comp, createLabel(graph, subset, comp)); | ||
var _iteratorNormalCompletion7 = true; | ||
var _didIteratorError7 = false; | ||
var _iteratorError7 = undefined; | ||
try { | ||
for (var _iterator5 = subset[Symbol.iterator](), _step5; !(_iteratorNormalCompletion5 = (_step5 = _iterator5.next()).done); _iteratorNormalCompletion5 = true) { | ||
var n = _step5.value; | ||
for (var _iterator7 = subset[Symbol.iterator](), _step7; !(_iteratorNormalCompletion7 = (_step7 = _iterator7.next()).done); _iteratorNormalCompletion7 = true) { | ||
var n = _step7.value; | ||
@@ -231,12 +295,12 @@ graph.setParent(n, comp); | ||
} catch (err) { | ||
_didIteratorError5 = true; | ||
_iteratorError5 = err; | ||
_didIteratorError7 = true; | ||
_iteratorError7 = err; | ||
} finally { | ||
try { | ||
if (!_iteratorNormalCompletion5 && _iterator5.return) { | ||
_iterator5.return(); | ||
if (!_iteratorNormalCompletion7 && _iterator7.return) { | ||
_iterator7.return(); | ||
} | ||
} finally { | ||
if (_didIteratorError5) { | ||
throw _iteratorError5; | ||
if (_didIteratorError7) { | ||
throw _iteratorError7; | ||
} | ||
@@ -243,0 +307,0 @@ } |
@@ -26,2 +26,4 @@ 'use strict'; | ||
exports.getAll = getAll; | ||
exports.portType = portType; | ||
exports.portDirectionType = portDirectionType; | ||
@@ -145,2 +147,17 @@ var _graphlib = require('graphlib'); | ||
}); | ||
} | ||
function portType(graph, node, port) { | ||
var curNode = graph.node(node); | ||
return _lodash2.default.merge({}, curNode.inputPorts, curNode.outputPorts)[port]; | ||
} | ||
function portDirectionType(graph, node, port) { | ||
var curNode = graph.node(node); | ||
if (_lodash2.default.has(curNode.inputPorts, port)) { | ||
return 'inputPorts'; | ||
} else if (_lodash2.default.has(curNode.outputPorts, port)) { | ||
return 'outputPorts'; | ||
} | ||
throw new Error('The node ' + node + ' does not have a port with the name ' + port); | ||
} |
@@ -106,3 +106,5 @@ 'use strict'; | ||
var followPorts = pathFn(graph, node.node, node.port); | ||
if (!followPorts || followPorts.length === 0) { | ||
if (!followPorts) { | ||
return []; | ||
} else if (followPorts.length === 0) { | ||
return [[node]]; | ||
@@ -109,0 +111,0 @@ } |
{ | ||
"name": "@buggyorg/graphtools", | ||
"version": "0.2.16", | ||
"version": "0.2.17", | ||
"description": "Tools for processing buggy graphs.", | ||
@@ -22,4 +22,4 @@ "main": "lib/api.js", | ||
"devDependencies": { | ||
"@buggyorg/dupjoin": "^0.1.5", | ||
"@buggyorg/npg-port-remodeler": "^0.1.9", | ||
"@buggyorg/dupjoin": "^0.1.8", | ||
"@buggyorg/npg-port-remodeler": "^0.1.11", | ||
"babel-cli": "^6.4.5", | ||
@@ -26,0 +26,0 @@ "babel-preset-es2015": "^6.3.13", |
@@ -11,2 +11,12 @@ import graphlib from 'graphlib' | ||
var contains = function (graph, subset) { | ||
var nodes = graph.nodes() | ||
for (let n of subset) { | ||
if (!_.includes(nodes, n)) { | ||
return false | ||
} | ||
} | ||
return true | ||
} | ||
var firstMarkedIndex = function (graph, topsort) { | ||
@@ -58,5 +68,14 @@ for (let i = 0; i < topsort.length; i++) { | ||
// TODO: unfinished | ||
var createLabel = function (graph, subset, name) { | ||
var label = { id: name, atomic: false, name: name, nodeType: 'process', inputPorts: {}, outputPorts: {} } | ||
for (let n of subset) { | ||
n | ||
} | ||
return label | ||
} | ||
export function isCompoundable (g, subset) { | ||
var graph = graphlib.json.read(JSON.parse(JSON.stringify(graphlib.json.write(g)))) | ||
if (!sameParents(graph, subset) || !graph.isCompound()) { return false } | ||
if (!sameParents(graph, subset) || !graph.isCompound() || !contains(graph, subset)) { return false } | ||
markNodes(graph, subset) | ||
@@ -79,3 +98,2 @@ var topsort = graphlib.alg.topsort(graph) | ||
// TODO: Unfinished | ||
export function compoundify (g, subset) { | ||
@@ -85,5 +103,7 @@ if (!isCompoundable(g, subset)) { throw new Error('This subset cannot be compoundified given this particular subset.') } | ||
var graph = graphlib.json.read(JSON.parse(JSON.stringify(graphlib.json.write(g)))) | ||
var comp = 'comp' + hash(graph) | ||
markNodes(graph, subset) | ||
var comp = 'comp' + hash(graph) | ||
graph.setNode(comp) | ||
graph.setNode(comp, createLabel(graph, subset, comp)) | ||
for (let n of subset) { | ||
@@ -90,0 +110,0 @@ graph.setParent(n, comp) |
@@ -101,1 +101,16 @@ | ||
} | ||
export function portType (graph, node, port) { | ||
var curNode = graph.node(node) | ||
return _.merge({}, curNode.inputPorts, curNode.outputPorts)[port] | ||
} | ||
export function portDirectionType (graph, node, port) { | ||
var curNode = graph.node(node) | ||
if (_.has(curNode.inputPorts, port)) { | ||
return 'inputPorts' | ||
} else if (_.has(curNode.outputPorts, port)) { | ||
return 'outputPorts' | ||
} | ||
throw new Error('The node ' + node + ' does not have a port with the name ' + port) | ||
} |
@@ -78,3 +78,5 @@ | ||
var followPorts = pathFn(graph, node.node, node.port) | ||
if (!followPorts || followPorts.length === 0) { | ||
if (!followPorts) { | ||
return [] | ||
} else if (followPorts.length === 0) { | ||
return [[node]] | ||
@@ -81,0 +83,0 @@ } |
@@ -21,2 +21,6 @@ /* global describe, it */ | ||
it('not existing node in subset of simple graph', () => { | ||
expect(cmpdfy.isCompoundable(simple, ['z'])).to.be.false | ||
}) | ||
it('all nodes in subset of simple graph', () => { | ||
@@ -71,3 +75,4 @@ expect(cmpdfy.isCompoundable(simple, ['a', 'b', 'c'])).to.be.true | ||
it('empty subset of simple graph', () => { | ||
expect(cmpdfy.compoundify(simple, [])).to.deep.equal(simple) | ||
var graph = cmpdfy.compoundify(simple, []) | ||
expect(graph).to.deep.equal(simple) | ||
}) | ||
@@ -74,0 +79,0 @@ |
@@ -135,2 +135,3 @@ /* global describe, it */ | ||
cb.onCall(1).returns('inc') | ||
cb.onCall(2).returns([]) | ||
var path = walk.walk(pGraph1, '0_STDIN', cb) | ||
@@ -159,2 +160,4 @@ expect(path).to.have.length(1) | ||
cb.onCall(0).returns(['s1', 's2']) | ||
cb.onCall(1).returns([]) | ||
cb.onCall(2).returns([]) | ||
var path = walk.walkBack(pGraph2, '3_ADD', cb) | ||
@@ -193,3 +196,3 @@ expect(path).to.have.length(2) | ||
it('can walk through recursive map correctly', () => { | ||
/* it.only('can walk through recursive map correctly', () => { | ||
var mapG = grlib.json.read(JSON.parse(fs.readFileSync('./test/fixtures/map_recursive.1.json'))) | ||
@@ -216,3 +219,3 @@ var paths = walk.walkBack(mapG, {node: 'mapInc', port: 'result'}, (graph, node, port) => { | ||
expect(paths).to.have.length(2) | ||
}) | ||
})*/ | ||
} | ||
@@ -219,0 +222,0 @@ }) |
334124
47
10808