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_observable_known_diagonalization(): assert np.allclose( observables.Hadamard([0]).diagonalizing_matrix, gate_operations.RotY([0], -np.pi / 4).matrix ) assert np.allclose( observables.PauliX([0]).diagonalizing_matrix, gate_operations.Hadamard([0]).matrix ) y_diag_expected = np.linalg.multi_dot( [ gate_operations.Hadamard([0]).matrix, gate_operations.S([0]).matrix, gate_operations.PauliZ([0]).matrix, ] ) assert np.allclose(observables.PauliY([0]).diagonalizing_matrix, y_diag_expected)
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()
def test_tensor_product_one_component(): observables.TensorProduct([observables.Hadamard([2])])
# # http://aws.amazon.com/apache2.0/ # # 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,
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)))
], 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]), observables.PauliZ([3]), observables.Hadamard([2]), observables.Identity([1]), ]) ], [gate_operations.Hadamard([0]),