I understand that qml.sample()
only accepts observables that commute (which is reasonable from quantum mechanics). But I was wondering why the following is a valid operation in pennylane: qml.sample(qml.PauliY(0) @ qml.PauliX(0))
and does not return the same error as this: qml.sample(qml.PauliY(0)), qml.sample(qml.PauliX(0))
? The only difference is that the later can be combined by multiplying the two outcomes to get same result as the former, assuming the two operators commute.
Hi @gidu,
I get no error when running:
import pennylane as qml
dev = qml.device("default.qubit", wires=2, shots=4)
@qml.qnode(dev)
def circuit(x):
qml.RX(x, wires=0)
qml.Hadamard(wires=1)
qml.CNOT(wires=[0, 1])
return qml.sample(qml.PauliY(0)), qml.sample(qml.PauliX(0))
print(circuit(2))
Could you please check if your pennylane
installation is up-to-date? Or perhaps provide a working example that reproduces your error?
Let me know if this helps, and if you have any other questions.
Thanks @adusko, it works with the updated version of pennylanne. My question then would be why the following is a valid operation:
Considering that @
in this context is considered a tensor product according to Pennylanne documentation. Also, note that this operation is done on a single qubit, 0
. I was wondering if the tensor product of the two Paulis qml.PauliY(0) @ qml.PauliX(0)
should result in a 4 X 4
matrix observable on a qubit. Or is this just a normal matrix product?
Hi @gidu,
The @ operator default to the matrix product in this case.
A nice way to check this is:
import pennylane as qml
print((qml.PauliX(0) @ qml.PauliY(0)).matrix)
result:
[[0.+1.j 0.+0.j]
[0.+0.j 0.-1.j]]
print((qml.PauliX(0) @ qml.PauliY(1)).matrix)
result:
[[0.+0.j 0.-0.j 0.+0.j 0.-1.j]
[0.+0.j 0.+0.j 0.+1.j 0.+0.j]
[0.+0.j 0.-1.j 0.+0.j 0.-0.j]
[0.+1.j 0.+0.j 0.+0.j 0.+0.j]]
Please let us know if you have more questions.
Thanks @adusko, this clarifies my doubts.
Gideon Uchehara