mindquantum.algorithm.compiler.qs_decompose

View Source On Gitee
mindquantum.algorithm.compiler.qs_decompose(gate: QuantumGate, with_barrier: bool = False)[source]

Quantum Shannon decomposition for arbitrary-dimension unitary gate.

The number of CNOT gates in the decomposed circuit is:

\[O(4^n)\]

For more detail, please refer to Synthesis of Quantum Logic Circuits.

Parameters
  • gate (QuantumGate) – instance of quantum gate.

  • with_barrier (bool) – whether add barriers into decomposed circuit.

Returns

Circuit, composed of 1-qubit gates and CNOT gates.

Examples

>>> import mindquantum as mq
>>> from mindquantum.algorithm.compiler.decompose import qs_decompose
>>> from scipy.stats import unitary_group
>>> tqs = [1,2,3,6] # arbitrary qubit index order is OK
>>> n = len(tqs) # qubit number
>>> u = unitary_group.rvs(2 ** n, random_state=123)
>>> g = mq.UnivMathGate('U', u).on(tqs)
>>> circ = qs_decompose(g)
>>> num_cnot =  len([g for g in circ if isinstance(g, mq.XGate) and len(g.ctrl_qubits)==1])
>>> print('total gate number: {}, CNOT number: {}'.format(len(circ), num_cnot))
total gate number: 412, CNOT number: 180