From 22aed7216af5891a82a86e290ac4623dc03677d4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maxime=20P=C3=A9ralta?= Date: Thu, 6 Feb 2025 14:19:22 +0100 Subject: [PATCH 1/5] (fix) Change licence from EPLv2 to LGPL (#9) --- LICENSE.md | 434 +++++++++++++++++++---------------------------------- 1 file changed, 157 insertions(+), 277 deletions(-) diff --git a/LICENSE.md b/LICENSE.md index d3087e4..144f824 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -1,277 +1,157 @@ -Eclipse Public License - v 2.0 - - THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE - PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION - OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT. - -1. DEFINITIONS - -"Contribution" means: - - a) in the case of the initial Contributor, the initial content - Distributed under this Agreement, and - - b) in the case of each subsequent Contributor: - i) changes to the Program, and - ii) additions to the Program; - where such changes and/or additions to the Program originate from - and are Distributed by that particular Contributor. A Contribution - "originates" from a Contributor if it was added to the Program by - such Contributor itself or anyone acting on such Contributor's behalf. - Contributions do not include changes or additions to the Program that - are not Modified Works. - -"Contributor" means any person or entity that Distributes the Program. - -"Licensed Patents" mean patent claims licensable by a Contributor which -are necessarily infringed by the use or sale of its Contribution alone -or when combined with the Program. - -"Program" means the Contributions Distributed in accordance with this -Agreement. - -"Recipient" means anyone who receives the Program under this Agreement -or any Secondary License (as applicable), including Contributors. - -"Derivative Works" shall mean any work, whether in Source Code or other -form, that is based on (or derived from) the Program and for which the -editorial revisions, annotations, elaborations, or other modifications -represent, as a whole, an original work of authorship. - -"Modified Works" shall mean any work in Source Code or other form that -results from an addition to, deletion from, or modification of the -contents of the Program, including, for purposes of clarity any new file -in Source Code form that contains any contents of the Program. Modified -Works shall not include works that contain only declarations, -interfaces, types, classes, structures, or files of the Program solely -in each case in order to link to, bind by name, or subclass the Program -or Modified Works thereof. - -"Distribute" means the acts of a) distributing or b) making available -in any manner that enables the transfer of a copy. - -"Source Code" means the form of a Program preferred for making -modifications, including but not limited to software source code, -documentation source, and configuration files. - -"Secondary License" means either the GNU General Public License, -Version 2.0, or any later versions of that license, including any -exceptions or additional permissions as identified by the initial -Contributor. - -2. GRANT OF RIGHTS - - a) Subject to the terms of this Agreement, each Contributor hereby - grants Recipient a non-exclusive, worldwide, royalty-free copyright - license to reproduce, prepare Derivative Works of, publicly display, - publicly perform, Distribute and sublicense the Contribution of such - Contributor, if any, and such Derivative Works. - - b) Subject to the terms of this Agreement, each Contributor hereby - grants Recipient a non-exclusive, worldwide, royalty-free patent - license under Licensed Patents to make, use, sell, offer to sell, - import and otherwise transfer the Contribution of such Contributor, - if any, in Source Code or other form. This patent license shall - apply to the combination of the Contribution and the Program if, at - the time the Contribution is added by the Contributor, such addition - of the Contribution causes such combination to be covered by the - Licensed Patents. The patent license shall not apply to any other - combinations which include the Contribution. No hardware per se is - licensed hereunder. - - c) Recipient understands that although each Contributor grants the - licenses to its Contributions set forth herein, no assurances are - provided by any Contributor that the Program does not infringe the - patent or other intellectual property rights of any other entity. - Each Contributor disclaims any liability to Recipient for claims - brought by any other entity based on infringement of intellectual - property rights or otherwise. As a condition to exercising the - rights and licenses granted hereunder, each Recipient hereby - assumes sole responsibility to secure any other intellectual - property rights needed, if any. For example, if a third party - patent license is required to allow Recipient to Distribute the - Program, it is Recipient's responsibility to acquire that license - before distributing the Program. - - d) Each Contributor represents that to its knowledge it has - sufficient copyright rights in its Contribution, if any, to grant - the copyright license set forth in this Agreement. - - e) Notwithstanding the terms of any Secondary License, no - Contributor makes additional grants to any Recipient (other than - those set forth in this Agreement) as a result of such Recipient's - receipt of the Program under the terms of a Secondary License - (if permitted under the terms of Section 3). - -3. REQUIREMENTS - -3.1 If a Contributor Distributes the Program in any form, then: - - a) the Program must also be made available as Source Code, in - accordance with section 3.2, and the Contributor must accompany - the Program with a statement that the Source Code for the Program - is available under this Agreement, and informs Recipients how to - obtain it in a reasonable manner on or through a medium customarily - used for software exchange; and - - b) the Contributor may Distribute the Program under a license - different than this Agreement, provided that such license: - i) effectively disclaims on behalf of all other Contributors all - warranties and conditions, express and implied, including - warranties or conditions of title and non-infringement, and - implied warranties or conditions of merchantability and fitness - for a particular purpose; - - ii) effectively excludes on behalf of all other Contributors all - liability for damages, including direct, indirect, special, - incidental and consequential damages, such as lost profits; - - iii) does not attempt to limit or alter the recipients' rights - in the Source Code under section 3.2; and - - iv) requires any subsequent distribution of the Program by any - party to be under a license that satisfies the requirements - of this section 3. - -3.2 When the Program is Distributed as Source Code: - - a) it must be made available under this Agreement, or if the - Program (i) is combined with other material in a separate file or - files made available under a Secondary License, and (ii) the initial - Contributor attached to the Source Code the notice described in - Exhibit A of this Agreement, then the Program may be made available - under the terms of such Secondary Licenses, and - - b) a copy of this Agreement must be included with each copy of - the Program. - -3.3 Contributors may not remove or alter any copyright, patent, -trademark, attribution notices, disclaimers of warranty, or limitations -of liability ("notices") contained within the Program from any copy of -the Program which they Distribute, provided that Contributors may add -their own appropriate notices. - -4. COMMERCIAL DISTRIBUTION - -Commercial distributors of software may accept certain responsibilities -with respect to end users, business partners and the like. While this -license is intended to facilitate the commercial use of the Program, -the Contributor who includes the Program in a commercial product -offering should do so in a manner which does not create potential -liability for other Contributors. Therefore, if a Contributor includes -the Program in a commercial product offering, such Contributor -("Commercial Contributor") hereby agrees to defend and indemnify every -other Contributor ("Indemnified Contributor") against any losses, -damages and costs (collectively "Losses") arising from claims, lawsuits -and other legal actions brought by a third party against the Indemnified -Contributor to the extent caused by the acts or omissions of such -Commercial Contributor in connection with its distribution of the Program -in a commercial product offering. The obligations in this section do not -apply to any claims or Losses relating to any actual or alleged -intellectual property infringement. In order to qualify, an Indemnified -Contributor must: a) promptly notify the Commercial Contributor in -writing of such claim, and b) allow the Commercial Contributor to control, -and cooperate with the Commercial Contributor in, the defense and any -related settlement negotiations. The Indemnified Contributor may -participate in any such claim at its own expense. - -For example, a Contributor might include the Program in a commercial -product offering, Product X. That Contributor is then a Commercial -Contributor. If that Commercial Contributor then makes performance -claims, or offers warranties related to Product X, those performance -claims and warranties are such Commercial Contributor's responsibility -alone. Under this section, the Commercial Contributor would have to -defend claims against the other Contributors related to those performance -claims and warranties, and if a court requires any other Contributor to -pay any damages as a result, the Commercial Contributor must pay -those damages. - -5. NO WARRANTY - -EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT -PERMITTED BY APPLICABLE LAW, THE PROGRAM IS PROVIDED ON AN "AS IS" -BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR -IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF -TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR -PURPOSE. Each Recipient is solely responsible for determining the -appropriateness of using and distributing the Program and assumes all -risks associated with its exercise of rights under this Agreement, -including but not limited to the risks and costs of program errors, -compliance with applicable laws, damage to or loss of data, programs -or equipment, and unavailability or interruption of operations. - -6. DISCLAIMER OF LIABILITY - -EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT -PERMITTED BY APPLICABLE LAW, NEITHER RECIPIENT NOR ANY CONTRIBUTORS -SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST -PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE -EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - -7. GENERAL - -If any provision of this Agreement is invalid or unenforceable under -applicable law, it shall not affect the validity or enforceability of -the remainder of the terms of this Agreement, and without further -action by the parties hereto, such provision shall be reformed to the -minimum extent necessary to make such provision valid and enforceable. - -If Recipient institutes patent litigation against any entity -(including a cross-claim or counterclaim in a lawsuit) alleging that the -Program itself (excluding combinations of the Program with other software -or hardware) infringes such Recipient's patent(s), then such Recipient's -rights granted under Section 2(b) shall terminate as of the date such -litigation is filed. - -All Recipient's rights under this Agreement shall terminate if it -fails to comply with any of the material terms or conditions of this -Agreement and does not cure such failure in a reasonable period of -time after becoming aware of such noncompliance. If all Recipient's -rights under this Agreement terminate, Recipient agrees to cease use -and distribution of the Program as soon as reasonably practicable. -However, Recipient's obligations under this Agreement and any licenses -granted by Recipient relating to the Program shall continue and survive. - -Everyone is permitted to copy and distribute copies of this Agreement, -but in order to avoid inconsistency the Agreement is copyrighted and -may only be modified in the following manner. The Agreement Steward -reserves the right to publish new versions (including revisions) of -this Agreement from time to time. No one other than the Agreement -Steward has the right to modify this Agreement. The Eclipse Foundation -is the initial Agreement Steward. The Eclipse Foundation may assign the -responsibility to serve as the Agreement Steward to a suitable separate -entity. Each new version of the Agreement will be given a distinguishing -version number. The Program (including Contributions) may always be -Distributed subject to the version of the Agreement under which it was -received. In addition, after a new version of the Agreement is published, -Contributor may elect to Distribute the Program (including its -Contributions) under the new version. - -Except as expressly stated in Sections 2(a) and 2(b) above, Recipient -receives no rights or licenses to the intellectual property of any -Contributor under this Agreement, whether expressly, by implication, -estoppel or otherwise. All rights in the Program not expressly granted -under this Agreement are reserved. Nothing in this Agreement is intended -to be enforceable by any entity that is not a Contributor or Recipient. -No third-party beneficiary rights are created under this Agreement. - -Exhibit A - Form of Secondary Licenses Notice - -"This Source Code may also be made available under the following -Secondary Licenses when the conditions for such availability set forth -in the Eclipse Public License, v. 2.0 are satisfied: {name license(s), -version(s), and exceptions or additional permissions here}." - - Simply including a copy of this Agreement, including this Exhibit A - is not sufficient to license the Source Code under Secondary Licenses. - - If it is not possible or desirable to put the notice in a particular - file, then You may include the notice in a location (such as a LICENSE - file in a relevant directory) where a recipient would be likely to - look for such a notice. - - You may add additional accurate notices of copyright ownership. +# GNU LESSER GENERAL PUBLIC LICENSE + +Version 3, 29 June 2007 + +Copyright (C) 2007 Free Software Foundation, Inc. + + +Everyone is permitted to copy and distribute verbatim copies of this +license document, but changing it is not allowed. + +This version of the GNU Lesser General Public License incorporates the +terms and conditions of version 3 of the GNU General Public License, +supplemented by the additional permissions listed below. + +## 0. Additional Definitions. + +As used herein, "this License" refers to version 3 of the GNU Lesser +General Public License, and the "GNU GPL" refers to version 3 of the +GNU General Public License. + +"The Library" refers to a covered work governed by this License, other +than an Application or a Combined Work as defined below. + +An "Application" is any work that makes use of an interface provided +by the Library, but which is not otherwise based on the Library. +Defining a subclass of a class defined by the Library is deemed a mode +of using an interface provided by the Library. + +A "Combined Work" is a work produced by combining or linking an +Application with the Library. The particular version of the Library +with which the Combined Work was made is also called the "Linked +Version". + +The "Minimal Corresponding Source" for a Combined Work means the +Corresponding Source for the Combined Work, excluding any source code +for portions of the Combined Work that, considered in isolation, are +based on the Application, and not on the Linked Version. + +The "Corresponding Application Code" for a Combined Work means the +object code and/or source code for the Application, including any data +and utility programs needed for reproducing the Combined Work from the +Application, but excluding the System Libraries of the Combined Work. + +## 1. Exception to Section 3 of the GNU GPL. + +You may convey a covered work under sections 3 and 4 of this License +without being bound by section 3 of the GNU GPL. + +## 2. Conveying Modified Versions. + +If you modify a copy of the Library, and, in your modifications, a +facility refers to a function or data to be supplied by an Application +that uses the facility (other than as an argument passed when the +facility is invoked), then you may convey a copy of the modified +version: + +- a) under this License, provided that you make a good faith effort + to ensure that, in the event an Application does not supply the + function or data, the facility still operates, and performs + whatever part of its purpose remains meaningful, or +- b) under the GNU GPL, with none of the additional permissions of + this License applicable to that copy. + +## 3. Object Code Incorporating Material from Library Header Files. + +The object code form of an Application may incorporate material from a +header file that is part of the Library. You may convey such object +code under terms of your choice, provided that, if the incorporated +material is not limited to numerical parameters, data structure +layouts and accessors, or small macros, inline functions and templates +(ten or fewer lines in length), you do both of the following: + +- a) Give prominent notice with each copy of the object code that + the Library is used in it and that the Library and its use are + covered by this License. +- b) Accompany the object code with a copy of the GNU GPL and this + license document. + +## 4. Combined Works. + +You may convey a Combined Work under terms of your choice that, taken +together, effectively do not restrict modification of the portions of +the Library contained in the Combined Work and reverse engineering for +debugging such modifications, if you also do each of the following: + +- a) Give prominent notice with each copy of the Combined Work that + the Library is used in it and that the Library and its use are + covered by this License. +- b) Accompany the Combined Work with a copy of the GNU GPL and this + license document. +- c) For a Combined Work that displays copyright notices during + execution, include the copyright notice for the Library among + these notices, as well as a reference directing the user to the + copies of the GNU GPL and this license document. +- d) Do one of the following: + - 0) Convey the Minimal Corresponding Source under the terms of + this License, and the Corresponding Application Code in a form + suitable for, and under terms that permit, the user to + recombine or relink the Application with a modified version of + the Linked Version to produce a modified Combined Work, in the + manner specified by section 6 of the GNU GPL for conveying + Corresponding Source. + - 1) Use a suitable shared library mechanism for linking with + the Library. A suitable mechanism is one that (a) uses at run + time a copy of the Library already present on the user's + computer system, and (b) will operate properly with a modified + version of the Library that is interface-compatible with the + Linked Version. +- e) Provide Installation Information, but only if you would + otherwise be required to provide such information under section 6 + of the GNU GPL, and only to the extent that such information is + necessary to install and execute a modified version of the + Combined Work produced by recombining or relinking the Application + with a modified version of the Linked Version. (If you use option + 4d0, the Installation Information must accompany the Minimal + Corresponding Source and Corresponding Application Code. If you + use option 4d1, you must provide the Installation Information in + the manner specified by section 6 of the GNU GPL for conveying + Corresponding Source.) + +## 5. Combined Libraries. + +You may place library facilities that are a work based on the Library +side by side in a single library together with other library +facilities that are not Applications and are not covered by this +License, and convey such a combined library under terms of your +choice, if you do both of the following: + +- a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities, conveyed under the terms of this License. +- b) Give prominent notice with the combined library that part of it + is a work based on the Library, and explaining where to find the + accompanying uncombined form of the same work. + +## 6. Revised Versions of the GNU Lesser General Public License. + +The Free Software Foundation may publish revised and/or new versions +of the GNU Lesser General Public License from time to time. Such new +versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Library +as you received it specifies that a certain numbered version of the +GNU Lesser General Public License "or any later version" applies to +it, you have the option of following the terms and conditions either +of that published version or of any later version published by the +Free Software Foundation. If the Library as you received it does not +specify a version number of the GNU Lesser General Public License, you +may choose any version of the GNU Lesser General Public License ever +published by the Free Software Foundation. + +If the Library as you received it specifies that a proxy can decide +whether future versions of the GNU Lesser General Public License shall +apply, that proxy's public statement of acceptance of any version is +permanent authorization for you to choose that version for the +Library. \ No newline at end of file From d133dc1a917f964e3727a09450f6db09f5b910e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maxime=20P=C3=A9ralta?= Date: Thu, 6 Feb 2025 14:21:29 +0100 Subject: [PATCH 2/5] (feature) Add properties field in data and in impact model builder (#8) --- appabuild/database/serialized_data.py | 4 ++ appabuild/database/user_database_elements.py | 6 ++ appabuild/model/builder.py | 68 +++++++++++++------- 3 files changed, 55 insertions(+), 23 deletions(-) diff --git a/appabuild/database/serialized_data.py b/appabuild/database/serialized_data.py index 1bc3193..8da3cac 100644 --- a/appabuild/database/serialized_data.py +++ b/appabuild/database/serialized_data.py @@ -87,6 +87,10 @@ class can use SerializedActivity objects to create Brightway compatible datasets "Free text for any context information about the dataset." include_in_tree: Optional[bool] = False "If True, activity will become a node in built ImpactModel." + properties: Optional[Dict[str, Union[str, float, bool]]] = {} + """Properties will remain on impact model, and can be used by apparun to breakdown + the results according to life cycle phase, for exemple. Properties can be key/value + (ex: {"phase": "production"} or flags (ex: {production_phase: True}).""" @property def code(self): diff --git a/appabuild/database/user_database_elements.py b/appabuild/database/user_database_elements.py index f8716aa..b04cbaf 100644 --- a/appabuild/database/user_database_elements.py +++ b/appabuild/database/user_database_elements.py @@ -313,6 +313,10 @@ class Activity(DatabaseElement): "If True, activity will become a node in built ImpactModel." parameters: Optional[List[str]] = [] "Optional list of parameters necessary to execute this dataset." + properties: Optional[Dict[str, Union[str, float, bool]]] = {} + """Properties will remain on impact model, and can be used by apparun to breakdown + the results according to life cycle phase, for exemple. Properties can be key/value + (ex: {"phase": "production"} or flags (ex: {production_phase: True}).""" def to_bw_format(self) -> Tuple[Tuple[str, str], dict]: """ @@ -330,6 +334,7 @@ def to_bw_format(self) -> Tuple[Tuple[str, str], dict]: "amount": self.amount, "include_in_tree": self.include_in_tree, "exchanges": [exchange.to_bw_format() for exchange in self.exchanges], + "properties": self.properties, } @classmethod @@ -413,6 +418,7 @@ def from_serialized_activity( parameters=serialized_activity.parameters, include_in_tree=serialized_activity.include_in_tree, exchanges=[], + properties=serialized_activity.properties, context=context, ) context.activities.append(new_activity) diff --git a/appabuild/model/builder.py b/appabuild/model/builder.py index af4f790..6383a97 100644 --- a/appabuild/model/builder.py +++ b/appabuild/model/builder.py @@ -8,7 +8,7 @@ import os import types from collections import OrderedDict -from typing import List, Tuple, Optional +from typing import List, Optional, Tuple import brightway2 as bw import lca_algebraic as lcaa @@ -16,11 +16,8 @@ from apparun.impact_methods import MethodFullName from apparun.impact_model import ImpactModel, ModelMetadata from apparun.impact_tree import ImpactTreeNode -from apparun.parameters import ( - EnumParam, - FloatParam, - ImpactModelParams, -) +from apparun.parameters import EnumParam, FloatParam, ImpactModelParams +from apparun.tree_node import NodeProperties from bw2data.backends.peewee import Activity from lca_algebraic import ActivityExtended, with_db_context from lca_algebraic.base_utils import _getAmountOrFormula, _getDb, debug @@ -33,7 +30,7 @@ from lca_algebraic.params import _fixed_params, newEnumParam, newFloatParam from sympy import Expr, simplify, symbols -from appabuild.database.databases import parameters_registry, ForegroundDatabase +from appabuild.database.databases import ForegroundDatabase, parameters_registry from appabuild.exceptions import BwDatabaseError, BwMethodError act_symbols = {} # Cache of act = > symbol @@ -62,9 +59,16 @@ class ImpactModelBuilder: Main purpose of this class is to build Impact Models. """ - def __init__(self, user_database_name: str, functional_unit: str, methods: list[str], output_path: str, - metadata: Optional[ModelMetadata] = ModelMetadata(), compile_models: bool = True, - parameters: Optional[dict] = None): + def __init__( + self, + user_database_name: str, + functional_unit: str, + methods: list[str], + output_path: str, + metadata: Optional[ModelMetadata] = ModelMetadata(), + compile_models: bool = True, + parameters: Optional[dict] = None, + ): """ Initialize the model builder :param user_database_name: name of the user database (foreground database) @@ -103,15 +107,17 @@ def from_yaml(lca_config_path: str) -> ImpactModelBuilder: lca_config["scope"]["methods"], os.path.join( lca_config["outputs"]["model"]["path"], - f"{lca_config['outputs']['model']['name']}.yaml" + f"{lca_config['outputs']['model']['name']}.yaml", ), lca_config["outputs"]["model"]["metadata"], lca_config["outputs"]["model"]["compile"], - lca_config["outputs"]["model"]["parameters"] + lca_config["outputs"]["model"]["parameters"], ) return builder - def build_impact_model(self, foreground_database:Optional[ForegroundDatabase] = None) -> ImpactModel: + def build_impact_model( + self, foreground_database: Optional[ForegroundDatabase] = None + ) -> ImpactModel: """ Build an Impact Model, the model is a represented as a tree with the functional unit as its root :param foreground_database: database containing the functional unit @@ -119,11 +125,15 @@ def build_impact_model(self, foreground_database:Optional[ForegroundDatabase] = """ if foreground_database is not None: - foreground_database.set_functional_unit(self.functional_unit, self.parameters) + foreground_database.set_functional_unit( + self.functional_unit, self.parameters + ) foreground_database.execute_at_build_time() functional_unit_bw = self.find_functional_unit_in_bw() - tree, params = self.build_impact_tree_and_parameters(functional_unit_bw, self.methods) + tree, params = self.build_impact_tree_and_parameters( + functional_unit_bw, self.methods + ) impact_model = ImpactModel(tree=tree, parameters=params, metadata=self.metadata) return impact_model @@ -132,9 +142,13 @@ def find_functional_unit_in_bw(self) -> ActivityExtended: Find the bw activity matching the functional unit in the bw database. A single activity should be found as it is to be used as the root of the tree. """ - functional_unit_bw = [i for i in self.bw_user_database if self.functional_unit == i["name"]] + functional_unit_bw = [ + i for i in self.bw_user_database if self.functional_unit == i["name"] + ] if len(functional_unit_bw) < 1: - raise BwDatabaseError(f"Cannot find activity {self.functional_unit} for FU.") + raise BwDatabaseError( + f"Cannot find activity {self.functional_unit} for FU." + ) if len(functional_unit_bw) > 1: raise BwDatabaseError( f"Too many activities matching {self.functional_unit} for FU: " @@ -144,7 +158,7 @@ def find_functional_unit_in_bw(self) -> ActivityExtended: return functional_unit_bw def build_impact_tree_and_parameters( - self, functional_unit_bw: ActivityExtended, methods: List[str] + self, functional_unit_bw: ActivityExtended, methods: List[str] ) -> Tuple[ImpactTreeNode, ImpactModelParams]: """ Perform LCA, construct all arithmetic models and collect used parameters. @@ -154,7 +168,11 @@ def build_impact_tree_and_parameters( :return: root node (corresponding to the reference flow) and used parameters. """ methods_bw = [to_bw_method(MethodFullName[method]) for method in methods] - tree = ImpactTreeNode(name=functional_unit_bw["name"], amount=1) + tree = ImpactTreeNode( + name=functional_unit_bw["name"], + amount=1, + properties=NodeProperties.from_dict(functional_unit_bw["properties"]), + ) # print("computing model to expression for %s" % model) self.actToExpression(functional_unit_bw, tree) @@ -190,8 +208,8 @@ def build_impact_tree_and_parameters( [ elem.name for elem in known_parameters.find_corresponding_parameter( - activity_symbol, must_find_one=False - ) + activity_symbol, must_find_one=False + ) ] for activity_symbol in activity_symbols ] @@ -327,7 +345,11 @@ def rec_func(act: Activity, impact_model_tree_node: ImpactTreeNode): ImpactModelBuilder.actToExpression( sub_act, impact_model_tree_node.new_child( - name=sub_act["name"], amount=amount + name=sub_act["name"], + amount=amount, + properties=NodeProperties.from_dict( + sub_act["properties"] + ), ), ) amount = 1 # amount is already handled in tree node @@ -339,7 +361,7 @@ def rec_func(act: Activity, impact_model_tree_node: ImpactTreeNode): avoidedBurden = 1 if exch.get("type") == "production" and not exch.get( - "input" + "input" ) == exch.get("output"): debug("Avoided burden", exch[lcaa.helpers.name]) avoidedBurden = -1 From 42181ab76e850c112119989142d5288dc7cb19b6 Mon Sep 17 00:00:00 2001 From: Bossy-Romain Date: Thu, 6 Feb 2025 14:36:05 +0100 Subject: [PATCH 3/5] (update) Bump package version (#11) --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index b114db4..91d97a2 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -7,7 +7,7 @@ packages = ["app", "appabuild"] [project] name = "appabuild" -version = "0.3.1" +version = "0.3.2" authors = [{ name = "Maxime Peralta", email = "maxime.peralta@cea.fr"}] maintainers= [{name = "Maxime Peralta", email = "maxime.peralta@cea.fr"}] description = "Appa Build is a package to build impact models" From 892ec9fc5ecdd89dc31cadd496e8e5b0fee3c3e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maxime=20P=C3=A9ralta?= Date: Thu, 6 Feb 2025 15:54:08 +0100 Subject: [PATCH 4/5] (fix) Remove deprecated license classifier in pyproject (#12) --- pyproject.toml | 1 - 1 file changed, 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 91d97a2..31f6377 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -15,7 +15,6 @@ keywords = ["ecodesign", "life cycle assessment"] license = { file = "LICENSE.md" } readme = "README.md" classifiers = [ - "License :: OSI Approved :: Eclipse Public License 2.0 (EPL-2.0)", "Programming Language :: Python", "Programming Language :: Python :: 3", "Intended Audience :: Developers", From f949c5052fc1dfbf913df4cd128093128a53b9b6 Mon Sep 17 00:00:00 2001 From: Bossy-Romain Date: Fri, 7 Feb 2025 09:18:58 +0100 Subject: [PATCH 5/5] (fix) Fix the version of apparun in the dependencies (#13) * (fix) Fix the version of the apparun dependency --- pyproject.toml | 2 +- requirements.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 31f6377..b468e16 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -45,7 +45,7 @@ dependencies = [ "kaleido", "tqdm", "ruamel.yaml", - "apparun==0.3.1", + "apparun==0.3.2", "pre-commit", "typer==0.15.1", ] diff --git a/requirements.txt b/requirements.txt index 59b3ff1..766a238 100644 --- a/requirements.txt +++ b/requirements.txt @@ -20,6 +20,6 @@ aenum kaleido tqdm ruamel.yaml -apparun==0.3.0 +apparun==0.3.2 pre-commit hatchling