quantumlib / OpenFermion-Psi4

OpenFermion plugin to interface with the electronic structure package Psi4.
GNU Lesser General Public License v3.0
82 stars 45 forks source link

Warning: No calculation saved. Psi4 segmentation fault possible. #44

Closed PabloAMC closed 3 years ago

PabloAMC commented 3 years ago

I am having trouble with the basic usage of openfermionpsi4. The error is

molecule = run_psi4(molecule,
                        run_scf=True,
                        run_fci=False)

returning

Users/pablo/.local/lib/python3.7/site-packages/openfermionpsi4/_run_psi4.py:226: Warning: No calculation saved. Psi4 segmentation fault possible.
  Warning)

To replicate it, I have created a conda environment called openfermion, installed both psi4 and openfermion and run a small code:

  1. conda create -n openfermion python=3.7
  2. conda activate openfermion
  3. conda install -c psi4 psi4 as done here
  4. pip install git+https://github.com/quantumlib/OpenFermion.git@master as done in the tutorial in the section Basics of MolecularData class. Notice here that just pip installing openfermion will result in a Module not found error when attempting from openfermion.chem import geometry_from_pubchem, MolecularData.
  5. pip install openfermionpsi4 although everything is already installed, so you may as well skip this.
  6. Run the main code in a jupyter notebook (installed for instance via anaconda navigator)
    
    from openfermion.chem import geometry_from_pubchem, MolecularData
    from openfermionpsi4 import run_psi4

methane_geometry = geometry_from_pubchem('methane') print(methane_geometry)

basis = 'sto-3g'

molecule = MolecularData(methane_geometry, basis, multiplicity = 1)

molecule = run_psi4(molecule, run_scf=True, run_fci=False)

As indicated previously, this last line will raise an error 

Users/pablo/.local/lib/python3.7/site-packages/openfermionpsi4/_run_psi4.py:226: Warning: No calculation saved. Psi4 segmentation fault possible. Warning)


Thanks in advance for the help
JonathonMisiewicz commented 3 years ago

The issue is that you're using an outdated version of openfermionpsi4. The latest pip version was uploaded August 2018. You're using a more recent version of openfermion, which substantially reorganized the module. openfermionpsi4 was adapted to this in PR #42, just this year. When you try to use pre-reorganized openfermionpsi4 and post-reorganized openfermion, you get a predictable ImportError, leading to the error message which I find when I try to reproduce this:

ImportError: cannot import name 'MolecularData' from 'openfermion.hamiltonians' (package_directory_name_here/openfermion/hamiltonians/__init__.py)

Printing out the relevant lines from the Psithon --> Python processed input file:
    ""","blank_molecule_psi4_yo")
    """This is a template for psi4 input format."""
    import numpy
    import sys
    from openfermion.config import *
--> from openfermion.hamiltonians import MolecularData
    from openfermion.ops import general_basis_change
    from numpy import array
    sys.path.append('package_directory_name_here/openfermionpsi4')
    from _psi4_conversion_functions import *
    core.set_memory_bytes(8000000000)

package_directory_name_here/openfermionpsi4/_run_psi4.py:226: Warning: No calculation saved. Psi4 segmentation fault possible.
  Warning)

@PabloAMC, was that the full form of the error message you saw? Without the context of the rest of the message, that last line about "Psi4 segmentation fault possible" is misleading.

PabloAMC commented 3 years ago

Hi @JonathonMisiewicz . Thanks for helping out! In fact I do not have the error when importing

from openfermion.chem import geometry_from_pubchem, MolecularData

Rather, it is in the

molecule = run_psi4(molecule,
                        run_scf=True,
                        run_fci=False)

because if I comment it out it does not return an error. The full output unfortunately does not give any more information, and does not tell you why it fails (I'm running it on jupyter notebook, is this a problem?)

[('C', (0, 0, 0)), ('H', (0.5541, 0.7996, 0.4965)), ('H', (0.6833, -0.8134, -0.2536)), ('H', (-0.7782, -0.3735, 0.6692)), ('H', (-0.4593, 0.3874, -0.9121))]

/Users/pablo/.local/lib/python3.7/site-packages/openfermionpsi4/_run_psi4.py:226: Warning: No calculation saved. Psi4 segmentation fault possible.
  Warning)

Of course, if there is a way to avoid it using some specific package versions I'd be very interested. My objective is actually to obtain the molecular integrals in an easy way.

JonathonMisiewicz commented 3 years ago

An error with from openfermion.chem import geometry_from_pubchem, MolecularData is not expected. Behind-the-scenes, the run_psi4 command creates other Psi4 files input files from a template. The line from openfermion.hamiltonians import MolecularData is from a pre-#42 version of the template. When Psi4 instructs Python to execute the line, we get the ImportError.

Jupyter is probably suppressing that additional output. Try running your script as a vanilla Python script. When I do that, the run_psi4 line indeed leads to the error I posted previously.

As a side-note, you can get molecular integrals just with Psi4, no OpenFermion needed. I'm assuming that your use also has something which genuinely does require OpenFermion.

ncrubin commented 3 years ago

Occasionally I will get similar errors from installing a different version of numpy after the psi4 conda build though I don't immediately see why this would provide an error given the commands you described for installation. Is psi4 conda build stable at 3.7? maybe try 3.6.

Indeed, running as a python script would be helpful. You can also store the output from psi4 via run_psi4. That should provide the most information.

PabloAMC commented 3 years ago

I have done as suggested and in a plain Python file, it runs as

(openfermion) MacBook-Pro-de-pablo-2:GitHub pablo$ python Psi4-openfermion.py 
[('C', (0, 0, 0)), ('H', (0.5541, 0.7996, 0.4965)), ('H', (0.6833, -0.8134, -0.2536)), ('H', (-0.7782, -0.3735, 0.6692)), ('H', (-0.4593, 0.3874, -0.9121))]
Traceback (most recent call last):
  File "/Users/pablo/opt/anaconda3/envs/openfermion/bin/psi4", line 287, in <module>
    exec(content)
  File "<string>", line 22, in <module>

ImportError: cannot import name 'MolecularData' from 'openfermion.hamiltonians' (/Users/pablo/opt/anaconda3/envs/openfermion/lib//python3.7/site-packages/openfermion/hamiltonians/__init__.py)

Printing out the relevant lines from the Psithon --> Python processed input file:
    ""","blank_molecule_psi4_yo")
    """This is a template for psi4 input format."""
    import numpy
    import sys
    from openfermion.config import *
--> from openfermion.hamiltonians import MolecularData
    from openfermion.ops import general_basis_change
    from numpy import array
    sys.path.append('/Users/pablo/.local/lib/python3.7/site-packages/openfermionpsi4')
    from _psi4_conversion_functions import *
    core.set_memory_bytes(8000000000)

/Users/pablo/.local/lib/python3.7/site-packages/openfermionpsi4/_run_psi4.py:226: Warning: No calculation saved. Psi4 segmentation fault possible.
  Warning)

@ncrubin I am not sure how to save the output of run_psi4, I have tried to put the tolerate_error = True, as well as verbose (although the latter will only work to print out other things), but none works. When using only psi4 I can run something like

psi4 input.dat output.dat

but it does not work here.

I have also tried the suggestion of attempting to use python = 3.6, but aside from the fact that it required me to run pip install openfermionpsi4 which was not needed before, the error does not appear to have changed

(openfermion36) MacBook-Pro-de-pablo-2:GitHub pablo$ python Psi4-openfermion.py 
[('C', (0, 0, 0)), ('H', (0.5541, 0.7996, 0.4965)), ('H', (0.6833, -0.8134, -0.2536)), ('H', (-0.7782, -0.3735, 0.6692)), ('H', (-0.4593, 0.3874, -0.9121))]
Traceback (most recent call last):
  File "/Users/pablo/opt/anaconda3/envs/openfermion36/bin/psi4", line 287, in <module>
    exec(content)
  File "<string>", line 22, in <module>

ImportError: cannot import name 'MolecularData'

Printing out the relevant lines from the Psithon --> Python processed input file:
    ""","blank_molecule_psi4_yo")
    """This is a template for psi4 input format."""
    import numpy
    import sys
    from openfermion.config import *
--> from openfermion.hamiltonians import MolecularData
    from openfermion.ops import general_basis_change
    from numpy import array
    sys.path.append('/Users/pablo/opt/anaconda3/envs/openfermion36/lib/python3.6/site-packages/openfermionpsi4')
    from _psi4_conversion_functions import *
    core.set_memory_bytes(8000000000)

/Users/pablo/opt/anaconda3/envs/openfermion36/lib/python3.6/site-packages/openfermionpsi4/_run_psi4.py:226: Warning: No calculation saved. Psi4 segmentation fault possible.
  Warning)

Finally, just clarify @JonathonMisiewicz that I wanted to get the molecular integrals (if you give me a way to do that using only psi4 that would be great), but I also wanted to work in the plane wave basis, which I believe is only supported via openfermion. Thanks to both!

ncrubin commented 3 years ago

There is an import error here. It looks like you are probably using a more recent Openfermion than Openfermion-psi4 is compatible with. We moved MolecularData into a chem module. This move hasn't been pushed to pypi which is why I suspect you are working on a dev openfermion but a pypi OpenFermion-Psi4.

one fix would be to use the dev versions of the entire openfermion ecosystem. All this version stuff will be fixed soon. We'll be releasing OpenFermion 1.0 and all plugins will be upgraded on Pypi.

PabloAMC commented 3 years ago

Thanks to @ncrubin and @JonathonMisiewicz. I can confirm that if one uses python = 3.6 and repeats the instructions above substituting

pip install openfermionpsi4

with

pip install git+https://github.com/quantumlib/OpenFermion-Psi4.git@master

no such problem happens.