Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
E
edx-platform
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
edx
edx-platform
Commits
97f4f1b7
Commit
97f4f1b7
authored
Apr 15, 2012
by
Bridger Maxwell
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Added more tests and documentation to grade refactor.
parent
03ea89f6
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
56 additions
and
2 deletions
+56
-2
djangoapps/courseware/grades.py
+6
-2
djangoapps/courseware/tests.py
+50
-0
No files found.
djangoapps/courseware/grades.py
View file @
97f4f1b7
...
...
@@ -23,11 +23,15 @@ class CourseGrader(object):
class
WeightedSubsectionsGrader
(
CourseGrader
):
"""
This grader takes a list of tuples containing (grader, category_name, weight) and computes
a final grade by totalling the contribution of each sub grader and
weighting it
accordingly
. For example, the sections may be
a final grade by totalling the contribution of each sub grader and
multiplying it by the
given weight
. For example, the sections may be
[ (homeworkGrader, "Homework", 0.15), (labGrader, "Labs", 0.15), (midtermGrader, "Midterm", 0.30), (finalGrader, "Final", 0.40) ]
All items in section_breakdown for each subgrader will be combined. A grade_breakdown will be
composed using the score from each grader.
Note that the sum of the weights is not take into consideration. If the weights add up to
a value > 1, the student may end up with a percent > 100
%
. This allows for sections that
are extra credit.
"""
def
__init__
(
self
,
sections
):
self
.
sections
=
sections
...
...
djangoapps/courseware/tests.py
View file @
97f4f1b7
...
...
@@ -140,6 +140,56 @@ class GraderTest(unittest.TestCase):
self
.
assertAlmostEqual
(
graded
[
'percent'
],
0.2
)
self
.
assertEqual
(
len
(
graded
[
'section_breakdown'
]),
1
)
def
test_WeightedSubsectionsGrader
(
self
):
#First, a few sub graders
homeworkGrader
=
AssignmentFormatGrader
(
"Homework"
,
12
,
2
)
labGrader
=
AssignmentFormatGrader
(
"Lab"
,
7
,
3
)
midtermGrader
=
SingleSectionGrader
(
"Midterm"
,
"Midterm Exam"
)
weightedGrader
=
WeightedSubsectionsGrader
(
[(
homeworkGrader
,
homeworkGrader
.
category
,
0.25
),
(
labGrader
,
labGrader
.
category
,
0.25
),
(
midtermGrader
,
midtermGrader
.
category
,
0.5
)]
)
overOneWeightsGrader
=
WeightedSubsectionsGrader
(
[(
homeworkGrader
,
homeworkGrader
.
category
,
0.5
),
(
labGrader
,
labGrader
.
category
,
0.5
),
(
midtermGrader
,
midtermGrader
.
category
,
0.5
)]
)
#The midterm should have all weight on this one
zeroWeightsGrader
=
WeightedSubsectionsGrader
(
[(
homeworkGrader
,
homeworkGrader
.
category
,
0.0
),
(
labGrader
,
labGrader
.
category
,
0.0
),
(
midtermGrader
,
midtermGrader
.
category
,
0.5
)]
)
#This should always have a final percent of zero
allZeroWeightsGrader
=
WeightedSubsectionsGrader
(
[(
homeworkGrader
,
homeworkGrader
.
category
,
0.0
),
(
labGrader
,
labGrader
.
category
,
0.0
),
(
midtermGrader
,
midtermGrader
.
category
,
0.0
)]
)
graded
=
weightedGrader
.
grade
(
self
.
test_gradesheet
)
self
.
assertAlmostEqual
(
graded
[
'percent'
],
0.5106547619047619
)
self
.
assertEqual
(
len
(
graded
[
'section_breakdown'
]),
(
12
+
1
)
+
(
7
+
1
)
+
1
)
self
.
assertEqual
(
len
(
graded
[
'grade_breakdown'
]),
3
)
graded
=
overOneWeightsGrader
.
grade
(
self
.
test_gradesheet
)
self
.
assertAlmostEqual
(
graded
[
'percent'
],
0.7688095238095238
)
self
.
assertEqual
(
len
(
graded
[
'section_breakdown'
]),
(
12
+
1
)
+
(
7
+
1
)
+
1
)
self
.
assertEqual
(
len
(
graded
[
'grade_breakdown'
]),
3
)
graded
=
zeroWeightsGrader
.
grade
(
self
.
test_gradesheet
)
self
.
assertAlmostEqual
(
graded
[
'percent'
],
0.2525
)
self
.
assertEqual
(
len
(
graded
[
'section_breakdown'
]),
(
12
+
1
)
+
(
7
+
1
)
+
1
)
self
.
assertEqual
(
len
(
graded
[
'grade_breakdown'
]),
3
)
graded
=
allZeroWeightsGrader
.
grade
(
self
.
test_gradesheet
)
self
.
assertAlmostEqual
(
graded
[
'percent'
],
0.0
)
self
.
assertEqual
(
len
(
graded
[
'section_breakdown'
]),
(
12
+
1
)
+
(
7
+
1
)
+
1
)
self
.
assertEqual
(
len
(
graded
[
'grade_breakdown'
]),
3
)
for
graded
in
[
weightedGrader
.
grade
(
self
.
empty_gradesheet
),
weightedGrader
.
grade
(
self
.
incomplete_gradesheet
),
zeroWeightsGrader
.
grade
(
self
.
empty_gradesheet
),
allZeroWeightsGrader
.
grade
(
self
.
empty_gradesheet
)]:
self
.
assertAlmostEqual
(
graded
[
'percent'
],
0.0
)
#section_breakdown should have all subsections from before
self
.
assertEqual
(
len
(
graded
[
'section_breakdown'
]),
(
12
+
1
)
+
(
7
+
1
)
+
1
)
self
.
assertEqual
(
len
(
graded
[
'grade_breakdown'
]),
3
)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment