| 
				
				
					
				
				
				 | 
			
			 | 
			@@ -59,7 +59,6 @@ class CircuitModel(object): | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        """ Act a CU somewhere """ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        control = 1 << control | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        target = 1 << control | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        print control, target | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        for i in xrange(self.d): | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            if (i & control) and (i & target): | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                self.state[i, 0] *= -1 | 
		
		
	
	
		
			
				| 
				
				
				
					
				
				 | 
			
			 | 
			@@ -73,14 +72,24 @@ class CircuitModel(object): | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                output[i] += v*ir2 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                output[i ^ where] += v*ir2 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            if (i & where) == 1: | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                output[i] += v*ir2 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                output[i ^ where] -= v*ir2 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                output[i ^ where] += v*ir2 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                output[i] -= v*ir2 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        self.state = output | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    def local_rotation(self, qubit, u): | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    def act_local_rotation(self, qubit, u): | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        """ Act a local unitary somwhere """ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        pass | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        where = 1 << qubit | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        output = np.zeros((self.d, 1), dtype=complex) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        for i, v in enumerate(self.state): | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            if (i & where) == 0: | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                output[i] += v*u[0, 0] | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                output[i ^ where] += v*u[0, 1] | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            if (i & where) == 1: | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                output[i ^ where] += v*u[1, 0] | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                output[i] += v*u[1, 1] | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        self.state = output | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    def __str__(self): | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        s = "" | 
		
		
	
	
		
			
				| 
				
					
				
				
				
				 | 
			
			 | 
			
  |