Skip to content

Commit

Permalink
Fix unlinked exchanges with ei consequential 3.8/3.9
Browse files Browse the repository at this point in the history
  • Loading branch information
romainsacchi committed Sep 6, 2024
1 parent 196ffb6 commit 1a1f9bd
Show file tree
Hide file tree
Showing 8 changed files with 396 additions and 618 deletions.
2 changes: 1 addition & 1 deletion dev/Untitled.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -5227,7 +5227,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.10.13"
"version": "3.11.8"
}
},
"nbformat": 4,
Expand Down
759 changes: 144 additions & 615 deletions dev/test_consequential.ipynb

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion premise/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
"clear_inventory_cache",
"get_regions_definition",
)
__version__ = (2, 1, 2)
__version__ = (2, 1, 3)


from premise.new_database import NewDatabase
Expand Down
Binary file modified premise/data/additional_inventories/lci-PV-perovskite.xlsx
Binary file not shown.
6 changes: 5 additions & 1 deletion premise/new_database.py
Original file line number Diff line number Diff line change
Expand Up @@ -713,7 +713,7 @@ def __import_inventories(self) -> List[dict]:
# with HiddenPrints():
# Manual import
# file path and original ecoinvent version
data = []
data, unlinked = [], []
filepaths = [
(FILEPATH_OIL_GAS_INVENTORIES, "3.7"),
(FILEPATH_CARMA_INVENTORIES, "3.5"),
Expand Down Expand Up @@ -817,6 +817,10 @@ def __import_inventories(self) -> List[dict]:
datasets = inventory.merge_inventory()
data.extend(datasets)
self.database.extend(datasets)
unlinked.extend(inventory.list_unlinked)

if len(unlinked) > 0:
raise ValueError("Fix the unlinked exchanges before proceeding")

return data

Expand Down
82 changes: 82 additions & 0 deletions tests/test_process_ei38_conseq.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
import gc
import os

import bw2calc
import bw2data
import bw2io
import pytest
from dotenv import load_dotenv

from premise import NewDatabase, clear_inventory_cache
from premise.utils import delete_all_pickles

load_dotenv()


ei_user = os.environ["EI_USERNAME"]
ei_pass = os.environ["EI_PASSWORD"]
key = os.environ["IAM_FILES_KEY"]
# convert to bytes
key = key.encode()

ei_version = "3.8"
system_model = "consequential"


scenarios = [
{"model": "remind", "pathway": "SSP2-Base", "year": 2050},
{"model": "image", "pathway": "SSP2-RCP19", "year": 2050},
]


@pytest.mark.slow
def test_brightway():

bw2data.projects.set_current(f"ecoinvent-{ei_version}-{system_model}")

clear_inventory_cache()

if f"ecoinvent-{ei_version}-{system_model}" not in bw2data.databases:
bw2io.import_ecoinvent_release(
version=ei_version,
system_model=system_model,
username=ei_user,
password=ei_pass,
)

ndb = NewDatabase(
scenarios=scenarios,
source_db=f"ecoinvent-{ei_version}-{system_model}",
source_version=ei_version,
key=key,
system_model=system_model,
biosphere_name=f"ecoinvent-{ei_version}-biosphere",
)

ndb.update()

if "test1" in bw2data.databases:
del bw2data.databases["test1"]
if "test2" in bw2data.databases:
del bw2data.databases["test2"]

ndb.write_db_to_brightway(
[
"test1",
"test2",
]
)

method = [m for m in bw2data.methods if "IPCC" in m[0]][0]

lca = bw2calc.LCA({bw2data.Database("test1").random(): 1}, method)
lca.lci()
lca.lcia()
assert isinstance(lca.score, float)
print(lca.score)

# destroy all objects
del ndb
del lca
gc.collect()
delete_all_pickles()
81 changes: 81 additions & 0 deletions tests/test_process_ei38_cutoff.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
import gc
import os

import bw2calc
import bw2data
import bw2io
import pytest
from dotenv import load_dotenv

from premise import NewDatabase, clear_inventory_cache
from premise.utils import delete_all_pickles

load_dotenv()


ei_user = os.environ["EI_USERNAME"]
ei_pass = os.environ["EI_PASSWORD"]
key = os.environ["IAM_FILES_KEY"]
# convert to bytes
key = key.encode()

ei_version = "3.8"
system_model = "cutoff"


scenarios = [
{"model": "remind", "pathway": "SSP2-Base", "year": 2050},
{"model": "image", "pathway": "SSP2-RCP19", "year": 2050},
]


@pytest.mark.slow
def test_brightway():

bw2data.projects.set_current(f"ecoinvent-{ei_version}-{system_model}")
clear_inventory_cache()

if f"ecoinvent-{ei_version}-{system_model}" not in bw2data.databases:
bw2io.import_ecoinvent_release(
version=ei_version,
system_model=system_model,
username=ei_user,
password=ei_pass,
)

ndb = NewDatabase(
scenarios=scenarios,
source_db=f"ecoinvent-{ei_version}-{system_model}",
source_version=ei_version,
key=key,
system_model=system_model,
biosphere_name=f"ecoinvent-{ei_version}-biosphere",
)

ndb.update()

if "test1" in bw2data.databases:
del bw2data.databases["test1"]
if "test2" in bw2data.databases:
del bw2data.databases["test2"]

ndb.write_db_to_brightway(
[
"test1",
"test2",
]
)

method = [m for m in bw2data.methods if "IPCC" in m[0]][0]

lca = bw2calc.LCA({bw2data.Database("test1").random(): 1}, method)
lca.lci()
lca.lcia()
assert isinstance(lca.score, float)
print(lca.score)

# destroy all objects
del ndb
del lca
gc.collect()
delete_all_pickles()
82 changes: 82 additions & 0 deletions tests/test_process_ei39_conseq.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
import gc
import os

import bw2calc
import bw2data
import bw2io
import pytest
from dotenv import load_dotenv

from premise import NewDatabase, clear_inventory_cache
from premise.utils import delete_all_pickles

load_dotenv()


ei_user = os.environ["EI_USERNAME"]
ei_pass = os.environ["EI_PASSWORD"]
key = os.environ["IAM_FILES_KEY"]
# convert to bytes
key = key.encode()

ei_version = "3.9.1"
system_model = "consequential"


scenarios = [
{"model": "remind", "pathway": "SSP2-Base", "year": 2050},
{"model": "image", "pathway": "SSP2-RCP19", "year": 2050},
]


@pytest.mark.slow
def test_brightway():

bw2data.projects.set_current(f"ecoinvent-{ei_version}-{system_model}")

clear_inventory_cache()

if f"ecoinvent-{ei_version}-{system_model}" not in bw2data.databases:
bw2io.import_ecoinvent_release(
version=ei_version,
system_model=system_model,
username=ei_user,
password=ei_pass,
)

ndb = NewDatabase(
scenarios=scenarios,
source_db=f"ecoinvent-{ei_version}-{system_model}",
source_version=ei_version,
key=key,
system_model=system_model,
biosphere_name=f"ecoinvent-{ei_version}-biosphere",
)

ndb.update()

if "test1" in bw2data.databases:
del bw2data.databases["test1"]
if "test2" in bw2data.databases:
del bw2data.databases["test2"]

ndb.write_db_to_brightway(
[
"test1",
"test2",
]
)

method = [m for m in bw2data.methods if "IPCC" in m[0]][0]

lca = bw2calc.LCA({bw2data.Database("test1").random(): 1}, method)
lca.lci()
lca.lcia()
assert isinstance(lca.score, float)
print(lca.score)

# destroy all objects
del ndb
del lca
gc.collect()
delete_all_pickles()

0 comments on commit 1a1f9bd

Please sign in to comment.