PyKubeGrader 0.3.12__py3-none-any.whl → 0.3.13__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {PyKubeGrader-0.3.12.dist-info → PyKubeGrader-0.3.13.dist-info}/METADATA +1 -1
- {PyKubeGrader-0.3.12.dist-info → PyKubeGrader-0.3.13.dist-info}/RECORD +8 -8
- pykubegrader/grade_reports/grade_report.py +22 -7
- pykubegrader/grade_reports/grading_config.py +3 -0
- {PyKubeGrader-0.3.12.dist-info → PyKubeGrader-0.3.13.dist-info}/LICENSE.txt +0 -0
- {PyKubeGrader-0.3.12.dist-info → PyKubeGrader-0.3.13.dist-info}/WHEEL +0 -0
- {PyKubeGrader-0.3.12.dist-info → PyKubeGrader-0.3.13.dist-info}/entry_points.txt +0 -0
- {PyKubeGrader-0.3.12.dist-info → PyKubeGrader-0.3.13.dist-info}/top_level.txt +0 -0
@@ -13,8 +13,8 @@ pykubegrader/build/markdown_questions.py,sha256=cSh8mkHK3hh-etJdgrZu9UQi1WPrKQto
|
|
13
13
|
pykubegrader/grade_reports/__grade_reports.py,sha256=n8H_n9jdZRSPn2zlIf-GQt_Y8w91p6M8ZbdVH76Sg5k,2303
|
14
14
|
pykubegrader/grade_reports/assignments.py,sha256=I9NesLhwLelgqUekXfQCEGH-zTMAOjfb942eZYeh-Yo,7811
|
15
15
|
pykubegrader/grade_reports/class_grade_report.py,sha256=9Uuvy-xoABtjTjv-05VYhmowebgTrgEFSgh1Grws-cQ,5078
|
16
|
-
pykubegrader/grade_reports/grade_report.py,sha256=
|
17
|
-
pykubegrader/grade_reports/grading_config.py,sha256=
|
16
|
+
pykubegrader/grade_reports/grade_report.py,sha256=iTOe1sRNbsJc-Q4M_ELEMHePObLjHd0z-pm3G0sG37E,16962
|
17
|
+
pykubegrader/grade_reports/grading_config.py,sha256=FIK25yW0MbYCqCiCX9pxGLonnTjRvXFIOLrf9qZvFwY,2531
|
18
18
|
pykubegrader/grade_reports/test.ipynb,sha256=NkMZHcfBd-uJw3i1Y9ux-epBP5GiVFEhda5wxEbK0cU,808
|
19
19
|
pykubegrader/graders/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
|
20
20
|
pykubegrader/graders/late_assignments.py,sha256=_2-rA5RqO0BWY9WAQA_mbCxxPKTOiJOl-byD2CYWaE0,1393
|
@@ -39,9 +39,9 @@ pykubegrader/widgets_base/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-
|
|
39
39
|
pykubegrader/widgets_base/multi_select.py,sha256=WhpS7a8V3BOuEfEyFPzcDhMbgr7p1a4FFh_mKU1HLbI,4226
|
40
40
|
pykubegrader/widgets_base/reading.py,sha256=ChUS3NOTa_HLtNpxR8hGX80LPKMvYMypnR6dFknfxus,5430
|
41
41
|
pykubegrader/widgets_base/select.py,sha256=qP31bjTWIn8LEgKwtNUJbgJnum6P7bx6A_At-u1ivFk,2750
|
42
|
-
PyKubeGrader-0.3.
|
43
|
-
PyKubeGrader-0.3.
|
44
|
-
PyKubeGrader-0.3.
|
45
|
-
PyKubeGrader-0.3.
|
46
|
-
PyKubeGrader-0.3.
|
47
|
-
PyKubeGrader-0.3.
|
42
|
+
PyKubeGrader-0.3.13.dist-info/LICENSE.txt,sha256=YTp-Ewc8Kems8PJEE27KnBPFnZSxoWvSg7nnknzPyYw,1546
|
43
|
+
PyKubeGrader-0.3.13.dist-info/METADATA,sha256=QXj0QbWpmsOkRnSlhMKyhpFrG8pPQcaNLqHOY_hArRk,2758
|
44
|
+
PyKubeGrader-0.3.13.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
|
45
|
+
PyKubeGrader-0.3.13.dist-info/entry_points.txt,sha256=RR57KvzDRJrP4omy5heS5cZ3E7g56YxcxJhDnp57ZU0,253
|
46
|
+
PyKubeGrader-0.3.13.dist-info/top_level.txt,sha256=e550Klfze6higFxER1V62fnGOcIgiKRbsrl9CC4UdtQ,13
|
47
|
+
PyKubeGrader-0.3.13.dist-info/RECORD,,
|
@@ -10,6 +10,7 @@ from pykubegrader.grade_reports.grading_config import (
|
|
10
10
|
optional_drop_week,
|
11
11
|
exclude_from_running_avg,
|
12
12
|
custom_grade_adjustments,
|
13
|
+
duplicated_scores,
|
13
14
|
)
|
14
15
|
|
15
16
|
import pandas as pd
|
@@ -29,7 +30,7 @@ class GradeReport:
|
|
29
30
|
start_date (str, optional): The start date of the course. Defaults to "2025-01-06".
|
30
31
|
verbose (bool, optional): Indicates if verbose output should be displayed. Defaults to True.
|
31
32
|
"""
|
32
|
-
self.assignments, self.student_subs = get_assignments_submissions(params=params)
|
33
|
+
self.assignments, self.student_subs = get_assignments_submissions(params=params)
|
33
34
|
|
34
35
|
self.start_date = start_date
|
35
36
|
self.verbose = verbose
|
@@ -48,6 +49,7 @@ class GradeReport:
|
|
48
49
|
self.calculate_grades()
|
49
50
|
self.update_assignments_not_due_yet()
|
50
51
|
self.calculate_grades()
|
52
|
+
self.duplicate_scores()
|
51
53
|
self.drop_lowest_n_for_types(1)
|
52
54
|
self.update_weekly_table()
|
53
55
|
self._build_running_avg()
|
@@ -400,13 +402,26 @@ class GradeReport:
|
|
400
402
|
|
401
403
|
# Exempt the lowest `n` assignments
|
402
404
|
dropped = []
|
403
|
-
i =
|
405
|
+
i = 0
|
406
|
+
j = 0
|
404
407
|
while i < n:
|
405
|
-
i
|
406
|
-
valid_assignments[i].
|
407
|
-
|
408
|
+
valid_assignments[i+j].exempted = True
|
409
|
+
if valid_assignments[i+j].week in self.optional_drop_week:
|
410
|
+
j += 1
|
408
411
|
continue
|
409
|
-
dropped.append(valid_assignments[i])
|
410
|
-
self.student_assignments_dropped.append(valid_assignments[i])
|
412
|
+
dropped.append(valid_assignments[i+j])
|
413
|
+
self.student_assignments_dropped.append(valid_assignments[i+j])
|
414
|
+
i += 1
|
411
415
|
|
412
416
|
self.calculate_grades()
|
417
|
+
|
418
|
+
def duplicate_scores(self):
|
419
|
+
"""Duplicate scores from one assignment to another"""
|
420
|
+
|
421
|
+
for (week, assignment_type), (duplicate_week, duplicate_assignment_type) in duplicated_scores:
|
422
|
+
assignment = self.get_graded_assignment(week, assignment_type)[0]
|
423
|
+
duplicate_assignment = self.get_graded_assignment(duplicate_week, duplicate_assignment_type)[0]
|
424
|
+
duplicate_assignment.score = assignment.score
|
425
|
+
duplicate_assignment._score = assignment._score
|
426
|
+
duplicate_assignment.exempted = assignment.exempted
|
427
|
+
|
@@ -61,6 +61,9 @@ dropped_assignments = [
|
|
61
61
|
"labattendance",
|
62
62
|
]
|
63
63
|
|
64
|
+
# Duplicated scores, a list of tuples of assignment types and weeks where the scores will be duplicated
|
65
|
+
duplicated_scores = [[(7, "lab"), (7, "homework")]]
|
66
|
+
|
64
67
|
# TAs and other users to skip in class grade report
|
65
68
|
skipped_users = ['JCA', 'jca92', 'cnp68', 'dak329', 'xz498', 'ag4328', 'rg897', 'jce63', 'qt49']
|
66
69
|
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|