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
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, )
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)
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
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,)