Source code for bioflow.utils.general_utils.useful_wrappers
"""
Contains a set of wrappers that are useful for debugging and operation profiling
"""
import matplotlib.pyplot as plt
from time import time
from bioflow.utils.log_behavior import get_logger
log = get_logger(__name__)
[docs]def render_2d_matrix(matrix, name):
"""
Subroutine requried by the rendering wrapper.
:param matrix:
:param name:
:return:
"""
plt.title(name)
plt.imshow(matrix, interpolation='nearest')
plt.colorbar()
plt.show()
[docs]def debug_wrapper(function_of_interest):
"""
Convenient wrapper inspecting the results of a function returning a single matrix
:param function_of_interest:
:return: wrapped functions with copied name and documentation
"""
def check_matrix(*args, **kwargs):
result = function_of_interest(*args, **kwargs)
if not isinstance(result, tuple):
render_2d_matrix(result, function_of_interest.__name__)
else:
render_2d_matrix(result[0], function_of_interest.__name__)
check_matrix.__name__ = function_of_interest.__name__
check_matrix.__doc__ = function_of_interest.__doc__
return result
return check_matrix
[docs]def time_it_wrapper(function_of_interest):
"""
Convenient wrapper for timing the execution time of functions
:param function_of_interest:
:return: wrapped functions with copied name and documentation
"""
def time_execution(*args, **kwargs):
start = time()
result = function_of_interest(*args, **kwargs)
log.debug('%s run in %s',
function_of_interest.__name__, time() - start)
time_execution.__name__ = function_of_interest.__name__
time_execution.__doc__ = function_of_interest.__doc__
return result
return time_execution
[docs]def my_timer(message='', previous_time=[]):
"""
A small timer to be used in code to measure the execution duration of elements of code
:param message:
:param previous_time:
:return:
"""
if not previous_time:
print('set timer')
previous_time.append(time())
else:
print('%s timer reset. Time since previous %s' % (message, time() - previous_time[0]))
previous_time[0] = time()