Metadata-Version: 2.4
Name: pycsp3-solvers-extra
Version: 0.3.2
Summary: Extra solver backends for pycsp3 (OR-Tools, IBM CPO, Z3)
Author: Sohaib AFIFI
License: MIT
Project-URL: Homepage, https://github.com/sohaibafifi/pycsp3-solvers-extra
Project-URL: Documentation, https://github.com/sohaibafifi/pycsp3-solvers-extra
Project-URL: Repository, https://github.com/sohaibafifi/pycsp3-solvers-extra
Keywords: constraint-programming,csp,xcsp3,pycsp3,or-tools,cplex,z3,optimization
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: Intended Audience :: Science/Research
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
Classifier: Topic :: Scientific/Engineering :: Mathematics
Requires-Python: <3.13,>=3.10
Description-Content-Type: text/markdown
Requires-Dist: pycsp3>=2.2
Provides-Extra: ortools
Requires-Dist: ortools>=9.0; extra == "ortools"
Provides-Extra: cpo
Requires-Dist: docplex>=2.25; extra == "cpo"
Provides-Extra: z3
Requires-Dist: z3-solver>=4.8; extra == "z3"
Provides-Extra: all
Requires-Dist: ortools>=9.0; extra == "all"
Requires-Dist: docplex>=2.25; extra == "all"
Requires-Dist: z3-solver>=4.8; extra == "all"
Provides-Extra: dev
Requires-Dist: pytest>=7.0; extra == "dev"
Requires-Dist: pytest-cov>=4.0; extra == "dev"

# pycsp3-solvers-extra

Extension library that adds extra solver backends to [pycsp3](https://github.com/xcsp3team/pycsp3).

## Supported Solvers

- **OR-Tools CP-SAT** - Google's constraint programming solver
- **IBM DOcplex CP Optimizer** - IBM's CP solver (requires CPLEX Studio)
- **Z3** - Microsoft's SMT solver with optimization support

## Installation

```bash
pip install pycsp3-solvers-extra
```

Install with specific solver backends:

```bash
# Install with OR-Tools
pip install pycsp3-solvers-extra[ortools]

# Install with Z3
pip install pycsp3-solvers-extra[z3]

# Install with CPO (requires IBM CPLEX Studio installed separately)
pip install pycsp3-solvers-extra[cpo]

# Install all backends
pip install pycsp3-solvers-extra[all]
```

### Dependencies

- `pycsp3` - base constraint modeling library
- `ortools` - for OR-Tools backend
- `z3-solver` - for Z3 backend
- `docplex` - for CPO backend (requires IBM CPLEX Studio installed separately)

## Usage

```python
from pycsp3 import *
from pycsp3_solvers_extra import solve

# Define your model
x = VarArray(size=3, dom=range(1, 10))
satisfy(AllDifferent(x))
minimize(Sum(x))

# Solve with OR-Tools
status = solve(solver="ortools")

# Or solve with Z3
status = solve(solver="z3")

# Or solve with CPO
status = solve(solver="cpo")

# Of course, you still can use the native supported pycsp3 solvers as well ('ace', 'choco')
status = solve(solver="ace")

# Access solution values
print([v.value for v in x])
```

### Loading XCSP3 instances

```python
from pycsp3 import clear, solution
from pycsp3_solvers_extra import load, solve

clear()
load("path/to/instance.xml.lzma")  # or .xml
status = solve(solver="ortools", time_limit=10)
print(status)
print(solution())
```

## API

```python
solve(
    solver="ortools",  # "ortools", "z3", or "cpo"
    time_limit=None,   # seconds
    sols=None,         # number of solutions to find
    verbose=0,         # verbosity level (0-2)
    options=""         # solver-specific options
)
```

Returns `TypeStatus.SAT`, `TypeStatus.OPTIMUM`, `TypeStatus.UNSAT`, or `TypeStatus.UNKNOWN`.


## Examples

See the `examples/` directory:

```bash
python examples/send_more_money.py --solvers ortools z3 cpo
python examples/solve_xcsp.py path/to/instance.xml.lzma --solver z3 --time-limit 10
python examples/solve_xcsp.py path/to/instance.xml.lzma --solver ace --options="-positive=CT -sts"
```

## Running Tests

```bash
pytest tests/ -v
```

## License
This project is licensed under the MIT License.
