def test_get_norder_paulis_2 ( self ):
        num_qubits = 2
        paulis = get_norder_paulis( num_qubits )
        self.assertTrue( len( paulis ) == 4 ** num_qubits )

        X = np.array( [[0, 1], [1, 0]], dtype = np.complex128 )
        Y = np.array( [[0, -1j], [1j, 0]], dtype = np.complex128 )
        Z = np.array( [[1, 0], [0, -1]], dtype = np.complex128 )
        I = np.array( [[1, 0], [0, 1]], dtype = np.complex128 )

        self.assertTrue( self.in_array( np.kron( X, X ), paulis ) )
        self.assertTrue( self.in_array( np.kron( X, Y ), paulis ) )
        self.assertTrue( self.in_array( np.kron( X, Z ), paulis ) )
        self.assertTrue( self.in_array( np.kron( X, I ), paulis ) )
        self.assertTrue( self.in_array( np.kron( Y, X ), paulis ) )
        self.assertTrue( self.in_array( np.kron( Y, Y ), paulis ) )
        self.assertTrue( self.in_array( np.kron( Y, Z ), paulis ) )
        self.assertTrue( self.in_array( np.kron( Y, I ), paulis ) )
        self.assertTrue( self.in_array( np.kron( Z, X ), paulis ) )
        self.assertTrue( self.in_array( np.kron( Z, Y ), paulis ) )
        self.assertTrue( self.in_array( np.kron( Z, Z ), paulis ) )
        self.assertTrue( self.in_array( np.kron( Z, I ), paulis ) )
        self.assertTrue( self.in_array( np.kron( I, X ), paulis ) )
        self.assertTrue( self.in_array( np.kron( I, Y ), paulis ) )
        self.assertTrue( self.in_array( np.kron( I, Z ), paulis ) )
        self.assertTrue( self.in_array( np.kron( I, I ), paulis ) )
예제 #2
0
    def test_pauli_expansion_valid_4(self):
        sigma = get_norder_paulis(4)

        for H in sigma:
            alpha = pauli_expansion(H)
            reH = np.sum([a * p for a, p in zip(alpha, sigma)], 0)
            self.assertTrue(hilbert_schmidt_distance(H, reH) <= 1e-16)
    def test_get_norder_paulis_0 ( self ):
        num_qubits = 0
        paulis = get_norder_paulis( num_qubits )
        self.assertTrue( len( paulis ) == 4 ** num_qubits )

        I = np.array( [[1, 0], [0, 1]], dtype = np.complex128 )

        self.assertTrue( self.in_array( I, paulis ) )
예제 #4
0
    def test_pauli_expansion_valid_comb(self):
        sigma = get_norder_paulis(4)
        sqrt2 = np.sqrt(2) / 2

        for H1, H2 in zip(sigma, sigma[1:]):
            H = sqrt2 * H1 + sqrt2 * H2
            alpha = pauli_expansion(H)
            reH = np.sum([a * p for a, p in zip(alpha, sigma)], 0)
            self.assertTrue(hilbert_schmidt_distance(H, reH) <= 1e-16)
예제 #5
0
 def test_pauli_dot_product_1(self):
     alpha = [1, 0, 0, 0]
     sigma = get_norder_paulis(1)
     self.assertTrue(np.allclose(pauli_dot_product(alpha, sigma), I))
     alpha = [0, 1, 0, 0]
     self.assertTrue(np.allclose(pauli_dot_product(alpha, sigma), X))
     alpha = [0, 0, 1, 0]
     self.assertTrue(np.allclose(pauli_dot_product(alpha, sigma), Y))
     alpha = [0, 0, 0, 1]
     self.assertTrue(np.allclose(pauli_dot_product(alpha, sigma), Z))
    def test_get_unitary_from_pauli_coefs_1 ( self ):
        sigma = get_norder_paulis( 1 )

        for U in sigma:
            pauli_coefs = pauli_expansion( unitary_log_no_i( U ) )
            reU = get_unitary_from_pauli_coefs( pauli_coefs )
            self.assertTrue( hilbert_schmidt_distance( U, reU ) <= 1e-16 )
            self.assertTrue( np.allclose( U.conj().T @ U, np.identity( len( U ) ),
                                          rtol = 0, atol = 1e-16 )
                             and
                             np.allclose( U @ U.conj().T, np.identity( len( U ) ),
                                          rtol = 0, atol = 1e-16 ) )
예제 #7
0
    def test_unitary_log_no_i_eig_valid_4(self):
        sigma = get_norder_paulis(4)

        for U in sigma:
            H = unitary_log_no_i_eig(U)
            self.assertTrue(np.allclose(H, H.conj().T, rtol=0, atol=1e-15))
            reU = la.expm(1j * H)
            self.assertTrue(hilbert_schmidt_distance(U, reU) <= 1e-16)
            self.assertTrue(
                np.allclose(
                    U.conj().T @ U, np.identity(len(U)), rtol=0, atol=1e-16)
                and np.allclose(
                    U @ U.conj().T, np.identity(len(U)), rtol=0, atol=1e-16))
예제 #8
0
 def test_pauli_dot_product_2(self):
     alpha = [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
     sigma = get_norder_paulis(2)
     self.assertTrue(
         np.allclose(pauli_dot_product(alpha, sigma), np.kron(I, I)))
     alpha = [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
     self.assertTrue(
         np.allclose(pauli_dot_product(alpha, sigma), np.kron(I, X)))
     alpha = [0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
     self.assertTrue(
         np.allclose(pauli_dot_product(alpha, sigma), np.kron(I, Y)))
     alpha = [0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
     self.assertTrue(
         np.allclose(pauli_dot_product(alpha, sigma), np.kron(I, Z)))
     alpha = [0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
     self.assertTrue(
         np.allclose(pauli_dot_product(alpha, sigma), np.kron(X, I)))
     alpha = [0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
     self.assertTrue(
         np.allclose(pauli_dot_product(alpha, sigma), np.kron(X, X)))
     alpha = [0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0]
     self.assertTrue(
         np.allclose(pauli_dot_product(alpha, sigma), np.kron(X, Y)))
     alpha = [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0]
     self.assertTrue(
         np.allclose(pauli_dot_product(alpha, sigma), np.kron(X, Z)))
     alpha = [0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0]
     self.assertTrue(
         np.allclose(pauli_dot_product(alpha, sigma), np.kron(Y, I)))
     alpha = [0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0]
     self.assertTrue(
         np.allclose(pauli_dot_product(alpha, sigma), np.kron(Y, X)))
     alpha = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0]
     self.assertTrue(
         np.allclose(pauli_dot_product(alpha, sigma), np.kron(Y, Y)))
     alpha = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0]
     self.assertTrue(
         np.allclose(pauli_dot_product(alpha, sigma), np.kron(Y, Z)))
     alpha = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0]
     self.assertTrue(
         np.allclose(pauli_dot_product(alpha, sigma), np.kron(Z, I)))
     alpha = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0]
     self.assertTrue(
         np.allclose(pauli_dot_product(alpha, sigma), np.kron(Z, X)))
     alpha = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0]
     self.assertTrue(
         np.allclose(pauli_dot_product(alpha, sigma), np.kron(Z, Y)))
     alpha = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1]
     self.assertTrue(
         np.allclose(pauli_dot_product(alpha, sigma), np.kron(Z, Z)))
    def test_get_norder_paulis_1 ( self ):
        num_qubits = 1
        paulis = get_norder_paulis( num_qubits )
        self.assertTrue( len( paulis ) == 4 ** num_qubits )

        X = np.array( [[0, 1], [1, 0]], dtype = np.complex128 )
        Y = np.array( [[0, -1j], [1j, 0]], dtype = np.complex128 )
        Z = np.array( [[1, 0], [0, -1]], dtype = np.complex128 )
        I = np.array( [[1, 0], [0, 1]], dtype = np.complex128 )

        self.assertTrue( self.in_array( X, paulis ) )
        self.assertTrue( self.in_array( Y, paulis ) )
        self.assertTrue( self.in_array( Z, paulis ) )
        self.assertTrue( self.in_array( I, paulis ) )
    def test_unitary_log_no_i_valid_comp(self):
        sigma = get_norder_paulis(4)

        for U1, U2 in zip(sigma, sigma[1:]):
            U = U1 @ U2
            H = unitary_log_no_i(U)
            self.assertTrue(np.allclose(H, H.conj().T, rtol=0, atol=1e-15))
            reU = la.expm(1j * H)
            self.assertTrue(hilbert_schmidt_distance(U, reU) <= 1e-16)
            self.assertTrue(
                np.allclose(
                    U.conj().T @ U, np.identity(len(U)), rtol=0, atol=1e-16)
                and np.allclose(
                    U @ U.conj().T, np.identity(len(U)), rtol=0, atol=1e-16))
예제 #11
0
 def test_pauli_dot_product_invalid(self):
     alpha = [1, 2, 3, 4, 5]
     sigma = get_norder_paulis(1)
     self.assertRaises(ValueError, pauli_dot_product, alpha, sigma)