598 lines
22 KiB
JavaScript
598 lines
22 KiB
JavaScript
'use strict';
|
|
|
|
//sklearn 生成分类样本
|
|
pbc.globalFunctionD['make_classification'] = function (py2block, func, args, keywords, starargs, kwargs, node) {
|
|
if (args.length === 0 && keywords.length === 8) {
|
|
var key1block = py2block.convert(keywords[0].value);
|
|
var key2block = py2block.convert(keywords[1].value);
|
|
var key3block = py2block.convert(keywords[2].value);
|
|
var key4block = py2block.convert(keywords[3].value);
|
|
var key5block = py2block.convert(keywords[4].value);
|
|
var key6block = py2block.convert(keywords[5].value);
|
|
var key7block = py2block.convert(keywords[6].value);
|
|
var key8block = py2block.convert(keywords[7].value);
|
|
return block("sklearn_make_classification", func.lineno, {}, {
|
|
"n_samples": key1block,
|
|
"n_features": key2block,
|
|
"n_informative": key3block,
|
|
"n_redundant": key4block,
|
|
"n_repeated": key5block,
|
|
"n_classes": key6block,
|
|
"n_clusters_per_class": key7block,
|
|
"random_state": key8block
|
|
}, {
|
|
"inline": "false"
|
|
});
|
|
}
|
|
else
|
|
{
|
|
throw new Error("Incorrect number of arguments");
|
|
}
|
|
|
|
}
|
|
|
|
//sklearn 生成回归样本
|
|
pbc.globalFunctionD['make_regression'] = function (py2block, func, args, keywords, starargs, kwargs, node) {
|
|
if (args.length === 0 && keywords.length === 7) {
|
|
var key1block = py2block.convert(keywords[0].value);
|
|
var key2block = py2block.convert(keywords[1].value);
|
|
var key3block = py2block.convert(keywords[2].value);
|
|
var key4block = py2block.convert(keywords[3].value);
|
|
var key5block = py2block.convert(keywords[4].value);
|
|
var key6block = py2block.convert(keywords[5].value);
|
|
var key7block = py2block.convert(keywords[6].value);
|
|
return block("sklearn_make_regression", func.lineno, {}, {
|
|
"n_samples": key1block,
|
|
"n_features": key2block,
|
|
"n_informative": key3block,
|
|
"n_targets": key4block,
|
|
"bias": key5block,
|
|
"noise": key6block,
|
|
"random_state": key7block
|
|
}, {
|
|
"inline": "false"
|
|
});
|
|
}
|
|
else
|
|
{
|
|
throw new Error("Incorrect number of arguments");
|
|
}
|
|
|
|
}
|
|
|
|
//sklearn 生成聚类样本
|
|
pbc.globalFunctionD['make_blobs'] = function (py2block, func, args, keywords, starargs, kwargs, node) {
|
|
if (args.length === 0 && keywords.length === 7) {
|
|
var key1block = py2block.convert(keywords[0].value);
|
|
var key2block = py2block.convert(keywords[1].value);
|
|
var key3block = py2block.convert(keywords[2].value);
|
|
var key4block = py2block.convert(keywords[3].value);
|
|
var key5block = py2block.convert(keywords[4].value);
|
|
var key6block = py2block.convert(keywords[5].value);
|
|
var key7block = py2block.convert(keywords[6].value);
|
|
return block("sklearn_make_blobs", func.lineno, {}, {
|
|
"n_samples": key1block,
|
|
"n_features": key2block,
|
|
"centers": key3block,
|
|
"cluster_std": key4block,
|
|
"center_box": key5block,
|
|
"shuffle": key6block,
|
|
"random_state": key7block
|
|
}, {
|
|
"inline": "false"
|
|
});
|
|
}
|
|
else
|
|
{
|
|
throw new Error("Incorrect number of arguments");
|
|
}
|
|
|
|
}
|
|
|
|
//sklearn 加载数据集
|
|
function sklearn_load_check_assign(mode){
|
|
function converter(py2block, node, targets, value) {
|
|
if(value.func._astname != "Attribute" || value.func.value._astname != "Name"){
|
|
return false;
|
|
}
|
|
var moduleName = py2block.Name_str(value.func.value);
|
|
var funcName = py2block.identifier(value.func.attr);
|
|
value.args = value.args || [];
|
|
if (value._astname === "Call" && moduleName === "datasets"
|
|
&& funcName === mode && !value.args.length)
|
|
return true;
|
|
return false;
|
|
}
|
|
return converter;
|
|
}
|
|
|
|
function sklearn_load_create_block(){
|
|
function converter(py2block, node, targets, value) {
|
|
var name = py2block.Name_str(node.targets[0]);
|
|
var type = py2block.identifier(value.func.attr);
|
|
//注意:赋值语句里,即使图形块上下可接,也不需要加[]
|
|
return block('sklearn_load', node.lineno, {
|
|
"name": name,
|
|
"type": type
|
|
}, {});
|
|
}
|
|
return converter;
|
|
}
|
|
|
|
pbc.assignD.get('load_iris')['check_assign'] = sklearn_load_check_assign('load_iris');
|
|
pbc.assignD.get('load_boston')['check_assign'] = sklearn_load_check_assign('load_boston');
|
|
pbc.assignD.get('load_diabetes')['check_assign'] = sklearn_load_check_assign('load_diabetes');
|
|
pbc.assignD.get('load_breast_cancer')['check_assign'] = sklearn_load_check_assign('load_breast_cancer');
|
|
pbc.assignD.get('load_linnerud')['check_assign'] = sklearn_load_check_assign('load_linnerud');
|
|
pbc.assignD.get('load_digits')['check_assign'] = sklearn_load_check_assign('load_digits');
|
|
|
|
pbc.assignD.get('load_iris')['create_block'] = sklearn_load_create_block();
|
|
pbc.assignD.get('load_boston')['create_block'] = sklearn_load_create_block();
|
|
pbc.assignD.get('load_diabetes')['create_block'] = sklearn_load_create_block();
|
|
pbc.assignD.get('load_breast_cancer')['create_block'] = sklearn_load_create_block();
|
|
pbc.assignD.get('load_linnerud')['create_block'] = sklearn_load_create_block();
|
|
pbc.assignD.get('load_digits')['create_block'] = sklearn_load_create_block();
|
|
|
|
//sklearn 获取特征值/标签值/标签/特征
|
|
function sklearn_data_target(py2block, node, value, attr) {
|
|
return block('sklearn_data_target', node.lineno, {
|
|
"type": py2block.identifier(attr)
|
|
}, {
|
|
"name": py2block.convert(value)
|
|
});
|
|
}
|
|
pbc.objectAttrD.get('data')['sklearn.datasets'] = sklearn_data_target;
|
|
pbc.objectAttrD.get('target')['sklearn.datasets'] = sklearn_data_target;
|
|
pbc.objectAttrD.get('target_names')['sklearn.datasets'] = sklearn_data_target;
|
|
pbc.objectAttrD.get('feature_names')['sklearn.datasets'] = sklearn_data_target;
|
|
|
|
//sklearn 数据集分割
|
|
pbc.globalFunctionD['train_test_split'] = function (py2block, func, args, keywords, starargs, kwargs, node) {
|
|
if (args.length === 2) {
|
|
var arg1block = py2block.convert(args[0]);
|
|
var arg2block = py2block.convert(args[1]);
|
|
var key1block = py2block.convert(keywords[0].value);
|
|
var key2block = py2block.convert(keywords[1].value);
|
|
return block("sklearn_train_test_split", func.lineno, {}, {
|
|
"train_data": arg1block,
|
|
"train_target": arg2block,
|
|
"test_size": key1block,
|
|
"rondom_state": key2block,
|
|
}, {
|
|
"inline": "false"
|
|
});
|
|
}
|
|
else if(args.length === 1)
|
|
{
|
|
var arg1block = py2block.convert(args[0]);
|
|
var key1block = py2block.convert(keywords[0].value);
|
|
var key2block = py2block.convert(keywords[1].value);
|
|
return block("sklearn_train_test_split_no_target", func.lineno, {}, {
|
|
"train_data": arg1block,
|
|
"test_size": key1block,
|
|
"rondom_state": key2block,
|
|
}, {
|
|
"inline": "false"
|
|
});
|
|
}
|
|
else
|
|
{
|
|
throw new Error("Incorrect number of arguments");
|
|
}
|
|
|
|
}
|
|
|
|
//sklearn 初始化线性回归
|
|
pbc.assignD.get('LinearRegression')['check_assign'] = function(py2block, node, targets, value) {
|
|
if(value._astname != "Call" || value.func._astname != "Name"){
|
|
return false;
|
|
}
|
|
var funcName = value.func.id.v;
|
|
value.args = value.args || [];
|
|
if(funcName === "LinearRegression" && !value.args.length)
|
|
return true;
|
|
return false;
|
|
}
|
|
|
|
pbc.assignD.get('LinearRegression')['create_block'] = function(py2block, node, targets, value){
|
|
var name = py2block.convert(node.targets[0]);
|
|
var key1block = py2block.convert(value.keywords[0].value);
|
|
var key2block = py2block.convert(value.keywords[1].value);
|
|
var key3block = py2block.convert(value.keywords[2].value);
|
|
return block("sklearn_LinearRegression", node.lineno, {}, {
|
|
"model_name": name,
|
|
"fit_intercept": key1block,
|
|
"normalize": key2block,
|
|
"n_jobs": key3block
|
|
});
|
|
}
|
|
|
|
//sklearn 初始化岭回归
|
|
pbc.assignD.get('Ridge')['check_assign'] = function(py2block, node, targets, value) {
|
|
if(value._astname != "Call" || value.func._astname != "Name"){
|
|
return false;
|
|
}
|
|
var funcName = value.func.id.v;
|
|
value.args = value.args || [];
|
|
if(funcName === "Ridge" && !value.args.length)
|
|
return true;
|
|
return false;
|
|
}
|
|
|
|
pbc.assignD.get('Ridge')['create_block'] = function(py2block, node, targets, value){
|
|
var name = py2block.convert(node.targets[0]);
|
|
var key1block = py2block.convert(value.keywords[0].value);
|
|
var key2block = py2block.convert(value.keywords[1].value);
|
|
var key3block = py2block.convert(value.keywords[2].value);
|
|
var key4block = py2block.convert(value.keywords[3].value);
|
|
var key5block = py2block.convert(value.keywords[4].value);
|
|
return block("sklearn_Ridge", node.lineno, {}, {
|
|
"model_name": name,
|
|
"alpha": key1block,
|
|
"fit_intercept": key2block,
|
|
"normalize": key3block,
|
|
"max_iter": key4block,
|
|
"random_state": key5block
|
|
});
|
|
}
|
|
|
|
//sklearn 初始化决策树 分类算法
|
|
pbc.assignD.get('DecisionTreeClassifier')['check_assign'] = function(py2block, node, targets, value) {
|
|
if(value._astname != "Call" || value.func._astname != "Name"){
|
|
return false;
|
|
}
|
|
var funcName = value.func.id.v;
|
|
value.args = value.args || [];
|
|
if(funcName === "DecisionTreeClassifier" && !value.args.length)
|
|
return true;
|
|
return false;
|
|
}
|
|
pbc.assignD.get('DecisionTreeClassifier')['create_block'] = function(py2block, node, targets, value){
|
|
var name = py2block.convert(node.targets[0]);
|
|
var key1block = py2block.convert(value.keywords[0].value);
|
|
var key2block = py2block.convert(value.keywords[1].value);
|
|
return block("sklearn_DecisionTreeClassifier_Regressor", node.lineno, {
|
|
"type": "DecisionTreeClassifier"
|
|
}, {
|
|
"model_name": name,
|
|
"max_depth": key1block,
|
|
"random_state": key2block
|
|
});
|
|
}
|
|
|
|
//sklearn 初始化决策树 回归算法
|
|
pbc.assignD.get('DecisionTreeRegressor')['check_assign'] = function(py2block, node, targets, value) {
|
|
if(value._astname != "Call" || value.func._astname != "Name"){
|
|
return false;
|
|
}
|
|
var funcName = value.func.id.v;
|
|
value.args = value.args || [];
|
|
if(funcName === "DecisionTreeRegressor" && !value.args.length)
|
|
return true;
|
|
return false;
|
|
}
|
|
pbc.assignD.get('DecisionTreeRegressor')['create_block'] = function(py2block, node, targets, value){
|
|
var name = py2block.convert(node.targets[0]);
|
|
var key1block = py2block.convert(value.keywords[0].value);
|
|
var key2block = py2block.convert(value.keywords[1].value);
|
|
return block("sklearn_DecisionTreeClassifier_Regressor", node.lineno, {
|
|
"type": "DecisionTreeRegressor"
|
|
}, {
|
|
"model_name": name,
|
|
"max_depth": key1block,
|
|
"random_state": key2block
|
|
});
|
|
}
|
|
|
|
//sklearn 初始化随机森林 分类算法
|
|
pbc.assignD.get('RandomForestClassifier')['check_assign'] = function(py2block, node, targets, value) {
|
|
if(value._astname != "Call" || value.func._astname != "Name"){
|
|
return false;
|
|
}
|
|
var funcName = value.func.id.v;
|
|
value.args = value.args || [];
|
|
if(funcName === "RandomForestClassifier" && !value.args.length)
|
|
return true;
|
|
return false;
|
|
}
|
|
pbc.assignD.get('RandomForestClassifier')['create_block'] = function(py2block, node, targets, value){
|
|
var name = py2block.convert(node.targets[0]);
|
|
var key1block = py2block.convert(value.keywords[0].value);
|
|
var key2block = py2block.convert(value.keywords[1].value);
|
|
var key3block = py2block.convert(value.keywords[2].value);
|
|
var key4block = py2block.convert(value.keywords[3].value);
|
|
return block("sklearn_RandomForestClassifier_Regressor", node.lineno, {
|
|
"type": "RandomForestClassifier"
|
|
}, {
|
|
"model_name": name,
|
|
"n_estimators": key1block,
|
|
"max_depth": key2block,
|
|
"n_jobs": key3block,
|
|
"random_state": key4block
|
|
});
|
|
}
|
|
|
|
//sklearn 初始化随机森林 回归算法
|
|
pbc.assignD.get('RandomForestRegressor')['check_assign'] = function(py2block, node, targets, value) {
|
|
if(value._astname != "Call" || value.func._astname != "Name"){
|
|
return false;
|
|
}
|
|
var funcName = value.func.id.v;
|
|
value.args = value.args || [];
|
|
if(funcName === "RandomForestRegressor" && !value.args.length)
|
|
return true;
|
|
return false;
|
|
}
|
|
pbc.assignD.get('RandomForestRegressor')['create_block'] = function(py2block, node, targets, value){
|
|
var name = py2block.convert(node.targets[0]);
|
|
var key1block = py2block.convert(value.keywords[0].value);
|
|
var key2block = py2block.convert(value.keywords[1].value);
|
|
var key3block = py2block.convert(value.keywords[2].value);
|
|
var key4block = py2block.convert(value.keywords[3].value);
|
|
return block("sklearn_RandomForestClassifier_Regressor", node.lineno, {
|
|
"type": "RandomForestRegressor"
|
|
}, {
|
|
"model_name": name,
|
|
"n_estimators": key1block,
|
|
"max_depth": key2block,
|
|
"n_jobs": key3block,
|
|
"random_state": key4block
|
|
});
|
|
}
|
|
|
|
//sklearn 初始化K近邻 分类算法
|
|
pbc.assignD.get('KNeighborsClassifier')['check_assign'] = function(py2block, node, targets, value) {
|
|
if(value._astname != "Call" || value.func._astname != "Name"){
|
|
return false;
|
|
}
|
|
var funcName = value.func.id.v;
|
|
value.args = value.args || [];
|
|
if(funcName === "KNeighborsClassifier" && !value.args.length)
|
|
return true;
|
|
return false;
|
|
}
|
|
pbc.assignD.get('KNeighborsClassifier')['create_block'] = function(py2block, node, targets, value){
|
|
var name = py2block.convert(node.targets[0]);
|
|
var key1block = py2block.convert(value.keywords[0].value);
|
|
var key2block = py2block.convert(value.keywords[1].value);
|
|
return block("sklearn_KNeighborsClassifier_Regressor", node.lineno, {
|
|
"type": "KNeighborsClassifier"
|
|
}, {
|
|
"model_name": name,
|
|
"K": key1block,
|
|
"n_jobs": key2block
|
|
});
|
|
}
|
|
|
|
//sklearn 初始化K近邻 回归算法
|
|
pbc.assignD.get('KNeighborsRegressor')['check_assign'] = function(py2block, node, targets, value) {
|
|
if(value._astname != "Call" || value.func._astname != "Name"){
|
|
return false;
|
|
}
|
|
var funcName = value.func.id.v;
|
|
value.args = value.args || [];
|
|
if(funcName === "KNeighborsRegressor" && !value.args.length)
|
|
return true;
|
|
return false;
|
|
}
|
|
pbc.assignD.get('KNeighborsRegressor')['create_block'] = function(py2block, node, targets, value){
|
|
var name = py2block.convert(node.targets[0]);
|
|
var key1block = py2block.convert(value.keywords[0].value);
|
|
var key2block = py2block.convert(value.keywords[1].value);
|
|
return block("sklearn_KNeighborsClassifier_Regressor", node.lineno, {
|
|
"type": "KNeighborsRegressor"
|
|
}, {
|
|
"model_name": name,
|
|
"K": key1block,
|
|
"n_jobs": key2block
|
|
});
|
|
}
|
|
|
|
//sklearn 初始化高斯贝叶斯分类算法
|
|
pbc.assignD.get('GaussianNB')['check_assign'] = function(py2block, node, targets, value) {
|
|
if(value._astname != "Call" || value.func._astname != "Name"){
|
|
return false;
|
|
}
|
|
var funcName = value.func.id.v;
|
|
value.args = value.args || [];
|
|
if(funcName === "GaussianNB" && !value.args.length)
|
|
return true;
|
|
return false;
|
|
}
|
|
pbc.assignD.get('GaussianNB')['create_block'] = function(py2block, node, targets, value){
|
|
var name = py2block.convert(node.targets[0]);
|
|
return block("sklearn_GaussianNB", node.lineno, {}, {
|
|
"model_name": name
|
|
});
|
|
}
|
|
|
|
//sklearn 初始K-均值聚类
|
|
pbc.assignD.get('KMeans')['check_assign'] = function(py2block, node, targets, value) {
|
|
if(value._astname != "Call" || value.func._astname != "Name"){
|
|
return false;
|
|
}
|
|
var funcName = value.func.id.v;
|
|
value.args = value.args || [];
|
|
if(funcName === "KMeans" && !value.args.length)
|
|
return true;
|
|
return false;
|
|
}
|
|
|
|
pbc.assignD.get('KMeans')['create_block'] = function(py2block, node, targets, value){
|
|
var name = py2block.convert(node.targets[0]);
|
|
var key1block = py2block.convert(value.keywords[0].value);
|
|
var key2block = py2block.convert(value.keywords[1].value);
|
|
var key3block = py2block.convert(value.keywords[2].value);
|
|
var key4block = py2block.convert(value.keywords[3].value);
|
|
return block("sklearn_KMeans", node.lineno, {}, {
|
|
"model_name": name,
|
|
"n_clusters": key1block,
|
|
"max_iter": key2block,
|
|
"random_state": key3block,
|
|
"n_jobs": key4block
|
|
});
|
|
}
|
|
|
|
//sklearn 训练模型
|
|
function sklearn_fit(){
|
|
function converter(py2block, func, args, keywords, starargs, kwargs, node) {
|
|
if(args.length === 1) {
|
|
var objblock = py2block.convert(func.value);
|
|
var argblock1 = py2block.convert(args[0]);
|
|
return [block("sklearn_fit_no_target", func.lineno, {}, {
|
|
"model_name": objblock,
|
|
"train_data": argblock1
|
|
}, {
|
|
"inline": "true"
|
|
})];
|
|
}
|
|
else if(args.length === 2) {
|
|
var objblock = py2block.convert(func.value);
|
|
var argblock1 = py2block.convert(args[0]);
|
|
var argblock2 = py2block.convert(args[1]);
|
|
return [block("sklearn_fit", func.lineno, {
|
|
}, {
|
|
"model_name": objblock,
|
|
"train_data": argblock1,
|
|
"train_target": argblock2
|
|
}, {
|
|
"inline": "true"
|
|
})];
|
|
}
|
|
else
|
|
{
|
|
throw new Error("Incorrect number of arguments");
|
|
}
|
|
}
|
|
return converter;
|
|
}
|
|
pbc.objectFunctionD.get('fit')['sklearn.fit'] = sklearn_fit();
|
|
|
|
//sklearn 模型预测
|
|
function sklearn_predict(){
|
|
function converter(py2block, func, args, keywords, starargs, kwargs, node) {
|
|
if(args.length === 1)
|
|
{
|
|
var objblock = py2block.convert(func.value);
|
|
var argblock1 = py2block.convert(args[0]);
|
|
return block("sklearn_predict", func.lineno, {
|
|
}, {
|
|
"model_name": objblock,
|
|
"train_data": argblock1
|
|
}, {
|
|
"inline": "true"
|
|
});
|
|
}
|
|
else
|
|
{
|
|
throw new Error("Incorrect number of arguments");
|
|
}
|
|
}
|
|
return converter;
|
|
}
|
|
pbc.objectFunctionD.get('predict')['sklearn'] = sklearn_predict();
|
|
|
|
//sklearn 计算模型得分
|
|
function sklearn_score(){
|
|
function converter(py2block, func, args, keywords, starargs, kwargs, node) {
|
|
if (args.length === 2) {
|
|
var objblock = py2block.convert(func.value);
|
|
var argblock1 = py2block.convert(args[0]);
|
|
var argblock2 = py2block.convert(args[1]);
|
|
return block("sklearn_score", func.lineno, {}, {
|
|
"model_name": objblock,
|
|
"train_data": argblock1,
|
|
"train_target": argblock2
|
|
}, {
|
|
"inline": "true"
|
|
});
|
|
}
|
|
else if(args.length === 1)
|
|
{
|
|
var objblock = py2block.convert(func.value);
|
|
var argblock1 = py2block.convert(args[0]);
|
|
return block("sklearn_score_no_target", func.lineno, {}, {
|
|
"model_name": objblock,
|
|
"train_data": argblock1
|
|
}, {
|
|
"inline": "true"
|
|
});
|
|
}
|
|
else
|
|
{
|
|
throw new Error("Incorrect number of arguments");
|
|
}
|
|
}
|
|
return converter;
|
|
}
|
|
pbc.objectFunctionD.get('score')['sklearn'] = sklearn_score();
|
|
|
|
//sklearn 线性回归 模型获取 斜率/截距
|
|
function sklearn_coef_intercept(py2block, node, value, attr) {
|
|
return block('sklearn_coef_intercept', node.lineno, {
|
|
"type": py2block.identifier(attr)
|
|
}, {
|
|
"model_name": py2block.convert(value)
|
|
});
|
|
}
|
|
pbc.objectAttrD.get('coef_')['sklearn.linear_model'] = sklearn_coef_intercept;
|
|
pbc.objectAttrD.get('intercept_')['sklearn.linear_model'] = sklearn_coef_intercept;
|
|
|
|
//sklearn K-均值聚类 模型获取 簇中心坐标/聚类后的标签/所有点到对应簇中心的距离平方和
|
|
function sklearn_cluster_centers_labels_inertia(py2block, node, value, attr) {
|
|
return block('sklearn_cluster_centers_labels_inertia', node.lineno, {
|
|
"type": py2block.identifier(attr)
|
|
}, {
|
|
"model_name": py2block.convert(value)
|
|
});
|
|
}
|
|
pbc.objectAttrD.get('cluster_centers_')['sklearn.cluster'] = sklearn_cluster_centers_labels_inertia;
|
|
pbc.objectAttrD.get('labels_')['sklearn.cluster'] = sklearn_cluster_centers_labels_inertia;
|
|
pbc.objectAttrD.get('inertia_')['sklearn.cluster'] = sklearn_cluster_centers_labels_inertia;
|
|
|
|
//sklearn 保存模型
|
|
function sklearn_save_model(){
|
|
function converter(py2block, func, args, keywords, starargs, kwargs, node) {
|
|
if(args.length === 2) {
|
|
var argblock1 = py2block.convert(args[0]);
|
|
var argblock2 = py2block.convert(args[1]);
|
|
var funcName = func.attr.v;
|
|
return [block("sklearn_save_load_model", func.lineno, {
|
|
"type" : funcName
|
|
}, {
|
|
"model_name": argblock1,
|
|
"address": argblock2
|
|
}, {
|
|
"inline": "true"
|
|
})];
|
|
}
|
|
else
|
|
{
|
|
throw new Error("Incorrect number of arguments");
|
|
}
|
|
}
|
|
return converter;
|
|
}
|
|
pbc.objectFunctionD.get('dump')['sklearn.externals'] = sklearn_save_model();
|
|
|
|
//sklearn 加载模型
|
|
pbc.assignD.get('load')['check_assign'] = function(py2block, node, targets, value) {
|
|
if(value._astname != "Call" || value.func._astname != "Attribute"){
|
|
return false;
|
|
}
|
|
var funcName = value.func.attr.v;
|
|
if(funcName === "load" && value.args.length === 1)
|
|
return true;
|
|
return false;
|
|
}
|
|
pbc.assignD.get('load')['create_block'] = function(py2block, node, targets, value){
|
|
var name = py2block.convert(node.targets[0]);
|
|
var key1block = py2block.convert(value.args[0]);
|
|
var funcName = value.func.attr.v;
|
|
return block("sklearn_save_load_model", node.lineno, {
|
|
"type" : funcName
|
|
}, {
|
|
"model_name" : name,
|
|
"address" : key1block
|
|
});
|
|
} |