Introduction of Quantum Error Correction¶
import numpy as np
try:
import numqi
except ImportError:
%pip install numqi
import numqi
((4,4,2)) $C_4$¶
logical states:
$$ \sqrt{2}\left|00_{L}\right\rangle =\left|0000\right\rangle +\left|1111\right\rangle ,\sqrt{2}\left|01_{L}\right\rangle =\left|0101\right\rangle +\left|1010\right\rangle $$
$$ \sqrt{2}\left|10_{L}\right\rangle =\left|0011\right\rangle +\left|1100\right\rangle ,\sqrt{2}\left|11_{L}\right\rangle =\left|0110\right\rangle +\left|1001\right\rangle $$
logical operation:
$$ X_{0L}=XXII,Z_{0L}=ZIZI,X_{1L}=IXIX,Z_{1L}=IIZZ $$
Stabilizer generators:
$$ \langle XXXX,ZZZZ\rangle $$
Shor-Laflamme quantum weight enumerator:
$$ A=[1,0,0,0,3] $$
$$ B=[1,0,18,24,21] $$
code,info = numqi.qec.get_code_subspace('442stab')
for ind0 in range(4):
print(f'logical {ind0}:', np.around(np.sqrt(2)*code[ind0], 2))
for key, value in info.items():
print(f'{key}:', value)
logical 0: [1. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 1.] logical 1: [0. 0. 0. 0. 0. 1. 0. 0. 0. 0. 1. 0. 0. 0. 0. 0.] logical 2: [0. 0. 0. 1. 0. 0. 0. 0. 0. 0. 0. 0. 1. 0. 0. 0.] logical 3: [0. 0. 0. 0. 0. 0. 1. 0. 0. 1. 0. 0. 0. 0. 0. 0.] stab: ['XXXX', 'ZZZZ'] logicalZ: ['ZIZI', 'IIZZ'] logicalX: ['XXII', 'IXIX'] qweA: [1 0 0 0 3] qweB: [ 1 0 18 24 21]
5-qubits code¶
logical states:
$$\begin{align*} 4\left|0_{L}\right\rangle &=\left|00000\right\rangle -\left|00011\right\rangle +\left|00101\right\rangle -\left|00110\right\rangle +\left|01001\right\rangle +\left|01010\right\rangle -\left|01100\right\rangle -\left|01111\right\rangle \\&-\left|10001\right\rangle +\left|10010\right\rangle +\left|10100\right\rangle -\left|10111\right\rangle -\left|11000\right\rangle -\left|11011\right\rangle -\left|11101\right\rangle -\left|11110\right\rangle \end{align*}$$
$$\begin{align*} 4\left|1_{L}\right\rangle &=\left|00001\right\rangle +\left|00010\right\rangle +\left|00100\right\rangle +\left|00111\right\rangle +\left|01000\right\rangle -\left|01011\right\rangle -\left|01101\right\rangle +\left|01110\right\rangle \\&+\left|10000\right\rangle +\left|10011\right\rangle -\left|10101\right\rangle -\left|10110\right\rangle +\left|11001\right\rangle -\left|11010\right\rangle +\left|11100\right\rangle -\left|11111\right\rangle \\&=XXXXX\left|0_{L}\right\rangle \end{align*}$$
logical operation:
$$ X_L=XXXXX, Z_L=ZZZZZ $$
Stabilizer generators:
$$ \langle XZZXI, IXZZX, XIXZZ, ZXIXZ \rangle $$
Shor-Laflamme quantum weight enumerator:
$$ A=[1,0,0,0,15,0] $$
$$ B=[1,0,0,30,15,18] $$
code,info = numqi.qec.get_code_subspace('523')
print('logical 0:', np.around(4*code[0], 2))
print('logical 1:', np.around(4*code[1], 2))
for key, value in info.items():
print(f'{key}:', value)
logical 0: [ 1. 0. 0. -1. 0. 1. -1. 0. 0. 1. 1. 0. -1. 0. 0. -1. 0. -1. 1. 0. 1. 0. 0. -1. -1. 0. 0. -1. 0. -1. -1. 0.] logical 1: [ 0. 1. 1. 0. 1. 0. 0. 1. 1. 0. 0. -1. 0. -1. 1. 0. 1. 0. 0. 1. 0. -1. -1. 0. 0. 1. -1. 0. 1. 0. 0. -1.] stab: ['XZZXI', 'IXZZX', 'XIXZZ', 'ZXIXZ'] logicalZ: ZZZZZ logicalX: XXXXX qweA: [ 1 0 0 0 15 0] qweB: [ 1 0 0 30 15 18]
Let's test stabilizer which should satisfy $S |\psi\rangle=|\psi\rangle$:
stabilizer = numqi.qec.hf_pauli('XZZXI')
print(np.abs(code[0] - stabilizer @ code[0]).max())
0.0
((6,2,3)) Stabilizer code¶
arxiv-link Encoding One Logical Qubit Into Six Physical Qubits
logical states: (different sign from the original paper to make $ZXIIXZ$ as stabilizer instead of $-ZXIIXZ$)
$$ 2\sqrt{2}\left|0_{L}\right\rangle =\left|000000\right\rangle +\left|001111\right\rangle +\left|010010\right\rangle -\left|011101\right\rangle -\left|100111\right\rangle -\left|101000\right\rangle -\left|110101\right\rangle +\left|111010\right\rangle $$
$$ 2\sqrt{2}\left|1_{L}\right\rangle =\left|000101\right\rangle +\left|001010\right\rangle -\left|010111\right\rangle +\left|011000\right\rangle +\left|100010\right\rangle +\left|101101\right\rangle -\left|110000\right\rangle +\left|111111\right\rangle $$
stabilizer generators:
$$ YIZXXY,ZXIIXZ,IZXXXX,ZZZIZI,IIIZIZ $$
logical operation:
$$ X_L=ZIXIXI,Z_L=IZIIZZ $$
Shor-Laflamme quantum weight enumerator:
$$ A=[1,0,1,0,11,16,3] $$
$$ B=[1,0,1,24,35,40,27] $$
code,info = numqi.qec.get_code_subspace('623stab')
print('logical 0:', np.around(2*np.sqrt(2)*code[0], 2))
print('logical 1:', np.around(2*np.sqrt(2)*code[1], 2))
for key, value in info.items():
print(f'{key}:', value)
logical 0: [ 1. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 1. 0. 0. 1. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. -1. 0. 0. 0. 0. 0. 0. 0. 0. 0. -1. -1. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. -1. 0. 0. 0. 0. 1. 0. 0. 0. 0. 0.] logical 1: [ 0. 0. 0. 0. 0. 1. 0. 0. 0. 0. 1. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. -1. 1. 0. 0. 0. 0. 0. 0. 0. 0. 0. 1. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 1. 0. 0. -1. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 1.] stab: ['YIZXXY', 'ZXIIXZ', 'IZXXXX', 'ZZZIZI', 'IIIZIZ'] logicalZ: IZIIZZ logicalX: ZIXIXI qweA: [ 1 0 1 0 11 16 3] qweB: [ 1 0 1 24 35 40 27]
((6,2,3)) SO(5) code¶
arxiv-link Characterizing Quantum Codes via the Coefficients in Knill-Laflamme Conditions
Logical states: for any orthogonal matrix $A\in\mathrm{SO}(5)$, $A^TA=I_5$
$$ A=\left[\begin{array}{ccccc} a_{1} & b_{1} & c_{1} & d_{1} & e_{1}\\ a_{2} & b_{2} & c_{2} & d_{2} & e_{2}\\ a_{3} & b_{3} & c_{3} & d_{3} & e_{3}\\ a_{4} & b_{4} & c_{4} & d_{4} & e_{4}\\ a_{5} & b_{5} & c_{5} & d_{5} & e_{5} \end{array}\right] $$
$$ \sqrt{2}\left|S_{1}\right\rangle =\left|00001\right\rangle +\left|11110\right\rangle ,\sqrt{2}\left|S_{2}\right\rangle =\left|00010\right\rangle +\left|11101\right\rangle ,\sqrt{2}\left|S_{3}\right\rangle =\left|00100\right\rangle +\left|11011\right\rangle , $$ $$ \sqrt{2}\left|S_{4}\right\rangle =\left|01000\right\rangle +\left|10111\right\rangle ,\sqrt{2}\left|S_{5}\right\rangle =\left|10000\right\rangle +\left|01111\right\rangle $$
$$ \left|0_{L}\right\rangle =\frac{1}{2}\sum_{j=1}^{5}\left((a_{j}+ib_{j})\left|0\right\rangle +(c_{j}+id_{j})\left|1\right\rangle \right)\otimes\left|S_{j}\right\rangle $$
$$ \left|1_{L}\right\rangle =\frac{1}{2}\sum_{j=1}^{5}\left((c_{j}-id_{j})\left|0\right\rangle +(ib_{j}-a_{j})\left|1\right\rangle \right)\otimes\left|S_{j}\right\rangle $$
non-CWS code
Shor-Laflamme quantum weight enumerator:
$$ t=e_{1}^{4}+e_{2}^{4}+e_{3}^{4}+e_{4}^{4}+e_{5}^{4} $$
$$ A=\frac{1}{2}\left[2,0,1,1,23,31,6\right]+\frac{t}{2}\left[0,0,1,-1,-1,1,0\right] $$
$$ B=\frac{1}{2}\left[2,0,1,46,74,82,51\right]+\frac{t}{2}\left[0,0,1,2,-4,-2,3\right] $$
# if don't specify vece, a random one will be used
code,info = numqi.qec.get_code_subspace('623-SO5', vece=np.array([1,1,1,1,1])/np.sqrt(5))
print('code.shape:', code.shape)
for key in (set(info.keys())-{'basis'}):
print(f'{key}:', info[key])
code.shape: (2, 64) phase: 0 qweA: [ 1. 0. 0.6 0.4 11.4 15.6 3. ] qweB: [ 1. 0. 0.6 23.2 36.6 40.8 25.8] lambda_ai: [ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. -0.1 0. 0. 0. -0.1 0. 0. 0. 0.2 -0.1 0. 0. 0. -0.1 0. 0. 0. 0.2 -0.1 0. 0. 0. -0.1 0. 0. 0. 0.2 -0.1 0. 0. 0. -0.1 0. 0. 0. 0.2 -0.1 0. 0. 0. -0.1 0. 0. 0. 0.2 -0.1 0. 0. 0. -0.1 0. 0. 0. 0.2 -0.1 0. 0. 0. -0.1 0. 0. 0. 0.2 -0.1 0. 0. 0. -0.1 0. 0. 0. 0.2 -0.1 0. 0. 0. -0.1 0. 0. 0. 0.2 -0.1 0. 0. 0. -0.1 0. 0. 0. 0.2] matO: [[ 0.72441994 0.06757354 -0.18988845 -0.48434693 0.4472136 ] [ 0.25369477 -0.0615621 0.6820565 0.51637971 0.4472136 ] [-0.08891704 0.13931976 -0.67441573 0.56377938 0.4472136 ] [-0.50629256 0.62075828 0.20795198 -0.33923881 0.4472136 ] [-0.3829051 -0.76608948 -0.0257043 -0.25657336 0.4472136 ]] vece: [0.4472136 0.4472136 0.4472136 0.4472136 0.4472136] coeff: [[ 0.36220997+0.03378677j 0.12684738-0.03078105j -0.04445852+0.06965988j -0.25314628+0.31037914j -0.19145255-0.38304474j -0.09494423-0.24217346j 0.34102825+0.25818986j -0.33720786+0.28188969j 0.10397599-0.16961941j -0.01285215-0.12828668j] [-0.09494423+0.24217346j 0.34102825-0.25818986j -0.33720786-0.28188969j 0.10397599+0.16961941j -0.01285215+0.12828668j -0.36220997+0.03378677j -0.12684738-0.03078105j 0.04445852+0.06965988j 0.25314628+0.31037914j 0.19145255-0.38304474j]]
((6,4,2)) $C_6$¶
doi-link Quantum computing with realistically noisy devices
logical states:
$$ 2\left|00_{L}\right\rangle =\left|000000\right\rangle +\left|011110\right\rangle +\left|100111\right\rangle +\left|111001\right\rangle ,2\left|01_{L}\right\rangle =\left|001011\right\rangle +\left|010101\right\rangle +\left|101100\right\rangle +\left|110010\right\rangle $$
$$ 2\left|10_{L}\right\rangle =\left|000110\right\rangle +\left|011000\right\rangle +\left|100001\right\rangle +\left|111111\right\rangle ,2\left|01_{L}\right\rangle =\left|001101\right\rangle +\left|010011\right\rangle +\left|101010\right\rangle +\left|110100\right\rangle $$
Stabilizer generators:
$$ XIIXXX, XXXIIX, ZIIZZZ, ZZZIIZ $$
logical operation:
$$ X_{0L}=IXXIII,Z_{0L}=IIZZIZ,X_{1L}=XIXXII,Z_{1L}=IIIZZI $$
Shor-Laflamme quantum weight enumerator:
$$ A=[1,0,0,0,9,0,6] $$
$$ B=[1,0,9,24,99,72,51] $$
code,info = numqi.qec.get_code_subspace('642stab')
print('code.shape:', code.shape)
for key, value in info.items():
print(f'{key}:', value)
code.shape: (4, 64) stab: ['XIIXXX', 'XXXIIX', 'ZIIZZZ', 'ZZZIIZ'] logicalZ: ['IIZZIZ', 'IIIZZI'] logicalX: ['IXXIII', 'XIXXII'] qweA: [1 0 0 0 9 0 6] qweB: [ 1 0 9 24 99 72 51]
Steane code¶
logical states:
$$ 2\sqrt{2}\left|0_{L}\right\rangle =\left|0000000\right\rangle +\left|1010101\right\rangle +\left|0110011\right\rangle +\left|1100110\right\rangle +\left|0001111\right\rangle +\left|1011010\right\rangle +\left|0111100\right\rangle +\left|1101001\right\rangle $$
$$ 2\sqrt{2}\left|1_{L}\right\rangle =\left|1111111\right\rangle +\left|0101010\right\rangle +\left|1001100\right\rangle +\left|0011001\right\rangle +\left|1110000\right\rangle +\left|0100101\right\rangle +\left|1000011\right\rangle +\left|0010110\right\rangle $$
stabilizer generators:
$$ IIIXXXX, IXXIIXX, XIXIXIX, IIIZZZZ, IZZIIZZ, ZIZIZIZ $$
logical operation:
$$ X_L=XXXXXXX,Z_L=ZZZZZZZ $$
Shor-Laflamme quantum weight enumerator:
$$ A=[1,0,0,0,21,0,42,0] $$
$$ B=[1,0,0,21,21,126,42,45] $$
code,info = numqi.qec.get_code_subspace('steane')
print('code.shape:', code.shape)
for key, value in info.items():
print(f'{key}:', value)
code.shape: (2, 128) stab: ['IIXIXXX', 'IXIXXXI', 'XIIXIXX', 'IIZIZZZ', 'IZIZZZI', 'ZIIZIZZ'] logicalZ: ZZZZZZZ logicalX: XXXXXXX qweA: [ 1 0 0 0 21 0 42 0] qweB: [ 1 0 0 21 21 126 42 45]
permutate the Steane code into the ordering (0,1,3,2,5,6,4)
, we can get a cyclic-symmetric code
logical states:
$$ 2\sqrt{2}\left|0_{L}\right\rangle =\left|0000000\right\rangle +\left|1100101\right\rangle +\left|0101110\right\rangle +\left|0010111\right\rangle +\left|1001011\right\rangle +\left|1110010\right\rangle +\left|0111001\right\rangle +\left|1011100\right\rangle $$
$$ 2\sqrt{2}\left|1_{L}\right\rangle =\left|1111111\right\rangle +\left|0011010\right\rangle +\left|1010001\right\rangle +\left|1101000\right\rangle +\left|0110100\right\rangle +\left|0001101\right\rangle +\left|1000110\right\rangle +\left|0100011\right\rangle $$
stabilizer generators:
$$ IIXIXXX, IXIXXXI, XIIXIXX, IIZIZZZ, IZIZZZI, ZIIZIZZ $$
code,info = numqi.qec.get_code_subspace('steane', cyclic=True)
print('code.shape:', code.shape)
for key, value in info.items():
print(f'{key}:', value)
code.shape: (2, 128) stab: ['IIXIXXX', 'IXIXXXI', 'XIIXIXX', 'IIZIZZZ', 'IZIZZZI', 'ZIIZIZZ'] logicalZ: ZZZZZZZ logicalX: XXXXXXX qweA: [ 1 0 0 0 21 0 42 0] qweB: [ 1 0 0 21 21 126 42 45]
((7,2,3)) Bare code¶
arxiv-link Fault Tolerance with Bare Ancillae for a [[7,1,3]]
Code
logical states (oops)
stabilizer generators:
$$ XIIIXII, IXIIXII, IIXIIXI, IIIXIIX, IIZZIYY, ZZZXZZI $$
logical operation:
$$ X_L=IXXXIII, Z_L=ZZIIZII$$
Shor-Laflamme quantum weight enumerator:
$$ A=[1,0,5,0,11,0,47,0] $$
$$ B=[1,0,5,36,11,96,47,60] $$
code,info = numqi.qec.get_code_subspace('723bare')
print('code.shape:', code.shape)
for key, value in info.items():
print(f'{key}:', value)
code.shape: (2, 128) stab: ['XIIIXII', 'IXIIXII', 'IIXIIXI', 'IIIXIIX', 'IIZZIYY', 'ZZZXZZI'] logicalZ: ZZIIZII logicalX: IXXXIII qweA: [ 1 0 5 0 11 0 47 0] qweB: [ 1 0 5 36 11 96 47 60]
((7,2,3)) cyclic code¶
arxiv-link Characterizing Quantum Codes via the Coefficients in Knill-Laflamme Conditions
Logical states: for any real number $\lambda^*\in [0,\sqrt{7}]$
$$ \left|\left\{ 0000000\right\} \right\rangle =\left|0000000\right\rangle $$
$$ \left|\left\{ 0000011\right\} \right\rangle =\frac{1}{\sqrt{7}}\left (|0000011\rangle + \text{cyc.} \right), \left|\left\{ 0000101\right\} \right\rangle =\frac{1}{\sqrt{7}}\left (|0000101\rangle + \text{cyc.} \right), \left|\left\{ 0001001\right\} \right\rangle =\frac{1}{\sqrt{7}}\left (|0001001\rangle + \text{cyc.} \right) $$
$$ \left|\left\{ 0001111\right\} \right\rangle =\frac{1}{\sqrt{7}}\left (|0001111\rangle + \text{cyc.} \right),\left|\left\{ 0011011\right\} \right\rangle =\frac{1}{\sqrt{7}}\left (|0011011\rangle + \text{cyc.} \right),\left|\left\{ 0011101\right\} \right\rangle =\frac{1}{\sqrt{7}}\left (|0011101\rangle + \text{cyc.} \right) $$
$$ \left|\left\{ 0101011\right\} \right\rangle =\frac{1}{\sqrt{7}}\left (|0101011\rangle + \text{cyc.} \right),\left|\left\{ 0010111\right\} \right\rangle =\frac{1}{\sqrt{7}}\left (|0010111\rangle + \text{cyc.} \right),\left|\left\{ 0111111\right\} \right\rangle =\frac{1}{\sqrt{7}}\left (|0111111\rangle + \text{cyc.} \right) $$
$$ \begin{aligned} \left|0_{L}\right\rangle =& \ c_{0}\left|\{0000000\}\right\rangle + \frac{c_{1}}{\sqrt{3}} \Big( \left|\{0000011\}\right\rangle + \left|\{0000101\}\right\rangle + \left|\{0001001\}\right\rangle \Big)\\ &+ c_{2}\left|\{0010111\}\right\rangle + \frac{c_{3}}{2} \Big( \left|\{0001111\}\right\rangle+ \left|\{0011011\}\right\rangle + \left|\{0011101\}\right\rangle + \left|\{0101011\}\right\rangle \Big)+ c_{4}\left|\{0111111\}\right\rangle \end{aligned} $$
$$ \left|1_L\right\rangle = \ X^{\otimes 7}\left|0_L\right\rangle $$
with coefficients being
$$ c_{0} = \frac{\sqrt{\sqrt{7}\lambda^{*} + 8}}{8},\;c_{1} = -\frac{\sqrt{\sqrt{7}\lambda^{*}}}{8},\; c_{4} = -\sqrt{3}c_{1},\; c_{3} = \frac{2}{5} \left( \sqrt{7}c_{0} \pm \sqrt{7c_{0}^{2} - \frac{15\sqrt{7}\lambda^{*}}{64}} \right),\; c_{2} = -2c_{3} + \sqrt{7}c_{0} $$
or
$$ c_{0} = \frac{\sqrt{\sqrt{7}\lambda^{*} + 8}}{8},\; c_{1} = \frac{\sqrt{\sqrt{7}\lambda^{*}}}{8},\; c_{4} = -\sqrt{3}c_{1},\; c_{3} = \frac{2}{5} \left( \sqrt{7}c_{0} \pm \sqrt{7c_{0}^{2} - \frac{15\sqrt{7}\lambda^{*}}{64}} \right),\; c_{2} = -2c_{3} + \sqrt{7}c_{0} $$
logical operations:
$$ X_L = X^{\otimes 7},\; Z_L = Z^{\otimes 7} $$
Shor-Laflamme quantum weight enumerator:
$$ A=[1, 0, \lambda^{*2}, 0, 21 - 2\lambda^{*2}, 0, 42+\lambda^{*2}, 0] $$
$$ B=[1, 0, \lambda^{*2}, 21 + 3\lambda^{*2}, 21-2\lambda^{*2}, 126-6\lambda^{*2}, 42+\lambda^{*2}, 45+3\lambda^{*2}] $$
When $\lambda^*=0$, the code becomes Steane code. When $\lambda^*=\sqrt{7}$, the code becomes permutation-symmetric code (Beth's code below).
code,info = numqi.qec.get_code_subspace('723cyclic', lambda2=6)
print('code.shape:', code.shape)
for key in (set(info.keys())-{'basis'}):
print(f'{key}:', info[key])
code.shape: (2, 128) coeff: [ 0.47566961 0.31821624 0.04788523 0.60530913 -0.55116669] lambda2: 6 sign: ++ logicalX: XXXXXXX qweA: [ 1 0 6 0 9 0 48 0] qweB: [ 1 0 6 39 9 90 48 63] lambda_ai: [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.3086067 0. 0. 0. 0.3086067 0. 0. 0. 0.3086067 0.3086067 0. 0. 0. 0.3086067 0. 0. 0. 0.3086067 0.3086067 0. 0. 0. 0.3086067 0. 0. 0. 0.3086067 0.3086067 0. 0. 0. 0.3086067 0. 0. 0. 0.3086067 0.3086067 0. 0. 0. 0.3086067 0. 0. 0. 0.3086067 0.3086067 0. 0. 0. 0.3086067 0. 0. 0. 0.3086067 0.3086067 0. 0. 0. 0.3086067 0. 0. 0. 0.3086067 0.3086067 0. 0. 0. 0.3086067 0. 0. 0. 0.3086067 0.3086067 0. 0. 0. 0.3086067 0. 0. 0. 0.3086067 0.3086067 0. 0. 0. 0.3086067 0. 0. 0. 0.3086067 0.3086067 0. 0. 0. 0.3086067 0. 0. 0. 0.3086067 0.3086067 0. 0. 0. 0.3086067 0. 0. 0. 0.3086067 0.3086067 0. 0. 0. 0.3086067 0. 0. 0. 0.3086067 0.3086067 0. 0. 0. 0.3086067 0. 0. 0. 0.3086067 0.3086067 0. 0. 0. 0.3086067 0. 0. 0. 0.3086067 0.3086067 0. 0. 0. 0.3086067 0. 0. 0. 0.3086067 0.3086067 0. 0. 0. 0.3086067 0. 0. 0. 0.3086067 0.3086067 0. 0. 0. 0.3086067 0. 0. 0. 0.3086067 0.3086067 0. 0. 0. 0.3086067 0. 0. 0. 0.3086067 0.3086067 0. 0. 0. 0.3086067 0. 0. 0. 0.3086067 0.3086067 0. 0. 0. 0.3086067 0. 0. 0. 0.3086067] logicalZ: ZZZZZZZ
((7,2,3)) Permutation-symmetric code¶
arxiv-link Permutationally Invariant Codes for Quantum Error Correction
logical states:
$$ D_{n,k}=\binom{n}{k}^{-1/2}\sum_{\sigma\in\mathrm{Sym}_{n}}\sigma\left|0\right\rangle ^{\otimes n-k}\otimes\left|1\right\rangle ^{\otimes k} $$
$$ 8\left|0_{L}\right\rangle = \sqrt{15}D_{7,0} - \sqrt{7}D_{7,2} + \sqrt{21}D_{7,4} + \sqrt{21}D_{7,6} $$
or (sign=-
)
$$ 8\left|0_{L}\right\rangle =\sqrt{15}D_{7,0}+\sqrt{7}D_{7,2}+\sqrt{21}D_{7,4}-\sqrt{21}D_{7,6} $$
$$ |1_{L}\rangle = X^{\otimes 7}|0_{L}\rangle $$
logical operation:
$$ X_L=X^{\otimes 7},Z_L=Z^{\otimes 7} $$
Shor-Laflamme quantum weight enumerator:
$$ A=[1, 0, 7, 0, 7, 0, 49, 0] $$
$$ B=[1, 0, 7, 42, 7, 84, 49, 66] $$
code,info = numqi.qec.get_code_subspace('723permutation', sign='+')
print('code.shape:', code.shape)
for key, value in info.items():
print(f'{key}:', value)
code.shape: (2, 128) logicalX: XXXXXXX logicalZ: ZZZZZZZ qweA: [ 1 0 7 0 7 0 49 0] qweB: [ 1 0 7 42 7 84 49 66]
((8,8,3)) Stabilizer code¶
arxiv-link Simple Quantum Error Correcting Codes, eq(25)
Shor-Laflamme quantum weight enumerator:
$$ A=[1,0,0,0,0,0,28,0,3] $$
$$ B=[1,0,0,56,210,336,728,504,213] $$
code, info = numqi.qec.get_code_subspace('883')
print('code.shape:', code.shape)
for key, value in info.items():
print(f'{key}:', value)
code.shape: (8, 256) qweA: [ 1 0 0 0 0 0 28 0 3] qweB: [ 1 0 0 56 210 336 728 504 213]
Shor code¶
logical states:
$$ 2\sqrt{2}\left|0_{L}\right\rangle =\left(\left|000\right\rangle +\left|111\right\rangle \right)^{\otimes3} $$
$$ 2\sqrt{2}\left|1_{L}\right\rangle =\left(\left|000\right\rangle -\left|111\right\rangle \right)^{\otimes3} $$
Stabilizer generators:
$$ ZZIIIIIII, IZZIIIIII, IIIZZIIII, IIIIZZIII, IIIIIIZZI, IIIIIIIZZ, XXXXXXIII, IIIXXXXXX $$
logical operation:
$$ X_L=XXXIIIIII,Z_L=ZIIZIIZII $$
Shor-Laflamme quantum weight enumerator:
$$ A=[1,0,9,0,27,0,75,0,144,0] $$
$$ B=[1,0,9,39,27,207,75,333,144,189] $$
code, info = numqi.qec.get_code_subspace('shor')
print('code.shape:', code.shape)
for key, value in info.items():
print(f'{key}:', value)
code.shape: (2, 512) stab: ['ZZIIIIIII', 'IZZIIIIII', 'IIIZZIIII', 'IIIIZZIII', 'IIIIIIZZI', 'IIIIIIIZZ', 'XXXXXXIII', 'IIIXXXXXX'] logicalZ: XXXIIIIII logicalX: ZIIZIIZII qweA: [ 1 0 9 0 27 0 75 0 144 0] qweB: [ 1 0 9 39 27 207 75 333 144 189]