コード例 #1
0
ファイル: mcstrans.py プロジェクト: tedx/mls-tools
class Domain:

    def __init__(self, name):
        self.name = name
        self.sensitivities = OrderedDict()
        self.baseClassifications = OrderedDict()
        self.rawToTrans = OrderedDict()
        self.transToRaw = OrderedDict()
        self.groups = OrderedDict()

    def addSensitivity(self, sensitivity, level):
        if self.sensitivities.has_key(sensitivity) == 0:
            self.sensitivities[sensitivity] = level

    def findSensitivityByName(self, sensitivity):
        for k, v in self.sensitivities.iteritems():
#            print k,v
            if v == sensitivity:
                return sensitivity
        return None
        

    def addGroup(self, groupName):
        group = Group(groupName)
        self.groups[groupName] = group
        return group

    def addBaseClassification(self, bcName):
        baseClassification = BaseClassification(bcName)
        self.baseClassifications[bcName] = baseClassification
        return baseClassification

    def str(self):
        str = ""
        str = str + "Domain name: %s\n" % (self.name)
        str = str + "Sensitivities:"
        for key in self.sensitivities.keys():
            str = str + "%s %s\n" % (key, self.sensitivities[key])
        str = str + "Base classifications:\n"
        for key in self.baseClassifications.keys():
            str = str + str(self.baseClassifications[key])
        str = str + "Groups:\n"
        for key in self.groups.keys():
            str = str + str(self.groups[key])
#        str = str + "Raw to translated:"
#        for key in self.rawToTrans.keys():
#            str = str + "%s %s" % (key, self.rawToTrans[key])
#        str = str + "Translated to raw:"
#        for key in self.transToRaw.keys():
#            str = str + "%s %s" % (key, self.transToRaw[key])
        return str
コード例 #2
0
ファイル: mcstrans.py プロジェクト: tedx/mls-tools
class Domain:
    def __init__(self, name):
        self.name = name
        self.sensitivities = OrderedDict()
        self.baseClassifications = OrderedDict()
        self.rawToTrans = OrderedDict()
        self.transToRaw = OrderedDict()
        self.groups = OrderedDict()

    def addSensitivity(self, sensitivity, level):
        if self.sensitivities.has_key(sensitivity) == 0:
            self.sensitivities[sensitivity] = level

    def findSensitivityByName(self, sensitivity):
        for k, v in self.sensitivities.iteritems():
            #            print k,v
            if v == sensitivity:
                return sensitivity
        return None

    def addGroup(self, groupName):
        group = Group(groupName)
        self.groups[groupName] = group
        return group

    def addBaseClassification(self, bcName):
        baseClassification = BaseClassification(bcName)
        self.baseClassifications[bcName] = baseClassification
        return baseClassification

    def str(self):
        str = ""
        str = str + "Domain name: %s\n" % (self.name)
        str = str + "Sensitivities:"
        for key in self.sensitivities.keys():
            str = str + "%s %s\n" % (key, self.sensitivities[key])
        str = str + "Base classifications:\n"
        for key in self.baseClassifications.keys():
            str = str + str(self.baseClassifications[key])
        str = str + "Groups:\n"
        for key in self.groups.keys():
            str = str + str(self.groups[key])


#        str = str + "Raw to translated:"
#        for key in self.rawToTrans.keys():
#            str = str + "%s %s" % (key, self.rawToTrans[key])
#        str = str + "Translated to raw:"
#        for key in self.transToRaw.keys():
#            str = str + "%s %s" % (key, self.transToRaw[key])
        return str
コード例 #3
0
ファイル: mcstrans.py プロジェクト: tedx/mls-tools
class BaseClassification:
    def __init__(self, name):
        self.name = name
        self.sensitivities = OrderedDict()

    def addSensitivity(self, sensitivity, level):
        if self.sensitivities.has_key(sensitivity) == 0:
            self.sensitivities[sensitivity] = level

    def findSensitivityByName(self, sensitivity):
        for k, v in self.sensitivities.iteritems():
            #            print k,v
            if v == sensitivity:
                return v, k
        return None

    def __str__(self):
        str = ""
        str = str + "Name: %s\n" % (self.name)
        str = str + "Sensitivities:\n"
        for key in self.sensitivities.keys():
            str = str + "%s %s\n" % (key, self.sensitivities[key])
        return str
コード例 #4
0
ファイル: mcstrans.py プロジェクト: tedx/mls-tools
class BaseClassification:

    def __init__(self, name):
        self.name = name
        self.sensitivities = OrderedDict()

    def addSensitivity(self, sensitivity, level):
        if self.sensitivities.has_key(sensitivity) == 0:
            self.sensitivities[sensitivity] = level

    def findSensitivityByName(self, sensitivity):
        for k, v in self.sensitivities.iteritems():
#            print k,v
            if v == sensitivity:
                return v, k
        return None
        
    def __str__(self):
        str = ""
        str = str + "Name: %s\n" % (self.name)
        str = str + "Sensitivities:\n"
        for key in self.sensitivities.keys():
            str = str + "%s %s\n" % (key, self.sensitivities[key])
        return str
コード例 #5
0
ファイル: Model.py プロジェクト: AndreLester/xyzsolve
class Model(object):

    def __init__(self):
        self.Identifiers = OrderedDict()
        self.Parameters = OrderedDict()
        self.Variables = OrderedDict()
        self.Equations = OrderedDict()
        self.DifferentialEquations = OrderedDict()
        self.Functions = OrderedDict()
        self.InitialValues = OrderedDict()
        self.Bounds = {}

        #---------Some builtin functions-------
        self.Functions['exp'] = [('math.exp')]
        self.Functions['log'] = [('math.log')]
        self.Functions['log10'] = [('math.log10')]
        self.Functions['pow'] = [('math.pow')]
        self.Functions['sqrt'] = [('math.sqrt')]


        self.Functions['sin'] = [('math.sin')]
        self.Functions['cos'] = [('math.cos')]
        self.Functions['tan'] = [('math.tan')]
        self.Functions['hypot'] = [('math.hypot')]

        self.Functions['asin'] = [('math.asin')]
        self.Functions['acos'] = [('math.acos')]
        self.Functions['atan'] = [('math.atan')]


        self.Functions['radians'] = [('math.radians')]
        self.Functions['degrees'] = [('math.degrees')]


    def addInitialValue(self, name, value):
        self.InitialValues[name] = value

    def addIdentifier(self, name):
        if name not in self.Identifiers.keys():
            self.Identifiers[name] = 'id_' + str(len(self.Identifiers)).zfill(3)

        return self.Identifiers[name]

    def addVariable(self, id):
        attrs_present, parts = has_attributes(id)
        if attrs_present:
            raise EquationSenseError, 'Cannot use attributes in equation'

        if not self.Variables.has_key(id):
            self.Variables[id] = 0.0

        return 'x[' + str(self.Variables.index(id)) + ']'

    def addEquation(self, LHS, RHS, eqn_id = None):
        if eqn_id is None:
            eqn_id = '#' + str(len(self.Equations) + 1)

        self.Equations[eqn_id] = (LHS, RHS)

    def addVariableBound(self, id, lower_bound, upper_bound):
        existing = self.Bounds.get(id, None)

        if existing:
            if lower_bound is not None:
                existing = (float(lower_bound), existing[1])
            if upper_bound is not None:
                existing = (existing[0], float(upper_bound))

            self.Bounds[id] = existing
        else:
            if lower_bound is not None:
                lower_bound = float(lower_bound)
            if upper_bound is not None:
                upper_bound = float(upper_bound)

            self.Bounds[id] = (lower_bound, upper_bound)


    def addParameter(self, id, value):

        attrs_present, parts = has_attributes(id)
        if attrs_present:
            actual_id = id.split('.')[0]
            parts = [p.lower() for p in parts]

            if len(parts) == 1 and 'guess' in parts:
                self.addInitialValue(actual_id, value)
            elif len(parts) == 1 and 'min' in parts:
                self.addVariableBound(actual_id, value, None)
            elif len(parts) == 1 and 'max' in parts:
                self.addVariableBound(actual_id, None, value)
            else:
                raise EquationSenseError, 'Only supports guess, min and max attributes'

        else:
            #Check if the id is in the variable map, if it is delete it
            #and place it in the parameters map

            #This happens when a parameters is defined after its use
            #in an equation
            if self.Variables.has_key(id):
                del self.Variables[id]

            self.Parameters[id] = value

    def addFunction(self, func_id):
        if not self.Functions.has_key(func_id):
            raise EquationSenseError, '%s is not a valid function in this context.' % func_id

        return self.Functions[func_id][0]

    def generate_nle(self):
        #Make sure number of variables == number of equations
        if len(self.Variables) != len(self.Equations):
            raise EquationSenseError, 'Number of equations does not equal number of variables (No least squares solutions yet!)'

        line_count = 1
        #print self.Identifiers

        #Debugging only
        #output = 'def f_nle(n, x, f, iflag): #%d\n\tprint x\n' % (line_count) #for dnsqe

        output = 'def f_nle(n, x, f, iflag): #%d\n' % (line_count) #for dnsqe

        line_count += 1
        #output = 'def f_nle(iflag, m, n, x, f, fjac, ldfjac):\n' #for d1nlse
        #Dump out all the parameters
        for param in self.Parameters.keys():
            id = self.Identifiers[param]
            value = self.Parameters[param]
            output = output +  '\t%s = %s #%s %d\n' % (id, value, param, line_count)
            line_count += 1

        #Dump out all the variables
        var_count = 0
        for var in self.Variables.keys():
            id = self.Identifiers[var]
            output = output + '\t%s = x[%d] #%s %d\n' % (id, var_count, var, line_count)
            var_count += 1
            line_count += 1

        #Dump out all the equations
        eqn_count = 0
        for eqn in self.Equations.keys():
            LHS, RHS = self.Equations[eqn]
            eqn_string = '(%s) - (%s)' % (LHS, RHS)
            output = output +  '\tf[%d] = %s;\n' % (eqn_count, eqn_string)

            #General partial derivatives -- Begin
            eqn_count += 1
            line_count += 1

        output = output + '\treturn True\n'
        #print output
        return output

    def generate_nle_initial_guess(self, default=1.0):
        n = len(self.Variables)
        x = [default]*n
        f = [-1.0]*n
        for initvalue in self.InitialValues.keys():
            if self.Variables.has_key(initvalue):
                index = self.Variables.index(initvalue)
                x[index] = eval(self.InitialValues[initvalue])

        bounds = None
        #Do we have any bounds?
        bounds_count = len(self.Bounds.keys())
        if bounds_count > 0:
            bounds = [None]*len(self.Variables)
            i = 0
            for v in self.Variables:
                bounds_item = self.Bounds.get(v, None)
                bounds[i] = bounds_item
                i += 1

        return x, f, bounds

    def solve(self, x, f, bounds=None):
        f_nle_string = self.generate_nle()
        exec(f_nle_string)

        x, f, fnorm, info_code, info_mesg = dnsqe_nice(f_nle, None, x, bounds=bounds)

        i = 0
        keys = self.Variables.keys()
        for i in xrange(0, len(x)):
            self.Variables[keys[i]] = x[i]

        self.fnorm = fnorm;
        #print 'Norm of function residual vector:', fnorm
        self.info = info_code, info_mesg
        #print 'Info:', info_code
        #print 'Message:', info_mesg
        ret = ''
        if self.info[0] == 1:
            ret = ret + "Most recent solution:\n"
            ret = ret + "---------------------\n"
            ret = ret + "Solution norm: " + str(self.fnorm) + "\n"
            ret = ret + pretty_variables(self.Variables)
            return '\n' + ret + '\n'
        else:
            ret = ret + self.info[1]
            ret = ret + "---------------------\n"
            ret = ret + "Solution norm: " + str(self.fnorm) + "\n"
            ret = ret + pretty_variables(self.Variables)
            return '\n' + ret + '\n'
コード例 #6
0
ファイル: config.py プロジェクト: jorgejmt94/TFG
class Config(dict):
    def __init__(self, user_file=None):
        self.config = OrderedDict()
        self.user_file = user_file
        self.update(self.get_running_config())

    def set_user_file(self, user_file):
        self.user_file = user_file

    def add_category(self, category):
        if not self.config.has_key(category):
            self.config[category] = OrderedDict()

    def add_setting(self,
                    category,
                    setting,
                    value,
                    about='',
                    type=0,
                    stub=False,
                    **kwargs):
        assert category != None, 'Must specify a category'
        assert setting != None, 'Must specify a setting'
        assert value != None, 'Must specify a value'
        self.add_category(category)
        if not self.config[category].has_key(setting):
            self.config[category][setting] = OrderedDict()
        self.config[category][setting]['value'] = value
        if not stub:
            self.config[category][setting]['about'] = about
            self.config[category][setting]['type'] = type
            for k in kwargs:
                self.config[category][setting][k] = kwargs[k]
        self.update(self.get_running_config())

    def get_setting(self, category, setting, complete=False):
        assert category != None, 'Must specify a category'
        assert setting != None, 'Must specify a setting'
        assert self.config.has_key(category), 'Category does not exist'
        assert self.config[category].has_key(
            setting), 'Setting in category does not exist'
        assert self.config[category][setting].has_key(
            'value'), 'Setting in category has no value'
        if complete:
            return self.config[category][setting]
        else:
            return self.config[category][setting]['value']

    def update_setting_value(self, category, setting, value):
        assert category != None, 'Must specify a category'
        assert setting != None, 'Must specify a setting'
        assert value != None, 'Must specify a value'
        if self.config.has_key(category):
            if self.config[category].has_key(setting):
                self.config[category][setting]['value'] = value
                self.update(self.get_running_config())

    def get_settings(self, category):
        assert category != None, 'Must specify a category'
        assert self.config.has_key(category), 'Category does not exist'
        return self.config[category].keys()

    def get_categories(self):
        return self.config.keys()

    def update_from_string(self, json_config):
        try:
            config = json.loads(json_config)
            for c in config.keys():
                for s in config[c].keys():
                    self.update_setting_value(c, s, config[c][s]['value'])
        except ValueError:
            sys.stderr.write('Empty or malformed config file found!\n')

    def update_from_user_file(self):
        if self.user_file and os.path.isfile(self.user_file):
            with open(self.user_file, 'r') as f:
                return self.update_from_string(f.read())

    def get_running_config(self):
        tmpCfg = {}
        for category in self.config.keys():
            tmpCfg[category] = {}
            for setting in self.config[category].keys():
                tmpCfg[category][setting] = self.config[category][setting][
                    'value']
        return tmpCfg

    def __str__(self):
        return json.dumps(self.get_running_config(),
                          separators=(',', ':'),
                          sort_keys=True)
コード例 #7
0
ファイル: config.py プロジェクト: RyanHope/jsonConfig
class Config(dict):
        
    def __init__(self, user_file=None):
        self.config = OrderedDict()
        self.user_file = user_file
        self.update(self.get_running_config())
        
    def set_user_file(self, user_file):
        self.user_file = user_file
        
    def add_category(self, category):
        if not self.config.has_key(category):
            self.config[category] = OrderedDict()
            
    def add_setting(self, category, setting, value, about='', type=0, stub=False, **kwargs):
        assert category != None, 'Must specify a category'
        assert setting != None, 'Must specify a setting'
        assert value != None, 'Must specify a value'
        self.add_category(category)
        if not self.config[category].has_key(setting):
            self.config[category][setting] = OrderedDict()
        self.config[category][setting]['value'] = value
        if not stub:
            self.config[category][setting]['about'] = about
            self.config[category][setting]['type'] = type
            for k in kwargs:
                self.config[category][setting][k] = kwargs[k]
        self.update(self.get_running_config())
        
    def get_setting(self, category, setting, complete=False):
        assert category != None, 'Must specify a category'
        assert setting != None, 'Must specify a setting'
        assert self.config.has_key(category), 'Category does not exist'
        assert self.config[category].has_key(setting), 'Setting in category does not exist'
        assert self.config[category][setting].has_key('value'), 'Setting in category has no value'
        if complete:
            return self.config[category][setting]
        else:
            return self.config[category][setting]['value']
        
    def update_setting_value(self, category, setting, value):
        assert category != None, 'Must specify a category'
        assert setting != None, 'Must specify a setting'
        assert value != None, 'Must specify a value'
        if self.config.has_key(category):
            if self.config[category].has_key(setting):
                self.config[category][setting]['value'] = value
                self.update(self.get_running_config())
    
    def get_settings(self, category):
        assert category != None, 'Must specify a category'
        assert self.config.has_key(category), 'Category does not exist'
        return self.config[category].keys()
    
    def get_categories(self):
        return self.config.keys()
        
    def update_from_string(self, json_config):
        try:
            config = json.loads(json_config)
            for c in config.keys():
                for s in config[c].keys():
                    self.update_setting_value(c, s, config[c][s]['value'])
        except ValueError:
            sys.stderr.write('Empty or malformed config file found!\n')
        
                
    def update_from_user_file(self):
        if self.user_file and os.path.isfile(self.user_file):
            with open(self.user_file, 'r') as f:
                return self.update_from_string(f.read())
            
    def get_running_config(self):
        tmpCfg = {}
        for category in self.config.keys():
            tmpCfg[category] = {}
            for setting in self.config[category].keys():
                tmpCfg[category][setting] = self.config[category][setting]['value']
        return tmpCfg
            
    def __str__(self):
        return json.dumps(self.get_running_config(), separators=(',', ':'), sort_keys=True)