def do_economy_parameters(simInfo, pList, parameterDefs): """Parse the economy parameters and create the economies Each economy must have a name. Its parameters inherit from the simulator parameters @param pList: list of 5-tuples of parameters @param parameterDefs: @raise: ParameterError """ economyList = [(eName, dType, dName, dVal) for eType, eName, dType, dName, dVal in pList if eType == 'economy'] if not economyList: msg = "No economy parameters in %s" % simInfo.runDesc logging.error(msg) raise ParameterError(msg) # go through the list, sorted by economy name so all the params for one economy are together # and the economies are always created in the same order currentName = None currentParams = None for eName, dType, dName, dVal in sorted(economyList, key=itemgetter(0)): if eName != currentName: # starting a new one currentName = eName currentParams = Parameters(parameterDefs, simInfo.theParameters) econ = Economy(simInfo, eName, currentParams) logger.debug("Setting parameters for %s" % econ) if dType == 'parameter': currentParams.set(dName, dVal)
def do_bank_parameters(simInfo, pList, parameterDefs): """Parse the bank parameters and create the banks Each bank must have a name and must belong to an economy. Its parameters inherit from those of its economy. @param pList: list of 5-tuples of parameters @param parameterDefs: @raise: ParameterError """ bankList = [(eName, dType, dName, dVal) for eType, eName, dType, dName, dVal in pList if eType == 'bank'] if not bankList: msg = "No bank parameters in %s" % simInfo.runDesc logging.error(msg) raise ParameterError(msg) # go through the list, sorted by bank name so all the params for one bank are together, with attributes # before params, and banks are always created in the same order currentName = None currentParams = None currentEconomyName = None for eName, dType, dName, dVal in sorted(bankList, key=itemgetter(0, 1)): if eName != currentName: # starting a new one currentName = eName currentParams = Parameters(parameterDefs, simInfo.theParameters) currentEconomyName = None logger.debug("Setting parameters for bank %s" % currentName) if dType == 'attribute' and dName == 'economy': currentEconomyName = dVal if not currentEconomyName in simInfo.economyDirectory: msg = "Invalid economy %r specified for bank %s in %s" % ( currentEconomyName, currentName, simInfo.runDesc) logger.error(msg) raise ParameterError(msg) econ = simInfo.economyDirectory[currentEconomyName] currentParams = Parameters(parameterDefs, econ.params) followMe = simInfo.followBank == currentName bank = Bank(simInfo, currentName, econ, currentParams, followMe) logger.debug("Created %s" % bank) elif dType == 'parameter': if not currentEconomyName: msg = "No economy specified for bank %s in %s" % (currentName, simInfo.runDesc) logger.error(msg) raise ParameterError(msg) currentParams.set(dName, dVal)