Skip to content

Circuit library modernization #13046

@Cryoris

Description

@Cryoris

Summary

Modernize the circuit library to improve compiler quality and construction speed. The library circuits are classified in two categories:

  • Abstract blocks Operations defined by an action they perform (e.g. mathematical transformation), but can be synthesized in different fashions. These will be Instruction/Gate objects with a detached synthesis, that the compiler can reason about.
    Examples: QFT, Pauli evolutions, arithmetic circuits, MCX gates.
  • Structural circuits Circuit defined by their structure (the circuit is unique and cannot be built another way). These will be Python functions returning a QuantumCircuit.
    Examples: n-local circuits, quantum volume

Changes are to be pending-deprecated for 1.3, deprecated for 1.4 and finalized for 2.0.

Examples

The move to abstract blocks allows the compiler to reason about the circuit building blocks, where previously there was an eager construction:

circuit = ...
circuit.append(MCXGate(n), range(n - 1), [n])  # compiler can now allocate auxiliary qubits for efficient synthesis
circuit.append(QFTGate(2 * n), range(2 * n))  # compiler can choose optimal method based on topology or following measurements
circuit.measure_all()

Python functions can be used as drop-in replacement,

circuit = two_local(num_qubits, ["rx", "ry"], "cx", entanglement="pairwise")

but can enable performance-improvements, e.g. by directly composing onto output circuits.

#### Abstract blocks
- [x] HLS with ancillas
- [x] `MCXGate`: synthesize via HLS & pending-deprecate MCX gate classes other than `MCXGate` (#12961)
- [x] `MCMTGate`: synthesize with HLS synthesis & pending-deprecate `MCMT` and `MCMTVChain` (#13150)
- [x] Pending deprecate circuits with existing gates: `QFT`, `Permutation`, `Diagonal`, `GMS` (@Cryoris) (#13232)
- [x] `PhaseOracle`: additionally needs a tweedledum-free synthesis method (@gadial  #13769)
- [x] `library.boolean_logic`: straightforward porting to `Gate` (@alexanderivrii) #13333
- [x] `library.arithmetic` (partially done by #13354)
- [x] `GraphState` (#13353)
- [x] Functional Pauli Rotations (#13371)
#### Structural circuits
- [x] `n_local` & friends @Cryoris (#13310)
- [x] `pauli_feature_map` & friends  (#13045)
- [x] `quantum_volume` @mtreinish  (#13238)
- [x] `fourier_checking` (#13353)
- [x] `iqp` (#13241)
- [x] `unitary_overlap` (#13353)
- [x] `hidden_linear_function` (#13353)
- [x] `phase_estimation` (#13353)
- [x] `grover_operator` (https://github.com/Qiskit/qiskit/pull/13365)
- [x] `qaoa_ansatz` (#13361)
#### Performance
- [x] Entanglement logic to Rust (#12950)
- [x] Oxidize `n_local` & friends (@Cryoris) #13310
- [x] Oxidize `pauli_feature_map` & friends (#13045)
- [x] Oxidize MCMT v-chain synthesis (@Cryoris) (#13150)
- [ ] In-place composition of functions, e.g. `n_local(..., out=circuit)`
- [ ] https://github.com/Qiskit/qiskit/pull/13295

Metadata

Metadata

Labels

RustThis PR or issue is related to Rust code in the repositorymod: circuitRelated to the core of the `QuantumCircuit` class or the circuit librarytype: epicA theme of work that contain sub-tasks

Type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions