Skip to main content

bound-entangled

Documentation PyPI

Reference implementations of families of bound entangled states from the quantum information literature, as plain NumPy density matrices.

A bound entangled state is entangled, yet no pure entanglement can be distilled from it, however many copies are available. No state with a positive partial transpose (PPT) is distillable, so every PPT entangled state is bound entangled — and the bipartite bound entangled states collected here are all PPT. They are otherwise scattered across papers; this package gathers them into one tested library, each factory returning the density matrix rho of the state.

📖 Documentation — one page per state, with the construction written out, what is known about it, and the papers it comes from, plus a bibliography with BibTeX.

Installation

pip install bound-entangled

Requires Python ≥ 3.11. The only runtime dependency is NumPy; every state is built from the small linear-algebra helpers in bound_entangled.utils. To classify the states — is_separable and the like — use a toolbox such as toqito, which the test suite depends on.

Usage

Packages are organized by the Hilbert space the states live in (c3_otimes_c3 = C³ ⊗ C³, cm_otimes_cn = C^m ⊗ C^n, etc.).

from bound_entangled.c3_otimes_c3 import chessboard_extremal_PPT, tiles_upb
from bound_entangled.cd_otimes_cd import yu_oh
from bound_entangled.c5_otimes_c5 import sn3_grid_state

rho = chessboard_extremal_PPT()          # 9x9 PPT entangled chessboard state
rho = tiles_upb()                        # 9x9 state from the Tiles UPB
rho = yu_oh(full_dim=3, x=0.5, y=0.1)    # Yu–Oh nonlocal bound entangled state
rho = sn3_grid_state()                   # 25x25, Schmidt number 3

The two Horodecki states are both called horodecki, each in the package of the space it lives in: c2_otimes_c4 and c3_otimes_c3.

States

c2_otimes_c4 — C² ⊗ C⁴

Factory State Reference
horodecki 2×4 Horodecki bound entangled state quant-ph/9703004

c3_otimes_c3 — C³ ⊗ C³

Factory State Reference
chessboard, chessboard_extremal_PPT Bruß–Peres chessboard states quant-ph/9911056
cross_hatch 3×3 "cross-hatch" grid state (CCNR-detected) 1705.09261
horodecki 3×3 Horodecki bound entangled state quant-ph/9703004
vertesi_brunner Vértesi–Brunner rank-4 PPT entangled state that violates a Bell inequality 1405.4502
steering_state Steerable bound entangled state (counterexample to the stronger Peres conjecture) 1405.0262
tiles_upb, pyramid_upb States from the Tiles / Pyramid unextendible product bases quant-ph/9808030
parametrized_upb Six-parameter family of UPBs generalizing Tiles / Pyramid quant-ph/9908070

vertesi_brunner was called ncomms6297 up to version 0.2.2.

c4_otimes_c4 — C⁴ ⊗ C⁴

Factory State Reference
piani 4×4 Benatti–Floreanini–Piani state quant-ph/0411095

c5_otimes_c5 — C⁵ ⊗ C⁵

Factory State Reference
sn3_grid_state Smallest known Schmidt-number-3 PPT bound entangled state 2402.12966

cd_otimes_cd — C^d ⊗ C^d

Factory State Reference
yu_oh, is_valid_yu_oh_input Yu–Oh family of nonlocal bound entangled states 1509.08991
gen_tiles1 GenTiles1 UPB generalizing Tiles to d⊗d, even d ≥ 4 quant-ph/9908070
badziag_private_singlet Badziąg et al. private-singlet state on C^2d ⊗ C^2d (ρ_F1) 1309.7992, 2002.12409
orthogonal_singlet ρ_F2, the second family of PPT singlets 2002.12409
horodecki_2_by_d_generalized The 2×4 Horodecki state generalized to C² ⊗ C^d 1203.3711
breuer Breuer states on C^d ⊗ C^d, even d — bound entangled for 0 < λ ≤ 1/(d+2) quant-ph/0605036

cm_otimes_cn — C^m ⊗ C^n (parametric constructions)

Factory State Reference
grid_state Quantum grid states from graph edges 1705.09261
generalized_grid_state Grid states generalized to hyperedges 2402.12966
gen_tiles2 GenTiles2 UPB generalizing Tiles to m⊗n, n > 3, m ≥ 3, n ≥ m quant-ph/9908070
random_NPT, random_PPT, random_PPT_close_to_the_PPT_edge Random density matrices by PPT class (rejection sampling) —

grid_state and generalized_grid_state are general constructors: not every graph gives a bound entangled state, and the documentation says which ones do.

multipartite — multipartite systems

Factory State Reference
smolin Smolin four-party unlockable state — separable across 2|2 cuts, NPT across 1|3 quant-ph/0001001
generalized_smolin Generalized Smolin state on an even number of qubits — separable across even cuts, NPT across odd quant-ph/0411142
quasi_ds Quasi-DS (diagonal symmetric) state on an odd number n ≥ 5 of qubits — PPT across every bipartition 1706.09423

For the two Smolin states the bound entanglement lives in the cuts where they are separable: with the parties grouped that way nothing is distillable, while the state as a whole is multipartite entangled. The doctests on smolin assert both kinds of cut; those on generalized_smolin assert the separable 2|4 cut of the six-qubit state.

utils

Function Description
ketbra(a, b?) The outer product |a><b|, defaulting to |a><a|.
upb(basis) The bound entangled state on the orthogonal complement of an unextendible product basis.
tensor(*arrays) The Kronecker product of the factors, left to right.
max_entangled(d) The maximally entangled state of C^d ⊗ C^d, as a column vector.
pauli(i), pauli([i, j, ...]) A Pauli matrix (0 = I, 1 = X, 2 = Y, 3 = Z), or a tensor product of them.
fourier(d) The d × d discrete Fourier matrix.
permute_systems(mat, perm, dim) Reorder the subsystems of an operator on a multipartite space.
partial_transpose(mat, dim), is_ppt(mat, dim) The partial transpose over the second system, and the PPT test.
random_density_matrix(d, seed?) A random density matrix from the Hilbert–Schmidt measure.

Repository layout

Path Contents
src/ The Python package, published to PyPI when a GitHub release is published.
tests/ Checks of everything that used to come from toqito — the helpers in utils and the reimplemented states — entrywise against toqito.
docs/ The Zensical site behind the documentation link, deployed to GitHub Pages on every push to main.
includes/ One file per cited paper, with its BibTeX, pulled into the documentation's bibliography.
TODO.md Open questions about specific states, and what has been resolved.

Development

pip install -e ".[test]"
pytest

The test extra installs toqito, which only the tests use. Most of the suite lives in the docstrings: every state factory carries an Examples block asserting that what it returns is a valid density matrix, that it is PPT, and how toqito's is_separable classifies it — run as doctests by pytest, so the documented behaviour and the tested behaviour cannot drift apart. A few of them fall through to toqito's semidefinite-programming check and take around ten seconds each. tests/ pins the package's own linear algebra, and the states it used to take from toqito, entrywise against toqito.

The documentation pages are generated from the docstrings: each page is the module docstring of one file under src/ (the construction, its math and its references) followed by the factory's own docstring. The files in docs/ only say which module goes on which page, so to change a page, edit the docstring. To preview the site:

pip install -e ".[docs]"
zensical serve

License

MIT — see LICENSE.

Metadata

Release files for bound-entangled 0.3.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for bound-entangled 0.3.0
File Size Uploaded Provenance
bound_entangled-0.3.0.tar.gz 48.6 kB With provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for bound-entangled 0.3.0
File Interpreter ABI Platform
bound_entangled-0.3.0-py3-none-any.whl Python 3 none any Details

Total release size: 115.3 kB

Release files / bound_entangled-0.3.0.tar.gz

Download URL bound_entangled-0.3.0.tar.gz
Size 48.6 kB
Tags Source
SHA-256 checksum
How to use checksums
eb9be3e29a08d9d6ac759c7e0b8e0f06ef59974442cf35cef9f2a6ae38581812
BLAKE2b-256 checksum
How to use checksums
b2c5dcdc774c1fe2e76ea851b5a304149f3dcb2370b713b4f2c23aaec07c18d6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 19, 2026.

Transparency log

Release files / bound_entangled-0.3.0-py3-none-any.whl

Download URL bound_entangled-0.3.0-py3-none-any.whl
Size 66.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
c1f3e7686ac04bc41d5af886aba8f036db1157bbfdf85839cf2506b7063ab632
BLAKE2b-256 checksum
How to use checksums
f8b1f08938f2a35a74cb98d26165d28bbe7930ce334b2aeb2ec67509f19bdef9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 19, 2026.

Transparency log

Security for bound-entangled 0.3.0

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.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for bound_entangled-0.3.0.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 19, 2026.

Transparency log

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.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page