Skip to content

Commit

Permalink
Fix short circuit detection for basis translator (#12899)
Browse files Browse the repository at this point in the history
The BasisTranslator transpiler pass has a check at the very start that
is designed to return fast if there is nothing to translate; in
other words if the instructions in the circuit are already a subset of
instructions supported by the target. This avoid doing a lot of
unecessary work to determine this later during the operation of the
pass. However, this check was not correctly constructed because of a
type mismatch and would only ever get triggered if the input circuit was
empty. The source basis is collected as a `Set[Tuple[str, int]]` where
each tuple is the name and num of qubits for each operation in the
circuit. While the target basis is just a `Set[str]` for the names
supported on the target. This mismatch caused the subset check to never
return True unless it was empty thereby bypassing the intent of the
short circuit path. This commit fixes the logic by constructing a
temporary set of just the source names to evaluate whether we should
return early or not.
  • Loading branch information
mtreinish committed Aug 8, 2024
1 parent 70c2f78 commit fa5510c
Showing 1 changed file with 2 additions and 1 deletion.
3 changes: 2 additions & 1 deletion qiskit/transpiler/passes/basis/basis_translator.py
Original file line number Diff line number Diff line change
Expand Up @@ -162,7 +162,8 @@ def run(self, dag):
# If the source basis is a subset of the target basis and we have no circuit
# instructions on qargs that have non-global operations there is nothing to
# translate and we can exit early.
if source_basis.issubset(target_basis) and not qargs_local_source_basis:
source_basis_names = {x[0] for x in source_basis}
if source_basis_names.issubset(target_basis) and not qargs_local_source_basis:
return dag

logger.info(
Expand Down

0 comments on commit fa5510c

Please sign in to comment.