Skip to main content

thermohw

Homework assignment converter from Jupyter Notebooks to PDF

This package installs a CLI script to convert Jupyter Notebook homework assignments to PDF (with and without solutions) and a set of Notebooks (with and without solutions).

Given a directory structure such as

.
├── homework
|   ├── homework-1
│   │   ├── homework-1-1.ipynb
│   │   ├── homework-1-2.ipynb
│   │   ├── homework-1-3.ipynb
│   │   ├── homework-1-4.ipynb
│   │   ├── homework-1-5.ipynb
│   │   ├── homework-1-6.ipynb
|   ├── homework-2
│   │   ├── homework-2-1.ipynb
│   │   ├── homework-2-2.ipynb
│   │   ├── homework-2-3.ipynb
│   │   ├── homework-2-4.ipynb
...

running

convert_thermo_hw --hw 1

will convert all of the .ipynb files in the homework-1 directory. You can also specify which problems should be converted by the problems argument, which takes a list of integers

convert_thermo_hw --hw 2 --problems 1 3 4

would convert problems 1, 3, and 4 in homework-2.

The option --by-hand allows certain problems to be marked as the solution should be done out by hand

convert_thermo_hw --hw 3 --by-hand 1 2

would mark problems 1 and 2 in homework-3 as to be done by hand instead of with the code.

The output files are placed in a directory called output in the homework-N directory.

Change Log

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog and this project adheres to Semantic Versioning.

0.7.1 - 2021-JAN-12

Fixed

  • IPython package is a dependency for its code lexer

0.7.0 - 2021-JAN-12

Added

  • The SolutionRemover preprocessor now uses cell tags to find the solution and its parts
  • A legacy command line argument switches back to the old method of finding the solution based on parsing the source of the cell
  • A test of the new tag-based SolutionRemover

Changed

  • Highlighted answer cells cannot be deleted in the assignment notebook
  • Support for Python 3.6 is dropped
  • Moved to src directory layout and don't include tests with the package

Fixed

  • Type hinting for resources dictionaries in some preprocessors

Removed

  • Remove exam processing, which didn't work well and wasn't really used

0.6.0 - 2020-SEP-11

Added

  • Option to clean the output folder can be specified.
  • Test with the latest Python 3.9

Changed

  • Change base template for our template to style_jupyter instead of style_ipython. Has a number of benefits, most notably, line breaking in code cells.

Fixed

  • Fix uploading the Anaconda package

0.5.2 - 2020-SEP-03

Changed

  • Switch to GitHub Actions

0.5.1 - 2020-SEP-03

Fixed

  • The version number was incorrect for v0.5.0
  • Tests!

0.5.0 - 2020-SEP-03

Added

  • Add ability to process exam files into assignments and solutions
  • Cells that contain the word "Sketch" indicate that they require an image submission

Changed

  • Run Black on all the code files
  • Delete Pymarkdown variables from the cell metadata to avoid revealing the solutions
  • Move combine_pdf_as_bytes() to utils.py
  • Only run xelatex on the converted files once

Fixed

  • Files without ### part name now correctly excludes the solution

Removed

  • The HomeworkPreprocessor class was no longer useful, because it was removing things it shouldn't have been

0.4.2 - 2018-SEP-03

Added

  • Test suite started, with a test of the ExtractOutputsPreprocessor that checks pathological filenames
  • Run test suite on TravisCI

Changed

  • Distribute the LICENSE file with built artifacts

Fixed

  • Fix pathological image filenames that caused URL escaping errors

0.4.1 - 2018-AUG-30

Fixed

  • Fix spaces in attached image names cause LaTeX to fail

0.4.0 - 2018-AUG-26

Added

  • raw_html_filter to process raw inline HTML to equivalent LaTeX forms
  • Option to show the solution should be done by hand, --by-hand command line option

Changed

  • Reset all cell executions to be None when a Notebook is processed

0.3.1 - 2018-AUG-14

Added

  • Expose filter functions from div_filter.py in __init__.py

0.3.0 - 2018-AUG-14

Added

0.2.5 - 2018-AUG-03

Added

  • setup.cfg file added to configure some metadata
  • Add flake8 configuration to setup.cfg
  • More keywords to setup function in setup.py
  • Module docstring for the new preprocessors module
  • Export more classes and functions from __init__.py

Changed

  • The HomeworkPreprocessor and SolnRemoverPreprocessor are moved from convert_thermo_hw module to preprocessors module

Fixed

  • Fix some typing errors

Removed

  • Remove the ExtractOutputsPreprocessor which is not needed anymore

0.2.4 - 2018-AUG-03

Fixed

  • PyPI deploy password for Travis CI must be encrypted with --pro flag

0.2.3 - 2018-AUG-03

Fixed

  • Fix anaconda.org upload token decryption

0.2.2 - 2018-AUG-03

Fixed

  • Typo in README.md
  • Conda recipe description was not valid YAML

0.2.1 - 2018-AUG-03

Added

  • Install conda-verify on Travis CI

Changed

  • Change Python version dependency in conda.recipe/meta.yaml to be less the 4.0

Fixed

  • Fix accessing Jinja variables in conda.recipe/meta.yaml

Removed

0.2.0 - 2018-AUG-03

Added

  • Add Travis CI configuration
  • Include the homework.tpl template file with the distribution
  • Appropriate classes are now exported in __init__.py

Changed

  • Use PyMarkdownPreprocessor from our own module to avoid having jupyter_contrib_nbextensions as a dependency
  • Set the build_directory of the PDFExporter FileWriter instance to prevent writing intermediate files in the local directory
  • Sort the list of problems to be processed by problem number
  • Automatically write the Notebook outputs to a zip file
  • Automatically combine the PDF outputs to a single PDF file
  • Refactor the processing loop to avoid creating the FilesWriter on every iteration

Fixed

  • Fix warnings about docstrings
  • Fix that paths must be resolved to be processed
  • Fix typos in docstrings
  • Specify that the long_description content for PyPI is Markdown formatted

0.1.0 - 2018-JUL-29

Added

  • Convert Jupyter Notebook to PDF with and without solutions
  • Convert Jupyter Notebook to a set of Notebooks, with and without solutions
  • README with instructions for use

Metadata

Release files for thermohw 0.7.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for thermohw 0.7.1
File Size Uploaded Provenance
thermohw-0.7.1.tar.gz 20.2 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for thermohw 0.7.1
File Interpreter ABI Platform
thermohw-0.7.1-py3-none-any.whl Python 3 none any Details

Total release size: 38.9 kB

Release files / thermohw-0.7.1.tar.gz

Download URL thermohw-0.7.1.tar.gz
Size 20.2 kB
Tags Source
SHA-256 checksum
How to use checksums
9e3fd691177fd0d2fe639b4bafabdaae16c48cfb697b523dcc0dc9a077e721e7
BLAKE2b-256 checksum
How to use checksums
ed2fb010f190d5caee3e3858a4ebf3c9c02f8d9822fccc0bfec8cedb7dde1e0d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.3.0 pkginfo/1.6.1 requests/2.25.1 setuptools/51.1.0 requests-toolbelt/0.9.1 tqdm/4.56.0 CPython/3.8.7

Release files / thermohw-0.7.1-py3-none-any.whl

Download URL thermohw-0.7.1-py3-none-any.whl
Size 18.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
85a4f1bb50ef380072c8481b14303470a419c922ba88337aea98d580b495723f
BLAKE2b-256 checksum
How to use checksums
452c916ca4299cc51aae8422808abbe298294d3246cce0c58e28768db9aac0a5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.3.0 pkginfo/1.6.1 requests/2.25.1 setuptools/51.1.0 requests-toolbelt/0.9.1 tqdm/4.56.0 CPython/3.8.7

Security for thermohw 0.7.1

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page