Copy disabled (too large)
Download .txt
Showing preview only (44,506K chars total). Download the full file to get everything.
Repository: corradio/electricitymap
Branch: master
Commit: 3c54745a9bad
Files: 1613
Total size: 83.3 MB
Directory structure:
gitextract_95d_jcjb/
├── .devcontainer/
│ └── devcontainer.json
├── .dockerignore
├── .editorconfig
├── .gitattributes
├── .github/
│ ├── CODEOWNERS
│ ├── ISSUE_TEMPLATE/
│ │ ├── blank-issue.md
│ │ ├── config.yml
│ │ ├── data-issue.yml
│ │ ├── feature_request.md
│ │ └── frontend-bug-report.md
│ ├── codeql-config.yml
│ ├── dependabot.yml
│ ├── filter-groups.yml
│ ├── labeler.yml
│ ├── pull_request_template.md
│ └── workflows/
│ ├── CI.yml
│ ├── README.md
│ ├── codeql.yml
│ ├── create-release.yml
│ ├── earthly-contrib.yml
│ ├── label.yml
│ └── validate_local_links_in_md.yml
├── .gitignore
├── .pre-commit-config.yaml
├── .prettierignore
├── .prettierrc.js
├── .python-version
├── .vscode/
│ ├── extensions.json
│ └── settings.json
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── DATA_SOURCES.md
├── EMISSION_FACTORS_SOURCES.md
├── Earthfile
├── LICENSE.md
├── LICENSE_MIT.txt
├── README.md
├── __init__.py
├── capacity_update.py
├── config/
│ ├── Earthfile
│ ├── __init__.py
│ ├── data_centers/
│ │ └── data_centers.json
│ ├── defaults.yaml
│ ├── exchanges/
│ │ ├── AD_ES.yaml
│ │ ├── AD_FR.yaml
│ │ ├── AL_GR.yaml
│ │ ├── AL_ME.yaml
│ │ ├── AL_RS.yaml
│ │ ├── AL_XK.yaml
│ │ ├── AM_GE.yaml
│ │ ├── AM_IR.yaml
│ │ ├── AR_BR-S.yaml
│ │ ├── AR_BR.yaml
│ │ ├── AR_CL-SEN.yaml
│ │ ├── AR_PY.yaml
│ │ ├── AR_UY.yaml
│ │ ├── AT_CH.yaml
│ │ ├── AT_CZ.yaml
│ │ ├── AT_DE.yaml
│ │ ├── AT_HU.yaml
│ │ ├── AT_IT-NO.yaml
│ │ ├── AT_IT.yaml
│ │ ├── AT_SI.yaml
│ │ ├── AU-NSW_AU-QLD.yaml
│ │ ├── AU-NSW_AU-VIC.yaml
│ │ ├── AU-SA_AU-VIC.yaml
│ │ ├── AU-TAS_AU-VIC.yaml
│ │ ├── AX_FI.yaml
│ │ ├── AX_SE-SE3.yaml
│ │ ├── AX_SE.yaml
│ │ ├── AZ_GE.yaml
│ │ ├── AZ_RU-1.yaml
│ │ ├── BA_HR.yaml
│ │ ├── BA_ME.yaml
│ │ ├── BA_RS.yaml
│ │ ├── BD_IN-EA.yaml
│ │ ├── BD_IN-NE.yaml
│ │ ├── BD_IN.yaml
│ │ ├── BD_NP.yaml
│ │ ├── BE_DE.yaml
│ │ ├── BE_FR.yaml
│ │ ├── BE_GB.yaml
│ │ ├── BE_LU.yaml
│ │ ├── BE_NL.yaml
│ │ ├── BG_GR.yaml
│ │ ├── BG_MK.yaml
│ │ ├── BG_RO.yaml
│ │ ├── BG_RS.yaml
│ │ ├── BG_TR.yaml
│ │ ├── BR-CS_BR-N.yaml
│ │ ├── BR-CS_BR-NE.yaml
│ │ ├── BR-CS_BR-S.yaml
│ │ ├── BR-N_BR-NE.yaml
│ │ ├── BR-S_PY.yaml
│ │ ├── BR-S_UY.yaml
│ │ ├── BR_PY.yaml
│ │ ├── BR_UY.yaml
│ │ ├── BT_IN-EA.yaml
│ │ ├── BT_IN.yaml
│ │ ├── BY_LT.yaml
│ │ ├── BY_RU-1.yaml
│ │ ├── BY_UA.yaml
│ │ ├── BZ_MX.yaml
│ │ ├── CA-AB_CA-BC.yaml
│ │ ├── CA-AB_CA-SK.yaml
│ │ ├── CA-AB_US-NW-NWMT.yaml
│ │ ├── CA-BC_US-NW-BPAT.yaml
│ │ ├── CA-MB_CA-ON.yaml
│ │ ├── CA-MB_US-MIDW-MISO.yaml
│ │ ├── CA-NB_CA-NS.yaml
│ │ ├── CA-NB_CA-PE.yaml
│ │ ├── CA-NB_CA-QC.yaml
│ │ ├── CA-NB_US-NE-ISNE.yaml
│ │ ├── CA-NL_CA-NS.yaml
│ │ ├── CA-ON_CA-QC.yaml
│ │ ├── CA-ON_US-MIDW-MISO.yaml
│ │ ├── CA-ON_US-NY-NYIS.yaml
│ │ ├── CA-QC_US-NE-ISNE.yaml
│ │ ├── CA-QC_US-NY-NYIS.yaml
│ │ ├── CA-SK_US-CENT-SWPP.yaml
│ │ ├── CA_US.yaml
│ │ ├── CH_DE.yaml
│ │ ├── CH_FR.yaml
│ │ ├── CH_IT-NO.yaml
│ │ ├── CH_IT.yaml
│ │ ├── CN_RU-AS.yaml
│ │ ├── CR_NI.yaml
│ │ ├── CR_PA.yaml
│ │ ├── CZ_DE.yaml
│ │ ├── CZ_PL.yaml
│ │ ├── CZ_SK.yaml
│ │ ├── DE_DK-DK1.yaml
│ │ ├── DE_DK-DK2.yaml
│ │ ├── DE_DK.yaml
│ │ ├── DE_FR.yaml
│ │ ├── DE_LU.yaml
│ │ ├── DE_NL.yaml
│ │ ├── DE_NO-NO2.yaml
│ │ ├── DE_NO.yaml
│ │ ├── DE_PL.yaml
│ │ ├── DE_SE-SE4.yaml
│ │ ├── DE_SE.yaml
│ │ ├── DK-DK1_DK-DK2.yaml
│ │ ├── DK-DK1_GB.yaml
│ │ ├── DK-DK1_NL.yaml
│ │ ├── DK-DK1_NO-NO2.yaml
│ │ ├── DK-DK1_SE-SE3.yaml
│ │ ├── DK-DK2_SE-SE4.yaml
│ │ ├── DK_GB.yaml
│ │ ├── DK_NL.yaml
│ │ ├── DK_NO.yaml
│ │ ├── DK_SE.yaml
│ │ ├── EE_FI.yaml
│ │ ├── EE_LV.yaml
│ │ ├── EE_RU-1.yaml
│ │ ├── ES-CN-FV_ES-CN-LZ.yaml
│ │ ├── ES-IB-FO_ES-IB-IZ.yaml
│ │ ├── ES-IB-IZ_ES-IB-MA.yaml
│ │ ├── ES-IB-MA_ES-IB-ME.yaml
│ │ ├── ES_ES-IB-MA.yaml
│ │ ├── ES_FR.yaml
│ │ ├── ES_MA.yaml
│ │ ├── ES_PT.yaml
│ │ ├── FI_NO-NO4.yaml
│ │ ├── FI_NO.yaml
│ │ ├── FI_RU-1.yaml
│ │ ├── FI_SE-SE1.yaml
│ │ ├── FI_SE-SE3.yaml
│ │ ├── FI_SE.yaml
│ │ ├── FR-COR_IT-CNO.yaml
│ │ ├── FR-COR_IT-SAR.yaml
│ │ ├── FR-COR_IT.yaml
│ │ ├── FR_GB.yaml
│ │ ├── FR_IT-NO.yaml
│ │ ├── FR_IT.yaml
│ │ ├── FR_JE.yaml
│ │ ├── FR_LU.yaml
│ │ ├── GB-NIR_IE.yaml
│ │ ├── GB_GB-NIR.yaml
│ │ ├── GB_IE.yaml
│ │ ├── GB_IM.yaml
│ │ ├── GB_NL.yaml
│ │ ├── GB_NO-NO2.yaml
│ │ ├── GB_NO.yaml
│ │ ├── GE_RU-1.yaml
│ │ ├── GE_TR.yaml
│ │ ├── GR_IT-SO.yaml
│ │ ├── GR_IT.yaml
│ │ ├── GR_MK.yaml
│ │ ├── GR_TR.yaml
│ │ ├── GT_HN.yaml
│ │ ├── GT_MX.yaml
│ │ ├── GT_SV.yaml
│ │ ├── HN_NI.yaml
│ │ ├── HN_SV.yaml
│ │ ├── HR_HU.yaml
│ │ ├── HR_RS.yaml
│ │ ├── HR_SI.yaml
│ │ ├── HU_RO.yaml
│ │ ├── HU_RS.yaml
│ │ ├── HU_SI.yaml
│ │ ├── HU_SK.yaml
│ │ ├── HU_UA.yaml
│ │ ├── IN-EA_IN-NE.yaml
│ │ ├── IN-EA_IN-NO.yaml
│ │ ├── IN-EA_IN-SO.yaml
│ │ ├── IN-EA_IN-WE.yaml
│ │ ├── IN-EA_NP.yaml
│ │ ├── IN-NO_IN-WE.yaml
│ │ ├── IN-SO_IN-WE.yaml
│ │ ├── IN_NP.yaml
│ │ ├── IQ_IR.yaml
│ │ ├── IT-CNO_IT-CSO.yaml
│ │ ├── IT-CNO_IT-NO.yaml
│ │ ├── IT-CSO_IT-SAR.yaml
│ │ ├── IT-CSO_IT-SO.yaml
│ │ ├── IT-CSO_ME.yaml
│ │ ├── IT-NO_SI.yaml
│ │ ├── IT-SIC_IT-SO.yaml
│ │ ├── IT-SIC_MT.yaml
│ │ ├── IT_ME.yaml
│ │ ├── IT_MT.yaml
│ │ ├── IT_SI.yaml
│ │ ├── JP-CB_JP-HR.yaml
│ │ ├── JP-CB_JP-KN.yaml
│ │ ├── JP-CB_JP-TK.yaml
│ │ ├── JP-CG_JP-KN.yaml
│ │ ├── JP-CG_JP-KY.yaml
│ │ ├── JP-CG_JP-SK.yaml
│ │ ├── JP-HKD_JP-TH.yaml
│ │ ├── JP-HR_JP-KN.yaml
│ │ ├── JP-KN_JP-SK.yaml
│ │ ├── JP-TH_JP-TK.yaml
│ │ ├── KZ_RU-1.yaml
│ │ ├── KZ_RU-2.yaml
│ │ ├── LS_ZA.yaml
│ │ ├── LT_LV.yaml
│ │ ├── LT_PL.yaml
│ │ ├── LT_RU-KGD.yaml
│ │ ├── LT_SE-SE4.yaml
│ │ ├── LT_SE.yaml
│ │ ├── LV_RU-1.yaml
│ │ ├── MD_RO.yaml
│ │ ├── MD_UA.yaml
│ │ ├── ME_RS.yaml
│ │ ├── ME_XK.yaml
│ │ ├── MK_RS.yaml
│ │ ├── MK_XK.yaml
│ │ ├── MN_RU-2.yaml
│ │ ├── MX_US-CAL-CISO.yaml
│ │ ├── MX_US-TEX-ERCO.yaml
│ │ ├── MX_US.yaml
│ │ ├── MY-WM_SG.yaml
│ │ ├── MY-WM_TH.yaml
│ │ ├── MY_SG.yaml
│ │ ├── MY_TH.yaml
│ │ ├── NA_ZA.yaml
│ │ ├── NA_ZM.yaml
│ │ ├── NL_NO-NO2.yaml
│ │ ├── NL_NO.yaml
│ │ ├── NO-NO1_NO-NO2.yaml
│ │ ├── NO-NO1_NO-NO3.yaml
│ │ ├── NO-NO1_NO-NO5.yaml
│ │ ├── NO-NO1_SE-SE3.yaml
│ │ ├── NO-NO2_NO-NO5.yaml
│ │ ├── NO-NO3_NO-NO4.yaml
│ │ ├── NO-NO3_NO-NO5.yaml
│ │ ├── NO-NO3_SE-SE2.yaml
│ │ ├── NO-NO4_RU-1.yaml
│ │ ├── NO-NO4_SE-SE1.yaml
│ │ ├── NO-NO4_SE-SE2.yaml
│ │ ├── NO_RU-1.yaml
│ │ ├── NO_SE.yaml
│ │ ├── PH-LU_PH-VI.yaml
│ │ ├── PH-MI_PH-VI.yaml
│ │ ├── PL_SE-SE4.yaml
│ │ ├── PL_SE.yaml
│ │ ├── PL_SK.yaml
│ │ ├── PL_UA.yaml
│ │ ├── RO_RS.yaml
│ │ ├── RO_UA.yaml
│ │ ├── RS_XK.yaml
│ │ ├── RU-1_RU-2.yaml
│ │ ├── RU-1_UA-CR.yaml
│ │ ├── RU-1_UA.yaml
│ │ ├── SE-SE1_SE-SE2.yaml
│ │ ├── SE-SE2_SE-SE3.yaml
│ │ ├── SE-SE3_SE-SE4.yaml
│ │ ├── SK_UA.yaml
│ │ ├── US-CAL-BANC_US-CAL-CISO.yaml
│ │ ├── US-CAL-BANC_US-CAL-TIDC.yaml
│ │ ├── US-CAL-BANC_US-NW-BPAT.yaml
│ │ ├── US-CAL-CISO_US-CAL-IID.yaml
│ │ ├── US-CAL-CISO_US-CAL-LDWP.yaml
│ │ ├── US-CAL-CISO_US-CAL-TIDC.yaml
│ │ ├── US-CAL-CISO_US-NW-BPAT.yaml
│ │ ├── US-CAL-CISO_US-NW-NEVP.yaml
│ │ ├── US-CAL-CISO_US-NW-PACW.yaml
│ │ ├── US-CAL-CISO_US-SW-AZPS.yaml
│ │ ├── US-CAL-CISO_US-SW-SRP.yaml
│ │ ├── US-CAL-CISO_US-SW-WALC.yaml
│ │ ├── US-CAL-IID_US-SW-AZPS.yaml
│ │ ├── US-CAL-IID_US-SW-WALC.yaml
│ │ ├── US-CAL-LDWP_US-NW-BPAT.yaml
│ │ ├── US-CAL-LDWP_US-NW-NEVP.yaml
│ │ ├── US-CAL-LDWP_US-NW-PACE.yaml
│ │ ├── US-CAL-LDWP_US-SW-AZPS.yaml
│ │ ├── US-CAL-LDWP_US-SW-WALC.yaml
│ │ ├── US-CAR-CPLE_US-CAR-DUK.yaml
│ │ ├── US-CAR-CPLE_US-CAR-SC.yaml
│ │ ├── US-CAR-CPLE_US-CAR-SCEG.yaml
│ │ ├── US-CAR-CPLE_US-CAR-YAD.yaml
│ │ ├── US-CAR-CPLE_US-MIDA-PJM.yaml
│ │ ├── US-CAR-CPLW_US-CAR-DUK.yaml
│ │ ├── US-CAR-CPLW_US-MIDA-PJM.yaml
│ │ ├── US-CAR-CPLW_US-TEN-TVA.yaml
│ │ ├── US-CAR-DUK_US-CAR-SC.yaml
│ │ ├── US-CAR-DUK_US-CAR-SCEG.yaml
│ │ ├── US-CAR-DUK_US-CAR-YAD.yaml
│ │ ├── US-CAR-DUK_US-MIDA-PJM.yaml
│ │ ├── US-CAR-DUK_US-SE-SEPA.yaml
│ │ ├── US-CAR-DUK_US-SE-SOCO.yaml
│ │ ├── US-CAR-DUK_US-TEN-TVA.yaml
│ │ ├── US-CAR-SCEG_US-SE-SEPA.yaml
│ │ ├── US-CAR-SCEG_US-SE-SOCO.yaml
│ │ ├── US-CAR-SC_US-CAR-SCEG.yaml
│ │ ├── US-CAR-SC_US-SE-SEPA.yaml
│ │ ├── US-CAR-SC_US-SE-SOCO.yaml
│ │ ├── US-CENT-SPA_US-CENT-SWPP.yaml
│ │ ├── US-CENT-SPA_US-MIDW-AECI.yaml
│ │ ├── US-CENT-SPA_US-MIDW-MISO.yaml
│ │ ├── US-CENT-SWPP_US-MIDW-AECI.yaml
│ │ ├── US-CENT-SWPP_US-MIDW-MISO.yaml
│ │ ├── US-CENT-SWPP_US-NW-PSCO.yaml
│ │ ├── US-CENT-SWPP_US-NW-WACM.yaml
│ │ ├── US-CENT-SWPP_US-NW-WAUW.yaml
│ │ ├── US-CENT-SWPP_US-SW-EPE.yaml
│ │ ├── US-CENT-SWPP_US-SW-PNM.yaml
│ │ ├── US-CENT-SWPP_US-TEX-ERCO.yaml
│ │ ├── US-FLA-FMPP_US-FLA-FPC.yaml
│ │ ├── US-FLA-FMPP_US-FLA-FPL.yaml
│ │ ├── US-FLA-FMPP_US-FLA-JEA.yaml
│ │ ├── US-FLA-FMPP_US-FLA-TEC.yaml
│ │ ├── US-FLA-FPC_US-FLA-FPL.yaml
│ │ ├── US-FLA-FPC_US-FLA-GVL.yaml
│ │ ├── US-FLA-FPC_US-FLA-SEC.yaml
│ │ ├── US-FLA-FPC_US-FLA-TAL.yaml
│ │ ├── US-FLA-FPC_US-FLA-TEC.yaml
│ │ ├── US-FLA-FPC_US-SE-SOCO.yaml
│ │ ├── US-FLA-FPL_US-FLA-GVL.yaml
│ │ ├── US-FLA-FPL_US-FLA-HST.yaml
│ │ ├── US-FLA-FPL_US-FLA-JEA.yaml
│ │ ├── US-FLA-FPL_US-FLA-SEC.yaml
│ │ ├── US-FLA-FPL_US-FLA-TEC.yaml
│ │ ├── US-FLA-FPL_US-SE-SOCO.yaml
│ │ ├── US-FLA-JEA_US-FLA-SEC.yaml
│ │ ├── US-FLA-SEC_US-FLA-TEC.yaml
│ │ ├── US-FLA-TAL_US-SE-SOCO.yaml
│ │ ├── US-MIDA-PJM_US-MIDW-LGEE.yaml
│ │ ├── US-MIDA-PJM_US-MIDW-MISO.yaml
│ │ ├── US-MIDA-PJM_US-NY-NYIS.yaml
│ │ ├── US-MIDA-PJM_US-TEN-TVA.yaml
│ │ ├── US-MIDW-AECI_US-MIDW-MISO.yaml
│ │ ├── US-MIDW-AECI_US-TEN-TVA.yaml
│ │ ├── US-MIDW-LGEE_US-MIDW-MISO.yaml
│ │ ├── US-MIDW-LGEE_US-TEN-TVA.yaml
│ │ ├── US-MIDW-MISO_US-SE-SOCO.yaml
│ │ ├── US-MIDW-MISO_US-TEN-TVA.yaml
│ │ ├── US-NE-ISNE_US-NY-NYIS.yaml
│ │ ├── US-NW-AVA_US-NW-BPAT.yaml
│ │ ├── US-NW-AVA_US-NW-CHPD.yaml
│ │ ├── US-NW-AVA_US-NW-GCPD.yaml
│ │ ├── US-NW-AVA_US-NW-IPCO.yaml
│ │ ├── US-NW-AVA_US-NW-NWMT.yaml
│ │ ├── US-NW-AVA_US-NW-PACW.yaml
│ │ ├── US-NW-BPAT_US-NW-CHPD.yaml
│ │ ├── US-NW-BPAT_US-NW-DOPD.yaml
│ │ ├── US-NW-BPAT_US-NW-GCPD.yaml
│ │ ├── US-NW-BPAT_US-NW-GRID.yaml
│ │ ├── US-NW-BPAT_US-NW-IPCO.yaml
│ │ ├── US-NW-BPAT_US-NW-NEVP.yaml
│ │ ├── US-NW-BPAT_US-NW-NWMT.yaml
│ │ ├── US-NW-BPAT_US-NW-PACW.yaml
│ │ ├── US-NW-BPAT_US-NW-PGE.yaml
│ │ ├── US-NW-BPAT_US-NW-PSEI.yaml
│ │ ├── US-NW-BPAT_US-NW-SCL.yaml
│ │ ├── US-NW-BPAT_US-NW-TPWR.yaml
│ │ ├── US-NW-CHPD_US-NW-DOPD.yaml
│ │ ├── US-NW-CHPD_US-NW-PSEI.yaml
│ │ ├── US-NW-GCPD_US-NW-PACW.yaml
│ │ ├── US-NW-GCPD_US-NW-PSEI.yaml
│ │ ├── US-NW-IPCO_US-NW-NEVP.yaml
│ │ ├── US-NW-IPCO_US-NW-NWMT.yaml
│ │ ├── US-NW-IPCO_US-NW-PACE.yaml
│ │ ├── US-NW-IPCO_US-NW-PACW.yaml
│ │ ├── US-NW-NEVP_US-NW-PACE.yaml
│ │ ├── US-NW-NEVP_US-SW-WALC.yaml
│ │ ├── US-NW-NWMT_US-NW-PACE.yaml
│ │ ├── US-NW-NWMT_US-NW-WAUW.yaml
│ │ ├── US-NW-PACE_US-NW-PACW.yaml
│ │ ├── US-NW-PACE_US-NW-WACM.yaml
│ │ ├── US-NW-PACE_US-SW-AZPS.yaml
│ │ ├── US-NW-PACW_US-NW-PGE.yaml
│ │ ├── US-NW-PSCO_US-NW-WACM.yaml
│ │ ├── US-NW-PSCO_US-SW-PNM.yaml
│ │ ├── US-NW-PSEI_US-NW-SCL.yaml
│ │ ├── US-NW-PSEI_US-NW-TPWR.yaml
│ │ ├── US-NW-WACM_US-NW-WAUW.yaml
│ │ ├── US-NW-WACM_US-SW-AZPS.yaml
│ │ ├── US-NW-WACM_US-SW-PNM.yaml
│ │ ├── US-NW-WACM_US-SW-WALC.yaml
│ │ ├── US-SE-SEPA_US-SE-SOCO.yaml
│ │ ├── US-SE-SOCO_US-TEN-TVA.yaml
│ │ ├── US-SW-AZPS_US-SW-PNM.yaml
│ │ ├── US-SW-AZPS_US-SW-SRP.yaml
│ │ ├── US-SW-AZPS_US-SW-TEPC.yaml
│ │ ├── US-SW-AZPS_US-SW-WALC.yaml
│ │ ├── US-SW-EPE_US-SW-PNM.yaml
│ │ ├── US-SW-EPE_US-SW-TEPC.yaml
│ │ ├── US-SW-PNM_US-SW-SRP.yaml
│ │ ├── US-SW-PNM_US-SW-TEPC.yaml
│ │ ├── US-SW-SRP_US-SW-TEPC.yaml
│ │ ├── US-SW-SRP_US-SW-WALC.yaml
│ │ └── US-SW-TEPC_US-SW-WALC.yaml
│ ├── retired_zones/
│ │ ├── CA-NL-LB.yaml
│ │ ├── CA-NL-NF.yaml
│ │ ├── ES-CN-FVLZ.yaml
│ │ ├── IN-AP.yaml
│ │ ├── IN-AR.yaml
│ │ ├── IN-AS.yaml
│ │ ├── IN-BR.yaml
│ │ ├── IN-CT.yaml
│ │ ├── IN-DL.yaml
│ │ ├── IN-DN.yaml
│ │ ├── IN-GA.yaml
│ │ ├── IN-GJ.yaml
│ │ ├── IN-HP.yaml
│ │ ├── IN-HR.yaml
│ │ ├── IN-JH.yaml
│ │ ├── IN-JK.yaml
│ │ ├── IN-KA.yaml
│ │ ├── IN-KL.yaml
│ │ ├── IN-MH.yaml
│ │ ├── IN-ML.yaml
│ │ ├── IN-MN.yaml
│ │ ├── IN-MP.yaml
│ │ ├── IN-MZ.yaml
│ │ ├── IN-NL.yaml
│ │ ├── IN-OR.yaml
│ │ ├── IN-PB.yaml
│ │ ├── IN-PY.yaml
│ │ ├── IN-RJ.yaml
│ │ ├── IN-SK.yaml
│ │ ├── IN-TN.yaml
│ │ ├── IN-TR.yaml
│ │ ├── IN-UP.yaml
│ │ ├── IN-UT.yaml
│ │ ├── IN-WB.yaml
│ │ ├── IQ-KUR.yaml
│ │ ├── MX-BC.yaml
│ │ ├── MX-BCS.yaml
│ │ ├── MX-CE.yaml
│ │ ├── MX-NE.yaml
│ │ ├── MX-NO.yaml
│ │ ├── MX-NW.yaml
│ │ ├── MX-OC.yaml
│ │ ├── MX-OR.yaml
│ │ ├── MX-PN.yaml
│ │ ├── README.md
│ │ ├── US-FLA-NSB.yaml
│ │ ├── US-HI-HA.yaml
│ │ ├── US-HI-KA.yaml
│ │ ├── US-HI-KH.yaml
│ │ ├── US-HI-LA.yaml
│ │ ├── US-HI-MA.yaml
│ │ ├── US-HI-MO.yaml
│ │ ├── US-HI-NI.yaml
│ │ ├── US-HI-OA.yaml
│ │ ├── US-NW-AVRN.yaml
│ │ ├── US-SE-AEC.yaml
│ │ ├── US-SW-DEAA.yaml
│ │ ├── US-SW-GRMA.yaml
│ │ └── US-SW-HGMA.yaml
│ ├── zone_names.json
│ └── zones/
│ ├── AD.yaml
│ ├── AE.yaml
│ ├── AF.yaml
│ ├── AG.yaml
│ ├── AL.yaml
│ ├── AM.yaml
│ ├── AO.yaml
│ ├── AR.yaml
│ ├── AT.yaml
│ ├── AU-LH.yaml
│ ├── AU-NSW.yaml
│ ├── AU-NT.yaml
│ ├── AU-QLD.yaml
│ ├── AU-SA.yaml
│ ├── AU-TAS-CBI.yaml
│ ├── AU-TAS-FI.yaml
│ ├── AU-TAS-KI.yaml
│ ├── AU-TAS.yaml
│ ├── AU-VIC.yaml
│ ├── AU-WA-RI.yaml
│ ├── AU-WA.yaml
│ ├── AU.yaml
│ ├── AW.yaml
│ ├── AX.yaml
│ ├── AZ.yaml
│ ├── BA.yaml
│ ├── BB.yaml
│ ├── BD.yaml
│ ├── BE.yaml
│ ├── BF.yaml
│ ├── BG.yaml
│ ├── BH.yaml
│ ├── BI.yaml
│ ├── BJ.yaml
│ ├── BM.yaml
│ ├── BN.yaml
│ ├── BO.yaml
│ ├── BR-CS.yaml
│ ├── BR-N.yaml
│ ├── BR-NE.yaml
│ ├── BR-S.yaml
│ ├── BR.yaml
│ ├── BS.yaml
│ ├── BT.yaml
│ ├── BW.yaml
│ ├── BY.yaml
│ ├── BZ.yaml
│ ├── CA-AB.yaml
│ ├── CA-BC.yaml
│ ├── CA-MB.yaml
│ ├── CA-NB.yaml
│ ├── CA-NL.yaml
│ ├── CA-NS.yaml
│ ├── CA-NT.yaml
│ ├── CA-NU.yaml
│ ├── CA-ON.yaml
│ ├── CA-PE.yaml
│ ├── CA-QC.yaml
│ ├── CA-SK.yaml
│ ├── CA-YT.yaml
│ ├── CA.yaml
│ ├── CD.yaml
│ ├── CF.yaml
│ ├── CG.yaml
│ ├── CH.yaml
│ ├── CI.yaml
│ ├── CL-CHP.yaml
│ ├── CL-SEA.yaml
│ ├── CL-SEM.yaml
│ ├── CL-SEN.yaml
│ ├── CM.yaml
│ ├── CN.yaml
│ ├── CO.yaml
│ ├── CR.yaml
│ ├── CU.yaml
│ ├── CV.yaml
│ ├── CW.yaml
│ ├── CY.yaml
│ ├── CZ.yaml
│ ├── DE.yaml
│ ├── DJ.yaml
│ ├── DK-DK1.yaml
│ ├── DK-DK2.yaml
│ ├── DK.yaml
│ ├── DM.yaml
│ ├── DO.yaml
│ ├── DZ.yaml
│ ├── EC.yaml
│ ├── EE.yaml
│ ├── EG.yaml
│ ├── EH.yaml
│ ├── ER.yaml
│ ├── ES-CE.yaml
│ ├── ES-CN-FV.yaml
│ ├── ES-CN-GC.yaml
│ ├── ES-CN-HI.yaml
│ ├── ES-CN-IG.yaml
│ ├── ES-CN-LP.yaml
│ ├── ES-CN-LZ.yaml
│ ├── ES-CN-TE.yaml
│ ├── ES-IB-FO.yaml
│ ├── ES-IB-IZ.yaml
│ ├── ES-IB-MA.yaml
│ ├── ES-IB-ME.yaml
│ ├── ES-ML.yaml
│ ├── ES.yaml
│ ├── ET.yaml
│ ├── FI.yaml
│ ├── FJ.yaml
│ ├── FK.yaml
│ ├── FM.yaml
│ ├── FO-MI.yaml
│ ├── FO-SI.yaml
│ ├── FO.yaml
│ ├── FR-COR.yaml
│ ├── FR.yaml
│ ├── GA.yaml
│ ├── GB-NIR.yaml
│ ├── GB-ZET.yaml
│ ├── GB.yaml
│ ├── GE.yaml
│ ├── GF.yaml
│ ├── GG.yaml
│ ├── GH.yaml
│ ├── GI.yaml
│ ├── GL.yaml
│ ├── GM.yaml
│ ├── GN.yaml
│ ├── GP.yaml
│ ├── GQ.yaml
│ ├── GR.yaml
│ ├── GS.yaml
│ ├── GT.yaml
│ ├── GU.yaml
│ ├── GW.yaml
│ ├── GY.yaml
│ ├── HK.yaml
│ ├── HM.yaml
│ ├── HN.yaml
│ ├── HR.yaml
│ ├── HT.yaml
│ ├── HU.yaml
│ ├── ID.yaml
│ ├── IE.yaml
│ ├── IL.yaml
│ ├── IM.yaml
│ ├── IN-AN.yaml
│ ├── IN-EA.yaml
│ ├── IN-NE.yaml
│ ├── IN-NO.yaml
│ ├── IN-SO.yaml
│ ├── IN-WE.yaml
│ ├── IN.yaml
│ ├── IQ.yaml
│ ├── IR.yaml
│ ├── IS.yaml
│ ├── IT-CNO.yaml
│ ├── IT-CSO.yaml
│ ├── IT-NO.yaml
│ ├── IT-SAR.yaml
│ ├── IT-SIC.yaml
│ ├── IT-SO.yaml
│ ├── IT.yaml
│ ├── JE.yaml
│ ├── JM.yaml
│ ├── JO.yaml
│ ├── JP-CB.yaml
│ ├── JP-CG.yaml
│ ├── JP-HKD.yaml
│ ├── JP-HR.yaml
│ ├── JP-KN.yaml
│ ├── JP-KY.yaml
│ ├── JP-ON.yaml
│ ├── JP-SK.yaml
│ ├── JP-TH.yaml
│ ├── JP-TK.yaml
│ ├── JP.yaml
│ ├── KE.yaml
│ ├── KG.yaml
│ ├── KH.yaml
│ ├── KM.yaml
│ ├── KP.yaml
│ ├── KR.yaml
│ ├── KW.yaml
│ ├── KY.yaml
│ ├── KZ.yaml
│ ├── LA.yaml
│ ├── LB.yaml
│ ├── LC.yaml
│ ├── LI.yaml
│ ├── LK.yaml
│ ├── LR.yaml
│ ├── LS.yaml
│ ├── LT.yaml
│ ├── LU.yaml
│ ├── LV.yaml
│ ├── LY.yaml
│ ├── MA.yaml
│ ├── MC.yaml
│ ├── MD.yaml
│ ├── ME.yaml
│ ├── MG.yaml
│ ├── MK.yaml
│ ├── ML.yaml
│ ├── MM.yaml
│ ├── MN.yaml
│ ├── MO.yaml
│ ├── MQ.yaml
│ ├── MR.yaml
│ ├── MT.yaml
│ ├── MU.yaml
│ ├── MV.yaml
│ ├── MW.yaml
│ ├── MX.yaml
│ ├── MY-EM.yaml
│ ├── MY-WM.yaml
│ ├── MY.yaml
│ ├── MZ.yaml
│ ├── NA.yaml
│ ├── NC.yaml
│ ├── NE.yaml
│ ├── NG.yaml
│ ├── NI.yaml
│ ├── NL.yaml
│ ├── NO-NO1.yaml
│ ├── NO-NO2.yaml
│ ├── NO-NO3.yaml
│ ├── NO-NO4.yaml
│ ├── NO-NO5.yaml
│ ├── NO.yaml
│ ├── NP.yaml
│ ├── NZ-NZA.yaml
│ ├── NZ-NZC.yaml
│ ├── NZ-NZST.yaml
│ ├── NZ.yaml
│ ├── OM.yaml
│ ├── PA.yaml
│ ├── PE.yaml
│ ├── PF.yaml
│ ├── PG.yaml
│ ├── PH-LU.yaml
│ ├── PH-MI.yaml
│ ├── PH-VI.yaml
│ ├── PH.yaml
│ ├── PK.yaml
│ ├── PL.yaml
│ ├── PM.yaml
│ ├── PR.yaml
│ ├── PS.yaml
│ ├── PT-AC.yaml
│ ├── PT-MA.yaml
│ ├── PT.yaml
│ ├── PW.yaml
│ ├── PY.yaml
│ ├── QA.yaml
│ ├── RE.yaml
│ ├── RO.yaml
│ ├── RS.yaml
│ ├── RU-1.yaml
│ ├── RU-2.yaml
│ ├── RU-AS.yaml
│ ├── RU-EU.yaml
│ ├── RU-FE.yaml
│ ├── RU-KGD.yaml
│ ├── RU.yaml
│ ├── RW.yaml
│ ├── SA.yaml
│ ├── SB.yaml
│ ├── SC.yaml
│ ├── SD.yaml
│ ├── SE-SE1.yaml
│ ├── SE-SE2.yaml
│ ├── SE-SE3.yaml
│ ├── SE-SE4.yaml
│ ├── SE.yaml
│ ├── SG.yaml
│ ├── SI.yaml
│ ├── SJ.yaml
│ ├── SK.yaml
│ ├── SL.yaml
│ ├── SN.yaml
│ ├── SO.yaml
│ ├── SR.yaml
│ ├── SS.yaml
│ ├── ST.yaml
│ ├── SV.yaml
│ ├── SY.yaml
│ ├── SZ.yaml
│ ├── TD.yaml
│ ├── TF.yaml
│ ├── TG.yaml
│ ├── TH.yaml
│ ├── TJ.yaml
│ ├── TL.yaml
│ ├── TM.yaml
│ ├── TN.yaml
│ ├── TO.yaml
│ ├── TR.yaml
│ ├── TT.yaml
│ ├── TW.yaml
│ ├── TZ.yaml
│ ├── UA-CR.yaml
│ ├── UA.yaml
│ ├── UG.yaml
│ ├── US-AK-SEAPA.yaml
│ ├── US-AK.yaml
│ ├── US-CAL-BANC.yaml
│ ├── US-CAL-CISO.yaml
│ ├── US-CAL-IID.yaml
│ ├── US-CAL-LDWP.yaml
│ ├── US-CAL-TIDC.yaml
│ ├── US-CAR-CPLE.yaml
│ ├── US-CAR-CPLW.yaml
│ ├── US-CAR-DUK.yaml
│ ├── US-CAR-SC.yaml
│ ├── US-CAR-SCEG.yaml
│ ├── US-CAR-YAD.yaml
│ ├── US-CENT-SPA.yaml
│ ├── US-CENT-SWPP.yaml
│ ├── US-FLA-FMPP.yaml
│ ├── US-FLA-FPC.yaml
│ ├── US-FLA-FPL.yaml
│ ├── US-FLA-GVL.yaml
│ ├── US-FLA-HST.yaml
│ ├── US-FLA-JEA.yaml
│ ├── US-FLA-SEC.yaml
│ ├── US-FLA-TAL.yaml
│ ├── US-FLA-TEC.yaml
│ ├── US-HI.yaml
│ ├── US-MIDA-PJM.yaml
│ ├── US-MIDW-AECI.yaml
│ ├── US-MIDW-LGEE.yaml
│ ├── US-MIDW-MISO.yaml
│ ├── US-NE-ISNE.yaml
│ ├── US-NW-AVA.yaml
│ ├── US-NW-BPAT.yaml
│ ├── US-NW-CHPD.yaml
│ ├── US-NW-DOPD.yaml
│ ├── US-NW-GCPD.yaml
│ ├── US-NW-GRID.yaml
│ ├── US-NW-IPCO.yaml
│ ├── US-NW-NEVP.yaml
│ ├── US-NW-NWMT.yaml
│ ├── US-NW-PACE.yaml
│ ├── US-NW-PACW.yaml
│ ├── US-NW-PGE.yaml
│ ├── US-NW-PSCO.yaml
│ ├── US-NW-PSEI.yaml
│ ├── US-NW-SCL.yaml
│ ├── US-NW-TPWR.yaml
│ ├── US-NW-WACM.yaml
│ ├── US-NW-WAUW.yaml
│ ├── US-NY-NYIS.yaml
│ ├── US-SE-SEPA.yaml
│ ├── US-SE-SOCO.yaml
│ ├── US-SW-AZPS.yaml
│ ├── US-SW-EPE.yaml
│ ├── US-SW-PNM.yaml
│ ├── US-SW-SRP.yaml
│ ├── US-SW-TEPC.yaml
│ ├── US-SW-WALC.yaml
│ ├── US-TEN-TVA.yaml
│ ├── US-TEX-ERCO.yaml
│ ├── US.yaml
│ ├── UY.yaml
│ ├── UZ.yaml
│ ├── VC.yaml
│ ├── VE.yaml
│ ├── VI.yaml
│ ├── VN.yaml
│ ├── VU.yaml
│ ├── WS.yaml
│ ├── XK.yaml
│ ├── XX.yaml
│ ├── YE.yaml
│ ├── YT.yaml
│ ├── ZA.yaml
│ ├── ZM.yaml
│ └── ZW.yaml
├── electricitymap/
│ └── contrib/
│ ├── capacity_parsers/
│ │ ├── CA_ON.py
│ │ ├── CEA.py
│ │ ├── CL_SEN.py
│ │ ├── DE.py
│ │ ├── EIA.py
│ │ ├── EMBER.py
│ │ ├── ENTSOE.py
│ │ ├── FI.py
│ │ ├── GB.py
│ │ ├── IRENA.py
│ │ ├── MY_WM.py
│ │ ├── ONS.py
│ │ ├── OPENELECTRICITY.py
│ │ ├── README.md
│ │ ├── REE.py
│ │ ├── __init__.py
│ │ └── tests/
│ │ ├── __init__.py
│ │ ├── __snapshots__/
│ │ │ └── test_OPENELECTRICITY.ambr
│ │ ├── conftest.py
│ │ ├── mocks/
│ │ │ └── OPENELECTRICITY/
│ │ │ └── AU-QLD_capacities.json
│ │ ├── test_ONS.py
│ │ └── test_OPENELECTRICITY.py
│ ├── config/
│ │ ├── __init__.py
│ │ ├── capacity.py
│ │ ├── co2eq_parameters.py
│ │ ├── constants.py
│ │ ├── data_center_model.py
│ │ ├── emission_factors_lookup.py
│ │ ├── model.py
│ │ ├── py.typed
│ │ ├── reading.py
│ │ ├── types.py
│ │ └── zones.py
│ ├── lib/
│ │ ├── __init__.py
│ │ ├── data_types.py
│ │ ├── models/
│ │ │ ├── __init__.py
│ │ │ ├── constants.py
│ │ │ ├── event_lists.py
│ │ │ └── events.py
│ │ ├── tests/
│ │ │ ├── __init__.py
│ │ │ ├── test_event_lists.py
│ │ │ └── test_events.py
│ │ └── types.py
│ ├── parsers/
│ │ ├── AEMO.py
│ │ ├── AW.py
│ │ ├── AX.py
│ │ ├── BB.py
│ │ ├── BE.py
│ │ ├── BG.py
│ │ ├── CAMMESA.py
│ │ ├── CA_AB.py
│ │ ├── CA_BC.py
│ │ ├── CA_NB.py
│ │ ├── CA_NS.py
│ │ ├── CA_ON.py
│ │ ├── CA_QC.py
│ │ ├── CA_SK.py
│ │ ├── CEB.py
│ │ ├── CENACE.py
│ │ ├── CH.py
│ │ ├── CL.py
│ │ ├── CNDC.py
│ │ ├── CO.py
│ │ ├── CR.py
│ │ ├── CY.py
│ │ ├── CZ.py
│ │ ├── DK.py
│ │ ├── DO.py
│ │ ├── EC.py
│ │ ├── ECO2MIX.py
│ │ ├── EIA.py
│ │ ├── ELEXON.py
│ │ ├── ENERCAL.py
│ │ ├── ENTE.py
│ │ ├── ENTSOE.py
│ │ ├── ERP_PGCB.py
│ │ ├── ES.py
│ │ ├── ESIOS.py
│ │ ├── ESKOM.py
│ │ ├── ESTADISTICO_UT.py
│ │ ├── FO.py
│ │ ├── FR.py
│ │ ├── FR_O.py
│ │ ├── GB.py
│ │ ├── GCCIA.py
│ │ ├── GSO.py
│ │ ├── GT.py
│ │ ├── HN.py
│ │ ├── IEMOP.py
│ │ ├── IL.py
│ │ ├── IN.py
│ │ ├── IN_DL.py
│ │ ├── IN_EA.py
│ │ ├── IN_HP.py
│ │ ├── IN_KA.py
│ │ ├── IN_MH.py
│ │ ├── IN_PB.py
│ │ ├── IN_UT.py
│ │ ├── IN_WE.py
│ │ ├── JAO.py
│ │ ├── JP.py
│ │ ├── JP_KN.py
│ │ ├── JP_KY.py
│ │ ├── JP_SK.py
│ │ ├── KPX.py
│ │ ├── KW.py
│ │ ├── MD.py
│ │ ├── MN.py
│ │ ├── NED.py
│ │ ├── NG.py
│ │ ├── NI.py
│ │ ├── NL.py
│ │ ├── NO-NO4_SE.py
│ │ ├── NORDPOOL.py
│ │ ├── NTESMO.py
│ │ ├── NZ.py
│ │ ├── ONS.py
│ │ ├── OPENNEM.py
│ │ ├── PA.py
│ │ ├── PE.py
│ │ ├── PF.py
│ │ ├── PrinceEdwardIsland.py
│ │ ├── README.md
│ │ ├── RU.py
│ │ ├── SE.py
│ │ ├── SEAPA.py
│ │ ├── SG.py
│ │ ├── SMARTGRIDDASHBOARD.py
│ │ ├── TAIPOWER.py
│ │ ├── TH.py
│ │ ├── TR.py
│ │ ├── UA.py
│ │ ├── US_CA.py
│ │ ├── US_ERCOT.py
│ │ ├── US_MISO.py
│ │ ├── US_NEISO.py
│ │ ├── US_NY.py
│ │ ├── US_PJM.py
│ │ ├── US_PREPA.py
│ │ ├── US_SPP.py
│ │ ├── UY.py
│ │ ├── VN.py
│ │ ├── YUKONENERGY.py
│ │ ├── __init__.py
│ │ ├── ajenti.py
│ │ ├── amper_landsnet.py
│ │ ├── archived/
│ │ │ ├── AM.py
│ │ │ ├── AX.py
│ │ │ ├── DK_old.py
│ │ │ ├── GB_NIR.py
│ │ │ ├── GE.py
│ │ │ ├── HOPS.py
│ │ │ ├── IN_AP.py
│ │ │ ├── IN_CT.py
│ │ │ ├── IN_GJ.py
│ │ │ ├── IN_UP.py
│ │ │ ├── IQ.py
│ │ │ ├── JP_ISEP.py
│ │ │ ├── SE.py
│ │ │ ├── US_BPA.py
│ │ │ ├── US_HI.py
│ │ │ ├── XK.py
│ │ │ └── statnett.py
│ │ ├── eSett.py
│ │ ├── email_grid_alerts.py
│ │ ├── examples/
│ │ │ ├── example_parser.py
│ │ │ └── production.md
│ │ ├── lib/
│ │ │ ├── IN.py
│ │ │ ├── __init__.py
│ │ │ ├── config.py
│ │ │ ├── digits_comma.traineddata
│ │ │ ├── exceptions.py
│ │ │ ├── parsers.py
│ │ │ ├── quality.py
│ │ │ ├── session.py
│ │ │ ├── tests/
│ │ │ │ ├── __snapshots__/
│ │ │ │ │ └── test_config.ambr
│ │ │ │ └── test_config.py
│ │ │ ├── utils.py
│ │ │ ├── validation.py
│ │ │ ├── web.py
│ │ │ └── zonekey.py
│ │ ├── occtonet.py
│ │ └── tests/
│ │ ├── __init__.py
│ │ ├── __snapshots__/
│ │ │ ├── test_AEMO/
│ │ │ │ ├── test_snapshot_fetch_consumption_forecast[AU-NSW].ambr
│ │ │ │ ├── test_snapshot_fetch_consumption_forecast[AU-QLD].ambr
│ │ │ │ ├── test_snapshot_fetch_consumption_forecast[AU-SA].ambr
│ │ │ │ ├── test_snapshot_fetch_consumption_forecast[AU-TAS].ambr
│ │ │ │ └── test_snapshot_fetch_consumption_forecast[AU-VIC].ambr
│ │ │ ├── test_AW.ambr
│ │ │ ├── test_BE/
│ │ │ │ └── test_fetch_production.ambr
│ │ │ ├── test_BG.ambr
│ │ │ ├── test_CAMMESA.ambr
│ │ │ ├── test_CA_AB.ambr
│ │ │ ├── test_CA_CQ.ambr
│ │ │ ├── test_CA_ON.ambr
│ │ │ ├── test_CEB.ambr
│ │ │ ├── test_CL.ambr
│ │ │ ├── test_CNDC.ambr
│ │ │ ├── test_CO.ambr
│ │ │ ├── test_CR.ambr
│ │ │ ├── test_CY.ambr
│ │ │ ├── test_CZ/
│ │ │ │ ├── test_fetch_exchange[AT].ambr
│ │ │ │ ├── test_fetch_exchange[DE].ambr
│ │ │ │ └── test_fetch_exchange[PL].ambr
│ │ │ ├── test_CZ.ambr
│ │ │ ├── test_DK.ambr
│ │ │ ├── test_DO.ambr
│ │ │ ├── test_EIA.ambr
│ │ │ ├── test_ENERCAL.ambr
│ │ │ ├── test_ENTE.ambr
│ │ │ ├── test_ENTSOE/
│ │ │ │ ├── test_a03_curve_decompression[fake_time_series.xml].ambr
│ │ │ │ ├── test_a03_curve_decompression[fake_time_series_all_0.xml].ambr
│ │ │ │ ├── test_production_with_snapshot[FI].ambr
│ │ │ │ ├── test_production_with_snapshot[LU].ambr
│ │ │ │ ├── test_production_with_snapshot[NO-NO5].ambr
│ │ │ │ ├── test_production_with_snapshot[SE-SE4].ambr
│ │ │ │ ├── test_wind_and_solar_forecasts_by_type[current].ambr
│ │ │ │ ├── test_wind_and_solar_forecasts_by_type[day_ahead].ambr
│ │ │ │ └── test_wind_and_solar_forecasts_by_type[intraday].ambr
│ │ │ ├── test_ENTSOE.ambr
│ │ │ ├── test_ERP_PGCB/
│ │ │ │ ├── test_exchanges[None].ambr
│ │ │ │ ├── test_exchanges[target_datetime1].ambr
│ │ │ │ ├── test_fetch_consumption[None].ambr
│ │ │ │ ├── test_fetch_consumption[target_datetime1].ambr
│ │ │ │ ├── test_fetch_production[None].ambr
│ │ │ │ └── test_fetch_production[target_datetime1].ambr
│ │ │ ├── test_ES.ambr
│ │ │ ├── test_ESIOS.ambr
│ │ │ ├── test_ESKOM.ambr
│ │ │ ├── test_ESTADISTICO_UT.ambr
│ │ │ ├── test_FO/
│ │ │ │ ├── test_fetch_production_historical[DST-FO-MI].ambr
│ │ │ │ ├── test_fetch_production_historical[DST-FO-SI].ambr
│ │ │ │ ├── test_fetch_production_historical[DST-FO].ambr
│ │ │ │ ├── test_fetch_production_historical[SDT-FO-MI].ambr
│ │ │ │ ├── test_fetch_production_historical[SDT-FO-SI].ambr
│ │ │ │ ├── test_fetch_production_historical[SDT-FO].ambr
│ │ │ │ ├── test_fetch_production_live[FO-MI].ambr
│ │ │ │ ├── test_fetch_production_live[FO-SI].ambr
│ │ │ │ └── test_fetch_production_live[FO].ambr
│ │ │ ├── test_FR.ambr
│ │ │ ├── test_GB/
│ │ │ │ ├── test_fetch_price_live[AT].ambr
│ │ │ │ ├── test_fetch_price_live[BE].ambr
│ │ │ │ ├── test_fetch_price_live[CH].ambr
│ │ │ │ ├── test_fetch_price_live[ES].ambr
│ │ │ │ ├── test_fetch_price_live[FR].ambr
│ │ │ │ ├── test_fetch_price_live[GB].ambr
│ │ │ │ ├── test_fetch_price_live[IT].ambr
│ │ │ │ ├── test_fetch_price_live[NL].ambr
│ │ │ │ └── test_fetch_price_live[PT].ambr
│ │ │ ├── test_GB.ambr
│ │ │ ├── test_GT.ambr
│ │ │ ├── test_HN/
│ │ │ │ ├── test_fetch_exchange[GT-HN].ambr
│ │ │ │ ├── test_fetch_exchange[HN-NI].ambr
│ │ │ │ ├── test_fetch_exchange[HN-SV].ambr
│ │ │ │ └── test_fetch_exchange[HN-US].ambr
│ │ │ ├── test_HN.ambr
│ │ │ ├── test_IEMOP/
│ │ │ │ ├── test_production[PH-LU].ambr
│ │ │ │ ├── test_production[PH-MI].ambr
│ │ │ │ └── test_production[PH-VI].ambr
│ │ │ ├── test_IN.ambr
│ │ │ ├── test_JAO/
│ │ │ │ ├── test_fetch_core_external_atc_day_ahead_de_dk_dk1.ambr
│ │ │ │ ├── test_fetch_core_max_bex_day_ahead_de_fr.ambr
│ │ │ │ ├── test_fetch_core_scheduled_exchanges_day_ahead_de_fr.ambr
│ │ │ │ ├── test_fetch_nordic_max_bex_day_ahead_no1_se3.ambr
│ │ │ │ ├── test_fetch_nordic_max_bflow_day_ahead_no1_se3.ambr
│ │ │ │ └── test_fetch_shadow_auction_atc_day_ahead_de_fr.ambr
│ │ │ ├── test_JP.ambr
│ │ │ ├── test_JP_KY.ambr
│ │ │ ├── test_KPX.ambr
│ │ │ ├── test_MD/
│ │ │ │ ├── test_fetch_exchange_forecast_historical[RO].ambr
│ │ │ │ ├── test_fetch_exchange_forecast_historical[UA].ambr
│ │ │ │ ├── test_fetch_exchange_forecast_live[RO].ambr
│ │ │ │ ├── test_fetch_exchange_forecast_live[UA].ambr
│ │ │ │ ├── test_fetch_exchange_historical[RO].ambr
│ │ │ │ ├── test_fetch_exchange_historical[UA].ambr
│ │ │ │ ├── test_fetch_exchange_live[RO].ambr
│ │ │ │ ├── test_fetch_exchange_live[UA].ambr
│ │ │ │ ├── test_fetch_price_historical[historical_datetime0].ambr
│ │ │ │ ├── test_fetch_price_historical[historical_datetime10].ambr
│ │ │ │ ├── test_fetch_price_historical[historical_datetime1].ambr
│ │ │ │ ├── test_fetch_price_historical[historical_datetime2].ambr
│ │ │ │ ├── test_fetch_price_historical[historical_datetime3].ambr
│ │ │ │ ├── test_fetch_price_historical[historical_datetime4].ambr
│ │ │ │ ├── test_fetch_price_historical[historical_datetime5].ambr
│ │ │ │ ├── test_fetch_price_historical[historical_datetime6].ambr
│ │ │ │ ├── test_fetch_price_historical[historical_datetime7].ambr
│ │ │ │ ├── test_fetch_price_historical[historical_datetime8].ambr
│ │ │ │ └── test_fetch_price_historical[historical_datetime9].ambr
│ │ │ ├── test_MD.ambr
│ │ │ ├── test_NORDPOOL.ambr
│ │ │ ├── test_NTESMO.ambr
│ │ │ ├── test_NZ.ambr
│ │ │ ├── test_ONS/
│ │ │ │ ├── test_snapshot_fetch_exchange[AR-BR-S-BR.json].ambr
│ │ │ │ ├── test_snapshot_fetch_exchange[AR-BR-S-BR_negative_solar.json].ambr
│ │ │ │ ├── test_snapshot_fetch_exchange[AR-BR-S-data.json].ambr
│ │ │ │ ├── test_snapshot_fetch_exchange[BR-CS-BR-N-BR.json].ambr
│ │ │ │ ├── test_snapshot_fetch_exchange[BR-CS-BR-N-BR_negative_solar.json].ambr
│ │ │ │ ├── test_snapshot_fetch_exchange[BR-CS-BR-N-data.json].ambr
│ │ │ │ ├── test_snapshot_fetch_exchange[BR-CS-BR-NE-BR.json].ambr
│ │ │ │ ├── test_snapshot_fetch_exchange[BR-CS-BR-NE-BR_negative_solar.json].ambr
│ │ │ │ ├── test_snapshot_fetch_exchange[BR-CS-BR-NE-data.json].ambr
│ │ │ │ ├── test_snapshot_fetch_exchange[BR-CS-BR-S-BR.json].ambr
│ │ │ │ ├── test_snapshot_fetch_exchange[BR-CS-BR-S-BR_negative_solar.json].ambr
│ │ │ │ ├── test_snapshot_fetch_exchange[BR-CS-BR-S-data.json].ambr
│ │ │ │ ├── test_snapshot_fetch_exchange[BR-N-BR-NE-BR.json].ambr
│ │ │ │ ├── test_snapshot_fetch_exchange[BR-N-BR-NE-BR_negative_solar.json].ambr
│ │ │ │ ├── test_snapshot_fetch_exchange[BR-N-BR-NE-data.json].ambr
│ │ │ │ ├── test_snapshot_fetch_exchange[BR-S-PY-BR.json].ambr
│ │ │ │ ├── test_snapshot_fetch_exchange[BR-S-PY-BR_negative_solar.json].ambr
│ │ │ │ ├── test_snapshot_fetch_exchange[BR-S-PY-data.json].ambr
│ │ │ │ ├── test_snapshot_fetch_exchange[BR-S-UY-BR.json].ambr
│ │ │ │ ├── test_snapshot_fetch_exchange[BR-S-UY-BR_negative_solar.json].ambr
│ │ │ │ ├── test_snapshot_fetch_exchange[BR-S-UY-data.json].ambr
│ │ │ │ ├── test_snapshot_fetch_production[BR-CS-BR.json].ambr
│ │ │ │ ├── test_snapshot_fetch_production[BR-CS-BR_negative_solar.json].ambr
│ │ │ │ ├── test_snapshot_fetch_production[BR-CS-data.json].ambr
│ │ │ │ ├── test_snapshot_fetch_production[BR-N-BR.json].ambr
│ │ │ │ ├── test_snapshot_fetch_production[BR-N-BR_negative_solar.json].ambr
│ │ │ │ ├── test_snapshot_fetch_production[BR-N-data.json].ambr
│ │ │ │ ├── test_snapshot_fetch_production[BR-NE-BR.json].ambr
│ │ │ │ ├── test_snapshot_fetch_production[BR-NE-BR_negative_solar.json].ambr
│ │ │ │ ├── test_snapshot_fetch_production[BR-NE-data.json].ambr
│ │ │ │ ├── test_snapshot_fetch_production[BR-S-BR.json].ambr
│ │ │ │ ├── test_snapshot_fetch_production[BR-S-BR_negative_solar.json].ambr
│ │ │ │ └── test_snapshot_fetch_production[BR-S-data.json].ambr
│ │ │ ├── test_OPENNEM/
│ │ │ │ ├── test_price[AU-SA].ambr
│ │ │ │ ├── test_production[AU-NSW].ambr
│ │ │ │ ├── test_production[AU-QLD].ambr
│ │ │ │ ├── test_production[AU-SA].ambr
│ │ │ │ ├── test_production[AU-TAS].ambr
│ │ │ │ ├── test_production[AU-VIC].ambr
│ │ │ │ └── test_production[AU-WA].ambr
│ │ │ ├── test_OPENNEM.ambr
│ │ │ ├── test_PA.ambr
│ │ │ ├── test_PE.ambr
│ │ │ ├── test_PF.ambr
│ │ │ ├── test_RU/
│ │ │ │ ├── test_snapshot_fetch_exchange[AZ-RU-1-10].ambr
│ │ │ │ ├── test_snapshot_fetch_exchange[BY-RU-1-10].ambr
│ │ │ │ ├── test_snapshot_fetch_exchange[CN-RU-AS-10].ambr
│ │ │ │ ├── test_snapshot_fetch_exchange[CN-RU-AS-11].ambr
│ │ │ │ ├── test_snapshot_fetch_exchange[GE-RU-1-10].ambr
│ │ │ │ ├── test_snapshot_fetch_exchange[KZ-RU-1-10].ambr
│ │ │ │ ├── test_snapshot_fetch_exchange[KZ-RU-1-11].ambr
│ │ │ │ ├── test_snapshot_fetch_exchange[KZ-RU-2-10].ambr
│ │ │ │ ├── test_snapshot_fetch_exchange[MN-RU-2-10].ambr
│ │ │ │ ├── test_snapshot_fetch_exchange[RU-1-FI-10].ambr
│ │ │ │ ├── test_snapshot_fetch_exchange[RU-1-RU-2-10].ambr
│ │ │ │ ├── test_snapshot_fetch_exchange[RU-1-UA-CR-10].ambr
│ │ │ │ ├── test_snapshot_fetch_exchange[RU-KGD-LT-10].ambr
│ │ │ │ ├── test_snapshot_fetch_exchange[UA-RU-1-10].ambr
│ │ │ │ ├── test_snapshot_fetch_production[RU-1].ambr
│ │ │ │ ├── test_snapshot_fetch_production[RU-2].ambr
│ │ │ │ └── test_snapshot_fetch_production[RU-AS].ambr
│ │ │ ├── test_RU.ambr
│ │ │ ├── test_SMARTGRIDDASHBOARD.ambr
│ │ │ ├── test_TAIPOWER.ambr
│ │ │ ├── test_TR/
│ │ │ │ ├── test_fetch_production[None].ambr
│ │ │ │ └── test_fetch_production[target_datetime1].ambr
│ │ │ ├── test_US_CA.ambr
│ │ │ ├── test_US_ERCOT.ambr
│ │ │ ├── test_US_MISO.ambr
│ │ │ ├── test_US_NEISO/
│ │ │ │ ├── test_fetch_exchange[CA-NB-US-NE-ISNE].ambr
│ │ │ │ ├── test_fetch_exchange[CA-QC-US-NE-ISNE].ambr
│ │ │ │ └── test_fetch_exchange[US-NE-ISNE-US-NY-NYIS].ambr
│ │ │ ├── test_US_NEISO.ambr
│ │ │ ├── test_US_NY.ambr
│ │ │ ├── test_US_PJM.ambr
│ │ │ ├── test_US_SPP.ambr
│ │ │ ├── test_UY/
│ │ │ │ ├── test_fetch_exchange[AR].ambr
│ │ │ │ └── test_fetch_exchange[BR-S].ambr
│ │ │ ├── test_UY.ambr
│ │ │ ├── test_amper_landsnet.ambr
│ │ │ └── test_config/
│ │ │ ├── test_snapshot_emission_factor[FR].ambr
│ │ │ └── test_snapshot_emission_factor[KR].ambr
│ │ ├── conftest.py
│ │ ├── lib/
│ │ │ ├── __init__.py
│ │ │ ├── test_IN.py
│ │ │ ├── test_exceptions.py
│ │ │ ├── test_web.py
│ │ │ └── test_zonekey.py
│ │ ├── mocks/
│ │ │ ├── AU/
│ │ │ │ ├── AU_TAS_FI_payload1.json
│ │ │ │ ├── AU_TAS_KI_payload1.json
│ │ │ │ ├── AU_WA_RI_payload1.json
│ │ │ │ └── NTESMO.xlsx
│ │ │ ├── AW/
│ │ │ │ └── production.json
│ │ │ ├── BE/
│ │ │ │ ├── entsoe_production.xml
│ │ │ │ └── production.json
│ │ │ ├── BG/
│ │ │ │ └── production_live.json
│ │ │ ├── CA_AB/
│ │ │ │ ├── solar_rpt_longterm.csv
│ │ │ │ └── wind_rpt_longterm.csv
│ │ │ ├── CA_ON/
│ │ │ │ ├── adequacy_report_20250228.xml
│ │ │ │ └── var_gen_forecast_summary_report_20250228.xml
│ │ │ ├── CEB/
│ │ │ │ └── response.text
│ │ │ ├── CENACE/
│ │ │ │ └── DemandaRegional.html
│ │ │ ├── CL/
│ │ │ │ └── response_historical_20240224.json
│ │ │ ├── CNDC/
│ │ │ │ ├── data.json
│ │ │ │ └── index.html
│ │ │ ├── CO/
│ │ │ │ ├── cons_dt.json
│ │ │ │ ├── cons_live.json
│ │ │ │ ├── price_dt.json
│ │ │ │ ├── price_live.json
│ │ │ │ ├── prod1_dt.json
│ │ │ │ ├── prod1_live.json
│ │ │ │ ├── prod2_dt.json
│ │ │ │ └── prod2_live.json
│ │ │ ├── CR/
│ │ │ │ ├── exchange_live.json
│ │ │ │ ├── production_20210716.json
│ │ │ │ └── production_live.json
│ │ │ ├── CY/
│ │ │ │ ├── response_historical_20240318.html
│ │ │ │ └── response_realtime_20240401.html
│ │ │ ├── CZ/
│ │ │ │ └── CrossborderPowerFlows.xml
│ │ │ ├── Cammesa/
│ │ │ │ ├── conventional_production.json
│ │ │ │ ├── exchanges.json
│ │ │ │ └── renewable_production.json
│ │ │ ├── DK/
│ │ │ │ ├── ElectricityProdex5MinRealtime.json
│ │ │ │ └── Forecasts_5Min.json
│ │ │ ├── DO/
│ │ │ │ └── production.html
│ │ │ ├── EIA/
│ │ │ │ ├── US-FLA-FPC_US-FLA-FPL_exchange.json
│ │ │ │ ├── US-FLA-FPC_US-FLA-NSB_exchange.json
│ │ │ │ ├── US-NW-BPAT-US-NW-NWMT-exchange.json
│ │ │ │ ├── US-NW-PGE-with-nulls.json
│ │ │ │ ├── US_CAL_IID-battery_storage.json
│ │ │ │ ├── US_CAR_SC-nuclear.json
│ │ │ │ ├── US_CAR_SCEG-nuclear.json
│ │ │ │ ├── US_NW_AVRN-gas.json
│ │ │ │ ├── US_NW_AVRN-other.json
│ │ │ │ ├── US_NW_AVRN-wind.json
│ │ │ │ ├── US_NW_BPAT-consumption.json
│ │ │ │ ├── US_NW_BPAT-wind.json
│ │ │ │ ├── US_NW_PACW-gas.json
│ │ │ │ ├── US_SMTH-coal.json
│ │ │ │ ├── US_SW_DEAA-hydro.json
│ │ │ │ ├── US_SW_HGMA-hydro.json
│ │ │ │ └── US_SW_SRP-hydro.json
│ │ │ ├── ENERCAL/
│ │ │ │ └── production.json
│ │ │ ├── ENTE/
│ │ │ │ └── response_generic_20240403.json
│ │ │ ├── ENTSOE/
│ │ │ │ ├── BE_NL_exchange_forecast_exports.xml
│ │ │ │ ├── BE_NL_exchange_forecast_imports.xml
│ │ │ │ ├── DK-DK1_DK-DK2_capacity_week_ahead_export.xml
│ │ │ │ ├── DK-DK1_DK-DK2_capacity_week_ahead_import.xml
│ │ │ │ ├── DK-DK1_GB_exchange_exports.xml
│ │ │ │ ├── DK-DK1_GB_exchange_imports.xml
│ │ │ │ ├── DK-DK1_consumption.xml
│ │ │ │ ├── DK-DK2_SE-SE4_exchange_forecast_exports.xml
│ │ │ │ ├── DK-DK2_SE-SE4_exchange_forecast_imports.xml
│ │ │ │ ├── DK-DK2_consumption_forecast.xml
│ │ │ │ ├── EE_FI_exchange_forecast_exports.xml
│ │ │ │ ├── EE_FI_exchange_forecast_imports.xml
│ │ │ │ ├── ES_FR_capacity_day_ahead_export.xml
│ │ │ │ ├── ES_FR_capacity_day_ahead_import.xml
│ │ │ │ ├── ES_FR_capacity_month_ahead_export.xml
│ │ │ │ ├── ES_FR_capacity_month_ahead_import.xml
│ │ │ │ ├── ES_day_ahead_price.xml
│ │ │ │ ├── ES_intraday_price.xml
│ │ │ │ ├── FI_production.xml
│ │ │ │ ├── FR-COR_IT-SAR_AC_exchange_exports.xml
│ │ │ │ ├── FR-COR_IT-SAR_AC_exchange_forecast_exports.xml
│ │ │ │ ├── FR-COR_IT-SAR_AC_exchange_forecast_imports.xml
│ │ │ │ ├── FR-COR_IT-SAR_AC_exchange_imports.xml
│ │ │ │ ├── FR-COR_IT-SAR_DC_exchange_exports.xml
│ │ │ │ ├── FR-COR_IT-SAR_DC_exchange_forecast_exports.xml
│ │ │ │ ├── FR-COR_IT-SAR_DC_exchange_forecast_imports.xml
│ │ │ │ ├── FR-COR_IT-SAR_DC_exchange_imports.xml
│ │ │ │ ├── FR_prices.xml
│ │ │ │ ├── LU_production.xml
│ │ │ │ ├── NO-NO5_production-negatives.xml
│ │ │ │ ├── NO-NO5_production.xml
│ │ │ │ ├── SE-SE3_generation_forecast.xml
│ │ │ │ ├── SE-SE4_production.xml
│ │ │ │ ├── fake_time_series.xml
│ │ │ │ ├── fake_time_series_all_0.xml
│ │ │ │ ├── wind_solar_forecast_FI_CURRENT.xml
│ │ │ │ ├── wind_solar_forecast_FI_DAY_AHEAD.xml
│ │ │ │ └── wind_solar_forecast_FI_INTRADAY.xml
│ │ │ ├── ERCOT.json
│ │ │ ├── ERCOT_demand.json
│ │ │ ├── ERCOT_generation.json
│ │ │ ├── ERCOT_storage.json
│ │ │ ├── ERP_PGCB/
│ │ │ │ ├── historical.html
│ │ │ │ └── latest.html
│ │ │ ├── ES/
│ │ │ │ ├── demandaGeneracionBaleares.json
│ │ │ │ ├── demandaGeneracionCanarias.json
│ │ │ │ └── demandaGeneracionPeninsula.json
│ │ │ ├── ESIOS_ES_MA.json
│ │ │ ├── ESKOM/
│ │ │ │ └── Station_Build_Up.csv
│ │ │ ├── ESTADISTICO_UT/
│ │ │ │ ├── get_historical.html
│ │ │ │ ├── get_live.html
│ │ │ │ ├── post_historical.html
│ │ │ │ └── post_live.html
│ │ │ ├── FO/
│ │ │ │ ├── sev_api_historical_2023_02_16.json
│ │ │ │ ├── sev_api_historical_2023_07_16.json
│ │ │ │ ├── sev_api_live_0.json
│ │ │ │ └── sev_api_live_1.json
│ │ │ ├── FR/
│ │ │ │ └── response.json
│ │ │ ├── FR_O/
│ │ │ │ ├── FR_COR.json
│ │ │ │ ├── FR_GP.json
│ │ │ │ └── FR_RE.json
│ │ │ ├── GB/
│ │ │ │ ├── bmu_fuel_type.xlsx
│ │ │ │ ├── bmunits.json
│ │ │ │ ├── bmvalues.json
│ │ │ │ ├── boalf.json
│ │ │ │ ├── eco2mix_api_historical_20220716.xml
│ │ │ │ ├── eco2mix_api_live.xml
│ │ │ │ └── production.json
│ │ │ ├── GT/
│ │ │ │ ├── wl12_api_historical_20230716_0.json
│ │ │ │ ├── wl12_api_historical_20230716_1.json
│ │ │ │ ├── wl12_api_live_0.json
│ │ │ │ └── wl12_api_live_1.json
│ │ │ ├── HN/
│ │ │ │ ├── exchange_index_7.csv
│ │ │ │ ├── production_index_10_hydro.csv
│ │ │ │ ├── production_index_1_hydro.csv
│ │ │ │ ├── production_index_2_wind.csv
│ │ │ │ ├── production_index_3_solar.csv
│ │ │ │ ├── production_index_4_geothermal.csv
│ │ │ │ ├── production_index_5_biomass.csv
│ │ │ │ ├── production_index_6_coal.csv
│ │ │ │ ├── production_index_8_oil.csv
│ │ │ │ └── production_index_9_oil.csv
│ │ │ ├── Hydroquebec/
│ │ │ │ ├── consumption.json
│ │ │ │ └── production.json
│ │ │ ├── IEMOP/
│ │ │ │ ├── list_reports_items.json
│ │ │ │ └── reports_content
│ │ │ ├── IN/
│ │ │ │ └── 08.04.25_NLDC_PSP.xls
│ │ │ ├── IN_AP.html
│ │ │ ├── IN_EA/
│ │ │ │ ├── interregional_exchanges.json
│ │ │ │ └── transnational_exchanges.json
│ │ │ ├── IN_HP.html
│ │ │ ├── IN_KA_Default.html
│ │ │ ├── IN_KA_StateGen.html
│ │ │ ├── IN_KA_StateNCEP.html
│ │ │ ├── JAO/
│ │ │ │ ├── core_external_atc.json
│ │ │ │ ├── core_max_bex.json
│ │ │ │ ├── core_scheduled_exchanges.json
│ │ │ │ ├── nordic_max_bex.json
│ │ │ │ ├── nordic_max_bflow.json
│ │ │ │ └── shadow_auction_atc.json
│ │ │ ├── JP-CB/
│ │ │ │ └── keito_yosoku_cepco003.csv
│ │ │ ├── JP-HKD/
│ │ │ │ └── 20250415_hokkaido_yosoku.csv
│ │ │ ├── JP-HR/
│ │ │ │ └── yosoku_05_20250415.csv
│ │ │ ├── JP-KN/
│ │ │ │ └── 20250416_yosoku.csv
│ │ │ ├── JP-KY/
│ │ │ │ └── 21110_TSO9_0_20250407.csv
│ │ │ ├── JP-ON/
│ │ │ │ └── jukyu_yosoku_20250415.csv
│ │ │ ├── JP-SK/
│ │ │ │ ├── jp-sk-nuclear-html-page.html
│ │ │ │ ├── yosoku_today.csv
│ │ │ │ └── yosoku_tomorrow.csv
│ │ │ ├── JP-TH/
│ │ │ │ ├── area_tso_yosoku_20250416.csv
│ │ │ │ └── area_tso_yosoku_y.csv
│ │ │ ├── JP-TK/
│ │ │ │ ├── AREA_ONCE_YOSOKU.csv
│ │ │ │ └── AREA_YOSOKU.csv
│ │ │ ├── JP_KY/
│ │ │ │ ├── genkai.html
│ │ │ │ ├── sendai.html
│ │ │ │ ├── solar_and_consumption.csv
│ │ │ │ └── solar_and_consumption_day.csv
│ │ │ ├── KPX/
│ │ │ │ ├── historical.html
│ │ │ │ └── realtime.html
│ │ │ ├── MD/
│ │ │ │ ├── moldoelectrica_api_historical_20210725.json
│ │ │ │ └── moldoelectrica_api_live.json
│ │ │ ├── MISO.html
│ │ │ ├── NORDPOOL/
│ │ │ │ ├── fi_se1_current_day_exchange.json
│ │ │ │ ├── fi_se1_previous_day_exchange.json
│ │ │ │ ├── se_current_day_price.json
│ │ │ │ ├── se_next_day_price.json
│ │ │ │ └── token.json
│ │ │ ├── NTESMO/
│ │ │ │ ├── as-7-days-forecast.json
│ │ │ │ ├── dk-7-days-forecast.json
│ │ │ │ └── tc-7-days-forecast.json
│ │ │ ├── NZ/
│ │ │ │ ├── response_2024_04_24_17_30.html
│ │ │ │ ├── response_2024_04_24_18_00.html
│ │ │ │ ├── response_2024_04_24_18_00.json
│ │ │ │ └── response_2024_04_24_18_30.json
│ │ │ ├── ONS/
│ │ │ │ ├── BR.json
│ │ │ │ ├── BR_negative_solar.json
│ │ │ │ └── data.json
│ │ │ ├── OPENNEM/
│ │ │ │ ├── OPENNEM_AU-NSW.json
│ │ │ │ ├── OPENNEM_AU-NSW.v4.json
│ │ │ │ ├── OPENNEM_AU-QLD.json
│ │ │ │ ├── OPENNEM_AU-QLD.v4.json
│ │ │ │ ├── OPENNEM_AU-SA.json
│ │ │ │ ├── OPENNEM_AU-SA.v4.json
│ │ │ │ ├── OPENNEM_AU-TAS.json
│ │ │ │ ├── OPENNEM_AU-TAS.v4.json
│ │ │ │ ├── OPENNEM_AU-VIC.json
│ │ │ │ ├── OPENNEM_AU-VIC.v4.json
│ │ │ │ ├── OPENNEM_AU-WA.json
│ │ │ │ ├── OPENNEM_AU-WA.v4.json
│ │ │ │ └── OPENNEM_price_AU-SA.json
│ │ │ ├── PA_nominal_generation.html
│ │ │ ├── PE/
│ │ │ │ ├── response_20250909.json
│ │ │ │ └── response_20250910.json
│ │ │ ├── PF/
│ │ │ │ └── production_live.html
│ │ │ ├── RU/
│ │ │ │ ├── exchange_2025-07-28_10.json
│ │ │ │ ├── exchange_2025-07-28_11.json
│ │ │ │ ├── production_RU-1_2025_07_28.json
│ │ │ │ ├── production_RU-2_2025_07_28.json
│ │ │ │ └── production_RU-AS_2025_07_28.json
│ │ │ ├── SMARTGRIDDASHBOARD/
│ │ │ │ ├── consumption.json
│ │ │ │ ├── consumptionForecast.json
│ │ │ │ ├── exchange.json
│ │ │ │ ├── generation.json
│ │ │ │ ├── solarForecast.json
│ │ │ │ ├── solarProduction.json
│ │ │ │ ├── windForecast.json
│ │ │ │ └── windProduction.json
│ │ │ ├── TAIPOWER/
│ │ │ │ └── genary.json
│ │ │ ├── TR/
│ │ │ │ └── raw_production_response.json
│ │ │ ├── US_ERCOT/
│ │ │ │ ├── load_forecast_by_forecast_zone.json
│ │ │ │ ├── solar_power_production_hourly_averaged_actual_and_forecasted_values_rtid.json
│ │ │ │ └── wind_power_production_hourly_averaged_actual_and_forecasted_values_rtid.json
│ │ │ ├── US_HI.htm
│ │ │ ├── US_HI_hist.htm
│ │ │ ├── US_MISO/
│ │ │ │ ├── 20250310_df_al.xls
│ │ │ │ ├── DataBrokerServicesgetSolarForecast.asmx.json
│ │ │ │ └── DataBrokerServicesgetWindForecast.asmx.json
│ │ │ ├── US_NEISO/
│ │ │ │ ├── day_ahead_load_forecast_20250317.xml
│ │ │ │ ├── exchange_CA-NB_US-NE-ISNE.json
│ │ │ │ ├── exchange_CA-QC_US-NE-ISNE.json
│ │ │ │ ├── exchange_US-NE-ISNE_US-NY-NYIS.json
│ │ │ │ ├── seven_day_solar_power_forecast_20250225.csv
│ │ │ │ └── seven_day_wind_power_forecast_20250225.csv
│ │ │ ├── US_NY/
│ │ │ │ └── 20250219isolf.csv
│ │ │ ├── US_PJM/
│ │ │ │ ├── gen_by_fuel.json
│ │ │ │ ├── pjm_solar_forecast_2025-02-24.json
│ │ │ │ ├── pjm_wind_forecast_2025-02-24.json
│ │ │ │ └── settings.json
│ │ │ ├── US_SPP/
│ │ │ │ ├── DA-LMP-SL-202503190100.csv
│ │ │ │ ├── RTBM-LMP-SL-202503310840.csv
│ │ │ │ ├── RTBM-LMP-SL-202503310845.csv
│ │ │ │ ├── RTBM-LMP-SL-202503310850.csv
│ │ │ │ ├── RTBM-LMP-SL-202503310855.csv
│ │ │ │ ├── RTBM-LMP-SL-202503310900.csv
│ │ │ │ ├── RTBM-LMP-SL-202503310905.csv
│ │ │ │ └── RTBM-LMP-SL-202503310910.csv
│ │ │ ├── US_SPP_Gen_Mix.pkl
│ │ │ ├── UY/
│ │ │ │ ├── data.ods
│ │ │ │ └── html.html
│ │ │ ├── __init__.py
│ │ │ ├── amper_landsnet/
│ │ │ │ └── production.json
│ │ │ └── quality_check.py
│ │ ├── test_AEMO.py
│ │ ├── test_AU_TAS_FI.py
│ │ ├── test_AU_TAS_KI.py
│ │ ├── test_AU_WA_RI.py
│ │ ├── test_AW.py
│ │ ├── test_BE.py
│ │ ├── test_BG.py
│ │ ├── test_CAMMESA.py
│ │ ├── test_CA_AB.py
│ │ ├── test_CA_CQ.py
│ │ ├── test_CA_ON.py
│ │ ├── test_CEB.py
│ │ ├── test_CENACE.py
│ │ ├── test_CH.py
│ │ ├── test_CL.py
│ │ ├── test_CNDC.py
│ │ ├── test_CO.py
│ │ ├── test_CR.py
│ │ ├── test_CY.py
│ │ ├── test_CZ.py
│ │ ├── test_DK.py
│ │ ├── test_DO.py
│ │ ├── test_EIA.py
│ │ ├── test_ENERCAL.py
│ │ ├── test_ENTE.py
│ │ ├── test_ENTSOE.py
│ │ ├── test_ERCOT.py
│ │ ├── test_ERP_PGCB.py
│ │ ├── test_ES.py
│ │ ├── test_ESIOS.py
│ │ ├── test_ESKOM.py
│ │ ├── test_ESTADISTICO_UT.py
│ │ ├── test_FO.py
│ │ ├── test_FR.py
│ │ ├── test_FR_O.py
│ │ ├── test_GB.py
│ │ ├── test_GT.py
│ │ ├── test_HN.py
│ │ ├── test_IEMOP.py
│ │ ├── test_IN.py
│ │ ├── test_IN_AP.py
│ │ ├── test_IN_EA.py
│ │ ├── test_IN_HP.py
│ │ ├── test_IN_KA.py
│ │ ├── test_JAO.py
│ │ ├── test_JP.py
│ │ ├── test_JP_KY.py
│ │ ├── test_JP_SK.py
│ │ ├── test_KPX.py
│ │ ├── test_MD.py
│ │ ├── test_NORDPOOL.py
│ │ ├── test_NTESMO.py
│ │ ├── test_NZ.py
│ │ ├── test_ONS.py
│ │ ├── test_OPENNEM.py
│ │ ├── test_PA.py
│ │ ├── test_PE.py
│ │ ├── test_PF.py
│ │ ├── test_RU.py
│ │ ├── test_SG.py
│ │ ├── test_SMARTGRIDDASHBOARD.py
│ │ ├── test_TAIPOWER.py
│ │ ├── test_TR.py
│ │ ├── test_US_CA.py
│ │ ├── test_US_ERCOT.py
│ │ ├── test_US_MISO.py
│ │ ├── test_US_NEISO.py
│ │ ├── test_US_NY.py
│ │ ├── test_US_PJM.py
│ │ ├── test_US_SPP.py
│ │ ├── test_UY.py
│ │ ├── test_amper_landsnet.py
│ │ ├── test_config.py
│ │ ├── test_quality.py
│ │ └── test_utils.py
│ └── py.typed
├── geo/
│ ├── .gitignore
│ ├── README.md
│ ├── generate-zone-geo.ts
│ ├── package.json
│ ├── tsconfig.json
│ └── world.geojson
├── libs/
│ └── types/
│ ├── pyproject.toml
│ └── src/
│ └── electricitymap/
│ └── contrib/
│ └── types/
│ └── __init__.py
├── parsers.dockerfile
├── pyproject.toml
├── scripts/
│ ├── ENTSOE_capacity_update.py
│ ├── __init__.py
│ ├── create_aggregated_zone_config.py
│ ├── remove_zone.py
│ ├── tooling.py
│ ├── update_capacity_configuration.py
│ ├── update_capacity_ember_all_years.py
│ ├── utils.py
│ ├── validate_config_filenames.py
│ └── zone_names.py
├── test_parser.py
└── tests/
├── __init__.py
├── config/
│ ├── __init__.py
│ ├── __snapshots__/
│ │ ├── test_config.ambr
│ │ └── test_emission_factors.ambr
│ ├── test_config.py
│ ├── test_config_model.py
│ ├── test_config_zones.py
│ ├── test_data_center_model.py
│ └── test_emission_factors.py
├── test_capacity.py
├── test_co2eq_parameters.py
├── test_exchanges_json.py
├── test_parser_interface.py
├── test_update_capacity_configuration.py
└── test_zones_json.py
================================================
FILE CONTENTS
================================================
================================================
FILE: .devcontainer/devcontainer.json
================================================
{
"name": "Electricity Maps Dev",
"image": "mcr.microsoft.com/devcontainers/python:1-3.10-bookworm",
"features": {
"ghcr.io/devcontainer-community/devcontainer-features/astral.sh-uv:1": {}
},
"postCreateCommand": "uv sync --group dev --group scripts --extra parsers",
"customizations": {
"vscode": {
"extensions": [
"ms-python.vscode-pylance",
"ms-python.python",
"esbenp.prettier-vscode",
"redhat.vscode-yaml",
"charliermarsh.ruff"
]
}
}
}
================================================
FILE: .dockerignore
================================================
.git
*.tar.gz
*.json
*secrets*
*.env
*.mp4
*.mkv
datascience
screenshots*
================================================
FILE: .editorconfig
================================================
root = true
[*]
indent_style = space
end_of_line = lf
insert_final_newline = true
charset = utf-8
indent_size = 2
[*.py]
indent_size = 4
================================================
FILE: .gitattributes
================================================
# Auto-detect text vs. binary files and ensure newlines are always LF for
# text files on check-out and check-in.
* text=auto eol=lf
# Denote all files in the `parsers/test/mocks` directory as vendored.
# This makes GitHub ignore them for language statistics.
electricitymap/contrib/parsers/tests/mocks/** linguist-vendored
================================================
FILE: .github/CODEOWNERS
================================================
# Codeowners file
electricitymap/** @electricitymaps/grid-modelling-methodology
config/** @electricitymaps/grid-modelling-methodology
tests/** @electricitymaps/grid-modelling-methodology
================================================
FILE: .github/ISSUE_TEMPLATE/blank-issue.md
================================================
---
name: Blank issue
about: Anything else
title: ''
labels: ''
assignees: ''
---
## Description
================================================
FILE: .github/ISSUE_TEMPLATE/config.yml
================================================
blank_issues_enabled: true
================================================
FILE: .github/ISSUE_TEMPLATE/data-issue.yml
================================================
name: Data Issue
description: Use this form if you believe there is a issue with the data on the app.
title: "[Data Issue]: "
labels: ["data", "needs triage"]
body:
- type: markdown
attributes:
value: |
Thanks for taking the time to file this issue.
- type: textarea
id: when-did-this-happen
attributes:
label: When did this happen?
description: Please provide the date and time when the problem happened.
placeholder: e.g. "2018-01-01 12:00"
validations:
required: true
- type: textarea
id: what-zones-are-affected
attributes:
label: What zones are affected?
description: Please provide the zones affected.
placeholder: e.g. "Dk-DK1, DK-DK2, SE-SE4"
validations:
required: true
- type: textarea
id: what-is-the-problem
attributes:
label: What is the problem?
description: |
What appears to be the problem with the data?
Please provide as much detail as possible.
You can also add screenshots here if you have them.
placeholder: e.g. "The data for biomass is not being displayed even though it's available at the source."
validations:
required: true
================================================
FILE: .github/ISSUE_TEMPLATE/feature_request.md
================================================
---
name: Feature request
about: Suggest an idea for this project
title: ''
labels: ''
assignees: ''
---
**Is your feature request related to a problem? Please describe.**
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
**Describe the solution you'd like**
A clear and concise description of what you want to happen.
**Describe alternatives you've considered**
A clear and concise description of any alternative solutions or features you've considered.
**Additional context**
Add any other context or screenshots about the feature request here.
================================================
FILE: .github/ISSUE_TEMPLATE/frontend-bug-report.md
================================================
---
name: Frontend bug report
about: Create a report to help us improve
title: ''
labels: "bug \U0001F41E, frontend \U0001F3A8"
assignees: ''
---
**Describe the bug**
A clear and concise description of what the bug is.
**To Reproduce**
Steps to reproduce the behavior:
1. Go to '...'
2. Click on '....'
3. Scroll down to '....'
4. See error
**Expected behavior**
A clear and concise description of what you expected to happen.
**Screenshots**
If applicable, add screenshots to help explain your problem.
**Desktop (if relevant):**
- OS: [e.g. iOS]
- Browser [e.g. chrome, safari]
- Version [e.g. 22]
**Smartphone (if relevant):**
- Device: [e.g. iPhone6]
- OS: [e.g. iOS8.1]
- Browser [e.g. stock browser, safari]
- Version [e.g. 22]
**Additional context**
Add any other context about the problem here.
================================================
FILE: .github/codeql-config.yml
================================================
name: 'CodeQL config'
paths-ignore:
- 'config/**/*.yaml'
================================================
FILE: .github/dependabot.yml
================================================
# Dependabot config file
version: 2
updates:
# Maintain the workflow dependencies.
- package-ecosystem: 'github-actions'
directory: '/'
schedule:
interval: 'weekly'
reviewers:
- 'VIKTORVAV99'
ignore:
- dependency-name: '*'
update-types: ['version-update:semver-patch']
# Ensure ruff and tzdata is updated.
- package-ecosystem: 'pip'
directory: '/'
schedule:
interval: 'monthly'
allow:
- dependency-name: 'ruff'
- dependency-name: 'tzdata'
reviewers:
- 'VIKTORVAV99'
# Maintain the devcontainer dependencies.
- package-ecosystem: 'devcontainers'
directory: '/'
schedule:
interval: 'monthly'
reviewers:
- 'VIKTORVAV99'
================================================
FILE: .github/filter-groups.yml
================================================
workflows:
- '.github/workflows/**/*.yml'
config:
- 'config/**/*.yaml'
markdown:
- '**.md'
json:
- '**.json'
python:
- '**.py'
- 'pyproject.toml'
- 'uv.lock'
- '.python-version'
================================================
FILE: .github/labeler.yml
================================================
infrastructure:
- changed-files:
- any-glob-to-any-file:
['.github/**/*', 'docker-compose.yml', 'parsers.dockerfile', '.dockerignore']
dependencies:
- changed-files:
- any-glob-to-any-file: ['uv.lock', 'pyproject.toml']
tests:
- changed-files:
- any-glob-to-any-file: ['tests/**/*', 'parsers/test/**/*']
javascript:
- changed-files:
- any-glob-to-any-file: '**/*.js'
python:
- changed-files:
- any-glob-to-any-file: '**/*.py'
parser:
- all:
- changed-files:
- any-glob-to-any-file: 'parsers/**/*'
- all-globs-to-all-files: '!parsers/archive/**/*'
archived parser:
- changed-files:
- any-glob-to-any-file: 'parsers/archive/**/*'
capacity parser:
- changed-files:
- any-glob-to-any-file: 'electricitymap/contrib/capacity_parsers/**/*'
exchange config:
- changed-files:
- any-glob-to-any-file: 'config/exchanges/**/*.yaml'
zone config:
- changed-files:
- any-glob-to-any-file: 'config/zones/**/*.yaml'
================================================
FILE: .github/pull_request_template.md
================================================
## Issue
<!-- If you want to close an issue automatically when your PR is merged, write "Closes X" where X is the issue number. For example: Closes #000 -->
## Description
<!-- Explains the goal of this PR -->
### Preview
<!-- Please add screenshots and/or gif that shows visual changes (if applicable) -->
### Double check
- [ ] I have tested my parser changes locally with `uv run test_parser "zone_key"`
- [ ] I have run `pnpx prettier@2 --write .` and `uv run format` in the top level directory to format my changes.
================================================
FILE: .github/workflows/CI.yml
================================================
name: CI
on:
push:
branches:
- master
pull_request:
schedule:
- cron: '0 7 * * 1'
jobs:
# #
# Repository wide checks #
# #
prettier:
name: Prettier
runs-on: ubuntu-24.04-arm
timeout-minutes: 5
steps:
- name: Checkout
uses: actions/checkout@v6
- name: Setup Node
uses: actions/setup-node@v6
- name: Prettier Check
run: |
npx -y prettier@2 --check .
earthly:
name: earthly
needs: [prettier]
uses: ./.github/workflows/earthly-contrib.yml
secrets: inherit
validate_local_links:
name: Validate
uses:
./.github/workflows/validate_local_links_in_md.yml
# Python checks
python_formatting:
name: Python / Formatting
runs-on: ubuntu-24.04-arm
timeout-minutes: 5
steps:
- name: Checkout
uses: actions/checkout@v6
- name: Install uv
uses: astral-sh/setup-uv@v7
with:
enable-cache: true
cache-suffix: 'formatting'
python-version: '3.10'
- name: Install Dependencies
run: |
uv sync --extra parsers
- name: Check formatting
run: |
uv run ruff format . --check
- name: Check linting
run: |
uv run ruff check . --output-format=github
python_tests:
name: Python / Tests
runs-on: ubuntu-24.04-arm
timeout-minutes: 10
strategy:
matrix:
python-version: ['3.10', '3.11', '3.12']
steps:
- name: Checkout
uses: actions/checkout@v6
- name: Install uv
uses: astral-sh/setup-uv@v7
with:
enable-cache: true
cache-suffix: 'tests'
python-version: ${{ matrix.python-version }}
- name: Install libxml2-dev and tesseract-ocr
run: |
sudo apt-get update
sudo apt-get install libxml2-dev tesseract-ocr tesseract-ocr-eng
- name: Install Dependencies
run: |
uv sync --group dev --extra parsers
- name: Run tests
run: |
uv run test
# Config checks
validate_config_filenames:
name: Validate / Config filenames
runs-on: ubuntu-24.04-arm
timeout-minutes: 5
steps:
- name: Checkout
uses: actions/checkout@v6
- name: Validate config filenames
run: python scripts/validate_config_filenames.py
# Code quality checks
codeql:
needs: [prettier]
name: CodeQL
uses: ./.github/workflows/codeql.yml
================================================
FILE: .github/workflows/README.md
================================================
# CI
All CI workflows should be executed in the `CI.yml` workflow using reusable workflows and the workflow_call trigger.
To add another workflow to the CI workflow create a new job that looks like this:
```yml
job_example:
name: Example job
uses: ./.github/workflows/example.yml
```
================================================
FILE: .github/workflows/codeql.yml
================================================
name: 'CodeQL'
on:
workflow_call:
jobs:
analyze:
name: Analyze
runs-on: ubuntu-24.04
permissions:
actions: read
contents: read
security-events: write
strategy:
fail-fast: false
matrix:
language: ['javascript', 'python', 'actions']
# CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby' ]
# Learn more about CodeQL language support at https://aka.ms/codeql-docs/language-support
steps:
- name: Checkout repository
uses: actions/checkout@v6
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
uses: github/codeql-action/init@v4
with:
languages: ${{ matrix.language }}
config-file: ./.github/codeql-config.yml
# If you wish to specify custom queries, you can do so here or in a config file.
# By default, queries listed here will override any specified in a config file.
# Prefix the list here with "+" to use these queries and those in the config file.
# Details on CodeQL's query packs refer to : https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs
# queries: security-extended,security-and-quality
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v4
with:
category: '/language:${{matrix.language}}'
================================================
FILE: .github/workflows/create-release.yml
================================================
name: Create release
on:
workflow_dispatch:
inputs:
package:
description: 'Package to release'
required: true
default: electricitymap-contrib
type: choice
options:
- electricitymap-contrib
- electricitymap-contrib-types
type:
description: 'Release type'
required: true
default: patch
type: choice
options:
- patch
- minor
- major
- dev
jobs:
create-release:
runs-on: ubuntu-latest
timeout-minutes: 10
# Add "id-token" with the intended permissions.
permissions:
contents: 'read'
id-token: 'write'
steps:
- name: Checkout
uses: actions/checkout@v6
with:
token: ${{ secrets.BOT_GITHUB_TOKEN }}
- name: Configure git
run: |
git config --global user.email "engineering+github@electricitymaps.com"
git config --global user.name "electricitymapsbot"
- uses: 'google-github-actions/auth@v3'
with:
project_id: 'tmrow-152415'
workload_identity_provider: 'projects/533362582499/locations/global/workloadIdentityPools/github/providers/electricitymaps-contrib'
service_account: contrib-registry-writer@tmrow-152415.iam.gserviceaccount.com
- name: 'Set up Cloud SDK'
uses: 'google-github-actions/setup-gcloud@v3'
with:
version: '>= 363.0.0'
- name: Install uv
uses: astral-sh/setup-uv@v7
with:
python-version: '3.10'
- name: Bump version
run: |
if [[ "${{ inputs.type }}" == "dev" ]]; then
# Bump patch first to ensure we are moving forward, then add dev suffix
# This handles 1.2.1 -> 1.2.2.dev0
uv version --bump patch --bump dev --package ${{ inputs.package }}
else
uv version --bump ${{ inputs.type }} --package ${{ inputs.package }}
fi
- name: Commit changes
run: |
git add .
git commit -m "Bump ${{ inputs.package }} version"
- name: Build package
run: |
uv build --package ${{ inputs.package }}
- name: Publish package
run: |
export ACCESS_TOKEN=$(gcloud auth print-access-token)
uv publish --publish-url https://europe-west1-python.pkg.dev/tmrow-152415/libs/ --username oauth2accesstoken --password "$ACCESS_TOKEN"
- name: Push changes
uses: ad-m/github-push-action@v1.1.0
with:
github_token: ${{ secrets.BOT_GITHUB_TOKEN }}
branch: ${{ github.ref_name }}
================================================
FILE: .github/workflows/earthly-contrib.yml
================================================
# Runs Earthly targets
name: Earthly Contrib
on:
workflow_call:
jobs:
run-tests:
runs-on: ubuntu-24.04-arm
env:
EARTHLY_TOKEN: ${{ secrets.EARTHLY_TOKEN }}
DOCKERHUB_USERNAME: ${{ secrets.DOCKERHUB_USERNAME }}
DOCKERHUB_TOKEN: ${{ secrets.DOCKERHUB_TOKEN }}
FORCE_COLOR: 1
steps:
- uses: earthly/actions-setup@v1
with:
version: v0.8.15
- uses: actions/checkout@v6
- name: Put back the git branch into git (Earthly uses it for tagging)
run: |
branch=""
if [ -n "$GITHUB_HEAD_REF" ]; then
branch="$GITHUB_HEAD_REF"
else
branch="${GITHUB_REF##*/}"
fi
git checkout -b "$branch" || true
- name: Docker Login
run: docker login --username "$DOCKERHUB_USERNAME" --password "$DOCKERHUB_TOKEN"
- name: Earthly version
run: earthly --version
- name: Run test
run: earthly --ci --secret ELECTRICITYMAP_PUBLIC_TOKEN="$ELECTRICITYMAP_PUBLIC_TOKEN" --secret SENTRY_AUTH_TOKEN="$SENTRY_AUTH_TOKEN" +test-all
env:
ELECTRICITYMAP_PUBLIC_TOKEN: 'test'
SENTRY_AUTH_TOKEN: ''
================================================
FILE: .github/workflows/label.yml
================================================
# This workflow will triage pull requests and apply a label based on the
# paths that are modified in the pull request.
#
# To use this workflow, you will need to set up a .github/labeler.yml
# file with configuration. For more information, see:
# https://github.com/actions/labeler/blob/master/README.md
name: Labeler
on: [pull_request_target]
jobs:
label:
runs-on: ubuntu-24.04-arm
steps:
- uses: actions/labeler@v6
with:
repo-token: '${{ secrets.GITHUB_TOKEN }}'
sync-labels: false
================================================
FILE: .github/workflows/validate_local_links_in_md.yml
================================================
# Controls when the action will run. Triggers the workflow when called from another workflow.
on:
workflow_call:
# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
# This workflow contains a single job
check_broken_internal_links_in_md:
name: Markdown links
# The type of runner that the job will run on
runs-on: ubuntu-24.04
# Steps represent a sequence of tasks that will be executed as part of the job
steps:
# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
- uses: actions/checkout@v6
# Runs a single command using the runners shell
# Install https://github.com/remarkjs/remark-validate-links
- name: Install remark-validate-links
timeout-minutes: 1
run: npm install remark-cli remark-validate-links
# Invoke remarks to validate INTERNAL links in md.
# --frail specifies to return a non-zero error code even on warning
# so the github action fails when a link is invalid
- name: Validate local links
timeout-minutes: 1
run: ./node_modules/.bin/remark --frail -u validate-links .
================================================
FILE: .gitignore
================================================
gha-creds-*.json
*.pyc
*.env
**/node_modules
.ipynb_checkpoints/
*.pyproj
*.sln
*.suo
*.user
/.vs/config
/App_Data/PublishProfiles
*.publishproj
.DS_Store
/.vs
/.venv
Thumbs.db
dist
parsers/.venv
# Ignore top level vscode folder as it is symlinked
#.vscode
.vscode/launch.json
## Pycharm IDE
.idea
================================================
FILE: .pre-commit-config.yaml
================================================
repos:
- repo: https://github.com/astral-sh/ruff-pre-commit
# Ruff version.
rev: v0.11.2
hooks:
# Run the linter.
- id: ruff
args: [--fix]
# Run the formatter.
- id: ruff-format
================================================
FILE: .prettierignore
================================================
# Files and paths to ignore
.prettierignore
pnpm-lock.yaml
.earthlyignore
.venv
**/parsers/tests/mocks
.pytest_cache/
.github/ISSUE_TEMPLATE/
LICENSE.md
LICENSE
node_modules
.DS_Store
.eslintcache
coverage
.nyc_output
cypress/videos
cypress/screenshots
================================================
FILE: .prettierrc.js
================================================
module.exports = {
semi: true,
singleQuote: true,
trailingComma: 'es5',
printWidth: 90,
overrides: [
{
files: '*.md',
options: {
printWidth: 90,
},
},
{
files: 'config/*.yaml',
options: {
printWidth: 120,
},
},
],
};
================================================
FILE: .python-version
================================================
3.10
================================================
FILE: .vscode/extensions.json
================================================
{
"recommendations": [
"charliermarsh.ruff",
"ms-python.python",
"ms-python.vscode-pylance",
"esbenp.prettier-vscode",
"redhat.vscode-yaml",
"dbaeumer.vscode-eslint",
"bradlc.vscode-tailwindcss"
]
}
================================================
FILE: .vscode/settings.json
================================================
{
"editor.defaultFormatter": "esbenp.prettier-vscode",
"[python]": {
"editor.defaultFormatter": "charliermarsh.ruff",
"editor.formatOnSave": true,
"editor.codeActionsOnSave": {
"source.organizeImports": "explicit"
}
},
"python.testing.pytestArgs": [".", "--ignore", "electricitymap/contrib/parsers"],
"python.testing.unittestEnabled": false,
"python.testing.pytestEnabled": true
}
================================================
FILE: CODE_OF_CONDUCT.md
================================================
# Contributor Covenant Code of Conduct
## Our Pledge
We as members, contributors, and leaders pledge to make participation in our
community a harassment-free experience for everyone, regardless of age, body
size, visible or invisible disability, ethnicity, sex characteristics, gender
identity and expression, level of experience, education, socio-economic status,
nationality, personal appearance, race, caste, color, religion, or sexual
identity and orientation.
We pledge to act and interact in ways that contribute to an open, welcoming,
diverse, inclusive, and healthy community.
## Our Standards
Examples of behavior that contributes to a positive environment for our
community include:
- Demonstrating empathy and kindness toward other people
- Being respectful of differing opinions, viewpoints, and experiences
- Giving and gracefully accepting constructive feedback
- Accepting responsibility and apologizing to those affected by our mistakes,
and learning from the experience
- Focusing on what is best not just for us as individuals, but for the overall
community
Examples of unacceptable behavior include:
- The use of sexualized language or imagery, and sexual attention or advances of
any kind
- Trolling, insulting or derogatory comments, and personal or political attacks
- Public or private harassment
- Publishing others' private information, such as a physical or email address,
without their explicit permission
- Other conduct which could reasonably be considered inappropriate in a
professional setting
## Enforcement Responsibilities
Community leaders are responsible for clarifying and enforcing our standards of
acceptable behavior and will take appropriate and fair corrective action in
response to any behavior that they deem inappropriate, threatening, offensive,
or harmful.
Community leaders have the right and responsibility to remove, edit, or reject
comments, commits, code, wiki edits, issues, and other contributions that are
not aligned to this Code of Conduct, and will communicate reasons for moderation
decisions when appropriate.
## Scope
This Code of Conduct applies within all community spaces, and also applies when
an individual is officially representing the community in public spaces.
Examples of representing our community include using an official e-mail address,
posting via an official social media account, or acting as an appointed
representative at an online or offline event.
## Enforcement
Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported to the community leaders responsible for enforcement at
codeofconduct@electricitymaps.com.
All complaints will be reviewed and investigated promptly and fairly.
All community leaders are obligated to respect the privacy and security of the
reporter of any incident.
## Enforcement Guidelines
Community leaders will follow these Community Impact Guidelines in determining
the consequences for any action they deem in violation of this Code of Conduct:
### 1. Correction
**Community Impact**: Use of inappropriate language or other behavior deemed
unprofessional or unwelcome in the community.
**Consequence**: A private, written warning from community leaders, providing
clarity around the nature of the violation and an explanation of why the
behavior was inappropriate. A public apology may be requested.
### 2. Warning
**Community Impact**: A violation through a single incident or series of
actions.
**Consequence**: A warning with consequences for continued behavior. No
interaction with the people involved, including unsolicited interaction with
those enforcing the Code of Conduct, for a specified period of time. This
includes avoiding interactions in community spaces as well as external channels
like social media. Violating these terms may lead to a temporary or permanent
ban.
### 3. Temporary Ban
**Community Impact**: A serious violation of community standards, including
sustained inappropriate behavior.
**Consequence**: A temporary ban from any sort of interaction or public
communication with the community for a specified period of time. No public or
private interaction with the people involved, including unsolicited interaction
with those enforcing the Code of Conduct, is allowed during this period.
Violating these terms may lead to a permanent ban.
### 4. Permanent Ban
**Community Impact**: Demonstrating a pattern of violation of community
standards, including sustained inappropriate behavior, harassment of an
individual, or aggression toward or disparagement of classes of individuals.
**Consequence**: A permanent ban from any sort of public interaction within the
community.
## Attribution
This Code of Conduct is adapted from the [Contributor Covenant][homepage],
version 2.1, available at
[https://www.contributor-covenant.org/version/2/1/code_of_conduct.html][v2.1].
Community Impact Guidelines were inspired by
[Mozilla's code of conduct enforcement ladder][mozilla coc].
For answers to common questions about this code of conduct, see the FAQ at
[https://www.contributor-covenant.org/faq][faq]. Translations are available at
[https://www.contributor-covenant.org/translations][translations].
[homepage]: https://www.contributor-covenant.org
[v2.1]: https://www.contributor-covenant.org/version/2/1/code_of_conduct.html
[mozilla coc]: https://github.com/mozilla/diversity
[faq]: https://www.contributor-covenant.org/faq
[translations]: https://www.contributor-covenant.org/translations
================================================
FILE: CONTRIBUTING.md
================================================
# Welcome! 🎉
Welcome to the Electricity Maps open source contribution repository. </br>
Any and all contributions however big or small are welcome.
# Links
- [README][readme]
- [Code of Conduct][code of conduct]
- [License][license]
- [Wiki][wiki]
# Code of Conduct
This repository and by extension its community have adopted the [Contributor Covenant][contributor covenant] v2.1 as its code of conduct.
If you have any questions about the code of conduct or feel the need to report an incident you can do so by emailing us at codeofconduct@electricitymaps.com. For the full code of conduct see [CODE_OF_CONDUCT.md][code of conduct].
# License
We use the GNU Affero General Public License v3.0 for this repository, check the [LICENSE.md][license] file details about what exactly this entails. Contributions prior to commit [cb9664f][commit cb9664f] where licensed under [MIT license][old_license]
# Getting Started
## Non-code contributions
There are several ways to help out without coding, these are primarily:
- Opening issues for bugs.
- Opening issues for data problems.
- Opening and/or participating in discussions about new data sources, features, and more.
- Opening issues when capacity data sources have been updated or changed.
- Finding new data sources, wiki page: [Find data sources][wiki find data sources]
- Verify existing data sources, wiki page: [Verify data sources][wiki verify data sources]
- And more!
> **Note**
> Take a look at the wiki pages for more detailed instructions
## Zone and exchange configurations
Static information about zones and exchanges are located at [config/zones][config zones] and [config/exchanges][config exchanges] respectively.
The zone configurations hold information such as the installed capacity, which parsers to use, fallback mixes, contributors and other keys that are required by our frontend and internal systems; and while similar the exchange configs hold the location, capacity, direction and parsers required.
## Parser guidelines
To get started with editing the parsers use the following steps:
1. Run `uv sync --extra parsers` to install all needed dependencies.
2. Use `uv run test_parser ZONE_KEY` to test any parser changes.
Note: This requires you to have [Python 3.10][python homepage] and [uv][uv homepage] installed, you can see their respective installation guides here:
- [Downloading Python][python install guide]
- [uv installation][uv install guide]
### Parser information
For more detailed information about parsers specifically you can look at the parser [README][parser readme] located at [electricitymap/contrib/parsers/README.md][parser readme] with specific information about the parser functions located in the [electricitymap/contrib/parser/example][parser examples folder] folder
#### Example parser:
For an example of how a parser can look we have an example here: </br> [electricitymap/contrib/parsers/examples/example_parser.py][example parser]
### Formatting the parsers
We use [ruff][ruff homepage] as a code formatter for python which is automatically checked in the CI job `Python / Formatting`.
If this jobs fails and you need to manually format the code you can run `uv run format` in the top level of the repository.
Check the [wiki page][wiki python code formatting] for more details and tips.
# Contribution lifecycle
In order for your PR to be accepted and deployed it will need to pass a series of checks, these checks will be defined and explained in the following section of this document.
## Overview
```mermaid
%%{init: {"flowchart": {"defaultRenderer": "elk"}} }%%
flowchart LR
subgraph idContrib["Electricity Maps contrib"]
direction LR
id1((Open a PR))
id2{First time contributor?}
id3(Await EMaps team CI approval)
id4{Is the CI tests passing?}
id5(Make changes)
id6{Passing review from EMaps team member}
id7(PR is merged)
id8(Deployed to Staging)
id1-->id2
id2-->|Yes|id3
id2-->|No|id4
id3-->id4
id4-->|No|id5
id5-->id4
id4-->|Yes|id6
id6-->|No|id5
id6-->|Yes|id7
id7-->id8
end
subgraph idInternal["Electricity Maps internal"]
direction LR
id9((Automatic PR created))
id10{Are internal CI tests passing}
id11(Make changes)
id12{Passing review from Emaps member?}
id13(Deployed to production)
id9-->id10
id10-->|No|id11
id11-->id10
id10-->|Yes|id12
id12-->|No|id11
id12-->|Yes|id13
end
id7-->id9
```
## Description
In order to do code changes to the Electricity Maps repository you need to fork the repo and make changes in your own fork and then open a pull request (PR) against the Electricity Maps repository.
Once this has been done the automatic and manual review process starts, this consists of manual approval of the CI pipeline if you are a first time contributor, if the CI pipeline passes a team member will review your specific code changes. If they pass all automated tests and manual review from a Electricity Maps Employee it will be merged in our contrib PR. This does not mean it will be automatically de deployed or that the changes will be instantly visible.
If there is parser changes these go on to more internal tests that includes both automated test suits and manual reviews. Once everything passes and an approval has been granted a new release will be created that updates the production environment for both the frontend and parser changes.
<!-- Link definitions to keep the text clean -->
[uv homepage]: https://github.com/astral-sh/uv
[python homepage]: https://www.python.org/
[python install guide]: https://wiki.python.org/moin/BeginnersGuide/Download
[uv install guide]: https://docs.astral.sh/uv/getting-started/installation/
[ruff homepage]: https://docs.astral.sh/ruff/
[example parser]: https://github.com/electricitymaps/electricitymaps-contrib/blob/master/electricitymap/contrib/parsers/examples/example_parser.py
[wiki python code formatting]: https://github.com/electricitymaps/electricitymaps-contrib/wiki/Format-your-code-contribution#python-code-formatting
[readme]: https://github.com/electricitymaps/electricitymaps-contrib/blob/master/README.md
[code of conduct]: https://github.com/electricitymaps/electricitymaps-contrib/blob/master/CODE_OF_CONDUCT.md
[license]: https://github.com/electricitymaps/electricitymaps-contrib/blob/master/LICENSE.md
[wiki]: https://github.com/electricitymaps/electricitymaps-contrib/wiki
[wiki find data sources]: https://github.com/electricitymaps/electricitymaps-contrib/wiki/Find-data-sources
[wiki verify data sources]: https://github.com/electricitymaps/electricitymaps-contrib/wiki/Verify-data-sources
[contributor covenant]: https://www.contributor-covenant.org/
[commit cb9664f]: https://github.com/electricitymaps/electricitymaps-contrib/commit/cb9664f43f0597bedf13e832047c3fc10e67ba4e
[old_license]: https://github.com/electricitymaps/electricitymaps-contrib/blob/master/LICENSE_MIT.txt
[config zones]: https://github.com/electricitymaps/electricitymaps-contrib/tree/master/config/zones
[config exchanges]: https://github.com/electricitymaps/electricitymaps-contrib/tree/master/config/exchanges
[parser readme]: https://github.com/electricitymaps/electricitymaps-contrib/tree/master/parsers/README.md
[parser examples folder]: https://github.com/electricitymaps/electricitymaps-contrib/blob/master/electricitymap/contrib/parsers/examples/
================================================
FILE: DATA_SOURCES.md
================================================
## Data sources
### Real-time electricity data sources
Real-time electricity data is obtained using [parsers](https://github.com/electricitymaps/electricitymaps-contrib/tree/master/parsers).
<details><summary>Click to see the full list of sources</summary>
- Åland: [Kraftnät Åland](http://www.kraftnat.ax/text2.con?iPage=28&iLan=1)
- Argentina: [Cammesa](http://portalweb.cammesa.com/Memnet1/default.aspx)
- Armenia: [Armenian Energy Power System Operator](http://epso.am/poweren.htm)
- Aruba: [WEB Aruba](https://www.webaruba.com/renewable-energy-dashboard/aruba) ([JSON](https://www.webaruba.com/renewable-energy-dashboard/app/rest/results.json))
- Australia: [OpenNEM](https://opennem.org.au/energy/nem/)
- Australia (King Island): [King Island Renewable Energy Integration Project (KIREIP)](https://data.ajenti.com.au/KIREIP/index.html)
([CSV](http://wa.aemo.com.au/aemo/data/wa/infographic/facility-intervals-last96.csv))
- Australia (Flinders Island): [Flinders Island Hybrid Energy Solution](https://www.hydro.com.au/clean-energy/hybrid-energy-solutions/success-stories/flinders-island)
- Australia (Rottnest Island): [Rottnest Island Hybrid Energy Solution](https://www.hydro.com.au/clean-energy/hybrid-energy-solutions/success-stories/rottnest-island)
- Austria: [ENTSOE](https://transparency.entsoe.eu/content/static_content/Static%20content/web%20api/Guide.html)
- Bahrain: [GCCIA](https://www.gccia.com.sa/)
- Bangladesh: [PGCB](https://erp.pgcb.gov.bd/web/generations/view_generations)
- Bosnia and Herzegovina: [ENTSOE](https://transparency.entsoe.eu/content/static_content/Static%20content/web%20api/Guide.html)
- Bolivia: [CNDC](http://www.cndc.bo/media/archivos/graf/gene_hora/gweb_despdia_genera.php)
- Belgium: [ENTSOE](https://transparency.entsoe.eu/content/static_content/Static%20content/web%20api/Guide.html)
- Brazil: [ONS](http://www.ons.org.br/paginas/energia-agora/carga-e-geracao)
- Bulgaria: [TSO](http://tso.bg/default.aspx/page-707/bg)
- Canada:
- Alberta: [AESO](http://ets.aeso.ca/ets_web/ip/Market/Reports/CSDReportServlet)
- New Brunswick: [NB Power](https://tso.nbpower.com/Public/en/op/market/data.aspx)
- Nova Scotia: [Nova Scotia Power](https://www.nspower.ca/clean-energy/todays-energy-stats)
- Ontario: [IESO](http://www.ieso.ca/power-data)
- Québec: [Hydro-Québec](https://www.hydroquebec.com/residentiel/)
- Prince Edward Island: [Government of PEI](https://www.princeedwardisland.ca/en/feature/pei-wind-energy/)
- Saskatchewan: [Saskpower ](https://www.saskpower.com/Our-Power-Future/Our-Electricity/Electrical-System/Where-Your-Power-Comes-From)(daily avg)
- Yukon: [Yukon Energy](http://www.yukonenergy.ca/energy-in-yukon/electricity-101/current-energy-consumption)
- Chile (SING/SIC): [Coordinador](https://sipub.coordinador.cl/api/v1/recursos/generacion_centrales_tecnologia_horario?)
- Czech Republic: [ENTSOE](https://transparency.entsoe.eu/content/static_content/Static%20content/web%20api/Guide.html)
- Costa Rica: [ICE](https://apps.grupoice.com/CenceWeb/data/sen/json/EnergiaHorariaFuentePlanta?anno=2022&mes=12&dia=27)
- Croatia (Exchanges): [HOPS](https://www.hops.hr/wps/portal/hr/web)
- Cyprus: [TSO](https://tsoc.org.cy/electrical-system/total-daily-system-generation-on-the-transmission-system/)
- Denmark: [TSO](https://www.energidataservice.dk/groups/production-and-consumption)
- Dominican Republic: [OC](http://www.oc.org.do/Reportes/postdespacho.aspx)
- Ecuador: [CENACE](https://www.cenace.gob.ec/info-operativa/InformacionOperativa.htm)
- El Salvador: [Unidad de Transacciones](http://estadistico.ut.com.sv/OperacionDiaria.aspx)
- Estonia: [ENTSOE](https://transparency.entsoe.eu/content/static_content/Static%20content/web%20api/Guide.html)
- Faroe Islands:
- Biomass: [Fjarhiti](https://www.fjarhiti.fo/kunning/biogassverki%C3%B0-roynist-vael-%C3%AD-fjarhitaskipanini/)
- Other: [SEV](https://www.sev.fo/framleidsla/el-orka-i-foroyum/)
- Finland: [ENTSOE](https://transparency.entsoe.eu/content/static_content/Static%20content/web%20api/Guide.html)
- France: [RTE](https://opendata.reseaux-energies.fr)
- French Polynesia: [EDT](https://www.edt.pf/transition-energetique-innovation)
- Germany: [ENTSOE](https://transparency.entsoe.eu/content/static_content/Static%20content/web%20api/Guide.html)
- Georgia: [Georgian State Electrosystem (GSE)](http://www.gse.com.ge/home)
- Great Britain: [Elexon BMRS](https://bscdocs.elexon.co.uk/guidance-notes/bmrs-api-and-data-push-user-guide)
- Greece: [ENTSOE](https://transparency.entsoe.eu/content/static_content/Static%20content/web%20api/Guide.html)
- Guatemala: [AMM](http://www.amm.org.gt)
- Honduras: [ENTE](https://www.enteoperador.org/flujos-regionales-en-tiempo-real/)
- Hungary: [ENTSOE](https://transparency.entsoe.eu/content/static_content/Static%20content/web%20api/Guide.html)
- Iceland: [LANDSNET](https://amper.landsnet.is/generation/api/Values)
- Ireland: [Eirgrid](https://www.smartgriddashboard.com/)
- Israel: [IEC](https://www.iec.co.il/en/pages/default.aspx)
- Italy: [ENTSOE](https://transparency.entsoe.eu/content/static_content/Static%20content/web%20api/Guide.html)
- India: [meritindia](http://meritindia.in/)
- India: [Vidyut PRAVAH](https://vidyutpravah.in/)
- India: [National Power Portal](https://npp.gov.in/dgrReports)
- India: [Central Electricity Authority](https://cea.nic.in/daily-renewable-generation-report/?lang=en)
- India (Andhra Pradesh): [CORE Dashboard](https://core.ap.gov.in/CMDashBoard/UserInterface/Power/PowerReport.aspx)
- India (Chhattisgarh): [cspc.co.in](http://117.239.199.203/csptcl/GEN.aspx)
- India (Delhi): [delhisldc](http://www.delhisldc.org/Redirect.aspx?Loc=0804)
- India (Gujarat): [sldcguj](https://www.sldcguj.com/RealTimeData/RealTsimeDemand.php)
- India (Himachal Pradesh): [HPSLDC](https://hpsldc.com/intra-state-power-transaction/)
- India (Maharashtra) [mahasldc](https://mahasldc.in/wp-content/reports/sldc/mvrreport3.jpg)
- India (Karnataka): [kptclsldc.in](http://kptclsldc.in/StateGen.aspx)
- India (Punjab): [punjabsldc](http://www.punjabsldc.org/pungenrealw.asp?pg=pbGenReal)
- India (Uttar Pradesh): [upsldc](http://www.upsldc.org/real-time-data)
- India (Uttarakhand): [uksldc](http://uksldc.in/real-time-data.php)
- Iraq: [Iraqi Power System](https://www.gdoco.org/generation.html)
- Japan (Exchanges): [OCCTO](http://occtonet.occto.or.jp/public/dfw/RP11/OCCTO/SD/LOGIN_login)
- Japan (Chūbu): [Chūden](http://denki-yoho.chuden.jp/)
- Japan (Chūgoku): [Energia](http://www.energia.co.jp/jukyuu/)
- Japan (Hokkaidō): [Hokuden](http://denkiyoho.hepco.co.jp/area_forecast.html)
- Japan (Hokuriku): [Rikuden](http://www.rikuden.co.jp/denki-yoho/)
- Japan (Kansai): [Kepco](http://www.kepco.co.jp/energy_supply/supply/denkiyoho/)
- Japan (Kyūshū): [Kyūden](http://www.kyuden.co.jp/power_usages/pc.html)
- Japan (Kyūshū/Genkai NPP): [Kyūden](http://www.kyuden.co.jp/php/nuclear/genkai/rename.php?A=g_power.fdat&B=ncp_state.fdat&_=1520532904073)
- Japan (Kyūshū/Sendai NPP): [Kyūden](http://www.kyuden.co.jp/php/nuclear/sendai/rename.php?A=s_power.fdat&B=ncp_state.fdat&_=1520532401043)
- Japan (Shikoku): [Yonden](http://www.yonden.co.jp/denkiyoho/)
- Japan (Tōhoku-Niigata): [TH-EPCO](http://setsuden.tohoku-epco.co.jp/graph.html)
- Japan (Tōkyō area): [TEPCO](http://www.tepco.co.jp/forecast/html/images/juyo-d1-j.csv)
- Kosovo: [ENTSOE](https://transparency.entsoe.eu/content/static_content/Static%20content/web%20api/Guide.html)
- Kuwait (TSO): [Ministry of Electricity & Water](https://www.mew.gov.kw/en/)
- Kuwait (Power Market): [GCCIA](https://www.gccia.com.sa/)
- Latvia: [ENTSOE](https://transparency.entsoe.eu/content/static_content/Static%20content/web%20api/Guide.html)
- Lithuania: [ENTSOE](https://transparency.entsoe.eu/content/static_content/Static%20content/web%20api/Guide.html)
- Malaysia: [GSO](https://www.gso.org.my/LandingPage.aspx)
- Moldova: [MoldElectrica](http://www.moldelectrica.md/ro/activity/system_state)
- Montenegro: [ENTSOE](https://transparency.entsoe.eu/content/static_content/Static%20content/web%20api/Guide.html)
- Namibia: [NamPower](http://www.nampower.com.na/Scada.aspx)
- Netherlands: [ENTSOE](https://transparency.entsoe.eu/content/static_content/Static%20content/web%20api/Guide.html)
- New Zealand:
- [Transpower](https://www.transpower.co.nz/power-system-live-data)
- [Siesa](https://www.southlanddc.govt.nz/my-southland/siesa-2/what-sieasa-does/)
- [Energy Market Services](https://em6live.co.nz)
- Nicaragua: [CNDC](http://www.cndc.org.ni/)
- Nigeria: [TCN ISO grid data portal](https://www.niggrid.com/GenerationProfile)
- Northern Ireland: [Eirgrid](https://www.smartgriddashboard.com/)
- Norway: [ENTSOE](https://transparency.entsoe.eu/content/static_content/Static%20content/web%20api/Guide.html)
- Oman: [GCCIA](https://www.gccia.com.sa/)
- Panama: [CND](http://sitr.cnd.com.pa/m/pub/gen.html)
- Peru: [COES](http://www.coes.org.pe/Portal/portalinformacion/Generacion)
- Poland: [ENTSOE](https://transparency.entsoe.eu/content/static_content/Static%20content/web%20api/Guide.html)
- Portugal: [ENTSOE](https://transparency.entsoe.eu/content/static_content/Static%20content/web%20api/Guide.html)
- Qatar: [GCCIA](https://www.gccia.com.sa/)
- Romania: [ENTSOE](https://transparency.entsoe.eu/content/static_content/Static%20content/web%20api/Guide.html)
- Russia: [SO-UPS](http://br.so-ups.ru/Public/MainPageData/BR/PowerGeneration.aspx)
- Serbia: [ENTSOE](https://transparency.entsoe.eu/content/static_content/Static%20content/web%20api/Guide.html)
- Singapore: [EMC](https://www.emcsg.com)
- Singapore (Solar): [EMA](https://www.ema.gov.sg/solarmap.aspx)
- Slovakia: [ENTSOE](https://transparency.entsoe.eu/content/static_content/Static%20content/web%20api/Guide.html)
- Slovenia: [ENTSOE](https://transparency.entsoe.eu/content/static_content/Static%20content/web%20api/Guide.html)
- South Africa: [Eskom](https://www.eskom.co.za/dataportal/supply-side/station-build-up-for-the-last-7-days/)
- South Korea (Nuclear): [KHNP](http://cms.khnp.co.kr/eng/kori/realTimeMgr/list.do?mnCd=EN03020201&brnchCd=BR0302)
- South Korea (Hydro): [KHNP](http://cms.khnp.co.kr/eng/realTimeMgr/water.do?mnCd=EN040203)
- South Korea (Load): [KPX](http://power.kpx.or.kr/powerinfo_en.php)
- Spain: [ENTSOE](https://transparency.entsoe.eu/content/static_content/Static%20content/web%20api/Guide.html)
- Spain (Balearic Islands): [REE](https://demanda.ree.es/movil)
- Spain (Canary Islands): [REE](https://demanda.ree.es/movil)
- Spain (Ceuta): [REE](https://demanda.ree.es/visiona/sistema/ceuta5m/)
- Spain (Melilla): [REE](https://demanda.ree.es/visiona/sistema/melilla5m/)
- Sweden: [ENTSOE](https://transparency.entsoe.eu/content/static_content/Static%20content/web%20api/Guide.html)
- Saudi Arabia: [GCCIA](https://www.gccia.com.sa/)
- Sri Lanka: [Ceylon Electricity Board](https://cebcare.ceb.lk/gensum/details)
- Switzerland: [ENTSOE](https://transparency.entsoe.eu/content/static_content/Static%20content/web%20api/Guide.html)
- Taiwan: [TAIPOWER](http://www.taipower.com.tw/d006/loadGraph/loadGraph/genshx_.html)
- Thailand: [EGAT](https://www.sothailand.com/sysgen/egat/)
- Turkey: [ytbs](https://ytbsbilgi.teias.gov.tr/ytbsbilgi/frm_istatistikler.jsf)
- Ukraine: [UKRENERGO](https://ua.energy/activity/dispatch-information/ues-operation/)
- United Arab Emirates: [GCCIA](https://www.gccia.com.sa/)
- United States of America
- Federal: [EIA](https://www.eia.gov/electricity/data.cfm#gencapacity)
- Alaska (Southeast Alaska Power Agency): [SEAPA](https://seapahydro.org/scada)
- California (US-CAL-CISO): [CAISO](http://www.caiso.com/Pages/default.aspx)
- Hawaii, Oahu Island (US-HI-OA): [Islandpulse](https://www.islandpulse.org/)
- New England (US-NE-ISNE): [NEISO](https://www.iso-ne.com/isoexpress/)
- New York (US-NY-NYIS): [NYISO](https://www.nyiso.com/real-time-dashboard)
- PJM (US-MIDA-PJM): [PJM](http://www.pjm.com/markets-and-operations.aspx)
- Puerto Rico (PR): [AEEPR](https://aeepr.com/#/operacion)
- Southwest Power Pool (US-CENT-SWPP): [SPP](https://portal.spp.org/integrated-marketplace)
- Uruguay: [UTE](https://apps.ute.com.uy/SgePublico/ConsPotenciaGeneracionArbolXFuente.aspx)
- Vietnam: [EVN](https://www.nldc.evn.vn/)
</details>
### Production capacity data sources
Production capacities are centralized in the [config/zones](https://github.com/electricitymaps/electricitymaps-contrib/tree/master/config/zones) folder. Capacities are included in the respective zone configurations. Values in the `capacity` maps are in MW.
#### International sources
When determining the installed capacity for a country, these sources might help you get started. Note that if you end up using one of these sources, it _also_ needs to be listed with the country/region.
- Renewables: [IRENA](https://www.irena.org/Search?keywords=%22Renewable+Capacity+Statistics%22&sort=date&content_type=2803e86c173c440f840aa721825b3656)
- Nuclear: [IAEA PRIS](https://pris.iaea.org/PRIS/WorldStatistics/OperationalReactorsByCountry.aspx)
- Coal: [Global Coal Plant Tracker](https://globalenergymonitor.org/projects/global-coal-plant-tracker/tracker/)
- Gas: [Global Gas Plant Tracker](https://globalenergymonitor.org/projects/global-gas-plant-tracker/tracker-map/)
- Various:
- [Climatescope](https://global-climatescope.org/capacity-generation)
- [Global Power Plant Database](https://datasets.wri.org/dataset/globalpowerplantdatabase)
For many European countries, data is available from [ENTSO-E](https://transparency.entsoe.eu/generation/r2/installedGenerationCapacityAggregation/show)
#### Sources by region
<details><summary>Click to see the full list of sources</summary>
- Åland
- Wind: [Finnish Wind Power Association](https://tuulivoimayhdistys.fi/en/wind-power-in-finland/map 'Note: the map states 43MW for the Långnabba project, but as [Vestas](https://www.vestas.com/en/media/company-news/2020/vestas-develops-highly-customised-power-plant-solution--c3249491) and [Kraftnat](https://kraftnat.ax/) state 42MW, the lower figure was used')
- Solar: [Ålands statistik- och utredningsbyrå](https://www.asub.ax/sv/ekologisk-hallbarhet-17-installerad-kapacitet-elproduktion-solpaneler-pa-aland)
- Oil: [Kraftnät Åland](https://kraftnat.ax/stamnatet/)
- Albania:
- Biomass: [IRENA](https://www.irena.org/publications/2022/Apr/Renewable-Capacity-Statistics-2022)
- Other: [ERE](https://ere.gov.al/images/2022/04/Raporti%20Vjetor%202021%20perfundimtare.pdf)
- Andorra: [FEDA](https://www.feda.ad/sobre-feda/memories-i-documents-oficials/memoria-de-sostenibilitat-2013)
- Argentina: [Cammesa](https://cammesaweb.cammesa.com/informe-sintesis-mensual/)
- Armenia
- Biomass, Hydro, Solar, Wind: [IRENA](https://www.irena.org/publications/2022/Apr/Renewable-Capacity-Statistics-2022)
- Nuclear, Gas: [wikipedia.org](https://en.wikipedia.org/wiki/List_of_power_stations_in_Armenia)
- Aruba: [WEB Aruba](https://www.webaruba.com/energy-production/power-production-figures)
- Australia
- Other: [OpenNEM](https://opennem.org.au/facilities/all/)
- Solar: [APVI](https://pv-map.apvi.org.au/historical)
- Austria
- Wind: [IGWindKraft](https://www.igwindkraft.at)
- Other: [ENTSO-E](https://transparency.entsoe.eu/generation/r2/installedGenerationCapacityAggregation/show)
- Bahrain: [IRENA](https://www.irena.org/publications/2022/Apr/Renewable-Capacity-Statistics-2022)
- Bangladesh: [BPDB](https://bpdb.portal.gov.bd/sites/default/files/files/bpdb.portal.gov.bd/annual_reports/7b792f67_bf50_4b3d_9bef_8f9b568005c9/2022-11-29-05-22-0dea17e09d8a84e72a63312df6b5bdc6.pdf)
- Belarus: [belstat.gov.by](http://www.belstat.gov.by/upload/iblock/7f7/7f70938f51eb9e49abc4a6e62f831a2c.rar), [RenEn](http://director.by/zhurnal/arkhiv-zhurnala/arkhiv-nomerov-2017/375-7-2017-iyul-2017/5456-zelenaya-energetika-nabiraet-oboroty)
- Belgium
- Nuclear: [IAEA](https://pris.iaea.org/PRIS/CountryStatistics/CountryDetails.aspx?current=BE)
- Nuclear: [FANC](https://afcn.fgov.be/fr/actualites/doel-3-arret-en-toute-surete)
- Solar: [ELIA](https://www.elia.be/en/grid-data/power-generation/solar-pv-power-generation-data)
- Hydro: [ELIA](https://www.elia.be/-/media/project/elia/shared/documents/elia-group/publications-pdfs/20200414_elia_annual-report-sustainability_en.pdf)
- Wind: [ELIA](https://www.elia.be/en/grid-data/power-generation/wind-power-generation)
- Battery: [ELIA](https://www.elia.be/en/publications/reports)
- Other: [ENTSO-E](https://transparency.entsoe.eu/generation/r2/installedGenerationCapacityAggregation/show)
- Bolivia: [CNDC](http://www.cndc.bo/agentes/generacion.php)
- Bosnia and Herzegovina: [ENTSO-E](https://transparency.entsoe.eu/generation/r2/installedGenerationCapacityAggregation/show)
- Brazil: [ONS](http://www.ons.org.br/Paginas/resultados-da-operacao/historico-da-operacao/capacidade_instalada.aspx)
- Bulgaria:
- Hydro: [NEK](https://nek.bg/index.php/en/our-business/electricity-generation)
- Other: [ENTSO-E](https://transparency.entsoe.eu/generation/r2/installedGenerationCapacityAggregation/show)
- Canada (British Columbia, New Brunswick, Newfoundland and Labrador, Nova Scotia, Prince Edward Island):
[wikipedia.org](https://en.wikipedia.org/wiki/List_of_generating_stations_in_Canada)
- Canada (Alberta): [AESO](http://ets.aeso.ca/ets_web/ip/Market/Reports/CSDReportServlet),
[wikipedia.org](https://en.wikipedia.org/wiki/List_of_generating_stations_in_Alberta)
- Canada (Manitoba)
- Hydro & Gas: [Manitoba Hydro-Electric Board](https://www.hydro.mb.ca/corporate/ar/pdf/annual_report_2020_21.pdf), [Manitoba Hydro](https://www.hydro.mb.ca/corporate/facilities/generating_stations/#selkirk)
- Wind: [Province of Manitoba](https://gov.mb.ca/sd/environment_and_biodiversity/energy/wind/windfarms.html)
- Canada (Ontario): [IESO](http://www.ieso.ca/en/Power-Data/Supply-Overview/Transmission-Connected-Generation)
- Canada (Québec): [Hydro-Québec](https://www.hydroquebec.com/generation/generating-stations.html)
- Canada (Saskatchewan): [SaskPower](https://www.saskpower.com/Our-Power-Future)
- Canada (Yukon)
- Hydro: [YukonEnergy](https://yukonenergy.ca/energy-in-yukon/projects-facilities)
- Chile (SEN, SEA, SEM): [energiaabierta.cl](http://energiaabierta.cl/visualizaciones/capacidad-instalada/)
- Chile (Easter Island): [SASIPA](https://www.sasipa.cl/estado-del-suministro)
- Croatia: [ENTSO-E](https://transparency.entsoe.eu/generation/r2/installedGenerationCapacityAggregation/show)
- Costa Rica: [ICE](https://www.grupoice.com/wps/wcm/connect/579dfc1f-5156-41e0-807d-d6808f65d718/Fasciculo_Electricidad_2020_ingl%C3%A9s_compressed.pdf?MOD=AJPERES&CVID=m.pGzcp)
- Cyprus:
- Renewable: [IRENA](https://www.irena.org/publications/2022/Apr/Renewable-Capacity-Statistics-2022)
- Other: [TSO](https://tsoc.org.cy/electrical-system/total-daily-system-generation-on-the-transmission-system/)
- Czech Republic: [ENTSO-E](https://transparency.entsoe.eu/generation/r2/installedGenerationCapacityAggregation/show)
- Denmark (DK1 and DK2):
- [ENTSO-E](https://transparency.entsoe.eu/generation/r2/installedGenerationCapacityAggregation/show)
- [energidataservice.dk](https://energidataservice.dk/tso-electricity/capacitypermunicipality)
- Dominican Republic:
- 2020 Data: [OC](https://www.dropbox.com/sh/8dec0z1ftf2nqr0/AAAbDG-6lSttxBprxhPRNkjaa/2020?dl=0&preview=OC-2020-000190-GG-SIE-INFORME+ANUAL+2019+V1.pdf&subfolder_nav_tracking=1)
- Other: [Climatescope](http://global-climatescope.org/en/country/dominican-republic/#/details)
- El Salvador:
- Thermal: [CNE](http://estadisticas.cne.gob.sv/wp-content/uploads/2016/09/Plan_indicativo_2016_2026-1.pdf)
- Renewables: [IRENA](https://www.irena.org/publications/2022/Apr/Renewable-Capacity-Statistics-2022)
- Estonia: [ENTSO-E](https://transparency.entsoe.eu/generation/r2/installedGenerationCapacityAggregation/show)
- Faroe Islands: [Johan Pauli Magnussen's Thesis, p44](https://setur.fo/uploads/tx_userpubrep/BScThesis_JohanPauliMagnussen.pdf)
- Finland:
- Nuclear: [IAEA](https://pris.iaea.org/PRIS/CountryStatistics/CountryDetails.aspx?current=FI)
- Renewables: [IRENA](https://www.irena.org/publications/2022/Apr/Renewable-Capacity-Statistics-2022)
- Wind: [Fingrid](https://data.fingrid.fi/en/dataset/total-wind-production-capacity)
- Solar: [Fingrid](https://data.fingrid.fi/en/dataset/total-solar-production-capacity)
- Other: [ENTSO-E](https://transparency.entsoe.eu/generation/r2/installedGenerationCapacityAggregation/show)
- France:
- Geothermal: [IRENA](https://www.irena.org/publications/2022/Apr/Renewable-Capacity-Statistics-2022)
- Hydro storage [RTE](https://opendata.reseaux-energies.fr/explore/dataset/registre-national-installation-production-stockage-electricite-agrege/analyze/?disjunctive.epci&disjunctive.departement&disjunctive.region&disjunctive.filiere&disjunctive.combustible&disjunctive.combustiblessecondaires&disjunctive.technologie&disjunctive.regime&disjunctive.gestionnaire&sort=-puismaxcharge&refine.filiere=Hydraulique&refine.regime=En+service&refine.technologie=Pompage+turbinage&dataChart=eyJxdWVyaWVzIjpbeyJjaGFydHMiOlt7InR5cGUiOiJjb2x1bW4iLCJmdW5jIjoiU1VNIiwieUF4aXMiOiJwdWlzbWF4aW5zdGFsbGVlIiwic2NpZW50aWZpY0Rpc3BsYXkiOnRydWUsImNvbG9yIjoiIzY2YzJhNSJ9LHsiYWxpZ25Nb250aCI6dHJ1ZSwidHlwZSI6ImNvbHVtbiIsImZ1bmMiOiJTVU0iLCJ5QXhpcyI6InB1aXNtYXhyYWMiLCJzY2llbnRpZmljRGlzcGxheSI6dHJ1ZSwiY29sb3IiOiIjZmM4ZDYyIn0seyJhbGlnbk1vbnRoIjp0cnVlLCJ0eXBlIjoiY29sdW1uIiwiZnVuYyI6IlNVTSIsInlBeGlzIjoicHVpc21heGNoYXJnZSIsInNjaWVudGlmaWNEaXNwbGF5Ijp0cnVlLCJjb2xvciI6IiM4ZGEwY2IifSx7ImFsaWduTW9udGgiOnRydWUsInR5cGUiOiJjb2x1bW4iLCJmdW5jIjoiU1VNIiwieUF4aXMiOiJwdWlzbWF4cmFjY2hhcmdlIiwic2NpZW50aWZpY0Rpc3BsYXkiOnRydWUsImNvbG9yIjoiI2U3OGFjMyJ9XSwieEF4aXMiOiJmaWxpZXJlIiwibWF4cG9pbnRzIjoiIiwidGltZXNjYWxlIjoiIiwic29ydCI6InNlcmllMS0xIiwiY29uZmlnIjp7ImRhdGFzZXQiOiJyZWdpc3RyZS1uYXRpb25hbC1pbnN0YWxsYXRpb24tcHJvZHVjdGlvbi1zdG9ja2FnZS1lbGVjdHJpY2l0ZS1hZ3JlZ2UiLCJvcHRpb25zIjp7ImRpc2p1bmN0aXZlLmVwY2kiOnRydWUsImRpc2p1bmN0aXZlLmRlcGFydGVtZW50Ijp0cnVlLCJkaXNqdW5jdGl2ZS5yZWdpb24iOnRydWUsImRpc2p1bmN0aXZlLmZpbGllcmUiOnRydWUsImRpc2p1bmN0aXZlLmNvbWJ1c3RpYmxlIjp0cnVlLCJkaXNqdW5jdGl2ZS5jb21idXN0aWJsZXNzZWNvbmRhaXJlcyI6dHJ1ZSwiZGlzanVuY3RpdmUudGVjaG5vbG9naWUiOnRydWUsImRpc2p1bmN0aXZlLnJlZ2ltZSI6dHJ1ZSwiZGlzanVuY3RpdmUuZ2VzdGlvbm5haXJlIjp0cnVlLCJzb3J0IjoiLXB1aXNtYXhjaGFyZ2UiLCJyZWZpbmUuZmlsaWVyZSI6Ikh5ZHJhdWxpcXVlIiwicmVmaW5lLnJlZ2ltZSI6IkVuIHNlcnZpY2UiLCJyZWZpbmUudGVjaG5vbG9naWUiOiJQb21wYWdlIHR1cmJpbmFnZSJ9fX1dLCJ0aW1lc2NhbGUiOiIiLCJkaXNwbGF5TGVnZW5kIjp0cnVlLCJhbGlnbk1vbnRoIjp0cnVlfQ%3D%3D)
- Hydro [RTE](https://opendata.reseaux-energies.fr/explore/dataset/registre-national-installation-production-stockage-electricite-agrege/analyze/?disjunctive.epci&disjunctive.departement&disjunctive.region&disjunctive.filiere&disjunctive.combustible&disjunctive.combustiblessecondaires&disjunctive.technologie&disjunctive.regime&disjunctive.gestionnaire&sort=-puismaxcharge&refine.filiere=Hydraulique&refine.regime=En+service&refine.technologie=Lac&refine.technologie=Fil+de+l%27eau&refine.technologie=Autre&refine.technologie=Eclus%C3%A9e&refine.technologie=Hydrolien+fluvial&dataChart=eyJxdWVyaWVzIjpbeyJjaGFydHMiOlt7InR5cGUiOiJjb2x1bW4iLCJmdW5jIjoiU1VNIiwieUF4aXMiOiJwdWlzbWF4aW5zdGFsbGVlIiwic2NpZW50aWZpY0Rpc3BsYXkiOnRydWUsImNvbG9yIjoiIzY2YzJhNSJ9LHsiYWxpZ25Nb250aCI6dHJ1ZSwidHlwZSI6ImNvbHVtbiIsImZ1bmMiOiJTVU0iLCJ5QXhpcyI6InB1aXNtYXhyYWMiLCJzY2llbnRpZmljRGlzcGxheSI6dHJ1ZSwiY29sb3IiOiIjZmM4ZDYyIn0seyJhbGlnbk1vbnRoIjp0cnVlLCJ0eXBlIjoiY29sdW1uIiwiZnVuYyI6IlNVTSIsInlBeGlzIjoicHVpc21heGNoYXJnZSIsInNjaWVudGlmaWNEaXNwbGF5Ijp0cnVlLCJjb2xvciI6IiM4ZGEwY2IifSx7ImFsaWduTW9udGgiOnRydWUsInR5cGUiOiJjb2x1bW4iLCJmdW5jIjoiU1VNIiwieUF4aXMiOiJwdWlzbWF4cmFjY2hhcmdlIiwic2NpZW50aWZpY0Rpc3BsYXkiOnRydWUsImNvbG9yIjoiI2U3OGFjMyJ9XSwieEF4aXMiOiJmaWxpZXJlIiwibWF4cG9pbnRzIjoiIiwidGltZXNjYWxlIjoiIiwic29ydCI6InNlcmllMS0xIiwiY29uZmlnIjp7ImRhdGFzZXQiOiJyZWdpc3RyZS1uYXRpb25hbC1pbnN0YWxsYXRpb24tcHJvZHVjdGlvbi1zdG9ja2FnZS1lbGVjdHJpY2l0ZS1hZ3JlZ2UiLCJvcHRpb25zIjp7ImRpc2p1bmN0aXZlLmVwY2kiOnRydWUsImRpc2p1bmN0aXZlLmRlcGFydGVtZW50Ijp0cnVlLCJkaXNqdW5jdGl2ZS5yZWdpb24iOnRydWUsImRpc2p1bmN0aXZlLmZpbGllcmUiOnRydWUsImRpc2p1bmN0aXZlLmNvbWJ1c3RpYmxlIjp0cnVlLCJkaXNqdW5jdGl2ZS5jb21idXN0aWJsZXNzZWNvbmRhaXJlcyI6dHJ1ZSwiZGlzanVuY3RpdmUudGVjaG5vbG9naWUiOnRydWUsImRpc2p1bmN0aXZlLnJlZ2ltZSI6dHJ1ZSwiZGlzanVuY3RpdmUuZ2VzdGlvbm5haXJlIjp0cnVlLCJzb3J0IjoiLXB1aXNtYXhjaGFyZ2UiLCJyZWZpbmUuZmlsaWVyZSI6Ikh5ZHJhdWxpcXVlIiwicmVmaW5lLnJlZ2ltZSI6IkVuIHNlcnZpY2UiLCJyZWZpbmUudGVjaG5vbG9naWUiOlsiTGFjIiwiRmlsIGRlIGwnZWF1IiwiQXV0cmUiLCJFY2x1c1x1MDBFOWUiLCJIeWRyb2xpZW4gZmx1dmlhbCJdfX19XSwidGltZXNjYWxlIjoiIiwiZGlzcGxheUxlZ2VuZCI6dHJ1ZSwiYWxpZ25Nb250aCI6dHJ1ZX0%3D)
- Coal, nuclear, solar, wind: [RTE](https://www.rte-france.com/eco2mix/les-chiffres-cles-de-lelectricite)
- Battery [CRE.FR](https://www.cre.fr/content/download/21318/271898)
- Other: [ENTSO-E](https://transparency.entsoe.eu/generation/r2/installedGenerationCapacityAggregation/show?)
- French Polynesia:
- Hydro & Solar: [service-public.pf](https://www.service-public.pf/sde/wp-content/uploads/sites/15/2021/02/BEPF-2019-VF_online_mail_light_compressed.pdf)
- Thermal: [service-public.pf](https://www.service-public.pf/sde/documentation-2/rapports-delegataires)
- Germany:
- Nuclear: [IAEA](https://pris.iaea.org/PRIS/CountryStatistics/CountryDetails.aspx?current=DE)
- Nuclear: [BASE](https://www.base.bund.de/EN/ns/nuclear-phase-out/nuclear-phase-out_node.html)
- Geothermal and Unknown: [Bundesnetzagentur](https://www.bundesnetzagentur.de/DE/Sachgebiete/ElektrizitaetundGas/Unternehmen_Institutionen/Versorgungssicherheit/Erzeugungskapazitaeten/Kraftwerksliste/kraftwerksliste-node.html)
- Other: [Frauenhofer ISE](https://energy-charts.info/charts/installed_power/chart.htm)
- Georgia: [ENTSO-E](https://transparency.entsoe.eu/generation/r2/installedGenerationCapacityAggregation/show)
- Great Britain: [Elexon BMRS](https://www.bmreports.com/bmrs/?q=foregeneration/capacityaggregated)
- Greece: [ENTSO-E](https://transparency.entsoe.eu/generation/r2/installedGenerationCapacityAggregation/show)
- Guatemala: [AMM](http://www.amm.org.gt/pdfs2/2017/Capacidad_Instalada_2017.xls)
- Honduras: [ENEE](http://www.enee.hn/planificacion/2018/boletines/Boletin%20Estadistico%20Mes%20de%20Septiembre%202018%20PDF.pdf)
- Hong Kong: [CLP](https://www.clp.com.hk/en/about-clp/power-generation)
- Hungary:
- Biomass: [ENTSO-E](https://transparency.entsoe.eu/generation/r2/installedGenerationCapacityAggregation/show)
- Solar: [MAVIR](https://www.mavir.hu/documents/10258/255200887/PV+STATISZTIKA_HU_20231231_ig_v2.pdf)
- Other: [MAVIR](https://www.mavir.hu/web/mavir/energia-mix-eromuvi-beepitett-teljesitokepesseg-adatok)
- Iceland
- Oil: [Statistics Iceland](http://px.hagstofa.is/pxen/pxweb/en/Atvinnuvegir/Atvinnuvegir__orkumal/IDN02101.px)
- Geothermal, Wind and Hydro: [IRENA](https://www.irena.org/publications/2022/Apr/Renewable-Capacity-Statistics-2022)
- Ireland
- Non-Renewable: [ENTSO-E](https://transparency.entsoe.eu/generation/r2/installedGenerationCapacityAggregation/show)
- Renewable: [IRENA](https://www.irena.org/publications/2022/Apr/Renewable-Capacity-Statistics-2022)
- Indonesia
- Renewable: [IRENA](https://www.irena.org/publications/2022/Apr/Renewable-Capacity-Statistics-2022)
- Non-Renewable [ESDM](https://www.esdm.go.id/assets/media/content/content-laporan-kinerja-ditjen-ketenagalistrikan-2020.pdf)
- Israel
- [Irena](https://pxweb.irena.org/pxweb/en/IRENASTAT)
- [GEM](https://globalenergymonitor.org/projects/global-gas-plant-tracker/tracker-map/)
- Italy
- Coal and Oil: [ENTSO-E](https://transparency.entsoe.eu/generation/r2/installedCapacityPerProductionUnit/show)
- Other: [Terna](https://www.terna.it/it/sistema-elettrico/statistiche/pubblicazioni-statistiche)
- India:
- Renewable: [MRE](https://mnre.gov.in/img/documents/uploads/file_s-1683779844352.pdf)
- Non-Renewable: [NPP](https://npp.gov.in/publishedReports)
- (Punjab): [PUNJABSLDC](http://www.punjabsldc.org/realtimepbGen.aspx)
- (Tamil Nadu): [tnebsldc](https://tnebsldc.org/reports1/peakdet.pdf)
- Japan:
- Tokyo: [Power-Plants](http://agora.ex.nii.ac.jp/earthquake/201103-eastjapan/energy/electrical-japan/operator/3.html.ja)
- Kyūshū: [TSO - Kyuden](https://www.kyuden.co.jp/library/pdf/en/ir/integratedreport/2022/en_integratedreport_2022.pdf)
- Tohoku
- Wind: [The Wind Power](https://www.thewindpower.net/country_zones_en_11_japan.php)
- Hokkaidō
- Wind: [TSO - HEPCO](https://www.hepco.co.jp/english/environment/renewable_energy.html)
- Hydro [TSO - HEPCO](https://www.hepco.co.jp/english/ir/datadownloads.html)
- Hydro storage [TSO - HEPCO](https://wwwc.hepco.co.jp/hepcowwwsite/english/ir/pdf/hepco_group_report_2022.pdf)
- Oil & coal & gas: [TSO - HEPCO](https://www.hepco.co.jp/english/ir/datadownloads.html)
- Nuclear: [TSO - HEPCO](https://www.hepco.co.jp/english/ir/datadownloads.html)
- Solar: [TSO - HEPCO](https://www.hepco.co.jp/english/environment/renewable_energy.html)
- Biomass: [TSO - HEPCO](https://www.hepco.co.jp/english/environment/renewable_energy.html)
- Geothermal: [TSO - HEPCO](https://wwwc.hepco.co.jp/hepcowwwsite/english/ir/pdf/hepco_group_report_2022.pdf)
- Hokuriku
- Hydro, coal, oil, gas, nuclear & solar: [TSO - Rikuden](https://www.rikuden.co.jp/csr/attach/integratedreport2021EN.pdf)
- Wind: [The Wind Power](https://www.thewindpower.net/developer_en_1636_hokuriku-electric-power-group.php)
- Biomass: [Global Energy Monitor](https://www.gem.wiki/Tsuruga_power_station)
- Chūbu
- Biomass, hydro storage & geothermal: [TSO - Chuden](https://www.chuden.co.jp/english/energy/renewable/initiatives/)
- Hydro & Nuclear: [TSO - Chuden](https://www.chuden.co.jp/english/corporate/outline/)
- Solar & Wind: [TSO - Chuden](https://www.chuden.co.jp/english/resource/corporate/ecsr_report_2022_all.pdf)
- Coal & gas & oil: [Power Plants](https://en.wikipedia.org/wiki/Chubu_Electric_Power)
- Chūgoku
- Nuclear, hydro & hydro storage: [TSO - Energia](https://www.energia.co.jp/e/business/int_business/skills/renewable-energy.html)
- Solar: [Sonnedix](https://sonnedix.jp/power-plants/list-of-plants/)
- Wind: [The Wind Power](https://www.thewindpower.net/country_zones_en_11_japan.php)
- Coal, gas & oil: [TSO - Energia](https://www.energia.co.jp/e/business/int_business/skills/thermal-pg.html)
- Shikoku
- Wind: [The Wind Power](https://www.thewindpower.net/country_zones_en_11_japan.php)
- Hydro & Nuclear: [TSO - Yonden](https://www.yonden.co.jp/english/profile/profile.html)
- Hydro storage, coal, oil & gas: [TSO - Yonden](https://www.yonden.co.jp/english/assets/pdf/ir/tools/ann_r/annual_e_2022.pdf)
- Biomass: [Global Energy Monitor](https://www.gem.wiki/Saijo_power_station)
- Solar: [ISEP](https://www.isep.or.jp/en/411/)
- Okinawa
- Wind: [The Wind Power](https://www.thewindpower.net/zones_en_11_985.php)
- Coal, oil & gas: [TSO - Okiden](https://www.okiden.co.jp/shared/pdf/ir/ar/ar2021/oepc_ar21_00.pdf)
- Biomass: [Erex](https://www.erex.co.jp/en/business/power-generation/plant/)
- Kosovo: [TSO](https://www.kostt.com/Content/ViewFiles/Transparency/BasicMarketDataOnGeneration/EN/Installed%20capacity%20of%20production%20units.pdf)
- Kuwait
- Gas & oil: [KAPSARC](https://datasource.kapsarc.org/api/datasets/1.0/kuwait-power-plants-database/attachments/power_plants_xlsx/)
- Solar & wind: [IRENA](https://www.irena.org/publications/2022/Apr/Renewable-Capacity-Statistics-2022)
- Latvia: [ENTSO-E](https://transparency.entsoe.eu/generation/r2/installedGenerationCapacityAggregation/show)
- Lithuania:
- Solar & Wind: [Litgrid](https://www.litgrid.eu/index.php/power-system/power-system-information/generation-capacity/546)
- Other: [ENTSO-E](https://transparency.entsoe.eu/generation/r2/installedGenerationCapacityAggregation/show)
- Luxembourg:
- Hydro Storage: [Société Electrique de L'Our](http://www.seo.lu/fr/Activites-principales/PSW-Vianden/Installations/Donnees-techniques)
- Other: [Institut luxembourgeois de régulation](https://data.public.lu/fr/datasets/la-production-denergie-electrique-au-luxembourg-1/)
- Malaysia: [GSO](https://www.gso.org.my/SystemData/PowerStation.aspx)
- Moldova
- Renewable: [IRENA](https://www.irena.org/publications/2022/Apr/Renewable-Capacity-Statistics-2022)
- Gas (CET-1 & CET-2 Chişinău): [Termoelectrica](https://www.termoelectrica.md/ro_RO/despre/informatii-tehnice/)
- Gas (CET-Nord): [CET-Nord](https://www.cet-nord.md/en/transparent/tep)
- Gas and coal (CERS Moldovenească): [MOLDGRES](http://moldgres.com/o-predpriyatii/equipment)
- Summary as permanent document (slightly outdated): [FAS](<http://en.fas.gov.ru/upload/other/National%20Agency%20for%20Energy%20Regulation%20(G.%20Pyrzy).pdf>)
- Montenegro: [ENTSO-E](https://transparency.entsoe.eu/generation/r2/installedGenerationCapacityAggregation/show)
- Morocco: [ONEE](http://www.one.org.ma/FR/pdf/Depliant%20Statistiques%20FR%202019.pdf)
- Nagorno-Karabakh: [Artsakh HEK](http://artsakhhek.am/?lang=en)
- Namibia
- Coal & Oil: [NamPower](http://www.nampower.com.na/Page.aspx?p=182)
- Hydro, solar & wind: [African Energy](https://www.africa-energy.com/database)
- Nepal
- List of PowerStations: [PowerStations](https://en.wikipedia.org/wiki/List_of_power_stations_in_Nepal)
- GIS Map of Reservoir Projects: [GIS_Reservoir](https://www.doed.gov.np/download/GIS-map-of-reservoir-projects.pdf)
- Netherlands:
- Solar and wind : [CBS](https://www.cbs.nl/nl-nl/cijfers/detail/82610NED)
- Biomass, Hydro, Wind: [IRENA](https://www.irena.org/publications/2022/Apr/Renewable-Capacity-Statistics-2022)
- Other : [ENTSO-E](https://transparency.entsoe.eu/generation/r2/installedGenerationCapacityAggregation/show)
- Nicaragua: [INE](https://www.ine.gob.ni/index.php/electricidad/estadisticas-anuales)
- Nigeria
- [USAID](https://www.usaid.gov/powerafrica/nigeria)
- [TCN ISO grid data portal](https://www.niggrid.org)
- North Macedonia: [ENTSO-E](https://transparency.entsoe.eu/generation/r2/installedGenerationCapacityAggregation/show)
- Norway:
- Solar: [NVE Excel report](https://www.nve.no/media/13861/oversikt-over-solcelleanlegg-i-norge_2021.xlsx)
- Other: [NVE](https://www.nve.no/energiforsyning/kraftproduksjon/?ref=mainmenu)
- Northern Ireland
- Thermal capacity, battery storage: [Connections Register, April 2022](https://www.soni.ltd.uk/media/documents/20220414-Connections-Register-14-April-2022.pdf)
- Renewables, smaller scale generation: [All-Island Generation Capacity Statement 2022-2031](https://www.soni.ltd.uk/media/documents/EirGrid_SONI_2022_Generation_Capacity_Statement_2022-2031.pdf)
- Coal Retirement: [BBC](https://web.archive.org/web/20231004055500/https://www.bbc.com/news/uk-northern-ireland-66957611)
- Oman: [IRENA](https://www.irena.org/publications/2022/Apr/Renewable-Capacity-Statistics-2022)
- Panama:
- Renewables: [IRENA](https://www.irena.org/publications/2022/Apr/Renewable-Capacity-Statistics-2022)
- Oil, Gas and Coal: [CND](http://www.cnd.com.pa/index.php/estadisticas)
- Biomass: [Secretaría de Energía de Panamá](http://www.energia.gob.pa/mercado-energetico/?tag=84#documents-list)
- Peru: [IRENA](https://www.irena.org/publications/2022/Apr/Renewable-Capacity-Statistics-2022)
- Philippines: [Philippine Department of Energy](https://www.doe.gov.ph/sites/default/files/pdf/electric_power/04_LVM-Grid-Summary-June-2023-updated.pdf)
- Poland: [ENTSO-E](https://transparency.entsoe.eu/generation/r2/installedGenerationCapacityAggregation/show)
- Portugal:
- Biomass, Hydro, Solar, Wind, Gas: [REN](https://datahub.ren.pt/en/electricity/monthly-balance/)
- Other: [ENTSO-E](https://transparency.entsoe.eu/generation/r2/installedGenerationCapacityAggregation/show)
- Puerto Rico: [EIA](https://www.eia.gov/electricity/data/eia860M/)
- Qatar: [IRENA](https://www.irena.org/publications/2022/Apr/Renewable-Capacity-Statistics-2022)
- Romania:
- Latest: [Transelectrica](https://www.transelectrica.ro/documents/10179/45096/7productie23.xls/235f8702-9890-4109-9403-36c7fa59ce16)
- Other: [ENTSO-E](https://transparency.entsoe.eu/generation/r2/installedGenerationCapacityAggregation/show)
- Russia: [Minenergo](https://minenergo.gov.ru/node/532)
- Serbia: [ENTSO-E](https://transparency.entsoe.eu/generation/r2/installedGenerationCapacityAggregation/show?)
- Singapore
- Solar: [Energy Market Authority](https://www.ema.gov.sg/consumer-information/solar/solar-irradiance-map)
- Other: [Energy Market Authority](https://www.ema.gov.sg/statistic.aspx?sta_sid=20140730XofavKNX5Ti7)
- Slovakia:
- Nuclear: [IAEA](https://pris.iaea.org/PRIS/CountryStatistics/CountryDetails.aspx?current=SK)
- Renewables: [IRENA](https://www.irena.org/publications/2022/Apr/Renewable-Capacity-Statistics-2022)
- Other: [SEPS](https://www.sepsas.sk/media/4951/rocenka-sed-2020.pdf)
- Slovenia: [ENTSO-E](https://transparency.entsoe.eu/generation/r2/installedGenerationCapacityAggregation/show)
- South Africa:
- [Eskom](https://www.eskom.co.za/wp-content/uploads/2021/08/2021IntegratedReport.pdf)
- South Korea:
- Nuclear: [IAEA](https://pris.iaea.org/PRIS/CountryStatistics/CountryDetails.aspx?current=KR)
- [KHNP](http://cms.khnp.co.kr/content/163/main.do?mnCd=FN05040101)
- [EPSIS](http://epsis.kpx.or.kr/epsisnew/selectEkpoBftChart.do?menuId=020100)
- Spain
- Geothermal, Oil: [ENTSO-E](https://transparency.entsoe.eu/generation/r2/installedGenerationCapacityAggregation/show?)
- Other: [REE](https://www.ree.es/es/datos/generacion/potencia-instalada)
- Spain (Balearic Islands)
- Coal: [wikipedia.org](https://es.wikipedia.org/wiki/Central_t%C3%A9rmica_de_Es_Murterar)
- Wind, Solar: [REE](http://www.ree.es/sites/default/files/11_PUBLICACIONES/Documentos/Renovables-2016-v3.pdf)
- Spain (Canary Islands)
- Hydro storage: [goronadelviento.es](http://www.goronadelviento.es/)
- Wind, Solar: [REE](http://www.ree.es/sites/default/files/11_PUBLICACIONES/Documentos/Renovables-2016-v3.pdf)
- Spain (Ceuta): [REE](https://www.ree.es/es/datos/generacion/potencia-instalada)
- Spain (Melilla): [REE](https://www.ree.es/es/datos/generacion/potencia-instalada)
- Sri Lanka: [Ceylon Electricity Board](https://ceb.lk/front_img/img_reports/1636539187LTGEP_2022-2041_Web_compressed.pdf 'Renewable installed capacity taken from Figure 1.13 (private-owned) and Table 2.1 (government-owned hydro), except for biomass, where the higher figure mentioned in the section "5.4 Other Renewable Energy Development" was used. Together, these add up to within 1 MW of the stated total renewable capacity of 2,447 MW (which is mentioned in e.g. "1.4.2.1 Overview"). Solar includes rooftop solar. Thermal capactity taken from "2.2 Thermal Generation". Thermal Electricity generation is only from coal and oil, see Figure 1.14. According to ["CEB - ANNUAL REPORT 2020" page 18 (20 in PDF)](https://ceb.lk/front_img/img_reports/164887150703-CEB-Annual_Report-2020-English.pdf), the 900MW Lakvijaya plant is the only coal plant in Sri Lanka, implying the others are oil-fired. Installed capacity figures do not add up exactly to the 2,168 MW mentioned in the opening paragraph; I went with the combined total nameplate capacity from Table 2.5 (government-owned) and Table 2.6 (private-owned), adding up to 2197.9 MW. Then I put 900MW under coal and categorized the remainder as oil. Pumped hydro is mentioned as being planned/investigated in several places, but currently isn\'t deployed. The same goes for battery storage. Sri Lanka has no nuclear power plants. A report has been commissioned to investigate the possibility, see 4.2 (v).')
- Sweden: [SVK](https://www.svk.se/siteassets/om-oss/rapporter/2023/kraftbalansen-pa-den-svenska-elmarknaden-rapport-2023.pdf)
- Switzerland
- Hydro: [BEF](https://www.bfe.admin.ch/bfe/de/home/versorgung/statistik-und-geodaten/geoinformation/geodaten/wasser/statistik-der-wasserkraftanlagen.html)
- Other: [UVEK](https://www.uvek-gis.admin.ch/BFE/storymaps/EE_Elektrizitaetsproduktionsanlagen/)
- Taiwan
- Renewable: [TAIPOWER](https://www.taipower.com.tw/en/page.aspx?mid=4495)
- Other: [TAIPOWER](https://www.taipower.com.tw/en/page.aspx?mid=4488&cid=2793&cchk=4ce0ae20-8549-4207-b5e2-2f0919e749bf)
- Thailand:
- EGAT's production capacity: [EGAT](https://www.egat.co.th/home/statistics-all-egat/)
- EGAT's purchase capacity: [EGAT](https://www.egat.co.th/home/statistics-all-3rdparty/)
- Turkey: [TEIAS](https://www.teias.gov.tr/tr-TR/kurulu-guc-raporlari)
- Ukraine: [UKRENERGO](https://ua.energy/vstanovlena-potuzhnist-energosystemy-ukrayiny/)
- United Arab Emirates: [IRENA](https://www.irena.org/publications/2022/Apr/Renewable-Capacity-Statistics-2022)
- United States of America
- Federal: [EIA](https://www.eia.gov/electricity/data.cfm#gencapacity)
- Balancing Authorities: [EIA](https://www.eia.gov/electricity/data/eia860M/)
- States:
- [EIA](https://www.eia.gov/electricity/data/state/)
- [EIA](https://www.eia.gov/electricity/data/eia860M/)
- BPA: [BPA](https://transmission.bpa.gov/business/operations/Wind/baltwg.aspx)
- CAISO
- CEC: [CEC](https://www.energy.ca.gov/data-reports/energy-almanac/california-electricity-data/electric-generation-capacity-and-energy)
- Renewables: [CAISO](http://www.caiso.com/informed/Pages/CleanGrid/default.aspx)
- Nuclear: [wikipedia.org](https://en.wikipedia.org/wiki/Diablo_Canyon_Power_Plant)
- Florida TECO (US-FLA-TEC)
- Coal: [Github|electricitymaps-contrib|PR#5297](https://github.com/electricitymaps/electricitymaps-contrib/pull/5297)
- Hawaii
- Battery storage: [Kapolei Energy Storage Project](https://www.kapoleienergystorage.com/)
- Coal: [The Guardian: Hawaii to close its only coal power plant in a step toward renewable energy](https://web.archive.org/web/20220902132250/https://www.theguardian.com/us-news/2022/aug/31/hawaii-close-coal-power-plant-renewable-energy)
- Other: [EIA](https://www.eia.gov/electricity/data/eia860M/)
- NYISO: [NYISO Gold Book](https://www.nyiso.com/documents/20142/2226333/2021-Gold-Book-Final-Public.pdf)
- PJM: [PJM](https://www.pjm.com/-/media/markets-ops/ops-analysis/capacity-by-fuel-type-2022.ashx)
- PNM
- Coal: [Github|electricitymaps-contrib|PR#4614](https://github.com/electricitymaps/electricitymaps-contrib/pull/4614)
- EIA: [EIA](https://www.eia.gov/electricity/data/eia860M/)
- Southern Company Services, Inc:
- Nuclear: Capacity [EIA](https://www.eia.gov/electricity/data/eia860m/)
- SPP: [SPP](https://www.spp.org/about-us/fast-facts/)
- Uruguay: [UTE](https://portal.ute.com.uy/institucional/infraestructura/fuentes-de-generacion)
- Vietnam: [EVN](https://www.nldc.evn.vn/FullNewsg/100/Thong-tin-thi-truong-dien/default.aspx)
</details>
### Cross-border transmission capacity data sources
Cross-border transmission capacities between the zones are centralized in the [config/exchanges](https://github.com/electricitymaps/electricitymaps-contrib/tree/master/config/exchanges) folder. Capacities are included in the respective exchange configurations. Values in the `capacity` maps are in MW. The value prefaced with `-` is the export capacity and the value not prefaced is the import capacity. Direction is determined by alphabetical sorting of the zone keys.
#### For the nordic and baltic countries capacities are available from [Nord Pool](https://www.nordpoolgroup.com/en/Market-data1/Dayahead/Capacities1/Capacities/key1/hourly/?view=table)
<details><summary>Click to see the full list of sources</summary>
- Åland ⇄ Sweden: ["Sverigekabeln": 80 MW](https://kraftnat.ax/stamnatet/)
- Åland ⇄ Finland: ["Gustavskablen": 10 MW + "ÅL-Link": 100 MW](https://kraftnat.ax/stamnatet/)
- Albania ⇄ Greece: [533 MW](https://ec.europa.eu/energy/sites/ener/files/documents/2nd_report_ic_with_neighbouring_countries_b5.pdf)
- Andorra ⇄ Spain: [125 MW](https://www.ree.es/sites/default/files/publication/2022/05/downloadable/inf_sis_elec_ree_2020_0EN_0.pdf)
- Australia (New South Wales) ⇄ Australia (Queensland) ["QNI": 700MW (NSW -> QLD) 1200MW (QLD -> NSW)](https://en.wikipedia.org/wiki/Queensland_%E2%80%93_New_South_Wales_Interconnector) and ["N-Q-MNSP1": 180MW](https://www.aemo.com.au/-/media/Files/Electricity/NEM/Security_and_Reliability/Congestion-Information/2017/Interconnector-Capabilities.pdf)
- Australia (Victoria) ⇄ Australia (New South Wales) ["VIC1-NSW1": 1600MW (VIC -> NSW) 1350MW (NSW -> VIC)](https://www.aemo.com.au/-/media/Files/Electricity/NEM/Security_and_Reliability/Congestion-Information/2017/Interconnector-Capabilities.pdf) and ["VNI": 170MW](https://www.transgrid.com.au/what-we-do/projects/current-projects/Victoria%20to%20NSW%20Interconnector)
- Australia (Victoria) ⇄ Australia (South Australia) ["Heywood interconnector": 650 MW](https://en.wikipedia.org/wiki/Heywood_interconnector) and ["Murraylink": 220MW](https://en.wikipedia.org/wiki/Murraylink)
- Australia (Victoria) ⇄ Australia (Tasmania): ["Basslink": 500 MW (regular) or 630 MW (temporarily)](https://en.wikipedia.org/wiki/Basslink)
- Belgium ⇄ Germany ["Alegro": 1000MW](https://www.elia.be/en/infrastructure-and-projects/infrastructure-projects/alegro?clang=en)
- [Bosnia and Herzegovina ⇄ Croatia](https://op.europa.eu/en/publication-detail/-/publication/785f224b-93cd-11e9-9369-01aa75ed71a1/language-en?WT.mc_id=Searchresult&WT.ria_c=37085&WT.ria_f=3608&WT.ria_ev=sea)
- Bulgaria ⇄ Greece: [700 MW](https://ibex.bg/markets/dam/cross-zonal-capacities/)
- Bulgaria ⇄ North Macedonia [950 MW](https://ec.europa.eu/energy/sites/ener/files/documents/2nd_report_ic_with_neighbouring_countries_b5.pdf)
- Bulgaria ⇄ Turkey [2485 MW](https://ec.europa.eu/energy/sites/ener/files/documents/2nd_report_ic_with_neighbouring_countries_b5.pdf)
- Canada (Alberta) ⇄ Canada (British Columbia): ["Path 1": 1000 MW (CA-AB -> CA-BC) 800 MW (CA-BC -> CA-AB)](https://www.aeso.ca/assets/Information-Documents/2011-001R-ATC-and-Transfer-Path-Management.pdf)
- Canada (Alberta) ⇄ Canada (Saskatchewan): ["Path 2": 153 MW](https://www.aeso.ca/assets/Information-Documents/2011-001R-ATC-and-Transfer-Path-Management.pdf)
- Canada (Alberta) ⇄ United States of America (NorthWestern Energy): ["Path 83": 315 MW (CA-AB -> US-NW-NWMT) 310 MW (US-NW-NWMT -> CA-AB)](https://www.aeso.ca/assets/Information-Documents/2011-001R-ATC-and-Transfer-Path-Management.pdf)
- [Denmark (West) ⇄ Norway](#for-the-nordic-and-baltic-countries-capacities-are-available-from-nord-pool)
- [Denmark (East) ⇄ Denmark (West)](#for-the-nordic-and-baltic-countries-capacities-are-available-from-nord-pool)
- [Denmark (East) ⇄ Germany](#for-the-nordic-and-baltic-countries-capacities-are-available-from-nord-pool)
- [Denmark (West) ⇄ Sweden](#for-the-nordic-and-baltic-countries-capacities-are-available-from-nord-pool)
- [Denmark (West) ⇄ Netherlands](#for-the-nordic-and-baltic-countries-capacities-are-available-from-nord-pool)
- Estonia ⇄ European Russia And Ural [2464 MW](https://ec.europa.eu/energy/sites/ener/files/documents/2nd_report_ic_with_neighbouring_countries_b5.pdf)
- [Estonia ⇄ Finland](#for-the-nordic-and-baltic-countries-capacities-are-available-from-nord-pool)
- Finland ⇄ Norway: ["Joint operation between the Norwegian and Finnish subsystems, Appendix 3 to SOA Annex OS (FI and NO)": 120 MW (NO4 -> FI) 100 MW (FI -> NO4)](https://www.fingrid.fi/globalassets/dokumentit/fi/kantaverkko/sahkonsiirto/appendix-1-8-to-soa-annex-os.pdf)
- Georgia ⇄ Turkey: ["Black Sea Transmission Network Project (BSTN)": 700 MW](http://www.gse.com.ge/M9Ltvi2EQCCNYg7LvHW0JQ.html 'Two additional connections are planned/under construction, Batumi-Muratli and Akhalstikhe-Tortum, to double capacity to 1400MW; see http://www.gse.com.ge/sw/static/file/TYNDP_GE-2020-2030_ENG.pdf. Another interconnector (Batumi-Khopa) is only used in emergencies, according to http://www.gse.com.ge/about-us/international-affairs')
- [Germany ⇄ Sweden](#for-the-nordic-and-baltic-countries-capacities-are-available-from-nord-pool)
- [Germany ⇄ Norway](#for-the-nordic-and-baltic-countries-capacities-are-available-from-nord-pool)
- Great Britain ⇄ Belgium: ["Nemo Link": 1000 MW](https://en.wikipedia.org/wiki/Nemo_Link)
- Great Britain ⇄ North Ireland: ["Moyle": 500 MW](http://www.wikiwand.com/en/HVDC_Moyle)
- [Great Britain ⇄ Norway](#for-the-nordic-and-baltic-countries-capacities-are-available-from-nord-pool)
- Great Britain ⇄ Ireland: ["East-West Interconnector": 500 MW](https://en.wikipedia.org/wiki/East%E2%80%93West_Interconnector)
- Great Britain ⇄ Ireland: ["Greenlink Interconnector": 500 MW](https://en.wikipedia.org/wiki/Greenlink)
- Great Britain ⇄ France: ["Cross-Channel": 2000 MW](https://en.wikipedia.org/wiki/HVDC_Cross-Channel), ["ElecLink": 1000 MW](https://www.getlinkgroup.com/en/our-group/eleclink/) & ["IFA2": 1000 MW](https://en.wikipedia.org/wiki/IFA-2)
- Great Britain ⇄ Netherlands: ["BritNed": 1000 MW](https://en.wikipedia.org/wiki/BritNed)
- Greece ⇄ Italy: ["GRITA": 500 MW](https://en.wikipedia.org/wiki/HVDC_Italy%E2%80%93Greece)
- Greece ⇄ Turkey: [1900 MW](https://ec.europa.eu/energy/sites/ener/files/documents/2nd_report_ic_with_neighbouring_countries_b5.pdf)
- Italy Central South ⇄ Italy Sardinia: ["SAPEI": 1000 MW](https://en.wikipedia.org/wiki/SAPEI)
- Japan-Chūbu ⇄ Japan-Tōkyō: [3x HVDC interconnectors between 60Hz/50Hz areas: 1200 MW](https://www.jepic.or.jp/pub/pdf/epijJepic2019.pdf)
- Japan-Hokkaidō ⇄ Japan-Tōhoku: ["HVDC Hokkaidō–Honshū": 900 MW](https://ja.wikipedia.org/wiki/%E5%8C%97%E6%B5%B7%E9%81%93%E3%83%BB%E6%9C%AC%E5%B7%9E%E9%96%93%E9%80%A3%E7%B3%BB%E8%A8%AD%E5%82%99)
- [Latvia ⇄ Estonia](#for-the-nordic-and-baltic-countries-capacities-are-available-from-nord-pool)
- [Latvia ⇄ European Russia And Ural](#for-the-nordic-and-baltic-countries-capacities-are-available-from-nord-pool)
- [Latvia ⇄ Lithuania](#for-the-nordic-and-baltic-countries-capacities-are-available-from-nord-pool)
- [Lithuania ⇄ Sweden](#for-the-nordic-and-baltic-countries-capacities-are-available-from-nord-pool)
- [Lithuania ⇄ Poland](#for-the-nordic-and-baltic-countries-capacities-are-available-from-nord-pool)
- [Lithuania ⇄ Russia Kaliningrad](#for-the-nordic-and-baltic-countries-capacities-are-available-from-nord-pool)
- Malta ⇄ Italy Sicily: ["Malta–Sicily-Interconnector": 200 MW](https://en.wikipedia.org/wiki/Malta%E2%80%93Sicily_interconnector)
- Montenegro ⇄ Italy Central South: ["MONITA": 600MW](https://tyndp.entsoe.eu/tyndp2018/projects/projects/28)
- [Norway ⇄ Netherlands](#for-the-nordic-and-baltic-countries-capacities-are-available-from-nord-pool)
- New Zealand (North Island) ⇄ New Zealand (South Island): ["HVDC Inter-Island": 1200 MW](https://en.wikipedia.org/wiki/HVDC_Inter-Island)
- [North Macedonia ⇄ Greece](https://op.europa.eu/en/publication-detail/-/publication/785f224b-93cd-11e9-9369-01aa75ed71a1/language-en?WT.mc_id=Searchresult&WT.ria_c=37085&WT.ria_f=3608&WT.ria_ev=sea)
- [Russia ⇄ Finland](#for-the-nordic-and-baltic-countries-capacities-are-available-from-nord-pool)
- [Serbia ⇄ Bulgaria](https://op.europa.eu/en/publication-detail/-/publication/785f224b-93cd-11e9-9369-01aa75ed71a1/language-en?WT.mc_id=Searchresult&WT.ria_c=37085&WT.ria_f=3608&WT.ria_ev=sea)
- [Slovakia ⇄ Ukraine](https://op.europa.eu/en/publication-detail/-/publication/785f224b-93cd-11e9-9369-01aa75ed71a1/language-en?WT.mc_id=Searchresult&WT.ria_c=37085&WT.ria_f=3608&WT.ria_ev=sea)
- Spain ⇄ France: [According to "The Spanish electricity system 2019" page 65: 2800 MW](https://www.ree.es/sites/default/files/11_PUBLICACIONES/Documentos/InformesSistemaElectrico/2019/ISE_2019_eng.pdf)
- [Spain ⇄ Portugal](https://web.archive.org/web/20230516184334/https://www.erse.pt/media/kevnjc3r/portugal-spain-interconnection-analysis-and-maczt-monitoring-report-english-version-2020.pdf)
- Spain ⇄ Spain (Balearic Islands): ["Cometa": 400 MW](<https://en.wikipedia.org/wiki/Cometa_(HVDC)>)
- Spain (Mallorca) ⇄ Spain (Ibiza): ["Romulo 2": 200 MW](https://web.archive.org/web/20230329093513/https://www.ree.es/sites/default/files/01_ACTIVIDADES/Documentos/Romulo2_en.pdf)
- Spain (Mallorca) ⇄ Spain (Menorca): According to ["REE PLAN 2021-2026"](https://web.archive.org/web/20230629182722/https://www.planificacionelectrica.es/sites/webplani/files/2022-12/REE_PLAN_DESARROLLO_EN.pdf) (Page 466, only one built yet): 100 MW
- Spain (Ibiza) ⇄ Spain (Formentera): According to ["REE PLAN 2021-2026"](https://web.archive.org/web/20230629182722/https://www.planificacionelectrica.es/sites/webplani/files/2022-12/REE_PLAN_DESARROLLO_EN.pdf) (Pages 466, Page 297): 134 MW (11+17+106)
- [Sweden ⇄ Poland](#for-the-nordic-and-baltic-countries-capacities-are-available-from-nord-pool)
- Ukraine ⇄ Belarus, ⇄ Hungary, ⇉ Poland, ⇄ Moldova, ⇄ Slovakia, ⇄ Romania, ⇄ Russia: [Ukrenergo](https://ua.energy/activity/dispatch-information/transborder-flows/)
A ⇄ B: bidirectional operation, with power flow either "from A to B" or "from B to A"
A ⇉ B: unidirectional operation, only with power flow "from A to B"
</details>
### Electricity prices (day-ahead) data sources
- France: [RTE](https://www.rte-france.com/en/eco2mix/market-data)
- Japan: [JEPX](http://www.jepx.jp)
- Nicaragua: [CNDC](http://www.cndc.org.ni/)
- Singapore: [EMC](https://www.emcsg.com)
- Turkey: [EPIAS](https://seffaflik.epias.com.tr/transparency/piyasalar/gop/ptf.xhtml)
- Other: [ENTSO-E](https://transparency.entsoe.eu/transmission-domain/r2/dayAheadPrices/show)
### Real-time weather data sources
We use the [US National Weather Service's Global Forecast System (GFS)](http://nomads.ncep.noaa.gov/)'s GFS 0.25 Degree Hourly data.
Forecasts are made every 6 hours, with a 1 hour time step.
The values extracted are wind speed and direction at 10m altitude, and ground solar irradiance (DSWRF - Downward Short-Wave Radiation Flux), which takes into account cloud coverage.
In order to obtain an estimate of those values at current time, an interpolation is made between two forecasts (the one at the beginning of the hour, and the one at the end of the hour).
### Topology data
We use the [Natural Earth Data Cultural Vectors](http://www.naturalearthdata.com/downloads/10m-cultural-vectors/) country subdivisions (map admin subunits).
================================================
FILE: EMISSION_FACTORS_SOURCES.md
================================================
# Emission factors sources
The emission factors used by Electricity Maps depends on the specific region.
Our default emission factors come from the [IPCC (2014) Fith Assessment Report](https://www.ipcc.ch/site/assets/uploads/2018/02/ipcc_wg3_ar5_annex-iii.pdf#page=7) report, and are fully described in our [wiki](https://github.com/electricitymaps/electricitymaps-contrib/wiki/Default-emission-factors).
For certain areas and zones (all of Europe and US, along with a few other countries), we have more specific emission factors.
The actual numbers used (as well as a link to the source) can be found in the [config/zones YAML file](https://github.com/electricitymaps/electricitymaps-contrib/tree/master/config/zones) for each specific zone.
For Europe, the methodology for calculating emission factors is detailed in our [wiki page for EU emission factors](https://github.com/electricitymaps/electricitymaps-contrib/wiki/EU-emission-factors). The same applies for [US emission factors](https://github.com/electricitymaps/electricitymaps-contrib/wiki/US-emission-factors).
================================================
FILE: Earthfile
================================================
VERSION 0.8
FROM astral/uv:python3.10-bookworm-slim
WORKDIR /contrib
linting-files:
COPY .prettierignore .
SAVE ARTIFACT .
parser-files:
COPY electricitymap/contrib/parsers ./parsers
COPY electricitymap/contrib/capacity_parsers ./capacity_parsers
SAVE ARTIFACT *
src-files:
COPY electricitymap/contrib/config ./electricitymap/contrib/config
COPY electricitymap/contrib/lib ./electricitymap/contrib/lib
COPY electricitymap/contrib/py.typed ./electricitymap/contrib/py.typed
COPY libs/types ./libs/types
COPY ./config+src-files/* ./config
COPY scripts ./scripts
COPY __init__.py ./__init__.py
COPY pyproject.toml .
SAVE ARTIFACT .
src-files-with-parsers:
COPY +src-files/* .
COPY +parser-files/parsers ./electricitymap/contrib/parsers
COPY +parser-files/capacity_parsers ./electricitymap/contrib/capacity_parsers
SAVE ARTIFACT .
api-files:
COPY geo/world.geojson ./geo/world.geojson
COPY config/zone_names.json ./config/zone_names.json
SAVE ARTIFACT .
uv-lock:
COPY uv.lock .
SAVE ARTIFACT .
prepare:
FROM +src-files-with-parsers
RUN apt-get update && apt-get install -y python3-opencv tesseract-ocr tesseract-ocr-jpn tesseract-ocr-eng libgl1
COPY uv.lock .
RUN uv sync --frozen --group dev --extra parsers --compile-bytecode
build:
FROM +prepare
test:
FROM +build
COPY tests ./tests
COPY geo/world.geojson ./geo/world.geojson
RUN uv run check
# includes both test target and build target here to make sure both can work
# we can split into two later if required
test-all:
BUILD +build
BUILD +test
BUILD ./config+test
================================================
FILE: LICENSE.md
================================================
GNU AFFERO GENERAL PUBLIC LICENSE
Version 3, 19 November 2007
Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The GNU Affero General Public License is a free, copyleft license for
software and other kinds of works, specifically designed to ensure
cooperation with the community in the case of network server software.
The licenses for most software and other practical works are designed
to take away your freedom to share and change the works. By contrast,
our General Public Licenses are intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.
Developers that use our General Public Licenses protect your rights
with two steps: (1) assert copyright on the software, and (2) offer
you this License which gives you legal permission to copy, distribute
and/or modify the software.
A secondary benefit of defending all users' freedom is that
improvements made in alternate versions of the program, if they
receive widespread use, become available for other developers to
incorporate. Many developers of free software are heartened and
encouraged by the resulting cooperation. However, in the case of
software used on network servers, this result may fail to come about.
The GNU General Public License permits making a modified version and
letting the public access it on a server without ever releasing its
source code to the public.
The GNU Affero General Public License is designed specifically to
ensure that, in such cases, the modified source code becomes available
to the community. It requires the operator of a network server to
provide the source code of the modified version running there to the
users of that server. Therefore, public use of a modified version, on
a publicly accessible server, gives the public access to the source
code of the modified version.
An older license, called the Affero General Public License and
published by Affero, was designed to accomplish similar goals. This is
a different license, not a version of the Affero GPL, but Affero has
released a new version of the Affero GPL which permits relicensing under
this license.
The precise terms and conditions for copying, distribution and
modification follow.
TERMS AND CONDITIONS
0. Definitions.
"This License" refers to version 3 of the GNU Affero General Public License.
"Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.
"The Program" refers to any copyrightable work licensed under this
License. Each licensee is addressed as "you". "Licensees" and
"recipients" may be individuals or organizations.
To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy. The resulting work is called a "modified version" of the
earlier work or a work "based on" the earlier work.
A "covered work" means either the unmodified Program or a work based
on the Program.
To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy. Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.
To "convey" a work means any kind of propagation that enables other
parties to make or receive copies. Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.
An interactive user interface displays "Appropriate Legal Notices"
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License. If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.
1. Source Code.
The "source code" for a work means the preferred form of the work
for making modifications to it. "Object code" means any non-source
form of a work.
A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.
The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form. A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.
The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities. However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work. For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.
The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.
The Corresponding Source for a work in source code form is that
same work.
2. Basic Permissions.
All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met. This License explicitly affirms your unlimited
permission to run the unmodified Program. The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work. This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.
You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force. You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright. Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.
Conveying under any other circumstances is permitted solely under
the conditions stated below. Sublicensing is not allowed; section 10
makes it unnecessary.
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.
When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.
4. Conveying Verbatim Copies.
You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.
You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.
5. Conveying Modified Source Versions.
You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:
a) The work must carry prominent notices stating that you modified
it, and giving a relevant date.
b) The work must carry prominent notices stating that it is
released under this License and any conditions added under section
7. This requirement modifies the requirement in section 4 to
"keep intact all notices".
c) You must license the entire work, as a whole, under this
License to anyone who comes into possession of a copy. This
License will therefore apply, along with any applicable section 7
additional terms, to the whole of the work, and all its parts,
regardless of how they are packaged. This License gives no
permission to license the work in any other way, but it does not
invalidate such permission if you have separately received it.
d) If the work has interactive user interfaces, each must display
Appropriate Legal Notices; however, if the Program has interactive
interfaces that do not display Appropriate Legal Notices, your
work need not make them do so.
A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit. Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.
6. Conveying Non-Source Forms.
You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:
a) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by the
Corresponding Source fixed on a durable physical medium
customarily used for software interchange.
b) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by a
written offer, valid for at least three years and valid for as
long as you offer spare parts or customer support for that product
model, to give anyone who possesses the object code either (1) a
copy of the Corresponding Source for all the software in the
product that is covered by this License, on a durable physical
medium customarily used for software interchange, for a price no
more than your reasonable cost of physically performing this
conveying of source, or (2) access to copy the
Corresponding Source from a network server at no charge.
c) Convey individual copies of the object code with a copy of the
written offer to provide the Corresponding Source. This
alternative is allowed only occasionally and noncommercially, and
only if you received the object code with such an offer, in accord
with subsection 6b.
d) Convey the object code by offering access from a designated
place (gratis or for a charge), and offer equivalent access to the
Corresponding Source in the same way through the same place at no
further charge. You need not require recipients to copy the
Corresponding Source along with the object code. If the place to
copy the object code is a network server, the Corresponding Source
may be on a different server (operated by you or a third party)
that supports equivalent copying facilities, provided you maintain
clear directions next to the object code saying where to find the
Corresponding Source. Regardless of what server hosts the
Corresponding Source, you remain obligated to ensure that it is
available for as long as needed to satisfy these requirements.
e) Convey the object code using peer-to-peer transmission, provided
you inform other peers where the object code and Corresponding
Source of the work are being offered to the general public at no
charge under subsection 6d.
A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.
A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling. In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage. For a particular
product received by a particular user, "normally used" refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product. A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.
"Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source. The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.
If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information. But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).
The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed. Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.
Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.
7. Additional Terms.
"Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law. If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.
When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it. (Additional permissions may be written to require their own
removal in certain cases when you modify the work.) You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.
Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:
a) Disclaiming warranty or limiting liability differently from the
terms of sections 15 and 16 of this License; or
b) Requiring preservation of specified reasonable legal notices or
author attributions in that material or in the Appropriate Legal
Notices displayed by works containing it; or
c) Prohibiting misrepresentation of the origin of that material, or
requiring that modified versions of such material be marked in
reasonable ways as different from the original version; or
d) Limiting the use for publicity purposes of names of licensors or
authors of the material; or
e) Declining to grant rights under trademark law for use of some
trade names, trademarks, or service marks; or
f) Requiring indemnification of licensors and authors of that
material by anyone who conveys the material (or modified versions of
it) with contractual assumptions of liability to the recipient, for
any liability that these contractual assumptions directly impose on
those licensors and authors.
All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10. If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term. If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.
If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.
Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions;
the above requirements apply either way.
8. Termination.
You may not propagate or modify a covered work except as expressly
provided under this License. Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).
However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.
Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.
Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License. If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.
9. Acceptance Not Required for Having Copies.
You are not required to accept this License in order to receive or
run a copy of the Program. Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance. However,
nothing other than this License grants you permission to propagate or
modify any covered work. These actions infringe copyright if you do
not accept this License. Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.
10. Automatic Licensing of Downstream Recipients.
Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License. You are not responsible
for enforcing compliance by third parties with this License.
An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations. If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.
You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License. For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.
11. Patents.
A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based. The
work thus licensed is called the contributor's "contributor version".
A contributor's "essential patent claims" are all patent claims
owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version. For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.
Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.
In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement). To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.
If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients. "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.
If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.
A patent license is "discriminatory" if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License. You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.
Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.
12. No Surrender of Others' Freedom.
If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all. For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.
13. Remote Network Interaction; Use with the GNU General Public License.
Notwithstanding any other provision of this License, if you modify the
Program, your modified version must prominently offer all users
interacting with it remotely through a computer network (if your version
supports such interaction) an opportunity to receive the Corresponding
Source of your version by providing access to the Corresponding Source
from a network server at no charge, through some standard or customary
means of facilitating copying of software. This Corresponding Source
shall include the Corresponding Source for any work covered by version 3
of the GNU General Public License that is incorporated pursuant to the
following paragraph.
Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU General Public License into a single
combined work, and to convey the resulting work. The terms of this
License will continue to apply to the part which is the covered work,
but the work with which it is combined will remain governed by version
3 of the GNU General Public License.
14. Revised Versions of this License.
The Free Software Foundation may publish revised and/or new versions of
the GNU Affero 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
Program specifies that a certain numbered version of the GNU Affero General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation. If the Program does not specify a version number of the
GNU Affero General Public License, you may choose any version ever published
by the Free Software Foundation.
If the Program specifies that a proxy can decide which future
versions of the GNU Affero General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.
Later license versions may give you additional or different
permissions. However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.
15. Disclaimer of Warranty.
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
16. Limitation of Liability.
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.
17. Interpretation of Sections 15 and 16.
If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published
by the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
Also add information on how to contact you by electronic and paper mail.
If your software can interact with users remotely through a computer
network, you should also make sure that it provides a way for users to
get its source. For example, if your program is a web application, its
interface could display a "Source" link that leads users to an archive
of the code. There are many ways you could offer source, and different
solutions will be better for different programs; see section 13 for the
specific requirements.
You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU AGPL, see
<https://www.gnu.org/licenses/>.
================================================
FILE: LICENSE_MIT.txt
================================================
MIT License
Copyright (c) Jan 2020 - Jan 2023 Tomorrow
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
================================================
FILE: README.md
================================================
<p align="center">
<a href="https://app.electricitymaps.com">
<picture>
<source
srcset="https://raw.githubusercontent.com/electricitymaps/electricitymaps-contrib/master/.github/images/electricity-maps-logo-dark.svg"
media="(prefers-color-scheme: dark)"/>
<img
alt="Electricity Maps"
src="https://raw.githubusercontent.com/electricitymaps/electricitymaps-contrib/master/.github/images/electricity-maps-logo.svg"
width="100"/>
</picture>
</a>
</p>
<h1 align="center">
Electricity Maps
</h1>
<p align="center">
A collection of parsers to collect and standardize electricity data such as production, exchanges and price from across the globe.<br>
<strong><a href="https://app.electricitymaps.com">app.electricitymaps.com »</a></strong>
</p>
<p align="center">
<img alt="GitHub last commit" src="https://img.shields.io/github/last-commit/electricitymaps/electricitymaps-contrib"/>
<a href="https://github.com/electricitymaps/electricitymaps-contrib/blob/master/LICENSE.md">
<img src="https://img.shields.io/github/license/electricitymaps/electricitymaps-contrib" alt="Electricity Maps is released under the GNU-AGPLv3 license." /></a>
</p>


## Introduction
This project aims to provide a free, open-source, and transparent way to collect electricity data.
We fetch the raw data from public, free, and official sources. They include official government and transmission system operators' data. This data powers the [Electricity Maps platform](https://electricitymaps.com), which includes [our flow-tracing algorithm](https://www.electricitymaps.com/blog/flow-tracing), estimation models, forecast engine and much more.
_View it online [app.electricitymaps.com](https://app.electricitymaps.com), or download the app on [Google Play](https://play.google.com/store/apps/details?id=com.tmrow.electricitymap&utm_source=github) or the [App store](https://itunes.apple.com/us/app/electricity-map/id1224594248&utm_source=github)._
## Contributing
Electricity Maps collection of parsers is a community project and we welcome contributions from anyone!
We are always looking for help to build parsers for new countries, fix broken parsers, improve accuracy of data sources, discuss new potential data sources, update region capacities, and much more.
Read our [contribution guidelines](/CONTRIBUTING.md) to get started.
## Community & Support
Use these channels to be part of the community, ask for help while using Electricity Maps, or just learn more about what's going on:
- [GitHub Issues](https://github.com/electricitymaps/electricitymaps-contrib/issues): Raise any issues you encounter with the data or bugs you find while using the app.
- [GitHub Discussions](https://github.com/electricitymaps/electricitymaps-contrib/discussions): Join discussions and share new ideas for features.
- [GitHub Wiki](https://github.com/electricitymaps/electricitymaps-contrib/wiki): Guides on setting up the development environment, etc.
- [Our Commercial Website](https://electricitymaps.com/): Learn more about how you or your company can use the data too.
- [Twitter](https://twitter.com/electricitymaps): Follow for latest news
- [LinkedIn](https://www.linkedin.com/company/electricitymaps): Follow for latest news
## License
This repository is licensed under GNU-AGPLv3 since v1.5.0, find our license [here](https://github.com/electricitymaps/electricitymaps-contrib/blob/master/LICENSE.md). Contributions prior to commit [cb9664f](https://github.com/electricitymaps/electricitymaps-contrib/commit/cb9664f43f0597bedf13e832047c3fc10e67ba4e) were licensed under [MIT license](https://github.com/electricitymaps/electricitymaps-contrib/blob/master/LICENSE_MIT.txt)
## Frequently asked questions
**Where does the data come from?**
The data comes from many different sources. But we strive to only use official sources from goverments, TSOs, producers and online OpenData platforms when avaiable.
**Why do you calculate the carbon intensity of _consumption_?**
In short, citizens should not be responsible for the emissions associated with all the products they export, but only for what they consume.
Consumption-based accounting (CBA) is a very important aspect of climate policy and allows assigning responsibility to consumers instead of producers.
Furthermore, this method is robust to governments relocating dirty production to neighboring countries in order to green their image while still importing from it.
You can read more in our blog post [here](https://electricitymaps.com/blog/flow-tracing/).
**Why don't you show emissions per capita?**
A country that has few inhabitants but a lot of factories will appear high on CO<sub>2</sub>/capita.
This means you can "trick" the numbers by moving your factory abroad and import the produced _good_ instead of the electricity itself.
That country now has a low CO<sub>2</sub>/capita number because we only count CO<sub>2</sub> for electricity (not for imported/exported goods).
The CO<sub>2</sub>/capita metric, by involving the size of the population, and by not integrating all CO<sub>2</sub> emission sources, is thus an incomplete metric.
CO<sub>2</sub> intensity on the other hand only describes where is the best place to put that factory (and when it is best to use electricity), enabling proper decisions.
**CO<sub>2</sub> emission factors look high — what do they cover exactly?**
The carbon intensity of each type of power plant takes into account emissions arising from the whole life cycle of the plant (construction, fuel production, operational emissions and decommissioning). Read more on the [Emissions Factor methodology section](https://www.electricitymaps.com/data/methodology#vi-precision-in-emissions-factors).
**How can I get access to the API?**
All this and more can be found **[here](https://electricitymaps.com/)**.
You can also visit our **[data portal](https://www.electricitymaps.com/data-portal)** to download historical datasets.
**Is the map frontend open source?**
In the past, the map frontend was open source, but we have since rewritten the app completely and moved it to our own platform in order to expand the available features and provide a consistent user experience across our product offerings.
================================================
FILE: __init__.py
================================================
================================================
FILE: capacity_update.py
================================================
"""
Usage: uv run update_capacity --zone FR --target_datetime "2022-01-01"
"""
import logging
from datetime import datetime
import click
from requests import Session
from electricitymap.contrib.types import ZoneKey
from scripts.update_capacity_configuration import update_source, update_zone
from scripts.utils import ROOT_PATH, run_shell_command
logger = logging.getLogger(__name__)
@click.command()
@click.option("--zone", default=None)
@click.option("--source", default=None)
@click.option("--target_datetime")
@click.option("--update_aggregate", default=False)
def capacity_update(
zone: ZoneKey,
source: str,
target_datetime: str,
update_aggregate: bool = False,
):
"""Parameters
----------
zone: a two letter zone from the map or a zone group (EIA, ENTSOE, EMBER, IRENA)
target_datetime: ISO 8601 string, such as 2018-05-30 15:00
\n
Examples
-------
>>> uv run capacity_update --zone FR --target_datetime "2022-01-01"
>>> uv run capacity_update --source ENTSOE --target_datetime "2022-01-01"
"""
logging.basicConfig(
level=logging.DEBUG,
format="%(asctime)s %(levelname)-8s %(name)-30s %(message)s",
)
assert zone is not None or source is not None, "Either zone or source must be set"
assert not (zone is None and source is None), "Zone and source cannot be both set"
session = Session()
parsed_target_datetime = None
if target_datetime is None:
raise ValueError("target_datetime must be specified")
parsed_target_datetime = datetime.fromisoformat(target_datetime)
if source is not None:
update_source(source, parsed_target_datetime, session)
else:
update_zone(zone, parsed_target_datetime, session, update_aggregate)
print("Running prettier...")
run_shell_command("pnpx prettier@2 --write config/zones --cache", cwd=ROOT_PATH)
================================================
FILE: config/Earthfile
================================================
VERSION 0.8
FROM alpine:latest
WORKDIR /contrib/config
src-files:
COPY . .
SAVE ARTIFACT .
data-centers-files:
COPY data_centers/data_centers.json ./data_centers/data_centers.json
SAVE ARTIFACT .
test:
RUN echo "tests should live here"
================================================
FILE: config/__init__.py
================================================
================================================
FILE: config/data_centers/data_centers.json
================================================
{
"gcp-us-central1": {
"provider": "gcp",
"lonlat": [-95.8028031, 41.1755951],
"displayName": "Southlands Campus",
"region": "us-central1",
"zoneKey": "US-CENT-SWPP",
"status": "operational",
"source": "https://cloud.google.com/compute/docs/regions-zones",
"operationalSince": null
},
"gcp-us-east1": {
"provider": "gcp",
"lonlat": [-80.088472, 33.105486],
"displayName": "Berkeley County",
"region": "us-east1",
"zoneKey": "US-CAR-SCEG",
"status": "operational",
"source": "https://cloud.google.com/compute/docs/regions-zones",
"operationalSince": null
},
"gcp-us-west1": {
"provider": "gcp",
"lonlat": [-121.2009427, 45.6317898],
"displayName": "The Dalles",
"region": "us-west1",
"zoneKey": "US-NW-PACW",
"status": "operational",
"source": "https://cloud.google.com/compute/docs/regions-zones",
"operationalSince": null
},
"gcp-northamerica-northeast2": {
"provider": "gcp",
"lonlat": [-79.3832, 43.6532],
"displayName": "Toronto",
"region": "northamerica-northeast2",
"zoneKey": "CA-ON",
"status": "operational",
"source": "https://cloud.google.com/compute/docs/regions-zones",
"operationalSince": null
},
"gcp-us-east4": {
"provider": "gcp",
"lonlat": [-77.4875, 39.0438],
"displayName": "Ashburn, Northern Virginia",
"region": "us-east4",
"zoneKey": "US-MIDA-PJM",
"status": "operational",
"source": "https://cloud.google.com/compute/docs/regions-zones",
"operationalSince": null
},
"gcp-europe-west1": {
"provider": "gcp",
"lonlat": [3.8580813, 50.4663049],
"displayName": "St Ghislain",
"region": "europe-west1",
"zoneKey": "BE",
"status": "operational",
"source": "https://cloud.google.com/compute/docs/regions-zones",
"operationalSince": null
},
"gcp-us-west2": {
"provider": "gcp",
"lonlat": [-118.2437, 34.0522],
"displayName": "Los Angeles",
"region": "us-west2",
"zoneKey": "US-CAL-CISO",
"status": "operational",
"source": "https://cloud.google.com/compute/docs/regions-zones",
"operationalSince": null
},
"gcp-europe-west4": {
"provider": "gcp",
"lonlat": [5.0421531, 52.7954802],
"displayName": "Middenmeer",
"region": "europe-west4",
"zoneKey": "NL",
"status": "operational",
"source": "https://cloud.google.com/compute/docs/regions-zones",
"operationalSince": null
},
"gcp-southamerica-west1": {
"provider": "gcp",
"lonlat": [-70.6973317, -33.3584722],
"displayName": "Quilicura",
"region": "southamerica-west1",
"zoneKey": "CL-SEN",
"status": "operational",
"source": "https://cloud.google.com/compute/docs/regions-zones",
"operationalSince": null
},
"gcp-asia-northeast1": {
"provider": "gcp",
"lonlat": [140.1144645, 35.6420573],
"displayName": "Inzai",
"region": "asia-northeast1",
"zoneKey": "JP-TK",
"status": "operational",
"source": "https://cloud.google.com/compute/docs/regions-zones",
"operationalSince": null
},
"gcp-europe-north1": {
"provider": "gcp",
"lonlat": [27.125318, 60.53985],
"displayName": "Hamina Finland Data Center",
"region": "europe-north1",
"zoneKey": "FI",
"status": "operational",
"source": "https://cloud.google.com/compute/docs/regions-zones",
"operationalSince": null
},
"gcp-asia-southeast1": {
"provider": "gcp",
"lonlat": [103.7095924, 1.3512738],
"displayName": "Jurong West Campus",
"region": "asia-southeast1",
"zoneKey": "SG",
"status": "operational",
"source": "https://cloud.google.com/compute/docs/regions-zones",
"operationalSince": null
},
"gcp-asia-east1": {
"provider": "gcp",
"lonlat": [120.4268396, 24.1404245],
"displayName": "Changhua Taiwan Data Center",
"region": "asia-east1",
"zoneKey": "TW",
"status": "operational",
"source": "https://cloud.google.com/compute/docs/regions-zones",
"operationalSince": null
},
"gcp-europe-west3": {
"provider": "gcp",
"lonlat": [8.9713297, 50.1239022],
"displayName": "Hanau Data Center",
"region": "europe-west3",
"zoneKey": "DE",
"status": "operational",
"source": "https://cloud.google.com/compute/docs/regions-zones",
"operationalSince": null
},
"azure-westus3": {
"provider": "azure",
"lonlat": [-111.763275, 34.395342],
"displayName": "West US 3",
"region": "westus3",
"zoneKey": "US-SW-AZPS",
"status": "operational",
"source": "https://datacenters.microsoft.com",
"operationalSince": "2021"
},
"azure-westus2": {
"provider": "azure",
"lonlat": [-120.212613, 47.2868352],
"displayName": "West US 2",
"region": "westus2",
"zoneKey": "US-NW-BPAT",
"status": "operational",
"source": "https://datacenters.microsoft.com",
"operationalSince": "2007"
},
"azure-westus": {
"provider": "azure",
"lonlat": [-121.8906, 37.3382],
"displayName": "West US",
"region": "westus",
"zoneKey": "US-CAL-CISO",
"status": "operational",
"source": "https://datacenters.microsoft.com",
"operationalSince": "2012"
},
"azure-westcentralus": {
"provider": "azure",
"lonlat": [-107.568534, 43.1700264],
"displayName": "West Central US",
"region": "westcentralus",
"zoneKey": "US-NW-PACE",
"status": "operational",
"source": "https://datacenters.microsoft.com",
"operationalSince": "2016"
},
"azure-southcentralus": {
"provider": "azure",
"lonlat": [-96.87744141, 29.55434513],
"displayName": "South Central US",
"region": "southcentralus",
"zoneKey": "US-TEX-ERCO",
"status": "operational",
"source": "https://datacenters.microsoft.com",
"operationalSince": "2008"
},
"azure-northcentralus": {
"provider": "azure",
"lonlat": [-87.6298, 41.8781],
"displayName": "North Central US",
"region": "northcentralus",
"zoneKey": "US-MIDA-PJM",
"status": "operational",
"source": "https://datacenters.microsoft.com",
"operationalSince": "2009"
},
"azure-eastus2": {
"provider": "azure",
"lonlat": [-81.12304688, 36.66841892],
"displayName": "East US 2",
"region": "eastus2",
"zoneKey": "US-MIDA-PJM",
"status": "operational",
"source": "https://datacenters.microsoft.com",
"operationalSince": "2012"
},
"azure-eastus": {
"provider": "azure",
"lonlat": [-78.13476563, 38.75408328],
"displayName": "East US",
"region": "eastus",
"zoneKey": "US-MIDA-PJM",
"status": "operational",
"source": "https://datacenters.microsoft.com",
"operationalSince": "2014"
},
"azure-centralus": {
"provider": "azure",
"lonlat": [-94.55932617, 41.4509614],
"displayName": "Central US",
"region": "centralus",
"zoneKey": "US-MIDW-MISO",
"status": "operational",
"source": "https://datacenters.microsoft.com",
"operationalSince": "2014"
},
"azure-ukwest": {
"provider": "azure",
"lonlat": [-3.1791934, 51.4816546],
"displayName": "UK West",
"region": "ukwest",
"zoneKey": "GB",
"status": "operational",
"source": "https://datacenters.microsoft.com",
"operationalSince": "2016"
},
"azure-uksouth": {
"provider": "azure",
"lonlat": [-0.1276474, 51.5073219],
"displayName": "UK South",
"region": "uksouth",
"zoneKey": "GB",
"status": "operational",
"source": "https://datacenters.microsoft.com",
"operationalSince": "2016"
},
"azure-uaenorth": {
"provider": "azure",
"lonlat": [55.2707065, 25.2047397],
"displayName": "UAE North",
"region": "uaenorth",
"zoneKey": "AE",
"status": "operational",
"source": "https://datacenters.microsoft.com",
"operationalSince": "2019"
},
"azure-switzerlandnorth": {
"provider": "azure",
"lonlat": [8.8410422, 47.2744489],
"displayName": "Switzerland North",
"region": "switzerlandnorth",
"zoneKey": "CH",
"status": "operational",
"source": "https://datacenters.microsoft.com",
"operationalSince": "2019"
},
"azure-swedencentral": {
"provider": "azure",
"lonlat": [17.138836, 60.667761],
"displayName": "Sweden Central",
"region": "swedencentral",
"zoneKey": "SE-SE3",
"status": "operational",
"source": "https://datacenters.microsoft.com",
"operationalSince": "2021"
},
"azure-spaincentral": {
"provider": "azure",
"lonlat": [-3.7035825, 40.4167047],
"displayName": "Spain Central",
"region": "spaincentral",
"zoneKey": "ES",
"status": "operational",
"source": "https://datacenters.microsoft.com",
"operationalSince": "2024"
},
"azure-qatarcentral": {
"provider": "azure",
"lonlat": [51.5264162, 26.2856329],
"displayName": "Qatar Central",
"region": "qatarcentral",
"zoneKey": "QA",
"status": "operational",
"source": "https://datacenters.microsoft.com",
"operationalSince": "2022"
},
"azure-polandcentral": {
"provider": "azure",
"lonlat": [21.8067249, 52.2319581],
"displayName": "Poland Central",
"region": "polandcentral",
"zoneKey": "PL",
"status": "operational",
"source": "https://datacenters.microsoft.com",
"operationalSince": "2023"
},
"azure-norwayeast": {
"provider": "azure",
"lonlat": [10.7389701, 59.9133301],
"displayName": "Norway East",
"region": "norwayeast",
"zoneKey": "NO-NO1",
"status": "operational",
"source": "https://datacenters.microsoft.com",
"operationalSince": "2019"
},
"azure-newzealandnorth": {
"provider": "azure",
"lonlat": [174.7631803, -36.852095],
"displayName": "New Zealand North",
"region": "newzealandnorth",
"zoneKey": "NZ",
"status": "operational",
"source": "https://datacenters.microsoft.com",
"operationalSince": "2024"
},
"azure-mexicocentral": {
"provider": "azure",
"lonlat": [-99.84756, 20.8542575],
"displayName": "Mexico Central",
"region": "mexicocentral",
"zoneKey": "MX",
"status": "operational",
"source": "https://datacenters.microsoft.com",
"operationalSince": "2024"
},
"azure-koreacentral": {
"provider": "azure",
"lonlat": [126.9782914, 37.5666791],
"displayName": "Korea Central",
"region": "koreacentral",
"zoneKey": "KR",
"status": "operational",
"source": "https://datacenters.microsoft.com",
"operationalSince": "2017"
},
"azure-japanwest": {
"provider": "azure",
"lonlat": [135.490357, 34.6198813],
"displayName": "Japan West",
"region": "japanwest",
"zoneKey": "JP-KN",
"status": "operational",
"source": "https://datacenters.microsoft.com",
"operationalSince": "2014"
},
"azure-japaneast": {
"provider": "azure",
"lonlat": [139.7594549, 35.6828387],
"displayName": "Japan East",
"region": "japaneast",
"zoneKey": "JP-TK",
"status": "operational",
"source": "https://datacenters.microsoft.com",
"operationalSince": "2014"
},
"azure-italynorth": {
"provider": "azure",
"lonlat": [9.6905, 45.2668],
"displayName": "Italy North",
"region": "italynorth",
"zoneKey": "IT-NO",
"status": "operational",
"source": "https://datacenters.microsoft.com",
"operationalSince": "2023"
},
"azure-israelcentral": {
"provider": "azure",
"lonlat": [34.7818, 32.0853],
"displayName": "Israel Central",
"region": "israelcentral",
"zoneKey": "IL",
"status": "operational",
"source": "https://datacenters.microsoft.com",
"operationalSince": "2023"
},
"azure-indonesiacentral": {
"provider": "azure",
"lonlat": [106.827183, -6.1753942],
"displayName": "Indonesia Central",
"region": "indonesiacentral",
"zoneKey": "ID",
"status": "operational",
"source": "https://datacenters.microsoft.com",
"operationalSince": "2025"
},
"azure-southindia": {
"provider": "azure",
"lonlat": [80.270186, 13.0836939],
"displayName": "South India",
"region": "southindia",
"zoneKey": "IN-SO",
"status": "operational",
"source": "https://datacenters.microsoft.com",
"operationalSince": "2015"
},
"azure-centralindia": {
"provider": "azure",
"lonlat": [75.0544541, 18.521428],
"displayName": "Central India",
"region": "centralindia",
"zoneKey": "IN-WE",
"status": "operational",
"source": "https://datacenters.microsoft.com",
"operationalSince": "2015"
},
"azure-germanywestcentral": {
"provider": "azure",
"lonlat": [8.6820917, 50.2106444],
"displayName": "Germany West Central",
"region": "germanywestcentral",
"zoneKey": "DE",
"status": "operational",
"source": "https://datacenters.microsoft.com",
"operationalSince": "2019"
},
"azure-francecentral": {
"provider": "azure",
"lonlat": [2.3514616, 48.8566969],
"displayName": "France Central",
"region": "francecentral",
"zoneKey": "FR",
"status": "operational",
"source": "https://datacenters.microsoft.com",
"operationalSince": "2018"
},
"azure-westeurope": {
"provider": "azure",
"lonlat": [5.0369813, 52.7570829],
"displayName": "West Europe",
"region": "westeurope",
"zoneKey": "NL",
"status": "operational",
"source": "https://datacenters.microsoft.com",
"operationalSince": "2010"
},
"azure-northeurope": {
"provider": "azure",
"lonlat": [-6.2603, 53.3498],
"displayName": "North Europe",
"region": "northeurope",
"zoneKey": "IE",
"status": "operational",
"source": "https://datacenters.microsoft.com",
"operationalSince": "2009"
},
"azure-chinanorth3": {
"provider": "azure",
"lonlat": [116.277987, 42.710633],
"displayName": "China North 3",
"region": "chinanorth3",
"zoneKey": "CN",
"status": "operational",
"source": "https://datacenters.microsoft.com",
"operationalSince": "2022"
},
"azure-chinanorth2": {
"provider": "azure",
"lonlat": [118.3976563, 39.63107677],
"displayName": "China North 2",
"region": "chinanorth2",
"zoneKey": "CN",
"status": "operational",
"source": "https://datacenters.microsoft.com",
"operationalSince": "2018"
},
"azure-chinanorth": {
"provider": "azure",
"lonlat": [116.0912391, 40.5065084],
"displayName": "China North",
"region": "chinanorth",
"zoneKey": "CN",
"status": "operational",
"source": "https://datacenters.microsoft.com",
"operationalSince": "2014"
},
"azure-chinaeast2": {
"provider": "azure",
"lonlat": [119.9265137, 30.57015912],
"displayName": "China East 2",
"region": "chinaeast2",
"zoneKey": "CN",
"status": "operational",
"source": "https://datacenters.microsoft.com",
"operationalSince": "2018"
},
"azure-chinaeast": {
"provider": "azure",
"lonlat": [121.9692071, 31.2322758],
"displayName": "China East",
"region": "chinaeast",
"zoneKey": "CN",
"status": "operational",
"source": "https://datacenters.microsoft.com",
"operationalSince": "2014"
},
"azure-canadaeast": {
"provider": "azure",
"lonlat": [-71.2352226, 46.8259601],
"displayName": "Canada East",
"region": "canadaeast",
"zoneKey": "CA-QC",
"status": "operational",
"source": "https://datacenters.microsoft.com",
"operationalSince": "2016"
},
"azure-canadacentral": {
"provider": "azure",
"lonlat": [-79.3839347, 43.6534817],
"displayName": "Canada Central",
"region": "canadacentral",
"zoneKey": "CA-ON",
"status": "operational",
"source": "https://datacenters.microsoft.com",
"operationalSince": "2016"
},
"azure-brazilsouth": {
"provider": "azure",
"lonlat": [-46.66992188, -23.74512587],
"displayName": "Brazil South",
"region": "brazilsouth",
"zoneKey": "BR-CS",
"status": "operational",
"source": "https://datacenters.microsoft.com",
"operationalSince": "2014"
},
"azure-australiacentral": {
"provider": "azure",
"lonlat": [149.1012676, -35.2975906],
"displayName": "Australia Central",
"region": "australiacentral",
"zoneKey": "AU-NSW",
"status": "operational",
"source": "https://datacenters.microsoft.com",
"operationalSince": "2018"
},
"azure-australiasoutheast": {
"provider": "azure",
"lonlat": [144.9631608, -37.8142176],
"displayName": "Australia Southeast",
"region": "australiasoutheast",
"zoneKey": "AU-VIC",
"status": "operational",
"source": "https://datacenters.microsoft.com",
"operationalSince": "2014"
},
"azure-australiaeast": {
"provider": "azure",
"lonlat": [151.2093, -33.8688],
"displayName": "Australia East",
"region": "australiaeast",
"zoneKey": "AU-NSW",
"status": "operational",
"source": "https://datacenters.microsoft.com",
"operationalSince": "2014"
},
"azure-southeastasia": {
"provider": "azure",
"lonlat": [103.8, 1.35],
"displayName": "Southeast Asia",
"region": "southeastasia",
"zoneKey": "SG",
"status": "operational",
"source": "https://datacenters.microsoft.com",
"operationalSince": "2010"
},
"azure-eastasia": {
"provider": "azure",
"lonlat": [114.109497, 22.396427],
"displayName": "East Asia",
"region": "eastasia",
"zoneKey": "HK",
"status": "operational",
"source": "https://datacenters.microsoft.com",
"operationalSince": "2010"
},
"azure-southafricanorth": {
"provider": "azure",
"lonlat": [28.047304, -26.204103],
"displayName": "South Africa North",
"region": "southafricanorth",
"zoneKey": "ZA",
"status": "operational",
"source": "https://datacenters.microsoft.com",
"operationalSince": "2019"
},
"aws-us-east-1": {
"provider": "aws",
"lonlat": [-77.4291, 39.0067],
"displayName": "N. Virginia",
"region": "us-east-1",
"zoneKey": "US-MIDA-PJM",
"status": "operational",
"source": "https://docs.aws.amazon.com/global-infrastructure/latest/regions/aws-regions.html",
"operationalSince": "2006"
},
"aws-us-east-2": {
"provider": "aws",
"lonlat": [-83.1406, 40.1025],
"displayName": "Ohio",
"region": "us-east-2",
"zoneKey": "US-MIDA-PJM",
"status": "operational",
"source": "https://docs.aws.amazon.com/global-infrastructure/latest/regions/aws-regions.html",
"operationalSince": "2016"
},
"aws-us-west-1": {
"provider": "aws",
"lonlat": [-121.9552, 37.3541],
"displayName": "N. California",
"region": "us-west-1",
"zoneKey": "US-CAL-CISO",
"status": "operational",
"source": "https://docs.aws.amazon.com/global-infrastructure/latest/regions/aws-regions.html",
"operationalSince": "2009"
},
"aws-us-west-2": {
"provider": "aws",
"lonlat": [-119.7006, 45.8399],
"displayName": "Oregon",
"region": "us-west-2",
"zoneKey": "US-NW-PACW",
"status": "operational",
"source": "https://docs.aws.amazon.com/global-infrastructure/latest/regions/aws-regions.html",
"operationalSince": "2011"
},
"aws-af-south-1": {
"provider": "aws",
"lonlat": [18.4231, -33.9221],
"displayName": "Cape Town",
"region": "af-south-1",
"zoneKey": "ZA",
"status": "operational",
"source": "https://docs.aws.amazon.com/global-infrastructure/latest/regions/aws-regions.html",
"operationalSince": "2020"
},
"aws-ap-east-1": {
"provider": "aws",
"lonlat": [114.1694, 22.3193],
"displayName": "Hong Kong",
"region": "ap-east-1",
"zoneKey": "HK",
"status": "operational",
"source": "https://docs.aws.amazon.com/global-infrastructure/latest/regions/aws-regions.html",
"operationalSince": "2019"
},
"aws-ap-south-2": {
"provider": "aws",
"lonlat": [78.476, 17.366],
"displayName": "Hyderabad",
"region": "ap-south-2",
"zoneKey": "IN-SO",
"status": "operational",
"source": "https://docs.aws.amazon.com/global-infrastructure/latest/regions/aws-regions.html",
"operationalSince": "2022"
},
"aws-ap-southeast-3": {
"provider": "aws",
"lonlat": [106.8229, -6.1944],
"displayName": "Jakarta",
"region": "ap-southeast-3",
"zoneKey": "ID",
"status": "operational",
"source": "https://docs.aws.amazon.com/global-infrastructure/latest/regions/aws-regions.html",
"operationalSince": "2021"
},
"hlrs-de-stuttgart": {
"provider": "hlrs",
"displayName": "HLRS Stuttgart",
"zoneKey": "DE",
"lonlat": [9.0970622, 48.739457],
"region": "de-stuttgart",
"source": "https://www.hlrs.de/",
"operationalSince": null,
"status": "operational"
},
"itenos-de-stuttgart-vaihingen": {
"provider": "itenos",
"displayName": "Itenos data center Stuttgart-Vaihingen-1",
"zoneKey": "DE",
"lonlat": [9.1285794, 48.7214015],
"region": "de-stuttgart-vaihingen",
"source": "https://itenos.de/en/data-center/data-center-germany/data-center-stuttgart-1/",
"operationalSince": null,
"status": "operational"
},
"aws-ap-southeast-5": {
"provider": "aws",
"lonlat": [101.6841, 3.1319],
"displayName": "Malaysia",
"region": "ap-southeast-5",
"zoneKey": "MY-WM",
"status": "operational",
"source": "https://docs.aws.amazon.com/global-infrastructure/latest/regions/aws-regions.html",
"operationalSince": "2024"
},
"aws-ap-southeast-4": {
"provider": "aws",
"lonlat": [144.9631, -37.8136],
"displayName": "Melbourne",
"region": "ap-southeast-4",
"zoneKey": "AU-VIC",
"status": "operational",
"source": "https://docs.aws.amazon.com/global-infrastructure/latest/regions/aws-regions.html",
"operationalSince": "2023"
},
"aws-ap-south-1": {
"provider": "aws",
"lonlat": [72.8777, 19.076],
"displayName": "Mumbai",
"region": "ap-south-1",
"zoneKey": "IN-WE",
"status": "operational",
"source": "https://docs.aws.amazon.com/global-infrastructure/latest/regions/aws-regions.html",
"operationalSince": "2016"
},
"aws-ap-northeast-3": {
"provider": "aws",
"lonlat": [135.5023, 34.6937],
"displayName": "Osaka",
"region": "ap-northeast-3",
"zoneKey": "JP-KN",
"status": "operational",
"source": "https://docs.aws.amazon.com/global-infrastructure/latest/regions/aws-regions.html",
"operationalSince": "2018"
},
"aws-ap-northeast-2": {
"provider": "aws",
"lonlat": [126.9971, 37.5503],
"displayName": "Seoul",
"region": "ap-northeast-2",
"zoneKey": "KR",
"status": "operational",
"source": "https://docs.aws.amazon.com/global-infrastructure/latest/regions/aws-regions.html",
"operationalSince": "2016"
},
"aws-ap-southeast-2": {
"provider": "aws",
"lonlat": [151.2093, -33.8688],
"displayName": "Sydney",
"region": "ap-southeast-2",
"zoneKey": "AU-NSW",
"status": "operational",
"source": "https://docs.aws.amazon.com/global-infrastructure/latest/regions/aws-regions.html",
"operationalSince": "2012"
},
"aws-ap-southeast-7": {
"provider": "aws",
"lonlat": [100.5018, 13.7563],
"displayName": "Thailand",
"region": "ap-southeast-7",
"zoneKey": "TH",
"status": "operational",
"source": "https://docs.aws.amazon.com/global-infrastructure/latest/regions/aws-regions.html",
"operationalSince": "2025"
},
"aws-ap-northeast-1": {
"provider": "aws",
"lonlat": [139.65, 35.6764],
"displayName": "Tokyo",
"region": "ap-northeast-1",
"zoneKey": "JP-TK",
"status": "operational",
"source": "https://docs.aws.amazon.com/global-infrastructure/latest/regions/aws-regions.html",
"operationalSince": "2011"
},
"aws-ca-central-1": {
"provider": "aws",
"lonlat": [-73.5674, 45.5019],
"displayName": "Central",
"region": "ca-central-1",
"zoneKey": "CA-QC",
"status": "operational",
"source": "https://docs.aws.amazon.com/global-infrastructure/latest/regions/aws-regions.html",
"operationalSince": "2016"
},
"aws-ca-west-1": {
"provider": "aws",
"lonlat": [-114.0719, 51.0447],
"displayName": "Calgary",
"region": "ca-west-1",
"zoneKey": "CA-AB",
"status": "operational",
"source": "https://docs.aws.amazon.com/global-infrastructure/latest/regions/aws-regions.html",
"operationalSince": "2023"
},
"aws-eu-central-1": {
"provider": "aws",
"lonlat": [8.6821, 50.1109],
"displayName": "Frankfurt",
"region": "eu-central-1",
"zoneKey": "DE",
"status": "operational",
"source": "https://docs.aws.amazon.com/global-infrastructure/latest/regions/aws-regions.html",
"operationalSince": "2014"
},
"aws-eu-west-1": {
"provider": "aws",
"lonlat": [-6.2603, 53.3498],
"displayName": "Ireland",
"region": "eu-west-1",
"zoneKey": "IE",
"status": "operational",
"source": "https://docs.aws.amazon.com/global-infrastructure/latest/regions/aws-regions.html",
"operationalSince": "2008"
},
"aws-eu-west-2": {
"provider": "aws",
"lonlat": [-0.1276, 51.5072],
"displayName": "London",
"region": "eu-west-2",
"zoneKey": "GB",
"status": "operational",
"source": "https://docs.aws.amazon.com/global-infrastructure/latest/regions/aws-regions.html",
"operationalSince": "2016"
},
"aws-eu-south-1": {
"provider": "aws",
"lonlat": [9.1824, 45.4685],
"displayName": "Milan",
"region": "eu-south-1",
"zoneKey": "IT-NO",
"status": "operational",
"source": "https://docs.aws.amazon.com/global-infrastructure/latest/regions/aws-regions.html",
"operationalSince": "2020"
},
"aws-eu-west-3": {
"provider": "aws",
"lonlat": [2.3514, 48.8575],
"displayName": "Paris",
"region": "eu-west-3",
"zoneKey": "FR",
"status": "operational",
"source": "https://docs.aws.amazon.com/global-infrastructure/latest/regions/aws-regions.html",
"operationalSince": "2017"
},
"aws-eu-south-2": {
"provider": "aws",
"lonlat": [-0.8247, 41.7737],
"displayName": "Spain",
"region": "eu-south-2",
"zoneKey": "ES",
"status": "operational",
"source": "https://docs.aws.amazon.com/global-infrastructure/latest/regions/aws-regions.html",
"operationalSince": "2022"
},
"aws-eu-north-1": {
"provider": "aws",
"lonlat": [18.0656, 59.3327],
"displayName": "Stockholm",
"region": "eu-north-1",
"zoneKey": "SE-SE3",
"status": "operational",
"source": "https://docs.aws.amazon.com/global-infrastructure/latest/regions/aws-regions.html",
"operationalSince": "2018"
},
"aws-eu-central-2": {
"provider": "aws",
"lonlat": [8.5417, 47.3769],
"displayName": "Zurich",
"region": "eu-central-2",
"zoneKey": "CH",
"status": "operational",
"source": "https://docs.aws.amazon.com/global-infrastructure/latest/regions/aws-regions.html",
"operationalSince": "2022"
},
"aws-il-central-1": {
"provider": "aws",
"lonlat": [34.7818, 32.0853],
"displayName": "Tel Aviv",
"region": "il-central-1",
"zoneKey": "IL",
"status": "operational",
"source": "https://docs.aws.amazon.com/global-infrastructure/latest/regions/aws-regions.html",
"operationalSince": "2023"
},
"aws-mx-central-1": {
"provider": "aws",
"lonlat": [-100.3899, 20.5888],
"displayName": "Central",
"region": "mx-central-1",
"zoneKey": "MX",
"status": "operational",
"source": "https://docs.aws.amazon.com/global-infrastructure/latest/regions/aws-regions.html",
"operationalSince": "2025"
},
"aws-me-central-1": {
"provider": "aws",
"lonlat": [55.2708, 25.2048],
"displayName": "UAE",
"region": "me-central-1",
"zoneKey": "AE",
"status": "operational",
"source": "https://docs.aws.amazon.com/global-infrastructure/latest/regions/aws-regions.html",
"operationalSince": "2022"
},
"aws-sa-east-1": {
"provider": "aws",
"lonlat": [-46.6396, -23.5558],
"displayName": "S\u00e3o Paulo",
"region": "sa-east-1",
"zoneKey": "BR-CS",
"status": "operational",
"source": "https://docs.aws.amazon.com/global-infrastructure/latest/regions/aws-regions.html",
"operationalSince": "2011"
},
"ovh-us-hillsboro": {
"provider": "ovh",
"displayName": "Hillsboro",
"zoneKey": "US-NW-BPAT",
"lonlat": [-122.992, 45.5225],
"region": "us-hillsboro",
"source": "https://www.ovhcloud.com/fr/datacenters-ovhcloud/",
"operationalSince": null,
"status": "operational"
},
"ovh-us-vint_hill": {
"provider": "ovh",
"displayName": "Vint Hill",
"zoneKey": "US-MIDA-PJM",
"lonlat": [-77.6652, 38.7506],
"region": "us-vint_hill",
"source": "https://www.ovhcloud.com/fr/datacenters-ovhcloud/",
"operationalSince": null,
"status": "operational"
},
"ovh-de-frankfurt": {
"provider": "ovh",
"displayName": "Frankfurt",
"zoneKey": "DE",
"lonlat": [8.33636, 50.4953],
"region": "de-frankfurt",
"source": "https://www.ovhcloud.com/fr/datacenters-ovhcloud/",
"operationalSince": null,
"status": "operational"
},
"ovh-au-sydney": {
"provider": "ovh",
"displayName": "Sydney",
"zoneKey": "AU-NSW",
"lonlat": [151.2093, -33.8648],
"region": "au-sydney",
"source": "https://www.ovhcloud.com/fr/datacenters-ovhcloud/",
"operationalSince": null,
"status": "operational"
},
"ovh-ca-beauharnois": {
"provider": "ovh",
"displayName": "Beauharnois",
"zoneKey": "CA-QC",
"lonlat": [-73.8959, 45.3094],
"region": "ca-beauharnois",
"source": "https://www.ovhcloud.com/fr/datacenters-ovhcloud/",
"operationalSince": null,
"status": "operational"
},
"ovh-ca-toronto": {
"provider": "ovh",
"displayName": "Toronto",
"zoneKey": "CA-ON",
"lonlat": [-80.3165, 43.3625],
"region": "ca-toronto",
"source": "https://www.ovhcloud.com/fr/datacenters-ovhcloud/",
"operationalSince": null,
"status": "operational"
},
"ovh-fr-gravelines": {
"provider": "ovh",
"displayName": "Gravelines",
"zoneKey": "FR",
"lonlat": [2.15526, 51.0181],
"region": "fr-gravelines",
"source": "https://www.ovhcloud.com/fr/datacenters-ovhcloud/",
"operationalSince": null,
"status": "operational"
},
"ovh-fr-paris": {
"provider": "ovh",
"displayName": "Paris",
"zoneKey": "FR",
"lonlat": [2.35029, 48.8574],
"region": "fr-paris",
"source": "https://www.ovhcloud.com/fr/datacenters-ovhcloud/",
"operationalSince": null,
"status": "operational"
},
"ovh-fr-roubaix": {
"provider": "ovh",
"displayName": "Roubaix",
"zoneKey": "FR",
"lonlat": [3.20422, 50.6925],
"region": "fr-roubaix",
"source": "https://www.ovhcloud.com/fr/datacenters-ovhcloud/",
"operationalSince": null,
"status": "operational"
},
"ovh-fr-strasbourg": {
"provider": "ovh",
"displayName": "Strasbourg",
"zoneKey": "FR",
"lonlat": [7.75395, 48.5734],
"region": "fr-strasbourg",
"source": "https://www.ovhcloud.com/fr/datacenters-ovhcloud/",
"operationalSince": null,
"status": "operational"
},
"ovh-in-mumbai": {
"provider": "ovh",
"displayName": "Mumbai",
"zoneKey": "IN-WE",
"lonlat": [72.8147, 19.0774],
"region": "in-mumbai",
"source": "https://www.ovhcloud.com/fr/datacenters-ovhcloud/",
"operationalSince": null,
"status": "operational"
},
"ovh-pl-warsaw": {
"provider": "ovh",
"displayName": "Warsaw",
"zoneKey": "PL",
"lonlat": [20.8084, 52.2078],
"region": "pl-warsaw",
"source": "https://www.ovhcloud.com/fr/datacenters-ovhcloud/",
"operationalSince": null,
"status": "operational"
},
"ovh-gb-london": {
"provider": "ovh",
"displayName": "London",
"zoneKey": "GB",
"lonlat": [-0.078804, 51.5114],
"region": "gb-london",
"source": "https://www.ovhcloud.com/fr/datacenters-ovhcloud/",
"operationalSince": null,
"status": "operational"
},
"ovh-sg-singapore": {
"provider": "ovh",
"displayName": "Singapore",
"zoneKey": "SG",
"lonlat": [103.895, 1.3179],
"region": "sg-singapore",
"source": "https://www.ovhcloud.com/fr/datacenters-ovhcloud/",
"operationalSince": null,
"status": "operational"
},
"gcp-africa-south1": {
"provider": "gcp",
"lonlat": [28.0473, -26.2041],
"displayName": "Johannesburg",
"region": "africa-south1",
"zoneKey": "ZA",
"status": "operational",
"source": "https://cloud.google.com/compute/docs/regions-zones",
"operationalSince": null
},
"gcp-asia-east2": {
"provider": "gcp",
"lonlat": [114.1694, 22.3193],
"displayName": "Hong Kong",
"region": "asia-east2",
"zoneKey": "HK",
"status": "operational",
"source": "https://cloud.google.com/compute/docs/regions-zones",
"operationalSince": null
},
"gcp-asia-northeast2": {
"provider": "gcp",
"lonlat": [135.5023, 34.6937],
"displayName": "Osaka",
"region": "asia-northeast2",
"zoneKey": "JP-KN",
"status": "operational",
"source": "https://cloud.google.com/compute/docs/regions-zones",
"operationalSince": null
},
"gcp-asia-northeast3": {
"provider": "gcp",
"lonlat": [126.978, 37.5665],
"displayName": "Seoul",
"region": "asia-northeast3",
"zoneKey": "KR",
"status": "operational",
"source": "https://cloud.google.com/compute/docs/regions-zones",
"operationalSince": null
},
"gcp-asia-south1": {
"provider": "gcp",
"lonlat": [72.8777, 19.076],
"displayName": "Mumbai",
"region": "asia-south1",
"zoneKey": "IN-WE",
"status": "operational",
"source": "https://cloud.google.com/compute/docs/regions-zones",
"operationalSince": null
},
"gcp-asia-south2": {
"provider": "gcp",
"lonlat": [77.209, 28.6139],
"displayName": "Delhi",
"region": "asia-south2",
"zoneKey": "IN-NO",
"status": "operational",
"source": "https://cloud.google.com/compute/docs/regions-zones",
"operationalSince": null
},
"gcp-asia-southeast2": {
"provider": "gcp",
"lonlat": [106.8456, -6.2088],
"displayName": "Jakarta",
"region": "asia-southeast2",
"zoneKey": "ID",
"status": "operational",
"source": "https://cloud.google.com/compute/docs/regions-zones",
"operationalSince": null
},
"gcp-asia-southeast3": {
"provider": "gcp",
"lonlat": [100.5018, 13.7563],
"displayName": "Bangkok",
"region": "asia-southeast3",
"zoneKey": "TH",
"status": "operational",
"source": "https://cloud.google.com/compute/docs/regions-zones",
"operationalSince": null
},
"gcp-australia-southeast1": {
"provider": "gcp",
"lonlat": [151.2093, -33.8688],
"displayName": "Sydney",
"region": "australia-southeast1",
"zoneKey": "AU-NSW",
"status": "operational",
"source": "https://cloud.google.com/compute/docs/regions-zones",
"operationalSince": null
},
"gcp-australia-southeast2": {
"provider": "gcp",
"lonlat": [144.9631, -37.8136],
"displayName": "Melbourne",
"region": "australia-southeast2",
"zoneKey": "AU-VIC",
"status": "operational",
"source": "https://cloud.google.com/compute/docs/regions-zones",
"operationalSince": null
},
"gcp-europe-central2": {
"provider": "gcp",
"lonlat": [21.0122, 52.2297],
"displayName": "Warsaw",
"region": "europe-central2",
"zoneKey": "PL",
"status": "operational",
"source": "https://cloud.google.com/compute/docs/regions-zones",
"operationalSince": null
},
"gcp-europe-north2": {
"provider": "gcp",
"lonlat": [18.0686, 59.3293],
"displayName": "Stockholm",
"region": "europe-north2",
"zoneKey": "SE-SE3",
"status": "operational",
"source": "https://cloud.google.com/compute/docs/regions-zones",
"operationalSince": null
},
"gcp-europe-southwest1": {
"provider": "gcp",
"lonlat": [-3.7038, 40.4168],
"displayName": "Madrid",
"region": "europe-southwest1",
"zoneKey": "ES",
"status": "operational",
"source": "https://cloud.google.com/compute/docs/regions-zones",
"operationalSince": null
},
"gcp-europe-west2": {
"provider": "gcp",
"lonlat": [-0.1276, 51.5074],
"displayName": "London",
"region": "europe-west2",
"zoneKey": "GB",
"status": "operational",
"source": "https://cloud.google.com/compute/docs/regions-zones",
"operationalSince": null
},
"gcp-europe-west6": {
"provider": "gcp",
"lonlat": [8.5417, 47.3769],
"displayName": "Zurich",
"region": "europe-west6",
"zoneKey": "CH",
"status": "operational",
"source": "https://cloud.google.com/compute/docs/regions-zones",
"operationalSince": null
},
"gcp-europe-west8": {
"provider": "gcp",
"lonlat": [9.19, 45.4642],
"displayName": "Milan",
"region": "europe-west8",
"zoneKey": "IT-NO",
"status": "operational",
"source": "https://cloud.google.com/compute/docs/regions-zones",
"operationalSince": null
},
"gcp-europe-west9": {
"provider": "gcp",
"lonlat": [2.3522, 48.8566],
"displayName": "Paris",
"region": "europe-west9",
"zoneKey": "FR",
"status": "operational",
"source": "https://cloud.google.com/compute/docs/regions-zones",
"operationalSince": null
},
"gcp-europe-west10": {
"provider": "gcp",
"lonlat": [13.405, 52.52],
"displayName": "Berlin",
"region": "europe-west10",
"zoneKey": "DE",
"status": "operational",
"source": "https://cloud.google.com/compute/docs/regions-zones",
"operationalSince": null
},
"gcp-europe-west12": {
"provider": "gcp",
"lonlat": [7.6869, 45.0703],
"displayName": "Turin",
"region": "europe-west12",
"zoneKey": "IT-NO",
"status": "operational",
"source": "https://cloud.google.com/compute/docs/regions-zones",
"operationalSince": null
},
"gcp-me-central1": {
"provider": "gcp",
"lonlat": [51.531, 25.2854],
"displayName": "Doha",
"region": "me-central1",
"zoneKey": "QA",
"status": "operational",
"source": "https://cloud.google.com/compute/docs/regions-zones",
"operationalSince": null
},
"gcp-me-central2": {
"provider": "gcp",
"lonlat": [50.1033, 26.4207],
"displayName": "Dammam",
"region": "me-central2",
"zoneKey": "SA",
"status": "operational",
"source": "https://cloud.google.com/compute/docs/regions-zones",
"operationalSince": null
},
"gcp-me-west1": {
"provider": "gcp",
"lonlat": [34.7818, 32.0853],
"displayName": "Tel Aviv",
"region": "me-west1",
"zoneKey": "IL",
"status": "operational",
"source": "https://cloud.google.com/compute/docs/regions-zones",
"operationalSince": null
},
"gcp-northamerica-northeast1": {
"provider": "gcp",
"lonlat": [-73.5674, 45.5019],
"displayName": "Montréal",
"region": "northamerica-northeast1",
"zoneKey": "CA-QC",
"status": "operational",
"source": "https://cloud.google.com/compute/docs/regions-zones",
"operationalSince": null
},
"gcp-northamerica-south1": {
"provider": "gcp",
"lonlat": [-100.3899, 20.5888],
"displayName": "Querétaro",
"region": "northamerica-south1",
"zoneKey": "MX",
"status": "operational",
"source": "https://cloud.google.com/compute/docs/regions-zones",
"operationalSince": null
},
"gcp-southamerica-east1": {
"provider": "gcp",
"lonlat": [-46.7916, -23.5325],
"displayName": "Osasco, São Paulo",
"region": "southamerica-east1",
"zoneKey": "BR-CS",
"status": "operational",
"source": "https://cloud.google.com/compute/docs/regions-zones",
"operationalSince": null
},
"gcp-us-east5": {
"provider": "gcp",
"lonlat": [-82.9988, 39.9612],
"displayName": "Columbus",
"region": "us-east5",
"zoneKey": "US-MIDA-PJM",
"status": "operational",
"source": "https://cloud.google.com/compute/docs/regions-zones",
"operationalSince": null
},
"gcp-us-south1": {
"provider": "gcp",
"lonlat": [-96.797, 32.7767],
"displayName": "Dallas",
"region": "us-south1",
"zoneKey": "US-TEX-ERCO",
"status": "operational",
"source": "https://cloud.google.com/compute/docs/regions-zones",
"operationalSince": null
},
"gcp-us-west3": {
"provider": "gcp",
"lonlat": [-111.891, 40.7608],
"displayName": "Salt Lake City",
"region": "us-west3",
"zoneKey": "US-NW-PACE",
"status": "operational",
"source": "https://cloud.google.com/compute/docs/regions-zones",
"operationalSince": null
},
"gcp-us-west4": {
"provider": "gcp",
"lonlat": [-115.1398, 36.1699],
"displayName": "Las Vegas",
"region": "us-west4",
"zoneKey": "US-NW-NEVP",
"status": "operational",
"source": "https://cloud.google.com/compute/docs/regions-zones",
"operationalSince": null
},
"aws-ap-southeast-1": {
"provider": "aws",
"lonlat": [103.8198, 1.3521],
"displayName": "Singapore",
"region": "ap-southeast-1",
"zoneKey": "SG",
"status": "operational",
"source": "https://docs.aws.amazon.com/global-infrastructure/latest/regions/aws-regions.html",
"operationalSince": "2010"
},
"aws-me-south-1": {
"provider": "aws",
"lonlat": [50.5577, 26.0667],
"displayName": "Bahrain",
"region": "me-south-1",
"zoneKey": "BH",
"status": "operational",
"source": "https://docs.aws.amazon.com/global-infrastructure/latest/regions/aws-regions.html",
"operationalSince": "2019"
},
"aws-ap-southeast-6": {
"provider": "aws",
"lonlat": [174.7633, -36.8485],
"displayName": "New Zealand",
"region": "ap-southeast-6",
"zoneKey": "NZ",
"status": "operational",
"source": "https://docs.aws.amazon.com/global-infrastructure/latest/regions/aws-regions.html",
"operationalSince": "2025"
},
"azure-koreasouth": {
"provider": "azure",
"lonlat": [129.0756, 35.1796],
"displayName": "Korea South",
"region": "koreasouth",
"zoneKey": "KR",
"status": "operational",
"source": "https://datacenters.microsoft.com",
"operationalSince": "2017"
},
"azure-francesouth": {
"provider": "azure",
"lonlat": [5.3698, 43.2965],
"displayName": "France South",
"region": "francesouth",
"zoneKey": "FR",
"status": "operational",
"source": "https://datacenters.microsoft.com",
"operationalSince": "2018"
},
"azure-germanynorth": {
"provider": "azure",
"lonlat": [13.405, 52.52],
"displayName": "Germany North",
"region": "germanynorth",
"zoneKey": "DE",
"status": "operational",
"source": "https://datacenters.microsoft.com",
"operationalSince": "2019"
},
"azure-norwaywest": {
"provider": "azure",
"lonlat": [5.7331, 58.97],
"displayName": "Norway West",
"region": "norwaywest",
"zoneKey": "NO-NO2",
"status": "operational",
"source": "https://datacenters.microsoft.com",
"operationalSince": "2019"
},
"azure-switzerlandwest": {
"provider": "azure",
"lonlat": [6.1432, 46.2044],
"displayName": "Switzerland West",
"region": "switzerlandwest",
"zoneKey": "CH",
"status": "operational",
"source": "https://datacenters.microsoft.com",
"operationalSince": "2019"
},
"azure-southafricawest": {
"provider": "azure",
"lonlat": [18.4241, -33.9249],
"displayName": "South Africa West",
"region": "southafricawest",
"zoneKey": "ZA",
"status": "operational",
"source": "https://datacenters.microsoft.com",
"operationalSince": "2019"
},
"azure-uaecentral": {
"provider": "azure",
"lonlat": [54.3773, 24.4539],
"displayName": "UAE Central",
"region": "uaecentral",
"zoneKey": "AE",
"status": "operational",
"source": "https://datacenters.microsoft.com",
"operationalSince": "2019"
},
"azure-brazilsoutheast": {
"provider": "azure",
"lonlat": [-43.1729, -22.9068],
"displayName": "Brazil Southeast",
"region": "brazilsoutheast",
"zoneKey": "BR-CS",
"status": "operational",
"source": "https://datacenters.microsoft.com",
"operationalSince": "2021"
},
"azure-australiacentral2": {
"provider": "azure",
"lonlat": [149.13, -35.2809],
"displayName": "Australia Central 2",
"region": "australiacentral2",
"zoneKey": "AU-NSW",
"status": "operational",
"source": "https://datacenters.microsoft.com",
"operationalSince": "2018"
}
}
================================================
FILE: config/defaults.yaml
================================================
fallbackZoneMixes:
powerOriginRatios:
_comment: https://www.bp.com/en/global/corporate/energy-economics/statistical-review-of-world-energy.html, https://www.irena.org/-/media/Files/IRENA/Agency/Publication/2018/Jul/IRENA_Renewable_Energy_Statistics_2018.pdf
_source: BP Statistical Review of World Energy 2019, values from 2018, and Electricity Maps Avg for average carbon intensity, and IRENA report for Biomass and geothermal
value:
battery charge: 0
battery discharge: 0
biomass: 0.017509
coal: 0.38
gas: 0.232
geothermal: 0.003081
hydro: 0.158
hydro charge: 0
hydro discharge: 0
nuclear: 0.102
oil: 0.03
solar: 0.021966
unknown: 0.007728
wind: 0.047716
isLowCarbon:
battery charge:
_comment: Charge does not have any impact (we count emissions at discharge)
source: Electricity Maps
value: 1
battery discharge:
_comment: Battery discharge is assumed to be powered by low-carbon. Ideally this should be overriden per zone.
source: Electricity Maps
value: 1
biomass:
_comment: biomass is considered low-carbon.
source: Electricity Maps
value: 1
coal:
_comment: coal is a fossil fuel.
source: Electricity Maps
value: 0
gas:
_comment: gas is a fossil fuel.
source: Electricity Maps
value: 0
geothermal:
_comment: geothermal is considered low-carbon.
source: Electricity Maps
value: 1
hydro:
_comment: hydro is considered low-carbon.
source: Electricity Maps
value: 1
hydro charge:
_comment: Charge does not have any impact (we count emissions at discharge)
source: Electricity Maps
value: 1
hydro discharge:
_comment: Hydro discharge is assumed to be powered by low-carbon. Ideally this should be overriden per zone.
source: Electricity Maps
value: 1
nuclear:
_comment: nuclear is considered low-carbon.
source: Electricity Maps
value: 1
oil:
_comment: oil is a fossil fuel.
source: Electricity Maps
value: 0
solar:
_comment: solar is considered low-carbon.
source: Electricity Maps
value: 1
unknown:
_comment: By default unknown is assumed to be made up of fossil fuel based modes.
datetime: '2020-01-01'
source: Electricity Maps
value: 0
wind:
_comment: wind is considered low-carbon.
source: Electricity Maps
value: 1
isRenewable:
battery charge:
_comment: Charge does not have any impact (we count emissions at discharge)
source: Electricity Maps
value: 1
battery discharge:
_comment: Battery discharge is assumed to be powered by renewables. Ideally this should be overriden per zone.
source: Electricity Maps
value: 1
biomass:
_comment: biomass is considered renewable.
source: Electricity Maps
value: 1
coal:
_comment: coal is a fossil fuel.
source: Electricity Maps
value: 0
gas:
_comment: gas is a fossil fuel.
source: Electricity Maps
value: 0
geothermal:
_comment: geothermal is considered renewable.
source: Electricity Maps
value: 1
hydro:
_comment: hydro is considered renewable.
source: Electricity Maps
value: 1
hydro charge:
_comment: Charge does not have any impact (we count emissions at discharge)
source: Electricity Maps
value: 1
hydro discharge:
_comment: Hydro discharge is assumed to be powered by renewables. Ideally this should be overriden per zone.
source: Electricity Maps
value: 1
nuclear:
_comment: nuclear is a not renewable.
source: Electricity Maps
value: 0
oil:
_comment: oil is a fossil fuel.
source: Electricity Maps
value: 0
solar:
_comment: solar is considered renewable.
source: Electricity Maps
value: 1
unknown:
_comment: By default unknown is assumed to be made up of fossil fuel based modes.
source: Electricity Maps
value: 0
wind:
_comment: wind is considered renewable.
source: Electricity Maps
value: 1
emissionFactors:
direct:
battery charge:
_comment: Emissions are counted at discharge
source: Electricity Maps
value: 0
battery discharge:
- _comment: As a default fallback, we use the annual mean carbon intensity of all Electricity Maps zones
datetime: '2015-01-01'
source: 2015 annual mean carbon intensity by Electricity Maps
value: 307.04
- _comment: As a default fallback, we use the annual mean carbon intensity of all Electricity Maps zones
datetime: '2016-01-01'
source: 2016 annual mean carbon intensity by Electricity Maps
value: 295.25
- _comment: As a default fallback, we use the annual mean carbon intensity of all Electricity Maps zones
datetime: '2017-01-01'
source: 2017 annual mean carbon intensity by Electricity Maps
value: 311.04
- _comment: As a default fallback, we use the annual mean carbon intensity of all Electricity Maps zones
datetime: '2018-01-01'
source: 2018 annual mean carbon intensity by Electricity Maps
value: 331.14
- _comment: As a default fallback, we use the annual mean carbon intensity of all Electricity Maps zones
datetime: '2019-01-01'
source: 2019 annual mean carbon intensity by Electricity Maps
value: 326.32
- _comment: As a default fallback, we use the annual mean carbon intensity of all Electricity Maps zones
datetime: '2020-01-01'
source: 2020 annual mean carbon intensity by Electricity Maps
value: 310.58
- _comment: As a default fallback, we use the annual mean carbon intensity of all Electricity Maps zones
datetime: '2021-01-01'
source: 2021 annual mean carbon intensity by Electricity Maps
value: 324.69
biomass:
source: BEIS 2021
value: 0
coal:
source: IPCC 2014
value: 760
gas:
source: IPCC 2014
value: 370
geothermal:
source: IPCC 2014
value: 0
hydro:
source: IPCC 2014
value: 0
hydro charge:
_comment: Emissions are counted at discharge
source: Electricity Maps
value: 0
hydro discharge:
- _comment: As a default fallback, we use the annual mean carbon intensity of all Electricity Maps zones
datetime: '2015-01-01'
source: 2015 annual mean carbon intensity by Electricity Maps
value: 307.04
- _comment: As a default fallback, we use the annual mean carbon intensity of all Electricity Maps zones
datetime: '2016-01-01'
source: 2016 annual mean carbon intensity by Electricity Maps
value: 295.25
- _comment: As a default fallback, we use the annual mean carbon intensity of all Electricity Maps zones
datetime: '2017-01-01'
source: 2017 annual mean carbon intensity by Electricity Maps
value: 311.04
- _comment: As a default fallback, we use the annual mean carbon intensity of all Electricity Maps zones
datetime: '2018-01-01'
source: 2018 annual mean carbon intensity by Electricity Maps
value: 331.14
- _comment: As a default fallback, we use the annual mean carbon intensity of all Electricity Maps zones
datetime: '2019-01-01'
source: 2019 annual mean carbon intensity by Electricity Maps
value: 326.32
- _comment: As a default fallback, we use the annual mean carbon intensity of all Electricity Maps zones
datetime: '2020-01-01'
source: 2020 annual mean carbon intensity by Electricity Maps
value: 310.58
- _comment: As a default fallback, we use the annual mean carbon intensity of all Electricity Maps zones
datetime: '2021-01-01'
source: 2021 annual mean carbon intensity by Electricity Maps
value: 324.69
nuclear:
source: IPCC 2014
value: 0
oil:
_comment: A blended average of US and UK direct emission factor figures
source: EIA 2020/BEIS 2021
value: 406
solar:
source: IPCC 2014
value: 0
unknown:
_comment: assume conventional
source: assumes thermal (coal, gas, or oil)
value: 575
wind:
source: IPCC 2014
value: 0
lifecycle:
battery charge:
_comment: Emissions are counted at discharge
source: Electricity Maps
value: 0
battery discharge:
- _comment: As a default fallback, we use the annual mean carbon intensity of all Electricity Maps zones
datetime: '2015-01-01'
source: 2015 annual mean carbon intensity by Electricity Maps
value: 363.85
- _comment: As a default fallback, we use the annual mean carbon intensity of all Electricity Maps zones
datetime: '2016-01-01'
source: 2016 annual mean carbon intensity by Electricity Maps
value: 354.12
- _comment: As a default fallback, we use the annual mean carbon intensity of all Electricity Maps zones
datetime: '2017-01-01'
source: 2017 annual mean carbon intensity by Electricity Maps
value: 370.7
- _comment: As a default fallback, we use the annual mean carbon intensity of all Electricity Maps zones
datetime: '2018-01-01'
source: 2018 annual mean carbon intensity by Electricity Maps
value: 407.34
- _comment: As a default fallback, we use the annual mean carbon intensity of all Electricity Maps zones
datetime: '2019-01-01'
source: 2019 annual mean carbon intensity by Electricity Maps
value: 391.46
- _comment: As a default fallback, we use the annual mean carbon intensity of all Electricity Maps zones
datetime: '2020-01-01'
source: 2020 annual mean carbon intensity by Electricity Maps
value: 375.63
- _comment: As a default fallback, we use the annual mean carbon intensity of all Electricity Maps zones
datetime: '2021-01-01'
source: 2021 annual mean carbon intensity by Electricity Maps
value: 391.33
biomass:
source: IPCC 2014
value: 230
coal:
source: IPCC 2014
value: 820
gas:
source: IPCC 2014
value: 490
geothermal:
source: IPCC 2014
value: 38
hydro:
source: IPCC 2014
value: 24
hydro charge:
_comment: Emissions are counted at discharge
source: Electricity Maps
value: 0
hydro discharge:
- _comment: As a default fallback, we use the annual mean carbon intensity of all Electricity Maps zones
datetime: '2015-01-01'
source: 2015 annual mean carbon intensity by Electricity Maps
value: 363.85
- _comment: As a default fallback, we use the annual mean carbon intensity of all Electricity Maps zones
datetime: '2016-01-01'
source: 2016 annual mean carbon intensity by Electricity Maps
value: 354.12
- _comment: As a default fallback, we use the annual mean carbon intensity of all Electricity Maps zones
datetime: '2017-01-01'
source: 2017 annual mean carbon intensity by Electricity Maps
value: 370.7
- _comment: As a default fallback, we use the annual mean carbon intensity of all Electricity Maps zones
datetime: '2018-01-01'
source: 2018 annual mean carbon intensity by Electricity Maps
value: 407.34
- _comment: As a default fallback, we use the annual mean carbon intensity of all Electricity Maps zones
datetime: '2019-01-01'
source: 2019 annual mean carbon intensity by Electricity Maps
value: 391.46
- _comment: As a default fallback, we use the annual mean carbon intensity of all Electricity Maps zones
datetime: '2020-01-01'
source: 2020 annual mean carbon intensity by Electricity Maps
value: 375.63
- _comment: As a default fallback, we use the annual mean carbon intensity of all Electricity Maps zones
datetime: '2021-01-01'
source: 2021 annual mean carbon intensity by Electricity Maps
value: 391.33
nuclear:
source: IPCC 2014
value: 12
oil:
_comment: UK Parliamentary Office of Science and Technology (2006) 'Carbon footprint of electricity generation'
source: UK POST 2014
value: 650
solar:
source: IPCC 2014
value: 45
unknown:
_comment: assume conventional
source: assumes thermal (coal, gas, oil or biomass)
value: 700
wind:
source: IPCC 2014
value: 11
================================================
FILE: config/exchanges/AD_ES.yaml
================================================
capacity:
- -125
- 125
lonlat:
- 1.45
- 42.3
parsers:
exchange: ESIOS.fetch_exchange
rotation: 200
================================================
FILE: config/exchanges/AD_FR.yaml
================================================
lonlat:
- 1.7963181
- 42.58837
rotation: 38
================================================
FILE: config/exchanges/AL_GR.yaml
================================================
capacity:
- -533
- 533
lonlat:
- 20.689872
- 40.198219
parsers:
exchange: ENTSOE.fetch_exchange
exchangeCapacityForecastDayAhead: ENTSOE.fetch_exchange_capacity_forecasts_day_ahead
exchangeCapacityForecastWeekAhead: ENTSOE.fetch_exchange_capacity_forecasts_week_ahead
exchangeCapacityForecastMonthAhead: ENTSOE.fetch_exchange_capacity_forecasts_month_ahead
exchangeForecast: ENTSOE.fetch_exchange_forecast
rotation: 135
================================================
FILE: config/exchanges/AL_ME.yaml
================================================
lonlat:
- 19.500384
- 42.428871
parsers:
exchange: ENTSOE.fetch_exchange
exchangeCapacityForecastDayAhead: ENTSOE.fetch_exchange_capacity_forecasts_day_ahead
exchangeCapacityForecastWeekAhead: ENTSOE.fetch_exchange_capacity_forecasts_week_ahead
exchangeCapacityForecastMonthAhead: ENTSOE.fetch_exchange_capacity_forecasts_month_ahead
exchangeForecast: ENTSOE.fetch_exchange_forecast
rotation: -45
================================================
FILE: config/exchanges/AL_RS.yaml
================================================
lonlat:
- 20.486292
- 42.323472
parsers:
exchange: ENTSOE.fetch_exchange
exchangeCapacityForecastDayAhead: ENTSOE.fetch_exchange_capacity_forecasts_day_ahead
exchangeCapacityForecastWeekAhead: ENTSOE.fetch_exchange_capacity_forecasts_week_ahead
exchangeCapacityForecastMonthAhead: ENTSOE.fetch_exchange_capacity_forecasts_month_ahead
exchangeForecast: ENTSOE.fetch_exchange_forecast
rotation: 45
================================================
FILE: config/exchanges/AL_XK.yaml
================================================
lonlat:
- 20.212
- 42.408
parsers:
exchange: ENTSOE.fetch_exchange
exchangeCapacityForecastDayAhead: ENTSOE.fetch_exchange_capacity_forecasts_day_ahead
exchangeCapacityForecastWeekAhead: ENTSOE.fetch_exchange_capacity_forecasts_week_ahead
exchangeCapacityForecastMonthAhead: ENTSOE.fetch_exchange_capacity_forecasts_month_ahead
exchangeForecast: ENTSOE.fetch_exchange_forecast
rotation: 45
================================================
FILE: config/exchanges/AM_GE.yaml
================================================
lonlat:
- 44.313
- 41.205
parsers:
exchange: ENTSOE.fetch_exchange
exchangeCapacityForecastDayAhead: ENTSOE.fetch_exchange_capacity_forecasts_day_ahead
exchangeCapacityForecastWeekAhead: ENTSOE.fetch_exchange_capacity_forecasts_week_ahead
exchangeCapacityForecastMonthAhead: ENTSOE.fetch_exchange_capacity_forecasts_month_ahead
exchangeForecast: ENTSOE.fetch_exchange_forecast
rotation: 0
================================================
FILE: config/exchanges/AM_IR.yaml
================================================
lonlat:
- 46.3
- 38.9
parsers: {}
rotation: 180
================================================
FILE: config/exchanges/AR_BR-S.yaml
================================================
lonlat:
- -56.407453
- -28.880006
parsers:
exchange: ONS.fetch_exchange
rotation: 110
================================================
FILE: config/exchanges/AR_BR.yaml
================================================
lonlat:
- -56.407453
- -28.880006
rotation: 110
================================================
FILE: config/exchanges/AR_CL-SEN.yaml
================================================
lonlat:
- -69.860314
- -33.641822
parsers:
exchange: CAMMESA.fetch_exchange
rotation: 270
================================================
FILE: config/exchanges/AR_PY.yaml
================================================
lonlat:
- -59.408
- -24.346
parsers:
exchange: CAMMESA.fetch_exchange
rotation: 45
================================================
FILE: config/exchanges/AR_UY.yaml
================================================
lonlat:
- -58.150
- -32.199
parsers:
exchange: UY.fetch_exchange
rotation: 90
================================================
FILE: config/exchanges/AT_CH.yaml
================================================
lonlat:
- 9.597882
- 47.079455
parsers:
exchange: ENTSOE.fetch_exchange
exchangeCapacityForecastDayAhead: ENTSOE.fetch_exchange_capacity_forecasts_day_ahead
exchang
gitextract_95d_jcjb/
├── .devcontainer/
│ └── devcontainer.json
├── .dockerignore
├── .editorconfig
├── .gitattributes
├── .github/
│ ├── CODEOWNERS
│ ├── ISSUE_TEMPLATE/
│ │ ├── blank-issue.md
│ │ ├── config.yml
│ │ ├── data-issue.yml
│ │ ├── feature_request.md
│ │ └── frontend-bug-report.md
│ ├── codeql-config.yml
│ ├── dependabot.yml
│ ├── filter-groups.yml
│ ├── labeler.yml
│ ├── pull_request_template.md
│ └── workflows/
│ ├── CI.yml
│ ├── README.md
│ ├── codeql.yml
│ ├── create-release.yml
│ ├── earthly-contrib.yml
│ ├── label.yml
│ └── validate_local_links_in_md.yml
├── .gitignore
├── .pre-commit-config.yaml
├── .prettierignore
├── .prettierrc.js
├── .python-version
├── .vscode/
│ ├── extensions.json
│ └── settings.json
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── DATA_SOURCES.md
├── EMISSION_FACTORS_SOURCES.md
├── Earthfile
├── LICENSE.md
├── LICENSE_MIT.txt
├── README.md
├── __init__.py
├── capacity_update.py
├── config/
│ ├── Earthfile
│ ├── __init__.py
│ ├── data_centers/
│ │ └── data_centers.json
│ ├── defaults.yaml
│ ├── exchanges/
│ │ ├── AD_ES.yaml
│ │ ├── AD_FR.yaml
│ │ ├── AL_GR.yaml
│ │ ├── AL_ME.yaml
│ │ ├── AL_RS.yaml
│ │ ├── AL_XK.yaml
│ │ ├── AM_GE.yaml
│ │ ├── AM_IR.yaml
│ │ ├── AR_BR-S.yaml
│ │ ├── AR_BR.yaml
│ │ ├── AR_CL-SEN.yaml
│ │ ├── AR_PY.yaml
│ │ ├── AR_UY.yaml
│ │ ├── AT_CH.yaml
│ │ ├── AT_CZ.yaml
│ │ ├── AT_DE.yaml
│ │ ├── AT_HU.yaml
│ │ ├── AT_IT-NO.yaml
│ │ ├── AT_IT.yaml
│ │ ├── AT_SI.yaml
│ │ ├── AU-NSW_AU-QLD.yaml
│ │ ├── AU-NSW_AU-VIC.yaml
│ │ ├── AU-SA_AU-VIC.yaml
│ │ ├── AU-TAS_AU-VIC.yaml
│ │ ├── AX_FI.yaml
│ │ ├── AX_SE-SE3.yaml
│ │ ├── AX_SE.yaml
│ │ ├── AZ_GE.yaml
│ │ ├── AZ_RU-1.yaml
│ │ ├── BA_HR.yaml
│ │ ├── BA_ME.yaml
│ │ ├── BA_RS.yaml
│ │ ├── BD_IN-EA.yaml
│ │ ├── BD_IN-NE.yaml
│ │ ├── BD_IN.yaml
│ │ ├── BD_NP.yaml
│ │ ├── BE_DE.yaml
│ │ ├── BE_FR.yaml
│ │ ├── BE_GB.yaml
│ │ ├── BE_LU.yaml
│ │ ├── BE_NL.yaml
│ │ ├── BG_GR.yaml
│ │ ├── BG_MK.yaml
│ │ ├── BG_RO.yaml
│ │ ├── BG_RS.yaml
│ │ ├── BG_TR.yaml
│ │ ├── BR-CS_BR-N.yaml
│ │ ├── BR-CS_BR-NE.yaml
│ │ ├── BR-CS_BR-S.yaml
│ │ ├── BR-N_BR-NE.yaml
│ │ ├── BR-S_PY.yaml
│ │ ├── BR-S_UY.yaml
│ │ ├── BR_PY.yaml
│ │ ├── BR_UY.yaml
│ │ ├── BT_IN-EA.yaml
│ │ ├── BT_IN.yaml
│ │ ├── BY_LT.yaml
│ │ ├── BY_RU-1.yaml
│ │ ├── BY_UA.yaml
│ │ ├── BZ_MX.yaml
│ │ ├── CA-AB_CA-BC.yaml
│ │ ├── CA-AB_CA-SK.yaml
│ │ ├── CA-AB_US-NW-NWMT.yaml
│ │ ├── CA-BC_US-NW-BPAT.yaml
│ │ ├── CA-MB_CA-ON.yaml
│ │ ├── CA-MB_US-MIDW-MISO.yaml
│ │ ├── CA-NB_CA-NS.yaml
│ │ ├── CA-NB_CA-PE.yaml
│ │ ├── CA-NB_CA-QC.yaml
│ │ ├── CA-NB_US-NE-ISNE.yaml
│ │ ├── CA-NL_CA-NS.yaml
│ │ ├── CA-ON_CA-QC.yaml
│ │ ├── CA-ON_US-MIDW-MISO.yaml
│ │ ├── CA-ON_US-NY-NYIS.yaml
│ │ ├── CA-QC_US-NE-ISNE.yaml
│ │ ├── CA-QC_US-NY-NYIS.yaml
│ │ ├── CA-SK_US-CENT-SWPP.yaml
│ │ ├── CA_US.yaml
│ │ ├── CH_DE.yaml
│ │ ├── CH_FR.yaml
│ │ ├── CH_IT-NO.yaml
│ │ ├── CH_IT.yaml
│ │ ├── CN_RU-AS.yaml
│ │ ├── CR_NI.yaml
│ │ ├── CR_PA.yaml
│ │ ├── CZ_DE.yaml
│ │ ├── CZ_PL.yaml
│ │ ├── CZ_SK.yaml
│ │ ├── DE_DK-DK1.yaml
│ │ ├── DE_DK-DK2.yaml
│ │ ├── DE_DK.yaml
│ │ ├── DE_FR.yaml
│ │ ├── DE_LU.yaml
│ │ ├── DE_NL.yaml
│ │ ├── DE_NO-NO2.yaml
│ │ ├── DE_NO.yaml
│ │ ├── DE_PL.yaml
│ │ ├── DE_SE-SE4.yaml
│ │ ├── DE_SE.yaml
│ │ ├── DK-DK1_DK-DK2.yaml
│ │ ├── DK-DK1_GB.yaml
│ │ ├── DK-DK1_NL.yaml
│ │ ├── DK-DK1_NO-NO2.yaml
│ │ ├── DK-DK1_SE-SE3.yaml
│ │ ├── DK-DK2_SE-SE4.yaml
│ │ ├── DK_GB.yaml
│ │ ├── DK_NL.yaml
│ │ ├── DK_NO.yaml
│ │ ├── DK_SE.yaml
│ │ ├── EE_FI.yaml
│ │ ├── EE_LV.yaml
│ │ ├── EE_RU-1.yaml
│ │ ├── ES-CN-FV_ES-CN-LZ.yaml
│ │ ├── ES-IB-FO_ES-IB-IZ.yaml
│ │ ├── ES-IB-IZ_ES-IB-MA.yaml
│ │ ├── ES-IB-MA_ES-IB-ME.yaml
│ │ ├── ES_ES-IB-MA.yaml
│ │ ├── ES_FR.yaml
│ │ ├── ES_MA.yaml
│ │ ├── ES_PT.yaml
│ │ ├── FI_NO-NO4.yaml
│ │ ├── FI_NO.yaml
│ │ ├── FI_RU-1.yaml
│ │ ├── FI_SE-SE1.yaml
│ │ ├── FI_SE-SE3.yaml
│ │ ├── FI_SE.yaml
│ │ ├── FR-COR_IT-CNO.yaml
│ │ ├── FR-COR_IT-SAR.yaml
│ │ ├── FR-COR_IT.yaml
│ │ ├── FR_GB.yaml
│ │ ├── FR_IT-NO.yaml
│ │ ├── FR_IT.yaml
│ │ ├── FR_JE.yaml
│ │ ├── FR_LU.yaml
│ │ ├── GB-NIR_IE.yaml
│ │ ├── GB_GB-NIR.yaml
│ │ ├── GB_IE.yaml
│ │ ├── GB_IM.yaml
│ │ ├── GB_NL.yaml
│ │ ├── GB_NO-NO2.yaml
│ │ ├── GB_NO.yaml
│ │ ├── GE_RU-1.yaml
│ │ ├── GE_TR.yaml
│ │ ├── GR_IT-SO.yaml
│ │ ├── GR_IT.yaml
│ │ ├── GR_MK.yaml
│ │ ├── GR_TR.yaml
│ │ ├── GT_HN.yaml
│ │ ├── GT_MX.yaml
│ │ ├── GT_SV.yaml
│ │ ├── HN_NI.yaml
│ │ ├── HN_SV.yaml
│ │ ├── HR_HU.yaml
│ │ ├── HR_RS.yaml
│ │ ├── HR_SI.yaml
│ │ ├── HU_RO.yaml
│ │ ├── HU_RS.yaml
│ │ ├── HU_SI.yaml
│ │ ├── HU_SK.yaml
│ │ ├── HU_UA.yaml
│ │ ├── IN-EA_IN-NE.yaml
│ │ ├── IN-EA_IN-NO.yaml
│ │ ├── IN-EA_IN-SO.yaml
│ │ ├── IN-EA_IN-WE.yaml
│ │ ├── IN-EA_NP.yaml
│ │ ├── IN-NO_IN-WE.yaml
│ │ ├── IN-SO_IN-WE.yaml
│ │ ├── IN_NP.yaml
│ │ ├── IQ_IR.yaml
│ │ ├── IT-CNO_IT-CSO.yaml
│ │ ├── IT-CNO_IT-NO.yaml
│ │ ├── IT-CSO_IT-SAR.yaml
│ │ ├── IT-CSO_IT-SO.yaml
│ │ ├── IT-CSO_ME.yaml
│ │ ├── IT-NO_SI.yaml
│ │ ├── IT-SIC_IT-SO.yaml
│ │ ├── IT-SIC_MT.yaml
│ │ ├── IT_ME.yaml
│ │ ├── IT_MT.yaml
│ │ ├── IT_SI.yaml
│ │ ├── JP-CB_JP-HR.yaml
│ │ ├── JP-CB_JP-KN.yaml
│ │ ├── JP-CB_JP-TK.yaml
│ │ ├── JP-CG_JP-KN.yaml
│ │ ├── JP-CG_JP-KY.yaml
│ │ ├── JP-CG_JP-SK.yaml
│ │ ├── JP-HKD_JP-TH.yaml
│ │ ├── JP-HR_JP-KN.yaml
│ │ ├── JP-KN_JP-SK.yaml
│ │ ├── JP-TH_JP-TK.yaml
│ │ ├── KZ_RU-1.yaml
│ │ ├── KZ_RU-2.yaml
│ │ ├── LS_ZA.yaml
│ │ ├── LT_LV.yaml
│ │ ├── LT_PL.yaml
│ │ ├── LT_RU-KGD.yaml
│ │ ├── LT_SE-SE4.yaml
│ │ ├── LT_SE.yaml
│ │ ├── LV_RU-1.yaml
│ │ ├── MD_RO.yaml
│ │ ├── MD_UA.yaml
│ │ ├── ME_RS.yaml
│ │ ├── ME_XK.yaml
│ │ ├── MK_RS.yaml
│ │ ├── MK_XK.yaml
│ │ ├── MN_RU-2.yaml
│ │ ├── MX_US-CAL-CISO.yaml
│ │ ├── MX_US-TEX-ERCO.yaml
│ │ ├── MX_US.yaml
│ │ ├── MY-WM_SG.yaml
│ │ ├── MY-WM_TH.yaml
│ │ ├── MY_SG.yaml
│ │ ├── MY_TH.yaml
│ │ ├── NA_ZA.yaml
│ │ ├── NA_ZM.yaml
│ │ ├── NL_NO-NO2.yaml
│ │ ├── NL_NO.yaml
│ │ ├── NO-NO1_NO-NO2.yaml
│ │ ├── NO-NO1_NO-NO3.yaml
│ │ ├── NO-NO1_NO-NO5.yaml
│ │ ├── NO-NO1_SE-SE3.yaml
│ │ ├── NO-NO2_NO-NO5.yaml
│ │ ├── NO-NO3_NO-NO4.yaml
│ │ ├── NO-NO3_NO-NO5.yaml
│ │ ├── NO-NO3_SE-SE2.yaml
│ │ ├── NO-NO4_RU-1.yaml
│ │ ├── NO-NO4_SE-SE1.yaml
│ │ ├── NO-NO4_SE-SE2.yaml
│ │ ├── NO_RU-1.yaml
│ │ ├── NO_SE.yaml
│ │ ├── PH-LU_PH-VI.yaml
│ │ ├── PH-MI_PH-VI.yaml
│ │ ├── PL_SE-SE4.yaml
│ │ ├── PL_SE.yaml
│ │ ├── PL_SK.yaml
│ │ ├── PL_UA.yaml
│ │ ├── RO_RS.yaml
│ │ ├── RO_UA.yaml
│ │ ├── RS_XK.yaml
│ │ ├── RU-1_RU-2.yaml
│ │ ├── RU-1_UA-CR.yaml
│ │ ├── RU-1_UA.yaml
│ │ ├── SE-SE1_SE-SE2.yaml
│ │ ├── SE-SE2_SE-SE3.yaml
│ │ ├── SE-SE3_SE-SE4.yaml
│ │ ├── SK_UA.yaml
│ │ ├── US-CAL-BANC_US-CAL-CISO.yaml
│ │ ├── US-CAL-BANC_US-CAL-TIDC.yaml
│ │ ├── US-CAL-BANC_US-NW-BPAT.yaml
│ │ ├── US-CAL-CISO_US-CAL-IID.yaml
│ │ ├── US-CAL-CISO_US-CAL-LDWP.yaml
│ │ ├── US-CAL-CISO_US-CAL-TIDC.yaml
│ │ ├── US-CAL-CISO_US-NW-BPAT.yaml
│ │ ├── US-CAL-CISO_US-NW-NEVP.yaml
│ │ ├── US-CAL-CISO_US-NW-PACW.yaml
│ │ ├── US-CAL-CISO_US-SW-AZPS.yaml
│ │ ├── US-CAL-CISO_US-SW-SRP.yaml
│ │ ├── US-CAL-CISO_US-SW-WALC.yaml
│ │ ├── US-CAL-IID_US-SW-AZPS.yaml
│ │ ├── US-CAL-IID_US-SW-WALC.yaml
│ │ ├── US-CAL-LDWP_US-NW-BPAT.yaml
│ │ ├── US-CAL-LDWP_US-NW-NEVP.yaml
│ │ ├── US-CAL-LDWP_US-NW-PACE.yaml
│ │ ├── US-CAL-LDWP_US-SW-AZPS.yaml
│ │ ├── US-CAL-LDWP_US-SW-WALC.yaml
│ │ ├── US-CAR-CPLE_US-CAR-DUK.yaml
│ │ ├── US-CAR-CPLE_US-CAR-SC.yaml
│ │ ├── US-CAR-CPLE_US-CAR-SCEG.yaml
│ │ ├── US-CAR-CPLE_US-CAR-YAD.yaml
│ │ ├── US-CAR-CPLE_US-MIDA-PJM.yaml
│ │ ├── US-CAR-CPLW_US-CAR-DUK.yaml
│ │ ├── US-CAR-CPLW_US-MIDA-PJM.yaml
│ │ ├── US-CAR-CPLW_US-TEN-TVA.yaml
│ │ ├── US-CAR-DUK_US-CAR-SC.yaml
│ │ ├── US-CAR-DUK_US-CAR-SCEG.yaml
│ │ ├── US-CAR-DUK_US-CAR-YAD.yaml
│ │ ├── US-CAR-DUK_US-MIDA-PJM.yaml
│ │ ├── US-CAR-DUK_US-SE-SEPA.yaml
│ │ ├── US-CAR-DUK_US-SE-SOCO.yaml
│ │ ├── US-CAR-DUK_US-TEN-TVA.yaml
│ │ ├── US-CAR-SCEG_US-SE-SEPA.yaml
│ │ ├── US-CAR-SCEG_US-SE-SOCO.yaml
│ │ ├── US-CAR-SC_US-CAR-SCEG.yaml
│ │ ├── US-CAR-SC_US-SE-SEPA.yaml
│ │ ├── US-CAR-SC_US-SE-SOCO.yaml
│ │ ├── US-CENT-SPA_US-CENT-SWPP.yaml
│ │ ├── US-CENT-SPA_US-MIDW-AECI.yaml
│ │ ├── US-CENT-SPA_US-MIDW-MISO.yaml
│ │ ├── US-CENT-SWPP_US-MIDW-AECI.yaml
│ │ ├── US-CENT-SWPP_US-MIDW-MISO.yaml
│ │ ├── US-CENT-SWPP_US-NW-PSCO.yaml
│ │ ├── US-CENT-SWPP_US-NW-WACM.yaml
│ │ ├── US-CENT-SWPP_US-NW-WAUW.yaml
│ │ ├── US-CENT-SWPP_US-SW-EPE.yaml
│ │ ├── US-CENT-SWPP_US-SW-PNM.yaml
│ │ ├── US-CENT-SWPP_US-TEX-ERCO.yaml
│ │ ├── US-FLA-FMPP_US-FLA-FPC.yaml
│ │ ├── US-FLA-FMPP_US-FLA-FPL.yaml
│ │ ├── US-FLA-FMPP_US-FLA-JEA.yaml
│ │ ├── US-FLA-FMPP_US-FLA-TEC.yaml
│ │ ├── US-FLA-FPC_US-FLA-FPL.yaml
│ │ ├── US-FLA-FPC_US-FLA-GVL.yaml
│ │ ├── US-FLA-FPC_US-FLA-SEC.yaml
│ │ ├── US-FLA-FPC_US-FLA-TAL.yaml
│ │ ├── US-FLA-FPC_US-FLA-TEC.yaml
│ │ ├── US-FLA-FPC_US-SE-SOCO.yaml
│ │ ├── US-FLA-FPL_US-FLA-GVL.yaml
│ │ ├── US-FLA-FPL_US-FLA-HST.yaml
│ │ ├── US-FLA-FPL_US-FLA-JEA.yaml
│ │ ├── US-FLA-FPL_US-FLA-SEC.yaml
│ │ ├── US-FLA-FPL_US-FLA-TEC.yaml
│ │ ├── US-FLA-FPL_US-SE-SOCO.yaml
│ │ ├── US-FLA-JEA_US-FLA-SEC.yaml
│ │ ├── US-FLA-SEC_US-FLA-TEC.yaml
│ │ ├── US-FLA-TAL_US-SE-SOCO.yaml
│ │ ├── US-MIDA-PJM_US-MIDW-LGEE.yaml
│ │ ├── US-MIDA-PJM_US-MIDW-MISO.yaml
│ │ ├── US-MIDA-PJM_US-NY-NYIS.yaml
│ │ ├── US-MIDA-PJM_US-TEN-TVA.yaml
│ │ ├── US-MIDW-AECI_US-MIDW-MISO.yaml
│ │ ├── US-MIDW-AECI_US-TEN-TVA.yaml
│ │ ├── US-MIDW-LGEE_US-MIDW-MISO.yaml
│ │ ├── US-MIDW-LGEE_US-TEN-TVA.yaml
│ │ ├── US-MIDW-MISO_US-SE-SOCO.yaml
│ │ ├── US-MIDW-MISO_US-TEN-TVA.yaml
│ │ ├── US-NE-ISNE_US-NY-NYIS.yaml
│ │ ├── US-NW-AVA_US-NW-BPAT.yaml
│ │ ├── US-NW-AVA_US-NW-CHPD.yaml
│ │ ├── US-NW-AVA_US-NW-GCPD.yaml
│ │ ├── US-NW-AVA_US-NW-IPCO.yaml
│ │ ├── US-NW-AVA_US-NW-NWMT.yaml
│ │ ├── US-NW-AVA_US-NW-PACW.yaml
│ │ ├── US-NW-BPAT_US-NW-CHPD.yaml
│ │ ├── US-NW-BPAT_US-NW-DOPD.yaml
│ │ ├── US-NW-BPAT_US-NW-GCPD.yaml
│ │ ├── US-NW-BPAT_US-NW-GRID.yaml
│ │ ├── US-NW-BPAT_US-NW-IPCO.yaml
│ │ ├── US-NW-BPAT_US-NW-NEVP.yaml
│ │ ├── US-NW-BPAT_US-NW-NWMT.yaml
│ │ ├── US-NW-BPAT_US-NW-PACW.yaml
│ │ ├── US-NW-BPAT_US-NW-PGE.yaml
│ │ ├── US-NW-BPAT_US-NW-PSEI.yaml
│ │ ├── US-NW-BPAT_US-NW-SCL.yaml
│ │ ├── US-NW-BPAT_US-NW-TPWR.yaml
│ │ ├── US-NW-CHPD_US-NW-DOPD.yaml
│ │ ├── US-NW-CHPD_US-NW-PSEI.yaml
│ │ ├── US-NW-GCPD_US-NW-PACW.yaml
│ │ ├── US-NW-GCPD_US-NW-PSEI.yaml
│ │ ├── US-NW-IPCO_US-NW-NEVP.yaml
│ │ ├── US-NW-IPCO_US-NW-NWMT.yaml
│ │ ├── US-NW-IPCO_US-NW-PACE.yaml
│ │ ├── US-NW-IPCO_US-NW-PACW.yaml
│ │ ├── US-NW-NEVP_US-NW-PACE.yaml
│ │ ├── US-NW-NEVP_US-SW-WALC.yaml
│ │ ├── US-NW-NWMT_US-NW-PACE.yaml
│ │ ├── US-NW-NWMT_US-NW-WAUW.yaml
│ │ ├── US-NW-PACE_US-NW-PACW.yaml
│ │ ├── US-NW-PACE_US-NW-WACM.yaml
│ │ ├── US-NW-PACE_US-SW-AZPS.yaml
│ │ ├── US-NW-PACW_US-NW-PGE.yaml
│ │ ├── US-NW-PSCO_US-NW-WACM.yaml
│ │ ├── US-NW-PSCO_US-SW-PNM.yaml
│ │ ├── US-NW-PSEI_US-NW-SCL.yaml
│ │ ├── US-NW-PSEI_US-NW-TPWR.yaml
│ │ ├── US-NW-WACM_US-NW-WAUW.yaml
│ │ ├── US-NW-WACM_US-SW-AZPS.yaml
│ │ ├── US-NW-WACM_US-SW-PNM.yaml
│ │ ├── US-NW-WACM_US-SW-WALC.yaml
│ │ ├── US-SE-SEPA_US-SE-SOCO.yaml
│ │ ├── US-SE-SOCO_US-TEN-TVA.yaml
│ │ ├── US-SW-AZPS_US-SW-PNM.yaml
│ │ ├── US-SW-AZPS_US-SW-SRP.yaml
│ │ ├── US-SW-AZPS_US-SW-TEPC.yaml
│ │ ├── US-SW-AZPS_US-SW-WALC.yaml
│ │ ├── US-SW-EPE_US-SW-PNM.yaml
│ │ ├── US-SW-EPE_US-SW-TEPC.yaml
│ │ ├── US-SW-PNM_US-SW-SRP.yaml
│ │ ├── US-SW-PNM_US-SW-TEPC.yaml
│ │ ├── US-SW-SRP_US-SW-TEPC.yaml
│ │ ├── US-SW-SRP_US-SW-WALC.yaml
│ │ └── US-SW-TEPC_US-SW-WALC.yaml
│ ├── retired_zones/
│ │ ├── CA-NL-LB.yaml
│ │ ├── CA-NL-NF.yaml
│ │ ├── ES-CN-FVLZ.yaml
│ │ ├── IN-AP.yaml
│ │ ├── IN-AR.yaml
│ │ ├── IN-AS.yaml
│ │ ├── IN-BR.yaml
│ │ ├── IN-CT.yaml
│ │ ├── IN-DL.yaml
│ │ ├── IN-DN.yaml
│ │ ├── IN-GA.yaml
│ │ ├── IN-GJ.yaml
│ │ ├── IN-HP.yaml
│ │ ├── IN-HR.yaml
│ │ ├── IN-JH.yaml
│ │ ├── IN-JK.yaml
│ │ ├── IN-KA.yaml
│ │ ├── IN-KL.yaml
│ │ ├── IN-MH.yaml
│ │ ├── IN-ML.yaml
│ │ ├── IN-MN.yaml
│ │ ├── IN-MP.yaml
│ │ ├── IN-MZ.yaml
│ │ ├── IN-NL.yaml
│ │ ├── IN-OR.yaml
│ │ ├── IN-PB.yaml
│ │ ├── IN-PY.yaml
│ │ ├── IN-RJ.yaml
│ │ ├── IN-SK.yaml
│ │ ├── IN-TN.yaml
│ │ ├── IN-TR.yaml
│ │ ├── IN-UP.yaml
│ │ ├── IN-UT.yaml
│ │ ├── IN-WB.yaml
│ │ ├── IQ-KUR.yaml
│ │ ├── MX-BC.yaml
│ │ ├── MX-BCS.yaml
│ │ ├── MX-CE.yaml
│ │ ├── MX-NE.yaml
│ │ ├── MX-NO.yaml
│ │ ├── MX-NW.yaml
│ │ ├── MX-OC.yaml
│ │ ├── MX-OR.yaml
│ │ ├── MX-PN.yaml
│ │ ├── README.md
│ │ ├── US-FLA-NSB.yaml
│ │ ├── US-HI-HA.yaml
│ │ ├── US-HI-KA.yaml
│ │ ├── US-HI-KH.yaml
│ │ ├── US-HI-LA.yaml
│ │ ├── US-HI-MA.yaml
│ │ ├── US-HI-MO.yaml
│ │ ├── US-HI-NI.yaml
│ │ ├── US-HI-OA.yaml
│ │ ├── US-NW-AVRN.yaml
│ │ ├── US-SE-AEC.yaml
│ │ ├── US-SW-DEAA.yaml
│ │ ├── US-SW-GRMA.yaml
│ │ └── US-SW-HGMA.yaml
│ ├── zone_names.json
│ └── zones/
│ ├── AD.yaml
│ ├── AE.yaml
│ ├── AF.yaml
│ ├── AG.yaml
│ ├── AL.yaml
│ ├── AM.yaml
│ ├── AO.yaml
│ ├── AR.yaml
│ ├── AT.yaml
│ ├── AU-LH.yaml
│ ├── AU-NSW.yaml
│ ├── AU-NT.yaml
│ ├── AU-QLD.yaml
│ ├── AU-SA.yaml
│ ├── AU-TAS-CBI.yaml
│ ├── AU-TAS-FI.yaml
│ ├── AU-TAS-KI.yaml
│ ├── AU-TAS.yaml
│ ├── AU-VIC.yaml
│ ├── AU-WA-RI.yaml
│ ├── AU-WA.yaml
│ ├── AU.yaml
│ ├── AW.yaml
│ ├── AX.yaml
│ ├── AZ.yaml
│ ├── BA.yaml
│ ├── BB.yaml
│ ├── BD.yaml
│ ├── BE.yaml
│ ├── BF.yaml
│ ├── BG.yaml
│ ├── BH.yaml
│ ├── BI.yaml
│ ├── BJ.yaml
│ ├── BM.yaml
│ ├── BN.yaml
│ ├── BO.yaml
│ ├── BR-CS.yaml
│ ├── BR-N.yaml
│ ├── BR-NE.yaml
│ ├── BR-S.yaml
│ ├── BR.yaml
│ ├── BS.yaml
│ ├── BT.yaml
│ ├── BW.yaml
│ ├── BY.yaml
│ ├── BZ.yaml
│ ├── CA-AB.yaml
│ ├── CA-BC.yaml
│ ├── CA-MB.yaml
│ ├── CA-NB.yaml
│ ├── CA-NL.yaml
│ ├── CA-NS.yaml
│ ├── CA-NT.yaml
│ ├── CA-NU.yaml
│ ├── CA-ON.yaml
│ ├── CA-PE.yaml
│ ├── CA-QC.yaml
│ ├── CA-SK.yaml
│ ├── CA-YT.yaml
│ ├── CA.yaml
│ ├── CD.yaml
│ ├── CF.yaml
│ ├── CG.yaml
│ ├── CH.yaml
│ ├── CI.yaml
│ ├── CL-CHP.yaml
│ ├── CL-SEA.yaml
│ ├── CL-SEM.yaml
│ ├── CL-SEN.yaml
│ ├── CM.yaml
│ ├── CN.yaml
│ ├── CO.yaml
│ ├── CR.yaml
│ ├── CU.yaml
│ ├── CV.yaml
│ ├── CW.yaml
│ ├── CY.yaml
│ ├── CZ.yaml
│ ├── DE.yaml
│ ├── DJ.yaml
│ ├── DK-DK1.yaml
│ ├── DK-DK2.yaml
│ ├── DK.yaml
│ ├── DM.yaml
│ ├── DO.yaml
│ ├── DZ.yaml
│ ├── EC.yaml
│ ├── EE.yaml
│ ├── EG.yaml
│ ├── EH.yaml
│ ├── ER.yaml
│ ├── ES-CE.yaml
│ ├── ES-CN-FV.yaml
│ ├── ES-CN-GC.yaml
│ ├── ES-CN-HI.yaml
│ ├── ES-CN-IG.yaml
│ ├── ES-CN-LP.yaml
│ ├── ES-CN-LZ.yaml
│ ├── ES-CN-TE.yaml
│ ├── ES-IB-FO.yaml
│ ├── ES-IB-IZ.yaml
│ ├── ES-IB-MA.yaml
│ ├── ES-IB-ME.yaml
│ ├── ES-ML.yaml
│ ├── ES.yaml
│ ├── ET.yaml
│ ├── FI.yaml
│ ├── FJ.yaml
│ ├── FK.yaml
│ ├── FM.yaml
│ ├── FO-MI.yaml
│ ├── FO-SI.yaml
│ ├── FO.yaml
│ ├── FR-COR.yaml
│ ├── FR.yaml
│ ├── GA.yaml
│ ├── GB-NIR.yaml
│ ├── GB-ZET.yaml
│ ├── GB.yaml
│ ├── GE.yaml
│ ├── GF.yaml
│ ├── GG.yaml
│ ├── GH.yaml
│ ├── GI.yaml
│ ├── GL.yaml
│ ├── GM.yaml
│ ├── GN.yaml
│ ├── GP.yaml
│ ├── GQ.yaml
│ ├── GR.yaml
│ ├── GS.yaml
│ ├── GT.yaml
│ ├── GU.yaml
│ ├── GW.yaml
│ ├── GY.yaml
│ ├── HK.yaml
│ ├── HM.yaml
│ ├── HN.yaml
│ ├── HR.yaml
│ ├── HT.yaml
│ ├── HU.yaml
│ ├── ID.yaml
│ ├── IE.yaml
│ ├── IL.yaml
│ ├── IM.yaml
│ ├── IN-AN.yaml
│ ├── IN-EA.yaml
│ ├── IN-NE.yaml
│ ├── IN-NO.yaml
│ ├── IN-SO.yaml
│ ├── IN-WE.yaml
│ ├── IN.yaml
│ ├── IQ.yaml
│ ├── IR.yaml
│ ├── IS.yaml
│ ├── IT-CNO.yaml
│ ├── IT-CSO.yaml
│ ├── IT-NO.yaml
│ ├── IT-SAR.yaml
│ ├── IT-SIC.yaml
│ ├── IT-SO.yaml
│ ├── IT.yaml
│ ├── JE.yaml
│ ├── JM.yaml
│ ├── JO.yaml
│ ├── JP-CB.yaml
│ ├── JP-CG.yaml
│ ├── JP-HKD.yaml
│ ├── JP-HR.yaml
│ ├── JP-KN.yaml
│ ├── JP-KY.yaml
│ ├── JP-ON.yaml
│ ├── JP-SK.yaml
│ ├── JP-TH.yaml
│ ├── JP-TK.yaml
│ ├── JP.yaml
│ ├── KE.yaml
│ ├── KG.yaml
│ ├── KH.yaml
│ ├── KM.yaml
│ ├── KP.yaml
│ ├── KR.yaml
│ ├── KW.yaml
│ ├── KY.yaml
│ ├── KZ.yaml
│ ├── LA.yaml
│ ├── LB.yaml
│ ├── LC.yaml
│ ├── LI.yaml
│ ├── LK.yaml
│ ├── LR.yaml
│ ├── LS.yaml
│ ├── LT.yaml
│ ├── LU.yaml
│ ├── LV.yaml
│ ├── LY.yaml
│ ├── MA.yaml
│ ├── MC.yaml
│ ├── MD.yaml
│ ├── ME.yaml
│ ├── MG.yaml
│ ├── MK.yaml
│ ├── ML.yaml
│ ├── MM.yaml
│ ├── MN.yaml
│ ├── MO.yaml
│ ├── MQ.yaml
│ ├── MR.yaml
│ ├── MT.yaml
│ ├── MU.yaml
│ ├── MV.yaml
│ ├── MW.yaml
│ ├── MX.yaml
│ ├── MY-EM.yaml
│ ├── MY-WM.yaml
│ ├── MY.yaml
│ ├── MZ.yaml
│ ├── NA.yaml
│ ├── NC.yaml
│ ├── NE.yaml
│ ├── NG.yaml
│ ├── NI.yaml
│ ├── NL.yaml
│ ├── NO-NO1.yaml
│ ├── NO-NO2.yaml
│ ├── NO-NO3.yaml
│ ├── NO-NO4.yaml
│ ├── NO-NO5.yaml
│ ├── NO.yaml
│ ├── NP.yaml
│ ├── NZ-NZA.yaml
│ ├── NZ-NZC.yaml
│ ├── NZ-NZST.yaml
│ ├── NZ.yaml
│ ├── OM.yaml
│ ├── PA.yaml
│ ├── PE.yaml
│ ├── PF.yaml
│ ├── PG.yaml
│ ├── PH-LU.yaml
│ ├── PH-MI.yaml
│ ├── PH-VI.yaml
│ ├── PH.yaml
│ ├── PK.yaml
│ ├── PL.yaml
│ ├── PM.yaml
│ ├── PR.yaml
│ ├── PS.yaml
│ ├── PT-AC.yaml
│ ├── PT-MA.yaml
│ ├── PT.yaml
│ ├── PW.yaml
│ ├── PY.yaml
│ ├── QA.yaml
│ ├── RE.yaml
│ ├── RO.yaml
│ ├── RS.yaml
│ ├── RU-1.yaml
│ ├── RU-2.yaml
│ ├── RU-AS.yaml
│ ├── RU-EU.yaml
│ ├── RU-FE.yaml
│ ├── RU-KGD.yaml
│ ├── RU.yaml
│ ├── RW.yaml
│ ├── SA.yaml
│ ├── SB.yaml
│ ├── SC.yaml
│ ├── SD.yaml
│ ├── SE-SE1.yaml
│ ├── SE-SE2.yaml
│ ├── SE-SE3.yaml
│ ├── SE-SE4.yaml
│ ├── SE.yaml
│ ├── SG.yaml
│ ├── SI.yaml
│ ├── SJ.yaml
│ ├── SK.yaml
│ ├── SL.yaml
│ ├── SN.yaml
│ ├── SO.yaml
│ ├── SR.yaml
│ ├── SS.yaml
│ ├── ST.yaml
│ ├── SV.yaml
│ ├── SY.yaml
│ ├── SZ.yaml
│ ├── TD.yaml
│ ├── TF.yaml
│ ├── TG.yaml
│ ├── TH.yaml
│ ├── TJ.yaml
│ ├── TL.yaml
│ ├── TM.yaml
│ ├── TN.yaml
│ ├── TO.yaml
│ ├── TR.yaml
│ ├── TT.yaml
│ ├── TW.yaml
│ ├── TZ.yaml
│ ├── UA-CR.yaml
│ ├── UA.yaml
│ ├── UG.yaml
│ ├── US-AK-SEAPA.yaml
│ ├── US-AK.yaml
│ ├── US-CAL-BANC.yaml
│ ├── US-CAL-CISO.yaml
│ ├── US-CAL-IID.yaml
│ ├── US-CAL-LDWP.yaml
│ ├── US-CAL-TIDC.yaml
│ ├── US-CAR-CPLE.yaml
│ ├── US-CAR-CPLW.yaml
│ ├── US-CAR-DUK.yaml
│ ├── US-CAR-SC.yaml
│ ├── US-CAR-SCEG.yaml
│ ├── US-CAR-YAD.yaml
│ ├── US-CENT-SPA.yaml
│ ├── US-CENT-SWPP.yaml
│ ├── US-FLA-FMPP.yaml
│ ├── US-FLA-FPC.yaml
│ ├── US-FLA-FPL.yaml
│ ├── US-FLA-GVL.yaml
│ ├── US-FLA-HST.yaml
│ ├── US-FLA-JEA.yaml
│ ├── US-FLA-SEC.yaml
│ ├── US-FLA-TAL.yaml
│ ├── US-FLA-TEC.yaml
│ ├── US-HI.yaml
│ ├── US-MIDA-PJM.yaml
│ ├── US-MIDW-AECI.yaml
│ ├── US-MIDW-LGEE.yaml
│ ├── US-MIDW-MISO.yaml
│ ├── US-NE-ISNE.yaml
│ ├── US-NW-AVA.yaml
│ ├── US-NW-BPAT.yaml
│ ├── US-NW-CHPD.yaml
│ ├── US-NW-DOPD.yaml
│ ├── US-NW-GCPD.yaml
│ ├── US-NW-GRID.yaml
│ ├── US-NW-IPCO.yaml
│ ├── US-NW-NEVP.yaml
│ ├── US-NW-NWMT.yaml
│ ├── US-NW-PACE.yaml
│ ├── US-NW-PACW.yaml
│ ├── US-NW-PGE.yaml
│ ├── US-NW-PSCO.yaml
│ ├── US-NW-PSEI.yaml
│ ├── US-NW-SCL.yaml
│ ├── US-NW-TPWR.yaml
│ ├── US-NW-WACM.yaml
│ ├── US-NW-WAUW.yaml
│ ├── US-NY-NYIS.yaml
│ ├── US-SE-SEPA.yaml
│ ├── US-SE-SOCO.yaml
│ ├── US-SW-AZPS.yaml
│ ├── US-SW-EPE.yaml
│ ├── US-SW-PNM.yaml
│ ├── US-SW-SRP.yaml
│ ├── US-SW-TEPC.yaml
│ ├── US-SW-WALC.yaml
│ ├── US-TEN-TVA.yaml
│ ├── US-TEX-ERCO.yaml
│ ├── US.yaml
│ ├── UY.yaml
│ ├── UZ.yaml
│ ├── VC.yaml
│ ├── VE.yaml
│ ├── VI.yaml
│ ├── VN.yaml
│ ├── VU.yaml
│ ├── WS.yaml
│ ├── XK.yaml
│ ├── XX.yaml
│ ├── YE.yaml
│ ├── YT.yaml
│ ├── ZA.yaml
│ ├── ZM.yaml
│ └── ZW.yaml
├── electricitymap/
│ └── contrib/
│ ├── capacity_parsers/
│ │ ├── CA_ON.py
│ │ ├── CEA.py
│ │ ├── CL_SEN.py
│ │ ├── DE.py
│ │ ├── EIA.py
│ │ ├── EMBER.py
│ │ ├── ENTSOE.py
│ │ ├── FI.py
│ │ ├── GB.py
│ │ ├── IRENA.py
│ │ ├── MY_WM.py
│ │ ├── ONS.py
│ │ ├── OPENELECTRICITY.py
│ │ ├── README.md
│ │ ├── REE.py
│ │ ├── __init__.py
│ │ └── tests/
│ │ ├── __init__.py
│ │ ├── __snapshots__/
│ │ │ └── test_OPENELECTRICITY.ambr
│ │ ├── conftest.py
│ │ ├── mocks/
│ │ │ └── OPENELECTRICITY/
│ │ │ └── AU-QLD_capacities.json
│ │ ├── test_ONS.py
│ │ └── test_OPENELECTRICITY.py
│ ├── config/
│ │ ├── __init__.py
│ │ ├── capacity.py
│ │ ├── co2eq_parameters.py
│ │ ├── constants.py
│ │ ├── data_center_model.py
│ │ ├── emission_factors_lookup.py
│ │ ├── model.py
│ │ ├── py.typed
│ │ ├── reading.py
│ │ ├── types.py
│ │ └── zones.py
│ ├── lib/
│ │ ├── __init__.py
│ │ ├── data_types.py
│ │ ├── models/
│ │ │ ├── __init__.py
│ │ │ ├── constants.py
│ │ │ ├── event_lists.py
│ │ │ └── events.py
│ │ ├── tests/
│ │ │ ├── __init__.py
│ │ │ ├── test_event_lists.py
│ │ │ └── test_events.py
│ │ └── types.py
│ ├── parsers/
│ │ ├── AEMO.py
│ │ ├── AW.py
│ │ ├── AX.py
│ │ ├── BB.py
│ │ ├── BE.py
│ │ ├── BG.py
│ │ ├── CAMMESA.py
│ │ ├── CA_AB.py
│ │ ├── CA_BC.py
│ │ ├── CA_NB.py
│ │ ├── CA_NS.py
│ │ ├── CA_ON.py
│ │ ├── CA_QC.py
│ │ ├── CA_SK.py
│ │ ├── CEB.py
│ │ ├── CENACE.py
│ │ ├── CH.py
│ │ ├── CL.py
│ │ ├── CNDC.py
│ │ ├── CO.py
│ │ ├── CR.py
│ │ ├── CY.py
│ │ ├── CZ.py
│ │ ├── DK.py
│ │ ├── DO.py
│ │ ├── EC.py
│ │ ├── ECO2MIX.py
│ │ ├── EIA.py
│ │ ├── ELEXON.py
│ │ ├── ENERCAL.py
│ │ ├── ENTE.py
│ │ ├── ENTSOE.py
│ │ ├── ERP_PGCB.py
│ │ ├── ES.py
│ │ ├── ESIOS.py
│ │ ├── ESKOM.py
│ │ ├── ESTADISTICO_UT.py
│ │ ├── FO.py
│ │ ├── FR.py
│ │ ├── FR_O.py
│ │ ├── GB.py
│ │ ├── GCCIA.py
│ │ ├── GSO.py
│ │ ├── GT.py
│ │ ├── HN.py
│ │ ├── IEMOP.py
│ │ ├── IL.py
│ │ ├── IN.py
│ │ ├── IN_DL.py
│ │ ├── IN_EA.py
│ │ ├── IN_HP.py
│ │ ├── IN_KA.py
│ │ ├── IN_MH.py
│ │ ├── IN_PB.py
│ │ ├── IN_UT.py
│ │ ├── IN_WE.py
│ │ ├── JAO.py
│ │ ├── JP.py
│ │ ├── JP_KN.py
│ │ ├── JP_KY.py
│ │ ├── JP_SK.py
│ │ ├── KPX.py
│ │ ├── KW.py
│ │ ├── MD.py
│ │ ├── MN.py
│ │ ├── NED.py
│ │ ├── NG.py
│ │ ├── NI.py
│ │ ├── NL.py
│ │ ├── NO-NO4_SE.py
│ │ ├── NORDPOOL.py
│ │ ├── NTESMO.py
│ │ ├── NZ.py
│ │ ├── ONS.py
│ │ ├── OPENNEM.py
│ │ ├── PA.py
│ │ ├── PE.py
│ │ ├── PF.py
│ │ ├── PrinceEdwardIsland.py
│ │ ├── README.md
│ │ ├── RU.py
│ │ ├── SE.py
│ │ ├── SEAPA.py
│ │ ├── SG.py
│ │ ├── SMARTGRIDDASHBOARD.py
│ │ ├── TAIPOWER.py
│ │ ├── TH.py
│ │ ├── TR.py
│ │ ├── UA.py
│ │ ├── US_CA.py
│ │ ├── US_ERCOT.py
│ │ ├── US_MISO.py
│ │ ├── US_NEISO.py
│ │ ├── US_NY.py
│ │ ├── US_PJM.py
│ │ ├── US_PREPA.py
│ │ ├── US_SPP.py
│ │ ├── UY.py
│ │ ├── VN.py
│ │ ├── YUKONENERGY.py
│ │ ├── __init__.py
│ │ ├── ajenti.py
│ │ ├── amper_landsnet.py
│ │ ├── archived/
│ │ │ ├── AM.py
│ │ │ ├── AX.py
│ │ │ ├── DK_old.py
│ │ │ ├── GB_NIR.py
│ │ │ ├── GE.py
│ │ │ ├── HOPS.py
│ │ │ ├── IN_AP.py
│ │ │ ├── IN_CT.py
│ │ │ ├── IN_GJ.py
│ │ │ ├── IN_UP.py
│ │ │ ├── IQ.py
│ │ │ ├── JP_ISEP.py
│ │ │ ├── SE.py
│ │ │ ├── US_BPA.py
│ │ │ ├── US_HI.py
│ │ │ ├── XK.py
│ │ │ └── statnett.py
│ │ ├── eSett.py
│ │ ├── email_grid_alerts.py
│ │ ├── examples/
│ │ │ ├── example_parser.py
│ │ │ └── production.md
│ │ ├── lib/
│ │ │ ├── IN.py
│ │ │ ├── __init__.py
│ │ │ ├── config.py
│ │ │ ├── digits_comma.traineddata
│ │ │ ├── exceptions.py
│ │ │ ├── parsers.py
│ │ │ ├── quality.py
│ │ │ ├── session.py
│ │ │ ├── tests/
│ │ │ │ ├── __snapshots__/
│ │ │ │ │ └── test_config.ambr
│ │ │ │ └── test_config.py
│ │ │ ├── utils.py
│ │ │ ├── validation.py
│ │ │ ├── web.py
│ │ │ └── zonekey.py
│ │ ├── occtonet.py
│ │ └── tests/
│ │ ├── __init__.py
│ │ ├── __snapshots__/
│ │ │ ├── test_AEMO/
│ │ │ │ ├── test_snapshot_fetch_consumption_forecast[AU-NSW].ambr
│ │ │ │ ├── test_snapshot_fetch_consumption_forecast[AU-QLD].ambr
│ │ │ │ ├── test_snapshot_fetch_consumption_forecast[AU-SA].ambr
│ │ │ │ ├── test_snapshot_fetch_consumption_forecast[AU-TAS].ambr
│ │ │ │ └── test_snapshot_fetch_consumption_forecast[AU-VIC].ambr
│ │ │ ├── test_AW.ambr
│ │ │ ├── test_BE/
│ │ │ │ └── test_fetch_production.ambr
│ │ │ ├── test_BG.ambr
│ │ │ ├── test_CAMMESA.ambr
│ │ │ ├── test_CA_AB.ambr
│ │ │ ├── test_CA_CQ.ambr
│ │ │ ├── test_CA_ON.ambr
│ │ │ ├── test_CEB.ambr
│ │ │ ├── test_CL.ambr
│ │ │ ├── test_CNDC.ambr
│ │ │ ├── test_CO.ambr
│ │ │ ├── test_CR.ambr
│ │ │ ├── test_CY.ambr
│ │ │ ├── test_CZ/
│ │ │ │ ├── test_fetch_exchange[AT].ambr
│ │ │ │ ├── test_fetch_exchange[DE].ambr
│ │ │ │ └── test_fetch_exchange[PL].ambr
│ │ │ ├── test_CZ.ambr
│ │ │ ├── test_DK.ambr
│ │ │ ├── test_DO.ambr
│ │ │ ├── test_EIA.ambr
│ │ │ ├── test_ENERCAL.ambr
│ │ │ ├── test_ENTE.ambr
│ │ │ ├── test_ENTSOE/
│ │ │ │ ├── test_a03_curve_decompression[fake_time_series.xml].ambr
│ │ │ │ ├── test_a03_curve_decompression[fake_time_series_all_0.xml].ambr
│ │ │ │ ├── test_production_with_snapshot[FI].ambr
│ │ │ │ ├── test_production_with_snapshot[LU].ambr
│ │ │ │ ├── test_production_with_snapshot[NO-NO5].ambr
│ │ │ │ ├── test_production_with_snapshot[SE-SE4].ambr
│ │ │ │ ├── test_wind_and_solar_forecasts_by_type[current].ambr
│ │ │ │ ├── test_wind_and_solar_forecasts_by_type[day_ahead].ambr
│ │ │ │ └── test_wind_and_solar_forecasts_by_type[intraday].ambr
│ │ │ ├── test_ENTSOE.ambr
│ │ │ ├── test_ERP_PGCB/
│ │ │ │ ├── test_exchanges[None].ambr
│ │ │ │ ├── test_exchanges[target_datetime1].ambr
│ │ │ │ ├── test_fetch_consumption[None].ambr
│ │ │ │ ├── test_fetch_consumption[target_datetime1].ambr
│ │ │ │ ├── test_fetch_production[None].ambr
│ │ │ │ └── test_fetch_production[target_datetime1].ambr
│ │ │ ├── test_ES.ambr
│ │ │ ├── test_ESIOS.ambr
│ │ │ ├── test_ESKOM.ambr
│ │ │ ├── test_ESTADISTICO_UT.ambr
│ │ │ ├── test_FO/
│ │ │ │ ├── test_fetch_production_historical[DST-FO-MI].ambr
│ │ │ │ ├── test_fetch_production_historical[DST-FO-SI].ambr
│ │ │ │ ├── test_fetch_production_historical[DST-FO].ambr
│ │ │ │ ├── test_fetch_production_historical[SDT-FO-MI].ambr
│ │ │ │ ├── test_fetch_production_historical[SDT-FO-SI].ambr
│ │ │ │ ├── test_fetch_production_historical[SDT-FO].ambr
│ │ │ │ ├── test_fetch_production_live[FO-MI].ambr
│ │ │ │ ├── test_fetch_production_live[FO-SI].ambr
│ │ │ │ └── test_fetch_production_live[FO].ambr
│ │ │ ├── test_FR.ambr
│ │ │ ├── test_GB/
│ │ │ │ ├── test_fetch_price_live[AT].ambr
│ │ │ │ ├── test_fetch_price_live[BE].ambr
│ │ │ │ ├── test_fetch_price_live[CH].ambr
│ │ │ │ ├── test_fetch_price_live[ES].ambr
│ │ │ │ ├── test_fetch_price_live[FR].ambr
│ │ │ │ ├── test_fetch_price_live[GB].ambr
│ │ │ │ ├── test_fetch_price_live[IT].ambr
│ │ │ │ ├── test_fetch_price_live[NL].ambr
│ │ │ │ └── test_fetch_price_live[PT].ambr
│ │ │ ├── test_GB.ambr
│ │ │ ├── test_GT.ambr
│ │ │ ├── test_HN/
│ │ │ │ ├── test_fetch_exchange[GT-HN].ambr
│ │ │ │ ├── test_fetch_exchange[HN-NI].ambr
│ │ │ │ ├── test_fetch_exchange[HN-SV].ambr
│ │ │ │ └── test_fetch_exchange[HN-US].ambr
│ │ │ ├── test_HN.ambr
│ │ │ ├── test_IEMOP/
│ │ │ │ ├── test_production[PH-LU].ambr
│ │ │ │ ├── test_production[PH-MI].ambr
│ │ │ │ └── test_production[PH-VI].ambr
│ │ │ ├── test_IN.ambr
│ │ │ ├── test_JAO/
│ │ │ │ ├── test_fetch_core_external_atc_day_ahead_de_dk_dk1.ambr
│ │ │ │ ├── test_fetch_core_max_bex_day_ahead_de_fr.ambr
│ │ │ │ ├── test_fetch_core_scheduled_exchanges_day_ahead_de_fr.ambr
│ │ │ │ ├── test_fetch_nordic_max_bex_day_ahead_no1_se3.ambr
│ │ │ │ ├── test_fetch_nordic_max_bflow_day_ahead_no1_se3.ambr
│ │ │ │ └── test_fetch_shadow_auction_atc_day_ahead_de_fr.ambr
│ │ │ ├── test_JP.ambr
│ │ │ ├── test_JP_KY.ambr
│ │ │ ├── test_KPX.ambr
│ │ │ ├── test_MD/
│ │ │ │ ├── test_fetch_exchange_forecast_historical[RO].ambr
│ │ │ │ ├── test_fetch_exchange_forecast_historical[UA].ambr
│ │ │ │ ├── test_fetch_exchange_forecast_live[RO].ambr
│ │ │ │ ├── test_fetch_exchange_forecast_live[UA].ambr
│ │ │ │ ├── test_fetch_exchange_historical[RO].ambr
│ │ │ │ ├── test_fetch_exchange_historical[UA].ambr
│ │ │ │ ├── test_fetch_exchange_live[RO].ambr
│ │ │ │ ├── test_fetch_exchange_live[UA].ambr
│ │ │ │ ├── test_fetch_price_historical[historical_datetime0].ambr
│ │ │ │ ├── test_fetch_price_historical[historical_datetime10].ambr
│ │ │ │ ├── test_fetch_price_historical[historical_datetime1].ambr
│ │ │ │ ├── test_fetch_price_historical[historical_datetime2].ambr
│ │ │ │ ├── test_fetch_price_historical[historical_datetime3].ambr
│ │ │ │ ├── test_fetch_price_historical[historical_datetime4].ambr
│ │ │ │ ├── test_fetch_price_historical[historical_datetime5].ambr
│ │ │ │ ├── test_fetch_price_historical[historical_datetime6].ambr
│ │ │ │ ├── test_fetch_price_historical[historical_datetime7].ambr
│ │ │ │ ├── test_fetch_price_historical[historical_datetime8].ambr
│ │ │ │ └── test_fetch_price_historical[historical_datetime9].ambr
│ │ │ ├── test_MD.ambr
│ │ │ ├── test_NORDPOOL.ambr
│ │ │ ├── test_NTESMO.ambr
│ │ │ ├── test_NZ.ambr
│ │ │ ├── test_ONS/
│ │ │ │ ├── test_snapshot_fetch_exchange[AR-BR-S-BR.json].ambr
│ │ │ │ ├── test_snapshot_fetch_exchange[AR-BR-S-BR_negative_solar.json].ambr
│ │ │ │ ├── test_snapshot_fetch_exchange[AR-BR-S-data.json].ambr
│ │ │ │ ├── test_snapshot_fetch_exchange[BR-CS-BR-N-BR.json].ambr
│ │ │ │ ├── test_snapshot_fetch_exchange[BR-CS-BR-N-BR_negative_solar.json].ambr
│ │ │ │ ├── test_snapshot_fetch_exchange[BR-CS-BR-N-data.json].ambr
│ │ │ │ ├── test_snapshot_fetch_exchange[BR-CS-BR-NE-BR.json].ambr
│ │ │ │ ├── test_snapshot_fetch_exchange[BR-CS-BR-NE-BR_negative_solar.json].ambr
│ │ │ │ ├── test_snapshot_fetch_exchange[BR-CS-BR-NE-data.json].ambr
│ │ │ │ ├── test_snapshot_fetch_exchange[BR-CS-BR-S-BR.json].ambr
│ │ │ │ ├── test_snapshot_fetch_exchange[BR-CS-BR-S-BR_negative_solar.json].ambr
│ │ │ │ ├── test_snapshot_fetch_exchange[BR-CS-BR-S-data.json].ambr
│ │ │ │ ├── test_snapshot_fetch_exchange[BR-N-BR-NE-BR.json].ambr
│ │ │ │ ├── test_snapshot_fetch_exchange[BR-N-BR-NE-BR_negative_solar.json].ambr
│ │ │ │ ├── test_snapshot_fetch_exchange[BR-N-BR-NE-data.json].ambr
│ │ │ │ ├── test_snapshot_fetch_exchange[BR-S-PY-BR.json].ambr
│ │ │ │ ├── test_snapshot_fetch_exchange[BR-S-PY-BR_negative_solar.json].ambr
│ │ │ │ ├── test_snapshot_fetch_exchange[BR-S-PY-data.json].ambr
│ │ │ │ ├── test_snapshot_fetch_exchange[BR-S-UY-BR.json].ambr
│ │ │ │ ├── test_snapshot_fetch_exchange[BR-S-UY-BR_negative_solar.json].ambr
│ │ │ │ ├── test_snapshot_fetch_exchange[BR-S-UY-data.json].ambr
│ │ │ │ ├── test_snapshot_fetch_production[BR-CS-BR.json].ambr
│ │ │ │ ├── test_snapshot_fetch_production[BR-CS-BR_negative_solar.json].ambr
│ │ │ │ ├── test_snapshot_fetch_production[BR-CS-data.json].ambr
│ │ │ │ ├── test_snapshot_fetch_production[BR-N-BR.json].ambr
│ │ │ │ ├── test_snapshot_fetch_production[BR-N-BR_negative_solar.json].ambr
│ │ │ │ ├── test_snapshot_fetch_production[BR-N-data.json].ambr
│ │ │ │ ├── test_snapshot_fetch_production[BR-NE-BR.json].ambr
│ │ │ │ ├── test_snapshot_fetch_production[BR-NE-BR_negative_solar.json].ambr
│ │ │ │ ├── test_snapshot_fetch_production[BR-NE-data.json].ambr
│ │ │ │ ├── test_snapshot_fetch_production[BR-S-BR.json].ambr
│ │ │ │ ├── test_snapshot_fetch_production[BR-S-BR_negative_solar.json].ambr
│ │ │ │ └── test_snapshot_fetch_production[BR-S-data.json].ambr
│ │ │ ├── test_OPENNEM/
│ │ │ │ ├── test_price[AU-SA].ambr
│ │ │ │ ├── test_production[AU-NSW].ambr
│ │ │ │ ├── test_production[AU-QLD].ambr
│ │ │ │ ├── test_production[AU-SA].ambr
│ │ │ │ ├── test_production[AU-TAS].ambr
│ │ │ │ ├── test_production[AU-VIC].ambr
│ │ │ │ └── test_production[AU-WA].ambr
│ │ │ ├── test_OPENNEM.ambr
│ │ │ ├── test_PA.ambr
│ │ │ ├── test_PE.ambr
│ │ │ ├── test_PF.ambr
│ │ │ ├── test_RU/
│ │ │ │ ├── test_snapshot_fetch_exchange[AZ-RU-1-10].ambr
│ │ │ │ ├── test_snapshot_fetch_exchange[BY-RU-1-10].ambr
│ │ │ │ ├── test_snapshot_fetch_exchange[CN-RU-AS-10].ambr
│ │ │ │ ├── test_snapshot_fetch_exchange[CN-RU-AS-11].ambr
│ │ │ │ ├── test_snapshot_fetch_exchange[GE-RU-1-10].ambr
│ │ │ │ ├── test_snapshot_fetch_exchange[KZ-RU-1-10].ambr
│ │ │ │ ├── test_snapshot_fetch_exchange[KZ-RU-1-11].ambr
│ │ │ │ ├── test_snapshot_fetch_exchange[KZ-RU-2-10].ambr
│ │ │ │ ├── test_snapshot_fetch_exchange[MN-RU-2-10].ambr
│ │ │ │ ├── test_snapshot_fetch_exchange[RU-1-FI-10].ambr
│ │ │ │ ├── test_snapshot_fetch_exchange[RU-1-RU-2-10].ambr
│ │ │ │ ├── test_snapshot_fetch_exchange[RU-1-UA-CR-10].ambr
│ │ │ │ ├── test_snapshot_fetch_exchange[RU-KGD-LT-10].ambr
│ │ │ │ ├── test_snapshot_fetch_exchange[UA-RU-1-10].ambr
│ │ │ │ ├── test_snapshot_fetch_production[RU-1].ambr
│ │ │ │ ├── test_snapshot_fetch_production[RU-2].ambr
│ │ │ │ └── test_snapshot_fetch_production[RU-AS].ambr
│ │ │ ├── test_RU.ambr
│ │ │ ├── test_SMARTGRIDDASHBOARD.ambr
│ │ │ ├── test_TAIPOWER.ambr
│ │ │ ├── test_TR/
│ │ │ │ ├── test_fetch_production[None].ambr
│ │ │ │ └── test_fetch_production[target_datetime1].ambr
│ │ │ ├── test_US_CA.ambr
│ │ │ ├── test_US_ERCOT.ambr
│ │ │ ├── test_US_MISO.ambr
│ │ │ ├── test_US_NEISO/
│ │ │ │ ├── test_fetch_exchange[CA-NB-US-NE-ISNE].ambr
│ │ │ │ ├── test_fetch_exchange[CA-QC-US-NE-ISNE].ambr
│ │ │ │ └── test_fetch_exchange[US-NE-ISNE-US-NY-NYIS].ambr
│ │ │ ├── test_US_NEISO.ambr
│ │ │ ├── test_US_NY.ambr
│ │ │ ├── test_US_PJM.ambr
│ │ │ ├── test_US_SPP.ambr
│ │ │ ├── test_UY/
│ │ │ │ ├── test_fetch_exchange[AR].ambr
│ │ │ │ └── test_fetch_exchange[BR-S].ambr
│ │ │ ├── test_UY.ambr
│ │ │ ├── test_amper_landsnet.ambr
│ │ │ └── test_config/
│ │ │ ├── test_snapshot_emission_factor[FR].ambr
│ │ │ └── test_snapshot_emission_factor[KR].ambr
│ │ ├── conftest.py
│ │ ├── lib/
│ │ │ ├── __init__.py
│ │ │ ├── test_IN.py
│ │ │ ├── test_exceptions.py
│ │ │ ├── test_web.py
│ │ │ └── test_zonekey.py
│ │ ├── mocks/
│ │ │ ├── AU/
│ │ │ │ ├── AU_TAS_FI_payload1.json
│ │ │ │ ├── AU_TAS_KI_payload1.json
│ │ │ │ ├── AU_WA_RI_payload1.json
│ │ │ │ └── NTESMO.xlsx
│ │ │ ├── AW/
│ │ │ │ └── production.json
│ │ │ ├── BE/
│ │ │ │ ├── entsoe_production.xml
│ │ │ │ └── production.json
│ │ │ ├── BG/
│ │ │ │ └── production_live.json
│ │ │ ├── CA_AB/
│ │ │ │ ├── solar_rpt_longterm.csv
│ │ │ │ └── wind_rpt_longterm.csv
│ │ │ ├── CA_ON/
│ │ │ │ ├── adequacy_report_20250228.xml
│ │ │ │ └── var_gen_forecast_summary_report_20250228.xml
│ │ │ ├── CEB/
│ │ │ │ └── response.text
│ │ │ ├── CENACE/
│ │ │ │ └── DemandaRegional.html
│ │ │ ├── CL/
│ │ │ │ └── response_historical_20240224.json
│ │ │ ├── CNDC/
│ │ │ │ ├── data.json
│ │ │ │ └── index.html
│ │ │ ├── CO/
│ │ │ │ ├── cons_dt.json
│ │ │ │ ├── cons_live.json
│ │ │ │ ├── price_dt.json
│ │ │ │ ├── price_live.json
│ │ │ │ ├── prod1_dt.json
│ │ │ │ ├── prod1_live.json
│ │ │ │ ├── prod2_dt.json
│ │ │ │ └── prod2_live.json
│ │ │ ├── CR/
│ │ │ │ ├── exchange_live.json
│ │ │ │ ├── production_20210716.json
│ │ │ │ └── production_live.json
│ │ │ ├── CY/
│ │ │ │ ├── response_historical_20240318.html
│ │ │ │ └── response_realtime_20240401.html
│ │ │ ├── CZ/
│ │ │ │ └── CrossborderPowerFlows.xml
│ │ │ ├── Cammesa/
│ │ │ │ ├── conventional_production.json
│ │ │ │ ├── exchanges.json
│ │ │ │ └── renewable_production.json
│ │ │ ├── DK/
│ │ │ │ ├── ElectricityProdex5MinRealtime.json
│ │ │ │ └── Forecasts_5Min.json
│ │ │ ├── DO/
│ │ │ │ └── production.html
│ │ │ ├── EIA/
│ │ │ │ ├── US-FLA-FPC_US-FLA-FPL_exchange.json
│ │ │ │ ├── US-FLA-FPC_US-FLA-NSB_exchange.json
│ │ │ │ ├── US-NW-BPAT-US-NW-NWMT-exchange.json
│ │ │ │ ├── US-NW-PGE-with-nulls.json
│ │ │ │ ├── US_CAL_IID-battery_storage.json
│ │ │ │ ├── US_CAR_SC-nuclear.json
│ │ │ │ ├── US_CAR_SCEG-nuclear.json
│ │ │ │ ├── US_NW_AVRN-gas.json
│ │ │ │ ├── US_NW_AVRN-other.json
│ │ │ │ ├── US_NW_AVRN-wind.json
│ │ │ │ ├── US_NW_BPAT-consumption.json
│ │ │ │ ├── US_NW_BPAT-wind.json
│ │ │ │ ├── US_NW_PACW-gas.json
│ │ │ │ ├── US_SMTH-coal.json
│ │ │ │ ├── US_SW_DEAA-hydro.json
│ │ │ │ ├── US_SW_HGMA-hydro.json
│ │ │ │ └── US_SW_SRP-hydro.json
│ │ │ ├── ENERCAL/
│ │ │ │ └── production.json
│ │ │ ├── ENTE/
│ │ │ │ └── response_generic_20240403.json
│ │ │ ├── ENTSOE/
│ │ │ │ ├── BE_NL_exchange_forecast_exports.xml
│ │ │ │ ├── BE_NL_exchange_forecast_imports.xml
│ │ │ │ ├── DK-DK1_DK-DK2_capacity_week_ahead_export.xml
│ │ │ │ ├── DK-DK1_DK-DK2_capacity_week_ahead_import.xml
│ │ │ │ ├── DK-DK1_GB_exchange_exports.xml
│ │ │ │ ├── DK-DK1_GB_exchange_imports.xml
│ │ │ │ ├── DK-DK1_consumption.xml
│ │ │ │ ├── DK-DK2_SE-SE4_exchange_forecast_exports.xml
│ │ │ │ ├── DK-DK2_SE-SE4_exchange_forecast_imports.xml
│ │ │ │ ├── DK-DK2_consumption_forecast.xml
│ │ │ │ ├── EE_FI_exchange_forecast_exports.xml
│ │ │ │ ├── EE_FI_exchange_forecast_imports.xml
│ │ │ │ ├── ES_FR_capacity_day_ahead_export.xml
│ │ │ │ ├── ES_FR_capacity_day_ahead_import.xml
│ │ │ │ ├── ES_FR_capacity_month_ahead_export.xml
│ │ │ │ ├── ES_FR_capacity_month_ahead_import.xml
│ │ │ │ ├── ES_day_ahead_price.xml
│ │ │ │ ├── ES_intraday_price.xml
│ │ │ │ ├── FI_production.xml
│ │ │ │ ├── FR-COR_IT-SAR_AC_exchange_exports.xml
│ │ │ │ ├── FR-COR_IT-SAR_AC_exchange_forecast_exports.xml
│ │ │ │ ├── FR-COR_IT-SAR_AC_exchange_forecast_imports.xml
│ │ │ │ ├── FR-COR_IT-SAR_AC_exchange_imports.xml
│ │ │ │ ├── FR-COR_IT-SAR_DC_exchange_exports.xml
│ │ │ │ ├── FR-COR_IT-SAR_DC_exchange_forecast_exports.xml
│ │ │ │ ├── FR-COR_IT-SAR_DC_exchange_forecast_imports.xml
│ │ │ │ ├── FR-COR_IT-SAR_DC_exchange_imports.xml
│ │ │ │ ├── FR_prices.xml
│ │ │ │ ├── LU_production.xml
│ │ │ │ ├── NO-NO5_production-negatives.xml
│ │ │ │ ├── NO-NO5_production.xml
│ │ │ │ ├── SE-SE3_generation_forecast.xml
│ │ │ │ ├── SE-SE4_production.xml
│ │ │ │ ├── fake_time_series.xml
│ │ │ │ ├── fake_time_series_all_0.xml
│ │ │ │ ├── wind_solar_forecast_FI_CURRENT.xml
│ │ │ │ ├── wind_solar_forecast_FI_DAY_AHEAD.xml
│ │ │ │ └── wind_solar_forecast_FI_INTRADAY.xml
│ │ │ ├── ERCOT.json
│ │ │ ├── ERCOT_demand.json
│ │ │ ├── ERCOT_generation.json
│ │ │ ├── ERCOT_storage.json
│ │ │ ├── ERP_PGCB/
│ │ │ │ ├── historical.html
│ │ │ │ └── latest.html
│ │ │ ├── ES/
│ │ │ │ ├── demandaGeneracionBaleares.json
│ │ │ │ ├── demandaGeneracionCanarias.json
│ │ │ │ └── demandaGeneracionPeninsula.json
│ │ │ ├── ESIOS_ES_MA.json
│ │ │ ├── ESKOM/
│ │ │ │ └── Station_Build_Up.csv
│ │ │ ├── ESTADISTICO_UT/
│ │ │ │ ├── get_historical.html
│ │ │ │ ├── get_live.html
│ │ │ │ ├── post_historical.html
│ │ │ │ └── post_live.html
│ │ │ ├── FO/
│ │ │ │ ├── sev_api_historical_2023_02_16.json
│ │ │ │ ├── sev_api_historical_2023_07_16.json
│ │ │ │ ├── sev_api_live_0.json
│ │ │ │ └── sev_api_live_1.json
│ │ │ ├── FR/
│ │ │ │ └── response.json
│ │ │ ├── FR_O/
│ │ │ │ ├── FR_COR.json
│ │ │ │ ├── FR_GP.json
│ │ │ │ └── FR_RE.json
│ │ │ ├── GB/
│ │ │ │ ├── bmu_fuel_type.xlsx
│ │ │ │ ├── bmunits.json
│ │ │ │ ├── bmvalues.json
│ │ │ │ ├── boalf.json
│ │ │ │ ├── eco2mix_api_historical_20220716.xml
│ │ │ │ ├── eco2mix_api_live.xml
│ │ │ │ └── production.json
│ │ │ ├── GT/
│ │ │ │ ├── wl12_api_historical_20230716_0.json
│ │ │ │ ├── wl12_api_historical_20230716_1.json
│ │ │ │ ├── wl12_api_live_0.json
│ │ │ │ └── wl12_api_live_1.json
│ │ │ ├── HN/
│ │ │ │ ├── exchange_index_7.csv
│ │ │ │ ├── production_index_10_hydro.csv
│ │ │ │ ├── production_index_1_hydro.csv
│ │ │ │ ├── production_index_2_wind.csv
│ │ │ │ ├── production_index_3_solar.csv
│ │ │ │ ├── production_index_4_geothermal.csv
│ │ │ │ ├── production_index_5_biomass.csv
│ │ │ │ ├── production_index_6_coal.csv
│ │ │ │ ├── production_index_8_oil.csv
│ │ │ │ └── production_index_9_oil.csv
│ │ │ ├── Hydroquebec/
│ │ │ │ ├── consumption.json
│ │ │ │ └── production.json
│ │ │ ├── IEMOP/
│ │ │ │ ├── list_reports_items.json
│ │ │ │ └── reports_content
│ │ │ ├── IN/
│ │ │ │ └── 08.04.25_NLDC_PSP.xls
│ │ │ ├── IN_AP.html
│ │ │ ├── IN_EA/
│ │ │ │ ├── interregional_exchanges.json
│ │ │ │ └── transnational_exchanges.json
│ │ │ ├── IN_HP.html
│ │ │ ├── IN_KA_Default.html
│ │ │ ├── IN_KA_StateGen.html
│ │ │ ├── IN_KA_StateNCEP.html
│ │ │ ├── JAO/
│ │ │ │ ├── core_external_atc.json
│ │ │ │ ├── core_max_bex.json
│ │ │ │ ├── core_scheduled_exchanges.json
│ │ │ │ ├── nordic_max_bex.json
│ │ │ │ ├── nordic_max_bflow.json
│ │ │ │ └── shadow_auction_atc.json
│ │ │ ├── JP-CB/
│ │ │ │ └── keito_yosoku_cepco003.csv
│ │ │ ├── JP-HKD/
│ │ │ │ └── 20250415_hokkaido_yosoku.csv
│ │ │ ├── JP-HR/
│ │ │ │ └── yosoku_05_20250415.csv
│ │ │ ├── JP-KN/
│ │ │ │ └── 20250416_yosoku.csv
│ │ │ ├── JP-KY/
│ │ │ │ └── 21110_TSO9_0_20250407.csv
│ │ │ ├── JP-ON/
│ │ │ │ └── jukyu_yosoku_20250415.csv
│ │ │ ├── JP-SK/
│ │ │ │ ├── jp-sk-nuclear-html-page.html
│ │ │ │ ├── yosoku_today.csv
│ │ │ │ └── yosoku_tomorrow.csv
│ │ │ ├── JP-TH/
│ │ │ │ ├── area_tso_yosoku_20250416.csv
│ │ │ │ └── area_tso_yosoku_y.csv
│ │ │ ├── JP-TK/
│ │ │ │ ├── AREA_ONCE_YOSOKU.csv
│ │ │ │ └── AREA_YOSOKU.csv
│ │ │ ├── JP_KY/
│ │ │ │ ├── genkai.html
│ │ │ │ ├── sendai.html
│ │ │ │ ├── solar_and_consumption.csv
│ │ │ │ └── solar_and_consumption_day.csv
│ │ │ ├── KPX/
│ │ │ │ ├── historical.html
│ │ │ │ └── realtime.html
│ │ │ ├── MD/
│ │ │ │ ├── moldoelectrica_api_historical_20210725.json
│ │ │ │ └── moldoelectrica_api_live.json
│ │ │ ├── MISO.html
│ │ │ ├── NORDPOOL/
│ │ │ │ ├── fi_se1_current_day_exchange.json
│ │ │ │ ├── fi_se1_previous_day_exchange.json
│ │ │ │ ├── se_current_day_price.json
│ │ │ │ ├── se_next_day_price.json
│ │ │ │ └── token.json
│ │ │ ├── NTESMO/
│ │ │ │ ├── as-7-days-forecast.json
│ │ │ │ ├── dk-7-days-forecast.json
│ │ │ │ └── tc-7-days-forecast.json
│ │ │ ├── NZ/
│ │ │ │ ├── response_2024_04_24_17_30.html
│ │ │ │ ├── response_2024_04_24_18_00.html
│ │ │ │ ├── response_2024_04_24_18_00.json
│ │ │ │ └── response_2024_04_24_18_30.json
│ │ │ ├── ONS/
│ │ │ │ ├── BR.json
│ │ │ │ ├── BR_negative_solar.json
│ │ │ │ └── data.json
│ │ │ ├── OPENNEM/
│ │ │ │ ├── OPENNEM_AU-NSW.json
│ │ │ │ ├── OPENNEM_AU-NSW.v4.json
│ │ │ │ ├── OPENNEM_AU-QLD.json
│ │ │ │ ├── OPENNEM_AU-QLD.v4.json
│ │ │ │ ├── OPENNEM_AU-SA.json
│ │ │ │ ├── OPENNEM_AU-SA.v4.json
│ │ │ │ ├── OPENNEM_AU-TAS.json
│ │ │ │ ├── OPENNEM_AU-TAS.v4.json
│ │ │ │ ├── OPENNEM_AU-VIC.json
│ │ │ │ ├── OPENNEM_AU-VIC.v4.json
│ │ │ │ ├── OPENNEM_AU-WA.json
│ │ │ │ ├── OPENNEM_AU-WA.v4.json
│ │ │ │ └── OPENNEM_price_AU-SA.json
│ │ │ ├── PA_nominal_generation.html
│ │ │ ├── PE/
│ │ │ │ ├── response_20250909.json
│ │ │ │ └── response_20250910.json
│ │ │ ├── PF/
│ │ │ │ └── production_live.html
│ │ │ ├── RU/
│ │ │ │ ├── exchange_2025-07-28_10.json
│ │ │ │ ├── exchange_2025-07-28_11.json
│ │ │ │ ├── production_RU-1_2025_07_28.json
│ │ │ │ ├── production_RU-2_2025_07_28.json
│ │ │ │ └── production_RU-AS_2025_07_28.json
│ │ │ ├── SMARTGRIDDASHBOARD/
│ │ │ │ ├── consumption.json
│ │ │ │ ├── consumptionForecast.json
│ │ │ │ ├── exchange.json
│ │ │ │ ├── generation.json
│ │ │ │ ├── solarForecast.json
│ │ │ │ ├── solarProduction.json
│ │ │ │ ├── windForecast.json
│ │ │ │ └── windProduction.json
│ │ │ ├── TAIPOWER/
│ │ │ │ └── genary.json
│ │ │ ├── TR/
│ │ │ │ └── raw_production_response.json
│ │ │ ├── US_ERCOT/
│ │ │ │ ├── load_forecast_by_forecast_zone.json
│ │ │ │ ├── solar_power_production_hourly_averaged_actual_and_forecasted_values_rtid.json
│ │ │ │ └── wind_power_production_hourly_averaged_actual_and_forecasted_values_rtid.json
│ │ │ ├── US_HI.htm
│ │ │ ├── US_HI_hist.htm
│ │ │ ├── US_MISO/
│ │ │ │ ├── 20250310_df_al.xls
│ │ │ │ ├── DataBrokerServicesgetSolarForecast.asmx.json
│ │ │ │ └── DataBrokerServicesgetWindForecast.asmx.json
│ │ │ ├── US_NEISO/
│ │ │ │ ├── day_ahead_load_forecast_20250317.xml
│ │ │ │ ├── exchange_CA-NB_US-NE-ISNE.json
│ │ │ │ ├── exchange_CA-QC_US-NE-ISNE.json
│ │ │ │ ├── exchange_US-NE-ISNE_US-NY-NYIS.json
│ │ │ │ ├── seven_day_solar_power_forecast_20250225.csv
│ │ │ │ └── seven_day_wind_power_forecast_20250225.csv
│ │ │ ├── US_NY/
│ │ │ │ └── 20250219isolf.csv
│ │ │ ├── US_PJM/
│ │ │ │ ├── gen_by_fuel.json
│ │ │ │ ├── pjm_solar_forecast_2025-02-24.json
│ │ │ │ ├── pjm_wind_forecast_2025-02-24.json
│ │ │ │ └── settings.json
│ │ │ ├── US_SPP/
│ │ │ │ ├── DA-LMP-SL-202503190100.csv
│ │ │ │ ├── RTBM-LMP-SL-202503310840.csv
│ │ │ │ ├── RTBM-LMP-SL-202503310845.csv
│ │ │ │ ├── RTBM-LMP-SL-202503310850.csv
│ │ │ │ ├── RTBM-LMP-SL-202503310855.csv
│ │ │ │ ├── RTBM-LMP-SL-202503310900.csv
│ │ │ │ ├── RTBM-LMP-SL-202503310905.csv
│ │ │ │ └── RTBM-LMP-SL-202503310910.csv
│ │ │ ├── US_SPP_Gen_Mix.pkl
│ │ │ ├── UY/
│ │ │ │ ├── data.ods
│ │ │ │ └── html.html
│ │ │ ├── __init__.py
│ │ │ ├── amper_landsnet/
│ │ │ │ └── production.json
│ │ │ └── quality_check.py
│ │ ├── test_AEMO.py
│ │ ├── test_AU_TAS_FI.py
│ │ ├── test_AU_TAS_KI.py
│ │ ├── test_AU_WA_RI.py
│ │ ├── test_AW.py
│ │ ├── test_BE.py
│ │ ├── test_BG.py
│ │ ├── test_CAMMESA.py
│ │ ├── test_CA_AB.py
│ │ ├── test_CA_CQ.py
│ │ ├── test_CA_ON.py
│ │ ├── test_CEB.py
│ │ ├── test_CENACE.py
│ │ ├── test_CH.py
│ │ ├── test_CL.py
│ │ ├── test_CNDC.py
│ │ ├── test_CO.py
│ │ ├── test_CR.py
│ │ ├── test_CY.py
│ │ ├── test_CZ.py
│ │ ├── test_DK.py
│ │ ├── test_DO.py
│ │ ├── test_EIA.py
│ │ ├── test_ENERCAL.py
│ │ ├── test_ENTE.py
│ │ ├── test_ENTSOE.py
│ │ ├── test_ERCOT.py
│ │ ├── test_ERP_PGCB.py
│ │ ├── test_ES.py
│ │ ├── test_ESIOS.py
│ │ ├── test_ESKOM.py
│ │ ├── test_ESTADISTICO_UT.py
│ │ ├── test_FO.py
│ │ ├── test_FR.py
│ │ ├── test_FR_O.py
│ │ ├── test_GB.py
│ │ ├── test_GT.py
│ │ ├── test_HN.py
│ │ ├── test_IEMOP.py
│ │ ├── test_IN.py
│ │ ├── test_IN_AP.py
│ │ ├── test_IN_EA.py
│ │ ├── test_IN_HP.py
│ │ ├── test_IN_KA.py
│ │ ├── test_JAO.py
│ │ ├── test_JP.py
│ │ ├── test_JP_KY.py
│ │ ├── test_JP_SK.py
│ │ ├── test_KPX.py
│ │ ├── test_MD.py
│ │ ├── test_NORDPOOL.py
│ │ ├── test_NTESMO.py
│ │ ├── test_NZ.py
│ │ ├── test_ONS.py
│ │ ├── test_OPENNEM.py
│ │ ├── test_PA.py
│ │ ├── test_PE.py
│ │ ├── test_PF.py
│ │ ├── test_RU.py
│ │ ├── test_SG.py
│ │ ├── test_SMARTGRIDDASHBOARD.py
│ │ ├── test_TAIPOWER.py
│ │ ├── test_TR.py
│ │ ├── test_US_CA.py
│ │ ├── test_US_ERCOT.py
│ │ ├── test_US_MISO.py
│ │ ├── test_US_NEISO.py
│ │ ├── test_US_NY.py
│ │ ├── test_US_PJM.py
│ │ ├── test_US_SPP.py
│ │ ├── test_UY.py
│ │ ├── test_amper_landsnet.py
│ │ ├── test_config.py
│ │ ├── test_quality.py
│ │ └── test_utils.py
│ └── py.typed
├── geo/
│ ├── .gitignore
│ ├── README.md
│ ├── generate-zone-geo.ts
│ ├── package.json
│ ├── tsconfig.json
│ └── world.geojson
├── libs/
│ └── types/
│ ├── pyproject.toml
│ └── src/
│ └── electricitymap/
│ └── contrib/
│ └── types/
│ └── __init__.py
├── parsers.dockerfile
├── pyproject.toml
├── scripts/
│ ├── ENTSOE_capacity_update.py
│ ├── __init__.py
│ ├── create_aggregated_zone_config.py
│ ├── remove_zone.py
│ ├── tooling.py
│ ├── update_capacity_configuration.py
│ ├── update_capacity_ember_all_years.py
│ ├── utils.py
│ ├── validate_config_filenames.py
│ └── zone_names.py
├── test_parser.py
└── tests/
├── __init__.py
├── config/
│ ├── __init__.py
│ ├── __snapshots__/
│ │ ├── test_config.ambr
│ │ └── test_emission_factors.ambr
│ ├── test_config.py
│ ├── test_config_model.py
│ ├── test_config_zones.py
│ ├── test_data_center_model.py
│ └── test_emission_factors.py
├── test_capacity.py
├── test_co2eq_parameters.py
├── test_exchanges_json.py
├── test_parser_interface.py
├── test_update_capacity_configuration.py
└── test_zones_json.py
SYMBOL INDEX (1597 symbols across 266 files)
FILE: capacity_update.py
function capacity_update (line 23) | def capacity_update(
FILE: electricitymap/contrib/capacity_parsers/CA_ON.py
function get_data_from_url (line 26) | def get_data_from_url(session: Session, target_datetime: datetime) -> pd...
function fetch_production_capacity (line 40) | def fetch_production_capacity(
function get_last_month_of_last_full_quarter (line 65) | def get_last_month_of_last_full_quarter(
FILE: electricitymap/contrib/capacity_parsers/CEA.py
function fetch_production_capacity_for_all_zones (line 73) | def fetch_production_capacity_for_all_zones(
function fetch_production_capacity (line 105) | def fetch_production_capacity(
function get_renewable_capacity (line 113) | def get_renewable_capacity(path: str, zone_key: ZoneKey | None = None) -...
FILE: electricitymap/contrib/capacity_parsers/CL_SEN.py
function fetch_production_capacity (line 29) | def fetch_production_capacity(
FILE: electricitymap/contrib/capacity_parsers/DE.py
function convert_to_mw (line 33) | def convert_to_mw(value: float | int | None) -> float:
function fetch_production_capacity (line 40) | def fetch_production_capacity(
function update_capacity_breakdown (line 68) | def update_capacity_breakdown(
FILE: electricitymap/contrib/capacity_parsers/EIA.py
function format_capacity (line 52) | def format_capacity(df: pd.DataFrame, target_datetime: datetime) -> dict...
function fetch_production_capacity (line 77) | def fetch_production_capacity(
function fetch_production_capacity_for_all_zones (line 105) | def fetch_production_capacity_for_all_zones(
FILE: electricitymap/contrib/capacity_parsers/EMBER.py
function get_ember_capacity_yearly_data (line 44) | def get_ember_capacity_yearly_data(country_iso2: ZoneKey, session: Sessi...
function _ember_production_mode_mapper (line 113) | def _ember_production_mode_mapper(row: pd.Series) -> str | None:
function transform_ember_data (line 144) | def transform_ember_data(ember_df: pd.DataFrame) -> pd.DataFrame:
function get_capacity_dict_from_df (line 179) | def get_capacity_dict_from_df(
function remove_consecutive_duplicates (line 216) | def remove_consecutive_duplicates(
function get_capacity_dict_all_years_from_df (line 247) | def get_capacity_dict_all_years_from_df(
function fetch_production_capacity (line 283) | def fetch_production_capacity(
function fetch_production_capacity_all_years (line 311) | def fetch_production_capacity_all_years(
function fetch_production_capacity_for_all_zones (line 358) | def fetch_production_capacity_for_all_zones(
function fetch_production_capacity_for_all_zones_all_years (line 385) | def fetch_production_capacity_for_all_zones_all_years(
FILE: electricitymap/contrib/capacity_parsers/ENTSOE.py
function query_capacity (line 44) | def query_capacity(
function fetch_production_capacity (line 61) | def fetch_production_capacity(
function fetch_production_capacity_for_all_zones (line 96) | def fetch_production_capacity_for_all_zones(
FILE: electricitymap/contrib/capacity_parsers/FI.py
function get_fingrid_capacity (line 18) | def get_fingrid_capacity(
function parse_fingrid_capacity (line 46) | def parse_fingrid_capacity(
function fetch_production_capacity (line 64) | def fetch_production_capacity(
FILE: electricitymap/contrib/capacity_parsers/GB.py
function fetch_production_capacity (line 29) | def fetch_production_capacity(
FILE: electricitymap/contrib/capacity_parsers/IRENA.py
function get_data_from_url (line 41) | def get_data_from_url(
function get_capacity_data_for_zones (line 132) | def get_capacity_data_for_zones(
function fetch_production_capacity (line 192) | def fetch_production_capacity(
function fetch_production_capacity_for_all_zones (line 207) | def fetch_production_capacity_for_all_zones(
FILE: electricitymap/contrib/capacity_parsers/MY_WM.py
function get_capacity_datetime (line 27) | def get_capacity_datetime(session: Session) -> datetime:
function fetch_production_capacity (line 35) | def fetch_production_capacity(
FILE: electricitymap/contrib/capacity_parsers/ONS.py
function filter_data_by_date (line 42) | def filter_data_by_date(data: pd.DataFrame, target_datetime: datetime) -...
function fetch_production_capacity_for_all_zones (line 57) | def fetch_production_capacity_for_all_zones(
function fetch_production_capacity (line 118) | def fetch_production_capacity(
FILE: electricitymap/contrib/capacity_parsers/OPENELECTRICITY.py
function get_openelectricity_capacity_data (line 42) | def get_openelectricity_capacity_data(session: Session) -> pd.DataFrame:
function filter_capacity_data_by_datetime (line 79) | def filter_capacity_data_by_datetime(
function fetch_production_capacity_for_all_zones (line 98) | def fetch_production_capacity_for_all_zones(
function fetch_production_capacity (line 128) | def fetch_production_capacity(
function get_solar_capacity_au_nt (line 144) | def get_solar_capacity_au_nt(target_datetime: datetime) -> float | None:
FILE: electricitymap/contrib/capacity_parsers/REE.py
function fetch_production_capacity (line 57) | def fetch_production_capacity(
function fetch_production_capacity_for_all_zones (line 102) | def fetch_production_capacity_for_all_zones(
FILE: electricitymap/contrib/capacity_parsers/tests/conftest.py
function adapter (line 14) | def adapter():
function session (line 26) | def session(adapter):
FILE: electricitymap/contrib/capacity_parsers/tests/test_ONS.py
function test_filter_data_by_date (line 8) | def test_filter_data_by_date():
FILE: electricitymap/contrib/capacity_parsers/tests/test_OPENELECTRICITY.py
function openelectricity_token_env (line 32) | def openelectricity_token_env():
function test_filter_capacity_data_by_datetime (line 36) | def test_filter_capacity_data_by_datetime():
function test_fetch_capacities (line 51) | def test_fetch_capacities(adapter, session, snapshot):
FILE: electricitymap/contrib/config/__init__.py
function _get_most_recent_value (line 118) | def _get_most_recent_value(emission_factors: dict) -> dict[dict, Any]:
function emission_factors (line 125) | def emission_factors(zone_key: ZoneKey) -> dict[str, float]:
FILE: electricitymap/contrib/config/capacity.py
class CapacityData (line 29) | class CapacityData:
function get_capacity_data (line 34) | def get_capacity_data(capacity_config: dict, dt: datetime) -> dict[str, ...
function get_capacity_data_with_source (line 46) | def get_capacity_data_with_source(
function _get_capacity_from_dict_or_list (line 61) | def _get_capacity_from_dict_or_list(
FILE: electricitymap/contrib/config/co2eq_parameters.py
function generate_co2eq_parameters (line 10) | def generate_co2eq_parameters(
FILE: electricitymap/contrib/config/data_center_model.py
class StrictBaseModel (line 13) | class StrictBaseModel(BaseModel):
class Config (line 14) | class Config:
class DataCenter (line 18) | class DataCenter(BaseModel):
method ID (line 30) | def ID(self) -> str:
method string_not_empty (line 34) | def string_not_empty(cls, v):
method lonlat_valid (line 40) | def lonlat_valid(cls, v):
method parse_date (line 49) | def parse_date(cls, v):
method zone_key_exists (line 66) | def zone_key_exists(cls, v):
class DataCenters (line 77) | class DataCenters(BaseModel):
class Config (line 82) | class Config:
method ids_are_unique (line 87) | def ids_are_unique(cls, v):
method check_unique_combination (line 96) | def check_unique_combination(cls, v):
FILE: electricitymap/contrib/config/emission_factors_lookup.py
function get_zone_specific_co2eq_parameter (line 21) | def get_zone_specific_co2eq_parameter(
function _get_zone_specific_co2eq_parameter_no_metadata (line 47) | def _get_zone_specific_co2eq_parameter_no_metadata(
function _get_zone_specific_co2eq_parameter_with_metadata (line 103) | def _get_zone_specific_co2eq_parameter_with_metadata(
function _get_emission_factor_lifecycle_and_direct (line 226) | def _get_emission_factor_lifecycle_and_direct(
function get_emission_factors_with_metadata_all_years (line 255) | def get_emission_factors_with_metadata_all_years(
FILE: electricitymap/contrib/config/model.py
class StrictBaseModel (line 32) | class StrictBaseModel(BaseModel):
class Config (line 33) | class Config:
class StrictBaseModelWithAlias (line 37) | class StrictBaseModelWithAlias(BaseModel):
class Config (line 38) | class Config:
class ModeCapacity (line 47) | class ModeCapacity(StrictBaseModelWithAlias):
class Capacity (line 55) | class Capacity(StrictBaseModel):
function _get_parser_folder (line 75) | def _get_parser_folder(parser_key: str) -> str:
class ParsersBaseModel (line 83) | class ParsersBaseModel(StrictBaseModel):
method get_function (line 84) | def get_function(self, data_type: str) -> Callable | None:
class Parsers (line 99) | class Parsers(ParsersBaseModel):
class Source (line 116) | class Source(StrictBaseModel):
class Delays (line 120) | class Delays(StrictBaseModel):
class Zone (line 129) | class Zone(StrictBaseModelWithAlias):
method currency_is_valid (line 158) | def currency_is_valid(cls, v):
method neighbors (line 163) | def neighbors(self) -> list[ZoneKey]:
class ExchangeParsers (line 167) | class ExchangeParsers(ParsersBaseModel):
class Exchange (line 180) | class Exchange(StrictBaseModelWithAlias):
class PowerOriginRatiosValues (line 188) | class PowerOriginRatiosValues(StrictBaseModelWithAlias):
method check_sum (line 206) | def check_sum(cls, values):
class PowerOriginRatios (line 216) | class PowerOriginRatios(StrictBaseModelWithAlias):
class PowerOriginRatiosForZone (line 224) | class PowerOriginRatiosForZone(StrictBaseModelWithAlias):
class FallbackZoneMixes (line 233) | class FallbackZoneMixes(StrictBaseModelWithAlias):
class ModeCategoryContribution (line 238) | class ModeCategoryContribution(StrictBaseModelWithAlias):
class CategoryContribution (line 246) | class CategoryContribution(StrictBaseModelWithAlias):
method check_contributions (line 272) | def check_contributions(cls, values):
class IsLowCarbon (line 282) | class IsLowCarbon(StrictBaseModelWithAlias):
class IsRenewable (line 287) | class IsRenewable(StrictBaseModelWithAlias):
class ModeEmissionFactor (line 292) | class ModeEmissionFactor(StrictBaseModelWithAlias):
class AllModesEmissionFactors (line 300) | class AllModesEmissionFactors(StrictBaseModelWithAlias):
method check_emission_factors (line 326) | def check_emission_factors(cls, values):
class EmissionFactors (line 336) | class EmissionFactors(StrictBaseModelWithAlias):
class CO2eqParameters (line 341) | class CO2eqParameters(StrictBaseModelWithAlias):
class ConfigModel (line 348) | class ConfigModel(StrictBaseModel):
class CO2eqConfigModel (line 356) | class CO2eqConfigModel(StrictBaseModel):
function _load_config_model (line 361) | def _load_config_model() -> ConfigModel:
class EmissionFactorVariant (line 374) | class EmissionFactorVariant(Enum):
class EmissionFactorMode (line 393) | class EmissionFactorMode(Enum):
class YearZoneModeEmissionFactor (line 408) | class YearZoneModeEmissionFactor(StrictBaseModelWithAlias):
method validate_datetime_field (line 422) | def validate_datetime_field(cls, v: datetime | None) -> datetime | None:
method check_factor_relationship (line 445) | def check_factor_relationship(cls, values):
FILE: electricitymap/contrib/config/reading.py
function read_defaults (line 12) | def read_defaults(config_dir) -> dict[str, Any]:
function read_zones_config (line 19) | def read_zones_config(config_dir, retired=False) -> dict[ZoneKey, Any]:
function read_exchanges_config (line 34) | def read_exchanges_config(config_dir) -> dict[ZoneKey, Any]:
function read_data_centers_config (line 47) | def read_data_centers_config(config_dir):
FILE: electricitymap/contrib/config/zones.py
function zone_bounding_boxes (line 9) | def zone_bounding_boxes(zones_config: dict[ZoneKey, Any]) -> dict[ZoneKe...
function zone_parents (line 18) | def zone_parents(zones_config: dict[ZoneKey, Any]) -> dict[ZoneKey, Zone...
function generate_zone_neighbours (line 28) | def generate_zone_neighbours(
function generate_all_neighbours (line 60) | def generate_all_neighbours(
FILE: electricitymap/contrib/lib/models/event_lists.py
class EventList (line 30) | class EventList(ABC, Generic[EventType]):
method __init__ (line 39) | def __init__(self, logger: Logger):
method __len__ (line 43) | def __len__(self):
method __contains__ (line 46) | def __contains__(self, datetime) -> bool:
method __setitem__ (line 49) | def __setitem__(self, datetime, event: EventType):
method __add__ (line 52) | def __add__(self, other: "EventList") -> "EventList":
method __getitem__ (line 57) | def __getitem__(self, datetime) -> EventType:
method __iter__ (line 60) | def __iter__(self):
method append (line 64) | def append(self, **kwargs):
method to_list (line 69) | def to_list(self) -> list[dict[str, Any]]:
method dataframe (line 75) | def dataframe(self) -> pd.DataFrame:
class AggregatableEventList (line 92) | class AggregatableEventList(EventList[EventType], ABC, Generic[EventType]):
method is_completely_empty (line 96) | def is_completely_empty(
method get_zone_source_type (line 108) | def get_zone_source_type(
method _get_unique_zone (line 124) | def _get_unique_zone(cls, events: pd.DataFrame) -> ZoneKey:
method _get_aggregated_sources (line 139) | def _get_aggregated_sources(cls, events: pd.DataFrame) -> str:
method _get_unique_source_type (line 149) | def _get_unique_source_type(cls, events: pd.DataFrame) -> EventSourceT...
class ExchangeList (line 164) | class ExchangeList(AggregatableEventList[Exchange]):
method append (line 165) | def append(
method merge_exchanges (line 180) | def merge_exchanges(
method update_exchanges (line 213) | def update_exchanges(
class ExchangeCapacityList (line 239) | class ExchangeCapacityList(EventList[ExchangeCapacity]):
method append (line 240) | def append(
class ProductionBreakdownList (line 262) | class ProductionBreakdownList(AggregatableEventList[ProductionBreakdown]):
method append (line 263) | def append(
method merge_production_breakdowns (line 279) | def merge_production_breakdowns(
method update_production_breakdowns (line 322) | def update_production_breakdowns(
class TotalProductionList (line 388) | class TotalProductionList(AggregatableEventList[TotalProduction]):
method append (line 389) | def append(
method merge_total_production_lists (line 404) | def merge_total_production_lists(
class TotalConsumptionList (line 440) | class TotalConsumptionList(AggregatableEventList[TotalConsumption]):
method append (line 441) | def append(
method merge_consumption_lists (line 456) | def merge_consumption_lists(
class PriceList (line 494) | class PriceList(EventList[Price]):
method append (line 495) | def append(
class LocationalMarginalPriceList (line 511) | class LocationalMarginalPriceList(EventList[LocationalMarginalPrice]):
method append (line 512) | def append(
class GridAlertList (line 529) | class GridAlertList(EventList[GridAlert]):
method append (line 530) | def append(
FILE: electricitymap/contrib/lib/models/events.py
function _is_naive (line 26) | def _is_naive(t: dt.datetime) -> bool:
function _none_safe_round (line 31) | def _none_safe_round(value: float | None, precision: int = 6) -> float |...
class Mix (line 40) | class Mix(BaseModel, ABC):
method add_value (line 41) | def add_value(
method merge (line 61) | def merge(cls, mixes: list["Mix"]) -> "Mix":
method _update (line 65) | def _update(cls, mix: "Mix", new_mix: "Mix") -> "Mix":
method __setattr__ (line 68) | def __setattr__(self, name: str, value: float | None) -> None:
method __setitem__ (line 75) | def __setitem__(self, key: str, value: float | None) -> None:
class ProductionMix (line 82) | class ProductionMix(Mix):
method __init__ (line 103) | def __init__(self, **data: Any):
method dict (line 118) | def dict( # noqa: A003
method __setattr__ (line 146) | def __setattr__(
method _correct_negative_value (line 163) | def _correct_negative_value(
method add_value (line 175) | def add_value(
method has_corrected_negative_values (line 189) | def has_corrected_negative_values(self) -> bool:
method corrected_negative_modes (line 193) | def corrected_negative_modes(self) -> Set[str]:
method merge (line 197) | def merge(cls, production_mixes: list["ProductionMix"]) -> "Production...
method _update (line 217) | def _update(
class StorageMix (line 232) | class StorageMix(Mix):
method __init__ (line 242) | def __init__(self, **data: Any):
method __setattr__ (line 250) | def __setattr__(self, name: str, value: float | None) -> None:
method merge (line 259) | def merge(cls, storage_mixes: list["StorageMix"]) -> "StorageMix":
method _update (line 273) | def _update(
class EventSourceType (line 286) | class EventSourceType(str, Enum):
class Event (line 296) | class Event(BaseModel, ABC):
method _validate_zone_key (line 317) | def _validate_zone_key(cls, v):
method _validate_datetime (line 323) | def _validate_datetime(cls, v: dt.datetime, values: dict[str, Any]) ->...
method create (line 340) | def create(*args, **kwargs) -> "Event":
method to_dict (line 345) | def to_dict(self) -> dict[str, Any]:
class AggregatableEvent (line 350) | class AggregatableEvent(Event):
method _unique_zone_key (line 356) | def _unique_zone_key(df_view: pd.DataFrame) -> ZoneKey:
method _sources (line 363) | def _sources(df_view: pd.DataFrame) -> str:
method _unique_source_type (line 372) | def _unique_source_type(df_view: pd.DataFrame) -> EventSourceType:
method _unique_datetime (line 381) | def _unique_datetime(df_view: pd.DataFrame) -> datetime:
method _aggregated_fields (line 390) | def _aggregated_fields(
method aggregate (line 402) | def aggregate(events: list["AggregatableEvent"]) -> "AggregatableEvent":
class Exchange (line 407) | class Exchange(Event):
method _validate_zone_key (line 418) | def _validate_zone_key(cls, v: str):
method _validate_value (line 429) | def _validate_value(cls, v: float | None):
method create (line 440) | def create(
method _update (line 467) | def _update(event: "Exchange", new_event: "Exchange") -> "Exchange":
method to_dict (line 493) | def to_dict(self) -> dict[str, Any]:
class TotalProduction (line 503) | class TotalProduction(Event):
method _validate_value (line 509) | def _validate_value(cls, v: float | None):
method create (line 522) | def create(
method _update (line 549) | def _update(
method to_dict (line 577) | def to_dict(self) -> dict[str, Any]:
class ProductionBreakdown (line 587) | class ProductionBreakdown(AggregatableEvent):
method _validate_production_mix (line 596) | def _validate_production_mix(cls, v):
method _validate_storage_mix (line 606) | def _validate_storage_mix(cls, v):
method get_value (line 613) | def get_value(self, mode: str) -> float | None:
method create (line 629) | def create(
method aggregate (line 664) | def aggregate(events: list["ProductionBreakdown"]) -> "ProductionBreak...
method _update (line 703) | def _update(
method to_dict (line 733) | def to_dict(self) -> dict[str, Any]:
class TotalConsumption (line 751) | class TotalConsumption(Event):
method _validate_consumption (line 757) | def _validate_consumption(cls, v: float):
method create (line 772) | def create(
method _update (line 799) | def _update(
method to_dict (line 827) | def to_dict(self) -> dict[str, Any]:
class Price (line 837) | class Price(Event):
method _validate_currency (line 842) | def _validate_currency(cls, v: str) -> str:
method _validate_datetime (line 848) | def _validate_datetime(cls, v: dt.datetime) -> datetime:
method _validate_price (line 857) | def _validate_price(cls, v: float | None) -> float:
method create (line 866) | def create(
method to_dict (line 894) | def to_dict(self) -> dict[str, Any]:
class LocationalMarginalPrice (line 905) | class LocationalMarginalPrice(Price):
method _validate_node (line 909) | def _validate_node(cls, v: str) -> str:
method create (line 918) | def create(
method to_dict (line 948) | def to_dict(self) -> dict[str, Any]:
class GridAlertType (line 960) | class GridAlertType(str, Enum):
class GridAlert (line 966) | class GridAlert(Event):
method _validate_alert_type (line 975) | def _validate_alert_type(cls, v: GridAlertType) -> GridAlertType:
method _validate_message (line 981) | def _validate_message(cls, v: str) -> str:
method _validate_issued_time (line 987) | def _validate_issued_time(cls, v: datetime) -> datetime:
method _validate_start_time (line 995) | def _validate_start_time(cls, v: datetime | None) -> datetime | None:
method _default_start_time (line 1003) | def _default_start_time(cls, values):
method _validate_end_time (line 1009) | def _validate_end_time(cls, v: datetime | None) -> datetime | None:
method create (line 1019) | def create(
method to_dict (line 1052) | def to_dict(self) -> dict[str, Any]:
class ExchangeCapacity (line 1066) | class ExchangeCapacity(Event):
method _validate_zone_key (line 1080) | def _validate_zone_key(cls, v: str):
method _validate_capacity_bounds (line 1091) | def _validate_capacity_bounds(cls, values: dict[str, Any]) -> dict[str...
method create (line 1102) | def create(
method to_dict (line 1131) | def to_dict(self) -> dict[str, Any]:
FILE: electricitymap/contrib/lib/tests/test_event_lists.py
function test_exchange_list (line 27) | def test_exchange_list():
function test_append_to_list_logs_error (line 44) | def test_append_to_list_logs_error():
function test_merge_exchanges (line 56) | def test_merge_exchanges():
function test_merge_exchanges_with_none (line 80) | def test_merge_exchanges_with_none():
function test_merge_exchanges_with_negatives (line 103) | def test_merge_exchanges_with_negatives():
function test_update_exchange_list (line 126) | def test_update_exchange_list():
function test_update_exchange_list_with_different_zoneKey (line 159) | def test_update_exchange_list_with_different_zoneKey():
function test_update_exchange_list_with_longer_new_list (line 180) | def test_update_exchange_list_with_longer_new_list():
function test_consumption_list (line 213) | def test_consumption_list():
function test_append_to_consumption_list_logs_error (line 230) | def test_append_to_consumption_list_logs_error():
function test_price_list (line 242) | def test_price_list():
function test_append_to_price_list_logs_error (line 254) | def test_append_to_price_list_logs_error():
function test_locational_marginal_price_list (line 267) | def test_locational_marginal_price_list():
function test_append_to_locational_marginal_price_list_logs_error (line 280) | def test_append_to_locational_marginal_price_list_logs_error():
function test_grid_alert_list (line 294) | def test_grid_alert_list():
function test_append_to_grid_alert_list_logs_error (line 309) | def test_append_to_grid_alert_list_logs_error():
function test_production_list (line 325) | def test_production_list():
function test_production_list_logs_error (line 336) | def test_production_list_logs_error():
function test_merge_production_list_production_mix_only (line 356) | def test_merge_production_list_production_mix_only():
function test_merge_production_list (line 433) | def test_merge_production_list():
function test_merge_production_list_doesnt_yield_extra_modes (line 498) | def test_merge_production_list_doesnt_yield_extra_modes():
function test_merge_production_list_predicted (line 529) | def test_merge_production_list_predicted():
function test_merge_production_retains_corrected_negatives (line 574) | def test_merge_production_retains_corrected_negatives():
function test_merge_production_retains_corrected_negatives_with_0_and_none (line 625) | def test_merge_production_retains_corrected_negatives_with_0_and_none():
function test_update_production_list_with_production (line 665) | def test_update_production_list_with_production():
function test_update_production_list_with_new_list_being_longer (line 700) | def test_update_production_list_with_new_list_being_longer():
function test_update_storage_list_with_new_list_being_longer (line 737) | def test_update_storage_list_with_new_list_being_longer():
function test_update_production_list_with_storage (line 772) | def test_update_production_list_with_storage():
function test_update_production_list_with_none_in_production (line 807) | def test_update_production_list_with_none_in_production():
function test_update_production_list_with_none_in_storage (line 833) | def test_update_production_list_with_none_in_storage():
function test_update_production_with_different_zoneKey (line 857) | def test_update_production_with_different_zoneKey():
function test_update_production_with_different_source (line 878) | def test_update_production_with_different_source():
function test_update_production_with_different_sourceType (line 906) | def test_update_production_with_different_sourceType():
function test_update_production_with_empty_list (line 928) | def test_update_production_with_empty_list():
function test_update_production_with_empty_new_list (line 948) | def test_update_production_with_empty_new_list():
function test_update_stroage_with_empty_list (line 968) | def test_update_stroage_with_empty_list():
function test_update_stroage_with_empty_new_list (line 987) | def test_update_stroage_with_empty_new_list():
function test_total_production_list (line 1006) | def test_total_production_list():
function test_merge_total_production_lists (line 1017) | def test_merge_total_production_lists():
function test_merge_consumption_lists (line 1064) | def test_merge_consumption_lists():
function test_df_representation (line 1111) | def test_df_representation():
function test_exchange_capacity_forecast_list (line 1132) | def test_exchange_capacity_forecast_list():
function test_append_to_exchange_capacity_forecast_list_logs_error (line 1151) | def test_append_to_exchange_capacity_forecast_list_logs_error():
function test_exchange_capacity_forecast_list_to_list_sorted_by_datetime (line 1166) | def test_exchange_capacity_forecast_list_to_list_sorted_by_datetime():
FILE: electricitymap/contrib/lib/tests/test_events.py
function test_create_exchange (line 29) | def test_create_exchange():
function test_raises_if_invalid_exchange (line 50) | def test_raises_if_invalid_exchange():
function test_exchange_static_create_logs_error (line 121) | def test_exchange_static_create_logs_error():
function test_update_exchange (line 134) | def test_update_exchange():
function test_update_total_production (line 155) | def test_update_total_production():
function test_update_total_consumption_raises_on_mismatched_zone (line 176) | def test_update_total_consumption_raises_on_mismatched_zone():
function test_create_consumption (line 194) | def test_create_consumption():
function test_raises_if_invalid_consumption (line 207) | def test_raises_if_invalid_consumption():
function test_static_create_logs_error (line 258) | def test_static_create_logs_error():
function test_create_price (line 271) | def test_create_price():
function test_invalid_price_raises (line 286) | def test_invalid_price_raises():
function test_prices_can_be_in_future (line 344) | def test_prices_can_be_in_future():
function test_create_locational_marginal_price (line 354) | def test_create_locational_marginal_price():
function test_invalid_locational_marginal_price_node_raises (line 385) | def test_invalid_locational_marginal_price_node_raises(node):
function test_create_grid_alerts (line 398) | def test_create_grid_alerts():
function test_invalid_message_raises (line 421) | def test_invalid_message_raises():
function test_create_production_breakdown (line 437) | def test_create_production_breakdown():
function test_create_production_breakdown_with_storage (line 452) | def test_create_production_breakdown_with_storage():
function test_invalid_breakdown_raises (line 474) | def test_invalid_breakdown_raises():
function test_negative_production_gets_corrected (line 506) | def test_negative_production_gets_corrected():
function test_self_report_negative_value (line 531) | def test_self_report_negative_value():
function test_unknown_production_mode_raises (line 553) | def test_unknown_production_mode_raises():
function test_forecasted_points (line 567) | def test_forecasted_points():
function test_non_forecasted_points_in_future (line 585) | def test_non_forecasted_points_in_future():
function test_non_forecasted_point_with_timezone_forward (line 597) | def test_non_forecasted_point_with_timezone_forward():
function test_static_create_logs_error_with_none (line 609) | def test_static_create_logs_error_with_none():
function test_static_create_logs_with_nan (line 622) | def test_static_create_logs_with_nan():
function test_static_create_logs_with_nan_using_numpy (line 635) | def test_static_create_logs_with_nan_using_numpy():
function test_set_breakdown_all_present (line 648) | def test_set_breakdown_all_present():
function test_set_modes_all_present_add_mode (line 661) | def test_set_modes_all_present_add_mode():
function test_create_generation (line 676) | def test_create_generation():
function test_total_production_static_create_logs_error (line 689) | def test_total_production_static_create_logs_error():
function test_raises_if_invalid_generation (line 702) | def test_raises_if_invalid_generation():
function test_production_mix_has_all_production_modes (line 758) | def test_production_mix_has_all_production_modes():
function test_storage_mix_has_all_storage_modes (line 764) | def test_storage_mix_has_all_storage_modes():
function test_set_attr (line 770) | def test_set_attr():
function test_set_attr_with_negative_value (line 776) | def test_set_attr_with_negative_value():
function test_set_attr_with_none (line 782) | def test_set_attr_with_none():
function test_set_attr_with_invalid_mode (line 788) | def test_set_attr_with_invalid_mode():
function test_set_item (line 794) | def test_set_item():
function test_set_item_with_negative_value (line 800) | def test_set_item_with_negative_value():
function test_set_item_with_none (line 806) | def test_set_item_with_none():
function test_set_item_with_invalid_mode (line 812) | def test_set_item_with_invalid_mode():
function test_set_attr_storage (line 818) | def test_set_attr_storage():
function test_set_attr_storage_with_negative_value (line 824) | def test_set_attr_storage_with_negative_value():
function test_set_attr_storage_with_none (line 830) | def test_set_attr_storage_with_none():
function test_set_attr_storage_with_invalid_mode (line 836) | def test_set_attr_storage_with_invalid_mode():
function test_set_item_storage (line 842) | def test_set_item_storage():
function test_set_item_storage_with_negative_value (line 848) | def test_set_item_storage_with_negative_value():
function test_set_item_storage_with_none (line 854) | def test_set_item_storage_with_none():
function test_set_item_storage_with_invalid_mode (line 860) | def test_set_item_storage_with_invalid_mode():
function test_production (line 866) | def test_production():
function test_production_with_negative_value (line 875) | def test_production_with_negative_value():
function test_production_with_negative_value_expect_none (line 884) | def test_production_with_negative_value_expect_none():
function test_production_with_negative_value_and_correct_with_none (line 891) | def test_production_with_negative_value_and_correct_with_none():
function test_production_with_none (line 900) | def test_production_with_none():
function test_production_with_nan (line 909) | def test_production_with_nan():
function test_production_with_nan_using_numpy (line 918) | def test_production_with_nan_using_numpy():
function test_production_with_nan_init (line 927) | def test_production_with_nan_init():
function test_production_with_nan_using_numpy_init (line 932) | def test_production_with_nan_using_numpy_init():
function test_storage (line 937) | def test_storage():
function test_storage_with_negative_value (line 945) | def test_storage_with_negative_value():
function test_storage_with_none (line 953) | def test_storage_with_none():
function test_storage_with_nan (line 963) | def test_storage_with_nan():
function test_storage_with_nan_using_numpy (line 973) | def test_storage_with_nan_using_numpy():
function test_storage_with_nan_init (line 983) | def test_storage_with_nan_init():
function test_storage_with_nan_using_numpy_init (line 988) | def test_storage_with_nan_using_numpy_init():
function test_update_production (line 993) | def test_update_production():
function test_update_storage (line 1002) | def test_update_storage():
function test_update_production_with_none (line 1011) | def test_update_production_with_none():
function test_update_storage_with_none (line 1020) | def test_update_storage_with_none():
function test_update_production_with_empty (line 1029) | def test_update_production_with_empty():
function test_update_storage_with_empty (line 1038) | def test_update_storage_with_empty():
function test_update_production_with_new_empty (line 1047) | def test_update_production_with_new_empty():
function test_update_storage_with_new_empty (line 1056) | def test_update_storage_with_new_empty():
function test_update_production_with_empty_and_new_none (line 1065) | def test_update_production_with_empty_and_new_none():
function test_update_storage_with_empty_and_new_none (line 1074) | def test_update_storage_with_empty_and_new_none():
function test_update_production_with_empty_and_new_empty (line 1083) | def test_update_production_with_empty_and_new_empty():
function test_update_storage_with_empty_and_new_empty (line 1092) | def test_update_storage_with_empty_and_new_empty():
function test_create_exchange_capacity_forecast (line 1101) | def test_create_exchange_capacity_forecast():
function test_exchange_capacity_forecast_create_defaults_to_published (line 1117) | def test_exchange_capacity_forecast_create_defaults_to_published():
function test_exchange_capacity_forecast_allows_one_none_capacity (line 1131) | def test_exchange_capacity_forecast_allows_one_none_capacity():
function test_raises_if_invalid_exchange_capacity_forecast (line 1154) | def test_raises_if_invalid_exchange_capacity_forecast():
function test_exchange_capacity_forecast_static_create_logs_error (line 1206) | def test_exchange_capacity_forecast_static_create_logs_error():
function test_exchange_capacity_forecast_allows_future_datetime (line 1221) | def test_exchange_capacity_forecast_allows_future_datetime():
function test_exchange_capacity_forecast_to_dict (line 1234) | def test_exchange_capacity_forecast_to_dict():
FILE: electricitymap/contrib/parsers/AEMO.py
function find_document (line 41) | def find_document(session, target_datetime):
function fetch_consumption_forecast (line 75) | def fetch_consumption_forecast(
FILE: electricitymap/contrib/parsers/AW.py
function fetch_production (line 29) | def fetch_production(
FILE: electricitymap/contrib/parsers/AX.py
function fetch_data (line 24) | def fetch_data(session: Session, logger: Logger):
function formatted_data (line 75) | def formatted_data(
function fetch_production (line 156) | def fetch_production(
function fetch_consumption (line 179) | def fetch_consumption(
function fetch_exchange (line 202) | def fetch_exchange(
FILE: electricitymap/contrib/parsers/BB.py
class JwtPublicAuth (line 26) | class JwtPublicAuth(AuthBase):
method __init__ (line 27) | def __init__(self):
method __call__ (line 30) | def __call__(self, r):
method get_token (line 36) | def get_token(self) -> str:
function session_with_auth (line 44) | def session_with_auth(session: Session) -> Session:
function parse_operational_data (line 50) | def parse_operational_data(response_json) -> tuple[list[str], list[list[...
function fetch_operational_data (line 55) | def fetch_operational_data(
function fetch_production (line 118) | def fetch_production(
function fetch_consumption (line 151) | def fetch_consumption(
FILE: electricitymap/contrib/parsers/BE.py
function fetch_elia (line 47) | def fetch_elia(
function fetch_entsoe (line 104) | def fetch_entsoe(
function fetch_production (line 133) | def fetch_production(
FILE: electricitymap/contrib/parsers/BG.py
function fetch_production (line 29) | def fetch_production(
FILE: electricitymap/contrib/parsers/CAMMESA.py
function fetch_production (line 71) | def fetch_production(
function renewables_production_mix (line 96) | def renewables_production_mix(
function non_renewables_production_mix (line 133) | def non_renewables_production_mix(
function fetch_exchange (line 179) | def fetch_exchange(
function fetch_price (line 242) | def fetch_price(
FILE: electricitymap/contrib/parsers/CA_AB.py
function fetch_exchange (line 61) | def fetch_exchange(
function fetch_price (line 95) | def fetch_price(
function fetch_production (line 125) | def fetch_production(
function get_csd_report_timestamp (line 173) | def get_csd_report_timestamp(report):
function _get_wind_solar_data (line 180) | def _get_wind_solar_data(session: Session, url: str) -> pd.DataFrame:
function fetch_wind_solar_forecasts (line 186) | def fetch_wind_solar_forecasts(
function fetch_grid_alerts (line 230) | def fetch_grid_alerts(
FILE: electricitymap/contrib/parsers/CA_BC.py
function fetch_consumption (line 36) | def fetch_consumption(
function fetch_exchange (line 80) | def fetch_exchange(
FILE: electricitymap/contrib/parsers/CA_NB.py
function _get_new_brunswick_flows (line 30) | def _get_new_brunswick_flows(requests_obj):
function fetch_production (line 57) | def fetch_production(
function fetch_exchange (line 106) | def fetch_exchange(
FILE: electricitymap/contrib/parsers/CA_NS.py
function _parse_timestamp (line 31) | def _parse_timestamp(timestamp: str) -> datetime:
function fetch_production (line 40) | def fetch_production(
function fetch_exchange (line 116) | def fetch_exchange(
FILE: electricitymap/contrib/parsers/CA_ON.py
function _fetch_xml (line 89) | def _fetch_xml(
function _fetch_xmls (line 110) | def _fetch_xmls(
function _parse_hour (line 132) | def _parse_hour(element: ElementTree.Element) -> int:
function fetch_production (line 138) | def fetch_production(
function fetch_price (line 188) | def fetch_price(
function fetch_exchange (line 226) | def fetch_exchange(
function fetch_consumption_forecast (line 300) | def fetch_consumption_forecast(
function read_adequacy_report (line 354) | def read_adequacy_report(root, logger):
function read_VGForecastSummary_report (line 419) | def read_VGForecastSummary_report(root, logger):
function fetch_wind_solar_forecasts (line 489) | def fetch_wind_solar_forecasts(
function fetch_grid_alerts (line 528) | def fetch_grid_alerts(
FILE: electricitymap/contrib/parsers/CA_QC.py
function fetch_production (line 35) | def fetch_production(
function fetch_consumption (line 91) | def fetch_consumption(
function _fetch_quebec_production (line 111) | def _fetch_quebec_production(
function _fetch_quebec_consumption (line 124) | def _fetch_quebec_consumption(
FILE: electricitymap/contrib/parsers/CA_SK.py
function _request (line 37) | def _request(
function fetch_production (line 62) | def fetch_production(
function fetch_consumption (line 93) | def fetch_consumption(
FILE: electricitymap/contrib/parsers/CEB.py
function fetch_production (line 38) | def fetch_production(
FILE: electricitymap/contrib/parsers/CENACE.py
function parse_date (line 81) | def parse_date(date, hour):
function fetch_csv_for_date (line 88) | def fetch_csv_for_date(dt, session: Session | None = None):
function convert_production (line 165) | def convert_production(series: pd.Series) -> ProductionMix:
function fetch_production (line 176) | def fetch_production(
function fetch_MX_exchange (line 223) | def fetch_MX_exchange(sorted_zone_keys: ZoneKey, s: Session) -> float:
function fetch_exchange (line 249) | def fetch_exchange(
function fetch_consumption (line 277) | def fetch_consumption(
FILE: electricitymap/contrib/parsers/CH.py
function get_solar_capacity_at (line 13) | def get_solar_capacity_at(target_datetime: datetime) -> float:
function fetch_swiss_exchanges (line 56) | def fetch_swiss_exchanges(session, target_datetime, logger):
function fetch_swiss_consumption (line 80) | def fetch_swiss_consumption(
function fetch_production (line 94) | def fetch_production(
FILE: electricitymap/contrib/parsers/CL.py
function production_processor_historical (line 33) | def production_processor_historical(raw_data):
function fetch_production (line 66) | def fetch_production(
FILE: electricitymap/contrib/parsers/CNDC.py
function extract_xsrf_token (line 38) | def extract_xsrf_token(html):
function get_datetime (line 43) | def get_datetime(query_date: datetime, hour: int) -> datetime:
function _check_response (line 53) | def _check_response(response, context: str = ""):
function fetch_data (line 73) | def fetch_data(
function parse_generation_forecast (line 133) | def parse_generation_forecast(
function parser_production_breakdown (line 155) | def parser_production_breakdown(
function fetch_production (line 192) | def fetch_production(
function fetch_generation_forecast (line 206) | def fetch_generation_forecast(
FILE: electricitymap/contrib/parsers/CO.py
function fetch_consumption (line 60) | def fetch_consumption(
function _fetch_live_consumption (line 74) | def _fetch_live_consumption(
function _fetch_historical_consumption (line 101) | def _fetch_historical_consumption(
function fetch_production (line 144) | def fetch_production(
function fetch_price (line 234) | def fetch_price(
FILE: electricitymap/contrib/parsers/CR.py
function _parse_exchange_data (line 45) | def _parse_exchange_data(
function fetch_production (line 62) | def fetch_production(
function fetch_exchange (line 129) | def fetch_exchange(
FILE: electricitymap/contrib/parsers/CY.py
class CyprusParser (line 27) | class CyprusParser:
method __init__ (line 38) | def __init__(self, session, logger: Logger = getLogger(__name__)):
method warn (line 42) | def warn(self, text: str) -> None:
method parse_capacity (line 45) | def parse_capacity(self, html) -> dict:
method parse_production (line 55) | def parse_production(self, html, capacity: dict) -> list:
method fetch_production (line 96) | def fetch_production(self, target_datetime: datetime | None) -> list:
function fetch_production (line 126) | def fetch_production(
FILE: electricitymap/contrib/parsers/CZ.py
function get_mapper (line 46) | def get_mapper(xmlload):
function make_request (line 56) | def make_request(session, payload, zone_key):
function get_target_datetime (line 70) | def get_target_datetime(dt: datetime | None) -> datetime:
function __get_exchange_data (line 77) | def __get_exchange_data(
function fetch_production (line 144) | def fetch_production(
function fetch_exchange (line 207) | def fetch_exchange(
function fetch_exchange_forecast (line 219) | def fetch_exchange_forecast(
FILE: electricitymap/contrib/parsers/DK.py
function fetch_data (line 44) | def fetch_data(
function flow (line 100) | def flow(sorted_keys: ZoneKey, datapoint: dict) -> int | float | None:
function fetch_exchange (line 114) | def fetch_exchange(
function fetch_wind_solar_forecasts (line 148) | def fetch_wind_solar_forecasts(
FILE: electricitymap/contrib/parsers/DO.py
function get_datetime_from_hour (line 95) | def get_datetime_from_hour(now: datetime, hour: int) -> datetime:
function get_data (line 99) | def get_data(session: Session | None = None) -> list[list[str]]:
function floater (line 123) | def floater(item):
function chunker (line 135) | def chunker(big_lst) -> dict:
function data_formatter (line 156) | def data_formatter(data: list[list[str]]) -> list[list[str]]:
function correct_solar_production (line 189) | def correct_solar_production(production: pd.DataFrame) -> pd.DataFrame:
function extract_renewable_production (line 206) | def extract_renewable_production(data: list[list[str]], dt: datetime) ->...
function extract_thermal_production (line 228) | def extract_thermal_production(data: list[list[str]], dt: datetime) -> p...
function fetch_production (line 250) | def fetch_production(
FILE: electricitymap/contrib/parsers/EC.py
function _decode_bdata (line 71) | def _decode_bdata(b64: str) -> list:
function _get_y_values (line 78) | def _get_y_values(trace: dict) -> list:
function _parse_traces (line 91) | def _parse_traces(html: str) -> dict:
function _parse_page_date (line 114) | def _parse_page_date(html: str) -> date:
function _str_to_dt (line 131) | def _str_to_dt(time_str: str, today: date) -> datetime:
function fetch_production (line 140) | def fetch_production(
function fetch_consumption (line 198) | def fetch_consumption(
FILE: electricitymap/contrib/parsers/ECO2MIX.py
function query (line 81) | def query(url_type_arg, session: Session, target_datetime: datetime | No...
function query_exchange (line 101) | def query_exchange(session: Session, target_datetime: datetime | None):
function query_production (line 107) | def query_production(session: Session, target_datetime: datetime | None):
function parse_production_to_df (line 113) | def parse_production_to_df(text):
function format_production_df (line 151) | def format_production_df(df, zone_key):
function fetch_production (line 188) | def fetch_production(
function parse_exchange_to_df (line 206) | def parse_exchange_to_df(text):
function format_exchange_df (line 269) | def format_exchange_df(df, sorted_zone_keys: ZoneKey, logger: Logger):
function fetch_exchange (line 302) | def fetch_exchange(
FILE: electricitymap/contrib/parsers/EIA.py
function fetch_production (line 391) | def fetch_production(
function fetch_consumption (line 407) | def fetch_consumption(
function fetch_consumption_forecast (line 433) | def fetch_consumption_forecast(
function create_production_storage (line 458) | def create_production_storage(
function fetch_production_mix (line 497) | def fetch_production_mix(
function fetch_exchange (line 639) | def fetch_exchange(
function _fetch_any (line 693) | def _fetch_any(
function _fetch_historical (line 723) | def _fetch_historical(
function _fetch_forecast (line 743) | def _fetch_forecast(
function _parse_hourly_interval (line 765) | def _parse_hourly_interval(period: str):
FILE: electricitymap/contrib/parsers/ELEXON.py
function zulu_to_utc (line 119) | def zulu_to_utc(datetime_str: str) -> str:
function query_elexon (line 123) | def query_elexon(url: str, session: Session, params: dict) -> list | dict:
function parse_datetime (line 133) | def parse_datetime(
function query_IM_exchange (line 146) | def query_IM_exchange(
function get_event_value (line 177) | def get_event_value(event: dict[str, Any], key: str) -> float | None:
function parse_production (line 183) | def parse_production(
function _create_eso_historical_demand_index (line 244) | def _create_eso_historical_demand_index(session: Session) -> dict[int, s...
function query_additional_eso_data (line 259) | def query_additional_eso_data(
function parse_eso_production (line 278) | def parse_eso_production(
function parse_eso_hydro_storage (line 317) | def parse_eso_hydro_storage(
function query_production_fuelhh (line 338) | def query_production_fuelhh(
function query_and_merge_production_fuelhh_and_eso (line 359) | def query_and_merge_production_fuelhh_and_eso(
function query_exchange (line 374) | def query_exchange(
function query_actual_demand (line 414) | def query_actual_demand(
function parse_demand_data (line 430) | def parse_demand_data(
function fetch_consumption (line 454) | def fetch_consumption(
function fetch_exchange (line 482) | def fetch_exchange(
function fetch_production (line 512) | def fetch_production(
function validate_bmrs_data (line 541) | def validate_bmrs_data(data: ProductionBreakdownList):
FILE: electricitymap/contrib/parsers/ENERCAL.py
function fetch_production (line 21) | def fetch_production(
FILE: electricitymap/contrib/parsers/ENTE.py
function floor_to_minute (line 39) | def floor_to_minute(dt: datetime) -> datetime:
function fetch_production (line 43) | def fetch_production(
function extract_exchange (line 68) | def extract_exchange(raw_data, exchange) -> float | None:
function fetch_exchange (line 87) | def fetch_exchange(
FILE: electricitymap/contrib/parsers/ENTSOE.py
class EntsoeTypeEnum (line 77) | class EntsoeTypeEnum(str, Enum):
method __str__ (line 87) | def __str__(self) -> str:
class EntsoeDocumentTypeEnum (line 91) | class EntsoeDocumentTypeEnum(str, Enum):
function query_ENTSOE (line 279) | def query_ENTSOE(
function query_consumption (line 335) | def query_consumption(
function query_production (line 356) | def query_production(
function query_exchange (line 376) | def query_exchange(
function query_exchange_forecast (line 397) | def query_exchange_forecast(
function query_exchange_capacity_forecast (line 420) | def query_exchange_capacity_forecast(
function query_price (line 452) | def query_price(
function query_generation_forecast (line 479) | def query_generation_forecast(
function query_consumption_forecast (line 501) | def query_consumption_forecast(
function query_wind_solar_production_forecast (line 523) | def query_wind_solar_production_forecast(
function zulu_to_utc (line 558) | def zulu_to_utc(datetime_string: str) -> str:
function datetime_from_position (line 564) | def datetime_from_position(
function parse_scalar (line 571) | def parse_scalar(
function parse_production (line 592) | def parse_production(
function _get_raw_production_events (line 631) | def _get_raw_production_events(soup: BeautifulSoup) -> list[dict[str, An...
function _create_production_and_storage_mixes (line 654) | def _create_production_and_storage_mixes(
function _get_expected_production_group_length (line 692) | def _get_expected_production_group_length(
function _group_production_data_by_datetime (line 704) | def _group_production_data_by_datetime(
class IntPoint (line 721) | class IntPoint(NamedTuple):
class DateTimePoint (line 728) | class DateTimePoint(NamedTuple):
class Period (line 736) | class Period:
class TimeSeries (line 746) | class TimeSeries:
function _iter_points (line 753) | def _iter_points(
function _resolution_to_timedelta (line 773) | def _resolution_to_timedelta(resolution: str) -> timedelta:
function _iter_periods (line 791) | def _iter_periods(
function _get_datetime_value_from_timeseries (line 821) | def _get_datetime_value_from_timeseries(
function _reverse_A3_curve_compression_for_period (line 858) | def _reverse_A3_curve_compression_for_period(
function parse_exchange (line 891) | def parse_exchange(
function parse_exchange_forecast (line 913) | def parse_exchange_forecast(
function _merge_exchange_capacity_forecasts (line 948) | def _merge_exchange_capacity_forecasts(
function parse_exchange_capacity_forecast (line 986) | def parse_exchange_capacity_forecast(
function parse_prices (line 1036) | def parse_prices(
function fetch_production (line 1061) | def fetch_production(
function get_raw_exchange (line 1100) | def get_raw_exchange(
function fetch_exchange (line 1253) | def fetch_exchange(
function fetch_exchange_forecast (line 1274) | def fetch_exchange_forecast(
function fetch_price (line 1296) | def fetch_price(
function fetch_price_intraday (line 1326) | def fetch_price_intraday(
function fetch_generation_forecast (line 1368) | def fetch_generation_forecast(
function fetch_consumption (line 1428) | def fetch_consumption(
function fetch_consumption_forecast (line 1482) | def fetch_consumption_forecast(
function _fetch_wind_solar_forecasts (line 1534) | def _fetch_wind_solar_forecasts(
function fetch_wind_solar_forecasts (line 1574) | def fetch_wind_solar_forecasts(
function fetch_wind_solar_forecasts_day_ahead (line 1618) | def fetch_wind_solar_forecasts_day_ahead(
function fetch_wind_solar_forecasts_intraday (line 1634) | def fetch_wind_solar_forecasts_intraday(
function fetch_wind_solar_forecasts_current (line 1650) | def fetch_wind_solar_forecasts_current(
function _fetch_exchange_capacity_forecasts (line 1665) | def _fetch_exchange_capacity_forecasts(
function fetch_exchange_capacity_forecasts_day_ahead (line 1743) | def fetch_exchange_capacity_forecasts_day_ahead(
function fetch_exchange_capacity_forecasts_week_ahead (line 1762) | def fetch_exchange_capacity_forecasts_week_ahead(
function fetch_exchange_capacity_forecasts_month_ahead (line 1781) | def fetch_exchange_capacity_forecasts_month_ahead(
FILE: electricitymap/contrib/parsers/ERP_PGCB.py
function table_entry_to_float (line 53) | def table_entry_to_float(entry: str):
function parse_table_body (line 68) | def parse_table_body(table_body: Tag) -> list[dict]:
function verify_table_header (line 114) | def verify_table_header(table_header: Tag):
function query (line 133) | def query(
function fetch_production (line 196) | def fetch_production(
function fetch_consumption (line 248) | def fetch_consumption(
function fetch_exchange (line 283) | def fetch_exchange(
FILE: electricitymap/contrib/parsers/ES.py
function check_valid_parameters (line 221) | def check_valid_parameters(
function check_known_key (line 254) | def check_known_key(key: str, logger: Logger):
function get_url (line 260) | def get_url(zone_key: ZoneKey, date: str) -> str:
function get_ree_data (line 268) | def get_ree_data(
function parse_date (line 289) | def parse_date(str_date, tz):
function fetch_and_preprocess_data (line 314) | def fetch_and_preprocess_data(
function fetch_consumption (line 340) | def fetch_consumption(
function fetch_production (line 362) | def fetch_production(
function fetch_exchange (line 413) | def fetch_exchange(
FILE: electricitymap/contrib/parsers/ESIOS.py
function get_exchange_multiplication_factor (line 34) | def get_exchange_multiplication_factor(
function format_url (line 58) | def format_url(target_datetime: datetime, ID: str):
function fetch_exchange (line 66) | def fetch_exchange(
FILE: electricitymap/contrib/parsers/ESKOM.py
function get_url (line 54) | def get_url() -> str:
function fetch_production (line 60) | def fetch_production(
FILE: electricitymap/contrib/parsers/ESTADISTICO_UT.py
function _fetch_data (line 42) | def _fetch_data(session: Session, target_datetime: datetime | None = Non...
function _parse_data (line 105) | def _parse_data(data: dict) -> list[dict]:
function _process_data (line 151) | def _process_data(
function fetch_production (line 179) | def fetch_production(
FILE: electricitymap/contrib/parsers/FO.py
function _fetch_production_historical (line 45) | def _fetch_production_historical(
function _fetch_production_live (line 130) | def _fetch_production_live(
function fetch_production (line 196) | def fetch_production(
FILE: electricitymap/contrib/parsers/FR.py
function get_data (line 47) | def get_data(session: Session, target_datetime: datetime) -> pd.DataFrame:
function request_data (line 60) | def request_data(
function reindex_data (line 98) | def reindex_data(df_to_reindex: pd.DataFrame) -> pd.DataFrame:
function fetch_production (line 118) | def fetch_production(
function fetch_consumption (line 169) | def fetch_consumption(
FILE: electricitymap/contrib/parsers/FR_O.py
function generate_url (line 112) | def generate_url(zone_key, target_datetime):
function fetch_data (line 118) | def fetch_data(
function fetch_production (line 188) | def fetch_production(
function fetch_price (line 234) | def fetch_price(
FILE: electricitymap/contrib/parsers/GB.py
function fetch_price (line 66) | def fetch_price(
function fetch_production (line 159) | def fetch_production(
function _fetch_all_storage_data (line 250) | def _fetch_all_storage_data(
function _rows_to_df (line 295) | def _rows_to_df(rows: list[dict]) -> pd.DataFrame:
function _build_storage_lookup (line 331) | def _build_storage_lookup(
function _compute_storage_mix (line 396) | def _compute_storage_mix(
function _compute_storage_for_units (line 439) | def _compute_storage_for_units(
function _extract_data_rows (line 485) | def _extract_data_rows(payload: dict | list) -> list[dict]:
function _get_boalf_value_at_minute (line 492) | def _get_boalf_value_at_minute(
function _get_level_at_minute (line 532) | def _get_level_at_minute(records: list[dict], minute_dt: datetime) -> fl...
function _compute_unit_storage_mw (line 555) | def _compute_unit_storage_mw(
function _fetch_storage_dataset (line 635) | def _fetch_storage_dataset(
function get_hydro_storage_units (line 650) | def get_hydro_storage_units(session: Session, zone_key: ZoneKey) -> list...
function get_battery_units (line 667) | def get_battery_units(session: Session, zone_key: ZoneKey) -> list[str]:
FILE: electricitymap/contrib/parsers/GCCIA.py
function fetch_consumption (line 48) | def fetch_consumption(
FILE: electricitymap/contrib/parsers/GSO.py
function get_api_data (line 47) | def get_api_data(session: Session, url, data):
function fetch_consumption (line 57) | def fetch_consumption(
function fetch_exchange (line 92) | def fetch_exchange(
function fetch_production (line 166) | def fetch_production(
FILE: electricitymap/contrib/parsers/GT.py
class ApiKind (line 52) | class ApiKind(enum.Enum):
function _get_api_data (line 57) | def _get_api_data(
function fetch_consumption (line 133) | def fetch_consumption(
function fetch_production (line 170) | def fetch_production(
FILE: electricitymap/contrib/parsers/HN.py
function get_production_data_by_type (line 45) | def get_production_data_by_type(
function get_exchange_data (line 84) | def get_exchange_data(session: Session) -> tuple[list[Any], dict[str, st...
function safe_float_conversion (line 98) | def safe_float_conversion(value: str | None) -> float | None:
function extract_date_from_csv (line 110) | def extract_date_from_csv(CSV_data: list) -> str | None:
function create_production_breakdown_list (line 120) | def create_production_breakdown_list(
function parse_exchange_data_by_hour (line 155) | def parse_exchange_data_by_hour(
function get_production_values (line 194) | def get_production_values(
function get_datetime (line 230) | def get_datetime(date: str | None, hour: int) -> datetime | None:
function fetch_production (line 244) | def fetch_production(
function fetch_exchange (line 261) | def fetch_exchange(
FILE: electricitymap/contrib/parsers/IEMOP.py
function _validate_resource_name_to_mode_mapping (line 465) | def _validate_resource_name_to_mode_mapping():
class MarketReportsItem (line 473) | class MarketReportsItem(NamedTuple):
function get_all_market_reports_items (line 479) | def get_all_market_reports_items(
function filter_reports_items (line 517) | def filter_reports_items(
function download_production_market_reports_items (line 550) | def download_production_market_reports_items(
function filter_for_zone (line 606) | def filter_for_zone(df: pd.DataFrame, zone_key: ZoneKey) -> pd.DataFrame:
function filter_valid_values (line 611) | def filter_valid_values(df: pd.DataFrame, logger: Logger) -> pd.DataFrame:
function match_resources_to_modes (line 630) | def match_resources_to_modes(df: pd.DataFrame) -> pd.DataFrame:
function aggregate_per_datetime_mode (line 643) | def aggregate_per_datetime_mode(df: pd.DataFrame) -> pd.DataFrame:
function pivot_per_mode (line 651) | def pivot_per_mode(df: pd.DataFrame) -> pd.DataFrame:
function download_exchange_market_reports_items (line 677) | def download_exchange_market_reports_items(
function convert_column_to_datetime (line 705) | def convert_column_to_datetime(df: pd.DataFrame, datetime_column: str) -...
function fetch_production (line 718) | def fetch_production(
function fetch_exchange (line 762) | def fetch_exchange(
FILE: electricitymap/contrib/parsers/IL.py
function fetch_all (line 39) | def fetch_all() -> list:
function fetch_noga_iso_data (line 69) | def fetch_noga_iso_data(session: Session, logger: Logger):
function fetch_production (line 82) | def fetch_production(
function fetch_total_production (line 112) | def fetch_total_production(
function fetch_consumption (line 135) | def fetch_consumption(
FILE: electricitymap/contrib/parsers/IN.py
function fetch_consumption_from_meritindia (line 158) | def fetch_consumption_from_meritindia(
function fetch_npp_production (line 200) | def fetch_npp_production(
function fetch_consumption (line 247) | def fetch_consumption(
function format_ren_production_data (line 261) | def format_ren_production_data(
function fetch_cea_production (line 313) | def fetch_cea_production(
function fetch_grid_india_report (line 376) | def fetch_grid_india_report(
function get_daily_generation_table (line 459) | def get_daily_generation_table(content: bytes) -> pd.DataFrame:
function get_wind_solar (line 526) | def get_wind_solar(content: bytes, zone_key: str) -> pd.DataFrame:
function parse_daily_production_grid_india_report (line 589) | def parse_daily_production_grid_india_report(
function parse_15m_production_grid_india_report (line 633) | def parse_15m_production_grid_india_report(
function get_production_breakdown (line 707) | def get_production_breakdown(content: bytes, zone_key: str) -> pd.DataFr...
function compute_zone_key_share_per_mode_out_of_total (line 765) | def compute_zone_key_share_per_mode_out_of_total(
function scale_15min_production (line 794) | def scale_15min_production(content: bytes, scaling_factor: float) -> pd....
function parse_daily_total_production_grid_india_report (line 832) | def parse_daily_total_production_grid_india_report(
function parse_total_production_15min_grid_india_report (line 849) | def parse_total_production_15min_grid_india_report(
function fetch_production (line 864) | def fetch_production(
function parse_production_from_cea_npp (line 924) | def parse_production_from_cea_npp(
function daily_to_hourly_production_data (line 968) | def daily_to_hourly_production_data(
FILE: electricitymap/contrib/parsers/IN_DL.py
function fetch_consumption (line 27) | def fetch_consumption(
function fetch_production (line 58) | def fetch_production(
FILE: electricitymap/contrib/parsers/IN_EA.py
function get_fetch_function (line 37) | def get_fetch_function(
function extract_international_exchanges (line 58) | def extract_international_exchanges(
function extract_interregional_exchanges (line 76) | def extract_interregional_exchanges(
function fetch_exchange (line 95) | def fetch_exchange(
FILE: electricitymap/contrib/parsers/IN_HP.py
class GenType (line 21) | class GenType(Enum):
function fetch_production (line 74) | def fetch_production(
function get_state_gen (line 102) | def get_state_gen(soup, logger: Logger):
function get_isgs_gen (line 123) | def get_isgs_gen(soup, logger: Logger):
function get_table_rows (line 151) | def get_table_rows(soup, container_class, table_name):
function combine_gen (line 162) | def combine_gen(gen1, gen2):
function fetch_consumption (line 179) | def fetch_consumption(
function fetch_price (line 191) | def fetch_price(
FILE: electricitymap/contrib/parsers/IN_KA.py
function fetch_consumption (line 12) | def fetch_consumption(
function fetch_production (line 39) | def fetch_production(
FILE: electricitymap/contrib/parsers/IN_MH.py
function RGBtoBW (line 105) | def RGBtoBW(pil_image):
function read_image_sections (line 113) | def read_image_sections(location, source):
function fetch_production (line 121) | def fetch_production(
FILE: electricitymap/contrib/parsers/IN_PB.py
function fetch_production (line 24) | def fetch_production(
function fetch_consumption (line 65) | def fetch_consumption(
FILE: electricitymap/contrib/parsers/IN_UT.py
function get_connection (line 49) | def get_connection(soup, connection_name):
function get_datetime (line 57) | def get_datetime(soup, zone_key, logger):
function get_production_values (line 70) | def get_production_values(soup):
function fetch_exchange (line 82) | def fetch_exchange(
function fetch_production (line 115) | def fetch_production(
FILE: electricitymap/contrib/parsers/IN_WE.py
function _get_hour_dts (line 46) | def _get_hour_dts(dt: datetime):
function _fetch_data (line 62) | def _fetch_data(
function _get_df_for_hour (line 105) | def _get_df_for_hour(kind: str, data: dict, hour: int) -> pd.DataFrame:
function _get_mean_hourly_net_flow (line 113) | def _get_mean_hourly_net_flow(
function _get_mean_hourly_consumption (line 138) | def _get_mean_hourly_consumption(
function fetch_exchange (line 162) | def fetch_exchange(
function fetch_consumption (line 201) | def fetch_consumption(
FILE: electricitymap/contrib/parsers/JAO.py
class JaoRegion (line 54) | class JaoRegion(str, Enum):
method __str__ (line 60) | def __str__(self) -> str:
class JaoDataset (line 64) | class JaoDataset(str, Enum):
method __str__ (line 80) | def __str__(self) -> str:
function _em_to_jao_zone (line 112) | def _em_to_jao_zone(em_zone: str) -> str:
function _format_utc (line 117) | def _format_utc(dt: datetime) -> str:
function _parse_utc (line 122) | def _parse_utc(value: str) -> datetime:
function _target_window (line 127) | def _target_window(
function _query_jao (line 153) | def _query_jao(
function _extract_border_capacity (line 199) | def _extract_border_capacity(
function _extract_border_net_flow (line 235) | def _extract_border_net_flow(
function _fetch_per_border_dataset (line 275) | def _fetch_per_border_dataset(
function fetch_shadow_auction_atc_day_ahead (line 294) | def fetch_shadow_auction_atc_day_ahead(
function fetch_core_external_atc_day_ahead (line 319) | def fetch_core_external_atc_day_ahead(
function fetch_core_max_bex_day_ahead (line 341) | def fetch_core_max_bex_day_ahead(
function fetch_nordic_max_bex_day_ahead (line 365) | def fetch_nordic_max_bex_day_ahead(
function fetch_core_scheduled_exchanges_day_ahead (line 389) | def fetch_core_scheduled_exchanges_day_ahead(
function fetch_nordic_max_bflow_day_ahead (line 417) | def fetch_nordic_max_bflow_day_ahead(
FILE: electricitymap/contrib/parsers/JP.py
function get_wind_capacity (line 50) | def get_wind_capacity(datetime: datetime, zone_key, logger: Logger):
function fetch_production (line 68) | def fetch_production(
function fetch_production_df (line 109) | def fetch_production_df(
function fetch_consumption_df (line 157) | def fetch_consumption_df(
function fetch_price (line 217) | def fetch_price(
function parse_dt (line 283) | def parse_dt(row):
function read_csv_forecast (line 306) | def read_csv_forecast(
function fetch_consumption_forecast (line 418) | def fetch_consumption_forecast(
function fetch_generation_forecast (line 483) | def fetch_generation_forecast(
FILE: electricitymap/contrib/parsers/JP_KN.py
function fetch_production (line 24) | def fetch_production(
function get_image_text (line 63) | def get_image_text(img_url, lang, width=None):
function extract_capacity (line 81) | def extract_capacity(tr):
function extract_operation_percentage (line 95) | def extract_operation_percentage(tr):
function extract_time (line 113) | def extract_time(soup):
function get_nuclear_production (line 138) | def get_nuclear_production():
FILE: electricitymap/contrib/parsers/JP_KY.py
function fetch_production (line 22) | def fetch_production(
FILE: electricitymap/contrib/parsers/JP_SK.py
function fetch_production (line 22) | def fetch_production(
function get_nuclear_power_image_url (line 66) | def get_nuclear_power_image_url(session: Session) -> str:
function get_nuclear_power_value_and_timestamp_from_image_url (line 78) | def get_nuclear_power_value_and_timestamp_from_image_url(
FILE: electricitymap/contrib/parsers/KPX.py
function parse_consumption_data (line 59) | def parse_consumption_data(
function fetch_consumption (line 108) | def fetch_consumption(
function fetch_price (line 131) | def fetch_price(
function parse_chart_prod_data (line 187) | def parse_chart_prod_data(
function get_real_time_prod_data (line 233) | def get_real_time_prod_data(
function get_historical_prod_data (line 243) | def get_historical_prod_data(
function fetch_production (line 276) | def fetch_production(
FILE: electricitymap/contrib/parsers/KW.py
class _CustomHttpAdapter (line 33) | class _CustomHttpAdapter(requests.adapters.HTTPAdapter):
method __init__ (line 36) | def __init__(self, ssl_context=None, **kwargs):
method init_poolmanager (line 40) | def init_poolmanager(self, connections, maxsize, block=False):
function _patch_session_for_legacy_connect (line 49) | def _patch_session_for_legacy_connect(session):
function fetch_consumption (line 56) | def fetch_consumption(
FILE: electricitymap/contrib/parsers/MD.py
class ArchiveDatapoint (line 71) | class ArchiveDatapoint(NamedTuple):
function _get_archive_data (line 88) | def _get_archive_data(
function fetch_price (line 151) | def fetch_price(
function fetch_consumption (line 193) | def fetch_consumption(
function fetch_production (line 217) | def fetch_production(
function _fetch_exchange (line 250) | def _fetch_exchange(
function fetch_exchange (line 312) | def fetch_exchange(
function fetch_exchange_forecast (line 332) | def fetch_exchange_forecast(
FILE: electricitymap/contrib/parsers/MN.py
function _fetch_and_parse (line 53) | def _fetch_and_parse(session: Session) -> dict[str, Any]:
function fetch_production (line 95) | def fetch_production(
function fetch_consumption (line 122) | def fetch_consumption(
FILE: electricitymap/contrib/parsers/NED.py
class NedType (line 43) | class NedType(Enum):
class NedActivity (line 56) | class NedActivity(Enum):
class NedGranularity (line 61) | class NedGranularity(Enum):
class NedGranularityTimezone (line 70) | class NedGranularityTimezone(Enum):
class NedClassification (line 75) | class NedClassification(Enum):
class NedPoint (line 80) | class NedPoint(Enum):
function _kwh_to_mw (line 85) | def _kwh_to_mw(kwh: float, granularity: int) -> float:
function call_api (line 119) | def call_api(target_datetime: datetime, forecast: bool = False):
function _get_entsoe_production_data (line 178) | def _get_entsoe_production_data(
function format_data (line 203) | def format_data(
function fetch_production (line 272) | def fetch_production(
function fetch_production_forecast (line 303) | def fetch_production_forecast(
FILE: electricitymap/contrib/parsers/NG.py
function get_data (line 36) | def get_data(session: Session, logger: Logger, timestamp: datetime):
function fetch_production (line 79) | def fetch_production(
FILE: electricitymap/contrib/parsers/NI.py
function extract_text (line 42) | def extract_text(full_text: str, start_text: str, end_text: str | None =...
function fetch_production (line 62) | def fetch_production(
function fetch_exchange (line 111) | def fetch_exchange(
function fetch_price (line 167) | def fetch_price(
FILE: electricitymap/contrib/parsers/NL.py
function fetch_production (line 18) | def fetch_production(
function get_wind_capacities (line 162) | def get_wind_capacities() -> pd.DataFrame:
function get_solar_capacities (line 185) | def get_solar_capacities() -> pd.DataFrame:
function _get_capacity_at (line 221) | def _get_capacity_at(date: datetime, mode: str, capacity_df: pd.DataFram...
function get_solar_capacity_at (line 238) | def get_solar_capacity_at(date: datetime, solar_capacity_df: pd.DataFram...
function get_wind_capacity_at (line 242) | def get_wind_capacity_at(date: datetime, wind_capacity_df: pd.DataFrame)...
FILE: electricitymap/contrib/parsers/NO-NO4_SE.py
function fetch_data (line 25) | def fetch_data(
function fetch_exchange (line 97) | def fetch_exchange(
function fetch_exchange_forecast (line 115) | def fetch_exchange_forecast(
FILE: electricitymap/contrib/parsers/NORDPOOL.py
class NordpoolToken (line 23) | class NordpoolToken:
method is_expired (line 28) | def is_expired(self) -> bool:
class NORDPOOL_API_ENDPOINT (line 37) | class NORDPOOL_API_ENDPOINT(Enum):
class MARKET_TYPE (line 42) | class MARKET_TYPE(Enum):
class CURRENCY (line 47) | class CURRENCY(Enum):
function _generate_new_nordpool_token (line 87) | def _generate_new_nordpool_token(session: Session) -> NordpoolToken:
function _handle_status_code (line 114) | def _handle_status_code(response: Response, logger: Logger) -> Response:
function zulu_to_utc (line 135) | def zulu_to_utc(datetime_string: str) -> str:
function _query_nordpool (line 140) | def _query_nordpool(
function _parse_price (line 161) | def _parse_price(response: Response, logger: Logger) -> PriceList:
function fetch_price (line 177) | def fetch_price(
function _parse_exchange (line 210) | def _parse_exchange(response: Response, logger: Logger, target_zone) -> ...
function fetch_exchange (line 233) | def fetch_exchange(
FILE: electricitymap/contrib/parsers/NTESMO.py
class Generator (line 36) | class Generator(TypedDict):
function _scan_daily_report_urls (line 83) | def _scan_daily_report_urls(
function _find_link_to_daily_report (line 122) | def _find_link_to_daily_report(target_datetime: datetime, session: Sessi...
function get_daily_report_data (line 165) | def get_daily_report_data(
function extract_consumption_and_price_data (line 187) | def extract_consumption_and_price_data(file: bytes) -> pd.DataFrame:
function parse_consumption_and_price (line 193) | def parse_consumption_and_price(
function parse_production_mix (line 222) | def parse_production_mix(
function fetch_consumption (line 272) | def fetch_consumption(
function fetch_price (line 299) | def fetch_price(
function fetch_production (line 326) | def fetch_production(
function fetch_consumption_forecast (line 357) | def fetch_consumption_forecast(
FILE: electricitymap/contrib/parsers/NZ.py
function fetch (line 28) | def fetch(session: Session | None = None):
function fetch_price (line 40) | def fetch_price(
function fetch_production (line 86) | def fetch_production(
FILE: electricitymap/contrib/parsers/ONS.py
function get_data (line 49) | def get_data(session: Session | None):
function production_processor (line 57) | def production_processor(
function fetch_production (line 77) | def fetch_production(
function get_exchange_flow (line 100) | def get_exchange_flow(sorted_zone_keys: ZoneKey, raw_data: dict) -> float:
function fetch_exchange (line 106) | def fetch_exchange(
FILE: electricitymap/contrib/parsers/OPENNEM.py
function fetch_datasets (line 111) | def fetch_datasets(
function generate_url (line 132) | def generate_url(zone_key: ZoneKey, target_datetime: datetime | None) ->...
function process_production_datasets (line 149) | def process_production_datasets(
function fetch_production (line 294) | def fetch_production(
function fetch_price (line 325) | def fetch_price(
function fetch_exchange (line 348) | def fetch_exchange(
function _fetch_regular_exchange (line 391) | def _fetch_regular_exchange(
function _fetch_au_nsw_au_vic_exchange (line 444) | def _fetch_au_nsw_au_vic_exchange(
function _build_network_url (line 559) | def _build_network_url(
function _fetch_network_datasets (line 596) | def _fetch_network_datasets(
function _build_price_list (line 638) | def _build_price_list(datasets, zone_key: ZoneKey, logger: Logger) -> Pr...
FILE: electricitymap/contrib/parsers/PA.py
function _localise_spanish_date (line 141) | def _localise_spanish_date(date: str) -> str:
function extract_pie_chart_data (line 153) | def extract_pie_chart_data(html):
function sum_thermal_units (line 164) | def sum_thermal_units(soup) -> float:
function fetch_production (line 195) | def fetch_production(
function fetch_exchange (line 292) | def fetch_exchange(
function fetch_consumption (line 369) | def fetch_consumption(
FILE: electricitymap/contrib/parsers/PE.py
function parse_datetime (line 34) | def parse_datetime(dt: str):
function fetch_production (line 41) | def fetch_production(
function _get_production_data (line 86) | def _get_production_data(session: Session, target_datetime: datetime) ->...
FILE: electricitymap/contrib/parsers/PF.py
function fetch_production (line 24) | def fetch_production(
FILE: electricitymap/contrib/parsers/PrinceEdwardIsland.py
function _parse_power (line 26) | def _parse_power(text: str) -> float:
function _get_event (line 30) | def _get_event(session: Session):
function fetch_production (line 56) | def fetch_production(
function fetch_exchange (line 91) | def fetch_exchange(
FILE: electricitymap/contrib/parsers/RU.py
function fetch_production (line 79) | def fetch_production(
function response_checker (line 161) | def response_checker(json_content) -> bool:
function fetch_exchange (line 179) | def fetch_exchange(
FILE: electricitymap/contrib/parsers/SE.py
function fetch_production (line 21) | def fetch_production(
FILE: electricitymap/contrib/parsers/SEAPA.py
function get_value (line 18) | def get_value(data: dict, key: str) -> float:
function fetch_production (line 22) | def fetch_production(
FILE: electricitymap/contrib/parsers/SG.py
function get_solar (line 65) | def get_solar(session: Session, logger: Logger) -> float | None:
function parse_megawatt_value (line 89) | def parse_megawatt_value(val) -> int:
function parse_percent (line 94) | def parse_percent(val) -> float:
function parse_price (line 99) | def parse_price(price_str) -> float:
function find_first_list_item_by_key_value (line 105) | def find_first_list_item_by_key_value(
function sg_period_to_hour (line 128) | def sg_period_to_hour(period_str) -> float:
function sg_data_to_datetime (line 137) | def sg_data_to_datetime(data):
function fetch_production (line 146) | def fetch_production(
function fetch_price (line 218) | def fetch_price(
function __detect_datetime_from_solar_image (line 266) | def __detect_datetime_from_solar_image(solar_image, logger: Logger):
function __detect_output_from_solar_image (line 292) | def __detect_output_from_solar_image(solar_image, logger: Logger):
function __preprocess_image_for_ocr (line 326) | def __preprocess_image_for_ocr(img):
FILE: electricitymap/contrib/parsers/SMARTGRIDDASHBOARD.py
function get_datetime_params (line 50) | def get_datetime_params(datetime: datetime) -> dict:
function parse_datetime (line 57) | def parse_datetime(datetime_str: str) -> datetime:
function fetch_data (line 61) | def fetch_data(
function parse_consumption (line 97) | def parse_consumption(
function fetch_production (line 141) | def fetch_production(
function fetch_exchange (line 218) | def fetch_exchange(
function fetch_consumption (line 280) | def fetch_consumption(
function fetch_consumption_forecast (line 297) | def fetch_consumption_forecast(
function fetch_wind_solar_forecasts (line 314) | def fetch_wind_solar_forecasts(
function fetch_total_generation (line 372) | def fetch_total_generation(
FILE: electricitymap/contrib/parsers/TAIPOWER.py
function fetch_production (line 22) | def fetch_production(
FILE: electricitymap/contrib/parsers/TH.py
function _as_localtime (line 31) | def _as_localtime(dt: datetime) -> datetime:
function _seconds_to_time (line 42) | def _seconds_to_time(target_datetime: datetime, seconds_in_day: int) -> ...
function _fetch_data (line 49) | def _fetch_data(
function fetch_production (line 98) | def fetch_production(
function fetch_consumption (line 122) | def fetch_consumption(
function fetch_generation_forecast (line 149) | def fetch_generation_forecast(
function fetch_price (line 172) | def fetch_price(
FILE: electricitymap/contrib/parsers/TR.py
function fetch_ticket_TGT (line 55) | def fetch_ticket_TGT(session: Session) -> str:
function fetch_data (line 73) | def fetch_data(target_datetime: datetime, kind: str, session: Session) -...
function fetch_production (line 122) | def fetch_production(
function fetch_consumption (line 173) | def fetch_consumption(
function fetch_price (line 203) | def fetch_price(
FILE: electricitymap/contrib/parsers/UA.py
function fetch_production (line 42) | def fetch_production(
FILE: electricitymap/contrib/parsers/US_CA.py
function get_target_url (line 64) | def get_target_url(target_datetime: datetime | None, kind: str) -> str:
function add_production_to_dict (line 73) | def add_production_to_dict(mode: str, value: float, production_dict: dic...
function fetch_production (line 83) | def fetch_production(
function fetch_consumption (line 146) | def fetch_consumption(
function fetch_exchange (line 185) | def fetch_exchange(
class OasisDatasetType (line 222) | class OasisDatasetType(Enum):
function _generate_oasis_url (line 227) | def _generate_oasis_url(oasis_url_config, dataset_type: OasisDatasetType...
function _get_oasis_data (line 246) | def _get_oasis_data(session: Session, target_url: str) -> pd.DataFrame:
function fetch_consumption_forecast (line 258) | def fetch_consumption_forecast(
function fetch_wind_solar_forecasts (line 325) | def fetch_wind_solar_forecasts(
FILE: electricitymap/contrib/parsers/US_ERCOT.py
class ReportTypeID (line 79) | class ReportTypeID(Enum):
function get_data (line 90) | def get_data(
function parse_storage_data_live (line 106) | def parse_storage_data_live(session: Session) -> pd.DataFrame:
function fetch_live_consumption (line 127) | def fetch_live_consumption(
function fetch_live_production (line 150) | def fetch_live_production(
function fetch_live_exchange (line 303) | def fetch_live_exchange(
function fetch_production (line 338) | def fetch_production(
function fetch_consumption (line 354) | def fetch_consumption(
function fetch_exchange (line 376) | def fetch_exchange(
function _get_publish_date (line 397) | def _get_publish_date(doc):
function _find_document_by_publish_date (line 401) | def _find_document_by_publish_date(documents, target_date):
function _get_dataframe_from_url (line 431) | def _get_dataframe_from_url(url, session, target_date):
function fetch_consumption_forecast (line 451) | def fetch_consumption_forecast(
function fetch_wind_solar_forecasts (line 487) | def fetch_wind_solar_forecasts(
function fetch_dayahead_locational_marginal_price (line 544) | def fetch_dayahead_locational_marginal_price(
function fetch_realtime_locational_marginal_price (line 596) | def fetch_realtime_locational_marginal_price(
function process_generation_dataframe (line 644) | def process_generation_dataframe(df):
function transform_historical_production (line 683) | def transform_historical_production(df):
function get_id_token (line 722) | def get_id_token():
FILE: electricitymap/contrib/parsers/US_MISO.py
function get_json_data (line 57) | def get_json_data(logger: Logger, session: Session | None = None) -> dict:
function data_processer (line 66) | def data_processer(json_data, logger: Logger) -> tuple[datetime, Product...
function fetch_production (line 103) | def fetch_production(
function fetch_consumption_forecast (line 127) | def fetch_consumption_forecast(
function fetch_wind_solar_forecasts (line 177) | def fetch_wind_solar_forecasts(
function fetch_grid_alerts (line 226) | def fetch_grid_alerts(
function extract_text_with_links (line 286) | def extract_text_with_links(html_content):
FILE: electricitymap/contrib/parsers/US_NEISO.py
function get_json_data (line 51) | def get_json_data(
function production_data_processer (line 80) | def production_data_processer(
function fetch_production (line 149) | def fetch_production(
function fetch_exchange (line 170) | def fetch_exchange(
function fetch_consumption_forecast (line 241) | def fetch_consumption_forecast(
function fetch_wind_solar_forecasts (line 282) | def fetch_wind_solar_forecasts(
function fetch_grid_alerts (line 384) | def fetch_grid_alerts(
FILE: electricitymap/contrib/parsers/US_NY.py
function read_csv_data (line 67) | def read_csv_data(session: Session, url: str) -> pd.DataFrame:
function read_zip_data (line 78) | def read_zip_data(session: Session, url: str, csv_file: str) -> pd.DataF...
function timestamp_converter (line 90) | def timestamp_converter(timestamp_string: str) -> datetime:
function data_parser (line 101) | def data_parser(df, mapping, logger) -> list[tuple[datetime, ProductionM...
function fetch_production (line 139) | def fetch_production(
function fetch_exchange (line 193) | def fetch_exchange(
function fetch_consumption_forecast (line 288) | def fetch_consumption_forecast(
function fetch_grid_alerts (line 341) | def fetch_grid_alerts(
FILE: electricitymap/contrib/parsers/US_PJM.py
function _get_api_subscription_key (line 78) | def _get_api_subscription_key(session: Session) -> str:
function _fetch_api_data (line 88) | def _fetch_api_data(
function fetch_consumption_forecast (line 120) | def fetch_consumption_forecast(
function fetch_production (line 152) | def fetch_production(
function fetch_wind_solar_forecasts (line 210) | def fetch_wind_solar_forecasts(
function _get_interface_data (line 280) | def _get_interface_data(
function fetch_exchange (line 329) | def fetch_exchange(
function fetch_grid_alerts (line 376) | def fetch_grid_alerts(
function extract_alert_type (line 442) | def extract_alert_type(alert: BeautifulSoup, i: int) -> GridAlertType:
function extract_message (line 453) | def extract_message(alert: BeautifulSoup, i: int) -> str:
function extract_start_and_end_time (line 464) | def extract_start_and_end_time(
FILE: electricitymap/contrib/parsers/US_PREPA.py
function extract_data (line 34) | def extract_data(html):
function convert_timestamp (line 49) | def convert_timestamp(
function fetch_production (line 68) | def fetch_production(
FILE: electricitymap/contrib/parsers/US_SPP.py
function get_data (line 97) | def get_data(url, session: Session | None = None):
function data_processor (line 111) | def data_processor(df, logger: Logger) -> list[tuple[datetime, Productio...
function fetch_production (line 172) | def fetch_production(
function _NaN_safe_get (line 234) | def _NaN_safe_get(forecast: dict, key: str) -> float:
function fetch_load_forecast (line 241) | def fetch_load_forecast(
function fetch_wind_solar_forecasts (line 286) | def fetch_wind_solar_forecasts(
function fetch_live_exchange (line 348) | def fetch_live_exchange(
function fetch_historical_exchange (line 368) | def fetch_historical_exchange(
function format_exchange_data (line 395) | def format_exchange_data(
function fetch_exchange (line 424) | def fetch_exchange(
function fetch_realtime_locational_marginal_price (line 449) | def fetch_realtime_locational_marginal_price(
function fetch_dayahead_locational_marginal_price (line 489) | def fetch_dayahead_locational_marginal_price(
function get_closest_5_minutes_datetime (line 522) | def get_closest_5_minutes_datetime(target_datetime: datetime) -> datetime:
function get_realtime_url (line 529) | def get_realtime_url(target_datetime: datetime) -> str:
function get_dayahead_url (line 548) | def get_dayahead_url(target_datetime: datetime) -> str:
FILE: electricitymap/contrib/parsers/UY.py
function get_adme_url (line 49) | def get_adme_url(target_datetime: datetime, session: Session) -> str:
function fetch_data (line 82) | def fetch_data(
function fix_solar_production (line 110) | def fix_solar_production(dt: datetime, value: float) -> int:
function fetch_production (line 119) | def fetch_production(
function fetch_consumption (line 166) | def fetch_consumption(
function fetch_exchange (line 201) | def fetch_exchange(
FILE: electricitymap/contrib/parsers/VN.py
function fetch_live_data (line 36) | def fetch_live_data(data_type: str, session: Session):
function fetch_historical_data (line 45) | def fetch_historical_data(
function fetch_live_price (line 59) | def fetch_live_price(
function fetch_live_consumption (line 80) | def fetch_live_consumption(
function fetch_historical_price (line 100) | def fetch_historical_price(
function fetch_historical_consumption (line 121) | def fetch_historical_consumption(
function fetch_price (line 142) | def fetch_price(
function fetch_consumption (line 172) | def fetch_consumption(
FILE: electricitymap/contrib/parsers/YUKONENERGY.py
function fetch_production (line 30) | def fetch_production(
FILE: electricitymap/contrib/parsers/ajenti.py
class SignalR (line 52) | class SignalR:
method __init__ (line 53) | def __init__(self, url):
method update_res (line 56) | def update_res(self, msg):
method get_value (line 60) | def get_value(self, hub, method):
function parse_payload (line 73) | def parse_payload(logger: Logger, payload) -> dict:
function format_storage_techs (line 118) | def format_storage_techs(technologies_parsed):
function sum_storage_techs (line 130) | def sum_storage_techs(technologies_parsed):
function fetch_production (line 136) | def fetch_production(
FILE: electricitymap/contrib/parsers/amper_landsnet.py
function fetch_production (line 16) | def fetch_production(
FILE: electricitymap/contrib/parsers/archived/AM.py
function fetch_production (line 65) | def fetch_production(
function fetch_exchange (line 126) | def fetch_exchange(
FILE: electricitymap/contrib/parsers/archived/AX.py
function _get_masks (line 18) | def _get_masks(session=None):
function _fetch_data (line 889) | def _fetch_data(session: Session | None = None) -> dict:
function fetch_production (line 1005) | def fetch_production(
function fetch_consumption (line 1037) | def fetch_consumption(
function fetch_exchange (line 1056) | def fetch_exchange(
FILE: electricitymap/contrib/parsers/archived/DK_old.py
function fetch_production (line 22) | def fetch_production(
function fetch_exchange (line 126) | def fetch_exchange(
FILE: electricitymap/contrib/parsers/archived/GB_NIR.py
function get_data (line 28) | def get_data(url, target_datetime, session=None):
function add_default_tz (line 99) | def add_default_tz(timestamp):
function create_production_df (line 108) | def create_production_df(text_data):
function create_exchange_df (line 120) | def create_exchange_df(text_data):
function production_processor (line 131) | def production_processor(df) -> list:
function moyle_processor (line 151) | def moyle_processor(df) -> list:
function IE_processor (line 168) | def IE_processor(df) -> list:
function fetch_production (line 187) | def fetch_production(
function fetch_exchange (line 221) | def fetch_exchange(
FILE: electricitymap/contrib/parsers/archived/GE.py
function fetch_production (line 37) | def fetch_production(
function fetch_exchange (line 119) | def fetch_exchange(
FILE: electricitymap/contrib/parsers/archived/HOPS.py
function fetch_solar_production (line 16) | def fetch_solar_production(
function fetch_production (line 56) | def fetch_production(
FILE: electricitymap/contrib/parsers/archived/IN_AP.py
function fetch_production (line 14) | def fetch_production(
function fetch_consumption (line 63) | def fetch_consumption(
FILE: electricitymap/contrib/parsers/archived/IN_CT.py
function fetch_consumption (line 14) | def fetch_consumption(
function fetch_production (line 39) | def fetch_production(
FILE: electricitymap/contrib/parsers/archived/IN_GJ.py
function split_and_sum (line 51) | def split_and_sum(expression) -> float:
function fetch_data (line 61) | def fetch_data(
function fetch_production (line 149) | def fetch_production(
function fetch_consumption (line 186) | def fetch_consumption(
FILE: electricitymap/contrib/parsers/archived/IN_UP.py
function fetch_data (line 13) | def fetch_data(zone_key="IN-UP", session=None):
function fetch_production (line 84) | def fetch_production(zone_key, session=None, target_datetime=None, logge...
function fetch_consumption (line 102) | def fetch_consumption(
FILE: electricitymap/contrib/parsers/archived/IQ.py
function template_response (line 22) | def template_response(zone_key: str, datetime: datetime, source: str) ->...
function fetch_data (line 37) | def fetch_data(r: Session):
function fetch_production (line 48) | def fetch_production(
function fetch_exchange (line 70) | def fetch_exchange(
function fetch_consumption (line 104) | def fetch_consumption(
FILE: electricitymap/contrib/parsers/archived/JP_ISEP.py
function get_data (line 40) | def get_data(region, year, month, day):
function process_data (line 57) | def process_data(df):
function fetch_production (line 77) | def fetch_production(
function fetch_consumption (line 122) | def fetch_consumption(
FILE: electricitymap/contrib/parsers/archived/SE.py
function fetch_production (line 39) | def fetch_production(
FILE: electricitymap/contrib/parsers/archived/US_BPA.py
function get_data (line 23) | def get_data(url, session=None):
function timestamp_converter (line 32) | def timestamp_converter(timestamp):
function data_processor (line 41) | def data_processor(df, logger) -> list:
function fetch_production (line 85) | def fetch_production(
FILE: electricitymap/contrib/parsers/archived/US_HI.py
function get_historical_prod (line 17) | def get_historical_prod(r, request_dt):
function validate_prod_timestamp (line 46) | def validate_prod_timestamp(logger: Logger, energy_dt, request_dt):
function fetch_production (line 58) | def fetch_production(
FILE: electricitymap/contrib/parsers/archived/XK.py
function fetch_production (line 21) | def fetch_production(
FILE: electricitymap/contrib/parsers/archived/statnett.py
function fetch_production (line 78) | def fetch_production(
function fetch_exchange_by_bidding_zone (line 153) | def fetch_exchange_by_bidding_zone(
function _fetch_exchanges_from_sorted_bidding_zones (line 196) | def _fetch_exchanges_from_sorted_bidding_zones(
function _sum_of_exchanges (line 205) | def _sum_of_exchanges(exchanges):
function fetch_exchange (line 215) | def fetch_exchange(
FILE: electricitymap/contrib/parsers/eSett.py
function fetch_production (line 31) | def fetch_production(
FILE: electricitymap/contrib/parsers/email_grid_alerts.py
function fetch_grid_alerts_emails (line 21) | def fetch_grid_alerts_emails(
FILE: electricitymap/contrib/parsers/examples/example_parser.py
function fetch_production (line 21) | def fetch_production(
function fetch_price (line 137) | def fetch_price(
function fetch_exchange (line 206) | def fetch_exchange(
function fetch_consumption (line 278) | def fetch_consumption(
function fetch_total_production (line 343) | def fetch_total_production(
FILE: electricitymap/contrib/parsers/lib/IN.py
function read_datetime_from_span_id (line 7) | def read_datetime_from_span_id(html, span_id, time_format):
function read_text_from_span_id (line 12) | def read_text_from_span_id(html, span_id):
function read_value_from_span_id (line 16) | def read_value_from_span_id(html, span_id):
FILE: electricitymap/contrib/parsers/lib/config.py
class BaseModeEnum (line 19) | class BaseModeEnum(str, Enum):
method __str__ (line 22) | def __str__(self) -> str:
method values (line 26) | def values(cls: type[ModeEnumType]) -> ValuesView[ModeEnumType]:
method names (line 31) | def names(cls) -> KeysView[str]:
method items (line 36) | def items(cls: type[ModeEnumType]) -> ItemsView[str, ModeEnumType]:
class ProductionModes (line 41) | class ProductionModes(BaseModeEnum):
class StorageModes (line 57) | class StorageModes(BaseModeEnum):
function refetch_frequency (line 65) | def refetch_frequency(frequency: timedelta):
function retry_policy (line 86) | def retry_policy(retry_policy: Retry):
function use_proxy (line 112) | def use_proxy(country_code: str, monkeypatch_for_pydataxm: bool = False):
FILE: electricitymap/contrib/parsers/lib/exceptions.py
class ParserException (line 1) | class ParserException(Exception):
method __init__ (line 14) | def __init__(self, parser: str, message: str, zone_key: str | None = N...
method __str__ (line 19) | def __str__(self):
FILE: electricitymap/contrib/parsers/lib/parsers.py
function _parser_key_to_parser_folder (line 62) | def _parser_key_to_parser_folder(parser_key: ParserDataType):
FILE: electricitymap/contrib/parsers/lib/quality.py
class ValidationError (line 13) | class ValidationError(ValueError):
function validate_datapoint_format (line 17) | def validate_datapoint_format(datapoint: dict[str, Any], kind: str, zone...
function validate_reasonable_time (line 38) | def validate_reasonable_time(item, k):
function validate_consumption (line 52) | def validate_consumption(obj: dict, zone_key: ZoneKey) -> None:
function validate_exchange (line 66) | def validate_exchange(item, k) -> None:
FILE: electricitymap/contrib/parsers/lib/session.py
class LegacyHttpAdapter (line 7) | class LegacyHttpAdapter(adapters.HTTPAdapter):
method init_poolmanager (line 8) | def init_poolmanager(self, connections, maxsize, block=False):
function get_session_with_legacy_adapter (line 18) | def get_session_with_legacy_adapter():
FILE: electricitymap/contrib/parsers/lib/tests/test_config.py
function test_ProductionModes_enum_values (line 4) | def test_ProductionModes_enum_values(snapshot):
function test_ProductionModes_enum_names (line 8) | def test_ProductionModes_enum_names(snapshot):
function test_ProductionModes_enum_items (line 12) | def test_ProductionModes_enum_items(snapshot):
function test_StorageModes_enum_values (line 16) | def test_StorageModes_enum_values(snapshot):
function test_StorageModes_enum_names (line 20) | def test_StorageModes_enum_names(snapshot):
function test_StorageModes_enum_items (line 24) | def test_StorageModes_enum_items(snapshot):
FILE: electricitymap/contrib/parsers/lib/utils.py
function get_token (line 8) | def get_token(token):
FILE: electricitymap/contrib/parsers/lib/validation.py
function validate_exchange (line 7) | def validate_exchange(
FILE: electricitymap/contrib/parsers/lib/web.py
function get_response (line 7) | def get_response(zone_key: str, url: str, session: Session | None = None):
function get_response_with_params (line 15) | def get_response_with_params(
function get_response_text (line 25) | def get_response_text(zone_key: str, url, session: Session | None = None):
function get_response_soup (line 32) | def get_response_soup(zone_key: str, url, session: Session | None = None):
FILE: electricitymap/contrib/parsers/lib/zonekey.py
function assert_zone_key (line 4) | def assert_zone_key(zone_key: str, expected, parser_name=None):
FILE: electricitymap/contrib/parsers/occtonet.py
function _fetch_exchange (line 53) | def _fetch_exchange(
function fetch_exchange (line 88) | def fetch_exchange(
function fetch_exchange_forecast (line 110) | def fetch_exchange_forecast(
function get_cookies (line 137) | def get_cookies(session: Session | None = None) -> cookies.RequestsCooki...
function get_form_data (line 144) | def get_form_data(session: Session, exchange_id: int, datetime: str) -> ...
function _get_exchange (line 220) | def _get_exchange(session: Session, form_data: dict[str, str], columns: ...
function get_exchange (line 250) | def get_exchange(session: Session, form_data):
function get_exchange_fcst (line 254) | def get_exchange_fcst(session: Session, form_data):
FILE: electricitymap/contrib/parsers/tests/conftest.py
function adapter (line 14) | def adapter():
function session (line 26) | def session(adapter):
FILE: electricitymap/contrib/parsers/tests/lib/test_IN.py
function test_read_datetime_from_span_id (line 6) | def test_read_datetime_from_span_id():
function test_read_text_from_span_id (line 22) | def test_read_text_from_span_id():
function test_read_value_from_span_id (line 29) | def test_read_value_from_span_id():
FILE: electricitymap/contrib/parsers/tests/lib/test_exceptions.py
function test_instance (line 4) | def test_instance():
function test_instance_with_zone_key (line 10) | def test_instance_with_zone_key():
FILE: electricitymap/contrib/parsers/tests/lib/test_web.py
function test_get_response (line 4) | def test_get_response():
function test_get_response_text (line 8) | def test_get_response_text():
function test_get_response_soup (line 12) | def test_get_response_soup():
FILE: electricitymap/contrib/parsers/tests/lib/test_zonekey.py
function test_assert_zone_key (line 7) | def test_assert_zone_key():
FILE: electricitymap/contrib/parsers/tests/test_AEMO.py
function test_snapshot_fetch_consumption_forecast (line 19) | def test_snapshot_fetch_consumption_forecast(adapter, session, snapshot,...
FILE: electricitymap/contrib/parsers/tests/test_AU_TAS_FI.py
function test_parsing_payload (line 9) | def test_parsing_payload():
FILE: electricitymap/contrib/parsers/tests/test_AU_TAS_KI.py
function test_parsing_payload (line 9) | def test_parsing_payload():
FILE: electricitymap/contrib/parsers/tests/test_AU_WA_RI.py
function test_parsing_payload (line 9) | def test_parsing_payload():
FILE: electricitymap/contrib/parsers/tests/test_AW.py
function test_fetch_production (line 10) | def test_fetch_production(adapter, session, snapshot):
FILE: electricitymap/contrib/parsers/tests/test_BE.py
function entsoe_token_env (line 17) | def entsoe_token_env():
function test_fetch_production (line 21) | def test_fetch_production(adapter, session, snapshot):
FILE: electricitymap/contrib/parsers/tests/test_BG.py
function test_fetch_production (line 14) | def test_fetch_production(adapter, session, snapshot):
function test_fetch_production_raises_parser_exception_on_historical_data (line 29) | def test_fetch_production_raises_parser_exception_on_historical_data(ada...
FILE: electricitymap/contrib/parsers/tests/test_CAMMESA.py
function mock_response (line 17) | def mock_response(adapter):
function test_exchanges_AR_CL_SEN (line 47) | def test_exchanges_AR_CL_SEN(session, snapshot):
function test_exchanges_AR_BAS_AR_COM (line 55) | def test_exchanges_AR_BAS_AR_COM(session, snapshot):
function test_fetch_production (line 63) | def test_fetch_production(session, snapshot):
FILE: electricitymap/contrib/parsers/tests/test_CA_AB.py
function test_fetch_wind_solar_forecasts (line 11) | def test_fetch_wind_solar_forecasts(adapter, session, snapshot):
FILE: electricitymap/contrib/parsers/tests/test_CA_CQ.py
function test_production (line 9) | def test_production(adapter, session, snapshot):
function test_consumption (line 23) | def test_consumption(adapter, session, snapshot):
FILE: electricitymap/contrib/parsers/tests/test_CA_ON.py
function test_fetch_wind_solar_forecasts (line 15) | def test_fetch_wind_solar_forecasts(adapter, session, snapshot):
function test_fetch_consumption_forecast (line 45) | def test_fetch_consumption_forecast(adapter, session, snapshot):
FILE: electricitymap/contrib/parsers/tests/test_CEB.py
function mock_response (line 12) | def mock_response(adapter):
function test_production (line 24) | def test_production(session, snapshot):
FILE: electricitymap/contrib/parsers/tests/test_CENACE.py
function mock_response (line 13) | def mock_response(adapter):
function test_fetch_consumption_MX_OC (line 21) | def test_fetch_consumption_MX_OC(session):
function test_fetch_consumption_MX_BC (line 29) | def test_fetch_consumption_MX_BC(session):
function test_fetch_consumption_BCS (line 37) | def test_fetch_consumption_BCS(session):
FILE: electricitymap/contrib/parsers/tests/test_CH.py
function test_get_solar_capacity (line 21) | def test_get_solar_capacity(dt, expected):
FILE: electricitymap/contrib/parsers/tests/test_CL.py
function mock_response (line 13) | def mock_response(adapter):
function test_snapshot_historical_data (line 26) | def test_snapshot_historical_data(session, snapshot):
FILE: electricitymap/contrib/parsers/tests/test_CNDC.py
function target_datetime (line 19) | def target_datetime():
function mock_response (line 24) | def mock_response(adapter, target_datetime):
function test_fetch_generation_forecast (line 44) | def test_fetch_generation_forecast(session, snapshot, target_datetime):
function test_fetch_production (line 52) | def test_fetch_production(session, snapshot, target_datetime):
FILE: electricitymap/contrib/parsers/tests/test_CO.py
function test_fetch_consumption_live (line 19) | def test_fetch_consumption_live(adapter, session, snapshot):
function test_fetch_consumption_dt (line 29) | def test_fetch_consumption_dt(mock_readdb, snapshot):
function test_fetch_production_live (line 39) | def test_fetch_production_live(mock_readdb, snapshot):
function test_fetch_production_dt (line 49) | def test_fetch_production_dt(mock_readdb, snapshot):
function test_fetch_price_live (line 60) | def test_fetch_price_live(mock_readdb, snapshot):
function test_fetch_price_dt (line 69) | def test_fetch_price_dt(mock_readdb, snapshot):
FILE: electricitymap/contrib/parsers/tests/test_CR.py
function test_fetch_production_live (line 14) | def test_fetch_production_live(adapter, session, snapshot):
function test_fetch_production_historical (line 29) | def test_fetch_production_historical(adapter, session, snapshot):
function test_fetch_exchange_live (line 49) | def test_fetch_exchange_live(adapter, session, snapshot):
function test_fetch_exchange_raises_parser_exception_on_historical_data (line 64) | def test_fetch_exchange_raises_parser_exception_on_historical_data(adapt...
FILE: electricitymap/contrib/parsers/tests/test_CY.py
function target_datetime (line 15) | def target_datetime():
function mock_response (line 20) | def mock_response(adapter):
function test_snapshot_historical_source (line 35) | def test_snapshot_historical_source(session, target_datetime, snapshot):
function test_snapshot_realtime_source (line 43) | def test_snapshot_realtime_source(session, snapshot):
FILE: electricitymap/contrib/parsers/tests/test_CZ.py
function mock_good_response (line 19) | def mock_good_response(adapter):
function mock_no_data_response (line 33) | def mock_no_data_response(adapter):
function test_fetch_exchange (line 57) | def test_fetch_exchange(session, snapshot, mock_good_response, zone_key2):
function test_fetch_exchange_forecast_pl (line 68) | def test_fetch_exchange_forecast_pl(session, snapshot, mock_good_response):
function test_fetch_exchange_raises_exception_on_no_data (line 79) | def test_fetch_exchange_raises_exception_on_no_data(session, mock_no_dat...
FILE: electricitymap/contrib/parsers/tests/test_DK.py
function mock_response (line 12) | def mock_response(adapter):
function test_fetch_exchange (line 34) | def test_fetch_exchange(session, snapshot):
function test_fetch_forecast (line 45) | def test_fetch_forecast(session, snapshot):
FILE: electricitymap/contrib/parsers/tests/test_DO.py
function production_df (line 13) | def production_df():
function test_correct_solar_production_all_nan (line 97) | def test_correct_solar_production_all_nan(production_df):
function test_correct_solar_production_nan_then_prod (line 102) | def test_correct_solar_production_nan_then_prod(production_df):
function test_correct_solar_production_prod_then_nan (line 126) | def test_correct_solar_production_prod_then_nan(production_df):
function test_correct_solar_production_prod_then_nan_then_prod (line 139) | def test_correct_solar_production_prod_then_nan_then_prod(production_df):
function test_fetch_production (line 175) | def test_fetch_production(adapter, session, snapshot):
FILE: electricitymap/contrib/parsers/tests/test_EIA.py
function eia_key_env (line 15) | def eia_key_env():
function test_parse_hourly_interval (line 19) | def test_parse_hourly_interval():
function test_fetch_production_mix (line 38) | def test_fetch_production_mix(adapter, session, snapshot):
function test_US_NW_AVRN_rerouting (line 53) | def test_US_NW_AVRN_rerouting(adapter, session, snapshot):
function test_US_CAR_SC_nuclear_split (line 169) | def test_US_CAR_SC_nuclear_split(adapter, session, snapshot):
function test_check_transfer_mixes (line 294) | def test_check_transfer_mixes():
function test_hydro_transfer_mix (line 309) | def test_hydro_transfer_mix(adapter, session, snapshot):
function test_exchange_transfer (line 401) | def test_exchange_transfer(adapter, session):
function test_fetch_production_mix_discards_null (line 449) | def test_fetch_production_mix_discards_null(adapter, session, snapshot):
function test_fetch_exchange (line 469) | def test_fetch_exchange(adapter, session):
function test_fetch_consumption (line 510) | def test_fetch_consumption(adapter, session):
function test_fetch_forecasted_consumption (line 540) | def test_fetch_forecasted_consumption(adapter, session):
function test_fetch_returns_storage (line 571) | def test_fetch_returns_storage(adapter, session, snapshot):
FILE: electricitymap/contrib/parsers/tests/test_ENERCAL.py
function test_production_with_snapshot (line 9) | def test_production_with_snapshot(adapter, session, snapshot):
FILE: electricitymap/contrib/parsers/tests/test_ENTE.py
function mock_response (line 17) | def mock_response(adapter):
function test_fetch_exchange (line 30) | def test_fetch_exchange(session, snapshot):
function test_fetch_exchange_raises_exception_on_exchange_not_implemented (line 38) | def test_fetch_exchange_raises_exception_on_exchange_not_implemented(ses...
function test_fetch_production (line 48) | def test_fetch_production(session, snapshot):
FILE: electricitymap/contrib/parsers/tests/test_ENTSOE.py
function entsoe_token_env (line 27) | def entsoe_token_env():
function test_fetch_consumption (line 31) | def test_fetch_consumption(adapter, session, snapshot):
function test_fetch_consumption_forecast (line 42) | def test_fetch_consumption_forecast(adapter, session, snapshot):
function test_fetch_consumption_aggregated_zone (line 53) | def test_fetch_consumption_aggregated_zone(monkeypatch):
function test_fetch_generation_forecast (line 92) | def test_fetch_generation_forecast(adapter, session, snapshot):
function test_fetch_generation_forecast_aggregated_zone (line 103) | def test_fetch_generation_forecast_aggregated_zone(monkeypatch):
function test_fetch_prices_day_ahead (line 144) | def test_fetch_prices_day_ahead(adapter, session, snapshot):
function test_fetch_prices_intraday (line 155) | def test_fetch_prices_intraday(adapter, session, snapshot):
function test_fetch_prices_integrated_zone (line 166) | def test_fetch_prices_integrated_zone(adapter, session, snapshot):
function test_fetch_with_negative_values (line 176) | def test_fetch_with_negative_values(adapter, session, snapshot):
function test_production_with_snapshot (line 190) | def test_production_with_snapshot(adapter, session, snapshot, zone):
function test_fetch_exchange (line 202) | def test_fetch_exchange(adapter, session, snapshot):
function test_fetch_exchange_with_aggregated_exchanges (line 221) | def test_fetch_exchange_with_aggregated_exchanges(adapter, session, snap...
function test_fetch_exchange_forecast (line 255) | def test_fetch_exchange_forecast(adapter, session, snapshot):
function test_fetch_exchange_forecast_15_min (line 276) | def test_fetch_exchange_forecast_15_min(adapter, session, snapshot):
function test_fetch_exchange_forecast_with_longer_day_ahead_than_total (line 297) | def test_fetch_exchange_forecast_with_longer_day_ahead_than_total(
function test_fetch_exchange_forecast_with_aggregated_exchanges (line 320) | def test_fetch_exchange_forecast_with_aggregated_exchanges(adapter, sess...
function test_wind_and_solar_forecasts (line 354) | def test_wind_and_solar_forecasts(adapter, session, snapshot):
function test_wind_and_solar_forecasts_by_type (line 396) | def test_wind_and_solar_forecasts_by_type(
function test_fetch_uses_normal_url (line 406) | def test_fetch_uses_normal_url(adapter, session):
function test_refetch_frequency (line 419) | def test_refetch_frequency():
function _make_soup (line 428) | def _make_soup(xml: str):
function test_a01_timeseries_parsing_production_and_consumption (line 432) | def test_a01_timeseries_parsing_production_and_consumption():
function test_a03_curve_compression_expands_segments_correctly (line 482) | def test_a03_curve_compression_expands_segments_correctly():
function test_a03_curve_compression_expands_1_datapoint_correctly (line 523) | def test_a03_curve_compression_expands_1_datapoint_correctly():
function test_a03_curve_decompression (line 567) | def test_a03_curve_decompression(fixture, snapshot):
function test_parse_exchange_capacity_forecast_week_ahead_export_direction (line 581) | def test_parse_exchange_capacity_forecast_week_ahead_export_direction():
function test_parse_exchange_capacity_forecast_week_ahead_import_direction (line 602) | def test_parse_exchange_capacity_forecast_week_ahead_import_direction():
function test_parse_exchange_capacity_forecast_day_ahead_export_direction (line 619) | def test_parse_exchange_capacity_forecast_day_ahead_export_direction():
function test_parse_exchange_capacity_forecast_month_ahead_import_direction (line 640) | def test_parse_exchange_capacity_forecast_month_ahead_import_direction():
function test_parse_exchange_capacity_forecast_empty_xml (line 660) | def test_parse_exchange_capacity_forecast_empty_xml():
function test_parse_exchange_capacity_forecast_multiple_timeseries (line 669) | def test_parse_exchange_capacity_forecast_multiple_timeseries():
function _make_capacity_list (line 705) | def _make_capacity_list(
function test_merge_exchange_capacity_forecasts_both_directions (line 724) | def test_merge_exchange_capacity_forecasts_both_directions():
function test_merge_exchange_capacity_forecasts_only_forward (line 746) | def test_merge_exchange_capacity_forecasts_only_forward():
function test_merge_exchange_capacity_forecasts_only_reverse (line 763) | def test_merge_exchange_capacity_forecasts_only_reverse():
function test_merge_exchange_capacity_forecasts_non_overlapping_datetimes (line 780) | def test_merge_exchange_capacity_forecasts_non_overlapping_datetimes():
function test_merge_exchange_capacity_forecasts_prefers_forward_zone_key (line 802) | def test_merge_exchange_capacity_forecasts_prefers_forward_zone_key():
function test_fetch_exchange_capacity_forecasts_day_ahead (line 816) | def test_fetch_exchange_capacity_forecasts_day_ahead(adapter, session, s...
function test_fetch_exchange_capacity_forecasts_week_ahead (line 838) | def test_fetch_exchange_capacity_forecasts_week_ahead(adapter, session, ...
function test_fetch_exchange_capacity_forecasts_month_ahead (line 860) | def test_fetch_exchange_capacity_forecasts_month_ahead(adapter, session,...
FILE: electricitymap/contrib/parsers/tests/test_ERCOT.py
function test_fetch_production (line 13) | def test_fetch_production():
function test_fetch_consumption (line 46) | def test_fetch_consumption():
function test_fetch_production_with_target_datetime_raises_not_implemented (line 62) | def test_fetch_production_with_target_datetime_raises_not_implemented():
FILE: electricitymap/contrib/parsers/tests/test_ERP_PGCB.py
function _load_mock_response (line 18) | def _load_mock_response(adapter, target_datetime):
function test_fetch_consumption (line 33) | def test_fetch_consumption(adapter, session, snapshot, target_datetime):
function test_exchanges (line 41) | def test_exchanges(adapter, session, snapshot, target_datetime):
function test_fetch_production (line 49) | def test_fetch_production(adapter, session, snapshot, target_datetime):
FILE: electricitymap/contrib/parsers/tests/test_ES.py
function mock_response (line 11) | def mock_response(adapter):
function test_es_consumption (line 43) | def test_es_consumption(adapter, session, snapshot):
function test_es_production (line 50) | def test_es_production(adapter, session, snapshot):
function test_es_pt_exchange (line 57) | def test_es_pt_exchange(adapter, session, snapshot):
function test_es_ib_ma_consumption (line 67) | def test_es_ib_ma_consumption(adapter, session, snapshot):
function test_es_ib_ma_production (line 74) | def test_es_ib_ma_production(adapter, session, snapshot):
function test_es_ib_ma_exchange (line 81) | def test_es_ib_ma_exchange(adapter, session, snapshot):
function test_es_cn_te_consumption (line 91) | def test_es_cn_te_consumption(adapter, session, snapshot):
function test_es_cn_te_production (line 98) | def test_es_cn_te_production(adapter, session, snapshot):
FILE: electricitymap/contrib/parsers/tests/test_ESIOS.py
function test_fetch_exchange (line 11) | def test_fetch_exchange(adapter, session):
function test_exchange_with_snapshot (line 31) | def test_exchange_with_snapshot(session, adapter, snapshot):
FILE: electricitymap/contrib/parsers/tests/test_ESKOM.py
function test_production (line 9) | def test_production(adapter, session, snapshot):
FILE: electricitymap/contrib/parsers/tests/test_ESTADISTICO_UT.py
function test_fetch_production_live (line 13) | def test_fetch_production_live(adapter, session, snapshot):
function test_fetch_production_historical (line 35) | def test_fetch_production_historical(adapter, session, snapshot):
FILE: electricitymap/contrib/parsers/tests/test_FO.py
function test_fetch_production_live (line 16) | def test_fetch_production_live(adapter, session, snapshot, zone):
function test_fetch_production_historical (line 41) | def test_fetch_production_historical(adapter, session, snapshot, zone, u...
FILE: electricitymap/contrib/parsers/tests/test_FR.py
function test_production (line 9) | def test_production(adapter, session, snapshot):
FILE: electricitymap/contrib/parsers/tests/test_FR_O.py
function test_fetch_exchange (line 11) | def test_fetch_exchange(adapter, session):
function test_fetch_price (line 61) | def test_fetch_price(adapter, session):
function test_fetch_production (line 98) | def test_fetch_production(adapter, session):
FILE: electricitymap/contrib/parsers/tests/test_GB.py
function test_fetch_price_live (line 27) | def test_fetch_price_live(adapter, session, snapshot, zone_key):
function test_fetch_price_historical (line 41) | def test_fetch_price_historical(adapter, session, snapshot):
function test_fetch_production (line 55) | def test_fetch_production(adapter, session, snapshot):
FILE: electricitymap/contrib/parsers/tests/test_GT.py
function test_fetch_production_live (line 12) | def test_fetch_production_live(adapter, session, snapshot):
function test_fetch_production_historical (line 31) | def test_fetch_production_historical(adapter, session, snapshot):
function test_fetch_consumption_live (line 55) | def test_fetch_consumption_live(adapter, session, snapshot):
function test_fetch_consumption_historical (line 74) | def test_fetch_consumption_historical(adapter, session, snapshot):
FILE: electricitymap/contrib/parsers/tests/test_HN.py
function test_fetch_production (line 13) | def test_fetch_production(adapter, session, snapshot):
function test_fetch_exchange (line 58) | def test_fetch_exchange(adapter, session, snapshot, zone_key1, zone_key2):
FILE: electricitymap/contrib/parsers/tests/test_IEMOP.py
function test_production (line 14) | def test_production(adapter, session, snapshot, zone_key: ZoneKey):
FILE: electricitymap/contrib/parsers/tests/test_IN.py
function test_parse_daily_total_production_grid_india_report (line 21) | def test_parse_daily_total_production_grid_india_report():
function test_parse_total_production_15min_grid_india_report (line 26) | def test_parse_total_production_15min_grid_india_report():
function test_compute_zone_key_share_per_mode_out_of_total (line 31) | def test_compute_zone_key_share_per_mode_out_of_total():
function test_scale_15min_production (line 49) | def test_scale_15min_production(snapshot):
function test_parse_15m_production_grid_india_report (line 56) | def test_parse_15m_production_grid_india_report(snapshot):
function test_parse_daily_production_grid_india_report (line 63) | def test_parse_daily_production_grid_india_report(snapshot):
FILE: electricitymap/contrib/parsers/tests/test_IN_AP.py
function mock_response (line 10) | def mock_response(adapter):
function test_fetch_production (line 20) | def test_fetch_production(session):
function test_fetch_consumption (line 30) | def test_fetch_consumption(session):
FILE: electricitymap/contrib/parsers/tests/test_IN_EA.py
function test_exchanges (line 22) | def test_exchanges(adapter, session, neighbour_zone_key: ZoneKey):
FILE: electricitymap/contrib/parsers/tests/test_IN_HP.py
function mock_response (line 11) | def mock_response(adapter):
function test_fetch_production (line 21) | def test_fetch_production(session):
FILE: electricitymap/contrib/parsers/tests/test_IN_KA.py
function test_fetch_consumption (line 8) | def test_fetch_consumption(adapter, session):
function test_fetch_production (line 26) | def test_fetch_production(adapter, session):
FILE: electricitymap/contrib/parsers/tests/test_JAO.py
function _register_shadow_auction_atc (line 43) | def _register_shadow_auction_atc(adapter) -> None:
function test_fetch_shadow_auction_atc_day_ahead_de_fr (line 48) | def test_fetch_shadow_auction_atc_day_ahead_de_fr(adapter, session, snap...
function test_fetch_shadow_auction_atc_day_ahead_pair_not_in_core (line 61) | def test_fetch_shadow_auction_atc_day_ahead_pair_not_in_core(adapter, se...
function test_fetch_shadow_auction_atc_day_ahead_em_to_jao_zone_remap (line 75) | def test_fetch_shadow_auction_atc_day_ahead_em_to_jao_zone_remap(adapter...
function test_fetch_shadow_auction_atc_day_ahead_one_sided (line 105) | def test_fetch_shadow_auction_atc_day_ahead_one_sided(adapter, session):
function test_fetch_core_external_atc_day_ahead_de_dk_dk1 (line 134) | def test_fetch_core_external_atc_day_ahead_de_dk_dk1(adapter, session, s...
function test_fetch_core_external_atc_day_ahead_border_not_in_dataset (line 150) | def test_fetch_core_external_atc_day_ahead_border_not_in_dataset(adapter...
function test_fetch_core_max_bex_day_ahead_de_fr (line 166) | def test_fetch_core_max_bex_day_ahead_de_fr(adapter, session, snapshot):
function test_fetch_nordic_max_bex_day_ahead_no1_se3 (line 181) | def test_fetch_nordic_max_bex_day_ahead_no1_se3(adapter, session, snapsh...
function test_fetch_core_scheduled_exchanges_day_ahead_de_fr (line 197) | def test_fetch_core_scheduled_exchanges_day_ahead_de_fr(adapter, session...
function test_fetch_nordic_max_bflow_day_ahead_no1_se3 (line 212) | def test_fetch_nordic_max_bflow_day_ahead_no1_se3(adapter, session, snap...
FILE: electricitymap/contrib/parsers/tests/test_JP.py
function test_snapshot_fetch_generation_forecast (line 33) | def test_snapshot_fetch_generation_forecast(adapter, session, snapshot, ...
function test_snapshot_fetch_consumption_forecast (line 158) | def test_snapshot_fetch_consumption_forecast(adapter, session, snapshot,...
FILE: electricitymap/contrib/parsers/tests/test_JP_KY.py
function mock_csv_response_at_night (line 14) | def mock_csv_response_at_night():
function mock_csv_response_at_day (line 25) | def mock_csv_response_at_day():
function mock_nuclear_responses (line 36) | def mock_nuclear_responses():
function mock_exchange_data_night (line 50) | def mock_exchange_data_night():
function mock_exchange_data_day (line 89) | def mock_exchange_data_day():
function test_fetch_production_success_without_solar (line 127) | def test_fetch_production_success_without_solar(
function test_fetch_production_success_with_solar (line 159) | def test_fetch_production_success_with_solar(
function test_fetch_production_with_past_date (line 191) | def test_fetch_production_with_past_date():
function test_fetch_production_with_distant_exchange_data (line 197) | def test_fetch_production_with_distant_exchange_data(
function test_snapshot_fetch_production (line 228) | def test_snapshot_fetch_production(
FILE: electricitymap/contrib/parsers/tests/test_JP_SK.py
function test_find_nuclear_image_url (line 14) | def test_find_nuclear_image_url(adapter, session):
function test_fetch_nuclear_image (line 29) | def test_fetch_nuclear_image(adapter, session):
FILE: electricitymap/contrib/parsers/tests/test_KPX.py
function mock_response_as_realtime (line 16) | def mock_response_as_realtime(adapter):
function mock_response_as_historical (line 24) | def mock_response_as_historical(adapter):
function test_fetch_consumption_realtime (line 32) | def test_fetch_consumption_realtime(session, snapshot, mock_response_as_...
function test_fetch_production_realtime (line 36) | def test_fetch_production_realtime(session, snapshot, mock_response_as_r...
function test_production_historical (line 40) | def test_production_historical(session, snapshot, mock_response_as_histo...
FILE: electricitymap/contrib/parsers/tests/test_MD.py
function test_fetch_consumption_live (line 27) | def test_fetch_consumption_live(adapter, session, snapshot):
function test_fetch_consumption_historical (line 41) | def test_fetch_consumption_historical(adapter, session, snapshot):
function test_fetch_exchange_live (line 59) | def test_fetch_exchange_live(adapter, session, snapshot, neighbor):
function test_fetch_exchange_historical (line 76) | def test_fetch_exchange_historical(adapter, session, snapshot, neighbor):
function test_fetch_exchange_forecast_live (line 97) | def test_fetch_exchange_forecast_live(adapter, session, snapshot, neighb...
function test_fetch_exchange_forecast_historical (line 114) | def test_fetch_exchange_forecast_historical(adapter, session, snapshot, ...
function test_fetch_price_live (line 136) | def test_fetch_price_live(snapshot):
function test_fetch_price_historical (line 156) | def test_fetch_price_historical(snapshot, historical_datetime):
function test_fetch_production_live (line 163) | def test_fetch_production_live(adapter, session, snapshot):
function test_fetch_production_historical (line 177) | def test_fetch_production_historical(adapter, session, snapshot):
FILE: electricitymap/contrib/parsers/tests/test_NORDPOOL.py
function emaps_env (line 16) | def emaps_env():
function test_price_parser_se (line 21) | def test_price_parser_se(adapter, session, snapshot):
function test_exchange_parser_fi_se1 (line 49) | def test_exchange_parser_fi_se1(adapter, session, snapshot):
FILE: electricitymap/contrib/parsers/tests/test_NTESMO.py
function fixture_session_mock (line 21) | def fixture_session_mock(adapter, session) -> tuple[requests.Session, Ad...
function test_fetch_production (line 61) | def test_fetch_production(fixture_session_mock):
function test_fetch_price (line 88) | def test_fetch_price(fixture_session_mock):
function test_fetch_consumption (line 119) | def test_fetch_consumption(fixture_session_mock):
function test_snapshot_fetch_consumption_forecast (line 151) | def test_snapshot_fetch_consumption_forecast(adapter, session, snapshot):
FILE: electricitymap/contrib/parsers/tests/test_NZ.py
function test_snapshot_production_data (line 14) | def test_snapshot_production_data(adapter, session, snapshot):
function test_snapshot_price_data (line 43) | def test_snapshot_price_data(adapter, session, snapshot):
FILE: electricitymap/contrib/parsers/tests/test_ONS.py
function mock_response (line 17) | def mock_response():
function test_snapshot_fetch_production (line 28) | def test_snapshot_fetch_production(zone_key, data_file, adapter, session...
function test_snapshot_fetch_exchange (line 62) | def test_snapshot_fetch_exchange(
FILE: electricitymap/contrib/parsers/tests/test_OPENNEM.py
function openelectricity_token_env (line 20) | def openelectricity_token_env():
function test_production (line 27) | def test_production(adapter, session, snapshot, zone):
function test_price (line 40) | def test_price(adapter, session, snapshot, zone):
function test_au_nsw_au_qld_exchange (line 52) | def test_au_nsw_au_qld_exchange(adapter, session, snapshot):
function test_au_nsw_au_vic_exchange (line 66) | def test_au_nsw_au_vic_exchange(adapter, session, snapshot):
FILE: electricitymap/contrib/parsers/tests/test_PA.py
function mock_response (line 11) | def mock_response(adapter):
function test_fetch_production (line 23) | def test_fetch_production(session, snapshot):
FILE: electricitymap/contrib/parsers/tests/test_PE.py
function test_fetch_production_with_target_datetime (line 14) | def test_fetch_production_with_target_datetime(adapter, session, snapshot):
function test_fetch_production_data_structure (line 62) | def test_fetch_production_data_structure(adapter, session):
FILE: electricitymap/contrib/parsers/tests/test_PF.py
function mock_response (line 13) | def mock_response(adapter):
function test_fetch_production_live (line 24) | def test_fetch_production_live(session, snapshot):
function test_fetch_production_raises_parser_exception_on_historical_data (line 29) | def test_fetch_production_raises_parser_exception_on_historical_data(ada...
FILE: electricitymap/contrib/parsers/tests/test_RU.py
function test_snapshot_fetch_production (line 20) | def test_snapshot_fetch_production(adapter, session, snapshot, zone_key):
function test_snapshot_fetch_exchange (line 75) | def test_snapshot_fetch_exchange(
function test_snapshot_fetch_exchange_live (line 102) | def test_snapshot_fetch_exchange_live(adapter, session, snapshot):
function test_snapshot_fetch_production_live (line 123) | def test_snapshot_fetch_production_live(adapter, session, snapshot):
FILE: electricitymap/contrib/parsers/tests/test_SG.py
function mock_response (line 13) | def mock_response(adapter):
function test_works_when_nonzero (line 24) | def test_works_when_nonzero(adapter, session):
function test_works_when_zero (line 36) | def test_works_when_zero(session):
function test_ignore_data_older_than_one_hour (line 41) | def test_ignore_data_older_than_one_hour(session):
function test_allow_remote_clock_to_be_slightly_ahead (line 47) | def test_allow_remote_clock_to_be_slightly_ahead(session):
FILE: electricitymap/contrib/parsers/tests/test_SMARTGRIDDASHBOARD.py
function test_fetch_consumption (line 18) | def test_fetch_consumption(adapter, session, snapshot):
function test_fetch_consumption_forecast (line 36) | def test_fetch_consumption_forecast(adapter, session, snapshot):
function test_fetch_exchange (line 54) | def test_fetch_exchange(adapter, session, snapshot):
function test_fetch_generation (line 73) | def test_fetch_generation(adapter, session, snapshot):
function test_fetch_wind_solar_forecasts (line 92) | def test_fetch_wind_solar_forecasts(adapter, session, snapshot):
function test_fetch_production (line 122) | def test_fetch_production(adapter, session, snapshot):
FILE: electricitymap/contrib/parsers/tests/test_TAIPOWER.py
function test_production (line 7) | def test_production(adapter, session, snapshot):
FILE: electricitymap/contrib/parsers/tests/test_TR.py
function tr_credentials_env (line 17) | def tr_credentials_env():
function test_fetch_production (line 29) | def test_fetch_production(adapter, session, snapshot, target_datetime):
FILE: electricitymap/contrib/parsers/tests/test_US_CA.py
function test_snapshot_fetch_wind_solar_forecasts (line 15) | def test_snapshot_fetch_wind_solar_forecasts(snapshot):
function test_snapshot_fetch_consumption_forecast (line 39) | def test_snapshot_fetch_consumption_forecast(snapshot):
FILE: electricitymap/contrib/parsers/tests/test_US_ERCOT.py
function test_snapshot_fetch_consumption_forecast (line 19) | def test_snapshot_fetch_consumption_forecast(adapter, session, snapshot):
function test_snapshot_fetch_wind_solar_forecasts (line 50) | def test_snapshot_fetch_wind_solar_forecasts(adapter, session, snapshot):
FILE: electricitymap/contrib/parsers/tests/test_US_MISO.py
function test_fetch_production (line 23) | def test_fetch_production():
function test_snapshot_fetch_wind_solar_forecasts (line 47) | def test_snapshot_fetch_wind_solar_forecasts(adapter, session, snapshot):
function test_snapshot_fetch_consumption_forecast (line 71) | def test_snapshot_fetch_consumption_forecast(adapter, session, snapshot):
FILE: electricitymap/contrib/parsers/tests/test_US_NEISO.py
function test_fetch_consumption_forecast (line 18) | def test_fetch_consumption_forecast(adapter, session, snapshot):
function test_fetch_wind_solar_forecasts (line 34) | def test_fetch_wind_solar_forecasts(adapter, session, snapshot):
function test_fetch_exchange (line 79) | def test_fetch_exchange(adapter, session, snapshot, zone_key1, zone_key2):
FILE: electricitymap/contrib/parsers/tests/test_US_NY.py
function test_snapshot_fetch_consumption_forecast (line 14) | def test_snapshot_fetch_consumption_forecast(adapter, session, snapshot):
function test_snapshot_fetch_production_more_than_9_days_in_past (line 32) | def test_snapshot_fetch_production_more_than_9_days_in_past(adapter, ses...
FILE: electricitymap/contrib/parsers/tests/test_US_PJM.py
function test_production (line 17) | def test_production(adapter, session, snapshot):
function test_fetch_consumption_forecast (line 40) | def test_fetch_consumption_forecast(adapter, session, snapshot):
function test_fetch_wind_solar_forecasts (line 66) | def test_fetch_wind_solar_forecasts(adapter, session, snapshot):
FILE: electricitymap/contrib/parsers/tests/test_US_SPP.py
function test_fetch_production (line 15) | def test_fetch_production():
function test_SPP_logging (line 37) | def test_SPP_logging():
function test_fetch_realtime_locational_marginal_price (line 57) | def test_fetch_realtime_locational_marginal_price(adapter, session, snap...
function test_fetch_dayahead_locational_marginal_price (line 87) | def test_fetch_dayahead_locational_marginal_price(adapter, session, snap...
FILE: electricitymap/contrib/parsers/tests/test_UY.py
function register_mock_uris (line 17) | def register_mock_uris(adapter):
function test_fetch_production (line 32) | def test_fetch_production(session, snapshot):
function test_fetch_consumption (line 39) | def test_fetch_consumption(session, snapshot):
function test_fetch_exchange (line 47) | def test_fetch_exchange(session, snapshot, zone_key):
FILE: electricitymap/contrib/parsers/tests/test_amper_landsnet.py
function test_fetch_production (line 10) | def test_fetch_production(adapter, session, snapshot):
FILE: electricitymap/contrib/parsers/tests/test_config.py
function emission_factor_result (line 10) | def emission_factor_result(zone_key):
function test_snapshot_emission_factor (line 24) | def test_snapshot_emission_factor(snapshot, zone_key, emission_factor_re...
FILE: electricitymap/contrib/parsers/tests/test_quality.py
function test_validate_consumption_positive (line 19) | def test_validate_consumption_positive():
function test_validate_consumption_negative (line 23) | def test_validate_consumption_negative():
function test_validate_consumption_none (line 28) | def test_validate_consumption_none():
function test_validate_exchange_key_mismatch (line 32) | def test_validate_exchange_key_mismatch():
function test_validate_exchange_no_datetime (line 37) | def test_validate_exchange_no_datetime():
function test_validate_exchange_bad_datetime (line 42) | def test_validate_exchange_bad_datetime():
function test_validate_exchange_future_not_allowed (line 47) | def test_validate_exchange_future_not_allowed():
FILE: electricitymap/contrib/parsers/tests/test_utils.py
function test_TOKEN_WIKI_URL (line 9) | def test_TOKEN_WIKI_URL():
function test_get_token (line 13) | def test_get_token():
FILE: geo/generate-zone-geo.ts
constant GEO_PATH (line 10) | const GEO_PATH = join(import.meta.dir, 'world.geojson');
constant ZONES_DIR (line 11) | const ZONES_DIR = join(import.meta.dir, '..', 'config', 'zones');
constant BUFFER_KM (line 12) | const BUFFER_KM = -40;
function getSubZoneNames (line 29) | function getSubZoneNames(content: string): string[] {
type ZoneGeo (line 35) | interface ZoneGeo {
function computeZoneGeo (line 41) | function computeZoneGeo(features: Feature<Polygon | MultiPolygon>[]): Zo...
FILE: libs/types/src/electricitymap/contrib/types/__init__.py
class ParserDataType (line 28) | class ParserDataType(Enum):
method __str__ (line 55) | def __str__(self) -> str:
FILE: scripts/ENTSOE_capacity_update.py
function update_zone (line 38) | def update_zone(zone_key: ZoneKey, data: dict) -> None:
function aggregate_data (line 56) | def aggregate_data(data: dict) -> dict:
function parse_args (line 69) | def parse_args():
function parse_from_entsoe_api (line 81) | def parse_from_entsoe_api(zone_key: ZoneKey, token: str) -> dict:
function parse_from_csv (line 127) | def parse_from_csv(filepath: str) -> dict:
function main (line 139) | def main():
FILE: scripts/create_aggregated_zone_config.py
function create_aggregated_config (line 22) | def create_aggregated_config(zoneKey: str, timezone: str):
function main (line 76) | def main():
FILE: scripts/remove_zone.py
function remove_config (line 27) | def remove_config(zone_key: ZoneKey):
function remove_from_parent_config (line 35) | def remove_from_parent_config(zone_key: ZoneKey):
function remove_exchanges (line 49) | def remove_exchanges(zone_key: ZoneKey):
function move_parser_to_archived (line 67) | def move_parser_to_archived(zone_key: ZoneKey):
function find_files_mentioning_zone (line 76) | def find_files_mentioning_zone(text):
function main (line 119) | def main():
FILE: scripts/tooling.py
function _run (line 13) | def _run(cmd: str):
function format (line 22) | def format(): # noqa: A001
function lint (line 27) | def lint():
function test (line 31) | def test():
function check (line 35) | def check():
FILE: scripts/update_capacity_configuration.py
function update_zone (line 35) | def update_zone(
function update_source (line 55) | def update_source(source: str, target_datetime: datetime, session: Sessi...
function sort_config_keys (line 72) | def sort_config_keys(config: dict[str, Any]) -> dict[str, Any]:
function update_zone_capacity_config (line 77) | def update_zone_capacity_config(zone_key: ZoneKey, data: dict) -> None:
function generate_zone_capacity_config (line 101) | def generate_zone_capacity_config(
function update_capacity_list_if_value_already_exists (line 131) | def update_capacity_list_if_value_already_exists(
function update_capacity_list_if_datetime_already_exists (line 158) | def update_capacity_list_if_datetime_already_exists(
function generate_zone_capacity_list (line 210) | def generate_zone_capacity_list(
function check_capacity_config_type (line 280) | def check_capacity_config_type(capacity_config: list, config_type: type)...
function generate_aggregated_capacity_config (line 285) | def generate_aggregated_capacity_config(
function generate_aggregated_capacity_config_dict (line 317) | def generate_aggregated_capacity_config_dict(
function compute_aggregated_value (line 341) | def compute_aggregated_value(capacity_config: list[dict[str, Any]]) -> f...
function generate_aggregated_capacity_config_list (line 355) | def generate_aggregated_capacity_config_list(
function update_aggregated_capacity_config (line 381) | def update_aggregated_capacity_config(parent_zone: ZoneKey) -> None:
FILE: scripts/update_capacity_ember_all_years.py
function update_zone_with_all_years (line 38) | def update_zone_with_all_years(zone_key: ZoneKey, capacity_data: dict) -...
function main (line 97) | def main():
FILE: scripts/utils.py
function run_shell_command (line 17) | def run_shell_command(cmd: str, cwd: PathLike | str = "") -> str:
class JsonFilePatcher (line 23) | class JsonFilePatcher:
method __init__ (line 34) | def __init__(self, file_path: PathLike | str, indent: int | None = 2):
method __enter__ (line 38) | def __enter__(self):
method __exit__ (line 44) | def __exit__(self, exc_type, exc_value, tb):
class YamlFilePatcher (line 61) | class YamlFilePatcher:
method __init__ (line 72) | def __init__(self, file_path: PathLike | str):
method __enter__ (line 75) | def __enter__(self):
method __exit__ (line 81) | def __exit__(self, exc_type, exc_value, tb):
function write_zone_config (line 90) | def write_zone_config(zone_key: ZoneKey, zone_config: dict[str, Any]) ->...
FILE: scripts/validate_config_filenames.py
function main (line 14) | def main():
FILE: scripts/zone_names.py
function add_country_names (line 7) | def add_country_names():
function check_additional_attributes (line 38) | def check_additional_attributes():
FILE: test_parser.py
function test_parser (line 30) | def test_parser(zone: ZoneKey, data_type: str, target_datetime: str | No...
FILE: tests/config/test_config.py
class ConfigTestcase (line 19) | class ConfigTestcase(unittest.TestCase):
method test_zones_config (line 20) | def test_zones_config(self):
method test_zone_parent (line 27) | def test_zone_parent(self):
method test_zone_bounding_box (line 32) | def test_zone_bounding_box(self):
method test_zone_neighbours (line 38) | def test_zone_neighbours(self):
method test_emission_factors (line 46) | def test_emission_factors(self):
function test_data_centers_config (line 56) | def test_data_centers_config(snapshot):
FILE: tests/config/test_config_model.py
class ConfigModelTestcase (line 15) | class ConfigModelTestcase(unittest.TestCase):
method test_pydantic_model (line 16) | def test_pydantic_model(self):
method test_zone_sources (line 35) | def test_zone_sources(self):
method test_parser_model_contains_all_parser_data_types (line 63) | def test_parser_model_contains_all_parser_data_types(self):
method test_exchange_parsers_model_contains_all_parser_data_types (line 72) | def test_exchange_parsers_model_contains_all_parser_data_types(self):
FILE: tests/config/test_config_zones.py
class TestConfigZones (line 16) | class TestConfigZones(unittest.TestCase):
method test_bounding_boxes_basic (line 17) | def test_bounding_boxes_basic(self):
method test_zone_parents_basic (line 31) | def test_zone_parents_basic(self):
method test_generate_all_neighbours_basic (line 42) | def test_generate_all_neighbours_basic(self):
method test_generate_zone_neighbours_two_countries (line 53) | def test_generate_zone_neighbours_two_countries(self):
method test_generate_zone_neighbours_one_country_one_subzone (line 66) | def test_generate_zone_neighbours_one_country_one_subzone(self):
method test_generate_zone_neighbours_two_subzones (line 80) | def test_generate_zone_neighbours_two_subzones(self):
method test_generate_zone_neighbours_two_subzones_from_same (line 117) | def test_generate_zone_neighbours_two_subzones_from_same(self):
method test_generate_zone_neighbours_GB (line 136) | def test_generate_zone_neighbours_GB(self):
method test_generate_zone_neighbours_no_exchange_parser (line 153) | def test_generate_zone_neighbours_no_exchange_parser(self):
FILE: tests/config/test_data_center_model.py
function make_data_center (line 18) | def make_data_center(
function _mock_zones_config (line 43) | def _mock_zones_config():
class TestDataCenterID (line 58) | class TestDataCenterID:
method test_id_format (line 59) | def test_id_format(self):
class TestStringNotEmpty (line 64) | class TestStringNotEmpty:
method test_empty_or_whitespace_rejected (line 76) | def test_empty_or_whitespace_rejected(self, kwargs: dict[str, str]):
method test_valid_strings_accepted (line 80) | def test_valid_strings_accepted(self):
class TestLonlatValid (line 84) | class TestLonlatValid:
method test_valid_lonlat (line 85) | def test_valid_lonlat(self):
method test_boundary_values (line 88) | def test_boundary_values(self):
method test_longitude_too_low (line 92) | def test_longitude_too_low(self):
method test_longitude_too_high (line 96) | def test_longitude_too_high(self):
method test_latitude_too_low (line 100) | def test_latitude_too_low(self):
method test_latitude_too_high (line 104) | def test_latitude_too_high(self):
class TestDateValid (line 109) | class TestDateValid:
method test_none_accepted (line 111) | def test_none_accepted(self, field: str):
method test_valid_formats_parsed_to_date (line 124) | def test_valid_formats_parsed_to_date(self, field: str, value: str, ex...
method test_date_object_accepted (line 129) | def test_date_object_accepted(self, field: str):
method test_invalid_format_rejected (line 138) | def test_invalid_format_rejected(self, field: str, value: str):
method test_invalid_calendar_date_rejected (line 146) | def test_invalid_calendar_date_rejected(self, field: str, value: str):
class TestZoneKeyExists (line 151) | class TestZoneKeyExists:
method test_valid_zone_key (line 152) | def test_valid_zone_key(self):
method test_invalid_zone_key (line 155) | def test_invalid_zone_key(self):
class TestDataCentersIdsAreUnique (line 162) | class TestDataCentersIdsAreUnique:
method test_unique_ids_accepted (line 163) | def test_unique_ids_accepted(self):
method test_duplicate_ids_rejected (line 171) | def test_duplicate_ids_rejected(self):
class TestDataCentersUniqueProviderRegionZoneKey (line 183) | class TestDataCentersUniqueProviderRegionZoneKey:
method test_unique_combinations_accepted (line 184) | def test_unique_combinations_accepted(self):
method test_duplicate_combination_rejected (line 196) | def test_duplicate_combination_rejected(self):
class TestDataCentersExtraFieldsForbidden (line 208) | class TestDataCentersExtraFieldsForbidden:
method test_extra_fields_rejected (line 209) | def test_extra_fields_rejected(self):
FILE: tests/config/test_emission_factors.py
function test_all_emission_factor_error (line 12) | def test_all_emission_factor_error(snapshot):
function test_all_emission_factors (line 29) | def test_all_emission_factors(snapshot):
function test_get_zone_specific_co2eq_parameter_identical_return (line 35) | def test_get_zone_specific_co2eq_parameter_identical_return():
FILE: tests/test_capacity.py
function test_get_capacity_data (line 12) | def test_get_capacity_data():
function test_get_capacity_from_list (line 50) | def test_get_capacity_from_list():
function test_get_capacity_with_source (line 64) | def test_get_capacity_with_source():
FILE: tests/test_co2eq_parameters.py
function get_possible_modes (line 17) | def get_possible_modes() -> set[str]:
function parse_json_file (line 22) | def parse_json_file(path: str):
class CO2eqParametersAll (line 28) | class CO2eqParametersAll(unittest.TestCase):
method check_valid_ratios_list (line 35) | def check_valid_ratios_list(ratios):
method check_power_origin_ratios (line 39) | def check_power_origin_ratios(cls, callback1, callback2):
method check_contributions (line 60) | def check_contributions(cls, contribution_name, callback):
method check_is_renewable (line 71) | def check_is_renewable(cls, callback):
method check_is_low_carbon (line 76) | def check_is_low_carbon(cls, callback):
method test_power_origin_modes_are_valid (line 80) | def test_power_origin_modes_are_valid(self):
method test_power_origin_ratio_annual_lists_have_valid_dates (line 92) | def test_power_origin_ratio_annual_lists_have_valid_dates(self):
method test_power_origin_ratios_sum_to_1 (line 102) | def test_power_origin_ratios_sum_to_1(self):
method test_required_keys_are_present (line 118) | def test_required_keys_are_present(self):
method check_contribution_object (line 146) | def check_contribution_object(self, contribution, zone, mode, contribu...
method check_contribution_datetimes (line 157) | def check_contribution_datetimes(self, contribution, zone, mode, contr...
method test_is_renewable_valid_datetimes (line 180) | def test_is_renewable_valid_datetimes(self):
method test_is_renewable_valid_contributions (line 189) | def test_is_renewable_valid_contributions(self):
method test_is_low_carbon_valid_datetimes (line 203) | def test_is_low_carbon_valid_datetimes(self):
method test_is_low_carbon_valid_contributions (line 212) | def test_is_low_carbon_valid_contributions(self):
class BaseClasses (line 227) | class BaseClasses:
class CO2eqParametersDirectAndLifecycleBase (line 230) | class CO2eqParametersDirectAndLifecycleBase(unittest.TestCase):
method check_emission_factors (line 241) | def check_emission_factors(cls, callback):
method check_emission_factor_values (line 258) | def check_emission_factor_values(cls, callback):
method test_emission_factor_value_ranges (line 275) | def test_emission_factor_value_ranges(self):
method test_emission_factor_modes_are_valid (line 309) | def test_emission_factor_modes_are_valid(self):
method test_emission_factor_annual_lists_have_valid_dates (line 319) | def test_emission_factor_annual_lists_have_valid_dates(self):
method test_emission_factor_annual_lists_are_not_empty (line 331) | def test_emission_factor_annual_lists_are_not_empty(self):
method test_required_keys_are_present (line 344) | def test_required_keys_are_present(self):
class CO2eqParametersDirect (line 366) | class CO2eqParametersDirect(BaseClasses.CO2eqParametersDirectAndLifecycl...
class CO2eqParametersLifecycle (line 397) | class CO2eqParametersLifecycle(BaseClasses.CO2eqParametersDirectAndLifec...
FILE: tests/test_exchanges_json.py
class ExchangeJsonTestcase (line 6) | class ExchangeJsonTestcase(unittest.TestCase):
method test_all_zones_in_zones_json (line 7) | def test_all_zones_in_zones_json(self):
FILE: tests/test_parser_interface.py
class ZoneParserFunction (line 85) | class ZoneParserFunction(NamedTuple):
function undecorated (line 92) | def undecorated(o):
class ParserInterfaceTestcase (line 114) | class ParserInterfaceTestcase(unittest.TestCase):
method setUp (line 115) | def setUp(self):
method test_interface (line 140) | def test_interface(self):
method test_unused_files (line 181) | def test_unused_files(self):
FILE: tests/test_update_capacity_configuration.py
class updateCapacityConfigurationTestCase (line 11) | class updateCapacityConfigurationTestCase(unittest.TestCase):
method test_capacity_config (line 12) | def test_capacity_config(self):
method test_generate_zone_capacity_list (line 134) | def test_generate_zone_capacity_list(self):
method test_generate_aggregated_capacity_config_dict (line 315) | def test_generate_aggregated_capacity_config_dict(self):
method test_generate_aggregated_capacity_config_list (line 340) | def test_generate_aggregated_capacity_config_list(self):
FILE: tests/test_zones_json.py
class ZonesJsonTestcase (line 9) | class ZonesJsonTestcase(unittest.TestCase):
method test_bounding_boxes (line 10) | def test_bounding_boxes(self):
method test_sub_zones (line 17) | def test_sub_zones(self):
method test_zones_from_geometries_exist (line 24) | def test_zones_from_geometries_exist(self):
Copy disabled (too large)
Download .json
Condensed preview — 1613 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (47,332K chars).
[
{
"path": ".devcontainer/devcontainer.json",
"chars": 519,
"preview": "{\n \"name\": \"Electricity Maps Dev\",\n \"image\": \"mcr.microsoft.com/devcontainers/python:1-3.10-bookworm\",\n \"features\": {"
},
{
"path": ".dockerignore",
"chars": 77,
"preview": ".git\n*.tar.gz\n*.json\n*secrets*\n*.env\n*.mp4\n*.mkv\n\n\ndatascience\n\nscreenshots*\n"
},
{
"path": ".editorconfig",
"chars": 139,
"preview": "root = true\n\n[*]\nindent_style = space\nend_of_line = lf\ninsert_final_newline = true\ncharset = utf-8\nindent_size = 2\n\n[*.p"
},
{
"path": ".gitattributes",
"chars": 325,
"preview": "# Auto-detect text vs. binary files and ensure newlines are always LF for\n# text files on check-out and check-in.\n* text"
},
{
"path": ".github/CODEOWNERS",
"chars": 188,
"preview": "# Codeowners file\n\nelectricitymap/** @electricitymaps/grid-modelling-methodology\nconfig/** @electricitymaps/grid-modelli"
},
{
"path": ".github/ISSUE_TEMPLATE/blank-issue.md",
"chars": 99,
"preview": "---\nname: Blank issue\nabout: Anything else\ntitle: ''\nlabels: ''\nassignees: ''\n\n---\n\n## Description\n"
},
{
"path": ".github/ISSUE_TEMPLATE/config.yml",
"chars": 26,
"preview": "blank_issues_enabled: true"
},
{
"path": ".github/ISSUE_TEMPLATE/data-issue.yml",
"chars": 1208,
"preview": "name: Data Issue\ndescription: Use this form if you believe there is a issue with the data on the app.\ntitle: \"[Data Issu"
},
{
"path": ".github/ISSUE_TEMPLATE/feature_request.md",
"chars": 595,
"preview": "---\nname: Feature request\nabout: Suggest an idea for this project\ntitle: ''\nlabels: ''\nassignees: ''\n\n---\n\n**Is your fea"
},
{
"path": ".github/ISSUE_TEMPLATE/frontend-bug-report.md",
"chars": 818,
"preview": "---\nname: Frontend bug report\nabout: Create a report to help us improve\ntitle: ''\nlabels: \"bug \\U0001F41E, frontend \\U00"
},
{
"path": ".github/codeql-config.yml",
"chars": 59,
"preview": "name: 'CodeQL config'\npaths-ignore:\n - 'config/**/*.yaml'\n"
},
{
"path": ".github/dependabot.yml",
"chars": 738,
"preview": "# Dependabot config file\n\nversion: 2\nupdates:\n # Maintain the workflow dependencies.\n - package-ecosystem: 'github-act"
},
{
"path": ".github/filter-groups.yml",
"chars": 198,
"preview": "workflows:\n - '.github/workflows/**/*.yml'\n\nconfig:\n - 'config/**/*.yaml'\n\nmarkdown:\n - '**.md'\n\njson:\n - '**.json'\n"
},
{
"path": ".github/labeler.yml",
"chars": 1018,
"preview": "infrastructure:\n - changed-files:\n - any-glob-to-any-file:\n ['.github/**/*', 'docker-compose.yml', 'parse"
},
{
"path": ".github/pull_request_template.md",
"chars": 528,
"preview": "## Issue\n\n<!-- If you want to close an issue automatically when your PR is merged, write \"Closes X\" where X is the issue"
},
{
"path": ".github/workflows/CI.yml",
"chars": 2539,
"preview": "name: CI\non:\n push:\n branches:\n - master\n pull_request:\n schedule:\n - cron: '0 7 * * 1'\n\njobs:\n # "
},
{
"path": ".github/workflows/README.md",
"chars": 291,
"preview": "# CI\n\nAll CI workflows should be executed in the `CI.yml` workflow using reusable workflows and the workflow_call trigge"
},
{
"path": ".github/workflows/codeql.yml",
"chars": 1509,
"preview": "name: 'CodeQL'\n\non:\n workflow_call:\n\njobs:\n analyze:\n name: Analyze\n runs-on: ubuntu-24.04\n permissions:\n "
},
{
"path": ".github/workflows/create-release.yml",
"chars": 2643,
"preview": "name: Create release\non:\n workflow_dispatch:\n inputs:\n package:\n description: 'Package to release'\n "
},
{
"path": ".github/workflows/earthly-contrib.yml",
"chars": 1186,
"preview": "# Runs Earthly targets\n\nname: Earthly Contrib\n\non:\n workflow_call:\n\njobs:\n run-tests:\n runs-on: ubuntu-24.04-arm\n "
},
{
"path": ".github/workflows/label.yml",
"chars": 533,
"preview": "# This workflow will triage pull requests and apply a label based on the\n# paths that are modified in the pull request.\n"
},
{
"path": ".github/workflows/validate_local_links_in_md.yml",
"chars": 1174,
"preview": "# Controls when the action will run. Triggers the workflow when called from another workflow.\non:\n workflow_call:\n\n# A "
},
{
"path": ".gitignore",
"chars": 300,
"preview": "gha-creds-*.json\n*.pyc\n*.env\n**/node_modules\n.ipynb_checkpoints/\n*.pyproj\n*.sln\n*.suo\n*.user\n/.vs/config\n/App_Data/Publi"
},
{
"path": ".pre-commit-config.yaml",
"chars": 224,
"preview": "repos:\n - repo: https://github.com/astral-sh/ruff-pre-commit\n # Ruff version.\n rev: v0.11.2\n hooks:\n # Ru"
},
{
"path": ".prettierignore",
"chars": 258,
"preview": "# Files and paths to ignore\n\n.prettierignore\npnpm-lock.yaml\n.earthlyignore\n\n.venv\n**/parsers/tests/mocks\n.pytest_cache/\n"
},
{
"path": ".prettierrc.js",
"chars": 297,
"preview": "module.exports = {\n semi: true,\n singleQuote: true,\n trailingComma: 'es5',\n printWidth: 90,\n overrides: [\n {\n "
},
{
"path": ".python-version",
"chars": 5,
"preview": "3.10\n"
},
{
"path": ".vscode/extensions.json",
"chars": 231,
"preview": "{\n \"recommendations\": [\n \"charliermarsh.ruff\",\n \"ms-python.python\",\n \"ms-python.vscode-pylance\",\n \"esbenp.p"
},
{
"path": ".vscode/settings.json",
"chars": 415,
"preview": "{\n \"editor.defaultFormatter\": \"esbenp.prettier-vscode\",\n \"[python]\": {\n \"editor.defaultFormatter\": \"charliermarsh.r"
},
{
"path": "CODE_OF_CONDUCT.md",
"chars": 5498,
"preview": "# Contributor Covenant Code of Conduct\n\n## Our Pledge\n\nWe as members, contributors, and leaders pledge to make participa"
},
{
"path": "CONTRIBUTING.md",
"chars": 7535,
"preview": "# Welcome! 🎉\n\nWelcome to the Electricity Maps open source contribution repository. </br>\nAny and all contributions howev"
},
{
"path": "DATA_SOURCES.md",
"chars": 54287,
"preview": "## Data sources\n\n### Real-time electricity data sources\n\nReal-time electricity data is obtained using [parsers](https://"
},
{
"path": "EMISSION_FACTORS_SOURCES.md",
"chars": 1078,
"preview": "# Emission factors sources\n\nThe emission factors used by Electricity Maps depends on the specific region.\n\nOur default e"
},
{
"path": "Earthfile",
"chars": 1596,
"preview": "VERSION 0.8\nFROM astral/uv:python3.10-bookworm-slim\nWORKDIR /contrib\n\nlinting-files:\n COPY .prettierignore .\n SAVE ART"
},
{
"path": "LICENSE.md",
"chars": 34523,
"preview": " GNU AFFERO GENERAL PUBLIC LICENSE\n Version 3, 19 November 2007\n\n Copyright (C)"
},
{
"path": "LICENSE_MIT.txt",
"chars": 1101,
"preview": "MIT License\r\n\r\nCopyright (c) Jan 2020 - Jan 2023 Tomorrow\r\n\r\nPermission is hereby granted, free of charge, to any person"
},
{
"path": "README.md",
"chars": 6416,
"preview": "<p align=\"center\">\n <a href=\"https://app.electricitymaps.com\">\n <picture>\n <source\n srcset=\"https://raw."
},
{
"path": "__init__.py",
"chars": 0,
"preview": ""
},
{
"path": "capacity_update.py",
"chars": 1888,
"preview": "\"\"\"\nUsage: uv run update_capacity --zone FR --target_datetime \"2022-01-01\"\n\"\"\"\n\nimport logging\nfrom datetime import date"
},
{
"path": "config/Earthfile",
"chars": 249,
"preview": "VERSION 0.8\nFROM alpine:latest\nWORKDIR /contrib/config\n\n\nsrc-files:\n COPY . .\n SAVE ARTIFACT .\n\ndata-centers-files:\n "
},
{
"path": "config/__init__.py",
"chars": 0,
"preview": ""
},
{
"path": "config/data_centers/data_centers.json",
"chars": 44795,
"preview": "{\n \"gcp-us-central1\": {\n \"provider\": \"gcp\",\n \"lonlat\": [-95.8028031, 41.1755951],\n \"displayName\": \"Southlands "
},
{
"path": "config/defaults.yaml",
"chars": 12560,
"preview": "fallbackZoneMixes:\n powerOriginRatios:\n _comment: https://www.bp.com/en/global/corporate/energy-economics/statistica"
},
{
"path": "config/exchanges/AD_ES.yaml",
"chars": 109,
"preview": "capacity:\n - -125\n - 125\nlonlat:\n - 1.45\n - 42.3\nparsers:\n exchange: ESIOS.fetch_exchange\nrotation: 200\n"
},
{
"path": "config/exchanges/AD_FR.yaml",
"chars": 48,
"preview": "lonlat:\n - 1.7963181\n - 42.58837\nrotation: 38\n"
},
{
"path": "config/exchanges/AL_GR.yaml",
"chars": 438,
"preview": "capacity:\n - -533\n - 533\nlonlat:\n - 20.689872\n - 40.198219\nparsers:\n exchange: ENTSOE.fetch_exchange\n exchangeCapa"
},
{
"path": "config/exchanges/AL_ME.yaml",
"chars": 411,
"preview": "lonlat:\n - 19.500384\n - 42.428871\nparsers:\n exchange: ENTSOE.fetch_exchange\n exchangeCapacityForecastDayAhead: ENTSO"
},
{
"path": "config/exchanges/AL_RS.yaml",
"chars": 410,
"preview": "lonlat:\n - 20.486292\n - 42.323472\nparsers:\n exchange: ENTSOE.fetch_exchange\n exchangeCapacityForecastDayAhead: ENTSO"
},
{
"path": "config/exchanges/AL_XK.yaml",
"chars": 404,
"preview": "lonlat:\n - 20.212\n - 42.408\nparsers:\n exchange: ENTSOE.fetch_exchange\n exchangeCapacityForecastDayAhead: ENTSOE.fetc"
},
{
"path": "config/exchanges/AM_GE.yaml",
"chars": 403,
"preview": "lonlat:\n - 44.313\n - 41.205\nparsers:\n exchange: ENTSOE.fetch_exchange\n exchangeCapacityForecastDayAhead: ENTSOE.fetc"
},
{
"path": "config/exchanges/AM_IR.yaml",
"chars": 52,
"preview": "lonlat:\n - 46.3\n - 38.9\nparsers: {}\nrotation: 180\n"
},
{
"path": "config/exchanges/AR_BR-S.yaml",
"chars": 92,
"preview": "lonlat:\n - -56.407453\n - -28.880006\nparsers:\n exchange: ONS.fetch_exchange\nrotation: 110\n"
},
{
"path": "config/exchanges/AR_BR.yaml",
"chars": 52,
"preview": "lonlat:\n - -56.407453\n - -28.880006\nrotation: 110\n"
},
{
"path": "config/exchanges/AR_CL-SEN.yaml",
"chars": 96,
"preview": "lonlat:\n - -69.860314\n - -33.641822\nparsers:\n exchange: CAMMESA.fetch_exchange\nrotation: 270\n"
},
{
"path": "config/exchanges/AR_PY.yaml",
"chars": 89,
"preview": "lonlat:\n - -59.408\n - -24.346\nparsers:\n exchange: CAMMESA.fetch_exchange\nrotation: 45\n"
},
{
"path": "config/exchanges/AR_UY.yaml",
"chars": 84,
"preview": "lonlat:\n - -58.150\n - -32.199\nparsers:\n exchange: UY.fetch_exchange\nrotation: 90\n"
},
{
"path": "config/exchanges/AT_CH.yaml",
"chars": 410,
"preview": "lonlat:\n - 9.597882\n - 47.079455\nparsers:\n exchange: ENTSOE.fetch_exchange\n exchangeCapacityForecastDayAhead: ENTSOE"
},
{
"path": "config/exchanges/AT_CZ.yaml",
"chars": 331,
"preview": "lonlat:\n - 15.486554\n - 48.909846\nparsers:\n exchange: CZ.fetch_exchange\n shadowAuctionAtcDayAhead: JAO.fetch_shadow_"
},
{
"path": "config/exchanges/AT_DE.yaml",
"chars": 604,
"preview": "lonlat:\n - 12.679547\n - 47.696804\nparsers:\n exchange: ENTSOE.fetch_exchange\n exchangeCapacityForecastDayAhead: ENTSO"
},
{
"path": "config/exchanges/AT_HU.yaml",
"chars": 604,
"preview": "lonlat:\n - 16.605363\n - 47.444264\nparsers:\n exchange: ENTSOE.fetch_exchange\n exchangeCapacityForecastDayAhead: ENTSO"
},
{
"path": "config/exchanges/AT_IT-NO.yaml",
"chars": 504,
"preview": "capacity:\n - -145\n - 325\nlonlat:\n - 12.344464\n - 46.741723\nparsers:\n exchange: ENTSOE.fetch_exchange\n exchangeCapa"
},
{
"path": "config/exchanges/AT_IT.yaml",
"chars": 78,
"preview": "capacity:\n - -145\n - 325\nlonlat:\n - 12.344464\n - 46.741723\nrotation: -140\n"
},
{
"path": "config/exchanges/AT_SI.yaml",
"chars": 604,
"preview": "lonlat:\n - 15.014142\n - 46.613582\nparsers:\n exchange: ENTSOE.fetch_exchange\n exchangeCapacityForecastDayAhead: ENTSO"
},
{
"path": "config/exchanges/AU-NSW_AU-QLD.yaml",
"chars": 122,
"preview": "capacity:\n - -1510\n - 957\nlonlat:\n - 146.503228\n - -29.054874\nparsers:\n exchange: OPENNEM.fetch_exchange\nrotation: "
},
{
"path": "config/exchanges/AU-NSW_AU-VIC.yaml",
"chars": 125,
"preview": "capacity:\n - -1700\n - 1450\nlonlat:\n - 145.308829\n - -35.850801\nparsers:\n exchange: OPENNEM.fetch_exchange\nrotation:"
},
{
"path": "config/exchanges/AU-SA_AU-VIC.yaml",
"chars": 122,
"preview": "capacity:\n - -820\n - 750\nlonlat:\n - 140.965561\n - -35.784766\nparsers:\n exchange: OPENNEM.fetch_exchange\nrotation: 9"
},
{
"path": "config/exchanges/AU-TAS_AU-VIC.yaml",
"chars": 121,
"preview": "capacity:\n - -478\n - 594\nlonlat:\n - 146.096047\n - -39.836207\nparsers:\n exchange: OPENNEM.fetch_exchange\nrotation: 0"
},
{
"path": "config/exchanges/AX_FI.yaml",
"chars": 109,
"preview": "capacity:\n - -110\n - 110\nlonlat:\n - 21.193\n - 60.386\nparsers:\n exchange: AX.fetch_exchange\nrotation: 50\n"
},
{
"path": "config/exchanges/AX_SE-SE3.yaml",
"chars": 109,
"preview": "capacity:\n - -80\n - 80\nlonlat:\n - 19.239\n - 60.063\nparsers:\n exchange: AX.fetch_exchange\nrotation: -130\n"
},
{
"path": "config/exchanges/AX_SE.yaml",
"chars": 70,
"preview": "capacity:\n - -80\n - 80\nlonlat:\n - 19.239\n - 60.063\nrotation: -130\n"
},
{
"path": "config/exchanges/AZ_GE.yaml",
"chars": 405,
"preview": "lonlat:\n - 45.153\n - 41.398\nparsers:\n exchange: ENTSOE.fetch_exchange\n exchangeCapacityForecastDayAhead: ENTSOE.fetc"
},
{
"path": "config/exchanges/AZ_RU-1.yaml",
"chars": 89,
"preview": "lonlat:\n - 48.114921\n - 41.468606\nparsers:\n exchange: RU.fetch_exchange\nrotation: -35\n"
},
{
"path": "config/exchanges/BA_HR.yaml",
"chars": 432,
"preview": "capacity:\n - -5429\n - 5429\nlonlat:\n - 16.941\n - 45.205\nparsers:\n exchange: ENTSOE.fetch_exchange\n exchangeCapacity"
},
{
"path": "config/exchanges/BA_ME.yaml",
"chars": 411,
"preview": "lonlat:\n - 18.665423\n - 43.042137\nparsers:\n exchange: ENTSOE.fetch_exchange\n exchangeCapacityForecastDayAhead: ENTSO"
},
{
"path": "config/exchanges/BA_RS.yaml",
"chars": 410,
"preview": "lonlat:\n - 19.127873\n - 44.377951\nparsers:\n exchange: ENTSOE.fetch_exchange\n exchangeCapacityForecastDayAhead: ENTSO"
},
{
"path": "config/exchanges/BD_IN-EA.yaml",
"chars": 95,
"preview": "lonlat:\n - 88.717802\n - 24.104800\nparsers:\n exchange: ERP_PGCB.fetch_exchange\nrotation: -90\n"
},
{
"path": "config/exchanges/BD_IN-NE.yaml",
"chars": 94,
"preview": "lonlat:\n - 91.245998\n - 23.485682\nparsers:\n exchange: ERP_PGCB.fetch_exchange\nrotation: 90\n"
},
{
"path": "config/exchanges/BD_IN.yaml",
"chars": 50,
"preview": "lonlat:\n - 88.717802\n - 24.104800\nrotation: -90\n"
},
{
"path": "config/exchanges/BD_NP.yaml",
"chars": 120,
"preview": "capacity:\n - -40\n - 40\nlonlat:\n - 88.259123\n - 26.595468\nparsers:\n exchange: ERP_PGCB.fetch_exchange\nrotation: -60\n"
},
{
"path": "config/exchanges/BE_DE.yaml",
"chars": 621,
"preview": "capacity:\n - -1000\n - 1000\nlonlat:\n - 6.4\n - 50.4\nparsers:\n exchange: ENTSOE.fetch_exchange\n exchangeCapacityForec"
},
{
"path": "config/exchanges/BE_FR.yaml",
"chars": 604,
"preview": "lonlat:\n - 4.137165\n - 50.255806\nparsers:\n exchange: ENTSOE.fetch_exchange\n exchangeCapacityForecastDayAhead: ENTSOE"
},
{
"path": "config/exchanges/BE_GB.yaml",
"chars": 439,
"preview": "capacity:\n - -1000\n - 1000\nlonlat:\n - 2.052937\n - 51.659015\nparsers:\n exchange: ENTSOE.fetch_exchange\n exchangeCap"
},
{
"path": "config/exchanges/BE_LU.yaml",
"chars": 410,
"preview": "lonlat:\n - 5.808054\n - 49.990503\nparsers:\n exchange: ENTSOE.fetch_exchange\n exchangeCapacityForecastDayAhead: ENTSOE"
},
{
"path": "config/exchanges/BE_NL.yaml",
"chars": 601,
"preview": "lonlat:\n - 5.026873\n - 51.425174\nparsers:\n exchange: ENTSOE.fetch_exchange\n exchangeCapacityForecastDayAhead: ENTSOE"
},
{
"path": "config/exchanges/BG_GR.yaml",
"chars": 433,
"preview": "capacity:\n - -700\n - 700\nlonlat:\n - 24.1\n - 41.558088\nparsers:\n exchange: ENTSOE.fetch_exchange\n exchangeCapacityF"
},
{
"path": "config/exchanges/BG_MK.yaml",
"chars": 437,
"preview": "capacity:\n - -950\n - 950\nlonlat:\n - 22.912615\n - 41.86784\nparsers:\n exchange: ENTSOE.fetch_exchange\n exchangeCapac"
},
{
"path": "config/exchanges/BG_RO.yaml",
"chars": 474,
"preview": "lonlat:\n - 25.609385\n - 43.674878\nparsers:\n exchange: ENTSOE.fetch_exchange\n exchangeCapacityForecastDayAhead: ENTSO"
},
{
"path": "config/exchanges/BG_RS.yaml",
"chars": 440,
"preview": "capacity:\n - -1073\n - 1073\nlonlat:\n - 22.978533\n - 43.131375\nparsers:\n exchange: ENTSOE.fetch_exchange\n exchangeCa"
},
{
"path": "config/exchanges/BG_TR.yaml",
"chars": 439,
"preview": "capacity:\n - -2485\n - 2485\nlonlat:\n - 26.89864\n - 42.002181\nparsers:\n exchange: ENTSOE.fetch_exchange\n exchangeCap"
},
{
"path": "config/exchanges/BR-CS_BR-N.yaml",
"chars": 89,
"preview": "lonlat:\n - -54.908876\n - -9.870031\nparsers:\n exchange: ONS.fetch_exchange\nrotation: 0\n"
},
{
"path": "config/exchanges/BR-CS_BR-NE.yaml",
"chars": 91,
"preview": "lonlat:\n - -42.362632\n - -15.051086\nparsers:\n exchange: ONS.fetch_exchange\nrotation: 30\n"
},
{
"path": "config/exchanges/BR-CS_BR-S.yaml",
"chars": 93,
"preview": "lonlat:\n - -49.857513\n - -23.066549\nparsers:\n exchange: ONS.fetch_exchange\nrotation: -150\n"
},
{
"path": "config/exchanges/BR-N_BR-NE.yaml",
"chars": 91,
"preview": "lonlat:\n - -45.610678\n - -8.187852\nparsers:\n exchange: ONS.fetch_exchange\nrotation: 110\n"
},
{
"path": "config/exchanges/BR-S_PY.yaml",
"chars": 91,
"preview": "lonlat:\n - -54.44926\n - -24.749974\nparsers:\n exchange: ONS.fetch_exchange\nrotation: 110\n"
},
{
"path": "config/exchanges/BR-S_UY.yaml",
"chars": 92,
"preview": "lonlat:\n - -54.982242\n - -31.301863\nparsers:\n exchange: UY.fetch_exchange\nrotation: -150\n"
},
{
"path": "config/exchanges/BR_PY.yaml",
"chars": 51,
"preview": "lonlat:\n - -54.44926\n - -24.749974\nrotation: 110\n"
},
{
"path": "config/exchanges/BR_UY.yaml",
"chars": 53,
"preview": "lonlat:\n - -54.982242\n - -31.301863\nrotation: -150\n"
},
{
"path": "config/exchanges/BT_IN-EA.yaml",
"chars": 91,
"preview": "lonlat:\n - 89.387672\n - 26.847837\nparsers:\n exchange: IN_EA.fetch_exchange\nrotation: 88\n"
},
{
"path": "config/exchanges/BT_IN.yaml",
"chars": 49,
"preview": "lonlat:\n - 89.387672\n - 26.847837\nrotation: 88\n"
},
{
"path": "config/exchanges/BY_LT.yaml",
"chars": 440,
"preview": "capacity:\n - -4553\n - 4553\nlonlat:\n - 25.756061\n - 54.789457\nparsers:\n exchange: ENTSOE.fetch_exchange\n exchangeCa"
},
{
"path": "config/exchanges/BY_RU-1.yaml",
"chars": 88,
"preview": "lonlat:\n - 31.141039\n - 54.483721\nparsers:\n exchange: RU.fetch_exchange\nrotation: 90\n"
},
{
"path": "config/exchanges/BY_UA.yaml",
"chars": 438,
"preview": "capacity:\n - -900\n - 900\nlonlat:\n - 29.393062\n - 51.468916\nparsers:\n exchange: ENTSOE.fetch_exchange\n exchangeCapa"
},
{
"path": "config/exchanges/BZ_MX.yaml",
"chars": 85,
"preview": "lonlat:\n - -88.627\n - 18.24\nparsers:\n exchange: CENACE.fetch_exchange\nrotation: 0\n"
},
{
"path": "config/exchanges/CA-AB_CA-BC.yaml",
"chars": 122,
"preview": "capacity:\n - -1000\n - 800\nlonlat:\n - -119.811359\n - 53.797027\nparsers:\n exchange: CA_AB.fetch_exchange\nrotation: -9"
},
{
"path": "config/exchanges/CA-AB_CA-SK.yaml",
"chars": 120,
"preview": "capacity:\n - -153\n - 153\nlonlat:\n - -109.986644\n - 54.883208\nparsers:\n exchange: CA_AB.fetch_exchange\nrotation: 90\n"
},
{
"path": "config/exchanges/CA-AB_US-NW-NWMT.yaml",
"chars": 121,
"preview": "capacity:\n - -315\n - 310\nlonlat:\n - -111.920238\n - 49.016577\nparsers:\n exchange: CA_AB.fetch_exchange\nrotation: 180"
},
{
"path": "config/exchanges/CA-BC_US-NW-BPAT.yaml",
"chars": 94,
"preview": "lonlat:\n - -120.300532\n - 49.044392\nparsers:\n exchange: CA_BC.fetch_exchange\nrotation: 180\n"
},
{
"path": "config/exchanges/CA-MB_CA-ON.yaml",
"chars": 92,
"preview": "lonlat:\n - -95.177354\n - 52.802819\nparsers:\n exchange: CA_ON.fetch_exchange\nrotation: 90\n"
},
{
"path": "config/exchanges/CA-MB_US-MIDW-MISO.yaml",
"chars": 84,
"preview": "lonlat:\n - -97.5788\n - 49.0\nparsers:\n exchange: EIA.fetch_exchange\nrotation: 180\n"
},
{
"path": "config/exchanges/CA-NB_CA-NS.yaml",
"chars": 89,
"preview": "lonlat:\n - -65.7552\n - 45.0425\nparsers:\n exchange: CA_NB.fetch_exchange\nrotation: 140\n"
},
{
"path": "config/exchanges/CA-NB_CA-PE.yaml",
"chars": 101,
"preview": "lonlat:\n - -64.5739\n - 46.7349\nparsers:\n exchange: PrinceEdwardIsland.fetch_exchange\nrotation: 90\n"
},
{
"path": "config/exchanges/CA-NB_CA-QC.yaml",
"chars": 89,
"preview": "lonlat:\n - -67.2344\n - 47.8871\nparsers:\n exchange: CA_NB.fetch_exchange\nrotation: -45\n"
},
{
"path": "config/exchanges/CA-NB_US-NE-ISNE.yaml",
"chars": 91,
"preview": "lonlat:\n - -67.7771\n - 46.139\nparsers:\n exchange: US_NEISO.fetch_exchange\nrotation: -90\n"
},
{
"path": "config/exchanges/CA-NL_CA-NS.yaml",
"chars": 89,
"preview": "lonlat:\n - -59.6117\n - 47.1693\nparsers:\n exchange: CA_NS.fetch_exchange\nrotation: 207\n"
},
{
"path": "config/exchanges/CA-ON_CA-QC.yaml",
"chars": 92,
"preview": "lonlat:\n - -79.494485\n - 48.798268\nparsers:\n exchange: CA_ON.fetch_exchange\nrotation: 90\n"
},
{
"path": "config/exchanges/CA-ON_US-MIDW-MISO.yaml",
"chars": 88,
"preview": "lonlat:\n - -84.188\n - 46.476\nparsers:\n exchange: CA_ON.fetch_exchange\nrotation: -145\n"
},
{
"path": "config/exchanges/CA-ON_US-NY-NYIS.yaml",
"chars": 89,
"preview": "lonlat:\n - -78.9147\n - 43.5523\nparsers:\n exchange: CA_ON.fetch_exchange\nrotation: 135\n"
},
{
"path": "config/exchanges/CA-QC_US-NE-ISNE.yaml",
"chars": 90,
"preview": "lonlat:\n - -71.737\n - 45.011\nparsers:\n exchange: US_NEISO.fetch_exchange\nrotation: 180\n"
},
{
"path": "config/exchanges/CA-QC_US-NY-NYIS.yaml",
"chars": 87,
"preview": "lonlat:\n - -73.768\n - 45.004\nparsers:\n exchange: US_NY.fetch_exchange\nrotation: 180\n"
},
{
"path": "config/exchanges/CA-SK_US-CENT-SWPP.yaml",
"chars": 88,
"preview": "lonlat:\n - -105.6714\n - 48.9838\nparsers:\n exchange: EIA.fetch_exchange\nrotation: 180\n"
},
{
"path": "config/exchanges/CA_US.yaml",
"chars": 44,
"preview": "lonlat:\n - -97.5788\n - 49.0\nrotation: 180\n"
},
{
"path": "config/exchanges/CH_DE.yaml",
"chars": 408,
"preview": "lonlat:\n - 8.806354\n - 47.667048\nparsers:\n exchange: ENTSOE.fetch_exchange\n exchangeCapacityForecastDayAhead: ENTSOE"
},
{
"path": "config/exchanges/CH_FR.yaml",
"chars": 400,
"preview": "lonlat:\n - 6.5\n - 46.7\nparsers:\n exchange: ENTSOE.fetch_exchange\n exchangeCapacityForecastDayAhead: ENTSOE.fetch_exc"
},
{
"path": "config/exchanges/CH_IT-NO.yaml",
"chars": 439,
"preview": "capacity:\n - -1910\n - 4572\nlonlat:\n - 9.047334\n - 46.113596\nparsers:\n exchange: ENTSOE.fetch_exchange\n exchangeCap"
},
{
"path": "config/exchanges/CH_IT.yaml",
"chars": 78,
"preview": "capacity:\n - -1910\n - 4572\nlonlat:\n - 9.047334\n - 46.113596\nrotation: 180\n"
},
{
"path": "config/exchanges/CN_RU-AS.yaml",
"chars": 88,
"preview": "lonlat:\n - 123.275128\n - 53.541248\nparsers:\n exchange: RU.fetch_exchange\nrotation: 0\n"
},
{
"path": "config/exchanges/CR_NI.yaml",
"chars": 86,
"preview": "lonlat:\n - -84.7303\n - 11.0638\nparsers:\n exchange: NI.fetch_exchange\nrotation: -45\n"
},
{
"path": "config/exchanges/CR_PA.yaml",
"chars": 87,
"preview": "lonlat:\n - -82.7119\n - 8.9183\nparsers:\n exchange: ENTE.fetch_exchange\nrotation: 130\n"
},
{
"path": "config/exchanges/CZ_DE.yaml",
"chars": 333,
"preview": "lonlat:\n - 12.321836\n - 50.227335\nparsers:\n exchange: CZ.fetch_exchange\n shadowAuctionAtcDayAhead: JAO.fetch_shadow_"
},
{
"path": "config/exchanges/CZ_PL.yaml",
"chars": 332,
"preview": "lonlat:\n - 16.496641\n - 50.269487\nparsers:\n exchange: CZ.fetch_exchange\n shadowAuctionAtcDayAhead: JAO.fetch_shadow_"
},
{
"path": "config/exchanges/CZ_SK.yaml",
"chars": 333,
"preview": "lonlat:\n - 18.100645\n - 49.089498\nparsers:\n exchange: CZ.fetch_exchange\n shadowAuctionAtcDayAhead: JAO.fetch_shadow_"
},
{
"path": "config/exchanges/DE_DK-DK1.yaml",
"chars": 406,
"preview": "capacity:\n - -2500\n - 2500\nlonlat:\n - 9.3\n - 54.9\nparsers:\n exchange: DK.fetch_exchange\n coreExternalAtcDayAhead: "
},
{
"path": "config/exchanges/DE_DK-DK2.yaml",
"chars": 351,
"preview": "capacity:\n - -985\n - 1000\nlonlat:\n - 12.135031\n - 54.486043\nparsers:\n exchange: DK.fetch_exchange\n maxBexDayAhead:"
},
{
"path": "config/exchanges/DE_DK.yaml",
"chars": 37,
"preview": "lonlat:\n - 9.3\n - 54.9\nrotation: 0\n"
},
{
"path": "config/exchanges/DE_FR.yaml",
"chars": 338,
"preview": "lonlat:\n - 8.048297\n - 48.931337\nparsers:\n exchange: ECO2MIX.fetch_exchange\n shadowAuctionAtcDayAhead: JAO.fetch_sha"
},
{
"path": "config/exchanges/DE_LU.yaml",
"chars": 410,
"preview": "lonlat:\n - 6.396699\n - 49.847692\nparsers:\n exchange: ENTSOE.fetch_exchange\n exchangeCapacityForecastDayAhead: ENTSOE"
},
{
"path": "config/exchanges/DE_NL.yaml",
"chars": 603,
"preview": "lonlat:\n - 6.916521\n - 52.159037\nparsers:\n exchange: ENTSOE.fetch_exchange\n exchangeCapacityForecastDayAhead: ENTSOE"
},
{
"path": "config/exchanges/DE_NO-NO2.yaml",
"chars": 539,
"preview": "capacity:\n - -1444\n - 1444\nlonlat:\n - 7.2\n - 55.9\nparsers:\n exchange: ENTSOE.fetch_exchange\n exchangeCapacityForec"
},
{
"path": "config/exchanges/DE_NO.yaml",
"chars": 68,
"preview": "capacity:\n - -1444\n - 1444\nlonlat:\n - 7.2\n - 55.9\nrotation: -10\n"
},
{
"path": "config/exchanges/DE_PL.yaml",
"chars": 603,
"preview": "lonlat:\n - 14.585163\n - 52.410625\nparsers:\n exchange: ENTSOE.fetch_exchange\n exchangeCapacityForecastDayAhead: ENTSO"
},
{
"path": "config/exchanges/DE_SE-SE4.yaml",
"chars": 546,
"preview": "capacity:\n - -615\n - 615\nlonlat:\n - 13.552264\n - 54.925814\nparsers:\n exchange: ENTSOE.fetch_exchange\n exchangeCapa"
},
{
"path": "config/exchanges/DE_SE.yaml",
"chars": 75,
"preview": "capacity:\n - -615\n - 615\nlonlat:\n - 13.552264\n - 54.925814\nrotation: 0\n"
},
{
"path": "config/exchanges/DK-DK1_DK-DK2.yaml",
"chars": 543,
"preview": "capacity:\n - -600\n - 590\nlonlat:\n - 10.948508\n - 55.407235\nparsers:\n exchange: DK.fetch_exchange\n exchangeCapacity"
},
{
"path": "config/exchanges/DK-DK1_GB.yaml",
"chars": 428,
"preview": "capacity:\n - -1400\n - 1400\nlonlat:\n - 3.4\n - 55\nparsers:\n exchange: ENTSOE.fetch_exchange\n exchangeCapacityForecas"
},
{
"path": "config/exchanges/DK-DK1_NL.yaml",
"chars": 480,
"preview": "_comment: 700MW from COBRAcable https://en.wikipedia.org/wiki/COBRAcable\ncapacity:\n - -700\n - 700\nlonlat:\n - 7.4\n - "
},
{
"path": "config/exchanges/DK-DK1_NO-NO2.yaml",
"chars": 268,
"preview": "capacity:\n - -1632\n - 1632\nlonlat:\n - 8.8\n - 57.7\nparsers:\n exchange: DK.fetch_exchange\n maxBexDayAhead: JAO.fetch"
},
{
"path": "config/exchanges/DK-DK1_SE-SE3.yaml",
"chars": 547,
"preview": "capacity:\n - -715\n - 715\nlonlat:\n - 11.556268\n - 56.857802\nparsers:\n exchange: ENTSOE.fetch_exchange\n exchangeCapa"
},
{
"path": "config/exchanges/DK-DK2_SE-SE4.yaml",
"chars": 549,
"preview": "capacity:\n - -1300\n - 1700\nlonlat:\n - 12.704418\n - 55.952282\nparsers:\n exchange: ENTSOE.fetch_exchange\n exchangeCa"
},
{
"path": "config/exchanges/DK_GB.yaml",
"chars": 67,
"preview": "capacity:\n - -1400\n - 1400\nlonlat:\n - 3.4\n - 55\nrotation: -105\n"
},
{
"path": "config/exchanges/DK_NL.yaml",
"chars": 67,
"preview": "capacity:\n - -700\n - 700\nlonlat:\n - 7.4\n - 54.5\nrotation: -150\n"
},
{
"path": "config/exchanges/DK_NO.yaml",
"chars": 68,
"preview": "capacity:\n - -1632\n - 1632\nlonlat:\n - 8.8\n - 57.7\nrotation: -25\n"
},
{
"path": "config/exchanges/DK_SE.yaml",
"chars": 49,
"preview": "lonlat:\n - 11.556268\n - 56.857802\nrotation: 70\n"
},
{
"path": "config/exchanges/EE_FI.yaml",
"chars": 550,
"preview": "capacity:\n - -1016\n - 1016\nlonlat:\n - 25.690143\n - 59.923241\nparsers:\n exchange: ENTSOE.fetch_exchange\n exchangeCa"
},
{
"path": "config/exchanges/EE_LV.yaml",
"chars": 440,
"preview": "capacity:\n - -1259\n - 1447\nlonlat:\n - 26.041706\n - 57.810982\nparsers:\n exchange: ENTSOE.fetch_exchange\n exchangeCa"
},
{
"path": "config/exchanges/EE_RU-1.yaml",
"chars": 439,
"preview": "capacity:\n - -2462\n - 2462\nlonlat:\n - 27.468803\n - 58.545189\nparsers:\n exchange: ENTSOE.fetch_exchange\n exchangeCa"
},
{
"path": "config/exchanges/ES-CN-FV_ES-CN-LZ.yaml",
"chars": 80,
"preview": "lonlat:\n - -13.86\n - 28.8\nparsers:\n exchange: ES.fetch_exchange\nrotation: 25\n"
},
{
"path": "config/exchanges/ES-IB-FO_ES-IB-IZ.yaml",
"chars": 109,
"preview": "capacity:\n - -134\n - 134\nlonlat:\n - 0.989\n - 38.746\nparsers:\n exchange: ES.fetch_exchange\nrotation: -10\n"
},
{
"path": "config/exchanges/ES-IB-IZ_ES-IB-MA.yaml",
"chars": 108,
"preview": "capacity:\n - -200\n - 200\nlonlat:\n - 2.032\n - 39.245\nparsers:\n exchange: ES.fetch_exchange\nrotation: 50\n"
},
{
"path": "config/exchanges/ES-IB-MA_ES-IB-ME.yaml",
"chars": 108,
"preview": "capacity:\n - -100\n - 100\nlonlat:\n - 3.549\n - 39.901\nparsers:\n exchange: ES.fetch_exchange\nrotation: 70\n"
},
{
"path": "config/exchanges/ES_ES-IB-MA.yaml",
"chars": 108,
"preview": "capacity:\n - -400\n - 400\nlonlat:\n - 2.23\n - 40.271\nparsers:\n exchange: ES.fetch_exchange\nrotation: 135\n"
},
{
"path": "config/exchanges/ES_FR.yaml",
"chars": 568,
"preview": "capacity:\n - -2800\n - 2800\nlonlat:\n - 0.3\n - 42.9\nparsers:\n exchange: ENTSOE.fetch_exchange\n exchangeCapacityForec"
},
{
"path": "config/exchanges/ES_MA.yaml",
"chars": 121,
"preview": "capacity:\n - -1359\n - 1359\nlonlat:\n - -5.614929\n - 35.952597\nparsers:\n exchange: ESIOS.fetch_exchange\nrotation: 180"
},
{
"path": "config/exchanges/ES_PT.yaml",
"chars": 426,
"preview": "capacity:\n - -4545\n - 5085\nlonlat:\n - -7\n - 40\nparsers:\n exchange: ENTSOE.fetch_exchange\n exchangeCapacityForecast"
},
{
"path": "config/exchanges/FI_NO-NO4.yaml",
"chars": 547,
"preview": "capacity:\n - -120\n - 100\nlonlat:\n - 25.35158\n - 68.862684\nparsers:\n exchange: ENTSOE.fetch_exchange\n exchangeCapac"
},
{
"path": "config/exchanges/FI_NO.yaml",
"chars": 49,
"preview": "lonlat:\n - 25.35158\n - 68.862684\nrotation: -30\n"
},
{
"path": "config/exchanges/FI_RU-1.yaml",
"chars": 433,
"preview": "capacity:\n - -1460\n - 320\nlonlat:\n - 28.378\n - 60.878\nparsers:\n exchange: ENTSOE.fetch_exchange\n exchangeCapacityF"
},
{
"path": "config/exchanges/FI_SE-SE1.yaml",
"chars": 544,
"preview": "capacity:\n - -1900\n - 1900\nlonlat:\n - 23.857\n - 66.921\nparsers:\n exchange: ENTSOE.fetch_exchange\n exchangeCapacity"
},
{
"path": "config/exchanges/FI_SE-SE3.yaml",
"chars": 545,
"preview": "capacity:\n - -1200\n - 1200\nlonlat:\n - 19.797\n - 60.628\nparsers:\n exchange: ENTSOE.fetch_exchange\n exchangeCapacity"
},
{
"path": "config/exchanges/FI_SE.yaml",
"chars": 73,
"preview": "capacity:\n - -2700\n - 2300\nlonlat:\n - 23.857\n - 66.921\nrotation: -90\n"
},
{
"path": "config/exchanges/FR-COR_IT-CNO.yaml",
"chars": 437,
"preview": "capacity:\n - -300\n - 300\nlonlat:\n - 10.091148\n - 42.686804\nparsers:\n exchange: ENTSOE.fetch_exchange\n exchangeCapa"
},
{
"path": "config/exchanges/FR-COR_IT-SAR.yaml",
"chars": 437,
"preview": "capacity:\n - -400\n - 325\nlonlat:\n - 9.123283\n - 41.293785\nparsers:\n exchange: ENTSOE.fetch_exchange\n exchangeCapac"
},
{
"path": "config/exchanges/FR-COR_IT.yaml",
"chars": 49,
"preview": "lonlat:\n - 10.091148\n - 42.686804\nrotation: 45\n"
},
{
"path": "config/exchanges/FR_GB.yaml",
"chars": 160,
"preview": "capacity:\n - -4000\n - 4000\nlonlat:\n - 0\n - 50.4\nparsers:\n exchange: ELEXON.fetch_exchange\n exchangeForecast: ENTSO"
},
{
"path": "config/exchanges/FR_IT-NO.yaml",
"chars": 493,
"preview": "capacity:\n - -2160\n - 4485\nlonlat:\n - 6.9\n - 44.4\nparsers:\n exchange: ENTSOE.fetch_exchange\n exchangeCapacityForec"
},
{
"path": "config/exchanges/FR_IT.yaml",
"chars": 67,
"preview": "capacity:\n - -2160\n - 4485\nlonlat:\n - 6.9\n - 44.4\nrotation: 70\n"
},
{
"path": "config/exchanges/FR_JE.yaml",
"chars": 70,
"preview": "capacity:\n - -245\n - 245\nlonlat:\n - -1.785\n - 49.201\nrotation: 90\n"
},
{
"path": "config/exchanges/FR_LU.yaml",
"chars": 90,
"preview": "lonlat:\n - 6.100579\n - 49.45306\nparsers:\n exchange: ECO2MIX.fetch_exchange\nrotation: 0\n"
},
{
"path": "config/exchanges/GB-NIR_IE.yaml",
"chars": 40,
"preview": "lonlat:\n - -7.4\n - 54.2\nrotation: 180\n"
},
{
"path": "config/exchanges/GB_GB-NIR.yaml",
"chars": 132,
"preview": "capacity:\n - -500\n - 500\nlonlat:\n - -5.428149\n - 54.87826\nparsers:\n exchange: SMARTGRIDDASHBOARD.fetch_exchange\nrot"
},
{
"path": "config/exchanges/GB_IE.yaml",
"chars": 161,
"preview": "capacity:\n - -1000\n - 1000\nlonlat:\n - -5.7\n - 53\nparsers:\n exchange: ELEXON.fetch_exchange\n exchangeForecast: ENTS"
},
{
"path": "config/exchanges/GB_IM.yaml",
"chars": 107,
"preview": "capacity:\n - -65\n - 65\nlonlat:\n - -4\n - 53.8\nrotation: -40\n\nparsers:\n exchange: ELEXON.fetch_exchange\n"
},
{
"path": "config/exchanges/GB_NL.yaml",
"chars": 161,
"preview": "capacity:\n - -1000\n - 1000\nlonlat:\n - 3.3\n - 52.4\nparsers:\n exchange: ELEXON.fetch_exchange\n exchangeForecast: ENT"
},
{
"path": "config/exchanges/GB_NO-NO2.yaml",
"chars": 437,
"preview": "capacity:\n - -1400\n - 1400\nlonlat:\n - 2.44819\n - 57.266334\nparsers:\n exchange: ENTSOE.fetch_exchange\n exchangeCapa"
},
{
"path": "config/exchanges/GB_NO.yaml",
"chars": 47,
"preview": "lonlat:\n - 2.44819\n - 57.266334\nrotation: 50\n"
},
{
"path": "config/exchanges/GE_RU-1.yaml",
"chars": 409,
"preview": "lonlat:\n - 42.822242\n - 43.158267\nparsers:\n exchange: ENTSOE.fetch_exchange\n exchangeCapacityForecastDayAhead: ENTSO"
},
{
"path": "config/exchanges/GE_TR.yaml",
"chars": 433,
"preview": "capacity:\n - -700\n - 700\nlonlat:\n - 42.814\n - 41.562\nparsers:\n exchange: ENTSOE.fetch_exchange\n exchangeCapacityFo"
},
{
"path": "config/exchanges/GR_IT-SO.yaml",
"chars": 438,
"preview": "capacity:\n - -500\n - 500\nlonlat:\n - 18.759248\n - 38.902132\nparsers:\n exchange: ENTSOE.fetch_exchange\n exchangeCapa"
},
{
"path": "config/exchanges/GR_IT.yaml",
"chars": 77,
"preview": "capacity:\n - -500\n - 500\nlonlat:\n - 18.759248\n - 38.902132\nrotation: -90\n"
},
{
"path": "config/exchanges/GR_MK.yaml",
"chars": 438,
"preview": "capacity:\n - -1632\n - 1632\nlonlat:\n - 22.011736\n - 41.160374\nparsers:\n exchange: ENTSOE.fetch_exchange\n exchangeCa"
},
{
"path": "config/exchanges/GR_TR.yaml",
"chars": 437,
"preview": "capacity:\n - -1900\n - 1900\nlonlat:\n - 26.316812\n - 41.1262\nparsers:\n exchange: ENTSOE.fetch_exchange\n exchangeCapa"
},
{
"path": "config/exchanges/GT_HN.yaml",
"chars": 82,
"preview": "lonlat:\n - -89.231\n - 14.86\nparsers:\n exchange: HN.fetch_exchange\nrotation: 90\n"
},
{
"path": "config/exchanges/GT_MX.yaml",
"chars": 86,
"preview": "lonlat:\n - -90.967\n - 16.035\nparsers:\n exchange: ENTE.fetch_exchange\nrotation: -55\n"
},
{
"path": "config/exchanges/GT_SV.yaml",
"chars": 86,
"preview": "lonlat:\n - -89.731\n - 14.094\nparsers:\n exchange: ENTE.fetch_exchange\nrotation: 125\n"
},
{
"path": "config/exchanges/HN_NI.yaml",
"chars": 86,
"preview": "lonlat:\n - -85.5782\n - 14.0209\nparsers:\n exchange: HN.fetch_exchange\nrotation: 180\n"
},
{
"path": "config/exchanges/HN_SV.yaml",
"chars": 84,
"preview": "lonlat:\n - -88.429\n - 13.859\nparsers:\n exchange: HN.fetch_exchange\nrotation: 180\n"
},
{
"path": "config/exchanges/HR_HU.yaml",
"chars": 603,
"preview": "lonlat:\n - 17.407365\n - 45.967775\nparsers:\n exchange: ENTSOE.fetch_exchange\n exchangeCapacityForecastDayAhead: ENTSO"
},
{
"path": "config/exchanges/HR_RS.yaml",
"chars": 439,
"preview": "capacity:\n - -1423\n - 1423\nlonlat:\n - 19.021212\n - 45.354302\nparsers:\n exchange: ENTSOE.fetch_exchange\n exchangeCa"
},
{
"path": "config/exchanges/HR_SI.yaml",
"chars": 598,
"preview": "lonlat:\n - 15.362\n - 45.583\nparsers:\n exchange: ENTSOE.fetch_exchange\n exchangeCapacityForecastDayAhead: ENTSOE.fetc"
},
{
"path": "config/exchanges/HU_RO.yaml",
"chars": 606,
"preview": "lonlat:\n - 21.8074107\n - 47.1141229\nparsers:\n exchange: ENTSOE.fetch_exchange\n exchangeCapacityForecastDayAhead: ENT"
},
{
"path": "config/exchanges/HU_RS.yaml",
"chars": 440,
"preview": "capacity:\n - -1054\n - 1054\nlonlat:\n - 19.494768\n - 46.112673\nparsers:\n exchange: ENTSOE.fetch_exchange\n exchangeCa"
}
]
// ... and 1413 more files (download for full content)
About this extraction
This page contains the full source code of the corradio/electricitymap GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 1613 files (83.3 MB), approximately 11.1M tokens, and a symbol index with 1597 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.