Explain project properly in README

This commit is contained in:
Michael Bradley 2025-01-31 02:14:58 -05:00
parent 53e336101d
commit 926587450e
Signed by: MichaelBradley
SSH key fingerprint: SHA256:cj/YZ5VT+QOKncqSkx+ibKTIn0Obg7OIzwzl9BL8EO8

View file

@ -6,4 +6,57 @@ Implementations of priority queues in Python using Rust bindings for speed.
I'm doing this to learn Rust, so don't judge me too hard lol. I'm doing this to learn Rust, so don't judge me too hard lol.
I've noted a few places where I'm unhappy with the implementation (mostly w.r.t. code duplication), but hopefully as I become more comfortable in Rust I can go back and fix those. I've noted a few places where I'm unhappy with the implementation (mostly w.r.t. code duplication), but hopefully as I become more comfortable in Rust I can go back and fix those.
Better to have a bad implementation now than a good implementation never is my view.
Better to have a bad implementation now than a good implementation never.
## Usage
The package provides 3 queues: `Pure`, `Paired`, and `Indexed`, all of which are min-queues.
The `PureQueue` directly sorts the values it is given and returns them in order.
The `PairedQueue` pairs an arbitrary Python object with a float priority and returns the objects in the order specified by their priorities.
The `IndexedQueue` works the same as the `PairedQueue`, but allows arbitrary priority modification and object deletion at the cost of some runtime overhead and no support for duplicate objects (duplicate priorities are okay).
Typing is provided in `pyority_queue.pyi`, and should be picked up by your IDE.
## Development
Install venv and setup as usual
```sh
python -m venv venv
pip install -r requirements.txt
source venv/bin/activate
```
Build rust code with
```sh
maturin develop
```
Note that after you build the project for the first time you may have to restart the venv for it to pick up the new module
```sh
deactivate
source venv/bin/activate
```
Develop as usual, you should now be able to import the code through Python
```py
from pyority_queue import *
```
### Testing
Run the rust test suite with
```sh
cargo test
```
Run the python test suite with
```sh
pytest tests/*.py
```