ecologits-calculator / impacts.py
vdwow's picture
feat : massive update (streamlit migration, integration of ecologits 0.6.1, dataviz, ...)
197f5ec
import streamlit as st
import ecologits
from src.utils import (
format_energy_eq_electric_vehicle,
format_energy_eq_electricity_consumption_ireland,
format_energy_eq_electricity_production,
format_energy_eq_physical_activity,
format_gwp_eq_airplane_paris_nyc,
format_gwp_eq_streaming,
PhysicalActivity,
EnergyProduction
)
############################################################################################################
def get_impacts(model, active_params, total_params, mix_ghg, mix_adpe, mix_pe):
return 1
############################################################################################################
def display_impacts(impacts):
st.divider()
col_energy, col_ghg, col_adpe, col_pe, col_water = st.columns(5)
with col_energy:
st.markdown('<h4 align="center">⚡️ Energy</h4>', unsafe_allow_html = True)
st.latex(f'\Large {impacts.energy.magnitude:.3g} \ \large {impacts.energy.units}')
st.markdown(f'<p align="center"><i>Evaluates the electricity consumption<i></p>', unsafe_allow_html = True)
with col_ghg:
st.markdown('<h4 align="center">🌍️ GHG Emissions</h4>', unsafe_allow_html = True)
st.latex(f'\Large {impacts.gwp.magnitude:.3g} \ \large {impacts.gwp.units}')
st.markdown(f'<p align="center"><i>Evaluates the effect on global warming<i></p>', unsafe_allow_html = True)
with col_adpe:
st.markdown('<h4 align="center">🪨 Abiotic Resources</h4>', unsafe_allow_html = True)
st.latex(f'\Large {impacts.adpe.magnitude:.3g} \ \large {impacts.adpe.units}')
st.markdown(f'<p align="center"><i>Evaluates the use of metals and minerals<i></p>', unsafe_allow_html = True)
with col_pe:
st.markdown('<h4 align="center">⛽️ Primary Energy</h4>', unsafe_allow_html = True)
st.latex(f'\Large {impacts.pe.magnitude:.3g} \ \large {impacts.pe.units}')
st.markdown(f'<p align="center"><i>Evaluates the use of energy resources<i></p>', unsafe_allow_html = True)
with col_water:
st.markdown('<h4 align="center">🚰 Water</h4>', unsafe_allow_html = True)
st.latex('\Large Upcoming...')
st.markdown(f'<p align="center"><i>Evaluates the use of water<i></p>', unsafe_allow_html = True)
############################################################################################################
def display_equivalent(impacts):
st.divider()
ev_eq = format_energy_eq_electric_vehicle(impacts.energy)
streaming_eq = format_gwp_eq_streaming(impacts.gwp)
col1, col2, col3 = st.columns(3)
with col1:
physical_activity, distance = format_energy_eq_physical_activity(impacts.energy)
if physical_activity == PhysicalActivity.WALKING:
physical_activity = "🚶 " + physical_activity.capitalize()
if physical_activity == PhysicalActivity.RUNNING:
physical_activity = "🏃 " + physical_activity.capitalize()
st.markdown(f'<h4 align="center">{physical_activity}</h4>', unsafe_allow_html = True)
st.latex(f'\Large {distance.magnitude:.3g} \ \large {distance.units}')
st.markdown(f'<p align="center"><i>Based on energy consumption<i></p>', unsafe_allow_html = True)
with col2:
ev_eq = format_energy_eq_electric_vehicle(impacts.energy)
st.markdown(f'<h4 align="center">🔋 Electric Vehicle</h4>', unsafe_allow_html = True)
st.latex(f'\Large {ev_eq.magnitude:.3g} \ \large {ev_eq.units}')
st.markdown(f'<p align="center"><i>Based on energy consumption<i></p>', unsafe_allow_html = True)
with col3:
streaming_eq = format_gwp_eq_streaming(impacts.gwp)
st.markdown(f'<h4 align="center">⏯️ Streaming</h4>', unsafe_allow_html = True)
st.latex(f'\Large {streaming_eq.magnitude:.3g} \ \large {streaming_eq.units}')
st.markdown(f'<p align="center"><i>Based on GHG emissions<i></p>', unsafe_allow_html = True)
st.divider()
st.markdown('<h3 align="center">What if 1% of the planet does this request everyday for 1 year ?</h3>', unsafe_allow_html = True)
st.markdown('<p align="center">If this use case is largely deployed around the world, the equivalent impacts would be the impacts of this request x 1% of 8 billion people x 365 days in a year.</p>', unsafe_allow_html = True)
col4, col5, col6 = st.columns(3)
with col4:
electricity_production, count = format_energy_eq_electricity_production(impacts.energy)
if electricity_production == EnergyProduction.NUCLEAR:
emoji = "☢️"
name = "Nuclear power plants"
if electricity_production == EnergyProduction.WIND:
emoji = "💨️ "
name = "Wind turbines"
st.markdown(f'<h4 align="center">{emoji} {count.magnitude:.0f} {name} (yearly)</h4>', unsafe_allow_html = True)
st.markdown(f'<p align="center"><i>Based on energy consumption<i></p>', unsafe_allow_html = True)
with col5:
ireland_count = format_energy_eq_electricity_consumption_ireland(impacts.energy)
st.markdown(f'<h4 align="center">🇮🇪 {ireland_count.magnitude:.3f} x Ireland <span style="font-size: 12px">(yearly ⚡️ cons.)</span></h2></h4>', unsafe_allow_html = True)
st.markdown(f'<p align="center"><i>Based on energy consumption<i></p>', unsafe_allow_html = True)
with col6:
paris_nyc_airplane = format_gwp_eq_airplane_paris_nyc(impacts.gwp)
st.markdown(f'<h4 align="center">✈️ {round(paris_nyc_airplane.magnitude):,} Paris ↔ NYC</h4>', unsafe_allow_html = True)
st.markdown(f'<p align="center"><i>Based on GHG emissions<i></p>', unsafe_allow_html = True)