mqt.ionshuttler.multi_shuttler.inside.scheduling

Module Contents

preprocess(graph: Graph, priority_queue: dict[int, str]) None[source]
get_edge_idc_by_pz_name(graph: Graph, pz_name: str) Edge[source]
pick_pz_for_2_q_gate(graph: Graph, ion0: int, ion1: int) str[source]
assign_gate_to_pz(graph: Graph, gate: GateRef) str[source]

Dispatch a gate ID or qubit tuple to the corresponding PZ assignment path.

Parameters:
  • graph – Inside architecture graph holding scheduling state.

  • gate – Stable gate ID or direct tuple of qubit IDs.

Returns:

The selected processing-zone name.

create_priority_queue(graph: Graph, sequence: list[GateRef] | None = None, max_length: int = 10) tuple[dict[int, str], dict[str, GateRef]][source]

Create a priority queue based on a given graph and sequence of gates. Also creates a dictionary of the next gate of each processing zone.

Parameters:
  • graph – The graph representing the QCCD architecture.

  • sequence – The sequence of gates. Defaults to graph.sequence.

  • max_length – The maximum length of the priority queue. Defaults to 10.

Returns:

  • The priority queue

  • The next gate at each processing zone

get_partitioned_priority_queues(priority_queue: dict[int, str]) dict[str, list[int]][source]
create_gate_info_list(graph: Graph) dict[str, list[int]][source]
create_move_list(graph: Graph, partitioned_priority_queue: list[int], pz: ProcessingZone) list[int][source]
create_cycles_for_moves(graph: Graph, move_list: list[int], cycle_or_paths: str, pz: ProcessingZone) dict[int, list[Edge]][source]
find_conflict_cycle_idxs(graph: Graph, cycles_dict: dict[int, list[Edge]]) list[tuple[int, int]][source]
find_movable_cycles(graph: Graph, all_cycles: dict[int, list[Edge]], priority_queue: dict[int, str], cycle_or_paths: str) list[int][source]
rotate(graph: Graph, ion: int, cycle_idcs: list[Edge]) None[source]
rotate_free_cycles(graph: Graph, all_cycles: dict[int, list[Edge]], free_cycles_idxs: list[int]) None[source]