But it is not possible to call the range-separated version, ao_erf_eri() from the Python interface. This means many modern approaches can’t be reproduced efficiently at the Python level.
Is there any move to allow access to ao_erf_eri(), in the same way as ao_eri()?
MintsHelper.ao_erf_eri is already accessible in Python, and it has been since 1.2. While the function signature isn’t the same (rather than supply the basis sets to the function itself, you supply those to an integral factory object and then pass that to the function), the functionality is already there.
Thanks for your help. So would it be fair to assume the implicit answer to my question is ‘no’?
I figured there was likely to be a workaround. But I can’t seem to work out exactly how the process you describe works. When I try to pass an IntegralFactory to MintsHelper.ao_eri I get errors:
Your original question isn’t well-formed enough to have a yes or no answer. I can read “Is there any move to allow access to ao_erf_eri(), in the same way as ao_eri()?” in two different ways.
“in the same way” means with the same function signature. Then the answer is “no,” and also your implciit assumption that “this function exists somewhere in Psi4” is wrong.
“in the same way” means from the Python layer, even if the function signature is different. Then the answer is “yes,” and also your stated assumption that “ao_erf_eri function doesn’t exist in Python” is wrong.
While there’s a more helpful way to word this error message, the error message is completely correct. psi4.core.MintsHelper is a class. Without a concrete instance of the class, you are not passing the self argument to the function. Try instantiating the class and then using its method.
Thanks you for you detailed explanation of the shortcomings of my original message.
Unfortunately, this does not address the shortcomings of either your first reply or your follow up - specifically the lack of detailed explanation of how I can use the target functionality from the Python API. Talking about signatures and instantiation is not terrible helpful when the classes are under-documented (which isn’t a criticism - I’d rather have more access than have less access with more docs).
I may be the first person who has struggled on this particular inconsistency in the API but I suspect I won’t be the last. So, for the record, would someone be able to answer the question a little more usefully, ideally with some of the missing code.
You’re assuming that the code snippet you posted doesn’t work because I haven’t told you how to use the IntegralFactory based methods. That isn’t true. Your code isn’t working because you never created, i.e., instantiated, a MintsHelper object. Try print(type(Mints)) and you’ll see that Mints is the entire class, not a MintsHelper object. See Psi4Numpy tutorial if you need guidance on constructing a MintsHelper object. Fix that, and the rest should be fine.
The one technical caveat is that in more recent versions of Psi4, you may get a fatal error coming from Libint2TwoElectronInt. If that happens, consult other Psi4Numpy tutorial. Due to some backend changes, Psi4 now expects the zero basis sets in different positions when using density fitting. Yes, I know, it’s annoying.