def test_evaluate_teams_specific_users(self): """Tests the evaluation of teams method with specific users.""" mission_eval = mission_evaluation.evaluate_teams( self.mission, [self.user0]) self.assertEqual(1, len(mission_eval.teams)) self.assertEqual(self.user0.username, mission_eval.teams[0].team.username)
def test_evaluate_teams_specific_users(self): """Tests the evaluation of teams method with specific users.""" user0 = User.objects.get(username='******') user1 = User.objects.get(username='******') config = mission_config.MissionConfig.objects.get() mission_eval = mission_evaluation.evaluate_teams(config, [user0]) self.assertEqual(1, len(mission_eval.teams)) self.assertEqual(user0.username, mission_eval.teams[0].team)
def test_evaluate_teams_specific_users(self): """Tests the evaluation of teams method with specific users.""" user0 = User.objects.get(username='******') user1 = User.objects.get(username='******') config = mission_config.MissionConfig.objects.get() mission_eval = mission_evaluation.evaluate_teams(config, [user0]) self.assertEqual(1, len(mission_eval.teams)) self.assertEqual(user0.username, mission_eval.teams[0].team)
def get(self, request): logger.info('Admin downloading team evaluation.') # Get the mission to evaluate a team for. mission, error = mission_for_request(request.GET) if error: logger.warning('Could not get mission to evaluate teams.') return error # Get the optional team to eval. users = None if 'team' in request.GET: try: team = int(request.GET['team']) users = [User.objects.get(pk=team)] except TypeError: return HttpResponseBadRequest('Team not an ID.') except User.DoesNotExist: return HttpResponseNotFound('Team not found.') # Get the eval data for the teams. mission_eval = mission_evaluation.evaluate_teams(mission, users) if not mission_eval: logger.warning('No data for team evaluation.') return HttpResponseServerError( 'Could not get user evaluation data.') # Form Zip file. zip_io = io.BytesIO() with zipfile.ZipFile(zip_io, 'w') as zip_file: zip_file.writestr( '/evaluate_teams/all.json', self.pretty_json(json_format.MessageToJson(mission_eval))) team_jsons = [] for team_eval in mission_eval.teams: team_json = self.pretty_json( json_format.MessageToJson(team_eval)) zip_file.writestr( '/evaluate_teams/teams/%s.json' % team_eval.team, team_json) team_jsons.append(team_json) zip_file.writestr('/evaluate_teams/all.csv', self.csv_from_json(team_jsons)) zip_output = zip_io.getvalue() zip_io.close() return HttpResponse(zip_output, content_type='application/zip')
def get(self, request, pk): try: mission = MissionConfig.objects.select_related().get(pk=pk) except MissionConfig.DoesNotExist: return HttpResponseBadRequest('Mission not found.') # Get the optional team to eval. users = None if 'team' in request.GET: try: team = int(request.GET['team']) users = [User.objects.get(pk=team)] except TypeError: return HttpResponseBadRequest('Team not an ID.') except User.DoesNotExist: return HttpResponseNotFound('Team not found.') # Get the eval data for the teams. mission_eval = mission_evaluation.evaluate_teams(mission, users) if not mission_eval: return HttpResponseServerError( 'Could not get user evaluation data.') # Form Zip file. zip_io = io.BytesIO() with zipfile.ZipFile(zip_io, 'w') as zip_file: zip_file.writestr( '/evaluate_teams/all.json', pretty_json(json_format.MessageToJson(mission_eval))) team_jsons = [] for team_eval in mission_eval.teams: team_json = pretty_json(json_format.MessageToJson(team_eval)) zip_file.writestr( '/evaluate_teams/teams/%s.json' % team_eval.team.username, team_json) team_jsons.append(team_json) zip_file.writestr( '/evaluate_teams/all.html', self.feedback_template.render({'feedbacks': team_jsons})) zip_file.writestr('/evaluate_teams/all.csv', self.csv_from_json(team_jsons)) zip_output = zip_io.getvalue() zip_io.close() return HttpResponse(zip_output, content_type='application/zip')
def get(self, request): logger.info('Admin downloading team evaluation.') # Get the mission to evaluate a team for. mission, error = mission_for_request(request.GET) if error: logger.warning('Could not get mission to evaluate teams.') return error # Get the optional team to eval. users = None if 'team' in request.GET: try: team = int(request.GET['team']) users = [User.objects.get(pk=team)] except TypeError: return HttpResponseBadRequest('Team not an ID.') except User.DoesNotExist: return HttpResponseNotFound('Team not found.') # Get the eval data for the teams. mission_eval = mission_evaluation.evaluate_teams(mission, users) if not mission_eval: logger.warning('No data for team evaluation.') return HttpResponseServerError( 'Could not get user evaluation data.') # Form Zip file. zip_io = cStringIO.StringIO() with zipfile.ZipFile(zip_io, 'w') as zip_file: zip_file.writestr( '/evaluate_teams/all.json', self.pretty_json(json_format.MessageToJson(mission_eval))) team_jsons = [] for team_eval in mission_eval.teams: team_json = self.pretty_json(json_format.MessageToJson( team_eval)) zip_file.writestr('/evaluate_teams/teams/%s.json' % team_eval.team, team_json) team_jsons.append(team_json) zip_file.writestr('/evaluate_teams/all.csv', self.csv_from_json(team_jsons)) zip_output = zip_io.getvalue() zip_io.close() return HttpResponse(zip_output, content_type='application/zip')
def test_evaluate_teams(self): """Tests the evaluation of teams method.""" user0 = User.objects.get(username='******') user1 = User.objects.get(username='******') config = mission_config.MissionConfig.objects.get() mission_eval = mission_evaluation.evaluate_teams(config) # Contains user0 and user1 self.assertEqual(2, len(mission_eval.teams)) # user0 data user_eval = mission_eval.teams[0] self.assertEqual(user0.username, user_eval.team) feedback = user_eval.feedback score = user_eval.score self.assertEqual(0.0, feedback.waypoints[0].closest_for_scored_approach_ft) self.assertEqual(1.0, feedback.waypoints[0].score_ratio) self.assertEqual(0.0, feedback.waypoints[1].closest_for_scored_approach_ft) self.assertAlmostEqual(2, feedback.mission_clock_time_sec) self.assertAlmostEqual(1, feedback.flight_time_sec) self.assertAlmostEqual(0.6, feedback.out_of_bounds_time_sec) self.assertAlmostEqual(0.5, feedback.uas_telemetry_time_max_sec) self.assertAlmostEqual(1. / 6, feedback.uas_telemetry_time_avg_sec) self.assertAlmostEqual(0.445, feedback.odlc.score_ratio, places=3) self.assertEqual(25, feedback.stationary_obstacles[0].id) self.assertEqual(True, feedback.stationary_obstacles[0].hit) self.assertEqual(26, feedback.stationary_obstacles[1].id) self.assertEqual(False, feedback.stationary_obstacles[1].hit) self.assertEqual(25, feedback.moving_obstacles[0].id) self.assertEqual(True, feedback.moving_obstacles[0].hit) self.assertEqual(26, feedback.moving_obstacles[1].id) self.assertEqual(False, feedback.moving_obstacles[1].hit) self.assertEqual(1, feedback.judge.flight_time_sec) self.assertAlmostEqual(0.99948148, score.timeline.mission_time) self.assertAlmostEqual(0, score.timeline.mission_penalty) self.assertAlmostEqual(1, score.timeline.timeout) self.assertAlmostEqual(0.99958519, score.timeline.score_ratio) self.assertAlmostEqual(1, score.autonomous_flight.flight) self.assertAlmostEqual(1, score.autonomous_flight.waypoint_capture) self.assertAlmostEqual(0.5, score.autonomous_flight.waypoint_accuracy) self.assertAlmostEqual(0.3, score.autonomous_flight.out_of_bounds_penalty) self.assertAlmostEqual(0, score.autonomous_flight.things_fell_off_penalty) self.assertAlmostEqual(0, score.autonomous_flight.crashed_penalty) self.assertAlmostEqual(0.45, score.autonomous_flight.score_ratio) self.assertAlmostEqual(0.8, score.object.characteristics) self.assertAlmostEqual(0.423458165692, score.object.geolocation) self.assertAlmostEqual(0.333333333333, score.object.actionable) self.assertAlmostEqual(0.333333333333, score.object.autonomy) self.assertAlmostEqual(0.333333333333, score.object.interoperability) self.assertAlmostEqual(0, score.object.extra_object_penalty) self.assertAlmostEqual(0.444691633138, score.object.score_ratio) self.assertAlmostEqual(0, score.air_delivery.delivery_accuracy) self.assertAlmostEqual(1, score.air_delivery.score_ratio) self.assertAlmostEqual(0.8, score.operational_excellence.score_ratio) self.assertAlmostEqual(0.6038968451461928, score.score_ratio) # user1 data user_eval = mission_eval.teams[1] self.assertEqual(user1.username, user_eval.team) feedback = user_eval.feedback score = user_eval.score self.assertEqual(0.0, feedback.waypoints[0].closest_for_scored_approach_ft) self.assertEqual(1.0, feedback.waypoints[0].score_ratio) self.assertEqual(0.0, feedback.waypoints[1].closest_for_scored_approach_ft) self.assertAlmostEqual(18, feedback.mission_clock_time_sec) self.assertAlmostEqual(4, feedback.flight_time_sec) self.assertAlmostEqual(1.0, feedback.out_of_bounds_time_sec) self.assertAlmostEqual(2.0, feedback.uas_telemetry_time_max_sec) self.assertAlmostEqual(1.0, feedback.uas_telemetry_time_avg_sec) self.assertAlmostEqual(0, feedback.odlc.score_ratio, places=3) self.assertEqual(25, feedback.stationary_obstacles[0].id) self.assertEqual(False, feedback.stationary_obstacles[0].hit) self.assertEqual(26, feedback.stationary_obstacles[1].id) self.assertEqual(False, feedback.stationary_obstacles[1].hit) self.assertEqual(25, feedback.moving_obstacles[0].id) self.assertEqual(False, feedback.moving_obstacles[0].hit) self.assertEqual(26, feedback.moving_obstacles[1].id) self.assertEqual(False, feedback.moving_obstacles[1].hit) self.assertEqual(2, feedback.judge.flight_time_sec) self.assertAlmostEqual(0.99918519, score.timeline.mission_time) self.assertAlmostEqual(0, score.timeline.mission_penalty) self.assertAlmostEqual(0, score.timeline.timeout) self.assertAlmostEqual(0.79934815, score.timeline.score_ratio) self.assertAlmostEqual(0.9, score.autonomous_flight.flight) self.assertAlmostEqual(0.5, score.autonomous_flight.waypoint_capture) self.assertAlmostEqual(1, score.autonomous_flight.waypoint_accuracy) self.assertAlmostEqual(0, score.autonomous_flight.out_of_bounds_penalty) self.assertAlmostEqual(0.25, score.autonomous_flight.things_fell_off_penalty) self.assertAlmostEqual(0.35, score.autonomous_flight.crashed_penalty) self.assertAlmostEqual(0.31, score.autonomous_flight.score_ratio) self.assertAlmostEqual(0, score.object.characteristics) self.assertAlmostEqual(0, score.object.geolocation) self.assertAlmostEqual(0, score.object.actionable) self.assertAlmostEqual(0, score.object.autonomy) self.assertAlmostEqual(0, score.object.interoperability) self.assertAlmostEqual(0, score.object.extra_object_penalty) self.assertAlmostEqual(0, score.object.score_ratio) self.assertAlmostEqual(10, score.air_delivery.delivery_accuracy) self.assertAlmostEqual(0.933333333333, score.air_delivery.score_ratio) self.assertAlmostEqual(0.8, score.operational_excellence.score_ratio) self.assertAlmostEqual(0.5462681481481482, score.score_ratio)
def test_evaluate_teams(self): """Smoke tests the evaluation of teams method.""" mission_eval = mission_evaluation.evaluate_teams(self.mission) # Contains only user0 (user1 is inactive). self.assertEqual(1, len(mission_eval.teams)) user_eval = mission_eval.teams[0] self.assertEqual(self.mission.pk, user_eval.mission) self.assertEqual(self.user0.username, user_eval.team.username) self.assertEqual(self.user0.first_name, user_eval.team.name) self.assertEqual(self.user0.last_name, user_eval.team.university) feedback = user_eval.feedback score = user_eval.score self.assertGreater(len(feedback.waypoints), 0) for wpt in feedback.waypoints: self.assertGreaterEqual(wpt.closest_for_scored_approach_ft, 0) self.assertGreaterEqual(wpt.score_ratio, 0) self.assertGreater(feedback.uas_telemetry_time_max_sec, 0) self.assertGreater(feedback.uas_telemetry_time_avg_sec, 0) self.assertTrue(feedback.odlc.HasField('score_ratio')) self.assertGreater(len(feedback.stationary_obstacles), 0) for obst in feedback.stationary_obstacles: self.assertGreaterEqual(obst.id, 0) self.assertTrue(obst.HasField('hit')) self.assertGreater(feedback.judge.flight_time_sec, 0) timeline = score.timeline self.assertGreater(timeline.mission_time, 0) self.assertTrue(timeline.HasField('mission_penalty')) self.assertTrue(timeline.HasField('timeout')) self.assertGreater(timeline.score_ratio, 0) auto_flight = score.autonomous_flight self.assertTrue(auto_flight.HasField('waypoint_accuracy')) self.assertTrue(auto_flight.HasField('out_of_bounds_penalty')) self.assertTrue(auto_flight.HasField('things_fell_off_penalty')) self.assertTrue(auto_flight.HasField('crashed_penalty')) self.assertTrue(auto_flight.HasField('score_ratio')) odlc = score.object self.assertTrue(odlc.HasField('characteristics')) self.assertTrue(odlc.HasField('geolocation')) self.assertTrue(odlc.HasField('actionable')) self.assertTrue(odlc.HasField('autonomy')) self.assertTrue(odlc.HasField('extra_object_penalty')) self.assertTrue(odlc.HasField('score_ratio')) drop = score.air_drop self.assertTrue(drop.HasField('drop_accuracy')) self.assertTrue(drop.HasField('drive_to_location')) self.assertTrue(drop.HasField('score_ratio')) self.assertGreater(score.operational_excellence.score_ratio, 0) self.assertGreaterEqual(score.score_ratio, 0)
def test_evaluate_teams(self): """Tests the evaluation of teams method.""" user0 = User.objects.get(username='******') user1 = User.objects.get(username='******') config = mission_config.MissionConfig.objects.get() mission_eval = mission_evaluation.evaluate_teams(config) # Contains user0 and user1 self.assertEqual(2, len(mission_eval.teams)) # user0 data user_eval = mission_eval.teams[0] self.assertEqual(user0.username, user_eval.team) feedback = user_eval.feedback score = user_eval.score self.assertEqual(0.0, feedback.waypoints[0].closest_for_scored_approach_ft) self.assertEqual(1.0, feedback.waypoints[0].score_ratio) self.assertEqual(0.0, feedback.waypoints[1].closest_for_scored_approach_ft) self.assertAlmostEqual(2, feedback.mission_clock_time_sec) self.assertAlmostEqual(1, feedback.flight_time_sec) self.assertAlmostEqual(0.6, feedback.out_of_bounds_time_sec) self.assertAlmostEqual(0.5, feedback.uas_telemetry_time_max_sec) self.assertAlmostEqual(1. / 6, feedback.uas_telemetry_time_avg_sec) self.assertAlmostEqual(0.445, feedback.target.score_ratio, places=3) self.assertEqual(25, feedback.stationary_obstacles[0].id) self.assertEqual(True, feedback.stationary_obstacles[0].hit) self.assertEqual(26, feedback.stationary_obstacles[1].id) self.assertEqual(False, feedback.stationary_obstacles[1].hit) self.assertEqual(25, feedback.moving_obstacles[0].id) self.assertEqual(True, feedback.moving_obstacles[0].hit) self.assertEqual(26, feedback.moving_obstacles[1].id) self.assertEqual(False, feedback.moving_obstacles[1].hit) self.assertEqual(1, feedback.judge.flight_time_sec) self.assertAlmostEqual(0.99948148, score.timeline.mission_time) self.assertAlmostEqual(0, score.timeline.mission_penalty) self.assertAlmostEqual(1, score.timeline.timeout) self.assertAlmostEqual(0.99958519, score.timeline.score_ratio) self.assertAlmostEqual(1, score.autonomous_flight.flight) self.assertAlmostEqual(1, score.autonomous_flight.waypoint_capture) self.assertAlmostEqual(0.5, score.autonomous_flight.waypoint_accuracy) self.assertAlmostEqual(0.3, score.autonomous_flight.out_of_bounds_penalty) self.assertAlmostEqual(0, score.autonomous_flight.things_fell_off_penalty) self.assertAlmostEqual(0, score.autonomous_flight.crashed_penalty) self.assertAlmostEqual(0.45, score.autonomous_flight.score_ratio) self.assertAlmostEqual(0.8, score.object.characteristics) self.assertAlmostEqual(0.423458165692, score.object.geolocation) self.assertAlmostEqual(0.333333333333, score.object.actionable) self.assertAlmostEqual(0.333333333333, score.object.autonomy) self.assertAlmostEqual(0.333333333333, score.object.interoperability) self.assertAlmostEqual(0, score.object.extra_object_penalty) self.assertAlmostEqual(0.444691633138, score.object.score_ratio) self.assertAlmostEqual(0, score.air_delivery.delivery_accuracy) self.assertAlmostEqual(1, score.air_delivery.score_ratio) self.assertAlmostEqual(0.8, score.operational_excellence.score_ratio) self.assertAlmostEqual(0.6038968451461928, score.score_ratio) # user1 data user_eval = mission_eval.teams[1] self.assertEqual(user1.username, user_eval.team) feedback = user_eval.feedback score = user_eval.score self.assertEqual(0.0, feedback.waypoints[0].closest_for_scored_approach_ft) self.assertEqual(1.0, feedback.waypoints[0].score_ratio) self.assertEqual(0.0, feedback.waypoints[1].closest_for_scored_approach_ft) self.assertAlmostEqual(18, feedback.mission_clock_time_sec) self.assertAlmostEqual(4, feedback.flight_time_sec) self.assertAlmostEqual(1.0, feedback.out_of_bounds_time_sec) self.assertAlmostEqual(2.0, feedback.uas_telemetry_time_max_sec) self.assertAlmostEqual(1.0, feedback.uas_telemetry_time_avg_sec) self.assertAlmostEqual(0, feedback.target.score_ratio, places=3) self.assertEqual(25, feedback.stationary_obstacles[0].id) self.assertEqual(False, feedback.stationary_obstacles[0].hit) self.assertEqual(26, feedback.stationary_obstacles[1].id) self.assertEqual(False, feedback.stationary_obstacles[1].hit) self.assertEqual(25, feedback.moving_obstacles[0].id) self.assertEqual(False, feedback.moving_obstacles[0].hit) self.assertEqual(26, feedback.moving_obstacles[1].id) self.assertEqual(False, feedback.moving_obstacles[1].hit) self.assertEqual(2, feedback.judge.flight_time_sec) self.assertAlmostEqual(0.99918519, score.timeline.mission_time) self.assertAlmostEqual(0, score.timeline.mission_penalty) self.assertAlmostEqual(0, score.timeline.timeout) self.assertAlmostEqual(0.79934815, score.timeline.score_ratio) self.assertAlmostEqual(0.9, score.autonomous_flight.flight) self.assertAlmostEqual(0.5, score.autonomous_flight.waypoint_capture) self.assertAlmostEqual(1, score.autonomous_flight.waypoint_accuracy) self.assertAlmostEqual(0, score.autonomous_flight.out_of_bounds_penalty) self.assertAlmostEqual(0.25, score.autonomous_flight.things_fell_off_penalty) self.assertAlmostEqual(0.35, score.autonomous_flight.crashed_penalty) self.assertAlmostEqual(0.31, score.autonomous_flight.score_ratio) self.assertAlmostEqual(0, score.object.characteristics) self.assertAlmostEqual(0, score.object.geolocation) self.assertAlmostEqual(0, score.object.actionable) self.assertAlmostEqual(0, score.object.autonomy) self.assertAlmostEqual(0, score.object.interoperability) self.assertAlmostEqual(0, score.object.extra_object_penalty) self.assertAlmostEqual(0, score.object.score_ratio) self.assertAlmostEqual(10, score.air_delivery.delivery_accuracy) self.assertAlmostEqual(0.933333333333, score.air_delivery.score_ratio) self.assertAlmostEqual(0.8, score.operational_excellence.score_ratio) self.assertAlmostEqual(0.5462681481481482, score.score_ratio)
def test_evaluate_teams(self): """Tests the evaluation of teams method.""" user0 = User.objects.get(username='******') user1 = User.objects.get(username='******') config = mission_config.MissionConfig.objects.get(pk=3) mission_eval = mission_evaluation.evaluate_teams(config) # Contains user0 and user1 self.assertEqual(2, len(mission_eval.teams)) # user0 data user_eval = mission_eval.teams[0] self.assertEqual(user0.username, user_eval.team) feedback = user_eval.feedback score = user_eval.score self.assertEqual(0.0, feedback.waypoints[0].closest_for_scored_approach_ft) self.assertEqual(1.0, feedback.waypoints[0].score_ratio) self.assertEqual(0.0, feedback.waypoints[1].closest_for_scored_approach_ft) self.assertAlmostEqual(0.5, feedback.uas_telemetry_time_max_sec) self.assertAlmostEqual(1. / 6, feedback.uas_telemetry_time_avg_sec) self.assertAlmostEqual(0.454, feedback.odlc.score_ratio, places=3) self.assertEqual(25, feedback.stationary_obstacles[0].id) self.assertEqual(True, feedback.stationary_obstacles[0].hit) self.assertEqual(26, feedback.stationary_obstacles[1].id) self.assertEqual(False, feedback.stationary_obstacles[1].hit) self.assertEqual(1, feedback.judge.flight_time_sec) self.assertAlmostEqual(0.99944444, score.timeline.mission_time) self.assertAlmostEqual(0, score.timeline.mission_penalty) self.assertAlmostEqual(1, score.timeline.timeout) self.assertAlmostEqual(0.99955555, score.timeline.score_ratio) self.assertAlmostEqual(1, score.autonomous_flight.flight) self.assertAlmostEqual(1, score.autonomous_flight.waypoint_capture) self.assertAlmostEqual(0.5, score.autonomous_flight.waypoint_accuracy) self.assertAlmostEqual(1.2, score.autonomous_flight.out_of_bounds_penalty) self.assertAlmostEqual(0, score.autonomous_flight.things_fell_off_penalty) self.assertAlmostEqual(0, score.autonomous_flight.crashed_penalty) self.assertAlmostEqual(-0.45, score.autonomous_flight.score_ratio) self.assertAlmostEqual(0.8, score.object.characteristics) self.assertAlmostEqual(0.423458165692, score.object.geolocation) self.assertAlmostEqual(0.333333333333, score.object.actionable) self.assertAlmostEqual(0.333333333333, score.object.autonomy) self.assertAlmostEqual(0, score.object.extra_object_penalty) self.assertAlmostEqual(0.4537041163742234, score.object.score_ratio) self.assertAlmostEqual(0, score.air_drop.drop_accuracy) self.assertAlmostEqual(0, score.air_drop.drive_to_location) self.assertAlmostEqual(0, score.air_drop.score_ratio) self.assertAlmostEqual(0.8, score.operational_excellence.score_ratio) self.assertAlmostEqual(0.20569637883040026, score.score_ratio) # user1 data user_eval = mission_eval.teams[1] self.assertEqual(user1.username, user_eval.team) feedback = user_eval.feedback score = user_eval.score self.assertEqual(0.0, feedback.waypoints[0].closest_for_scored_approach_ft) self.assertEqual(1.0, feedback.waypoints[0].score_ratio) self.assertEqual(0.0, feedback.waypoints[1].closest_for_scored_approach_ft) self.assertAlmostEqual(2.0, feedback.uas_telemetry_time_max_sec) self.assertAlmostEqual(1.0, feedback.uas_telemetry_time_avg_sec) self.assertAlmostEqual(0, feedback.odlc.score_ratio, places=3) self.assertEqual(25, feedback.stationary_obstacles[0].id) self.assertEqual(False, feedback.stationary_obstacles[0].hit) self.assertEqual(26, feedback.stationary_obstacles[1].id) self.assertEqual(False, feedback.stationary_obstacles[1].hit) self.assertEqual(2, feedback.judge.flight_time_sec) self.assertAlmostEqual(0.9997222222222222, score.timeline.mission_time) self.assertAlmostEqual(0, score.timeline.mission_penalty) self.assertAlmostEqual(0, score.timeline.timeout) self.assertAlmostEqual(0.7997777777777778, score.timeline.score_ratio) self.assertAlmostEqual(1, score.autonomous_flight.flight) self.assertAlmostEqual(0.5, score.autonomous_flight.waypoint_capture) self.assertAlmostEqual(1, score.autonomous_flight.waypoint_accuracy) self.assertAlmostEqual( 0.1, score.autonomous_flight.safety_pilot_takeover_penalty) self.assertAlmostEqual(0, score.autonomous_flight.out_of_bounds_penalty) self.assertAlmostEqual(0.25, score.autonomous_flight.things_fell_off_penalty) self.assertAlmostEqual(0.35, score.autonomous_flight.crashed_penalty) self.assertAlmostEqual(0.25, score.autonomous_flight.score_ratio) self.assertAlmostEqual(0, score.object.characteristics) self.assertAlmostEqual(0, score.object.geolocation) self.assertAlmostEqual(0, score.object.actionable) self.assertAlmostEqual(0, score.object.autonomy) self.assertAlmostEqual(0, score.object.extra_object_penalty) self.assertAlmostEqual(0, score.object.score_ratio) self.assertAlmostEqual(1, score.air_drop.drop_accuracy) self.assertAlmostEqual(0, score.air_drop.drive_to_location) self.assertAlmostEqual(0.5, score.air_drop.score_ratio) self.assertAlmostEqual(0.8, score.operational_excellence.score_ratio) self.assertAlmostEqual(0.5099777777777779, score.score_ratio)
def test_evaluate_teams(self): """Tests the evaluation of teams method.""" user0 = User.objects.get(username='******') user1 = User.objects.get(username='******') config = mission_config.MissionConfig.objects.get() mission_eval = mission_evaluation.evaluate_teams(config) # Contains user0 and user1 self.assertEqual(2, len(mission_eval.teams)) # user0 data user_eval = mission_eval.teams[0] self.assertEqual(user0.username, user_eval.team) feedback = user_eval.feedback score = user_eval.score self.assertEqual(0.0, feedback.waypoints[0].closest_for_scored_approach_ft) self.assertEqual(1.0, feedback.waypoints[0].score_ratio) self.assertEqual(0.0, feedback.waypoints[1].closest_for_scored_approach_ft) self.assertAlmostEqual(2, feedback.mission_clock_time_sec) self.assertAlmostEqual(0.6, feedback.out_of_bounds_time_sec) self.assertAlmostEqual(0.5, feedback.uas_telemetry_time_max_sec) self.assertAlmostEqual(1. / 6, feedback.uas_telemetry_time_avg_sec) self.assertAlmostEqual(0.445, feedback.target.score_ratio, places=3) self.assertEqual(25, feedback.stationary_obstacles[0].id) self.assertEqual(True, feedback.stationary_obstacles[0].hit) self.assertEqual(26, feedback.stationary_obstacles[1].id) self.assertEqual(False, feedback.stationary_obstacles[1].hit) self.assertEqual(25, feedback.moving_obstacles[0].id) self.assertEqual(True, feedback.moving_obstacles[0].hit) self.assertEqual(26, feedback.moving_obstacles[1].id) self.assertEqual(False, feedback.moving_obstacles[1].hit) self.assertEqual(1, feedback.judge.flight_time_sec) self.assertAlmostEqual(0.99948148, score.timeline.mission_time) self.assertAlmostEqual(0, score.timeline.mission_penalty) self.assertAlmostEqual(1, score.timeline.timeout) self.assertAlmostEqual(0.99958519, score.timeline.score_ratio) # user1 data user_eval = mission_eval.teams[1] self.assertEqual(user1.username, user_eval.team) feedback = user_eval.feedback score = user_eval.score self.assertEqual(0.0, feedback.waypoints[0].closest_for_scored_approach_ft) self.assertEqual(1.0, feedback.waypoints[0].score_ratio) self.assertEqual(0.0, feedback.waypoints[1].closest_for_scored_approach_ft) self.assertAlmostEqual(18, feedback.mission_clock_time_sec) self.assertAlmostEqual(1.0, feedback.out_of_bounds_time_sec) self.assertAlmostEqual(2.0, feedback.uas_telemetry_time_max_sec) self.assertAlmostEqual(1.0, feedback.uas_telemetry_time_avg_sec) self.assertAlmostEqual(0, feedback.target.score_ratio, places=3) self.assertEqual(25, feedback.stationary_obstacles[0].id) self.assertEqual(False, feedback.stationary_obstacles[0].hit) self.assertEqual(26, feedback.stationary_obstacles[1].id) self.assertEqual(False, feedback.stationary_obstacles[1].hit) self.assertEqual(25, feedback.moving_obstacles[0].id) self.assertEqual(False, feedback.moving_obstacles[0].hit) self.assertEqual(26, feedback.moving_obstacles[1].id) self.assertEqual(False, feedback.moving_obstacles[1].hit) self.assertEqual(2, feedback.judge.flight_time_sec) self.assertAlmostEqual(0.99918519, score.timeline.mission_time) self.assertAlmostEqual(0, score.timeline.mission_penalty) self.assertAlmostEqual(0, score.timeline.timeout) self.assertAlmostEqual(0.79934815, score.timeline.score_ratio)