Skip to content

Commit

Permalink
Fix oversight from Qiskit#12185 where two input parsing functions wer…
Browse files Browse the repository at this point in the history
…e not migrated from transpile to generate_preset_pm with the others.
  • Loading branch information
ElePT committed Jul 24, 2024
1 parent ffead59 commit e8eb508
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 25 deletions.
25 changes: 0 additions & 25 deletions qiskit/compiler/transpiler.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@

from qiskit import user_config
from qiskit.circuit.quantumcircuit import QuantumCircuit
from qiskit.circuit.quantumregister import Qubit
from qiskit.dagcircuit import DAGCircuit
from qiskit.providers.backend import Backend
from qiskit.providers.backend_compat import BackendV2Converter
Expand Down Expand Up @@ -339,10 +338,7 @@ def callback_func(**kwargs):
if translation_method is None and hasattr(backend, "get_translation_stage_plugin"):
translation_method = backend.get_translation_stage_plugin()

initial_layout = _parse_initial_layout(initial_layout)
approximation_degree = _parse_approximation_degree(approximation_degree)
output_name = _parse_output_name(output_name, circuits)

coupling_map = _parse_coupling_map(coupling_map)
_check_circuits_coupling_map(circuits, coupling_map, backend)

Expand Down Expand Up @@ -425,27 +421,6 @@ def _parse_coupling_map(coupling_map):
return coupling_map


def _parse_initial_layout(initial_layout):
# initial_layout could be None, or a list of ints, e.g. [0, 5, 14]
# or a list of tuples/None e.g. [qr[0], None, qr[1]] or a dict e.g. {qr[0]: 0}
if initial_layout is None or isinstance(initial_layout, Layout):
return initial_layout
if isinstance(initial_layout, dict):
return Layout(initial_layout)
initial_layout = list(initial_layout)
if all(phys is None or isinstance(phys, Qubit) for phys in initial_layout):
return Layout.from_qubit_list(initial_layout)
return initial_layout


def _parse_approximation_degree(approximation_degree):
if approximation_degree is None:
return None
if approximation_degree < 0.0 or approximation_degree > 1.0:
raise TranspilerError("Approximation degree must be in [0.0, 1.0]")
return approximation_degree


def _parse_output_name(output_name, circuits):
# naming and returning circuits
# output_name could be either a string or a list
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,12 @@

from qiskit.circuit.controlflow import CONTROL_FLOW_OP_NAMES
from qiskit.circuit.library.standard_gates import get_standard_gate_name_mapping
from qiskit.circuit.quantumregister import Qubit
from qiskit.providers.backend_compat import BackendV2Converter
from qiskit.transpiler.coupling import CouplingMap
from qiskit.transpiler.exceptions import TranspilerError
from qiskit.transpiler.instruction_durations import InstructionDurations
from qiskit.transpiler.layout import Layout
from qiskit.transpiler.passmanager_config import PassManagerConfig
from qiskit.transpiler.target import Target, target_to_backend_properties
from qiskit.transpiler.timing_constraints import TimingConstraints
Expand Down Expand Up @@ -319,6 +321,10 @@ def generate_preset_pass_manager(
if backend_properties is None:
backend_properties = target_to_backend_properties(target)

# Parse non-target dependent pm options
initial_layout = _parse_initial_layout(initial_layout)
approximation_degree = _parse_approximation_degree(approximation_degree)

pm_options = {
"target": target,
"basis_gates": basis_gates,
Expand Down Expand Up @@ -470,3 +476,24 @@ def _parse_timing_constraints(backend, timing_constraints):
elif backend is not None:
timing_constraints = backend.target.timing_constraints()
return timing_constraints


def _parse_initial_layout(initial_layout):
# initial_layout could be None, or a list of ints, e.g. [0, 5, 14]
# or a list of tuples/None e.g. [qr[0], None, qr[1]] or a dict e.g. {qr[0]: 0}
if initial_layout is None or isinstance(initial_layout, Layout):
return initial_layout
if isinstance(initial_layout, dict):
return Layout(initial_layout)
initial_layout = list(initial_layout)
if all(phys is None or isinstance(phys, Qubit) for phys in initial_layout):
return Layout.from_qubit_list(initial_layout)
return initial_layout


def _parse_approximation_degree(approximation_degree):
if approximation_degree is None:
return None
if approximation_degree < 0.0 or approximation_degree > 1.0:
raise TranspilerError("Approximation degree must be in [0.0, 1.0]")
return approximation_degree

0 comments on commit e8eb508

Please sign in to comment.