diff --git a/interp/baker/__init__.py b/interp/baker/__init__.py index 323cf68..a1f6ba9 100644 --- a/interp/baker/__init__.py +++ b/interp/baker/__init__.py @@ -1,10 +1,9 @@ -from baker import * -from baker.tools import smblog -import numpy as np import sys +import numpy as np + import itertools -from tools import smberror +from interp.tools import log, smberror def get_phis(X, R): """ @@ -32,7 +31,7 @@ def get_phis(X, R): phi = np.linalg.solve(A,b) except np.linalg.LinAlgError as e: msg = "calculation of phis yielded a linearly dependant system (%s)" % e - smblog.error(msg) + log.error(msg) raise smberror(msg) phi = np.dot(np.linalg.pinv(A), b) @@ -70,7 +69,7 @@ def get_phis_3D(X, R): try: phi = np.linalg.solve(A,b) except np.linalg.LinAlgError as e: - smblog.error("calculation of phis yielded a linearly dependant system: %s" % e) + log.error("calculation of phis yielded a linearly dependant system: %s" % e) phi = np.dot(np.linalg.pinv(A), b) return phi @@ -131,7 +130,7 @@ def get_error_quadratic(phi, R, S): try: (a, b, c) = np.linalg.solve(A,b) except np.linalg.LinAlgError as e: - smblog.error("linear calculation went bad, resorting to np.linalg.pinv: %s" % e) + log.error("linear calculation went bad, resorting to np.linalg.pinv: %s" % e) (a, b, c) = np.dot(np.linalg.pinv(A), b) error_term = a * phi[0] * phi[1]\ @@ -172,7 +171,7 @@ def get_error_cubic(phi, R, S): try: (a, b, c, d, e, f, g) = np.linalg.solve(A,b) except np.linalg.LinAlgError as e: - smblog.error("linear calculation went bad, resorting to np.linalg.pinv: %s" % e) + log.error("linear calculation went bad, resorting to np.linalg.pinv: %s" % e) (a, b, c, d, e, f, g) = np.dot(np.linalg.pinv(A), b) error_term = a * phi[0] * phi[1] * phi[1]\ @@ -186,12 +185,12 @@ def get_error_cubic(phi, R, S): return error_term def get_error_sauron(phi, R, S, order = 2): - smblog.debug("len(phi): %d"% len(phi)) + log.debug("len(phi): %d"% len(phi)) B = [] # baker eq 9 w = [] # baker eq 11 p = pattern(order, len(phi), offset = -1) - smblog.debug("pattern: %s" % p) + log.debug("pattern: %s" % p) for (s,q) in zip(S.points, S.q): cur_phi, cur_qlin = qlinear(s, R) @@ -205,9 +204,9 @@ def get_error_sauron(phi, R, S, order = 2): B.append(l) w.append(q - cur_qlin) - smblog.debug("B: %s" % B) - smblog.debug("w: %s" % w) - + log.debug("B: %s" % B) + log.debug("w: %s" % w) + B = np.array(B) w = np.array(w) @@ -219,10 +218,10 @@ def get_error_sauron(phi, R, S, order = 2): try: abc = np.linalg.solve(A,b) except np.linalg.LinAlgError as e: - smblog.error("linear calculation went bad, resorting to np.linalg.pinv: %s" % e) + log.error("linear calculation went bad, resorting to np.linalg.pinv: %s" % e) abc = np.dot(np.linalg.pinv(A), b) - smblog.debug(len(abc) == len(p)) + log.debug(len(abc) == len(p)) error_term = 0.0 for (a, i) in zip(abc, p): @@ -230,8 +229,8 @@ def get_error_sauron(phi, R, S, order = 2): for j in i: cur_sum *= phi[j] error_term += cur_sum - - smblog.debug("error_term smb: %s" % error_term) + + log.debug("error_term smb: %s" % error_term) return error_term, abc def run_baker(X, R, S, order=2): @@ -244,7 +243,7 @@ def run_baker(X, R, S, order=2): R = Simplex S = extra points """ - smblog.debug("order = %d" % order) + log.debug("order = %d" % order) answer = { 'qlin': None, @@ -328,7 +327,7 @@ def run_baker_3D(X, R, S): try: (a, b, c, d, e, f) = np.linalg.solve(A,b) except np.linalg.LinAlgError as e: - smblog.error("linear calculation went bad, resorting to np.linalg.pinv: %s", e) + log.error("linear calculation went bad, resorting to np.linalg.pinv: %s", e) (a, b, c, d, e, f) = np.dot(np.linalg.pinv(A), b) error_term = a * phi[0] * phi[1]\ @@ -374,7 +373,7 @@ def _samples_ur(items, k, offset = 0): yield tuple([x + offset for sel in selections for x in sel]) def pattern(power, phicount, offset = 0): - smblog.debug("(power = %s, phicount = %s)" % (power, phicount)) + log.debug("(power = %s, phicount = %s)" % (power, phicount)) r = [] for i in _samples_ur(range(1, phicount + 1), power, offset): if not len(set(i)) == 1: diff --git a/interp/grid/__init__.py b/interp/grid/__init__.py index 4374a9b..4491cb5 100644 --- a/interp/grid/__init__.py +++ b/interp/grid/__init__.py @@ -6,8 +6,8 @@ import inspect import numpy as np import scipy.spatial -from baker import run_baker -from baker.tools import exact_func, smberror, smblog +from interp.baker import run_baker +from interp.tools import exact_func, smberror, log from simplex import face, contains from smcqdelaunay import * diff --git a/interp/grid/simplex.py b/interp/grid/simplex.py index 5da423c..7e49fb6 100644 --- a/interp/grid/simplex.py +++ b/interp/grid/simplex.py @@ -1,5 +1,5 @@ -from baker import get_phis, get_phis_3D -from baker.tools import smblog +from interp.baker import get_phis, get_phis_3D +from interp.tools import log TOL = 1e-8 diff --git a/interp/tools.py b/interp/tools.py index 2bbae0e..d3a3efd 100644 --- a/interp/tools.py +++ b/interp/tools.py @@ -1,36 +1,36 @@ import os + import logging +import logging.handlers + import inspect import numpy as np -class smbLog(object): - interpolator = "%s ==> %s" - def __init__(self, level = logging.DEBUG): - logging.basicConfig( - level = level, - format = '%(asctime)s %(levelname)s %(message)s', - filename = os.path.join(os.sep, 'tmp', 'baker.lol'), - ) - self.log = logging.getLogger() - def debug(self, message = None): - msg = smbLog.interpolator % (inspect.stack()[1][3], message) - self.log.debug(msg) +def get_logger(filename, level = logging.DEBUG, logger_name = 'pymoab', size = 2048, backupCount = 10): + """ + This is a simple wrapper around a few sane + defaults using Python's logging functionality. - def info(self, message = None): - msg = smbLog.interpolator % (inspect.stack()[1][3], message) - self.log.info(msg) + An explaination of the optional parameters: + filename : the filename + level : one of either debug, info, warn, or error + logger_name : if one needs multiple logfiles, one must name them. + size : the size in bytes of the logfile before roll (defaults to 2MB) + backupCount : number of rolled logs to keep around (defaults to 10) + """ - def warn(self, message = None): - msg = smbLog.interpolator % (inspect.stack()[1][3], message) - self.log.warn(msg) + logger = logging.getLogger(logger_name) + logger.setLevel(level) + my_format = logging.Formatter('%(asctime)s %(levelname)s (%(process)d) %(filename)s %(funcName)s:%(lineno)d %(message)s') + handler = logging.handlers.RotatingFileHandler( + filename, maxBytes = size * 1024, backupCount = backupCount) + handler.setFormatter(my_format) + logger.addHandler(handler) - def error(self, message = None): - msg = smbLog.interpolator % (inspect.stack()[1][3], message) - self.log.error(msg) + return logger - -smblog = smbLog(logging.DEBUG) +log = get_logger(filename = '/tmp/interp.log') class smberror(Exception): """ diff --git a/test/baker.test.py b/test/baker.test.py index bf62ce2..d384052 100755 --- a/test/baker.test.py +++ b/test/baker.test.py @@ -1,8 +1,9 @@ #!/usr/bin/env python import unittest -from interplosion import baker -from interplosion import grid + +from interp import baker +from interp import grid import numpy as np import scipy.spatial @@ -28,8 +29,8 @@ class TestSequenceFunctions(unittest.TestCase): def testImports(self): import numpy import scipy - import grid - import baker + import interp.grid + import interp.baker def testGetPhis(self):