Esempio n. 1
0
    def test_hadamard_gate_single(self):
        # Programming project 2

        # Test application of single Hadamard gate
        #  A Hadamard gate is applied to qbit 2.
        #  From Eq. (14), this puts qbit 2 in an equal superposition |0> and |1>.
        #  Therefore, the result of the calculation should vary randomly between the two possibilities, |000> and |010>.
        num_qbits = 3
        test_vector = [
            None,
            [ROOT2RECIPRICOL, 0.0, 0.0, 0.0, ROOT2RECIPRICOL, 0.0, 0.0, 0.0],
            [ROOT2RECIPRICOL, 0.0, ROOT2RECIPRICOL, 0.0, 0.0, 0.0, 0.0, 0.0],
            [ROOT2RECIPRICOL, ROOT2RECIPRICOL, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
        ]
        test_states = [
            None, {
                "|000>": 0.5,
                "|100>": 0.5
            }, {
                "|000>": 0.5,
                "|010>": 0.5
            }, {
                "|000>": 0.5,
                "|001>": 0.5
            }
        ]
        for i in range(1, num_qbits + 1):
            hadamard = Register(num_qbits=num_qbits,
                                num_measures=self.num_measures)
            hadamard.unit_vector[0] = 1.
            hadamard.hadamard_gate(i)
            states = hadamard.counting_states()
            self.assertEqualWrapper(
                hadamard.unit_vector, test_vector[i],
                "Incorrect unit vector after Hadamard " + str(i))
            self.assertReasonablyEqualDictionaryWrapper(
                states, test_states[i], self.state_accuracy_percent,
                "Incorrect single Hadamard gate probability")