示例#1
0
    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
示例#2
0
    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
示例#3
0
    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
示例#4
0
 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
示例#5
0
 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