def test_tensor_with_different_type_of_operator(self): """Test tensor with Kraus operator.""" noise_x = QuantumError([((IGate(), [0]), 0.9), ((XGate(), [0]), 0.1)]) meas_kraus = Kraus([np.diag([1, 0]), np.diag([0, 1])]) actual = noise_x.tensor(meas_kraus) expected = QuantumError([([(IGate(), [1]), (meas_kraus.to_instruction(), [0])], 0.9), ([(XGate(), [1]), (meas_kraus.to_instruction(), [0])], 0.1)]) self.assertEqual(actual, expected)
def test_tensor(self): """Test tensor two quantum errors.""" noise_x = QuantumError([((IGate(), [0]), 0.9), ((XGate(), [0]), 0.1)]) noise_y = QuantumError([((IGate(), [0]), 0.8), ((YGate(), [0]), 0.2)]) actual = noise_x.tensor(noise_y) expected = QuantumError([([(IGate(), [1]), (IGate(), [0])], 0.9 * 0.8), ([(IGate(), [1]), (YGate(), [0])], 0.9 * 0.2), ([(XGate(), [1]), (IGate(), [0])], 0.1 * 0.8), ([(XGate(), [1]), (YGate(), [0])], 0.1 * 0.2)]) self.assertEqual(actual, expected)
def test_tensor_both_unitary_standard_gates(self): """Test tensor of two unitary standard gate errors""" unitaries0 = self.mixed_unitary_error([0.9, 0.1], ['z', 's']) unitaries1 = self.mixed_unitary_error([0.6, 0.4], ['x', 'y']) error0 = QuantumError(unitaries0, standard_gates=True) error1 = QuantumError(unitaries1, standard_gates=True) error = error0.tensor(error1) target = SuperOp(Kraus(unitaries0)).tensor(Kraus(unitaries1)) for j in range(4): circ, _ = error.error_term(j) self.assertEqual(len(circ), 2) for instr in circ: self.assertIn(instr['name'], ['s', 'x', 'y', 'z']) self.assertIn(instr['qubits'], [[0], [1]]) self.assertEqual(SuperOp(error), target)
def test_tensor_both_unitary_instruction(self): """Test tensor of two unitary instruction errors.""" unitaries0 = self.mixed_unitary_error([0.9, 0.1], ['z', 's']) unitaries1 = self.mixed_unitary_error([0.6, 0.4], ['x', 'y']) error0 = QuantumError(unitaries0, standard_gates=False) error1 = QuantumError(unitaries1, standard_gates=False) error = error0.tensor(error1) target = SuperOp(Kraus(unitaries0)).tensor(Kraus(unitaries1)) for j in range(4): circ, _ = error.error_term(j) self.assertEqual(len(circ), 1) self.assertEqual(circ[0]['name'], 'unitary') self.assertEqual(circ[0]['qubits'], [0, 1]) self.assertEqual(SuperOp(error), target)