Skip to content

Commit

Permalink
Fix #192
Browse files Browse the repository at this point in the history
  • Loading branch information
cmutel committed Sep 24, 2024
1 parent e83a10c commit 58b71dd
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 29 deletions.
22 changes: 14 additions & 8 deletions bw2data/compat.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,8 @@
projects,
weightings,
)
from bw2data.backends.schema import ActivityDataset as AD
from bw2data.backends.schema import get_id
from bw2data.backends.schema import get_id, ActivityDataset as AD
from bw2data.backends import Node
from bw2data.errors import Brightway2Project, UnknownObject


Expand Down Expand Up @@ -43,12 +43,18 @@ def __len__(self):
return AD.select().count()


def unpack(dct):
def unpack(dct) -> str:
for obj in dct:
if hasattr(obj, "key"):
yield obj.key
if isinstance(obj, AD):
yield obj.database
elif isinstance(obj, Node):
yield obj["database"]
elif isinstance(obj, tuple):
yield obj[0]
elif isinstance(obj, int):
yield get_node(id=obj)['database']
else:
yield obj
raise ValueError


def translate_key(key):
Expand Down Expand Up @@ -78,9 +84,9 @@ def prepare_lca_inputs(
remapping_dicts = None

if demands:
demand_database_names = [db_label for dct in demands for db_label, _ in unpack(dct)]
demand_database_names = sorted({db_label for dct in demands for db_label in unpack(dct)})
elif demand:
demand_database_names = [db_label for db_label, _ in unpack(demand)]
demand_database_names = sorted({db_label for db_label in unpack(demand)})
else:
demand_database_names = []

Expand Down
42 changes: 21 additions & 21 deletions tests/compatibility.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
databases,
geomapping,
get_activity,
get_node,
get_multilca_data_objs,
methods,
normalizations,
Expand Down Expand Up @@ -50,6 +51,8 @@ def test_registered_database_repr():
print(d)


@pytest.fixture
@bw2test
def setup():
Database("biosphere").write(biosphere)
Database("food").write(food)
Expand All @@ -58,16 +61,11 @@ def setup():
return Database("biosphere"), Database("food"), Method(("foo",))


@bw2test
def test_prepare_lca_inputs_basic():
pla = setup()
def test_prepare_lca_inputs_basic(setup):
d, objs, r = prepare_lca_inputs(demand={("food", "1"): 1}, method=("foo",))
# ID is 3; two biosphere flows, then '1' is next written
assert d == {3: 1}

print(objs[0].metadata)

assert {o.metadata["id"] for o in objs} == {o.datapackage().metadata["id"] for o in pla}
assert {o.metadata["id"] for o in objs} == {o.datapackage().metadata["id"] for o in setup}

remapping_expected = {
"activity": {
Expand All @@ -92,9 +90,7 @@ def test_prepare_lca_inputs_basic():
assert r == remapping_expected


@bw2test
def test_prepare_lca_inputs_only_method():
setup()
def test_prepare_lca_inputs_only_method(setup):
d, objs, r = prepare_lca_inputs(method=("foo",))
# ID is 3; two biosphere flows, then '1' is next written
assert d is None
Expand All @@ -103,31 +99,35 @@ def test_prepare_lca_inputs_only_method():
]


@bw2test
def test_prepare_lca_inputs_multiple_demands():
pla = setup()
def test_prepare_lca_inputs_multiple_demands_data_types(setup):
first = get_node(database="food", code="1")
second = get_node(database="food", code="2")
d, objs, r = prepare_lca_inputs(
demands=[{first: 1}, {second.id: 10}], method=("foo",)
)
assert d == [{3: 1}, {4: 10}]
assert {o.metadata["id"] for o in objs} == {o.datapackage().metadata["id"] for o in setup}


def test_prepare_lca_inputs_multiple_demands(setup):
d, objs, r = prepare_lca_inputs(
demands=[{("food", "1"): 1}, {("food", "2"): 10}], method=("foo",)
)
# ID is 3; two biosphere flows, then '1' is next written
assert d == [{3: 1}, {4: 10}]
assert {o.metadata["id"] for o in objs} == {o.datapackage().metadata["id"] for o in pla}
assert {o.metadata["id"] for o in objs} == {o.datapackage().metadata["id"] for o in setup}


@bw2test
def test_prepare_lca_inputs_database_ordering():
pla = setup()
def test_prepare_lca_inputs_database_ordering(setup):
d, objs, r = prepare_lca_inputs(
demands=[{("food", "1"): 1}, {("food", "2"): 10}],
method=("foo",),
demand_database_last=False,
)
assert {o.metadata["id"] for o in objs} == {o.datapackage().metadata["id"] for o in pla}
assert {o.metadata["id"] for o in objs} == {o.datapackage().metadata["id"] for o in setup}


@bw2test
def test_prepare_lca_inputs_remapping():
setup()
def test_prepare_lca_inputs_remapping(setup):
d, objs, r = prepare_lca_inputs(demand={("food", "1"): 1}, method=("foo",), remapping=False)
assert r is None

Expand Down

0 comments on commit 58b71dd

Please sign in to comment.