Skip to main contentIBM Quantum Documentation
You are viewing the API reference for an old version of Qiskit SDK. Switch to latest version


class SolovayKitaevSynthesis

GitHub(opens in a new tab)

Bases: qiskit.transpiler.passes.synthesis.plugin.UnitarySynthesisPlugin

A Solovay-Kitaev Qiskit unitary synthesis plugin.

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

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:

basis_approximations (str | dict):

The basic approximations for the finding the best discrete decomposition at the root of the recursion. If a string, it specifies the .npy file to load the approximations from. If a dictionary, it contains {label: SO(3)-matrix} pairs. If None, a default based on the specified basis_gates and depth is generated.

basis_gates (list):

A list of strings specifying the discrete basis gates to decompose to. If None, defaults to ["h", "t", "tdg"].

depth (int):

The gate-depth of the the basic approximations. All possible, unique combinations of the basis gates up to length depth are considered. If None, defaults to 10.

recursion_degree (int):

The number of times the decomposition is recursively improved. If None, defaults to 3.


run, **options)

Run synthesis for the given unitary matrix


  • unitary (numpy.ndarray) – The unitary matrix to synthesize to a DAGCircuit object
  • options – The optional kwargs that are passed based on the output the support_* methods on the class. Refer to the documentation for these methods on UnitarySynthesisPlugin to see what the keys and values are.


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




Maximum number of supported qubits is 1.


Minimum number of supported qubits is 1.


The plugin does not support bases for synthesis.


The plugin does not support basis gates. By default it synthesis to the ["h", "t", "tdg"] gate basis.


The plugin does not support coupling maps.


The plugin does not support gate errors.


The plugin does not support gate lengths.


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


The plugin does not support optimization of pulses.


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).

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