Skip to content

Commit cce30af

Browse files
committed
Handle failing tests
1 parent 55c27fb commit cce30af

File tree

5 files changed

+89
-62
lines changed

5 files changed

+89
-62
lines changed

qiskit/circuit/quantumcircuit.py

+9-9
Original file line numberDiff line numberDiff line change
@@ -1420,8 +1420,8 @@ def reverse_ops(self) -> "QuantumCircuit":
14201420
for instruction in reversed(self.data):
14211421
reverse_circ._append(instruction.replace(operation=instruction.operation.reverse_ops()))
14221422

1423-
reverse_circ.duration = self.duration
1424-
reverse_circ.unit = self.unit
1423+
reverse_circ._duration = self._duration
1424+
reverse_circ._unit = self._unit
14251425
return reverse_circ
14261426

14271427
def reverse_bits(self) -> "QuantumCircuit":
@@ -2559,8 +2559,8 @@ def _append(self, instruction, qargs=(), cargs=(), *, _standard_gate: bool = Fal
25592559
"""
25602560
if _standard_gate:
25612561
self._data.append(instruction)
2562-
self.duration = None
2563-
self.unit = "dt"
2562+
self._duration = None
2563+
self._unit = "dt"
25642564
return instruction
25652565

25662566
old_style = not isinstance(instruction, CircuitInstruction)
@@ -2582,8 +2582,8 @@ def _append(self, instruction, qargs=(), cargs=(), *, _standard_gate: bool = Fal
25822582
self._data.append_manual_params(instruction, params)
25832583

25842584
# Invalidate whole circuit duration if an instruction is added
2585-
self.duration = None
2586-
self.unit = "dt"
2585+
self._duration = None
2586+
self._unit = "dt"
25872587
return instruction.operation if old_style else instruction
25882588

25892589
@typing.overload
@@ -6951,7 +6951,7 @@ def qubit_start_time(self, *qubits: Union[Qubit, int]) -> float:
69516951
Raises:
69526952
CircuitError: if ``self`` is a not-yet scheduled circuit.
69536953
"""
6954-
if self.duration is None:
6954+
if self._duration is None:
69556955
# circuit has only delays, this is kind of scheduled
69566956
for instruction in self._data:
69576957
if not isinstance(instruction.operation, Delay):
@@ -6993,7 +6993,7 @@ def qubit_stop_time(self, *qubits: Union[Qubit, int]) -> float:
69936993
Raises:
69946994
CircuitError: if ``self`` is a not-yet scheduled circuit.
69956995
"""
6996-
if self.duration is None:
6996+
if self._duration is None:
69976997
# circuit has only delays, this is kind of scheduled
69986998
for instruction in self._data:
69996999
if not isinstance(instruction.operation, Delay):
@@ -7004,7 +7004,7 @@ def qubit_stop_time(self, *qubits: Union[Qubit, int]) -> float:
70047004

70057005
qubits = [self.qubits[q] if isinstance(q, int) else q for q in qubits]
70067006

7007-
stops = {q: self.duration for q in qubits}
7007+
stops = {q: self._duration for q in qubits}
70087008
dones = {q: False for q in qubits}
70097009
for instruction in reversed(self._data):
70107010
for q in qubits:

qiskit/transpiler/passes/scheduling/padding/base_padding.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ def run(self, dag: DAGCircuit):
124124

125125
new_dag.name = dag.name
126126
new_dag.metadata = dag.metadata
127-
new_dag.unit = self.property_set["time_unit"]
127+
new_dag._unit = self.property_set["time_unit"]
128128
new_dag.global_phase = dag.global_phase
129129

130130
idle_after = {bit: 0 for bit in dag.qubits}

test/python/circuit/test_scheduled_circuit.py

+62-42
Original file line numberDiff line numberDiff line change
@@ -51,8 +51,9 @@ def test_schedule_circuit_when_backend_tells_dt(self):
5151
backend = GenericBackendV2(2, seed=42)
5252

5353
sc = transpile(qc, backend, scheduling_method="alap", layout_method="trivial")
54-
self.assertEqual(sc.duration, 451095)
55-
self.assertEqual(sc.unit, "dt")
54+
with self.assertRaises(DeprecationWarning):
55+
self.assertEqual(sc.duration, 451095)
56+
self.assertEqual(sc.unit, "dt")
5657
self.assertEqual(sc.data[0].operation.name, "delay")
5758
self.assertEqual(sc.data[0].operation.duration, 450900)
5859
self.assertEqual(sc.data[0].operation.unit, "dt")
@@ -77,8 +78,9 @@ def test_schedule_circuit_when_transpile_option_tells_dt(self):
7778
seed_transpiler=20,
7879
)
7980
target_durations = self.backend_with_dt.target.durations()
80-
self.assertAlmostEqual(sc.duration, (450450 + target_durations.get("sx", 0)))
81-
self.assertEqual(sc.unit, "dt")
81+
with self.assertRaises(DeprecationWarning):
82+
self.assertAlmostEqual(sc.duration, (450450 + target_durations.get("sx", 0)))
83+
self.assertEqual(sc.unit, "dt")
8284
self.assertEqual(sc.data[0].operation.name, "delay")
8385
self.assertEqual(sc.data[0].operation.duration, 450450)
8486
self.assertEqual(sc.data[0].operation.unit, "dt")
@@ -101,8 +103,10 @@ def test_schedule_circuit_in_sec_when_no_one_tells_dt(self):
101103
qc, self.backend_without_dt, scheduling_method="alap", layout_method="trivial"
102104
)
103105
target_durations = self.backend_with_dt.target.durations()
104-
self.assertAlmostEqual(sc.duration, (450450 + target_durations.get("sx", 0)) * self.dt)
105-
self.assertEqual(sc.unit, "s")
106+
107+
with self.assertRaises(DeprecationWarning):
108+
self.assertAlmostEqual(sc.duration, (450450 + target_durations.get("sx", 0)) * self.dt)
109+
self.assertEqual(sc.unit, "s")
106110
self.assertEqual(sc.data[0].operation.name, "delay")
107111
self.assertAlmostEqual(sc.data[0].operation.duration, 1.0e-4 + 1.0e-7)
108112
self.assertEqual(sc.data[0].operation.unit, "s")
@@ -125,7 +129,8 @@ def test_transpile_single_delay_circuit(self):
125129
qc = QuantumCircuit(1)
126130
qc.delay(1234, 0)
127131
sc = transpile(qc, backend=self.backend_with_dt, scheduling_method="alap")
128-
self.assertEqual(sc.duration, 1234)
132+
with self.assertRaises(DeprecationWarning):
133+
self.assertEqual(sc.duration, 1234)
129134
self.assertEqual(sc.data[0].operation.name, "delay")
130135
self.assertEqual(sc.data[0].operation.duration, 1234)
131136
self.assertEqual(sc.data[0].operation.unit, "dt")
@@ -141,7 +146,8 @@ def test_transpile_t1_circuit(self):
141146
expected_scheduled = (
142147
target_durations.get("x", 1) + 4500 + target_durations.get("measure", 1)
143148
)
144-
self.assertEqual(scheduled.duration, expected_scheduled)
149+
with self.assertRaises(DeprecationWarning):
150+
self.assertEqual(scheduled.duration, expected_scheduled)
145151

146152
def test_transpile_delay_circuit_with_backend(self):
147153
qc = QuantumCircuit(2)
@@ -152,7 +158,8 @@ def test_transpile_delay_circuit_with_backend(self):
152158
qc, backend=self.backend_with_dt, scheduling_method="alap", layout_method="trivial"
153159
)
154160
target_durations = self.backend_with_dt.target.durations()
155-
self.assertEqual(scheduled.duration, target_durations.get("cx", (0, 1)) + 450)
161+
with self.assertRaises(DeprecationWarning):
162+
self.assertEqual(scheduled.duration, target_durations.get("cx", (0, 1)) + 450)
156163

157164
def test_transpile_circuit_with_custom_instruction(self):
158165
"""See: https://github.com/Qiskit/qiskit-terra/issues/5154"""
@@ -184,13 +191,15 @@ def test_transpile_circuit_with_custom_instruction(self):
184191
target=target,
185192
dt=1e-2,
186193
)
187-
self.assertEqual(scheduled.duration, 1500)
194+
with self.assertRaises(DeprecationWarning):
195+
self.assertEqual(scheduled.duration, 1500)
188196

189197
def test_transpile_delay_circuit_with_dt_but_without_scheduling_method(self):
190198
qc = QuantumCircuit(1)
191199
qc.delay(100, 0, unit="ns")
192200
transpiled = transpile(qc, backend=self.backend_with_dt)
193-
self.assertEqual(transpiled.duration, None) # not scheduled
201+
with self.assertRaises(DeprecationWarning):
202+
self.assertEqual(transpiled.duration, None) # not scheduled
194203
self.assertEqual(transpiled.data[0].operation.duration, 450) # unit is converted ns -> dt
195204

196205
def test_transpile_delay_circuit_without_scheduling_method_or_durs(self):
@@ -199,7 +208,8 @@ def test_transpile_delay_circuit_without_scheduling_method_or_durs(self):
199208
qc.delay(500, 1)
200209
qc.cx(0, 1)
201210
not_scheduled = transpile(qc)
202-
self.assertEqual(not_scheduled.duration, None)
211+
with self.assertRaises(DeprecationWarning):
212+
self.assertEqual(not_scheduled.duration, None)
203213

204214
def test_raise_error_if_transpile_with_scheduling_method_but_without_durations(self):
205215
qc = QuantumCircuit(2)
@@ -217,7 +227,8 @@ def test_invalidate_schedule_circuit_if_new_instruction_is_appended(self):
217227
scheduled = transpile(qc, backend=self.backend_with_dt, scheduling_method="alap")
218228
# append a gate to a scheduled circuit
219229
scheduled.h(0)
220-
self.assertEqual(scheduled.duration, None)
230+
with self.assertRaises(DeprecationWarning):
231+
self.assertEqual(scheduled.duration, None)
221232

222233
def test_unit_seconds_when_using_backend_durations(self):
223234
qc = QuantumCircuit(2)
@@ -229,7 +240,8 @@ def test_unit_seconds_when_using_backend_durations(self):
229240
qc, backend=self.backend_with_dt, scheduling_method="alap", layout_method="trivial"
230241
)
231242
target_durations = self.backend_with_dt.target.durations()
232-
self.assertEqual(scheduled.duration, target_durations.get("cx", (0, 1)) + 500)
243+
with self.assertRaises(DeprecationWarning):
244+
self.assertEqual(scheduled.duration, target_durations.get("cx", (0, 1)) + 500)
233245

234246
def test_per_qubit_durations(self):
235247
"""Test target with custom instruction_durations"""
@@ -288,29 +300,32 @@ def test_convert_duration_to_dt(self):
288300
circ.measure_all()
289301

290302
circuit_dt = transpile(circ, backend, scheduling_method="asap")
291-
# reference duration and unit in dt
292-
ref_duration = circuit_dt.duration
293-
ref_unit = circuit_dt.unit
294-
295-
circuit_s = circuit_dt.copy()
296-
circuit_s.duration *= backend.dt
297-
circuit_s.unit = "s"
298-
299-
circuit_ms = circuit_s.copy()
300-
circuit_ms.duration *= 1000
301-
circuit_ms.unit = "ms"
302-
303-
for circuit in [circuit_dt, circuit_s, circuit_ms]:
304-
with self.subTest(circuit=circuit):
305-
converted_circ = convert_durations_to_dt(circuit, dt_in_sec=2.22e-10, inplace=False)
306-
self.assertEqual(
307-
converted_circ.duration,
308-
ref_duration,
309-
)
310-
self.assertEqual(
311-
converted_circ.unit,
312-
ref_unit,
313-
)
303+
with self.assertRaises(DeprecationWarning):
304+
# reference duration and unit in dt
305+
ref_duration = circuit_dt.duration
306+
ref_unit = circuit_dt.unit
307+
308+
circuit_s = circuit_dt.copy()
309+
circuit_s.duration *= backend.dt
310+
circuit_s.unit = "s"
311+
312+
circuit_ms = circuit_s.copy()
313+
circuit_ms.duration *= 1000
314+
circuit_ms.unit = "ms"
315+
316+
for circuit in [circuit_dt, circuit_s, circuit_ms]:
317+
with self.subTest(circuit=circuit):
318+
converted_circ = convert_durations_to_dt(
319+
circuit, dt_in_sec=2.22e-10, inplace=False
320+
)
321+
self.assertEqual(
322+
converted_circ.duration,
323+
ref_duration,
324+
)
325+
self.assertEqual(
326+
converted_circ.unit,
327+
ref_unit,
328+
)
314329

315330
@data("s", "dt", "f", "p", "n", "u", "µ", "m", "k", "M", "G", "T", "P")
316331
def test_estimate_duration(self, unit):
@@ -475,15 +490,17 @@ def test_change_dt_in_transpile(self):
475490
backend=GenericBackendV2(1, basis_gates=["x"], seed=2, dt=self.dt),
476491
scheduling_method="asap",
477492
)
478-
org_duration = scheduled.duration
493+
with self.assertRaises(DeprecationWarning):
494+
org_duration = scheduled.duration
479495
# halve dt in sec = double duration in dt
480496
scheduled = transpile(
481497
qc,
482498
backend=GenericBackendV2(1, basis_gates=["x"], seed=2, dt=self.dt),
483499
scheduling_method="asap",
484500
dt=self.dt / 2,
485501
)
486-
self.assertEqual(scheduled.duration, org_duration * 2)
502+
with self.assertRaises(DeprecationWarning):
503+
self.assertEqual(scheduled.duration, org_duration * 2)
487504

488505
@data("asap", "alap")
489506
def test_duration_on_same_instruction_instance(self, scheduling_method):
@@ -509,7 +526,8 @@ def test_can_transpile_circuits_after_assigning_parameters(self):
509526
qc.measure(0, 0)
510527
qc = qc.assign_parameters({idle_dur: 0.1})
511528
circ = transpile(qc, self.backend_with_dt)
512-
self.assertEqual(circ.duration, None) # not scheduled
529+
with self.assertRaises(DeprecationWarning):
530+
self.assertEqual(circ.duration, None) # not scheduled
513531
self.assertEqual(circ.data[1].operation.duration, 450) # converted in dt
514532

515533
def test_can_transpile_circuits_with_assigning_parameters_inbetween(self):
@@ -531,7 +549,8 @@ def test_can_transpile_circuits_with_unbounded_parameters(self):
531549
qc.measure(0, 0)
532550
# not assign parameter
533551
circ = transpile(qc, self.backend_with_dt)
534-
self.assertEqual(circ.duration, None) # not scheduled
552+
with self.assertRaises(DeprecationWarning):
553+
self.assertEqual(circ.duration, None) # not scheduled
535554
self.assertEqual(circ.data[1].operation.unit, "dt") # converted in dt
536555
self.assertEqual(
537556
circ.data[1].operation.duration, idle_dur * 1e-6 / self.dt
@@ -546,7 +565,8 @@ def test_can_schedule_circuits_with_bounded_parameters(self, scheduling_method):
546565
qc.measure(0, 0)
547566
qc = qc.assign_parameters({idle_dur: 0.1})
548567
circ = transpile(qc, self.backend_with_dt, scheduling_method=scheduling_method)
549-
self.assertIsNotNone(circ.duration) # scheduled
568+
with self.assertRaises(DeprecationWarning):
569+
self.assertIsNotNone(circ.duration) # scheduled
550570

551571
@data("asap", "alap")
552572
def test_fail_to_schedule_circuits_with_unbounded_parameters(self, scheduling_method):

test/python/compiler/test_transpiler.py

+14-8
Original file line numberDiff line numberDiff line change
@@ -1318,8 +1318,9 @@ def test_circuit_with_delay(self, optimization_level):
13181318
seed_transpiler=42,
13191319
)
13201320

1321-
self.assertEqual(out.unit, "dt")
1322-
self.assertEqual(out.duration, 1200)
1321+
with self.assertRaises(DeprecationWarning):
1322+
self.assertEqual(out.unit, "dt")
1323+
self.assertEqual(out.duration, 1200)
13231324

13241325
@data(0, 1, 2, 3)
13251326
def test_circuit_with_delay_expr_duration(self, optimization_level):
@@ -1355,8 +1356,9 @@ def test_circuit_with_delay_expr_duration(self, optimization_level):
13551356
seed_transpiler=42,
13561357
)
13571358

1358-
self.assertEqual(out.unit, "dt")
1359-
self.assertEqual(out.duration, 1200)
1359+
with self.assertRaises(DeprecationWarning):
1360+
self.assertEqual(out.unit, "dt")
1361+
self.assertEqual(out.duration, 1200)
13601362

13611363
def test_delay_converts_to_dt(self):
13621364
"""Test that a delay instruction is converted to units of dt given a backend."""
@@ -1647,7 +1649,8 @@ def test_scheduling_instruction_constraints_backend(self):
16471649
scheduling_method="alap",
16481650
layout_method="trivial",
16491651
)
1650-
self.assertEqual(scheduled.duration, 9010)
1652+
with self.assertRaises(DeprecationWarning):
1653+
self.assertEqual(scheduled.duration, 9010)
16511654

16521655
def test_scheduling_instruction_constraints(self):
16531656
"""Test that scheduling-related loose transpile constraints work with target."""
@@ -1671,7 +1674,8 @@ def test_scheduling_instruction_constraints(self):
16711674
scheduling_method="alap",
16721675
layout_method="trivial",
16731676
)
1674-
self.assertEqual(scheduled.duration, 9010)
1677+
with self.assertRaises(DeprecationWarning):
1678+
self.assertEqual(scheduled.duration, 9010)
16751679

16761680
def test_scheduling_dt_constraints(self):
16771681
"""Test that scheduling-related loose transpile constraints
@@ -1683,11 +1687,13 @@ def test_scheduling_dt_constraints(self):
16831687
qc.x(0)
16841688
qc.measure(0, 0)
16851689
scheduled = transpile(qc, backend=backend_v2, scheduling_method="asap")
1686-
original_duration = scheduled.duration
1690+
with self.assertRaises(DeprecationWarning):
1691+
original_duration = scheduled.duration
16871692

16881693
# halve dt in sec = double duration in dt
16891694
scheduled = transpile(qc, backend=backend_v2, scheduling_method="asap", dt=original_dt / 2)
1690-
self.assertEqual(scheduled.duration, original_duration * 2)
1695+
with self.assertRaises(DeprecationWarning):
1696+
self.assertEqual(scheduled.duration, original_duration * 2)
16911697

16921698
@data(1, 2, 3)
16931699
def test_no_infinite_loop(self, optimization_level):

test/python/dagcircuit/test_dagcircuit.py

+3-2
Original file line numberDiff line numberDiff line change
@@ -498,8 +498,9 @@ def test_copy_empty_like(self):
498498
self.assertEqual(self.dag.qubits, result_dag.qubits)
499499
self.assertEqual(self.dag.cregs, result_dag.cregs)
500500
self.assertEqual(self.dag.qregs, result_dag.qregs)
501-
self.assertEqual(self.dag.duration, result_dag.duration)
502-
self.assertEqual(self.dag.unit, result_dag.unit)
501+
with self.assertRaises(DeprecationWarning):
502+
self.assertEqual(self.dag.duration, result_dag.duration)
503+
self.assertEqual(self.dag.unit, result_dag.unit)
503504

504505
def test_copy_empty_like_vars(self):
505506
"""Variables should be part of the empty copy."""

0 commit comments

Comments
 (0)