Metadata-Version: 2.4
Name: uvlpy
Version: 0.1.2
Summary: UV abused for your pleasure
Author-email: Vasyl Bodnar <vasylbodnar@outlook.com>
License-Expression: BSD-3-Clause
Project-URL: Homepage, https://github.com/Vasyl-Bodnar/uvlpy
Keywords: constraint,solver,uv
Classifier: Programming Language :: Python :: 3
Requires-Python: >=3.10
Description-Content-Type: text/markdown
License-File: LICENSE
Dynamic: license-file

# uvlpy
A light package for constraint solving by levereging uv's dependency resolver

## Example
Example of some basic code to show the features would be:
```py
from uvlpy.uvlpy import System

sys = System()
a, b, c = sys.make_vars([0, 1], [2, 3, 4], list(range(0,9)))
a.val_constr(1, b == 2)
c.constr(b > 1)
sys.constr(a > 0, c < 9, b.to_constr())
print(sys.execute(a, b, c))
```
Where we:
- Create 3 variables with given possible values
- Constrain `a = 1` to require `b = 2`
- Constrain all values of `c` to require `b > 1`
- Constrain the result to require a positive `a`, `c < 9`, and to include `b`
- After execution the output is e.g. `[1, 2, 8]`, `a` and `b` can only be 1 and 2, but `c` can be any of its possible values (`uv` tends to prefer higher)

You can see the `sudoku_example.py` for a sudoku solver, 
which uses lists directly instead of destructuring them into variables like here.

## Install
Simply `pip install uvlpy`, or with `uv`, `uv pip install uvlpy`.

Otherwise, you can build it locally with `uv build` and use the wheel as you see fit.

Note that `uv` being installed and visible on PATH is required for this library to function.

## Why
Can be done. 

`uvlpy` uses `uv`'s solver, which should be reliable. The performance is not great, but sufficient.

However, note that the library creates a lot temporary files and packages to utilize `uv`, and as such, should be used with care and within reason.
