@gracexwho/model-card-generator
Version:
Tool for generating model cards for Jupyter Notebook.
160 lines • 6.31 kB
JavaScript
(function (factory) {
if (typeof module === "object" && typeof module.exports === "object") {
var v = factory(require, exports);
if (v !== undefined) module.exports = v;
}
else if (typeof define === "function" && define.amd) {
define(["require", "exports", "./python-parser"], factory);
}
})(function (require, exports) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.SymbolTable = void 0;
var ast = require("./python-parser");
function mapDict(obj, f) {
var result = {};
Object.keys(obj).forEach(function (k) { return (result[k] = f(obj[k])); });
return result;
}
function cleanFunc(fdesc) {
if (typeof fdesc === "string") {
return { name: fdesc, reads: [], updates: [] };
}
else {
if (!fdesc.reads) {
fdesc.reads = [];
}
if (!fdesc.updates) {
fdesc.updates = [];
}
return fdesc;
}
}
function cleanType(tdesc) {
return {
methods: tdesc.methods ? tdesc.methods.map(function (m) { return cleanFunc(m); }) : []
};
}
function cleanModule(mdesc) {
var mod = {
functions: mdesc.functions ? mdesc.functions.map(function (f) { return cleanFunc(f); }) : [],
types: mdesc.types ? mapDict(mdesc.types, cleanType) : {},
modules: mdesc.modules ? mapDict(mdesc.modules, cleanModule) : {}
};
mod.functions.forEach(function (f) {
if (f.returns) {
f.returnsType = mod.types[f.returns];
}
});
Object.keys(mod.types).forEach(function (typename) {
var ty = mod.types[typename];
ty.methods.forEach(function (f) {
if (f.returns) {
f.returnsType = mod.types[f.returns];
}
});
});
return mod;
}
var SymbolTable = /** @class */ (function () {
function SymbolTable(jsonSpecs) {
this.jsonSpecs = jsonSpecs;
this.modules = {};
this.types = {};
this.functions = {};
// preload all the built-in functions.
this.importModuleDefinitions("__builtins__", [{ path: "*", name: "" }]);
}
SymbolTable.prototype.lookupFunction = function (name) {
var spec = this.functions[name];
if (spec) {
return spec;
}
var clss = this.types[name];
if (clss) {
return (clss.methods.find(function (fn) { return fn.name === "__init__"; }) || {
name: "__init__",
updates: ["0"],
returns: name,
returnsType: clss
});
}
return undefined;
};
SymbolTable.prototype.lookupNode = function (func) {
return func.type === ast.NAME
? this.lookupFunction(func.id)
: func.type === ast.DOT && func.value.type === ast.NAME
? this.lookupModuleFunction(func.value.id, func.name)
: undefined;
};
SymbolTable.prototype.lookupModuleFunction = function (modName, funcName) {
var mod = this.modules[modName];
return mod ? mod.functions.find(function (f) { return f.name === funcName; }) : undefined;
};
SymbolTable.prototype.importModule = function (modulePath, alias) {
var spec = this.lookupSpec(this.jsonSpecs, modulePath.split("."));
if (!spec) {
// console.log(`*** WARNING no spec for module ${modulePath}`);
return;
}
if (modulePath) {
this.modules[modulePath] = spec;
if (alias && alias.length) {
this.modules[alias] = spec;
}
}
};
SymbolTable.prototype.importModuleDefinitions = function (namePath, imports) {
var _this = this;
var spec = this.lookupSpec(this.jsonSpecs, namePath.split("."));
if (!spec) {
//console.log(`*** WARNING no spec for module ${namePath}`);
return;
}
if (spec) {
imports.forEach(function (imp) {
var funs = spec.functions
? spec.functions.map(function (f) { return cleanFunc(f); })
: [];
if (imp.path === "*") {
funs.forEach(function (f) { return (_this.functions[f.name] = f); });
if (spec.types) {
Object.keys(spec.types).forEach(function (fname) { return (_this.types[fname] = spec.types[fname]); });
}
}
else {
if (spec.types && spec.types[imp.path]) {
_this.types[imp.name] = spec.types[imp.path];
}
var fspec = funs.find(function (f) { return f.name === imp.path; });
if (fspec) {
_this.functions[fspec.name] = fspec;
}
}
});
}
else {
//console.log(`*** WARNING no spec for module ${namePath}`);
}
};
SymbolTable.prototype.lookupSpec = function (map, parts) {
if (!map || parts.length == 0) {
return undefined;
}
var spec = map[parts[0]];
if (!spec) {
return undefined;
}
if (parts.length > 1) {
return this.lookupSpec(spec.modules, parts.slice(1));
}
else {
return cleanModule(spec);
}
};
return SymbolTable;
}());
exports.SymbolTable = SymbolTable;
});
//# sourceMappingURL=symbol-table.js.map