Parameter Space

The get_benchmark() function has the following signature:

Hide code cell source

1from mqt.bench.benchmarks import get_available_benchmark_names
2
3print(get_available_benchmark_names())
['ae', 'bmw_quark_cardinality', 'bmw_quark_copula', 'bv', 'cdkm_ripple_carry_adder', 'dj', 'draper_qft_adder', 'full_adder', 'ghz', 'graphstate', 'grover', 'half_adder', 'hhl', 'hrs_cumulative_multiplier', 'modular_adder', 'multiplier', 'qaoa', 'qft', 'qftentangled', 'qnn', 'qpeexact', 'qpeinexact', 'qwalk', 'randomcircuit', 'rg_qft_multiplier', 'shor', 'vbe_ripple_carry_adder', 'vqe_real_amp', 'vqe_su2', 'vqe_two_local', 'wstate']
  • level: BenchmarkLevel.ALG, BenchmarkLevel.INDEP, BenchmarkLevel.NATIVEGATES, BenchmarkLevel.MAPPED

  • circuit_size: Define the number of qubits in the circuit.

  • target: Target, which can also be instantiated based on gatesets using get_target_for_gateset(gateset_name) or based on a device using get_device(device_name). Possible values for gateset_name:

Hide code cell source

1from mqt.bench.targets import get_available_gateset_names
2
3print(get_available_gateset_names())
['clifford+t', 'clifford+t+rotations', 'ibm_eagle', 'ibm_falcon', 'ibm_heron', 'ionq_aria', 'ionq_forte', 'iqm', 'quantinuum', 'rigetti']

(required for “nativegates” level)

Possible values for device_name:

Hide code cell source

1from mqt.bench.targets import get_available_device_names
2
3print(get_available_device_names())
['ibm_eagle_127', 'ibm_falcon_127', 'ibm_falcon_27', 'ibm_heron_133', 'ibm_heron_156', 'ionq_aria_25', 'ionq_forte_36', 'iqm_crystal_20', 'iqm_crystal_5', 'iqm_crystal_54', 'quantinuum_h2_56', 'rigetti_ankaa_84']

(required for “mapped” level)

  • opt_level: Optimization level for "qiskit" (0-3).

  • random_parameters: Assign random parameters to the circuit’s parameters if they exist.

  • generate_mirror_circuit: Generate the mirror version (U @ U.inverse()) of the benchmark.

Native Gate-Set Support

So far, MQT Bench supports the following native gatesets:

Hide code cell source

1from mqt.bench.targets import get_gateset, get_available_gateset_names
2
3for num, gateset_name in enumerate(get_available_gateset_names()):
4    print(f"{num+1}: {gateset_name}{get_gateset(gateset_name)}")
1: clifford+t → ['id', 'x', 'y', 'z', 'h', 's', 'sdg', 't', 'tdg', 'sx', 'sxdg', 'cx', 'cy', 'cz', 'swap', 'iswap', 'dcx', 'ecr']
2: clifford+t+rotations → ['id', 'x', 'y', 'z', 'h', 's', 'sdg', 't', 'tdg', 'sx', 'sxdg', 'cx', 'cy', 'cz', 'swap', 'iswap', 'dcx', 'ecr', 'rx', 'ry', 'rz']
3: ibm_eagle → ['id', 'x', 'sx', 'rz', 'ecr']
4: ibm_falcon → ['id', 'x', 'sx', 'rz', 'cx']
5: ibm_heron → ['id', 'x', 'sx', 'rz', 'cz']
6: ionq_aria → ['rz', 'gpi', 'gpi2', 'ms', 'measure']
7: ionq_forte → ['rz', 'gpi', 'gpi2', 'zz', 'measure']
8: iqm → ['r', 'cz']
9: quantinuum → ['rx', 'ry', 'rz', 'rzz']
10: rigetti → ['rxpi', 'rxpi2', 'rxpi2dg', 'rz', 'iswap', 'measure']

Device Support

So far, MQT Bench supports the following devices:

Hide code cell source

1from mqt.bench.targets import get_device, get_available_device_names
2
3for num, device_name in enumerate(get_available_device_names()):
4    print(f"{num+1}: {device_name} with {get_device(device_name).num_qubits} qubits")
1: ibm_eagle_127 with 127 qubits
2: ibm_falcon_127 with 127 qubits
3: ibm_falcon_27 with 27 qubits
4: ibm_heron_133 with 133 qubits
5: ibm_heron_156 with 156 qubits
6: ionq_aria_25 with 25 qubits
7: ionq_forte_36 with 36 qubits
8: iqm_crystal_20 with 20 qubits
9: iqm_crystal_5 with 5 qubits
10: iqm_crystal_54 with 54 qubits
11: quantinuum_h2_56 with 56 qubits
12: rigetti_ankaa_84 with 84 qubits

Examples how to use the get_benchmark() method for all four abstraction levels can be found on the Quickstart jupyter notebook.