示例#1
0
 def test_get_quadratic_hamiltonian_not_hermitian(self):
     """Test non-Hermitian operators."""
     with self.assertRaises(QuadraticHamiltonianError):
         get_quadratic_hamiltonian(self.not_hermitian_1)
     with self.assertRaises(QuadraticHamiltonianError):
         get_quadratic_hamiltonian(self.not_hermitian_2)
     with self.assertRaises(QuadraticHamiltonianError):
         get_quadratic_hamiltonian(self.not_hermitian_3)
     with self.assertRaises(QuadraticHamiltonianError):
         get_quadratic_hamiltonian(self.not_hermitian_4)
     with self.assertRaises(QuadraticHamiltonianError):
         get_quadratic_hamiltonian(self.not_hermitian_5)
示例#2
0
    def test_ignore_incompatible_terms(self):

        ferm_op = (FermionOperator('0^ 2') + FermionOperator('2^ 0') +
                   FermionOperator('1^ 0^ 2') + FermionOperator('1^ 0^ 2 1') +
                   FermionOperator('0^ 0 1^ 1') + FermionOperator('1^ 2^ 1 2'))
        converted_op = get_quadratic_hamiltonian(
            ferm_op, ignore_incompatible_terms=True)
        self.assertTrue(
            numpy.allclose(converted_op.hermitian_part,
                           numpy.array([[0, 0, 1], [0, 0, 0], [1, 0, 0]])))
示例#3
0
    def test_get_quadratic_hamiltonian_hermitian(self):
        """Test properly formed quadratic Hamiltonians."""
        # Non-particle-number-conserving without chemical potential
        quadratic_op = get_quadratic_hamiltonian(self.hermitian_op)
        fermion_operator = get_fermion_operator(quadratic_op)
        fermion_operator = normal_ordered(fermion_operator)
        self.assertTrue(normal_ordered(self.hermitian_op) == fermion_operator)

        # Non-particle-number-conserving chemical potential
        quadratic_op = get_quadratic_hamiltonian(self.hermitian_op,
                                                 chemical_potential=3.)
        fermion_operator = get_fermion_operator(quadratic_op)
        fermion_operator = normal_ordered(fermion_operator)
        self.assertTrue(normal_ordered(self.hermitian_op) == fermion_operator)

        # Particle-number-conserving
        quadratic_op = get_quadratic_hamiltonian(self.hermitian_op_pc)
        fermion_operator = get_fermion_operator(quadratic_op)
        fermion_operator = normal_ordered(fermion_operator)
        self.assertTrue(
            normal_ordered(self.hermitian_op_pc) == fermion_operator)
示例#4
0
 def test_get_quadratic_hamiltonian_too_few_qubits(self):
     """Test asking for too few qubits."""
     with self.assertRaises(ValueError):
         get_quadratic_hamiltonian(FermionOperator('3^ 2^'), n_qubits=3)
示例#5
0
 def test_get_quadratic_hamiltonian_bad_input(self):
     """Test improper input."""
     with self.assertRaises(TypeError):
         get_quadratic_hamiltonian('3')
示例#6
0
 def test_get_quadratic_hamiltonian_hermitian_bad_term(self):
     """Test an operator with non-quadratic terms."""
     with self.assertRaises(QuadraticHamiltonianError):
         get_quadratic_hamiltonian(self.hermitian_op_bad_term)