Skip to content

jfbercher/labquiz

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

106 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.

  • πŸ‘‰πŸΌ Live version Try it in binder !

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:


flowchart LR
    %% Nodes
    A["YAML Quiz<br/>(Quiz-as-Code)"]
    B["quiz_editor<br/>Authoring Interface<br/>(optional)"]
    C["Jupyter Notebook<br/>+ Interactive Quizzes"]
    D["Remote Backend<br/>(e.g., Google Sheets)"]
    E["quiz_dash<br/>Monitoring Dashboard"]
    F[Analytics]
    G[Marks Table]
    H[Student Reports]
    I[Exports: <br/>Web-based Training Quizzes <br/>AMC / LaTeX Paper Quizzes]

    %% Flows
    B -.-> A
    A ---> C
    C -.-> D
    D --> E
    E --> F
    E --> G
    E --> H
    A -.-> I
    

    %% Styles
    classDef authoring fill:#e3f2fd,stroke:#1e88e5,stroke-width:1px;
    classDef runtime fill:#e8f5e9,stroke:#43a047,stroke-width:1px;
    classDef backend fill:#fff3e0,stroke:#fb8c00,stroke-width:1px;
    classDef dashboard fill:#f3e5f5,stroke:#8e24aa,stroke-width:1px;
    classDef outputs fill:#fce4ec,stroke:#d81b60,stroke-width:1px;
    classDef export fill:#e0f7fa,stroke:#00838f,stroke-width:1px;

    %% Assign classes
    class A,B authoring;
    class C runtime;
    class D backend;
    class E dashboard;
    class F,G,H outputs;
    class I,J export;
Loading

Figure: Overview of the LabQuiz ecosystem. Dashed arrows indicate optional components. YAML quizzes drive both interactive notebooks and exports, monitored via a dashboard producing analytics, marks tables, and student reports.


  • 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