Package TEES :: Package Utils :: Module Parameters
[hide private]

Source Code for Module TEES.Utils.Parameters

 1  import sys, os 
 2  import types 
 3  sys.path.append(os.path.dirname(os.path.abspath(__file__))+"/..") 
 4  import Utils.Libraries.combine as combine 
 5   
6 -def toDict(parameters, valueListKey=None):
7 if parameters == None: 8 return {} 9 if type(parameters) not in types.StringTypes: 10 return parameters 11 paramDict = {} 12 if valueListKey != None and ":" not in parameters and "=" not in parameters: 13 names = [valueListKey + "=" + parameters] 14 else: 15 names = parameters.split(":") 16 for name in names: 17 if name.strip() != "": 18 values = True 19 if "=" in name: 20 name, values = name.split("=") 21 values = values.strip().split(",") 22 if len(values) == 1: 23 values = values[0] 24 paramDict[name.strip()] = values 25 return paramDict
26
27 -def toString(parameters, skipKeysWithValues=[None], skipValues=[True], skipDefaults={}):
28 if parameters == None: 29 return "" 30 if type(parameters) in types.StringTypes: 31 return parameters 32 s = "" 33 for key in sorted(parameters.keys()): 34 if key in skipDefaults and parameters[key] == skipDefaults[key]: 35 continue 36 elif type(parameters[key]) in [types.ListType, types.TupleType]: 37 if len(s) > 0: s += ":" 38 s += key + "=" + ",".join([str(x) for x in parameters[key]]) 39 else: 40 if skipKeysWithValues == None or parameters[key] not in skipKeysWithValues: # skip defaults 41 if len(s) > 0: s += ":" 42 if skipValues != None and parameters[key] in skipValues: 43 s += key 44 else: 45 s += key + "=" + str(parameters[key]) 46 return s
47
48 -def get(parameters, defaults=None, allowNew=False, valueListKey=None, valueLimits=None):
49 parameters = toDict(parameters, valueListKey) # get parameter dictionary 50 if defaults != None: 51 if type(defaults) in [types.ListType, types.TupleType]: # convert list to dictionary 52 defaults = dict( zip(defaults, len(defaults) * [None]) ) 53 newDict = {} # combine parameters and defaults 54 for key in sorted(list(set(parameters.keys() + defaults.keys()))): 55 if key not in defaults and not allowNew: 56 raise Exception("Undefined parameter: " + key + " (parameters: " + str(parameters) + ", defaults: " + str(defaults) + ")") 57 if key in parameters: 58 newDict[key] = parameters[key] 59 elif key in defaults: 60 newDict[key] = defaults[key] 61 if valueLimits != None and key in valueLimits: 62 values = newDict[key] 63 if type(values) not in [types.ListType, types.TupleType]: 64 values = [values] 65 for value in values: 66 if value not in valueLimits[key]: 67 raise Exception("Illegal value " + str(value) + " for parameter " + key + " (allowed values: " + str(valueLimits[key]) + ")") 68 parameters = newDict 69 return parameters
70
71 -def getCombinations(parameters, order=None):
72 parameters = get(parameters) 73 parameterNames = sorted(parameters.keys()) 74 if order != None: 75 assert sorted(order) == parameterNames 76 parameterNames = order 77 #parameterNames.sort() 78 #parameterNames.reverse() # to put trigger parameter first (allows optimized 3-parameter grid) 79 parameterValues = [] 80 for parameterName in parameterNames: 81 parameterValues.append([]) 82 values = parameters[parameterName] 83 if isinstance(values, (list, tuple)): 84 for value in values: 85 parameterValues[-1].append( (parameterName,value) ) 86 else: 87 parameterValues[-1].append( (parameterName,values) ) 88 combinationLists = combine.combine(*parameterValues) 89 combinations = [] 90 for combinationList in combinationLists: 91 combinations.append({}) 92 for value in combinationList: 93 combinations[-1][value[0]] = value[1] 94 return combinations
95