Skip to content

Commit

Permalink
Merge pull request #73 from leeping/rawstreamhandler
Browse files Browse the repository at this point in the history
Handlers that do not add newline characters
  • Loading branch information
leeping committed Apr 1, 2019
2 parents ff6d3d4 + 4bc53ef commit ed832c5
Show file tree
Hide file tree
Showing 8 changed files with 553 additions and 227 deletions.
93 changes: 39 additions & 54 deletions geometric/internal.py

Large diffs are not rendered by default.

4 changes: 2 additions & 2 deletions geometric/log.ini
Original file line number Diff line number Diff line change
Expand Up @@ -12,13 +12,13 @@ level=INFO
handlers=stream_handler, file_handler

[handler_stream_handler]
class=StreamHandler
class=geometric.nifty.RawStreamHandler
level=INFO
formatter=formatter
args=(sys.stderr,)

[handler_file_handler]
class=FileHandler
class=geometric.nifty.RawFileHandler
level=INFO
formatter=formatter
args=('%(logfilename)s',)
Expand Down
22 changes: 22 additions & 0 deletions geometric/logJson.ini
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
[loggers]
keys=root

[handlers]
keys=stream_handler

[formatters]
keys=formatter

[logger_root]
level=INFO
handlers=stream_handler

[handler_stream_handler]
class=geometric.nifty.RawStreamHandler
level=INFO
formatter=formatter
args=(sys.stderr,)

[formatter_formatter]
format=%(message)s
#format=%(asctime)s %(name)-12s %(levelname)-8s %(message)s
419 changes: 357 additions & 62 deletions geometric/molecule.py

Large diffs are not rendered by default.

74 changes: 48 additions & 26 deletions geometric/nifty.py
Original file line number Diff line number Diff line change
Expand Up @@ -50,34 +50,54 @@
if "forcebalance" in __name__:
# If this module is part of ForceBalance, use the package level logger
from .output import *
elif "geometric" in __name__:
# This ensures logging behavior is consistent with the rest of geomeTRIC
from logging import *
logger = getLogger(__name__)
logger.setLevel(INFO)
package="ForceBalance"
else:
# Previous default behavior if FB package level loggers could not be imported
from logging import *
# Define two handlers that don't print newline characters at the end of each line
class RawStreamHandler(StreamHandler):
"""Exactly like output.StreamHandler except it does no extra formatting
before sending logging messages to the stream. This is more compatible with
how output has been displayed in ForceBalance. Default stream has also been
changed from stderr to stdout"""
"""
Exactly like StreamHandler, except no newline character is printed at the end of each message.
This is done in order to ensure functions in molecule.py and nifty.py work consistently
across multiple packages.
"""
def __init__(self, stream = sys.stdout):
super(RawStreamHandler, self).__init__(stream)

def emit(self, record):
message = record.getMessage()
self.stream.write(message)
self.flush()
# logger=getLogger()
# logger.handlers = [RawStreamHandler(sys.stdout)]
# LPW: Daniel Smith suggested these changes to improve logger behavior
logger = getLogger("NiftyLogger")
logger.setLevel(INFO)
handler = RawStreamHandler()
logger.addHandler(handler)

class RawFileHandler(FileHandler):
"""
Exactly like FileHandler, except no newline character is printed at the end of each message.
This is done in order to ensure functions in molecule.py and nifty.py work consistently
across multiple packages.
"""
def __init__(self, *args, **kwargs):
super(RawFileHandler, self).__init__(*args, **kwargs)

def emit(self, record):
if self.stream is None:
self.stream = self._open()
message = record.getMessage()
self.stream.write(message)
self.flush()

if "geometric" in __name__:
# This ensures logging behavior is consistent with the rest of geomeTRIC
logger = getLogger(__name__)
logger.setLevel(INFO)
package="geomeTRIC"
else:
logger = getLogger("NiftyLogger")
logger.setLevel(INFO)
handler = RawStreamHandler()
logger.addHandler(handler)
if __name__ == "__main__":
package = "LPW-nifty.py"
else:
package = __name__.split('.')[0]

try:
import bz2
Expand All @@ -93,7 +113,6 @@ def emit(self, record):
logger.warning("gzip module import failed (used in compressing or decompressing pickle files)\n")
HaveGZ = False


## Boltzmann constant
kb = 0.0083144100163
## Q-Chem to GMX unit conversion for energy
Expand Down Expand Up @@ -152,6 +171,7 @@ def pvec1d(vec1d, precision=1, format="e", loglevel=INFO):
v2a = np.array(vec1d)
for i in range(v2a.shape[0]):
logger.log(loglevel, "%% .%i%s " % (precision, format) % v2a[i])
logger.log(loglevel, '\n')

def astr(vec1d, precision=4):
""" Write an array to a string so we can use it to key a dictionary. """
Expand All @@ -164,7 +184,9 @@ def pmat2d(mat2d, precision=1, format="e", loglevel=INFO):
"""
m2a = np.array(mat2d)
for i in range(m2a.shape[0]):
logger.log(loglevel, ' '.join(["%% .%i%s " % (precision, format) % m2a[i][j] for j in range(m2a[i].shape[0])]))
for j in range(m2a.shape[1]):
logger.log(loglevel, "%% .%i%s " % (precision, format) % m2a[i][j])
logger.log(loglevel, '\n')

def grouper(iterable, n):
"""Collect data into fixed-length chunks or blocks"""
Expand Down Expand Up @@ -504,26 +526,26 @@ def monotonic_decreasing(arr, start=None, end=None, verbose=False):
end = len(arr) - 1
a0 = arr[start]
idx = [start]
if verbose: logger.info("Starting @ %i : %.6f" % (start, arr[start]))
if verbose: logger.info("Starting @ %i : %.6f\n" % (start, arr[start]))
if end > start:
i = start+1
while i < end:
if arr[i] < a0:
a0 = arr[i]
idx.append(i)
if verbose: logger.info("Including %i : %.6f" % (i, arr[i]))
if verbose: logger.info("Including %i : %.6f\n" % (i, arr[i]))
else:
if verbose: logger.info("Excluding %i : %.6f" % (i, arr[i]))
if verbose: logger.info("Excluding %i : %.6f\n" % (i, arr[i]))
i += 1
if end < start:
i = start-1
while i >= end:
if arr[i] < a0:
a0 = arr[i]
idx.append(i)
if verbose: logger.info("Including %i : %.6f" % (i, arr[i]))
if verbose: logger.info("Including %i : %.6f\n" % (i, arr[i]))
else:
if verbose: logger.info("Excluding %i : %.6f" % (i, arr[i]))
if verbose: logger.info("Excluding %i : %.6f\n" % (i, arr[i]))
i -= 1
return np.array(idx)

Expand Down Expand Up @@ -835,7 +857,7 @@ def getWQIds():
global WQIDS
return WQIDS

def createWorkQueue(wq_port, debug=True, name='geomeTRIC'):
def createWorkQueue(wq_port, debug=True, name=package):
global WORK_QUEUE
if debug:
work_queue.set_debug_flag('all')
Expand Down Expand Up @@ -1083,7 +1105,7 @@ def listfiles(fnms=None, ext=None, err=False, dnm=None):
raise RuntimeError
answer = [fnms]
elif fnms is not None:
logger.info(fnms)
logger.info(str(fnms))
logger.error('First argument to listfiles must be a list, a string, or None')
raise RuntimeError
if answer == [] and ext is not None:
Expand Down

0 comments on commit ed832c5

Please sign in to comment.