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