diff --git a/mpitests/test_adjoint_jacobian.py b/mpitests/test_adjoint_jacobian.py index 6f3b5c7f5b..dc96acab5c 100644 --- a/mpitests/test_adjoint_jacobian.py +++ b/mpitests/test_adjoint_jacobian.py @@ -1384,7 +1384,9 @@ def test_qubit_unitary(dev, n_targets): np.random.seed(1337) par = 2 * np.pi * np.random.rand(n_wires) - U = np.random.rand(2**n_targets, 2**n_targets) + 1j * np.random.rand(2**n_targets, 2**n_targets) + U = np.random.rand(2**n_targets, 2**n_targets) + 1j * np.random.rand( + 2**n_targets, 2**n_targets + ) U, _ = np.linalg.qr(U) init_state = np.random.rand(2**n_wires) + 1j * np.random.rand(2**n_wires) init_state /= np.sqrt(np.dot(np.conj(init_state), init_state)) @@ -1432,7 +1434,9 @@ def test_diff_qubit_unitary(dev, n_targets): np.random.seed(1337) par = 2 * np.pi * np.random.rand(n_wires) - U = np.random.rand(2**n_targets, 2**n_targets) + 1j * np.random.rand(2**n_targets, 2**n_targets) + U = np.random.rand(2**n_targets, 2**n_targets) + 1j * np.random.rand( + 2**n_targets, 2**n_targets + ) U, _ = np.linalg.qr(U) init_state = np.random.rand(2**n_wires) + 1j * np.random.rand(2**n_wires) init_state /= np.sqrt(np.dot(np.conj(init_state), init_state)) diff --git a/pennylane_lightning/core/_serialize.py b/pennylane_lightning/core/_serialize.py index 9cd80c9550..1eedbbda69 100644 --- a/pennylane_lightning/core/_serialize.py +++ b/pennylane_lightning/core/_serialize.py @@ -367,7 +367,9 @@ def serialize_observables(self, tape: QuantumTape, wires_map: dict = None) -> Li obs_indices.append(i) return serialized_obs, obs_indices - def serialize_ops(self, tape: QuantumTape, wires_map: dict = None) -> Tuple[ + def serialize_ops( + self, tape: QuantumTape, wires_map: dict = None + ) -> Tuple[ List[List[str]], List[np.ndarray], List[List[int]], diff --git a/pennylane_lightning/core/_state_vector_base.py b/pennylane_lightning/core/_state_vector_base.py index b2ba3a0669..3e08a5ab40 100644 --- a/pennylane_lightning/core/_state_vector_base.py +++ b/pennylane_lightning/core/_state_vector_base.py @@ -38,7 +38,6 @@ class LightningBaseStateVector(ABC): """ def __init__(self, num_wires: int, dtype: Union[np.complex128, np.complex64]): - if dtype not in [np.complex64, np.complex128]: raise TypeError(f"Unsupported complex type: {dtype}") diff --git a/pennylane_lightning/core/_version.py b/pennylane_lightning/core/_version.py index 42a9e08d77..4b8d31ae9d 100644 --- a/pennylane_lightning/core/_version.py +++ b/pennylane_lightning/core/_version.py @@ -16,4 +16,4 @@ Version number (major.minor.patch[-label]) """ -__version__ = "0.39.0-dev31" +__version__ = "0.39.0-dev33" diff --git a/pennylane_lightning/core/src/gates/Constant.hpp b/pennylane_lightning/core/src/gates/Constant.hpp index 8ec99b477b..ddc6bb2996 100644 --- a/pennylane_lightning/core/src/gates/Constant.hpp +++ b/pennylane_lightning/core/src/gates/Constant.hpp @@ -26,9 +26,14 @@ namespace Pennylane::Gates::Constant { /** * @brief List of multi-qubit gates */ -[[maybe_unused]] constexpr std::array multi_qubit_gates{GateOperation::MultiRZ}; +[[maybe_unused]] constexpr std::array multi_qubit_gates{ + GateOperation::MultiRZ, + GateOperation::PCPhase, +}; [[maybe_unused]] constexpr std::array controlled_multi_qubit_gates{ - ControlledGateOperation::MultiRZ}; + ControlledGateOperation::MultiRZ, + ControlledGateOperation::PCPhase, +}; /** * @brief List of multi-qubit generators */ @@ -84,6 +89,7 @@ using GateView = typename std::pair; GateView{GateOperation::DoubleExcitationMinus, "DoubleExcitationMinus"}, GateView{GateOperation::DoubleExcitationPlus, "DoubleExcitationPlus"}, GateView{GateOperation::MultiRZ, "MultiRZ"}, + GateView{GateOperation::PCPhase, "PCPhase"}, GateView{GateOperation::GlobalPhase, "GlobalPhase"}}; using CGateView = typename std::pair; @@ -115,6 +121,7 @@ using CGateView = typename std::pair; CGateView{ControlledGateOperation::DoubleExcitationPlus, "DoubleExcitationPlus"}, CGateView{ControlledGateOperation::MultiRZ, "MultiRZ"}, + CGateView{ControlledGateOperation::PCPhase, "PCPhase"}, CGateView{ControlledGateOperation::GlobalPhase, "GlobalPhase"}, }; @@ -349,6 +356,7 @@ using GateNParams = typename std::pair; GateNParams{GateOperation::DoubleExcitationPlus, 1}, GateNParams{GateOperation::CSWAP, 0}, GateNParams{GateOperation::MultiRZ, 1}, + GateNParams{GateOperation::PCPhase, 1}, GateNParams{GateOperation::GlobalPhase, 1}, }; @@ -380,6 +388,7 @@ using CGateNParams = typename std::pair; CGateNParams{ControlledGateOperation::DoubleExcitationMinus, 1}, CGateNParams{ControlledGateOperation::DoubleExcitationPlus, 1}, CGateNParams{ControlledGateOperation::MultiRZ, 1}, + CGateNParams{ControlledGateOperation::PCPhase, 1}, CGateNParams{ControlledGateOperation::GlobalPhase, 1}, }; } // namespace Pennylane::Gates::Constant diff --git a/pennylane_lightning/core/src/gates/GateOperation.hpp b/pennylane_lightning/core/src/gates/GateOperation.hpp index f45b3f4e43..fa7512a2f0 100644 --- a/pennylane_lightning/core/src/gates/GateOperation.hpp +++ b/pennylane_lightning/core/src/gates/GateOperation.hpp @@ -65,6 +65,7 @@ enum class GateOperation : uint32_t { DoubleExcitationPlus, /* Multi-qubit gates */ MultiRZ, + PCPhase, GlobalPhase, /* END (placeholder) */ END @@ -98,6 +99,7 @@ enum class ControlledGateOperation : uint32_t { DoubleExcitationPlus, /* Multi-qubit gates */ MultiRZ, + PCPhase, GlobalPhase, /* END (placeholder) */ END diff --git a/pennylane_lightning/core/src/simulators/lightning_kokkos/gates/BasicGateFunctors.hpp b/pennylane_lightning/core/src/simulators/lightning_kokkos/gates/BasicGateFunctors.hpp index 3586147b43..8130faf439 100644 --- a/pennylane_lightning/core/src/simulators/lightning_kokkos/gates/BasicGateFunctors.hpp +++ b/pennylane_lightning/core/src/simulators/lightning_kokkos/gates/BasicGateFunctors.hpp @@ -1161,6 +1161,19 @@ void applyGlobalPhase(Kokkos::View *> arr_, KOKKOS_LAMBDA(const std::size_t k) { arr_(k) *= phase; }); } +template +void applyPCPhase(Kokkos::View *> arr_, + const std::size_t num_qubits, + [[maybe_unused]] const std::vector &wires, + const bool inverse = false, + const std::vector ¶ms = {}) { + const Kokkos::complex phase = Kokkos::exp( + Kokkos::complex{0, (inverse) ? params[0] : -params[0]}); + Kokkos::parallel_for( + Kokkos::RangePolicy(0, exp2(num_qubits)), + KOKKOS_LAMBDA(const std::size_t k) { arr_(k) *= phase; }); +} + template void applyNamedOperation(const GateOperation gateop, Kokkos::View *> arr_, @@ -1277,6 +1290,9 @@ void applyNamedOperation(const GateOperation gateop, applyGlobalPhase(arr_, num_qubits, wires, inverse, params); return; + case GateOperation::PCPhase: + applyPCPhase(arr_, num_qubits, wires, inverse, params); + return; case GateOperation::MultiRZ: applyMultiRZ(arr_, num_qubits, wires, inverse, params); return; diff --git a/pennylane_lightning/core/src/simulators/lightning_qubit/gates/AssignKernelMap_Default.cpp b/pennylane_lightning/core/src/simulators/lightning_qubit/gates/AssignKernelMap_Default.cpp index 3a4383fb5a..f78630711b 100644 --- a/pennylane_lightning/core/src/simulators/lightning_qubit/gates/AssignKernelMap_Default.cpp +++ b/pennylane_lightning/core/src/simulators/lightning_qubit/gates/AssignKernelMap_Default.cpp @@ -150,6 +150,9 @@ void assignKernelsForGateOp_Default() { instance.assignKernelForOp(GateOperation::MultiRZ, all_threading, all_memory_model, all_qubit_numbers, KernelType::LM); + instance.assignKernelForOp(GateOperation::PCPhase, all_threading, + all_memory_model, all_qubit_numbers, + KernelType::LM); instance.assignKernelForOp(GateOperation::GlobalPhase, all_threading, all_memory_model, all_qubit_numbers, KernelType::LM); @@ -307,6 +310,9 @@ void assignKernelsForControlledGateOp_Default() { instance.assignKernelForOp(ControlledGateOperation::MultiRZ, all_threading, all_memory_model, all_qubit_numbers, KernelType::LM); + instance.assignKernelForOp(ControlledGateOperation::PCPhase, all_threading, + all_memory_model, all_qubit_numbers, + KernelType::LM); instance.assignKernelForOp(ControlledGateOperation::GlobalPhase, all_threading, all_memory_model, all_qubit_numbers, KernelType::LM); diff --git a/pennylane_lightning/core/src/simulators/lightning_qubit/gates/OpToMemberFuncPtr.hpp b/pennylane_lightning/core/src/simulators/lightning_qubit/gates/OpToMemberFuncPtr.hpp index aab1e5c687..9b1fc4acd1 100644 --- a/pennylane_lightning/core/src/simulators/lightning_qubit/gates/OpToMemberFuncPtr.hpp +++ b/pennylane_lightning/core/src/simulators/lightning_qubit/gates/OpToMemberFuncPtr.hpp @@ -260,6 +260,12 @@ struct GateOpToMemberFuncPtr; }; template +struct GateOpToMemberFuncPtr { + constexpr static auto value = + &GateImplementation::template applyPCPhase; +}; +template struct GateOpToMemberFuncPtr { constexpr static auto value = @@ -423,6 +429,12 @@ struct ControlledGateOpToMemberFuncPtr; }; template +struct ControlledGateOpToMemberFuncPtr { + constexpr static auto value = + &GateImplementation::template applyNCPCPhase; +}; +template struct ControlledGateOpToMemberFuncPtr { constexpr static auto value = diff --git a/pennylane_lightning/core/src/simulators/lightning_qubit/gates/cpu_kernels/GateImplementationsLM.cpp b/pennylane_lightning/core/src/simulators/lightning_qubit/gates/cpu_kernels/GateImplementationsLM.cpp index bf067e04c8..74d909d851 100644 --- a/pennylane_lightning/core/src/simulators/lightning_qubit/gates/cpu_kernels/GateImplementationsLM.cpp +++ b/pennylane_lightning/core/src/simulators/lightning_qubit/gates/cpu_kernels/GateImplementationsLM.cpp @@ -241,6 +241,12 @@ template void GateImplementationsLM::applyMultiRZ( template void GateImplementationsLM::applyMultiRZ( std::complex *, std::size_t, const std::vector &, bool, double); +template void GateImplementationsLM::applyPCPhase( + std::complex *, std::size_t, const std::vector &, bool, + float); +template void GateImplementationsLM::applyPCPhase( + std::complex *, std::size_t, const std::vector &, bool, + double); template void GateImplementationsLM::applyGlobalPhase( std::complex *, std::size_t, const std::vector &, bool, float); diff --git a/pennylane_lightning/core/src/simulators/lightning_qubit/gates/cpu_kernels/GateImplementationsLM.hpp b/pennylane_lightning/core/src/simulators/lightning_qubit/gates/cpu_kernels/GateImplementationsLM.hpp index 2b14653a04..2c2f4d9cf3 100644 --- a/pennylane_lightning/core/src/simulators/lightning_qubit/gates/cpu_kernels/GateImplementationsLM.hpp +++ b/pennylane_lightning/core/src/simulators/lightning_qubit/gates/cpu_kernels/GateImplementationsLM.hpp @@ -153,6 +153,7 @@ class GateImplementationsLM : public PauliGenerator { GateOperation::DoubleExcitationMinus, GateOperation::DoubleExcitationPlus, GateOperation::MultiRZ, + GateOperation::PCPhase, GateOperation::GlobalPhase, }; @@ -180,6 +181,7 @@ class GateImplementationsLM : public PauliGenerator { ControlledGateOperation::DoubleExcitationMinus, ControlledGateOperation::DoubleExcitationPlus, ControlledGateOperation::MultiRZ, + ControlledGateOperation::PCPhase, ControlledGateOperation::GlobalPhase, }; @@ -1869,6 +1871,63 @@ class GateImplementationsLM : public PauliGenerator { applyNCN(arr, num_qubits, controlled_wires, controlled_values, wires, core_function); } + + template + static void applyPCPhase(std::complex *arr, + std::size_t num_qubits, + const std::vector &wires, + bool inverse, ParamT angle) { + const std::complex first = + std::complex{std::cos(angle), -std::sin(angle)}; + const std::complex second = + std::complex{std::cos(angle), std::sin(angle)}; + const std::array, 2> shifts = { + (inverse) ? std::conj(first) : first, + (inverse) ? std::conj(second) : second}; + std::size_t wires_parity{0U}; + for (std::size_t wire : wires) { + wires_parity |= + (static_cast(1U) << (num_qubits - wire - 1)); + } + + PL_LOOP_PARALLEL(1) + for (std::size_t k = 0; k < exp2(num_qubits); k++) { + arr[k] *= shifts[std::popcount(k & wires_parity) % 2]; + } + } + + template + static void applyNCPCPhase(std::complex *arr, + std::size_t num_qubits, + const std::vector &controlled_wires, + const std::vector &controlled_values, + const std::vector &wires, + bool inverse, ParamT angle) { + const std::complex first = + std::complex{std::cos(angle / 2), -std::sin(angle / 2)}; + const std::complex second = + std::complex{std::cos(angle / 2), std::sin(angle / 2)}; + const std::array, 2> shifts = { + (inverse) ? std::conj(first) : first, + (inverse) ? std::conj(second) : second}; + std::size_t wires_parity = 0U; + for (std::size_t wire : wires) { + wires_parity |= + (static_cast(1U) << (num_qubits - wire - 1)); + } + auto core_function = [wires_parity, + &shifts](std::complex *arr, + const std::vector &indices, + const std::size_t offset) { + for (auto k : indices) { + arr[(k + offset)] *= + shifts[std::popcount((k + offset) & wires_parity) % 2]; + } + }; + applyNCN(arr, num_qubits, controlled_wires, controlled_values, wires, + core_function); + } + template static void applyGlobalPhase(std::complex *arr, std::size_t num_qubits, diff --git a/pennylane_lightning/core/src/simulators/lightning_qubit/gates/tests/Test_KernelMap.cpp b/pennylane_lightning/core/src/simulators/lightning_qubit/gates/tests/Test_KernelMap.cpp index e833aa4520..d5567e3415 100644 --- a/pennylane_lightning/core/src/simulators/lightning_qubit/gates/tests/Test_KernelMap.cpp +++ b/pennylane_lightning/core/src/simulators/lightning_qubit/gates/tests/Test_KernelMap.cpp @@ -117,7 +117,8 @@ TEST_CASE("Test several limiting cases of default kernels", "[KernelMap]") { [&gate_map](Pennylane::Gates::GateOperation gate_op) { INFO(lookup(Pennylane::Gates::Constant::gate_names, gate_op)); if (gate_op == Pennylane::Gates::GateOperation::GlobalPhase || - gate_op == Pennylane::Gates::GateOperation::MultiRZ) { + gate_op == Pennylane::Gates::GateOperation::MultiRZ || + gate_op == Pennylane::Gates::GateOperation::PCPhase) { REQUIRE(gate_map[gate_op] == Pennylane::Gates::KernelType::LM); } else if (lookup(Pennylane::Gates::Constant::gate_wires, diff --git a/pennylane_lightning/core/src/simulators/lightning_qubit/gates/tests/Test_OpToMemberFuncPtr.cpp b/pennylane_lightning/core/src/simulators/lightning_qubit/gates/tests/Test_OpToMemberFuncPtr.cpp index c1f2d5ff15..7b45596a75 100644 --- a/pennylane_lightning/core/src/simulators/lightning_qubit/gates/tests/Test_OpToMemberFuncPtr.cpp +++ b/pennylane_lightning/core/src/simulators/lightning_qubit/gates/tests/Test_OpToMemberFuncPtr.cpp @@ -165,6 +165,7 @@ class DummyImplementation { PENNYLANE_TESTS_DEFINE_GATE_OP(DoubleExcitationMinus, 1) PENNYLANE_TESTS_DEFINE_GATE_OP(DoubleExcitationPlus, 1) PENNYLANE_TESTS_DEFINE_GATE_OP(MultiRZ, 1) + PENNYLANE_TESTS_DEFINE_GATE_OP(PCPhase, 1) PENNYLANE_TESTS_DEFINE_GATE_OP(GlobalPhase, 1) PENNYLANE_TESTS_DEFINE_GENERATOR_OP(PhaseShift) diff --git a/pennylane_lightning/lightning_gpu/lightning_gpu.py b/pennylane_lightning/lightning_gpu/lightning_gpu.py index 08d79c1473..4d7d50c804 100644 --- a/pennylane_lightning/lightning_gpu/lightning_gpu.py +++ b/pennylane_lightning/lightning_gpu/lightning_gpu.py @@ -130,6 +130,8 @@ def _mebibytesToBytes(mebibytes): "MultiRZ", "GlobalPhase", "C(GlobalPhase)", + "PCPhase", + "C(PCPhase)", "Hadamard", "S", "Adjoint(S)", diff --git a/pennylane_lightning/lightning_gpu/lightning_gpu.toml b/pennylane_lightning/lightning_gpu/lightning_gpu.toml index 003b248fa4..35f224ecf4 100644 --- a/pennylane_lightning/lightning_gpu/lightning_gpu.toml +++ b/pennylane_lightning/lightning_gpu/lightning_gpu.toml @@ -60,6 +60,7 @@ MultiControlledX = {} BlockEncode = {properties = [ "controllable" ]} GlobalPhase = {properties = [ "controllable" ]} +PCPhase = {properties = [ "controllable" ]} ControlledQubitUnitary = {} ECR = {} SX = {} diff --git a/pennylane_lightning/lightning_kokkos/_measurements.py b/pennylane_lightning/lightning_kokkos/_measurements.py index 6e706614ba..b438af350c 100644 --- a/pennylane_lightning/lightning_kokkos/_measurements.py +++ b/pennylane_lightning/lightning_kokkos/_measurements.py @@ -46,7 +46,6 @@ def __init__( self, kokkos_state, ) -> None: - super().__init__(kokkos_state) self._measurement_lightning = self._measurement_dtype()(kokkos_state.state_vector) diff --git a/pennylane_lightning/lightning_kokkos/_state_vector.py b/pennylane_lightning/lightning_kokkos/_state_vector.py index 5e76249de0..dda40ffadb 100644 --- a/pennylane_lightning/lightning_kokkos/_state_vector.py +++ b/pennylane_lightning/lightning_kokkos/_state_vector.py @@ -64,7 +64,6 @@ def __init__( kokkos_args=None, sync=True, ): # pylint: disable=too-many-arguments - super().__init__(num_wires, dtype) self._device_name = "lightning.kokkos" @@ -280,7 +279,6 @@ def _apply_lightning( elif isinstance(operation, qml.ops.Controlled) and isinstance( operation.base, qml.GlobalPhase ): # apply n-controlled gate - # Kokkos do not support the controlled gates except for GlobalPhase self._apply_lightning_controlled(operation) else: # apply gate as a matrix diff --git a/pennylane_lightning/lightning_kokkos/lightning_kokkos.py b/pennylane_lightning/lightning_kokkos/lightning_kokkos.py index 4089b3aca7..3690417265 100644 --- a/pennylane_lightning/lightning_kokkos/lightning_kokkos.py +++ b/pennylane_lightning/lightning_kokkos/lightning_kokkos.py @@ -78,6 +78,8 @@ "MultiRZ", "GlobalPhase", "C(GlobalPhase)", + "PCPhase", + "C(PCPhase)", "Hadamard", "S", "Adjoint(S)", diff --git a/pennylane_lightning/lightning_kokkos/lightning_kokkos.toml b/pennylane_lightning/lightning_kokkos/lightning_kokkos.toml index 0ede05a262..f74fbeee04 100644 --- a/pennylane_lightning/lightning_kokkos/lightning_kokkos.toml +++ b/pennylane_lightning/lightning_kokkos/lightning_kokkos.toml @@ -58,7 +58,8 @@ ControlledQubitUnitary = {} # Gates which should be translated to QubitUnitary [operators.gates.matrix] -BlockEncode = {} +BlockEncode = {properties = [ "controllable" ]} +PCPhase = {properties = [ "controllable" ]} DiagonalQubitUnitary = {} ECR = {} ISWAP = {} diff --git a/pennylane_lightning/lightning_qubit/_measurements.py b/pennylane_lightning/lightning_qubit/_measurements.py index f762fcb7e6..c1b97a1184 100644 --- a/pennylane_lightning/lightning_qubit/_measurements.py +++ b/pennylane_lightning/lightning_qubit/_measurements.py @@ -58,7 +58,6 @@ def __init__( kernel_name: str = None, num_burnin: int = None, ) -> None: - super().__init__(qubit_state) self._mcmc = mcmc diff --git a/pennylane_lightning/lightning_qubit/_state_vector.py b/pennylane_lightning/lightning_qubit/_state_vector.py index 0a8b0b7d6d..b4b6ef5ff1 100644 --- a/pennylane_lightning/lightning_qubit/_state_vector.py +++ b/pennylane_lightning/lightning_qubit/_state_vector.py @@ -51,7 +51,6 @@ class LightningStateVector(LightningBaseStateVector): # pylint: disable=too-few """ def __init__(self, num_wires, dtype=np.complex128): - super().__init__(num_wires, dtype) self._device_name = "lightning.qubit" diff --git a/pennylane_lightning/lightning_qubit/lightning_qubit.py b/pennylane_lightning/lightning_qubit/lightning_qubit.py index 5340d1bada..1bdc2635de 100644 --- a/pennylane_lightning/lightning_qubit/lightning_qubit.py +++ b/pennylane_lightning/lightning_qubit/lightning_qubit.py @@ -72,6 +72,7 @@ "PauliZ", "MultiRZ", "GlobalPhase", + "PCPhase", "Hadamard", "S", "Adjoint(S)", @@ -124,6 +125,7 @@ "C(DoubleExcitationPlus)", "C(MultiRZ)", "C(GlobalPhase)", + "C(PCPhase)", "C(QubitUnitary)", "CRot", "IsingXX", diff --git a/pennylane_lightning/lightning_qubit/lightning_qubit.toml b/pennylane_lightning/lightning_qubit/lightning_qubit.toml index 5656934889..82fa13ea35 100644 --- a/pennylane_lightning/lightning_qubit/lightning_qubit.toml +++ b/pennylane_lightning/lightning_qubit/lightning_qubit.toml @@ -53,6 +53,7 @@ QFT = {} [operators.gates.matrix] BlockEncode = {properties = [ "controllable" ]} +PCPhase = {properties = [ "controllable" ]} DiagonalQubitUnitary = {} ECR = {} ISWAP = {} diff --git a/tests/lightning_qubit/test_jacobian_method.py b/tests/lightning_qubit/test_jacobian_method.py index 745feee502..c636cbc77f 100644 --- a/tests/lightning_qubit/test_jacobian_method.py +++ b/tests/lightning_qubit/test_jacobian_method.py @@ -51,7 +51,6 @@ def calculate_reference(tape, execute_and_derivatives=False): @staticmethod def process_and_execute(statevector, tape, execute_and_derivatives=False): - wires = statevector.num_wires device = LightningDevice(wires) if execute_and_derivatives: diff --git a/tests/test_adjoint_jacobian.py b/tests/test_adjoint_jacobian.py index 83713b1c69..1eb06a0d91 100644 --- a/tests/test_adjoint_jacobian.py +++ b/tests/test_adjoint_jacobian.py @@ -1550,7 +1550,9 @@ def test_qubit_unitary(n_targets): init_state = np.random.rand(2**n_wires) + 1j * np.random.rand(2**n_wires) init_state /= np.linalg.norm(init_state) init_state = np.array(init_state, requires_grad=False) - U = np.random.rand(2**n_targets, 2**n_targets) + 1j * np.random.rand(2**n_targets, 2**n_targets) + U = np.random.rand(2**n_targets, 2**n_targets) + 1j * np.random.rand( + 2**n_targets, 2**n_targets + ) U, _ = np.linalg.qr(U) U = np.array(U, requires_grad=False) @@ -1592,7 +1594,9 @@ def test_diff_qubit_unitary(n_targets): init_state = np.random.rand(2**n_wires) + 1j * np.random.rand(2**n_wires) init_state /= np.linalg.norm(init_state) init_state = np.array(init_state, requires_grad=False) - U = np.random.rand(2**n_targets, 2**n_targets) + 1j * np.random.rand(2**n_targets, 2**n_targets) + U = np.random.rand(2**n_targets, 2**n_targets) + 1j * np.random.rand( + 2**n_targets, 2**n_targets + ) U, _ = np.linalg.qr(U) U = np.array(U, requires_grad=False) diff --git a/tests/test_native_mcm.py b/tests/test_native_mcm.py index df5ba6cb43..07281fb48a 100644 --- a/tests/test_native_mcm.py +++ b/tests/test_native_mcm.py @@ -90,7 +90,6 @@ def func(x, y): ): func(*params) if device_name == "lightning.kokkos": - with pytest.raises( qml.DeviceError, match=r"Measurement shadow\(wires=\[0\]\) not accepted with finite shots on "