Example #1
0
    def test_kron_both_unitary(self):
        """Test kronecker product of two unitary qobj errors."""
        unitaries0 = [standard_gate_unitary('z'),
                      standard_gate_unitary('s')]
        probs0 = [0.9, 0.1]
        unitaries1 = [standard_gate_unitary('x'),
                      standard_gate_unitary('y')]
        probs1 = [0.6, 0.4]
        error0 = QuantumError([np.sqrt(probs0[0]) * unitaries0[0],
                               np.sqrt(probs0[1]) * unitaries0[1]],
                              standard_gates=False)
        error1 = QuantumError([np.sqrt(probs1[0]) * unitaries1[0],
                               np.sqrt(probs1[1]) * unitaries1[1]],
                              standard_gates=False)
        error = error1.kron(error0)
        # Kronecker product unitaries
        target_unitaries = [np.kron(unitaries1[0], unitaries0[0]),
                            np.kron(unitaries1[0], unitaries0[1]),
                            np.kron(unitaries1[1], unitaries0[0]),
                            np.kron(unitaries1[1], unitaries0[1])]
        # Kronecker product probabilities
        target_probs = [probs1[0] * probs0[0], probs1[0] * probs0[1],
                        probs1[1] * probs0[0], probs1[1] * probs0[1]]

        for j in range(4):
            circ, p = error.error_term(j)
            unitary = circ[0]['params']
            self.assertEqual(circ[0]['name'], 'unitary')
            self.assertEqual(circ[0]['qubits'], [0, 1])
            # Remove prob from target if it is found
            # later we will check that target_probs is empty so all
            # the required ones have been removed
            self.remove_if_found(p, target_probs)
            self.remove_if_found(unitary, target_unitaries)
        # Check we had all the correct target probs and unitaries
        # by seeing if these lists are empty
        # Note that this doesn't actually check that the correct
        # prob was assigned to the correct unitary.
        self.assertEqual(target_probs, [], msg="Incorrect kron probabilities")
        self.assertEqual(target_unitaries, [], msg="Incorrect kron unitaries")
Example #2
0
 def test_kron_both_qobj(self):
     """Test kronecker product of two unitary gate errors"""
     unitaries0 = [standard_gate_unitary('id'),
                   standard_gate_unitary('z')]
     probs0 = [0.9, 0.1]
     unitaries1 = [standard_gate_unitary('x'),
                   standard_gate_unitary('y')]
     probs1 = [0.6, 0.4]
     error0 = QuantumError([np.sqrt(probs0[0]) * unitaries0[0],
                            np.sqrt(probs0[1]) * unitaries0[1]],
                           standard_gates=True)
     error1 = QuantumError([np.sqrt(probs1[0]) * unitaries1[0],
                            np.sqrt(probs1[1]) * unitaries1[1]],
                           standard_gates=True)
     error = error1.kron(error0)
     # Kronecker product probabilities
     target_probs = [probs1[0] * probs0[0],
                     probs1[0] * probs0[1],
                     probs1[1] * probs0[0],
                     probs1[1] * probs0[1]]
     # Target circuits
     target_circs = [[{'name': 'id', 'qubits': [0]}, {'name': 'x', 'qubits': [1]}],
                     [{'name': 'id', 'qubits': [0]}, {'name': 'y', 'qubits': [1]}],
                     [{'name': 'z', 'qubits': [0]}, {'name': 'x', 'qubits': [1]}],
                     [{'name': 'z', 'qubits': [0]}, {'name': 'y', 'qubits': [1]}]]
     for j in range(4):
         circ, p = error.error_term(j)
         # Remove prob from target if it is found
         # later we will check that target_probs is empty so all
         # the required ones have been removed
         self.remove_if_found(p, target_probs)
         self.remove_if_found(circ, target_circs)
     # Check we had all the correct target probs and unitaries
     # by seeing if these lists are empty
     # Note that this doesn't actually check that the correct
     # prob was assigned to the correct unitary.
     self.assertEqual(target_probs, [], msg="Incorrect kron probabilities")
     self.assertEqual(target_circs, [], msg="Incorrect kron circuits")