def lca(self, method=None, amount=1.): """Shortcut to construct an LCA object for this activity.""" from bw2calc import LCA lca = LCA({self: amount}, method=method) lca.lci() if method is not None: lca.lcia() lca.fix_dictionaries() return lca
def lca(self, method=None, amount=None): """Shortcut to construct an LCA object for this exchange **input**. Uses the exchange amount if no other amount is provided.""" from bw2calc import LCA if amount is None: amount = self['amount'] lca = LCA({self.input: amount}, method=method) lca.lci() if method is not None: lca.lcia() lca.fix_dictionaries() return lca
def lci_matrices_to_excel(database_name, include_descendants=True): """Fake docstring""" from bw2calc import LCA print("Starting Excel export. This can be slow for large matrices!") safe_name = safe_filename(database_name, False) filepath = os.path.join(projects.output_dir, safe_name + ".xlsx") lca = LCA({Database(database_name).random(): 1}) lca.load_lci_data() lca.fix_dictionaries() if not include_descendants: lca.activity_dict = { key: value for key, value in lca.activity_dict.items() if key[0] == database_name } # Drop biosphere flows with zero references # TODO: This will ignore (-1 + 1 = 0) references lca.biosphere_dict = { key: value for key, value in lca.biosphere_dict.items() if lca.biosphere_matrix[lca.biosphere_dict[key], :].sum() != 0 } workbook = xlsxwriter.Workbook(filepath) bold = workbook.add_format({'bold': True}) print("Sorting objects") sorted_activity_keys = sorted([(Database.get(key).get("name") or u"Unknown", key) for key in lca.activity_dict]) sorted_product_keys = sorted([(Database.get(key).get("name") or u"Unknown", key) for key in lca.product_dict]) sorted_bio_keys = sorted([(Database.get(key).get("name") or u"Unknown", key) for key in lca.biosphere_dict]) tm_sheet = workbook.add_worksheet('technosphere') tm_sheet.set_column('A:A', 50) data = Database(database_name).load() # Labels for index, data in enumerate(sorted_activity_keys): tm_sheet.write_string(0, index + 1, data[0]) for index, data in enumerate(sorted_product_keys): tm_sheet.write_string(index + 1, 0, data[0]) print("Entering technosphere matrix data") coo = lca.technosphere_matrix.tocoo() # Translate row index to sorted product index act_dict = {obj[1]: idx for idx, obj in enumerate(sorted_activity_keys)} pro_dict = {obj[1]: idx for idx, obj in enumerate(sorted_product_keys)} bio_dict = {obj[1]: idx for idx, obj in enumerate(sorted_bio_keys)} pro_lookup = {v: pro_dict[k] for k, v in lca.product_dict.items()} bio_lookup = {v: bio_dict[k] for k, v in lca.biosphere_dict.items()} act_lookup = {v: act_dict[k] for k, v in lca.activity_dict.items()} # Matrix values for row, col, value in zip(coo.row, coo.col, coo.data): tm_sheet.write_number(pro_lookup[row] + 1, act_lookup[col] + 1, value) bm_sheet = workbook.add_worksheet('biosphere') bm_sheet.set_column('A:A', 50) data = Database(database_name).load() # Labels for index, data in enumerate(sorted_activity_keys): bm_sheet.write_string(0, index + 1, data[0]) for index, data in enumerate(sorted_bio_keys): bm_sheet.write_string(index + 1, 0, data[0]) print("Entering biosphere matrix data") coo = lca.biosphere_matrix.tocoo() # Matrix values for row, col, value in zip(coo.row, coo.col, coo.data): bm_sheet.write_number(bio_lookup[row] + 1, act_lookup[col] + 1, value) COLUMNS = (u"Index", u"Name", u"Reference product", u"Unit", u"Categories", u"Location") tech_sheet = workbook.add_worksheet('technosphere-labels') tech_sheet.set_column('B:B', 60) tech_sheet.set_column('C:C', 30) tech_sheet.set_column('D:D', 15) tech_sheet.set_column('E:E', 30) print("Writing metadata") # Header for index, col in enumerate(COLUMNS): tech_sheet.write_string(0, index, col, bold) tech_sheet.write_comment( 'C1', "Only for ecoinvent 3, where names =/= products.", ) for index, data in enumerate(sorted_activity_keys): obj = Database.get(data[1]) tech_sheet.write_number(index + 1, 0, index + 1) tech_sheet.write_string(index + 1, 1, obj.get(u'name') or u'Unknown') tech_sheet.write_string(index + 1, 2, obj.get(u'reference product') or u'') tech_sheet.write_string(index + 1, 3, obj.get(u'unit') or u'Unknown') tech_sheet.write_string(index + 1, 4, u" - ".join(obj.get(u'categories') or [])) tech_sheet.write_string(index + 1, 5, obj.get(u'location') or u'Unknown') COLUMNS = ( u"Index", u"Name", u"Unit", u"Categories", ) bio_sheet = workbook.add_worksheet('biosphere-labels') bio_sheet.set_column('B:B', 60) bio_sheet.set_column('C:C', 15) bio_sheet.set_column('D:D', 30) # Header for index, col in enumerate(COLUMNS): bio_sheet.write_string(0, index, col, bold) for index, data in enumerate(sorted_bio_keys): obj = Database.get(data[1]) bio_sheet.write_number(index + 1, 0, index + 1) bio_sheet.write_string(index + 1, 1, obj.get(u'name') or u'Unknown') bio_sheet.write_string(index + 1, 2, obj.get(u'unit') or u'Unknown') bio_sheet.write_string(index + 1, 3, u" - ".join(obj.get(u'categories') or [])) workbook.close() return filepath
def lci_matrices_to_matlab(database_name): from bw2calc import LCA lca = LCA({Database(database_name).random(): 1}) lca.lci() lca.fix_dictionaries() ra, rp, rb = lca.reverse_dict() safe_name = safe_filename(database_name, False) scipy.io.savemat( os.path.join(projects.output_dir, safe_name + ".mat"), { "technosphere": lca.technosphere_matrix, "biosphere": lca.biosphere_matrix }, ) workbook = xlsxwriter.Workbook(os.path.join(dirpath, safe_name + ".xlsx")) bold = workbook.add_format({"bold": True}) COLUMNS = ("Index", "Name", "Reference product", "Unit", "Categories", "Location") tech_sheet = workbook.add_worksheet("technosphere") tech_sheet.set_column("B:B", 60) tech_sheet.set_column("C:C", 30) tech_sheet.set_column("D:D", 15) tech_sheet.set_column("E:E", 30) # Header for index, col in enumerate(COLUMNS): tech_sheet.write_string(0, index, col, bold) tech_sheet.write_comment( "C1", "Only for ecoinvent 3, where names =/= products.", ) data = Database(database_name).load() for index, key in sorted(ra.items()): tech_sheet.write_number(index + 1, 0, index + 1) tech_sheet.write_string(index + 1, 1, data[key].get("name") or "Unknown") tech_sheet.write_string(index + 1, 2, data[key].get("reference product") or "") tech_sheet.write_string(index + 1, 3, data[key].get("unit") or "Unknown") tech_sheet.write_string(index + 1, 4, " - ".join(data[key].get("categories") or [])) tech_sheet.write_string(index + 1, 5, data[key].get("location") or "Unknown") COLUMNS = ( "Index", "Name", "Unit", "Categories", ) biosphere_dicts = {} bio_sheet = workbook.add_worksheet("biosphere") bio_sheet.set_column("B:B", 60) bio_sheet.set_column("C:C", 15) bio_sheet.set_column("D:D", 30) # Header for index, col in enumerate(COLUMNS): bio_sheet.write_string(0, index, col, bold) for index, key in sorted(rb.items()): if key[0] not in biosphere_dicts: biosphere_dicts[key[0]] = Database(key[0]).load() obj = biosphere_dicts[key[0]][key] bio_sheet.write_number(index + 1, 0, index + 1) bio_sheet.write_string(index + 1, 1, obj.get("name", "Unknown")) bio_sheet.write_string(index + 1, 2, obj.get("unit", "Unknown")) bio_sheet.write_string(index + 1, 3, " - ".join(obj.get("categories", []))) workbook.close() return dirpath