|
From: Karol L. <kar...@kn...> - 2007-05-03 10:13:10
|
While working interactively with cclib on many files, I noticed a bug related
to the logger. For some reason, it prints as many messages for each attribute
as there were instances created of the specific parser (GAMESS, Gaussian,
counted separately), so you get an increasingly long output form the logger.
The problems is not related to any recent changes, it goes as far back as
version 0.5, as you can see here:
langner@slim:~/tmp/python/cclib/trunk/data/Gaussian/basicGaussian03$ python
Python 2.5 (r25:51908, Apr 30 2007, 15:03:13)
[GCC 3.4.6 (Debian 3.4.6-5)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import cclib
>>> print cclib.__version__
0.5
>>> print cclib.parser.logfileparser.__revision__
$Revision: 240 $
>>> print cclib.parser.gamessparser.__revision__
$Revision: 240 $
>>> cclib.parser.Gaussian("water_mp2.log").parse()
[Gaussian water_mp2.log INFO] Creating attribute atomcoords[]
[Gaussian water_mp2.log INFO] Creating attribute atomnos[]
[Gaussian water_mp2.log INFO] Creating attribute natom: 3
[Gaussian water_mp2.log INFO] Creating attribute nbasis: 7
[Gaussian water_mp2.log INFO] Creating attribute nmo: 7
[Gaussian water_mp2.log INFO] Creating attribute scftargets[]
[Gaussian water_mp2.log INFO] Creating attribute scfvalues
[Gaussian water_mp2.log INFO] Creating attribute scfenergies[]
[Gaussian water_mp2.log INFO] Creating attribute moenergies[[]]
[Gaussian water_mp2.log INFO] Creating attribute homos[]
>>> cclib.parser.Gaussian("water_mp2.log").parse()
[Gaussian water_mp2.log INFO] Creating attribute atomcoords[]
[Gaussian water_mp2.log INFO] Creating attribute atomcoords[]
[Gaussian water_mp2.log INFO] Creating attribute atomnos[]
[Gaussian water_mp2.log INFO] Creating attribute atomnos[]
[Gaussian water_mp2.log INFO] Creating attribute natom: 3
[Gaussian water_mp2.log INFO] Creating attribute natom: 3
[Gaussian water_mp2.log INFO] Creating attribute nbasis: 7
[Gaussian water_mp2.log INFO] Creating attribute nbasis: 7
[Gaussian water_mp2.log INFO] Creating attribute nmo: 7
[Gaussian water_mp2.log INFO] Creating attribute nmo: 7
[Gaussian water_mp2.log INFO] Creating attribute scftargets[]
[Gaussian water_mp2.log INFO] Creating attribute scftargets[]
[Gaussian water_mp2.log INFO] Creating attribute scfvalues
[Gaussian water_mp2.log INFO] Creating attribute scfvalues
[Gaussian water_mp2.log INFO] Creating attribute scfenergies[]
[Gaussian water_mp2.log INFO] Creating attribute scfenergies[]
[Gaussian water_mp2.log INFO] Creating attribute moenergies[[]]
[Gaussian water_mp2.log INFO] Creating attribute moenergies[[]]
[Gaussian water_mp2.log INFO] Creating attribute homos[]
[Gaussian water_mp2.log INFO] Creating attribute homos[]
>>> cclib.parser.GAMESS("../../GAMESS/basicGAMESS-US/water_mp2.out").parse()
[GAMESS ../GAMESS/water_mp2.out INFO] Creating attribute atomcoords, atomnos
[GAMESS ../water_mp2.out INFO] Creating attribute nbasis
[GAMESS ../water_mp2.out INFO] Creating attribute homos
[GAMESS ../water_mp2.out INFO] Creating attribute natom
[GAMESS ..//water_mp2.out INFO] Creating attribute scftargets
[GAMESS ../water_mp2.out INFO] Creating attribute scfvalues
[GAMESS ../water_mp2.out INFO] Creating attribute scfenergies[]
[GAMESS ..//water_mp2.out INFO] Creating attributes moenergies, mosyms
[GAMESS ../water_mp2.out INFO] Creating attribute nmo with default value
[GAMESS ../water_mp2.out INFO] Creating attribute mocoeffs
[GAMESS ../water_mp2.out INFO] Creating attribute geotargets[] with default
values
Notice how only the same parser class contributes to the repeats. The problem
is not in parsing, though, since it happens whenever logger.info is called.
Consider this from the current revision in trunk, where it is called in
LogFile.__setattr__ whenever an attribute from _attrlist is set that did not
exist previously:
langner@slim:~/tmp/python/cclib/trunk/data$ python
Python 2.5 (r25:51908, Apr 30 2007, 15:03:13)
[GCC 3.4.6 (Debian 3.4.6-5)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import cclib
>>> cclib.__version__
'0.7'
>>> cclib.parser.logfileparser.__revision__
'$Revision: 620 $'
>>> a = cclib.parser.ccopen("basicGaussian03/water_mp2.log")
>>> a.mult = 1
[Gaussian basicGaussian03/water_mp2.log INFO] Creating attribute mult: 1
>>> a = cclib.parser.ccopen("basicGaussian03/water_mp2.log")
>>> a.mult = 1
[Gaussian basicGaussian03/water_mp2.log INFO] Creating attribute mult: 1
[Gaussian basicGaussian03/water_mp2.log INFO] Creating attribute mult: 1
>>> b = cclib.parser.ccopen("basicGAMESS-US/water_mp2.out")
>>> b.mult = 1
[GAMESS basicGAMESS-US/water_mp2.out INFO] Creating attribute mult: 1
>>> a.mult = 1
>>> a.clean()
>>> a.mult = 1
[Gaussian basicGaussian03/water_mp2.log INFO] Creating attribute mult: 1
[Gaussian basicGaussian03/water_mp2.log INFO] Creating attribute mult: 1
This looks pretty strange.
- Karol
--
written by Karol Langner
Thu May 3 13:25:54 CEST 2007
|