コード例 #1
0
    def test_optimize_measurements_not_implemented_catch(self):
        """Tests that NotImplementedError is raised for methods other than ``'qwc'``."""

        observables = [PauliY(0), PauliX(0) @ PauliX(1), PauliZ(1)]
        grouping = "anticommuting"

        with pytest.raises(
            NotImplementedError,
            match="Measurement reduction by 'anticommuting' grouping not implemented",
        ):
            optimize_measurements(observables, grouping=grouping)
コード例 #2
0
    def test_optimize_measurements_qwc_generic_case(
            self, observables, diagonalized_groupings_sol):
        """Generic test cases without coefficients."""

        diagonalized_groupings = optimize_measurements(
            observables, grouping="qwc", colouring_method="rlf")[1]

        # assert the correct number of partitions:
        n_partitions = len(diagonalized_groupings_sol)
        assert len(diagonalized_groupings) == n_partitions
        # assert each partition is of the correct length:
        assert all([
            len(diagonalized_groupings[i]) == len(
                diagonalized_groupings_sol[i]) for i in range(n_partitions)
        ])
        # assert each partition contains the same Pauli terms as the solution partition:
        for i, partition in enumerate(diagonalized_groupings):
            for j, pauli in enumerate(partition):
                assert are_identical_pauli_words(
                    pauli, diagonalized_groupings_sol[i][j])
コード例 #3
0
    def test_optimize_measurements_qwc_generic_case_with_coefficients(self):
        """Tests if coefficients are properly re-structured."""

        observables = [PauliY(0), PauliX(0) @ PauliX(1), PauliZ(1)]
        coefficients = [1.43, 4.21, 0.97]

        diagonalized_groupings_sol = [
            [PauliZ(wires=[0]) @ PauliZ(wires=[1])],
            [PauliZ(wires=[0]), PauliZ(wires=[1])],
        ]

        grouped_coeffs_sol = [[4.21], [1.43, 0.97]]

        grouped_coeffs = optimize_measurements(observables,
                                               coefficients,
                                               grouping="qwc",
                                               colouring_method="rlf")[2]

        assert len(grouped_coeffs) == len(grouped_coeffs)

        assert all(grouped_coeffs[i] == grouped_coeffs_sol[i]
                   for i in range(len(grouped_coeffs_sol)))
コード例 #4
0
    def test_optimize_measurements_qwc_term_multiple_times(self, obs):
        """Tests if coefficients are properly re-structured even if the same
        terms appear multiple times.

        Although it should be fair to assume that the terms are unique in the
        Hamiltonian, making sure that grouping happens even with terms appearing
        multiple times can ensure that there is no unexpected behaviour.
        """
        coefficients = [1.43, 4.21]

        diagonalized_groupings_sol = [obs]

        grouped_coeffs_sol = [[1.43, 4.21]]

        grouped_coeffs = optimize_measurements(obs,
                                               coefficients,
                                               grouping="qwc",
                                               colouring_method="rlf")[2]

        assert len(grouped_coeffs) == len(grouped_coeffs)

        assert all(grouped_coeffs[i] == grouped_coeffs_sol[i]
                   for i in range(len(grouped_coeffs_sol)))