Skip to content

jfbercher/labquiz

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

95 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

PyPI version Python versions License Binder Documentation Status

Sponsor:

ESIEE Paris

LabQuiz is a Python package that allows to seamlessly integrate interactive quizzes directly into Jupyter notebooks β€” useful for labs, tutorials, practical assignments, continuous assessment, and controlled exams.

It combines:

  • βœ… Multiple-choice and numerical questions
  • 🧩 Template-based parameterized questions
  • πŸ” Configurable number of attempts
  • πŸ’‘ Hints and detailed feedback
  • πŸ“Š Automatic scoring
  • 🌐 Optional remote logging (Google Sheets)
  • πŸ“ˆ Real-time monitoring dashboard (if logging)
  • πŸ” Integrity checks and anti-tampering mechanisms

And it comes with two optional companion tools:


  • πŸ‘‰πŸΌ Live version Try it in binder
  • Installation:
# From source
   pip install git+https://github.com/jfbercher/labquiz.git
# or from PyPI
   pip install labquiz

πŸš€ Why LabQuiz?

LabQuiz is designed for active learning and controlled assessment in computational notebooks.

It helps instructors:

  • Increase student engagement with embedded exercises
  • Provide structured feedback during lab sessions
  • Monitor progress in real time
  • Run controlled tests and exams
  • Detect configuration tampering or integrity violations

It helps students:

  • Learn through interaction and immediate feedback
  • Track their progress
  • Work within structured assessment modes

🚠 What LabQuiz Does

Inside your notebook, you can:

  • βœ… Add multiple-choice questions (mcq)
  • πŸ”’ Add numerical questions with tolerance (numeric)
  • 🧩 Create parameterized template questions
  • πŸ” Limit attempts
  • πŸ’‘ Provide hints and corrections
  • πŸ“Š Compute automatic scores
  • 🌐 Log all activity to a Google Sheet backend (optional)
  • πŸ” Enable exam mode with integrity checks

Example:

from labquiz import QuizLab

quiz = QuizLab(URL, "my_quiz.yml", retries=2, exam_mode=False)
quiz.show("quiz1")

πŸ“Έ Examples

Multiple-choice question (with hints & correction)

MCQ Example

Numerical question

Numeric Example

Template-based question (dynamic variables)

Template Example


🧩 Question Types, Pedagogical modes, Logging

Question types

LabQuiz supports four types:

Type Description
mcq Standard multiple-choice
numeric Numerical answers with tolerance
mcq-template Context-dependent MCQ
numeric-template Context-dependent numerical questions

Template questions allow dynamic evaluation based on runtime variables β€” ideal for practical lab computations.

Example:

quiz.show("quiz54", a=res1, b=res2)

Variables can also be generated dynamically

quiz.show("quiz54", autovars=True)

The expected solution is dynamically computed using Python expressions.

Pedagogical modes

LabQuiz supports three pedagogical modes:

  • Learning mode (hints + correction available, score display)
  • Test mode (limited attempts, score display but no correction)
  • Exam mode (no feedback, secure logging)

Quizzes are defined in simple YAML format and support

  • Logical constraints (XOR, IMPLY, SAME, IMPLYFALSE)
  • Bonuses and penalties
  • Relative and absolute tolerances
  • Variable generation for templates

πŸ“Š Remote Logging & Dashboard

All data can be stored in a Google Sheet backend.

LabQuiz can log: Validation events, Parameters, User answers, Integrity hashes... LabQuiz also includes multiple anti-cheating mechanisms (Machine fingerprinting, Source hash verification, Detection of parameter tampering, Optional encrypted question files, Runtime integrity daemon...)


βš™οΈ Installation

From PyPI

pip install labquiz

From source:

pip install git+https://github.com/jfbercher/labquiz.git

Import:

import labquiz
from labquiz import QuizLab

Instantiate:

quiz = QuizLab(URL, QUIZFILE,
               retries=2,
               needAuthentication=True,
               mandatoryInternet=False)

πŸ›  Additional Tools

✏️ quiz_editor β€” Build & Export Question Banks

Creating YAML files manually works β€” but quiz_editor is intended to makes it easier. It can also be useful outside ob LabQuiz as a general quiz-editor with export capabilities.

Key features:

  • Visual question editing (MCQ, numeric, templates)

  • Categories & tags

  • Variable generation for templates

  • Bonus / malus configuration

  • Logical constraints (XOR, IMPLY, SAME, etc.)

  • One-click export to:

    • βœ… YAML
    • πŸ” Encrypted version
    • 🌍 Interactive HTML (training mode)
    • πŸ“ HTML exam version (Google Sheet connected)
    • πŸ“„ AMC–LaTeX format (paper exams)

Online version: πŸ‘‰ https://jfb-quizeditor.streamlit.app/

Install locally:

pip install quiz-editor

Quiz Editor


πŸ“Š quiz_dash β€” Real-Time Monitoring & Correction

quiz_dash is the companion dashboard for instructors.

It connects to your Google Sheet backend and provides:

  • πŸ“ˆ Live tracking of submissions
  • Live class overview
  • πŸ‘€ Student-by-student monitoring
  • πŸ” Integrity checks (mode changes, retries tampering, hash verification)
  • βš– Adjustable grading weights
  • πŸ”„ Automatic recalculation
  • πŸ“₯ CSV export of results

Online version: πŸ‘‰ https://jfb-quizdash.streamlit.app/

Dashboard


🌍 Optional: Zero Installation with JupyterLite

LabQuiz can run entirely in the browser using JupyterLite (WASM). Perfect for fully web-based lab environments.

πŸ“¦ Ecosystem

Tool Purpose
labquiz Notebook quiz engine
quiz_editor Question bank creation & export
quiz_dash Monitoring & correction dashboard

πŸ“¦ Repositories:

Online tools:


🎯 Typical Workflow

  1. Prepare questions (YAML or quiz_editor)
  2. Optionally encrypt file
  3. Create Google Sheet backend
  4. Instantiate QuizLab in notebook
  5. Run lab / test / exam
  6. Monitor using a python console or with quiz_dash
  7. Post-correct with adjustable grading

🏁 Demonstration

See:

  • labQuizDemo.ipynb in extras/
  • πŸ‘‰πŸΌ Live version πŸ‘ˆ Try it in binder

πŸ“œ License

GPL-3.0 license

About

Integration of quizzes in jupyter notebooks

Resources

License

Security policy

Stars

Watchers

Forks

Packages

 
 
 

Contributors