Metadata-Version: 2.1
Name: bw-migrations
Version: 0.1
Summary: Migration data and utilities for Brightway IO and LCA in general
Home-page: https://github.com/brightway-lca/bw_migrations
Author: Chris Mutel
Author-email: cmutel@gmail.com
License: NewBSD 3-clause; LICENSE
Platform: UNKNOWN
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Science/Research
Classifier: License :: OSI Approved :: BSD License
Classifier: Operating System :: MacOS :: MacOS X
Classifier: Operating System :: Microsoft :: Windows
Classifier: Operating System :: POSIX
Classifier: Programming Language :: Python :: 3.7
Classifier: Topic :: Scientific/Engineering :: Information Analysis
Classifier: Topic :: Scientific/Engineering :: Mathematics
Description-Content-Type: text/markdown
Requires-Dist: stats-arrays

# bw_migrations

Migration data and utilities for Brightway IO and LCA in general

[![Build Status](https://travis-ci.org/brightway-lca/bw_migrations.svg?branch=master)](https://travis-ci.org/brightway-lca/bw_migrations) [![Coverage Status](https://coveralls.io/repos/github/brightway-lca/bw_migrations/badge.svg?branch=master)](https://coveralls.io/github/brightway-lca/bw_migrations?branch=master) [![Build status](https://ci.appveyor.com/api/projects/status/lk0tbo21v2irm48x?svg=true)](https://ci.appveyor.com/project/cmutel/bw-migrations)

Most databases use their own nomenclature for classification systems, units, etc. These systems need to be matched when linking from one database to another. Often, a simple mapping is suitable, and tools like [correspondentia](https://github.com/BONSAMURAIS/correspondentia) are a good fit. However, sometimes one needs more complexity, e.g. change field X to Y, but only if field A has value B. When ecoinvent released version 3, they changed their unit of mesaure for water from kilograms to cubic meters. ``bw_migrations`` provides tools for this more complicated transformations, and is built around the following data format:

    {
        # The fields on which to filter
        'fields': ['name', 'category', 'unit'],
        'data': [
            (
                # First element is input data in the order of `fields` above
                ('Water', 'air', 'kilogram'),
                # Second element is new values to substitute when all fields match
                {
                    'unit': 'cubic meter',
                    '__multiplier__': 0.001
                }
            )
        ]
    }

And is implemented with the following pseudo-code:

    for element in input_data:
        for original, new in migration['data']:
            if all(element[field] == original[field] for field in migration['fields']):
                element.update(dict(zip(migration['fields'], new)))

The actual code is a bit more complex, as `bw_migrations` can also do rescaling of probability distributions and disaggregation migrations (splitting one object into several outputs).


