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)
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
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