Skip to content
Merged
30 changes: 10 additions & 20 deletions qiskit/transpiler/passes/basis/basis_translator.py
Original file line number Diff line number Diff line change
Expand Up @@ -126,11 +126,6 @@ def run(self, dag):

# Replace source instructions with target translations.

# As a bandaid for the performance regression introduced by #6072, cache
# bound target DAGs to avoid recurring cost of symbolic calculation on
# assign_parameters.
target_dag_cache = {}

replace_start_time = time.time()
for node in dag.op_nodes():
if node.name in target_basis:
Expand All @@ -151,22 +146,17 @@ def run(self, dag):
)

if node.op.params:
key = (node.name, tuple(node.op.params))
if key in target_dag_cache:
bound_target_dag = target_dag_cache[key]
else:
# Convert target to circ and back to assign_parameters, since
# DAGCircuits won't have a ParameterTable.
from qiskit.converters import dag_to_circuit, circuit_to_dag

target_circuit = dag_to_circuit(target_dag)

target_circuit.assign_parameters(
dict(zip_longest(target_params, node.op.params)), inplace=True
)
# Convert target to circ and back to assign_parameters, since
# DAGCircuits won't have a ParameterTable.
from qiskit.converters import dag_to_circuit, circuit_to_dag

target_circuit = dag_to_circuit(target_dag)

target_circuit.assign_parameters(
dict(zip_longest(target_params, node.op.params)), inplace=True
)

bound_target_dag = circuit_to_dag(target_circuit)
target_dag_cache[key] = bound_target_dag
bound_target_dag = circuit_to_dag(target_circuit)
else:
bound_target_dag = target_dag

Expand Down