smt-switch
Python bindings for smt-switch, a generic C++ API for SMT solving. It provides a single abstract interface that several SMT solvers implement, so you can write solver-agnostic code and switch back ends without rewriting it.
Installation
python3 -m pip install smt-switch
The published wheels bundle the solver back ends with permissive licenses: Bitwuzla, cvc5, and Z3. Boolector, MathSAT, and Yices 2 are supported by smt-switch but are not included in the wheels; to use those, build from source as described in the main README.
Two optional extras are available: smt-switch[pysmt] installs the
pySMT front end, and
smt-switch[test] installs pytest for
running the test suite.
Usage
Every back end is created through the same factory interface and driven through the same solver object:
import smt_switch as ss
solver = ss.create_cvc5_solver(logging=False)
solver.set_opt("produce-models", "true")
bv8 = solver.make_sort(ss.sortkinds.BV, 8)
x = solver.make_symbol("x", bv8)
y = solver.make_symbol("y", bv8)
# x + y == 10 and x != 0
solver.assert_formula(
solver.make_term(
ss.primops.Equal,
solver.make_term(ss.primops.BVAdd, x, y),
solver.make_term(10, bv8),
)
)
solver.assert_formula(
solver.make_term(ss.primops.Distinct, x, solver.make_term(0, bv8))
)
result = solver.check_sat()
if result.is_sat():
print("x =", int(solver.get_value(x)))
print("y =", int(solver.get_value(y)))
The back ends compiled into your installation are available in the
smt_switch.solvers dictionary, which maps a name such as "cvc5" to its
factory function. This is the easiest way to run the same code across every
available solver:
import smt_switch as ss
for name, create_solver in ss.solvers.items():
solver = create_solver(logging=False)
...
Documentation and support
Further documentation, the C++ API, build instructions for the other solver back ends, and known limitations are in the main repository. Please report problems on the issue tracker.
License
smt-switch is distributed under the BSD 3-Clause license. Note that the solver back ends carry their own licenses. See LICENSE for details.
Metadata
Release files for smt-switch 1.1.6
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Built distributions (wheels)
| File | Reset | |||
|---|---|---|---|---|
| smt_switch-1.1.6-cp314-cp314-macosx_15_0_arm64.whl | CPython 3.14 | CPython 3.14 | macOS 15.0+ ARM64 | Details |
| smt_switch-1.1.6-cp313-cp313-macosx_15_0_arm64.whl | CPython 3.13 | CPython 3.13 | macOS 15.0+ ARM64 | Details |
| smt_switch-1.1.6-cp312-cp312-macosx_15_0_arm64.whl | CPython 3.12 | CPython 3.12 | macOS 15.0+ ARM64 | Details |
| smt_switch-1.1.6-cp311-cp311-macosx_15_0_arm64.whl | CPython 3.11 | CPython 3.11 | macOS 15.0+ ARM64 | Details |
| smt_switch-1.1.6-cp310-cp310-macosx_15_0_arm64.whl | CPython 3.10 | CPython 3.10 | macOS 15.0+ ARM64 | Details |
Total release size: 103.4 MB
Release files / smt_switch-1.1.6-cp314-cp314-macosx_15_0_arm64.whl
| Download URL | smt_switch-1.1.6-cp314-cp314-macosx_15_0_arm64.whl |
|---|---|
| Size | 20.7 MB |
| Tags | CPython 3.14 macOS 15.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
bd23cff549f2a0daf419f1dbea8972cec4a74d541bc1fbde603eb7582902d9d7
|
|
BLAKE2b-256 checksum How to use checksums |
2e56cf5da682a32ed55998275b92f6d44a8590649a722b5ec5fa390df20c586b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.7
|
Release files / smt_switch-1.1.6-cp313-cp313-macosx_15_0_arm64.whl
| Download URL | smt_switch-1.1.6-cp313-cp313-macosx_15_0_arm64.whl |
|---|---|
| Size | 20.7 MB |
| Tags | CPython 3.13 macOS 15.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
17e546a1812d0fa58d9b608a70d99f257c2ad2e288621993df9a1a65d9df56ed
|
|
BLAKE2b-256 checksum How to use checksums |
f77064101cc3931cde6ec094c1e63af7f4b132402e97218036a4cf149b19ff0a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.7
|
Release files / smt_switch-1.1.6-cp312-cp312-macosx_15_0_arm64.whl
| Download URL | smt_switch-1.1.6-cp312-cp312-macosx_15_0_arm64.whl |
|---|---|
| Size | 20.7 MB |
| Tags | CPython 3.12 macOS 15.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
2eb28b794dbe75ae525c62fcf8157f233b0efffcfb67873b5fa0caef186578ed
|
|
BLAKE2b-256 checksum How to use checksums |
3becf8cc8576a4c28f0239ddc1425d8de51023b1288662d224c280ae7039c23b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.7
|
Release files / smt_switch-1.1.6-cp311-cp311-macosx_15_0_arm64.whl
| Download URL | smt_switch-1.1.6-cp311-cp311-macosx_15_0_arm64.whl |
|---|---|
| Size | 20.7 MB |
| Tags | CPython 3.11 macOS 15.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
045a4a0c6b3c3f3525d92558e1dededbe3c646c3eba3514c0ba5d916c4938927
|
|
BLAKE2b-256 checksum How to use checksums |
511ec14583f88ee549d26474a0ec4a0b86a084102b40a3858ff5041478455ce6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.7
|
Release files / smt_switch-1.1.6-cp310-cp310-macosx_15_0_arm64.whl
| Download URL | smt_switch-1.1.6-cp310-cp310-macosx_15_0_arm64.whl |
|---|---|
| Size | 20.7 MB |
| Tags | CPython 3.10 macOS 15.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
1c107fae92398871c6df4fbfa4ad0d7e36ba763344153231fc64693a78f5233c
|
|
BLAKE2b-256 checksum How to use checksums |
740ca956fe7e711f7c78d270712c07ea347b42fb33ad4d0373d31efa65f0bfc7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.7
|
Security for smt-switch 1.1.6
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.