From c4bbfa23b89218e25d6a899e9777b456431112f9 Mon Sep 17 00:00:00 2001 From: Anthony Scemama Date: Mon, 27 Jan 2020 22:09:02 +0100 Subject: [PATCH] Python3 --- README.md | 4 +- resultsFile/Modules/__init__.py | 8 +- resultsFile/Modules/gamessFile.py | 22 +- resultsFile/Modules/gaussianFile.py | 20 +- resultsFile/Modules/include.py | 39 --- resultsFile/Modules/molproFile.py | 25 +- resultsFile/Modules/wfnFile.py | 20 +- resultsFile/Modules/xmvbFile.py | 19 +- resultsFile/__init__.py | 405 ++++++++++++++++++++++++++- resultsFile/getFile.py | 6 +- resultsFile/lib/__init__.py | 4 +- resultsFile/lib/atom.py | 4 +- resultsFile/lib/basis.py | 4 +- resultsFile/lib/csf.py | 4 +- resultsFile/lib/fortranBinary.py | 4 +- resultsFile/lib/integral.py | 4 +- resultsFile/lib/library.py | 2 +- resultsFile/lib/orbital.py | 4 +- resultsFile/resultsFile.py | 418 ---------------------------- 19 files changed, 482 insertions(+), 534 deletions(-) delete mode 100755 resultsFile/Modules/include.py delete mode 100755 resultsFile/resultsFile.py diff --git a/README.md b/README.md index c6b00f3..d620bbc 100644 --- a/README.md +++ b/README.md @@ -14,8 +14,8 @@ Example (`resultsFile` is supposed to be in your `sys.path`): import resultsFile file = resultsFile.getFile("g09_output.log") -print 'recognized as', str(file).split('.')[-1].split()[0] -print file.mo_sets +print('recognized as', str(file).split('.')[-1].split()[0]) +print(file.mo_sets) ``` diff --git a/resultsFile/Modules/__init__.py b/resultsFile/Modules/__init__.py index 8ff6bee..03e1bbe 100755 --- a/resultsFile/Modules/__init__.py +++ b/resultsFile/Modules/__init__.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 # resultsFile is a library which allows to read output files of quantum # chemistry codes and write input files. # Copyright (C) 2007 Anthony SCEMAMA @@ -31,7 +31,11 @@ __author__ = "Anthony SCEMAMA " __date__ = "25 Oct 2007" -import os +# For relative imports to work in Python 3.6 +import os, sys +cwd = os.path.dirname(os.path.realpath(__file__)) +sys.path = [ cwd ] + sys.path + wd = os.path.dirname(__file__) all = [ i[:-3] for i in os.listdir(wd) if i.endswith("File.py") ] diff --git a/resultsFile/Modules/gamessFile.py b/resultsFile/Modules/gamessFile.py index 9258216..f5e4043 100755 --- a/resultsFile/Modules/gamessFile.py +++ b/resultsFile/Modules/gamessFile.py @@ -1,4 +1,4 @@ -#!/usr/bin/python +#!/usr/bin/env python3 # resultsFile is a library which allows to read output files of quantum # chemistry codes and write input files. # Copyright (C) 2007 Anthony SCEMAMA @@ -26,9 +26,9 @@ -from . import include -eval(include.code) +import resultsFile +from lib import * import struct gamessFile_defined_vars = [ "date", "version", "machine", "memory", "disk",\ @@ -47,12 +47,13 @@ gamessFile_defined_vars = [ "date", "version", "machine", "memory", "disk",\ "csf", "num_states", "two_e_int_ao_filename", "pseudo", "one_e_int_ao_filename", "atom_to_ao_range", "gradient_energy" ] -class gamessFile(resultsFile): +class gamessFile(resultsFile.resultsFileX): """ Class defining the gamess file. """ - local_vars = list(local_vars) + local_vars = list(resultsFile.local_vars) defined_vars = list(gamessFile_defined_vars) + get_data = resultsFile.get_data exec(get_data('date',"EXECUTION OF GAMESS BEGUN",'4:'), locals()) exec(get_data('machine',"Files used on the master node",'6:7'), locals()) @@ -1444,15 +1445,15 @@ class gamessFile(resultsFile): # ---------- to_remove = [] for i, j in local_vars: - if i in resultsFile_defined_vars: + if i in resultsFile.resultsFile_defined_vars: to_remove.append( (i,j) ) for i in to_remove: local_vars.remove(i) for i, j in local_vars: if i not in defined_vars: - exec(build_get_funcs(i), locals()) - exec(build_property(i,j), locals()) + exec(resultsFile.build_get_funcs(i), locals()) + exec(resultsFile.build_property(i,j), locals()) del to_remove, i, j atom_to_ao_range = property(fget=get_atom_to_ao_range) @@ -1651,7 +1652,8 @@ def write_gamess(file,stdout): gamess_write_vec(file,stdout) -fileTypes.append(gamessFile) +resultsFile.fileTypes.append(gamessFile) if __name__ == '__main__': - main(gamessFile) + resultsFile.main(gamessFile) + diff --git a/resultsFile/Modules/gaussianFile.py b/resultsFile/Modules/gaussianFile.py index 8e19633..5a11426 100755 --- a/resultsFile/Modules/gaussianFile.py +++ b/resultsFile/Modules/gaussianFile.py @@ -1,4 +1,4 @@ -#!/usr/bin/python +#!/usr/bin/env python3 # resultsFile is a library which allows to read output files of quantum # chemistry codes and write input files. # Copyright (C) 2007 Anthony SCEMAMA @@ -26,8 +26,7 @@ -from . import include -eval(include.code) +import resultsFile import struct import re @@ -47,11 +46,12 @@ gaussianFile_defined_vars = [ "date", "version", "machine", "memory", "disk",\ "csf_mo_type", "csf_coefficients", "symmetries", "occ_num", \ "csf", "num_states"] -class gaussianFile(resultsFile): + +class gaussianFile(resultsFile.resultsFileX): """ Class defining the gaussian file. """ - local_vars = list(local_vars) + local_vars = list(resultsFile.local_vars) defined_vars = list(gaussianFile_defined_vars) def get_options(self): @@ -897,15 +897,15 @@ class gaussianFile(resultsFile): return self._num_states to_remove = [] for i, j in local_vars: - if i in resultsFile_defined_vars: + if i in resultsFile.resultsFile_defined_vars: to_remove.append( (i,j) ) for i in to_remove: local_vars.remove(i) for i, j in local_vars: if i not in defined_vars: - exec(build_get_funcs(i), locals()) - exec(build_property(i,j), locals()) + exec(resultsFile.build_get_funcs(i), locals()) + exec(resultsFile.build_property(i,j), locals()) del to_remove, i, j @@ -1034,7 +1034,7 @@ def write_data(res, file): -fileTypes.append(gaussianFile) +resultsFile.fileTypes.append(gaussianFile) if __name__ == '__main__': - main(gaussianFile) + resultsFile.main(gaussianFile) diff --git a/resultsFile/Modules/include.py b/resultsFile/Modules/include.py deleted file mode 100755 index 4e1d786..0000000 --- a/resultsFile/Modules/include.py +++ /dev/null @@ -1,39 +0,0 @@ - -# resultsFile is a library which allows to read output files of quantum -# chemistry codes and write input files. -# Copyright (C) 2007 Anthony SCEMAMA -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Anthony Scemama -# LCPQ - IRSAMC -# Universite Paul Sabatier -# 118, route de Narbonne -# 31062 Toulouse Cedex 4 -# scemama@irsamc.ups-tlse.fr - - -code = compile(""" -try: - from resultsFile import * -except ImportError: - import os - import sys - wd = os.path.dirname(__file__) - wd = '/'.join ( wd.split('/')[:-1] ) - sys.path += [ wd ] - from resultsFile import * -""", 'include.py','single') - diff --git a/resultsFile/Modules/molproFile.py b/resultsFile/Modules/molproFile.py index 142e663..c72725d 100755 --- a/resultsFile/Modules/molproFile.py +++ b/resultsFile/Modules/molproFile.py @@ -1,4 +1,4 @@ -#!/usr/bin/python +#!/usr/bin/env python3 # resultsFile is a library which allows to read output files of quantum # chemistry codes and write input files. # Copyright (C) 2007 Anthony SCEMAMA @@ -26,8 +26,7 @@ -from . import include -eval(include.code) +import resultsFile import struct import re @@ -47,13 +46,13 @@ molproFile_defined_vars = [ "date", "version", "machine", "memory", "disk",\ methods_with_orbitals = ['RHF-SCF', 'MULTI'] -class molproFile(resultsFile): +class molproFile(resultsFile.resultsFileX): """ Class defining the molpro file. """ - local_vars = list(local_vars) + local_vars = list(resultsFile.local_vars) defined_vars = list(molproFile_defined_vars) - + get_data = resultsFile.get_data exec(get_data('date',"DATE: ",'-3:-2'), locals()) exec(get_data('point_group',"Point group",'2:'), locals()) exec(get_data('version'," Version",'1:2'), locals()) @@ -821,18 +820,18 @@ input file with molpro to generate a correct output for the basis set. # Properties # ---------- - exec(build_property("num_orb_sym","Number of SALCAO/sym"), locals()) + exec(resultsFile.build_property("num_orb_sym","Number of SALCAO/sym"), locals()) to_remove = [] for i, j in local_vars: - if i in resultsFile_defined_vars: + if i in resultsFile.resultsFile_defined_vars: to_remove.append( (i,j) ) for i in to_remove: local_vars.remove(i) for i, j in local_vars: if i not in defined_vars: - exec(build_get_funcs(i), locals()) - exec(build_property(i,j), locals()) + exec(resultsFile.build_get_funcs(i), locals()) + exec(resultsFile.build_property(i,j), locals()) del to_remove, i, j # Output Routines @@ -931,8 +930,8 @@ def molpro_write_input(res,file): print("rhf;", file=file) print("---", file=file) -fileTypes.append(molproFile) +resultsFile.fileTypes.append(molproFile) if __name__ == '__main__': - main(molproFile) - + resultsFile.main(molproFile) + diff --git a/resultsFile/Modules/wfnFile.py b/resultsFile/Modules/wfnFile.py index 2b1b279..54862a8 100755 --- a/resultsFile/Modules/wfnFile.py +++ b/resultsFile/Modules/wfnFile.py @@ -1,4 +1,4 @@ -#!/usr/bin/python +#!/usr/bin/env python3 # resultsFile is a library which allows to read output files of quantum # chemistry codes and write input files. # Copyright (C) 2007 Anthony SCEMAMA @@ -26,8 +26,8 @@ -from . import include -eval(include.code) +import resultsFile +import sys import struct @@ -43,11 +43,11 @@ wfnFile_defined_vars = [ "csf_mo_type", "csf_coefficients", "occ_num", \ "csf", "num_states"] -class wfnFile(resultsFile): +class wfnFile(resultsFile.resultsFileX): """ Class defining the wfn file. """ - local_vars = list(local_vars) + local_vars = list(resultsFile.local_vars) defined_vars = list(wfnFile_defined_vars) def get_title(self): @@ -329,15 +329,15 @@ class wfnFile(resultsFile): # ---------- to_remove = [] for i, j in local_vars: - if i in resultsFile_defined_vars: + if i in resultsFile.resultsFile_defined_vars: to_remove.append( (i,j) ) for i in to_remove: local_vars.remove(i) for i, j in local_vars: if i not in defined_vars: - exec(build_get_funcs(i), locals()) - exec(build_property(i,j), locals()) + exec(resultsFile.build_get_funcs(i), locals()) + exec(resultsFile.build_property(i,j), locals()) del to_remove, i, j @@ -480,8 +480,8 @@ def write_wfnFile(file,out=sys.stdout): wfn_write(file,out,MoType) -fileTypes.append(wfnFile) +resultsFile.fileTypes.append(wfnFile) if __name__ == '__main__': - main(wfnFile) + resultsFile.main(wfnFile) diff --git a/resultsFile/Modules/xmvbFile.py b/resultsFile/Modules/xmvbFile.py index 618b868..058e450 100755 --- a/resultsFile/Modules/xmvbFile.py +++ b/resultsFile/Modules/xmvbFile.py @@ -1,4 +1,4 @@ -#!/usr/bin/python +#!/usr/bin/env python3 # resultsFile is a library which allows to read output files of quantum # chemistry codes and write input files. # Copyright (C) 2007 Anthony SCEMAMA @@ -26,8 +26,7 @@ -from . import include -eval(include.code) +import resultsFile import struct import re @@ -47,11 +46,11 @@ xmvbFile_defined_vars = [ "date", "version", "machine", "memory", "disk",\ "csf_mo_type", "csf_coefficients", "symmetries", "occ_num", \ "csf", "num_states"] -class xmvbFile(resultsFile): +class xmvbFile(resultsFile.resultsFileX): """ Class defining the xmvb file. """ - local_vars = list(local_vars) + local_vars = list(resultsFile.local_vars) defined_vars = list(xmvbFile_defined_vars) def get_options(self): @@ -711,22 +710,22 @@ class xmvbFile(resultsFile): to_remove = [] for i, j in local_vars: - if i in resultsFile_defined_vars: + if i in resultsFile.resultsFile_defined_vars: to_remove.append( (i,j) ) for i in to_remove: local_vars.remove(i) for i, j in local_vars: if i not in defined_vars: - exec(build_get_funcs(i), locals()) - exec(build_property(i,j), locals()) + exec(resultsFile.build_get_funcs(i), locals()) + exec(resultsFile.build_property(i,j), locals()) del to_remove, i, j -fileTypes.insert(0,xmvbFile) +resultsFile.fileTypes.insert(0,xmvbFile) if __name__ == '__main__': - main(xmvbFile) + resultsFile.main(xmvbFile) ###### END ##### diff --git a/resultsFile/__init__.py b/resultsFile/__init__.py index 2d85459..16c904d 100755 --- a/resultsFile/__init__.py +++ b/resultsFile/__init__.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 # resultsFile is a library which allows to read output files of quantum # chemistry codes and write input files. # Copyright (C) 2007 Anthony SCEMAMA @@ -31,8 +31,404 @@ __author__ = "Anthony SCEMAMA " __date__ = "20 Nov 2007" -import os -all = [ "resultsFile", "getFile", "lib", "Modules" ] +# For relative imports to work in Python 3.6 +import os, sys +cwd = os.path.dirname(os.path.realpath(__file__)) +sys.path = [ cwd ] + sys.path + +from lib import * +import lib.basis as Basis +import sys +import copy + +fileTypes = [] + +local_vars = [ \ + # File properties + ( 'filename' , "Name of the results file."), + ( 'text' , "Text of the results file."), + ( 'pos' , "Position in the results file."), + ( 'date' , "When the calculation was performed."), + ( 'version' , "Version of the code generating the file."), + ( 'author' , "Who ran the calculation."), + ( 'machine' , "Machine where the calculation was run."), + ( 'memory' , "Requested memory for the calculation."), + ( 'disk' , "Requested disk space for the calculation."), + ( 'num_proc' , "Number of processors used."), + ( 'cpu_time' , "CPU time."), + # General properties + ( 'title' , "Title of the run."), + ( 'options' , "Options given in the input file."), + ( 'units' , "Units for the geometry (au or angstroms)."), + ( 'methods' , "List of calculation methods."), + ( 'spin_restrict' , "Open-shell or closed-shell calculations."), + ( 'conv_threshs' , "List of convergence thresholds."), + ( 'energies' , "List of energies."), + ( 'one_e_energies', "List of one electron energies."), + ( 'two_e_energies', "List of two electron energies."), + ( 'ee_pot_energies',"List of electron-electron potential energies."), + ( 'Ne_pot_energies',"List of nucleus-electron potential energies."), + ( 'pot_energies' , "List of potential energies."), + ( 'kin_energies' , "List of kinetic energies."), + ( 'virials' , "Virial ratios."), + ( 'mulliken_mo' , "Mulliken atomic population in each MO."), + ( 'mulliken_ao' , "Mulliken atomic population in each AO."), + ( 'lowdin_ao' , "Lowdin atomic population in each AO."), + ( 'mulliken_atom' , "Mulliken atomic population."), + ( 'lowdin_atom' , "Lowdin atomic population."), + ( 'dipole' , "Dipole moment"), + ( 'quadrupole' , "Quadrupole moment"), + ( 'num_states' , "Number of electronic states"), + # Geometry properties + ( 'point_group' , "Symmetry used."), + ( 'geometry' , "Atom types and coordinates."), + ( 'symmetries' , "Irreducible representations"), + ( 'num_elec' , "Number of electrons."), + ( 'num_alpha' , "Number of Alpha electrons."), + ( 'num_beta' , "Number of Beta electrons."), + ( 'charge' , "Charge of the system."), + ( 'multiplicity' , "Spin multiplicity of the system."), + ( 'nuclear_energy ', "Repulsion of the nuclei."), + ( 'gradient_energy', "Gradient of the Energy wrt nucl coord."), + # Basis set + ( 'basis' , "Basis set definition"), + ( 'uncontracted_basis', "Uncontracted Basis set"), + # Pseudopotentials + ( 'pseudo' , "Pseudopotential data"), + # Orbitals + ( 'mo_sets' , "List of molecular orbitals"), + ( 'mo_types' , "Types of molecular orbitals (canonical, natural,...)"), + ( 'occ_num' , "Occupation numbers"), + ( 'uncontracted_mo_sets', "List of molecular orbitals in the uncontracted basis set."), + # Determinants + ( 'closed_mos' , "Closed shell molecular orbitals"), + ( 'active_mos' , "Active molecular orbitals"), + ( 'virtual_mos' , "Virtual molecular orbitals"), + ( 'csf' , "List of Configuration State Functions"), + ( 'determinants' , "List of Determinants"), + ( 'csf_mo_type' , "MO type of the determinants"), + ( 'determinants_mo_type' , "MO type of the determinants"), + ( 'csf_coefficients', "Coefficients of the CSFs"), + ( 'det_coefficients', "Coefficients of the determinants"), + # Integrals + ( 'one_e_int_ao' , "One electron integrals in AO basis"), + ( 'two_e_int_ao' , "Two electron integrals in AO basis"), + ( 'one_e_int_mo' , "One electron integrals in MO basis"), + ( 'two_e_int_mo' , "Two electron integrals in MO basis"), + ] + +resultsFile_defined_vars = ["text","uncontracted_basis", "uncontracted_mo_sets"] + +class resultsFileX(object): + """ Class containing the definition of files. + """ + + local_vars = list(local_vars) + defined_vars = list(resultsFile_defined_vars) + + def __init__(self,name): + """All local variables are set to None, except filename. + """ + for var, doc in local_vars: + setattr(self,'_'+var,None) + self._filename = name + + + def get_text(self): + """Reads the whole file. + """ + if self._text is None: + try: + file = open(self.filename,"r") + self._text = file.readlines() + except IOError: + print("Unable to open "+self.filename) + sys.exit(1) + file.close() + return self._text + + def get_uncontracted_basis(self): + if self._uncontracted_basis is None: + try: + from resultsFile_cython import get_uncontracted_basis as f + has_cython = True + except ImportError: + has_cython = False + basis = self.basis + if has_cython: + self._uncontracted_basis = f(basis) + else: + uncontr = [] + for contr in basis: + for b in contr.prim: + uncontr.append(b) + self._uncontracted_basis = uncontr + return self._uncontracted_basis + + def get_uncontracted_mo_sets(self): + if self._uncontracted_mo_sets is None: + try: + from resultsFile_cython import get_uncontracted_mo_sets as f + has_cython = True + except ImportError: + has_cython = False + if has_cython: + self._uncontracted_mo_sets = f(self.basis, + self.uncontracted_basis, + self.mo_sets, + self.mo_types) + else: + uncontr = {} + basis = self.basis + for motype in self.mo_types: + uncontr[motype] = [] + for mo in self.mo_sets[motype]: + lenmovector = len(mo.vector) + monew = orbital() + monew.basis = self.uncontracted_basis + monew.eigenvalue = mo.eigenvalue + monew.set = motype + v = [] + for i, contr in enumerate(basis): + if i