Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
raise_error: bool
Passed on to control negative return between False and ModuleNotFoundError raised.
Returns
-------
bool
If psi4 (psithon or psiapi) is found, returns True.
If raise_error is False and psi4 is missing, returns False.
If raise_error is True and psi4 is missing, the error message is raised.
"""
psithon = which("psi4", return_bool=True)
psiapi = which_import("psi4", return_bool=True)
if psithon and not psiapi:
with popen([which("psi4"), "--module"]) as exc:
exc["proc"].wait(timeout=30)
if "module does not exist" in exc["stderr"]:
pass # --module argument only in Psi4 DDD branch
else:
sys.path.append(exc["stdout"].split()[-1])
if psiapi and not psithon:
psiimport = str(Path(which_import("psi4")).parent.parent)
env = os.environ.copy()
env["PYTHONPATH"] = psiimport
with popen(["python", "-c", "import psi4; print(psi4.executable[:-5])"], popen_kwargs={"env": env}) as exc:
exc["proc"].wait(timeout=30)
os.environ["PATH"] += os.pathsep + exc["stdout"].split()[-1]
if psithon or psiapi:
return True
def get_version(self) -> str:
self.found(raise_error=True)
which_prog = which("entos")
if which_prog not in self.version_cache:
with popen([which_prog, "--version"]) as exc:
exc["proc"].wait(timeout=15)
self.version_cache[which_prog] = safe_version(exc["stdout"].split()[2])
return self.version_cache[which_prog]
def get_version(self) -> str:
self.found(raise_error=True)
which_prog = which("terachem")
if which_prog not in self.version_cache:
with popen([which_prog, "--version"]) as exc:
exc["proc"].wait(timeout=5)
mobj = re.search(NUMBER, exc["stdout"], re.VERBOSE)
version = mobj.group(0)
self.version_cache[which_prog] = safe_version(version)
return self.version_cache[which_prog]
def get_version(self) -> str:
self.found(raise_error=True)
which_prog = which("qchem")
if which_prog not in self.version_cache:
with popen([which_prog, "-h"], popen_kwargs={"env": self._get_qc_path()}) as exc:
exc["proc"].wait(timeout=15)
if "QC not defined" in exc["stdout"]:
return safe_version("0.0.0")
self.version_cache[which_prog] = safe_version(exc["stdout"].splitlines()[0].split()[-1])
return self.version_cache[which_prog]
psithon = which("psi4", return_bool=True)
psiapi = which_import("psi4", return_bool=True)
if psithon and not psiapi:
with popen([which("psi4"), "--module"]) as exc:
exc["proc"].wait(timeout=30)
if "module does not exist" in exc["stderr"]:
pass # --module argument only in Psi4 DDD branch
else:
sys.path.append(exc["stdout"].split()[-1])
if psiapi and not psithon:
psiimport = str(Path(which_import("psi4")).parent.parent)
env = os.environ.copy()
env["PYTHONPATH"] = psiimport
with popen(["python", "-c", "import psi4; print(psi4.executable[:-5])"], popen_kwargs={"env": env}) as exc:
exc["proc"].wait(timeout=30)
os.environ["PATH"] += os.pathsep + exc["stdout"].split()[-1]
if psithon or psiapi:
return True
return which(
"psi4",
return_bool=True,
raise_error=raise_error,
raise_msg="Please install via `conda install psi4 -c psi4`. Check it's in your PATH with `which psi4`.",
)