From 97f5d974421d96d7412e3639030011e49e5041a5 Mon Sep 17 00:00:00 2001 From: Wong Zi Cheng <70616433+chmwzc@users.noreply.github.com> Date: Wed, 20 Mar 2024 09:23:39 +0000 Subject: [PATCH] Clean up tests for Molecule and hamiltonian stuff --- tests/test_molecule.py | 45 +++++++++++++++--------------------------- 1 file changed, 16 insertions(+), 29 deletions(-) diff --git a/tests/test_molecule.py b/tests/test_molecule.py index 010ef6d..9563e30 100644 --- a/tests/test_molecule.py +++ b/tests/test_molecule.py @@ -12,7 +12,6 @@ from qibo.symbols import Z from qibochem.driver import Molecule -from qibochem.driver.hamiltonian import parse_pauli_string from qibochem.measurement.expectation import expectation @@ -112,18 +111,6 @@ def test_hf_embedding(): assert np.allclose(mol.embed_tei, mol.tei[:dim, :dim, :dim, :dim]) -@pytest.mark.parametrize( - "pauli_string,coeff,expected", - [ - (((0, "X"), (1, "Y")), 0.5, "0.5*X0*Y1"), - (None, 0.1, "0.1"), - ], -) -def test_parse_pauli_string(pauli_string, coeff, expected): - test = parse_pauli_string(pauli_string, coeff) - assert str(test) == expected - - def test_fermionic_hamiltonian(): # Reference result fermion_operator_list = [ @@ -261,24 +248,24 @@ def test_expectation_value(): assert h2_ref_energy == pytest.approx(hf_energy) -def test_eigenvalues(): +@pytest.mark.parametrize( + "hamiltonian,n_eigvals", + [ + (openfermion.reverse_jordan_wigner(openfermion.QubitOperator("Z0 Z1")), 2), + (openfermion.QubitOperator("Z0 Z1"), 2), + (SymbolicHamiltonian(Z(0) * Z(1)), None), + ], +) +def test_eigenvalues(hamiltonian, n_eigvals): + """Common set of eigenvalues: [-1.0, -1.0, 1.0, 1.0]""" dummy = Molecule() - # FermionOperator test: - ferm_ham = sum( - openfermion.FermionOperator(f"{_i}^ {_i}") + openfermion.FermionOperator(f"{_i} {_i}^") for _i in range(4) - ) - ham_matrix = openfermion.get_sparse_operator(ferm_ham).toarray() - assert np.allclose(dummy.eigenvalues(ferm_ham), sorted(np.linalg.eigvals(ham_matrix))[:6]) - - # QubitOperator test: - qubit_ham = openfermion.QubitOperator("Z0 Z1") - ham_matrix = openfermion.get_sparse_operator(qubit_ham).toarray() - assert np.allclose(dummy.eigenvalues(qubit_ham), sorted(np.kron(np.array([1.0, -1.0]), np.array([1.0, -1.0])))[:2]) - - # SymbolicHamiltonian test: - sym_ham = SymbolicHamiltonian(Z(0) * Z(1)) - assert np.allclose(dummy.eigenvalues(sym_ham), sorted(np.kron(np.array([1.0, -1.0]), np.array([1.0, -1.0])))) + result = dummy.eigenvalues(hamiltonian) + # Expected: sorted(np.kron(np.array([1.0, -1.0]), np.array([1.0, -1.0]))) + assert np.allclose(result, np.array([-1.0, -1.0, 1.0, 1.0])[:n_eigvals]) + +def test_eigenvalues_error(): + dummy = Molecule() # Unknown Hamiltonian type with pytest.raises(TypeError): dummy.eigenvalues(0.0)