def test_tensor_product_nonstandard(): tensor = observables.TensorProduct( [ observables.Hadamard([1]), observables.Identity([5]), observables.PauliX([3]), observables.PauliZ([7]), observables.PauliY([4]), ] ) assert tensor.targets == (1, 3, 4) assert tensor.measured_qubits == (1, 5, 3, 7, 4) eigenvalues = np.array( [ 1, -1, 1, -1, -1, 1, -1, 1, -1, 1, -1, 1, 1, -1, 1, -1, -1, 1, -1, 1, 1, -1, 1, -1, 1, -1, 1, -1, -1, 1, -1, 1, ] ) assert (tensor.eigenvalues == eigenvalues).all() # Test cached assert (tensor.eigenvalues == eigenvalues).all() # Both Identity and Z ignored assert (tensor.diagonalizing_matrix == np.kron(np.kron(h_diag, x_diag), y_diag)).all()
def test_tensor_product_standard(): tensor = observables.TensorProduct( [ observables.Hadamard([1]), observables.PauliX([3]), observables.PauliZ([7]), observables.PauliY([4]), ] ) assert tensor.targets == (1, 3, 4) assert tensor.measured_qubits == (1, 3, 7, 4) assert (tensor.eigenvalues == pauli_eigenvalues(4)).all() assert not tensor.is_standard # Z ignored assert (tensor.diagonalizing_matrix == np.kron(np.kron(h_diag, x_diag), y_diag)).all()
"type": "cnot", "target": 1, "control": 0 }, ], "results": result_types, })) simulator.run(prog, qubit_count=2, shots=0) @pytest.mark.parametrize( "obs1,obs2", [ (observables.PauliX([1]), observables.PauliX(None)), (observables.PauliZ([1]), observables.PauliZ(None)), (observables.Hermitian(np.eye(2), [1]), observables.Hermitian(np.eye(2), None)), ], ) def test_validate_and_consolidate_observable_result_types_none(obs1, obs2): obs_rts = [ Expectation(obs1), Variance(obs2), ] actual_obs = DefaultSimulator._validate_and_consolidate_observable_result_types( obs_rts, 2) assert len(actual_obs) == 1 assert actual_obs[0].measured_qubits is None
# or in the "license" file accompanying this file. This file is # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF # ANY KIND, either express or implied. See the License for the specific # language governing permissions and limitations under the License. import numpy as np import pytest from braket.default_simulator import gate_operations, observables from braket.default_simulator.operation_helpers import check_unitary, pauli_eigenvalues testdata = [ (observables.Hadamard([13]), (13,), (13,), pauli_eigenvalues(1), True), (observables.PauliX([11]), (11,), (11,), pauli_eigenvalues(1), True), (observables.PauliY([10]), (10,), (10,), pauli_eigenvalues(1), True), (observables.PauliZ([9]), (), (9,), pauli_eigenvalues(1), True), (observables.Identity([7]), (), (7,), np.array([1, 1]), False), ( observables.Hermitian(np.array([[1, 1 - 1j], [1 + 1j, -1]]), [4]), (4,), (4,), [-np.sqrt(3), np.sqrt(3)], False, ), ( observables.Hermitian(np.array([[1, 1 - 1j], [1 + 1j, -1]])), None, None, [-np.sqrt(3), np.sqrt(3)], False, ),
gate_operations.ISwap([0, 1]), gate_operations.PSwap([0, 1], math.pi), gate_operations.XY([0, 1], math.pi), gate_operations.XX([0, 1], math.pi), gate_operations.YY([0, 1], math.pi), gate_operations.ZZ([0, 1], math.pi), gate_operations.CCNot([0, 1, 2]), gate_operations.CSwap([0, 1, 2]), gate_operations.Unitary([0], [[0, 1j], [1j, 0]]), ] observable_testdata = [ observables.Identity([0]), observables.PauliX([0]), observables.PauliY([0]), observables.PauliZ([0]), observables.Hadamard([0]), observables.Hermitian(np.array([[1, 1 - 1j], [1 + 1j, -1]])), ] def test_correct_eigenvalues_paulis(): """Test the pauli_eigenvalues function for one qubit""" assert np.array_equal(operation_helpers.pauli_eigenvalues(1), np.diag(z_matrix)) def test_correct_eigenvalues_pauli_kronecker_products_two_qubits(): """Test the pauli_eigenvalues function for two qubits""" assert np.array_equal(operation_helpers.pauli_eigenvalues(2), np.diag(np.kron(z_matrix, z_matrix)))
), ( [ gate_operations.PauliX([0]), gate_operations.PauliX([1]), gate_operations.CSwap([0, 1, 2]), ], 3, [0, 0, 0, 0, 0, 1, 0, 0], [0, 0, 0, 0, 0, 1, 0, 0], ), ] apply_observables_testdata = [ ([observables.PauliX([0])], [gate_operations.Hadamard([0])], 1), ([observables.PauliZ([0])], [], 1), ([observables.Identity([0])], [], 1), ( [ observables.PauliX([0]), observables.PauliZ([3]), observables.Hadamard([2]) ], [gate_operations.Hadamard([0]), gate_operations.RotY([2], -np.pi / 4)], 5, ), ( [ observables.TensorProduct([ observables.PauliX([0]),