/*
* Project Name : Visual Python
* Description : GUI-based Python code generator
* File Name : SaveLoad.js
* Author : Black Logic
* Note : Save and load models
* License : GNU GPLv3 with Visual Python special exception
* Date : 2023. 03. 09
* Change Date :
*/
//============================================================================
// [CLASS] DataSets
//============================================================================
define([
__VP_CSS_LOADER__('vp_base/css/m_ml/saveLoad'),
__VP_TEXT_LOADER__('vp_base/html/m_ml/saveLoad.html'),
'vp_base/js/com/com_util',
'vp_base/js/com/com_Const',
'vp_base/js/com/com_String',
'vp_base/js/com/com_generatorV2',
'vp_base/js/com/component/PopupComponent',
'vp_base/js/com/component/FileNavigation',
'vp_base/data/m_ml/mlLibrary',
], function(slCss, slHTML, com_util, com_Const, com_String, com_generator, PopupComponent, FileNavigation, ML_LIBRARIES) {
/**
* SaveLoad
*/
class SaveLoad extends PopupComponent {
_init() {
super._init();
this.config.sizeLevel = 2;
this.config.dataview = false;
this.config.checkModules = ['joblib'];
this.state = {
modelio: 'model_save', // model_save / model_load
target: '',
allocateTo: '',
userOption: '',
savePath: '',
loadPath: '',
...this.state
}
this.mlConfig = ML_LIBRARIES;
}
_bindEvent() {
super._bindEvent();
let that = this;
// select model
$(this.wrapSelector('#modelio')).on('change', function() {
let modelio = $(this).val();
that.state.modelio = modelio;
$(that.wrapSelector('.vp-modelio-option-box')).html(that.templateForOption(modelio));
$(that.wrapSelector('#userOption')).val('');
});
// user option
$(this.wrapSelector('#userOption')).on('change', function() {
that.state.userOption = $(this).val();
})
}
templateForBody() {
let page = $(slHTML);
// render option page
$(page).find('.vp-modelio-option-box').html(this.templateForOption(this.state.modelio));
$(page).find('#modelio').val(this.state.modelio);
$(page).find('#userOption').val(this.state.userOption);
return page;
}
templateForOption(modelio) {
let config = this.mlConfig[modelio];
let state = this.state;
let optBox = new com_String();
// render tag
config.options.forEach(opt => {
optBox.appendFormatLine(''
, opt.name, opt.name, com_util.optionToLabel(opt.name));
let content = com_generator.renderContent(this, opt.component[0], opt, state);
optBox.appendLine(content[0].outerHTML);
});
// render file navigation
// show user option
if (config.code.includes('${etc}')) {
// render user option
optBox.appendFormatLine('', 'userOption', 'User option');
optBox.appendFormatLine('',
'userOption', 'key=value, ...', this.state.userOption);
}
return optBox.toString();
}
generateCode() {
let { modelio, userOption } = this.state;
let code = new com_String();
if (userOption && userOption != '') {
userOption = ', ' + userOption;
}
let modelCode = com_generator.vp_codeGenerator(this, this.mlConfig[modelio], this.state, userOption);
code.append(modelCode);
return code.toString();
}
}
return SaveLoad;
});