Metadata-Version: 2.4
Name: nbgrader_jupyterquiz
Version: 0.4.0
Summary: Interactive graded quizzes for Jupyter notebooks (nbgrader-jupyterquiz).
Keywords: nbgrader,jupyterquiz,education
Author-email: Philipp Emmo Tobias Risius <philipp.e.risius@theo.physik.uni-giessen.de>
Maintainer-email: Philipp Emmo Tobias Risius <philipp.e.risius@theo.physik.uni-giessen.de>
Requires-Python: >=3.10.0
Description-Content-Type: text/x-rst
License-Expression: MIT
Classifier: Development Status :: 2 - Pre-Alpha
Classifier: Intended Audience :: Developers
Classifier: Natural Language :: English
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Programming Language :: Python :: 3.14
Classifier: Programming Language :: Python :: Implementation :: CPython
Classifier: Typing :: Typed
License-File: LICENSE
Requires-Dist: ipython
Requires-Dist: jsonschema
Requires-Dist: nbconvert
Requires-Dist: nbformat
Requires-Dist: nbgrader >=0.9
Requires-Dist: traitlets
Requires-Dist: nbgrader_jupyterquiz[dev] ; extra == "all"
Requires-Dist: nbgrader_jupyterquiz[docs] ; extra == "all"
Requires-Dist: bump-my-version >=1.2.3 ; extra == "dev"
Requires-Dist: coverage >=7.5.0 ; extra == "dev"
Requires-Dist: deptry >=0.23.1 ; extra == "dev"
Requires-Dist: flit >=3.12.0,<4.0 ; extra == "dev"
Requires-Dist: mypy >=1.18.2 ; extra == "dev"
Requires-Dist: numpydoc >=1.9.0 ; extra == "dev"
Requires-Dist: pre-commit >=3.5.0 ; extra == "dev"
Requires-Dist: pytest >=8.3.2 ; extra == "dev"
Requires-Dist: pytest-cov >=5.0.0 ; extra == "dev"
Requires-Dist: ruff >=0.13.3 ; extra == "dev"
Requires-Dist: tox >=4.30.3 ; extra == "dev"
Requires-Dist: vulture >=2.16 ; extra == "dev"
Requires-Dist: ipykernel ; extra == "docs"
Requires-Dist: ipython ; extra == "docs"
Requires-Dist: jupyter_client ; extra == "docs"
Requires-Dist: nbsphinx >=0.9.8 ; extra == "docs"
Requires-Dist: sphinx >=8.1.3 ; extra == "docs"
Requires-Dist: sphinx-autobuild ; extra == "docs"
Requires-Dist: sphinx-codeautolink >=0.17.5 ; extra == "docs"
Requires-Dist: sphinx-copybutton ; extra == "docs"
Requires-Dist: sphinx-rtd-theme >=1.0 ; extra == "docs"
Project-URL: Issue tracker, https://github.com/PhilippRisius/nbgrader-jupyterquiz/issues
Project-URL: Source, https://github.com/PhilippRisius/nbgrader-jupyterquiz
Provides-Extra: all
Provides-Extra: dev
Provides-Extra: docs

======================
nbgrader-jupyterquiz
======================

+----------------------------+-----------------------------------------------------+
| Versions                   | |pypi|                                              |
+----------------------------+-----------------------------------------------------+
| Documentation and Support  | |docs| |versions|                                   |
+----------------------------+-----------------------------------------------------+
| Open Source                | |license| |ossf-score|                              |
+----------------------------+-----------------------------------------------------+
| Coding Standards           | |ruff| |pre-commit|                                 |
+----------------------------+-----------------------------------------------------+
| Development Status         | |status| |build| |coveralls|                        |
+----------------------------+-----------------------------------------------------+

**nbgrader-jupyterquiz** lets instructors embed interactive, gradeable quizzes
directly inside Jupyter notebooks using a simple Markdown syntax.  During
``nbgrader generate_assignment`` the quiz source is transformed into interactive
quiz cells (powered by a fork of `jupyterquiz`_); correct answers are hidden
from students before the assignment is released.

Starting in v0.4.0, quizzes placed in an nbgrader **Manually Graded Task**
cell are automatically graded: student responses are persisted to a
``responses.json`` sidecar as they answer, and ``nbgrader autograde``
evaluates them with partial-credit support.  Per-question points
(including fractions like ``{0.5}``) are supported.  See the
`graded-quizzes docs`_ for the full workflow.

* Free software: MIT license
* Documentation: https://nbgrader-jupyterquiz.readthedocs.io

Installation
------------

.. code-block:: console

    pip install nbgrader-jupyterquiz

Quick start
-----------

Register the preprocessor at the front of your ``nbgrader_config.py``:

.. code-block:: python

    c.GenerateAssignment.preprocessors.insert(0, "nbgrader_jupyterquiz.CreateQuiz")

Write quizzes in **Manually Graded Task** cells using ``#### Quiz`` /
``#### End Quiz`` delimiters:

.. code-block:: markdown

    #### Quiz
    * (SC) "What is the capital of France?"
      + "Paris"         (Correct!)
      - "London"
      - "Berlin"
    #### End Quiz

Run ``nbgrader generate_assignment`` — quiz regions are replaced with
interactive widgets and correct answers are hidden from students.

See the `documentation <https://nbgrader-jupyterquiz.readthedocs.io>`_ for the
full `quiz syntax <https://nbgrader-jupyterquiz.readthedocs.io/en/latest/quiz-syntax.html>`_,
`nbgrader pipeline <https://nbgrader-jupyterquiz.readthedocs.io/en/latest/nbgrader-pipeline.html>`_,
`graded quizzes`_,
and `display options <https://nbgrader-jupyterquiz.readthedocs.io/en/latest/display-options.html>`_.

.. _graded-quizzes docs: https://nbgrader-jupyterquiz.readthedocs.io/en/latest/graded-quizzes.html
.. _graded quizzes: https://nbgrader-jupyterquiz.readthedocs.io/en/latest/graded-quizzes.html

Credits
-------

This package incorporates a fork of `jupyterquiz`_ (v2.9.6.4) by
John M. Shea, copyright 2021–2025, used under the MIT License.
See ``LICENSES/jupyterquiz-MIT.txt``.

This package was scaffolded with Cookiecutter_ and the
`Ouranosinc/cookiecutter-pypackage`_ project template.

.. _jupyterquiz: https://github.com/jmshea/jupyterquiz
.. _Cookiecutter: https://github.com/cookiecutter/cookiecutter
.. _`Ouranosinc/cookiecutter-pypackage`: https://github.com/Ouranosinc/cookiecutter-pypackage

.. |pypi| image:: https://img.shields.io/pypi/v/nbgrader-jupyterquiz.svg
        :target: https://pypi.org/project/nbgrader-jupyterquiz/
        :alt: PyPI

.. |docs| image:: https://readthedocs.org/projects/nbgrader-jupyterquiz/badge/?version=latest
        :target: https://nbgrader-jupyterquiz.readthedocs.io/en/latest/?version=latest
        :alt: Documentation Status

.. |versions| image:: https://img.shields.io/pypi/pyversions/nbgrader-jupyterquiz.svg
        :target: https://pypi.org/project/nbgrader-jupyterquiz/
        :alt: Supported Python Versions

.. |coveralls| image:: https://coveralls.io/repos/github/PhilippRisius/nbgrader-jupyterquiz/badge.svg
        :target: https://coveralls.io/github/PhilippRisius/nbgrader-jupyterquiz
        :alt: Coveralls

.. |build| image:: https://github.com/PhilippRisius/nbgrader-jupyterquiz/actions/workflows/main.yml/badge.svg
        :target: https://github.com/PhilippRisius/nbgrader-jupyterquiz/actions
        :alt: Build Status

.. |license| image:: https://img.shields.io/github/license/PhilippRisius/nbgrader-jupyterquiz.svg
        :target: https://github.com/PhilippRisius/nbgrader-jupyterquiz/blob/main/LICENSE
        :alt: License

..
    .. |ossf-bp| image:: https://bestpractices.coreinfrastructure.org/projects/9945/badge
            :target: https://bestpractices.coreinfrastructure.org/projects/9945
            :alt: Open Source Security Foundation Best Practices

.. |ossf-score| image:: https://api.securityscorecards.dev/projects/github.com/PhilippRisius/nbgrader-jupyterquiz/badge
        :target: https://securityscorecards.dev/viewer/?uri=github.com/PhilippRisius/nbgrader-jupyterquiz
        :alt: OpenSSF Scorecard

.. |pre-commit| image:: https://results.pre-commit.ci/badge/github/PhilippRisius/nbgrader-jupyterquiz/main.svg
        :target: https://results.pre-commit.ci/latest/github/PhilippRisius/nbgrader-jupyterquiz/main
        :alt: pre-commit.ci status

.. |ruff| image:: https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json
        :target: https://github.com/astral-sh/ruff
        :alt: Ruff

.. |status| image:: https://www.repostatus.org/badges/latest/wip.svg
        :target: https://www.repostatus.org/#wip
        :alt: Project Status: WIP – Initial development is in progress, but there has not yet been a stable, usable release suitable for the public.

