faster pulp and more tests
	
		
			
	
		
	
	
		
	
		
			Some checks failed
		
		
	
	
		
			
				
	
				Build and deploy the backend to staging / Build and push image (pull_request) Successful in 2m14s
				
			
		
			
				
	
				Run linting on the backend code / Build (pull_request) Successful in 26s
				
			
		
			
				
	
				Run testing on the backend code / Build (pull_request) Failing after 7m45s
				
			
		
			
				
	
				Build and deploy the backend to staging / Deploy to staging (pull_request) Successful in 24s
				
			
		
		
	
	
				
					
				
			
		
			Some checks failed
		
		
	
	Build and deploy the backend to staging / Build and push image (pull_request) Successful in 2m14s
				
			Run linting on the backend code / Build (pull_request) Successful in 26s
				
			Run testing on the backend code / Build (pull_request) Failing after 7m45s
				
			Build and deploy the backend to staging / Deploy to staging (pull_request) Successful in 24s
				
			This commit is contained in:
		| @@ -94,21 +94,20 @@ def new_trip(preferences: Preferences, | ||||
|     landmarks_short.append(end_landmark) | ||||
|  | ||||
|     t_generate_landmarks = time.time() - start_time | ||||
|     logger.info(f'Fetched {len(landmarks)} landmarks in  \t: {round(t_generate_landmarks,3)} seconds') | ||||
|     start_time = time.time() | ||||
|  | ||||
|     # First stage optimization | ||||
|     try: | ||||
|         base_tour = optimizer.solve_optimization(preferences.max_time_minute, landmarks_short) | ||||
|     except ArithmeticError as exc: | ||||
|         raise HTTPException(status_code=500) from exc | ||||
|     except TimeoutError as exc: | ||||
|         raise HTTPException(status_code=500, detail="Optimzation took too long") from exc | ||||
|     except Exception as exc: | ||||
|         raise HTTPException(status_code=500, detail=f"An unexpected error occurred: {str(exc)}") from exc | ||||
|         raise HTTPException(status_code=500, detail=f"Optimization failed: {str(exc)}") from exc | ||||
|  | ||||
|     t_first_stage = time.time() - start_time | ||||
|     start_time = time.time() | ||||
|  | ||||
|     # Second stage optimization | ||||
|     # TODO : only if necessary (not enough landmarks for ex.) | ||||
|     try : | ||||
|         refined_tour = refiner.refine_optimization(landmarks, base_tour, | ||||
|                                                preferences.max_time_minute, | ||||
| @@ -117,10 +116,10 @@ def new_trip(preferences: Preferences, | ||||
|         raise HTTPException(status_code=500, detail=f"An unexpected error occurred: {str(exc)}") from exc | ||||
|  | ||||
|     t_second_stage = time.time() - start_time | ||||
|     logger.debug(f'Generating landmarks      : {round(t_generate_landmarks,3)} seconds') | ||||
|     logger.debug(f'First stage optimization  : {round(t_first_stage,3)} seconds') | ||||
|     logger.debug(f'Second stage optimization : {round(t_second_stage,3)} seconds') | ||||
|     logger.info(f'Total computation time    : {round(t_generate_landmarks + t_first_stage + t_second_stage,3)} seconds') | ||||
|     # logger.debug(f'Generating landmarks      : {round(t_generate_landmarks,3)} seconds') | ||||
|     logger.debug(f'First stage optimization\t: {round(t_first_stage,3)} seconds') | ||||
|     logger.debug(f'Second stage optimization\t: {round(t_second_stage,3)} seconds') | ||||
|     logger.info(f'Total computation time\t: {round(t_first_stage + t_second_stage,3)} seconds') | ||||
|  | ||||
|     linked_tour = LinkedLandmarks(refined_tour) | ||||
|     # upon creation of the trip, persistence of both the trip and its landmarks is ensured. | ||||
|   | ||||
| @@ -2,5 +2,5 @@ detour_factor: 1.4 | ||||
| detour_corridor_width: 300 | ||||
| average_walking_speed: 4.8 | ||||
| max_landmarks: 10 | ||||
| max_landmarks_refiner: 30 | ||||
| max_landmarks_refiner: 20 | ||||
| overshoot: 1.1 | ||||
|   | ||||
| @@ -35,7 +35,6 @@ def test_turckheim(client, request):    # pylint: disable=redefined-outer-name | ||||
|             } | ||||
|         ) | ||||
|     result = response.json() | ||||
|     # print(result) | ||||
|     landmarks = load_trip_landmarks(client, result['first_landmark_uuid']) | ||||
|  | ||||
|  | ||||
| @@ -80,7 +79,6 @@ def test_bellecour(client, request) :   # pylint: disable=redefined-outer-name | ||||
|             } | ||||
|         ) | ||||
|     result = response.json() | ||||
|     print(result) | ||||
|     landmarks = load_trip_landmarks(client, result['first_landmark_uuid']) | ||||
|  | ||||
|     # Get computation time | ||||
| @@ -89,8 +87,8 @@ def test_bellecour(client, request) :   # pylint: disable=redefined-outer-name | ||||
|     # Add details to report | ||||
|     log_trip_details(request, landmarks, result['total_time'], duration_minutes) | ||||
|  | ||||
|     for elem in landmarks : | ||||
|         print(elem) | ||||
|     # for elem in landmarks : | ||||
|     #     print(elem) | ||||
|  | ||||
|     # checks : | ||||
|     assert response.status_code == 200  # check for successful planning | ||||
| @@ -99,7 +97,127 @@ def test_bellecour(client, request) :   # pylint: disable=redefined-outer-name | ||||
|     # assert 2 == 3 | ||||
|  | ||||
|  | ||||
| def test_Paris(client, request) :   # pylint: disable=redefined-outer-name | ||||
| def test_cologne(client, request) :   # pylint: disable=redefined-outer-name | ||||
|     """ | ||||
|     Test n°2 : Custom test in Lyon centre to ensure proper decision making in crowded area. | ||||
|      | ||||
|     Args: | ||||
|         client: | ||||
|         request: | ||||
|     """ | ||||
|     start_time = time.time()  # Start timer | ||||
|     duration_minutes = 240 | ||||
|  | ||||
|     response = client.post( | ||||
|         "/trip/new", | ||||
|         json={ | ||||
|             "preferences": {"sightseeing": {"type": "sightseeing", "score": 5}, | ||||
|                             "nature": {"type": "nature", "score": 5}, | ||||
|                             "shopping": {"type": "shopping", "score": 5}, | ||||
|                             "max_time_minute": duration_minutes, | ||||
|                             "detour_tolerance_minute": 0}, | ||||
|             "start": [50.942352665, 6.957777972392] | ||||
|             } | ||||
|         ) | ||||
|     result = response.json() | ||||
|     landmarks = load_trip_landmarks(client, result['first_landmark_uuid']) | ||||
|  | ||||
|     # Get computation time | ||||
|     comp_time = time.time() - start_time | ||||
|  | ||||
|     # Add details to report | ||||
|     log_trip_details(request, landmarks, result['total_time'], duration_minutes) | ||||
|  | ||||
|     # for elem in landmarks : | ||||
|     #     print(elem) | ||||
|  | ||||
|     # checks : | ||||
|     assert response.status_code == 200  # check for successful planning | ||||
|     assert comp_time < 30, f"Computation time exceeded 30 seconds: {comp_time:.2f} seconds" | ||||
|     assert duration_minutes*0.8 < int(result['total_time']) < duration_minutes*1.2 | ||||
|  | ||||
|  | ||||
| def test_strasbourg(client, request) :   # pylint: disable=redefined-outer-name | ||||
|     """ | ||||
|     Test n°2 : Custom test in Lyon centre to ensure proper decision making in crowded area. | ||||
|      | ||||
|     Args: | ||||
|         client: | ||||
|         request: | ||||
|     """ | ||||
|     start_time = time.time()  # Start timer | ||||
|     duration_minutes = 180 | ||||
|  | ||||
|     response = client.post( | ||||
|         "/trip/new", | ||||
|         json={ | ||||
|             "preferences": {"sightseeing": {"type": "sightseeing", "score": 5}, | ||||
|                             "nature": {"type": "nature", "score": 5}, | ||||
|                             "shopping": {"type": "shopping", "score": 5}, | ||||
|                             "max_time_minute": duration_minutes, | ||||
|                             "detour_tolerance_minute": 0}, | ||||
|             "start": [48.5846589226, 7.74078715721] | ||||
|             } | ||||
|         ) | ||||
|     result = response.json() | ||||
|     landmarks = load_trip_landmarks(client, result['first_landmark_uuid']) | ||||
|  | ||||
|     # Get computation time | ||||
|     comp_time = time.time() - start_time | ||||
|  | ||||
|     # Add details to report | ||||
|     log_trip_details(request, landmarks, result['total_time'], duration_minutes) | ||||
|  | ||||
|     # for elem in landmarks : | ||||
|     #     print(elem) | ||||
|  | ||||
|     # checks : | ||||
|     assert response.status_code == 200  # check for successful planning | ||||
|     assert comp_time < 30, f"Computation time exceeded 30 seconds: {comp_time:.2f} seconds" | ||||
|     assert duration_minutes*0.8 < int(result['total_time']) < duration_minutes*1.2 | ||||
|  | ||||
|  | ||||
| def test_zurich(client, request) :   # pylint: disable=redefined-outer-name | ||||
|     """ | ||||
|     Test n°2 : Custom test in Lyon centre to ensure proper decision making in crowded area. | ||||
|      | ||||
|     Args: | ||||
|         client: | ||||
|         request: | ||||
|     """ | ||||
|     start_time = time.time()  # Start timer | ||||
|     duration_minutes = 180 | ||||
|  | ||||
|     response = client.post( | ||||
|         "/trip/new", | ||||
|         json={ | ||||
|             "preferences": {"sightseeing": {"type": "sightseeing", "score": 5}, | ||||
|                             "nature": {"type": "nature", "score": 5}, | ||||
|                             "shopping": {"type": "shopping", "score": 5}, | ||||
|                             "max_time_minute": duration_minutes, | ||||
|                             "detour_tolerance_minute": 0}, | ||||
|             "start": [47.377884227, 8.5395114066] | ||||
|             } | ||||
|         ) | ||||
|     result = response.json() | ||||
|     landmarks = load_trip_landmarks(client, result['first_landmark_uuid']) | ||||
|  | ||||
|     # Get computation time | ||||
|     comp_time = time.time() - start_time | ||||
|  | ||||
|     # Add details to report | ||||
|     log_trip_details(request, landmarks, result['total_time'], duration_minutes) | ||||
|  | ||||
|     # for elem in landmarks : | ||||
|     #     print(elem) | ||||
|  | ||||
|     # checks : | ||||
|     assert response.status_code == 200  # check for successful planning | ||||
|     assert comp_time < 30, f"Computation time exceeded 30 seconds: {comp_time:.2f} seconds" | ||||
|     assert duration_minutes*0.8 < int(result['total_time']) < duration_minutes*1.2 | ||||
|  | ||||
|  | ||||
| def test_paris(client, request) :   # pylint: disable=redefined-outer-name | ||||
|     """ | ||||
|     Test n°2 : Custom test in Paris (les Halles) centre to ensure proper decision making in crowded area. | ||||
|      | ||||
| @@ -130,8 +248,8 @@ def test_Paris(client, request) :   # pylint: disable=redefined-outer-name | ||||
|     # Add details to report | ||||
|     log_trip_details(request, landmarks, result['total_time'], duration_minutes) | ||||
|  | ||||
|     for elem in landmarks : | ||||
|         print(elem) | ||||
|     # for elem in landmarks : | ||||
|     #     print(elem) | ||||
|  | ||||
|     # checks : | ||||
|     assert response.status_code == 200  # check for successful planning | ||||
| @@ -139,7 +257,7 @@ def test_Paris(client, request) :   # pylint: disable=redefined-outer-name | ||||
|     assert duration_minutes*0.8 < int(result['total_time']) < duration_minutes*1.2 | ||||
|  | ||||
|  | ||||
| def test_New_York(client, request) :   # pylint: disable=redefined-outer-name | ||||
| def test_new_york(client, request) :   # pylint: disable=redefined-outer-name | ||||
|     """ | ||||
|     Test n°2 : Custom test in New York (les Halles) centre to ensure proper decision making in crowded area. | ||||
|      | ||||
| @@ -170,8 +288,8 @@ def test_New_York(client, request) :   # pylint: disable=redefined-outer-name | ||||
|     # Add details to report | ||||
|     log_trip_details(request, landmarks, result['total_time'], duration_minutes) | ||||
|  | ||||
|     for elem in landmarks : | ||||
|         print(elem) | ||||
|     # for elem in landmarks : | ||||
|     #     print(elem) | ||||
|  | ||||
|     # checks : | ||||
|     assert response.status_code == 200  # check for successful planning | ||||
| @@ -218,8 +336,7 @@ def test_shopping(client, request) :   # pylint: disable=redefined-outer-name | ||||
|     assert comp_time < 30, f"Computation time exceeded 30 seconds: {comp_time:.2f} seconds" | ||||
|     assert duration_minutes*0.8 < int(result['total_time']) < duration_minutes*1.2 | ||||
|  | ||||
| ''' | ||||
| ''' | ||||
|  | ||||
| # def test_new_trip_single_prefs(client): | ||||
| #     response = client.post( | ||||
| #         "/trip/new", | ||||
|   | ||||
| @@ -125,7 +125,7 @@ class LandmarkManager: | ||||
|  | ||||
|  | ||||
|         landmarks_constrained = take_most_important(all_landmarks, self.N_important) | ||||
|         self.logger.info(f'All landmarks generated : {len(all_landmarks)} landmarks around {center_coordinates}, and constrained to {len(landmarks_constrained)} most important ones.') | ||||
|         # self.logger.info(f'All landmarks generated : {len(all_landmarks)} landmarks around {center_coordinates}, and constrained to {len(landmarks_constrained)} most important ones.') | ||||
|  | ||||
|         return all_landmarks, landmarks_constrained | ||||
|  | ||||
|   | ||||
| @@ -19,7 +19,7 @@ class Refiner : | ||||
|     detour_factor: float            # detour factor of straight line vs real distance in cities | ||||
|     detour_corridor_width: float    # width of the corridor around the path | ||||
|     average_walking_speed: float    # average walking speed of adult | ||||
|     max_landmarks_refiner: int              # max number of landmarks to visit | ||||
|     max_landmarks_refiner: int      # max number of landmarks to visit | ||||
|     optimizer: Optimizer            # optimizer object | ||||
|  | ||||
|     def __init__(self, optimizer: Optimizer) : | ||||
|   | ||||
		Reference in New Issue
	
	Block a user