{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Steane Encoding\n",
"\n",
"This notebook demonstrates the construction and simulation of a logical Steane encoder circuit. Steane code was introduced by Andrew Steane in 1996 \\[1\\]. In surface code, this logical circuit can be used to prepare the magic state for logical S gate \\[2\\]. "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Construction\n",
"\n",
"`tqec` provides builtin functions `tqec.gallery.steane_encoding` to construct it."
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
""
]
},
"execution_count": 1,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from tqec.gallery.steane_encoding import steane_encoding\n",
"\n",
"graph = steane_encoding()\n",
"graph.view_as_html()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We can use the `find_correlation_surfaces()` method to identify all correlation surfaces, and then visualize them using the `view_as_html()` method. In this case, there are a total of seven correlation surfaces. For simplicity, only two are shown here."
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"7"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"correlation_surfaces = graph.find_correlation_surfaces()\n",
"len(correlation_surfaces)"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
""
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"graph.view_as_html(\n",
" pop_faces_at_direction=\"-Y\",\n",
" show_correlation_surface=correlation_surfaces[0],\n",
")"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
""
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"graph.view_as_html(\n",
" pop_faces_at_direction=\"-Y\",\n",
" show_correlation_surface=correlation_surfaces[1],\n",
")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Circuit\n",
"\n",
"Here we show an example circuit of Steane encoding circuit with $d=3$ that is initialized and measured in X basis. The circuit can be downloaded [here](../media/gallery/steane_encoding/circuit.stim) or viewed in [Crumble](https://algassert.com/crumble#circuit=Q(-8,-4)0;Q(-8,0)1;Q(-8,4)2;Q(-8,8)3;Q(-8,12)4;Q(-7,-5)5;Q(-7,-3)6;Q(-7,-1)7;Q(-7,1)8;Q(-7,3)9;Q(-7,5)10;Q(-7,7)11;Q(-7,9)12;Q(-7,11)13;Q(-7,13)14;Q(-6,-6)15;Q(-6,-4)16;Q(-6,-2)17;Q(-6,0)18;Q(-6,2)19;Q(-6,4)20;Q(-6,6)21;Q(-6,8)22;Q(-6,10)23;Q(-6,12)24;Q(-6,14)25;Q(-5,-7)26;Q(-5,-5)27;Q(-5,-3)28;Q(-5,-1)29;Q(-5,1)30;Q(-5,3)31;Q(-5,5)32;Q(-5,7)33;Q(-5,9)34;Q(-5,11)35;Q(-5,13)36;Q(-4,-8)37;Q(-4,-6)38;Q(-4,-4)39;Q(-4,-2)40;Q(-4,0)41;Q(-4,2)42;Q(-4,4)43;Q(-4,6)44;Q(-4,8)45;Q(-4,10)46;Q(-4,12)47;Q(-3,-7)48;Q(-3,-5)49;Q(-3,-3)50;Q(-3,-1)51;Q(-3,1)52;Q(-3,3)53;Q(-3,5)54;Q(-3,7)55;Q(-3,9)56;Q(-3,11)57;Q(-3,13)58;Q(-2,-6)59;Q(-2,-4)60;Q(-2,-2)61;Q(-2,2)62;Q(-2,6)63;Q(-2,10)64;Q(-2,12)65;Q(-2,14)66;Q(-1,-7)67;Q(-1,-5)68;Q(-1,-3)69;Q(-1,9)70;Q(-1,11)71;Q(-1,13)72;Q(0,-8)73;Q(0,-6)74;Q(0,-4)75;Q(0,0)76;Q(0,4)77;Q(0,8)78;Q(0,10)79;Q(0,12)80;Q(1,-7)81;Q(1,-5)82;Q(1,-3)83;Q(1,-1)84;Q(1,1)85;Q(1,3)86;Q(1,5)87;Q(1,9)88;Q(1,11)89;Q(1,13)90;Q(2,-6)91;Q(2,-4)92;Q(2,-2)93;Q(2,0)94;Q(2,2)95;Q(2,4)96;Q(2,10)97;Q(2,12)98;Q(2,14)99;Q(3,-7)100;Q(3,-5)101;Q(3,-3)102;Q(3,-1)103;Q(3,1)104;Q(3,3)105;Q(3,5)106;Q(3,9)107;Q(3,11)108;Q(3,13)109;Q(4,-8)110;Q(4,-6)111;Q(4,-4)112;Q(4,-2)113;Q(4,0)114;Q(4,2)115;Q(4,4)116;Q(4,6)117;Q(4,8)118;Q(4,10)119;Q(4,12)120;Q(5,-7)121;Q(5,-5)122;Q(5,-3)123;Q(5,-1)124;Q(5,1)125;Q(5,3)126;Q(5,5)127;Q(5,9)128;Q(5,11)129;Q(5,13)130;Q(6,-6)131;Q(6,-4)132;Q(6,-2)133;Q(6,0)134;Q(6,2)135;Q(6,4)136;Q(6,10)137;Q(6,12)138;Q(6,14)139;Q(7,-7)140;Q(7,-5)141;Q(7,-3)142;Q(7,1)143;Q(7,3)144;Q(7,5)145;Q(7,9)146;Q(7,11)147;Q(7,13)148;Q(8,-8)149;Q(8,-6)150;Q(8,-4)151;Q(8,-2)152;Q(8,2)153;Q(8,4)154;Q(8,6)155;Q(8,8)156;Q(8,10)157;Q(8,12)158;Q(9,-7)159;Q(9,-5)160;Q(9,-3)161;Q(9,-1)162;Q(9,1)163;Q(9,3)164;Q(9,5)165;Q(9,7)166;Q(9,9)167;Q(9,11)168;Q(9,13)169;Q(10,-6)170;Q(10,-4)171;Q(10,-2)172;Q(10,0)173;Q(10,2)174;Q(10,4)175;Q(10,6)176;Q(10,8)177;Q(10,10)178;Q(10,12)179;Q(10,14)180;Q(11,-7)181;Q(11,-5)182;Q(11,-3)183;Q(11,-1)184;Q(11,1)185;Q(11,3)186;Q(11,5)187;Q(11,7)188;Q(11,9)189;Q(11,11)190;Q(11,13)191;Q(12,-8)192;Q(12,-6)193;Q(12,-4)194;Q(12,-2)195;Q(12,0)196;Q(12,2)197;Q(12,4)198;Q(12,6)199;Q(12,8)200;Q(12,10)201;Q(12,12)202;Q(13,-7)203;Q(13,-5)204;Q(13,-3)205;Q(13,-1)206;Q(13,1)207;Q(13,3)208;Q(13,5)209;Q(13,7)210;Q(13,9)211;Q(13,11)212;Q(13,13)213;Q(14,-4)214;Q(14,0)215;Q(14,2)216;Q(14,4)217;Q(14,8)218;Q(14,12)219;Q(15,1)220;Q(15,3)221;Q(15,5)222;Q(16,2)223;Q(16,4)224;Q(16,6)225;Q(17,1)226;Q(17,3)227;Q(17,5)228;Q(18,0)229;Q(18,2)230;Q(18,4)231;Q(19,1)232;Q(19,3)233;Q(19,5)234;Q(20,2)235;Q(20,4)236;Q(20,6)237;Q(21,3)238;Q(21,5)239;Q(22,4)240;RX_77_85_86_87_94_95_96_104_105_106_115_116_117_125_126_127_135_150_157_159_160_161_167_168_169_170_171_172_178_179_180_181_182_183_189_190_191_192_193_194_200_201_202_203_204_205_211_212_213_214_219;TICK;CX_96_86_115_104_117_106_171_160_179_168_193_181_201_189_214_204_219_212;CZ_95_85_116_105_135_125_170_159_172_161_178_167_180_169_194_182_202_190;TICK;CX_96_105_115_125_117_127_150_159_157_167;CZ_77_86_170_181_172_183_178_189_180_191_194_204_202_212;TICK;CX_94_85_96_87_115_105_171_161_179_169_193_182_201_190_214_205_219_213;CZ_95_86_116_106_135_126_170_160_178_168_192_181_194_183_200_189_202_191;TICK;CX_171_182_179_190_193_203_201_211;CZ_95_104_116_126;TICK;CX_94_104_96_106_115_126_150_160_157_168_171_183_179_191_193_204_201_212;CZ_77_87_95_105_116_127_170_182_178_190_192_203_194_205_200_211_202_213;TICK;MX_77_94_95_96_115_116_117_135_150_157_170_171_172_178_179_180_192_193_194_200_201_202_214_219;DT(2,0,0)rec[-23];DT(2,4,0)rec[-21];DT(4,2,0)rec[-20];DT(4,6,0)rec[-18];DT(8,-6,0)rec[-16];DT(8,10,0)rec[-15];DT(10,-4,0)rec[-13];DT(10,12,0)rec[-10];DT(12,-6,0)rec[-7];DT(12,10,0)rec[-4];DT(14,-4,0)rec[-2];DT(14,12,0)rec[-1];TICK;RX_77_94_95_96_115_116_117_135_150_157_170_171_172_178_179_180_192_193_194_200_201_202_214_219;TICK;CX_96_86_115_104_117_106_171_160_179_168_193_181_201_189_214_204_219_212;CZ_95_85_116_105_135_125_170_159_172_161_178_167_180_169_194_182_202_190;TICK;CX_96_105_115_125_117_127_150_159_157_167;CZ_77_86_170_181_172_183_178_189_180_191_194_204_202_212;TICK;CX_94_85_96_87_115_105_171_161_179_169_193_182_201_190_214_205_219_213;CZ_95_86_116_106_135_126_170_160_178_168_192_181_194_183_200_189_202_191;TICK;CX_171_182_179_190_193_203_201_211;CZ_95_104_116_126;TICK;CX_94_104_96_106_115_126_150_160_157_168_171_183_179_191_193_204_201_212;CZ_77_87_95_105_116_127_170_182_178_190_192_203_194_205_200_211_202_213;TICK;MX_77_94_95_96_115_116_117_135_150_157_170_171_172_178_179_180_192_193_194_200_201_202_214_219;DT(0,4,1)rec[-24]_rec[-48];DT(2,0,1)rec[-23]_rec[-47];DT(2,2,1)rec[-22]_rec[-46];DT(2,4,1)rec[-21]_rec[-45];DT(4,2,1)rec[-20]_rec[-44];DT(4,4,1)rec[-19]_rec[-43];DT(4,6,1)rec[-18]_rec[-42];DT(6,2,1)rec[-17]_rec[-41];DT(8,-6,1)rec[-16]_rec[-40];DT(8,10,1)rec[-15]_rec[-39];DT(10,-6,1)rec[-14]_rec[-38];DT(10,-4,1)rec[-13]_rec[-37];DT(10,-2,1)rec[-12]_rec[-36];DT(10,10,1)rec[-11]_rec[-35];DT(10,12,1)rec[-10]_rec[-34];DT(10,14,1)rec[-9]_rec[-33];DT(12,-8,1)rec[-8]_rec[-32];DT(12,-6,1)rec[-7]_rec[-31];DT(12,-4,1)rec[-6]_rec[-30];DT(12,8,1)rec[-5]_rec[-29];DT(12,10,1)rec[-4]_rec[-28];DT(12,12,1)rec[-3]_rec[-27];DT(14,-4,1)rec[-2]_rec[-26];DT(14,12,1)rec[-1]_rec[-25];TICK;RX_77_94_95_96_115_116_117_135_150_157_170_171_172_178_179_180_192_193_194_200_201_202_214_219;TICK;CX_96_86_115_104_117_106_171_160_179_168_193_181_201_189_214_204_219_212;CZ_95_85_116_105_135_125_170_159_172_161_178_167_180_169_194_182_202_190;TICK;CX_96_105_115_125_117_127_150_159_157_167;CZ_77_86_170_181_172_183_178_189_180_191_194_204_202_212;TICK;CX_94_85_96_87_115_105_171_161_179_169_193_182_201_190_214_205_219_213;CZ_95_86_116_106_135_126_170_160_178_168_192_181_194_183_200_189_202_191;TICK;CX_171_182_179_190_193_203_201_211;CZ_95_104_116_126;TICK;CX_94_104_96_106_115_126_150_160_157_168_171_183_179_191_193_204_201_212;CZ_77_87_95_105_116_127_170_182_178_190_192_203_194_205_200_211_202_213;TICK;MX_77_94_95_96_115_116_117_135_150_157_170_171_172_178_179_180_192_193_194_200_201_202_214_219;DT(0,4,2)rec[-24]_rec[-48];DT(2,0,2)rec[-23]_rec[-47];DT(2,2,2)rec[-22]_rec[-46];DT(2,4,2)rec[-21]_rec[-45];DT(4,2,2)rec[-20]_rec[-44];DT(4,4,2)rec[-19]_rec[-43];DT(4,6,2)rec[-18]_rec[-42];DT(6,2,2)rec[-17]_rec[-41];DT(8,-6,2)rec[-16]_rec[-40];DT(8,10,2)rec[-15]_rec[-39];DT(10,-6,2)rec[-14]_rec[-38];DT(10,-4,2)rec[-13]_rec[-37];DT(10,-2,2)rec[-12]_rec[-36];DT(10,10,2)rec[-11]_rec[-35];DT(10,12,2)rec[-10]_rec[-34];DT(10,14,2)rec[-9]_rec[-33];DT(12,-8,2)rec[-8]_rec[-32];DT(12,-6,2)rec[-7]_rec[-31];DT(12,-4,2)rec[-6]_rec[-30];DT(12,8,2)rec[-5]_rec[-29];DT(12,10,2)rec[-4]_rec[-28];DT(12,12,2)rec[-3]_rec[-27];DT(14,-4,2)rec[-2]_rec[-26];DT(14,12,2)rec[-1]_rec[-25];TICK;R_143_144_145_162_163_164_165_166_184_185_186_187_188_206_207_208_209_210_220_221_222_226_227_228_232_233_234_238_239;RX_77_94_95_96_115_116_117_134_135_136_150_152_153_154_155_157_170_171_172_173_174_175_176_177_178_179_180_192_193_194_195_196_197_198_199_200_201_202_214_215_216_217_218_219_223_224_225_229_230_231_235_236_237_240;TICK;CX_96_86_115_104_117_106_136_126_153_143_155_145_171_160_173_162_175_164_177_166_179_168_193_181_195_183_197_185_199_187_201_189_214_204_215_206_217_208_218_210_219_212_223_220_225_222_231_227_235_232_237_234_240_238;CZ_95_85_116_105_135_125_154_144_170_159_172_161_174_163_176_165_178_167_180_169_194_182_196_184_198_186_200_188_202_190_216_207_224_221_230_226_236_233;TICK;CX_96_105_115_125_117_127_136_144_150_159_152_161_153_163_155_165_157_167_217_221_223_226_225_228_231_233_237_239;CZ_77_86_170_181_172_183_174_185_176_187_178_189_180_191_194_204_196_206_198_208_200_210_202_212;TICK;CX_94_85_96_87_115_105_134_125_136_127_153_144_171_161_173_163_175_165_177_167_179_169_193_182_195_184_197_186_199_188_201_190_214_205_215_207_217_209_218_211_219_213_223_221_229_226_231_228_235_233_240_239;CZ_95_86_116_106_135_126_154_145_170_160_172_162_174_164_176_166_178_168_192_181_194_183_196_185_198_187_200_189_202_191_216_208_224_222_230_227_236_234;TICK;CX_171_182_173_184_175_186_177_188_179_190_193_203_195_205_197_207_199_209_201_211;CZ_95_104_116_126_135_143_154_164_216_220_224_227_230_232_236_238;TICK;CX_94_104_96_106_115_126_134_143_136_145_150_160_152_162_153_164_155_166_157_168_171_183_173_185_175_187_177_189_179_191_193_204_195_206_197_208_199_210_201_212_215_220_217_222_223_227_229_232_231_234_235_238;CZ_77_87_95_105_116_127_135_144_154_165_170_182_172_184_174_186_176_188_178_190_192_203_194_205_196_207_198_209_200_211_202_213_216_221_224_228_230_233_236_239;TICK;MX_77_94_95_96_115_116_117_134_135_136_150_152_153_154_155_157_170_171_172_173_174_175_176_177_178_179_180_192_193_194_195_196_197_198_199_200_201_202_214_215_216_217_218_219_223_224_225_229_230_231_235_236_237_240;DT(0,4,3)rec[-54]_rec[-78];DT(2,0,3)rec[-53]_rec[-77];DT(2,2,3)rec[-52]_rec[-76];DT(2,4,3)rec[-51]_rec[-75];DT(4,2,3)rec[-50]_rec[-74];DT(4,4,3)rec[-49]_rec[-73];DT(4,6,3)rec[-48]_rec[-72];DT(6,2,3)rec[-46]_rec[-71];DT(8,-6,3)rec[-44]_rec[-70];DT(8,4,3)rec[-41];DT(8,10,3)rec[-39]_rec[-69];DT(10,-6,3)rec[-38]_rec[-68];DT(10,-4,3)rec[-37]_rec[-67];DT(10,-2,3)rec[-36]_rec[-66];DT(10,2,3)rec[-34];DT(10,6,3)rec[-32];DT(10,10,3)rec[-30]_rec[-65];DT(10,12,3)rec[-29]_rec[-64];DT(10,14,3)rec[-28]_rec[-63];DT(12,-8,3)rec[-27]_rec[-62];DT(12,-6,3)rec[-26]_rec[-61];DT(12,-4,3)rec[-25]_rec[-60];DT(12,0,3)rec[-23];DT(12,4,3)rec[-21];DT(12,8,3)rec[-19]_rec[-59];DT(12,10,3)rec[-18]_rec[-58];DT(12,12,3)rec[-17]_rec[-57];DT(14,-4,3)rec[-16]_rec[-56];DT(14,2,3)rec[-14];DT(14,12,3)rec[-11]_rec[-55];DT(16,4,3)rec[-9];DT(18,2,3)rec[-6];DT(20,4,3)rec[-3];OI(2)rec[-1]_rec[-2]_rec[-4]_rec[-5]_rec[-7]_rec[-8]_rec[-10]_rec[-12]_rec[-13]_rec[-15]_rec[-16]_rec[-18]_rec[-20]_rec[-22]_rec[-24]_rec[-31]_rec[-33]_rec[-35]_rec[-37]_rec[-39]_rec[-40]_rec[-42]_rec[-43]_rec[-45]_rec[-47]_rec[-48]_rec[-50];TICK;RX_77_94_95_96_115_116_117_134_135_136_150_152_153_154_155_157_170_171_172_173_174_175_176_177_178_179_180_192_193_194_195_196_197_198_199_200_201_202_214_215_216_217_218_219_223_224_225_229_230_231_235_236_237_240;TICK;CX_96_86_115_104_117_106_136_126_153_143_155_145_171_160_173_162_175_164_177_166_179_168_193_181_195_183_197_185_199_187_201_189_214_204_215_206_217_208_218_210_219_212_223_220_225_222_231_227_235_232_237_234_240_238;CZ_95_85_116_105_135_125_154_144_170_159_172_161_174_163_176_165_178_167_180_169_194_182_196_184_198_186_200_188_202_190_216_207_224_221_230_226_236_233;TICK;CX_96_105_115_125_117_127_136_144_150_159_152_161_153_163_155_165_157_167_217_221_223_226_225_228_231_233_237_239;CZ_77_86_170_181_172_183_174_185_176_187_178_189_180_191_194_204_196_206_198_208_200_210_202_212;TICK;CX_94_85_96_87_115_105_134_125_136_127_153_144_171_161_173_163_175_165_177_167_179_169_193_182_195_184_197_186_199_188_201_190_214_205_215_207_217_209_218_211_219_213_223_221_229_226_231_228_235_233_240_239;CZ_95_86_116_106_135_126_154_145_170_160_172_162_174_164_176_166_178_168_192_181_194_183_196_185_198_187_200_189_202_191_216_208_224_222_230_227_236_234;TICK;CX_171_182_173_184_175_186_177_188_179_190_193_203_195_205_197_207_199_209_201_211;CZ_95_104_116_126_135_143_154_164_216_220_224_227_230_232_236_238;TICK;CX_94_104_96_106_115_126_134_143_136_145_150_160_152_162_153_164_155_166_157_168_171_183_173_185_175_187_177_189_179_191_193_204_195_206_197_208_199_210_201_212_215_220_217_222_223_227_229_232_231_234_235_238;CZ_77_87_95_105_116_127_135_144_154_165_170_182_172_184_174_186_176_188_178_190_192_203_194_205_196_207_198_209_200_211_202_213_216_221_224_228_230_233_236_239;TICK;MX_77_94_95_96_115_116_117_134_135_136_150_152_153_154_155_157_170_171_172_173_174_175_176_177_178_179_180_192_193_194_195_196_197_198_199_200_201_202_214_215_216_217_218_219_223_224_225_229_230_231_235_236_237_240;DT(0,4,4)rec[-54]_rec[-108];DT(2,0,4)rec[-53]_rec[-107];DT(2,2,4)rec[-52]_rec[-106];DT(2,4,4)rec[-51]_rec[-105];DT(4,2,4)rec[-50]_rec[-104];DT(4,4,4)rec[-49]_rec[-103];DT(4,6,4)rec[-48]_rec[-102];DT(6,0,4)rec[-47]_rec[-101];DT(6,2,4)rec[-46]_rec[-100];DT(6,4,4)rec[-45]_rec[-99];DT(8,-6,4)rec[-44]_rec[-98];DT(8,-2,4)rec[-43]_rec[-97];DT(8,2,4)rec[-42]_rec[-96];DT(8,4,4)rec[-41]_rec[-95];DT(8,6,4)rec[-40]_rec[-94];DT(8,10,4)rec[-39]_rec[-93];DT(10,-6,4)rec[-38]_rec[-92];DT(10,-4,4)rec[-37]_rec[-91];DT(10,-2,4)rec[-36]_rec[-90];DT(10,0,4)rec[-35]_rec[-89];DT(10,2,4)rec[-34]_rec[-88];DT(10,4,4)rec[-33]_rec[-87];DT(10,6,4)rec[-32]_rec[-86];DT(10,8,4)rec[-31]_rec[-85];DT(10,10,4)rec[-30]_rec[-84];DT(10,12,4)rec[-29]_rec[-83];DT(10,14,4)rec[-28]_rec[-82];DT(12,-8,4)rec[-27]_rec[-81];DT(12,-6,4)rec[-26]_rec[-80];DT(12,-4,4)rec[-25]_rec[-79];DT(12,-2,4)rec[-24]_rec[-78];DT(12,0,4)rec[-23]_rec[-77];DT(12,2,4)rec[-22]_rec[-76];DT(12,4,4)rec[-21]_rec[-75];DT(12,6,4)rec[-20]_rec[-74];DT(12,8,4)rec[-19]_rec[-73];DT(12,10,4)rec[-18]_rec[-72];DT(12,12,4)rec[-17]_rec[-71];DT(14,-4,4)rec[-16]_rec[-70];DT(14,0,4)rec[-15]_rec[-69];DT(14,2,4)rec[-14]_rec[-68];DT(14,4,4)rec[-13]_rec[-67];DT(14,8,4)rec[-12]_rec[-66];DT(14,12,4)rec[-11]_rec[-65];DT(16,2,4)rec[-10]_rec[-64];DT(16,4,4)rec[-9]_rec[-63];DT(16,6,4)rec[-8]_rec[-62];DT(18,0,4)rec[-7]_rec[-61];DT(18,2,4)rec[-6]_rec[-60];DT(18,4,4)rec[-5]_rec[-59];DT(20,2,4)rec[-4]_rec[-58];DT(20,4,4)rec[-3]_rec[-57];DT(20,6,4)rec[-2]_rec[-56];DT(22,4,4)rec[-1]_rec[-55];TICK;RX_77_94_95_96_115_116_117_134_135_136_150_152_153_154_155_157_170_171_172_173_174_175_176_177_178_179_180_192_193_194_195_196_197_198_199_200_201_202_214_215_216_217_218_219_223_224_225_229_230_231_235_236_237_240;TICK;CX_96_86_115_104_117_106_136_126_153_143_155_145_171_160_173_162_175_164_177_166_179_168_193_181_195_183_197_185_199_187_201_189_214_204_215_206_217_208_218_210_219_212_223_220_225_222_231_227_235_232_237_234_240_238;CZ_95_85_116_105_135_125_154_144_170_159_172_161_174_163_176_165_178_167_180_169_194_182_196_184_198_186_200_188_202_190_216_207_224_221_230_226_236_233;TICK;CX_96_105_115_125_117_127_136_144_150_159_152_161_153_163_155_165_157_167_217_221_223_226_225_228_231_233_237_239;CZ_77_86_170_181_172_183_174_185_176_187_178_189_180_191_194_204_196_206_198_208_200_210_202_212;TICK;CX_94_85_96_87_115_105_134_125_136_127_153_144_171_161_173_163_175_165_177_167_179_169_193_182_195_184_197_186_199_188_201_190_214_205_215_207_217_209_218_211_219_213_223_221_229_226_231_228_235_233_240_239;CZ_95_86_116_106_135_126_154_145_170_160_172_162_174_164_176_166_178_168_192_181_194_183_196_185_198_187_200_189_202_191_216_208_224_222_230_227_236_234;TICK;CX_171_182_173_184_175_186_177_188_179_190_193_203_195_205_197_207_199_209_201_211;CZ_95_104_116_126_135_143_154_164_216_220_224_227_230_232_236_238;TICK;CX_94_104_96_106_115_126_134_143_136_145_150_160_152_162_153_164_155_166_157_168_171_183_173_185_175_187_177_189_179_191_193_204_195_206_197_208_199_210_201_212_215_220_217_222_223_227_229_232_231_234_235_238;CZ_77_87_95_105_116_127_135_144_154_165_170_182_172_184_174_186_176_188_178_190_192_203_194_205_196_207_198_209_200_211_202_213_216_221_224_228_230_233_236_239;TICK;M_143_144_145_162_163_164_165_166_184_185_186_187_188_206_207_208_209_210_220_221_222_226_227_228_232_233_234_238_239;MX_77_94_95_96_115_116_117_134_135_136_150_152_153_154_155_157_170_171_172_173_174_175_176_177_178_179_180_192_193_194_195_196_197_198_199_200_201_202_214_215_216_217_218_219_223_224_225_229_230_231_235_236_237_240;DT(0,4,5)rec[-54]_rec[-137];DT(2,0,5)rec[-53]_rec[-136];DT(2,2,5)rec[-52]_rec[-135];DT(2,4,5)rec[-51]_rec[-134];DT(4,2,5)rec[-50]_rec[-133];DT(4,4,5)rec[-49]_rec[-132];DT(4,6,5)rec[-48]_rec[-131];DT(6,0,5)rec[-47]_rec[-130];DT(6,2,5)rec[-46]_rec[-129];DT(6,4,5)rec[-45]_rec[-128];DT(8,-6,5)rec[-44]_rec[-127];DT(8,-2,5)rec[-43]_rec[-126];DT(8,2,5)rec[-42]_rec[-125];DT(9,5,5)rec[-41]_rec[-77]_rec[-78]_rec[-81]_rec[-82];DT(8,4,5)rec[-41]_rec[-124];DT(8,6,5)rec[-40]_rec[-123];DT(8,10,5)rec[-39]_rec[-122];DT(10,-6,5)rec[-38]_rec[-121];DT(10,-4,5)rec[-37]_rec[-120];DT(10,-2,5)rec[-36]_rec[-119];DT(10,0,5)rec[-35]_rec[-118];DT(11,3,5)rec[-34]_rec[-73]_rec[-74]_rec[-78]_rec[-79];DT(10,2,5)rec[-34]_rec[-117];DT(10,4,5)rec[-33]_rec[-116];DT(11,5,5)rec[-32]_rec[-71]_rec[-72]_rec[-76]_rec[-77];DT(10,6,5)rec[-32]_rec[-115];DT(10,8,5)rec[-31]_rec[-114];DT(10,10,5)rec[-30]_rec[-113];DT(10,12,5)rec[-29]_rec[-112];DT(10,14,5)rec[-28]_rec[-111];DT(12,-8,5)rec[-27]_rec[-110];DT(12,-6,5)rec[-26]_rec[-109];DT(12,-4,5)rec[-25]_rec[-108];DT(12,-2,5)rec[-24]_rec[-107];DT(13,1,5)rec[-23]_rec[-69]_rec[-70]_rec[-74]_rec[-75];DT(12,0,5)rec[-23]_rec[-106];DT(12,2,5)rec[-22]_rec[-105];DT(13,5,5)rec[-21]_rec[-67]_rec[-68]_rec[-72]_rec[-73];DT(12,4,5)rec[-21]_rec[-104];DT(12,6,5)rec[-20]_rec[-103];DT(12,8,5)rec[-19]_rec[-102];DT(12,10,5)rec[-18]_rec[-101];DT(12,12,5)rec[-17]_rec[-100];DT(14,-4,5)rec[-16]_rec[-99];DT(14,0,5)rec[-15]_rec[-98];DT(15,3,5)rec[-14]_rec[-64]_rec[-65]_rec[-68]_rec[-69];DT(14,2,5)rec[-14]_rec[-97];DT(14,4,5)rec[-13]_rec[-96];DT(14,8,5)rec[-12]_rec[-95];DT(14,12,5)rec[-11]_rec[-94];DT(16,2,5)rec[-10]_rec[-93];DT(17,3,5)rec[-9]_rec[-60]_rec[-61]_rec[-63]_rec[-64];DT(16,4,5)rec[-9]_rec[-92];DT(16,6,5)rec[-8]_rec[-91];DT(18,0,5)rec[-7]_rec[-90];DT(18,2,5)rec[-6]_rec[-58]_rec[-59]_rec[-61]_rec[-62];DT(18,2,6)rec[-6]_rec[-89];DT(18,4,5)rec[-5]_rec[-88];DT(20,2,5)rec[-4]_rec[-87];DT(21,5,5)rec[-3]_rec[-55]_rec[-56]_rec[-57]_rec[-58];DT(20,4,5)rec[-3]_rec[-86];DT(20,6,5)rec[-2]_rec[-85];DT(22,4,5)rec[-1]_rec[-84];TICK;RX_0_1_2_3_4_5_6_7_8_9_10_11_12_13_14_15_16_17_18_19_20_21_22_23_24_25_26_27_28_29_30_31_32_33_34_35_36_37_38_39_40_41_42_43_44_45_46_47_48_49_50_51_52_53_54_55_56_57_58_59_60_61_62_63_64_65_66_67_68_69_70_71_72_73_74_75_76_77_78_79_80_81_82_83_84_88_89_90_91_92_93_94_95_96_97_98_99_100_101_102_103_107_108_109_110_111_112_113_114_115_116_117_118_119_120_121_122_123_124_128_129_130_131_132_133_135_137_138_139_140_141_142_146_147_148_149_150_151_156_157_158_170_171_172_178_179_180_192_193_194_200_201_202_214_219;TICK;CX_16_5_18_7_20_9_22_11_24_13_38_26_40_28_42_30_44_32_46_34_60_49_65_57_74_67_79_70_92_82_94_84_96_86_98_89_111_100_113_102_115_104_117_106_119_107_132_122_138_129_150_140_157_146_171_160_179_168_193_181_201_189_214_204_219_212;CZ_17_6_19_8_21_10_23_12_25_14_39_27_41_29_43_31_45_33_47_35_59_48_61_50_62_52_63_54_64_56_66_58_75_68_80_71_91_81_93_83_95_85_97_88_99_90_112_101_114_103_116_105_120_108_131_121_133_123_135_125_137_128_139_130_151_141_158_147_170_159_172_161_178_167_180_169_194_182_202_190;TICK;CX_16_27_18_29_20_31_22_33_40_50_42_52_44_54_46_56_92_101_94_103_96_105_113_123_115_125_117_127;CZ_0_5_1_7_2_9_3_11_4_13_25_36_47_57_59_67_64_70_66_72_75_82_76_84_77_86_80_89_91_100_97_107_99_109_120_129_131_140_137_146_139_148_151_160_158_168_170_181_172_183_178_189_180_191_194_204_202_212;TICK;CX_16_6_18_8_20_10_22_12_24_14_38_27_40_29_42_31_44_33_46_35_60_50_65_58_74_68_79_71_92_83_94_85_96_87_98_90_111_101_113_103_115_105_119_108_132_123_138_130_150_141_157_147_171_161_179_169_193_182_201_190_214_205_219_213;CZ_15_5_17_7_19_9_21_11_23_13_37_26_39_28_41_30_43_32_45_34_47_36_59_49_61_51_62_53_63_55_64_57_73_67_75_69_78_70_80_72_91_82_93_84_95_86_97_89_110_100_112_102_114_104_116_106_118_107_120_109_131_122_133_124_135_126_137_129_149_140_151_142_156_146_158_148_170_160_178_168_192_181_194_183_200_189_202_191;TICK;CX_24_35_38_48_60_68_65_71_74_81_79_88_98_108_111_121_119_128_132_141_138_147_150_159_157_167_171_182_179_190_193_203_201_211;CZ_15_26_17_28_19_30_21_32_23_34_39_49_41_51_43_53_45_55_61_69_93_102_95_104_112_122_114_124_116_126_133_142;TICK;CX_16_28_18_30_20_32_22_34_24_36_38_49_40_51_42_53_44_55_46_57_60_69_65_72_74_82_79_89_92_102_94_104_96_106_98_109_111_122_113_124_115_126_119_129_132_142_138_148_150_160_157_168_171_183_179_191_193_204_201_212;CZ_0_6_1_8_2_10_3_12_4_14_15_27_17_29_19_31_21_33_23_35_37_48_39_50_41_52_43_54_45_56_47_58_59_68_64_71_73_81_75_83_76_85_77_87_78_88_80_90_91_101_93_103_95_105_97_108_110_121_112_123_114_125_116_127_118_128_120_130_131_141_137_147_149_159_151_161_156_167_158_169_170_182_178_190_192_203_194_205_200_211_202_213;TICK;MX_0_1_2_3_4_15_16_17_18_19_20_21_22_23_24_25_37_38_39_40_41_42_43_44_45_46_47_59_60_61_62_63_64_65_66_73_74_75_76_77_78_79_80_91_92_93_94_95_96_97_98_99_110_111_112_113_114_115_116_117_118_119_120_131_132_133_135_137_138_139_149_150_151_156_157_158_170_171_172_178_179_180_192_193_194_200_201_202_214_219;DT(-6,-4,7)rec[-84];DT(-6,0,7)rec[-82];DT(-6,4,7)rec[-80];DT(-6,8,7)rec[-78];DT(-6,12,7)rec[-76];DT(-4,-6,7)rec[-73];DT(-4,-2,7)rec[-71];DT(-4,2,7)rec[-69];DT(-4,6,7)rec[-67];DT(-4,10,7)rec[-65];DT(-2,-4,7)rec[-62];DT(-2,12,7)rec[-57];DT(0,-6,7)rec[-54];DT(0,4,7)rec[-51]_rec[-144];DT(0,10,7)rec[-49];DT(2,-4,7)rec[-46];DT(2,0,7)rec[-44]_rec[-143];DT(2,2,7)rec[-43]_rec[-142];DT(2,4,7)rec[-42]_rec[-141];DT(2,12,7)rec[-40];DT(4,-6,7)rec[-37];DT(4,-2,7)rec[-35];DT(4,2,7)rec[-33]_rec[-140];DT(4,4,7)rec[-32]_rec[-139];DT(4,6,7)rec[-31]_rec[-138];DT(4,10,7)rec[-29];DT(6,-4,7)rec[-26];DT(7,1,7)rec[-24]_rec[-136]_rec[-172]_rec[-173];DT(6,12,7)rec[-22];DT(8,-6,7)rec[-19]_rec[-134];DT(8,10,7)rec[-16]_rec[-129];DT(10,-6,7)rec[-14]_rec[-128];DT(10,-4,7)rec[-13]_rec[-127];DT(10,-2,7)rec[-12]_rec[-126]_rec[-165]_rec[-170];DT(10,10,7)rec[-11]_rec[-120];DT(10,12,7)rec[-10]_rec[-119];DT(10,14,7)rec[-9]_rec[-118];DT(12,-8,7)rec[-8]_rec[-117];DT(12,-6,7)rec[-7]_rec[-116];DT(12,-4,7)rec[-6]_rec[-115];DT(12,8,7)rec[-5]_rec[-109]_rec[-156]_rec[-161];DT(12,10,7)rec[-4]_rec[-108];DT(12,12,7)rec[-3]_rec[-107];DT(14,-4,7)rec[-2]_rec[-106];DT(14,12,7)rec[-1]_rec[-101];TICK;RX_0_1_2_3_4_15_16_17_18_19_20_21_22_23_24_25_37_38_39_40_41_42_43_44_45_46_47_59_60_61_62_63_64_65_66_73_74_75_76_77_78_79_80_91_92_93_94_95_96_97_98_99_110_111_112_113_114_115_116_117_118_119_120_131_132_133_135_137_138_139_149_150_151_156_157_158_170_171_172_178_179_180_192_193_194_200_201_202_214_219;TICK;CX_16_5_18_7_20_9_22_11_24_13_38_26_40_28_42_30_44_32_46_34_60_49_65_57_74_67_79_70_92_82_94_84_96_86_98_89_111_100_113_102_115_104_117_106_119_107_132_122_138_129_150_140_157_146_171_160_179_168_193_181_201_189_214_204_219_212;CZ_17_6_19_8_21_10_23_12_25_14_39_27_41_29_43_31_45_33_47_35_59_48_61_50_62_52_63_54_64_56_66_58_75_68_80_71_91_81_93_83_95_85_97_88_99_90_112_101_114_103_116_105_120_108_131_121_133_123_135_125_137_128_139_130_151_141_158_147_170_159_172_161_178_167_180_169_194_182_202_190;TICK;CX_16_27_18_29_20_31_22_33_40_50_42_52_44_54_46_56_92_101_94_103_96_105_113_123_115_125_117_127;CZ_0_5_1_7_2_9_3_11_4_13_25_36_47_57_59_67_64_70_66_72_75_82_76_84_77_86_80_89_91_100_97_107_99_109_120_129_131_140_137_146_139_148_151_160_158_168_170_181_172_183_178_189_180_191_194_204_202_212;TICK;CX_16_6_18_8_20_10_22_12_24_14_38_27_40_29_42_31_44_33_46_35_60_50_65_58_74_68_79_71_92_83_94_85_96_87_98_90_111_101_113_103_115_105_119_108_132_123_138_130_150_141_157_147_171_161_179_169_193_182_201_190_214_205_219_213;CZ_15_5_17_7_19_9_21_11_23_13_37_26_39_28_41_30_43_32_45_34_47_36_59_49_61_51_62_53_63_55_64_57_73_67_75_69_78_70_80_72_91_82_93_84_95_86_97_89_110_100_112_102_114_104_116_106_118_107_120_109_131_122_133_124_135_126_137_129_149_140_151_142_156_146_158_148_170_160_178_168_192_181_194_183_200_189_202_191;TICK;CX_24_35_38_48_60_68_65_71_74_81_79_88_98_108_111_121_119_128_132_141_138_147_150_159_157_167_171_182_179_190_193_203_201_211;CZ_15_26_17_28_19_30_21_32_23_34_39_49_41_51_43_53_45_55_61_69_93_102_95_104_112_122_114_124_116_126_133_142;TICK;CX_16_28_18_30_20_32_22_34_24_36_38_49_40_51_42_53_44_55_46_57_60_69_65_72_74_82_79_89_92_102_94_104_96_106_98_109_111_122_113_124_115_126_119_129_132_142_138_148_150_160_157_168_171_183_179_191_193_204_201_212;CZ_0_6_1_8_2_10_3_12_4_14_15_27_17_29_19_31_21_33_23_35_37_48_39_50_41_52_43_54_45_56_47_58_59_68_64_71_73_81_75_83_76_85_77_87_78_88_80_90_91_101_93_103_95_105_97_108_110_121_112_123_114_125_116_127_118_128_120_130_131_141_137_147_149_159_151_161_156_167_158_169_170_182_178_190_192_203_194_205_200_211_202_213;TICK;MX_0_1_2_3_4_15_16_17_18_19_20_21_22_23_24_25_37_38_39_40_41_42_43_44_45_46_47_59_60_61_62_63_64_65_66_73_74_75_76_77_78_79_80_91_92_93_94_95_96_97_98_99_110_111_112_113_114_115_116_117_118_119_120_131_132_133_135_137_138_139_149_150_151_156_157_158_170_171_172_178_179_180_192_193_194_200_201_202_214_219;DT(-8,-4,8)rec[-90]_rec[-180];DT(-8,0,8)rec[-89]_rec[-179];DT(-8,4,8)rec[-88]_rec[-178];DT(-8,8,8)rec[-87]_rec[-177];DT(-8,12,8)rec[-86]_rec[-176];DT(-6,-6,8)rec[-85]_rec[-175];DT(-6,-4,8)rec[-84]_rec[-174];DT(-6,-2,8)rec[-83]_rec[-173];DT(-6,0,8)rec[-82]_rec[-172];DT(-6,2,8)rec[-81]_rec[-171];DT(-6,4,8)rec[-80]_rec[-170];DT(-6,6,8)rec[-79]_rec[-169];DT(-6,8,8)rec[-78]_rec[-168];DT(-6,10,8)rec[-77]_rec[-167];DT(-6,12,8)rec[-76]_rec[-166];DT(-6,14,8)rec[-75]_rec[-165];DT(-4,-8,8)rec[-74]_rec[-164];DT(-4,-6,8)rec[-73]_rec[-163];DT(-4,-4,8)rec[-72]_rec[-162];DT(-4,-2,8)rec[-71]_rec[-161];DT(-4,0,8)rec[-70]_rec[-160];DT(-4,2,8)rec[-69]_rec[-159];DT(-4,4,8)rec[-68]_rec[-158];DT(-4,6,8)rec[-67]_rec[-157];DT(-4,8,8)rec[-66]_rec[-156];DT(-4,10,8)rec[-65]_rec[-155];DT(-4,12,8)rec[-64]_rec[-154];DT(-2,-6,8)rec[-63]_rec[-153];DT(-2,-4,8)rec[-62]_rec[-152];DT(-2,-2,8)rec[-61]_rec[-151];DT(-2,2,8)rec[-60]_rec[-150];DT(-2,6,8)rec[-59]_rec[-149];DT(-2,10,8)rec[-58]_rec[-148];DT(-2,12,8)rec[-57]_rec[-147];DT(-2,14,8)rec[-56]_rec[-146];DT(0,-8,8)rec[-55]_rec[-145];DT(0,-6,8)rec[-54]_rec[-144];DT(0,-4,8)rec[-53]_rec[-143];DT(0,0,8)rec[-52]_rec[-142];DT(0,4,8)rec[-51]_rec[-141];DT(0,8,8)rec[-50]_rec[-140];DT(0,10,8)rec[-49]_rec[-139];DT(0,12,8)rec[-48]_rec[-138];DT(2,-6,8)rec[-47]_rec[-137];DT(2,-4,8)rec[-46]_rec[-136];DT(2,-2,8)rec[-45]_rec[-135];DT(2,0,8)rec[-44]_rec[-134];DT(2,2,8)rec[-43]_rec[-133];DT(2,4,8)rec[-42]_rec[-132];DT(2,10,8)rec[-41]_rec[-131];DT(2,12,8)rec[-40]_rec[-130];DT(2,14,8)rec[-39]_rec[-129];DT(4,-8,8)rec[-38]_rec[-128];DT(4,-6,8)rec[-37]_rec[-127];DT(4,-4,8)rec[-36]_rec[-126];DT(4,-2,8)rec[-35]_rec[-125];DT(4,0,8)rec[-34]_rec[-124];DT(4,2,8)rec[-33]_rec[-123];DT(4,4,8)rec[-32]_rec[-122];DT(4,6,8)rec[-31]_rec[-121];DT(4,8,8)rec[-30]_rec[-120];DT(4,10,8)rec[-29]_rec[-119];DT(4,12,8)rec[-28]_rec[-118];DT(6,-6,8)rec[-27]_rec[-117];DT(6,-4,8)rec[-26]_rec[-116];DT(6,-2,8)rec[-25]_rec[-115];DT(6,2,8)rec[-24]_rec[-114];DT(6,10,8)rec[-23]_rec[-113];DT(6,12,8)rec[-22]_rec[-112];DT(6,14,8)rec[-21]_rec[-111];DT(8,-8,8)rec[-20]_rec[-110];DT(8,-6,8)rec[-19]_rec[-109];DT(8,-4,8)rec[-18]_rec[-108];DT(8,8,8)rec[-17]_rec[-107];DT(8,10,8)rec[-16]_rec[-106];DT(8,12,8)rec[-15]_rec[-105];DT(10,-6,8)rec[-14]_rec[-104];DT(10,-4,8)rec[-13]_rec[-103];DT(10,-2,8)rec[-12]_rec[-102];DT(10,10,8)rec[-11]_rec[-101];DT(10,12,8)rec[-10]_rec[-100];DT(10,14,8)rec[-9]_rec[-99];DT(12,-8,8)rec[-8]_rec[-98];DT(12,-6,8)rec[-7]_rec[-97];DT(12,-4,8)rec[-6]_rec[-96];DT(12,8,8)rec[-5]_rec[-95];DT(12,10,8)rec[-4]_rec[-94];DT(12,12,8)rec[-3]_rec[-93];DT(14,-4,8)rec[-2]_rec[-92];DT(14,12,8)rec[-1]_rec[-91];TICK;RX_0_1_2_3_4_15_16_17_18_19_20_21_22_23_24_25_37_38_39_40_41_42_43_44_45_46_47_59_60_61_62_63_64_65_66_73_74_75_76_77_78_79_80_91_92_93_94_95_96_97_98_99_110_111_112_113_114_115_116_117_118_119_120_131_132_133_135_137_138_139_149_150_151_156_157_158_170_171_172_178_179_180_192_193_194_200_201_202_214_219;TICK;CX_16_5_18_7_20_9_22_11_24_13_38_26_40_28_42_30_44_32_46_34_60_49_65_57_74_67_79_70_92_82_94_84_96_86_98_89_111_100_113_102_115_104_117_106_119_107_132_122_138_129_150_140_157_146_171_160_179_168_193_181_201_189_214_204_219_212;CZ_17_6_19_8_21_10_23_12_25_14_39_27_41_29_43_31_45_33_47_35_59_48_61_50_62_52_63_54_64_56_66_58_75_68_80_71_91_81_93_83_95_85_97_88_99_90_112_101_114_103_116_105_120_108_131_121_133_123_135_125_137_128_139_130_151_141_158_147_170_159_172_161_178_167_180_169_194_182_202_190;TICK;CX_16_27_18_29_20_31_22_33_40_50_42_52_44_54_46_56_92_101_94_103_96_105_113_123_115_125_117_127;CZ_0_5_1_7_2_9_3_11_4_13_25_36_47_57_59_67_64_70_66_72_75_82_76_84_77_86_80_89_91_100_97_107_99_109_120_129_131_140_137_146_139_148_151_160_158_168_170_181_172_183_178_189_180_191_194_204_202_212;TICK;CX_16_6_18_8_20_10_22_12_24_14_38_27_40_29_42_31_44_33_46_35_60_50_65_58_74_68_79_71_92_83_94_85_96_87_98_90_111_101_113_103_115_105_119_108_132_123_138_130_150_141_157_147_171_161_179_169_193_182_201_190_214_205_219_213;CZ_15_5_17_7_19_9_21_11_23_13_37_26_39_28_41_30_43_32_45_34_47_36_59_49_61_51_62_53_63_55_64_57_73_67_75_69_78_70_80_72_91_82_93_84_95_86_97_89_110_100_112_102_114_104_116_106_118_107_120_109_131_122_133_124_135_126_137_129_149_140_151_142_156_146_158_148_170_160_178_168_192_181_194_183_200_189_202_191;TICK;CX_24_35_38_48_60_68_65_71_74_81_79_88_98_108_111_121_119_128_132_141_138_147_150_159_157_167_171_182_179_190_193_203_201_211;CZ_15_26_17_28_19_30_21_32_23_34_39_49_41_51_43_53_45_55_61_69_93_102_95_104_112_122_114_124_116_126_133_142;TICK;CX_16_28_18_30_20_32_22_34_24_36_38_49_40_51_42_53_44_55_46_57_60_69_65_72_74_82_79_89_92_102_94_104_96_106_98_109_111_122_113_124_115_126_119_129_132_142_138_148_150_160_157_168_171_183_179_191_193_204_201_212;CZ_0_6_1_8_2_10_3_12_4_14_15_27_17_29_19_31_21_33_23_35_37_48_39_50_41_52_43_54_45_56_47_58_59_68_64_71_73_81_75_83_76_85_77_87_78_88_80_90_91_101_93_103_95_105_97_108_110_121_112_123_114_125_116_127_118_128_120_130_131_141_137_147_149_159_151_161_156_167_158_169_170_182_178_190_192_203_194_205_200_211_202_213;TICK;MX_0_1_2_3_4_5_6_7_8_9_10_11_12_13_14_15_16_17_18_19_20_21_22_23_24_25_26_27_28_29_30_31_32_33_34_35_36_37_38_39_40_41_42_43_44_45_46_47_48_49_50_51_52_53_54_55_56_57_58_59_60_61_62_63_64_65_66_67_68_69_70_71_72_73_74_75_76_77_78_79_80_81_82_83_84_88_89_90_91_92_93_94_95_96_97_98_99_100_101_102_103_107_108_109_110_111_112_113_114_115_116_117_118_119_120_121_122_123_124_128_129_130_131_132_133_135_137_138_139_140_141_142_146_147_148_149_150_151_156_157_158_170_171_172_178_179_180_192_193_194_200_201_202_214_219;DT(-8,-4,9)rec[-155]_rec[-245];DT(-8,0,9)rec[-154]_rec[-244];DT(-8,4,9)rec[-153]_rec[-243];DT(-8,8,9)rec[-152]_rec[-242];DT(-8,12,9)rec[-151]_rec[-241];DT(-6,-6,9)rec[-140]_rec[-240];DT(-6,-4,9)rec[-139]_rec[-239];DT(-6,-2,9)rec[-138]_rec[-238];DT(-6,0,9)rec[-137]_rec[-237];DT(-6,2,9)rec[-136]_rec[-236];DT(-6,4,9)rec[-135]_rec[-235];DT(-6,6,9)rec[-134]_rec[-234];DT(-6,8,9)rec[-133]_rec[-233];DT(-6,10,9)rec[-132]_rec[-232];DT(-6,12,9)rec[-131]_rec[-231];DT(-6,14,9)rec[-130]_rec[-230];DT(-7,-5,9)rec[-127]_rec[-128]_rec[-139]_rec[-149]_rec[-150];DT(-7,1,9)rec[-125]_rec[-126]_rec[-137]_rec[-147]_rec[-148];DT(-7,5,9)rec[-123]_rec[-124]_rec[-135]_rec[-145]_rec[-146];DT(-7,7,9)rec[-121]_rec[-122]_rec[-133]_rec[-143]_rec[-144];DT(-5,11,9)rec[-119]_rec[-120]_rec[-131]_rec[-141]_rec[-142];DT(-4,-8,9)rec[-118]_rec[-229];DT(-4,-6,9)rec[-117]_rec[-228];DT(-4,-4,9)rec[-116]_rec[-227];DT(-4,-2,9)rec[-115]_rec[-226];DT(-4,0,9)rec[-114]_rec[-225];DT(-4,2,9)rec[-113]_rec[-224];DT(-4,4,9)rec[-112]_rec[-223];DT(-4,6,9)rec[-111]_rec[-222];DT(-4,8,9)rec[-110]_rec[-221];DT(-4,10,9)rec[-109]_rec[-220];DT(-4,12,9)rec[-108]_rec[-219];DT(-3,-7,9)rec[-106]_rec[-107]_rec[-117]_rec[-128]_rec[-129];DT(-3,-1,9)rec[-104]_rec[-105]_rec[-115]_rec[-126]_rec[-127];DT(-3,3,9)rec[-102]_rec[-103]_rec[-113]_rec[-124]_rec[-125];DT(-5,7,9)rec[-100]_rec[-101]_rec[-111]_rec[-122]_rec[-123];DT(-3,9,9)rec[-98]_rec[-99]_rec[-109]_rec[-120]_rec[-121];DT(-2,-6,9)rec[-96]_rec[-218];DT(-2,-4,9)rec[-95]_rec[-217];DT(-2,-2,9)rec[-94]_rec[-216];DT(-2,2,9)rec[-93]_rec[-215];DT(-2,6,9)rec[-92]_rec[-214];DT(-2,10,9)rec[-91]_rec[-213];DT(-2,12,9)rec[-90]_rec[-212];DT(-2,14,9)rec[-89]_rec[-211];DT(-1,-5,9)rec[-86]_rec[-87]_rec[-95]_rec[-105]_rec[-106];DT(-3,13,9)rec[-83]_rec[-84]_rec[-90]_rec[-97]_rec[-98];DT(0,-8,9)rec[-82]_rec[-210];DT(0,-6,9)rec[-81]_rec[-209];DT(0,-4,9)rec[-80]_rec[-208];DT(0,0,9)rec[-79]_rec[-207];DT(0,4,9)rec[-78]_rec[-206];DT(0,8,9)rec[-77]_rec[-205];DT(0,10,9)rec[-76]_rec[-204];DT(0,12,9)rec[-75]_rec[-203];DT(1,-5,9)rec[-73]_rec[-74]_rec[-81]_rec[-87]_rec[-88];DT(1,11,9)rec[-69]_rec[-70]_rec[-76]_rec[-84]_rec[-85];DT(2,-6,9)rec[-67]_rec[-202];DT(2,-4,9)rec[-66]_rec[-201];DT(2,-2,9)rec[-65]_rec[-200];DT(2,0,9)rec[-64]_rec[-199];DT(2,2,9)rec[-63]_rec[-198];DT(2,4,9)rec[-62]_rec[-197];DT(2,10,9)rec[-61]_rec[-196];DT(2,12,9)rec[-60]_rec[-195];DT(2,14,9)rec[-59]_rec[-194];DT(3,-5,9)rec[-56]_rec[-57]_rec[-66]_rec[-72]_rec[-73];DT(3,11,9)rec[-52]_rec[-53]_rec[-60]_rec[-68]_rec[-69];DT(4,-8,9)rec[-51]_rec[-193];DT(4,-6,9)rec[-50]_rec[-192];DT(4,-4,9)rec[-49]_rec[-191];DT(4,-2,9)rec[-48]_rec[-190];DT(4,0,9)rec[-47]_rec[-189];DT(4,2,9)rec[-46]_rec[-188];DT(4,4,9)rec[-45]_rec[-187];DT(4,6,9)rec[-44]_rec[-186];DT(4,8,9)rec[-43]_rec[-185];DT(4,10,9)rec[-42]_rec[-184];DT(4,12,9)rec[-41]_rec[-183];DT(5,-5,9)rec[-39]_rec[-40]_rec[-50]_rec[-57]_rec[-58];DT(3,-1,9)rec[-37]_rec[-38]_rec[-48]_rec[-55]_rec[-56];DT(3,9,9)rec[-35]_rec[-36]_rec[-42]_rec[-53]_rec[-54];DT(6,-6,9)rec[-33]_rec[-182];DT(6,-4,9)rec[-32]_rec[-181];DT(6,-2,9)rec[-31]_rec[-180];DT(6,2,9)rec[-30]_rec[-179];DT(6,10,9)rec[-29]_rec[-178];DT(6,12,9)rec[-28]_rec[-177];DT(6,14,9)rec[-27]_rec[-176];DT(7,-3,9)rec[-24]_rec[-25]_rec[-32]_rec[-38]_rec[-39];DT(5,11,9)rec[-21]_rec[-22]_rec[-28]_rec[-34]_rec[-35];DT(8,-8,9)rec[-20]_rec[-175];DT(8,-6,9)rec[-19]_rec[-174];DT(8,-4,9)rec[-18]_rec[-173];DT(8,8,9)rec[-17]_rec[-172];DT(8,10,9)rec[-16]_rec[-171];DT(8,12,9)rec[-15]_rec[-170];DT(10,-6,9)rec[-14]_rec[-169];DT(10,-4,9)rec[-13]_rec[-168];DT(10,-2,9)rec[-12]_rec[-167];DT(10,10,9)rec[-11]_rec[-166];DT(10,12,9)rec[-10]_rec[-165];DT(10,14,9)rec[-9]_rec[-164];DT(12,-8,9)rec[-8]_rec[-163];DT(12,-6,9)rec[-7]_rec[-162];DT(12,-4,9)rec[-6]_rec[-161];DT(12,8,9)rec[-5]_rec[-160];DT(12,10,9)rec[-4]_rec[-159];DT(12,12,9)rec[-3]_rec[-158];DT(14,-4,9)rec[-2]_rec[-157];DT(14,12,9)rec[-1]_rec[-156];TICK;RX_77_94_95_96_115_116_117_135_150_157_170_171_172_178_179_180_192_193_194_200_201_202_214_219;TICK;CX_96_86_115_104_117_106_171_160_179_168_193_181_201_189_214_204_219_212;CZ_95_85_116_105_135_125_170_159_172_161_178_167_180_169_194_182_202_190;TICK;CX_96_105_115_125_117_127_150_159_157_167;CZ_77_86_170_181_172_183_178_189_180_191_194_204_202_212;TICK;CX_94_85_96_87_115_105_171_161_179_169_193_182_201_190_214_205_219_213;CZ_95_86_116_106_135_126_170_160_178_168_192_181_194_183_200_189_202_191;TICK;CX_171_182_179_190_193_203_201_211;CZ_95_104_116_126;TICK;CX_94_104_96_106_115_126_150_160_157_168_171_183_179_191_193_204_201_212;CZ_77_87_95_105_116_127_170_182_178_190_192_203_194_205_200_211_202_213;TICK;MX_77_94_95_96_115_116_117_135_150_157_170_171_172_178_179_180_192_193_194_200_201_202_214_219;DT(0,4,10)rec[-24]_rec[-102];DT(3,-1,10)rec[-23]_rec[-79]_rec[-88]_rec[-95];DT(2,2,10)rec[-22]_rec[-87];DT(2,4,10)rec[-21]_rec[-86];DT(4,2,10)rec[-20]_rec[-70];DT(4,4,10)rec[-19]_rec[-69];DT(4,6,10)rec[-18]_rec[-68];DT(6,2,10)rec[-17]_rec[-54];DT(8,-6,10)rec[-16]_rec[-43]_rec[-49]_rec[-50];DT(7,9,10)rec[-15]_rec[-40]_rec[-46]_rec[-47];DT(10,-6,10)rec[-14]_rec[-38];DT(10,-4,10)rec[-13]_rec[-37];DT(10,-2,10)rec[-12]_rec[-36];DT(10,10,10)rec[-11]_rec[-35];DT(10,12,10)rec[-10]_rec[-34];DT(10,14,10)rec[-9]_rec[-33];DT(12,-8,10)rec[-8]_rec[-32];DT(12,-6,10)rec[-7]_rec[-31];DT(12,-4,10)rec[-6]_rec[-30];DT(12,8,10)rec[-5]_rec[-29];DT(12,10,10)rec[-4]_rec[-28];DT(12,12,10)rec[-3]_rec[-27];DT(14,-4,10)rec[-2]_rec[-26];DT(14,12,10)rec[-1]_rec[-25];TICK;RX_77_94_95_96_115_116_117_135_150_157_170_171_172_178_179_180_192_193_194_200_201_202_214_219;TICK;CX_96_86_115_104_117_106_171_160_179_168_193_181_201_189_214_204_219_212;CZ_95_85_116_105_135_125_170_159_172_161_178_167_180_169_194_182_202_190;TICK;CX_96_105_115_125_117_127_150_159_157_167;CZ_77_86_170_181_172_183_178_189_180_191_194_204_202_212;TICK;CX_94_85_96_87_115_105_171_161_179_169_193_182_201_190_214_205_219_213;CZ_95_86_116_106_135_126_170_160_178_168_192_181_194_183_200_189_202_191;TICK;CX_171_182_179_190_193_203_201_211;CZ_95_104_116_126;TICK;CX_94_104_96_106_115_126_150_160_157_168_171_183_179_191_193_204_201_212;CZ_77_87_95_105_116_127_170_182_178_190_192_203_194_205_200_211_202_213;TICK;MX_77_94_95_96_115_116_117_135_150_157_170_171_172_178_179_180_192_193_194_200_201_202_214_219;DT(0,4,11)rec[-24]_rec[-48];DT(2,0,11)rec[-23]_rec[-47];DT(2,2,11)rec[-22]_rec[-46];DT(2,4,11)rec[-21]_rec[-45];DT(4,2,11)rec[-20]_rec[-44];DT(4,4,11)rec[-19]_rec[-43];DT(4,6,11)rec[-18]_rec[-42];DT(6,2,11)rec[-17]_rec[-41];DT(8,-6,11)rec[-16]_rec[-40];DT(8,10,11)rec[-15]_rec[-39];DT(10,-6,11)rec[-14]_rec[-38];DT(10,-4,11)rec[-13]_rec[-37];DT(10,-2,11)rec[-12]_rec[-36];DT(10,10,11)rec[-11]_rec[-35];DT(10,12,11)rec[-10]_rec[-34];DT(10,14,11)rec[-9]_rec[-33];DT(12,-8,11)rec[-8]_rec[-32];DT(12,-6,11)rec[-7]_rec[-31];DT(12,-4,11)rec[-6]_rec[-30];DT(12,8,11)rec[-5]_rec[-29];DT(12,10,11)rec[-4]_rec[-28];DT(12,12,11)rec[-3]_rec[-27];DT(14,-4,11)rec[-2]_rec[-26];DT(14,12,11)rec[-1]_rec[-25];TICK;RX_77_94_95_96_115_116_117_135_150_157_170_171_172_178_179_180_192_193_194_200_201_202_214_219;TICK;CX_96_86_115_104_117_106_171_160_179_168_193_181_201_189_214_204_219_212;CZ_95_85_116_105_135_125_170_159_172_161_178_167_180_169_194_182_202_190;TICK;CX_96_105_115_125_117_127_150_159_157_167;CZ_77_86_170_181_172_183_178_189_180_191_194_204_202_212;TICK;CX_94_85_96_87_115_105_171_161_179_169_193_182_201_190_214_205_219_213;CZ_95_86_116_106_135_126_170_160_178_168_192_181_194_183_200_189_202_191;TICK;CX_171_182_179_190_193_203_201_211;CZ_95_104_116_126;TICK;CX_94_104_96_106_115_126_150_160_157_168_171_183_179_191_193_204_201_212;CZ_77_87_95_105_116_127_170_182_178_190_192_203_194_205_200_211_202_213;TICK;MX_77_85_86_87_94_95_96_104_105_106_115_116_117_125_126_127_135_150_157_159_160_161_167_168_169_170_171_172_178_179_180_181_182_183_189_190_191_192_193_194_200_201_202_203_204_205_211_212_213_214_219;DT(0,4,12)rec[-51]_rec[-75];DT(2,0,12)rec[-47]_rec[-74];DT(2,2,12)rec[-46]_rec[-73];DT(2,4,12)rec[-45]_rec[-72];DT(3,1,12)rec[-44]_rec[-47]_rec[-50];DT(3,5,12)rec[-42]_rec[-43]_rec[-45]_rec[-48]_rec[-49];DT(4,2,12)rec[-41]_rec[-71];DT(4,4,12)rec[-40]_rec[-70];DT(4,6,12)rec[-39]_rec[-69];DT(5,3,12)rec[-37]_rec[-38]_rec[-41]_rec[-43]_rec[-44];DT(5,5,12)rec[-36]_rec[-39]_rec[-42];DT(6,2,12)rec[-35]_rec[-68];DT(8,-6,12)rec[-34]_rec[-67];DT(8,10,12)rec[-33]_rec[-66];DT(9,-5,12)rec[-31]_rec[-32]_rec[-34];DT(9,9,12)rec[-28]_rec[-29]_rec[-33];DT(10,-6,12)rec[-26]_rec[-65];DT(10,-4,12)rec[-25]_rec[-64];DT(10,-2,12)rec[-24]_rec[-63];DT(10,10,12)rec[-23]_rec[-62];DT(10,12,12)rec[-22]_rec[-61];DT(10,14,12)rec[-21]_rec[-60];DT(11,-3,12)rec[-18]_rec[-19]_rec[-25]_rec[-30]_rec[-31];DT(11,13,12)rec[-15]_rec[-16]_rec[-22]_rec[-27]_rec[-28];DT(12,-8,12)rec[-14]_rec[-59];DT(12,-6,12)rec[-13]_rec[-58];DT(12,-4,12)rec[-12]_rec[-57];DT(12,8,12)rec[-11]_rec[-56];DT(12,10,12)rec[-10]_rec[-55];DT(12,12,12)rec[-9]_rec[-54];DT(11,-7,12)rec[-7]_rec[-8]_rec[-13]_rec[-19]_rec[-20];DT(13,9,12)rec[-4]_rec[-5]_rec[-10]_rec[-16]_rec[-17];DT(13,-3,12)rec[-2]_rec[-6]_rec[-7];DT(14,-4,12)rec[-2]_rec[-53];DT(13,11,12)rec[-1]_rec[-3]_rec[-4];DT(14,12,12)rec[-1]_rec[-52];OI(0)rec[-4]_rec[-7]_rec[-16]_rec[-19]_rec[-28]_rec[-31]_rec[-121]_rec[-124]_rec[-134]_rec[-138]_rec[-152]_rec[-156]_rec[-168]_rec[-172]_rec[-183]_rec[-186]_rec[-197]_rec[-205]_rec[-219]_rec[-220]_rec[-221]_rec[-222]_rec[-223]_rec[-224]_rec[-225]_rec[-226];OI(1)rec[-7]_rec[-19]_rec[-31]_rec[-42]_rec[-43]_rec[-44]_rec[-124]_rec[-138]_rec[-154]_rec[-155])."
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [],
"source": [
"from tqec import Basis, NoiseModel, compile_block_graph\n",
"\n",
"graph = steane_encoding(Basis.X)\n",
"compiled_graph = compile_block_graph(graph)\n",
"circuit = compiled_graph.generate_stim_circuit(\n",
" k=1, noise_model=NoiseModel.uniform_depolarizing(p=0.001)\n",
")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Simulation\n",
"\n",
"Here we show the simulation results for all the seven observables under uniform depolarizing noise model.\n",
"\n",
" Click to show the full code used for simulation
\n",
"\n",
"```py\n",
"\n",
"from pathlib import Path\n",
"\n",
"import matplotlib.pyplot as plt\n",
"import numpy\n",
"import sinter\n",
"\n",
"from tqec.gallery import steane_encoding\n",
"from tqec import NoiseModel\n",
"from tqec.simulation.plotting.inset import plot_observable_as_inset\n",
"from tqec.simulation.simulation import start_simulation_using_sinter\n",
"from tqec.utils.enums import Basis\n",
"\n",
"SAVE_DIR = Path(\"results\")\n",
"\n",
"\n",
"def generate_graphs(support_observable_basis: Basis) -> None:\n",
" block_graph = steane_encoding(support_observable_basis)\n",
" zx_graph = block_graph.to_zx_graph()\n",
"\n",
" correlation_surfaces = block_graph.find_correlation_surfaces()\n",
"\n",
" # Start simulation using sinter, note that the `save_resume_filepath` is useful\n",
" # when simulation takes a long time.\n",
" # If the Python interpreter is stopped or killed, calling this method again with\n",
" # the same file path will load the previous results and resume from where it left off.\n",
" stats = start_simulation_using_sinter(\n",
" block_graph,\n",
" range(1, 4),\n",
" list(numpy.logspace(-4, -1, 10)),\n",
" NoiseModel.uniform_depolarizing,\n",
" manhattan_radius=2,\n",
" observables=correlation_surfaces,\n",
" num_workers=20,\n",
" max_shots=10_000_000,\n",
" max_errors=5_000,\n",
" decoders=[\"pymatching\"],\n",
" print_progress=True,\n",
" # save_resume_filepath=SAVE_DIR / \"steane_encoding_sim.txt\",\n",
" )\n",
"\n",
" for i, stat in enumerate(stats):\n",
" fig, ax = plt.subplots()\n",
" sinter.plot_error_rate(\n",
" ax=ax,\n",
" stats=stat,\n",
" x_func=lambda stat: stat.json_metadata[\"p\"],\n",
" failure_units_per_shot_func=lambda stat: stat.json_metadata[\"d\"],\n",
" group_func=lambda stat: stat.json_metadata[\"d\"],\n",
" )\n",
" plot_observable_as_inset(ax, zx_graph, correlation_surfaces[i])\n",
" ax.grid(axis=\"both\")\n",
" ax.legend()\n",
" ax.loglog()\n",
" ax.set_title(\"Steane Encoding Error Rate\")\n",
" ax.set_xlabel(\"Physical Error Rate\")\n",
" ax.set_ylabel(\"Logical Error Rate(per round)\")\n",
" fig.savefig(\n",
" SAVE_DIR\n",
" / f\"steane_encoding_result_{support_observable_basis}_observable_{i}.png\"\n",
" )\n",
"\n",
"\n",
"def main():\n",
" SAVE_DIR.mkdir(exist_ok=True)\n",
" generate_graphs(Basis.X)\n",
" generate_graphs(Basis.Z)\n",
"\n",
"\n",
"if __name__ == \"__main__\":\n",
" main()\n",
"```\n",
"\n",
" \n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## References\n",
"\n",
"\n",
"\\[1\\] Steane, A. (1996). Multiple-particle interference and quantum error correction. Proceedings of the Royal Society of London. Series A: Mathematical, Physical and Engineering Sciences, 452(1954), 2551-2577.\n",
"\n",
"\\[2\\] Fowler, A. G., Mariantoni, M., Martinis, J. M., & Cleland, A. N. (2012). Surface codes: Towards practical large-scale quantum computation. Physical Review A—Atomic, Molecular, and Optical Physics, 86(3), 032324.\n"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.11.11"
}
},
"nbformat": 4,
"nbformat_minor": 4
}