mirror of https://github.com/Qiskit/qiskit.git
Fix error message upon misalignment in `PadDynamicalDecoupling` (#12952)
* Fix misalignment msg * slightly better formatting * typo
This commit is contained in:
parent
8e45a5aad1
commit
9252713e59
|
@ -20,7 +20,7 @@ from qiskit.circuit import Gate, ParameterExpression, Qubit
|
|||
from qiskit.circuit.delay import Delay
|
||||
from qiskit.circuit.library.standard_gates import IGate, UGate, U3Gate
|
||||
from qiskit.circuit.reset import Reset
|
||||
from qiskit.dagcircuit import DAGCircuit, DAGNode, DAGInNode, DAGOpNode
|
||||
from qiskit.dagcircuit import DAGCircuit, DAGNode, DAGInNode, DAGOpNode, DAGOutNode
|
||||
from qiskit.quantum_info.operators.predicates import matrix_equal
|
||||
from qiskit.synthesis.one_qubit import OneQubitEulerDecomposer
|
||||
from qiskit.transpiler.exceptions import TranspilerError
|
||||
|
@ -331,8 +331,7 @@ class PadDynamicalDecoupling(BasePadding):
|
|||
if time_interval % self._alignment != 0:
|
||||
raise TranspilerError(
|
||||
f"Time interval {time_interval} is not divisible by alignment {self._alignment} "
|
||||
f"between DAGNode {prev_node.name} on qargs {prev_node.qargs} and {next_node.name} "
|
||||
f"on qargs {next_node.qargs}."
|
||||
f"between {_format_node(prev_node)} and {_format_node(next_node)}."
|
||||
)
|
||||
|
||||
if not self.__is_dd_qubit(dag.qubits.index(qubit)):
|
||||
|
@ -430,3 +429,10 @@ class PadDynamicalDecoupling(BasePadding):
|
|||
else:
|
||||
params.append(p)
|
||||
return tuple(params)
|
||||
|
||||
|
||||
def _format_node(node: DAGNode) -> str:
|
||||
"""Util to format the DAGNode, DAGInNode, and DAGOutNode."""
|
||||
if isinstance(node, (DAGInNode, DAGOutNode)):
|
||||
return f"{node.__class__.__name__} on qarg {node.wire}"
|
||||
return f"DAGNode {node.name} on qargs {node.qargs}"
|
||||
|
|
|
@ -0,0 +1,7 @@
|
|||
---
|
||||
fixes:
|
||||
- |
|
||||
Fixed a bug in :class:`.PadDynamicalDecoupling`, which previously
|
||||
did not correctly display the error message that a delay is not
|
||||
pulse-aligned, if the previous or following node was an input/output
|
||||
node. Now, the error message is correctly displayed.
|
|
@ -1051,6 +1051,23 @@ class TestPadDynamicalDecoupling(QiskitTestCase):
|
|||
|
||||
self.assertEqual(qc.global_phase + np.pi, pm.run(qc).global_phase)
|
||||
|
||||
def test_misalignment_at_boundaries(self):
|
||||
"""Test the correct error message is raised for misalignments at In/Out nodes."""
|
||||
# a circuit where the previous node is DAGInNode, and the next DAGOutNode
|
||||
circuit = QuantumCircuit(1)
|
||||
circuit.delay(101)
|
||||
|
||||
dd_sequence = [XGate(), XGate()]
|
||||
pm = PassManager(
|
||||
[
|
||||
ALAPScheduleAnalysis(self.durations),
|
||||
PadDynamicalDecoupling(self.durations, dd_sequence, pulse_alignment=2),
|
||||
]
|
||||
)
|
||||
|
||||
with self.assertRaises(TranspilerError):
|
||||
_ = pm.run(circuit)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
|
|
Loading…
Reference in New Issue