mindquantum.algorithm.compiler.cu_decompose
- mindquantum.algorithm.compiler.cu_decompose(gate: QuantumGate, with_barrier: bool = False)[source]
Decompose arbitrary-dimension controlled-U gate.
This gate has \(m\) control qubits and \(n\) target qubits. When recursively calling the function itself, \(m\) decreases, while \(n\) holds constant.
- Parameters
gate (
QuantumGate
) – instance of quantum gate.with_barrier (bool) – whether add
BarrierGate
into decomposed circuit. Default: False.
- Returns
Circuit
, composed of 1-qubit gates and CNOT gates.
Examples
>>> import mindquantum as mq >>> from mindquantum.algorithm.compiler import cu_decompose >>> from scipy.stats import unitary_group >>> cqs = [0, 2, 4, 5] >>> tqs = [1, 6] >>> m = len(cqs) >>> n = len(tqs) >>> u = unitary_group.rvs(2 ** n, random_state=123) >>> g = mq.UnivMathGate('U', u).on(tqs, cqs) >>> circ = cu_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: 632, CNOT number: 314