bound-entangled 0.1.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- bound_entangled-0.1.0/LICENSE +21 -0
- bound_entangled-0.1.0/PKG-INFO +112 -0
- bound_entangled-0.1.0/README.md +92 -0
- bound_entangled-0.1.0/pyproject.toml +37 -0
- bound_entangled-0.1.0/setup.cfg +4 -0
- bound_entangled-0.1.0/src/bound_entangled.egg-info/PKG-INFO +112 -0
- bound_entangled-0.1.0/src/bound_entangled.egg-info/SOURCES.txt +32 -0
- bound_entangled-0.1.0/src/bound_entangled.egg-info/dependency_links.txt +1 -0
- bound_entangled-0.1.0/src/bound_entangled.egg-info/requires.txt +10 -0
- bound_entangled-0.1.0/src/bound_entangled.egg-info/top_level.txt +6 -0
- bound_entangled-0.1.0/src/c3_otimes_c3/__init__.py +7 -0
- bound_entangled-0.1.0/src/c3_otimes_c3/chessboard.py +57 -0
- bound_entangled-0.1.0/src/c3_otimes_c3/cross_hatch.py +25 -0
- bound_entangled-0.1.0/src/c3_otimes_c3/horodecki.py +23 -0
- bound_entangled-0.1.0/src/c3_otimes_c3/steering.py +42 -0
- bound_entangled-0.1.0/src/c3_otimes_c3/upb/__init__.py +0 -0
- bound_entangled-0.1.0/src/c3_otimes_c3/upb/parametrized_UPB.py +159 -0
- bound_entangled-0.1.0/src/c3_otimes_c3/upb/pyramid_UPB.py +37 -0
- bound_entangled-0.1.0/src/c3_otimes_c3/upb/tiles_UPB.py +20 -0
- bound_entangled-0.1.0/src/c4_otimes_c4/__init__.py +1 -0
- bound_entangled-0.1.0/src/c4_otimes_c4/pianni.py +46 -0
- bound_entangled-0.1.0/src/c5_otimes_c5/__init__.py +1 -0
- bound_entangled-0.1.0/src/c5_otimes_c5/sn3_grid_state.py +36 -0
- bound_entangled-0.1.0/src/cd_otimes_cd/__init__.py +2 -0
- bound_entangled-0.1.0/src/cd_otimes_cd/gen_tiles.py +73 -0
- bound_entangled-0.1.0/src/cd_otimes_cd/yu_oh.py +145 -0
- bound_entangled-0.1.0/src/cm_otimes_cn/__init__.py +4 -0
- bound_entangled-0.1.0/src/cm_otimes_cn/gen_tiles.py +80 -0
- bound_entangled-0.1.0/src/cm_otimes_cn/generalized_grid_state.py +38 -0
- bound_entangled-0.1.0/src/cm_otimes_cn/grid_state.py +42 -0
- bound_entangled-0.1.0/src/cm_otimes_cn/random_not_bound_entangled.py +62 -0
- bound_entangled-0.1.0/src/utils/__init__.py +2 -0
- bound_entangled-0.1.0/src/utils/ketbra.py +14 -0
- bound_entangled-0.1.0/src/utils/upb.py +27 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Anton Van Cleemput
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: bound-entangled
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: Families of bound entangled states for Quantum Information
|
|
5
|
+
Author-email: AVlyx <anton@vancleem.com>
|
|
6
|
+
License: MIT
|
|
7
|
+
Project-URL: Homepage, https://github.com/AVlyx/bound-entangled
|
|
8
|
+
Requires-Python: >=3.9
|
|
9
|
+
Description-Content-Type: text/markdown
|
|
10
|
+
License-File: LICENSE
|
|
11
|
+
Requires-Dist: toqito>=1.3.0
|
|
12
|
+
Requires-Dist: numpy>=2.4.1
|
|
13
|
+
Provides-Extra: test
|
|
14
|
+
Requires-Dist: pytest; extra == "test"
|
|
15
|
+
Provides-Extra: docs
|
|
16
|
+
Requires-Dist: mkdocs; extra == "docs"
|
|
17
|
+
Requires-Dist: mkdocs-material; extra == "docs"
|
|
18
|
+
Requires-Dist: mkdocstrings[python]; extra == "docs"
|
|
19
|
+
Dynamic: license-file
|
|
20
|
+
|
|
21
|
+
# bound-entangled
|
|
22
|
+
|
|
23
|
+
Reference implementations of several families of **bound entangled states** from
|
|
24
|
+
the quantum information literature, as plain NumPy density matrices.
|
|
25
|
+
|
|
26
|
+
A bound entangled state is entangled yet has a positive partial transpose (PPT),
|
|
27
|
+
so no pure entanglement can be distilled from it. This library collects
|
|
28
|
+
constructions that are otherwise scattered across papers into a single, tested
|
|
29
|
+
package, each factory returning the density matrix `rho` of the state.
|
|
30
|
+
|
|
31
|
+
## Installation
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
pip install -e .
|
|
35
|
+
# with the test dependencies:
|
|
36
|
+
pip install -e ".[test]"
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
Requires Python ≥ 3.9. Depends on [`toqito`](https://toqito.readthedocs.io) and
|
|
40
|
+
NumPy.
|
|
41
|
+
|
|
42
|
+
## Usage
|
|
43
|
+
|
|
44
|
+
Packages are organized by the bipartite Hilbert space the states live in
|
|
45
|
+
(`c3_otimes_c3` = C³ ⊗ C³, `cm_otimes_cn` = C^m ⊗ C^n, etc.).
|
|
46
|
+
|
|
47
|
+
```python
|
|
48
|
+
from c3_otimes_c3 import chessboard_extremal_PPT, tiles_upb, pyramid_upb
|
|
49
|
+
from cd_otimes_cd import yu_oh
|
|
50
|
+
from c5_otimes_c5 import sn3_grid_state
|
|
51
|
+
|
|
52
|
+
rho = chessboard_extremal_PPT() # 9x9 PPT-entangled chessboard state
|
|
53
|
+
rho = yu_oh(d=3, x=0.5, y=0.5) # Yu-Oh nonlocal bound entangled state
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
## States
|
|
57
|
+
|
|
58
|
+
### `c3_otimes_c3` — C³ ⊗ C³
|
|
59
|
+
|
|
60
|
+
| Factory | State | Reference |
|
|
61
|
+
|---|---|---|
|
|
62
|
+
| `chessboard`, `chessboard_extremal_PPT` | Bruß–Peres chessboard states | [quant-ph/9911056](https://arxiv.org/abs/quant-ph/9911056) |
|
|
63
|
+
| `cross_hatch` | 3×3 "cross-hatch" grid state (CCNR-detected) | [1705.09261](https://arxiv.org/abs/1705.09261) |
|
|
64
|
+
| `steering_state` | Steerable bound entangled state (counterexample to the stronger Peres conjecture) | [1405.0262](https://arxiv.org/abs/1405.0262) |
|
|
65
|
+
| `tiles_upb`, `pyramid_upb` | States from the Tiles / Pyramid unextendible product bases | [quant-ph/9808030](https://arxiv.org/abs/quant-ph/9808030) |
|
|
66
|
+
| `parametrized_upb` | Six-parameter family of UPBs generalizing Tiles / Pyramid | [quant-ph/9908070](https://arxiv.org/abs/quant-ph/9908070) |
|
|
67
|
+
| `horodecki` | 3x3 Horodecki bound entangled state | [quant-ph/9703004](https://arxiv.org/abs/quant-ph/9703004) |
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
### `c4_otimes_c4` — C⁴ ⊗ C⁴
|
|
71
|
+
|
|
72
|
+
| Factory | State | Reference |
|
|
73
|
+
|---|---|---|
|
|
74
|
+
| `pianni` | 4×4 Benatti–Floreanini–Piani state | [quant-ph/0411095](https://arxiv.org/abs/quant-ph/0411095) |
|
|
75
|
+
|
|
76
|
+
### `c5_otimes_c5` — C⁵ ⊗ C⁵
|
|
77
|
+
|
|
78
|
+
| Factory | State | Reference |
|
|
79
|
+
|---|---|---|
|
|
80
|
+
| `sn3_grid_state` | Smallest known Schmidt-number-3 PPT bound entangled state | [2402.12966](https://arxiv.org/abs/2402.12966) |
|
|
81
|
+
|
|
82
|
+
### `cd_otimes_cd` — C^d ⊗ C^d
|
|
83
|
+
|
|
84
|
+
| Factory | State | Reference |
|
|
85
|
+
|---|---|---|
|
|
86
|
+
| `yu_oh`, `is_valid_yu_oh_input` | Yu–Oh family of nonlocal bound entangled states | [1509.08991](https://arxiv.org/abs/1509.08991) |
|
|
87
|
+
| `gen_tiles1` | GenTiles1 UPB generalizing Tiles to d⊗d, even d≥4 | [quant-ph/9908070](https://arxiv.org/abs/quant-ph/9908070) |
|
|
88
|
+
|
|
89
|
+
### `cm_otimes_cn` — C^m ⊗ C^n (parametric constructions)
|
|
90
|
+
|
|
91
|
+
| Factory | State | Reference |
|
|
92
|
+
|---|---|---|
|
|
93
|
+
| `grid_state` | Quantum grid states from graph edges | [1705.09261](https://arxiv.org/abs/1705.09261) |
|
|
94
|
+
| `generalized_grid_state` | Grid states generalized to hyperedges | [2402.12966](https://arxiv.org/abs/2402.12966) |
|
|
95
|
+
| `random_NPT`, `random_PPT`, `random_PPT_close_to_the_PPT_edge` | Random density matrices by PPT class (rejection sampling) | — |
|
|
96
|
+
| `gen_tiles2` | GenTiles2 UPB generalizing Tiles to m⊗n, n>3, m≥3, n≥m | [quant-ph/9908070](https://arxiv.org/abs/quant-ph/9908070) |
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
## Documentation
|
|
100
|
+
|
|
101
|
+
Full API docs (built with [MkDocs](https://www.mkdocs.org/) +
|
|
102
|
+
[mkdocstrings](https://mkdocstrings.github.io/)) are published to GitHub Pages
|
|
103
|
+
on every push to `main`. To preview locally:
|
|
104
|
+
|
|
105
|
+
```bash
|
|
106
|
+
pip install -e ".[docs]"
|
|
107
|
+
mkdocs serve
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
## License
|
|
111
|
+
|
|
112
|
+
MIT
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
# bound-entangled
|
|
2
|
+
|
|
3
|
+
Reference implementations of several families of **bound entangled states** from
|
|
4
|
+
the quantum information literature, as plain NumPy density matrices.
|
|
5
|
+
|
|
6
|
+
A bound entangled state is entangled yet has a positive partial transpose (PPT),
|
|
7
|
+
so no pure entanglement can be distilled from it. This library collects
|
|
8
|
+
constructions that are otherwise scattered across papers into a single, tested
|
|
9
|
+
package, each factory returning the density matrix `rho` of the state.
|
|
10
|
+
|
|
11
|
+
## Installation
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
pip install -e .
|
|
15
|
+
# with the test dependencies:
|
|
16
|
+
pip install -e ".[test]"
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
Requires Python ≥ 3.9. Depends on [`toqito`](https://toqito.readthedocs.io) and
|
|
20
|
+
NumPy.
|
|
21
|
+
|
|
22
|
+
## Usage
|
|
23
|
+
|
|
24
|
+
Packages are organized by the bipartite Hilbert space the states live in
|
|
25
|
+
(`c3_otimes_c3` = C³ ⊗ C³, `cm_otimes_cn` = C^m ⊗ C^n, etc.).
|
|
26
|
+
|
|
27
|
+
```python
|
|
28
|
+
from c3_otimes_c3 import chessboard_extremal_PPT, tiles_upb, pyramid_upb
|
|
29
|
+
from cd_otimes_cd import yu_oh
|
|
30
|
+
from c5_otimes_c5 import sn3_grid_state
|
|
31
|
+
|
|
32
|
+
rho = chessboard_extremal_PPT() # 9x9 PPT-entangled chessboard state
|
|
33
|
+
rho = yu_oh(d=3, x=0.5, y=0.5) # Yu-Oh nonlocal bound entangled state
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
## States
|
|
37
|
+
|
|
38
|
+
### `c3_otimes_c3` — C³ ⊗ C³
|
|
39
|
+
|
|
40
|
+
| Factory | State | Reference |
|
|
41
|
+
|---|---|---|
|
|
42
|
+
| `chessboard`, `chessboard_extremal_PPT` | Bruß–Peres chessboard states | [quant-ph/9911056](https://arxiv.org/abs/quant-ph/9911056) |
|
|
43
|
+
| `cross_hatch` | 3×3 "cross-hatch" grid state (CCNR-detected) | [1705.09261](https://arxiv.org/abs/1705.09261) |
|
|
44
|
+
| `steering_state` | Steerable bound entangled state (counterexample to the stronger Peres conjecture) | [1405.0262](https://arxiv.org/abs/1405.0262) |
|
|
45
|
+
| `tiles_upb`, `pyramid_upb` | States from the Tiles / Pyramid unextendible product bases | [quant-ph/9808030](https://arxiv.org/abs/quant-ph/9808030) |
|
|
46
|
+
| `parametrized_upb` | Six-parameter family of UPBs generalizing Tiles / Pyramid | [quant-ph/9908070](https://arxiv.org/abs/quant-ph/9908070) |
|
|
47
|
+
| `horodecki` | 3x3 Horodecki bound entangled state | [quant-ph/9703004](https://arxiv.org/abs/quant-ph/9703004) |
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
### `c4_otimes_c4` — C⁴ ⊗ C⁴
|
|
51
|
+
|
|
52
|
+
| Factory | State | Reference |
|
|
53
|
+
|---|---|---|
|
|
54
|
+
| `pianni` | 4×4 Benatti–Floreanini–Piani state | [quant-ph/0411095](https://arxiv.org/abs/quant-ph/0411095) |
|
|
55
|
+
|
|
56
|
+
### `c5_otimes_c5` — C⁵ ⊗ C⁵
|
|
57
|
+
|
|
58
|
+
| Factory | State | Reference |
|
|
59
|
+
|---|---|---|
|
|
60
|
+
| `sn3_grid_state` | Smallest known Schmidt-number-3 PPT bound entangled state | [2402.12966](https://arxiv.org/abs/2402.12966) |
|
|
61
|
+
|
|
62
|
+
### `cd_otimes_cd` — C^d ⊗ C^d
|
|
63
|
+
|
|
64
|
+
| Factory | State | Reference |
|
|
65
|
+
|---|---|---|
|
|
66
|
+
| `yu_oh`, `is_valid_yu_oh_input` | Yu–Oh family of nonlocal bound entangled states | [1509.08991](https://arxiv.org/abs/1509.08991) |
|
|
67
|
+
| `gen_tiles1` | GenTiles1 UPB generalizing Tiles to d⊗d, even d≥4 | [quant-ph/9908070](https://arxiv.org/abs/quant-ph/9908070) |
|
|
68
|
+
|
|
69
|
+
### `cm_otimes_cn` — C^m ⊗ C^n (parametric constructions)
|
|
70
|
+
|
|
71
|
+
| Factory | State | Reference |
|
|
72
|
+
|---|---|---|
|
|
73
|
+
| `grid_state` | Quantum grid states from graph edges | [1705.09261](https://arxiv.org/abs/1705.09261) |
|
|
74
|
+
| `generalized_grid_state` | Grid states generalized to hyperedges | [2402.12966](https://arxiv.org/abs/2402.12966) |
|
|
75
|
+
| `random_NPT`, `random_PPT`, `random_PPT_close_to_the_PPT_edge` | Random density matrices by PPT class (rejection sampling) | — |
|
|
76
|
+
| `gen_tiles2` | GenTiles2 UPB generalizing Tiles to m⊗n, n>3, m≥3, n≥m | [quant-ph/9908070](https://arxiv.org/abs/quant-ph/9908070) |
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
## Documentation
|
|
80
|
+
|
|
81
|
+
Full API docs (built with [MkDocs](https://www.mkdocs.org/) +
|
|
82
|
+
[mkdocstrings](https://mkdocstrings.github.io/)) are published to GitHub Pages
|
|
83
|
+
on every push to `main`. To preview locally:
|
|
84
|
+
|
|
85
|
+
```bash
|
|
86
|
+
pip install -e ".[docs]"
|
|
87
|
+
mkdocs serve
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
## License
|
|
91
|
+
|
|
92
|
+
MIT
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["setuptools>=68.0"]
|
|
3
|
+
build-backend = "setuptools.build_meta"
|
|
4
|
+
|
|
5
|
+
[project]
|
|
6
|
+
name = "bound-entangled"
|
|
7
|
+
version = "0.1.0"
|
|
8
|
+
description = "Families of bound entangled states for Quantum Information"
|
|
9
|
+
readme = "README.md"
|
|
10
|
+
requires-python = ">=3.9"
|
|
11
|
+
license = {text = "MIT"}
|
|
12
|
+
authors = [
|
|
13
|
+
{name = "AVlyx", email = "anton@vancleem.com"}
|
|
14
|
+
]
|
|
15
|
+
dependencies = [
|
|
16
|
+
"toqito>=1.3.0",
|
|
17
|
+
"numpy>=2.4.1"
|
|
18
|
+
]
|
|
19
|
+
|
|
20
|
+
[project.urls]
|
|
21
|
+
Homepage = "https://github.com/AVlyx/bound-entangled"
|
|
22
|
+
|
|
23
|
+
[project.optional-dependencies]
|
|
24
|
+
test = ["pytest"]
|
|
25
|
+
docs = ["mkdocs", "mkdocs-material", "mkdocstrings[python]"]
|
|
26
|
+
|
|
27
|
+
[tool.setuptools.packages.find]
|
|
28
|
+
where = ["src"]
|
|
29
|
+
|
|
30
|
+
[tool.pytest.ini_options]
|
|
31
|
+
testpaths = ["tests"]
|
|
32
|
+
# src: import the library the same flat way the source does (`from utils import ...`)
|
|
33
|
+
# even without the editable install. tests: makes the shared `qi` helper
|
|
34
|
+
# module importable from every test file.
|
|
35
|
+
pythonpath = ["src", "tests"]
|
|
36
|
+
# importlib mode lets the two identically named `test_upb.py` modules coexist.
|
|
37
|
+
addopts = "--import-mode=importlib"
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: bound-entangled
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: Families of bound entangled states for Quantum Information
|
|
5
|
+
Author-email: AVlyx <anton@vancleem.com>
|
|
6
|
+
License: MIT
|
|
7
|
+
Project-URL: Homepage, https://github.com/AVlyx/bound-entangled
|
|
8
|
+
Requires-Python: >=3.9
|
|
9
|
+
Description-Content-Type: text/markdown
|
|
10
|
+
License-File: LICENSE
|
|
11
|
+
Requires-Dist: toqito>=1.3.0
|
|
12
|
+
Requires-Dist: numpy>=2.4.1
|
|
13
|
+
Provides-Extra: test
|
|
14
|
+
Requires-Dist: pytest; extra == "test"
|
|
15
|
+
Provides-Extra: docs
|
|
16
|
+
Requires-Dist: mkdocs; extra == "docs"
|
|
17
|
+
Requires-Dist: mkdocs-material; extra == "docs"
|
|
18
|
+
Requires-Dist: mkdocstrings[python]; extra == "docs"
|
|
19
|
+
Dynamic: license-file
|
|
20
|
+
|
|
21
|
+
# bound-entangled
|
|
22
|
+
|
|
23
|
+
Reference implementations of several families of **bound entangled states** from
|
|
24
|
+
the quantum information literature, as plain NumPy density matrices.
|
|
25
|
+
|
|
26
|
+
A bound entangled state is entangled yet has a positive partial transpose (PPT),
|
|
27
|
+
so no pure entanglement can be distilled from it. This library collects
|
|
28
|
+
constructions that are otherwise scattered across papers into a single, tested
|
|
29
|
+
package, each factory returning the density matrix `rho` of the state.
|
|
30
|
+
|
|
31
|
+
## Installation
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
pip install -e .
|
|
35
|
+
# with the test dependencies:
|
|
36
|
+
pip install -e ".[test]"
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
Requires Python ≥ 3.9. Depends on [`toqito`](https://toqito.readthedocs.io) and
|
|
40
|
+
NumPy.
|
|
41
|
+
|
|
42
|
+
## Usage
|
|
43
|
+
|
|
44
|
+
Packages are organized by the bipartite Hilbert space the states live in
|
|
45
|
+
(`c3_otimes_c3` = C³ ⊗ C³, `cm_otimes_cn` = C^m ⊗ C^n, etc.).
|
|
46
|
+
|
|
47
|
+
```python
|
|
48
|
+
from c3_otimes_c3 import chessboard_extremal_PPT, tiles_upb, pyramid_upb
|
|
49
|
+
from cd_otimes_cd import yu_oh
|
|
50
|
+
from c5_otimes_c5 import sn3_grid_state
|
|
51
|
+
|
|
52
|
+
rho = chessboard_extremal_PPT() # 9x9 PPT-entangled chessboard state
|
|
53
|
+
rho = yu_oh(d=3, x=0.5, y=0.5) # Yu-Oh nonlocal bound entangled state
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
## States
|
|
57
|
+
|
|
58
|
+
### `c3_otimes_c3` — C³ ⊗ C³
|
|
59
|
+
|
|
60
|
+
| Factory | State | Reference |
|
|
61
|
+
|---|---|---|
|
|
62
|
+
| `chessboard`, `chessboard_extremal_PPT` | Bruß–Peres chessboard states | [quant-ph/9911056](https://arxiv.org/abs/quant-ph/9911056) |
|
|
63
|
+
| `cross_hatch` | 3×3 "cross-hatch" grid state (CCNR-detected) | [1705.09261](https://arxiv.org/abs/1705.09261) |
|
|
64
|
+
| `steering_state` | Steerable bound entangled state (counterexample to the stronger Peres conjecture) | [1405.0262](https://arxiv.org/abs/1405.0262) |
|
|
65
|
+
| `tiles_upb`, `pyramid_upb` | States from the Tiles / Pyramid unextendible product bases | [quant-ph/9808030](https://arxiv.org/abs/quant-ph/9808030) |
|
|
66
|
+
| `parametrized_upb` | Six-parameter family of UPBs generalizing Tiles / Pyramid | [quant-ph/9908070](https://arxiv.org/abs/quant-ph/9908070) |
|
|
67
|
+
| `horodecki` | 3x3 Horodecki bound entangled state | [quant-ph/9703004](https://arxiv.org/abs/quant-ph/9703004) |
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
### `c4_otimes_c4` — C⁴ ⊗ C⁴
|
|
71
|
+
|
|
72
|
+
| Factory | State | Reference |
|
|
73
|
+
|---|---|---|
|
|
74
|
+
| `pianni` | 4×4 Benatti–Floreanini–Piani state | [quant-ph/0411095](https://arxiv.org/abs/quant-ph/0411095) |
|
|
75
|
+
|
|
76
|
+
### `c5_otimes_c5` — C⁵ ⊗ C⁵
|
|
77
|
+
|
|
78
|
+
| Factory | State | Reference |
|
|
79
|
+
|---|---|---|
|
|
80
|
+
| `sn3_grid_state` | Smallest known Schmidt-number-3 PPT bound entangled state | [2402.12966](https://arxiv.org/abs/2402.12966) |
|
|
81
|
+
|
|
82
|
+
### `cd_otimes_cd` — C^d ⊗ C^d
|
|
83
|
+
|
|
84
|
+
| Factory | State | Reference |
|
|
85
|
+
|---|---|---|
|
|
86
|
+
| `yu_oh`, `is_valid_yu_oh_input` | Yu–Oh family of nonlocal bound entangled states | [1509.08991](https://arxiv.org/abs/1509.08991) |
|
|
87
|
+
| `gen_tiles1` | GenTiles1 UPB generalizing Tiles to d⊗d, even d≥4 | [quant-ph/9908070](https://arxiv.org/abs/quant-ph/9908070) |
|
|
88
|
+
|
|
89
|
+
### `cm_otimes_cn` — C^m ⊗ C^n (parametric constructions)
|
|
90
|
+
|
|
91
|
+
| Factory | State | Reference |
|
|
92
|
+
|---|---|---|
|
|
93
|
+
| `grid_state` | Quantum grid states from graph edges | [1705.09261](https://arxiv.org/abs/1705.09261) |
|
|
94
|
+
| `generalized_grid_state` | Grid states generalized to hyperedges | [2402.12966](https://arxiv.org/abs/2402.12966) |
|
|
95
|
+
| `random_NPT`, `random_PPT`, `random_PPT_close_to_the_PPT_edge` | Random density matrices by PPT class (rejection sampling) | — |
|
|
96
|
+
| `gen_tiles2` | GenTiles2 UPB generalizing Tiles to m⊗n, n>3, m≥3, n≥m | [quant-ph/9908070](https://arxiv.org/abs/quant-ph/9908070) |
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
## Documentation
|
|
100
|
+
|
|
101
|
+
Full API docs (built with [MkDocs](https://www.mkdocs.org/) +
|
|
102
|
+
[mkdocstrings](https://mkdocstrings.github.io/)) are published to GitHub Pages
|
|
103
|
+
on every push to `main`. To preview locally:
|
|
104
|
+
|
|
105
|
+
```bash
|
|
106
|
+
pip install -e ".[docs]"
|
|
107
|
+
mkdocs serve
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
## License
|
|
111
|
+
|
|
112
|
+
MIT
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
LICENSE
|
|
2
|
+
README.md
|
|
3
|
+
pyproject.toml
|
|
4
|
+
src/bound_entangled.egg-info/PKG-INFO
|
|
5
|
+
src/bound_entangled.egg-info/SOURCES.txt
|
|
6
|
+
src/bound_entangled.egg-info/dependency_links.txt
|
|
7
|
+
src/bound_entangled.egg-info/requires.txt
|
|
8
|
+
src/bound_entangled.egg-info/top_level.txt
|
|
9
|
+
src/c3_otimes_c3/__init__.py
|
|
10
|
+
src/c3_otimes_c3/chessboard.py
|
|
11
|
+
src/c3_otimes_c3/cross_hatch.py
|
|
12
|
+
src/c3_otimes_c3/horodecki.py
|
|
13
|
+
src/c3_otimes_c3/steering.py
|
|
14
|
+
src/c3_otimes_c3/upb/__init__.py
|
|
15
|
+
src/c3_otimes_c3/upb/parametrized_UPB.py
|
|
16
|
+
src/c3_otimes_c3/upb/pyramid_UPB.py
|
|
17
|
+
src/c3_otimes_c3/upb/tiles_UPB.py
|
|
18
|
+
src/c4_otimes_c4/__init__.py
|
|
19
|
+
src/c4_otimes_c4/pianni.py
|
|
20
|
+
src/c5_otimes_c5/__init__.py
|
|
21
|
+
src/c5_otimes_c5/sn3_grid_state.py
|
|
22
|
+
src/cd_otimes_cd/__init__.py
|
|
23
|
+
src/cd_otimes_cd/gen_tiles.py
|
|
24
|
+
src/cd_otimes_cd/yu_oh.py
|
|
25
|
+
src/cm_otimes_cn/__init__.py
|
|
26
|
+
src/cm_otimes_cn/gen_tiles.py
|
|
27
|
+
src/cm_otimes_cn/generalized_grid_state.py
|
|
28
|
+
src/cm_otimes_cn/grid_state.py
|
|
29
|
+
src/cm_otimes_cn/random_not_bound_entangled.py
|
|
30
|
+
src/utils/__init__.py
|
|
31
|
+
src/utils/ketbra.py
|
|
32
|
+
src/utils/upb.py
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
from c3_otimes_c3.chessboard import chessboard, chessboard_extremal_PPT
|
|
2
|
+
from c3_otimes_c3.cross_hatch import cross_hatch
|
|
3
|
+
from c3_otimes_c3.steering import steering_state
|
|
4
|
+
from c3_otimes_c3.upb.tiles_UPB import tiles_upb
|
|
5
|
+
from c3_otimes_c3.upb.pyramid_UPB import pyramid_upb
|
|
6
|
+
from c3_otimes_c3.upb.parametrized_UPB import parametrized_upb
|
|
7
|
+
from c3_otimes_c3.horodecki import horodecki
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"""https://arxiv.org/abs/quant-ph/9911056
|
|
2
|
+
|
|
3
|
+
D. Bruß, A. Peres, "Construction of quantum states with bound entanglement",
|
|
4
|
+
Phys. Rev. A 61, 030301(R) (2000). Named "chessboard states" because their
|
|
5
|
+
8x8 matrix form looks like a chessboard (see also
|
|
6
|
+
https://arxiv.org/abs/2010.08372, Appendix C2).
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
from toqito.states import chessboard as chessboard_toqito
|
|
10
|
+
from typing import Optional
|
|
11
|
+
import numpy as np
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
def chessboard(
|
|
15
|
+
a: complex, b: complex, c: complex, d: complex, m: complex, n: complex, s: Optional[complex] = None, t: Optional[complex] = None
|
|
16
|
+
) -> np.ndarray:
|
|
17
|
+
"""A chessboard state.
|
|
18
|
+
|
|
19
|
+
Args:
|
|
20
|
+
a: free real parameter.
|
|
21
|
+
b: free real parameter.
|
|
22
|
+
c: free real parameter.
|
|
23
|
+
d: free real parameter.
|
|
24
|
+
m: free real parameter.
|
|
25
|
+
n: free real parameter.
|
|
26
|
+
s: defaults to c/n if None.
|
|
27
|
+
t: defaults to a*d/m if None.
|
|
28
|
+
|
|
29
|
+
Returns:
|
|
30
|
+
np.ndarray: a chessboard quantum state.
|
|
31
|
+
"""
|
|
32
|
+
return chessboard_toqito([a, b, c, d, m, n], s, t) # type: ignore
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
def chessboard_extremal_PPT() -> np.ndarray:
|
|
36
|
+
"""Extremal PPT chessboard state.
|
|
37
|
+
|
|
38
|
+
The state from the chessboard family with m = n = b = -3/5, a = 3/5,
|
|
39
|
+
c = -d = 6/5, shown to be an extremal point of the PPT-entangled states
|
|
40
|
+
in https://arxiv.org/abs/2010.08372 (Fig. 2 / Fig. 9, page 25).
|
|
41
|
+
|
|
42
|
+
Returns:
|
|
43
|
+
np.ndarray: the extremal PPT chessboard state.
|
|
44
|
+
"""
|
|
45
|
+
return chessboard(
|
|
46
|
+
# m = n = b = -3/5
|
|
47
|
+
m=-3 / 5,
|
|
48
|
+
n=-3 / 5,
|
|
49
|
+
b=-3 / 5,
|
|
50
|
+
# a = 3/5
|
|
51
|
+
a=3 / 5,
|
|
52
|
+
# c = -d = 6/5
|
|
53
|
+
c=6 / 5,
|
|
54
|
+
d=-6 / 5,
|
|
55
|
+
s=(3 / 5) * (6 / 5) / (-3 / 5),
|
|
56
|
+
t=(3 / 5) * (-6 / 5) / (-3 / 5),
|
|
57
|
+
)
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"""https://arxiv.org/abs/1705.09261
|
|
2
|
+
|
|
3
|
+
J. Lockhart, O. Gühne, S. Severini, "Entanglement properties of quantum grid
|
|
4
|
+
states", Phys. Rev. A 97, 062340 (2018).
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from cm_otimes_cn.grid_state import grid_state
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
def cross_hatch():
|
|
11
|
+
"""The 3x3 "cross-hatch" grid state.
|
|
12
|
+
|
|
13
|
+
A bound entangled example of a quantum grid state, detected by the CCNR
|
|
14
|
+
(realignment) criterion.
|
|
15
|
+
|
|
16
|
+
Returns:
|
|
17
|
+
np.ndarray: the cross-hatch grid state.
|
|
18
|
+
"""
|
|
19
|
+
return grid_state(
|
|
20
|
+
(3, 3),
|
|
21
|
+
((0, 0), (1, 2)),
|
|
22
|
+
((1, 0), (2, 2)),
|
|
23
|
+
((0, 1), (2, 0)),
|
|
24
|
+
((0, 2), (2, 1)),
|
|
25
|
+
)
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"""https://arxiv.org/abs/quant-ph/9703004
|
|
2
|
+
|
|
3
|
+
P. Horodecki, "Separability criterion and inseparable mixed states with
|
|
4
|
+
positive partial transposition", Phys. Lett. A 232, 333 (1997), Section 4.1.
|
|
5
|
+
One of the first known families of bound entangled states: PPT for every
|
|
6
|
+
a_param in [0, 1], separable only at the endpoints a_param = 0 or 1.
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
from toqito.states import horodecki as horodecki_toqito
|
|
10
|
+
import numpy as np
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
def horodecki(a_param: float) -> np.ndarray:
|
|
14
|
+
"""The 3x3 Horodecki state.
|
|
15
|
+
|
|
16
|
+
Args:
|
|
17
|
+
a_param: free real parameter in [0, 1]. The state is PPT for every
|
|
18
|
+
value in this range, and separable only at a_param = 0 or 1.
|
|
19
|
+
|
|
20
|
+
Returns:
|
|
21
|
+
np.ndarray: the 3x3 Horodecki density matrix.
|
|
22
|
+
"""
|
|
23
|
+
return horodecki_toqito(a_param, dim=[3, 3]) # type: ignore
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"""https://arxiv.org/abs/1405.0262
|
|
2
|
+
|
|
3
|
+
T. Moroder, O. Gittsovich, M. Huber, O. Gühne, "Steering Bound Entangled
|
|
4
|
+
States: A Counterexample to the Stronger Peres Conjecture", Phys. Rev. Lett.
|
|
5
|
+
113, 050404 (2014).
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
import numpy as np
|
|
9
|
+
from math import sqrt
|
|
10
|
+
from utils import ketbra
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
def steering_state(m1: float, m2: float) -> np.ndarray:
|
|
14
|
+
"""A 3x3 bound entangled state that is steerable, parametrized by m1, m2.
|
|
15
|
+
|
|
16
|
+
Counterexample to the (stronger) Peres conjecture that bound entangled
|
|
17
|
+
states cannot be used to demonstrate EPR steering.
|
|
18
|
+
|
|
19
|
+
Args:
|
|
20
|
+
m1: first free real parameter.
|
|
21
|
+
m2: second free real parameter (with m1**2 + m2**2 <= 1).
|
|
22
|
+
|
|
23
|
+
Returns:
|
|
24
|
+
np.ndarray: the steerable bound entangled state.
|
|
25
|
+
"""
|
|
26
|
+
m3 = sqrt((1 - m1**2 - m2**2) / 2)
|
|
27
|
+
|
|
28
|
+
psi_1 = np.zeros(9, dtype=np.float64)
|
|
29
|
+
psi_2 = np.zeros(9, dtype=np.float64)
|
|
30
|
+
psi_3 = np.zeros(9, dtype=np.float64)
|
|
31
|
+
psi_t_3 = np.zeros(9, dtype=np.float64)
|
|
32
|
+
|
|
33
|
+
psi_1[1 * 3 + 2], psi_1[2 * 3 + 1] = 1 / sqrt(2), 1 / sqrt(2)
|
|
34
|
+
psi_2[0], psi_2[1 * 3 + 1], psi_2[2 * 3 + 2] = 1 / sqrt(3), 1 / sqrt(3), -1 / sqrt(3)
|
|
35
|
+
psi_3[1], psi_3[1 * 3], psi_3[1 * 3 + 1], psi_3[2 * 3 + 2] = m1, m2, m3, m3
|
|
36
|
+
psi_t_3[2], psi_t_3[2 * 3], psi_t_3[2 * 3 + 1], psi_t_3[1 * 3 + 2] = m1, -m2, m3, -m3
|
|
37
|
+
|
|
38
|
+
lambda1 = 1 - (2 + 3 * m1 * m2) / (4 - 2 * m1**2 + m1 * m2 - 2 * m2**2)
|
|
39
|
+
lambda3 = 1 / (4 - 2 * m1**2 + m1 * m2 - 2 * m2**2)
|
|
40
|
+
lambda2 = 1 - lambda1 - 2 * lambda3
|
|
41
|
+
|
|
42
|
+
return lambda1 * ketbra(psi_1, psi_1) + lambda2 * ketbra(psi_2, psi_2) + lambda3 * (ketbra(psi_3, psi_3) + ketbra(psi_t_3, psi_t_3))
|
|
File without changes
|