Metadata-Version: 2.4
Name: unisched
Version: 0.1.1
Summary: An exam scheduler application built with Python, designed to optimize exam schedules at university level.
Author-email: Adheesh Trivedi <adheeshtrivedi@gmail.com>
License-File: LICENSE
Requires-Python: <3.13,>=3.12
Requires-Dist: odfpy>=1.4.1
Requires-Dist: openpyxl>=3.1.5
Requires-Dist: pandas>=3.0.2
Requires-Dist: pyside6<6.8,>=6.7
Provides-Extra: dev
Requires-Dist: black; extra == 'dev'
Requires-Dist: pytest; extra == 'dev'
Requires-Dist: pytest-qt; extra == 'dev'
Provides-Extra: example
Requires-Dist: tqdm; extra == 'example'
Description-Content-Type: text/markdown

[![Review Assignment Due Date](https://classroom.github.com/assets/deadline-readme-button-22041afd0340ce965d47ae6ef1cefeee28c7c493a6346c4f15d667ab976d596c.svg)](https://classroom.github.com/a/TNdrCHth)

<center>

# Unisched - Extensible University Exam Scheduler

![GUI Image](public/gui.png)

</center>

---

This is my (Adheesh Trivedi's) submission for the course "Advanced Programming".

**Unisched** is a basic, modular exam scheduling project that currently supports:

- Registration data loading from CSV, Excel and ODS
- Exam hall data loading from CSV, Excel and ODS
- Core scheduling using a graph coloring optimizer (DSatur-based)
- Conflict-aware schedule generation with simple penalty calculation
- A native-desktop GUI built with PySide6

The project is intentionally minimal and designed to be extended over time.

## Installation

### From PyPI

```bash
pip install unisched

# Then run the app
python -m unisched
```

It's recommended to use `pipx` for better dependency resolution:

```bash
pipx install unisched

# Then run the app
unisched
```

### Running from source

- Python 3.12
- [`uv` package manager](https://github.com/astral-sh/uv)

Dependencies used by the project:

- pandas
- PySide6
- openpyxl
- odfpy

Install dependencies:

```bash
uv sync
```

Run the GUI app:

```bash
uv run unisched
```

### Running Tests

Run all tests:

```bash
uv sync --extra dev
uv run pytest
```

### Example Script

Run the sample scheduling script:

```bash
uv sync --extra example
uv run python examples/schedule.py
```

## TODOs

- Current optimizer implementation: GraphColoringOptimizer only
- Future optimizers (for later): Simulated Annealing, ILP
- Needs a cute logo for the GUI :)
