qml.ops.op_math.ctrl_decomp_bisect

ctrl_decomp_bisect(target_operation, control_wires)[source]

Decompose the controlled version of a target single-qubit operation

Not backpropagation compatible (as currently implemented). Use only with numpy.

Automatically selects the best algorithm based on the matrix (uses specialized more efficient algorithms if the matrix has a certain form, otherwise falls back to the general algorithm). These algorithms are defined in section 3.1 and 3.2 of Vale et al. (2023).

Warning

This method will add a global phase for target operations that do not belong to the SU(2) group.

Parameters
  • target_operation (Operator) – the target operation to decompose

  • control_wires (Wires) – the control wires of the operation

Returns

the decomposed operations

Return type

list[Operation]

Raises

ValueError – if target_operation is not a single-qubit operation

Example:

>>> op = qml.T(0) # uses OD algorithm
>>> print(qml.draw(ctrl_decomp_bisect, wire_order=(0,1,2,3,4,5), show_matrices=False)(op, (1,2,3,4,5)))
0: ─╭X──U(M0)─╭X──U(M0)†─╭X──U(M0)─╭X──U(M0)†─┤
1: ─├●────────│──────────├●────────│──────────┤
2: ─├●────────│──────────├●────────│──────────┤
3: ─╰●────────│──────────╰●────────│──────────┤
4: ───────────├●───────────────────├●─────────┤
5: ───────────╰●───────────────────╰●─────────┤
>>> op = qml.QubitUnitary([[0,1j],[1j,0]], 0) # uses MD algorithm
>>> print(qml.draw(ctrl_decomp_bisect, wire_order=(0,1,2,3,4,5), show_matrices=False)(op, (1,2,3,4,5)))
0: ──H─╭X──U(M0)─╭X──U(M0)†─╭X──U(M0)─╭X──U(M0)†──H─┤
1: ────├●────────│──────────├●────────│─────────────┤
2: ────├●────────│──────────├●────────│─────────────┤
3: ────╰●────────│──────────╰●────────│─────────────┤
4: ──────────────├●───────────────────├●────────────┤
5: ──────────────╰●───────────────────╰●────────────┤
>>> op = qml.Hadamard(0) # uses general algorithm
>>> print(qml.draw(ctrl_decomp_bisect, wire_order=(0,1,2,3,4,5), show_matrices=False)(op, (1,2,3,4,5)))
0: ──U(M0)─╭X──U(M1)†──U(M2)─╭X──U(M2)†─╭X──U(M2)─╭X──U(M2)†─╭X──U(M1)─╭X──U(M0)─┤
1: ────────│─────────────────│──────────├●────────│──────────├●────────│─────────┤
2: ────────│─────────────────│──────────├●────────│──────────├●────────│─────────┤
3: ────────│─────────────────│──────────╰●────────│──────────╰●────────│─────────┤
4: ────────├●────────────────├●───────────────────├●───────────────────├●────────┤
5: ────────╰●────────────────╰●───────────────────╰●───────────────────╰●────────┤