Is it possible to initialize two qubits using AmplitudeEmbedding
, but doing so for each qubit individually?
Something like this -
dev = qml.device("default.qubit", wires=[1, 2])
@qml.qnode(dev)
def SWAP_test(A, B):
qml.AmplitudeEmbedding([A[0],A[1]], wires=[1], normalize=True)
qml.AmplitudeEmbedding([B[0], B[1]], wires=[2], normalize=True)
return qml.probs(wires=[1])
josh
February 21, 2022, 11:03am
2
Hi @ofir.arzi !
This is a current restriction with PennyLane, in that only a single, initial state preparation routine can be used.
However, you can use the qml.transforms.merge_amplitude_embedding
transform to merge multiple amplitude embeddings in your quantum function, as long as they act on different wires :
dev = qml.device('default.qubit', wires=4)
@qml.qnode(dev)
@qml.transforms.merge_amplitude_embedding
def qfunc():
qml.CNOT(wires=[0, 1])
qml.AmplitudeEmbedding([0, 1], wires=2)
qml.AmplitudeEmbedding([0, 1], wires=3)
return qml.probs(wires=[0, 1, 2, 3])
Using the transformation we can join the different amplitude embeddings into a single one:
>>> print(qml.draw(qfunc)())
0: ──╭C───────────────────────╭┤ Probs
1: ──╰X───────────────────────├┤ Probs
2: ──╭AmplitudeEmbedding(M0)──├┤ Probs
3: ──╰AmplitudeEmbedding(M0)──╰┤ Probs
M0 = [0.+0.j 0.+0.j 0.+0.j 1.+0.j]