Use TrivialLayout in optimization level 1 (#2975)

This reverts #2971

* Use TrivialLayout in optimization level 1

* lint

* typo
This commit is contained in:
Luciano 2019-08-13 19:25:35 -04:00 committed by Matthew Treinish
parent 6795f5399f
commit 98141a02e1
4 changed files with 20 additions and 23 deletions

View File

@ -100,8 +100,7 @@ The format is based on [Keep a Changelog].
using the option ``with_layout=False`` in the method using the option ``with_layout=False`` in the method
``QuantumCircuit.draw``. (\#2739) ``QuantumCircuit.draw``. (\#2739)
- Q-sphere visualization is enhanced and corrected (\#2932) - Q-sphere visualization is enhanced and corrected (\#2932)
- The default layout selector for transpile optimization level 1 is ``DenseLayout``
instead of ``TrivialLayout`` (\#2845).
### Removed ### Removed
- The ability to set the `Timeslot`s for a pulse `Instruction` at initialization. - The ability to set the `Timeslot`s for a pulse `Instruction` at initialization.

View File

@ -27,7 +27,7 @@ from qiskit.transpiler.passes import Decompose
from qiskit.transpiler.passes import CheckMap from qiskit.transpiler.passes import CheckMap
from qiskit.transpiler.passes import CXDirection from qiskit.transpiler.passes import CXDirection
from qiskit.transpiler.passes import SetLayout from qiskit.transpiler.passes import SetLayout
from qiskit.transpiler.passes import DenseLayout from qiskit.transpiler.passes import TrivialLayout
from qiskit.transpiler.passes import BarrierBeforeFinalMeasurements from qiskit.transpiler.passes import BarrierBeforeFinalMeasurements
from qiskit.transpiler.passes import StochasticSwap from qiskit.transpiler.passes import StochasticSwap
from qiskit.transpiler.passes import FullAncillaAllocation from qiskit.transpiler.passes import FullAncillaAllocation
@ -65,13 +65,13 @@ def level_1_pass_manager(transpile_config):
initial_layout = transpile_config.initial_layout initial_layout = transpile_config.initial_layout
seed_transpiler = transpile_config.seed_transpiler seed_transpiler = transpile_config.seed_transpiler
# 1. Use dense layout if no layout given # 1. Use trivial layout if no layout given
_given_layout = SetLayout(initial_layout) _given_layout = SetLayout(initial_layout)
def _choose_layout_condition(property_set): def _choose_layout_condition(property_set):
return not property_set['layout'] return not property_set['layout']
_choose_layout = DenseLayout(coupling_map) _choose_layout = TrivialLayout(coupling_map)
# 2. Use a better layout on densely connected qubits, if circuit needs swaps # 2. Use a better layout on densely connected qubits, if circuit needs swaps
_layout_check = CheckMap(coupling_map) _layout_check = CheckMap(coupling_map)

View File

@ -422,11 +422,12 @@ class TestTranspile(QiskitTestCase):
theta = Parameter('theta') theta = Parameter('theta')
qc.rz(theta, qr[0]) qc.rz(theta, qr[0])
transpiled_qc = transpile(qc, backend=FakeMelbourne()) transpiled_qc = transpile(qc, backend=FakeMelbourne(),
initial_layout=Layout.generate_trivial_layout(qr))
qr = QuantumRegister(14, 'q') qr = QuantumRegister(14, 'q')
expected_qc = QuantumCircuit(qr) expected_qc = QuantumCircuit(qr)
expected_qc.u1(theta, qr[1]) expected_qc.u1(theta, qr[0])
self.assertEqual(expected_qc, transpiled_qc) self.assertEqual(expected_qc, transpiled_qc)
@ -457,11 +458,12 @@ class TestTranspile(QiskitTestCase):
square = theta * theta square = theta * theta
qc.rz(square, qr[0]) qc.rz(square, qr[0])
transpiled_qc = transpile(qc, backend=FakeMelbourne()) transpiled_qc = transpile(qc, backend=FakeMelbourne(),
initial_layout=Layout.generate_trivial_layout(qr))
qr = QuantumRegister(14, 'q') qr = QuantumRegister(14, 'q')
expected_qc = QuantumCircuit(qr) expected_qc = QuantumCircuit(qr)
expected_qc.u1(square, qr[1]) expected_qc.u1(square, qr[0])
self.assertEqual(expected_qc, transpiled_qc) self.assertEqual(expected_qc, transpiled_qc)

View File

@ -257,23 +257,19 @@ class TestFinalLayouts(QiskitTestCase):
qc.cx(qr2[0], qr2[1]) qc.cx(qr2[0], qr2[1])
ancilla = QuantumRegister(15, 'ancilla') ancilla = QuantumRegister(15, 'ancilla')
trivial_layout = {0: qr1[0], 1: qr1[1], 2: qr1[2], 3: qr2[0], 4: qr2[1],
5: ancilla[0], 6: ancilla[1], 7: ancilla[2], 8: ancilla[3],
9: ancilla[4], 10: ancilla[5], 11: ancilla[6], 12: ancilla[7],
13: ancilla[8], 14: ancilla[9], 15: ancilla[10], 16: ancilla[11],
17: ancilla[12], 18: ancilla[13], 19: ancilla[14]}
# TrivialLayout # TrivialLayout
expected_layout_level0 = {0: qr1[0], 1: qr1[1], 2: qr1[2], 3: qr2[0], 4: qr2[1], expected_layout_level0 = trivial_layout
5: ancilla[0], 6: ancilla[1], 7: ancilla[2], 8: ancilla[3], expected_layout_level1 = trivial_layout
9: ancilla[4], 10: ancilla[5], 11: ancilla[6], 12: ancilla[7],
13: ancilla[8], 14: ancilla[9], 15: ancilla[10], 16: ancilla[11],
17: ancilla[12], 18: ancilla[13], 19: ancilla[14]}
# DenseLayout
expected_layout_level1 = {0: qr2[1], 1: ancilla[0], 2: ancilla[1], 3: ancilla[2],
4: ancilla[3], 5: qr2[0], 6: qr1[2], 7: ancilla[4], 8: ancilla[5],
9: ancilla[6], 10: qr1[1], 11: qr1[0], 12: ancilla[7],
13: ancilla[8], 14: ancilla[9], 15: ancilla[10], 16: ancilla[11],
17: ancilla[12], 18: ancilla[13], 19: ancilla[14]}
# NoiseAdaptiveLayout (in FakeTokyo, no errors. Therefore, TrivialLayout) # NoiseAdaptiveLayout (in FakeTokyo, no errors. Therefore, TrivialLayout)
expected_layout_level2 = expected_layout_level0 # TODO See https://github.com/Qiskit/qiskit-terra/issues/2970
expected_layout_level3 = expected_layout_level0 expected_layout_level2 = trivial_layout
expected_layout_level3 = trivial_layout
expected_layouts = [expected_layout_level0, expected_layouts = [expected_layout_level0,
expected_layout_level1, expected_layout_level1,
expected_layout_level2, expected_layout_level2,