Различают эталонный продукт и название деятельности в импортере Brightway2 Excel - PullRequest
0 голосов
/ 20 октября 2018

Импортер Excel из brightway2, описанный здесь , по-видимому, предполагает, что имя эталонного продукта и название действия совпадают, что не всегда так.

Добавление раздела справочного продукта в метаданные действия не помогает: связывание не может связать биржи production с действием, генерирующим его.

Существует ли обходной путь к использованию импортера Excel для импорта операций, когда обмен production не обязательно назван точно как действие?

1 Ответ

0 голосов
/ 24 октября 2018

Связывание осуществляется с помощью «стратегических» функций.В этом случае кажется, что вам просто нужна пользовательская функция, которая принимает нужные вам поля.Я не проверял это, но что-то вроде следующего должно быть в порядке:

def match_by_reference_product(database):
    """Match using reference product instead of 'name' field."""
    def get_product_exchange(dataset):
        lst = [e for e in dataset if e['type'] == 'production']
        if len(lst) != 1:
            raise ValueError("Can't find one production exchange: {}".format(dataset))
        return lst[0]

    def get_fields(exc):
        return (
            exc['reference product'],
            exc['unit'],
            exc['location']
        )

    possibles = {
        get_fields(get_product_exchange(dataset)): (dataset['database'], dataset['code'])
        for dataset in database
    }

    for dataset in database:
        for exc in dataset['exchanges']:
            if exc['input']:
                continue
            if exc['type'] != 'technosphere':
                continue
            try:
                exc['input'] = possibles[(exc['name'], exc['unit'], exc['location'])]
            except KeyError:
                pass

    return database

Применить с помощью my_importer.apply_stragtegy(match_by_reference_product).

...