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) 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] vece: [0.4472136 0.4472136 0.4472136 0.4472136 0.4472136] coeff: [[-0.11036453-0.27042372j -0.13740461+0.286473j 0.28546645-0.20218778j -0.28032333-0.04220928j 0.24262601+0.22834778j 0.12867124+0.3132641j 0.30298384-0.08517033j 0.08063507-0.26669644j -0.30042762-0.17140728j -0.21186253+0.21000995j] [ 0.12867124-0.3132641j 0.30298384+0.08517033j 0.08063507+0.26669644j -0.30042762+0.17140728j -0.21186253-0.21000995j 0.11036453-0.27042372j 0.13740461+0.286473j -0.28546645-0.20218778j 0.28032333-0.04220928j -0.24262601+0.22834778j]]
((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) qweA: [ 1 0 6 0 9 0 48 0] lambda2: 6 coeff: [ 0.47566961 0.31821624 0.04788523 0.60530913 -0.55116669] qweB: [ 1 0 6 39 9 90 48 63] logicalX: XXXXXXX sign: ++ 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]