Skip to main content

TA Scheduling & Quiz Pickup Optimizer

Project description

[SCHEDULER-TA] - Project Optimization suite

Advanced Academic Grading & Pairing Optimizer.

(OVERVIEW)

The system transforms raw campus schedules into an economic convenience model. It uses a weighted penalty system to rank potential scheduling options:

  • Each Day of Turnaround: 1 Point
  • Each "Special" Campus Trip: 10 Points
  • Wait Time (Same-Day): 0.1 Points per Hour
  • External Workload: Dynamic (User-Defined)

By minimizing the total penalty score, the system identifies the most "human- friendly" schedules for Graders and Professors.


(COMMANDS)

  • db: Manage the persistent staff database (init, reset, export, add-person, list).
  • quiz: Generate ranked collection/pickup windows for a specific pair.
  • heatmap: Generate a convenience score for every assignment day (Pop quiz mode).
  • pair: Calculate department-wide best matches (Global Matchmaking).
  • timeline: Generate chronological turnaround guidance for onboarding.
  • cadence: Evaluate weekly collection schedules over a semester for syllabus design.

CLI Usage Examples

Database Management (Adding Staff)

./scheduler-ta db init
./scheduler-ta db add-person --name "Euler" --role "Teacher" --sched "MWF 10am-11am"
# Note: Re-running add-person on an existing name gracefully updates their schedule!
./scheduler-ta db list

# To back up the database into a raw SQL dump:
./scheduler-ta db export

# To wipe the database clean and start over:
./scheduler-ta db reset

Individual Turnaround Mode (Shane Catch-up Scenario)

./scheduler-ta quiz --prof "MWF 10am-11am" --grader "TTh 1pm-2pm" --load 50

Global Matchmaking Mode (Department-Wide Optimization)

./scheduler-ta pair --prof "MW 1pm-2pm" --prof "TTh 9am-10am" \
                        --grader "MWF 10am-11am" --grader "TTh 2pm-3pm" \
                        --global-opt --date "04/06"

Heatmap Mode (Prof. Euler's Dashboard)

./scheduler-ta heatmap --prof "MWF 10am-12pm" --grader "TTh 1pm-2pm"

Syllabus Cadence Advisor Mode (Designing the Semester)

Helps a Professor decide which day of the week to place weekly assignments on.

# Using the staff added to the database during setup
./scheduler-ta cadence --prof-name "Euler" --grader-name "Shane" --weeks 16

# Or using on-the-fly schedules without the database
./scheduler-ta cadence \
    --prof "MWF 10am-12pm" \
    --grader "TTh 1pm-2pm"

(MODELING CAPABILITIES)

What it CAN model

  • (PERSISTENCE) Uses a local SQLite database (~/.scheduler_ta/data.db) via SQLAlchemy for centralized staff management.
  • (TIME-AWARE) Calculates the hour-gap between class ends and grader arrival.
  • (WEEKLY) Supports complex, multi-block weekly schedules (e.g. MWF + TTh).
  • (CONVENIENCE) Automatically identifies when a Grader is already on campus.
  • (OPTIMAL) Solves for the best pairings across a department using the Hungarian Algorithm (Scipy Backend).
  • (DYNAMIC) Supports short-term, date-aware matchmaking with the --date flag.
  • (WORKLOAD) Penalizes specific dates where a Grader has external commitments (like Shane's catch-up period).

What it CANNOT model

  • (REAL-TIME) Does not yet integrate directly with live University registrar data.

(FUTURE ROADMAP)

  • (IMPORT) Bulk CSV/JSON import for department-wide scheduling.
  • (DB-SYNC) Integration with university enrollment & registrar databases.
  • (WEB-PORTAL) Front-end (HTML/JS) for slot viewing and student requests.
  • (PERSIST) SQL-based backend for persistent staff and section data.
  • (UI) Visual heatmap dashboard (Streamlit/FastAPI).
  • (QUANTITY) Support for n_students and time_per_student to scale grading load penalty.

(DEVELOPMENT)

License

This project is licensed under the MIT License.

Packaging & Releasing

To package this application and deploy to PyPI via twine (if configured):

# Compile source and wheel distribution
python3 -m build

# Check bundle health
twine check dist/*

# Upload to TestPyPI
twine upload --repository testpypi dist/*

This project maintains strict quality standards:

  • [Pylint] 10.00/10 Score
  • [Pytest] 97.5% Project Minimum Test Coverage
  • [Flake8] Standardized Compliance
make test   # Run full test suite with coverage reports
make test-v # Run verbose tests (visualize matchmaking solutions)
make lint   # Run all quality checks
make format # Auto-format source and documentation

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

scheduler_ta-0.1.1.tar.gz (24.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

scheduler_ta-0.1.1-py3-none-any.whl (16.3 kB view details)

Uploaded Python 3

File details

Details for the file scheduler_ta-0.1.1.tar.gz.

File metadata

  • Download URL: scheduler_ta-0.1.1.tar.gz
  • Upload date:
  • Size: 24.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.0.0 CPython/3.14.3

File hashes

Hashes for scheduler_ta-0.1.1.tar.gz
Algorithm Hash digest
SHA256 3ff57a69661f9f5cebed71cea56d5a0fb2defb8af7370ace628edb48ed9e5e4b
MD5 7652236a9a8653ea0e1d9b1f4da80445
BLAKE2b-256 0f42ac8950fdd0b41dc04b4a14e0c99488354efda19137229972afedcca23a81

See more details on using hashes here.

File details

Details for the file scheduler_ta-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: scheduler_ta-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 16.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.0.0 CPython/3.14.3

File hashes

Hashes for scheduler_ta-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 9c3fb0c9c49d094d10ee88500635d40a944cfba5ecaec5aaea1ecc42012e022b
MD5 c54df910cf2aa27f0d94af2859e47566
BLAKE2b-256 c7078a1195e261ba871f3deaa9bf546ac1f2cd28946d643c2d8b81e27f1c8098

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page