예제 #1
0
 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'
예제 #2
0
 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'
예제 #3
0
    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
예제 #4
0
    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
예제 #5
0
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)
예제 #6
0
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, ''
예제 #7
0
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, ''