SolovayKitaevDecomposition
class qiskit.synthesis.SolovayKitaevDecomposition(basic_approximations=None)
Bases: object
(opens in a new tab)
The Solovay Kitaev discrete decomposition algorithm.
This class is called recursively by the transpiler pass, which is why it is separeted. See qiskit.transpiler.passes.SolovayKitaev
for more information.
Parameters
basic_approximations (str(opens in a new tab) |dict(opens in a new tab)[str(opens in a new tab), np.ndarray] | list(opens in a new tab)[GateSequence] | None) – A specification of the basic SU(2) approximations in terms of discrete gates. At each iteration this algorithm, the remaining error is approximated with the closest sequence of gates in this set. If a str
, this specifies a .npy
filename from which to load the approximation. If a dict
, then this contains {gates: effective_SO3_matrix}
pairs, e.g. {"h t": np.array([[0, 0.7071, -0.7071], [0, -0.7071, -0.7071], [-1, 0, 0]]}
. If a list, this contains the same information as the dict, but already converted to GateSequence
objects, which contain the SO(3) matrix and gates.
Methods
find_basic_approximation
find_basic_approximation(sequence)
Find GateSequence
in self._basic_approximations
that approximates sequence
.
Parameters
sequence (GateSequence) – GateSequence
to find the approximation to.
Returns
GateSequence
in self._basic_approximations
that approximates sequence
.
Return type
GateSequence
load_basic_approximations
static load_basic_approximations(data)
Load basic approximations.
Parameters
data (list(opens in a new tab) |str(opens in a new tab) |dict(opens in a new tab)) – If a string, specifies the path to the file from where to load the data. If a dictionary, directly specifies the decompositions as {gates: matrix}
or {gates: (matrix, global_phase)}
. There, gates
are the names of the gates producing the SO(3) matrix matrix
, e.g. {"h t": np.array([[0, 0.7071, -0.7071], [0, -0.7071, -0.7071], [-1, 0, 0]]}
and the global_phase
can be given to account for a global phase difference between the U(2) matrix of the quantum gates and the stored SO(3) matrix. If not given, the global_phase
will be assumed to be 0.
Returns
A list of basic approximations as type GateSequence
.
Raises
ValueError(opens in a new tab) – If the number of gate combinations and associated matrices does not match.
Return type
list(opens in a new tab)[GateSequence]
run
run(gate_matrix, recursion_degree, return_dag=False, check_input=True)
Run the algorithm.
Parameters
- gate_matrix (np.ndarray) – The 2x2 matrix representing the gate. This matrix has to be SU(2) up to global phase.
- recursion_degree (int(opens in a new tab)) – The recursion degree, called in the paper.
- return_dag (bool(opens in a new tab)) – If
True
return aDAGCircuit
, else aQuantumCircuit
. - check_input (bool(opens in a new tab)) – If
True
check that the input matrix is valid for the decomposition.
Returns
A one-qubit circuit approximating the gate_matrix
in the specified discrete basis.
Return type
QuantumCircuit’ | ‘DAGCircuit