Skip to main content

PyComGrader: A Python Package for Grading C++ Programs

Table of Contents

Introduction

PyComGrader is a Python package designed to help educators and students easily evaluate and grade C++ programs against multiple test cases. It provides a simple and efficient way to test programs against multiple test cases and can be used on multiple platforms, including Windows and Linux. The package can be used as a command-line tool and provides various options to customize the grading process. PyComGrader aims to simplify the process of setting up training contests offline, testing problems against multiple test cases during a contest to get preliminary results, and helping prepare and form competitive programmers. However, please note that this package is not intended for official contests and is solely meant as an educational tool.

Features

  • Grade C++ programs against multiple test cases
  • Command-line interface for easy usage
  • Customizable time and memory limits
  • Detailed status messages for each test case
  • Cross-platform support (Windows and Linux)

Installation

To install PyComGrader, use pip:

pip install pycomgrader

Prerequisites

Before using PyComGrader, ensure that you have g++ installed and accessible in your system's PATH. PyComGrader relies on g++ to compile C++ programs before grading them. You can install g++ using your system's package manager. For example, on Ubuntu, you can install it with:

sudo apt-get install g++

On Windows, you can install g++ as part of MinGW or through other means.

Usage

Getting Started

To start using PyComGrader, follow these steps:

  1. Install PyComGrader by running pip install pycomgrader in your terminal.
  2. Import the necessary modules: from pycomgrader import Grader.
  3. Create a Grader object with the file to test, time limit, and memory limit: grader = Grader(2000, 128, exec_file = 'my_program')
  4. Create a corresponding directory for the test cases, and place the input files (with the extension .in) and expected output files (with the extension .out) inside. The filenames for the input and output files can be arbitrary, but they must have the same name. For example, you can have 01.in, 01.out, 02.in, 02.out, etc.
  5. Test the program against one or more test cases using the grader.grade('test_cases_dir') method.

Command Line Interface

PyComGrader can be used as a command-line tool by running pycomgrader followed by the path to the file to test and the directory with the test cases. For example:

$ pycomgrader my_program.cpp test_cases_dir

You can specify the time limit (milliseconds) and memory limit (megabytes) as positional arguments respectively:

$ pycomgrader my_program.cpp test_cases_dir 1000 32

One of the key features of PyComGrader is its ability to execute C++ programs directly, without the need for a separate compiler. This makes it easy to use on systems where a C++ compiler is not installed, or where the user has other means of compiling their source code. Users can use the -e flag when running PyComGrader to indicate that a file should be executed directly.

$ pycomgrader my_program test_cases_dir -e

This will tell PyComGrader to execute the contents of my_program directly, rather than compiling it first.

For detailed usage information, run:

$ pycomgrader --help

License

PyComGrader is released under the MIT License. See LICENSE for details.

Metadata

Release files for pycomgrader 1.2.0

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

Source distribution (sdist)

Source distribution for pycomgrader 1.2.0
File Size Uploaded
pycomgrader-1.2.0.tar.gz 10.0 kB Details

Built distribution (wheel)

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

Total release size: 19.3 kB

Release files / pycomgrader-1.2.0.tar.gz

Download URL pycomgrader-1.2.0.tar.gz
Size 10.0 kB
Tags Source
SHA-256 checksum
How to use checksums
1e0e1a9227a1e1adf66f84cfed52940387b7a6497eaa3ffbcb09764bf000f838
BLAKE2b-256 checksum
How to use checksums
c35e93534b586d095969ff52f8f9272390ea6bb7346a94c67c213b57206cc242
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.0.1 CPython/3.12.8

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jan 13, 2025.

Transparency log

Release files / pycomgrader-1.2.0-py3-none-any.whl

Download URL pycomgrader-1.2.0-py3-none-any.whl
Size 9.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
070b7d47b0d295457b70a9c9dda30446b1585add7888217dcb632c06a992d138
BLAKE2b-256 checksum
How to use checksums
083a738acb9a771eba44c157d10b14371b5924d890a8d00302b0997cc3d97e61
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.0.1 CPython/3.12.8

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jan 13, 2025.

Transparency log

Release history Release notifications | RSS feed

This release

1.2.0 This release

2 release files

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