From f0b83332c5ebce49f70ce7184253379a054fa87d Mon Sep 17 00:00:00 2001 From: nGeorgit Date: Sun, 7 May 2023 10:45:03 +0300 Subject: [PATCH 1/3] backend communication --- backend/api/server.py | 6 ++-- .../core/__pycache__/canvas.cpython-38.pyc | Bin 8289 -> 8766 bytes backend/core/canvas.py | 4 ++- backend/core/dfs.py | 31 +++++++++++++++--- 4 files changed, 33 insertions(+), 8 deletions(-) diff --git a/backend/api/server.py b/backend/api/server.py index afe920b..1b511af 100644 --- a/backend/api/server.py +++ b/backend/api/server.py @@ -61,10 +61,10 @@ async def start_solution(request: Request): print(lines, holes, columns, is_rotated,letters) # UNCOMMENT AUTO EDW # TA HOLES THELOUN ME MOD KAI DIV NA GINOUN X,Y - # string_arr,runtime = measure_time(run, letters, canvas.__init__(lines, columns, holes), rotation_allows=is_rotated) + string_arr,runtime = measure_time(run, letters, lines, columns, holes), rotation_allows=is_rotated) # COMMENT AUTA EDW - string_solution = "FFLLI YFFLI YFTLI YFTLI YTTTI" - string_arr = [string_solution] + # string_solution = "FFLLI YFFLI YFTLI YFTLI YTTTI" + # string_arr = [string_solution] # EDW PAEI STO SOLUTIONS TA POLLA STO SOLUTION TO MONO(TO SOLUTION DEN EINAI ANAGKAIO ISA ISA TO EKANA COMMENT OUT APO # TO FRONTEND) # STO FRONTEND EXW KANEI DUPLICATE GIA NA MPOROYME NA VLEPOUME POLLAPLA THA XREIASTEI NA AFAIRETHEI KATI diff --git a/backend/core/__pycache__/canvas.cpython-38.pyc b/backend/core/__pycache__/canvas.cpython-38.pyc index 0ee1922b947a5659fd1c2d1f94fe5e6e70c2da78..7256f2141f01f86deaa00660a961b41265f5defa 100644 GIT binary patch delta 1459 zcmZuxO>7%Q6rMNx^pNUvL%d|X}VHpcN&f-k; z?{G0729fK1ESD8eBG)IL5<{D8CTcaK4U4By8#@$>@;oDQ$i&5ncoyvw;<*pS^C%=S zxFJR{*$d(b8l)cMIwr=ENsAZ7OX!h751-W~j_zpUm^hA1zpEJ#Cs6aUcm*|s;?>hE zH?gvYhb=P!@#c=79zkgr>MX`iGdYO{IWBu~lV{X)EPiCZ zv{tO-t(Dcv<@~%=DA+{`#1R-=iJh7&uFu({9Y%YfKhX!Uy7yK0Ne&;YhvCoQQ?=SN z3g^_9JvWRQ^t+@cBY(V`M@a_vp$DZ#WYMbR?TTC~F6K)M`IR{oH|ogPAp{0q&~bUe zkMEUaD|ypL6?-qh*Xn-ne{fsf@4F3m)n>E;->ZM4HTXeYj!o2PCQMvzD{f+A1XMYG zJgZ{^9N6V`R)?zQz_K>QwqW*ZRYwcM(RcMaJI||T)#I1~E^;~P7=j;X$eGwqgW4&0 zj3IM=pYgbsg@bd=HN}p%Oh4JD452wjjJW~b8L>9Oqh}mNdq41mRB|A!o`(+#05|R!ZxZ zq`7Vw#gee>hM(qPzEqOJcIPi77>dq1JpehYzd9l{X6*$Qx) zuCO~}?yd(kKSc0+u>86o&%9+vw#^mb>b1lMJW_WOU%=n$o#YTKDVe-8SfK1H2suxy z5>iwMRtbt~AemN+sUZBL)>6mJC6`v;r1D)&kgp;E()#87Nc5~?@Iz)k_!^$izx_JvwLF$?X_hv^>sdX+hDDAkY@BoVhpqp4Y0Qup!7Of>WBpM} z!}ucLR%{|Q_D?V6G~+gMOx%t+%CE;3Y^6C)y*1pi$a`@o<|!fZpVD2}MotpjaW|DT zP>I*7!99yE+>0ILq^e3I?jxlWyGTjn{*x?sV0DQ@V6`(80w}JY*xb$GhP+jG8*a)- zI1i^~Px!uemabx2ehGif4N@cmzfnigTHUBsF4$tcI9e!;6efqtV*JXI{1%A?;>U)H zmxt_pH9Ae+&ood`r>iZ6?U7N z5j4EbdQea5$ri&K{Us>0-HH zOJ``J-OL1BrwzqqBD<+JNWL=sV1nNroMreE DRF>jW diff --git a/backend/core/canvas.py b/backend/core/canvas.py index 4975af1..e4de995 100644 --- a/backend/core/canvas.py +++ b/backend/core/canvas.py @@ -107,6 +107,8 @@ def count_filled_cells(self) -> int: #not hole or shape return (the_sum + len(self.holes)) + def count_empty_cells(self) -> int: + return (self.dimensions[0] * self.dimensions[1]) - self.count_filled_cells() def get_all_available_positions(self,s:Shape)->List[Tuple[int,int]]: matrix_set = set() for row in range(self.dimensions[0]): @@ -156,7 +158,7 @@ def get_all_non_available_positions(self,s:Shape)->List[Tuple[int,int]]: return list(set(positions)) - def get_sring_of_matrix(self): + def get_string_of_matrix(self): matrix = self.get_matrix() my_string = "" for i in matrix: diff --git a/backend/core/dfs.py b/backend/core/dfs.py index 880dbd3..6c4976c 100644 --- a/backend/core/dfs.py +++ b/backend/core/dfs.py @@ -101,7 +101,7 @@ def measure_time(func: Callable[..., Any], *args: Tuple[Any], **kwargs: Any) -> #print(f"Function {func.__name__} took {running_time:.6f} seconds to run.") return result, running_time -def run(): +def run(let: List[str], li: int, col: int, hol:List[str] , rot_all: bool = True): # x, y = 15, 15 #letters = [("F", 3), ("I", 5), ("L", 4), ("N", 4), ("P", 3), ("T", 3), ("U", 2), ("V", 3), ("W", 3), ("X", 3), ("Y", 4), ("Z", 3)] # root = NodeT(["T", "F", "I", "Y", "L"], Canvas(5, 5, [])) @@ -117,11 +117,34 @@ def run(): # for i in children: # frontier.append(i) #leafs = dfs(["T", "F", "I", "Y", "L"], Canvas(5, 5, [])) - leafs, time = measure_time(dfs, ["T", "F", "I", "Y", "L"], Canvas(5, 5, [])) + + holes = [] + # const + # x_values = holes.map((hole) = > hole % columns) + # const + # y_values = holes.map((hole) = > Math.floor(hole / columns)) + for hole in hol: + holes.append((int(hole) % col, int(hole) // col)) + + + + + + + + letters = let + lines = li + columns = col + + rotation_allows = rot_all + leafs = dfs(letters, Canvas(lines, columns, holes), rotation_allows) + solutions = [] for i in leafs: if i.shapes_remain == []: print(i.canvas.get_matrix(), "\n") - print(time) + if i.canvas.count_empty_cells() == 0: + solutions.append(i.canvas.get_string_of_matrix()) + return list(set(solutions)) -run() \ No newline at end of file +#print(run(["T", "F", "I"], 5, 5, ["0", "6"], True)) From b91ccdb87fdfccacecef348c64ca256fd161f587 Mon Sep 17 00:00:00 2001 From: Georgios Fakidis Date: Sun, 7 May 2023 10:45:15 +0300 Subject: [PATCH 2/3] Implemented download solutions functionality --- frontend/src/App.tsx | 70 +++++++++++++------ frontend/src/components/Canvas.tsx | 3 +- frontend/src/components/ChooseLetters.tsx | 2 - ...loadSolution.tsx => DownloadSolutions.tsx} | 4 +- 4 files changed, 52 insertions(+), 27 deletions(-) rename frontend/src/components/{DownloadSolution.tsx => DownloadSolutions.tsx} (83%) diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx index c06b988..b7b5376 100644 --- a/frontend/src/App.tsx +++ b/frontend/src/App.tsx @@ -8,7 +8,7 @@ import BlankCanvas from './components/BlankCanvas' import ChooseLetters from './components/ChooseLetters' import ShowSelectedLetters from './components/ShowSelectedLetters' import SaveConfiguration from './components/SaveConfiguration.jsx' -import DownloadSolution from './components/DownloadSolution' +import DownloadSolutions from './components/DownloadSolutions' import LoadConfiguration from './components/LoadConfiguration' type CellData = { @@ -31,6 +31,7 @@ function App() { const [multipleResults, setResults] = useState([]) const [time, setTime] = useState("") const [isRotated, setIsRotated] = useState(false) + const [downloadSolutions, setDownloadSolutions] = useState([]) const handleCellClick = (index: number) => { console.log("cell clicked", index) if (holes.includes(index)) { @@ -67,8 +68,8 @@ function App() { holes_coordinates.push([x_values[i], y_values[i]]) } - - console.log("holes_coordinates", holes_coordinates) + let total_result: any[] = [] + //console.log("holes_coordinates", holes_coordinates) const data = { rows: rows, columns: columns, @@ -77,35 +78,60 @@ function App() { isRotated: isRotated } console.log("data", data) - const response = await fetch(`http://localhost:${api_port}/${api_route}`, { + const response = fetch(`http://localhost:${api_port}/${api_route}`, { method: "POST", headers: { "Content-Type": "application/json", 'Access-Control-Allow-Origin': '*' }, body: JSON.stringify(data), + }).then((response) => { + return response.json() + }).then((res: any) => { + console.log(res) + const time = res.time as string; + const solutions = res.solutions as string[]; + total_result = solutions.map((solution: string) => { + return Array.from(solution.replace(/ /g, "")).map((letter, index) => { + return { + size: pixels, + bgcolor: "red", + isRemovedForHole: false, + index: index, + letter: letter + } + + + }) + }) + setDownloadSolutions(solutions) + setResults(total_result) + setTime(time) + }).catch((err: any) => { + console.log(err) }) - console.log("response", response) - const result = await response.json() - console.log(result) - const solution = result.solution as string; - const total_result = Array.from(solution.replace(/ /g, "")).map((letter, index) => { - return { - size: pixels, - bgcolor: "red", - isRemovedForHole: false, - index: index, - letter: letter - } - }) - console.log("TOTAL RESULT IS", total_result) - // setResult(total_result) - setResults([total_result, total_result]) - setTime(result.time) + // console.log("response", response) + // // const result = await response.json() + // console.log(result) + // const solution = result.solution as string; + // const total_result = Array.from(solution.replace(/ /g, "")).map((letter, index) => { + // return { + // size: pixels, + // bgcolor: "red", + // isRemovedForHole: false, + // index: index, + // letter: letter + // } + // }) + + // console.log("TOTAL RESULT IS", total_result) + setResult(total_result) + + // setTime(result.time) // update state with response // console.log("data", data) @@ -147,7 +173,7 @@ function App() { })}
- +
) diff --git a/frontend/src/components/Canvas.tsx b/frontend/src/components/Canvas.tsx index ebdf2bf..43df6c2 100644 --- a/frontend/src/components/Canvas.tsx +++ b/frontend/src/components/Canvas.tsx @@ -32,7 +32,7 @@ function Canvas({ cellsData, handleCellClick, rows, columns }: { cellsData: Cell
{cellsData.map((cellData) => { - console.log(cellData) + return console.log("nothing") } /> })} @@ -64,7 +64,6 @@ export function Cell({ size = 20, bgcolor = "white", isRemovedForHole, holeColor let the_index = -1; for (let i = 0; i < supportedLetters.length; i++) { if (letter === supportedLetters[i]) { - console.log("letter is: ", letter, "and color is: ", letterColors[i]) the_index = i; break; } diff --git a/frontend/src/components/ChooseLetters.tsx b/frontend/src/components/ChooseLetters.tsx index 08588ca..efb48d0 100644 --- a/frontend/src/components/ChooseLetters.tsx +++ b/frontend/src/components/ChooseLetters.tsx @@ -19,11 +19,9 @@ function ChooseLetters({ letterList, setLetterList }: { letterList: string[], se ] const handleLetterClick = (letter: string) => { - console.log(letter) setLetterList(prev => [...prev, letter]) } - console.log(letterList) return ( diff --git a/frontend/src/components/DownloadSolution.tsx b/frontend/src/components/DownloadSolutions.tsx similarity index 83% rename from frontend/src/components/DownloadSolution.tsx rename to frontend/src/components/DownloadSolutions.tsx index 0891191..09948aa 100644 --- a/frontend/src/components/DownloadSolution.tsx +++ b/frontend/src/components/DownloadSolutions.tsx @@ -1,8 +1,10 @@ +import { CellData } from "./Canvas"; -const DownloadSolution = ({ results }: { results: any }) => { +const DownloadSolution = ({ results }: { results: string[] }) => { const handleDownload = () => { const element = document.createElement("a"); + const file = new Blob([JSON.stringify(results)], { type: 'application/json' }); element.href = URL.createObjectURL(file); element.download = "results.json"; From ff642bb4d3a56a3bcf27174374634f67937d5de8 Mon Sep 17 00:00:00 2001 From: George David Apostolidis Date: Sun, 7 May 2023 11:07:07 +0300 Subject: [PATCH 3/3] Beta Version (0.0.1) --- backend/api/server.py | 29 ++++++++++-------- .../__pycache__/canvas.cpython-310.pyc | Bin 0 -> 8728 bytes .../__pycache__/canvas.cpython-38.pyc | Bin .../__pycache__/canvas.cpython-39.pyc | Bin .../__pycache__/dfs.cpython-310.pyc | Bin 0 -> 3759 bytes .../__pycache__/node.cpython-310.pyc | Bin 0 -> 888 bytes .../__pycache__/node.cpython-38.pyc | Bin .../__pycache__/node.cpython-39.pyc | Bin .../__pycache__/shape.cpython-310.pyc | Bin 0 -> 3752 bytes .../__pycache__/shape.cpython-38.pyc | Bin .../__pycache__/shape.cpython-39.pyc | Bin .../__pycache__/tiling.cpython-39.pyc | Bin backend/{core => backend_core}/canvas.py | 2 +- backend/{core => backend_core}/dfs.py | 4 +-- .../{core => backend_core}/genetic_algo.py | 0 backend/{core => backend_core}/main.py | 0 backend/{core => backend_core}/node.py | 0 backend/{core => backend_core}/readme.md | 0 backend/{core => backend_core}/rotation.py | 0 backend/{core => backend_core}/shape.py | 2 +- backend/{core => backend_core}/tiling.py | 0 frontend/src/components/TIme.tsx | 0 22 files changed, 20 insertions(+), 17 deletions(-) create mode 100644 backend/backend_core/__pycache__/canvas.cpython-310.pyc rename backend/{core => backend_core}/__pycache__/canvas.cpython-38.pyc (100%) rename backend/{core => backend_core}/__pycache__/canvas.cpython-39.pyc (100%) create mode 100644 backend/backend_core/__pycache__/dfs.cpython-310.pyc create mode 100644 backend/backend_core/__pycache__/node.cpython-310.pyc rename backend/{core => backend_core}/__pycache__/node.cpython-38.pyc (100%) rename backend/{core => backend_core}/__pycache__/node.cpython-39.pyc (100%) create mode 100644 backend/backend_core/__pycache__/shape.cpython-310.pyc rename backend/{core => backend_core}/__pycache__/shape.cpython-38.pyc (100%) rename backend/{core => backend_core}/__pycache__/shape.cpython-39.pyc (100%) rename backend/{core => backend_core}/__pycache__/tiling.cpython-39.pyc (100%) rename backend/{core => backend_core}/canvas.py (99%) rename backend/{core => backend_core}/dfs.py (98%) rename backend/{core => backend_core}/genetic_algo.py (100%) rename backend/{core => backend_core}/main.py (100%) rename backend/{core => backend_core}/node.py (100%) rename backend/{core => backend_core}/readme.md (100%) rename backend/{core => backend_core}/rotation.py (100%) rename backend/{core => backend_core}/shape.py (99%) rename backend/{core => backend_core}/tiling.py (100%) delete mode 100644 frontend/src/components/TIme.tsx diff --git a/backend/api/server.py b/backend/api/server.py index 1b511af..e028a80 100644 --- a/backend/api/server.py +++ b/backend/api/server.py @@ -2,13 +2,20 @@ from fastapi import HTTPException from fastapi import Request from fastapi.middleware.cors import CORSMiddleware -# from .. import api -import sys import time +import os +import sys +parent_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), "..")) +sys.path.insert(0, parent_dir) + +from backend_core.dfs import run + + from typing import Callable, Any, Tuple -sys.path.append("/backend/core") + +sys.path.append("/backend/backend_core/dfs") # import canvas app = FastAPI() @@ -59,16 +66,12 @@ async def start_solution(request: Request): letters = body["letterList"] is_rotated = body["isRotated"] print(lines, holes, columns, is_rotated,letters) - # UNCOMMENT AUTO EDW - # TA HOLES THELOUN ME MOD KAI DIV NA GINOUN X,Y - string_arr,runtime = measure_time(run, letters, lines, columns, holes), rotation_allows=is_rotated) - # COMMENT AUTA EDW - # string_solution = "FFLLI YFFLI YFTLI YFTLI YTTTI" - # string_arr = [string_solution] - # EDW PAEI STO SOLUTIONS TA POLLA STO SOLUTION TO MONO(TO SOLUTION DEN EINAI ANAGKAIO ISA ISA TO EKANA COMMENT OUT APO - # TO FRONTEND) - # STO FRONTEND EXW KANEI DUPLICATE GIA NA MPOROYME NA VLEPOUME POLLAPLA THA XREIASTEI NA AFAIRETHEI KATI - return {"message": "POST request succeeded","solutions": string_arr,"time":15.0,"solution":string_solution} + start_time = time.time() + string_arr = run(letters, lines, columns, holes, is_rotated) + end_time = time.time() + print("RUNTIME",end_time-start_time) + runtime = end_time-start_time + return {"message": "POST request succeeded","solutions": string_arr,"time":15.0,"solution":string_arr} @app.get("/get_saved_data") diff --git a/backend/backend_core/__pycache__/canvas.cpython-310.pyc b/backend/backend_core/__pycache__/canvas.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c6a1543e447c23245b94299f845eb02a00353ae1 GIT binary patch literal 8728 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 CuZm&- literal 0 HcmV?d00001 diff --git a/backend/core/__pycache__/canvas.cpython-38.pyc b/backend/backend_core/__pycache__/canvas.cpython-38.pyc similarity index 100% rename from backend/core/__pycache__/canvas.cpython-38.pyc rename to backend/backend_core/__pycache__/canvas.cpython-38.pyc diff --git a/backend/core/__pycache__/canvas.cpython-39.pyc b/backend/backend_core/__pycache__/canvas.cpython-39.pyc similarity index 100% rename from backend/core/__pycache__/canvas.cpython-39.pyc rename to backend/backend_core/__pycache__/canvas.cpython-39.pyc diff --git a/backend/backend_core/__pycache__/dfs.cpython-310.pyc b/backend/backend_core/__pycache__/dfs.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..09d3de95cc4dddb61e67b7c1e416f3978e77c810 GIT binary patch literal 3759 zcmaJ^Ns}B$6|StxTDrQrXVGZ1S_l&?4blu@Acz15A&|nt#xWRcEJGVplsa=}TB@$< z$*k5E)e%ID&YU@L=yAY7e<`m%%^5EC1-_TnJ(~i0qF%ntm+O1q`!c8ObYcg;SD$?< z{&~T1zNE_OUmKM>__To#j$pYnVtqDp`|il=dn4ZGjN0AY@B1jdJQ#)j(6;eB8nybZ zxjpW;ZNH?S+;@a8f>(|R4%~hRwNON;MW}T}OT@37{*w5HNF}6vKCAgavPcuEB zVW)o)DtGYdpFv2c&xF%=1(TlLq>Iv*fedKt*z~Cyj>mS3seg| z6#+m|oQ+#NH~xKL{?cyq5D$<19^X5&(C-YW+aY_8Iq zd)eSgR_&F=rj|-cefzlK_M{wbK7v^mVo|1pQpruRqc_GcOq8a>Vpydq`B9Sy82xqG z%LM+|SeUnZ5%n#ykxWw)r|GB^lbrMU zT!>GTJ0s^EW?S9}aR=5r)a`E&ixBT3H@;wyu9c16NYA!3lAp5rr}SWr-6mlD3X4vPE z737X1^28Ax@yLgm+tn55w&y90#+iR(dmCb}3c7Q<78Ks05vRzWP226AUZ`s2@-z8te^op=4n$Ei|2u^K2kR+U%^y z)iQe8vFa9SH1IqI37p@=r)j0YZO|XMF?-py;XKZO0r_h2Bb`2*{{;8id3?NGW>@R6 zW_e286U>`?4p|4w=33wFRTsz3EXRlt1BpE~Nh`!{Mn3u@nv3v2Y5 z26ZrtnikC6n#FZ+NF(2!hSeKAnzd%_Ls}`Sqghf1b$IA9+GPi$TGLkDLVNendE%;c z|Ka|_Y6+AX!M=RpO=FZR*g;G?pfRM=d^CdE_J6*AV;|)Dcm?_9ZXJ>1d#epN_@E>@ z6H<UW|1l47}tn8X4!)h|Ym%G_LPNy6gVS{VKTl^3npo=Vsk{&9-}qS|dMP zB(YB7CnS!q3d0|jW!_v9l$ej6fk0)L*k_VPNV|NHV% z6u<4+K%7aXGZ{?ed`vfXJ-j%=!338n?yr;eX=&3Q>QtBcgs|`tZGjHLnfd_5wh8Ca zJYk#x@&DpSS01fqGx#x-3P=YVx(D9wB0uqfIADT3;p#`VH**gix?!-nTQ9047aA?pgpv01v?^0;rO&c%*(uL;236 z7;G4xsa-s|o;;&c{ScNjAtI(DU;P%JCU{oP%z+oc05u!pvGou3R|Y<7TH&MGy9^)I zyvB2Had$90t?-8Hh3aF>plEw)8^XlMGF7EyB(BwyyfP6ep=n9fq$q~PuC1LvXEKtR zo+xRJf5v2*-gFVNgN_@ys!t2Rzm;+Gq45UDat{wm6H*$3RR;7BSo{da#AFr{UqAs# z<0uH|3J&AXK;jhi+Fd`^uHpe=gUo9OK_|L(L9TonS8g3v9w@a{`v+bfgI3#^FR9y@ z@5Z!KcOLUyqTdfHA9^qg5Al#XAd;q9gqlm%I+-;stvU7Hs^Y3$CkMC|03{D^gSbIc zq6j%nx>9fzg{|Raf2`>JM|W>??~Srb4WFBpK{+X^RF1~gi*z9KT$?rGP7NzuUhaVE zY)78cKL?(cRj;c)qj~>G;&T#zB9W3H=NnEBb`!$ql~j1Y=feW;_Ykh1j6m7;>L(zX z)*^ScqU=2%TMvQXL%Y5S!B-;xCgTwYmbtqIX{iu_US{rJ5?AFk!+nU}x(TWmV{E_S zHOhHK;8hfA^$vttoj=6w1AN1>cXR(-IAfT$J)DrEJnR8O8OdIYOaNDzfI7Yi{C zyi+OlYihIJC+Ic7uzNe@4p}p)Wijs0bZM>IA51_!{}Gnz3+5xMgIlz Cz)Qsd literal 0 HcmV?d00001 diff --git a/backend/backend_core/__pycache__/node.cpython-310.pyc b/backend/backend_core/__pycache__/node.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9b3babb2742e849375f71f568c66e7905548be6a GIT binary patch literal 888 zcmZWmxsKZ~5alIV_S!kN2$KAP0_^Gsf?yZBK$^gfgA{5AS)`9d5*<=1yl@x)jEnpb z+f)Ja1*tMa!3U55=5dBY&YQzbCL;p!^UoJGrG)%K=TbO0ccAVafFg=kq^3EoSDpA8d$rCk#GOoOs8l`H62f;Izv0Cg__c63K1*)c#UU`7sfnlc}k22lh>fD>*G z#E!xKJIhw4*4a{rtQXLK{rX%_^!Om`vF&|sqcD5;Dizh)FHS`vPu_IrhBRd51KrOC5 zrS=MrP<{^+aQ$ehTc`qC#(xec6w{~Yf%6JYAvN7Nm(1!RcMc;{N5E+AF)`A=j*2R+_ly|L&lc~*9f?; z3&5@|wu-+T(kJ9CeZ|Kt+)mTj$L)5rZk8dh#a&q3g^dvK=S8-VJPa~<-&gkm_Yju% Hnq1R=4Pm)D literal 0 HcmV?d00001 diff --git a/backend/core/__pycache__/node.cpython-38.pyc b/backend/backend_core/__pycache__/node.cpython-38.pyc similarity index 100% rename from backend/core/__pycache__/node.cpython-38.pyc rename to backend/backend_core/__pycache__/node.cpython-38.pyc diff --git a/backend/core/__pycache__/node.cpython-39.pyc b/backend/backend_core/__pycache__/node.cpython-39.pyc similarity index 100% rename from backend/core/__pycache__/node.cpython-39.pyc rename to backend/backend_core/__pycache__/node.cpython-39.pyc diff --git a/backend/backend_core/__pycache__/shape.cpython-310.pyc b/backend/backend_core/__pycache__/shape.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4fa891dd6c078c2e0792be7754bf50cb5556339a GIT binary patch literal 3752 zcmai0OLN@D5ys%P;1XOuL_H|miYz;l*S5qY&cm-tIk6(gRq~cAQsiVE7Yf`NEmy<> zs{z&)RnW!M&+vitO}{6%x#q+lkV=&gw!dxw+$BX-b_+c{-93%&o_-)(T54PP6<>ZK z|Gi>a|DnzN&%x#+Jo(=Mq$NdS^#!kX-{I9AdwpLJ&rVw7pdXAE`U~TBzdc^;FEZUp z!tqjnNm!p)(v{v*OL}{DzazyRtLq;^uhr|i#=Skt3*+6LP7-B;kK-hXw}3f+N_V@$ zxV=oO0m;t)RhOq8? zaUg2ko5TG%yfudhbNIp>-k!r3=kRb2UutmKk;`(WvPZ5Cy(0_ONJ5_ZF6{eqUA6Ap z@~k}f)a?iIyu9$#>MzI*)duyVdp5jjRAkX0%e2fRIT{qEeJ@U?>MvSn+IZ6m(#m*W6Un?Z&?+ue zl%nYKD7znR#rbFuu@>Vo)%ckn4M(Zz=&Xo~QI5;&v$>*gJN1 z0k{L)sd2>ofxBZP#&+*k*E8)=K1$(vI#9X=Mfxg%E`c`zkeqK}F^u!Jp|{D^-NH=_ha05Dvg~^j3cwctTyk7#&MxXk5rCws7y!HWv(eo^<^tr z3mGvw>CzhOQS%u?S)7x#t_Z|Mx|$1>i_eQ1al9JHPkPwTE68T}X;;2Vv199Hstr71 z1OBJ~Dlv9Iy@c98Ei@b{4s38g0~fcb-#LxTG>j{jd>4|qW8M3IlE+THf>Rz&eRblL z%{n{a`rz)I;5x)DoPzGk+Y@_qhav6|yVBjT_WjbKmG4heFNj)2u)je3s`jC;jol(i zaP7Bx)hyuFyoTT%Qsx{|ejQRQyPb}05hJB(;-HEqEh_^5!$&b>Q=#7tbfO1 zvDWdfxj5J+aVkc1lC9k+j!@JiY5|=0b>8R?=_T*c!No$2Cw0o`_lbO>4#GMUxU}g= zP694cB@i7v=kTmEwvPIqQP#lmv0o97*N&wWD>6Z2*Rk5CXi%kcPTd58=vj#R#uK}= z_XQqwSc#0njRBswY6|KI6u|Qs=zJfjINS$5!%$V|xJT2q>v9qRs?PZodn;AG!LpVa+>*OdFF3K;`eaAuKqSI3e|tMa^{4b z@hhdz-PMr?m!N6Rdb%szR$Uu>3zhZuEc#8bKO;|0%e>`Trn9wQlC@RfVe3zgttX_8 z*+_+Tluy6MhI$m)St5IoSF7mEu(hyD^cUoiLpgMxB%Hk}k6I<>iT*2&B6GMlIr3x% zS1G6zejcf2fyOV}dYVJ}8U!Oeb;vv7GKKurI)7d~){i9)B@umyaEZ`hWp~hK&m+~F zAYTQ&nsK5s??h3r(FNzbAFOPgX`$pkNPKv{$8SuPNuX~n8dm4`w=3hIC#+jTZ zgojb|a2h8ShkKGH3-uoeP~41@7h2z-?XP(|N()UbPTwNn5TNqXWP`p#P4?KH!3Iv-fB?c2VvfAqaM_`h%^M1MN|KSy6A|LrUVLC5QO=QcVnpd0$E zvAc}Vsp)vKTXonVRmC@%-g$(%{K%|g5>Jw>NJd-u+#$^P_3BI#Y>M5>VLuy2%# rn(D=@)}K!N$#jEKrgD-J^)&xX@L?6^KhoXjAwXaSF#UoE?KS&n!R|1F literal 0 HcmV?d00001 diff --git a/backend/core/__pycache__/shape.cpython-38.pyc b/backend/backend_core/__pycache__/shape.cpython-38.pyc similarity index 100% rename from backend/core/__pycache__/shape.cpython-38.pyc rename to backend/backend_core/__pycache__/shape.cpython-38.pyc diff --git a/backend/core/__pycache__/shape.cpython-39.pyc b/backend/backend_core/__pycache__/shape.cpython-39.pyc similarity index 100% rename from backend/core/__pycache__/shape.cpython-39.pyc rename to backend/backend_core/__pycache__/shape.cpython-39.pyc diff --git a/backend/core/__pycache__/tiling.cpython-39.pyc b/backend/backend_core/__pycache__/tiling.cpython-39.pyc similarity index 100% rename from backend/core/__pycache__/tiling.cpython-39.pyc rename to backend/backend_core/__pycache__/tiling.cpython-39.pyc diff --git a/backend/core/canvas.py b/backend/backend_core/canvas.py similarity index 99% rename from backend/core/canvas.py rename to backend/backend_core/canvas.py index e4de995..ae04efd 100644 --- a/backend/core/canvas.py +++ b/backend/backend_core/canvas.py @@ -2,7 +2,7 @@ import networkx as nx import matplotlib.pyplot as plt from typing import List, Tuple, Callable, Any -from shape import Shape +from backend_core.shape import Shape diff --git a/backend/core/dfs.py b/backend/backend_core/dfs.py similarity index 98% rename from backend/core/dfs.py rename to backend/backend_core/dfs.py index 6c4976c..411c95a 100644 --- a/backend/core/dfs.py +++ b/backend/backend_core/dfs.py @@ -1,7 +1,7 @@ from typing import List, Tuple, Callable, Any import copy -from shape import Shape -from canvas import Canvas +from backend_core.shape import Shape +from backend_core.canvas import Canvas import networkx as nx import time class Dfs(): diff --git a/backend/core/genetic_algo.py b/backend/backend_core/genetic_algo.py similarity index 100% rename from backend/core/genetic_algo.py rename to backend/backend_core/genetic_algo.py diff --git a/backend/core/main.py b/backend/backend_core/main.py similarity index 100% rename from backend/core/main.py rename to backend/backend_core/main.py diff --git a/backend/core/node.py b/backend/backend_core/node.py similarity index 100% rename from backend/core/node.py rename to backend/backend_core/node.py diff --git a/backend/core/readme.md b/backend/backend_core/readme.md similarity index 100% rename from backend/core/readme.md rename to backend/backend_core/readme.md diff --git a/backend/core/rotation.py b/backend/backend_core/rotation.py similarity index 100% rename from backend/core/rotation.py rename to backend/backend_core/rotation.py diff --git a/backend/core/shape.py b/backend/backend_core/shape.py similarity index 99% rename from backend/core/shape.py rename to backend/backend_core/shape.py index aff9827..effa1df 100644 --- a/backend/core/shape.py +++ b/backend/backend_core/shape.py @@ -3,7 +3,7 @@ import matplotlib.pyplot as plt from typing import List, Tuple, Callable, Any #from canvas import Canvas -from node import Node +from backend_core.node import Node class Shape(): diff --git a/backend/core/tiling.py b/backend/backend_core/tiling.py similarity index 100% rename from backend/core/tiling.py rename to backend/backend_core/tiling.py diff --git a/frontend/src/components/TIme.tsx b/frontend/src/components/TIme.tsx deleted file mode 100644 index e69de29..0000000