Пример #1
0
 def test_measure(self):
     possible_measurements = self.test_state.possible_measurements()
     measurement = self.test_state.measure()
     self.assertTrue(measurement in possible_measurements)
     int_result = qudot_utils.dirac_str_to_int(measurement)
     self.assertTrue(self.test_state.ket[int_result][0] == 1)
     for possible_measurement in possible_measurements:
         if possible_measurement != measurement:
             index = qudot_utils.dirac_str_to_int(possible_measurement)
             self.assertTrue(self.test_state.ket[index][0] == 0)
Пример #2
0
 def test_measure(self):
     possible_measurements = self.test_state.possible_measurements()
     measurement = self.test_state.measure()
     self.assertTrue(measurement in possible_measurements)
     int_result = qudot_utils.dirac_str_to_int(measurement)
     self.assertTrue(self.test_state.ket[int_result][0] == 1)
     for possible_measurement in possible_measurements:
         if possible_measurement != measurement:
             index = qudot_utils.dirac_str_to_int(possible_measurement)
             self.assertTrue(self.test_state.ket[index][0] == 0)
Пример #3
0
    def _collapse(self, state_str):
        """collapses the state to the specified state_str"""
        state_index = utils.dirac_str_to_int(state_str)
        index = 0
        for element in self._state:
            if index == state_index:
                element[0] = 1
            else:
                element[0] = 0

            index += 1
Пример #4
0
    def possible_measurements(self, qubit_index=-1):
        """Returns all possible measurements and their probability.

        The return value will be a map where the key is a string of the
        possible state and the value is its probability of outcome. You
        can return the measurement probability of a specific qubit by
        using qubit_index param. Example, the third qubit of the state
        1/sqrt(2)|0010> + 1/sqrt(2)|1110> can be 1 with probability 1

        Args:
            qubit_index: use if you want to know the possible
                         measurements of a specific qubit. First
                         qubit is 1.

        Raises:
            ValueError: if you specify a qubit that is out of range
        """
        states_map = {}
        index = 0
        for element in self.ket:
            if element:
                probablility = measurement_probability(element[0])
                dirac_str = utils.int_to_dirac_str(index, self._num_qubits)
                states_map[dirac_str] = probablility
            index += 1

        if qubit_index >= 0:
            if qubit_index > self._num_qubits:
                raise ValueError("qubit_index=%s is out of range" %
                                 str(qubit_index))
            qubit_map = {}
            for dirac_state in states_map:
                state_index = utils.dirac_str_to_int(dirac_state)
                amplitude = self._state[state_index][0]
                qubit = utils.DIRAC_STR % dirac_state[qubit_index]
                probablility = measurement_probability(amplitude)
                if qubit in qubit_map:
                    old_probability = qubit_map[qubit]
                    qubit_map[qubit] = old_probability + probablility
                else:
                    qubit_map[qubit] = probablility

            return qubit_map
        else:
            return states_map
Пример #5
0
    def possible_measurements(self, qubit_index=-1):
        """Returns all possible measurements and their probability.

        The return value will be a map where the key is a string of the
        possible state and the value is its probability of outcome. You
        can return the measurement probability of a specific qubit by
        using qubit_index param. Example, the third qubit of the state
        1/sqrt(2)|0010> + 1/sqrt(2)|1110> can be 1 with probability 1

        Args:
            qubit_index: use if you want to know the possible
                         measurements of a specific qubit. First
                         qubit is 1.

        Raises:
            ValueError: if you specify a qubit that is out of range
        """
        states_map = {}
        index = 0
        for element in self.ket:
            if element:
                probablility = measurement_probability(element[0])
                dirac_str = utils.int_to_dirac_str(index, self._num_qubits)
                states_map[dirac_str] = probablility
            index += 1

        if qubit_index >= 0:
            if qubit_index > self._num_qubits:
                raise ValueError("qubit_index=%s is out of range" %
                                 str(qubit_index))
            qubit_map = {}
            for dirac_state in states_map:
                state_index = utils.dirac_str_to_int(dirac_state)
                amplitude = self._state[state_index][0]
                qubit = utils.DIRAC_STR % dirac_state[qubit_index]
                probablility = measurement_probability(amplitude)
                if qubit in qubit_map:
                    old_probability = qubit_map[qubit]
                    qubit_map[qubit] = old_probability + probablility
                else:
                    qubit_map[qubit] = probablility

            return qubit_map
        else:
            return states_map