Package: otter-assign
otter-assign: Jupyter Notebook Assignments with Otter-GraderFormat and tools for authoring and distributing Jupyter notebook assignments with autograding usingOtter-Grader.Requires:Python 3(even if it's installed, check that it's your working versionpython --version)Getting startedCourse instructors author assignments as Jupyter notebooks by creating a
notebook that contains setup code, questions, solutions, and tests to validate
those solutions. This project prepares an assignment to be distributed to
students and later scored automatically.Thenotebook formatis not specific to a programming
language or autograding framework, but was designed to be used with
Otter, which is Python based. Contributions to
support other testing frameworks, such as nbgrader and other programming
languages, are welcome.An example notebook appears intest/example.ipynb, which uses thenotebook
format. To convert it, run:oassign test/example.ipynb test/outputtest/example.ipynb: an example notebook path that you'll need to replace with thepath to the master solution notebook, which was augmented with the metadata and commands from thenotebook format.test/output:the path to where the output will be storedthe output contains two directoriesautograderandstudenttheautograderdirectory contains the full set of tests and a solution notebook (a solution notebook is different from the master notebook, because it is not formatted accordidng to thenotebook formatbut instead looks like the student notebook with solutions)thestudentdirectory contains an automatically created redacted version.at the end of the command, specify paths to any support files (e.g. data files) needed by the notebooks to be copied into theautograderandstudentdirectoriesBefore you run theoassigncommand, make sure that yourun the entire notebooktop to bottom (Cell -> Run All) to make sure that every cell has the correct output -- the output of the cells will be turned into the appropriate tests stored in the provided output directory (second argument of theoassigncommand). If you change the tests, you need to re-generate the files by re-running the notebook and theoassigncommand.CautionTest outside of a questionFile "/opt/conda/lib/python3.6/site-packages/oassign/to_ok.py", line 141, in gen_ok_cells
    assert not is_test_cell(cell), 'Test outside of a question: ' + str(cell)
AssertionError: Test outside of a question:If you get this error, this means that you havemore than one cellbetween the markdown cell that declared the question (i.e., the one that contains#BEGIN QUESTION) and the cell that contains the# TEST.SOLUTION: remove the extra code/markdown cell(s) either between the solution cell and the markdown cell with the#BEGIN QUESTIONor between the solution cell and the# TESTcell.Test cell with a blank on the last lineIf your test contains a blank/newline after the test, otter-assign seems to automatically add a semicolon at the end of the test, thus, supressing the output of the command.Example:# TESTmovies.head(1)['plots'][0]=='Two imprisoned men bond over a number of years, finding solace and eventual redemption through acts of common decency.'Turns into the following failed test in the students' notebook:>>>movies.head(1)['plots'][0]=='Two imprisoned men bond over a number of years, finding solace and eventual redemption through acts of common decency.';>>># Error: expected#     True# but gotSOLUTION: remove the blank line at the end of the# TESTcell.Changelogv0.0.2:Added custom prompts for manually graded questionsv0.0.1:Initial release