Пример #1
0
def test_moment_is_measurements():
    q = cirq.LineQubit.range(2)
    circ = cirq.Circuit(
        [cirq.X(q[0]), cirq.X(q[1]),
         cirq.measure(*q, key='z')])
    assert not validate_all_measurements(circ[0])
    assert validate_all_measurements(circ[1])
Пример #2
0
def test_moment_is_measurements_mixed2():
    q = cirq.LineQubit.range(2)
    circ = cirq.Circuit([
        cirq.X(q[0]),
        cirq.X(q[1]),
        cirq.Z(q[0]),
        cirq.measure(q[1], key='z'),
    ])
    assert not validate_all_measurements(circ[0])
    with pytest.raises(ValueError) as e:
        validate_all_measurements(circ[1])
    assert e.match(".*must be homogeneous: all measurements.*")
Пример #3
0
 def noisy_moment(self, moment: cirq.Moment,
                  system_qubits: Sequence[cirq.Qid]) -> cirq.OP_TREE:
     if self.is_virtual_moment(moment):
         return moment
     moments = []
     if validate_all_measurements(moment):
         if self.decay_probs:
             moments.append(
                 cirq.Moment(
                     cirq.AmplitudeDampingChannel(self.decay_probs[q])(q)
                     for q in system_qubits))
         if self.bitflip_probs:
             moments.append(
                 cirq.Moment(
                     cirq.BitFlipChannel(self.bitflip_probs[q])(q)
                     for q in system_qubits))
         moments.append(moment)
         return moments
     else:
         moments.append(moment)
         if self.depol_probs:
             gated_qubits = [
                 q for q in system_qubits
                 if moment.operates_on_single_qubit(q)
             ]
             if gated_qubits:
                 moments.append(
                     cirq.Moment(
                         cirq.DepolarizingChannel(self.depol_probs[q])(q)
                         for q in gated_qubits))
         return moments
Пример #4
0
 def noisy_moment(self, moment: 'cirq.Moment',
                  system_qubits: Sequence['cirq.Qid']):
     if validate_all_measurements(moment):
         return [
             ops.Moment(self.readout_noise_gate(q) for q in system_qubits),
             moment,
         ]
     return [
         moment,
         ops.Moment(self.qubit_noise_gate(q) for q in system_qubits),
     ]
Пример #5
0
 def noisy_moment(self, moment: 'cirq.Moment',
                  system_qubits: Sequence['cirq.Qid']):
     if self.is_virtual_moment(moment):
         return moment
     if validate_all_measurements(moment):
         return [
             ops.Moment(
                 self.readout_noise_gate(q).with_tags(ops.VirtualTag())
                 for q in system_qubits),
             moment,
         ]
     return moment
Пример #6
0
    def noisy_moment(self, moment: 'cirq.Moment',
                     system_qubits: Sequence['cirq.Qid']):
        if validate_all_measurements(moment) or self.is_virtual_moment(moment):
            # coverage: ignore
            return moment

        return [
            moment,
            ops.Moment(
                self.qubit_noise_gate(q).with_tags(ops.VirtualTag())
                for q in system_qubits),
        ]
Пример #7
0
    def noisy_moment(self, moment: 'cirq.Moment',
                     system_qubits: Sequence['cirq.Qid']):
        if validate_all_measurements(moment) or self.is_virtual_moment(moment):
            # coverage: ignore
            return moment

        output = [
            moment,
            circuits.Moment(
                self.qubit_noise_gate(q).with_tags(ops.VirtualTag())
                for q in system_qubits),
        ]
        return output[::-1] if self._prepend else output
Пример #8
0
 def noisy_moment(self, moment: 'cirq.Moment',
                  system_qubits: Sequence['cirq.Qid']):
     if self.is_virtual_moment(moment):
         return moment
     if validate_all_measurements(moment):
         output = [
             circuits.Moment(
                 self.readout_decay_gate(q).with_tags(ops.VirtualTag())
                 for q in system_qubits),
             moment,
         ]
         return output if self._prepend else output[::-1]
     return moment