Download code/zones.py from Elpriser/eu-price-forecast: direct link, hf CLI and curl.
- Browser
- Download file 3.14 kB
-
https://huggingface.co/Elpriser/eu-price-forecast/resolve/main/code/zones.py
- Command line
-
hf download hf://Elpriser/eu-price-forecast/code/zones.py
-
curl -L -o zones.py https://huggingface.co/Elpriser/eu-price-forecast/resolve/main/code/zones.py
3.14 kB
| """The 25 EU price zones of /api/nordic that have no model of their own yet, plus what the model needs to know about | |
| each: the ENTSO-E EIC code, the zone's wall clock and the weather points that stand in for the zone. | |
| The zone keys, EIC codes and time zones are the ones of scripts/eu_prices (build_eu_prices.py and | |
| build_entsoe_prices.py) - test_zones.py pins that this list stays identical to the one the price jobs write. | |
| Weather points. One point per small zone, two or three for the big ones, where wind (north) and solar (south) sit in | |
| different places - the same idea as the Danish v3 model's 14 points, kept short because this model covers 25 zones. | |
| Each zone's weather feature is the MEAN over its points, so the model sees one wind / radiation / temperature / | |
| precipitation number per zone and hour. | |
| """ | |
| # zone key -> (EIC, IANA time zone, [(lat, lon), ...]) | |
| ZONES = { | |
| "de": ("10Y1001A1001A82H", "Europe/Berlin", [(53.6, 9.5), (51.2, 9.0), (48.6, 11.5)]), | |
| "fr": ("10YFR-RTE------C", "Europe/Paris", [(49.5, 2.5), (47.0, 1.5), (44.0, 3.5)]), | |
| "pl": ("10YPL-AREA-----S", "Europe/Warsaw", [(54.0, 17.5), (51.8, 19.5)]), | |
| "it-n": ("10Y1001A1001A73I", "Europe/Rome", [(45.3, 9.2), (44.7, 11.3)]), | |
| "at": ("10YAT-APG------L", "Europe/Vienna", [(47.8, 13.5), (48.2, 16.4)]), | |
| "be": ("10YBE----------2", "Europe/Brussels", [(50.9, 4.4)]), | |
| "ch": ("10YCH-SWISSGRIDZ", "Europe/Zurich", [(46.9, 8.0)]), | |
| "cz": ("10YCZ-CEPS-----N", "Europe/Prague", [(49.8, 15.5)]), | |
| "hu": ("10YHU-MAVIR----U", "Europe/Budapest", [(47.2, 19.0)]), | |
| "si": ("10YSI-ELES-----O", "Europe/Ljubljana", [(46.1, 14.8)]), | |
| "es": ("10YES-REE------0", "Europe/Madrid", [(42.0, -5.0), (40.2, -3.7), (37.6, -5.0)]), | |
| "pt": ("10YPT-REN------W", "Europe/Lisbon", [(39.5, -8.5)]), | |
| "sk": ("10YSK-SEPS-----K", "Europe/Bratislava", [(48.6, 19.0)]), | |
| "gr": ("10YGR-HTSO-----Y", "Europe/Athens", [(38.5, 23.0)]), | |
| "ro": ("10YRO-TEL------P", "Europe/Bucharest", [(44.5, 26.0), (44.5, 28.0)]), | |
| "bg": ("10YCA-BULGARIA-R", "Europe/Sofia", [(42.8, 25.0)]), | |
| "hr": ("10YHR-HEP------M", "Europe/Zagreb", [(45.5, 16.0)]), | |
| "rs": ("10YCS-SERBIATSOV", "Europe/Belgrade", [(44.5, 20.8)]), | |
| "ee": ("10Y1001A1001A39I", "Europe/Tallinn", [(58.8, 25.0)]), | |
| "lv": ("10YLV-1001A00074", "Europe/Riga", [(57.0, 24.8)]), | |
| "lt": ("10YLT-1001A0008Q", "Europe/Vilnius", [(55.3, 23.9)]), | |
| "ie": ("10Y1001A1001A59C", "Europe/Dublin", [(53.3, -8.0)]), | |
| "me": ("10YCS-CG-TSO---S", "Europe/Podgorica", [(42.8, 19.2)]), | |
| "mk": ("10YMK-MEPSO----8", "Europe/Skopje", [(41.6, 21.7)]), | |
| "al": ("10YAL-KESH-----5", "Europe/Tirane", [(41.0, 19.9)]), | |
| } | |
| # the zones' ISO country codes, for the holiday calendar (it-n -> IT, de -> DE ...) | |
| COUNTRY = {z: z.split("-")[0].upper() for z in ZONES} | |
| def all_points(): | |
| """[(zone, index, lat, lon)] - every weather point once, in a stable order.""" | |
| return [(z, i, lat, lon) for z, (_, _, pts) in ZONES.items() for i, (lat, lon) in enumerate(pts)] | |