Exemple #1
0
def criterions():
    c1 = criterion.HomogeneousCriterion()
    c2 = criterion.HeterogeneousCriterion()
    c3 = criterion.LonelyMemberCriterion()

    d1 = {"Homogeneous": c1, "Heterogeneous": c2, "LonelyMember": c3}
    return d1
Exemple #2
0
    def test_lonely_numeric(self):
        c = criterion.LonelyMemberCriterion()
        q = survey.NumericQuestion(0, "OH Shit", 2, 8)
        a1 = survey.Answer(2)
        a2 = survey.Answer(5)
        a3 = survey.Answer(7)
        assert q.get_similarity(a1, a1) != 0.0
        assert c.score_answers(q, [a1]) == 0.0, '''single answer should result in 0'''
        assert c.score_answers(q, [a1, a2]) == 0.0
        assert fuck_within(c.score_answers(q, [a1, a1, a1]), 1)
        assert fuck_within(c.score_answers(q, [a1, a1, a2, a2]), 1)
        assert fuck_within(c.score_answers(q, [a1, a2, a1]), 0)
        assert fuck_within(c.score_answers(q, [a1, a2, a1, a3]), 0)
        assert fuck_within(c.score_answers(q, [a1, a1, a1, a2, a2]), 1)
        assert fuck_within(c.score_answers(q, [a1, a2, a1, a1, a2, a3]), 0)
        assert fuck_within(c.score_answers(q, [a1, a2, a1, a1, a2, a3, a3]), 1)

        # This is to test you throw an exception when one answer is not valid
        a4 = survey.Answer(10)

        # first answer is invalid
        with pytest.raises(criterion.InvalidAnswerError) as info:
            c.score_answers(q, [a4, a1, a2])
        assert info

        # last answer is invalid
        with pytest.raises(criterion.InvalidAnswerError) as info:
            c.score_answers(q, [a4])
        with pytest.raises(criterion.InvalidAnswerError) as info:
            c.score_answers(q, [a1, a2, a4])
        assert info, 'if you fail this test, maybe your code return too early'
Exemple #3
0
 def test_set_criterion(self, questions):
     s = survey.Survey(questions)
     for q in questions:
         s.set_criterion(criterion.LonelyMemberCriterion(), q)
     for f in questions:
         assert isinstance(s._get_criterion(f),
                           criterion.LonelyMemberCriterion)
Exemple #4
0
 def test_score_studs_lonely(self, survey_with_YN_question, students,
                             YNQuestions):
     crit = criterion.LonelyMemberCriterion()
     for q in YNQuestions:
         for stud in students:
             ans = survey.Answer(False)
             stud.set_answer(q, ans)
     for q in survey_with_YN_question._ques:
         survey_with_YN_question.set_criterion(crit, q)
     for q in survey_with_YN_question._ques:
         survey_with_YN_question.set_weight(0.5, q)
     assert pytest.approx(
         survey_with_YN_question.score_students(students)) == 0.5
Exemple #5
0
 def test_lonely_mc(self):
     c = criterion.LonelyMemberCriterion()
     q = survey.MultipleChoiceQuestion(0, "Shit", ["A", "B", "C"])
     a1 = survey.Answer("A")
     a2 = survey.Answer("B")
     a3 = survey.Answer("C")
     assert q.get_similarity(a1, a1) != 0.0
     assert c.score_answers(q, [a1]) == 0.0, '''single answer should result in 0'''
     assert c.score_answers(q, [a1, a2]) == 0.0
     assert fuck_within(c.score_answers(q, [a1, a1, a1]), 1)
     assert fuck_within(c.score_answers(q, [a1, a1, a2, a2]), 1)
     assert fuck_within(c.score_answers(q, [a1, a2, a1]), 0)
     assert fuck_within(c.score_answers(q, [a1, a2, a1, a3]), 0)
     assert fuck_within(c.score_answers(q, [a1, a1, a1, a2, a2]), 1)
     assert fuck_within(c.score_answers(q, [a1, a2, a1, a1, a2, a3]), 0)
     assert fuck_within(c.score_answers(q, [a1, a2, a1, a1, a2, a3, a3]), 1)
Exemple #6
0
def criteria(answers) -> List[criterion.Criterion]:
    return [
        criterion.HomogeneousCriterion(),
        criterion.HeterogeneousCriterion(),
        criterion.LonelyMemberCriterion()
    ]
Exemple #7
0
def test_criterion_lonelymember_raise_invalidanswererror():
    question = survey.NumericQuestion(1, 'Do you like food?', 0, 10)
    answer = [survey.Answer(11)]
    with pytest.raises(InvalidAnswerError):
        criterion.LonelyMemberCriterion().score_answers(question, answer)
Exemple #8
0
def test_criterion_lonelymember_criterion_score_answers() -> None:
    question1 = survey.YesNoQuestion(1, 'Do you like food?')
    answer1 = [survey.Answer(True), survey.Answer(True), survey.Answer(False)]
    assert criterion.LonelyMemberCriterion().score_answers(question1,
                                                           answer1) == 0.0
Exemple #9
0
 def test_set_criterion(self) -> None:
     s = survey.Survey(self.questions)
     assert s.set_criterion(criterion.LonelyMemberCriterion(), self.q1)
     assert s.set_criterion(criterion.HeterogeneousCriterion(), self.q5)
     assert not s.set_criterion(criterion.HomogeneousCriterion(), self.q2)
Exemple #10
0
 def test_lonely(self) -> None:
     sad = criterion.LonelyMemberCriterion()
     assert sad.score_answers(self.question2, self.answers2) == 0.0
     assert sad.score_answers(self.question2, self.answers3) == 1.0
Exemple #11
0
    def test_combination(self):
        students = [course.Student(i, "Shit" + str(i)) for i in range(8)]
        q1 = survey.YesNoQuestion(0, "To be, or not to be")
        q2 = survey.NumericQuestion(1, "How many times you f**k up", 0, 10000)
        q3 = survey.MultipleChoiceQuestion(2, "What's your favorite thing to do", ['A', 'B', 'C', 'D'])
        q4 = survey.CheckboxQuestion(3, "How many things you have done", ['A', 'B', 'C', 'D', 'E'])
        questions = [q1, q2, q3, q4]
        s = survey.Survey(questions)

        answers = [True, 1111, 'A', ['A', 'C'],
                   False, 44, 'C', ['A', 'B', 'C'],
                   True, 3, 'B', ['A', 'C', 'D'],
                   True, 56, 'C', ['D', 'C'],
                   False, 12, 'C', ['E'],
                   True, 0, 'A', ['A'],
                   False, 888, 'C', ['A', 'B', 'C', 'D'],
                   True, 12, 'B', ['A', 'B', 'C', 'D', 'E']]

        i = 0
        for stu in students:
            for q in questions:
                stu.set_answer(q, survey.Answer(answers[i]))
                i += 1

        c = course.Course("Asshole101")
        c.enroll_students(students)

        grouping = grouper.AlphaGrouper(3).make_grouping(c, s)
        assert len(grouping) == 3
        assert grouping_to_list_of_list(grouping) == [[0, 1, 2], [3, 4, 5], [6, 7]]

        grouping = grouper.GreedyGrouper(3).make_grouping(c, s)
        assert len(grouping) == 3
        assert grouping_to_list_of_list(grouping) == [[0, 2, 5], [1, 4, 6], [3, 7]]

        grouping = grouper.WindowGrouper(3).make_grouping(c, s)
        assert len(grouping) == 3
        assert grouping_to_list_of_list(grouping) == [[0, 4, 5], [1, 2, 3], [6, 7]]

        s.set_criterion(criterion.HeterogeneousCriterion(), q2)
        s.set_weight(2, q1)
        s.set_weight(2, q1)
        s.set_weight(3, q2)
        s.set_weight(55, q4)

        grouping = grouper.AlphaGrouper(3).make_grouping(c, s)
        assert len(grouping) == 3
        assert grouping_to_list_of_list(grouping) == [[0, 1, 2], [3, 4, 5], [6, 7]]

        grouping = grouper.GreedyGrouper(3).make_grouping(c, s)
        assert len(grouping) == 3
        assert grouping_to_list_of_list(grouping) == [[0, 2, 6], [1, 3, 7], [4, 5]]

        grouping = grouper.WindowGrouper(3).make_grouping(c, s)
        assert len(grouping) == 3
        assert grouping_to_list_of_list(grouping) == [[0, 1, 2], [3, 4], [5, 6, 7]]

        s.set_weight(2, q1)
        s.set_weight(1, q2)
        s.set_weight(5, q3)
        s.set_weight(2, q4)
        s.set_criterion(criterion.LonelyMemberCriterion(), q1)
        s.set_criterion(criterion.LonelyMemberCriterion(), q2)
        s.set_criterion(criterion.LonelyMemberCriterion(), q3)
        s.set_criterion(criterion.LonelyMemberCriterion(), q4)

        grouping = grouper.AlphaGrouper(3).make_grouping(c, s)
        assert len(grouping) == 3
        assert grouping_to_list_of_list(grouping) == [[0, 1, 2], [3, 4, 5], [6, 7]]

        grouping = grouper.GreedyGrouper(3).make_grouping(c, s)
        assert len(grouping) == 3
        assert grouping_to_list_of_list(grouping) == [[0, 2, 5], [1, 4, 6], [3, 7]]

        grouping = grouper.WindowGrouper(3).make_grouping(c, s)
        assert len(grouping) == 3
        assert grouping_to_list_of_list(grouping) == [[0, 1, 2], [3, 4, 5], [6, 7]]

        # make one of the student's answer invalid
        students[0].set_answer(q1, survey.Answer('F**K'))

        grouping = grouper.AlphaGrouper(3).make_grouping(c, s)
        assert len(grouping) == 3
        assert grouping_to_list_of_list(grouping) == [[0, 1, 2], [3, 4, 5], [6, 7]]

        grouping = grouper.GreedyGrouper(3).make_grouping(c, s)
        assert len(grouping) == 3
        assert grouping_to_list_of_list(grouping) == [[0, 1, 2], [3, 4, 6], [5, 7]]

        grouping = grouper.WindowGrouper(3).make_grouping(c, s)
        assert len(grouping) == 3
        assert grouping_to_list_of_list(grouping) == [[0, 1, 2], [3, 4, 5], [6, 7]]
Exemple #12
0
def lonely():
    return criterion.LonelyMemberCriterion()
Exemple #13
0
 def test_score_ans(self, questions, answers):
     q1 = survey.YesNoQuestion(1, 'hey')
     h = criterion.LonelyMemberCriterion()
     assert h.score_answers(q1, []) == 1.0