Example #1
0
def test_register_courses_weight_invalid_negative():
    tracker = pygtracker.GradeTracker()
    df = generate_df_register_courses(
        [523], ["lab4", "lab2", "lab1", "lab3"], [-0.5, 0.2, 0.7, 0.6]
    )

    with raises(ValueError):
        tracker.register_courses(df)
Example #2
0
def test_record_grades_grade_invalid_negative():
    tracker = pygtracker.GradeTracker()
    df = generate_df_record_grade(
        [511], ["xiran"], ["lab4", "lab2", "lab1", "lab3"], [100.0, -77, 99, 88.4]
    )

    with raises(ValueError):
        tracker.record_grades(df)
Example #3
0
def test_record_grades_grade_invalid_over_100():
    tracker = pygtracker.GradeTracker()
    df = generate_df_record_grade(
        [511], ["kevin"], ["lab4", "lab2", "lab1", "lab3"], [100.1, 77, 99, 88.4]
    )

    with raises(ValueError):
        tracker.record_grades(df)
Example #4
0
def generate_input_calculate_final_grade():
    tracker = pygtracker.GradeTracker()
    tracker.courses = pd.DataFrame(
        np.array(
            [
                ["511", 0.15, 0.15, 0.15, 0.15, 0.2, 0.2, 0, 0, 0, 0, 0],
                ["522", 0, 0, 0, 0, 0, 0, 0.1, 0.2, 0.2, 0.3, 0.2],
            ]
        ),
        columns=[
            "course_id",
            "lab1",
            "lab2",
            "lab3",
            "lab4",
            "quiz1",
            "quiz2",
            "milestone1",
            "milestone2",
            "milestone3",
            "milestone4",
            "feedback",
        ],
    )

    tracker.grades = pd.DataFrame(
        np.array(
            [
                ["511", "tom", 100, 100, 79.2, 83.6, 75.6, 75.6, 0, 0, 0, 0, 0],
                ["511", "tiff", 87.6, 100, 81.2, 89.2, 100, 73.2, 0, 0, 0, 0, 0],
                ["511", "mike", 84.4, 79.6, 75.2, 98.8, 84.8, 100, 0, 0, 0, 0, 0],
                ["511", "joel", 100, 100, 99.6, 71.2, 96.8, 79.2, 0, 0, 0, 0, 0],
                ["522", "tom", 0, 0, 0, 0, 0, 0, 100, 97.6, 80, 100, 100],
                ["522", "tiff", 0, 0, 0, 0, 0, 0, 100, 77.2, 76.8, 100, 85.6],
                ["522", "mike", 0, 0, 0, 0, 0, 0, 92, 75.6, 97.6, 84.4, 98.8],
                ["522", "joel", 0, 0, 0, 0, 0, 0, 98.4, 85.6, 96.8, 100, 82.4],
            ]
        ),
        columns=[
            "course_id",
            "student_id",
            "lab1",
            "lab2",
            "lab3",
            "lab4",
            "quiz1",
            "quiz2",
            "milestone1",
            "milestone2",
            "milestone3",
            "milestone4",
            "feedback",
        ],
    )
    tracker.courses = convert_dtypes_to_float(tracker.courses)
    tracker.grades = convert_dtypes_to_float(tracker.grades)

    return tracker
Example #5
0
def test_register_courses_weight_invalid_not_sum_to_one():
    tracker = pygtracker.GradeTracker()
    df = generate_df_register_courses(
        [511],
        ["lab4", "lab2", "lab1", "lab3"],
        [
            0.2,
            0.3,
            0.4,
            0.2,
        ],
    )

    with raises(ValueError):
        tracker.register_courses(df)
Example #6
0
def test_register_courses_expected_df():
    tracker = pygtracker.GradeTracker()
    df = generate_df_register_courses(
        [523],
        ["lab1", "lab2", "lab3", "lab4", "quiz1", "quiz2"],
        [0.15, 0.15, 0.15, 0.15, 0.2, 0.2],
    )
    tracker.register_courses(df)

    res_df = generate_df_register_courses_output(
        [523],
        ["lab1", "lab2", "lab3", "lab4", "quiz1", "quiz2"],
        [0.15, 0.15, 0.15, 0.15, 0.2, 0.2],
    )

    assert_frame_equal(tracker.courses, res_df)
Example #7
0
def test_record_grades_expected_df():
    tracker = pygtracker.GradeTracker()
    df = generate_df_record_grade(
        [552],
        ["fiona"],
        ["lab1", "lab2", "lab3", "lab4", "quiz1", "quiz2"],
        [66.6, 88.8, 77.7, 99.9, 90.9, 67.89],
    )

    tracker.record_grades(df)
    grade_df = generate_df_record_grades_output(
        [552],
        ["fiona"],
        ["lab1", "lab2", "lab3", "lab4", "quiz1", "quiz2"],
        [66.6, 88.8, 77.7, 99.9, 90.9, 67.89],
    )

    assert_frame_equal(tracker.grades, grade_df)
Example #8
0
def generate_input_suggest_grade_adjustment():
    tracker = pygtracker.GradeTracker()
    tracker.courses = pd.DataFrame(
        np.array([["511", 0.15, 0.15, 0.15, 0.15, 0.2, 0.2]]),
        columns=["course_id", "lab1", "lab2", "lab3", "lab4", "quiz1", "quiz2"],
    )
    tracker.grades = pd.DataFrame(
        np.array([["511", "studentA", 90, 90, 90, 90, 85, 85]]),
        columns=[
            "course_id",
            "student_id",
            "lab1",
            "lab2",
            "lab3",
            "lab4",
            "quiz1",
            "quiz2",
        ],
    )
    tracker.courses = convert_dtypes_to_float(tracker.courses)
    tracker.grades = convert_dtypes_to_float(tracker.grades)

    return tracker
Example #9
0
def test_record_grades_course_id_invalid():
    tracker = pygtracker.GradeTracker()
    df = generate_df_record_grade([577], ["lab2"], [99.1], ["vaden"])

    with raises(ValueError):
        tracker.record_grades(df)
Example #10
0
def test_integration_all_functions():
    tracker = pygtracker.GradeTracker()

    courses = pd.read_csv(os.path.join(".", "tests", "test_data", "course_info.csv"))
    grades = pd.read_csv(os.path.join(".", "tests", "test_data", "student_info.csv"))

    tracker.register_courses(courses)
    tracker.record_grades(grades)

    expected_tracker = generate_input_calculate_final_grade()

    # courses are recorded correctly
    assert_frame_equal(
        tracker.courses, expected_tracker.courses[tracker.courses.columns]
    )

    # grades are recorded correctly
    assert_frame_equal(
        tracker.grades.sort_values(by=["course_id", "student_id"]),
        expected_tracker.grades[tracker.grades.columns]
        .sort_values(by=["course_id", "student_id"])
        .reset_index(drop=True),
    )

    course_stat = tracker.generate_course_statistics(["511"])

    expected_stat = convert_dtypes_to_float(
        pd.DataFrame(
            np.array([["511", 87.87, 86.91, 88.0, 88.96]]),
            columns=["course_id", "mean", "1st-quantile", "median", "3rd-quantile"],
        )
    )

    # stats are generated correctly
    assert_frame_equal(course_stat, expected_stat)

    courses_rank = tracker.rank_courses()

    expected_courses_rank = convert_dtypes_to_float(
        pd.DataFrame(
            np.array([["522", 91.29], ["511", 87.87]]), columns=["course_id", "grade"]
        )
    )

    # courses are ranked correctly
    assert_frame_equal(courses_rank.reset_index(drop=True), expected_courses_rank)

    students_rank = tracker.rank_students()

    expected_students_rank = convert_dtypes_to_float(
        pd.DataFrame(
            np.array([["joel", 91.81, 1.0], ["tom", 90.09, 2.0], ["mike", 88.29, 3.0]]),
            columns=["student_id", "grade", "rank"],
        )
    )

    # students are ranked correctly
    assert_frame_equal(students_rank, expected_students_rank)

    adj_grades = tracker.suggest_grade_adjustment("511", benchmark_course=100)

    expected_adj_grades = convert_dtypes_to_float(
        pd.DataFrame(
            np.array(
                [
                    ["511", "joel", 0, 100, 100, 100, 100, 0, 0, 0, 0, 100, 100],
                    ["511", "mike", 0, 100, 100, 100, 100, 0, 0, 0, 0, 100, 100],
                    ["511", "tiff", 0, 100, 100, 100, 100, 0, 0, 0, 0, 100, 100],
                    ["511", "tom", 0, 100, 100, 100, 100, 0, 0, 0, 0, 100, 100],
                ]
            ),
            columns=[
                "course_id",
                "student_id",
                "feedback",
                "lab1",
                "lab2",
                "lab3",
                "lab4",
                "milestone1",
                "milestone2",
                "milestone3",
                "milestone4",
                "quiz1",
                "quiz2",
            ],
        )
    )

    # grades are adjusted correctly
    assert_frame_equal(adj_grades, expected_adj_grades)

    final_grades = tracker.calculate_final_grade(["511"])

    expected_final_grades = convert_dtypes_to_float(
        pd.DataFrame(
            np.array(
                [
                    ["511", "joel", 90.82],
                    ["511", "mike", 87.66],
                    ["511", "tiff", 88.34],
                    ["511", "tom", 84.66],
                ]
            ),
            columns=["course_id", "student_id", "grade"],
        )
    )

    # final grades are correct
    assert_frame_equal(final_grades, expected_final_grades)
Example #11
0
def test_suggest_grade_adjustment_benchmark_quiz_less_than_zero():
    tracker = pygtracker.GradeTracker()
    with raises(ValueError):
        tracker.suggest_grade_adjustment(
            course_id="511", benchmark_course=90, benchmark_lab=90, benchmark_quiz=-2
        )
Example #12
0
def test_suggest_grade_adjustment_benchmark_quiz_not_float():
    tracker = pygtracker.GradeTracker()
    with raises(TypeError):
        tracker.suggest_grade_adjustment(
            course_id="511", benchmark_course=80, benchmark_lab=90, benchmark_quiz="90"
        )
Example #13
0
def test_suggest_grade_adjustment_course_id_not_string():
    tracker = pygtracker.GradeTracker()
    with raises(TypeError):
        tracker.suggest_grade_adjustment(course_id=None)
Example #14
0
def test_rank_students_course_input_not_string():
    gradetracker = pygtracker.GradeTracker()
    with raises(TypeError):
        gradetracker.rank_students(course_id=511)
Example #15
0
def test_rank_students_n_input_not_integer():
    gradetracker = pygtracker.GradeTracker()
    with raises(TypeError):
        gradetracker.rank_students(n="4")
Example #16
0
def test_rank_students_ascending_input_not_bool():
    gradetracker = pygtracker.GradeTracker()
    with raises(TypeError):
        gradetracker.rank_students(course_id="511", ascending="True")
Example #17
0
def test_record_grades_assess_invalid():
    tracker = pygtracker.GradeTracker()
    df = generate_df_record_grade([571], ["lab6"], [100], ["selina"])

    with raises(ValueError):
        tracker.record_grades(df)
Example #18
0
def test_suggest_grade_adjustment_benchmark_quiz_more_than_one_hundred():
    tracker = pygtracker.GradeTracker()
    with raises(ValueError):
        tracker.suggest_grade_adjustment(
            course_id="511", benchmark_course=90, benchmark_lab=90, benchmark_quiz=150
        )
Example #19
0
def test_register_courses_assess_invalid():
    tracker = pygtracker.GradeTracker()
    df = generate_df_register_courses([522], ["lab5"], [1])

    with raises(ValueError):
        tracker.register_courses(df)