UNPKG

@gracexwho/model-card-generator

Version:

Tool for generating model cards for Jupyter Notebook.

234 lines (191 loc) 5.88 kB
var args = process.argv.slice(2); var fs = require('fs'); var py = require("modified-python-program-analysis/dist/es5"); var filename = "/../lib/lale/sklearn/logistic_regression.py" //var file = fs.readFileSync(schemaname.toString()); // @TODO: Also parse the "properties" of relevant hyperparameters! const testFolder = '/../lib/lale/sklearn/'; var schemas = []; filenames = fs.readdirSync(__dirname + testFolder); filenames.forEach(file => { file = file.replace("_", ""); file = file.replace(".py", ""); schemas.push(file); }); //console.log(schemas); var input = "import sklearn.logisticregression"; input = input.toLowerCase(); for (let s of schemas) { if (input.includes(s)) { console.log("MATCH!"); } } // So now for each import statement "input" want to check if each KEY of the array is in that input //var schema = JSON.parse(); var contents = fs.readFileSync(__dirname + filename, "utf8"); var flag = false; var hyperparams = ""; var properties = ""; var pflag = false; var hyperflag = false; var brackets = 0; for (let line of contents.split("\n")) { //console.log(line); if (line.includes("_hyperparams_schema =")) { hyperflag = true; } if (hyperflag) { brackets += (line.match(/{/g)||[]).length brackets -= (line.match(/}/g)||[]).length //console.log(line); //console.log(brackets); //console.log(); } if (line.includes("relevantToOptimizer")) { flag = true; } if (flag) { hyperparams += line; } if (line.includes("],")) { flag = false; } if (line.includes("properties")) { pflag = true; } if (pflag && hyperflag) { properties = properties + line + "\n"; } if (hyperflag && brackets == 0) { break; } } //console.log("PROPERTIES", properties); //@TODO //CHANGE IT SO THAT PROPERTIES RELIES ON OPEN BRACKET COUNT TO END PFLAG hyperparams = hyperparams.substr(hyperparams.indexOf('[')+1); hyperparams = hyperparams.split("]")[0]; hyperparams = hyperparams.split(","); var parameters = []; for (let s of hyperparams) { s = s.replace(/['"]+/g, ""); s = s.trim(); if (s) { parameters.push(s); } } console.log(parameters); var openbrackets=0; var desc = ""; var propertyflag = false; var hyperparam_descriptions = ""; function containsAny(str, substrings) { for (var i = 0; i != substrings.length; i++) { var substring = "'" + substrings[i] + "'"; if (str.indexOf(substring) != - 1) { return substring; } } return null; } var substring = null; var param = ""; for (let line of properties.split("\n")) { if (!propertyflag) { substring = containsAny(line, parameters); if (substring != null) { //parameters.some(function(v) {hyperparam_descriptions["'" + v + "'"] = ""; return line.indexOf("'" + v + "'") >= 0; }) propertyflag = true; param = substring; } } if (propertyflag) { if (line.includes("{")) { openbrackets += 1; } if (line.includes("}")) { openbrackets -=1; } desc = desc + line + "\n"; if (openbrackets <= 0) { propertyflag = false; //console.log("PARAM: ", param) //console.log(desc); hyperparam_descriptions += desc; var desc = ""; } } } console.log(hyperparam_descriptions); //hyperparams = hyperparams.split("]")[0]; //console.log(hyperparams); //console.log(hyperparams.split(",")); //console.log(contents); //console.log(schema); //console.log("Hyperparameters: ", Object.keys(schema['allOf'][0]['properties'])); /** let tree = py.parse(contents); let cfg = new py.ControlFlowGraph(tree); const analyzer = new py.DataflowAnalyzer(); const flows = analyzer.analyze(cfg).dataflows; var lineToCode = {}; // https://github.com/nodeca/argparse var count = 1 for (let line of contents.split("\n")) { lineToCode[count] = line; count += 1; } var hyp_first = -1; var hyp_last = -1; var hyperparams_schema = ""; for (let flow of flows.items) { let fromNode = py.printNode(flow.fromNode).split("\n"); let toNode = py.printNode(flow.toNode).split("\n"); console.log(flow.fromNode.type); console.log(fromNode[0]); if (flow.fromNode.type == "assign") { if (fromNode[0].includes("_hyperparams_schema")) { hyp_first = flow.fromNode.location.first_line; hyp_last = flow.fromNode.location.last_line; } } } **/ /** var h = hyp_first; var hyperparams = ""; var flag = false; while (h <= hyp_last) { hyperparams_schema += lineToCode[h]; h += 1; if (lineToCode[h].includes("relevantToOptimizer")) { flag = true; } if (flag) { hyperparams += lineToCode[h]; } if (lineToCode[h].includes("],")) { flag = false; } } //console.log(hyperparams); hyperparams = hyperparams.split("[")[1]; hyperparams = hyperparams.split("]")[0]; hyperparams = hyperparams.split(","); //hyperparams = hyperparams.replace(/\s/g, ""); var parameters = []; for (let s of hyperparams) { s = s.replace(/['"]+/g, ""); s = s.trim(); if (s) { parameters.push(s); } } console.log(parameters); **/ /** var chars = {'_':'','F':'f','T':'t', "'":'"'}; hyperparams_schema = hyperparams_schema.replace(/[_FT']/g, m => chars[m]); hyperparams_schema= hyperparams_schema.substr(hyperparams_schema.indexOf('{')); console.log(hyperparams_schema); hyperparams_schema = JSON.parse(hyperparams_schema); **/