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)
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]])))
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)
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)
def test_get_quadratic_hamiltonian_bad_input(self): """Test improper input.""" with self.assertRaises(TypeError): get_quadratic_hamiltonian('3')
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)