def _act_on_(self, args: Any): from cirq import sim, ops if isinstance(args, sim.ActOnStabilizerCHFormArgs): (axe, ) = args.axes if args.state._measure(axe, args.prng): ops.X._act_on_(args) return True if isinstance(args, sim.ActOnStateVectorArgs): # Do a silent measurement. measurements, _ = sim.measure_state_vector( args.target_tensor, args.axes, out=args.target_tensor, qid_shape=args.target_tensor.shape, ) result = measurements[0] # Use measurement result to zero the qid. if result: zero = args.subspace_index(0) other = args.subspace_index(result) args.target_tensor[zero] = args.target_tensor[other] args.target_tensor[other] = 0 return True return NotImplemented
def _act_on_(self, args: Any) -> bool: from cirq import sim if isinstance(args, sim.ActOnStateVectorArgs): invert_mask = self.full_invert_mask() bits, _ = sim.measure_state_vector( args.target_tensor, args.axes, out=args.target_tensor, qid_shape=args.target_tensor.shape, seed=args.prng) corrected = [ bit ^ (bit < 2 and mask) for bit, mask in zip(bits, invert_mask) ] args.record_measurement_result(self.key, corrected) return True if isinstance(args, sim.clifford.ActOnCliffordTableauArgs): invert_mask = self.full_invert_mask() bits = [args.tableau._measure(q, args.prng) for q in args.axes] corrected = [ bit ^ (bit < 2 and mask) for bit, mask in zip(bits, invert_mask) ] args.record_measurement_result(self.key, corrected) return True return NotImplemented
def _act_on_(self, args: 'cirq.ActOnArgs', qubits: Sequence['cirq.Qid']): from cirq import sim, ops if isinstance(args, sim.ActOnStabilizerCHFormArgs): axe = args.qubit_map[qubits[0]] if args.state._measure(axe, args.prng): ops.X._act_on_(args, qubits) return True if isinstance(args, sim.ActOnStateVectorArgs): # Do a silent measurement. axes = args.get_axes(qubits) measurements, _ = sim.measure_state_vector( args.target_tensor, axes, out=args.target_tensor, qid_shape=args.target_tensor.shape, ) result = measurements[0] # Use measurement result to zero the qid. if result: zero = args.subspace_index(axes, 0) other = args.subspace_index(axes, result) args.target_tensor[zero] = args.target_tensor[other] args.target_tensor[other] = 0 return True return NotImplemented
def _perform_measurement(self, qubits: Sequence['cirq.Qid']) -> List[int]: """Delegates the call to measure the state vector.""" bits, _ = sim.measure_state_vector( self.target_tensor, self.get_axes(qubits), out=self.target_tensor, qid_shape=self.target_tensor.shape, seed=self.prng, ) return bits
def _perform_measurement(self) -> List[int]: """Delegates the call to measure the state vector.""" bits, _ = sim.measure_state_vector( self.target_tensor, self.axes, out=self.target_tensor, qid_shape=self.target_tensor.shape, seed=self.prng, ) return bits
def measure( self, axes: Sequence[int], seed: 'cirq.RANDOM_STATE_OR_SEED_LIKE' = None ) -> List[int]: """Measures the state vector. Args: axes: The axes to measure. seed: The random number seed to use. Returns: The measurements in order. """ bits, _ = sim.measure_state_vector( self._state_vector, axes, out=self._state_vector, qid_shape=self._qid_shape, seed=seed ) return bits