Download test_system.py from Arpit-Bansal/train-schedule-optimization: direct link, hf CLI and curl.
- Browser
- Download file 6.82 kB
-
https://huggingface.co/spaces/Arpit-Bansal/train-schedule-optimization/resolve/main/test_system.py
- Command line
-
hf download hf://spaces/Arpit-Bansal/train-schedule-optimization/test_system.py
-
curl -L -o test_system.py https://huggingface.co/spaces/Arpit-Bansal/train-schedule-optimization/resolve/main/test_system.py
6.82 kB
| """ | |
| Simple Test Script - Verify Metro Scheduling System | |
| Tests core functionality without requiring full API setup | |
| """ | |
| import sys | |
| import traceback | |
| def test_imports(): | |
| """Test that all modules can be imported""" | |
| print("Testing imports...") | |
| try: | |
| from DataService import metro_models | |
| from DataService import metro_data_generator | |
| from DataService import schedule_optimizer | |
| print(" β DataService modules imported successfully") | |
| return True | |
| except Exception as e: | |
| print(f" β Import failed: {e}") | |
| traceback.print_exc() | |
| return False | |
| def test_data_generation(): | |
| """Test data generation""" | |
| print("\nTesting data generation...") | |
| try: | |
| from DataService.metro_data_generator import MetroDataGenerator | |
| generator = MetroDataGenerator(num_trains=10, num_stations=10) | |
| print(f" β Generator created for {len(generator.trainset_ids)} trains") | |
| # Test route generation | |
| route = generator.generate_route() | |
| print(f" β Route generated: {route.name} with {len(route.stations)} stations") | |
| # Test train health | |
| health = generator.generate_train_health_statuses() | |
| print(f" β Generated health status for {len(health)} trains") | |
| # Test certificates | |
| certs = generator.generate_fitness_certificates("TS-001") | |
| print(f" β Generated fitness certificates") | |
| return True | |
| except Exception as e: | |
| print(f" β Data generation failed: {e}") | |
| traceback.print_exc() | |
| return False | |
| def test_schedule_optimization(): | |
| """Test schedule optimization""" | |
| print("\nTesting schedule optimization...") | |
| try: | |
| from DataService.metro_data_generator import MetroDataGenerator | |
| from DataService.schedule_optimizer import MetroScheduleOptimizer | |
| from datetime import datetime | |
| # Setup | |
| generator = MetroDataGenerator(num_trains=15, num_stations=15) | |
| route = generator.generate_route() | |
| health = generator.generate_train_health_statuses() | |
| # Create optimizer | |
| optimizer = MetroScheduleOptimizer( | |
| date=datetime.now().strftime("%Y-%m-%d"), | |
| num_trains=15, | |
| route=route, | |
| train_health=health | |
| ) | |
| print(f" β Optimizer created") | |
| # Generate schedule | |
| schedule = optimizer.optimize_schedule(min_service_trains=10, min_standby=2) | |
| print(f" β Schedule generated: {schedule.schedule_id}") | |
| print(f" - Trains in service: {schedule.fleet_summary.revenue_service}") | |
| print(f" - Total planned km: {schedule.optimization_metrics.total_planned_km}") | |
| print(f" - Optimization time: {schedule.optimization_metrics.optimization_runtime_ms} ms") | |
| return True | |
| except Exception as e: | |
| print(f" β Schedule optimization failed: {e}") | |
| traceback.print_exc() | |
| return False | |
| def test_models(): | |
| """Test Pydantic models""" | |
| print("\nTesting data models...") | |
| try: | |
| from DataService.metro_models import ( | |
| ScheduleRequest, TrainHealthStatus, Route, Station | |
| ) | |
| # Test ScheduleRequest | |
| request = ScheduleRequest( | |
| date="2025-10-25", | |
| num_trains=25, | |
| num_stations=25 | |
| ) | |
| print(f" β ScheduleRequest model validated") | |
| # Test Station | |
| station = Station( | |
| station_id="STN-001", | |
| name="Test Station", | |
| sequence=1, | |
| distance_from_origin_km=0.0 | |
| ) | |
| print(f" β Station model validated") | |
| return True | |
| except Exception as e: | |
| print(f" β Model validation failed: {e}") | |
| traceback.print_exc() | |
| return False | |
| def test_json_export(): | |
| """Test JSON export""" | |
| print("\nTesting JSON export...") | |
| try: | |
| import json | |
| from DataService.metro_data_generator import MetroDataGenerator | |
| from DataService.schedule_optimizer import MetroScheduleOptimizer | |
| from datetime import datetime | |
| generator = MetroDataGenerator(num_trains=10, num_stations=10) | |
| route = generator.generate_route() | |
| health = generator.generate_train_health_statuses() | |
| optimizer = MetroScheduleOptimizer( | |
| date=datetime.now().strftime("%Y-%m-%d"), | |
| num_trains=10, | |
| route=route, | |
| train_health=health | |
| ) | |
| schedule = optimizer.optimize_schedule() | |
| # Convert to dict and save | |
| schedule_dict = schedule.model_dump() | |
| # Try to serialize to JSON | |
| json_str = json.dumps(schedule_dict, indent=2, default=str) | |
| print(f" β Schedule exported to JSON ({len(json_str)} chars)") | |
| print(f" - Contains {len(schedule_dict['trainsets'])} trainsets") | |
| return True | |
| except Exception as e: | |
| print(f" β JSON export failed: {e}") | |
| traceback.print_exc() | |
| return False | |
| def main(): | |
| """Run all tests""" | |
| print("=" * 70) | |
| print(" METRO SCHEDULING SYSTEM - VERIFICATION TESTS") | |
| print("=" * 70) | |
| tests = [ | |
| ("Imports", test_imports), | |
| ("Data Generation", test_data_generation), | |
| ("Schedule Optimization", test_schedule_optimization), | |
| ("Data Models", test_models), | |
| ("JSON Export", test_json_export) | |
| ] | |
| results = [] | |
| for name, test_func in tests: | |
| try: | |
| result = test_func() | |
| results.append((name, result)) | |
| except Exception as e: | |
| print(f"\nβ {name} crashed: {e}") | |
| results.append((name, False)) | |
| # Summary | |
| print("\n" + "=" * 70) | |
| print(" TEST SUMMARY") | |
| print("=" * 70) | |
| passed = sum(1 for _, result in results if result) | |
| total = len(results) | |
| for name, result in results: | |
| status = "β PASS" if result else "β FAIL" | |
| print(f" {status}: {name}") | |
| print("\n" + "-" * 70) | |
| print(f" Results: {passed}/{total} tests passed") | |
| if passed == total: | |
| print("\n π All tests passed! System is ready to use.") | |
| print("\n Next steps:") | |
| print(" 1. Run: python demo_schedule.py") | |
| print(" 2. Run: python run_api.py") | |
| print(" 3. Visit: http://localhost:8000/docs") | |
| else: | |
| print("\n β οΈ Some tests failed. Please check the errors above.") | |
| print(" Make sure all dependencies are installed:") | |
| print(" pip install -r requirements.txt") | |
| print("=" * 70) | |
| return 0 if passed == total else 1 | |
| if __name__ == "__main__": | |
| sys.exit(main()) | |