I keep getting an error message like "KeyError:0" for this code when I ran it. The code is in two parts ("get_qubit_op(dist), and exact_solver(problem, converter)"). The first part does not give me any error but the second part gives me an error when I try to call the first part.
def get_qubit_op(dist):
# Define Molecule
molecule = Molecule(
# Coordinates in Angstrom
geometry=[
["Li", [0.0, 0.0, 0.0]],
["H", [dist, 0.0, 0.0]]
],
multiplicity=1, # = 2*spin + 1
charge=0,
)
driver = ElectronicStructureMoleculeDriver(
molecule=molecule,
basis="sto3g",
driver_type=ElectronicStructureDriverType.PYSCF)
# Get properties
properties = driver.run()
num_particles = (properties
.get_property("ParticleNumber")
.num_particles)
num_spin_orbitals = int(properties
.get_property("ParticleNumber")
.num_spin_orbitals)
# Define Problem, Use freeze core approximation, remove orbitals.
problem = ElectronicStructureProblem(
driver,
[FreezeCoreTransformer(freeze_core=True,
remove_orbitals=[-3,-2])])
second_q_ops = problem.second_q_ops() # Get 2nd Quant OP
num_spin_orbitals = problem.num_spin_orbitals
num_particles = problem.num_particles
mapper = ParityMapper() # Set Mapper
hamiltonian = second_q_ops[0] # Set Hamiltonian
# Do two qubit reduction
converter = QubitConverter(mapper,two_qubit_reduction=True)
reducer = TwoQubitReduction(num_particles)
qubit_op = converter.convert(hamiltonian)
qubit_op = reducer.convert(qubit_op)
return qubit_op, num_particles, num_spin_orbitals, problem, converter
def exact_solver(problem, converter):
solver = NumPyMinimumEigensolverFactory()
calc = GroundStateEigensolver(converter, solver)
result = calc.solve(problem)
return result
backend = BasicAer.get_backend("statevector_simulator")
distances = np.arange(0.5, 4.0, 0.2)
exact_energies = []
vqe_energies = []
optimizer = SLSQP(maxiter=5)
# pylint: disable=undefined-loop-variable
for dist in distances:
(qubit_op, num_particles, num_spin_orbitals, problem, converter) = get_qubit_op(dist)
result = exact_solver(problem,converter)
exact_energies.append(result.total_energies[0].real)
init_state = HartreeFock(num_spin_orbitals, num_particles, converter)
var_form = UCCSD(converter,
num_particles,
num_spin_orbitals,
initial_state=init_state)
vqe = VQE(var_form, optimizer, quantum_instance=backend)
vqe_calc = vqe.compute_minimum_eigenvalue(qubit_op)
vqe_result = problem.interpret(vqe_calc).total_energies[0].real
vqe_energies.append(vqe_result)
print(f"Interatomic Distance: {np.round(dist, 2)}",
f"VQE Result: {vqe_result:.5f}",
f"Exact Energy: {exact_energies[-1]:.5f}")
print("All energies have been calculated")
I was expecting it to work cuz its the same code in the textbook