def _guessType(self): """try to determine what kind of pitch data is being provided psReal is default for any integer midi values must be marked some other way (w/ an m?) """ data = copy.copy(self.srcData) if drawer.isStr(data): data = drawer.strScrub(data, 'L') if len(data) == 0: return None # no data found if data[0] in REFdiaNameToPc: return 'psName' elif data.find('m') >= 0 or data.find('midi') >= 0: # an m designates a midi note number return 'midi' elif data.find('pch') >= 0: # a pch designates a pch value return 'pch' elif data.find('hz') >= 0 or data.find('fq') >= 0: return 'fq' else: # assume other strings are psInts return 'psReal' if drawer.isInt(data): # midi int, or ps int return 'psReal' if drawer.isFloat(data): # assume it is a psReal value return 'psReal'
def _processType(self): """process raw data into appropriate primative format""" data = copy.copy(self.srcData) if self.format == 'psName': if drawer.isStr(data): return data else: return None elif self.format == 'psReal': # psReal values should not be rounded if drawer.isStr(data): try: return float(data) except ValueError: return None else: return data elif self.format == 'midi': #midi values should always be rounded if drawer.isStr(data): data = drawer.strStripAlpha(data) try: return float(data) # dont convert to int except ValueError: return None elif drawer.isInt(data): return data else: # its a float, round return data elif self.format == 'pch': # floating point values if drawer.isStr(data): data = drawer.strStripAlpha(data) try: return _normalizePch(float(data)) except ValueError: return None if drawer.isFloat(data): return _normalizePch(data) else: # something is wrong return None elif self.format == 'fq': # floating point values if drawer.isStr(data): data = drawer.strStripAlpha(data) try: return float(data) except ValueError: return None if drawer.isNum(data): return float(data) # convert to float else: # something is wrong return None else: # error return None
def anyDataToStr(usrData, sigDig=None, seqBrace='tuple'): """convert any data to a proper string, taking type into account lists are recursive examined with the same function note: this will convert a list [] into a tuple representation depending on optional arg will automatically remove space between comma-separated lists >>> anyDataToStr('test') 'test' >>> anyDataToStr([3, 'mixed', [3,4,5]]) '(3,mixed,(3,4,5))' >>> anyDataToStr([2.35, ('a', (234, 34))]) '(2.35,(a,(234,34)))' """ if drawer.isStr(usrData): return usrData elif drawer.isInt(usrData): return '%i' % usrData elif drawer.isFloat(usrData): if sigDig != None: # force a certain length return '%s' % str(round(usrData, sigDig)) else: # adaptive by size: sigDig = sigDigMeasure(usrData) return '%s' % str(round(usrData, sigDig)) elif drawer.isBool(usrData): # does not work, evaluates as string? return boolAsStr(usrData) elif usrData == None: return 'none' elif drawer.isList(usrData): newData = [] for q in usrData: # recursively apply to each element in list newData.append(anyDataToStr(q, sigDig, seqBrace)) if seqBrace == 'tuple': return '(%s)' % ','.join(newData) elif seqBrace == 'list': return '[%s]' % ','.join(newData) else: return repr(usrData)
def strongType(usrArgs, argTypes, defaultArgs=[], argCountOffset=0): """Argument checking tool. checks raw arg type and number, one level deep (does not recurse into list) will supply defaults if missing args after last given and self.defaultArgs defined two arguments required, both lists: args = a list of arguments, of proper python data types argTypes = list of one-level deap types, specified w/ strings 'list', 'num', 'float', 'int', 'str'; see drawer.py one optional args defaultArgs = list of default args to substitute returns: newArgs, ok, msg >>> strongType([[1,2,3]], ['list']) ([[1, 2, 3]], 1, '') >>> strongType([.5, 3, 'three'], ['float', 'int', 'str']) ([0.5, 3, 'three'], 1, '') >>> strongType([3.2], ['num', 'num']) ([3.2000...], 0, 'incorrect number of arguments; enter 2 arguments.') >>> strongType([3.2, 5, 6], ['num', 'num']) ([3.2000..., 5, 6], 0, 'too many arguments; enter 2 arguments.') """ argCount = len(argTypes) if len(usrArgs) < argCount: # try to get from defaults if len(defaultArgs) == argCount: # defaults exits (default is 0) for retrieve in defaultArgs[len(usrArgs):]: usrArgs.append(retrieve) # add missing to end #print 'argTools.py: adding default', retrieve, defaultArgs else: # nothing we can do: failure msg = ('incorrect number of arguments; enter %i arguments.' % (argCount + argCountOffset)) # add incase if name offset return usrArgs, 0, msg elif len(usrArgs) > argCount: #print _MOD, len(usrArgs), argCount msg = 'too many arguments; enter %i arguments.' % (argCount + argCountOffset) return usrArgs, 0, msg for pos in range(0, argCount): argTest = usrArgs[pos] # can be [list, num, float, int, str] typeCandidates = argTypes[pos] if not drawer.isList(typeCandidates): typeCandidates = [ typeCandidates, ] # add to list for type in typeCandidates: if type == 'list' and drawer.isList(argTest): match = 1 break elif type == 'num' and drawer.isNum(argTest): match = 1 break elif type == 'float' and drawer.isFloat(argTest): match = 1 break elif type == 'int' and drawer.isInt(argTest): match = 1 break elif type == 'str' and drawer.isStr(argTest): match = 1 break else: # dont break; need to through other possbilities match = 0 # should covnert types to better strings if match == 0: msg = ( 'wrong type of data used as an argument. replace %s with a %s argument type.' % ( repr(typeset.anyDataToStr(argTest)), # provide 'or' to show that any type in candidate is good drawer.typeListAsStr(typeCandidates, 'or'))) return usrArgs, 0, msg # all good return usrArgs, 1, ''
def strongType(usrArgs, argTypes, defaultArgs=[], argCountOffset=0): """Argument checking tool. checks raw arg type and number, one level deep (does not recurse into list) will supply defaults if missing args after last given and self.defaultArgs defined two arguments required, both lists: args = a list of arguments, of proper python data types argTypes = list of one-level deap types, specified w/ strings 'list', 'num', 'float', 'int', 'str'; see drawer.py one optional args defaultArgs = list of default args to substitute returns: newArgs, ok, msg >>> strongType([[1,2,3]], ['list']) ([[1, 2, 3]], 1, '') >>> strongType([.5, 3, 'three'], ['float', 'int', 'str']) ([0.5, 3, 'three'], 1, '') >>> strongType([3.2], ['num', 'num']) ([3.2000...], 0, 'incorrect number of arguments; enter 2 arguments.') >>> strongType([3.2, 5, 6], ['num', 'num']) ([3.2000..., 5, 6], 0, 'too many arguments; enter 2 arguments.') """ argCount = len(argTypes) if len(usrArgs) < argCount: # try to get from defaults if len(defaultArgs) == argCount: # defaults exits (default is 0) for retrieve in defaultArgs[len(usrArgs):]: usrArgs.append(retrieve) # add missing to end #print 'argTools.py: adding default', retrieve, defaultArgs else: # nothing we can do: failure msg = ('incorrect number of arguments; enter %i arguments.' % (argCount + argCountOffset)) # add incase if name offset return usrArgs, 0, msg elif len(usrArgs) > argCount: #print _MOD, len(usrArgs), argCount msg = 'too many arguments; enter %i arguments.' % (argCount + argCountOffset) return usrArgs, 0, msg for pos in range(0, argCount): argTest = usrArgs[pos] # can be [list, num, float, int, str] typeCandidates = argTypes[pos] if not drawer.isList(typeCandidates): typeCandidates = [typeCandidates,] # add to list for type in typeCandidates: if type == 'list' and drawer.isList(argTest): match = 1 break elif type == 'num' and drawer.isNum(argTest): match = 1 break elif type == 'float' and drawer.isFloat(argTest): match = 1 break elif type == 'int' and drawer.isInt(argTest): match = 1 break elif type == 'str' and drawer.isStr(argTest): match = 1 break else: # dont break; need to through other possbilities match = 0 # should covnert types to better strings if match == 0: msg = ('wrong type of data used as an argument. replace %s with a %s argument type.' % (repr(typeset.anyDataToStr(argTest)), # provide 'or' to show that any type in candidate is good drawer.typeListAsStr(typeCandidates, 'or'))) return usrArgs, 0, msg # all good return usrArgs, 1, ''