[change] improved docstrings and testing of utils.py

This commit is contained in:
Sebastian Wehling-Benatelli 2016-08-12 09:50:36 +02:00
parent 36e7bc1bb2
commit 49727b25df

View File

@ -83,8 +83,8 @@ def clims(lim1, lim2):
def demeanTrace(trace, window): def demeanTrace(trace, window):
""" """
returns the DATA where each trace is demean by the average value within takes a trace object and returns the same trace object but with data
WINDOW demeaned within a certain time window
:param trace: waveform trace object :param trace: waveform trace object
:type trace: `~obspy.core.stream.Trace` :type trace: `~obspy.core.stream.Trace`
:param window: :param window:
@ -101,9 +101,9 @@ def findComboBoxIndex(combo_box, val):
Function findComboBoxIndex takes a QComboBox object and a string and Function findComboBoxIndex takes a QComboBox object and a string and
returns either 0 or the index throughout all QComboBox items. returns either 0 or the index throughout all QComboBox items.
:param combo_box: Combo box object. :param combo_box: Combo box object.
:type combo_box: QComboBox :type combo_box: `~QComboBox`
:param val: Name of a combo box to search for. :param val: Name of a combo box to search for.
:type val: :type val: basestring
:return: index value of item with name val or 0 :return: index value of item with name val or 0
""" """
return combo_box.findText(val) if combo_box.findText(val) is not -1 else 0 return combo_box.findText(val) if combo_box.findText(val) is not -1 else 0
@ -111,21 +111,35 @@ def findComboBoxIndex(combo_box, val):
def find_nearest(array, value): def find_nearest(array, value):
''' '''
Function find_nearest takes an array and a value and returns the function find_nearest takes an array and a value and returns the
index of the nearest value found in the array. index of the nearest value found in the array
:param array: :param array: array containing values
:param value: :type array: `~numpy.ndarray`
:return: :param value: number searched for
:return: index of the array item being nearest to the value
>>> a = np.array([ 1.80339578, -0.72546654, 0.95769195, -0.98320759, 0.85922623])
>>> find_nearest(a, 1.3)
2
>>> find_nearest(a, 0)
1
>>> find_nearest(a, 2)
0
>>> find_nearest(a, -1)
3
>>> a = np.array([ 1.1, -0.7, 0.9, -0.9, 0.8])
>>> find_nearest(a, 0.849)
4
''' '''
return (np.abs(array - value)).argmin() return (np.abs(array - value)).argmin()
def fnConstructor(s): def fnConstructor(s):
''' '''
takes a string and returns a valid filename (especially on windows machines)
:param s: :param s: desired filename
:type s: :type s: str
:return: :return: valid filename
''' '''
if type(s) is str: if type(s) is str:
s = s.split(':')[-1] s = s.split(':')[-1]
@ -143,7 +157,21 @@ def fnConstructor(s):
def four_digits(year): def four_digits(year):
if year + 2000 < UTCDateTime.utcnow().year: """
takes a two digit year integer and returns the correct four digit equivalent
from the last 100 years
:param year: two digit year
:type year: int
:return: four digit year correspondant
>>> four_digits(20)
1920
>>> four_digits(16)
2016
>>> four_digits(00)
2000
"""
if year + 2000 <= UTCDateTime.utcnow().year:
year += 2000 year += 2000
else: else:
year += 1900 year += 1900
@ -152,10 +180,11 @@ def four_digits(year):
def getGlobalTimes(stream): def getGlobalTimes(stream):
''' '''
takes a stream object and returns the latest end and the earliest start
:param stream: time of all contained trace objects
:type stream :param stream: seismological data stream
:return: :type stream: `~obspy.core.stream.Stream`
:return: minimum start time and maximum end time
''' '''
min_start = UTCDateTime() min_start = UTCDateTime()
max_end = None max_end = None
@ -169,6 +198,8 @@ def getGlobalTimes(stream):
def getHash(time): def getHash(time):
''' '''
takes a time object and returns the corresponding SHA1 hash of the
formatted date string
:param time: time object for which a hash should be calculated :param time: time object for which a hash should be calculated
:type time: :class: `~obspy.core.utcdatetime.UTCDateTime` object :type time: :class: `~obspy.core.utcdatetime.UTCDateTime` object
:return: str :return: str
@ -180,27 +211,26 @@ def getHash(time):
def getLogin(): def getLogin():
''' '''
returns the actual user's login ID
:return: :return: login ID
''' '''
return pwd.getpwuid(os.getuid())[0] return pwd.getpwuid(os.getuid())[0]
def getOwner(fn): def getOwner(fn):
''' '''
takes a filename and return the login ID of the actual owner of the file
:param fn: :param fn: filename of the file tested
:type fn: :type fn: str
:return: :return: login ID of the file's owner
''' '''
return pwd.getpwuid(os.stat(fn).st_uid).pw_name return pwd.getpwuid(os.stat(fn).st_uid).pw_name
def getPatternLine(fn, pattern): def getPatternLine(fn, pattern):
""" """
Takes a file name and a pattern string to search for in the file and takes a file name and a pattern string to search for in the file and
returns the first line which contains the pattern string otherwise None. returns the first line which contains the pattern string otherwise 'None'
:param fn: file name :param fn: file name
:type fn: str :type fn: str
:param pattern: pattern string to search for :param pattern: pattern string to search for
@ -223,22 +253,52 @@ def getPatternLine(fn, pattern):
def isSorted(iterable): def isSorted(iterable):
''' '''
Takes an iterable and checks if args* are in order. takes an iterable and returns 'True' if the items are in order otherwise
:param iterable: any with defined __ls__() and __gs__() 'False'
:type iterable: list :param iterable: an iterable object
:type iterable:
:return: Boolean :return: Boolean
>>> isSorted(1)
Traceback (most recent call last):
...
AssertionError: object is not iterable; object: 1
>>> isSorted([1,2,3,4])
True
>>> isSorted('abcd')
True
>>> isSorted('bcad')
False
>>> isSorted([2,3,1,4])
False
''' '''
assert isIterable(iterable), 'object is not iterable; object: {' \
'0}'.format(iterable)
if type(iterable) is str:
iterable = [s for s in iterable]
return sorted(iterable) == iterable return sorted(iterable) == iterable
def isIterable(obj):
"""
takes a python object and returns 'True' is the object is iterable and
'False' otherwise
:param obj: a python object
:return: True of False
"""
try:
iterator = iter(obj)
except TypeError as te:
return False
return True
def prepTimeAxis(stime, trace): def prepTimeAxis(stime, trace):
''' '''
takes a starttime and a trace object and returns a valid time axis for
:param stime: plotting
:type stime: :param stime: start time of the actual seismogram as UTCDateTime
:param trace: :param trace: seismic trace object
:type trace: :return: valid numpy array with time stamps for plotting
:return:
''' '''
nsamp = trace.stats.npts nsamp = trace.stats.npts
srate = trace.stats.sampling_rate srate = trace.stats.sampling_rate