Hey @Einar_Gabbassov,
Does the decomposition()
method work for you? E.g.,
>>> hamiltonian, num_qubits = qchem.molecular_hamiltonian(["H", "H"], np.array([[0, 0, 0.66], [0, 0, -0.66]]))
>>> qml.ApproxTimeEvolution(hamiltonian, 1, 1).decomposition()
[PauliRot(tensor(0.35590551, requires_grad=False), wires=[0]), PauliRot(tensor(0.35590551, requires_grad=False), wires=[1]), PauliRot(tensor(0.34133649, requires_grad=False), wires=[0, 1]), PauliRot(tensor(0.08945978, requires_grad=False), wires=[0, 1, 2, 3]), PauliRot(tensor(-0.08945978, requires_grad=False), wires=[0, 1, 2, 3]), PauliRot(tensor(-0.08945978, requires_grad=False), wires=[0, 1, 2, 3]), PauliRot(tensor(0.08945978, requires_grad=False), wires=[0, 1, 2, 3]), PauliRot(tensor(-0.48698732, requires_grad=False), wires=[2]), PauliRot(tensor(0.2460383, requires_grad=False), wires=[0, 2]), PauliRot(tensor(-0.48698732, requires_grad=False), wires=[3]), PauliRot(tensor(0.33549807, requires_grad=False), wires=[0, 3]), PauliRot(tensor(0.33549807, requires_grad=False), wires=[1, 2]), PauliRot(tensor(0.2460383, requires_grad=False), wires=[1, 3]), PauliRot(tensor(0.35269298, requires_grad=False), wires=[2, 3])]
If those operations aren’t decomposed enough, you can decompose them further:
>>> for op in qml.ApproxTimeEvolution(hamiltonian, 1, 1).decomposition():
... print(op.decomposition())
...
[MultiRZ(tensor(0.35590551, requires_grad=False), wires=[0])]
[MultiRZ(tensor(0.35590551, requires_grad=False), wires=[1])]
[MultiRZ(tensor(0.34133649, requires_grad=False), wires=[0, 1])]
[RX(1.5707963267948966, wires=[0]), Hadamard(wires=[1]), Hadamard(wires=[2]), RX(1.5707963267948966, wires=[3]), MultiRZ(tensor(0.08945978, requires_grad=False), wires=[0, 1, 2, 3]), RX(-1.5707963267948966, wires=[0]), Hadamard(wires=[1]), Hadamard(wires=[2]), RX(-1.5707963267948966, wires=[3])]
[RX(1.5707963267948966, wires=[0]), RX(1.5707963267948966, wires=[1]), Hadamard(wires=[2]), Hadamard(wires=[3]), MultiRZ(tensor(-0.08945978, requires_grad=False), wires=[0, 1, 2, 3]), RX(-1.5707963267948966, wires=[0]), RX(-1.5707963267948966, wires=[1]), Hadamard(wires=[2]), Hadamard(wires=[3])]
[Hadamard(wires=[0]), Hadamard(wires=[1]), RX(1.5707963267948966, wires=[2]), RX(1.5707963267948966, wires=[3]), MultiRZ(tensor(-0.08945978, requires_grad=False), wires=[0, 1, 2, 3]), Hadamard(wires=[0]), Hadamard(wires=[1]), RX(-1.5707963267948966, wires=[2]), RX(-1.5707963267948966, wires=[3])]
[Hadamard(wires=[0]), RX(1.5707963267948966, wires=[1]), RX(1.5707963267948966, wires=[2]), Hadamard(wires=[3]), MultiRZ(tensor(0.08945978, requires_grad=False), wires=[0, 1, 2, 3]), Hadamard(wires=[0]), RX(-1.5707963267948966, wires=[1]), RX(-1.5707963267948966, wires=[2]), Hadamard(wires=[3])]
[MultiRZ(tensor(-0.48698732, requires_grad=False), wires=[2])]
[MultiRZ(tensor(0.2460383, requires_grad=False), wires=[0, 2])]
[MultiRZ(tensor(-0.48698732, requires_grad=False), wires=[3])]
[MultiRZ(tensor(0.33549807, requires_grad=False), wires=[0, 3])]
[MultiRZ(tensor(0.33549807, requires_grad=False), wires=[1, 2])]
[MultiRZ(tensor(0.2460383, requires_grad=False), wires=[1, 3])]
[MultiRZ(tensor(0.35269298, requires_grad=False), wires=[2, 3])]