From 4967b2c370606692d560031b158d44191ac6aa60 Mon Sep 17 00:00:00 2001 From: Angelos Chatzimparmpas Date: Tue, 8 Oct 2019 14:20:32 +0200 Subject: [PATCH] fix bar chart --- __pycache__/run.cpython-37.pyc | Bin 20757 -> 17925 bytes .../metadata.json | 2 +- .../output.pkl | Bin .../metadata.json | 1 + .../output.pkl | Bin .../run/GridSearchForModels/func_code.py | 96 ++++ .../metadata.json | 1 + .../output.pkl | Bin 0 -> 28 bytes .../metadata.json | 2 +- .../output.pkl | Bin 0 -> 28 bytes .../run/GridSearchForParameters/func_code.py | 66 ++- .../output.pkl | Bin 0 -> 267494 bytes .../metadata.json | 1 + .../output.pkl | Bin 0 -> 299465 bytes .../metadata.json | 1 + .../run/GridSearchForModels/func_code.py | 128 +++++ frontend/package-lock.json | 300 ++++++----- frontend/package.json | 18 +- .../src/components/AlgorithmHyperParam.vue | 4 +- frontend/src/components/Algorithms.vue | 145 +++--- .../src/components/BalancePredictions.vue | 135 ++++- frontend/src/components/BarChart.vue | 273 ++++------ frontend/src/components/Controller.vue | 1 - .../src/components/FinalResultsLinePlot.vue | 4 +- frontend/src/components/Main.vue | 40 +- frontend/src/components/PerMetricBarChart.vue | 5 +- frontend/src/components/Provenance.vue | 91 +++- frontend/src/components/ScatterPlot.vue | 73 ++- frontend/src/main.js | 4 +- package-lock.json | 3 + run.py | 480 +++++++----------- 31 files changed, 1082 insertions(+), 792 deletions(-) rename cache_dir/joblib/run/{GridSearchForParameters/378d198d3c0e10692e1f994b1d6cc249 => GridSearchForModels/6ca078b89780ce51f8c908be394b0a91}/metadata.json (82%) rename cache_dir/joblib/run/{GridSearchForParameters/378d198d3c0e10692e1f994b1d6cc249 => GridSearchForModels/6ca078b89780ce51f8c908be394b0a91}/output.pkl (100%) create mode 100644 cache_dir/joblib/run/GridSearchForModels/b32ac658efc96fe80763fbc6cdd8559c/metadata.json rename cache_dir/joblib/run/{GridSearchForParameters/c68ef3375400002ebc70a05b50292b80 => GridSearchForModels/b32ac658efc96fe80763fbc6cdd8559c}/output.pkl (100%) create mode 100644 cache_dir/joblib/run/GridSearchForModels/func_code.py create mode 100644 cache_dir/joblib/run/GridSearchForParameters/6ca078b89780ce51f8c908be394b0a91/metadata.json create mode 100644 cache_dir/joblib/run/GridSearchForParameters/6ca078b89780ce51f8c908be394b0a91/output.pkl rename cache_dir/joblib/run/GridSearchForParameters/{c68ef3375400002ebc70a05b50292b80 => b32ac658efc96fe80763fbc6cdd8559c}/metadata.json (67%) create mode 100644 cache_dir/joblib/run/GridSearchForParameters/b32ac658efc96fe80763fbc6cdd8559c/output.pkl create mode 100644 cachedir/joblib/run/GridSearchForModels/1ace3632acb8ced29677b3bf1fd54ebb/output.pkl create mode 100644 cachedir/joblib/run/GridSearchForModels/369469c4c53064fdb6191f1f295902f7/metadata.json create mode 100644 cachedir/joblib/run/GridSearchForModels/4b0679293742f99381cce3660e671df7/output.pkl create mode 100644 cachedir/joblib/run/GridSearchForModels/d44ab74114f87bbccdbdd1a5d904bd4a/metadata.json create mode 100644 cachedir/joblib/run/GridSearchForModels/func_code.py create mode 100644 package-lock.json diff --git a/__pycache__/run.cpython-37.pyc b/__pycache__/run.cpython-37.pyc index 0b396234566d3dcacc5e26fe6155f726f65c98f5..4308bb6d3dbe6d80b4a8a52c55e49945565f33ea 100644 GIT binary patch delta 8953 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 X$$9-uOKk_-j4xi6l=hGskIVlLDapZW literal 20757 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 N&I}>NUY^bz`2Wv77EJ&E diff --git a/cache_dir/joblib/run/GridSearchForParameters/378d198d3c0e10692e1f994b1d6cc249/metadata.json b/cache_dir/joblib/run/GridSearchForModels/6ca078b89780ce51f8c908be394b0a91/metadata.json similarity index 82% rename from cache_dir/joblib/run/GridSearchForParameters/378d198d3c0e10692e1f994b1d6cc249/metadata.json rename to cache_dir/joblib/run/GridSearchForModels/6ca078b89780ce51f8c908be394b0a91/metadata.json index fb6479905..9fa5ece36 100644 --- a/cache_dir/joblib/run/GridSearchForParameters/378d198d3c0e10692e1f994b1d6cc249/metadata.json +++ b/cache_dir/joblib/run/GridSearchForModels/6ca078b89780ce51f8c908be394b0a91/metadata.json @@ -1 +1 @@ -{"duration": 15.238354921340942, "input_args": {"clf": "RandomForestClassifier(bootstrap=True, class_weight=None, criterion='gini',\n max_depth=None, max_features='auto', max_leaf_nodes=None,\n min_impurity_decrease=0.0, min_impurity_split=None,\n min_samples_leaf=1, min_samples_split=2,\n min_weight_fraction_leaf=0.0, n_estimators='warn',\n n_jobs=None, oob_score=False, random_state=None,\n verbose=0, warm_start=False)", "params": "{'n_estimators': [80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119], 'criterion': ['gini', 'entropy']}"}} \ No newline at end of file +{"duration": 13.885742902755737, "input_args": {"clf": "RandomForestClassifier(bootstrap=True, class_weight=None, criterion='gini',\n max_depth=None, max_features='auto', max_leaf_nodes=None,\n min_impurity_decrease=0.0, min_impurity_split=None,\n min_samples_leaf=1, min_samples_split=2,\n min_weight_fraction_leaf=0.0, n_estimators='warn',\n n_jobs=None, oob_score=False, random_state=None,\n verbose=0, warm_start=False)", "params": "{'n_estimators': [80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119], 'criterion': ['gini', 'entropy']}", "eachAlgor": "'RF'", "factors": "[1, 1, 1, 1, 1, 1]"}} \ No newline at end of file diff --git a/cache_dir/joblib/run/GridSearchForParameters/378d198d3c0e10692e1f994b1d6cc249/output.pkl b/cache_dir/joblib/run/GridSearchForModels/6ca078b89780ce51f8c908be394b0a91/output.pkl similarity index 100% rename from cache_dir/joblib/run/GridSearchForParameters/378d198d3c0e10692e1f994b1d6cc249/output.pkl rename to cache_dir/joblib/run/GridSearchForModels/6ca078b89780ce51f8c908be394b0a91/output.pkl diff --git a/cache_dir/joblib/run/GridSearchForModels/b32ac658efc96fe80763fbc6cdd8559c/metadata.json b/cache_dir/joblib/run/GridSearchForModels/b32ac658efc96fe80763fbc6cdd8559c/metadata.json new file mode 100644 index 000000000..d3ae688e7 --- /dev/null +++ b/cache_dir/joblib/run/GridSearchForModels/b32ac658efc96fe80763fbc6cdd8559c/metadata.json @@ -0,0 +1 @@ +{"duration": 36.23512291908264, "input_args": {"clf": "KNeighborsClassifier(algorithm='auto', leaf_size=30, metric='minkowski',\n metric_params=None, n_jobs=None, n_neighbors=5, p=2,\n weights='uniform')", "params": "{'n_neighbors': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24], 'weights': ['uniform', 'distance'], 'algorithm': ['brute', 'kd_tree', 'ball_tree'], 'metric': ['chebyshev', 'manhattan', 'euclidean', 'minkowski']}", "eachAlgor": "'KNN'", "factors": "[1, 1, 1, 1, 1, 1]"}} \ No newline at end of file diff --git a/cache_dir/joblib/run/GridSearchForParameters/c68ef3375400002ebc70a05b50292b80/output.pkl b/cache_dir/joblib/run/GridSearchForModels/b32ac658efc96fe80763fbc6cdd8559c/output.pkl similarity index 100% rename from cache_dir/joblib/run/GridSearchForParameters/c68ef3375400002ebc70a05b50292b80/output.pkl rename to cache_dir/joblib/run/GridSearchForModels/b32ac658efc96fe80763fbc6cdd8559c/output.pkl diff --git a/cache_dir/joblib/run/GridSearchForModels/func_code.py b/cache_dir/joblib/run/GridSearchForModels/func_code.py new file mode 100644 index 000000000..66f9fd7d1 --- /dev/null +++ b/cache_dir/joblib/run/GridSearchForModels/func_code.py @@ -0,0 +1,96 @@ +# first line: 714 +def GridSearchForModels(clf, params, eachAlgor, factors): + + # scoring parameters + global scoring + + # number of scoring parameters + global NumberofscoringMetrics + + # crossvalidation number + global crossValidation + + # instantiate spark session + spark = ( + SparkSession + .builder + .getOrCreate() + ) + sc = spark.sparkContext + + # this is the grid we use to train the models + grid = DistGridSearchCV( + estimator=clf, param_grid=params, + sc=sc, cv=crossValidation, refit='accuracy', scoring=scoring, + verbose=0, n_jobs=-1) + + # fit and extract the probabilities + grid.fit(XData, yData) + yPredict = grid.predict(XData) + + # process the results + cv_results = [] + cv_results.append(grid.cv_results_) + df_cv_results = pd.DataFrame.from_dict(cv_results) + + # number of models stored + number_of_models = len(df_cv_results.iloc[0][0]) + + # initialize results per row + df_cv_results_per_row = [] + + # loop through number of models + for i in range(number_of_models): + # initialize results per item + df_cv_results_per_item = [] + for column in df_cv_results.iloc[0]: + df_cv_results_per_item.append(column[i]) + df_cv_results_per_row.append(df_cv_results_per_item) + + # store the results into a pandas dataframe + df_cv_results_classifiers = pd.DataFrame(data = df_cv_results_per_row, columns= df_cv_results.columns) + + # copy and filter in order to get only the metrics + metrics = df_cv_results_classifiers.copy() + metrics = metrics.filter(['mean_test_accuracy','mean_test_f1_macro','mean_test_precision','mean_test_recall','mean_test_jaccard']) + + # control the factors + sumperModel = [] + for row in metrics.iterrows(): + rowSum = 0 + lengthFactors = NumberofscoringMetrics + for loop,elements in enumerate(row): + lengthFactors = lengthFactors - 1 + factors[loop] + rowSum = elements*factors[loop] + rowSum + if lengthFactors is 0: + sumperModel = 0 + else: + sumperModel.append(rowSum/lengthFactors) + # summarize all models metrics + summarizedMetrics = pd.DataFrame(sumperModel) + summarizedMetrics.rename(columns={0:'sum'}) + + yPredictProb.append(grid.predict_proba(XData)) + + # retrieve target names (class names) + global target_names + PerClassMetric = [] + PerClassMetric.append(classification_report(yData, yPredict, target_names=target_names, digits=2, output_dict=True)) + PerClassMetricPandas = pd.DataFrame(PerClassMetric) + print(PerClassMetricPandas) + del PerClassMetricPandas['accuracy'] + del PerClassMetricPandas['macro avg'] + del PerClassMetricPandas['weighted avg'] + PerClassMetricPandas = PerClassMetricPandas.to_json() + + # concat parameters and performance + parameters = pd.DataFrame(df_cv_results_classifiers['params']) + parametersPerformancePerModel = pd.concat([summarizedMetrics, parameters], axis=1) + parametersPerformancePerModel = parametersPerformancePerModel.to_json() + + # make global the parameters performance to send it back + global allParametersPerformancePerModel + allParametersPerformancePerModel.append(parametersPerformancePerModel) + allParametersPerformancePerModel.append(PerClassMetricPandas) + + return 'Everything is okay' diff --git a/cache_dir/joblib/run/GridSearchForParameters/6ca078b89780ce51f8c908be394b0a91/metadata.json b/cache_dir/joblib/run/GridSearchForParameters/6ca078b89780ce51f8c908be394b0a91/metadata.json new file mode 100644 index 000000000..eeda831ce --- /dev/null +++ b/cache_dir/joblib/run/GridSearchForParameters/6ca078b89780ce51f8c908be394b0a91/metadata.json @@ -0,0 +1 @@ +{"duration": 11.80344295501709, "input_args": {"clf": "RandomForestClassifier(bootstrap=True, class_weight=None, criterion='gini',\n max_depth=None, max_features='auto', max_leaf_nodes=None,\n min_impurity_decrease=0.0, min_impurity_split=None,\n min_samples_leaf=1, min_samples_split=2,\n min_weight_fraction_leaf=0.0, n_estimators='warn',\n n_jobs=None, oob_score=False, random_state=None,\n verbose=0, warm_start=False)", "params": "{'n_estimators': [80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119], 'criterion': ['gini', 'entropy']}", "eachAlgor": "'RF'", "factors": "[1, 1, 1, 1, 1, 1]"}} \ No newline at end of file diff --git a/cache_dir/joblib/run/GridSearchForParameters/6ca078b89780ce51f8c908be394b0a91/output.pkl b/cache_dir/joblib/run/GridSearchForParameters/6ca078b89780ce51f8c908be394b0a91/output.pkl new file mode 100644 index 0000000000000000000000000000000000000000..d255b1678443d56fb828ed79c5a81d6680f2394d GIT binary patch literal 28 jcmZo*ju2vCU~nxC>q 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 literal 0 HcmV?d00001 diff --git a/cachedir/joblib/run/GridSearchForModels/369469c4c53064fdb6191f1f295902f7/metadata.json b/cachedir/joblib/run/GridSearchForModels/369469c4c53064fdb6191f1f295902f7/metadata.json new file mode 100644 index 000000000..5c6c6ffb7 --- /dev/null +++ b/cachedir/joblib/run/GridSearchForModels/369469c4c53064fdb6191f1f295902f7/metadata.json @@ -0,0 +1 @@ +{"duration": 288.6949689388275, "input_args": {"clf": "KNeighborsClassifier(algorithm='ball_tree', leaf_size=30, metric='minkowski',\n metric_params=None, n_jobs=None, n_neighbors=24, p=2,\n weights='distance')", "params": "{'n_neighbors': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24], 'weights': ['uniform', 'distance'], 'algorithm': ['brute', 'kd_tree', 'ball_tree'], 'metric': ['chebyshev', 'manhattan', 'euclidean', 'minkowski']}", "eachAlgor": "'KNN'", "factors": "[1, 1, 1, 1, 1]", "AlgorithmsIDsEnd": "0"}} \ No newline at end of file diff --git a/cachedir/joblib/run/GridSearchForModels/4b0679293742f99381cce3660e671df7/output.pkl b/cachedir/joblib/run/GridSearchForModels/4b0679293742f99381cce3660e671df7/output.pkl new file mode 100644 index 0000000000000000000000000000000000000000..43e1a92efeb7cd7483d067550a05bcd62a2abc09 GIT binary patch literal 299465 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 literal 0 HcmV?d00001 diff --git a/cachedir/joblib/run/GridSearchForModels/d44ab74114f87bbccdbdd1a5d904bd4a/metadata.json b/cachedir/joblib/run/GridSearchForModels/d44ab74114f87bbccdbdd1a5d904bd4a/metadata.json new file mode 100644 index 000000000..d49681513 --- /dev/null +++ b/cachedir/joblib/run/GridSearchForModels/d44ab74114f87bbccdbdd1a5d904bd4a/metadata.json @@ -0,0 +1 @@ +{"duration": 227.36859011650085, "input_args": {"clf": "RandomForestClassifier(bootstrap=True, class_weight=None, criterion='entropy',\n max_depth=None, max_features='auto', max_leaf_nodes=None,\n min_impurity_decrease=0.0, min_impurity_split=None,\n min_samples_leaf=1, min_samples_split=2,\n min_weight_fraction_leaf=0.0, n_estimators=119,\n n_jobs=None, oob_score=False, random_state=None,\n verbose=0, warm_start=False)", "params": "{'n_estimators': [80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119], 'criterion': ['gini', 'entropy']}", "eachAlgor": "'RF'", "factors": "[1, 1, 1, 1, 1]", "AlgorithmsIDsEnd": "576"}} \ No newline at end of file diff --git a/cachedir/joblib/run/GridSearchForModels/func_code.py b/cachedir/joblib/run/GridSearchForModels/func_code.py new file mode 100644 index 000000000..58db1e483 --- /dev/null +++ b/cachedir/joblib/run/GridSearchForModels/func_code.py @@ -0,0 +1,128 @@ +# first line: 634 +@memory.cache +def GridSearchForModels(clf, params, eachAlgor, factors, AlgorithmsIDsEnd): + + # instantiate spark session + spark = ( + SparkSession + .builder + .getOrCreate() + ) + sc = spark.sparkContext + + # this is the grid we use to train the models + grid = DistGridSearchCV( + estimator=clf, param_grid=params, + sc=sc, cv=crossValidation, refit='accuracy', scoring=scoring, + verbose=0, n_jobs=-1) + + # fit and extract the probabilities + grid.fit(XData, yData) + + # process the results + cv_results = [] + cv_results.append(grid.cv_results_) + df_cv_results = pd.DataFrame.from_dict(cv_results) + + # number of models stored + number_of_models = len(df_cv_results.iloc[0][0]) + + # initialize results per row + df_cv_results_per_row = [] + + # loop through number of models + modelsIDs = [] + for i in range(number_of_models): + modelsIDs.append(AlgorithmsIDsEnd+i) + # initialize results per item + df_cv_results_per_item = [] + for column in df_cv_results.iloc[0]: + df_cv_results_per_item.append(column[i]) + df_cv_results_per_row.append(df_cv_results_per_item) + + # store the results into a pandas dataframe + df_cv_results_classifiers = pd.DataFrame(data = df_cv_results_per_row, columns= df_cv_results.columns) + + # copy and filter in order to get only the metrics + metrics = df_cv_results_classifiers.copy() + metrics = metrics.filter(['mean_test_accuracy','mean_test_f1_macro','mean_test_precision','mean_test_recall','mean_test_jaccard']) + + # control the factors + sumperModel = [] + for index, row in metrics.iterrows(): + rowSum = 0 + lengthFactors = NumberofscoringMetrics + for loop,elements in enumerate(row): + lengthFactors = lengthFactors - 1 + factors[loop] + rowSum = elements*factors[loop] + rowSum + if lengthFactors is 0: + sumperModel = 0 + else: + sumperModel.append(rowSum/lengthFactors) + + # summarize all models metrics + summarizedMetrics = pd.DataFrame(sumperModel) + summarizedMetrics.rename(columns={0:'sum'}) + + # concat parameters and performance + parameters = pd.DataFrame(df_cv_results_classifiers['params']) + parametersPerformancePerModel = pd.concat([summarizedMetrics, parameters], axis=1) + parametersPerformancePerModel = parametersPerformancePerModel.to_json() + + parametersLocal = json.loads(parametersPerformancePerModel)['params'].copy() + Models = [] + for index, items in enumerate(parametersLocal): + Models.append(str(index)) + + parametersLocalNew = [ parametersLocal[your_key] for your_key in Models ] + + permList = [] + PerFeatureAccuracy = [] + PerClassMetric = [] + + for eachModelParameters in parametersLocalNew: + clf.set_params(**eachModelParameters) + + perm = PermutationImportance(clf, cv = None, refit = True, n_iter = 25).fit(XData, yData) + permList.append(perm.feature_importances_) + + n_feats = XData.shape[1] + for i in range(n_feats): + scores = model_selection.cross_val_score(clf, XData.values[:, i].reshape(-1, 1), yData, cv=crossValidation) + PerFeatureAccuracy.append(scores.mean()) + + clf.fit(XData, yData) + yPredict = clf.predict(XData) + # retrieve target names (class names) + PerClassMetric.append(classification_report(yData, yPredict, target_names=target_names, digits=2, output_dict=True)) + + PerClassMetricPandas = pd.DataFrame(PerClassMetric) + del PerClassMetricPandas['accuracy'] + del PerClassMetricPandas['macro avg'] + del PerClassMetricPandas['weighted avg'] + PerClassMetricPandas = PerClassMetricPandas.to_json() + + + perm_imp_eli5PD = pd.DataFrame(permList) + perm_imp_eli5PD = perm_imp_eli5PD.to_json() + + PerFeatureAccuracyPandas = pd.DataFrame(PerFeatureAccuracy) + PerFeatureAccuracyPandas = PerFeatureAccuracyPandas.to_json() + + bestfeatures = SelectKBest(score_func=chi2, k='all') + fit = bestfeatures.fit(XData,yData) + dfscores = pd.DataFrame(fit.scores_) + dfcolumns = pd.DataFrame(XData.columns) + featureScores = pd.concat([dfcolumns,dfscores],axis=1) + featureScores.columns = ['Specs','Score'] #naming the dataframe columns + featureScores = featureScores.to_json() + + # gather the results and send them back + results.append(modelsIDs) # Position: 0 and so on + results.append(parametersPerformancePerModel) # Position: 1 and so on + results.append(PerClassMetricPandas) # Position: 2 and so on + results.append(PerFeatureAccuracyPandas) # Position: 3 and so on + results.append(perm_imp_eli5PD) # Position: 4 and so on + results.append(featureScores) # Position: 5 and so on + + return results diff --git a/frontend/package-lock.json b/frontend/package-lock.json index b5cb667e9..19be6b1c6 100755 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -1807,9 +1807,9 @@ "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==" }, "@types/node": { - "version": "12.7.9", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.7.9.tgz", - "integrity": "sha512-P57oKTJ/vYivL2BCfxCC5tQjlS8qW31pbOL6qt99Yrjm95YdHgNZwjrTTjMBh+C2/y6PXIX4oz253+jUzxKKfQ==" + "version": "12.7.11", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.7.11.tgz", + "integrity": "sha512-Otxmr2rrZLKRYIybtdG/sgeO+tHY20GxeDjcGmUnmmlCWyEnv2a2x1ZXBo3BTec4OiTXMQCiazB8NMBf0iRlFw==" }, "@types/q": { "version": "1.5.2", @@ -2188,6 +2188,14 @@ } } }, + "allofw": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/allofw/-/allofw-0.1.0.tgz", + "integrity": "sha1-AmxSVpoJaAeGrxOwva3uYRLXfPY=", + "requires": { + "tar": "^4.1.1" + } + }, "almost-equal": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/almost-equal/-/almost-equal-1.1.0.tgz", @@ -3043,31 +3051,77 @@ "integrity": "sha1-/vF92Erx3NKlYz/UbTsa3LCEvzs=" }, "autoprefixer": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.6.1.tgz", - "integrity": "sha512-aVo5WxR3VyvyJxcJC3h4FKfwCQvQWb1tSI5VHNibddCVWrcD1NvlxEweg3TSgiPztMnWfjpy2FURKA2kvDE+Tw==", + "version": "9.6.4", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.6.4.tgz", + "integrity": "sha512-Koz2cJU9dKOxG8P1f8uVaBntOv9lP4yz9ffWvWaicv9gHBPhpQB22nGijwd8gqW9CNT+UdkbQOQNLVI8jN1ZfQ==", "dev": true, "requires": { - "browserslist": "^4.6.3", - "caniuse-lite": "^1.0.30000980", + "browserslist": "^4.7.0", + "caniuse-lite": "^1.0.30000998", "chalk": "^2.4.2", "normalize-range": "^0.1.2", "num2fraction": "^1.2.2", - "postcss": "^7.0.17", - "postcss-value-parser": "^4.0.0" + "postcss": "^7.0.18", + "postcss-value-parser": "^4.0.2" }, "dependencies": { + "browserslist": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.7.0.tgz", + "integrity": "sha512-9rGNDtnj+HaahxiVV38Gn8n8Lr8REKsel68v1sPFfIGEK6uSXTY3h9acgiT1dZVtOOUtifo/Dn8daDQ5dUgVsA==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30000989", + "electron-to-chromium": "^1.3.247", + "node-releases": "^1.1.29" + } + }, "caniuse-lite": { - "version": "1.0.30000984", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000984.tgz", - "integrity": "sha512-n5tKOjMaZ1fksIpQbjERuqCyfgec/m9pferkFQbLmWtqLUdmt12hNhjSwsmPdqeiG2NkITOQhr1VYIwWSAceiA==", + "version": "1.0.30000999", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000999.tgz", + "integrity": "sha512-1CUyKyecPeksKwXZvYw0tEoaMCo/RwBlXmEtN5vVnabvO0KPd9RQLcaAuR9/1F+KDMv6esmOFWlsXuzDk+8rxg==", "dev": true }, + "electron-to-chromium": { + "version": "1.3.277", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.277.tgz", + "integrity": "sha512-Czmsrgng89DOgJlIknnw9bn5431QdtnUwGp5YYiPwU1DbZQUxCLF+rc1ZC09VNAdalOPcvH6AE8BaA0H5HjI/w==", + "dev": true + }, + "node-releases": { + "version": "1.1.34", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.34.tgz", + "integrity": "sha512-fNn12JTEfniTuCqo0r9jXgl44+KxRH/huV7zM/KAGOKxDKrHr6EbT7SSs4B+DNxyBE2mks28AD+Jw6PkfY5uwA==", + "dev": true, + "requires": { + "semver": "^6.3.0" + } + }, + "postcss": { + "version": "7.0.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.18.tgz", + "integrity": "sha512-/7g1QXXgegpF+9GJj4iN7ChGF40sYuGYJ8WZu8DZWnmhQ/G36hfdk3q9LBJmoK+lZ+yzZ5KYpOoxq7LF1BxE8g==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, "postcss-value-parser": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.0.0.tgz", - "integrity": "sha512-ESPktioptiSUchCKgggAkzdmkgzKfmp0EU8jXH+5kbIUB+unr0Y4CY9SRMvibuvYUBjNh1ACLbxqYNpdTQOteQ==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.0.2.tgz", + "integrity": "sha512-LmeoohTpp/K4UiyQCwuGWlONxXamGzCMtFxLq4W1nZVGIQLYvMCJx3yAF9qyyuFpflABI9yVdtJAqbihOsCsJQ==", "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } } } }, @@ -5205,9 +5259,9 @@ "integrity": "sha1-K4hTT8G5mGdPh3+Yug2LW3Q+lv4=" }, "bootstrap-vue": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/bootstrap-vue/-/bootstrap-vue-2.0.2.tgz", - "integrity": "sha512-hbGJjc/om9JfVNUFK76dnh+YutlZdZlKbpWw6OE9gHTkmbwstP/KxxELpZZgK/4SYtdxUPt/6W1CvdaeT1bNvQ==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/bootstrap-vue/-/bootstrap-vue-2.0.3.tgz", + "integrity": "sha512-foI+NRs54lmjpneuwgXrmoOVDg8419ai9IwZNQq29Mnfmfui66UKS89GJnA4RjXJPjFbrIgjnjniaeqF/GOWBQ==", "requires": { "@nuxt/opencollective": "^0.3.0", "bootstrap": ">=4.3.1 <5.0.0", @@ -10455,11 +10509,11 @@ } }, "fs-minipass": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.6.tgz", - "integrity": "sha512-crhvyXcMejjv3Z5d2Fa9sf5xLYVCF5O1c71QxbVnbLsmYMBEvDAftewesN/HhY03YRoA7zOMxjNGrF5svGaaeQ==", + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", + "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", "requires": { - "minipass": "^2.2.1" + "minipass": "^2.6.0" } }, "fs-write-stream-atomic": { @@ -14579,9 +14633,9 @@ } }, "yallist": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", - "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==" + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" } } }, @@ -15372,27 +15426,27 @@ "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" }, "minipass": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.6.0.tgz", - "integrity": "sha512-OuNZ0OHrrI+jswzmgivYBZ+fAAGHZA4293d5q0z631/I9QSw3yumKB92njxHIHiB1eAdGRsE+3CcOPkoEyV5FQ==", + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", + "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", "requires": { "safe-buffer": "^5.1.2", "yallist": "^3.0.0" }, "dependencies": { "yallist": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", - "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==" + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" } } }, "minizlib": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.2.2.tgz", - "integrity": "sha512-hR3At21uSrsjjDTWrbu0IMLTpnkpv8IIMFDFaoz43Tmu4LkmAXfH44vNNzpTnf+OAQQCHrb91y/wc2J4x5XgSQ==", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz", + "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", "requires": { - "minipass": "^2.2.1" + "minipass": "^2.9.0" } }, "mississippi": { @@ -15814,9 +15868,9 @@ } }, "node-forge": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.8.2.tgz", - "integrity": "sha512-mXQ9GBq1N3uDCyV1pdSzgIguwgtVpM7f5/5J4ipz12PKWElmPpVWLDuWl8iXmhysr21+WmX/OJ5UKx82wjomgg==", + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.9.0.tgz", + "integrity": "sha512-7ASaDa3pD+lJ3WvXFsxekJQelBKRpne+GOVbLbtHYdd7pFspyeuJHnWfLplGf3SwKGbfs/aYl5V/JCIaHVUKKQ==", "dev": true }, "node-libs-browser": { @@ -16002,9 +16056,9 @@ "integrity": "sha1-RWNg5g7Odfvve11+FgSA5//Rb+U=" }, "normalize-url": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.3.0.tgz", - "integrity": "sha512-0NLtR71o4k6GLP+mr6Ty34c5GA6CMoEsncKJxvQd8NzPxaHRJNnb5gZE8R1XF4CPIS7QPHLJ74IFszwtNVAHVQ==" + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.0.tgz", + "integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==" }, "normals": { "version": "1.1.0", @@ -16025,14 +16079,14 @@ "integrity": "sha512-8/JCaftHwbd//k6y2rEWp6k1wxVfpFzB6t1p825+cUb7Ym2XQfhwIC5KwhrvzZRJu+LtDE585zVaS32+CGtf0g==" }, "npm-check-updates": { - "version": "3.1.23", - "resolved": "https://registry.npmjs.org/npm-check-updates/-/npm-check-updates-3.1.23.tgz", - "integrity": "sha512-Z2dkMdNgue6OPkQDPcAK62Qrwv+G1PaEmKrDrrSAiSP7pRD3u30xOVy1nLukS1XrJ2/zF8XTVxFe9/ubcvlcPQ==", + "version": "3.1.24", + "resolved": "https://registry.npmjs.org/npm-check-updates/-/npm-check-updates-3.1.24.tgz", + "integrity": "sha512-8CxlXsSPo8RCAHHqycxU9gcDcSkoBI0I2bkh37HJry2VJhqGxeVnEVq8vtFcigzIRrUgbSOyKgSm+jvu3ookMw==", "requires": { "chalk": "^2.4.2", "cint": "^8.2.1", "cli-table": "^0.3.1", - "commander": "^3.0.1", + "commander": "^3.0.2", "fast-diff": "^1.2.0", "find-up": "4.1.0", "get-stdin": "^7.0.0", @@ -16052,9 +16106,9 @@ }, "dependencies": { "commander": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-3.0.1.tgz", - "integrity": "sha512-UNgvDd+csKdc9GD4zjtkHKQbT8Aspt2jCBqNSPp53vAS0L1tS9sXB2TCEOPHJ7kt9bN/niWkYj8T3RQSoMXdSQ==" + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/commander/-/commander-3.0.2.tgz", + "integrity": "sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow==" }, "find-up": { "version": "4.1.0", @@ -16138,9 +16192,9 @@ } }, "npm-registry-fetch": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-4.0.1.tgz", - "integrity": "sha512-1ZQ+yjnxc698R5h9Yje9CASapzAZr7aYDkJDdERg9xg2hOEY0vRJwskOaJAXq8N/eLavzvW4g564YAfq6zMn/A==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-4.0.2.tgz", + "integrity": "sha512-Z0IFtPEozNdeZRPh3aHHxdG+ZRpzcbQaJLthsm3VhNf6DScicTFRHZzK82u8RsJUsUHkX+QH/zcB/5pmd20H4A==", "requires": { "JSONStream": "^1.3.4", "bluebird": "^3.5.1", @@ -16165,9 +16219,9 @@ "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==" }, "yallist": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", - "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==" + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" } } }, @@ -16832,9 +16886,9 @@ } }, "chownr": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.2.tgz", - "integrity": "sha512-GkfeAQh+QNy3wquu9oIZr6SS5x7wGdSgNQvD10X3r+AZr1Oys22HW8kAmDMvNg2+Dm0TeGaEuO8gFwdBXxwO8A==" + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.3.tgz", + "integrity": "sha512-i70fVHhmV3DtTl6nqvZOnIjbY0Pe4kAUjwHj8z0zAdgBtYrJyYwLKCCuRBQ5ppkyL0AkN7HKRnETdmdp1zqNXw==" }, "lru-cache": { "version": "5.1.1", @@ -16858,9 +16912,9 @@ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" }, "yallist": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", - "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==" + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" } } }, @@ -18683,9 +18737,9 @@ } }, "json5": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.0.tgz", - "integrity": "sha512-8Mh9h6xViijj36g7Dxi+Y4S6hNGV96vcJZr/SrlHh1LR/pEn/8j/+qIBbs44YKl69Lrfctp4QD+AdWLTMqEZAQ==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.1.tgz", + "integrity": "sha512-l+3HXD0GEI3huGq1njuqtzYK8OYJyXMkOLtQ53pjWh89tvWS2h6l+1zMkYWqlb57+SiQodKZyvMEFb2X+KrFhQ==", "requires": { "minimist": "^1.2.0" } @@ -18703,9 +18757,9 @@ } }, "react": { - "version": "16.10.1", - "resolved": "https://registry.npmjs.org/react/-/react-16.10.1.tgz", - "integrity": "sha512-2bisHwMhxQ3XQz4LiJJwG3360pY965pTl/MRrZYxIBKVj4fOHoDs5aZAkYXGxDRO1Li+SyjTAilQEbOmtQJHzA==", + "version": "16.10.2", + "resolved": "https://registry.npmjs.org/react/-/react-16.10.2.tgz", + "integrity": "sha512-MFVIq0DpIhrHFyqLU0S3+4dIcBhhOvBE8bJ/5kHPVOVaGdo0KuiQzpcjCPsf585WvhypqtrMILyoE2th6dT+Lw==", "requires": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1", @@ -18713,20 +18767,20 @@ } }, "react-dom": { - "version": "16.10.1", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.10.1.tgz", - "integrity": "sha512-SmM4ZW0uug0rn95U8uqr52I7UdNf6wdGLeXDmNLfg3y5q5H9eAbdjF5ubQc3bjDyRrvdAB2IKG7X0GzSpnn5Mg==", + "version": "16.10.2", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.10.2.tgz", + "integrity": "sha512-kWGDcH3ItJK4+6Pl9DZB16BXYAZyrYQItU4OMy0jAkv5aNqc+mAKb4TpFtAteI6TJZu+9ZlNhaeNQSVQDHJzkw==", "requires": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1", "prop-types": "^15.6.2", - "scheduler": "^0.16.1" + "scheduler": "^0.16.2" } }, "react-is": { - "version": "16.10.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.10.1.tgz", - "integrity": "sha512-BXUMf9sIOPXXZWqr7+c5SeOKJykyVr2u0UDzEf4LNGc6taGkQe1A9DFD07umCIXz45RLr9oAAwZbAJ0Pkknfaw==" + "version": "16.10.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.10.2.tgz", + "integrity": "sha512-INBT1QEgtcCCgvccr5/86CfD71fw9EPmDxgiJX4I2Ddr6ZsV6iFXsuby+qWJPtmNuMY0zByTsG4468P7nHuNWA==" }, "read-cache": { "version": "1.0.0", @@ -19709,9 +19763,9 @@ "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" }, "scheduler": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.16.1.tgz", - "integrity": "sha512-MIuie7SgsqMYOdCXVFZa8SKoNorJZUWHW8dPgto7uEHn1lX3fg2Gu0TzgK8USj76uxV7vB5eRMnZs/cdEHg+cg==", + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.16.2.tgz", + "integrity": "sha512-BqYVWqwz6s1wZMhjFvLfVR5WXP7ZY32M/wYPo04CcuPM7XZEbV2TBNW7Z0UkguPTl0dWMA59VbNXxK6q+pHItg==", "requires": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1" @@ -19759,12 +19813,12 @@ "dev": true }, "selfsigned": { - "version": "1.10.6", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.6.tgz", - "integrity": "sha512-i3+CeqxL7DpAazgVpAGdKMwHuL63B5nhJMh9NQ7xmChGkA3jNFflq6Jyo1LLJYcr3idWiNOPWHCrm4zMayLG4w==", + "version": "1.10.7", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.7.tgz", + "integrity": "sha512-8M3wBCzeWIJnQfl43IKwOmC4H/RAp50S8DF60znzjW5GVqTcSe2vWclt7hmYVPkKPlHWOu5EaWOMZ2Y6W8ZXTA==", "dev": true, "requires": { - "node-forge": "0.8.2" + "node-forge": "0.9.0" } }, "semver": { @@ -20582,14 +20636,20 @@ "integrity": "sha512-to7oADIniaYwS3MhtCa/sQhrxidCCQiF/qp4/m5iN3ipf0Y7Xlri0f6eG29r08aL7JYl8n32AF3Q5GYBZ7K8vw==", "dev": true }, - "stardust": { - "version": "0.52.5", - "resolved": "https://registry.npmjs.org/stardust/-/stardust-0.52.5.tgz", - "integrity": "sha1-ilnEKnLLVRor61806kqBr92cpDM=", + "stardust-allofw": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/stardust-allofw/-/stardust-allofw-0.1.1.tgz", + "integrity": "sha512-93pnjWtMQx6OT+FmULpEYkJGPJOF5beW4AYrdrAaPnU7ktP4UbzMySbQ0otrUjrO91TT8IWxyyVJg9XHYrd+iw==", "requires": { - "classnames": "^2.1.5", - "debug": "^2.2.0", - "lodash": "^4.6.1" + "allofw": "0.1.0", + "stardust-core": "^0.1.0" + }, + "dependencies": { + "stardust-core": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/stardust-core/-/stardust-core-0.1.1.tgz", + "integrity": "sha1-6gtcxBKrgpnfcf7NrmcN9K5WhPA=" + } } }, "stardust-core": { @@ -21226,13 +21286,13 @@ } }, "tar": { - "version": "4.4.10", - "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.10.tgz", - "integrity": "sha512-g2SVs5QIxvo6OLp0GudTqEf05maawKUxXru104iaayWA09551tFCTI8f1Asb4lPfkBr91k07iL4c11XO3/b0tA==", + "version": "4.4.13", + "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.13.tgz", + "integrity": "sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA==", "requires": { "chownr": "^1.1.1", "fs-minipass": "^1.2.5", - "minipass": "^2.3.5", + "minipass": "^2.8.6", "minizlib": "^1.2.1", "mkdirp": "^0.5.0", "safe-buffer": "^5.1.2", @@ -21240,9 +21300,9 @@ }, "dependencies": { "yallist": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", - "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==" + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" } } }, @@ -22467,16 +22527,22 @@ } }, "url-loader": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-2.1.0.tgz", - "integrity": "sha512-kVrp/8VfEm5fUt+fl2E0FQyrpmOYgMEkBsv8+UDP1wFhszECq5JyGF33I7cajlVY90zRZ6MyfgKXngLvHYZX8A==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-2.2.0.tgz", + "integrity": "sha512-G8nk3np8ZAnwhHXas1JxJEwJyQdqFXAKJehfgZ/XrC48volFBRtO+FIKtF2u0Ma3bw+4vnDVjHPAQYlF9p2vsw==", "dev": true, "requires": { "loader-utils": "^1.2.3", "mime": "^2.4.4", - "schema-utils": "^2.0.0" + "schema-utils": "^2.4.1" }, "dependencies": { + "ajv-keywords": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.1.tgz", + "integrity": "sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ==", + "dev": true + }, "mime": { "version": "2.4.4", "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.4.tgz", @@ -22484,13 +22550,13 @@ "dev": true }, "schema-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.0.1.tgz", - "integrity": "sha512-HJFKJ4JixDpRur06QHwi8uu2kZbng318ahWEKgBjc0ZklcE4FDvmm2wghb448q0IRaABxIESt8vqPFvwgMB80A==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.4.1.tgz", + "integrity": "sha512-RqYLpkPZX5Oc3fw/kHHHyP56fg5Y+XBpIpV8nCg0znIALfq3OH+Ea9Hfeac9BAMwG5IICltiZ0vxFvJQONfA5w==", "dev": true, "requires": { - "ajv": "^6.1.0", - "ajv-keywords": "^3.1.0" + "ajv": "^6.10.2", + "ajv-keywords": "^3.4.1" } } } @@ -24038,9 +24104,9 @@ } }, "webpack-dev-middleware": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.1.tgz", - "integrity": "sha512-5MWu9SH1z3hY7oHOV6Kbkz5x7hXbxK56mGHNqHTe6d+ewxOwKUxoUJBs7QIaJb33lPjl9bJZ3X0vCoooUzC36A==", + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.2.tgz", + "integrity": "sha512-1xC42LxbYoqLNAhV6YzTYacicgMZQTqRd27Sim9wn5hJrX3I5nxYy1SxSd4+gjUFsz1dQFj+yEe6zEVmSkeJjw==", "dev": true, "requires": { "memory-fs": "^0.4.1", @@ -24059,9 +24125,9 @@ } }, "webpack-dev-server": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.8.1.tgz", - "integrity": "sha512-9F5DnfFA9bsrhpUCAfQic/AXBVHvq+3gQS+x6Zj0yc1fVVE0erKh2MV4IV12TBewuTrYeeTIRwCH9qLMvdNvTw==", + "version": "3.8.2", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.8.2.tgz", + "integrity": "sha512-0xxogS7n5jHDQWy0WST0q6Ykp7UGj4YvWh+HVN71JoE7BwPxMZrwgraBvmdEMbDVMBzF0u+mEzn8TQzBm5NYJQ==", "dev": true, "requires": { "ansi-html": "0.0.7", @@ -24073,18 +24139,18 @@ "del": "^4.1.1", "express": "^4.17.1", "html-entities": "^1.2.1", - "http-proxy-middleware": "^0.19.1", + "http-proxy-middleware": "0.19.1", "import-local": "^2.0.0", "internal-ip": "^4.3.0", "ip": "^1.1.5", - "is-absolute-url": "^3.0.2", + "is-absolute-url": "^3.0.3", "killable": "^1.0.1", "loglevel": "^1.6.4", "opn": "^5.5.0", "p-retry": "^3.0.1", "portfinder": "^1.0.24", "schema-utils": "^1.0.0", - "selfsigned": "^1.10.6", + "selfsigned": "^1.10.7", "semver": "^6.3.0", "serve-index": "^1.9.1", "sockjs": "0.3.19", @@ -24093,7 +24159,7 @@ "strip-ansi": "^3.0.1", "supports-color": "^6.1.0", "url": "^0.11.0", - "webpack-dev-middleware": "^3.7.1", + "webpack-dev-middleware": "^3.7.2", "webpack-log": "^2.0.0", "ws": "^6.2.1", "yargs": "12.0.5" @@ -24129,9 +24195,9 @@ } }, "is-absolute-url": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.2.tgz", - "integrity": "sha512-+5g/wLlcm1AcxSP7014m6GvbPHswDx980vD/3bZaap8aGV9Yfs7Q6y6tfaupgZ5O74Byzc8dGrSCJ+bFXx0KdA==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz", + "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==", "dev": true }, "ms": { diff --git a/frontend/package.json b/frontend/package.json index 0672619c1..d57d7cd80 100755 --- a/frontend/package.json +++ b/frontend/package.json @@ -19,7 +19,7 @@ "@fortawesome/vue-fontawesome": "^0.1.7", "@statnett/vue-plotly": "^0.3.2", "@types/d3-drag": "^1.2.3", - "@types/node": "^12.7.9", + "@types/node": "^12.7.11", "ajv": "^6.10.2", "audit": "0.0.6", "axios": "^0.19.0", @@ -28,7 +28,7 @@ "blob": "0.0.5", "bootstrap": "^4.3.1", "bootstrap-toggle": "^2.2.2", - "bootstrap-vue": "^2.0.2", + "bootstrap-vue": "^2.0.3", "circlepack-chart": "^1.3.0", "clean-webpack-plugin": "^3.0.0", "colorbrewer": "^1.3.0", @@ -50,14 +50,14 @@ "jquery": "^3.4.1", "mdbvue": "^5.8.3", "mini-css-extract-plugin": "^0.8.0", - "npm-check-updates": "^3.1.23", + "npm-check-updates": "^3.1.24", "papaparse": "^5.1.0", "parcoord-es": "^2.2.10", "plotly.js": "^1.49.5", "popper.js": "^1.15.0", - "react": "^16.10.1", - "react-dom": "^16.10.1", - "stardust": "^0.52.5", + "react": "^16.10.2", + "react-dom": "^16.10.2", + "stardust-allofw": "^0.1.1", "stardust-core": "^0.2.4", "stardust-webgl": "^0.2.4", "strip-loader": "^0.1.2", @@ -88,7 +88,7 @@ "@babel/plugin-syntax-jsx": "^7.2.0", "@babel/plugin-transform-runtime": "^7.6.2", "@babel/preset-env": "^7.6.2", - "autoprefixer": "^9.6.1", + "autoprefixer": "^9.6.4", "babel-eslint": "^10.0.3", "babel-helper-vue-jsx-merge-props": "^2.0.3", "babel-loader": "^8.0.6", @@ -122,7 +122,7 @@ "semver": "^6.3.0", "shelljs": "^0.8.3", "uglifyjs-webpack-plugin": "^2.2.0", - "url-loader": "^2.1.0", + "url-loader": "^2.2.0", "vue-class-component": "^7.1.0", "vue-cli-plugin-vuetify": "^0.6.3", "vue-loader": "^15.7.1", @@ -133,7 +133,7 @@ "vuetify-loader": "^1.3.0", "webpack": "^4.41.0", "webpack-bundle-analyzer": "^3.5.2", - "webpack-dev-server": "^3.8.1", + "webpack-dev-server": "^3.8.2", "webpack-merge": "^4.2.2" }, "browserslist": [ diff --git a/frontend/src/components/AlgorithmHyperParam.vue b/frontend/src/components/AlgorithmHyperParam.vue index a089f0e13..498fc168c 100644 --- a/frontend/src/components/AlgorithmHyperParam.vue +++ b/frontend/src/components/AlgorithmHyperParam.vue @@ -31,10 +31,10 @@ export default { var Combined = 0 if (this.selAlgorithm == 'KNN') { - Combined = JSON.parse(this.ModelsPerformance[0]) + Combined = JSON.parse(this.ModelsPerformance[1]) colorGiv = colors[0] } else { - Combined = JSON.parse(this.ModelsPerformance[2]) + Combined = JSON.parse(this.ModelsPerformance[7]) colorGiv = colors[1] } var valuesPerf = Object.values(Combined['0']) diff --git a/frontend/src/components/Algorithms.vue b/frontend/src/components/Algorithms.vue index bcce5b4dd..e2f34b456 100644 --- a/frontend/src/components/Algorithms.vue +++ b/frontend/src/components/Algorithms.vue @@ -1,7 +1,7 @@ - - \ No newline at end of file + \ No newline at end of file diff --git a/frontend/src/components/BarChart.vue b/frontend/src/components/BarChart.vue index 55d0ebb2a..a840d17f0 100644 --- a/frontend/src/components/BarChart.vue +++ b/frontend/src/components/BarChart.vue @@ -16,99 +16,101 @@ export default { return { PerformanceResults: '', ClassNamesOverview: '', - PerformanceResultsSel: [] + algorithmsinBar: [], + modelsSelectedinBar: [], + KNNModels: 576, //KNN models + WH: [] } }, methods: { BarChartView () { + const PerClassMetrics = JSON.parse(this.PerformanceResults[2]) + const PerClassMetrics2 = JSON.parse(this.PerformanceResults[8]) - const PerClassMetrics = JSON.parse(this.PerformanceResults[1]) - const PerClassMetrics2 = JSON.parse(this.PerformanceResults[3]) - var UpdateFeatures = 0 - UpdateFeatures = JSON.parse(this.PerformanceResultsSel[0]) - var UpdateFeatures2 = 0 - UpdateFeatures2 = JSON.parse(this.PerformanceResultsSel[1]) + var KNNModels = [] + var RFModels = [] + for (let i=0; i f1ScorePerClass[j][a] ? 1 : 0 }) - f1ScorePerClass[j].sort((function(a, b){return b-a})) - f1ScoreData = [ - { - x: indices.map(String), - y: f1ScorePerClass[j], - type: 'bar', - marker: { - color: 'rgb(158,202,225)', - opacity: 0.6, - line: { - color: 'rgb(8,48,107)', - width: 1.5 - } - } - } - ]*/ - + var traces = [] + var tracesSel = [] + var data = [] var colors = ['#a6cee3','#1f78b4','#b2df8a','#33a02c','#fb9a99','#e31a1c','#fdbf6f','#ff7f00','#cab2d6','#6a3d9a'] - - var trace1 = { - x: ['KNN', 'RF'], - y: [sum[0],sum[1]], - name: target_names[0], - opacity: 0.5, - marker: { - opacity: 0.5, - color: colors[0] - }, - type: 'bar' - }; - - var trace2 = { - x: ['KNN', 'RF'], - y: [sum[2],sum[3]], - name: target_names[1], - opacity: 0.5, - marker: { - opacity: 0.5, - color: colors[1] - }, - type: 'bar' - }; - - var trace3 = { - x: ['KNN', 'RF'], - y: [sum[4],sum[5]], - name: target_names[2], - opacity: 0.5, - marker: { - opacity: 0.5, - color: colors[2] - }, - type: 'bar' - }; - - var trace4 = { - type: 'bar', - x: ['KNN', 'RF'], - y: [sumLine[0],sumLine[1]], - name: target_names[0]+' (Sel)', - xaxis: 'x2', - mode: 'markers', - marker: { - opacity: 1.0, - color: colors[0], - }, - width: [0.1, 0.1] - }; - - var trace5 = { - type: 'bar', - x: ['KNN', 'RF'], - y: [sumLine[2],sumLine[3]], - name: target_names[1]+' (Sel)', - xaxis: 'x2', - mode: 'markers', - marker: { - opacity: 1.0, - color: colors[1], - }, - width: [0.1, 0.1] - }; - - var trace6 = { - type: 'bar', - x: ['KNN', 'RF'], - y: [sumLine[4],sumLine[5]], - name: target_names[2]+' (Sel)', - xaxis: 'x2', - mode: 'markers', - marker: { - opacity: 1.0, - color: colors[2], - }, - width: [0.1, 0.1] - }; - - var data = [trace1, trace4, trace2, trace5, trace3, trace6]; - + for (var i = 0; i < target_names.length; i++) { + traces[i] = { + x: ['KNN', 'RF'], + y: [sum[i+i],sum[i+i+1]], + name: target_names[i], + opacity: 0.5, + marker: { + opacity: 0.5, + color: colors[i] + }, + type: 'bar' + }; + tracesSel[i] = { + type: 'bar', + x: ['KNN', 'RF'], + y: [sumLine[i+i],sumLine[i+i+1]], + name: target_names[i]+' (Sel)', + xaxis: 'x2', + mode: 'markers', + marker: { + opacity: 1.0, + color: colors[i], + }, + width: [0.1, 0.1] + }; + data.push(traces[i]) + data.push(tracesSel[i]) + } Plotly.newPlot('barChart', data, layout) }, reset () @@ -253,15 +173,18 @@ export default { } }, mounted() { - this.PerformanceResultsSel[0] = 0 - this.PerformanceResultsSel[1] = 0 - EventBus.$on('emittedEventCallingBarChartUpdatedFeatures', data => { this.PerformanceResultsSel = data }) - EventBus.$on('emittedEventCallingBarChartUpdatedFeatures', this.BarChartView) + EventBus.$on('updateBarChartAlgorithm', data => { this.algorithmsinBar = data }) + EventBus.$on('updateBarChart', data => { this.modelsSelectedinBar = data }) + EventBus.$on('updateBarChart', this.BarChartView) EventBus.$on('emittedEventCallingBarChart', data => { this.PerformanceResults = data }) EventBus.$on('emittedEventCallingBarChart', this.BarChartView) EventBus.$on('emittedEventCallingUpdateBarChart', data => { this.ModelsChosen = data }) EventBus.$on('emittedEventCallingUpdateBarChart', this.BarChartView) EventBus.$on('resetViews', this.reset) + EventBus.$on('Responsive', data => { + this.WH = data}) + EventBus.$on('ResponsiveandChange', data => { + this.WH = data}) } } \ No newline at end of file diff --git a/frontend/src/components/Controller.vue b/frontend/src/components/Controller.vue index fcc20b92e..b7da63c44 100644 --- a/frontend/src/components/Controller.vue +++ b/frontend/src/components/Controller.vue @@ -17,7 +17,6 @@ export default { name: 'Controller', data () { return { - value: 'Add to Stack', valueExecute: 'Execute Stacking Ensemble' } }, diff --git a/frontend/src/components/FinalResultsLinePlot.vue b/frontend/src/components/FinalResultsLinePlot.vue index 0428e5994..bf604256f 100644 --- a/frontend/src/components/FinalResultsLinePlot.vue +++ b/frontend/src/components/FinalResultsLinePlot.vue @@ -46,7 +46,7 @@ export default { text: text, line: {color: "rgb(0,100,80)"}, mode: "lines+markers", - name: "Accuracy", + name: "Current Accuracy", type: "scatter" } @@ -58,7 +58,7 @@ export default { fill: "tozerox", fillcolor: "rgba(0,100,80,0.2)", line: {color: "transparent"}, - name: "Accuracy", + name: "Current Accuracy", showlegend: false, type: "scatter" } diff --git a/frontend/src/components/Main.vue b/frontend/src/components/Main.vue index c5501d684..0fe8d6d61 100755 --- a/frontend/src/components/Main.vue +++ b/frontend/src/components/Main.vue @@ -75,9 +75,11 @@ + + @@ -197,15 +199,13 @@ export default Vue.extend({ toggle2: 1, toggle3: 1, modelsUpdate: [], - parametersUpdate: [], - AlgorithmsUpdate: [] + AlgorithmsUpdate: [], } }, methods: { selectVisualRepresentation () { const representationSelectionDocum = document.getElementById('selectBarChart') this.representationSelection = representationSelectionDocum.options[representationSelectionDocum.selectedIndex].value - console.log(this.representationSelection) EventBus.$emit('RepresentationSelection', this.representationSelection) }, getCollection () { @@ -251,6 +251,7 @@ export default Vue.extend({ this.OverviewResults = response.data.OverviewResults console.log('Server successfully sent all the data related to visualizations!') EventBus.$emit('emittedEventCallingScatterPlot', this.OverviewResults) + EventBus.$emit('InitializeProvenance', this.OverviewResults) EventBus.$emit('InitializeMetricsBarChart', this.OverviewResults) this.valueSel = 0 this.valueAll = 0 @@ -264,6 +265,7 @@ export default Vue.extend({ EventBus.$emit('emittedEventCallingTableView', this.OverviewResults) EventBus.$emit('emittedEventCallingDataSpacePlotView', this.OverviewResults) EventBus.$emit('emittedEventCallingPredictionsSpacePlotView', this.OverviewResults) + EventBus.$emit('emittedEventCallingBalanceView', this.OverviewResults) this.getFinalResults() }) .catch(error => { @@ -295,27 +297,6 @@ export default Vue.extend({ console.log(error) }) }, - UpdateModelsFeaturePerformance () { - const path = `http://localhost:5000/data/UpdatePerFeaturePerformance` - - const axiosConfig = { - headers: { - 'Content-Type': 'application/json', - 'Access-Control-Allow-Origin': '*', - 'Access-Control-Allow-Headers': 'Origin, Content-Type, X-Auth-Token', - 'Access-Control-Allow-Methods': 'GET, PUT, POST, DELETE, OPTIONS' - } - } - axios.get(path, axiosConfig) - .then(response => { - this.PerformanceCheck = response.data.PerformanceCheck - console.log('Server successfully sent all the performance data related to models!') - EventBus.$emit('emittedEventCallingBarChartUpdatedFeatures', this.PerformanceCheck) - }) - .catch(error => { - console.log(error) - }) - }, SendSelectedPointsToServer () { if (this.ClassifierIDsList === ''){ this.OverSelLength = 0 @@ -342,6 +323,7 @@ export default Vue.extend({ EventBus.$emit('emittedEventCallingTableView', this.OverviewResults) EventBus.$emit('emittedEventCallingDataSpacePlotView', this.OverviewResults) EventBus.$emit('emittedEventCallingPredictionsSpacePlotView', this.OverviewResults) + EventBus.$emit('emittedEventCallingBalanceView', this.OverviewResults) this.getFinalResults() }) .catch(error => { @@ -376,7 +358,6 @@ export default Vue.extend({ const path = `http://127.0.0.1:5000/data/ServerRequest` const postData = { fileName: this.RetrieveValueFile, - featureSelection: this.SelectedFeaturesPerClassifier } const axiosConfig = { headers: { @@ -421,7 +402,7 @@ export default Vue.extend({ EventBus.$emit('emittedEventCallingModelBrushed') const path = `http://127.0.0.1:5000/data/SendBrushedParam` const postData = { - parameters: this.parametersofModels, + models: this.modelsUpdate, algorithms: this.selectedAlgorithms } const axiosConfig = { @@ -448,7 +429,7 @@ export default Vue.extend({ UpdateBarChartFeatures () { const path = `http://127.0.0.1:5000/data/FeaturesScoresUpdate` const postData = { - parameters: this.parametersUpdate, + models: this.modelsUpdate, algorithms: this.AlgorithmsUpdate } const axiosConfig = { @@ -612,9 +593,8 @@ export default Vue.extend({ $(window).on("unload", function(e) { alert('Handler for .unload() called.'); }) - EventBus.$on('ReturningAlgorithmsBar', data => { this.AlgorithmsUpdate = data }) - EventBus.$on('ReturningBrushedPointsParamsBar', data => { this.parametersUpdate = data }) - EventBus.$on('ReturningBrushedPointsParamsBar', this.UpdateBarChartFeatures ) + EventBus.$on('ReturningBrushedPointsIDs', data => { this.modelsUpdate = data }) + //EventBus.$on('ReturningBrushedPointsIDs', this.UpdateBarChartFeatures ) EventBus.$on('ConfirmDataSet', this.fileNameSend) EventBus.$on('reset', this.Reset) EventBus.$on('UploadedFile', this.Reset) diff --git a/frontend/src/components/PerMetricBarChart.vue b/frontend/src/components/PerMetricBarChart.vue index 9d74c70c8..516c27279 100644 --- a/frontend/src/components/PerMetricBarChart.vue +++ b/frontend/src/components/PerMetricBarChart.vue @@ -17,7 +17,6 @@ export default { LineBar () { var metricsPerModel = JSON.parse(this.barchartmetrics[9]) var vh = 80 - /*if (this.representationDefault === 'bar'){ var type = 'bar'; } else if (this.representationDefault === 'line'){ @@ -73,7 +72,7 @@ export default { x: ['Acc','F1s','Pre','Rec','Jac'], y: metricsPerModel, name: 'Projection average', - type: type, + type: 'bar', marker: { color: 'rgb(0,0,0)' } @@ -82,7 +81,7 @@ export default { x: ['Acc','F1s','Pre','Rec','Jac'], y: metricsPerModel, name: 'Selected points', - type: type, + type: 'bar', marker: { color: 'rgb(0, 187, 187)' } diff --git a/frontend/src/components/Provenance.vue b/frontend/src/components/Provenance.vue index 69292fa01..d47903fda 100644 --- a/frontend/src/components/Provenance.vue +++ b/frontend/src/components/Provenance.vue @@ -2,39 +2,98 @@
-
\ No newline at end of file diff --git a/frontend/src/components/ScatterPlot.vue b/frontend/src/components/ScatterPlot.vue index e482a80a5..778dee112 100644 --- a/frontend/src/components/ScatterPlot.vue +++ b/frontend/src/components/ScatterPlot.vue @@ -1,5 +1,21 @@