Source code for materia_epd.metrics.normalize
import xml.etree.ElementTree as ET
from materia_epd.core.utils import to_float
from materia_epd.core.constants import NS, LCIA_AGGREGATE_MAP, LCIA_OUTPUT_MODULES
[docs]
def normalize_module_values(
amount_elements: list[ET.Element], scaling_factor: float = 1.0
) -> dict:
"""Normalizes and aggregates module values based on constants."""
raw_values = {
elem.attrib.get(f"{{{NS['epd']}}}module"): (
(lambda v: v * scaling_factor if v is not None else None)(
to_float(elem.text)
)
if elem.text
else None
)
for elem in amount_elements
}
return {
mod: (
raw_values.get(mod)
if mod in raw_values
else (
sum(
(raw_values.get(part) if raw_values.get(part) is not None else 0.0)
for part in LCIA_AGGREGATE_MAP.get(mod, [])
)
if any(
raw_values.get(part) is not None
for part in LCIA_AGGREGATE_MAP.get(mod, [])
)
else None
)
)
for mod in LCIA_OUTPUT_MODULES
}