From 93450cf5815974a2b083cd5161291b3fc3130e01 Mon Sep 17 00:00:00 2001 From: Asa Kosto Date: Fri, 13 Oct 2023 18:37:27 -0600 Subject: [PATCH 1/5] update? --- .vscode/settings.json | 6 +++++ tests/e2e_test.py | 54 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 60 insertions(+) create mode 100644 .vscode/settings.json create mode 100644 tests/e2e_test.py diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..cee7b74 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,6 @@ +{ + "[python]": { + "editor.defaultFormatter": "ms-python.black-formatter" + }, + "python.formatting.provider": "none" +} diff --git a/tests/e2e_test.py b/tests/e2e_test.py new file mode 100644 index 0000000..48bf375 --- /dev/null +++ b/tests/e2e_test.py @@ -0,0 +1,54 @@ +from pytket.phir.sharding.shard import Shard +from pytket.phir.sharding.sharder import Sharder +from tests.sample_data import QasmFiles, get_qasm_as_circuit + + +def parse_shards(shards: set[Shard]) -> list[list[list[int]]]: + """Parse a set of shards and return a circuit representation for placement.""" + layers: list[list[list[int]]] = [] + scheduled: set[int] = set() + num_shards: int = len(shards) + + while len(scheduled) < num_shards: + layer: list[list[int]] = [] + to_schedule: list[Shard] = [] + # get all the shards with no dependencies + for shard in enumerate(shards): + s = shard[1] + deps = s.depends_upon + # dependencies of the shard that have already been scheduled + scheduled_deps = deps.intersection(scheduled) + already_scheduled = s.ID in scheduled + + if scheduled_deps == deps and not already_scheduled: + to_schedule.append(s) + + for shard in to_schedule: # type: ignore [assignment] + op: list[int] = [] + # if there are more than 2 qubits used, treat them all as parallel sq ops + # one qubit will just be a single sq op + # 3 or more will be 3 or more parallel sq ops + if len(shard.qubits_used) != 2: # type: ignore [attr-defined, misc] + for qubit in shard.qubits_used: # type: ignore [attr-defined, misc] + op = qubit.index # type: ignore [misc] + layer.append(op) + else: + for qubit in shard.qubits_used: # type: ignore [attr-defined, misc] + op.append(qubit.index[0]) # type: ignore [misc] + layer.append(op) + + scheduled.add(shard.ID) # type: ignore [attr-defined, misc] + + layers.append(layer) + + return layers + + +if __name__ == "__main__": + circuit = get_qasm_as_circuit(QasmFiles.barrier_complex) + # check simple.qasm? + sharder = Sharder(circuit) + shards = sharder.shard() + shard_set = set(shards) + circuit_rep = parse_shards(shard_set) + # print(circuit_rep) From 786cdc55566551f72faa978c3cc997ef26f6ff4b Mon Sep 17 00:00:00 2001 From: Asa Kosto Date: Mon, 16 Oct 2023 09:53:10 -0600 Subject: [PATCH 2/5] end to end test --- pytket/phir/sharding/shards2ops.py | 42 ++++++++++++++++ tests/e2e_test.py | 81 +++++++++++++----------------- tests/sample_data.py | 4 +- 3 files changed, 80 insertions(+), 47 deletions(-) create mode 100644 pytket/phir/sharding/shards2ops.py diff --git a/pytket/phir/sharding/shards2ops.py b/pytket/phir/sharding/shards2ops.py new file mode 100644 index 0000000..f5ac699 --- /dev/null +++ b/pytket/phir/sharding/shards2ops.py @@ -0,0 +1,42 @@ +from pytket.phir.sharding.shard import Shard + + +def parse_shards_naive(shards: set[Shard]) -> list[list[list[int]]]: + """Parse a set of shards and return a circuit representation for placement.""" + layers: list[list[list[int]]] = [] + scheduled: set[int] = set() + num_shards: int = len(shards) + + while len(scheduled) < num_shards: + layer: list[list[int]] = [] + to_schedule: list[Shard] = [] + # get all the shards with no dependencies + for shard in enumerate(shards): + s = shard[1] + deps = s.depends_upon + # dependencies of the shard that have already been scheduled + scheduled_deps = deps.intersection(scheduled) + already_scheduled = s.ID in scheduled + + if scheduled_deps == deps and not already_scheduled: + to_schedule.append(s) + + for shard in to_schedule: # type: ignore [assignment] + op: list[int] = [] + # if there are more than 2 qubits used, treat them all as parallel sq ops + # one qubit will just be a single sq op + # 3 or more will be 3 or more parallel sq ops + if len(shard.qubits_used) != 2: # type: ignore [attr-defined, misc] # noqa: PLR2004 + for qubit in shard.qubits_used: # type: ignore [attr-defined, misc] + op = qubit.index # type: ignore [misc] + layer.append(op) + else: + for qubit in shard.qubits_used: # type: ignore [attr-defined, misc] + op.append(qubit.index[0]) # type: ignore [misc] + layer.append(op) + + scheduled.add(shard.ID) # type: ignore [attr-defined, misc] + + layers.append(layer) + + return layers diff --git a/tests/e2e_test.py b/tests/e2e_test.py index 48bf375..8c0c4e6 100644 --- a/tests/e2e_test.py +++ b/tests/e2e_test.py @@ -1,54 +1,43 @@ -from pytket.phir.sharding.shard import Shard +from pytket.phir.machine_class import Machine +from pytket.phir.placement import optimized_place +from pytket.phir.routing import transport_cost from pytket.phir.sharding.sharder import Sharder +from pytket.phir.sharding.shards2ops import parse_shards_naive from tests.sample_data import QasmFiles, get_qasm_as_circuit - -def parse_shards(shards: set[Shard]) -> list[list[list[int]]]: - """Parse a set of shards and return a circuit representation for placement.""" - layers: list[list[list[int]]] = [] - scheduled: set[int] = set() - num_shards: int = len(shards) - - while len(scheduled) < num_shards: - layer: list[list[int]] = [] - to_schedule: list[Shard] = [] - # get all the shards with no dependencies - for shard in enumerate(shards): - s = shard[1] - deps = s.depends_upon - # dependencies of the shard that have already been scheduled - scheduled_deps = deps.intersection(scheduled) - already_scheduled = s.ID in scheduled - - if scheduled_deps == deps and not already_scheduled: - to_schedule.append(s) - - for shard in to_schedule: # type: ignore [assignment] - op: list[int] = [] - # if there are more than 2 qubits used, treat them all as parallel sq ops - # one qubit will just be a single sq op - # 3 or more will be 3 or more parallel sq ops - if len(shard.qubits_used) != 2: # type: ignore [attr-defined, misc] - for qubit in shard.qubits_used: # type: ignore [attr-defined, misc] - op = qubit.index # type: ignore [misc] - layer.append(op) - else: - for qubit in shard.qubits_used: # type: ignore [attr-defined, misc] - op.append(qubit.index[0]) # type: ignore [misc] - layer.append(op) - - scheduled.add(shard.ID) # type: ignore [attr-defined, misc] - - layers.append(layer) - - return layers - - if __name__ == "__main__": - circuit = get_qasm_as_circuit(QasmFiles.barrier_complex) + # Right now this is the achine we will use because the biggest test circuit is n=10 + # The placement algo also assumes that the trap will always be fully loaded + # for example, if it is an n=10 trap, we will place and route as thought there are always 10 qubits # noqa: E501 + machine = Machine( + 10, + {0, 2, 4, 6, 8}, + 3.0, + 1.0, + 2.0, + ) # these are placeholder values + circuit = get_qasm_as_circuit(QasmFiles.bv_n10) # check simple.qasm? sharder = Sharder(circuit) shards = sharder.shard() shard_set = set(shards) - circuit_rep = parse_shards(shard_set) - # print(circuit_rep) + circuit_rep = parse_shards_naive(shard_set) + print(f"Circuit:\n{circuit_rep}") # noqa: T201 + initial_order = list(range(machine.size)) + layer_num = 0 + net_cost: float = 0.0 + for layer in circuit_rep: + order = optimized_place( + layer, + machine.tq_options, + machine.sq_options, + machine.size, + initial_order, + ) + print(f"Order for layer {layer_num}: {layer}\n{order}") # noqa: T201 + cost = transport_cost(initial_order, order, machine.qb_swap_time) + print(f"Approx. Cost: {cost} us") # noqa: T201 + layer_num += 1 + initial_order = order + net_cost += cost + print(f"Net Cost: {net_cost} us") # noqa: T201 diff --git a/tests/sample_data.py b/tests/sample_data.py index a9f26b6..19d527f 100644 --- a/tests/sample_data.py +++ b/tests/sample_data.py @@ -1,3 +1,4 @@ +import os from enum import Enum from pytket.circuit import Circuit @@ -26,4 +27,5 @@ def get_qasm_as_circuit(qasm_file: QasmFiles) -> Circuit: Returns: Corresponding tket circuit """ - return circuit_from_qasm(f"tests/data/qasm/{qasm_file.name}.qasm") + this_dir = os.path.dirname(os.path.abspath(__file__)) + return circuit_from_qasm(f"{this_dir}/data/qasm/{qasm_file.name}.qasm") From 30a17cc57e8d470533111445af600c451724e104 Mon Sep 17 00:00:00 2001 From: Asa Kosto Date: Mon, 16 Oct 2023 19:09:09 -0600 Subject: [PATCH 3/5] routing output and e2e test --- pytket/phir/pandr.py | 46 + pytket/phir/sharding/shards2ops.py | 6 +- tests/data/qasm/eztest.qasm | 13 + tests/data/qasm/n10_test.qasm | 14 + .../data/qasm/oned_brickwork_circuit_n20.qasm | 84 + tests/data/qasm/qv20_0.qasm | 1845 +++++++++++++++++ tests/e2e_test.py | 61 +- tests/sample_data.py | 4 + 8 files changed, 2035 insertions(+), 38 deletions(-) create mode 100644 pytket/phir/pandr.py create mode 100644 tests/data/qasm/eztest.qasm create mode 100644 tests/data/qasm/n10_test.qasm create mode 100644 tests/data/qasm/oned_brickwork_circuit_n20.qasm create mode 100644 tests/data/qasm/qv20_0.qasm diff --git a/pytket/phir/pandr.py b/pytket/phir/pandr.py new file mode 100644 index 0000000..3cd46f2 --- /dev/null +++ b/pytket/phir/pandr.py @@ -0,0 +1,46 @@ +import typing + +from pytket.phir.machine_class import Machine +from pytket.phir.placement import optimized_place +from pytket.phir.routing import transport_cost +from pytket.phir.sharding.sharder import Sharder +from pytket.phir.sharding.shards2ops import parse_shards_naive +from tests.sample_data import ( # type: ignore [attr-defined] + Circuit, + get_qasm_as_circuit, +) + + +@typing.no_type_check +def place_and_route(machine: Machine, qasm: Circuit): # give type hint for return + """Get all the routing info needed for PHIR generation.""" + circuit = get_qasm_as_circuit(qasm) + sharder = Sharder(circuit) + shards = sharder.shard() + shard_set = set(shards) + circuit_rep, shard_layers = parse_shards_naive(shard_set) + # print(circuit_rep) + initial_order = list(range(machine.size)) + layer_num = 0 + orders: list[list[int]] = [] + layer_costs: list[int] = [] + net_cost: float = 0.0 + for layer in circuit_rep: + order = optimized_place( + layer, + machine.tq_options, + machine.sq_options, + machine.size, + initial_order, + ) + orders.append(order) + cost = transport_cost(initial_order, order, machine.qb_swap_time) + layer_num += 1 + initial_order = order + layer_costs.append(cost) + net_cost += cost + + # don't need a custom error for this, "strict" parameter will throw error if needed + info = list(zip(orders, shard_layers, layer_costs, strict=True)) + + return info diff --git a/pytket/phir/sharding/shards2ops.py b/pytket/phir/sharding/shards2ops.py index f5ac699..8c3f78f 100644 --- a/pytket/phir/sharding/shards2ops.py +++ b/pytket/phir/sharding/shards2ops.py @@ -1,9 +1,10 @@ from pytket.phir.sharding.shard import Shard -def parse_shards_naive(shards: set[Shard]) -> list[list[list[int]]]: +def parse_shards_naive(shards: set[Shard]): # type: ignore [no-untyped-def] """Parse a set of shards and return a circuit representation for placement.""" layers: list[list[list[int]]] = [] + shards_in_layer: list[list[Shard]] = [] scheduled: set[int] = set() num_shards: int = len(shards) @@ -20,6 +21,7 @@ def parse_shards_naive(shards: set[Shard]) -> list[list[list[int]]]: if scheduled_deps == deps and not already_scheduled: to_schedule.append(s) + shards_in_layer.append(to_schedule) for shard in to_schedule: # type: ignore [assignment] op: list[int] = [] @@ -39,4 +41,4 @@ def parse_shards_naive(shards: set[Shard]) -> list[list[list[int]]]: layers.append(layer) - return layers + return layers, shards_in_layer diff --git a/tests/data/qasm/eztest.qasm b/tests/data/qasm/eztest.qasm new file mode 100644 index 0000000..5e2a040 --- /dev/null +++ b/tests/data/qasm/eztest.qasm @@ -0,0 +1,13 @@ +OPENQASM 2.0; +include "hqslib1.inc"; + +qreg q[3]; +creg c[3]; + +CX q[2], q[0]; +h q[0]; +h q[1]; +h q[2]; + + +measure q->c; diff --git a/tests/data/qasm/n10_test.qasm b/tests/data/qasm/n10_test.qasm new file mode 100644 index 0000000..0cca91d --- /dev/null +++ b/tests/data/qasm/n10_test.qasm @@ -0,0 +1,14 @@ +OPENQASM 2.0; +include "qelib1.inc"; + +creg c[12]; +qreg q[12]; + +cx q[0],q[1]; +cx q[2],q[3]; +cx q[4],q[5]; +cx q[5],q[7]; +cx q[7],q[8]; +cx q[9],q[10]; + +measure q->c; diff --git a/tests/data/qasm/oned_brickwork_circuit_n20.qasm b/tests/data/qasm/oned_brickwork_circuit_n20.qasm new file mode 100644 index 0000000..62cd4c8 --- /dev/null +++ b/tests/data/qasm/oned_brickwork_circuit_n20.qasm @@ -0,0 +1,84 @@ +OPENQASM 2.0; +include "qelib1.inc"; +qreg q[20]; +creg c[20]; +h q[0]; +h q[1]; +h q[2]; +h q[3]; +h q[4]; +h q[5]; +h q[6]; +h q[7]; +h q[8]; +h q[9]; +h q[10]; +h q[11]; +h q[12]; +h q[13]; +h q[14]; +h q[15]; +h q[16]; +h q[17]; +h q[18]; +h q[19]; +rzz(-pi/8) q[0],q[1]; +rzz(-pi/8) q[2],q[3]; +rzz(-pi/8) q[4],q[5]; +rzz(-pi/8) q[6],q[7]; +rzz(-pi/8) q[8],q[9]; +rzz(-pi/8) q[10],q[11]; +rzz(-pi/8) q[12],q[13]; +rzz(-pi/8) q[14],q[15]; +rzz(-pi/8) q[16],q[17]; +rzz(-pi/8) q[18],q[19]; +rzz(-pi/8) q[1],q[2]; +rzz(-pi/8) q[3],q[4]; +rzz(-pi/8) q[5],q[6]; +rzz(-pi/8) q[7],q[8]; +rzz(-pi/8) q[9],q[10]; +rzz(-pi/8) q[11],q[12]; +rzz(-pi/8) q[13],q[14]; +rzz(-pi/8) q[15],q[16]; +rzz(-pi/8) q[17],q[18]; +rzz(-pi/8) q[0],q[19]; +h q[0]; +h q[1]; +h q[2]; +h q[3]; +h q[4]; +h q[5]; +h q[6]; +h q[7]; +h q[8]; +h q[9]; +h q[10]; +h q[11]; +h q[12]; +h q[13]; +h q[14]; +h q[15]; +h q[16]; +h q[17]; +h q[18]; +h q[19]; +measure q[0] -> c[0]; +measure q[1] -> c[1]; +measure q[2] -> c[2]; +measure q[3] -> c[3]; +measure q[4] -> c[4]; +measure q[5] -> c[5]; +measure q[6] -> c[6]; +measure q[7] -> c[7]; +measure q[8] -> c[8]; +measure q[9] -> c[9]; +measure q[10] -> c[10]; +measure q[11] -> c[11]; +measure q[12] -> c[12]; +measure q[13] -> c[13]; +measure q[14] -> c[14]; +measure q[15] -> c[15]; +measure q[16] -> c[16]; +measure q[17] -> c[17]; +measure q[18] -> c[18]; +measure q[19] -> c[19]; diff --git a/tests/data/qasm/qv20_0.qasm b/tests/data/qasm/qv20_0.qasm new file mode 100644 index 0000000..e64261d --- /dev/null +++ b/tests/data/qasm/qv20_0.qasm @@ -0,0 +1,1845 @@ +OPENQASM 2.0; +include "qelib1.inc"; +qreg q[20]; +creg cr[20]; +u3(1.8637251312542435,2.6815798822464902,2.662767871785631) q[0]; +u3(1.8674457293220441,2.519233243094337,-2.549011657267687) q[1]; +cx q[0],q[1]; +u3(0.5273282662394702,1.5707963267948966,1.5707963267948966) q[0]; +u2(-3.141592653589793,0.19776462831482955) q[1]; +cx q[0],q[1]; +u3(0.272127061680424,-4.440892098500626e-16,4.71238898038469) q[0]; +u2(0.0,4.71238898038469) q[1]; +cx q[0],q[1]; +u3(1.380594493892929,-3.5215017155486863,2.4054982383948844) q[0]; +u3(2.192554238556369,3.363332259882601,-3.522911646786208) q[1]; +cx q[0],q[1]; +u3(0.4364272921859102,1.5707963267948966,1.5707963267948966) q[0]; +u2(-3.141592653589793,0.43867209004912056) q[1]; +cx q[0],q[1]; +u3(0.3381857610836023,3.141592653589793,1.5707963267948963) q[0]; +u2(0.0,4.71238898038469) q[1]; +cx q[0],q[1]; +u3(2.437443824369108,4.092900708037956,5.44076271315989) q[0]; +u3(1.4513277292400042,-3.531873075052332,-3.3546244428992003) q[1]; +u3(0.9858482579786544,-3.391686663126479,-0.35032912747004774) q[2]; +u3(1.578867183062987,-0.6563301836600957,4.676714003287018) q[3]; +cx q[2],q[3]; +u3(0.5715342575669278,1.5707963267948966,1.5707963267948966) q[2]; +u2(-3.141592653589793,0.26882924157323274) q[3]; +cx q[2],q[3]; +u3(0.19493321983056358,3.141592653589794,1.5707963267948966) q[2]; +u2(0.0,4.71238898038469) q[3]; +cx q[2],q[3]; +u3(1.4719556053419387,0.574343476941178,-0.688223964119759) q[2]; +u3(1.5873555972353346,-2.6678403344443953,2.0072178427178247) q[3]; +u3(2.361451147037991,0.7373585648547192,-4.557541924527009) q[4]; +u3(0.9838856147251764,-0.9864855393096734,1.8209224882633666) q[5]; +cx q[4],q[5]; +u3(0.5305873750084744,1.5707963267948966,1.5707963267948966) q[4]; +u2(-3.141592653589793,0.6728675759309208) q[5]; +cx q[4],q[5]; +u3(0.07142790045784664,3.141592653589794,1.5707963267948954) q[4]; +u2(0.0,4.71238898038469) q[5]; +cx q[4],q[5]; +u3(1.3974441743325803,1.124730691356193,5.504454048184277) q[4]; +cx q[2],q[4]; +u3(1.0888196525676344,1.5707963267948966,1.5707963267948966) q[2]; +u2(-3.141592653589793,0.18024254328594758) q[4]; +cx q[2],q[4]; +u3(0.7418546519180982,3.141592653589793,1.5707963267948963) q[2]; +u2(0.0,4.71238898038469) q[4]; +cx q[2],q[4]; +u3(1.2334791115922112,0.26798179249092247,-0.7673091064178599) q[2]; +u3(0.4674681128785189,0.6680406000252006,0.637132599610386) q[4]; +u3(1.5487640266506806,2.7039520576571476,-5.772345395394945) q[5]; +u3(2.51925246632341,1.4219571849272856,4.513553714943588) q[6]; +u3(1.4189993079939276,-0.5803955826999166,0.5575683235560353) q[7]; +cx q[6],q[7]; +u3(0.8287223902581562,1.5707963267948968,1.5707963267948968) q[6]; +u2(-3.141592653589793,0.5868503107551939) q[7]; +cx q[6],q[7]; +u3(0.19343963494875122,0.0,4.712388980384691) q[6]; +u2(0.0,4.71238898038469) q[7]; +cx q[6],q[7]; +u3(2.487997707629159,1.8109464011473775,2.4724658718316745) q[6]; +u3(0.5517028613918874,1.6968576817104155,-1.3955275217157173) q[7]; +u3(0.9971290130532074,0.24747360215534076,1.515339140690898) q[8]; +u3(1.6096764254742029,3.9692706261063595,-1.6653841269692968) q[9]; +cx q[8],q[9]; +u3(0.2759591508793166,1.570796326794897,1.5707963267948966) q[8]; +u2(-3.141592653589793,0.4022141000082833) q[9]; +cx q[8],q[9]; +u3(0.012543177931552804,3.1415926535898056,1.5707963267948841) q[8]; +u2(0.0,4.71238898038469) q[9]; +cx q[8],q[9]; +u3(0.8118982505779508,-7.056097319408151,-6.106373498739398) q[8]; +cx q[8],q[6]; +u2(-3.141592653589793,0.3360628661148706) q[6]; +u3(0.5716304824288506,1.5707963267948966,1.5707963267948966) q[8]; +cx q[8],q[6]; +u2(0.0,4.71238898038469) q[6]; +u3(0.03971371158641344,3.141592653589795,1.5707963267948948) q[8]; +cx q[8],q[6]; +u3(2.3615269979618154,2.547547738889194,5.844453675732931) q[6]; +u3(2.0097896091091982,3.038990729526993,-1.4547146441052996) q[8]; +u3(2.3587362856914442,0.7160545512765275,-2.7176482896950485) q[9]; +u3(1.7967204556650707,5.1648117669671505,0.5018575185547034) q[10]; +u3(0.7413990780813838,1.3636245061937289,2.7791322016358637) q[11]; +cx q[10],q[11]; +u3(1.0058816164026039,1.5707963267948968,1.5707963267948968) q[10]; +u2(-3.141592653589793,0.11510029357887497) q[11]; +cx q[10],q[11]; +u3(0.09948962945849597,3.141592653589794,1.5707963267948957) q[10]; +u2(0.0,4.71238898038469) q[11]; +cx q[10],q[11]; +u3(1.722040702552897,-1.525024996575583,-3.6357872994287836) q[10]; +u3(1.7223896591642764,1.4743613656345265,-2.21256441500453) q[11]; +u3(2.290112786630881,-4.262045874995948,-0.7523987793643367) q[12]; +u3(1.8709135231698306,-2.9500419985693105,0.4864511892879453) q[13]; +cx q[12],q[13]; +u3(1.0484031090879609,1.5707963267948966,1.5707963267948966) q[12]; +u2(-3.141592653589793,0.33152524276598605) q[13]; +cx q[12],q[13]; +u3(0.16709853121590587,3.1415926535897936,1.5707963267948961) q[12]; +u2(0.0,4.71238898038469) q[13]; +cx q[12],q[13]; +u3(1.613360172761136,-0.9379929722889055,3.45435591862886) q[12]; +cx q[12],q[7]; +u3(0.48988104402606364,1.5707963267948966,1.5707963267948966) q[12]; +u3(0.26886241394968763,1.2641759958902792,1.6072785965635754) q[13]; +cx q[10],q[13]; +u3(0.9945721116234608,1.5707963267948966,1.5707963267948966) q[10]; +u2(-3.141592653589793,0.4886870205162199) q[13]; +cx q[10],q[13]; +u3(0.38896648514312804,3.141592653589793,1.5707963267948963) q[10]; +u2(0.0,4.71238898038469) q[13]; +cx q[10],q[13]; +u3(3.0363900026825563,-0.7211381098898562,4.851317233645021) q[10]; +cx q[10],q[6]; +u3(1.165726741537013,1.5707963267948966,1.5707963267948966) q[10]; +u3(0.4413905581430359,-2.5451132614140564,5.1025319632160295) q[13]; +u2(-3.141592653589793,0.17943785971846382) q[6]; +cx q[10],q[6]; +u3(0.16962537257574067,3.141592653589794,1.5707963267948966) q[10]; +u2(0.0,4.71238898038469) q[6]; +cx q[10],q[6]; +u3(1.6884029044127489,1.038068751399003,-0.6135165986258424) q[10]; +u3(1.7133152920807038,-1.3440201010710744,0.5115600593993108) q[6]; +u2(-3.141592653589793,0.7815716016483254) q[7]; +cx q[12],q[7]; +u3(0.05092107967912012,3.141592653589793,1.5707963267948966) q[12]; +u2(0.0,4.71238898038469) q[7]; +cx q[12],q[7]; +u3(0.9007217853030318,-1.5357718225648544,-1.1751657019226573) q[12]; +cx q[2],q[12]; +u2(-3.141592653589793,0.01871493318629014) q[12]; +u3(0.3448687904804986,1.5707963267948968,1.5707963267948968) q[2]; +cx q[2],q[12]; +u2(0.0,4.71238898038469) q[12]; +u3(0.0418730920371007,-2.220446049250313e-15,4.7123889803846915) q[2]; +cx q[2],q[12]; +u3(1.8258301993389052,-2.360960996018017,4.2828288088702715) q[12]; +u3(2.3066611601632427,-0.6652852155489479,-1.9338656403480048) q[2]; +cx q[2],q[6]; +u3(0.7219786509403774,1.5707963267948968,1.5707963267948968) q[2]; +u2(-3.141592653589793,0.10399151660426553) q[6]; +cx q[2],q[6]; +u3(0.2606644343807065,3.141592653589793,1.5707963267948966) q[2]; +u2(0.0,4.71238898038469) q[6]; +cx q[2],q[6]; +u3(0.9071274663740461,-1.0133069277440732,-3.9112639431048404) q[2]; +u3(2.1584789159591224,-1.7790830036323775,-0.28176485217561453) q[6]; +u3(1.4659987364265588,1.997302785095084,2.2476656708518825) q[7]; +u3(2.5342851311068113,1.8413719650426008,-1.4386996281945457) q[14]; +u3(1.9967425134207257,0.16378819180482296,5.670963196932715) q[15]; +cx q[14],q[15]; +u3(0.7991209588807661,1.5707963267948966,1.5707963267948966) q[14]; +u2(-3.141592653589793,0.3274718732191093) q[15]; +cx q[14],q[15]; +u3(0.5819075693727312,3.141592653589793,1.5707963267948963) q[14]; +u2(0.0,4.71238898038469) q[15]; +cx q[14],q[15]; +u3(0.4389627698408898,-4.545779284848296,-2.060533391556696) q[14]; +u3(1.3394586064479417,-0.08046530834006504,-5.134653875122683) q[15]; +cx q[15],q[14]; +u2(-3.141592653589793,0.37166058084754994) q[14]; +u3(0.477769238014963,1.5707963267948966,1.5707963267948966) q[15]; +cx q[15],q[14]; +u2(0.0,4.71238898038469) q[14]; +u3(0.06664504683480585,-8.881784197001252e-16,4.7123889803846915) q[15]; +cx q[15],q[14]; +u3(0.36789704533666145,4.07942815716247,7.403121426656304) q[14]; +u3(1.2103913648254194,1.8989119772191942,1.3208049999406808) q[15]; +cx q[15],q[0]; +u2(-3.141592653589793,0.3900384761608571) q[0]; +u3(0.5287551459450273,1.5707963267948963,1.5707963267948968) q[15]; +cx q[15],q[0]; +u2(0.0,4.71238898038469) q[0]; +u3(0.052845933748381556,3.1415926535897962,1.5707963267948934) q[15]; +cx q[15],q[0]; +u3(1.9716929145071473,-5.906656826435121,-6.51665827502579) q[0]; +u3(2.0890433182051913,-3.7638364944493747,-3.5355005066323164) q[15]; +u3(2.6129340086364303,-1.96679850914165,-0.07693760098943592) q[16]; +u3(1.9611009828393264,3.167433277934728,-2.6456239021192745) q[17]; +cx q[16],q[17]; +u3(1.0615121836973593,1.5707963267948966,1.5707963267948966) q[16]; +u2(-3.141592653589793,0.3828655817255979) q[17]; +cx q[16],q[17]; +u3(0.19620507096344378,3.141592653589794,1.5707963267948966) q[16]; +u2(0.0,4.71238898038469) q[17]; +cx q[16],q[17]; +u3(1.9597712402336027,-4.11431456692404,-5.738716395897934) q[16]; +cx q[16],q[5]; +u3(0.6305516074698438,1.5707963267948966,1.5707963267948966) q[16]; +u3(0.23109947582003362,1.8517754263942243,3.5940068118878874) q[17]; +u2(-3.141592653589793,0.11404979688069772) q[5]; +cx q[16],q[5]; +u3(0.31560763446564033,3.1415926535897936,1.570796326794897) q[16]; +u2(0.0,4.71238898038469) q[5]; +cx q[16],q[5]; +u3(0.9603075516509669,1.3852061435855472,3.1733899242780055) q[16]; +u3(2.3078844913997227,-4.2937733762979065,1.0448590109476932) q[5]; +cx q[5],q[16]; +u2(-3.141592653589793,0.5870827058958028) q[16]; +u3(0.46389471912197766,1.5707963267948966,1.5707963267948966) q[5]; +cx q[5],q[16]; +u2(0.0,4.71238898038469) q[16]; +u3(0.2252062527750559,3.141592653589794,1.5707963267948957) q[5]; +cx q[5],q[16]; +u3(2.4324845663161385,0.853982809284723,4.432273502389345) q[16]; +u3(1.5789242077007215,-1.5491424635356448,-2.269051581970009) q[5]; +cx q[9],q[17]; +u2(-3.141592653589793,0.20751317516187218) q[17]; +u3(0.8391171367660238,1.5707963267948966,1.5707963267948966) q[9]; +cx q[9],q[17]; +u2(0.0,4.71238898038469) q[17]; +u3(0.2578697347858563,3.141592653589793,1.5707963267948966) q[9]; +cx q[9],q[17]; +u3(1.262374822677247,1.1553858848345535,1.8171464704164262) q[17]; +cx q[17],q[8]; +u3(1.0511022219782649,1.5707963267948966,1.5707963267948966) q[17]; +u2(-3.141592653589793,0.4686566602967541) q[8]; +cx q[17],q[8]; +u3(0.450489427482906,3.141592653589793,1.5707963267948963) q[17]; +u2(0.0,4.71238898038469) q[8]; +cx q[17],q[8]; +u3(1.4132860394629694,-3.4303244117003975,-6.109875291111566) q[17]; +cx q[17],q[10]; +u2(-3.141592653589793,0.09379256588077034) q[10]; +u3(0.9047918574995163,1.5707963267948966,1.5707963267948966) q[17]; +cx q[17],q[10]; +u2(0.0,4.71238898038469) q[10]; +u3(0.3272617006723928,3.141592653589793,1.5707963267948963) q[17]; +cx q[17],q[10]; +u3(1.7016113407145133,1.836553887437623,1.8021874866065124) q[10]; +u3(2.0844068367284865,-0.9457411016141222,-3.316526309430775) q[17]; +u3(0.991706950860076,-1.7337750434457486,-3.487354236382095) q[8]; +cx q[16],q[8]; +u3(0.34496589878764256,1.5707963267948966,1.570796326794897) q[16]; +u2(-3.141592653589793,0.14869125004002215) q[8]; +cx q[16],q[8]; +u3(0.049467596716347186,3.141592653589795,1.5707963267948948) q[16]; +u2(0.0,4.71238898038469) q[8]; +cx q[16],q[8]; +u3(0.7145371401143309,-4.8454909519049245,0.6421505632498881) q[16]; +cx q[2],q[16]; +u2(-3.141592653589793,0.04720652074421339) q[16]; +u3(0.9219638703439033,1.5707963267948966,1.5707963267948966) q[2]; +cx q[2],q[16]; +u2(0.0,4.71238898038469) q[16]; +u3(0.32579021568885996,3.141592653589794,1.5707963267948966) q[2]; +cx q[2],q[16]; +u3(2.202222712823438,2.235910492696776,3.6974585170321355) q[16]; +u3(2.7068186702039663,5.13239383675663,-2.485040092809798) q[2]; +u3(1.1769904071768997,-2.9266677267498067,-2.9395782013704865) q[8]; +u3(1.6289032900871045,1.5868380046407482,1.8036505899263084) q[9]; +cx q[13],q[9]; +u3(0.38100297204699035,1.5707963267948966,1.5707963267948966) q[13]; +u2(-3.141592653589793,0.035895279700108196) q[9]; +cx q[13],q[9]; +u3(0.0932121706191841,-8.881784197001252e-16,4.712388980384691) q[13]; +u2(0.0,4.71238898038469) q[9]; +cx q[13],q[9]; +u3(0.7288543179156494,7.09420741587673,1.1449114895562984) q[13]; +cx q[13],q[5]; +u3(0.8000810336487371,1.5707963267948966,1.5707963267948966) q[13]; +u2(-3.141592653589793,0.2806682375616649) q[5]; +cx q[13],q[5]; +u3(0.3626409767662315,3.141592653589793,1.5707963267948963) q[13]; +u2(0.0,4.71238898038469) q[5]; +cx q[13],q[5]; +u3(0.4243966995204779,-0.04504955321443663,1.4677899313413874) q[13]; +u3(1.3055703888300976,-0.6656202992987352,-3.422931404932681) q[5]; +cx q[8],q[13]; +u2(-3.141592653589793,0.015607026946657498) q[13]; +u3(0.7672895420093192,1.5707963267948966,1.5707963267948966) q[8]; +cx q[8],q[13]; +u2(0.0,4.71238898038469) q[13]; +u3(0.10466033651504222,3.141592653589794,1.5707963267948957) q[8]; +cx q[8],q[13]; +u3(2.7087726811207307,0.9854786779282094,-1.4051606065543014) q[13]; +u3(2.5996024195475185,-1.2844147563922108,-3.5838776816412032) q[8]; +cx q[2],q[8]; +u3(0.7437240796299218,1.5707963267948966,1.5707963267948966) q[2]; +u2(-3.141592653589793,0.4692480591137098) q[8]; +cx q[2],q[8]; +u3(0.15608239822768624,3.141592653589794,1.5707963267948963) q[2]; +u2(0.0,4.71238898038469) q[8]; +cx q[2],q[8]; +u3(1.5031897225578683,-1.4201375106494183,-1.195405468697322) q[2]; +u3(1.9587552352478563,-3.639564665281849,3.6082097226036067) q[8]; +u3(1.6761341238841503,1.6360605471335403,0.08036717337060983) q[9]; +u3(1.444727106712525,-0.35439463309006536,-5.820624743093449) q[18]; +u3(1.5830735367841104,0.6975598340553638,2.2713364041605666) q[19]; +cx q[18],q[19]; +u3(1.1337720941464249,1.5707963267948968,1.5707963267948968) q[18]; +u2(-3.141592653589793,0.22154774289122692) q[19]; +cx q[18],q[19]; +u3(0.07343416606421548,-1.3322676295501878e-15,4.7123889803846915) q[18]; +u2(0.0,4.71238898038469) q[19]; +cx q[18],q[19]; +u3(0.7091184465628686,3.1626642565213157,-2.8605447980038385) q[18]; +cx q[18],q[11]; +u2(-3.141592653589793,0.3431438173524537) q[11]; +u3(0.7785586544657946,1.5707963267948966,1.5707963267948966) q[18]; +cx q[18],q[11]; +u2(0.0,4.71238898038469) q[11]; +u3(0.058914453506703615,3.1415926535897944,1.5707963267948952) q[18]; +cx q[18],q[11]; +u3(2.127907943844785,1.6568377998863786,-5.616053555174354) q[11]; +cx q[11],q[14]; +u3(0.8300224703504839,1.5707963267948966,1.5707963267948966) q[11]; +u2(-3.141592653589793,0.4821586254551793) q[14]; +cx q[11],q[14]; +u3(0.2906731519912505,3.141592653589793,1.5707963267948966) q[11]; +u2(0.0,4.71238898038469) q[14]; +cx q[11],q[14]; +u3(1.7459626395373562,2.578105308505425,0.20932350011449366) q[11]; +u3(2.564084170367848,-5.57194166077211,-6.641479017643191) q[14]; +u3(0.5368302836318195,-2.275016931638007,3.874431223021626) q[18]; +cx q[1],q[18]; +u3(0.7194254114105704,1.5707963267948968,1.5707963267948968) q[1]; +u2(-3.141592653589793,0.1788919440605703) q[18]; +cx q[1],q[18]; +u3(0.004665310157121107,-1.687538997430238e-14,4.7123889803847065) q[1]; +u2(0.0,4.71238898038469) q[18]; +cx q[1],q[18]; +u3(2.420827965134216,-0.09600461361851709,2.0789316146063985) q[1]; +cx q[1],q[12]; +u3(0.5671525930327205,1.5707963267948966,1.5707963267948966) q[1]; +u2(-3.141592653589793,0.15793558433220412) q[12]; +cx q[1],q[12]; +u3(0.41199686381644335,3.141592653589793,1.5707963267948963) q[1]; +u2(0.0,4.71238898038469) q[12]; +cx q[1],q[12]; +u3(1.9614850195740132,-2.292369637608464,-3.8374513735179043) q[1]; +u3(2.5351755275882994,3.066238592156166,1.58329891211693) q[12]; +u3(1.3132763660239781,0.19322584425342404,2.5032752871086057) q[18]; +cx q[18],q[11]; +u2(-3.141592653589793,0.12631789769238666) q[11]; +u3(1.1625146882900748,1.5707963267948966,1.5707963267948966) q[18]; +cx q[18],q[11]; +u2(0.0,4.71238898038469) q[11]; +u3(0.2743884849124252,3.1415926535897936,1.5707963267948961) q[18]; +cx q[18],q[11]; +u3(0.7643423939916593,2.94346772324319,-0.38651963578578674) q[11]; +cx q[11],q[1]; +u2(-3.141592653589793,0.350725497086934) q[1]; +u3(0.7915346482539538,1.5707963267948966,1.5707963267948966) q[11]; +cx q[11],q[1]; +u2(0.0,4.71238898038469) q[1]; +u3(0.21204433084540475,3.1415926535897936,1.5707963267948961) q[11]; +cx q[11],q[1]; +u3(1.6659188200223018,-1.2959811488085362,-2.8198609530748096) q[1]; +u3(1.7497898272683985,0.02979990883732614,-0.4474664763448559) q[11]; +u3(0.4247141354876626,2.02473698003606,-3.1987684506913103) q[18]; +cx q[18],q[17]; +u2(-3.141592653589793,0.005148780640721773) q[17]; +u3(1.2358044195568132,1.5707963267948966,1.5707963267948966) q[18]; +cx q[18],q[17]; +u2(0.0,4.71238898038469) q[17]; +u3(0.08332660944437702,3.141592653589795,1.570796326794896) q[18]; +cx q[18],q[17]; +u3(2.4048120564715005,-2.9961064099492365,-2.317557999636702) q[17]; +u3(1.546558773927472,-2.7040775886682553,-2.6467521996735806) q[18]; +cx q[18],q[13]; +u2(-3.141592653589793,0.7954108465469611) q[13]; +u3(0.41483012944575,1.5707963267948966,1.5707963267948966) q[18]; +cx q[18],q[13]; +u2(0.0,4.71238898038469) q[13]; +u3(0.19135047000024516,-4.440892098500626e-16,4.71238898038469) q[18]; +cx q[18],q[13]; +u3(1.5573040116840489,-2.111714792255283,-0.25581160734265385) q[13]; +u3(2.251128908310182,1.4398540840940395,-1.9358855268677826) q[18]; +u3(0.5057511119355351,-5.348192425912161,0.9686918260888597) q[19]; +cx q[3],q[19]; +u2(-3.141592653589793,0.2763203055976311) q[19]; +u3(0.8227146240738354,1.5707963267948968,1.5707963267948968) q[3]; +cx q[3],q[19]; +u2(0.0,4.71238898038469) q[19]; +u3(0.02837441125984278,-2.6645352591003757e-15,4.712388980384692) q[3]; +cx q[3],q[19]; +u3(2.1965873274967134,0.9177132165262293,1.1675182821091363) q[19]; +u3(1.1821500908881823,2.73715769240918,3.8130376963644754) q[3]; +cx q[3],q[4]; +u3(0.5636434794822749,1.5707963267948966,1.570796326794897) q[3]; +u2(-3.141592653589793,0.2438025160609687) q[4]; +cx q[3],q[4]; +u3(0.48502447379280716,-4.440892098500626e-16,4.71238898038469) q[3]; +u2(0.0,4.71238898038469) q[4]; +cx q[3],q[4]; +u3(2.530089844682644,0.8624027752832559,1.8815219782413117) q[3]; +cx q[3],q[15]; +u2(-3.141592653589793,0.14735718378504536) q[15]; +u3(0.7029772974658276,1.5707963267948966,1.5707963267948966) q[3]; +cx q[3],q[15]; +u2(0.0,4.71238898038469) q[15]; +u3(0.21045695748257903,3.141592653589794,1.5707963267948957) q[3]; +cx q[3],q[15]; +u3(1.445709385228481,1.5401789176214329,-5.777185425061749) q[15]; +u3(0.9855118152775622,-0.5289849139327452,-3.45138650304213) q[3]; +u3(2.5052883401342587,6.323848606819676,-0.15680709036624596) q[4]; +cx q[4],q[14]; +u2(-3.141592653589793,0.3185365660382684) q[14]; +u3(0.8619386954644477,1.5707963267948966,1.5707963267948966) q[4]; +cx q[4],q[14]; +u2(0.0,4.71238898038469) q[14]; +u3(0.04917363001996495,-1.7763568394002505e-15,4.7123889803846915) q[4]; +cx q[4],q[14]; +u3(1.241675522832075,0.3741288327516517,-8.05300215894155) q[14]; +cx q[15],q[14]; +u2(-3.141592653589793,0.2556015180975264) q[14]; +u3(0.6768774529059343,1.5707963267948966,1.5707963267948966) q[15]; +cx q[15],q[14]; +u2(0.0,4.71238898038469) q[14]; +u3(0.506449560069761,3.141592653589793,1.5707963267948963) q[15]; +cx q[15],q[14]; +u3(2.5021826753061536,0.8608795534975155,-1.7493861445716536) q[14]; +cx q[14],q[17]; +u3(0.9995127801128351,1.5707963267948966,1.5707963267948966) q[14]; +u3(1.4838077981620756,-3.0542032630624742,-2.5219091518841674) q[15]; +u2(-3.141592653589793,0.027685309547830883) q[17]; +cx q[14],q[17]; +u3(0.13259220973099572,3.141592653589794,1.570796326794896) q[14]; +u2(0.0,4.71238898038469) q[17]; +cx q[14],q[17]; +u3(1.6453740404670731,6.031532811469382,1.7038688397485944) q[14]; +u3(1.3806629391918714,2.346920483060091,5.081092585199043) q[17]; +u3(2.3660429541474164,-1.9683553668352083,3.0870549133710137) q[4]; +cx q[5],q[4]; +u2(-3.141592653589793,0.0008000587875420795) q[4]; +u3(0.9705917535827331,1.5707963267948966,1.5707963267948966) q[5]; +cx q[5],q[4]; +u2(0.0,4.71238898038469) q[4]; +u3(0.06967565077024769,-1.3322676295501878e-15,4.7123889803846915) q[5]; +cx q[5],q[4]; +u3(1.8325319465099414,0.8631281714095762,2.472865483270653) q[4]; +cx q[4],q[11]; +u2(-3.141592653589793,0.3478180032917424) q[11]; +u3(1.1645425766174422,1.5707963267948968,1.5707963267948968) q[4]; +cx q[4],q[11]; +u2(0.0,4.71238898038469) q[11]; +u3(0.145770879478892,3.1415926535897936,1.5707963267948961) q[4]; +cx q[4],q[11]; +u3(2.420291507243833,-1.662371269484296,3.03734489330483) q[11]; +cx q[11],q[18]; +u3(0.9845378139936465,1.5707963267948966,1.5707963267948966) q[11]; +u2(-3.141592653589793,0.5153079871327737) q[18]; +cx q[11],q[18]; +u3(0.10290155081383982,3.141592653589794,1.5707963267948957) q[11]; +u2(0.0,4.71238898038469) q[18]; +cx q[11],q[18]; +u3(1.6154869619389816,-1.9464046117655314,-1.4099303260952052) q[11]; +u3(1.9311442335582287,0.8054310413733805,2.5212904567203522) q[18]; +u3(1.5516530701289142,-2.14417516135893,-2.3795241031329355) q[4]; +u3(1.2506645506371763,-1.97290589775585,1.5134104551263303) q[5]; +cx q[5],q[15]; +u2(-3.141592653589793,0.3471743778755203) q[15]; +u3(0.49040514762527343,1.5707963267948966,1.5707963267948966) q[5]; +cx q[5],q[15]; +u2(0.0,4.71238898038469) q[15]; +u3(0.16574745064247012,0.0,4.712388980384691) q[5]; +cx q[5],q[15]; +u3(1.6543905326076132,-2.1197605092216616,0.4411509513767342) q[15]; +u3(1.997914928992671,2.571533952073575,-0.7558476659017166) q[5]; +cx q[5],q[2]; +u2(-3.141592653589793,0.03625916930830542) q[2]; +u3(0.9949810891009676,1.5707963267948966,1.5707963267948966) q[5]; +cx q[5],q[2]; +u2(0.0,4.71238898038469) q[2]; +u3(0.27550359704448973,3.141592653589794,1.5707963267948966) q[5]; +cx q[5],q[2]; +u3(2.182312716145984,-1.6411265508786321,-6.750754903207617) q[2]; +u3(0.6345799807425613,4.21432792398739,3.181576734432322) q[5]; +cx q[7],q[19]; +u2(-3.141592653589793,0.4103886339073455) q[19]; +u3(0.8079708947913021,1.5707963267948968,1.5707963267948968) q[7]; +cx q[7],q[19]; +u2(0.0,4.71238898038469) q[19]; +u3(0.07420467635745194,-1.3322676295501878e-15,4.7123889803846915) q[7]; +cx q[7],q[19]; +u3(1.8159675622243627,4.939980475240447,1.0575543445450597) q[19]; +cx q[19],q[9]; +u3(0.4763347132682173,1.5707963267948963,1.5707963267948968) q[19]; +u3(1.7026426093830571,-7.704432990749911,3.1569689868137027) q[7]; +cx q[7],q[0]; +u2(-3.141592653589793,0.7881812546708726) q[0]; +u3(0.6702925673692943,1.5707963267948966,1.5707963267948966) q[7]; +cx q[7],q[0]; +u2(0.0,4.71238898038469) q[0]; +u3(0.23322896297330173,-4.440892098500626e-16,4.71238898038469) q[7]; +cx q[7],q[0]; +u3(2.5198623659092045,1.4818837461872771,2.4987320517864964) q[0]; +cx q[0],q[3]; +u3(0.5533390281484375,1.5707963267948966,1.570796326794897) q[0]; +u2(-3.141592653589793,0.09122653648297674) q[3]; +cx q[0],q[3]; +u3(0.23346757300378979,-8.881784197001252e-16,4.712388980384691) q[0]; +u2(0.0,4.71238898038469) q[3]; +cx q[0],q[3]; +u3(2.398861081551354,-3.968805586697097,-3.1375021449230562) q[0]; +cx q[1],q[0]; +u2(-3.141592653589793,0.3622563161831387) q[0]; +u3(0.8641253030872329,1.5707963267948968,1.5707963267948968) q[1]; +cx q[1],q[0]; +u2(0.0,4.71238898038469) q[0]; +u3(0.35751907790908866,3.141592653589793,1.5707963267948963) q[1]; +cx q[1],q[0]; +u3(1.4363555999657613,-5.926646620228781,-0.9894322059025262) q[0]; +u3(0.40941517559637475,2.450725346869595,1.3736365756977005) q[1]; +cx q[1],q[4]; +u3(0.28327275437679905,1.5707963267948966,1.570796326794897) q[1]; +cx q[13],q[0]; +u2(-3.141592653589793,0.12143776975415) q[0]; +u3(1.1332553166025636,1.5707963267948966,1.5707963267948966) q[13]; +cx q[13],q[0]; +u2(0.0,4.71238898038469) q[0]; +u3(0.4358734520788735,3.141592653589793,1.5707963267948963) q[13]; +cx q[13],q[0]; +u3(1.2156586574896981,2.5419922352986273,-2.074808127386823) q[0]; +cx q[0],q[2]; +u3(0.3445483243911724,1.5707963267948966,1.570796326794897) q[0]; +u3(2.2972860612115027,2.5928160534115174,6.770631711418473) q[13]; +u2(-3.141592653589793,0.26691792065561337) q[2]; +cx q[0],q[2]; +u3(0.05055571822069128,-1.7763568394002505e-15,4.7123889803846915) q[0]; +u2(0.0,4.71238898038469) q[2]; +cx q[0],q[2]; +u3(1.9981303641940484,-1.4703658193810958,-4.139374172035567) q[0]; +u3(1.675427319322723,6.769888642600399,-1.366141684922356) q[2]; +u3(1.368550148051906,-3.1534857351787116,2.762328859743952) q[3]; +u2(-3.141592653589793,0.9727572841875602) q[4]; +cx q[1],q[4]; +u3(0.1167139030629201,0.0,4.712388980384691) q[1]; +u2(0.0,4.71238898038469) q[4]; +cx q[1],q[4]; +u3(0.900502852166614,2.7282344631998634,3.336047138949789) q[1]; +u3(1.1910184990333428,1.6334963905269082,-4.251630242268894) q[4]; +u3(1.108469075176802,6.692740379412945,3.555121607202218) q[7]; +cx q[7],q[10]; +u2(-3.141592653589793,0.2964218798017928) q[10]; +u3(0.6610502049490586,1.5707963267948966,1.5707963267948966) q[7]; +cx q[7],q[10]; +u2(0.0,4.71238898038469) q[10]; +u3(0.1185261281822944,3.141592653589794,1.570796326794896) q[7]; +cx q[7],q[10]; +u3(2.2939215132667132,2.9908943330379336,-1.627539699647731) q[10]; +u3(0.4132674166969389,3.9402622385304262,-4.534705492309786) q[7]; +cx q[8],q[15]; +u2(-3.141592653589793,0.10105336087545802) q[15]; +u3(0.8912012583545421,1.5707963267948966,1.5707963267948966) q[8]; +cx q[8],q[15]; +u2(0.0,4.71238898038469) q[15]; +u3(0.15295145642818986,3.1415926535897936,1.5707963267948961) q[8]; +cx q[8],q[15]; +u3(1.4699618253358153,-1.2176694926684604,-0.8238118013647928) q[15]; +cx q[11],q[15]; +u3(0.7138588440833747,1.5707963267948966,1.5707963267948966) q[11]; +u2(-3.141592653589793,0.19050213609754452) q[15]; +cx q[11],q[15]; +u3(0.49712527098643483,-4.440892098500626e-16,4.71238898038469) q[11]; +u2(0.0,4.71238898038469) q[15]; +cx q[11],q[15]; +u3(1.9222368584644243,4.282920951436161,-3.507142538493831) q[11]; +cx q[11],q[0]; +u2(-3.141592653589793,0.2798672949741905) q[0]; +u3(0.6872877669638495,1.5707963267948966,1.5707963267948966) q[11]; +cx q[11],q[0]; +u2(0.0,4.71238898038469) q[0]; +u3(0.09011968574345618,3.141592653589794,1.5707963267948957) q[11]; +cx q[11],q[0]; +u3(1.3027157444158999,4.41243076647379,0.2619265855852049) q[0]; +u3(1.0291554152904556,3.116278467082065,6.902976787084771) q[11]; +u3(0.7573377885950042,2.080684784743603,1.2671399208785832) q[15]; +cx q[2],q[15]; +u2(-3.141592653589793,0.007662676211167119) q[15]; +u3(0.7618068018163201,1.5707963267948966,1.5707963267948966) q[2]; +cx q[2],q[15]; +u2(0.0,4.71238898038469) q[15]; +u3(0.10356190964134465,-8.881784197001252e-16,4.712388980384691) q[2]; +cx q[2],q[15]; +u3(1.9070728779544142,2.514046633658796,0.342467003564471) q[15]; +u3(1.7779851993072346,-2.494124130014873,-2.944672019510091) q[2]; +u3(2.2933123871826333,-3.634473805802589,-2.012141406646526) q[8]; +u2(-3.141592653589793,0.338628095304065) q[9]; +cx q[19],q[9]; +u3(0.04684503227157943,-3.552713678800501e-15,4.712388980384693) q[19]; +u2(0.0,4.71238898038469) q[9]; +cx q[19],q[9]; +u3(3.1314324183606526,-5.127828134029758,-1.7099031917315084) q[19]; +cx q[19],q[12]; +u2(-3.141592653589793,0.02182041904147458) q[12]; +u3(1.3005357590351316,1.5707963267948968,1.5707963267948968) q[19]; +cx q[19],q[12]; +u2(0.0,4.71238898038469) q[12]; +u3(0.37952441668519726,3.141592653589793,1.5707963267948963) q[19]; +cx q[19],q[12]; +u3(0.7233302796511081,-1.571997675373158,-2.4907283028291953) q[12]; +cx q[12],q[16]; +u3(1.0238776688879725,1.5707963267948968,1.5707963267948968) q[12]; +u2(-3.141592653589793,0.051048545157618364) q[16]; +cx q[12],q[16]; +u3(0.34080778848404086,-4.440892098500626e-16,4.71238898038469) q[12]; +u2(0.0,4.71238898038469) q[16]; +cx q[12],q[16]; +u3(1.9356147513174025,-5.278972391573088,-1.6780037166554769) q[12]; +u3(0.9024192659779787,2.0599287946361526,5.498922688589335) q[16]; +u3(0.9417062982163426,0.8743369658160106,-1.6008422137085632) q[19]; +cx q[10],q[19]; +u3(0.8588231860319865,1.5707963267948966,1.5707963267948966) q[10]; +u2(-3.141592653589793,0.02460110193538889) q[19]; +cx q[10],q[19]; +u3(0.1307419262715916,-8.881784197001252e-16,4.712388980384691) q[10]; +u2(0.0,4.71238898038469) q[19]; +cx q[10],q[19]; +u3(1.1772892736644915,-0.8444680972258319,-6.832965081328446) q[10]; +cx q[12],q[10]; +u2(-3.141592653589793,0.015331753897402933) q[10]; +u3(0.35947430709965184,1.5707963267948966,1.5707963267948966) q[12]; +cx q[12],q[10]; +u2(0.0,4.71238898038469) q[10]; +u3(0.07992559964341839,-2.220446049250313e-15,4.7123889803846915) q[12]; +cx q[12],q[10]; +u3(2.207231089099827,4.2161423227328605,-1.4274311707209315) q[10]; +cx q[10],q[4]; +u3(0.7721701554860372,1.5707963267948966,1.5707963267948966) q[10]; +u3(0.847827661345111,4.076894349907694,2.0621868947298907) q[12]; +u3(1.5625304984244395,-3.7538963228062294,-6.161325633281862) q[19]; +cx q[19],q[14]; +u2(-3.141592653589793,0.7902268832143164) q[14]; +u3(0.25432814967243805,1.5707963267948968,1.5707963267948968) q[19]; +cx q[19],q[14]; +u2(0.0,4.71238898038469) q[14]; +u3(0.15731321059798717,3.1415926535897936,1.5707963267948961) q[19]; +cx q[19],q[14]; +u3(0.7591597082792484,-3.4000001169736285,-2.655735093284271) q[14]; +u3(1.6327667770926944,-3.5945685817287645,-2.904471296368693) q[19]; +cx q[19],q[5]; +u3(1.1831065845556321,1.5707963267948968,1.5707963267948968) q[19]; +u2(-3.141592653589793,0.1682758246632956) q[4]; +cx q[10],q[4]; +u3(0.44326089579064404,-4.440892098500626e-16,4.71238898038469) q[10]; +u2(0.0,4.71238898038469) q[4]; +cx q[10],q[4]; +u3(1.4515438109491439,-4.822693381550803,-0.48503698151724184) q[10]; +u3(2.1112135192676598,1.044362569379813,-0.6039811459947706) q[4]; +u2(-3.141592653589793,0.2387887031109095) q[5]; +cx q[19],q[5]; +u3(0.016827572737763797,3.1415926535897984,1.5707963267948921) q[19]; +u2(0.0,4.71238898038469) q[5]; +cx q[19],q[5]; +u3(1.4225524194647736,-5.225697633728914,-7.341418118502942) q[19]; +u3(2.143585147759166,4.094442049836033,1.9018059241057903) q[5]; +u3(2.2783975519311808,-2.3893501231423753,0.9515840543029805) q[9]; +cx q[6],q[9]; +u3(0.543748307402783,1.5707963267948966,1.5707963267948966) q[6]; +u2(-3.141592653589793,0.4990308063247888) q[9]; +cx q[6],q[9]; +u3(0.22876543703584348,-4.440892098500626e-16,4.71238898038469) q[6]; +u2(0.0,4.71238898038469) q[9]; +cx q[6],q[9]; +u3(2.01564947309141,-3.5898102010410646,-1.8525031587468082) q[6]; +cx q[7],q[6]; +u2(-3.141592653589793,0.021531252631137088) q[6]; +u3(0.39458652065111516,1.5707963267948966,1.5707963267948966) q[7]; +cx q[7],q[6]; +u2(0.0,4.71238898038469) q[6]; +u3(0.18168383895191711,3.1415926535897936,1.5707963267948961) q[7]; +cx q[7],q[6]; +u3(2.2026361322315715,1.6068225810479548,4.079861339235155) q[6]; +cx q[6],q[16]; +u2(-3.141592653589793,0.2706752545172122) q[16]; +u3(0.8768871504678104,1.5707963267948966,1.5707963267948966) q[6]; +cx q[6],q[16]; +u2(0.0,4.71238898038469) q[16]; +u3(0.2446996580278163,-8.881784197001252e-16,4.712388980384691) q[6]; +cx q[6],q[16]; +u3(0.5636641743472027,2.8389948205662554,-0.3155115634487944) q[16]; +cx q[16],q[1]; +u2(-3.141592653589793,0.40979393416343335) q[1]; +u3(0.7053696696178224,1.5707963267948966,1.5707963267948966) q[16]; +cx q[16],q[1]; +u2(0.0,4.71238898038469) q[1]; +u3(0.12037524415741874,3.141592653589794,1.570796326794896) q[16]; +cx q[16],q[1]; +u3(2.2411631825115697,0.8530898943310856,-3.191910633922706) q[1]; +u3(1.4539882839478009,0.008496925806240396,0.7378110561927091) q[16]; +cx q[16],q[1]; +u2(-3.141592653589793,0.10899186128544947) q[1]; +u3(1.1300075685161406,1.5707963267948966,1.5707963267948966) q[16]; +cx q[16],q[1]; +u2(0.0,4.71238898038469) q[1]; +u3(0.44415601584769676,3.141592653589793,1.5707963267948963) q[16]; +cx q[16],q[1]; +u3(2.6050520977993408,1.3168208876625016,0.24677251165481895) q[1]; +u3(1.094122926979484,1.7529812343374336,-1.7177011315988624) q[16]; +u3(1.7421276955395637,1.253143110591212,-2.5212055502151287) q[6]; +cx q[13],q[6]; +u3(1.108877734828169,1.5707963267948966,1.5707963267948966) q[13]; +u2(-3.141592653589793,0.3623853329448661) q[6]; +cx q[13],q[6]; +u3(0.10189325334043679,3.141592653589793,1.5707963267948966) q[13]; +u2(0.0,4.71238898038469) q[6]; +cx q[13],q[6]; +u3(2.1755764040734022,-0.1321143268431082,-2.969536310505937) q[13]; +u3(0.5257620707000726,-1.800064823854492,-4.556867697160052) q[6]; +u3(1.377786008348243,3.4024647101489216,-2.2181045911306727) q[7]; +u3(1.8363763296812503,6.266087626306481,3.363936957085175) q[9]; +cx q[3],q[9]; +u3(1.159177041609016,1.5707963267948966,1.5707963267948966) q[3]; +u2(-3.141592653589793,0.2463431825385367) q[9]; +cx q[3],q[9]; +u3(0.20890956035299968,3.1415926535897936,1.5707963267948961) q[3]; +u2(0.0,4.71238898038469) q[9]; +cx q[3],q[9]; +u3(2.10007919829059,3.9371191190834756,3.07381866786694) q[3]; +cx q[7],q[3]; +u2(-3.141592653589793,0.3606543348954432) q[3]; +u3(1.006942859453279,1.5707963267948968,1.5707963267948968) q[7]; +cx q[7],q[3]; +u2(0.0,4.71238898038469) q[3]; +u3(0.14166279670562057,3.1415926535897936,1.5707963267948961) q[7]; +cx q[7],q[3]; +u3(1.5673522062938083,5.118283499251508,1.8876713430108936) q[3]; +cx q[12],q[3]; +u3(1.1203328406977324,1.5707963267948966,1.5707963267948966) q[12]; +u2(-3.141592653589793,0.24430784129343452) q[3]; +cx q[12],q[3]; +u3(0.4677546596018318,3.141592653589793,1.5707963267948963) q[12]; +u2(0.0,4.71238898038469) q[3]; +cx q[12],q[3]; +u3(0.7347803568036301,2.8551045352046973,-2.2353064732960295) q[12]; +cx q[12],q[10]; +u2(-3.141592653589793,0.30633290860089546) q[10]; +u3(0.6688404694523001,1.5707963267948966,1.5707963267948966) q[12]; +cx q[12],q[10]; +u2(0.0,4.71238898038469) q[10]; +u3(0.08356396532514562,3.141592653589794,1.5707963267948957) q[12]; +cx q[12],q[10]; +u3(1.5630746301844558,1.2337618423105696,5.9344205459798784) q[10]; +cx q[0],q[10]; +u3(0.8917692496162848,1.5707963267948966,1.5707963267948966) q[0]; +u2(-3.141592653589793,0.3933992626360432) q[10]; +cx q[0],q[10]; +u3(0.26102410332839754,0.0,4.71238898038469) q[0]; +u2(0.0,4.71238898038469) q[10]; +cx q[0],q[10]; +u3(2.4451161965119965,-5.295885912474519,0.4351430383709016) q[0]; +u3(0.875544414709966,0.7427625939498401,-0.7844154506311083) q[10]; +u3(0.8174632589696529,0.7628782222648574,2.3604884037209137) q[12]; +cx q[12],q[15]; +u3(1.348605118391566,1.5707963267948968,1.5707963267948968) q[12]; +u2(-3.141592653589793,0.20088890159720862) q[15]; +cx q[12],q[15]; +u3(0.11289701408677302,-8.881784197001252e-16,4.712388980384691) q[12]; +u2(0.0,4.71238898038469) q[15]; +cx q[12],q[15]; +u3(1.8642903759810308,1.4340918762161774,4.898438846747461) q[12]; +u3(1.149585256829071,1.736624377805215,-1.6715499361918655) q[15]; +u3(1.936951653262789,5.3735849669148,4.534105044983368) q[3]; +u3(0.4771439934092291,0.2869508821241431,2.328079021878019) q[7]; +cx q[7],q[14]; +u2(-3.141592653589793,0.2584197635881009) q[14]; +u3(0.7591546402852841,1.5707963267948966,1.5707963267948966) q[7]; +cx q[7],q[14]; +u2(0.0,4.71238898038469) q[14]; +u3(0.21501113037462252,3.141592653589794,1.5707963267948966) q[7]; +cx q[7],q[14]; +u3(1.707257540330797,3.2066287049278186,-3.165228709269793) q[14]; +cx q[14],q[13]; +u2(-3.141592653589793,0.2791326096381699) q[13]; +u3(0.4352681554701277,1.5707963267948963,1.5707963267948968) q[14]; +cx q[14],q[13]; +u2(0.0,4.71238898038469) q[13]; +u3(0.24249568055472212,-8.881784197001252e-16,4.712388980384691) q[14]; +cx q[14],q[13]; +u3(1.5358419307589946,0.7973882173688142,6.3032928862939) q[13]; +u3(0.4626203011058492,-2.8460736199266448,-1.6078693984062828) q[14]; +cx q[2],q[14]; +u2(-3.141592653589793,0.14722262692525678) q[14]; +u3(1.2135592726690276,1.5707963267948966,1.5707963267948966) q[2]; +cx q[2],q[14]; +u2(0.0,4.71238898038469) q[14]; +u3(0.32177401502719927,3.141592653589794,1.5707963267948966) q[2]; +cx q[2],q[14]; +u3(2.5794401490391063,2.230432388003333,0.1827617891437614) q[14]; +u3(1.0056096327925406,4.07523870474783,0.3338618600649492) q[2]; +u3(0.8827631621334421,-0.6358789320885805,3.7942517252435617) q[7]; +cx q[7],q[4]; +u2(-3.141592653589793,0.08189017667916687) q[4]; +u3(0.8132092709546456,1.5707963267948966,1.5707963267948966) q[7]; +cx q[7],q[4]; +u2(0.0,4.71238898038469) q[4]; +u3(0.011038729980320397,3.1415926535898,1.5707963267948895) q[7]; +cx q[7],q[4]; +u3(2.1781898946431784,5.120554272863305,-2.638994102962261) q[4]; +cx q[13],q[4]; +u3(0.8170465337796216,1.5707963267948966,1.5707963267948966) q[13]; +u2(-3.141592653589793,0.3101990831208481) q[4]; +cx q[13],q[4]; +u3(0.29287155378647084,-4.440892098500626e-16,4.71238898038469) q[13]; +u2(0.0,4.71238898038469) q[4]; +cx q[13],q[4]; +u3(0.7292947258063425,-3.9357794445653793,-2.943802447002419) q[13]; +u3(2.6047827566223893,2.9466304857916223,6.858339494197157) q[4]; +u3(1.980489887590794,4.064341151424985,-4.491695329299729) q[7]; +cx q[1],q[7]; +u3(0.9576841539399011,1.5707963267948968,1.5707963267948968) q[1]; +u2(-3.141592653589793,0.14192540984791968) q[7]; +cx q[1],q[7]; +u3(0.25834695846580785,-4.440892098500626e-16,4.71238898038469) q[1]; +u2(0.0,4.71238898038469) q[7]; +cx q[1],q[7]; +u3(1.483674815937428,-0.9532734351273091,-2.3004181933283814) q[1]; +cx q[1],q[10]; +u3(0.608194700494147,1.5707963267948966,1.5707963267948966) q[1]; +u2(-3.141592653589793,0.45904895365321763) q[10]; +cx q[1],q[10]; +u3(0.22264780544502502,-4.440892098500626e-16,4.71238898038469) q[1]; +u2(0.0,4.71238898038469) q[10]; +cx q[1],q[10]; +u3(1.442071943236325,3.205331984398562,0.888936962236864) q[1]; +u3(0.6938001726084553,3.790754640378318,2.1536687352763773) q[10]; +u3(0.74540820333728,6.932679477847322,-0.7324854584637013) q[7]; +u3(1.057657098287715,3.878827135768208,-2.1418133131483352) q[9]; +cx q[9],q[17]; +u2(-3.141592653589793,0.022056677506506972) q[17]; +u3(1.2475271464222677,1.5707963267948968,1.5707963267948968) q[9]; +cx q[9],q[17]; +u2(0.0,4.71238898038469) q[17]; +u3(0.4116301393250892,-4.440892098500626e-16,4.71238898038469) q[9]; +cx q[9],q[17]; +u3(2.0733547359617797,5.038013166792332,5.0952188412604835) q[17]; +cx q[18],q[17]; +u2(-3.141592653589793,0.49929119253672916) q[17]; +u3(0.7191872794482784,1.5707963267948966,1.5707963267948966) q[18]; +cx q[18],q[17]; +u2(0.0,4.71238898038469) q[17]; +u3(0.16073444366744224,-4.440892098500626e-16,4.71238898038469) q[18]; +cx q[18],q[17]; +u3(1.5286092504573159,-0.7231923057170621,5.719257907682072) q[17]; +u3(0.7933457774840315,-1.4260065236079742,2.570375411513798) q[18]; +cx q[5],q[18]; +u2(-3.141592653589793,0.1457922668710001) q[18]; +u3(0.46334051138230126,1.5707963267948966,1.5707963267948966) q[5]; +cx q[5],q[18]; +u2(0.0,4.71238898038469) q[18]; +u3(0.34493425889650164,3.141592653589794,1.5707963267948966) q[5]; +cx q[5],q[18]; +u3(1.9808532738377733,-1.2217685592781407,2.7864797957666974) q[18]; +u3(1.3819974147840113,-1.2114830552389053,-1.695741953533039) q[5]; +cx q[6],q[17]; +u2(-3.141592653589793,0.37056115071652407) q[17]; +u3(0.7045262480265169,1.5707963267948966,1.5707963267948966) q[6]; +cx q[6],q[17]; +u2(0.0,4.71238898038469) q[17]; +u3(0.09756438646418504,3.141592653589794,1.5707963267948957) q[6]; +cx q[6],q[17]; +u3(0.3444798410863889,-2.685590638534639,-1.0518802297816108) q[17]; +cx q[18],q[17]; +u2(-3.141592653589793,0.326174344982993) q[17]; +u3(0.32801749647701645,1.5707963267948968,1.5707963267948968) q[18]; +cx q[18],q[17]; +u2(0.0,4.71238898038469) q[17]; +u3(0.14913144843974785,3.1415926535897936,1.5707963267948961) q[18]; +cx q[18],q[17]; +u3(1.9503563471624452,0.4149475138967271,-0.28292877512756825) q[17]; +u3(0.9087548789129424,2.844237689329515,-0.3575569772598693) q[18]; +cx q[18],q[0]; +u2(-3.141592653589793,0.3670346365361876) q[0]; +u3(0.8699671416476186,1.5707963267948966,1.5707963267948966) q[18]; +cx q[18],q[0]; +u2(0.0,4.71238898038469) q[0]; +u3(0.26090792302136756,0.0,4.712388980384691) q[18]; +cx q[18],q[0]; +u3(2.681754144111732,1.4741658355706881,0.3363910144097714) q[0]; +u3(2.8211035867304317,1.382544588514308,4.3091409620531715) q[18]; +cx q[1],q[18]; +u3(1.0391368585011442,1.5707963267948966,1.5707963267948966) q[1]; +u2(-3.141592653589793,0.08585403808568337) q[18]; +cx q[1],q[18]; +u3(0.07340613789707864,3.141592653589794,1.5707963267948954) q[1]; +u2(0.0,4.71238898038469) q[18]; +cx q[1],q[18]; +u3(0.5288281801636424,2.789894636055517,2.63656063511669) q[1]; +u3(0.8784808955347174,0.44919662450657016,-4.913195975632368) q[18]; +cx q[4],q[17]; +u2(-3.141592653589793,0.028398744320801805) q[17]; +u3(0.9443965872209884,1.5707963267948968,1.5707963267948968) q[4]; +cx q[4],q[17]; +u2(0.0,4.71238898038469) q[17]; +u3(0.496499358693675,-4.440892098500626e-16,4.71238898038469) q[4]; +cx q[4],q[17]; +u3(1.055440605362342,4.17276242562328,-1.7760571249467552) q[17]; +u3(1.7579163148761816,0.8847994254364664,2.934668536432548) q[4]; +u3(1.1932906782460118,3.4176917887548273,-0.5958848223108708) q[6]; +cx q[6],q[5]; +u2(-3.141592653589793,0.2481427297997405) q[5]; +u3(0.4207206717655153,1.5707963267948963,1.5707963267948968) q[6]; +cx q[6],q[5]; +u2(0.0,4.71238898038469) q[5]; +u3(0.2870675767737725,-4.440892098500626e-16,4.71238898038469) q[6]; +cx q[6],q[5]; +u3(2.591806439247038,-1.6132605982471948,-3.2579632755723225) q[5]; +cx q[5],q[7]; +u3(0.4276759139177473,1.5707963267948966,1.5707963267948966) q[5]; +u3(1.842503323400636,3.8739746076061667,1.8518949368457565) q[6]; +cx q[6],q[15]; +u2(-3.141592653589793,0.15411908109597205) q[15]; +u3(1.136282908167322,1.5707963267948966,1.5707963267948966) q[6]; +cx q[6],q[15]; +u2(0.0,4.71238898038469) q[15]; +u3(0.285257736063205,-4.440892098500626e-16,4.71238898038469) q[6]; +cx q[6],q[15]; +u3(2.446705391265463,-3.8717980477756195,0.435349409592134) q[15]; +cx q[4],q[15]; +u2(-3.141592653589793,0.1618275783364551) q[15]; +u3(0.9342551881847633,1.5707963267948966,1.5707963267948966) q[4]; +cx q[4],q[15]; +u2(0.0,4.71238898038469) q[15]; +u3(0.2874898582480912,-4.440892098500626e-16,4.71238898038469) q[4]; +cx q[4],q[15]; +u3(0.6621375815421948,0.2706364569302253,1.1964072582934366) q[15]; +cx q[18],q[15]; +u2(-3.141592653589793,0.07662041008440035) q[15]; +u3(0.5993484490842069,1.5707963267948963,1.5707963267948968) q[18]; +cx q[18],q[15]; +u2(0.0,4.71238898038469) q[15]; +u3(0.5013959253139648,-4.440892098500626e-16,4.71238898038469) q[18]; +cx q[18],q[15]; +u3(1.8137458311018841,-0.7627474504972177,-7.478294930981816) q[15]; +u3(1.1172966318301862,-4.235119009458586,3.7372443256438634) q[18]; +u3(1.4323700505403965,-3.1267655715323244,-2.2464157993103306) q[4]; +u3(2.3895302125971987,3.289757421363871,2.6713352740766934) q[6]; +cx q[6],q[10]; +u2(-3.141592653589793,0.48859814315881067) q[10]; +u3(0.9414312944280017,1.5707963267948966,1.5707963267948966) q[6]; +cx q[6],q[10]; +u2(0.0,4.71238898038469) q[10]; +u3(0.21282861735892517,-8.881784197001252e-16,4.712388980384691) q[6]; +cx q[6],q[10]; +u3(2.3784137368555514,3.7455379918338436,1.7167984375643375) q[10]; +u3(1.6354089745534797,2.3705110619475103,3.5261247527654866) q[6]; +u2(-3.141592653589793,0.08612398647341934) q[7]; +cx q[5],q[7]; +u3(0.05421730844610609,-1.3322676295501878e-15,4.7123889803846915) q[5]; +u2(0.0,4.71238898038469) q[7]; +cx q[5],q[7]; +u3(2.883127292889331,-5.816248895793944,-6.024881021896499) q[5]; +u3(2.5870294711486417,3.195130473682937,0.5489818659103367) q[7]; +u3(1.605220656660777,-5.440495565502353,1.9674432456482043) q[9]; +cx q[9],q[8]; +u2(-3.141592653589793,0.29574514750597936) q[8]; +u3(0.38807132763572233,1.5707963267948966,1.5707963267948966) q[9]; +cx q[9],q[8]; +u2(0.0,4.71238898038469) q[8]; +u3(0.03179722433700222,3.141592653589796,1.570796326794894) q[9]; +cx q[9],q[8]; +u3(1.3826360711805739,-1.4573986407520532,7.603108008590158) q[8]; +cx q[19],q[8]; +u3(1.1874089799186938,1.5707963267948966,1.5707963267948966) q[19]; +u2(-3.141592653589793,0.02679717695209427) q[8]; +cx q[19],q[8]; +u3(0.042005258395225634,-1.7763568394002505e-15,4.7123889803846915) q[19]; +u2(0.0,4.71238898038469) q[8]; +cx q[19],q[8]; +u3(1.7872168283817995,1.4621515461964572,1.1682845578452583) q[19]; +cx q[11],q[19]; +u3(0.7089775303654536,1.5707963267948966,1.5707963267948966) q[11]; +u2(-3.141592653589793,0.04393825837467369) q[19]; +cx q[11],q[19]; +u3(0.5118461039529089,-4.440892098500626e-16,4.71238898038469) q[11]; +u2(0.0,4.71238898038469) q[19]; +cx q[11],q[19]; +u3(1.3371589195041167,-6.999555632637751,-1.7970298682815413) q[11]; +u3(1.3230486987846957,-3.5999024951718885,-4.258022789115506) q[19]; +cx q[12],q[19]; +u3(1.0232133907400194,1.5707963267948966,1.5707963267948966) q[12]; +u2(-3.141592653589793,0.13401366766385459) q[19]; +cx q[12],q[19]; +u3(0.18526456388673143,-8.881784197001252e-16,4.712388980384691) q[12]; +u2(0.0,4.71238898038469) q[19]; +cx q[12],q[19]; +u3(1.737673367319656,2.0948220476394037,-0.8220482079201861) q[12]; +cx q[17],q[12]; +u2(-3.141592653589793,0.46489515583225316) q[12]; +u3(0.6999441813676305,1.5707963267948968,1.5707963267948968) q[17]; +cx q[17],q[12]; +u2(0.0,4.71238898038469) q[12]; +u3(0.2731238606977782,-4.440892098500626e-16,4.71238898038469) q[17]; +cx q[17],q[12]; +u3(2.027575213124207,-2.7078180546336914,-1.373296068660463) q[12]; +cx q[12],q[10]; +u2(-3.141592653589793,0.03376465527401251) q[10]; +u3(0.9572419386626072,1.5707963267948966,1.5707963267948966) q[12]; +cx q[12],q[10]; +u2(0.0,4.71238898038469) q[10]; +u3(0.0328316158866622,3.141592653589796,1.5707963267948941) q[12]; +cx q[12],q[10]; +u3(0.6154513247460706,-2.548550752004097,-0.7172683210025146) q[10]; +u3(1.0310009606867088,3.7951364190259604,2.9136234000403327) q[12]; +u3(0.7206516563322056,0.35431459841298385,-1.6940927240183092) q[17]; +u3(1.769081287885431,-4.334754878953055,0.9045735765332324) q[19]; +u3(1.8569827224708504,-0.2645082633133973,0.599338278173969) q[8]; +cx q[16],q[8]; +u3(0.6166934362677007,1.5707963267948966,1.5707963267948966) q[16]; +u2(-3.141592653589793,0.1671636356634898) q[8]; +cx q[16],q[8]; +u3(0.46486454377835457,-4.440892098500626e-16,4.71238898038469) q[16]; +u2(0.0,4.71238898038469) q[8]; +cx q[16],q[8]; +u3(0.1339281423937275,4.255144563114604,-3.3227132578567478) q[16]; +cx q[16],q[14]; +u2(-3.141592653589793,0.10141855531104405) q[14]; +u3(0.18774055407827142,1.5707963267948966,1.570796326794897) q[16]; +cx q[16],q[14]; +u2(0.0,4.71238898038469) q[14]; +u3(0.029459258114671694,3.141592653589796,1.570796326794894) q[16]; +cx q[16],q[14]; +u3(0.7810166007545758,-2.7905342484986115,-5.850373900871754) q[14]; +u3(0.7716078171934441,2.9629725547334496,3.921806546135792) q[16]; +cx q[16],q[14]; +u2(-3.141592653589793,0.17931142439213787) q[14]; +u3(0.8559879854597233,1.5707963267948966,1.5707963267948966) q[16]; +cx q[16],q[14]; +u2(0.0,4.71238898038469) q[14]; +u3(0.381835178414111,-4.440892098500626e-16,4.71238898038469) q[16]; +cx q[16],q[14]; +u3(2.845705384976026,-4.4727849211016855,-2.4597108616518737) q[14]; +cx q[1],q[14]; +u3(0.3871783189078838,1.5707963267948963,1.5707963267948968) q[1]; +u2(-3.141592653589793,0.4478482566789237) q[14]; +cx q[1],q[14]; +u3(0.1625374764780683,-4.440892098500626e-16,4.71238898038469) q[1]; +u2(0.0,4.71238898038469) q[14]; +cx q[1],q[14]; +u3(1.7313169949127725,-0.3265026845907869,0.972007000010607) q[1]; +u3(1.7192654495411892,-4.062511621660383,-4.303523409249287) q[14]; +u3(2.6589880821445524,-0.050726501610579344,-2.6971950773132614) q[16]; +cx q[16],q[6]; +u3(0.9021970040367294,1.5707963267948966,1.5707963267948966) q[16]; +u2(-3.141592653589793,0.031175425287436553) q[6]; +cx q[16],q[6]; +u3(0.07887422515000496,3.141592653589794,1.5707963267948957) q[16]; +u2(0.0,4.71238898038469) q[6]; +cx q[16],q[6]; +u3(1.0809298594841965,3.421665154684817,-0.45000324641880873) q[16]; +u3(1.0851832407057422,1.0365308466996452,-1.1755294207422788) q[6]; +cx q[6],q[18]; +u2(-3.141592653589793,0.22784450385536203) q[18]; +u3(0.4529189842276839,1.5707963267948966,1.5707963267948966) q[6]; +cx q[6],q[18]; +u2(0.0,4.71238898038469) q[18]; +u3(0.039600334822239014,3.141592653589795,1.5707963267948946) q[6]; +cx q[6],q[18]; +u3(2.3075370746686366,-0.8252440379427293,-4.367222436513569) q[18]; +u3(2.4831690864838283,0.696419069900458,-2.637822210952119) q[6]; +u3(2.0130462465828134,1.2045522252290113,1.1427813985615427) q[8]; +cx q[11],q[8]; +u3(0.8349761487362721,1.5707963267948963,1.5707963267948968) q[11]; +u2(-3.141592653589793,0.27140443342005116) q[8]; +cx q[11],q[8]; +u3(0.33402102328135885,3.141592653589793,1.5707963267948963) q[11]; +u2(0.0,4.71238898038469) q[8]; +cx q[11],q[8]; +u3(1.7750777191401683,3.189578316239981,0.7681737649070959) q[11]; +cx q[11],q[19]; +u3(0.6197426201749133,1.5707963267948966,1.5707963267948966) q[11]; +u2(-3.141592653589793,0.701382280063962) q[19]; +cx q[11],q[19]; +u3(0.13708184667550535,-4.440892098500626e-16,4.71238898038469) q[11]; +u2(0.0,4.71238898038469) q[19]; +cx q[11],q[19]; +u3(0.8799552178077857,3.1086323656838095,5.05347612158552) q[11]; +u3(1.353292618244367,4.40973017262953,0.605785494557975) q[19]; +cx q[19],q[17]; +u2(-3.141592653589793,0.11787969754048433) q[17]; +u3(1.1149878991552953,1.5707963267948966,1.5707963267948966) q[19]; +cx q[19],q[17]; +u2(0.0,4.71238898038469) q[17]; +u3(0.6469497122212393,3.141592653589793,1.5707963267948966) q[19]; +cx q[19],q[17]; +u3(0.6723674721622236,-0.5545386313523526,-1.7630365061768334) q[17]; +u3(1.9076929633970492,-4.162405522134436,0.2789784574118327) q[19]; +u3(1.2230409357287328,7.2415674845931255,4.340740567719283) q[8]; +cx q[8],q[7]; +u2(-3.141592653589793,0.752913928460716) q[7]; +u3(0.3763083844030792,1.5707963267948963,1.5707963267948968) q[8]; +cx q[8],q[7]; +u2(0.0,4.71238898038469) q[7]; +u3(0.005511125881514377,-1.4210854715202004e-14,4.712388980384704) q[8]; +cx q[8],q[7]; +u3(2.2785286362920365,6.876410653797244,3.9757421010165617) q[7]; +u3(1.1600973491238484,-3.669479962846486,-1.011393754716645) q[8]; +cx q[8],q[7]; +u2(-3.141592653589793,0.2346898283324279) q[7]; +u3(0.5341202071121108,1.5707963267948966,1.5707963267948966) q[8]; +cx q[8],q[7]; +u2(0.0,4.71238898038469) q[7]; +u3(0.026710117269268436,-3.1086244689504383e-15,4.712388980384693) q[8]; +cx q[8],q[7]; +u3(0.4004098108518149,4.3009161822143005,-0.9883360926863833) q[7]; +cx q[7],q[12]; +u2(-3.141592653589793,0.07203380772488033) q[12]; +u3(1.366678016738527,1.5707963267948968,1.5707963267948968) q[7]; +cx q[7],q[12]; +u2(0.0,4.71238898038469) q[12]; +u3(0.17778357663393893,-4.440892098500626e-16,4.71238898038469) q[7]; +cx q[7],q[12]; +u3(0.34884606065873924,-0.40870495000009743,-0.5395960634986267) q[12]; +cx q[12],q[6]; +u3(0.8508404641513375,1.5707963267948966,1.5707963267948966) q[12]; +u2(-3.141592653589793,0.19229749342157398) q[6]; +cx q[12],q[6]; +u3(0.49226379495696393,-4.440892098500626e-16,4.71238898038469) q[12]; +u2(0.0,4.71238898038469) q[6]; +cx q[12],q[6]; +u3(1.5932594180016515,-1.4935477481241117,-0.6501711620560442) q[12]; +u3(2.061368612575337,3.2522896101376286,1.6064967296017787) q[6]; +u3(0.9183168964193102,-2.4725170582116625,1.2859063259410028) q[7]; +u3(1.078939070402458,3.3178097306358363,3.455076917481737) q[8]; +cx q[15],q[8]; +u3(0.6225135461437685,1.5707963267948966,1.5707963267948966) q[15]; +u2(-3.141592653589793,0.04542631334648739) q[8]; +cx q[15],q[8]; +u3(0.15995835781364343,0.0,4.712388980384691) q[15]; +u2(0.0,4.71238898038469) q[8]; +cx q[15],q[8]; +u3(1.9371729864908822,3.903281678513508,3.7638632521313213) q[15]; +u3(1.3062460047863522,2.0891841621130096,4.082469076151671) q[8]; +cx q[18],q[8]; +u3(0.48109721348053985,1.5707963267948966,1.5707963267948966) q[18]; +u2(-3.141592653589793,0.2256501173282679) q[8]; +cx q[18],q[8]; +u3(0.19304687719967342,3.1415926535897936,1.5707963267948961) q[18]; +u2(0.0,4.71238898038469) q[8]; +cx q[18],q[8]; +u3(0.945069666849854,2.6482948726332776,1.5060443123272558) q[18]; +u3(2.4910691235319664,5.908326382505329,3.016045065297634) q[8]; +cx q[8],q[18]; +u2(-3.141592653589793,0.24601111668039266) q[18]; +u3(0.6376351819685729,1.5707963267948966,1.5707963267948966) q[8]; +cx q[8],q[18]; +u2(0.0,4.71238898038469) q[18]; +u3(0.29588920334409763,3.141592653589793,1.5707963267948966) q[8]; +cx q[8],q[18]; +u3(1.8769955597403183,2.3053123356189955,3.466147893224586) q[18]; +u3(0.8325862168836,-3.035199063670797,0.46986651969875726) q[8]; +u3(1.2178173017961487,1.8423239905288642,-4.887651902028871) q[9]; +cx q[3],q[9]; +u3(1.4334843810729612,1.5707963267948968,1.5707963267948968) q[3]; +u2(-3.141592653589793,0.00011490029397109858) q[9]; +cx q[3],q[9]; +u3(0.022762224315057648,-3.552713678800501e-15,4.712388980384693) q[3]; +u2(0.0,4.71238898038469) q[9]; +cx q[3],q[9]; +u3(1.3703329822201633,1.050433360638287,0.7823733386896414) q[3]; +u3(2.0871146653711143,-2.3838967676222635,-1.8479532478205725) q[9]; +cx q[9],q[3]; +u2(-3.141592653589793,0.1347969042951469) q[3]; +u3(0.809686649891141,1.5707963267948966,1.5707963267948966) q[9]; +cx q[9],q[3]; +u2(0.0,4.71238898038469) q[3]; +u3(0.2559393911303328,-8.881784197001252e-16,4.712388980384691) q[9]; +cx q[9],q[3]; +u3(1.3500604474248326,3.920648438471125,3.211008021220858) q[3]; +cx q[13],q[3]; +u3(0.6943379464889013,1.5707963267948966,1.5707963267948966) q[13]; +u2(-3.141592653589793,0.6364797440561383) q[3]; +cx q[13],q[3]; +u3(0.29281231359409443,3.141592653589793,1.5707963267948966) q[13]; +u2(0.0,4.71238898038469) q[3]; +cx q[13],q[3]; +u3(2.3419867103490937,0.541268304309517,-2.6575160422596706) q[13]; +cx q[0],q[13]; +u3(1.35257164535544,1.5707963267948966,1.5707963267948966) q[0]; +u2(-3.141592653589793,0.056445516575042376) q[13]; +cx q[0],q[13]; +u3(0.5780579286563823,3.141592653589793,1.5707963267948963) q[0]; +u2(0.0,4.71238898038469) q[13]; +cx q[0],q[13]; +u3(1.3016298407432407,1.0283255188237554,0.4055994625263093) q[0]; +u3(1.3707227231796546,-0.6073176492074519,4.342380364329287) q[13]; +u3(2.628632664507086,5.043746916206554,-2.3870069847051454) q[3]; +cx q[4],q[13]; +u2(-3.141592653589793,0.1748083466730055) q[13]; +u3(0.3906669620017912,1.5707963267948963,1.5707963267948968) q[4]; +cx q[4],q[13]; +u2(0.0,4.71238898038469) q[13]; +u3(0.2067647527069101,0.0,4.71238898038469) q[4]; +cx q[4],q[13]; +u3(2.8545457098281437,2.3965557081992936,3.9840678750770246) q[13]; +cx q[13],q[16]; +u3(1.0456826186345938,1.5707963267948966,1.5707963267948966) q[13]; +u2(-3.141592653589793,0.040735967548366725) q[16]; +cx q[13],q[16]; +u3(0.4442392164954281,3.141592653589793,1.5707963267948963) q[13]; +u2(0.0,4.71238898038469) q[16]; +cx q[13],q[16]; +u3(2.0349981203619905,5.8664038238469605,6.444741744656237) q[13]; +u3(0.7200570067553536,-2.3326060197063714,1.8388240457002483) q[16]; +u3(0.6870259761348678,0.9137720172925303,-1.2817777585448713) q[4]; +cx q[19],q[4]; +u3(1.1050293724896292,1.5707963267948966,1.5707963267948966) q[19]; +u2(-3.141592653589793,0.0953076646636195) q[4]; +cx q[19],q[4]; +u3(0.4203379334651537,3.141592653589793,1.5707963267948963) q[19]; +u2(0.0,4.71238898038469) q[4]; +cx q[19],q[4]; +u3(0.46154381641456577,-0.3841130150271105,-1.703756956196481) q[19]; +u3(2.3843232658542,3.204574342185742,-1.7737199200497218) q[4]; +cx q[19],q[4]; +u3(0.9113949646441597,1.5707963267948966,1.5707963267948966) q[19]; +u2(-3.141592653589793,0.06558440778923913) q[4]; +cx q[19],q[4]; +u3(0.2279055716160626,3.1415926535897936,1.5707963267948961) q[19]; +u2(0.0,4.71238898038469) q[4]; +cx q[19],q[4]; +u3(1.6449290625279451,3.204091460867121,-1.6740061291361896) q[19]; +u3(2.446371692113178,1.9220033030487746,6.873390893124853) q[4]; +cx q[6],q[19]; +u2(-3.141592653589793,0.39603581127126297) q[19]; +u3(0.9735326263843875,1.5707963267948966,1.5707963267948966) q[6]; +cx q[6],q[19]; +u2(0.0,4.71238898038469) q[19]; +u3(0.1814145942480233,3.1415926535897936,1.5707963267948961) q[6]; +cx q[6],q[19]; +u3(0.6333336198449018,0.1962017490104665,4.591001538892515) q[19]; +u3(2.5244270747353044,2.8504867407636656,-2.598641161566418) q[6]; +u3(2.1312210209771916,-2.9584556067929872,-0.39889448028072816) q[9]; +cx q[2],q[9]; +u3(1.3346183822810784,1.5707963267948966,1.5707963267948966) q[2]; +u2(-3.141592653589793,0.03692081409076309) q[9]; +cx q[2],q[9]; +u3(0.3170561566201007,3.1415926535897936,1.5707963267948961) q[2]; +u2(0.0,4.71238898038469) q[9]; +cx q[2],q[9]; +u3(1.5381805820144694,-1.4257567055199145,-3.2822542834690926) q[2]; +cx q[2],q[5]; +u3(0.6901487795626271,1.5707963267948968,1.5707963267948968) q[2]; +u2(-3.141592653589793,0.3041869013888725) q[5]; +cx q[2],q[5]; +u3(0.14475416453983334,-4.440892098500626e-16,4.71238898038469) q[2]; +u2(0.0,4.71238898038469) q[5]; +cx q[2],q[5]; +u3(2.01927664582641,4.7716371064099246,5.500483771573364) q[2]; +cx q[11],q[2]; +u3(0.6793404494397296,1.5707963267948966,1.5707963267948966) q[11]; +u2(-3.141592653589793,0.5468841493578034) q[2]; +cx q[11],q[2]; +u3(0.25844405760007166,-8.881784197001252e-16,4.712388980384691) q[11]; +u2(0.0,4.71238898038469) q[2]; +cx q[11],q[2]; +u3(2.686201516966278,1.7623616933672457,-2.6779216216451895) q[11]; +cx q[14],q[11]; +u2(-3.141592653589793,0.4457575180447755) q[11]; +u3(0.827790562650576,1.5707963267948966,1.5707963267948966) q[14]; +cx q[14],q[11]; +u2(0.0,4.71238898038469) q[11]; +u3(0.017280248590304498,3.1415926535897976,1.5707963267948921) q[14]; +cx q[14],q[11]; +u3(1.2021819216238718,-5.05214922362665,3.4725163564173096) q[11]; +u3(1.8457404631336616,-3.6684547602639066,-1.7669852715700873) q[14]; +u3(2.3644084486971084,-6.876349442498879,2.2071185966735145) q[2]; +u3(2.824935912136814,-4.0560747490351385,-2.4626488697868245) q[5]; +u3(2.5841550654988166,-1.9321473930119186,-1.8584241293375827) q[9]; +cx q[9],q[3]; +u2(-3.141592653589793,0.167133811268098) q[3]; +u3(0.7029655641786147,1.5707963267948966,1.5707963267948966) q[9]; +cx q[9],q[3]; +u2(0.0,4.71238898038469) q[3]; +u3(0.18305746035307435,3.1415926535897936,1.570796326794897) q[9]; +cx q[9],q[3]; +u3(0.794487521164274,4.631159455776246,-1.8658782563237524) q[3]; +cx q[0],q[3]; +u3(0.9705305269977237,1.5707963267948966,1.5707963267948966) q[0]; +u2(-3.141592653589793,0.10147414270525945) q[3]; +cx q[0],q[3]; +u3(0.7540596332169244,0.0,4.71238898038469) q[0]; +u2(0.0,4.71238898038469) q[3]; +cx q[0],q[3]; +u3(2.582744546141887,-0.0061738357222427265,6.549177878110461) q[0]; +cx q[0],q[10]; +u3(0.9918897513654754,1.5707963267948966,1.5707963267948966) q[0]; +u2(-3.141592653589793,0.12586695337527232) q[10]; +cx q[0],q[10]; +u3(0.1098984202406201,3.141592653589793,1.5707963267948966) q[0]; +u2(0.0,4.71238898038469) q[10]; +cx q[0],q[10]; +u3(1.862359874702037,4.999653230343322,-0.7862673091549612) q[0]; +u3(1.9605026296136265,-8.014440007633263,-1.8939102344450984) q[10]; +cx q[10],q[15]; +u3(0.5810216073825492,1.5707963267948966,1.5707963267948966) q[10]; +u2(-3.141592653589793,0.15007233113668583) q[15]; +cx q[10],q[15]; +u3(0.430094501351598,-4.440892098500626e-16,4.71238898038469) q[10]; +u2(0.0,4.71238898038469) q[15]; +cx q[10],q[15]; +u3(0.4610009091771613,4.079030298559038,3.025865400640172) q[10]; +u3(1.6480602586527633,-1.612690610918673,-4.048846188121705) q[15]; +cx q[16],q[0]; +u2(-3.141592653589793,0.0901292846243944) q[0]; +u3(0.8226462516935001,1.5707963267948966,1.5707963267948966) q[16]; +cx q[16],q[0]; +u2(0.0,4.71238898038469) q[0]; +u3(0.24912488997551144,3.141592653589793,1.5707963267948966) q[16]; +cx q[16],q[0]; +u3(1.0715750719933266,2.6129802290707023,-2.976802863736766) q[0]; +u3(1.9584373749198525,-2.9850490540044423,-2.336175876844194) q[16]; +cx q[12],q[16]; +u3(0.21678722113238794,1.5707963267948968,1.5707963267948968) q[12]; +u2(-3.141592653589793,0.2994661734880868) q[16]; +cx q[12],q[16]; +u3(0.10453804257039116,3.141592653589794,1.5707963267948957) q[12]; +u2(0.0,4.71238898038469) q[16]; +cx q[12],q[16]; +u3(2.0078444975971625,-0.04423332693839921,-2.7158799983295183) q[12]; +u3(2.7528015655416205,-2.387904650310066,-1.4677750652828108) q[16]; +u3(1.356735129597619,1.1416209600273168,-3.265492103012816) q[3]; +cx q[3],q[17]; +u2(-3.141592653589793,0.11825469817812007) q[17]; +u3(1.3871226629367983,1.5707963267948966,1.5707963267948966) q[3]; +cx q[3],q[17]; +u2(0.0,4.71238898038469) q[17]; +u3(0.5868520366238604,-4.440892098500626e-16,4.71238898038469) q[3]; +cx q[3],q[17]; +u3(1.1590263108372854,-3.871447257969312,-0.6600705316015287) q[17]; +u3(1.1786725258807584,-1.4845635206395609,-2.675834908770594) q[3]; +cx q[7],q[3]; +u2(-3.141592653589793,0.02153028630313436) q[3]; +u3(1.1585834134502007,1.5707963267948966,1.5707963267948966) q[7]; +cx q[7],q[3]; +u2(0.0,4.71238898038469) q[3]; +u3(0.302717311144025,0.0,4.71238898038469) q[7]; +cx q[7],q[3]; +u3(2.5547571729990652,0.4878358701421688,-1.5824144286149262) q[3]; +u3(2.0323774654413636,-3.4583479692271064,-0.9547502255942537) q[7]; +u3(2.2148738113550306,-1.188656092090671,1.7694937219023446) q[9]; +cx q[9],q[5]; +u2(-3.141592653589793,0.564914667393033) q[5]; +u3(0.7419953319976382,1.5707963267948968,1.5707963267948968) q[9]; +cx q[9],q[5]; +u2(0.0,4.71238898038469) q[5]; +u3(0.20034004819485518,0.0,4.71238898038469) q[9]; +cx q[9],q[5]; +u3(1.4387801925700252,-1.4157988331116758,7.320740225045072) q[5]; +cx q[2],q[5]; +u3(0.8518812331754065,1.5707963267948966,1.5707963267948966) q[2]; +u2(-3.141592653589793,0.6464395875295355) q[5]; +cx q[2],q[5]; +u3(0.41829897495478335,3.141592653589793,1.5707963267948963) q[2]; +u2(0.0,4.71238898038469) q[5]; +cx q[2],q[5]; +u3(0.7745183545187533,-6.721981354631136,0.9772192211788755) q[2]; +cx q[11],q[2]; +u3(0.4516864547740717,1.5707963267948966,1.5707963267948966) q[11]; +u2(-3.141592653589793,0.030630784817789802) q[2]; +cx q[11],q[2]; +u3(0.14615087942250177,3.1415926535897936,1.5707963267948961) q[11]; +u2(0.0,4.71238898038469) q[2]; +cx q[11],q[2]; +u3(1.3678275186991544,-0.8648128447907105,0.058395436015228785) q[11]; +cx q[15],q[11]; +u2(-3.141592653589793,0.14517886136971625) q[11]; +u3(0.7819390336091647,1.5707963267948966,1.5707963267948966) q[15]; +cx q[15],q[11]; +u2(0.0,4.71238898038469) q[11]; +u3(0.10656323475840374,-8.881784197001252e-16,4.712388980384691) q[15]; +cx q[15],q[11]; +u3(1.6662444040430953,1.243682114042534,0.425402102628909) q[11]; +u3(1.8962245924561818,1.483965295593703,-6.3057050927201495) q[15]; +u3(1.835450883436903,5.994386022467835,0.41930475166665326) q[2]; +u3(0.9929419363731711,2.000891682108374,-0.26957059572796627) q[5]; +cx q[5],q[14]; +u2(-3.141592653589793,0.11441671847730639) q[14]; +u3(0.8185524738422686,1.5707963267948966,1.5707963267948966) q[5]; +cx q[5],q[14]; +u2(0.0,4.71238898038469) q[14]; +u3(0.1062586997725654,3.1415926535897944,1.5707963267948961) q[5]; +cx q[5],q[14]; +u3(1.5692777512738914,-1.9499399858207076,3.4553618751453117) q[14]; +u3(2.25941099797049,0.9577038418320387,4.662176554581553) q[5]; +cx q[5],q[10]; +u2(-3.141592653589793,0.17005484171171714) q[10]; +u3(0.2314094078927303,1.5707963267948966,1.570796326794897) q[5]; +cx q[5],q[10]; +u2(0.0,4.71238898038469) q[10]; +u3(0.22189215771803084,3.1415926535897936,1.5707963267948961) q[5]; +cx q[5],q[10]; +u3(1.0816815504340083,-3.2069949682381065,0.37464574865675515) q[10]; +cx q[10],q[18]; +u3(0.967803718816416,1.5707963267948966,1.5707963267948966) q[10]; +u2(-3.141592653589793,0.04994749223609585) q[18]; +cx q[10],q[18]; +u3(0.2661292094921602,-8.881784197001252e-16,4.712388980384691) q[10]; +u2(0.0,4.71238898038469) q[18]; +cx q[10],q[18]; +u3(1.8282179371451732,3.821786910848666,0.6072833200544594) q[10]; +u3(2.1857582586545528,2.9362699739281792,0.3581530515814014) q[18]; +u3(2.2709760367980087,1.397792655880242,-0.6089013858888368) q[5]; +cx q[5],q[15]; +u2(-3.141592653589793,0.27863542386863416) q[15]; +u3(0.7671192244244052,1.5707963267948966,1.5707963267948966) q[5]; +cx q[5],q[15]; +u2(0.0,4.71238898038469) q[15]; +u3(0.09888993740403797,-8.881784197001252e-16,4.712388980384691) q[5]; +cx q[5],q[15]; +u3(0.7889810413863024,0.7833209619303427,0.36013826828639717) q[15]; +cx q[10],q[15]; +u3(0.8005279509599451,1.5707963267948966,1.5707963267948966) q[10]; +u2(-3.141592653589793,0.35125356783536255) q[15]; +cx q[10],q[15]; +u3(0.6789689857853356,3.141592653589793,1.5707963267948966) q[10]; +u2(0.0,4.71238898038469) q[15]; +cx q[10],q[15]; +u3(2.785459184883791,-3.8867779816960906,-1.1806786684177568) q[10]; +u3(0.6382228193009042,-2.199024158985385,3.390539722022919) q[15]; +u3(1.7884567427741533,6.66785355000251,-0.2997886256613733) q[5]; +cx q[7],q[14]; +u2(-3.141592653589793,0.181367884504972) q[14]; +u3(1.2558961710211456,1.5707963267948966,1.5707963267948966) q[7]; +cx q[7],q[14]; +u2(0.0,4.71238898038469) q[14]; +u3(0.04899649558976855,-1.7763568394002505e-15,4.7123889803846915) q[7]; +cx q[7],q[14]; +u3(2.2385130418562023,1.882509111823469,0.687781520770969) q[14]; +u3(2.7110890062503277,-0.6743636121281754,3.88993577445883) q[7]; +cx q[8],q[7]; +u2(-3.141592653589793,0.11112819571569155) q[7]; +u3(1.2563973646947826,1.5707963267948966,1.5707963267948966) q[8]; +cx q[8],q[7]; +u2(0.0,4.71238898038469) q[7]; +u3(0.6546508426146634,3.141592653589793,1.5707963267948966) q[8]; +cx q[8],q[7]; +u3(2.051027788820968,4.788558239381928,3.6078221102981) q[7]; +u3(0.9826917927219965,1.9824277342023164,2.7740288734348146) q[8]; +u3(2.436139710121061,2.839189461606243,2.7805808382095187) q[9]; +cx q[9],q[1]; +u2(-3.141592653589793,0.6615790619810742) q[1]; +u3(0.3349865871853164,1.5707963267948968,1.5707963267948968) q[9]; +cx q[9],q[1]; +u2(0.0,4.71238898038469) q[1]; +u3(0.07170723981952441,-1.3322676295501878e-15,4.7123889803846915) q[9]; +cx q[9],q[1]; +u3(1.5467423953654784,-1.432466675479986,-2.4067408639543038) q[1]; +cx q[17],q[1]; +u2(-3.141592653589793,0.31489040745646446) q[1]; +u3(0.7573049098542375,1.5707963267948968,1.5707963267948968) q[17]; +cx q[17],q[1]; +u2(0.0,4.71238898038469) q[1]; +u3(0.4026110061529218,3.141592653589793,1.5707963267948963) q[17]; +cx q[17],q[1]; +u3(0.8595774933555639,-0.019574318332751695,1.869766187477722) q[1]; +cx q[1],q[3]; +u3(0.772016575511955,1.5707963267948968,1.5707963267948968) q[1]; +u3(2.387513433539487,2.526535157423219,1.8348350552825199) q[17]; +cx q[0],q[17]; +u3(0.7667385143994422,1.5707963267948968,1.5707963267948968) q[0]; +u2(-3.141592653589793,0.01560460482128434) q[17]; +cx q[0],q[17]; +u3(0.021796710207446994,-6.661338147750939e-15,4.712388980384697) q[0]; +u2(0.0,4.71238898038469) q[17]; +cx q[0],q[17]; +u3(1.552903276308653,-0.22722773917344163,3.062185738038364) q[0]; +cx q[0],q[14]; +u3(0.794246193846666,1.5707963267948966,1.5707963267948966) q[0]; +u2(-3.141592653589793,0.423213176832375) q[14]; +cx q[0],q[14]; +u3(0.4745015968189786,-4.440892098500626e-16,4.71238898038469) q[0]; +u2(0.0,4.71238898038469) q[14]; +cx q[0],q[14]; +u3(0.8365743834716634,2.313247506884024,-0.8751373742396036) q[0]; +cx q[0],q[5]; +u3(0.539191344151256,1.5707963267948968,1.5707963267948968) q[0]; +u3(0.5494531293703881,1.4240260291956517,3.2049628766859373) q[14]; +u3(1.7088432319767275,-1.6323396058237134,3.3665897300112144) q[17]; +cx q[17],q[19]; +u3(0.5994955866787549,1.5707963267948966,1.5707963267948966) q[17]; +u2(-3.141592653589793,0.7020651400620948) q[19]; +cx q[17],q[19]; +u3(0.04090095945353209,3.141592653589795,1.5707963267948946) q[17]; +u2(0.0,4.71238898038469) q[19]; +cx q[17],q[19]; +u3(1.453120486236294,3.3392497043693234,0.43453421468873055) q[17]; +u3(1.5865237105493049,7.208912377514392,-0.22983361688207715) q[19]; +cx q[19],q[7]; +u3(0.8755966150993704,1.5707963267948966,1.5707963267948966) q[19]; +u2(-3.141592653589793,0.247388119686635) q[3]; +cx q[1],q[3]; +u3(0.3757094774843284,3.141592653589793,1.5707963267948963) q[1]; +u2(0.0,4.71238898038469) q[3]; +cx q[1],q[3]; +u3(2.024816503224643,3.1777374254374138,-1.84028945542962) q[1]; +cx q[1],q[11]; +u3(0.7078644982876973,1.5707963267948968,1.5707963267948968) q[1]; +u2(-3.141592653589793,0.0029014783366039243) q[11]; +cx q[1],q[11]; +u3(0.3065387457323236,-4.440892098500626e-16,4.71238898038469) q[1]; +u2(0.0,4.71238898038469) q[11]; +cx q[1],q[11]; +u3(2.4620111263157067,1.109872191530784,5.83080018285651) q[1]; +u3(1.6437685140311529,1.2610682589615063,1.398867900515697) q[11]; +u3(1.3288631459344458,-5.401160300155028,-0.5094578837466159) q[3]; +u2(-3.141592653589793,0.3102919253497658) q[5]; +cx q[0],q[5]; +u3(0.0434545547866422,-1.7763568394002505e-15,4.7123889803846915) q[0]; +u2(0.0,4.71238898038469) q[5]; +cx q[0],q[5]; +u3(1.661006129961522,-1.2496387462645708,0.29358080442896295) q[0]; +cx q[15],q[0]; +u2(-3.141592653589793,0.20965016624737842) q[0]; +u3(0.7926562683834988,1.5707963267948968,1.5707963267948968) q[15]; +cx q[15],q[0]; +u2(0.0,4.71238898038469) q[0]; +u3(0.07941652034308598,3.141592653589794,1.5707963267948957) q[15]; +cx q[15],q[0]; +u3(1.464635223041535,1.1548413436063345,-6.268247893217806) q[0]; +u3(1.8754604609974312,-2.983309918110762,-5.84216071003266) q[15]; +u3(2.688274205503619,-6.020468382224688,-3.7505189423690317) q[5]; +u2(-3.141592653589793,0.42703711146441314) q[7]; +cx q[19],q[7]; +u3(0.24933664434882705,3.1415926535897936,1.5707963267948961) q[19]; +u2(0.0,4.71238898038469) q[7]; +cx q[19],q[7]; +u3(2.8440659401608404,2.1057000488044926,0.9992701618899226) q[19]; +u3(1.868619715299539,0.2737113815768071,6.828109267367076) q[7]; +u3(0.5509061665359195,2.5305452766614596,0.763809143025456) q[9]; +cx q[13],q[9]; +u3(1.0283545223246136,1.5707963267948968,1.5707963267948968) q[13]; +u2(-3.141592653589793,0.11547845613662) q[9]; +cx q[13],q[9]; +u3(0.4080884652688324,3.141592653589793,1.5707963267948963) q[13]; +u2(0.0,4.71238898038469) q[9]; +cx q[13],q[9]; +u3(1.762552996869168,0.7651611579305486,0.767933339104585) q[13]; +cx q[13],q[2]; +u3(0.44255378848275867,1.5707963267948966,1.5707963267948966) q[13]; +u2(-3.141592653589793,0.18137174175329585) q[2]; +cx q[13],q[2]; +u3(0.1985846196438673,-8.881784197001252e-16,4.712388980384691) q[13]; +u2(0.0,4.71238898038469) q[2]; +cx q[13],q[2]; +u3(0.8319714166921853,3.7418672070400145,-5.15868536037978) q[13]; +u3(1.6859578878849106,-2.908552346893962,-3.4450854087267686) q[2]; +cx q[16],q[2]; +u3(0.990756190227659,1.5707963267948966,1.5707963267948966) q[16]; +u2(-3.141592653589793,0.4590340060849025) q[2]; +cx q[16],q[2]; +u3(0.1478377143323651,-4.440892098500626e-16,4.71238898038469) q[16]; +u2(0.0,4.71238898038469) q[2]; +cx q[16],q[2]; +u3(1.3092880458267036,2.2189738256556253,3.433946471307459) q[16]; +cx q[1],q[16]; +u3(1.202222615462979,1.5707963267948968,1.5707963267948968) q[1]; +u2(-3.141592653589793,0.2834310100054953) q[16]; +cx q[1],q[16]; +u3(0.026446440640777,3.1415926535897962,1.5707963267948934) q[1]; +u2(0.0,4.71238898038469) q[16]; +cx q[1],q[16]; +u3(2.129570299815538,-3.76668465476711,2.5508121397479555) q[1]; +cx q[10],q[1]; +u2(-3.141592653589793,0.17267865574235053) q[1]; +u3(0.8237306531434542,1.5707963267948966,1.5707963267948966) q[10]; +cx q[10],q[1]; +u2(0.0,4.71238898038469) q[1]; +u3(0.5091545046847452,-4.440892098500626e-16,4.71238898038469) q[10]; +cx q[10],q[1]; +u3(2.015035429975726,4.098773733236529,5.818830310366647) q[1]; +u3(2.1204709963354658,4.368604364628184,5.718161622033113) q[10]; +u3(1.8585674551475435,-4.680429053872988,-2.5349657728863604) q[16]; +u3(1.1876222465430812,-1.7800923209889712,1.7056553393812606) q[2]; +cx q[17],q[2]; +u3(0.9238891565146032,1.5707963267948966,1.5707963267948966) q[17]; +u2(-3.141592653589793,0.1564587430543405) q[2]; +cx q[17],q[2]; +u3(0.7032629595095643,3.141592653589793,1.5707963267948966) q[17]; +u2(0.0,4.71238898038469) q[2]; +cx q[17],q[2]; +u3(2.0785883023210223,-0.18589219482466435,-3.7090259550835247) q[17]; +u3(0.2890742061062212,3.7633719157075927,-1.6672888451624892) q[2]; +cx q[3],q[13]; +u2(-3.141592653589793,0.00991491306508685) q[13]; +u3(1.214383141880286,1.5707963267948966,1.5707963267948966) q[3]; +cx q[3],q[13]; +u2(0.0,4.71238898038469) q[13]; +u3(0.31947179653147667,0.0,4.71238898038469) q[3]; +cx q[3],q[13]; +u3(1.4310472255509772,-1.3091423048163389,0.7123985505041673) q[13]; +u3(0.5850245325818916,1.1794664267195984,0.6255893806445552) q[3]; +cx q[13],q[3]; +u3(0.7824034364990415,1.5707963267948968,1.5707963267948968) q[13]; +u2(-3.141592653589793,0.44070401005295956) q[3]; +cx q[13],q[3]; +u3(0.13483617166260795,-1.3322676295501878e-15,4.7123889803846915) q[13]; +u2(0.0,4.71238898038469) q[3]; +cx q[13],q[3]; +u3(1.6734089641019514,3.888590415529015,-0.06457090024504852) q[13]; +cx q[13],q[16]; +u3(0.4785571955584044,1.5707963267948963,1.5707963267948968) q[13]; +u2(-3.141592653589793,0.47263134934824635) q[16]; +cx q[13],q[16]; +u3(0.16897037070784143,-4.440892098500626e-16,4.71238898038469) q[13]; +u2(0.0,4.71238898038469) q[16]; +cx q[13],q[16]; +u3(1.1565158772393411,-1.1780602621981608,-3.1218821611501175) q[13]; +u3(1.0308703025157853,1.9896874113439953,1.642003153290669) q[16]; +u3(0.8400523644947263,-1.673671294516326,-6.816193471328477) q[3]; +u3(1.5021127546880608,-1.984905399713739,1.6141535374846323) q[9]; +cx q[4],q[9]; +u3(0.5247297995361091,1.5707963267948966,1.5707963267948966) q[4]; +u2(-3.141592653589793,0.272574139448331) q[9]; +cx q[4],q[9]; +u3(0.13336672466991334,3.141592653589794,1.570796326794896) q[4]; +u2(0.0,4.71238898038469) q[9]; +cx q[4],q[9]; +u3(0.2251705743307372,-4.305657600685077,0.461411534684388) q[4]; +cx q[4],q[6]; +u3(1.015530857223207,1.5707963267948966,1.5707963267948966) q[4]; +u2(-3.141592653589793,0.3460462590080624) q[6]; +cx q[4],q[6]; +u3(0.13708538594224634,0.0,4.712388980384691) q[4]; +u2(0.0,4.71238898038469) q[6]; +cx q[4],q[6]; +u3(1.4850225399009036,-1.1666270796138107,0.9220494124001042) q[4]; +cx q[18],q[4]; +u3(1.2966777469317634,1.5707963267948968,1.5707963267948968) q[18]; +u2(-3.141592653589793,0.06107691294031259) q[4]; +cx q[18],q[4]; +u3(0.3277118134165587,3.1415926535897936,1.5707963267948961) q[18]; +u2(0.0,4.71238898038469) q[4]; +cx q[18],q[4]; +u3(1.8331793244812609,2.691510253871309,-2.029406142119302) q[18]; +cx q[18],q[3]; +u3(0.24437460591935994,1.5707963267948966,1.570796326794897) q[18]; +u2(-3.141592653589793,0.0936468923563556) q[3]; +cx q[18],q[3]; +u3(0.18392053002311015,3.1415926535897936,1.5707963267948961) q[18]; +u2(0.0,4.71238898038469) q[3]; +cx q[18],q[3]; +u3(1.7008584599033103,-1.9013456166318523,-2.2666376226986613) q[18]; +u3(1.3057382613068358,3.3875605856372566,1.132636730085292) q[3]; +u3(2.29265267473249,0.025979582102642285,-3.376604334964455) q[4]; +cx q[4],q[2]; +u2(-3.141592653589793,0.5537934879843203) q[2]; +u3(0.8498440520758926,1.5707963267948966,1.5707963267948966) q[4]; +cx q[4],q[2]; +u2(0.0,4.71238898038469) q[2]; +u3(0.12798856656781604,-8.881784197001252e-16,4.712388980384691) q[4]; +cx q[4],q[2]; +u3(2.060786433112723,-0.4782728556397193,2.4465780230859404) q[2]; +u3(1.4966238301218908,0.9278328514642369,-0.35481352373742703) q[4]; +cx q[4],q[16]; +u2(-3.141592653589793,0.2787357873261085) q[16]; +u3(0.7995570228282849,1.5707963267948966,1.5707963267948966) q[4]; +cx q[4],q[16]; +u2(0.0,4.71238898038469) q[16]; +u3(0.32528646330002103,-4.440892098500626e-16,4.71238898038469) q[4]; +cx q[4],q[16]; +u3(2.742445181570524,-1.8374932919001479,3.4707333979292567) q[16]; +u3(1.4603534218909504,-0.0186155620146482,5.789796691433464) q[4]; +u3(0.9195813796213257,-5.174753507225676,-3.991590205548325) q[6]; +cx q[6],q[11]; +u2(-3.141592653589793,0.13695598089395755) q[11]; +u3(1.028391747835556,1.5707963267948966,1.5707963267948966) q[6]; +cx q[6],q[11]; +u2(0.0,4.71238898038469) q[11]; +u3(0.2422512824966606,0.0,4.712388980384691) q[6]; +cx q[6],q[11]; +u3(1.9171049053506413,-0.14272574700301854,-1.4319268453798675) q[11]; +u3(1.3383739078226367,0.5614268013262693,2.322805412355111) q[6]; +cx q[17],q[6]; +u3(0.9856625518636508,1.5707963267948966,1.5707963267948966) q[17]; +u2(-3.141592653589793,0.17181712295491858) q[6]; +cx q[17],q[6]; +u3(0.14398018865110068,3.1415926535897936,1.5707963267948961) q[17]; +u2(0.0,4.71238898038469) q[6]; +cx q[17],q[6]; +u3(2.4674308755534686,-5.406665553622542,-6.381390658199866) q[17]; +cx q[1],q[17]; +u3(0.869733943511238,1.5707963267948968,1.5707963267948968) q[1]; +u2(-3.141592653589793,0.18243173461485007) q[17]; +cx q[1],q[17]; +u3(0.18161398842792875,3.141592653589794,1.570796326794896) q[1]; +u2(0.0,4.71238898038469) q[17]; +cx q[1],q[17]; +u3(2.029573411083206,-0.8695195407638856,1.5557756022932492) q[1]; +u3(2.0828424505297276,0.09650506142679083,-5.327358851072496) q[17]; +u3(1.2781961620447537,0.6581557892712577,-1.8858106487042108) q[6]; +cx q[0],q[6]; +u3(1.2011571490057376,1.5707963267948966,1.5707963267948966) q[0]; +u2(-3.141592653589793,0.11205207784806959) q[6]; +cx q[0],q[6]; +u3(0.5809343777307243,-4.440892098500626e-16,4.71238898038469) q[0]; +u2(0.0,4.71238898038469) q[6]; +cx q[0],q[6]; +u3(2.3754583276530585,3.0117009177634277,0.7832298496295973) q[0]; +u3(0.47694881299923136,-0.7230390632985372,-1.8948704552587614) q[6]; +u3(1.619491457746587,3.4802560731396293,3.7347568642547464) q[9]; +cx q[12],q[9]; +u3(0.6365284911246735,1.5707963267948968,1.5707963267948968) q[12]; +u2(-3.141592653589793,0.1678523317703875) q[9]; +cx q[12],q[9]; +u3(0.25015778861714094,3.1415926535897936,1.5707963267948961) q[12]; +u2(0.0,4.71238898038469) q[9]; +cx q[12],q[9]; +u3(0.9472227991988201,-2.178971423929354,4.9507775329866135) q[12]; +cx q[12],q[8]; +u3(0.9693036829297157,1.5707963267948966,1.5707963267948966) q[12]; +u2(-3.141592653589793,0.13886206744352791) q[8]; +cx q[12],q[8]; +u3(0.15798408191376703,3.1415926535897936,1.5707963267948961) q[12]; +u2(0.0,4.71238898038469) q[8]; +cx q[12],q[8]; +u3(0.7762282044001474,-2.8543927048666182,-2.7326685202019947) q[12]; +cx q[12],q[11]; +u2(-3.141592653589793,0.11548583061780526) q[11]; +u3(0.8295912419843288,1.5707963267948966,1.5707963267948966) q[12]; +cx q[12],q[11]; +u2(0.0,4.71238898038469) q[11]; +u3(0.5937050437732018,3.141592653589793,1.5707963267948966) q[12]; +cx q[12],q[11]; +u3(2.182653765671621,-1.428705035961809,-3.208634916606776) q[11]; +u3(1.1166753149217954,1.3730059242706911,-0.635162492119635) q[12]; +cx q[12],q[18]; +u3(0.9942781602679421,1.5707963267948966,1.5707963267948966) q[12]; +u2(-3.141592653589793,0.4234840610596504) q[18]; +cx q[12],q[18]; +u3(0.5423004870898275,-4.440892098500626e-16,4.71238898038469) q[12]; +u2(0.0,4.71238898038469) q[18]; +cx q[12],q[18]; +u3(1.6374646881796613,0.5809985403178213,5.283598780281498) q[12]; +u3(1.3972698107075903,-1.6418495802266588,3.303721697057455) q[18]; +u3(1.610941161470941,2.36498788916449,0.3718703716686037) q[8]; +cx q[7],q[8]; +u3(0.9303349082828872,1.5707963267948966,1.5707963267948966) q[7]; +u2(-3.141592653589793,0.1744698793095536) q[8]; +cx q[7],q[8]; +u3(0.2411093527001425,3.1415926535897936,1.5707963267948961) q[7]; +u2(0.0,4.71238898038469) q[8]; +cx q[7],q[8]; +u3(1.9000622765903379,4.713861777505029,-2.6775764428252375) q[7]; +cx q[7],q[15]; +u2(-3.141592653589793,0.1515307917891917) q[15]; +u3(0.9259333424922922,1.5707963267948966,1.5707963267948966) q[7]; +cx q[7],q[15]; +u2(0.0,4.71238898038469) q[15]; +u3(0.3132509692376534,4.440892098500626e-16,4.71238898038469) q[7]; +cx q[7],q[15]; +u3(2.283886287151433,-2.4148988385105516,0.30190502906330474) q[15]; +u3(0.5209630257723509,4.297264653595359,1.2222814132406437) q[7]; +u3(2.506620760172989,-0.8323940938556211,2.5884712722085923) q[8]; +cx q[11],q[8]; +u3(0.4117195631002615,1.5707963267948963,1.5707963267948968) q[11]; +u2(-3.141592653589793,0.1785009913254907) q[8]; +cx q[11],q[8]; +u3(0.24575974365603354,0.0,4.712388980384691) q[11]; +u2(0.0,4.71238898038469) q[8]; +cx q[11],q[8]; +u3(2.682652019026709,-1.448415161083064,-2.897867662699694) q[11]; +u3(2.7815545615441173,-3.2270273454207574,0.6116956027677805) q[8]; +u3(0.7691377025547824,-5.003547199234882,2.562500407682067) q[9]; +cx q[9],q[14]; +u2(-3.141592653589793,0.5506590108656226) q[14]; +u3(0.8185514061816438,1.5707963267948966,1.5707963267948966) q[9]; +cx q[9],q[14]; +u2(0.0,4.71238898038469) q[14]; +u3(0.005592614062992687,-2.7977620220553945e-14,4.712388980384718) q[9]; +cx q[9],q[14]; +u3(1.1002610393526067,-1.7384149355360314,-2.8956071324979806) q[14]; +cx q[19],q[14]; +u2(-3.141592653589793,0.14261596209798078) q[14]; +u3(0.5134265575944572,1.5707963267948966,1.5707963267948966) q[19]; +cx q[19],q[14]; +u2(0.0,4.71238898038469) q[14]; +u3(0.14031356580089552,3.1415926535897936,1.5707963267948961) q[19]; +cx q[19],q[14]; +u3(1.2951393951474106,-1.400079898080912,-1.4849252098671495) q[14]; +cx q[14],q[3]; +u3(0.9101812223671518,1.5707963267948966,1.5707963267948966) q[14]; +u3(1.7025934052686997,1.4736343576937143,-5.29383841910612) q[19]; +cx q[19],q[10]; +u2(-3.141592653589793,0.050909293359896246) q[10]; +u3(1.241460647687281,1.5707963267948966,1.5707963267948966) q[19]; +cx q[19],q[10]; +u2(0.0,4.71238898038469) q[10]; +u3(0.5918657108312448,-4.440892098500626e-16,4.71238898038469) q[19]; +cx q[19],q[10]; +u3(2.2076959602766073,1.974980379313369,-1.0316936732034032) q[10]; +u3(2.1628522720736965,-4.385070612706188,-0.8177130436643669) q[19]; +u2(-3.141592653589793,0.03610693334971593) q[3]; +cx q[14],q[3]; +u3(0.8363612883857543,3.141592653589793,1.5707963267948966) q[14]; +u2(0.0,4.71238898038469) q[3]; +cx q[14],q[3]; +u3(0.6110664844280127,0.19514023213334464,-1.9262428072699522) q[14]; +u3(1.3579378156392274,0.8622595487380209,-0.4103368737247175) q[3]; +u3(2.3995533519025716,-3.4990935307331434,-2.2113183987762692) q[9]; +cx q[5],q[9]; +u3(0.6059535473732266,1.5707963267948966,1.5707963267948966) q[5]; +u2(-3.141592653589793,0.17306284186256526) q[9]; +cx q[5],q[9]; +u3(0.03649626323988135,3.1415926535897953,1.5707963267948943) q[5]; +u2(0.0,4.71238898038469) q[9]; +cx q[5],q[9]; +u3(0.6020688784157441,3.074214742732919,2.6336863621031097) q[5]; +cx q[5],q[2]; +u2(-3.141592653589793,0.2981973445790749) q[2]; +u3(0.5312426168284315,1.5707963267948966,1.5707963267948966) q[5]; +cx q[5],q[2]; +u2(0.0,4.71238898038469) q[2]; +u3(0.11561243567324933,-4.440892098500626e-16,4.7123889803846915) q[5]; +cx q[5],q[2]; +u3(1.3105462044213003,-1.4529163390028923,3.458017997664835) q[2]; +u3(2.343606692862401,-4.91937022531432,-1.2372149815266174) q[5]; +u3(1.0448591485371501,0.5841739502087033,-2.7535129312309383) q[9]; +cx q[9],q[13]; +u2(-3.141592653589793,0.1099971198389813) q[13]; +u3(0.4801469816451432,1.5707963267948966,1.5707963267948966) q[9]; +cx q[9],q[13]; +u2(0.0,4.71238898038469) q[13]; +u3(0.061002075816420274,-1.3322676295501878e-15,4.7123889803846915) q[9]; +cx q[9],q[13]; +u3(0.9487658583565853,3.1393030676196996,-1.8983173694109863) q[13]; +u3(0.9954627179537904,3.4617476658897273,-0.5308322420301541) q[9]; +barrier q[0],q[15],q[4],q[19],q[8],q[1],q[12],q[5],q[16],q[9],q[13],q[2],q[17],q[6],q[10],q[3],q[14],q[7],q[18],q[11]; +measure q[18] -> cr[0]; +measure q[8] -> cr[1]; +measure q[3] -> cr[2]; +measure q[11] -> cr[3]; +measure q[0] -> cr[4]; +measure q[9] -> cr[5]; +measure q[10] -> cr[6]; +measure q[15] -> cr[7]; +measure q[6] -> cr[8]; +measure q[2] -> cr[9]; +measure q[14] -> cr[10]; +measure q[19] -> cr[11]; +measure q[16] -> cr[12]; +measure q[13] -> cr[13]; +measure q[5] -> cr[14]; +measure q[17] -> cr[15]; +measure q[4] -> cr[16]; +measure q[7] -> cr[17]; +measure q[1] -> cr[18]; +measure q[12] -> cr[19]; diff --git a/tests/e2e_test.py b/tests/e2e_test.py index 8c0c4e6..62e8ff2 100644 --- a/tests/e2e_test.py +++ b/tests/e2e_test.py @@ -1,43 +1,32 @@ from pytket.phir.machine_class import Machine -from pytket.phir.placement import optimized_place -from pytket.phir.routing import transport_cost -from pytket.phir.sharding.sharder import Sharder -from pytket.phir.sharding.shards2ops import parse_shards_naive -from tests.sample_data import QasmFiles, get_qasm_as_circuit +from pytket.phir.pandr import place_and_route +from pytket.phir.placement import placement_check +from tests.sample_data import QasmFiles if __name__ == "__main__": - # Right now this is the achine we will use because the biggest test circuit is n=10 - # The placement algo also assumes that the trap will always be fully loaded - # for example, if it is an n=10 trap, we will place and route as thought there are always 10 qubits # noqa: E501 machine = Machine( - 10, - {0, 2, 4, 6, 8}, + 3, + {1}, 3.0, 1.0, 2.0, - ) # these are placeholder values - circuit = get_qasm_as_circuit(QasmFiles.bv_n10) - # check simple.qasm? - sharder = Sharder(circuit) - shards = sharder.shard() - shard_set = set(shards) - circuit_rep = parse_shards_naive(shard_set) - print(f"Circuit:\n{circuit_rep}") # noqa: T201 - initial_order = list(range(machine.size)) - layer_num = 0 - net_cost: float = 0.0 - for layer in circuit_rep: - order = optimized_place( - layer, - machine.tq_options, - machine.sq_options, - machine.size, - initial_order, - ) - print(f"Order for layer {layer_num}: {layer}\n{order}") # noqa: T201 - cost = transport_cost(initial_order, order, machine.qb_swap_time) - print(f"Approx. Cost: {cost} us") # noqa: T201 - layer_num += 1 - initial_order = order - net_cost += cost - print(f"Net Cost: {net_cost} us") # noqa: T201 + ) + # force machine options for this test, machines normally don't like odd numbers of qubits # noqa: E501 + machine.sq_options = {0, 1, 2} + output = place_and_route(machine, QasmFiles.eztest) # type: ignore [misc] + + ez_ops_0 = [[0, 2], [1]] + ez_ops_1 = [[0], [2]] + state_0 = output[0][0] # type: ignore [misc] + state_1 = output[1][0] # type: ignore [misc] + assert placement_check(ez_ops_0, machine.tq_options, machine.sq_options, state_0) # type: ignore [misc] + assert placement_check(ez_ops_1, machine.tq_options, machine.sq_options, state_1) # type: ignore [misc] + shards_0 = output[0][1] # type: ignore [misc] + shards_1 = output[1][1] # type: ignore [misc] + for shard in shards_0: # type: ignore [misc] + assert shard.ID in {0, 1} # type: ignore [misc] + for shard in shards_1: # type: ignore [misc] + assert shard.ID in {2, 3} # type: ignore [misc] + # cost_0 is wrong because we are getting an unnecessary swap, add swap reduction option? # noqa: E501 + cost_1 = output[1][2] # type: ignore [misc] + assert cost_1 == 0.0 # type: ignore [misc] diff --git a/tests/sample_data.py b/tests/sample_data.py index 19d527f..2b803b3 100644 --- a/tests/sample_data.py +++ b/tests/sample_data.py @@ -16,6 +16,10 @@ class QasmFiles(Enum): barrier_complex = 8 classical_hazards = 9 big_gate = 10 + n10_test = 11 + qv20_0 = 13 + oned_brickwork_circuit_n20 = 14 + eztest = 15 def get_qasm_as_circuit(qasm_file: QasmFiles) -> Circuit: From bc31b85225e2312884460ce3ae30511abeb1b7a8 Mon Sep 17 00:00:00 2001 From: Asa Kosto Date: Tue, 17 Oct 2023 11:20:48 -0600 Subject: [PATCH 4/5] kartik comments --- .gitignore | 3 +++ .vscode/settings.json | 6 ------ pytket/phir/{pandr.py => place_and_route.py} | 2 +- pytket/phir/placement.py | 15 +++++++++++++-- tests/data/qasm/eztest.qasm | 2 +- tests/e2e_test.py | 9 ++++++--- 6 files changed, 24 insertions(+), 13 deletions(-) delete mode 100644 .vscode/settings.json rename pytket/phir/{pandr.py => place_and_route.py} (94%) diff --git a/.gitignore b/.gitignore index 68bc17f..5774c65 100644 --- a/.gitignore +++ b/.gitignore @@ -75,6 +75,9 @@ docs/_build/ .pybuilder/ target/ +# vscode +.vscode/ + # Jupyter Notebook .ipynb_checkpoints diff --git a/.vscode/settings.json b/.vscode/settings.json deleted file mode 100644 index cee7b74..0000000 --- a/.vscode/settings.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "[python]": { - "editor.defaultFormatter": "ms-python.black-formatter" - }, - "python.formatting.provider": "none" -} diff --git a/pytket/phir/pandr.py b/pytket/phir/place_and_route.py similarity index 94% rename from pytket/phir/pandr.py rename to pytket/phir/place_and_route.py index 3cd46f2..5105ed7 100644 --- a/pytket/phir/pandr.py +++ b/pytket/phir/place_and_route.py @@ -12,7 +12,7 @@ @typing.no_type_check -def place_and_route(machine: Machine, qasm: Circuit): # give type hint for return +def place_and_route(machine: Machine, qasm: Circuit): """Get all the routing info needed for PHIR generation.""" circuit = get_qasm_as_circuit(qasm) sharder = Sharder(circuit) diff --git a/pytket/phir/placement.py b/pytket/phir/placement.py index 74ffc4b..1a2bef5 100644 --- a/pytket/phir/placement.py +++ b/pytket/phir/placement.py @@ -172,7 +172,7 @@ def place( # noqa: PLR0912 raise PlacementCheckError -def optimized_place( +def optimized_place( # noqa: PLR0912 ops: list[list[int]], tq_options: set[int], sq_options: set[int], @@ -209,7 +209,18 @@ def optimized_place( # place the tq ops order = place_tq_ops(tq_ops_sorted, placed_qubits, order, tq_zones, sq_zones) - + # run a check to avoid unnecessary swaps + for zone in tq_zones: + # this condition will be true if there was a swap due to the order of qubits_used # noqa: E501 + # in the shard creating the TQ op, even if those two qubits were already in a TQ zone # noqa: E501 + # example: ops = [[0,1]] prev_state = [0,1,2,3] new order = [1,0,2,3] + # this check s to prevent the above situation + if (order[zone] == prev_state[zone + 1]) & ( + order[zone + 1] == prev_state[zone] + ): + swapped = order[zone + 1] + order[zone + 1] = order[zone] + order[zone] = swapped # place the sq ops for op in sq_ops: q1 = op[0] diff --git a/tests/data/qasm/eztest.qasm b/tests/data/qasm/eztest.qasm index 5e2a040..8f25c04 100644 --- a/tests/data/qasm/eztest.qasm +++ b/tests/data/qasm/eztest.qasm @@ -4,7 +4,7 @@ include "hqslib1.inc"; qreg q[3]; creg c[3]; -CX q[2], q[0]; +CX q[0], q[2]; h q[0]; h q[1]; h q[2]; diff --git a/tests/e2e_test.py b/tests/e2e_test.py index 62e8ff2..4f43d33 100644 --- a/tests/e2e_test.py +++ b/tests/e2e_test.py @@ -1,5 +1,5 @@ from pytket.phir.machine_class import Machine -from pytket.phir.pandr import place_and_route +from pytket.phir.place_and_route import place_and_route from pytket.phir.placement import placement_check from tests.sample_data import QasmFiles @@ -11,10 +11,13 @@ 1.0, 2.0, ) - # force machine options for this test, machines normally don't like odd numbers of qubits # noqa: E501 + # force machine options for this test + # machines normally don't like odd numbers of qubits machine.sq_options = {0, 1, 2} + # The type: ignores in this file are because mypy doesn't like the return type of place and route, # noqa: E501 + # list[triple(list[int], list[Shard], float)] output = place_and_route(machine, QasmFiles.eztest) # type: ignore [misc] - + # print(output) ez_ops_0 = [[0, 2], [1]] ez_ops_1 = [[0], [2]] state_0 = output[0][0] # type: ignore [misc] From d6c41cfe8bc8a76e9eb77aea05a3dba0b9dd794b Mon Sep 17 00:00:00 2001 From: Asa Kosto Date: Tue, 17 Oct 2023 11:27:22 -0600 Subject: [PATCH 5/5] edited comments --- pytket/phir/placement.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/pytket/phir/placement.py b/pytket/phir/placement.py index 1a2bef5..f028dfa 100644 --- a/pytket/phir/placement.py +++ b/pytket/phir/placement.py @@ -211,8 +211,9 @@ def optimized_place( # noqa: PLR0912 order = place_tq_ops(tq_ops_sorted, placed_qubits, order, tq_zones, sq_zones) # run a check to avoid unnecessary swaps for zone in tq_zones: - # this condition will be true if there was a swap due to the order of qubits_used # noqa: E501 - # in the shard creating the TQ op, even if those two qubits were already in a TQ zone # noqa: E501 + # this condition is true if there was a swap due to the order of qubits_used + # in the shard creating the TQ op, + # even if those two qubits were already in a TQ zone # example: ops = [[0,1]] prev_state = [0,1,2,3] new order = [1,0,2,3] # this check s to prevent the above situation if (order[zone] == prev_state[zone + 1]) & (