def fragment_lcia(self, fragment, quantity_ref, scenario=None, refresh=False, **kwargs): if scenario is None: scenario = '1' lcia_q = self.get_lcia_quantity(quantity_ref) endpoint = 'scenarios/%s/%s/%s/lciaresults' % (scenario, fragment, lcia_q.external_ref) lcia_r = self._archive.get_endpoint(endpoint, cache=False) if lcia_r is None or (isinstance(lcia_r, list) and all(i is None for i in lcia_r)): res = LciaResult(lcia_q, scenario=scenario) return res res = LciaResult(lcia_q, scenario=lcia_r.pop('scenarioID')) total = lcia_r.pop('total') for component in lcia_r['lciaScore']: self.add_lcia_component(res, component) self.check_total(res.total(), total) return res
def test_catalog_ref(self): """ Create an LCIA result using a catalog ref as quantity :return: """ qty = CatalogRef('fictitious.origin', 'dummy_ext_ref', entity_type='quantity', Name='Test Quantity') res = LciaResult(qty) self.assertEqual(res.total(), 0.0)
def lcia(self, process, ref_flow, quantity_ref, refresh=False, **kwargs): """ Antelope v1 doesn't support or even have any knowledge of process reference-flows. this is a somewhat significant design flaw. well, no matter. each antelopev1 process must therefore represent an allocated single operation process that has an unambiguous reference flow. This is a problem to solve on the server side; for now we just ignore the ref_flow argument. If the quantity ref is one of the ones natively known by the antelope server-- i.e. if it is a catalog ref whose origin matches the origin of the current archive-- then it is trivially used. Otherwise, the lcia call reduces to obtaining the inventory and computing LCIA locally. :param process: :param ref_flow: :param quantity_ref: :param refresh: :param kwargs: :return: """ lcia_q = self.get_lcia_quantity(quantity_ref) endpoint = '%s/%s/lciaresults' % (process, lcia_q.external_ref) lcia_r = self._archive.get_endpoint(endpoint, cache=False) res = LciaResult(lcia_q, scenario=lcia_r.pop('scenarioID')) total = lcia_r.pop('total') if len(lcia_r['lciaScore']) > 1: raise AntelopeV1Error( 'Process LCIA result contains too many components\n%s' % process) component = lcia_r['lciaScore'][0] cum = component['cumulativeResult'] self.check_total(cum, total) if 'processes/%s' % component['processID'] != process: raise AntelopeV1Error('Reference mismatch: %s begat %s' % (process, component['processID'])) self.add_lcia_component(res, component) self.check_total(res.total(), total) return res