quantum bettabilitarianism
Project description
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!
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file qbism-0.1.0.5.tar.gz
.
File metadata
- Download URL: qbism-0.1.0.5.tar.gz
- Upload date:
- Size: 265.6 kB
- Tags: Source
- Uploaded using 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
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | ba27271185b0db3bc0587c89466137aa0aa7644a1460ceb51179b32fcba5e261 |
|
MD5 | 02d53eaefdafa7798664ac94a6c4e116 |
|
BLAKE2b-256 | e93dd2bc6b64a8f47bbff023b340e06b486091407b1492b712b00e54bccd9a5d |
File details
Details for the file qbism-0.1.0.5-py3-none-any.whl
.
File metadata
- Download URL: qbism-0.1.0.5-py3-none-any.whl
- Upload date:
- Size: 297.3 kB
- Tags: Python 3
- Uploaded using 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
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 994484c28fa3f2d6f1b0116da197f6235779b96a512b344714c50fe0ebf098a3 |
|
MD5 | a27ed63c1c21e8bdaa4c56b38f64fe2f |
|
BLAKE2b-256 | 813d3597e13484be5e671a9761c6a7915de9c12605f5ecc6d2da9041e524bee6 |