/*
* Project Name : Visual Python
* Description : GUI-based Python code generator
* File Name : com_Config.js
* Author : Black Logic
* Note : Configuration and settings control
* License : GNU GPLv3 with Visual Python special exception
* Date : 2021. 09. 16
* Change Date :
*/
//============================================================================
// [CLASS] Configuration
//============================================================================
define([
'./com_Const',
'./com_util',
'./com_interface',
__VP_TEXT_LOADER__('vp_base/python/userCommand.py'), // INTEGRATION: unified version of text loader
__VP_TEXT_LOADER__('vp_base/python/printCommand.py'), // INTEGRATION: unified version of text loader
__VP_TEXT_LOADER__('vp_base/python/fileNaviCommand.py'), // INTEGRATION: unified version of text loader
__VP_TEXT_LOADER__('vp_base/python/pandasCommand.py'), // INTEGRATION: unified version of text loader
__VP_TEXT_LOADER__('vp_base/python/variableCommand.py'), // INTEGRATION: unified version of text loader
__VP_TEXT_LOADER__('vp_base/python/visualizationCommand.py') // INTEGRATION: unified version of text loader
], function(com_Const, com_util, com_interface,
userCommandFile, printCommand, fileNaviCommand, pandasCommand, variableCommand, visualizationCommand) {
'use strict';
//========================================================================
// Define Inner Variable
//========================================================================
/**
* Type of mode
*/
const _MODE_TYPE = {
DEVELOP : 0,
RELEASE : 1
}
//========================================================================
// Declare Class
//========================================================================
/**
* Configuration and settings
*/
class Config {
//========================================================================
// Constructor
//========================================================================
/**
*
* @param {*} initialData
* @param {*} extensionType extension type: notebook/colab/lab/lite
*/
constructor(extensionType='notebook', initialData={}) {
// initial mode
this._isReady = { 'default': false };
this.extensionType = extensionType;
this.parentSelector = 'body';
if (extensionType === 'notebook') {
this.parentSelector = '#site';
} else if (extensionType === 'colab' || extensionType === 'lab' || extensionType === 'lite') {
// this.parentSelector = '.notebook-horizontal';
this.parentSelector = 'body';
}
// initial configuration
this.data = {
// Configuration
'vpcfg': {
'runType': 'run'
},
// User defined code for Snippets
'vpudf': {
'default import': [
'import numpy as np',
'import pandas as pd',
'import matplotlib.pyplot as plt',
'%matplotlib inline',
'import seaborn as sns',
'import plotly.express as px',
'import pyarrow as pa'
],
'matplotlib customizing': [
'import matplotlib.pyplot as plt',
'%matplotlib inline',
'',
"plt.rc('figure', figsize=(12, 8))",
'',
'from matplotlib import rcParams',
"rcParams['font.family'] = 'New Gulim'",
"rcParams['font.size'] = 10",
"rcParams['axes.unicode_minus'] = False"
],
'as_float': [
'def as_float(x):',
' """',
" usage: df['col'] = df['col'].apply(as_float)",
' """',
' if not isinstance(x, str):',
' return 0.0',
' else:',
' try:',
' result = float(x)',
' return result',
' except ValueError:',
' return 0.0'
],
'as_int': [
'def as_int(x):',
' """',
" usage: df['col'] = df['col'].apply(as_int)",
' """',
' if not isinstance(x, str):',
' return 0',
' else:',
' try:',
' result = int(x)',
' return result',
' except ValueError:',
' return 0.0'
]
},
'vpimport': [
{ library: 'numpy', alias:'np' },
{ library: 'pandas', alias:'pd' },
{ library: 'matplotlib.pyplot', alias:'plt',
include: [
'%matplotlib inline'
]
},
{ library: 'seaborn', alias:'sns' },
{
library: 'plotly.express', alias: 'px',
include: [
'from plotly.offline import init_notebook_mode',
'init_notebook_mode(connected=True)'
]
},
{ library: 'pyarrow', alias:'pa' },
]
}
this.data = {
...this.data,
...initialData
}
this.defaultConfig = {};
this.metadataSettings = {};
this.moduleDict = {
'np': {
code: 'import numpy as np',
type: 'package'
},
'pd': {
code: 'import pandas as pd',
type: 'package'
},
'plt': {
code: 'import matplotlib.pyplot as plt\n%matplotlib inline',
type: 'package'
},
'sns': {
code: 'import seaborn as sns',
type: 'package'
},
'metrics': {
code: 'from sklearn import metrics',
type: 'package'
},
'ProfileReport': {
code: 'from pandas_profiling import ProfileReport',
type: 'package'
},
'sweetviz': {
code: 'import sweetviz',
type: 'package'
},
'px': {
code: 'import plotly.express as px\nfrom plotly.offline import init_notebook_mode\ninit_notebook_mode(connected=True)',
type: 'package'
},
'WordCloud': {
code: 'from wordcloud import WordCloud',
type: 'package'
},
'fitz': {
code: 'import fitz',
type: 'package'
},
'nltk': {
code: "import nltk\nnltk.download('punkt')",
type: 'package'
},
'Counter': {
code: 'from collections import Counter',
type: 'package'
},
'joblib': {
code: 'import joblib',
type: 'package'
},
'stats': {
code: 'from scipy import stats',
type: 'package'
},
'scipy': {
code: 'import scipy',
type: 'package'
},
'sm': {
code: 'import statsmodels.api as sm',
type: 'package'
},
'pyarrow': {
code: 'import pyarrow as pa',
type: 'package'
}
}
this._readDefaultConfig();
this._readUserCommandList();
}
get isReady() {
let sessionId = 'default';
if (this.extensionType === 'lab' || this.extensionType === 'lite') {
let panelId = vpKernel.getLabPanelId();
if (panelId) {
sessionId = panelId;
}
}
if (sessionId in this._isReady) {
return this._isReady[sessionId];
}
return false;
}
set isReady(ready) {
let sessionId = 'default';
if (this.extensionType === 'lab' || this.extensionType === 'lite') {
let panelId = vpKernel.getLabPanelId();
if (panelId) {
sessionId = panelId;
}
}
this._isReady[sessionId] = ready;
}
showProtector(title='No kernel', content='You have to open the notebook or console to use Visual Python.') {
$('#vp_protector .vp-protector-title').text(title);
$('#vp_protector .vp-protector-content').text(content);
$('#vp_protector').show();
}
hideProtector() {
$('#vp_protector').hide();
}
/**
* Read dejault config
*/
_readDefaultConfig() {
// default values for system-wide configurable parameters
this.defaultConfig = {
indent: 4
};
// default values for per-notebook configurable parameters
this.metadataSettings = {
vp_config_version: '1.0.0',
vp_signature: 'VisualPython',
vp_position: {},
vp_section_display: false,
vp_note_display: false,
vp_menu_width: Config.MENU_MIN_WIDTH,
vp_note_width: Config.BOARD_MIN_WIDTH
};
let vp_width = Config.MENU_MIN_WIDTH + (this.metadataSettings.vp_note_display? Config.BOARD_MIN_WIDTH: 0) + Config.MENU_BOARD_SPACING;
this.metadataSettings['vp_position'] = {
// height: 'calc(100% - 110px)',
// width: vp_width + 'px',
// right: '0px',
// top: '110px',
width: vp_width
}
// merge default config
$.extend(true, this.defaultConfig, this.metadataSettings);
}
_readUserCommandList() {
let divider = '#'.repeat(6);
// get list of codes (ignore first 2 items)
let tmpList = userCommandFile.split(divider).slice(2);
// match key-codes-description
// { 'func_name': { code: '', description: '' } }
let funcDict = {};
let reg = /^def (.+)\(/;
let name = '';
let code = '';
let desc = '';
let packageAlias = {
'_vp_np': 'np',
'_vp_pd': 'pd',
'_vp_plt': 'plt',
'_vp_stats': 'stats',
'_vp_sm': 'sm'
}
for (let i = 0; i < tmpList.length; i += 2) {
desc = tmpList[i].trim();
code = tmpList[i + 1].trim();
let regResult = reg.exec(code);
if (regResult !== null) {
name = regResult[1];
// convert code's package alias
Object.keys(packageAlias).forEach(key => {
let desAlias = packageAlias[key];
code = code.replaceAll(key + '.', desAlias + '.');
});
// list up
funcDict[name] = { code: code, type: 'function', description: desc };
}
}
this.moduleDict = {
...this.moduleDict,
...funcDict
}
}
/**
* Read kernel functions for using visualpython
* - manually click restart menu (MenuFrame.js)
* - automatically restart on jupyter kernel restart (loadVisualpython.js)
*/
readKernelFunction() {
let that = this;
// CHROME: change method to load py files ($.get -> require)
return new Promise(function(resolve, reject) {
// if (that.extensionType === 'lite') {
// that.showProtector('Kernel loading', 'Required inner function is loading now...');
// }
var libraryList = [
printCommand, fileNaviCommand, pandasCommand, variableCommand, visualizationCommand
];
let promiseList = [];
// libraryList.forEach(libName => {
// var libPath = com_Const.PYTHON_PATH + libName;
// $.get(libPath).done(function(data) {
// var code_init = data;
// promiseList.push(vpKernel.execute(code_init, true));
// }).fail(function() {
// console.log('visualpython - failed to read library file', libName);
// });
// });
libraryList.forEach(libCode => {
promiseList.push(vpKernel.execute(libCode, true));
});
if (that.extensionType === 'lite') {
let preInstallCode = '';
let preInstallPackList = [
'seaborn',
'plotly',
'scikit-learn',
'scipy',
'statsmodels'
];
preInstallPackList.forEach((packName, idx) => {
preInstallCode += '%pip install ' + packName
if (idx < preInstallPackList.length - 1) {
preInstallCode += '\n';
}
});
// pre-install packages
promiseList.push(vpKernel.execute(preInstallCode, true));
}
// run all promises
let failed = false;
Promise.all(promiseList).then(function(resultObj) {
;
}).catch(function(resultObj) {
failed = true;
console.log('visualpython - failed to load library', resultObj);
// TODO: show to restart kernel
}).finally(function() {
// if (that.extensionType === 'lite') {
// that.hideProtector();
// }
if (!failed) {
console.log('visualpython - loaded libraries', libraryList);
resolve(true);
} else {
reject(false);
}
});
});
}
getMode() {
return Config.serverMode;
}
_checkMounted() {
return new Promise(function(resolve, reject) {
try {
vpKernel.getColabMounted().then(function(result) {
if (result==='True') {
resolve(true);
} else {
reject(false);
}
}).catch(function(err) {
reject(false);
})
} catch (ex) {
reject(false);
}
});
}
/**
* CHROME: Read from colab
* @param {*} configKey config key to read
*/
_readFromColab(configKey='vpudf') {
return new Promise(function(resolve, reject) {
// mounted
// read /content/drive/MyDrive/.visualpython
vpKernel.getColabConfig(configKey).then(function(resultObj) {
let { result } = resultObj;
try {
if (result && result.trim() != '') {
let parsedResult = JSON.parse(result);
resolve(parsedResult);
} else {
resolve({});
}
} catch (err) {
reject(err);
}
}).catch(function(err) {
reject(err);
})
});
}
/**
* CHROME: Write to colab
* @param {*} data data to write
*/
_writeToColab(data={}, configKey='vpudf') {
return new Promise(function(resolve, reject) {
// mounted
// write to /content/drive/MyDrive/.visualpython
vpKernel.setColabConfig(JSON.stringify(data), configKey).then(function(result) {
resolve(result);
}).catch(function(err) {
reject(err);
});
});
}
/**
* LAB: Read from lab
* @param {*} configKey config key to read
*/
_readFromLab(configKey='vpudf') {
return new Promise(function(resolve, reject) {
// mounted
// read USER_PATH/.visualpython
vpKernel.getLabConfig(configKey).then(function(resultObj) {
let { result } = resultObj;
try {
if (result && result.trim() != '') {
let parsedResult = JSON.parse(result);
resolve(parsedResult);
} else {
resolve({});
}
} catch (err) {
reject(err);
}
}).catch(function(err) {
reject(err);
})
});
}
/**
* LAB: Write to lab
* @param {*} data data to write
*/
_writeToLab(data={}, configKey='vpudf') {
return new Promise(function(resolve, reject) {
// write to USER_PATH/.visualpython
vpKernel.setLabConfig(JSON.stringify(data), configKey).then(function(result) {
resolve(result);
}).catch(function(err) {
reject(err);
});
});
}
loadData(configKey = 'vpudf') {
let that = this;
return new Promise(function(resolve, reject) {
if (that.extensionType === 'notebook') {
Jupyter.notebook.config.load();
Jupyter.notebook.config.loaded.then(function() {
var data = Jupyter.notebook.config.data[configKey];
if (data == undefined) {
data = {};
}
resolve(data);
});
} else if (that.extensionType === 'colab') {
// CHROME: edited to use .visualpython files
that._checkMounted().then(function() {
that._readFromColab('', configKey).then(function(result) {
resolve(result);
}).catch(function(err) {
reject(err);
})
}).catch(function() {
// not mounted
reject('Colab Drive is not mounted!');
})
} else if (that.extensionType === 'lab' || that.extensionType === 'lite') {
// LAB: edited to use .visualpython files
that._readFromLab('', configKey).then(function(result) {
resolve(result);
}).catch(function(err) {
reject(err);
})
}
});
};
/**
* Get configuration data (on server)
* @param {String} dataKey
* @param {String} configKey
* @returns
*/
getData(dataKey='', configKey='vpudf') {
let that = this;
return new Promise(function(resolve, reject) {
if (that.extensionType === 'notebook') {
Jupyter.notebook.config.load();
Jupyter.notebook.config.loaded.then(function() {
var data = Jupyter.notebook.config.data[configKey];
if (data == undefined) {
resolve(data);
return;
}
if (dataKey == '') {
resolve(data);
return;
}
if (Object.keys(data).length > 0) {
resolve(data[dataKey]);
return;
}
reject('No data available.');
});
} else if (that.extensionType === 'colab') {
// CHROME: use drive .visualpython files
that._checkMounted().then(function() {
that._readFromColab(configKey).then(function(result) {
let data = result;
if (data == undefined || (data instanceof Object && Object.keys(data).length === 0)) {
resolve(data);
return;
}
if (dataKey == '') {
resolve(data);
return;
}
if (data instanceof Object && Object.keys(data).length > 0) {
resolve(data[dataKey]);
return;
}
reject('No data available.');
}).catch(function(err) {
reject(err);
})
}).catch(function() {
// not mounted
reject('Colab Drive is not mounted!');
})
} else if (that.extensionType === 'lab' || that.extensionType === 'lite') {
// LAB: use local .visualpython files
that._readFromLab(configKey).then(function(result) {
let data = result;
if (data == undefined || (data instanceof Object && Object.keys(data).length === 0)) {
resolve(data);
return;
}
if (dataKey == '') {
resolve(data);
return;
}
if (data instanceof Object && Object.keys(data).length > 0) {
resolve(data[dataKey]);
return;
}
reject('No data available.');
}).catch(function(err) {
reject(err);
})
}
});
}
getDataSimple(dataKey='', configKey='vpudf') {
if (this.extensionType === 'notebook') {
Jupyter.notebook.config.load();
var data = Jupyter.notebook.config.data[configKey];
if (data == undefined) {
return undefined;
}
if (dataKey == '') {
return data;
}
if (Object.keys(data).length > 0) {
return data[dataKey];
}
} else if (this.extensionType === 'colab') {
// CHROME: TODO: no way to simply get data
return undefined;
}
return undefined;
}
/**
* Set configuration data (on server)
* @param {Object} dataObj
* @param {String} configKey vpcfg / vpudf / vpimport / vppackman
*/
setData(dataObj, configKey='vpudf') {
let that = this;
return new Promise(function(resolve, reject) {
if (that.extensionType === 'notebook') {
// set data using key
Jupyter.notebook.config.loaded.then(function() {
Jupyter.notebook.config.update({[configKey]: dataObj});
resolve(true);
});
} else if (that.extensionType === 'colab') {
// CHROME: use .visualpython files
that.getData('', configKey).then(function(data) {
let newDataObj = {};
if (data && typeof data === 'object') {
newDataObj = {
...data
};
}
newDataObj = {
...newDataObj,
...dataObj
}
that._writeToColab(newDataObj, configKey).then(function() {
resolve();
}).catch(function() {
reject();
});
});
} else if (that.extensionType === 'lab' || that.extensionType === 'lite') {
// LAB: use .visualpython files
that.getData('', configKey).then(function(data) {
let newDataObj = {};
if (data && typeof data === 'object') {
newDataObj = {
...data
};
}
newDataObj = {
...newDataObj,
...dataObj
}
that._writeToLab(newDataObj, configKey).then(function() {
resolve();
}).catch(function() {
reject();
});
});
}
});
}
removeData(key, configKey = 'vpudf') {
let that = this;
return new Promise(function(resolve, reject) {
if (that.extensionType === 'notebook') {
// if set value to null, it removes from config data
Jupyter.notebook.config.loaded.then(function() {
Jupyter.notebook.config.update({[configKey]: {[key]: null}});
});
resolve(true);
} else if (that.extensionType === 'colab') {
// CHROME: use .visualpython files
that.getData('', configKey).then(function(data) {
let dataObj = data;
delete dataObj[key];
that._writeToColab(dataObj, configKey).then(function() {
resolve(true);
}).catch(function() {
reject(false);
});
}).catch(function(err) {
reject(false);
})
} else if (that.extensionType === 'lab' || that.extensionType === 'lite') {
// LAB: use .visualpython files
that.getData('', configKey).then(function(data) {
let dataObj = data;
delete dataObj[key];
that._writeToLab(dataObj, configKey).then(function() {
resolve(true);
}).catch(function() {
reject(false);
});
}).catch(function(err) {
reject(false);
})
}
});
}
/**
* Get metadata (on jupyter file)
* @param {String} dataKey
* @param {String} configKey
*/
getMetadata(dataKey='', configKey='vp') {
if (this.extensionType === 'notebook') {
let metadata = Jupyter.notebook.metadata[configKey];
if (metadata) {
// update this metadataSetting
this.metadataSettings = {
...this.metadataSettings,
...metadata
};
// no datakey, return all metadata
if (dataKey == '') {
return metadata;
}
return metadata[dataKey];
}
} else if (this.extensionType === 'colab') {
// CHROME: use colab.global.notebookModel.metadata
let metadata = colab.global.notebookModel.metadata[configKey];
if (metadata) {
// update this metadataSetting
this.metadataSettings = {
...this.metadataSettings,
...metadata
};
// no datakey, return all metadata
if (dataKey == '') {
return metadata;
}
return metadata[dataKey];
}
}
return {};
}
/**
* Set metadata (on jupyter file)
* @param {Object} dataObj
* @param {String} configKey
*/
setMetadata(dataObj, configKey='vp') {
if (this.extensionType === 'notebook') {
let oldData = Jupyter.notebook.metadata[configKey];
Jupyter.notebook.metadata[configKey] = {
...oldData,
...dataObj
};
Jupyter.notebook.set_dirty();
} else if (this.extensionType === 'colab') {
// CHROME: use colab.global.notebookModel.metadata
let oldData = colab.global.notebookModel.metadata[configKey];
colab.global.notebookModel.metadata[configKey] = {
...oldData,
...dataObj
};
}
// update this metadataSetting
this.metadataSettings = {
...this.metadataSettings,
...dataObj
};
}
/**
* Reset metadata (on jupyter file)
* @param {String} configKey
*/
resetMetadata(configKey='vp') {
if (this.extensionType === 'notebook') {
Jupyter.notebook.metadata[configKey] = {};
} else if (this.extensionType === 'colab') {
// CHROME: use colab.global.notebookModel.metadata
colab.global.notebookModel.metadata[configKey] = {};
}
}
/**
* Check vp pypi package version (Promise)
* usage:
* vpConfig.getPackageVersion('visualpython').then(function(version) {
* // do something after loading version
* ...
* }).catch(function(err) {
* // error handling
* ...
* })
*/
getPackageVersion(packName='visualpython') {
let url = `https://pypi.org/pypi/${packName}/json`;
// using the Fetch API
return new Promise(function(resolve, reject) {
try {
fetch(url).then(function (response) {
// if (response.statusCode === 200) {
// return response.json();
// } else if (response.statusCode === 204) {
// throw new Error('No Contents', response);
// } else if (response.statusCode === 404) {
// throw new Error('Page Not Found', response);
// } else if (response.statusCode === 500) {
// throw new Error('Internal Server Error', response);
// } else {
// throw new Error('Unexpected Http Status Code', response);
// }
if (response.ok) {
return response.json();
} else {
throw new Error('Error', response);
}
}).then(function (data) {
resolve(data.info.version, data.releases);
}).catch(function(err) {
let errMsg = err.message;
if (errMsg.includes('Failed to fetch')) {
errMsg = 'Network connection error';
}
reject(errMsg);
});
} catch (err) {
reject(err);
}
});
}
getVpInstalledVersion() {
return Config.version;
}
checkVersionTimestamp = function() {
let that = this;
// check version timestamp
let nowDate = new Date();
this.getData('version_timestamp', 'vpcfg').then(function(data) {
let doCheckVersion = false;
vpLog.display(VP_LOG_TYPE.DEVELOP, 'Checking its version timestamp... : ' + data);
if (data == undefined || (data instanceof Object && Object.keys(data).length === 0)) {
// no timestamp, check version
doCheckVersion = true;
} else if (data != '') {
let lastCheck = new Date(parseInt(data));
let diffCheck_now = new Date(nowDate.getFullYear(), nowDate.getMonth() + 1, nowDate.getDate());
let diffCheck_last = new Date(lastCheck.getFullYear(), lastCheck.getMonth() + 1, lastCheck.getDate());
let diff = Math.abs(diffCheck_now.getTime() - diffCheck_last.getTime());
diff = Math.ceil(diff / (1000 * 3600 * 24));
if (diff >= 1) {
// if More than 1 day passed, check version
doCheckVersion = true;
}
}
// check version and update version_timestamp
if (doCheckVersion == true) {
that.checkVpVersion(true);
}
}).catch(function(err) {
vpLog.display(VP_LOG_TYPE.ERROR, err);
})
}
checkVpVersion(background=false) {
let that = this;
let nowVersion = this.getVpInstalledVersion();
let packageName = 'visualpython';
if (this.extensionType === 'lab' || this.extensionType === 'lite') {
packageName = 'jupyterlab-visualpython';
}
this.getPackageVersion(packageName).then(function(latestVersion) {
let showUpdater = false;
if (nowVersion !== latestVersion) {
let nowVerParts = nowVersion.split('.').map(x => ~~x);
let latVerParts = latestVersion.split('.').map(x => ~~x);
for (var i = 0; i < nowVerParts.length; i++) {
const a = nowVerParts[i];
const b = latVerParts[i];
if (a < b) {
showUpdater = true;
break;
} else if (a > b) {
break;
}
}
}
if (showUpdater === false) {
// if it's already up to date
// hide version update icon
$('#vp_versionUpdater').hide();
if (background === true) {
;
} else {
let msg = com_util.formatString('Visual Python is up to date. ({0})', nowVersion);
com_util.renderInfoModal(msg);
}
// update version_timestamp
that.setData({ 'version_timestamp': new Date().getTime() }, 'vpcfg');
} else {
let msg = com_util.formatString('Visual Python updates are available.
(Latest version: {0} / Your version: {1})',
latestVersion, nowVersion);
// show version update icon
$('#vp_versionUpdater').attr('title', msg.replace('
', ''));
$('#vp_versionUpdater').data('version', latestVersion);
$('#vp_versionUpdater').show();
// render update modal
com_util.renderModal({
title: 'Update version',
message: msg,
buttons: ['Cancel', 'Update'],
defaultButtonIdx: 0,
buttonClass: ['cancel', 'activated'],
finish: function(clickedBtnIdx) {
switch (clickedBtnIdx) {
case 0:
// cancel
// update version_timestamp
that.setData({ 'version_timestamp': new Date().getTime() }, 'vpcfg');
break;
case 1:
// update
if (that.extensionType === 'notebook') {
let info = [
'## Visual Python Upgrade',
'NOTE: ',
'- Refresh your web browser to start a new version.',
'- Save VP Note before refreshing the page.'
];
com_interface.insertCell('markdown', info.join('\n'));
com_interface.insertCell('code', '!pip install visualpython --upgrade');
com_interface.insertCell('code', '!visualpy install');
} else if (that.extensionType === 'colab') {
// CHROME: update chrome extension
let info = [
'## Visual Python Upgrade',
'NOTE: ',
'- Go to chrome webstore and update visualpython',
'- Refresh your web browser to start a new version.',
'- Save VP Note before refreshing the page.'
];
com_interface.insertCell('markdown', info.join('\n'));
} else if (that.extensionType === 'lab') {
// LAB: update lab extension
let info = [
'## Visual Python Upgrade',
'NOTE: ',
'- Refresh your web browser to start a new version.',
'- Save VP Note before refreshing the page.'
];
com_interface.insertCell('markdown', info.join('\n'));
com_interface.insertCell('code', '!pip install jupyterlab-visualpython --upgrade');
} else if (that.extensionType === 'lite') {
// LITE: update lab extension on lite
let info = [
'## Visual Python Upgrade',
'NOTE: ',
'- Refresh your web browser to start a new version.',
'- Save VP Note before refreshing the page.'
];
com_interface.insertCell('markdown', info.join('\n'));
com_interface.insertCell('code', "%pip install jupyterlab-visualpython==" + latestVersion);
}
// update version_timestamp
that.setData({ 'version_timestamp': new Date().getTime() }, 'vpcfg');
// hide updater
$('#vp_versionUpdater').hide();
break;
}
}
});
}
}).catch(function(err) {
if (background) {
vpLog.display(VP_LOG_TYPE.ERROR, 'Version Checker - ' + err);
} else {
com_util.renderAlertModal(err);
}
})
}
getMenuGroupLabel(key = '') {
return Config.MENU_GROUP_DICT[key];
}
getMenuGroupDict() {
return Config.MENU_GROUP_DICT;
}
getDataTypes() {
return Config.DATA_TYPES;
}
getMLDataDict(key = '') {
if (key == '') {
return Config.ML_DATA_DICT;
}
return Config.ML_DATA_DICT[key];
}
getMLDataTypes() {
return Config.ML_DATA_TYPES;
}
getMLCategories() {
return Object.keys(Config.ML_DATA_DICT);
}
getModuleCode(modName='') {
if (modName == '') {
return this.moduleDict;
}
try {
return this.moduleDict[modName];
} catch {
return null;
}
}
}
//========================================================================
// Define static variable
//========================================================================
/**
* FIXME: before release, change it to _MODE_TYPE.RELEASE
*/
// Config.serverMode = _MODE_TYPE.DEVELOP;
Config.serverMode = _MODE_TYPE.RELEASE;
/**
* Version
*/
Config.version = "3.0.2";
/**
* Type of mode
*/
Config.MODE_TYPE = _MODE_TYPE;
/**
* Frame size settings
*/
Config.JUPYTER_HEADER_SPACING = 110;
Config.MENU_MIN_WIDTH = 273;
Config.BOARD_MIN_WIDTH = 263;
Config.MENU_BOARD_SPACING = 5;
Config.VP_MIN_WIDTH = Config.MENU_MIN_WIDTH + Config.BOARD_MIN_WIDTH + Config.MENU_BOARD_SPACING; // = MENU_MIN_WIDTH + BOARD_MIN_WIDTH + MENU_BOARD_SPACING
/**
* Menu group codes
*/
Config.MENU_GROUP_DICT = {
'': '',
'logic': 'Logic',
'library': 'Library',
'apps': 'Data Analysis',
'visualization': 'Visualization',
'machine_learning': 'Machine Learning'
}
/**
* Data types
*/
Config.DATA_TYPES = [
// pandas object
'DataFrame', 'Series', 'Index', 'Period', 'GroupBy', 'Timestamp'
// Index type object
, 'RangeIndex', 'CategoricalIndex', 'MultiIndex', 'IntervalIndex', 'DatetimeIndex', 'TimedeltaIndex', 'PeriodIndex', 'Int64Index', 'UInt64Index', 'Float64Index'
// GroupBy type object
, 'DataFrameGroupBy', 'SeriesGroupBy'
// Plot type
, 'Figure', 'AxesSubplot'
// Numpy
, 'ndarray'
// Python variable
, 'str', 'int', 'float', 'bool', 'dict', 'list', 'tuple'
]
/**
* Data types using for searching model variables
*/
Config.ML_DATA_DICT = {
'Data Preparation': [
/** Encoding */
'OneHotEncoder', 'LabelEncoder', 'OrdinalEncoder', 'TargetEncoder',
/** Scaling */
'StandardScaler', 'RobustScaler', 'MinMaxScaler', 'Normalizer', 'FunctionTransformer', 'PolynomialFeatures', 'KBinsDiscretizer',
/** ETC */
'SimpleImputer', 'SMOTE', 'ColumnTransformer'
],
'Regression': [
'LinearRegression', 'Ridge', 'Lasso', 'ElasticNet', 'SVR', 'DecisionTreeRegressor', 'RandomForestRegressor', 'GradientBoostingRegressor', 'XGBRegressor', 'LGBMRegressor', 'CatBoostRegressor',
],
'Classification': [
'LogisticRegression', 'BernoulliNB', 'MultinomialNB', 'GaussianNB', 'SVC', 'DecisionTreeClassifier', 'RandomForestClassifier', 'GradientBoostingClassifier', 'XGBClassifier', 'LGBMClassifier', 'CatBoostClassifier',
],
'Clustering': [
'KMeans', 'AgglomerativeClustering', 'GaussianMixture', 'DBSCAN',
],
'Dimension Reduction': [
'PCA', 'LinearDiscriminantAnalysis', 'TruncatedSVD', 'NMF', 'TSNE'
],
'Auto ML': [
'AutoSklearnRegressor', 'AutoSklearnClassifier', 'TPOTRegressor', 'TPOTClassifier'
],
'ETC': [
'GridSearchCV'
]
};
Config.ML_DATA_TYPES = [
...Config.ML_DATA_DICT['Data Preparation'],
...Config.ML_DATA_DICT['Regression'],
...Config.ML_DATA_DICT['Classification'],
...Config.ML_DATA_DICT['Clustering'],
...Config.ML_DATA_DICT['Dimension Reduction'],
...Config.ML_DATA_DICT['Auto ML'],
...Config.ML_DATA_DICT['ETC']
];
return Config;
});
/* End of file */