Today, I am working on the next exercise on the QML track. The goal is to create a QRAM, that entangles phase-information with address bits. A good description of QRAM that I know of, stems from an IBM Quantum hackathon from 2020. The main idea is to encode the addresses, and entangle the address register with the data register via a controlled rotation.
My code …
def prep_address(address):
bin_address = np.binary_repr(address, width=3)
for i, add_bit in enumerate(bin_address):
if add_bit == "0":
qml.PauliX(wires=i)
dev = qml.device("default.qubit", wires=range(4))
@qml.qnode(dev)
def circuit():
qml.broadcast(qml.Hadamard, range(3), pattern="single")
for i, theta in enumerate(thetas):
prep_address(i)
qml.ctrl(op=qml.RY(theta, wires=3), control=range(3))
prep_address(i)
return qml.state()
print(qml.draw(circuit)())
Instinctively, I would have reversed the address bit-order, but as long as you keep it consistent, it doesn’t matter. I also didn’t care about saving gates or anything, it’s just important to calculate the addresses correctly.