Example #1
0
    def __init__(self, modelInstance):
        self.modelInstance = modelInstance
        self.exporter = Bw2Exporter(modelInstance)

        self.bw2_database_name, self.bw2_database = self.exporter.export_to_bw2(
        )

        self.bw2_project_name = self.modelInstance.name
Example #2
0
        def status():

            db = self.modelInstance.database['items']
            products = OrderedDict(
                (k, v) for k, v in db.items() if v['type'] == 'product')
            inputs = OrderedDict((k, v) for k, v in products.items()
                                 if v['lcopt_type'] == 'input')
            ext_linked_inputs = OrderedDict(
                (k, v) for k, v in inputs.items() if v.get('ext_link'))
            #print(ext_linked_inputs)
            biosphere = OrderedDict((k, v) for k, v in products.items()
                                    if v['lcopt_type'] == 'biosphere')

            exporter = Bw2Exporter(self.modelInstance)
            exporter.evaluate_parameter_sets()
            evaluated_parameters = self.modelInstance.evaluated_parameter_sets

            totals = []

            for _, ps in evaluated_parameters.items():
                running_total = 0
                for k, v in ps.items():
                    running_total += abs(v)
                totals.append(running_total)

            non_zero = sum(totals) > 0

            #print(evaluated_parameters)

            has_model = len(db) != 0
            model_has_impacts = len(ext_linked_inputs) + len(biosphere) != 0
            model_has_parameters = len(
                self.modelInstance.parameter_sets) != 0 and non_zero
            model_is_runnable = all(
                [has_model, model_has_impacts, model_has_parameters])
            model_has_functions = len([
                x for k, x in self.modelInstance.params.items()
                if x['function'] is not None
            ]) != 0
            model_is_fully_formed = all([
                has_model, model_has_impacts, model_has_parameters,
                model_has_functions
            ])

            status_object = {
                'has_model': has_model,
                'model_has_impacts': model_has_impacts,
                'model_has_parameters': model_has_parameters,
                'model_has_functions': model_has_functions,
                'model_is_runnable': model_is_runnable,
                'model_is_fully_formed': model_is_fully_formed,
            }

            return json.dumps(status_object)
Example #3
0
    def __init__(self, modelInstance):
        self.modelInstance = modelInstance
        self.exporter = Bw2Exporter(modelInstance)

        self.bw2_database_name, self.bw2_database = self.exporter.export_to_bw2(
        )

        if self.modelInstance.useForwast:
            self.bw2_project_name = '{}_FORWAST'.format(
                self.modelInstance.name)
        else:
            self.bw2_project_name = self.modelInstance.name
Example #4
0
    def export_to_bw2(self):
        """
        Export the lcopt model in the native brightway 2 format

        returns name, database

        to use it to export, then import to brightway::

            name, db = model.export_to_bw2()
            import brightway2 as bw
            bw.projects.set_current('MyProject')
            new_db = bw.Database(name)
            new_db.write(db)
            new_db.process()

        """
        my_exporter = Bw2Exporter(self)
        name, bw2db = my_exporter.export_to_bw2()
        return name, bw2db
Example #5
0
    def parameter_sorting(self):
        parameters = self.modelInstance.params

        # create a default parameter set if there isn't one yet
        if len(self.modelInstance.parameter_sets) == 0:
            print('No parameter sets - creating a default set')
            self.modelInstance.parameter_sets['ParameterSet_1'] = OrderedDict()
            for param in parameters:
                self.modelInstance.parameter_sets['ParameterSet_1'][param] = 0

        exporter = Bw2Exporter(self.modelInstance)
        exporter.evaluate_parameter_sets()
        evaluated_parameters = self.modelInstance.evaluated_parameter_sets

        subsectionTitles = {
            'input': "Inputs from the 'technosphere'",
            'intermediate': "Inputs from other processes",
            'biosphere': "Direct emissions to the environment"
        }

        to_name = lambda x: parameters[x]['to_name']
        input_order = lambda x: parameters[x]['coords'][1]
        type_of = lambda x: parameters[x]['type']

        sorted_keys = sorted(parameters, key=input_order)

        sorted_parameters = []

        for target, items in groupby(sorted_keys, to_name):
            #print(target)

            section = {'name': target, 'my_items': []}

            sorted_exchanges = sorted(items, key=type_of)

            #print sorted_exchanges
            for type, exchanges in groupby(sorted_exchanges, type_of):
                #print('\t{}'.format(type))
                subsection = {'name': subsectionTitles[type], 'my_items': []}
                for exchange in exchanges:

                    if parameters[exchange].get('function'):
                        #print ('{} determined by a function'.format(exchange))
                        values = [
                            '{} = {:.3g}'.format(
                                parameters[exchange]['function'],
                                e_ps[exchange]) for e_ps_name, e_ps in
                            evaluated_parameters.items()
                        ]
                        isFunction = True
                    else:
                        values = [
                            ps[exchange] if exchange in ps.keys() else ''
                            for ps_name, ps in
                            self.modelInstance.parameter_sets.items()
                        ]
                        isFunction = False

                    #print('\t\t{} ({}) {}'.format(parameters[exchange]['from_name'], exchange, values))

                    subsection['my_items'].append({
                        'id':
                        exchange,
                        'name':
                        parameters[exchange]['from_name'],
                        'existing_values':
                        values,
                        'unit':
                        parameters[exchange]['unit'],
                        'isFunction':
                        isFunction
                    })

                section['my_items'].append(subsection)

            db_code = (self.modelInstance.database['name'],
                       parameters[exchange]['to'])
            #print(db_code)

            unit = self.modelInstance.database['items'][db_code]['unit']
            section['name'] = "{}\t(1 {})".format(target, unit)
            sorted_parameters.append(section)

        ext_section = {
            'name': 'Global Parameters',
            'my_items': [{
                'name': 'User created',
                'my_items': []
            }]
        }
        for e_p in self.modelInstance.ext_params:
            values = [
                ps[e_p['name']] if e_p['name'] in ps.keys() else e_p['default']
                for ps_name, ps in self.modelInstance.parameter_sets.items()
            ]
            ext_section['my_items'][0]['my_items'].append({
                'id':
                e_p['name'],
                'name':
                e_p['description'],
                'existing_values':
                values,
                'unit':
                e_p.get('unit', ''),
                'isFunction':
                False
            })

        sorted_parameters.append(ext_section)

        return sorted_parameters
Example #6
0
 def export_to_bw2(self):
     my_exporter = Bw2Exporter(self)
     name, bw2db = my_exporter.export_to_bw2()
     return name, bw2db