コード例 #1
0
 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)
コード例 #2
0
    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)
コード例 #3
0
    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)
コード例 #4
0
ファイル: missions.py プロジェクト: MertAliTombul/interop
    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')
コード例 #5
0
ファイル: missions.py プロジェクト: thehorizondweller/interop
    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')
コード例 #6
0
ファイル: evaluate_teams.py プロジェクト: legonigel/interop
    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')
コード例 #7
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.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)
コード例 #8
0
    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)
コード例 #9
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)
コード例 #10
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(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)
コード例 #11
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(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)