From b4a6f8ad2cb12012402f573c1d3b531fccd61a65 Mon Sep 17 00:00:00 2001 From: Mia Wang <yw21218@ic.ac.uk> Date: Tue, 26 Apr 2022 18:52:51 +0100 Subject: [PATCH] more commit again --- .gitignore | 8 +- backend_react/.flaskenv | 3 - backend_react/child_networks/CIFAR100_v1.txt | 1 - backend_react/child_networks/CIFAR100_v2.txt | 1 - backend_react/child_networks/place_holder | 0 backend_react/policy.txt | 1 - backend_react/react_app.py | 166 -------- package.json | 50 --- public/favicon.ico | Bin 3870 -> 0 bytes public/index.html | 43 -- public/logo192.png | Bin 5347 -> 0 bytes public/logo512.png | Bin 9664 -> 0 bytes public/manifest.json | 25 -- {backend_react => react_backend}/__init__.py | 0 setupProxy.js | 11 - src/App.css | 38 -- src/App.js | 50 --- src/App.test.js | 8 - src/components/pytest.png | Bin 8124 -> 0 bytes src/index.css | 13 - src/index.js | 17 - src/logo.svg | 1 - src/pages/Confirm.js | 113 ------ src/pages/Home.js | 394 ------------------- src/pages/Progress.js | 69 ---- src/pages/Result.js | 61 --- src/pages/WrongDS.js | 0 src/pages/pytest.png | Bin 8124 -> 0 bytes src/reportWebVitals.js | 13 - src/setupTests.js | 5 - test/web_app/test_flask_routes.py | 2 +- 31 files changed, 7 insertions(+), 1086 deletions(-) delete mode 100644 backend_react/.flaskenv delete mode 100644 backend_react/child_networks/CIFAR100_v1.txt delete mode 100644 backend_react/child_networks/CIFAR100_v2.txt delete mode 100644 backend_react/child_networks/place_holder delete mode 100644 backend_react/policy.txt delete mode 100644 backend_react/react_app.py delete mode 100644 package.json delete mode 100644 public/favicon.ico delete mode 100644 public/index.html delete mode 100644 public/logo192.png delete mode 100644 public/logo512.png delete mode 100644 public/manifest.json rename {backend_react => react_backend}/__init__.py (100%) delete mode 100644 setupProxy.js delete mode 100644 src/App.css delete mode 100644 src/App.js delete mode 100644 src/App.test.js delete mode 100644 src/components/pytest.png delete mode 100644 src/index.css delete mode 100644 src/index.js delete mode 100644 src/logo.svg delete mode 100644 src/pages/Confirm.js delete mode 100644 src/pages/Home.js delete mode 100644 src/pages/Progress.js delete mode 100644 src/pages/Result.js delete mode 100644 src/pages/WrongDS.js delete mode 100644 src/pages/pytest.png delete mode 100644 src/reportWebVitals.js delete mode 100644 src/setupTests.js diff --git a/.gitignore b/.gitignore index 0370b9f7..0ffad1fd 100644 --- a/.gitignore +++ b/.gitignore @@ -177,7 +177,7 @@ cifar-10-python.tar.gz /coverage # production -/build +# /build # misc .DS_Store @@ -203,4 +203,8 @@ celerybeat.pid *.sage.py **/test -**/train \ No newline at end of file +**/train + +# user uplaod +/react_backend/child_networks +/react_backend/policy.txt \ No newline at end of file diff --git a/backend_react/.flaskenv b/backend_react/.flaskenv deleted file mode 100644 index 89ab8b9b..00000000 --- a/backend_react/.flaskenv +++ /dev/null @@ -1,3 +0,0 @@ -FLASK_APP=react_app.py -FLASK_ENV=development -FLASK_DEBUG=1 flask run --no-reload \ No newline at end of file diff --git a/backend_react/child_networks/CIFAR100_v1.txt b/backend_react/child_networks/CIFAR100_v1.txt deleted file mode 100644 index 36dc2c4e..00000000 --- a/backend_react/child_networks/CIFAR100_v1.txt +++ /dev/null @@ -1 +0,0 @@ -0.2093,0.2211,0.2119,0.2104,0.2115,0.2079,0.2094,0.2219,0.218,0.2188 \ No newline at end of file diff --git a/backend_react/child_networks/CIFAR100_v2.txt b/backend_react/child_networks/CIFAR100_v2.txt deleted file mode 100644 index d9a62099..00000000 --- a/backend_react/child_networks/CIFAR100_v2.txt +++ /dev/null @@ -1 +0,0 @@ -0.19934545454545455,0.19519090909090908,0.19935454545454545,0.19381818181818183,0.18769999999999998,0.19858181818181822,0.19459090909090906,0.18030000000000002,0.17654545454545453,0.2042909090909091 \ No newline at end of file diff --git a/backend_react/child_networks/place_holder b/backend_react/child_networks/place_holder deleted file mode 100644 index e69de29b..00000000 diff --git a/backend_react/policy.txt b/backend_react/policy.txt deleted file mode 100644 index ba1f82e0..00000000 --- a/backend_react/policy.txt +++ /dev/null @@ -1 +0,0 @@ -0.7018545454545454,0.6530636363636364,0.6565090909090909,0.7029727272727273,0.6615000000000001,0.6610181818181818,0.6333545454545454,0.6617909090909091,0.6584636363636364,0.6933909090909091 \ No newline at end of file diff --git a/backend_react/react_app.py b/backend_react/react_app.py deleted file mode 100644 index dea4b617..00000000 --- a/backend_react/react_app.py +++ /dev/null @@ -1,166 +0,0 @@ -from dataclasses import dataclass -from flask import Flask, request, current_app, send_file -# from flask_cors import CORS -import os -import zipfile - -import torch -from numpy import save, load -import temp_util.wapp_util as wapp_util -import time - -import os -import sys -sys.path.insert(0, os.path.abspath('..')) -torch.manual_seed(0) - -print('@@@ import successful') - -app = Flask(__name__) - - -# it is used to collect user input and store them in the app -@app.route('/home', methods=["GET", "POST"]) -def get_form_data(): - print('@@@ in Flask Home') - # form_data = request.get_json() - # form_data = request.files['ds_upload'] - # print('@@@ form_data', form_data) - - form_data = request.form - print('@@@ this is form data', form_data) - - # required input - ds = form_data['select_dataset'] # pick dataset (MNIST, KMNIST, FashionMNIST, CIFAR10, CIFAR100) - IsLeNet = form_data["select_network"] # using LeNet or EasyNet or SimpleNet ->> default - auto_aug_learner = form_data["select_learner"] # augmentation methods to be excluded - - print('@@@ required user input:', 'ds', ds, 'IsLeNet:', IsLeNet, 'auto_aug_leanrer:',auto_aug_learner) - # advanced input - if form_data['batch_size'] != 'undefined': - batch_size = form_data['batch_size'] # size of batch the inner NN is trained with - else: - batch_size = 1 # this is for demonstration purposes - if form_data['learning_rate'] != 'undefined': - learning_rate = form_data['learning_rate'] # fix learning rate - else: - learning_rate = 10-1 - if form_data['toy_size'] != 'undefined': - toy_size = form_data['toy_size'] # total propeortion of training and test set we use - else: - toy_size = 1 # this is for demonstration purposes - if form_data['iterations'] != 'undefined': - iterations = form_data['iterations'] # total iterations, should be more than the number of policies - else: - iterations = 10 - exclude_method = form_data['select_action'] - print('@@@ advanced search: batch_size:', batch_size, 'learning_rate:', learning_rate, 'toy_size:', toy_size, 'iterations:', iterations, 'exclude_method', exclude_method) - - - # default values - max_epochs = 10 # max number of epochs that is run if early stopping is not hit - early_stop_num = 10 # max number of worse validation scores before early stopping is triggered - num_policies = 5 # fix number of policies - num_sub_policies = 5 # fix number of sub-policies in a policy - - - # if user upload datasets and networks, save them in the database - if ds == 'Other': - ds_folder = request.files['ds_upload'] - print('!!!ds_folder', ds_folder) - ds_name_zip = ds_folder.filename - ds_name = ds_name_zip.split('.')[0] - ds_folder.save('./datasets/'+ ds_name_zip) - with zipfile.ZipFile('./datasets/'+ ds_name_zip, 'r') as zip_ref: - zip_ref.extractall('./datasets/upload_dataset/') - if not current_app.debug: - os.remove(f'./datasets/{ds_name_zip}') - else: - ds_name_zip = None - ds_name = None - - # test if uploaded dataset meets the criteria - for (dirpath, dirnames, filenames) in os.walk(f'./datasets/upload_dataset/{ds_name}/'): - for dirname in dirnames: - if dirname[0:6] != 'class_': - return None # neet to change render to a 'failed dataset webpage' - - # save the user uploaded network - if IsLeNet == 'Other': - childnetwork = request.files['network_upload'] - childnetwork.save('./child_networks/'+childnetwork.filename) - network_name = childnetwork.filename - else: - network_name = None - - - print("@@@ user input has all stored in the app") - - data = {'ds': ds, 'ds_name': ds_name_zip, 'IsLeNet': IsLeNet, 'network_name': network_name, - 'auto_aug_learner':auto_aug_learner, 'batch_size': batch_size, 'learning_rate': learning_rate, - 'toy_size':toy_size, 'iterations':iterations, 'exclude_method': exclude_method, } - - current_app.config['data'] = data - - print('@@@ all data sent', current_app.config['data']) - - # try this if you want it might work, it might not - # wapp_util.parse_users_learner_spec( - # num_policies, - # num_sub_policies, - # early_stop_num, - # max_epochs, - # **data, - # ) - - return {'data': 'all stored'} - - - - -# ======================================================================== -@app.route('/confirm', methods=['POST', 'GET']) -def confirm(): - print('inside confirm page') - data = current_app.config['data'] - return data - - - - -# ======================================================================== -@app.route('/training', methods=['POST', 'GET']) -def training(): - - # default values - max_epochs = 10 # max number of epochs that is run if early stopping is not hit - early_stop_num = 10 # max number of worse validation scores before early stopping is triggered - num_policies = 5 # fix number of policies - num_sub_policies = 5 # fix number of sub-policies in a policy - data = current_app.config.get('data') - - # fake training - print('pretend it is training') - time.sleep(3) - print('epoch: 1') - time.sleep(3) - print('epoch: 2') - time.sleep(3) - print('epoch: 3') - print('it has finished training') - - return {'status': 'Training is done!'} - - -# ======================================================================== -@app.route('/result') -def show_result(): - file_path = "./policy.txt" - f = open(file_path, "r") - return send_file(file_path, as_attachment=True) - - - - -if __name__ == '__main__': - app.run(debug=False, use_reloader=False) \ No newline at end of file diff --git a/package.json b/package.json deleted file mode 100644 index ada7219e..00000000 --- a/package.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "name": "react_app_metarl", - "version": "0.1.0", - "private": true, - "proxy": "http://localhost:5000", - "dependencies": { - "@emotion/react": "^11.9.0", - "@emotion/styled": "^11.8.1", - "@mui/icons-material": "^5.6.2", - "@mui/material": "^5.6.2", - "@mui/styled-engine-sc": "^5.6.1", - "@testing-library/jest-dom": "^5.16.4", - "@testing-library/react": "^13.1.1", - "@testing-library/user-event": "^13.5.0", - "axios": "^0.26.1", - "js-file-download": "^0.4.12", - "react": "^18.0.0", - "react-dom": "^18.0.0", - "react-hook-form": "^7.30.0", - "react-router-dom": "^6.3.0", - "react-scripts": "^5.0.1", - "styled-components": "^5.3.5", - "web-vitals": "^2.1.4" - }, - "scripts": { - "start": "react-scripts start", - "start-backend": "cd backend && env/bin/flask run --no-debugger", - "build": "react-scripts build", - "test": "react-scripts test", - "eject": "react-scripts eject" - }, - "eslintConfig": { - "extends": [ - "react-app", - "react-app/jest" - ] - }, - "browserslist": { - "production": [ - ">0.2%", - "not dead", - "not op_mini all" - ], - "development": [ - "last 1 chrome version", - "last 1 firefox version", - "last 1 safari version" - ] - } -} diff --git a/public/favicon.ico b/public/favicon.ico deleted file mode 100644 index a11777cc471a4344702741ab1c8a588998b1311a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3870 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 ZtMWJ#1p_C<F-T5Hu2|;y@Dg%;1puB)gNgtE diff --git a/public/index.html b/public/index.html deleted file mode 100644 index 1c1e3f68..00000000 --- a/public/index.html +++ /dev/null @@ -1,43 +0,0 @@ -<!DOCTYPE html> -<html lang="en"> - <head> - <meta charset="utf-8" /> - <link rel="icon" href="%PUBLIC_URL%/favicon.ico" /> - <meta name="viewport" content="width=device-width, initial-scale=1" /> - <meta name="theme-color" content="#000000" /> - <meta - name="description" - content="Web site created using create-react-app" - /> - <link rel="apple-touch-icon" href="%PUBLIC_URL%/logo192.png" /> - <!-- - manifest.json provides metadata used when your web app is installed on a - user's mobile device or desktop. See https://developers.google.com/web/fundamentals/web-app-manifest/ - --> - <link rel="manifest" href="%PUBLIC_URL%/manifest.json" /> - <!-- - Notice the use of %PUBLIC_URL% in the tags above. - It will be replaced with the URL of the `public` folder during the build. - Only files inside the `public` folder can be referenced from the HTML. - - Unlike "/favicon.ico" or "favicon.ico", "%PUBLIC_URL%/favicon.ico" will - work correctly both with client-side routing and a non-root public URL. - Learn how to configure a non-root public URL by running `npm run build`. - --> - <title>MetaRL for AutoAugmentation</title> - </head> - <body> - <noscript>You need to enable JavaScript to run this app.</noscript> - <div id="root"></div> - <!-- - This HTML file is a template. - If you open it directly in the browser, you will see an empty page. - - You can add webfonts, meta tags, or analytics to this file. - The build step will place the bundled scripts into the <body> tag. - - To begin the development, run `npm start` or `yarn start`. - To create a production bundle, use `npm run build` or `yarn build`. - --> - </body> -</html> diff --git a/public/logo192.png b/public/logo192.png deleted file mode 100644 index fc44b0a3796c0e0a64c3d858ca038bd4570465d9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5347 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 diff --git a/public/logo512.png b/public/logo512.png deleted file mode 100644 index a4e47a6545bc15971f8f63fba70e4013df88a664..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9664 zcmeAS@N?(olHy`uVBq!ia0y~yU}6Aa4rT@hhQrHLPB1VqR0Q~hxH2#>B;NWBL2>v0 zC*B6J6K?-Wy8Ry{c>51X<o2%w2;<i8<Xis}Z~X#GfyrC{5^w#Ezx_Yy_K(Edf576u zVG4dH-u{(v^Jn6%KOhmX$sjdgWt%N$9AjW$P%jDc3ugHC;xOmsRkOvm`1EOqRzBcO zwK9Gu+bF1X`}FQb?GE{B@mVe<QBxv)|CTZ^s9f-LaSW-r_2ytB0|Ns?!-Bsn#aDtn z2jW5TjM(Z}KLNHy40{wcSd_$BS2ZZ)e%<q5dfVKO{?<|XoR3oWyPudh)AwA9;W3Hi z9uV=yD8By9?<HN$hs}P<>@wY}P%rv*<0|twMv<3ps}v&Fbi___o$B>5T<fvp<<%di z*IFOebUHTC|IM6OrNWYDUyNq$N>%!(zwq0f#^6o+j-_sjx|GuTbI$=$mkr9_q9wUw zPIB92G#%P=@avV=Ia>@{j(^;r!}e$4!QN-88yA0PGWTBn(uVKL!UJzz{NJ=s+tD9& zfhDD~*ZOLW=#OdKch0VMs#;eN{h%(%f8FP38yA*Y^W52)`a4hNE<AEL#Qpq5O&dSU zSgtkZ1`GQ#YP>m>pL{v3n|(^8?Zigq1<x5Q7=vg2H@|tYVoQ_brHi^B%$ftwb{z}c zW{~aYmz59|J*hTQHR0AYnUaReMW;?|y3@=mXqnEay=P9&tF#S^X85hQowT(<^=nrS zXY`Gr$;m2jGVh=0I@oN>Y57#vtde==a@8Cmzghte);C#YDbx11rhe+)Ykk{EnC%dQ zO(MV2f(D(a>8t+U|Ib@pb#b0vCyPp>(0=w0PVO^QjD<IOG{pJc-g)riSJ|FJL9;IH zJIXOrdfD!DnfH2`FQ&cN*l{@5_*+Hi$MwHw)t#E0drFq)nyQIte)Gaj4>o>(!S8wN z;nXwpcpb&{e;itL^O>a8V>za0|Nr&GOPy3N+>_wj8o*<j?j7WMi?^0z#{b`&gWpWN zW7#|<`LyzaW|96EOJ5%}-?PK3hUY^3=XmxBRTD%XeSekQmCy6)PS?Fp2?5iV3TkpF zKAs@j_x_suQ)~HCr*wP83pK2dy`SH7=L8dH%D#!4Y8g_O&vEOLT_F`R>xAON$*hMm z%beCJHZLk$Z}~fUc30a9V-KAj?{l>*n`Z>Se63b}p}?2j^o_R*v*-kl%&%n=D*7}} zr3W0&meSB$sMeFQgZIddU$2?(dTu|oS|Dpv(hL11&#qjM*vY(6c5MuEXUnmjYypS% zWo3jvIC<r(fqT?W_9K43R+luz{1ld5k&!HQzCFU_^)n|O!+_<_<3pQ6Tz@Vozw@Ss zJ*0|j@n_zUDIZJjb|t#JKdEpe^J>|yYx_H`FWz*x;^<g??W<ABYdgV50-t(A->}N< z4M_?3aCGr@*RZgT=~Dd%UkPyiX^X2c`cf=Bi)s6Y#G3WyUwe(e6rWSsYG`>gHTz+u z!z#;<C!N0}n+tum__Z^9mRII|rwQM6YI$r~%qD#~U$8baAztW!LdeCESC>zO7@Yia zWyZ<7YrL6+l=JuIcE;to)bE^rY<7k6Yblm_X|on<i|@U)I;Gj^+|J8KtU9J_iIV2H zo0+9qH8uU$Sw^O&s!-+o$E&PcEnA9a#avv(fBTaD!gFu@^RlDGUd)L8@r<$R?Um{E zk&aR>(@eSC-A*qk^D$hxI(BN4l5W&)H@3N3-!q-q{`Kib@t>c+zGD~2%v`D`pyhGk zLUu#7Z?@L&aR0FDQ4$hPCzNx8z7)<a-0K=Od&#w`omVdYVb<6Cxa@#(t<>&mjQ@C4 z4SM_Kr&;Z4cYLC~R(N)@N76aNxJvcCR<obET{8}KTqd!4@1!(F7r!lDCu8*Y=pNRv zQNL?uCd+<QVArHF&o)7)OYfN`_Jn1c-(O_@%HT#L&kd)Ri(0bB<m+bnvqt);iI|19 zwr;-WP<L3s&(SSJAnN&*3kmmHo->u!xu#W^o$Y*JEMI$+r)yV-PohBNjiWn+3!l&H zEYzD`J~=w=;+2T{Z?Ws^r!{}hKm0>%E64WF{O)W1EWLZbcuPjcn#~Of>th)rE*yyC zo5;LYF#1r=k>`ir<#On};*C5s<&Uv5|8m92ejC!FV)ivWYHwN?E<Mrl;h)MCnqU7g zUa$ywa6RSRv3U$96id{SSLIZe|E$|+$M9{*{6Fg+-DEeFwPSQ>t9U1rU;NL8@mvbW zafbUI&x9HNXELyG>#+Z1Y1qlY@o{?V8;&}r2YzZb2NTRE{nlarznNi&&NsjMZl(v; z)#clstm189+@V@_W?yo0&-J?h=00k#JyThnJeX$xTo>dSIw@KDO3?pFXTI7!E7*PA z()xEK7uz*g#ZymNS}zDqd0lpeM=LCgeYyy1B<G5>_bX&&)(7XRi~T!aHjQQP*I=Vt z5wB%BiVq1c*?#@5Y|5LA>J1ycm`=}J@#XC0Ri_z`>n=$#v0S_Hh1A0t1-slIGzYz9 z3o_buL;FjtQ(y6;Ny>c+k}E>qWW+lx|37cboDXyUJ&bytdZfVJx;gI0T;&y)1NQwX zms~$ppy>M+^9`5witpQ2!TqQ4QHQXG@rHBf|GSvqt$xV+?~HrE8e_>bAEG}@bUJ&S zW#6+W|Ee~fO1W_SeZUWonfI>8TII*^7y9sLEvepRzUpGs$F!8R+0WaQyV$0z_*T-q zWo2>p1nKj6U*rl}QV*@K`_|f_ASEr&wrRulNUOh&iTUn#6B@$q&%Y+fRXw-h2(!qB zvMW3+23u^S!Z$vy7xpd>Z+N#te96ZtD|$HmUfqqzSIl_S7sbe+@9W*D=W3R`sB(d+ zg2|gqRfz`+GgVJSZ1{Qmy0}2n|La*ld=}2Tzk9RB%ik9&s}H35b2skl<KAEB%WyMJ ziu)k*V#i+#g`WNK3TLc{mQvDT`*GTR&fJyKq4Hd-lT)lYj&ww7H^~>3EQ)LUH8tPg ziT8Ry?ApXljgvo@yqa>JSw1MO(6+Cl$>iy)<<Bz0R_-%WQZL%}>+Y8v$uHlhuuDZQ zJiAqdLGjFk3{7Ue>Ql_MCq>>L+5S}aXX1+t9;@HGtY*w?w9T+!JurFaoSM)mk?IdS zx&HJm-^b7qTl%!cV%KVu1LDpPO%yUGc0MVJK9#HVymiOsNQKSYyh6ko{BN#&#HX_3 zeP;B97hkl3?=WqcZL|A#VpaF5&!;!;uUM{s>|^<{>+!XJ_ns@9Q!E;LDZS$T=Y$Ot zbVIjiOg!-X)zqW!n46*|{*k?Q)NFa!);+T#Rz%L;^R)C=_To+EPBRYMuC;1jRCeXX zsxNjk6i(eaG}m?4+?3X)GtcJD+a27!TD$L?BG+e^Yg;$^|43;++I=uh!0qnF17{Z= z*W+S-F#Vmjz>npxn`YfQd#QPQqkCP<YuQU@VhzrkJe>U0DKz1wy-ad5zpb?Coc8!b z8p;0B&gxw9+!1XbY8L%i_TuFqnTFOkI{e?%yX!wH?~vnZ%I}Z3t7^QzTJl|1^o{#6 z^8|Wk##(XPcct1_3D=e0zVGy5dWlxS{5z{Jv)g>XziCc3Lw)hL2xcah<hQ?`y{fs< z{J;K6_dgkdHMZ9p&RlArRr_Rb?nZNQ!*g}b*1I$xgtPtoak;Or^WRm;`koUHFSq_^ z?mci^`y=~o#`*c?OYgPZWp(=h>|wwDZY$Xr@#W9g&a&DSc)Xo|nrz*@|C70X|C+cl z;PU%x_1`=Nw_p3H&GLu+x&AkKzvY)d-q?1O?VtJE4~OfR(=vpw^hLE@w|xGh?CbA6 zh1n0nuKP~-nfPl3U*B8V$4sTl_t^KcSG6y2`}nZ%>*j;3Gw&#TUf(Zas&v==3bXUo zMRB$omlwxfsr>w|V6N1Or?JZ}v0pj6N~$7!pL+nO(^a|q2hz5ka0#4v`KzomQ=Z7; znxhxj9b(vXb(f~3k>!Ou`hAl`q95*wj=1wZVAG+BrF*S!2CQ<}_&Mcc;JtjVI=1EJ zyL`9o+oB=-b>F;S^{OI~IsxaLrd?~P-&v<(dEMju`#|0lqve0x)zA9=>;0|5@RaG$ z|6hiiXJ45xd;8zch4n6;5}8?U^P-ZMS<U+Wn|ocmve%`!Z7~9B(<M?n-mZT??`YKS z*>xg6<UM}1FFB*!yRB;0p6Ec!i!a?i7z7A4h%pQHeA&5hN;u<7wj1*t4^^!fO;z*B z;MnA{z_V4Sm0LLLzfXZ-b@t7Jcdm(ce422SDR+%(yT>k#=8a2*TbZSwYWy@>x;lRq z*R&YTiAr_X{1+4kOcPO4DUmMRWxVNvOT5~<Ev=0UUIxhd|9P|T8cXk)upjLiLQ{@& zC&WH&T;Ou#iA8*paQWNR6CwvR<d=RbittzZ^EEn2c|~J~^v&S!PGZg(%{4g-6^^$~ zT@te8sBDAkCtJITt=ASr3UR0H*39O!c5xSRl2co=V0(Z|G^=uOrd9-F+k(0JVeHS6 zncXW516-t=@>12suAf%3YxmLUD{d0K;Z&N?`X*XQ><?QHLy3{L(x<o2KdhJ7Un&;a zsLH$MfT~jI0@J^<CAG32FKv*29P?#Dq3yY~C;seg3cbVf>Oh<R$ywYv3m5udSX`EJ zB=XnJiF)<Q-V8C5Cp|wCSH$?gc>es=AG|IcSiU*hMz5y%oHX;93T<x&8|_0TGp~ES zdy=xslV#OTxpPi)YOZDeym9W`fzl1L4&SlbFw?U8<nwP4y^K@5xaS<+b>)E2IVol@ zr3;Oz7dA-<oZ&Q{z!EWO_SU)651cuE|6QVs)3YANZ)W|WpVH6y@J^KTxF$H~V1~oQ zc}n{q#dMV(je2(Jx0wFz?`dCKy|490WZhWB;n>OXb88?|@FmIQhK*N~x886LwpKnD zc4*1!)<0IlONx1)r2RN>(Dj|+gPn8L1nLW`9{!V+Z#@3D<<1%g2@{`xdw70G?CI~5 z%-_f~$BRwG^gV|F<NQ0$aVo4UwL}Y#vgg}BF#I;9Q@j1oyWh2TQ?gziV1BP4#nJM9 z3m@~c-Z{G*4oz&-|DnHq!d&Lk!<%yj|FCa-b87w4>y6Cu@&{&3-{<Dn#yx3=`;%n$ zplLyx<=+;GTdjGKYS{LunV(7O(98nvCr56wOaHvUvxFllRPd<ub)Kw<nu+%H)0Y+) z&3ycLuD0i`6<ynw8eljr1yq>=J?DsBJ)icSTa-z4bGng#-nKy9b9^TxUjWK!~ zZm?D!QSA6&5$0AMY27%9+g0!59o`v=;pg^F|E1b$_{kze^S@_G(**6~&(jp0a}LRD zcZ$vad*rfcN@%_whoN$lj7-Fn1!mooCY;><DAbS7z&yll4b!|eUW(P;n_nxiON$j0 z%$lls;_B3%#^4Xl#_<;7E0@#+9GM%X@8K9zcO-LO%NuLyof<EfxnAD5nr8>E7?*{a z(Wl1t&ihs?6Fa#BfACpkb0~^FK7CMa>WAgKghZTbABg#~hGieBvYTFLJtt-Ls{a`) zUMYFLS#Ebd==j4ve$HUW^cu6TS1v9qba3bjwh<TG-T!RQD<;Wv2Torsev@G_k$2M! z<9kP6@huNIwAeWMBa7sV8|=l;cw#rrl+(M!sGt0Wb&m1>g*=K!IafYN%*as>&t3P) zEGp`5Lx1K2C$oZ66IJDZCjU}st)5iVvQ3(MPjJf<<-qmVAL%XV?Y2Cy(z#7|_Y7U1 z*h<}7C-&T*{7s?vsEn0#6Zd>+cGVSP%MVv^%$%E_xk*Bj#qXkBcIDsx>Bse7Ok2n3 zs&TaRWyxU%f9FLTzb)})t!k{FtniIxC&vWU%hh|CIUBgE&rRAi&ui_@wdw^$E01lF ztez9Mi|t8}h|<4rJ=gYW{qihe$xI3H+robGokg(1h3soV9J55y6-_;+1<NFQL@;)+ zPtXhdlp7PMB)?+`Q?Sp@Q)M5e)fb*fo2n4s>hq}kfT?R|RB(;g;_oTO-*<f3Y^`wn zA}gzx=<3aUUZR>iWbD~QCtcpudbUwva$=K^+$Zg<2NM_1SbBE3@~71foS$2AZcfsF zJflHs;UD*l&L`tOEuW{_Ar$}LOw7hIjCWPQ6Ib7JJ=1cIi1xC-vcIKcIN_vtT~U(w z6ibEm-SgxcD&9_1TrV(XrS8SIUk+MbFJze%&%k@iJ!@w(zp3NgXXfADWuGjSW@FIs z_?l(9I_h2Apa1e|GgH(ir({kP@i<vsJTJdY=5!LHLsK>%W8;;2_wx&78KO)UuxNgj zi@M`<bW4_t^|nCkX+o@D`j~h!8k~18_dK{l$hB&2n~(5}P?ISeKO0LGE}e5;#^8*5 zV`Q@UZJC1`T8bDrE_6)W#HGr7cvo}PpOxb3LcXs#(-R+Lv^eir@-*R&v#rFG{0hl( z7jdh-ixg$=3S4Na-1q6z<(nVW*3HOc*s)mA@UFfA3)3vqta(}1iy3l06dYXe<Mi_B z6Ka{{b7qJpU*LbZfBQqfuv>Kw&N7=0gt3~H_~d#{?^a?D6X6Yfa>g}S>gdbz&uYsX zZ+SfHPP4NXT2x$RDkUsb+a`S@aCL9WyoJ2nCogr1pE{XZC3>PuXE~#XoTl)a@SM(! zZ@!jN!K+NCU9q{DRTrZBz<TbB`diaxENd`xOrB@*a;;p>$&gP1D__V*8&7z0j>%-1 zs%BaLfms1hmt^Qh{fH>8jPBoDDZyZ<c(P#rLAgI+YbH4}S97(ov}-7vs4bXr!Dd6p z<8q@`$L>Z~JJ(M&PRV`>`gacUD9j4Y*WwNrUsGtwWn-Vu;t}wK>zfIevV*S}$FlWF z58o|c%V@RiU-*liTG<Wr^m2UX^Y5y^rMJL!;WCEkpsDGvX02ztvi^zH0l7yE;!DpQ z<FmSZcdA?IzQXLX`D!))T#}6@Ont8?uJXrgYT3Fq4Ay-nR~ZBr8?L-nRQ5UVc-~@@ zIc&H2B6Kg_E_Y4lS~}s{w~Ys8M_Hb#z0KGi{PcpPR8fF5!?yEmJz1xBRb9UDw0o5j zzl}+XlJ)aR4ZKrdnV;OAbN=;%CP9_jg^HGufl-f}8d}#+*}3ZU2k{x<mqnkZWq7!j zUs%iXIqB)8W3zv_^cAYRtWsRyY&_!<!-m?>2McT_l={r*G1g7lp>wZHP#|!gw?%X2 z=3`tYmwvy>{krUXh}o1cUQ-zpK2K&8<+8Batp5JM8s=1$b?(9u%k3F%_-_(rU+Z9U zU!z1&If##uPwK(yBMfHtvJ#4~zG$2@zqQkC%fTN)yd9-Y4N2?<nb&G2DBezaEVM|) z-%8v)?}9wToAs;XZe5R2nO*ZhCiSjaG~2XW%ng52AIw~M!n5A`*tvu*_rG#wJe{&J zuec9Ka<ql;w64>h)w+S}%!(KBM_4*zU-YZS9_ZQSxG>>r>O)^vH<peo;jL}FlcZwK zE>rxrxKT6S{MDU+o}&p42YFIb-g#)58GZ;!aJahQM)6y<S*Z@|T||AiJL(*WziDyi z-c@bG=)1q4ozl2{=YsvJBmYbp-*^~Ik6gKJcOZ|Y|8D!+s~0Z67<Hd1&hx+C-#V*> zm8#46JXBZ39%j0oe&o;A)U*5MzIN*FSW)_9;$v%Pt|>0Dq1hsyZ@=|QcTJtlS8gjU z&i4JD({JZZcYG!@&W-pnk3HKsIK7Q!R>|9r;`ZIGJl=N%&Y2tU6W`(BdM9*ix<){x zjnV<R?DZ`c9m<pERH=z_XIw76ceOz71am`5Y3+-<k1`eB$NqbiVsY?Nzs7=_A69?( zU>i1Tul%Q<W`-Y`JlAfmUU+Id<NnPzdoHX#_?>TI-etj!FEWfc1i0kpzbgF5z3yO~ z!paBl+b0}M&`|jD^>=*tQeM3buVQwl#jW|K%dHEXgn#9UFI#;l=49=evtKl74Pt~^ zHw68w%c~K35+u)?^~lsQ^mFpd>HC77OTYFLG>*9xlOX&4@2eZO0y<g!d|5M{np&1^ z-m-=-ajLYrM8TPYn-Q~Lh)>tif1Lfd`S_R6*)NNJ*cwla@s!=n_?$;og*78veEvI! zOQo7}0TaU;n=&oao|-**m{6X!<Bi{x7?H=SUtg;Fr}2t6cg<PIG)*{k>+;i^j|iIV z<zoq*VsbI$y-&50$@G&xym~8M)J_p=aWU;}JR<7he<8@SOzO%tnN%0s)E}FsYe}4O z^p#)0Q})Vn+NHRs4iS=NUjp4eFF0X%ai6JBe5dmClvG=dSHgYVe7PK5hurdHEhjH! z**$Y%k24pG75mZ+OPEckUfHxXeah6Y{leAXKOJB2PUYqkB~>exYg>7iS}c6JD%MO~ zrQUpsukW!12iJb;d|2Q6`S4QREd8hJ-bgyMRzK7@Ufy_$RrTYZ=y)z6&-R<P7ecOV zzbVgtPC(kuqVD&q*b63J^}A00n&39E_@@QiLSuK&9KP${LMl#9=e18PUi#;U$U0r_ zm$%qheXi%X3!h5z<Otfg<h{YClwhWBr7;ivHfCOx5m4hvtqfl<ZLx{i676pc`@H^( z%A0*#8niQF-3|67jLw<ydKXr+PkDZ1!;&zLSeM-|_J8UPS;?Y(r7t5y@Kmy-#6{N? z2ee}=R)_95`fgWq_w@ZwSImu@vBm4oolDNF=LCIr8i!m^3Ge-}a(%?78Hd}vj+$1i zoXEdJjd#_IgA3}MR3H296w?S^vm?niXW8Sf>zpm8BzL>JOgOqE#3<y@?Kp#3D@0G; zHQQhHTe`7`FD+<S>yCU&twdc3@n0)4bhv-6KNN1ie%e7dEs>ca&wKd(9X_iT^5klQ z^RYm|&+?n5Gwr!@{q`PaZIMI5;Q}0~&GDrN0t8PVob;jPRNFVL;G82|y^HnZ6Q=x| zTeXWh{ubYgGcOO$%W^4w{CUTWC%s}?@6F%ms7+q_gq7p2xcUCtcMEqpvz6Vo$SOD` z@bAhBaf5r`M0q*_p5M9jvG&n}ioyWq)3F=Y&X9aH<DDXdO-a|1xwfjUMk0kJliC{} zy!5tg-Ozf^-S*tmA4`RWybJ9QHkb<strBK<`uDP<tsiT&W&euK%%>ZKMP?q@<WTMz zrM&hq_qHz*6NA?Ny)`xAs-)|z0z*!(j^}zgI-e(;as0m|y_lu@4x_7Ax9!>=sh^Mk zZ_ja1ir=7e%iX2I?Ju)8zsjX8tZ!JZ`YXg0i$3OF;~6e{B!2?aZ0j2niw=C9vHO{j zvs{zzy;WX5^4A}~T_^Wn{t;)mv|lP0_nx<>4;THlUiv%w!NaWf+B1Luhs~eB(0{9a z_4eLV2fDN`@9tc@?}rR$h53!u*#{;t6;E2j-k9=w%Yw!C`jq$9T6!p39iG>!>#lUx zB;DQ7d5f-k<MJqu1?Pp@6$QnXY$$(s+R@5p)@G4^n)gbCJf8l}T6$BaaEY;vxjmcW zb1QR?Q`S!lH6q+@-{b5tQfyeHCETvKQnUH|!)eMvkAsWs+qn-maPXWKcVb8kRlCTz z^5ZuS`DJ_(QWq=^8vAkNxhT$O@cU?7VDazi_1d5R!|te=oUZdraCyyF%rF1C;^T!) zoIJBGZhH2mfq(irnYFu`4NY&E-Yt{-7%cXi=WU{A-Fdmvc!rq<w&|(!=I~`)toS*> zcYe>Kr^Z|Qs?R-P_x!CB|8eKOZ;9-u@94d`{7Yv4yPtnbyOtFuWX%8k=RxQH>bz&h zcjU5vJm}qDyv*L^-xv1uKXc7xX4%%bl<3KCe?IxKolxKZ->&oj#V5)CS3hz}-sC-Z z$`AXEcc)ff@cvMrB)|W4{IduD3+8{Hdt+mF>9;)B50{tz*l%v}r^NivwC~-#Jk2l8 zy_&z5U1a{s*9yA+?0-~yPQK+3c>89bbo8<E=}X%_zWMWFVT146!?o336>am+rg~qU z^UkurE@jUJ?!53H(R(H*pPLr?W9{jBugu%?zi5AGI=!=@{?&(Qp1N(_hg9ujOD!vZ z+`Lh-D`cJ5@hyL^*RC%*l)qEqQP}r{KPO5V=RbS1>R;%a?>G24{ohYoZdb>4?)Vu_ zXOron%WqoPH_G>}&1AU~`c&p^Wl+W(h4VoZg8z1HJfQ6=dEfM0bLNe!TMo$9>z!9z zQBZ$0BEhZVVsd!;^qcp~YA^Ksi#b-xXtgKaK>5z2?OYLxYc{7hTw~o{%)fe0*-hr7 zI`P{xg|43UuJ*be>+<;_|FfA^SKsz&9NXJyzG~~@_C$w`&g`q_mY070n*ZkR%U!n= z1lS%lzL|Z|CHYa|_HVoYTj%^P$=~e2!*cX{x&Qf(69pvNBz0p-BL%)n&Hd4~@8`Vt zwcVT7hsDnov!5Gw|ITKe-J(x--qT|b4(F=6BeYhgDpoV<=&E8~+38PMPYIVxZHc`6 zde`F6wKg{k{4eRf`dp^;I*5rc<FLt{JGK*-OmeK0>~g-|@?%rYmYWw%%w+ENsi>a0 z_;!Vv^(z<s)01b;e|q%AvFu3?U!1t3yVjaFp(}WyaLMO8o&S{Emp!^wCMBTd-&}m* z?DVKLSu35d&bZ9r-YvBDoXe7A$qf@?7*_RPahs;fdiP?Nn#f{zvx7_pj>29#x7qco zcDcM*@#wIZ&;zR%&n`^yV=Fy)S@DA4uRjjv`zklgs+PMnCF%60Lo!=9GlFij-QA<g zyRvPWz}KIKqI*}woNm1_#a8IZ*$c_8my33P)7JM2UOk=1R_ImehI{kpM&(_tOjw(J zve=>j>WkbZ&XbF+rX5|s(qZ)kHSu1ZLmR(L(P7yAb}bjnkqp<%x6K}h6-_+RpE+Z7 z+?Jp#q4#Ub(~{4%GC34Wep(%R{jgTA_B;vOSpjt~Crsd)8M<_l-RnD_Ltbnwep$a- zGHb&0FxRG<waf4CO9?9HnaR4~*5`}<Una?{l`ng_&|N{4Awg9$Db&kjarrLm^{QN- z=2}+W@f6Jq)|im#*Vv;dBfus7Wrc_2`9)TS>%MJ1FUqo+d7E6-k0pJ{fqnrR#hMQ8 z-SZ<fm>K%KU%7}KZ8~p!r|sLtW?5II<GvnTtYWczS{J)Q1gf`1TH1JBOV9c$5}tad z=t`)7b4}^-%L^F{v^`d`M(uUmY_QO^(ph#(4%^R}LSJ@Hhzjps)spgAr=p+7_EXBe zPk+U?RPCIWcz5<D+0xm2-Fy94rHaY2&wJ)ozsg|J<4IW?T{|Ck-_$$w*05{4>eD{4 zx$N@KxT~!t8m}*j%M85Uz>@oI$-!&QCSjA<R(@qxP>?+&GbzGn?LFoPn(Pc$Wr~bm zeUM}Dw`9<Wbw1W*wTJz{WIhJ18J&Nn&%bAM*mXz3rFL1~d&UoIm>b>+Y*{Y%p7FyL z=7x38w&vHaXRNuj!bpYT4<F0fP+?s|Wrjb|i5D4G@JKL-Bsd69@-y#Vb#z{jM%#qP z>dLRS+$xb;VIl8e=Y6H6P1fuwbIRxC2X+hoOL6%9Y^v*2rpGsTFUgg?e28Jo1`YKM z4%(NN<teBYc}{0p`$BZ7G5@zI&Qmt4`Z9IDW6gQy+t4d{#MJbq;Msq1SJJIt_ocIH z?orT{*^>D}b)#f+oT$o1Zr;l9t|?c}h*cKW{y9A5?SntR1$yV~Jhd=Kw&&sQCAW?> z1hm-wp4rEIS>~~YqGs3(f!-_2W~qzKG5nKuBj`ik#YlmRUdtp7{SiN0qQk1aMeC*N zQR5?fr`yR1Pw?6oy0t0z@8{UJ4+G^DS3Zsu;ZTXn((jfm=K0X}-!pE4(V1ly0)p3V zPKHTr;?8`W$Y4ED>E)lul~J`BciCD5+g!XiYBcUwQPm4;W!!bDHQ7^Zie=l6Lzzmx zURo>}rOU-jT~{k>7Nkl{y5RqN=C|f~p}QRxCB0CZckOPxs<_UF?Iv4Q*W6;s$eCVu zCRP5W@Pc~tf@aRjO-l1}Zbv6x_+_CKzhqIS>WshJ=A<?DxjMW}2$<JrWmJ^Kd!9M$ z%cd|Xsg#%-CzAISv^(ZFUS4_eosa%&o~z}|hdf>_i2rx3p?F?Fa7v)l1OAwgGxo1B z)LE#<*|t&J_sGUIr6uQIhA;j2F<txBwj_yfftN+h((d?O$!2YpHPVwg{A1!T5t+jg zPcJ<d`=-md%l&V!+%zkJ4YvdKpXFoP(<FE8z@jq4{S{sJs`HL2B)q>QP|h!SaGIR( z;awUB%-J<|%8Qr_eC%|YqmWd)wB2HZmi&k1K}UDky9*r5S9x|q@z8GDGQFh0{VN`F z$>umG>k4z+?EK%=%dB{D=CLlG9kcDaQ(kF4IHmYxv-bD&E>1I(Q@myS7(0SWG%|YD zGzyfdTYi*siV(QOA*aK`T(|vj$;SsbnkDpABfs(`MQoK7X5O$W|Hu4wlSMQ7%3m0G z`py3>*>pp3N<3p!i0rHU=r+$qj^h45zs{TCEWn+0^P8yIU2btNUe+INF1qV2UEaRp z<QL!d(_H9D-GN)G56sg`PG$=g*{xC3S?In-qQ$g(?T7FAsS-byzgQ^v;GS&9>HaS> zt~6V0>u2o}oe{L8$V}DhW6!U<-*{w2mVVmBneyTM(HAvW|EN~GZSOcHyJ^SAbUsO& z#hM~=OFsPF``S6jZg%j}GB?$#4JppLm$Hv29OuuJ%43T3n{@Td`sf1<-&qW5gwwZc zO#9M3JFT6cEz)N3OA)yzANvy~ie~P;n|JQ$Ujaj7tE)2=QY0o>*G*ulds5KzsNF>M zd&9~IS>_*^j9Wj=ST@Znpes^<<<DV0EmiNJ2Zt0-9|>zs^N^fU7!;H|JAv!-cVB~p zOkE#DOJ|fB{-|TLdBN<(qNq9bX~09LYn+xTKGPO2Rr`PAMN&zdmZaLVqf4A69GVLE zYMm8iu9!Cc|NT=Ok9=N-W=_yvcGzF<t6>F)iT+JxpA%fd54oqCXe;?BuRj@gy>s6` z)lP#Vj*4$~|7Dj}raV=jo>t^1A@^mY%I>K${5MlgmIoMEpM7Lf(0RnW^5Vp2+xApR zbVpBQv3haDz-ynuldq9%XIhkBKi}G^aNhjo%ffKJ6jQa@hMh;{mRN*8mYa9>WFt$S zFVlhrIp5FR|5yId)1>t5?i-SS-j;rmWP5t>?uGpS*5-aT6VH6yZg#qRzuWdZ_O?e? zR!W2my0gDG_<!tZ#!>bC2lvl-uAg_lG-*?(zvq*+AEnEi{M~OKwoAHW5~s`OxPgCC zR^i!G&wsu8|0wTuapaWLzenajeEat8Tkq-u4+aJX289>@v*TxgSg1IUF}C;k+eg#h Q-2sVvy85}Sb4q9e0RM_kJ^%m! diff --git a/public/manifest.json b/public/manifest.json deleted file mode 100644 index 080d6c77..00000000 --- a/public/manifest.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "short_name": "React App", - "name": "Create React App Sample", - "icons": [ - { - "src": "favicon.ico", - "sizes": "64x64 32x32 24x24 16x16", - "type": "image/x-icon" - }, - { - "src": "logo192.png", - "type": "image/png", - "sizes": "192x192" - }, - { - "src": "logo512.png", - "type": "image/png", - "sizes": "512x512" - } - ], - "start_url": ".", - "display": "standalone", - "theme_color": "#000000", - "background_color": "#ffffff" -} diff --git a/backend_react/__init__.py b/react_backend/__init__.py similarity index 100% rename from backend_react/__init__.py rename to react_backend/__init__.py diff --git a/setupProxy.js b/setupProxy.js deleted file mode 100644 index 0b021257..00000000 --- a/setupProxy.js +++ /dev/null @@ -1,11 +0,0 @@ -const { createProxyMiddleware } = require('http-proxy-middleware'); - -module.exports = function(app) { - app.use( - '/api', - createProxyMiddleware({ - target: 'http://localhost:3000', - changeOrigin: true, - }) - ); -}; \ No newline at end of file diff --git a/src/App.css b/src/App.css deleted file mode 100644 index 74b5e053..00000000 --- a/src/App.css +++ /dev/null @@ -1,38 +0,0 @@ -.App { - text-align: center; -} - -.App-logo { - height: 40vmin; - pointer-events: none; -} - -@media (prefers-reduced-motion: no-preference) { - .App-logo { - animation: App-logo-spin infinite 20s linear; - } -} - -.App-header { - background-color: #282c34; - min-height: 100vh; - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - font-size: calc(10px + 2vmin); - color: white; -} - -.App-link { - color: #61dafb; -} - -@keyframes App-logo-spin { - from { - transform: rotate(0deg); - } - to { - transform: rotate(360deg); - } -} diff --git a/src/App.js b/src/App.js deleted file mode 100644 index 15ae0907..00000000 --- a/src/App.js +++ /dev/null @@ -1,50 +0,0 @@ -import Home from './pages/Home' -import Confirm from './pages/Confirm' -import Progress from './pages/Progress' -import Result from './pages/Result' -import './App.css'; -import React, { useState, useEffect } from "react"; -import axios from "axios"; -import {BrowserRouter, Route, Routes, Switch} from 'react-router-dom'; - -function App() { - // useEffect(() => { - // console.log('print here') - // fetch('/home', { - // method: 'POST', - // headers: { 'Content-Type': 'application/json' }, - // body: JSON.stringify({ }) - // }) - // .then((response) => response.text()) - // .then((data) => console.log('data', data)); - // }, []); - - // useEffect(() => { - // fetch('/api').then(response =>{ - // if(response.ok){ - // return response.json() - // } - // }).then(data => console.log('api', data)) - // }, []) - - return ( - <div> - {/* <Home /> */} - {/* <Confirm /> */} - {/* <Progress /> */} - {/* <Result /> */} - <BrowserRouter> - <Routes> - <Route exact path="/" element={<Home/>}/> - <Route exact path="/confirm" element={<Confirm/>}/> - <Route exact path="/progress" element={<Progress/>}/> - <Route exact path="/result" element={<Result/>}/> - </Routes> - </BrowserRouter> - </div> - ); - -} - - -export default App; diff --git a/src/App.test.js b/src/App.test.js deleted file mode 100644 index c2714159..00000000 --- a/src/App.test.js +++ /dev/null @@ -1,8 +0,0 @@ -import { render, screen } from '@testing-library/react'; -import App from './App'; - -test('renders learn react link', () => { - render(<App />); - const linkElement = screen.getByText(/lol react/i); - expect(linkElement).toBeInTheDocument(); -}); diff --git a/src/components/pytest.png b/src/components/pytest.png deleted file mode 100644 index 272b44ed38c9107f19c99dc9a5ac38593493604f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8124 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 WneV!oSq7S$XYh3Ob6Mw<&;$Uq4ChJ! diff --git a/src/index.css b/src/index.css deleted file mode 100644 index ec2585e8..00000000 --- a/src/index.css +++ /dev/null @@ -1,13 +0,0 @@ -body { - margin: 0; - font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', - 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', - sans-serif; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} - -code { - font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New', - monospace; -} diff --git a/src/index.js b/src/index.js deleted file mode 100644 index d563c0fb..00000000 --- a/src/index.js +++ /dev/null @@ -1,17 +0,0 @@ -import React from 'react'; -import ReactDOM from 'react-dom/client'; -import './index.css'; -import App from './App'; -import reportWebVitals from './reportWebVitals'; - -const root = ReactDOM.createRoot(document.getElementById('root')); -root.render( - <React.StrictMode> - <App /> - </React.StrictMode> -); - -// If you want to start measuring performance in your app, pass a function -// to log results (for example: reportWebVitals(console.log)) -// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals -reportWebVitals(); diff --git a/src/logo.svg b/src/logo.svg deleted file mode 100644 index 9dfc1c05..00000000 --- a/src/logo.svg +++ /dev/null @@ -1 +0,0 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 841.9 595.3"><g fill="#61DAFB"><path d="M666.3 296.5c0-32.5-40.7-63.3-103.1-82.4 14.4-63.6 8-114.2-20.2-130.4-6.5-3.8-14.1-5.6-22.4-5.6v22.3c4.6 0 8.3.9 11.4 2.6 13.6 7.8 19.5 37.5 14.9 75.7-1.1 9.4-2.9 19.3-5.1 29.4-19.6-4.8-41-8.5-63.5-10.9-13.5-18.5-27.5-35.3-41.6-50 32.6-30.3 63.2-46.9 84-46.9V78c-27.5 0-63.5 19.6-99.9 53.6-36.4-33.8-72.4-53.2-99.9-53.2v22.3c20.7 0 51.4 16.5 84 46.6-14 14.7-28 31.4-41.3 49.9-22.6 2.4-44 6.1-63.6 11-2.3-10-4-19.7-5.2-29-4.7-38.2 1.1-67.9 14.6-75.8 3-1.8 6.9-2.6 11.5-2.6V78.5c-8.4 0-16 1.8-22.6 5.6-28.1 16.2-34.4 66.7-19.9 130.1-62.2 19.2-102.7 49.9-102.7 82.3 0 32.5 40.7 63.3 103.1 82.4-14.4 63.6-8 114.2 20.2 130.4 6.5 3.8 14.1 5.6 22.5 5.6 27.5 0 63.5-19.6 99.9-53.6 36.4 33.8 72.4 53.2 99.9 53.2 8.4 0 16-1.8 22.6-5.6 28.1-16.2 34.4-66.7 19.9-130.1 62-19.1 102.5-49.9 102.5-82.3zm-130.2-66.7c-3.7 12.9-8.3 26.2-13.5 39.5-4.1-8-8.4-16-13.1-24-4.6-8-9.5-15.8-14.4-23.4 14.2 2.1 27.9 4.7 41 7.9zm-45.8 106.5c-7.8 13.5-15.8 26.3-24.1 38.2-14.9 1.3-30 2-45.2 2-15.1 0-30.2-.7-45-1.9-8.3-11.9-16.4-24.6-24.2-38-7.6-13.1-14.5-26.4-20.8-39.8 6.2-13.4 13.2-26.8 20.7-39.9 7.8-13.5 15.8-26.3 24.1-38.2 14.9-1.3 30-2 45.2-2 15.1 0 30.2.7 45 1.9 8.3 11.9 16.4 24.6 24.2 38 7.6 13.1 14.5 26.4 20.8 39.8-6.3 13.4-13.2 26.8-20.7 39.9zm32.3-13c5.4 13.4 10 26.8 13.8 39.8-13.1 3.2-26.9 5.9-41.2 8 4.9-7.7 9.8-15.6 14.4-23.7 4.6-8 8.9-16.1 13-24.1zM421.2 430c-9.3-9.6-18.6-20.3-27.8-32 9 .4 18.2.7 27.5.7 9.4 0 18.7-.2 27.8-.7-9 11.7-18.3 22.4-27.5 32zm-74.4-58.9c-14.2-2.1-27.9-4.7-41-7.9 3.7-12.9 8.3-26.2 13.5-39.5 4.1 8 8.4 16 13.1 24 4.7 8 9.5 15.8 14.4 23.4zM420.7 163c9.3 9.6 18.6 20.3 27.8 32-9-.4-18.2-.7-27.5-.7-9.4 0-18.7.2-27.8.7 9-11.7 18.3-22.4 27.5-32zm-74 58.9c-4.9 7.7-9.8 15.6-14.4 23.7-4.6 8-8.9 16-13 24-5.4-13.4-10-26.8-13.8-39.8 13.1-3.1 26.9-5.8 41.2-7.9zm-90.5 125.2c-35.4-15.1-58.3-34.9-58.3-50.6 0-15.7 22.9-35.6 58.3-50.6 8.6-3.7 18-7 27.7-10.1 5.7 19.6 13.2 40 22.5 60.9-9.2 20.8-16.6 41.1-22.2 60.6-9.9-3.1-19.3-6.5-28-10.2zM310 490c-13.6-7.8-19.5-37.5-14.9-75.7 1.1-9.4 2.9-19.3 5.1-29.4 19.6 4.8 41 8.5 63.5 10.9 13.5 18.5 27.5 35.3 41.6 50-32.6 30.3-63.2 46.9-84 46.9-4.5-.1-8.3-1-11.3-2.7zm237.2-76.2c4.7 38.2-1.1 67.9-14.6 75.8-3 1.8-6.9 2.6-11.5 2.6-20.7 0-51.4-16.5-84-46.6 14-14.7 28-31.4 41.3-49.9 22.6-2.4 44-6.1 63.6-11 2.3 10.1 4.1 19.8 5.2 29.1zm38.5-66.7c-8.6 3.7-18 7-27.7 10.1-5.7-19.6-13.2-40-22.5-60.9 9.2-20.8 16.6-41.1 22.2-60.6 9.9 3.1 19.3 6.5 28.1 10.2 35.4 15.1 58.3 34.9 58.3 50.6-.1 15.7-23 35.6-58.4 50.6zM320.8 78.4z"/><circle cx="420.9" cy="296.5" r="45.7"/><path d="M520.5 78.1z"/></g></svg> \ No newline at end of file diff --git a/src/pages/Confirm.js b/src/pages/Confirm.js deleted file mode 100644 index 98ba0433..00000000 --- a/src/pages/Confirm.js +++ /dev/null @@ -1,113 +0,0 @@ -import React, { useState, useEffect } from "react"; -import { Grid, ListItem, ListItemAvatar, ListItemText, Card, CardContent, Typography, Button } from '@mui/material'; -import CheckCircleOutlineRoundedIcon from '@mui/icons-material/CheckCircleOutlineRounded'; -import TuneRoundedIcon from '@mui/icons-material/TuneRounded'; -import {useNavigate, Route} from "react-router-dom"; - -export default function Confirm() { - const [myData, setMyData] = useState([]) - const [dataset, setDataset] = useState() - const [network, setNetwork] = useState() - - useEffect(() => { - const res = fetch('/confirm').then( - response => response.json() - ).then(data => {setMyData(data); - if (data.ds == 'Other'){setDataset(data.ds_name)} else {setDataset(data.ds)}; - if (data.IsLeNet == 'Other'){setNetwork(data.network_name)} else {setNetwork(data.IsLeNet)}; - }); - }, []); - - let navigate = useNavigate(); - const onSubmit = async () => { - navigate('/progress', {replace:true}); - }; - - return ( - <div className="App" style={{padding:"60px"}}> - <Typography gutterBottom variant="h3" align="center" > - Data Auto-Augmentation - </Typography> - <Grid> - <Card style={{ maxWidth: 900, padding: "10px 5px", margin: "0 auto" }}> - <CardContent> - <Typography gutterBottom variant="h6" align="left"> - Please confirm the following information: - </Typography> - <Grid alignItems="center" justify="center" > - <Grid style={{maxWidth: 700, padding: "20px 20px"}} container spacing={4} alignItems="center" > - <Grid xs={12} sm={6} item> - <ListItem> - <ListItemAvatar> - <TuneRoundedIcon color="primary" fontSize='large'/> - </ListItemAvatar> - <ListItemText primary="Batch size" secondary={myData.batch_size} /> - </ListItem> - </Grid> - <Grid xs={12} sm={6} item > - <ListItem> - <ListItemAvatar> - <CheckCircleOutlineRoundedIcon color="primary" fontSize='large'/> - </ListItemAvatar> - <ListItemText primary="Dataset selection" secondary={dataset} /> - </ListItem> - </Grid> - <Grid xs={12} sm={6} item> - <ListItem> - <ListItemAvatar> - <TuneRoundedIcon color="primary" fontSize='large'/> - </ListItemAvatar> - <ListItemText primary="Learning rate" secondary={myData.learning_rate} /> - </ListItem> - </Grid> - <Grid xs={12} sm={6} item> - <ListItem> - <ListItemAvatar> - <CheckCircleOutlineRoundedIcon color="primary" fontSize='large'/> - </ListItemAvatar> - <ListItemText primary="Network selection" secondary={network} /> - </ListItem> - </Grid> - <Grid xs={12} sm={6} item> - <ListItem> - <ListItemAvatar> - <TuneRoundedIcon color="primary" fontSize='large'/> - </ListItemAvatar> - <ListItemText primary="Dataset Proportion" secondary={myData.toy_size} /> - </ListItem> - </Grid> - <Grid xs={12} sm={6} item> - <ListItem> - <ListItemAvatar> - <CheckCircleOutlineRoundedIcon color="primary" fontSize='large'/> - </ListItemAvatar> - <ListItemText primary="Auto-augment learner selection" secondary={myData.auto_aug_learner} /> - </ListItem> - </Grid> - <Grid xs={12} sm={6} item> - <ListItem> - <ListItemAvatar> - <TuneRoundedIcon color="primary" fontSize='large'/> - </ListItemAvatar> - <ListItemText primary="Iterations" secondary={myData.iterations} /> - </ListItem> - </Grid> - </Grid> - </Grid> - - <Button - type="submit" - variant="contained" - color='success' - size='large' - onClick={onSubmit} - > - Confirm - </Button> - - </CardContent> - </Card> - </Grid> - </div> - ) -} \ No newline at end of file diff --git a/src/pages/Home.js b/src/pages/Home.js deleted file mode 100644 index 8b745e78..00000000 --- a/src/pages/Home.js +++ /dev/null @@ -1,394 +0,0 @@ -import React, { useState, useEffect } from "react"; -import { Grid, RadioGroup, FormControlLabel, FormControl, FormLabel, Radio, Card, CardContent, Typography, AlertTitle } from '@mui/material'; -import {Button, TextField, Checkbox, Alert} from '@mui/material'; -import { useForm, Controller} from "react-hook-form"; -import SendIcon from '@mui/icons-material/Send'; -import { CardActions, Collapse, IconButton } from "@mui/material"; -import ExpandMoreIcon from '@mui/icons-material/ExpandMore'; -import { styled } from '@mui/material/styles'; -import {useNavigate, Route} from "react-router-dom"; - - - - -const ExpandMore = styled((props) => { - const { expand, ...other } = props; - return <IconButton {...other} />; - })(({ theme, expand }) => ({ - transform: !expand ? 'rotate(0deg)' : 'rotate(180deg)', - marginLeft: 'auto', - transition: theme.transitions.create('transform', { - duration: theme.transitions.duration.shortest, - }), - })); - - - - -export default function Home() { - const [selectLearner, setSelectLearner] = useState([]); - const [selectAction, setSelectAction] = useState([]); - - // for form submission - const {register, control, handleSubmit, setValue, watch, formState: { errors, dirtyFields}} = useForm(); - const watchFileds = watch(['select_dataset', 'select_network']); - - let navigate = useNavigate(); - - const onSubmit = async (data) => { - console.log('data', data); - - const formData = new FormData(); - - formData.append("ds_upload", data.ds_upload[0]); - formData.append("network_upload", data.network_upload[0]); - formData.append("batch_size", data.batch_size) - formData.append("toy_size", data.toy_size) - formData.append("iterations", data.iterations) - formData.append("learning_rate", data.learning_rate) - formData.append("select_action", data.select_action) - formData.append("select_dataset", data.select_dataset) - formData.append("select_learner", data.select_learner) - formData.append("select_network", data.select_network) - - console.log('>>> this is the user input in formData') - for (var key of formData.entries()) { - console.log(key[0] + ', ' + key[1])} - - var responseClone - const res = await fetch('/home', { - method: 'POST', - body: formData - }).then((response) => response.json()); - - navigate('/confirm', {replace:true}); - // - ///////// testing - // .then((response)=> { - // responseClone = response.clone(); // 2 - // return response.json(); - // }) - // .then(function (data) { - // console.log('data from flask', data) - // }, function (rejectionReason) { // 3 - // console.log('Error parsing JSON from response:', rejectionReason, responseClone); // 4 - // responseClone.text() // 5 - // .then(function (bodyText) { - // console.log('Received the following instead of valid JSON:', bodyText); // 6 - // }); - // }); - - }; - - - // body: JSON.stringify(data) - // console.log('errors', errors); - // console.log('handleSubmit', handleSubmit) - - - // handling action selection - const handleActionSelect = (value) => { - const isPresent = selectAction.indexOf(value); - if (isPresent !== -1) { - const remaining = selectAction.filter((item) => item !== value); - setSelectAction(remaining); - } else { - setSelectAction((prevItems) => [...prevItems, value]); - } - }; - - useEffect(() => { - setValue('select_action', selectAction); - }, [selectAction]); - - // collpase - const [expanded, setExpanded] = React.useState(false); - - const handleExpandClick = () => { - setExpanded(!expanded); - }; - - return ( - <div className="App" style={{padding:"60px"}}> - <Typography gutterBottom variant="h3" align="center" > - Data Auto-Augmentation - </Typography> - <Grid > - <form action="/home" method="POST" onSubmit={handleSubmit(onSubmit)}> - <Grid style={{padding:"30px 0px"}}> - <Card style={{ maxWidth: 900, padding: "10px 5px", margin: "0 auto" }}> - <CardContent> - <Typography gutterBottom variant="h5" align="left"> - Dataset Uploading - </Typography> - - <FormControl style={{ maxWidth: 800, padding:"20px"}} error={Boolean(errors.select_dataset)}> - <FormLabel id="select_dataset" align="left" variant="h6"> - Please select the dataset you'd like to use here or select 'Other' if you would like to upload your own dataset - </FormLabel> - <Controller - name='select_dataset' - control={control} - rules={{ required: true }} - render={({field: { onChange, value }}) => ( - <RadioGroup - row - aria-labelledby="select_dataset" - // defaultValue="Other" - name="select_dataset" - align="centre" - value={value ?? ""} - onChange={onChange} - > - <FormControlLabel value="MNIST" control={<Radio />} label="MNIST" /> - <FormControlLabel value="KMNIST" control={<Radio />} label="KMNIST" /> - <FormControlLabel value="FashionMNIST" control={<Radio />} label="FashionMNIST" /> - <FormControlLabel value="CIFAR10" control={<Radio />} label="CIFAR10" /> - <FormControlLabel value="CIFAR100" control={<Radio />} label="CIFAR100" /> - <FormControlLabel value="Other" control={<Radio />} label="Other" /> - </RadioGroup> - )} - /> - {errors.select_dataset && errors.select_dataset.type === "required" && - <Alert severity="error"> - <AlertTitle>This field is required</AlertTitle> - </Alert>} - {watchFileds[0]!=='Other' && - <input - {...register('ds_upload')} - name="ds_upload" - type="file" - hidden - />} - {watchFileds[0]==='Other' && - <Button - variant="contained" - component="label" - > - Upload File - <input - {...register('ds_upload')} - name="ds_upload" - type="file" - hidden - /> - </Button> - } - {dirtyFields.ds_upload && <Alert severity="success" variant='outlined'>File Submitted</Alert>} - </FormControl> - </CardContent> - </Card> - </Grid> - <Grid style={{padding:"30px 0px"}}> - <Card style={{ maxWidth: 900, padding: "10px 5px", margin: "0 auto" }}> - <CardContent> - <Typography gutterBottom variant="h5" align="left"> - Network Uploading - </Typography> - - <FormControl style={{ maxWidth: 800, padding:"20px"}} error={Boolean(errors.select_network)}> - <FormLabel id="select_network" align="left" variant="h6"> - Please select the network you'd like to use here or select 'Other' if you would like to upload your own network - </FormLabel> - <Controller - name='select_network' - control={control} - rules={{ required: true }} - render={({field: { onChange, value }}) => ( - <RadioGroup - row - aria-labelledby="select_network" - name="select_network" - align="centre" - value={value ?? ""} - onChange={onChange} - > - <FormControlLabel value="LeNet" control={<Radio />} label="LeNet" /> - <FormControlLabel value="SimpleNet" control={<Radio />} label="SimpleNet" /> - <FormControlLabel value="EasyNet" control={<Radio />} label="EasyNet" /> - <FormControlLabel value="Other" control={<Radio />} label="Other" /> - </RadioGroup> )} - /> - {errors.select_network && errors.select_network.type === "required" && - <Alert severity="error"> - <AlertTitle>This field is required</AlertTitle> - </Alert>} - <Typography style={{ maxWidth: 750}} variant="body2" color="textSecondary" component="p" gutterBottom align="left"> - The networks provided above are for demonstration purposes. The relative training time is: LeNet {'>'} SimpleNet {'>'} EasyNet. - We recommend you to choose EasyNet for a quick demonstration of how well our auto-augment agents can perform. - </Typography> - {watchFileds[1]!=='Other' && - <input - {...register('network_upload')} - name="network_upload" - type="file" - hidden - />} - {watchFileds[1]==='Other' && - <Button - variant="contained" - component="label" - > - Upload File - <input - {...register('network_upload')} - name="network_upload" - type="file" - hidden - /> - </Button> - } - {dirtyFields.network_upload && <Alert severity="success" variant='outlined'>File Submitted</Alert>} - </FormControl> - </CardContent> - </Card> - </Grid> - - <Grid style={{padding:"30px 0px"}}> - <Card style={{ maxWidth: 900, padding: "10px 5px", margin: "0 auto" }}> - <CardContent> - <Typography gutterBottom variant="h5" align="left"> - Auto-augment Learner Selection - </Typography> - - <FormControl style={{ maxWidth: 800, padding:"20px"}} error={Boolean(errors.select_learner)}> - <FormLabel id="select_learner" align="left" variant="h6"> - Please select the auto-augment learners you'd like to use (multiple learners can be selected) - </FormLabel> - <Controller - name='select_learner' - control={control} - rules={{ required: true }} - render={({field: { onChange, value }}) => ( - <RadioGroup - row - aria-labelledby="select_learner" - name="select_learner" - align="centre" - value={value ?? ""} - onChange={onChange} - > - <FormControlLabel value="UCB learner" control={<Radio />} label="UCB learner" /> - <FormControlLabel value="Evolutionary learner" control={<Radio />} label="Evolutionary learner" /> - <FormControlLabel value="Random Searcher" control={<Radio />} label="Random Searcher" /> - <FormControlLabel value="GRU Learner" control={<Radio />} label="GRU Learner" /> - </RadioGroup> )} - /> - {errors.select_learner && errors.select_learner.type === "required" && - <Alert severity="error"> - <AlertTitle>This field is required</AlertTitle> - </Alert>} - <Typography style={{ maxWidth: 800}} variant="body2" color="textSecondary" component="p" gutterBottom align="left"> - (give user some recommendation here...) - </Typography> - </FormControl> - </CardContent> - </Card> - </Grid> - - - <Grid style={{padding:"30px 0px", maxWidth: 900, margin: "0 auto"}}> - <Card style={{ maxWidth: 900, padding: "10px 5px", margin: "0 auto" }}> - <CardContent> - <Typography variant="h5" align="left"> - Advanced Search - </Typography> - </CardContent> - <CardActions disableSpacing> - <ExpandMore - expand={expanded} - onClick={handleExpandClick} - aria-expanded={expanded} - aria-label="show more" - > - <ExpandMoreIcon /> - </ExpandMore> - </CardActions> - <Collapse in={expanded} timeout="auto" unmountOnExit> - <Grid container - spacing={0} - direction="column" - alignItems="center" - justify="center"> - <CardContent> - <Typography gutterBottom variant="subtitle1" align='left'> - Please input the hyperparameter you'd like to train your dataset with - </Typography> - <Grid container spacing={1} style={{maxWidth:800, padding:"10px 10px"}}> - <Grid xs={12} sm={6} item> - <TextField type="number" InputProps={{ inputProps: { min: 0} }} {...register("batch_size")} name="batch_size" placeholder="Batch Size" label="Batch Size" variant="outlined" fullWidth /> - </Grid> - <Grid xs={12} sm={6} item> - <TextField type="number" inputProps={{step: "0.000000001",min: 0}} {...register("learning_rate")} name="learning_rate" placeholder="Learning Rate" label="Learning Rate" variant="outlined" fullWidth /> - </Grid> - <Grid xs={12} sm={6} item> - <TextField type="number" InputProps={{ inputProps: { min: 0} }} {...register("iterations")} name="iterations" placeholder="Number of Iterations" label="Iterations" variant="outlined" fullWidth /> - </Grid> - <Grid xs={12} sm={6} item> - <TextField type="number" inputProps={{step: "0.01", min: 0}} {...register("toy_size")} name="toy_size" placeholder="Dataset Proportion" label="Dataset Proportion" variant="outlined" fullWidth /> - </Grid> - <FormLabel variant="h8" align='centre'> - * Dataset Proportion defines the percentage of original dataset our auto-augment learner will use to find the - augmentation policy. If your dataset is large, we recommend you to set Dataset Proportion a small value (0.1-0.3). - </FormLabel> - </Grid> - - <Grid style={{maxWidth:800, padding:"40px 10px"}}> - <Typography gutterBottom variant="subtitle1" align='left'> - Please select augmentation methods you'd like to exclude - </Typography> - <div> - {['ShearX', 'ShearY', 'TranslateX', 'TranslateY', 'Rotate', 'Brightness', - 'Color', 'Contrast', 'Sharpness', 'Posterize', 'Solarize', 'AutoContrast', - 'Equalize', 'Invert'].map((option) => { - return ( - <FormControlLabel - control={ - <Controller - name='select_action' - render={({}) => { - return ( - <Checkbox - checked={selectAction.includes(option)} - onChange={() => handleActionSelect(option)}/> ); - }} - control={control} - />} - label={option} - key={option} - /> - ); - })} - </div> - </Grid> - </CardContent> - </Grid> - </Collapse> - - </Card> - </Grid> - - <Button - type="submit" - variant="contained" - color='success' - size='large' - endIcon={<SendIcon />} - > - Submit Form - </Button> - {watchFileds[0]==='Other' && !dirtyFields.ds_upload && - <Alert severity="error" variant='standard'>Please upload your dataset - zip file or select one of the dataset we have provided</Alert>} - {watchFileds[1]==='Other' && !dirtyFields.network_upload && - <Alert severity="error" variant='standard'>Please upload your network - .pkl file or select one of the network we have provided</Alert>} - - </form> - - </Grid> - </div> - - ); - } - diff --git a/src/pages/Progress.js b/src/pages/Progress.js deleted file mode 100644 index 2dee4fb5..00000000 --- a/src/pages/Progress.js +++ /dev/null @@ -1,69 +0,0 @@ -import React, { useState, useEffect } from "react"; -import { Grid, LinearProgress, Card, CardContent, Typography, Button, TextField } from '@mui/material'; -import CheckCircleOutlineRoundedIcon from '@mui/icons-material/CheckCircleOutlineRounded'; -import TuneRoundedIcon from '@mui/icons-material/TuneRounded'; -import {useNavigate, Route} from "react-router-dom"; - - - -export default function Training() { - let navigate = useNavigate(); - - const [status, setStatus] = useState("Training"); - useEffect(() => { - const res = fetch('/training' - ).then(response => response.json() - ).then(data => {setStatus(data.status); console.log(data.status)}); - - - }, []); - - const onSubmit = async () => { - navigate('/result', {replace:true}); - } - - return ( - <div className="App" style={{padding:"60px"}}> - <Typography gutterBottom variant="h3" align="center" > - Data Auto-Augmentation - </Typography> - <Card style={{ maxWidth: 900, padding: "10px 5px", margin: "0 auto" }}> - <CardContent> - <Grid style={{padding:"30px"}}> - <Typography gutterBottom variant="h6" align="center" > - Our auto-augment learners are working hard to generate your data augmentation policy ... - </Typography> - </Grid> - - {status==="Training" && - <Grid style={{padding:"60px"}}> - <LinearProgress color="primary"/> - <LinearProgress color="primary" /> - <LinearProgress color="primary" /> - <LinearProgress color="primary" /> - </Grid> - } - - <Grid style={{padding:"50px"}}> - <Typography variant='h6'> - Current status: {status} - </Typography> - </Grid> - - {status==="Training is done!" && - <Button - type="submit" - variant="contained" - color='primary' - size='large' - onClick={onSubmit} - > - Show Results - </Button> - } - </CardContent> - </Card> - - </div> - ) -} \ No newline at end of file diff --git a/src/pages/Result.js b/src/pages/Result.js deleted file mode 100644 index 70dec30c..00000000 --- a/src/pages/Result.js +++ /dev/null @@ -1,61 +0,0 @@ -import React, { useState, useEffect } from "react"; -import { Grid, List, ListItem, Avatar, ListItemAvatar, ListItemText, Card, CardContent, Typography, Button, CardMedia } from '@mui/material'; -import output from './pytest.png' -import {useNavigate, Route} from "react-router-dom"; -import axios from 'axios' -import fileDownload from 'js-file-download' - -export default function Result() { - - const handleClick = () => { - axios.get('/result', { - responseType: 'blob', - }) - .then((res) => { - fileDownload(res.data, 'policy.txt'); - console.log(res.data) - }) - } - - return ( - <div className="App" style={{padding:"60px"}}> - <Typography gutterBottom variant="h3" align="center" > - Data Auto-Augmentation - </Typography> - <Card style={{ maxWidth: 900, padding: "10px 5px", margin: "0 auto" }}> - <CardContent> - <Typography gutterBottom variant="h5" align="left"> - Here are the results from our auto-augment agent: - </Typography> - <Grid style={{padding:"30px"}} container spacing={4} alignItems="center"> - <Grid xs={7} item> - <img src={output} alt='output' /> - </Grid> - <Grid xs={5} item> - <Typography> - write something here to explain the meaning of the graph to the user - </Typography> - </Grid> - </Grid> - - <Typography gutterBottom variant='h6' align='center'> - You can download the augentation policy here - </Typography> - <Button - type="submit" - variant="contained" - color='primary' - size='large' - onClick={() => handleClick('https://avatars.githubusercontent.com/u/9919?s=280&v=4', 'sample')} - > - Download - </Button> - <Typography> - Please follow our documentation to apply this policy to your dataset. - </Typography> - </CardContent> - </Card> - - </div> - ) -} \ No newline at end of file diff --git a/src/pages/WrongDS.js b/src/pages/WrongDS.js deleted file mode 100644 index e69de29b..00000000 diff --git a/src/pages/pytest.png b/src/pages/pytest.png deleted file mode 100644 index 272b44ed38c9107f19c99dc9a5ac38593493604f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8124 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 WneV!oSq7S$XYh3Ob6Mw<&;$Uq4ChJ! diff --git a/src/reportWebVitals.js b/src/reportWebVitals.js deleted file mode 100644 index 5253d3ad..00000000 --- a/src/reportWebVitals.js +++ /dev/null @@ -1,13 +0,0 @@ -const reportWebVitals = onPerfEntry => { - if (onPerfEntry && onPerfEntry instanceof Function) { - import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => { - getCLS(onPerfEntry); - getFID(onPerfEntry); - getFCP(onPerfEntry); - getLCP(onPerfEntry); - getTTFB(onPerfEntry); - }); - } -}; - -export default reportWebVitals; diff --git a/src/setupTests.js b/src/setupTests.js deleted file mode 100644 index 8f2609b7..00000000 --- a/src/setupTests.js +++ /dev/null @@ -1,5 +0,0 @@ -// jest-dom adds custom jest matchers for asserting on DOM nodes. -// allows you to do things like: -// expect(element).toHaveTextContent(/react/i) -// learn more: https://github.com/testing-library/jest-dom -import '@testing-library/jest-dom'; diff --git a/test/web_app/test_flask_routes.py b/test/web_app/test_flask_routes.py index f3dac791..cbbfb558 100644 --- a/test/web_app/test_flask_routes.py +++ b/test/web_app/test_flask_routes.py @@ -1,6 +1,6 @@ import pytest import unittest -from backend_react import react_app +from . import react_app import json -- GitLab