Grading
- Choosing a Grading Tool & Interface
- The Notebook Grading Workflow, End to End
- Common Grading Failures & Recovery
Three grading tools are in use for Datahub courses, and they differ less in what they can grade than in where the work happens — on our platform, or on Gradescope's.
IT Services can talk the choice through and put course staff in touch with instructors who have used each one. → Getting Help
nbgrader is the in-platform tool. Assignments are created, distributed, collected, autograded and manually graded inside Datahub, through the Formgrader interface. IT Services supports it, and students never leave the platform. → The Notebook Grading Workflow
Otter-Grader, run on the Gradescope autograder, grades Jupyter notebooks submitted through Gradescope. It generates the notebook tests, and it produces PDFs for manual grading. Support comes from Gradescope and the wider community rather than from us.
The Gradescope autograder on its own is the general-purpose option: it has native support for languages beyond Python — C, C#, Java, MySQL and others — which neither of the others offers.
| Gradescope autograder | Otter-Grader on Gradescope | nbgrader | |
|---|---|---|---|
| Supported by | Gradescope | Gradescope / community | IT Services |
| Assignments created in | Gradescope | Gradescope | Datahub |
| Students work | Anywhere, usually locally | Anywhere, locally or on Datahub | On Datahub |
| Students submit | A code artifact, via Gradescope | A notebook, via Gradescope | A notebook, via Datahub |
| Tests run on | Gradescope's infrastructure | Gradescope's infrastructure | The Datahub cluster |
| Notebook unit tests | No | Yes, generated by Otter | Yes |
| Other languages | Yes, natively | No | No |
| Manual grading | As a separate assignment | Yes, from generated PDFs | Yes, in the grading interface |
| Grades reach Canvas | Through Gradescope | Through Gradescope | By manual CSV upload |
Four questions settle it in practice:
A shared grader account. Each Datahub course is issued one, and nbgrader works only from it — not from an instructor's or a TA's own account. Everyone who grades shares it. → Managing a Group
Students see feedback through the notebook. Before submitting they can run Validate against the visible test cells; after grades are released they see a score breakdown for those cells and any feedback course staff generate.
Everything is in the Jupyter interface, which means the interface a grader or student is using matters. → Which Interface Supports Grading
| Interface | nbgrader | Notes |
|---|---|---|
| JupyterLab | Yes | The default since our 2024.4 images, and the one to use |
| Notebook 7 | Yes | Most of JupyterLab's features in a Notebook-style layout; we consider it experimental |
| NBClassic | No | Extensions such as nbgrader are not supported here, and we cannot guarantee long-term support for the view itself |
| RStudio | No | A separate IDE, reached from the JupyterLab launcher; grading happens on the Jupyter side |
JupyterLab is the default and the supported path for grading, and everything below assumes it.
Graders reach the grading interface at Nbgrader → Formgrader.
To mark up cells while editing an assignment notebook, use Nbgrader → Create Assignment, or the panel that sits on the right-hand side of the notebook. Both open the same per-cell grading controls. → The Notebook Grading Workflow
Students fetch and submit at Nbgrader → Assignment List. The list itself is near enough identical to the one in the classic interface, so instructions written for Notebook 6 still describe it correctly.
From a notebook, the Open In dropdown offers Notebook 7 and NBClassic.
From the URL, /lab gives JupyterLab and /tree gives the Notebook-style
tree view:
https://datahub.ucsd.edu/user/<username>/lab
https://datahub.ucsd.edu/user/<username>/tree
Switching interfaces does not restart anything or lose work. It is a safe first step when a grading control is missing.
Upstream nbgrader documentation shows Formgrader running in JupyterLab, which matches the current interface. Our own older material, and any course handout written before the 2024.4 images, shows Notebook 6 — the classic interface, without the JupyterLab panel down the left-hand side. The buttons and the workflow are the same in both.
Notebook 7 and NBClassic are experimental. If something misbehaves in either, please fall back to JupyterLab and tell us what happened.
Interface choice is per person, not per course. A student who has switched views privately will not see what a course handout describes.
None of this changes the account rule. Formgrader appears only for the shared course grader account, in any interface.
Support follows the tool, not the course. We support nbgrader. Questions about Gradescope or Otter behaviour go to Gradescope or the Otter community, even for a course hosted here. We can still help with the Datahub side — the image, the data, the environment students build in.
Switching mid-term is expensive. Assignment structure, test authoring and student instructions all differ between the tools. Please settle the choice before the quarter starts, during the setup window. → When Access Starts & Ends
Grading is coursework data. Other students' grades and academic records are protected information, and the platform's data rules apply to them like anything else. → Policy
If you still have questions or need additional assistance, email us at datahub@ucsd.edu or submit a ticket to the ITS Service Desk.