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)
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)
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)
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
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)
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)
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)
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
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)
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)
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 )
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" )
def test_suggest_grade_adjustment_course_id_not_string(): tracker = pygtracker.GradeTracker() with raises(TypeError): tracker.suggest_grade_adjustment(course_id=None)
def test_rank_students_course_input_not_string(): gradetracker = pygtracker.GradeTracker() with raises(TypeError): gradetracker.rank_students(course_id=511)
def test_rank_students_n_input_not_integer(): gradetracker = pygtracker.GradeTracker() with raises(TypeError): gradetracker.rank_students(n="4")
def test_rank_students_ascending_input_not_bool(): gradetracker = pygtracker.GradeTracker() with raises(TypeError): gradetracker.rank_students(course_id="511", ascending="True")
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)
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 )
def test_register_courses_assess_invalid(): tracker = pygtracker.GradeTracker() df = generate_df_register_courses([522], ["lab5"], [1]) with raises(ValueError): tracker.register_courses(df)