Express

The express module contains a database of pre-computed, example data sets (see below) generated with classical compute methods as well as helpful methods and model hamiltonians for use in testing and benchmarking.

Express methods

Each example data set is stored in a structured .h5 file which can be loaded as a Python namedtuple collection as follows:

from inquanto.express import load_h5, list_h5
print("Available express files:\n", list_h5())

h2_sto3g_data = load_h5("h2_sto3g.h5", as_tuple=True)
hamiltonian = h2_sto3g_data.hamiltonian_operator

print("\nFile description:\n", h2_sto3g_data.description)
print("\nHamiltonian operator:\n", hamiltonian.to_FermionOperator())
print("\nH2 STO-3G CCSD Energy:\n" + str(h2_sto3g_data.energy_ccsd) +' Ha')
Available express files:
 ['beh2_purvis_A_purvis_symmetry.h5', 'h2_1_ring_sto3g.h5', 'beh2_sto3g_symmetry.h5', 'h2o_sto3g_symmetry.h5', 'beh2_purvis_A_purvis_cas44_symmetry.h5', 'h2_4_ring_sto3g.h5', 'h2_4_pbc_sto3g.h5', 'lih_631g.h5', 'h2_sto3g.h5', 'h2_3_ring_sto3g.h5', 'h4_square_sto3g_m3.h5', 'h2_1_pbc_sto3g.h5', 'h3_chain_sto3g.h5', 'nh3_sto3g_symmetry.h5', 'h2_2_ring_sto3g.h5', 'h2_2_pbc_sto3g.h5', 'h2_1_pbc_631g.h5', 'lih_sto3g.h5', 'hehp_sto3g_symmetry.h5', 'h3p_chain_sto3g.h5', 'heh_sto3g_u.h5', 'ch2_sto3g_m3.h5', 'ch4_sto3g.h5', 'ch4_sto3g_symmetry.h5', 'h3p_sto3g_c2v.h5', 'h2_1_ring_631g.h5', 'h2_2_pbc_631g.h5', 'h2_3_pbc_sto3g.h5', 'h2_5_pbc_sto3g.h5', 'h2_5_ring_sto3g.h5', 'nh3_sto3g.h5', 'h2_sto3g_symmetry.h5', 'h5_sto3g_m2.h5', 'h3_sto3g_m2.h5', 'h2_2_ring_631g.h5', 'beh2_purvis_E_purvis_cas44_symmetry.h5', 'h2_631g_symmetry.h5', 'h2o_sto3g.h5', 'ch2_sto3g_m3_u.h5', 'beh2_purvis_E_purvis_cas22_symmetry.h5', 'h2_sto3g_long.h5', 'beh2_purvis_E_purvis_symmetry.h5', 'beh2_purvis_A_purvis_cas22_symmetry.h5', 'h2_631g.h5', 'hehp_sto3g.h5', 'beh2_sto3g.h5', 'h5_sto3g_m2_u.h5', 'h3_sto3g_m2_u.h5', 'lih_sto3g_symmetry.h5']

File description:
 H2 molecule with bond length 0.7122Å, calculated with the sto3g basis set in a spin-restricted formalism.

Hamiltonian operator:
 (0.7430177069924179, ), (-1.270292724390438, F0^ F0 ), (-0.45680735030941033, F2^ F2 ), (-1.270292724390438, F1^ F1 ), (-0.45680735030941033, F3^ F3 ), (0.48890859745047327, F2^ F0^ F0  F2 ), (0.48890859745047327, F3^ F1^ F1  F3 ), (0.6800618575841273, F1^ F0^ F0  F1 ), (0.6685772770134888, F2^ F1^ F1  F2 ), (0.1796686795630157, F1^ F0^ F2  F3 ), (-0.17966867956301558, F2^ F1^ F0  F3 ), (-0.17966867956301558, F3^ F0^ F1  F2 ), (0.1796686795630155, F3^ F2^ F0  F1 ), (0.6685772770134888, F3^ F0^ F0  F3 ), (0.7028135332762804, F3^ F2^ F2  F3 )

H2 STO-3G CCSD Energy:
-1.1368465754747636 Ha

A list of the available data sets is given below, or can be queried with the list_h5() function.

In addition to the data sets listed below, the express module contains additional tools for easily running simple calculations. The run_rhf() and run_rohf() functions allow for quick SCF calculations providing basic data:

from inquanto.express import run_rhf
e_total, mo_energy, mo_coeff, rdm1 = run_rhf(h2_sto3g_data.hamiltonian_operator, h2_sto3g_data.n_electron)
print("Hartree-Fock energy: {}".format(e_total))
Hartree-Fock energy: -1.117505884204331

Similarly, the run_vqe() function performs a simple, state-vector VQE calculation, as shown in the quick-start guide:

from inquanto.express import run_vqe
from inquanto.states import FermionState
from inquanto.spaces import FermionSpace
from inquanto.ansatzes import FermionSpaceAnsatzUCCSD
from pytket.extensions.qiskit import AerStateBackend

backend = AerStateBackend()
state = FermionState([1, 1, 0, 0])
space = FermionSpace(4)
ansatz = FermionSpaceAnsatzUCCSD(fermion_space=space, fermion_state=state)
qubit_hamiltonian = hamiltonian.qubit_encode()
vqe = run_vqe(ansatz, qubit_hamiltonian, backend)
print("VQE Energy: ", round(vqe.final_value, 8))
# TIMER BLOCK-0 BEGINS AT 2024-10-30 18:17:24.318053
# TIMER BLOCK-0 ENDS - DURATION (s):  0.3276104 [0:00:00.327610]
VQE Energy:  -1.13684658

When preparing to process circuits on noisy quantum hardware it can be useful to first employ simple noise models in simulations. The get_noisy_backend() function returns a shot-based AerBackend simulator class which includes only CNOT depolarizing errors and readout error.

from inquanto.express import get_noisy_backend

noisy_aer = get_noisy_backend(n_qubits=4, cx_err=0.01, ro_err=0.001)
type(noisy_aer)
pytket.extensions.qiskit.backends.aer.AerBackend

This can be used as a direct replacement when AerBackend is used in examples and tutorials to study the effect of noise.

Model hamiltonians

Finally, the express module also contains drivers for generating simple Hubbard Hamiltonians, such as the dimer:

from inquanto.express import DriverHubbardDimer

hubbard_dimer_driver = DriverHubbardDimer(t=0.2, u=2.0)

dimer_ham, dimer_space, dimer_hf_state = hubbard_dimer_driver.get_system()

print('Dimer Hamiltonian:\n', dimer_ham.normal_ordered().compress())
Dimer Hamiltonian:
 (-0.2, F2^ F0 ), (-0.2, F0^ F2 ), (-0.2, F3^ F1 ), (-0.2, F1^ F3 ), (-2.0, F1^ F0^ F1  F0 ), (-2.0, F3^ F2^ F3  F2 )

As well as the Hamiltonians for chain (finite number of sites with end sites not connected) and ring (finite number of sites with end sites connected) topologies:

from inquanto.express import DriverGeneralizedHubbard

hubbard_ring_driver = DriverGeneralizedHubbard(t=-0.2, u=2.0, n=3, ring=True)
hubbard_chain_driver = DriverGeneralizedHubbard(t=-0.2, u=2.0, n=3, ring=False)

ring_ham, ring_space, ring_hf_state = hubbard_ring_driver.get_system()
chain_ham, chain_space, chain_hf_state = hubbard_chain_driver.get_system()

print('\nRing Hamiltonian:\n', ring_ham.normal_ordered().compress())
print('\nChain Hamiltonian:\n', chain_ham.normal_ordered().compress())

Ring Hamiltonian:
 (-0.2, F0^ F2 ), (-0.2, F0^ F4 ), (-0.2, F2^ F0 ), (-0.2, F2^ F4 ), (-0.2, F4^ F0 ), (-0.2, F4^ F2 ), (-0.2, F1^ F3 ), (-0.2, F1^ F5 ), (-0.2, F3^ F1 ), (-0.2, F3^ F5 ), (-0.2, F5^ F1 ), (-0.2, F5^ F3 ), (-2.0, F1^ F0^ F1  F0 ), (-2.0, F3^ F2^ F3  F2 ), (-2.0, F5^ F4^ F5  F4 )

Chain Hamiltonian:
 (-0.2, F0^ F2 ), (-0.2, F2^ F0 ), (-0.2, F2^ F4 ), (-0.2, F4^ F2 ), (-0.2, F1^ F3 ), (-0.2, F3^ F1 ), (-0.2, F3^ F5 ), (-0.2, F5^ F3 ), (-2.0, F1^ F0^ F1  F0 ), (-2.0, F3^ F2^ F3  F2 ), (-2.0, F5^ F4^ F5  F4 )

Note the minus sign for the t argument for DriverGeneralizedHubbard (whereas for DriverHubbardDimer t is negated when the Hamiltonian is constructed). This reflects the different conventions used in the literature; in some conventions t is kept negative, while in general the sign can be absorbed into the coefficients. Hence for a more “general” approach, the sign of the user-provided t is not changed in DriverGeneralizedHubbard. To generate the same Hubbard dimer Hamiltonian as above with DriverGeneralizedHubbard, use:

from inquanto.express import DriverGeneralizedHubbard

hubbard_dimer_driver = DriverGeneralizedHubbard(t=-0.2, u=2.0, n=2, ring=False)

dimer_ham, dimer_space, dimer_hf_state = hubbard_dimer_driver.get_system()

print('Dimer Hamiltonian:\n', dimer_ham.normal_ordered().compress())
Dimer Hamiltonian:
 (-0.2, F0^ F2 ), (-0.2, F2^ F0 ), (-0.2, F1^ F3 ), (-0.2, F3^ F1 ), (-2.0, F1^ F0^ F1  F0 ), (-2.0, F3^ F2^ F3  F2 )

List of Express files

The full list of chemical data sets included in the express module are given below. Files are labelled by the system atoms and structure. Charges are indicated by p for + and n for - appended to the atom list, and basis sets are labelled (e.g. sto3g). A spin multiplicity greater than 1 is labelled as m#, where 2 labels a doublet state. Lastly, u indicates the unrestricted Hartree-Fock formalism, and no such label always implies restricted Hartree-Fock.

File name

Description

beh2_purvis_A_purvis_cas22_symmetry.h5

BeH2 molecule geometry A from G. D. Purvis III, R.

Shepard, F. B. Brown and R. J. Bartlett, Int. J.

Quantum Chem., 1983, 23, 835–845.

beh2_purvis_A_purvis_cas44_symmetry.h5

BeH2 molecule geometry A from G. D. Purvis III, R.

Shepard, F. B. Brown and R. J. Bartlett, Int. J.

Quantum Chem., 1983, 23, 835–845.

beh2_purvis_A_purvis_symmetry.h5

BeH2 molecule geometry A from G. D. Purvis III, R.

Shepard, F. B. Brown and R. J. Bartlett, Int. J.

Quantum Chem., 1983, 23, 835–845.

beh2_purvis_E_purvis_cas22_symmetry.h5

BeH2 molecule geometry E from G. D. Purvis III, R.

Shepard, F. B. Brown and R. J. Bartlett, Int. J.

Quantum Chem., 1983, 23, 835–845.

beh2_purvis_E_purvis_cas44_symmetry.h5

BeH2 molecule geometry E from G. D. Purvis III, R.

Shepard, F. B. Brown and R. J. Bartlett, Int. J.

Quantum Chem., 1983, 23, 835–845.

beh2_purvis_E_purvis_symmetry.h5

BeH2 molecule geometry E from G. D. Purvis III, R.

Shepard, F. B. Brown and R. J. Bartlett, Int. J.

Quantum Chem., 1983, 23, 835–845.

beh2_sto3g.h5

BeH2 molecule, calculated with the sto3g basis

set, with a spin-restricted formalism.

beh2_sto3g_symmetry.h5

BeH2 molecule, calculated with point group

symmetries in the sto3g basis, with a

spin-restricted formalism.

ch2_sto3g_m3.h5

CH2 molecule with spin multiplicity 3. Calculated

with the sto3g basis set in a spin-restricted

formalism.

ch2_sto3g_m3_u.h5

CH2 molecule with spin multiplicity 3. Calculated

with the sto3g basis set in a spin-unrestricted

formalism.

ch4_sto3g.h5

CH4 molecule, calculated with the sto3g basis set

in a spin-restricted formalism.

ch4_sto3g_symmetry.h5

CH4 molecule, calculated with point group

symmetries in the sto3g basis, with a

spin-restricted formalism.

h2_1_pbc_631g.h5

H2 molecule in a tetragonal unit cell with

periodic boundary conditions. Calculated with the

631g basis set in a spin-restricted formalism.

h2_1_pbc_sto3g.h5

H2 molecule in a tetragonal unit cell with

periodic boundary conditions. Calculated with the

sto3g basis set in a spin-restricted formalism.

h2_1_ring_631g.h5

A single H2 molecule, calculated with the 631g

basis in a spin-restricted formalism.

h2_1_ring_sto3g.h5

A single H2 molecule, calculated with the sto3g

basis in a spin-restricted formalism.

h2_2_pbc_631g.h5

2x1x1 supercell of the periodic H2 system in

h2_1_pbc_631g.h5.

h2_2_pbc_sto3g.h5

2x1x1 supercell of the periodic H2 system in

h2_1_pbc_sto3g.h5.

h2_2_ring_631g.h5

2 H2 molecules in a ring geometry, calculated with

the 631g basis in a spin-restricted formalism.

h2_2_ring_sto3g.h5

2 H2 molecules in a ring geometry, calculated with

the sto3g basis in a spin-restricted formalism.

h2_3_pbc_sto3g.h5

3x1x1 supercell of the periodic H2 system in

h2_1_pbc_sto3g.h5.

h2_3_ring_sto3g.h5

3 H2 molecules in a ring geometry, calculated with

the sto3g basis in a spin-restricted formalism.

h2_4_pbc_sto3g.h5

4x1x1 supercell of the periodic H2 system in

h2_1_pbc_sto3g.h5.

h2_4_ring_sto3g.h5

4 H2 molecules in a ring geometry, calculated with

the sto3g basis in a spin-restricted formalism.

h2_5_pbc_sto3g.h5

5x1x1 supercell of the periodic H2 system in

h2_1_pbc_sto3g.h5.

h2_5_ring_sto3g.h5

5 H2 molecules in a ring geometry, calculated with

the sto3g basis in a spin-restricted formalism.

h2_631g.h5

H2 molecule with bond length 0.73Å, calculated

with the 631g basis set in a spin-restricted

formalism.

h2_631g_symmetry.h5

H2 molecule, calculated with point group

symmetries in the 631g basis, with a

spin-restricted formalism.

h2_sto3g.h5

H2 molecule with bond length 0.7122Å, calculated

with the sto3g basis set in a spin-restricted

formalism.

h2_sto3g_long.h5

H2 molecule with a longer bond length of 0.735Å

compared to h2_sto3g.h5.

h2_sto3g_symmetry.h5

H2 molecule, calculated with point group

symmetries in the sto3g basis, with a

spin-restricted formalism.

h2o_sto3g.h5

H2O molecule, calculated with the sto3g basis set

in a spin-restricted formalism.

h2o_sto3g_symmetry.h5

H2O molecule, calculated with point group

symmetries in the sto3g basis, with a

spin-restricted formalism.

h3_chain_sto3g.h5

Linear chain of three H atoms with seperation

0.9Å, calculated with the sto3g basis in a

spin-restricted formalism.

h3_sto3g_m2.h5

Linear chain of three H atoms with spin

multiplicity 2, calculated with the sto3g basis in

a spin-restricted formalism.

h3_sto3g_m2_u.h5

Linear chain of three H atoms with spin

multiplicity 2, calculated with the sto3g basis in

a spin-unrestricted formalism.

h3p_chain_sto3g.h5

Linear H3+ chain with seperation 0.9Å, calculated

with the sto3g basis in a spin-restricted

formalism.

h3p_sto3g_c2v.h5

H3+ chain with C2v symmetry, calculated with point

group symmetries in the sto3g basis, with a

spin-restricted formalism.

h4_square_sto3g_m3.h5

Four H atoms in a square geometry with spin

multiplicity 3, calculated with the sto3g basis in

a spin-restricted formalism

h5_sto3g_m2.h5

H5 molecule with spin multiplicity 2. Calculated

with the sto3g basis set in a spin-restricted

formalism.

h5_sto3g_m2_u.h5

H5 molecule with spin multiplicity 2. Calculated

with the sto3g basis set in a spin-unrestricted

formalism.

heh_sto3g_u.h5

HeH molecule with bond length 0.772Å and spin

multiplicity 2. Calculated with the sto3g basis

set in a spin-unrestricted formalism.

hehp_sto3g.h5

HeH+ molecule with bond length 0.772Å. Calculated

with the sto3g basis set in the spin-restricted

formalism.

hehp_sto3g_symmetry.h5

HeH+ molecule with bond length 0.772Å. Calculated

with point group symmetries in the sto3g basis set

in the spin-restricted formalism.

lih_631g.h5

LiH molecule with bond length 1.64Å, calculated

with the 631g basis in a spin-restricted

formalism.

lih_sto3g.h5

LiH molecule with bond length 1.511Å, calculated

with the sto3g basis in a spin-restricted

formalism.

lih_sto3g_symmetry.h5

LiH molecule with bond length 1.511Å, calculated

with point group symmetries in the sto3g basis,

with a spin-restricted formalism.

nh3_sto3g.h5

NH3 molecule, calculated in the sto3g basis set

with a spin-restricted formalism.

nh3_sto3g_symmetry.h5

NH3 molecule, calculated with point group

symmetries in the sto3g basis, with a

spin-restricted formalism.