Skip to main contentIBM Quantum Documentation

AQCSynthesisPlugin

class qiskit.transpiler.passes.synthesis.aqc_plugin.AQCSynthesisPlugin

GitHub(opens in a new tab)

Bases: UnitarySynthesisPlugin

An AQC-based Qiskit unitary synthesis plugin.

This plugin is invoked by transpile() when the unitary_synthesis_method parameter is set to "aqc".

This plugin supports customization and additional parameters can be passed to the plugin by passing a dictionary as the unitary_synthesis_plugin_config parameter of the transpile() function.

Supported parameters in the dictionary:

network_layout (str)

Type of network geometry, one of {"sequ", "spin", "cart", "cyclic_spin", "cyclic_line"}. Default value is "spin".

connectivity_type (str)

type of inter-qubit connectivity, {"full", "line", "star"}. Default value is "full".

depth (int)

depth of the CNOT-network, i.e. the number of layers, where each layer consists of a single CNOT-block.

optimizer (Minimizer)

An implementation of the Minimizer protocol to be used in the optimization process.

seed (int)

A random seed.

initial_point (ndarray(opens in a new tab))

Initial values of angles/parameters to start the optimization process from.


Attributes

max_qubits

Maximum number of supported qubits is 14.

min_qubits

Minimum number of supported qubits is 3.

supported_bases

The plugin does not support bases for synthesis.

supports_basis_gates

The plugin does not support basis gates and by default it synthesizes a circuit using ["rx", "ry", "rz", "cx"] gate basis.

supports_coupling_map

The plugin does not support coupling maps.

supports_gate_errors

The plugin does not support gate errors.

supports_gate_errors_by_qubit

Return whether the plugin supports taking gate_errors_by_qubit

This differs from supports_gate_errors/gate_errors by using a different view of the same data. Instead of being keyed by gate name this is keyed by qubit and uses Gate instances to represent gates (instead of gate names).

gate_errors_by_qubit will be a dictionary in the form of {(qubits,): [Gate, error]}. For example:

{
(0,): [SXGate(): 0.0006149355812506126, RZGate(): 0.0],
(0, 1): [CXGate(): 0.012012477900732316]
}

Do note that this dictionary might not be complete or could be empty as it depends on the target backend reporting gate errors on every gate for each qubit. The gate error rates reported in gate_errors are provided by the target device Backend object and the exact meaning might be different depending on the backend.

This defaults to False

supports_gate_lengths

The plugin does not support gate lengths.

supports_gate_lengths_by_qubit

Return whether the plugin supports taking gate_lengths_by_qubit

This differs from supports_gate_lengths/gate_lengths by using a different view of the same data. Instead of being keyed by gate name this is keyed by qubit and uses Gate instances to represent gates (instead of gate names)

gate_lengths_by_qubit will be a dictionary in the form of {(qubits,): [Gate, length]}. For example:

{
(0,): [SXGate(): 0.0006149355812506126, RZGate(): 0.0],
(0, 1): [CXGate(): 0.012012477900732316]
}

where the length value is in units of seconds.

Do note that this dictionary might not be complete or could be empty as it depends on the target backend reporting gate lengths on every gate for each qubit.

This defaults to False

supports_natural_direction

The plugin does not support natural direction, it assumes bidirectional two qubit gates.

supports_pulse_optimize

The plugin does not support optimization of pulses.

supports_target

Whether the plugin supports taking target as an option

target will be a Target object representing the target device for the output of the synthesis pass.

By default this will be False since the plugin interface predates the Target class. If a plugin returns True for this attribute, it is expected that the plugin will use the Target instead of the values passed if any of supports_gate_lengths, supports_gate_errors, supports_coupling_map, and supports_basis_gates are set (although ideally all those parameters should contain duplicate information).


Methods

run

run(unitary, **options)

GitHub(opens in a new tab)

Run synthesis for the given unitary matrix

Parameters

Returns

The dag circuit representation of the unitary. Alternatively, you can return a tuple of the form (dag, wires) where dag is the dag circuit representation of the circuit representation of the unitary and wires is the mapping wires to use for qiskit.dagcircuit.DAGCircuit.substitute_node_with_dag(). If you return a tuple and wires is None this will behave just as if only a DAGCircuit was returned. Additionally if this returns None no substitution will be made.

Return type

DAGCircuit

Was this page helpful?
Report a bug or request content on GitHub.