Skip to content

Implement two qubit unitary to operations algorithm from https://arxiv.org/abs/quant-ph/0406176 #6777

Open
@NoureldinYosri

Description

@NoureldinYosri

The paper https://arxiv.org/abs/quant-ph/0406176 introduces an algorithm for performing quantum shannon decomposition. We have this algorithm implemented in Cirq in

However, one of the base cases of the algorithms is not implemented. Namely A.2 the base case for a two qubit unitary, instead cirq uses another decomposition

if n == 4:
operations = tuple(
two_qubit_matrix_to_cz_operations(
qubits[0], qubits[1], u, allow_partial_czs=True, clean_operations=True, atol=atol
)
)
yield from operations
i, j = np.unravel_index(np.argmax(np.abs(u)), u.shape)
new_unitary = unitary_protocol.unitary(FrozenCircuit.from_moments(*operations))
global_phase = np.angle(u[i, j]) - np.angle(new_unitary[i, j])
if np.abs(global_phase) > 1e-9:
yield ops.global_phase_operation(np.exp(1j * global_phase))
return

Which is not as efficient as the decompositin described in A.2. It would be nice to implement A.2 and uses it in QSD.

What is the urgency from your perspective for this issue? Is it blocking important work?

P2 - we should do it in the next couple of quarters

Metadata

Metadata

Assignees

No one assigned

    Labels

    good for learningFor beginners in QC, this will help picking up some knowledge. Bit harder than "good first issues"kind/feature-requestDescribes new functionalitytriage/acceptedA consensus emerged that this bug report, feature request, or other action should be worked on

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions