From 101af0ebc62cd89f5378b29559b336013c147e2e Mon Sep 17 00:00:00 2001
From: Kilian Scheidecker <kilian.scheidecker@orange.fr>
Date: Wed, 22 May 2024 15:01:46 +0200
Subject: [PATCH] included fastapi

---
 backend/app/__init__.py                       |   0
 .../app/__pycache__/__init__.cpython-310.pyc  | Bin 0 -> 199 bytes
 backend/app/__pycache__/main.cpython-310.pyc  | Bin 0 -> 986 bytes
 backend/app/dependencies.py                   |   1 +
 backend/{src => app}/main.py                  |  18 +++++++++++++-----
 backend/app/src/__init__.py                   |   0
 .../src/__pycache__/__init__.cpython-310.pyc  | Bin 0 -> 203 bytes
 .../src/__pycache__/optimizer.cpython-310.pyc | Bin 6065 -> 6114 bytes
 backend/{ => app}/src/main_example.py         |   0
 backend/{ => app}/src/optimizer.py            |  10 +++++-----
 10 files changed, 19 insertions(+), 10 deletions(-)
 create mode 100644 backend/app/__init__.py
 create mode 100644 backend/app/__pycache__/__init__.cpython-310.pyc
 create mode 100644 backend/app/__pycache__/main.cpython-310.pyc
 create mode 100644 backend/app/dependencies.py
 rename backend/{src => app}/main.py (59%)
 create mode 100644 backend/app/src/__init__.py
 create mode 100644 backend/app/src/__pycache__/__init__.cpython-310.pyc
 rename backend/{ => app}/src/__pycache__/optimizer.cpython-310.pyc (51%)
 rename backend/{ => app}/src/main_example.py (100%)
 rename backend/{ => app}/src/optimizer.py (98%)

diff --git a/backend/app/__init__.py b/backend/app/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/backend/app/__pycache__/__init__.cpython-310.pyc b/backend/app/__pycache__/__init__.cpython-310.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..678d7d066fb628b94456ab8b9b89e3cd338ff648
GIT binary patch
literal 199
zcmd1j<>g`kg7aH^(?IlN5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;x_kvsFxJacWU<
zOm=2YW@3y>esXDUYF<fkOn|e3x2KP%qo0DVLUCnYa*S_cL9s%9o<ea+YEgb>N^wkD
zVsVLXUTR5seo?k=USe5hdSXdteqKycVsdtBUP?@2K|xG>d}dx|NqoFsLFFwDo80`A
Q(wtN~kQ<7bfCLKz08t+`9{>OV

literal 0
HcmV?d00001

diff --git a/backend/app/__pycache__/main.cpython-310.pyc b/backend/app/__pycache__/main.cpython-310.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..21f3cee4583cade7331b40935c4fb79e719f22cd
GIT binary patch
literal 986
zcmZ8f%}(1u5Z<*niSt(=;?SdybyeVws;Y>p5^6z6s29tUwRqR*Dz?|!-J~TXr}Qa$
zf+NqtTlm^j)HmQlXRQ!O$J){CH{<>0PxkvA1oH6rG<{1D`eQFIr2&_ZaC8KUA%-)Q
z;}BzOJ77DZQ`>Il<|HH-ak4;RgEwxPjND?@;4RkVUP@StdB4a4hi%?r?UAG2@%942
zznzQv1l=Vtpa53`Ewc%aWobk%rql>o0P1D5U^!JIuv?$0Hb>_t(>DjJD1LCA)1R?6
zywvl9>r#or#74%6EZ{Xhui9&Owf(<0aV+ynpb4l6=NOLu4Qhzy&dj+%1~beY<}Tb@
zD1U_z)?m#Iqy>n#fwTeXY#?1gdK*X|kXIYX)-#s@{u!F#g*$iI_6)I|nVXUe6b#PB
zEy$4F-<4FE<s(SoC=5`ord=b)%I6|YdA3XdUU`?c;OQ1siO;xil#qG(oj*Bk2f}71
z#}l>2Y)8UQE(-%AFweMMp3s9XCsMI>v<K+eDyo#2+~4tO7uxUF)A0{0+zH&ONz0NK
zOt}!IY(4=|cG*--)qa|`4qr`#7Dg1q*ixuFq_!dKAw52fzG<#>G!mJh(I=UVb6yx7
zoge#OPQIQTo%wsdzABRFl$P3;h2>XLFde0^K6?c>KcpJ%6?7to^_E4KG#Noo5u_I7
zR22K=RYj~}Ytg%)h&RA5zn<G8Y5<PPi(?xZ$7ew|>}!?mKdq*!%c~0wTb7!ZLfIx)
zE)Z4jkekYdeXYo)l-c^Vg62Gq>tbK1oto=?F4;KaAMB{LrSG90?%}56xx3hV-NEGX
EA3sR{+W-In

literal 0
HcmV?d00001

diff --git a/backend/app/dependencies.py b/backend/app/dependencies.py
new file mode 100644
index 0000000..2cb6801
--- /dev/null
+++ b/backend/app/dependencies.py
@@ -0,0 +1 @@
+import app.src
\ No newline at end of file
diff --git a/backend/src/main.py b/backend/app/main.py
similarity index 59%
rename from backend/src/main.py
rename to backend/app/main.py
index 772daca..84b3141 100644
--- a/backend/src/main.py
+++ b/backend/app/main.py
@@ -1,10 +1,15 @@
-from optimizer import solve_optimization
-from optimizer import landmark
+from src.optimizer import solve_optimization
+from src.optimizer import landmark
+from fastapi import FastAPI
 
-def main():
+app = FastAPI()
+
+
+@app.get("/optimize/{max_steps}/{print_to_console}")
+def main(max_steps: int, print_to_console: bool):
     
     # CONSTRAINT TO RESPECT MAX NUMBER OF STEPS
-    max_steps = 16
+    #max_steps = 16
 
 
     # Initialize all landmarks (+ start and goal). Order matters here
@@ -18,8 +23,11 @@ def main():
     landmarks.append(landmark("arrivée", -1, (0, 0)))
 
 
-    visiting_order = solve_optimization(landmarks, max_steps, True)
+    visiting_order = solve_optimization(landmarks, max_steps, print_to_console)
 
+    #return visiting_order
+
+    return("max steps :", max_steps, "\n", visiting_order)
 
 
 if __name__ == "__main__":
diff --git a/backend/app/src/__init__.py b/backend/app/src/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/backend/app/src/__pycache__/__init__.cpython-310.pyc b/backend/app/src/__pycache__/__init__.cpython-310.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..3c06a0824710e098468b6c39d10d3d27ee83ac35
GIT binary patch
literal 203
zcmYk0u?oU47=%;lAVS|Et3!PN5m9t0+9HVC4<)9lgtmW5{#5BBx%)J(j=q7D>7)nu
z9e2~2D4H;@_aiNbd=2<l;LFOJLXUzS*)+)R%ntJpACz-Ak+KApuC;)zkzJ$E5gayr
zm+X^u#$!%BN=QXZ+#n~XtkDHQDaggB+|Af3Msd{_;j}?G3t1^FK(sB8m5}EewafEa
T+ds#P#uQzxmctJkd4%i>W2QF)

literal 0
HcmV?d00001

diff --git a/backend/src/__pycache__/optimizer.cpython-310.pyc b/backend/app/src/__pycache__/optimizer.cpython-310.pyc
similarity index 51%
rename from backend/src/__pycache__/optimizer.cpython-310.pyc
rename to backend/app/src/__pycache__/optimizer.cpython-310.pyc
index 2446c047e04e4aa4cec9c2a5628a2c89ec72a9c7..55a6337409776ed6c3207b9db525d84153adfb21 100644
GIT binary patch
delta 1087
zcmZ9K-%Aux6vy{mXJ*G8cN}MJS8XM2(-@;n!^}iO%luJ+7FkS%Zo8Wrvb)_G!(gRA
zj9%+NP!UwnQ%~Yk)Qj}gLqQKcG}KEk734#IK+rwcU(mvQ_TF>P`QGn2Gs~^tTg^f=
z8VQNt((g0ZYMf<r4Orng{sp%zT`aDQGnavh%gW$hT_maEIW8XWfq)+>g|5RQER^}I
zR3`qFsnCLoJJs5By{~3P1VVX5tQ1<6loO#Vu?0=+)e@An+R$|^5t1kBv+!o*xyZbc
z^7RtiR9|EZVNs*`<)!c<Y*yfs`VJyEtfgvsz3>tk#k4;?F`LUz`P1AI5l6>6+K%!-
z^QUL>Q(k}%wWg*P@?Iwp0UZ=ztVS0rrZXFCu$To3;~gtswT}QN@s-{UNAQRK3l8I_
z@*(KNx=0EN*c)krUd%?GI$c6ZUhkB1lIBMV-2#D@nc<n)9N$He9&9o8!(F^+)I%TM
zG@jH^rK9~{1k=0|_f<5(V;rl9!2sqeUK{<SkRWuS6K&Kw*A+*jd*CI`MN=?>kD}T5
zDGHw!2-tjEz;3m<Y`#6fnAu$QMnpYLKo?!t03XE>^9A(dnwd0us7y)@V|C>oSjDc&
zMi|3OmG93Vrn5MKM$Acpj}pQHj<N3ktXKz-37}8PxT;qy_-$?^JLCBie)_7I!LUeK
zkGJ!qc*|;r&-lzr8RMiiNEllAXqhzgZ&kbd<+buM+4|Ov8$+Oc^0R4RU4Wtu0s#z(
z8TQ#bG}+lOUbgqaPrPRz0vF%f8BkUlVyj?ny{QcY_@{dHwlp+AQoV#Rf=d`7$Vo6-
z9U<%|^a;3OZ!VL`c^)U{L1a8VJC_^ayukSZ%IP3D0*<vkGS@2dnY=GP&52AQ?-j(D
z&dJxXZLE#zw!6C^wyr)uakVg)&wBhIogO1};$-|F=y*RqP^R)p{1PAOmv>5=vJ<k&
zWn;1vo3?VUvc)Re%HCzOt+buQ4=jPDM6xz)Ce5Vo=n1{rH0-#p+12rwovcv)0rJ7*
A^Z)<=

delta 1147
zcmZ9LO=uNY6oBX4`FZpHCgV$d6Jx~aGr>_bCNchy1Y={G_*ZPJq7x)M-y4%?e2I4^
zC4m=fNri4&C}&k9+DbPrT!hd?+fB7AH$uVHEQM0K=(<p-c+P!lz=8YCIp>~x{^rih
z?zL`bE}ze6^nCT`?6v2+*PMSq+^FFH5Ufv#%L1D4Cu3|VMGhvd5n9o0Laf!b>#zdL
zdMxTXy^XY1*T2_)(5m2RRne@)2HS54xfO>@?`U?}jLoW9hq}2%yKZ^f3V?QNN1UpQ
zx3N~lvPC{tY}c(7iozas16R%8A&q6Lv?s~Vm*eTl*|0VhPfM4|@KcE{!$|HSIe~Kt
zT#`FU4DeU0bH`qiq9P#!HVDyb(_7f01zh2RA!OgWnR*T|iZAQ|ID~HcZ#anmrN^Nk
zM=~X-;Z&v*2J!36s(+ZG$ZZ5at#ZjDY&c3ttjdh6%!YD1TL$pc>^``QUu3tzF?^7{
z*TyG(>-|G8E&K6&u5<Huv>oyM4d~)3p~H|P_)YHT-eEFIkFk+F)o9c>J{jIhjH|>(
z+J1H$z@_{y_z~~tOE8X4^VQ->HlHE{VzDO>OSBey0~~a^HvK}@$RgO3wH4%PjGTwN
zhsmIF24-2x@{(^h3h!Y107GRO!=a{KrQb-8S_w8dkkfM%$OUmnyvpgW5F)3`Gx%lG
zvz~)|jz5DMpyZ_TG=nddpKW9~OL7901dh{SZo6K7j0}Mp&CkWX@(4b3yWj;rb4%He
z`Q#|$!}Wh%2jB!+g`HPa5*2!w_uj>Se}Zq)H3G0_2O)uR)mV@YXTzJ5^D_J_F<5N$
zJcf4*d*Lr!EA+ty{IgI2ef?zf6L8;Mf;R<W+vX>qs{;8yk%Npgj0=o$hMI$5=@4Td
z;}{`GMGKWm7)6phNirA9vkT#<lyg$<XP-WXPw?H1fd%%woT<e#wJG@#?{huf>Q>4g
z);GHRgw()ZoV+@>P^(7r0PhYl`tjT10Z8G~;;3%P3Cwt>K2W(-d8z|0PpXDg2L)Eu
ud{t|kSXDi%Cc9akz(0hCkG=LSw$tvk*}m=BEl##jw5>u*vANKmGhPD<Q0Jxq

diff --git a/backend/src/main_example.py b/backend/app/src/main_example.py
similarity index 100%
rename from backend/src/main_example.py
rename to backend/app/src/main_example.py
diff --git a/backend/src/optimizer.py b/backend/app/src/optimizer.py
similarity index 98%
rename from backend/src/optimizer.py
rename to backend/app/src/optimizer.py
index 66efaeb..4c1b631 100644
--- a/backend/src/optimizer.py
+++ b/backend/app/src/optimizer.py
@@ -10,7 +10,6 @@ class landmark :
         self.attractiveness = attractiveness
         self.loc = loc
 
-
 # Convert the solution of the optimization into the list of edges to follow. Order is taken into account
 def untangle(resx: list) :
     N = len(resx)                   # length of res
@@ -43,6 +42,7 @@ def untangle(resx: list) :
 def print_res(res, landmarks: list, P) :
     X = abs(res.x)
     order = untangle(X)
+    things = []
 
     """N = int(np.sqrt(len(X)))
     for i in range(N):
@@ -59,11 +59,12 @@ def print_res(res, landmarks: list, P) :
 
     for idx in order : 
         print('- ' + landmarks[idx].name)
+        things.append(landmarks[idx].name)
 
     steps = path_length(P, abs(res.x))
     print("\nSteps walked : " + str(steps))
 
-    return order
+    return things
 
 # Checks for cases of circular symmetry in the result
 def has_circle(resx: list) :
@@ -260,7 +261,7 @@ def path_length(P: list, resx: list) :
     return np.dot(P, resx)
 
 # Main optimization pipeline
-def solve_optimization (landmarks, max_steps, printing) :
+def solve_optimization (landmarks, max_steps, printing_console) :
 
     # SET CONSTRAINTS FOR INEQUALITY
     c, A_ub, b_ub = init_ub_dist(landmarks, max_steps)              # Add the distances from each landmark to the other
@@ -307,12 +308,11 @@ def solve_optimization (landmarks, max_steps, printing) :
             raise ValueError("No solution could be found, even when increasing max_steps using the heuristic")
     
 
-    if printing is True :
+    if printing_console is True :
         if i != 0 :
             print(f"Neded to recompute paths {i} times because of unconnected loops...")
             X = print_res(res, landmarks, P)
             return X
-
     else :
         return untangle(res.x)