aboutsummaryrefslogtreecommitdiff
path: root/frontend
diff options
context:
space:
mode:
Diffstat (limited to 'frontend')
-rw-r--r--frontend/package-lock.json167
-rw-r--r--frontend/src/app/_data/Model.ts37
-rw-r--r--frontend/src/app/_elements/annvisual/annvisual.component.ts46
-rw-r--r--frontend/src/app/_elements/carousel/carousel.component.html5
-rw-r--r--frontend/src/app/_elements/carousel/carousel.component.ts1
-rw-r--r--frontend/src/app/_elements/item-dataset/item-dataset.component.html3
-rw-r--r--frontend/src/app/_elements/notifications/notifications.component.html2
-rw-r--r--frontend/src/app/_elements/notifications/notifications.component.ts2
-rw-r--r--frontend/src/app/_pages/add-model/add-model.component.html329
-rw-r--r--frontend/src/app/_pages/add-model/add-model.component.ts66
-rw-r--r--frontend/src/app/_pages/home/home.component.html4
-rw-r--r--frontend/src/app/_pages/home/home.component.ts8
-rw-r--r--frontend/src/styles.css2
13 files changed, 342 insertions, 330 deletions
diff --git a/frontend/package-lock.json b/frontend/package-lock.json
index b5ca9d02..962905b7 100644
--- a/frontend/package-lock.json
+++ b/frontend/package-lock.json
@@ -450,7 +450,6 @@
"version": "13.2.5",
"resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-13.2.5.tgz",
"integrity": "sha512-Xd8xj2Z0ilA4TJAM/JkTtA1CAa6SuebFsEEvabHCRO5MDvtdsIUP91ADUZIqDHy7qe6Qift/rAVN2PXxT2aaNA==",
- "dev": true,
"dependencies": {
"@babel/core": "^7.17.2",
"chokidar": "^3.0.0",
@@ -480,7 +479,6 @@
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.1.2.tgz",
"integrity": "sha512-hoyByceqwKirw7w3Z7gnIIZC3Wx3J484Y3L/cMpXFbr7d9ZQj2mODrirNzcJa+SM3UlpWXYvKV4RlRpFXlWgXg==",
- "dev": true,
"dependencies": {
"@jridgewell/trace-mapping": "^0.3.0"
},
@@ -492,7 +490,6 @@
"version": "7.17.5",
"resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.5.tgz",
"integrity": "sha512-/BBMw4EvjmyquN5O+t5eh0+YqB3XXJkYD2cjKpYtWOfFy4lQ4UozNSmxAcWT8r2XtZs0ewG+zrfsqeR15i1ajA==",
- "dev": true,
"dependencies": {
"@ampproject/remapping": "^2.1.0",
"@babel/code-frame": "^7.16.7",
@@ -522,7 +519,6 @@
"version": "6.3.0",
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
"integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
- "dev": true,
"bin": {
"semver": "bin/semver.js"
}
@@ -531,7 +527,6 @@
"version": "7.17.3",
"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.3.tgz",
"integrity": "sha512-+R6Dctil/MgUsZsZAkYgK+ADNSZzJRRy0TvY65T71z/CR854xHQ1EweBYXdfT+HNeN7w0cSJJEzgxZMv40pxsg==",
- "dev": true,
"dependencies": {
"@babel/types": "^7.17.0",
"jsesc": "^2.5.1",
@@ -545,7 +540,6 @@
"version": "0.5.7",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
"integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
- "dev": true,
"engines": {
"node": ">=0.10.0"
}
@@ -785,7 +779,6 @@
"version": "7.16.12",
"resolved": "https://registry.npmjs.org/@babel/core/-/core-7.16.12.tgz",
"integrity": "sha512-dK5PtG1uiN2ikk++5OzSYsitZKny4wOCD0nrO4TqnW4BVBTQ2NGS3NgilvT/TEyxTST7LNyWV/T4tXDoD3fOgg==",
- "dev": true,
"dependencies": {
"@babel/code-frame": "^7.16.7",
"@babel/generator": "^7.16.8",
@@ -815,7 +808,6 @@
"version": "6.3.0",
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
"integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
- "dev": true,
"bin": {
"semver": "bin/semver.js"
}
@@ -824,7 +816,6 @@
"version": "0.5.7",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
"integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
- "dev": true,
"engines": {
"node": ">=0.10.0"
}
@@ -833,7 +824,6 @@
"version": "7.16.8",
"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.16.8.tgz",
"integrity": "sha512-1ojZwE9+lOXzcWdWmO6TbUzDfqLD39CmEhN8+2cX9XkDo5yW1OpgfejfliysR2AWLpMamTiOiAp/mtroaymhpw==",
- "dev": true,
"dependencies": {
"@babel/types": "^7.16.8",
"jsesc": "^2.5.1",
@@ -847,7 +837,6 @@
"version": "0.5.7",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
"integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
- "dev": true,
"engines": {
"node": ">=0.10.0"
}
@@ -3331,7 +3320,6 @@
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz",
"integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==",
- "dev": true,
"dependencies": {
"normalize-path": "^3.0.0",
"picomatch": "^2.0.4"
@@ -3605,7 +3593,6 @@
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
"integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
- "dev": true,
"engines": {
"node": ">=8"
}
@@ -3702,7 +3689,6 @@
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
"integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
- "dev": true,
"dependencies": {
"fill-range": "^7.0.1"
},
@@ -3880,7 +3866,6 @@
"version": "3.5.3",
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
"integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
- "dev": true,
"funding": [
{
"type": "individual",
@@ -4899,7 +4884,6 @@
"version": "0.11.0",
"resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.11.0.tgz",
"integrity": "sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==",
- "dev": true,
"engines": {
"node": ">= 0.6.0"
}
@@ -5848,7 +5832,6 @@
"version": "7.0.1",
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
"integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
- "dev": true,
"dependencies": {
"to-regex-range": "^5.0.1"
},
@@ -6017,7 +6000,6 @@
"version": "2.3.2",
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
"integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
- "dev": true,
"hasInstallScript": true,
"optional": true,
"os": [
@@ -6127,7 +6109,6 @@
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
"integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
- "dev": true,
"dependencies": {
"is-glob": "^4.0.1"
},
@@ -6720,7 +6701,6 @@
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
"integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
- "dev": true,
"dependencies": {
"binary-extensions": "^2.0.0"
},
@@ -6774,7 +6754,6 @@
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
"integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
- "dev": true,
"engines": {
"node": ">=0.10.0"
}
@@ -6791,7 +6770,6 @@
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
"integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
- "dev": true,
"dependencies": {
"is-extglob": "^2.1.1"
},
@@ -6818,7 +6796,6 @@
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
"integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
- "dev": true,
"engines": {
"node": ">=0.12.0"
}
@@ -7679,7 +7656,6 @@
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
"integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
- "dev": true,
"dependencies": {
"yallist": "^4.0.0"
},
@@ -7691,7 +7667,6 @@
"version": "0.25.7",
"resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz",
"integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==",
- "dev": true,
"dependencies": {
"sourcemap-codec": "^1.4.4"
}
@@ -8314,7 +8289,6 @@
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
"integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
- "dev": true,
"engines": {
"node": ">=0.10.0"
}
@@ -9002,7 +8976,6 @@
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
"integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
- "dev": true,
"engines": {
"node": ">=8.6"
},
@@ -9798,7 +9771,6 @@
"version": "3.6.0",
"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
"integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
- "dev": true,
"dependencies": {
"picomatch": "^2.2.1"
},
@@ -9809,8 +9781,7 @@
"node_modules/reflect-metadata": {
"version": "0.1.13",
"resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz",
- "integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==",
- "dev": true
+ "integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg=="
},
"node_modules/regenerate": {
"version": "1.4.2",
@@ -10231,7 +10202,6 @@
"version": "7.3.5",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
"integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==",
- "dev": true,
"dependencies": {
"lru-cache": "^6.0.0"
},
@@ -10616,8 +10586,7 @@
"node_modules/sourcemap-codec": {
"version": "1.4.8",
"resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz",
- "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==",
- "dev": true
+ "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA=="
},
"node_modules/spdy": {
"version": "4.0.2",
@@ -11018,7 +10987,6 @@
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
"integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
- "dev": true,
"dependencies": {
"is-number": "^7.0.0"
},
@@ -11084,7 +11052,6 @@
"version": "4.5.5",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.5.tgz",
"integrity": "sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA==",
- "dev": true,
"bin": {
"tsc": "bin/tsc",
"tsserver": "bin/tsserver"
@@ -11701,8 +11668,7 @@
"node_modules/yallist": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
- "dev": true
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
},
"node_modules/yaml": {
"version": "1.10.2",
@@ -12037,7 +12003,6 @@
"version": "13.2.5",
"resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-13.2.5.tgz",
"integrity": "sha512-Xd8xj2Z0ilA4TJAM/JkTtA1CAa6SuebFsEEvabHCRO5MDvtdsIUP91ADUZIqDHy7qe6Qift/rAVN2PXxT2aaNA==",
- "dev": true,
"requires": {
"@babel/core": "^7.17.2",
"chokidar": "^3.0.0",
@@ -12055,7 +12020,6 @@
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.1.2.tgz",
"integrity": "sha512-hoyByceqwKirw7w3Z7gnIIZC3Wx3J484Y3L/cMpXFbr7d9ZQj2mODrirNzcJa+SM3UlpWXYvKV4RlRpFXlWgXg==",
- "dev": true,
"requires": {
"@jridgewell/trace-mapping": "^0.3.0"
}
@@ -12064,7 +12028,6 @@
"version": "7.17.5",
"resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.5.tgz",
"integrity": "sha512-/BBMw4EvjmyquN5O+t5eh0+YqB3XXJkYD2cjKpYtWOfFy4lQ4UozNSmxAcWT8r2XtZs0ewG+zrfsqeR15i1ajA==",
- "dev": true,
"requires": {
"@ampproject/remapping": "^2.1.0",
"@babel/code-frame": "^7.16.7",
@@ -12086,8 +12049,7 @@
"semver": {
"version": "6.3.0",
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
- "dev": true
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw=="
}
}
},
@@ -12095,7 +12057,6 @@
"version": "7.17.3",
"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.3.tgz",
"integrity": "sha512-+R6Dctil/MgUsZsZAkYgK+ADNSZzJRRy0TvY65T71z/CR854xHQ1EweBYXdfT+HNeN7w0cSJJEzgxZMv40pxsg==",
- "dev": true,
"requires": {
"@babel/types": "^7.17.0",
"jsesc": "^2.5.1",
@@ -12105,8 +12066,7 @@
"source-map": {
"version": "0.5.7",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
- "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
- "dev": true
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
}
}
},
@@ -12251,7 +12211,6 @@
"version": "7.16.12",
"resolved": "https://registry.npmjs.org/@babel/core/-/core-7.16.12.tgz",
"integrity": "sha512-dK5PtG1uiN2ikk++5OzSYsitZKny4wOCD0nrO4TqnW4BVBTQ2NGS3NgilvT/TEyxTST7LNyWV/T4tXDoD3fOgg==",
- "dev": true,
"requires": {
"@babel/code-frame": "^7.16.7",
"@babel/generator": "^7.16.8",
@@ -12273,14 +12232,12 @@
"semver": {
"version": "6.3.0",
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
- "dev": true
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw=="
},
"source-map": {
"version": "0.5.7",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
- "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
- "dev": true
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
}
}
},
@@ -12288,7 +12245,6 @@
"version": "7.16.8",
"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.16.8.tgz",
"integrity": "sha512-1ojZwE9+lOXzcWdWmO6TbUzDfqLD39CmEhN8+2cX9XkDo5yW1OpgfejfliysR2AWLpMamTiOiAp/mtroaymhpw==",
- "dev": true,
"requires": {
"@babel/types": "^7.16.8",
"jsesc": "^2.5.1",
@@ -12298,8 +12254,7 @@
"source-map": {
"version": "0.5.7",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
- "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
- "dev": true
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
}
}
},
@@ -13457,7 +13412,8 @@
"version": "13.2.5",
"resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-13.2.5.tgz",
"integrity": "sha512-obiPvwPe+UJUO8cfNbBxukLKG30F+gLF5/erexwklRknJzS4KP8ciH2on6XlTuXUahpDjbO0pffugFE2I/IszQ==",
- "dev": true
+ "dev": true,
+ "requires": {}
},
"@nodelib/fs.scandir": {
"version": "2.1.5",
@@ -14049,7 +14005,8 @@
"version": "1.8.0",
"resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz",
"integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==",
- "dev": true
+ "dev": true,
+ "requires": {}
},
"adjust-sourcemap-loader": {
"version": "4.0.0",
@@ -14172,7 +14129,6 @@
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz",
"integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==",
- "dev": true,
"requires": {
"normalize-path": "^3.0.0",
"picomatch": "^2.0.4"
@@ -14370,8 +14326,7 @@
"binary-extensions": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
- "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
- "dev": true
+ "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA=="
},
"bl": {
"version": "4.1.0",
@@ -14442,7 +14397,8 @@
"bootstrap": {
"version": "5.1.3",
"resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.1.3.tgz",
- "integrity": "sha512-fcQztozJ8jToQWXxVuEyXWW+dSo8AiXWKwiSSrKWsRB/Qt+Ewwza+JWoLKiTuQLaEPhdNAJ7+Dosc9DOIqNy7Q=="
+ "integrity": "sha512-fcQztozJ8jToQWXxVuEyXWW+dSo8AiXWKwiSSrKWsRB/Qt+Ewwza+JWoLKiTuQLaEPhdNAJ7+Dosc9DOIqNy7Q==",
+ "requires": {}
},
"brace-expansion": {
"version": "1.1.11",
@@ -14457,7 +14413,6 @@
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
"integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
- "dev": true,
"requires": {
"fill-range": "^7.0.1"
}
@@ -14586,7 +14541,6 @@
"version": "3.5.3",
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
"integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
- "dev": true,
"requires": {
"anymatch": "~3.1.2",
"braces": "~3.0.2",
@@ -14614,7 +14568,8 @@
"version": "5.2.2",
"resolved": "https://registry.npmjs.org/circular-dependency-plugin/-/circular-dependency-plugin-5.2.2.tgz",
"integrity": "sha512-g38K9Cm5WRwlaH6g03B9OEz/0qRizI+2I7n+Gz+L5DxXJAPAiWQvwlYNm1V1jkdpUv95bOe/ASm2vfi/G560jQ==",
- "dev": true
+ "dev": true,
+ "requires": {}
},
"clean-stack": {
"version": "2.2.0",
@@ -15092,7 +15047,8 @@
"version": "6.0.3",
"resolved": "https://registry.npmjs.org/css-prefers-color-scheme/-/css-prefers-color-scheme-6.0.3.tgz",
"integrity": "sha512-4BqMbZksRkJQx2zAjrokiGMd07RqOa2IxIrrN10lyBe9xhn9DEvjUK79J6jkeiv9D9hQFXKb6g1jwU62jziJZA==",
- "dev": true
+ "dev": true,
+ "requires": {}
},
"css-select": {
"version": "4.2.1",
@@ -15358,8 +15314,7 @@
"dependency-graph": {
"version": "0.11.0",
"resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.11.0.tgz",
- "integrity": "sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==",
- "dev": true
+ "integrity": "sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg=="
},
"destroy": {
"version": "1.0.4",
@@ -16007,7 +15962,6 @@
"version": "7.0.1",
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
"integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
- "dev": true,
"requires": {
"to-regex-range": "^5.0.1"
}
@@ -16130,7 +16084,6 @@
"version": "2.3.2",
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
"integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
- "dev": true,
"optional": true
},
"function-bind": {
@@ -16206,7 +16159,6 @@
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
"integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
- "dev": true,
"requires": {
"is-glob": "^4.0.1"
}
@@ -16463,7 +16415,8 @@
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz",
"integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==",
- "dev": true
+ "dev": true,
+ "requires": {}
},
"ieee754": {
"version": "1.2.1",
@@ -16660,7 +16613,6 @@
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
"integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
- "dev": true,
"requires": {
"binary-extensions": "^2.0.0"
}
@@ -16692,8 +16644,7 @@
"is-extglob": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
- "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
- "dev": true
+ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI="
},
"is-fullwidth-code-point": {
"version": "3.0.0",
@@ -16704,7 +16655,6 @@
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
"integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
- "dev": true,
"requires": {
"is-extglob": "^2.1.1"
}
@@ -16724,8 +16674,7 @@
"is-number": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
- "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
- "dev": true
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="
},
"is-path-cwd": {
"version": "2.2.0",
@@ -17144,7 +17093,8 @@
"version": "1.7.0",
"resolved": "https://registry.npmjs.org/karma-jasmine-html-reporter/-/karma-jasmine-html-reporter-1.7.0.tgz",
"integrity": "sha512-pzum1TL7j90DTE86eFt48/s12hqwQuiD+e5aXx2Dc9wDEn2LfGq6RoAxEZZjFiN0RDSCOnosEKRZWxbQ+iMpQQ==",
- "dev": true
+ "dev": true,
+ "requires": {}
},
"karma-source-map-support": {
"version": "1.4.0",
@@ -17366,7 +17316,6 @@
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
"integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
- "dev": true,
"requires": {
"yallist": "^4.0.0"
}
@@ -17375,7 +17324,6 @@
"version": "0.25.7",
"resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz",
"integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==",
- "dev": true,
"requires": {
"sourcemap-codec": "^1.4.4"
}
@@ -17843,8 +17791,7 @@
"normalize-path": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
- "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
- "dev": true
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="
},
"normalize-range": {
"version": "0.1.2",
@@ -18369,8 +18316,7 @@
"picomatch": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
- "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
- "dev": true
+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="
},
"pify": {
"version": "2.3.0",
@@ -18481,7 +18427,8 @@
"version": "8.0.0",
"resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-8.0.0.tgz",
"integrity": "sha512-FvO2GzMUaTN0t1fBULDeIvxr5IvbDXcIatt6pnJghc736nqNgsGao5NT+5+WVLAQiTt6Cb3YUms0jiPaXhL//g==",
- "dev": true
+ "dev": true,
+ "requires": {}
},
"postcss-custom-properties": {
"version": "12.1.4",
@@ -18551,13 +18498,15 @@
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-5.0.0.tgz",
"integrity": "sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA==",
- "dev": true
+ "dev": true,
+ "requires": {}
},
"postcss-gap-properties": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-3.0.3.tgz",
"integrity": "sha512-rPPZRLPmEKgLk/KlXMqRaNkYTUpE7YC+bOIQFN5xcu1Vp11Y4faIXv6/Jpft6FMnl6YRxZqDZG0qQOW80stzxQ==",
- "dev": true
+ "dev": true,
+ "requires": {}
},
"postcss-image-set-function": {
"version": "4.0.6",
@@ -18583,7 +18532,8 @@
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/postcss-initial/-/postcss-initial-4.0.1.tgz",
"integrity": "sha512-0ueD7rPqX8Pn1xJIjay0AZeIuDoF+V+VvMt/uOnn+4ezUKhZM/NokDeP6DwMNyIoYByuN/94IQnt5FEkaN59xQ==",
- "dev": true
+ "dev": true,
+ "requires": {}
},
"postcss-lab-function": {
"version": "4.1.1",
@@ -18610,19 +18560,22 @@
"version": "5.0.4",
"resolved": "https://registry.npmjs.org/postcss-logical/-/postcss-logical-5.0.4.tgz",
"integrity": "sha512-RHXxplCeLh9VjinvMrZONq7im4wjWGlRJAqmAVLXyZaXwfDWP73/oq4NdIp+OZwhQUMj0zjqDfM5Fj7qby+B4g==",
- "dev": true
+ "dev": true,
+ "requires": {}
},
"postcss-media-minmax": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/postcss-media-minmax/-/postcss-media-minmax-5.0.0.tgz",
"integrity": "sha512-yDUvFf9QdFZTuCUg0g0uNSHVlJ5X1lSzDZjPSFaiCWvjgsvu8vEVxtahPrLMinIDEEGnx6cBe6iqdx5YWz08wQ==",
- "dev": true
+ "dev": true,
+ "requires": {}
},
"postcss-modules-extract-imports": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz",
"integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==",
- "dev": true
+ "dev": true,
+ "requires": {}
},
"postcss-modules-local-by-default": {
"version": "4.0.0",
@@ -18666,13 +18619,15 @@
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/postcss-overflow-shorthand/-/postcss-overflow-shorthand-3.0.3.tgz",
"integrity": "sha512-CxZwoWup9KXzQeeIxtgOciQ00tDtnylYIlJBBODqkgS/PU2jISuWOL/mYLHmZb9ZhZiCaNKsCRiLp22dZUtNsg==",
- "dev": true
+ "dev": true,
+ "requires": {}
},
"postcss-page-break": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/postcss-page-break/-/postcss-page-break-3.0.4.tgz",
"integrity": "sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ==",
- "dev": true
+ "dev": true,
+ "requires": {}
},
"postcss-place": {
"version": "7.0.4",
@@ -18737,7 +18692,8 @@
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-4.0.0.tgz",
"integrity": "sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw==",
- "dev": true
+ "dev": true,
+ "requires": {}
},
"postcss-selector-not": {
"version": "5.0.0",
@@ -18902,7 +18858,6 @@
"version": "3.6.0",
"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
"integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
- "dev": true,
"requires": {
"picomatch": "^2.2.1"
}
@@ -18910,8 +18865,7 @@
"reflect-metadata": {
"version": "0.1.13",
"resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz",
- "integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==",
- "dev": true
+ "integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg=="
},
"regenerate": {
"version": "1.4.2",
@@ -19187,7 +19141,8 @@
"version": "3.5.2",
"resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
"integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
- "dev": true
+ "dev": true,
+ "requires": {}
},
"json-schema-traverse": {
"version": "0.4.1",
@@ -19216,7 +19171,6 @@
"version": "7.3.5",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
"integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==",
- "dev": true,
"requires": {
"lru-cache": "^6.0.0"
}
@@ -19532,8 +19486,7 @@
"sourcemap-codec": {
"version": "1.4.8",
"resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz",
- "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==",
- "dev": true
+ "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA=="
},
"spdy": {
"version": "4.0.2",
@@ -19741,7 +19694,8 @@
"version": "3.5.2",
"resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
"integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
- "dev": true
+ "dev": true,
+ "requires": {}
},
"json-schema-traverse": {
"version": "0.4.1",
@@ -19815,7 +19769,6 @@
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
"integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
- "dev": true,
"requires": {
"is-number": "^7.0.0"
}
@@ -19862,8 +19815,7 @@
"typescript": {
"version": "4.5.5",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.5.tgz",
- "integrity": "sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA==",
- "dev": true
+ "integrity": "sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA=="
},
"ua-parser-js": {
"version": "0.7.31",
@@ -20058,7 +20010,8 @@
"version": "3.5.2",
"resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
"integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
- "dev": true
+ "dev": true,
+ "requires": {}
},
"json-schema-traverse": {
"version": "0.4.1",
@@ -20285,7 +20238,8 @@
"version": "8.2.3",
"resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz",
"integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==",
- "dev": true
+ "dev": true,
+ "requires": {}
},
"y18n": {
"version": "5.0.8",
@@ -20295,8 +20249,7 @@
"yallist": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
- "dev": true
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
},
"yaml": {
"version": "1.10.2",
diff --git a/frontend/src/app/_data/Model.ts b/frontend/src/app/_data/Model.ts
index 1a16d960..58bc3d4f 100644
--- a/frontend/src/app/_data/Model.ts
+++ b/frontend/src/app/_data/Model.ts
@@ -46,7 +46,7 @@ export enum ProblemType {
// removeOutliers
export enum Encoding {
Label = 'label',
- OneHot = 'one hot',
+ OneHot = 'onehot',
/*
BackwardDifference = 'backward difference',
BaseN = 'baseN',
@@ -77,14 +77,14 @@ export enum ActivationFunction {
Exponential_Linear_Unit = 'exponentialLinearUnit',
Swish = 'swish',
//hiddenLayers
- Relu='relu',
- Sigmoid='sigmoid',
- Tanh='tanh',
+ Relu = 'relu',
+ Sigmoid = 'sigmoid',
+ Tanh = 'tanh',
//outputLayer
Linear = 'linear',
//Sigmoid='sigmoid',
- Softmax='softmax',
+ Softmax = 'softmax',
}
/*
@@ -104,37 +104,34 @@ export enum ActivationFunctionOutputLayer
export enum LossFunction {
// binary classification loss functions
BinaryCrossEntropy = 'binary_crossentropy',
- SquaredHingeLoss='squared_hinge_loss',
+ SquaredHingeLoss = 'squared_hinge_loss',
HingeLoss = 'hinge_loss',
// multi-class classiication loss functions
CategoricalCrossEntropy = 'categorical_crossentropy',
- SparseCategoricalCrossEntropy='sparse_categorical_crosentropy',
+ SparseCategoricalCrossEntropy = 'sparse_categorical_crosentropy',
KLDivergence = 'kullback_leibler_divergence',
-
+
// regression loss functions
-
+
MeanAbsoluteError = 'mean_absolute_error',
MeanSquaredError = 'mean_squared_error',
- MeanSquaredLogarithmicError='mean_squared_logarithmic_error',
+ MeanSquaredLogarithmicError = 'mean_squared_logarithmic_error',
HuberLoss = 'Huber'
}
-export enum LossFunctionRegression
-{
+export enum LossFunctionRegression {
MeanAbsoluteError = 'mean_absolute_error',
MeanSquaredError = 'mean_squared_error',
- MeanSquaredLogarithmicError='mean_squared_logarithmic_error',
+ MeanSquaredLogarithmicError = 'mean_squared_logarithmic_error',
}
-export enum LossFunctionBinaryClassification
-{
+export enum LossFunctionBinaryClassification {
BinaryCrossEntropy = 'binary_crossentropy',
- SquaredHingeLoss='squared_hinge_loss',
+ SquaredHingeLoss = 'squared_hinge_loss',
HingeLoss = 'hinge_loss',
}
-export enum LossFunctionMultiClassification
-{
+export enum LossFunctionMultiClassification {
CategoricalCrossEntropy = 'categorical_crossentropy',
- SparseCategoricalCrossEntropy='sparse_categorical_crosentropy',
+ SparseCategoricalCrossEntropy = 'sparse_categorical_crosentropy',
KLDivergence = 'kullback_leibler_divergence',
}
@@ -164,7 +161,7 @@ export enum ReplaceWith {
export class NullValReplacer {
"column": string;
"option": NullValueOptions;
- "value" : string;
+ "value": string;
}
export enum Metrics {
diff --git a/frontend/src/app/_elements/annvisual/annvisual.component.ts b/frontend/src/app/_elements/annvisual/annvisual.component.ts
index 8588537e..53e4e2ca 100644
--- a/frontend/src/app/_elements/annvisual/annvisual.component.ts
+++ b/frontend/src/app/_elements/annvisual/annvisual.component.ts
@@ -1,6 +1,6 @@
-import { Component, OnInit,Input } from '@angular/core';
+import { Component, OnInit, Input } from '@angular/core';
import Model from 'src/app/_data/Model';
-import { graphviz } from 'd3-graphviz';
+import { graphviz } from 'd3-graphviz';
@Component({
selector: 'app-annvisual',
@@ -9,41 +9,37 @@ import { graphviz } from 'd3-graphviz';
})
export class AnnvisualComponent implements OnInit {
ngOnInit(): void {
- throw new Error('Method not implemented.');
}
@Input() model: Model = new Model();
- d3(){
- let inputlayerstring:string='';
- let hiddenlayerstring:string='';
- let digraphstring:string='digraph {';
+ d3() {
+ let inputlayerstring: string = '';
+ let hiddenlayerstring: string = '';
+ let digraphstring: string = 'digraph {';
- for(let i=0;i<this.model.inputColumns.length;i++)
- {
- inputlayerstring=inputlayerstring+'i'+i+',';
+ for (let i = 0; i < this.model.inputColumns.length; i++) {
+ inputlayerstring = inputlayerstring + 'i' + i + ',';
}
- inputlayerstring=inputlayerstring.slice(0,-1);
+ inputlayerstring = inputlayerstring.slice(0, -1);
- digraphstring=digraphstring+inputlayerstring+'->';
+ digraphstring = digraphstring + inputlayerstring + '->';
- for(let j=0;j<this.model.hiddenLayers;j++)
- {
- for(let i=0;i<this.model.hiddenLayerNeurons;i++)
- {
- hiddenlayerstring=hiddenlayerstring+'h'+j+'_'+i+',';
+ for (let j = 0; j < this.model.hiddenLayers; j++) {
+ for (let i = 0; i < this.model.hiddenLayerNeurons; i++) {
+ hiddenlayerstring = hiddenlayerstring + 'h' + j + '_' + i + ',';
}
- hiddenlayerstring=hiddenlayerstring.slice(0,-1);
- digraphstring=digraphstring+hiddenlayerstring+'->';
- hiddenlayerstring='';
+ hiddenlayerstring = hiddenlayerstring.slice(0, -1);
+ digraphstring = digraphstring + hiddenlayerstring + '->';
+ hiddenlayerstring = '';
}
- digraphstring=digraphstring+'o}';
-
-
+ digraphstring = digraphstring + 'o}';
+
+
graphviz('#graph').renderDot(digraphstring);
- }
+ }
- //'digraph {i0,i1,i2->h1,h2,h3->h21,h22,h23->o}'
+ //'digraph {i0,i1,i2->h1,h2,h3->h21,h22,h23->o}'
}
diff --git a/frontend/src/app/_elements/carousel/carousel.component.html b/frontend/src/app/_elements/carousel/carousel.component.html
index 755899a7..eb1041ce 100644
--- a/frontend/src/app/_elements/carousel/carousel.component.html
+++ b/frontend/src/app/_elements/carousel/carousel.component.html
@@ -1,6 +1,9 @@
<div class="container">
<div class="row d-flex align-items-stretch flex-row mx-5 align-items-stretch">
- <div class="col my-1" *ngFor=" let item of items" [ngSwitch]="item.constructor.name">
+ <div class="col my-1" *ngFor="let item of items" [ngSwitch]="type">
+ <ng-template ngSwitchCase="Object">
+ Unknown item type
+ </ng-template>
<ng-template ngSwitchCase="Dataset">
<app-item-dataset [dataset]="item">
</app-item-dataset>
diff --git a/frontend/src/app/_elements/carousel/carousel.component.ts b/frontend/src/app/_elements/carousel/carousel.component.ts
index ed4fa4a5..e0112121 100644
--- a/frontend/src/app/_elements/carousel/carousel.component.ts
+++ b/frontend/src/app/_elements/carousel/carousel.component.ts
@@ -8,6 +8,7 @@ import { Component, Input, OnInit } from '@angular/core';
export class CarouselComponent {
@Input() items: any[] = [];
+ @Input() type: string = "Object";
constructor() { }
diff --git a/frontend/src/app/_elements/item-dataset/item-dataset.component.html b/frontend/src/app/_elements/item-dataset/item-dataset.component.html
index 8751fce5..dc4221f4 100644
--- a/frontend/src/app/_elements/item-dataset/item-dataset.component.html
+++ b/frontend/src/app/_elements/item-dataset/item-dataset.component.html
@@ -8,7 +8,8 @@
</p>
<table class="table table-bordered table-sm">
<thead>
- <th scope="col" *ngFor="let column of dataset.header">{{column}}</th> <!-- treba da se namesti da kad nema hedere, da korisnik unese nazive kolona pa da se taj heder prikaze -->
+ <th scope="col" *ngFor="let column of dataset.header">{{column}}</th>
+ <!-- treba da se namesti da kad nema hedere, da korisnik unese nazive kolona pa da se taj heder prikaze -->
</thead>
</table>
</div>
diff --git a/frontend/src/app/_elements/notifications/notifications.component.html b/frontend/src/app/_elements/notifications/notifications.component.html
index 27071425..d1da41b4 100644
--- a/frontend/src/app/_elements/notifications/notifications.component.html
+++ b/frontend/src/app/_elements/notifications/notifications.component.html
@@ -1,3 +1,3 @@
-<div class="position-fixed card card-body bg-dark text-white m-3" style="bottom: 0; right: 0;">
+<div *ngIf="notifications" class="position-fixed card card-body bg-dark text-white m-3" style="bottom: 0; right: 0;">
<h3>Notifikacije</h3>
</div> \ No newline at end of file
diff --git a/frontend/src/app/_elements/notifications/notifications.component.ts b/frontend/src/app/_elements/notifications/notifications.component.ts
index 7566828d..6c1d555b 100644
--- a/frontend/src/app/_elements/notifications/notifications.component.ts
+++ b/frontend/src/app/_elements/notifications/notifications.component.ts
@@ -8,6 +8,8 @@ import { WebSocketService } from 'src/app/_services/web-socket.service';
})
export class NotificationsComponent implements OnInit {
+ notifications?: any[];
+
constructor(private wsService: WebSocketService) { }
ngOnInit(): void {
diff --git a/frontend/src/app/_pages/add-model/add-model.component.html b/frontend/src/app/_pages/add-model/add-model.component.html
index 5e8372c9..97b35b7a 100644
--- a/frontend/src/app/_pages/add-model/add-model.component.html
+++ b/frontend/src/app/_pages/add-model/add-model.component.html
@@ -41,7 +41,8 @@
</button>
</div>
<div class="px-5 my-2">
- <input *ngIf="showMyDatasets" type="text" class="form-control" placeholder="Pretraga" [(ngModel)]="term">
+ <input *ngIf="showMyDatasets" type="text" class="form-control" placeholder="Pretraga"
+ [(ngModel)]="term">
</div>
<div class="px-5">
<div *ngIf="showMyDatasets" class="overflow-auto" style="max-height: 500px;">
@@ -65,7 +66,9 @@
<!-- ULAZNE/IZLAZNE KOLONE -->
<span id="selectInAndOuts"></span>
- <div *ngIf="selectedDataset && ((showMyDatasets && selectedDatasetLoaded) || (!showMyDatasets && datasetLoaded))"> <!--postignuto da se kod newdataseta ucita tabela pa ulazi/izlazi. ostalo srediti to kod mydatasets(dopuna 2. uslova)-->
+ <div
+ *ngIf="selectedDataset && ((showMyDatasets && selectedDatasetLoaded) || (!showMyDatasets && datasetLoaded))">
+ <!--postignuto da se kod newdataseta ucita tabela pa ulazi/izlazi. ostalo srediti to kod mydatasets(dopuna 2. uslova)-->
<div class="row">
<div class="col d-flex justify-content-center">
<h3>Izaberite ulazne kolone:</h3>
@@ -120,52 +123,99 @@
<div id="columnReplacers">
<!--Ulazne kolone - popunjavanje null vrednosti -->
<div *ngFor="let column of selectedDataset.header; let i = index" class="my-3">
- <div class="input-group row" *ngIf="getInputById('cb_'+column).checked">
- <span class="input-group-text col-2 text-center">
- {{column}}&nbsp;<span class="small" style="color:gray;">({{calculateSumOfNullValuesInCol(column)}} null)</span>
+ <div *ngIf="getInputById('cb_'+column).checked" class="">
+ <span class="w-20 mx-3">
+ {{column}}&nbsp;<span class="small"
+ style="color:gray;">({{calculateSumOfNullValuesInCol(column)}}
+ null)</span>
</span>
- <label *ngIf="calculateSumOfNullValuesInCol(column)==0" class="form-control col-10">Ova kolona nema nedostajućih vrednosti.</label>
-
- <input *ngIf="calculateSumOfNullValuesInCol(column)!=0" type="radio" [id]="'fillCol_'+column" class="col-1 mt-2"
- [name]="'delOp_'+column"> <!--OVDE SREDI IZGLED-->
- <select [id]="'replaceOptions'+i" class="form-control col-2"
- *ngIf="isNumber(datasetFile[1][i]) && calculateSumOfNullValuesInCol(column)!=0" (change)="replaceWithSelectedNumber($event);">
- <option
- *ngFor="let option of Object.keys(ReplaceWith); let optionName of Object.values(ReplaceWith)"
- [value]="option">
- {{ optionName }}
- </option>
- </select>
- <select [id]="'replaceOptions'+i" class="form-control col-2"
- *ngIf="!isNumber(datasetFile[1][i]) && calculateSumOfNullValuesInCol(column)!=0" (change)="replaceWithSelectedString($event);">
- <option *ngFor="let option of arrayColumn(datasetFile, i)"
- [value]="option">
- {{ option }}
- </option>
- </select>
- <input *ngIf="calculateSumOfNullValuesInCol(column)!=0" type="text" class="form-control col-1" [id]="'fillText_'+column"
- (keyup)="checkFillColRadio(column)" placeholder="Unesi vrednost...">
- <label *ngIf="calculateSumOfNullValuesInCol(column)!=0" class="form-control" [for]="'delCol_'+column">Izbriši kolonu
- <input *ngIf="calculateSumOfNullValuesInCol(column)!=0" type="radio" [id]="'delCol_'+column"
- [name]="'delOp_'+column" (change)="emptyFillTextInput(column)"></label>
- <label *ngIf="calculateSumOfNullValuesInCol(column)!=0" class="form-control col-2" [for]="'delRows_'+column">Izbriši redove
- <input *ngIf="calculateSumOfNullValuesInCol(column)!=0" type="radio" [id]="'delRows_'+column" [name]="'delOp_'+column"
- checked (change)="emptyFillTextInput(column)"></label>
+ <label *ngIf="calculateSumOfNullValuesInCol(column)==0"
+ class="text-center form-control mx-3 text-secondary">Ova kolona nema
+ nedostajućih
+ vrednosti.</label>
+
+ <div *ngIf="calculateSumOfNullValuesInCol(column)!=0"
+ class="d-flex flex-row justify-content-end">
+ <div class="flex-grow-3 mx-3 me-auto">
+ <div class="input-group">
+ <div class="input-group-prepend">
+ <label [for]="'fillCol_'+column" class="form-control">
+ Zameni
+ <input type="radio" [id]="'fillCol_'+column"
+ [name]="'delOp_'+column">
+ </label>
+ </div>
+ <input type="text" class="form-control"
+ [id]="'fillText_'+column"
+ (keyup)="checkFillColRadio(column)"
+ placeholder="Unesi vrednost...">
+
+ <div class="input-group-append">
+ <select [id]="'replaceOptions'+i"
+ class="form-control btn-primary"
+ *ngIf="isNumber(datasetFile[1][i])"
+ (change)="replaceWithSelectedNumber($event);">
+ <option
+ *ngFor="let option of Object.keys(ReplaceWith); let optionName of Object.values(ReplaceWith)"
+ [value]="option">
+ {{ optionName }}
+ </option>
+ </select>
+ <select [id]="'replaceOptions'+i"
+ class="form-control btn-outline-primary"
+ *ngIf="!isNumber(datasetFile[1][i]) && calculateSumOfNullValuesInCol(column)!=0"
+ (change)="replaceWithSelectedString($event);">
+ <option
+ *ngFor="let option of arrayColumn(datasetFile, i)"
+ [value]="option">
+ {{ option }}
+ </option>
+ </select>
+ </div>
+ </div>
+ </div>
+
+ <div class="flex-shrink-1 mx-3">
+ <div class="input-group">
+ <label class="form-control" [for]="'delCol_'+column">Izbriši
+ kolonu
+ <input type="radio" [id]="'delCol_'+column"
+ [name]="'delOp_'+column"
+ (change)="emptyFillTextInput(column)"></label>
+ </div>
+ </div>
+
+ <div class="flex-shrink-1 mx-3">
+ <div class="input-group">
+ <label class="form-control" [for]="'delRows_'+column">Izbriši
+ redove
+ <input type="radio" [id]="'delRows_'+column"
+ [name]="'delOp_'+column" checked
+ (change)="emptyFillTextInput(column)"></label>
+ </div>
+ </div>
+ </div>
</div>
</div>
<!--Izlazna kolona - popunjavanje null vrednosti -->
- <div *ngFor="let column of selectedDataset.header; let i = index" class="my-3"> <!--moze bez for petlje (this.selectedOutputColumnVal je id), al ne moze ova fja array column onda-->
+ <div *ngFor="let column of selectedDataset.header; let i = index" class="my-3">
+ <!--moze bez for petlje (this.selectedOutputColumnVal je id), al ne moze ova fja array column onda-->
<div class="input-group row" *ngIf="getInputById('rb_'+column).checked">
<span class="input-group-text col-2 text-center">
- {{column}}&nbsp;<span class="small" style="color:gray;">({{calculateSumOfNullValuesInCol(column)}} null)</span>
+ {{column}}&nbsp;<span class="small"
+ style="color:gray;">({{calculateSumOfNullValuesInCol(column)}}
+ null)</span>
</span>
- <label *ngIf="calculateSumOfNullValuesInCol(column)==0" class="form-control">Ova kolona nema nedostajućih vrednosti.</label>
-
- <input *ngIf="calculateSumOfNullValuesInCol(column)!=0" type="radio" [id]="'fillCol_'+column" class="col-1 mt-2"
- [name]="'delOp_'+column"> <!--OVDE SREDI IZGLED-->
+ <label *ngIf="calculateSumOfNullValuesInCol(column)==0"
+ class="form-control">Ova kolona nema nedostajućih vrednosti.</label>
+
+ <input *ngIf="calculateSumOfNullValuesInCol(column)!=0" type="radio"
+ [id]="'fillCol_'+column" class="col-1 mt-2" [name]="'delOp_'+column">
+ <!--OVDE SREDI IZGLED-->
<select [id]="'replaceOptions'+i" class="form-control col-2"
- *ngIf="isNumber(datasetFile[1][i]) && calculateSumOfNullValuesInCol(column)!=0" (change)="replaceWithSelectedNumber($event);">
+ *ngIf="isNumber(datasetFile[1][i]) && calculateSumOfNullValuesInCol(column)!=0"
+ (change)="replaceWithSelectedNumber($event);">
<option
*ngFor="let option of Object.keys(ReplaceWith); let optionName of Object.values(ReplaceWith)"
[value]="option">
@@ -173,21 +223,25 @@
</option>
</select>
<select [id]="'replaceOptions'+i" class="form-control col-2"
- *ngIf="!isNumber(datasetFile[1][i]) && calculateSumOfNullValuesInCol(column)!=0" (change)="replaceWithSelectedString($event);">
+ *ngIf="!isNumber(datasetFile[1][i]) && calculateSumOfNullValuesInCol(column)!=0"
+ (change)="replaceWithSelectedString($event);">
<option *ngFor="let option of arrayColumn(datasetFile, i)"
[value]="option">
{{ option }}
</option>
</select>
- <input *ngIf="calculateSumOfNullValuesInCol(column)!=0" type="text" class="form-control col-1" [id]="'fillText_'+column"
+ <input *ngIf="calculateSumOfNullValuesInCol(column)!=0" type="text"
+ class="form-control col-1" [id]="'fillText_'+column"
(keyup)="checkFillColRadio(column)" placeholder="Unesi vrednost...">
- <label *ngIf="calculateSumOfNullValuesInCol(column)!=0" class="form-control col-2" [for]="'delCol_'+column">Izbriši kolonu
- <input type="radio" [id]="'delCol_'+column"
- [name]="'delOp_'+column" (change)="emptyFillTextInput(column)"></label>
- <label *ngIf="calculateSumOfNullValuesInCol(column)!=0" class="form-control col-2" [for]="'delRows_'+column">Izbriši redove
- <input type="radio" [id]="'delRows_'+column" [name]="'delOp_'+column" (change)="emptyFillTextInput(column)"
- checked></label>
+ <label *ngIf="calculateSumOfNullValuesInCol(column)!=0"
+ class="form-control col-2" [for]="'delCol_'+column">Izbriši kolonu
+ <input type="radio" [id]="'delCol_'+column" [name]="'delOp_'+column"
+ (change)="emptyFillTextInput(column)"></label>
+ <label *ngIf="calculateSumOfNullValuesInCol(column)!=0"
+ class="form-control col-2" [for]="'delRows_'+column">Izbriši redove
+ <input type="radio" [id]="'delRows_'+column" [name]="'delOp_'+column"
+ (change)="emptyFillTextInput(column)" checked></label>
</div>
</div>
@@ -201,7 +255,7 @@
<h2 class="mt-5 mb-4">Parametri treniranja:</h2>
-<!--**********************************************************TIP*********************************************************-->
+ <!--**********************************************************TIP*********************************************************-->
<div>
<div class="row p-2">
<div class="col-1">
@@ -210,9 +264,8 @@
<label for="type" class="col-form-label">Tip problema: </label>
</div>
<div class="col-2">
- <select id=typeOptions class="form-control" name="type" [(ngModel)]="newModel.type"
- [(ngModel)]="problemtype"
- (change)="filterOptions()">
+ <select id=typeOptions class="form-control" name="type" [(ngModel)]="newModel.type"
+ (change)="filterOptions()">
<option
*ngFor="let option of Object.keys(ProblemType); let optionName of Object.values(ProblemType)"
[value]="option">
@@ -220,7 +273,7 @@
</option>
</select>
</div>
-<!--******************************************************************************************************************-->
+ <!--******************************************************************************************************************-->
<div class="col-1">
</div>
<div class="col-3">
@@ -249,7 +302,7 @@
</option>
</select>
</div>
-
+
<!--***********************************BROJ NEURONA SKRIVENOG SLOJA*********************************************-->
<div class="col-1">
@@ -261,8 +314,8 @@
<input type="number" min="1" class="form-control" name="hiddenLayerNeurons"
[(ngModel)]="newModel.hiddenLayerNeurons">
</div>
- </div>
-<!--***********************************OPTIMIZACIJA*********************************************-->
+ </div>
+ <!--***********************************OPTIMIZACIJA*********************************************-->
<div class="row p-2">
<div class="col-1">
@@ -288,8 +341,7 @@
<input type="number" min="1" class="form-control" name="batchSize" [(ngModel)]="newModel.batchSize">
</div>
</div>
-<!--***********************************LOSS FUNCTION*********************************************-->
- <div class="row justify-content-center">
+ <div class="row p-2">
<div class="col-1">
</div>
<div class="col-3">
@@ -305,90 +357,79 @@
</option>
</select>
</div>
- <div class="col-1">
- </div>
- </div>
-<!-- ************************************************************************************************** -->
-
-<!--**********************************************METRIKE ZA KOMPAJLER I GRAFIKE***********************************************-->
-
-<hr>
- <div class="form-check form-check-inline overflow-auto " style="width: max-content;">
- <h3>Izaberite metrike:</h3>
- <div id="divMetricsinput" >
-
- <div *ngFor="let option of Object.keys(metrics); let optionName of Object.values(metrics) "class="form-check form-check-inline">
-
- <input name="cbmetrics" class="form-check-input" type="checkbox" value="{{option}}" id="metrics_{{option}}" style="float: left;">
- <label class="form-check-label" for="metrics_{{option}}" for="inlineCheckbox2">
- {{optionName}}
- </label>
- </div>
- </div>
- </div>
-<!--************************************************************************************************* -->
-
+ <div class="col-1"></div>
<div class="col-3 mt-2">
<label for="type" class="form-check-label">Nasumičan redosled podataka?</label>
<input class="mx-3 form-check-input" type="checkbox" [(ngModel)]="newModel.randomOrder"
type="checkbox" value="" checked>
</div>
- <div class="col-1">
+ </div>
+ <!--************************************************************************************************* -->
+ <div class="border m-3">
+ <div class="row p-2 m-2">
+ <div class="col-4">
+ <label for="splitYesNo" class="form-check-label">
+ <h3>Podela test skupa:&nbsp;&nbsp;
+ <input id="splitYesNo" class="form-check-input" type="checkbox"
+ [checked]="newModel.randomTestSet"
+ (change)="newModel.randomTestSet = !newModel.randomTestSet">
+ </h3>
+ </label>
+ </div>
+ <div class="col-8">
+ trening
+ <mat-slider style="width: 85%;" min="10" max="90" step="10" value="10"
+ name="randomTestSetDistribution" thumbLabel [disabled]="!newModel.randomTestSet"
+ [(ngModel)]="tempTestSetDistribution">
+ </mat-slider>
+ test
+ </div>
+ </div>
+
+ <div class="row p-2 mx-2">
+ <div class="col-4">
+ <label for="percentage" class="form-label">Procenat podataka koji se uzima za trening
+ skup:</label>
+ </div>
+ <div class="col-2">
+ <input id="percentage" type="number" class="form-control" min="10" max="90" step="10" value="90"
+ [(ngModel)]="tempTestSetDistribution" [disabled]="!newModel.randomTestSet">
+ </div>
</div>
-
+ </div>
- <div class="row p-2 justify-content-left">
- <div class="col-3"></div>
+ <!--***********************************AKTIVACIONE FUNKCIJE*********************************************-->
+ <h3>Aktivacione funkcije:</h3>
+
+ <div class="row p-2 m-2" style="align-self: center;">
<div class="col-3">
- <label for="hiddenLayerActivationFunction" class="col-form-label">Funkcija aktivacije skrivenih
+ <label for="hiddenLayerActivationFunction" class="col-form-label"
+ style="text-align: center;">Funkcija aktivacije skrivenih
slojeva:</label>
</div>
<div class="col-3">
<div *ngFor="let item of [].constructor(newModel.hiddenLayers); let i = index">
- <select [id]="'hiddenLayerActivationFunctionOption_'+i" class="form-control"
- [(ngModel)]="newModel.hiddenLayerActivationFunctions[i]">
- <option
- *ngFor="let option of Object.keys(ActivationFunction); let optionName of Object.values(ActivationFunction)"
- [value]="option">
- {{ optionName }}
- </option>
- </select>
+ <div class="input-group mb-2">
+ <div class="input-group-prepend">
+ <span class="input-group-text">#{{i+1}}</span>
+ </div>
+ <select [id]="'hiddenLayerActivationFunctionOption_'+i" class="form-control"
+ [(ngModel)]="newModel.hiddenLayerActivationFunctions[i]">
+ <option
+ *ngFor="let option of Object.keys(ActivationFunction); let optionName of Object.values(ActivationFunction)"
+ [value]="option">
+ {{ optionName }}
+ </option>
+ </select>
+ </div>
</div>
</div>
- <div class="col-3"></div>
- </div>
-
- <div class="row p-2">
- <div class="col-1">
- </div>
- <div class="col-3">
- <label for="splitYesNo" class="form-check-label">Podela test skupa:&nbsp;&nbsp;
- <input id="splitYesNo" class="form-check-input" type="checkbox"
- [checked]="newModel.randomTestSet"
- (change)="newModel.randomTestSet = !newModel.randomTestSet">
- </label>
- </div>
- <div class="col-1">
- </div>
- <div class="col-2">
- <label for="percentage" class="form-label">Procenat podataka koji se uzima za trening skup:</label>
- </div>
- <div class="col-1">
- <input id="percentage" type="number" class="form-control" min="10" max="90" step="10" value="90"
- [(ngModel)]="tempTestSetDistribution" [disabled]="!newModel.randomTestSet">
- </div>
- </div>
-
-<!--***********************************AKTIVACIONE FUNKCIJE*********************************************-->
-
- <div class="row p-2" style="align-self: center;">
- <div class="col-1">
- </div>
<div class="col-3">
- <label for="outputLayerActivationFunction" class="col-form-label" style="text-align: center;">Funkcija aktivacije izlaznog
+ <label for="outputLayerActivationFunction" class="col-form-label"
+ style="text-align: center;">Funkcija aktivacije izlaznog
sloja:</label>
</div>
- <div class="col-2">
+ <div class="col-3">
<select id=outputLayerActivationFunctionOptions class="form-control"
name="outputLayerActivationFunction" [(ngModel)]="newModel.outputLayerActivationFunction">
<option
@@ -398,24 +439,31 @@
</option>
</select>
</div>
- <div class="col-1">
- </div>
-
-
- <div class="col">
- trening
- <mat-slider min="10" max="90" step="10" value="10" name="randomTestSetDistribution" thumbLabel
- [disabled]="!newModel.randomTestSet" [(ngModel)]="tempTestSetDistribution">
- </mat-slider>
- test
- </div>
<div class="col">
</div>
</div>
</div>
-
<br><br>
+ <!--**********************************************METRIKE ZA KOMPAJLER I GRAFIKE***********************************************-->
+
+ <hr>
+ <div class="form-check form-check-inline overflow-auto " style="width: max-content;">
+ <h3>Izaberite metrike:</h3>
+ <div id="divMetricsinput">
+
+ <div *ngFor="let option of Object.keys(metrics); let optionName of Object.values(metrics) "
+ class="form-check form-check-inline">
+
+ <input name="cbmetrics" class="form-check-input" type="checkbox" value="{{option}}"
+ id="metrics_{{option}}" style="float: left;">
+ <label class="form-check-label" for="metrics_{{option}}" for="inlineCheckbox2">
+ {{optionName}}
+ </label>
+ </div>
+ </div>
+ </div>
+ <!--<app-annvisual [model]="newModel"></app-annvisual>-->
<div class="form-group row mt-5 mb-3">
<div class="col"></div>
<button class="btn btn-lg col-4" style="background-color:#003459; color:white;"
@@ -426,7 +474,14 @@
<div class="col"></div>
</div>
+ <div class="m-3" *ngIf="trainingResult">
+ <h2>Rezultati treniranja</h2>
+ <p>
+ {{trainingResult}}
+ </p>
+ </div>
</div>
</div>
-<button (click)="calculateSumOfNullValuesInCol('Embarked'); calculateMeanColValue('Age');calculateMedianColValue('Age'); getNullValuesReplacersArray();">DUGME</button> \ No newline at end of file
+<!--<button
+ (click)="calculateSumOfNullValuesInCol('Embarked'); calculateMeanColValue('Age');calculateMedianColValue('Age'); getNullValuesReplacersArray();">DUGME</button>--> \ No newline at end of file
diff --git a/frontend/src/app/_pages/add-model/add-model.component.ts b/frontend/src/app/_pages/add-model/add-model.component.ts
index a1d36b42..b35b9fa4 100644
--- a/frontend/src/app/_pages/add-model/add-model.component.ts
+++ b/frontend/src/app/_pages/add-model/add-model.component.ts
@@ -1,6 +1,6 @@
import { Component, OnInit, ViewChild } from '@angular/core';
import Model, { LossFunctionBinaryClassification, LossFunctionMultiClassification, LossFunctionRegression, NullValReplacer, ReplaceWith } from 'src/app/_data/Model';
-import { ProblemType, Encoding, ActivationFunction, LossFunction, Optimizer, NullValueOptions,Metrics,MetricsRegression , MetricsBinaryClassification,MetricsMultiClassification} from 'src/app/_data/Model';
+import { ProblemType, Encoding, ActivationFunction, LossFunction, Optimizer, NullValueOptions, Metrics, MetricsRegression, MetricsBinaryClassification, MetricsMultiClassification } from 'src/app/_data/Model';
import { DatasetLoadComponent } from 'src/app/_elements/dataset-load/dataset-load.component';
import { ModelsService } from 'src/app/_services/models.service';
import shared from 'src/app/Shared';
@@ -28,9 +28,9 @@ export class AddModelComponent implements OnInit {
ProblemType = ProblemType;
Encoding = Encoding;
ActivationFunction = ActivationFunction;
- metrics:any=Metrics;
+ metrics: any = Metrics;
LossFunction = LossFunction;
- lossFunction : any = LossFunction;
+ lossFunction: any = LossFunction;
Optimizer = Optimizer;
NullValueOptions = NullValueOptions;
ReplaceWith = ReplaceWith;
@@ -54,8 +54,10 @@ export class AddModelComponent implements OnInit {
//accepted: Boolean;
term: string = "";
- selectedProblemType:string='';
- selectedMetrics=[];
+ selectedProblemType: string = '';
+ selectedMetrics = [];
+
+ trainingResult: string | undefined;
constructor(private models: ModelsService, private datasets: DatasetsService, private csv: CsvParseService) {
this.newModel = new Model();
@@ -91,6 +93,7 @@ export class AddModelComponent implements OnInit {
trainModel() {
let saveFunc;
+ this.trainingResult = undefined;
if (!this.showMyDatasets)
saveFunc = (x: (arg0: any) => void) => { this.saveModelWithNewDataset(x) };
@@ -101,6 +104,7 @@ export class AddModelComponent implements OnInit {
console.log('Saved, training model...', model);
this.models.trainModel(model).subscribe(response => {
console.log('Train model complete!', response);
+ this.trainingResult = response;
});
})); //privremeno cuvanje modela => vraca id sacuvanog modela koji cemo da treniramo sad
}
@@ -315,15 +319,15 @@ export class AddModelComponent implements OnInit {
!isNaN(Number(value.toString())));
}
- findColIndexByName(colName: string) : number {
- if (this.datasetFile)
- for (let i = 0; i < this.datasetFile[0].length; i++)
- if (colName === this.datasetFile[0][i])
+ findColIndexByName(colName: string): number {
+ if (this.datasetFile)
+ for (let i = 0; i < this.datasetFile[0].length; i++)
+ if (colName === this.datasetFile[0][i])
return i;
return -1;
}
- findColNameByIndex(index: number) : string {
- if (this.datasetFile)
+ findColNameByIndex(index: number): string {
+ if (this.datasetFile)
if (this.datasetHasHeader && index < this.datasetFile[0].length)
return this.datasetFile[0][index];
return '';
@@ -337,7 +341,7 @@ export class AddModelComponent implements OnInit {
}
calculateSumOfNullValuesInCol(colName: string): number {
//console.log(this.datasetFile);
- if (this.datasetFile) {
+ if (this.datasetFile) {
let colIndex = this.findColIndexByName(colName);
let sumOfNulls = 0;
@@ -362,8 +366,8 @@ export class AddModelComponent implements OnInit {
sum += Number(this.datasetFile[i][colIndex]);
++n;
}
- console.log(sum / n);
- return (sum != 0)? (sum / n) : 0;
+ console.log(sum / n);
+ return (sum != 0) ? (sum / n) : 0;
}
return 0;
}
@@ -376,7 +380,7 @@ export class AddModelComponent implements OnInit {
for (let i = startValue; i < this.datasetFile.length; i++)
if (this.datasetFile[i][colIndex] != '')
array.push(Number(this.datasetFile[i][colIndex]));
-
+
array.sort();
if (array.length % 2 == 0)
return array[array.length / 2 - 1] / 2;
@@ -397,7 +401,7 @@ export class AddModelComponent implements OnInit {
else {
if (value == colName)
(<HTMLInputElement>document.getElementById("fillText_" + colName)).value = "";
- else
+ else
(<HTMLInputElement>document.getElementById("fillText_" + colName)).value = value;
}
}
@@ -416,8 +420,8 @@ export class AddModelComponent implements OnInit {
(<HTMLInputElement>document.getElementById("fillText_" + colName)).value = "";
}
-
- getNullValuesReplacersArray() : NullValReplacer[] {
+
+ getNullValuesReplacersArray(): NullValReplacer[] {
let array: NullValReplacer[] = [];
if (this.datasetFile) {
@@ -449,7 +453,7 @@ export class AddModelComponent implements OnInit {
value: (<HTMLInputElement>document.getElementById("fillText_" + column)).value
});
}
- }
+ }
}
}
}
@@ -469,29 +473,27 @@ export class AddModelComponent implements OnInit {
return set;
}
- problemtype:string='';
-
- filterOptions(){
- switch(this.problemtype){
+ filterOptions() {
+ switch (this.newModel.type) {
case 'regresioni':
- this.lossFunction=LossFunctionRegression;
- this.metrics=MetricsRegression;
+ this.lossFunction = LossFunctionRegression;
+ this.metrics = MetricsRegression;
break;
case 'binarni-klasifikacioni':
- this.lossFunction=LossFunctionBinaryClassification;
- this.metrics=MetricsBinaryClassification;
+ this.lossFunction = LossFunctionBinaryClassification;
+ this.metrics = MetricsBinaryClassification;
break;
case 'multi-klasifikacioni':
- this.lossFunction=LossFunctionMultiClassification;
- this.metrics=MetricsMultiClassification;
- break;
+ this.lossFunction = LossFunctionMultiClassification;
+ this.metrics = MetricsMultiClassification;
+ break;
default:
break;
}
}
getMetrics() {
- this.newModel.metrics=[];
+ this.newModel.metrics = [];
let cb = document.getElementsByName("cbmetrics");
for (let i = 0; i < cb.length; i++) {
@@ -499,6 +501,6 @@ export class AddModelComponent implements OnInit {
if (chb.checked == true)
this.newModel.metrics.push(chb.value);
}
-
+
}
}
diff --git a/frontend/src/app/_pages/home/home.component.html b/frontend/src/app/_pages/home/home.component.html
index eb59b726..08f95a69 100644
--- a/frontend/src/app/_pages/home/home.component.html
+++ b/frontend/src/app/_pages/home/home.component.html
@@ -45,12 +45,12 @@
</div>
<h2 class="my-4">Pogledajte javne izvore podataka!</h2>
- <app-carousel *ngIf = "publicDatasets" [items]="publicDatasets">
+ <app-carousel [items]="publicDatasets" [type]="'Dataset'">
</app-carousel>
<h3><a routerLink="browse-datasets">Pogledaj sve javne izvore podataka...</a></h3>
<h2 class="my-4">Iskoristite već trenirane modele!</h2>
- <app-carousel *ngIf = "publicPredictors" [items]="publicPredictors">
+ <app-carousel [items]="publicPredictors" [type]="'Predictor'">
</app-carousel>
<h3><a routerLink="browse-predictors">Pogledaj sve javne trenirane modele...</a></h3>
</div> \ No newline at end of file
diff --git a/frontend/src/app/_pages/home/home.component.ts b/frontend/src/app/_pages/home/home.component.ts
index ed86a329..0575c4c0 100644
--- a/frontend/src/app/_pages/home/home.component.ts
+++ b/frontend/src/app/_pages/home/home.component.ts
@@ -13,15 +13,17 @@ import { PredictorsService } from 'src/app/_services/predictors.service';
})
export class HomeComponent implements OnInit {
- publicDatasets?: Dataset[];
- publicPredictors?: Predictor[];
+ publicDatasets: Dataset[] = [];
+ publicPredictors: Predictor[] = [];
shared = shared;
constructor(private datasetsService: DatasetsService, private predictorsService: PredictorsService) {
this.datasetsService.getPublicDatasets().subscribe((datasets) => {
this.publicDatasets = datasets;
- console.log(datasets);
+ this.publicDatasets.forEach((element, index) => {
+ this.publicDatasets[index] = (<Dataset>element);
+ })
});
this.predictorsService.getPublicPredictors().subscribe((predictors) => {
this.publicPredictors = predictors;
diff --git a/frontend/src/styles.css b/frontend/src/styles.css
index 9e2bbc54..802b8bd0 100644
--- a/frontend/src/styles.css
+++ b/frontend/src/styles.css
@@ -1,5 +1,5 @@
@import '~bootstrap/dist/css/bootstrap.min.css';
body {
/*background-image: url('/assets/images/add_model_background.jpg');*/
- background-color: cornflowerblue;
+ background-color: #003459;
} \ No newline at end of file