QBism
python tools for the budding quantum bettabilitarian
Installation
pip install qbism
Note that qbism relies on qutip!
Usage
Let's start off with a random density matrix:
from qbism import *
import qutip as qt
import numpy as np
d = 2
rho = qt.rand_dm(d)
We construct a random Weyl-Heisenberg IC-POVM, and get the magical quantum coherence matrix. We find the probabilities with respect to this POVM.
povm = weyl_heisenberg_povm(qt.rand_ket(d))
phi = povm_phi(povm)
p = dm_probs(rho, povm)
print("probs: %s" % p)
probs: [0.20215649 0.20215649 0.29784351 0.29784351]
We can compare the classical probabilities (for a Von Neumann measurement after a POVM measurement whose outcome we are ignorant of) to the the quantum probabilities (in the case where we go directly to the Von Neumann measurement):
H = qt.rand_herm(d)
vn = [v*v.dag() for v in H.eigenstates()[1]]
classical_probs = conditional_probs(vn, povm) @ p
quantum_probs = conditional_probs(vn, povm) @ phi @ p
print("classsical probs: %s" % classical_probs)
print("quantum probs: %s" % quantum_probs)
post_povm_rho = sum([(e*rho).tr()*(e/e.tr()) for e in povm])
assert np.allclose(classical_probs, [(v*post_povm_rho).tr() for v in vn])
assert np.allclose(quantum_probs, [(v*rho).tr() for v in vn])
classsical probs: [0.55802905 0.44197095]
quantum probs: [0.65778315 0.34221685]
Now let's get a SIC-POVM and explore time evolution:
sic = sic_povm(d)
sic_phi = povm_phi(sic)
sic_p = dm_probs(rho, sic)
U = qt.rand_unitary(d)
evolved_sic = [U*e*U.dag() for e in sic]
R = conditional_probs(evolved_sic, sic).T
time_evolved_sic_p = R @ sic_phi @ sic_p
print("time evolved probs: %s" % time_evolved_sic_p)
assert np.allclose(dm_probs(U*rho*U.dag(), sic), time_evolved_sic_p)
time evolved probs: [0.20445193 0.20445193 0.29554807 0.29554807]
We could also use:
time_evolved_sic_p2 = povm_map([U], sic) @ sic_phi @ sic_p
assert np.allclose(time_evolved_sic_p, time_evolved_sic_p2)
Finally, let's check out partial traces:
entangled = qt.rand_dm(4)
entangled.dims = [[2,2],[2,2]]
povm2 = weyl_heisenberg_povm(qt.rand_ket(2))
povm4 = apply_dims(weyl_heisenberg_povm(qt.rand_ket(4)), [2,2])
phi = povm_phi(povm4)
p = dm_probs(entangled, povm4)
ptrA = povm_map(partial_trace_kraus(0, [2,2]), povm4, povm2)
ptrB = povm_map(partial_trace_kraus(1, [2,2]), povm4, povm2)
assert np.allclose(dm_probs(entangled.ptrace(0), povm2), ptrA @ phi @ p)
assert np.allclose(dm_probs(entangled.ptrace(1), povm2), ptrB @ phi @ p)
Check out the tutorial for the full story!
Thanks to nbdev!
Metadata
Release files for qbism 0.0.9
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| qbism-0.0.9.tar.gz | 263.9 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| qbism-0.0.9-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 558.3 kB
Release files / qbism-0.0.9.tar.gz
| Download URL | qbism-0.0.9.tar.gz |
|---|---|
| Size | 263.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
5cc8d1e7991c72aecb42ea44a6d728abeedaffbd02239a40ec9462114b3d2361
|
|
BLAKE2b-256 checksum How to use checksums |
c705ddc58d4e040dd86e291ed6aa2e4e53e56a3cb462f114a17321e9044ce007
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/3.2.0 pkginfo/1.6.1 requests/2.24.0 setuptools/50.3.2 requests-toolbelt/0.9.1 tqdm/4.51.0 CPython/3.8.5
|
Release files / qbism-0.0.9-py3-none-any.whl
| Download URL | qbism-0.0.9-py3-none-any.whl |
|---|---|
| Size | 294.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
55dc227b3d0b5d96e5b6ba630e0ce8c4d1d035890d89ffab83fd9bd958ef8a39
|
|
BLAKE2b-256 checksum How to use checksums |
446a48b0dac82067b6828671d645681bb1859c9e3db1add340c7360341056e14
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/3.2.0 pkginfo/1.6.1 requests/2.24.0 setuptools/50.3.2 requests-toolbelt/0.9.1 tqdm/4.51.0 CPython/3.8.5
|