Code for handling multifunctional activities in Brightway
Project description
bw-functional
Adding functions to Brightway processes
Installation
You can install bw-functional via [pip] from [PyPI]:
$ pip install bw-functional
Usage
Multifunctional activities can lead to linear algebra problems which don't have exactly one solution. Therefore, we commonly need to apply a handling function to either partition such activities, or otherwise manipulate their data such that they allow for the creation of a square and non-singular technosphere matrix.
This library is designed around the following workflow:
Users create and register a bw_functional.FunctionalSQLiteDatabase. Registering this database must include the database metadata key default_allocation, which refers to an allocation strategy function present in bw_functional.allocation_strategies.
import bw_functional
mf_db = bw_functional.FunctionalSQLiteDatabase("emojis FTW")
mf_db.register()
Multifunctional process(es) are created and written to the FunctionalSQLiteDatabase. A multifunctional process is any process with multiple "functions", either outputs (products) and/or input (reducts).
mf_data = {
("emojis FTW", "😼"): {
"type": "product",
"name": "meow",
"unit": "kg",
"processor": ("emojis FTW", "1"),
"properties": {
"price": {'unit': 'EUR', 'amount': 7, 'normalize': True},
"mass": {'unit': 'kg', 'amount': 1, 'normalize': True},
},
},
("emojis FTW", "🐶"): {
"type": "product",
"name": "woof",
"unit": "kg",
"processor": ("emojis FTW", "1"),
"properties": {
"price": {'unit': 'EUR', 'amount': 12, 'normalize': True},
"mass": {'unit': 'kg', 'amount': 4, 'normalize': True},
},
},
("emojis FTW", "1"): {
"name": "process - 1",
"location": "somewhere",
"exchanges": [
{
"type": "production",
"input": ("emojis FTW", "😼"),
"amount": 4,
},
{
"type": "production",
"input": ("emojis FTW", "🐶"),
"amount": 6,
},
],
}
}
LCA calculations can then be done as normal. See dev/basic_example.ipynb for a simple example.
Substitution
WORK IN PROGRESS
Built-in allocation functions
bw-functional includes the following built-in allocation functions:
manual_allocation: Does allocation based on the "allocation" field of the Product. Doesn't normalize by amount of production exchange.equal: Splits burdens equally among all functional edges.
You can also do property-based allocation by specifying the property label in the allocation field of the Process.
Technical notes
Process-specific allocation strategies
Individual processes can override the default database allocation by specifying their own allocation:
import bw2data as bd
node = bd.get_activity(database="emojis FTW", code="1")
node["allocation"] = "mass"
node.save()
How does it work?
Recent Brightway versions allow users to specify which graph nodes types should be used when building matrices, and which types can be ignored. We create a multifunctional process node with the type multifunctional, which will be ignored when creating processed datapackages. However, in our database class FunctionalSQLiteDatabase we change the function which creates these processed datapackages to load the multifunctional processes, perform whatever strategy is needed to handle multifunctionality, and then use the results of those handling strategies (e.g. monofunctional processes) in the processed datapackage.
We also tell MultifunctionalDatabase to load a new ReadOnlyProcess process class instead of the standard Activity class when interacting with the database. This new class is read only because the data is generated from the multifunctional process itself - if updates are needed, either that input process or the allocation function should be modified.
Contributing
Contributions are very welcome. To learn more, see the Contributor Guide.
License
Distributed under the terms of the BSD 3 Clause license, multifunctional is free and open source software.
Issues
If you encounter any problems, please file an issue along with a detailed description.
Building the Documentation
You can build the documentation locally by installing the documentation Conda environment:
conda env create -f docs/environment.yml
activating the environment
conda activate sphinx_multifunctional
and running the build command:
sphinx-build docs _build/html --builder=html --jobs=auto --write-all; open _build/html/index.html
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file bw_functional-0b94.tar.gz.
File metadata
- Download URL: bw_functional-0b94.tar.gz
- Upload date:
- Size: 27.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1d1c3ad7d766a00a8777a2215e494803aa5b88b0a5d94978a83390ff608eac09
|
|
| MD5 |
21f8bd2d63cb70371891dbedb3681706
|
|
| BLAKE2b-256 |
88a6dba9449a66d6b18de9e32841c9ee1c49549ea8dd1fd64979349619bcc62d
|
File details
Details for the file bw_functional-0b94-py3-none-any.whl.
File metadata
- Download URL: bw_functional-0b94-py3-none-any.whl
- Upload date:
- Size: 22.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7ef039f7bdae255385094919463c204ba5f9b58c4847a2077ab852e7ac2628d2
|
|
| MD5 |
53c0ee5c37ef0b63a80c030c638a79ec
|
|
| BLAKE2b-256 |
4384771040634428e417a7c9ba5d87547e52cbd8167d0ca3d40b09a64c3035d1
|