UI elements using the new structs #8
							
								
								
									
										164
									
								
								backend/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										164
									
								
								backend/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,164 @@
 | 
				
			|||||||
 | 
					# osm-cache
 | 
				
			||||||
 | 
					cache/
 | 
				
			||||||
 | 
					# Byte-compiled / optimized / DLL files
 | 
				
			||||||
 | 
					__pycache__/
 | 
				
			||||||
 | 
					*.py[cod]
 | 
				
			||||||
 | 
					*$py.class
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# C extensions
 | 
				
			||||||
 | 
					*.so
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Distribution / packaging
 | 
				
			||||||
 | 
					.Python
 | 
				
			||||||
 | 
					build/
 | 
				
			||||||
 | 
					develop-eggs/
 | 
				
			||||||
 | 
					dist/
 | 
				
			||||||
 | 
					downloads/
 | 
				
			||||||
 | 
					eggs/
 | 
				
			||||||
 | 
					.eggs/
 | 
				
			||||||
 | 
					lib/
 | 
				
			||||||
 | 
					lib64/
 | 
				
			||||||
 | 
					parts/
 | 
				
			||||||
 | 
					sdist/
 | 
				
			||||||
 | 
					var/
 | 
				
			||||||
 | 
					wheels/
 | 
				
			||||||
 | 
					share/python-wheels/
 | 
				
			||||||
 | 
					*.egg-info/
 | 
				
			||||||
 | 
					.installed.cfg
 | 
				
			||||||
 | 
					*.egg
 | 
				
			||||||
 | 
					MANIFEST
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# PyInstaller
 | 
				
			||||||
 | 
					#  Usually these files are written by a python script from a template
 | 
				
			||||||
 | 
					#  before PyInstaller builds the exe, so as to inject date/other infos into it.
 | 
				
			||||||
 | 
					*.manifest
 | 
				
			||||||
 | 
					*.spec
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Installer logs
 | 
				
			||||||
 | 
					pip-log.txt
 | 
				
			||||||
 | 
					pip-delete-this-directory.txt
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Unit test / coverage reports
 | 
				
			||||||
 | 
					htmlcov/
 | 
				
			||||||
 | 
					.tox/
 | 
				
			||||||
 | 
					.nox/
 | 
				
			||||||
 | 
					.coverage
 | 
				
			||||||
 | 
					.coverage.*
 | 
				
			||||||
 | 
					.cache
 | 
				
			||||||
 | 
					nosetests.xml
 | 
				
			||||||
 | 
					coverage.xml
 | 
				
			||||||
 | 
					*.cover
 | 
				
			||||||
 | 
					*.py,cover
 | 
				
			||||||
 | 
					.hypothesis/
 | 
				
			||||||
 | 
					.pytest_cache/
 | 
				
			||||||
 | 
					cover/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Translations
 | 
				
			||||||
 | 
					*.mo
 | 
				
			||||||
 | 
					*.pot
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Django stuff:
 | 
				
			||||||
 | 
					*.log
 | 
				
			||||||
 | 
					local_settings.py
 | 
				
			||||||
 | 
					db.sqlite3
 | 
				
			||||||
 | 
					db.sqlite3-journal
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Flask stuff:
 | 
				
			||||||
 | 
					instance/
 | 
				
			||||||
 | 
					.webassets-cache
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Scrapy stuff:
 | 
				
			||||||
 | 
					.scrapy
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Sphinx documentation
 | 
				
			||||||
 | 
					docs/_build/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# PyBuilder
 | 
				
			||||||
 | 
					.pybuilder/
 | 
				
			||||||
 | 
					target/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Jupyter Notebook
 | 
				
			||||||
 | 
					.ipynb_checkpoints
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# IPython
 | 
				
			||||||
 | 
					profile_default/
 | 
				
			||||||
 | 
					ipython_config.py
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# pyenv
 | 
				
			||||||
 | 
					#   For a library or package, you might want to ignore these files since the code is
 | 
				
			||||||
 | 
					#   intended to run in multiple environments; otherwise, check them in:
 | 
				
			||||||
 | 
					# .python-version
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# pipenv
 | 
				
			||||||
 | 
					#   According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
 | 
				
			||||||
 | 
					#   However, in case of collaboration, if having platform-specific dependencies or dependencies
 | 
				
			||||||
 | 
					#   having no cross-platform support, pipenv may install dependencies that don't work, or not
 | 
				
			||||||
 | 
					#   install all needed dependencies.
 | 
				
			||||||
 | 
					#Pipfile.lock
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# poetry
 | 
				
			||||||
 | 
					#   Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
 | 
				
			||||||
 | 
					#   This is especially recommended for binary packages to ensure reproducibility, and is more
 | 
				
			||||||
 | 
					#   commonly ignored for libraries.
 | 
				
			||||||
 | 
					#   https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
 | 
				
			||||||
 | 
					#poetry.lock
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# pdm
 | 
				
			||||||
 | 
					#   Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
 | 
				
			||||||
 | 
					#pdm.lock
 | 
				
			||||||
 | 
					#   pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it
 | 
				
			||||||
 | 
					#   in version control.
 | 
				
			||||||
 | 
					#   https://pdm.fming.dev/latest/usage/project/#working-with-version-control
 | 
				
			||||||
 | 
					.pdm.toml
 | 
				
			||||||
 | 
					.pdm-python
 | 
				
			||||||
 | 
					.pdm-build/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
 | 
				
			||||||
 | 
					__pypackages__/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Celery stuff
 | 
				
			||||||
 | 
					celerybeat-schedule
 | 
				
			||||||
 | 
					celerybeat.pid
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# SageMath parsed files
 | 
				
			||||||
 | 
					*.sage.py
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Environments
 | 
				
			||||||
 | 
					.env
 | 
				
			||||||
 | 
					.venv
 | 
				
			||||||
 | 
					env/
 | 
				
			||||||
 | 
					venv/
 | 
				
			||||||
 | 
					ENV/
 | 
				
			||||||
 | 
					env.bak/
 | 
				
			||||||
 | 
					venv.bak/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Spyder project settings
 | 
				
			||||||
 | 
					.spyderproject
 | 
				
			||||||
 | 
					.spyproject
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Rope project settings
 | 
				
			||||||
 | 
					.ropeproject
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# mkdocs documentation
 | 
				
			||||||
 | 
					/site
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# mypy
 | 
				
			||||||
 | 
					.mypy_cache/
 | 
				
			||||||
 | 
					.dmypy.json
 | 
				
			||||||
 | 
					dmypy.json
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Pyre type checker
 | 
				
			||||||
 | 
					.pyre/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# pytype static type analyzer
 | 
				
			||||||
 | 
					.pytype/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Cython debug symbols
 | 
				
			||||||
 | 
					cython_debug/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# PyCharm
 | 
				
			||||||
 | 
					#  JetBrains specific template is maintained in a separate JetBrains.gitignore that can
 | 
				
			||||||
 | 
					#  be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
 | 
				
			||||||
 | 
					#  and can be added to the global gitignore or merged into this file.  For a more nuclear
 | 
				
			||||||
 | 
					#  option (not recommended) you can uncomment the following to ignore the entire idea folder.
 | 
				
			||||||
 | 
					#.idea/
 | 
				
			||||||
@@ -1,14 +1,12 @@
 | 
				
			|||||||
[[source]]
 | 
					[[source]]
 | 
				
			||||||
url = "https://pypi.org/simple"
 | 
					url = "https://pypi.org/simple"
 | 
				
			||||||
verify_ssl = true
 | 
					verify_ssl = true
 | 
				
			||||||
name = "pypi"
 | 
					name = "pypi"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[packages]
 | 
					[packages]
 | 
				
			||||||
numpy = "*"
 | 
					numpy = "*"
 | 
				
			||||||
scipy = "*"
 | 
					scipy = "*"
 | 
				
			||||||
fastapi = "*"
 | 
					fastapi = "*"
 | 
				
			||||||
 | 
					osmpythontools = "*"
 | 
				
			||||||
[dev-packages]
 | 
					
 | 
				
			||||||
 | 
					[dev-packages]
 | 
				
			||||||
[requires]
 | 
					 | 
				
			||||||
python_version = "3.12"
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										2369
									
								
								backend/Pipfile.lock
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										2369
									
								
								backend/Pipfile.lock
									
									
									
										generated
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@@ -1,34 +1,34 @@
 | 
				
			|||||||
from src.optimizer import solve_optimization
 | 
					from .src.optimizer import solve_optimization
 | 
				
			||||||
from src.landmarks_manager import Landmark
 | 
					from .src.landmarks_manager import Landmark
 | 
				
			||||||
from fastapi import FastAPI
 | 
					from fastapi import FastAPI
 | 
				
			||||||
 | 
					
 | 
				
			||||||
app = FastAPI()
 | 
					app = FastAPI()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@app.get("/optimize/{max_steps}/{print_details}")
 | 
					@app.get("/optimize/{max_steps}/{print_details}")
 | 
				
			||||||
def main(max_steps: int, print_details: bool):
 | 
					def main(max_steps: int, print_details: bool):
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    # CONSTRAINT TO RESPECT MAX NUMBER OF STEPS
 | 
					    # CONSTRAINT TO RESPECT MAX NUMBER OF STEPS
 | 
				
			||||||
    #max_steps = 16
 | 
					    #max_steps = 16
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # Initialize all landmarks (+ start and goal). Order matters here
 | 
					    # Initialize all landmarks (+ start and goal). Order matters here
 | 
				
			||||||
    landmarks = []
 | 
					    landmarks = []
 | 
				
			||||||
    landmarks.append(Landmark("départ", -1, (0, 0)))
 | 
					    landmarks.append(Landmark("départ", -1, (0, 0)))
 | 
				
			||||||
    landmarks.append(Landmark("tour eiffel", 99, (0,2)))                           # PUT IN JSON
 | 
					    landmarks.append(Landmark("tour eiffel", 99, (0,2)))                           # PUT IN JSON
 | 
				
			||||||
    landmarks.append(Landmark("arc de triomphe", 99, (0,4)))
 | 
					    landmarks.append(Landmark("arc de triomphe", 99, (0,4)))
 | 
				
			||||||
    landmarks.append(Landmark("louvre", 99, (0,6)))
 | 
					    landmarks.append(Landmark("louvre", 99, (0,6)))
 | 
				
			||||||
    landmarks.append(Landmark("montmartre", 99, (0,10)))
 | 
					    landmarks.append(Landmark("montmartre", 99, (0,10)))
 | 
				
			||||||
    landmarks.append(Landmark("concorde", 99, (0,8)))
 | 
					    landmarks.append(Landmark("concorde", 99, (0,8)))
 | 
				
			||||||
    landmarks.append(Landmark("arrivée", -1, (0, 0)))
 | 
					    landmarks.append(Landmark("arrivée", -1, (0, 0)))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    visiting_order = solve_optimization(landmarks, max_steps, print_details)
 | 
					    visiting_order = solve_optimization(landmarks, max_steps, print_details)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    #return visiting_order
 | 
					    #return visiting_order
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return("max steps :", max_steps, "\n", visiting_order)
 | 
					    return("max steps :", max_steps, "\n", visiting_order)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if __name__ == "__main__":
 | 
					"""if __name__ == "__main__":
 | 
				
			||||||
    main()
 | 
					    main()"""
 | 
				
			||||||
@@ -1,52 +1,57 @@
 | 
				
			|||||||
from OSMPythonTools.api import Api
 | 
					from OSMPythonTools.api import Api
 | 
				
			||||||
from OSMPythonTools.overpass import Overpass
 | 
					from OSMPythonTools.overpass import Overpass
 | 
				
			||||||
from dataclasses import dataclass
 | 
					from dataclasses import dataclass
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Defines the landmark class (aka some place there is to visit)
 | 
					# Defines the landmark class (aka some place there is to visit)
 | 
				
			||||||
@dataclass
 | 
					@dataclass
 | 
				
			||||||
class Landmark :
 | 
					class Landmarkkkk :
 | 
				
			||||||
    name : str
 | 
					    name : str
 | 
				
			||||||
    attractiveness : int
 | 
					    attractiveness : int
 | 
				
			||||||
    id : int
 | 
					    id : int
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					@dataclass
 | 
				
			||||||
# Converts a OSM id to a landmark
 | 
					class Landmark :
 | 
				
			||||||
def add_from_id(id: int, score: int) :
 | 
					    name : str
 | 
				
			||||||
 | 
					    attractiveness : int
 | 
				
			||||||
    try :
 | 
					    loc : tuple
 | 
				
			||||||
        s = 'way/' + str(id)           # prepare string for query
 | 
					
 | 
				
			||||||
        obj =  api.query(s)                             # object to add
 | 
					# Converts a OSM id to a landmark
 | 
				
			||||||
    except :
 | 
					def add_from_id(id: int, score: int) :
 | 
				
			||||||
        s = 'relation/' + str(id)           # prepare string for query
 | 
					
 | 
				
			||||||
        obj =  api.query(s)                             # object to add
 | 
					    try :
 | 
				
			||||||
 | 
					        s = 'way/' + str(id)           # prepare string for query
 | 
				
			||||||
    return Landmark(obj.tag('name:fr'), score, id)      # create Landmark out of it
 | 
					        obj =  api.query(s)                             # object to add
 | 
				
			||||||
 | 
					    except :
 | 
				
			||||||
 | 
					        s = 'relation/' + str(id)           # prepare string for query
 | 
				
			||||||
# take a lsit of tuples (id, score) to generate a list of landmarks
 | 
					        obj =  api.query(s)                             # object to add
 | 
				
			||||||
def generate_landmarks(ids_and_scores: list) :
 | 
					
 | 
				
			||||||
 | 
					    return Landmarkkkk(obj.tag('name:fr'), score, id)      # create Landmark out of it
 | 
				
			||||||
    L = []
 | 
					
 | 
				
			||||||
    for tup in ids_and_scores :
 | 
					
 | 
				
			||||||
        L.append(add_from_id(tup[0], tup[1]))
 | 
					# take a lsit of tuples (id, score) to generate a list of landmarks
 | 
				
			||||||
 | 
					def generate_landmarks(ids_and_scores: list) :
 | 
				
			||||||
    return L
 | 
					
 | 
				
			||||||
 | 
					    L = []
 | 
				
			||||||
api = Api()
 | 
					    for tup in ids_and_scores :
 | 
				
			||||||
 | 
					        L.append(add_from_id(tup[0], tup[1]))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
l = (7515426, 70)
 | 
					    return L
 | 
				
			||||||
t = (5013364, 100)
 | 
					
 | 
				
			||||||
n = (201611261, 99)
 | 
					api = Api()
 | 
				
			||||||
a = (226413508, 50)
 | 
					
 | 
				
			||||||
m = (23762981, 30)
 | 
					
 | 
				
			||||||
 | 
					l = (7515426, 70)
 | 
				
			||||||
 | 
					t = (5013364, 100)
 | 
				
			||||||
ids_and_scores = [t, l, n, a, m]
 | 
					n = (201611261, 99)
 | 
				
			||||||
 | 
					a = (226413508, 50)
 | 
				
			||||||
landmarks = generate_landmarks(ids_and_scores)
 | 
					m = (23762981, 30)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
for obj in landmarks :
 | 
					ids_and_scores = [t, l, n, a, m]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					landmarks = generate_landmarks(ids_and_scores)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					for obj in landmarks :
 | 
				
			||||||
    print(obj)
 | 
					    print(obj)
 | 
				
			||||||
@@ -1,23 +1,23 @@
 | 
				
			|||||||
import fastapi
 | 
					import fastapi
 | 
				
			||||||
from dataclasses import dataclass
 | 
					from dataclasses import dataclass
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@dataclass
 | 
					@dataclass
 | 
				
			||||||
class Destination:
 | 
					class Destination:
 | 
				
			||||||
    name: str
 | 
					    name: str
 | 
				
			||||||
    location: tuple
 | 
					    location: tuple
 | 
				
			||||||
    attractiveness: int
 | 
					    attractiveness: int
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
d = Destination()
 | 
					d = Destination()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def get_route() -> list[Destination]:
 | 
					def get_route() -> list[Destination]:
 | 
				
			||||||
    return {"route": "Hello World"}
 | 
					    return {"route": "Hello World"}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
endpoint = ("/get_route", get_route)
 | 
					endpoint = ("/get_route", get_route)
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
if __name__ == "__main__":
 | 
					if __name__ == "__main__":
 | 
				
			||||||
    fastapi.run()
 | 
					    fastapi.run()
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user