UNPKG

@gracexwho/model-card-generator

Version:

Tool for generating model cards for Jupyter Notebook.

64 lines (56 loc) 1.74 kB
//var py = require("../lib/python-program-analysis/dist/es5"); var py = require("modified-python-program-analysis/dist/es5"); module.exports = { getSourceFromCell: function(cell){ return cell.source.join('') }, isInCellBoundaries: function(lineNo, cellLineNos){ let first = cellLineNos[0]; let last = cellLineNos[1]; return (lineNo >= first && lineNo <= last); }, getDefUse: function(code){ let tree = py.parse(code); let cfg = new py.ControlFlowGraph(tree); const analyzer = new py.DataflowAnalyzer(); const flows = analyzer.analyze(cfg).dataflows; return flows; }, getRandomInt: function(min, max) { min = Math.ceil(min); max = Math.floor(max); return Math.floor(Math.random() * (max - min + 1)) + min; }, breadthFirstSearch: function(cell, dict, searchDependents=false){ let visited = new Set(); let stack = [cell]; let neighbors = []; while (stack.length > 0){ let current = stack.pop(); visited.add(current); searchDependents ? neighbors = current.dependents : neighbors = current.dependentOn; if (neighbors !== undefined){ neighbors.forEach(neighbor => { neighbor = dict[neighbor]; if (!visited.has(neighbor)){ stack.push(neighbor); } }); } } visited.delete(cell); return visited; }, // printCell takes in an execution count and outputs the corresponding cell according to the mode parameter printCell: function(count, mode, dict){ let currentCell = dict[count]; if (mode === "code"){ return utils.getSourceFromCell(currentCell); } else if (mode === "line"){ return currentCell.lineNos; } else { // (mode == "count") return count; } } }