polca / premise

Coupling Integrated Assessment Models output with Life Cycle Assessment.
BSD 3-Clause "New" or "Revised" License
110 stars 48 forks source link

error with consequential (ei391) #111

Closed simb-sdu closed 1 year ago

simb-sdu commented 1 year ago

Firstly: Kudos for the amazing progress on premise lately!

I try to run premise 1.6.1 on consequential ei 3.9.1, which gives an error. Works fine with the same script for the cutoff version.

code:

from premise import *
import brightway2 as bw
bw.projects.set_current(project)
from premise_gwp import add_premise_gwp
add_premise_gwp()

ndb_c = NewDatabase(
            scenarios=[
                {"model":"remind", "pathway":"SSP5-Base", "year":2050},
                {"model":"remind", "pathway":"SSP1-PkBudg500", "year":2050},
            ],
            source_db="consequential391", 
            source_version="3.9.1",
            key='xxx'
            system_model="consequential", # <-- Must specify "consequential"
)

ndb_c.update_all()

ndb_c.write_db_to_brightway()

I get the following errors:

/////////////////////// EXTRACTING IAM DATA ////////////////////////
Traceback (most recent call last):
  File "/home/simb/Nextcloud/sarah case study/premise-ei391.py", line 10, in <module>
    ndb_c = NewDatabase(
  File "/home/simb/miniconda3/envs/premise/lib/python3.9/site-packages/premise/ecoinvent_modification.py", line 605, in __init__
    pool.map(_fetch_iam_data, self.scenarios)
  File "/home/simb/miniconda3/envs/premise/lib/python3.9/multiprocessing/pool.py", line 364, in map
    return self._map_async(func, iterable, mapstar, chunksize).get()
  File "/home/simb/miniconda3/envs/premise/lib/python3.9/multiprocessing/pool.py", line 771, in get
    raise self._value
  File "/home/simb/miniconda3/envs/premise/lib/python3.9/multiprocessing/pool.py", line 125, in worker
    result = (True, func(*args, **kwds))
  File "/home/simb/miniconda3/envs/premise/lib/python3.9/multiprocessing/pool.py", line 48, in mapstar
    return list(map(*args))
  File "/home/simb/miniconda3/envs/premise/lib/python3.9/site-packages/premise/ecoinvent_modification.py", line 584, in _fetch_iam_data
    data = IAMDataCollection(
  File "/home/simb/miniconda3/envs/premise/lib/python3.9/site-packages/premise/data_collection.py", line 413, in __init__
    self.electricity_markets = self.__fetch_market_data(
  File "/home/simb/miniconda3/envs/premise/lib/python3.9/site-packages/premise/data_collection.py", line 746, in __fetch_market_data
    market_data = consequential_method(
  File "/home/simb/miniconda3/envs/premise/lib/python3.9/site-packages/premise/marginal_mixes.py", line 146, in consequential_method
    range_time: int = args.get("range time", False)
AttributeError: 'NoneType' object has no attribute 'get'
simb-sdu commented 1 year ago

tried to run pip install premise==1.6.2 to hope this would resolve the error - but pip cannot find this version

also, I don't know if it matters that my environment uses bw2io=0.8.7? I think 0.8.8 is only required to import ei 3.9.1. Hence once the database exists in my project it should not matter?

simb-sdu commented 1 year ago

if I add system_args=args to NewDatabase() with args = { "range time":0, "duration":0, "foresight":False, "lead time":False, "capital replacement rate":False, "measurement": 0, "weighted slope start": 0.75, "weighted slope end": 1.00 }

I instead get this following error

/////////////////////// EXTRACTING IAM DATA ////////////////////////
Traceback (most recent call last):
  File "/home/simb/Nextcloud/sarah case study/premise-ei391.py", line 21, in <module>
    ndb_c = NewDatabase(
  File "/home/simb/miniconda3/envs/premise/lib/python3.9/site-packages/premise/ecoinvent_modification.py", line 605, in __init__
    pool.map(_fetch_iam_data, self.scenarios)
  File "/home/simb/miniconda3/envs/premise/lib/python3.9/multiprocessing/pool.py", line 364, in map
    return self._map_async(func, iterable, mapstar, chunksize).get()
  File "/home/simb/miniconda3/envs/premise/lib/python3.9/multiprocessing/pool.py", line 771, in get
    raise self._value
  File "/home/simb/miniconda3/envs/premise/lib/python3.9/multiprocessing/pool.py", line 125, in worker
    result = (True, func(*args, **kwds))
  File "/home/simb/miniconda3/envs/premise/lib/python3.9/multiprocessing/pool.py", line 48, in mapstar
    return list(map(*args))
  File "/home/simb/miniconda3/envs/premise/lib/python3.9/site-packages/premise/ecoinvent_modification.py", line 584, in _fetch_iam_data
    data = IAMDataCollection(
  File "/home/simb/miniconda3/envs/premise/lib/python3.9/site-packages/premise/data_collection.py", line 413, in __init__
    self.electricity_markets = self.__fetch_market_data(
  File "/home/simb/miniconda3/envs/premise/lib/python3.9/site-packages/premise/data_collection.py", line 746, in __fetch_market_data
    market_data = consequential_method(
  File "/home/simb/miniconda3/envs/premise/lib/python3.9/site-packages/premise/marginal_mixes.py", line 194, in consequential_method
    "end": year + fetch_avg_leadtime(leadtime, shares),
  File "/home/simb/miniconda3/envs/premise/lib/python3.9/site-packages/premise/marginal_mixes.py", line 60, in fetch_avg_leadtime
    return (shares * leadtime).sum().astype(int).values.item(0)
  File "/home/simb/miniconda3/envs/premise/lib/python3.9/site-packages/xarray/core/_typed_ops.py", line 228, in __mul__
    return self._binary_op(other, operator.mul)
  File "/home/simb/miniconda3/envs/premise/lib/python3.9/site-packages/xarray/core/dataarray.py", line 4620, in _binary_op
    f(self.variable, other_variable)
  File "/home/simb/miniconda3/envs/premise/lib/python3.9/site-packages/xarray/core/_typed_ops.py", line 434, in __mul__
    return self._binary_op(other, operator.mul)
  File "/home/simb/miniconda3/envs/premise/lib/python3.9/site-packages/xarray/core/variable.py", line 2705, in _binary_op
    f(self_data, other_data) if not reflexive else f(other_data, self_data)
ValueError: operands could not be broadcast together with shapes (20,) (19,) 
simb-sdu commented 1 year ago
File "/home/simb/miniconda3/envs/premise/lib/python3.9/site-packages/premise/marginal_mixes.py", line 60, in fetch_avg_leadtime
    return (shares * leadtime).sum().astype(int).values.item(0)

changed to return shares.dot(leadtime).sum().astype(int).values.item(0) gives new error: TypeError: dot only operates on DataArrays.

simb-sdu commented 1 year ago

@romainsacchi any thoughts?

romainsacchi commented 1 year ago

Quick fix: add args = args or {} at line 153 in file /home/simb/miniconda3/envs/premise/lib/python3.9/site-packages/premise/marginal_mixes.py Long fix: wait for v.1.6.3 available in a few minutes.

romainsacchi commented 1 year ago

However 1.6.1 had another issue with the consequential version, fixed in 1.6.2. So you'd rather wait for 1.6.3.

simb-sdu commented 1 year ago

thanks for the quick help, @romainsacchi . I appreciate. And it works now after installing 1.6.3