An automated evaluation framework for Python notebooks and Excel assignments
Project description
InstantGrade
An automated evaluation framework for Python notebooks and Excel assignments
📚 Documentation
- Installation Guide - Get started in minutes
- Quick Start - Your first evaluation
- Usage Guide - Comprehensive features
- API Reference - Complete API documentation
- Examples - Real-world use cases
Introduction
InstantGrade is a comprehensive, extensible evaluation framework designed to automatically grade student submissions against instructor solution files. It supports multiple file formats including Python Jupyter notebooks and Excel files, making it ideal for educational institutions and online learning platforms.
The framework was created to streamline the grading process for programming and data analysis assignments, reducing manual effort while providing detailed, actionable feedback to students. The vision is to expand support to additional file types and programming languages, creating a universal evaluation platform for technical education.
👩🏫 About the Maintainer
Dr. Chandravesh Chaudhari
📧 chandraveshchaudhari@gmail.com 🌐 Website 🔗 LinkedIn
Features
- Automated Evaluation: Compare student submissions against instructor solutions automatically
- Multiple File Format Support: Currently supports Python Jupyter notebooks (.ipynb) and Excel files (.xlsx, .xls)
- Comprehensive Reporting: Generate detailed HTML reports with visual feedback and scoring
- AST Analysis: Deep code comparison using Abstract Syntax Tree analysis for Python code
- Flexible Configuration: Customizable evaluation criteria through JSON configuration
- Batch Processing: Evaluate multiple student submissions in one run
- Extensible Architecture: Easy to add support for new file types and evaluation strategies
Significance
- Time-Saving: Reduces manual grading effort by 90% for programming assignments
- Consistency: Ensures uniform evaluation criteria across all student submissions
- Detailed Feedback: Provides students with specific areas of improvement
- Scalability: Handles large classes with hundreds of submissions efficiently
- Educational Focus: Allows instructors to focus on teaching rather than repetitive grading tasks
Installation
This project is available at PyPI. For help in installation check instructions
python3 -m pip install instantgrade
For development installation:
git clone https://github.com/chandraveshchaudhari/instantgrade.git
cd evaluator
python3 -m pip install -e .
Dependencies
Required
- pandas - Data manipulation and analysis for comparison results
- openpyxl - Reading and writing Excel files
- nbformat - Working with Jupyter notebook files
- nbclient - Executing Jupyter notebooks programmatically
- click - Creating command-line interfaces
Optional
- xlwings - Advanced Excel automation capabilities (Windows/macOS only)
Usage
Basic Usage
Python API
from instantgrade import Evaluator
# Initialize evaluator with solution and submissions folder
evaluator = Evaluator(
solution_file_path="path/to/solution.ipynb",
submission_folder_path="path/to/submissions/"
)
# Run complete evaluation pipeline
report = evaluator.run()
Command Line Interface
# Evaluate Python notebook submissions
instantgrade --solution sample_solutions.ipynb --submissions ./submissions/ --output ./report/
# Evaluate Excel submissions
instantgrade --solution solution.xlsx --submissions ./excel_submissions/ --output ./excel_report/
Supported File Types
Python Jupyter Notebooks (.ipynb)
- Executes code cells and compares outputs
- AST-based code structure comparison
- Variable and function definition verification
- Exception and error handling analysis
Excel Files (.xlsx, .xls)
- Cell value comparison across worksheets
- Formula evaluation and verification
- Conditional formatting checks
- Chart and pivot table analysis (with xlwings)
Future Support (Planned)
- R Markdown files (.Rmd)
- Python scripts (.py)
- SQL files (.sql)
- MATLAB scripts (.m)
Important links
Contribution
All kinds of contributions are appreciated:
- Improving readability of documentation
- Feature Request
- Reporting bugs
- Contribute code
- Asking questions in discussions
How to Contribute
- Fork the repository
- Create a feature branch (
git checkout -b feature/AmazingFeature) - Commit your changes (
git commit -m 'Add some AmazingFeature') - Push to the branch (
git push origin feature/AmazingFeature) - Open a Pull Request
For detailed contribution guidelines, see the Contributing Guide.
Documentation
Complete documentation is available at chandraveshchaudhari.github.io/instantgrade
Building Documentation Locally
# Install documentation dependencies
pip install -e ".[docs]"
# Build the documentation
cd docs
make html
# View the documentation
open build/html/index.html # macOS
# or
xdg-open build/html/index.html # Linux
# or
start build/html/index.html # Windows
The documentation is built using:
- Sphinx - Documentation engine
- MyST Parser - Markdown support
- Furo - Clean, modern theme
- Jupyter-Sphinx - Notebook integration
- Sphinx Autodoc - Automatic API documentation
Development & Deployment
Continuous Integration
This project uses GitHub Actions for continuous integration and deployment:
- Automated Testing: Every push is automatically tested across multiple Python versions (3.10-3.12) and operating systems
- Automatic PyPI Publishing: New releases are automatically published to PyPI when version tags are pushed
- Documentation Deployment: Documentation is automatically built and deployed to GitHub Pages
- Build Verification: Package builds are verified before deployment
Publishing New Versions
To publish a new version to PyPI:
- Update the version number in
setup.pyandpyproject.toml - Update
CHANGELOG.mdwith the new version - Commit the changes:
git add setup.py pyproject.toml CHANGELOG.md git commit -m "Bump version to X.Y.Z"
- Create and push a version tag:
git tag vX.Y.Z git push origin master git push origin vX.Y.Z
- GitHub Actions will automatically:
- Build and publish to PyPI
- Create a GitHub Release
- Deploy updated documentation
For detailed instructions, see PUBLISHING.md
CI/CD Status
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file instantgrade-0.1.8.tar.gz.
File metadata
- Download URL: instantgrade-0.1.8.tar.gz
- Upload date:
- Size: 1.6 MB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c3b0156719687f0f4a31f3ebd41593150ad3c7f0f70d079b5cfa9fdc24a77ca8
|
|
| MD5 |
ae0c7095bf63a542aff94a7f37243f4f
|
|
| BLAKE2b-256 |
11cf269a09e66633fa516df73b005ffe6d8d7bfe073c0254891a11858251c433
|
Provenance
The following attestation bundles were made for instantgrade-0.1.8.tar.gz:
Publisher:
publish.yml on chandraveshchaudhari/instantgrade
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
instantgrade-0.1.8.tar.gz -
Subject digest:
c3b0156719687f0f4a31f3ebd41593150ad3c7f0f70d079b5cfa9fdc24a77ca8 - Sigstore transparency entry: 760402305
- Sigstore integration time:
-
Permalink:
chandraveshchaudhari/instantgrade@bdd0cb14da80e4a93341ce3c5a70a8ab5dfb88f4 -
Branch / Tag:
refs/tags/v0.1.8 - Owner: https://github.com/chandraveshchaudhari
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@bdd0cb14da80e4a93341ce3c5a70a8ab5dfb88f4 -
Trigger Event:
push
-
Statement type:
File details
Details for the file instantgrade-0.1.8-py3-none-any.whl.
File metadata
- Download URL: instantgrade-0.1.8-py3-none-any.whl
- Upload date:
- Size: 43.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4a29d3404085ebbf9d56b3664bbf079fa1ebc43781506dae44b05ebfdbd59e95
|
|
| MD5 |
a8aab7c4bbd6294ea90c0e5939c0756a
|
|
| BLAKE2b-256 |
8311be9e69cf716fc49d5b35b089260f68a4b7d44755a41f7651eef2c3ac26d7
|
Provenance
The following attestation bundles were made for instantgrade-0.1.8-py3-none-any.whl:
Publisher:
publish.yml on chandraveshchaudhari/instantgrade
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
instantgrade-0.1.8-py3-none-any.whl -
Subject digest:
4a29d3404085ebbf9d56b3664bbf079fa1ebc43781506dae44b05ebfdbd59e95 - Sigstore transparency entry: 760402309
- Sigstore integration time:
-
Permalink:
chandraveshchaudhari/instantgrade@bdd0cb14da80e4a93341ce3c5a70a8ab5dfb88f4 -
Branch / Tag:
refs/tags/v0.1.8 - Owner: https://github.com/chandraveshchaudhari
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@bdd0cb14da80e4a93341ce3c5a70a8ab5dfb88f4 -
Trigger Event:
push
-
Statement type: