Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitfa276fe

Browse files
authored
Merge pull request#236 from minjk-bl/devops
Hotfix for v2.4.6
2 parents35c7b81 +19d056a commitfa276fe

File tree

1 file changed

+109
-18
lines changed

1 file changed

+109
-18
lines changed

‎visualpython/js/m_ml/Pipeline.js‎

Lines changed: 109 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ define([
8383
modelStep:1,
8484
step:[
8585
{name:'ml_dataSplit',label:'Data Split',useApp:true},
86-
{name:'ml_regression',label:'Regressor',useApp:true},
86+
{name:'ml_regression',label:'Regressor',useApp:true,child:['pp_fit','pp_predict']},
8787
{name:'pp_fit',label:'Fit'},
8888
{name:'pp_predict',label:'Predict'},
8989
{name:'ml_evaluation',label:'Evaluation',useApp:true,state:{modelType:'rgs'}},
@@ -94,7 +94,7 @@ define([
9494
modelStep:1,
9595
step:[
9696
{name:'ml_dataSplit',label:'Data Split',useApp:true},
97-
{name:'ml_classification',label:'Classifier',useApp:true},
97+
{name:'ml_classification',label:'Classifier',useApp:true,child:['pp_fit','pp_predict']},
9898
{name:'pp_fit',label:'Fit'},
9999
{name:'pp_predict',label:'Predict'},
100100
{name:'ml_evaluation',label:'Evaluation',useApp:true,state:{modelType:'clf'}},
@@ -104,7 +104,7 @@ define([
104104
label:'Clustering',
105105
modelStep:0,
106106
step:[
107-
{name:'ml_clustering',label:'Clustering',useApp:true},
107+
{name:'ml_clustering',label:'Clustering',useApp:true,child:['pp_fit','pp_predict','pp_transform']},
108108
{name:'pp_fit',label:'Fit'},
109109
{name:'pp_predict',label:'Predict'},
110110
{name:'pp_transform',label:'Transform'},
@@ -115,7 +115,7 @@ define([
115115
label:'Dimension Reduction',
116116
modelStep:0,
117117
step:[
118-
{name:'ml_dimensionReduction',label:'Dimension Reduction',useApp:true},
118+
{name:'ml_dimensionReduction',label:'Dimension Reduction',useApp:true,child:['pp_fit','pp_transform']},
119119
{name:'pp_fit',label:'Fit'},
120120
{name:'pp_transform',label:'Transform'}
121121
]
@@ -125,7 +125,7 @@ define([
125125
modelStep:1,
126126
step:[
127127
{name:'ml_dataSplit',label:'Data Split',useApp:true},
128-
{name:'ml_gridSearch',label:'GridSearch',useApp:true},
128+
{name:'ml_gridSearch',label:'GridSearch',useApp:true,child:['pp_fit','pp_predict']},
129129
{name:'pp_fit',label:'Fit'},
130130
{name:'pp_predict',label:'Predict'},
131131
{name:'ml_evaluation',label:'Evaluation',useApp:true},
@@ -134,7 +134,22 @@ define([
134134
}
135135

136136
// menu libraries for ml
137-
letlibObj=JSON.parse(librariesJson);
137+
letlibObj={};
138+
if(vpConfig.extensionType==='lab'||vpConfig.extensionType==='lite'){
139+
libObj=librariesJson;
140+
141+
this.MlAppComponent={};
142+
this.MlAppComponent['ml_dataSplit']=require('./dataSplit');
143+
this.MlAppComponent['ml_dataPrep']=require('./DataPrep');
144+
this.MlAppComponent['ml_regression']=require('./Regression');
145+
this.MlAppComponent['ml_classification']=require('./Classification');
146+
this.MlAppComponent['ml_clustering']=require('./Clustering');
147+
this.MlAppComponent['ml_dimensionReduction']=require('./DimensionReduction');
148+
this.MlAppComponent['ml_gridSearch']=require('./GridSearch');
149+
this.MlAppComponent['ml_evaluation']=require('./evaluation');
150+
}else{
151+
libObj=JSON.parse(librariesJson);
152+
}
138153
this.mlAppList=libObj.library.item.filter(x=>x.id==='pkg_ml')[0].item;
139154

140155
this.modelConfig=ML_LIBRARIES;
@@ -268,7 +283,7 @@ define([
268283
letappFileList=[];
269284
// load pipeline items
270285
tplObj.step.forEach((stepObj,idx)=>{
271-
let{ name, label, useApp=false, state={}}=stepObj;
286+
let{ name, label, useApp=false,child=[],state={}}=stepObj;
272287
ppTag.appendFormatLine(`<div class="vp-pp-item" data-flag="enabled" data-name="{0}" data-seq="{1}" data-label="{2}">
273288
<span>{3}</span>
274289
<div class="vp-pp-item-menu">
@@ -280,7 +295,7 @@ define([
280295
if(useApp===true){
281296
letmlObj=that.mlAppList.filter(x=>x.id===name)[0];
282297
if(vpConfig.extensionType==='lab'||vpConfig.extensionType==='lite'){
283-
appFileList.push({index:idx,name:name,file:'./'+mlObj.file});
298+
appFileList.push({index:idx,name:name,file:'vp_base/js/'+mlObj.file});
284299
}else{
285300
appFileList.push({index:idx,name:name,file:'vp_base/js/'+mlObj.file});
286301
}
@@ -293,6 +308,7 @@ define([
293308
};
294309
if(tplObj.modelStep===idx){
295310
pipeObj.modelStep=true;
311+
pipeObj.child=child;
296312
}
297313
that.state.pipeline.push(pipeObj);
298314
// append pages
@@ -311,14 +327,15 @@ define([
311327
// for lite and lab
312328
if(vpConfig.extensionType==='lab'||vpConfig.extensionType==='lite'){
313329
appFileList.forEach((obj,argIdx)=>{
314-
letMlComponent=require(obj.file);
330+
letMlComponent=that.MlAppComponent[obj.name];
315331
if(MlComponent){
316332
// DUP AREA: pp-1
317-
let{ name,label,index, file}=obj;
333+
let{ name, index, file}=obj;
318334
letmlComponent=newMlComponent({
319-
config:{id:name,name:label,path:file,category:'Pipeline',resizable:false},
335+
config:{id:name,name:that.state.pipeline[index].label,path:file,category:'Pipeline',resizable:false},
320336
...that.state.pipeline[index].state
321337
});
338+
mlComponent.loadState();
322339
// mlComponent.open($(that.wrapSelector(`.vp-pp-step-page[data-name="${appId}"]`)));
323340
that.state.pipeline[index].app=mlComponent;
324341

@@ -347,9 +364,10 @@ define([
347364
// DUP AREA: pp-1
348365
let{ name, label, index, file}=obj;
349366
letmlComponent=newMlComponent({
350-
config:{id:name,name:label,path:file,category:'Pipeline',resizable:false},
367+
config:{id:name,name:that.state.pipeline[index].label,path:file,category:'Pipeline',resizable:false},
351368
...that.state.pipeline[index].state
352369
});
370+
mlComponent.loadState();
353371
// mlComponent.open($(that.wrapSelector(`.vp-pp-step-page[data-name="${appId}"]`)));
354372
that.state.pipeline[index].app=mlComponent;
355373

@@ -358,6 +376,10 @@ define([
358376
that.state.modelType=mlComponent.state.modelType;
359377
letmodelObj=that.modelConfig[that.state.modelType];
360378
that.state.modelTypeName=modelObj.code.split('(')[0];
379+
380+
that.state.pipeline[index].child.forEach(childId=>{
381+
that.renderApp(childId);
382+
});
361383
}
362384
// handle app view
363385
that.handleAppView(name,mlComponent);
@@ -460,12 +482,69 @@ define([
460482
label=com_util.optionToLabel(label);
461483
optBox.appendFormatLine('<label for="{0}" title="{1}">{2}</label>'
462484
,opt.name,opt.name,label);
463-
letcontent=com_generator.renderContent(this,opt.component[0],opt,this.state);
485+
lettmpState={};
486+
if(opt.value&&opt.value!==''){
487+
tmpState[opt.name]=opt.value;
488+
}
489+
letcontent=com_generator.renderContent(this,opt.component[0],opt,tmpState);
464490
optBox.appendLine(content[0].outerHTML);
465491
});
466492
returnoptBox.toString();
467493
}
468494

495+
checkBeforeRun(){
496+
letthat=this;
497+
varresult=true;
498+
for(letidx=0;idx<this.state.pipeline.length;idx++){
499+
letppObj=this.state.pipeline[idx];
500+
var{ name, label, useApp, app}=ppObj;
501+
letrequiredList=[];
502+
result=true;
503+
letisVisible=$(that.wrapSelector(`.vp-pp-item[data-seq="${idx}"]`)).is(':visible')===true;
504+
letisEnabled=$(that.wrapSelector(`.vp-pp-item[data-seq="${idx}"]`)).attr('data-flag')==='enabled';
505+
if(isVisible&&isEnabled){
506+
switch(name){
507+
case'ml_dataSplit':
508+
requiredList=['featureData','targetData'];
509+
// check required data
510+
for(leti=0;i<requiredList.length;i++){
511+
letreqKey=requiredList[i];
512+
result=that._checkIsEmpty($(app.wrapSelector('#'+reqKey)));
513+
if(result===false){
514+
// show page and focus it
515+
$(that.wrapSelector(`.vp-pp-item[data-name="${name}"]`)).click();
516+
$(app.wrapSelector('#'+reqKey)).focus();
517+
break;
518+
}
519+
}
520+
break;
521+
case'ml_gridSearch':
522+
result=app.checkBeforeRun();
523+
if(result===false){
524+
// show page
525+
$(that.wrapSelector(`.vp-pp-item[data-name="${name}"]`)).click();
526+
break;
527+
}
528+
break;
529+
}
530+
}
531+
if(result===false){
532+
break;
533+
}
534+
}
535+
returnresult;
536+
537+
}
538+
539+
_checkIsEmpty(tag){
540+
letrequiredFilled=true;
541+
// if it's empty, focus on it
542+
if(tag&&$(tag)&&$(tag).val()==''){
543+
requiredFilled=false;
544+
}
545+
returnrequiredFilled;
546+
}
547+
469548
generateCodeForOptionPage(appId){
470549
letactions=this.modelEditor.getAction(this.state.modelTypeName);
471550
letactObj={};
@@ -514,24 +593,36 @@ define([
514593

515594
// check disabled
516595
letisVisible=$(that.wrapSelector(`.vp-pp-item[data-seq="${idx}"]`)).is(':visible')===true;
517-
letisEnabled=$(that.wrapSelector(`.vp-pp-item[data-seq="${idx}"]`)).data('flag')==='enabled';
596+
letisEnabled=$(that.wrapSelector(`.vp-pp-item[data-seq="${idx}"]`)).attr('data-flag')==='enabled';
518597
if(isVisible&&isEnabled){
519598
if(code.toString()!==''){
520599
code.appendLine();
521600
code.appendLine();
522601
}
523-
code.appendFormatLine("# [{0}] {1}",stepNo,label);
524602
if(useApp){
525-
code.append(app.generateCode());
603+
letappCode=app.generateCode();
604+
if(appCodeinstanceofArray){
605+
appCode=appCode.join('\n');
606+
}
607+
if(appCode&&appCode.trim()!==''){
608+
code.appendFormatLine("# [{0}] {1}",stepNo++,label);
609+
if(name==='ml_evaluation'){
610+
// import auto generate
611+
code.appendLine(app.generateImportCode().join('\n'));
612+
}
613+
code.append(appCode);
614+
}
526615
// save state
527616
that.state.pipeline[idx].state=app.state;
528617
}else{
529618
letppResult=that.generateCodeForOptionPage(name);
530-
code.append(ppResult.code);
619+
if(ppResult&&ppResult?.code?.trim()!==''){
620+
code.appendFormatLine("# [{0}] {1}",stepNo++,label);
621+
code.append(ppResult.code);
622+
}
531623
// save state
532624
that.state.pipeline[idx].state=ppResult.state;
533625
}
534-
stepNo++;
535626
}
536627
});
537628

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp