diff --git a/pennylane_lightning/core/src/simulators/lightning_tensor/tncuda/MPOTNCuda.hpp b/pennylane_lightning/core/src/simulators/lightning_tensor/tncuda/MPOTNCuda.hpp index 9c1c8dee5..cd7dbdf70 100644 --- a/pennylane_lightning/core/src/simulators/lightning_tensor/tncuda/MPOTNCuda.hpp +++ b/pennylane_lightning/core/src/simulators/lightning_tensor/tncuda/MPOTNCuda.hpp @@ -173,7 +173,10 @@ template class MPOTNCuda { } else if (i == numMPOSites_ - 1) { localModesExtents = {bondDims_[i - 1], 2, 2}; } else { + // This branch is tested in the python layer + // LCOV_EXCL_START localModesExtents = {bondDims_[i - 1], 2, bondDims_[i], 2}; + // LCOV_EXCL_STOP } modesExtents_int64_.emplace_back( diff --git a/pennylane_lightning/core/src/simulators/lightning_tensor/tncuda/gates/tests/Test_MPSTNCuda_NonParam.cpp b/pennylane_lightning/core/src/simulators/lightning_tensor/tncuda/gates/tests/Test_MPSTNCuda_NonParam.cpp index db980e1f3..1792c728a 100644 --- a/pennylane_lightning/core/src/simulators/lightning_tensor/tncuda/gates/tests/Test_MPSTNCuda_NonParam.cpp +++ b/pennylane_lightning/core/src/simulators/lightning_tensor/tncuda/gates/tests/Test_MPSTNCuda_NonParam.cpp @@ -633,5 +633,29 @@ TEMPLATE_TEST_CASE("MPSTNCuda::applyMPO::2+_wires", "[MPSTNCuda_NonParam]", CHECK(res == Pennylane::Util::approx(ref)); } + + SECTION("Target at non-adjacent wire indices") { + std::size_t num_qubits = 3; + + MPSTNCuda mps_state{num_qubits, maxExtent, dev_tag}; + + MPSTNCuda mps_state_mpo{num_qubits, maxExtent, dev_tag}; + + mps_state.applyOperations({"Hadamard", "Hadamard", "Hadamard"}, + {{0}, {1}, {2}}, {false, false, false}); + + mps_state_mpo.applyOperations({"Hadamard", "Hadamard", "Hadamard"}, + {{0}, {1}, {2}}, + {false, false, false}); + + mps_state.applyOperation("CNOT", {0, 2}, inverse); + + mps_state_mpo.applyMPOOperation(mpo_cnot, {0, 2}, max_mpo_bond); + + auto ref = mps_state.getDataVector(); + auto res = mps_state_mpo.getDataVector(); + + CHECK(res == Pennylane::Util::approx(ref)); + } } } diff --git a/pennylane_lightning/core/src/simulators/lightning_tensor/tncuda/gates/tests/Test_MPSTNCuda_Param.cpp b/pennylane_lightning/core/src/simulators/lightning_tensor/tncuda/gates/tests/Test_MPSTNCuda_Param.cpp index 1385918cd..c5caa3171 100644 --- a/pennylane_lightning/core/src/simulators/lightning_tensor/tncuda/gates/tests/Test_MPSTNCuda_Param.cpp +++ b/pennylane_lightning/core/src/simulators/lightning_tensor/tncuda/gates/tests/Test_MPSTNCuda_Param.cpp @@ -1134,4 +1134,28 @@ TEMPLATE_TEST_CASE("MPSTNCuda::applyMPO::SingleExcitation", "[MPSTNCuda_Param]", CHECK(res == Pennylane::Util::approx(ref)); } + + SECTION("Target at non-adjacent wire indices") { + std::size_t num_qubits = 3; + + MPSTNCuda mps_state{num_qubits, maxExtent, dev_tag}; + + MPSTNCuda mps_state_mpo{num_qubits, maxExtent, dev_tag}; + + mps_state.applyOperations({"Hadamard", "Hadamard", "Hadamard"}, + {{0}, {1}, {2}}, {false, false, false}); + + mps_state_mpo.applyOperations({"Hadamard", "Hadamard", "Hadamard"}, + {{0}, {1}, {2}}, {false, false, false}); + + mps_state.applyOperation("SingleExcitation", {0, 2}, false, {0.3}); + + mps_state_mpo.applyMPOOperation(mpo_single_excitation, {0, 2}, + max_mpo_bond); + + auto ref = mps_state.getDataVector(); + auto res = mps_state_mpo.getDataVector(); + + CHECK(res == Pennylane::Util::approx(ref)); + } }