Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 2 additions & 3 deletions qiskit/scheduler/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,7 @@
# that they have been altered from the originals.

"""Scheduling container classes."""

from typing import List
from __future__ import annotations

from qiskit.pulse.instruction_schedule_map import InstructionScheduleMap
from qiskit.pulse.utils import format_meas_map
Expand All @@ -21,7 +20,7 @@
class ScheduleConfig:
"""Configuration for pulse scheduling."""

def __init__(self, inst_map: InstructionScheduleMap, meas_map: List[List[int]], dt: float):
def __init__(self, inst_map: InstructionScheduleMap, meas_map: list[list[int]], dt: float):
"""
Container for information needed to schedule a QuantumCircuit into a pulse Schedule.

Expand Down
13 changes: 7 additions & 6 deletions qiskit/scheduler/lowering.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,9 @@
"""Lower gates to schedules. The relative timing within gates is respected. This
module handles the translation, but does not handle timing.
"""
from __future__ import annotations

from collections import namedtuple
from typing import Dict, List, Optional, Union

from qiskit.circuit.barrier import Barrier
from qiskit.circuit.delay import Delay
Expand All @@ -39,8 +40,8 @@
def lower_gates(
circuit: QuantumCircuit,
schedule_config: ScheduleConfig,
backend: Optional[Union[BackendV1, BackendV2]] = None,
) -> List[CircuitPulseDef]:
backend: BackendV1 | BackendV2 | None = None,
) -> list[CircuitPulseDef]:
"""
Return a list of Schedules and the qubits they operate on, for each element encountered in the
input circuit.
Expand All @@ -67,18 +68,18 @@ def lower_gates(
circ_pulse_defs = []

inst_map = schedule_config.inst_map
qubit_mem_slots = {} # Map measured qubit index to classical bit index
qubit_mem_slots: dict[int, int] = {} # Map measured qubit index to classical bit index

# convert the unit of durations from SI to dt before lowering
circuit = convert_durations_to_dt(circuit, dt_in_sec=schedule_config.dt, inplace=False)

def get_measure_schedule(qubit_mem_slots: Dict[int, int]) -> CircuitPulseDef:
def get_measure_schedule(qubit_mem_slots: dict[int, int]) -> CircuitPulseDef:
"""Create a schedule to measure the qubits queued for measuring."""
sched = Schedule()
# Exclude acquisition on these qubits, since they are handled by the user calibrations
acquire_excludes = {}
if Measure().name in circuit.calibrations.keys():
qubits = tuple(sorted(qubit_mem_slots.keys()))
qubits: tuple[int, ...] | list[int] = tuple(sorted(qubit_mem_slots.keys()))
params = ()
for qubit in qubits:
try:
Expand Down
11 changes: 6 additions & 5 deletions qiskit/scheduler/methods/basic.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,9 @@
"""
The most straightforward scheduling methods: scheduling **as early** or **as late** as possible.
"""
from __future__ import annotations

from collections import defaultdict
from typing import List, Optional, Union

from qiskit.circuit.quantumcircuit import QuantumCircuit
from qiskit.circuit.barrier import Barrier
Expand All @@ -28,7 +29,7 @@
def as_soon_as_possible(
circuit: QuantumCircuit,
schedule_config: ScheduleConfig,
backend: Optional[Union[BackendV1, BackendV2]] = None,
backend: BackendV1 | BackendV2 | None = None,
) -> Schedule:
"""
Return the pulse Schedule which implements the input circuit using an "as soon as possible"
Expand All @@ -51,7 +52,7 @@ def as_soon_as_possible(
"""
qubit_time_available = defaultdict(int)

def update_times(inst_qubits: List[int], time: int = 0) -> None:
def update_times(inst_qubits: list[int], time: int = 0) -> None:
"""Update the time tracker for all inst_qubits to the given time."""
for q in inst_qubits:
qubit_time_available[q] = time
Expand Down Expand Up @@ -81,7 +82,7 @@ def update_times(inst_qubits: List[int], time: int = 0) -> None:
def as_late_as_possible(
circuit: QuantumCircuit,
schedule_config: ScheduleConfig,
backend: Optional[Union[BackendV1, BackendV2]] = None,
backend: BackendV1 | BackendV2 | None = None,
) -> Schedule:
"""
Return the pulse Schedule which implements the input circuit using an "as late as possible"
Expand All @@ -107,7 +108,7 @@ def as_late_as_possible(
"""
qubit_time_available = defaultdict(int)

def update_times(inst_qubits: List[int], time: int = 0) -> None:
def update_times(inst_qubits: list[int], time: int = 0) -> None:
"""Update the time tracker for all inst_qubits to the given time."""
for q in inst_qubits:
qubit_time_available[q] = time
Expand Down
7 changes: 4 additions & 3 deletions qiskit/scheduler/schedule_circuit.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,8 @@
# that they have been altered from the originals.

"""QuantumCircuit to Pulse scheduler."""
from typing import Optional, Union
from __future__ import annotations


from qiskit.circuit.quantumcircuit import QuantumCircuit
from qiskit.exceptions import QiskitError
Expand All @@ -25,8 +26,8 @@
def schedule_circuit(
circuit: QuantumCircuit,
schedule_config: ScheduleConfig,
method: Optional[str] = None,
backend: Optional[Union[BackendV1, BackendV2]] = None,
method: str | None = None,
backend: BackendV1 | BackendV2 | None = None,
) -> Schedule:
"""
Basic scheduling pass from a circuit to a pulse Schedule, using the backend. If no method is
Expand Down
11 changes: 7 additions & 4 deletions qiskit/scheduler/sequence.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,12 @@
"""
Mapping a scheduled QuantumCircuit to a pulse Schedule.
"""
from __future__ import annotations

from collections import defaultdict

from typing import Optional, Union
from qiskit.circuit import Qubit

from qiskit.circuit.barrier import Barrier
from qiskit.circuit.measure import Measure
from qiskit.circuit.quantumcircuit import QuantumCircuit
Expand All @@ -30,7 +33,7 @@
def sequence(
scheduled_circuit: QuantumCircuit,
schedule_config: ScheduleConfig,
backend: Optional[Union[BackendV1, BackendV2]] = None,
backend: BackendV1 | BackendV2 | None = None,
) -> Schedule:
"""
Return the pulse Schedule which implements the input scheduled circuit.
Expand All @@ -54,7 +57,7 @@ def sequence(

# find the measurement start time (assume measurement once)
def _meas_start_time():
_qubit_time_available = defaultdict(int)
_qubit_time_available: dict[Qubit, int] = defaultdict(int)
for instruction in scheduled_circuit.data:
if isinstance(instruction.operation, Measure):
return _qubit_time_available[instruction.qubits[0]]
Expand All @@ -65,7 +68,7 @@ def _meas_start_time():
meas_time = _meas_start_time()

# restore start times
qubit_time_available = {}
qubit_time_available: dict[int, int] = {}
start_times = []
out_circ_pulse_defs = []
for circ_pulse_def in circ_pulse_defs:
Expand Down