From 8e4f1b4263aea5cf1919aff1e980aa9f314c3a3c Mon Sep 17 00:00:00 2001 From: Dylan McConnell Date: Wed, 22 Apr 2026 15:16:57 +1000 Subject: [PATCH 01/12] Moved mappings to 2024 subdir, updated load function to accept version string (2024 by default) --- pyproject.toml | 2 +- .../mappings/{ => 2024}/demand_scenario_mapping.yaml | 0 .../mappings/{ => 2024}/solar_project_mapping.yaml | 0 .../mappings/{ => 2024}/solar_zone_mapping.yaml | 0 .../mappings/{ => 2024}/wind_project_mapping.yaml | 0 .../mappings/{ => 2024}/wind_zone_mapping.yaml | 0 src/isp_trace_parser/mappings/__init__.py | 5 +++-- 7 files changed, 4 insertions(+), 3 deletions(-) rename src/isp_trace_parser/mappings/{ => 2024}/demand_scenario_mapping.yaml (100%) rename src/isp_trace_parser/mappings/{ => 2024}/solar_project_mapping.yaml (100%) rename src/isp_trace_parser/mappings/{ => 2024}/solar_zone_mapping.yaml (100%) rename src/isp_trace_parser/mappings/{ => 2024}/wind_project_mapping.yaml (100%) rename src/isp_trace_parser/mappings/{ => 2024}/wind_zone_mapping.yaml (100%) diff --git a/pyproject.toml b/pyproject.toml index b8b2888..08e45a4 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -59,4 +59,4 @@ select = [ where = ["src"] [tool.setuptools.package-data] -isp_trace_parser = ["mappings/*.yaml", "remote/manifests/**/*.txt"] +isp_trace_parser = ["mappings/**/*.yaml", "remote/manifests/**/*.txt"] diff --git a/src/isp_trace_parser/mappings/demand_scenario_mapping.yaml b/src/isp_trace_parser/mappings/2024/demand_scenario_mapping.yaml similarity index 100% rename from src/isp_trace_parser/mappings/demand_scenario_mapping.yaml rename to src/isp_trace_parser/mappings/2024/demand_scenario_mapping.yaml diff --git a/src/isp_trace_parser/mappings/solar_project_mapping.yaml b/src/isp_trace_parser/mappings/2024/solar_project_mapping.yaml similarity index 100% rename from src/isp_trace_parser/mappings/solar_project_mapping.yaml rename to src/isp_trace_parser/mappings/2024/solar_project_mapping.yaml diff --git a/src/isp_trace_parser/mappings/solar_zone_mapping.yaml b/src/isp_trace_parser/mappings/2024/solar_zone_mapping.yaml similarity index 100% rename from src/isp_trace_parser/mappings/solar_zone_mapping.yaml rename to src/isp_trace_parser/mappings/2024/solar_zone_mapping.yaml diff --git a/src/isp_trace_parser/mappings/wind_project_mapping.yaml b/src/isp_trace_parser/mappings/2024/wind_project_mapping.yaml similarity index 100% rename from src/isp_trace_parser/mappings/wind_project_mapping.yaml rename to src/isp_trace_parser/mappings/2024/wind_project_mapping.yaml diff --git a/src/isp_trace_parser/mappings/wind_zone_mapping.yaml b/src/isp_trace_parser/mappings/2024/wind_zone_mapping.yaml similarity index 100% rename from src/isp_trace_parser/mappings/wind_zone_mapping.yaml rename to src/isp_trace_parser/mappings/2024/wind_zone_mapping.yaml diff --git a/src/isp_trace_parser/mappings/__init__.py b/src/isp_trace_parser/mappings/__init__.py index 9fcc3fd..808c8d9 100644 --- a/src/isp_trace_parser/mappings/__init__.py +++ b/src/isp_trace_parser/mappings/__init__.py @@ -3,15 +3,16 @@ import yaml -def load(name: str) -> dict: +def load(name: str, version: str = "2024") -> dict: """Load a mapping YAML bundled as package data. Args: name: Mapping file stem (e.g. ``"solar_project_mapping"``). + version: ISP version subdirectory (e.g. ``"2024"``). Returns: Parsed YAML contents. """ - resource = files(__package__).joinpath(f"{name}.yaml") + resource = files(__package__).joinpath(version, f"{name}.yaml") with resource.open("r") as f: return yaml.safe_load(f) From 79e4cdede6dbe10779aa204f08a3b3679784508e Mon Sep 17 00:00:00 2001 From: Dylan McConnell Date: Wed, 27 May 2026 15:55:31 +1000 Subject: [PATCH 02/12] Updated functions to load solar mappings (This will be changed / refactored later) --- src/isp_trace_parser/solar_traces.py | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/isp_trace_parser/solar_traces.py b/src/isp_trace_parser/solar_traces.py index 8de7b31..f52ee49 100644 --- a/src/isp_trace_parser/solar_traces.py +++ b/src/isp_trace_parser/solar_traces.py @@ -135,8 +135,19 @@ def parse_solar_traces( files = get_all_filepaths(input_directory) file_metadata = extract_metadata_for_all_solar_files(files) - project_name_mapping = mappings.load("solar_project_mapping") - zone_name_mapping = mappings.load("solar_zone_mapping") + resource_mapping = mappings.load("resources") + + project_name_mapping = { + alias: val["location"] + for key, val in resource_mapping.items() + for alias in val["iasr_aliases"] + } + zone_name_mapping = { + val["location"]: val["location"] + for key, val in resource_mapping.items() + if val["location_type"] == "zone" + } + name_mappings = {**project_name_mapping, **zone_name_mapping} project_and_zone_input_names = get_unique_project_and_zone_names_in_input_files( From 415254d766bcc4dadc53cd994714aaefe8e9c3c3 Mon Sep 17 00:00:00 2001 From: Dylan McConnell Date: Wed, 27 May 2026 18:45:19 +1000 Subject: [PATCH 03/12] Updated functions to load wind mappings from new structure (This will be changed / refactored later) --- src/isp_trace_parser/wind_traces.py | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/isp_trace_parser/wind_traces.py b/src/isp_trace_parser/wind_traces.py index 5eefafb..78212a1 100644 --- a/src/isp_trace_parser/wind_traces.py +++ b/src/isp_trace_parser/wind_traces.py @@ -137,10 +137,18 @@ def parse_wind_traces( files = get_all_filepaths(input_directory) file_metadata = extract_metadata_for_all_wind_files(files) - project_name_mappings = mappings.load("wind_project_mapping") - project_name_mappings = restructure_wind_project_mapping(project_name_mappings) + resource_mapping = mappings.load("resources") + zone_name_mappings = { + val["location"]: val["location"] + for key, val in resource_mapping.items() + if val["location_type"] == "zone" + } - zone_name_mappings = mappings.load("wind_zone_mapping") + project_name_mappings = { + alias: val["location"] + for key, val in resource_mapping.items() + for alias in val["iasr_aliases"] + } project_and_zone_input_names = get_unique_project_and_zone_names_in_input_files( file_metadata From 8222bcf9de149425e3e0f004a399a594394301e3 Mon Sep 17 00:00:00 2001 From: Dylan McConnell Date: Wed, 27 May 2026 18:50:31 +1000 Subject: [PATCH 04/12] Deleted unnecessay helper function from wind parser - Yaml structure for wind was previously different to solar and needed some unpacking before use - Also updated a default arg in example docs --- src/isp_trace_parser/mappings/__init__.py | 2 +- src/isp_trace_parser/wind_traces.py | 12 ------------ 2 files changed, 1 insertion(+), 13 deletions(-) diff --git a/src/isp_trace_parser/mappings/__init__.py b/src/isp_trace_parser/mappings/__init__.py index 808c8d9..38bf0ca 100644 --- a/src/isp_trace_parser/mappings/__init__.py +++ b/src/isp_trace_parser/mappings/__init__.py @@ -7,7 +7,7 @@ def load(name: str, version: str = "2024") -> dict: """Load a mapping YAML bundled as package data. Args: - name: Mapping file stem (e.g. ``"solar_project_mapping"``). + name: Mapping file stem (e.g. ``"resources"``). version: ISP version subdirectory (e.g. ``"2024"``). Returns: diff --git a/src/isp_trace_parser/wind_traces.py b/src/isp_trace_parser/wind_traces.py index 78212a1..68db9c8 100644 --- a/src/isp_trace_parser/wind_traces.py +++ b/src/isp_trace_parser/wind_traces.py @@ -320,18 +320,6 @@ def write_output_wind_zone_filename(metadata: dict) -> str: return f"RefYear{m['reference_year']}_{name}_{m['resource_type']}.parquet" -def restructure_wind_project_mapping(project_name_mapping: dict) -> dict: - """ - Simplifies the wind project name mapping. - - Returns a dict with the workbook project names as keys and CSV file project names as values. - """ - return { - name: mapping_data["CSVFile"] - for name, mapping_data in project_name_mapping.items() - } - - def extract_metadata_for_all_wind_files(filepaths: list) -> dict: """ Extracts metadata for all wind trace files. From cbc47ebcb8aee037a8ad5cb7312b1a35c2a94d67 Mon Sep 17 00:00:00 2001 From: Dylan McConnell Date: Wed, 27 May 2026 18:55:56 +1000 Subject: [PATCH 05/12] Deleted legacy mappings --- .../mappings/2024/solar_project_mapping.yaml | 114 ------ .../mappings/2024/solar_zone_mapping.yaml | 40 -- .../mappings/2024/wind_project_mapping.yaml | 356 ------------------ .../mappings/2024/wind_zone_mapping.yaml | 45 --- 4 files changed, 555 deletions(-) delete mode 100644 src/isp_trace_parser/mappings/2024/solar_project_mapping.yaml delete mode 100644 src/isp_trace_parser/mappings/2024/solar_zone_mapping.yaml delete mode 100644 src/isp_trace_parser/mappings/2024/wind_project_mapping.yaml delete mode 100644 src/isp_trace_parser/mappings/2024/wind_zone_mapping.yaml diff --git a/src/isp_trace_parser/mappings/2024/solar_project_mapping.yaml b/src/isp_trace_parser/mappings/2024/solar_project_mapping.yaml deleted file mode 100644 index 04cfcca..0000000 --- a/src/isp_trace_parser/mappings/2024/solar_project_mapping.yaml +++ /dev/null @@ -1,114 +0,0 @@ -Adelaide Desalination Plant Solar Farm: Adelaide_Desal -Aramara Solar Farm: Aramara -Avonlie Solar Farm: Avonlie -Banksia Solar Farm: Banksia -Bannerton Solar Park: Bannerton -Beryl Solar Farm: Beryl -Bluegrass Solar Farm: Bluegrass -Bolivar Waste Water Treatment Solar Farm: Bolivar -Bomen Solar Farm: Bomen -Broken Hill Solar Farm: Broken_Hill -Bungala One Solar Farm: Bungala_One -Bungala Two Solar Farm: Bungala_Two -Childers Solar Farm: Childers -Clare Solar Farm: Clare -Clermont Solar Farm: Clermont -Cohuna Solar Farm: Cohuna -Coleambally Solar Farm: Coleambally -Collinsville Solar Farm: Collinsville -Columboola Solar Farm: Columboola -Corowa Solar Farm: Corowa -Culcairn Solar Farm: Culcairn -Cultana Solar Farm: Cultana -Darling Downs Solar Farm: Darling_Downs -Darlington Point Solar Farm: Darlington_Point -Daydream Solar Farm: Daydream -Derby Solar Farm: Derby -Edenvale Solar Park: Edenvale -Emerald Solar Farm: Emerald -Finley Solar Farm: Finley -Frasers Solar Farm: Frasers -Fulham Solar Farm: Fulham -Gangarri Solar Farm: Gangarri -Gannawarra Solar Farm: Gannawarra -Girgarre Solar Farm: Girgarre -Glenrowan Solar Farm: Glenrowan -Glenrowan West Solar Farm: Glenrowan_West -Goonumbla Solar Farm: Goonumbla -Gullen Range Solar Farm: Gullen_Range -Gunnedah Solar Farm: Gunnedah -Hamilton Solar Farm: Hamilton -Happy Valley Reservoir: Happy_Valley -Haughton Solar Farm: Haughton -Hayman Solar Farm: Hayman -Hillston Sun Farm: Hillston -Horsham Solar Farm: Horsham -Hughenden Solar Farm: Hughenden -Jemalong Solar: Jemalong -Junee Solar Farm: Junee -Karadoc Solar Farm: Karadoc -Kennedy Energy Park Solar Farm: Kennedy -Kiamal Solar Farm stage 1: Kiamal -"Kiamal Solar Farm \u2013 Stage 2": Kiamal -Kidston Solar Farm: Kidston -Lilyvale Solar Farm: Lilyvale -Limondale Solar Farm 1: Limondale_One -Limondale Solar Farm 2: Limondale_Two -Lockhart Hybrid Facility - Solar: Lockhart -Longreach Solar Farm: Longreach -Manildra Solar Farm: Manildra -Mannum Adelaide Pumping Station No 2 - MAPL2 (Palmer): Mannum-Adelaide_2 -Mannum Adelaide Pumping Station No 3 - MAPL3 (Tungkillo): Mannum-Adelaide_3 -Mannum Solar Farm 2: Mannum_Two -Maryrorough Solar Farm: Maryrorough -Metz Solar Farm: Metz -Middlemount Solar Farm: Middlemount -Molong Solar Farm: Molong -Moree Solar Farm: Moree -Morgan To Whyalla Pipeline No 1 PS And Water Filtration Plant: Morgan-Whyalla_1 -Morgan To Whyalla Pipeline No 2 PS: Morgan-Whyalla_2 -Morgan To Whyalla Pipeline No 3 PS: Morgan-Whyalla_3 -Morgan To Whyalla Pipeline No 4 PS: Morgan-Whyalla_4 -Moura Solar Farm: Moura -Murray Bridge - Onkaparinga Pipeline Pump 2: Murray_Bridge-Onkaparinga_2 -Nevertire Solar Farm: Nevertire -New England Solar Farm: New_England -New England Solar Farm - stage 2: New_England -Numurkah Solar Farm: Numurkah_One -Nyngan Solar Plant: Nyngan -Oakey 1 Solar Farm: Oakey_One -Oakey 2 Solar Farm: Oakey_Two -Parkes Solar Farm: Parkes -Port Augusta Renewable Energy Park - Solar: Port_Augusta -Quorn Park Solar Farm: Quorn_Park -Riverina Solar Farm: Riverina -Ross River Solar Farm: Ross_River -Rugby Run Solar Farm: Rugby_Run -Sebastopol Solar Farm: Sebastopol -Stubbo Solar Farm: Stubbo -Sun Metals Corporation Solar Farm: Sun_Metals -Sunraysia Solar Farm: Sunraysia -Suntop Solar Farm: Suntop -Susan River Solar Farm: Susan_River -Tailem Bend Solar Farm: Tailem_Bend -Tailem Bend Solar Farm - stage 2: Tailem_Bend_Stage_Two -Tamworth Solar Farm: Tamworth -Tilbuster Solar Farm: Tilbuster -Wagga North Solar Farm: Wagga_North -Walla Walla Solar Farm: Walla_Walla -Wandoan South Solar Farm - stage 1: Wandoan -Warwick Solar Farm: Warwick_One -Wellington North Solar Farm (Lightsource): Wellington_North -Wellington Solar Farm: Wellington -Wemen Solar Farm: Wemen -West Wyalong Solar Farm: West_Wyalong -Western Downs Green Power Hub: Western_Downs_Hub -White Rock Solar Farm: White_Rock -Whitsunday Solar Farm: Whitsunday -Winton Solar Farm: Winton -Wollar Solar Farm: Wollar -Woolooga Solar Farm: Woolooga -Wunghnu Solar Farm: Wunghnu -Wyalong Solar Farm: Wyalong -Yarranlea Solar Farm: Yarranlea -Yatpool Solar Farm: Yatpool diff --git a/src/isp_trace_parser/mappings/2024/solar_zone_mapping.yaml b/src/isp_trace_parser/mappings/2024/solar_zone_mapping.yaml deleted file mode 100644 index 1526f42..0000000 --- a/src/isp_trace_parser/mappings/2024/solar_zone_mapping.yaml +++ /dev/null @@ -1,40 +0,0 @@ -Q1: Q1 -Q2: Q2 -Q3: Q3 -Q4: Q4 -Q5: Q5 -Q6: Q6 -Q7: Q7 -Q8: Q8 -Q9: Q9 -N0: N0 -N1: N1 -N2: N2 -N3: N3 -N4: N4 -N5: N5 -N6: N6 -N7: N7 -N8: N8 -N9: N9 -N12: N12 -V0: V0 -V1: V1 -V2: V2 -V3: V3 -V4: V4 -V5: V5 -V6: V6 -V8: V8 -S1: S1 -S2: S2 -S3: S3 -S4: S4 -S5: S5 -S6: S6 -S7: S7 -S8: S8 -S9: S9 -T1: T1 -T2: T2 -T3: T3 diff --git a/src/isp_trace_parser/mappings/2024/wind_project_mapping.yaml b/src/isp_trace_parser/mappings/2024/wind_project_mapping.yaml deleted file mode 100644 index f04a2fd..0000000 --- a/src/isp_trace_parser/mappings/2024/wind_project_mapping.yaml +++ /dev/null @@ -1,356 +0,0 @@ -Bango 973 Wind Farm: - Station Name: Bango 973 Wind Farm - DUID: BANGOWF1 - CSVFile: BANGOWF1 -Bango 999 Wind Farm: - Station Name: Bango 999 Wind Farm - DUID: BANGOWF2 - CSVFile: BANGOWF2 -Boco Rock Wind Farm: - Station Name: Boco Rock Wind Farm - DUID: BOCORWF1 - CSVFile: BOCORWF1 -Bodangora Wind Farm: - Station Name: Bodangora Wind Farm - DUID: BODWF1 - CSVFile: BODWF1 -Capital Wind Farm: - Station Name: Capital Wind Farm - DUID: CAPTL_WF - CSVFile: CAPTL_WF -Collector Wind Farm: - Station Name: Collector Wind Farm 1 - DUID: COLWF01 - CSVFile: COLWF01 -Crookwell 2 Wind Farm: - Station Name: Crookwell 2 Wind Farm - DUID: CROOKWF2 - CSVFile: CROOKWF2 -Crudine Ridge Wind Farm: - Station Name: Crudine Ridge Wind Farm - DUID: CRURWF1 - CSVFile: CRURWF1 -Cullerin Range Wind Farm: - Station Name: Cullerin Range Wind Farm - DUID: CULLRGWF - CSVFile: CULLRGWF -Gullen Range Wind Farm: - Station Name: Gullen Range Wind Farm - DUID: GULLRWF1 - CSVFile: GULLRWF1 -Gullen Range Wind Farm 2: - Station Name: Gullen Range Wind Farm - DUID: GULLRWF1 - CSVFile: GULLRWF2 -Gunning Wind Farm: - Station Name: Gunning Wind Farm - DUID: GUNNING1 - CSVFile: GUNNING1 -Sapphire Wind Farm: - Station Name: Sapphire Wind Farm - DUID: SAPHWF1 - CSVFile: SAPHWF1 -Silverton Wind Farm: - Station Name: Silverton Wind Farm - DUID: STWF1 - CSVFile: STWF1 -Taralga Wind Farm: - Station Name: Taralga Wind Farm - DUID: TARALGA1 - CSVFile: TARALGA1 -White Rock Wind Farm - Stage 1: - Station Name: White Rock Wind Farm - DUID: WRWF1 - CSVFile: WRWF1 -Woodlawn Wind Farm: - Station Name: Woodlawn Wind Farm - DUID: WOODLWN1 - CSVFile: WOODLWN1 -Coopers Gap Wind Farm: - Station Name: Coopers Gap Wind Farm - DUID: COOPGWF1 - CSVFile: COOPGWF1 -Kaban Green Power Hub - Wind Farm: - Station Name: Kaban Wind Farm - DUID: KABANWF1 - CSVFile: KABANWF1 -Kennedy Energy Park Wind Farm: - Station Name: Kennedy Energy Park - DUID: KEPWF1 - CSVFile: KEPWF1 -Mount Emerald Wind Farm: - Station Name: Mount Emerald Wind Farm - DUID: MEWF1 - CSVFile: MEWF1 -Canunda Wind Farm: - Station Name: Canunda Wind Farm - DUID: CNUNDAWF - CSVFile: CNUNDAWF -Cathedral Rocks Wind Farm: - Station Name: Cathedral Rocks - DUID: CATHROCK - CSVFile: CATHROCK -Clements Gap Wind Farm: - Station Name: Clements Gap Wind Farm - DUID: CLEMGPWF - CSVFile: CLEMGPWF -Hallett 4 North Brown Hill Wind Farm: - Station Name: North Brown Hill Wind Farm - DUID: NBHWF1 - CSVFile: NBHWF1 -Hallett 5 The Bluff Wind Farm: - Station Name: The Bluff Wind Farm - DUID: BLUFF1 - CSVFile: BLUFF1 -Hallett Stage 1 Brown Hill Wind Farm: - Station Name: Hallett 1 Wind Farm - DUID: HALLWF1 - CSVFile: HALLWF1 -Hallett Stage 2 Hallett Hill Wind Farm: - Station Name: Hallett 2 Wind Farm - DUID: HALLWF2 - CSVFile: HALLWF2 -Hornsdale Wind Farm Stage 1: - Station Name: Hornsdale Wind Farm - DUID: HDWF1 - CSVFile: HDWF1 -Hornsdale Wind Farm Stage 2: - Station Name: Hornsdale Wind Farm - DUID: HDWF1 - CSVFile: HDWF2 -Hornsdale Wind Farm Stage 3: - Station Name: Hornsdale Wind Farm - DUID: HDWF1 - CSVFile: HDWF3 -Lake Bonney 1 Wind Farm: - Station Name: Lake Bonney Wind Farm Stage 1 - DUID: LKBONNY1 - CSVFile: LKBONNY1 -Lake Bonney 2 Wind Farm: - Station Name: Lake Bonney Stage 3 Wind Farm - DUID: LKBONNY3 - CSVFile: LKBONNY2 -Lake Bonney 3 Wind Farm: - Station Name: Lake Bonney Stage 3 Wind Farm - DUID: LKBONNY3 - CSVFile: LKBONNY3 -Lincoln Gap Wind Farm - stage 1: - Station Name: Lincoln Gap Wind Farm - DUID: LGAPWF1 - CSVFile: LGAPWF1 -Lincoln Gap Wind Farm - stage 2: - Station Name: Lincoln Gap Wind Farm - DUID: LGAPWF1 - CSVFile: LGAPWF2 -Mount Millar Wind Farm: - Station Name: Mt Millar Wind Farm - DUID: MTMILLAR - CSVFile: MTMILLAR -Port Augusta Renewable Energy Park - Wind: - Station Name: Port Augusta Renewable Energy Park - DUID: PAREPW1 - CSVFile: PAREPW1 -Snowtown S2 Wind Farm: - Station Name: Snowtown South Wind Farm - DUID: SNOWSTH1 - CSVFile: ['SNOWSTH1', 'SNOWNTH1'] -Snowtown Wind Farm: - Station Name: Snowtown South Wind Farm - DUID: SNOWSTH1 - CSVFile: SNOWTWN1 -Starfish Hill Wind Farm: - Station Name: Starfish Hill Wind Farm - DUID: STARHLWF - CSVFile: STARHLWF -Waterloo Wind Farm: - Station Name: Waterloo Wind Farm - DUID: WATERLWF - CSVFile: WATERLWF -Wattle Point Wind Farm: - Station Name: Wattle Point Wind Farm - DUID: WPWF - CSVFile: WPWF -Willogoleche Wind Farm: - Station Name: Willogoleche Wind Farm - DUID: WGWF1 - CSVFile: WGWF1 -Cattle Hill Wind Farm: - Station Name: Cattle Hill Wind Farm - DUID: CTHLWF1 - CSVFile: CTHLWF1 -Granville Harbour Wind Farm: - Station Name: Granville Harbour Wind Farm - DUID: GRANWF1 - CSVFile: GRANWF1 -Musselroe Wind Farm: - Station Name: Musselroe Wind Farm - DUID: MUSSELR1 - CSVFile: MUSSELR1 -Woolnorth Wind Farm: - Station Name: Woolnorth Studland Bay / Bluff Point Wind Farm - DUID: WOOLNTH1 - CSVFile: WOOLNTH1 -Ararat Wind Farm: - Station Name: Ararat Wind Farm - DUID: ARWF1 - CSVFile: ARWF1 -Bald Hills Wind Farm: - Station Name: Bald Hills Wind Farm - DUID: BALDHWF1 - CSVFile: BALDHWF1 -Berrybank Wind Farm: - Station Name: Berrybank 2 Wind Farm - DUID: BRYB2WF2 - CSVFile: BRYB1WF1 -Bulgana Green Power Hub - Wind Farm: - Station Name: Bulgana Green Power Hub - DUID: BULGANA1 - CSVFile: BULGANA1 -Challicum Hills Wind Farm: - Station Name: Challicum Hills Wind Farm - DUID: CHALLHWF - CSVFile: CHALLHWF -Cherry Tree Wind Farm: - Station Name: Cherry Tree Wind Farm - DUID: CHYTWF1 - CSVFile: CHYTWF1 -Crowlands Wind Farm: - Station Name: Crowlands Wind Farm - DUID: CROWLWF1 - CSVFile: CROWLWF1 -Dulacca Wind Farm: - Station Name: Dulacca Wind Farm - DUID: DULAWF1 - CSVFile: DULAWF1 -Dundonnell Wind Farm: - Station Name: Dundonnell Wind Farm - DUID: DUNDWF1 - CSVFile: ['DUNDWF1', 'DUNDWF2', 'DUNDWF3'] -Elaine Wind Farm: - Station Name: Elaine Wind Farm - DUID: ELAINWF1 - CSVFile: ELAINWF1 -Kiata Wind Farm: - Station Name: Kiata Wind Farm - DUID: KIATAWF1 - CSVFile: KIATAWF1 -Macarthur Wind Farm: - Station Name: Macarthur Wind Farm - DUID: MACARTH1 - CSVFile: MACARTH1 -Moorabool Wind Farm: - Station Name: Moorabool Wind Farm - DUID: MOORAWF1 - CSVFile: MOORAWF1 -Mortlake South Wind Farm: - Station Name: Mortlake South Wind Farm - DUID: MRTLSWF1 - CSVFile: MRTLSWF1 -Mortons Lane Wind Farm: - Station Name: Mortons Lane Wind Farm - DUID: MLWF1 - CSVFile: MLWF1 -Mt Gellibrand Wind Farm: - Station Name: Mt Gellibrand Wind Farm - DUID: MTGELWF1 - CSVFile: MTGELWF1 -Mt Mercer Wind Farm: - Station Name: Mt Mercer Wind Farm - DUID: MERCER01 - CSVFile: MERCER01 -Murra Warra Wind Farm - stage 1: - Station Name: Murra Warra Wind Farm - DUID: MUWAWF1 - CSVFile: MUWAWF1 -Murra Warra Wind Farm - stage 2: - Station Name: Murra Warra Wind Farm - DUID: MUWAWF1 - CSVFile: MUWAWF2 -Oaklands Hill Wind Farm: - Station Name: Oaklands Hill Wind Farm - DUID: OAKLAND1 - CSVFile: OAKLAND1 -Portland Wind Farm: - Station Name: Crowlands Wind Farm - DUID: CROWLWF1 - CSVFile: PORTWF -Salt Creek Wind Farm: - Station Name: Salt Creek Wind Farm - DUID: SALTCRK1 - CSVFile: SALTCRK1 -Stockyard Hill Wind Farm: - Station Name: Stockyard Hill Wind Farm - DUID: STOCKYD1 - CSVFile: STOCKYD1 -Waubra Wind Farm: - Station Name: Waubra Wind Farm - DUID: WAUBRAWF - CSVFile: WAUBRAWF -Yaloak South Wind Farm: - Station Name: Yaloak South Wind Farm - DUID: YSWF1 - CSVFile: YSWF1 -Yambuk Wind Farm: - Station Name: Yambuk Wind Farm - DUID: YAMBUKWF - CSVFile: YAMBUKWF -Yendon Wind Farm: - Station Name: Yendon Wind Farm - DUID: YENDWF1 - CSVFile: YENDWF1 -Clarke Creek Wind Farm: - Station Name: Salt Creek Wind Farm - DUID: SALTCRK1 - CSVFile: ['CLRKCWF1', 'CLRKCWF2'] -Crookwell 3 Wind Farm: - Station Name: Crookwell 3 Wind Farm - DUID: CROOKWF3 - CSVFile: Crookwell_3 -Flyers Creek Wind Farm: - Station Name: Flyers Creek Wind Farm - DUID: FLYCRKWF - CSVFile: Flyers_Creek -Golden Plains Wind Farm East: - Station Name: Golden Plains Wind Farm East - DUID: GPWFEST1 - CSVFile: Golden_Plains_East -Goyder South Wind Farm 1A: - Station Name: Goyder South Wind Farm 1A - DUID: GSWF1A - CSVFile: Goyder_South -Goyder South Wind Farm 1B: - Station Name: Goyder South Wind Farm 1B - DUID: GSWF1B1 - CSVFile: Goyder_South -Hawkesdale Wind Farm: - Station Name: Hawkesdale Wind Farm - DUID: HD1WF1 - CSVFile: Hawkesdale -Ryan Corner Wind Farm: - Station Name: Ryan Corner Wind Farm - DUID: RYANCWF1 - CSVFile: Ryan_Corner -Rye Park Wind Farm: - Station Name: Ararat Wind Farm - DUID: ARWF1 - CSVFile: Rye_Park -Wambo Wind Farm: - Station Name: Waubra Wind Farm - DUID: WAUBRAWF - CSVFile: Wambo -MacIntyre Wind Farm: - Station Name: MacIntyre Wind Farm - DUID: MCINTYR1 - CSVFile: Macintyre -Uungula Wind Farm: - Station Name: Canunda Wind Farm - DUID: CNUNDAWF - CSVFile: Uungula -Woolsthorpe Wind Farm: - Station Name: Kaban Wind Farm - DUID: KABANWF1 - CSVFile: Woolsthorpe -Coppabella Wind Farm: - Station Name: Capital Wind Farm - DUID: CAPTL_WF - CSVFile: Coppabella diff --git a/src/isp_trace_parser/mappings/2024/wind_zone_mapping.yaml b/src/isp_trace_parser/mappings/2024/wind_zone_mapping.yaml deleted file mode 100644 index 730a52a..0000000 --- a/src/isp_trace_parser/mappings/2024/wind_zone_mapping.yaml +++ /dev/null @@ -1,45 +0,0 @@ -Q1: Q1 -Q2: Q2 -Q3: Q3 -Q4: Q4 -Q5: Q5 -Q6: Q6 -Q7: Q7 -Q8: Q8 -Q9: Q9 -N0: N0 -N1: N1 -N2: N2 -N3: N3 -N4: N4 -N5: N5 -N6: N6 -N7: N7 -N8: N8 -N9: N9 -N10: N10 -N11: N11 -N12: N12 -V0: V0 -V1: V1 -V2: V2 -V3: V3 -V4: V4 -V5: V5 -V6: V6 -V7: V7 -V8: V8 -S1: S1 -S2: S2 -S3: S3 -S4: S4 -S5: S5 -S6: S6 -S7: S7 -S8: S8 -S9: S9 -S10: S10 -T1: T1 -T2: T2 -T3: T3 -T4: T4 From f55aa8dbd2ede35a40d024110f1baa2b7fd9c894 Mon Sep 17 00:00:00 2001 From: Dylan McConnell Date: Wed, 27 May 2026 21:34:20 +1000 Subject: [PATCH 06/12] Minor update to topography mapping --- .../mappings/2024/topography.yaml | 77 +++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 src/isp_trace_parser/mappings/2024/topography.yaml diff --git a/src/isp_trace_parser/mappings/2024/topography.yaml b/src/isp_trace_parser/mappings/2024/topography.yaml new file mode 100644 index 0000000..c7bdae0 --- /dev/null +++ b/src/isp_trace_parser/mappings/2024/topography.yaml @@ -0,0 +1,77 @@ +# 2024 ISP geographic topography (based on the 2024 IASR workbook). +# +# Maps renewable energy zones (REZ) -> ISP subregions -> regions. Each +# entry's value is its parent in the topography hierarchy. +# +# AEMO 2024 trace data includes two "non-REZ" REZ trace files (N0, V0) +# for new entrant technologies, attributed to specific subregions: +# - "New South Wales Non-REZ" -> CNSW +# - "Victoria Non-REZ" -> VIC +# +# Existing projects that sit outside any formal REZ are attributed at +# subregion resolution directly on their `resources.yaml` entry (via +# `subregion` instead of `zone`). + + +regions: [NSW, VIC, QLD, SA, TAS] + +subregions: + CNSW: NSW + NNSW: NSW + SNSW: NSW + SNW: NSW + VIC: VIC + CQ: QLD + NQ: QLD + SQ: QLD + CSA: SA + SESA: SA + TAS: TAS + +zones: + N0: CNSW # AEMO non-REZ NSW + V0: VIC # AEMO non-REZ VIC + Q1: NQ # Far North QLD + Q2: NQ # North Qld Clean Energy Hub + Q3: NQ # Northern Qld + Q4: CQ # Isaac + Q5: CQ # Barcaldine + Q6: CQ # Fitzroy + Q7: SQ # Wide Bay + Q8: SQ # Darling Downs + Q9: CQ # Banana + N1: NNSW # North West NSW + N2: NNSW # New England + N3: CNSW # Central-West Orana + N4: SNSW # Broken Hill + N5: SNSW # South West NSW + N6: SNSW # Wagga Wagga + N7: SNSW # Tumut + N8: SNSW # Cooma-Monaro + N9: CNSW # Hunter-Central Coast + N10: SNW # Hunter Coast + N11: SNW # Illawarra Coast + N12: SNW # Illawarra + V1: VIC # Ovens Murray + V2: VIC # Murray River + V3: VIC # Western Victoria + V4: VIC # South West Victoria + V5: VIC # Gippsland + V6: VIC # Central North Vic + V7: VIC # Gippsland Coast + V8: VIC # Southern Ocean + S1: SESA # South East SA + S2: CSA # Riverland + S3: CSA # Mid-North SA + S4: CSA # Yorke Peninsula + S5: CSA # Northern SA + S6: CSA # Leigh Creek + S7: CSA # Roxby Downs + S8: CSA # Eastern Eyre Peninsula + S9: CSA # Western Eyre Peninsula + S10: SESA # South East SA Coast + T1: TAS # North East Tasmania + T2: TAS # North West Tasmania + T3: TAS # Central Highlands + T4: TAS # North West Tasmania Coast + T5: TAS # North East Tasmania Coast From e0f08499668c0db75045459c0f46b74bcb20fe35 Mon Sep 17 00:00:00 2001 From: Dylan McConnell Date: Wed, 27 May 2026 22:15:59 +1000 Subject: [PATCH 07/12] Added resources.yaml --- .../mappings/2024/resources.yaml | 2468 +++++++++++++++++ 1 file changed, 2468 insertions(+) create mode 100644 src/isp_trace_parser/mappings/2024/resources.yaml diff --git a/src/isp_trace_parser/mappings/2024/resources.yaml b/src/isp_trace_parser/mappings/2024/resources.yaml new file mode 100644 index 0000000..ca190ce --- /dev/null +++ b/src/isp_trace_parser/mappings/2024/resources.yaml @@ -0,0 +1,2468 @@ +# 2024 ISP resources mapping +# +# Notes: +# * Keys are trace filename stems (the part before `_RefYear.csv`). +# * `location` is the general location identifier, distinct from the +# full trace stem: for projects it is the project name; for zones +# it is the REZ code (e.g. `N6`). +# * `location_type` is either "project" (power-station-level CSVs) or +# "zone" (REZ-level CSVs), for the 2024 ISP. +# * Project entries carry exactly one parent field: +# - `zone` (REZ code) when the project sits inside a formal REZ, or +# - `subregion` (e.g. SNSW) when it does not. +# * Zone entries don't include any parent field (their parent is determined +# via topography.yaml. +# * Entries are grouped by type then technology, alphabetical within +# each group: solar projects, wind projects, solar zones, wind zones. +# +# (See ADR-001 for further details and options considered.) + +# --------------------------------------------------------------------------- +# Solar project traces. +# --------------------------------------------------------------------------- + +Adelaide_Desal_FFP: + location_type: project + location: Adelaide_Desal + resource_type: solar_ffp + subregion: CSA + iasr_aliases: [Adelaide Desalination Plant Solar Farm] + +Aramara_SAT: + location_type: project + location: Aramara + resource_type: solar_sat + zone: Q7 + iasr_aliases: [Aramara Solar Farm] + +Avonlie_SAT: + location_type: project + location: Avonlie + resource_type: solar_sat + zone: N6 + iasr_aliases: [Avonlie Solar Farm] + +Banksia_SAT: + location_type: project + location: Banksia + resource_type: solar_sat + zone: Q7 + iasr_aliases: [Banksia Solar Farm] + +Bannerton_SAT: + location_type: project + location: Bannerton + resource_type: solar_sat + zone: V2 + iasr_aliases: [Bannerton Solar Park] + +Beryl_SAT: + location_type: project + location: Beryl + resource_type: solar_sat + zone: N3 + iasr_aliases: [Beryl Solar Farm] + +Bluegrass_SAT: + location_type: project + location: Bluegrass + resource_type: solar_sat + zone: Q8 + iasr_aliases: [Bluegrass Solar Farm] + +Bolivar_FFP: + location_type: project + location: Bolivar + resource_type: solar_ffp + subregion: CSA + iasr_aliases: [Bolivar Waste Water Treatment Solar Farm] + +Bomen_SAT: + location_type: project + location: Bomen + resource_type: solar_sat + zone: N6 + iasr_aliases: [Bomen Solar Farm] + +Broken_Hill_FFP: + location_type: project + location: Broken_Hill + resource_type: solar_ffp + zone: N4 + iasr_aliases: [Broken Hill Solar Farm] + +Bungala_One_SAT: + location_type: project + location: Bungala_One + resource_type: solar_sat + zone: S5 + iasr_aliases: [Bungala One Solar Farm] + +Bungala_Two_SAT: + location_type: project + location: Bungala_Two + resource_type: solar_sat + zone: S5 + iasr_aliases: [Bungala Two Solar Farm] + +Childers_SAT: + location_type: project + location: Childers + resource_type: solar_sat + zone: Q7 + iasr_aliases: [Childers Solar Farm] + +Clare_SAT: + location_type: project + location: Clare + resource_type: solar_sat + zone: Q3 + iasr_aliases: [Clare Solar Farm] + +Clermont_SAT: + location_type: project + location: Clermont + resource_type: solar_sat + zone: Q4 + iasr_aliases: [Clermont Solar Farm] + +Cohuna_SAT: + location_type: project + location: Cohuna + resource_type: solar_sat + zone: V2 + iasr_aliases: [Cohuna Solar Farm] + +Coleambally_SAT: + location_type: project + location: Coleambally + resource_type: solar_sat + subregion: SNSW + iasr_aliases: [Coleambally Solar Farm] + +Collinsville_FFP: + location_type: project + location: Collinsville + resource_type: solar_ffp + zone: Q4 + iasr_aliases: [Collinsville Solar Farm] + +Columboola_SAT: + location_type: project + location: Columboola + resource_type: solar_sat + zone: Q8 + iasr_aliases: [Columboola Solar Farm] + +Corowa_SAT: + location_type: project + location: Corowa + resource_type: solar_sat + zone: N5 + iasr_aliases: [Corowa Solar Farm] + +Culcairn_SAT: + location_type: project + location: Culcairn + resource_type: solar_sat + zone: N6 + iasr_aliases: [Culcairn Solar Farm] + +Cultana_SAT: + location_type: project + location: Cultana + resource_type: solar_sat + zone: S5 + iasr_aliases: [Cultana Solar Farm] + +Darling_Downs_FFP: + location_type: project + location: Darling_Downs + resource_type: solar_ffp + zone: Q8 + iasr_aliases: [Darling Downs Solar Farm] + +Darlington_Point_SAT: + location_type: project + location: Darlington_Point + resource_type: solar_sat + subregion: SNSW + iasr_aliases: [Darlington Point Solar Farm] + +Daydream_SAT: + location_type: project + location: Daydream + resource_type: solar_sat + zone: Q4 + iasr_aliases: [Daydream Solar Farm] + +Derby_SAT: + location_type: project + location: Derby + resource_type: solar_sat + zone: V2 + iasr_aliases: [Derby Solar Farm] + +Edenvale_SAT: + location_type: project + location: Edenvale + resource_type: solar_sat + zone: Q8 + iasr_aliases: [Edenvale Solar Park] + +Emerald_SAT: + location_type: project + location: Emerald + resource_type: solar_sat + subregion: CQ + iasr_aliases: [Emerald Solar Farm] + +Finley_SAT: + location_type: project + location: Finley + resource_type: solar_sat + subregion: SNSW + iasr_aliases: [Finley Solar Farm] + +Frasers_SAT: + location_type: project + location: Frasers + resource_type: solar_sat + zone: V5 + iasr_aliases: [Frasers Solar Farm] + +Fulham_SAT: + location_type: project + location: Fulham + resource_type: solar_sat + zone: V5 + iasr_aliases: [Fulham Solar Farm] + +Gangarri_SAT: + location_type: project + location: Gangarri + resource_type: solar_sat + zone: Q8 + iasr_aliases: [Gangarri Solar Farm] + +Gannawarra_SAT: + location_type: project + location: Gannawarra + resource_type: solar_sat + zone: V2 + iasr_aliases: [Gannawarra Solar Farm] + +Girgarre_SAT: + location_type: project + location: Girgarre + resource_type: solar_sat + zone: V6 + iasr_aliases: [Girgarre Solar Farm] + +Glenrowan_SAT: + location_type: project + location: Glenrowan + resource_type: solar_sat + zone: V6 + iasr_aliases: [Glenrowan Solar Farm] + +Glenrowan_West_SAT: + location_type: project + location: Glenrowan_West + resource_type: solar_sat + zone: V6 + iasr_aliases: [Glenrowan West Solar Farm] + +Goonumbla_SAT: + location_type: project + location: Goonumbla + resource_type: solar_sat + zone: N3 + iasr_aliases: [Goonumbla Solar Farm] + +Gullen_Range_FFP: + location_type: project + location: Gullen_Range + resource_type: solar_ffp + subregion: SNSW + iasr_aliases: [Gullen Range Solar Farm] + +Gunnedah_SAT: + location_type: project + location: Gunnedah + resource_type: solar_sat + zone: N1 + iasr_aliases: [Gunnedah Solar Farm] + +Hamilton_SAT: + location_type: project + location: Hamilton + resource_type: solar_sat + zone: Q4 + iasr_aliases: [Hamilton Solar Farm] + +Happy_Valley_SAT: + location_type: project + location: Happy_Valley + resource_type: solar_sat + subregion: CSA + iasr_aliases: [Happy Valley Reservoir] + +Haughton_SAT: + location_type: project + location: Haughton + resource_type: solar_sat + zone: Q3 + iasr_aliases: [Haughton Solar Farm] + +Hayman_SAT: + location_type: project + location: Hayman + resource_type: solar_sat + zone: Q4 + iasr_aliases: [Hayman Solar Farm] + +Hillston_SAT: + location_type: project + location: Hillston + resource_type: solar_sat + subregion: SNSW + iasr_aliases: [Hillston Sun Farm] + +Horsham_SAT: + location_type: project + location: Horsham + resource_type: solar_sat + zone: V3 + iasr_aliases: [Horsham Solar Farm] + +Hughenden_SAT: + location_type: project + location: Hughenden + resource_type: solar_sat + zone: Q2 + iasr_aliases: [Hughenden Solar Farm] + +Jemalong_SAT: + location_type: project + location: Jemalong + resource_type: solar_sat + subregion: CNSW + iasr_aliases: [Jemalong Solar] + +Junee_SAT: + location_type: project + location: Junee + resource_type: solar_sat + zone: N6 + iasr_aliases: [Junee Solar Farm] + +Karadoc_SAT: + location_type: project + location: Karadoc + resource_type: solar_sat + zone: V2 + iasr_aliases: [Karadoc Solar Farm] + +Kennedy_SAT: + location_type: project + location: Kennedy + resource_type: solar_sat + zone: Q2 + iasr_aliases: [Kennedy Energy Park Solar Farm] + +Kiamal_SAT: + location_type: project + location: Kiamal + resource_type: solar_sat + zone: V2 + iasr_aliases: [Kiamal Solar Farm stage 1, "Kiamal Solar Farm \u2013 Stage 2"] + +Kidston_FFP: + location_type: project + location: Kidston + resource_type: solar_ffp + zone: Q2 + iasr_aliases: [Kidston Solar Farm] + +Lilyvale_SAT: + location_type: project + location: Lilyvale + resource_type: solar_sat + zone: Q4 + iasr_aliases: [Lilyvale Solar Farm] + +Limondale_One_SAT: + location_type: project + location: Limondale_One + resource_type: solar_sat + zone: N5 + iasr_aliases: [Limondale Solar Farm 1] + +Limondale_Two_SAT: + location_type: project + location: Limondale_Two + resource_type: solar_sat + zone: N5 + iasr_aliases: [Limondale Solar Farm 2] + +Lockhart_SAT: + location_type: project + location: Lockhart + resource_type: solar_sat + zone: N6 + iasr_aliases: [Lockhart Hybrid Facility - Solar] + +Longreach_SAT: + location_type: project + location: Longreach + resource_type: solar_sat + zone: Q5 + iasr_aliases: [Longreach Solar Farm] + +Manildra_SAT: + location_type: project + location: Manildra + resource_type: solar_sat + zone: N3 + iasr_aliases: [Manildra Solar Farm] + +Mannum-Adelaide_2_SAT: + location_type: project + location: Mannum-Adelaide_2 + resource_type: solar_sat + zone: S1 + iasr_aliases: [Mannum Adelaide Pumping Station No 2 - MAPL2 (Palmer)] + +Mannum-Adelaide_3_SAT: + location_type: project + location: Mannum-Adelaide_3 + resource_type: solar_sat + zone: S1 + iasr_aliases: [Mannum Adelaide Pumping Station No 3 - MAPL3 (Tungkillo)] + +Mannum_Two_SAT: + location_type: project + location: Mannum_Two + resource_type: solar_sat + zone: S2 + iasr_aliases: [Mannum Solar Farm 2] + +Maryrorough_SAT: + location_type: project + location: Maryrorough + resource_type: solar_sat + zone: Q8 + iasr_aliases: [Maryrorough Solar Farm] + +Metz_SAT: + location_type: project + location: Metz + resource_type: solar_sat + zone: N2 + iasr_aliases: [Metz Solar Farm] + +Middlemount_SAT: + location_type: project + location: Middlemount + resource_type: solar_sat + zone: Q4 + iasr_aliases: [Middlemount Solar Farm] + +Molong_SAT: + location_type: project + location: Molong + resource_type: solar_sat + zone: N3 + iasr_aliases: [Molong Solar Farm] + +Moree_SAT: + location_type: project + location: Moree + resource_type: solar_sat + zone: N1 + iasr_aliases: [Moree Solar Farm] + +Morgan-Whyalla_1_SAT: + location_type: project + location: Morgan-Whyalla_1 + resource_type: solar_sat + zone: S2 + iasr_aliases: [Morgan To Whyalla Pipeline No 1 PS And Water Filtration Plant] + +Morgan-Whyalla_2_SAT: + location_type: project + location: Morgan-Whyalla_2 + resource_type: solar_sat + zone: S2 + iasr_aliases: [Morgan To Whyalla Pipeline No 2 PS] + +Morgan-Whyalla_3_SAT: + location_type: project + location: Morgan-Whyalla_3 + resource_type: solar_sat + zone: S2 + iasr_aliases: [Morgan To Whyalla Pipeline No 3 PS] + +Morgan-Whyalla_4_SAT: + location_type: project + location: Morgan-Whyalla_4 + resource_type: solar_sat + zone: S2 + iasr_aliases: [Morgan To Whyalla Pipeline No 4 PS] + +Moura_SAT: + location_type: project + location: Moura + resource_type: solar_sat + zone: Q6 + iasr_aliases: [Moura Solar Farm] + +Murray_Bridge-Onkaparinga_2_SAT: + location_type: project + location: Murray_Bridge-Onkaparinga_2 + resource_type: solar_sat + zone: S1 + iasr_aliases: [Murray Bridge - Onkaparinga Pipeline Pump 2] + +Nevertire_SAT: + location_type: project + location: Nevertire + resource_type: solar_sat + zone: N3 + iasr_aliases: [Nevertire Solar Farm] + +New_England_SAT: + location_type: project + location: New_England + resource_type: solar_sat + zone: N2 + iasr_aliases: [New England Solar Farm, New England Solar Farm - stage 2] + +Numurkah_One_SAT: + location_type: project + location: Numurkah_One + resource_type: solar_sat + zone: V6 + iasr_aliases: [Numurkah Solar Farm] + +Nyngan_FFP: + location_type: project + location: Nyngan + resource_type: solar_ffp + zone: N3 + iasr_aliases: [Nyngan Solar Plant] + +Oakey_One_FFP: + location_type: project + location: Oakey_One + resource_type: solar_ffp + zone: Q8 + iasr_aliases: [Oakey 1 Solar Farm] + +Oakey_Two_SAT: + location_type: project + location: Oakey_Two + resource_type: solar_sat + zone: Q8 + iasr_aliases: [Oakey 2 Solar Farm] + +Parkes_SAT: + location_type: project + location: Parkes + resource_type: solar_sat + subregion: CNSW + iasr_aliases: [Parkes Solar Farm] + +Port_Augusta_FFP: + location_type: project + location: Port_Augusta + resource_type: solar_ffp + zone: S5 + iasr_aliases: [Port Augusta Renewable Energy Park - Solar] + +Quorn_Park_SAT: + location_type: project + location: Quorn_Park + resource_type: solar_sat + subregion: CNSW + iasr_aliases: [Quorn Park Solar Farm] + +Riverina_SAT: + location_type: project + location: Riverina + resource_type: solar_sat + subregion: SNSW + iasr_aliases: [Riverina Solar Farm] + +Ross_River_SAT: + location_type: project + location: Ross_River + resource_type: solar_sat + zone: Q3 + iasr_aliases: [Ross River Solar Farm] + +Rugby_Run_SAT: + location_type: project + location: Rugby_Run + resource_type: solar_sat + zone: Q4 + iasr_aliases: [Rugby Run Solar Farm] + +Sebastopol_SAT: + location_type: project + location: Sebastopol + resource_type: solar_sat + zone: N6 + iasr_aliases: [Sebastopol Solar Farm] + +Stubbo_SAT: + location_type: project + location: Stubbo + resource_type: solar_sat + zone: N3 + iasr_aliases: [Stubbo Solar Farm] + +Sun_Metals_FFP: + location_type: project + location: Sun_Metals + resource_type: solar_ffp + zone: Q3 + iasr_aliases: [Sun Metals Corporation Solar Farm] + +Sunraysia_SAT: + location_type: project + location: Sunraysia + resource_type: solar_sat + zone: N5 + iasr_aliases: [Sunraysia Solar Farm] + +Suntop_SAT: + location_type: project + location: Suntop + resource_type: solar_sat + zone: N3 + iasr_aliases: [Suntop Solar Farm] + +Susan_River_SAT: + location_type: project + location: Susan_River + resource_type: solar_sat + zone: Q7 + iasr_aliases: [Susan River Solar Farm] + +Tailem_Bend_FFP: + location_type: project + location: Tailem_Bend + resource_type: solar_ffp + subregion: CSA + iasr_aliases: [Tailem Bend Solar Farm] + +Tailem_Bend_Stage_Two_SAT: + location_type: project + location: Tailem_Bend_Stage_Two + resource_type: solar_sat + subregion: CSA + iasr_aliases: [Tailem Bend Solar Farm - stage 2] + +Tamworth_SAT: + location_type: project + location: Tamworth + resource_type: solar_sat + zone: N2 + iasr_aliases: [Tamworth Solar Farm] + +Tilbuster_SAT: + location_type: project + location: Tilbuster + resource_type: solar_sat + zone: N2 + iasr_aliases: [Tilbuster Solar Farm] + +Wagga_North_SAT: + location_type: project + location: Wagga_North + resource_type: solar_sat + zone: N6 + iasr_aliases: [Wagga North Solar Farm] + +Walla_Walla_SAT: + location_type: project + location: Walla_Walla + resource_type: solar_sat + subregion: SNSW + iasr_aliases: [Walla Walla Solar Farm] + +Wandoan_SAT: + location_type: project + location: Wandoan + resource_type: solar_sat + zone: Q8 + iasr_aliases: [Wandoan South Solar Farm - stage 1] + +Warwick_One_SAT: + location_type: project + location: Warwick_One + resource_type: solar_sat + zone: Q8 + iasr_aliases: [Warwick Solar Farm] + +Warwick_Two_SAT: + location_type: project + location: Warwick_Two + resource_type: solar_sat + zone: Q8 + iasr_aliases: [] + +Wellington_SAT: + location_type: project + location: Wellington + resource_type: solar_sat + zone: N3 + iasr_aliases: [Wellington Solar Farm] + +Wellington_North_SAT: + location_type: project + location: Wellington_North + resource_type: solar_sat + zone: N3 + iasr_aliases: [Wellington North Solar Farm (Lightsource)] + +Wemen_SAT: + location_type: project + location: Wemen + resource_type: solar_sat + zone: V2 + iasr_aliases: [Wemen Solar Farm] + +West_Wyalong_SAT: + location_type: project + location: West_Wyalong + resource_type: solar_sat + subregion: SNSW + iasr_aliases: [West Wyalong Solar Farm] + +Western_Downs_Hub_SAT: + location_type: project + location: Western_Downs_Hub + resource_type: solar_sat + zone: Q8 + iasr_aliases: [Western Downs Green Power Hub] + +White_Rock_FFP: + location_type: project + location: White_Rock + resource_type: solar_ffp + zone: N2 + iasr_aliases: [White Rock Solar Farm] + +Whitsunday_SAT: + location_type: project + location: Whitsunday + resource_type: solar_sat + zone: Q4 + iasr_aliases: [Whitsunday Solar Farm] + +Winton_SAT: + location_type: project + location: Winton + resource_type: solar_sat + zone: V6 + iasr_aliases: [Winton Solar Farm] + +Wollar_SAT: + location_type: project + location: Wollar + resource_type: solar_sat + subregion: CNSW + iasr_aliases: [Wollar Solar Farm] + +Woolooga_SAT: + location_type: project + location: Woolooga + resource_type: solar_sat + zone: Q7 + iasr_aliases: [Woolooga Solar Farm] + +Wunghnu_SAT: + location_type: project + location: Wunghnu + resource_type: solar_sat + subregion: VIC + iasr_aliases: [Wunghnu Solar Farm] + +Wyalong_SAT: + location_type: project + location: Wyalong + resource_type: solar_sat + subregion: SNSW + iasr_aliases: [Wyalong Solar Farm] + +Yarranlea_SAT: + location_type: project + location: Yarranlea + resource_type: solar_sat + zone: Q8 + iasr_aliases: [Yarranlea Solar Farm] + +Yatpool_SAT: + location_type: project + location: Yatpool + resource_type: solar_sat + zone: V2 + iasr_aliases: [Yatpool Solar Farm] + + +# --------------------------------------------------------------------------- +# Wind project traces. +# --------------------------------------------------------------------------- + +ARWF1: + location_type: project + location: ARWF1 + resource_type: wind + zone: V3 + iasr_aliases: [Ararat Wind Farm] + +BALDHWF1: + location_type: project + location: BALDHWF1 + resource_type: wind + subregion: VIC + iasr_aliases: [Bald Hills Wind Farm] + +BANGOWF1: + location_type: project + location: BANGOWF1 + resource_type: wind + subregion: SNSW + iasr_aliases: [Bango 973 Wind Farm] + +BANGOWF2: + location_type: project + location: BANGOWF2 + resource_type: wind + subregion: SNSW + iasr_aliases: [Bango 999 Wind Farm] + +BLUFF1: + location_type: project + location: BLUFF1 + resource_type: wind + zone: S3 + iasr_aliases: [Hallett 5 The Bluff Wind Farm] + +BOCORWF1: + location_type: project + location: BOCORWF1 + resource_type: wind + zone: N8 + iasr_aliases: [Boco Rock Wind Farm] + +BODWF1: + location_type: project + location: BODWF1 + resource_type: wind + zone: N3 + iasr_aliases: [Bodangora Wind Farm] + +BRYB1WF1: + location_type: project + location: BRYB1WF1 + resource_type: wind + zone: V4 + iasr_aliases: [Berrybank Wind Farm] + +BULGANA1: + location_type: project + location: BULGANA1 + resource_type: wind + zone: V3 + iasr_aliases: [Bulgana Green Power Hub - Wind Farm] + +CAPTL_WF: + location_type: project + location: CAPTL_WF + resource_type: wind + subregion: SNSW + iasr_aliases: [Capital Wind Farm] + +CATHROCK: + location_type: project + location: CATHROCK + resource_type: wind + zone: S8 + iasr_aliases: [Cathedral Rocks Wind Farm] + +CHALLHWF: + location_type: project + location: CHALLHWF + resource_type: wind + zone: V3 + iasr_aliases: [Challicum Hills Wind Farm] + +CHYTWF1: + location_type: project + location: CHYTWF1 + resource_type: wind + subregion: VIC + iasr_aliases: [Cherry Tree Wind Farm] + +CLEMGPWF: + location_type: project + location: CLEMGPWF + resource_type: wind + zone: S3 + iasr_aliases: [Clements Gap Wind Farm] + +CLRKCWF1: + location_type: project + location: CLRKCWF1 + resource_type: wind + zone: Q4 + iasr_aliases: [Clarke Creek Wind Farm] + +CLRKCWF2: + location_type: project + location: CLRKCWF2 + resource_type: wind + zone: Q4 + iasr_aliases: [Clarke Creek Wind Farm] + +CNUNDAWF: + location_type: project + location: CNUNDAWF + resource_type: wind + zone: S1 + iasr_aliases: [Canunda Wind Farm] + +COLWF01: + location_type: project + location: COLWF01 + resource_type: wind + subregion: SNSW + iasr_aliases: [Collector Wind Farm] + +COOPGWF1: + location_type: project + location: COOPGWF1 + resource_type: wind + zone: Q8 + iasr_aliases: [Coopers Gap Wind Farm] + +Coppabella: + location_type: project + location: Coppabella + resource_type: wind + zone: N7 + iasr_aliases: [Coppabella Wind Farm] + +CROOKWF2: + location_type: project + location: CROOKWF2 + resource_type: wind + subregion: SNSW + iasr_aliases: [Crookwell 2 Wind Farm] + +Crookwell_3: + location_type: project + location: Crookwell_3 + resource_type: wind + subregion: SNSW + iasr_aliases: [Crookwell 3 Wind Farm] + +CROWLWF1: + location_type: project + location: CROWLWF1 + resource_type: wind + zone: V3 + iasr_aliases: [Crowlands Wind Farm] + +CRURWF1: + location_type: project + location: CRURWF1 + resource_type: wind + subregion: CNSW + iasr_aliases: [Crudine Ridge Wind Farm] + +CTHLWF1: + location_type: project + location: CTHLWF1 + resource_type: wind + zone: T3 + iasr_aliases: [Cattle Hill Wind Farm] + +CULLRGWF: + location_type: project + location: CULLRGWF + resource_type: wind + subregion: SNSW + iasr_aliases: [Cullerin Range Wind Farm] + +DULAWF1: + location_type: project + location: DULAWF1 + resource_type: wind + zone: Q8 + iasr_aliases: [Dulacca Wind Farm] + +DUNDWF1: + location_type: project + location: DUNDWF1 + resource_type: wind + zone: V4 + iasr_aliases: [Dundonnell Wind Farm] + +DUNDWF2: + location_type: project + location: DUNDWF2 + resource_type: wind + zone: V4 + iasr_aliases: [Dundonnell Wind Farm] + +DUNDWF3: + location_type: project + location: DUNDWF3 + resource_type: wind + zone: V4 + iasr_aliases: [Dundonnell Wind Farm] + +ELAINWF1: + location_type: project + location: ELAINWF1 + resource_type: wind + zone: V3 + iasr_aliases: [Elaine Wind Farm] + +Flyers_Creek: + location_type: project + location: Flyers_Creek + resource_type: wind + zone: N3 + iasr_aliases: [Flyers Creek Wind Farm] + +Golden_Plains_East: + location_type: project + location: Golden_Plains_East + resource_type: wind + zone: V4 + iasr_aliases: [Golden Plains Wind Farm East] + +Goyder_South: + location_type: project + location: Goyder_South + resource_type: wind + zone: S3 + iasr_aliases: [Goyder South Wind Farm 1A, Goyder South Wind Farm 1B] + +GRANWF1: + location_type: project + location: GRANWF1 + resource_type: wind + zone: T2 + iasr_aliases: [Granville Harbour Wind Farm] + +GULLRWF1: + location_type: project + location: GULLRWF1 + resource_type: wind + subregion: SNSW + iasr_aliases: [Gullen Range Wind Farm] + +GULLRWF2: + location_type: project + location: GULLRWF2 + resource_type: wind + subregion: SNSW + iasr_aliases: [Gullen Range Wind Farm 2] + +GUNNING1: + location_type: project + location: GUNNING1 + resource_type: wind + subregion: SNSW + iasr_aliases: [Gunning Wind Farm] + +HALLWF1: + location_type: project + location: HALLWF1 + resource_type: wind + zone: S3 + iasr_aliases: [Hallett Stage 1 Brown Hill Wind Farm] + +HALLWF2: + location_type: project + location: HALLWF2 + resource_type: wind + zone: S3 + iasr_aliases: [Hallett Stage 2 Hallett Hill Wind Farm] + +Hawkesdale: + location_type: project + location: Hawkesdale + resource_type: wind + zone: V4 + iasr_aliases: [Hawkesdale Wind Farm] + +HDWF1: + location_type: project + location: HDWF1 + resource_type: wind + zone: S3 + iasr_aliases: [Hornsdale Wind Farm Stage 1] + +HDWF2: + location_type: project + location: HDWF2 + resource_type: wind + zone: S3 + iasr_aliases: [Hornsdale Wind Farm Stage 2] + +HDWF3: + location_type: project + location: HDWF3 + resource_type: wind + zone: S3 + iasr_aliases: [Hornsdale Wind Farm Stage 3] + +KABANWF1: + location_type: project + location: KABANWF1 + resource_type: wind + zone: Q1 + iasr_aliases: [Kaban Green Power Hub - Wind Farm] + +KEPWF1: + location_type: project + location: KEPWF1 + resource_type: wind + zone: Q2 + iasr_aliases: [Kennedy Energy Park Wind Farm] + +KIATAWF1: + location_type: project + location: KIATAWF1 + resource_type: wind + zone: V3 + iasr_aliases: [Kiata Wind Farm] + +LGAPWF1: + location_type: project + location: LGAPWF1 + resource_type: wind + zone: S5 + iasr_aliases: [Lincoln Gap Wind Farm - stage 1] + +LGAPWF2: + location_type: project + location: LGAPWF2 + resource_type: wind + zone: S5 + iasr_aliases: [Lincoln Gap Wind Farm - stage 2] + +LKBONNY1: + location_type: project + location: LKBONNY1 + resource_type: wind + zone: S1 + iasr_aliases: [Lake Bonney 1 Wind Farm] + +LKBONNY2: + location_type: project + location: LKBONNY2 + resource_type: wind + zone: S1 + iasr_aliases: [Lake Bonney 2 Wind Farm] + +LKBONNY3: + location_type: project + location: LKBONNY3 + resource_type: wind + zone: S1 + iasr_aliases: [Lake Bonney 3 Wind Farm] + +MACARTH1: + location_type: project + location: MACARTH1 + resource_type: wind + zone: V4 + iasr_aliases: [Macarthur Wind Farm] + +Macintyre: + location_type: project + location: Macintyre + resource_type: wind + zone: Q8 + iasr_aliases: [MacIntyre Wind Farm] + +MERCER01: + location_type: project + location: MERCER01 + resource_type: wind + zone: V3 + iasr_aliases: [Mt Mercer Wind Farm] + +MEWF1: + location_type: project + location: MEWF1 + resource_type: wind + zone: Q1 + iasr_aliases: [Mount Emerald Wind Farm] + +MLWF1: + location_type: project + location: MLWF1 + resource_type: wind + zone: V4 + iasr_aliases: [Mortons Lane Wind Farm] + +MOORAWF1: + location_type: project + location: MOORAWF1 + resource_type: wind + zone: V3 + iasr_aliases: [Moorabool Wind Farm] + +MRTLSWF1: + location_type: project + location: MRTLSWF1 + resource_type: wind + zone: V4 + iasr_aliases: [Mortlake South Wind Farm] + +MTGELWF1: + location_type: project + location: MTGELWF1 + resource_type: wind + zone: V4 + iasr_aliases: [Mt Gellibrand Wind Farm] + +MTMILLAR: + location_type: project + location: MTMILLAR + resource_type: wind + zone: S8 + iasr_aliases: [Mount Millar Wind Farm] + +MUSSELR1: + location_type: project + location: MUSSELR1 + resource_type: wind + subregion: TAS + iasr_aliases: [Musselroe Wind Farm] + +MUWAWF1: + location_type: project + location: MUWAWF1 + resource_type: wind + zone: V3 + iasr_aliases: [Murra Warra Wind Farm - stage 1] + +MUWAWF2: + location_type: project + location: MUWAWF2 + resource_type: wind + zone: V3 + iasr_aliases: [Murra Warra Wind Farm - stage 2] + +NBHWF1: + location_type: project + location: NBHWF1 + resource_type: wind + zone: S3 + iasr_aliases: [Hallett 4 North Brown Hill Wind Farm] + +OAKLAND1: + location_type: project + location: OAKLAND1 + resource_type: wind + zone: V4 + iasr_aliases: [Oaklands Hill Wind Farm] + +PAREPW1: + location_type: project + location: PAREPW1 + resource_type: wind + zone: S5 + iasr_aliases: [Port Augusta Renewable Energy Park - Wind] + +PORTWF: + location_type: project + location: PORTWF + resource_type: wind + zone: V4 + iasr_aliases: [Portland Wind Farm] + +Ryan_Corner: + location_type: project + location: Ryan_Corner + resource_type: wind + zone: V4 + iasr_aliases: [Ryan Corner Wind Farm] + +Rye_Park: + location_type: project + location: Rye_Park + resource_type: wind + subregion: SNSW + iasr_aliases: [Rye Park Wind Farm] + +SALTCRK1: + location_type: project + location: SALTCRK1 + resource_type: wind + zone: V4 + iasr_aliases: [Salt Creek Wind Farm] + +SAPHWF1: + location_type: project + location: SAPHWF1 + resource_type: wind + zone: N2 + iasr_aliases: [Sapphire Wind Farm] + +SNOWNTH1: + location_type: project + location: SNOWNTH1 + resource_type: wind + zone: S3 + iasr_aliases: [Snowtown S2 Wind Farm] + +SNOWSTH1: + location_type: project + location: SNOWSTH1 + resource_type: wind + zone: S3 + iasr_aliases: [Snowtown S2 Wind Farm] + +SNOWTWN1: + location_type: project + location: SNOWTWN1 + resource_type: wind + zone: S3 + iasr_aliases: [Snowtown Wind Farm] + +STARHLWF: + location_type: project + location: STARHLWF + resource_type: wind + subregion: CSA + iasr_aliases: [Starfish Hill Wind Farm] + +STOCKYD1: + location_type: project + location: STOCKYD1 + resource_type: wind + zone: V4 + iasr_aliases: [Stockyard Hill Wind Farm] + +STWF1: + location_type: project + location: STWF1 + resource_type: wind + zone: N4 + iasr_aliases: [Silverton Wind Farm] + +TARALGA1: + location_type: project + location: TARALGA1 + resource_type: wind + subregion: SNSW + iasr_aliases: [Taralga Wind Farm] + +Uungula: + location_type: project + location: Uungula + resource_type: wind + zone: N3 + iasr_aliases: [Uungula Wind Farm] + +Wambo: + location_type: project + location: Wambo + resource_type: wind + zone: Q8 + iasr_aliases: [Wambo Wind Farm] + +WATERLWF: + location_type: project + location: WATERLWF + resource_type: wind + zone: S3 + iasr_aliases: [Waterloo Wind Farm] + +WAUBRAWF: + location_type: project + location: WAUBRAWF + resource_type: wind + zone: V3 + iasr_aliases: [Waubra Wind Farm] + +WGWF1: + location_type: project + location: WGWF1 + resource_type: wind + zone: S3 + iasr_aliases: [Willogoleche Wind Farm] + +WOODLWN1: + location_type: project + location: WOODLWN1 + resource_type: wind + subregion: SNSW + iasr_aliases: [Woodlawn Wind Farm] + +WOOLNTH1: + location_type: project + location: WOOLNTH1 + resource_type: wind + subregion: TAS + iasr_aliases: [Woolnorth Wind Farm] + +Woolsthorpe: + location_type: project + location: Woolsthorpe + resource_type: wind + zone: V4 + iasr_aliases: [Woolsthorpe Wind Farm] + +WPWF: + location_type: project + location: WPWF + resource_type: wind + zone: S4 + iasr_aliases: [Wattle Point Wind Farm] + +WRWF1: + location_type: project + location: WRWF1 + resource_type: wind + zone: N2 + iasr_aliases: [White Rock Wind Farm - Stage 1] + +YAMBUKWF: + location_type: project + location: YAMBUKWF + resource_type: wind + zone: V4 + iasr_aliases: [Yambuk Wind Farm] + +YENDWF1: + location_type: project + location: YENDWF1 + resource_type: wind + zone: V3 + iasr_aliases: [Yendon Wind Farm] + +YSWF1: + location_type: project + location: YSWF1 + resource_type: wind + zone: V3 + iasr_aliases: [Yaloak South Wind Farm] + + +# --------------------------------------------------------------------------- +# Zone-level solar traces. +# --------------------------------------------------------------------------- + +REZ_N0_NSW_Non-REZ_SAT: + location_type: zone + location: N0 + resource_type: solar_sat + iasr_aliases: [] + +REZ_N0_NSW_Non-REZ_CST: + location_type: zone + location: N0 + resource_type: solar_cst + iasr_aliases: [] + +REZ_N1_North_West_NSW_SAT: + location_type: zone + location: N1 + resource_type: solar_sat + iasr_aliases: [] + +REZ_N1_North_West_NSW_CST: + location_type: zone + location: N1 + resource_type: solar_cst + iasr_aliases: [] + +REZ_N2_New_England_SAT: + location_type: zone + location: N2 + resource_type: solar_sat + iasr_aliases: [] + +REZ_N2_New_England_CST: + location_type: zone + location: N2 + resource_type: solar_cst + iasr_aliases: [] + +REZ_N3_Central-West_Orana_SAT: + location_type: zone + location: N3 + resource_type: solar_sat + iasr_aliases: [] + +REZ_N3_Central-West_Orana_CST: + location_type: zone + location: N3 + resource_type: solar_cst + iasr_aliases: [] + +REZ_N4_Broken_Hill_SAT: + location_type: zone + location: N4 + resource_type: solar_sat + iasr_aliases: [] + +REZ_N4_Broken_Hill_CST: + location_type: zone + location: N4 + resource_type: solar_cst + iasr_aliases: [] + +REZ_N5_South_West_NSW_SAT: + location_type: zone + location: N5 + resource_type: solar_sat + iasr_aliases: [] + +REZ_N5_South_West_NSW_CST: + location_type: zone + location: N5 + resource_type: solar_cst + iasr_aliases: [] + +REZ_N6_Wagga_Wagga_SAT: + location_type: zone + location: N6 + resource_type: solar_sat + iasr_aliases: [] + +REZ_N6_Wagga_Wagga_CST: + location_type: zone + location: N6 + resource_type: solar_cst + iasr_aliases: [] + +REZ_N7_Tumut_SAT: + location_type: zone + location: N7 + resource_type: solar_sat + iasr_aliases: [] + +REZ_N7_Tumut_CST: + location_type: zone + location: N7 + resource_type: solar_cst + iasr_aliases: [] + +REZ_N8_Cooma-Monaro_SAT: + location_type: zone + location: N8 + resource_type: solar_sat + iasr_aliases: [] + +REZ_N8_Cooma-Monaro_CST: + location_type: zone + location: N8 + resource_type: solar_cst + iasr_aliases: [] + +REZ_N9_Hunter-Central_Coast_SAT: + location_type: zone + location: N9 + resource_type: solar_sat + iasr_aliases: [] + +REZ_N9_Hunter-Central_Coast_CST: + location_type: zone + location: N9 + resource_type: solar_cst + iasr_aliases: [] + +REZ_V0_VIC_Non-REZ_SAT: + location_type: zone + location: V0 + resource_type: solar_sat + iasr_aliases: [] + +REZ_V0_VIC_Non-REZ_CST: + location_type: zone + location: V0 + resource_type: solar_cst + iasr_aliases: [] + +REZ_V1_Ovens_Murray_SAT: + location_type: zone + location: V1 + resource_type: solar_sat + iasr_aliases: [] + +REZ_V1_Ovens_Murray_CST: + location_type: zone + location: V1 + resource_type: solar_cst + iasr_aliases: [] + +REZ_V2_Murray_River_SAT: + location_type: zone + location: V2 + resource_type: solar_sat + iasr_aliases: [] + +REZ_V2_Murray_River_CST: + location_type: zone + location: V2 + resource_type: solar_cst + iasr_aliases: [] + +REZ_V3_Western_Victoria_SAT: + location_type: zone + location: V3 + resource_type: solar_sat + iasr_aliases: [] + +REZ_V3_Western_Victoria_CST: + location_type: zone + location: V3 + resource_type: solar_cst + iasr_aliases: [] + +REZ_V4_South_West_Victoria_SAT: + location_type: zone + location: V4 + resource_type: solar_sat + iasr_aliases: [] + +REZ_V4_South_West_Victoria_CST: + location_type: zone + location: V4 + resource_type: solar_cst + iasr_aliases: [] + +REZ_V5_Gippsland_SAT: + location_type: zone + location: V5 + resource_type: solar_sat + iasr_aliases: [] + +REZ_V5_Gippsland_CST: + location_type: zone + location: V5 + resource_type: solar_cst + iasr_aliases: [] + +REZ_V6_Central_North_Vic_SAT: + location_type: zone + location: V6 + resource_type: solar_sat + iasr_aliases: [] + +REZ_V6_Central_North_Vic_CST: + location_type: zone + location: V6 + resource_type: solar_cst + iasr_aliases: [] + +REZ_Q1_Far_North_QLD_SAT: + location_type: zone + location: Q1 + resource_type: solar_sat + iasr_aliases: [] + +REZ_Q1_Far_North_QLD_CST: + location_type: zone + location: Q1 + resource_type: solar_cst + iasr_aliases: [] + +REZ_Q2_North_Qld_Clean_Energy_Hub_SAT: + location_type: zone + location: Q2 + resource_type: solar_sat + iasr_aliases: [] + +REZ_Q2_North_Qld_Clean_Energy_Hub_CST: + location_type: zone + location: Q2 + resource_type: solar_cst + iasr_aliases: [] + +REZ_Q3_Northern_Qld_SAT: + location_type: zone + location: Q3 + resource_type: solar_sat + iasr_aliases: [] + +REZ_Q3_Northern_Qld_CST: + location_type: zone + location: Q3 + resource_type: solar_cst + iasr_aliases: [] + +REZ_Q4_Isaac_SAT: + location_type: zone + location: Q4 + resource_type: solar_sat + iasr_aliases: [] + +REZ_Q4_Isaac_CST: + location_type: zone + location: Q4 + resource_type: solar_cst + iasr_aliases: [] + +REZ_Q5_Barcaldine_SAT: + location_type: zone + location: Q5 + resource_type: solar_sat + iasr_aliases: [] + +REZ_Q5_Barcaldine_CST: + location_type: zone + location: Q5 + resource_type: solar_cst + iasr_aliases: [] + +REZ_Q6_Fitzroy_SAT: + location_type: zone + location: Q6 + resource_type: solar_sat + iasr_aliases: [] + +REZ_Q6_Fitzroy_CST: + location_type: zone + location: Q6 + resource_type: solar_cst + iasr_aliases: [] + +REZ_Q7_Wide_Bay_SAT: + location_type: zone + location: Q7 + resource_type: solar_sat + iasr_aliases: [] + +REZ_Q7_Wide_Bay_CST: + location_type: zone + location: Q7 + resource_type: solar_cst + iasr_aliases: [] + +REZ_Q8_Darling_Downs_SAT: + location_type: zone + location: Q8 + resource_type: solar_sat + iasr_aliases: [] + +REZ_Q8_Darling_Downs_CST: + location_type: zone + location: Q8 + resource_type: solar_cst + iasr_aliases: [] + +REZ_Q9_Banana_SAT: + location_type: zone + location: Q9 + resource_type: solar_sat + iasr_aliases: [] + +REZ_Q9_Banana_CST: + location_type: zone + location: Q9 + resource_type: solar_cst + iasr_aliases: [] + +REZ_S1_South_East_SA_SAT: + location_type: zone + location: S1 + resource_type: solar_sat + iasr_aliases: [] + +REZ_S1_South_East_SA_CST: + location_type: zone + location: S1 + resource_type: solar_cst + iasr_aliases: [] + +REZ_S2_Riverland_SAT: + location_type: zone + location: S2 + resource_type: solar_sat + iasr_aliases: [] + +REZ_S2_Riverland_CST: + location_type: zone + location: S2 + resource_type: solar_cst + iasr_aliases: [] + +REZ_S3_Mid-North_SA_SAT: + location_type: zone + location: S3 + resource_type: solar_sat + iasr_aliases: [] + +REZ_S3_Mid-North_SA_CST: + location_type: zone + location: S3 + resource_type: solar_cst + iasr_aliases: [] + +REZ_S4_Yorke_Peninsula_SAT: + location_type: zone + location: S4 + resource_type: solar_sat + iasr_aliases: [] + +REZ_S4_Yorke_Peninsula_CST: + location_type: zone + location: S4 + resource_type: solar_cst + iasr_aliases: [] + +REZ_S5_Northern_SA_SAT: + location_type: zone + location: S5 + resource_type: solar_sat + iasr_aliases: [] + +REZ_S5_Northern_SA_CST: + location_type: zone + location: S5 + resource_type: solar_cst + iasr_aliases: [] + +REZ_S6_Leigh_Creek_SAT: + location_type: zone + location: S6 + resource_type: solar_sat + iasr_aliases: [] + +REZ_S6_Leigh_Creek_CST: + location_type: zone + location: S6 + resource_type: solar_cst + iasr_aliases: [] + +REZ_S7_Roxby_Downs_SAT: + location_type: zone + location: S7 + resource_type: solar_sat + iasr_aliases: [] + +REZ_S7_Roxby_Downs_CST: + location_type: zone + location: S7 + resource_type: solar_cst + iasr_aliases: [] + +REZ_S8_Eastern_Eyre_Peninsula_SAT: + location_type: zone + location: S8 + resource_type: solar_sat + iasr_aliases: [] + +REZ_S8_Eastern_Eyre_Peninsula_CST: + location_type: zone + location: S8 + resource_type: solar_cst + iasr_aliases: [] + +REZ_S9_Western_Eyre_Peninsula_SAT: + location_type: zone + location: S9 + resource_type: solar_sat + iasr_aliases: [] + +REZ_S9_Western_Eyre_Peninsula_CST: + location_type: zone + location: S9 + resource_type: solar_cst + iasr_aliases: [] + +REZ_T1_North_East_Tasmania_SAT: + location_type: zone + location: T1 + resource_type: solar_sat + iasr_aliases: [] + +REZ_T1_North_East_Tasmania_CST: + location_type: zone + location: T1 + resource_type: solar_cst + iasr_aliases: [] + +REZ_T2_North_West_Tasmania_SAT: + location_type: zone + location: T2 + resource_type: solar_sat + iasr_aliases: [] + +REZ_T2_North_West_Tasmania_CST: + location_type: zone + location: T2 + resource_type: solar_cst + iasr_aliases: [] + +REZ_T3_Central_Highlands_SAT: + location_type: zone + location: T3 + resource_type: solar_sat + iasr_aliases: [] + +REZ_T3_Central_Highlands_CST: + location_type: zone + location: T3 + resource_type: solar_cst + iasr_aliases: [] + + +# --------------------------------------------------------------------------- +# Zone-level wind traces. +# --------------------------------------------------------------------------- + +N0_WH_NSW_Non-REZ: + location_type: zone + location: N0 + resource_type: wind_high + iasr_aliases: [] + +N0_WM_NSW_Non-REZ: + location_type: zone + location: N0 + resource_type: wind_medium + iasr_aliases: [] + +N1_WH_North_West_NSW: + location_type: zone + location: N1 + resource_type: wind_high + iasr_aliases: [] + +N1_WM_North_West_NSW: + location_type: zone + location: N1 + resource_type: wind_medium + iasr_aliases: [] + +N2_WH_New_England: + location_type: zone + location: N2 + resource_type: wind_high + iasr_aliases: [] + +N2_WM_New_England: + location_type: zone + location: N2 + resource_type: wind_medium + iasr_aliases: [] + +N3_WH_Central-West_Orana: + location_type: zone + location: N3 + resource_type: wind_high + iasr_aliases: [] + +N3_WM_Central-West_Orana: + location_type: zone + location: N3 + resource_type: wind_medium + iasr_aliases: [] + +N4_WH_Broken_Hill: + location_type: zone + location: N4 + resource_type: wind_high + iasr_aliases: [] + +N4_WM_Broken_Hill: + location_type: zone + location: N4 + resource_type: wind_medium + iasr_aliases: [] + +N5_WH_South_West_NSW: + location_type: zone + location: N5 + resource_type: wind_high + iasr_aliases: [] + +N5_WM_South_West_NSW: + location_type: zone + location: N5 + resource_type: wind_medium + iasr_aliases: [] + +N6_WH_Wagga_Wagga: + location_type: zone + location: N6 + resource_type: wind_high + iasr_aliases: [] + +N6_WM_Wagga_Wagga: + location_type: zone + location: N6 + resource_type: wind_medium + iasr_aliases: [] + +N7_WH_Tumut: + location_type: zone + location: N7 + resource_type: wind_high + iasr_aliases: [] + +N7_WM_Tumut: + location_type: zone + location: N7 + resource_type: wind_medium + iasr_aliases: [] + +N8_WH_Cooma-Monaro: + location_type: zone + location: N8 + resource_type: wind_high + iasr_aliases: [] + +N8_WM_Cooma-Monaro: + location_type: zone + location: N8 + resource_type: wind_medium + iasr_aliases: [] + +N9_WH_Hunter-Central_Coast: + location_type: zone + location: N9 + resource_type: wind_high + iasr_aliases: [] + +N9_WM_Hunter-Central_Coast: + location_type: zone + location: N9 + resource_type: wind_medium + iasr_aliases: [] + +N10_WFL_Hunter_Coast: + location_type: zone + location: N10 + resource_type: wind_offshore_floating + iasr_aliases: [] + +N10_WFX_Hunter_Coast: + location_type: zone + location: N10 + resource_type: wind_offshore_fixed + iasr_aliases: [] + +N11_WFL_Illawarra_Coast: + location_type: zone + location: N11 + resource_type: wind_offshore_floating + iasr_aliases: [] + +N11_WFX_Illawarra_Coast: + location_type: zone + location: N11 + resource_type: wind_offshore_fixed + iasr_aliases: [] + +V0_WH_VIC_Non-REZ: + location_type: zone + location: V0 + resource_type: wind_high + iasr_aliases: [] + +V0_WM_VIC_Non-REZ: + location_type: zone + location: V0 + resource_type: wind_medium + iasr_aliases: [] + +V1_WH_Ovens_Murray: + location_type: zone + location: V1 + resource_type: wind_high + iasr_aliases: [] + +V1_WM_Ovens_Murray: + location_type: zone + location: V1 + resource_type: wind_medium + iasr_aliases: [] + +V2_WH_Murray_River: + location_type: zone + location: V2 + resource_type: wind_high + iasr_aliases: [] + +V2_WM_Murray_River: + location_type: zone + location: V2 + resource_type: wind_medium + iasr_aliases: [] + +V3_WH_Western_Victoria: + location_type: zone + location: V3 + resource_type: wind_high + iasr_aliases: [] + +V3_WM_Western_Victoria: + location_type: zone + location: V3 + resource_type: wind_medium + iasr_aliases: [] + +V4_WH_South_West_Victoria: + location_type: zone + location: V4 + resource_type: wind_high + iasr_aliases: [] + +V4_WM_South_West_Victoria: + location_type: zone + location: V4 + resource_type: wind_medium + iasr_aliases: [] + +V5_WH_Gippsland: + location_type: zone + location: V5 + resource_type: wind_high + iasr_aliases: [] + +V5_WM_Gippsland: + location_type: zone + location: V5 + resource_type: wind_medium + iasr_aliases: [] + +V6_WH_Central_North_Vic: + location_type: zone + location: V6 + resource_type: wind_high + iasr_aliases: [] + +V6_WM_Central_North_Vic: + location_type: zone + location: V6 + resource_type: wind_medium + iasr_aliases: [] + +V7_WFL_Gippsland_Coast: + location_type: zone + location: V7 + resource_type: wind_offshore_floating + iasr_aliases: [] + +V7_WFX_Gippsland_Coast: + location_type: zone + location: V7 + resource_type: wind_offshore_fixed + iasr_aliases: [] + +V8_WFL_Portland_Coast: + location_type: zone + location: V8 + resource_type: wind_offshore_floating + iasr_aliases: [] + +V8_WFX_Portland_Coast: + location_type: zone + location: V8 + resource_type: wind_offshore_fixed + iasr_aliases: [] + +Q1_WH_Far_North_QLD: + location_type: zone + location: Q1 + resource_type: wind_high + iasr_aliases: [] + +Q1_WM_Far_North_QLD: + location_type: zone + location: Q1 + resource_type: wind_medium + iasr_aliases: [] + +Q2_WH_North_Qld_Clean_Energy_Hub: + location_type: zone + location: Q2 + resource_type: wind_high + iasr_aliases: [] + +Q2_WM_North_Qld_Clean_Energy_Hub: + location_type: zone + location: Q2 + resource_type: wind_medium + iasr_aliases: [] + +Q3_WH_Northern_Qld: + location_type: zone + location: Q3 + resource_type: wind_high + iasr_aliases: [] + +Q3_WM_Northern_Qld: + location_type: zone + location: Q3 + resource_type: wind_medium + iasr_aliases: [] + +Q4_WH_Isaac: + location_type: zone + location: Q4 + resource_type: wind_high + iasr_aliases: [] + +Q4_WM_Isaac: + location_type: zone + location: Q4 + resource_type: wind_medium + iasr_aliases: [] + +Q5_WH_Barcaldine: + location_type: zone + location: Q5 + resource_type: wind_high + iasr_aliases: [] + +Q5_WM_Barcaldine: + location_type: zone + location: Q5 + resource_type: wind_medium + iasr_aliases: [] + +Q6_WH_Fitzroy: + location_type: zone + location: Q6 + resource_type: wind_high + iasr_aliases: [] + +Q6_WM_Fitzroy: + location_type: zone + location: Q6 + resource_type: wind_medium + iasr_aliases: [] + +Q7_WH_Wide_Bay: + location_type: zone + location: Q7 + resource_type: wind_high + iasr_aliases: [] + +Q7_WM_Wide_Bay: + location_type: zone + location: Q7 + resource_type: wind_medium + iasr_aliases: [] + +Q8_WH_Darling_Downs: + location_type: zone + location: Q8 + resource_type: wind_high + iasr_aliases: [] + +Q8_WM_Darling_Downs: + location_type: zone + location: Q8 + resource_type: wind_medium + iasr_aliases: [] + +Q9_WH_Banana: + location_type: zone + location: Q9 + resource_type: wind_high + iasr_aliases: [] + +Q9_WM_Banana: + location_type: zone + location: Q9 + resource_type: wind_medium + iasr_aliases: [] + +S1_WH_South_East_SA: + location_type: zone + location: S1 + resource_type: wind_high + iasr_aliases: [] + +S1_WM_South_East_SA: + location_type: zone + location: S1 + resource_type: wind_medium + iasr_aliases: [] + +S2_WH_Riverland: + location_type: zone + location: S2 + resource_type: wind_high + iasr_aliases: [] + +S2_WM_Riverland: + location_type: zone + location: S2 + resource_type: wind_medium + iasr_aliases: [] + +S3_WH_Mid-North_SA: + location_type: zone + location: S3 + resource_type: wind_high + iasr_aliases: [] + +S3_WM_Mid-North_SA: + location_type: zone + location: S3 + resource_type: wind_medium + iasr_aliases: [] + +S4_WH_Yorke_Peninsula: + location_type: zone + location: S4 + resource_type: wind_high + iasr_aliases: [] + +S4_WM_Yorke_Peninsula: + location_type: zone + location: S4 + resource_type: wind_medium + iasr_aliases: [] + +S5_WH_Northern_SA: + location_type: zone + location: S5 + resource_type: wind_high + iasr_aliases: [] + +S5_WM_Northern_SA: + location_type: zone + location: S5 + resource_type: wind_medium + iasr_aliases: [] + +S6_WH_Leigh_Creek: + location_type: zone + location: S6 + resource_type: wind_high + iasr_aliases: [] + +S6_WM_Leigh_Creek: + location_type: zone + location: S6 + resource_type: wind_medium + iasr_aliases: [] + +S7_WH_Roxby_Downs: + location_type: zone + location: S7 + resource_type: wind_high + iasr_aliases: [] + +S7_WM_Roxby_Downs: + location_type: zone + location: S7 + resource_type: wind_medium + iasr_aliases: [] + +S8_WH_Eastern_Eyre_Peninsula: + location_type: zone + location: S8 + resource_type: wind_high + iasr_aliases: [] + +S8_WM_Eastern_Eyre_Peninsula: + location_type: zone + location: S8 + resource_type: wind_medium + iasr_aliases: [] + +S9_WH_Western_Eyre_Peninsula: + location_type: zone + location: S9 + resource_type: wind_high + iasr_aliases: [] + +S9_WM_Western_Eyre_Peninsula: + location_type: zone + location: S9 + resource_type: wind_medium + iasr_aliases: [] + +S10_WFL_South_East_SA_Coast: + location_type: zone + location: S10 + resource_type: wind_offshore_floating + iasr_aliases: [] + +S10_WFX_South_East_SA_Coast: + location_type: zone + location: S10 + resource_type: wind_offshore_fixed + iasr_aliases: [] + +T1_WH_North-East_Tasmania: + location_type: zone + location: T1 + resource_type: wind_high + iasr_aliases: [] + +T1_WM_North-East_Tasmania: + location_type: zone + location: T1 + resource_type: wind_medium + iasr_aliases: [] + +T2_WH_North-West_Tasmania: + location_type: zone + location: T2 + resource_type: wind_high + iasr_aliases: [] + +T2_WM_North-West_Tasmania: + location_type: zone + location: T2 + resource_type: wind_medium + iasr_aliases: [] + +T3_WH_Central_Highlands: + location_type: zone + location: T3 + resource_type: wind_high + iasr_aliases: [] + +T3_WM_Central_Highlands: + location_type: zone + location: T3 + resource_type: wind_medium + iasr_aliases: [] + +T4_WFL_North_West_Tasmania_Coast: + location_type: zone + location: T4 + resource_type: wind_offshore_floating + iasr_aliases: [] + +T4_WFX_North_West_Tasmania_Coast: + location_type: zone + location: T4 + resource_type: wind_offshore_fixed + iasr_aliases: [] + +T5_WFL_North_East_Tasmania_Coast: + location_type: zone + location: T5 + resource_type: wind_offshore_floating + iasr_aliases: [] + +T5_WFX_North_East_Tasmania_Coast: + location_type: zone + location: T5 + resource_type: wind_offshore_fixed + iasr_aliases: [] From d9a177ae31dea38f1a1ec0bf060a340c1524bf5c Mon Sep 17 00:00:00 2001 From: Dylan McConnell Date: Thu, 28 May 2026 10:40:57 +1000 Subject: [PATCH 08/12] Added ADR on new mapping (explains rationale for change, options considered etc) --- docs/adr/001-trace-name-mapping.md | 317 +++++++++++++++++++++++++++++ 1 file changed, 317 insertions(+) create mode 100644 docs/adr/001-trace-name-mapping.md diff --git a/docs/adr/001-trace-name-mapping.md b/docs/adr/001-trace-name-mapping.md new file mode 100644 index 0000000..358f308 --- /dev/null +++ b/docs/adr/001-trace-name-mapping.md @@ -0,0 +1,317 @@ +# ADR-001: Trace name mapping convention + +## Status + +Proposed — 2026-05-28 + +Would supersede the implicit conventions encoded in `metadata_extractors.py` and +the split solar/wind × project/zone YAML files under `src/isp_trace_parser/mappings/`. + +This ADR *only* relates to format of trace *mapping* data - not it's downstream use (e.g. filtering, creating hive partitioned data, etc - though those uses kept in mind while developing this ) + +## Context + +The 2026 ISP trace data introduces new filename patterns (DREZs, Distributed Resources, split Q8 zones - see issue #36) that the existing regex-based metadata extractors +misclassify (issue #40). + +Updating / integrating these new traces presents an opportunity to streamline and improve the current approach. + +Characteristics of the current approach: + +- **Filename reconstruction in code.** Metadata is extracted from input filenames via regex, then output filenames are reconstructed from that metadata. Every new AEMO filename pattern requires a regex change. +- **Partial mapping also exits:** Mapping does exist, but for trace names to IASR names only) + - **Four mapping files per ISP version.** `solar_project_mapping.yaml`,`wind_project_mapping.yaml`, `solar_zone_mapping.yaml`,`wind_zone_mapping.yaml` (each with its own conventions - and the zone_maps being largely redundant) + - (**Coupling to IASR naming.** - downstream issue, but parsed output filenames are rewritten to IASR conventions, which couples) +- **Project/zone split.** The parser distinguishes "project" (named generator) from "zone" (REZ) traces, but the CSVs are all co-located in a single folder per reference year (the distinction is also re-derived from filename shape). +- **Silent misclassification & misses classificiation.** Some patterns match + *any* `*_RefYear.csv`, so unrecognised filenames silently fall + through with `file_type="project"`, `resource_type="WIND"` (see # issue 36). Some trace + +### Issues with current approach and new data: +1) The 2026 data includes new that don't fit the project/zone split cleanly: Distributed Resources are at ISP subregion resolution; DREZs are REZ-like but distinct. + +2) AEMO's conventions also differ across ISP versions: + - **ISP-2024**: no formal IASR identifier. Generators are referred to by a human-readable name (e.g. `"Bango 973 Wind Farm"`). + - **ISP-2026**: introduces a formal IASR ID, in addition to the human-readable name. + +- 3) Maintaining regex patterns that work across multiple / new AEMO formats sound like a literal nightmare (noting that we will continue to get updated traces in the future) + +- 4) Maintaining 4 resource maps per ISP also annoying (noting that IASR ID doesn't exist for 2024 ISP, and the mappings are already not internally consistent structures anyway) + +We already do (partial) mapping with - this ADR proposes a full ***explicit*** mapping for each ISP (or source) version + +This ADR sets out proposed mapping convention for ISP traces. ISP-2024 will be migrated to the same convention first. This is done for backwards compatability - but actually mainly because of testing and incremental implementation (i.e. there is no existing tests / safeguards for just trying on the 2026 data) + +## Decision + +### 1. One mapping file per ISP version, per concern + +``` +src/isp_trace_parser/mappings/ +├── 2024/ +│ ├── resources.yaml +│ ├── demand.yaml +│ └── topography.yaml +├── 2026/ +│ ├── resources.yaml +│ ├── demand.yaml +│ └── topography.yaml +``` + +Three files per version, regardless of technology or geographic resolution. The project/zone split is removed; the solar/wind split is removed. Technology and location-type are carried as fields on each entry in the yaml (see below). + +Add includes a separate topographic hierarchy (region → subregion → zone) into `topography.yaml`. ( rationale discuss below) + +### 2. Resources YAML: trace-stem-keyed, IASR aliases as values + +```yaml +# mappings/2026/resources.yaml + +BLUFF1: + location_type: project + location: BLUFF1 + resource_type: wind + zone: S3 # required: topography doesn't track projects + iasr_aliases: ["Hallett 5 The Bluff Wind Farm"] + +Coleambally_SAT: + location_type: project + location: Coleambally + resource_type: solar_sat + subregion: SNSW # no formal REZ- subregion is the tightest known parent + iasr_aliases: ["Coleambally Solar Farm"] + +Walla_Walla_SAT: + location_type: project + location: Walla_Walla + resource_type: solar_sat + subregion: SNSW + iasr_aliases: ['WLWLSF1', 'WLWLSF2'] # many IASR identifiers share one trace file + +REZ_N6_Wagga_Wagga_CST: + location_type: zone + location: N6 # no `zone:` - parent subregion resolved via topography + resource_type: solar_cst + iasr_aliases: [] # no IASR id / generator equivalent in 2024 IASR + + +# example of many traces feed one IASR name +CLRKCWF1: + location_type: project + location: CLRKCWF1 + resource_type: wind + zone: Q4 + iasr_aliases: ["Clarke Creek Wind Farm"] + +CLRKCWF2: + location_type: project + location: CLRKCWF2 + resource_type: wind + zone: Q4 + iasr_aliases: ["Clarke Creek Wind Farm"] +``` + +**Key:** the trace filename stem (the part before `_RefYear.csv`), including any resource_type suffix. + +**Filename convention assumption.** This ADR assumes AEMO's `_RefYear.csv` filename pattern. + +The parser would extract `reference_year` by a single `rpartition("_RefYear")`split; everything else comes from the mapping. If AEMO happened to changes the refyear convention in a future ISP release this function helper needs updating in one place (but the mapping itself is unaffected) + +**Fields:** + +| Field | Required | Allowed values | +| --------------- | ----------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `location_type` | yes | `project`, `zone` (`drez`), `subregion`, | +| `location` | yes | Llocation identifier, distinct from the trace-stem key. For `project`, the bare project name (e.g. `Coleambally`); for `zone`/`drez`, the zone code (e.g. `N6`); for `subregion`, the subregion code (e.g. `SNSW`). | +| `resource_type` | yes | strings: `wind`, `wind_high`, `wind_medium`, `solar_sat`, `solar_cst`, `solar_ffp`, … | +| `zone` | conditional | REZ code from `topography.yaml`.
Set `zone` when the project sits inside a formal REZ.
Omitted on `zone`/`drez`/`subregion` entries. | +| `subregion` | conditional | ISP subregion code from `topography.yaml`.
Set on a `project` entry **only when** the project lies outside any formal REZ
Omitted on `zone`/`drez`/`subregion` entries. | +| `iasr_aliases` | yes (may be `[]`) | list of identifiers under which this trace is known in IASR/external sources | + +### Notes: + +1) **Asymmetric parent storage.** Only `project` entries carry an explicit parent (`zone:` or `subregion:`, whichever is tightest). Every other entry type omits a parent field — the parent is resolved by looking the entry's `location` up in `topography.yaml`: + - **project** `zone:` on the entry when the project sits inside a formal REZ; otherwise `subregion:` as the tightest known parent. Topography does not track projects, so resources must carry this. + - **zone** / **drez**: parent subregion is `topography["zones"][location]`. + - **subregion**: parent region is `topography["subregions"][location]`. + + The resolver would be a single small python function (not yet implemented). + - **Schema validation could be implemented**: (in a way that a parallels the resolver) + +2) **`iasr_aliases` is always a list, including the empty list**. Idea is that keeps downstream code on a single branch and distinguishes "no IASR equivalent" (empty list) from "schema error" (missing key). + 1) Chose more neutral "iasr_alias" - "iasr_id" is new (and maybe might change? - and there is no "iasr_id" in 2024 ISP, but there is human readable generator names). Ie. the type of identifier not encoded in scheme . + + +### 3. Topography YAML: normalised hierarchy + +```yaml +# mappings/2026/topography.yaml + +regions: [NSW, VIC, QLD, SA, TAS] + +subregions: + CNSW: NSW + NNSW: NSW + SNSW: NSW + VIC: VIC + CQ: QLD + NQ: QLD + SQ: QLD + CSA: SA + SESA: SA + TAS: TAS + +zones: + N0: CNSW # AEMO non-REZ NSW + V0: VIC # AEMO non-REZ VIC + Q1: NQ # Far North QLD + Q2: NQ # North Qld Clean Energy Hub + Q3: NQ # Northern Qld + Q4: CQ # Isaac + Q5: CQ # Barcaldine + # … +``` + +Each subregion/zone entry's value is its parent in the hierarchy + - in future, if something else needed here (e.g. display names / human readable names can be easily added - some extra details includes as comments for now ) + +AEMO's non-REZ zones (`N0`, `V0`) parent at a real subregion like every other zone (AEMO attributes "NSW Non-REZ" to `CNSW` and "Victoria Non-REZ" to `VIC` in its new-entrants modelling +inputs). This keeps every zone on the same `zone -> subregion -> region` +chain with no special case in the resolver. + +### 4. Demand YAML + +```yaml +# mappings/2026/demand.yaml + +scenarios: + "Step Change": step_change + "Progressive Change": progressive_change + "Green Energy Exports": green_energy_exports + +poe_levels: [POE10, POE50] + +demand_types: [OPSO_MODELLING, OPSO_MODELLING_PVLITE] +``` + +Demand filenames are a product / combination of these options, as well as`reference_year` and `subregion`. The YAML declares the each possible value rather than enumerating ~100+ valid combinations. + +The `subregion` axis is **not** redeclared here — it's resolved from `topography.yaml` (every subregion defined there is assumed to have a demand trace). This avoids a second list of subregion codes that has to stay in sync with the geography file. + +At load time the loader expands the vocabularies into a stem-keyed dict so the parser's ingest loop has the same shape as for resources. The asymmetry is in the YAML format (which matches each dataset's actual shape - and parser pipeline is the same). + +### 5. Ingest pipeline: mapping-driven, no regex + +Metadata extractors would be removed entirely. The ingest path becomes: + +``` +zip → ZipFile.namelist() → dict-lookup against mapping (fail loud on unknown) + → ZipFile.open(member) → polars.scan_csv → write parquet to output +``` + +The only thing extracted from the filename is `reference_year`, via a more simple `rpartition("_RefYear")` split. + +Unknown filenames raise `KeyError` rather than silently misclassifying. The mapping file is the canonical list of traces the parser supports. + +## Consequences + +### Positive + +- **No regex maintenance.** New AEMO filename patterns require a YAML edit, not a code change. +- **Loud failures.** Unmapped filenames raise; silent misclassification (#40) becomes impossible. +- **Single source of truth per version.** Three YAMLs per ISP version, all declarative; geography defined once and referenced. +- **Normalised geography.** Region → subregion → zone is defined once per ISP version. Resource entries carry only their tightest known parent; no per-entry duplication of upstream geography. +- **Uniform parser pipeline.** Resources and demand share the ingest loop; the difference is in two small loader functions. +- **Decoupled from IASR naming.** The parser is faithful to AEMO source data; IASR lookup is an optional layer via the reverse index built from `iasr_aliases`. +- **Reviewable.** YAML diffs are easy to inspect; adding a trace is one block. +- **Resolution-agnostic.** DREZs, Distributed Resources, and any future new entity kinds are accommodated by adding a `location_type` value, not by special-casing filename shapes. +### Negative + +- **Update cost.** New ISP versions require writing the resources YAML up front. + - (though easier than updating regex!) +- **Redundancy on moderately common case.** For 1:1 traces, the key duplicates + one entry of `iasr_aliases`. Acceptable redundancy +- **Different YAML shapes.** Resources are entity-keyed; demand is option-keyed; geography is a small dimension file. +- **Mutual-exclusion check on projects.** A `project` entry must carry exactly one of `zone:` / `subregion:` (both present, or neither, is a schema error. A trivial load-time check. +- **Cross-file integrity.** `zone:` and `subregion:` values in `resources.yaml` must exist in `topography.yaml`; this is now a load-time check rather than an implicit assumption. + +## Alternatives considered + +### IASR-identifier-keyed YAML + +Key by IASR generator/REZ identifier; trace filenames as values. + +Rejected because: + +- Most 2024 entries have no IASR generator identifier, forcing the something else to be the key anyway. +- The parser ingest path is filename → metadata + - (trace-keyed gives that direct, IASR-keyed requires a reverse index). + - Checks and look up between YAML and `ZipFile.namelist()` are easier when keyed by trace stem. + +The reverse index (alias → trace stems) needed by user-facing `get_data`is straight forward for uses that want to select processed data by IASR names or ID's (iasr_alias) + +### Separate YAMLs for projects and zones + +Rejected because the source CSVs are co-located, and the project-vs-zone classification problem at parse time is kind of the exactly the regex problem this ADR tries removes. With `location_type` (i.e project/zone) adds more files / schemas for no gain (afact) + +### Denormalised geography (region/subregion/zone on every entry) + +Earlier discussion considered carrying `region`, `subregion`, and `rez` as fields on every resource entry. Rejected because: + +- Region duplicates information already implied by subregion (10 → 5 + values) - essentially a DRY argument. +- Subregion duplicates information already implied by zone (≥40 → 10 + values) - also DRY. +- Three fields per entry must be kept consistent with each other by + convention; with hundreds of entries the duplication is a real + maintenance and review surface (potential maintainance issue and/or easier to make a mistake. + +The original idea of keeping it all co-location / together explicitly was essentially for +review-ability / ease of reading. Considered that `topography.yaml` itself actually easier to review / maintain (for example, any diffs to heirachy only change one file in one place, rather than hundreds of lines in a a file ). + +Replaced by `topography.yaml` plus a single tightest-parent field on each entry. + +### Parent-pointer shape on resource entries (e.g. `parent: {zone: N6}`) + +Considered as a way to keep the schema uniform - every resource entry has exactly one `parent:` map regardless of whether it points at a zone or a subregion. + +Rejected in favour of flat `zone:` / `subregion:` fields because flat fields are more skimmable / readable (imho) and the uniformity argument matters more in `topography.yaml` than in `resources.yaml` (which is read/reviewed/edited by humans - hopefully). + +### Replacing `zone:` / `subregion:` with `location:` + +Considered as a way to give every resource entry an identical shape regardless of `location_type`(i.e. drop `zone` and `subregion` from resources entirely and have a single `location` field resolved via `topography.yaml`'s `projects` / `zones` / `subregions` sections to derive the geographic parent). + +Rejected because the "complexity" it removes is essentially avoided a two-line helper: + +```python +def parent_id(entry): + return entry.get("zone") or entry.get("subregion") +``` + + +Centralising it behind a `location` field would: + +- Add a new `projects:` section to `topography.yaml` mapping each project to its zone, duplicating the project namespace across `resources.yaml` (as keys) and `topography.yaml` (as `projects:` keys), which then have to agree. +- Replace a direct, self-contained item with two entries (ie. a reader/reviewer would have to jump to `topography.yaml` for every project entry entry) +- Provide no additional information that isn't already derivable from the direct fields ( the helper above is does that). + +### All geographic fields on every entry (nullable) + +Considered as a way to make every entry uniform *without* the above issues - that is every entry carries both `zone:` and `subregion:` (and any future levels), with values explicitly null where they don't apply. + +Rejected because of additional verbosity *and* raises a potential consistency problem: with both `zone` and `subregion` storable on the same entry, the two can drift (someone updates one, forgets / doesn't properly update the other, or sets a zone whose subregion contradicts the stored value). + +`topography.yaml` already encodes the zone → subregion relationship canonically; replicating it inline on every entry adds complexity for no readability gain. + +### Explicit demand `subregions:` list in demand YAML + +Also discuess a enumerated list of the demand-trace subregions in `demand.yaml`. + +Rejected once `topography.yaml` exists, because the list would have to stay in sync with the subregions defined there. + +## References + +- GitHub discussions + [#41](https://github.com/Open-ISP/isp-trace-parser/discussions/41), + [#42](https://github.com/Open-ISP/isp-trace-parser/discussions/42) +- Issues #36, #39, #40 From 573c1a701b97ff388ab6120bcc0daecebb4692f7 Mon Sep 17 00:00:00 2001 From: Dylan McConnell Date: Thu, 28 May 2026 10:48:22 +1000 Subject: [PATCH 09/12] Update 001-trace-name-mapping.md Minor typo's / fixes to issue linking --- docs/adr/001-trace-name-mapping.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/adr/001-trace-name-mapping.md b/docs/adr/001-trace-name-mapping.md index 358f308..cf00f6f 100644 --- a/docs/adr/001-trace-name-mapping.md +++ b/docs/adr/001-trace-name-mapping.md @@ -11,8 +11,8 @@ This ADR *only* relates to format of trace *mapping* data - not it's downstream ## Context -The 2026 ISP trace data introduces new filename patterns (DREZs, Distributed Resources, split Q8 zones - see issue #36) that the existing regex-based metadata extractors -misclassify (issue #40). +The 2026 ISP trace data introduces new filename patterns (DREZs, Distributed Resources, split Q8 zones - see issue #36 ) that the existing regex-based metadata extractors +misclassify (issue #40 ). Updating / integrating these new traces presents an opportunity to streamline and improve the current approach. @@ -25,7 +25,7 @@ Characteristics of the current approach: - **Project/zone split.** The parser distinguishes "project" (named generator) from "zone" (REZ) traces, but the CSVs are all co-located in a single folder per reference year (the distinction is also re-derived from filename shape). - **Silent misclassification & misses classificiation.** Some patterns match *any* `*_RefYear.csv`, so unrecognised filenames silently fall - through with `file_type="project"`, `resource_type="WIND"` (see # issue 36). Some trace + through with `file_type="project"`, `resource_type="WIND"` (see issue #36 ). Some trace ### Issues with current approach and new data: 1) The 2026 data includes new that don't fit the project/zone split cleanly: Distributed Resources are at ISP subregion resolution; DREZs are REZ-like but distinct. From 4171cd7f8bc6588fe2700fb027545eeee0d15cf0 Mon Sep 17 00:00:00 2001 From: Dylan McConnell Date: Thu, 28 May 2026 10:53:20 +1000 Subject: [PATCH 10/12] Updated issue linking in ADR --- docs/adr/001-trace-name-mapping.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/adr/001-trace-name-mapping.md b/docs/adr/001-trace-name-mapping.md index cf00f6f..f9eaff1 100644 --- a/docs/adr/001-trace-name-mapping.md +++ b/docs/adr/001-trace-name-mapping.md @@ -11,8 +11,8 @@ This ADR *only* relates to format of trace *mapping* data - not it's downstream ## Context -The 2026 ISP trace data introduces new filename patterns (DREZs, Distributed Resources, split Q8 zones - see issue #36 ) that the existing regex-based metadata extractors -misclassify (issue #40 ). +The 2026 ISP trace data introduces new filename patterns (DREZs, Distributed Resources, split Q8 zones - see issue [#36](https://github.com/Open-ISP/isp-trace-parser/issues/36)) that the existing regex-based metadata extractors +misclassify (issue [#40](https://github.com/Open-ISP/isp-trace-parser/issues/40)). Updating / integrating these new traces presents an opportunity to streamline and improve the current approach. @@ -25,7 +25,7 @@ Characteristics of the current approach: - **Project/zone split.** The parser distinguishes "project" (named generator) from "zone" (REZ) traces, but the CSVs are all co-located in a single folder per reference year (the distinction is also re-derived from filename shape). - **Silent misclassification & misses classificiation.** Some patterns match *any* `*_RefYear.csv`, so unrecognised filenames silently fall - through with `file_type="project"`, `resource_type="WIND"` (see issue #36 ). Some trace + through with `file_type="project"`, `resource_type="WIND"` (see issue [#36](https://github.com/Open-ISP/isp-trace-parser/issues/36)). Some trace ### Issues with current approach and new data: 1) The 2026 data includes new that don't fit the project/zone split cleanly: Distributed Resources are at ISP subregion resolution; DREZs are REZ-like but distinct. @@ -218,7 +218,7 @@ Unknown filenames raise `KeyError` rather than silently misclassifying. The mapp ### Positive - **No regex maintenance.** New AEMO filename patterns require a YAML edit, not a code change. -- **Loud failures.** Unmapped filenames raise; silent misclassification (#40) becomes impossible. +- **Loud failures.** Unmapped filenames raise; silent misclassification ([#40](https://github.com/Open-ISP/isp-trace-parser/issues/40)) becomes impossible. - **Single source of truth per version.** Three YAMLs per ISP version, all declarative; geography defined once and referenced. - **Normalised geography.** Region → subregion → zone is defined once per ISP version. Resource entries carry only their tightest known parent; no per-entry duplication of upstream geography. - **Uniform parser pipeline.** Resources and demand share the ingest loop; the difference is in two small loader functions. @@ -314,4 +314,4 @@ Rejected once `topography.yaml` exists, because the list would have to stay in s - GitHub discussions [#41](https://github.com/Open-ISP/isp-trace-parser/discussions/41), [#42](https://github.com/Open-ISP/isp-trace-parser/discussions/42) -- Issues #36, #39, #40 +- Issues [#36](https://github.com/Open-ISP/isp-trace-parser/issues/36), [#39](https://github.com/Open-ISP/isp-trace-parser/issues/39), [#40](https://github.com/Open-ISP/isp-trace-parser/issues/40) From cf9c22238a5b587b9af7f19c8a05894ad162adf6 Mon Sep 17 00:00:00 2001 From: Dylan McConnell Date: Thu, 28 May 2026 10:59:34 +1000 Subject: [PATCH 11/12] Fixed tabs / whitespace issue --- docs/adr/001-trace-name-mapping.md | 32 +++++++++++++++--------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/docs/adr/001-trace-name-mapping.md b/docs/adr/001-trace-name-mapping.md index f9eaff1..b13da2b 100644 --- a/docs/adr/001-trace-name-mapping.md +++ b/docs/adr/001-trace-name-mapping.md @@ -20,8 +20,8 @@ Characteristics of the current approach: - **Filename reconstruction in code.** Metadata is extracted from input filenames via regex, then output filenames are reconstructed from that metadata. Every new AEMO filename pattern requires a regex change. - **Partial mapping also exits:** Mapping does exist, but for trace names to IASR names only) - - **Four mapping files per ISP version.** `solar_project_mapping.yaml`,`wind_project_mapping.yaml`, `solar_zone_mapping.yaml`,`wind_zone_mapping.yaml` (each with its own conventions - and the zone_maps being largely redundant) - - (**Coupling to IASR naming.** - downstream issue, but parsed output filenames are rewritten to IASR conventions, which couples) + - **Four mapping files per ISP version.** `solar_project_mapping.yaml`,`wind_project_mapping.yaml`, `solar_zone_mapping.yaml`,`wind_zone_mapping.yaml` (each with its own conventions - and the zone_maps being largely redundant) + - (**Coupling to IASR naming.** - downstream issue, but parsed output filenames are rewritten to IASR conventions, which couples) - **Project/zone split.** The parser distinguishes "project" (named generator) from "zone" (REZ) traces, but the CSVs are all co-located in a single folder per reference year (the distinction is also re-derived from filename shape). - **Silent misclassification & misses classificiation.** Some patterns match *any* `*_RefYear.csv`, so unrecognised filenames silently fall @@ -31,12 +31,12 @@ Characteristics of the current approach: 1) The 2026 data includes new that don't fit the project/zone split cleanly: Distributed Resources are at ISP subregion resolution; DREZs are REZ-like but distinct. 2) AEMO's conventions also differ across ISP versions: - - **ISP-2024**: no formal IASR identifier. Generators are referred to by a human-readable name (e.g. `"Bango 973 Wind Farm"`). - - **ISP-2026**: introduces a formal IASR ID, in addition to the human-readable name. + - **ISP-2024**: no formal IASR identifier. Generators are referred to by a human-readable name (e.g. `"Bango 973 Wind Farm"`). + - **ISP-2026**: introduces a formal IASR ID, in addition to the human-readable name. -- 3) Maintaining regex patterns that work across multiple / new AEMO formats sound like a literal nightmare (noting that we will continue to get updated traces in the future) +3) Maintaining regex patterns that work across multiple / new AEMO formats sound like a literal nightmare (noting that we will continue to get updated traces in the future) -- 4) Maintaining 4 resource maps per ISP also annoying (noting that IASR ID doesn't exist for 2024 ISP, and the mappings are already not internally consistent structures anyway) +4) Maintaining 4 resource maps per ISP also annoying (noting that IASR ID doesn't exist for 2024 ISP, and the mappings are already not internally consistent structures anyway) We already do (partial) mapping with - this ADR proposes a full ***explicit*** mapping for each ISP (or source) version @@ -131,15 +131,15 @@ The parser would extract `reference_year` by a single `rpartition("_RefYear")`sp ### Notes: 1) **Asymmetric parent storage.** Only `project` entries carry an explicit parent (`zone:` or `subregion:`, whichever is tightest). Every other entry type omits a parent field — the parent is resolved by looking the entry's `location` up in `topography.yaml`: - - **project** `zone:` on the entry when the project sits inside a formal REZ; otherwise `subregion:` as the tightest known parent. Topography does not track projects, so resources must carry this. - - **zone** / **drez**: parent subregion is `topography["zones"][location]`. - - **subregion**: parent region is `topography["subregions"][location]`. + - **project** `zone:` on the entry when the project sits inside a formal REZ; otherwise `subregion:` as the tightest known parent. Topography does not track projects, so resources must carry this. + - **zone** / **drez**: parent subregion is `topography["zones"][location]`. + - **subregion**: parent region is `topography["subregions"][location]`. - The resolver would be a single small python function (not yet implemented). - - **Schema validation could be implemented**: (in a way that a parallels the resolver) + The resolver would be a single small python function (not yet implemented). + - **Schema validation could be implemented**: (in a way that a parallels the resolver) 2) **`iasr_aliases` is always a list, including the empty list**. Idea is that keeps downstream code on a single branch and distinguishes "no IASR equivalent" (empty list) from "schema error" (missing key). - 1) Chose more neutral "iasr_alias" - "iasr_id" is new (and maybe might change? - and there is no "iasr_id" in 2024 ISP, but there is human readable generator names). Ie. the type of identifier not encoded in scheme . + 1) Chose more neutral "iasr_alias" - "iasr_id" is new (and maybe might change? - and there is no "iasr_id" in 2024 ISP, but there is human readable generator names). Ie. the type of identifier not encoded in scheme . ### 3. Topography YAML: normalised hierarchy @@ -173,7 +173,7 @@ zones: ``` Each subregion/zone entry's value is its parent in the hierarchy - - in future, if something else needed here (e.g. display names / human readable names can be easily added - some extra details includes as comments for now ) + - in future, if something else needed here (e.g. display names / human readable names can be easily added - some extra details includes as comments for now ) AEMO's non-REZ zones (`N0`, `V0`) parent at a real subregion like every other zone (AEMO attributes "NSW Non-REZ" to `CNSW` and "Victoria Non-REZ" to `VIC` in its new-entrants modelling inputs). This keeps every zone on the same `zone -> subregion -> region` @@ -228,7 +228,7 @@ Unknown filenames raise `KeyError` rather than silently misclassifying. The mapp ### Negative - **Update cost.** New ISP versions require writing the resources YAML up front. - - (though easier than updating regex!) + - (though easier than updating regex!) - **Redundancy on moderately common case.** For 1:1 traces, the key duplicates one entry of `iasr_aliases`. Acceptable redundancy - **Different YAML shapes.** Resources are entity-keyed; demand is option-keyed; geography is a small dimension file. @@ -245,8 +245,8 @@ Rejected because: - Most 2024 entries have no IASR generator identifier, forcing the something else to be the key anyway. - The parser ingest path is filename → metadata - - (trace-keyed gives that direct, IASR-keyed requires a reverse index). - - Checks and look up between YAML and `ZipFile.namelist()` are easier when keyed by trace stem. + - (trace-keyed gives that direct, IASR-keyed requires a reverse index). + - Checks and look up between YAML and `ZipFile.namelist()` are easier when keyed by trace stem. The reverse index (alias → trace stems) needed by user-facing `get_data`is straight forward for uses that want to select processed data by IASR names or ID's (iasr_alias) From b1aa0b405bdd4e50d26df7d01d47542db64deeb2 Mon Sep 17 00:00:00 2001 From: Dylan McConnell Date: Wed, 3 Jun 2026 13:12:12 +1000 Subject: [PATCH 12/12] Remove / re-mapped T5 to T4 (T5 didn't really exist in the final 2024 ISP, but did in the trace names in some older IASR workbooks. See PR #52) --- src/isp_trace_parser/mappings/2024/resources.yaml | 4 ++-- src/isp_trace_parser/mappings/2024/topography.yaml | 3 +-- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/src/isp_trace_parser/mappings/2024/resources.yaml b/src/isp_trace_parser/mappings/2024/resources.yaml index ca190ce..28be17a 100644 --- a/src/isp_trace_parser/mappings/2024/resources.yaml +++ b/src/isp_trace_parser/mappings/2024/resources.yaml @@ -2457,12 +2457,12 @@ T4_WFX_North_West_Tasmania_Coast: T5_WFL_North_East_Tasmania_Coast: location_type: zone - location: T5 + location: T4 resource_type: wind_offshore_floating iasr_aliases: [] T5_WFX_North_East_Tasmania_Coast: location_type: zone - location: T5 + location: T4 resource_type: wind_offshore_fixed iasr_aliases: [] diff --git a/src/isp_trace_parser/mappings/2024/topography.yaml b/src/isp_trace_parser/mappings/2024/topography.yaml index c7bdae0..824cc1a 100644 --- a/src/isp_trace_parser/mappings/2024/topography.yaml +++ b/src/isp_trace_parser/mappings/2024/topography.yaml @@ -73,5 +73,4 @@ zones: T1: TAS # North East Tasmania T2: TAS # North West Tasmania T3: TAS # Central Highlands - T4: TAS # North West Tasmania Coast - T5: TAS # North East Tasmania Coast + T4: TAS # North Tasmania Coast