Skip to content

scf issue #1373

Description

@deepankarpal1985

Environment

  • 0.7.2:
  • 3.11:
  • Ansys Lab:

What is happening?


MissingOptionalLibraryError Traceback (most recent call last)
Cell In[97], line 3
1 # Step 2: Simulate energies for a range of strains
2 strain_values = np.linspace(-0.1, 0.1, 5) # Strain range from -10% to +10%
----> 3 energies = [simulate_strain(strain) for strain in strain_values]

Cell In[97], line 3, in (.0)
1 # Step 2: Simulate energies for a range of strains
2 strain_values = np.linspace(-0.1, 0.1, 5) # Strain range from -10% to +10%
----> 3 energies = [simulate_strain(strain) for strain in strain_values]

Cell In[96], line 4, in simulate_strain(atom_displacement)
2 def simulate_strain(atom_displacement):
3 # 1a. Define molecular structure under strain
----> 4 driver = PySCFDriver(
5 atom=f"H 0.0 0.0 0.0; H 0.0 0.0 {0.74 +atom_displacement}",
6 unit=DistanceUnit.ANGSTROM,
7 basis="sto3g"
8 )
9 # 1b. Generate the electronic structure problem
10 problem = driver.run()

File /opt/conda/lib/python3.11/site-packages/qiskit/utils/classtools.py:111, in _WrappedMethod.get..out(*args, **kwargs)
108 @functools.wraps(method)
109 def out(*args, **kwargs):
110 for callback in self._before:
--> 111 callback.get(obj, objtype)(*args, **kwargs)
112 retval = method(*args, **kwargs)
113 for callback in self._after:

File /opt/conda/lib/python3.11/site-packages/qiskit/utils/lazy_tester.py:41, in _RequireNow.call(self, *_args, **_kwargs)
40 def call(self, *_args, **_kwargs):
---> 41 self._tester.require_now(self._feature)

File /opt/conda/lib/python3.11/site-packages/qiskit/utils/lazy_tester.py:221, in LazyDependencyManager.require_now(self, feature)
219 if self:
220 return
--> 221 raise MissingOptionalLibraryError(
222 libname=self._name, name=feature, pip_install=self._install, msg=self._msg
223 )

MissingOptionalLibraryError: "The 'pyscf' library is required to use 'PySCFDriver'. See https://pyscf.org/install.html."

How can we reproduce the issue?

Importing necessary libraries

import numpy as np
import matplotlib.pyplot as plt
import pyscf

Qiskit imports

from qiskit_aer.primitives import Estimator # <-- for Aer-based estimation
from qiskit_algorithms.minimum_eigensolvers import VQE
from qiskit_algorithms.optimizers import COBYLA
from qiskit.circuit.library import EfficientSU2

Qiskit Nature imports

from qiskit_nature.second_q.drivers import PySCFDriver
from qiskit_nature.units import DistanceUnit
from qiskit_nature.second_q.problems import ElectronicStructureProblem
from qiskit_nature.second_q.mappers import JordanWignerMapper
from qiskit_nature.second_q.algorithms import GroundStateEigensolver

Step 1: Function to compute energy for different strains

def simulate_strain(atom_displacement):
# 1a. Define molecular structure under strain
driver = PySCFDriver(
atom=f"H 0.0 0.0 0.0; H 0.0 0.0 {0.74 +atom_displacement}",
unit=DistanceUnit.ANGSTROM,
basis="sto3g"
)
# 1b. Generate the electronic structure problem
problem = driver.run()

# 1c. Map the electronic problem to a qubit operator
mapper = JordanWignerMapper()
# This will give you a list of second-quantized operators; the first one is usually the Hamiltonian
second_q_op = problem.second_q_ops()[0]

# 1d. Create an Estimator for the Aer simulator
#     You can pass backend options here, e.g. 'method': 'statevector'
estimator = Estimator(
    backend=Aer.get_backend("aer_simulator_statevector"),
    backend_options={"method": "statevector"}
)

# 1e. Define the ansatz and optimizer for VQE
ansatz = EfficientSU2(num_qubits=problem.num_spin_orbitals, reps=2, entanglement="full")
optimizer = COBYLA(maxiter=100)

# 1f. Create the VQE solver using the Aer-based Estimator
vqe = VQE(estimator=estimator, ansatz=ansatz, optimizer=optimizer)

# 1g. Use GroundStateEigensolver to compute the ground-state energy
gsc = GroundStateEigensolver(mapper, vqe)
result = gsc.solve(problem)

# Return the total (ground-state) energy
return result.total_energies[0]

Step 2: Simulate energies for a range of strains

strain_values = np.linspace(-0.1, 0.1, 5) # Strain range from -10% to +10%
energies = [simulate_strain(strain) for strain in strain_values]

What should happen?

For the atom displacements for linear strain, it should run the definition of strain

Any suggestions?

I am not aware of this scf issue-I am a new user-so I need help

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions