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.
Files changed (34) hide show
  1. bound_entangled-0.1.0/LICENSE +21 -0
  2. bound_entangled-0.1.0/PKG-INFO +112 -0
  3. bound_entangled-0.1.0/README.md +92 -0
  4. bound_entangled-0.1.0/pyproject.toml +37 -0
  5. bound_entangled-0.1.0/setup.cfg +4 -0
  6. bound_entangled-0.1.0/src/bound_entangled.egg-info/PKG-INFO +112 -0
  7. bound_entangled-0.1.0/src/bound_entangled.egg-info/SOURCES.txt +32 -0
  8. bound_entangled-0.1.0/src/bound_entangled.egg-info/dependency_links.txt +1 -0
  9. bound_entangled-0.1.0/src/bound_entangled.egg-info/requires.txt +10 -0
  10. bound_entangled-0.1.0/src/bound_entangled.egg-info/top_level.txt +6 -0
  11. bound_entangled-0.1.0/src/c3_otimes_c3/__init__.py +7 -0
  12. bound_entangled-0.1.0/src/c3_otimes_c3/chessboard.py +57 -0
  13. bound_entangled-0.1.0/src/c3_otimes_c3/cross_hatch.py +25 -0
  14. bound_entangled-0.1.0/src/c3_otimes_c3/horodecki.py +23 -0
  15. bound_entangled-0.1.0/src/c3_otimes_c3/steering.py +42 -0
  16. bound_entangled-0.1.0/src/c3_otimes_c3/upb/__init__.py +0 -0
  17. bound_entangled-0.1.0/src/c3_otimes_c3/upb/parametrized_UPB.py +159 -0
  18. bound_entangled-0.1.0/src/c3_otimes_c3/upb/pyramid_UPB.py +37 -0
  19. bound_entangled-0.1.0/src/c3_otimes_c3/upb/tiles_UPB.py +20 -0
  20. bound_entangled-0.1.0/src/c4_otimes_c4/__init__.py +1 -0
  21. bound_entangled-0.1.0/src/c4_otimes_c4/pianni.py +46 -0
  22. bound_entangled-0.1.0/src/c5_otimes_c5/__init__.py +1 -0
  23. bound_entangled-0.1.0/src/c5_otimes_c5/sn3_grid_state.py +36 -0
  24. bound_entangled-0.1.0/src/cd_otimes_cd/__init__.py +2 -0
  25. bound_entangled-0.1.0/src/cd_otimes_cd/gen_tiles.py +73 -0
  26. bound_entangled-0.1.0/src/cd_otimes_cd/yu_oh.py +145 -0
  27. bound_entangled-0.1.0/src/cm_otimes_cn/__init__.py +4 -0
  28. bound_entangled-0.1.0/src/cm_otimes_cn/gen_tiles.py +80 -0
  29. bound_entangled-0.1.0/src/cm_otimes_cn/generalized_grid_state.py +38 -0
  30. bound_entangled-0.1.0/src/cm_otimes_cn/grid_state.py +42 -0
  31. bound_entangled-0.1.0/src/cm_otimes_cn/random_not_bound_entangled.py +62 -0
  32. bound_entangled-0.1.0/src/utils/__init__.py +2 -0
  33. bound_entangled-0.1.0/src/utils/ketbra.py +14 -0
  34. 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,4 @@
1
+ [egg_info]
2
+ tag_build =
3
+ tag_date = 0
4
+
@@ -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,10 @@
1
+ toqito>=1.3.0
2
+ numpy>=2.4.1
3
+
4
+ [docs]
5
+ mkdocs
6
+ mkdocs-material
7
+ mkdocstrings[python]
8
+
9
+ [test]
10
+ pytest
@@ -0,0 +1,6 @@
1
+ c3_otimes_c3
2
+ c4_otimes_c4
3
+ c5_otimes_c5
4
+ cd_otimes_cd
5
+ cm_otimes_cn
6
+ utils
@@ -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