示例#1
0
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)
示例#2
0
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)