weylchamber.gates module

Quantum gates required for Weyl chamber calculations

Module data:

weylchamber.gates.Qmagic

Transformation matrix to the “magic” Bell basis:

\[\begin{split}\Op{Q} = \frac{1}{\sqrt{2}} \begin{pmatrix} 1 & 0 & 0 & i \\ 0 & i & 1 & 0 \\ 0 & i & -1 & 0 \\ 1 & 0 & 0 & -i \end{pmatrix}\end{split}\]

See “Theorem 1” in Y. Makhlin, Quantum Inf. Process. 1, 243 (2002)

weylchamber.gates.SxSx

\(\Op{\sigma}_x \otimes \Op{\sigma}_x\) gate

weylchamber.gates.SySy

\(\Op{\sigma}_y \otimes \Op{\sigma}_y\) gate

weylchamber.gates.SzSz

\(\Op{\sigma}_z \otimes \Op{\sigma}_z\) gate

Summary

Functions:

bell_basis Two-qubit Bell basis associated with the given canonical basis
gate Two-qubit gate that maps basis to states
mapped_basis Result of applying gate to basis

__all__: Qmagic, SxSx, SySy, SzSz, bell_basis, gate, mapped_basis

Reference

weylchamber.gates.bell_basis(canonical_basis)[source]

Two-qubit Bell basis associated with the given canonical basis

Example

>>> from qutip import ket
>>> canonical_basis = [
...     ket(nums) for nums in [(0, 0), (0, 1), (1, 0), (1, 1)]
... ]
>>> bell = bell_basis(canonical_basis)
>>> _bell = [
...     (     ket((0, 0)) +      ket((1, 1))) / np.sqrt(2),
...     (1j * ket((0, 1)) + 1j * ket((1, 0))) / np.sqrt(2),
...     (     ket((0, 1)) -      ket((1, 0))) / np.sqrt(2),
...     (1j * ket((0, 0)) - 1j * ket((1, 1))) / np.sqrt(2),
... ]
>>> assert (bell[0] - _bell[0]).norm() < 1e-15
>>> assert (bell[1] - _bell[1]).norm() < 1e-15
>>> for (a, b) in zip(bell, _bell):
...     assert (a - b).norm() < 1e-15, (a - b).norm()
weylchamber.gates.gate(basis, states)[source]

Two-qubit gate that maps basis to states

Example

>>> from qutip import ket
>>> basis = [ket(nums) for nums in [(0, 0), (0, 1), (1, 0), (1, 1)]]
>>> states = mapped_basis(qutip.gates.cnot(), basis)
>>> U = gate(basis, states)
>>> assert (U - qutip.gates.cnot()).norm() < 1e-15
weylchamber.gates.mapped_basis(gate, basis)[source]

Result of applying gate to basis

Example

>>> from qutip import ket
>>> basis = [ket(nums) for nums in [(0, 0), (0, 1), (1, 0), (1, 1)]]
>>> states = mapped_basis(qutip.gates.cnot(), basis)
>>> assert (states[0] - ket((0,0))).norm() < 1e-15
>>> assert (states[1] - ket((0,1))).norm() < 1e-15
>>> assert (states[2] - ket((1,1))).norm() < 1e-15  # swap (1, 1) ...
>>> assert (states[3] - ket((1,0))).norm() < 1e-15  # ... and (1, 0)