Source code for bw2io.importers.ecoinvent_lcia
from .base_lcia import LCIAImporter
from ..data import convert_lcia_methods_data
from ..strategies import (
drop_unspecified_subcategories,
link_iterable_by_fields,
normalize_units,
rationalize_method_names,
set_biosphere_type,
)
from ..strategies.lcia import fix_ecoinvent_38_lcia_implementation
from bw2data import Database, config
from numbers import Number
import functools
import warnings
[docs]
class EcoinventLCIAImporter(LCIAImporter):
def __init__(self):
# Needs to define strategies in ``__init__`` because
# ``config.biosphere`` is dynamic
[docs]
self.strategies = [
normalize_units,
set_biosphere_type,
drop_unspecified_subcategories,
functools.partial(
link_iterable_by_fields,
other=Database(config.biosphere),
fields=("name", "categories"),
),
]
[docs]
self.applied_strategies = []
_, self.cf_data, self.units, self.file = convert_lcia_methods_data()
self.separate_methods()
[docs]
def add_rationalize_method_names_strategy(self):
self.strategies.append(rationalize_method_names)
[docs]
def separate_methods(self):
"""Separate the list of CFs into distinct methods"""
methods = {obj["method"] for obj in self.cf_data}
# metadata = {obj["name"]: obj for obj in self.csv_data}
self.data = {}
missing = set()
for line in self.cf_data:
if line["method"] not in self.units:
missing.add(line["method"])
if missing:
_ = lambda x: sorted([str(y) for y in x])
warnings.warn("Missing units for following:" + " | ".join(_(missing)))
for line in self.cf_data:
assert isinstance(line["amount"], Number)
if line["method"] not in self.data:
self.data[line["method"]] = {
"filename": self.file,
"unit": self.units.get(line["method"], ""),
"name": line["method"],
"description": "",
"exchanges": [],
}
self.data[line["method"]]["exchanges"].append(
{
"name": line["name"],
"categories": line["categories"],
"amount": line["amount"],
}
)
self.data = list(self.data.values())
# for obj in self.data:
# obj.update(metadata.get(obj["name"], {}))