예제 #1
0
 def test_jordan_wigner(self):
     hamiltonian, gs_energy = lih_hamiltonian()
     code = jordan_wigner_code(4)
     qubit_hamiltonian = binary_code_transform(hamiltonian, code)
     self.assertAlmostEqual(gs_energy, eigenspectrum(qubit_hamiltonian)[0])
     self.assertDictEqual(qubit_hamiltonian.terms,
                          jordan_wigner(hamiltonian).terms)
예제 #2
0
    def test_weight_one_binary_addressing_code(self):
        hamiltonian, gs_energy = lih_hamiltonian()
        code = interleaved_code(8) * (2 * weight_one_binary_addressing_code(2))
        qubit_hamiltonian = binary_code_transform(hamiltonian, code)
        self.assertAlmostEqual(gs_energy, eigenspectrum(qubit_hamiltonian)[0])

        with self.assertRaises(ValueError):
            _ = interleaved_code(9)
예제 #3
0
 def test_bravyi_kitaev(self):
     hamiltonian, gs_energy = lih_hamiltonian()
     code = bravyi_kitaev_code(4)
     qubit_hamiltonian = binary_code_transform(hamiltonian, code)
     self.assertAlmostEqual(gs_energy, eigenspectrum(qubit_hamiltonian)[0])
     qubit_spectrum = eigenspectrum(qubit_hamiltonian)
     fenwick_spectrum = eigenspectrum(bravyi_kitaev(hamiltonian))
     for eigen_idx, eigenvalue in enumerate(qubit_spectrum):
         self.assertAlmostEqual(eigenvalue, fenwick_spectrum[eigen_idx])
예제 #4
0
    def test_tranform_function(self):
        ferm_op = FermionOperator('2')
        n_modes = 5
        qubit_op = binary_code_transform(ferm_op, parity_code(n_modes))
        correct_op = QubitOperator(((1, 'Z'), (2, 'X'), (3, 'X'), (4, 'X')),
                                   0.5) + \
                     QubitOperator(((2, 'Y'), (3, 'X'), (4, 'X')), 0.5j)
        self.assertTrue(qubit_op == correct_op)
        ferm_op = FermionOperator('2^')
        n_modes = 5
        qubit_op = binary_code_transform(ferm_op, parity_code(n_modes))
        correct_op = QubitOperator(((1, 'Z'), (2, 'X'), (3, 'X'), (4, 'X')),
                                   0.5) \
                     + QubitOperator(((2, 'Y'), (3, 'X'), (4, 'X')), -0.5j)
        self.assertTrue(qubit_op == correct_op)

        ferm_op = FermionOperator('5^')
        op2 = QubitOperator('Z0 Z1 Z2 Z3 Z4 X5', 0.5) \
              - QubitOperator('Z0 Z1 Z2 Z3 Z4 Y5', 0.5j)
        op1 = binary_code_transform(ferm_op, jordan_wigner_code(6))
        self.assertTrue(op1 == op2)
예제 #5
0
 def test_parity_code(self):
     hamiltonian, gs_energy = lih_hamiltonian()
     code = parity_code(4)
     qubit_hamiltonian = binary_code_transform(hamiltonian, code)
     self.assertAlmostEqual(gs_energy, eigenspectrum(qubit_hamiltonian)[0])
예제 #6
0
 def test_weight_two_segment_code(self):
     hamiltonian, gs_energy = lih_hamiltonian()
     code = weight_two_segment_code()
     qubit_hamiltonian = binary_code_transform(hamiltonian, code)
     self.assertAlmostEqual(gs_energy, eigenspectrum(qubit_hamiltonian)[0])
예제 #7
0
 def test_weight_one_segment_code(self):
     hamiltonian, gs_energy = lih_hamiltonian()
     code = interleaved_code(6) * (2 * weight_one_segment_code())
     qubit_hamiltonian = binary_code_transform(hamiltonian, code)
     self.assertAlmostEqual(gs_energy, eigenspectrum(qubit_hamiltonian)[0])