Source code for bw2calc.least_squares
# -*- coding: utf-8 -*-
from __future__ import print_function, unicode_literals
from eight import *
from .errors import EfficiencyWarning, NoSolutionFound
from .lca import LCA
from scipy.sparse.linalg import lsqr, lsmr
import warnings
[docs]
class LeastSquaresLCA(LCA):
"""Solve overdetermined technosphere matrix with more products than activities using least-squares approximation.
See also:
* `Multioutput processes in LCA <http://chris.mutel.org/multioutput.html>`_
* `LSMR in SciPy <http://docs.scipy.org/doc/scipy/reference/generated/scipy.sparse.linalg.lsmr.html#scipy.sparse.linalg.lsmr>`_
* `Another least-squares algorithm in SciPy <http://docs.scipy.org/doc/scipy/reference/generated/scipy.sparse.linalg.lsqr.html#scipy.sparse.linalg.lsqr>`_
"""
[docs]
def solve_linear_system(self, solver=lsmr):
if self.technosphere_matrix.shape[0] == self.technosphere_matrix.shape[1]:
warnings.warn("Don't use LeastSquaresLCA for square matrices",
EfficiencyWarning)
self.solver_results = solver(
self.technosphere_matrix,
self.demand_array
)
if self.solver_results[1] not in {1, 2}:
warnings.warn(
"No suitable solution found - supply array is probably nonsense",
NoSolutionFound
)
return self.solver_results[0]
[docs]
def decompose_technosphere(self):
raise NotImplementedError("Can't decompose rectangular technosphere")