Beispiel #1
0
    def _parseParameterTuple(self, varName, tupleValue, tupleType, varType,
                             varIndex):
        if tupleType == 'tuple':
            tupleDelimeter = self.get(self._getParameterOption(varName),
                                      'delimeter', ',')
            tupleStrings = lmap(
                str.strip,
                utils.split_advanced(tupleValue, lambda tok: tok in ' \n',
                                     lambda tok: False))
            tupleList = lmap(lambda t: parseTuple(t, tupleDelimeter),
                             tupleStrings)
        elif tupleType == 'binning':
            tupleList = lzip(tupleValue.split(), tupleValue.split()[1:])

        result = []
        for tupleEntry in tupleList:
            try:
                tmp = self._parseParameter(varName, tupleEntry[varIndex],
                                           varType)
            except Exception:
                raise ConfigError('Unable to parse %r' % repr(
                    (tupleEntry, tupleStrings)))
            if isinstance(tmp, list):
                if len(tmp) != 1:
                    raise ConfigError(
                        '[Variable: %s] Tuple entry (%s) expands to multiple variable entries (%s)!'
                        % (varName, tupleEntry[varIndex], tmp))
                result.append(tmp[0])
            else:
                result.append(tmp)
        return result
Beispiel #2
0
def parseTuple(t, delimeter):
    t = t.strip()
    if t.startswith('('):
        return tuple(
            imap(
                str.strip,
                utils.split_advanced(t[1:-1], lambda tok: tok == delimeter,
                                     lambda tok: False)))
    return (t, )
Beispiel #3
0
def parseParameterOption(option):
	result = map(str.strip, utils.split_advanced(option.lower(), lambda t: t in ')]}', lambda t: True))
	if len(result) and '(' in result[0]:
		validChar = lambda c: c.isalnum() or (c in ['_'])
		result[0] = tuple(utils.accumulate(result[0], '', lambda i, b: not validChar(i), lambda i, b: validChar(i)))
	elif len(result) == 1:
		result = map(str.strip, result[0].split(' ', 1))
	if len(result) == 1:
		result.append(None)
	return tuple(result)
Beispiel #4
0
	def parseParameterTuple(self, varName, tupleValue, tupleType, varType, varIndex):
		if tupleType == 'tuple':
			tupleDelimeter = self.get(self.getParameterOption(varName), 'delimeter', ',')
			tupleStrings = map(str.strip, utils.split_advanced(tupleValue, lambda tok: tok in ')]}', lambda tok: True))
			tupleList = map(lambda t: parseTuple(t, tupleDelimeter), tupleStrings)
		elif tupleType == 'binning':
			tupleList = zip(tupleValue.split(), tupleValue.split()[1:])

		def yieldEntries():
			for tupleEntry in tupleList:
				try:
					tmp = self.parseParameter(varName, tupleEntry[varIndex], varType)
				except:
					raise ConfigError('Unable to parse %r' % tupleEntry)
				if isinstance(tmp, list):
					if len(tmp) != 1:
						raise ConfigError('[Variable: %s] Tuple entry (%s) expands to multiple variable entries (%s)!' % (varName, tupleEntry[varIndex], tmp))
					yield tmp[0]
				else:
					yield tmp
		return list(yieldEntries())
	def _parseParameterTuple(self, varName, tupleValue, tupleType, varType, varIndex):
		if tupleType == 'tuple':
			tupleDelimeter = self.get(self._getParameterOption(varName), 'delimeter', ',')
			tupleStrings = lmap(str.strip, utils.split_advanced(tupleValue, lambda tok: tok in ' \n', lambda tok: False))
			tupleList = lmap(lambda t: parseTuple(t, tupleDelimeter), tupleStrings)
		elif tupleType == 'binning':
			tupleList = lzip(tupleValue.split(), tupleValue.split()[1:])

		result = []
		for tupleEntry in tupleList:
			try:
				tmp = self._parseParameter(varName, tupleEntry[varIndex], varType)
			except Exception:
				raise ConfigError('Unable to parse %r' % repr((tupleEntry, tupleStrings)))
			if isinstance(tmp, list):
				if len(tmp) != 1:
					raise ConfigError('[Variable: %s] Tuple entry (%s) expands to multiple variable entries (%s)!' % (varName, tupleEntry[varIndex], tmp))
				result.append(tmp[0])
			else:
				result.append(tmp)
		return result
Beispiel #6
0
def parseTuple(t, delimeter):
	t = t.strip()
	if t.startswith('('):
		return tuple(map(str.strip, utils.split_advanced(t[1:-1], lambda tok: tok == delimeter, lambda tok: False)))
	return (t,)