Gradebook
Column Semantics in the Gradebook System
In the Pawtograder gradebook system, columns represent individual grade components that collectively form a student’s overall course performance. Each column is defined by a unique slug identifier, a human-readable name, and a maximum score, but their power lies in their flexibility for grade calculation and data sources. Columns can be manually entered by instructors who directly input grades cell-by-cell, imported from CSV files to bulk-load grades from external systems (with full metadata tracking of the import source and date), or linked to programming assignments through the assignment reference system. When linked to assignments, columns automatically pull grades from the autograder system, creating a seamless connection between student code submissions and gradebook entries. Expressions: The most sophisticated column type uses mathematical expressions that reference other columns or assignments, creating a powerful dependency system for calculated grades. Using MathJS syntax, instructors can create complex formulas like(gradebook_columns("homework-*") + assignments("project-*")) / 2 to automatically compute weighted averages, drop lowest scores, or apply curve adjustments. Score expressions can define functions and have access to the full MathJS library of math and utility functions. Any grade that is automatically calculated can also be manually overridden by the instructor on a case-by-case basis.
Student visibility of grades: The “released” status in the gradebook determines whether students can see a particular column and its grades. For imported or manually-entered columns, instructors have direct control over this visibility - they can release columns to make them visible to students or unrelease them to hide grades during grading periods or for sensitive assessments. This setting is at the column-level only (you can’t release or unrelease individual grades). For columns that are automatically calculated by Pawtograder (via an expression), students always see the current calculation based only on what they can see. For example, a column defined as the average of all homeworks will show the student the average of all homeworks they have released.
Importing Grades
To import grades, instructors use a 3-step wizard:- File Selection: Click the “Import Column” button and select a CSV file from your computer, which the system parses client-side to extract tabular data.
- Column Mapping: Choose which CSV column contains student identifiers and select whether they are email addresses or student IDs. For each remaining CSV column, decide whether to map it to an existing gradebook column for updates, create a new column (requiring you to set the maximum score), or ignore the column entirely. The system automatically detects email columns if present.
- Preview & Confirm: Review a comprehensive preview table that shows exactly what changes will occur, highlighting grade updates with strikethrough old values and bold new values, warning about students in the CSV who aren’t enrolled in the course, and providing alerts when attempting to override calculated column scores. Only after reviewing this detailed preview can you click “Confirm Import” to execute the changes.
Expression Syntax
The gradebook expression system uses MathJS as its foundation, enhanced with specialized functions for grade calculations. Expressions must return a numeric value that becomes the student’s score for that column. The final expression line is the student’s score for that column.Core Syntax
Expressions follow standard mathematical notation with variables, operators, and functions:Data Access Functions
gradebook_columns("slug-pattern")
Retrieves gradebook column data with glob pattern matching. Returns objects with:
score:number | null- The student’s score (including overrides)max_score:number- The maximum score for the columnis_missing:boolean- Whether the grade is missing/not enteredis_excused:boolean- Whether the student is excused from this itemis_droppable:boolean- Whether this item can be dropped in calculations
Array Processing Functions
countif(array, predicate)
Counts array elements matching a condition using lambda syntax:
sum(array)
Sums numeric values or scores from gradebook objects:
mean(array, weighted=true)
Calculates weighted (default) or unweighted averages:
excused, in which case it is excluded from the average.
drop_lowest(array, count)
Removes the lowest scoring droppable items:
drop_lowest drops the lowest grades (including those that are “missing” or “excused”) as long as the “droppable” flag is set on the grade (this is the default).
Conditional Logic
case_when([condition, value; ...])
Convenience function for multi-condition branching using matrix syntax:
Comparison Functions
Normal comparison functions like==, >=, <=, etc. are available, and can automatically coerce a gradebook value to a score for you (so that you do not need to map each gradebook value to a score to compare it).