{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Resource Estimation of Fixed Circuit Used in Tensor Network Contraction Simulation\n",
"\n",
"This notebook gives the resource estimation of random quantum circuits used for the tensor network contraction simulation in\n",
"[Alibaba Cloud Quantum Development Platform: Large-Scale Classical Simulation of Quantum Circuits](https://arxiv.org/abs/1907.11217)."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"import qsharp"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Encoding a circuit\n",
"\n",
"Let's now create a Q# program encoding one the 70-qubit circuits of depth 40 described in \n",
"https://github.com/sboixo/GRCS/tree/master/inst/bristlecone/cz_v2."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"microsoft": {
"language": "qsharp"
},
"vscode": {
"languageId": "qsharp"
}
},
"outputs": [],
"source": [
"%%qsharp\n",
"\n",
"operation SqrtX(q : Qubit) : Unit {\n",
" H(q);\n",
" S(q);\n",
" H(q);\n",
"}\n",
"\n",
"operation SqrtY(q : Qubit) : Unit {\n",
" Adjoint S(q);\n",
" H(q);\n",
" S(q);\n",
" H(q);\n",
" S(q);\n",
"}\n",
"\n",
"operation RunHardcodedCircuit() : Unit {\n",
" use qs = Qubit[70];\n",
" for i in 0 .. 70 - 1 {\n",
" H(qs[i]);\n",
" }\n",
" T(qs[0]);\n",
" T(qs[1]);\n",
" T(qs[2]);\n",
" T(qs[3]);\n",
" CZ(qs[4], qs[5]);\n",
" T(qs[6]);\n",
" CZ(qs[7], qs[8]);\n",
" T(qs[9]);\n",
" T(qs[10]);\n",
" T(qs[11]);\n",
" CZ(qs[12], qs[13]);\n",
" T(qs[14]);\n",
" T(qs[15]);\n",
" CZ(qs[16], qs[17]);\n",
" T(qs[18]);\n",
" T(qs[19]);\n",
" T(qs[20]);\n",
" T(qs[21]);\n",
" T(qs[22]);\n",
" CZ(qs[23], qs[24]);\n",
" T(qs[25]);\n",
" T(qs[26]);\n",
" CZ(qs[27], qs[28]);\n",
" T(qs[29]);\n",
" T(qs[30]);\n",
" CZ(qs[31], qs[32]);\n",
" T(qs[33]);\n",
" T(qs[34]);\n",
" CZ(qs[35], qs[36]);\n",
" T(qs[37]);\n",
" T(qs[38]);\n",
" T(qs[39]);\n",
" T(qs[40]);\n",
" T(qs[41]);\n",
" T(qs[42]);\n",
" CZ(qs[43], qs[44]);\n",
" T(qs[45]);\n",
" T(qs[46]);\n",
" CZ(qs[47], qs[48]);\n",
" T(qs[49]);\n",
" CZ(qs[50], qs[51]);\n",
" T(qs[52]);\n",
" T(qs[53]);\n",
" CZ(qs[54], qs[55]);\n",
" T(qs[56]);\n",
" T(qs[57]);\n",
" T(qs[58]);\n",
" CZ(qs[59], qs[60]);\n",
" T(qs[61]);\n",
" T(qs[62]);\n",
" T(qs[63]);\n",
" T(qs[64]);\n",
" T(qs[65]);\n",
" CZ(qs[66], qs[67]);\n",
" T(qs[68]);\n",
" T(qs[69]);\n",
" CZ(qs[2], qs[7]);\n",
" CZ(qs[4], qs[9]);\n",
" SqrtY(qs[5]);\n",
" SqrtY(qs[8]);\n",
" SqrtX(qs[12]);\n",
" CZ(qs[13], qs[22]);\n",
" CZ(qs[15], qs[24]);\n",
" SqrtX(qs[16]);\n",
" CZ(qs[17], qs[26]);\n",
" CZ(qs[19], qs[28]);\n",
" SqrtY(qs[23]);\n",
" SqrtX(qs[27]);\n",
" CZ(qs[31], qs[41]);\n",
" SqrtY(qs[32]);\n",
" CZ(qs[33], qs[43]);\n",
" CZ(qs[35], qs[45]);\n",
" SqrtX(qs[36]);\n",
" CZ(qs[37], qs[47]);\n",
" CZ(qs[39], qs[49]);\n",
" SqrtX(qs[44]);\n",
" SqrtY(qs[48]);\n",
" SqrtY(qs[50]);\n",
" CZ(qs[51], qs[58]);\n",
" CZ(qs[53], qs[60]);\n",
" SqrtY(qs[54]);\n",
" CZ(qs[55], qs[62]);\n",
" SqrtX(qs[59]);\n",
" CZ(qs[66], qs[69]);\n",
" SqrtY(qs[67]);\n",
" CZ(qs[0], qs[1]);\n",
" SqrtY(qs[2]);\n",
" SqrtX(qs[4]);\n",
" T(qs[5]);\n",
" SqrtY(qs[7]);\n",
" CZ(qs[8], qs[9]);\n",
" T(qs[12]);\n",
" CZ(qs[13], qs[14]);\n",
" SqrtY(qs[15]);\n",
" T(qs[16]);\n",
" CZ(qs[17], qs[18]);\n",
" SqrtY(qs[19]);\n",
" CZ(qs[20], qs[21]);\n",
" SqrtY(qs[22]);\n",
" T(qs[23]);\n",
" CZ(qs[24], qs[25]);\n",
" SqrtX(qs[26]);\n",
" T(qs[27]);\n",
" CZ(qs[28], qs[29]);\n",
" SqrtY(qs[31]);\n",
" CZ(qs[32], qs[33]);\n",
" SqrtY(qs[35]);\n",
" CZ(qs[36], qs[37]);\n",
" SqrtY(qs[39]);\n",
" CZ(qs[40], qs[41]);\n",
" SqrtX(qs[43]);\n",
" CZ(qs[44], qs[45]);\n",
" SqrtX(qs[47]);\n",
" CZ(qs[48], qs[49]);\n",
" T(qs[50]);\n",
" CZ(qs[51], qs[52]);\n",
" SqrtX(qs[53]);\n",
" T(qs[54]);\n",
" CZ(qs[55], qs[56]);\n",
" SqrtY(qs[58]);\n",
" T(qs[59]);\n",
" CZ(qs[60], qs[61]);\n",
" SqrtY(qs[62]);\n",
" SqrtY(qs[66]);\n",
" T(qs[67]);\n",
" CZ(qs[68], qs[69]);\n",
" SqrtX(qs[0]);\n",
" CZ(qs[1], qs[4]);\n",
" T(qs[2]);\n",
" CZ(qs[6], qs[13]);\n",
" T(qs[7]);\n",
" CZ(qs[8], qs[15]);\n",
" SqrtY(qs[9]);\n",
" CZ(qs[10], qs[17]);\n",
" SqrtX(qs[14]);\n",
" SqrtY(qs[18]);\n",
" T(qs[19]);\n",
" SqrtY(qs[20]);\n",
" CZ(qs[21], qs[31]);\n",
" T(qs[22]);\n",
" CZ(qs[23], qs[33]);\n",
" SqrtX(qs[24]);\n",
" CZ(qs[25], qs[35]);\n",
" T(qs[26]);\n",
" CZ(qs[27], qs[37]);\n",
" SqrtY(qs[28]);\n",
" CZ(qs[29], qs[39]);\n",
" SqrtX(qs[32]);\n",
" SqrtY(qs[36]);\n",
" SqrtY(qs[40]);\n",
" SqrtX(qs[41]);\n",
" CZ(qs[42], qs[51]);\n",
" T(qs[43]);\n",
" CZ(qs[44], qs[53]);\n",
" SqrtX(qs[45]);\n",
" CZ(qs[46], qs[55]);\n",
" T(qs[47]);\n",
" CZ(qs[48], qs[57]);\n",
" SqrtY(qs[49]);\n",
" SqrtX(qs[52]);\n",
" SqrtX(qs[56]);\n",
" T(qs[58]);\n",
" CZ(qs[59], qs[64]);\n",
" SqrtY(qs[60]);\n",
" CZ(qs[61], qs[66]);\n",
" T(qs[62]);\n",
" SqrtX(qs[68]);\n",
" SqrtY(qs[69]);\n",
" T(qs[0]);\n",
" SqrtX(qs[1]);\n",
" CZ(qs[2], qs[3]);\n",
" SqrtY(qs[4]);\n",
" SqrtY(qs[6]);\n",
" SqrtX(qs[8]);\n",
" CZ(qs[9], qs[10]);\n",
" SqrtX(qs[13]);\n",
" CZ(qs[14], qs[15]);\n",
" SqrtX(qs[17]);\n",
" CZ(qs[18], qs[19]);\n",
" T(qs[20]);\n",
" CZ(qs[21], qs[22]);\n",
" SqrtY(qs[23]);\n",
" T(qs[24]);\n",
" CZ(qs[25], qs[26]);\n",
" SqrtY(qs[27]);\n",
" T(qs[28]);\n",
" SqrtX(qs[29]);\n",
" SqrtY(qs[31]);\n",
" T(qs[32]);\n",
" CZ(qs[33], qs[34]);\n",
" SqrtY(qs[35]);\n",
" T(qs[36]);\n",
" CZ(qs[37], qs[38]);\n",
" SqrtY(qs[39]);\n",
" T(qs[40]);\n",
" CZ(qs[41], qs[42]);\n",
" SqrtY(qs[44]);\n",
" CZ(qs[45], qs[46]);\n",
" SqrtY(qs[48]);\n",
" T(qs[49]);\n",
" SqrtY(qs[51]);\n",
" CZ(qs[52], qs[53]);\n",
" SqrtY(qs[55]);\n",
" CZ(qs[56], qs[57]);\n",
" SqrtY(qs[59]);\n",
" T(qs[60]);\n",
" CZ(qs[61], qs[62]);\n",
" CZ(qs[64], qs[65]);\n",
" SqrtX(qs[66]);\n",
" T(qs[68]);\n",
" T(qs[69]);\n",
" T(qs[1]);\n",
" SqrtY(qs[2]);\n",
" CZ(qs[3], qs[8]);\n",
" T(qs[4]);\n",
" CZ(qs[5], qs[10]);\n",
" T(qs[6]);\n",
" SqrtX(qs[9]);\n",
" CZ(qs[12], qs[21]);\n",
" T(qs[13]);\n",
" CZ(qs[14], qs[23]);\n",
" SqrtY(qs[15]);\n",
" CZ(qs[16], qs[25]);\n",
" T(qs[17]);\n",
" CZ(qs[18], qs[27]);\n",
" SqrtX(qs[19]);\n",
" SqrtX(qs[22]);\n",
" SqrtX(qs[26]);\n",
" T(qs[29]);\n",
" CZ(qs[30], qs[40]);\n",
" T(qs[31]);\n",
" CZ(qs[32], qs[42]);\n",
" SqrtY(qs[33]);\n",
" CZ(qs[34], qs[44]);\n",
" T(qs[35]);\n",
" CZ(qs[36], qs[46]);\n",
" SqrtY(qs[37]);\n",
" CZ(qs[38], qs[48]);\n",
" T(qs[39]);\n",
" SqrtX(qs[41]);\n",
" SqrtX(qs[45]);\n",
" T(qs[51]);\n",
" CZ(qs[52], qs[59]);\n",
" SqrtY(qs[53]);\n",
" CZ(qs[54], qs[61]);\n",
" T(qs[55]);\n",
" CZ(qs[56], qs[63]);\n",
" SqrtY(qs[57]);\n",
" SqrtY(qs[62]);\n",
" SqrtY(qs[64]);\n",
" CZ(qs[65], qs[68]);\n",
" T(qs[66]);\n",
" T(qs[2]);\n",
" CZ(qs[3], qs[4]);\n",
" SqrtY(qs[5]);\n",
" CZ(qs[6], qs[7]);\n",
" SqrtY(qs[8]);\n",
" T(qs[9]);\n",
" CZ(qs[10], qs[11]);\n",
" SqrtY(qs[12]);\n",
" SqrtX(qs[14]);\n",
" CZ(qs[15], qs[16]);\n",
" SqrtY(qs[18]);\n",
" T(qs[19]);\n",
" SqrtX(qs[21]);\n",
" CZ(qs[22], qs[23]);\n",
" SqrtY(qs[25]);\n",
" CZ(qs[26], qs[27]);\n",
" CZ(qs[30], qs[31]);\n",
" SqrtY(qs[32]);\n",
" T(qs[33]);\n",
" CZ(qs[34], qs[35]);\n",
" SqrtY(qs[36]);\n",
" T(qs[37]);\n",
" CZ(qs[38], qs[39]);\n",
" SqrtY(qs[40]);\n",
" T(qs[41]);\n",
" CZ(qs[42], qs[43]);\n",
" SqrtY(qs[44]);\n",
" T(qs[45]);\n",
" CZ(qs[46], qs[47]);\n",
" SqrtY(qs[48]);\n",
" SqrtX(qs[52]);\n",
" CZ(qs[53], qs[54]);\n",
" SqrtY(qs[56]);\n",
" T(qs[57]);\n",
" CZ(qs[58], qs[59]);\n",
" SqrtY(qs[61]);\n",
" CZ(qs[62], qs[63]);\n",
" T(qs[64]);\n",
" CZ(qs[65], qs[66]);\n",
" SqrtY(qs[68]);\n",
" CZ(qs[0], qs[3]);\n",
" SqrtY(qs[4]);\n",
" T(qs[5]);\n",
" SqrtX(qs[6]);\n",
" CZ(qs[7], qs[14]);\n",
" T(qs[8]);\n",
" CZ(qs[9], qs[16]);\n",
" SqrtY(qs[10]);\n",
" CZ(qs[11], qs[18]);\n",
" T(qs[12]);\n",
" SqrtX(qs[15]);\n",
" CZ(qs[20], qs[30]);\n",
" T(qs[21]);\n",
" CZ(qs[22], qs[32]);\n",
" SqrtY(qs[23]);\n",
" CZ(qs[24], qs[34]);\n",
" T(qs[25]);\n",
" CZ(qs[26], qs[36]);\n",
" SqrtY(qs[27]);\n",
" CZ(qs[28], qs[38]);\n",
" SqrtX(qs[31]);\n",
" SqrtY(qs[35]);\n",
" SqrtX(qs[39]);\n",
" T(qs[40]);\n",
" CZ(qs[41], qs[50]);\n",
" SqrtX(qs[42]);\n",
" CZ(qs[43], qs[52]);\n",
" T(qs[44]);\n",
" CZ(qs[45], qs[54]);\n",
" SqrtY(qs[46]);\n",
" CZ(qs[47], qs[56]);\n",
" T(qs[48]);\n",
" SqrtX(qs[53]);\n",
" SqrtY(qs[58]);\n",
" SqrtX(qs[59]);\n",
" CZ(qs[60], qs[65]);\n",
" T(qs[61]);\n",
" CZ(qs[62], qs[67]);\n",
" SqrtX(qs[63]);\n",
" SqrtY(qs[66]);\n",
" T(qs[68]);\n",
" SqrtX(qs[0]);\n",
" SqrtY(qs[3]);\n",
" CZ(qs[4], qs[5]);\n",
" T(qs[6]);\n",
" CZ(qs[7], qs[8]);\n",
" SqrtY(qs[9]);\n",
" T(qs[10]);\n",
" SqrtY(qs[11]);\n",
" CZ(qs[12], qs[13]);\n",
" SqrtY(qs[14]);\n",
" T(qs[15]);\n",
" CZ(qs[16], qs[17]);\n",
" SqrtX(qs[18]);\n",
" SqrtY(qs[20]);\n",
" SqrtY(qs[22]);\n",
" CZ(qs[23], qs[24]);\n",
" SqrtY(qs[26]);\n",
" CZ(qs[27], qs[28]);\n",
" SqrtX(qs[30]);\n",
" CZ(qs[31], qs[32]);\n",
" SqrtX(qs[34]);\n",
" CZ(qs[35], qs[36]);\n",
" SqrtY(qs[38]);\n",
" T(qs[39]);\n",
" SqrtX(qs[41]);\n",
" T(qs[42]);\n",
" CZ(qs[43], qs[44]);\n",
" SqrtX(qs[45]);\n",
" T(qs[46]);\n",
" CZ(qs[47], qs[48]);\n",
" CZ(qs[50], qs[51]);\n",
" SqrtY(qs[52]);\n",
" T(qs[53]);\n",
" CZ(qs[54], qs[55]);\n",
" SqrtX(qs[56]);\n",
" T(qs[58]);\n",
" CZ(qs[59], qs[60]);\n",
" SqrtX(qs[62]);\n",
" T(qs[63]);\n",
" SqrtX(qs[65]);\n",
" CZ(qs[66], qs[67]);\n",
" T(qs[0]);\n",
" CZ(qs[2], qs[7]);\n",
" T(qs[3]);\n",
" CZ(qs[4], qs[9]);\n",
" SqrtY(qs[5]);\n",
" SqrtY(qs[8]);\n",
" T(qs[11]);\n",
" SqrtX(qs[12]);\n",
" CZ(qs[13], qs[22]);\n",
" T(qs[14]);\n",
" CZ(qs[15], qs[24]);\n",
" SqrtX(qs[16]);\n",
" CZ(qs[17], qs[26]);\n",
" T(qs[18]);\n",
" CZ(qs[19], qs[28]);\n",
" T(qs[20]);\n",
" SqrtX(qs[23]);\n",
" SqrtX(qs[27]);\n",
" T(qs[30]);\n",
" CZ(qs[31], qs[41]);\n",
" SqrtX(qs[32]);\n",
" CZ(qs[33], qs[43]);\n",
" T(qs[34]);\n",
" CZ(qs[35], qs[45]);\n",
" SqrtY(qs[36]);\n",
" CZ(qs[37], qs[47]);\n",
" T(qs[38]);\n",
" CZ(qs[39], qs[49]);\n",
" SqrtX(qs[44]);\n",
" SqrtX(qs[48]);\n",
" SqrtY(qs[50]);\n",
" CZ(qs[51], qs[58]);\n",
" T(qs[52]);\n",
" CZ(qs[53], qs[60]);\n",
" SqrtX(qs[54]);\n",
" CZ(qs[55], qs[62]);\n",
" T(qs[56]);\n",
" SqrtX(qs[59]);\n",
" T(qs[65]);\n",
" CZ(qs[66], qs[69]);\n",
" SqrtY(qs[67]);\n",
" CZ(qs[0], qs[1]);\n",
" SqrtX(qs[2]);\n",
" SqrtX(qs[4]);\n",
" T(qs[5]);\n",
" SqrtY(qs[7]);\n",
" CZ(qs[8], qs[9]);\n",
" T(qs[12]);\n",
" CZ(qs[13], qs[14]);\n",
" SqrtY(qs[15]);\n",
" T(qs[16]);\n",
" CZ(qs[17], qs[18]);\n",
" SqrtY(qs[19]);\n",
" CZ(qs[20], qs[21]);\n",
" SqrtX(qs[22]);\n",
" T(qs[23]);\n",
" CZ(qs[24], qs[25]);\n",
" SqrtY(qs[26]);\n",
" T(qs[27]);\n",
" CZ(qs[28], qs[29]);\n",
" SqrtY(qs[31]);\n",
" CZ(qs[32], qs[33]);\n",
" SqrtX(qs[35]);\n",
" CZ(qs[36], qs[37]);\n",
" SqrtY(qs[39]);\n",
" CZ(qs[40], qs[41]);\n",
" SqrtY(qs[43]);\n",
" CZ(qs[44], qs[45]);\n",
" SqrtX(qs[47]);\n",
" CZ(qs[48], qs[49]);\n",
" T(qs[50]);\n",
" CZ(qs[51], qs[52]);\n",
" SqrtX(qs[53]);\n",
" T(qs[54]);\n",
" CZ(qs[55], qs[56]);\n",
" SqrtY(qs[58]);\n",
" T(qs[59]);\n",
" CZ(qs[60], qs[61]);\n",
" SqrtX(qs[62]);\n",
" SqrtX(qs[66]);\n",
" T(qs[67]);\n",
" CZ(qs[68], qs[69]);\n",
" SqrtX(qs[0]);\n",
" CZ(qs[1], qs[4]);\n",
" T(qs[2]);\n",
" CZ(qs[6], qs[13]);\n",
" T(qs[7]);\n",
" CZ(qs[8], qs[15]);\n",
" SqrtX(qs[9]);\n",
" CZ(qs[10], qs[17]);\n",
" SqrtY(qs[14]);\n",
" SqrtY(qs[18]);\n",
" T(qs[19]);\n",
" SqrtX(qs[20]);\n",
" CZ(qs[21], qs[31]);\n",
" T(qs[22]);\n",
" CZ(qs[23], qs[33]);\n",
" SqrtX(qs[24]);\n",
" CZ(qs[25], qs[35]);\n",
" T(qs[26]);\n",
" CZ(qs[27], qs[37]);\n",
" SqrtY(qs[28]);\n",
" CZ(qs[29], qs[39]);\n",
" SqrtX(qs[32]);\n",
" SqrtY(qs[36]);\n",
" SqrtX(qs[40]);\n",
" SqrtY(qs[41]);\n",
" CZ(qs[42], qs[51]);\n",
" T(qs[43]);\n",
" CZ(qs[44], qs[53]);\n",
" SqrtX(qs[45]);\n",
" CZ(qs[46], qs[55]);\n",
" T(qs[47]);\n",
" CZ(qs[48], qs[57]);\n",
" SqrtX(qs[49]);\n",
" SqrtX(qs[52]);\n",
" SqrtX(qs[56]);\n",
" T(qs[58]);\n",
" CZ(qs[59], qs[64]);\n",
" SqrtY(qs[60]);\n",
" CZ(qs[61], qs[66]);\n",
" T(qs[62]);\n",
" SqrtX(qs[68]);\n",
" SqrtX(qs[69]);\n",
" T(qs[0]);\n",
" SqrtX(qs[1]);\n",
" CZ(qs[2], qs[3]);\n",
" SqrtY(qs[4]);\n",
" SqrtY(qs[6]);\n",
" SqrtY(qs[8]);\n",
" CZ(qs[9], qs[10]);\n",
" SqrtY(qs[13]);\n",
" CZ(qs[14], qs[15]);\n",
" SqrtX(qs[17]);\n",
" CZ(qs[18], qs[19]);\n",
" T(qs[20]);\n",
" CZ(qs[21], qs[22]);\n",
" SqrtX(qs[23]);\n",
" T(qs[24]);\n",
" CZ(qs[25], qs[26]);\n",
" SqrtY(qs[27]);\n",
" T(qs[28]);\n",
" SqrtX(qs[29]);\n",
" SqrtX(qs[31]);\n",
" T(qs[32]);\n",
" CZ(qs[33], qs[34]);\n",
" SqrtX(qs[35]);\n",
" T(qs[36]);\n",
" CZ(qs[37], qs[38]);\n",
" SqrtX(qs[39]);\n",
" T(qs[40]);\n",
" CZ(qs[41], qs[42]);\n",
" SqrtY(qs[44]);\n",
" CZ(qs[45], qs[46]);\n",
" SqrtX(qs[48]);\n",
" T(qs[49]);\n",
" SqrtY(qs[51]);\n",
" CZ(qs[52], qs[53]);\n",
" SqrtY(qs[55]);\n",
" CZ(qs[56], qs[57]);\n",
" SqrtX(qs[59]);\n",
" T(qs[60]);\n",
" CZ(qs[61], qs[62]);\n",
" CZ(qs[64], qs[65]);\n",
" SqrtX(qs[66]);\n",
" T(qs[68]);\n",
" T(qs[69]);\n",
" T(qs[1]);\n",
" SqrtY(qs[2]);\n",
" CZ(qs[3], qs[8]);\n",
" T(qs[4]);\n",
" CZ(qs[5], qs[10]);\n",
" T(qs[6]);\n",
" SqrtX(qs[9]);\n",
" CZ(qs[12], qs[21]);\n",
" T(qs[13]);\n",
" CZ(qs[14], qs[23]);\n",
" SqrtY(qs[15]);\n",
" CZ(qs[16], qs[25]);\n",
" T(qs[17]);\n",
" CZ(qs[18], qs[27]);\n",
" SqrtX(qs[19]);\n",
" SqrtX(qs[22]);\n",
" SqrtX(qs[26]);\n",
" T(qs[29]);\n",
" CZ(qs[30], qs[40]);\n",
" T(qs[31]);\n",
" CZ(qs[32], qs[42]);\n",
" SqrtX(qs[33]);\n",
" CZ(qs[34], qs[44]);\n",
" T(qs[35]);\n",
" CZ(qs[36], qs[46]);\n",
" SqrtY(qs[37]);\n",
" CZ(qs[38], qs[48]);\n",
" T(qs[39]);\n",
" SqrtX(qs[41]);\n",
" SqrtY(qs[45]);\n",
" T(qs[51]);\n",
" CZ(qs[52], qs[59]);\n",
" SqrtY(qs[53]);\n",
" CZ(qs[54], qs[61]);\n",
" T(qs[55]);\n",
" CZ(qs[56], qs[63]);\n",
" SqrtY(qs[57]);\n",
" SqrtX(qs[62]);\n",
" SqrtX(qs[64]);\n",
" CZ(qs[65], qs[68]);\n",
" T(qs[66]);\n",
" T(qs[2]);\n",
" CZ(qs[3], qs[4]);\n",
" SqrtX(qs[5]);\n",
" CZ(qs[6], qs[7]);\n",
" SqrtY(qs[8]);\n",
" T(qs[9]);\n",
" CZ(qs[10], qs[11]);\n",
" SqrtY(qs[12]);\n",
" SqrtY(qs[14]);\n",
" CZ(qs[15], qs[16]);\n",
" SqrtX(qs[18]);\n",
" T(qs[19]);\n",
" SqrtY(qs[21]);\n",
" CZ(qs[22], qs[23]);\n",
" SqrtY(qs[25]);\n",
" CZ(qs[26], qs[27]);\n",
" CZ(qs[30], qs[31]);\n",
" SqrtX(qs[32]);\n",
" T(qs[33]);\n",
" CZ(qs[34], qs[35]);\n",
" SqrtY(qs[36]);\n",
" T(qs[37]);\n",
" CZ(qs[38], qs[39]);\n",
" SqrtY(qs[40]);\n",
" T(qs[41]);\n",
" CZ(qs[42], qs[43]);\n",
" SqrtX(qs[44]);\n",
" T(qs[45]);\n",
" CZ(qs[46], qs[47]);\n",
" SqrtY(qs[48]);\n",
" SqrtX(qs[52]);\n",
" CZ(qs[53], qs[54]);\n",
" SqrtX(qs[56]);\n",
" T(qs[57]);\n",
" CZ(qs[58], qs[59]);\n",
" SqrtY(qs[61]);\n",
" CZ(qs[62], qs[63]);\n",
" T(qs[64]);\n",
" CZ(qs[65], qs[66]);\n",
" SqrtX(qs[68]);\n",
" CZ(qs[0], qs[3]);\n",
" SqrtY(qs[4]);\n",
" T(qs[5]);\n",
" SqrtY(qs[6]);\n",
" CZ(qs[7], qs[14]);\n",
" T(qs[8]);\n",
" CZ(qs[9], qs[16]);\n",
" SqrtX(qs[10]);\n",
" CZ(qs[11], qs[18]);\n",
" T(qs[12]);\n",
" SqrtX(qs[15]);\n",
" CZ(qs[20], qs[30]);\n",
" T(qs[21]);\n",
" CZ(qs[22], qs[32]);\n",
" SqrtY(qs[23]);\n",
" CZ(qs[24], qs[34]);\n",
" T(qs[25]);\n",
" CZ(qs[26], qs[36]);\n",
" SqrtY(qs[27]);\n",
" CZ(qs[28], qs[38]);\n",
" SqrtX(qs[31]);\n",
" SqrtY(qs[35]);\n",
" SqrtX(qs[39]);\n",
" T(qs[40]);\n",
" CZ(qs[41], qs[50]);\n",
" SqrtY(qs[42]);\n",
" CZ(qs[43], qs[52]);\n",
" T(qs[44]);\n",
" CZ(qs[45], qs[54]);\n",
" SqrtX(qs[46]);\n",
" CZ(qs[47], qs[56]);\n",
" T(qs[48]);\n",
" SqrtX(qs[53]);\n",
" SqrtX(qs[58]);\n",
" SqrtX(qs[59]);\n",
" CZ(qs[60], qs[65]);\n",
" T(qs[61]);\n",
" CZ(qs[62], qs[67]);\n",
" SqrtY(qs[63]);\n",
" SqrtY(qs[66]);\n",
" T(qs[68]);\n",
" SqrtX(qs[0]);\n",
" SqrtY(qs[3]);\n",
" CZ(qs[4], qs[5]);\n",
" T(qs[6]);\n",
" CZ(qs[7], qs[8]);\n",
" SqrtY(qs[9]);\n",
" T(qs[10]);\n",
" SqrtX(qs[11]);\n",
" CZ(qs[12], qs[13]);\n",
" SqrtY(qs[14]);\n",
" T(qs[15]);\n",
" CZ(qs[16], qs[17]);\n",
" SqrtX(qs[18]);\n",
" SqrtX(qs[20]);\n",
" SqrtX(qs[22]);\n",
" CZ(qs[23], qs[24]);\n",
" SqrtY(qs[26]);\n",
" CZ(qs[27], qs[28]);\n",
" SqrtY(qs[30]);\n",
" CZ(qs[31], qs[32]);\n",
" SqrtY(qs[34]);\n",
" CZ(qs[35], qs[36]);\n",
" SqrtY(qs[38]);\n",
" T(qs[39]);\n",
" SqrtY(qs[41]);\n",
" T(qs[42]);\n",
" CZ(qs[43], qs[44]);\n",
" SqrtX(qs[45]);\n",
" T(qs[46]);\n",
" CZ(qs[47], qs[48]);\n",
" CZ(qs[50], qs[51]);\n",
" SqrtY(qs[52]);\n",
" T(qs[53]);\n",
" CZ(qs[54], qs[55]);\n",
" SqrtY(qs[56]);\n",
" T(qs[58]);\n",
" CZ(qs[59], qs[60]);\n",
" SqrtY(qs[62]);\n",
" T(qs[63]);\n",
" SqrtY(qs[65]);\n",
" CZ(qs[66], qs[67]);\n",
" T(qs[0]);\n",
" CZ(qs[2], qs[7]);\n",
" T(qs[3]);\n",
" CZ(qs[4], qs[9]);\n",
" SqrtY(qs[5]);\n",
" SqrtY(qs[8]);\n",
" T(qs[11]);\n",
" SqrtX(qs[12]);\n",
" CZ(qs[13], qs[22]);\n",
" T(qs[14]);\n",
" CZ(qs[15], qs[24]);\n",
" SqrtY(qs[16]);\n",
" CZ(qs[17], qs[26]);\n",
" T(qs[18]);\n",
" CZ(qs[19], qs[28]);\n",
" T(qs[20]);\n",
" SqrtX(qs[23]);\n",
" SqrtY(qs[27]);\n",
" T(qs[30]);\n",
" CZ(qs[31], qs[41]);\n",
" SqrtX(qs[32]);\n",
" CZ(qs[33], qs[43]);\n",
" T(qs[34]);\n",
" CZ(qs[35], qs[45]);\n",
" SqrtX(qs[36]);\n",
" CZ(qs[37], qs[47]);\n",
" T(qs[38]);\n",
" CZ(qs[39], qs[49]);\n",
" SqrtX(qs[44]);\n",
" SqrtY(qs[48]);\n",
" SqrtY(qs[50]);\n",
" CZ(qs[51], qs[58]);\n",
" T(qs[52]);\n",
" CZ(qs[53], qs[60]);\n",
" SqrtX(qs[54]);\n",
" CZ(qs[55], qs[62]);\n",
" T(qs[56]);\n",
" SqrtY(qs[59]);\n",
" T(qs[65]);\n",
" CZ(qs[66], qs[69]);\n",
" SqrtX(qs[67]);\n",
" CZ(qs[0], qs[1]);\n",
" SqrtX(qs[2]);\n",
" SqrtY(qs[4]);\n",
" T(qs[5]);\n",
" SqrtX(qs[7]);\n",
" CZ(qs[8], qs[9]);\n",
" T(qs[12]);\n",
" CZ(qs[13], qs[14]);\n",
" SqrtX(qs[15]);\n",
" T(qs[16]);\n",
" CZ(qs[17], qs[18]);\n",
" SqrtY(qs[19]);\n",
" CZ(qs[20], qs[21]);\n",
" SqrtX(qs[22]);\n",
" T(qs[23]);\n",
" CZ(qs[24], qs[25]);\n",
" SqrtX(qs[26]);\n",
" T(qs[27]);\n",
" CZ(qs[28], qs[29]);\n",
" SqrtX(qs[31]);\n",
" CZ(qs[32], qs[33]);\n",
" SqrtX(qs[35]);\n",
" CZ(qs[36], qs[37]);\n",
" SqrtX(qs[39]);\n",
" CZ(qs[40], qs[41]);\n",
" SqrtY(qs[43]);\n",
" CZ(qs[44], qs[45]);\n",
" SqrtX(qs[47]);\n",
" CZ(qs[48], qs[49]);\n",
" T(qs[50]);\n",
" CZ(qs[51], qs[52]);\n",
" SqrtX(qs[53]);\n",
" T(qs[54]);\n",
" CZ(qs[55], qs[56]);\n",
" SqrtX(qs[58]);\n",
" T(qs[59]);\n",
" CZ(qs[60], qs[61]);\n",
" SqrtX(qs[62]);\n",
" SqrtX(qs[66]);\n",
" T(qs[67]);\n",
" CZ(qs[68], qs[69]);\n",
" SqrtY(qs[0]);\n",
" CZ(qs[1], qs[4]);\n",
" T(qs[2]);\n",
" CZ(qs[6], qs[13]);\n",
" T(qs[7]);\n",
" CZ(qs[8], qs[15]);\n",
" SqrtX(qs[9]);\n",
" CZ(qs[10], qs[17]);\n",
" SqrtY(qs[14]);\n",
" SqrtY(qs[18]);\n",
" T(qs[19]);\n",
" SqrtX(qs[20]);\n",
" CZ(qs[21], qs[31]);\n",
" T(qs[22]);\n",
" CZ(qs[23], qs[33]);\n",
" SqrtX(qs[24]);\n",
" CZ(qs[25], qs[35]);\n",
" T(qs[26]);\n",
" CZ(qs[27], qs[37]);\n",
" SqrtY(qs[28]);\n",
" CZ(qs[29], qs[39]);\n",
" SqrtX(qs[32]);\n",
" SqrtX(qs[36]);\n",
" SqrtY(qs[40]);\n",
" SqrtY(qs[41]);\n",
" CZ(qs[42], qs[51]);\n",
" T(qs[43]);\n",
" CZ(qs[44], qs[53]);\n",
" SqrtY(qs[45]);\n",
" CZ(qs[46], qs[55]);\n",
" T(qs[47]);\n",
" CZ(qs[48], qs[57]);\n",
" SqrtY(qs[49]);\n",
" SqrtX(qs[52]);\n",
" SqrtY(qs[56]);\n",
" T(qs[58]);\n",
" CZ(qs[59], qs[64]);\n",
" SqrtY(qs[60]);\n",
" CZ(qs[61], qs[66]);\n",
" T(qs[62]);\n",
" SqrtX(qs[68]);\n",
" SqrtX(qs[69]);\n",
" T(qs[0]);\n",
" SqrtY(qs[1]);\n",
" CZ(qs[2], qs[3]);\n",
" SqrtX(qs[4]);\n",
" SqrtX(qs[6]);\n",
" SqrtX(qs[8]);\n",
" CZ(qs[9], qs[10]);\n",
" SqrtY(qs[13]);\n",
" CZ(qs[14], qs[15]);\n",
" SqrtX(qs[17]);\n",
" CZ(qs[18], qs[19]);\n",
" T(qs[20]);\n",
" CZ(qs[21], qs[22]);\n",
" SqrtX(qs[23]);\n",
" T(qs[24]);\n",
" CZ(qs[25], qs[26]);\n",
" SqrtY(qs[27]);\n",
" T(qs[28]);\n",
" SqrtY(qs[29]);\n",
" SqrtX(qs[31]);\n",
" T(qs[32]);\n",
" CZ(qs[33], qs[34]);\n",
" SqrtX(qs[35]);\n",
" T(qs[36]);\n",
" CZ(qs[37], qs[38]);\n",
" SqrtY(qs[39]);\n",
" T(qs[40]);\n",
" CZ(qs[41], qs[42]);\n",
" SqrtX(qs[44]);\n",
" CZ(qs[45], qs[46]);\n",
" SqrtY(qs[48]);\n",
" T(qs[49]);\n",
" SqrtX(qs[51]);\n",
" CZ(qs[52], qs[53]);\n",
" SqrtX(qs[55]);\n",
" CZ(qs[56], qs[57]);\n",
" SqrtX(qs[59]);\n",
" T(qs[60]);\n",
" CZ(qs[61], qs[62]);\n",
" CZ(qs[64], qs[65]);\n",
" SqrtY(qs[66]);\n",
" T(qs[68]);\n",
" T(qs[69]);\n",
" T(qs[1]);\n",
" SqrtY(qs[2]);\n",
" CZ(qs[3], qs[8]);\n",
" T(qs[4]);\n",
" CZ(qs[5], qs[10]);\n",
" T(qs[6]);\n",
" SqrtY(qs[9]);\n",
" CZ(qs[12], qs[21]);\n",
" T(qs[13]);\n",
" CZ(qs[14], qs[23]);\n",
" SqrtX(qs[15]);\n",
" CZ(qs[16], qs[25]);\n",
" T(qs[17]);\n",
" CZ(qs[18], qs[27]);\n",
" SqrtY(qs[19]);\n",
" SqrtX(qs[22]);\n",
" SqrtX(qs[26]);\n",
" T(qs[29]);\n",
" CZ(qs[30], qs[40]);\n",
" T(qs[31]);\n",
" CZ(qs[32], qs[42]);\n",
" SqrtX(qs[33]);\n",
" CZ(qs[34], qs[44]);\n",
" T(qs[35]);\n",
" CZ(qs[36], qs[46]);\n",
" SqrtX(qs[37]);\n",
" CZ(qs[38], qs[48]);\n",
" T(qs[39]);\n",
" SqrtY(qs[41]);\n",
" SqrtX(qs[45]);\n",
" T(qs[51]);\n",
" CZ(qs[52], qs[59]);\n",
" SqrtX(qs[53]);\n",
" CZ(qs[54], qs[61]);\n",
" T(qs[55]);\n",
" CZ(qs[56], qs[63]);\n",
" SqrtX(qs[57]);\n",
" SqrtX(qs[62]);\n",
" SqrtY(qs[64]);\n",
" CZ(qs[65], qs[68]);\n",
" T(qs[66]);\n",
" T(qs[2]);\n",
" CZ(qs[3], qs[4]);\n",
" SqrtX(qs[5]);\n",
" CZ(qs[6], qs[7]);\n",
" SqrtY(qs[8]);\n",
" T(qs[9]);\n",
" CZ(qs[10], qs[11]);\n",
" SqrtY(qs[12]);\n",
" SqrtX(qs[14]);\n",
" CZ(qs[15], qs[16]);\n",
" SqrtX(qs[18]);\n",
" T(qs[19]);\n",
" SqrtY(qs[21]);\n",
" CZ(qs[22], qs[23]);\n",
" SqrtY(qs[25]);\n",
" CZ(qs[26], qs[27]);\n",
" CZ(qs[30], qs[31]);\n",
" SqrtX(qs[32]);\n",
" T(qs[33]);\n",
" CZ(qs[34], qs[35]);\n",
" SqrtY(qs[36]);\n",
" T(qs[37]);\n",
" CZ(qs[38], qs[39]);\n",
" SqrtX(qs[40]);\n",
" T(qs[41]);\n",
" CZ(qs[42], qs[43]);\n",
" SqrtX(qs[44]);\n",
" T(qs[45]);\n",
" CZ(qs[46], qs[47]);\n",
" SqrtX(qs[48]);\n",
" SqrtY(qs[52]);\n",
" CZ(qs[53], qs[54]);\n",
" SqrtX(qs[56]);\n",
" T(qs[57]);\n",
" CZ(qs[58], qs[59]);\n",
" SqrtY(qs[61]);\n",
" CZ(qs[62], qs[63]);\n",
" T(qs[64]);\n",
" CZ(qs[65], qs[66]);\n",
" SqrtX(qs[68]);\n",
" CZ(qs[0], qs[3]);\n",
" SqrtX(qs[4]);\n",
" T(qs[5]);\n",
" SqrtY(qs[6]);\n",
" CZ(qs[7], qs[14]);\n",
" T(qs[8]);\n",
" CZ(qs[9], qs[16]);\n",
" SqrtY(qs[10]);\n",
" CZ(qs[11], qs[18]);\n",
" T(qs[12]);\n",
" SqrtY(qs[15]);\n",
" CZ(qs[20], qs[30]);\n",
" T(qs[21]);\n",
" CZ(qs[22], qs[32]);\n",
" SqrtX(qs[23]);\n",
" CZ(qs[24], qs[34]);\n",
" T(qs[25]);\n",
" CZ(qs[26], qs[36]);\n",
" SqrtX(qs[27]);\n",
" CZ(qs[28], qs[38]);\n",
" SqrtX(qs[31]);\n",
" SqrtY(qs[35]);\n",
" SqrtY(qs[39]);\n",
" T(qs[40]);\n",
" CZ(qs[41], qs[50]);\n",
" SqrtY(qs[42]);\n",
" CZ(qs[43], qs[52]);\n",
" T(qs[44]);\n",
" CZ(qs[45], qs[54]);\n",
" SqrtY(qs[46]);\n",
" CZ(qs[47], qs[56]);\n",
" T(qs[48]);\n",
" SqrtY(qs[53]);\n",
" SqrtX(qs[58]);\n",
" SqrtX(qs[59]);\n",
" CZ(qs[60], qs[65]);\n",
" T(qs[61]);\n",
" CZ(qs[62], qs[67]);\n",
" SqrtY(qs[63]);\n",
" SqrtX(qs[66]);\n",
" T(qs[68]);\n",
" SqrtX(qs[0]);\n",
" SqrtX(qs[3]);\n",
" CZ(qs[4], qs[5]);\n",
" T(qs[6]);\n",
" CZ(qs[7], qs[8]);\n",
" SqrtX(qs[9]);\n",
" T(qs[10]);\n",
" SqrtY(qs[11]);\n",
" CZ(qs[12], qs[13]);\n",
" SqrtX(qs[14]);\n",
" T(qs[15]);\n",
" CZ(qs[16], qs[17]);\n",
" SqrtX(qs[18]);\n",
" SqrtX(qs[20]);\n",
" SqrtY(qs[22]);\n",
" CZ(qs[23], qs[24]);\n",
" SqrtY(qs[26]);\n",
" CZ(qs[27], qs[28]);\n",
" SqrtY(qs[30]);\n",
" CZ(qs[31], qs[32]);\n",
" SqrtY(qs[34]);\n",
" CZ(qs[35], qs[36]);\n",
" SqrtY(qs[38]);\n",
" T(qs[39]);\n",
" SqrtY(qs[41]);\n",
" T(qs[42]);\n",
" CZ(qs[43], qs[44]);\n",
" SqrtY(qs[45]);\n",
" T(qs[46]);\n",
" CZ(qs[47], qs[48]);\n",
" CZ(qs[50], qs[51]);\n",
" SqrtY(qs[52]);\n",
" T(qs[53]);\n",
" CZ(qs[54], qs[55]);\n",
" SqrtY(qs[56]);\n",
" T(qs[58]);\n",
" CZ(qs[59], qs[60]);\n",
" SqrtY(qs[62]);\n",
" T(qs[63]);\n",
" SqrtY(qs[65]);\n",
" CZ(qs[66], qs[67]);\n",
" T(qs[0]);\n",
" CZ(qs[2], qs[7]);\n",
" T(qs[3]);\n",
" CZ(qs[4], qs[9]);\n",
" SqrtY(qs[5]);\n",
" SqrtX(qs[8]);\n",
" T(qs[11]);\n",
" SqrtY(qs[12]);\n",
" CZ(qs[13], qs[22]);\n",
" T(qs[14]);\n",
" CZ(qs[15], qs[24]);\n",
" SqrtY(qs[16]);\n",
" CZ(qs[17], qs[26]);\n",
" T(qs[18]);\n",
" CZ(qs[19], qs[28]);\n",
" T(qs[20]);\n",
" SqrtY(qs[23]);\n",
" SqrtX(qs[27]);\n",
" T(qs[30]);\n",
" CZ(qs[31], qs[41]);\n",
" SqrtY(qs[32]);\n",
" CZ(qs[33], qs[43]);\n",
" T(qs[34]);\n",
" CZ(qs[35], qs[45]);\n",
" SqrtX(qs[36]);\n",
" CZ(qs[37], qs[47]);\n",
" T(qs[38]);\n",
" CZ(qs[39], qs[49]);\n",
" SqrtY(qs[44]);\n",
" SqrtY(qs[48]);\n",
" SqrtY(qs[50]);\n",
" CZ(qs[51], qs[58]);\n",
" T(qs[52]);\n",
" CZ(qs[53], qs[60]);\n",
" SqrtY(qs[54]);\n",
" CZ(qs[55], qs[62]);\n",
" T(qs[56]);\n",
" SqrtX(qs[59]);\n",
" T(qs[65]);\n",
" CZ(qs[66], qs[69]);\n",
" SqrtX(qs[67]);\n",
" CZ(qs[0], qs[1]);\n",
" SqrtY(qs[2]);\n",
" SqrtX(qs[4]);\n",
" T(qs[5]);\n",
" SqrtX(qs[7]);\n",
" CZ(qs[8], qs[9]);\n",
" T(qs[12]);\n",
" CZ(qs[13], qs[14]);\n",
" SqrtY(qs[15]);\n",
" T(qs[16]);\n",
" CZ(qs[17], qs[18]);\n",
" SqrtY(qs[19]);\n",
" CZ(qs[20], qs[21]);\n",
" SqrtX(qs[22]);\n",
" T(qs[23]);\n",
" CZ(qs[24], qs[25]);\n",
" SqrtX(qs[26]);\n",
" T(qs[27]);\n",
" CZ(qs[28], qs[29]);\n",
" SqrtY(qs[31]);\n",
" CZ(qs[32], qs[33]);\n",
" SqrtX(qs[35]);\n",
" CZ(qs[36], qs[37]);\n",
" SqrtY(qs[39]);\n",
" CZ(qs[40], qs[41]);\n",
" SqrtX(qs[43]);\n",
" CZ(qs[44], qs[45]);\n",
" SqrtX(qs[47]);\n",
" CZ(qs[48], qs[49]);\n",
" T(qs[50]);\n",
" CZ(qs[51], qs[52]);\n",
" SqrtY(qs[53]);\n",
" T(qs[54]);\n",
" CZ(qs[55], qs[56]);\n",
" SqrtX(qs[58]);\n",
" T(qs[59]);\n",
" CZ(qs[60], qs[61]);\n",
" SqrtX(qs[62]);\n",
" SqrtX(qs[66]);\n",
" T(qs[67]);\n",
" CZ(qs[68], qs[69]);\n",
" SqrtX(qs[0]);\n",
" CZ(qs[1], qs[4]);\n",
" T(qs[2]);\n",
" CZ(qs[6], qs[13]);\n",
" T(qs[7]);\n",
" CZ(qs[8], qs[15]);\n",
" SqrtY(qs[9]);\n",
" CZ(qs[10], qs[17]);\n",
" SqrtY(qs[14]);\n",
" SqrtY(qs[18]);\n",
" T(qs[19]);\n",
" SqrtX(qs[20]);\n",
" CZ(qs[21], qs[31]);\n",
" T(qs[22]);\n",
" CZ(qs[23], qs[33]);\n",
" SqrtY(qs[24]);\n",
" CZ(qs[25], qs[35]);\n",
" T(qs[26]);\n",
" CZ(qs[27], qs[37]);\n",
" SqrtX(qs[28]);\n",
" CZ(qs[29], qs[39]);\n",
" SqrtY(qs[32]);\n",
" SqrtX(qs[36]);\n",
" SqrtX(qs[40]);\n",
" SqrtX(qs[41]);\n",
" CZ(qs[42], qs[51]);\n",
" T(qs[43]);\n",
" CZ(qs[44], qs[53]);\n",
" SqrtX(qs[45]);\n",
" CZ(qs[46], qs[55]);\n",
" T(qs[47]);\n",
" CZ(qs[48], qs[57]);\n",
" SqrtX(qs[49]);\n",
" SqrtY(qs[52]);\n",
" SqrtY(qs[56]);\n",
" T(qs[58]);\n",
" CZ(qs[59], qs[64]);\n",
" SqrtX(qs[60]);\n",
" CZ(qs[61], qs[66]);\n",
" T(qs[62]);\n",
" SqrtY(qs[68]);\n",
" SqrtX(qs[69]);\n",
" T(qs[0]);\n",
" SqrtX(qs[1]);\n",
" CZ(qs[2], qs[3]);\n",
" SqrtY(qs[4]);\n",
" SqrtX(qs[6]);\n",
" SqrtY(qs[8]);\n",
" CZ(qs[9], qs[10]);\n",
" SqrtY(qs[13]);\n",
" CZ(qs[14], qs[15]);\n",
" SqrtX(qs[17]);\n",
" CZ(qs[18], qs[19]);\n",
" T(qs[20]);\n",
" CZ(qs[21], qs[22]);\n",
" SqrtY(qs[23]);\n",
" T(qs[24]);\n",
" CZ(qs[25], qs[26]);\n",
" SqrtX(qs[27]);\n",
" T(qs[28]);\n",
" SqrtX(qs[29]);\n",
" SqrtY(qs[31]);\n",
" T(qs[32]);\n",
" CZ(qs[33], qs[34]);\n",
" SqrtY(qs[35]);\n",
" T(qs[36]);\n",
" CZ(qs[37], qs[38]);\n",
" SqrtY(qs[39]);\n",
" T(qs[40]);\n",
" CZ(qs[41], qs[42]);\n",
" SqrtX(qs[44]);\n",
" CZ(qs[45], qs[46]);\n",
" SqrtY(qs[48]);\n",
" T(qs[49]);\n",
" SqrtY(qs[51]);\n",
" CZ(qs[52], qs[53]);\n",
" SqrtY(qs[55]);\n",
" CZ(qs[56], qs[57]);\n",
" SqrtY(qs[59]);\n",
" T(qs[60]);\n",
" CZ(qs[61], qs[62]);\n",
" CZ(qs[64], qs[65]);\n",
" SqrtY(qs[66]);\n",
" T(qs[68]);\n",
" T(qs[69]);\n",
" T(qs[1]);\n",
" SqrtY(qs[2]);\n",
" CZ(qs[3], qs[8]);\n",
" T(qs[4]);\n",
" CZ(qs[5], qs[10]);\n",
" T(qs[6]);\n",
" SqrtY(qs[9]);\n",
" CZ(qs[12], qs[21]);\n",
" T(qs[13]);\n",
" CZ(qs[14], qs[23]);\n",
" SqrtY(qs[15]);\n",
" CZ(qs[16], qs[25]);\n",
" T(qs[17]);\n",
" CZ(qs[18], qs[27]);\n",
" SqrtX(qs[19]);\n",
" SqrtY(qs[22]);\n",
" SqrtX(qs[26]);\n",
" T(qs[29]);\n",
" CZ(qs[30], qs[40]);\n",
" T(qs[31]);\n",
" CZ(qs[32], qs[42]);\n",
" SqrtY(qs[33]);\n",
" CZ(qs[34], qs[44]);\n",
" T(qs[35]);\n",
" CZ(qs[36], qs[46]);\n",
" SqrtX(qs[37]);\n",
" CZ(qs[38], qs[48]);\n",
" T(qs[39]);\n",
" SqrtY(qs[41]);\n",
" SqrtX(qs[45]);\n",
" T(qs[51]);\n",
" CZ(qs[52], qs[59]);\n",
" SqrtX(qs[53]);\n",
" CZ(qs[54], qs[61]);\n",
" T(qs[55]);\n",
" CZ(qs[56], qs[63]);\n",
" SqrtY(qs[57]);\n",
" SqrtX(qs[62]);\n",
" SqrtY(qs[64]);\n",
" CZ(qs[65], qs[68]);\n",
" T(qs[66]);\n",
" T(qs[2]);\n",
" CZ(qs[3], qs[4]);\n",
" SqrtY(qs[5]);\n",
" CZ(qs[6], qs[7]);\n",
" SqrtY(qs[8]);\n",
" T(qs[9]);\n",
" CZ(qs[10], qs[11]);\n",
" SqrtY(qs[12]);\n",
" SqrtX(qs[14]);\n",
" CZ(qs[15], qs[16]);\n",
" SqrtX(qs[18]);\n",
" T(qs[19]);\n",
" SqrtY(qs[21]);\n",
" CZ(qs[22], qs[23]);\n",
" SqrtY(qs[25]);\n",
" CZ(qs[26], qs[27]);\n",
" CZ(qs[30], qs[31]);\n",
" SqrtY(qs[32]);\n",
" T(qs[33]);\n",
" CZ(qs[34], qs[35]);\n",
" SqrtY(qs[36]);\n",
" T(qs[37]);\n",
" CZ(qs[38], qs[39]);\n",
" SqrtX(qs[40]);\n",
" T(qs[41]);\n",
" CZ(qs[42], qs[43]);\n",
" SqrtX(qs[44]);\n",
" T(qs[45]);\n",
" CZ(qs[46], qs[47]);\n",
" SqrtX(qs[48]);\n",
" SqrtX(qs[52]);\n",
" CZ(qs[53], qs[54]);\n",
" SqrtY(qs[56]);\n",
" T(qs[57]);\n",
" CZ(qs[58], qs[59]);\n",
" SqrtY(qs[61]);\n",
" CZ(qs[62], qs[63]);\n",
" T(qs[64]);\n",
" CZ(qs[65], qs[66]);\n",
" SqrtY(qs[68]);\n",
" CZ(qs[0], qs[3]);\n",
" SqrtX(qs[4]);\n",
" T(qs[5]);\n",
" SqrtX(qs[6]);\n",
" CZ(qs[7], qs[14]);\n",
" T(qs[8]);\n",
" CZ(qs[9], qs[16]);\n",
" SqrtY(qs[10]);\n",
" CZ(qs[11], qs[18]);\n",
" T(qs[12]);\n",
" SqrtY(qs[15]);\n",
" CZ(qs[20], qs[30]);\n",
" T(qs[21]);\n",
" CZ(qs[22], qs[32]);\n",
" SqrtX(qs[23]);\n",
" CZ(qs[24], qs[34]);\n",
" T(qs[25]);\n",
" CZ(qs[26], qs[36]);\n",
" SqrtX(qs[27]);\n",
" CZ(qs[28], qs[38]);\n",
" SqrtY(qs[31]);\n",
" SqrtX(qs[35]);\n",
" SqrtY(qs[39]);\n",
" T(qs[40]);\n",
" CZ(qs[41], qs[50]);\n",
" SqrtY(qs[42]);\n",
" CZ(qs[43], qs[52]);\n",
" T(qs[44]);\n",
" CZ(qs[45], qs[54]);\n",
" SqrtY(qs[46]);\n",
" CZ(qs[47], qs[56]);\n",
" T(qs[48]);\n",
" SqrtX(qs[53]);\n",
" SqrtX(qs[58]);\n",
" SqrtX(qs[59]);\n",
" CZ(qs[60], qs[65]);\n",
" T(qs[61]);\n",
" CZ(qs[62], qs[67]);\n",
" SqrtX(qs[63]);\n",
" SqrtX(qs[66]);\n",
" T(qs[68]);\n",
" SqrtX(qs[0]);\n",
" SqrtY(qs[3]);\n",
" CZ(qs[4], qs[5]);\n",
" T(qs[6]);\n",
" CZ(qs[7], qs[8]);\n",
" SqrtY(qs[9]);\n",
" T(qs[10]);\n",
" SqrtX(qs[11]);\n",
" CZ(qs[12], qs[13]);\n",
" SqrtY(qs[14]);\n",
" T(qs[15]);\n",
" CZ(qs[16], qs[17]);\n",
" SqrtX(qs[18]);\n",
" SqrtX(qs[20]);\n",
" SqrtY(qs[22]);\n",
" CZ(qs[23], qs[24]);\n",
" SqrtY(qs[26]);\n",
" CZ(qs[27], qs[28]);\n",
" SqrtX(qs[30]);\n",
" CZ(qs[31], qs[32]);\n",
" SqrtX(qs[34]);\n",
" CZ(qs[35], qs[36]);\n",
" SqrtX(qs[38]);\n",
" T(qs[39]);\n",
" SqrtX(qs[41]);\n",
" T(qs[42]);\n",
" CZ(qs[43], qs[44]);\n",
" SqrtY(qs[45]);\n",
" T(qs[46]);\n",
" CZ(qs[47], qs[48]);\n",
" CZ(qs[50], qs[51]);\n",
" SqrtY(qs[52]);\n",
" T(qs[53]);\n",
" CZ(qs[54], qs[55]);\n",
" SqrtX(qs[56]);\n",
" T(qs[58]);\n",
" CZ(qs[59], qs[60]);\n",
" SqrtX(qs[62]);\n",
" T(qs[63]);\n",
" SqrtX(qs[65]);\n",
" CZ(qs[66], qs[67]);\n",
" T(qs[0]);\n",
" CZ(qs[2], qs[7]);\n",
" T(qs[3]);\n",
" CZ(qs[4], qs[9]);\n",
" SqrtY(qs[5]);\n",
" SqrtX(qs[8]);\n",
" T(qs[11]);\n",
" SqrtY(qs[12]);\n",
" CZ(qs[13], qs[22]);\n",
" T(qs[14]);\n",
" CZ(qs[15], qs[24]);\n",
" SqrtX(qs[16]);\n",
" CZ(qs[17], qs[26]);\n",
" T(qs[18]);\n",
" CZ(qs[19], qs[28]);\n",
" T(qs[20]);\n",
" SqrtX(qs[23]);\n",
" SqrtX(qs[27]);\n",
" T(qs[30]);\n",
" CZ(qs[31], qs[41]);\n",
" SqrtY(qs[32]);\n",
" CZ(qs[33], qs[43]);\n",
" T(qs[34]);\n",
" CZ(qs[35], qs[45]);\n",
" SqrtY(qs[36]);\n",
" CZ(qs[37], qs[47]);\n",
" T(qs[38]);\n",
" CZ(qs[39], qs[49]);\n",
" SqrtY(qs[44]);\n",
" SqrtX(qs[48]);\n",
" SqrtY(qs[50]);\n",
" CZ(qs[51], qs[58]);\n",
" T(qs[52]);\n",
" CZ(qs[53], qs[60]);\n",
" SqrtX(qs[54]);\n",
" CZ(qs[55], qs[62]);\n",
" T(qs[56]);\n",
" SqrtY(qs[59]);\n",
" T(qs[65]);\n",
" CZ(qs[66], qs[69]);\n",
" SqrtX(qs[67]);\n",
" CZ(qs[0], qs[1]);\n",
" SqrtY(qs[2]);\n",
" SqrtY(qs[4]);\n",
" T(qs[5]);\n",
" SqrtY(qs[7]);\n",
" CZ(qs[8], qs[9]);\n",
" T(qs[12]);\n",
" CZ(qs[13], qs[14]);\n",
" SqrtX(qs[15]);\n",
" T(qs[16]);\n",
" CZ(qs[17], qs[18]);\n",
" SqrtX(qs[19]);\n",
" CZ(qs[20], qs[21]);\n",
" SqrtY(qs[22]);\n",
" T(qs[23]);\n",
" CZ(qs[24], qs[25]);\n",
" SqrtX(qs[26]);\n",
" T(qs[27]);\n",
" CZ(qs[28], qs[29]);\n",
" SqrtX(qs[31]);\n",
" CZ(qs[32], qs[33]);\n",
" SqrtX(qs[35]);\n",
" CZ(qs[36], qs[37]);\n",
" SqrtX(qs[39]);\n",
" CZ(qs[40], qs[41]);\n",
" SqrtX(qs[43]);\n",
" CZ(qs[44], qs[45]);\n",
" SqrtX(qs[47]);\n",
" CZ(qs[48], qs[49]);\n",
" T(qs[50]);\n",
" CZ(qs[51], qs[52]);\n",
" SqrtX(qs[53]);\n",
" T(qs[54]);\n",
" CZ(qs[55], qs[56]);\n",
" SqrtX(qs[58]);\n",
" T(qs[59]);\n",
" CZ(qs[60], qs[61]);\n",
" SqrtY(qs[62]);\n",
" SqrtY(qs[66]);\n",
" T(qs[67]);\n",
" CZ(qs[68], qs[69]);\n",
" SqrtX(qs[0]);\n",
" CZ(qs[1], qs[4]);\n",
" T(qs[2]);\n",
" CZ(qs[6], qs[13]);\n",
" T(qs[7]);\n",
" CZ(qs[8], qs[15]);\n",
" SqrtX(qs[9]);\n",
" CZ(qs[10], qs[17]);\n",
" SqrtY(qs[14]);\n",
" SqrtX(qs[18]);\n",
" T(qs[19]);\n",
" SqrtX(qs[20]);\n",
" CZ(qs[21], qs[31]);\n",
" T(qs[22]);\n",
" CZ(qs[23], qs[33]);\n",
" SqrtX(qs[24]);\n",
" CZ(qs[25], qs[35]);\n",
" T(qs[26]);\n",
" CZ(qs[27], qs[37]);\n",
" SqrtY(qs[28]);\n",
" CZ(qs[29], qs[39]);\n",
" SqrtX(qs[32]);\n",
" SqrtX(qs[36]);\n",
" SqrtX(qs[40]);\n",
" SqrtY(qs[41]);\n",
" CZ(qs[42], qs[51]);\n",
" T(qs[43]);\n",
" CZ(qs[44], qs[53]);\n",
" SqrtX(qs[45]);\n",
" CZ(qs[46], qs[55]);\n",
" T(qs[47]);\n",
" CZ(qs[48], qs[57]);\n",
" SqrtX(qs[49]);\n",
" SqrtX(qs[52]);\n",
" SqrtX(qs[56]);\n",
" T(qs[58]);\n",
" CZ(qs[59], qs[64]);\n",
" SqrtY(qs[60]);\n",
" CZ(qs[61], qs[66]);\n",
" T(qs[62]);\n",
" SqrtY(qs[68]);\n",
" SqrtX(qs[69]);\n",
" T(qs[0]);\n",
" SqrtY(qs[1]);\n",
" CZ(qs[2], qs[3]);\n",
" SqrtY(qs[4]);\n",
" SqrtY(qs[6]);\n",
" SqrtX(qs[8]);\n",
" CZ(qs[9], qs[10]);\n",
" SqrtX(qs[13]);\n",
" CZ(qs[14], qs[15]);\n",
" SqrtY(qs[17]);\n",
" CZ(qs[18], qs[19]);\n",
" T(qs[20]);\n",
" CZ(qs[21], qs[22]);\n",
" SqrtX(qs[23]);\n",
" T(qs[24]);\n",
" CZ(qs[25], qs[26]);\n",
" SqrtX(qs[27]);\n",
" T(qs[28]);\n",
" SqrtX(qs[29]);\n",
" SqrtY(qs[31]);\n",
" T(qs[32]);\n",
" CZ(qs[33], qs[34]);\n",
" SqrtX(qs[35]);\n",
" T(qs[36]);\n",
" CZ(qs[37], qs[38]);\n",
" SqrtX(qs[39]);\n",
" T(qs[40]);\n",
" CZ(qs[41], qs[42]);\n",
" SqrtY(qs[44]);\n",
" CZ(qs[45], qs[46]);\n",
" SqrtX(qs[48]);\n",
" T(qs[49]);\n",
" SqrtX(qs[51]);\n",
" CZ(qs[52], qs[53]);\n",
" SqrtX(qs[55]);\n",
" CZ(qs[56], qs[57]);\n",
" SqrtY(qs[59]);\n",
" T(qs[60]);\n",
" CZ(qs[61], qs[62]);\n",
" CZ(qs[64], qs[65]);\n",
" SqrtY(qs[66]);\n",
" T(qs[68]);\n",
" T(qs[69]);\n",
" T(qs[1]);\n",
" SqrtX(qs[2]);\n",
" CZ(qs[3], qs[8]);\n",
" T(qs[4]);\n",
" CZ(qs[5], qs[10]);\n",
" T(qs[6]);\n",
" SqrtX(qs[9]);\n",
" CZ(qs[12], qs[21]);\n",
" T(qs[13]);\n",
" CZ(qs[14], qs[23]);\n",
" SqrtY(qs[15]);\n",
" CZ(qs[16], qs[25]);\n",
" T(qs[17]);\n",
" CZ(qs[18], qs[27]);\n",
" SqrtY(qs[19]);\n",
" SqrtY(qs[22]);\n",
" SqrtX(qs[26]);\n",
" T(qs[29]);\n",
" CZ(qs[30], qs[40]);\n",
" T(qs[31]);\n",
" CZ(qs[32], qs[42]);\n",
" SqrtY(qs[33]);\n",
" CZ(qs[34], qs[44]);\n",
" T(qs[35]);\n",
" CZ(qs[36], qs[46]);\n",
" SqrtX(qs[37]);\n",
" CZ(qs[38], qs[48]);\n",
" T(qs[39]);\n",
" SqrtY(qs[41]);\n",
" SqrtY(qs[45]);\n",
" T(qs[51]);\n",
" CZ(qs[52], qs[59]);\n",
" SqrtX(qs[53]);\n",
" CZ(qs[54], qs[61]);\n",
" T(qs[55]);\n",
" CZ(qs[56], qs[63]);\n",
" SqrtY(qs[57]);\n",
" SqrtX(qs[62]);\n",
" SqrtY(qs[64]);\n",
" CZ(qs[65], qs[68]);\n",
" T(qs[66]);\n",
" T(qs[2]);\n",
" CZ(qs[3], qs[4]);\n",
" SqrtX(qs[5]);\n",
" CZ(qs[6], qs[7]);\n",
" SqrtY(qs[8]);\n",
" T(qs[9]);\n",
" CZ(qs[10], qs[11]);\n",
" SqrtX(qs[12]);\n",
" SqrtX(qs[14]);\n",
" CZ(qs[15], qs[16]);\n",
" SqrtY(qs[18]);\n",
" T(qs[19]);\n",
" SqrtY(qs[21]);\n",
" CZ(qs[22], qs[23]);\n",
" SqrtX(qs[25]);\n",
" CZ(qs[26], qs[27]);\n",
" CZ(qs[30], qs[31]);\n",
" SqrtX(qs[32]);\n",
" T(qs[33]);\n",
" CZ(qs[34], qs[35]);\n",
" SqrtX(qs[36]);\n",
" T(qs[37]);\n",
" CZ(qs[38], qs[39]);\n",
" SqrtX(qs[40]);\n",
" T(qs[41]);\n",
" CZ(qs[42], qs[43]);\n",
" SqrtY(qs[44]);\n",
" T(qs[45]);\n",
" CZ(qs[46], qs[47]);\n",
" SqrtY(qs[48]);\n",
" SqrtY(qs[52]);\n",
" CZ(qs[53], qs[54]);\n",
" SqrtX(qs[56]);\n",
" T(qs[57]);\n",
" CZ(qs[58], qs[59]);\n",
" SqrtY(qs[61]);\n",
" CZ(qs[62], qs[63]);\n",
" T(qs[64]);\n",
" CZ(qs[65], qs[66]);\n",
" SqrtX(qs[68]);\n",
" CZ(qs[0], qs[3]);\n",
" SqrtX(qs[4]);\n",
" T(qs[5]);\n",
" SqrtY(qs[6]);\n",
" CZ(qs[7], qs[14]);\n",
" T(qs[8]);\n",
" CZ(qs[9], qs[16]);\n",
" SqrtX(qs[10]);\n",
" CZ(qs[11], qs[18]);\n",
" T(qs[12]);\n",
" SqrtY(qs[15]);\n",
" CZ(qs[20], qs[30]);\n",
" T(qs[21]);\n",
" CZ(qs[22], qs[32]);\n",
" SqrtX(qs[23]);\n",
" CZ(qs[24], qs[34]);\n",
" T(qs[25]);\n",
" CZ(qs[26], qs[36]);\n",
" SqrtX(qs[27]);\n",
" CZ(qs[28], qs[38]);\n",
" SqrtX(qs[31]);\n",
" SqrtY(qs[35]);\n",
" SqrtY(qs[39]);\n",
" T(qs[40]);\n",
" CZ(qs[41], qs[50]);\n",
" SqrtY(qs[42]);\n",
" CZ(qs[43], qs[52]);\n",
" T(qs[44]);\n",
" CZ(qs[45], qs[54]);\n",
" SqrtY(qs[46]);\n",
" CZ(qs[47], qs[56]);\n",
" T(qs[48]);\n",
" SqrtX(qs[53]);\n",
" SqrtY(qs[58]);\n",
" SqrtX(qs[59]);\n",
" CZ(qs[60], qs[65]);\n",
" T(qs[61]);\n",
" CZ(qs[62], qs[67]);\n",
" SqrtY(qs[63]);\n",
" SqrtY(qs[66]);\n",
" T(qs[68]);\n",
" for i in 0 .. 70 - 1 {\n",
" H(qs[i]);\n",
" }\n",
"}\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Running the Resource Estimator\n",
"\n",
"Now we can estimate the resources required for the generated Q# program."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"result = qsharp.estimate(\"RunHardcodedCircuit()\")\n",
"result"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"jupyter": {
"outputs_hidden": false,
"source_hidden": false
},
"nteract": {
"transient": {
"deleting": false
}
}
},
"outputs": [],
"source": [
"logical_qubits = result['physicalCounts']['breakdown']['algorithmicLogicalQubits']\n",
"logical_depth = result['physicalCounts']['breakdown']['algorithmicLogicalDepth']\n",
"# We take the runtime of the circuit from the paper https://arxiv.org/pdf/1907.11217.pdf, table 1.\n",
"target_runtime = 580.7\n",
"target_rqops = logical_qubits * logical_depth / target_runtime\n",
"\n",
"print(f\"Logical qubits = {logical_qubits}\")\n",
"print(f\"Logical depth = {logical_depth}\")\n",
"print(f\"Target runtime = {target_runtime} seconds\")\n",
"print(f\"Target rQOPS = {target_rqops}\")\n",
"\n",
"print(f\"Execution time on hardware = {result['physicalCounts']['runtime'] * 1e-9} seconds\")\n",
"print(f\"rQOPS for execution on hardware = {result['physicalCounts']['rqops']}\")"
]
}
],
"metadata": {
"kernel_info": {
"name": "python3"
},
"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.7"
}
},
"nbformat": 4,
"nbformat_minor": 1
}microsoft/qdk
Publicmirrored from https://github.com/microsoft/qdkAvailable
samples/estimation/estimation-hardcoded-circuit.ipynb
1800lines · modepreview