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
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)
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
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
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
def export_to_bw2(self): my_exporter = Bw2Exporter(self) name, bw2db = my_exporter.export_to_bw2() return name, bw2db