from bw2data import methods
from ..errors import GeocollectionsMismatch
from .base_class import RegionalizationBase
[docs]
class OneSpatialScaleLCA(RegionalizationBase):
[docs]
matrix_labels = [
"biosphere_mm",
"inv_mapping_mm",
"reg_cf_mm",
"technosphere_mm",
]
def __init__(self, *args, **kwargs):
r"""Perform regionalized LCA calculation, where the inventory shares the same spatial scale as impact assessment.
The calculation formula is:
.. math::
h_{r} = \left[ \textbf{MR} \right]^{T} \circ [ \textbf{B} \cdot (\textbf{A}^{-1}f) ]
Uses sparse matrix `elementwise multiplication <http://docs.scipy.org/doc/scipy/reference/generated/scipy.sparse.csr_matrix.multiply.html>`_.
"""
super(OneSpatialScaleLCA, self).__init__(*args, **kwargs)
if self.method not in methods:
raise ValueError("Must pass valid `method` name")
self.inventory_geocollections = self.get_inventory_geocollections()
self.ia_geocollections = self.get_ia_geocollections()
missing = self.ia_geocollections.difference(self.inventory_geocollections)
if missing:
raise GeocollectionsMismatch(
"{} geocollection(s) needed by IA method but not in inventory".format(
missing
)
)
[docs]
def load_lcia_data(self):
self.create_inventory_mapping_matrix()
self.create_regionalized_characterization_matrix(self.inv_mapping_mm.col_mapper)
[docs]
def lcia_calculation(self):
"""Do regionalized LCA calculation.
Creates ``self.characterized_inventory``.
"""
self.characterized_inventory = (
self.inv_mapping_matrix * self.reg_cf_matrix
).T.multiply(self.inventory)
[docs]
def results_ia_spatial_scale(self):
raise NotImplementedError("No separate IA spatial scale")
[docs]
def results_inv_spatial_scale(self):
if not hasattr(self, "characterized_inventory"):
raise ValueError("Must do lcia calculation first")
return self.reg_cf_matrix.T.multiply(self.inventory * self.inv_mapping_matrix)