Contribute the swap test

Hello! If we have two vectors with 4 dimensionality, i.e., x_1 = [1, 2, 3, 4 ] and x_2 = [5, 6, 7, 8],How can we contribute a “SWAP TEST” quantum circuit for evaluate these vectors’ similarity?

Thanks a lot!

Hey @zj-lucky,

Sounds like you’re trying to do the swap test with two 2-qubit states? Is that right?

Each vector x_i can be represented by a two-qubit state; there are two such vectors.

Ah! Okay. Then this should be straightforward enough I think. Here’s what it looks like to swap two two-qubit states:

import pennylane as qml
from pennylane import numpy as np

dev = qml.device('default.qubit')

@qml.qnode(dev)
def four_qubit_SWAP(state):
    qml.AmplitudeEmbedding(state, wires=range(4), normalize=True)
    qml.SWAP(wires=[1, 3])
    qml.SWAP(wires=[0, 2])
    return qml.state()

state1 = np.array([0.5, -0.5, -0.5, 0.5])
state2 = np.array([-0.5, 0.5, 0.5, -0.5])
state = np.kron(state1, state2)

# swap state1 with state2
print(state)
print(four_qubit_SWAP(state))
print(qml.draw(four_qubit_SWAP)(state))
[-0.25  0.25  0.25 -0.25  0.25 -0.25 -0.25  0.25  0.25 -0.25 -0.25  0.25
 -0.25  0.25  0.25 -0.25]
[-0.25+0.j  0.25+0.j  0.25+0.j -0.25+0.j  0.25+0.j -0.25+0.j -0.25+0.j
  0.25+0.j  0.25+0.j -0.25+0.j -0.25+0.j  0.25+0.j -0.25+0.j  0.25+0.j
  0.25+0.j -0.25+0.j]
0: ─╭|Ψ⟩───────╭SWAP─┤  State
1: ─├|Ψ⟩─╭SWAP─│─────┤  State
2: ─├|Ψ⟩─│─────╰SWAP─┤  State
3: ─╰|Ψ⟩─╰SWAP───────┤  State

It’s just a combination of two different SWAP gates :slight_smile:. Then, to do a SWAP test here, you just need to make a larger controlled operator out of two swap gates.

@qml.qnode(dev)
def double_swap_test():
    qml.Hadamard(0)
    qml.ctrl(qml.SWAP(wires=[2, 4]) @ qml.SWAP(wires=[1, 3]), control=0)
    qml.Hadamard(0)
    return qml.state()

print(qml.draw(double_swap_test)())
0: ──H─╭●──────────H─┤  State
2: ────├SWAP@SWAP────┤  State
4: ────├SWAP@SWAP────┤  State
1: ────├SWAP@SWAP────┤  State
3: ────╰SWAP@SWAP────┤  State