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])
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.*")
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
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), ]
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
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), ]
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
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